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+JyBzaG91bGQgd29yayBub3cuCisgICAgICAtIFtQQVRDSCAyMTg0MDM5XTogRml4ZXMgZm9yIGZyZWVpbmcgbWVtb3J5IGR1cmluZyBlcnJvciBjb25kaXRpb25zLgorICAgICAgLSBbUEFUQ0ggMjc5NzI1MV06IFN1cHBvcnQgbXVsdGlwbGUgaW5pdGlhbGlzYXRpb24vc2h1dGRvd24sIGZpeCBtZW1vcnkgbGVha3MKKyAgICAgIC0gQWRkIGEgdmFyaWF0aW9uIG9mIEFDX1NFQVJDSF9MSUJTIHdoZXJlIHRoZSByZXN1bHQgaXMgc2V0dGFibGUuCisgICAgICAtIEFkZCAiQnVpbGRSZXF1aXJlczogcGVybC1FeHRVdGlscy1FbWJlZCIgdG8gdGhlIHNwZWMgZmlsZQorICAgICAgLSBBZGQgJy0td2l0aC10ZW1wLWZpbGUtcGF0dGVybicgY29uZmlndXJlIG9wdGlvbgorICAgICAgLSBBc3N1bWUgdGFyZ2V0IHBsYXRmb3JtIHN1cHBvcnRzIG1lbXtjcHksbW92ZSxzZXR9ICYgc3RyeyxyfWNocgorICAgICAgLSBEaXNhYmxlIGlubGluaW5nIG9uIHNvbGFyaXMgKGR1ZSB0byBsaW5raW5nIGVycm9ycykKKyAgICAgIC0gRGlzYWJsZSBNSUItc3BlY2lmaWMgdGVzdHMgaWYgdGhlIGFnZW50IG9taXRzIHRoZSBuZWNlc3NhcnkgbW9kdWxlcy4KKyAgICAgIC0gJy0tZGlzYWJsZS1hcy1uZWVkZWQnIHJldmVydHMgdG8gbGlua2luZyBzeXN0ZW0gbGlicyBpbnRvIGFwcGxpY2F0aW9ucworICAgICAgLSBEbyBub3QgY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykgaWYgbm90aGluZyBmcm9tIHV0aWxfZnVuY3MgaXMgdXNlZAorICAgICAgLSBEbyBub3QgcmVxdWlyZSB1c2Ugb2YgLS13aXRoLWVuZGlhbm5lc3Mgd2hlbiBjcm9zcy1jb21waWxpbmcuCisgICAgICAtIEZpeCBidWlsZCBpc3N1ZXMgd2l0aCBldGh0b29sIChvbiBSSDkpLgorICAgICAgLSBGaXggY2hlY2tzIGZvciBzdXBwb3J0IG9mIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zCisgICAgICAtIEZpeCBjb21waWxhdGlvbiBvbiBJUklYCisgICAgICAtIEZpeCBtYWNybyBmb3IgJy0td2l0aC1mZWF0dXJlcy1vZicKKyAgICAgIC0gSW1wcm92ZSBsaWJyYXJ5IGxheWVyaW5nICYgZGVwZW5kZW5jeSBoYW5kbGluZyB3aGVuIGxpbmtpbmcgYXBwcworICAgICAgLSBJbXByb3ZlIHJvYnVzdG5lc3Mgb2Ygc2VkL2dyZXAvZXRjIGNvbW1hbnMgKHVzaW5nIGF1dG9jb25mIG1hY3JvcykKKyAgICAgIC0gSW1wcm92ZSBSUE0gc3BlYyBmaWxlcywgZm9yIGNvbnNpc3RlbmN5IHdpdGggdmVuZG9yLXByb3ZpZGVkIHBhY2thZ2VzLgorICAgICAgLSBNZWNoYW5pc20gZm9yIHNlbGVjdGluZyBidWlsZCBlbnZpcm9ubWVudCBiYXNlZCBvbiB2ZXJzaW9uCisgICAgICAtIE5ldyBORVRTTk1QX0FSR19XSVRIL0VOQUJMRSBtYWNyb3MgdG8gY2F0Y2ggaW5jb3JyZWN0ICd3aXRoL2VuYWJsZScgdXNhZ2UKKyAgICAgIC0gJy0tZW5hYmxlLWlwdjYnIHNob3VsZCBvbmx5IGVuYWJsZSAnbWliSUkvaXB2Nicgb24gc3VwcG9ydGVkIHN5c3RlbXMKKyAgICAgIC0gUmVtb3ZlIE5ldC1TTk1QIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBvZiBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LgorICAgICAgLSBSZXN0cnVjdHVyZSBjb25maWd1cmUgdGVtcGxhdGUKKyAgICAgIC0gU3RyaWN0ZXIgY2hlY2tzIG9uICctLXdpdGgtcGVyc2lzdGVudC1tYXNrJyB2YWx1ZXMKKyAgICAgIC0gVXBkYXRlIHRvIGF1dG9jb25mIDIuNjMgJiBsaWJ0b29sIDIuMi42CisgICAgICAtIFVzZSAnY29uZmlnX2Vycm9yJyB0byBnZW5lcmF0ZSBlcnJvciBtZXNzYWdlcyBhdCBjb25maWd1cmUgdGltZS4KKyAgICAgIC0gVXNlIExERkxBR1Mgd2hlbiBidWlsZGluZyBhZ2VudCwgaGVscGVycyBhbmQgbWliIGxpYgorICAgICAgLSBVc2UgImxpYnRvb2wgY2xlYW4iIHRvIGVuc3VyZSByZW1vdmFsIG9mIGFsbCBsaWJ0b29sIHRlbXAgZmlsZXMuCisgICAgICAtIGFsbG93IGJ1aWxkaW5nIHdpdGggUGVybCB2ZXJzaW9ucyB0aGF0IGxhY2sgUEVSTF9FWElUX0RFU1RSVUNUX0VORAorICAgICAgLSBidWlsZCBmaXggZm9yIFRydTY0IFVuaXggYW5kIElSSVg6IG1vdmUgX1hPUEVOKiBkZWZpbml0aW9ucyB0bworCXdoZXJlIHRoZXkgYXJlIGluIDUuNC54IGFuZCBlYXJsaWVyCiAKICAgICBkb2N1bWVudGF0aW9uOgorICAgICAgLSBbQlVHIDEyNDcxNjRdOiBEb2N1bWVudCB1c2Ugb2YgT0lEIG1hY3JvcworICAgICAgLSBbQlVHIDE0MDc0NzZdOiBDbGFyaWZ5IE1JQiBwYXJzaW5nIHRvZ2dsZSBvcHRpb25zICYgY29tbWVudCBoYW5kbGluZy4KKyAgICAgIC0gW0JVRyAxNjE0MTA0XTogYnJva2VuIHNubXBkKDgpIG1hbnVhbCBwYWdlIGluIDUuNAogICAgICAgLSBbQlVHIDIwMjcxMjldOiBmaXggdHlwbyBpbiBzbm1wY21kLjEKKyAgICAgIC0gW1BBVENIIDE2MDQ1ODBdOiBTTk1QKDMpIG1hbnVhbCBwYWdlIGNvcnJlY3Rpb25zCisgICAgICAtIFtQQVRDSCAxNjQ0NzM1XTogQWRkIGdjYyBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIElSSVgKKyAgICAgIC0gRml4IG1pbm9yIGRvY3VtZW50YXRpb24gYnVncyAocGF0Y2ggZnJvbSBBcHBsZSkKKworICAgIG1pYjJjOgorICAgICAgLSBbQlVHICA4MzM2NzNdOiBNb3JlIGZvY3VzZWQgc2l6ZSBjaGVja3MuCisgICAgICAtIFtCVUcgMTQyOTQ3Ml06IFByb3RlY3QgYWdhaW5zdCBtaXNzaW5nIGluc3RhbmNlcyAoYW5kIGludmFsaWQgb2JqZWN0cykKKyAgICAgIC0gW0JVRyAxNTgyOTcyXTogSGFuZGxlIEB3aGlsZUAvQGVuZEAgcHJvcGVybHkuCisgICAgICAtIFtCVUcgMTczNzA2OF06IEhhbmRsZSBNSUIgb2JqZWN0cyB3aXRoIGVtYmVkZGVkIGh5cGhlbnMKKyAgICAgIC0gW0JVRyAxODc0MDU5XTogSGFuZGxlIE1JQiBvYmplY3RzIHdpdGggZW1iZWRkZWQgaHlwaGVucworICAgICAgLSBbUEFUQ0ggMTY2ODE3MV06IHNraXAgdW5rbm93biBjb2xzIGluIG1pbi9tYXggcmFuZ2UgZm9yIHRhYmxlcworICAgICAgLSBbUEFUQ0ggMTcxOTI0NF06IEZpeCBtZmQgZ2VuZXJhdGluZyBtYXAgZnVuY3Rpb24KKyAgICAgIC0gW1BBVENIIDE5MTQzOThdOiBpbnN0YWxsIG1pYjJjLnBlcmwuY29uZgorICAgICAgLSBbUEFUQ0ggMjEzNjQzN106IEltcHJvdmUgRkxBRyBkZWZpbmVzIGZvciBodWdlIHRhYmxlcyBvbiA2NGJpdCBzeXN0ZW1zCisgICAgICAtIFtQQVRDSCAyMzE2MTI3XTogRml4IGJ1ZyBpbiBpdGVyYXRlX2FjY2VzcyBnZW5lcmF0ZWQgY29kZS4KIAogICAgIG1pc2M6Ci0gICAgICAtIEF2b2lkIGNhbGxpbmcgZGVidWcgbWFjcm9zIHdpdGggdG9vIGZldy9tYW55IGFyZ3VtZW50cy4KLSAgICAgIC0gZW5oYW5jZSBzbm1wbmV0c3RhdCB0ZXN0IHRvIGNoZWNrIHRjcFRhYmxlIGluIFRDUCBtb2RlCisgICAgICAtIFtQQVRDSCAxNzM3NzI3XTogQWRkIGEgTkVUU05NUF9PTERBUElfIHByZWZpeCB0byBvbGQtYXBpIGFjY2VzcyBtYWNyb3MuCisgICAgICAtIFtQQVRDSCAxNzM3NzI3XTogUmVwbGFjZSBORVRTTk1QX0NMRUFOX05BTUVTUEFDRSB3aXRoIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisgICAgICAtIEFkZCBjb25maWcgcmVyZWFkIHN1cHBvcnQgdG8gIm5ldC1zbm1wLWNvbmZpZyAtLWNvbXBpbGUtc3ViYWdlbnQiIGNvZGUuCisgICAgICAtIEF2b2lkIGNhbGxpbmcgZGVidWcgbWFjcm9zIHdpdGggd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICAgIC0gRG9uJ3QgdXNlIHRoZSBsZWdhY3kgc3ltYm9sIFNOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWAorICAgICAgLSBQcmVsaW1pbmFyeSAoYWxwaGEpIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBTU0ggYW5kIERUTFMvVURQLgorICAgICAgLSBQcmVsaW1pbmFyeSAoYWxwaGEpIHN1cHBvcnQgZm9yIHRoZSBUU00gc2VjdXJpdHkgbW9kZWwKKyAgICAgIC0gU2VwYXJhdGUgdXNlciBtYW5hZ2VtZW50IGludG8gbmV3IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIHNjcmlwdAorCisgICAgdW5zcGVjaWZpZWQ6CisgICAgICAtIFtCVUcgMTU5NjYzOF06IG1lbW9yeSBsZWFrIGluIGlwQ2lkclJvdXRlVGFibGUsIGluZXRDaWRyUm91dGVUYWJsZQorICAgICAgLSBbQlVHIDE2MTE1MjRdOiBmaXggdGNwIGNvbm5lY3Rpb24gdGFibGUgZmQgbGVhaworICAgICAgLSBbQlVHIDE3OTM1NDVdOiBUYWtlIHRoZSBuYW1lIGZyb20gdGhlIHNvY2thZGRyX3VuIGluIG9yZGVyIHRvIGF2b2lkCisJICAgICAgICAgICAgICAgdHJhbnNwb3J0IHNwZWNpZmllcnMgYW5kIG90aGVyIGRlY29yYXRpb25zLgorICAgICAgLSBbQlVHIDE4MDE4MzVdOiBNdWx0aXBsZSBkZWZhdWx0IHRyYW5zcG9ydHMgZm9yIGFuIGFwcGxpY2F0aW9uLgorICAgICAgLSBbQlVHIDE4NTEwNDddOiBEb24ndCBjb250aW51ZSB0byBwcm9jZXNzIGEgY29ycnVwdCB3YXRjaGVkIHZhbHVlLgorICAgICAgLSBbUEFUQ0ggMTYwMTQ1M106IER5bmFtaWMgTWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgaW1wcm92ZW1lbnRzCisgICAgICAtIFtQQVRDSCAxNjc0Mjk4XTogUmVtb3ZlIHVudXNlZCBzaW5rcG9ydCB2YXJpYWJsZQorICAgICAgLSBbUEFUQ0ggMTY3NDI5OV06IExlc3NlbiBzY29wZSBvZiB6b25lIHZhcmlhYmxlIGluIGR1bXBfcmVhbGxvY19vaWRfdG9faW5ldGFkZHJlc3MKKyAgICAgIC0gW1BBVENIIDE2NzQzMDJdOiBMZXNzZW4gc2NvcGUgb2YgbGVuIHZhcmlhYmxlIGluIGNvbnZlcnRfdjJwZHVfdG9fdjEKKyAgICAgIC0gW1BBVENIIDE2NzgyOThdOiBjb21waWxlLXN1YmFnZW50IGNoZWNrcyBmb3IgYmFkIEhBVkVfU0lHTkFMX0gKKyAgICAgIC0gW1BBVENIIDE2NzgzMDJdOiBuZXRzbm1wX21pYmluZGV4X2xvYWQgbGVha3MgbWVtb3J5CisgICAgICAtIFtQQVRDSCAxNjgxMDM1XTogSW1wcm92ZSBuZXQtc25tcC1jb25maWcgL2Jpbi9zaCBjb21wYXRpYmlsaXR5CisgICAgICAtIFtQQVRDSCAxOTAyMTA1XTogSGlkZSBhbmQgaW1wcm92ZSBkZWJ1ZyBsb2cgbWVzc2FnZXMKKyAgICAgIC0gW1BBVENIIDE5MDIxMTNdOiBGaXggZXJyb3IgbG9nIGluIGluZXROZXRUb01lZGlhdGFibGUKKyAgICAgIC0gRml4IGZvciByZWZzIHRvIE9CSkVDVC1HUk9VUCBpbiBhbm90aGVyIE1JQgorICAgICAgLSBJbml0YWxpemUgbG9nIHN1YnN5c3RlbQorICAgICAgLSBSZW1vdmUgc3VwcG9ydCBmb3IgdXNlIG9mIHZhcmFyZ3MuaC4KIAogICAgIHBlcmw6CisgICAgICAtIFtCVUcgMTQ1MDY2OV06IGEgcGVybCBhZ2VudHggY29uc3VtZXMgbWVtb3J5CisgICAgICAtIFtCVUcgMTU1NDgxN106IEZpeCBjbGFzcyBhc3NpZ21lbnQgc28gZ2V0Um9vdE9JRCB3b3JrcyBwcm9wZXJseS4KICAgICAgIC0gW0JVRyAxNjA2MDYyXTogcGVybCBidWxrd2FsayAoYXN5bmMpIGNvcmVkdW1wCisgICAgICAtIFtCVUcgMTYxOTgyN106IGltcHJvdmUgaGFuZGxpbmcgb2YgbGluayBkZXBlbmRlbmNpZXMKICAgICAgIC0gW0JVRyAxNzQ3NzMzXTogTW9yZSByb2J1c3QgaGFuZGxpbmcgb2YgdW5kZWZpbmVkIHZhbHVlcy4KLSAgICAgIC0gW0JVRyAxODI2MTc0XTogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHByaW50aW5nIHZhbHVlcy4KICAgICAgIC0gW0JVRyAxODM0NTM5XTogQ29uc2lzdGVudCBoYW5kbGluZyBvZiBPSUQgcGFyc2luZy4KKyAgICAgIC0gW1BBVENIIDE2Mjc5NDldOiBhIHBlcmwgYWdlbnR4IGNvbnN1bWVzIG1lbW9yeQorICAgICAgLSBbUEFUQ0ggMTcyNTA0OV06IEZpeCBidWxrd2FsayBpbiBjYXNlcyBvZiBub24tcmVwZWF0ZXIgdXNhZ2UuCiAgICAgICAtIFtQQVRDSCAxODExNDYzXTogcGVybCBhc3luYyBjYWxsYmFjayBjb3JlZHVtcAorICAgICAgLSBbUEFUQ0ggMTgzNDk4M106IENvbnNpc3RlbnQgaGFuZGxpbmcgb2YgT0lEIHBhcnNpbmcuCiAgICAgICAtIFtQQVRDSCAxOTE0MzkzXTogcmVnaXN0ZXJBZ2VudCBjYW4gbm93IGJlIHJ1biBtdWx0aXBsZSB0aW1lcwogICAgICAgLSBbUEFUQ0ggMTkxNDY0M106IGZpeCBpc3N1ZXMgd2l0aCBlbWJlZGRlZCBwZXJsCiAgICAgICAtIFtQQVRDSCAxOTE0NjQ1XTogYmV0dGVyIGVuZCBvZiBtaWIgc3VwcG9ydAogICAgICAgLSBbUEFUQ0ggMTkyMDM5MF06IGZpeCByZWdpc3RyYXRpb24gb2YgdGFibGVzIHdpdGggLjAgYXMgSUlEcwotICAgICAgLSBbUEFUQ0ggMjAyMTQ0NF06IFN1cHBvcnQgU05NUHYyYyBpbiBnZXR0YWJsZQotICAgICAgLSBmaXhlZCBhbiBleHRyYSBicmFjZSBpbiB0aGUgZG9jcyBwb2ludGVkIG91dCBieSBKYXNvbiBNYXJ0aW4KLQotICAgIHB5dGhvbjoKLSAgICAgIC0gW0JVRyAxODI2MTc0XTogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHByaW50aW5nIHZhbHVlcwotICAgICAgLSBbQlVHIDE4NjgyNzhdOiBQeXRob24gc2VnZmF1bHQgKGludHJvZHVjZWQgYnkgcjE2OTYyKQotICAgICAgLSBbUEFUQ0ggMTg2MjE3N106IG1hZGUgY29kZSBtb3JlIHdpbmRvd3MvY3lnd2luIGNvbXBpbGVyIGZyaWVuZGx5Ci0gICAgICAtIFtQQVRDSCAxODc3ODQwXTogZml4IE1JQiBsYWJlbCBhbmQgaW5kZXhpbmcgZHVlIHRvIGJyb2tlbiByZWdleHAKLQotICAgIEFJWDoKLSAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIEFJWCA2LnguCi0KLSAgICBMaW51eDoKLSAgICAgIC0gW1BBVENIIDE5Njk2MjddOiBIYW5kbGUgZW1wdHkgL2V0Yy9zeXNjb25maWcvbmV0d29yayBmaWxlCi0gICAgICAtIEltcHJvdmVkIFJQTSBzcGVjIGZpbGVzLCBmb3IgYmV0dGVyIGNvbnNpc3RlbmN5IHdpdGgKLSAgICAgICAgdmVuZG9yLXByb3ZpZGVkIHBhY2thZ2VzCi0KLSAgICBTb2xhcmlzOgotICAgICAgLSBbQlVHIDE4MTA4MTRdOiB0Y3BUYWJsZSBtaXNzaW5nIGVudHJpZXMgYW5kIHdyb25nIHBvcnRzCi0gICAgICAtIFtQQVRDSCAxODI0MTk2XToge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0gcmVwb3J0ZWQgaW5jb3JyZWN0bHkKLSAgICAgIC0gW1BBVENIIDE4MzQ2OTldOiBGaXggMTgzMzI5NDogRExQSSBwcm9ibGVtcyBvbiBTb2xhcmlzIDIuNgotICAgICAgLSAjZGVmaW5lIE5FV19NSUJfQ09NUExJQU5UIHRvIHN1cHBvcnQgU29sYXJpcyAxMFU0KwotCi0qIDUuNC4xICoKLQotICAgIHNubXBsaWI6Ci0gICAgICAtIENoYW5nZSBzbm1wX3Nlc3NfYWRkX2V4IHRvIGNvbnNpc3RlbnRseSBjbG9zZSBhbmQKLSAgICAgIC0gRGVhbGxvY2F0ZSB0aGUgY29uZm1pYnMgYW5kIGNvbmZtaWJkaXJzCi0gICAgICAtIEZFQVRVUkVTOiAxMDQxODg4OiBDaGVjayBkaXJlY3RvcnkgcGF0aHMgZm9yCi0gICAgICAtIEZFQVRVUkVTOiA4NTE4ODc6IFJlcG9ydCByYW5nZSBpbmZvcm1hdGlvbiBmb3IKLSAgICAgIC0gUmVhZCB0aGUgY29uZmlnIHBhcmFtZXRlcnMgZGVmVGFyZ2V0IGFuZAotICAgICAgLSBVc2UgdGhlIGRlZmF1bHRfdGFyZ2V0IGFyZ3VtZW50IGlmIGl0IGlzCi0gICAgICAtIFtCVUcgMTYwMDE3MV06IFN1cHBvcnQgbG9uZ2VyIGNvbW11bml0eSBzdHJpbmdzCi0gICAgICAtIFtCVUcgMTYxOTgyN106IGxpbmsgYWdhaW5zdCBuZWVkZWQgZXh0ZXJuYWwKLSAgICAgIC0gW0JVRyAxNjE5ODI3XTogbGluayBuZXQtc25tcCBsaWJyYXJpZXMgYW5kIGJpbmFyaWVzCi0gICAgICAtIFtCVUcgMTY2MDA2MV06IFZhbGlkYXRlIGVuZ2luZUlEcyBtb3JlIHN0cmljdGx5LgotICAgICAgLSBbUEFUQ0ggMTU0ODY3MF06IEZpeCByYW5nZSBjaGVja3MgZm9yIHVuc2lnbmVkCi0gICAgICAtIFtQQVRDSCAxNTkyNzA2XTogRml4IG1lbW9yeSBsZWFrIHdoZW4gY2xvbmluZwotICAgICAgLSBbUEFUQ0ggMTYxNjkxMl06IGZpeAotICAgICAgLSBbUEFUQ0ggMTYyMDQyNF06IEhvbm9yCi0gICAgICAtIFtQQVRDSCAxNjM0NjIwXTogRml4IGxlYWtzIGZyb20KLSAgICAgIC0gW1BBVENIIDE2NDAxMTRdOiBEb24ndCBzdG9yZSB0cmFpbGluZyBudWxsCi0gICAgICAtIFtQQVRDSCAxNjQxODk1XTogRXh0ZW5kIHNob3J0IHZpZXcgbWFza3MgKGFzIHBlcgotICAgICAgLSBbUEFUQ0ggMTY0MTk3Ml06IGFkZCBtaXNzaW5nIGNvbnN0Ci0gICAgICAtIFtQQVRDSCAxNjUzNjcwXTogQ29uc2lzdGVudCBTTk1QdjMgYmVoYXZpb3VyCi0gICAgICAtIFtQQVRDSCAxNjgxMDMwXTogQmV0dGVyIGhhbmRsaW5nIG9mIGVtcHR5Ci0gICAgICAtIFtQQVRDSCAxNjg3MzE2XTogRG9uJ3QgZHJvcCBjb25zdCBmcm9tIGNhc3RzLgotICAgICAgLSBbUEFUQ0ggMTY4NzMyNV06IEZpeCBwcm9ibGVtIHdpdGggb3BlcmF0b3IKLSAgICAgIC0gaW5jcmVtZW50ICJjdXJyZW50IiBhbmQgImFnZSIgYWNjb3JkaW5nIHRvCi0gICAgICAtIGxpYnJhcnkgbGF5ZXJpbmcgaW1wcm92ZW1lbnRzOiBpbnRyb2R1Y2UKLSAgICAgIC0gcGF0Y2g6IDE2NDU2OTg6IGZpeCA2NC1iaXQgc2lnbmVkIGludGVnZXIKLQotICAgIHNubXBhcGk6Ci0gICAgICAtIERvIG5vdCB1c2UgZ2V0c2VydmJ5bmFtZSB0byBmaW5kIGRlZmF1bHQgcG9ydAotCi0gICAgc25tcGQ6Ci0gICAgICAtIENvcnJlY3QgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gZm9yCi0gICAgICAtIFtCVUcgMTA0NjMyN106IFJlc2V0ICJpbmNsdWRlQWxsRGlza3MiIGZsYWcgd2hlbgotICAgICAgLSBbQlVHIDEwNzM3ODJdOiBSZXN0b3JlIFBlcmZTdGF0IHZhbHVlcyBmb3IgRnJlZUJTRAotICAgICAgLSBbQlVHIDExMDIwNThdOiBTa2lwIG5vbi1tb3VudGVkIGRpc2tzIChlLmcuIHN3YXAKLSAgICAgIC0gW0JVRyAxMTU5OTA4XTogRml4IG1lbW9yeSBsZWFrCi0gICAgICAtIFtCVUcgMTM5Nzg5NV06IGluY2x1ZGUgbWlzc2luZyBpbnRlcmZhY2UKLSAgICAgIC0gW0JVRyAxNDEzNzI4XTogUmVmZXJlbmNlIGluZGV4IHZhbHVlcyBpbiBkZWJ1ZwotICAgICAgLSBbQlVHIDE0MTYyNzZdOiBIYW5kbGUgZGVwZW5kZW5jeSBvbiBNSUIgcGFyc2luZwotICAgICAgLSBbQlVHIDE1NDY4MTddOiBGaXggc25tcEVudGVycHJpc2UgdmFyYmluZCB3aGVuCi0gICAgICAtIFtCVUcgMTU1ODgyM106IGZpeCBpcEFkZHJlc3NUYWJsZSBtZW1vcnkgbGVhawotICAgICAgLSBbQlVHIDE2MDAyNjFdOiBIYW5kbGUgbm9uLXg4NiAvcHJvYy9jcHVpbmZvIGZvcm1hdAotICAgICAgLSBbQlVHIDE2MDIyODZdOiBEb24ndCBsZXQgdGFibGUgaG9sZXMgYmxvY2sgbGF0ZXIKLSAgICAgIC0gW0JVRyAxNjI4NjEzXTogUmVzdG9yZSBtZW1Ub3RhbEZyZWUuMCBvbiBTb2xhcmlzCi0gICAgICAtIFtCVUcgMTYzMzU5NV06IEZpeCBBZ2VudFggaGFuZGxpbmcgb2YgQ291bnRlcjY0Ci0gICAgICAtIFtCVUcgMTY3NzA2M106IENoZWNrIGZvciBmYWlsZWQgbWFsbG9jIGNhbGxzLgotICAgICAgLSBbQlVHIDE2ODUwNjddOiBNb3JlIHByZWNpc2UgaGFuZGxpbmcgb2YKLSAgICAgIC0gW0JVRyAxNjg1MDgxXTogQ2hlY2sgZm9yIHZhbGlkIE9JRCBvbiBGcmVlL1VuZG8KLSAgICAgIC0gW0JVRyAxNzEyOTg4XTogZGVmYXVsdCBhbmQgY29uZmlndXJhYmxlIG1heGltdW0KLSAgICAgIC0gW0JVRyAxNzQ1MTEzXTogSGFuZGxlIHNpbmdsZS1saW5lIChhbmQgemVyby1saW5lKQotICAgICAgLSBbQlVHIDE3NjA2MzNdOiBmaXggdHlwbyBpbiBkZWJ1ZyBtZXNzYWdlCi0gICAgICAtIFtCVUcgOTAyNjEwXTogRG9uJ3QgZGlzY2FyZCBwZW5kaW5nIGRhdGEgZm9sbG93aW5nCi0gICAgICAtIFtCVUcgOTAyODAxXTogRml4IG9yZGVyaW5nIG9mIFNNVVgtcmVnaXN0ZXJlZAotICAgICAgLSBbUEFUQ0ggMTYwMTE4OCwgXTogQlVHOiAxNjAwNDMyOiBIYW5kbGUgc2lnbmFscwotICAgICAgLSBbUEFUQ0ggMTYyMDQyNF06IEZpeCBub3RpZmljYXRpb24gc2VuZGluZyBzbyB0aGF0Ci0gICAgICAtIFtQQVRDSCAxNjM3Mjg3XTogSGFuZGxlIG11bHRpcGxlIHRhcmdldCB0YWdzCi0gICAgICAtIFtQQVRDSCAxNjM5MjgyXTogU2F2ZSBwZXJzaXN0ZW50Ci0gICAgICAtIFtQQVRDSCAxNjM5MzYwXTogRml4IHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUKLSAgICAgIC0gW1BBVENIIDE2Mzk3MjZdOiBSZXBvcnQgcGh5c2ljYWwgbWVtb3J5Ci0gICAgICAtIFtQQVRDSCAxNjQxMzMyXTogSW5jbHVkZSBtaXNzaW5nIGFnZW50IGNvbmZpZwotICAgICAgLSBbUEFUQ0ggMTY0MTY4NV06IEhhbmRsZSB1bnJlc3BvbnNpdmUgQWdlbnRYCi0gICAgICAtIFtQQVRDSCAxNjQxODY1XTogRG9uJ3QgZG91YmxlIGNoZWNrIHNubXBUcmFwT0lECi0gICAgICAtIFtQQVRDSCAxNjQyMjU1XTogSGFuZGxlIHNhdmluZyBsb25nCi0gICAgICAtIFtQQVRDSCAxNjQ0MjgwXTogRG9uJ3QgYXV0b21hdGljYWxseSBwcm9iZSBmb3IKLSAgICAgIC0gW1BBVENIIDE2NDQyODBdOiBVc2UgdGhlIGNvcnJlY3QgZW5naW5lSUQgd2hlbgotICAgICAgLSBbUEFUQ0ggMTY0NDcxNF06IHJlcGxhY2UKLSAgICAgIC0gW1BBVENIIDE2NTk2MjNdOiBIYW5kbGUgU01VWCBwZWVycyB3aXRoIGFuIGVtcHR5Ci0gICAgICAtIFtQQVRDSCAxNjY1NTQ5XTogSGFuZGxlIGNyZWF0aW5nIFZBQ00gZW50cmllcwotICAgICAgLSBbUEFUQ0ggMTY2NTk4NV06IEltcGxlbWVudCBpcFJlYXNtVGltZW91dAotICAgICAgLSBbUEFUQ0ggMTY2NjczN106IGluY2x1ZGUgaXB2NiBjb3VudHMgaW4KLSAgICAgIC0gW1BBVENIIDE2NjgxOTNdOiBGaXggY2hlY2sgZm9yIHY2IFJlYXNtTWF4U2l6ZQotICAgICAgLSBbUEFUQ0ggMTY2ODE5M106IFVwZGF0ZSByZWdpc3RyYXRpb24gb2YKLSAgICAgIC0gW1BBVENIIDE2Njg5NTJdOiBJZ25vcmUgem9tYmllIHByb2Nlc3Nlcy4KLSAgICAgIC0gW1BBVENIIDE2NzY0NzhdOiBmaXggdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzCi0gICAgICAtIFtQQVRDSCAxNjc4Nzg4XTogQmV0dGVyIGhhbmRsaW5nIG9mIFNNVVggc29ja2V0Ci0gICAgICAtIFtQQVRDSCAxNjgzMDU0XTogc2V0IHVkcEVuZHBvaW50SW5zdGFuY2UgdG8KLSAgICAgIC0gW1BBVENIIDE2ODczMzZdOiBTdGFydCB1c2luZyB0aGUgZW5oYW5jZWQKLSAgICAgIC0gW1BBVENIIDE2OTI3NjhdOiBGaXggY29weWluZyBvZiBub24tb2N0ZXQtYWxpZ25lZAotICAgICAgLSBbUEFUQ0ggMTY5ODE4NF06IFJlZ2lzdGVyIG5vbi1kZWZhdWx0IGNvbnRleHQKLSAgICAgIC0gW1BBVENIIDE3MDA3MzBdOiBSZW1vdmUgdW51c2VkIGV4dGVybiBkZWNsYXJhdGlvbi4KLSAgICAgIC0gW1BBVENIIDE3MDA3MzJdOiBGaXggZGVidWcgb3V0cHV0IHN0YXRlbWVudHMuCi0gICAgICAtIFtQQVRDSCAxNzAwNzM3XTogVGlkeSB1cCBzZXRTZXJpYWxObwotICAgICAgLSBbUEFUQ0ggMTcyOTYyOV06IEZpeCBtZW1vcnkgbGVhayBpbiBkaXNtYW4KLSAgICAgIC0gcGF0Y2ggZnJvbSBXb2p0ZWsgSmF3b3IgdG8gaGFuZGxlIHJvdyBkZWxldGlvbgotICAgICAgLSBwYXRjaDogMTIyNTQ0MDogQXBwbHkgaW50ZW50IG9mIHBhdGNoOiB0byBkZWxheQotICAgICAgLSBwYXRjaDogMTU5NTU2ODogZnJvbSBjeXJpbF9tYXJnYXJpYTogZml4Ci0gICAgICAtIHBhdGNoOiAxNjE3MjU1OiBmaXggbGVuZ3RoIG9mIHRoZSBoaXN0b3J5IGFycmF5Ci0gICAgICAtIHBhdGNoOiAxNzAwMTU3OiBmcm9tIGFmcmlrYTogZml4ZXMgb3JkZXJpbmcgb2YgZXhlYwotICAgICAgLSBwYXRjaDogMTcxMDYzMjogZnJvbSBtYXZhcmxleTogZml4IG1lbW9yeSBsZWFrIG9uCi0gICAgICAtIHBhdGNoOiAxNzE5MjUzOiBmcm9tICJDaHJpc3RpYW4gSnVuZyI6IGZpeAotICAgICAgLSBwYXRjaDogMTcxOTI1NDogZnJvbSAiQ2hyaXN0YW4gSnVuZyI6IHVwZGF0ZQotCi0gICAgc25tcHRyYXBkOgotICAgICAgLSBbQlVHIDE2MzgyMjVdOiBGaXggaW50ZXJwcmV0YXRpb24gb2YgdHJhbnNwb3J0Ci0gICAgICAtIFtQQVRDSCAxNjIwNDI0XTogRml4IG5vdGlmaWNhdGlvbiByZWNlcHRpb24gc28KLSAgICAgIC0gcGF0Y2g6IDEyMjU0NDA6IEFwcGx5IGludGVudCBvZiBwYXRjaDogdG8KLSAgICAgIC0gdXBwb3J0IGZvciBmb3J3YXJkaW5nIHRyYXBzIGJ5IE9JRCBzdWJ0cmVlLgotCi0gICAgYXBwczoKLSAgICAgIC0gW0JVRyAxOTY0MTM2XTogRHJvcCBOVUxMIHR5cGUgZnJvbSBzbm1wc2V0IHVzYWdlCi0gICAgICAtIFtQQVRDSCAxNTI5NTIzXTogQ2xvc2UgU05NUCBzZXNzaW9uIG9uIGZhaWx1cmUuCi0KLSAgICBidWlsZDoKLSAgICAgIC0gTGluayBsaWJkbCBhZ2FpbnN0IGxpYm5ldHNubXBtaWJzIGluc3RlYWQgb2YKLSAgICAgIC0gTGluayBsaWJrdm0gYW5kIGxpYndyYXAgdG8gbGlibmV0c25tcGFnZW50Ci0gICAgICAtIFtCVUcgMTA5NjE2Nl06IEhhbmRsZSAtLXdpdGhvdXQtbG9nZmlsZSBjb3JyZWN0bHkuCi0gICAgICAtIFtCVUcgMTY0Nzk3Nl06IEN5Z3dpbi9NaW5HVyBXaW5kb3dzIGJ1aWxkIGZhaWxzCi0gICAgICAtIFtQQVRDSCAxNjI1MTM1XTogY29uZmlndXJlIGxvY2F0aW9uIG9mIHB5dGhvbgotICAgICAgLSBbUEFUQ0ggMTY4MTA3M106ICNpZmRlZiBiYXNlZCBjb25maWdfZXJyb3IgaW5zdGVhZAotICAgICAgLSBbUEFUQ0ggMTcyODIyNl06IG1ha2Ugc3VyZQotICAgICAgLSBbUEFUQ0ggMTcyODIzMF06IGFkZAotICAgICAgLSBbUEFUQ0ggMTcyODIzN106IE1vdmUKLSAgICAgIC0gW1BBVENIIDE3MjgyNDRdOiBBZGQKLSAgICAgIC0gW1BBVENIIDE3MjgyNDddOiBBZGQgdHlwZQotICAgICAgLSBhZGQgIkJ1aWxkUmVxdWlyZXM6IHBlcmwtRXh0VXRpbHMtRW1iZWQiIHRvIHRoZQotICAgICAgLSBhZGQgY29uZmlndXJlIGNoZWNrIGZvciBoYXNtbnRvcHQgdG8gZml4IHRoZQotICAgICAgLSBvbmx5IGVuYWJsZSBtaWJJSS9pcHY2IHRocm91Z2ggLS1lbmFibGUtaXB2NiBvbgotICAgICAgLSBwYXRjaCBmcm9tIGFwcGxlIHRvIHNpbXBsaWZ5IG1ha2VmaWxlIHRhcmdldAotICAgICAgLSB1cGRhdGUgdG8gbGlidG9vbCAxLjUuMjQgKGZyb20gMS41LjIyKQotICAgICAgLSB1c2UgTERGTEFHUyB3aGVuIGJ1aWxkaW5nIGFnZW50LCBoZWxwZXJzIGFuZCBtaWIKLSAgICAgIC0gdXNlIGxpYnRvb2wgY2xlYW4gZm9yIHJlbW92aW5nIGZpbGVzIHRvIGVuc3VyZSB3ZQotICAgICAgLSB3b3JrIGFyb3VuZCBsaWJuZXRzbm1wYWdlbnQvbGlibmV0c25tcGhlbHBlcnMKLSAgICAgIC0geWV0IGFub3RoZXIgZml4IHRvIGFkZHJlc3MgYnVpbGQgaXNzdWVzIHdpdGgKLQotICAgIGJ1aWxkaW5nOgotICAgICAgLSBDaGVjayBmb3Igc3VwcG9ydCBvZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucwotICAgICAgLSBEaXNhYmxlIGlubGluaW5nIG9uIHNvbGFyaXMgYXMgdGhlcmUgYXJlIHNvbWUKLQotICAgIGNvbmZpZ3VyZToKLSAgICAgIC0gW0JVRyAxNTY3MzI0XTogQ2xhcmlmeSBwcm9tcHRpbmcgZm9yCi0KLSAgICBkb2N1bWVudGF0aW9uOgotICAgICAgLSBbQlVHIDEyNDcxNjRdOiBEb2N1bWVudCB1c2Ugb2YgT0lEIG1hY3JvcwotICAgICAgLSBbQlVHIDE0MDc0NzZdOiBDbGFyaWZ5IE1JQiBwYXJzaW5nIHRvZ2dsZQotICAgICAgLSBbQlVHIDE2MTQxMDRdOiBicm9rZW4gc25tcGQoOCkgbWFudWFsIHBhZ2UKLSAgICAgIC0gW1BBVENIIDE2MDQ1ODBdOiBTTk1QKDMpIG1hbnVhbCBwYWdlCi0KLSAgICBpcml4OgotICAgICAgLSBbUEFUQ0ggMTcwOTc0OF06IE9wdGltaXplZCBJUklYIGNwdSBzdGF0cwotCi0gICAgbGlicmFyeToKLSAgICAgIC0gRkVBVFVSRVM6IDQ1NDAyODogRGV0ZWN0IGFuZCBoYW5kbGUgZW1wdHkgTUlCCi0gICAgICAtIFBhdGNoIGZyb20gIk1pdHN1cnUgQ2hpbmVuIjogY2xlYW5zIHVwIHRoZQotICAgICAgLSBbUEFUQ0ggMTY0MjA3MV06IERvbid0IGZpZGRsZSB3aXRoIHRoZSBzdG9yYWdlCi0gICAgICAtIFtQQVRDSCAxNjY1NTQzXTogSGFuZGxlIFZBQ00gY2hlY2tzIGNvcnJlY3RseS4KLQotICAgIG1pYjJjOgotICAgICAgLSBbQlVHIDE0Mjk0NzJdOiBQcm90ZWN0IGFnYWluc3QgbWlzc2luZyBpbnN0YW5jZXMKLSAgICAgIC0gW0JVRyAxNTgyOTcyXTogSGFuZGxlIEB3aGlsZUAvQGVuZEAgcHJvcGVybHkuCi0gICAgICAtIFtCVUcgODMzNjczXTogTW9yZSBmb2N1c2VkIHNpemUgY2hlY2tzLgotICAgICAgLSBbUEFUQ0ggMTY2ODE3MV06IHNraXAgdW5rbm93biBjb2xzIGluIG1pbi9tYXgKLQotICAgIG1pc2M6Ci0gICAgICAtIERvbid0IHVzZSB0aGUgbGVnYWN5IHN5bWJvbAotCi0gICAgcGF0Y2g6Ci0gICAgICAtIGZpeCB0aGUgLU0gc3dpdGNoIGZvcgotCi0gICAgcGVybDoKLSAgICAgIC0gW0JVRyAxNDUwNjY5XTogUEFUQ0g6IDE2Mjc5NDk6IGZyb20gbWFydGluOTg3OiBhCi0gICAgICAtIFtCVUcgMTYxOTgyN106IGxpbmsgbGlibmV0c25tcGFnZW50L2xpYm5ldHNubXB0cmFwZAorICAgICAgLSBbUEFUQ0ggMTk1NjE5M106IGJldGEgdGhyZWFkYWJsZSBwZXJsIG1vZHVsZSBjb2RlIGZvciBTTk1QdjEvMmMgdXNhZ2UuCisgICAgICAtIFtQQVRDSCAyMDIxNDQ0XTogU3VwcG9ydCBTTk1QdjJjIGluIGdldHRhYmxlIHByb2Nlc3NpbmcKKyAgICAgIC0gW1BBVENIIDIwMjI5NDhdOiBGaXggZm9yIENvdW50ZXI2NCBpbiBwZXJsIHN1YmFnZW50CisgICAgICAtIFtQQVRDSCAyMTgyMDc5XTogRml4IHZhcmlvdXMgcGVybCB3YXJuaW5ncyAmIGFsbG93IHVzZSBvZiAidXNlIHN0cmljdCIKKyAgICAgIC0gW1BBVENIIDIyNzIzNDddOiBJbXBsZW1lbnQgImltcGxpZWQiIGluIE1JQiBoYXNoCisgICAgICAtIFtQQVRDSCAyMzYxNzEyXTogRml4IGdldGJ1bGsgb3B0aW1pemF0aW9uIGR1cmluZyB3YWxrcworICAgICAgLSBbUEFUQ0ggMjcwOTcwNV06IFJldHJpZXZlIHNyYy90YXJnZXQgSVAgYWRkcmVzcyBpbiBQZXJsLWJhc2VkIGFnZW50cworICAgICAgLSBbUEFUQ0ggMjc2MzcxN106IEFsbG93IHBlcmwgdG8gdXNlIE9QQVFVRXMKKyAgICAgIC0gW1BBVENIIDI3OTM4NTddOiBSZXBvcnQgZmFpbGVkIGFzeW5jaHJvbm91cyByZXF1ZXN0cy4KICAgICAgIC0gZml4IFNOTVAgU0VUIGZvciBJUCBhZGRyZXNzZXMgb24gNjQtYml0CiAgICAgICAtIGZpeCBwcmVyZXF1aXNpdGVzIGZvciBOZXRTTk1QOjpUcmFwUmVjZWl2ZXIKICAgICAgIC0gZml4IHN5bnRheCBlcnJvciBpbiBOZXRTTk1QOjphZ2VudDo6U3VwcG9ydAotICAgICAgLSBpbnN0YWxsIGVtYmVkZGVkIHBlcmwgaW5pdCBmaWxlcyBmb3IKLSAgICAgIC0gcGF0Y2g6IDE3MjUwNDk6IGZpeCBidWxrd2FsayBpbiBjYXNlcyBvZiBub24tcmVwZWF0ZXIKLQotICAgIHBvcnRzOgotICAgICAgLSBwYXRjaDogMTcwNjM0NDogZnJvbSBuYXlsb3I6IGZpeCBjb21waWxhdGlvbiB3aXRoCisgICAgICAtIGluc3RhbGwgZW1iZWRkZWQgcGVybCBpbml0IGZpbGVzIHdpdGggY29ycmVjdCBwZXJtaXNzaW9ucwogCiAgICAgcHl0aG9uOgotICAgICAgLSBbUEFUQ0ggMTcxNjExNF06IExldCBweXRob24gYnVpbGQgaW4gc291cmNlIHRyZWUKKyAgICAgIC0gW0JVRyAxODI2MTc0XTogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHByaW50aW5nIHZhbHVlcy4KKwkgICAgICAgICAgICAgICBBZGRyZXNzZXMgQ1ZFLTIwMDgtMjI5MgorICAgICAgLSBbQlVHIDE4NjgyNzhdOiBQeXRob24gc2VnZmF1bHQKKyAgICAgIC0gW0JVRyAyMjU4OTM1XTogUHl0aG9uIEV4dGVuc2lvbiBNb2R1bGUgZmFpbHMgb24gU29sYXJpcworICAgICAgLSBbUEFUQ0ggMTcxNjExNF06IExldCBweXRob24gYnVpbGQgaW4gc291cmNlIHRyZWUgIChEZWJpYW4gcGF0Y2gjMzgpCisgICAgICAtIFtQQVRDSCAxODYyMTc3XTogbWFkZSBjb2RlIG1vcmUgd2luZG93cy9jeWd3aW4gY29tcGlsZXIgZnJpZW5kbHkKKyAgICAgIC0gW1BBVENIIDE4Nzc4NDBdOiBGaXggTUlCIGxhYmVsIGFuZCBpbmRleGluZyBkdWUgdG8gc2wsIGJyb2tlbiByZWdleHAKKyAgICAgIC0gW1BBVENIIDIwNzQ4MTddOiBGaXggcmVnZXhwIGVuZ2luZSBDUFUgcGVyZm9ybWFuY2UgaXNzdWVzCisgICAgICAtIFtQQVRDSCAyMjYwODI4XTogRml4IHB5dGhvbiBzbm1wd2FsayBtZW1vcnkgbGVhaworICAgICAgLSBbUEFUQ0ggMjU4MDk3OV06IEZpeCBweXRob24gc2Vzc2lvbiBwb2ludGVycyBvbiA2NC1iaXQgc3lzdGVtcy4KKyAgICAgIC0gW1BBVENIIDI2Njc0MTVdOiBTdXBwb3J0ICJVc2VOdW1lcmljIiBvcHRpb24uCisgICAgICAtIFtQQVRDSCAyNzc1ODAwXTogQWxsb3cgdGhyZWFkaW5nIHRvIGNvbnRpbnVlIHdoZW4gYSByZXF1ZXN0IGlzIHNlbnQKIAogICAgIHRlc3Q6Ci0gICAgICAtIHN1cHBvcnQgYSAtbiBmbGFnIHRvIFJVTlRFU1RTIHRvIHByaW50IHRoZSB0ZXN0CisgICAgICAtIGVuaGFuY2Ugc25tcG5ldHN0YXQgdGVzdCB0byBjaGVjayB0Y3BUYWJsZSBpbiBUQ1AgbW9kZQorICAgICAgLSBzdXBwb3J0IGEgLW4gZmxhZyB0byBSVU5URVNUUyB0byBwcmludCB0aGUgdGVzdCBudW1iZXIgZm91bmQgaW4gdGhlCisJdGVzdCBmaWxlIGFzIG9wcG9zZWQgdG8gdGhlIG51bWVyaWNhbCBjb3VudAorICAgICAgLSBEbyBub3QgdGVybWluYXRlIG9uIFNJR0NITEQgc2luY2UgZGFzaCBhbmQgc291bWUgYm91cm5lIHNoZWxscyB3aWxsCisJZXhpdCB0aGUgbWFpbiBzaGVsbCB3aGVuIGEgc3Vic2hlbGwgdGVybWluYXRlcyBpbiB0aGF0IGNhc2UuCiAKLSAgICB1bnNwZWNpZmllZDoKLSAgICAgIC0gW0JVRyAxNTk2NjM4XTogbWVtb3J5IGxlYWsgaW4gaXBDaWRyUm91dGVUYWJsZSwKLSAgICAgIC0gW0JVRyAxNjAwMDkzXTogYXV0b2NvbmYgMi42MCBicmVha3MgdGhlIGJ1aWxkCi0gICAgICAtIFtCVUcgMTYxMTUyNF06IGZpeCB0Y3AgY29ubmVjdGlvbiB0YWJsZSBmZCBsZWFrCi0gICAgICAtIFtCVUcgMTYzMzQ4M106IFN1cHBvcnQgQ1BVIEhBTCBvbiBGcmVlQlNENC54CisgICAgUG9ydHM6CiAgICAgICAtIFtCVUcgMTcxMDkxMF06IGluaXRpYWwgc3VwcG9ydCBmb3IgRHJhZ29uRmx5IEJTRAotICAgICAgLSBbUEFUQ0ggMTY3ODI5OF06IGZyb20gbWFnZnI6IGNvbXBpbGUtc3ViYWdlbnQgY2hlY2tzIGZvcgotICAgICAgLSBbUEFUQ0ggMTY3ODMwMV06IGZyb20gbWFnZnI6IGRlYWxsb2NhdGUgZG9tYWluIHJlZ2lzdHJ5Ci0gICAgICAtIFtQQVRDSCAxNjc4MzAyXTogZnJvbSBtYWdmcjogbmV0c25tcF9taWJpbmRleF9sb2FkIGxlYWtzCi0gICAgICAtIFtQQVRDSCAxNjc4MzA1XTogZnJvbSBtYWdmcjogRGVhbGxvY2F0ZSB0aGUgY2FjaGUgaW4KLSAgICAgIC0gW1BBVENIIDE2NzgzMDZdOiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBsb2cgaW4KLSAgICAgIC0gW1BBVENIIDE3MTkyNDRdOiBmaXggbWZkIGdlbmVyYXRpbmcgbWFwIGZ1bmN0aW9uCi0gICAgICAtIFtQQVRDSCAxNzI4MjQxXTogZnJvbSBtaXRzdXJ1X2NoaW5lbjogYWRkIGNvbmZpZ3VyZSBjaGVjawotICAgICAgLSBwYXRjaCBmcm9tIGFwcGxlIHRvIGZpeCBjcm9zcy1jb21waWxlIGJ1aWxkcyBpbiBhcHBsZXMKLSAgICAgIC0gcGF0Y2ggZnJvbSBhcHBsZSB0byBmaXggbWlub3IgZG9jdW1lbnRhdGlvbiBidWdzLgotICAgICAgLSBwYXRjaCBmcm9tIGFwcGxlIHRvIGltcHJvdmUgbWVtb3J5IHJlcG9ydGluZworICAgICAgLSBbUEFUQ0ggMTYyMzg3NF06IGFkZCBHTlUva0ZyZWVCU0Qgc3VwcG9ydAogCiAgICAgQUlYOgotICAgICAgLSBbUEFUQ0ggMTY2NTA3OV06IEFJWCBwYXRjaGVzCi0gICAgICAtIGJ1aWxkIGZpeGVzIGZvciBlbWJlZGRlZCBQZXJsCi0gICAgICAtIGZpeCBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nIGluc3RlYWQgb2YgZm9yY2luZwotICAgICAgLSB1c2UgIi1XbCwtYnJ0bCIgd2hlbiBjb21waWxpbmcgd2l0aCBnY2MKKyAgICAgIC0gW1BBVENIIDE2NjUwNzldOiBBSVggcGF0Y2hlcyBmb3IgY3B1IHN0YXRzIGFuZCBwcm9jZXNzIG1vbml0b3JpbmcKKyAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIEFJWCA2LngKKyAgICAgIC0gQnVpbGQgZml4ZXMgZm9yIGVtYmVkZGVkIFBlcmwKKyAgICAgIC0gRml4IGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcgaW5zdGVhZCBvZiBmb3JjaW5nIHN0YXRpYworICAgICAgLSBVc2UgIi1XbCwtYnJ0bCIgd2hlbiBjb21waWxpbmcgd2l0aCBnY2MKKyAgICAgIC0gW1BBVENIIDI4ODY1OThdOiBIZWFkZXIgZml4ZXMgZm9yIGNvbXBpbGluZyBvbiBBSVg2CiAKICAgICBGcmVlQlNEOgotICAgICAgLSBhZGQgaW5pdGlhbCBzdXBwb3J0IGZvciB1cGNvbWluZyBGcmVlQlNEIDcKLSAgICAgIC0gZml4IGNvbmZpZ3VyZSB3YXJuaW5nIGZvciBzeXMvY29uZi5oCisgICAgICAtIFtCVUcgMTA3Mzc4Ml06IFJlc3RvcmUgUGVyZlN0YXQgdmFsdWVzIGZvciBGcmVlQlNEIDUueCBzeXN0ZW1zLgorICAgICAgLSBbQlVHIDE2MzM0ODNdOiBTdXBwb3J0IENQVSBIQUwgb24gRnJlZUJTRDQueAorICAgICAgLSBbUEFUQ0ggMTk1MTk5Nl06IEZpeCBmb3IgQ1BVIHN0YXRzIG9uIEZyZWVCU0QKKyAgICAgIC0gW1BBVENIIDI1MDcyNDldOiBzY3RwLW1pYiBzdXBwb3J0IGZvciBGcmVlQlNELgorICAgICAgLSBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciB1cGNvbWluZyBGcmVlQlNEIDcKKyAgICAgIC0gRml4IGNvbmZpZ3VyZSB3YXJuaW5nIGZvciBzeXMvY29uZi5oCisgICAgICAtIHBhdGNoIGZyb20gQ2V6YXJ5IE1vcmdhIHRvIGZpeCBhIG1ha2UgdGVzdCBvbiBmcmVlYnNkCiAKLSAgICBIUDoKLSAgICAgIC0gVVg6IEJVRzogMTc0MjI3ODogY29tcGlsZSBlcnJvciBvbiBIUC1VWCAxMS4yMyAoSUE2NCkKLSAgICAgIC0gVVg6IEhQLVVYIG5lZWRzIF9SRUVOVFJBTlQgZGVmaW5lZCB0byBwaWNrIHVwCisgICAgSFAtVVg6CisgICAgICAtIFtCVUcgMjc3OTQ3Ml06IEZpbGVzeXN0ZW1zIG1pc3NpbmcgaW4gaHJTdG9yYWdlIHRhYmxlCisgICAgICAtIFtQQVRDSCAyMDg4NzI2XTogRml4IGFuIGlzc3VlIHJlcG9ydGluZyBtZW1vcnkgaW4gbmVnYXRpdmUgdmFsdWVzLgorICAgICAgLSBOZWVkcyBfUkVFTlRSQU5UIGRlZmluZWQgdG8gcGljayB1cCBzdHJ0b2tfci4KIAogICAgIElSSVg6Ci0gICAgICAtIFtQQVRDSCAxNjc1ODY5XTogQ1BVIHN0YXRpc3RpY3MgZm9yIElSSVgKKyAgICAgIC0gW1BBVENIIDE2NzU4NjldOiBDUFUgc3RhdGlzdGljcyBmb3IgSVJJWCBiYXNlZCBvbiBQQ1AKKyAgICAgIC0gW1BBVENIIDE3MDk3NDhdOiBPcHRpbWl6ZWQgSVJJWCBjcHUgc3RhdHMKIAogICAgIExpbnV4OgotICAgICAgLSBbQlVHIDE2NjYwMDVdOiBGYWlsIHRvIHdhbGsgaXB2NkludGVyZmFjZVRhYmxlIG9uCi0gICAgICAtIFtQQVRDSCAxNTgxMjk0XTogCi0gICAgICAtIGZpeCBldGh0b29sIGNvbmZpZ3VyZSBjaGVjayBmb3IgcmVjZW50IHN5c3RlbXMKKyAgICAgIC0gW0JVRyAxNjY2MDA1XTogRmFpbCB0byB3YWxrIGlwdjZJbnRlcmZhY2VUYWJsZSBvbiBMaW51eAorICAgICAgLSBbUEFUQ0ggMTU4MTI5NF06IGhvc3QtcmVzb3VyY2VzIGltcHJvdmVtZW50cworICAgICAgLSBbUEFUQ0ggMTk2OTYyN106IEhhbmRsZSBpbnN0YWxsIHdpdGggZW1wdHkgL2V0Yy9zeXNjb25maWcvbmV0d29yayBmaWxlIAorICAgICAgLSBbUEFUQ0ggMTcwNDEwNV06IEFkZCBJUHY2IHN1cHBvcnQgdG8gdGhlIGluZXROZXRUb01lZGlhVGFibGUKKyAgICAgIC0gW1BBVENIIDE3MDU1OTRdOiBWYXJpb3VzIGZpeGVzIHRvIGlwQWRkcmVzc1ByZWZpeFRhYmxlIHJlcG9ydGluZworICAgICAgLSBbUEFUQ0ggMTcwODI0M106IEltcGxlbWVudCBpcERlZmF1bHRSb3V0ZVRhYmxlCisgICAgICAtIFtQQVRDSCAxNzE1NDA1XTogSW1wbGVtZW50IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgICAgICAtIFtQQVRDSCAxNzE5MjU0XTogdXBkYXRlIEhSRlNfaWdub3JlIGxpc3QgdG8gY3VycmVudCBsaW51eCBsaWtlbHlob29kcworICAgICAgLSBbUEFUQ0ggMTcyNDYwMl06IE1mRC1iYXNlZCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgLSBbUEFUQ0ggMTc4MzQyM106IHJldHVybiBhIGNvcnJlY3QgaXB2NkludGVyZmFjZUlkZW50aWZpZXIgb2YgbG9vcGJhY2sKKyAgICAgIC0gW1BBVENIIDE4MjYxMDJdOiBzdXBwb3J0IGxvbmdlciBpbnRlcmZhY2UgbmFtZXMKKyAgICAgIC0gW1BBVENIIDE4Mjg2MDJdOiBTdXBwb3J0IGlwRGVmYXVsdFRUTCBhbmQgaXBGb3J3YXJkaW5nIFNFVHMKKyAgICAgIC0gW1BBVENIIDE4OTYxMThdOiBGaXggaWZUYWJsZSAzMmJpdCBjb3VudGVycworICAgICAgLSBbUEFUQ0ggMTkyNzc1MV06IEltcGxlbWVudCBpY21wTXNnU3RhdHNUYWJsZQorICAgICAgLSBbUEFUQ0ggMjAyMzYzM106IEltcGxlbWVudCBTQ1RQLU1JQgorICAgICAgLSBbUEFUQ0ggMjA1MzI3M106IEltcGxlbWVudCBFdGhlckxpa2UgTUlCCiAKICAgICBNYWNPU1g6Ci0gICAgICAtIFtQQVRDSCAxNjAwNDUzXTogT1MgWAotICAgICAgLSBbUEFUQ0ggMTYwMDUyMl06IENQVSBIQUwKLQotICAgIFBlcmw6Ci0gICAgICAtIGxpbmsgUGVybCBtb2R1bGVzIGFnYWluc3QgdGhlIGV4YWN0IHNldCBvZiBsaWJyYXJpZXMKKyAgICAgIC0gW1BBVENIIDE2MDA0NTNdOiBPUyBYIGNvbXBpbGUtdGltZSBlbmRpYW4gZGV0ZXJtaW5hdGlvbgorICAgICAgLSBbUEFUQ0ggMTYwMDUyMl06IENQVSBIQUwgaW1wbGVtZW50YXRpb24gZm9yIG1hY2gvZGFyd2luCisgICAgICAtIEltcHJvdmUgbWVtb3J5IHJlcG9ydGluZyAocGF0Y2ggZnJvbSBBcHBsZSkKKyAgICAgIC0gUGF0Y2g6IDM1MTQwNDkgZnJvbSB0d29iaXRzLWdpdGh1YjogZml4IGNvbXBpbGF0aW9uIG9uIGRhcndpbjExCiAKICAgICBTb2xhcmlzOgotICAgICAgLSBJRi1NSUIgZml4OiBhZGQgbWlzc2luZyByZXR1cm4gYXQgZW5kIG9mCi0gICAgICAtIFtCVUcgMTYyNjE1M106IG5vIGhyU1dSdW4gaW5mb3JtYXRpb25zIG9uCi0gICAgICAtIFtQQVRDSCAxNjIzNDQ3XTogaHJTV1J1bgorICAgICAgLSBbQlVHIDE2MjYxNTNdOiBObyBoclNXUnVuIGluZm9ybWF0aW9ucyBvbiBTb2xhcmlzIHpvbmVzCisgICAgICAtIFtCVUcgMTgxMDgxNF06IHRjcFRhYmxlIG1pc3NpbmcgZW50cmllcyBhbmQgd3JvbmcgcG9ydHMKKyAgICAgIC0gW0JVRyAxODE5MTg5XToge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0gcmVwb3J0ZWQgaW5jb3JyZWN0bHkKKyAgICAgIC0gW0JVRyAxODIyMjc1XToge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0gcmVwb3J0ZWQgaW5jb3JyZWN0bHkKKyAgICAgIC0gW1BBVENIIDE2MjM0NDddOiBGaXggaHJTV1J1biBmb3IgdGVybWluYXRlZCBwcm9jZXNzZXMKKyAgICAgIC0gW1BBVENIIDE3MTk3MzBdOiBTdXBwb3J0IGZvciBpcFN5c3RlbVN0YXRzVGFibGUgYW5kIGlwQWRkcmVzc1RhYmxlCisgICAgICAtIFtQQVRDSCAxODI0MTk2XToge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0gcmVwb3J0ZWQgaW5jb3JyZWN0bHkKKyAgICAgIC0gW1BBVENIIDE4MzQ2OTldOiBGaXggMTgzMzI5NDogRExQSSBwcm9ibGVtcyBvbiBTb2xhcmlzIDIuNgorICAgICAgLSBbUEFUQ0ggMjAxMjQwNF06IERlYWwgd2l0aCBtb3JlIHRoYW4gMTAgaW50ZXJmYWNlcy4KKyAgICAgIC0gW1BBVENIIDI3NTE1ODhdOiBJbmNvbnNpc3RlbnQgZGF0YSBjYW4gYmUgcmVwb3J0ZWQgb24gU29sYXJpcyAxMFU0KworICAgICAgLSAjZGVmaW5lIE5FV19NSUJfQ09NUExJQU5UIHRvIHN1cHBvcnQgU29sYXJpcyAxMFU0KworICAgICAgLSBJRi1NSUIgZml4OiBhZGQgbWlzc2luZyByZXR1cm4gYXQgZW5kIG9mIGdldF9pZl9zdGF0cwogCiAgICAgV2luMzI6CiAgICAgICAtIFtCVUcgMTY2Mjk4N106IGNvbXBpbGUgZXJyb3Igb24gQ3lnd2luCi0gICAgICAtIFtQQVRDSCAxNjIyMDgwXTogQTogcGFzcyBXaW4zMgorICAgICAgLSBbQlVHIDI3Nzk1NDFdOiBGaXhlZCBoYW5kbGUgbGVhayBpbiBwYXNzX3BlcnNpc3QuCisgICAgICAtIFtQQVRDSCAxNjIyMDgwXTogQTogcGFzcyBXaW4zMiBoYW5kbGVzIHJlbWFpbiBvcGVuLgorICAgICAgLSBbUEFUQ0ggMTcwNjM0NF06IEZpeCBjb21waWxhdGlvbiB3aXRoIGN5Z3dpbgorICAgICAgLSBbUEFUQ0ggMjY4NjI0OF06IEZpeCBzZXZlcmFsIHdpbkV4dERMTCBidWdzLgorICAgICAgLSBbUEFUQ0ggMjY4ODM0Ml06IEZpeCBWUzIwMDUgdmFyaW91cyBjb21waWxlciB3YXJuaW5nCisgICAgICAtIFtQQVRDSCAyNjkxODc2XTogQWxsb3cgY29tcGlsaW5nIHRoZSBzZXJ2aWNlcyB1c2luZyB1bmljb2RlLgorICAgICAgLSBbUEFUQ0ggMjY5Mzc0Nl06IGltcHJvdmVkIHNvY2tldCBzdGFydHVwIHN1cHBvcnQKKyAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIHdpbkV4dERMTCB0byBidWlsZC5iYXQKKyAgICAgIC0gQnVpbGQgZml4ZXMgZm9yIE1TVkMgMjAwOC4KICAgICAgIC0gZml4IEFFUyBzdXBwb3J0CiAgICAgICAtIGZpeCB3aW4zMi9Db25maWd1cmUgLS13aXRoLWlwdjYKIAorKjUuNCoKKworICAgIGJ1aWxkOgorICAgICAgLSBbQlVHIDE0MTY0ODFdOiBTdXBwb3J0IHNwZWNpZnlpbmcgYW4gZXhwbGljaXQgbGlua2VyLgorICAgICAgLSBlbmFibGUtYXMtbmVlZGVkIHdpbGwgdHJ5IHRvIGxpbmsgYnVpbHQgbGlicmFyaWVzIGFnYWluc3QgbmVlZGVkCisJbGlicmFyaWVzIGF0IGxpYnJhcnkgbGluayB0aW1lLCByYXRoZXIgdGhhbiBhcHBsaWNhdGlvbiBsaW5rIHRpbWUuCisKKyAgICBzbm1wbGliOgorICAgICAgLSBbUEFUQ0ggMTI4MjU2Nl06IHRvIHJld29yayB0cmFuc3BvcnQgY3JlYXRpb24gdG8gYWxsb3cgZm9yCisJYWx0ZXJuYXRpdmUgaW50ZXJwcmV0YXRpb25zIG9mIHRoZSBhZGRyZXNzIGFuZCBhIG1vcmUgZmxleGlibGUKKwl0cmFuc3BvcnQgcmVnaXN0cmF0aW9uIHN5c3RlbQorICAgICAgLSBbQlVHUzogMTUzNzQ1OSwgQlVHUzogMTU0MDc0NV0gRml4IG1pc3NpbmcgTUlCIHBhcnNpbmcgdG9rZW5zCisgICAgICAtIFtQQVRDSCAxNTYyMTY4XTogY2hlY2sgZm9yIGEgc29jayBmZCBsZXNzIHRoYW4gMC4KKyAgICAgIC0gW1BBVENIIDE1NzA2NTBdOiBjcmVhdGUgYSBsb2dnaW5nIHNodXRkb3duIGZ1bmN0aW9uIHRvIHByb3BlbHJ5CisJY2xlYW4gdXAgbG9nIHJlZ2lzdHJhdGlvbnMgaWYgbmVlZGVkLgorICAgICAgLSBbUEFUQ0ggMTU2NTI5M106IFVEUElQdjYgdHJhbnNwb3J0IHJlcG9ydHMgd3JvbmcgcG9ydCBudW1iZXIKKyAgICAgIC0gcmVuYW1lIGluaXRfbWliIHRvIG5ldHNubXBfaW5pdF9taWIgdG8gYXZvaWQgc3ltYm9sIGNsYXNoIHdpdGgKKwlIUC1VWCdzIGxpYm5tCisgICAgICAtIFtQQVRDSCAxNTA5OTQzXTogcmVzcG9uc2VzIHdpbGwgZ2V0IHNlbnQgZnJvbSB0aGUgb3JpZ2luYWwgZGVzdCBJUAorCWFkZHJlc3Mgd2hlbiBwb3NzaWJsZS4KKworICAgIHNubXBkOgorICAgICAgLSBbUEFUQ0ggMTU1MDcyNV06IEEgbmV3IHVpbnQgaW5zdGFuY2UgaGVscGVyIHRvIG1hdGNoIHRoZSBleGlzdGluZworCWludCwgbG9uZyBhbmQgdWxvbmcgaGVscGVycworICAgICAgLSBbQlVHIDE1Mjc5MzBdOiBmaXggc211eCBhdXRoZW50aWNhdGlvbgorICAgICAgLSBbUEFUQ0ggMTU2MTI3N106IHVzZSBuZXQuaXB2Ni5uZWlnaC5sby5iYXNlX3JlYWNoYWJsZV90aW1lX21zCisJaW5zdGVhZCBvZiBkZXByZWNhdGVkIGJhc2VfcmVhY2hhYmxlX3RpbWUKKyAgICAgIC0gW0JVRyAxNDc0NDY4XTogaWZDb25uZWN0b3JQcmVzZW50IGFsd2F5cyByZXR1cm5zIDAKKyAgICAgIC0gW1BBVENIIDE1MjQ3NTVdOiB0byBiZXR0ZXIgc3VwcG9ydCB0aGUgVURQVGFibGUgZm9yIHVua25vd24gYWRkcmVzcworCXR5cGVzCisgICAgICAtIFtQQVRDSCAxNTM0ODc3XTogdG8gYWRkIHN1cHBvcnQgZm9yIHNraXBwaW5nIE5GUyBlbnRyaWVzIGluIHRoZQorCWhvc3QgcmVzb3VyY2VzIGhyU3RvcmFnZVRhYmxlLglTZWUgdGhlIHNraXBORlNJbkhvc3RSZXNvdXJjZXMKKwl0b2tlbiBpbiB0aGUgc25tcGQuY29uZiBmaWxlIGZvciBkZXRhaWxzLgorICAgICAgLSBbUEFUQ0ggMTU1NzUxNCBdOiBEbyBub3QgYXR0ZW1wdCB0byBjb2xsZWN0IGRhdGEgZHVyaW5nIFNFVAorCXByb2Nlc3NpbmcuCisgICAgICAtIFtCVUcgMTUzNTkwM106IFN1cHBvcnQgc3BhY2VzIHdpdGhpbiBzZWN1cml0eSBuYW1lcworICAgICAgLSBBZ2VudCBidWlsZHMgZGVmYXVsdCBtb2R1bGUgbGlzdCBmcm9tIGEgZGVmYXVsdF9taWJzLmggcmF0aGVyIHRoYW4KKwlhIGhhcmQgY29kZWQgY29uZmlndXJlIGxpc3QKKyAgICAgIC0gW0JVRyAxNTU5MzU4XTogY2hlY2sgc2NhbmYgcmVzdWx0cyBmb3IgZGlza2lvIHNjYW5uaW5nCisgICAgICAtIFtCVUcgMTU2NDIzM106IEhhdmUgY29uZmlndXJlIHRlc3QgZm9yIHJwbSBoZWFkZXJzIG5vdCBqdXN0IHRoZQorCWxpYnJhcmllcworICAgICAgLSBbUEFUQ0ggMTU3OTM2NF06IFVwZGF0ZWQgZGFyd2luIHBhdGNoIHRvIGZpeCBjb21waWxhdGlvbiBvbiBUaWdlcgorCWFuZCBMZWFwb3JkCisgICAgICAtIFtQQVRDSCAxNTY1NzAzXTogcGF0Y2ggdG8gZml4IHJhcGlkIHJlZ2lzdHJhdGlvbnMvZGVyZWdpc3RyYXRpb24KKwlpc3N1ZXMKKyAgICAgIC0gW1BBVENIIDE1NjI2ODhdOiBmaXggcGluZy9yZWF0dGFjaCBhZ2VudHggY29kZQorICAgICAgLSBbUEFUQ0ggMTU1MTk0OF06IE1ha2UgcGFzc19wZXJzaXN0IHVzYWJsZSBvbiB1Q2xpbnV4CisgICAgICAtIFtQQVRDSCAxNTY4MTUwXTogRXh0ZW5kIHBhc3NfcGVyc2lzdCBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZQorCXBhc3NlZCBiYWNrIGZyb20gdGhlIHNjcmlwdAorICAgICAgLSBbUEFUQ0ggMTU3MDY1MF06IG1ha2UgZGVsZXRlIHRhYmxlIGZ1bmN0aW9uIHB1YmxpYworICAgICAgLSBbUEFUQ0ggMTU3NTk4NF06IGJsb2NrIFNJR0hVUCBkdXJpbmcgcmVjb25maWcKKyAgICAgIC0gW1BBVENIIDE1NzA5ODIgXTogU29sYXJpcyBJRi1NSUI6IFN1cHBvcnQgZm9yIElQdjYtb25seSBpbnRlcmZhY2VzCisgICAgICAtIG1lbVRvdGFsRnJlZSBzaG91bGQgcmVwb3J0IHRvdGFsIHZpcnR1YWwgaW5zdGVhZCBvZiBwaHlzaWNhbCBtZW1vcnkKKyAgICAgIC0gYnVpbGQgZml4IGZvciAtLXdpdGhvdXQta21lbS11c2FnZQorICAgICAgLSBbQlVHIDE1ODU4MTVdOiBmaXggbWZkIGJpdHMgbGVuZ3RoIGNhbGN1bGF0aW9uCisgICAgICAtIFtCVUcgMTQyNzQxMF06IFNldCBhdXRoIGVuZ2luZUlEIGZvciBTTk1QdjMgdHJhcHMuCisgICAgICAtIFtCVUcgMTUwMjI2N106IEJ1aWxkIGFjY2VzcyBsaXN0IGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICAgLSBbUEFUQ0ggMTU1NDgyN106IGZyb20gcnR5bGU6IGZpeCBoYW5kbGluZyBvZiBmYWlsZWQgcHJveHkgU0VUCisJcmVxdWVzdHMKKyAgICAgIC0gW1BBVENIIDE1OTg5NjZdOiBGaXggYnVnICMxNTk4OTI3OiAjZWxpZiBidWlsZCBmaXgKKworICAgIHNubXB0cmFwZDoKKyAgICAgIC0gdGhlIHRyYXBoYW5kbGUgZGlyZWN0aXZlIG5vdyBzdXBwb3J0cyBhIC10IHN3aXRjaCB0byBpbmRpY2F0ZQorCW1hdGNoaW5nIGFueSBPSUQgaW4gdGhlIHRyZWUgYmVsb3cgdGhlIHNwZWNpZmllZCBPSUQKKyAgICAgIC0gW1BBVENIIDE1MzY3NzNdOiBzdXBwb3J0IHBhcnRpYWwgb2lkIG1hdGNoaW5nCisgICAgICAtIFtQQVRDSCAxNTk4OTY4XTogRml4IGJ1ZyAjMTU4Nzc1OTogc25tcHRyYXBkIGRvZXNuJ3QgcmVjb2duaXplIC1BCisJb3B0aW9uCisKKyAgICBzbm1wZGY6CisgICAgICAtIFtCVUcgMTUxNTUwN106IEhhbmRsZSBmYWlsZWQgcmVxdWVzdHMgYmV0dGVyCisKKyAgICBwZXJsOgorICAgICAgLSBGaXhlZCB0aGUgcGVybCBidWxrd2FsayBmdW5jdGlvbgorICAgICAgLSBbUEFUQ0ggMTU3NTkzN106IGZpeCB1c2VudW1lcmljIG91dHB1dCBpbiBhc3luYyB2YXJiaW5kcyBzbyB0aGV5CisJcmV0dXJuIE9JRHMgaW5zdGVhZCBvZiBlbXB0eSBzdHJpbmdzLgorICAgICAgLSB1cGRhdGUgZGVmYXVsdF9zdG9yZSBtb2R1bGUgdG8gbGF0ZXN0IGRlZmF1bHRfc3RvcmUgYy1iaW5kaW5nCisJdG9rZW5zCisgICAgICAtIG1ha2UgcGVybHRlc3QgZml4ZXMgZm9yIFNvbGFyaXMgMi42IGFuZCBlYXJsaWVyCisgICAgICAtIGZpeGVzIGZvciA2NC1iaXQgcGxhdGZvcm1zCisgICAgICAtIG1ha2UgcGVybHRlc3QgZml4ZXMgZm9yIEhQLVVYCisgICAgICAtIG1ha2UgcGVybHRlc3QgZml4ZXMgZm9yIElSSVgKKyAgICAgIC0gW1BBVENIIDI5OTUwOThdOiBGaXggY3JlYXRpb24gb2YgU05NUHYzIHNlc3Npb25zIHdpdGggQVBJX1NJTkdMRQorICAgICAgLSBwYXRjaCAzMDQ2MzcxOiBmcm9tIGNocmlzdG9waGI0OiBGaXggbWVtb3J5IGxlYWsgaW4gU05NUHYxIHRyYXAKKwloYW5kbGluZy4KKworICAgIG1pYjJjOgorICAgICAgLSBbQlVHIDE0Nzk5MTZdOiBSZXN0b3JlIGNvbnNpc3RlbmN5IGluIHJvdyBjcmVhdGlvbiBjb2RlLgorICAgICAgLSBbQlVHIDI4MjcyNjldOiBTdXBwcmVzcyBub24tb3JkZXJlZCBUT0RPIGNvbW1lbnRzLgorCisgICAgbWlzYzoKKyAgICAgIC0gTW9zdCBuZXQtc25tcCBzcGVjaWZpYyBkZWZpbmVzIGFyZSBub3cgKGFsc28pIGF2YWlsYWJsZSB1bmRlciBhCisJcHJvcGVyIE5FVFNOTVBfIHByZWZpeC4gVGhlIG9sZGVyLCBwb3RlbnRpYWxseSBjb25mbGljdGluZyBuYW1lcyBhcworCXdlbGwgYXMgdGhlIGF1dG9jb25mIHZhcmlhYmxlcyBjYW4gbm93IGJlIHR1cm5lZCBvZmYgYnkgYSBzcGVjaWFsCisJZGVmaW5lLgorICAgICAgLSBbQlVHIDE1ODUyNTBdOiBkb24ndCB1c2UgZGVwcmVjYXRlZCBvcHRpb25zIGluIHN0YXJ0IHNjcmlwdAorICAgICAgLSAibWFrZSB0ZXN0IiBmaXhlcyBmb3Igbm9uLVVEUCB0cmFuc3BvcnRzCisgICAgICAtIFtCVUcgMTU3NzkxM106IGFkZCBtaXNzaW5nIG1hbnVhbCBwYWdlcyBmb3IgZXhlY3V0YWJsZXMsIHN1cHBsaWVkCisJYnkgRGViaWFuCisgICAgICAtIFtQQVRDSCAxNTk2MDI4XTogZnJvbSAiU3RlcGhlbiBKLiBGcmllZGwiOiBjb25zdCBmaXhlcyBmb3IgdGhlCisJbWliX2FwaSgzKSBtYW51YWwgcGFnZQorICAgICAgLSBSUE0gc3BlYyBmaWxlIGZpeGVzIGZvciA2NC1iaXQgcGxhdGZvcm1zCisKKyAgICBNYWNPU1g6CisgICAgICAtIFtQQVRDSCAxNTY2Nzc3XTogYnVpbGQgZml4ZXMgZm9yIG1lbW9yeV9kYXJ3aW4uYworICAgICAgLSBidWlsZCBmaXggZm9yIG1pYklJL3VkcFRhYmxlCisKKyAgICBUcnU2NDoKKyAgICAgIC0gZml4ICJhdXRvX25saXN0IGZhaWxlZCBvbiBhcnB0YWJfc2l6ZSBhdCBsb2NhdGlvbiAwIiBlcnJvcnMKKworICAgIElSSVg6CisgICAgICAtIHByb3BlciBpbXBsZW1lbnRhdGlvbiBmb3IgVUNELVNOTVAtTUlCOjpsYVRhYmxlIChhdm9pZGluZyBubGlzdCkKKworICAgIFNvbGFyaXM6CisgICAgICAtIFtQQVRDSCAxNTY5NTM3LDE1Njk1MzldOiBuZXcgVURQLU1JQiBhbmQgVENQLU1JQiBpbXBsZW1lbnRhdGlvbgorCShlbmFibGUgdGhyb3VnaCAtLXdpdGgtbWliLW1vZHVsZXM9dWRwLW1pYix0Y3AtbWliKQorCisgICAgQUlYOgorICAgICAgLSB1c2UgY29ycmVjdCBBUlBUQUJfU1lNQk9MIGFuZCBBUlBUQUJfU0laRV9TWU1CT0wKKyAgICAgIC0gW0JVRyAxMjA1MzAwXTogbmxpc3QgZXJyOiBuZWl0aGVyIG5wcm9jIG5vciBfbnByb2MgZm91bmQgKHNhbWUgZm9yCisJcnRfdGFibGUsIHJ0aGFzaHNpemUsIHJ0aG9zdCwgcnRuZXQpCisKKyAgICBxbng2OgorICAgICAgLSBbUEFUQ0ggMjgzNjg5NV06IHN1cHBvcnQgZm9yIFFOWDYKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCmluZGV4IDI2ZGI2MDYuLjNlZWY0NDAgMTAwNjQ0Ci0tLSBhL0NPUFlJTkcKKysrIGIvQ09QWUlORwpAQCAtMjI5LDMgKzIyOSw5OSBAQAogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKKy0tLS0gUGFydCA4OiBBcHBsZSBJbmMuIGNvcHlyaWdodCBub3RpY2UgKEJTRCkgLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0ICAKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyAgCithcmUgbWV0OgorCisxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgIAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgIAorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgIAorZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkICAKK3dpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YgaXRzICAKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCAgCitmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgIAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgIAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgIAorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgIAorQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsICAKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgIAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiAgCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EICAKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCAgCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GICAKK1NVQ0ggREFNQUdFLgorCistLS0tIFBhcnQgOTogU2NpZW5jZUxvZ2ljLCBMTEMgY29weXJpZ2h0IG5vdGljZSAoQlNEKSAtLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDksIFNjaWVuY2VMb2dpYywgTExDCitBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisgCisqICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorKiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgCisqICBOZWl0aGVyIHRoZSBuYW1lIG9mIFNjaWVuY2VMb2dpYywgTExDIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCisKKy0tLS0gUGFydCAxMDogSUVURiBjb3B5cmlnaHQgbm90aWNlIChCU0QpIC0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxMyBJRVRGIFRydXN0IGFuZCB0aGUgcGVyc29ucyBpZGVudGlmaWVkIGFzIGF1dGhvcnMgb2YKK3RoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKK8K3IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKK8K3IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCivCtyBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVybmV0IFNvY2lldHksIElFVEYgb3IgSUVURiBUcnVzdCwgbm9yIHRoZQorbmFtZXMgb2Ygc3BlY2lmaWMgY29udHJpYnV0b3JzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyDigJxBUworSVPigJ0gQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSCitPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMWRmMDIwYy4uMmU1ODFiMyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwxMDUgKzEsMzAyODggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNoYW5nZXM6IFY1LjQuMyAtPiBWNS40LjQKKyMgLSotIHRleHQgLSotCiAKLTIwMTEtMDYtMjQgMTI6MzggIGR0czEyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CitDaGFuZ2VzOiBWNS43LjMucmMxIC0+IFY1LjcuMy5yYzMKKyh0aGVyZSB3YXMgbm8gb2ZmaWNpYWwgcmMyKQogCi0gICBNaXNzaW5nIGNoZWNrIGZvciBycG10cy5oCitjb21taXQgZTY5YWM4NzI4OTg3YjMzODUyYzUwMDc2NjcwMTVhNmQyM2NiZTg1YgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMCAxMTo1Nzo1OCAyMDE0IC0wODAwCiAKLTIwMTEtMDYtMjQgMTI6MjAgIGR0czEyCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4zLnJjMworCitjb21taXQgZjZlYjIwMTNmZDNkYjQ0NGRmNjcwYjk1NjAxMGU3N2MwZmMyYjFkMgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMCAxMTozMDowMSAyMDE0IC0wODAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNy1wYXRjaGVzCisKK2NvbW1pdCAxMTY1NzE3YmVhNzExYjA3OTgzMjcwODVmMzFhYzNkYmM1NzdiMmZiCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEwIDExOjI5OjU4IDIwMTQgLTA4MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjMucmMzCisKK2NvbW1pdCBkZTBlYmNmMDI3YWNjZDIxZTY0MjQzNmQ5MTA3NDQ4NGY3Y2U2MmQ4CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDcgMTY6MjE6NTIgMjAxNCAtMDgwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4zLnJjMgorCitjb21taXQgNmI0M2I5YjlhZTNlMTdmYzI3NDdkYzUyMmJmOWEwYzRhODAyNTk2NAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiA3IDE1OjQ3OjEwIDIwMTQgLTA4MDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS03LXBhdGNoZXMKKworY29tbWl0IDAxZGJiMzBiN2RkNWZjY2NhNjk1MGE1MGEwOWQ1YzBiMGQ5ODYyZjYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgNyAxNTo0NzowNSAyMDE0IC0wODAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4zLnJjMgorCitjb21taXQgYTkzMDdjODI1ODlmZjY4OTUzNDFhNWEwM2U1ZTBiNDM1ODM1MGNiMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiA3IDA2OjUxOjM0IDIwMTQgKzAxMDAKKworICAgIHNubXBsaWIvc3lzdGVtLmM6IG1ha2UgdGhlIHRlc3QgZm9yIHJldHVybiBjb2RlIGZyb20gdW5hbWUgY29uZm9ybSB0byBQT1NJWC4KKworY29tbWl0IGJkODYzOTBjZjEzMDA2ODNlNWZmYmUxOTIyYTUyM2M3Y2YyMTFiMGYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjggMjA6MDg6MzggMjAxNCArMDIwMAorCisgICAgVDA2NWFnZW50ZXh0ZW5kX3NoX3NpbXBsZTogQWRkIGEgbmV3IHJlZ3Jlc3Npb24gdGVzdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMy5wcmU1IC0+IFY1LjcuMy5yYzEKKworY29tbWl0IDhmYzc1MTRiNTlkYzQ2YjhmM2UzNmM4MWE5MmFmMDA4ZGM4ZGMxODgKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMSAwOTo1OToyNiAyMDE0IC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjMucmMxCisKK2NvbW1pdCAzZWE1MTQ0MjNkOTM3M2FmNzdjYmM0YjgzMzZiMTcwMTQzODY0Mzg5CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDMwIDIzOjEyOjQwIDIwMTQgLTA3MDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS03LXBhdGNoZXMKKworY29tbWl0IGFiYjdmMmVlYzE3M2M4ZDI2MmJmNmVmMWI3ZGViNWI3MDgzOWQxNWYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMzAgMjM6MTI6MzkgMjAxNCAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMy5yYzEKKworY29tbWl0IGJjYWFiNDhkOWQ0OTgzNjFmZGQ0NTE2NTI3NzNiM2I5NTZjN2YxMGMKK0F1dGhvcjogUm9iZXJ0IFN0b3J5IDxyc3RvcnlAbG9jYWxob3N0PgorRGF0ZTogICBUaHUgU2VwIDI1IDA5OjM2OjAwIDIwMTQgLTA0MDAKKworICAgIHJlbW92ZSBiYWQgYXNzZXJ0IGNoZWNrCisKK2NvbW1pdCA1ZDFlY2Y2ZDE1OTFhNTNlNzExYzVmZWVhMTU4ZDEwZGQ5MGZhYjNiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gU2VwIDEgMTQ6NDY6NTAgMjAxNCArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IFBvcnQgVDAwNXRhYmxlX2RhdGFzZXRfY2FnZW50bGliLmMgdG8gTWluR1cKKworY29tbWl0IGFmOGMxN2U2NDgyY2I1NTIwNmM1MDI3MDk4MzY2ZjYwYWQ4ZjdjYzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBTZXAgMSAxMzoyNDoxOCAyMDE0ICswMjAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDI1Njg6IEF2b2lkIHRoYXQgZmlsZSBkZXNjcmlwdG9ycyBhYm92ZSBGRF9TRVRTSVpFIHRyaWdnZXIgYWJvcnQoKQorCitjb21taXQgNDIyNGNhYmNiMTEyZDBkNDM3ZjljYTlmNGQzNDMwNTAxZDFjODc1MAorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAyMiAwNjo0OToyOCAyMDE0IC0wNzAwCisKKyAgICBXaGVuIGVubGFyZ2luZyBhIGxhcmdlX2ZkX3NldCwgdXNlIEZEX1pFUk8gaWYgcG9zc2libGUKKyAgICAKKyAgICBUaGUgbW9zdCBjb21tb24gY2FzZSBvZiBjcmVhdGluZyBhIGxhcmdlX2ZkX3NldCBvbiBVTklYCisgICAgaXMgdG8gY3JlYXRlIGl0IHdpdGggc2l6ZSB6ZXJvLCBhbmQgdGhlbiBpbW1lZGlhdGVseSBlbmxhcmdlCisgICAgaXQgdG8gc2l6ZSBGRF9TRVRTSVpFLiAgSW5zdGVhZCBvZiBsb29waW5nIGFuZCBjYWxsaW5nCisgICAgRkRfQ0xSKCksIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIGNvbW1vbiBjYXNlIHdpdGggdGhlIE9TJ3MKKyAgICBGRF9aRVJPLgorCitjb21taXQgMzUyNGE5MmYyMjdlYjNlNzM2OTA4YjFmMWY1MjVkYTJkYzk0OWQyMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEphbiAyMyAxNzo0Mjo0MSAyMDEwICswMDAwCisKKyAgICBGaXhlZCBhIFNvbGFyaXMtc3BlY2lmaWMgY29tcGlsZXIgd2FybmluZy4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxODAyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDk1NGVhNGQ3MDg0MGFhNWY3NTNhMDZlNWRmNzY1MmIyNThkOTIwNDIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAyMSAwODowMTo0MyAyMDEwICswMDAwCisKKyAgICBFbnN1cmUgdGhhdCBmZHNldCBzdHJ1Y3R1cmUgaXMgcmVzaXplZCBzdWZmaWNpZW50bHkKKyAgICB0byBhY2NvbW9kYXRlIHRoZSBzcGVjaWZpZWQgc29ja2V0IElELgorICAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgU2hpeWFsZWkuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTkwNjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCAzZGEwYzM3OGI1Y2IxYmJmMzVkMDVhNjIxMmE0ODNhYmRhODRhMjAxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDEgMDg6NTk6MDQgMjAxNCArMDIwMAorCisgICAgRml4IGNvbW1pdCA3ZjRhN2I4OTEzMzI4OTljZWEyNmU5NWJlMDMzN2FhZTAxNjQ4NzQyOiBkb250IG1peCBjb2RlIGFuZCBkZWNsYXJhdGlvbnMuCisKK2NvbW1pdCAwODM3YjIxZTc5OGE5ODU2YzBhOWY0MzhlYzQ0YTgzYmVkMWY4NTM2CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgQXVnIDI5IDA4OjE4OjIwIDIwMTQgKzAyMDAKKworICAgIEVtcHR5IGluaXRpYWxpemVycyBhcmUgKHNhZGx5KSBub3QgcGFydCBvZiBDLgorICAgIFN0b3AgdXNpbmcgdGhlbS4KKworY29tbWl0IDVlNGY2ZTNmNDMwMzVhNjg5YzlmYTI4OTAyN2VlZDYwYTIyZGJmYWYKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFRodSBBdWcgMjggMTI6MTI6MjEgMjAxNCAtMDQwMAorCisgICAgQWRkIGEgZGVidWcgbWVzc2FnZSB3aGVuIHNraXBwaW5nIGEga2V5CisKK2NvbW1pdCBlNTcwNjE1MGM0NTMyZDdmYzE4MzI3MTg1NjhiYjUwYmIwZmZjMDFmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAzMSAxNTo0NDozMSAyMDE0ICswMjAwCisKKyAgICBBZGRlZCB0ZXN0IGZvciBzcHJpbnRfcmVhbGxvY192YXJpYWJsZSB3aXRoIC1PUSBjbWRsaW5lIGFyZ3VtZW50LgorCitjb21taXQgN2Y0YTdiODkxMzMyODk5Y2VhMjZlOTViZTAzMzdhYWUwMTY0ODc0MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMzEgMTM6NDY6NDkgMjAxNCArMDIwMAorCisgICAgQWRkZWQgY2hlY2tzIGZvciBwcmludGluZyB2YXJpYWJsZXMgd2l0aCB3cm9uZyB0eXBlcy4KKyAgICAKKyAgICBXaGVuIC1PUSBjb21tYW5kIGxpbmUgYXJndW1lbnQgaXMgdXNlZCwgdmFyaWFibGUgZm9ybWF0dGVyIHByZWZmZXJzIHRoZSB0eXBlCisgICAgb2YgdGhlIHZhcmlibGUgcGFyc2VkIGZyb20gYSBNSUIgZmlsZSBpbnN0ZWFkIG9mIGNoZWNraW5nIHR5cGUgb2YgdGhlIHZhcmlhYmxlCisgICAgYXMgcGFyc2VkIGZyb20gU05NUCBtZXNzYWdlLgorICAgIAorICAgIFRoaXMgY2FuIGxlYWQgdG8gY3Jhc2hlcyB3aGVuIGluY29taW5nIHBhY2tldHMgY29udGFpbnMgYSB2YXJpYWJsZSB3aXRoCisgICAgTlVMTCB0eXBlLCB3aGlsZSB0aGUgTUlCIHNheXMgdGhlIHZhcmlhYmxlIHNob3VsZCBiZSBub24tTlVMTCwgbGlrZSBJbnRlZ2VyLgorICAgIFRoZSBmb3JtYXR0ZXIgdGhlbiB0cmllcyB0byBpbnRlcnByZXQgdGhlIE5VTEwgKGZyb20gcGFja2V0KSBhcyBJbnRlZ2VyIChmcm9tCisgICAgTUlCIGZpbGUpLgorCitjb21taXQgOWM0ZGRjYTk2MDgyYzEzOWNmY2U5MjhlZWEzY2ZlNzkzZDM0ZjVjMgorQXV0aG9yOiBKZWZmIEdlaGxiYWNoIDxqZWZmZ0BvcGVubm1zLm9yZz4KK0RhdGU6ICAgVGh1IEp1bCAzMSAxMTo1MjoxOCAyMDE0IC0wNDAwCisKKyAgICBBZGQgYSBzY2FsYXIgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIHNlZW4gYnkgdGhlIGFnZW50LiBQbGFjZWQgdGhpcyBpbiB0aGUgc3lzdGVtU3RhdHMgZ3JvdXAgZm9yIGxhY2sgb2YgYW4gb2J2aW91c2x5IGJldHRlciBsb2NhdGlvbi4gVXBkYXRlZCBVQ0QtU05NUC1NSUIgYWNjb3JkaW5nbHkuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA2NjRlZDk0M2Y2M2RmZTkzOTNlOTU5ODQwZWNkMjNjMzFjOWQ4Zjg5CitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBXZWQgQXVnIDI3IDE2OjAyOjU3IDIwMTQgLTA0MDAKKworICAgIEhhbmRsZSBkdXBsaWNhdGVzIGluIGEgYmluYXJ5X2FycmF5IGNvbnRhaW5lcgorICAgIAorICAgIFRoZSBDT05UQUlORVJfS0VZX0FMTE9XX0RVUExJQ0FURVMgc2V0dGluZyBpcyBmdW5kYW1lbnRhbGx5IGZsYXdlZDsKKyAgICBpdCByZWFsbHkgZWZmZWN0aXZlbHkgbWVhbnQgIkkgcHJvbWlzZSBJIHdvbid0IGluc2VydCBkdXBsaWNhdGVzCisgICAgc28gZG9uJ3QgY2hlY2sgYXQgaW5zZXJ0IHRpbWUiLiAgSG93ZXZlciwgdGhlIGlwLWZvcndhcmQtbWliCisgICAgc2V0cyB0aGlzIGZsYWcgYnV0IHJlbGllcyBvbiB0aGUgZHVwbGljYXRlIHByZXZlbnRpb24gYXQgaW5zZXJ0CisgICAgdGltZSB1bmRlciBjZXJ0YWluIHNjZW5hcmlvcyAoZS5nLiwgbXVsdGlwbGUgYXR0YWNobWVudHMgdG8gdGhlCisgICAgc2FtZSBzdWJuZXQgb24gTWFjT1MpLCByZXN1bHRpbmcgaW4gYSBsb29wIGluIGlwLWZvcndhcmQtbWliCisgICAgaW4gdGhlc2Ugc2NlbmFyaW9zLiAgU28sIG5vdyBpdCBtZWFucyAiY2hlY2sgZm9yIGR1cGxpY2F0ZXMgYXQKKyAgICBnZXRuZXh0IHRpbWUiIC0gdGhlIGJpbmFyeSBzZWFyY2ggd2lsbCBmaW5kIGFuIGFyYml0cmFyeSBvbmUKKyAgICBvZiB0aGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIGtleSwgYW5kIHdoZW4gd2UndmUgaW5jcmVtZW50ZWQKKyAgICB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90IHdlJ3ZlIGFjdHVhbGx5IGluY3JlbWVudGVkIHBhc3QKKyAgICBhbnkgZHVwbGljYXRlcy4gIFRoaXMgY29zdHMgYW4gZXh0cmEga2V5IGNvbXBhcmUgcGVyIGdldG5leHQuCisgICAgCisgICAgSWYgdGhlcmUncyBhIHNjZW5hcmlvIGluIHRoZSBmdXR1cmUgd2hlcmUgYSBNSUIgaW1wbGVtZW50YXRpb24KKyAgICBjYW4gcmVhbGx5IGd1YXJhbnRlZSB0aGF0IGl0IGlzbid0IGluc2VydGluZyBkdXBsaWNhdGVzLCB3ZQorICAgIG1pZ2h0IHdhbnQgdG8gYWRkIGEgIkNPTlRBSU5FUl9LRVlfSV9QUk9NSVNFX0lfV09OVF9JTlNFUlRfRFVQTElDQVRFUyIsCisgICAgdGhhdCBkaXNhYmxlcyB0aGUgaW5zZXJ0aW9uIGNoZWNrIGJ1dCBkb2Vzbid0IHBlcmZvcm0gdGhlIGdldG5leHQKKyAgICBjaGVjay4KKworY29tbWl0IGY4MmQyZDYzNDkzZjQwNzljMTY3YmEzNmIyMDNlNDljZGEzYmRlOGQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMTggMjE6NTU6MDQgMjAxNCArMDIwMAorCisgICAgRml4IGZvciBGcmVlQlNEOSBsb3NpbmcgbWliLW1vZHVsZXMgbGlzdCBiZWNhdXNlIG9mIG1pc3NpbmcgTkwgaW4gc2VkIGlucHV0LgorCitjb21taXQgNTJiMDcyYmNmZjMyZTM1MTJmYmY5NTZiNzJkMWEzNTNlNTBhOTYyYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAxOCAyMTo1MzozOCAyMDE0ICswMjAwCisKKyAgICBVcGRhdGVzIGZvciBCRkQgbWlicy4KKworY29tbWl0IDAzZGI2N2IzMjJkNzZkNzE3YmUxN2E4N2U3NzdjOTFkZDBmZGQzYWMKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMTIgMjM6NTU6MDcgMjAxNCAtMDQwMAorCisgICAgSWYgc2RsX2FsZW4gaXMgdG9vIGxvbmcgZm9yIHRoZSBzdGF0aWMgYnVmZmVyLCBjYWxsIGl0IGluY29tcGxldGUgaW5zdGVhZCBvZiBvdmVycnVubmluZyB0aGUgYnVmZmVyCisKK2NvbW1pdCA4YWU3OGRhMzkxZDViNmI2MWNjMjUxNmViMWE2NTIwYjBkYWJiNmJmCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgQXVnIDEyIDIyOjU1OjQ1IDIwMTQgLTA0MDAKKworICAgIFVzZSB2bV9yZWdpb25fNjQgb24gNjQtYml0IGFyY2g7IGNhY2hlIG1lbW9yeSBmb3IgbG9uZ2VyCisgICAgCisgICAgVGhpcyBpcyBhIHBvcnQgb2YgdGhlIEFwcGxlIHBhdGNoZXMgYXQKKyAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9uZXRfc25tcC9uZXRfc25tcC0xNDAuMS9wYXRjaGVzL2RhcndpbjY0LnBhdGNoCisgICAgMS4gVXNlIHZtX3JlZ2lvbl82NCBpbnN0ZWFkIG9mIHZtX3JlZ2lvbiBvbiBfX3BwYzY0X18gb3IgX194ODZfNjRfXworICAgIDIuIFVzZSAzMDAgc2Vjb25kIHRpbWVvdXQgZm9yIHRoZSBjYWNoZS4KKyAgICAKKyAgICBUaGlzIGNvbW1lbnQgYWJvdXQgdGhlIGNvZGUgYmVpbmcgaW5jcmVkaWJseSBleHBlbnNpdmUgaXMKKyAgICB2ZXJ5IHRydWU6IG9uIGEgMS43IEdIeiBpNyB3aXRoIDggR0Igb2YgUkFNIChhZG1pdHRlZGx5IGEKKyAgICBzbWFsbCBtYWNoaW5lKSBpdCB0b29rIDE3IHNlY29uZHMgdG8gY2FsY3VsYXRlIGFuZAorICAgIHJldHVybiBIT1NULVJFU09VUkNFUy1NSUI6OmhyTWVtb3J5U2l6ZS4wLiAgTW9zdCBTTk1QCisgICAgY2xpZW50cyB3b3VsZCBnaXZlIHVwIGxvbmcgYmVmb3JlIGdldHRpbmcgdGhpcyBhbnN3ZXIuCisKK2NvbW1pdCA2MTNlOTM3MDRiYTk1ZjNjNjQ0MDExNGViNzNiZjA5Zjc3NzU1NjBlCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgQXVnIDEyIDIyOjM0OjA2IDIwMTQgLTA0MDAKKworICAgIGRhcndpbjEzIGFsc28gdXNlcyBrZXJuZWxfc3lzY3RsCisKK2NvbW1pdCBjMTNkZDk3ZDdiZGRlNzMwMmQwMDI3ODdlZWYwM2Q3NzJmMjliY2Q0CitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgQXVnIDEyIDEyOjMwOjIzIDIwMTQgLTA3MDAKKworICAgIFVzZSB0aGUgcmlnaHQgaGVhZGVyIGd1YXJkLgorICAgIAorICAgIEJlbGlldmUgaXQgb3Igbm90LCBjbGFuZyBmb3VuZCB0aGlzIGRldGFpbCB3aXRoIC1XaGVhZGVyLWd1YXJkLgorCitjb21taXQgZDVkNDAzMDJiMGFiMzQwZTIxMWFkNzZkN2YxOTViODA3ZjM4N2VmMworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAxMSAxMjozMzo1MCAyMDE0IC0wNzAwCisKKyAgICB1cGRhdGUgdG8gbmV3IGtleSBJRAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMy5wcmU0IC0+IFY1LjcuMy5wcmU1CisKK2NvbW1pdCBmM2YzNzFiMjc2ZDI2NWI0NTVmYzQ5MGZjZTE5NDdkYWRmODllOWMyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDggMTk6NDk6MDYgMjAxNCAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4zLnByZTUKKworY29tbWl0IDQxODEzMmY0M2NjNDMyMzE5NjZhOGI5NjcyYzYyNmY2MGI5OTEwMzkKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgOCAxNDoyNDo1MiAyMDE0IC0wNzAwCisKKyAgICBmaXggdGhlIHJ1bi1hdXRvY29uZiBwcm9ncmFtCisKK2NvbW1pdCA3ZGI3OTU5NDkwNzVlZmI0ODkzNzNmNTFmNzA2NjM2ZmU1NGE5ODM1CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDggMTQ6MjQ6NTIgMjAxNCAtMDcwMAorCisgICAgZml4IHRoZSBydW4tYXV0b2NvbmYgcHJvZ3JhbQorCitjb21taXQgNzhmMWVmODE2ZGRhZDA4ZTdkN2M5ZTFiMTFlNGI0YWIyNmY2ZTRiMAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyA4IDEzOjI4OjQ3IDIwMTQgLTA3MDAKKworICAgIHVzZWQgdGhlIHJpZ2h0IGF1dG9jb25mCisKK2NvbW1pdCAxZWFlYWM4MDFhMzYyNWI3MmIwOWM3ZGE1ODAzODQwOWNkOGRjNjgxCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDggMTM6MjY6MTEgMjAxNCAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMy5wcmU1CisKK2NvbW1pdCA3ZWNmZDNlZGUxOWU5YzIyMThjOWJmNTk1OWMwOTVjZTlmYTZjOGFiCitBdXRob3I6IEJyaWFuIFNpcG9zIDxic2lwb3Nya2ZAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDYgMTA6MzA6NTQgMjAxNCAtMDcwMAorCisgICAgRml4IGRldGVjdGlvbiBvZiBzaGEyMjQgYW5kIHNoYTM4NCwgcGF0Y2ggZnJvbSBCcmlhbiBTaXBvcworICAgIAorICAgIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvYnVncy8yNTY0LworICAgIAorICAgIEx1Y2tpbHkgbm9ib2R5J3MgbmVlZGVkIHRvIGJ1aWxkIHVzaW5nIGFuIE9wZW5TU0wgdmVyc2lvbgorICAgIHRoYXQgZG9lc24ndCBzdXBwb3J0IHNoYTIyNCBvciBzaGEzODQsIHNpbmNlIHRoZSBpbnZlcnNpb24KKyAgICBvZiB0aGUgdGVzdCBoZXJlIHdvdWxkIHRyeSB0byB1c2Ugc2hhMjI0L3NoYTM4NCBzdXBwb3J0IG9ubHkKKyAgICBvbiBPcGVuU1NMIHZlcnNpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtIQorCitjb21taXQgYTkzOTkxZWFmNTNiMTk5YjE5YzU4MmI2MzBkYTI1MTU4MzAwYTlkMQorQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBsb2NhbGhvc3Q+CitEYXRlOiAgIEZyaSBBdWcgMSAxMDowNzo0NSAyMDE0IC0wNDAwCisKKyAgICBmaXggIzI0ODIgc25tcCByZXNwb25zZTogVG9vIGxvbmcKKworY29tbWl0IDlmNDFkMzBiMDllN2M4NWI4MjY4MTAzY2EzMjBhYzZjYzMyZDViMDQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdWwgMjYgMDg6Mjg6NDMgMjAxNCArMDIwMAorCisgICAgRml4IGJ1ZyAyNTQ2OiBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwgdXNlcyB3cm9uZyBwb3J0IGZvciBzbm1wdHJhcCArIHVkcDYKKworY29tbWl0IGRiMWYyMTc1NDFlMDBiNTM4MTNkOTRmNmJlZmI5YTQyZDQ4MzhlOTUKK0F1dGhvcjogSmVmZiBHZWhsYmFjaCA8amVmZmdAb3Blbm5tcy5vcmc+CitEYXRlOiAgIEZyaSBKdWwgMjUgMTY6MTE6MjMgMjAxNCAtMDQwMAorCisgICAgRml4IGJ1ZyAyNTYyOiBXaW5kb3dzIHg2NCBidWlsZCBicm9rZW4gb24gNS43LjMucHJlNAorCitjb21taXQgOTc0MWYwOGU3NWI0MTYyYmIzYzhiNDQ5Mjc5ZjE4MmQ5NDlkYTM3MworQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IEp1bCAyNCAwODoxMDo0MCAyMDE0IC0wNDAwCisKKyAgICBVc2UgdGhlIHN0YW5kYXJkIGV4cHIgIjoiIHN5bnRheAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMy5wcmUzIC0+IFY1LjcuMy5wcmU0CisKK2NvbW1pdCA4NjRhYmI1YmExZWIzMjRlNDIzMTU3ZGI1ZmIxNzIzZjg1NTk3M2IyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDIzIDE1OjA3OjQxIDIwMTQgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMy5wcmU0CisKK2NvbW1pdCA1ZmM4Zjk5YzlmNzdkZGFkZWVhY2VkYWU3ZjA2ZmVhMTc2N2Q0YTlmCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDIzIDE1OjAyOjE5IDIwMTQgLTA3MDAKKworICAgIGZpeCBDKysgc3R5bGUgY29tbWVudAorCitjb21taXQgNTRhNGE5MGE1NTI5ZWE1OGFkZDllNmFmNmE3ZThhZDA2NTQ0MDgyOAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAyMyAxNDo0OTo0MSAyMDE0IC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4zLnByZTQKKworY29tbWl0IGMwZDY2ODI2YjcxZjA1NDAzZjM2YzdmODIzNGZmOGY3ZWNiZDE1OTAKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMjIgMDY6NDk6MjggMjAxNCAtMDcwMAorCisgICAgV2hlbiBlbmxhcmdpbmcgYSBsYXJnZV9mZF9zZXQsIHVzZSBGRF9aRVJPIGlmIHBvc3NpYmxlCisgICAgCisgICAgVGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YgY3JlYXRpbmcgYSBsYXJnZV9mZF9zZXQgb24gVU5JWAorICAgIGlzIHRvIGNyZWF0ZSBpdCB3aXRoIHNpemUgemVybywgYW5kIHRoZW4gaW1tZWRpYXRlbHkgZW5sYXJnZQorICAgIGl0IHRvIHNpemUgRkRfU0VUU0laRS4gIEluc3RlYWQgb2YgbG9vcGluZyBhbmQgY2FsbGluZworICAgIEZEX0NMUigpLCB3ZSBjYW4gb3B0aW1pemUgdGhpcyBjb21tb24gY2FzZSB3aXRoIHRoZSBPUydzCisgICAgRkRfWkVSTy4KKworY29tbWl0IGRjYWQzMWFlYjQ0MjM2OWE2ZmI1MmY0ZGM3ZDRmNzgxYmM1NjAwNmMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMTcgMjM6NDA6MTMgMjAxNCArMDIwMAorCisgICAgU29sYXJpcyBkb2VzIG5vdCBsaWtlICJncmVwIC1FIiBvciAiaWYgISIuCisgICAgUHJvcGFnYXRlIGNvbmZpZ3VyZXMgRUdSRVAgdG8gbWFuL01ha2VmaWxlLmluIGFuZCBhbHNvIHVzZWQgY29uZmlndXJlZCBTRUQuCisKK2NvbW1pdCBhNTFjYmVkZjdkMWQ0MjQzNDJhYjVjYTNhNGI2NzIxN2EzNjQ0MDlhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDE1IDIxOjQ1OjU0IDIwMTQgKzAyMDAKKworICAgIHNubXBuZXRzdGF0L2lmLmM6IHByb3Blcmx5IGRldGVjdCBzbm1wIGV4Y2VwdGlvbnMKKworY29tbWl0IGVlZTkyNTE5ZjM4ZTkzN2YyMjdiZWE3NzAxZGRiMTE1N2M4YmNjY2MKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMTUgMDc6Mjc6MTggMjAxNCAtMDcwMAorCisgICAgQ2xvc2UgcGlwZXMgd2hlbiBmcmVlaW5nIGNvbmZpZyBhbmQga2lsbCBjaGlsZCBwcm9jZXNzIG9uIGVycm9yCisgICAgCisgICAgV2hlbiBmcmVlaW5nIHRoZSBjb25maWcsIGNsb3NlIHRoZSBwaXBlcyBjb3JyZXNwb25kaW5nIHRvIHRoYXQKKyAgICBjb25maWcsIHNvIHRoZXkgZG9uJ3QgZ2V0IGxlYWtlZC4gIEFsc28sIGlmIHdlIGhhdmUgYW4gZXJyb3IsCisgICAgc2VuZCBhIFNJR0tJTEwgdG8gdGhlIGNoaWxkIHByb2Nlc3MgaW4gY2FzZSBpdCBpcyBibG9ja2VkIGFuZAorICAgIHdvbid0IGRpZSBqdXN0IGJlY2F1c2Ugd2UgY2xvc2VkIHRoZSBwaXBlcyB0byBpdC4KKworY29tbWl0IDg0MzFmOTEzNTU0ZTBjY2NjNDhiZWRjZTFmZDRhOGEyODhiNmMyN2QKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMTUgMDc6MTk6MzMgMjAxNCAtMDcwMAorCisgICAgSWYgdGhlIGFzcCBsb29rdXAgcmV0dXJucyBOVUxMLCBkb24ndCB0cnkgdG8gdXNlIGl0CisgICAgCisgICAgSWYgdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBhc3AsIHdlIHNldCB0aGUgcmVzdWx0IHByb3Blcmx5CisgICAgYnV0IHN0aWxsIGZhbGwgdGhyb3VnaCBhbmQgYXR0ZW1wdCB0byB1c2UgaXQuICBJbnN0ZWFkLCBqdXN0CisgICAgY29udGludWUuCisKK2NvbW1pdCAxNDZmYTM4NGQ4YjA1ZTFlNWEyYzY3Zjg4ZDBlY2EwYTMwNGZhMWYwCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBNb24gSnVsIDE0IDE1OjI2OjE0IDIwMTQgLTA3MDAKKworICAgIEZpeCBkZXBlbmRlbmNpZXMgZm9yIGF1dG8tZ2VuZXJhdGVkIG1hbiBwYWdlcworICAgIAorICAgIEFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIGF1dG8tZ2VuZXJhdGVkIC5zbyBmaWxlcyBhcmUgbGlzdGVkCisgICAgaW4gdGhlIHJpZ2h0IE1ha2VmaWxlIHZhcmlhYmxlcywgYW5kIHVwZGF0ZSB0aGUgdmFyaWFibGVzCisgICAgdG8gaW5jbHVkZSB0aGUgb25lcyB0aGF0IGhhZCBiZWVuIGxlZnQgb3V0IGFscmVhZHkuCisKK2NvbW1pdCA0NDMxNzI4Y2Y3YTA5NTBhZWQyOTNkNDhjMDJlNjkwMDBmNWI4M2U4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gSnVsIDEzIDAzOjA3OjIxIDIwMTQgLTA3MDAKKworICAgIEFJWDogRml4IG1vcmUgY29tcGlsZXIgd2FybmluZ3MKKyAgICAKKyAgICBBdm9pZCB0aGF0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgY2FzdGluZyBhd2F5IGNvbnN0LCBhYm91dAorICAgIHVudXNlZCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zLCBhYm91dCBtaXNzaW5nIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICBhbmQgYWxzbyBhdm9pZCB0aGF0IHRoZSBjb21waWxlciBjb21wbGFpbnMgdGhhdCB0aGUgdHlwZSBvZiB0aGUKKyAgICB0aGlyZCBhcmd1bWVudCBvZiBtbnRjdGwoKSBpcyB3cm9uZy4KKworY29tbWl0IDQyYTY1ZjExZTNlZDU2OTYzZjc4YTVjMTU2MWVkZDY3NjU4Y2NkMDAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBKdWwgMTMgMDk6NDc6MjYgMjAxNCArMDIwMAorCisgICAgUmVtb3ZlIEM5OSBsZW5ndGggc3BlY2lmaWVyICd6JyBhbmQgdXNlIGEgY2FzdCBpbnN0ZWFkCisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IGI0ZWFiMTExMzllYjEyMmM5YWQzYzEzYWI4Yjk0NTNlMDRlNDY4NDIuCisKK2NvbW1pdCAzNWQwZjU5Y2RkODg5NGI4ZmJiYWQ2NTM3MGI1ZTMwMWUzNzdhMzdmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSnVsIDExIDIxOjI2OjMzIDIwMTQgKzAyMDAKKworICAgIFVwZGF0ZWQgRE9DUy1JRi1NSUIgcmVmZXJlbmNlCisKK2NvbW1pdCA3YTRkMmVhMmIzZTE2M2ZkZDk4ZjA2N2FlNDQwZmFhMzE1MmM4MGM2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSnVsIDExIDIxOjI1OjI3IDIwMTQgKzAyMDAKKworICAgIFVwZGF0ZWQgSUFOQSBtaWJzCisKK2NvbW1pdCAwMWIzYjY2NDY0MTNjMTRhMDUwNzQyNzI2Yjk3Y2YzMDhiOGZlMDliCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDkgMjM6NTE6MjcgMjAxNCArMDIwMAorCisgICAgQWRkIFJGQyA3MjU3IHZwbHMgbWlicworCitjb21taXQgYjBiZTFkOGFkMmNjYmNhYTI5ZmZjN2NmODg0ZDAyNDM4YzRjMTY2NQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCA5IDIzOjUwOjIxIDIwMTQgKzAyMDAKKworICAgIGFkanVzdCBkZWJ1ZyB0b2tlbiBmb3IgbmV0c25tcF9zb2NrYWRkcl9pbjZfMgorCitjb21taXQgOTkyMGU5ZTc2N2IxMGYwMjlhYjRiMDIwZTgyNTk2NzZkMWEzMmIyZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEp1bCA4IDEwOjI1OjIyIDIwMTQgKzAyMDAKKworICAgIEFJWDogU3VwcHJlc3MgYSBjb25maWd1cmUgd2FybmluZworICAgIAorICAgIEF2b2lkIHRoYXQgdGhlICdzb3J0JyBjb21tYW5kIGNvbXBsYWlucyBkdXJpbmcgdGhlIGNvbmZpZ3VyZSBwcm9jZXNzCisgICAgdGhhdCBpdHMgaW5wdXQgaXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLiBTZWUgYWxzbyBjb21taXQKKyAgICBhNjNlMzgxZDljMWM5Yzg3MjEwYmYyYjAyMmUzZDZhYzcxZDI3YTdlLgorCitjb21taXQgYjRlYWIxMTEzOWViMTIyYzlhZDNjMTNhYjhiOTQ1M2UwNGU0Njg0MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEp1bCA3IDE0OjA0OjQ1IDIwMTQgLTA3MDAKKworICAgIEFJWDogRml4IGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzCisgICAgCisgICAgQXZvaWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbXBpbGVyIHdhcm5pbmdzIGFyZSByZXBvcnRlZDoKKyAgICAtIEFzc2lnbm1lbnQgZGlzY2FyZHMgY29uc3QuCisgICAgLSBVbnVzZWQgbG9jYWwgdmFyaWFibGUuCisgICAgLSBNaXNtYXRjaCBiZXR3ZWVuIGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3VtZW50IGxpc3QuCisgICAgCisgICAgQWxzbyBjb3JyZWN0IHRoZSBpbmRlbnRhdGlvbiBvZiB0d28gU29sYXJpcy1zcGVjaWZpYyBjb2RlIHN0YXRlbWVudHMuCisKK2NvbW1pdCAwZGQyNzgzYjc0N2ZiOTZkNzQ5NzhlMTFjODJhNTA0YzBkZjFkNTU1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gSnVsIDYgMTE6MTI6MzAgMjAxNCArMDIwMAorCisgICAgSFAgVVgsIENQVSBzdGF0aXN0aWNzOiBGaXggYW4gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlCisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IDAwMzQ1ODFkZWIzZTY3NmQzMjg4MjRjODc2MzdhYWNhMzE4NTBjNmEuCisKK2NvbW1pdCBkYmQ1OTMxMzJmNzE5Y2MzZDliYjUwMTdlYzhiYzVjOGNiYjA2M2I3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDMgMjM6MjM6MjkgMjAxNCArMDIwMAorCisgICAgVDA3MWNvbTJzZWM2X3NpbXBsZTogdXNlIHByaXZhdGUgaG9zdCB0byBjaGVjayBpcHY2IGFkZHJlc3MgcmVzb2x1dGlvbiB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSBleHBlY3RlZCByZXN1bHQKKworY29tbWl0IDAwMzQ1ODFkZWIzZTY3NmQzMjg4MjRjODc2MzdhYWNhMzE4NTBjNmEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdW4gMzAgMjI6MDg6MzQgMjAxNCArMDIwMAorCisgICAgQlVHICNhMjU1MTogZml4IG5vbi1zZXF1ZW50aWFsIGNwdSBudW1iZXJzIG9uIEhQLVVYLgorICAgIFRoYW5rcyB0byBEYXZlIE9sa2VyLgorCitjb21taXQgYjBmNDliYTIxZmI4MTBlZmNiMDk5MmYwMWM0ZmM1ZmQzMGNmNjlhZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1biAyNiAyMTo0Mjo0OCAyMDE0ICswMjAwCisKKyAgICBjcHVfcHN0YXQuYzogZml4IG1pc3NpbmcgYnJlYWsocykgaW4gc3dpdGNoIHN0YXRlbWVudAorCitjb21taXQgYTYzZTM4MWQ5YzFjOWM4NzIxMGJmMmIwMjJlM2Q2YWM3MWQyN2E3ZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEp1biAyMCAxMDo1NzozOSAyMDE0ICswMjAwCisKKyAgICBSZWNlbnQgcGF0Y2ggZnJvbSBCYXJ0IChEaXNwbGF5IG1vZHVsZSBuYW1lcyBzb3J0ZWQpIG1ha2UgY29uZmlndXJlIGxvc2UgYWxsIG1vZHVsZSBuYW1lcyBvbiBTb2xhcmlzIDggYW5kIDEwLgorICAgIFRoaXMgY2hhbmdlcyB0aGUgd2F5IHRoZSBzb3J0aW5nIGlzIGRvbmUuCisKK2NvbW1pdCA2MGNmNmEwNmZmNzNhZTdkNGYyNDU0ZjJlZjQwYzU2ZmNkMzk0YmZhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVuIDE4IDIyOjE5OjMyIDIwMTQgKzAyMDAKKworICAgIG1ha2UgdGVzdDogYmFpbCBvdXQgaWYgbmV0c3RhdCBub3QgZm91bmQuCisKK2NvbW1pdCBjMTBmMmFjYmZjYzM4MzRjZDkzODY0MWRjMWEyYzcyYWNhN2Y3ODQ1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVuIDEwIDE2OjA2OjU5IDIwMTQgKzAyMDAKKworICAgIEZpeCBzdHVwaWQgYnVnIGluIHBrZy1uZyBwYXRjaAorCitjb21taXQgZTJkYTU0ODljM2JiODI5NzYyNjA0YzlkNDFmMDhjYjNhZWRmZDhhNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAyIDE1OjQxOjU2IDIwMTQgKzAyMDAKKworICAgIFBBVENIICNhMTI4MzogUmVjb2duaXplIE9yYWNsZSBBQ0ZTIGZpbGUgc3lzdGVtIChUaGFua3MgSm9obiBIYXhieSkKKworY29tbWl0IDU0YzJjYzI2NTVjMWI2YzU0ODVkOTk0NDFhZWQyYWMxNjllZWU1ZjkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdW4gMiAxNToyNjowMCAyMDE0ICswMjAwCisKKyAgICBJbnN0YWxsIFNOTVAtVFNNLU1JQiBhbmQgU05NUC1UTFMtVE0tTUlCCisKK2NvbW1pdCBjZTMwOTFjYmM0OGJjNDA1YzZlYjFhZjdkZGFlYjM3MGVkNzg2NDcxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDIgMTU6MjM6MjQgMjAxNCArMDIwMAorCisgICAgQlVHICNhMjUzNzogU3VwcG9ydCAqQlNEIHBrZy1uZworCitjb21taXQgNDllNGU0OWIxMmFhZTBkOGY3NTcyODM5MzY1ZDQ2Y2Y5MzJiZmVjOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAyIDE1OjE4OjQ2IDIwMTQgKzAyMDAKKworICAgIEZpeCBGcmVlQlNEIHN5c3RlbSBkZWZpbmUgY2hhaW4KKworY29tbWl0IDNjNWU3MTI0YjM1ZmQ2YWNhNDI4NGVhYzM2NWQ3NGI2OTgxMDc4NWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBKdW4gMSAxMToyNzoyNSAyMDE0ICswMjAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDEyNjcgc25tcGxpYjogcmVnaXN0ZXJfbWliX2NvbnRleHQoKSBmaXggZm9yIHJlYWQtb25seSB2YXJpYWJsZXMKKyAgICAKKyAgICBUaGlzIGlzIGEgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBhIHBhdGNoIGZyb20gSGFyc2hhIFNoaXZhbm5hLgorCitjb21taXQgNTZlY2M0MzNiMDllOTg1ZjFmZGQ3ODZhYWU2MGIwNjFmZmFjMDM4MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEp1biAxIDExOjEyOjQ3IDIwMTQgKzAyMDAKKworICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5jOiBGaXggY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IGM5Y2Y4ZmQ4NjlmMzc5MWE1OGE3MWI4YTYzZjVkNjFkNjcyOTFmYWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBKdW4gMSAxMDowOToyOCAyMDE0ICswMjAwCisKKyAgICBjb25maWd1cmU6IERpc3BsYXkgbW9kdWxlcyBuYW1lcyBzb3J0ZWQKKworY29tbWl0IDI3YTE2MDU0ZDY1NmViMTBhYmQwMzJkYmFjNjhlYmJjMjZjNzYwMDcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBKdW4gMSAwOToyMjo1MiAyMDE0ICswMjAwCisKKyAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9saW51eDogUmV3b3JrIG5ldGxpbmsgYnVmZmVyIGFsaWdubWVudAorICAgIAorICAgIEJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBKb3NodWEgSG9rZS4gU2VlIGFsc28KKyAgICBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL2J1Z3MvMjU0Ny8uCisKK2NvbW1pdCBiZDEzZjAwNGY2ZGMxNmRiZTU2ZWE1MzgxNjYyNDk1NzQ1ZDkzN2UxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgTWF5IDMxIDIwOjE2OjIwIDIwMTQgKzAyMDAKKworICAgIFdpbmRvd3M6IDY0LWJpdCBmaXggZm9yIGJ1aWxkLWJpbmFyeS5wbAorCitjb21taXQgMWZhNGRhMWM2Y2Y5Njc2MDYzMzNmN2U3N2U0MDhiN2Y1MWVmNjI1NgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIE1heSAzMCAxNzo0MjowNyAyMDE0ICswMjAwCisKKyAgICBXaW5kb3dzOiBTdXBwcmVzcyBWaXN1YWwgU3R1ZGlvIDIwMTMgd2FybmluZ3MgYWJvdXQgc3RydG91bGwoKQorCitjb21taXQgYjMxYWVkZTljOGI2MzQ2MWI1MDkyZTE2ZDYyNmE2NzZiMTcyZjhhYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1heSAyMiAyMzowNToxOSAyMDE0ICswMjAwCisKKyAgICBQQVRDSCAjMTI3NzogRml4IGlmc3BlZWQgZm9yIFNvbGFyaXMgem9uZXMuIFRoYW5rcyB0byBsaWpvCisKK2NvbW1pdCA4NjlmNzg1NTQxYTFlYTNiNDI3ODE0NTg2N2IxNTJiZWM1MGQzZWIwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXByIDMwIDE0OjUyOjMxIDIwMTQgKzAyMDAKKworICAgIHdpbkV4dERMTDogVHJhbnNsYXRlIFNubXBFeHRlbnNpb25RdWVyeSgpIFBEVSB0eXBlIGNvcnJlY3RseQorCitjb21taXQgZTAxMDdjMjZiM2EwZTMwYWU4MzIzNWJiMjI1ZmViNzhhMWExNTYzOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEFwciAzMCAxNTozODo1NSAyMDE0ICswMjAwCisKKyAgICBXaW5kb3dzOiBTaWxlbmNlIGEgY29tcGlsZXIgd2FybmluZworCitjb21taXQgM2E5Zjg3NTQyM2NjYWE4YmFlZTdlMTY0YmI4YTc1ZGQ4ZTBiNzM0MworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE1heSA2IDA2OjI3OjEwIDIwMTQgKzAyMDAKKworICAgIFBBVENIICMxMjc5OiBNb2RpZmllZCBwYXRjaCBmcm9tIE1vaGFuIGZvciBjb3JlZHVtcCBhZnRlciBjYWxsaW5nCisgICAgZnJlZSB3aXRoIGEgYmFkIHJlZ2V4LgorCitjb21taXQgNTEzMDJiYTU3Mjg1ZDRkNDc5OTJlZDE1YTQ2MDU4MDExMmEzZTkyNAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE1heSA2IDA2OjIxOjI0IDIwMTQgKzAyMDAKKworICAgIEJVRyAjMjUyMTogQUlYOiBkb250IGRpZSB3aGVuIENQVSBpcyBkeW5hbWljYWxseSBhZGRlZCB0byBzeXN0ZW0uCisKK2NvbW1pdCAxMzFjOTNiYTkyZTQ2ZGRkZWM0ZWIzYTgyMDhhYjVhM2MxMDI2NTA4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTWF5IDYgMDY6MjA6MjggMjAxNCArMDIwMAorCisgICAgQ29tcGxhaW4gYWJvdXQgLUQgb3B0aW9uIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKworY29tbWl0IDk2YTdhNmE4Njg5NWZkYmY4OTE3OTllMzc2OWIyN2E3ZTU0YWYwODQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgNiAwNjoxOTo0MiAyMDE0ICswMjAwCisKKyAgICBzbm1wdHJhcGQuODogYWRkIHNvbWUgbWlzc2luZyBmb3JtYXQgdG9rZW5zIHRvIG1hbiBwYWdlLgorCitjb21taXQgODBiZTkwN2JlOWY0ZjFkZjZhMTQ3MGZlYWZhYTkxNmI5YzljNDk5MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEFwciAyNyAxNToyNTozMCAyMDE0ICswMjAwCisKKyAgICBGaXggYnVnIDIzMTMgZm9yIGNyb3NzIGNvbXBpbGF0aW9uLgorCitjb21taXQgOWFlNTk4MTUzMGZkMmJkZDlmMmE1Yzg2YjdkNjk5NGI4NzMwMzNkNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEFwciAyNiAyMjozNjoyNiAyMDE0ICswMjAwCisKKyAgICBQcmVwYXJlIGZvciBGcmVlQlNEIDExIGFuZCAxMgorCitjb21taXQgZTMyZjcwYjEyZjU3ZDI2ZDY5ZDQ5MWYxYzc0MmIwMTMyYWNhNzY2MAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEFwciAyNiAyMTo0MjoyMSAyMDE0ICswMjAwCisKKyAgICBGaXggYSBjb3VwbGUgb2Ygc3RydWN0IHNpemVzIHRvIGJldHRlciBtYXRjaCBkZWNsYXJhdGlvbi4KKworY29tbWl0IDdjYzJkZWI1ZDkxNWQyNTcyMzI4MzE3ZDM3MDFkMzVkODYxZDNkOTIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBBcHIgMjYgMjE6MzQ6MjYgMjAxNCArMDIwMAorCisgICAgVXNlIGluZXRfcHRvbiBvbnBsYWNlIG9mIGluZXRfYXRvbiB0byBoZWxwIHBvcnRhYmlsaXR5LgorCitjb21taXQgYTA4N2ZjOWYxNjQwMjNkZTQxNGIwOWJmZDM3NDdjNzJmMWJjYTA3ZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEFwciAyNiAyMTozMDo1NCAyMDE0ICswMjAwCisKKyAgICBVcGRhdGUgdG8gY3VycmVudCBJQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCIGFuZCBjdXJyZW50IFJGQ3MuCisKK2NvbW1pdCA4NTcwMzdhOGQyNDU3YWM5YWEyYTUyNTEwOTU3NjQ3OTcxYTQ2NjM0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgQXByIDI2IDIxOjI4OjAwIDIwMTQgKzAyMDAKKworICAgIFByZXBhcmUgZm9yIEZyZWVCU0QgMTEgYW5kIDEyLgorCitjb21taXQgYjk5MzA4NDE3ZDRiZTdlMTM5ZjYxMDNkNDRmMTFiNTU0MzNhNmJmMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE1hciAxNiAwODowNDoxNSAyMDE0ICswMTAwCisKKyAgICBCZXR0ZXIgZG9jdW1lbnRhdGlvbiBmb3IgdHJhcCBsb2dnaW5nIGZvcm1hdHMuCisKK2NvbW1pdCBhNmU0ZWIyNmY1YzA0ZDE1NzYxY2VhZjkyNDU4MGUwYzQwZjcyZGZlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gTWFyIDkgMDg6NDY6NTcgMjAxNCArMDEwMAorCisgICAgc3dydW5fKjogU2ltcGxpZnkgY29tbWl0IGRhMDBiYTEKKworY29tbWl0IDM3YWY3OTIzYjgzMmYyZWM4MDgzN2ZhMjhlZGNhYzhlYjBjN2U4ZWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBNYXIgOSAwODozNDoxMiAyMDE0ICswMTAwCisKKyAgICBzd3J1bl8qOiBSZXN0b3JlIGJ1ZmZlciBvdmVyZmxvdyBwcmV2ZW50aW9uIGNvZGUgdGhhdCB3YXMgcmVtb3ZlZCBpbiBkYTAwYmExCisKK2NvbW1pdCBmNDM2Y2UyOGZkYTNlZGM3MDEwY2Q4NmVjZjNjMzg2YzVhZjUyMTk2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDggMTQ6MDc6NTcgMjAxNCArMDEwMAorCisgICAgdXRpbF9mdW5jOiBmaXggc2tpcHBpbmcgb2YgZGlnaXRzIHdoaWNoIHdvdWxkIHJ1biBvbmUgdG9vIGZhcgorCitjb21taXQgZGEwMGJhMTQyZDZiNTA0MjU1ODg5ZjA5ZWI5ZjdkMjIyZWY0MGFkYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciA4IDE0OjA0OjE5IDIwMTQgKzAxMDAKKworICAgIHN3cnVuXyo6IHNucHJpbnQgbWF5IGhhdmUgc2V0IGEgdG9vIGxvbmcgc3RyaW5nIGxlbmd0aC4gRml4IGl0IGlmIG5lZWRlZC4KKworY29tbWl0IDNiMjAyZWIwNWVjNGU1ZjZmOGY1NGJjOGFjYjQzNzM3M2U2YjVkMDMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgOCAxNDowMjoxOCAyMDE0ICswMTAwCisKKyAgICBzd2luc3RfYXB0OiBlbnN1cmUgcm9vbSBmb3Igc3RyaW5nIHRlcm1pbmF0b3IKKworY29tbWl0IDhhNjY4MTRlZGFkNWEyOGZkYmM4NjQ1ZmIwZTE0NDU5YmY5MTVkYTAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgOCAxNDowMDoyOCAyMDE0ICswMTAwCisKKyAgICBtdGFfc2VuZG1haWw6IGlzc3BhY2UgY2Fubm90IHRha2UgYSBjaGFyIGFyZ3VtZW50CisKK2NvbW1pdCAzZTczNGZiM2JkZGYxMWI5OWI2YmE3ZGRjYjMwYWU5MzJkOGJhM2IxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDggMTM6NTg6MDcgMjAxNCArMDEwMAorCisgICAgZXhwRXhwcmVzc2lvbkNvbmYsIGV4cFZhbHVlOiBpc3NwYWNlIGNhbm5vdCB0YWtlIGEgY2hhciBhcmd1bWVudC4KKworY29tbWl0IDc2ZThkNmQxMDAzMjA2MjlkOGEyM2JlNGIwMTI4NjE5NjAwYzkxOWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDYgMDk6MjE6NTEgMjAxNCArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxMjc1OiBmcm9tIFZpbGlhbSBQw7rEjWlrOiBmaXhlZCBQZXJsIHRyYXAgaGFuZGxlciB3aGVuIHByb2Nlc3NpbmcgdHJhcCB3aXRoIGVtcHR5IGNvbW11bml0eSBzdHJpbmcuCisKK2NvbW1pdCA1ZDA2YTVmYmI1ZWQzY2EyYjU4MjBlOGVmMmQ1YjViODhiOWQ3ZGY4CitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBNb24gRmViIDMgMTE6NTg6MDMgMjAxNCAtMDgwMAorCisgICAgQWxsb3cgdGhlIG5vZGVtYXAgdG8gY29udGFpbiBtdWx0aXBsZSBub2RlcyBmb3IgbWlicyBsaWtlIElGLU1JQgorICAgIAorICAgIEluIHRoZSBJRi1NSUIsICJpbnRlcmZhY2VzIiBhbmQgImlmTUlCT2JqZWN0cyIgYm90aCBjb250YWluCisgICAgc2lnbmlmaWNhbnQgc3VidHJlZXMuICBBbGxvdyBub2RlbWFwIHRvIGNvbnRhaW4gYSBjb21tYS1zZXBhcmF0ZWQKKyAgICBsaXN0IG9mIG5vZGVzLCB0byBoYW5kbGUgTUlCcyBsaWtlIHRoaXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4zLnByZTIgLT4gVjUuNy4zLnByZTMKKworY29tbWl0IDU0MTY2Y2Y2YzdhOThiZjhlNWQwZGJhYmY5YjVlNWEyNTVjNGM0MjEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMjUgMTI6NDU6MTQgMjAxNCAtMDgwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4zLnByZTMKKworY29tbWl0IDNkNGUzYTY2YmQwOTdlMzcyMGZlNWRlMmYyZTA1NzQxYjMzMDYzMDUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMjUgMTE6NDI6MTUgMjAxNCAtMDgwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMy5wcmUzCisKK2NvbW1pdCBhMWZkNjQ3MTZmNjc5NGM1NWMzNGQ3N2U2MTgyMTAyMzhhNzNiZmExCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRmViIDE5IDE1OjIxOjU3IDIwMTQgLTA4MDAKKworICAgIGJ1ZyBmaXggZnJvbSBmZW5uZXI6IGZpeCBJQ01QIG1pYiB0YWJsZSBoYW5kbGluZyBvbiBsaW51eAorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4zLnByZTEgLT4gVjUuNy4zLnByZTIKKworY29tbWl0IGJmMGExYzM3ZDhiOGM2NDRlODM3MDQxZDA5MGFhYmU4ZmQ4MTMxZTgKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMjUgMDc6NDk6MDQgMjAxNCAtMDgwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4zLnByZTIKKworY29tbWl0IGRlY2ZkOGQ3OWI1NGQyOThkZWQ5NzQzOWVmYjcxMGU4ZjZiYTUyNGMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMjUgMDc6MzM6NTIgMjAxNCAtMDgwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMy5wcmUyCisKK2NvbW1pdCA4YWVjY2VmMzliYmFlYjhiODAyNWE2OGVjNDc2MWJjODJlYzlhZWFhCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDI1IDA3OjI3OjQ3IDIwMTQgLTA4MDAKKworICAgIE5FV1M6IHNubXBkOiBwYXRjaCAyNTI1OiBmcm9tIFJ5YW4gU3RlaW5tZXR6OiBGaXggYXJndW1lbnQgbGVuZ3RoIHBhcnNpbmcgb2YgdGhlIGhvc3QgcmVzb3VyY2VzIG1pYgorCitjb21taXQgYjIyMmU3YTNlZWY1OWNiYjY4YTQ1MzQ3NmNiMzY0MzQyYzc0ZTY0MAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEZlYiAxOSAyMjoyNjowOCAyMDE0ICswMTAwCisKKyAgICBGaXggc3BlbGluZyBlcnJvcgorCitjb21taXQgZjhmY2IzYmMzODE4OGNjYmU5YmFjZWU1OGQ2ZmQyYjk4M2QwOTkyNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEZlYiAxOSAyMjoyNDoyNiAyMDE0ICswMTAwCisKKyAgICBGaXggc3BlbGluZyBlcnJvcgorCitjb21taXQgZDIxNGQ3MGM0NTI0ZTYyZmNjYWYxMDgzYWJjNWJhMWE0MzlhNDYzZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEZlYiAxOSAyMjoyMTo1NSAyMDE0ICswMTAwCisKKyAgICBzbm1wc3RhdHVzOiBkZXRlY3QgU05NUCBleGNlcHRpb24gcmVzcG9uc2VzLgorCitjb21taXQgYmY3NWVjNjY5NjVkMTU3Y2IwNDQyZjdkZmY1NjU2Zjk5Y2Q3MDYzNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEZlYiAxOSAyMjoyMDowNSAyMDE0ICswMTAwCisKKyAgICBGaXggdGVzdCBmb3IgY29tMnNlYzYgYWNjZXNzLgorCitjb21taXQgNjU2N2EzN2ZhMzAxYjhmYTFiNjgwMDlkNWEwYjNhM2NiZmI5ZThmMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiAxNyAyMTo0OToxMyAyMDE0ICswMTAwCisKKyAgICB0ZXN0aW5nL01ha2VmaWxlLmluOiBtYWtlIHN1cmUgJyQnIHN1cnZpdmVzIGZvciBwZXJsIHRlc3QuCisKK2NvbW1pdCAwNWI1NTFiYzMzMTE4NWVkYTFjMDgxZDMxMzhkMGFjNjI1YjA3ZDZhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDE3IDIxOjM2OjQ4IDIwMTQgKzAxMDAKKworICAgIEZpeCBzb21lIG1hbiBwYWdlIHNwZWxsaW5ncy4KKworY29tbWl0IDhiMDU1NWQ5NWNiYzIzOGNiZTk4MzY0MzliODgwNzBjODBhOWNhNWUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgMTcgMjE6MzU6MjggMjAxNCArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IGZpeCBjYWxsIG9mIG1lbWNweSB3aXRoIG92ZXJsYXBwaW5nIGFyZWFzLgorCitjb21taXQgM2M2YTdhNmM5NDc0MjQ4MjRlNzI0ZTI5NDQ4M2E3ZWNkNzBkOWQ0MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiAxNyAyMTozMzo0NyAyMDE0ICswMTAwCisKKyAgICByb3V0ZV9pb2N0bC5jOiBzZXQgcHJvcGVyIG1hc2sgYmVmb3JlIFNJT0NERUxSVC4KKworY29tbWl0IGY5OWVmNWNlZjIwM2VhMzc4NTUzYTJhYjQ5MjVmY2Q4NjllN2Y1YTMKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBGZWIgMTEgMDg6NDc6NTEgMjAxNCAtMDgwMAorCisgICAgRGF2aWQgSmFydmllJ3MgcGF0Y2ggZm9yIGJ1ZyAyNTA3CisKK2NvbW1pdCBkNzBmMmU5MWUyYzcyNThlNzY4ZTMyYjY4M2Q4MTRhOTQxNTY0YWMxCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBNb24gRmViIDMgMTE6NTg6MDMgMjAxNCAtMDgwMAorCisgICAgQWxsb3cgdGhlIG5vZGVtYXAgdG8gY29udGFpbiBtdWx0aXBsZSBub2RlcyBmb3IgbWlicyBsaWtlIElGLU1JQgorICAgIAorICAgIEluIHRoZSBJRi1NSUIsICJpbnRlcmZhY2VzIiBhbmQgImlmTUlCT2JqZWN0cyIgYm90aCBjb250YWluCisgICAgc2lnbmlmaWNhbnQgc3VidHJlZXMuICBBbGxvdyBub2RlbWFwIHRvIGNvbnRhaW4gYSBjb21tYS1zZXBhcmF0ZWQKKyAgICBsaXN0IG9mIG5vZGVzLCB0byBoYW5kbGUgTUlCcyBsaWtlIHRoaXMuCisKK2NvbW1pdCA5ODc4MWFlM2RhNDNiN2IxNTgzZWNkZTNlMjFiYjY1MjVhMmMwYjgwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDI3IDIyOjI0OjE4IDIwMTQgKzAxMDAKKworICAgIHJvdXRlX2lvY3RsLmM6IEZpeCBzZXR0aW5nIHRoZSBuZXRtYXNrIHdoZW4gY3JlYXRpbmcgcm91dGUgdGhyb3VnaAorICAgIGluZXRDaWRyUm91dGVUYWJsZSBhbmQgaXBDaWRyUm91dGVUYWJsZS4KKworY29tbWl0IDJlOTQ3Nzc2OTNmMTg1MzQ3OWRlZDY3MGJlMzA3ZWNlNzEzOGZlYjUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMjcgMjI6MTM6MDUgMjAxNCArMDEwMAorCisgICAgRml4IGNvbXBpbGUgZm9yIFNvbGFyaXMgd2l0aG91dCBJUHY2LgorCitjb21taXQgOGY2OTkxYTIxMTRmZDIxYmE1NTE5ZWU5NTc2YmViMDgyZjYwM2RlYworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAyMyAxNjozMDo0NiAyMDE0ICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogc2VhcmNoIGlmTmFtZSBhbmQgaWZBbGlhcyB3aGVuIGxvb2tpbmcgZm9yIGludGVyZmFjZQorICAgIG5hbWUgZnJvbSAtQ0kgb3B0aW9uLgorCitjb21taXQgNGEzNjAxMDQ2NTljMTY5Y2UyMzIyNTZlMTM4ZDkzOGQ5NGU0MzVmOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAyMyAxNjoyODozMiAyMDE0ICswMTAwCisKKyAgICBsb2dtYXRjaDogZml4IG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGFua3MgdG8gZ2NjIG9yIGNsYW5nCisgICAgd2l0aCAtZnNhbml0aXplPWFkZHJlc3MgKHJlY29tbWVuZGVkISkKKworY29tbWl0IGVlZjJmNjRiNDYzNTdiMzUzYzc5NTA0YmM1OTM1MzVlYmU3NDIxZTcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMjMgMTY6Mjc6MDcgMjAxNCArMDEwMAorCisgICAgY3B1X2xpbnV4OiBzdXBwb3J0IHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gMTAwIGNwdXMuCisKK2NvbW1pdCAzYmQ2ODNjOTZkNmE4ODY0ZmJkODA3ODU3NGFlZThjZDQzMWNlMzAyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE1IDE4OjM2OjAxIDIwMTQgKzAxMDAKKworICAgIFVwZGF0ZSBvcHRpb25zIGxpc3RzIGluIG1hbnVhbCBwYWdlcyBhbmQgY29tbWFuZHMgaGVscC4KKworY29tbWl0IGE1ZWZlOGRmMTdkZGM0ZjY2OTNjN2RhOWE1MmM0MDFmNGRiMmJlNjMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTUgMTg6Mjg6MjQgMjAxNCArMDEwMAorCisgICAgdGVzdCBUMDI3OiBtYWtlIHN1cmUgaXQgd29ya3MgYWxzbyB3aGVuIGNvbmZpZ3VyZWQgd2l0aCAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24gIT0gMy4KKworY29tbWl0IDU3ZDEwODI5MDBmOWFjOTMxNDQ0MzE2YTZmOTVmMTllZGEwNjkwNzQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTUgMTg6MjY6MjQgMjAxNCArMDEwMAorCisgICAgY3B1X2xpbnV4OiByZW1vdmUgcmVkdW5kYW50IGNhc3RzLgorCitjb21taXQgOWY0YzU3MjYxNDA5MTQwNGRlY2JhMGQ0ZWYxYTRjYmFmOWZjNWJkMgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gOSAxMzozNToyNyAyMDE0ICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgbW9uaXRvcmluZyBiYXNlZCBvbiBub24tZGVsdGEgdHJpZ2dlci4KKyAgICAKKyAgICBzbm1wZCBjcmFzaGVkIHdpdCBmb2xsb3dpbmcgc25tcGQuY29uZjoKKyAgICAgICAgbW9uaXRvciAtcyAtRCAtciAxMCAtZSBMT0dNQVRDSCAtbyBsb2dNYXRjaEN1cnJlbnRDb3VudCAiTG9nIE1hdGNoIiAhPSBsb2dNYXRjaEN1cnJlbnRDb3VudAorICAgICAgICBsb2dtYXRjaCBMb2dpbkZhaWx1cmUxIC92YXIvbG9nL3NlY3VyZSAxMCBzdTogLipmYWlsLioKKyAgICAKKyAgICBUaGUgcmVhc29uIHdhcyB1bml0aWFsaXplZCB2YXJpYWJsZSBzeXNVVF92YXIgaW4gbXRlVHJpZ2dlcl9ydW4oKSwgaXQgd2FzCisgICAgZmlsbGVkIG9ubHkgaWYgdGhlIHRyaWdnZXIgd2FzIGRlbHRhLXZhbHVlZCwgd2hpbGUgaXRzIHZhbHVlIHdhcyB1c2VkIGZvciBhbGwKKyAgICB0cmlnZ2Vycy4KKyAgICAKKyAgICBXaXRoIHRoaXMgcGF0Y2gsIHN5c1VUX3ZhciBpcyBmaWxsZWQgZm9yIGFsbCBjb2RlIGJyYW5jaGVzIHdoZXJlIGl0IGlzIG5lZWRlZC4KKworY29tbWl0IGM3NTEyYWZlNTY0M2VjYWFlOTc0NWFjMTk5YjgzOWMzYWFkODQ1N2IKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjkgMTc6MzQ6NTEgMjAxMyArMDEwMAorCisgICAgUmVnZW5lcmF0ZSBkZXBlbmRlbmNpZXMKKworY29tbWl0IGM5MWY4NDBkODM5ODFmNjYwYjc1Mjc0ZGJjYzM4N2NiNWM1Zjk5YWYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjkgMTc6Mjk6MjYgMjAxMyArMDEwMAorCisgICAgUmVnZW5lcmF0ZSBkZXBlbmRlbmNpZXMKKworY29tbWl0IDJkZDdkYmE3NmQxZDBiNGY4NjY4MzRlMGZkNjAxNDhjMjgxYTE1M2MKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjkgMTc6MjU6MDUgMjAxMyArMDEwMAorCisgICAgUmVnZW5lcmF0ZSBkZXBlbmRlbmNpZXMKKworY29tbWl0IDU5MTQzMWY3OTkxZjgzZDIzODVhZGJjNWEyMmM0YTg5NTc2YmMzMTMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjkgMTc6MjE6NTYgMjAxMyArMDEwMAorCisgICAgUmVnZW5lcmF0ZSBjb25maWd1cmUgdXNpbmcgdGhlIHJpZ2h0IGF1dG9jb25mIHZlcnNpb24KKworY29tbWl0IDg1YmI0YjVjOWY0ODk2ODc2NzE1Y2IxZjE0ZjRmMWI1ODJkMjIzYmQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjkgMTc6MTI6MDMgMjAxMyArMDEwMAorCisgICAgUmVnZW5lcmF0ZSBkZXBlbmRlbmNpZXMKKworY29tbWl0IGQyNTVjYTQyNmQxZTNkNGJjNDhiOGYzZGI5Mzc0MzU3ODg5MzRjNDIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjkgMTI6MzU6MzAgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IEF2b2lkIGR1cGxpY2F0ZSBhbmQgdHJhaWxpbmcgc3BhY2VzIGluIHRoZSBkZXBlbmRlbmN5IGZpbGVzLgorCitjb21taXQgZDE1Y2QyYjk3NDNjY2NiNTAyZGVhZmQxNDNhZGUwYWE5MGNmMzFlNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAyMSAwOTowNToxMyAyMDEzICswMjAwCisKKyAgICBNaW5HVzogQnVpbGQgZml4CisgICAgCisgICAgQXBwYXJlbnRseSB3aXRoIHJlY2VudCBNaW5HVyBoZWFkZXIgZmlsZXMgPHdpbnNvY2syLmg+IHNob3VsZCBiZQorICAgIGluY2x1ZGVkIGluc3RlYWQgb2YgPHdpbnNvY2suaD4uIE1vZGlmeSA8bmV0LXNubXAvdHlwZXMuaD4gYWNjb3JkaW5nbHkuCisKK2NvbW1pdCA3YmEyM2U1NzA3NjQ5OWVmOGVlYjIzODg1MzgzNDczY2NmNDQ3MzY1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gRGVjIDE1IDEwOjU4OjI1IDIwMTMgKzAxMDAKKworICAgIFdpbjMyOiBiYXRjaCBidWlsZDogQ2hlY2sgd2hldGhlciBQZXJsIGFyY2hpdGVjdHVyZSBtYXRjaGVzIHRhcmdldCBhcmNoaXRlY3R1cmUKKyAgICAKKyAgICBCdWlsZGluZyB0aGUgUGVybCBtb2R1bGVzIGZhaWxzIGluIGEgc3VidGxlIHdheSBpZiBlLmcuIGEgMzItYml0IFBlcmwKKyAgICBpbnRlcnByZXRlciBpcyBwcmVzZW50IGluICVQQVRIJSBhbmQgYSA2NC1iaXQgQyBjb21waWxlciBvciB2aWNlIHZlcnNhLgorICAgIEhlbmNlIGNoZWNrIHdoZXRoZXIgUGVybCBpbnRlcnByZXRlciBhbmQgQyBjb21waWxlciB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgbWF0Y2ggYmVmb3JlIHN0YXJ0aW5nIGEgYnVpbGQuCisKK2NvbW1pdCA2YjcwNmM1M2Q0Y2Y3NTFlNDk1YWFiNjZmZTM5ZmQ1MWMzMmNlOTMwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gRGVjIDE1IDEwOjA2OjIxIDIwMTMgKzAxMDAKKworICAgIFdpbjMyOiBWaXN1YWwgU3R1ZGlvIDIwMTMgYnVpbGQgZml4CisgICAgCisgICAgQXBwYXJlbnRseSBWaXN1YWwgU3R1ZGlvIDIwMTMgZG9lcyBub3Qgc3VwcG9ydCBnb3RvIDx0eXBlZGVmIG5hbWU+LgorICAgIEhlbmNlIHJlbmFtZSB0aGUgVUlOVCBsYWJlbC4gRm9yIGNvbnNpc3RlbmN5IHJlYXNvbnMsIGFsc28gcmVuYW1lCisgICAgdGhlIE9DVCBsYWJlbC4KKworY29tbWl0IDEzYzg1OTBlMzgyNjlhOTI2NWVhZDVjODVmMDVjODg5NGU4NmQ4NGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBEZWMgMTUgMDk6MzE6NDQgMjAxMyArMDEwMAorCisgICAgUmVtb3ZlIHRoZSBORVRTTk1QX0RPTlRXQUlUIC8gTkVUU05NUF9OT1NJR05BTCBhbGlhc2VzIGZvciBzZW5kdG8vc2VuZG1zZyBmbGFncworICAgIAorICAgIE5vdGU6IHRoaXMgcGF0Y2ggaXMgYSBtb3JlIGVsYWJvcmF0ZSB2ZXJzaW9uIG9mIHRoZSBWNS03LXBhdGNoZXMgY29tbWl0CisgICAgODlhNTA0ZmUzMzFlMDlhNTRmNmIwMWMyODc3Y2YwMjI5MDA3MDVhOCAoMjAxMS0xMi0xOSkuCisKK2NvbW1pdCBlMGVhZDJkNTRlYmY0MzUzM2U1NjJjMzQwMmUxMjE4OGNmZGMwNzllCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgRGVjIDE0IDE4OjU0OjAxIDIwMTMgKzAxMDAKKworICAgIHdpbjMyL2J1aWxkLnBsOiBBZGQgc3VwcG9ydCBmb3IgdGhlIFZpc3VhbCBTdHVkaW8gMjAxMyBjb21tYW5kLWxpbmUgZW52aXJvbm1lbnQKKworY29tbWl0IDg4ODYwOTVhOTkwOTAyOTNiMDZhMDcxOWU3Yjg2OGYxZWRjMTQ5MzMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBEZWMgMTQgMTg6Mjk6MDEgMjAxMyArMDEwMAorCisgICAgbGliYWdlbnQ6IFdpbjMyIGJ1aWxkIGZpeCAoc2VlIGFsc28gY29tbWl0IDAxNzIzYzYpCisKK2NvbW1pdCA1ZjMyYjRhYWE4YmNkMjJlYmE5YzY0OTIyM2ZlMDgwZDU0NzliYzhlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgRGVjIDE0IDE3OjE3OjMwIDIwMTMgKzAxMDAKKworICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oOiBBZGQgYSBtaXNzaW5nIGRlY2xhcmF0aW9uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4yIC0+IFY1LjcuMy5wcmUxCisKK2NvbW1pdCBkMDExN2FkZWU4NGVmY2I1OGE1ZTQxODNmN2Q3Y2M2ZTcwMGYwMjY0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDUgMjM6MzM6NTEgMjAxMyAtMDgwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4zLnByZTEKKworY29tbWl0IGIxZGJkYThiYmNjYTgyMzc3NjY0ZGNhOWNiNmJiMDZmOWNlNjM3YTIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgNSAyMzozMzozNyAyMDEzIC0wODAwCisKKyAgICBSZXBsYWNlIC8vIGNvbW1lbnRzIHdpdGggLyogY29tbWVudHMKKworY29tbWl0IDllZTM5NmNlYzE4MTE1MTJmYmNiMjQ0OTBiM2JlMGI5NzBmNjlmZmIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgNSAyMzowNjoxMyAyMDEzIC0wODAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4zLnByZTEKKworY29tbWl0IDZjMzkyZmVkNmNkNWQ3YTMyZWQxMGM4MTcwYWVkODUxY2VlNzc5ODUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgNSAyMzowNDoyNSAyMDEzIC0wODAwCisKKyAgICBpbmNyZW1lbnQgdGhlIHJldmlzaW9uCisKK2NvbW1pdCBmNTQwM2U3NTY3ZWIwNzFiZWQ4ZGFkYmEzOGEyY2RhNjAzMzJiOGZjCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBTdW4gRGVjIDEgMTg6MjQ6MTIgMjAxMyAtMDgwMAorCisgICAgRG9uJ3Qgc2V0IHRoZSBpZmluZGV4IHdoZW4gc2VuZGluZyBhIG5vcm1hbCByZXBseS4KKyAgICAKKyAgICBTZXR0aW5nIHRoZSBpZmluZGV4IGluIHRoZSBJUF9QS1RJTkZPIHJlc3VsdHMgaW4gc2V0dGluZworICAgIHRoZSBzb3VyY2UgYWRkcmVzcyB0b28gKGlnbm9yaW5nIHRoZSBzb3VyY2UgYWRkcmVzcyB0aGF0CisgICAgd2UgYWxzbyBzdXBwbHkpLiAgVGhlIHNlcXVlbmNlIGhlcmUgaXMgdGhhdCB3ZSBzZW5kIHdpdGgKKyAgICBubyBpbnRlcmZhY2Ugc3BlY2lmaWVkIGJ1dCB0aGUgcmVxdWVzdCdzIGRlc3RpbmF0aW9uCisgICAgc3BlY2lmaWVkIGFzIG91ciBzb3VyY2UuICBJZiB3ZSBnZXQgRUlOVkFMLCBpdCdzIGJlY2F1c2UKKyAgICB0aGUgcmVxdWVzdCdzIGRlc3RpbmF0aW9uIHdhcyBhIGJyb2FkY2FzdCBhZGRyZXNzIHdoaWNoCisgICAgaXMgYW4gaW52YWxpZCBzb3VyY2UgYWRkcmVzcywgc28gd2UgdHJ5IGFnYWluIHdpdGggdGhlCisgICAgaW5jb21pbmcgaW50ZXJmYWNlJ3MgaWZfaW5kZXggYW5kIHNwZWNpZnkgdGhlIHNvdXJjZQorICAgIGFzIElOQUREUl9BTlkuCisgICAgCisgICAgSWYgd2Ugc3VwcGx5IHRoZSBpZmluZGV4IGluIHRoZSBmaXJzdCBjYWxsLCBhIHJlcGx5IGZyb20KKyAgICBhIG11bHRpLWhvbWVkIGFnZW50IG1heSBjb21lIGZyb20gYSBkaWZmZXJlbnQgc291cmNlIGFkZHJlc3MKKyAgICB0aGFuIHRoZSByZXF1ZXN0IHdhcyBzZW50IHRvLCBwb3RlbnRpYWxseSBjb25mdXNpbmcgYSBtYW5hZ2VyLgorICAgIFRoaXMgYnVnIHdhcyBmaXJzdCBpbnRyb2R1Y2VkIGluIFNWTiByMTc4NTUgYW5kIHdhcyBmaXhlZAorICAgIGluIFNWTiByMTk3Njc7IGFsc28gc2VlIHRoZSBtYWlsaW5nIGxpc3QgdGhyZWFkCisgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9mb3J1bS5waHA/dGhyZWFkX25hbWU9QUFOTGtUaW0zN0g3TTdCYTAxMExtZGsxWUdZS3dQVGtEeVJLb0RyNzZ1cURUJTQwbWFpbC5nbWFpbC5jb20mZm9ydW1fbmFtZT1uZXQtc25tcC1jb2RlcnMKKworY29tbWl0IDE0NGExMzIwOGI0ZmE2ZjBhMWNkOTcxZjQxYTcyNzk3MTZiMjdlZWUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMjkgMDg6MDc6MjggMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IGZpeGluZyB0aGUgc3RhdHMgb3V0cHV0IGJyb2tlIHRoZSBjb25uIG91dHB1dCA6LSguIEZpeGVkLgorCitjb21taXQgZjRlNWVlNmYzOTYzMGI3M2Y4YWQ5OTQ2Yzk5MGU5NjkwNTgwZDdjZgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIE5vdiAyNyAwMToxMjowMCAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGQgdGVzdHMgZm9yIGFzbl9yZWFsbG9jX3JidWlsZF8qaW50KiBhbmQgdGVzdHMgZm9yIG9wYXF1ZSB1bnNpZ25lZCA2NC1iaXQgdHlwZXMuCisKK2NvbW1pdCAyMGU0YjM3OTMyYTllOWNjNTZiMzYwYTIzNmU5ZDgxODA3OTNhMjk3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgTm92IDI3IDAwOjU0OjU4IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IENvcnJlY3QgdGhlIHR5cGUgY2hlY2sgZm9yIG9wYXF1ZSB2YXJpYWJsZXMgd2hlbiBkZWNvZGluZyBjb3VudGVyNjQgdmFsdWVzLgorICAgIAorICAgIFRoYW5rcyB0byBya2pAc29mdGhvbWUubmV0IGZvciByZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworY29tbWl0IDZlNzZjYmJiMmEwNzgzZjIyZjU4ZmI3ZDMyM2U5ZjcyMTdjYzYwNGEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBOb3YgMjcgMDE6MDE6MDQgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQXZvaWQgZmFpbHVyZSB0byB0cmlnZ2VyIHNpZ24gZXh0ZW5zaW9uIGR1ZSB0byBvdmVybG9uZyB0eXBlcworICAgIAorICAgIEluIGFzbl9yZWFsbG9jX3JidWlsZF9zaWduZWRfaW50NjQgdGhlIGFsZ29yaXRobSBhc3N1bWVzIHRoYXQgc2hpZnRpbmcKKyAgICB2YWx1ZXMgZ3JlYXRlciB0aGFuIDB4N2ZmZmZmZmYgcmlnaHQgaXMgYW4gYXJpdGhtZXRpYyBzaGlmdCB0aGF0IHdpbGwKKyAgICBzaGlmdCBpbiAxJ3MuIE9uIGhvc3RzIHdoZXJlIGxvbmcgaXMgbW9yZSB0aGFuIDMyIGJpdHMgdGhlIHVzZSBvZiBsb25nCisgICAgZm9yICdsb3cnIGFuZCAnaGlnaCcgbWFrZXMgdGhpcyBhc3N1bXB0aW9uIGZhbHNlLgorICAgIAorICAgIFRoYW5rcyB0byBya2pAc29mdGhvbWUubmV0IGZvciByZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworY29tbWl0IDRhNGI3OGU2M2RkNjg4ODkyYjczOTliNTg0ZTI2ZTA0N2QzNjc1MDEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMjcgMjI6MTY6NDQgMjAxMyArMDEwMAorCisgICAgQWRkaXRpb25hbCBmaXggZm9yIGRhcndpbjEzCisKK2NvbW1pdCA5MWJkNWQ0YzVmNDFiNTRjNDYyNDI4ODNkYjkyYWE0ZTQ5NDU1Mjk0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDI3IDIyOjEzOjAzIDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBmaXggdHJ1bmNhdGVkIHN0YXRpc3RpY3Mgd2hlbiB1c2luZyAtdjEKKworY29tbWl0IDBjYjE0ZDRlNWMzOWEwN2M3ODQ3NDg4MWU2YzczZmE2MTc1MDdiZGIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMjcgMjI6MDY6NTggMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IGZpeCBzdGF0aXN0aWNzIGZvciBpcHY2CisKK2NvbW1pdCAyZDRkZWZlNzdiZGViYmJjMWE3NzNlYjhkNDg0OThiNmYyNTU4ZjIzCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgTm92IDUgMDY6NDk6MzUgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFVzZSAwIGZvciB0aGUgaWdub3JlZCBudW12YXJzIGFyZ3VtZW50IHRvIG5ldHNubXBfcmVnaXN0ZXJfbWliCisgICAgCisgICAgVGhlIG51bXZhcnMgYXJndW1lbnQgb2YgbmV0c25tcF9yZWdpc3Rlcl9taWIgaXMgaWdub3JlZCBpZiB0aGUgdmFyCisgICAgYXJndW1lbnQgaXMgTlVMTC4gSW4gb3JkZXIgdG8gdW5pZnkgdGhpcyB1c2Ugb2YgaXQgd2l0aCBhbGwgb3RoZXIgb25lcywKKyAgICBjaGFuZ2UgaXQgZnJvbSAxIHRvIDAKKworY29tbWl0IGI5OTMzZTYxODNiMTcxNWM5MGQ3Y2Y2ZGZhYzE4OTEwMDA3OTZiY2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBOb3YgMjIgMjM6MDQ6MDggMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFJlbW92ZSBzb21lIHVudXNlZCBpbmNsdWRlcworCitjb21taXQgYTc4MzA3MDM4YmYwYjQ4NTllMTFiZDg2Y2EzMDQ5YzMzOWFiZTEyNgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAyMyAwOTo0OTowMSAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQWRkIGEgbWlzc2luZyBmdW5jdGlvbiBkZWNsYXJhdGlvbgorCitjb21taXQgZDhkNjA3OGIzZTY1YjViYTEzMWRmODQyZDkyYzc3NDM3MzdmZjk1NQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIE5vdiAxOSAwODowNjozNCAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYXJrIHJlZ2lzdGVyX3NpZ25hbCBhbmQgdW5yZWdpc3Rlcl9zaWduYWwgYXMgdW51c2VkLgorCitjb21taXQgYmYwODNmNWI2OWNjYjk1ZmY3MGUyYTI4YTdjNjRmZWM3ZDdlNDIyZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxOCAyMjo0MToyOCAyMDEzICswMTAwCisKKyAgICBQYXRjaCBhMTI3MDogbWFuIHBhZ2UgZml4dXBzICh0aG5rcyBBbGVrc2FuZHJzIFNhdmVsamV2cykKKworY29tbWl0IDYyYTYzNGNlNjcxYzM4YWRlOTc5MTcwNzcwMzllMzRhZTNkOTI3MzQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBOb3YgMyAxNjowMjozOSAyMDEzIC0wODAwCisKKyAgICBXaW4zMjogVW5icmVhayB0aGUgYnVpbGQgKHNlZSBhbHNvIGNvbW1pdCAyNTNmOTA3NDMpCisKK2NvbW1pdCBhODEzYjUxMTEyNTVmNzVmZWY2OTQ0Y2VkZDY0OGRiZjhjMzRhOWFkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTm92IDExIDE3OjU0OjQ0IDIwMTMgKzAxMDAKKworICAgIFdpbjMyOiBwZXJsOiBBdm9pZCB0cmFuc3BvcnQgaW5pdGlhbGl6YXRpb24gZmFpbHVyZSBpbiBQZXJsIFNOTVAgYWdlbnRzCisgICAgCisgICAgQXZvaWQgdGhhdCB0aGUgZm9sbG93aW5nbiBtZXNzYWdlIGlzIHByaW50ZWQgZHVyaW5nIHN0YXJ0dXAgb2YgYSBQZXJsIFNOTVAKKyAgICBhZ2VudDoKKyAgICAKKyAgICBuZXRzbm1wX2Fzc2VydCBzICE9ICgtMSkgZmFpbGVkIC4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQQmFzZURvbWFpbi5jOjQ4NAorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCAzNmE3ZGU3MjMwZmJiYmI1MmNjMzdjYmJlZDI4MWViNTU5NDA0YmU5LgorCitjb21taXQgYTJhM2ExYWE2N2ZmMzhkYWE4ZjEzOTUxOGFiYjM1NDg0NzVlZDU5MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiA4IDIyOjMyOjI5IDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBmaXggdXNhZ2UgbWVzc2FnZSB0byBiZSBjbG9zZXIgdG8gcmVhbGl0eS4gRml4IGhhbmRsaW5nIG9mIC1DcCBhbmQgLUNmIG9wdGlvbnMgd2l0aCBuZXcgdGFibGVzLgorCitjb21taXQgNzI3NzQwMDEwMmRmY2E5MjFlYWMwYmQ5Y2VmODZiMzJmNTk4MDAzZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiA4IDIyOjMwOjE0IDIwMTMgKzAxMDAKKworICAgIENsZWFuIHVwIHNubXBuZXRzdGF0IG1hbiBwYWdlLCByZW1vdmluZyBzb21lIGxlZnQgb3ZlciBjcnVmdCBtYW4KKyAgICBvcmlnaW5hbCBic2QgbmV0c3RhdCBwYWdlLgorCitjb21taXQgZWIwMzc5ZGIzODUzZmFkMTM4ZjkyZjQ3OTJhODAzNDE3N2Q5NjI5YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiA0IDIyOjA5OjU1IDIwMTMgKzAxMDAKKworICAgIEZpeCBsZW5ndGggb2YgZGVmYXVsdCByb3V0ZXIgYWRkZHJlc3MgdXNpbmcgc3lzY3RsLgorCitjb21taXQgOGZhNDZmMjk2MTNjMTc5MmM0YTE0NDMyOTQ0MjczYjZkNzRlM2YzYworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiA0IDIyOjA3OjU2IDIwMTMgKzAxMDAKKworICAgIEZpeCBoYW5kbGluZyBvZiBjb21tYW5kIG5hbWVzIHdpdGggYmxhbmtzIG9uIExpbnV4LgorCitjb21taXQgNmZjYjM4MWRjZDQ2MGI3OTU1NjMzOWViMzZmYmU1NzliZjQ5ZGMwMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiA0IDIyOjA1OjU2IDIwMTMgKzAxMDAKKworICAgIEFkZCBMSVNQLU1JQiB0byByZmNsaXN0LgorCitjb21taXQgMWM1MTA0NzQxMDcwMjE5ZjEzODAwZDc2YWZkNTdhMGQ2MzZjMjQzYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiA0IDIxOjU0OjM2IDIwMTMgKzAxMDAKKworICAgIEZpeCBwYWdpbmcgc3RhdGlzdGljcyBmb3IgT3BlbkJTRCA1LjQKKworY29tbWl0IDJmNTdiODA0ZTgzYjhmODliODk2OTYzN2Y4M2Q4ODg2MDEwODM4ZmYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMzAgMjE6MzU6MzMgMjAxMyArMDEwMAorCisgICAgQWRkIGRhcndpbjEzIHN1cHBvcnQgZmlsZQorCitjb21taXQgODIzZDUxZjc5Yjg0ZTEzNTkzZTViMWFjOWI0MDc2MzRjNTQzNDZmNAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMSAyMDo0OTo1MyAyMDEzICswMjAwCisKKyAgICBGaXggbWFrZSBpbnN0YWxsIGluIG1hbiBkaXJlY3RvcnkgZm9yIFNvbGFyaXMgY2F1c2VkIGJ5IFZQQVRIIG9kZGl0eS4KKworY29tbWl0IGM1NzUyMDRhMDIwNTkxOTk0MjhjZTEzNWJjMTJlY2IzODVlMzY3NjMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjEgMjA6NDc6MzEgMjAxMyArMDIwMAorCisgICAgQ2hhbmdlIGFuIG9jY3VycmVuY2VvZiBzcHJpbnRmIHRvIHNucHJpbnRmLgorCitjb21taXQgYTJiZGE5OTQwMTkyODAyNzhiZWRlZDc5MTdjODc3ZmNiNDQ4ODczZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMSAyMDo0NjozMCAyMDEzICswMjAwCisKKyAgICBCZXR0ZXIgd29yZGluZyBmb3Igc3RhdGlzdGljIGVudHJ5LgorCitjb21taXQgNjY0NGIwNWQzY2YzNDEyM2NlZGE3NGI3Yjg0ZjE2OTQ0MzU5ZTdjYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMSAyMDo0NToxNSAyMDEzICswMjAwCisKKyAgICBGaXggd2FybmluZ3MgZm9yIGxpYm5sMS4KKworY29tbWl0IDk0MDgxNmUwMTkxNzFhMDQxNGVlMDBhNDZjZGE0Y2U2MGJjMDFmNzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBPY3QgNSAxMTowNToxMiAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTI2NTogRml4IGEgYnVmZmVyIG92ZXJmbG93IGluIGR1bXBfcmVhbGxvY19vaWRfdG9faW5ldGFkZHJlc3MoKQorCitjb21taXQgMDk5MmVjZjhmYzVkODc4MzcwMDZkNGJjM2E4NjgxZTU3MzZlMzU3MworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE9jdCAxNyAwNzoxNjoyMyAyMDEzICswMjAwCisKKyAgICBwYXNzX3BlcnNpc3Q6IHphcCBwb3NzaWJsZSBDUiBhdCBlbmQgb2YgbGluZS4KKworY29tbWl0IGViODhlMDI0YjRjMjY3OTk0ZGU0MDQwMWU4YjdkNzdlMzJkZWM2Y2YKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgMTUgMjE6MzM6NTYgMjAxMyArMDIwMAorCisgICAgTWFpbnRhaW4gYnl0ZSBvcmRlciBmb3IgSVB2NiBwb3J0IG51bWJlcnMgaW4gdHJhbnNwb3J0IGRhdGEgKHByb2JsZW0gc3VyZmFjZWQgaW4gc25tcFRhcmdldEFkZHJFbnRyeSkKKworY29tbWl0IGYyZTU3YjhlNjM4YTFmY2RjODVmZDBmZDJmNjU1MmEzM2ZjYWIzZjgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgMTUgMjE6MTc6MjEgMjAxMyArMDIwMAorCisgICAgc25tcG5ldHN0YXQ6IGJldHRlciBoYW5kbGluZyBvZiBzbm1wIGV4Y2VwdGlvbnMuCisKK2NvbW1pdCBlMDI4MDI5NGU3ZTZiZWJkNjJmYmFiOTkyOGIxYjVmMDFiNzM1ZTcyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDE1IDIxOjE1OjM5IDIwMTMgKzAyMDAKKworICAgIEZpeCBESVNQTEFZLUhJTlQgZm9yIG5lZ2F0aXZlIHZhbHVlcyBhbmQgaGludCAiZC1uIi4KKworY29tbWl0IDFhYmI1YTA5NGQyNzUxNGI4MTQ3YjExMjhkYjJjZGRjYjE3MDNiYjgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBOb3YgMiAxNDo0NTo0MiAyMDEyICswMTAwCisKKyAgICBVc2UgTkVUU05NUF9QUkl6IHRvIHByaW50IHNpemVfdCB2YWx1ZXMgaW4gX3Nlc3NfcmVhZAorCitjb21taXQgYWNiNzI1ODlhY2IzMDE4ZTQ0M2Y1ZTNmNjU0ZGQwM2Y3YzI2MzE2YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCAxIDE4OjQxOjUxIDIwMTMgKzAyMDAKKworICAgIEFkZCBmb3Jnb3R0ZW4gaWNtcE91dEVjaG9zIHRvIGljbXBNc2dUYWJsZS4KKworY29tbWl0IDI1M2Y5MDc0MzkxNTEwMjNhOTJhM2FjNDNhOWYzMTdlM2E0ZTE3ZmEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMzAgMjI6MTM6NDMgMjAxMyArMDIwMAorCisgICAgU29sYXJpczogc3VwcG9ydCBpY21wTXNnU3RhdHNUYWJsZQorCitjb21taXQgNmVlOTFmMDZiNWJkMGUwY2JkMmI2OWYzZGFlMGJmNjE0MWNjOTU1NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAzMCAwNjo1OToxMCAyMDEzICswMjAwCisKKyAgICBTb2xhcmlzIHN1cHBvcnQgZm9yIElQLUZPUldBUkQtTUlCCisKK2NvbW1pdCA0ZWJkZjNmYjA0NDVmOTA2N2VjYjM4Mzk0YzJkZjJiZDNiNzM4MTgyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDMwIDA2OjU0OjI4IDIwMTMgKzAyMDAKKworICAgIFByb3Blcmx5IGhhbmRsZSB0aGUgJ2InIGRpc3BsYXkgaGludC4KKworY29tbWl0IDdmMmVkYmY2ODM0OGNhYmVhZjk5NWFhYmExYjJhNzg5M2QxOGM1ZTcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBBdWcgMzAgMDg6NTA6MDkgMjAxMyArMDIwMAorCisgICAgUmVtb3ZlIHNvbWUgY29tbWVudGVkIG91dCBkZWZpbmVzCisKK2NvbW1pdCA0MzVlZTFmNDAyM2NiMDAyMjQ1YzNhNTZkYmVhYmEzN2EzZDNlZGJlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgU2VwIDI4IDE0OjI2OjEwIDIwMTMgKzAyMDAKKworICAgIFBhdGNoIGExMjU5IChidWcgYTI0NTYpOiBwcm9ibGVtcyB3aXRoIGlwQ2lkclJvdXRlVGFibGUgb24gNjQtYml0IGJpZ2VuZGlhbiBtYWNoaW5lcy4gVGhhbmtzIHRvIENocmlzdG9waGVyIFd1LgorCitjb21taXQgOWE2ZjU2NjM5MmEzY2YxMmRhYjQ4OGE3NmQ2OWZjODczZGJlYzJhYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEF1ZyAyNSAxMDoxODo1MyAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBSZW5hbWUgbWVtZHVwKCkgaW50byBuZXRzbm1wX21lbWR1cCgpCisgICAgCisgICAgUmVuYW1lIHRoZSBmdW5jdGlvbiBtZW1kdXAoKSBkZWZpbmVkIGluIGxpYm5ldHNubXAuc28gaW50bworICAgIG5ldHNubXBfbWVtZHVwKCkuIFRoaXMgYXZvaWRzIGNvbmZsaWN0cyB3aXRoIG1lbWR1cCgpIGZ1bmN0aW9ucworICAgIGRlZmluZWQgaW4gb3RoZXIgbGlicmFyaWVzIHRoYXQgZGVmaW5lIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZQorICAgIG5hbWUuIEFzIGFuIGV4YW1wbGUsIGlmIFdJTlMgbmFtZSByZXNvbHV0aW9uIGhhcyBiZWVuIGVuYWJsZWQgdmlhCisgICAgL2V0Yy9uc3N3aXRjaC5jb25mIHRoZW4gcGVyZm9ybWluZyBhIGhvc3QgbmFtZSBsb29rdXAgY2FuIHRyaWdnZXIKKyAgICBhIGNyYXNoIGluIHRoZSBTQU1CQSBXSU5TIG5hbWUgbG9va3VwIGxpYnJhcnkgYmVjYXVzZSBjYWxscyB0bworICAgIG1lbWR1cCgpIGZyb20gdGhhdCBsaWJyYXJ5IGdldCByZWRpcmVjdGVkIHRvIHRoZSBpbmNvbXBhdGlibGUKKyAgICBOZXQtU05NUCBtZW1kdXAoKSBmdW5jdGlvbi4gU2VlIGFsc28KKyAgICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTEwMDA3ODAgZm9yIHRoZSBkZXRhaWxzLgorICAgIFRoaXMgcGF0Y2ggaW50ZW50aW9uYWxseSBjaGFuZ2VzIHRoZSBOZXQtU05NUCBBQkkuCisKK2NvbW1pdCAzZGRlNDE5OTg2MjVmZTBlMjQxMTlhMmUxZjQ1MDliYTNiYTJmZDlhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDUgMjA6Mjc6MjIgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogTGludXg6IEJVRzogMjIzODogQWRkIGxpYm5sMyBzdXBwb3J0CisKK2NvbW1pdCBhMzc5NTdiZWU5Zjc5ZGIxOWJiYTkzZjExZmFhMDM3OTIxZDZlNTg0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDIzIDIyOjI0OjE1IDIwMTMgKzAyMDAKKworICAgIHJvdXRlX3N5c2N0bC5jOiBGaXggZm9yIGxpbmtsb2NhbCByb3V0ZXMgb24gRnJlZUJTRCAxMAorCitjb21taXQgZDlhN2Y5ZmM2Nzk0NTViMGZhMzI4ZmJhZTY3ZWMyZWUyOTA2Yjk0YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxOTo0Mjo1MSAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogQXV0b21hdGUgYnVpbGRpbmcgdGhlIGluc3RhbGxlcgorCitjb21taXQgZWIxYTE2NDE1MDBkNmJjZjM5ZjliODQ3YTJjMDZjOWVkYTBjODhjNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxOTozMjozMSAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgYW4gaW5zdGFsbGVyIHdpdGhvdXQgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcworCitjb21taXQgYTk3NzdlYzlhZmIzN2NhNjQ0MjE2NjA3OWJkNWIyZTAzNDliZTNlMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxODozNTo1NSAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IEZpeCBPcGVuU1NMIHZlcnNpb24gY2hlY2sKKworY29tbWl0IDVjYjJjYzdhYjIwYjI5MGE2Yzc0NTg1Zjk4NWY5YzkxMmNkZWM4Y2UKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTA6MjU6MDAgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBSZW1vdmUgTVNWQyByZWRpc3RyaWJ1dGFibGUgZmlsZXMgZnJvbSB0aGUgaW5zdGFsbGVyCisKK2NvbW1pdCAxNzgxMjAwNjFlY2U0OGNjZDk3YTNhZTM2Yjg4MGRhNmIxMDk1MjA3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDA5OjUwOjE4IDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LmJhdDogR2VuZXJhbGl6ZQorCitjb21taXQgODVhMWM1MDI2ZjEwZmYxNDNmNDM3ZjAwMzg5NGE2YzRhYTE4N2E5NgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxODo0MzowNSAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogRml4IHg2NCBkZXRlY3Rpb24KKworY29tbWl0IGEwYzJhN2FiNDI5OTc0MzNlNzA3YzEwZjhhY2Y2MWY5MTI0NDJmNzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTc6Mjg6NTQgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IEV4YW1pbmUgdHdvIGxvY2F0aW9ucyBmb3IgTWluR1cgYmluIGRpcgorCitjb21taXQgY2YxMDA2ZTY3ZjljNzdmYmRhOTRkNDUyMWU3OGYwMDk4YzhhMGUxOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxMDoxMToxMyAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogRml4IFNTTCBidWlsZAorCitjb21taXQgYjQ3ZjEzNmJlYThlZjU0NjhhMjBkOTQ1MmIxMjMxOGRiNmMzNDllYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAxNzowNTozNyAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogQWRkIFdTREsgc3VwcG9ydAorCitjb21taXQgMGUxOGEyMDZhYWE0OTBmZGViMmM3MGEwZTZlNTJjOTFlYjVmM2VkOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAwOTo0ODowNiAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogUmVkdWNlIGNvZGUgZHVwbGljYXRpb24KKworY29tbWl0IDg1ZGYwMmI4MzYzMjBjYzQ1ZTVkMmRiNDU0ODNiYzUwODYzMTQ0NmMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTA6MDI6MjEgMjAxMyArMDIwMAorCisgICAgd2luMzIvQ29uZmlndXJlOiBGaXggYnVpbGQgd2l0aG91dCBPcGVuU1NMCisKK2NvbW1pdCAzZjlhZGI5ODdiNWJmNWQyZDA5NWNmZDZlYTJkYTljZDgxZDFiZWM0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDA5OjE1OjQxIDIwMTMgKzAyMDAKKworICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOiBXaW4zMiBidWlsZCBmaXgKKworY29tbWl0IGE2ZTE4NTFmYmU3NDdjZjE1ZWQwNzU4MDc3ODFjZTg5YTM0ZTk2YzIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMjEgMTk6NTU6MDIgMjAxMyArMDIwMAorCisgICAgUmVzdG9yZSAiQ0hBTkdFUzogV2luMzI6IHBlcmw6IEJVRzogMjQ4ODogQXZvaWQgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3IiCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCBiMjcyNTk2NGJkZTkyMWI2Mjg1ZTNhNTlhNTEyNTUyY2FlMGEwY2E1LgorCitjb21taXQgYjI3MjU5NjRiZGU5MjFiNjI4NWUzYTU5YTUxMjU1MmNhZTBhMGNhNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAyMSAxOTo0OTo1OCAyMDEzICswMjAwCisKKyAgICBSZXZlcnQgIkNIQU5HRVM6IFdpbjMyOiBwZXJsOiBCVUc6IDI0ODg6IEF2b2lkICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9yIgorICAgIAorICAgIFRoaXMgcGF0Y2ggaXMgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgdjUuNCBicmFuY2guCisKK2NvbW1pdCA2NDUzNzE3ZjZhYzY2NWJmNTMyNzQ0YTg2Y2RiODk4YWFmODNkNmJmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDIxIDE5OjM0OjI1IDIwMTMgKzAyMDAKKworICAgIEFkZCByZXByb2R1Y2VyIGZvciBidWcgMjQ4OAorCitjb21taXQgMGQwYTQ2Mjk3MDJlYjlmOWZlOTk1NmMxYmFjNGI0NDU2MTBmZjNjNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAzMSAxNzoyMToyMiAyMDEzICswMjAwCisKKyAgICBTaW1wbGlmeSBzbm1wVGFyZ2V0QWRkcl9yb3dTdGF0dXNDaGVjaygpCisKK2NvbW1pdCA0Yjg3ZTNjYjRkMzY3OWFiNjBjMzUzYmE0ZmYzMDFmNjg0MmI4NGJjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDIxIDE2OjM3OjA5IDIwMTMgKzAyMDAKKworICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2OGV4ZWNmaXhfc2ltcGxlOiBTaW1wbGlmeQorCitjb21taXQgNjVjODhlMmVjZjVkZTkzNjVjODNjNDZlZjNiYjRjZDg5Y2RjNDRlOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxNSAxMToxMTo0MyAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW4zMjogcGVybDogQlVHOiAyNDg4OiBBdm9pZCAiRnJlZSB0byB3cm9uZyBwb29sIiBlcnJvcgorCitjb21taXQgMWE0ODU1ZGE0YjFkZDY5M2EyYjAzNzdiOTFlOWMzM2UzYzdmMmE0ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAyMSAxNzoxMTo0NSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDI0MDI6IEFkZCBzdXBwb3J0IGZvciBTTk1QdjMgdHJhcHMKKworY29tbWl0IDNkMDUxNTY5M2Y2YTBkMjlkMzlkZDBjODY4ZDM3OGM3NGJjNGY4N2MKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMjEgMDk6MTY6MzMgMjAxMyArMDIwMAorCisgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY4ZXhlY2ZpeF9zaW1wbGU6IFBvcnQgdG8gTWluR1cgYW5kIEZyZWVCU0QKKworY29tbWl0IDViNmU0MzFkOWY2NjNhM2MzMjdkNzFkYWM5NTM5MmNmZDg2YjMyOTEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMjEgMDk6MDM6NTkgMjAxMyArMDIwMAorCisgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOiBGaXggY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IDlmMmU4ZmM4ZDlhMjZmNTdhYjA4OWFiYTNkMWFlMjZiM2U4ZjJkNTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMTcgMjI6MzA6MzggMjAxMyArMDIwMAorCisgICAgRml4IGRlcGVuZGVuY3kgZm9yIEZyZWVCU0QxMAorCitjb21taXQgYTUwNmVmZGQxZGI4MjRhOWVlZWUwM2QwMDIxYzkwZmFmM2I2MjkyNAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAxNyAyMjoyOTozNCAyMDEzICswMjAwCisKKyAgICBzbm1wZGYgbWFuIHBhZ2U6IGZpeCBmb3JtYXR0aW5nIG9mIC1DaC8tQ0ggb3B0aW9ucworCitjb21taXQgYTJlOTdiZWJmYzUyMTcwZjllYzEwMzZkMjRhYTg0ZjU5Y2YyZTUwOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAxNyAyMjoyNzo0OSAyMDEzICswMjAwCisKKyAgICBVcGRhdGUgdGhlIEJTRCBtdWx0aS1jcHUgY291bnRlcnMgY29kZSB0byB3b3JrIHdpdGhvdXQgY29uZmlndXJlIGhlbHAuCisKK2NvbW1pdCBjODVkNjRkNTRiMDY4NzlhM2E2OTFkYWRmZmMwM2JmYjFmNTkwOTZkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgU2VwIDE3IDA2OjM3OjE4IDIwMTMgKzAyMDAKKworICAgIE9ubHkgdGVzdCB0aGUgZXhlY2ZpeCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBpZiBpdCBpcyBlbmFibGVkCisKK2NvbW1pdCBlZDhiNjk3Y2VhMDY3OWRlN2JlNWIzZjVkNDY5MTM0ZTFjZGFlZDU2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDcgMTA6Mjc6MDIgMjAxMyArMDIwMAorCisgICAgbTQvYWNfYWRkX3NlYXJjaF9wYXRoLm00OiBGaXggYSBjb21tZW50CisKK2NvbW1pdCBmNzc5YzVlOTQ2Nzg4NTg1MmYxNmM1NTQxYTM4MDExMWY5ZWFkMDYxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDcgMjA6Mjg6MjkgMjAxMyArMDIwMAorCisgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfYXB0LmM6IEZpeCBjb21waWxlciB3YXJuaW5ncworICAgIAorICAgIFJlbW92ZSB0aGUgdW51c2VkIHZhcmlhYmxlICdyYycgYW5kIGZpeCBhIGZvcm1hdCBzdHJpbmcuCisKK2NvbW1pdCBjNjQzOTYyN2QwOWY1MDNmZGM4Y2ZhMzJkODg0ZTgzNDczODMxNzU0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTWFyIDggMDA6MTM6MDUgMjAxMSArMDAwMAorCisgICAgYWxsb3cgZm9yIHYyYyBTRVQgc3VwcG9ydCB0ZXN0aW5nCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCA1Y2JkNTQzNDFhMmE3OWJmODUzNzM3N2QxMTM3MjQ4M2YwODY0N2FkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDE0IDE0OjI4OjIxIDIwMTMgKzAyMDAKKworICAgIHJlZ3Jlc3Npb24gdGVzdHM6IEFkZCBhIHRlc3QgZm9yIHRoZSBleGVjZml4IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlCisKK2NvbW1pdCAxYzc1NjM0OWU0ZDMxZDM5ZWMyZmM1M2M2NDQwYWU1M2IzYjAzZGYwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDcgMjA6Mjg6NTYgMjAxMyArMDIwMAorCisgICAgc25tcGQ6IHVjZC1zbm1wOiBGaXggYSBwb3RlbnRpYWwgY3Jhc2ggaW4gZml4RXhlY0Vycm9yKCkKKyAgICAKKyAgICBEbyBub3QgaW50ZXJwcmV0IGEgY29tbWFuZCBzcGVjaWZpZWQgdmlhIHRoZSBleGVjZml4IGNvbmZpZ3VyYXRpb24KKyAgICBkaXJlY3RpdmUgYXMgYSBwcmludGYoKSBmb3JtYXQgc3RyaW5nLgorCitjb21taXQgOGIxNDBkMDk2NWUxMWY1OTIxNzY4YmYwNWQwYzJiMTk0MWMwZDMzNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAzMSAxNzoxMDo1NSAyMDEzICswMjAwCisKKyAgICBTTk1QLVRBUkdFVC1NSUI6IERlY2xhcmUgbG9jYWwgdmFyaWFibGVzIGF0IGZpbGUgc2NvcGUgc3RhdGljCisgICAgCisgICAgQWxzbywgZGVjbGFyZSB0aG9zZSB2YXJpYWJsZXMgY29uc3QgdGhhdCBhcmUgbm90IG1vZGlmaWVkLgorCitjb21taXQgN2I4MmM2MWU3NTNlMTU3YzRiODY5ODIxOTAwNmYyZjgzZGY1MjgwMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAzMSAxNjo1MToxNSAyMDEzICswMjAwCisKKyAgICBTTk1QLVRBUkdFVC1NSUI6IEVsaW1pbmF0ZSB0d28gc3VwZXJmbHVvdXMgY2FzdHMKKworY29tbWl0IGRiY2Y0N2RkNGZlNTI2MmFkMGZhZDdjOTc3NDUyMDk1ODk1NDBjNDAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDExIDEwOjIxOjMyIDIwMTMgKzAyMDAKKworICAgIFJld29yZCB0aGUgaW5jbHVkZUZpbGUgc2VhcmNoIHByb2Nlc3MgdG8gZml0IHRoZSBpbXBsZW1lbnRhdGlvbi4KKworY29tbWl0IDg1MDczMDg1ZDY3ZWQ2NmFiNzQ2MTFjOGU1ZjgxMDE5MjQ5MWJhNjgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgOSAyMjoyNjoyMyAyMDEzICswMjAwCisKKyAgICBQYXRjaCBhMTI2MzogTWFrZSBkYXRhYmFzZSBuYW1lIGNvbmZpZ3VyYWJsZSBmb3IgdHJhcGQgc3FsIGxvZ2dpbmcuCisgICAgVGhhbmtzIHRvIFJvYmluIFNvbmVmb3JzLgorCitjb21taXQgN2U3MjU4ZWY4YjMyZjk3NDA0OGYzZmQwOThhOWRhNTI2ZGEyZTYxMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCA5IDIyOjE3OjE1IDIwMTMgKzAyMDAKKworICAgIFBhdGNoIGExMjYyOiBGaXggbWVtb3J5IGVycm9yIGNhdXNlZCBieSBjb25mdXNpbmcgc2l6ZSBvZiBwb2ludGVyCisgICAgd2l0aCBzaXV6ZSBvZiBwb2ludGVkIGFyZWEuIFRoYW5rcyB0byBSb2JpbiBTb25lZm9ycy4KKworY29tbWl0IDU4NmUwN2I4ZGU1MWIwNTQwMGQ1ODJmYWNkOTFkNDQxMGRkMzc3MDMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMzEgMTc6MDk6NTkgMjAxMyArMDIwMAorCisgICAgc25tcGQ6IENvbnN0aWZ5IGEgZmV3IGFyZ3VtZW50cyBvZiBNSUIgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucworICAgIAorICAgIE5vdGU6IHRoaXMgcGF0Y2ggZG9lcyBub3QgY2hhbmdlIHRoZSBBQkkuCisKK2NvbW1pdCA0NGMzNjcxZGQ5M2ZlMGYwODI5OWU2MWQwYTQyMmZkMDcyYjQ5MGU2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDggMDc6MzU6NDYgMjAxMyArMDIwMAorCisgICAgUnVuIGF1dG9yZWNvbmYKKworY29tbWl0IDYyZGFkZWZhMWIyNjg4YzAyNzkyZTlmZDJkM2ZjMzFjNzllZDExYzMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBTZXAgNiAxMTo1NDoxMyAyMDEzICswMjAwCisKKyAgICBzd3J1bl9kYXJ3aW46IEZpeCBidWZmZXIgb3ZlcnJ1biB3aGVuIGNvbGxlY3RpbmcgaHJTV1J1blBhcmFtZXRlcnMKKworY29tbWl0IDFlMDUyNmY4NWVkNjE1NjdjYTZlYTUzYjU2NmM3NzI5OTIxMTFjOWUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgNCAyMjozMDo0MCAyMDEzICswMjAwCisKKyAgICBBZGQgYSBjb3VwbGUgb2YgY29udHJpYnV0b3JzIHRvIFJFQURNRQorCitjb21taXQgZWRjNjA4ZWJkNWQwMjE5ODYzYmM1ZjY1NmQxNzdiMWQ1NjEwNDhjMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCA0IDIxOjU5OjE4IDIwMTMgKzAyMDAKKworICAgIEZpeCBhIHByaW50ZiBmb3JtYXQgd2FybmluZy4KKworY29tbWl0IGZiMjRmNzMzY2IzMTZjMzVjY2ZkYzU5ZjQ4N2I2NWUwY2Q5NzRjNjgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgNCAyMTo1NDoyNyAyMDEzICswMjAwCisKKyAgICBzbm1wbmV0c3RhdDogSW5kZW50IElDTVAgaGlzdG9ncmFtIGZvciByZWFkYWJpbGl0eS4KKworY29tbWl0IGY3OTQzYTVkNThhNmY5NTNjNzlmYjU1YWI4OTdjODQ5MjI4ZWRiOGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgNCAyMTo0NToxOSAyMDEzICswMjAwCisKKyAgICBSZWNvZ25pemUgemZzIGZpbGUgc3lzdGVtcworCitjb21taXQgYWI0MzcwYmFmNWNjYzE0NmY4ZDFjODM5YmIwZjQxOWVlMzdlNzFjMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAyIDIxOjIxOjI1IDIwMTMgKzAyMDAKKworICAgIFBhdGNoIGExMjYxIChCaWxsIEZlbm5lcik6IEZpeCBjcmFzaCB3aGVuIG1pYi1pbmRleGVzIGFyZSBub3QgYWxsIHJlYWRhYmxlCisKK2NvbW1pdCBjNmNhYTMwMDdmNjBmNmNkZWFhMTM0MTUyNzU4NjQ1YTczYTdmZTY0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDIgMTk6Mzk6MTQgMjAxMyArMDIwMAorCisgICAgc25tcG5ldHN0YXQ6IFByb3BlciB0ZXN0cyBmb3IgdjIvdjMgZXhjZXB0aW9uIHJlc3VsdHMgKEJ1ZyBhMjQ3NykKKworY29tbWl0IDM5NDIwYmQ0MGI3YTFiYTcyMGE5Y2JiOTIyNjRkM2Y5Y2MwYTdlMmYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgMjEgMjI6MDg6NDEgMjAxMyArMDIwMAorCisgICAgUEFUQ0ggYTEyNjA6IFN1cHBvcnQgbXVsdGktY3B1IHVzYWdlIGZvciBGcmVlL05ldC9PcGVuLUJTRC4KKyAgICBUaGFua3MgdG8gUGFibG8gQ2FyYm9uaSBmb3IgZmlyc3Qgc3RhYiBhdCB0aGlzLgorCitjb21taXQgNjIzMDVjZDAyOGQ4YWJmNDMwMTIxZTkwMDhhY2M4ZjBkMTg3MWUxYworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAyMSAyMjowODo0MSAyMDEzICswMjAwCisKKyAgICBQQVRDSCBhMTI2MDogU3VwcG9ydCBtdWx0aS1jcHUgdXNhZ2UgZm9yIEZyZWUvTmV0L09wZW4tQlNELgorICAgIFRoYW5rcyB0byBQYWJsbyBDYXJib25pIGZvciBmaXJzdCBzdGFiIGF0IHRoaXMuCisKK2NvbW1pdCBjYzJmZTZiZGU2YTNjMjhiM2MxYWQxNjVjOWJhM2ZjMWQ1ODNjMjUzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gQXVnIDI1IDA4OjIzOjQzIDIwMTMgKzAyMDAKKworICAgIElQLU1JQjogRml4IERveHlnZW4gaGVhZGVyIG9mIG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbigpCisKK2NvbW1pdCA5NjMwMmFmN2ZjMzEwOGMyMDgyMjc0MzJmMGYwYjc1ZjNlN2I5MDZkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgQXVnIDI4IDEwOjU5OjA1IDIwMTMgKzAyMDAKKworICAgIENvcnJlY3QgY29udmVyc2lvbiBmYWN0b3IgZnJvbSBtaWNyb3NlY29uZHMgdG8gY2VudGlzZWNvbmRzLgorCitjb21taXQgZThjZjc2NmUwODM4MzRhZjdmZGZlZDg3N2RiZTg4MTBiZjAwYTRlYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAxOSAyMjoxNzoxMSAyMDEzICswMjAwCisKKyAgICBGaXggbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuIHRvIHRha2UgYW4gYXJndW1lbnQgaW4gbmV0d29yayBieXRlIG9yZGVyIGFzIGRva3VtZW50ZXQKKworY29tbWl0IGEwYzU5YTNiNDU4ZThhOGRmYjA1OWE2Mjc5MmQyNWE0YzVjOWZjOWUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMTkgMjI6MTQ6MTUgMjAxMyArMDIwMAorCisgICAgRml4IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbiB0byB0YWtlIGFuIGFyZ3VtZW50IGluIG5ldHdvcmsgYnl0ZSBvcmRlciBhcyBkb2t1bWVudGV0CisKK2NvbW1pdCA2NmI5YmZiYTRlYWU4NDk0NGFiZjRlNmQwNzQ4OTRhY2QwNTEzYzZiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDE5IDIyOjEyOjU3IDIwMTMgKzAyMDAKKworICAgIEZpeCBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4gdG8gdGFrZSBhbiBhcmd1bWVudCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgYXMgZG9rdW1lbnRldAorCitjb21taXQgZWM5NmIzNWQ1MDYwYzA5YjlmNTNkNGRlYzczZmI3OTY1YzJhYzE0NQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAxOSAyMjoxMTozNiAyMDEzICswMjAwCisKKyAgICBGaXggbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuIHRvIHRha2UgYW4gYXJndW1lbnQgaW4gbmV0d29yayBieXRlIG9yZGVyIGFzIGRva3VtZW50ZXQKKworY29tbWl0IGIyN2I0N2I1Nzk4NDY5ZTlhYjViZDRiNTFhYzM5ZDQzZmNkOTU2MDgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBBdWcgMTcgMTA6MTI6MTQgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogTWFrZSBzdXJlIFRlc3Q6Okhhcm5lc3MgaXMgb2YgYXQgbGVhc3QgdmVyc2lvbiAxLjIxCisgICAgCisgICAgVGVzdDo6SGFybmVzcyAxLjIxIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIHRoYXQgaW1wbGVtZW50cyBUQVAgdjEyIHdoaWNoIGFsbG93cworICAgIHB1dHRpbmcgdGhlIGhlYWRlciAoMS4uTikgYWZ0ZXIgdGhlIHRlc3RzIGFuZCBzaW5jZSBvdXIgdGVzdHMgdXRpbGl6ZSB0aGF0CisgICAgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IHJ1bm5lciBzdXBwb3J0cyBpdC4KKworY29tbWl0IDE0ZjhkNGFkNmYwNmQwOWQ4NzA5NmRkNjgxMzdhMTI1YTAzOWM1NjIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjkgMTc6NDI6NTQgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogQUlYOiBNYWtlIHVkcC1taWIgYnVpbGQKKworY29tbWl0IDM4ZDc3YzdjMjBhM2U3OTc5YzA5YzUxNDRmODY5MzRlZDQ2NTQwZGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjkgMTc6Mzk6MzggMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogQUlYOiBNYWtlIHRjcC1taWIgYnVpbGQKKworY29tbWl0IDU4ZmQyM2I3MTEwYzkzZWU0OTZmZmFmZTg2ODUzOWMyYWY4NTQzYmQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBBdWcgMTYgMTA6Mzk6MDMgMjAxMyArMDIwMAorCisgICAgV2luMzI6IEJ1aWxkIGZpeDogRXhwb3J0IHNraXBfd2hpdGVfY29uc3QoKSwgc2tpcF9ub3Rfd2hpdGVfY29uc3QoKSBhbmQgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoKQorCitjb21taXQgMGFiOWNkMTY1NWQ0NmY5NjhkYzEyYmQ2NzE0YWMxN2I5YmNlNWU3MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEF1ZyAxNiAwODoyODowOCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wLXVzbS1kaC1vYmplY3RzLW1pYjogQXZvaWQgdHJpZ2dlcmluZyBhbiBhc3NlcnQgc3RhdGVtZW50IGluIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCkKKyAgICAKKyAgICBUaGUgY2FjaGUgdGltZW91dCBmb3Igc25tcC11c20tZGgtb2JqZWN0cy1taWIgaXMgLTEuIEFueSBjYWNoZSB0aW1lb3V0CisgICAgdmFsdWUgPCAwIGRpc2FibGVzIGNhY2hpbmcuIEhvd2V2ZXIsIHN0cmljdGx5IG5lZ2F0aXZlIHZhbHVlcyB0cmlnZ2VyCisgICAgdGhlIGFzc2VydCBzdGF0ZW1lbnQgaW4gbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoKS4gQXZvaWQgdHJpZ2dlcmluZyB0aGF0CisgICAgYXNzZXJ0IHN0YXRlbWVudC4KKworY29tbWl0IDFmYTU4NGIyMjJjNTY3MjQzNzhmNWM4NTk5M2VlZWU2NTE1MjYwYWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBBdWcgMTYgMTA6MDI6NDcgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRml4IE5FVFNOTVBfRkRfU0VUX0JZVEVTKCkKKyAgICAKKyAgICBUaGlzIHBhdGNoIGF2b2lkcyB0aGF0IHVuaXQgdGVzdCBUMDA5bGFyZ2VfZmRfc2V0X2NsaWIgY3Jhc2hlcyBvbiBBSVguCisKK2NvbW1pdCA5NWFjMTkwYjUyNmRiYTUyMDU2Mzc0MTFhODkyYjUyYjllZDZiOTRjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gSnVsIDIxIDE3OjE2OjQyIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IEJVRzogMjQ3Njogc25tcGQgZmFpbHMgdG8gc3RhcnQgb24gQUlYCisgICAgCisgICAgT24gYW4gQUlYIHN5c3RlbSB0aGVyZSBpcyBubyA8a3ZtLmg+IGhlYWRlciBmaWxlIG5vciBkbyB0aGUgL2Rldi9kbWVtCisgICAgb3IgL2Rldi9kcnVtIGRldmljZXMgZXhpc3QgYW5kIGhlbmNlIERNRU1fTE9DIGlzIG5vdCBkZWZpbmVkLiBBdm9pZAorICAgIHRoYXQgaW5pdF9rbWVtKCkgZmFpbHMgaW4gdGhhdCBjYXNlLgorCitjb21taXQgNTA0ODFiNzY5ZTI5ZmM1Y2U2YjFlNDBjZTU2ODE4NWJiMDg5ODQ1OAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEF1ZyAxNiAwNzoyMjowMiAyMDEzICswMjAwCisKKyAgICBzbm1wZDogUmVmYWN0b3IgaW5pdF9rbWVtKCkKKyAgICAKKyAgICBUaGlzIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBhbnkgZnVuY3Rpb25hbGl0eS4KKworY29tbWl0IGNkN2VmN2JlMzkxMDM1ZDlkZjA1ZWRjNmFjOWU2ZjM1MTliNDZmOGIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBBdWcgMTQgMjM6Mzg6MjEgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQmUgbW9yZSByb2J1c3QgaWYgY2xvY2tfZ2V0dGltZSBmYWlscy4KKyAgICAKKyAgICBPbiBSSEVMMyBpdCBzZWVtcyBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgKSBhbHdheXMgcmV0dXJucyBFSU5WQUwgYnV0CisgICAgaXQgd29ya3MgZm9yIHRoZSBvdGhlciBjbG9ja3MuCisgICAgCisgICAgRnVydGhlciwgdGhlIG9sZCBjb2RlIHdoaWNoIHJldHVybmVkIGEgY29uc3RhbnQgeyAwLCAwIH0gY2F1c2VkIHRoZSB0ZXN0IHN1aXRlCisgICAgdG8gZ2V0IHN0dWNrIGluIGEgbG9vcCBpZiBubyByZXNwb25zZSBhcnJpdmVkIC0gdGh1cyB0aGlzIGNvZGUgaGF2ZSB0aGUKKyAgICBhZHZhbnRhZ2Ugb2Ygd29ya2luZyBsZXNzIGJhZC4KKworY29tbWl0IDlkNzFmZWVhMjcxZjkxY2M5YjdhZGVlNjYxM2FmMTllYmE3ZWM2Y2QKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDE0IDE1OjU2OjU2IDIwMTMgKzAyMDAKKworICAgIEZpeGVkIHJldHVybiB2YWx1ZSBvbiBlcnJvci4KKworY29tbWl0IDk2MjFmNGNkYzVhMTljZWU0ZTExYmYyNzA5NGFiZjMzMzlkZGMzMGUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDE0IDE1OjQ4OjM5IDIwMTMgKzAyMDAKKworICAgIFJlbW92aW5nIHVzZWxlc3MgY2hlY2ssIGVudHJ5LT5kX25hbWUgaXMgYXJyYXkgYW5kIGNhbid0IGJlIE5VTEwuCisKK2NvbW1pdCBlNDFjMmY1NzRjMjVkOGRkMjczZjI0MDZlZWVhYzE5YmMyYWUxNmRiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAxMiAxNDozMDo1MSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBwYXJzaW5nIG9mIHNlcXVlbmNlcy4KKyAgICAKKyAgICBEb24ndCBvdmVyd3JpdGUgJ2RhdGEnIHZhcmlhYmxlLCBpdCdzIHVzZWQgd2hlbiBwYXJzaW5nIGJ1bGsgcmVzcG9uc2VzLgorCitjb21taXQgMzkwMzAzMDU5ZmJkOThiMWVlNzYyMWRkZDRhZDRjMTFkMTAwZmZmOQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEp1bCAyOCAyMToyODoxNCAyMDEzICswMjAwCisKKyAgICBSZXZlcnQgNzhkYWM2ZTM3OTQzZDFhZDk5ODQxODk4ODA2ZWE2MGIwZWVkZTYzNiBhbmQgcmVzb2x2ZSBhMjQ3OCBpbiBhIHdheSB0aGF0IGF2b2lkcyB0cnVuY2F0aW5nIHNubXBUYXJnZXRBZGRyVGltZW91dC4KKworY29tbWl0IGU1OWQ1ZGI2ZDZlNzJkMTM0NTkxYmJhYWE2ZmFhNTliMjkzMzgxOTEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKdWwgMjggMjE6MTc6NTggMjAxMyArMDIwMAorCisgICAgQ2hlY2sgdGhhdCB0aGUgdGltZW91dCB2YWx1ZSBpcyBpbiByYW5nZS4KKworY29tbWl0IDRlY2IzNmE3YWJhM2FiMGVmYTg5MzUxNjUwY2UwNTNlYmNmNDhiNmEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBKdWwgMjkgMjE6NTQ6MjUgMjAxMyArMDIwMAorCisgICAgQ2hlY2sgdGhhdCBzbm1wVGFyZ2V0QWRkclRpbWVvdXQgaGFuZGxlcyBzZXR0aW5nIHByb3Blcmx5CisKK2NvbW1pdCAxYWU4NWI2NzJlYjA3ZDBjMDFhNTRlMDZkM2RkZDRmNGRjNThmZjJlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gSnVsIDI4IDEwOjQzOjE3IDIwMTMgKzAyMDAKKworICAgIEFkZCBzb21lIG1vcmUgdGVzdHMgZm9yIHNubXBUYXJnZXRBZGRyCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNmUxM2ViYjg1ZTQ0MDQ5ODQ2ZWFlN2Y2MGUwNTAzNzVmOWFjZjU4ZSkKKyAgICBTYW5pdGl6ZWQKKworY29tbWl0IDZhNWEwNDdjYmMxMWQ2MmRmMDRhOTY2NjkwOGY3NjUyYjIxN2MxYWEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBBdWcgMSAyMzoxOTozNCAyMDEzICswMjAwCisKKyAgICBSZWluc3RhdGUgdGhlIGNoZWNrIGZvciBjcmVhdGlvbiBvZiBlbnRyaWVzIHdpdGggZW1iZWRkZWQgTlVMJ3MgaW4gdGhlIG5hbWUKKworY29tbWl0IDUzM2JiODBhNWE0MzA1YjM1ZGJiNzk3NDQ0YmQ1OTZkN2Q1OTk1MWMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBBdWcgMSAyMjo1NTo0NSAyMDEzICswMjAwCisKKyAgICBTYW5pdGl6ZS4KKyAgICAKKyAgICBDaGFuZ2UgdG8gdXNlIFNOTVB2MyBzaW5jZSB0aGF0IGlzIHdyaXRlYWJsZSBpbiBWNS02LXBhdGNoZXMuCisgICAgQ2hhbmdlIHRvIGNoZWNrIHZhbHVlcyBvbiBpbmRleCAnQScKKyAgICBSZW1vdmUgdGhlIGNoZWNrIGZvciBlbWJlZGRlZCBOVUwgaW4gaW5kaWNlcy4KKworY29tbWl0IGIyNGJmNDYyMjBhYWFmNTc5NGU5NDBmNWQ0NjczZGI3MTMzOWY5YzAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBKdWwgMjAgMTI6Mzk6NTkgMjAxMyArMDIwMAorCisgICAgQWRkIHRlc3RzIGZvciBzbm1wVGFyZ2V0QWRkcgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDcxZjMxOWNkMjM0NDVjNmUyMmE2MGExYTg1ZjMxYzJiNjkwNGIzZmIpCisKK2NvbW1pdCA2ZTEzZWJiODVlNDQwNDk4NDZlYWU3ZjYwZTA1MDM3NWY5YWNmNThlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gSnVsIDI4IDEwOjQzOjE3IDIwMTMgKzAyMDAKKworICAgIEFkZCBzb21lIG1vcmUgdGVzdHMgZm9yIHNubXBUYXJnZXRBZGRyCisKK2NvbW1pdCAwNzY5ZjQyMGQ4ZjQyNzk5M2IxMzQwZmRiN2VjYjNiYzA0OWQzZjZjCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgSnVsIDI1IDA4OjE1OjMyIDIwMTMgKzAyMDAKKworICAgIEZpcnN0IHNob3Qgb24gaGFuZGxpbmcgY2VydGlmaWNhdGVzIHdpdGggZW1iZWRkZWQgbnVsIGNoYXJhY3RlcnMKKworY29tbWl0IGQ4MzNiMGM4YmU1MDliZmEzYjgwMDFhZTZmNTUyMjg5Y2U5NTY3ZDAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBKdWwgMjAgMTI6NDE6NDAgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIE5VTCBjaGFyYWN0ZXJzIGluIHRoZSBpbmRpY2VzIGZvciBzbm1wVGFyZ2V0QWRkclRhYmxlCisKK2NvbW1pdCA3MWYzMTljZDIzNDQ1YzZlMjJhNjBhMWE4NWYzMWMyYjY5MDRiM2ZiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgSnVsIDIwIDEyOjM5OjU5IDIwMTMgKzAyMDAKKworICAgIEFkZCB0ZXN0cyBmb3Igc25tcFRhcmdldEFkZHIKKworY29tbWl0IGVhMzllMzY3NjY2NWI3ZThjYzVkZmViNWJiYmNkMGFkNDM0YWQ5MTIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBKdWwgMTggMDE6MzY6MjYgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSB0aGUgZGF0YSBhcmd1bWVudCB0byByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZyBhY2NlcHQgY29uc3RhbnQgdmFsdWVzCisKK2NvbW1pdCA3OGRhYzZlMzc5NDNkMWFkOTk4NDE4OTg4MDZlYTYwYjBlZWRlNjM2CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDIyIDEyOjM5OjAwIDIwMTMgLTA3MDAKKworICAgIGZpeCBidWcgbnVtYmVyICNhMjQ3ODogZml4IG1pYiByZXByZXNlbnRhdGlvbiBvZiB0aW1lb3V0IHZhbHVlcworCitjb21taXQgYTdlM2JjOGRkYmUzODdlYmY2ZjNmNmIwNTBlMjk5Mjk1NmJkMmU2MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAxMSAyMDoxNDo0NyAyMDEzICswMjAwCisKKyAgICBGaXhlcyBmb3IgbWVtb3J5IHN0YXRpc3RpY3MgZnJvbSAqQlNECisKK2NvbW1pdCA5ZGJlMTI0MDNjZWFhZmU2MTdmN2Q0OTk5MzMxNmEyNDlmY2JiOTlhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDExIDIwOjEzOjM2IDIwMTMgKzAyMDAKKworICAgIEZpeCBhIG1pc3NpbmcgbmV3ZmlsZSBpbiBhIGRlYnVnIG1lc3NhZ2UKKworY29tbWl0IDA0MWRlZWRmODE1MzdiYzYxNjkyOTg3NTNmOWRjYTNmNmNkNjFhMzUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMTEgMjA6MTI6MTIgMjAxMyArMDIwMAorCisgICAgTWFrZSBzdXJlIHdlIGRvbid0IG1ha2UgSVB2NiBtYXNrIGxvbmdlciB0aGVuIDEyOAorCitjb21taXQgYzY3Yzc4OTQwMzM5ZmFlYWI0MmIxYjFhMGE2YmU2Y2Q2ZGZlMmUyMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAxMSAyMDowNjozMSAyMDEzICswMjAwCisKKyAgICBJbXBsYW1lbnQgaXBBZGRyZXNzVGFibGUgZm9yICpCU0QKKworY29tbWl0IGIxODFlNDNhNmQxZjU2N2JmZDEwNzE3YTc3ZGYxODQ4ZTNiYjBmNDMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMTEgMjA6MDU6MDggMjAxMyArMDIwMAorCisgICAgTWFyayBPUyB0aHJlYWRzIGFzIHN1Y2guCisKK2NvbW1pdCBlMzZhNWNjNWYyMDI3MmFmZmY0MjI4ZTdlNDM5MWRkNWU2YzA2M2IzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDExIDIwOjAzOjM2IDIwMTMgKzAyMDAKKworICAgIEZpYyBzb21lIG1hbiBwYWdlIGNyb3NzIHJlZmVyZW5jZXMKKworY29tbWl0IGVjZjg2ODJkODY0ZDJmMDg1MjUwNzg1NDM4NThkMzYxYjNhZGNhNWMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDEwIDEwOjQ3OjMzIDIwMTMgKzAyMDAKKworICAgIExvd2VyIGltcG9ydGFuY2Ugb2YgZGVidWdnaW5nIG1lc3NhZ2VzLCB0aGV5IHNwYW0gc3lzbG9nLgorCitjb21taXQgZWY5NjMwNjNkZTQ5NDg1YmQ5MWMxMjllMDUzZjA2ZDA3NDQ0ODNlMQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgNCAxMTozNDoyNSAyMDEzICswMjAwCisKKyAgICBGaXhlZCBzaXplIG9mIG5ldGxpbmsgbWVzc2FnZS4KKyAgICAKKyAgICBQcmV2ZW50aW5nIGtlcm5lbCB0byBsb2cgJ25ldGxpbms6IDEyIGJ5dGVzIGxlZnRvdmVyIGFmdGVyIHBhcnNpbmcgYXR0cmlidXRlcy4nIG1lc3NhZ2UuCisKK2NvbW1pdCAyZTBkMTA4NzMxM2IwZmEwODNlMmIxY2E0ODk1ZmJmMjQ4ZDYzY2E5CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgSnVsIDQgMjI6MDQ6MTIgMjAxMyArMDIwMAorCisgICAgUnVuIGF1dG9yZWNvbmYKKworY29tbWl0IGM3ZmJhNzhlMTIyNTI1NGEwZjY1NjA1ZjM4MWFlZGQ3ZDhhMjEyY2EKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBKdWwgNCAyMTo0NzowOSAyMDEzICswMjAwCisKKyAgICBSdW4gYXV0b3JlY29uZgorCitjb21taXQgNTcxYmQ0MDdmOGJlOWM5NGNjNTUyZDRkM2I3ZjViNmIwOTg0ZDIzNworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IEp1bCA0IDIxOjM5OjU5IDIwMTMgKzAyMDAKKworICAgIFJ1biBhdXRvcmVjb25mCisKK2NvbW1pdCA4YWE1MGVkYmE3YTJkOTY2ZDhkZmM3ZmY0ZDdjNzhlZmRkZThjNWJkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgSnVsIDQgMDg6NTM6NTYgMjAxMyArMDIwMAorCisgICAgVXNlIEFDX0xJTktfSUZFTFNFIGluc3RlYWQgb2YgQUNfVFJZX0xJTksgYXMgdGhlIGxhdHRlciBpcyBkZXByZWNhdGVkCisKK2NvbW1pdCA1OWM2YWUzNDYyNWVlMDRhY2UzODI0ZWM0MDQ2MTNlMGI1MWRjMWIwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgSnVsIDIgMTc6NDA6NTQgMjAxMyArMDIwMAorCisgICAgVXNlIHRoZSBjcHAgYW5kIGxpbmtlciBmbGFncyBmcm9tIG15c3FsX2NvbmZpZyB3aGVuIGNoZWNraW5nIGZvciBteXNxbCBoZWFkZXJzLgorCitjb21taXQgZjg5Y2ZjYWZkYWUyMWZhYjUwYTcwYmRkZjE1OGZmZDllNGUwMDFkMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIEp1bCAyIDE3OjM5OjI1IDIwMTMgKzAyMDAKKworICAgIFVzZSB0aGUgb3V0cHV0IG9mIG15c3FsX2NvbmZpZyAtLWluY2x1ZGUgaW5zdHJlYWQgb2YgdGhlIG91dHB1dCBvZiBteXNxbF9jb25maWcgLS1jZmxhZ3MgaXRvIGZpbmQgaW5jbHVkZSBmaWxlcy4KKyAgICAKKyAgICBBY2NvcmRpbmcgdG8gdGhlIG15c3FsX2NvbmZpZyBtYW4gcGFnZSwgLS1pbmNsdWRlIGlzIHJlY29tbWVuZGVkIGZvciBncmVhdGVyCisgICAgcG9ydGFiaWxpdHkgc2luY2UgLS1jZmxhZ3MgbWlnaHQgY29udGFpbiBjb21waWxlciBmbGFncyBmb3IgdGhlIGNvbXBpbGVyIHRoYXQKKyAgICB3YXMgdXNlZCB0byBidWlsZCBsaWJteXNxbGNsaWVudCB3aGljaCBtaWdodCBjbGFzaCB3aXRoIHRoZSBvbmVzIHVzZWQgdG8KKyAgICBidWlsZCB0aGUgYXBwbGljYXRpb24uCisKK2NvbW1pdCA2OGE2YTFjYTZkYzRjYTg5MDFiYWNhYjU5ODMyNmFmNzNiNDQ0NjU0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgSnVsIDIgMTc6MzA6MjkgMjAxMyArMDIwMAorCisgICAgT25seSBjaGVjayBmb3IgbXlzcWwvbXlzcWwuaCBvbmNlLiBSZW1vdmUgSEFWRV9NWVNRTF9NWVNRTF9IIHNpbmNlIG5vdGhpbmcgdXNlcyBpdC4KKworY29tbWl0IGFkODdiYjYwOGIzMDU1NjdhM2M1ZWFmMDQ2YjdjOThlYTNlNGJkZDUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDQgMTE6MzA6MDQgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDI0NzI6IGZyb20gU3VuaWw6IGRvbid0IHVzZSBIQktUIGFzIGhlYXJ0YmVhdCBpbnRlcnZhbCBpbiBTQ1RQLU1JQjo6c2N0cEFzc29jVGFibGUuCisKK2NvbW1pdCA0YzRhNDI4MWZkNWIyYzYxNTZjNTEyMGY5YTJlOGI3MDhmNDY2Y2NkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCA0IDExOjA4OjQ4IDIwMTMgKzAyMDAKKworICAgIGluY2x1ZGVEaXIgaXMgbm90IHByZWRpY3RhYmxlIHdpdGggcmVsYXRpdmUgcGF0aHMKKworY29tbWl0IDc5ZThkZDJhMzcyYTIwZWU5N2RlMWM3MTA3YjU5YWQ0YWFmODlhMzYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDQgMTA6NDc6MjkgMjAxMyArMDIwMAorCisgICAgVXBkYXRlIGNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiB3aXRoIGluY2x1ZGVGaWxlIGFuZCBpbmNsdWRlRGlyLgorCitjb21taXQgZTBlODA0NDgyYmVjNzBmNGM0MTZhMzVmY2IzMjNhNDE2OTk2NWM1ZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEp1bCAzIDE1OjA4OjE0IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IEJVRzogMjQ3MDogQWNjZXB0IDY1NTM1IGFzIGEgdmFsaWQgSVB2NiBwb3J0IG51bWJlcgorCitjb21taXQgZGQzMzJhMDM1ZTg1M2M3MmE4MzI3NDg0NjliYWI3Yjg4MmUyN2I3YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAyIDA3OjAwOjUxIDIwMTMgKzAyMDAKKworICAgIEJVRyBhIzI0NjM6IEZpeCBjb25maWd1cmUgdG8gcmVzcGVjdCBkYXRhIGZyb20gbXlzcWxfY29uZmlnLgorCitjb21taXQgNDA4Y2M5NzMyYzM0NjExMWZjMWZkYTIzZTEzNmQ2MDg4M2NkYjdlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMSAxNDoyNTo0MSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBweXRob246IGNvcnJlY3RseSByZXBvcnQgZXJyb3Igd2hlbiBwYXJzaW5nIG1hbGZvcm1lZCBPSUQuCisKK2NvbW1pdCA5YTJiZmM4Zjk1ZDZlOTI2ZGNiZjE2ZmY0NGI1M2IyN2UzOGM4NDM3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAxIDEzOjU0OjM4IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHB5dGhvbjogRml4ZWQgcmV0dXJuaW5nIG9mIGVtcHR5IHN0cmluZ3MuCisgICAgCisgICAgVmFyYmluZCB0eXBlIChTTk1QX05PU1VDSE9CSkVDVCBldGMuKSBzaG91bGQgYmUgdXNlZCB0byBkZXRlY3QgZXJyb3JzIGluc3RlYWQgb2YgbGVuZ3RoIG9mIHRoZSB2YXJpYWJsZSAtIGl0IGNhbiBiZSBlbXB0eSBzdHJpbmcuCisKK2NvbW1pdCAxYTBmMDc1NzRhODBkMWQ2YTY3ODhjYWViMzkxYTFkMmZlZjk1NzEwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEp1biAyOCAxMDozNzo0NiAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogc2hvdyBMaW51eCBrZXJuZWwgdGhyZWFkcyBpbiBoclNXUnVuVGFibGUuCisKK2NvbW1pdCAyNjU5YzBmNmJkODZmMDE3MTg2OWQzNGZmOGE3ZDQ4MTk0ZWE0YjMxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE1heSAyMSAwOToxMzo0MSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQWRkZWQgYnRyZnMgc3VwcG9ydCB0byBockZTVGFibGUKKworY29tbWl0IGE4NDAzOWQwYTFkNmY1NTBiNDczZDI5NTkyMTAxMGQ4MGUxOGQ4M2YKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdW4gMjUgMTQ6NTU6MjYgMjAxMyArMDIwMAorCisgICAgc25tcF9zdHJjYXQ6IGRvbnQgdGVzdCAqYnVmIGJlZm9yZSB3ZSBoYXZlIHRyaWVkIHJlYWxsb2MKKworY29tbWl0IDU1NTNlZjQzNjJkNTI0YTA4OGI1MTllMTM1NTYxNThlNWQ2MjVlYzQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKdW4gMyAwMjo0ODowNiAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgcHJpbnRmKCIlcyIsIE5VTEwpIGFzIHRoYXQgaXMgdW5kZWZpbmVkIGJlaGF2aW91ci4KKworY29tbWl0IDg5NDE2ZTc5ZjVjNTA1NjhlOTljMDdmYWIwNmE5YWU5Zjk3NmJiZWYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBKdW4gMjQgMjI6MjI6MDMgMjAxMyArMDIwMAorCisgICAgQlVHOiBBMjQ0MTogQ29ycmVjdCBjb21tZW50CisKK2NvbW1pdCAxYTNhZTY0NzdiODE2M2ExYjQzYjgzNGFiYjMwYjFmMDMxNDVhYjYyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDIwOjI3OjM0IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IEhPU1QtUkVTT1VSQ0VTLU1JQiwgaHJTV1J1biB0YWJsZTogUGFyc2UgL3Byb2MvPHBpZD4vc3RhdCBjb3JyZWN0bHkgb24gTGludXgKKyAgICAKKyAgICBUaGlzIGlzc3VlIHdhcyByZXBvcnRlZCBieSBWaW5jZW50IEJlcm5hdCA8dmluY2VudC5iZXJuYXRAZGFpbHltb3Rpb24uY29tPi4KKyAgICBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjU3Ly4KKworY29tbWl0IGY5MmZmZTkxN2EzMDBjNDFlYmUwN2UyNGM2NDE4ODU1ZTc1OWY5MzgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTk6Mzc6MDMgMjAxMyArMDIwMAorCisgICAgc25tcHRyYXBkOiBGaXggYSBkb3VibGUgZnJlZSBpbiBhbiBlcnJvciBwYXRoCisgICAgCisgICAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvLgorCitjb21taXQgYzVmM2ExZDhiYjU4MDQ3OTliNjAyZDI3NjliMDMxZDZmYWY1ZjBlZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNzo1MTo0MyAyMDEzICswMjAwCisKKyAgICBzbm1wbGliOiBoZXhfdG9fYmluYXJ5MigpOiBSZXR1cm4gLTEgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMKKworY29tbWl0IGY4ZjA4ZTFkNmQzZWM4MTk0ZmFiZDZhYjAwMmFiOTE3YWZiYTkxYTMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTc6MTM6MDEgMjAxMyArMDIwMAorCisgICAgc25tcGxpYjogU2ltcGxpZnkgdGhlIGNvZGUgZm9yIGRlbGV0aW5nIGEgcmVxdWVzdCBmcm9tIHRoZSByZXF1ZXN0IGxpc3QKKyAgICAKKyAgICBUaGUgZ29hbCBpcyAoaG9wZWZ1bGx5KSB0aGF0IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgY29uZnVzZQorICAgIENvdmVyaXR5IGFueW1vcmUuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvLgorCitjb21taXQgZWY2ZDVjN2EwMzEzMjQ3YTZjOTQ3MzI2MTc3N2U5NjNmN2E0OTUyOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAxNDo0ODoyMiAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBzbm1wX3N0cmNhdCgpOiBDaGVjayAqYnVmIGJlZm9yZSB1c2luZyBpdAorICAgIAorICAgIERldGVjdGVkIGJ5IENvdmVyaXR5LiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLy4KKworY29tbWl0IDI1NjZiODNlYmViMGUzNGVlYTkwNzkyOGM1NGMyYjRlNzRmZjM3ZjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTQ6MjM6MzMgMjAxMyArMDIwMAorCisgICAgaHJTV0luc3RhbGxlZCB0YWJsZTogQ2hlY2sgc3RhdCgpIHJldHVybiB2YWx1ZSAoMi8yKQorICAgIAorICAgIERldGVjdGVkIGJ5IENvdmVyaXR5LiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLy4KKworY29tbWl0IDQ5Y2ZlNGQ4NDBjNThlMTIwMmZhMjcxZmJlNzYwYmQ3NTI2YTgzYTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTQ6MjM6MDMgMjAxMyArMDIwMAorCisgICAgaHJTV0luc3RhbGxlZCB0YWJsZTogQ2hlY2sgc3RhdCgpIHJldHVybiB2YWx1ZSAoMS8yKQorICAgIAorICAgIERldGVjdGVkIGJ5IENvdmVyaXR5LiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLy4KKworY29tbWl0IDVkZjU0NjI2MzlmMjQzZDU5MjlmYTliYTE0ZDIwYjM3MTFmN2NhY2UKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTQ6MjE6MTggMjAxMyArMDIwMAorCisgICAgdWNkLXNubXA6IGZpbmRfZGV2aWNlKCk6IFJlbW92ZSBhbiB1bnVzZWQgdmFyaWFibGUKKyAgICAKKyAgICBEZXRlY3RlZCBieSBDb3Zlcml0eS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8KKworY29tbWl0IDEzY2UxOTk2YTgyZTBiNDU4YjI2YWUzOWFiZjIwMTJkYjU5YzhhNTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTQ6MjA6MTUgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogX2luc2VydF9uc2ZpbGUoKTogQ2hlY2sgc3RhdCgpIHJldHVybiB2YWx1ZQorICAgIAorICAgIERldGVjdGVkIGJ5IENvdmVyaXR5LiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLy4KKworY29tbWl0IDgxYTBkODU5MTYzZjhkNTQ5MDg1MjViNTIyNDMyOTVkN2I0MTQ1NTAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTQ6MDc6MzcgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRml4IGEgYmFkIGZyZWUoKQorICAgIAorICAgIERldGVjdGVkIGJ5IENvdmVyaXR5LiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLy4KKworY29tbWl0IGQzNGM4M2U5MzQyNDE5YWVlY2ZmNWZmZDdkZWFiODM5ODdkYmViY2EKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTQ6MDA6MzkgMjAxMyArMDIwMAorCisgICAgZXRoZXJsaWtlLW1pYiwgcm1vbi1taWI6IEZpeCBtYWxsb2MoLi4uKSA8IDAgdGVzdHMKKyAgICAKKyAgICBEZXRlY3RlZCBieSBDb3Zlcml0eS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8uCisKK2NvbW1pdCA0M2M0NDAxNzZiM2U0ZjljZTk5NWU0ODJlYzY5NzViYTBjODU5YmYzCitBdXRob3I6IE1pY2hhZWwgU2hjd2FyY3ogPE1pY2hhZWwuU2hjd2FyY3pAY29tcGFzcy1lb3MuY29tPgorRGF0ZTogICBTYXQgSnVuIDIyIDEyOjQ2OjA0IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZDogRml4IGEgZG91YmxlIGZyZWUgYXQgZXhpdAorICAgIAorICAgIEEgcXVvdGUgZnJvbSBhIG1lc3NhZ2UgZnJvbSBNaWNoYWVsIFNoY3dhcmN6OgorICAgIAorICAgIEkgYW0gcnVubmluZyBuZXQtc25tcCA1LjcuMiBhbmQgaXQgbG9va3MgbGlrZSB0aGVyZSBpcyBhIGRvdWJsZQorICAgIGZyZWUgcHJvYmxlbSBpbiBzbm1wdHJhcGQsIGluIGZyZWVfdHJhcGRfYWRkcmVzcygpIGFuZAorICAgIHBhcnNlX3RyYXBkX2FkZHJlc3MoKS4gSSBnZXQgYSBTSUdBQk9SVCBvbiB0aGUgc2Vjb25kIFNJR0hVUAorICAgIChsb29rcyBsaWtlIGl0IGRvZXMgYSBkb3VibGUgZnJlZSBvbiB0aGUgZmlyc3QgU0lHSFVQIGFuZCBvbgorICAgIHRoZSBzZWNvbmQgaXQgY3Jhc2hlcykuCisgICAgCisgICAgSSBoYXZlIHRoaXMgc25tcHRyYXBkLmNvbmYgY29uZmlndXJhdGlvbjoKKyAgICAgIHNubXBUcmFwZEFkZHIgdWRwOjE2Mix1ZHA2OjE2MgorICAgICAgYXV0aENvbW11bml0eSBsb2csZXhlY3V0ZSxuZXQgcHVibGljCisgICAgCisgICAgQW5kIHRoaXMgaXMgdGhlIGJhY2stdHJhY2UgZnJvbSBnZGI6CisgICAgKioqIGdsaWJjIGRldGVjdGVkICoqKiAvb3B0L2NvbXBhc3MvYmluL3NubXB0cmFwZDogZnJlZSgpOiBpbnZhbGlkIG5leHQgc2l6ZSAoZmFzdCk6IDB4MDgwYzE3YTggKioqCisgICAgPT09PT09PSBCYWNrdHJhY2U6ID09PT09PT09PQorICAgIC9saWIvbGliYy5zby42WzB4ZjcyMDQ4NDVdCisgICAgL2xpYi9saWJjLnNvLjYoY2ZyZWUrMHg5YylbMHhmNzIwNjZlY10KKyAgICAvb3B0L2NvbXBhc3MvYmluL3NubXB0cmFwZChmcmVlX3RyYXBkX2FkZHJlc3MrMHgyYSlbMHg4MDRhNmJhXQorICAgIC91c3IvbGliL2xpYm5ldHNubXAuc28uMzAoZnJlZV9jb25maWcrMHgzMilbMHhmNzRhZTRjMl0KKyAgICAvb3B0L2NvbXBhc3MvYmluL3NubXB0cmFwZFsweDgwNGE1NTddCisgICAgL29wdC9jb21wYXNzL2Jpbi9zbm1wdHJhcGRbMHg4MDRiZmE5XQorICAgIC9saWIvbGliYy5zby42KF9fbGliY19zdGFydF9tYWluKzB4ZTUpWzB4ZjcxYjA0NTVdCisgICAgCisgICAgSSBoYXZlIGEgcGF0Y2ggdGhhdCBmaXhlcyB0aGlzIGlzc3VlLCBoZXJlIGlzIHRoZSBkaWZmOgorICAgIEBAIC00NDYsNiArNDQ2LDcgQEAgZnJlZV90cmFwZF9hZGRyZXNzKHZvaWQpCisgICAgeworICAgICAgICAgaWYgKGRlZmF1bHRfcG9ydCAhPSBkZGVmYXVsdF9wb3J0KSB7CisgICAgICAgICAgICBmcmVlKGRlZmF1bHRfcG9ydCk7CisgICAgKyAgICAgICBkZWZhdWx0X3BvcnQgPSBkZGVmYXVsdF9wb3J0OworICAgICAgICAgfQorICAgIH0KKworY29tbWl0IDJkYjU0ODVmYzFjY2NlMzllZmE2OWEzNzdiYjhkNmY2MjMxZWIwYjIKK0F1dGhvcjogRXJpYyBTLiBSYXltb25kIDxlc3JAdGh5cnN1cy5jb20+CitEYXRlOiAgIEZyaSBKdW4gMjEgMTA6NDc6MzIgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogZG9jdW1lbnRhdGlvbjogZnJvbSAiRXJpYyBTLiBSYXltb25kIjogQ29ycmVjdCBtYW4gcGFnZSBtYXJrdXAgcHJvYmxlbQorICAgIEFtYmlndW91cyBvciBpbnZhbGlkIGJhY2tzbGFzaC4gIFRoaXMgZG9lc24ndCBjYXVzZSBncm9mZiBhIHByb2JsZW0uCisgICAgYnV0IGl0IGNvbmZ1c2VzIGRvY2xpZnRlciBhbmQgbWF5IGNvbmZ1c2Ugb2xkZXIgdHJvZmYgaW1wbGVtZW50YXRpb25zLgorCitjb21taXQgZDY3NzE0NjRmMTZkYzZmZTY0ZGQyNGMwOGFmNGJlNzI1ODg1YWRhZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIEp1biAxOCAyMzo0NToyOCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBhcHBzOiBTdG9wIGFnZW50eHRyYXAgZnJvbSBhY2Nlc3NpbmcgdGhlIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbgorICAgIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgbW9hbmluZyBhYm91dCBub3QgYmVlaW5nIGFsbG93ZWQgdG8gd3JpdGUgdGhvc2UKKyAgICBmaWxlcyBkdWUgdG8gYmFkIHBlcm1pc3Npb25zLgorCitjb21taXQgMTRhYzVkNWQyYzRkOWYzYTc5OWQ0MDFjYzFlNDAzYThhMjkyZDQyNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1biAxMiAyMjozNzoyMyAyMDEzICswMjAwCisKKyAgICBEYXJ3aW4gZml4ZXM6IFVEUCBhbmQgVENQIHRhYmxlcywgbWVtb3J5IGRhdGEsIGFuZCBzb21lIGVycm9yIGNoZWNraW5nLgorCitjb21taXQgYmFiZDMxZDEwNDllMjMzYzQ1NGYxY2JkODhiYmE3NWYyZjQwNzgxZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1biAxMiAyMjoyNToxOSAyMDEzICswMjAwCisKKyAgICBGaXggc29tZSBtYW4gcGFnZXMgcmVmZXJlbmNlcyB0byBvdGhlciBwYWdlcworCitjb21taXQgYmRlZmNlMDZhMWVhMWMxNDMwODAyNzE0ZmM4MzdiNTU4ZTFhNjc1YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1biAxMiAyMjoyMzo1NyAyMDEzICswMjAwCisKKyAgICBVcGRhdGVkIEVOVElUWS1NSUIgaW4gcmZjIDY5MzMKKworY29tbWl0IGRmODYzYTUzNDhhYWJmNzFiYmNhN2JmZWZjZjhiZWI4YmI5ZTc3NjIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdW4gMTIgMjI6MTc6NDYgMjAxMyArMDIwMAorCisgICAgRml4IEJ1ZyAjMjQyNzogQ2Fubm90IHJlc29sdmUgSVB2NiBvbmx5IGhvc3RuYW1lcywgYnkgYWNjZXB0aW5nIGEgbGlzdAorICAgIG9mIHRyYW5zcG9ydCBkb21haW5zLgorCitjb21taXQgZGExZmVmMzgyNTkxZmY0NWRjOTJlYjNiOTVhNmJmZWZmOWVjZmE0ZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgMjEgMDk6MTM6NDEgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEFkZGVkIGJ0cmZzIHN1cHBvcnQgdG8gaHJGU1RhYmxlCisKK2NvbW1pdCA5MzFjODdhMDVmNWY2NjI4OTYxM2ZlZDc3YWM3ODg0NGI2MWNiNzlmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWF5IDE1IDIwOjE4OjE0IDIwMTMgKzAyMDAKKworICAgIEJVRyAyNDU4OiBGaXggbWlzc2luZyBpbml0aWFsaXphdGlvbiBvZiBhdXRvX25saXN0IHN0cnVjdHVyZSAoVGhhbmtzIFJ5YW4gU3RlaW5tZXR6KQorCitjb21taXQgOTEwNGUyYTNmMTk1NTA2YTQ3NzMzOTgzZDhjYmEzOGVkNTkyYTk4OAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1heSAxNSAyMDoxMzowNSAyMDEzICswMjAwCisKKyAgICBQQVRDSCAxMjUzOiBGaXggcGFyc2luZyBvZiBERUZWQUwgQklUUyAoVGhhbmtzIE1pa2UpCisKK2NvbW1pdCA4NTVlNTRlMzQ1YzU1ZWEyMmI3ZTdhYzEyYTI0OWQ3NDA5ZmJiMzA5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWF5IDE1IDIwOjExOjI5IDIwMTMgKzAyMDAKKworICAgIHJmY2xpc3Q6IGFkZCBSRkMgNjk0NQorCitjb21taXQgMzY1MjdjZDhjY2E2NTA3MTNjODVlMDMyOGMwYzJhMWNkMDk1YzM1OAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE1heSAxMiAxMDowNDowOCAyMDEzICswMjAwCisKKyAgICBXaW5kb3dzLCBWaXN1YWwgU3R1ZGlvOiBVbmJyZWFrIGNvbXBpbGF0aW9uIHdpdGggdGhlIFdpbmRvd3MgWFAgUGxhdGZvcm0gU0RLCisgICAgCisgICAgVGhpcyB3YXMgcmVwb3J0ZWQgYnkgV2ltIERldm9zCisKK2NvbW1pdCA1MTdhNTUxMjEwMmQzMzk0ODljOWE3MGVhOGQwODdhMGUxMDAzNWE5CitBdXRob3I6IFdpbSBEZXZvcyA8V2ltLkRldm9zQG1ldWNjaS1zb2x1dGlvbnMuY29tPgorRGF0ZTogICBTdW4gTWF5IDEyIDA5OjQwOjUzIDIwMTMgKzAyMDAKKworICAgIFdpbmRvd3M6IFVuYnJlYWsgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGQKKyAgICAKKyAgICAic3RhdGljIE5FVFNOTVBfSU5MSU5FIiB0cmlnZ2VycyB0aGUgZXJyb3IgbWVzc2FnZSAiZXJyb3IgQzIxNTk6IG1vcmUKKyAgICB0aGFuIG9uZSBzdG9yYWdlIGNsYXNzIHNwZWNpZmllZCIsIHNvIHVzZSBORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW5zdGVhZC4KKworY29tbWl0IDRkZjAyZjk2N2QwYjlkMTZjYTEyYjU4MjE1ZTk4MzViYzlmMzkxY2EKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBNYXkgNCAxNDo1NDo0OCAyMDEzICswMjAwCisKKyAgICBSZW1vdmUgY29tcGlsZXIgd2FybmluZyBhYm91dCBtaXNzaW5nIHByb3RvdHlwZQorCitjb21taXQgMThkYWZhNThkODEyMTk2MWIwNThkNmQ0MTY3MDdkZjFkNmEwNDJhYworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE1heSA0IDE0OjUzOjEwIDIwMTMgKzAyMDAKKworICAgIFJlbW92ZSBvbmUgY29weSBvZiB0aGUgbGludXhfc3RhdGVzIGFycmF5LiBNYWtlIHRoZSB3aG9sZSB0aGluZyBjb25zdC4KKworY29tbWl0IDAyYWQ4MWVhMmRlMmQ0Njg3Nzk0MDU3ZTJlODEwNGE2NTIzOTI1NGQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXkgMyAwODowODowMSAyMDEzICswMjAwCisKKyAgICBSZXZlcnQgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBmcm9tICdGaXggbWl4aW5nIG9mIGNvZGUgYW5kIGRlY2xhcmF0aW9ucydbMV0KKyAgICBpbiBvcmRlciB0byBub3QgdXNlIHZhcmlhYmxlcyBiZWZvcmUgdGhleSBhcmUgc2V0IGFuZCBub3QgaW5jcmVhc2UgdGhlCisgICAgcHJvYmFiaWxpdHkgZm9yIG1lbW9yeSBsZWFrcy4KKyAgICAKKyAgICAxKSByZXYgZWVmYzI1Y2E2NzA1YTJkMWE4ZjUyMTYwNzZmNDM5ZTBkM2UzZWY3NgorCitjb21taXQgNGZkMDUyNWQ2YTY1YWNmZWEzZDdiNDMxYzk3ODkzZGM0NzkyN2RhOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1heSAyIDIyOjQ1OjUxIDIwMTMgKzAyMDAKKworICAgIGF1dG9jb25mCisKK2NvbW1pdCA1NWRkZDgyOTVhZTY1ZTQ3ZjIyMGY0ODA3Nzk0ZmJhYzliNjlmMGZhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWF5IDIgMjI6MjA6NDYgMjAxMyArMDIwMAorCisgICAgdGVzdGluZzogRG9jdW1lbnQgd2h5IHdlIHNraXAgdGVzdHMKKworY29tbWl0IGVlZmMyNWNhNjcwNWEyZDFhOGY1MjE2MDc2ZjQzOWUwZDNlM2VmNzYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXkgMiAyMjoxMzo0MiAyMDEzICswMjAwCisKKyAgICBGaXggbWl4aW5nIG9mIGNvZGUgYW5kIGRlY2xhcmF0aW9ucy4KKworY29tbWl0IGI5NGI3MzRkZDM1M2JjZjc5M2M4YjY1YTI3M2ExMzg3YmZkMjU2ZWEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXkgMiAyMjoxMjoxMSAyMDEzICswMjAwCisKKyAgICBEYXJ3aW46IHN1cHBvcnQgNjQtYml0IGNvdW50ZXJzIGZvciBkaXNraW8gdGFibGUKKworY29tbWl0IDhkODQxYzFkOWIxYjRlZWMyNjRkNjgyYWMxMjYwMzJhYTA4ZjJlODIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXkgMiAyMjowOToxNyAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBTdXBwb3J0IG5ldyBNSUIgc3RydWN0dXJlcyBhbmQgTUZEIHJld3JpdGVzIHVuZGVyIERhcndpbgorCitjb21taXQgMjc2NDBmY2ZiMjA1MjZiZWYyZjZlYjQwYzJhNTQ1NjZkZmM2YzRjNgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEFwciAyNyAxMDo1ODoyOSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQ29ycmVjdCB0aGUgc2l6ZSBvZiBvZiB0aGUgRVhBTVBMRUlQQUREUkVTUyB2YWx1ZSBvbiBMNjQgaG9zdHMKKworY29tbWl0IGViYmUyYTM5OTBlZjZkY2JkY2I5OWEzOWFkZDQ2NTM5ODM1NGMzNGMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBBcHIgMjMgMDc6MjU6MjEgMjAxMyArMDIwMAorCisgICAgYnVpbGRpbmc6IE1ha2UgLS1lbmFibGUtbWluaW1hbGlzdCBjb21waWxhdGlvbiB3b3JrIGFnYWluCisKK2NvbW1pdCA0YmQ3ZDczYjFmZTYwYmI1MzZiZjM5ZWI0YTM4NTk2ZTg5NjVjM2YzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIyIDIyOjI1OjM4IDIwMTMgKzAyMDAKKworICAgIHR5cGVjYXN0IHRvIHNpbGVuY2Ugd2FybmluZyBmb3IgZm9ybWF0CisKK2NvbW1pdCBkYjA3MWQwYTZmNDg3NDIxNzY5YjY5ZjIyY2NmMDljYzI0MmQ5NDU0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIyIDIyOjIzOjUyIDIwMTMgKzAyMDAKKworICAgIE9ubHkgZGVjbGFyZSBIUlBfbWF4bmFtZXMgd2hlbiBuZWVkZWQKKworY29tbWl0IGZhZjAwY2UzYjBmZWI0ZDM3ZmFiZWY2ZDQxMzVlMzY4MDNiMDAzNzkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjIgMjI6MjI6MjQgMjAxMyArMDIwMAorCisgICAgaXAuYzogZml4IGluY29uc2lzdGVucyBkZWNsYXJhdGlvbnMgb2YgaXBfbW9kdWxlX29pZF9sZW4KKworY29tbWl0IDdmNmI1OTUzM2NkZmEwNjQ1MGFlZTQxNTcwMjIzYjFjZGQyY2E2YjgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjIgMjI6MTk6NDQgMjAxMyArMDIwMAorCisgICAgUmVjb3ZlciBmcm9tIGZhaWx1cmVzIGluIGxpYnBjaQorCitjb21taXQgNDA5MzhhNjI2MTk1OTBiNGVhMDcxYWU4NWJhYTJmNDJhMGI3ZmNiMgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjIgMTU6MDA6MDAgMjAxMyArMDIwMAorCisgICAgQ2hlY2sgaWYgJ2Fzbl9wYXJzZV8qICcgYWN0dWFsbHkgc3VjY2VlZGVkLgorICAgIAorICAgIElmIG5vdCwgZGlzY2FyZCB0aGUgcGFja2V0IGluc3RlYWQgb2YgdXNpbmcgd3JvbmcgZGF0YS4KKworY29tbWl0IGFhNGZiOTQ5MDEyZDdjMDIyYTQzNjk5MmFjMjAzYzA2NWZkNzQyMGEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIyIDE0OjU4OjQxIDIwMTMgKzAyMDAKKworICAgIEludGVnZXIgdmFsdWVzIGVuY29kZWQgaW4gQkVSIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLgorICAgIAorICAgIElmIGFzbl9sZW5ndGggPT0gMCwgd2Ugd291bGQgcmVhZCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgbmV4dCB2YXJiaW5kIG9uIG5leHQgbGluZToKKyAgICAgICAgaWYgKCpidWZwICYgMHg4MCkKKyAgICAtPiByZWFkaW5nIHBhc3QgdGhlIGJ1ZmZlciBpZiB0aGVyZSBpcyBubyBzdWNoIHZhcmlhYmxlIC0+IHNpZ3NlZ3YuCisKK2NvbW1pdCBmNmVlZDZlMjM4NGNiZjg1Nzc2OGYwZWU4YzY2MDJlYjdjZDJmMDNhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gQXByIDIyIDA4OjE4OjU0IDIwMTMgKzAyMDAKKworICAgIFJlZ2VuZXJhdGUgY29uZmlndXJlCisKK2NvbW1pdCBhNTg3ZDExZmI2N2ZhZDNhZjI0NTE3YTQwOGFiYzM3MDA1NjVlZGY1CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gQXByIDIyIDA4OjE4OjM1IDIwMTMgKzAyMDAKKworICAgIFJlZ2VuZXJhdGUgY29uZmlndXJlCisKK2NvbW1pdCBjZTNjOTIxNDEyOGIxY2RiZWJkMjk3NWRhMGYzNmE1NWUyNTg0ZmEwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gQXByIDIyIDA4OjE2OjAyIDIwMTMgKzAyMDAKKworICAgIFJlcG9ydCB0aGUgcmVzdWx0IG9mIHRoZSBQT1NJWCBzaGVsbCB0ZXN0LCBub3QgYSBjb25zdGFudCB5ZXMKKworY29tbWl0IDBjODcwZjc0YjJlNDMzN2I0YmYzYjdmMTFmNTViMTJlODBkZjQ5ZmYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBBcHIgMjIgMDg6MDA6MzIgMjAxMyArMDIwMAorCisgICAgQ2hhbmdlIHRoZSBjaGVjayBvZiBwZXJsIHNoZWxsIGRldGVjdGlvbiB0byB3b3JrIHdpdGggQUlYIHNoIGFzIHdlbGwKKworY29tbWl0IDVmMDgxOWYxMDJkMWNkZTM4OTlkMDg3MDhjOWMxMjYyNjg4OTkzMTgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBBcHIgMSAwNzozODowOSAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWFrZSB1cGRhdGUtY29udHJvbGxlZCBjaGFuZ2VzIHRyaWdnZXIgcGVyaW9kaWMgc2F2ZXMuIFRoYW5rcyB0byBDbGF1cyBLbGVpbiBmb3Igbm90aWNpbmcgdGhhdCB0aGlzIHdhcyBtaXNzaW5nLgorCitjb21taXQgYThmZjI2ODgzZDYzODYxZDg3Njk4NWRkZTg5ZjM4OTE1NzdkNjAyNgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE1hciAzMSAxMzozMzowMiAyMDEzICswMjAwCisKKyAgICBzbm1wZDogTWFrZSB0aGUgdXBkYXRlIGhhbmRsZXIgY2FsbCBhbnkgY2hpbGQgaGFuZGxlcnMKKworY29tbWl0IDJiYzYyYjk3MmEyYmQwYjkxZGRkNGY3YzExZDQ3ZGJlNWJmNmZmMDMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBNYXIgMzEgMTM6MzI6MjkgMjAxMyArMDIwMAorCisgICAgc25tcGQ6IERvIG5vdCBsZWFrIG1lbW9yeSBpZiBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlscy4KKworY29tbWl0IGFlOTE0OGI1MWI5YjAyMjcwZmRkYmI3NDExMWJhMmMwMmE4ZWE2N2MKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBcHIgMTYgMjI6MDM6MDAgMjAxMyArMDIwMAorCisgICAgZXh0ZW5kLmM6IGZpeCBtaXNzaW5nIHNlbWljb2xvbiBhbmQgd2FybmluZworCitjb21taXQgNDY0MjJkMTdkZmRiNDE2ZWIyNGFkN2RiNzQ1M2VjNDczZGIyMDgyMAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBcHIgMTYgMTM6NDg6MjYgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIGNyYXNoIGluIFVDRC1TTk1QLU1JQjo6ZXh0VGFibGUKKyAgICAKKyAgICBzbm1wZCBjcmFzaGVkIHdoZW4gdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSBoYWQgbm8gYXJndW1lbnRzLCBpLmUuIGV4dGVuZC0+YXJncyB3YXMgTlVMTC4KKworY29tbWl0IDhiNTdiZGIwYTA5NDcyYTE2ZDNhZjY5ZmQyYjEzNzRjMDllNmEzYWQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgOCAyMDozNjozNSAyMDEzICswMjAwCisKKyAgICByZXJ1biBhdXRvaGVhZGVyL2F1dG9jb25mCisKK2NvbW1pdCA5YTllYTI1N2U2ZWI0NzgwMGQzNGYxYTg2ZWMwYTJhNmU5MDg1ZjMxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDggMjA6MzU6MjQgMjAxMyArMDIwMAorCisgICAgcmVydW4gYXV0b2hlYWRlci9hdXRvY29uZgorCitjb21taXQgNTlhMzIxNDM5OGJjZWIyMmM0OGQ1OGMwZmU5YzU1MmIyZTFlY2I4YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciA4IDIwOjMxOjQ5IDIwMTMgKzAyMDAKKworICAgIHJlcnVuIGF1dG9oZWFkZXIvYXV0b2NvbmYKKworY29tbWl0IGU0ZDcyZGIxMWQzZmI3YTQ0NDI1MDk3YjVlYzI2YjlmOTE3YTljODIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgOCAxOToxNDowNCAyMDEzICswMjAwCisKKyAgICBzbm1wa3NtOiBoYW5kbGUgZGVwcmVjYXRlZCBrcmI1X2F1dGhfY29uX2dldHtsb2NhbCxyZW1vdGV9c3Via2V5CisKK2NvbW1pdCA5OWZmOTUzNjczZjczNjE0NDYzYWNlMTIxMGM0YWMwNzNhMWYyYTgxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDggMTk6MDU6NDcgMjAxMyArMDIwMAorCisgICAgc25tcGtzbTogZml4IHNvbWUgY29uc3QgY2FzdCB3YXJuaW5ncworCitjb21taXQgY2YwZDRlZjIyNGJhZDAwMDk5NTM3MDQ4M2E1Yzk4ZGMxNzgzOWE0MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEFwciA1IDIyOjA1OjMzIDIwMTMgKzAyMDAKKworICAgIEluaXRpYWxpemUgYSBjb3VwbGUgb2YgdmFyaWFibGVzIHRvIHBsZWFzZSBjbGFuZworCitjb21taXQgNzFmNTllOWU2Yzk4ZThkYmZhYjFmZmIwZDFlNDY4YzEyZTNkOTJjZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEFwciA1IDIxOjM4OjQ0IDIwMTMgKzAyMDAKKworICAgIE1ha2Ugc3VyZSBzbm1wa3NtIGluY2x1ZGVzIGNvbV9lcnIuaCAod2hlcmV2ZXIgaXQgaXMpIHRvIGRlY2xhcmUgZXJyb3JfbWVzc2FnZQorCitjb21taXQgOGMwMWY2NDcyOGE0MzY1NmRjM2FjNWZiZWZkZjhlY2VjOGRhMTUwNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEFwciA1IDIxOjEzOjMwIDIwMTMgKzAyMDAKKworICAgIE1pbm9yIGZpeCB0byBpbmxpbmUgdG8gYWxsb3cgY29tcGlsYXRpb24gd2l0aCBjbGFuZworCitjb21taXQgMmRiMTJmNjg4ZTFmMmVlZWJiNTg5ZWM3M2RhODJlYjg5N2YzNGJkMQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIE1hciAxOCAwODo1NDo0OSAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWFrZSB0aGUgbG9jYWwgdHJ1dGh2YWx1ZSBoYW5kbGVyIGNhbGwgYW55IHN1YmhhbmRsZXJzIGl0IG1pZ2h0IGhhdmUuIFRoYW5rcyB0byBDbGF1cyBLbGVpbiBmb3Igbm90aWNpbmcgdGhpcyBwcm9ibGVtLgorCitjb21taXQgOTA1MTJhMzJiZDFjMmJlNWQxN2IyM2YxMDk1NjI3ODM5NWRlMzc1NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE1hciAxOSAyMjoyODozNCAyMDEzICswMTAwCisKKyAgICBQYXRjaCAxMjUwIGZyb20gc3RoZW46IGluY2x1ZGUgPHN5cy9wcm9jLmg+IGluIHN3cnVuX2tpbmZvLmMgZm9yIE9wZW5CU0QgNS4zCisKK2NvbW1pdCAzOTE5MzYwMGVjMzhkZWI1MTM3OWExMDk2NDhkNjllN2U5MDAxNzAyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDcgMjE6NDQ6NTkgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IHByb3RvdHlwZSByb3V0ZTZwcgorCitjb21taXQgYWNjZTgyOTZkYzViNjhkMjEyZjc0MDRlZGMyYWZkYjhiMDI4MTdjMAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA3IDIxOjM5OjE2IDIwMTMgKzAxMDAKKworICAgIGNsZWFuIHRhYnMgdHAgc3BhY2VzCisKK2NvbW1pdCA0MDJiZGFlOTZhNmQ3OWIzYjYzYjY3MjYxYjM3YTg0N2FiNDgxN2UzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDcgMjE6Mzc6NDMgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IGZhbGwgYmFjayB0byBpcHY0Um91dGVUYWJsZSAoVGhhbmtzIHRvIGZlbm5lcikKKworY29tbWl0IGU2OTE3ZTM3MmEwNmRkZDc3NjFiMzEwM2IzMjliY2Y2OTZlOTNhMWYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgNyAyMToyOTo0NCAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogc2hvdyBBUyBpbiByb3V0aW5nIHRhYmxlIGlmIGF2YWlsYWJsZSAoVGhhbmtzIHRvIGZlbm5lcikKKworY29tbWl0IDllYjhkMGY5MDdlZDhkNzhkZTkwZGNmNjYyM2MzMzA2MDk5M2YyYTAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgNyAyMToyODoyNiAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogZWFybHkgZGV0ZWN0IGlmIHdlIHdhbnQgaXB2NCByb3V0ZSB0YWJsZSAoVGhhbmtzIHRvIGZlbm5lcikKKworY29tbWl0IDQwODM3MzRlZjdmNGJlYWYxYjlhMTMyNTczOGJhMTg1ZWI3Y2M3MTYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgNyAyMToyNTo1MyAyMDEzICswMTAwCisKKyAgICBGaXggbWlzcGxhY2VkIG5ld2xpbmVzIGluIGVycm9yIG1lc3NhZ2VzCisKK2NvbW1pdCA1YjBlZDNiNzZmNmU0NjY5ZjIzOGI1YzgyY2QzY2M2Y2I2Y2FhNWNkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDUgMTc6MTY6MjYgMjAxMyArMDEwMAorCisgICAgVW5pdCB0ZXN0IFQwMTQ6IEZpeCBhIEN5Z3dpbiBidWlsZCB3YXJuaW5nCisKK2NvbW1pdCAxMDZhZDI0NTBmMmI3ODg0OGYyOTJhZDAzNDQ1YTk3YzdmODdlNmY0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDUgMTc6MTc6MDUgMjAxMyArMDEwMAorCisgICAgVW5pdCB0ZXN0IFQwMTQ6IEluaXRpYWxpemUgdmFyaWFibGVzIHByb3Blcmx5CisKK2NvbW1pdCBhN2RlYTU3MzQ4NTkzMTU2MTA1MWEyMDE5MDI3ZDdlZDA5ZDE1NTY1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTWFyIDQgMjI6MzU6MDYgMjAxMyArMDEwMAorCisgICAgcmZjbGlzdDogYWRkIEc5OTh4IG1pYnMKKworY29tbWl0IDQ2MDRjZjYxZTdjZjZlYTY0ZTc4MmY0YTNkNzJkNGZiMDI0YzFmOWIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNCAyMjoyMzoyMyAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdCAtQ3M6IGNvbnNpc3RlbnQgZmllbGQgd2lkdGhzIGZvciBzdGF0aXN0aWNzLiBEb2N1bWVudAorICAgIHNubXBuZXRzdGF0IC1Dc3MgdmFyaWFudC4KKworY29tbWl0IDRhYTkyMTU3Y2U1NWQxZTUyOGQ3ZGU1MjQ5MWQzZWI3MDIwODY5ZTcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNCAyMjoxNzoxOSAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdC4xOiByZW1vdmUgaW52YWxpZCByZWZlcmVuY2VzIHRvIHJvdXRpbmcgc3RhdGlzdGljcyBvdXRwdXQuCisKK2NvbW1pdCA3NTFmNGE2YzdmYzg5YTVjZjJiMjg3OWY2ZjkxNWIzMTQ2NmEwNGI3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTWFyIDQgMjI6MTQ6MjkgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IGZhbGwgYmFjayBmaXJzdCB0byBpcENpZHJSb3V0ZVRhYmxlLiBUaGFua3MgdG8KKyAgICBCaWxsIEZlbm5lciBmb3IgaW5pdGlhbCBwYXRjaCBmb3IgdGhpcy4KKworY29tbWl0IDkzYzg2ZTZlMWNmMzAxYmQyNjlmZGZmYjVlOWFhYWNlOGFhMTkzZjQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBKYW4gMyAwNzoyMTowMyAyMDEyICswMTAwCisKKyAgICBEbyBub3QgbGVhayBtZW1vcnkgb24gZXJyb3IKKyAgICAKKyAgICBJZiBhbGxvY2F0aW9uIG9mIGlpbmZvIGZhaWxzIHRoZW4gdGFibGVfaW5mbyBpcyBsZWFrZWQuCisgICAgRGVhbGxvY2F0ZSB0YWJsZV9pbmZvIGluIHRoaXMgY2FzZS4KKworY29tbWl0IDM2YTdkZTcyMzBmYmJiYjUyY2MzN2NiYmVkMjgxZWI1NTk0MDRiZTkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgMjUgMjA6NDA6MDkgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogQWRkIG11bHRpaG9taW5nIHN1cHBvcnQKKyAgICAKKyAgICBPbiBXaW5kb3dzIFZpc3RhIC8gV2luZG93cyBTZXJ2ZXIgMjAwOCBhbmQgbGF0ZXIgaXQgaXMgcG9zc2libGUgdG8gYWRkCisgICAgbXVsdGlob21pbmcgc3VwcG9ydCBieSB1c2luZyB0aGUgSVBfUEtUSU5GTyBzb2NrZXQgb3B0aW9uLgorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMKKworY29tbWl0IDdiYmFiYWIyMzYyZGFhNmQ3NmFkNzMwMzNiM2YzMmIyY2JhNzI1M2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMjIgMTg6NTU6NDcgMjAxMyArMDEwMAorCisgICAgUmV3b3JrIElQX1BLVElORk8gLyBJUF9SRUNWRFNUQUREUiBkZXRlY3Rpb24KKyAgICAKKyAgICBEZXRlY3QgSVBfUEtUSU5GTyAvIElQX1JFQ1ZEU1RBRERSIHN1cHBvcnQgZHVyaW5nIHRoZSBjb25maWd1cmUKKyAgICBwaGFzZSBpbnN0ZWFkIG9mIHJlcGVhdGluZyB0aGUgZm9sbG93aW5nIHRlc3QgaW4gZWlnaHQgZGlmZmVyZW50CisgICAgcGxhY2VzOgorICAgIAorICAgICAjaWYgKGRlZmluZWQobGludXgpICYmIGRlZmluZWQoSVBfUEtUSU5GTykpIFwKKyAgICAgICAgIHx8IGRlZmluZWQoSVBfUkVDVkRTVEFERFIpICYmIEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfQ09OVFJPTCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBIQVZFX1NUUlVDVF9NU0dIRFJfTVNHX0ZMQUdTCisgICAgIC4uLgorICAgICAjZW5kaWYKKyAgICAKKyAgICBUd28gc2lkZS1lZmZlY3RzIG9mIHRoaXMgcGF0Y2ggYXJlOgorICAgICogSVBfUEtUSU5GTyBzdXBwb3J0IGlzIGVuYWJsZWQgb24gQ3lnd2luLgorICAgICogc2V0c29ja29wdChJUF9SRUNWRFNUQUREUikgaXMgbm8gbG9uZ2VyIGludm9rZWQgb24gV2luZG93cyB3aGVuCisgICAgICBidWlsdCB3aXRoIFZpc3VhbCBTdHVkaW8gb3IgTWluR1ctZ2NjLgorCitjb21taXQgMWExOTZhZDlmMTUxNzg2OGI5M2E2YmVjOTNhMGNmZTFkMjllMjgzYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAyMyAxNDowMzoyOSAyMDEzICswMTAwCisKKyAgICBUZXN0aW5nOiBNYWtlIHVuaXQgdGVzdCBUMDE0IG1vcmUgcm9idXN0CisKK2NvbW1pdCA5YmUyMmFhYWY4MzkzNzEzZmJjMzkwMjVmNzAyMTExZjUwZjFlNGVhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgRmViIDIzIDExOjAzOjIwIDIwMTMgKzAxMDAKKworICAgIFdpbmRvd3M6IEF2b2lkIGNvbGxpc2lvbnMgd2l0aCB0aGUgV2luZG93cyBWaXN0YSBvciBsYXRlciBTREsKKworY29tbWl0IDBiNmJmZWYyY2E5YWU5ZTFjMmJlYWZlNzAwMTAwZmFlNWY2ZjRjMWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMjMgMTE6MjA6MjMgMjAxMyArMDEwMAorCisgICAgaW5ldF9udG9wKCkgLyBpbmV0X3B0b24oKTogQ29udmVydCBwcm90b3R5cGVzIGZyb20gSyZSIHRvIEFOU0kgQworCitjb21taXQgMmJiNTFkNzFlZWM0ZTc4OTk4MmMyYTc0MTE4NmRjZTZkZjIzODU0MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMSAyMDo1OToyNSAyMDEzICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHRpbWUgbmVlZGVkIHRvIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0cyAod2FzIGVubGFyZ2VkIGJ5IGNvbW1pdCBiM2Q1ZWQ4NykKKworY29tbWl0IGNmNjQwY2NkNjhlOTYzNjgwNWI3NTA3OTkyOGM3Mjc3ZmEyNjA4M2IKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjEgMTE6NTU6MDMgMjAxMyArMDAwMAorCisgICAgVW5pdCB0ZXN0IFQwMTQ6IEFjY2VwdCAibG9jYWxob3N0LmxvY2FsZG9tYWluIiB0b28KKworY29tbWl0IGJkYTQzNTczNzVhZDI5OWNmMTg0NzU3OWUxYTFiYzNjNjExODk1YzMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjEgMTY6MDc6NDEgMjAxMyArMDEwMAorCisgICAgUmVncmVzc2lvbiB0ZXN0IFQwNjA6IEVzY2FwZSBiYWNrc2xhc2hlcyBwYXNzZWQgdG8gQ09ORklHVFJBUEQKKworY29tbWl0IDZiNWQ3ODRmNGQ2ZDAwMDM5MDAxNGQxMjBmMTViOTM3MzYyZjhjMDcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjEgMjA6MzM6MDIgMjAxMyArMDEwMAorCisgICAgUHl0aG9uIGJpbmRpbmdzOiBGaXggYSByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDZkMjU4ZWZhMmFjY2FkZmNjYzUwZDg2YmQ0NjM3OTc0NTQ0OWNhNGEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjEgMTU6Mjc6MTkgMjAxMyArMDEwMAorCisgICAgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogUmVtb3ZlIHN1cGVyZmx1b3VzIGNhc3RzCisKK2NvbW1pdCAyYzJlMWY0MTYzOTNkNDg1ZjlhYzkwYzg3ZjcyMDY1YzY2OGI3MzIxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIxIDE1OjQ4OjM0IDIwMTMgKzAxMDAKKworICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDFiYzc5OWRlNmNhYjAxMGIyNWMwYzRkM2Y1MTU1YjVmYmFmNTI3ZjAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjEgMjA6MDU6MTQgMjAxMyArMDEwMAorCisgICAgUHl0aG9uIGJpbmRpbmdzOiBGaXggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUKKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgMjM0MTU4YjhlODRjYzIwNGNiYWM5NmU2ZTliZTY5NTk2MzU0MDRiOAorCitjb21taXQgNGY0ZWFlYjkyMGFkMTVjOTI5YzY2NzgyY2MwYTY0MjkxMmNhYmQwNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTcgMTI6MjQ6MjYgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBmaXhlZCBJUEFERFJFU1Mgc2l6ZSBvbiA2NGJpdCBzeXN0ZW1zLgorCitjb21taXQgNDg2ZjExZGRlZTlmMWMyZGQ4MDU2NDQ5ZTkwMzFlMjRiODY0Njg3MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBGZWIgMjEgMTA6MDY6MTIgMjAxMyArMDEwMAorCisgICAgQWRkZWQgSUVURiBCU0QgbGljZW5zZSBmb3IgTUlCIGZpbGVzLgorICAgIAorICAgIE1JQnMgaW5jbHVkZWQgaW4gTmV0LVNOTVAgdGFrZW4gZnJvbSBJRVRGIERvY3VtZW50cyBhcmUgY29uc2lkZXJlZAorICAgIENvZGUgQ29tcG9uZW50cyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIElFVEYgVHJ1c3QgTGljZW5zZSBQb2xpY3ksIGFzIGZvdW5kCisgICAgaGVyZToKKyAgICAKKyAgICBodHRwOi8vdHJ1c3RlZS5pZXRmLm9yZy9saWNlbnNlLWluZm8vCisKK2NvbW1pdCBkMjRlZmIwNDc3OGQ4NzBlZmEyNzM5NDkzOTQ5ZGI2NWYzZmRkNGYzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDEyIDIwOjQ0OjQ2IDIwMTMgKzAxMDAKKworICAgIFNvbGFyaXM6IEZpeCBmZXRjaGluZyBvZiBsYXJnZSBjaHVua3Mgb2YgZGF0YSAobGFyZ2VyIHRoYW4gb25lIGJ1ZmZlcikKKyAgICBUaGlzIGZpeGVzIHByb2JsZW0gd2l0aCBtYW55IGludGVyZmFjZXMsIGJ1dCBjb3VsZCBhbHNvIGZpeCBvdGhlciBsYXJnZSB0YWJsZXMuCisKK2NvbW1pdCA0NTAwMWZkOThjNzI5ZGY5ZmYwNTM2MjdjNDE2YWI1ZjJlNGM2MGYzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDEyIDIwOjM5OjUwIDIwMTMgKzAxMDAKKworICAgIEZpeCBidWcgMjI4NiwyNDM5OiBCb3VuZCBidWZmZXJzaXplIGZvciBzd3J1biBkYXRhIG9uIEZyZWVCU0QKKworY29tbWl0IDliZDA0MTNiZmJkY2Q4NDU0MTNjMTM1YmJmZjg3NzFmYTcxMzA4MDkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDExIDExOjU3OjAxIDIwMTMgKzAxMDAKKworICAgIEV4cGxpY2l0bHkgZW51bWVyYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgCisgICAgVGhlIGdlbmVyaWMgY29uZiBhbmQgbG9jYWwuY29uZiBleHRlbnNpb25zIHdlcmUgaW50ZXJwcmV0ZWQgYXMgbXkuc25tcC5jb25mIGFuZCBteS5vdGhlci5zbm1wLmxvY2FsLmNvbmYgYnkgc29tZSBjdXN0b21lcnMuCisKK2NvbW1pdCAwYmRkMDk4ODlkMDgxMWY4NjRkZjEzMWI4NDRmMjBiMDAzOTIwNjJiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRmViIDcgMDA6MDU6MDMgMjAxMyArMDEwMAorCisgICAgc25tcF9jbGllbnQuYzo6bmV0c25tcF9xdWVyeV93YWxrOiBoYW5kbGUgU05NUHYyIGV4Y2VwdGlvbiByZXN1bHRzCisKK2NvbW1pdCA4NjRiNGFjYThkZmE0ODBhNzhiNzQ1ZmFlMjA5MWVkYzUzNzNhMGM2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRmViIDYgMTY6MDA6NTQgMjAxMyArMDEwMAorCisgICAgc25tcHRyYXBkOiBBZGQgLVggb3B0aW9uIHRvIGRpc2FibGUgQWdlbnRYCisKK2NvbW1pdCAxMTJmM2Q0ZmE1MzZiMmM1MzFkMDc4MDY3NjE5ODkxNWExZjU4MTc5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRmViIDYgMTU6NTk6NTMgMjAxMyArMDEwMAorCisgICAgcmZjbGlzdDogQWRkIFJCUklER0UtTUlCCisKK2NvbW1pdCBjMGE2NTQ5NTk3OTQ3ZjI5YzM2ZWZhZGIwNDkyN2ZmNjkwMTg5ZWJhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDMwIDE1OjUzOjE1IDIwMTMgKzAxMDAKKworICAgIFJVTlRFU1RTOiBkb24ndCB0cmFwIG9uIFNJR0NITEQuIEl0IGNvbmZ1c2VzIGRhc2gsIG1rc2ggYW5kIG1heWJlIG90aGVyIHNoZWxscy4KKyAgICAoZGFzaCBpcyAvYmluL3NoIG9uIFVidW50dSkKKworY29tbWl0IGI5NWFjMzg2ZTZjMjM1NmExZWMyOWYxYzQwOWIyZWMzZTkwMTU5YzMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMjkgMDg6NTk6MDEgMjAxMyArMDEwMAorCisgICAgcmZjbGlzdDogYWRkIFRFRC1NSUIKKworY29tbWl0IDIzYmRmNmQyNmY0MzM3ZDA3ZWE2ZTk5MDFhNzczOGQxMTg2ZDE2ZDQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMjkgMDg6NTg6MDcgMjAxMyArMDEwMAorCisgICAgc25tcGRmOiBhZGQgLUNIIGFzIGFsdGVybmF0aXZlIHRvIC1DaAorCitjb21taXQgNDAyNThlOWMwNjBhZWNhYzY1NTVhZWRmZjNlNzBiZGU3ZDJhYjg0NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAyOCAxNzowNTowOCAyMDEzICswMTAwCisKKyAgICBUMDcyY29tMnNlY3VuaXhfc2ltcGxlOiBhd2sgc3RyaW5nIGluZGljZXMgc3RhcnQgYXQgMSEKKyAgICBGaXggdGVzdCB0byB3b3JrIHdpdGggbWF3ayAoZGVmYXVsdCBmb3IgRGViaWFuL1VidW50dSkKKworY29tbWl0IGUzN2YyYjZiZGZmYTdhZmFhMWRjMGI4YWVlNTY1YTRkYTgyZDZmZTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjUgMTY6MjQ6MTAgMjAxMyArMDEwMAorCisgICAgc25tcGRmOiBBZGQgLUNoIChodW1hbiB1bml0cykgb3B0aW9uCisKK2NvbW1pdCA3YTQwN2FkMzQ1MDVlZDRkYmFhMmU4NGUwNmExZGJmNDhjM2M3N2U1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDI1IDE1OjI4OjQzIDIwMTMgKzAxMDAKKworICAgIHNubXBkZjogSGFuZGxlIFNOTVAgKHYyYy92MykgZXhjZXB0aW9ucworCitjb21taXQgYzczOWNiMzg3NWZiNWQ0Y2FkNDEzODY2MWNjMGE0MTcxMzg0YzM0MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyNSAxMDoxNDowMiAyMDEzICswMTAwCisKKyAgICBBcHBseSBwYXRjaCMxMjQ2OiBGaXggcGFzc2luZyBhIFNFVCBvZiBhIHN0cmluZyB0byBub3QgY3V0IGl0IGF0CisgICAgZm91ciBjaGFyYWN0ZXJzIHRvIGEgcGFzcy9wYXNzX3BlcnNpc3QgaGVscGVyLgorCitjb21taXQgMjM0MTU4YjhlODRjYzIwNGNiYWM5NmU2ZTliZTY5NTk2MzU0MDRiOAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTcgMTI6MjQ6MjYgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBmaXhlZCBJUEFERFJFU1Mgc2l6ZSBvbiA2NGJpdCBzeXN0ZW1zLgorCitjb21taXQgOWUwYTBlMzVkOGQxYjM2ZmE0N2NlYzkzOGQ2Yzg3NGRlMDA3MWJiNgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKYW4gOSAyMjozNzo0NyAyMDEzICswMDAwCisKKyAgICBDSEFOR0VTOiBweXRob246IFBBVENIRVM6IDEyMzk6IEZpeCBtZW1vcnkgbGVhaworCitjb21taXQgNTU2MDVlZTM0NTJhZWY1YWFiZTRlZDE1YTgzMzc0YTk3NzI4ZTY0YQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gOSAwOToyNjo1NiAyMDEzICswMTAwCisKKyAgICBGaXhlZCBtZW1vcnkgbGVhayBvbiBmYWlsZWQgcmVhbGxvYy4KKworY29tbWl0IGEzMmNhOTNhOWI5MTY3NGE4YzFlODllMWEzODNhNzYxMzZiOGFjMzgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgSmFuIDggMTY6NDI6NTQgMjAxMyArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDEyNDA6IEZpeCBkZWFsbG9jYXRpb24gb2YgaW50ZWdlciBpbmRleGVzCisKK2NvbW1pdCA4NzY4MWYwZmIyODVhMDIxNjM2ZTA2YTZmMjM1MWQ3NjQwOWVlYmM4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSmFuIDUgMTU6MDY6MTIgMjAxMyArMDEwMAorCisgICAgQXZvaWQgdXNpbmcgImxvY2FsIiBzaW5jZSBTb2xhcmlzJyAvYmluL3NoIGRvZXMgbm90IHVuZGVyc3RhbmQgaXQKKworY29tbWl0IDU5YjRkNDBmMzk3MGJhODJmM2RmMmEzOTk5NzEyNTRiMDQ4Mjc0NDMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNCAxODowMDo1MyAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBNYWtlIHdpbkV4dERMTCB3b3JrIG9uIDY0LWJpdCBXaW5kb3dzIHN5c3RlbXMKKworY29tbWl0IDM5NTk3MTA2MDM4ZjZlMWM1ZWQ0OWIzZmNlMDAyMWE2YzU5ZWMxZmUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNCAxODowNTozOCAyMDEzICswMTAwCisKKyAgICB3aW5FeHRETEw6IEFkZCBtb3JlIGRlYnVnZ2luZworCitjb21taXQgODVjZTkwNjI5MTFkMzFiNDJlMGMxZTEzNWFiZDNiZGE4MTNlMzAwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA0IDE4OjAyOjMwIDIwMTMgKzAxMDAKKworICAgIHdpbkV4dERMTDogSW52b2tlIFNubXBFeHRlbnNpb25DbG9zZSgpIGJlZm9yZSB1bmxvYWRpbmcgYW4gZXh0ZW5zaW9uIGFnZW50CisKK2NvbW1pdCA3ZTAzMTIyOTU0MzU3OWQzN2IwMDYyOTZlMmY0NDU0ODJkMDUxMmNiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSmFuIDUgMTM6MDQ6MDIgMjAxMyArMDEwMAorCisgICAgd2luRXh0RExMOiBSZW1vdmUgc291cmNlIGZpbGUgd2luMzIvTWdtdEFwaS13aW5FeHRETEwuaAorCitjb21taXQgMmU4OTYyNGU1NWU3MzU1Nzg2MjU5NGYxZjUyNWY5ZGZmYzgyNzk4NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiA0IDIyOjI2OjQ3IDIwMTMgKzAxMDAKKworICAgIFNvbGFyaXMgL2Jpbi9zaCBkb2VzIG5vdCB1bmRlcnN0YW5kICdsb2NhbCcgYnVpbHRpbi4KKworY29tbWl0IDYyNTdkZWE0ODI3ZTg1YzdhZjg0NWFlOWNkZWQ0OGQ0NGFhN2JiM2QKK0F1dGhvcjogSmFuIFBva29ybu++g++9vSA8anBva29ybnlAcmVkaGF0LmNvbT4KK0RhdGU6ICAgVGh1IERlYyAyMCAxNDo0NTo0NSAyMDEyICswMTAwCisKKyAgICBGaXggY29tbWVudCB0eXBvcyBpbiBleGFtcGxlLmMKKyAgICAKKyAgICBQYXRjaCBmcm9tIFBva29ybu++g++9vSA8anBva29ybnkgYXQgcmVkaGF0LmNvbT4KKworY29tbWl0IDlkZmM0NGM5MWQ3YTI5YTRjNDNmNzc5MDg1ZGRlMzRjNWZlNmQ1YWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gMyAxMDozMDoyNyAyMDEzICswMTAwCisKKyAgICBNaW5HVywgdGVzdCBoYXJuZXNzOiBGaXggYSBsb2cgbWVzc2FnZQorCitjb21taXQgMWQwOTljN2I5MTllZjI1ZWZhMDNjMTRhYTc3Y2NiZWM4ZTViYjAwOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiAzIDEwOjI0OjQ4IDIwMTMgKzAxMDAKKworICAgIGFwcHMvYWdlbnR4dHJhcC5jLCBXaW5kb3dzOiBGaXggdXNhZ2UgdGV4dAorCitjb21taXQgZjAyMWU2ZmQ0YmMyYWNiNmZmYWMzMzlkM2YzOGU0YzE1YmI1YmQ3ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxIDE3OjUzOjE2IDIwMTMgKzAxMDAKKworICAgIE1pbkdXOiBVcGRhdGUgdGVzdCBoYXJuZXNzLiBJbnN0YWxsYXRpb24gb2YgcHNsaXN0LmV4ZSBpcyBub3cgcmVxdWlyZWQuCisKK2NvbW1pdCA0YmMzYzA1NDdlMGIzM2VlYTcxZjNjMWEwOWVmZGQ1OTY5ZDdlMjc4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRGVjIDMxIDE3OjI0OjMzIDIwMTIgKzAxMDAKKworICAgIHVjZC1zbm1wL2RsbW9kOiBFbmFibGUgaW4gTVNWQyBiYXRjaCBidWlsZAorCitjb21taXQgZTllZmIyMDA5NTQ2OGU2NDE1N2I4NGYxOGI2Y2NkOTkxZTEwODJlMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxIDE1OjA0OjM3IDIwMTMgKzAxMDAKKworICAgIFdpbmRvd3M6IExpbmsgd2l0aCBzbm1wYXBpLmxpYiBhbmQgbWdtdGFwaS5saWIgZXZlbiBpZiBub3QgdXNpbmcgdGhlIHBsYXRmb3JtIFNESworCitjb21taXQgOTAwYWFlOGVhNjkzZmI4NDBkNTc1MjZmYjY3MWQyMTVmODY1YmVkYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxIDAxOjMzOjAxIDIwMTMgLTA4MDAKKworICAgIHVjZC1zbm1wL2RsbW9kOiBGaXggYW4gTVNWQyBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCAzNjNlM2ZhMWE0M2NhNjIyM2ZlM2IwODA4ZTY2Mjk1YjNkOTM4NmI4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEgMDE6Mjc6NDIgMjAxMyAtMDgwMAorCisgICAgdWNkLXNubXAvZGxtb2Q6IEFkZCBkbG1vZC5jIHRvIE1TVkMgcHJvamVjdAorCitjb21taXQgZTM1NDJjMDRhODQ2MTc4NTc2ODhhYjhlODcxOGNkYzRjNmE2OGNmNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxIDA5OjE0OjMzIDIwMTMgKzAxMDAKKworICAgIHVjZC1zbm1wL2RsbW9kOiBSZW1vdmUgbW9yZSBzdXBlcmZsdW91cyBjYXN0cworCitjb21taXQgMWUzYjBhZTJiMDJjZjFmYWNjYWQ0ODk2YmMzYmRiZWExZGI0YTY4ZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIERlYyAzMSAxMzoxOTozNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBQb3J0ZWQgdWNkLXNubXAvZGxtb2QgdG8gTWluR1cgLyBNU1ZDCisKK2NvbW1pdCA5ODZmYjliODVlMTM4M2I4MWVhZWE0MGQyY2I3YzE0NDkyZGRiZGFjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRGVjIDMxIDEyOjMyOjU2IDIwMTIgKzAxMDAKKworICAgIE1pbkdXOiBBdm9pZCBjb25mdXNpb24gYmV0d2VlbiBNaW5HVydzIGtpbGwuZXhlIGFuZCB0aGUgU3lzSW50ZXJuYWxzIHBza2lsbC5leGUgKGJhY2twb3J0IGNvbW1pdCA5YjQyN2IzNTNmMWNlYjhmZTg3ZTZmYzhlZDNiNmNmYWIzY2U3ZjIwKQorCitjb21taXQgNzk4YjczY2Y1OWUzNjg3ZjY1YmQ1NGE3YThhYzI5ZmUyNDk4YzY5ZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAxNyAxMzowNTo1MyAyMDA5ICswMDAwCisKKyAgICBVbmJyZWFrIHRoZSBNaW5HVyBidWlsZCBmb3IgdGhlIDUuNCBicmFuY2ggLSB0aW1lcmFkZCgpIGlzIG5vdCBBTlNJIEMKKyAgICAKKyAgICBSZW1vdmUgRElGRlRJTUVWQUwoKSBiZWNhdXNlIGl0J3MgYnVnZ3k6IGluICJkaWZmLnR2X3VzZWMgPiAxMDAwMDAwTCIgdGhlICI+IgorICAgIHNob3VsZCBoYXZlIGJlZW4gIj49IiBpbnN0ZWFkLgorICAgIAorICAgIFRoaXMgaXMgYSBwYXJ0aWFsIGJhY2twb3J0IG9mIGNvbW1pdCA4NTg1MDljOWUxOTk4ZjZkMjZlOTBjYjYyMmU0YjE3ZWIyNDg4YTRmLgorCitjb21taXQgMWU1NTZjYzc3NDBjMDYzNjdmZjMzNjFhYTk2YmY0NTMzOWMyZThhMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIERlYyAzMCAxNzo1OTo0NCAyMDEyICswMTAwCisKKyAgICB1Y2Qtc25tcC9kbG1vZDogUmVtb3ZlIHN1cGVyZmx1b3VzIGNhc3RzCisKK2NvbW1pdCA1MWRmYTZlNjdmZDg0ODdiODg4MmMxNjMyZTgxMTE5NWQ5NDk2ZTQxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gRGVjIDMwIDEwOjQyOjE2IDIwMTIgKzAxMDAKKworICAgIHVjZC1zbm1wL2RsbW9kOiBNZW50aW9uIGxpYnJhcnkgcGF0aCBpbiBlcnJvciBtZXNzYWdlcworCitjb21taXQgMDJhMzU3ZDZiOTUzOGE0ODg5NjM2ODkwMGJiYjU5M2RiYjRkYzM3NAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIERlYyAzMCAxMDo0MDo1NSAyMDEyICswMTAwCisKKyAgICB1Y2Qtc25tcC9kbG1vZDogUmVtb3ZlIGEgc3VwZXJmbHVvdXMgaW5pdGlhbGl6ZXIKKworY29tbWl0IGVmNzQ4ODQ1YjE0YzA5NTA0OWVkNTQ4MDNlYTc0Y2Y0NTdlZmQxODkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBEZWMgMzAgMDk6NTc6MzggMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogRml4IGVudmlyb25tZW50IHNlcGFyYXRvciBpbiBzbm1wZC9zbm1wdHJhcGQvc25tcHRyYW5zbGF0ZSBoZWxwIHRleHQuIFJlcG9ydGVkIGJ5IEphc29uIE1jQ29sbHVtIDxqbWNjb2xsdW1AY29tdGVjaGVmZGF0YS5jb20+LgorCitjb21taXQgYmMwYWJhZTU1ZGQ4NjdkYmJmNGU0MmU2N2EzNjIzNDA4OGM5Mzc3MQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAyIDA5OjI1OjMzIDIwMTMgLTA4MDAKKworICAgIGNvcHlyaWdodCB1cGRhdGUKKworY29tbWl0IDQwODZhZjk1YjI5OGYxY2YxMzBkMDhkZWI3ZTA5MDA1OGIzMjFhZjkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjAgMDc6Mzc6MTQgMjAxMiArMDEwMAorCisgICAgRml4IHRoZSBNSUIgbmFtZXMgdG8gYWN0dWFsbHkgd29yaworCitjb21taXQgNzk1Mjc0ZmMyMWUxYmEwM2VmYmU5YjYwNDJjNmEzNTEzZDg5ZGViZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAyMCAwNzoyNDo0NyAyMDEyICswMTAwCisKKyAgICBDbGVhbiB1cCBhbmQgdmFsdWUgY2hlY2tpbmcgZm9yIGlwRGVmYXVsdFRUTCwgaXB2NklwRGVmYXVsdEhvcExpbWl0CisKK2NvbW1pdCA0MzlkNTBjNjc5ZTlmMDliMTA2YmZkZjY0ZjhjYzc2NjQxOWUxMzQ0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIwIDA3OjI0OjE2IDIwMTIgKzAxMDAKKworICAgIEZpeCBpY21wTXNnU3RhdHNUYWJsZSBmb3IgU29sYXJpcworCitjb21taXQgMDA3YTdkMjRiYzVmMjc5MzkyZmQwZWM0MzYxNDc3Y2Q4ZjE0ZTVhZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAxOSAyMjoxNDowNiAyMDEyICswMTAwCisKKyAgICBnaXQgaWdub3JlIHRpbGRlIGZpbGVzCisKK2NvbW1pdCBhZmYwMmYyNGUxOThhMjkyMzEyNzNkNDk0ODIwZGQ2ZTM1NDE1NWNhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRGVjIDE3IDIyOjQ0OjE4IDIwMTIgKzAxMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlci9hdXRvY29uZgorCitjb21taXQgOWNmZDY4MGYyZjJmNDVjZjc2Y2Q0MjE2NjkzYjg2MmZhYTI3Y2JjMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIERlYyAxNyAyMjo0MjowMCAyMDEyICswMTAwCisKKyAgICBDb25maWcgY2hlY2sgZm9yIEJTRCB1ZHBzdGF0LnVkcHNfaXBhY2tldHMKKworY29tbWl0IDUzYzJmZGQ1YjY2MDIxMTQ0YWQyNjUzOWI1M2JlOWMxNTkzYjQ4ODQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBEZWMgMTcgMjI6Mjc6MDMgMjAxMiArMDEwMAorCisgICAgQWRkIFNEIHN1cHBvcnQgZm9yIGlwLWZvcndhcmQtbWliCisKK2NvbW1pdCBjYTdiMTdhNDFkNGQxNmJkMjdhYWNmOTIxMTZiZWEzNTYyZWVlYTM2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIERlYyAxNyAxMjo0MDozMiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogdXNlIGNhY2hlIGZvciBkc2tUYWJsZSB0byBzcGVlZCBpdCB1cC4KKyAgICAKKyAgICBVQ0QtU05NUDo6ZHNrVGFibGUgd2FzIHNsb3cgb24gTkZTIG1vdW50cy4gTm93IGl0IHVzZXMgZnN5cyBjYWNoZQorICAgIHRvIHJlbG9hZCBtb3VudHMgZXZlcnkgNSBzZWNvbmRzLgorCitjb21taXQgMGI3MTgxODRlMDcwZDI1NzRjMDliMThmNTY4OTUwYThjOWZmNzY1OQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxNiAyMDo1NzoyOSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBhcHBzOiBTdG9wIHVzaW5nIHNubXBfcGVycm9yIHdoZW4gbG9nZ2luZyBhZnRlciBmdW5jdGlvbnMgdGhhdCBkb24ndCBzZXQgc25tcF9lcnJuby4KKworY29tbWl0IDdlZGNlMGMzMTFhN2RkNTQyOGUwZWRiNzAxZGFiZTlkYzc5ZDA5NjcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMTUgMTI6NDA6MTAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IE1ha2UgdGhlIC13aXRob3V0IG9wdGlvbnMgdG8gcnBtYnVpbGQgd29yaworCitjb21taXQgYzYwMzc1NDhmYjRiNDc5OTYzMzBmZTFiYzFlODI2NWFjZWE1ZGQ1NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIERlYyAxMCAwMDo0MTo0MiAyMDEyICswMTAwCisKKyAgICBUaGUgcHJvcGVyIHJvdXRlciBmaWxlcyBmb3IgQlNECisKK2NvbW1pdCAyYjM1OWU0NTA5ODZiYjg3NDRiYmZmMjFlMGNhYjQ5M2FjYWNlYTk4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gRGVjIDkgMjM6MDI6MDIgMjAxMiArMDEwMAorCisgICAgU3VwcG9ydCBmb3IgaXBTeXN0ZW1TdGF0c1RhYmxlIGZvciAqQlNELiBNb3N0IG9mIHRoZSBjb2RlIGJ5IEdhcnJldHQKKyAgICBDb29wZXIuIFBhcnRpYWxseSBmdW5kZWQgYnkgQ2lzY28gSXJvbnBvcnQuCisKK2NvbW1pdCA5YTA0NDEyOGU4YjMzMTc5NjIyMTE2NjM1ODc2OWViMDUzNWRmYzFmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gRGVjIDkgMjI6MzY6MjEgMjAxMiArMDEwMAorCisgICAgU3VwcG9ydCBmb3IgaXBOZXRUb01lZGlhVGFibGUgZm9yICpCU0QuIE1vc3Qgb2YgdGhlIGNvZGUgYnkgR2FycmV0dCBDb29wZXIuCisgICAgUGFydGlhbGx5IGZ1bmRlZCBieSBDaXNjbyBJcm9ucG9ydC4KKworY29tbWl0IGY5Y2IyOThkZDIwZWY2ZDRiYzY4M2NlMDY3ZjIzMzA3MzdiZTRlMDkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBEZWMgOSAyMjoxNzoyMiAyMDEyICswMTAwCisKKyAgICBTdXBwb3J0IGZvciBpcERlZmF1bHRSb3V0ZXJUYWJsZSBmb3IgKkJTRC4gTW9zdCBvZiB0aGUgY29kZSBieSBHYXJyZXR0CisgICAgQ29vcGVyLiBQYXJ0aWFsbHkgZnVuZGVkIGJ5IENpc2NvIElyb25wb3J0LgorCitjb21taXQgMWRlZTQxNTYyYzU0ZTBiNTRiMzAxYTM3ODM4YjNiYTY1MDlkY2MzOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIERlYyA5IDIxOjU0OjE0IDIwMTIgKzAxMDAKKworICAgIFN1cHBvcnQgZm9yIGlwU3lzdGVtU3RhdHNUYWJsZSBmb3IgKkJTRC4gTW9zdCBvZiB0aGUgY29kZSBieSBHYXJyZXR0IENvb3Blci4KKyAgICBQYXJ0aWFsbHkgZnVuZGVkIGJ5IENpc2NvIElyb25wb3J0LgorCitjb21taXQgM2RiYWJjOTcwNjhiNmM2OTBiM2ZkZjk3YjVhYjNhZTBkOWVhYjI4YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIERlYyA5IDIxOjQ3OjQ1IDIwMTIgKzAxMDAKKworICAgIENoYW5nZSBzb21lIGRlYnVnIG91dHB1dCBpbnRvIGVycm9yIGxvZ2dpbmcuIEZhaWx1cmUgdG8gZXhwYW5kIDMyIHRvIDY0CisgICAgSVMgYW4gZXJyb3IuCisKK2NvbW1pdCA5MDczNjBlMDlmZmYzMzkwZDYyNjlmOGNiNDc0MGJkYmNkOTU4MTY2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gRGVjIDkgMjE6NDU6NDQgMjAxMiArMDEwMAorCisgICAgRml4IHNvbWUgbGFiZWxzIGZvciBuZXRzdGF0IGljbXAgb3V0cHV0LgorCitjb21taXQgOWYyZjA1NDA1YzdiYjQ5OWViZTA4MzliMGQ3OWJhMjVjNjFjMGY1NQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIERlYyA3IDA5OjQ5OjUxIDIwMTIgKzAxMDAKKworICAgIFJ1bm5pbmcgYXV0b2NvbmYKKworY29tbWl0IGQyN2YzNjQ1MjU4M2QyOTFmMjU1ZWYwOTBlMmFlYWVhZjM5YTllMGUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBEZWMgNyAwOTo0OTowMiAyMDEyICswMTAwCisKKyAgICBSdW5uaW5nIGF1dG9jb25mCisKK2NvbW1pdCA1NjM1MmMyZWJlOTU0MWY2YWJmOWQyYjllYmM0NzA1ZDgxOGQ4OWI4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRGVjIDcgMDk6NDg6MjEgMjAxMiArMDEwMAorCisgICAgUnVubmluZyBhdXRvY29uZgorCitjb21taXQgMzk3OTIzZTBhYWUxMzg1YTBhZjNhODAzZTYwZWJlODEyNGY5NjFkMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIERlYyA3IDA5OjI2OjIxIDIwMTIgKzAxMDAKKworICAgIEZpeGVzIGZvciBjb25maWd1cmUgb2Yga3NtIG1vZHVsZS4gUHJldmlvdXNseSBrc20gaGFkIHRvIGJlIHRoZQorICAgIGZpcnN0IHNlY3VyaXR5IG1vZHVsZSBpbiBsaXN0IHRvIGJlIGluY2x1ZGVkLgorCitjb21taXQgNDMwZDEwZDI5NmI4ZDhjOThhM2FhZmQyN2E4YzZmZjRmNjQwODExNAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIERlYyA3IDA5OjI0OjM5IDIwMTIgKzAxMDAKKworICAgIEZpeCBzcGVsaW5nIHdoaWNoIGhhcyBwcmV2ZW50ZWQga3NtIG1vZHVsZSBmcm9tIGNvbXBpbGluZyBmb3IgbWFueSB5ZWFycyA6LSgKKyAgICBBbHNvIHNvbWUgZml4ZXMgdG8gc3VwcG9ydCBIZWltZGFsIEtlcmJlcm9zLiBUaGlzIHN1cHBvcnRzIEZyZWUvTmV0QlNELgorCitjb21taXQgYmZmODMyYWIyNDhlMDg2MjhiZTQ2ZWJmNzYxMTE5MTFlN2YzOWU1MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIERlYyA3IDA5OjE3OjIyIDIwMTIgKzAxMDAKKworICAgIEFkYXB0IGZvciBsb25nZXIgbGluZXMgZnJvbSAvcHJvYy9uZXQvdGNwNi4gQW5kIGlzc3VlIGFuIGVycm9yIGlmCisgICAgaXQgaGFwcGVucyB0byBmYWlsIGFnYWluLiBQYXRjaCBmcm9tIGJ1ZyAjMjQyNSAoVGhhbmtzIFpoaXh1IExpdSkKKworY29tbWl0IDk2ODdlNGQ1MDc4MWJhMDE2ODQxNmYxNWM0ZjJkOWZjODM3MTA1MGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBEZWMgNyAwOToxNTo0OCAyMDEyICswMTAwCisKKyAgICBpY21wIHN1cHBvcnQgZmlsZXMgZm9yICpCU0QgKGV4Y2VwdE5ldEJTRCkKKworY29tbWl0IGYyMTViYTFlMzdhOGMzZTA3Njk1OGVmZDgzYzBmNWQzOTNhMTRjMjIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBEZWMgNyAwOToxMzoyNCAyMDEyICswMTAwCisKKyAgICBTdXBwb3J0IGZvciBpY21wU3RhdHNUYWJsZS9pY21wTXNnU3RhdHNUYWJsZSBmb3IgKkJTRCBhbmQgU29sYXJpcworCitjb21taXQgYTdiN2MzYzBjM2JlM2Y2Y2YyZDA5ZjY0NzBkM2ZhMDg2MTUzZDAzNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAzMCAxNTozNTozMyAyMDEyICswMTAwCisKKyAgICBTaHVmZmxlIGluIHByZXBhcmF0aW9uIGZvciBicm9hZGVyIHN1cHBvcnQgZm9yIGljbXBTdGF0cy9pY21wTXNnU3RhdHMKKworY29tbWl0IGJkMjk2YWMxODQyMzUwM2VkYThlZmZlYjg2YWZiMTllMDAxNDM4ODkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMzAgMTU6MzQ6NTIgMjAxMiArMDEwMAorCisgICAgU2h1ZmZsZSBpbiBwcmVwYXJhdGlvbiBmb3IgYnJvYWRlciBzdXBwb3J0IGZvciBpY21wU3RhdHMvaWNtcE1zZ1N0YXRzCisKK2NvbW1pdCAyZTIzZWEwZjI5M2JiOGU5Y2VhZjU2MzZkYjdiN2QwN2Y2ZDYyYzdhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTm92IDIwIDIzOjMzOjU4IDIwMTIgKzAxMDAKKworICAgIEFkZCBtaXNzaW5nIHNzSU9SYXdTZW50L3JlY2VpdmVkIGZvciBTb2xhcmlzLgorCitjb21taXQgNTllZWJjNDFhOTQzNTgxMTA3M2ZlYzUwZDc2ZGQ2YWVmOWRkNThhNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE5vdiAyMCAyMzozMjo1MyAyMDEyICswMTAwCisKKyAgICBBZGQgc29tZSBlcnJvciBjaGVja2luZyB0byBnaXR0b29scworCitjb21taXQgODBiMTgzNzU4MjY2NTM2MjZjMmQ3MDQ1MWMyYjU0YTFjNTBhM2NlNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE5vdiAxMyAxMzo1NTo0NyAyMDEyICswMTAwCisKKyAgICBSZW1lbWJlciB0byBpbml0IHRoZSBzeXN0ZW1zdGF0cyBwcm92aWRlcgorCitjb21taXQgNzQzY2I2NjcxODkwNDk3OWY1NTg5NTQ3MjUwMTU4NGMzMGM2NmYxMAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTIgMTU6NDk6MTUgMjAxMiArMDEwMAorCisgICAgRml4ZWQgY3Jhc2ggd2hlbiBNRDUgYW5kL29yIFNIQS0xIGhhc2ggaXMgbm90IHN1cHBvcnRlZCBieSBPcGVuU1NMLgorCitjb21taXQgMTg5OGNmYzcxYmRiM2Y0YTE2ODVjNmQyMWI1NGRkMWEzNDgyNTkxYworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMiAxNTo0ODoxNSAyMDEyICswMTAwCisKKyAgICBPcGVuQlNEIDUuMiBzdXBwb3J0LgorCitjb21taXQgZGQ1M2ZmYmFmZWIzMWNkZTYxNmE4OTk0OWU3MGUzZDVmZTBjYzFiMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTIgMTU6NDY6NDMgMjAxMiArMDEwMAorCisgICAgRmFsbCBiYWNrIHRvIFNIQS0xIGlmIE1ENSBpcyBub3QgYXZhaWxhYmxlLgorICAgIAorICAgIE9uIHBhcmFub2lkIHN5c3RlbXMgd2hlcmUgTUQ1IGlzIGRpc2FibGVkIHVzZSBTSEEtMSBpbnN0ZWFkIG9mIE1ENSBhbmQgZG9uJ3QgY3Jhc2guCisKK2NvbW1pdCBlYThmNzRjODFmODJjMTA1YjlmYzAxOTY1YWRjZTE0YjBkODE4NmRhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEyIDE1OjQ2OjM0IDIwMTIgKzAxMDAKKworICAgIEZpeCBOZXRCU0QgbWVtb3J5IGRhdGEgdHlwaW5nCisKK2NvbW1pdCBkZGUzYTM1YmFhZWI2ODNjZjE0NDFhMTZhMTU0NDFmOGI0NTZjNTIwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMiAxNTo0NToyNyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBjcmFzaCB3aGVuIE1ENSBoYXNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgT3BlblNTTC4KKworY29tbWl0IGI3N2I2N2Q4ZDYyOWY3ODU2MzllNDAyZmE0ZmJlZTZjY2ZlMThmYTUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTIgMTU6NDQ6NDkgMjAxMiArMDEwMAorCisgICAgS2VybmVsIHByb2Nlc3NlcyBpbiBEcmFnb25GbHksIGFuZCBmaXhlZCBjcHUgdXNhZ2UgZGF0YQorCitjb21taXQgZDZjNjIwMTJjODA4MmZjODg2Zjc0N2UwZTJjOWJiOGE2YzY2YzY2MworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMiAxNTo0MTo1NSAyMDEyICswMTAwCisKKyAgICBEaXNraW8gZm9yIE9wZW5CU0QsIGFuZCBzb21lIGNsZWFuLXVwIGZvciBGcmVlQlNEL0RyYWdvbkZseQorCitjb21taXQgNGE1ZTBmNGM5NWZiNmNkMTIzYTQ5MDE3ODczNzZlNDQ3ZDMzMmMwMgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgOSAxNDoyMzo0OCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBhZGRlZCBzaW1mcyAoT3BlblZaIGZpbGVzeXN0ZW0pIHRvIGhyU3RvcmFnZVRhYmxlIGFuZCBockZTVGFibGUuCisKK2NvbW1pdCAyYTBjZDM1YWNmMzMyNWE2ZmRjMGExMDQyM2Y1NGNiOGI1Y2U1MjJiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IFNlcCAxMyAxNToyNTo1MiAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgaW5maW5pdGUgbG9vcCB3aGVuIFNJR1RFTSBhcnJpdmVzIGluIG1pZGRsZSBvZiBpbnRlcm5hbCBxdWVyeSBwcm9jZXNzaW5nLgorICAgIAorICAgIFdoZW4gc25tcGQgc3RhcnRzIGludGVybmFsIHF1ZXJ5LCBlLmcuIGZvciAnbW9uaXRvcicgY29uZmlnIG9wdGlvbnMsIGl0IGNhbGxzCisgICAgbmV0c25tcF9xdWVyeV93YWxrKCkuIFRoaXMgZnVuY3Rpb24gbG9vcHMgdW50aWwgZWl0aGVyIGVycm9yIG9jY3VycyBvciB0aGUKKyAgICBpbnRlcm5hbCByZXF1ZXN0IGlzIHByb2Nlc3NlZC4gQW5kIGlmIFNJR1RFUk0gY29tZXMgdG8gdGhpcyBsb29wLCB0aGUgcmVxdWVzdAorICAgIGlzIG5vdCBtYXJrZWQgYXMgZmFpbGVkLgorICAgIAorICAgIFBhdGNoIG9yaWdpbmFsbHkgZnJvbSBNYXNhaGlybyBNYXRzdXlhLCBtbWF0c3V5YSBbYXRdIHJlZGhhdC5jb20KKworY29tbWl0IGJjNDQ5YzBmODVhZTlmYTA4YWM0ZmNlNjcyODJmNDhlYjdhYjE5ODQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDEwIDEzOjI1OjM4IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCB2YWx1ZSBvZiBVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQgdG8gY29udGFpbiBmdWxsIGNvbW1hbmQgbGluZS4KKyAgICAKKyAgICBNSUIgZGVzY3JpcHRpb24gb2YgVUNELVNOTVAtTUlCOjpleHRDb21tYW5kIHN1Z2dlc3RzIGl0IHNob3VsZCBjb250YWlsIGZ1bGwgY29tbWFuZCBsaW5lLgorICAgIEFsc28gaW4gTmV0LVNOTVAgNS4zLjIuMiwgd2hvbGUgY29tbWFuZCBsaW5lIHdhcyBzaG93bi4KKworY29tbWl0IGEzOTc4ZjJjYzIwNTZjOTdhNGMzZjMzOGY3MDlhMjAyOTFhZWQ0NzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTIgMDY6NDg6MzcgMjAxMiArMDEwMAorCisgICAgUHJvcGVyIGhhbmRsaW5nIG9mIGNvbmZpZ3VyZS1nZW5lcmF0ZWQgc25tcGNvbmYKKworY29tbWl0IDBmNDY5OTI5MjRkZTVhNGFiMDc2M2E4ZDQ0YTFjZWNlNGE5OTFkODAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgNSAyMToxNjozNyAyMDEyICswMTAwCisKKyAgICBQYXRjaCBmb3IgT3BlbkJTRCA1LjIgKFBhdGNoIDM1NTk0MjApCisKK2NvbW1pdCA5ZWQwYjJlMGFjMGM4ZTU0OWI4ZjlhNTg0NWU5ZDFmYWFjYWI3M2M1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDUgMjA6MDg6NDEgMjAxMiArMDEwMAorCisgICAgcmZjNjc3OQorCitjb21taXQgYWVmNzZjYTBjYmEyY2E1NmY2YWExZGI1YzViNThhNTQ5MzlmMzg5YgorQXV0aG9yOiBxcXNoa2EgPHFxc2hrYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMzEgMjA6MDA6MDQgMjAxMiArMDEwMAorCisgICAgQWdlbnRYLCBJUFg6IFJlc3RvcmUgZGVmYXVsdCBwb3J0IChidWcgIzM1ODIyODMpLgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgN2I5ZTAzNDQxYzNkYzNhMDc2NzBlZDAxZjVkMDQ3OTFhODJjNzUwYy4KKworY29tbWl0IGQ3ZDk4ZTVhYTllZThjYTc5MThiNzY3NTA0M2Q0NzljZjc3YjgzYzQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMSAxMDozMzowNiAyMDExICswMjAwCisKKyAgICAuZ2l0aWdub3JlOiBBZGQgbG9jYWwvc25tcGNvbmYKKworY29tbWl0IDcxZDgzYmE0MTE3YTJjZmI3ODc0ZTkxODMyZTQ1OTczZGE0MmVlOTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMSAxMDozNDozMCAyMDExICswMjAwCisKKyAgICBXaW4zMiwgTVNWQzogTWFrZSBidWlsZC5iYXQgd29yayBhZ2FpbiBub3cgdGhhdCBFTlZfU0VQQVJBVE9SIGlzIGNvbmZpZ3VyYWJsZQorCitjb21taXQgNWU1MDAwODI3MjhmNDUzNTk1ZjUwMjRkMjQxMjA4YzUxZjA4ZDIyYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAyOSAxODoxMjo0MSAyMDEyICswMTAwCisKKyAgICBSRUFETUUud2luMzI6IFJlbW92ZSByZWZlcmVuY2UgdG8gdGhlIG5vIGxvbmdlciBzdXBwb3J0ZWQgQ3lnd2luIGNvbXBpbGVyIG9wdGlvbiAtLW1uby1jeWd3aW4KKworY29tbWl0IDFhMzZkZWUxNjViOGJkN2RmM2VmNjk0YjdjM2YyNjIxYTU0NDlkYWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMjA6NTQ6MDAgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQsIHNubXB0cmFwZCBhbmQgYXBwczogTWFrZSBFTlZfU0VQQVJBVE9SX0NIQVIgY29uZmlndXJhYmxlCisKK2NvbW1pdCAwZTFjYTQ1YTZmOGQ4YWNmNDRhYTIxYTAwOWE5ZTUxMTkyZTg0NzgzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gT2N0IDI4IDEwOjExOjIyIDIwMTIgLTA3MDAKKworICAgIHNubXBuZXRzdGF0OiBGaXggTVNWQyBjb21waWxlciB3YXJuaW5ncworCitjb21taXQgNGE2ZDAzNzhhMzkxNjU3MWNlNzYwNGM0YTNkNTRhOGM5NmE4ZjgwNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE9jdCAyOCAwOTo1NDoxMiAyMDEyIC0wNzAwCisKKyAgICBXaW5kb3dzOiBWaXN1YWwgU3R1ZGlvIDYgYnVpbGQgZml4IGZvciBzdHJsY2F0KCkKKworY29tbWl0IDQxYjQ4YTYzNzA5NTJiZjRiMTJkMzRmYjA1ZWM1NWZiMDcwMmU4Y2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBPY3QgMjggMTQ6Mzc6NTIgMjAxMiArMDEwMAorCisgICAgV2luZG93czogTWFrZSBzbm1wbmV0c3RhdCBidWlsZCBhZ2FpbgorCitjb21taXQgMjQ1MWY4MjY0Nzk4ODFhNDkyNmZjZjg4ODU1ZjU4MjU4NWViODEzYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE9jdCAyOCAxMDoyMzoxNyAyMDEyICswMTAwCisKKyAgICB3aW4zMi9idWlsZC5wbDogUmVkdWNlIGNvZGUgcmVkdW5kYW5jeQorCitjb21taXQgNmU5OTM4ODY4M2E2Yzg1NDAzNWYwNDJhOWQwN2MwNzIzMTE3ZThhNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE9jdCAyOCAwOTo0MToyMCAyMDEyICswMTAwCisKKyAgICBXaW5kb3dzLCBiYXRjaCBidWlsZDogUmVtb3ZlIHRoZSBvYnNvbGV0ZSB2YXJpYWJsZSAiU1NMIgorCitjb21taXQgNzU0NGFkYzVhMWM3Njg4OWU0YTllZDUxZTk2ZDIyZDAyZmQ1Njk1ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAyMiAxNTozNTowNCAyMDEyICswMDAwCisKKyAgICBORVdTOiBXaW5kb3dzOiBQb3J0IGJhdGNoIGJ1aWxkIGluZnJhc3RydWN0dXJlIHRvIFZpc3VhbCBTdHVkaW8gMjAxMCBhbmQgbGF0ZXIKKyAgICAKKyAgICBGcm9tIFZpc3VhbCBTdHVkaW8gMjAxMCBvbiBpdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gc3BlY2lmeQorICAgIGluY2x1ZGUgb3IgbGlicmFyeSBkaXJlY3RvcmllcyBnbG9iYWxseSAtIHRoZXNlIGhhdmUgdG8gYmUgc3BlY2lmaWVkCisgICAgcGVyIHByb2plY3QuIEhlbmNlIHR3byBhZGRpdGlvbmFsIG1lbnUgZW50cmllcyBpbiBidWlsZC5iYXQgdGhhdAorICAgIGFsbG93IHRvIHNwZWNpZnkgdGhlc2UgZGlyZWN0b3JpZXMuCisKK2NvbW1pdCAxYjhhNzljMWMyZWIxM2Y4YjIwN2MxMmFhNmU3MWEyOWZmMDAzOTZmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDIyIDE5OjEwOjA3IDIwMTIgKzAwMDAKKworICAgIHdpbjMyL0NvbmZpZ3VyZTogRmFjdG9yIG91dCBjb21tb24gY29kZQorCitjb21taXQgMmFmN2E3M2IwY2E4Y2RiZDM2YTdmMTlkZDhlNTU3NjRjODQ5ODU1MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IE9jdCAyNyAxODoyNzo0MiAyMDEyICswMjAwCisKKyAgICBXaW5kb3dzOiBNYWtlIHNubXBuZXRzdGF0IGJ1aWxkIGFnYWluIChzZWUgYWxzbyBjb21taXQgYWE1OTEyYjg5ODZjZGU3NDA5MGJhMTViZTE5NjQyNjMwOWExZTFmMCkKKworY29tbWl0IGZhOThiNGNiZDZkYzE1YWE5MjYxNjZlZWYwNGQ1YmM4ZGZiYWFhZDYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBPY3QgMjYgMDc6NTY6MDYgMjAxMiArMDIwMAorCisgICAgQ29wZSB3aXRoIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBpbiAvcHJvYy9uZXQvc2N0cC9zbm1wIGluIFJINgorCitjb21taXQgNTQyOTBiZWRlMzM4MTY0Y2E2NWEzZWVkMjI0ZmE1MDQwZDdkZDg1NworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE9jdCAyNiAwNzo1MDoxMSAyMDEyICswMjAwCisKKyAgICBCZXR0ZXIgY2xlYW51cCBvZiAiZXhlYyIgY29uZmlnIHRvIGF2b2lkIGNyYXNoIGR1cmluZyByZWxvYWQgb2YgY29uZmlnCisKK2NvbW1pdCA4MmFhMjQ2NjcxMTk0ZjA0YmU1MmM2MjFlOWY4M2QwZmFiZDI0ZmE1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDI0IDE1OjMwOjExIDIwMTIgKzAyMDAKKworICAgIERvbid0IG1peCBjb2RlIGFuZCBkZWNsYXJhdGlvbnMhCisKK2NvbW1pdCA0ZTllYTg0NTU5MmZmZjhiMmFhZTVkMzE4ZGNhYmY0MWY5NTcwNjMyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDI0IDE1OjI1OjM1IDIwMTIgKzAyMDAKKworICAgIERvbid0IG1peCBjb2RlIGFuZCBkZWNsYXJhdGlvbnMhCisKK2NvbW1pdCAyMWQ1YzY3ODVlOTE2YjUxMDE0NDBlZDFhNGY3MWI0MWJhMmViODA5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDI0IDA5OjI3OjIzIDIwMTIgKzAyMDAKKworICAgIFJlbWVtYmVyIHRvIGZyZWUgdGhlIGRlc2NyaXB0aW9uIChpZiBzYXZlZCkgZHVyaW5nIHVubG9hZF9hbGxfbWlicworICAgIChwYXRjaCAzNTY1OTIyKQorCitjb21taXQgMmI5OTQwY2E1NmZjOGQzZDYxMGVmZDJlYmE5YWU0ZWJiNzQxZTY3MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAyNCAwNjo0MTo0NiAyMDEyICswMjAwCisKKyAgICBDbGVhbiB1cCBkaXNraW8gY29uZmlnIGJlZm9yZSByZWxvYWRpbmcuCisKK2NvbW1pdCBmNzc2OGZiNjQzYmUyODJkNjM1Mjg5YjU3Zjg4YTA3ZDA3MDQ4N2IwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgT2N0IDIzIDExOjQ4OjMxIDIwMTIgKzAyMDAKKworICAgIGFwcHMvc25tcG5ldHN0YXQvaW5ldHguYzogRWxpbWluYXRlIGRlYWQgY29kZSAoc2VlIGFsc28gY29tbWl0IGFhNTkxMmI4KQorCitjb21taXQgNjRjNTZmMjdjNWVkNDMyY2U4ZGU0NGUyNTc5Y2EwYzgwNmE1MTdlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAyMiAxNzo0NToxOSAyMDEyICswMDAwCisKKyAgICBidWlsZC5wbDogRWxpbWluYXRlIGEgdGVtcG9yYXJ5IHZhcmlhYmxlCisKK2NvbW1pdCAzMGE1ZDAxM2E4MGU5ZmQ1MGI4ZmQwZjcwZmZkOTZmZjI2YjZlNDU0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIyIDIwOjI5OjA5IDIwMTIgKzAyMDAKKworICAgIFVwZGF0ZSB0byBjdXJyZW50IElBTkEgdmVyc2lvbgorCitjb21taXQgZjQwZDQ0MDY4OTA2N2VmNmM0ZGE3ZGRhZGZiMzczYTQ1MjE5N2ZiZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxOTo0NzowNiAyMDEyICswMjAwCisKKyAgICB3aW4zMi9Db25maWd1cmU6IFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKKworY29tbWl0IGQzNGUwNTc3NzljYjMyZTk0MzI0MDg5ZGM0NjI1NjM4MzA5Y2ZlODkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTg6MzY6NTkgMjAxMiArMDIwMAorCisgICAgd2luMzIvYnVpbGQucGw6IFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKKworY29tbWl0IDMwZGFlZjE4NjAzOTdmMDQ1YzQwNTVjZDYxZDY2M2QyOTBkZDQ3ZjIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTg6MzI6MzggMjAxMiArMDIwMAorCisgICAgRml4IE1TWVMga2lsbC9wc2tpbGwgY29uZnVzaW9uCisKK2NvbW1pdCAxNGJlOTEzMmI5MTE1OGIwNTEyMDcxMGIxZmY2YTRiMmFjY2M1MzFkCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIyIDE4OjEwOjQ0IDIwMTIgKzAyMDAKKworICAgIEZpeCBuZXQwL25ldHggY29uZnVzaW9uCisKK2NvbW1pdCA4MTA3YTYzNTJkZjI0Nzg2NjA5OTRlZjEwM2Q1MjgwMWE2NjA3Y2M5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIyIDE3OjAzOjQ3IDIwMTIgKzAyMDAKKworICAgIEZpeCBzcGVsaW5nIGVycm9ycworCitjb21taXQgYWE1OTEyYjg5ODZjZGU3NDA5MGJhMTViZTE5NjQyNjMwOWExZTFmMAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxNjo1ODo1MCAyMDEyICswMjAwCisKKyAgICBJbXBsZW1lbnQgdGhlIG1vZGVybiBJUCB2ZXJzaW9uIGFnbm9zdGljIHRhYmxlIGluIHNubXBuZXRzdGF0LgorICAgIElmIHRoZSBtb2Rlcm4gdGFibGUgaXMgbm90IGF2YWlsYWJsZSAob3IgdGhlIC1DTCBvcHRpb24gaXMgdXNlZCkKKyAgICBmYWxsIGJhY2sgdG8gdGhlIGxlZ2FjeSB0YWJsZXMuCisKK2NvbW1pdCAxYTM0ZDIyNDllZjBkMjIxNWU1ODg2ZjliM2M5N2VjZmE3ZWI1MTkwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIyIDE2OjM5OjQxIDIwMTIgKzAyMDAKKworICAgIFBpY2sgdXAgaWZEZXNjciBmcm9tIGlmWFRhYmxlIHdoZW4gYXZhaWxhYmxlLCBhbmQgdXNlIHRoYXQgYXMgdGhlIG5hbWUuCisgICAgVmVyeSB1c2VmdWwgaWYgcGNpLXV0aWxzIHdlcmUgYXZhbGFibGUgd2hlbiBjb21waWxpbmcgdGhlIGFnZW50IGFzIHRoZQorICAgIG5hbWUgb3RoZXJ3aXNlIHdpbGwgYmUgdGhlIHZlcnkgb2JzY3VyZSBjaGlwIG5hbWUKKworY29tbWl0IGI0Y2FmNTQzY2ZmN2RiYThmOWFjY2EyYjllYTg4YzliNzlkYzM5ZWUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTY6MzI6MTIgMjAxMiArMDIwMAorCisgICAgUGljayB1cCBIQyBvY3RldHMgYW5kIE1jYXN0T2N0ZXRzIGZyb20gL3Byb2MvbmV0L25ldHN0YXQgb2YgY3VycmVudCBSSEVMNgorICAgIGFuZCBGZWRvcmEga2VybmVscy4KKworY29tbWl0IGM2NTVmY2U3ODQ1MzJhNTIzZjdkYjU4MmQwY2QwN2RlZTRhZDdhYzUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTY6MjU6NTkgMjAxMiArMDIwMAorCisgICAgVHJ5IHRvIGJldHRlciBjbGFzc2lmeSBMaW51eCBrZXJuZWwgdGhyZWFkcyBhcyBoclNXUnVuVHlwZT1PcworCitjb21taXQgZTFhOGM5NWNhNTVmNTY5NTg1Yzg4ZTE3NGE0M2Y2ZDQxMjljNDM5ZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE9jdCAyMCAwOTo1OTo0MSAyMDEyICswMjAwCisKKyAgICBDb3JyZWN0IHRoZSBuZXN0aW5nIG9yZGVyIG9mIHRoZSBkb3h5Z2VuIGVuZCBzZWN0aW9uIGNvbW1lbnQgYW5kIHRoZSBmZWF0dXJlIHJlbW92YWwgZW5kaWYuCisKK2NvbW1pdCBmNjdhZGYyYTM3YThjMTgyZWFjYmNmZTUyZDViNzg5MTkxYTY1OTI5CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDkgMTY6MzI6NDcgMjAxMiAtMDcwMAorCisgICAgcmVtb3ZlIHJlbGVhc2UgcmVxdWlyZW1lbnRzCisKK2NvbW1pdCAzZTU0MzMwMzkzY2NjODY1MjVlZDZmYjlhMGZjMTljMDY4MzA2NjEwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVAcmVkaGF0LmNvbT4KK0RhdGU6ICAgVHVlIE9jdCA5IDA2OjM0OjEwIDIwMTIgLTA3MDAKKworICAgIGZpeCBkb3VibGUtbmVnYXRpdmUgdHlwbworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMi5yYzMgLT4gVjUuNy4yCisKK2NvbW1pdCA1MDU0YjU3MDYxOWRmMGE4MTk1OGEwNDViZWYxMzViMjAyMDVmMDM2CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDkgMTU6MjY6MDUgMjAxMiAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4yCisKK2NvbW1pdCA1NmE3OTdmZjNlNzFkYzg4NjQ2N2QxN2NlMDI1YjAyMzdjOGMxY2MzCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDkgMTQ6NDI6MjMgMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMgorCitjb21taXQgMDgxM2Y4YjYyZGYwZTg0NDBmZmVmMTYxY2UxMzRmZjk0NTVlN2RlOQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5lQHJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBPY3QgOSAwNjozMzo1OCAyMDEyIC0wNzAwCisKKyAgICBmaXggZG91YmxlLW5lZ2F0aXZlIHR5cG8KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGE2YTg4OTI3NTM0Njg0ZTI3NWNjZjBlNzgwNTEzMDk0YTczZmM2YmIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgOSAwNjozMToyMSAyMDEyIC0wNzAwCisKKyAgICBBSVggbmV0LXNubXA1LjcuMSBoclNXUnVuUGF0aCBub3QgY29tcGxldGUKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDU4YTRkODgzOTAyMWY3NzJjMzVhNzMyYmQwOTZkMWUyOTBkYzBhNjIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgOSAwNjozMDo1NyAyMDEyIC0wNzAwCisKKyAgICBBSVggbmV0LXNubXA1LjcuMSBoclNXUnVuUGF0aCBub3QgY29tcGxldGUKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDYyNmVhYmVjNGVhOThlNTM1OTA4OTc5MDg1ODQ3OWE1OWEyNmNkY2IKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBTZXAgMzAgMjM6MzA6MjggMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTW92ZSB0aGUgY2hlY2sgdGhhdCB0aGUgcGR1IHZhcmlhYmxlIGlzIG5vbi1OVUxMIHRvIGJlZm9yZSB0aGUgZmlyc3QgZGVyZWZlcmVuY2Ugb2YgaXQuCisKK2NvbW1pdCA2OGFhYjU3MmMyZDI3NDZiNTFhOTVlYmExMTA1NjhjMzhiMDUwODA4CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDI1IDE5OjA3OjQyIDIwMTIgLTA3MDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS03LXBhdGNoZXMKKworY29tbWl0IDBhNDE1MzNiMWI0OWYwMGQ3MzU3YTNkMmJlYTVkZmE3NWU4ZWRjZDcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBTZXAgMjQgMDA6MDc6MTkgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQWRkIHRlc3QgY2FzZXMgZm9yIHNubXBfc2VydmljZQorCitjb21taXQgYTYxYjQ4ZDc4ZTExZDk0NWRlZjQ2ZmRlMGY3ZDU1Zjc5MTljMzM1YQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIFNlcCAyMyAwNzo1MzowOSAyMDEyICswMjAwCisKKyAgICBQcmVmZXIgY29weV9ud29yZF9jb25zdCBvdmVyIGNvcHlfbndvcmQoTkVUU05NUF9SRU1PVkVfQ09OU1QKKworY29tbWl0IDliZmZjNTQxM2QwZDg4MjM5OGIwNmY0MTA5YWM4MDdhZjJmNzgzNDcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBTZXAgMjMgMDA6Mjk6NDQgMjAxMiArMDIwMAorCisgICAgU2ltcGxpZnkgbG9nZ2luZyB0aHJvdWdoIHRoZSB1c2Ugb2YgbmV0c25tcF9jb25maWdfZXJyb3IKKworY29tbWl0IGQwOWQ1M2EwZmE2ZGY2M2IyMWU2ZjEyNzMxYmVlNTFhMzYyNGU4NWUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBTZXAgMjIgMjE6MzA6MDggMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IGNyYXNoIG9uIGluY29tcGxldGUgY29uZmlndXJhdGlvbiB0b2tlbnMuCisKK2NvbW1pdCAwMmRjZTZmNDNiOTlmODU5NDE2Mjc5MjhjMWE1MDIyZDY3MjVkMTI0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgU2VwIDIyIDIxOjI4OjUxIDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCB0cnVuY2F0ZSBzaW5nbGUgZGVmYXVsdCB0cmFuc3BvcnQgZG9tYWlucworCitjb21taXQgMjExZTNjNzA2MjU5NjU0NDFiMmEwMjlhNjExMzgwMjk3NDY3M2M0MworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IFNlcCAyMiAxMToyMzoxOSAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgY3Jhc2ggZnJvbSBlbXB0eSB2YWx1ZXMgaW4gLS10b2tlbj12YWx1ZSBhcmd1bWVudHMKKworY29tbWl0IGFmM2QyZDk3M2IxZThlMjlkMjA1ZDhhMDdhY2Q4MmIxZjg1NDgxOWUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBTZXAgMjIgMTA6MzA6MTYgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIHRoZSBzeW1ib2wgTkVUU05NUF9QUklvIHRvIGhlbHAgaW4gcHJpbnRpbmcgb2lkIHZhbHVlcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjIucmMyIC0+IFY1LjcuMi5yYzMKKworY29tbWl0IDhiNDUyOTIzMDFmMDM0OWZmYjY5ZDRmZDg1OTVmMmQ1YjE5OWU2YjYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMjUgMTk6MzU6MzkgMjAxMiAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4yLnJjMworCitjb21taXQgMGNiZmZiNTY1ZTYyYWVmOTM3ZmM3MDBkOGQzYzNiOGM2NWRkZmE2NQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAyNSAxOTowNzo0MCAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yLnJjMworCitjb21taXQgNDA1MDU5NzFhZGQ2YTNiNmY1OTU0Y2ZiZGU1MzI3NDliZmJjYjE2YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAxNyAxMzozNDozNyAyMDEyIC0wNzAwCisKKyAgICBmaXggZm9yIGhpZGRlbiBDTVNHX3h4eCBtYWNyb3Mgb24gQUlYCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA2MGYwYTllOTgzYWI4MjdjODI0ZTM5N2Q2MmFlZmY0OGE2MGYwMTMzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDE3IDEzOjMxOjEyIDIwMTIgLTA3MDAKKworICAgIEZpeCBwc3RhdCBtZW1vcnkgbGVhayBvbiBocHV4IDExaQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgMTNiZDRkNTZiYWE5ODg2MDE4YTAwNDc3ZTMyMTRlYmUwMjcwNWZmZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAxNyAxMzozMTowNCAyMDEyIC0wNzAwCisKKyAgICBGaXggcHN0YXQgbWVtb3J5IGxlYWsgb24gaHB1eCAxMWkKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDA4MDU0MjA4MTNkZTE1NmM3ZmM1MTQyNTM0ZmI0MjBhMGZjYzM1NzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMTcgMTM6Mjg6NTkgMjAxMiAtMDcwMAorCisgICAgZml4ZXMgQVQgY29kZSBvbiBocHV4IDExaQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgYmRiM2IxNDYzODBkYjEzMTZjYWJkNThiNzA0NDM2ZTdlZWNkZDlmNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAxNyAxMzoyODo1MCAyMDEyIC0wNzAwCisKKyAgICBmaXhlcyBBVCBjb2RlIG9uIGhwdXggMTFpCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBlOTM2Y2Y4MTBhNDczNzkxNTZkOTEzYTcxNGUzODE2MTgxYTBkM2RiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDE3IDEzOjI1OjIwIDIwMTIgLTA3MDAKKworICAgIGZpeGVzIGRpc0F2YWlsIG9uIEZyZWVCU0QgdWZzCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA2MDhhYjU3ODg3ZTU1NjZlNjM1MDlhM2Y3ZTVkMGEzZTI4OTJmNGE3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDE3IDEzOjI1OjAyIDIwMTIgLTA3MDAKKworICAgIGZpeGVzIGRpc0F2YWlsIG9uIEZyZWVCU0QgdWZzCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4yLnJjMSAtPiBWNS43LjIucmMyCisKK2NvbW1pdCAwN2Y5MTQ1NjRlMDk3MjI0ZDY3NzUxNWMyZjVmZDFmM2MwYzllYjQyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgU2VwIDEgMDk6NTQ6NDIgMjAxMiAtMDcwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTctcGF0Y2hlcworCitjb21taXQgYWVlMjE3YzA3ZWE5ZjM0YTMyMjY4ZTk2NmM3ZWNlZjAzNmVjNGE5NgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IFNlcCAxIDA5OjU0OjM4IDIwMTIgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjIucmMyCisKK2NvbW1pdCAxMTliMGQzY2YxMmM5N2NhM2M3NGQ2ZDFlNzIzMTk2NzBhODM3OGFhCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgU2VwIDEgMDk6NTE6MDggMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzU2MDQ3MzogZnJvbSBmZW5uZXI6IEhhbmRsZSBUaW1lVGlja3Mgd2hlbiBwcmV0dHktcHJpbnRpbmcgT0lECisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBjOTRjNjJlYTBlZGNlYmJmYmI3M2ZhYjZlY2RkYzY3OWY3Njk0ZGFiCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgU2VwIDEgMDk6NTE6MDggMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzU2MDQ3MzogZnJvbSBmZW5uZXI6IEhhbmRsZSBUaW1lVGlja3Mgd2hlbiBwcmV0dHktcHJpbnRpbmcgT0lECisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA2ZDdmOWViMGRlY2RiOTY4MjgzNmZmZDAzZjE5NzQyMTk3YWQ4N2RiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDI5IDIxOjE0OjQ2IDIwMTIgKzAyMDAKKworICAgIEZpeCBwb3NzaWJsZSBtZW1vcnkgb3ZlcnJ1biBpbiBmc3lzX2dldGZzc3RhdHMuYyAocGF0Y2ggMzU1OTQxNykKKworY29tbWl0IGYyMzVlZThiMzJlZWQxZGUzZjFlNDIwMmVmNDViNjM3N2ZiY2UxNjMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgMjkgMjE6MDc6MTQgMjAxMiArMDIwMAorCisgICAgRml4IGZvciBoclN0b3JhZ2VUYWJsZSBvbiBBSVggKGJ1ZyAzNTU3MTU5KQorCitjb21taXQgNzhjYzlkNWNjZDg2YjE3MDYyMmFhYzU0M2MzNDVjMDIwNzU1Yzc4YQorQXV0aG9yOiBzdGhlbiA8c3RoZW4yMzkzNEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjggMTc6MTg6MDkgMjAxMiAtMDcwMAorCisgICAgYWRkIG1pc3NpbmcgcHJvY2VzcyBzdGF0dXMgdmFsdWVzIHVuZGVyIG5ldC9vcGVuLWJzZAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNGVmOWRjZDgwYjBiZGExZTE4YjdlMzQ5YTA4YmMwZjIyYTdlNzU1ZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyOCAxNzoxNjozNyAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBPcGVuQlNEOiBQQVRDSCAzNTU5NDE0OiBmcm9tIG5iYTogc3VwcG9ydCBPcGVuQlNEIGZvciBocl9zd2luc3QKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDBiNTY5ZmNjZWE5NDE0YzUwY2ZkNmIwZTgzZTE4MzFiYTEyOTFjZTIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjggMTc6MTQ6NDUgMjAxMiAtMDcwMAorCisgICAgYWRkIG1pc3NpbmcgcHJvY2VzcyBzdGF0dXMgdmFsdWVzIHVuZGVyIG5ldC9vcGVuLWJzZAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgMWQzYzdiZTdmYTdhMzhmZDNmYzM5NzIwYmI1Y2I3MGY4YmQ3MTE2MAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyOCAxNzoxNDoyMiAyMDEyIC0wNzAwCisKKyAgICBhZGQgbWlzc2luZyBwcm9jZXNzIHN0YXR1cyB2YWx1ZXMgdW5kZXIgbmV0L29wZW4tYnNkCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBmZjQzODQzM2FjYTA5NmJiYmVhMjlkZDMwZGZkNWM1NTIzNzYxYTcyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDI4IDE2OjUwOjQ2IDIwMTIgLTA3MDAKKworICAgIEZpeCByZWFsIG1lbW9yeSByZXBvcnRpbmcgb24gQlNEIHN5c3RlbXMKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGM0MjlhNGYzOTg0ZGFlNzkxZTMwN2RmNzAyMjUxZjk2ZWYwNDdkODgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjggMTY6NDk6MTAgMjAxMiAtMDcwMAorCisgICAgRml4IHJlYWwgbWVtb3J5IHJlcG9ydGluZyBvbiBCU0Qgc3lzdGVtcworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNDFkOTgwYzAxNTU2NGRiN2YyMmY3NjMxOTBmNjFhYzBkNTZiYTNiMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEF1ZyAyNCAxNDozNTo1MyAyMDEyICswMDAwCisKKyAgICBXaW5kb3dzOiBVbmJyZWFrIERMTCBidWlsZAorCitjb21taXQgMjc5MzkyM2JmZTJiMDI2ZmNhZWFmNTM4YWU1MDNmMTA1Y2IzMTViYworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAzIDIyOjI2OjIwIDIwMTEgKzAwMDAKKworICAgIGFkZGVkIG1pc3NpbmcgVExTVENQIG1lbnRpb24gaW4gdGhlIGhlbHAgb3V0cHV0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4yLnByZTMgLT4gVjUuNy4yLnJjMQorCitjb21taXQgOWVjNWM1OTk3ODAyNTFkY2QzMTU1ZjlhYzk4MDZlY2U3ZWQ2YmEyMgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEF1ZyAxMSAxMjowMDozNyAyMDEyIC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjIucmMxCisKK2NvbW1pdCAzMzU4YjY1YjExZTJjMGVlNzEyZjYwOWYwMjA3MTI2MGY3NWY5YmIzCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgQXVnIDExIDExOjM5OjM4IDIwMTIgLTA3MDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS03LXBhdGNoZXMKKworY29tbWl0IDQ4NDlhNDMwZGFhZmI5MWM3YTYxYmZiYmMxN2Y5Mjk5ZTU4ZmNmNjQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBBdWcgMTEgMTE6Mzk6MzUgMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMi5yYzEKKworY29tbWl0IDFiYzI2ODQyOGU4Mjk4NTJjOWVmMGE3OTU1MmNhNDA0NWFkZDI4YTMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgOSAyMjo0Mjo1MiAyMDEyICswMjAwCisKKyAgICBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBpbml0aWFsaXplZCBrdm0gc3RydWN0dXJlIHdoZW4gcXVlcnlpbmcgcHJvYyB0YWJsZSBvbiBCU0QuCisKK2NvbW1pdCA3ZTY3YzUwMzhiNmFhYmZkYTE5MzllYTgxZDk0MGIyNDAwMGNmYjUxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyA5IDE0OjI3OjA4IDIwMTIgKzAyMDAKKworICAgIFJlbW92ZWQgZXJyb3IgbWVzc2FnZSB3aGVuIGZpbGUgY2Fubm90IGJlIG9wZW5lZC4KKyAgICAKKyAgICBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IGNhbGxlciwgbm90IGluIHRoZSBmdW5jdGlvbi4gVGhlcmUgaXMgb25seSBvbmUgY2FsbGVyIG5vdywgdWRwX2VuZHBvaW50X2xpbnV4LmMuCisKK2NvbW1pdCA1OWIwZGUwYjhmYTczZWI0MDMwMDZjZWU3NWZmODY1MWUxNTg1ZTI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyA5IDE0OjIzOjE0IDIwMTIgKzAyMDAKKworICAgIEZpeCBjb21waWxhdGlvbiBlcnJvcnMgaW50cm9kdWNlZCBieSBjb21taXQgZjk1ZGY2MzQxYjFkMDYyNDk0NDNlNTE2YjU5YTQzY2RmYTNkNDc3Ny4KKyAgICAKKyAgICBUaGlzIGlzIGVtYmFyYXNzaW5nLCBJIGNvbXBpbGVkIHRoZSBzb3VyY2VzIHdpdGhvdXQgLS1lbmFibGUtaXB2Ni4gU29ycnkgZm9yIGluY29udmVuaWVuY2UuCisKK2NvbW1pdCA1ZDdlZGFkZDQ3NjE2ODBiNjZkMWRmM2JmZGU3Y2E1YjE2Y2E1YTE2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyA5IDEyOjQ2OjM1IDIwMTIgKzAyMDAKKworICAgIEZpeCBjb21waWxhdGlvbiBlcnJvciBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBmOTVkZjYzNDFiMWQwNjI0OTQ0M2U1MTZiNTlhNDNjZGZhM2Q0Nzc3LgorCitjb21taXQgNDNjOTdiYmFhZjIxMWY0YzdmN2M3MDRjZmNiOTAxZGZiZjgzNDg3NAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgOSAxMjozMDowOSAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTG93ZXJlZCBzZXZlcml0eSBvZiAnRXJyb3IgZXhwYW5kaW5nIFhYWCB0byA2NGJpdHMnIG1lc3NhZ2VzLgorCitjb21taXQgOGU1Y2YyYTcyYTQ2Y2Q0ODNkMjJlNjI5MGE2YzhjNGMyNmFmNmFkMgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgOSAxMjoyNTo0OCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiByZW1vdmVkIGNvdW50ZXItNjQgZXJyb3IgbWVzc2FnZXMuCisgICAgCisgICAgVGhlc2UgbWVzc2FnZXMgZG8gbm90IHNheSBlbnl0aGluZyB1c2VmdWwsIGNhbGxlciBzaG91bGQgY2hlY2sgdGhlaXIgcmV0dXJuIHZhbHVlIGFuZCByZXBvcnQgaXQuCisKK2NvbW1pdCBmOTVkZjYzNDFiMWQwNjI0OTQ0M2U1MTZiNTlhNDNjZGZhM2Q0Nzc3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyA5IDEyOjAxOjI1IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiByZW1vdmVkIGVycm9yIGxvZyBtZXNzYWdlcyB3aGVuIElQdjYgaXMgZGlzYWJsZWQuCisKK2NvbW1pdCAxOGRhY2U4ZTRhMzZiMDgzZDZlZjcxNzczNWM2M2U3ZjQwMjI0ZGI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyA5IDEwOjQxOjQ1IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IGFkZGVkIENWRlMgKENlbnRyYVZpc2lvbiBGaWxlIFN5c3RlbSkgdG8gaHJTdG9yYWdlVGFibGUgYW5kIGhyRlNUYWJsZS4KKworY29tbWl0IDkwZjQzMWI0NWQyMTUwNjQyN2JjMGJkMWQ0ZWU2OWUwYjhlYTMwYmMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgOCAyMzoxMDo1MCAyMDEyICswMjAwCisKKyAgICBVcGRhdGUgdG8gY3VycmVudCBNSUIgdmVyc2lvbnMKKworY29tbWl0IDllN2EwYjllNTgwZDNiMWVhNjE5OGE3NDE0YzgxNmMyM2IxMjNiMTAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgOCAyMjoyNzoxNiAyMDEyICswMjAwCisKKyAgICBVc2UgYSB3cmtpbmcgYXdrIGZvciBTb2xhcmlzCisKK2NvbW1pdCAwZTM5MjJhZTIxZTRiN2VjNTM4ODY3YWZkMjJjZTc0ZDc0MWUwZjFjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDggMjI6MTc6MzQgMjAxMiArMDIwMAorCisgICAgZml4IHByb3RvdHlwZSBmb3Iga2xvb2t1cAorCitjb21taXQgYTIyMTA5NzExYTZkMWVjMTRiNmEzZjFjYWMyMjFkNzAyNjNmMTA0YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyA4IDIyOjA4OjEzIDIwMTIgKzAyMDAKKworICAgIGZpeCBwcm90b3R5cGVzIGZvciBrbG9va3VwCisKK2NvbW1pdCBhYzA2Mjk3MmM1ODUxNzRmOTVkN2JhODdhYTVlYzU0YzQyZmRlYzU1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDggMjI6MDA6MjYgMjAxMiArMDIwMAorCisgICAgZml4IHByb3RvdHlwZXMgZm9yIGtsb29rdXAKKworY29tbWl0IDdjZGQ4ZWJlZjk1MDdmZTc2NjEwN2NhOWZlZTA1NGM0NGNjMGJhYzUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBBdWcgNSAwODoxMzo1OSAyMDEyICswMDAwCisKKyAgICBNYWtlIHNubXBfYWxhcm1fcmVzZXQoKSB1c2UgdGhlIG1vbm90b25pYyBjbG9jay4gRml4ZXMgYSBidWcgaW50cm9kdWNlZCBpbiBjb21taXQgMzdiYTdlMi4KKworY29tbWl0IDAyM2Y2MWVhNzgzYmZjYzUzZmU5MGFhNjY1NDVjNWFlYTJkYjgwNjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgOCAxNjoyNjo1NCAyMDEyICswMDAwCisKKyAgICBGaXggYnVpbGQgYnJlYWthZ2UgY2F1c2VkIGJ5IGNvbW1pdCAwMjg2MTRlY2YyZDY3Mzk4Njk5ZGMzYmQ3ODQwMjlmMzM2MGYyZTEzCisKK2NvbW1pdCBjZDgyMDk0OWExNDkxYWYxMDNhODU1NWY2YmRhZTA0ODUxZjNkMjg1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDggMTY6MTY6NDMgMjAxMiArMDAwMAorCisgICAgVW5kbyBidWlsZCBicmVha2FnZSBjYXVzZWQgYnkgY29tbWl0IDM3YmE3ZTIwYTUyMWZiZjA0NThhMGM3N2VlYTJlNWUzNmJkN2VjMGEKKworY29tbWl0IGYxNDMwMDhjY2M1N2VhMTBjYmI4OGFiMzU1NDgyMmIxN2I2MjcwYWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBBdWcgNSAwODo0NTo0MiAyMDEyICswMDAwCisKKyAgICBNYWtlIGdldF9leGVjX291dHB1dCgpIHdvcmsgb24gYmlnIGVuZGlhbiBzeXN0ZW1zLgorICAgIAorICAgIFVuZG8gQVBJIGJyZWFrYWdlIGludHJvZHVjZWQgYnkgY29tbWl0IDczNzRiODRmZTRjMmVmODQ5N2ZkZTNkYWU4MGE2OWFhODllYmExOWMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4yLnByZTIgLT4gVjUuNy4yLnByZTMKKworY29tbWl0IDg0MzIyZTBkYzJhODk3NDY0NjU0MmQ5ODgxYmMwMWI0M2RjM2ExMmQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTY6MjQ6MDcgMjAxMiAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4yLnByZTMKKworY29tbWl0IDhmZWM3YTgxZDYxMzNhNWYwNWVkMzRhNWFmOTgwNmFmNWQxMjgyMjMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTU6NTc6NTYgMjAxMiAtMDcwMAorCisgICAgZml4IHRoZSBhc3NlcnQgY2hlY2sgdG8gYWxsb3cgZm9yIHNvbWUga25vd24gYXNzZXJ0cworCitjb21taXQgZGZkZTZkMmRkZDUxOWM4YzJhZTE3ODg3NzRmZGY5MGQ4YmVhMDJiMQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAzMCAxMDowODoyNCAyMDEyIC0wNzAwCisKKyAgICBpbmNsdWRlIGVycm5vLmggYW5kIGRvbid0IHVzZSBjb250aW51ZSBvdXRzaWRlIGEgbG9vcAorCitjb21taXQgN2NmZmUwMjIyY2Q5OGEyMWUzMGY0NGMzZGY5ZjBkOTBiZjA5NmZlOQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxNDoxMzo1MCAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yLnByZTMKKworY29tbWl0IDIyYWY3ZmQ0Njc3NmE4ZGIyMzYyZTg4YWNiMWI2OWIxNjVjMDM0YjYKK0F1dGhvcjogYmxlbnR6IDxibGVudHpAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDEzOjUyOjQwIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGFpeDogUEFUQ0ggMzQwMzQzMzogZnJvbSBibGVudHo6IElzc3VlcyB3aXRoIGhyU1dSdW5OYW1lIGFuZCBQYXJhbWV0ZXJzIG9uIEFJWAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNTE2YjlmODI3NWI4ZGIwM2NkYzQxMDc4ZTY1YzIxNzAzMDlhM2Y4YgorQXV0aG9yOiBKdWxpZW4gUGlub24gPGpwaW5vbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTM6MjU6MzEgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogcGVybDogUEFUQ0ggMzQxMjkzOTogZnJvbSBqcGlub246IFJlcGFpciB0a21pYgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgOGYyMzBmNDAxYzY0ZDgyMjg4M2FjNDQ0NjI0YTJjMmZkNzEyOGQ4ZQorQXV0aG9yOiBIYXJzaGEgU2hpdmFubmEgPG5hYW51aHNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDEzOjIyOjExIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDM1NTI3NDU6IGZyb20gbmFhbnVoczogZml4IHRvIHN1cHBvcnQgMzIgY2hhcnMgZm9yIFZBQ00gbmFtZXMgYXMgcGVyIFJGQy0yNTc1CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCAzNDAwOGQzMmFlZjQzZDhiYmUxMDAwZmI5YmY5NDY0MmMwNTE0ZjZmCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDEzOjIwOjMxIDIwMTIgLTA3MDAKKworICAgIGZpeCB0aGUgYWdlbnR4IHBpbmcgcGF0Y2ggc28gaXQgd29ya3Mgd2l0aCB0aGUgbmV3ZXIgYWxhcm0gc3RydWN0dXJlIG5hbWVzCisKK2NvbW1pdCA5NjI2NzYzOTRkM2ZlNTU3ZWFkOTEwNTdiNGQ3ODAyMjZkYzBkNmIzCitBdXRob3I6IE1pam8gU2FmcmFkaW4gPG1pam9zQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxMjo0ODowMSAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMzQxNDA1MTogZnJvbSBtaWpvczogc25tcC1icmlkZ2UtbWliOiBmaXggZm9yIGRvdDFkQmFzZVRhYmxlCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCAzN2JhN2UyMGE1MjFmYmYwNDU4YTBjNzdlZWEyZTVlMzZiZDdlYzBhCitBdXRob3I6IFZpbmNlbnQgQmVybmF0IDx2YmVybmF0QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxMjoyNzoyOCAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMzQ4MTY4NjogZnJvbSB2YmVybmF0OiBEb250IHBpbmcgbWFzdGVyIGFnZW50IHVubGVzcyB0aGVyZSBpcyBubyBpbmNvbWluZyB0cmFmZmljCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCAyYmU1ZmVhZGIwNTQwODQ2ZTBlM2FkYTI3ZWZiOTc4OTRhNGNiZDUyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDA3OjI5OjE3IDIwMTIgLTA3MDAKKworICAgIGFkZGVkIGEgZGFyd2luIDEyIHZlcnNpb24KKworY29tbWl0IDFmOWJjZDIxZTdjMmQ1ZWZmYjYyYWEwMWI3Yjg3ZTQzZGM4NjIxNGMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDE0OjQzOjI3IDIwMTIgKzAyMDAKKworICAgIEZpeGVkIFNDVFAtTUlCOjpzY3RwQXNzb2NQcmltUHJvY2VzcywgdGhlIGxpc3Qgb2YgcHJvY2Vzc2VzIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisKK2NvbW1pdCA0OGJlNWU4OWFhMDRhZGIwZGY3ZTA5NGIyZmU0NjMwMTU0MjlmYzk4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxMzo0ODozMSAyMDEyICswMjAwCisKKyAgICBBZGRlZCBsb2cgbWVzc2FnZSB3aGVuIGlwVGFibGUgbWlzc2VzIHNvbWUgaW50ZXJmYWNlcy4KKworY29tbWl0IDc1MjNmMGYwMWJhNGRiNjVhYzE2NDdhMjMyMjhjZjA2YzBiNzJhMDMKK0F1dGhvcjogTWFyaXVzeiBDZWllciA8bWNlaWVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAzMCAxMDoxOTozMyAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzNTM2NjkyOiBmcm9tIG1jZWllcjogY3JlYXRlIGEgdW5pdCB0ZXN0IGZvciByZWFkX2NvbmZpZyBBUElzCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBjMDdiOGQ5YjM3NzBiNjE1YzhlMTYyZGJkZjc2NDM4MDVmMzcyZDc1CitBdXRob3I6IE1hcml1c3ogQ2VpZXIgPG1jZWllckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMzAgMTA6MTg6NDIgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzUzNjY5MjogZnJvbSBtY2VpZXI6IEZpeCBmb3IgY2FsbGJhY2sgY2FsbGluZyB3aGVuIHVucmVnaXN0ZXJpbmcgY29uZmlnIGhhbmRsZXIKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDVjMjQyNGYwN2Q4NWMwYzRmNzlkNmM1ZmFmNjRkN2YzZWU4NjE3MjYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMzAgMTA6MDg6NDIgMjAxMiAtMDcwMAorCisgICAgZG9uJ3QgZHVwbGljYXRlIHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMgZGVmCisKK2NvbW1pdCA3Mzc0Yjg0ZmU0YzJlZjg0OTdmZGUzZGFlODBhNjlhYTg5ZWJhMTljCitBdXRob3I6IEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMzAgMDk6NDE6MTcgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM4Mzk3MDogZnJvbSB5YWJlcmF1bmV5YTogRml4IGNvbXBpbGUgZXJyb3Igb24gRnJlZUJTRCA5LngvUE9TSVhpZnkgYXV0b19ubGlzdCwgZXRjCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA2NzBkOTZlNzg2NTkwZmRkMzBhMTZhMzMwMGMwZWQ1YmQ2ZTUzMjE0CitBdXRob3I6IE1hcmsgUnVzayA8dXNlcl9pZD0zNDk4OTVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gSnVsIDI5IDIzOjM5OjIyIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAzNDI0OTMzOiBmcm9tIHVzZXJfaWQ9MzQ5ODk1OiBVc2UgTkVUU05NUF9EU19BR0VOVF9BR0VOVFhfVElNRU9VVCBmb3IgdGhlIGRlZmF1bHQgdGltZW91dAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgZjFlYWVjMTVlZjYwM2I4Y2U1NDI5MzJmZmRiZDg3ODhjM2QxYWNjNQorQXV0aG9yOiBEYW5pZWwgSG9iaSA8aG9iaWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gSnVsIDI5IDIzOjI4OjAxIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAzNTMwNzk0OiBmcm9tIGhvYmlkOiBwYXNzL3Bhc3NfcGVyc2lzdDogdW5yZWdpc3RlciBNSUIgd2l0aCBjb3JyZWN0IHByaW9yaXR5CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBkNzgzYWQ5OTBlOTE0YzBlZTFjOThkMGE5M2E0MjllYjJiMmY0OTk3CitBdXRob3I6IERvdWcgTWFubGV5IDx0ZWtrYW1hbmVuZGxlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gSnVsIDI5IDIzOjI1OjQwIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDM1MjY1OTk6IGZyb20gdGVra2FtYW5lbmRsZXNzOiBBIGJ1Z2d5IFNOTVB2MyBhZ2VudCBjYW4gY2F1c2UgYSBuZXQtc25tcCBjbGllbnQgdG8gaGFuZworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgZTk4NTE1MjBjMThkN2VkMTcyNDA0YTM3ZGMwZGM3YTEzNmJmYWVkZAorQXV0aG9yOiBEYW5pZWwgRXZlcnMgPGRhbmllbC1ldmVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBKdWwgMjkgMjM6MTQ6MTkgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzU0ODI1NzogZnJvbSBkYW5pZWwtZXZlcnM6IGZpeCBmb3IgcmVjdXJzaXZlIHB0aHJlYWQgbXV0ZXhlcworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgZTdhMzc2NzhjMmI3MzU5YWZkNDRhMzA3ZTgyNGMxZjdkN2EwYzg3ZAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEp1bCAyOSAyMTozNTozNSAyMDEyIC0wNzAwCisKKyAgICBORVdTOiBvc3g6IHBhdGNoOiAzNTE0MDQ5IGZyb20gdHdvYml0cy1naXRodWI6IGZpeCBjb21waWxhdGlvbiBvbiBkYXJ3aW4xMQorCitjb21taXQgMTIyMTQyNmFiYWQxNWI5YjJmY2VlOGYxZTMyYWI1MmVmMjY5Mjk1MgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdWwgMjcgMTQ6MTg6MjQgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogUEFUQ0hFUzogMzUyOTU0MTogRG9uJ3QgcmVmZXIgdG8gaW50ZXJuYWwgJ215JyB2YXJpYWJsZXMgZnJvbSBleHRlcm5hbCBzY3JpcHRzCisgICAgCisgICAgRml4IHByb3ZpZGVkIGJ5IExlenogR2lsZXMKKworY29tbWl0IDljMDZjMjIwMmRjMDU2NzAzYzgwOTU5YTBlY2E5YTcxNjg0YzI4ZGUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVsIDI3IDEzOjI5OjMwIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IExpbnV4OiBQQVRDSEVTOiAzNTM2NDIwOiBFbnN1cmUgc25kL3JjdiBtZW1vcnkgYnVmZmVycyBhcmUgc3VpdGFibHkgYWxpZ25lZAorICAgIAorICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFR5bGVyIE9sbXN0ZWFkCisKK2NvbW1pdCA4OWI4MmM1NWY5ZWZkMmU4YWI4YzZkNjVmYTU2N2M1YjFmYWMxODQzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1bCAyNyAxMzoxNDowNyAyMDEyICswMTAwCisKKyAgICAiSWRsZSIgcHJvY2Vzc2VzIChpLmUuIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQpIGFyZSBwcm9iYWJseQorICAgIGJlc3QgcmVnYXJkZWQgYXMgIndhaXRpbmcgZm9yIGFuIGV2ZW50IiB0byBiZWNvbWUgcnVubmFibGUgLSBpLmUuICdub3RSdW5uYWJsZSgzKScKKyAgICBUaGF0IGV2ZW50IGJlaW5nIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBjcmVhdGlvbiBwcm9jZXNzLgorICAgICAgIEl0J3MgYXJndWFibGUgd2hldGhlciBvciBub3QgdGhleSBhcmUgc3RyaWN0bHkgImxvYWRlZCIsIGJ1dAorICAgIHRoaXMgZmVlbHMgbGVzcyBtaXNsZWFkaW5nIHRoYW4gcmVwb3J0aW5nIHRoZW0gYXMgJ2ludmFsaWQoNCknCisKK2NvbW1pdCA2ZTc4MGE1YmYwZDY0YmY0N2RmYmY0NzlhZTdmNTZjMTBmZjgxNjZlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1bCAyNyAxMjo1Nzo1NCAyMDEyICswMTAwCisKKyAgICBDbGFyaWZ5IG1lYW5pbmcgb2YgaHJTV1J1blN0YXR1cyAnaW52YWxpZCg0KScKKyAgICBFbnN1cmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFsdGVybmF0aXZlcyBkb24ndCBjb25mdXNlIGNvZGUgc3ludGF4CisKK2NvbW1pdCA5OWIzNTNmNzI1M2E1YmIzOGI4NmYzMWMyNzA4ZTE2YjM0YTQ2Y2U3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1bCAyNyAxMjo1MDo1MSAyMDEyICswMTAwCisKKyAgICBBZGRpdGlvbmFsIHBhdGNoIGZyb20gUGF0Y2ggSUQgIzM1NDMwMDAKKworY29tbWl0IGQwZTAzZmU0YTIzNjk0NWRhZjQyYWY3YTQ3MDk0ZTY4NmY5YmRiOWUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVsIDI3IDEyOjQxOjAyIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNTQzMDAwOiBWYXJpb3VzIGZpeGVzIHRvIFJtb24gY29kZQorICAgIFN1cHBsaWVkIGJ5IFBhdHJpY2sgUml0dGVyCisKK2NvbW1pdCA2NjMyYTJiOWI5ZmFkMWEwYjBkNmJhZWRmMmEyYjM5MWY1ZDRlOTE0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxNDozOTo0MiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDM1MTcwMzA6IEVuc3VyZSBsYXJnZSB0YWJsZXMgYXJlIHdhbGtlZCBwcm9wZXJseQorCitjb21taXQgYjhkMTY2MDRkYmIyZjgwZWJlMjg1MjMyMmFhODMzNjFhMDMyMzc5NgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTQ6MTk6MDcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogYXBwczogQlVHOiAzNTI5NzY4OiBCZSBtb3JlIGNhcmVmdWwgd2hlbiBzdHJpcHBpbmcgb2ZmIG51bWVyaWMgc3VmZml4ZXMKKworY29tbWl0IDBiM2FkNDRlYzRjMWI5ZjQxZGMzZWY3MGU2YTM4YTUzZWYyNjhhZGUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDEzOjM0OjEwIDIwMTIgKzAxMDAKKworICAgIEZpeCBjb21tZW50cyBkZXNjcmliaW5nIEZyZWVCU0QgcmVsYXRpb25zaGlwcworCitjb21taXQgOGNmN2E4OTE4N2E5OTZmYWZmMDQwNDE0OTg2ZmZhNWQ3OGQ1NjgzZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTM6MjE6NTYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMzUzMjIzNDogRml4IHR5cG8gaW4gbGlidG9vbCBzY3JpcHQKKyAgICAoYWRkcmVzc2VkIHByb3Blcmx5IGluIGxpYnRvb2wgMi40LjIpCisKK2NvbW1pdCA0MjU4ZDg1MmNhN2I2YWVhZTkzYWQ3MzA2NGQ0M2FhODA3ZWI2MTA0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxMzoxNjoyMCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBkb2M6IEJVRzogMzUzNTI2OTogRG9jdW1lbnQgdXNlIG9mIFtzbm1wXSBmb3IgY2xpZW50LXNpZGUgdG9vbHMuCisKK2NvbW1pdCAyNmVkNDBjYmQwN2NmMjcxYTljZmM0NTE3ZDk2NDc3NDcxMmFkNzdjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxMjo1Nzo1NiAyMDEyICswMTAwCisKKyAgICBTdXBwb3J0IGxvY2FsIHJvbGx1cCBvZiBwYXRjaGVzIHdpdGhvdXQgZmlyc3Qgc3luY2hyb25pc2luZyB3aXRoIGV4dGVuYWwgcmVwby4KKworY29tbWl0IDkwNGM0NDJkNjBjNWI5OWFhY2Q3ZjYwMzA3YzI4Njg0ZWZhZTg1NGMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDEyOjUzOjM3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHB5dGhvbjogQlVHOiAzNTM1OTY3OiBGaXggbWVtb3J5IGxlYWsgLSBzbm1wX3tzZXNzX31lcnJvciBhbGxvY2F0ZXMgdGhlIG91dHB1dCBidWZmZXIKKworY29tbWl0IDU5N2VjZGE2OGVlMmI1ODBiNjY2Mjg4OTc3YjA0YWExMzMyMDc1MTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDEyOjE3OjE0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IEJVRzogMzU0MDYyMTogZGlzdDogQWRkIG1pc3NpbmcgUHJvdmlkZXM6IHRvIG5ldC1zbm1wLXBlcmxtb2RzIFJQTSBzcGVjCisKK2NvbW1pdCA0M2Q1YmEyMjRjM2YyOWZkOGU3ZmQxZDA2MGExNzA0NWFhZDdlZmYwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxMToyNTo0MyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDM1NDEwMTI6IEZpeCBoYW5kbGluZyBvZiBnZXR0YWJsZSBjb2x1bW5zCisKK2NvbW1pdCBiYzI5M2FjYWQ4ZDM0ODdjZGRlZjNjNzBjZWE3NDM2OGYzNGQ5MzU0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxMToyMDoyMCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzNTQzODY0OiBSZW1vdmUgZXh0cmFuZW91cyBmdW5jdGlvbiB0eXBlCisgICAgKGFuZCBmaXggYSByZWxhdGVkIHR5cG8pCisKK2NvbW1pdCAwMjg2MTRlY2YyZDY3Mzk4Njk5ZGMzYmQ3ODQwMjlmMzM2MGYyZTEzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAyNCAxNTozNzoxNiAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgc25tcGQgZXhpdGluZyBzaG9ydGx5IGFmdGVyIHN0YXJ0IGR1ZSB0byBpbmNvbWluZyBzaWduYWwuCisKK2NvbW1pdCA0ZDM4ODk1ZjQ1OWExZGYyNGY2OGM0YTYwZTRjYWY2YTc3OGQ4YzFmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1biAyNyAwOTozNTo0NCAyMDEyIC0wNDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogcmVtb3ZlZCBsaW1pdCBvZiAnZXhlYycgYW5kICdzaCcgZW50cmllcyBpbiBzbm1wZC5jb25mCisgICAgCisgICAgVXNlIGR5bmFtaWMgKHJlKWFsbG9jYXRpb24gaW5zdGVhZC4KKworY29tbWl0IGRjZWVhY2M5OThmZTIzMjI4ODJlN2VlZGVjMGE3MWE3OWRjNDk0YWIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgSnVsIDI0IDA5OjAwOjIzIDIwMTIgKzAxMDAKKworICAgIERvbid0IGJlIHN1cnByaXNlZCBpZiB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byB2YXJpb3VzIGZpbGVzCisKK2NvbW1pdCA1NmMzYzA3ODMzNmNiZjFiZjA5ZmQxYjAxMDc4YTkwMzA3MTc2MTNlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgSnVsIDExIDA4OjQ3OjEzIDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUcgMzU0MjMwNzogQ29ycmVjdCBzeXNPUklEIGZvciBzbm1wTVBEU3RhdHMuIFRoYW5rcyB0byBEYXZlIFZ1Y2ljaCBmb3IgcmVwb3J0aW5nIHRoaXMuCisKK2NvbW1pdCA2MWVjZWRjMDgzZjg4MWRiOGE5YTUwZDUwYmRlZWQzNjYyNGVkMzA3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgSnVsIDExIDAwOjIxOjI3IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUcgMzU0MjE4ODogQ29ycmVjdCBzeXNPUkRlc2NyIGZvciBzbm1wVXNtTUlCLiBUaGFua3MgdG8gRGF2ZSBWdWNpY2ggZm9yIHJlcG9ydGluZyB0aGlzLgorCitjb21taXQgMmY5ZWRlNDE5ZjQwZTg0OGEyNDI1Mzg5Mjg4Y2FjMGUyMzMxYjk5MgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMTkgMTc6MTA6NTIgMjAxMiArMDEwMAorCisgICAgRml4IGV4YW1wbGUgJ3JzeW5jJyBjb21tYW5kIGZvciBmdWxsIHJlbGVhc2VzCisKK2NvbW1pdCA2ZGQ3ODg0ZDk5ZTc1NmUyZjIyYjY4ODgyM2NlMWIxZDUyNmFkMTY2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEp1bCAxOCAxNTo1OTo1OSAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIKKworY29tbWl0IDk3NjY5NmExMjhlNTdiNTEyYmY3YWQ0MDBkMDAyMzY4YjRhOWE4NzEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSnVsIDE4IDE0OjM0OjMxIDIwMTIgKzAxMDAKKworICAgIFY1LTYtcGF0Y2hlcyBvdXQgb2YgUmVsZWFzZSBDYW5kaWRhdGUKKworY29tbWl0IDU3YzU2OGQzZDM5ODE3MmM1NTQxZmIzMWJiNzVkMThmY2NlMmUyNmYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSnVsIDE4IDE0OjM0OjE1IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS42LjIKKworY29tbWl0IDczZDkwNmJjN2M5ODUwNmZhMmI0ZDZkMjkwZjdiM2JlYmEyZTRhMGQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSnVsIDE4IDExOjEyOjU4IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMgorCitjb21taXQgNDJiNWFmYjNjZDZkMDZhZGI0MjZmMWRiYWE5ODM1OGYyYjJlOGE1MworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKdWwgMTggMTA6NDY6NDcgMjAxMiArMDEwMAorCisgICAgVjUtNS1wYXRjaGVzIG91dCBvZiBSZWxlYXNlIENhbmRpZGF0ZQorCitjb21taXQgOGJkNDQwYzQzZTM2NWEwYjc3ZDQ3ZjU4MmNhZGU5Zjk3YzdiZmNlNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKdWwgMTggMTA6NDY6MjggMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjUuMgorCitjb21taXQgNmUwODU1YTMxNTcxOTg0OTk0MTFhYzUyYjQ2ZDVmMzJhYWQ1YjlmYQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKdWwgMTggMDk6NTE6MzIgMjAxMiArMDEwMAorCisgICAgQWRkIG1pc3NpbmcgcmV0dXJuIHR5cGUgaW4gZnVuY3Rpb24gZGVjbGFyYXRpb24KKworY29tbWl0IDA3ZDgyNWU4YmIzNWVlYTlhYzZiMWNiODJjYmIyMzRmZTY2YjFhYjYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSnVsIDE4IDA5OjUxOjMyIDIwMTIgKzAxMDAKKworICAgIEFkZCBtaXNzaW5nIHJldHVybiB0eXBlIGluIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisKK2NvbW1pdCA1ZGI3MDAzNmVmNjc1NjM1NjQ3ZTViN2M3MjUzNDU2ODM4ODM2NjQ3CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDExIDE0OjU1OjM4IDIwMTIgLTA3MDAKKworICAgIGRvbid0IHVzZSAtLXJlYmFzZQorCitjb21taXQgZDRjMTU0OTU5M2NlMmMyY2FlYjk4ZTVmOGFiZmQ3YTVhZTVhMDI3MworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdW4gMjcgMDk6MzU6NDQgMjAxMiAtMDQwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHJlbW92ZWQgbGltaXQgb2YgJ2V4ZWMnIGFuZCAnc2gnIGVudHJpZXMgaW4gc25tcGQuY29uZgorICAgIAorICAgIFVzZSBkeW5hbWljIChyZSlhbGxvY2F0aW9uIGluc3RlYWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4yLnByZTEgLT4gVjUuNy4yLnByZTIKKworY29tbWl0IGZmY2U0OWZiMWFiNGE3OGQ0ZjI5NDdiZTA2ZDYyMGYxNDI0NTI4ZmQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMTEgMTc6MTI6MzEgMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMi5wcmUyCisKK2NvbW1pdCBiZDdjNzI5NzE4NzgxOGU1ZWVmNzMyNzY2N2U0YTgxZjZjOWZjODliCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDExIDE0OjU1OjM4IDIwMTIgLTA3MDAKKworICAgIGRvbid0IHVzZSAtLXJlYmFzZQorCitjb21taXQgYTcxNTMxMmUyY2U0OWQ0ZGE5M2ZjMTQwY2MzOWZjMTAwYjBiNzk3OAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAxMSAxNTo0NzoyMiAyMDEyIC0wNzAwCisKKyAgICB1cGRhdGVkIGZvciB0aGUgcHJldmlvdXMgNS43LjIucHJlMSByZWxlYXNlCisKK2NvbW1pdCAxNzI3NzY4OWI2MjlmNDU4NmQ1ZDcxNGQ4N2NlNmJjMTFmODg3NjY4CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDExIDE0OjU1OjM4IDIwMTIgLTA3MDAKKworICAgIGRvbid0IHVzZSAtLXJlYmFzZQorCitjb21taXQgNjc4NmZmYzc2ZmFjZjc0NmFmYjZhZjI1MTU4Zjc5NDA2NTZhYjM5YworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEp1bCAxMSAwODo0NzoxMyAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHIDM1NDIzMDc6IENvcnJlY3Qgc3lzT1JJRCBmb3Igc25tcE1QRFN0YXRzLiBUaGFua3MgdG8gRGF2ZSBWdWNpY2ggZm9yIHJlcG9ydGluZyB0aGlzLgorCitjb21taXQgZjBlMzVkNjFmOTI1OGRjNjA4ZGE5YmY3MThhZjE0NTdhODU5ZmExOQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEp1bCAxMSAwMDoyMToyNyAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHIDM1NDIxODg6IENvcnJlY3Qgc3lzT1JEZXNjciBmb3Igc25tcFVzbU1JQi4gVGhhbmtzIHRvIERhdmUgVnVjaWNoIGZvciByZXBvcnRpbmcgdGhpcy4KKworY29tbWl0IDUyMDZkMjVkNGNiOTRkNGIwZGQzMzFhNWE0MTEzZDRkODc3ODJjNDIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMiAxMjoxNDozOSAyMDEyIC0wNzAwCisKKyAgICBiZXR0ZXIgZGVzY3JpcHRpb24gb2YgLS1kaXNhYmxlLXNldC1zdXBwb3J0CisKK2NvbW1pdCBmOTI4NTMyODE0NzdlZTcyNGE1MWE5OTY3ZjM3ZDNmMWRkMWIwZjdlCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDIgMTI6MDk6NTAgMjAxMiAtMDcwMAorCisgICAgcmVtb3ZlIGR1cGxpY2F0ZSBkZWZpbml0aW9ucyBjYXVzaW5nIGEgcHJvYmxlbQorCitjb21taXQgNWJlMjczNjg3NTE2OTFmYzFhYjU1ZmU2MmI0MTA2ZDhkOTliODcwNAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAyIDEyOjA2OjU4IDIwMTIgLTA3MDAKKworICAgIGFmdGVyIHB1bGxpbmcgYWxsIHRoZSBicmFuY2hlcywgc3dpdGNoIGJhY2sgdG8gdGhlIGluaXRpYWwgb25lCisKK2NvbW1pdCA4MjU5NmE2OWY1Y2U1M2Q1YTZmMGFmNDIxNWM5OGQ2MTg0ZGFiNGQ0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxNDowNDo1MCAyMDEyICswMTAwCisKKyAgICBVbnBpY2sgbWVyZ2UgY29uZmxpY3QuCisgICAgKE5vdCBzdXJlIHdoeSB0aGlzIHdhc24ndCBmbGFnZ2VkIHVwIGVhcmxpZXIgLSBvciBtYXliZSBJIGp1c3QgbWlzc2VkIGl0ISkKKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBiMDViZDc4ZjlmMjM0YmI1N2EwMGI1NGM1YmZiMWRlMzJhMDlmNGE0KQorCitjb21taXQgNmEwNzVhZTQ5NGM3NmI4MmVlYTk2MzI3Y2Y1MjQyZGYwNDg3NDNkYgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTQ6MjE6MDggMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnJjMworCitjb21taXQgYTM3ZTdlMDI5NDUxNDdiZmU2Y2FkYjk1NzE3MDZjNmIyZWM3NDNiZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTQ6MTc6NDIgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnJjMworCitjb21taXQgYjA1YmQ3OGY5ZjIzNGJiNTdhMDBiNTRjNWJmYjFkZTMyYTA5ZjRhNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTQ6MDQ6NTAgMjAxMiArMDEwMAorCisgICAgVW5waWNrIG1lcmdlIGNvbmZsaWN0LgorICAgIChOb3Qgc3VyZSB3aHkgdGhpcyB3YXNuJ3QgZmxhZ2dlZCB1cCBlYXJsaWVyIC0gb3IgbWF5YmUgSSBqdXN0IG1pc3NlZCBpdCEpCisKK2NvbW1pdCA0ZDE1NzQyYzc1MGE5NmE0ZGJiM2RhODc0NzQxYWUxNTI0ODlmOGQ1CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzo1ODowNyAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNi1wYXRjaGVzCisKK2NvbW1pdCBmNmI1ZTMzNzZlZDNhOGU5ZWFmNzRiN2Q2ODIyYjNhNzY1NzcyZWU4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzo1Nzo1NiAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnJjMworCitjb21taXQgNWNmYjA4MTExMjdhNjUzZGZmMGY0ZTUzYWQ2MDI5ZTIyOThhNmM2MgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6Mjg6MzcgMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTUtcGF0Y2hlcworCitjb21taXQgZTcyZTIwNWZkY2VmNzg3ZWY4NDBjOGM5MjhlZDI3MzUxYTY5NTQ0YgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6NTg6MDcgMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTYtcGF0Y2hlcworCitjb21taXQgZjc5YTU0ZjI0NzI1MDhiMTY3ZDk3N2YzNjdjMzg2NGI1NjIxZTg5ZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6NDI6NTMgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMworCitjb21taXQgNTZlZjVmMGRiNTFjZmQ1NTIyNmY4MmY5NGYzZjNkMjQ1MGU0ZmViNQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6Mzk6MzIgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMworCitjb21taXQgYWYxZDAwYWIwMjQ2Mjc1ZGFkYjVmMGNkM2EyM2E3N2Q1ZjU1OThjZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6Mjg6MzcgMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTUtcGF0Y2hlcworCitjb21taXQgZjE4Nzc2ZDYzYTUxNjAyMDMxN2U1ODg3NWFiMjQzNTJkNWRiODY1MQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6Mjg6MjYgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjUuMi5yYzMKKworY29tbWl0IGZlMTA3Nzk0ZTc0MDBkMjM5ZThhZjNkYThiNGEzZmJlZjA2YjVkYTkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjI4OjM3IDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS01LXBhdGNoZXMKKworY29tbWl0IDBmODRmYmNmNzE5OTViZGRhZmFiNTAwZDg3YzljNWE2ZjQ2MWE3MzQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEyOjI5OjM0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDc5NzQwOiBGaXggaHJTV1J1blBlcmYgc3RhdGlzdGljcworCitjb21taXQgMWUzYmI2MDYwYmU2MTU2ZDNmZjMxNmM1YTdlNGZkN2YwNWUzN2NmZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTI6MTE6NTYgMjAxMiArMDEwMAorCisgICAgTkVXUzogc25tcGQ6IEJVRzogMzUzMjA5MDogRml4IGhpZ2ggaWZJbmRleCB2YWx1ZXMgY3Jhc2hpbmcgaHJEZXZpY2VEZXNjcgorCitjb21taXQgZTg2NjNmYWM4Yjg4NjYzMjgyNjY5NzI2YTA4ZjE2ZGIxNmI1ZjRkYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdW4gMTggMTM6MzA6MjUgMjAxMiArMDIwMAorCisgICAgUmV2ZXJ0ICJDSE5BR0VTOiBzbm1wZDogZml4ZWQgc25tcGQgZXhpdGluZyBzaG9ydGx5IGFmdGVyIHN0YXJ0IGR1ZSB0byBpbmNvbWluZyBzaWduYWwuIgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYjExYTRlOTNmNTBkOGE1NDRmODM1ZjM3NmMzYTRiOGMwNjQxYTMxYSwKKyAgICB3ZSdyZSBpbiBSQy1waGFzZSBhbmQgY29kZSBpcyBmcm96ZW4KKyAgICAKKyAgICAoc29ycnkgZm9yIG5vaXNlKQorCitjb21taXQgYjExYTRlOTNmNTBkOGE1NDRmODM1ZjM3NmMzYTRiOGMwNjQxYTMxYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdW4gMTEgMTY6MjY6MDkgMjAxMiArMDIwMAorCisgICAgQ0hOQUdFUzogc25tcGQ6IGZpeGVkIHNubXBkIGV4aXRpbmcgc2hvcnRseSBhZnRlciBzdGFydCBkdWUgdG8gaW5jb21pbmcgc2lnbmFsLgorCitjb21taXQgYTU3MDIzOGQ1OGViNWE5OTZiNTZmMDFhMjdhMThkZjZmMzdkMGY2MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdW4gMTEgMTQ6MjA6MjUgMjAxMiArMDIwMAorCisgICAgTW9yZSBwcmVjaXNlbHkgZGVzY3JpYmUgLWMgb3B0aW9uLgorCitjb21taXQgNDhjYzM5ZjFhYTBmYTZjZTk1NWVmNzZiMjVkYjhmOWRjYTA2YjgwZAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEp1biAyIDA5OjI3OjEwIDIwMTIgLTA3MDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMi5wcmUxCisKK2NvbW1pdCA4MTAxODVhZTBiMGNkMmFkNGQ0MjRhMWJhNzc1ZWY1Y2VhZjUwZjAzCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDk6MjQ6MTkgMjAxMiAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4yLnByZTEKKworY29tbWl0IDYyNzE0NzFlMDEyODJmMzY3NTcyNGVhZjEzNThjZWIwZTk1ZGRkNGUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdW4gMiAwODozMjo0MCAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yLnByZTEKKworY29tbWl0IGZjYjc4MmFhODg5MzEzNGM3NDE0YTkyNmQ5MjY4NTk0ZjcyNWI5MTUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdW4gMiAwODozMjoxOCAyMDEyIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjIucHJlMQorCitjb21taXQgZTNiY2Q4N2M3MmZjZWE3NzA2ZTg2OGI1YWNlNzUyOTYwOTNmNzQ5NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTQ6MDk6NDIgMjAxMiArMDEwMAorCisgICAgRml4IGRpc3QvcmVsZWFzZSBmb3JtYXQKKworY29tbWl0IGQ4MTNjZTJlZWVmYzY4MjI5Y2ZjYWYyMDYwMzI0NGNkZDZkMDlkM2MKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDE0OjA3OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeCBkaXN0L3JlbGVhc2UgZm9ybWF0CisKK2NvbW1pdCBmYTdiZDU4MWUzNzgzNjg1ZGIzOWM5YjRlYWY4NDdiZTVhYzg2ZmQzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MzoxMCAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMyCisKK2NvbW1pdCAwNzM5ZTIzODJkMzExNDZhY2EzMjA1MjQ0Y2Y3MDc4OGI0MGE0MjhkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MTo0NSAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMyCisKK2NvbW1pdCBkOWExNTQ0NWFhNzRmNTMxNmJmYzcxMWMxNTU4NDY3ODcyYzI5NThjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MDoxMiAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS42LjIucmMyCisKK2NvbW1pdCBiY2FiZDJjOTU0MmRiZWJkMWQzMTliNDQ5NDQxM2JkY2NhMDY2MTRlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzozODozOCAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNi1wYXRjaGVzCisKK2NvbW1pdCBiNDczODk4YzBjNWFjOWViNDdjN2MwNWEzZjc0NWU0ZmYyYTc2YWFhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzozODoyOCAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnJjMgorCitjb21taXQgMTMxNDI5ZTcwNjJmYmFhNjViODJhZmZlZDFmYjkyZGYyYzBjYzgxMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6Mzg6MzggMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTYtcGF0Y2hlcworCitjb21taXQgMWM4MTEwYjMzYjgxMDVjYTYxOTA5NDVhMzVmZTdhZTkwMzI1MmQ2OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6MjE6MzggMjAxMiArMDEwMAorCisgICAgQXZvaWQgcGVybCB2ZXJzaW9uaW5nIHByb2JsZW1zIHdoZW4gc2V0dGluZyB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKworY29tbWl0IDUwOGVjZTE2ZTZmNmY0OTU2MmRhMjA0NzkyYWUwNjQ0MjY5OTk0ZDEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjIwOjU4IDIwMTIgKzAxMDAKKworICAgIEZpeCBoYW5kbGluZyBvZiBkaXN0L3JlbGVhc2UgbWVyZ2UKKworY29tbWl0IDViOGE4NTQ3YjFhNDdkMmY1YjIwN2Y0OGYyNDk2ZTQyNDFkOTAyYzYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjEwOjQ4IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDZjMzI5MTRiZjI4ZDY5NWRmMzQ5ZGNhMjY5ZTQ4OGI1MDE3MDAzMTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjA3OjIyIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDlmNWE4MmE1YWZkYmIzZGFlYjJmZDQzN2EzMDlmMGI4ZDM1N2NmNGIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjA1OjM5IDIwMTIgKzAxMDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDM5MjAzZjI5NDc3YTNiZWRmMDEyZDQxMTM1ZDhhYmQ2YmNhZDA4YjEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjU0OjI3IDIwMTIgKzAxMDAKKworICAgIGRvY3VtZW50YXRpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDE3ZTc5ZWYwZmFkNzk2MDljNWJhMmZlYjRlOGI5ZWI1ZDdkYjY4ODYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjQ2OjExIDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS01LXBhdGNoZXMKKworY29tbWl0IDU4MjFiZTViYmI0MDE4ZGVkMjgyZmJiYmQ0ODMwY2YyZWVhZGQ5ZTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjQ1OjU5IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS41LjIucmMyCisKK2NvbW1pdCAzZjIxMTFkZTY3MzNhMDRlMTJkOTEwZDMwNmEzNGQ2NzFlMDA4NzYyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMDo0NjoxMSAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNS1wYXRjaGVzCisKK2NvbW1pdCBjY2Y4ZmYyYzRkYjYwMTIyZDQxMzAyZTRhZWI3MDBlMGI4NjgxMDVmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSAyOCAxMDoxODo0MyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNTI2NTk5OiBEb24ndCBoYW5nIG9uIHJldHJpZWQgZmFpbGluZyBTTk1QdjMgcmVzcG9uc2VzCisKK2NvbW1pdCBjODFjODQ4Mzk5MDkxMWY0NzQzNWQzMDA1MjU1ZDkxYzM3YWI5MmIyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWF5IDI3IDE0OjA5OjI2IDIwMTIgKzAyMDAKKworICAgIEZpeCBCU0QgdGhhdCBkb3dubm90IGFsd2F5cyBsaWtlIElQX1NFTkRTUkNBRERSIC0gc28gcmV0cnkgd2l0aG91dAorCitjb21taXQgZmZjZTFmMmRjMmY4YjMxYWJkMDFmOTNiMjZkYTc4ZjQ3MjZhMWU2NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE1heSAyNyAxNDowMzo1OCAyMDEyICswMjAwCisKKyAgICBGaXggT1MgbWlzc2luZyBNU0dfRE9OVFdBSVQgKEFJWCkuIEJhY2twb3J0IGZyb20gNS43CisKK2NvbW1pdCBjNTc1MjE2ODUwMTg1YjU2NDU0ZGFkMDI1M2UzMTY0OTc5ZTEzNTEzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWF5IDI3IDEzOjU2OjAxIDIwMTIgKzAyMDAKKworICAgIEZpeCBtaXNzaW5nIGluY2x1ZGUuIEZpeGVzIFNJR1NFR1Ygb24gRnJlZUJTRDkgeDY0CisKK2NvbW1pdCA1ODA1ODc4NzQ5YzA4MDYyZGViZjBhOWQ3OThkMDhmYjkxNmNhYTJkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTWF5IDI3IDA2OjIzOjE5IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGQgbWlzc2luZyBkZWJ1ZyB0YWcKKworY29tbWl0IGQxYTQyYmJjYzdiMTQ3MzBjOWE2ZDk5YzRmMDQ3MDk3ODQzYTU0OWIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXkgMjUgMDk6MDI6MjcgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IFJ1biBsaWJ0b29sIC0tbW9kZT1maW5pc2ggb24gdGhlIHJpZ2h0IGRpcmVjdG9yeQorCitjb21taXQgMWZiZjMzNzExYTE5ZWFjOTczOWFkMjNmNmY2MjUxZWFjYzQxZjFjNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXkgMjIgMTQ6NTQ6NDUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogTGludXg6IFBBVENIOiAzNTI1OTk4OiBEb24ndCB1c2UgYW4gdW5pbml0aWFsaXNlZCB2YWx1ZSBpbiBlcnJvciBtZXNzYWdlCisKK2NvbW1pdCAzMmMxNjg2YjY3ZGM4NWM0YTE4OTU3NjM2MzA2NTYwOWRmZWQ1ZTYxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1heSAyMiAxNDo1Mjo1NiAyMDEyICswMTAwCisKKyAgICBBdHRlbXB0IHRvIG1hcmsgcmVsZWFzZS1jYW5kaWRhdGUgYnJhbmNoZXMgYXMgc3VjaC4KKyAgICBPbWl0IGZpbmFsLXJlbGVhc2Utb25seSBzdGVwcyB3aGVuIHByZXBhcmluZyBwcmVOL3JjTiByZWxlYXNlcworICAgIChSZWxpZXMgb24gYSB0d2VhayB0byB0aGUgTWFrZXJlbGVhc2UgcGVybCBtb2R1bGVzKQorCitjb21taXQgNGM1NjMzZjE2MDNlNGJkMDNlZDA1YzM3ZDc4MmVjODkxMTc1OWM0NworQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CitEYXRlOiAgIE1vbiBNYXkgMTQgMTE6NDA6MDYgMjAxMiAtMDQwMAorCisgICAgTkVXUzogc25tcDogQlVHOiAzNTI2NTQ5OiBDVkUtMjAxMi0yMTQxIEFycmF5IGluZGV4IGVycm9yIGxlYWRpbmcgdG8gY3Jhc2gKKworY29tbWl0IDY1ZGQ4M2MyMjU1ZWU1OGVkYmYwZTI1ODYzZTU1YjU4YTQxMTM2NzkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMjA6MzA6NDIgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnJjMQorCitjb21taXQgYWM0YmM2NWUyOTA5ZjNiZDg1ZjMyZjA0YjUwNGZhNjVkMmY2NDU1MworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAyMDoyODowNiAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS42LjIucmMxCisKK2NvbW1pdCBiNzQ5OTQ4NjQxOTUxMTllZGI2ZTE5Yzg1MTQ3ZmFjMDBiY2I5M2UzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDIwOjEzOjQ2IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS42LjIucmMxCisKK2NvbW1pdCA5MTM1MDA5MmM0NmU2NmQwNmQ3NDE0M2Y0ODE2NDczZGI0ZDI1MTYwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE5OjU2OjMzIDIwMTIgKzAxMDAKKworICAgIE1hcmsgdmVyc2lvbi1zcGVjaWZpYyBjaGFuZ2VzIF9iZWZvcmVfIHB1c2hpbmcgdG8gY2VudHJhbCByZXBvc2l0b3J5CisKK2NvbW1pdCA3MjQxYWNjZDcwYjgyZDBmY2Q0NGQ1YTUyMzhiMmVlOTQ0NTkwMGRiCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjUzOjE3IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzEKKworY29tbWl0IDdjNzk2YTE1YTFkMWJiODVmZWVhOTQwYmQ0ZTM1MTY4Nzc5MjA5MTkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6NTA6NDkgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMQorCitjb21taXQgMDdlMjY4YmZiNjRiMGVjNjQ1YjNmN2U4NzI2Njk4NGY5MjE3Y2YxMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzo0NDozNyAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS41LjIucmMxCisKK2NvbW1pdCAxNmVhYWY2YzNiYTE0NTk2Y2E5ZWZhZjRiMTE0ZjFiNzA5ZjQyYjY4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjI5OjAzIDIwMTIgKzAxMDAKKworICAgIGRvY3VtZW50YXRpb24gdXBkYXRlIGZvciA1LjUuMi5yYzEKKworY29tbWl0IGM3Mjk0NjllZjEyMTU0OTMwY2Y5ZDE1OTY3ZTE2MTg2ZmI0NDVmMzAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6Mjc6MjAgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjUuMi5yYzEKKworY29tbWl0IDE0MjU3MWQzY2VhMDhmMGMwNzJkMjRjMWQzOWE0M2M3NDQ2ZjhjZTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6MDE6MDMgMjAxMiArMDEwMAorCisgICAgV2hlbiBidWlsZGluZyBhIG5ldyByZWxlYXNlLCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIHBlcmwKKyAgICBtb2R1bGVzIG1heSB3ZWxsIGJlIGRpZmZlcmVudCB0byB0aGUgdmVyc2lvbiBiZWluZyBidWlsdC4KKyAgICBUaGF0IHNob3VsZCBub3QgYnJlYWsgdGhlIGJ1aWxkLgorCitjb21taXQgZWJhODZiNmY3YWZmMjYxZWUwZTYxMzM0ZGY3MGRlNzE1NmU1YzNjYgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzowMTowMyAyMDEyICswMTAwCisKKyAgICBXaGVuIGJ1aWxkaW5nIGEgbmV3IHJlbGVhc2UsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgcGVybAorICAgIG1vZHVsZXMgbWF5IHdlbGwgYmUgZGlmZmVyZW50IHRvIHRoZSB2ZXJzaW9uIGJlaW5nIGJ1aWx0LgorICAgIFRoYXQgc2hvdWxkIG5vdCBicmVhayB0aGUgYnVpbGQuCisKK2NvbW1pdCA1YzBmNjRkNmRiMmI1OTNmN2NjMGVkMmQ0ZjU1YjdjNTkyYjc3NGE4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjI1OjE1IDIwMTIgKzAyMDAKKworICAgIE9ubHkgb3V0cHV0IGNwdSB3YXJuaW5ncyBvbmNlLgorCitjb21taXQgZWU1OGU0ODI3YjlmYTE2ZTY2MzVjYTAwM2U4YTRmMTFkY2I1ZmI3YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMyAyMjoxNzo0MiAyMDEyICswMjAwCisKKyAgICBGaXggc3BlbGluZyBpbiBlcnJvcm1lc3NhZ2UuCisKK2NvbW1pdCAwM2Y0ODVkZjIyZjIwZTE0OWNmYWU5NGM1N2NiODJmZWVjYjVkNzRiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjEyOjExIDIwMTIgKzAyMDAKKworICAgIE5vdCBhbGwgTGludXhlcyB1c2UgcnBtIChkZWJpYW4vdWJ1bnR1IGNvbWVzIHRvIG1pbmQpCisKK2NvbW1pdCA5MzA4MzgyMjRmNzgxNjk2YmQzNTIyNWYyMjU2OTM0NzQxNmYxYjE2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjEwOjE1IDIwMTIgKzAyMDAKKworICAgIENoZWNrIG5lZWQgZm9yIC1sbSB0byB1c2Ugcm91bmQvZXhwCisKK2NvbW1pdCBhMDYwOWNmMWYzYTY5MTdkMjYzNzI1NzMyMjQ4Y2Q5MzdhNDVhZDk0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgQXByIDcgMDg6NDA6NDQgMjAxMiArMDIwMAorCisgICAgUmVtb3ZlIGxpbWl0YXRpb24gb24gY29uZmlndXJhdGlvbiBsaW5lIGxlbmd0aC4KKworY29tbWl0IDMwNTk3MzMzOGE2M2FlNTRjNWUwMmE4NjI2ZmJlOWE4MDY0ZGNiN2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBBcHIgNyAwMDozMjoxOSAyMDEyICswMjAwCisKKyAgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGVzLgorCitjb21taXQgY2NhYjRlOWQzZWQ0MjRjMzlkMGRjMjdiZTYzZmE3NmM3NDYxZWE4MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEFwciA3IDAwOjE1OjIyIDIwMTIgKzAyMDAKKworICAgIEludGVybmFsaXplIHRoZSBuYW1lIGFuZCBsaW5lIG51bWJlciBvZiB0aGUgY3VycmV0IGNvbmZpZ3VyYXRpb24gZmlsZQorCitjb21taXQgY2Y4NzRhZDdiOWRhZjRmY2MwZDQ2Y2RkMDM0NDc0YjQ3ODAwNTM0MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIEFwciA2IDIxOjQ3OjI4IDIwMTIgKzAyMDAKKworICAgIFJlcGxhY2UgI2lmIChBKSBCICNlbHNlIEIgI2VuZGlmIHdpdGggQi4KKworY29tbWl0IGVmOWVhNjQxYmMyOTBlZWM1MDY4NWI2MDUxOWIzMWJlZThiMTRhNjkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjE6MDQ6MDYgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTIKKworY29tbWl0IDM1YWJhMTk1OWRlMTE5ZjFmYjg5MjAzYzM3MTA5YWE2ZjBlMjFjNTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjE6MDA6NDAgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTIKKworY29tbWl0IGU0MWZiYWZmMThhYzkwOTVjZjRhNzM5YTA2ZWMzOWExYTZjY2ZkYzEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjA6MzU6MzUgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjYuMi5wcmUyCisKK2NvbW1pdCAxMzdmZTU4MmQ2Y2M1NjExNDMwZGFiNDZlZjE0NGVmZDg0Y2ZjODAzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEFwciA2IDIwOjQ2OjU2IDIwMTIgKzAxMDAKKworICAgIFJldmVydCBjb21taXQgMWY0YTgyOWIxODI3NWU0OTU2Y2E5MWU1ZWMzNzBkZjAxNWYwNjEzMworICAgIChzbm1wX3N0b3JlX25lZWRlZCgpIEFQSSBpcyBub3QgYXZhaWxhYmxlIGluIDUuWzQ1XS54KQorCitjb21taXQgMmI3ZTY0Mjg4YzAxYThhMDYyMDI2YzUyMWNhMzFhNWU4ODVmMzBjYworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAxNjoxMjoxMiAyMDEyICswMTAwCisKKyAgICBGcmVlQlNELTk6IEZpeCBmb3IgJ2NvbnN0J2lmeWVkIG5saXN0IGFyZ3VtZW50cworICAgIEJhY2twb3J0IG9mIGVkNjVlY2E2ZTdmOWNmYTczODBhNzhkNTZjMDFlZDMxNDc0NWIxNjkgZnJvbSBWNS02LXBhdGNoZXMKKworY29tbWl0IDdlOTVkODBiNjk4MDUxMjU5NjQ1YzA3NGE1M2ZmZDI2NGE2ZmE5MTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTY6MDY6NTYgMjAxMiArMDEwMAorCisgICAgRnJlZUJTRC05OiBGaXggZm9yICdjb25zdCdpZnllZCBubGlzdCBhcmd1bWVudHMKKyAgICBCYWNrcG9ydCBvZiBlZDY1ZWNhNmU3ZjljZmE3MzgwYTc4ZDU2YzAxZWQzMTQ3NDViMTY5IGZyb20gVjUtNi1wYXRjaGVzCisKK2NvbW1pdCAxYTliN2I3YzAyZTJkZWVmZTk5NGQ1OTVhN2NjMWRkMmZmYmVlZTFkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDE1OjUxOjIwIDIwMTIgKzAxMDAKKworICAgIEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoICdyZWNlbnQnIGhlYWRlciBzaHVmZmxpbmcKKyAgICBCYWNrcG9ydCBvZiBjNTNkOGMzNTI1ZjU5MGYyMjEzZDM1YjBkYTk0MTIzODYyZjNlMzY2IGZyb20gVjUtNS1wYXRjaGVzCisgICAgKFBhdGNoICMzMzYzMzA4IC0gb21pdHRpbmcgdHdlYWtzIHRvIGNvbmZpZ3VyZSkKKworY29tbWl0IDNkOWRkYjQxZTI2M2JjMWE3OGY5Zjk0NDBiOGQ0YWQ0Zjg2YzgyZTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTA6MzY6MTggMjAxMiArMDEwMAorCisgICAgRml4IHR5cG8KKyAgICBCYWNrcG9ydCBvZiA1YjcwMmIwMjRiNjAxNzZkN2Y1Njk5YjkyZTU1ZGE1MGE4ZGVhZTcxIGZyb20gVjUtNi1wYXRjaGVzCisKK2NvbW1pdCAwZDM1YzYwOTU2NGI2NmExZmZlODE1NTZkMzdhZGYwNTAzYzM4OWNlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDEwOjE1OjA4IDIwMTIgKzAxMDAKKworICAgIFByb3ZpZGUgbWlzc2luZyBkZWZpbml0aW9uIG9mIE5FVFNOTVBfUFJJbworICAgICh1c2VkIGluIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYykKKworY29tbWl0IGE3OTE0MWE0MTk5NTNkMDEwYTY5ODllOGI4OGY0ZGYxMjczOTRkMzgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMDk6MTk6MjYgMjAxMiArMDEwMAorCisgICAgSGVhZGVyIGZpZGRsaW5nIGZvciBGcmVlQlNELE9wZW5CU0QsRHJhZ29uZmx5CisgICAgQmFja3BvcnQgb2YgZjdiMGRlMTUxODAwMmM2ZThmOWI5NGVmM2RlYjg4ODJlMWU5MzM4ZSBmcm9tIFY1LTctcGF0Y2hlcworCitjb21taXQgYWRmNzRiZjc1M2QzOTcwMzU3YWZkNjMzODAzMjU2MjQxZDljN2I4NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAwODoyMDo0NiAyMDEyICswMTAwCisKKyAgICBGaXggSVB2NiBUQ1AgJiBVRFAgdGFibGVzLCAqQlNEIHN1cHBvcnQgKGluY2x1ZGluZyBPcGVuQlNEKQorICAgIEJhY2twb3J0IG9mIGNvbW1pdHMgNWNkMTU3MzYyNTQ3MWMwNTgzZTkwODdhZWM2ODAyYjc3MTU3ZDVhMgorICAgICAgYW5kIDUwZDczZjBkNTZmZTIyYzU5MDUzMGIzZTMwNWQ0MWRjZGFjM2NlMDAgZnJvbSBWNS02LXBhdGNoZXMKKworY29tbWl0IGQ5NTU1YWNiOWY0N2MzYWE4ZmRlNGJjMjBhNDRkN2NhNjE4MWE4YTkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBNYXIgMjUgMTg6NDg6MTIgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogQXZvaWQgZGFuZ2xpbmcgcG9pbnRlcnMgKGJhc2VkIG9uIHBhdGNoIDM1MDMyNTkpCisKK2NvbW1pdCA4MmE4YjQ3ZWU5NmU1ZDI5YTJiN2FjM2NhMDA3MjJkNzM3ZDViNDc5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjMxOjU2IDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCA5Y2E4ZDkzOWFiMzkzMzA2YTFkMGYxNDZjOWNiNzBlYTBjYjE5ZDQ5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjMwOjM4IDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCBjZWNkNDg2OWRlYjY4ZjNkNGM3MWU3NjhkNWI0MGRkNTc2NDQ2OTI1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjI5OjMxIDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCBhMWE0NTEzYmQzZTRlNjE0MjAwZjZkYjVhMDJmNjFkNmM4ZWVmYjMyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIE1hciAyOCAwOTo0Nzo0NSAyMDEyICswMTAwCisKKyAgICBEb3h5Z2VuLXN0eWxlIGRvY3VtZW50YXRpb24gZml4ZXMgKGJhY2twb3J0IG9mIGdpdCBjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYSkKKworY29tbWl0IDliZGJjY2ExMjJjMzdkYTMwNGZjNmFhNjkzOTcyOTQ3NWY5MGY1ZmQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgTWFyIDI4IDA5OjMwOjQ5IDIwMTIgKzAxMDAKKworICAgIERveHlnZW4tc3R5bGUgZG9jdW1lbnRhdGlvbiBmaXhlcyAoYmFjay1wb3J0IG9mIEdJVCBjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYSkKKworY29tbWl0IDFmNGE4MjliMTgyNzVlNDk1NmNhOTFlNWVjMzcwZGYwMTVmMDYxMzMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDI3IDIxOjQxOjI0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDk1Njk3OiBTdG9yZSBwZXJzaXN0ZW50IHNubXBUYXJnZXQgdGFibGUgY2hhbmdlcworCitjb21taXQgMWY3NWYzNzdkMGRiMDE3NTRjMGMxNjFkYzQ0MzczMDgxYmVlZjUyMAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgMjcgMjE6MTQ6MDYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogRnJlZUJTRDogUEFUQ0hFUzogMzQ4OTM4NzogSW5zdGFsbCBGcmVlQlNEIDEwIGhlYWRlciBmaWxlIChwbHVzIG90aGVyIG1pc3NpbmcgdmVyc2lvbnMpCisKK2NvbW1pdCAzZDcyYzllNzhmMmFkODE3YzlkMWQ4Mjk3NzMyN2JiYjIwZDYzYWI5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1hciAyNyAyMTowNjozMSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDM0ODc4Njc6IERvbid0IHNraXAgbWlzc2luZyBpZlhUYWJsZSBlbnRyaWVzIChpZkNvbm5lY3RvclByZXNlbnQgRkFMU0UpCisKK2NvbW1pdCAxMjkwNjU3OGFiMzBjZjc3NmQwODBjMGVmMzAyNWIzMDMzNGQ3NjU1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDE2OjE3OjQ1IDIwMTIgKzAyMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogRml4IGV2ZW4gbW9yZSBtZW1vcnkgbGVha3MKKworY29tbWl0IGNjZmQ1Y2E2ZmUxMDMxM2Q2MTgxZDI0YmJiMTc5NzgyNWE5N2RhMTAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTU6NTE6MTYgMjAxMiArMDIwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBFbGltaW5hdGUgZHVwbGljYXRlIGNvZGUKKworY29tbWl0IDlmZGEyNjY4NzIyZjA4ZGRiZmRkNjdhMjIzOWQ4YjAyMWRiNjRhODMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTU6NDg6NDYgMjAxMiArMDIwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBXcml0ZSBhIGxvb3AgYXMgYSBsb29wCisKK2NvbW1pdCBjYmMxOGViNzYzYmE2ZGY2OWVmNzA2NjhhNTRkNzViZjM1ZTc5NTAzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDE1OjI0OjA4IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEZpeCBtb3JlIG1lbW9yeSBsZWFrcworCitjb21taXQgYzc3MjUxOTI0NzhhZWMwMThmYjRhZWZhNjA5NDZlMDRhNDA2YzAwYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxMzo0MzoyNCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBBdm9pZCByZWFkaW5nIGZyZWVkIG1lbW9yeSB3aGVuIGRlbGV0aW5nIGEgcm93IGZyb20gYSB0YWJsZQorCitjb21taXQgYTZiZTczOTU2NmYzMTBkNzQ0MWZkN2Y1NDk4OWUzOTQ0NmY3YTE0MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxMzo0MjoyOCAyMDEyICswMjAwCisKKyAgICBFeHRlbmQgRElTTUFOLVBJTkctTUlCIHRlc3QKKworY29tbWl0IDhhOWI1NzI5MTQ1M2NiOGFlYzI4ZTc2NmM1OTQ3MDFlZDE5YzRmYzYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgMjYgMjE6MDM6NDEgMjAxMiArMDIwMAorCisgICAgRml4IGZvciBEcmFnb25GbHkgMworCitjb21taXQgZTVjOWEzMmY3OWVhYzJlODU1MjdjOWNmMDUwODdjZGFlOWIzNWE2YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciAyNiAyMDo1OTo1MyAyMDEyICswMjAwCisKKyAgICBEcmFnb25GbHkgbmVlZHMgX0tFUk5FTF9TVFJVQ1RVUkVTIHRvIGNvbXBpbGUgaXB2NiBjb2RlCisKK2NvbW1pdCBjZDQzYmMwOWEzOWJkOTdmZjVlNzE5YTJjZTIzMmNlNDI0NjAwYTY1CitBdXRob3I6IERhdmlkIEltaG9mZiA8ZGltaG9mZkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6NDc6MTcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0ggMzUxMDQ1NDogQWxsb3cgdGhlIHVzZSBvZiAwLjAuMC4wLzAgYXMgYWxpYXMgZm9yIGRlZmF1bHQKKworY29tbWl0IGUyZmMxNWY5ZTVhNmUzZTM2YmU1ZjQ4OTYwMWNiZjZiZjczMTkxN2YKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6MjE6MzggMjAxMiArMDEwMAorCisgICAgRml4IFRDUCBzdGF0ZSB2YWx1ZXMgZm9yIERyYWdvbkZseQorCitjb21taXQgNDMyZmUzZGRmNTRmMmM5OGY5MzY5NTk0NjljYjliMDE0ZDU5OWYwNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNToxMDo1MiAyMDEyICswMTAwCisKKyAgICBSZXF1aXJlIHBlcmwgdG8gZG8gcGFzc19wZXJzaXN0IHRlc3QKKworY29tbWl0IDM3ZDI3NzBjZjUwYzk4MDIzZWViYTkwZTI1ZDM3MmJmZjczMTZhZGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2VyLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNTowNjo0MCAyMDEyICswMTAwCisKKyAgICBGaXggVENQIHN0YXRlIHZhbHVlcyBmb3IgRHJhZ29uRmx5CisKK2NvbW1pdCA4NmE5NDhkODY5MWU4ODFkNTU1OTFkY2FiZGRjMjczOWNlNzJiMzBlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAbmJhLWxpbnV4LnNiLnN0YXRzYmlibGlvdGVrZXQuZGs+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6MDE6MzcgMjAxMiArMDEwMAorCisgICAgUHJvcGVybHkgZmluZCBwYXNzIGhlbHBlcnMgZm9yIHRlc3RpbmcuCisKK2NvbW1pdCBmZTI2YTNjNGYyOWYwNDZiZjY1ZWQ1MmU5ZDk0MDU0YjY3NWZiYzRiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTWFyIDIyIDA5OjA0OjQyIDIwMTIgKzAxMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogTGltaXQgc291cmNlIGNvZGUgbGluZXMgdG8gODAgY29sdW1ucworCitjb21taXQgNzQ1YmFmY2RjYzljOGU4NDYxNmQ0ZTI3NGRiMmEzODRiZjIzNGRhMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE1hciAyMiAwODo1NTowNSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBNYWtlIHBpbmcgaW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbnQgb2YgbnRwZCBjbG9jayBqdW1wcworCitjb21taXQgZGE2OTI1ZTY3NjNjYWRiZTAyZjRhOGJiZmU2OGEzNjJlNTM1YWQ1ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMDozODozNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGQgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTU0ZGlzbWFucGluZ21pYl9zaW1wbGUKKworY29tbWl0IGZhNjA2ZGQ3Y2E2YWZmOTMwOGQ0ZThiMDFiYmNkZTE0OGY0NDEyNzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTY6NDk6MjEgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogTWFrZSBwaW5naW5nIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzZXMgd29yaworCitjb21taXQgNjE3YTgzYmE3OTk1NzVjODRjNjZmNmIxYzQ4MGVmNjMzMTYxYTY0YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxNjoyODo0NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggYSBzb2NrZXQgbGVhayB0cmlnZ2VyZWQgYnkgcGluZ2luZyBhIHJlbW90ZSBob3N0CisKK2NvbW1pdCA2MjVmNTVjMjcyZWM2MjgxZTM4ZDhlMzBlYjUzZmQ1MTUxNmIwMGFlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTWFyIDIyIDA5OjU0OjU1IDIwMTIgKzAxMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogQ29udmVydCBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB2YXJpYWJsZSBpbnRvIGEgc3RhY2sgdmFyaWFibGUKKworY29tbWl0IGI0OGYxOWFkNGI0YWE2OGMzZTE2ZTJhNzJkZjM3YjljMGNkMzZjNGEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTY6MjQ6MDcgMjAxMiArMDEwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBBZGQgbW9yZSBkZWJ1Z2dpbmcgc3RhdGVtZW50cworCitjb21taXQgZDc0Y2IzOTY2MTc1ODkyNTYyZjVlM2E5YjE2ODNhY2JhMmMyMmUwNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMTo0NToxOCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggc2V2ZXJhbCBtZW1vcnkgbGVha3MKKworY29tbWl0IDBiMWE3NzY3NDY3OGNjOWExNWJlM2U3NzAwZDNjZWY2NTBlZDAyYzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTI6MDA6MzAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogRG8gbm90IHNlbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGFjayBvdmVyIHRoZSBuZXR3b3JrCisKK2NvbW1pdCAxMzkwMjNjZDNhYjUxNjMxY2MxMGUyODY2ZDcxYWJjZjk5YWU0YzFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTWFyIDIxIDA4OjU2OjA3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IERvbid0IGNhbGwgZXhpdCgpIHVwb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorCitjb21taXQgMTY5YjZhYWE3YjYxODI3Y2MxYWQwYjNhZWVhZTNhNzIyOWRkMjVkOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyMSAwODo1MzoyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggSVB2NiBzb2NrZXQgbGVhayBpbiBlcnJvciBwYXRocworCitjb21taXQgYTBiZTMyYWQwNTNhNzFmYTk2MTM0ZDU1ZTU0MmJiMDdkNGYwMjk3ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMTo0Mzo0NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBBdm9pZCB0aGF0IGhvc3QgbmFtZSByZXNvbHV0aW9uIGZhaWx1cmUgY2F1c2VzIGEgY3Jhc2gKKworY29tbWl0IGJmOWJmZjY0NTU2Nzg3ZDc2NmVlMmVmMmQ1NzhhZmI5MjA3MTlmM2EKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjEgMDg6NTE6NTUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogQ29udmVydCBwcmludGYoKSBzdGF0ZW1lbnRzIGludG8gc25tcF9sb2coKSBhbmQgREVCVUdNU0coKS1zdGF0ZW1lbnRzLgorCitjb21taXQgNWQ3NGMwMTI0NTUyM2E5ZDhkYjFlZGEyN2QxZWZhZTJlYmMxMDRmYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODo0MDowMiAyMDEyICswMTAwCisKKyAgICBOZXcgTUlCOiBWUlJQVjMtTUlCCisKK2NvbW1pdCA1YjM4ZjA2MmI5OWI2ZWYzNjcwOGUyYzdkZTQ5NjVhMzE5MjYxMmU5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjM0OjQ4IDIwMTIgKzAxMDAKKworICAgIEZvciBzYWZldHksIHNpemVvZiB0aGUgcmlnaHQgdmFyaWFibGUgaW4gbWVtY3B5CisKK2NvbW1pdCBlNWY4Mjc4MmRhMDVlZmE3YzBlNmRjMmJmNWE0MWVlMTE4NjhmNDY5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjMzOjIxIDIwMTIgKzAxMDAKKworICAgIEZpeCBmb3IgaHJTV1J1biBkYXRhIGZvciBGcmVlQlNECisKK2NvbW1pdCA4MzI3NTY1ZTgyMzI3MGQxMGE0NTA0NTY4ZWRiZTViNWFlMzIzYTU1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjMxOjU0IDIwMTIgKzAxMDAKKworICAgIENsZWFuIHVwIHZhcmlhYmxlcyBmb3IgT3BlbkJTRC9OZXRCU0QKKworY29tbWl0IDE3MGY2ZjAyN2JmNGY5MTc0YjcwNzM1MzBkYTRkMDdmNDAwYmJhNTgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTg6Mjg6NTggMjAxMiArMDEwMAorCisgICAgTW92ZSBkZWNsYXJhdGlvbnMgaW4gZnJvbnQgb2Ygc3RhdGVtZW50cworCitjb21taXQgZGJiNDU3M2I2OWZhZTg1Y2RjOTMxYjI4OTJiNWNlNGU1YjE2YjMyMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODoyMzozNiAyMDEyICswMTAwCisKKyAgICBSZXF1aXJlIGtlcm5lbF9uZXRic2QgZm9yIE5ldEJTRDYKKworY29tbWl0IGYxMTY4MWYxNWFhZDdkOWE1MmZhMjk4MTJlY2JiNTA3ZjFiN2ZlMjQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgTWFyIDIxIDEyOjM2OjM4IDIwMTIgKzAwMDAKKworICAgIENoZWNrIGZvciBvbGQgdGFyYmFsbHMgKGFuZCB1bnBhY2tlZCBkaXN0cmlidXRpb25zKSBiZWZvcmUgc3RhcnRpbmcuCisgICAgVGhlc2UgY2FuIGNvbmZ1c2Ugc3RlcHMgc3VjaCBhcyAibWFrZSBkZXBlbmRjaGVjayIsIHRoYXQgZG8gYSAnZmluZCcKKyAgICBvbiB0aGUgY3VycmVudCB0cmVlLCBhbmQgd291bGQgZGVzY2VuZCBpbnRvIHN1Y2ggdW5wYWNrZWQgc291cmNlIHRyZWVzLgorCitjb21taXQgNDcwZGNkNGI2YzNmZjExZmYwYTM1MzJhNzM0MGE1NmNmZmQ2OTA5OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTI6MzI6MTMgMjAxMiArMDAwMAorCisgICAgRG9uJ3QgcnVuICJtYWtlIGRvY3M7IG1ha2UgbWFuY3AiIGlmIHRoZXJlJ3Mgbm8gTWFrZWZpbGUgcHJlc2VudAorCitjb21taXQgYzlhYzQyMDM0M2UxNmRmMmI3MDY1ZjViZjI3OTBkZjQ0ZTI0N2ZiYQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTA6MjY6MTAgMjAxMiArMDAwMAorCisgICAgQWxsb3cgZGlzdHJpYnV0aW9uIGFzIHBhcnQgb2Ygbm9ybWFsIE5ldC1TTk1QIHBhY2thZ2VzLgorCitjb21taXQgNTk5OWY2MGM1NzcyM2YyM2YzYzI1NGFmNTdmZGIxMGFmMzAxYThlYgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE1hciAxOCAxOTowMzowOCAyMDEyICswMTAwCisKKyAgICBSZWdlbmVyYXRlCisKK2NvbW1pdCAyNzVkMjA0MDM2YTYwN2UzZGY1MGU4NDQ3ZDRiYzc1NWU5ZGIwMmZkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gQXVnIDI4IDIxOjI5OjAzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSAtLWRpc2FibGUtYXBwbGljYXRpb25zLy0tZGlzYWJsZS1hZ2VudCB0b2dldGhlciB3aXRoIC0tZW5hYmxlLW1pbmltYWxpc3QKKworY29tbWl0IGJkY2NjODc1NzEwMjk1YWFjZjUwZjcxZWIxYzFkMmVlOTdmMzM2ZmUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXIgMTYgMjA6MTA6NTggMjAxMiArMDEwMAorCisgICAgRG8gbm90IGRlY2xhcmUgdGhlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3BhcXVlX3NwZWNpYWxfdHlwZXMgdW5sZXNzIHRoYXQgb3B0aW9uIGlzIHNldC4KKworY29tbWl0IGI4MGE2N2RhMDUyYWRjYTFiNWE2NDRkYjgzYTc4MmUxNWMyMjM3YzMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXIgMTYgMTk6NTA6MDMgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgdGhhdCB0aGUgZGF0YSBleGlzdCBiZWZvcmUgdHJ5aW5nIHRvIHJlYWQgaXQKKworY29tbWl0IGVmYWU4NmJiYTU5NjI0OTFkNDJiNzdiOTM1MTkxYTNlYjI1ZGQ5MzkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBNYXIgMTQgMDE6MDU6MzMgMjAxMiArMDEwMAorCisgICAgUGFydGlhbGx5IHJldmVydCAiTWVyZ2UgcmVtb3RlIGJyYW5jaCAnb3JpZ2luL1Y1LTctcGF0Y2hlcycgaW50byBWNS03LXBhdGNoZXMiCisgICAgCisgICAgQ29tbWl0IGQzNWExODYwMjE3ZTcyM2U0Zjg2NmRkOThlZjY2MjE2NjU5MzRjNGEgYWNjaWRlbnRhbGx5IHJldmVydGVkCisgICAgCisgICAgNGEyZTViY2Q1NmNkMmFmYjM2ZWIxNWQ3NTRlMmZlZTg4OGRkNTBjMCAoaHJoX3N0b3JhZ2UgaXMgYSBwcm9wZXIgcmVwbGFjZW1lbnQgZm9yIGhyX3N0b3JhZ2UpCisgICAgMGRkMWU1NDU1N2QxYmE0OThiNTVkMDE3YjBhOTNlOGNjZjliZDUyMiAoQ0hBTkdFUzogc25tcGQ6IFVEUC1NSUI6IFJlcG9ydCB0aGUgcHJvcGVyIGFkZHJlc3MgaW4gdWRwTG9jYWxBZGRyZXNzKQorICAgIDUxMTZkNDgzNzhlY2YwM2U3MjJmMzAxMGFkNDdiZjIyYTNmYmNiOGMgKFJlZHVjZSBzY29wZSBvZiBwcmVmaXhfdmFsIHN1Y2ggdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCB3YXJuIGFib3V0IGFuIHVuc2VkIHZhcmlhYmxlKQorICAgIDEwZjU2NmY0ZDRjYmIzZTIwNTAyM2MyMzY2OTI4OWU0YmZkMDg5Y2IgKHBlcmwvU05NUC9TTk1QLnhzOiBGaXggYSBjb21waWxlciB3YXJuaW5nKQorICAgIAorICAgIGFuZCBwYXJ0IG9mCisgICAgCisgICAgNmU3NGQ2NGY4NWE1OWQ1MGU0NjFkYjRjMzRhYzc2ZjlkZTQ2OGJmYiAoQXZvaWQgdXNpbmcgZ3JlcCBvcHRpb25zIC1xIGFuZCAtdyBiZWNhdXNlIGdyZXAgaW4gU29sYXJpcykKKyAgICAKKyAgICBUaGlzIHJldmVydHMgdGhvc2UgcmV2ZXJ0cy4KKworY29tbWl0IGFhZWRkNTljYzJkYTcwMTUyN2RjMmQyNjFkNGU5Zjg1ZjE2ZTc1MDQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBNYXIgMTEgMjA6NTc6MzggMjAxMiArMDEwMAorCisgICAgQWxsb3cgbWFrZSB0ZXN0IHdoZXJlIHRoZSBzb3VyY2UgcGF0aCBjb250YWlucyB0aGUgc3RyaW5nIE5ldC1TTk1QIHRvIHN1Y2NlZWQuCisKK2NvbW1pdCA0Yjk0ZDc5NjkxOGE0ZWVhZTY4YWIyMWFhNTNkNDQ0YThiNWMyOTIxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgTWFyIDkgMDg6MDQ6NTkgMjAxMiArMDEwMAorCisgICAgVW5icmVhayBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDQKKworY29tbWl0IDEwZmU2YjgzMzI0YWQzN2QxOGI5MzdjYzhjNmRlOTRkZTUzNGQwMzUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTM6MDQ6MDcgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IGUxMTIyZWRjMWE1ZmU3OTc2YjA2NTA0NDEzNGQzOWU3ZGI1OTg1ZWEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTI6NDM6MTkgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IGE2MTNkM2E4MzQ5MTIyMDZkMWJhNTk3MWU0NDFhM2VhNmIzNmFmMjMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTI6MzM6MDMgMjAxMiArMDAwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IDBlZjM0ZTY1MTlkZmNiODJjOTdkZjg0Mjc1NDdjMDhkY2Y4MWU2OWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDggMTA6MTE6MzAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIHNubXBkICctZCcgb3B0aW9uLgorICAgIAorICAgIE5vdyBpdCBkdW1wcyBwYWNrZXRzIGFnYWluLgorCitjb21taXQgOGU2OTc0MmYxNDNlNGZjMTExOTZlNWIyZWQ2NmM4ZjdmNTNmZDAyZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgNiAwOToyNDoyMSAyMDEyICswMDAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnByZTEKKworY29tbWl0IGM0ZTAwYjhjM2UxMDEwY2RjYWI1ZTZjMDJkNjBkNzVkZjljNmRjZjIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDYgMDk6MjQ6MDUgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IDM5NDkwMTA0YTNhYjU4MjM1YWFjZTJmOWQ4NzFjMjY2ZGM0NDg1ZWUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWFyIDUgMDk6MDY6NTIgMjAxMiArMDAwMAorCisgICAgTWFyayB0aGUgY2hhbmdlcyBtYWtlIGFzIHBhcnQgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcyBhcyBzcGVjaWZpYyB0bworICAgIHRoZSBwYXJ0aWN1bGFyIGJyYW5jaCBiZWluZyByZWxlYXNlZC4gIFZlcnNpb24gdGFncywgY2hhbmdlbG9nIGVudHJpZXMKKyAgICBhbmQgdGhlIGxpa2Ugc2hvdWxkbid0IHByb3BhZ2F0ZSB0byBsYXRlciBicmFuY2hlcy4KKworY29tbWl0IDRhMmU1YmNkNTZjZDJhZmIzNmViMTVkNzU0ZTJmZWU4ODhkZDUwYzAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAyMDo1OTozOCAyMDEyICswMTAwCisKKyAgICBocmhfc3RvcmFnZSBpcyBhIHByb3BlciByZXBsYWNlbWVudCBmb3IgaHJfc3RvcmFnZQorCitjb21taXQgY2U4NTgzMjkzMmNjZDkxNmM0MjMxOTExNGM0MDg4NWE0NjZhOWQwZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA1IDIwOjU2OjQwIDIwMTIgKzAxMDAKKworICAgIE1vcmUgZml4ZXMgZm9yIFNvbGFyaXMgc2gKKworY29tbWl0IDBkZDFlNTQ1NTdkMWJhNDk4YjU1ZDAxN2IwYTkzZThjY2Y5YmQ1MjIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxNTowODoyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogVURQLU1JQjogUmVwb3J0IHRoZSBwcm9wZXIgYWRkcmVzcyBpbiB1ZHBMb2NhbEFkZHJlc3MgaW5zdGVhZCBvZiAwLjAuMC4wLiBNYWtlcyB0ZXN0IFQxNjBzbm1wbmV0c3RhdCBwYXNzIGFnYWluLiBGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdCBjNzZmYjk2ZjY1ZTMzYmEyZmQyMTJhOTIxZThjMzg2MTU1ZWU1YzdhLgorCitjb21taXQgNTE4OTE3ZTlmMzlmN2E5ZDNjM2JmM2E4NjVlOGFjMGUzMDI2ZDYwMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDE0OjA0OjU0IDIwMTIgKzAxMDAKKworICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOiBGaXggc291cmNlIGNvZGUgaW5kZW50YXRpb24KKworY29tbWl0IDI2NTE5MDljY2NlYWJmY2ZhZGFmOTQyYzAyNDUwZTI4ZmU4MzdkYzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBOb3YgOSAxMjowNDowNCAyMDEwICswMDAwCisKKyAgICBQYXNzZXMgbm93IG9uIE1pbkdXIHRvby4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTY1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IGU0MWYxMTVlNDAzMDRjOTQxYmExN2Q2N2UyNDcxMDcyMmQ5MDc0MWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxMzozOToxNyAyMDEyICswMTAwCisKKyAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBBdm9pZCB1c2luZyBncmVwIG9wdGlvbnMgLXcgYW5kIC1xIGJlY2F1c2UgZ3JlcCBpbiBTb2xhcmlzJyBkZWZhdWx0IHBhdGggZG9lc24ndCB1bmRlcnN0YW5kIHRoZXNlLgorCitjb21taXQgNTExNmQ0ODM3OGVjZjAzZTcyMmYzMDEwYWQ0N2JmMjJhM2ZiY2I4YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDEwOjQ3OjIwIDIwMTIgKzAxMDAKKworICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzogUmVkdWNlIHNjb3BlIG9mIHByZWZpeF92YWwgc3VjaCB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IHdhcm4gYWJvdXQgYW4gdW5zZWQgdmFyaWFibGUgaWYgaXQgaXNuJ3QgbmVlZGVkLgorCitjb21taXQgNmU3NGQ2NGY4NWE1OWQ1MGU0NjFkYjRjMzRhYzc2ZjlkZTQ2OGJmYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjIyOjMxIDIwMTIgKzAxMDAKKworICAgIHRlc3RpbmcvZXZhbF90b29scy5zaDogQXZvaWQgdXNpbmcgZ3JlcCBvcHRpb25zIC1xIGFuZCAtdyBiZWNhdXNlIGdyZXAgaW4gU29sYXJpcycgZGVmYXVsdCBwYXRoIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGVzZSBvcHRpb25zLgorCitjb21taXQgMTBmNTY2ZjRkNGNiYjNlMjA1MDIzYzIzNjY5Mjg5ZTRiZmQwODljYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDEwOjQ3OjM5IDIwMTIgKzAxMDAKKworICAgIHBlcmwvU05NUC9TTk1QLnhzOiBGaXggYSBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCA0NGFhMjY1ODkxY2Q1NjNmN2Y0MTE0ZWYyNWRjZjdhYWYzYjE0ZTlhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCBkYWU0ZTE2YmU4NjExNzg2MWY2M2QxYTJmOTgxYWQzNjE0MThmNWM2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCAyOGY2MjI2ZjJlMjI4YjhjYTI0ODQ4OTczNWY4NjUwMmIyY2NlMGExCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCA0MDAyMmE2OTc5NTgyNTljY2ZiYjNmZWQ0NGViM2M0NzJmNWU4MzdlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWFyIDQgMTA6Mzc6NDEgMjAxMiArMDEwMAorCisgICAgU29sYXJpcyBzaCBkb2VzIG5vdCB1bmRlcnN0YW5kICJ0ZXN0IC1lIgorCitjb21taXQgNzczYWYwYzQyZTA3N2JlYmRhZWNmMWMwY2FmMzkzMjg1YTc2ODhmMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAzIDE3OjE5OjMwIDIwMTIgKzAxMDAKKworICAgIENsZWFuIHVwIG5zcm9sbHVwIGNvbXBsaWNhdGlvbnMKKworY29tbWl0IGVlNzEwNDljM2UyMWMxZDBlMzQyNDI5NzEzNjY1MmJiZTBlMzlkODUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMyAxNjo0OTo0MSAyMDEyICswMTAwCisKKyAgICBtaWJncm91cC9pY21wLmM6IGFkanVzdCBpZmRlZnMgdG8gbWFrZSBpdCBjb21waWxlIG9uIEJTRCdzCisKK2NvbW1pdCBjZTk2MDAzNjFlNjY1ZGRlMTdhZjlkOGFiMTZkN2NlODVkYzA1NjQzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6Mzk6NTUgMjAxMiArMDEwMAorCisgICAgZG90M1N0YXRzVGFibGUgaGFzIGJ1Z3MgOi0oCisKK2NvbW1pdCBkZmZhY2Y2ZmEwNzU1ZTE3MDBjYmFjMjViODQ0MTg1YWJkODA3YTBhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6Mzg6MTAgMjAxMiArMDEwMAorCisgICAgcGFzc3BlcnNpc3QgdGVzdCBuZWVkcyAvdXNyL2Jpbi9wZXJsCisKK2NvbW1pdCA4NzI2OTk1YzdhOGFlZjY3NGM0ZjE2NGIxODcxYzM3YmJkY2RhZDUwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzY6NTggMjAxMiArMDEwMAorCisgICAgZ3JlcCAtdyBmYWlscyB3aXRoIE9wZW5CU0QgYW5kIFNvbGFyaXMgMTAtNjQKKworY29tbWl0IDFlYjQ3NDViMjNjYzNhODM5ODY0ZTdmNmVhMjgzNTViMDU2NmViNjcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMTozNTo0OSAyMDEyICswMTAwCisKKyAgICBTb2xhcmlzIG5lZWRzIC91c3IveHBnNC9iaW4vZ3JlcCB0byB1bmRlcnN0YW5kIC1xCisKK2NvbW1pdCA5OTU0YjRiNzQxZmQ4YzYzZDYxMjhiZDA1MjcyOThjOGU0ZTk4OWZjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzQ6NDUgMjAxMiArMDEwMAorCisgICAgTWFrZSBzdXJlIHdlIGhhdmUgdGhlIHByb3BlciBzcmNkaXIgZm9yIG91dC1vZi1zb3VyY2UgYnVpbGRzCisKK2NvbW1pdCA3ODM2OTAwMmJlMjcxMWYwYWE4NzZiNjRhNGUxMGIwOTBjYzI0MWNkCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzM6MzEgMjAxMiArMDEwMAorCisgICAgTm90IGFsbCBtYWtlIHZlcnNpb25zIGRlZmluZSAkKFJNKQorCitjb21taXQgOTQyNDViMjlhM2NkYTg5NDc1YzZlYWI1ZDk0OTNjNjY1N2ZmMzhlMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjI0OjI0IDIwMTIgKzAxMDAKKworICAgIE1ha2UgYXV0b2NvbmYgMi42OCBoYXBweQorCitjb21taXQgNDRhY2Q2YzI4NWZiNTYxNGI0Yzk2MTFiMWFiZGVjYTlkZDI4ZTRiYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjEyOjQ3IDIwMTIgKzAxMDAKKworICAgIEZpeCBzcGVsbGluZyBvZiBtaWIgbW9kdWxlIGZzeXNfZ2V0ZnNzdGF0cworCitjb21taXQgMWZhMWZlZTM2OTNmNjdiODIwMjIzODA2YjNkNzNhZmQ0YzUwZWMxOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE1hciAyIDAxOjM3OjIwIDIwMTIgKzAxMDAKKworICAgIFNpbGVuY2UgYSBjbGFuZyB3YXJuaW5nLgorCitjb21taXQgOTMyNjNiOThhNWRiMzQ0Y2YyYzRkNDg5YzQzOTcxZTdiMjljZGIwMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMzozNzoyMCAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucHJlMQorCitjb21taXQgNWExNzU0MjhiOTczZDJlYTg1NTNlMjlmZWNmOTRjZjE1NjZhYTg1OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMTo0ODoxOCAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucHJlMQorCitjb21taXQgMzY0Mjc2YTFjNWFhNjZjYWEyM2ViNWI3ZjExMWZkZWI1YWY3MWZhNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMTo0NToxMCAyMDEyICswMDAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS41LjIucHJlMQorCitjb21taXQgNzM1OTgzNDAxNzJlZmY3NTcyOWE2ZDU3MTkyYjgxNzFkNWJiZjAwZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMDo0Mjo1NiAyMDEyICswMDAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNS4yLnByZTEKKworY29tbWl0IGYzMjE0NDAyNjcyY2ExOTlmZDUzMWU2NjEyMmJmOTZjNGQ5YTRlYjcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDEgMTA6NDI6MzkgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnByZTEKKworY29tbWl0IDJlNzRhY2I2ZjE5ZTQ3MjljZWRlMGFiNDNlOTMxOTYxY2IyM2FhZWEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBNYXIgMSAwOToxODozOSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogRG8gbm90IGluc3RhbGwgdGhlIHV0aWxfZnVuY3Mgc3ViaGVhZGVycyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiA1LjcKKworY29tbWl0IGI3MTA5NjQ2Yjk1YTcwNzEzZDFhZDk5MWQ0MWJjY2Q1N2MwYmIzZWIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBNYXIgMSAwODo0ODo0OCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogSW5zdGFsbCB1dGlsX2Z1bmNzIHN1YmhlYWRlcnMgaW50cm9kdWNlZCBpbiA1LjYKKworY29tbWl0IDQzMmNiYjdhNTUwMWFiOTBkNjZkMGE4M2U3MzFlNzM0M2JjMDRiMzcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBGZWIgMjUgMTA6MTM6MTUgMjAxMiArMDEwMAorCisgICAgQ29ycmVjdCB0eXBvcworCitjb21taXQgNmE2YzliYmM3NTg0ZjE5NmExMTg1Y2MxOTM1MjA0ZjEyMDY4MTFlZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEZlYiAyOSAwODo1NTozNSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogSW5zdGFsbCB1dGlsX2Z1bmNzIHN1YmhlYWRlcnMKKworY29tbWl0IGQ1MTVlMmE2ZTRjMmExYzRkODQ3MzRjYzdiMmQwYjJmYzVhODk0YWQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDE1OjU2OjIxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDg3OTE5OiBGaXggY29tcGlsYXRpb24gd2hlbiBjYWNoaW5nIGlzIGRpc2FibGVkCisKK2NvbW1pdCBhZjgzNjhlZDg4OThhNzhkMDg2OGI0N2FmNDZiYzlkYjA3ZDFjNzY0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxNTo1MDo1NiAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNDE0NzczOiBFbmNvZGUgaW50ZWdlciB2YWx1ZSB1c2luZyBBU05fSU5URUdFUgorCitjb21taXQgMTllMjcxNTgwN2ZlMDZmZDBiYWVkZjg4MTY1MDExYWVlOTMzZTc1NQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTQ6MDU6MzQgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogbWFuOiBCVUdTOiAzNDkwNzA4OiBDbGFyaWZ5IHVzZSBvZiBjb21tb24gY29tbWFuZC1saW5lIG9wdGlvbnMKKworY29tbWl0IDY1Zjc5NjJmOTMyYzliNzVjNWJiYmIwNDdkMWUyNmFlNjA5NzhlNTMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDEyOjIzOjM0IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUdTOiAzNDg5NjMxOiBGaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIFVDRCBtb25pdG9yaW5nIGZsYWcKKworY29tbWl0IGFjMTY2MDUxYjZhMDkyZGQ0YTU5NDMyNmVjODVlMmY2OTliNjI1NDcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDExOjU3OjQxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEJVR1M6IDM0NzQ1OTA6IERvbid0IG1hdGNoIHVuZGVyc2NvcmVzIHdpdGhpbiB0aGUgc291cmNlIHJvb3QgZmlsZW5hbWUKKworY29tbWl0IDg3OWJmNzA3OWQzNGZhNDZmNmZjZjU0YTAxYzg1MDBiZWFlY2U1OWEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDEwOjQ0OjQxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUdTOiAzNDYwMzY0OiBGaXggdXNlIG9mIGJsb2NrIGZhY3RvciB3aGVuIGRldGVjdGluZyBlcnJvciBjb25kaXRpb25zCisKK2NvbW1pdCAwMzRmMWM1NzJmNjgzZWE0Mjg1ODMwNzQ0NzFlNWQ1ZDEzYjUxODM3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMDoyMjoyMCAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCB0ZXN0cyB3aGVuIGNvbmZpZ3VyZWQgdXNpbmcgLS1lbmFibGUtcmVhZC1vbmx5CisKK2NvbW1pdCAzNjQyM2UyMTBiZmI2NWVmMTIxYzZhNjZhZWM0MzhjN2MyMzdkM2RmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMDowMzoyNSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NTQxNjg6IGNvbmZpZ3VyZTogRml4IGJ1aWxkaW5nIHdpdGggLS1lbmFibGUtcmVhZC1vbmx5CisKK2NvbW1pdCBlZWQwYmNiYzQzZmVhMTgyNTlmMGY2M2IyMDgxYjZkMTA1MzVhMDUyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAwOToyNzoxMSAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCBiYWJ5LXN0ZXBzIHdoZW4gY29tcGlsZWQgd2l0aCAtLWRpc2FibGUtc2V0LXN1cHBvcnQuCisgICAgSW5zcGlyZWQgYnkgYnVnICMzNDU0MTY4CisKK2NvbW1pdCBlYzZhMjMwMzBlNWEyMDcyYzE5YzE4YzFkOWMxMjQzODdkYTU2YjdiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDI3IDE4OjQyOjU4IDIwMTIgKzAwMDAKKworICAgIEFkZCAtbHJ0IHRvIE5FVFNOTVBMSUJTIHN1Y2ggdGhhdCBjbG9ja19nZXR0aW1lKCkgY2FuIGJlIGZvdW5kCisKK2NvbW1pdCBmMTMzMjA1MDAyOTRiYjI0MGY2M2M2ZGQ3ZDJlOWEyMjA4ZWI3NDBkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEZlYiAyNyAxNjo1Mjo1MSAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCB0ZXN0cyB3aGVuIGNvbXBpbGVkIHVzaW5nIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorCitjb21taXQgYzQyNzZiNjIzMmMyOTE0NWMwMzk4ODRlNmI1YTZiNmRhNGI5MzgzNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBGZWIgMjcgMTU6NTQ6NDUgMjAxMiArMDAwMAorCisgICAgT21pdCBTRVQtcmVsYXRlZCBjb2RlIHdoZW4gY29tcGlsaW5nIHdpdGggLS1kaXNhYmxlLXNldC1zdXBwb3J0IChpbnNwaXJlZCBieSBwYXRjaCAjMzQyNDkzMCkKKworY29tbWl0IDAxYzkzMGVkY2MyNTcwMGQ2YjVmYjAzNzZmNTVhMjY0MjVlMTNmYjAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gRmViIDI3IDE1OjE3OjIyIDIwMTIgKzAwMDAKKworICAgIE9taXQgU0VULXJlbGF0ZWQgY29kZSB3aGVuIGNvbXBpbGluZyB3aXRoIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorICAgIChpbnNwaXJlZCBieSBwYXRjaCAjMzQyNDkzMCkKKworY29tbWl0IDk0ODRkODMyMDNjNGUyZDgyMDQxNmJlNjY1ZmE4MzNhYTcwNDQ0ZDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMjQgMTQ6MDA6MzIgMjAxMiArMDEwMAorCisgICAgUmV3b3JrIGNvbW1pdCBiNGExOTUwNWEwNTgxNmU5NGUwMWRlOTdiZjk5YWMzN2ZjZGM2ZDIzLgorCitjb21taXQgMmI3ZjEzNDk1MjI4NjM1ZDgxNmU1OGIyMTc0ZGMxMjRkZDBjZjM5ZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEZlYiAyNCAwNzo0MzoyMiAyMDEyIC0wODAwCisKKyAgICBzZXQgTUVSR0VfQVVUT0VESVQgYmVmb3JlIG1lcmdpbmcgdG8gYXZvaWQgdGhlIGZ1dHVyZSBnaXQgMS43LjEwIGZvcmNlZCBtc2cKKworY29tbWl0IGUxYjkxMGIwYmU5MzQzNTg2YWU5ZWRiYTZmNDYwNDBhZjMxNWZjZGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjMgMTA6Mjc6NTQgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IGluaXRfYWdlbnQoKSArIGluaXRfa21lbSgpOiBSZXR1cm4gYW4gZXJyb3IgdmFsdWUgaW5zdGVhZCBvZiBpbnZva2luZyBleGl0KCkgaWYgYWNjZXNzIHRvIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBpcyBkZW5pZWQKKworY29tbWl0IDQ2M2VlZDIxMjBmOWQxOTFiYzIyNjczNDk2YTQ5ZTgxNzQ2NjRlNGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjMgMTA6MDM6MzEgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlIG9ic29sZXRlIHN5bWJvbCBORVRTTk1QX0VYSVRfT05fQkFEX0tMUkVBRAorCitjb21taXQgYzM2YWI3MWE0ZTA5NmYxNmNjNWE1NTUzM2YwODBjOWE5NDAwOTkxNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMyAwODo1Mzo1NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBGcmVlQlNEOiBzbm1wZCArIGFwcHM6IFNlbmRpbmcgVURQIHBhY2tldHMgd29ya3MgYWdhaW4gZm9yIG5vbi1yb290IHVzZXJzCisKK2NvbW1pdCBlZGViZGRiYTkzMGY4YjE0NzJmYTBiZDIwZmM0MTNlZjhjZjQ2NGEyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgRmViIDIxIDExOjMxOjQ2IDIwMTIgKzAxMDAKKworICAgIHRlc3RpbmcvUlVOVEVTVFM6IEZpeCBhIGJhc2hpc20KKworY29tbWl0IGI0YTE5NTA1YTA1ODE2ZTk0ZTAxZGU5N2JmOTlhYzM3ZmNkYzZkMjMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgMjAgMTY6NTg6NDcgMjAxMiArMDEwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0ICVsZCB2ZXJzdXMgdGltZV90IG9uIHN5c3RlbXMgd2hlcmUgdGltZV90IGlzIGEgc3lub255bSBmb3IgbG9uZyBsb25nIGluc3RlYWQgb2YgbG9uZy4KKworY29tbWl0IGQ4OTc4ZWNjODIxMWJlN2MxZTc5MDVmMWUyMTViYjA2ZGVkMjY2YjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBGZWIgMjEgMTI6MzI6MjUgMjAxMiArMDEwMAorCisgICAgRml4IHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jIGZpbGUgaGVhZGVyCisKK2NvbW1pdCBhYTc2NmQxOTZlNTI4N2Y2Y2E3OWI1OGEzNDViMDI0MjYwYWJhMzU0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDIwIDE3OjA3OjEzIDIwMTIgKzAxMDAKKworICAgIElGLU1JQjogZG8gbm90IHRyaWdnZXIgdW5kZWZpbmVkIGJlaGF2aW9yICg+PiAzMiBvZiBhIDMyLWJpdCB2YXJpYWJsZSkgd2hlbiB1cGRhdGluZyBhIGNvdW50ZXIgYW5kIGlmaV9pcGFja2V0cyBpcyBhIDMyLWJpdCB2YXJpYWJsZQorCitjb21taXQgYzNmYjZkZDllNmI5OWU5NTQyNDkzMTg4OTg3ODcxZmM1MDE3Y2IzYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMyAwOTo0NTo0NSAyMDEyICswMTAwCisKKyAgICBGaXggYSBjb21waWxlciB3YXJuaW5nIG9uIHN5c3RlbXMgd2hlcmUgbW9kZV90IGlzIHVuc2lnbmVkCisKK2NvbW1pdCBmOGEzZWYwZDNkNGU1MzAyNzk5MDAxMDEwNDliOGRlOThhNDRhNmZiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NDg6NTIgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYiArIHNubXBkICsgc25tcHdhbGs6IEF2b2lkIHRoYXQgc3lzdGVtIGNsb2NrIGNoYW5nZXMgKGUuZy4gYnkgbnRwZCkgYWZmZWN0IGNvZGUgdGhhdCBuZWVkcyByZWxhdGl2ZSB0aW1lCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSByYW5nZSBvZiB0aGUgU05NUHYzIHZhcmlhYmxlIHNubXBFbmdpbmVUaW1lIGlzIDAuLjIxNDc0ODM2NDcgb24gYWxsIHN1cHBvcnRlZCBzeXN0ZW1zIGluc3RlYWQgb2YgMC4uNDI5NDk2NzIgb24gc29tZSBzeXN0ZW1zIChpLmUuIHdyYXBhcm91bmQgYWZ0ZXIgNDk3IGRheXMpCisgICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygpLCBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKCksIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCksIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKQorICAgIENIQU5HRVM6IHNubXBsaWI6IERlcHJlY2F0ZSBhdGltZV9kaWZmKCksIGF0aW1lX25ld01hcmtlcigpLCBhdGltZV9yZWFkeSgpLCBhdGltZV9zZXRNYXJrZXIoKSwgbWFya2VyX3R0aWNrcygpLCBuZXRzbm1wX21hcmtlcl91cHRpbWUoKSwgbmV0c25tcF90aW1ldmFsX3VwdGltZSgpLCB0aW1ldmFsX3R0aWNrcygpLCB1YXRpbWVfZGlmZigpLCB1YXRpbWVfaGRpZmYoKSBhbmQgdWF0aW1lX3JlYWR5KCkuCisgICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlIHRoZSBuYW1lcyBvZiB0aGUgc3RydWN0IHRpbWV2YWwgbWVtYmVycyBvZiBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3ZXJlIHVzZWQgdG8gc3RvcmUgYSB3YWxsIGNsb2NrIHRpbWUgYnV0IHRoYXQgZG8gbm93IGNvbnRhaW4gYSBtb25vdG9uaWMgY2xvY2sgdmFsdWUKKworY29tbWl0IGMxOTc2MGYzMzMzYzkyZmFjNWQ1MGU5NzY4Y2RmOTM5MjE4YmM0ODcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBGZWIgMTUgMDk6NDU6MDMgMjAxMiArMDEwMAorCisgICAgc25tcGxpYi9zbm1wdjMuYzogRml4IHNvdXJjZSBjb2RlIGluZGVudGF0aW9uCisKK2NvbW1pdCBhNmRiMjM5OTQ1ZTE5NWRlNWE5MGZhMTgzNzAwYjI3YTZlY2IyOGQzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDcgMDA6MTE6MTQgMjAxMiArMDEwMAorCisgICAgRml4IHBvc3NpYmxlIG1lbW9yeSBsZWFrIGZyb20gcmVjZW50IGRlY2xhcmF0aW9ucyBwYXRjaAorCitjb21taXQgMGZiYmI5YTllMjkwNmE3YWY5NTY5NTcwNjFkNDg1ODc0NDYyYWVhOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiA2IDIwOjQzOjA0IDIwMTIgKzAxMDAKKworICAgIERvIG5vdCBtaXggZGVjbGFyYXRpb25zIGFuZCBzdGF0ZW1lbnRzCisKK2NvbW1pdCBmMzA4ZDViYWZiMDVkNzhlZDQwMzBjNGVjZmYzMjRiNmNiZGE2ODBmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTU6MjU6MzAgMjAxMiArMDEwMAorCisgICAgRml4IHR3byBjb21waWxlciB3YXJuaW5ncyBpbiBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYworCitjb21taXQgNDZmMGZjMWI3ZmMyNmEyMjU3NjNiYzY1Y2NhNTIwYTFjNTlmMDI1MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiA2IDIwOjU0OjMyIDIwMTIgKzAxMDAKKworICAgIHNlbmRtc2cgZG9lcyBub3QgbGlrZSBJUF9TRU5EU1JDQUREUiBpZiBhZGRyIGlzIElOQUREUl9BTlkKKworY29tbWl0IGRlYmFjNDk4ZmU4NDEwMTEwMTA3YTJmZTY0ZjhhZmI3NDhlZGFhMDcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDYgMTY6NDg6MDkgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogYWRkZWQgT0NGUzIgKE9yYWNsZSBDbHVzdGVyIEZTKSB0byBoclN0b3JhZ2VUYWJsZSBhbmQgaHJGU1RhYmxlCisKK2NvbW1pdCBmYWZjOTljZDg5ZTczZWM3ZTAwYmY3MzYwZDBiNGZhNjE5NDRhNGY0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTg6MzQgMjAxMiArMDEwMAorCisgICAgU2ltcGxpZnkgY2FsY3VsYXRlX3RpbWVfZGlmZigpIGFuZCBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCkKKworY29tbWl0IDdhZjIwMTNkZThiZjFiMzc5YzA3NmRiNGUxMDQ1MDhlMTc4NzRkM2UKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNDo1NTo1OCAyMDEyICswMTAwCisKKyAgICBGaXggb3JkZXIgb2YgZmVhdHVyZSAjaWZuZGVmIGFuZCBEb3h5Z2VuIGNvbW1lbnQgYmxvY2sKKworY29tbWl0IGJiZDY3ZjYzNTMwZjVlZjBiZmM5NDhmYzU4ZGZlNmE5M2Y4Zjg2NzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNToyNTozMCAyMDEyICswMTAwCisKKyAgICBGaXggdHdvIGNvbXBpbGVyIHdhcm5pbmdzIGluIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jCisKK2NvbW1pdCA0MmE2NmFlZmYyNWI5ZTllZjYzNWE0MDRhZDJmNTIxMmY5ZThjZjBkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NDc6NTQgMjAxMiArMDEwMAorCisgICAgUmVuYW1lIHR3byBmdW5jdGlvbiBhcmd1bWVudHMKKworY29tbWl0IDNmZTcyYjNiOTliN2U0YjJiOTgyMzYzZGZjNGYyZDhkMTNmNDA1OTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxMzo0OToyMiAyMDEyICswMTAwCisKKyAgICBDb252ZXJ0IHNubXBfc2VsZWN0X2luZm8oKSBkb2N1bWVudGF0aW9uIHRvIERveHlnZW4gZm9ybWF0CisKK2NvbW1pdCBlOWRiMjY2YWU0OGQwNWE3YTZjYjVkNzFiNGJkZWE3YWQ4MDhlZjVlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTc6NTcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBuZXRzbm1wX2dldF9uZXh0X2FsYXJtX3RpbWUoKQorCitjb21taXQgZDA4MDQ0Y2I5ZTU3MDJmYmY1NDllMTQ0MjVmNDI3OTQyNTlkOGEyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDA5OjM4OjA3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGQgbmV0c25tcF9nZXRfYWdlbnRfcnVudGltZSgpCisKK2NvbW1pdCBhMDVjMjdjMjcxMWNiNDE1ODJhM2I0YzMxZTM4YjBlOTM1MzBiNjJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NTE6MzMgMjAxMiArMDEwMAorCisgICAgRml4IHNwZWxsaW5nIGluIGEgc291cmNlIGNvZGUgY29tbWVudAorCitjb21taXQgOTEwZDdiMGQ5OTE4MzYwOWI5NTI5YjA0YzNmMjkzMzBlYjY2MTAyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE0OjM4OjEyIDIwMTIgKzAxMDAKKworICAgIFJlcGxhY2UgbmV0c25tcF90aW1ldmFsX3VwdGltZSgpIGJ5IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpCisKK2NvbW1pdCA0M2E4M2Y2YzZhOTZjYzIzMTZiNzBlZWNhY2YxMjdlYjY5MTNjN2E3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTk6MTUgMjAxMiArMDEwMAorCisgICAgVXNlIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGluc3RlYWQgb2YgbWVtY3B5KCkgZm9yIGNvcHlpbmcgc3RydWN0IHRpbWV2YWwKKworY29tbWl0IDJmZTU3OWVmYjFjYjNhNzRmODI4MDNjYTMyMzkyOGY2YjhlNGI1YzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMyAxNDowNDowMiAyMDEyICswMTAwCisKKyAgICBNYWtlIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYyBidWlsZCBhZ2FpbiBvbiBub24tTGludXggc3lzdGVtcy4KKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgMzQ1YTFlNDI1NDgxMmNiOWVkYzFkMjc0NDkxYjc2NjgxYTlkYmExZS4KKworY29tbWl0IDg4MWRlNmFiNzM1NTI3N2E1YzExNmEwMDhmYmU1MTMyOTNiMDUwMzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMyAxMDowODoyMSAyMDEyICswMTAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBSbW9uIE1JQiBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgNDYyOTkzM2MwZDNiM2Y5ZjRiYTU4MzUzNGY3OWEzN2ZiOTYzMzgxNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDIwOjA1OjMxIDIwMTIgKzAwMDAKKworICAgIE1vcmUgY29tcGlsZXIgd2FybmluZyBmaXhlcworCitjb21taXQgZTliNWEzZGVlNmY5YWZhYjhiOTBhMjkzOTIwNDA2MzJiMDc1YWQ3YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE2OjU2OjU1IDIwMTIgKzAxMDAKKworICAgIFVzZSBTTk1QX01JTigpIGluc3RlYWQgb2YgbWluKCkKKworY29tbWl0IGFlNDUyYzc3YjQxMTEzOWQ2YjU4MDBmZmNmODhkNDhlOWI0NzkyYTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxNToyMzozOCAyMDEyICswMTAwCisKKyAgICBSZXN0b3JlIGNvbW1pdCBkYmI4Nzk1YTdkZjU5NWYwNjAzZjJlYzYxNzA0Nzk5ZjRjNDgyNjY3LgorCitjb21taXQgYzdkMTFmYTAwZjk5OTVkZGI5ZmUzZDQ5OTRhM2U5NzkwZGEyZTE4OQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE1OjE4OjQwIDIwMTIgKzAxMDAKKworICAgIFJlc3RvcmUgY29tbWl0IGRiYjg3OTVhN2RmNTk1ZjA2MDNmMmVjNjE3MDQ3OTlmNGM0ODI2NjcgcGFydGlhbGx5LgorCitjb21taXQgMDBmZDYyNzIwZWM0NTRmNWE2OTBkZTRmZWJhMDgyMjNjZmIyYzNmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE0OjQ4OjQ0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZDogQXZvaWQgY3Jhc2ggZHVyaW5nIHNodXRkb3duIGR1ZSB0byBpbnZva2luZyBwZXJsX2Rlc3RydWN0KE5VTEwpCisKK2NvbW1pdCBkOWUyMjlkODFhYmVhZjE5MWVmMmNjYjA3Nzg0Mjg4NWMyMzBkNjIyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTQ6NDc6NDEgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlIGEgc3VwZXJmbHVvdXMgZGVjbGFyYXRpb24KKworY29tbWl0IDFlMmUyYWY2Y2FlODMwZjM4MWU4N2EyNDRkMDI5ZWI4NmJmM2ZjY2UKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxMzoyMDozNyAyMDEyICswMTAwCisKKyAgICBwZXJsL1NOTVAvZXhhbXBsZXMvcGluZ21pYi5wbDogQWRkIGVycm9yIGNoZWNraW5nCisKK2NvbW1pdCAyNDFhMTQxZTMxZjE2ODRmYzZjZjcwY2M0YTAwY2NlNjM2ZmQzNTI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTE6Mjg6MzcgMjAxMiArMDEwMAorCisgICAgTWFrZSBjb25maWd1cmUtdGltZSBFVlBfTURfQ1RYX2NyZWF0ZSgpIGRldGVjdGlvbiB3b3JrIG9uIHRoZSA1LjQgYnJhbmNoLgorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCA0NmVhYzAyZTlhMjdiZjRmMzA2OGU3OTVjYWI4OTFmMDVhODQ4ODcwLgorCitjb21taXQgNmQ5ZDE0ZmVhYWEyZDBmZWM2OGI0ZDE1ODk0NGQzMmNiMDRmZjFiYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDExOjEyOjAwIDIwMTIgKzAxMDAKKworICAgIFJldmVydCB0aGUgY2hhbmdlcyB0aGF0IGJyZWFrIHRoZSBidWlsZCBvbiB0aGUgNS40IGJyYW5jaCBmcm9tIGNvbW1pdCBkYmI4Nzk1YTdkZjU5NWYwNjAzZjJlYzYxNzA0Nzk5ZjRjNDgyNjY3LgorCitjb21taXQgOGFiZTQ5ZTMwYzk3Yzg5ODNlODNiNDVhMzVjNzE2ZmU5MWY2NmJlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEZlYiAxIDExOjU2OjU4IDIwMTIgKzAxMDAKKworICAgIEZpeCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGluIHRoZSBESVNNQU4gTUlCIGltcGxlbWVudGF0aW9ucy4KKworY29tbWl0IGY5ZmIwYTUzMzM3NWUxNGRjMzcwMDI1YTBiMmZiYzc2MWJmMjdiZTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAwOTo1NjowMiAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgIkhPU1QtUkVTT1VSQ0VTX01JQjogZml4IGEgY29tcGlsZXIgd2FybmluZyIgYmVjYXVzZSBpdCdzIHdyb25nLgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWE2Yjc5YmMxMjRhN2I3YTg4NWQ3ZTUwMzVhYjA2YWEzZWNlZjYxMy4KKworY29tbWl0IGNhNGE0ZmUyNWVmZDI3MTRmOGYxOTYxYjk3ODU2NjE2NTYzZjQyYzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxMDoyMTo0OSAyMDEyICswMTAwCisKKyAgICAuZ2l0aWdub3JlOiBBZGQgcHl0aG9uL2J1aWxkCisKK2NvbW1pdCAxM2FkYTU2NTU4YjQ0ZTI4ZDEzNTVjMGRjZTFkOTIxZjM3NDZkNTQ4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTo1Mzo0OSAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgIlJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiIgLSB0aGVyZSAqaXMqIE5FVFNOTVBfUFJJbyBpbiBWNS02KyBicmFuY2hlcworICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWE1MjhiZDIyYzc0OTNjYThkNjdlNjc4ZmJmNjE1Y2EwZjYzZWE2ZC4KKworY29tbWl0IGFhNTI4YmQyMmM3NDkzY2E4ZDY3ZTY3OGZiZjYxNWNhMGY2M2VhNmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjEzOjE4IDIwMTIgKzAxMDAKKworICAgIFJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiAtIHRoZXJlIGlzIG5vIE5FVFNOTVBfUFJJbyBpbiBWNS00IG9yIFY1LTUgYnJhbmNoZXMKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIuCisKK2NvbW1pdCAyZmI5OWJlOWFhODZhNmNhMzQ5Yjg2ZDRlZjhiYzcyNmVkOWYyYTgyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNDo1ODozNSAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IGU1YzM1NTg5ZTBiZjQxNmJmZDAzNmJkNDY4ZjQyYWFlYWIyNWU3ODgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjU1OjU2IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgMzQ1YTFlNDI1NDgxMmNiOWVkYzFkMjc0NDkxYjc2NjgxYTlkYmExZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTQ6NTE6MjYgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZXJyb3IgaGFuZGxpbmcgaW4gaW5pdF9pY21wKCkuCisKK2NvbW1pdCBjMzAzNTQ5YTU5ZmE4YzJmMjBhOWQ4YmYxZTk4NWZiYzhhYmRlNmE4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTo0NjoyOSAyMDEyICswMTAwCisKKyAgICBSZXdvcmtlZCBfcmVnaXN0ZXJfZXh0ZW5kKCkgZXJyb3IgaGFuZGxpbmcuCisKK2NvbW1pdCA5YzIwZTI3YTcwMjZmYzAzMGRhM2IzMjhiOWEyZTFiNGYzNjY3MGNkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNToyMToyOCAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDIyZmQwYmZjMmRmMGUxZjYwMjBkYzNjNTBhNzUzZGRmMjhhNDU5OWMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjIwOjIyIDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgNWQ2MWU1N2JhZjU4MGM3ODI1MmMwYWJiMDA5OGMwN2JiMDVhZjE3YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MTc6MDUgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCAzYzNlZWFlODBkNzk2ZjI3NTk3YzkwMWU3ZmYyMDQ2Yzc2OWVmNGI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowODowOSAyMDEyICswMTAwCisKKyAgICBNYXJrIHJvd3JlcV9jdHggYXMgZnJlZWQgc28gbmV4dCBpdGVyYXRpb24gYWxsb2NhdGVzIG5ldyBvbmUgaW5zdGVhZCBvZiByZXVzaW5nIHRoZSBmcmVlZCBvbmUuCisKK2NvbW1pdCBhZjlhYmQ1M2MyMzM3YzkwYTY5MWE3YjA0NGZmM2Y5N2MxMDAzMTYxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowNToxMCAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IGNmOTQ2NWY1NDE4MWU2MmUyMWE5YjEwMjE5MTMxMTA3YTNkMmViZjYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjA0OjA2IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgNzg3MWYyYjA5YjhiNTJmMzRhOWU1Nzc4NDI2NjQ1OTA1MzE2NWJjYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MDI6NTAgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCA3YTM3ZjMzZDMxMGM5NTk4NjA3YmMzMjNkOWJkYmY5MWFhZjcyYzk1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowMDo1MSAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDNlNDVmNzAyNjI0OWU0NTM1MGVkYWFjODUzMzc0MjNhYTBlOTVkOGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjEzOjE4IDIwMTIgKzAxMDAKKworICAgIFJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiAtIHRoZXJlIGlzIG5vIE5FVFNOTVBfUFJJbyBpbiBWNS00IG9yIFY1LTUgYnJhbmNoZXMKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIuCisKK2NvbW1pdCA2MTkzNjc2MmU2NDFjMThkYjc1YWE1MTI1YTMzZTc3NmM2NzdhZGM1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxMToxMzozOSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBmcmVlaW5nIHJlZ2luZm8gdHdpY2Ugb24gZXJyb3IgaW4gYSB0ZW1wbGF0ZSBhbmQgYWxsIGl0cyBpbnN0YW5jZXMuCisKK2NvbW1pdCA0OTY0Mzc0MzA0MTVmYmFmZWIxY2NkNDc3NGYxY2EwMGQ2MjdlYTFmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDExOjA0OjEzIDIwMTIgKzAxMDAKKworICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IEZpeCBjb21waWxlciB3YXJuaW5ncyBpbnRyb2R1Y2VkIG9uIFY1LjYgYnJhbmNoCisKK2NvbW1pdCA1YjRhMjRjZGNlZTFiYzNkODI2MzNjY2FmZWI5NmZjZTk1MzQ5YzU5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDA5OjIyOjI3IDIwMTIgKzAxMDAKKworICAgIHVuaXQgdGVzdHM6IGZpeCBhIDY0LWJpdCBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCBjYmYxYzkxYmFmNzE5MWJlNWZhMjdkODFiY2Y4NzE0MzMxYTJjMTJmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDA5OjIwOjQyIDIwMTIgKzAxMDAKKworICAgIFVzZSBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKCkgdG8gZnJlZSBhIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdC4KKyAgICAKKyAgICBGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdCBkYmYyNmEwNWEwNGVmMjRjNDczNDZlNWFkZGE0OGUzMzg0OThlNzFmLgorCitjb21taXQgYWE2Yjc5YmMxMjRhN2I3YTg4NWQ3ZTUwMzVhYjA2YWEzZWNlZjYxMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiAyMCAwOToyMDozMSAyMDEyICswMTAwCisKKyAgICBIT1NULVJFU09VUkNFU19NSUI6IGZpeCBhIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDNhNzZiNDNlMTFmZmZhZGE2MzJmY2NiODQ4YWI1MDBlODc2YWQ0OGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTggMTY6MjE6MDUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBBdm9pZCB0aGF0IGFuIFNOTVAgc2V0IHdpdGggVXNlRW51bXMgZW5hYmxlZCBjYXVzZXMgYSBzZWdtZW50YXRpb24gZmF1bHQKKworY29tbWl0IDg0ZGVjOWZhOTJiMGFhMmQ1OGViNzAyMDMzMGY0Zjk4ZTUxNTQzMjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTggMTQ6Mzg6MjEgMjAxMiArMDEwMAorCisgICAgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogRml4IG1vc3QgY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IDM4Y2YyMThjM2YxYTcyNzc4NmUyMjdhNWQzZmIxODZmZDBmMWExNWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjUwOjEzIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIHR5cG8KKworY29tbWl0IDQ1NDEyMjI0NDEyMmJmZGI2ZjY3Y2FiMzEyNTZkN2I0NjM3MmU5ZTEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjMwOjE4IDIwMTIgKzAxMDAKKworICAgIEZyZWUgdG1TdGF0ZVJlZiBvbiBlcnJvcnMuCisKK2NvbW1pdCAwMTE5MDIyZGFhNTljNzNiZmVjMGRhMjM4NmQwNjI4ZjE0ZTZkYWI3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxNDowOToxMiAyMDEyICswMTAwCisKKyAgICBGcmVlIGZpbmdlcnByaW50IHdoZW4gaXQncyBub3QgbmVlZGVkLgorCitjb21taXQgMGU4NGNkMzAzYTA4MjY3ZGVjNzhmNmQ4MWM5YmIwN2UzZDgzYTExZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6NDg6MjYgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNjNkYzg0NmE3OTQ5Y2U2OTdiM2UyOGM1NDNkYzExMDVlNjNhMjI1MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MDg6MjggMjAxMiArMDEwMAorCisgICAgRnJlZSBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludC4KKworY29tbWl0IGNlMWYyODRhNjNlYjgxNjQ0YjNlMzI2MDZjYmUzOWI2N2UxZGZmMmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjM3OjA5IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDdlMjE0MTNjYTZmMmVmZDdhM2FmYjYyYzYyYjY0NDg4MWI4YmQxZTcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjQ2OjMwIDIwMTIgKzAxMDAKKworICAgIFByb3Blcmx5IGFsbG9jYXRlIGFuZCBmcmVlIGVuZ2luZUlELgorCitjb21taXQgMzRjOTYyODgyNjA3YzM2MzhhMmZhMjVhMmFjNTMxNDkyZDcxYzc4NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6Mzc6MjUgMjAxMiArMDEwMAorCisgICAgRnJlZSBsb2NhbGx5IGFsbG9jYXRlZCB0bVN0YXRlUmVmLgorCitjb21taXQgZjU3YWU1MzFkYzU2NThhYmNkNjViMTYyNzYxNTUyNTIzOGQxNmQyZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MjA6MjQgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNTM2YmM1NzU1NmMzMTQxNTYxZWE0YTE5NDgxMGIxNjI5MGE2OTFlZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MTU6NDcgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgc29tZXRoaW5nLgorCitjb21taXQgYTA3NzdkMzA3ZGJjYWYyMTllZTAxODRhMGZiYWI5ZDRlNWQ2YWEwYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MDE6NDUgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgOGI5N2E3MWM4ZTc5NTk0MjhlYjRkNGU4ZDkwZTkwOTZkNDNmZjA5ZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTc6MjYgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgMmMxNTA3YzIyMDMwNTQ5YWU2NjBjMGUyMTFmYmRjNWM3NWVjNWM1NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTM6NDcgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNjVmMmI3YmNkNGZlMDM5MDZhYTFhMTE1YWI2MGE4OWI4YWU5MzNkNQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTE6MzYgMjAxMiArMDEwMAorCisgICAgQ2xvc2Ugb3BlbiBmaWxlcyBvbiBlcnJvci4KKworY29tbWl0IDBlNTJlNGY2NmQ0NDc2NmJlYTM3NDczNTU2Yzc4ZTUyMTliOTU0NjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjQ1OjMzIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGRiZjI2YTA1YTA0ZWYyNGM0NzM0NmU1YWRkYTQ4ZTMzODQ5OGU3MWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjQyOjE3IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDc0OGRhODRiMWZkNjU0ZTMzOGJjNzAxZThmOWU1ZGEyMjkxODdmMWMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjMyOjA0IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGViMjE3MTQ2ZmQ1NDAzNmVhNDIwMmJmZWY3OGJiZjc3NGQ3ZTM4MmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjIzOjEwIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDliYTM4ZWVjNjYxMzhlYzFmNjEzZWE4ZDA0ZTE1ODEzMGM3MTIxYmMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE4OjU1IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGQ5ZDkzOGQzMDE4YzI3ZjUzMjc3YmM1ZTU5NTc4NTAwNDkwYzFkMDkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE2OjM4IDIwMTIgKzAxMDAKKworICAgIENsb3NlIG9wZW4gZmlsZSBvbiBlcnJvci4KKworY29tbWl0IGQ1ZTgxN2Q1YmQ1MThkOWFjNmEwZDYwZTBlMTQxZGQ2NGYyN2FkMTkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE0OjEyIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDJhZTY4ZjA1OWRmOWQ3NGIwNzRkMTJmNTljMTg0NzQ2NmVkNTc2Y2QKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjAzOjE3IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGEwMGYzZDQ2MTEyMWI1NDVhZWQ3MmFjMTJiMjQzODc5MWRjZmM0YmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE0OjU4OjM5IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDU5ODg0YmI0ZDM1YWQxMzc0N2ZmYTY3MjM0MzZkY2E1ODdhOWFiNzcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE3OjA5OjEyIDIwMTIgKzAxMDAKKworICAgIEluIGFib3ZlIGNvZGUsIG9sZW5ndGggaXMgY2hlY2tlZCwgc28gbGV0J3MgY2hlY2sgaXQgYWxzbyBoZXJlLgorCitjb21taXQgYmE1ZDUyOTJiMDQzOTNiMGM3ZDdkN2VkOTYxMjQxOTI5NDE4YzZlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTc6MDU6MTQgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyBOVUxMLgorCitjb21taXQgZGEyZDZhNzAyOGExM2I5ZWRmM2E1Yzg0MzE0ZDBmMWZlZWY3NjcxNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6NDQ6NTYgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkZXJlZmVyZW5jaW5nIE5VTEwuCisKK2NvbW1pdCBmODgwNTRhOWI2OWI2ZGUyNzRmN2ExNGE1OWI0NzMyM2U1ZTRlNGM2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjozNzozNSAyMDEyICswMTAwCisKKyAgICBEb24ndCBkZXJlZmVyZW5jZSBjb250ZXh0IGlmIGl0J3MgTlVMTC4KKworY29tbWl0IDdjNGQ0NTllOGYxZjY1MmNjMjA5OGMzZDRjODFkZTkwYTg0ZWQ3MTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjMwOjA5IDIwMTIgKzAxMDAKKworICAgIERvbid0IGRlZmVyZW5jZSBOVUxMLgorCitjb21taXQgZmMxOWI3ZjMzYjU4NzkyN2QyYTAxZTcyZDIzZDIxYjliMTY5NmFiMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MjU6MjYgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgY2xvc2UgTlVMTCBmaWxlLgorCitjb21taXQgNWU5NWNhNjc5MDA3NmI3ODgwNzJhODAxZWU3YzgyOTY5ZDk5NWJjYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MTc6MDkgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkZXJlZmVyZW5jaW5nIE5VTEwgd2hlbiBhIHRyYW5zcG9ydCBkb2VzIG5vdCBoYXZlIGZfZm10YWRkci4KKworY29tbWl0IGVlZDZmNWY5YjlhZTU0ZDJjZWFiNjdhZDg1YWRkZTFmNmE4YTIxZDUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjEzOjEzIDIwMTIgKzAxMDAKKworICAgIFByZXZlbnQgZGVyZWZlcmVuY2luZyBOVUxMLgorCitjb21taXQgNDFjZGU2OGI1ZmE0YjM4ZDgxNDUwY2Y5MWUwODJjZGZhODI1ZTdjZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MTA6MTAgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgaWYgYSByZWdpc3RyYXRpb24gd2FzIHJlYWxseSBmb3VuZC4KKworY29tbWl0IDViNzJhNDA4NTM4NzZhMTg2ZWZjYzAwOTBhNGUzMmMyMzViOWMwNWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjAzOjU4IDIwMTIgKzAxMDAKKworICAgIERvbid0IGRlcmVmZXJlbmNlIE5VTEwgd2hlbiBkaWZmbGVuIGlzIFNNVVhfTUFYX1BSSU9SSVRZICh3aGljaCBpcyBoaWdobHkgdW5saWtlbHksIGJ1dC4uLikKKworY29tbWl0IGZhNmE5MTJlNDFjNWQwZmQyYTYzNjg5NGU4NmI2NDI2YzA3Mzc1YWIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE1OjM3OjQ0IDIwMTIgKzAxMDAKKworICAgIENoZWNrIGZvciBtaXNzaW5nIHZhbHVlIGluIHNldEV2ZW50LgorCitjb21taXQgNDEwYjcxZGE0MjUzODlmZWNjMjVkMTRmNDlmMjM3NTM1ODE1NzZhZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTU6Mjg6NDEgMjAxMiArMDEwMAorCisgICAgRGVyZWZlcmVuY2UgZXJlZyBvbmx5IGlmIGl0IGlzIG5vdCBOVUxMLgorCitjb21taXQgMTg1MjcyZDFhMGI5MTM3NzQxODZmMWI5MTM1YWVhZjYzN2ViZWQ1MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTU6MTc6MjEgMjAxMiArMDEwMAorCisgICAgQXMgcGVyIGFib3ZlIGNvZGUsIHRlbXBsYXRlX3YycGR1IGNhbiBiZSBOVUxMLCBzbyBjaGVjayBpdCBiZWZvcmUgZGVyZWZlcmVuY2luZy4KKworY29tbWl0IDQ4ZTVlYWQzZmQyYzJiMzg1ZGY2OTcyYzY3NTI2ZmY2YmRjMzA3NjgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE0OjQyOjIyIDIwMTIgKzAxMDAKKworICAgIFVwZGF0ZWQgbGFzdCBmaXggdG8gbmV3IGVycm9yIHJlcG9ydGluZyBzdHlsZS4KKworY29tbWl0IGYzM2QzMzYxNWQ2ZDg1ZDAwNzM3MjY0NzNjNDE0NmNiY2RmMTFjZWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE0OjMwOjA3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHNpZ3NlZ3Ygd2hlbiBlbXB0eSBjb25maWcgbGluZSBpcyBwYXJzZWQuCisKK2NvbW1pdCBiNWRmMWVlYjQ3ZWQzNTU5YjZmNGQ5ZWNjY2RiMjQyMTI2ZTZjOTkyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNDoxMTo1OCAyMDEyICswMTAwCisKKyAgICBGaXhlZCAoaGlnaGx5IHRoZW9yZXRpY2FsKSBzaWdzZWd2IHdoZW4gc3AtPnNlY3VyaXR5RW5naW5lSUQgaXMgTlVMTC4KKworY29tbWl0IDZmZWVkNjI5YTcxODk5YzExMzA5Njk1OWQ4NTQ5ZGMxMjAxZThmOWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDEzOjQzOjM3IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIE5VTEwgYW5kIGxlbiBjaGVjayBqdXN0IGluIGNhc2Ugc29tZW9uZSBwcm92aWRlcyB2YWx1ZSA9IE5VTEwgYW5kIG5vemVybyBsZW4gKC0+IE5VTEwgaXMgdGhlbiBkZXJlZmVyZW5jZWQpLgorCitjb21taXQgMzU1YzVhYjI2NGFmMmE2MDIwYTFkOGE5MjNmODBmMTFiOTQyMjk1ZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTM6MzY6NDEgMjAxMiArMDEwMAorCisgICAgRXh0ZW5kIHRoZSBOVUxMIGNoZWNrLCBpLmUuIHJldHVybiBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbW92ZS4KKworY29tbWl0IGRkZDc5NDhhY2FkOTM4Y2Q0Mjk3NDUwNWRkY2E0ZjAzNzIxMTY3MDkKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMTYgMTE6MTE6MjkgMjAxMiAtMDgwMAorCisgICAgdXBkYXRlIHNwYXJ0YSdzIGNvcHlyaWdodAorCitjb21taXQgNDEyNTYwODZhN2E1MDQxNDUzNDE5Y2ZkNmU1NjJjN2I1NWM1NmIwYQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAxNiAxMDozMjowNCAyMDEyIC0wODAwCisKKyAgICBwdWxsZWQgZnVsbCBjb3B5IG9mIGV4dHJhY3RuZXdzIGZyb20gbWFzdGVyCisKK2NvbW1pdCA2MjVhNzBkYmRmZDk5MDJkYTc5ZWZhMjkzZmU2ZDJhYzhjY2YyYjJlCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDE2IDEwOjI0OjE5IDIwMTIgLTA4MDAKKworICAgIHVwZGF0ZSB0byBjaGFuZ2UgdG8gdGhlIG5ld2VyIGxvZyBnZW5lcmF0aW5nL3BhcnNpbmcKKworY29tbWl0IDYyZTMyYjEzMDg5YjI5ZWRjZjI3NmY2MTVkYTY3ZTQ1MDhmZTdiYjUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMTYgMDk6Mjk6NDIgMjAxMiAtMDgwMAorCisgICAgY29uZmxpY3RpbmcgbWVyZ2UgZnJvbSBtYXN0ZXIgZm9yIGV4dHJhY3RuZXdzCisKK2NvbW1pdCA3MDA4NGRhNjFkMmJjYmQyY2YxZWQ4MWJkYzNiZjY3OTRjMmFmZmI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDEzIDExOjQ5OjE2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tU0NIRURVTEVSLU1JQjogSGFuZGxlIDMyLWNoYXJhY3RlciBzY2hlZENvbnRleHROYW1lIHZhbHVlcyBjb3JyZWN0bHkuCisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IGIzYzQ5ODI1NDJlMGFiMTUxZmIzODg0NzU0Y2RmYmNiNDcyZGE1MmQuCisKK2NvbW1pdCAwNGJmM2UyODgxNThlZTg4MGVkZjIzN2U0MDA3ZmVlMzdkMjA0NGRkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNTozOTozNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBlbmRsZXNzIGxvb3Agd2hlbiBTU0xfcmVhZCByZXR1cm5zIGVycm9yLgorCitjb21taXQgYzE1MjZmY2NjMDQ3NGMxZGIxOGNhYTlkYmI4MzM4NTNjZGRkZTNjYworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MTM6MjEgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvLgorCitjb21taXQgYTI3YWExOWRmMjgzMTU2YzAzMmM4MWVhZWU1ZTExNTg1OWQzOGMxNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MTE6MzIgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgcmVwbGFjZSAncmMnIHZhcmlhYmxlLCBpdCdzIHZhbHVlIGlzIG5lZWRlZCBvdXRzaWRlIHRoZSBsb29wLgorCitjb21taXQgOTg1ZGZmMmIwODc2ZDk0ODNjNDE0ZmNjZWEzZWY2YmM2M2UxNDU2MQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MDE6MzIgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlZCBkdXBsaWNhdGUgY29kZS4KKworY29tbWl0IDJmZDc4MTgzMThlN2E1ZGZlOThmNTJjY2Y3NTBjMmE2M2U4MjVkZWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE1OjAwOjIyIDIwMTIgKzAxMDAKKworICAgIFJlbW92ZWQgZHVwbGljYXRlIGNvZGUuCisKK2NvbW1pdCAxNWYyMTEzMGJhMzNkYzlhZmQxNjRlNTJkZmQ3NGM5Y2VjMGU5MjMyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNDo1ODoxNCAyMDEyICswMTAwCisKKyAgICBSZW1vdmVkIGR1cGxpY2F0ZSBjb2RlLgorCitjb21taXQgMmE4YThmMmFiN2NkNzU4MjZjNWQ0MWVjM2NmZDVjZTNlOTYzNGNmMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6Mzk6MjggMjAxMiArMDEwMAorCisgICAgcmVtb3ZlIGRlYWQgY29kZSwgJ2NwJyBpcyBhbHdheXMgIT0gTlVMTCBoZXJlLgorCitjb21taXQgMzhmZDYzNzhjYzMyNzUxODBmNjNiOGQ5YjlhNDA3MmIzZGFiZjhlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6MjU6MDYgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvLgorCitjb21taXQgZWJkOTJlMTliMTBjMGEzOGUxN2NkZTQwNzg2NGI0NWMyNmUxNzMyNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6MDc6NDMgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBpZiAodmFsdWUpIGNoZWNrIC0gdmFsdWUgaXMgY2hlY2tlZCBmZXcgbGluZXMgYmVmb3JlLgorCitjb21taXQgYzVjYWNmNWNhZjk3OWQwMThlYTZjYWUxYzAzYjhmZGYwYjExOGRmZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTM6NDQ6NDMgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkb3VibGUgZnJlZSgpLCAnZGlybmFtZScgaXMgYWxyZWFkeSBmcmVlZCBpbnNpZGUgc2VfYWRkX3BhaXJfdG9fbGlzdCgpIGlmIGl0IGZhaWxzLgorCitjb21taXQgYWNkY2ViNTBlYTY2ZDZiMzIzYzc0ZWUwMjFmYjc3ZTgxMGU0ZTdhZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTM6NDM6MTkgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBtZW1vcnkgbGVhayB3aGVuIG1hbGxvYyBmYWlscy4KKworY29tbWl0IDE3MDUzZTM0Y2ZlOWE4YWIzOTVmYjUwZjVjM2YxZGFmYzcyNDdhZWIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDEzOjMyOjU3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGRvdWJsZSBmY2xvc2UoKS4KKyAgICBMaW51eCBtYW4gcGFnZSBmb3IgZmNsb3NlKDMpIHNheXM6IEluIGVpdGhlciBjYXNlIGFueSBmdXJ0aGVyIGFjY2VzcyAoaW5jbHVkaW5nIGFub3RoZXIgY2FsbCB0byBmY2xvc2UoKSkgdG8gdGhlIHN0cmVhbSByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvci4KKworY29tbWl0IGE2NjQxZWRiOWNiNzRmYzIyMzZiNDJjZTU1NTRmYzMzMjk5NTY1NTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTU6MjI6MzQgMjAxMiArMDEwMAorCisgICAgTWluR1c6IFNraXAgdGVzdCBUMDY1IGlmIG5vdCBzdGFydGVkIGZyb20gaW5zaWRlIGFuIE1TWVMgc2hlbGwKKworY29tbWl0IGE4ODNlZjE5ODJmMzAxYjE0ODVkMjI3MzAxNjc0OTI3MzMwZjViNjcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDExIDE1OjE0OjUzIDIwMTIgKzAxMDAKKworICAgIE1vdmVkIGRlYnVnIG9wdXRwdXQgYmVmb3JlIHJldHVybi4KKworY29tbWl0IDQ1NzUxOTY3Mjg3ZDk3NjQwZWZkY2RmOGU3N2U4ZDQ5MDkzOWQ4ZWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTQ6MTc6MTggMjAxMiArMDEwMAorCisgICAgQ29udmVydCBzdHJ0b3VsbCgpIHVuaXQgdGVzdCBpbnRvIGEgTmV0LVNOTVAgdW5pdCB0ZXN0CisKK2NvbW1pdCAyYzJmYTQ4MzM2YTRmMWYxNzdjMjk5MWQ2NTE1ZDI5ZjM5NTMzYzQ0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDEzOjUwOjQ0IDIwMTIgKzAxMDAKKworICAgIENvbnZlcnQgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoKSB1bml0IHRlc3QgaW50byBhIE5ldC1TTk1QIHVuaXQgdGVzdAorCitjb21taXQgMDdjNjY2ZjZjZWEyN2YyYjJhYjliYzA4YWVkMGNiNjEzM2ZlMzc1OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTM6MTc6NDUgMjAxMiArMDEwMAorCisgICAgRml4ZWQgY29tbWl0IDczYTUyM2U0NjgyNzdmNmRmMmU5ODQ4OTEzMTNiOGJlOGJjZTE5MjE6CisgICAgRmlkZXggZGVyZWZlcmVuY2luZyBrZXktPmluZm8gd2hlbiBrZXkgaXMga25vd24gdG8gYmUgTlVMTC4KKworY29tbWl0IDNiNjg2NTY2Mjk2ZGQ4N2JjNDJiN2YxMTY5ZGFhY2RiM2M0NWNjNTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMTggMDY6MjU6NTYgMjAxMCArMDAwMAorCisgICAgV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRob3V0IHdhcm5pbmdzIHdpdGggTVNWQyA2LgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTQ4OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IGYzYTdkMWIwOTYwOWRhZDY0OWY1OGJiZGI1YjdlMTBkMzliMzk4YzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBPY3QgMTcgMTE6MDQ6MDYgMjAxMCArMDAwMAorCisgICAgRm9sbG93LXVwIGZvciByMTk0NzY6IGZpeGVkIGEgdHlwby4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk0NzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCAyZGU3M2JkMzY1YTM4MWI5YzM1M2NhNTIzMDc2OWVlZmIxYWM3MWVkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDExOjQyOjQyIDIwMTIgKzAxMDAKKworICAgIGxvY2FsL3Bhc3N0ZXN0OiBSZW1vdmUgYW4gaW5jb3JyZWN0IFBBVEg9IHN0YXRlbWVudAorCitjb21taXQgNjk5NTEzZjEyMzhlMGFkY2UxZjFjZWM5OGUwZDE0NzI5M2ZjNTA0NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE9jdCAxNyAwOToyNTo1MSAyMDEwICswMDAwCisKKyAgICBORVRTTk1QX1JFTU9WRV9DT05TVCgpLXJlbGF0ZWQgY2xlYW51cC4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk0NzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCA2MzU4ZGVlNzJmYjM0N2UyNjAwYTBhN2JkMjFmMjMyNzBkM2EwMGY2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDEwOjU4OjE1IDIwMTIgKzAxMDAKKworICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmM6IEFkZCBhIGNvbW1lbnQKKworY29tbWl0IDUzOTZiZmUwMzJjOGNiYzczYzhmZjVkNGIwODVlYmFkYTlmNTk4NDYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTA6MzA6MTYgMjAxMiArMDEwMAorCisgICAgUmVwbGFjZSBzdHJuY3B5KCkvc3RybmNhdCgpIGJ5IHN0cmxjcHkoKS9zdHJsY2F0KCkKKworY29tbWl0IGZlYjNhZjI4ZGNhZTIyMDE1YWU4NjVhMmU1ZGQ4YzQxNmU5OTkxZDgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTA6MDI6MDggMjAxMiArMDEwMAorCisgICAgUmVwbGFjZSBzdHJuY3B5KCkvc3RybmNhdCgpIGJ5IHN0cmxjcHkoKS9zdHJsY2F0KCkKKworY29tbWl0IGI3ZTFhYTI1NWJhZTRhMzQ1M2Y5ZWNhNjQ0YTg3NjYzNDM1MWYxMWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjAgMTk6MzY6MjggMjAxMCArMDAwMAorCisgICAgQ0hBTkdFUzogbGlic25tcDogY2hhbmdlZCB0aGUgdHlwZSBvZiB0aGUgZm91cnRoIGFyZ3VtZW50IG9mIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4oKSBmcm9tIGNvbnN0IGNoYXIqIHRvIGNvbnN0IHZvaWQqIHN1Y2ggdGhhdCBubyBjYXN0IGlzIG5lY2Vzc2FyeSB3aGVuIHBhc3NpbmcgYW5vdGhlciBkYXRhdHlwZSB0aGVuIGNoYXIqIG9yIGNvbnN0IGNoYXIqLgorICAgIENIQU5HRVM6IFdpbjMyOiBjaGFuZ2VkIGluX2FkZHJfdCBmcm9tIHVfaW50IHRvIHVfbG9uZyBzdWNoIHRoYXQgaXQgbWF0Y2hlcyB0aGUgZGF0YXR5cGUgb2Ygc29ja2FkZHJfaW46OnNpbl9hZGRyLgorICAgIEFsc28sIGZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgKG1vc3RseSBjaGFyICogPD4gdV9jaGFyICogbWlzbWF0Y2hlcykgYW5kIHJlbW92ZWQgc29tZSBjYXN0cy4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxODM0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCWFnZW50L2FnZW50X3JlZ2lzdHJ5LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCisgICAgCWFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYworICAgIAlhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMKKyAgICAJYXBwcy9zbm1wdHJhcGQuYworICAgIAlzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jCisgICAgCXNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYworICAgIAlzbm1wbGliL3N5c3RlbS5jCisKK2NvbW1pdCBmNDdhMzc1Mjg0OWRiMDc1ZTZmMjA1M2I4NTk1YjdiNzkyZmI2NDYyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgT2N0IDE1IDEwOjU2OjA5IDIwMTAgKzAwMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogQnVpbGRzIG5vdyBjb3JyZWN0bHkgd2l0aCBhIDY0LWJpdCBjb21waWxlci4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTQ1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDAyYjYwNTZkZjk1ZGE4YjY3MzAzNGUzOWMyYzdjMzg2ZWQwZjM2OWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTE6NDQ6NTMgMjAxMiArMDEwMAorCisgICAgRml4IGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBjYXN0aW5nIGF3YXkgY29uc3QKKworY29tbWl0IGExOTg2NTgzMmZjNzdmNGMwNDgxNDRkOTFhNDMxYjFlOTRkMzI5ZjIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDE0IDIzOjEyOjA1IDIwMDkgKzAwMDAKKworICAgIENIQU5HRVM6IGFwcHMsIHNubXBsaWI6IFBBVENIOiAyODM1NTc3OiBpZGVudGlmaWVkIGJ5ICJCYXJ0IFZhbiBBc3NjaGUiOiBSZXBsYWNlIFNOTVBfWkVSTyBvZiBhcnJheXMgd2l0aCBhIG1lbXNldC4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxNzc5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDY3YTNlMmVjY2I5NWY5YzlkMDgwOWVmY2JkZGNkODY2ZWUzMDYyZDUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNiAxNDoyNzoxNSAyMDEwICswMDAwCisKKyAgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE3OTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgM2RjZGUyZThhNTk1YTUyN2YwNjE0MmMzYjg1MmRlODQzM2ExY2YyOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBKYW4gMjQgMTQ6Mjc6NTUgMjAxMCArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUHJldmVudCBnY2MgcGVkLXdhcm5pbmcgZm9yIE5FVFNOTVBfUkVNT1ZFX0NPTlNUCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTgwNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCBjMmUxNTI1YTg1YmRhNTI5OWEzYjlmMjQxNjE0ZjdlNjUwOWFlZWJhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDYgMTM6MzU6MTEgMjAxMCArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IDI5NWY0NzNjODM1NDYyMjFiMmE3MWQ4MTVjNjFlMzNhNjdmOThhZTM6IHJlZmluZSBORVRTTk1QX1JFTU9WRV9DT05TVCgpIGltcGxlbWVudGF0aW9uLgorCitjb21taXQgY2I0MjNiMGFlOWVkMDA1OWFhMTAwZGM0ZTJmZDkzYWQxYjk3ZmFmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA2IDExOjU3OjUxIDIwMTAgKzAwMDAKKworICAgIEJhY2twb3J0IGNvbW1pdCBlMmZiMDllMDA5M2UyZjY0OGZlMjYzOGRhMmYzYWYxOGZkYjMyYmYwIC0gaW50cm9kdWNlIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCkuCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlhZ2VudC9zbm1wX3BlcmwuYworICAgIAlzbm1wbGliL3NubXBfc2VydmljZS5jCisKK2NvbW1pdCBhZmMzOTZhYjE2MThhODU5NWEyNTE5ZmJjMjVmN2E0OThlMTc0NDExCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDA4OjQ5OjM0IDIwMTIgKzAxMDAKKworICAgIFVuYnJlYWsgbmV0c25tcF9ta3RlbXAoKSBhbmQgbWFrZV90ZW1wKCkuCisgICAgCisgICAgVGhlc2Ugd2VyZSBicm9rZW4gYnkgY29tbWl0IGJiOGZjYmI4NzQ5OTgwMDBmOTQ1ZjA1OGQxYWE2ZmUxNGU5MjU4OTkuCisgICAgQWxzbyByZXBsYWNlIGEgc3RybmNweSgpIGNhbGwgYnkgYSBjYWxsIHRvIHN0cmxjcHkoKSBhbmQgcmVwbGFjZSB0aGUKKyAgICBtYWtlX3RlbXBmaWxlKCkgaW1wbGVtZW50YXRpb24gYnkgYSBjYWxsIHRvIG5ldHNubXBfbWt0ZW1wKCkuCisKK2NvbW1pdCAyMTAxODVjMTVkMGQ2NWYwZWE5OGI1ZTNjMmUwNzc2ZjYyMjJkMTcwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDA4OjI3OjQzIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGNyYXNoIGR1cmluZyBzdGFydHVwIG9mIHNubXBkIGludHJvZHVjZWQgYnkgY29tbWl0IDg4NTA2MTY4N2Q5Y2FhMzg0NzA5Nzk2NjdkN2Q4YWQ2NTYzY2VkYWQuCisgICAgCisgICAgQWxzbywgbWFrZSBzdXJlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgY29weSBvZiB0aGUgY2xlYW51cCBjb2RlIGluIGZ1bmN0aW9uCisgICAgbWtkaXJoaWVyKCkuCisKK2NvbW1pdCA4YmI0ZTg2YWJjZjk4ZmYyODc0OGFmMGFmODljOThlNjRkNWNkOTYxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgSmFuIDExIDA3OjQ3OjEyIDIwMTIgKzAxMDAKKworICAgIFJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIG9sZG1hc2sgdmFyaWFibGUuCisKK2NvbW1pdCA2NjgwMTQ3YjEzOGVjMTE0ZjgxYzVkMTI4YWM5MzUwYzg0NTBkMDgxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEwIDE4OjQ0OjMxIDIwMTIgKzAwMDAKKworICAgIE1ha2UgdGVzdCBUMDE1aW50NjRfY2xpYiBwYXNzIG9uIDY0LWJpdCBzeXN0ZW1zCisKK2NvbW1pdCAzYWFkMTVhZTU2MGFjODU3ZTczYzkwNzY0ZTkwM2U3Y2EwMmIzMjk1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNTo0MDo1OSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgZm9yIGxhcmdlIE9JRCBuYW1lcworCitjb21taXQgZmJhMTg4ZWU4MjAxMGIyZjJkOGNhMmU0MjZiYTY1NDQ5OWFiM2QwYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6MzE6MzMgMjAxMiArMDEwMAorCisgICAgZml4ZWQgYnVmZmVyIG92ZXJmbG93IGluIF9fY29uY2F0X29pZF9zdHIKKworY29tbWl0IDIxZDI1ZDg2YjhlNDkwNGQ3OThkYzhjOTZkYWRlOWU1MDQ4NDU3YTgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE1OjI2OjA3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHBhcnNpbmcgcG9ydCBudW1iZXJzLgorCitjb21taXQgZDM2OTMxODQxYjJmYzJjZWJjNjM2NGIyOTQ5MTI5YTBhZDQyYWQxZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6MDU6NTEgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSBidWZmZXIgb3ZlcmZsb3cgd2hlbiBsYXJnZSBTdW1GaWxlIGlzIHVzZWQuCisKK2NvbW1pdCAwZWZkZDAyMmRhMDlhZjFiNWUxNjE3MWZhN2EyYjUyM2M1ZDZlYzU5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNTowMTo1MyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiB0b28gYmlnIHRlbXAgZmlsZSBwYXR0ZXJuIGlzIHVzZWQuCisKK2NvbW1pdCA1NjBiYzZjMDliNzUxNTU2ZWZkNmI0YzQ0OTU3NTFiMTA5YTkzZjkyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo1OToyNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3csIGp1c3QgdG8gYmUgc3VyZS4KKworY29tbWl0IDgyOTFkN2M1YjkyYTMxZGQ0ZjU4MmI0OTdkNGIyYTA4NTMzNjdhNTYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjU1OjE2IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdy4KKworY29tbWl0IDg4ZTFmMzRkZTczMDA1NzVmYTZkYWI4NTdlY2RkYjI0MmE4N2RlODAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjQ4OjU1IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBsb25nIGludGVyZmFjZSBuYW1lcyBhcmUgdXNlZC4KKworY29tbWl0IGJlMTM3NWE5OTI2ZWJlMGNkNWI3OGE0MDQ1YzNiZDExYzgzNjY0YjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjQ2OjQ5IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGEgc2Vuc29yIG5hbWUgaXMgdG9vIGxvbmcuCisKK2NvbW1pdCAxY2IyNDYyNTM3MjA2MmIxNGM3MWQ3ZGQ1MWUyMGZlZjc3M2UyNzQzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo0MTowMCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBhIENQVSBoYXMgdG9vIGxvbmcgbmFtZS4KKworY29tbWl0IDg0YzgwN2VlMDMyNTFlNTQ4NTZlODNkNjJkMDZlYTA4YjhkZjUyN2EKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjM2OjUwIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBsb25nIGludGVyZmFjZSBuYW1lcyBhcmUgdXNlZC4KKworY29tbWl0IGMzMTBlMzkwYjVkZDA1ZjI0YmU3ZWIxOTA0Yzc0ZTQxMjU5YzkzZGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjI0OjU0IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBiaWcgdGVtcCBmaWxlIHBhdHRlcm4gaXMgdXNlZC4KKworY29tbWl0IDQ2MDBkMTE0MzRlODNiODY1M2NmOWY4MTNhM2Q4YjYzMDQ1NWI0MmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjE3OjA4IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHBsYXVzaWJsZSBzdHJpbmcgb3ZlcmZsb3cgYmVmb3JlIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKK2NvbW1pdCA4ODUwNjE2ODdkOWNhYTM4NDcwOTc5NjY3ZDdkOGFkNjU2M2NlZGFkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDoxMTowMiAyMDEyICswMTAwCisKKyAgICBHZXQgcmlkIG9mIChpbnNlY3VyZSkgU05NUF9NQVhQQVRIIGluIG1rZGlyaGllcigpCisKK2NvbW1pdCA4MDE2ODkwYTQ0NWY2YTdlMmE4NzNhMDQ4NzNkNGUyN2I2ZWU2NGUzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMzo0ODozNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCB3cm9uZyBpbnRlZ2VyIHNpemUgb24gNjQgYml0IHBsYXRmb3JtLgorCitjb21taXQgYmI4ZmNiYjg3NDk5ODAwMGY5NDVmMDU4ZDFhYTZmZTE0ZTkyNTg5OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTM6MzE6MzYgMjAxMiArMDEwMAorCisgICAgU2VjdXJlIG1rc3RlbXAoKSB3aXRoIHVtYXNrKCkgLSBvbiBzb21lIGltcGxlbWVudGF0aW9ucyBpdCBkb2VzIG5vdCBzZXQgMDYwMCBwZXJtaXNzaW9ucyBhdXRvbWF0aWNhbGx5LgorCitjb21taXQgMjAyNTIzY2E3MDRiZDcyMmRjMWFjMGUxZTZiMGU0YjRlNTQyNDQ5NQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTM6MTE6NTcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyAnYycgYmVmb3JlIE5VTEwgY2hlY2suCisKK2NvbW1pdCA3M2E1MjNlNDY4Mjc3ZjZkZjJlOTg0ODkxMzEzYjhiZThiY2UxOTIxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMzowODoyNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIGtleS0+aW5mbyB3aGVuIGtleSBpcyBrbm93biB0byBiZSBOVUxMLgorCitjb21taXQgMmY0ZTZhY2Q3MTQxODNmMDE1Yjc2MzY1N2Y4ZjA4NDU5MzM1N2UyNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMDozODoxNiAyMDEyICswMTAwCisKKyAgICAuZ2l0aWdub3JlOiBJZ25vcmUgcGVybC8qLnltbCBmaWxlcworCitjb21taXQgYzM2NWQ4MGMxNmMyZDE3YjE2MDAxMWU4YzFmOWNiOTU4OTU0ZTlkYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxMCAwODozNDoxNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IERvIG5vdCBpbnZva2Ugc2h1dGRvd25fcGVybCgpIGZyb20gaW5zaWRlIHRoZSBTSUdURVJNIGhhbmRsZXIgc2luY2UgdGhhdCBmYWlscyBpZiBTSUdURVJNIGlzIHJlY2VpdmVkIHdoaWxlIGEgUGVybCBoYW5kbGVyIGlzIGFjdGl2ZS4gQmFzZWQgb24gYSBwYXRjaCBwb3N0ZWQgYnkgSm9lbCBBdm5pIDxqYXZuaUBhcnViYW5ldHdvcmtzLmNvbT4KKworY29tbWl0IGQwNTlmYjg3OGIxNDM2NTk5OTUzY2VhNWEwNzc0OTlkZGNkY2JjYjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNzowMzo1NSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NDA3NTI6IElGLU1JQjogUmVwb3J0IGludGVyZmFjZSBzcGVlZCBjb3JyZWN0bHkgZm9yIEV0aGVybmV0IGludGVyZmFjZXMgaWYgb3RoZXIgdGhhbiAxMCBNYnBzLCAxMDAgTWJwcywgMSBHYnBzLCAyLjUgR2JwcyBvciAxMCBHYnBzLiBBZGQgc3VwcG9ydCBmb3IgTklDcyBmYXN0ZXIgdGhhbiA2NSBHYnBzLgorCitjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEphbiA5IDEzOjI2OjE3IDIwMTIgKzAxMDAKKworICAgIERveHlnZW4tc3R5bGUgZG9jdW1lbnRhdGlvbiBmaXhlcworCitjb21taXQgZTMyNWVjYmZjZTc3ZjAwYWM1Y2Y2ZmJkOTU3Zjk1NDk1ZjYxYzU5YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEphbiA5IDEzOjI1OjEwIDIwMTIgKzAxMDAKKworICAgIFN1cHByZXNzIHVuaW50ZXJlc3RpbmcgRG94eWdlbiB3YXJuaW5ncworCitjb21taXQgYmU5MTYxZDNhNTg5OGU4NjM3NjdmOTI2NjEzNDg2MTI2YzJjYmY2NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDEyOjM1OjM5IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBtYW5pcHVsYXRpbmcgNjQtYml0IG51bWJlcnMuCisKK2NvbW1pdCA4NmU0YzJiZTA4NTJhMGExM2IwNjAzMDc1NzIwYjMyNjRlYzcwZGRlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTI6Mjk6MTEgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBpdCBleHBsaWNpdCB0aGF0IE1BWF9TVUJJRCBpcyBhbiB1bnNpZ25lZCBjb25zdGFudAorCitjb21taXQgMzdlMjcyZDhmN2I3MTgwYmExNDBmYTM4NmE1ZmYwNTg5NjhhMDhhMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE4OjIxOjQ4IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBJRi1NSUI6OmlmVHlwZTogUmVwb3J0IHR5cGUgImluZmluaWJhbmQgKDE5OSkiIGZvciBJbmZpbmlCYW5kIGludGVyZmFjZXMgaW5zdGVhZCBvZiB0eXBlICJvdGhlciAoMSkiLgorCitjb21taXQgMjY5OTMyZmEzMmM3Y2Q0Nzk1NzQ4OTY5OGUwOWJlZTMxZjYzYjdhZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE0OjM0OjQyIDIwMTIgKzAxMDAKKworICAgIEZpeCBhbiBNU1ZDIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDBkMWMyMWY5OTkxZDEzMDlkMDU3ZTNlNDA1NmQ1NDdkZjdkNDBlY2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNjowNjozMSAyMDEyICswMTAwCisKKyAgICBNYWtlIGRlY2xhcmF0aW9uIGFuZCBkZWZpbml0aW9uIG9mIHN0cmxjYXQoKSBjb25zaXN0ZW50LgorCitjb21taXQgMGMzZDRkYmIwYTljZjViMzU5ZjcwYjJmMTk5MTU0OTU1NTRmODQwZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE1OjIzOjE2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBzbm1wZDogUmVtb3ZlIGRsbW9kCisKK2NvbW1pdCA4OTNlY2M5N2I1ODc2NjEwNDViZWNiZTA5YTMyMGMxYmNiYzcxYzdjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTQ6MzY6NTkgMjAxMiArMDEwMAorCisgICAgQWRkIHN0cmxjYXQoKSB0byB0aGUgTVNWQyBidWlsZCBpbmZyYXN0cnVjdHVyZS4KKworY29tbWl0IDNkMTI2NDIyZTYyNTcwMmI5ZDNmYTA2NzZhOTdlYzVjYjIwZDlkMTAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNTowMTowNiAyMDEyICswMTAwCisKKyAgICBNYWtlIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGNvbnNpc3RlbnQgd2l0aCBpdHMgLmluIGZpbGUKKworY29tbWl0IGFmNTNiNzZjMmZmYTc1MWUzOTU4ZDBmYzVkODI3OWY3OGMyYzFjMjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNDo0Mzo1NSAyMDEyICswMTAwCisKKyAgICBTa2lwIFQwNjZwYXNzX3NpbXBsZSBhbmQgVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZSBvbiBNaW5HVworCitjb21taXQgMzVhOTJlNjkzZDEzM2E1YjExZTllOWI1OTlkYmY0N2VkZWY0OTMzYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDA4OjE2OjM2IDIwMTIgKzAxMDAKKworICAgIFJlbW92ZSBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMgYWdhaW4sIHdoaWNoIHdhcyBhZGRlZCBhY2NpZGVudGFsbHkgd2hpbGUgcmVzb2x2aW5nIG1lcmdlIGNvbmZsaWN0cyAoY29tbWl0IDFkNzhmN2Q1YjU4YWVkMmI1MmM0ZDM4NmE3YmE4MGE0NDcxMWJhY2EpCisKK2NvbW1pdCBhOWIwNzNlYTNiNmNlZGY3MTNlMzA1ZTdiMTVmMjhhZTU3YmZkZjFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTc6NDc6MTEgMjAxMiArMDAwMAorCisgICAgRml4IDY0LWJpdCBjb21waWxlciB3YXJuaW5ncworCitjb21taXQgN2U4OTBkYWQ5NWY1NjYwNjllZTI4MDIxNWE0ZmVhM2YwZTJlMzk4MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDE2OjM4OjUwIDIwMTIgKzAxMDAKKworICAgIEF2b2lkIGEgU0lHU0VHViBpZiBjcCA9PSBOVUxMLiBUaGlzIGlzIGEgZm9sbG93LXVwIGZvciBjb21taXQgMDg5YmNiMzYwYWEyNjc5MGFkMmE4Y2VkZGY1ODNiN2JhNWRkZmQ0OC4KKworY29tbWl0IDFmNjIwMGNmZTFiMGIyN2ViYjA5M2ExNjA2YjU5MmY5ZTk2ODRiZTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxNTo1MzozNCAyMDEyICswMTAwCisKKyAgICBDb252ZXJ0IHN0cm5jcHkoKSBjYWxscyBpbnRyb2R1Y2VkIGluIHY1LjYKKworY29tbWl0IGMzMTI2YjE0MzkyMWZhYmVhYzQ0MjE2NmVjYTViNWI3NDJmZDQyYzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxNTowMjozOSAyMDEyICswMTAwCisKKyAgICBSZXBsYWNlIG1vc3Qgc3RybmNweSgpIGNhbGxzIGludHJvZHVjZWQgaW4gdjUuNQorCitjb21taXQgYjI0ZWU3YzkwOTY1N2RiNDNiZDhjNWQ4YzAxMDU1Y2EwODgzYzljZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDA4OjQwOjM5IDIwMTIgKzAxMDAKKworICAgIEVsaW1pbmF0ZSBtb3N0IHN0cm5jcHkoKSBhbmQgc3RybmNhdCgpIGNhbGxzCisgICAgCisgICAgVXNpbmcgc3RybmNweSgpIGFuZCBzdHJuY2F0KCkgaXMgZXJyb3IgcHJvbmUgLS0gc2VlIGFsc28KKyAgICBodHRwOi8vd3d3LmdyYXRpc29mdC51cy90b2RkL3BhcGVycy9zdHJsY3B5Lmh0bWwuIEhlbmNlIHJlcGxhY2UKKyAgICBhbGwgaW52b2NhdGlvbnMgb2Ygc3RybmNweSgpIGFuZCBzdHJuY2F0KCkuIFJlcGxhY2UKKyAgICBzdHJuY3B5KGRzdCwgc3JjLCBuKSBjYWxscyBieToKKyAgICAqIHN0cmxjcHkoZHN0LCBzcmMsIG4pIGlmIHRoZSBnb2FsIHdhcyB0byBhdm9pZCBvdXRwdXQgYnVmZmVyIG92ZXJmbG93LgorICAgICogc3ByaW50Zihkc3QsICIlLipzIiwgbiwgc3JjKSB0byBjb3B5IGEgcHJlZml4IG9mIHNyYyB0byBkc3Qgb3IgaWYgc3JjIGlzCisgICAgICAgIG5vdCAnXDAnLXRlcm1pbmF0ZWQuCisgICAgKiBtZW1jcHkoZHN0LCBzcmMsIG4pIGlmIHN0cmxlbihzcmMpID49IG4gYW5kIG4gPCBzaXplIG9mIGRzdC4KKyAgICAqIHN0cmNweShkc3QsIHNyYykgaWYgbiA+IHN0cmxlbihzcmMpIGFuZCBuIDwgc2l6ZSBvZiBkc3QuCisKK2NvbW1pdCA2ZDk1YmM0MTQ5NDcyOTMxMDA1NDc1YzMwYTU0MWZlZDU1MzRkYTM5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTE6MTk6MTYgMjAxMiArMDEwMAorCisgICAgRml4IHdhcm5pbmdzIHRyaWdnZXJlZCBkdXJpbmcgY29tcGlsYXRpb24gb2YgdGhlIFBlcmwgeHMgc291cmNlIGZpbGVzCisKK2NvbW1pdCBiYWQwNjAwZjZlYzk0NGVmODQ1NWUzMjdjZTc4NGI5YjA3ZDI0N2M5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTA6MDA6MTMgMjAxMiArMDEwMAorCisgICAgQWRkIGNvbmZpZ3VyZSB0ZXN0IGZvciBzb2NrYWRkcl91bi5zdW5fcGF0aCBzdWNoIHRoYXQgdGhlIGNvbTJzZWMgdGVzdCBpcyBydW4KKworY29tbWl0IDkyYTMyYWM0ODY2YTVlZGM3ZjM0N2QzNzk0MmJmMDI4ZGUwMjc2MmYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxMDowMDoyOSAyMDEyICswMTAwCisKKyAgICBHZXQgcmlkIG9mIGEgY29tcGlsZXIgd2FybmluZworCitjb21taXQgODNlNGMwZTMwNGY2MTdjY2FjNjYxMGVkZDc0ZDE3MDY3OTdiYmY1MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE1OjM3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZCBhIHRlc3QgZm9yIHNlX3N0b3JlX2xpc3QoKQorCitjb21taXQgNGZhZTU4NTIxMDNlYzM4OTNhZDQ4OGJjMGQ5MDVjYTY5MTQ1OTVlZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE3OjE1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFNpbXBsaWZ5IHRoZSBzZV9zdG9yZV9lbnVtX2xpc3QoKSBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgYjMyMjJiYjI3NWYyZjIzNDZlMGZkMDQ3OGFmYTJlZmI2MDA3NzNlNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE2OjQ1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IERlY2xhcmUgInR5cGUiIGFyZ3VtZW50IG9mIHNlX3N0b3JlX2xpc3QoKSAvIHNlX3N0b3JlX3NsaXN0KCkgLyBzZV9zdG9yZV9lbnVtX2xpc3QoKSBjb25zdAorCitjb21taXQgMDIyZjg0MGZiZmNiMGUyNmIwOGYwZTU1NzI4MjMxZjYxMTQ5NTgwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE5OjU1OjU2IDIwMTIgKzAwMDAKKworICAgIEF2b2lkIHRoYXQgVmFsZ3JpbmQgY29tcGxhaW5zIGFib3V0IHNlbmRpbmcgVURQIGRhdGEKKworY29tbWl0IDY3MmE4MDljMjI4ZTk1NTBiOTliODkxMGJlNzVkMGIxNjE5ODU0MDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNzozMzowOSAyMDEyICswMDAwCisKKyAgICBGaXggYSA2NC1iaXQgY29tcGlsZXIgd2FybmluZworCitjb21taXQgMjRmZjI2MGFkODljZTJhYTM2MWE1NWM3YzcyZTkxNjAzMWRlZmUzNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE3OjExOjI0IDIwMTIgKzAxMDAKKworICAgIENoYW5nZSB0aGUgdHlwZSBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHNubXBfc2V0X3Zhcl92YWx1ZSgpIGFuZCBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoKSBmcm9tIHVfY2hhciogdG8gdm9pZCosIGxpa2Ugb24gbW9yZSByZWNlbnQgYnJhbmNoZXMKKworY29tbWl0IGM2Y2E3MzdmYjQ2ZjkwYTRiZGE1ZDQzNzM0YWFjMzRlODM3YTA1ZjQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMTMgMTk6MDc6MzcgMjAxMCArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IGY1MDRjZTJkNzRhNGJjODhmNjhjYzk1MTVmYTcwNTMzNzNjYjE1YjUuCisgICAgKEZpeGVkIG1vc3QgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBzb3VyY2UgY29kZSBpbiB0aGUgcGVybCBzdWJkaXJlY3RvcnkuIE5vdGU6IHRoZXNlIGNoYW5nZXMgbWF5IGNvbnRhaW4gc29tZSByZWFsIGJ1ZyBmaXhlcy4pCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlwZXJsL0FTTi9BU04ueHMKKyAgICAJcGVybC9PSUQvT0lELnhzCisgICAgCXBlcmwvU05NUC9TTk1QLnhzCisgICAgCXBlcmwvYWdlbnQvYWdlbnQueHMKKworY29tbWl0IGQyMTJkYzk4NGVjMzRlNGQyMzA2MjVlNDZlNThiMGM2MjhhNTBkZjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNjo0Njo0OSAyMDEyICswMTAwCisKKyAgICBTTk1QLnhzIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMKKworY29tbWl0IGJhY2VlYmIxMGQ4Y2FmNWRiNjNjYzM2OTM1ZmVkNjVlZTkzMTAyOWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNjoyMjo0NCAyMDEyICswMTAwCisKKyAgICBBZGQgZGVjbGFyYXRpb24gZm9yIHNodXRkb3duX3NubXBOb3RpZnlUYWJsZSgpCisKK2NvbW1pdCBmN2Y5NjZhYmQ2ZDI4NDliMTMzMTI1MmFmZTVjNDczZTVjNDBiMzJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTQ6MjQ6MzMgMjAxMiArMDEwMAorCisgICAgRml4IGZvcm1hdCBzcGVjaWZpY2F0aW9uIG1pc21hdGNoZXMuCisKK2NvbW1pdCAzMDNjMDE1YmNmZTlhZjBiMTU0ZTk4ODFjN2I0ZjQ0OWUwOGYzMGJiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWF5IDYgMjI6MDY6MjMgMjAwOSArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IGQzZWIyYjVjZWQyMmE4NDgwMDUzY2U0M2FjZjk3Mzk3MjkwNTU0MDQKKyAgICAoU3ByaW5rbGUgc29tZSBjb25zdC1uZXNzIHdoZXJlIHJlbGV2YW50IC8gZml4IGZvcm1hdCBzdHJpbmcgbWlzbWF0Y2hlcywKKyAgICBOaWVscyBCYWdnZXNlbiwgTWF5IDIwMDkpCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlhZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMKKyAgICAJYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jCisgICAgCWFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jCisgICAgCWluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorICAgIAlpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorCitjb21taXQgZDk1YjQwNDA2OTE2YmRhNWI0OGI1YTYxMzFiZWMyN2I4NjZiMGE3OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1heSA2IDIxOjU5OjIwIDIwMDkgKzAwMDAKKworICAgIEJhY2twb3J0IGEyYTczMTZjMzEwZjBmY2MzNzI4NjczZmEwNDcwNTFjMjNiNzE5NjAKKyAgICAoVHJpdmlhbCB3YXJuaW5nIGZpeGVzLCBOaWVscyBCYWdnZXNlbiwgTWF5IDIwMDkpLgorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAKKyAgICAJYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYworICAgIAlhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCisgICAgCWFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYworICAgIAlhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYworICAgIAlhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jCisgICAgCWFnZW50L3NubXBkLmMKKyAgICAJc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMKKworY29tbWl0IGQ4NmM0N2YwMDNmZGMxOTJiY2U3YjQ2YWM0ZjA2YjA5ZTM4N2MxMmIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTM6Mjk6MDggMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvCisKK2NvbW1pdCBiZWU0ZDc5Y2Y0ZWI3ZTBhNDUzOTdmNTliNTI5OGRhNjMzYThlMWJhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEzOjE0OjU3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHJlYWRpbmcgcGFzdCBlbmQgb2YgYnVmZmVyLgorCitjb21taXQgM2RjMGUwMGEyZmQ4ZTM0ZmUxYWUzM2VjYWJmMzZlMTQ2NDYwYTMxZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMjo0MDowNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBsYXJnZSAndG9rZW4nIGlzIHVzZWQuCisKK2NvbW1pdCBiM2M0OTgyNTQyZTBhYjE1MWZiMzg4NDc1NGNkZmJjYjQ3MmRhNTJkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEyOjI4OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIG9mZi1ieS1vbmUgbWVtc2V0LgorCitjb21taXQgMGY1MzY5NTA0NGRkM2YwYzM1MDc3NTNlM2Y4YzI5ZDk3ZTk2ODcyZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAzIDIxOjM4OjI2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkLCBwZXJsOiBFbGltaW5hdGUgZGVhZCB2YXJpYWJsZXMKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCisgICAgCWFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYworICAgIAlhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYworICAgIAlhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYworICAgIAlhcHBzL3NubXB0bHMuYworICAgIAlhcHBzL3NubXB0cmFwZF9sb2cuYworICAgIAlzbm1wbGliL2Rpcl91dGlscy5jCisgICAgCXNubXBsaWIvc25tcF9jbGllbnQuYworICAgIAlzbm1wbGliL3NubXBfb3BlbnNzbC5jCisgICAgCXNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMKKworY29tbWl0IDAxNTM4MDVjOTliOTE5NzM2NTkzNWM1ZDExYWU5YzNkNGJmYWEwZjMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAwOTo0ODo0MSAyMDEyICswMTAwCisKKyAgICBGaXggYSBzZXQtYnV0LW5vdC11c2VkIHdhcm5pbmcKKworY29tbWl0IDNmODg4NWZiZWU5NDA3NzQ4ZmMyZjA1NzM3MjhhMTFiYTJiYzAyM2EKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXByIDI4IDA1OjUxOjEzIDIwMDkgKzAwMDAKKworICAgIFJldHVybiBhIHZhbHVlIGZyb20gc3ByaW50X3JlYWxsb2NfdmFsdWUgZXZlbiBpZiBubyBzdWJ0cmVlIGlzIGxvY2F0ZWQuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTc1NzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCBiMWVhYWYzMDIzNjlmZDQ1NTJlOGZlZTdiNmE4MDUwOTFlYzBhOWI0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDExOjM4OjUxIDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIG9mIGZpbmRfc2VjX21vZCgpIHJldHVybiB2YWx1ZS4KKworY29tbWl0IGFlZTRlODk1ZmUzYmQ1ZjRhNjFlMzQyNzViZmNhMDM2OGI1NjA1NTUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTE6MzE6MjIgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgb2Ygc25tcF9zZXNzX3RyYW5zcG9ydCgpIHJldHVybiB2YWx1ZS4KKworY29tbWl0IDVkMWQwYTc0NGFiMzBjOGU2NDVjM2I4NTA2Y2JiZDJjY2ViM2QyNzUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTE6MDQ6NDggMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgb2YgbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQoKSByZXR1cm4gdmFsdWUuCisKK2NvbW1pdCAyOTllYTlhODljM2YxNzU4YTc3NDhiYjliMzQxMWY2MmYyYzcwZjg4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEwOjU0OjU1IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIG9mIGZvcGVuKCkgcmV0dXJuIHZhbHVlLCBqdXN0IGluIGNhc2Ugb2Ygc29tZSByYWNlLgorCitjb21taXQgOTBmMWFlNjc1NzkxNzQ4MTYzNmVlZjc3MTAwY2FlZWI1M2VkZmUwMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAzIDEwOjA2OjU2IDIwMTIgKzAxMDAKKworICAgIEFkZCBzdHJsY2F0LmMuIFNvdXJjZTogaHR0cDovL3d3dy5mcmVlYnNkLm9yZy9jZ2kvY3Zzd2ViLmNnaS9zcmMvbGliL2xpYmMvc3RyaW5nL3N0cmxjYXQuYy4KKworY29tbWl0IDA4OWJjYjM2MGFhMjY3OTBhZDJhOGNlZGRmNTgzYjdiYTVkZGZkNDgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTA6NTA6NTYgMjAxMiArMDEwMAorCisgICAgQWRkZWQgc3RycmNociByZXR1cm4gdmFsdWUgY2hlY2ssIGp1c3QgdG8gYmUgc3VyZS4KKworY29tbWl0IDE5OWEwNTExZjZlYjBlZjNmZjFkOWY5MjJiNzkwYWI2N2RmZGUwMWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxMDozMToyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogc211eDogc2ltcGxpZnkgc211eF9saXN0X2RldGFjaCgpCisKK2NvbW1pdCBkODgzNTczYWE3M2UwZjVmYzE4OGFjZWRlZTY0NTFmOTVkYWU5MDBjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTA6MjM6MDYgMjAxMiArMDEwMAorCisgICAgRml4IGEgY29tcGlsZXIgd2FybmluZyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhODA5ZmU1MDc1YzlmMzc0NzE1ZjdkMWE2ODI5NDlhMDczMDE3MmMxLgorCitjb21taXQgN2I3YTNlYjI1MDA1MjdlYWExNjk5Mjg3YTZjYTZmY2M0Y2MyZTA4YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDA5OjQwOjAyIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGJ1aWxkIGVycm9yIGNhdXNlZCBieSBjb21taXQgYTgwOWZlNTA3NWM5ZjM3NDcxNWY3ZDFhNjgyOTQ5YTA3MzAxNzJjMS4KKworY29tbWl0IDJiNmMxMTlmZWQ0ODQ4ZGE2NjYzYzExZjBjMmNiZGMyOTkyMWI1YzYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6NTE6MTAgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgZm9yIG5ldHNubXBfZHNfZ2V0X2ludCgpIGVycm9ycy4KKworY29tbWl0IDZjZTUzNjBjYWE0YzlkZTUxYWRlNTc4NzllODNmOTZiZDA0YjRjNWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6NDI6MjMgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgZm9yIG1pc3Npbmcgdmlldy4KKworY29tbWl0IGIzYmM1NGJlZDMxNjkwYTg1ZGYyYWNmYmYzMjk2ZGE5M2E5ZTg5YjQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6MjM6MTcgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgc29ja2V0KCkgcmVzdWx0LgorICAgIEFsc28gY2xvc2UgdGhlIHNvY2tldCBvbiBlcnJvci4KKworY29tbWl0IDkyMDc1ZjUxY2Q0NWEzOGNhMzg3NjBiM2ZmZTgyZTE2NTU5ZTljMmUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6MTg6MjYgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgb3BlbigpIHJlc3VsdC4KKworY29tbWl0IDY2NjVkNWZlMmZjNTY5ZDZmYTg1NGQxZDc4ZTM0N2JiYWM2OWUwNzAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MjI6MjIgMjAxMiArMDEwMAorCisgICAgRml4ZWQgbWlzc2luZyBicmVhay4KKworY29tbWl0IGE2NjQ4YzU0NTNlMWVmOGRhYzU3YTM4ZWZjYzAwY2NlNTNiZjllNGYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MjA6MjcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgbWlzc2luZyBicmVhay4KKworY29tbWl0IGQ2OGRjYWUwZjE4ZDU1NDU3MWFlZjMyMTk0NGE1MjkwNTQ4ZGRlODYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MTY6MTEgMjAxMiArMDEwMAorCisgICAgQWRkZWQgJ2ZhbGx0aHJvdWdoJyBjb21tZW50IGZvciBDb3Zlcml0eS4KKworY29tbWl0IGZiNmY4MGMwZmUzYmEzNmU1NmY1YjkxMWE0N2UzZjZmMzJiYTI2NmUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MTQ6MDcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZXhpdCBjb2RlIG9mIGVuY29kZV9rZXljaGFuZ2Ugd2l0aCB3cm9uZyBhcmd1bWVudHMuCisgICAgQWxzbyBhZGRlZCBhIGNvbW1lbnQgZm9yIENvdmVyaXR5LgorCitjb21taXQgMzEzMGUyNGZkYzIzMjQ2NGRkN2JiMjE2ZjQ2Y2FmYTJlMGU3NzVhNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDowOTo1NCAyMDEyICswMTAwCisKKyAgICBBZGRlZCBtaXNzaW5nIGJyZWFrCisKK2NvbW1pdCAxOGMxMjZhOTU2NWNiNGQ2OWQ3NTEzYjk0NGEyMTA1NTg4MDQ1ZDM1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjA3OjI5IDIwMTIgKzAxMDAKKworICAgIEFkZGVkICdmYWxsdGhyb3VnaCcgY29tbWVudCBmb3IgQ292ZXJpdHkuCisKK2NvbW1pdCA2ZDMxYzgyMDcwYTJjNjhmZTNjNTE5ZTlkNTZmYTI3Nzk1NTRkMDFmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjAxOjUzIDIwMTIgKzAxMDAKKworICAgIEFkZGVkICdmYWxsdGhyb3VnaCcgY29tbWVudCBmb3IgQ292ZXJpdHkuCisKK2NvbW1pdCBkYzZmMGUyZTU0OWI0Y2QwNjFlYmMxOTAwODRiMWZjNzdhNTVmNDBmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjMyOjU5IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBkYWIzMjg2N2VkMGI5OTMwMWVmZDdiOGQ4NTJhZDEyODhhMTg0YmUwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjMwOjMzIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIFFVSVRGVU4gdXNhZ2UuCisKK2NvbW1pdCBiMWEyYmNmNjQ2MTVlYjY2YmMyNGQ1YmU0OTUwZTQ1MDEyOTYyMDQ1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjE4OjAzIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBiMmIxYzg1MWI5NGZlZDM3YzM4NmVhYTFiZmVhZDVjNzc2OTZlM2VmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjE0OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBhODA5ZmU1MDc1YzlmMzc0NzE1ZjdkMWE2ODI5NDlhMDczMDE3MmMxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEwOjU4OjQ2IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIGZvciBmYWlsZWQgcmVnaXN0ZXJfbWliLgorCitjb21taXQgNTk0OWYwNTVjMTZhZTY1MDYxNWFhZTdhMWZlZTNmMmQ3YjE2ZDk0MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMDoyOTo1OSAyMDEyICswMTAwCisKKyAgICBNYWtlIE1JQiBmaWxlIHBhcnNpbmcgYW5kIGRldGVjdGlvbiBtb3JlIHN0cmljdCAtIExBQkVMIGlzIHJlcXVpcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgTUlCIGZpbGVzLgorCitjb21taXQgZTRiNjczNjgzYzY4YmE4YjNhYmMwNDBiOTEyNWVjMzA0NjQzY2M3YworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEphbiAxIDIzOjAwOjI0IDIwMTIgKzAxMDAKKworICAgIEFzc3VtZSB0aGF0IGxpYmRsIG1pZ2h0IGJlIGluIEFHRU5UTElCUyBvciBTTk1QTElCUyBzbyBwcmVhZGQgdGhlbS4KKworY29tbWl0IGIxM2MxZTU3YmVkYmE3OWI4MDYxMDNjNzRmMTkyMWQ1M2E3MDZiMzgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKYW4gMSAyMjo1NTowNiAyMDEyICswMTAwCisKKyAgICBEbyBub3QgcmVxdWlyZSB1Y2Qtc25tcC9kbG1vZCB1bmxlc3MgaXQgd2lsbCB3b3JrLgorCitjb21taXQgMjdkY2VhMGQ1ZjgwMWRmNDk0YWIyY2I1YzVjMGViZTU0ZWIwZGNkMworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxNDo0ODoyOSAyMDExICswMTAwCisKKyAgICBBZGp1c3QgcGF0aHMgZm9yIHRlc3QgcmVzdHJ1Y3R1cmUKKworY29tbWl0IDE0YjYwZTg1YTFiNTcwMGU5M2QxMjZlMmYyOTFkNWM0ODVmMzRlMzYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMzEgMTQ6MTQ6MjkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRsbW9kIG1vZHVsZSBmYWlsIHJhdGhlciB0aGFuIGdlbmVyYXRlIGEgZHVtbXkgbW9kdWxlIGlmIHRoZSBkbG9wZW4gZnVuY3Rpb24gaXNuJ3QgYXZhaWxhYmxlLgorCitjb21taXQgOThhOTc1MzhmYzFlOWZmNDZiNjBkNWQ5NjkzNDc0NDQ1NzgzNzhjMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxMzozNToxMyAyMDExICswMTAwCisKKyAgICBBZGp1c3QgdGhlIHBhdGhzIHRvIHN1cHBvcnQgdGVzdGluZyBldmVuIGlmIGJ1aWxkZGlyICE9IHNyY2RpcgorCitjb21taXQgODhmMGFmM2NmYjkxNmFlNTg2M2NjMjk4NjA3MWQ0MzVmMjBjMzA2NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxMTozNzo1MiAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZXMgJ3AnIGFuZCAnbGVuJy4KKworY29tbWl0IDA4MTVhNzUzNmM3NmY3ZTQ4NDI2Mzg2ODNmNjc0ODk0YTFhOGNlMTQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgRGVjIDI5IDE0OjQyOjU0IDIwMTEgKzAwMDAKKworICAgIFJlcG9ydCBwcm9ibGVtcyB3aXRoIFNldFVuZG8gcHJvY2Vzc2luZworICAgIE1pc3NlZCB3aGVuIGFwcGx5aW5nIHBhdGNoICMzNDQ1NDQwCisKK2NvbW1pdCBlYjJhYjIzNzQyY2E4NmMwYjg5Y2NmZTkxZWI2ZWEzNzRiZjNhY2MxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IERlYyAyOSAxNDozNzozMSAyMDExICswMDAwCisKKyAgICBDaGVjayBmb3IgdGhlIGV4cGVjdGVkIGVycm9yIChFUElQRSkgb24gY2xvc3VyZS4KKyAgICBNaXNzZWQgd2hlbiBhcHBseWluZyBwYXRjaCAjMzQ0NzQ0NAorCitjb21taXQgYWFjMTBiYzRmMDUzYzAxNGYzODJkNjU5M2ZjMzJhYjk1ZTBiMWE1NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBEZWMgMjkgMTI6NTk6NTIgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzQ2Mzc2NzogSGFuZGxlIHBhcnNpbmcgc3ViaWRlbnRpZmllcnMgPiAyXjMxCisKK2NvbW1pdCBiYmMwMmUzNmU5MGMxYWFiNzg5ODU2MmY5NjNmNWNhZGIyNmUxMGJkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIERlYyAyOCAxNzoxNToxNiAyMDExICswMDAwCisKKyAgICBNb3ZlIHBhc3MvcGFzc19wZXJzaXN0IHRlc3RzIHRvIHRoZSBuZXcgbG9jYXRpb24KKworY29tbWl0IDM4OThjMDRmZDZmODk4NjcwNjJmZGZlYmYzNjg1N2FiNjE5YzA0NTAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgRGVjIDI4IDE2OjUzOjI0IDIwMTEgKzAwMDAKKworICAgIEFkZCB0ZXN0cyBmb3IgcGFzcy9wYXNzX3BlcnNpc3QsIHN1cHBsaWVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCBkNWVlM2YwYTFhNjNiYjE3NTJjNzRjYmNhNTVhYTNkNDBiZjliZjEzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAyMTo1ODo1MSAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzQ0NzQ0NDogRml4IFNJR19QSVBFIGhhbmRsaW5nCisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IDJhMTdiMzc0MzBjMTg1Mjk5OGMzNTg4ZTU0N2Q3ZWI2MWMwNmRhNzEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDIxOjQ1OjM4IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50eDogUEFUQ0hFUzogMzQ0NTQ0MDogTW9yZSByb2J1c3QgaGFuZGxpbmcgb2YgQWdlbnRYIGVycm9ycworICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCBmZTU4YTBlNWY0ZDRlMmUyZWNiY2I0NzM4MmIwOGNiMWU0ZGYzNTJjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxODoxNjoyMyAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNDU2NzcwOiBIYW5kbGUgKG9ic29sZXRlKSBVSW50ZWdlciB0eXBlIHByb3Blcmx5CisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IDFiZThjZjA4YTY3YTkxODU1ZmVlMWVjNGEyZDhlMDg3Yzc4MTI0NTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDE4OjA0OjEwIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50eDogUEFUQ0hFUzogMzQ0NTQzNzogTG9nIEFnZW50WCBkaXNjb25uZWN0aW9ucworICAgIChpbiBsaW5lIHdpdGggY29ubmVjdGlvbnMpIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCAwNjgwMzcyODkxMDdmYWEyYmEzZjVjZDJmYjAwYzE5NDk0YmI5YTA0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxNzoyNzo0NiAyMDExICswMDAwCisKKyAgICBIYW5kbGUgYW55IEdFVE5FWFQgcmVxdWVzdCBPSUQsIG5vdCBqdXN0IGEgc2ltcGxlIHdhbGsuCisKK2NvbW1pdCBhNzRmYTUyODk4MzEyM2QzNTVhOGNkY2FhNzdkZDRlYjRiOGM2OTU5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxNzowMDoxOCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBwYXNzOiBQQVRDSEVTOiAzNDkzOTQ6IEJyaW5nIHBhc3NfcGVyc2lzdHRlc3Qgc2NyaXB0IGludG8gbGluZSB3aXRoIHBhc3N0ZXN0KgorICAgIChpLmUuIHVzaW5nIHRoZSBsZWdpdGltYXRlIHN0cnVjdHVyZSBvZiBORVQtU05NUC1QQVNTLU1JQikKKyAgICBQYXRjaCBwcm92aWRlZCBieSBCaWxsIEZlbm5lcgorCitjb21taXQgYmJlNjQ5ZWJmYTYxZWEyMjM5OTE3MGIzNmI5OWRiMzBhMWRlODAxMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTY6NTQ6MzggMjAxMSArMDAwMAorCisgICAgUmV3b3JrICJwYXNzdGVzdCIgZXhhbXBsZSB0byBmdWxseSB2YWxpZGF0ZSBHRVRORVhUIHJlcXVlc3RzCisgICAgYW5kIHVzZSBhIGxlZ2l0aW1hdGUgc3RydWN0dXJlIGZvciBvdXRwdXQuICBCYWNrcG9ydCBvZiBTVk4KKyAgICByZXZpc2lvbiAxNzYzMiAod2hpY2ggdXBkYXRlZCAncGFzc3Rlc3QucGwnIGJ1dCBtaXNzZWQgJ3Bhc3N0ZXN0JykKKyAgICBDb3JyZWN0IGluIGJyYW5jaGVzIDUuNSBhbmQgYWJvdmUKKworY29tbWl0IDgyZDA2YzcyNDdiMjJjOGIwMWQ0NWJmNTUwNDFkMmYxZTY0MjdkNDkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDEzOjQ1OjE4IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDQ3NjcxOiBGaXggb3ZlcnJpZGUgaGFuZGxpbmcgb2YgT0lEIHZhbHVlcworICAgIFBhdGNoIHN1cHBsaWVkIGJ5IFBoaWxsaXAgTydEb25uZWxsCisKK2NvbW1pdCBiYTRhOWNlNTFjOTYwMGY5ZmRhMTY4ZjFlNmVmZjMyYTFkYjYzY2I5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxMzoyNDoyNiAyMDExICswMDAwCisKKyAgICBUd2VhayAtLWRpc2FibGUtc25tcC1zZXQgY2hhbmdlcworCitjb21taXQgODI3YzhiMjg4MzAxNzFmYWE5YzYxZDUzZWZjYTllYjY2MDA1NjFjMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTE6MjU6NDMgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSEVTOiAzNDMzODQ2OiBGaXggZm9yIHVzZSB3aXRoIHB5dGhvbiAyLjQKKworY29tbWl0IGY5OGE1NGE5OWNhZjdiNDZiMTAwYTkyMGRiOTQyY2JjYTljNDM5MjYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDEwOjEwOjM2IDIwMTEgKzAwMDAKKworICAgIFNraXAgU0VULWJhc2VkIHRlc3RzIHdoZW4gY29uZmlndXJlZCB3aXRoIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorCitjb21taXQgMjMwZGYxNGY5NGMzNzM2ZmYzNDM3OWE0ZTI4MWVlYTM1M2I0N2Y4MAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIERlYyAyNiAyMzozNDoyMyAyMDExICswMTAwCisKKyAgICBEbyBub3QgYXNzaWduIHRtU3RhdGVSZWYgdHdpY2UKKworY29tbWl0IGM5NmIzYjRkODUzMGFkNWUwZWZiMDNmMjRkYWI1ZTVmMWE0NjAwMzEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjUgMTE6MTg6MjEgMjAxMSArMDEwMAorCisgICAgQ29ycmVjdCB1c2UtYWZ0ZXItZnJlZS4KKworY29tbWl0IGM1OTc4Yzg5Y2RlMjQ0MGY0ZDIwZGFkYmM5ZDFkZDhkYjU2MmQ1NmUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjUgMTE6MTU6NDQgMjAxMSArMDEwMAorCisgICAgQ29ycmVjdCBkb3VibGUtZnJlZS4KKyAgICAKKyAgICBuZXRzbm1wX3Rsc3RtQWRkcl9hZGQgdGFrZXMgb3duZXJzaGlwIG9mIGl0J3MgYXJndW1lbnQgc28gY2FsbGluZyBmcmVlIG9uIHRoZQorICAgIGFyZ3VtZW50IG9uIGZhaWx1cmUgaXMgaW5jb3JyZWN0LgorCitjb21taXQgYzEzOWNhMTIzYjQ0YmIzYjliNmJmOTIxZTE2MDljYzQ1ZjYzYTY2MAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFNhdCBEZWMgMjQgMTY6NTU6MzAgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVMgMzQxMDA1OTogRml4IHNwYXJzZWx5IGF1Z21lbnRpbmcgdHJpZ2dlciB0YWJsZXMKKyAgICBQYXRjaCBwcm92aWRlZCBieSBTdGVwaGVuIFR1cm5lcgorCitjb21taXQgYzRhZTAyMWIyZTYzODQ0MzcwODFjNTYyM2YzNjBjODg5NjM5MDE4OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFNhdCBEZWMgMjQgMTY6Mjk6NTQgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVMgMzQxMDA1MDogU2tpcCBhbHJlYWR5LSdwcm9jZXNzZWQnIHZhcmJpbmRzCisgICAgQmFzZWQgb24gbWliMmMgcGF0Y2ggcHJvdmlkZWQgYnkgU3RlcGhlbiBUdXJuZXIKKworY29tbWl0IGM2YWNjZjhjNjYyNTRmYThjNDg3NjdlZDdkZWM3OTVkZGFmYzUyMmUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBTYXQgRGVjIDI0IDE2OjI3OjExIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTIDM0MTAwNTA6IFNraXAgYWxyZWFkeS0ncHJvY2Vzc2VkJyB2YXJiaW5kcworICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFN0ZXBoZW4gVHVybmVyCisKK2NvbW1pdCBhNjE4MjZhZDhjYTU0NjYxZDFkOTA5NzEyNTAzYmQzYThiMzJlZWQwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgRGVjIDIyIDE4OjM1OjQ2IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisgICAgCisgICAgbXlNYXRjaCBpcyB1bnVzZWQgYXMgbm1hdGNoIGlzIHplcm8gYW5kIGFsc28gc2luY2UgcmVnZXhCdWZmZXIgaXMgY3JlYXRlZAorICAgIHdpdGggUkVHX05PU1VCIHNldC4KKworY29tbWl0IGJhNGZjODBmZTJjZmQ1YTVkODkyMzBkOGYzNzAzZTRmZTAxZTYwMTkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgRGVjIDIyIDE5OjI0OjQwIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAzNDAyMzc2OiBmcm9tIExlb25hcmRvIENoaXF1aXR0bzogUmVjb2duaXNlIFJlaXNlckZTCisgICAgQWxzbyBtb3ZlIHZhcmlvdXMgRlNUeXBlIGRlZmluaXRpb25zIHRvIHRoZSBhcHByb3ByaWF0ZSBibG9ja3MKKworY29tbWl0IGI1YWM0YTA0ZGNkNTQ3MGQwOGQwMzMyMWFiY2QxZTk4MjYyMWU2ZTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjM5OjQ2IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IDJiMzdlNGU4ZjI1MGEwZDg4MjExOTlhNzRhYzNmNGU1YjdiN2JhYmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjMxOjUxIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IDNkMDgzNDUxNTZjNDE5MzMzZGU5NjlmMTNkMjFmY2VjN2UxOGU5NGQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjMyOjI5IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IGNkODU5YWQ1MWM0ZjE4ZDViMGZjNjlkZDY2OWZjYjA1MWM3OTg5NjkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjM5OjMzIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG1lbW1vdmUgc2l6ZQorCitjb21taXQgMzBmZjU4ZDA5ZDRjOWQ1NDM4YmI2MjEwNTRmZDdhZDdhMmE1OTdlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjIgMTQ6MDc6MTkgMjAxMSArMDEwMAorCisgICAgRml4ZWQgd3JvbmcgbGVuZ3RoIG9mIGJ1ZmZlciB3aGVuIHByaW50aW5nIEFTTl9CSVRfU1RSCisKK2NvbW1pdCA2YzE0ODdlMWQzNjBkM2QyNjBhMzljYjFmNWIxNWRhOTc4Mzk1MDUzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNTo0NzozNCAyMDExICswMTAwCisKKyAgICBGaXhlZCBwb3RlbnRpYWwgZnJlZSBvZiB1bmluaXRpYWxpemVkIHBvaW50ZXIgaW4gZXJyb3IgY2FzZXMKKworY29tbWl0IGM3NmZiOTZmNjVlMzNiYTJmZDIxMmE5MjFlOGMzODYxNTVlZTVjN2EKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE1OjQ0OjQ2IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVuaXRpYWxpemVkIHZhbHVlcyBpbiB1ZHBUYWJsZQorCitjb21taXQgYzQ0NjA4Njc5Yjg5NzUxMTc2ZjI4YTJlNTRkNTI4MmI0NmUyYTA1YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTQ6NTY6MTMgMjAxMSArMDEwMAorCisgICAgVXNlIGNhbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYyBhbmQgbWFudWFsIGNsZWFyaW5nCisKK2NvbW1pdCBhMDVjNWY5NTEzNDYxODI0ZTc5MDNhZTlhZTlhNmMzMzg2ZTMzODc5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNDo0MDo1MCAyMDExICswMTAwCisKKyAgICBGaXhlZCBwcmludGluZyBvZiB1bml0aWFsaXplZCB2YXJpYWJsZSB3aGVuIHNlbnNvcnNfZ2V0X2xhYmVsKCkgZmFpbHMKKworY29tbWl0IGU0YTVlZGM3MjM5M2JkM2RlOWJmMTJiY2ViYTlkODNiYmY3ZGU3MGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE0OjMxOjI1IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlCisKK2NvbW1pdCBmYWUyZTViODM1YjhkZjFlYWU0N2U0Y2ViYjRlYjQwNGQ3MjgyMzc3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzozMToyMSAyMDExICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIHVuaXRpYWxpemVkIGlpZCBpbiBlcnJvciBjYXNlcyBhbmQgd2l0aCBkZWJ1ZyBpbmZvIGVuYWJsZWQuCisKK2NvbW1pdCA5ZDU4ZjgxYTkyMzljZmJjZmM4ZWJjZTM2N2QyMWU5YjNkY2IwMjhiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzozMzozMyAyMDExICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGVycm9yIGNhc2VzCisKK2NvbW1pdCAwYmM4YzA4ZWRlYWU3YWUwOTVmMTE2MjU4YzIwYWU1NzY3ZDYwNjUyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzoyMDo1MiAyMDExICswMTAwCisKKyAgICBGaXhlZCByZXR1cm5pbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZSAnc3RhdHVzJyB3aGVuIHNzID09IE5VTEwKKworY29tbWl0IDczMDRjNTNjZjhhZGVlOGVjY2VmMWE4ZjI2NzU2ZmMwN2YwOTg3MjEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTggMjM6MzE6NTMgMjAxMSArMDEwMAorCisgICAgT24gc29sYXJpcyAxMCB0ZXN0IGluIC9iaW4vc2ggZG9lc24ndCBzdXBwb3J0IHRoZSAtZSB0ZXN0LiBSZXBsYWNlIGl0IHdpdGggLWYKKworY29tbWl0IDhjZDNiZTYwZDY5M2M5YzM2ZmZiOTdkM2Q5YmNiNDljMWI0YWJlMzUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMTcgMDg6NTI6MjQgMjAxMSArMDEwMAorCisgICAgQXZvaWQgcmVwZXRpdGlvbiBvZiB0aGUgY29tcGxleCBleHByZXNzaW9uIGRldGVybWluaW5nIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGdldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAKKyAgICBUaGlzIGFsc28gbWFrZXMgaXQgcG9zc2libGUgdG8gYnVpbGQgb24gcGxhdGZvcm1zIGxpa2UgU29sYXJpcyAxMCB0aGF0IGRlZmluZQorICAgIElQX1JFQ1ZEU1RBRERSIGJ1dCBsYWNrIGVpdGhlciBvZiBtc2doZHIubXNnX2NvbnRyb2wgYW5kIG1zZ2hkci5tc2dfZmxhZ3MuCisKK2NvbW1pdCA5NTNmMmUzZDQyNWVkZTNiODYzYTJlN2NjYjBiNGJjODYyOTI4YjU3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDUgMjI6MTM6MDcgMjAxMSArMDEwMAorCisgICAgTW92ZSB0aGUgdXNlIG9mIF9zZW5kdG8gYW5kIF9yZWN2ZnJvbSBiZWxvdyB0aGVpciBkZWZpbml0aW9ucy4KKworY29tbWl0IDY4YTExNzNjNDZjZjc3NjAxNDI2Y2YzOTFkOWE4NTI3OTRmMjA1N2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBOb3YgMjAgMjA6MDU6MTggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogU2VwYXJhdGUgb3V0IHRoZSBjbWVzZyBidWZmZXIgc2l6ZQorCitjb21taXQgNDYxZGQxNmYzYjI2NDczMjJjZGNlNjM2MzA4MWNjNDRiYTVhNDliNQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAyNiAyMTo1MTowMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNZXJnZSB0b2dldGhlciB0aGUgTGludXggYW5kICpCU0QgdmVyc2lvbiBvZiBzcmMgcG9ydCBzZW5kaW5nLgorCitjb21taXQgN2FjY2I2OWJhYTFmYzBiNmEzNDM5ZDJlNTQ5Yzg2ZGEzNDUzYmFkMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOTozMDozMSAyMDExICswMTAwCisKKyAgICBVc2UgYSBiYXJlIHN0cnVjdCBpb3ZlYyBpbiBpbnN0ZWFkIG9mIGEgb25lIGVsZW1lbnQgYXJyYXkuCisgICAgCisgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8gbWFrZSBfcmVjdmZyb20gbW9yZSBzaW1pbGFyIHRvIF9zZW5kdG8uCisKK2NvbW1pdCAzOTg1MmNkNGM4NWVmMmJmYzc1Y2RlYTI4MjUyNjFlZTkzZTc2OGMyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjI5OjIwIDIwMTEgKzAxMDAKKworICAgIEFkZCBjb21tZW50IGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGwgdG8gZ2V0c29ja25hbWUgYWZ0ZXIgYWxtb3N0IHJlbW92aW5nIGl0LgorCitjb21taXQgMWIyOTJjYTI3ZWFiNWNhYTczZmVhYWE4M2RjOWMxMmFiYzBmMmU3MAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToyNzo1OSAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGUuCisKK2NvbW1pdCBiYzg3OTU3MWVjYTk1MjBiYzEzMmY4NDBjM2U2NTlkMzc5MzE0NGQ3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjI1OjM2IDIwMTEgKzAxMDAKKworICAgIEludHJvZHVjZSB0ZW1wb3JhcnkgdmFyaWFibGVzIHRvIGVhc2UgdGhlIGV4dHJhY3Rpb24gb2YgdGhlIHNlcnZlciBhZGRyZXNzLgorCitjb21taXQgYjdlZWE2Y2ZmYmQ4NzI5MzJjZTJjMDRmZWZiNmY0M2RlMzM5ZjM3NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToxODozMyAyMDExICswMTAwCisKKyAgICBSZW5hbWUgdGhlIGNtZXNncHRyIHZhcmlhYmxlIHRvIGNtLgorICAgIAorICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gaW5jcmVhc2UgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSBjb2RlLgorCitjb21taXQgMGE3NDYxZTcyODgwNWM2MmExY2FiOWQ4N2JmYzc0Yzc5MjdhOWZjYworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToxNToyMiAyMDExICswMTAwCisKKyAgICBGYWN0b3Igb3V0IGEgY29tbW9uIGxvb3AgaW4gcmVjdm1zZyBvcHRpb24gcHJvY2Vzc2luZy4KKworY29tbWl0IGIzYzYyNDhkMDIwMWFiMTYxMDg0MGQ2ZDBlNzQ5YjNiNmM0YWQ3OTIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6MTM6NDMgMjAxMSArMDEwMAorCisgICAgVW5pZnkgdGhlIHN0cnVjdHVyZSBvZiBMaW51eCBhbmQgQlNEIHJlY3Ztc2cgb3B0aW9uIHBhcnNpbmcgc29tZXdoYXQuCisKK2NvbW1pdCAzNTY0MDBkNjI5MGE0MjNiNTJlYmVlYTVhNWU5NzZmYjE1YmI3M2I0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjA0OjU2IDIwMTEgKzAxMDAKKworICAgIFVzZSBDTVNHX0RBVEEgb24gdGhlIHJlc3VsdCBvZiBDTVNHX0ZJUlNUL05FWFRIRFIsIG5vdCBvbiB0aGUgYnVmZmVyLgorCitjb21taXQgM2IzNTE3MDhjNjJkZTQ2YWExYjkwZWQyMzJjZmQ4YzdjNWIwMjIzMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDEyOjAwOjMyIDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSBhIGNhc3QKKworY29tbWl0IGRlOTI1MGQ5ZGFlOTcyN2E2Y2M3ZjY0NzY4OGRkZGYxYjg1OTcxMjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAxMTo1ODowNCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWFrZSBzcHJpbnRfbWliX29pZCgpIHRyZWF0IE9JRCBjb21wb25lbnRzIGFzIHVuc2lnbmVkIGluc3RlYWQgb2Ygc2lnbmVkIGludGVnZXJzCisKK2NvbW1pdCAwZTMzYjNiNmQ1ODU0YTRiYWMxNWQ0ZWE1ZTAxNmM1M2QxNjFkMGNkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDggMTA6MDI6MjggMjAxMSArMDEwMAorCisgICAgRml4IHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IGI3ZTUwZDVmOWE2NzU1OTgyZDJhZjMxOTE0NzNjYjM0NjQzYmMwM2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAwODozNzoyMiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBSZWR1Y2Ugb3ZlcmhlYWQgb2YgY29uZmlnIGZpbGUgcGFyc2luZworCitjb21taXQgNzNjOWVlNDJkMjhhZmUyZTEwN2E3ZDY2MTZiNmQwMTE4OTBjMzZlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDA5OjA5OjU5IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCisKK2NvbW1pdCAzZGI5Nzk2MmIzN2ViMTJkMjU0ZDYxZTZiZTIzNGIwNmEzOTFjOGJiCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUaHUgRGVjIDggMDc6NDM6NDUgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDM0NTM4Njg6IGZyb20gIkJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPiI6IEZhY3RvciBjb21tb24gY29kZSBpbnRvIHBhc3NfY29tbW9uCisgICAgCisgICAgTW92ZSB0aGUgY29kZSBmb3IgcG9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdmFsdWVzIGZyb20gcGFzcyBhbmQgcGFzc19wZXJzaXN0CisgICAgaW50byBwYXNzX2NvbW1vbi4KKworY29tbWl0IGI2NTY4YzgzZjE3NTZlOWE2NTQzNGVkZWVlYjQwZDIzZGRiYmI2NTIKK0F1dGhvcjogY2NjaGl1IDxjY2NoaXVAc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDcgMTY6MjU6MjcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogQlVHOiAzNDUyMDY5OiBGaXggc25tcHRyYXBfb2lkIGRlY2xhcmF0aW9uIGluIG1pYjJjIGdlbmVyYXRlZCBjb2RlCisgICAgCisgICAgVGhpcyBidWcgd2FzIGludHJvZHVjZWQgY29uc2lkZXJhYmxlIHRpbWUgYWdvLiBJdCBkaWQgYWxyZWFkeSBleGlzdCBhdCB0aGUKKyAgICB0aW1lIHRoZSA1LjYgYnJhbmNoIHdhcyBjcmVhdGVkIChzZWUgYWxzbyBjb21taXQKKyAgICAwZWMwODhhZmEyN2NmZGE0ZTZlYTc4YWFlN2NmYzU1MDc1NjRlZGRlKS4KKworY29tbWl0IGQ0OTRkYjY0YzIwOGI0ZGM2MjgxMzEzMmY4ODYzYmQ1YzFhMzlkNzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDozODoxNyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEVsaW1pbmF0ZSBhbiB1bnVzZWQgdmFyaWFibGUgKE5vdykKKworY29tbWl0IDI4ZjI1NjFiYzI5MzVkOGUxY2JmNDZkMjgyMDE1ODE3M2U3YTRjZjQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDozNzoxMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IE1vdmUgdGhlIG1haW4gbG9vcCBjb2RlIGludG8gYSBuZXcgZnVuY3Rpb24KKworY29tbWl0IDM5NmUxMjJkZGM0MmE5MTZmMDZhMDI4ODRjMGU4YTI1OGVkYmUyMzgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAwOTozMjoxNiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWF0Y2ggZWFjaCBnZXRwd25hbSgpL2dldHB3dWlkKCkgY2FsbCB3aXRoIGFuIGVuZHB3ZW50KCkgY2FsbCBhbmQgZWFjaCBnZXRncmVudCgpIGNhbGwgd2l0aCBhbiBlbmRncmVudCgpIGNhbGwuCisKK2NvbW1pdCAzZWZlZmJjMDAyNDM5OTc4NmY4YjY4YjFlOTNiMGE4ZmRkZGRjN2RhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6NDE6MDEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBSZW1vdmUgc3VwZXJmbHVvdXMgY2FzdHMKKworY29tbWl0IDdmMDVkYWE4ZTBlMGY1MzNiMGYxMmEzZTFjZjA3NjQxNTE5OTA5ZDYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMTo1ODozMiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NDQ5Mzk6IEJVRzogMTc5Njg4Njogc25tcGxpYjogQXZvaWQgdGhhdCBzcHJpbnRfcmVhbGxvY19vY3RldF9zdHJpbmcoKSBlbWJlZHMgdW5wcmludGFibGUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIGJpbmFyeSB6ZXJvZXMgaW4gaXRzIG91dHB1dC4gVGhpcyBiZWhhdmlvciBjb3VsZCBjYXVzZSB0cnVuY2F0ZWQgb3V0cHV0IGluIHNubXB0cmFwZC4KKworY29tbWl0IGRiOGY1NThmZDJmM2I3YzEwOWVhM2ExYzIxMzNiNzViNmY4Y2IyYWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDowNDo0MSAyMDExICswMTAwCisKKyAgICBDb21waWxlciB3YXJuaW5nIGZpeDogcGFzcyB1bnNpZ25lZCBjaGFycyB0byBpc3ByaW50KCkgaW5zdGVhZCBvZiBzaWduZWQgY2hhcnMuCisKK2NvbW1pdCA4MDBkYzEwMjhlN2UwY2Q4Y2MxNGQ4NGRkMzE3MjNkNDdhYzA3M2RiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6MTg6NTggMjAxMSArMDEwMAorCisgICAgUmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgaGludCB2YXJpYWJsZQorCitjb21taXQgODNlYTRhMDgwYzkwYTc0Yjk3NDNkM2YyNGNmMGQ0YjhhMWU4Yzg0OQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE5vdiAyNyAyMToxNjo1MiAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBxb3MKKworY29tbWl0IDdiOWUwMzQ0MWMzZGMzYTA3NjcwZWQwMWY1ZDA0NzkxYTgyYzc1MGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDQ6MDEgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlICNkZWZpbmUgdmFsKHgpIF9fU1RSSU5HKHgpIGFuZCBjaGFuZ2UgdmFsKHgpIGludG8gX19TVFJJTkcoeCkuCisKK2NvbW1pdCAyZjM3OWIwZTRlY2FkZmE0ZTU0MWUzMDA1YzhmYzgyODE4ODJiNzQxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE1OjU4OjQ3IDIwMTEgKzAxMDAKKworICAgIEZvbGxvdy11cCBmb3IgY29tbWl0IDFhYTcwNGU6IHVuYnJlYWsgdGhlIE1TVkMgYnVpbGQKKworY29tbWl0IDY0ZWYwZjcxMTI3NjE3ODM3MDI3ZmIyY2ZhZjE3NGI5NWJhNzllMGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MTk6NTAgMjAxMSArMDEwMAorCisgICAgQWRkIFNOTVA6OnJlZ2lzdGVyX2RlYnVnX3Rva2VucygpCisKK2NvbW1pdCA3YmVhZDljYTkxN2M2NzU2NmQ1ZWQ5OGFiNTA3YmJjMDI4MTYyMTdkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE0OjA4OjA4IDIwMTEgKzAxMDAKKworICAgIEFnZW50WCBzdWJhZ2VudDogUmVkdWNlIGNvZGUgZHVwbGljYXRpb24KKworY29tbWl0IDBlZDcxNTQxZjg3ZTdkNzhiYzk5OGVlYmRhMzIxN2M1OWUxZGY4MzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDM6MTkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIERveHlnZW4tc3R5bGUgZnVuY3Rpb24gaGVhZGVyIGZvciBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCkgYW5kIG5ldHNubXBfY2xlYXJfZGVmYXVsdF90YXJnZXQoKS4KKworY29tbWl0IDhjMjk3MmI2MWU0MDE2OWI0N2M1MDk4OGI2YWU5ZThjMjg1Zjg0ZjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDI6NTQgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogRml4IHNwZWxsaW5nIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBTTk1QIG1vZHVsZQorCitjb21taXQgNWRmMmJhYzZiZDcxNzc5OTMxMWYwMDFhYzdiNzNkYjg4ZjExYmRkYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIE5vdiAyOSAwODo1OTo1OCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBPbmx5IHRyYW5zZm9ybSB0aGUgYWRkcmVzcyB0byBwcmludGFibGUgZm9ybSB3aGVuIG5lZWRlZC4KKworY29tbWl0IDE3MWU4ZDQ4ZDRhZjA0MDEzY2ZmOGZkMjhmNTM0MWEyYWVmMjFkODgKK0F1dGhvcjogTWlqbyBTYWZyYWRpbiA8c2FmcmFkaW5AbGludXgudm5ldC5pYm0uY29tPgorRGF0ZTogICBUdWUgTm92IDI5IDE2OjQ5OjQ2IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXAtYnJpZGdlLW1pYjogRml4IGluZGV4IGludGVycHJldGF0aW9uLgorICAgIAorICAgIFRoaXMgcGF0Y2ggY29ycmVjdHMgYSB3cm9uZyBkYXRhIGludGVycHJldGF0aW9uLgorICAgIHNubXAtYnJpZGdlLW1pYiBvYnRhaW5zIHRoZSBpZmluZGV4IHZhbHVlIGZyb20gdGhlIHN5c2ZzCisgICAgYXR0cmlidXRlICdpZmluZGV4JyBUaGUgdmFsdWUgZ2l2ZW4gYnkgdGhlIHN5c2ZzIGF0dHJpYnV0ZQorICAgIGlzIGFuIGludGVnZXIsIHdoaWNoIGlzIGhhbmRsZWQgYXMgaGV4IGFuZCBsZWFkcyB0bworICAgIGluY29ycmVjdCBkYXRhIGRpc3BsYXllZCB0byB0aGUgdXNlci4KKyAgICAKKyAgICBlLmcuCisgICAgICAgICQgPiBzbm1wd2FsayBsb2NhbGhvc3QgQlJJREdFLU1JQjo6ZG90MWRCYXNlUG9ydElmSW5kZXguMgorICAgICAgICBCUklER0UtTUlCOjpkb3QxZEJhc2VQb3J0SWZJbmRleC4yID0gSU5URUdFUjogNTQKKyAgICAKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHN5c2ZzIGF0dHJpYnV0ZSB0aGUgdmFsdWUgaXMgMzYKKyAgICAKKyAgICAgICAgJCA+IGNhdCAvc3lzL2NsYXNzL25ldC88ZGV2aWNlPi9pZmluZGV4CisgICAgICAgIDM2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWlqbyBTYWZyYWRpbiA8c2FmcmFkaW5AbGludXgudm5ldC5pYm0uY29tPgorCitjb21taXQgODJlMzlmYjY3MDZkZjkwZWNmMmZjOWUxMGFkYTJiOTYyZWUxOTZmMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBOb3YgMjkgMTI6Mjc6NDYgMjAxMSArMDAwMAorCisgICAgRml4IG11bHRpLWxpbmUgY2FzZSB0ZXN0aW5nIG9mIGluY29taW5nIE9JRAorCitjb21taXQgYjE1ZGExYTQ1MTYwNjExMDVhMWVhYzc0NTBjZjY1MGVjNDQyNjZiMgorQXV0aG9yOiBOaWtvbGF5IERlbmV2IDxuZGVuZXZAZ21haWwuY29tPgorRGF0ZTogICBUdWUgTm92IDI5IDA4OjI5OjQ5IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IEZyZWVCU0Q6IFJlc3RvcmUgSVBfUkVDVkRTVEFERFIgZnVuY3Rpb25hbGl0eS4KKworY29tbWl0IDdmNDdmNTJlNDgxYmFhOWFhZmI1Nzg0MjQ0YjBkZDI2NTNlN2RjZmYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBOb3YgMjggMDg6NTE6MzkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogVXNlIFNOTVBfQUxMT0NfVFlQRURFRiB0byBhbGxvY2F0ZSB0cmFuc3BvcnRzIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBzZXBhcmF0ZSBjYWxsIHRvIG1lbXNldC4KKworY29tbWl0IGNmODYwMzllMzA4NjIyNWMzMDg1YmI5YWRmMDg4YjhiYTViYTY5NzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMTU6MDI6NTggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIgcGFzcy4KKworY29tbWl0IDFhODdlNzZlMDBlZTNkNWNkMzdhMDdiZmMzZDg0NDkwZDNjMmE0ZWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMTQ6NTU6NDIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdW5pdC10ZXN0cy9UMDE0Z2V0aG9zdGJ5YWRkcl9jbGliIHBhc3MKKworY29tbWl0IDg4NjdmZDFkY2ZlNzJiNTlkMDczMjJmZjM4YTY5OWI2NmVjNGYzMjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMDk6NDQ6MzggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSByb2J1c3QgYWdhaW5zdCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4KKyAgICAKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIE5FVFNOTVBfTEFSR0VfRkRfWkVSTygpIHVzZSBtZW1zZXQoKSBvbiBVbml4IHN5c3RlbXMgaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBsb29wLgorICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2Ugc3VyZSB0aGF0IG9uIFVuaXggc3lzdGVtcyBuZXRzbm1wX2xhcmdlX2ZkX2NscigpIGRvZXNuJ3QgdHJ5IHRvIHJlYWQgbWVtb3J5IGl0IGlzbid0IGFsbG93ZWQgdG8gcmVhZCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZXF1YWxzIC0xIChhIHZhbHVlIHRoYXQgc2hvdWxkbid0IGJlIHBhc3NlZCBieSB0aGUgY2FsbGVyKS4KKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KCkgcmV0dXJuIGZhbHNlIG9uIFVuaXggc3lzdGVtcyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZXF1YWxzIC0xIChhIHZhbHVlIHRoYXQgc2hvdWxkbid0IGJlIHBhc3NlZCBieSB0aGUgY2FsbGVyKS4KKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIHNocmluayBiZWhhdmlvciBjb3JyZWN0LgorCitjb21taXQgMjNkYjBjZjA5YjhiMGVhYjM3Yjc0OWVmMGMzYzNmMzA2OTAwMjQ1YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAyMSAyMzowMjo1NyAyMDExICswMTAwCisKKyAgICBGaXggY2FzdGluZyB0dl91c2VjIHRvIGludCB3aGljaCBtYXkgYmUgdG9vIHNob3J0CisKK2NvbW1pdCA4MGVlNDAyMmU1MzRlNjRhYWQ1YTVmMjcxOTI4NDNiNDJhY2I4NWUwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDE5IDA5OjE0OjAyIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM0MzkyMzQ6IE1vdmUgbmV0c25tcF9wYXNzX3N0cl90b19lcnJubyB0byBwYXNzX2NvbW1vbiBhbmQgcmVuYW1lIGl0IHRvIG5ldHNubXBfaW50ZXJuYWxfcGFzc19zdHJfdG9fZXJybm8KKworY29tbWl0IDBiYWE5Mjk2YzA3MmJiMzczNTc2MGIwZGQ5OTJmMmQxZDNjYTI3ZmEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgMTkgMDk6MDU6MjQgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzQzOTIzNDogQ29ycmVjdCB0aGUgZGVwZW5kZW5jaWVzIG9mIHVjZC1zbm1wL3Bhc3MgYW5kIHVjZC1zbm1wL3Bhc3NfcGVyc2lzdAorCitjb21taXQgMWFhNzA0ZTRhMjk0NDMwYjI4ZTM5YjZmOWU0NjgzYjhhNDhiY2UwNAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAxOSAwODozNToyMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRmFjdG9yIG91dCBhc2MyYmluIGFuZCBiaW4yYXNjLiBBZGQgYSBuZXRzbm1wX2ludGVybmFsXyBwcmVmaXggdG8gdGhlbQorCitjb21taXQgY2RhOGZlOTEwMTNmMTJjYmY2NGEwNzc1YWJiNTU3MjAwMzVhZjkzMQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAxOSAwMDo1NToyNCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQ2FsbCBzbm1wX29pZHRyZWVfY29tcGFyZSBpbnN0ZWFkIG9mIHNubXBfb2lkX21pbl9jb21wYXJlCisgICAgQ0hBTkdFUzogc25tcGQ6IFJlbW92ZSBzbm1wX29pZF9taW5fY29tcGFyZSBzaW5jZSBpdCBpcyBpbnRlcm5hbCBhbmQgdW51c2VkCisKK2NvbW1pdCA4NWY4OTNlMmI2MDVlNjdmOWJkMDQ0M2M3NGUyZWQyNjlhYTY4NTY0CitBdXRob3I6IE5pa2kgRGVuZXYgPG5pa2lfZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBOb3YgMTcgMjI6NDI6MzIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDMxNzU2NDA6IFVzZSBJUF9SRUNWRFNUQUREUiBzb2Nrb3B0IHdoZXJlIGF2YWlsYWJsZSAoKkJTRCkKKyAgICAKKyAgICBUaGlzIGh1bmsgZmVsbCBvZiB3aGVuIHRoZSByZXN0IG9mIHRoZSBwYXRjaCB3YXMgbWVyZ2VkLgorCitjb21taXQgNWM5MTNlNTQ2NTZhZTAwOTZiMWZlYjZkYTk4YjVmYzljYTgxZjI3NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzozMzowNyAyMDExICswMTAwCisKKyAgICBEZWZpbmUgdGhlIGZ1bGwgTmV0QlNEIGhpZXJhcmNoeSBkb3dud2FyZHMKKworY29tbWl0IGI4ODE4NDFiZDA0OTNkZDcxZDYzMjU5YmRkZWQ0NDliMDZmMDJjMzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MzA6MzMgMjAxMSArMDEwMAorCisgICAgRml4IHNpemVfdC9pbnQgbWlzbWF0Y2hlcworCitjb21taXQgY2EyOTRjZjc1YmJjOGU5MGRiZjQ0ZWU0MDQ3ODkzNWU5MWRiMTQ4NworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzoxODowMyAyMDExICswMTAwCisKKyAgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcworCitjb21taXQgY2QzMmMyZGZmMDZiOWI0NTJjYzE4ZDU1MmQyZjIyMzQwOTJjODI5YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzoxNzowOSAyMDExICswMTAwCisKKyAgICBGaXggZm9ybWF0IHdhcm5pbmcKKworY29tbWl0IDg4MzEzNmMyYjJmYTA3MzlmNDM3YThjZmI2NjE0YWNjYzc2ZTI2OGUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MTU6NTggMjAxMSArMDEwMAorCisgICAgTW9yZSBuZWVkcyBmb3IgTkVUU05NUF9QUklvIGZvcm1hdCBzcGVjaWZpZXIKKworY29tbWl0IGI4MDg0YTdjY2M5MDliNmQ2ZGI3YzBlOGU1OTZkNzg2NzFmNTY3OGIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MTQ6MjYgMjAxMSArMDEwMAorCisgICAgRml4IHVzaW5nIGNoYXIgYXMgYXJyYXkgaW5kZXggKGN0eXBlLmgpCisKK2NvbW1pdCA4NDUyOWU2MzIwYTg5ZDk3ZjEzMTRhZWJhZDgwNjI1NWQyYTFiMThjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjAwOjU3IDIwMTEgKzAxMDAKKworICAgIEZpeCBtaXNzaW5nIGZvcm1hdCBmb3IgRnJlZUJTRCA0CisKK2NvbW1pdCA0YmQwMzUyOTU1YTI1NTFiZmUwMjMwOGRkMTM0YjkxMjhjOThiOWU5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIyOjU5OjM2IDIwMTEgKzAxMDAKKworICAgIEZpeCBwYXJhbnRoZXNpcyBwcm9ibGVtCisKK2NvbW1pdCBmZTYyNjliMTkwMGNmNDRkYzI3YTE5OWE3NjFkMTVhMDFjM2YzMDkyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIyOjU4OjM0IDIwMTEgKzAxMDAKKworICAgIEZpeCBzaXplX3QvaW50IG1pc21hdGNoZXMKKworY29tbWl0IGE0ZGI5ZjlmYzEzZDIxZWNmZjQ4OGViNDEwMzc2ZWRkYTZjMjgyMzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMTM6NDM6MzQgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKKworY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMTM6Mzc6NDkgMjAxMSArMDEwMAorCisgICAgRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzCisKK2NvbW1pdCAyNWNmYzE5NjJhZTU3NmNjYjE1NThkYTFlM2VmOGI2YzE3ZjYzYzE2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDExOjI3OjUzIDIwMTEgKzAxMDAKKworICAgIFJlYWxseSB1cC10by1kYXRlIG1pYnMKKworY29tbWl0IDBlODZjNzgxZjM5ODliZjAyMmM4OTkzYTExODYxN2I3NGE3NTQyMGMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMDk6MTc6MTkgMjAxMSArMDEwMAorCisgICAgbWVtb3J5X2xpbnV4OiBnZXQgU2htZW0gZnJvbSAvcHJvYy9tZW1pbmZvIGZvciAyLjYgKG9yIG5ld2VyKSBrZXJuZWxzCisKK2NvbW1pdCBiZjI2NGQxNWRlZDdhY2JiZjJlMzg3MWI5OGZkMWZjZWY0M2Q5ZWMzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjE2OjE2IDIwMTEgKzAxMDAKKworICAgIG1lbW9yeV9saW51eDogY2xvc2Ugc29ja2V0cyBpbiBlcnJvciBzaXR1YXRpb25zCisKK2NvbW1pdCA1N2ZmOGE0MGJhZTVkOWJjYWQxNjA4OTE0MmE5Y2YzMjhjOWZhMWY1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjE0OjU3IDIwMTEgKzAxMDAKKworICAgIGRpc21hbi9waW5nLCBkaXNtYW4vdHJhY2Vyb3V0ZTogQ2xvc2Ugc29ja2V0cyBpbiBlcnJvciBzaXR1YXRpb25zCisKK2NvbW1pdCA4YTI1MDJhMTVjMzIxN2I5NTkzOWEzYzgzNjE2N2QyMzBhYzM1ZjAyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjEzOjUzIDIwMTEgKzAxMDAKKworICAgIFVwLXRvLWRhdGUgbGlzdCBvZiBSRkNzIHdpdCBtaWJzCisKK2NvbW1pdCBkY2RkNzAyMTExZDhkYTVmNTM4MDRjZmNmMGRmZGFkNzMxNDY4YmRlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE5vdiAxNSAxMDo1NzozNCAyMDExICswMDAwCisKKyAgICBEb24ndCB0cnkgdG8gaW5zdGFsbCBhbiBlbXB0eSBsaXN0IG9mIG1hbiBwYWdlcyAoTUFOMykKKworY29tbWl0IGJhNjE5ODA0ZTU5NzhhOGRmNzU0ODQ0ZWZjY2E1MmI2OWI1MDE1ZmEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMTQgMTM6MzQ6MjAgMjAxMSArMDEwMAorCisgICAgTWluR1c6IE1ha2Ugc3VyZSB0aGF0IHRoZSBiYWNrc2xhc2hlcyBpbiB0aGUgcHNraWxsIG1lc3NhZ2UgYXJlIGRpc3BsYXllZC4KKworY29tbWl0IDkyM2VlY2M1MDdmNzUwNDNiNjBjNWU2ODA1M2E0ZjM5NmFiMGIwZDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMTQgMTI6MzY6MzggMjAxMSArMDEwMAorCisgICAgQ29tcGlsZXIgd2FybmluZyBmaXggZm9yIHN5c3RlbXMgd2hlcmUgdWludDY0X3QgPSB1bnNpZ25lZCBsb25nIChlLmcuIFJIRUwgNi4xL3g4Nl82NCkKKworY29tbWl0IDQzNGJmYzFmNzQ1NzU1MGI2Zjg3ZDViY2Q1MTEyNzZiMjcwYjU5NjQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDE0IDExOjIyOjUzIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBmcm9tIE1hcnRpbiBXaWxjazogZml4ZWQgc25tcGQgY3Jhc2hpbmcgd2l0aCAnc2VsZWN0OiBiYWQgZmlsZSBkZXNjcmlwdG9yJy4KKyAgICAKKyAgICBPbiAzMi1iaXQgc3lzdGVtcywgc25tcGQgZGllcyB3aXRoIGFmb3JlbWVudGlvbmVkIG1lc3NhZ2Ugd2hlbiB1c2luZyBmaWxlIGRlc2NyaXB0aW9ucyA+IDMyLCBlLmcuIHdoZW4gaGF2aW5nID4zMiBBZ2VudFggc3ViYWdlbnRzLgorCitjb21taXQgZWQ2NWVjYTZlN2Y5Y2ZhNzM4MGE3OGQ1NmMwMWVkMzE0NzQ1YjE2OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAxMSAxOTowMToyMSAyMDExICswMTAwCisKKyAgICBGcmVlQlNELTk6IEZpeCBmb3IgY29uc3QnaWZ5ZWQgbmxpc3QgYXJndW1lbnRzCisKK2NvbW1pdCBlYWNhNzk4M2UzNjU1YWI2OTZmY2M0NDYxY2EwY2VkYmFjNmNlNjlhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDExIDE5OjAwOjEyIDIwMTEgKzAxMDAKKworICAgIE5ldEJTRC02OiBPbmUgbW9yZSBpbnN0YW5jZSBvZiB0aW1lc3BlYyByZXBsYWNpbmcgdGltZXZhbAorCitjb21taXQgOGFkNmM1M2ZkZWM1YWRlYWU0ZTUyZjE3NTFlY2VjNGEzNDViYWIwNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAxMSAxODo1OTowMSAyMDExICswMTAwCisKKyAgICBGaXggYnVpZyAjMzQzNjUyNzogYXJwX25ldGxpbms6IGZpeCBkeWluZyByZWxvYWQgb2YgY2FjaGUKKworY29tbWl0IDM3OGZmZWQwM2JhNzlhODM0NmQ2YzYyNzgxZTJkZGY1Y2U5MmE0NzgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMTEgMTg6NTU6NDMgMjAxMSArMDEwMAorCisgICAgRml4IGJ1ZyAjMzQzNjUyODogc3dpbnN0X3BrZ2luZm86IHJlY292ZXIgZnJvbSBOVUxMIHJldHVybiBmcm9tIG9wZW5kaXIKKworY29tbWl0IGQ3YWQ4ZjVmOWYzZjY3ZjE2ZjY1YzI1MTVkMTFlMTk0ZDJjZGQxMmMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMTAgMTQ6MDQ6NDEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogQ3lnd2luOiBNYWtlIGRhdGVfbl90aW1lKCkgcHJvZHVjZSB0aW1lIHpvbmUgaW5mb3JtYXRpb24KKworY29tbWl0IGJhMzVjNTBiMmY0NTliZDljMTFlZDU5Y2M3ZDFiMTYyMTU2NDRmYTMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMTAgMTQ6MTc6MDQgMjAxMSArMDEwMAorCisgICAgUmVwbGFjZSBBQ19UUllfTElOSygpIGJ5IEFDX0xJTktfSUZFTFNFKCkKKyAgICAKKyAgICBOb3RlOiB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0LgorCitjb21taXQgZjYxNWJmMjRmNWQwZjIzY2U5MzAxZGE1NTYxODRkNjQ2MDc0MDQ1NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiA5IDIwOjMyOjQ5IDIwMTEgKzAxMDAKKworICAgIEZpcyBCdWcgIzM0MzQ4MjQ6IFNJR1NFR1Ygd2hlbiByZWFkaW5nIGRpc2sgZGlyZWN0aXZlIGFmdGVyIFNJR0hVUAorCitjb21taXQgYTk0YTE3OWQ5MzQwZjUxZmE3YzIzNDMxNjMwYmMwZmZkNmQ3NTllOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiA5IDIwOjMwOjUxIDIwMTEgKzAxMDAKKworICAgIEZpeCBidWcgIzM0MzM2MTY6IGRvbnQgdHJlYXQgRGF0ZUFuZFRpbWUgYXMgYSBzdHJpbmcKKworY29tbWl0IGIyOWU0MTY0NTMxZDI1OGZlMzRhNmZlMmI5ZTFlYzYwYzU2Zjk1NDQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBOb3YgNyAwMToyNTo1NyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisKK2NvbW1pdCBlMjIxZTY1ZmRjMWM2OGYxOTY4NjUxNzE3ZGNjOWNjZmI2NDE0NzgzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTm92IDMgMTU6MDU6MDAgMjAxMSArMDEwMAorCisgICAgRml4IHdhcm5pbmdzIGFib3V0IGNvbnZlcnRpbmcgc29ja2FkZHJfaW4gKiBpbnRvIHNvY2thZGRyICouCisgICAgCisgICAgVGhpcyBpcyBhIGZvbGxvdy11cCBmb3IgY29tbWl0IGEwYWYzODUuCisKK2NvbW1pdCAyZTdlOWVkYTBiMGQ2MmE3NjQ1YTlhOGY3MGVmM2ZiNmYzZGQ2OTQxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTm92IDMgMTE6MTc6NDggMjAxMSArMDEwMAorCisgICAgRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3MuCisKK2NvbW1pdCAzNDYyZWJjZGQwYjdjMjk4Y2IxNWMzMDk5NzM2ZjRmOTUyMjU3ODQ2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgT2N0IDI4IDE2OjA3OjE1IDIwMTEgKzAyMDAKKworICAgIFJlbW92ZSB0aG9zZSBzdXBlcmZsdW91cyBwYXJlbnRoZXNlcyB0aGF0IHRyaWdnZXIgYSBjbGFuZyB3YXJuaW5nLgorCitjb21taXQgM2U1ZmVkZDNlN2QxZWYzMTY4MzYwNGJmNzNkYzU2ZTk0NGNhZDM0OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBOb3YgMyAwOTo0NToyNyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBhZnRlciAzMCBkYXlzIG9mIHVwdGltZS4KKyAgICAKKyAgICBBZnRlciAzMCBkYXlzLCB2YWx1ZXMgZnJvbSAvcHJvYy9zdGF0IChvbiBMaW51eCkgY2FuIGdldCBiaWdnZXIgdGhhbiAzMmJpdHMgYW5kIHNubXBkIGNhbGN1bGF0aW9ucyBtaWdodCByZW5kZXIgY291bnRlcnMgbGlrZSBzc0NwdVVzZXIgbmVnYXRpdmUgb3IgemVybywgd2hpbGUgdGhlIHJlYWwgdmFsdWUgaXMgaGlnaGVyLiBUaGVyZWZvcmUgdGhlIGNvdW50ZXJzIHNob3VsZCBiZSB0cmFja2VkIGFzIHRoZSBsYXJnZXN0IGludGVnZXIgYXZhaWxhYmxlLgorCitjb21taXQgMGZjODIyMWIyNDk4OGM0YWU2MTgwZWQ0MmI4NmI5ODUyZmQ1ODZhZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAyIDIyOjU5OjA4IDIwMTEgKzAxMDAKKworICAgIGRza0luZGV4IHdhcyBvZmYgYnkgb25lCisKK2NvbW1pdCBhNWIyODgyOWU2NGQ1ZjNiODdlNGI5YjFlZjhjYzIwNGYzM2E2MWI3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDIgMjE6MjU6MDcgMjAxMSArMDEwMAorCisgICAgU29sYXJpcyBuZWVkcyAkQVdLIHRvIGdldCBhIHVzYWJsZSBuYXdrCisKK2NvbW1pdCAyODAxYTIxMzlmMjcwMjFlMWFiMTVlMzYyZTJkM2Q2MjRmZmFhNDk0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDMxIDIyOjU1OjUzIDIwMTEgKzAxMDAKKworICAgIFBhdGNoICMzNDA2MzY0OiBGaXggdW5zdGFibGUgZGF0YSBmb3IgTmV0QlNELgorCitjb21taXQgODIxYTU4ZDExMmQ3YWM0OTUxNDllMjYyZDcwNDQxMmJhMjgwMDQzOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAzMSAyMjo0Mzo1MiAyMDExICswMTAwCisKKyAgICBGaXggaXB2NiBzdGF0aXN0aWNzIGxvb3BpbmcgdG9vIGZhciB3aGVuIHNjYW5uaW5nIGludGVyZmFjZXMuCisgICAgRml4IFRDUCBzZXNzaW9uIHRhYmxlIHJlcGVhdGluZyBkYXRhIGZyb20gZmlyc3QgZW50cnkgZm9yIGFsbC4KKworY29tbWl0IDM0OTU5MWQwM2UxN2E1NWI0M2VhY2M2YTY4N2IwMmZkOGQ0ZTk1MjgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBPY3QgMzEgMDg6NTk6MzcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBwZXJsIHN1cHBvcnQgd2l0aG91dCBzdXBwb3J0IGZvciBvcGFxdWUgdHlwZXMuCisKK2NvbW1pdCAxZWM3MTEwZTcyYmNlMTU2MWY3NDY1MTc0NTlkNmYwNDMwMTZiNjBlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDMwIDE5OjA1OjMwIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2UgdGhlIGFzbjEgdGVzdCBwYXNzIGV2ZW4gaWYgc3VwcG9ydCBmb3Igb3BhcXVlIHR5cGVzIGFyZSByZW1vdmVkLgorCitjb21taXQgNmQyNjkxOGFmNTVhYTM2NjJhNzIwNTQyZGU3N2JiZjM5YjBhM2U5MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE9jdCAyOSAwODozNDozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRGlzYWJsZSB0aGUgc3VwcG9ydCBmb3IgaW50ZWdlcjY0IGluIHBhc3Mgc2NyaXB0cyBpZiBjb21waWxpbmcgd2l0aG91dCBvcGFxdWUtc3BlY2lhbC10eXBlcy4KKworY29tbWl0IDI5YmY2OWQ3MDQyNGYzNTlkOWM4N2YwN2E5NjRhMDk5NDE1NjQ5YTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTAgMTM6MDI6MjUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkX3NxbDogQXZvaWQgdGhhdCBhIGxpbmtlciBlcnJvciBpcyB0cmlnZ2VyZWQgb24gc3lzdGVtcyB3aGVyZSBteV9wcm9nbmFtZSBpcyBtaXNzaW5nIGluIGxpYm15c3FsY2xpZW50IChlLmcuIEZlZG9yYSAxNSBhbmQgMTYpLgorICAgIAorICAgIFRoaXMgaXMgYSBiYWNrcG9ydCBvZiBjb21taXQgOWY2NTNmNy4KKworY29tbWl0IDJjYzk1MDRiOWJiODYyNWI5NGJlNmNkYTdlNjA5OTNkMDU5Y2Q5MjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjYgMDk6MDE6MjMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzNDI4NTA2OiBGaXggbmV0c25tcF9nZXRob3N0YnlhZGRyKCkKKyAgICAKKyAgICBUaGlzIHBhdGNoIHNob3VsZCBmaXggdGhlIHJlZ3Jlc3Npb25zIGludHJvZHVjZWQgYnkgY29tbWl0IDg1ZDk2YzQgKE1heSAxMywgMjAxMSkuCisKK2NvbW1pdCA5YjQyN2IzNTNmMWNlYjhmZTg3ZTZmYzhlZDNiNmNmYWIzY2U3ZjIwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgT2N0IDI3IDA4OjIwOjAwIDIwMTEgKzAyMDAKKworICAgIE1pbkdXOiBBdm9pZCBjb25mdXNpb24gYmV0d2VlbiBNaW5HVydzIGtpbGwuZXhlIGFuZCB0aGUgU3lzSW50ZXJuYWxzIHBza2lsbC5leGUKKworY29tbWl0IDJjNDVmOTJjZmNiNWIwNWUwNDkyMjZhNWE3ODgzYTBiMTA2MDExYWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjYgMTA6NDI6MjkgMjAxMSArMDIwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHBhc3NpbmcgYSBjb25zdCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9uLWNvbnN0IHBvaW50ZXIuCisKK2NvbW1pdCAyNzVkMjNlZGZkZWJlMDU3N2IwODQyMWU0YzZjOTM2YWUzOWI3ZmRjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgT2N0IDI2IDA5OjMzOjA5IDIwMTEgKzAyMDAKKworICAgIEZpeCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBzZXQtYnV0LW5vdC11c2VkIHZhcmlhYmxlcworCitjb21taXQgNDQ5NWUxN2MwNzhhYzY5OTdhOWM3ZmExYTg4ZGIwNjQ0ZTkxOTQ5MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCAyNiAwOTozMjo0NiAyMDExICswMjAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2FzdGluZyBhd2F5IGNvbnN0CisKK2NvbW1pdCAxMzk1MmY2YmVlOWY0MDg4NjdhYjZkMmZkZmRkZTRmMjg0MDc0OTU3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAyNiAxNDowNToxNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBmcm9tIFNpZGRoZXNoIFBveWFyZWthcjogcHJvcGVybHkgY2xlYW4gdXAgb2xkIHJlcXVlc3RzIGluIGEgc3ViYWdlbnQgd2hlbiB3ZSByZWNvbm5lY3QgdG8gbWFzdGVyLgorICAgIAorICAgIEFuIHNubXAgc3ViYWdlbnQgbGlua2VkIGFnYWluc3QgbmV0LXNubXAtbGlicyBtYXkgY3Jhc2ggaWYgaXQgaGFuZGxlcyBhCisgICAgcmVzcG9uc2Ugd2hpY2ggaGFzIG1hZ2ljIHJlZmVycmluZyB0byBhbiBvbGRlciBkaXNjb25uZWN0ZWQgbWFpbiBzZXNzaW9uLiBUaGlzCisgICAgbWF5IGhhcHBlbiB3aGVuIHRoZSBzdWJhZ2VudAorICAgIGF0dGVtcHRzIHRvIGNsZWFuIHVwIG9sZCByZXF1ZXN0cyBvbiByZWNvbm5lY3Rpb24gb2YgdGhlIGRpc2Nvbm5lY3RlZCBtYXN0ZXIKKyAgICBzZXNzaW9uLgorCitjb21taXQgYWUwNTI0NzJiMjI3MjBkMDgzNjllODUxMjdkYjIxNDI0NWRmMmUzZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgMjUgMTY6MTU6MTcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogcGVybDogZml4ZWQgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbHMuCisgICAgCisgICAgV2hlbiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIgZmFpbHMsIGl0IGZyZWVzIGl0cyByZWdpbmZvIC0+IG5zYWhyX0RFU1RST1kgKGFuZCBhbnkgb3RoZXIgZnVuY3Rpb24pIG11c3Qgbm90IGRlcmVmZXJlbmNlIGl0LgorCitjb21taXQgYzE5OWJmOTFiNjIzOWYyNmIyYWFiMzRlODU3NWUwZjBkZjljZGU5YgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjQgMTQ6MjU6MjggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHhmcywgamZzIGFuZCB2eGZzIGZpbGVzeXN0ZW1zIGFyZSBub3cgcmVjb2duaXplZCBpbiBoclN0b3JhZ2VUYWJsZQorCitjb21taXQgNzQ3ZmRjNzFlNjRkMDllMDgwOTI4ZWJiYjRkMDRjYmRlMzkwNjc5OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgNSAxNTo1Nzo1OSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTG93ZXJlZCBzZXZlcml0eSBvZiAnZXJyb3IgZmluZGluZyByb3cgaW5kZXggaW4gX2lmWFRhYmxlX2NvbnRhaW5lcl9yb3dfcmVzdG9yZScgbWVzc2FnZS4KKyAgICAKKyAgICBUaGUgbWVzc2FnZSBpcyBzaG93cyB1cCB3aGVuIHNubXBkIGlzIHN0YXJ0ZWQgYW5kIHRoZXJlIGlzIGRpZmZlcmVudCBzZXQgb2YgbmV0d29yayBpbnRlcmZhY2VzIHRoYW4gaXQgd2FzIHdoZW4gc25tcGQgd2FzdCBsYXN0IHN0b3BwZWQuIFRoaXMgaXMgY29tbW9uIG9uIHBwcC1zZXJ2ZXJzIG9yIHZpcnR1YWwgaG9zdHMuCisKK2NvbW1pdCAyNTBmNjk4ZTU5ZWFiOWYxZmZkMzMyZmY1OWZkYjcyZWEwZGYwNmZmCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDIzIDA4OjUxOjIzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBjb2RlIHdvcmsgYWdhaW4KKyAgICAKKyAgICBQcmV2aW91c2x5IHRoZSB0cmFuc3BvcnQgaW5oZXJpdGFuY2UgcHJvY2Vzc2luZyBjb2RlIHJhbiB3aXRoCisgICAgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HIHNldC4gSW4gdGhpcyBtb2RlIHRoZSBmaWxlIG5ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oCisgICAgaXMgcmVxdWllcmVkLiBUaGF0IGZpbGUgaXMgY3JlYXRlZCBkdXJpbmcgdGhlIGZpcnN0IG1ha2UgcnVuLCBhbmQgdGhhdCBoYXBwZW5zCisgICAgYWZ0ZXIgY29uZmlndXJlIGlzIHJ1bi4KKyAgICBDaGFuZ2UgdGhpcyB0byB1bmRlZmluZSBORVRTTk1QX01JTklNQUxfQ09ERSwgZWZmZWN0aXZlbHkgdHVybmluZyBvZmYgZmVhdHVyZQorICAgIHN1cHBvcnQgZHVyaW5nIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIG1ha2UgaXQgd29yayBhdCBhbGwuCisKK2NvbW1pdCA2ZWY2OTA3NjQyMjQ3YzY2M2I5Yjg5NjRiOWZkNDRhMjExZGJjYWE3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgT2N0IDIwIDIwOjMwOjU0IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM0MDgzOTg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuCisgICAgCisgICAgVGhpcyBtZW1vcnkgbGVhayB3YXMgaW50cm9kdWNlZCB2aWEgY29tbWl0CisgICAgOWJmM2Q5NmQ5NmE4ZWNkNGE1ZmMzNWMzMjZkYzkzNzQ2NzAwMmI2YzogSW5pdGlhbCBIQUwKKyAgICBpbXBsZW1lbnRhdGlvbiBvZiBGaWxlU3lzdGVtIGluZm9ybWF0aW9uIChNYXJjaCA3LCAyMDA4KS4KKworY29tbWl0IGNmODJiODk0YjIyMTdjMjZlZGM2ZjEzNTYzNTFjOTMyNDE1NjA0ZTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBPY3QgMTUgMTQ6NDU6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzNDIzOTE1OiBDaGFuZ2UgZGVmYXVsdCBudW1iZXIgb2YgcmV0cmllcyBiYWNrIGZyb20gMCB0byA1CisgICAgCisgICAgVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIHZpYSBjb21taXQgNmNhYzA1MCAoTWF5IDUsIDIwMTEsCisgICAgYWRkZWQgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgcmV0cmllcyBpbgorICAgIHNubXBkLmNvbmYpLgorCitjb21taXQgYzExYWRhYTEyOTE1YWJmZWU2MjliYjZjMDI2YzIxZjIxODViMjE2ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxNyAxMDoyNDo0NiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW4zMjogQXZvaWQgdGhhdCBjb21waWxpbmcgdGhlIGhlYWRlciBmaWxlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gd2l0aCB0aGUgTWluR1cgZ2NjIGNvbXBpbGVyIHRyaWdnZXJzIHdhcm5pbmdzIGFib3V0ICJwcmFnbWEgY29tbWVudCIuCisKK2NvbW1pdCBiMTdhNzJhNzkzNDgzYWVlNGE1YmIyZjJlMmM3ZjRmZDg2OTgxN2U2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDE3IDEwOjIyOjIwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBBdm9pZCB0aGF0IHRoZSBQQUNLQUdFXyogbWFjcm9zIGRlZmluZWQgaW4gPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYXVzZSB0cm91YmxlIHdoZW4gaW5jbHVkaW5nIHRoaXMgaGVhZGVyIGluIGEgcGFja2FnZSB0aGF0IHVzZXMgdGhlIEdOVSBhdXRvdG9vbHMuCisKK2NvbW1pdCA2NjRkM2FlMTA3ZDc1NDA1MWI4YzQyMjc5ZDQ1OWFhNTdhMWJlMWMzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDEwIDE2OjQ3OjE2IDIwMTEgKzAyMDAKKworICAgIE1pbkdXLCBod19mc3lzOiBVc2UgcHJvcGVyIGZvcm1hdCBzcGVjaWZpZXJzIGluIGEgZGVidWcgc3RhdGVtZW50LgorICAgIAorICAgIFRoaXMgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW50cm9kdWNlZCBpbiBjb21taXQgNzZmZjI1ZC4KKworY29tbWl0IDIxMWRjYjQ5MzA2NTYxZTM1YmEzYzIxM2JlN2NmYTI1N2I0MGE4ZTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTAgMTU6NTI6NDMgMjAxMSArMDIwMAorCisgICAgQXZvaWQgdGhhdCBnY2MgNC42IGNvbXBsYWlucyBhYm91dCBzZXQgYnV0IG5vdCB1c2VkIHZhcmlhYmxlcworCitjb21taXQgOWY2NTNmNzNlNWFhNzBmMGJlZjExNzQ2MzJlOTU1OTRmODdmNjY5ZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxMCAxMzowMjoyNSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGRfc3FsOiBBdm9pZCB0aGF0IGEgbGlua2VyIGVycm9yIGlzIHRyaWdnZXJlZCBvbiBzeXN0ZW1zIHdoZXJlIG15X3Byb2duYW1lIGlzIG1pc3NpbmcgaW4gbGlibXlzcWxjbGllbnQgKGUuZy4gRmVkb3JhIDE1IGFuZCAxNikuCisKK2NvbW1pdCA0YzgzYjkyMjlhNzQ1NGYzNGY2ZmY3NWY2OWU2N2U0MDMwYzQxOWI1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgT2N0IDcgMTU6NTg6NDUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogU2V0IHRoZSBycGF0aCBmb3IgbGlicGVybC5zbyBpbiBsaWJuZXRzbm1wbWlicy5zbyBzdWNoIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIGNhbiBmaW5kIGxpYnBlcmwuc28gd2l0aG91dCByZXF1aXJpbmcgdGhlIHVzZXIgdG8gbW9kaWZ5IHRoZSBkeW5hbWljIGxpbmtlciBzZXR0aW5ncy4KKyAgICAKKyAgICBUaGlzIGNoYW5nZSBpbiBhZ2VudC9NYWtlZmlsZS5pbiBpcyBuZWNlc3Nhcnkgb24gdGhlIDUuNSBicmFuY2ggYW5kCisgICAgbGF0ZXIgYnV0IG5vdCBvbiB0aGUgNS40IGJyYW5jaC4gVGhhdCBpcyBiZWNhdXNlIHRoZSA1LjQgYnJhbmNoIHVzZXMKKyAgICBhbiBvbGRlciB2ZXJzaW9uIG9mIGxpYnRvb2wgdGhhdCBwcm9wYWdhdGVzIHRoZSBycGF0aCBvZiBkZXBlbmRlbnQKKyAgICBsaWJyYXJpZXMuIFRoaXMgaXMgY2FsbGVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jeSB0cmFja2luZyBpbiB0aGUKKyAgICBsaWJ0b29sIG1hbnVhbC4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgaW4gbGlidG9vbCB2ZXJzaW9uIDEKKyAgICBidXQgbm90IGluIGxpYnRvb2wgdmVyc2lvbiAyLiBGb3IgbW9yZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGFib3V0CisgICAgZHluYW1pYyBsaWJyYXJpZXMgYW5kIHJwYXRocywgc2VlIGFsc28gdGhlIGRvY3VtZW50IHdpdGggdGhlIHRpdGxlCisgICAgIlJwYXRoSXNzdWUiIG9uIHRoZSBEZWJpYW4gd2lraSAoaHR0cDovL3dpa2kuZGViaWFuLm9yZy9ScGF0aElzc3VlKS4KKworY29tbWl0IDg5MjVjOTEyZDI2Mzk3NTJhODRiY2ZmZWVmMWI3MGE4MTAyNjQ0OWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBPY3QgNyAxNDoyMToyOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogSE9TVC1SRVNPVVJDRVMtTUlCOiBBZGQgbWlzc2luZyBicmFjZSBpbiBhIGRlYnVnIHN0YXRlbWVudAorCitjb21taXQgNzZmZjI1ZDliZjk3NTc5ZTcyMTMxMDIwNjVmZDUwOTZmMDQ5YTRjNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIE9jdCA3IDE0OjEzOjE4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBIT1NULVJFU09VUkNFUy1NSUI6OmhyU3RvcmFnZVRhYmxlOiBmaXggYnVnIGluIGhhbmRsaW5nIGxhcmdlIGZpbGVzeXN0ZW1zLCB3aGVyZSBsYXJnZSBtZWFucyBhYm92ZSA4IFRCICg9IDIqKjMxICogNDA5NiBieXRlcykuCisgICAgCisgICAgVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdAorICAgIDcxZDgyOTNmMzg3YTZjZDY2YmIwZGJiMTNjMGY1MDE3NGQyZTY3OGIuCisgICAgRm9yIHRoZSBvcmlnaW5hbCBidWcgcmVwb3J0LCBzZWUgYWxzbworICAgIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmF0aWQ9MTEyNjk0JmFpZD0zNDE5ODI1Jmdyb3VwX2lkPTEyNjk0LgorCitjb21taXQgODY2MDMzZGI5OTA0ZmZiMTIwM2YyODNmODM4MDkyZTRjZjY4ZGU2YgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IE9jdCA2IDA3OjMzOjI3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBSZW1vdmUgc3B1cmlvdXMgI2VuZGlmIHRoYXQgc2VlbXMgdG8gYmUgdGhlIHJlc3VsdCBvZiBhIG1pc21lcmdlLgorCitjb21taXQgMjBmNGYzMjY3ZWUyMGQ1NTcwNWI3YTQzNzg5ODc5YzEwM2Y5NjYyMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IE9jdCA2IDAwOjA4OjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgbWlzc2luZyBlbmQgY29tbWVudHMgdG8gZmVhdHVyZSBpZm5kZWZzLgorCitjb21taXQgZTVkZTJjYzU3YmYzMDRmMzMyMGNhZDAwMzRkMmVhMmQ4YWVkYzQzNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCA1IDA5OjE1OjEwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGFnZW50OiBMb2cgYSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UgaWYgZW1iZWRkZWQgcGVybCBpbml0aWFsaXphdGlvbiBmYWlscworCitjb21taXQgNWVlZjk5OTBkZTI4ZjYzMTExZTZjMDkzYmUwZjNjN2FlMmQ1MTNhMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCA1IDA4OjQ1OjQ5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEFkZCBhZ2VudDo6dXB0aW1lKCkKKworY29tbWl0IDY4MTBlZDQyZjliYzU2MDc1MGQ2ZGJmYjdlNTBiNmUyYWMxMTg5OWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBTZXAgMzAgMTE6MDE6MjMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogQ3l3aW46IGFnZW50OiBJbXBsZW1lbnQgZ2V0X3VwdGltZSgpIHN1Y2ggdGhhdCBxdWVyeWluZyBIT1NULVJFU09VUkNFUy1NSUI6OmhyU3lzdGVtVXB0aW1lIHJldHVybnMgYSBub24temVybyB2YWx1ZS4KKworY29tbWl0IDk3MTcyYjMxMWQyMGY0NDQxYzdhN2U5MDA5MmI1OWMxZTBkYTk5ZjcKK0F1dGhvcjogVGhvbWFzIEphcm9zY2ggPHRqYXJvc2NoQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCA1IDA4OjQ2OjM5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFBBVENIOiAzNDE4NjQ5OiBIT1NULVJFU09VUkNFUy1NSUI6IFVzZSBwY2xvc2UoKSBpbnN0ZWFkIG9mIGZjbG9zZSgpIHRvIGNsb3NlIGEgcGlwZS4KKworY29tbWl0IDY1OTE5MzdhZGI4NTAwMGMyNzA2OWM0YmU4NGNmNDY4ODgzOGViY2QKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxNjoxODowMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogQWRkIGRlcGVuZGVuY2llcyBvbiBARkVBVFVSRVRBUkdTQCB0byBtYWtlIHRoZSBzdWJ0YXJnZXQgd29yayBhcyB3ZWxsLgorCitjb21taXQgYjljODAxMmVjMDM1YmMwODRmMTc1ODc2ZmVjYzM3NTE5NWY5YmU4MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDE0OjAyOjU4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgdGFyZ2V0IHRvIGJ1aWxkIGFnZW50eHRyYXAgZnJvbSB0aGUgdG9wbGV2ZWwKKworY29tbWl0IDk5NTY0N2MwY2ZlMDA0MTIyNjJjYzU3OTdiZGZhZTlkMDBiNzBjNzYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxNTo0NDozNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogUmVtb3ZlIHRoZSB1c2Ugb2YgLUwgZmxhZ3MgZm9yIGludGVybmFsIGxpYnJhcmllcyBhcyBpdCBjb25mdXNlcyBsaWJ0b29sLgorCitjb21taXQgOTNkYzEyMzVhMGRiNThmZmQyOTYxN2NmZjAwZGMxMTI2Mzc4MDIwMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDExOjMxOjQ2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIG1ha2UgYXBwcyB3b3JrIGFnYWluCisgICAgCisgICAgYXBwcyBpbmNsdWRlIHNubXB0cmFwZCBhbmQgdGhhdCByZXF1aXJlIHRoZSBhZ2VudCBsaWJyYXJpZXMgYXMgd2VsbC4KKworY29tbWl0IGJhNDE0ODhlZDQ0Y2QyM2MyNTk2M2Q0ZmM1NmM0NzY4NTNiMmFiNTkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxMToyOTozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogV2hlbiB5b3Ugc2F5IG1ha2UgbGlicyB5b3UgZXhwZWN0IGFsbCB0aGUgbGlicyB0byBiZSBidWlsdC4KKyAgICAKKyAgICBUaGlzIGlzIGRlbW9uc3RyYXRlZCBieSB0aGUgc25tcHRyYXBkIHRhcmdldCBhdCB0aGUgdG9wIGxldmVsIHdoaWNoIG9idmlvdXNseQorICAgIGV4cGVjdGVkIGJvdGggbGlicyB0byBiZSBidWlsdCBhbmQgc28gZmFpbGVkIHRvIGNvbXBpbGUgYmVmb3JlIHRoaXMgcGF0Y2guCisKK2NvbW1pdCAzMDU3YzczZTA5MzQ3M2JlNDYyNTRiY2RmYjRjYTc4OGU0MzJkMWI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAzMCAwNzozMjo1MiAyMDA4ICswMDAwCisKKyAgICBORVdTOiBidWlsZGluZzogUEFUQ0g6IDIwOTExNTY6IGNvcnJlY3RseSBkZWNsYXJlIGRlcGVuZGVuY2llcyBpbiBNYWtlZmlsZS4KKyAgICAnbWFrZSAtaiA8Tj4nIHNob3VsZCB3b3JrIG5vdy4KKyAgICAKKyAgICBCYWNrcG9ydCB0aGlzIHRvIFY1LTQgYXMgaXQgaXMgbmVlZGVkIGZvciBjb3JyZWN0IG9wZXJhdGlvbiBpbiB0aGUgc2luZ2xlCisgICAgdGhyZWFkZWQgY2FzZSBvZiBtYWtlIG1pYmxpYiBhcyB3ZWxsLgorCitjb21taXQgNmVhZTM0MGZhMmE2NDA4NjU5Mjk4MmNjNTI3MzViYzAxNDg3ZDk3OAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE9jdCAxIDE5OjMzOjUwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBTaWxlbmNlIGxpYmJzZCAwLjMuMCBuYWdnaW5nCisgICAgCisgICAgSWYgeW91IGhhdmUgbGliYnNkIDAuMy4wIGluc3RhbGxlZCB0aGVuIHRoZWlyIHZlcnNpb24gb2Ygbmxpc3QuaCB3YXJucyBhbmQKKyAgICB0cmllcyB0byBtYWtlIHlvdSBpbmNsdWRlIGJzZC9ubGlzdC5oIGluc3RlYWQuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZG9uJ3QKKyAgICBuZWVkIHRoYXQgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IGFzIHdlIGtub3cgaG93IHRvIGRvIGl0IG91cnNlbGYgc28gaXQgYmVjb21lcworICAgIHB1cmUgbmFnZ2luZy4gVGhpcyBwYXRjaCBhZGRzIGEgZGVmaW5lIHRoYXQgY2hhbmdlcyB0aGUgd2FybmluZyBpbnRvIGFuCisgICAgZXJyb3IgYW5kIHRoZW4gZmlndXJlcyBvdXQgdGhhdCB0aGVyZSBpcyBubyB1c2FibGUgbmxpc3QuaCBhbmQgaWdub3JlcyBpdAorICAgIGZvciB0aGUgZnV0dXJlLgorCitjb21taXQgYWMzOGNiNTMxYmVlNTBlZGM4ZDRjODM0ZjMwMDVmNTk5MmM3NzFkOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAyOSAxOTowMzowMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBFbmFibGUgc2VuZGluZyBTTk1QdjIgdHJhcHMgd2l0aCBhbiBlbXB0eSB2YXJiaW5kIGxpc3QKKworY29tbWl0IGE3NWRlMjk3MTUyN2FjMmQyZTgxMjAyNDI5ODYwMmJiMjQxMmYzMzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBTZXAgMzAgMTA6NDE6NDQgMjAxMSArMDIwMAorCisgICAgcGVybC9TTk1QL1NOTVAueHM6IFVwZGF0ZSBlbWFjcyBtb2RlbGluZQorCitjb21taXQgODQ4ZjYzMDBlZmUzODQ5MmZiNDU0NDUxYTAzMGYwYjdlNmZmOGM5ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIFNlcCAzMCAxMDo0MTo0NCAyMDExICswMjAwCisKKyAgICBwZXJsL1NOTVAvU05NUC54czogVXBkYXRlIGVtYWNzIG1vZGVsaW5lCisKK2NvbW1pdCBjMTM3NDQ3M2VjZDhlYzllMDMxMDAxMzg2MWVlMThjODNlNWQ2YzViCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgU2VwIDMwIDAzOjI5OjM2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFByb3RlY3QgdGhlIHVzZSBvZiAkT1NUWVBFIHRvIGVuc3VyZSB0aGF0ICd0ZXN0JyBnZXQgZW5vdWdoIHBhcmFtZXRlcnMuCisKK2NvbW1pdCA3ZTk3YTIwNjMzYTU3ZWFlMzlkMDE1YjIzMzM5NDYzYzMyZjVmODQ4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDI5IDEwOjIyOjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IENvbnZlcnQgc25tcGxpYi90ZXN0X2JpbmFyeV9hcnJheS5jIGludG8gdHdvIHVuaXQgdGVzdHMKKworY29tbWl0IDljMGRkOTgxNzY0NTczNDJmZmZhYTVlNzRkODAyZTMxNDVlZDcwZTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjkgMDg6NTY6MTcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQWRkIHVuaXQgdGVzdCBmb3IgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkKKworY29tbWl0IDVmZDI2ZTRmYTNlMDAwZWE5YzgxYzM4YWI5NzViNzk0NmVmZTIxNTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBTZXAgMjggMTc6NDk6NTUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IEF2b2lkIHRoYXQgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkgZmFpbHVyZSB0cmlnZ2VycyBhIGRvdWJsZSBmcmVlLgorICAgIAorICAgIEZpeGVzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIHZpYSBjb21taXQKKyAgICBhYTRkNDdjMjYwOWU1MjgxOGM5Y2RmMWE4ZTIyMDVkZTlhMzM1YTBhIChzdm4gcjE5NTE1KS4KKworY29tbWl0IGQyMjUyZDAxNjY5MzgwNzMyNmY3MmI2NjEyMzY0OWRlYTAwYWY5MTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjkgMTA6MjA6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogUmVxdWlyZSBhIHNlbWljb2xvbiBhZnRlciBPSygpLCBPS0YoKSBhbmQgUExBTigpCisgICAgCisgICAgQWxzbywgbGV0IE9LRigpIGVtaXQgYSBzaW5nbGUgbGluZSBvZiBvdXRwdXQgc3VjaCB0aGF0IGFsbCBvdXRwdXQgaXQKKyAgICBwcm9kdWNlcyBpcyB2aXNpYmxlIGluIHRoZSBvdXRwdXQgb2YgIm1ha2UgdGVzdCIuCisKK2NvbW1pdCAxNDIxOTI0YjQ4NTIxNDIxOTJjNWJiOWU5M2RkYmZlZDY5ZTkwOGZhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgU2VwIDIxIDIyOjIwOjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEF2b2lkIHdhaXRpbmcgaW5kZWZpbml0ZWx5IGlmIGEgc2Vzc2lvbiBoYXMgdGltZW91dCB6ZXJvCisKK2NvbW1pdCA1ZjI3ZjRmNzRhZTJiZDViYWY1MDNjZjMwNmI0ZjlhMjg0MWE1N2NmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6MzI6MDMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSB0ZXN0IHJ1bm5lcgorCitjb21taXQgMDk3MDM5NThjYzVlYTg0NTkyOWFlMTllZjllMDgwNGFlY2FhNTEyZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyNyAxMjo0Mjo0MSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBdm9pZCBmYWxzZSBuZWdhdGl2ZSBmb3IgVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlIGNhdXNlZCBieSB0aGUgdGVzdCByZXN1bHQgYmVpbmcgcHJlc2VudCBpbiB0aGUgaGV4IGR1bXAgKCJtb3N0bHlfaGFybWxlc3MiKQorCitjb21taXQgNDM5MzAwMjc5ZjZmMzE0Mzg2MzhkMmYyMjJjMjRjM2M4NDFmYTZhYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyNyAxMToxNjozMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogTWljcm8tb3B0aW1pemUgYWdlbnQgbW9kdWxlIGRlcGVuZGVuY3kgYW5hbHlzaXMKKyAgICAKKyAgICBUaGlzIG1ha2VzIHRoZSBhZ2VudCBtb2R1bGUgZGVwZW5kZW5jeSBhbmFseXNpcyBjYXJyaWVkIG91dCBieSB0aGUKKyAgICBjb25maWd1cmUgc2NyaXB0IHNsaWdodGx5IGZhc3RlciwgZXNwZWNpYWxseSBvbiB0aG9zZSBzeXN0ZW1zIHdoZXJlCisgICAgZm9yaygpIGlzIGV4cGVuc2l2ZSAoQ3lnd2luKS4KKworY29tbWl0IGJiYzY4MDAwNGExMzc2MDM4ZGZkYzQxNzJkYmU3YjllMzExZmJhNjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBTZXAgMjYgMTA6MTQ6NDUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdGVzdCBUMTMwc25tcHYxdmFjbWdldF9zaW1wbGUgcGFzcworCitjb21taXQgNzBiMDZjZjc4OTIwOGVhYTg5MGJmYmNkNjM4YmRiNzc1ZjgxNzA1NAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyMCAwOTo1MDo1NyAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiB0ZXN0aW5nOiBwZXJsOiBGaXggYW4gaW5jb3JyZWN0IG1lc3NhZ2UgcHJpbnRlZCB3aGlsZSBydW5uaW5nIHRoZSBQZXJsIG1vZHVsZSByZWdyZXNzaW9uIHRlc3RzCisKK2NvbW1pdCA3MGJjYzhkZTJkMGZjOTJiYmI4NDgxODIzNjMwZmFiOWJjODdhZjc1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgU2VwIDE2IDE2OjE0OjI0IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBPYnRhaW4gdGhlIE1TWVMgcGF0aCBmcm9tIHRoZSBlbnZpcm9ubWVudAorCitjb21taXQgNjI2Mjc1ZTJkMWFjYWZhZTcxNDRhMzNlZDMwMWE0MGY1OTZiMzdiMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIFNlcCAxNCAxMzoxNDoxNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBSZW1vdmUgc3VwZXJmbHVvdXMgbGluayBsaWJyYXJpZXMgZnJvbSBwcm9qZWN0IGZpbGVzICgqLmRzcCkKKworY29tbWl0IDM4ZmMzY2FhOWVlYjM4MDAyNTRiNGY2YWQ2ZjhmNDc2NGMwZjgzZGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgMjAgMDk6MzQ6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBuZXRzbm1wX2NhbGxiYWNrX2FjY2VwdCgpIHJldHVybiAtMSAoZmFpbHVyZSkgaW5zdGVhZCBvZiAwIChTVERJTl9GSUxFTk8pCisKK2NvbW1pdCA2YzhjN2U4YWNhOGZjMmVlYjUyMDEwYWUzZTlmZWU2ZGQ4M2VmNzgwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDEzIDA5OjU4OjI2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFJlbW92ZSBvYnNvbGV0ZSBzbm1wX2dldF9mZF9mb3Jfc2Vzc2lvbigpIGRlY2xhcmF0aW9uCisKK2NvbW1pdCAwODYwZDExZmQ4ZmM1ZGJkYWFhZTIyNjFmYWUyYzA3ZmI5YzJjODJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDggMTM6NTQ6NTUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogTVNWQzogQXZvaWQgdGhhdCB0aGUgdHlwZWRlZnMgaW4gPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjb25mbGljdCB3aXRoIHRob3NlIGluIDxzdGRpbnQuaD4gZnJvbSB0aGUgbXNpbnR0eXBlcyBwcm9qZWN0CisKK2NvbW1pdCBmOGEwMzZmNjNmZjY4ZjA4MzQzNjEyMGUwYWJkNDc4YjY5MmEyZjYxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDggMTM6MjE6MDYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogTVNWQzogV2hlbiBsaW5raW5nIHdpdGggT3BlblNTTCwgbGluayB3aXRoIHVzZXIzMi5saWIgdG9vCisKK2NvbW1pdCA4MzZhMjNlMTBjYTgxMGMzODk5OTAyZDMyNTg3NjE2YTlkMTIwM2RmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSnVsIDE0IDE4OjM4OjEzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IE1TVkM6IExpbmsgd2l0aCBwcm9wZXIgbGliZWF5MzIgbGlicmFyeQorCitjb21taXQgN2IwN2ZkNmNkZWY0OWVjN2JiMDRiMTY2ZTJhNGZiYjM3YjU4Mjg0MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDExOjEwOjM4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFJlbW92ZSBhbiBpbmNvcnJlY3QgY29tbWVudCBmcm9tIHNpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK2NvbW1pdCA5OGY2ZDI5ZDk4MWZmOGU2MDc2MDBjNjNkYWRiMjQwNTM1NjI5ODA3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6NDk6MDMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogTWFrZSBJU0RFRklORUQoKSBjaGVjayBmb3IgYW4gZXhhY3QgbWF0Y2ggaW5zdGVhZCBvZiBhIHByZWZpeCBtYXRjaAorCitjb21taXQgNTJjZDAwMzFhMzFmNjkyZjEzMjYzYTk0YzMzNWQwNmJlMTQ1NDgwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjEyOjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBNYWtlIHRob3NlIHJlZ3Jlc3Npb24gdGVzdHMgcGFzcyBmb3Igd2hpY2ggU05NUENPTkZQQVRIIGFuZC9vciBTTk1QX1BFUlNJU1RFTlRfRElSIG1hdHRlcgorCitjb21taXQgZjVjZDg5YmQzMzU2ZGQ3NGUxNTU2YzBiNTA5NjZhNjQzZjE5MjA4NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjEyOjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgdGVzdCBmcmFtZXdvcmsKKworY29tbWl0IGRlZWRkNTJjODM0YTY0NDg4NTJhMDY3ODU1MzZlMTM4NjU5Njk2OTQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgNiAxMDoxMjo1OCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogU3VwcG9ydCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBvZiByZWNlbnQgU2hpbmluZyBMaWdodCBPcGVuU1NMIGJpbmFyeSBkaXN0cmlidXRpb25zCisKK2NvbW1pdCBkNTViZDRlMDU0OWYwM2I2ZmQzMjU2MmMyYWE3ZmUzOTI3MmE5ZWY3CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDI4IDA2OjU1OjE5IDIwMTEgLTA3MDAKKworICAgIHJlbW92ZSB0aGUgdjUuNyBmcm9tIHRoZSBmcm96ZW4gbGlzdAorCitjb21taXQgYWMyYWVkM2M5NGJiMmViYjQ3M2FmMGExZTIwZjA1NjFhZDYyOTk1NgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCAyOCAwNjo1NToxMSAyMDExIC0wNzAwCisKKyAgICByZW1vdmUgdGhlIHY1LjcgZnJvbSB0aGUgZnJvemVuIGxpc3QKKworY29tbWl0IDQwMDc5MjA1OTY3YjhlNWFlZWRiMTlmYTNjYjJlN2IyZjc5ODg1NzcKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMjcgMjE6NTM6NDcgMjAxMSAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQKKworY29tbWl0IGNmMTRhMjI4NTgzYWZmM2M1YWIyZjBkNDRjMmY0YzBmYTViZDY2YWYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMjcgMjE6NTM6MTggMjAxMSAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xCisKK2NvbW1pdCAxMDE0ZGQ4ZGZiNDhhNWJkMDUzZjA0NTQxZWI5NzI4ZjBiZTA3ZjQ3CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDI3IDIxOjQ1OjA0IDIwMTEgLTA3MDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMQorCitjb21taXQgMThkMTE2YmEzODhjMWRjOTQ5NTI4ODg0YmIwMDY5OGYxYmFjYWE5NAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAyNyAyMToxMTo1MiAyMDExIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xCisKK2NvbW1pdCA0NmVhYzAyZTlhMjdiZjRmMzA2OGU3OTVjYWI4OTFmMDVhODQ4ODcwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gU2VwIDI2IDIxOjQ5OjI3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBdm9pZCB0aGF0IHNubXBkIGNyYXNoZXMgaWYgc3RhcnRlZCBvbiBhIHN5c3RlbSB3aXRoIGFub3RoZXIgT3BlblNTTCBsaWJyYXJ5IHZlcnNpb24gdGhhbiB0aGUgb25lIGl0IGhhcyBiZWVuIGJ1aWx0IHdpdGguCisKK2NvbW1pdCBhNWYwNjRkZDgyOTk2ZTJiZTNmMWU5NjE2NzAzYWQwMzk1ZmI1YWJhCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgU2VwIDIyIDA3OjMzOjAxIDIwMTEgLTA3MDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMS5yYzMKKworY29tbWl0IDU2OTc5NGZjZWI5OWVlZDdiZTgxN2M2NGY4NWNkOTQ1Y2FmOTk1OTIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBTZXAgMjIgMDc6MjA6MDcgMjAxMSAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMS5yYzMKKworY29tbWl0IGM1NWY2MDhmMTZmMTYwZjVlNzlkYzA1N2Y4ODc4ZGVmNDYyOTczZTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgU2VwIDIyIDEwOjM1OjI0IDIwMTEgKzAxMDAKKworICAgIEZpeCB0aGUgY29kZSBmb3IgcG9wdWxhdGluZyB0aGUgdGFibGVfdGRhdGEgY2FjaGUsCisgICAgYW5kIGNsYXJpZnkgYXJlYXMgbmVlZGluZyBNSUItc3BlY2lmaWMgYWRkaXRpb25zLgorCitjb21taXQgMTM3NjNjZjJjNzFiZjkzZmVjMDk2ZWVlMDA0ODU3YzE1YjJjZmZmZgorQXV0aG9yOiBTdGV2ZSBGcmllZGwgPHN0ZXZlQHVuaXh3aXoubmV0PgorRGF0ZTogICBUaHUgU2VwIDIyIDEwOjA2OjQ1IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiAzNDA5NjkyOiBDYWxjdWxhdGUgZGlzayBwZXJjZW50YWdlIHVzYWdlIHZpYSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljCisgICAgdG8gYXZvaWQgaW50ZWdlciBhcml0aG1ldGljIGVycm9ycy4KKyAgICAoQ29kZSBiYXNlZCBvbiBwYXRjaCwgcmF0aGVyIHRoYW4gYXBwbGllZCB2ZXJiYXRpbSkKKworY29tbWl0IGVlMGQzYWRiMDc4MjkxYjc0M2M5ZWNiNzZkMjBiNTkxYjdiMTU5NzIKK0F1dGhvcjogU3RldmUgRnJpZWRsIDxzdGV2ZUB1bml4d2l6Lm5ldD4KK0RhdGU6ICAgVGh1IFNlcCAyMiAwOTo1ODozOSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogMzQwOTY5MjogQ2FsY3VsYXRlIGRpc2sgcGVyY2VudGFnZSB1c2FnZSB2aWEgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYworICAgIHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cgZXJyb3JzLgorICAgIChDb2RlIGJhc2VkIG9uIHRoZSBzdWJtaXR0ZWQgcGF0Y2gsIHJhdGhlciB0aGFuIGFwcGxpZWQgdmVyYmF0aW0pCisKK2NvbW1pdCAzNjdkYTE0ZmNkYjE0NjU5MmRlNjdjMWQ2OTk3YTA5Nzc0MjU5NjczCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDIyIDA4OjA5OjE3IDIwMTEgKzAyMDAKKworICAgIFRoZSBvbmx5IGNoYW5nZSBiZXR3ZWVuIFY1LjcucmMxIGFuZCBWNS43LjEucmMyIGlzIHRoZSB2ZXJzaW9uIG51bWJlci4gTWFrZSB0aGlzIGNsZWFyIGluIHRoZSBDaGFuZ2VMb2cgZmlsZS4KKworY29tbWl0IGMyNzZlZWI4ZjA0NTVhMDg3MGM0YjQ3OGRkZTY0OGU4NjUyOWFkZDMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgMjEgMTM6NTE6NTggMjAxMSAtMDcwMAorCisgICAgY2hhbmdlbG9nIHVwZGF0ZQorCitjb21taXQgNjMwNTA4Mzg2NjZmNjQ1ZmMzMDZkYzJlZTRmNzNmNWVmY2U2M2ZlZAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCAyMSAxMzozODoxOCAyMDExIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xLnJjMgorCitjb21taXQgYmJlMmMxOWEwMWVjZWMwMjRmNzQxZTJlNTQ3MDFhZTYyMTJmNGMzZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIFNlcCA0IDE0OjQ0OjM4IDIwMTEgKzAyMDAKKworICAgIFRoaXMgc2hvdWxkIGhhdmUgZ29uZSBvbmx5IHRvIG1hc3Rlci4KKyAgICAKKyAgICBSZXZlcnQgIkNIQU5HRVM6IGJ1aWxkaW5nOiBDb3JyZWN0IGRlcGVuZGVuY2llcyAtIHNpbmNlIGJmNzRmZWE2OWYyNGRjNmU4NWY5MDhmM2Y0MWQxNDI2YjJlMDk2ODggc25tcGNvbmYgaXMgbG9jYXRlZCBpbiBidWlsZGRpciwgbm90IHNyY2RpciIKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDllZmE0NjdhOTcyYmI2ZTFjN2ZiZGFmMmUyNzQyOWQyOWY0YWI4OWUuCisKK2NvbW1pdCA5ZWZhNDY3YTk3MmJiNmUxYzdmYmRhZjJlMjc0MjlkMjlmNGFiODllCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gU2VwIDQgMTQ6MDA6MTIgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IENvcnJlY3QgZGVwZW5kZW5jaWVzIC0gc2luY2UgYmY3NGZlYTY5ZjI0ZGM2ZTg1ZjkwOGYzZjQxZDE0MjZiMmUwOTY4OCBzbm1wY29uZiBpcyBsb2NhdGVkIGluIGJ1aWxkZGlyLCBub3Qgc3JjZGlyCisKK2NvbW1pdCA3ODM1OTY0ZDM1OTNlNWM2YTFhZTdkZTBiNDExNGI3ZGYxYWUwZmUxCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDE5OjIxOjUxIDIwMTEgLTA3MDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMS5yYzEKKworY29tbWl0IGNiNmEwYzBiZDZmOGMyYzdjZDVmZDg2MDgwZGM2MzI0ZTdmNzM4NTgKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTk6MjA6MzUgMjAxMSAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4xLnJjMQorCitjb21taXQgZTVmZjJlYjgzYmJiZWQ5MmRhYzc1MWM1YTY2NDNkNzhmODM3Y2Y5YworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxOToxOTo0NiAyMDExIC0wNzAwCisKKyAgICBmaXggQysrIGNvbW1lbnQKKworY29tbWl0IGNiMWY1Y2ZmYzZmYjUyYzJhNmMwZjdiNDA4YWZlYjQ3ZmNmZTU1ZTQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTk6MDk6NTYgMjAxMSAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMS5yYzEKKworY29tbWl0IDQyMmIwODJhOTU5M2NhOWM2NWFhYzQ0OWU2ZDEyOGE5ZTk3ZTk0ZmIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTk6MDY6NTYgMjAxMSAtMDcwMAorCisgICAgYWRkZWQgNyBhcyBhIHJjIHNlcmllcyBicmFuY2gKKworY29tbWl0IDcxYzBkNzY1MDQ5MzcxMDYzMWZhMDhkNWRjNGRhZDUwMWE5YWE3NzEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTY6Mzc6NDEgMjAxMSAtMDcwMAorCisgICAgZGVhbCBwcm9wZXJseSB3aXRoIGludmVydGVkIGVycm9yIGNhc2VzCisKK2NvbW1pdCBjZjRjZjdmMzJhZDU4ZjMyNmZmZWQ1MDQ5NDU4MzIzMTY0OGQ3OWQyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDI2IDExOjA4OjA5IDIwMTEgLTA3MDAKKworICAgIGFkZGVkIC5mdCBhbmQgLmZ0LjEgZm9yIGZlYXR1cmUgZmlsZXMKKworY29tbWl0IDQxYjJjZGUxOWQyMjIwOWI0ODMyMDc2MTRlMDI3NDgzYzM3MDY4NzcKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTE6MDM6MTUgMjAxMSAtMDcwMAorCisgICAgYXV0by1kZXRlcm1pbmUgcGF0Y2ggYXJndW1lbnRzIGlmIHBvc3NpYmxlIGZvciBuc3BhdGNodHJ5CisKK2NvbW1pdCA5NmJiNTg5YzJlNTA1NDg5MGU5ODcwNWFiNWY0MzA4YWU2YTEzMGJiCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDEwOjEzOjA2IDIwMTEgLTA3MDAKKworICAgIG1ha2UgaXQgc28gdGhlIGdpdCBjb21taXQgbGluZSBjYW4gYmUgY3V0L3Bhc3RlIHdpdGhvdXQgbGluZWJyZWFrcworCitjb21taXQgM2ZlMzZmN2FkNzFjMDhlMTI4NmNlOGU0ODdlOTM1MmUyN2NkOTZjYworQXV0aG9yOiBSb25hbGQgV2FobCA8cndhLWNvQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxMDoxMjoxMSAyMDExIC0wNzAwCisKKyAgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzk0NTg2OiBmcm9tIHJ3YS1jbzogZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gcmVhZF9jb25maWcgKCtmaXgpCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA2ZTU0YzQxMzFhZjczMWZmOTA0NjdhNzViY2M4MTdjOTU3ZjhmNzJhCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDA5OjU1OjE0IDIwMTEgLTA3MDAKKworICAgIGRlc2NyaWJlIHRoYXQgbnNyb2xsdXAgbmVlZHMgdG8gYmUgcnVuIG5vdy4KKworY29tbWl0IDg2ZWZlZTIzNDMyY2NiMGQyZTBjNzM2ZDM0ZGMxMDUxMTMwY2RjMGYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgQXVnIDMwIDEwOjUyOjMwIDIwMTEgKzAxMDAKKworICAgIEFwcGFyZW50bHkgSVJJWCBoYXMgYSBkaWZmZXJlbnQgQVBJIGZvciBzdGF0ZnMKKworY29tbWl0IGY3ZTIxZjI2MzMzOTBiN2EyN2M1MDIyN2JlZTZkODY5NmFlM2ZiY2YKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMjkgMTY6MDE6MzEgMjAxMSAtMDcwMAorCisgICAgZG9uJ3QgcHJvdmlkZSBhIGZlYXR1cmUgd2hlbiB5b3VyIGEgY2hpbGQgb2YgYW5vdGhlciBmZWF0dXJlCisKK2NvbW1pdCBjYWMyM2MwYjI1NzRlNzI4MGJkMTI4YzYyMjY4NzVhZDBmNmI0YmZjCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gQXVnIDI4IDA5OjM4OjE0IDIwMTEgKzAyMDAKKworICAgIE1ha2Ugc3VyZSB0aGF0IGZlYXR1cmUtZGV0YWlscy5oIGV4aXN0cyBiZWZvcmUgdHJ5aW5nIHRvIGluY2x1ZGUgaXQKKworY29tbWl0IDc4MWY0Y2UyYWNiMzcxNTYwNzk3ZDhiMjlhODllZDA2NzRlOTM1ZjgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBBdWcgMjggMDk6MzY6MzYgMjAxMSArMDIwMAorCisgICAgVXNlIHRoZSBmZWF0dXJlIHRhcmdldCBpbnN0ZWFkIG9mIHRoZSB0YXJnZXQgd2hlbiBidWlsZGluZyB0aGUgZmVhdHVyZSBzZXQKKworY29tbWl0IDExYmZmNDcyY2E3YjFmY2ZmMGMxNjE4N2ExYjhhMTMwOTNiYzkxYzQKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMjkgMDA6MzM6NTUgMjAxMSArMDIwMAorCisgICAgdGhlIGlyaXg2IGJ1aWxkIG9ubHkgZGVmaW5lcyBpcml4Niwgbm90IGlyaXgKKworY29tbWl0IDNjNzNhMTQwN2EwODFkNDJlYmRkOTFkZmJjYjFlNGYxNTJiN2RmNGEKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMjkgMDA6MDU6MTMgMjAxMSArMDIwMAorCisgICAgcmUtYWRkIHNvY2thZGRyX3VuLnN1bl9wYXRoIGNvbmZpZ3VyZSBjaGVjayAobG9zdCBpbiBwcmV2aW91cyBjb21taXQpCisKK2NvbW1pdCAyZTNmMDJlMDNhZWQxMjUzODRiYTRmZTNkODM0OTRkNDNmM2EyOWU5CitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXVnIDI4IDIzOjUzOjMwIDIwMTEgKzAyMDAKKworICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYyBkb2Vzbid0IGJ1aWxkIG9uIElSSVggeWV0CisKK2NvbW1pdCBmOTVhYTMxMzc3ZDU3MmIwNDliMGIzMTZkYmIxNjNiZjdhY2E5M2Q1CitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXVnIDI4IDIzOjI1OjQwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBidWlsZCBmaXggZm9yIHN5c3RlbXMgbGFja2luZyBmaWVsZHMgbXNnX2NvbnRyb2wvbXNnX2ZsYWdzIGluIHN0cnVjdCBtc2doZHIgKGJhY2twb3J0KQorCitjb21taXQgN2Y0N2Q5Mzc2NWFhMzVhNTg2ODdlYjliNGY5ZjcwMGU0MzQzZTEzYworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyAyNiAxMToxMTozNSAyMDExIC0wNzAwCisKKyAgICBhZGRlZCByZXF1aXJlZCBmZWF0dXJlcyBmb3IgbWZkIGhhbmRsaW5nCisKK2NvbW1pdCA5YjJlNDJhNmUwNTUwZmI3ODljNjA3YzM1MjA4ODBkNGRiYzBjZjI0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDI2IDExOjA4OjA5IDIwMTEgLTA3MDAKKworICAgIGFkZGVkIC5mdCBhbmQgLmZ0LjEgZm9yIGZlYXR1cmUgZmlsZXMKKworY29tbWl0IDMzZGNiZjU2ZmMwNjI2YTNlNGYxMzU5MDk1YmQyMTdkMWE1Njc3OTQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgMjYgMTE6MDc6NTggMjAxMSAtMDcwMAorCisgICAgbm9fd3JpdGVfc3VwcG9ydCBzdXBwb3J0ZWQKKworY29tbWl0IDk3ZDQyZWZkNzY5MzdjZTdlNGJjNDhhNzJlZDVhMTEwZTQyMzEwMmQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgMjYgMTA6MDg6NTEgMjAxMSAtMDcwMAorCisgICAgaGFuZGxlIG5vLXdyaXRlLXN1cHBvcnQgd2l0aCBpZmRlZnMKKworY29tbWl0IGVhOGJlZDc5ZTgxYzQyZTMzY2JmMzdjYTZmM2MwM2M1NDk5ODdiMjIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMjUgMDY6NTY6MjIgMjAxMSAtMDcwMAorCisgICAgaW1wb3J0IHN0ZGVycgorCitjb21taXQgZmQ2ZDgwNGRjM2U3MDNjNDA1OWRiZTc3NTAwMWEzYmU5YjkzMzA5ZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAyNSAwNjo1NTozOCAyMDExIC0wNzAwCisKKyAgICB1c2UgPj4gdG8gcHJpbnQgdG8gc3RkZXJyCisKK2NvbW1pdCBjZWUwMzU5YzZmYWUyYjg1ZDdiOTMxODU5ZTUxN2Q4OWNlMDcyMmJiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyMyAyMzo0MzoxOSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZDogRG8gbm90IGdlbmVyYXRlIGFuIG91dHB1dCBmaWxlIG9uIGZhaWx1cmUKKyAgICAKKyAgICBtYWtlIHN1cHBvc2VzIHRoYXQgbm8gb3V0cHV0IGlzIGdlbmVyYXRlZCBpZiB0aGUgY29tbWFuZCBmYWlsZWQuIENoYW5nZQorICAgIGZlYXR1cmUtcmVtb3ZlIHRvIGZvbGxvdyB0aGF0IHByZXN1bXB0aW9uLgorCitjb21taXQgZmUzOWU3Mjg4Y2E5MzBkMmM5YWFhODMwMWNjOWQ5NWYwYzM4ZjM2YgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBdWcgMjEgMjE6NDg6MTcgMjAxMSArMDIwMAorCisgICAgQ29ycmVjdCB0eXBvCisKK2NvbW1pdCAxZjA4MmEzMWNkMTM4ZjFmNWUyN2JlNmQ5MGExZDU3OTBkYzBmZmU0CitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDIzIDIzOjM1OjQyIDIwMTEgKzAyMDAKKworICAgIG1ha2Ugc3VyZSB0aGF0IF9LRVJORUwgaXMgZGVmaW5lZCB0byAxIHNvIHRoYXQgIiNpZiBfS0VSTkVMIiB3b3JrcyBvbiBzeXN0ZW1zIHRoYXQgbmVlZCBpdCAoZS5nLiBJUklYKQorCitjb21taXQgMjZiYjI0NzBjMTA2ZjgzNDQ0MmEyYWRiYzc2MTFiZjE2NjU3ZmJkZgorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyMyAyMzoyMjo0NCAyMDExICswMjAwCisKKyAgICBtYWtlIHN1cmUgdGhhdCBfS0VSTkVMIGlzIGRlZmluZWQgdG8gMSBzbyB0aGF0ICIjaWYgX0tFUk5FTCIgd29ya3Mgb24gc3lzdGVtcyB0aGF0IG5lZWQgaXQgKGUuZy4gSVJJWCkKKworY29tbWl0IGZjNTU2MGMwNWY4NDgzMjFkYTBjYTBjMmU4NzAwMWQ1ZjIyOTUxNjcKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMjIgMTg6NTQ6MzAgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IGJ1aWxkIGZpeCBmb3Igc3lzdGVtcyBsYWNraW5nIGZpZWxkIG1zZ19mbGFncyBpbiBzdHJ1Y3QgbXNnaGRyIChlLmcuIElSSVgpCisKK2NvbW1pdCA5NmVhMmQxYThlYmZmYjM0ODY3M2E4NjVkNDg2ZjMxZTYzNWU2MmJkCitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXVnIDIxIDAxOjUxOjQ5IDIwMTEgKzAyMDAKKworICAgIGF1dG9yZWNvbmYKKworY29tbWl0IDFhMjY0OGVhZjcxY2IwMTg5NTE1OTY2ODljNTE1ODhkY2E4MDYzYzUKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBdWcgMjEgMDE6NDg6NTcgMjAxMSArMDIwMAorCisgICAgYXV0b3JlY29uZgorCitjb21taXQgM2YyZjYxYjBlNjEzZDYxMDVlY2YyY2ViMzk1ZGUwYmRlMzdmM2NlMworQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEF1ZyAyMSAwMTo0NzoxMyAyMDExICswMjAwCisKKyAgICBhdXRvcmVjb25mCisKK2NvbW1pdCBiNjJjYjA4NjRmNTc3YmE4NTU3M2QwZDI1MGQxMmEzOTM4N2MwN2I0CitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXVnIDIxIDAwOjU1OjMzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGFpeDogZWxpbWluYXRlIGNvbmZpZ3VyZSB3YXJuaW5nIHJlZ2FyZGluZyBsaWJwZXJmc3RhdC5oIG9uIEFJWCA2LjEgYW5kIHVwCisKK2NvbW1pdCA3MWI5MGI2ZjIxNzk0NGI0ZmZjMTgzNmU1MTYwZDQwZTMzYjQ0MjNkCitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXVnIDIxIDAwOjQwOjI4IDIwMTEgKzAyMDAKKworICAgIGZpeCBicm9rZW4gbGluZSB3cmFwCisKK2NvbW1pdCA1YjU5MDBhNGY3ZGZlZTZlMWVjODY5ZTMyMzEwYjgwY2E2ZmIyM2ZlCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDE4IDEyOjI4OjA3IDIwMTEgLTA3MDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMS5wcmUyCisKK2NvbW1pdCAzYjdlMmUzOTk0OWY4OGQ5YzU2ZWQ1Zjk5NDAyOGI5NDgxNmFiNzVjCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDE4IDEyOjIzOjI4IDIwMTEgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMS5wcmUyCisKK2NvbW1pdCBlY2U2M2JmZTQ5OWM2MzBiZGFhZTYyMDA2NDhkMjkxODBjZTNhMTc5CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDE4IDEyOjAzOjE3IDIwMTEgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEucHJlMgorCitjb21taXQgMjhiNTQwNzA1MTQ3NTNlOGQ4YWJiNzE4YjIyNGQ2NTdhYjdhOGFiOAorQXV0aG9yOiBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDE4IDExOjQ5OjU2IDIwMTEgLTA3MDAKKworICAgIENIQU5HRVM6IEJTRDogUEFUQ0ggMzM4Mzk2NTogZnJvbSB5YWJlcmF1bmV5YTogRml4IGlmLW1pYiBhZ2VudCBjb21waWxlIHdhcm5pbmdzIG9uICpCU0QKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGY3M2U2MzY0YmIzNDA3MDYyMmU5ZjQ0ODhjZDA0ODdkMmZiNzQwMmEKK0F1dGhvcjogVmxhZGltaXIgS29uZHJhdGlldiA8d3VsZjIwMDFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDE4IDExOjQ1OjI5IDIwMTEgLTA3MDAKKworICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAzMzg5MjI4OiBmcm9tIHd1bGYyMDAxOiBpbmNvbXBsZXRlIGNvbW1pdCAocGF0Y2ggMzM4NjYzMzogZml4IGludGVnZXIgb3ZlcmZsb3cpCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBlNmNmODIwNmYwYzY3NjUwMDAxZTM0YjUyNmIzN2Y2NGU0YTU5MjljCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDE4IDA5OjQ2OjMzIDIwMTEgLTA3MDAKKworICAgIFBhdGNoIGZyb20gQ2xhdXMgS2xlaW4gb24gLWNvZGVycyBmb3IgZml4aW5nIG1hbiBwYWdlIHR5cG9zCisKK2NvbW1pdCA2YTg0MWQ1NjUxOGE3MjcxOTZlNjZiNTllN2U1YjMzMDRmNTRiMGExCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDE4IDA4OjMxOjA2IDIwMTEgLTA3MDAKKworICAgIGNoYW5nZWQgY2xpZW50YWRkciBzbyBpdCByZWdpc3RlcnMgYXMgcHJlLW1pYiB0byBiZSBwaWNrZWQgdXAgYmVmb3JlIHRoZSB0cmFuc3BvcnRzIGdldCBjcmVhdGVkCisKK2NvbW1pdCBjMDIxMzFlNWIzNWQyOTY3NTViYWVjOTliZDM2MzIwNWE4NjMwN2RkCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDE3IDA5OjM0OjAwIDIwMTEgLTA3MDAKKworICAgIGRldGVjdCByZWFsbHkgb2xkIHZlcnNpb25zIG9mIExvbmcucG0KKworY29tbWl0IDUwMGQ2ZGUwNmFhNGZmMzMwYWVlNGQ3NDlhNGNjMzc3YmVjODllMDkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgMTcgMTg6MTE6NDcgMjAxMSArMDIwMAorCisgICAgRml4IHRoZSBsb2cgbWVzc2FnZSB0aGF0IHJlcG9ydHMgdGhhdCBnZXRob3N0YnlhZGRyKCkgaXMgbWlzc2luZworCitjb21taXQgNjU4MDU1NmNjN2JkODMzYWY3MzFiNjJjZTFlZDIwMTc1NjRmZTdlYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAxNyAxODowODowMSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBzbm1wdHJhcGQ6IE1ha2UgdGhlIElQIGFkZHJlc3MgdG8gaG9zdG5hbWUgY29udmVyc2lvbiB3b3JrCisKK2NvbW1pdCAzY2IzZjFlZGUzODhkODRlMzkyZTFkODE1ZDU5OTRhNGJmMGYxMGY5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gQXVnIDE0IDA3OjU5OjI1IDIwMTEgKzAyMDAKKworICAgIFdpbmRvd3MsIGJ1aWxkLmJhdDogUmVzdG9yZSBvcmlnaW5hbCBidWlsZCBhbmQgaW5zdGFsbCBvcmRlci4gQXBwYXJlbnRseSB0aGUgY29ycmVjdCBuZXRzbm1wLmRsbCBpcyB1c2VkIGR1cmluZyB0aGUgUGVybCB0ZXN0cyBieSBzZXR0aW5nIFBBVEggcHJvcGVybHkuCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCBjMWI1YTAzMGQ4ZjA0ODc2Y2Q1YjlhZjAwOGM4NzljYzQ2OGIyMTJmLgorCitjb21taXQgZGFmZjQ5ZDliMzM2OWVmY2M4N2YwNWRjODU5MTM2MmU4MWE0NWZkZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAxODo0Mzo0OCAyMDExICswMjAwCisKKyAgICBXaW5kb3dzOiBNYWtlIHRoZSBQZXJsIGFnZW50IG1vZHVsZSB3b3JrIGFnYWluIHdpdGggdGhlIG9yaWdpbmFsIFNOTVBfRlJFRSgpIGRlZmluaXRpb24uCisKK2NvbW1pdCAzYzczYjQ4MzhlNjA1YjE1MGJjMzE3MzEzZjE0ZWIzMzQ0NDcyOWY4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDE3OjM4OjI3IDIwMTEgKzAyMDAKKworICAgIFJldmVydCB0aGUgdHdvIG1vc3QgcmVjZW50IFNOTVBfRlJFRSgpIGNoYW5nZXMgKGNvbW1pdHMgNDdjOGVmMWI4OWM2Y2NiNDI0N2Q5NjMzNDc3OTI1OTA4YzY4YzFhNSBhbmQgN2Y0MmQwZDkzMzIwNDg0MTUyMjcxNDI3Y2M5ODA4Y2JkYTQ5YmJkMCkuCisKK2NvbW1pdCAzZTUwYzNlMDBlOWYzMjFmYjcwOGJjNTc5ZWI0ZGMxYTBmMWU3YzRkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDExOjMxOjQwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBwYXNzX3BlcnNpc3Q6ICBGaXhlcyBhIHJhY2UgY29uZGl0aW9uIGludHJvZHVjZWQgaW4gY29tbWl0IDMxZmEwN2NkOWZmZGU0NmQ0MWQyYjU4MzhjM2ZjNGQwMTU0OGJmYjUuCisgICAgCisgICAgVGhlIGZvbGxvd2luZyByYWNlIGNvbmRpdGlvbiBjb3VsZCBoYXBwZW46CisgICAgLSBBIHN5c3RlbSBjYWxsIGZhaWxzIGFuZCBlcnJubyBpcyBzZXQgYWNjb3JkaW5nbHkgYnkgdGhlIEMgbGlicmFyeS4KKyAgICAtIFNJR0NITEQgaGFuZGxlciBpbnZva2VzIGEgc3lzdGVtIGNhbGwgdGhhdCBmYWlscyBhbmQgaGVuY2Ugb3ZlcndyaXRlcyBlcnJuby4KKyAgICAtIFNJR0NITEQgaGFuZGxlciBsZWF2ZXMuCisgICAgLSBvcmlnaW5hbCBjb250ZXh0IGNoZWNrcyBlcnJubyBhbmQgZmluZHMgdGhlIHZhbHVlIGZyb20gdGhlIHN5c3RlbSBjYWxsIGludm9rZWQKKyAgICAgIGJ5IHRoZSBTSUdDSExEIGhhbmRsZXIgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIGNhbGwgdGhhdCBmYWlsZWQgb3JpZ2luYWxseS4KKyAgICAKKyAgICBPdGhlciBmaXhlcyBpbmNsdWRlZCBpbiB0aGlzIHBhdGNoOgorICAgIC0gUmVuYW1lZCBkZWluaXRfcGFzc19wZXJzaXN0KCkgaW50byBzaHV0ZG93bl9wYXNzX3BlcnNpc3QoKSBzdWNoIHRoYXQgdGhpcworICAgICAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZHVyaW5nIGFnZW50IHNodXRkb3duLgorICAgIC0gTWFkZSBzdXJlIHRoYXQgc2h1dGRvd25fcGFzc19wZXJzaXN0KCkgaXMgY2FsbGVkIGJ5IHRoZSBXaW5kb3dzIHNubXBkLmV4ZSB0b28uCisgICAgLSBXaW5kb3dzOiBhdm9pZCBjYWxsaW5nIENsb3NlSGFuZGxlKElOVkFMSURfSEFORExFX1ZBTFVFKS4KKyAgICAtIFdpbmRvd3M6IGF2b2lkIHRoYXQgY2xvc2luZyBhIHBhc3NfcGVyc2lzdCBwaXBlIHRyaWdnZXJzIGEgY3Jhc2guCisgICAgLSBXaW5kb3dzOiBwYXNzX3BlcnNpc3Q6IGNsb3NlIGhhbmRsZXMgb2YgZmluaXNoZWQgcHJvY2Vzc2VzLgorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAKKyAgICAJYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMKKyAgICAJd2luMzIvbWliX21vZHVsZV9zaHV0ZG93bi5oCisKK2NvbW1pdCBlMTQ3ZTRiOTY3NTUyMDdkZTFjZTMwOTkwZDY3YjRiN2M3NmRkNDgzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjM5OjE0IDIwMTEgKzAyMDAKKworICAgIFVuYnJlYWsgdGhlIFdpbmRvd3MgYnVpbGQuIFRoaXMgaXMgYSBmb2xsb3ctdXAgZm9yIGNvbW1pdCAxZTEwMDBhODgxNTkyMWI1ZWMyZTc5OTdiNTM1OTJhNTQ0YjNkZmMyLgorCitjb21taXQgYzFiNWEwMzBkOGYwNDg3NmNkNWI5YWYwMDhjODc5Y2M0NjhiMjEyZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxMDozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBidWlsZGluZyAoYnVpbGQuYmF0KTogSW5zdGFsbCBuZXRzbm1wLmRsbCBiZWZvcmUgcnVubmluZyB0aGUgUGVybCByZWdyZXNzaW9uIHRlc3RzIHN1Y2ggdGhhdCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBhcmUgcnVuIHdpdGggdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBuZXRzbm1wLmRsbC4KKworY29tbWl0IDFlOWQyMDAzYmFlZDIyN2Y2OGI2ODUyOGYxZTk3ZTZmNWVhODZjMWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTA6MzMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogcGVybCAoYnVpbGQuYmF0KTogV2hlbiBpbnN0YWxsaW5nIGRldmVsb3BtZW50IGZpbGVzLCBpbnN0YWxsIHRoZSBQREIgZmlsZXMgdG9vLgorCitjb21taXQgYThkOTQwMDdlMzJkMDM3MTA2OTJjOGYxYjQxN2Q1YmRmZTM2NTBmYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxMDozMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBGaXggUGVybCByZWdyZXNzaW9uIHRlc3QgZmFpbHVyZXMKKyAgICAKKyAgICBBbGwgUGVybCByZWdyZXNzaW9uIHRlc3RzIHBhc3Mgbm93IG9uIExpbnV4IGFuZCBvbiBXaW5kb3dzIChNU1ZDKS4KKworY29tbWl0IGI2ZDBiNDkwMTgxYzZkZjhjMTFlY2YxNTVmMWU2ZWFmMTFiMWVjNTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTA6MzMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogUGVybCByZWdyZXNzaW9uIHRlc3RzOiBEb24ndCBmYWlsIHNraXBwZWQgdGVzdHMuCisKK2NvbW1pdCBjYTNhY2YyYjA3MDM5ZDk2YTExN2YwOTBmN2VjNzZiNmU4YjU0MWU5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjEwOjMyIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEFkZCBTTk1QOjpnZXRlbnYoKSBhbmQgU05NUDo6c2V0ZW52KCkuCisKK2NvbW1pdCA1Njc1OWU1YWQ1MzdmMDFiNGE1MWU3ZmY5OTk0ZWM0YjU1YzMyMTM1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjE0OjQ2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBuZXRzbm1wX3NldGVudigpLgorCitjb21taXQgOTg0M2U1YmNmNDcyODc3ZTg1YjAzMWI1ZTVkYWZhYTlkNWZjNjNjNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxMDozMiAyMDExICswMjAwCisKKyAgICBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0OiBkb2N1bWVudCBob3cgdG8gdXNlIG9uIFdpbmRvd3MKKworY29tbWl0IDYwNTc4NjZiNzNhMDIyNzcxZTkwZTk5NjdkZDI1YmRjNzE5MmZiZGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTA6MzIgMjAxMSArMDIwMAorCisgICAgU2V0IGV4ZWN1dGUgZmxhZyBvbiBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0IHN1Y2ggdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoYXQgZmlsZSB3b3JrCisKK2NvbW1pdCBjMmRhZjU5NDBmMjFhMTNlODk4OWRkMDU1YjE3ZjMxODExMTJmODU2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjEwOjMyIDIwMTEgKzAyMDAKKworICAgIC5naXRpZ25vcmU6IEZpeCBhIHN1cHByZXNzaW9uIHBhdHRlcm4KKworY29tbWl0IDFmMGE5MjhhMjkxM2NmYTdmNWNlYWFmNDY5NmM2OWZiZGM2ODc2MjEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgMTIgMDk6MDk6MTEgMjAxMSAtMDcwMAorCisgICAgYWRkZWQgdGhlIG1pc3NpbmcgLWUgb3B0aW9uIHRvIHRoZSBjcmVhdGVVc2VyIGRvY3MKKworY29tbWl0IDFlMTAwMGE4ODE1OTIxYjVlYzJlNzk5N2I1MzU5MmE1NDRiM2RmYzIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBBdWcgMTEgMTU6NDY6MzIgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IE5ldC1TTk1QIFBlcmwgbW9kdWxlcyBidWlsZCBhZ2Fpbi4KKworY29tbWl0IDk3ZDY0MzJmOTVlMWNkY2Y2ZmQ4NWU3Y2ExZDBjNTU1N2ViNmQ5MTkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBBdWcgMTEgMTg6MTY6NDQgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogcGVybDogTWFrZSBzdXJlIHRoYXQgdGhlIGNvbnN0YW50IFNOTVBfREVGQVVMVF9SRVRSSUVTIGlzIHJlY29nbml6ZWQuCisgICAgCisgICAgQ0hBTkdFUzogcGVybDogU05NUCBtb2R1bGU6IEFkZCBjb25zdGFudHMgTkVUU05NUF9DQUxMQkFDS19PUF9SRUNFSVZFRF9NRVNTQUdFIGFuZCBORVRTTk1QX0NBTExCQUNLX09QX1RJTUVEX09VVC4KKyAgICAKKyAgICBXaGVuIHRoZSBOZXQtU05NUCBQZXJsIG1vZHVsZXMgYXJlIGJ1aWx0IG9uIFdpbmRvd3Mgd2l0aCBNU1ZDIG9yIE1pbkdXIGl0CisgICAgaXMgcG9zc2libGUgdGhhdCBlYWNoIHRoZXNlIGFyZSBsaW5rZWQgd2l0aCBhbm90aGVyIHZlcnNpb24gb2YgdGhlIE1TVkMKKyAgICBydW50aW1lIGxpYnJhcnkgdGhhbiB0aGUgUGVybCBpbnRlcnByZXRlciBpdHNlbGYuIEluIHRoYXQgY2FzZSB0aGUgImVycm5vIgorICAgIHZhcmlhYmxlIHVzZWQgaW5zaWRlIC54cyBzb3VyY2UgZmlsZXMgaXMgYW5vdGhlciB2YXJpYWJsZSB0aGFuIHRoZSAkISB2YXJpYWJsZQorICAgIGluIC5wbSBmaWxlcy4gT3I6IGFzc2lnbm1lbnRzIHRvICJlcnJubyIgaW4gYSAueHMgZmlsZSBkbyBub3QgbW9kaWZ5IHRoZSAiJCEiCisgICAgUGVybCB2YXJpYWJsZSBUaGlzIHBhdGNoIGF2b2lkcyB1c2luZyAiZXJybm8iIGJ5IG1vZGlmeWluZyB0aGUgZGlmZmVyZW50CisgICAgY29uc3RhbnQoKSBmdW5jdGlvbnMgc3VjaCB0aGF0IHRoZXNlIHJldHVybiBhIHR3by1lbGVtZW50IGFycmF5IGluc3RlYWQgb2YKKyAgICByZXR1cm5pbmcgYSBzY2FsYXIgYW5kIHNldHRpbmcgZXJybm8uCisKK2NvbW1pdCA3NjkwODk0YjdiODQ2NGYwNWM3YzkwMmJkN2NmNzUxY2MyNjk5NzdhCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDEwIDA5OjI2OjM3IDIwMTEgLTA3MDAKKworICAgIGRvbid0IGFzc2VydCBvbiBhIGRvdWJsZSBpbml0OyBqdXN0IGRvbid0IGRvIGl0IHR3aWNlCisKK2NvbW1pdCA0N2M4ZWYxYjg5YzZjY2I0MjQ3ZDk2MzM0Nzc5MjU5MDhjNjhjMWE1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDEwIDE2OjQ0OjM2IDIwMTEgKzAyMDAKKworICAgIFNOTVBfRlJFRSgpOiBjYXN0IGFyZ3VtZW50IHRvICh2b2lkICopIGJlZm9yZSBwYXNzaW5nIGl0IHRvIG5ldHNubXBfZnJlZSgpCisKK2NvbW1pdCAwMjIwMzkyZDg5OWE5Y2FiNzAxZjc0YWYxMjAzMGJiMWQ0Y2M1ZTJlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSnVsIDEgMTM6MDI6MTUgMjAxMSArMDIwMAorCisgICAgLmdpdGlnbm9yZTogSWdub3JlICouZXhlIGZpbGVzIGdlbmVyYXRlZCBieSB0aGUgV2luMzIgYnVpbGQKKworY29tbWl0IDAzNDRkZjkyZTQ2MmYzYmVjOTk0NjA4YzMzODFmY2E1MzQ4YWJjZGIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgOCAxNToxMjo1NSAyMDExIC0wNzAwCisKKyAgICBmaXggQysrIGNvbW1lbnRzCisKK2NvbW1pdCAwOWE2NjFkNWRjNjBjNzMwZmUwMzg0YjAyZWQ2NzI4MzBlZjc0ZTMwCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDggMTU6MTI6NTUgMjAxMSAtMDcwMAorCisgICAgZml4IEMrKyBjb21tZW50cworCitjb21taXQgNjljYjQyYTRlYTA1ODNjZTZmNWZmOGY4MzgzNTE2ZDM0YmM0YzM0NAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyA4IDE1OjEyOjU1IDIwMTEgLTA3MDAKKworICAgIGZpeCBDKysgY29tbWVudHMKKworY29tbWl0IDQ0N2RkYzY2ZDkwZGQ5ZTVjMzEwNWIyNjhiNmE2M2JmYzU4MGI5MjQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXVnIDggMjI6MDM6NTggMjAxMSArMDEwMAorCisgICAgRGVmaW5lIF9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04gdG9rZW4KKyAgICAoYXMgcGVyIEFsZXgnIGJ1aWxkIGluc3RydWN0aW9ucykKKworY29tbWl0IGIwYTYyZWIxOTc2M2FiNGYwYjc3NjQzMDI0MmE2MTE3Y2NhZTVkZDMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXVnIDggMjE6NTk6MTcgMjAxMSArMDEwMAorCisgICAgRGVmaW5lIF9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04gdG9rZW4KKyAgICAoYXMgcGVyIEFsZXgnIGJ1aWxkIGluc3RydWN0aW9ucykKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjEgLT4gVjUuNy4yLnByZTEKKworY29tbWl0IDgxMDE4NWFlMGIwY2QyYWQ0ZDQyNGExYmE3NzVlZjVjZWFmNTBmMDMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+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+CitEYXRlOiAgIFdlZCBTZXAgMjggMDY6NTU6MTkgMjAxMSAtMDcwMAorCisgICAgcmVtb3ZlIHRoZSB2NS43IGZyb20gdGhlIGZyb3plbiBsaXN0CisKK2NvbW1pdCBhYzJhZWQzYzk0YmIyZWJiNDczYWYwYTFlMjBmMDU2MWFkNjI5OTU2CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDI4IDA2OjU1OjExIDIwMTEgLTA3MDAKKworICAgIHJlbW92ZSB0aGUgdjUuNyBmcm9tIHRoZSBmcm96ZW4gbGlzdAorCitjb21taXQgNDZlYWMwMmU5YTI3YmY0ZjMwNjhlNzk1Y2FiODkxZjA1YTg0ODg3MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIFNlcCAyNiAyMTo0OToyNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQXZvaWQgdGhhdCBzbm1wZCBjcmFzaGVzIGlmIHN0YXJ0ZWQgb24gYSBzeXN0ZW0gd2l0aCBhbm90aGVyIE9wZW5TU0wgbGlicmFyeSB2ZXJzaW9uIHRoYW4gdGhlIG9uZSBpdCBoYXMgYmVlbiBidWlsdCB3aXRoLgorCQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjEgLT4gVjUuNy4yLnByZTIKKworY29tbWl0IDgxMDE4NWFlMGIwY2QyYWQ0ZDQyNGExYmE3NzVlZjVjZWFmNTBmMDMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+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+CitEYXRlOiAgIFdlZCBTZXAgMjggMDY6NTU6MTkgMjAxMSAtMDcwMAorCisgICAgcmVtb3ZlIHRoZSB2NS43IGZyb20gdGhlIGZyb3plbiBsaXN0CisKK2NvbW1pdCBhYzJhZWQzYzk0YmIyZWJiNDczYWYwYTFlMjBmMDU2MWFkNjI5OTU2CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDI4IDA2OjU1OjExIDIwMTEgLTA3MDAKKworICAgIHJlbW92ZSB0aGUgdjUuNyBmcm9tIHRoZSBmcm96ZW4gbGlzdAorCitjb21taXQgNDZlYWMwMmU5YTI3YmY0ZjMwNjhlNzk1Y2FiODkxZjA1YTg0ODg3MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIFNlcCAyNiAyMTo0OToyNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQXZvaWQgdGhhdCBzbm1wZCBjcmFzaGVzIGlmIHN0YXJ0ZWQgb24gYSBzeXN0ZW0gd2l0aCBhbm90aGVyIE9wZW5TU0wgbGlicmFyeSB2ZXJzaW9uIHRoYW4gdGhlIG9uZSBpdCBoYXMgYmVlbiBidWlsdCB3aXRoLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucmMzIC0+IFY1LjcuMQorCisyMDExLTA5LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMQorCisKKzIwMTEtMDktMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xLnJjMworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucmMyIC0+IFY1LjcuMS5yYzMKKworMjAxMS0wOS0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEucmMzCisKKworMjAxMS0wOS0yMiAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogY29tbWl0IDA3ZjYxYTAyYTI0MDkwOTZlNWM5NjJjZDIxMTEyNjM5NmFkMDlkMmIgTWVyZ2U6IGVlMGQzYWQKKworIGJkYTMyNGIgQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgVGh1CisgU2VwIDIyIDEwOjM5OjU5IDIwMTEgKzAxMDAKKworMjAxMS0wOS0yMiAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogY29tbWl0IGM1NWY2MDhmMTZmMTYwZjVlNzlkYzA1N2Y4ODc4ZGVmNDYyOTczZTEgQXV0aG9yOiBEYXZlCisKKyBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIFRodSBTZXAgMjIgMTA6MzU6MjQgMjAxMQorICswMTAwCisKKzIwMTEtMDktMjIgIFN0ZXZlIEZyaWVkbCA8c3RldmVAdW5peHdpei5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jOiBDSEFOR0VTOiBzbm1wZDogMzQwOTY5MjoKKworIENhbGN1bGF0ZSBkaXNrIHBlcmNlbnRhZ2UgdXNhZ2UgdmlhIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgdG8KKyBhdm9pZCBpbnRlZ2VyIGFyaXRobWV0aWMgZXJyb3JzLiAgKENvZGUgYmFzZWQgb24gcGF0Y2gsIHJhdGhlciB0aGFuCisgYXBwbGllZCB2ZXJiYXRpbSkKKworMjAxMS0wOS0yMiAgU3RldmUgRnJpZWRsIDxzdGV2ZUB1bml4d2l6Lm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmM6IENIQU5HRVM6IHNubXBkOiAzNDA5NjkyOgorCisgQ2FsY3VsYXRlIGRpc2sgcGVyY2VudGFnZSB1c2FnZSB2aWEgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB0bworIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cgZXJyb3JzLiAgKENvZGUgYmFzZWQgb24gdGhlIHN1Ym1pdHRlZCBwYXRjaCwKKyByYXRoZXIgdGhhbiBhcHBsaWVkIHZlcmJhdGltKQorCisyMDExLTA5LTIyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBDaGFuZ2VMb2c6IFRoZSBvbmx5IGNoYW5nZSBiZXR3ZWVuIFY1LjcucmMxIGFuZCBWNS43LjEucmMyIGlzIHRoZQorCisgdmVyc2lvbiBudW1iZXIuIE1ha2UgdGhpcyBjbGVhciBpbiB0aGUgQ2hhbmdlTG9nIGZpbGUuCisKKzIwMTEtMDktMjEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogY2hhbmdlbG9nIHVwZGF0ZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucmMxIC0+IFY1LjcuMS5yYzIKKworMjAxMS0wOS0yMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEucmMyCisKKworMjAxMS0wOS0wNCAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CisKKyAgICogOiBjb21taXQgNGQ2ZGVmZGFlNzJjMzViMTA4MDA3NjE4MDMxM2QyOTEwNTY4NDc1YiBNZXJnZTogZDNhNzU4YworCisgM2I3ZmRjNCBBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPiBEYXRlOiAgIFN1bgorIFNlcCA0IDE0OjQ2OjAyIDIwMTEgKzAyMDAKKworMjAxMS0wOS0wNCAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CisKKyAgICogOiBjb21taXQgYmJlMmMxOWEwMWVjZWMwMjRmNzQxZTJlNTQ3MDFhZTYyMTJmNGMzZSBBdXRob3I6IE1hZ251cworCisgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4gRGF0ZTogICBTdW4gU2VwIDQgMTQ6NDQ6MzggMjAxMQorICswMjAwCisKKzIwMTEtMDktMDQgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorCisgICAqIDogY29tbWl0IGQzYTc1OGNmMzAyNTRiODA3MDZhNDNmMTkxYzE1MjM4YjJjYjczYzkgTWVyZ2U6IGMxMDdjZTAKKworIDIyN2RiZDcgQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4gRGF0ZTogICBTdW4KKyBTZXAgNCAxNDowODozNSAyMDExICswMjAwCisKKzIwMTEtMDktMDQgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorCisgICAqIDogY29tbWl0IDllZmE0NjdhOTcyYmI2ZTFjN2ZiZGFmMmUyNzQyOWQyOWY0YWI4OWUgQXV0aG9yOiBNYWdudXMKKworIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+IERhdGU6ICAgU3VuIFNlcCA0IDE0OjAwOjEyIDIwMTEKKyArMDIwMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucHJlMiAtPiBWNS43LjEucmMxCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlCisKKyBkZXBlbmQgZm9yIDUuNy4xLnJjMQorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6IGZpeCBDKysgY29tbWVudAorCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xLnJjMQorCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGMxMDdjZTA3ODQwOWQyNjViOWIyMThkNDlmMzgxNWI3OTVkYjFkYzMgTWVyZ2U6IGVhNGIzYjIKKworIDkxNWFhOGQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDMwIDE5OjA3OjA3IDIwMTEgLTA3MDAKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNDIyYjA4MmE5NTkzY2E5YzY1YWFjNDQ5ZTZkMTI4YTllOTdlOTRmYiBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgQXVnIDMwCisgMTk6MDY6NTYgMjAxMSAtMDcwMAorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBlYTRiM2IyM2YzNTA1ODNlNTYyNjMyOGI1MzY3ZTZjNjE3MjU1Zjk1IE1lcmdlOiBiY2YzOGI4CisKKyBiMzRkNWRjIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyAzMCAxNjozODoyNSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDcxYzBkNzY1MDQ5MzcxMDYzMWZhMDhkNWRjNGRhZDUwMWE5YWE3NzEgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEF1ZyAzMAorIDE2OjM3OjQxIDIwMTEgLTA3MDAKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYjEzZjRkODg4NmI2YTRlNzNiYzA3ZGYyYjkwZDFhNjExNWNmM2RmYyBNZXJnZTogZjdlMjFmMgorCisgNjRlOTc3OCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgMzAgMTE6MDk6MzAgMjAxMSAtMDcwMAorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBiNWQyYTQzZjk3YTU5ODU4Yzk0NGViYTIyOTBiNTliOTNjMjMwYTZhIE1lcmdlOiA4NmVmZWUyCisKKyBjZjRjZjdmIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyAzMCAxMTowOToyOSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTYtcGF0Y2hlcycgaW50bworCisgVjUtNi1wYXRjaGVzCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXV0by1kZXRlcm1pbmUgcGF0Y2ggYXJndW1lbnRzIGlmCisKKyBwb3NzaWJsZSBmb3IgbnNwYXRjaHRyeQorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG1ha2UgaXQgc28gdGhlIGdpdCBjb21taXQgbGluZSBjYW4KKworIGJlIGN1dC9wYXN0ZSB3aXRob3V0IGxpbmVicmVha3MKKworMjAxMS0wOC0zMCAgUm9uYWxkIFdhaGwgPHJ3YS1jb0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzk0NTg2OiBmcm9tCisKKyByd2EtY286IGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIHJlYWRfY29uZmlnICgrZml4KSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IGRlc2NyaWJlIHRoYXQgbnNyb2xsdXAgbmVlZHMgdG8gYmUgcnVuIG5vdy4KKworCisyMDExLTA4LTMwICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBjb21taXQgMmI5MmEwYTFlM2EwNjE4YzUxNWViZDkwMjI3MWI5NWMwODkzMWFmYSBNZXJnZTogYTA4NjM0NworCisgODZlZmVlMiBBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBUdWUKKyBBdWcgMzAgMTE6Mjg6MTQgMjAxMSArMDEwMAorCisyMDExLTA4LTMwICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jOiBBcHBhcmVudGx5IElSSVggaGFzIGEKKworIGRpZmZlcmVudCBBUEkgZm9yIHN0YXRmcworCisyMDExLTA4LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6IGRvbid0IHByb3ZpZGUgYSBmZWF0dXJlIHdoZW4geW91ciBhCisKKyBjaGlsZCBvZiBhbm90aGVyIGZlYXR1cmUKKworMjAxMS0wOC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNy1wYXRjaGVzJyBpbnRvCisKKyBWNS03LXBhdGNoZXMKKworMjAxMS0wOC0yOCAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CisKKyAgICogYXBwcy9NYWtlZmlsZS5pbjogVXNlIHRoZSBmZWF0dXJlIHRhcmdldCBpbnN0ZWFkIG9mIHRoZSB0YXJnZXQKKworIHdoZW4gYnVpbGRpbmcgdGhlIGZlYXR1cmUgc2V0CisKKzIwMTEtMDgtMjkgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaDogdGhlIGlyaXg2IGJ1aWxkIG9ubHkgZGVmaW5lcworCisgaXJpeDYsIG5vdCBpcml4CisKKzIwMTEtMDgtMjkgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiByZS1hZGQgc29ja2FkZHJfdW4uc3VuX3BhdGgKKworIGNvbmZpZ3VyZSBjaGVjayAobG9zdCBpbiBwcmV2aW91cyBjb21taXQpCisKKzIwMTEtMDgtMjggIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaDogCisKKyBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMgZG9lc24ndCBidWlsZCBvbiBJUklYIHlldAorCisyMDExLTA4LTI4ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBhMDg2MzQ3OWQ4MDk2MmM2NTI5NDdkZmRlZTExYmRkMTM2YzBlMDEzIE1lcmdlOiA1MjUwODkzCisKKyBmOTVhYTMxIEF1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgU3VuIEF1ZyAyOCAyMzozNzoyNyAyMDExICswMjAwCisKKzIwMTEtMDgtMjggIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogYnVpbGRpbmc6IGJ1aWxkIGZpeAorCisgZm9yIHN5c3RlbXMgbGFja2luZyBmaWVsZHMgbXNnX2NvbnRyb2wvbXNnX2ZsYWdzIGluIHN0cnVjdCBtc2doZHIKKyAoYmFja3BvcnQpCisKKzIwMTEtMDgtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYzogYWRkZWQgcmVxdWlyZWQgZmVhdHVyZXMgZm9yCisKKyBtZmQgaGFuZGxpbmcKKworMjAxMS0wOC0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogLmdpdGlnbm9yZTogYWRkZWQgLmZ0IGFuZCAuZnQuMSBmb3IgZmVhdHVyZSBmaWxlcworCisKKzIwMTEtMDgtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6IG5vX3dyaXRlX3N1cHBvcnQgc3VwcG9ydGVkCisKKworMjAxMS0wOC0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjOiBoYW5kbGUgbm8td3JpdGUtc3VwcG9ydCB3aXRoCisKKyBpZmRlZnMKKworMjAxMS0wOC0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNTI1MDg5MzI3YWJhN2QwMWQ2MzNjNjM0YzZiNmYwNmRlNDJhY2JiOCBNZXJnZTogMWJiMjM0YQorCisgMDRmZDcxYSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgMjUgMDY6NTc6MjEgMjAxMSAtMDcwMAorCisyMDExLTA4LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBlYThiZWQ3OWU4MWM0MmUzM2NiZjM3Y2E2ZjNjMDNjNTQ5OTg3YjIyIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFRodSBBdWcgMjUKKyAwNjo1NjoyMiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudC5weTogdXNlID4+IHRvIHByaW50IHRvIHN0ZGVycgorCisKKzIwMTEtMDgtMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtcmVtb3ZlOiBDSEFOR0VTOiBidWlsZDogRG8gbm90IGdlbmVyYXRlCisKKyBhbiBvdXRwdXQgZmlsZSBvbiBmYWlsdXJlIG1ha2Ugc3VwcG9zZXMgdGhhdCBubyBvdXRwdXQgaXMgZ2VuZXJhdGVkIGlmIHRoZSBjb21tYW5kIGZhaWxlZC4KKyBDaGFuZ2UgZmVhdHVyZS1yZW1vdmUgdG8gZm9sbG93IHRoYXQgcHJlc3VtcHRpb24uCisKKzIwMTEtMDgtMjEgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtcmVtb3ZlOiBDb3JyZWN0IHR5cG8KKworCisyMDExLTA4LTIzICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAxYmIyMzRhNmNjMzZlNmE0ZWZiZTNmYjI5YzQ4MDIxMGRjMmI5YzEzIE1lcmdlOiAzNWE5OGMzCisKKyAxZjA4MmEzIEF1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyAyMyAyMzozODowNyAyMDExICswMjAwCisKKzIwMTEtMDgtMjMgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzOiBtYWtlIHN1cmUgdGhhdAorCisgX0tFUk5FTCBpcyBkZWZpbmVkIHRvIDEgc28gdGhhdCAiI2lmIF9LRVJORUwiIHdvcmtzIG9uIHN5c3RlbXMgdGhhdAorIG5lZWQgaXQgKGUuZy4gSVJJWCkKKworMjAxMS0wOC0yMyAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMzVhOThjM2Q3YzVhM2M1ZGYzNTZhZGQ5ZThiODA4Mjg3ODk5YjY5YSBNZXJnZTogMWYzN2Y1NworCisgYTI3Zjc0NCBBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgMjMgMjM6MzA6MjcgMjAxMSArMDIwMAorCisyMDExLTA4LTIzICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyNmJiMjQ3MGMxMDZmODM0NDQyYTJhZGJjNzYxMWJmMTY2NTdmYmRmIEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBBdWcgMjMgMjM6MjI6NDQKKyAyMDExICswMjAwCisKKzIwMTEtMDgtMjIgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogYXV0b3JlY29uZgorCisKKzIwMTEtMDgtMjIgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IGJ1aWxkaW5nOiBidWlsZCBmaXgKKworIGZvciBzeXN0ZW1zIGxhY2tpbmcgZmllbGQgbXNnX2ZsYWdzIGluIHN0cnVjdCBtc2doZHIgKGUuZy4gSVJJWCkKKworMjAxMS0wOC0yMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBhdXRvcmVjb25mCisKKworMjAxMS0wOC0yMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBhdXRvcmVjb25mCisKKworMjAxMS0wOC0yMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBhdXRvcmVjb25mCisKKworMjAxMS0wOC0yMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYjYyY2IwODY0ZjU3N2JhODU1NzNkMGQyNTBkMTJhMzkzODdjMDdiNCBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBTdW4gQXVnIDIxIDAwOjU1OjMzCisgMjAxMSArMDIwMAorCisyMDExLTA4LTIxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA3MWI5MGI2ZjIxNzk0NGI0ZmZjMTgzNmU1MTYwZDQwZTMzYjQ0MjNkIEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFN1biBBdWcgMjEgMDA6NDA6MjgKKyAyMDExICswMjAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5wcmUxIC0+IFY1LjcuMS5wcmUyCisKKzIwMTEtMDgtMTggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlCisKKyBkZXBlbmQgZm9yIDUuNy4xLnByZTIKKworMjAxMS0wOC0xOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEucHJlMgorCisKKzIwMTEtMDgtMTggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDAzMDUzNDc5NjA0YmM4M2VmYmVhNTc5YjQ1NjJiMTgzMWNlYTFjYjYgTWVyZ2U6IGY3M2U2MzYKKworIGQ5NGRmMzkgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDE4IDExOjU3OjQ2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0xOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjhiNTQwNzA1MTQ3NTNlOGQ4YWJiNzE4YjIyNGQ2NTdhYjdhOGFiOCBBdXRob3I6IEdhcnJldHQKKworIENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFRodSBBdWcgMTgKKyAxMTo0OTo1NiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMTggIFZsYWRpbWlyIEtvbmRyYXRpZXYgPHd1bGYyMDAxQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmM6IENIQU5HRVM6IGFnZW50OiBQQVRDSCAzMzg5MjI4OgorCisgZnJvbSB3dWxmMjAwMTogaW5jb21wbGV0ZSBjb21taXQgKHBhdGNoIDMzODY2MzM6IGZpeCBpbnRlZ2VyCisgb3ZlcmZsb3cpIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTE4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmOiBQYXRjaCBmcm9tIENsYXVzIEtsZWluIG9uIC1jb2RlcnMgZm9yIGZpeGluZworCisgbWFuIHBhZ2UgdHlwb3MKKworMjAxMS0wOC0xOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBjaGFuZ2VkIGNsaWVudGFkZHIgc28gaXQgcmVnaXN0ZXJzIGFzIHByZS1taWIKKworIHRvIGJlIHBpY2tlZCB1cCBiZWZvcmUgdGhlIHRyYW5zcG9ydHMgZ2V0IGNyZWF0ZWQKKworMjAxMS0wOC0xNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYzAyMTMxZTViMzVkMjk2NzU1YmFlYzk5YmQzNjMyMDVhODYzMDdkZCBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgQXVnIDE3CisgMDk6MzQ6MDAgMjAxMSAtMDcwMAorCisyMDExLTA4LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3N5c3RlbS5jOiBGaXggdGhlIGxvZyBtZXNzYWdlIHRoYXQgcmVwb3J0cyB0aGF0CisKKyBnZXRob3N0YnlhZGRyKCkgaXMgbWlzc2luZworCisyMDExLTA4LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxODJlMWRjMGMzZWFjZmE0ZTljY2RiMjg2MDBmZjBmMjM3MDIxMWFlIE1lcmdlOiA0OTliNzk2CisKKyA1MTdiNmIwIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgV2VkIEF1ZworIDE3IDE4OjA5OjMwIDIwMTEgKzAyMDAKKworMjAxMS0wOC0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNjU4MDU1NmNjN2JkODMzYWY3MzFiNjJjZTFlZDIwMTc1NjRmZTdlYiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBXZWQgQXVnIDE3IDE4OjA4OjAxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNDk5Yjc5NmNiZDc4MDY1YzMzNTQ3NzkxMzZiZDNkOWQxZjU0OGE1OCBNZXJnZTogMDQxOGZmMAorCisgYTljYjI2NyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFN1biBBdWcKKyAxNCAwODowMjozOCAyMDExICswMjAwCisKKzIwMTEtMDgtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDNjYjNmMWVkZTM4OGQ4NGUzOTJlMWQ4MTVkNTk5NGE0YmYwZjEwZjkgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU3VuIEF1ZyAxNCAwNzo1OToyNSAyMDExICswMjAwCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHBlcmwvT0lEL09JRC54cywgcGVybC9TTk1QL1NOTVAueHMsIHBlcmwvYWdlbnQvYWdlbnQueHM6IFdpbmRvd3M6CisKKyBNYWtlIHRoZSBQZXJsIGFnZW50IG1vZHVsZSB3b3JrIGFnYWluIHdpdGggdGhlIG9yaWdpbmFsIFNOTVBfRlJFRSgpCisgZGVmaW5pdGlvbi4KKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMDQxOGZmMGNkYTIxNDExYTQ3ZmE4OTc4YzNlMGQwNDNhMTlkMjRiNiBNZXJnZTogMjZiMGFhMworCisgM2M3M2I0OCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFNhdCBBdWcKKyAxMyAxODo0MjowNSAyMDExICswMjAwCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOiBSZXZlcnQgdGhlIHR3byBtb3N0IHJlY2VudAorCisgU05NUF9GUkVFKCkgY2hhbmdlcyAoY29tbWl0cworIDQ3YzhlZjFiODljNmNjYjQyNDdkOTYzMzQ3NzkyNTkwOGM2OGMxYTUgYW5kCisgN2Y0MmQwZDkzMzIwNDg0MTUyMjcxNDI3Y2M5ODA4Y2JkYTQ5YmJkMCkuCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDI2YjBhYTMwMTBmYTE4MmI2MDM5YThjMmNhZDhjY2I0NTcxNjUyZGUgTWVyZ2U6IDJmM2Q2MDcKKworIDBjOGUxYTkgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTYXQgQXVnCisgMTMgMTE6NDM6MjAgMjAxMSArMDIwMAorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAzZTUwYzNlMDBlOWYzMjFmYjcwOGJjNTc5ZWI0ZGMxYTBmMWU3YzRkIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFNhdCBBdWcgMTMgMTE6MzE6NDAgMjAxMSArMDIwMAorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAyZjNkNjA3OWRjMzZhYWQ5NTU5ZDkxYzVjMzI0ZTJjZTUzNTU3M2RkIE1lcmdlOiBlMzJhYTk3CisKKyBmZjE3MzRkIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU2F0IEF1ZworIDEzIDA5OjA4OjA2IDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZTE0N2U0Yjk2NzU1MjA3ZGUxY2UzMDk5MGQ2N2I0YjdjNzZkZDQ4MyBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTYXQgQXVnIDEzIDA4OjM5OjE0IDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogd2luMzIvYnVpbGQucGw6IENIQU5HRVM6IFdpbmRvd3M6IGJ1aWxkaW5nIChidWlsZC5iYXQpOiBJbnN0YWxsCisKKyBuZXRzbm1wLmRsbCBiZWZvcmUgcnVubmluZyB0aGUgUGVybCByZWdyZXNzaW9uIHRlc3RzIHN1Y2ggdGhhdCB0aGUKKyByZWdyZXNzaW9uIHRlc3RzIGFyZSBydW4gd2l0aCB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIG5ldHNubXAuZGxsLgorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB3aW4zMi9NYWtlZmlsZS5pbjogQ0hBTkdFUzogV2luZG93czogcGVybCAoYnVpbGQuYmF0KTogV2hlbgorCisgaW5zdGFsbGluZyBkZXZlbG9wbWVudCBmaWxlcywgaW5zdGFsbCB0aGUgUERCIGZpbGVzIHRvby4KKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIHBlcmwvU05NUC90L2FzeW5jLnQsIHBlcmwvU05NUC90L2NvbmYudCwgcGVybC9TTk1QL3QvbWliLnQsIAorICAgICAgcGVybC9hZ2VudC90ZXN0LnBsOiBDSEFOR0VTOiB0ZXN0aW5nOiBGaXggUGVybCByZWdyZXNzaW9uIHRlc3QKKworIGZhaWx1cmVzIEFsbCBQZXJsIHJlZ3Jlc3Npb24gdGVzdHMgcGFzcyBub3cgb24gTGludXggYW5kIG9uIFdpbmRvd3MgKE1TVkMpLgorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBwZXJsL1NOTVAvdC9hc3luYy50LCBwZXJsL1NOTVAvdC9idWxrd2Fsay50OiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgUGVybCByZWdyZXNzaW9uIHRlc3RzOiBEb24ndCBmYWlsIHNraXBwZWQgdGVzdHMuCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1NOTVAvU05NUC54czogQ0hBTkdFUzogcGVybDogQWRkCisKKyBTTk1QOjpnZXRlbnYoKSBhbmQgU05NUDo6c2V0ZW52KCkuCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6IENIQU5HRVM6CisKKyBzbm1wbGliOiBBZGQgbmV0c25tcF9zZXRlbnYoKS4KKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogbG9jYWwvcGFzc19wZXJzaXN0dGVzdDogbG9jYWwvcGFzc19wZXJzaXN0dGVzdDogZG9jdW1lbnQgaG93IHRvCisKKyB1c2Ugb24gV2luZG93cworCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0OiBTZXQgZXhlY3V0ZSBmbGFnIG9uIGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3QKKworIHN1Y2ggdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoYXQgZmlsZSB3b3JrCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEZpeCBhIHN1cHByZXNzaW9uIHBhdHRlcm4KKworCisyMDExLTA4LTEyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBlMzJhYTk3NzQyMjMyY2VkM2E3MmY4Yjg0NWFjZTVjZTNkNTNiOGRmIE1lcmdlOiA0YWRmZWM4CisKKyA4NmZiZDMzIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgRnJpIEF1ZyAxMiAwOToxMToxNCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMTIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGE3M2ViNDBlYzI2M2EwZmRmNTNhNzRlNzIwZGRmNDFjNGE3ZWUzZDQgTWVyZ2U6IDc2OTA4OTQKKworIDI5NDBlZTMgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBGcmkgQXVnIDEyIDA5OjExOjEzIDIwMTEgLTA3MDAKKworMjAxMS0wOC0xMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMWYwYTkyOGEyOTEzY2ZhN2Y1Y2VhYWY0Njk2YzY5ZmJkYzY4NzYyMSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBGcmkgQXVnIDEyCisgMDk6MDk6MTEgMjAxMSAtMDcwMAorCisyMDExLTA4LTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA0YWRmZWM4MTIxNmY2YzViZjI1YzlhYzZiMmI3NDc4ZDFiZThlODQyIE1lcmdlOiAyODFiODY5CisKKyAyOTQwZWUzIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDExIDE4OjU3OjI5IDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMWUxMDAwYTg4MTU5MjFiNWVjMmU3OTk3YjUzNTkyYTU0NGIzZGZjMiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnIDExIDE1OjQ2OjMyIDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMjgxYjg2OTYxYjEwMjY2ZGRmMzg4Mzk0MmQ0ZGMzYjZiOThkMzIyNyBNZXJnZTogZDhkMjI1YworCisgZjE4MTA5OSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyAxMSAxODo0NjowNiAyMDExICswMjAwCisKKzIwMTEtMDgtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogTWVyZ2UgVjUtNC1wYXRjaGVzLgorCisKKzIwMTEtMDgtMTAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYzogZG9uJ3QgYXNzZXJ0IG9uIGEgZG91YmxlCisKKyBpbml0OyBqdXN0IGRvbid0IGRvIGl0IHR3aWNlCisKKzIwMTEtMDgtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGQ4ZDIyNWNhMzRhOGYyMjc1MjE1M2FjYjc5NDRmOTQzNWY1NjRkMmMgTWVyZ2U6IDA2YjQxODYKKworIDQ3YzhlZjEgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBXZWQgQXVnCisgMTAgMTg6MDU6MjEgMjAxMSArMDIwMAorCisyMDExLTA4LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDogU05NUF9GUkVFKCk6IGNhc3QgYXJndW1lbnQgdG8KKworICh2b2lkICopIGJlZm9yZSBwYXNzaW5nIGl0IHRvIG5ldHNubXBfZnJlZSgpCisKKzIwMTEtMDgtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDA2YjQxODY1ZWMzMDJjMzkzMWIxMDgzZDNmZGU4OWY5MzQ1ZWMwNmYgTWVyZ2U6IDExNDI2ZmIKKworIGE0ZjZhYzcgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDkgMDY6NDQ6NDEgMjAxMSAtMDcwMAorCisyMDExLTA4LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAxMTQyNmZiM2M2ZjMyNzgyMGI5YmI4NmE3NmVjYzllMmMzN2U3OTM0IE1lcmdlOiAwMzQ0ZGY5CisKKyA5YmYwNjgxIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyA5IDA2OjQ0OjExIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgOWJmMDY4MTIxOGVkZjQzY2RiNWZjNjhmMTcyMTIzYmM0YTJkMDE4OCBNZXJnZTogZjlkYjYxMQorCisgY2NiMGViNiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBBdWcKKyA5IDA4OjE5OjMzIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZGU3ZTM0OGVjZTAzZDIzODBjMmE4ODA2ZWJiYWQ1ZDliNTQ4NzY4MiBNZXJnZTogZDUzOGJjYgorCisgY2NiMGViNiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBBdWcKKyA5IDA4OjA3OjIyIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMDIyMDM5MmQ4OTlhOWNhYjcwMWY3NGFmMTIwMzBiYjFkNGNjNWUyZSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsIDEgMTM6MDI6MTUgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTLCBORVdTOiB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEucHJlMQorCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xLnByZTEKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBmaXggQysrIGNvbW1lbnRzCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogZml4IEMrKyBjb21tZW50cworCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IGZpeCBDKysgY29tbWVudHMKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBmaXggQysrIGNvbW1lbnRzCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwKKyAgICAgICBwZXJsL09JRC9PSUQucG0sIHBlcmwvU05NUC9TTk1QLnBtLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG06IFZlcnNpb24gbnVtYmVyIHVwZGF0ZToKKworIDUuNy4xLnByZTEKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUudG9wOiB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEucHJlMQorCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGNmNGNjZTRjMTg5Y2Y0N2Y0YzQ4OWRiNDNiN2ZhNTEwZjg5MDZhMWEgTWVyZ2U6IGRmOTFhOWYKKworIDkzZTk3ZGMgQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgTW9uCisgQXVnIDggMjI6MTU6MjggMjAxMSArMDEwMAorCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNi1wYXRjaGVzJyBpbnRvCisKKyBWNS02LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiAgd2luMzIvTWFrZWZpbGUtYXBwcy5pbiwgd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCAKKyAgICAgIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCB3aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46IERlZmluZQorCisgX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiB0b2tlbiAoYXMgcGVyIEFsZXgnIGJ1aWxkCisgaW5zdHJ1Y3Rpb25zKQorCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogIHdpbjMyL01ha2VmaWxlLWFwcHMuaW4sIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjogRGVmaW5lCisKKyBfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIHRva2VuIChhcyBwZXIgQWxleCcgYnVpbGQKKyBpbnN0cnVjdGlvbnMpCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGRmMTZkYzIyMjFlOTkzZGQzYzY2NjUwZDVlODcyNTc3ZmZlNmMwMWIgTWVyZ2U6IDcxNGJjODIKKworIDhlNWEyOGQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTM6NTY6NDMgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmZmEwNWIwNTFhYzNlMmIxOTcxOTVhOTk4OWNjN2E5MWZlOGQ5MjgyIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBBdWcgOCAxMzo1NTozOAorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogY29tbWl0IDcxNGJjODJmYTAxZTIxYTM2NTU4MjQ5NjNmYTU0ZTliODA0MmZmYjAgTWVyZ2U6IDZmZThmZTUKKworIDNlZjFkYjUgQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgTW9uCisgQXVnIDggMjE6MjE6NDYgMjAxMSArMDEwMAorCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBjb21taXQgYjQ1MTYwN2RjYTAxNWMxMTFlOTZmZGZlYjJkZGIwNjYxZmI0ZjcyNCBBdXRob3I6IERhdmUKKworIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgTW9uIEF1ZyA4IDIxOjIwOjMyIDIwMTEKKyArMDEwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA2ZmU4ZmU1Mjk0YTQ1YmM3ZTRlYTM3NTFhMWFkN2FhNDdiNWNhYmIyIE1lcmdlOiAzNjRmOGZmCisKKyBmNjlhYmUzIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZworIDggMjI6MDI6MzggMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBjOTQ4MTMwNDRhNGM0YTYwOGU5OGU4MDIyMzA3NWM2ZmFmMDRlZTExIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcgOCAyMTo1NjoxNSAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDM2NGY4ZmZhZWI5MGI0ZWIwMTY1ZmM4NTU2ODhjZDA2MjY2MzI3OTQgTWVyZ2U6IDMyODcyOTUKKworIDdhYmI5MjYgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTE6MjQ6MjYgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS02LXBhdGNoZXMnIGludG8KKworIFY1LTYtcGF0Y2hlcworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGRpc3BsYXkgdGhlIGJyYW5jaCB3ZSdsbCBjb21taXQgdG8KKworCisyMDExLTA4LTA4ICBWbGFkaW1pciBLb25kcmF0aWV2IDx3dWxmMjAwMUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzM4NjYzMzoKKworIGZyb20gd3VsZjIwMDE6IGZpeCBpbnRlZ2VyIG92ZXJmbG93IGluIGRpc2sgcGVyY2VudCBjYWxjdWxhdGlvbnMgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDg0YTc3NWQwNTU3ZmVhOTc1NzBlNDE3MTVhMzE2NDk3MGI0YzAzYTIgTWVyZ2U6IDZmZmYxYzEKKworIGQzNzNjNGYgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnCisgOCAyMDoxMjozMiAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzg3MTM5OiBmcm9tCisKKyB5YWJlcmF1bmV5YTogQXZvaWQgc2VnZmF1bHQgaWYgdHJhcHNlc3MgdHJhbnNwb3J0IGVsZW1lbnQgY2FudCBiZQorIHBhcnNlZCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBuc3NmcGF0Y2hhcHBseTogc3BsaXQgdGhlCisKKyBkaXNwbGF5ZWQgZ2l0IGNvbW1pdCBjb21tYW5kIGludG8gbXVsdGlwbGUgc2VnbWVudHMKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMzODY5NjE6CisKKyBNYWtlIFNOTVAgR0VUIHdvcmsgaW4gYW4gQWdlbnRYIHN1YmFnZW50IGlmIHdyaXRlIHN1cHBvcnQgaXMKKyBkaXNhYmxlZCB2aWEgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIChNYXJrIFJ1c2spLgorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL21pYi5jOiBDSEFOR0VTOiBzbm1wbGliOiBGaXggYSBjcmFzaCB0aGF0IGNvdWxkIGJlCisKKyB0cmlnZ2VyZWQgYnkgY2FsbGluZyBfbWliaW5kZXhfYWRkKCkgd2l0aCB0aGUgc2Vjb25kIGFyZ3VtZW50IG5vdAorIGVxdWFsIHRvIC0xLgorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA2ZmZmMWMxYWU1MWIwNmM5ZDgwZmFmMTUzNzNhOTYzZDE3M2YxNGU4IE1lcmdlOiA4MzdjNTJlCisKKyA4Y2M5MDA0IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDEwOjU4OjU5IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgOGNhN2ZmMWU2OTJjYWVjNDE4NmI3ODhjOWFlMmQyN2JlMjEzMjkwZiBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gQXVnIDggMTA6MzM6NTYKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGI4ZjUyOWNiYTI3YzAxMTRiNGNiNzM0MGNmZDQ0OTUwNGZhMDc1MDYgTWVyZ2U6IDA4MjJmMmQKKworIDU1NmU5MzggQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTA6MDU6MzYgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGZpeCBmdW5jdGlvbiBuYW1lIHR5cG8KKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyOTg4MmEwNzhhOTU5YTBmNzhiMDNlMDE5NjhmMWQxN2I3ZjZhMjk5IE1lcmdlOiA1ZTliZDJmCisKKyAwNDA5YzBhIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDEwOjAzOjM0IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBtYW51YWwgbWVyZ2Ugb2YgcHVsbC9wdXNoCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBtYWtlIG5zcHVsbC9uc3B1c2ggY2hlY2sgZm9yIGEKKworIGNsZWFuIHJlcG8KKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBuZXcgZnVuY3Rpb24gIm5zbWFrZWFsbCIgdG8gdGVzdAorCisgYnVpbGRpbmcgb24gZXZlcnkgYnJhbmNoCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZGVmYXVsdCB0byBtZXJnZQorCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTctcGF0Y2hlcycgaW50bworCisgVjUtNy1wYXRjaGVzCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOiBDSEFOR0VTOiBXaW5kb3dzOiBBdm9pZCB0aGF0IGlmCisKKyB0aGUgTmV0LVNOTVAgUGVybCBtb2R1bGVzIGhhdmUgYmVlbiBidWlsdCB3aXRoIGFub3RoZXIgdmVyc2lvbiBvZgorIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIHRoYW4gQWN0aXZlUGVybCB0aGF0IHVzaW5nIG9uZSBvZiB0aGVzZSBQZXJsCisgbW9kdWxlcyB0cmlnZ2VycyBhICJGcmVlIHRvIHdyb25nIHBvb2wiIGNyYXNoLiBUaGlzIHJlZ3Jlc3Npb24gd2FzCisgY2F1c2VkIGJ5IGNvbW1pdCAzYjE0YzU5Y2Y4Mjc4ZDQxMDIwN2ZmNDJkZWJkYTI2MzY0MjZhNDY4ICh0aGUKKyBuZXRzbm1wX2ZyZWUoKSBpbnRvIFNOTVBfRlJFRSgpIGNoYW5nZXMgaW4gdGhlICoueHMgZmlsZXMpLgorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBlMTA5NTM5OTMwNzAzY2IzMDUyZDUyNDFiMThhYzZmYzA2MmZhYWNhIE1lcmdlOiAwYzliNmNiCisKKyBlNDZiMTcwIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZworIDggMTg6MzQ6MTEgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL21pYi5jOiBDSEFOR0VTOiBzbm1wbGliOiBGaXggYSBjcmFzaCB0aGF0IGNvdWxkIGJlCisKKyB0cmlnZ2VyZWQgYnkgY2FsbGluZyBfbWliaW5kZXhfYWRkKCkgd2l0aCB0aGUgc2Vjb25kIGFyZ3VtZW50IG5vdAorIGVxdWFsIHRvIC0xLgorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA3ZjQyZDBkOTMzMjA0ODQxNTIyNzE0MjdjYzk4MDhjYmRhNDliYmQwIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcgOCAwOTo1MDo1MSAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDBjOWI2Y2JlOWRiZTJlYzUyMTdhOTViNjc4MWZkN2RjMWY2ZWJkYTcgTWVyZ2U6IGZhNmNlZjUKKworIDk2MzMyMGYgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnCisgOCAxODoxNDozNiAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGEzYjg2NTRhMjMyYzU2M2JjOTdjYzk5MjVjZDk4NTkwYTMwYzViYzUgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZyA4IDE3OjI0OjE4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZmE2Y2VmNWNhOTFkZjNhMGIwMzQ1NWI2ODU1OWQyYmVlMjQ4MTAxYyBNZXJnZTogZjVmZTUzNgorCisgOGFkZDBkYSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFN1biBBdWcKKyA3IDEwOjE4OjU0IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYTBkZDNjYWYyNTkyNmU0MzQ2NTcxOGJmNDE3YTQ2NGMyZmIzNjM2NiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTdW4gQXVnIDcgMTA6MTc6MDEgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiAzMiBpcyB0b28gbGltaXRlZCBmb3IKKworIGJpZ2dlciB0YWJsZXM7IGluY3JlYXNlIHRoZSBtYXggbXNnIGNvdW50IHRvIDEyOAorCisyMDExLTA4LTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG1ha2Ugcm9sbHVwIGFuZCBzeW5jIHN1cHBvcnQKKworIC0tcmViYXNlIGFuZCBjaGFuZ2UgdGhlIGRlZmF1bHQgYmFjayB0byBtZXJnZQorCisyMDExLTA4LTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBSRUFETUUud2luMzI6IENIQU5HRVM6IFdpbjMyOiBEb2N1bWVudGVkIGhvdyB0byB1c2UgYnVpbGQuYmF0IHdpdGgKKworIE9wZW5TU0wgZW5hYmxlZAorCisyMDExLTA3LTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBSRUFETUUud2luMzI6IENIQU5HRVM6IFdpbmRvd3M6IFJlbW92ZSBvdXRkYXRlZCBpbnN0cnVjdGlvbnMgYWJvdXQKKworIGVkaXRpbmcgd2luMzJcbGlic25tcF9kbGxcbGlic25tcC5kZWYgZnJvbSBSRUFETUUud2luMzIKKworMjAxMS0wNy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogUkVBRE1FLndpbjMyOiBDSEFOR0VTOiBXaW4zMjogRG9jdW1lbnQgaG93IHRvIGJ1aWxkIDY0LWJpdAorCisgZXhlY3V0YWJsZXMgZm9yIHRoZSB4NjQvYW1kNjQgYXJjaGl0ZWN0dXJlCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGY1ZmU1MzZlOGZkNmM0OGZlMjQzZGVjZDMxZmFjOWNmMWM5MmY0Y2MgTWVyZ2U6IDc4NTBlYTEKKworIDgwOTI4YTggQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnCisgNSAxNToxMzoyNyAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDgwOTI4YTg5MDljZmFiMzdmMDFiMzlhMDcxYTNlOGFkODU5NTYyMjIgTWVyZ2U6IGYxNmEwOTQKKworIDBkYmM4NjkgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnCisgNSAxMzo1NzozMCAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDBkYmM4NjlmZWMwN2Q4ZTkwZGJkMWM5NTQ5M2VlN2NiYzYyM2M5NWMgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZyA1IDEyOjQwOjMxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogQWRkCisKKyBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5kZWYgYW5kIHBlcmwvU05NUC90CisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDg2YzFlMmI5Njc5ZmVjMmNkNzk5YmE3NjAwNWMzZDYwZTlkNDc2MzQgTWVyZ2U6IGJjZDg2MzUKKworIGYxNmEwOTQgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnCisgNSAxMjoyMDo1MCAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDJmOGQ0ZjU3OTZjYmMxYzdlOTY3YWNkYWE4MDE5YjI0ZjE1MjBhMzYgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZyA1IDEyOjAyOjUxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBVbmJyZWFrIHRoZSBWNS00LXBhdGNoZXMgLSByZXZlcnQgY29tbWl0CisKKyBkMmM0NzY4YmQyZWZiNDg2NjQ0MzRhODMxNDI1YzJkZGE4NWQ3MTMzIChDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSAorIDMzNjIyMzM6IGZyb20geWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlCisgbm9pc2UpLgorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oOiAKKworIFVuYnJlYWsgdGhlIFY1LTQtcGF0Y2hlcyBicmFuY2ggLSB3YXMgYnJva2VuIGJ5IGNvbW1pdAorIGJmNzE3OGIwYjIyNTg3ZDQzZDFhODBjMjY5Y2QyMTZiZDU5MzAyMTQgKGFnZW50OiBjaGFuZ2UgdHlwZSBvZgorIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgdG8gbG9uZykKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaDogVW5icmVhayB0aGUgVjUtNC1wYXRjaGVzCisKKyBicmFuY2ggLSB3YXMgYnJva2VuIGJ5IGNvbW1pdAorIDBlNjg0MmZlMDgwY2VjODUzYjA4Y2QyMzIzMDE1YWJhYmMzODFjZTEgKENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0gKKyAzMzgzNDQxOiBmcm9tIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YKKyBmcmVlZCBtZW1vcnkpLgorCisyMDExLTA4LTA1ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBORVdTOiBtaW5vciBORVdTIHBvbGlzaAorCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGJjZDg2MzUwNzEzODIyOTYzZDM3NmVmZjU4MmE5MmY0M2U0MjZkNmMgTWVyZ2U6IDljODEwYTMKKworIDdhMjBmNzEgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnCisgNSAxMDoyODo1NSAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDNhYTk0OWZiZGZjMWE5NGE4MzQwYWQ4YmFmOGIzMTQ3NTZhMGJiOWQgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZyA1IDEwOjI2OjE1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgOWM4MTBhM2IzN2I2ODU3M2M0MDMzN2UyNDZlMmZhZjI5OWI3N2QzMSBNZXJnZTogNzFjYjJlOAorCisgNjEwZDYzZiBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAxMDo0MjowOCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDk0MzkzMGUxZTEyNDM4NWZkOTQ3MzhiNmRjZGEzN2QyOWRjN2FjN2YgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVGh1IEF1ZyA0IDEwOjQxOjQxCisgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0ZWRjYjg4ZGFlOGIyZTU5ZGM2ODNlODBkNDE0ZmE3ZWNlYzM2ODg1IE1lcmdlOiA2NWYzZWVmCisKKyAyZGQ5ZWQwIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDEwOjI0OjExIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNS1wYXRjaGVzJyBpbnRvCisKKyBWNS01LXBhdGNoZXMKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYmM1Y2EwM2EwNGFiMTljNjM0YTM0ZDA2MGIwYjE2Yjc0ODRjYjUyMCBNZXJnZTogODhmZGRiNworCisgOTBjMGU3NSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyA0IDE5OjEzOjA3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXB1c20uYzogc25tcHVzbTogRml4IHJlY2VudGx5CisKKyBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTEtMDgtMDQgIFN0dWFydCBIZW5kZXJzb24gPHQwancyZnUwa21nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X25ldGJzZC5jOiBDSEFOR0VTOiBvcGVuYnNkOgorCisgUEFUQ0ggMzM1NzkzMjogZnJvbSB0MGp3MmZ1MGttZzogQ2xlYW5pbmcgaW4gbWVtb3J5X25ldGJzZC5jIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBWbGFkaW1pciBLb25kcmF0aWV2IDx3dWxmMjAwMUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYzogQ0hBTkdFUzogYWdlbnQ6CisKKyBQQVRDSCAzMzg2MTQ3OiBmcm9tIHd1bGYyMDAxOiBmaXggVUNELVNOTVAtTUlCOjpkc2tVc2VkIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0NzNkN2U1Y2Q0ZDQxMWJiYTIwZWI4NTM1OWQ4NzI4MDYzMzAxY2JkIE1lcmdlOiBhNGU4YjYyCisKKyA4OGZkZGI3IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA5OjI4OjIyIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjEwMWJiMmQ3YWQ2ZGIwMzhjNzU1YWE5MTkzYzhhY2UwZGJkNGY1OCBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUaHUgQXVnIDQgMDk6Mjg6MDYKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIC5naXRpZ25vcmU6IGlnbm9yZSAqLm9yaWcgYW5kICoucmVqCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBoZWxwIG91dHB1dCBkZXNjcmliZXMgcmViYXNlIHZzCisKKyBtZXJnZSBiZXR0ZXIKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZjEyNmExN2M2YTMwNjM0NTVhNTExOTQwYjAyMzA0N2FiZDliNDhlZSBNZXJnZTogYWQ3NjVmNAorCisgNzdhNDc4NCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwOToyNToxNiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDQ1MmUxNzA3ZjIwOWVjNDVlN2M3ZjJhMzA0MGVmNTk1ZmI5ZDFhZjYgTWVyZ2U6IGRjNzU1YTYKKworIGIzNzJlNWEgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDk6MjU6MDMgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBTdHVhcnQgSGVuZGVyc29uIDx0MGp3MmZ1MGttZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIE1ha2VmaWxlLmluLCBhY2NvbmZpZy5oLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZDQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkNS5oOiBDSEFOR0VTOiBvcGVuYnNkOiBQQVRDSAorICAgICAgMzM1NzkyNzoKKworIGZyb20gdDBqdzJmdTBrbWc6IFJlY29nbmlzZSBvcGVuYnNkNSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBmaXggd2hlcmUgYXJndW1lbnRzIGFyZSBzZXQKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHNwbGl0IG5zc2ZwYXRjaGFwcGx5IGludG8gdHdvCisKKyBwYXJ0czogYXBwbHkgYW5kIGNvbW1pdGluZworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHBhdGNoIHVzaW5nIC1OCisKKworMjAxMS0wOC0wNCAgRGF2aWQgQXJub2xkIDxkamFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vZGVmYXVsdF9zdG9yZS4zLmJvdCwgbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYsIAorICAgICAgbWFuL2ZpeHByb2MuMS5kZWYsIG1hbi9taWIyYy5jb25mLjUuaW4sIG1hbi9uZXQtc25tcC1jb25maWcuMS5kZWYsCisgICAgICAgbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmLCAKKyAgICAgIG1hbi9zbm1wLmNvbmYuNS5kZWYsIG1hbi9zbm1wYnVsa2dldC4xLmRlZiwKKyAgICAgIG1hbi9zbm1wYnVsa3dhbGsuMS5kZWYsICBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXBjb25mLjEuZGVmLAorICAgICAgbWFuL3NubXBkLjguZGVmLCAgbWFuL3NubXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wZC5leGFtcGxlcy41LmRlZiwgCisgICAgICBtYW4vc25tcGRlbHRhLjEuZGVmLCBtYW4vc25tcGRmLjEuZGVmLCBtYW4vc25tcGdldC4xLmRlZiwgCisgICAgICBtYW4vc25tcGdldG5leHQuMS5kZWYsIG1hbi9zbm1wbmV0c3RhdC4xLmRlZiwgbWFuL3NubXBzZXQuMS5kZWYsIAorICAgICAgbWFuL3NubXBzdGF0dXMuMS5kZWYsIG1hbi9zbm1wdGFibGUuMS5kZWYsIG1hbi9zbm1wdGVzdC4xLmRlZiwgCisgICAgICBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgbWFuL3NubXB0cmFwLjEuZGVmLCBtYW4vc25tcHRyYXBkLjguZGVmLCAKKyAgICAgIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZiwgbWFuL3NubXB1c20uMS5kZWYsIG1hbi9zbm1wdmFjbS4xLmRlZiwgCisgICAgICBtYW4vc25tcHdhbGsuMS5kZWY6IENIQU5HRVM6IG1hbjogUEFUQ0ggMzMxMjg2MTogZnJvbSBkamE6IE1hbgorICAgICAgcGFnZXMKKworIGh5cGhlbi12cy1taW51cyBjbGVhbnVwIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRGV0ZWN0IChhbmQgcmVqZWN0KSBPcGVuU1NMCisKKyAxLjAuMAorCisyMDExLTA4LTA0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogQ29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIHNpbGVudAorCisgaW5zdGFsbAorCisyMDExLTA4LTA0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRW5zdXJlIFdpbmRvd3MgcGFja2FnZQorCisgdW5pbnN0YWxscyBjb21wbGV0ZWx5LgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA4MWM2M2ZiNWM1ZTRhYmI5YzI5YWNhODliZjlkNjk0NDEwMDg2ZTk3IE1lcmdlOiA0YTY5MjBhCisKKyBkYzc1NWE2IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA4OjMzOjM0IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOiBhZGRlZCBzcGFjaW5nIHRvIG1hdGNoIHRoZSBsYXRlciBicmFuY2hlcworCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogbWFudWFsIG1lcmdlCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOiByZW1vdmVkIGFjY2lkZW50aWFsbHkgZHVwbGljYXRlZCBjb2RlCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBtYW51YWwgbWVyZ2UKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IG1hbnVhbCBtZXJnZQorCisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzYyMjMzOiBmcm9tCisKKyB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUgbm9pc2UgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfdmFycy5jLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzA4OgorICAgICAgZnJvbQorCisgeWFiZXJhdW5leWE6IEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoIHJlY2VudCBoZWFkZXIKKyBzaHVmZmxpbmcgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWxsb3cgbnNyb2xsdXAgdG8gdGFrZSBhIC0tbWVyZ2UKKworIGZsYWcgZm9yIG1lcmdpbmcgaW5zdGVhZCBvZiByZWJhc2luZworCisyMDExLTA4LTA0ICBTYWNoaW4gU3VyZW5kcmFuIDxzYWNoaW5zdXJlbmRyYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0ggMzM4MzQ0MTogZnJvbQorCisgc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZiBmcmVlZCBtZW1vcnkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUuaW46IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMjg6IGZyb20geWFiZXJhdW5leWE6CisKKyBBZGQgRnJlZUJTRCA5LnggdG8gc3VwcG9ydGVkIE9TZXMgbGlzdCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzNjIyMzM6IGZyb20KKworIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZSBub2lzZSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF92YXJzLmMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMDg6CisgICAgICBmcm9tCisKKyB5YWJlcmF1bmV5YTogRml4IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgOS54IHdpdGggcmVjZW50IGhlYWRlcgorIHNodWZmbGluZyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhbGxvdyBuc3JvbGx1cCB0byB0YWtlIGEgLS1tZXJnZQorCisgZmxhZyBmb3IgbWVyZ2luZyBpbnN0ZWFkIG9mIHJlYmFzaW5nCisKKzIwMTEtMDgtMDQgIFNhY2hpbiBTdXJlbmRyYW4gPHNhY2hpbnN1cmVuZHJhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSCAzMzgzNDQxOiBmcm9tCisKKyBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mIGZyZWVkIG1lbW9yeSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS5pbjogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMyODogZnJvbSB5YWJlcmF1bmV5YToKKworIEFkZCBGcmVlQlNEIDkueCB0byBzdXBwb3J0ZWQgT1NlcyBsaXN0IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM2MjIzMzogZnJvbQorCisgeWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlIG5vaXNlIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX3ZhcnMuYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMwODoKKyAgICAgIGZyb20KKworIHlhYmVyYXVuZXlhOiBGaXggY29tcGlsYXRpb24gb24gRnJlZUJTRCA5Lnggd2l0aCByZWNlbnQgaGVhZGVyCisgc2h1ZmZsaW5nIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFsbG93IG5zcm9sbHVwIHRvIHRha2UgYSAtLW1lcmdlCisKKyBmbGFnIGZvciBtZXJnaW5nIGluc3RlYWQgb2YgcmViYXNpbmcKKworMjAxMS0wOC0wNCAgU2FjaGluIFN1cmVuZHJhbiA8c2FjaGluc3VyZW5kcmFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIIDMzODM0NDE6IGZyb20KKworIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YgZnJlZWQgbWVtb3J5IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM2MjIzMzogZnJvbQorCisgeWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlIG5vaXNlIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFsbG93IG5zcm9sbHVwIHRvIHRha2UgYSAtLW1lcmdlCisKKyBmbGFnIGZvciBtZXJnaW5nIGluc3RlYWQgb2YgcmViYXNpbmcKKworMjAxMS0wOC0wNCAgU2FjaGluIFN1cmVuZHJhbiA8c2FjaGluc3VyZW5kcmFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIIDMzODM0NDE6IGZyb20KKworIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YgZnJlZWQgbWVtb3J5IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCBzbm1wbGliL2tleXRvb2xzLmMsCisgICAgICBzbm1wbGliL3NjYXBpLmM6CisKKyBDSEFOR0VTOiBidWlsZGluZzogUEFUQ0ggMzM4Mzk1MTogZnJvbSB5YWJlcmF1bmV5YTogRml4IC1XdW51c2VkCisgY29tcGlsZSB3YXJuaW5ncyB3aXRoIEZyZWVCU0QvTmV0QlNEIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCBzbm1wbGliL2tleXRvb2xzLmMsCisgICAgICBzbm1wbGliL3NjYXBpLmM6CisKKyBDSEFOR0VTOiBidWlsZGluZzogUEFUQ0ggMzM4Mzk1MTogZnJvbSB5YWJlcmF1bmV5YTogRml4IC1XdW51c2VkCisgY29tcGlsZSB3YXJuaW5ncyB3aXRoIEZyZWVCU0QvTmV0QlNEIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBlODc4YWJiZGIxODA4ZWY4M2UwYTgwNzQ1MzZmYjU0ZTEzMjE5YThiIE1lcmdlOiA0MDNkZTQyCisKKyA4NzhmYmY0IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA3OjU1OjAwIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjUwYWZhMDY4OTJmZDg5N2FjMzFlMzgzNmE3ZmZjOWUyYjRjZjdiOSBNZXJnZTogMmMxNGMxYworCisgM2FmYzVlMCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwNzo1MTozMyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDU3OGNkN2NjZTM1MWFlOGQ5MDRlYzNkODBiZTliYTZkMWQ0OGE3MTIgTWVyZ2U6IDI1OTg4YmUKKworIGYzYmM1NTEgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDc6NTA6NTYgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGF1dG9jb25mCisKKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnM6IENIQU5HRVM6IGJ1aWxkaW5nOiBQQVRDSAorCisgMzM4Mzk0OTogZnJvbSB5YWJlcmF1bmV5YTogRml4IGF1dG9jb25mIHRlc3RzIGZvciBzeXMvbWJ1Zi5oIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHByb21wdCBmb3IgcGF0Y2ggYW5kIGFuIGFyZWEsIGFuZAorCisgdXNlIHRoZSBwcm9wZXIgQ0hBTkdFUyBsaW5lIGZvcm1hdAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IFVzZSBmZXRjaCAtLWFsbCBhbmQgcmViYXNlIGFzCisKKyBzdWdnZXN0ZWQgYnkgQmFydCBmb3Igc3BlZWQgaW1wcm92ZW1lbnRzCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGQ2YTFhODllNmY2NDg5NTFhOWI4MzE5MzJkM2NjMjMwODIxZjJkMzcgTWVyZ2U6IGRjYjcxMmYKKworIDg3MmUwMTMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgNCAxMjowNjoxOCAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDQ0OTY5YjRlNTdjMjcxOTRlNWJkMzU3YmM0NTI3NWZlYjg2OTVkMjIgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bCA4IDIwOjUyOjI1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6IENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IEludm9rZQorCisgU25tcFV0aWxPaWRGcmVlKCkgYmVmb3JlIFNubXBVdGlsT2lkQ3B5KCkuIEl0J3Mgbm90IGNsZWFyIHlldCB3aHkKKyB0aGUgb3JpZ2luYWwgY29kZSBkaWQgbm90IG1ha2Ugc25tcHdhbGsgdHJpZ2dlciBhIG1lbW9yeSBsZWFrLgorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkY2I3MTJmZmM4NmIzMzU4MzAwMGVmNGFlOWE1MWNlZDI1Y2QxNWJmIE1lcmdlOiBlODVjZmE1CisKKyA5ODYyM2VmIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDQgMTE6MzY6MTcgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4YTAxZWM2NDIzZDQwMGM0YTEzY2NhYzY4YTM3OTFkMDIxOGEwODg1IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcgNCAxMToxOToxNyAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGU4NWNmYTU5OWIyM2I3NmQ5NzkxM2M5NmI1ZDcwM2JmZjZiYTQ5NDQgTWVyZ2U6IGIwNTZlZTYKKworIGUyMWVlZjIgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgNCAwODo0NDo0MyAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzogQ0hBTkdFUzogYWdlbnQ6CisKKyBBdm9pZCB0aGF0IGEgTUlCIHdhbGsgb24gdGhlIGhvc3QgcmVzb3VyY2VzIE1JQiB0cmlnZ2VycyBhIGNyYXNoIG9uCisgRmVkb3JhIDE1CisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGIwNTZlZTZlYjUzOTA5YWQwNGYxNmVjMjZkMjY5MGQ3YTA4MzE5MmEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZyA0IDA3OjU5OjA0IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2MKKyAgICAgICBlc3MuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2VzcworICAgICAgIC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCBhZ2VudC9zbm1wX2FnZW50LmMsIAorICAgICAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXB0bHMuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYywgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wX2VudW0uYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi9zbm1wdXNtLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYiwgc25tcGQ6CisKKyBwZXJsOiBFbGltaW5hdGUgZGVhZCB2YXJpYWJsZXMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYWU4ZTNlY2QyZGY0Y2YzNzYyNTk0NGFkZWQxZGZlNDczNWQ0NGVlYSBNZXJnZTogNzMxODdjZQorCisgOTMzNWUxOSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFdlZCBBdWcgMyAxNDozNzozNiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDc5NGY5YTY5ZDdlYjY0MjI2ODIwMGIwYTRiMTk5MTUxZGVmNjZlZDAgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEF1ZyAzIDE0OjM2OjI1CisgMjAxMSAtMDcwMAorCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgY29tbWVudAorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXQgZW5kIG9mIG5zcm9sbHVwIG1lbnRpb24gdGhhdAorCisgbm93IHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJ1biBuc3N5bmMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhIG5ldyBuc3N5bmMoKSBmdW5jdGlvbiBmb3IKKworIHB1c2gvcHVsbGluZyBhY3RpdmUgYnJhbmNoZXMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGNvbW1lbnQKKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF0IGVuZCBvZiBuc3JvbGx1cCBtZW50aW9uIHRoYXQKKworIG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byBydW4gbnNzeW5jCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYSBuZXcgbnNzeW5jKCkgZnVuY3Rpb24gZm9yCisKKyBwdXNoL3B1bGxpbmcgYWN0aXZlIGJyYW5jaGVzCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXQgZW5kIG9mIG5zcm9sbHVwIG1lbnRpb24gdGhhdAorCisgbm93IHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJ1biBuc3N5bmMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhIG5ldyBuc3N5bmMoKSBmdW5jdGlvbiBmb3IKKworIHB1c2gvcHVsbGluZyBhY3RpdmUgYnJhbmNoZXMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGNvbW1lbnQKKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF0IGVuZCBvZiBuc3JvbGx1cCBtZW50aW9uIHRoYXQKKworIG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byBydW4gbnNzeW5jCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYSBuZXcgbnNzeW5jKCkgZnVuY3Rpb24gZm9yCisKKyBwdXNoL3B1bGxpbmcgYWN0aXZlIGJyYW5jaGVzCisKKzIwMTEtMDgtMDMgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oOiBSZWVuYWJsZSBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlCisgICAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IEEgbmV3IGZ1bmN0aW9uOiBuc3NmcGF0Y2hhcHBseQorCisgdGhhdCBhdXRvLXB1bGxzIGdpdCBjb21tYW5kIGxpbmUgaW5mbyBmcm9tIFNGCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpOiBhZGRlZCB2YXJpYWJsZXMgbmFtZXMgdG8KKworIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOiBXb3JkaW5nIGNoYW5nZXMgdG8KKworIGhlbHAgZGVzY3JpYmUgY29udGV4dHMgYmV0dGVyCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtVTY0Lm0yaTogQWRkZWQKKworIHRoZSBtaXNzaW5nIFU2NCBtMmkgZmlsZQorCisyMDExLTA4LTAzICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIuaDogUmVlbmFibGUgSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZQorICAgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBBIG5ldyBmdW5jdGlvbjogbnNzZnBhdGNoYXBwbHkKKworIHRoYXQgYXV0by1wdWxscyBnaXQgY29tbWFuZCBsaW5lIGluZm8gZnJvbSBTRgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaTogYWRkZWQgdmFyaWFibGVzIG5hbWVzIHRvCisKKyB0aGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzogV29yZGluZyBjaGFuZ2VzIHRvCisKKyBoZWxwIGRlc2NyaWJlIGNvbnRleHRzIGJldHRlcgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LVU2NC5tMmk6IEFkZGVkCisKKyB0aGUgbWlzc2luZyBVNjQgbTJpIGZpbGUKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBBIG5ldyBmdW5jdGlvbjogbnNzZnBhdGNoYXBwbHkKKworIHRoYXQgYXV0by1wdWxscyBnaXQgY29tbWFuZCBsaW5lIGluZm8gZnJvbSBTRgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaTogYWRkZWQgdmFyaWFibGVzIG5hbWVzIHRvCisKKyB0aGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzogV29yZGluZyBjaGFuZ2VzIHRvCisKKyBoZWxwIGRlc2NyaWJlIGNvbnRleHRzIGJldHRlcgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LVU2NC5tMmk6IEFkZGVkCisKKyB0aGUgbWlzc2luZyBVNjQgbTJpIGZpbGUKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBBIG5ldyBmdW5jdGlvbjogbnNzZnBhdGNoYXBwbHkKKworIHRoYXQgYXV0by1wdWxscyBnaXQgY29tbWFuZCBsaW5lIGluZm8gZnJvbSBTRgorCisyMDExLTA3LTE4ICBJbHlhIFlhbm9rIDx5YW5va0BlbWNyYWZ0LmNvbT4KKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmM6IGFnZW50OiBjaGFuZ2UKKworIHR5cGUgb2Ygc25tcF9lbmFibGVhdXRoZW50cmFwcyB0byBsb25nIFR5cGUgb2Ygc25tcF9lbmFibGVhdXRoZW50cmFwcyB2YXJpYWJsZSBpcyBjaGFuZ2VkIGZyb20gaW50IHRvIGxvbmcuCisgVGhpcyBmaXhlcyB0aGUgYnVnIHdpdGggd3JpdGluZyB0byBzbm1wRW5hYmxlQXV0aGVuVHJhcHMgaWYgc2VydmVyCisgaXMgY29tcGlsZWQgZm9yIDY0Yml0IChzbm1wc2V0IHJlcG9ydHMgd3JvbmcgbGVuZ3RoKS4gVGhpcyBidWcgd2FzCisgaW50cm9kdWNlZCBhIGxvbmcgdGltZSBhZ28gKGJ5IGZhZWVjZDAgY29tbWl0KS4gIEFjdHVhbGx5IHRoaXMgaXMgYSAnbGVzcyBlZmZvcnQnIHR5cGUgb2YgZml4IGJ1dCBJIHdvbmRlciB3aHkgd2UKKyBuZWVkIGEgbG9uZyB0byBzdG9yZSBhbiBJTlRFR0VSIGluIHRoZSBmaXJzdCBwbGFjZT8gU2lnbmVkLW9mZi1ieTogSWx5YSBZYW5vayA8eWFub2tAZW1jcmFmdC5jb20+IFNpZ25lZC1vZmYtYnk6IFdlcworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpOiBhZGRlZCB2YXJpYWJsZXMgbmFtZXMgdG8KKworIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOiBXb3JkaW5nIGNoYW5nZXMgdG8KKworIGhlbHAgZGVzY3JpYmUgY29udGV4dHMgYmV0dGVyCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtVTY0Lm0yaTogQWRkZWQKKworIHRoZSBtaXNzaW5nIFU2NCBtMmkgZmlsZQorCisyMDExLTA4LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA2YWQ3ZTI4ZmY5ZTVlNGViYzEzNThlZTM5Y2M5Nzk2YTQ0YTFiZWU3IE1lcmdlOiBmMjgzMmUzCisKKyAxZTE1NGNlIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgV2VkIEF1ZworIDMgMTk6MTU6MjQgMjAxMSArMDIwMAorCisyMDExLTA4LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA2MWIxNzhmMWVlODk1MmFhMDNhYTNiMWJhNTFmNGE2NjU1ZTQ3ZjAxIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFdlZCBBdWcgMyAxODowOTo0NyAyMDExICswMjAwCisKKzIwMTEtMDgtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDogV2hpdGVzcGFjZS1vbmx5IGNoYW5nZTogZml4IGluZGVudGF0aW9uCisKKyBvZiBhbiAjaW5jbHVkZSBkaXJlY3RpdmUKKworMjAxMS0wOC0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogcGVybC9OZXRTTk1QLnhzOiBDSEFOR0VTOiBQZXJsOiBSZW1vdmUgZmlsZSBwZXJsL05ldFNOTVAueHMKKworIGJlY2F1c2UgaXQgYnJlYWtzIHRoZSBXaW5kb3dzIGJ1aWxkLiAgVG8gV2VzOiBpZiB5b3UgY2FuIHRlbGwgbWUgaG93IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB5b3Ugb2JzZXJ2ZWQKKyBJJ2xsIHRyeSB0byBmaW5kIGEgcG9ydGFibGUgZml4LiAgVGhpcyByZXZlcnRzIGNvbW1pdCBkNTQ4NzFmNTI5MzY3NWM4MDU4ZWNjZTg4ZmVkNWI2NDZjODM2MzIzICgiQWRkZWQKKyBhIGJvZ3VzIGVtcHR5IC54cyBmaWxlIGZvciBidW5kbGluZyBvbiBuZXdlciBwZXJsIHRoYXQgd2FudHMKKyAic29tZXRoaW5nIiIpLgorCisyMDExLTA4LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwZjQ4OWIxOTlhZGFiNDhiMTYzM2ViY2FmNWZmNWE3YzIyYzRjYjg5IE1lcmdlOiBmNGVhYTAyCisKKyA3MmE1OWJjIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEF1ZworIDIgMTA6MTE6NTMgMjAxMSArMDIwMAorCisyMDExLTA4LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA3ZmNjMGI4MDMyZjhkYTViN2JjMzAwNTlhZjBiYTY1NmVhZTcxMDkxIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcgMSAxNDoxMToyOCAyMDExICswMjAwCisKKzIwMTEtMDgtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jOiBGaXggYSBjb21waWxlciB3YXJuaW5nIGluCisKKworIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCisKKzIwMTEtMDgtMDEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEFkZCBmaWxlIG5hbWVzIGFuZCBwYXR0ZXJucyBmb3Igb3V0cHV0CisKKyBmaWxlcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBXaW5kb3dzIGJ1aWxkCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IFNvcnQgYWxwaGFiZXRpY2FsbHkKKworCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBBZGQgYXBwcy9zc2h0b3NubXAKKworCisyMDExLTA4LTAxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgLmdpdGlnbm9yZSwgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QtYy5pbmMsIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QteHMuaW5jOiBSZW1vdmUgdHdvIGdlbmVyYXRlZCBQZXJsIGZpbGVzLgorCisKKzIwMTEtMDgtMDIgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGY0ZWFhMDJkOWIwNzZhNjdkNzI3MmRlN2VlZjhlOWRmYmYxODliYmYgTWVyZ2U6IDQwMTI1ZDgKKworIGFkYWRjYjkgQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDIgMDA6NTc6NTEgMjAxMSArMDIwMAorCisyMDExLTA4LTAyICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L25zYi1mdW5jdGlvbnM6IHN1cHByZXNzICJvayIgdGVzdCBvdXRwdXQgaW4gbnNiCisKKworMjAxMS0wOC0wMSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDQwMTI1ZDg1MzljZDg5Zjk1MmZiYzI0NTg4YzVlODFlOWNkODIxZmUgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBBdWcgMQorIDEzOjU4OjMzIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNWFjZjBkMmNlYjM5Nzc5NjRlZDM5ZjAwMzA3M2JhNjQxMzhjMmViZCBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBTdW4gSnVsIDMxIDIzOjU3OjQxCisgMjAxMSArMDIwMAorCisyMDExLTA3LTMxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBhNzcyMmE4MWY5Y2I3YWE4NjcwZTdjMjM4NjAxMzYyYTMxMDg3YWNjIE1lcmdlOiAyNDJlMTc5CisKKyBhZTlhYzZjIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU3VuIEp1bAorIDMxIDA5OjExOjQ1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYXBwcy9zc2h0b3NubXAuYzogRml4IGFuIGluY29ycmVjdCBzb3VyY2UgY29kZSBjb21tZW50OiB0aGVyZSBpcworCisgbm8gcmVxdWlyZW1lbnQgaW4gdGhlIEFOU0kgQyBzdGFuZGFyZCB0aGF0IHN0YWNrIHZhcmlhYmxlcyBzaG91bGQgYmUKKyBpbml0aWFsaXplZCB0byB6ZXJvLgorCisyMDExLTA3LTMxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyNDJlMTc5N2IyNjk0YTA2ODk4NTZhZTM2ZDA1ZDM0MTNhYWY4ZDc3IEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFN1biBKdWwgMzEgMDE6NDQ6MDkKKyAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6IENIQU5HRVM6IGJ1aWxkaW5nOiBidWlsZCBmaXggZm9yIHN5c3RlbXMgbGFja2luZworCisgZ2V0YWRkcmluZm8oKSBhbmQgRUFJX0ZBSUwgKGUuZy4gSFAtVVggMTAuMjAvMTEuMDApCisKKzIwMTEtMDctMzAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDE4ZGY3NTlmMTliOTc1YzQ0OWQwMTBiYjBhMTYyMTE5YmI2ODM2MGQgTWVyZ2U6IDU0YTQ0Y2IKKworIDcwNTA3MTggQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTYXQgSnVsCisgMzAgMTY6Mzk6MTMgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4MmQ3M2ZiMTFiZTNhZTMxZjM5YzlkNjE4ZDUzODhkYzliMTAwNmQ3IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwgMjkgMjA6NTE6MjcgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBhdXRvcmVjb25mCisKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogYXV0b3JlY29uZgorCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDEwOWY2Njk0ZDc4OGY0OGViZDlmYzBhMWU5MGM0NWFiYzM3YmVhMjAgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgU2F0IEp1bCAzMCAxNDoyMjoxOQorIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgN2Q4MTAwZWVkNDU5YTFmZjFhMjBjMDY3MzY0ZmE2Y2I0NzQ5MTMwOSBNZXJnZTogMTE2YzI0ZgorCisgOWU0N2FjNCBBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFNhdCBKdWwgMzAgMDA6MjA6MDEgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L25zYi1mdW5jdGlvbnMsIGRpc3QvbnNiLW5pZ2h0bHksIGRpc3QvbnNiLXBhY2thZ2U6IG1pbm9yIG5zYgorCisgZml4ZXMvZW5oYW5jZW1lbnRzIGZyb20gbXkgb2xkIHN2biB0cmVlCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDExNmMyNGYwZjdmYjNmOTliYTY0NjczMGY2MWM1NmQxYWUyM2JhNDEgTWVyZ2U6IDk4MmZiN2YKKworIDRmYzBiOGIgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsCisgMjkgMTE6MzE6MjAgMjAxMSArMDIwMAorCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBjNDgxNzNjMDZhOWVhYWRiZjgxZTZiNDk2MmQ1NWVmMGE1NGRiMjUxIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwgMjkgMTA6Mjc6MzkgMjAxMSArMDIwMAorCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBjb25maWd1cmUsIGx0bWFpbi5zaCwgbTQvbGlidG9vbC5tNDogUmVydW4gYXV0b3JlY29uZgorCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IFNvcnQgYWxwaGFiZXRpY2FsbHkKKworCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBBZGQgYXBwcy9zc2h0b3NubXAKKworCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5jOiBGaXggdHdvIGZpbGVuYW1lcyBpbiBob3N0IG1pYgorCisgc291cmNlIGNvZGUgY29tbWVudHMuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA5ODJmYjdmZDhiYWIyNWM0MzIyYWE2MmM1MDQzNzAzNmNlMjk2ZTNlIE1lcmdlOiAxZWRhNjc1CisKKyAzNDU4MTI4IEF1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBKdWwgMjggMTY6MjQ6MDMgMjAxMSArMDIwMAorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBGaXggcG90ZW50aWFsCisKKyBzaWdzZWd2IHdoZW4gYW4gaWZUYWJsZSBlbnRyeSBpcyByZW1vdmVkIGFzIHJlc3VsdCBvZiBib3RoCisgaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIGFuZCBpbnRlcmZhY2VfZmFkZW91dCBhdCB0aGUgc2FtZSB0aW1lLgorCisyMDExLTA3LTI4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhcHBzL3NzaHRvc25tcC5jOiBNYWtlIGFwcHMvc3NodG9zbm1wLmMgYnVpbGQgYWdhaW4gKHdhcyBicm9rZW4gYnkKKworIGNvbW1pdCA2MTIyNDdjZGYxNGMxZTc0NWMzODRjZWZlMWYzZmRlM2U0NDViMzQ3IHRoYXQgY2hhbmdlZAorIE1TR19OT1NJR05BTCBpbnRvIE5FVFNOTVBfTk9TSUdOQUwpCisKKzIwMTEtMDctMjggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDFlZGE2NzUzYjdmZTdkM2IzZjIxN2MwOTI1NGVjMDJkMGVlMWQwY2UgTWVyZ2U6IGRiOGI4NjAKKworIGEyZjllY2UgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgSnVsCisgMjggMTU6MzI6MjggMjAxMSArMDIwMAorCisyMDExLTA3LTI4ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczE6IAorCisgQ0hBTkdFUzogc25tcGQ6IFJlc3RvcmUgc3RvcmFnZSB0YWJsZXMgb24gTGludXgKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBEb2N1bWVudCBpbnRlcmZhY2VfcmVwbGFjZV9vbGQgb3B0aW9uLgorCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogYWRkZWQgJ2ludGVyZmFjZV9yZXBsYWNlX29sZCcgb3B0aW9uIHRvIHJlbW92ZSBvbGQgZW50cmllcyBpbgorIGlmVGFibGUgd2hlbiBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFscmVhZHkgZXhpc2luZyBvbmUKKyBhcHBlYXJzLiAgRS5nLiByZW1vdmUgb2xkIHBwcDAgaW50ZXJmYWNlIHdoZW4gbmV3IHBwcDAgc2hvd3MgdXAuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogRG9jdW1lbnQgdGhlIGludGVyZmFjZV9mYWRlb3V0IG9wdGlvbi4KKworCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBBbGxvdyBpZlRhYmxlCisKKyBlbnRyaWVzIHRvIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgd2hlbiBhcHByb3ByaWF0ZSBpbnRlcmZhY2UKKyBkaXNhcHBlYXJzIChpLmUuIGludGVyZmFjZV9mYWRlb3V0ID0gMCB3b3JrcyBhcyBleHBlY3RlZCkuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogYWRkZWQgJ2ludGVyZmFjZV9mYWRlb3V0JyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzZXQKKyBsaWZldGltZSBvZiBpZlRhYmxlIGVudHJpZXMgb2YgcmVtb3ZlZCBpbnRlcmZhY2VzLiAgUHJldmlvdXMgbGlmZXRpbWUgd2FzIGhhcmRjb2RlZCA1IG1pbnV0ZXMsIG5vdyBpdCdzIGNvbmZpZ3VyYWJsZS4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGQ2MmEwZWI5MDcwYjRkOGQ5ZmUyYmNmZGI0ZDUzZDM3ZWY4MTRmOWIgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFRodSBKdWwgMjgKKyAxNDo0OTowOCAyMDExICswMjAwCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogYWRkZWQgJ2ludGVyZmFjZV9yZXBsYWNlX29sZCcgb3B0aW9uIHRvIHJlbW92ZSBvbGQgZW50cmllcyBpbgorIGlmVGFibGUgd2hlbiBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFscmVhZHkgZXhpc2luZyBvbmUKKyBhcHBlYXJzLiAgRS5nLiByZW1vdmUgb2xkIHBwcDAgaW50ZXJmYWNlIHdoZW4gbmV3IHBwcDAgc2hvd3MgdXAuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogRG9jdW1lbnQgdGhlIGludGVyZmFjZV9mYWRlb3V0IG9wdGlvbi4KKworCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBBbGxvdyBpZlRhYmxlCisKKyBlbnRyaWVzIHRvIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgd2hlbiBhcHByb3ByaWF0ZSBpbnRlcmZhY2UKKyBkaXNhcHBlYXJzIChpLmUuIGludGVyZmFjZV9mYWRlb3V0ID0gMCB3b3JrcyBhcyBleHBlY3RlZCkuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogYWRkZWQgJ2ludGVyZmFjZV9mYWRlb3V0JyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzZXQKKyBsaWZldGltZSBvZiBpZlRhYmxlIGVudHJpZXMgb2YgcmVtb3ZlZCBpbnRlcmZhY2VzLiAgUHJldmlvdXMgbGlmZXRpbWUgd2FzIGhhcmRjb2RlZCA1IG1pbnV0ZXMsIG5vdyBpdCdzIGNvbmZpZ3VyYWJsZS4KKworMjAxMS0wNy0yOCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFwcHMvc3NodG9zbm1wLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzogQ0hBTkdFUzogYnVpbGRpbmc6IGJ1aWxkCisgICAgICBmaXgKKworIGZvciBzeXN0ZW1zIGxhY2tpbmcgTVNHX0RPTlRXQUlUCisKKzIwMTEtMDctMjcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jOiBDSEFOR0VTOiBzbm1wZDogTWFrZQorCisgVENQLU1JQjo6dGNwQ3VyckVzdGFiIHdvcmsgYWdhaW4uIFdhcyBicm9rZW4gaW4gNS43IGJ5IHRoZQorIGludHJvZHVjdGlvbiBvZiB0aGUgImZlYXR1cmVzIiBmZWF0dXJlLgorCisyMDExLTA3LTI3ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZmI4ODA3NGZiYmMyNjhjN2YwNTA5NDkxNTM1YWVjNWZlY2IwNTY4NCBNZXJnZTogYTc0M2FlNQorCisgMzgyMTI3MyBBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBXZWQgSnVsIDI3IDE0OjQ3OjI1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNyAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDMxZmEwN2NkOWZmZGU0NmQ0MWQyYjU4MzhjM2ZjNGQwMTU0OGJmYjUgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBKdWwgMjcKKyAxNDo0NTo0NyAyMDExICswMjAwCisKKzIwMTEtMDctMjcgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBDSEFOR0VTOiBzbm1wZDogcnVuIHNpZ25hbCBoYW5kbGVycyB3aGVuIHNlbGVjdCgpCisKKyBpcyBpbnRlcnJ1cHRlZC4gIFRoaXMgYmVoYXZpb3IgaXMgaW5kaWNhdGVkIGluIGNvbW1lbnQgb24gbGluZSAxMjQ0LCBidXQgaXQgd2FzIG5vdAorIGFjdHVhbGx5IGRvbmUuCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDJlOTQ2NmQ3ZjU5ZDY1ZDA1MDI3NzczNWU0ZWQ5ZDMwNzE5ZmY3NTIgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bCAyNiAxMzoxMDowNCAyMDExICswMjAwCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDc3MDgyOTY3NjBlYWY1YTgwZDg1NDA3NDZjOWMyNDk4MjZmZDFiZmUgTWVyZ2U6IGVhMTFlNWUKKworIGNkNmUzODIgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsCisgMjYgMTY6MjE6NDEgMjAxMSArMDIwMAorCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6IENsYXJpZnkgYW4gSVB2NiBzb3VyY2UgY29kZSBjb21tZW50CisKKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBtYW4vbmV0c25tcF9oYW5kbGVyLjM6IFNwZWxsaW5nIGZpeDoKKworIGRlZmluZWR5IC0+IGRlZmluZWQKKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zOiBTcGVsbGluZworCisgZml4OiBhbGV2aWF0ZSAtPiBhbGxldmlhdGUKKworMjAxMS0wNy0yNiAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGRkMmM0NzEzMzQ5M2Q1YTAwZGU2YjNjZGJjZmFjN2U5ZDQ0YjZmZmUgTWVyZ2U6IGY5Y2NiYzcKKworIGVhMTFlNWUgQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEp1bCAyNiAxNDoyNToyOCAyMDExICswMjAwCisKKzIwMTEtMDctMjYgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjNWE4NDY0YzQyYTk0YzI1MGVlMmRmYTJhNDczMTA5YTczNDIwM2Q4IEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgSnVsIDI2CisgMTQ6MjQ6NTUgMjAxMSArMDIwMAorCisyMDExLTA3LTI1ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZjljY2JjNzcyNjY2MTM0ZDFkMTc4YjUwNWFmOWRkY2RkOWVkNDI0NCBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEp1bCAyNQorIDE1OjAyOjE1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYjBjMGEzNTVkNWY2MDFhMTFiZTQ5MTRmYmY3MTM3MTZhYmQzMGEyOSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgSnVsIDE5CisgMTg6MzY6MTEgMjAxMSAtMDcwMAorCisyMDExLTA3LTIwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjMTRmYzM4NjE0YmFmMTBkNTE3MTM2ZjA0ODA5MDdiN2YwM2Q4ZDc0IEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBKdWwgMjAKKyAxMzo0NDo1OSAyMDExIC0wNzAwCisKKzIwMTEtMDctMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmM6IHJlbW92ZSBicm9rZW4gd2hpdGVzcGFjZSBsaW5lcyB0aGF0CisKKyBsZWFkcyB0byByZWFkaW5nIGNvbmZ1c2lvbgorCisyMDExLTA3LTIwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBlYmRkMjE2YzA3NGJmNDFjZDNhMDg0YmQxNDY4OWNmMDFjODg3YjMxIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBKdWwgMTkKKyAxODozNjoxMSAyMDExIC0wNzAwCisKKzIwMTEtMDctMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIC5naXRpZ25vcmU6IHVwZGF0ZWQgZ2l0aWdub3JlIHRvIGlnbm9yZSBhIG51bWJlciBvZiBhdXRvLWdlbmVyYXRlZAorCisgZmlsZXMKKworMjAxMS0wNy0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYzogcmVtb3ZlIGJyb2tlbiB3aGl0ZXNwYWNlIGxpbmVzIHRoYXQKKworIGxlYWRzIHRvIHJlYWRpbmcgY29uZnVzaW9uCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGRmNWY3MDA1NWNmOWJlMzNmMDVmYjUwYWJlMmY1YTgxZWFjMDkyYWQgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bCAxOSAxMTowNzoxOSAyMDExICswMjAwCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGY1OTZmMTgyNDJkY2RmZDZjZjQ5Yzg4ZGExZDgzNmMxNmUyNjBjYWMgTWVyZ2U6IDBmMzA5YjQKKworIDcwZGVlNGIgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsCisgMTkgMTE6MzM6MjggMjAxMSArMDIwMAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6CisgICAgICAzMzY5NjgwOgorCisgZnJvbSBJbHlhIFlhbm9rOiBjaGFuZ2Ugc25tcF9lbmFibGVhdXRoZW50cmFwcyBmcm9tIGludCB0byBsb25nIHN1Y2gKKyB0aGF0IG1vZGlmeWluZyB0aGUgY29ycmVzcG9uZGluZyBNSUIgb2JqZWN0IGRvZXMgbm90IG92ZXJ3cml0ZQorIG1lbW9yeSBpbiA2NC1iaXQgYnVpbGRzLgorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMzcwNjQ1OgorCisgZnJvbSBCaWxsIEZlbm5lcjogRml4IEFnZW50WCBzdWJhZ2VudCBmb3VyIGJ5dGUgbGVhaworCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGhhcm5lc3M6IGRvCisKKyBub3QgaW52b2tlIElTUlVOTklORygpIG9uIE1pbkdXLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGhhcm5lc3M6CisKKyBjbGVhbnVwIC0gcmVtb3ZlIGNvZGUgdGhhdCBiZWNhbWUgc3VwZXJmbHVvdXMuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IE1pbkdXOiBEbyBub3QKKworIGFzc3VtZSB0aGF0IGtpbGwuZXhlIHJlcG9ydHMgdmlhIGl0cyBleGl0IHN0YXR1cyB3aGV0aGVyIHRoZQorIHNpZ25hbGxlZCBwcm9jZXNzIHN0aWxsIGV4aXN0cy4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIFJlbW92ZSB0aGUgZnVuY3Rpb24gV0FJVE9SRElFKCkgZnJvbSBzaW1wbGVfZXZhbF90b29scy5zaCBzaW5jZSBpdAorIGlzIG5ldmVyIGludm9rZWQuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBTaW1wbGlmeSBXQUlURk9SKCkgaW4gc2ltcGxlX2V2YWxfdG9vbHMuc2guIFRoZSBjb2RlIHRoYXQgaGFuZGxlZAorIGludm9jYXRpb24gb2YgV0FJVEZPUigpIHdpdGggemVybyBvciBvbmUgYXJndW1lbnRzIGhhcyBiZWVuIGRyb3BwZWQKKyBzaW5jZSBXQUlURk9SKCkgaXMgYWx3YXlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGhhcm5lc3M6CisKKyBtaW5vciBzaW1wbGlmaWNhdGlvbi4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZTogQ0hBTkdFUzoKKworIHRlc3Rpbmc6IFNraXAgdGVzdCA1OSBpZiBTSUdIVVAgaXMgbm90IHN1cHBvcnRlZC4gTWFrZXMgdGVzdCA1OSBwYXNzCisgb24gTWluR1cuCisKKzIwMTEtMDctMDYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IE1pbkdXIGZpeAorCisKKzIwMTEtMDctMDYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgZnJhbWV3b3JrCisKKyByZWZhY3RvcmluZzogSW50cm9kdWNlIFdBSVRGT1JOT1RDT05EKCkuCisKKzIwMTEtMDctMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBNYWtlIFNUT1BQUk9HIHNlbmQgU0lHVEVSTSByZXBlYXRlZGx5LiBUaGlzIGZpeGVzIGEgcmFjZSB3aGVyZQorIFNJR1RFUk0gY291bGQgYmUgc2VudCBiZWZvcmUgdGhlIFNJR1RFUk0gc2lnbmFsIGhhbmRsZXIgd2FzIHNldCB1cCwKKyBlc3BlY2lhbGx5IHdoZW4gcnVubmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBWYWxncmluZC4KKyBDSEFOR0VTOiB0ZXN0aW5nOiBNYWtlIHRoZSBTTk1QX1ZFUkJPU0U9MSBvdXRwdXQgZXZlbiBtb3JlIHZlcmJvc2UuCisKKzIwMTEtMDctMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgaGFybmVzcworCisgcmVmYWN0b3Jpbmc6IGludHJvZHVjZSBFQ0hPU0VORFNJR1RFUk0oKSBhbmQgRUNIT1NFTkRTSUdLSUxMKCkKKworMjAxMS0wNy0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogRml4IGEgYnVnIGluCisKKyB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoIHRoYXQgd2FzIGludHJvZHVjZWQKKyBpbiBjb21taXQgOTM4ZDc1Yy4KKworMjAxMS0wNy0wMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogSWdub3JlICouZXhlIGZpbGVzIGdlbmVyYXRlZCBieSB0aGUgV2luMzIKKworIGJ1aWxkCisKKzIwMTEtMDctMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBUZXN0IG9ubHkgb25jZSBkdXJpbmcgYSB0ZXN0IHdoZXRoZXIgdGhlIHNoZWxsIHN1cHBvcnRzIHN1Yi1zZWNvbmQKKyBzbGVlcGluZyBpbnN0ZWFkIG9mIHJlcGVhdGVkbHkuCisKKzIwMTEtMDctMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjogQ0hBTkdFUzogdGVzdGluZzogQ2hhbmdlZAorCisgZGVmYXVsdCB0aW1lb3V0IGZyb20gMXMgdG8gMTBzIHdoZW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMgYXJlIHJ1bgorIHVuZGVyIFZhbGdyaW5kCisKKzIwMTEtMDctMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBBZnRlciBoYXZpbmcgc2VudCBTSUdURVJNIHRvIHNubXBkIG9yIHNubXB0cmFwZCwgd2FpdCB1bnRpbCB0aGUKKyBwcm9jZXNzIGhhcyBzdG9wcGVkIGJlZm9yZSBzZW5kaW5nIFNJR0tJTEwuIFRoaXMgcmFjZSBjb25kaXRpb24gd2FzCisgaGl0IG1vc3QgZWFzaWx5IHdoZW4gcnVubmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBWYWxncmluZC4KKyBDSEFOR0VTOiB0ZXN0aW5nOiBDaGVjayBQSUQgZmlsZSBleGlzdGVuY2UgYWZ0ZXIgaGF2aW5nIHJlYWQgaXQKKyBpbnN0ZWFkIG9mIGJlZm9yZS4gVGhpcyBmaXhlcyB0aGUgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIFBJRCBmaWxlCisgZGlzYXBwZWFyZWQgYWZ0ZXIgdGhlIGV4aXN0ZW5jZSBjaGVjayBhbmQgYmVmb3JlIGl0IHdhcyByZWFkLgorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRml4IGEgYnVnIGluIGEgZGVidWcgc3RhdGVtZW50CisKKyBpbnRyb2R1Y2VkIGJ5IHBhdGNoIDMzMTAyNTAgLyByMjA0OTQ6IHVzZSAlbGQgdG8gcHJpbnQgYSB2YWx1ZSBvZgorIHR5cGUgb2lkIGluc3RlYWQgb2YgJWQuICBUaGlzIHBhdGNoIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB0byBWNS42IFNWTiBwYXRjaGVzOiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDBmMzA5YjQ5M2MyMWQzYzY5MTQ0ODc1MTRiNDE1NjA3NTRmZmNkZjkgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bCAxOSAwODozNzo1MCAyMDExICswMjAwCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDFiNzQ1NGJjMjgxNTY4NDcwYTEzMDA0NzZkMmVkYjRmNDExZTYwMjkgTWVyZ2U6IDhkOWRjYzgKKworIDY5MGVhN2QgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsCisgMTkgMDg6MzE6MjggMjAxMSArMDIwMAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhcHBzL3NubXB0cmFwZC5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IEFkZCBtaXNzaW5nIG5ld2xpbmUKKworIGNoYXJhY3RlciBpbiBhIGxvZyBtZXNzYWdlCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFwcHMvc25tcHRyYXBkLmM6IENIQU5HRVM6IHNubXB0cmFwZDogSW52b2tlIHNodXRkb3duX3BlcmwoKSB3aGVuCisKKyBzaHV0dGluZyBkb3duCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzogU3BlbGxpbmcgZml4OiBicmFua2V0IC0+IGJyYWNrZXQKKworCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IFJ1biBhdXRvcmVjb25mLgorCisgRml4ZXMgYnVpbGQgYnJlYWthZ2UgY2F1c2VkIGJ5IHBhdGNoCisgZDU4OGVjODUzYmQwNTMxZjIxMmZjYmY1MWI5NjJiOTZjNjgyOGI1OSAoUlBNIDQuOSBzdXBwb3J0KQorCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkNjE3ZDg0ZjgzZmE2OWVkOWZhOWY5OGVmYzRhZmFmODgwZDEyMWYyIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBKdWwgMTQgMTY6NDM6NDcgMjAxMSArMDIwMAorCisyMDExLTA3LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IE1ha2UKKworIG5ldHNubXBfaXB2Nl9mbXRhZGRyKCkgc2hvdyB0aGUgSVB2NiBzY29wZSBJRAorCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogQWRkIHN1cHBvcnQKKyAgICAgIGZvcgorCisgSVB2NiBhZGRyZXNzIHNjb3BlIElECisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogUnVuIGF1dG9yZWNvbmYKKworCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBhNTY3MjFhM2U3NzU0ZTM4OWRhYTdlOGEzZDU3OTI4OTllZGM5ZGUzIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBKdWwgMTQgMTY6MTg6MzIgMjAxMSArMDIwMAorCisyMDExLTA3LTE1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA4NDRkNGNlODY3YmYzYWJlN2I3NTM2YzVkYmZiYTQwMTkzN2E4ZDRhIE1lcmdlOiBlZWQwMTk4CisKKyA2MTAzNmE4IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgRnJpIEp1bCAxNSAxNTozMzoxMCAyMDExIC0wNzAwCisKKzIwMTEtMDctMTUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDg1MWJjZjUzZmNkMTNjZGYwYmE5ZjEyZTVkNjAzZTczZjhiYjk2MTEgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgRnJpIEp1bCAxNQorIDE1OjMyOjQ5IDIwMTEgLTA3MDAKKworMjAxMS0wNy0xNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6IGZpeCBhIHR5cG8KKworCisyMDExLTA3LTEzICBSb2JlcnQgU3RvcnkgPHJzdG9yeUBsb2NhbGhvc3Q+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBzbm1wbGliOiAgdHdlYWsgcGF0Y2ggMzA0NDg4OCB0byByZXN0b3JlCisKKyBwcm9wZXIgbm9uLWVycm9yIHJldHVybiBkdXJpbmcgbWliIGxvYWRpbmcKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBhZGRlZCA1LjcgcGF0Y2hlcyB0byB0aGUgYnJhbmNoIGxpc3QgYW5kIGZpeCB0aGUgcmVsZWFzZSBmaWxlCisKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBhZGRlZCA1LjcgcGF0Y2hlcyB0byB0aGUgYnJhbmNoIGxpc3QKKworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L3JlbGVhc2U6IGEgY29weSBvZiB0aGUgcmVsZWFzZSBmaWxlIGFwcGxpZWQgdG8gdGhlIG9sZGVyCisKKyBicmFuY2hlcworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIDUuNyBwYXRjaGVzCisKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYzQzMTIzMWU4ZjBhMzlkMTk1MGJjNzJjMzJlMzQwMmY5MGZhODAzMCBNZXJnZTogNTZmZWU0MAorCisgYTJhYzI0ZCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBKdWwgMTEgMTk6MzM6MTcgMjAxMSAtMDcwMAorCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgY29weSBvZiB0aGUKKworIHNoZWxsLWZ1bmN0aW9ucyB0byB0aGUgb2xkZXIgYnJhbmNoCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvcmVsZWFzZTogYSBjb3B5IG9mIHRoZSByZWxlYXNlIGZpbGUgYXBwbGllZCB0byB0aGUgb2xkZXIKKworIGJyYW5jaGVzCisKKzIwMTEtMDctMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZm9yIDUuNworCisKKzIwMTEtMDctMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNworCisKKzIwMTEtMDctMDEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOiBSZXZlcnQgImZpeCBkdGxzdWRwCisKKyB0cmFuc3BvcnQgYWRkcmVzcyBmb3JtYXQgZnVuY3Rpb24iIFRoaXMgcmV2ZXJ0cyBjb21taXQgMmFiM2E2ZTZmMmZjYzFmZjNlNWYwZmI1ZGM1ZDA1ZTQ5ODgyMGQ4OS4gICAtIGZvciBzb21lIHJlYXNvbiBJIHNhdyAncmMnIGFuZCBteSBicmFpbiBpbnRlcnByZXRlZCBpdCBhcyAgICAncHJlLXJlbGVhc2UnLiBXaGF0IGNhbiBJIHNheSwgaXQgd2FzIGxhdGUuIDotLworCisyMDExLTA3LTAxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUBsb2NhbGhvc3Q+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzogZml4IGR0bHN1ZHAgdHJhbnNwb3J0CisKKyBhZGRyZXNzIGZvcm1hdCBmdW5jdGlvbiAgLSB1cGRhdGUgaXB2NCBmbXRhZGRyIHRvIGhhbmRsZSBzb2NrYWRkciBhbmQgdG8gY2hlY2sgICAgc2l6ZSBiZWZvcmUgYXNzdW1pbmcgZGF0YSBpcyBhZGRyIHBhaXIgIC0gbW92ZSBkdGxzdWRwIGZ1bmN0aW9ucyB0byBleHRyYWN0IGFkZHIocykgdG8gdGxzYmFzZQorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA1NmZlZTQwMTE4YjIxYTlmNGRjMDJhNmYyNDdmN2RhNmZjNjlhMDA1IE1lcmdlOiBkMzkxOTRiCisKKyA5ZmY0NzE0IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgV2VkIEp1biAyOSAyMzoxODoxMyAyMDExIC0wNzAwCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBmaXggdGFnIHB1c2hpbmcKKworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogZml4IHRhZyBwdXNoaW5nCisKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IG1pc2MgcHVibGljYXRpb24gZml4ZXMgZm91bmQgd2hpbGUKKworIHB1Ymxpc2hpbmcKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LnJjMworCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy5yYzMKKworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogcmVtb3ZlIHVubmVlZGVkIGNvbW1lbnQKKworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogbWlzYyBwdWJsaWNhdGlvbiBmaXhlcyBmb3VuZCB3aGlsZQorCisgcHVibGlzaGluZworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiByYW4gYXV0b2hlYWRlciB0byBhZGQgdGhlCisKKyBtaXNzaW5nIHRlbXBsYXRlIGlmZGVmcworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGZvciA1LjcucmMyCisKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LnJjMgorCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDY0YjZjNjhhODQ5MzBhYjAxZTNlMTQ2YzQ5ZjNhYjUzODJlZmRhM2UgTWVyZ2U6IDEyN2VlYzIKKworIGQzOTE5NGIgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBXZWQgSnVuIDI5IDE3OjEyOjQ2IDIwMTEgLTA3MDAKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZGY5Y2Y5YTFlMjkzZDA1YTI0Nzg2Njk0ZjY4YzA1YTJiZTEzYTliMyBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgSnVuIDI5CisgMTY6MzQ6MTEgMjAxMSAtMDcwMAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogdXNlIGdpdDJjbCB0byBnZW5lcmF0ZSB0aGUgQ2hhbmdlTG9nIGZpbGU7CisKKyBuZWVkcyBtdWNoIG1vcmUgd29yay4KKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHVzZSB0aGUgbmV3IHJ1bi1hdXRvY29uZiBzY3JpcHQKKworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L3J1bi1hdXRvY29uZjogQSBzY3JpcHQgdG8gaW52b2tlIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgdGhlCisKKyBhdXRvY29uZiB0b29sCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiByZW1haW5pbmcgY29tbWFuZCBsaW5lIGNoYW5nZXMgZm9yIHN2biAtPgorCisgZ2l0CisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBtYWtlIHRoZSBicmFuY2ggZWNobyBvdXRwdXQgYW5kIHN2biB1cGRhdGUKKworIGNvbnZlcnRlZCB0byBnaXQgZXF1aXZhbGVudHMKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHB1bGwgdGhlIGJyYW5jaCBpbmZvIGZyb20gZ2l0CisKKworMjAxMS0wNi0yOSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczE6IFR3ZWFrIFJQTSBoYW5kbGluZyB0byB3b3JrIHdpdGgKKyAgICAgIGxpYnJhcnkKKworIHZlcnNpb24gNC45CisKKzIwMTEtMDYtMjkgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBkNTg4ZWM4NTNiZDA1MzFmMjEyZmNiZjUxYjk2MmI5NmM2ODI4YjU5IEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgSnVuIDI5CisgMTY6MDc6MDAgMjAxMSArMDIwMAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L3JlbGVhc2U6IG5vdGVkIHRoYXQgdGhlIG1hc3RlciBicmFuY2ggaXMgaW4gcmMgc3RhdGUKKworCisyMDExLTA2LTI4ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworICAgKiA6IGNvbW1pdCA4YjIzYjRjMTM5MjNiOGNhZjRkNGFlZDMyYTQ1MDkzMzkzNGZmNDYxIE1lcmdlOiAxNTM3ODFkCisKKyA0N2Y1MDQ4IEF1dGhvcjogV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+IERhdGU6ICAgVHVlCisgSnVuIDI4IDEzOjE0OjUyIDIwMTEgLTA3MDAKKworMjAxMS0wNi0yOCAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKyAgICogOiBjb21taXQgYWY4YjIzNTIzNGY3Mjk0NGE2NDlhNzZmMGQzMGNmZjk1YWMyZTg5NSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4gRGF0ZTogICBUdWUgSnVuIDI4IDEzOjExOjE5IDIwMTEKKyAtMDcwMAorCisyMDExLTA2LTI4ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHVzZSBnaXQgbWVyZ2Ugd2l0aCB0aGUgLS1sb2cKKworIG9wdGlvbgorCisyMDExLTA2LTI4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxNTM3ODFkYmZiMmFmYzAwMDNiYTRlNThmZmNjYTUzMDAxZTQ4NmQ2IE1lcmdlOiBiM2U4MGRlCisKKyAzYzVhNDA5IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bgorIDI4IDE5OjQzOjEzIDIwMTEgKzAyMDAKKworMjAxMS0wNi0yOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgOWJjODJlNGNhNDgzN2YwMDA3MmRiYTg2Yjk0OTdhMjcxODY5MDlmOSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVuIDI4IDE5OjEzOjM1IDIwMTEgKzAyMDAKKworMjAxMS0wNi0yOCAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKyAgICogRkFROiBXZSdyZSBub3cgdXNpbmcgZ2l0IQorCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisgICAqIDogY29tbWl0IGIzZTgwZGU5YjA3ZDI4MmZmMTFhZjhiMDZhOTFkNjQyNzlkMzI2MWQgTWVyZ2U6IGM0YWQyNzgKKworIDZhNWU1YTYgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4gRGF0ZTogICBNb24KKyBKdW4gMjcgMjE6MzQ6NTkgMjAxMSAtMDcwMAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworICAgKiA6IGNvbW1pdCAzOGZlODE3N2Q1MzMxMzVhNmNjNjgyNzI0ZjE2YTkxMTEzYmNkN2YzIE1lcmdlOiA3ZDkxN2NmCisKKyBkZDU4YmFmIEF1dGhvcjogV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+IERhdGU6ICAgTW9uCisgSnVuIDI3IDIxOjM0OjU2IDIwMTEgLTA3MDAKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKyAgICogOiBjb21taXQgNWMxNzdmNTE3ZDE2ZjA1NTQ1YjI3OWQxNmYwZTRmZDU2OTZiZTY1MSBNZXJnZTogZjBkNmJmMAorCisgYzJiY2ViYyBBdXRob3I6IFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PiBEYXRlOiAgIE1vbgorIEp1biAyNyAyMTozNDo1NSAyMDExIC0wNzAwCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisgICAqIDogY29tbWl0IDljOTc2OTU3MmViOGMwM2I2OTU1NmMxYzVhYWI5YjRkNTZjNmQxZDMgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEp1biAyNworIDE0OjExOjE0IDIwMTEgKzAwMDAKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGZlYXR1cmUgdG8gbm90IHJvbGwKKworIGJyYW5jaGVzIGN1cnJlbmx5IGluIHJjIHBoYXNlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIG5zcm9sbHVwIGZ1bmN0aW9uIGZvcgorCisgcm9sbGluZyBicmFuY2hlcyB1cHdhcmQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogY3JlYXRlZCBhbiBuc3BhdGNoYXBwbHkgZnVuY3Rpb24KKworIHRvIGFwcGx5IGEgcHJldmlvdXNseSB0ZXN0ZWQgcGF0Y2ggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTMwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgbnN0cnlwYXRjaCBmdW5jdGlvbiB0bworCisgdGVzdCBwYXRjaCBhcHBsaWNhdGlvbiBhZ2FpbnN0IHZhcmlvdXMgYnJhbmNoZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIHZlcmJvc2Ugb3V0cHV0IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTI4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG1vcmUgcHJlZml4IGNoYW5nZXMgYW5kIGJldHRlcgorCisgc2V0dGluZyBvZiBkZWZhdWx0IHZhbHVlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogdXNlIG5zIHByZWZpeGVzIGluc3RlYWQgb2YgZ2VuZXJpYworCisgc25tcCBwcmVmaXhlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IAorCisgTWlzc2luZyBjaGVjayBmb3IgcnBtdHMuaCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTIzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIAorICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsIAorICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogVHdlYWsgUlBNIGhhbmRsaW5nIHRvIHdvcmsKKworIHdpdGggbGlicmFyeSB2ZXJzaW9uIDQuOSBCYXNlZCBvbiBhIHBhdGNoIGJ5IEphbiBTYWZyYW5layBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6IFByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIHJlYWRpbmcKKworIFJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gYSBjYWNoZSBkaXJlY3RvcnkgKHJhdGhlciB0aGFuIHF1ZXJ5aW5nCisgdGhlIFJQTWRiIGRpcmVjdGx5KS4gIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcworIGZ1bmN0aW9uYWxpdHkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNTE2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDUxNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsIAorICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDUxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6IFByb3ZpZGUgYQorCisgZnJhbWV3b3JrIGZvciByZWFkaW5nIFJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gYSBjYWNoZSBkaXJlY3RvcnkKKyAocmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIFJQTWRiIGRpcmVjdGx5KS4gIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcworIGZ1bmN0aW9uYWxpdHkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzogUHJvdmlkZSBhCisKKyBmcmFtZXdvcmsgZm9yIHJlYWRpbmcgUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBhIGNhY2hlIGRpcmVjdG9yeQorIChyYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgUlBNZGIgZGlyZWN0bHkpLiAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCisgZnVuY3Rpb25hbGl0eS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA1MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOiBQcm92aWRlIGEKKworIGZyYW1ld29yayBmb3IgcmVhZGluZyBSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIGEgY2FjaGUgZGlyZWN0b3J5CisgKHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBSUE1kYiBkaXJlY3RseSkuICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKKyBmdW5jdGlvbmFsaXR5LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRm9sbG93LXVwIGZvciByMjA1MTE6IHJlYWxseSB1c2UKKworIHRoZSBwcm9wZXIgZm9ybWF0IHNwZWNpZmljYXRpb24uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRm9sbG93LXVwIGZvciByMjA1MTE6IHJlYWxseSB1c2UKKworIHRoZSBwcm9wZXIgZm9ybWF0IHNwZWNpZmljYXRpb24uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNTEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRml4IGEgYnVnIGluIGEgZGVidWcgc3RhdGVtZW50CisKKyBpbnRyb2R1Y2VkIGJ5IHBhdGNoIDMzMTAyNTAgLyByMjA0OTQ6IHVzZSAlbGQgdG8gcHJpbnQgYSB2YWx1ZSBvZgorIHR5cGUgb2lkIGluc3RlYWQgb2YgJWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRml4IGEgYnVnIGluIGEgZGVidWcgc3RhdGVtZW50CisKKyBpbnRyb2R1Y2VkIGJ5IHBhdGNoIDMzMTAyNTAgLyByMjA0OTQ6IHVzZSAlbGQgdG8gcHJpbnQgYSB2YWx1ZSBvZgorIHR5cGUgb2lkIGluc3RlYWQgb2YgJWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNTExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzogVXNlICVwIHRvIHByaW50IGEgcG9pbnRlciBpbnN0ZWFkCisKKyBvZiAlbGQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUxMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6IFVzZSAlcCB0byBwcmludCBhIHBvaW50ZXIgaW5zdGVhZAorCisgb2YgJWxkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA1MTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVM6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTA4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTEzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTA3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTEzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IHJ1biBjb3JyZWN0IHZlcnNpb24gb2YgYXV0b2NvbmYgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogcmFuIGF1dG9jb25mIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTEwICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYzogSW5jbHVkZSBzdGRsaWIuaCB0byBtYWtlIGRtYWxsb2MgaGFwcHkKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUwMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xMCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlczogRml4IGJ1aWxkIG9mIHNubXB1c20KKworIHdoZW4gYWRkaXRpb25hbCBzZWMgbW9kdWxlcyByZXF1ZXN0ZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTAxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYzogSW5jbHVkZSBzdGTniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLXniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy09YCSkWIuaCB0byBtYWtlIGRtYWxsb2MgaGFwcHkKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTAwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTA5ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOiBDSEFOR0VTOiBCVUc6IDMxNTE4NDU6IGZpeCBtdWx0aXBsZQorCisgcmVnaXN0cmF0aW9ucyBvZiBzbm1wIHRyYW5zcG9ydCBoYW5kbGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0OTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDkgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6IENIQU5HRVM6IEJVRzogMzE1MTg0NTogZml4IG11bHRpcGxlCisKKyByZWdpc3RyYXRpb25zIG9mIHNubXAgdHJhbnNwb3J0IGhhbmRsZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDk5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTA4ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsIHNubXBsaWIvc25tcF9hcGkuYywgCisgICAgICBzbm1wbGliL3N5c3RlbS5jOiBtb3JlIGRuc3NlYyB0d2Vha3MgIC0gY3JlYXRlIGFuIGFwcC1nbG9iYWwKKyAgICAgIHZhbGlkYXRvciBjb250ZXh0IGZvciB1c2Ugd2l0aCBhbGwgICAgdmFsaWRhdGlvbiByb3V0aW5lcy4gbWFpbmx5CisgICAgICB1c2VmdWwgZm9yIGxvbmctbGl2ZWQgYXBwcy4gICAtIHVzZSB0aGUgYXBwdHlwZSBhcyB0aGUgdmFsaWRhdG9yCisgICAgICAnc2NvcGUnLCBhbGxvd2luZyAgICBmb3IgYXBwLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb2YgdmFsaWRhdGlvbgorICAgICAgdmlhIGxpYnZhbCdzICAgIGRuc3ZhbC5jb25mIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDk4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTA3ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaDogYWRkIGEgbWF4IGRlZmluZSBmb3IKKworIGVhY2ggZGVmYXVsdCBzdG9yZSB0eXBlICAgbm90IGFjdHVhbGx5IHVzZWQsIGp1c3QgYSBoZWxwZnVsIHJlbWluZGVyIGZvciB0aG9zZSBhZGRpbmcgICBuZXcgaWRzIHdobyBtaWdodCBub3QgdGhpbmsgdG8gY2hlY2sgTkVUU05NUF9EU19NQVhfU1VCSURTLiAgICAodGhlIGJvb2wgbGlzdCBpcyByYXBpZGx5IGFwcHJvYWNoaW5nIHRoZSBjdXJyZW50IGxpbWl0LikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTA3ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOiBtZW50aW9uIGJ1aWxkZGlyIHdoZW4KKworIGNvbXBsYWluaW5nIGFib3V0IG5vdCBiZWluZyBydW4gZnJvbSBzb3VyY2UgdHJlZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0OTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOiBSZXZlcnRlZCByMjAzNjI6IHRoYXQgcGF0Y2ggbWFrZXMgc2Vuc2Ugb24gdGhlCisKKyB0cnVuayBhbmQgdGhlIDUuNiBicmFuY2ggYnV0IG5vdCBvbiB0aGUgNS41IG5vciBvbiB0aGUgNS40IGJyYW5jaC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0OTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzMxMDI1MDogZnJvbSBmZW5uZXI6IG1pc2MgZml4ZXMgZm9yIGRlYnVnZ2luZworIG91dHB1dCBvZiBhZ2VudHggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ5NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworIENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMzEwMjUwOiBmcm9tIGZlbm5lcjogbWlzYyBmaXhlcyBmb3IgZGVidWdnaW5nCisgb3V0cHV0IG9mIGFnZW50eCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0OTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzMxMDI1MDogZnJvbSBmZW5uZXI6IG1pc2MgZml4ZXMgZm9yIGRlYnVnZ2luZworIG91dHB1dCBvZiBhZ2VudHggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ5NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUywgTkVXUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0OTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBmaXhlZCBhdXRvY29uZiB2ZXJzaW9uIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDkwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDg5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVM6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ4NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ4NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZQorCisgZGVwZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0ODUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6IFJlaW5zdGF0ZSBhbiAidW51c2VkIiBsYWJlbCB0aGF0IGlzIGFjdHVhbGx5CisKKyBzdGlsbCByZXF1aXJlZC4gIChyZWZlcmVuY2VkIGluIGxpbmUgMjcxMCkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ4NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6IEZpeCB0eXBvIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ4MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIAorICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsIAorICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ4MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYXBwcy9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIENIQU5HRVMsIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogZml4IHhtbCBxdW90aW5nIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9wYXJzZS5jOiBmaXggbm9uIGV4aXN0ZW50IG1hbGxvYyBtYWNybyB0byB1c2UgY2FsbG9jCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgsIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzoKKworIHNubXBsaWI6IEFwcGxpZWQgdGhlIGludGVudCBvZiBwYXRjaCAzMDQ0ODg4IHRvIGFsbG93IGFwcGxpY2F0aW9ucworIHRvIHJlYWQgdGhlIGVycm9yIG1lc3NhZ2VzIG9mIGEgTUlCIHBhcnNpbmcgZmFpbHVyZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzogCisKKyBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzA2Njg2MjogZnJvbSBmaGV3OiBmaXggdGhlIGFnZW50IGZvcgorIGNvbXBhcmluZyB1bnNpZ25lZCBsYXJnZSBpbmRleGVzIG9mIHRoZSBkaXNrIGFuZCBleHRlbmQgdGFibGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzogCisKKyBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzA2Njg2MjogZnJvbSBmaGV3OiBmaXggdGhlIGFnZW50IGZvcgorIGNvbXBhcmluZyB1bnNpZ25lZCBsYXJnZSBpbmRleGVzIG9mIHRoZSBkaXNrIGFuZCBleHRlbmQgdGFibGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzogCisKKyBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzA2Njg2MjogZnJvbSBmaGV3OiBmaXggdGhlIGFnZW50IGZvcgorIGNvbXBhcmluZyB1bnNpZ25lZCBsYXJnZSBpbmRleGVzIG9mIHRoZSBkaXNrIGFuZCBleHRlbmQgdGFibGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzogCisKKyBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzA2Njg2MjogZnJvbSBmaGV3OiBmaXggdGhlIGFnZW50IGZvcgorIGNvbXBhcmluZyB1bnNpZ25lZCBsYXJnZSBpbmRleGVzIG9mIHRoZSBkaXNrIGFuZCBleHRlbmQgdGFibGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzogCisKKyBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzA2Njg2MjogZnJvbSBmaGV3OiBmaXggdGhlIGFnZW50IGZvcgorIGNvbXBhcmluZyB1bnNpZ25lZCBsYXJnZSBpbmRleGVzIG9mIHRoZSBkaXNrIGFuZCBleHRlbmQgdGFibGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQgaHJTV1J1blBhdGgKKworIG9mIHN3YXBwZWQtb3V0IHByb2Nlc3NlcyBvbiBMaW51eC4gIGZnZXRzKCkgcmV0dXJucyBOVUxMIGJvdGggd2hlbiAvcHJvYy9QSUQvY21kbGluZSBpcyBlbXB0eSAoPSBzd2FwcGVkCisgb3V0KSBhbmQgd2hlbiB0aGUgcHJvY2VzcyBleGl0ZWQgYWZ0ZXIgZm9wZW4oKSwgc28gY2hlY2sKKyAvcHJvYy9QSUQvc3RhdHVzIGluIGJvdGggY2FzZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQgaHJTV1J1blBhdGgKKworIG9mIHN3YXBwZWQtb3V0IHByb2Nlc3NlcyBvbiBMaW51eC4gIGZnZXRzKCkgcmV0dXJucyBOVUxMIGJvdGggd2hlbiAvcHJvYy9QSUQvY21kbGluZSBpcyBlbXB0eSAoPSBzd2FwcGVkCisgb3V0KSBhbmQgd2hlbiB0aGUgcHJvY2VzcyBleGl0ZWQgYWZ0ZXIgZm9wZW4oKSwgc28gY2hlY2sKKyAvcHJvYy9QSUQvc3RhdHVzIGluIGJvdGggY2FzZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQgaHJTV1J1blBhdGgKKworIG9mIHN3YXBwZWQtb3V0IHByb2Nlc3NlcyBvbiBMaW51eC4gIGZnZXRzKCkgcmV0dXJucyBOVUxMIGJvdGggd2hlbiAvcHJvYy9QSUQvY21kbGluZSBpcyBlbXB0eSAoPSBzd2FwcGVkCisgb3V0KSBhbmQgd2hlbiB0aGUgcHJvY2VzcyBleGl0ZWQgYWZ0ZXIgZm9wZW4oKSwgc28gY2hlY2sKKyAvcHJvYy9QSUQvc3RhdHVzIGluIGJvdGggY2FzZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTMxICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQgaHJTV1J1blBhdGgKKworIG9mIHN3YXBwZWQtb3V0IHByb2Nlc3NlcyBvbiBMaW51eC4gIGZnZXRzKCkgcmV0dXJucyBOVUxMIGJvdGggd2hlbiAvcHJvYy9QSUQvY21kbGluZSBpcyBlbXB0eSAoPSBzd2FwcGVkCisgb3V0KSBhbmQgd2hlbiB0aGUgcHJvY2VzcyBleGl0ZWQgYWZ0ZXIgZm9wZW4oKSwgc28gY2hlY2sKKyAvcHJvYy9QSUQvc3RhdHVzIGluIGJvdGggY2FzZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiB1cCB0aGUgYW50ZSBhbmQgcnVuIG90aGVyIHRlc3Qgc3VpdGVzCisKKyBiZXNpZGVzIGp1c3QgdGhlIGRlZmF1bHQgc2V0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMjk5Mzg0OiBmaXggSU5GT1JNcyBzbworCisgdGhleSByZXRyeSBwcm9iaW5nIGZvciBhbiBlbmdpbmVJRC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6IEFwcGxpZWQgKHJvdWdobHkpIHBhdGNoIDMyOTkzNzAgdG8gYXZvaWQKKworIHJld3JpdGluZyBleGlzdGluZyBhdXRoa2V5L3ByaXZrZXkvZXRjcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jOiBBcHBsaWVkIHRoZSBpbnRlbnQKKyAgICAgIG9mCisKKyBwYXRjaCAzMjk5Mzg2IHdoaWNoIGZpeGVzIGR1cGxpY2F0ZSBlbnRyaWVzIG9uIGEgU0lHSFVQLiAgVG8gYWNoaWV2ZQorIHRoaXMgc29tZSBuZXcgaGVhZGVyX2NvbXBsZXggZnVuY3Rpb25zIG5lZWRlZCB0byBiZSBjcmVhdGVkIHRoYXQKKyBkaWRuJ3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgb2xkZXIgb25lcy4gIFRoZSBub3RpZmljYXRpb24gY29kZQorIG5vdyBjYWxscyB0aGVzZSBuZXdlciBmdW5jdGlvbnMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMyOTkzODQ6IGZpeCBJTkZPUk1zIHNvCisKKyB0aGV5IHJldHJ5IHByb2JpbmcgZm9yIGFuIGVuZ2luZUlELiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzI5OTM4NDogZml4IElORk9STXMgc28KKworIHRoZXkgcmV0cnkgcHJvYmluZyBmb3IgYW4gZW5naW5lSUQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMjk5Mzg0OiBmaXggSU5GT1JNcyBzbworCisgdGhleSByZXRyeSBwcm9iaW5nIGZvciBhbiBlbmdpbmVJRC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMyOTkzODQ6IGZpeCBJTkZPUk1zIHNvCisKKyB0aGV5IHJldHJ5IHByb2JpbmcgZm9yIGFuIGVuZ2luZUlELiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBBcHBsaWVkIChyb3VnaGx5KSBwYXRjaCAzMjk5MzcwIHRvIGF2b2lkCisKKyByZXdyaXRpbmcgZXhpc3RpbmcgYXV0aGtleS9wcml2a2V5L2V0Y3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBBcHBsaWVkIChyb3VnaGx5KSBwYXRjaCAzMjk5MzcwIHRvIGF2b2lkCisKKyByZXdyaXRpbmcgZXhpc3RpbmcgYXV0aGtleS9wcml2a2V5L2V0Y3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBBcHBsaWVkIChyb3VnaGx5KSBwYXRjaCAzMjk5MzcwIHRvIGF2b2lkCisKKyByZXdyaXRpbmcgZXhpc3RpbmcgYXV0aGtleS9wcml2a2V5L2V0Y3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBBcHBsaWVkIChyb3VnaGx5KSBwYXRjaCAzMjk5MzcwIHRvIGF2b2lkCisKKyByZXdyaXRpbmcgZXhpc3RpbmcgYXV0aGtleS9wcml2a2V5L2V0Y3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oLCBwZXJsL01ha2VmaWxlLlBMOgorCisgTkVXUzogc25tcGQ6IHBhdGNoIDMxMzEzOTc6IGZyb20gdGFrZXZvczogaHVnZSBzcGVlZHVwcyBvZiB0aGUKKyBUQ1AvVURQIFRhYmxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHBlcmwvTmV0U05NUC54czogQWRkZWQgYSBib2d1cyBlbXB0eSAueHMgZmlsZSBmb3IgYnVuZGxpbmcgb24KKworIG5ld2VyIHBlcmwgdGhhdCB3YW50cyAic29tZXRoaW5nIiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IHBhdGNoIDMzMDY0NzY6IGZyb20gdGlueXB5cmFtaWRzOiBmaXggbWVtb3J5IGxlYWsgaW4gdGhlCisgc3dydW4gY29udGFpbmVyIGxvYWRpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ1NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogcGF0Y2ggMzMwNjQ3NjogZnJvbSB0aW55cHlyYW1pZHM6IGZpeCBtZW1vcnkgbGVhayBpbiB0aGUKKyBzd3J1biBjb250YWluZXIgbG9hZGluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzogRm9sbG93LXVwIGZvciByMjA0NDk6IHVzZQorCisgTkVUU05NUF9QUklvICJ1IiBmb3IgcHJpbnRpbmcgc3ViaWRzIGluc3RlYWQgb2Ygb25seSBORVRTTk1QX1BSSW8uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDUzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6IEZvbGxvdy11cCBmb3IgcjIwNDQ5OiB1c2UKKworIE5FVFNOTVBfUFJJbyAidSIgZm9yIHByaW50aW5nIHN1YmlkcyBpbnN0ZWFkIG9mIG9ubHkgTkVUU05NUF9QUklvLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDUzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBNaWNyb3NvZnQKKworIFZpc3VhbCBTdHVkaW86IExpbmsgd2l0aCBnZGkzMi5saWIgaWYgT3BlblNTTCBoYXMgYmVlbiBlbmFibGVkCisgYmVjYXVzZSBnZGkzMi5saWIgaXMgYSBkZXBlbmRlbmN5IG9mIE9wZW5TU0wuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDUxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBNaWNyb3NvZnQKKworIFZpc3VhbCBTdHVkaW86IExpbmsgd2l0aCBnZGkzMi5saWIgaWYgT3BlblNTTCBoYXMgYmVlbiBlbmFibGVkCisgYmVjYXVzZSBnZGkzMi5saWIgaXMgYSBkZXBlbmRlbmN5IG9mIE9wZW5TU0wuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDUxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IFdpbjMyOiBNaWNyb3NvZnQKKworIFZpc3VhbCBTdHVkaW86IExpbmsgd2l0aCBnZGkzMi5saWIgaWYgT3BlblNTTCBoYXMgYmVlbiBlbmFibGVkCisgYmVjYXVzZSBnZGkzMi5saWIgaXMgYSBkZXBlbmRlbmN5IG9mIE9wZW5TU0wuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaDogRm9sbG93LXVwIGZvciByMjA0NDg6IHNpbmNlIHRoZQorCisgIm9pZCIgdHlwZWRlZiBoYXMgYmVlbiBjaGFuZ2VkIGJhY2sgZnJvbSB1aW50MzJfdCB0byB1X2xvbmcsIGNoYW5nZQorIE5FVFNOTVBfUFJJbyBmcm9tIE5FVFNOTVBfUFJJMzIgaW50byAibCIuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDUwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmg6IEZvbGxvdy11cCBmb3IgcjIwNDQ4OiBzaW5jZSB0aGUKKworICJvaWQiIHR5cGVkZWYgaGFzIGJlZW4gY2hhbmdlZCBiYWNrIGZyb20gdWludDMyX3QgdG8gdV9sb25nLCBjaGFuZ2UKKyBORVRTTk1QX1BSSW8gZnJvbSBORVRTTk1QX1BSSTMyIGludG8gImwiLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDUwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6IENIQU5HRVM6IHNubXBkOiBVc2UgcHJvcGVyIGZvcm1hdAorCisgc3BlY2lmaWVyIGluIGRlYnVnIHN0YXRlbWVudHMgZm9yIHByaW50aW5nIHZhbHVlcyBvZiB0eXBlICdvaWQnLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ0OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOiBDSEFOR0VTOiBzbm1wZDogVXNlIHByb3BlciBmb3JtYXQKKworIHNwZWNpZmllciBpbiBkZWJ1ZyBzdGF0ZW1lbnRzIGZvciBwcmludGluZyB2YWx1ZXMgb2YgdHlwZSAnb2lkJy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzogQ0hBTkdFUzogc25tcGQ6IFVzZSBwcm9wZXIgZm9ybWF0CisKKyBzcGVjaWZpZXIgaW4gZGVidWcgc3RhdGVtZW50cyBmb3IgcHJpbnRpbmcgdmFsdWVzIG9mIHR5cGUgJ29pZCcuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDQ5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6IENIQU5HRVM6IHNubXBkOiBVc2UgcHJvcGVyIGZvcm1hdAorCisgc3BlY2lmaWVyIGluIGRlYnVnIHN0YXRlbWVudHMgZm9yIHByaW50aW5nIHZhbHVlcyBvZiB0eXBlICdvaWQnLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQ5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmg6IHJldmVydCBPSUQgdHlwZWRlZiB0byB1X2xvbmcgYXMKKworIGFncmVlZCB0byBvbiAtY29kZXJzIGFuZCBpbiB0aGUgYWRtaW4gbWVldGluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDQ4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmg6IHJldmVydCBPSUQgdHlwZWRlZiB0byB1X2xvbmcgYXMKKworIGFncmVlZCB0byBvbiAtY29kZXJzIGFuZCBpbiB0aGUgYWRtaW4gbWVldGluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjQgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3N5c3RlbS5jOiBSZW1lbWJlciB0byByZXR1cm4gaW5mbyBhbHNvIHdpdGhvdXQgRE5TU0VDCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmM6IEFkZGVkIE5VTEwtY2hlY2tzCisKKyBhZnRlciBtYWxsb2MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ0NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmM6IEFkZGVkIE5VTEwtY2hlY2tzCisKKyBhZnRlciBtYWxsb2MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ0NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmM6IEFkZGVkIE5VTEwtY2hlY2tzCisKKyBhZnRlciBtYWxsb2MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ0NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmM6IEFkZGVkIE5VTEwtY2hlY2tzCisKKyBhZnRlciBtYWxsb2MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQ2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzogQ0hBTkdFUzoKKworIGFnZW50OiBCVUc6IDMzMDUxNTc6IEZpeCBpcEFkZHJlc3NQcmVmaXggaGFuZGxpbmcgb2YgSVB2NiBhZGRyZXNzZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6IENIQU5HRVM6CisKKyBhZ2VudDogQlVHOiAzMzA1MTU3OiBGaXggaXBBZGRyZXNzUHJlZml4IGhhbmRsaW5nIG9mIElQdjYgYWRkcmVzc2VzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDMyOTU0MDc6IEZpeAorCisgaGFuZGxpbmcgb2Ygdm9pZCBwb2ludGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDMyOTU0MDc6IEZpeAorCisgaGFuZGxpbmcgb2Ygdm9pZCBwb2ludGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDMyOTU0MDc6IEZpeAorCisgaGFuZGxpbmcgb2Ygdm9pZCBwb2ludGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBDSEFOR0VTOiBweXRob246IEJVRzogMzI5NTQwNzogRml4CisKKyBoYW5kbGluZyBvZiB2b2lkIHBvaW50ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ0NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOgorCisgc25tcGxpYjogQlVHOiAzMjY0ODUyOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKKyAoc25tcHtVbmF2YWlsYWJsZSxVbmtub3dufUNvbnRleHRzLHNubXBVbmtub3duUERVSGFuZGxlcnMpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzoKKworIHNubXBsaWI6IEJVRzogMzI2NDg1MjogUmVjb2duaXNlIG1pc3NpbmcgcmVwb3J0IHR5cGVzCisgKHNubXB7VW5hdmFpbGFibGUsVW5rbm93bn1Db250ZXh0cyxzbm1wVW5rbm93blBEVUhhbmRsZXJzKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6CisKKyBzbm1wbGliOiBCVUc6IDMyNjQ4NTI6IFJlY29nbmlzZSBtaXNzaW5nIHJlcG9ydCB0eXBlcworIChzbm1we1VuYXZhaWxhYmxlLFVua25vd259Q29udGV4dHMsc25tcFVua25vd25QRFVIYW5kbGVycykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOgorCisgc25tcGxpYjogQlVHOiAzMjY0ODUyOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKKyAoc25tcHtVbmF2YWlsYWJsZSxVbmtub3dufUNvbnRleHRzLHNubXBVbmtub3duUERVSGFuZGxlcnMpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOgorCisgc25tcGxpYjogQlVHOiAzMjY0ODUyOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKKyAoc25tcHtVbmF2YWlsYWJsZSxVbmtub3dufUNvbnRleHRzLHNubXBVbmtub3duUERVSGFuZGxlcnMpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywgc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcElQWERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFNTSERvbWFpbi5jLCBzbm1wbGliL3NubXBTVEREb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDMyMzQ3NTQ6IEVuc3VyZQorICAgICAgb2xkCisKKyBmX2NyZWF0ZV9mcm9tX3RzdHJpbmcgaG9vayBpcyBpbml0aWFsaXplZCB0byBOVUxMIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTVEREb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogQlVHOgorICAgICAgMzIzNDc1NDoKKworIEVuc3VyZSBvbGQgZl9jcmVhdGVfZnJvbV90c3RyaW5nIGhvb2sgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IEJVRzoKKyAgICAgIDMyMzQ3NTQ6CisKKyBFbnN1cmUgb2xkIGZfY3JlYXRlX2Zyb21fdHN0cmluZyBob29rIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsIHNubXBsaWIvc25tcElQWERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFNURERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOiBDSEFOR0VTOgorCisgc25tcGxpYjogQlVHOiAzMjM0NzU0OiBFbnN1cmUgb2xkIGZfY3JlYXRlX2Zyb21fdHN0cmluZyBob29rIGlzCisgaW5pdGlhbGl6ZWQgdG8gTlVMTCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiB1c2UgI2lmZGVmCisKKyByYXRoZXIgdGhhbiAjaWYgZm9yIGRlZmluZSBjaGVja3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiB1c2UgI2lmZGVmCisKKyByYXRoZXIgdGhhbiAjaWYgZm9yIGRlZmluZSBjaGVja3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiB1c2UgI2lmZGVmCisKKyByYXRoZXIgdGhhbiAjaWYgZm9yIGRlZmluZSBjaGVja3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiB1c2UgI2lmZGVmCisKKyByYXRoZXIgdGhhbiAjaWYgZm9yIGRlZmluZSBjaGVja3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHVzZSAjaWZkZWYKKworIHJhdGhlciB0aGFuICNpZiBmb3IgZGVmaW5lIGNoZWNrcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBfYXBpLjMuZGVmLCBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZjogQ0hBTkdFUzogbWFuOiBCVUc6CisKKyAzMTkwNzI1OiBEb2N1bWVudCBzbm1weyxfc2Vzc31zeW5jaF9yZXNwb25zZSBhbmQgc25tcF9hc3luY19zZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZjogQ0hBTkdFUzogbWFuOiBCVUc6CisKKyAzMTkwNzI1OiBEb2N1bWVudCBzbm1weyxfc2Vzc31zeW5jaF9yZXNwb25zZSBhbmQgc25tcF9hc3luY19zZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmOiAKKworIENIQU5HRVM6IG1hbjogQlVHOiAzMTkwNzI1OiBEb2N1bWVudCBzbm1weyxfc2Vzc31zeW5jaF9yZXNwb25zZSBhbmQKKyBzbm1wX2FzeW5jX3NlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWY6IAorCisgQ0hBTkdFUzogbWFuOiBCVUc6IDMxOTA3MjU6IERvY3VtZW50IHNubXB7LF9zZXNzfXN5bmNoX3Jlc3BvbnNlIGFuZAorIHNubXBfYXN5bmNfc2VuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBfYXBpLjMuZGVmLCBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZjogQ0hBTkdFUzogbWFuOiBCVUc6CisKKyAzMTkwNzI1OiBEb2N1bWVudCBzbm1weyxfc2Vzc31zeW5jaF9yZXNwb25zZSBhbmQgc25tcF9hc3luY19zZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZCByYWNlCisKKyBjb25kaXRpb24gaW4gaHJTV1J1blRhYmxlIFRyZWF0IHRoZSByZWFkcyBmcm9tIC9wcm9jLzxwaWQ+LyoKKyBjYXJlZnVseSwgcHJvY2Vzc2VzIGNhbiBleGl0IGluIHRoZSBtaWRkbGUgb2YgcHJvY2Vzc2luZy4gIChhbHJlYWR5CisgZml4ZWQgaW4gVjUtNS1wYXRjaGVzIGFuZCBWNS00LXBhdGNoZXMgaW4gU1ZOIHJldi4gMjAxMTUsIGR1bm5vIHdoeQorIEkgZGlkIG5vdCBwYXRjaCB0cnVuaykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQzOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHJhY2UKKworIGNvbmRpdGlvbiBpbiBoclNXUnVuVGFibGUgVHJlYXQgdGhlIHJlYWRzIGZyb20gL3Byb2MvPHBpZD4vKgorIGNhcmVmdWx5LCBwcm9jZXNzZXMgY2FuIGV4aXQgaW4gdGhlIG1pZGRsZSBvZiBwcm9jZXNzaW5nLiAgKGFscmVhZHkKKyBmaXhlZCBpbiBWNS01LXBhdGNoZXMgYW5kIFY1LTQtcGF0Y2hlcyBpbiBTVk4gcmV2LiAyMDExNSwgZHVubm8gd2h5CisgSSBkaWQgbm90IHBhdGNoIHRydW5rKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL3NjYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IEJVRzoKKworIDMxODQ2OTc6IERvbid0IHJlZmVyZW5jZSBpbnRlcm5hbCBNRDUgd2hlbiBpdCdzIGV4cGxpY2l0bHkgZGlzYWJsZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQzNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvc2NhcGkuYzogQ0hBTkdFUzogc25tcGxpYjogQlVHOgorCisgMzE4NDY5NzogRG9uJ3QgcmVmZXJlbmNlIGludGVybmFsIE1ENSB3aGVuIGl0J3MgZXhwbGljaXRseSBkaXNhYmxlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTYgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3N5c3RlbS5jOiBtYWtlIHN1cmUgd2UgZ2V0IHRoZSBoaW50IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDM2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOiBGb2xsb3ctdXAgZm9yIHIyMDQzMjogdGVzdGluZy9SVU5URVNUUyB3aXRob3V0CisKKyBhcmd1bWVudHMgd29ya3MgYWdhaW4gYXMgaXQgc2hvdWxkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9SVU5URVNUUzogRm9sbG93LXVwIGZvciByMjA0MzI6IHRlc3RpbmcvUlVOVEVTVFMgd2l0aG91dAorCisgYXJndW1lbnRzIHdvcmtzIGFnYWluIGFzIGl0IHNob3VsZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jOiBSYW4KKworIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYyB0aHJvdWdoIGRvczJ1bml4LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDM0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGU6IEZpeGVkIGEgdHlwbyBpbiBhCisKKyBjb21tZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlOiBGaXhlZCBhIHR5cG8gaW4gYQorCisgY29tbWVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9SVU5URVNUUzogUlVOVEVTVFMgd29ya3MgYWdhaW4gZm9yIHRlc3RzIHdpdGggYSBmb3VyLWRpZ2l0CisKKyBudW1iZXIuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOiBSVU5URVNUUyB3b3JrcyBhZ2FpbiBmb3IgdGVzdHMgd2l0aCBhIGZvdXItZGlnaXQKKworIG51bWJlci4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzogRml4ZWQgYSByZWNlbnRseSBpbnRyb2R1Y2VkIGJ1ZyBpbgorCisgbmV0c25tcF9nZXRhZGRyaW5mbygpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDMxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzogRG9jdW1lbnQgdGhhdCB0aGUgdWNkLXNubXAKKworIGRpc2tpbyBjb2RlIHN0aWxsIGhhcyB0byBiZSBtb2RpZmllZCBzdWNoIHRoYXQgZGlza2lvX2ZyZWVfY29uZmlnKCkKKyBnZXRzIGludm9rZWQgdXBvbiBTSUdIVVAuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDMwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzogRG9jdW1lbnQgdGhhdCB0aGUgdWNkLXNubXAKKworIGRpc2tpbyBjb2RlIHN0aWxsIGhhcyB0byBiZSBtb2RpZmllZCBzdWNoIHRoYXQgZGlza2lvX2ZyZWVfY29uZmlnKCkKKyBnZXRzIGludm9rZWQgdXBvbiBTSUdIVVAuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTMgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3N5c3RlbS5jOiBmaXggY2FzdCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2EKKyAgICAgICBjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXMKKyAgICAgICBzLmM6IFJldmVydCAyMDQyMCAiQ0hBTkdFUzogc25tcGQ6IEZpeGVkIG1lbW9yeSBsZWFrIGluIFRDUC1NSUIKKworIHRhYmxlcyBpbnRyb2R1Y2VkIGJ5IHBhdGNoICMzMDUzNDM2LiIgUmV2ZXJ0IDE5NzA4ICJDSEFOR0VTOiBzbm1wZDoKKyBQQVRDSDogMzA1MzQzNjogZnJvbTogdGFrZXZvczogZml4OiB0Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MKKyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MiIHRoZSBidWcgMzA1MzQzNiBpcyBmaXhpbmcgd2FzIGludHJvZHVjZWQgaW4gcjE3NzE5LCBhbmQgZml4ZWQgaW4KKyByMTc4NjEuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTMgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsIGFwcHMvc25tcG5ldHN0YXQvcm91dGUuYywgCisgICAgICBhcHBzL3NubXB0cmFwZF9sb2cuYywgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMiwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3lzdGVtLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYzogbW9yZSBkbnMgcmVsYXRlZCB0d2Vha3MgIC0KKyAgICAgIGFkZCBuZXRzbm1wX2dldGhvc3RieWFkZHIgIC0gYWx3YXlzIGRlZmluZSBuZXRzbm1wXyogdmVyc2lvbnM7CisgICAgICBsb2dvbmNlIGlmIHVuZGVybHlpbmcgICAgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSAgLSB1c2UgbmV3CisgICAgICBmdW5jdGlvbnMgaW4gZGlzbWFuIG1pYnMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTMgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCBzbm1wbGliL3NubXB2My5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYzogdXNlIG5ldyBuZXRzbm1wIGRucworCisgZnVuY3Rpb25zIGluIGFwcHMvc25tcGxpYiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTMgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIHNubXBsaWIvc3lzdGVtLmM6IG1vdmUgRE5TU0VDCisKKyB2YWxpZGF0aW9uIGludG8gcmVzb2x2ZXIgd3JhcHBlciBmdW5jdGlvbnMgICAtIGFsbG93cyBvdGhlciBjb2RlIHRvIGJlbmVmaXQgZnJvbSB2YWxpZGF0aW9uICAgLSBuZXcgbmV0c25tcF9nZXRob3N0YnluYW1lLCBuZXRzbm1wX2dldGFkZHJpbmZvIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9taWIuYzogRm9sbG93LXVwIGZvciByMjA0MTc6IHJlcGxhY2VkIGEgbWFsbG9jKCkvZnJlZSgpCisKKyBwYWlyIGJ5IGEgY2FsbCB0byByZWFsbG9jKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL21pYi5jOiBGb2xsb3ctdXAgZm9yIHIyMDQxNzogcmVwbGFjZWQgYSBtYWxsb2MoKS9mcmVlKCkKKworIHBhaXIgYnkgYSBjYWxsIHRvIHJlYWxsb2MoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbWliLmM6IEZvbGxvdy11cCBmb3IgcjIwNDE3OiByZXBsYWNlZCBhIG1hbGxvYygpL2ZyZWUoKQorCisgcGFpciBieSBhIGNhbGwgdG8gcmVhbGxvYygpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rLmM6IEZpeCBmb3IgUkhFTDQKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDIzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6IEhlYWRlciBmaWRkbGluZyBmb3IgdGhlCisKKyBiZW5lZml0IG9mIFJIRUw0LCBTb2xhcmlzLCBPcGVuQlNEIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2EKKyAgICAgICBjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXMKKyAgICAgICBzLmM6IENIQU5HRVM6IHNubXBkOiBGaXhlZCBtZW1vcnkgbGVhayBpbiBUQ1AtTUlCIHRhYmxlcworICAgICAgaW50cm9kdWNlZAorCisgYnkgcGF0Y2ggIzMwNTM0MzYuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYQorICAgICAgIGNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2NlcworICAgICAgIHMuYzogQ0hBTkdFUzogc25tcGQ6IEZpeGVkIG1lbW9yeSBsZWFrIGluIFRDUC1NSUIgdGFibGVzCisgICAgICBpbnRyb2R1Y2VkCisKKyBieSBwYXRjaCAjMzA1MzQzNi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6IFJldmVydGVkIGFjY2lkZW50YWxseSBjb21taXR0ZWQKKworIGNoYW5nZXMgb2YgcjIwNDEyLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KKworIHNubXBfZnJlZV9zZXNzaW9uKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KKworIHNubXBfZnJlZV9zZXNzaW9uKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KKworIHNubXBfZnJlZV9zZXNzaW9uKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KKworIHNubXBfZnJlZV9zZXNzaW9uKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbWliLmM6IENIQU5HRVM6IHNubXBsaWI6IF9taWJpbmRleF9hZGQoKSBubyBsb25nZXIgcmVhZHMKKworIHBhc3QgdGhlIGVuZCBvZiB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5IF9taWJpbmRleGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQxNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9taWIuYzogQ0hBTkdFUzogc25tcGxpYjogX21pYmluZGV4X2FkZCgpIG5vIGxvbmdlciByZWFkcworCisgcGFzdCB0aGUgZW5kIG9mIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXkgX21pYmluZGV4ZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDE3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL21pYi5jOiBDSEFOR0VTOiBzbm1wbGliOiBfbWliaW5kZXhfYWRkKCkgbm8gbG9uZ2VyIHJlYWRzCisKKyBwYXN0IHRoZSBlbmQgb2YgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSBfbWliaW5kZXhlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9sY2RfdGltZS5jOiBBdm9pZCB0aGF0IE1TVkMgdHJpZ2dlcnMgYSBjb21waWxlciB3YXJuaW5nIG9uCisKKyB0aGUgY29kZSBpbiBzbm1wbGliL2xjZF90aW1lLmMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmM6IEF2b2lkCisKKyByZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisKKyB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpcE5ldFRvTWVkaWFUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0MTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisKKyB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpcE5ldFRvTWVkaWFUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0MTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisKKyB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpcE5ldFRvTWVkaWFUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisKKyB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpcE5ldFRvTWVkaWFUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkKKworIGxlYWsgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaWZUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5CisKKyBsZWFrIGluIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlmVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeQorCisgbGVhayBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpZlRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkKKworIGxlYWsgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaWZUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrCisKKyBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpcEFkZHJUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhaworCisgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaXBBZGRyVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsKKworIGluIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlwQWRkclRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOiAKKworIENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkKKyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJIGlwQWRkclRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IERvY3VtZW50YXRpb24gLyBzb3VyY2UgY29kZSBjb21tZW50IHNwZWxsaW5nIGZpeDoKKworIGV4aXRlbnQgLT4gZXhpc3RlbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2csIHNubXBsaWIvbWliLmM6IERvY3VtZW50YXRpb24gLyBzb3VyY2UgY29kZSBjb21tZW50CisKKyBzcGVsbGluZyBmaXg6IGV4aXRlbnQgLT4gZXhpc3RlbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2csIHNubXBsaWIvbWliLmM6IERvY3VtZW50YXRpb24gLyBzb3VyY2UgY29kZSBjb21tZW50CisKKyBzcGVsbGluZyBmaXg6IGV4aXRlbnQgLT4gZXhpc3RlbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2csIHNubXBsaWIvbWliLmM6IERvY3VtZW50YXRpb24gLyBzb3VyY2UgY29kZSBjb21tZW50CisKKyBzcGVsbGluZyBmaXg6IGV4aXRlbnQgLT4gZXhpc3RlbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYzogQ0hBTkdFUzogV2luMzI6IEJ1aWxkCisKKyBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMgb25seSBpZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgaGFzIGJlZW4gZGVmaW5lZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIE1ha2VmaWxlLmluLCBNYWtlZmlsZS5ydWxlcywgY29uZmlndXJlLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOiBpbnN0YWxsIHRoZSBidWlsdCBmZWF0dXJlCisKKyBoZWFkZXJzIHRvbyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19zaW1wbGU6IENIQU5HRVM6CisKKyB0ZXN0aW5nOiBUZXN0cyAwMjUgYW5kIDAyNiBwYXNzIG9uIE1pbkdXIGV2ZW4gaWYgd2luRXh0RExMIGhhcyBiZWVuCisgZW5hYmxlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlOiBUMDY1IHJvYnVzdG5lc3MKKworIGltcHJvdmVtZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDA3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c192b2lkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oOiBDSEFOR0VTOiBzbm1wZDogdWNkX3NubXAgYnVpbGRzCisKKyBhZ2FpbiBvbiBNaW5HVyBhbmQgQ3lnd2luLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDA2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS5pbjogaW5zdGFsbCB0aGUgbmV0LXNubXAtZmVhdHVyZXMuaCBmaWxlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDA1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGU6IEltcHJvdmVkIHRlc3QKKworIHJvYnVzdG5lc3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6IENvbXBpbGVyIHdhcm5pbmcgZml4ZXMuICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IE1pbkdXOiBhdm9pZCB0aGF0IGdjYyBjb21wbGFpbnMgYWJvdXQgcGFzaW5nCisKKyBhIChjaGFyICopIGFyZ3VtZW50IHdoaWxlICh1bnNpZ25lZCBjaGFyICopIGlzIGV4cGVjdGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQwMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IE1pbkdXOiBhdm9pZCB0aGF0IGdjYyBjb21wbGFpbnMgYWJvdXQgcGFzaW5nCisKKyBhIChjaGFyICopIGFyZ3VtZW50IHdoaWxlICh1bnNpZ25lZCBjaGFyICopIGlzIGV4cGVjdGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQwMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IE1pbkdXOiBhdm9pZCB0aGF0IGdjYyBjb21wbGFpbnMgYWJvdXQgcGFzaW5nCisKKyBhIChjaGFyICopIGFyZ3VtZW50IHdoaWxlICh1bnNpZ25lZCBjaGFyICopIGlzIGV4cGVjdGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQwMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IE1pbkdXOiBhdm9pZCB0aGF0IGdjYyBjb21wbGFpbnMgYWJvdXQgcGFzaW5nCisKKyBhIChjaGFyICopIGFyZ3VtZW50IHdoaWxlICh1bnNpZ25lZCBjaGFyICopIGlzIGV4cGVjdGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDAyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3Rvb2xzLmM6IEF2b2lkIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGlmIHRoZSBsYXN0IGNoYXIKKworIG9mIHRpbWVfc3RyaW5nIGlzIGluIHRoZSByYW5nZSAweDgwLi4weGZlIGFuZCBjaGFyIGlzIGEgc2lnbmVkIHR5cGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaDogUmV2ZXJ0ZWQgcjIwMzgwIGJlY2F1c2UgaXQgYnJlYWtzCisKKyBhbGwgc3RhdGVtZW50cyB0aGF0IHByaW50IGFuIE9JRCBzdWItSUQgb24gYW55IDY0LWJpdCBwbGF0Zm9ybS4gVGhlCisgZWZmZWN0IG9mIHIyMDM4MCBvbiBiaWcgZW5kaWFuIGFyY2hpdGVjdHVyZXMgd2FzIHRoYXQgYSAiMCIgd291bGQgYmUKKyBwcmludGVkIGluc3RlYWQgb2YgdGhlIE9JRCBzdWItSUQgKGF0IGxlYXN0IHdpdGggdGhlIExQNjQgYW5kIHRoZQorIElMUDY0IG1vZGVscykuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVMsIE5FV1M6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzg1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzg0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZQorCisgZGVwZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM4MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzogQysrIC0+IEMgY29tbWVudHMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBORVdTOiBORVdTIHVwZGF0ZSBmb3IgNS43IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzgxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmg6IHJldmVydCB0aGUgb2lkIHR5cGVkZWYgcmVzaXppbmcKKworIGZyb20gcjE3ODA5IGJlY2F1c2UgaXQgYnJva2UgYmFja3dhcmRzIGNvbXBhdCwgYXMgcG9pbnRlZCBvdXQgYnkKKyB1c2VycyBvbiB0aGUgLWNvZGVycyBsaXN0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM4MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiB1c2UgcHJvcGVyIGF1dG9jb25mIHZlcnNpb24gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sCisgICAgICAgcGVybC9PSUQvT0lELnBtLCBwZXJsL1NOTVAvU05NUC5wbSwgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtOiBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS50b3A6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWlicy9VQ0QtU05NUC1NSUIudHh0OiBhZGRlZCBhIG1pc3NpbmcgMCBpbiB0aGUgcmV2aXNpb24gZGF0ZQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYzogVXNlIHN5bWJvbGljCisKKyBuYW1lZCBmb3IgaWZUeXBlIHZhbHVlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmM6IFVzZSBzeW1ib2xpYworCisgbmFtZWQgZm9yIGlmVHlwZSB2YWx1ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jOiBVc2Ugc3ltYm9saWMKKworIG5hbWVkIGZvciBpZlR5cGUgdmFsdWVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAzNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYzogVXNlIHN5bWJvbGljCisKKyBuYW1lZCBmb3IgaWZUeXBlIHZhbHVlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmM6IFVzZSBzeW1ib2xpYworCisgbmFtZWQgZm9yIGlmVHlwZSB2YWx1ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL3JmY21pYnMuZGlmZjogSUFOQSBoYXMgZml4ZWQgdGhlCisKKyBJQU5BLUlQUE0tTUVUUklDUy1SRUdJU1RSWS1NSUIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9yZmNtaWJzLmRpZmY6IElBTkEgaGFzIGZpeGVkIHRoZQorCisgSUFOQS1JUFBNLU1FVFJJQ1MtUkVHSVNUUlktTUlCIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OiBhZGRlZCBhIG5ldyBSRVZJU0lPTiBjbGF1c2UgdG8gbGlzdCB0aGUKKworIGNoYW5nZXMgaW4gdGhlIHRoZSByZWNlbnQgdXBkYXRlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTkVXUzogYWRkZWQgcGluZy90cmFjZXJvdXRlIG1pYnMgbm90ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYzogd2UgYWN0dWFsbHkgd2FudCB0byB1c2UgdGhlIGJhc2UKKworIE9JRCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQsIG5vdCB0aGUgcmVnIE9JRC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYzogZml4ZWQgdGhlIHByb3h5IHN1cHBvcnQgdG8gZG8gYQorCisgcHJvcGVyIE9JRCBsZXNzIHRoYW4gT0lEIGNvbXBhcmUuICBXZSBhY3R1YWxseSBkb24ndCBjYXJlIGFib3V0IHRoZQorIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCwgb25seSB0aGF0IGl0IHdhcyBiZWZvcmUgdGhlCisgcmVnaXN0ZXJlZCByZWJhc2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jOiBDSEFOR0VTOiBwYXRjaCAzMTQwODMzOiBmcm9tCisKKyBqc2FmcmFuZWs6IGZpeCBwcm94eSBHRVRORVhUIHJlcXVlc3RzIFdoZW4gT0lEcyByZXF1ZXN0ZWQgYXJlIGJlbG93CisgdGhlIHByb3h5IHJlcXVlc3QgcmVtYXAsIHdlIG5lZWQgdG8gbm90IGluY2x1ZGUgYW55IE9JRHMgdGhhdCBtaWdodAorIGJlIGluIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBPSUQgYW5kIHRoZSByZW1hcHBlZCBPSUQuICBUaGlzCisgcGF0Y2ggZnVkZ2VzIHRoZSByZXF1ZXN0IHNvIHRoYXQgaXQgZml4ZXMgdGhlIHJlcXVlc3QgT0lEIHNvIGl0J3MKKyBqdXN0IGJlZm9yZSB0aGUgcmVtYXBwZWQgcHJveHkgcmFuZ2UuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaCwgbWlicy9VQ0QtU05NUC1NSUIudHh0OgorICAgICAgTkVXUzoKKworIFBBVENIIDMxNjczMjU6IGZyb20ga3Jpc3p0b2Zvcm86IFVDRC1TTk1QL1N5c3RlbVN0YXRzOiBhZGQgdmFyaWFibGVzCisgdG8gcmVwb3J0IGNwdXN0ZWFsLCBjcHVndWVzdCwgY3B1Z3Vlc3RuaWNlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jOiBDSEFOR0VTOiBwYXRjaAorCisgMzE4NDAyNjogZnJvbSBlaXZuYWVzOiBBdm9pZCBjb25zdGFudCByZWZyZXNoIG9mIGludGVyZmFjZQorIHN0YXRpc3RpY3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzY3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvc25tcF9hZ2VudC5jLCBhcHBzL3NubXBkZWx0YS5jLCBzbm1wbGliL3NjYXBpLmMsIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmM6IEZpeGVkCisgICAgICBzZXZlcmFsCisKKyBjb21waWxlciB3YXJuaW5ncyByZXBvcnRlZCBieSB0aGUgTVNWQyBjb21waWxlci4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvZ2V0dGltZW9mZGF5LmM6IFdpbjMyL01TVkM6IEZpeGVkIGEgY29tcGlsZXIgd2FybmluZy4gCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6IENIQU5HRVM6IGFnZW50OiBGaXhlZCBhCisKKyB5ZWFyLTIwMzggYnVnIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBpcFJvdXRlVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDggIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYzogRml4CisKKyB3YXJuaW5ncyBhbmQgZGF0YSBmb3JtYXQgZm9yIERhdGVBbmRUaW1lIG9iamVjdHMuICBUaGVzZSBtb2R1bGVzCisgd29yaywgYnV0OiAtIFRoZXkgYXJlIExpbnV4IG9ubHkgLSBSb3dzIG11c3QgYmUgY3JlYXRlZCB3aXRoIHJvd1N0YXR1cyBjcmVhdGVBbmRXYWl0IGJlZm9yZSB0aGV5IGFyZQorIHBvcHVsYXRlZCAtIEFnZW50IG11c3QgcnVuIGFzIHJvb3QgLSBBZ2VudCBpcyBibG9ja2VkIHdoaWxlIHRlc3RzIHJ1biAtIERhdGEgZm9ybWF0IGZvciBJbmV0QWRkcmVzcyBvYmplY3RzIGlzIHdyb25nLiBJdCBpcyBBU0NJSSwgbm90CisgICBiaW5hcnkgKG1ha2luZyBpdCBlYXNpZXIgdG8gdXNlIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYnV0IC4uLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDM2MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jOiBGaXgKKworIHdhcm5pbmdzIGFuZCBkYXRhIGZvcm1hdCBmb3IgRGF0ZUFuZFRpbWUgb2JqZWN0cy4gIFRoZXNlIG1vZHVsZXMKKyB3b3JrLCBidXQ6IC0gVGhleSBhcmUgTGludXggb25seSAtIFJvd3MgbXVzdCBiZSBjcmVhdGVkIHdpdGggcm93U3RhdHVzIGNyZWF0ZUFuZFdhaXQgYmVmb3JlIHRoZXkgYXJlCisgcG9wdWxhdGVkIC0gQWdlbnQgbXVzdCBydW4gYXMgcm9vdCAtIEFnZW50IGlzIGJsb2NrZWQgd2hpbGUgdGVzdHMgcnVuIC0gRGF0YSBmb3JtYXQgZm9yIEluZXRBZGRyZXNzIG9iamVjdHMgaXMgd3JvbmcuIEl0IGlzIEFTQ0lJLCBub3QKKyAgIGJpbmFyeSAobWFraW5nIGl0IGVhc2llciB0byB1c2UgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBidXQgLi4uKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzYzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA4ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmM6IEZpeAorCisgd2FybmluZ3MgYW5kIGRhdGEgZm9ybWF0IGZvciBEYXRlQW5kVGltZSBvYmplY3RzLiAgVGhlc2UgbW9kdWxlcworIHdvcmssIGJ1dDogLSBUaGV5IGFyZSBMaW51eCBvbmx5IC0gUm93cyBtdXN0IGJlIGNyZWF0ZWQgd2l0aCByb3dTdGF0dXMgY3JlYXRlQW5kV2FpdCBiZWZvcmUgdGhleSBhcmUKKyBwb3B1bGF0ZWQgLSBBZ2VudCBtdXN0IHJ1biBhcyByb290IC0gQWdlbnQgaXMgYmxvY2tlZCB3aGlsZSB0ZXN0cyBydW4gLSBEYXRhIGZvcm1hdCBmb3IgSW5ldEFkZHJlc3Mgb2JqZWN0cyBpcyB3cm9uZy4gSXQgaXMgQVNDSUksIG5vdAorICAgYmluYXJ5IChtYWtpbmcgaXQgZWFzaWVyIHRvIHVzZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCAuLi4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAzNjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDggIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYzogRml4CisKKyB3YXJuaW5ncyBhbmQgZGF0YSBmb3JtYXQgZm9yIERhdGVBbmRUaW1lIG9iamVjdHMuICBUaGVzZSBtb2R1bGVzCisgd29yaywgYnV0OiAtIFRoZXkgYXJlIExpbnV4IG9ubHkgLSBSb3dzIG11c3QgYmUgY3JlYXRlZCB3aXRoIHJvd1N0YXR1cyBjcmVhdGVBbmRXYWl0IGJlZm9yZSB0aGV5IGFyZQorIHBvcHVsYXRlZCAtIEFnZW50IG11c3QgcnVuIGFzIHJvb3QgLSBBZ2VudCBpcyBibG9ja2VkIHdoaWxlIHRlc3RzIHJ1biAtIERhdGEgZm9ybWF0IGZvciBJbmV0QWRkcmVzcyBvYmplY3RzIGlzIHdyb25nLiBJdCBpcyBBU0NJSSwgbm90CisgICBiaW5hcnkgKG1ha2luZyBpdCBlYXNpZXIgdG8gdXNlIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYnV0IC4uLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM2MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jOiBGaXgKKworIHdhcm5pbmdzIGFuZCBkYXRhIGZvcm1hdCBmb3IgRGF0ZUFuZFRpbWUgb2JqZWN0cy4gIFRoZXNlIG1vZHVsZXMKKyB3b3JrLCBidXQ6IC0gVGhleSBhcmUgTGludXggb25seSAtIFJvd3MgbXVzdCBiZSBjcmVhdGVkIHdpdGggcm93U3RhdHVzIGNyZWF0ZUFuZFdhaXQgYmVmb3JlIHRoZXkgYXJlCisgcG9wdWxhdGVkIC0gQWdlbnQgbXVzdCBydW4gYXMgcm9vdCAtIEFnZW50IGlzIGJsb2NrZWQgd2hpbGUgdGVzdHMgcnVuIC0gRGF0YSBmb3JtYXQgZm9yIEluZXRBZGRyZXNzIG9iamVjdHMgaXMgd3JvbmcuIEl0IGlzIEFTQ0lJLCBub3QKKyAgIGJpbmFyeSAobWFraW5nIGl0IGVhc2llciB0byB1c2UgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBidXQgLi4uKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBwZXJsL1NOTVAvU05NUC54czogUmVtb3ZlZCBhbiB1bnVzZWQgbGFiZWwgZnJvbSBwZXJsL1NOTVAvU05NUC54cy4KKyAgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBwZXJsL1NOTVAvU05NUC54czogUmVtb3ZlZCBhbiB1bnVzZWQgbGFiZWwgZnJvbSBwZXJsL1NOTVAvU05NUC54cy4KKyAgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAzNjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBwZXJsL1NOTVAvU05NUC54czogUmVtb3ZlZCBhbiB1bnVzZWQgbGFiZWwgZnJvbSBwZXJsL1NOTVAvU05NUC54cy4KKyAgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBwZXJsL1NOTVAvU05NUC54czogUmVtb3ZlZCBhbiB1bnVzZWQgbGFiZWwgZnJvbSBwZXJsL1NOTVAvU05NUC54cy4KKyAgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaDogQ0hBTkdFUzogc25tcGQ6IERlY2xhcmUgdGhlIE9JRAorCisgYXJndW1lbnQgdHlwZSBvZiBNSUIgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhcyAnY29uc3Qgb2lkIConIGluc3RlYWQKKyBvZiAnb2lkIConIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgbW9kaWZ5IHRoZSBPSUQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rLmMsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaDogVXNlIHRoZSBjb3JyZWN0IGRhdGEgdHlwZSBmb3IKKworIHRoZSAnY2FjaGUgZXhwaXJlZCcgdmFyaWFibGU6IGNoYXIgaW5zdGVhZCBvZiBpbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6IEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcworCisgaW50cm9kdWNlZCBpbiByMjAxNTEuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBXaW4zMjogaW1wcm92ZWQgc291cmNlIGNvZGUgY29uc2lzdGVuY3kgYnkKKworIHVzaW5nIExQQ1RTVFIgaW5zdGVhZCBvZiBMUENTVFIuIE5vdGU6IHRoaXMgZG9lcyBub3QgbWVhbiB0aGF0CisgVW5pY29kZSBidWlsZHMgYXJlIHN1cHBvcnRlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBXaW4zMjogaW1wcm92ZWQgc291cmNlIGNvZGUgY29uc2lzdGVuY3kgYnkKKworIHVzaW5nIExQQ1RTVFIgaW5zdGVhZCBvZiBMUENTVFIuIE5vdGU6IHRoaXMgZG9lcyBub3QgbWVhbiB0aGF0CisgVW5pY29kZSBidWlsZHMgYXJlIHN1cHBvcnRlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rLmM6IEFkZCBmaWxlCisKKyBmb3Jnb3R0ZW4gaW4gcjIwMzUzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6IFJldmVydGVkIGEgY2hhbmdlIHRoYXQgd2FzCisKKyBjb21taXR0ZWQgYWNjaWRlbnRhbGx5IGluIHIyMDI3Ni4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBGaXhlZCB0d28gY29tcGlsZXIKKworIHdhcm5pbmdzLiAgKEJhY2twb3J0ZWQgcjIwMjM2IGZyb20gdGhlIHRydW5rLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM1NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6IENvbW1lbnRlZCBvdXQgYW4gdW51c2VkIGZ1bmN0aW9uCisKKyBiZWNhdXNlIHRoZSBjb21waWxlciBjb21wbGFpbmVkIGFib3V0IGl0LiAgKEJhY2twb3J0ZWQgcjIwMjM3IGZyb20KKyB0aGUgdHJ1bmsuKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzU0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfCisgICAgICAgYWNjZXNzLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg6IENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMTI1OTY6CisKKyBmcm9tIGZhYmxlZDgwOiBsaXN0ZW4gZm9yIG5ldGxpbmsgY2hhbmdlIGV2ZW50cyBmb3IgdGhlIGFycC1yZWxhdGVkCisgdGFibGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oOiBORVdTOiBQQVRDSAorCisgMzE5ODc4MTogZnJvbSBmZW5uZXI6IEdldCBkaXNtYW4vcGluZyBhbmQgZGlzbWFuL3RyYWNlcm91dGUgdG8gYXQKKyBsZWFzdCBjb21waWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaDogTkVXUzogUEFUQ0gKKworIDMxOTg3ODE6IGZyb20gZmVubmVyOiBHZXQgZGlzbWFuL3BpbmcgYW5kIGRpc21hbi90cmFjZXJvdXRlIHRvIGF0CisgbGVhc3QgY29tcGlsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmg6IE5FV1M6IFBBVENICisKKyAzMTk4NzgxOiBmcm9tIGZlbm5lcjogR2V0IGRpc21hbi9waW5nIGFuZCBkaXNtYW4vdHJhY2Vyb3V0ZSB0byBhdAorIGxlYXN0IGNvbXBpbGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDM1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oOiBORVdTOiBQQVRDSAorCisgMzE5ODc4MTogZnJvbSBmZW5uZXI6IEdldCBkaXNtYW4vcGluZyBhbmQgZGlzbWFuL3RyYWNlcm91dGUgdG8gYXQKKyBsZWFzdCBjb21waWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3N5c3RlbS5jOiBORVdTOiBzbm1wbGliOiBhZGQgb3B0aW9uYWwgc3VwcG9ydCBmb3IgbG9jYWwKKworIEROU1NFQyB2YWxpZGF0aW9uIG9mIGhvc3RuYW1lcyAgLSBvcHRpb25hbCBhdCBjb25maWd1cmUgdGltZTogLS13aXRoLWxvY2FsLWRuc3NlYy12YWxpZGF0aW9uICAtIHJlcXVpcmVzIEROU1NFQy1Ub29sIHZhbGlkYXRpb24gbGlicmFyaWVzICAtIGluaXRpYWwgc3VwcG9ydCwgZm9yIHN5c3RlbXMgd2l0aCBnZXRhZGRyaW5mby4gc3VwcG9ydCBmb3IKKyAgICBhZGRpdGlvbmFsIHJlc29sdmVyIGludGVyZmFjZXMgY29taW5nIHNvb24uICAgLSBhbHNvIFRPRE86IGZsYWcgZm9yIGlnbm9yaW5nIHZhbGlkYXRvaW4gZXJyb3JzIChsb2cgJiBjb250aW51ZSkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzUxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmg6IG1vdmUgdW51c2VkIChhbmQgdG9vIGdlbmVyaWMpCisKKyB0b2tlbiB3aXRoaW4gVUNEX0NPTVBBVElCTEUgaWZkZWYgICAtIE1BWExBQkVMIGNvbmZsaWN0cyB3aXRoIDxhcnBhL25hbWVzZXIuaD4gICAtIGFkZGVkIE5FVFNOTVBfTUFYTEFCRUwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzUwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogdXBkYXRlIGNvbmZpZ3VyZS9NYWtlZmlsZXMKKworIGZvciBETlNTRUMgbG9jYWwgdmFsaWRhdGlvbiBvcHRpb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzQ5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVM6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM0NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM0NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UgZGVwZW5kIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIAorICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM0NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsIAorICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzogcmVtb3ZlZCB0aGUKKworIGFjY2lkZW50YWwgYnJva2VuIGZlYXR1cmUgcmVxdWlyZSBsaW5lIHRoYXQgZ290IGhhbGYgaW5zZXJ0ZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVM6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDM0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDMzOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UgZGVwZW5kIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDMzOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIAorICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDMzNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsIAorICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDMzNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IEZpeCBpbmNvbXBsZXRlIHVuaW5zdGFsbAorCisgY29uZmlndXJhdGlvbjogLSBicm9rZW4gcmVtb3ZhbCBvZiBNaWNyb3NvZnQgRExMIC0gcmVtb3ZlIGFzc29ydGVkIG5ldyBNSUJzIGFuZCBoZWFkZXIgZmlsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDMzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IEZpeCBpbmNvbXBsZXRlIHVuaW5zdGFsbAorCisgY29uZmlndXJhdGlvbjogLSBicm9rZW4gcmVtb3ZhbCBvZiBNaWNyb3NvZnQgRExMIC0gcmVtb3ZlIGFzc29ydGVkIG5ldyBNSUJzIGFuZCBoZWFkZXIgZmlsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDMzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IEZpeCBpbmNvbXBsZXRlIHVuaW5zdGFsbAorCisgY29uZmlndXJhdGlvbjogLSBicm9rZW4gcmVtb3ZhbCBvZiBNaWNyb3NvZnQgRExMIC0gcmVtb3ZlIGFzc29ydGVkIG5ldyBNSUJzIGFuZCBoZWFkZXIgZmlsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDMzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IEZpeCBpbmNvbXBsZXRlIHVuaW5zdGFsbAorCisgY29uZmlndXJhdGlvbjogLSBicm9rZW4gcmVtb3ZhbCBvZiBNaWNyb3NvZnQgRExMIC0gcmVtb3ZlIGFzc29ydGVkIG5ldyBNSUJzIGFuZCBoZWFkZXIgZmlsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRml4IGluY29tcGxldGUgdW5pbnN0YWxsCisKKyBjb25maWd1cmF0aW9uOiAtIGJyb2tlbiByZW1vdmFsIG9mIE1pY3Jvc29mdCBETEwgLSByZW1vdmUgYXNzb3J0ZWQgbmV3IE1JQnMgYW5kIGhlYWRlciBmaWxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBTdXBwb3J0IFRhci9HWmlwIGNvbW1hbmQgcGF0aHMKKworIGNvbnRhaW5pbmcgc3BhY2VzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAzMzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IFN1cHBvcnQgVGFyL0daaXAgY29tbWFuZCBwYXRocworCisgY29udGFpbmluZyBzcGFjZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDMzNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogU3VwcG9ydCBUYXIvR1ppcCBjb21tYW5kIHBhdGhzCisKKyBjb250YWluaW5nIHNwYWNlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBSZXBvcnQgR1ppcCBjb21tYW5kIGNvcnJlY3RseQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMzMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogUmVwb3J0IEdaaXAgY29tbWFuZCBjb3JyZWN0bHkKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDMzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IFJlcG9ydCBHWmlwIGNvbW1hbmQgY29ycmVjdGx5CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmM6IEZpeCBmb3IgRHJhZ29uRmx5IEJTRCAoZG9lcworICAgICAgbm90CisKKyBkZWZpbmUgSVBfU0VORFNSQ0FERFIpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzMzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jOiBGaXggZm9yIERyYWdvbkZseSBCU0QgKGRvZXMKKyAgICAgIG5vdAorCisgZGVmaW5lIElQX1NFTkRTUkNBRERSKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmg6IEZpeCBzcGVsbGluZyBvZgorCisgU09fUkVDVkRTVEFERFIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDMzMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaDogRml4IHNwZWxsaW5nIG9mCisKKyBTT19SRUNWRFNUQUREUiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgbWFuL3NubXAuY29uZi41LmRlZiwgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6IE5FV1M6IGFwcHM6IGFkZCBzbm1wLmNvbmYgdG9rZW5zIGZvciB0aW1lb3V0cworCisgYW5kIHJldHJpZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzMwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3Rvb2xzLmMsIHRlc3RpbmcvVEVTVENPTkYuc2g6IENIQU5HRVM6IE1pbkdXOiBNYWRlCisKKyByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGluZGVwZW5kZW50IG9mIHRoZSBOZXQtU05NUCB2YXJpYWJsZXMgZGVmaW5lZAorIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiBTb21lIHRlc3RzIHRoYXQgZmFpbGVkIHByZXZpb3VzbHkgYWZ0ZXIgdGhlCisgTmV0LVNOTVAgYmluYXJpZXMgKE1TVkMgYnVpbGQpIGhhZCBiZWVuIGluc3RhbGxlZCBkbyBub3cgcGFzcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzMjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdG9vbHMuYywgdGVzdGluZy9URVNUQ09ORi5zaDogQ0hBTkdFUzogTWluR1c6IE1hZGUKKworIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgaW5kZXBlbmRlbnQgb2YgdGhlIE5ldC1TTk1QIHZhcmlhYmxlcyBkZWZpbmVkCisgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkuIFNvbWUgdGVzdHMgdGhhdCBmYWlsZWQgcHJldmlvdXNseSBhZnRlciB0aGUKKyBOZXQtU05NUCBiaW5hcmllcyAoTVNWQyBidWlsZCkgaGFkIGJlZW4gaW5zdGFsbGVkIGRvIG5vdyBwYXNzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDMyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90b29scy5jLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDogCisKKyBDSEFOR0VTOiBNaW5HVzogTWFkZSByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGluZGVwZW5kZW50IG9mIHRoZQorIE5ldC1TTk1QIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiBTb21lIHRlc3RzIHRoYXQKKyBmYWlsZWQgcHJldmlvdXNseSBhZnRlciB0aGUgTmV0LVNOTVAgYmluYXJpZXMgKE1TVkMgYnVpbGQpIGhhZCBiZWVuCisgaW5zdGFsbGVkIGRvIG5vdyBwYXNzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDMyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90b29scy5jLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDogCisKKyBDSEFOR0VTOiBNaW5HVzogTWFkZSByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGluZGVwZW5kZW50IG9mIHRoZQorIE5ldC1TTk1QIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiBTb21lIHRlc3RzIHRoYXQKKyBmYWlsZWQgcHJldmlvdXNseSBhZnRlciB0aGUgTmV0LVNOTVAgYmluYXJpZXMgKE1TVkMgYnVpbGQpIGhhZCBiZWVuCisgaW5zdGFsbGVkIGRvIG5vdyBwYXNzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLnZjcHJvaiwKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgd2luMzIvd2luMzIuc2xuLAorICAgICAgd2luMzIvd2luMzJkbGwuc2xuOgorCisgUmVtb3ZlZCBWaXN1YWwgU3R1ZGlvIDIwMDUgc29sdXRpb24gYW5kIHByb2plY3QgZmlsZXMgYWdhaW4gc2luY2UKKyBWaXN1YWwgU3R1ZGlvIDIwMTAgcmVmdXNlcyB0byBsb2FkIHRoZXNlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzI4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS5pbjogY2xlYW4gdGhlIHBlcmwvcHl0aG9uIGZlYXR1cmUgbGVmdG92ZXJzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzI3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogZml4IG1pYiBtb2R1bGUgaW52b2NhdGlvbiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOiBmaXggaWZkZWYKKworIHR5cG8gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzI1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS5pbjogZml4IHBlcmwvcHl0aG9uIGZlYXR1cmUgZGVwZW5kZW5jaWVzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hdXRvX25saXN0LmM6IHJldmVydGVkIGF1dG9fbmxpc3QgbWFjcm8gdXNhZ2U7IHRoZSBmdW5jdGlvbgorCisgaXMgdXNlZCBpbiBoZWFkZXJzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBBZGQgYSAtVCBvcHRpb24gdG8gcnVuICdtYWtlIHRlc3QnCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9NYWtlZmlsZS5pbjogZml4IHRoZSBlbmNvZGVfa2V5Y2hhbmdlIC5mdCBmaWxlbmFtZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIHNubXBsaWIvdG9vbHMuYzogCisKKyBmaXggdGhlIGZlYXR1cmVzIHJlcXVpcmVkIGJ5IHRoZSBUcmFwUmVjZWl2ZXIgbW9kdWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIE1ha2VmaWxlLmluOiBBZGQgdGhlIFRyYXBSZWNlaXZlciB0byB0aGUgbGlzdCBvZiBwZXJsIG1vZHVsZXMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBwZXJsL1NOTVAvU05NUC54czogdXNlIHRoZSBuZXdlciBOZXQtU05NUCBBUElzLCByYXRoZXIgdGhhbiB0aGUKKworIG9sZGVyIFVDRCBvbmVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHBlcmwvU05NUC9TTk1QLnhzOiByZW1vdmUgU0VUIGNvZGUgd2hlbiB1bmRlciAtLXJlYWQtb25seSBtb2RlCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jOiByZXF1aXJlCisKKyBjaGVja192Yl91aW50IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbgorICAgICAgIHQuYywgYWdlbnQvc25tcF9hZ2VudC5jLCBsb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjLCAKKyAgICAgIHB5dGhvbi9uZXRzbm1wL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6IGxhc3Qgb2YgdGhlIHBlcmwtdXNlZCBmZWF0dXJlIGZ1bmN0aW9ucworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW4KKyAgICAgICB0LmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYzoKKworIHN0YXJ0ZWQgdGhlIGZpbmFsIHNldCBvZiBmdW5jdGlvbiByZW1vdmFscyBmb3IgZmVhdHVyZXMgcmVxdWlyZWQgYnkKKyBwZXJsL3B5dGhvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXNvdXJjZS1pbmNsdWRlcy5tMmk6IGFkZGVkIHRoZQorCisgbmV0LXNubXAtZmVhdHVyZXMuaCBoZWFkZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIAorICAgICAgcGVybC9TTk1QL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAKKyAgICAgIHBlcmwvYWdlbnQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmg6IEFkZGVkIHBlcmwgZmVhdHVyZQorCisgcmVxdWlyZW1lbnRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIE1ha2VmaWxlLmluLCBNYWtlZmlsZS5ydWxlcywgY29uZmlndXJlLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uLCAKKyAgICAgIHBlcmwvQVNOL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAKKyAgICAgIHBlcmwvT0lEL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAKKyAgICAgIHBlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgCisgICAgICBwZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaDogaG9wZWZ1bGx5CisgICAgICB3b3JraW5nCisKKyBydWxlcyB0byBhcHBseSBmZWF0dXJlIHJlcXVpcmVtZW50cyB0byBwZXJsIGFuZCBweXRob24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmM6IG1vcmUgY2hhbmdlcyB0byByZW1vdmUgdW5uZWVkZWQgZnVuY3Rpb25zCisKKyBwcmltYXJpbHkgd2hlbiB3cml0ZSBtb2RlIGlzIHR1cm5lZCBvZmYgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOiBjaGFuZ2UgdGhlIHdhbnQgaW52b2NhdGlvbiB0byBvbmx5IGRlZmF1bHQKKworIHRvIGV4Y2x1ZGUgZXh0ZXJuYWwgaG9va3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzA5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGU6IHNlYXJjaCB0aHJvdWdoIC54cyBmaWxlcyBmb3IKKworIGZ1bmN0aW9uIGludm9jYXRpb25zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYXV0b19ubGlzdC5jOiBmb3Jnb3QgYSBzZW1pY29sb24gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYzogaXF1ZXJ5IHBkdQorICAgICAgc2Vzc2lvbnMKKworIGFyZSBvbmx5IG5lZWRlZCBpbiB3cml0ZSBtb2RlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzA2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL01ha2VmaWxlLmluOiBmaXggZmVhdHVyZSBkZXRlY3Rpb24gb2Ygc29tZXRpbWVzLWJ1aWx0CisKKyBhcHBsaWNhdGlvbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzA1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hdXRvX25saXN0LmM6IHVzZSB0aGUgZmVhdHVyZV91bnVzZWQgbWFjcm8gZm9yIG1ha2luZyBhbgorCisgZW1wdHkgZmlsZSBmb3IgY29uc2lzdGVuY3kgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywKKyAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOCisgICAgICAgVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgYXBwcy9zbm1wdGxzLmMsIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogQW5vdGhlciBzd2VlcCBmb3IgdW51c2VkCisKKyBmdW5jdGlvbnMgd2hlbiByZWFkX29ubHkgbW9kZSBpcyB0dXJuZWQgb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzAzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYworICAgICAgICwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU04KKyAgICAgICBUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS4KKyAgICAgICBjLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYzogbWFyayBhIHNsZXcgb2YgZnVuY3Rpb25zIGFzIGZlYXR1cmVzCisKKyB0aGF0IGFyZSBvbmx5IG5lZWRlZCB3aXRoIHdyaXRlX3N1cHBvcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzAyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGU6IHJ1biBncmVwIHdpdGggLW4gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IAorCisgZmVhdHVyaXplIG5ldHNubXBfc29ja2FkZHJfc2l6ZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzogcmVtb3ZlIGEKKworIGZlYXR1cmVfcmVxdWlyZSBub3QgYWN0dWFsbHkgbmVlZGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjk5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lci5jOiBtYXJrIFNVQkNPTlRBSU5FUl9GSU5ECisKKyBhcyBhIGZlYXR1cmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjk4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcHRzbS5jOiB0aGUgcm93IGNyZWF0aW9uIEFQSSBpcworCisgb25seSB1c2VkIGluIHRoZSBUU00gaW1wbGVtZW50YXRpb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcHRzbS5jOiB0aGUgbmV3ZXIgY29udGV4dCBlbmdpbmVJRAorCisgcHJvYmluZyBpcyBvbmx5IG5lZWRlZCBpZmYgVFNNIGlzIGluIHVzZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvZGlyX3V0aWxzLmM6IGZpeCBhbiBpZmRlZiB0eXBvIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjk1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOiBtb3ZlZCBmZXRhdXJlIGNoaWxkX29mIHN0YXRlbWVudHMgdG8gdGhlCisKKyB0b3Agb2YgdGhlIGZpbGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjk0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9kaXJfdXRpbHMuYywgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jOiBtYXJrZWQgYSBjb3VwbGUgb2YgcmFyZWx5IHVzZWQgY29udGFpbmVyCisKKyBmdW5jdGlvbnMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzogc3BsaXQgb3V0IHRoZSBwcmVmaXhfaW5mbyBmZWF0dXJlCisgICAgICBpbnRvCisKKyBzdWItZmVhdHVyZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjkyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50CisgICAgICAgZXJmYWNlLmM6IG1hcmsgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBhcyB1bm5lZWRlZCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYzogZml4IGEgY2hpbGRfb2Ygc3RhdGVtZW50CisKKyB3aXRoIGEgY29weS9wYXN0ZSBlcnJvciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzogdGhlIGNvbnRhaW5lciByb3ctcmVtb3ZlIGlzIG9ubHkKKworIG5lZWRlZCBpZiB0aGUgdGRhdGEgcmVtb3ZlX3JvdyBpcyBuZWVkZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjg5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU04KKyAgICAgICBUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS4KKyAgICAgICBjOiBmZWF0dXJlIG1hcmtpbmcgb2YgdW51c2VkIHRkYXRhIGZ1bmN0aW9ucyAgICAKKyAgICAgIHRhYmxlX3RkYXRhX2RlbGV0ZV90YWJsZSAgICAgdGFibGVfdGRhdGFfZXh0cmFjdF90YWJsZSAgICAKKyAgICAgIHRhYmxlX3RkYXRhX3JlbW92ZV9yb3cgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYzogcmVtb3ZhbCBvZiBzb21lIHJhcmVseSB1c2VkCisKKyAJZnVuY3Rpb25zIHRhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cgCXRhYmxlX2RhdGFzZXRfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjg3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogQWRkZWQgYSBkZWZpbml0aW9uIHRvIGluY29ycG9yYXRlCisKKyByZWFkX29ubHkvbm90aWZ5X29ubHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjg2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYzogYWRkZWQgYSBtaXNzaW5nIGZlYXR1cmUgZGVmaW5pdGlvbgorCisgbGluZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L01ha2VmaWxlLmluOiBhZGRlZCBiYWNrIGluIG1pc3NpbmcgbWliZ3JvdXAgZmVhdHVyZQorCisgZGVmaW5pdGlvbiBsaXN0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IEluY2x1ZGUgdGhlIG9yaWdpbmFsIGJhc2UgZmxhZ3MgdG8KKworIGVuc3VyZSAtLXdpdGgtZGVmYXVsdHMgZ2V0cyBwaWNrZWQgdXAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjgzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogZml4IHVzYWdlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogQWRkZWQgYSAtYiBmbGFnIGZvciBiYXNlIGFyZ3VtZW50cyB0bworCisgc3RhcnQgZnJvbSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBkZWZhdWx0IHRvIGEgbGluZWFyIHNlYWNoIG9mIHNpemUKKworIHRlc3RzLCByYXRoZXIgdGhhbiBleHBvbmVudGlhbCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOiAKKworIENIQU5HRVM6IHNubXBsaWI6IEd1YXJkIG5ldHNubXBfdWRwX3JlY3Zmcm9tKCkgZXRjLiBkZWNsYXJhdGlvbnMKKyBjb25zaXN0ZW50bHkuICBDSEFOR0VTOiBXaW4zMjogQnVpbGRzIHdpdGggVmlzdWFsIFN0dWRpbyAyMDEwLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDI3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOgorICAgICAgR3VhcmQKKworIG5ldHNubXBfdWRwX3JlY3Zmcm9tKCkgZXRjLiBkZWNsYXJhdGlvbnMgY29uc2lzdGVudGx5LiAgQ0hBTkdFUzoKKyBXaW4zMjogQnVpbGRzIHdpdGggVmlzdWFsIFN0dWRpbyAyMDEwLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDI3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOgorICAgICAgR3VhcmQKKworIG5ldHNubXBfdWRwX3JlY3Zmcm9tKCkgZXRjLiBkZWNsYXJhdGlvbnMgY29uc2lzdGVudGx5LiAgQ0hBTkdFUzoKKyBXaW4zMjogQnVpbGRzIHdpdGggVmlzdWFsIFN0dWRpbyAyMDEwLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogQ0hBTkdFUzogV2luMzI6IFBBVENIOiAzMjkzODQyOiBFbGltaW5hdGUKKworIHJlZ2lzdHJ5IGFyZ3VtZW50IGxpbWl0IG9mIDEyNyBjaGFyYWN0ZXJzICh0aGlzIGxpbWl0YXRpb24gd2FzCisgcmVwb3J0ZWQgYnkgU3lsdmFpbiBEZXJ5KS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAyNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBDSEFOR0VTOiBXaW4zMjogUEFUQ0g6IDMyOTM4NDI6IEVsaW1pbmF0ZQorCisgcmVnaXN0cnkgYXJndW1lbnQgbGltaXQgb2YgMTI3IGNoYXJhY3RlcnMgKHRoaXMgbGltaXRhdGlvbiB3YXMKKyByZXBvcnRlZCBieSBTeWx2YWluIERlcnkpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDI3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IENIQU5HRVM6IFdpbjMyOiBQQVRDSDogMzI5Mzg0MjogRWxpbWluYXRlCisKKyByZWdpc3RyeSBhcmd1bWVudCBsaW1pdCBvZiAxMjcgY2hhcmFjdGVycyAodGhpcyBsaW1pdGF0aW9uIHdhcworIHJlcG9ydGVkIGJ5IFN5bHZhaW4gRGVyeSkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMjc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogQ0hBTkdFUzogV2luMzI6IFBBVENIOiAzMjkzODQyOiBFbGltaW5hdGUKKworIHJlZ2lzdHJ5IGFyZ3VtZW50IGxpbWl0IG9mIDEyNyBjaGFyYWN0ZXJzICh0aGlzIGxpbWl0YXRpb24gd2FzCisgcmVwb3J0ZWQgYnkgU3lsdmFpbiBEZXJ5KS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogaGVhZGVyIGZpbGUKKworIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gY2FuIG5vdyBiZSB1c2VkIGluIHRoZSBNaW5HVworIGVudmlyb25tZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDI3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogaGVhZGVyIGZpbGUKKworIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gY2FuIG5vdyBiZSB1c2VkIGluIHRoZSBNaW5HVworIGVudmlyb25tZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDI3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogaGVhZGVyIGZpbGUKKworIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gY2FuIG5vdyBiZSB1c2VkIGluIHRoZSBNaW5HVworIGVudmlyb25tZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDI3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogaGVhZGVyIGZpbGUKKworIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gY2FuIG5vdyBiZSB1c2VkIGluIHRoZSBNaW5HVworIGVudmlyb25tZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg6IFdpbjMyIERMTCBidWlsZCBmaXhlcy4KKworIChCYWNrcG9ydGVkIHIyMDE4NCBmcm9tIHRydW5rLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDI3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oOiBXaW4zMiBETEwgYnVpbGQgZml4ZXMuCisKKyAoQmFja3BvcnRlZCByMjAxODQgZnJvbSB0cnVuay4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAyNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBTcGVsbGluZyBhbmQgZ3JhbW1hciBmaXhlcyBmb3IgdGhlIHNvdXJjZQorCisgY29kZSBjb21tZW50cyBpbiBzbm1wbGliL3dpbnNlcnZpY2UuYy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAyNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBTcGVsbGluZyBhbmQgZ3JhbW1hciBmaXhlcyBmb3IgdGhlIHNvdXJjZQorCisgY29kZSBjb21tZW50cyBpbiBzbm1wbGliL3dpbnNlcnZpY2UuYy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IFNwZWxsaW5nIGFuZCBncmFtbWFyIGZpeGVzIGZvciB0aGUgc291cmNlCisKKyBjb2RlIGNvbW1lbnRzIGluIHNubXBsaWIvd2luc2VydmljZS5jLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDI3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IFNwZWxsaW5nIGFuZCBncmFtbWFyIGZpeGVzIGZvciB0aGUgc291cmNlCisKKyBjb2RlIGNvbW1lbnRzIGluIHNubXBsaWIvd2luc2VydmljZS5jLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDI3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTkVXUzogYWRkZWQgbm90ZSBhYm91dCB0aGUgbmV3IHRpbWluZyBmdW5jdGlvbiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IFVwZGF0ZSB0aGUgbWFudWFsIHBhZ2UgdG8gcmVmbGVjdCB0aGUgbmV3CisKKyB0aW1pbmcgb3B0aW9ucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdG9vbHMuYzogYmV0dGVyIGRvY3VtZW50YXRpb24gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmM6IHVzZSB0aGUKKworIG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcygpIGZvciBwYXJzaW5nIGZyZXF1ZW5jaWVzL3RpbWUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jOiBmaXggcGR1CisKKyBidWlsZGluZyB0ZXN0cyB1bmRlciB2YXJpb3VzIGRpc2FibGVkIG1vZGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYzogZG9uJ3QgdHJ5IHRvCisKKyBidWlsZCB0aGUgR0VUIHBkdSB1bmRlciBub3RpZnlfb25seSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6IGZpeCBhIGJ1ZyB3aXRoCisKKyBuby1zdWZmaXggc3RyaW5ncyBhbmQgdXNlIGEgY29uc3QgaW5wdXQgc3RyaW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEwbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzX2NsaWIuYzoKKworIEEgbmV3IHVuaXQgdGVzdCBmb3IgdGhlIHRpbWUgY29udmVyc2lvbiByb3V0aW5lIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogdXNlIHRoZQorCisgbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKCkgZnVuY3Rpb24gZm9yIGNvbXB1dGluZyBpbnRlcnZhbAorIHBlcmlvZHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjY1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOiBBZGRlZCBhCisKKyBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoKSBmdW5jdGlvbnMgdG8gY29udmVydCwgZS5nLiwgMWggdG8gMzYwMCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogcmVtb3ZlIGNvZGUgdG8gYnVpbGQvcGFyc2UgR0VUL2V0YyByZXF1ZXN0cworCisgd2hlbiBOT1RJRllfT05MWSBpcyB0dXJuZWQgb24uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE5FV1M6IHVwZGF0ZSB0aGUgTkVXUyB0byByZWZsZWN0IHRoZSBuZXcgLS1lbmFibGUtcmVhZC1vbmx5IGFuZAorCisgLS1lbmFibGUtbm90aWZ5LW9ubHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6IG1pbm9yCisKKyBpbXByb3ZlbWVudHMgZm9yIHJvbmx5IHZzIHJ3cml0ZSBoYW5kbGluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmM6IHN0aWxsIGVuYWJsZQorCisgUk9OTFkgd2hlbiBSV1JJVEUgaXNuJ3QgcG9zc2libGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjYwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzogZml4IEdFVCBzdXBwb3J0IHdoZW4gbm9fd3JpdGUgaXMKKworIGVuYWJsZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjU5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBtYXJrIGEgZnV0dXJlCisKKyBtb2RpZmljYXRpb24gbmVlZCBpbiBhIGNvbW1lbnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy9vbGRfYXBpLmM6IGZpeCBoYW5kbGluZyBvZiBub193cml0ZSBzdXBwb3J0CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF9hZ2VudC5jLCBhZ2VudC9zbm1wZC5jOiAKKworIGRvbid0IG9wZW4gYW55IGxpc3RlbmluZyB0cmFuc3BvcnRzIHdoZW4gbm90aWZ5LW9ubHkgaXMgc3BlY2lmaWVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZTogc2V0IHRoZQorCisgbm8tbGlzdGVuIGFuZCByZWFkLW9ubHkgZmxhZ3Mgd2hlbiAtLWVuYWJsZS1ub3RpZnktb25seSBpcyBzZXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjU1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiByYW4gYXV0b2hlYWRlciBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOiBpbXBsZW1lbnQgdGhlCisKKyBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUIGluIHRoZXNlIHRyYW5zcG9ydHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjUzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IHJ1biBhdXRvY29uZiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6IG1vdmUgdGhlIHJlYWQtb25seSBmbGFnCisKKyBkZWZpbml0aW9uIGJlbG93IHRoZSBub3RpZnktb25seSwgc2luY2Ugbm90aWZ5LW9ubHkgbmVlZHMgdG8gaW1wbHkKKyByZWFkLW9ubHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjUxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOiBEZWZpbmVkIGEgbmV3CisKKyAtLWVuYWJsZS1ub3RpZnktb25seSBmbGFnIGZvciBidWlsZGluZyBhIHRvb2xzZXQgdGhhdCBvbmx5IGFsbG93cworIGZvciBub3RpZmljYXRpb25zIHdpdGggbm8gcmVhZC93cml0ZSBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZTogRGVmaW5lZCBhIG5ldworCisgLS1uby1saXN0ZW4gZmxhZyB0byByZW1vdmUgbGlzdGVuaW5nIHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQ5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaDogdGhlIGRpc21hbiBzY2hlZHVsZSBtaWIgaXMgb25seQorCisgdXNlZnVsIHdoZW4gU0VUcyBhcmUgdHVybmVkIG9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmg6IHRoZSBkaXNtYW4gc2NoZWR1bGUgbWliIGlzIG9ubHkgdXNlZnVsCisKKyB3aGVuIFNFVHMgYXJlIHR1cm5lZCBvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXIKKyAgICAgICBmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmYKKyAgICAgICBhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYzogZmluaXNoZWQgbm9fd3JpdGUgc3VwcG9ydCBmb3IgY29tbW9uIGluY2x1ZGVkIHRhYmxlcworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOiBBZGQgYmFjayBpbgorCisgJ25ldHNubXBfc2V0X3Jvd19jb2x1bW4nIHdoZW4gbm9fd3JpdGUgc3VwcG9ydCBpcyBlbmFibGVkIFRoaXMKKyBmdW5jdGlvbiBpcyBhIGdlbmVyaWMgZGF0YSBtYW5pcHVsYXRpb24gZnVuY3Rpb24sIG5vdCBTRVQgc3BlY2lmaWMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQ1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzogZG9uJ3QgdXNlIG1hcmtfcm93X2NvbHVtbl93cml0YWJsZQorCisgd2hlbiByZWFkLW9ubHkgc3VwcG9ydCBpcyBlbmFibGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYzogZml4IG5vX3dyaXRlIHN1cHBvcnQKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzogZml4IG5vX3dyaXRlIHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzogRG9uJ3QgZnJlZQorCisgdGhlIGlmWFRhYmxlIHJvdyBmb3VuZCBvbiBsb2FkIGZhaWx1cmUgYXMgd2UgZG9uJ3Qgb3duIGl0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAyNDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzogRG9uJ3QgZnJlZQorCisgdGhlIGlmWFRhYmxlIHJvdyBmb3VuZCBvbiBsb2FkIGZhaWx1cmUgYXMgd2UgZG9uJ3Qgb3duIGl0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAyNDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzogRG9uJ3QgZnJlZQorCisgdGhlIGlmWFRhYmxlIHJvdyBmb3VuZCBvbiBsb2FkIGZhaWx1cmUgYXMgd2UgZG9uJ3Qgb3duIGl0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAyNDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzogRG9uJ3QgZnJlZQorCisgdGhlIGlmWFRhYmxlIHJvdyBmb3VuZCBvbiBsb2FkIGZhaWx1cmUgYXMgd2UgZG9uJ3Qgb3duIGl0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAyNDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzogRG9uJ3QgZnJlZQorCisgdGhlIGlmWFRhYmxlIHJvdyBmb3VuZCBvbiBsb2FkIGZhaWx1cmUgYXMgd2UgZG9uJ3Qgb3duIGl0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBnaXQgYmFzaC1zaGVsbCBmdW5jdGlvbnMgdG8gZW5hYmxlCisKKyBicmFuY2ggc3dpdGNoaW5nIGFuZCBleHRlcm5hbCBidWlsZGluZyBUaGVzZSBsb2NhbCBzaGVsbCBmdW5jdGlvbnMKKyAoc25tcGNvbmZpZ3VyZSBhbmQgc25tcG1ha2UpIGxldCB5b3UgY29uZmlndXJlIGFuZCBidWlsZCB0aGUKKyBOZXQtU05NUCBzb3VyY2UgY29kZSBpbiBleHRlcm5hbCBkaXJlY3RvcmllcyB0aGF0IGFyZQorIGF1dG8tY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgYnJhbmNoIG5hbWUgKHdpdGggYW4gb3B0aW9uYWwKKyBzdWZmaXgpLiAgVGhpcyBsZXRzIHlvdSBydW4gJ3NubXBtYWtlJyBmcm9tIHdpdGhpbiB0aGUgc291cmNlCisgZGlyZWN0b3J5IGFuZCBoYXZlIGl0IGFjdHVhbGx5IGV4dGVybmFsbHkga2VlcCB0cmFjayBvZiBtb2RpZmllZAorIGZpbGVzLCBldGMsIHNvIGJ1aWxkaW5nIGluIG11bHRpcGxlIGJyYW5jaGVzIGNhbiBiZSBkb25lIGZyb20gYQorIHNpbmdsZSBnaXQgY2hlY2tvdXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBjbGVhbiB1cCB0aGUgaXRlcmF0b3JzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogZnJlZSB2YXJiaW5kcyBhZnRlcgorCisgc2VuZGluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOiBDb21tZW50ZWQgb3V0IGFuIHVudXNlZCBmdW5jdGlvbgorCisgYmVjYXVzZSB0aGUgY29tcGlsZXIgY29tcGxhaW5lZCBhYm91dCBpdC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IEZpeGVkIHR3byBjb21waWxlcgorCisgd2FybmluZ3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmM6IFJlbW92ZSB1bm5lY2Vzc2FyeSBudWxsIGNoZWNrCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmM6IE1vdmUgcG9pbnRlciBkZXJlZmVyZW5jZSB0byBhZnRlcgorCisgdGhlIGNoZWNrIGZvciBzdWNjZXNzZnVsIGFsbG9jYXRpb24gb2YgdGhlIHBvaW50ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjM0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzogUmVkdWNlIHZhcmlhYmxlIHNjb3BlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzogUmVtb3ZlIGFuIHVudXNlZCB2YXJpYWJsZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6IFJlZHVjZSB2YXJpYWJsZSBzY29wZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6IFJlZHVjZSB2YXJpYWJsZSBzY29wZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzogUmVkdWNlIHZhcmlhYmxlIHNjb3BlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjI4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogbWVudGlvbiB3aGljaCBtb2R1bGUgaXMgcmVxdWlyZWQgd2hlbgorCisgYnVpbGRpbmcgdG8gZ2V0IHRoZSBkZWxpdmVyIHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjI3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBkZWxldGVkIGFuIHVubmVlZGVkCisKKyBkZWJ1Z2dpbmcgc3RhdGVtZW50IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogcHJvcGVybHkgdXBkYXRlIHRoZSBtYXgKKworIGNvdW50IGluIHRoZSBvdXRnb2luZyBub3RpZmljYXRpb25zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogYmV0dGVyIHBhY2tldCBlc3RpbWF0aW9uCisKKyB0byBlbnN1cmUgd2UgZG9uJ3Qgb3ZlcnJ1bi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogZXN0aW1hdGUgdGhlIHBhY2tldCBzaXplCisKKyBhbmQgYnJlYWsgdGhlIG5vdGlmaWNhdGlvbiB1cCBiYXNlZCBvbiBpdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IHRyYW5zZm9ybSB0aGUKKworIG5vdGlmaWNhdGlvbiBzZW5kaW5nIGludG8gYSBsYXJnZXIgbG9vcCBmb3IgbGF0ZXIgbXVsdGktbm90aWZzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIE5FV1M6IGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgZmVhdHVyZSBtYXJraW5nL3NlbGVjdGlvbgorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE5FV1M6IG1lbnRpb24gdGhlIG5ldyBkZWxpdmVyeSBieSBub3RpZmljYXRpb25zIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjIwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBORVdTOiBkb2N1bWVudCB0aGUgbWluaW1hbGlzdCBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogZG9jdW1lbnQgdGhlIG5ldyBkZWxpdmVyQnlOb3RpZnkgY29uZmlnCisKKyB0b2tlbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBhbGxvdyBydW4gdGltZQorCisgbW9kaWZpY2F0aW9ucyBvZiB0aGUgT0lEcyB0byB1c2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjE3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOiBhZGQgY29uZmlnIGZsYWdzIHRvIG5vdAorCisgaW5jbHVkZSB0aGUgcGVyaW9kIGNvbmZpZyBhbmQgbXNnIGNvdW50IHZhbHVlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGluY2x1ZGUgdGhlIHBlcmlvZGljCisKKyBjb3VudCwgdGhlIG1lc3NhZ2UgbnVtYmVyIGFuZCB0aGUgbWF4IG1lc3NhZ2UgbnVtYmVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogZGVsZXRlZCBkZWJ1Z2dpbmcKKworIGNvbW1lbnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICBtaWJzL05FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIudHh0OiBNb3ZlIHRoZSBub3RpZmljYXRpb24KKworIGRlZmluaXRpb24gdG8gd2l0aGluIHRoZSBzdWItbWliIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogZGVsZXRlIGFuIHVudXNlZAorCisgdmFyaWFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOiBsb2FkIHRoZSBNSUIgaW50byB0aGUKKworIGRlZmF1bHQgc2V0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9ORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCLnR4dDogQSBuZXcgbWliIHRvIGhvbGQgdGhlCisKKyBwZXJpb2RpYyBub3RpZnkgb2JqZWN0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGZpbGwgb3V0IHRoZSBjb25maWcgZnJlZQorCisgcm91dGluZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IHByb3Blcmx5IG1vbml0b3IgdGhlCisKKyB3aG9sZSBjb250YWluZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjA4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOiBwYXJzZSB0aGUgY29uZiBmaWxlcyBhbmQKKworIGNyZWF0ZSBhbmQgaW5zZXJ0IG9iamVjdHMgaW50byB0aGUgY29udGFpbmVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogZGVmaW5lZCBhIGNvbnRhaW5lciB0bworCisgc3RvcmUgYSBsaXN0IG9mIGRlbGl2ZXIgb2JqZWN0cyBpbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6IGFkZGVkIGEgbmV4dF9ydW4KKworIHRpbWVzdGFtcCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGFjdHVhbGx5IHNlbmQgYQorCisgbm90aWZpY2F0aW9uIHdpdGggdGhlIHJlc3VsdHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBtYWtlIHRoZSB3YWxrIG9uIHRoZQorCisgdGVzdCBvYmplY3QgZnVuY3Rpb24uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGNyZWF0ZSBhIG1heCBwYWNrZXQgc2l6ZQorCisgY29uZmlnIHRva2VuIGFuZCBwYXJzZSBpdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6IG1pbmltYWwgc3RhcnRpbmcgdGVzdAorCisgb2JqZWN0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDogYWRkZWQgYSBmdW5jdGlvbiB0bworCisgY2FsY3VsYXRlIHRoZSB0aW1lIHVudGlsIHRoZSBuZXh0IHJ1biBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IHJlbW92ZSBsZWZ0IGluIHRlbXBsYXRlCisKKyBsaW5lIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE5OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDogdXNlIGFuIGFsYXJtIGNhbGxiYWNrCisKKyBwcm90b3R5cGUgZm9yIGV4ZWN1dGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTk4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOiBiZWdpbm5pbmcgdGVtcGxhdGUgY29kZQorCisgZm9yIGRlbGl2ZXJ5IG9mIGRhdGEgYnkgbm90aWZpY2F0aW9ucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxOTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6IFJlZHVjZSB2YXJpYWJsZSBzY29wZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE5NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzogUmVkdWNlIHZhcmlhYmxlIHNjb3BlcyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE5NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE5NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvbGlic25tcC9saWJzbm1wLnZjcHJvaiwgd2luMzIvd2luMzIuc2xuOiBBZGRlZCBWaXN1YWwgU3R1ZGlvCisKKyAyMDA1IHByb2plY3QgYW5kIHNvbHV0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIHRoZSBOZXQtU05NUCBsaWJyYXJ5IGFzCisgYSBzdGF0aWMgbGlicmFyeS4gQm90aCB0aGUgV2luMzIgYW5kIHRoZSB4NjQgY29uZmlndXJhdGlvbnMgYXJlCisgaW5jbHVkZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxOTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2o6IE1vcmUgVmlzdWFsIFN0dWRpbyAyMDA1IHByb2plY3QKKyAgICAgIGZpbGUKKworIGNsZWFudXAuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxOTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTggIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2o6IENsZWFuZWQgdXAgV2luMzIgVlMyMDA1IHByb2plY3QKKworIGZpbGVzIC0gcmVtb3ZlZCBzdXBlcmZsdW91cyBsaWJyYXJ5IHJlZmVyZW5jZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxODkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTggIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osIHdpbjMyL3dpbjMyZGxsLnNsbjogQWRkZWQgeDY0CisKKyBjb25maWd1cmF0aW9ucy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE4OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xOCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgd2luMzIvd2luMzJkbGwuc2xuOiBBZGRlZAorCisgd2luMzJkbGwtcmVsYXRlZCBWaXN1YWwgU3R1ZGlvIDIwMDUgcHJvamVjdCBhbmQgc29sdXRpb24gZmlsZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxODYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTggIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaDogV2luMzIgRExMIGJ1aWxkIGZpeGVzLiAKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTg0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE3ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzE3NTY0MDogVXNlCisKKyBJUF9SRUNWRFNUQUREUiBzb2Nrb3B0IHdoZXJlIGF2YWlsYWJsZSAoKkJTRCkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE4MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBkOgorICAgICAgUEFUQ0hFUzoKKworIDMxNzU2NDA6IFVzZSBJUF9SRUNWRFNUQUREUiBzb2Nrb3B0IHdoZXJlIGF2YWlsYWJsZSAoKkJTRCkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE4MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBkOgorICAgICAgUEFUQ0hFUzoKKworIDMxNzU2NDA6IFVzZSBJUF9SRUNWRFNUQUREUiBzb2Nrb3B0IHdoZXJlIGF2YWlsYWJsZSAoKkJTRCkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTgzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0hFUzogMzE4MzAwMDogRml4CisKKyBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggQ0hBTkdFUzogc25tcGxpYjogQlVHUzoKKyAzMTgyOTg1OiBGaXggY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzMTgzMDAwOiBGaXgKKworIGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOgorIDMxODI5ODU6IEZpeCBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDE4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIRVM6IDMxODMwMDA6IEZpeAorCisgY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6CisgMzE4Mjk4NTogRml4IGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0hFUzogMzE4MzAwMDogRml4CisKKyBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggQ0hBTkdFUzogc25tcGxpYjogQlVHUzoKKyAzMTgyOTg1OiBGaXggY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzMTgzMDAwOiBGaXgKKworIGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOgorIDMxODI5ODU6IEZpeCBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgYXBwcy9zbm1wdHJhcGRfZHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBDSEFOR0VTOgorCisgTGludXg6IFBBVENIRVM6IDMyMDU4MTE6IE9wdGlvbiB0byBza2lwIGZkL2xvb3AvcmFtIGRldmljZXMgaW4KKyBkaXNrSU9UYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTgxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgYXBwcy9zbm1wdHJhcGRfZHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBDSEFOR0VTOgorCisgTGludXg6IFBBVENIRVM6IDMyMDU4MTE6IE9wdGlvbiB0byBza2lwIGZkL2xvb3AvcmFtIGRldmljZXMgaW4KKyBkaXNrSU9UYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxODEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogQ0hBTkdFUzogcHl0aG9uOiBQQVRDSEVTOiAzMTg1MDg1OgorCisgRml4IHNlZ2ZhdWx0IG9uIDY0LWJpdCBzeXN0ZW1zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxODAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogQ0hBTkdFUzogcHl0aG9uOiBQQVRDSEVTOiAzMTg1MDg1OgorCisgRml4IHNlZ2ZhdWx0IG9uIDY0LWJpdCBzeXN0ZW1zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxODAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogQ0hBTkdFUzogcHl0aG9uOiBQQVRDSEVTOiAzMTg1MDg1OgorCisgRml4IHNlZ2ZhdWx0IG9uIDY0LWJpdCBzeXN0ZW1zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxODAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogQ0hBTkdFUzogcHl0aG9uOiBQQVRDSEVTOiAzMTg1MDg1OgorCisgRml4IHNlZ2ZhdWx0IG9uIDY0LWJpdCBzeXN0ZW1zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE4MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMxNzUzMjM6IEZpeCBoYW5kbGluZyBvZgorCisgJ3doaWxlIChmYWxzZSknIGJsb2NrcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzE3NTMyMzogRml4IGhhbmRsaW5nIG9mCisKKyAnd2hpbGUgKGZhbHNlKScgYmxvY2tzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxNzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMTc1MzIzOiBGaXggaGFuZGxpbmcgb2YKKworICd3aGlsZSAoZmFsc2UpJyBibG9ja3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMxNzUzMjM6IEZpeCBoYW5kbGluZyBvZgorCisgJ3doaWxlIChmYWxzZSknIGJsb2NrcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzE3NTMyMzogRml4IGhhbmRsaW5nIG9mCisKKyAnd2hpbGUgKGZhbHNlKScgYmxvY2tzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMDQ4ODM6IEZpeCBoYW5kbGluZyBvZgorCisgbm9uLXRhYmxlIG9iamVjdHMgbmFtZWQgZm9vVGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDE3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMDQ4ODM6IEZpeCBoYW5kbGluZyBvZgorCisgbm9uLXRhYmxlIG9iamVjdHMgbmFtZWQgZm9vVGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDE3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMDQ4ODM6IEZpeCBoYW5kbGluZyBvZgorCisgbm9uLXRhYmxlIG9iamVjdHMgbmFtZWQgZm9vVGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMDQ4ODM6IEZpeCBoYW5kbGluZyBvZgorCisgbm9uLXRhYmxlIG9iamVjdHMgbmFtZWQgZm9vVGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMDQ4ODM6IEZpeCBoYW5kbGluZyBvZgorCisgbm9uLXRhYmxlIG9iamVjdHMgbmFtZWQgZm9vVGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIxMTQ4NDogU3VwcG9ydAorCisgZW51bWVyYXRpb25zIGluIG5vdGlmaWNhdGlvbiB2YXJiaW5kcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIxMTQ4NDogU3VwcG9ydAorCisgZW51bWVyYXRpb25zIGluIG5vdGlmaWNhdGlvbiB2YXJiaW5kcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIxMTQ4NDogU3VwcG9ydAorCisgZW51bWVyYXRpb25zIGluIG5vdGlmaWNhdGlvbiB2YXJiaW5kcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIxMTQ4NDogU3VwcG9ydAorCisgZW51bWVyYXRpb25zIGluIG5vdGlmaWNhdGlvbiB2YXJiaW5kcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzIxMTQ4NDogU3VwcG9ydAorCisgZW51bWVyYXRpb25zIGluIG5vdGlmaWNhdGlvbiB2YXJiaW5kcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDogQWRkIG1pc3Npbmcgc3lzdGVtIG9pZHMgdG8gbWliIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDE3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OiBBZGQgbWlzc2luZyBzeXN0ZW0gb2lkcyB0byBtaWIgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6IEFkZCBtaXNzaW5nIHN5c3RlbSBvaWRzIHRvIG1pYiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDogQWRkIG1pc3Npbmcgc3lzdGVtIG9pZHMgdG8gbWliIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OiBBZGQgbWlzc2luZyBzeXN0ZW0gb2lkcyB0byBtaWIgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBmb3IgZ2FyYmFnZSBvdXRwdXQgd2hlbiBhZ2VudCBwcmVzZW50cyBtb3JlCisKKyBjb2x1bW5zIGluIGJ1bGsgcmVzcG9uc2UgdGhhbiBvdXIgbG9jYWwgTUlCIGZpbGUgIHNwZWNpZmllZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBmb3IgZ2FyYmFnZSBvdXRwdXQgd2hlbiBhZ2VudCBwcmVzZW50cyBtb3JlCisKKyBjb2x1bW5zIGluIGJ1bGsgcmVzcG9uc2UgdGhhbiBvdXIgbG9jYWwgTUlCIGZpbGUgIHNwZWNpZmllZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBmb3IgZ2FyYmFnZSBvdXRwdXQgd2hlbiBhZ2VudCBwcmVzZW50cyBtb3JlCisKKyBjb2x1bW5zIGluIGJ1bGsgcmVzcG9uc2UgdGhhbiBvdXIgbG9jYWwgTUlCIGZpbGUgIHNwZWNpZmllZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBmb3IgZ2FyYmFnZSBvdXRwdXQgd2hlbiBhZ2VudCBwcmVzZW50cyBtb3JlCisKKyBjb2x1bW5zIGluIGJ1bGsgcmVzcG9uc2UgdGhhbiBvdXIgbG9jYWwgTUlCIGZpbGUgIHNwZWNpZmllZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBmb3IgZ2FyYmFnZSBvdXRwdXQgd2hlbiBhZ2VudCBwcmVzZW50cyBtb3JlCisKKyBjb2x1bW5zIGluIGJ1bGsgcmVzcG9uc2UgdGhhbiBvdXIgbG9jYWwgTUlCIGZpbGUgIHNwZWNpZmllZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXB0cmFwZC44LmRlZjogRml4IHdyb25nIG5hbWUgZm9yIGNvbmZpZyB0b2tlbgorCisgJ2RvTm90UmV0YWluTm90aWZpY2F0aW9uTG9ncycgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDE3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXB0cmFwZC44LmRlZjogRml4IHdyb25nIG5hbWUgZm9yIGNvbmZpZyB0b2tlbgorCisgJ2RvTm90UmV0YWluTm90aWZpY2F0aW9uTG9ncycgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDE3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXB0cmFwZC44LmRlZjogRml4IHdyb25nIG5hbWUgZm9yIGNvbmZpZyB0b2tlbgorCisgJ2RvTm90UmV0YWluTm90aWZpY2F0aW9uTG9ncycgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXB0cmFwZC44LmRlZjogRml4IHdyb25nIG5hbWUgZm9yIGNvbmZpZyB0b2tlbgorCisgJ2RvTm90UmV0YWluTm90aWZpY2F0aW9uTG9ncycgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXB0cmFwZC44LmRlZjogRml4IHdyb25nIG5hbWUgZm9yIGNvbmZpZyB0b2tlbgorCisgJ2RvTm90UmV0YWluTm90aWZpY2F0aW9uTG9ncycgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmM6IFJlbW92ZSBib2d1cworCisgKExpbnV4KSBkZWZpbmVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYzogUmVtb3ZlIGJvZ3VzCisKKyAoTGludXgpIGRlZmluZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jOiBSZW1vdmUgYm9ndXMKKworIChMaW51eCkgZGVmaW5lcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3NubXAtdGMuYzogSEFWRV9UTV9UTV9HTVRPRkYgaXMgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3NubXAtdGMuYzogSEFWRV9UTV9UTV9HTVRPRkYgaXMgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3NubXAtdGMuYzogSEFWRV9UTV9UTV9HTVRPRkYgaXMgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCBjb25maWd1cmUsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQmlsbCBGZW5uZXJzIHBhdGNoIHRvIG1ha2UKKworIERJU01BTiBQSU5HIGFuZCBUUkFDRVJPVVRFIE1JQlMgY29tcGlsZSB1bmRlciBMaW51eCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIuYzogU29sYXJpcyBzdXBwb3J0IGZvcgorCisgU0NUUC1NSUIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5jOiBTb2xhcmlzIHN1cHBvcnQgZm9yCisKKyBTQ1RQLU1JQiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmM6IFNvbGFyaXMgc3VwcG9ydCBmb3IKKworIFNDVFAtTUlCIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6IFRaIGlzIG9uZSBob3VyIG9mZiBpZiBIQVZFX1RNX1RNX0dNVE9GRiBhbmQKKworIFNZU1YgKHN1Y2ggaXMgTGludXgpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcC10Yy5jOiBUWiBpcyBvbmUgaG91ciBvZmYgaWYgSEFWRV9UTV9UTV9HTVRPRkYgYW5kCisKKyBTWVNWIChzdWNoIGlzIExpbnV4KSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTY5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXAtdGMuYzogVFogaXMgb25lIGhvdXIgb2ZmIGlmIEhBVkVfVE1fVE1fR01UT0ZGIGFuZAorCisgU1lTViAoc3VjaCBpcyBMaW51eCkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTY5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTAxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IGR0bHM6CisKKyBvdmVyaGF1bCBvZiBkZWJ1ZyAgIC0gZHJhc3RpYyByZWR1Y3Rpb24gaW4gbnVtYmVyIG9mIG1lc3NhZ2VzIGFuZCBtc2cgY29tcGxleGl0eSAgICAgZm9yIGJhc2ljIGR0bHN1ZHAgdG9rZW4gICAtIHByZXZpb3VzIGxldmVsIG9mIGRldGFpbCBhdmFpbGFibGUgYnkgYWRkaW5nIDk6ZHRsc2R1cCB0b2tlbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTY4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTAxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IGR0bHM6CisKKyBvdmVyaGF1bCBvZiBkZWJ1ZyAgIC0gZHJhc3RpYyByZWR1Y3Rpb24gaW4gbnVtYmVyIG9mIG1lc3NhZ2VzIGFuZCBtc2cgY29tcGxleGl0eSAgICAgZm9yIGJhc2ljIGR0bHN1ZHAgdG9rZW4gICAtIHByZXZpb3VzIGxldmVsIG9mIGRldGFpbCBhdmFpbGFibGUgYnkgYWRkaW5nIDk6ZHRsc2R1cCB0b2tlbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogZHRsczoKKworIGNsZWFuIHVwIGNsb3NlOyBjYXRjaCAnY29ubmVjdCcvJ2Rpc2Nvbm5lY3QnICAgY29ubmVjdCA9IHdlIGdldCBzdWNjZXNzZnVsbHkgZGVjb2RlZCBzbm1wIGRhdGEgICBkaXNjb25uZWN0ID0gMCBieXRlIHJlYWQsIHNzaCBzaHV0ZG93biBmbGFnIHNldCAgIGFkZCBiaW9fY2FjaGUgZmxhZ3MgZm9yIGNvbm5lY3RlZC9kaXNjb25uZWN0ZWQgICBjaGVjayBmb3IgbnVsbCBwdHIgYmVmb3JlIGRlcmVmZXJlbmNpbmcgICBjbG9zZSBoYW5kbGluZzogICAtICBvbmx5IHNlbmQgcXVldWVkIGRhdGEgaWYgd2UgZ290IHRvIGNvbm5lY3RlZCBzdGF0ZSAgIC0gIHNlcmlvdXNseSByZWR1Y2UgdGltZW91dCB0byB3YWl0IGZvciBqdW5rIHJlYWQuIGkgdGhpbmsgICAgICB3ZSBzaG91bGRuJ3QgZXZlbiBib3RoZXIgICAtIHJldHVybiBlYXJseSBpZiBjYWNoZXAgaXMgTlVMTCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0ZXN0IGl0ICAgICByZXBlYXRlZGx5ICAgLSB1c2UgY29ycmVjdCBuZmRzIHZhbHVlIGluIHNlbGVjdCBjYWxsIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogZHRsczoKKworIGNsZWFuIHVwIGNsb3NlOyBjYXRjaCAnY29ubmVjdCcvJ2Rpc2Nvbm5lY3QnICAgY29ubmVjdCA9IHdlIGdldCBzdWNjZXNzZnVsbHkgZGVjb2RlZCBzbm1wIGRhdGEgICBkaXNjb25uZWN0ID0gMCBieXRlIHJlYWQsIHNzaCBzaHV0ZG93biBmbGFnIHNldCAgIGFkZCBiaW9fY2FjaGUgZmxhZ3MgZm9yIGNvbm5lY3RlZC9kaXNjb25uZWN0ZWQgICBjaGVjayBmb3IgbnVsbCBwdHIgYmVmb3JlIGRlcmVmZXJlbmNpbmcgICBjbG9zZSBoYW5kbGluZzogICAtICBvbmx5IHNlbmQgcXVldWVkIGRhdGEgaWYgd2UgZ290IHRvIGNvbm5lY3RlZCBzdGF0ZSAgIC0gIHNlcmlvdXNseSByZWR1Y2UgdGltZW91dCB0byB3YWl0IGZvciBqdW5rIHJlYWQuIGkgdGhpbmsgICAgICB3ZSBzaG91bGRuJ3QgZXZlbiBib3RoZXIgICAtIHJldHVybiBlYXJseSBpZiBjYWNoZXAgaXMgTlVMTCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0ZXN0IGl0ICAgICByZXBlYXRlZGx5ICAgLSB1c2UgY29ycmVjdCBuZmRzIHZhbHVlIGluIHNlbGVjdCBjYWxsIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0zMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBtYWtlIHRydW5rIGFuZAorCisgdjUtNi1wYXRjaGVzIGNsb3NlbHkgYWxpZ25lZCAgIG1vc3RseSBjaGFuZ2VzIGluIGRlYnVnLCBjb29raWUgdHJhY2tpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE2NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0zMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBtYWtlIHRydW5rIGFuZAorCisgdjUtNi1wYXRjaGVzIGNsb3NlbHkgYWxpZ25lZCAgIG1vc3RseSBjaGFuZ2VzIGluIGRlYnVnLCBjb29raWUgdHJhY2tpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTY2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTMxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IGFkZCBjb29raWUgaGFuZGxpbmc7CisKKyByZW1vdmUgaWZkZWYnZCBjb2RlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjcgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogU2ltcGxpZnkgYXJyYXkgcmVzaXppbmcgc29tZXdoYXQKKworIGZ1cnRoZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTY0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI3ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IERvIG5vdCBhc3NpZ24gbmV3X2RhdGEgaWYgdGhlCisKKyB2YWx1ZSB3b24ndCBiZSB1c2VkLiAgUmVkdWNlIHZhcmlhYmxlIHNjb3Blcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNsZWFyIGEKKworIGNodW5rIG9mIG1lbW9yeSBpZiB0aGUgbmV4dCBhY3Rpb24gb24gaXQgaXMgdG8gZmlsbCBpdCBzbyB1c2UgbWFsbG9jCisgaW5zdGVhZCBvZiBjYWxsb2MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjcgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogQ29udGFpbmVyQmluYXJ5QXJyYXkgcmVhbGx5CisKKyBjYW4ndCBob2xkIGFueXRobmcgYnV0IHBvaW50ZXJzIGFuZCB0aGF0IG1lYW5zIHRoZSBkYXRhX3NpemUgZmllbGQKKyBpcyB1bm5lY2Vzc2FyeSBzbyBJIHJlbW92ZWQgaXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCBhcHBzL3NubXB0cmFwZC5jLCAKKyAgICAgIHNubXBsaWIvaW50NjQuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi9zbm1wX3NlY21vZC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHYzLmM6IEFkZCBtaXNzaW5nIGluY2x1ZGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogVXNlIHRoZSByaWdodCBmZWF0dXJlCisKKyBtYWNybyBpbiBvcmRlciB0byBtYWtlIGJ1aWxkcyB3aXRoIC0tZW5hYmxlLWlwdjYKKyAtLXdpdGgtb3V0LXRyYW5zcG9ydHM9VURQSVB2NiBzdWNjZWVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTU5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IFJlbW92ZSBkdXBsaWNhdGUgY29waWVzIG9mCisKKyBmdW5jdGlvbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI1ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDogdHdlYWsgZGVidWcgbWVzc2FnZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiB1cGRhdGUKKworIGNlcnQgdG9rZW4gaGFuZGxpbmcgIC0gcmVtb3ZlIGRlZlg1MDkgY2VydCB0b2tlbnMgKHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBiZWZvcmUgNS42KSAgLSB3YXJuaW5ncyBmb3Igb3VyL3RoZWlyIHRva2VucywgcmVjb21tZW5kIHVzaW5nIGxvY2FsL3BlZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTU2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI1ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOiBtZXJnZSBuZXRzbm1wX2R0bHN1ZHA2CisgICAgICBpbnRvCisKKyBuZXRzbm1wX2R0bHN1ZHAgICAgdXNlIGFkZHIgc2l6ZSB0byB0ZWxsIHRoZW0gYXBhcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTU1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI1ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOiBsb2cgKG9uY2UpIHdhcm5pbmcgd2hlbiBkZXByZWNhdGVkCisKKyBmX2NyZWF0ZV9mcm9tX3RzdHJpbmcgdHJhbnNwb3J0IGZ1bmN0aW9uIHVzZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTU0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI1ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYzogcmVkdWNlIGNhc3Rpbmc7IG1ha2Ugc3VyZSB0bworCisgZnJlZSB0aGUgcmlnaHQgcG9pbnRlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjUgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzogcmVkdWNlIGNhc3RpbmcgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjQgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOiBSZXBsYWNlIGEgdmFyaWFibGUgd2l0aCBhCisKKyBjb25zdGFudC4gTWFrZSBvbmUgbW9yZSBvaWQgY29uc3QuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTggIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTQ3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE4ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTQ2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE4ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UgZGVwZW5kIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xOCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uCisKKyB1cGRhdGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE0NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xOCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkZWx0YS4xLmRlZjogRm9ybWF0dGluZyBib3RjaCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTcgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZGVsdGEuMS5kZWY6IEZvcm1hdHRpbmcgYm90Y2ggZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTcgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvTWFrZWZpbGUuaW46IEluc3RhbGwgcmVxdWlyZWQgbWlicyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTcgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvTWFrZWZpbGUuaW46IEluc3RhbGwgcmVxdWlyZWQgbWlicyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9yZmNsaXN0OiBOZXcgUkZDIG1pYnMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE3ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL3JmY2xpc3Q6IE5ldyBSRkMgbWlicyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTLCBORVdTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UKKworIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTM2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgCisgICAgICBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwgCisgICAgICBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCBwZXJsL2FnZW50L2FnZW50LnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgICAgVmVyc2lvbgorCisgbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTM1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLnRvcDogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTM0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYzogU3BlbGxpbmcgZml4OiByZWdpbmVyYXRlZCAtPiByZWdlbmVyYXRlZC4gCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jOiBTcGVsbGluZyBmaXg6IHJlZ2luZXJhdGVkIC0+IHJlZ2VuZXJhdGVkLiAKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYzogU2ltcGxpZmllZCByMTk1OTQgKGxlYWstYXQtZXhpdCBmaXgpLiAKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOiBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMKKworIGludHJvZHVjZWQgaW4gcjIwMTEzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEzMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzogRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzCisKKyBpbnRyb2R1Y2VkIGluIHIyMDExMy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEzMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTLCBORVdTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxMjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxMjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UKKworIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTI2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgCisgICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTI1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgCisgICAgICBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwgCisgICAgICBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgICAgVmVyc2lvbgorCisgbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLnRvcDogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTIzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IEZpeCBtYWluIGFnZW50IHNlbGVjdCBjYWxsIHRvIHVzZSB0aGUgcmVuYW1lZCBBUEkKKworIHJvdXRpbmUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTIyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IEZpeCBtYWluIGFnZW50IHNlbGVjdCBjYWxsIHRvIHVzZSB0aGUgcmVuYW1lZCBBUEkKKworIHJvdXRpbmUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTMgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiAKKworIEJyaW5nIHRoZSBuYW1pbmcgb2YgdGhlIGxhcmdlX2ZkX3NldCBzZWxlY3QgY2FsbCBpbnRvIGxpbmUgd2l0aCB0aGUKKyByZXN0IG9mIHRoZSBBUEkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEzICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogCisKKyBCcmluZyB0aGUgbmFtaW5nIG9mIHRoZSBsYXJnZV9mZF9zZXQgc2VsZWN0IGNhbGwgaW50byBsaW5lIHdpdGggdGhlCisgcmVzdCBvZiB0aGUgQVBJLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IAorCisgQnJpbmcgdGhlIG5hbWluZyBvZiB0aGUgbGFyZ2VfZmRfc2V0IHNlbGVjdCBjYWxsIGludG8gbGluZSB3aXRoIHRoZQorIHJlc3Qgb2YgdGhlIEFQSS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IAorCisgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IEFkZCB0aGUgZnVuY3Rpb24KKyBuZXRzbm1wX2xhcmdlX3NlbGVjdCgpIChwbHVzIHR3ZWFrcyB0byBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxMjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTIgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogQ0hBTkdFUzogc25tcGxpYjogcmVhbGxvYytpbml0CisKKyBpbnN0ZWFkIG9mIGNhbGxvYyAgaW5zcGlyZWQgYnkgcGF0Y2ggMzE5NTUzMiBmcm9tIFN0ZXBoZW4gSGVtbWluZ2VyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTIgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogQ0hBTkdFUzogc25tcGxpYjogcmVhbGxvYytpbml0CisKKyBpbnN0ZWFkIG9mIGNhbGxvYyAgaW5zcGlyZWQgYnkgcGF0Y2ggMzE5NTUzMiBmcm9tIFN0ZXBoZW4gSGVtbWluZ2VyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTIgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogQ0hBTkdFUzogc25tcGxpYjogcmVhbGxvYytpbml0CisKKyBpbnN0ZWFkIG9mIGNhbGxvYyAgaW5zcGlyZWQgYnkgcGF0Y2ggMzE5NTUzMiBmcm9tIFN0ZXBoZW4gSGVtbWluZ2VyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaDoKKworIENIQU5HRVM6IHNubXBkOiBQQVRDSDogb3B0aW1pemF0aW9ucyBmb3IgbGFyZ2Ugcm91dGUgdGFibGVzIGZyb20KKyBTdGVwaGVuIEhlbW1pbmdlciAgYXBwbGllZCBwYXJ0cyAxLTMgb2YgNCBmcm9tIGhpbSAobXNncyB0byBjb2RlcnMgb24gMi8yOC8xMTsgc3ViamVjdCAgaXAtZm9yd2FyZC1taWIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzOyBwYXJ0IDQgbmVlZHMgbW9yZSB3b3JrIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxMTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTIgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50CisgICAgICAgZXJmYWNlLmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSDogb3B0aW1pemF0aW9ucyBmb3IgbGFyZ2Ugcm91dGUKKworIHRhYmxlcyBmcm9tIFN0ZXBoZW4gSGVtbWluZ2VyICBhcHBsaWVkIHBhcnRzIDEtMyBvZiA0IGZyb20gaGltIChtc2dzIHRvIGNvZGVycyBvbiAyLzI4LzExOyBzdWJqZWN0ICBpcC1mb3J3YXJkLW1pYiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHM7IHBhcnQgNCBuZWVkcyBtb3JlIHdvcmsgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIOiBvcHRpbWl6YXRpb25zIGZvciBsYXJnZSByb3V0ZQorCisgdGFibGVzIGZyb20gU3RlcGhlbiBIZW1taW5nZXIgIGFwcGxpZWQgcGFydHMgMS0zIG9mIDQgZnJvbSBoaW0gKG1zZ3MgdG8gY29kZXJzIG9uIDIvMjgvMTE7IHN1YmplY3QgIGlwLWZvcndhcmQtbWliIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50czsgcGFydCA0IG5lZWRzIG1vcmUgd29yayBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogYWRkIG1vcmUKKworIG9wZW5zc2wgZXJyb3IgY2FzZXMgd2hlcmUgd2UgY2hlY2sgZm9yIGxvY2FsIGNlcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBhZGQgbW9yZQorCisgb3BlbnNzbCBlcnJvciBjYXNlcyB3aGVyZSB3ZSBjaGVjayBmb3IgbG9jYWwgY2VydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzogTWluR1c6IGRza1RhYmxlOiBSZXBvcnQgemVybyBmb3IKKworIHVuaW1wbGVtZW50ZWQgZmllbGRzIGluc3RlYWQgb2YgcmFuZG9tIGRhdGEuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTE2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6IE1pbkdXOiBkc2tUYWJsZTogUmVwb3J0IHplcm8gZm9yCisKKyB1bmltcGxlbWVudGVkIGZpZWxkcyBpbnN0ZWFkIG9mIHJhbmRvbSBkYXRhLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTE2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQgcmFjZQorCisgY29uZGl0aW9uIGluIGhyU1dSdW5UYWJsZSBUcmVhdCB0aGUgcmVhZHMgZnJvbSAvcHJvYy88cGlkPi8qCisgY2FyZWZ1bHksIHByb2Nlc3NlcyBjYW4gZXhpdCBpbiB0aGUgbWlkZGxlIG9mIHByb2Nlc3NpbmcuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTE1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQgcmFjZQorCisgY29uZGl0aW9uIGluIGhyU1dSdW5UYWJsZSBUcmVhdCB0aGUgcmVhZHMgZnJvbSAvcHJvYy88cGlkPi8qCisgY2FyZWZ1bHksIHByb2Nlc3NlcyBjYW4gZXhpdCBpbiB0aGUgbWlkZGxlIG9mIHByb2Nlc3NpbmcuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTE1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6IENIQU5HRVM6IHNubXBkOiBCdWlsZHMKKworIHdpdGggbW9zdCByZWNlbnQgTWluR1cgKGhhdmluZyAjZGVmaW5lIGxvY2FsdGltZV9yKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzogQ0hBTkdFUzogc25tcGQ6IEJ1aWxkcworCisgd2l0aCBtb3N0IHJlY2VudCBNaW5HVyAoaGF2aW5nICNkZWZpbmUgbG9jYWx0aW1lX3IpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYzogQ0hBTkdFUzogc25tcGxpYjoKKworIHJlZmluZSBjZXJ0IGRlYnVnZ2luZzsgcmVtb3ZlIHVudXNlZCBmdW5jdGlvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYzogQ0hBTkdFUzogc25tcGxpYjoKKworIHJlZmluZSBjZXJ0IGRlYnVnZ2luZzsgcmVtb3ZlIHVudXNlZCBmdW5jdGlvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOiBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMjA1NzY1OiBoYW5kbGUgcmVjb25maWcKKworIGZvciBjZXJ0U2VjTmFtZSB0b2tlbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzogQ0hBTkdFUzogc25tcGQ6IEJVRzogMzIwNTc2NTogaGFuZGxlIHJlY29uZmlnCisKKyBmb3IgY2VydFNlY05hbWUgdG9rZW4gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBTcGVsbGluZyBmaXggaW4gYSBzb3VyY2UgY29kZSBjb21tZW50OiBtZXNzZ2VzIC0+CisKKyBtZXNzYWdlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IFNwZWxsaW5nIGZpeCBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQ6IG1lc3NnZXMgLT4KKworIG1lc3NhZ2VzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogTWlub3IKKworIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvZiBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBNaW5vcgorCisgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9mIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMyMDM4MDY6IEF2b2lkIHRoYXQgdGhlIG1haW4KKworIGFnZW50IHByb2Nlc3NpbmcgbG9vcCAtIHdoZW4gdXNpbmcgbW9yZSB0aGFuIEZEX1NFVFNJWkUgZmlsZQorIGRlc2NyaXB0b3JzIC0gY2FuIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIGJ5IGludm9raW5nIHNlbGVjdCgpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEwOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMjAzODA2OiBBdm9pZCB0aGF0IHRoZSBtYWluCisKKyBhZ2VudCBwcm9jZXNzaW5nIGxvb3AgLSB3aGVuIHVzaW5nIG1vcmUgdGhhbiBGRF9TRVRTSVpFIGZpbGUKKyBkZXNjcmlwdG9ycyAtIGNhbiBjYXVzZSBtZW1vcnkgY29ycnVwdGlvbiBieSBpbnZva2luZyBzZWxlY3QoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEwOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiAKKworIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBBZGQgdGhlIGZ1bmN0aW9uCisgbmV0c25tcF9sYXJnZV9zZWxlY3QoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogCisKKyBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogQWRkIHRoZSBmdW5jdGlvbgorIG5ldHNubXBfbGFyZ2Vfc2VsZWN0KCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jOiAKKworIEZpeGVkIHR3byBjb21waWxlciB3YXJuaW5ncyAoYmFja3BvcnRlZCByMjAwOTggZnJvbSB0aGUgdHJ1bmspLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEwNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDlsYXJnZV9mZF9zZXRfY2xpYi5jOiBBZGRlZCBhCisKKyBtaW5pbWFsIHVuaXQgdGVzdCBmb3IgbmV0c25tcF9sYXJnZV9mZF9zZXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA5bGFyZ2VfZmRfc2V0X2NsaWIuYzogQWRkZWQgYQorCisgbWluaW1hbCB1bml0IHRlc3QgZm9yIG5ldHNubXBfbGFyZ2VfZmRfc2V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEwNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IE1ha2UKKworIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIGNsZWFyIGFsbCByZWxldmFudCBmaWxlIGRlc2NyaXB0b3JzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTA1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogTWFrZQorCisgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkgY2xlYXIgYWxsIHJlbGV2YW50IGZpbGUgZGVzY3JpcHRvcnMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTA1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcC10Yy5jOiBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMTc4Mzg5OiBGaXggaW5jb25zaXN0ZW50CisKKyBoYW5kbGluZyBvZiBUWiBvZmZzZXRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxMDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6IENIQU5HRVM6IHNubXBkOiBCVUc6IDMxNzgzODk6IEZpeCBpbmNvbnNpc3RlbnQKKworIGhhbmRsaW5nIG9mIFRaIG9mZnNldHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDEwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXAtdGMuYzogQ0hBTkdFUzogc25tcGQ6IEJVRzogMzE3ODM4OTogRml4IGluY29uc2lzdGVudAorCisgaGFuZGxpbmcgb2YgVFogb2Zmc2V0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcC10Yy5jOiBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMTc4Mzg5OiBGaXggaW5jb25zaXN0ZW50CisKKyBoYW5kbGluZyBvZiBUWiBvZmZzZXRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXAtdGMuYzogQ0hBTkdFUzogc25tcGQ6IEJVRzogMzE3ODM4OTogRml4IGluY29uc2lzdGVudAorCisgaGFuZGxpbmcgb2YgVFogb2Zmc2V0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjogbWFrZQorCisgdmFyaWFibGUgbmFtZXMgbWF0Y2ggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDk5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYzogCisKKyBGaXhlZCB0d28gY29tcGlsZXIgd2FybmluZ3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOiBmaXhlZCBpbnN0YWxsYXRpb24KKworIHZhcmlhYmxlcyBmb3IgdGhlIG9wdGlvbmFsIFNFVCBwcm9ncmFtcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXM6IGNobW9kIGEreCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6IHByaW50IGFuIGVycm9yIGlmIHRoZSBlbmQgb2YKKworIGEgZmlsZSB3YXMgcmVhY2hlZCBhbmQgd2UncmUgbm90IGJhY2sgaW50byB0aGUgc3RhdGUgd2UgY2FuIHdyaXRlOworIG90aGVyd2lzZSBhIGNsb3NpbmcgI2lmZGVmIGlzIG1pc3NpbmcuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOiBmaXggZW5kaWYgY29tbWVudCB0byBtYXRjaAorCisgdGhlIG9wZW5pbmcgaWZkZWYgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDk0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDogcmVzZXQgdGhlIGNhbndyaXRlIGZsYWcgZm9yCisKKyBldmVyeSBmaWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlczogdGVtcG9yYXJpbHkgbGVhdmUgaW4KKworIGhlYWRlciBmaWxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjOiBjaGFuZ2UgdGhlIHVuaXF1ZSBmaWxlIGNoZWNrIHRvIG9uZSB0aGF0CisKKyBpcyBub3QgaW4gdGhlIG1pYmdyb3VwIGRpcmVjdG9yeSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3JlYWQtb25seS9UMDE0MXNubXB2MmNzZXRmYWlsX3NpbXBsZTogYSB0ZXN0IGZvcgorCisgZW5zdXJpbmcgdGhlIGFnZW50IHJlamVjdHMgU0VUIHJlcXVlc3RzIHdpdGggLS1lbmFibGUtcmVhZC1vbmx5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0MXNubXB2MmNzZXRfc2ltcGxlOiBhZGQgYmFjayBpbiB0aGUKKworIHN0b3BhZ2VudCBjb21tYW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMXBkdV90eXBlX2NsaWIuYywgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwM3BkdV9wYXJzZV9jbGliLmM6IHVuaXQgdGVzdHMKKyAgICAgIHdyaXRlbgorCisgZm9yIHRoZSByZWFkLW9ubHkgc3VwcG9ydCBjb252ZXJ0ZWQgdG8gd29yayB3aXRoIG9yIHdpdGhvdXQKKyByZWFkLW9ubHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDg4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGU6IGRvbid0IHJ1biB0aGUKKworIHNldCB0ZXN0IGlmIG5vX3dyaXRlX3N1cHBvcnQgaXMgdHVybmVkIG9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX3NpbXBsZTogc2tpcCBpZgorCisgbm9fd3JpdGVfc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZTogQSBuZXcgdGVzdCB0bworCisgY2hlY2sgd2hldGhlciBTTk1QdjJjIFNFVHMgdG8gc3lzQ29udGFjdCB3b3JrIGFzIGV4cGVjdGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFueWNvbmZpZzogYWxsb3cgZm9yIHYyYyBTRVQgc3VwcG9ydAorCisgdGVzdGluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOiBBbGxvdyBmb3Igc2luZ2xlIHF1b3RlcyBmb3IgdmFjbQorCisgY29udGV4dCBuYW1lIHF1b3RpbmcgdG9vIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBmaXggdGhlIGNvbmZpZ3VyZSB0ZXN0cyB0byBpbmNsdWRlIHRoZSB3b3JkIHRlc3QgaW4gdGhlCisKKyB0ZXN0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOiBmaXggdGhlIGNvbmZpZ3VyZSB0ZXN0cyB0byBpbmNsdWRlCisKKyB0aGUgd29yZCB0ZXN0IGluIHRoZSB0ZXN0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlczogQWRkZWQgYW4gYW5ub3lpbmdseSBsb25nCisKKyBsaXN0IG9mIGV4Y2VwdGlvbnMgdGhhdCBuZWVkcyB0byBiZSBhdXRvbWF0ZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDgwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzOiBBIHF1aWNrIHBlcmwgc2NyaXB0IHRvCisKKyByZW1vdmUgdW5uZWVkZWQgY29kZSBtb2R1bGVzIGZyb20gdGhlIG1vZHVsZXMgZGlyZWN0b3J5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3ZhY20uYzogbW9yZQorCisgaW1wcm92ZW1lbnRzIChyZW1vdmVtZW50cykgZm9yIGZlYXR1cml6YXRpb24gYW5kIHJlYWQtb25seSBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIOgorCisgMzE5NTUzNzogTWlub3IgYmluYXJ5X2FycmF5IGNvbnRhaW5lciBzb3J0IG9wdGltaXphdGlvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6CisKKyAzMTk1NTM3OiBNaW5vciBiaW5hcnlfYXJyYXkgY29udGFpbmVyIHNvcnQgb3B0aW1pemF0aW9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jOiBUYWJzIHRvIHNwYWNlcworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA2ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmM6IFRhYnMgdG8gc3BhY2VzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6IENvbmZpZ3VyZSBjaGVjayBmb3IgZ2V0aG9zdG5hbWUyCisKKyBVc2UgZ2V0YWRkcmluZm8gaWYgYXZhaWxhYmxlLiBOb3cgd29ya3MgZm9yIFNvbGFyaXMgKGFuZCBXaW5kb3dzPykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6IENvbmZpZ3VyZSBjaGVjayBmb3IgZ2V0aG9zdG5hbWUyCisKKyBVc2UgZ2V0YWRkcmluZm8gaWYgYXZhaWxhYmxlLiBOb3cgd29ya3MgZm9yIFNvbGFyaXMgKGFuZCBXaW5kb3dzPykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA1ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGVzdC5jOiBBZGQgZHJvcHBlZCB8fCdzIGZyb20gcjIwMDcyIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA1ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jOiBDbGVhbiB1cCwgYW5kCisKKyBjb3NvbGlkYXRlIHJlc3VsdCB0YWJsZSByb3cgY3JlYXRpb24gaW50byBhIG5ldyBmdW5jdGlvbi4gIFNhdmVzIDIwMAorIGxpbmVzIG9mIGNvZGUsIHdpdGggKGhvcGVmdWxseSkgbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuYzogQ2xlYW4gdXAsIGFuZAorCisgY29zb2xpZGF0ZSByZXN1bHQgdGFibGUgcm93IGNyZWF0aW9uIGludG8gYSBuZXcgZnVuY3Rpb24uICBTYXZlcyAyMDAKKyBsaW5lcyBvZiBjb2RlLCB3aXRoIChob3BlZnVsbHkpIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvc25tcHRlc3QuYywgY29uZmlndXJlLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjogZG9uJ3QgYnVpbGQgU0VUIHJlbGF0ZWQgYXBwcyB3aXRoCisKKyAtLWVuYWJsZS1yZWFkLW9ubHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6IGZpeAorCisgaXNzdWVzIHdpdGggY29tYmluaW5nIC0tZW5hYmxlLW1pbmltYWxpc3QgYW5kIC0tZW5hYmxlLXJlYWQtb25seSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZTogYmV0dGVyIG91dHB1dCBmb3IgZmluZGluZworCisgb2JqZWN0IHN5bWJvbHMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIE1pa2UgQmFlciA8YmFlcm1Ac3VzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDogbGFzdCBjb21taXQ6IGNoYW5nZXMgdG8gYWxsb3cKKworIHBhcnNpbmcgb2YgZmVhdHVlcnMgZmlsZXMgdG8gZ2V0IGFsbCBtaW5pbWFsaXN0IHRhZ3Mgd2hpY2ggYXJlIHRoZW4KKyBwcm9jZXNzZWQgZm9yIHJlbW92YWwgdGhpcyBjb21taXQ6IGNoYW5nZWQgY29tbWVudHMvd2hpdGUgc3BhY2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDY5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBNaWtlIEJhZXIgPGJhZXJtQHN1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOiBhZGRlZCBub193cml0ZSBzdXBwb3J0IHRvIGV4dGVuZC5jCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgTWlrZSBCYWVyIDxiYWVybUBzdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYzogQWRkZWQgbWlzc2luZyAjZW5kaWYgY29tbWVudCBmb3IgcmVtb3ZlCisKKyBpZmRlZiBjb2RlIHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDY3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBNaWtlIEJhZXIgPGJhZXJtQHN1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6IGFkZGVkIGNoYW5nZXMgdG8gYWxsb3cgY29kZQorCisgcmVtb3ZhbCBpbi1wbGFjZSAoaS5lLiBkb2VzIG5vdCByZXF1aXJlIGNyZWF0aW5nIGEgbmV3IGZpbGUpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgTWlrZSBCYWVyIDxiYWVybUBzdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvaWdub3JlLnJlZ2V4cDogYWRkaW5nIGEgaWdub3JlLnJlZ2V4cCBmaWxlIHRoYXQKKworIGNhbiBiZSB1c2VkIHdpdGggcmVtb3ZlaWZkZWZjb2RlLnBsIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBhZGQgYSBvdXRnb2luZyBsaW5rIHRvIHRoZQorCisgcGFyZW50IG1hcmtpbmcgcGFnZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IEFkZGVkIGEgd2lraSBvdXRwdXQgbW9kZQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogTm90ZSB0aGF0IHRoZSBvcmcgb3V0cHV0IGlzIHRoZQorCisgZGVmYXVsdCBpbiB0aGUgaGVscCBvdXRwdXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZAorCisgJ3RydW5jYXRpbmcgaW50ZWdlciB2YWx1ZSA+IDMyIGJpdHMnIGluIFVDRC1TTk1QLU1JQjo6c3lzdGVtU3RhdHMgb24KKyBMaW51eCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMDYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZAorCisgJ3RydW5jYXRpbmcgaW50ZWdlciB2YWx1ZSA+IDMyIGJpdHMnIGluIFVDRC1TTk1QLU1JQjo6c3lzdGVtU3RhdHMgb24KKyBMaW51eCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMDYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZAorCisgJ3RydW5jYXRpbmcgaW50ZWdlciB2YWx1ZSA+IDMyIGJpdHMnIGluIFVDRC1TTk1QLU1JQjo6c3lzdGVtU3RhdHMgb24KKyBMaW51eCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZAorCisgJ3RydW5jYXRpbmcgaW50ZWdlciB2YWx1ZSA+IDMyIGJpdHMnIGluIFVDRC1TTk1QLU1JQjo6c3lzdGVtU3RhdHMgb24KKyBMaW51eCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLAorICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworIHJlY2xhc3NpZmljYXRpb24gb2YgdGhlIHJlbWFpbmluZyBmZWF0dXJlcyBpbnRvIGEgaGllcmFyY2h5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzogZG9uJ3QgZG91YmxlLWRlY2xhcmUgY2VydF91dGlscyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA1OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOiB0aGUKKworIGlwYWRkcmVzc19saW51eCB3YXMgaW5jb3JyZWN0bHkgbWFya2VkIGFzIG5lZWRpbmcgY2VydF9maW5nZXJwcmludHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOiBwdXQgdGhlIGFnZW50X3JlZ2lzdHJ5IGZlYXR1cmUgaW4KKworIGxpYm5ldHNubXBhZ2VudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6IENIQU5HRVM6IFdpbjMyOiBEZXByZWNhdGVkCisKKyBsaWJzbm1wLmRlZiAtIGFkZCBORVRTTk1QX0lNUE9SVCB0byBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW5zdGVhZCB0bworIGV4cG9ydCBhIGZ1bmN0aW9uIGZyb20gbmV0c25tcC5kbGwuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDU2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjogQ0hBTkdFUzogV2luMzI6IERlcHJlY2F0ZWQKKworIGxpYnNubXAuZGVmIC0gYWRkIE5FVFNOTVBfSU1QT1JUIHRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbnN0ZWFkIHRvCisgZXhwb3J0IGEgZnVuY3Rpb24gZnJvbSBuZXRzbm1wLmRsbC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA1NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDogTW92ZWQgYSBzb3VyY2UgY29kZSBjb21tZW50CisKKyBzdWNoIHRoYXQgaXQgaXMgYWdhaW4gaW1tZWRpYXRlbHkgYWJvdmUgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpdAorIGFwcGxpZXMgdG8uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDU1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6IEFkZGVkIG1pc3NpbmcKKyAgICAgIE5FVFNOTVBfSU1QT1JUCisKKyBkZWNsYXJhdGlvbnMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDogQWRkZWQgbWlzc2luZworICAgICAgTkVUU05NUF9JTVBPUlQKKworIGRlY2xhcmF0aW9ucy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRlZiwgd2luMzIvbGlidWNkbWlicy9saWJ1Y2RtaWJzLmRlZjogCisKKyBSZW1vdmVkIHR3byBvYnNvbGV0ZSBXaW4zMiBmaWxlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZGVmLCB3aW4zMi9saWJ1Y2RtaWJzL2xpYnVjZG1pYnMuZGVmOiAKKworIFJlbW92ZWQgdHdvIG9ic29sZXRlIFdpbjMyIGZpbGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jOiBUcml2aWFsIGNvbW1lbnQgZml4OgorCisgc25tcElQdjZCYXNlRG9tYWluLmMgY29udGFpbnMgSVB2NiBiYXNlIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworIGluc3RlYWQgb2YgSVB2NC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jOiBUcml2aWFsIGNvbW1lbnQgZml4OgorCisgc25tcElQdjZCYXNlRG9tYWluLmMgY29udGFpbnMgSVB2NiBiYXNlIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworIGluc3RlYWQgb2YgSVB2NC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2NvbmZpZy5oOiBSZW1vdmVkIGFuIG9ic29sZXRlIGZpbGUuICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA1MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCB3aW4zMi9zbm1wc21fc2h1dGRvd24uaCwgCisgICAgICB3aW4zMi9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaDogQnVpbGRzIGFnYWluIHdpdGggVmlzdWFsIFN0dWRpbworCisgYWZ0ZXIgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgImZlYXR1cmUiIGZlYXR1cmUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL3NubXBzbV9pbml0Lmg6IFJlbW92ZWQgYSBtaXNsZWFkaW5nIGNvbW1lbnQuICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOiBDb3JyZWN0IHRoZSBjaGVjayBvZgorCisgd2V0aGVyIHVzbSBzZWN1cml0eSBpcyBlbmFibGVkLiAgUmVnZW5lcmF0ZSBjb25maWd1cmUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQ2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmM6IEFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tCisKKyBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQ0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXIuYzogU3BsaXQgdGhlIGNvbnRhaW5lcl9jb21wYXJlX2Z1bmN0aW9ucyBmZWF0dXJlCisKKyBpbnRvIGNvbnRhaW5lcl9jb21wYXJlX21lbSwgY29udGFpbmVyX2NvbXBhcmVfbG9uZywKKyBjb250YWluZXJfY29tcGFyZV91bG9uZywgY29udGFpbmVyX2NvbXBhcmVfaW50MzIgYW5kCisgY29udGFpbmVyX2NvbXBhcmVfdWludDMyIFVuaWZ5IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvbXBhcmUKKyBmdW5jdGlvbnMgZnVydGhlci4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyLmM6IENoYW5nZSB0aGUgc3BlbGxpbmcgb2YgdGhlCisKKyBjb250YWluZXJfY29tcGFyZV9jc3RyaW5nIGZlYXR1cmUgdG8gY29udGFpbmVyX25jb21wYXJlX2NzdHJpbmcgYXMKKyB0aGF0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGd1YXJkZWQgYnkgdGhhdCBhdHRyaWJ1dGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDogQWRkIHRoZSBtaXNzaW5nIHJlcGxhY2VtZW50CisKKyBtYWNybyBmb3Igc25tcF9pbml0X3N0YXRpc3RpY3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6IHNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieQorCisgdGFrZXMgdHdvIGFyZ3VtZW50cyBzbyBsZXQgdGhlIHJlcGxhY2VtZW50IG1hY3JvIHRha2UgdHdvIGFyZ3VtZW50cworIGFzIHdlbGwuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjcgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jOiBGaXggdHlwbyBpbgorCisgcjE5OTkwIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjazogUmVtb3ZlIGxpbmVzIHN0YXJ0aW5nIHdpdGggI2RlZmluZQorCisgaW4gdGhlIG91dHB1dCBvZiB0aGUgcHJlcHJvY2Vzc29yIFdoZW4gZ2NjIC1FIGlzIGNhbGxlZCB3aXRoIC1nZ2RiMworIChvciAtZEQpIHRoZW4gYWxsIHRoZSBtYWNybyBkZWZpbml0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlCisgcHJlcHJvY2Vzc29yIGFuZCB0aGF0IG1lc3NlcyB1cCBvdXIgcHJvY2Vzc2luZy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLnJ1bGVzOiBQdXQgdGhlIGdlbmVyYXRlZCBmaWxlIGluIHRoZSBidWlsZCB0cmVlLCBub3QgdGhlCisKKyBzb3VyY2UgdHJlZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyCisgICAgICAgZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmYKKyAgICAgICBhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYywgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjOiBtb3ZlZCBhIGJ1bmNoIG9mIGZlYXR1cmVzIGludG8gdGhlIGxpYm5ldHNubXBtaWJzIGZlYXR1cmUgc2V0LgorICAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDM2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF9pbmRleC5jLCAKKyAgICAgIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2FnZW50X3RyYXAuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfcm93LmMsIAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0cywgc25tcGxpYi9taWIuYzoKKworIGNsYXNzaWZpZWQgbGlibmV0c25tcGFnZW50IGZlYXR1cmVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IHJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSBsaWJyYXJpZXMKKworIChzbm1wbGliIGZpcnN0KSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBvdXRwdXQgY2xlYW51cCBhbmQgYWRkZWQgYWdlbnQtbWlicworCisgYW5kIGxvZ2dpbmcgb3B0aW9ucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBhZGQgYSBkZWZhdWx0IHNldCBvZiBhcmd1bWVudHMKKworIGNhbGN1bGF0ZSByZXN1bHRpbmcgc2l6ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2Rpcl91dGlscy5jOiBBZGRlZCBhIG1pc3NpbmcgOyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IHByZWZpeCB0aGUgb3V0cHV0IGZpbGVzIHdpdGggYSBudW1iZXIKKworIHRvIGluZGljYXRlIG9yZGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IHNhdmUgdGhlIHJlc3VsdHMgb2YgdGhlIHN5c3RlbQorCisgZXhlY3V0aW9ucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBlbmFibGUgYnVpbGRpbmcgb2YgdGhlIHJlc3VsdGluZworCisgY29tYmluYXRpb25zIEFkZCBhIC1uIGZsYWcgZm9yIGRyeS1ydW5zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBlbmFibGUgdGhlIC10IHRhZyBmb3IgbGltaXRpbmcgdHlwZXMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDI3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogQWRkZWQgYXJndW1lbnQgcGFyc2luZyBhbmQgYXJndW1lbnRzCisKKyBmb3Igc2VsZWN0aW5nIGFuZCBsaXN0aW5nIHR5cGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGdlbmVyYXRlIGNvbmZpZ3VyZSBzY3JpcHQgYXJndW1lbnRzCisKKyBmcm9tIHNwZWNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGFkZGVkIGEgYnVuY2ggb2YgbmV3IGZlYXR1cmUgb3B0aW9ucworCisgYW5kIGNsZWFuZWQgdXAgYSBiaXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogYWRkZWQgYSBuZXcgKG5vdCB5ZXQgd29ya2luZykgc2NyaXB0CisKKyB0byB0ZXN0IHNpemluZyBvZiB2YXJpb3VzIGFyZ3VtZW50IHNldHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDIzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzogU2ltcGxpZnkgdGhlIGNvZGUuIFVuaWZ5IHNvbWUKKworIGRlYnVnIGxvZ3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOiBSZWR1Y2UgdGhlIHNjb3BlIG9mIGEgZmV3CisKKyB2YXJpYWJsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6IFJlbW92ZSBzb21lIHVudXNlZCBpbmNsdWRlcy4gCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6IE1ha2UgaXQgcG9zc2libGUgdG8KKworIGluaXRpYWxpemUvdW5pbml0aWFsaXplIG1vZHVsZXMgd2l0aCA2NCBjaGFyYWN0ZXIgbmFtZXMgYW5kIG5vdAorIHN1ZmZlciB3aWxkIHdyaXRlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6IENvZGUgcmVzdHJ1Y3R1cmluZyAtIHB1dCB0aGUKKworIG1hbmFnZWQgcm91dGluZXMgYmVmb3JlIHRoZSBtYW5hZ21lbnQgY29kZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmg6IAorCisgQ0hBTkdFUzogbGlibmV0c25tcG1pYnM6IE1ha2UgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgZGxtb2QgbW9kdWxlIHRoYXQKKyBkb24ndCBoYXZlIHRvIGJlIHB1YmxpYyBzdGF0aWMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDE3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzogUmVuYW1lIGRlaW5pdF9kbG1vZCB0bworCisgc2h1dGRvd25fZGxtb2QgYXMgdGhhdCBpcyB3aGF0IGl0IHJlYWxseSBpcyBhYm91dC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgTWlrZSBCYWVyIDxiYWVybUBzdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmM6IGFkZGluZyBtaW5pbWFsaXN0IGlmZGVmcworCisgdG8gbmV0LXNubXAtdmFjbSBtaWIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDE1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IHByb3Blcmx5IGhhbmRsZSB0d2luIGNoaWxkcmVuOworCisgYWxzbyBzb3J0IHRoZSBjaGlsZCBsaXN0IGFscGhhYmV0aWNhbGx5LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOiBJIHN1cHBvc2UgbG9nZ2luZyBzaG91bGQgcHJvYmFibHkgZGVmYXVsdAorCisgdG8gYmVpbmcgYSB3YW50ZWQgb3B0aW9uIDotKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogb3JnLWxpbmsgdGhlIGZpbGVzIGluIHRoZQorCisgb3V0cHV0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIE1ha2VmaWxlLnJ1bGVzLCBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4sIAorICAgICAgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2ssIHNubXBsaWIvTWFrZWZpbGUuaW46IG1ha2UgdGhlCisKKyBmZWF0dXJlcy1jaGVjayBzY3JpcHQgdHJhY2sgdGhlIGZ1bGwgc291cmNlIHBhdGggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IGNoYW5nZSB0aGUgZnVuY3Rpb24gbmFtZXMgdG8KKworIG1hdGNoIHRoYXQgaXQncyBwcmludGluZyB0byBvcmctbW9kZSBhdCB0aGUgbW9tZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9maWxlX3V0aWxzLmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvb2lkX3N0YXNoLmMsIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3Rvb2xzLmM6IGxhc3QKKyAgICAgIG9mCisKKyB0aGUgZmVhdHVyZSBjbGFzc2lmaWNhdGlvbiBpbiBsaWJuZXRzbm1wIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xjZF90aW1lLmMsIHNubXBsaWIvc2NhcGkuYzogbWFrZSB0aGUKKworIHVzbV9zdXBwb3J0IHV0aWxpdGllcyBzZWxmLWRlY2xhcmUgdGhlbXNlbHZlcyBhcyBjaGlsZHJlbiB0byBtYWtlCisgc3VyZSB0aGV5J3JlIHByb3Blcmx5IGluY2x1ZGVkIGR1cmluZyBkZXBlbmRlbmN5IG9yZGVyaW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvY2FsbGJhY2suYywgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jaGVja192YXJiaW5kLmMsIAorICAgICAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9kYXRhX2xpc3QuYywgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsCisgICAgICAgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsIHNubXBsaWIvZmlsZV91dGlscy5jLCAKKyAgICAgIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9zbm1wdXNtLmM6IHN1cGVyc3RydWN0dXJhbGl6YXRpb25pemluZworCisgdGhlIGZlYXR1cmVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zbm1wLXRjLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXBfZW51bS5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvc3lzdGVtLmMsIAorICAgICAgc25tcGxpYi90ZXh0X3V0aWxzLmMsIHNubXBsaWIvdG9vbHMuYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi91Y2RfY29tcGF0LmM6CisKKyBzaWduaWZpY2FudCBwYXJlbnQvY2hpbGQgZmVhdHVyZSBjbGFzc2lmaWNhdGlvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wdXNtLmM6IGNsYXNzaWZ5IGEgZmV3IGNvbXBvbmVudHMKKworIGludG8gYSB0b3AtbGV2ZWwgbGlibmV0c25tcCBjb21wb25lbnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDA1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xjZF90aW1lLmMsIHNubXBsaWIvc2NhcGkuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogc3RydWN0dXJpemUgdGhlIHVzbSBmZWF0dXJlcyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMsIHNubXBsaWIvY29udGFpbmVyX251bGwuYywgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jOiBzdHJ1Y3R1cmUgdGhlIGNvbnRhaW5lciBmZWF0dXJlcyBpbnRvIGEKKworIGhpZXJhcmNoeSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6IGdyb3VwIHRoZSBsb2dnaW5nIGhhbmRsZXJzIHVuZGVyIGEgcGFyZW50CisKKyBmZWF0dXJlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogZml4IHRoZSBleHBlY3QgYXJndW1lbnQgY291bnQKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDAxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IGZpeCB0aGUgbmFtZSBvZiB0aGUgZXhwZWN0ZWQKKworIGlucHV0IGZpbGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDAwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IGFyZ3VtZW50IHBhcnNpbmcgYW5kIHVzYWdlKCkKKworIG91dHB1dCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5OTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsIHNubXBsaWIvb2lkX3N0YXNoLmM6IC0KKyAgICAgIGFkZGVkIHR3byBvaWRfc3Rhc2ggZnVuY3Rpb25zIGFzIGluZGl2aWR1YWwgZmVhdHVyZXMgLSBjbGVhbmVkIHVwCisgICAgICBzb21lIHdhcm5pbmdzIGluIHRoZSB0YWJsZV9pdGVyYXRvciBjb2RlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTk4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBkaXN0L21ha2VyZWxlYXNlLnhtbDogRml4IHRoZSBjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBTVk4gdGFnIGxpbmUKKyAgICAgIChIYXZpbmcgYnJvdWdodCB0aGUgc3RydWN0dXJlIG9mIHRoZSA1LjUueCBicmFuY2ggIGludG8gbGluZSB3aXRoCisgICAgICB0aGUgb3RoZXIgYnJhbmNoZXMsIHRoZSBwcmV2aW91cyAgY29tbWFuZCBpcyBub3cgd3JvbmcgZm9yICphbGwqCisgICAgICBicmFuY2hlcywgcmF0aGVyICB0aGFuIGp1c3QgbW9zdCBvZiB0aGVtISkgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBkaXN0L21ha2VyZWxlYXNlLnhtbDogRml4IHRoZSBjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBTVk4gdGFnIGxpbmUKKyAgICAgIChIYXZpbmcgYnJvdWdodCB0aGUgc3RydWN0dXJlIG9mIHRoZSA1LjUueCBicmFuY2ggIGludG8gbGluZSB3aXRoCisgICAgICB0aGUgb3RoZXIgYnJhbmNoZXMsIHRoZSBwcmV2aW91cyAgY29tbWFuZCBpcyBub3cgd3JvbmcgZm9yICphbGwqCisgICAgICBicmFuY2hlcywgcmF0aGVyICB0aGFuIGp1c3QgbW9zdCBvZiB0aGVtISkgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDE5OTk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBkaXN0L21ha2VyZWxlYXNlLnhtbDogRml4IHRoZSBjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBTVk4gdGFnIGxpbmUKKyAgICAgIChIYXZpbmcgYnJvdWdodCB0aGUgc3RydWN0dXJlIG9mIHRoZSA1LjUueCBicmFuY2ggIGludG8gbGluZSB3aXRoCisgICAgICB0aGUgb3RoZXIgYnJhbmNoZXMsIHRoZSBwcmV2aW91cyAgY29tbWFuZCBpcyBub3cgd3JvbmcgZm9yICphbGwqCisgICAgICBicmFuY2hlcywgcmF0aGVyICB0aGFuIGp1c3QgbW9zdCBvZiB0aGVtISkgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBkaXN0L21ha2VyZWxlYXNlLnhtbDogRml4IHRoZSBjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBTVk4gdGFnIGxpbmUKKyAgICAgIChIYXZpbmcgYnJvdWdodCB0aGUgc3RydWN0dXJlIG9mIHRoZSA1LjUueCBicmFuY2ggIGludG8gbGluZSB3aXRoCisgICAgICB0aGUgb3RoZXIgYnJhbmNoZXMsIHRoZSBwcmV2aW91cyAgY29tbWFuZCBpcyBub3cgd3JvbmcgZm9yICphbGwqCisgICAgICBicmFuY2hlcywgcmF0aGVyICB0aGFuIGp1c3QgbW9zdCBvZiB0aGVtISkgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5OTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbgorCisgdXBkYXRlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5OTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwKKyAgICAgICBwZXJsL09JRC9PSUQucG0sIHBlcmwvU05NUC9TTk1QLnBtLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG06IFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTk0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTkzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sCisgICAgICAgcGVybC9PSUQvT0lELnBtLCBwZXJsL1NOTVAvU05NUC5wbSwgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtOiBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk5MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB2My5jOiBBdm9pZCBhIHBvc3NpYmxlIGNyYXNoIGlmIHRoZSBlbmdpbmVJRCBpcyBub3QKKworIGF2YWlsYWJsZSBvciBzZXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDE5OTkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHYzLmM6IEF2b2lkIGEgcG9zc2libGUgY3Jhc2ggaWYgdGhlIGVuZ2luZUlEIGlzIG5vdAorCisgYXZhaWxhYmxlIG9yIHNldC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMTk5OTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdjMuYzogQXZvaWQgYSBwb3NzaWJsZSBjcmFzaCBpZiB0aGUgZW5naW5lSUQgaXMgbm90CisKKyBhdmFpbGFibGUgb3Igc2V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB2My5jOiBBdm9pZCBhIHBvc3NpYmxlIGNyYXNoIGlmIHRoZSBlbmdpbmVJRCBpcyBub3QKKworIGF2YWlsYWJsZSBvciBzZXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5OTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdjMuYzogQXZvaWQgYSBwb3NzaWJsZSBjcmFzaCBpZiB0aGUgZW5naW5lSUQgaXMgbm90CisKKyBhdmFpbGFibGUgb3Igc2V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgTWlrZSBCYWVyIDxiYWVybUBzdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oOiBhZGRpbmcgaWZkZWYgY29kZQorCisgZm9yIG1pbmltYWxpc3Qgc3VwcG9ydCBvZiBkaWZmbWFuIG1pYiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5OTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjQgIE1pa2UgQmFlciA8YmFlcm1Ac3VzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5oOgorCisgQWRkaW5nIG1pbmltYWxpc3QgaWZkZWZzIHRvIGhvc3QgcmVzb3VyY2UgbWliIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBzbm1wbGliL2RhdGFfbGlzdC5jOiBtYXJrIHRoZQorCisgZGF0YV9saXN0IGZ1bmN0aW9uIHRoYXQncyBvbmx5IHVzZWQgaW4gc3RhY2hfY2FjaGluZyBhcyBhIGZlYXR1cmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTg4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmM6IHdob29wcy4gIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTg3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jOiBtb3JlIG1pc3Npbmcgc3Rhc2ggcmVmZXJlbmNlcworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYzogaWZkZWZlZC9mZWF0dXJlZCBvdXQgYSBtaXNzaW5nCisKKyBzdGFzaF9jYWNoZSBzZWN0aW9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOiBtYWtlIHRoZSBwcmVmaXhfaW5mbyBtb3JlCisKKyBoaWVyYXJjaGljYWwgYW5kIHN1Yi1mZWF0dXJlIHRoZSB1bnVzZWQgb25lIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlOiBkbyBpbmNsdWRlIHRoZSBwZXJsL3B5dGhvbiBjb2RlCisKKyB3aGVuIHNlYXJjaGluZyBmb3IgZmlsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTgzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6IG1ha2UgdGhlIHNlbWktdXNlZCB0YWJsZV90ZGF0YQorCisgZnVuY3Rpb25zIGNoaWxkcmVuIG9mIHRhYmxlX3RkYXRhX2FsbCBpbnN0ZWFkIG9mIGp1c3QgdGFibGVfdGRhdGEgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOiBDb3JyZWN0IHR5cG8gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENvcnJlY3QgdHlwbyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcF92YXJzLmM6IHByb3BlciBpbmNsdWRlIG9mIHByb3RvdHlwZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZTogY29tcGF0IHNvbWUgZmVhdHVyZSBoZWFkZXIKKworIGNoaWNrZW4gYW5kIGVnZyBwcm9ibGVtcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBfdmFycy5jOiBJbmNsdWRlIHJlcXVpcmVkIHByb3RvdHlwZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOiB1bnNpZ25lZCBqdWdnbGluZyB0byByZW1vdmUgd2FybmluZ3MgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaCwKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworIHVuc2lnbmVkIGp1Z2dsaW5nIHRvIHJlbW92ZSB3YXJuaW5ncyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyB1bnNpZ25lZCBqdWdnbGluZyB0byByZW1vdmUgd2FybmluZ3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIuaDogRW5hYmxlIChwcm9iYWJseSBmb3Jnb3R0ZW4pCisKKyBpcEFkZHJlc3NQcmVmaXhUYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIuaDogRW5hYmxlIChwcm9iYWJseSBmb3Jnb3R0ZW4pCisKKyBpcEFkZHJlc3NQcmVmaXhUYWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2ssIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzLAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZSwgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGUsIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6IGFkZGVkIG90aGVyIG1pc3NpbmcgJ25ldycKKyAgICAgIGZpbGVzCisKKyBub3QgaW5jbHVkZWQgaW4gdGhlIG1pbmltYWxpc3QgcGF0Y2ggZmlsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYzogTG9hZGluZworCisgSVB2NiBkYXRhIGlzIGEgbm8tbm8gd2hlbiBJUHY2IG5vdCBlbmFibGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYzogTG9hZGluZworCisgSVB2NiBkYXRhIGlzIGEgbm8tbm8gd2hlbiBJUHY2IG5vdCBlbmFibGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGJ1ZyAzMTE4NjMxOiBzbm1wdGFibGUgc2VnZmF1bHRzIGlmIGluZGV4CisKKyBjb250YWlucyA6IGNoYXJhY3RlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDE5OTcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggYnVnIDMxMTg2MzE6IHNubXB0YWJsZSBzZWdmYXVsdHMgaWYgaW5kZXgKKworIGNvbnRhaW5zIDogY2hhcmFjdGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMTk5NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBidWcgMzExODYzMTogc25tcHRhYmxlIHNlZ2ZhdWx0cyBpZiBpbmRleAorCisgY29udGFpbnMgOiBjaGFyYWN0ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGJ1ZyAzMTE4NjMxOiBzbm1wdGFibGUgc2VnZmF1bHRzIGlmIGluZGV4CisKKyBjb250YWlucyA6IGNoYXJhY3RlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggYnVnIDMxMTg2MzE6IHNubXB0YWJsZSBzZWdmYXVsdHMgaWYgaW5kZXgKKworIGNvbnRhaW5zIDogY2hhcmFjdGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDguaDogRnJlZUJTRCA4IHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDE5OTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkOC5oOiBGcmVlQlNEIDggc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q4Lmg6IEZyZWVCU0QgOCBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDguaDogRnJlZUJTRCA4IHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaDogYWRkZWQgbWlzc2luZworCisgbmV0LXNubXAtZmVhdHVyZXMuaCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBNYWtlZmlsZS5pbiwgTWFrZWZpbGUucnVsZXMsIE1ha2VmaWxlLnRvcCwgYWdlbnQvTWFrZWZpbGUuaW4sIAorICAgICAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF9pbmRleC5jLCAKKyAgICAgIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIAorICAgICAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9tdWx0aXBsZXhlci5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvc2NhbGFyLmMsIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfcm93LmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhYworICAgICAgIGUuYywgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9raW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfCisgICAgICAgYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcgorICAgICAgIGZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmEKKyAgICAgICBjZS5jLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmEKKyAgICAgICBjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmEKKyAgICAgICBjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9pbnRlcmZhY2UuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMKKyAgICAgICAsIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2ludGVyZmFjZS5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmYKKyAgICAgICBhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYywgYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU04KKyAgICAgICBUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS4KKyAgICAgICBjLCBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgYWdlbnQvc25tcF92YXJzLmMsICBhZ2VudC9zbm1wZC5jLAorICAgICAgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9hZ2VudHh0cmFwLmMsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9uZXRzdGF0LmgsIGFwcHMvc25tcG5ldHN0YXQvcm91dGUuYywgCisgICAgICBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCBhcHBzL3NubXB0cmFwZC5jLCAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIGFwcHMvc25tcHRyYXBkX3NxbC5jLCBjb25maWd1cmUsIAorICAgICAgY29uZmlndXJlLmFjLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlcywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzLAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgcGVybC9PSUQvT0lELnhzLCAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzLCBzbm1wbGliL01ha2VmaWxlLmluLCAKKyAgICAgIHNubXBsaWIvY2FsbGJhY2suYywgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jaGVja192YXJiaW5kLmMsIAorICAgICAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYywgc25tcGxpYi9jb250YWluZXJfbnVsbC5jLCAKKyAgICAgIHNubXBsaWIvZGF0YV9saXN0LmMsIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCBzbm1wbGliL2Rpcl91dGlscy5jLAorICAgICAgIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCBzbm1wbGliL2ZpbGVfdXRpbHMuYywKKyAgICAgIHNubXBsaWIvaW50NjQuYywgIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sY2RfdGltZS5jLAorICAgICAgc25tcGxpYi9taWIuYywgIHNubXBsaWIvb2lkX3N0YXNoLmMsIHNubXBsaWIvcGFyc2UuYywKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wLXRjLmMsCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsICBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcF9lbnVtLmMsCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCAgc25tcGxpYi9zbm1wX29wZW5zc2wuYywKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsICBzbm1wbGliL3NubXBfc2VjbW9kLmMsCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvc25tcGtzbS5jLCAgc25tcGxpYi9zbm1wdHNtLmMsCisgICAgICBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi9zbm1wdjMuYywgIHNubXBsaWIvc3lzdGVtLmMsCisgICAgICBzbm1wbGliL3RleHRfdXRpbHMuYywgc25tcGxpYi90b29scy5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi91Y2RfY29tcGF0LmMsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjNjb25maWcsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdiYXNlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdmFjbWNvbmZpZywgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlOiBORVdTOgorCisgcGFja2FnaW5nOiBFbmFibGUgbWljcm8tYW5kLW1hY3JvLWZlYXR1cmUgbWFuYWdlbWVudCB3aXRoaW4KKyBOZXQtU05NUDsgdGhpcyBhZGRzIGEgbnVtYmVyIG9mIG5ldyBmbGFncyB0byBjb25maWd1cmUKKyAoLS1lbmFibGUtbWluaW1hbGlzdCBhbmQgLS1lbmFibGUtcmVhZC1vbmx5KS4gIFRoZXNlIGNoYW5nZXMgYXJlCisgZGVzaWduZWQgdG8gcmVtb3ZlIG11Y2ggb2YgdGhlIGlubGluZSBjb2RlIHRoYXQgaXNuJ3QgYWx3YXlzCisgbmVjZXNzYXJ5IG9yIGRlc2lyZWQuICBTY3JpcHRzIGV4aXN0IChhbmQgd2lsbCBiZSBpbXByb3ZlZCkgdG8gc3RpcAorIG91dCB1bnVzZWQgY29tcG9uZW50cyBmcm9tIHRoZSBjb2RlIGVudGlyZWx5IHRvIGVuYWJsZSBhIHNob3J0ZXIKKyByZXZpZXcgcHJvY2VzcyBmb3IgdXBncmFkaW5nIHRvIG5ldyByZWxlYXNlcy4gIFRoaXMgd29yayB3YXMgZG9uZSBieQorIFdlcyBIYXJkYWtlciBhbmQgTWljaGFlbCBCYWVyIGZyb20gU1BBUlRBLCBJbmMuIGJ1dCBpcyBiZWluZyBjaGVja2VkCisgaW4gYXMgYSBsYXJnZSBwYXRjaCBzaW5jZSBjb252ZXJ0aW5nIHRoZSBtaWNybyBwYXRjaGVzIGZyb20gZ2l0IHRvCisgc3ZuIHR1cmVuZCBvdXQgdG8gYmUgaW1wb3NzaWJsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIEZBUTogdXNlIHRoZSB3aWtpIFVSTCBpbnN0ZWFkIG9mIHRoZSB0dXRvcmlhbC01IFVSTCBmb3IgdGhlCisKKyBzbm1wdHJhcCB0dXRvcmlhbCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzogUmV2ZXJ0IGEgYm9ndXMgY2hhbmdlIHRoYXQgY3JlcHQKKworIGludG8gdGhlIGNvZGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTY2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBBR0VOVC50eHQsIENIQU5HRVMsIENPUFlJTkcsIENoYW5nZUxvZywgQ29kaW5nU3R5bGUsIAorICAgICAgRVhBTVBMRS5jb25mLmRlZiwgRkFRLCBJTlNUQUxMLCBNYWtlZmlsZS5hbSwgTWFrZWZpbGUuaW4sIAorICAgICAgTWFrZWZpbGUucnVsZXMsIE1ha2VmaWxlLnRvcCwgTkVXUywgUE9SVElORywgUkVBRE1FLCAKKyAgICAgIFJFQURNRS5QYW5hc29uaWNfQU0zWC50eHQsIFJFQURNRS5hZ2VudC1taWJzLCBSRUFETUUuYWdlbnR4LCAKKyAgICAgIFJFQURNRS5haXgsIFJFQURNRS5ocHV4MTEsIFJFQURNRS5pcml4LCBSRUFETUUua3JiNSwgUkVBRE1FLm9zWCwgCisgICAgICBSRUFETUUuc25tcHYzLCBSRUFETUUuc29sYXJpcywgUkVBRE1FLnNxbCwgUkVBRE1FLnRocmVhZCwgCisgICAgICBSRUFETUUudHJ1NjQsIFJFQURNRS53aW4zMiwgVE9ETywgYWNjb25maWcuaCwgYWNsb2NhbC5tNCwgCisgICAgICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIAorICAgICAgYWdlbnQvYWdlbnRfaW5kZXguYywgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgCisgICAgICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMsIAorICAgICAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9hdXRvX25saXN0LmMsIGFnZW50L2F1dG9ubGlzdC5oLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYywgYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYywgYWdlbnQvaGVscGVycy9tdWx0aXBsZXhlci5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvbnVsbC5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvc2NhbGFyLmMsIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9zZXJpYWxpemUuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2dlbmVyaWMuYywgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfcm93LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgYWdlbnQva2VybmVsLmMsIGFnZW50L2tlcm5lbC5oLCAKKyAgICAgIGFnZW50L20ybS5oLCBhZ2VudC9taWJfbW9kdWxlcy5jLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL1JFQURNRSwgCisgICAgICBhZ2VudC9taWJncm91cC9SRUFETUUuc211eCwgYWdlbnQvbWliZ3JvdXAvUm1vbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vUkVBRE1FLCBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmgsIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsX2FwaS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmgsICBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmgsICBhZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5oLCAgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dfYXBpLmgsCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYywgIGFnZW50L21pYmdyb3VwL1Jtb24vcm93cy5oLAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi90ZXN0X2FsYXJtLnNoLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vdGVzdF9oaXN0LnNoLCBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuaCwgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuaCwgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuaCwgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnRfbWlicy5oLCBhZ2VudC9taWJncm91cC9hZ2VudHguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgsIGFnZW50L21pYmdyb3VwL2Rpc21hbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC1taWIuaCwgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlU2NhbGFycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVTY2FsYXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFNjYWxhcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBTY2FsYXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwX2VudW0uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFcnJvclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cFZhbHVlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vb2xkLWV2ZW50LW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjCisgICAgICAgZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjYworICAgICAgIGVzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQKKyAgICAgICAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0CisgICAgICAgLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldAorICAgICAgIC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQKKyAgICAgICAuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2VudW1zLmgsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWMKKyAgICAgICBlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhYworICAgICAgIGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX29pZHMuaCwKKyAgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy5oLCBhZ2VudC9taWJncm91cC9leGFtcGxlcy9NYWtlZmlsZS5kbG1vZCwKKyAgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NvbHVtbnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9lbnVtcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuY21kcywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmNvbmYsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy93YXRjaGVkLmgsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rZXJuZGF0YS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2VybmRhdGEuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9raW5mby5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa3N0YXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tzdGF0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9ubGlzdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbnVsbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbnVsbC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGNwLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wY3AuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcHN0YXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BzdGF0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzaW5mby5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW91bnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZGFyd2luLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9keW5peC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfaHB1eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfaXJpeC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X251bGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3dpbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2R1bW15X3NlbnNvcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2R1bW15X3NlbnNvcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC5oLCBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfZGFyd2luLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfbnVsbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fY3lnd2luLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9kYXJ3aW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9rdm1fcHJvYy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbmxpc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX251bGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmMsCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuaCwgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfb3RoZXIuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfb3RoZXIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmgsCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmMsICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmgsCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuYywgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5oLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuaCwgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uaCwgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5oLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5oLCBhZ2VudC9taWJncm91cC9ob3N0X3Jlcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGVmcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2RhdGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2RhdGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfY29uc3RhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9kYXRhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfZGF0YV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfaW50ZXJmYWNlLmgsIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9jb24KKyAgICAgICBzdGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludAorICAgICAgIGVyZmFjZS5oLCBhZ2VudC9taWJncm91cC9pcC1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2NvbW1vbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnN0CisgICAgICAgYW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV8KKyAgICAgICBhY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfCisgICAgICAgYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcgorICAgICAgIGZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyCisgICAgICAgZmFjZS5oLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb24KKyAgICAgICBzdGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludAorICAgICAgIGVyZmFjZS5oLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfY29uc3RhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5oLAorICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0CisgICAgICAgYV9nZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0CisgICAgICAgYV9nZXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZW51CisgICAgICAgbXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludAorICAgICAgIGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWQKKyAgICAgICBzLmgsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCwKKyAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZW51bXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9vaWRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9jb25zdGFuCisgICAgICAgdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjCisgICAgICAgY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWMKKyAgICAgICBjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmgsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2NvbnN0YW4KKyAgICAgICB0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2RhdGFfYWMKKyAgICAgICBjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfZGF0YV9hYworICAgICAgIGNlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VuCisgICAgICAgdC5jLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2NvbnN0YW4KKyAgICAgICB0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWMKKyAgICAgICBjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hYworICAgICAgIGNlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuaCwgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX2RhdGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX2RhdGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX2VudW1zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9pbnRlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfb2lkcy5oLCBhZ2VudC9taWJncm91cC9pcGZ3Y2hhaW5zL1JFQURNRSwgCisgICAgICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS5oLCBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmgsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmgsIGFnZW50L21pYmdyb3VwL21pYklJL2lmVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5oLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmgsIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jb2x1bW5zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZV9lbnVtcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5oLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5oLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuaCwgIGFnZW50L21pYmdyb3VwL21pYmRlZnMuaCwKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYmluY2wuaCwgIGFnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MKKyAgICAgICAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzCisgICAgICAgLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmgsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5oLAorICAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZW51bXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jCisgICAgICAgLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmgKKyAgICAgICAsIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfb2lkcy5oLAorICAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jLCBhZ2VudC9taWJncm91cC9zbXV4LmgsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4X2dhdGVkLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9jb25zdGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFBhcmFtZXRlcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFBhcmFtZXRlcnMvdXNtREhQYXJhbWV0CisgICAgICAgZXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhQYXJhbWV0ZXJzL3VzbURIUGFyYW1ldAorICAgICAgIGVycy5oLAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfZGF0YV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9kYXRhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2RhdGFfZ2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfZGF0YV9nZXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9kYXRhX3NldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2RhdGFfc2V0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfZG94eWdlbi5jb25mLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2VudW1zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfaW50ZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfb2lkcy5oLCBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmgsIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL01ha2VmaWxlLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fcHJpdmF0ZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ublRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfY29uc3RhCisgICAgICAgbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYQorICAgICAgIGNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYQorICAgICAgIGNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZgorICAgICAgIGFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmYKKyAgICAgICBhY2UuaCwgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2NvbnN0YW50cy4KKyAgICAgICBoLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXMKKyAgICAgICBzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2NlcworICAgICAgIHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgaCwgYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYywgYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwuaCwgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuaCwgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaCwgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmgsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9ocHV4LmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2hwdXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2hwdXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfaHB1eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Rfc25tcC5oLCBhZ2VudC9taWJncm91cC91ZHAtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3ByaXZhdGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9jb25zdGFudHMuCisgICAgICAgaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2VzCisgICAgICAgcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXMKKyAgICAgICBzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLgorICAgICAgIGMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLgorICAgICAgIGgsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMuaCwgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9zbm1wX2dldF9zdGF0aXN0aWMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC92ZXJzaW9udGFnLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgCisgICAgICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuaCwgYWdlbnQvb2JqZWN0X21vbml0b3IuYywgCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGFnZW50L3NubXBfcGVybC5jLCBhZ2VudC9zbm1wX3BlcmwuaCwgCisgICAgICBhZ2VudC9zbm1wX3BlcmwucGwsIGFnZW50L3NubXBfdmFycy5jLCBhZ2VudC9zbm1wZC5jLCAKKyAgICAgIGFnZW50L3NubXBkLmgsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmluLCAKKyAgICAgIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCBhcHBzL3NubXBfcGVybF90cmFwZC5wbCwgCisgICAgICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsIAorICAgICAgYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2Zmcy5jLCBhcHBzL3NubXBuZXRzdGF0L2lmLmMsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmgsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9uZXRzdGF0LmgsIGFwcHMvc25tcG5ldHN0YXQvcm91dGUuYywgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuYywgYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmgsIAorICAgICAgYXBwcy9zbm1wc2V0LmMsIGFwcHMvc25tcHN0YXR1cy5jLCBhcHBzL3NubXB0YWJsZS5jLCAKKyAgICAgIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhbnNsYXRlLmMsIGFwcHMvc25tcHRyYXAuYywgCisgICAgICBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9hdXRoLmMsIGFwcHMvc25tcHRyYXBkX2F1dGguaCwgCisgICAgICBhcHBzL3NubXB0cmFwZF9kcy5oLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmgsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2xvZy5oLCBhcHBzL3NubXB0cmFwZF9zcWwuYywgYXBwcy9zbm1wdXNtLmMsIAorICAgICAgYXBwcy9zbm1wdmFjbS5jLCBhcHBzL3NubXB3YWxrLmMsIGFwcHMvc3NodG9zbm1wLmMsIGNvbmZpZy5ndWVzcywgCisgICAgICBjb25maWcuc3ViLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMywgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLAorICAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvUkVBRE1FLmJ1aWxkLXNjcmlwdHMsIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlMsIAorICAgICAgZGlzdC9hdXRvY29uZi12ZXJzaW9uLCBkaXN0L2NoYW5nZWxvZ2ZpeCwgZGlzdC9jaGVjay1hcGktY2hhbmdlLCAKKyAgICAgIGRpc3QvY3Zzc2hvdywgZGlzdC9jdnN1cCwgZGlzdC9leHRyYWN0bmV3cywgZGlzdC9maW5kLXJlcXVpcmVzLCAKKyAgICAgIGRpc3QvbWFrZXJlbGVhc2UueG1sLCBkaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvREVWRU5WLCAKKyAgICAgIGRpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9SRUFETUUsIAorICAgICAgZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2J1aWxkcGFja2FnZS1zb2xhcmlzLCAKKyAgICAgIGRpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9lbGZkZXBlbmQuc2gsIGRpc3QvbmV0LXNubXAuc3BlYywgCisgICAgICBkaXN0L25zYi1jb25maWcsIGRpc3QvbnNiLWZ1bmN0aW9ucywgZGlzdC9uc2ItbmlnaHRseSwgCisgICAgICBkaXN0L25zYi1wYWNrYWdlLCBkaXN0L25zYi1wbGF0Zm9ybSwgZGlzdC9wYXRtZSwgCisgICAgICBkaXN0L3NjaGVtYS1zbm1wdHJhcGQuc3FsLCBkaXN0L3NubXBkLWluaXQuZCwgCisgICAgICBkaXN0L3NubXB0cmFwZC1pbml0LmQsIGRpc3Qvc3ZudXAsIGRvYy9yZmMvYWdlbnR4L3JmYzI3NDEudHh0LCAKKyAgICAgIGRvYy9yZmMvbWlzYy9yZmMzNTEyLnR4dCwgZG9jL3JmYy9taXNjL3JmYzM1ODQudHh0LCAKKyAgICAgIGRvYy9yZmMvc21pVjIvcmZjMjU3OC50eHQsIGRvYy9yZmMvc21pVjIvcmZjMjU3OS5lcnJhdGEsIAorICAgICAgZG9jL3JmYy9zbWlWMi9yZmMyNTc5LnR4dCwgZG9jL3JmYy9zbWlWMi9yZmMyNTgwLnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMS9yZmMxMTU1LnR4dCwgZG9jL3JmYy9zbm1wVjEvcmZjMTE1Ny50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjEvcmZjMTIxMi50eHQsIGRvYy9yZmMvc25tcFYxL3JmYzEyMTMudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYyL3JmYzE5MDEudHh0LCBkb2MvcmZjL3NubXBWMi9yZmMxOTAyLnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMi9yZmMxOTAzLnR4dCwgZG9jL3JmYy9zbm1wVjIvcmZjMTkwNC50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjIvcmZjMTkwNS50eHQsIGRvYy9yZmMvc25tcFYyL3JmYzE5MDYudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYyL3JmYzE5MDcudHh0LCBkb2MvcmZjL3NubXBWMi9yZmMxOTA4LnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMi9yZmMyMDg5LnR4dCwgZG9jL3JmYy9zbm1wVjMvcmZjMzQxMC5lcnJhdGEsIAorICAgICAgZG9jL3JmYy9zbm1wVjMvcmZjMzQxMC50eHQsIGRvYy9yZmMvc25tcFYzL3JmYzM0MTEudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYzL3JmYzM0MTIudHh0LCBkb2MvcmZjL3NubXBWMy9yZmMzNDEzLmVycmF0YSwgCisgICAgICBkb2MvcmZjL3NubXBWMy9yZmMzNDEzLnR4dCwgZG9jL3JmYy9zbm1wVjMvcmZjMzQxNC5lcnJhdGEsIAorICAgICAgZG9jL3JmYy9zbm1wVjMvcmZjMzQxNC50eHQsIGRvYy9yZmMvc25tcFYzL3JmYzM0MTUuZXJyYXRhLCAKKyAgICAgIGRvYy9yZmMvc25tcFYzL3JmYzM0MTUudHh0LCBkb2MvcmZjL3NubXBWMy9yZmMzNDE2LnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMy9yZmMzNDE3LnR4dCwgZG9jL3JmYy9zbm1wVjMvcmZjMzQxOC5lcnJhdGEsIAorICAgICAgZG9jL3JmYy9zbm1wVjMvcmZjMzQxOC50eHQsIGRvdGdkYmluaXQsIGRveHlnZW4uY29uZiwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaW5kZXguaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2JqZWN0X21vbml0b3IuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXRfaGVscGVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgsIGluY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvbmV0LXNubXAtZGF0YS1hY2Nlc3MtaW5jbHVkZXMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy90Y3BDb25uLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9SRUFETUUsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jbXVfY29tcGF0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCwKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaCwgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBbGlhc0RvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RleHRfdXRpbHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2luc2VydmljZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgsIGluY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2FpeC5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ic2QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ic2RpLmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2JzZGkzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYnNkaTQuaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vY3lnd2luLmgsCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luNy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZHJhZ29uZmx5LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZHluaXguaCwKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkMi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2QzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q2LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDcuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaCwKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9pcml4LmgsCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9rZnJlZWJzZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgsCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMm1zdmMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taXBzLmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL25ldGJzZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3NmNS5oLAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzMi4zLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpczIuNC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMyLjUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzMi42LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3Vub3MuaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3ZyNS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vdWx0cml4NC5oLAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvUkVBRE1FLCBpbmNsdWRlL3VjZC1zbm1wL2FnZW50X2luZGV4LmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9hZ2VudF9yZWFkX2NvbmZpZy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvYWdlbnRfcmVnaXN0cnkuaCwgaW5jbHVkZS91Y2Qtc25tcC9hZ2VudF90cmFwLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9hc24xLmgsIGluY2x1ZGUvdWNkLXNubXAvYXV0b19ubGlzdC5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvY2FsbGJhY2suaCwgaW5jbHVkZS91Y2Qtc25tcC9kZWZhdWx0X3N0b3JlLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9kc19hZ2VudC5oLCBpbmNsdWRlL3VjZC1zbm1wL2hlYWRlcl9jb21wbGV4LmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9pbnQ2NC5oLCBpbmNsdWRlL3VjZC1zbm1wL2tleXRvb2xzLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9taWIuaCwgaW5jbHVkZS91Y2Qtc25tcC9taWJfbW9kdWxlX2NvbmZpZy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvbWliaW5jbC5oLCBpbmNsdWRlL3VjZC1zbm1wL3BhcnNlLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9yZWFkX2NvbmZpZy5oLCBpbmNsdWRlL3VjZC1zbm1wL3NjYXBpLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9zbm1wLXRjLmgsIGluY2x1ZGUvdWNkLXNubXAvc25tcC5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvc25tcF9hZ2VudC5oLCBpbmNsdWRlL3VjZC1zbm1wL3NubXBfYWxhcm0uaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3NubXBfYXBpLmgsIGluY2x1ZGUvdWNkLXNubXAvc25tcF9jbGllbnQuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3NubXBfZGVidWcuaCwgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX2ltcGwuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3NubXBfbG9nZ2luZy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvc25tcF9wYXJzZV9hcmdzLmgsIGluY2x1ZGUvdWNkLXNubXAvc25tcF92YXJzLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9zbm1wdXNtLmgsIGluY2x1ZGUvdWNkLXNubXAvc25tcHYzLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9zdHJ1Y3QuaCwgaW5jbHVkZS91Y2Qtc25tcC9zeXN0ZW0uaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3Rvb2xzLmgsIGluY2x1ZGUvdWNkLXNubXAvdHJhbnNmb3JtX29pZHMuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3VjZC1zbm1wLWFnZW50LWluY2x1ZGVzLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC91Y2Qtc25tcC1jb25maWcuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3VjZC1zbm1wLWluY2x1ZGVzLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC91dGlsX2Z1bmNzLmgsIGluY2x1ZGUvdWNkLXNubXAvdmFyX3N0cnVjdC5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvdmVyc2lvbi5oLCBpbnN0YWxsLXNoLCBsb2NhbC9GQVEySFRNTCwgCisgICAgICBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvUkVBRE1FLm1pYjJjLCBsb2NhbC9WZXJzaW9uLU11bmdlLnBsLCAKKyAgICAgIGxvY2FsL2NvbnZlcnRjb2RlLCBsb2NhbC9maXhwcm9jLCBsb2NhbC9odG1sLWFkZC1oZWFkZXItZm9vdGVyLnBsLAorICAgICAgIGxvY2FsL2h0bWwtdGV4dGZpbGUtZml4LnBsLCBsb2NhbC9pcGYtbW9kLnBsLCBsb2NhbC9taWIyYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZGVmYXVsdC1tZmQtdG9wLm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZGV0YWlscy1lbnVtcy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2RldGFpbHMtbm9kZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2RldGFpbHMtdGFibGUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1jb3B5Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtc2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1kYXRhLWFsbG9jYXRlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1kYXRhLWNvbnRleHQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1jaGFyLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtZGVjbC1ib3QubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1kZWNsLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtbG9uZy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LW9pZC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtaGVhZGVyLWJvdHRvbS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtaGVhZGVyLXRvcC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtc291cmNlLWluY2x1ZGVzLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1jb25zdGFudHMubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWVudW1zLm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLWZyb20tb2lkLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXNldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy10by1vaWQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtdmFyYmluZC1zZXR1cC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtb2lkcy5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdmFsdWUtbWFwLWZ1bmMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXZhbHVlLW1hcC1yZXZlcnNlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy12YWx1ZS1tYXAubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tMmMtaW50ZXJuYWwtd2FybmluZy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL20yY19zZXR1cF9lbnVtLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbTJjX3NldHVwX25vZGUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tMmNfc2V0dXBfdGFibGUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tMmNfdGFibGVfc2F2ZV9kZWZhdWx0cy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1hY2Nlc3MtY29udGFpbmVyLWNhY2hlZC1kZWZpbmVzLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWFjY2Vzcy11bnNvcnRlZC1leHRlcm5hbC1kZWZpbmVzLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWRhdGEtYWNjZXNzLm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWRhdGEtZ2V0Lm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWRhdGEtc2V0Lm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWRveHlnZW4ubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLW1ha2VmaWxlLm0ybSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLXJlYWRtZS5tMmMsIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtdG9wLm0yYywKKyAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbm9kZS1nZXQubTJpLCBsb2NhbC9taWIyYy1jb25mLmQvbm9kZS1zZXQubTJpLAorICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9ub2RlLXN0b3JhZ2UubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9ub2RlLXZhbGlkYXRlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbm9kZS12YXJiaW5kLXZhbGlkYXRlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvcGFyZW50LWRlcGVuZGVuY2llcy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3BhcmVudC1zZXQubTJpLAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LUNPVU5URVI2NC1nZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtRGF0ZUFuZFRpbWUtZ2V0Lm0yZCwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LURhdGVBbmRUaW1lLWdldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1EYXRlQW5kVGltZS1yZWFkbWUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtSW5ldEFkZHJlc3MtZ2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LUluZXRBZGRyZXNzLXNldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1JbmV0QWRkcmVzc1R5cGUtZ2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LUluZXRBZGRyZXNzVHlwZS1zZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtUm93U3RhdHVzLWRlcGVuZGVuY2llcy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1Sb3dTdGF0dXMtZ2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LVJvd1N0YXR1cy12YXJiaW5kLXZhbGlkYXRlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LVN0b3JhZ2VUeXBlLWRlcGVuZGVuY2llcy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1UZXN0QW5kSW5jci1nZXQubTJpLCBsb2NhbC9taWIyYy11cGRhdGUsCisgICAgICAgbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mLCBsb2NhbC9taWIyYy5hcnJheS11c2VyLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMuY2hlY2tfdmFsdWVzLmNvbmYsCisgICAgICBsb2NhbC9taWIyYy5jaGVja192YWx1ZXNfbG9jYWwuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5jb2x1bW5fZGVmaW5lcy5jb25mLCBsb2NhbC9taWIyYy5jb2x1bW5fZW51bXMuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5jb2x1bW5fc3RvcmFnZS5jb25mLCBsb2NhbC9taWIyYy5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mLCBsb2NhbC9taWIyYy5jcmVhdGUtZGF0YXNldC5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLmVtdWxhdGlvbi5jb25mLCBsb2NhbC9taWIyYy5nZW5odG1sLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMuaW50X3dhdGNoLmNvbmYsIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCBsb2NhbC9taWIyYy5tZmQuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5ub3RpZnkuY29uZiwgbG9jYWwvbWliMmMub2xkLWFwaS5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLnBlcmwuY29uZiwgbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMucm93LmNvbmYsIGxvY2FsL21pYjJjLnNjYWxhci5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZiwgbG9jYWwvcGFzc19wZXJzaXN0dGVzdCwgCisgICAgICBsb2NhbC9wYXNzdGVzdCwgbG9jYWwvcGFzc3Rlc3QucGwsIGxvY2FsL3NubXAtdWNkLnNoLCAKKyAgICAgIGxvY2FsL3NubXBjaGVjay5kZWYsIGxvY2FsL3NubXBjb25mLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wLWRhdGEvYXV0aG9wdHMsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXAtZGF0YS9kZWJ1Z2dpbmcsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXAtZGF0YS9taWJzLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wLWRhdGEvb3V0cHV0LCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wLWRhdGEvc25tcGNvbmYtY29uZmlnLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL2FjbCwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9iYXNpY19zZXR1cCwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9leHRlbmRpbmcsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvbW9uaXRvciwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9vcGVyYXRpb24sIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvc25tcGNvbmYtY29uZmlnLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL3N5c3RlbSwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS90cmFwc2lua3MsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXB0cmFwZC1kYXRhL2F1dGhlbnRpY2F0aW9uLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wdHJhcGQtZGF0YS9mb3JtYXR0aW5nLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wdHJhcGQtZGF0YS9sb2dnaW5nLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wdHJhcGQtZGF0YS9ydW50aW1lLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wdHJhcGQtZGF0YS9zbm1wY29uZi1jb25maWcsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXB0cmFwZC1kYXRhL3RyYXBoYW5kbGUsIGxvY2FsL3NubXBkdW1wLnBsLCAKKyAgICAgIGxvY2FsL3RrbWliLCBsb2NhbC90cmFwdG9lbWFpbCwgbHRtYWluLnNoLCAKKyAgICAgIG00L2FjX2FkZF9zZWFyY2hfcGF0aC5tNCwgbTQvYWNfbXNnX2NhY2hlLm00LCAKKyAgICAgIG00L2FjX21zZ19tb2R1bGVfZGJnLm00LCBtNC9hY19wcm9tcHRfdXNlci5tNCwgbTQvbGlidG9vbC5tNCwgCisgICAgICBtNC9sdG9wdGlvbnMubTQsIG00L2x0c3VnYXIubTQsIG00L2x0dmVyc2lvbi5tNCwKKyAgICAgIG00L2x0fm9ic29sZXRlLm00LCAgbTQvbmV0c25tcF9hcmcubTQsIG00L25ldHNubXBfc2VhcmNoX2xpYnMubTQsCisgICAgICBtYWtlZGVwZW5kLmluLCAgbWFrZWZpbGVpbmRlcGVuZC5wbCwgbWFrZW5vc3lzZGVwZW5kLnBsLAorICAgICAgbWFrZXRhcmdldCwgIG1hbi9NYWtlZmlsZS5pbiwgbWFuL2FkZF9taWJkaXIuMywKKyAgICAgIG1hbi9hZGRfbW9kdWxlX3JlcGxhY2VtZW50LjMsICBtYW4vY29uZmlnX2FwaS4zLmRlZiwKKyAgICAgIG1hbi9kZWZhdWx0X3N0b3JlLjMuYm90LCAgbWFuL2RlZmF1bHRfc3RvcmUuMy50b3AsCisgICAgICBtYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZiwgIG1hbi9maXhwcm9jLjEuZGVmLAorICAgICAgbWFuL2dldF9tb2R1bGVfbm9kZS4zLCBtYW4vaW5pdF9taWIuMywgIG1hbi9pbml0X21pYl9pbnRlcm5hbHMuMywKKyAgICAgIG1hbi9tYWtlX2luZGV4LnBsLCBtYW4vbWFuX3NlY3Rpb25zLnR4dCwgIG1hbi9taWIyYy11cGRhdGUuMS5kZWYsCisgICAgICBtYW4vbWliMmMuMS5kZWYsIG1hbi9taWIyYy5jb25mLjUuaW4sICBtYW4vbWliMmMuZXh0cmFjdC5wbCwKKyAgICAgIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmLCAKKyAgICAgIG1hbi9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xLmRlZiwgCisgICAgICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMywgbWFuL25ldHNubXBfaGFuZGxlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xlYWYuMywgbWFuL25ldHNubXBfbGlicmFyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NldF9kYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIAorICAgICAgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjMsIG1hbi9wZHVfYXBpLjMuZGVmLCBtYW4vcHJpbnRfZGVzY3JpcHRpb24uMywKKyAgICAgICBtYW4vcHJpbnRfbWliLjMsIG1hbi9wcmludF9vYmppZC4zLCBtYW4vcHJpbnRfdmFsdWUuMywgCisgICAgICBtYW4vcHJpbnRfdmFyaWFibGUuMywgbWFuL3JlYWRfYWxsX21pYnMuMywgbWFuL3JlYWRfbWliLjMsIAorICAgICAgbWFuL3JlYWRfbW9kdWxlLjMsIG1hbi9yZWFkX21vZHVsZV9ub2RlLjMsIG1hbi9yZWFkX29iamlkLjMsIAorICAgICAgbWFuL3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vc2h1dGRvd25fbWliLjMsIG1hbi9zbm1wLmNvbmYuNS5kZWYsIAorICAgICAgbWFuL3NubXBfYWdlbnRfYXBpLjMuZGVmLCBtYW4vc25tcF9hbGFybS4zLmRlZiwgCisgICAgICBtYW4vc25tcF9hcGlfZXJyc3RyaW5nLjMsIG1hbi9zbm1wX2Nsb3NlLjMsIG1hbi9zbm1wX2NvbmZpZy41LmRlZiwKKyAgICAgICBtYW4vc25tcF9lcnJvci4zLCBtYW4vc25tcF9mcmVlX3BkdS4zLCBtYW4vc25tcF9vcGVuLjMsIAorICAgICAgbWFuL3NubXBfcGVycm9yLjMsIG1hbi9zbm1wX3JlYWQuMywgbWFuL3NubXBfc2VsZWN0X2luZm8uMywgCisgICAgICBtYW4vc25tcF9zZW5kLjMsIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmLCAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfYXN5bmNfc2VuZC4zLCBtYW4vc25tcF9zZXNzX2Nsb3NlLjMsIAorICAgICAgbWFuL3NubXBfc2Vzc19lcnJvci4zLCBtYW4vc25tcF9zZXNzX2luaXQuMywgbWFuL3NubXBfc2Vzc19vcGVuLjMsCisgICAgICAgbWFuL3NubXBfc2Vzc19wZXJyb3IuMywgbWFuL3NubXBfc2Vzc19yZWFkLjMsIAorICAgICAgbWFuL3NubXBfc2Vzc19zZWxlY3RfaW5mby4zLCBtYW4vc25tcF9zZXNzX3NlbmQuMywgCisgICAgICBtYW4vc25tcF9zZXNzX3Nlc3Npb24uMywgbWFuL3NubXBfc2Vzc190aW1lb3V0LjMsIAorICAgICAgbWFuL3NubXBfc2V0X21pYl93YXJuaW5ncy4zLCBtYW4vc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMywgCisgICAgICBtYW4vc25tcF90aW1lb3V0LjMsIG1hbi9zbm1wX3RyYXBfYXBpLjMuZGVmLAorICAgICAgbWFuL3NubXBidWxrZ2V0LjEuZGVmLCAgbWFuL3NubXBidWxrd2Fsay4xLmRlZiwgbWFuL3NubXBjbWQuMS5kZWYsCisgICAgICBtYW4vc25tcGNvbmYuMS5kZWYsICBtYW4vc25tcGQuOC5kZWYsIG1hbi9zbm1wZC5jb25mLjUuZGVmLAorICAgICAgbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmLCAgbWFuL3NubXBkLmludGVybmFsLjUuZGVmLAorICAgICAgbWFuL3NubXBkZWx0YS4xLmRlZiwgbWFuL3NubXBkZi4xLmRlZiwgIG1hbi9zbm1wZ2V0LjEuZGVmLAorICAgICAgbWFuL3NubXBnZXRuZXh0LjEuZGVmLCBtYW4vc25tcGluZm9ybS4xLCAgbWFuL3NubXBuZXRzdGF0LjEuZGVmLAorICAgICAgbWFuL3NubXBzZXQuMS5kZWYsIG1hbi9zbm1wc3RhdHVzLjEuZGVmLCAgbWFuL3NubXB0YWJsZS4xLmRlZiwKKyAgICAgIG1hbi9zbm1wdGVzdC4xLmRlZiwgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsICBtYW4vc25tcHRyYXAuMS5kZWYsCisgICAgICBtYW4vc25tcHRyYXBkLjguZGVmLCBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYsICBtYW4vc25tcHVzbS4xLmRlZiwKKyAgICAgIG1hbi9zbm1wdmFjbS4xLmRlZiwgbWFuL3NubXB3YWxrLjEuZGVmLCAgbWFuL3RrbWliLjEuZGVmLAorICAgICAgbWFuL3RyYXB0b2VtYWlsLjEuZGVmLCBtYW4vdmFyYmluZF9hcGkuMy5kZWYsIAorICAgICAgbWFuL3ZhcmlhYmxlcy41LmRlZiwgbWlicy9BR0VOVFgtTUlCLnR4dCwgCisgICAgICBtaWJzL0RJU01BTi1FVkVOVC1NSUIudHh0LCBtaWJzL0RJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQsIAorICAgICAgbWlicy9ESVNNQU4tTlNMT09LVVAtTUlCLnR4dCwgbWlicy9ESVNNQU4tUElORy1NSUIudHh0LCAKKyAgICAgIG1pYnMvRElTTUFOLVNDSEVEVUxFLU1JQi50eHQsIG1pYnMvRElTTUFOLVNDUklQVC1NSUIudHh0LCAKKyAgICAgIG1pYnMvRElTTUFOLVRSQUNFUk9VVEUtTUlCLnR4dCwgbWlicy9FdGhlckxpa2UtTUlCLnR4dCwgCisgICAgICBtaWJzL0hDTlVNLVRDLnR4dCwgbWlicy9IT1NULVJFU09VUkNFUy1NSUIudHh0LCAKKyAgICAgIG1pYnMvSE9TVC1SRVNPVVJDRVMtVFlQRVMudHh0LCAKKyAgICAgIG1pYnMvSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQi50eHQsIAorICAgICAgbWlicy9JQU5BLUxBTkdVQUdFLU1JQi50eHQsIG1pYnMvSUFOQS1SVFBST1RPLU1JQi50eHQsIAorICAgICAgbWlicy9JQU5BaWZUeXBlLU1JQi50eHQsIG1pYnMvSUYtSU5WRVJURUQtU1RBQ0stTUlCLnR4dCwgCisgICAgICBtaWJzL0lGLU1JQi50eHQsIG1pYnMvSU5FVC1BRERSRVNTLU1JQi50eHQsIAorICAgICAgbWlicy9JUC1GT1JXQVJELU1JQi50eHQsIG1pYnMvSVAtTUlCLnR4dCwgCisgICAgICBtaWJzL0lQVjYtRkxPVy1MQUJFTC1NSUIudHh0LCBtaWJzL0lQVjYtSUNNUC1NSUIudHh0LCAKKyAgICAgIG1pYnMvSVBWNi1NSUIudHh0LCBtaWJzL0lQVjYtVEMudHh0LCBtaWJzL0lQVjYtVENQLU1JQi50eHQsIAorICAgICAgbWlicy9JUFY2LVVEUC1NSUIudHh0LCBtaWJzL0xNLVNFTlNPUlMtTUlCLnR4dCwgbWlicy9NVEEtTUlCLnR4dCwgCisgICAgICBtaWJzL01ha2VmaWxlLmluLCBtaWJzL01ha2VmaWxlLm1pYiwgbWlicy9ORVQtU05NUC1BR0VOVC1NSUIudHh0LCAKKyAgICAgIG1pYnMvTkVULVNOTVAtRVhBTVBMRVMtTUlCLnR4dCwgbWlicy9ORVQtU05NUC1FWFRFTkQtTUlCLnR4dCwgCisgICAgICBtaWJzL05FVC1TTk1QLU1JQi50eHQsIG1pYnMvTkVULVNOTVAtTU9OSVRPUi1NSUIudHh0LCAKKyAgICAgIG1pYnMvTkVULVNOTVAtUEFTUy1NSUIudHh0LCBtaWJzL05FVC1TTk1QLVNZU1RFTS1NSUIudHh0LCAKKyAgICAgIG1pYnMvTkVULVNOTVAtVEMudHh0LCBtaWJzL05FVC1TTk1QLVZBQ00tTUlCLnR4dCwgCisgICAgICBtaWJzL05FVFdPUkstU0VSVklDRVMtTUlCLnR4dCwgbWlicy9OT1RJRklDQVRJT04tTE9HLU1JQi50eHQsIAorICAgICAgbWlicy9SRUFETUUubWlicywgbWlicy9SRkMtMTIxNS50eHQsIG1pYnMvUkZDMTE1NS1TTUkudHh0LCAKKyAgICAgIG1pYnMvUkZDMTIxMy1NSUIudHh0LCBtaWJzL1JNT04tTUlCLnR4dCwgbWlicy9TQ1RQLU1JQi50eHQsIAorICAgICAgbWlicy9TTVVYLU1JQi50eHQsIG1pYnMvU05NUC1DT01NVU5JVFktTUlCLnR4dCwgCisgICAgICBtaWJzL1NOTVAtRlJBTUVXT1JLLU1JQi50eHQsIG1pYnMvU05NUC1NUEQtTUlCLnR4dCwgCisgICAgICBtaWJzL1NOTVAtTk9USUZJQ0FUSU9OLU1JQi50eHQsIG1pYnMvU05NUC1QUk9YWS1NSUIudHh0LCAKKyAgICAgIG1pYnMvU05NUC1UQVJHRVQtTUlCLnR4dCwgbWlicy9TTk1QLVVTRVItQkFTRUQtU00tTUlCLnR4dCwgCisgICAgICBtaWJzL1NOTVAtVVNNLUFFUy1NSUIudHh0LCBtaWJzL1NOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dCwgCisgICAgICBtaWJzL1NOTVAtVklFVy1CQVNFRC1BQ00tTUlCLnR4dCwgbWlicy9TTk1QdjItQ09ORi50eHQsIAorICAgICAgbWlicy9TTk1QdjItTUlCLnR4dCwgbWlicy9TTk1QdjItU01JLnR4dCwgbWlicy9TTk1QdjItVEMudHh0LCAKKyAgICAgIG1pYnMvU05NUHYyLVRNLnR4dCwgbWlicy9UQ1AtTUlCLnR4dCwgCisgICAgICBtaWJzL1RSQU5TUE9SVC1BRERSRVNTLU1JQi50eHQsIG1pYnMvVFVOTkVMLU1JQi50eHQsIAorICAgICAgbWlicy9VQ0QtREVNTy1NSUIuaW5jLCBtaWJzL1VDRC1ERU1PLU1JQi50eHQsIAorICAgICAgbWlicy9VQ0QtRElTS0lPLU1JQi5pbmMsIG1pYnMvVUNELURJU0tJTy1NSUIudHh0LCAKKyAgICAgIG1pYnMvVUNELURMTU9ELU1JQi5pbmMsIG1pYnMvVUNELURMTU9ELU1JQi50eHQsIAorICAgICAgbWlicy9VQ0QtSVBGSUxURVItTUlCLmluYywgbWlicy9VQ0QtSVBGSUxURVItTUlCLnR4dCwgCisgICAgICBtaWJzL1VDRC1JUEZXQUNDLU1JQi5pbmMsIG1pYnMvVUNELUlQRldBQ0MtTUlCLnR4dCwgCisgICAgICBtaWJzL1VDRC1TTk1QLU1JQi1PTEQudHh0LCBtaWJzL1VDRC1TTk1QLU1JQi5pbmMsIAorICAgICAgbWlicy9VQ0QtU05NUC1NSUIudHh0LCBtaWJzL1VEUC1NSUIudHh0LCBtaWJzL2lhbmFsaXN0LCAKKyAgICAgIG1pYnMvbWFrZWh0bWwucGwsIG1pYnMvbWliZmV0Y2gsIG1pYnMvbm9kZW1hcCwgbWlicy9yZmNsaXN0LCAKKyAgICAgIG1pYnMvcmZjbWlicy5kaWZmLCBtaWJzL3NtaXN0cmlwLCBta2luc3RhbGxkaXJzLCAKKyAgICAgIG5ldC1zbm1wLWNvbmZpZy5pbiwgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4sIG92L01ha2VmaWxlLmluLCAKKyAgICAgIG92L1JFQURNRSwgb3YvVUNELUNvbXB1dGVyLCBvdi9VQ0QtZmllbGRzLCBvdi9iaXRtYXBzL1VDRC4yMC5tLCAKKyAgICAgIG92L2JpdG1hcHMvVUNELjIwLnAsIG92L2JpdG1hcHMvVUNELjI2Lm0sIG92L2JpdG1hcHMvVUNELjI2LnAsIAorICAgICAgb3YvYml0bWFwcy9VQ0QuMzIubSwgb3YvYml0bWFwcy9VQ0QuMzIucCwgb3YvYml0bWFwcy9VQ0QuMzgubSwgCisgICAgICBvdi9iaXRtYXBzL1VDRC4zOC5wLCBvdi9iaXRtYXBzL1VDRC40NC5tLCBvdi9iaXRtYXBzL1VDRC40NC5wLCAKKyAgICAgIG92L2JpdG1hcHMvVUNELjUwLm0sIG92L2JpdG1hcHMvVUNELjUwLnAsIG92L2JpdG1hcHMvVUNELmZpZWxkcywgCisgICAgICBvdi9vaWRfdG9fc3ltLmluLCBvdi9vaWRfdG9fdHlwZS5pbiwgcGVybC9BU04vQVNOLnBtLCAKKyAgICAgIHBlcmwvQVNOL0FTTi54cywgcGVybC9BU04vQ2hhbmdlcywgcGVybC9BU04vTUFOSUZFU1QsIAorICAgICAgcGVybC9BU04vTWFrZWZpbGUuUEwsIHBlcmwvQVNOL3Rlc3QucGwsIHBlcmwvQW55RGF0YV9TTk1QL0NoYW5nZXMsCisgICAgICAgcGVybC9BbnlEYXRhX1NOTVAvREJEX0FueURhdGEucGF0Y2gsIHBlcmwvQW55RGF0YV9TTk1QL0Zvcm1hdC5wbSwKKyAgICAgICBwZXJsL0FueURhdGFfU05NUC9JTlNUQUxMLCBwZXJsL0FueURhdGFfU05NUC9NQU5JRkVTVCwgCisgICAgICBwZXJsL0FueURhdGFfU05NUC9NYWtlZmlsZS5QTCwgcGVybC9BbnlEYXRhX1NOTVAvUkVBRE1FLCAKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvQW55RGF0YV9TTk1QL2NvbmZpZ3Mvc2NsaSwgCisgICAgICBwZXJsL0FueURhdGFfU05NUC9jb25maWdzL3VuaXgsIHBlcmwvQW55RGF0YV9TTk1QL25ldHNoLCAKKyAgICAgIHBlcmwvTWFrZWZpbGUuUEwsIHBlcmwvTWFrZWZpbGUubWFrZWZpbGVzLCBwZXJsL01ha2VmaWxlLnN1YnMucGwsIAorICAgICAgcGVybC9PSUQvQ2hhbmdlcywgcGVybC9PSUQvTUFOSUZFU1QsIHBlcmwvT0lEL01ha2VmaWxlLlBMLCAKKyAgICAgIHBlcmwvT0lEL09JRC5wbSwgcGVybC9PSUQvT0lELnhzLCBwZXJsL09JRC9SRUFETUUsIAorICAgICAgcGVybC9PSUQvdGVzdC5wbCwgcGVybC9PSUQvdHlwZW1hcCwgcGVybC9TTk1QL0JVRywgCisgICAgICBwZXJsL1NOTVAvTUFOSUZFU1QsIHBlcmwvU05NUC9NQU5JRkVTVC5TS0lQLAorICAgICAgcGVybC9TTk1QL01ha2VmaWxlLlBMLCAgcGVybC9TTk1QL1JFQURNRSwgcGVybC9TTk1QL1NOTVAucG0sCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgIHBlcmwvU05NUC9UT0RPLCBwZXJsL1NOTVAvZXhhbXBsZXMvYXN5bmMxLnBsLCAKKyAgICAgIHBlcmwvU05NUC9leGFtcGxlcy9hc3luYzIucGwsIHBlcmwvU05NUC9leGFtcGxlcy9idWxrd2Fsay5wbCwgCisgICAgICBwZXJsL1NOTVAvZXhhbXBsZXMvaXBmb3J3YXJkLnBsLCBwZXJsL1NOTVAvZXhhbXBsZXMvbWlidHJlZS5wbCwgCisgICAgICBwZXJsL1NOTVAvZXhhbXBsZXMvbWlid2Fsay5wbCwgcGVybC9TTk1QL2V4YW1wbGVzL3BpbmdtaWIucGwsIAorICAgICAgcGVybC9TTk1QL2V4YW1wbGVzL3RhYmxld2Fsay5wbCwgcGVybC9TTk1QL2V4YW1wbGVzL3Rlc3RsZWFrLnBsLCAKKyAgICAgIHBlcmwvU05NUC9leGFtcGxlcy90cmFwLWV4YW1wbGUucGwsIHBlcmwvU05NUC9oaW50cy9pcml4LnBsLCAKKyAgICAgIHBlcmwvU05NUC9oaW50cy9zb2xhcmlzLnBsLCBwZXJsL1NOTVAvcGVybHNubXAuaCwgCisgICAgICBwZXJsL1NOTVAvdC9SRUFETUUsIHBlcmwvU05NUC90L2FzeW5jLnQsIHBlcmwvU05NUC90L2J1bGt3YWxrLnQsIAorICAgICAgcGVybC9TTk1QL3QvY29uZi50LCBwZXJsL1NOTVAvdC9jb25mdGVzdC5jb25mLCBwZXJsL1NOTVAvdC9nZXQudCwgCisgICAgICBwZXJsL1NOTVAvdC9nZXRuZXh0LnQsIHBlcmwvU05NUC90L21pYi50LCBwZXJsL1NOTVAvdC9taWIudHh0LCAKKyAgICAgIHBlcmwvU05NUC90L21pYmxvYWQudCwgcGVybC9TTk1QL3Qvbm90aWZ5LnQsCisgICAgICBwZXJsL1NOTVAvdC9zZXNzaW9uLnQsICBwZXJsL1NOTVAvdC9zZXQudCwKKyAgICAgIHBlcmwvU05NUC90L3NubXB0ZXN0LmNvbmYsICBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsLAorICAgICAgcGVybC9TTk1QL3R5cGVtYXAsICBwZXJsL1RyYXBSZWNlaXZlci9DaGFuZ2VzLAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvTUFOSUZFU1QsICBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1JFQURNRSwgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LWMuaW5jLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LXhzLmluYywgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9mYWxsYmFjay9jb25zdC1jLmluYywgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9mYWxsYmFjay9jb25zdC14cy5pbmMsIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvcGVybF9zbm1wdHJhcGQuaCwgcGVybC9UcmFwUmVjZWl2ZXIvcHBwb3J0LmgsIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvdC8xLnQsIHBlcmwvVHJhcFJlY2VpdmVyL3R5cGVtYXAsIAorICAgICAgcGVybC9hZ2VudC9DaGFuZ2VzLCBwZXJsL2FnZW50L01BTklGRVNULCBwZXJsL2FnZW50L01ha2VmaWxlLlBMLCAKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9hZ2VudC54cywgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUueHMsIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2dlbiwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL3Rlc3QucGwsIAorICAgICAgcGVybC9hZ2VudC9uZXRzbm1wX3JlcXVlc3RfaW5mb1B0ci5wbSwgcGVybC9hZ2VudC90ZXN0LnBsLCAKKyAgICAgIHBlcmwvYWdlbnQvdHlwZW1hcCwgcGVybC9kZWZhdWx0X3N0b3JlL0NoYW5nZXMsIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01BTklGRVNULCBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL1JFQURNRSwgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUueHMsIHBlcmwvZGVmYXVsdF9zdG9yZS9nZW4sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL3Rlc3QucGwsIHBlcmwvZGVmYXVsdF9zdG9yZS90eXBlbWFwLCAKKyAgICAgIHBlcmwvbWFrZS1wZXJsLW1ha2VmaWxlcywgcGVybC9tYW5hZ2VyL0lOU1RBTEwsIAorICAgICAgcGVybC9tYW5hZ2VyL01ha2VmaWxlLlBMLCBwZXJsL21hbmFnZXIvZGlzcGxheXRhYmxlLnBtLCAKKyAgICAgIHBlcmwvbWFuYWdlci9nZXRWYWx1ZXMucG0sIHBlcmwvbWFuYWdlci9tYW5hZ2VyLnBtLCAKKyAgICAgIHBlcmwvbWFuYWdlci9zZXR1cGF1dGgsIHBlcmwvbWFuYWdlci9zZXR1cGRiLCAKKyAgICAgIHBlcmwvbWFuYWdlci9zZXR1cHVzZXIsIHBlcmwvbWFuYWdlci9zbm1wdG9zcWwsIHB5dGhvbi9MSUNFTlNFLCAKKyAgICAgIHB5dGhvbi9SRUFETUUsIHB5dGhvbi9uZXRzbm1wL19faW5pdF9fLnB5LCAKKyAgICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudC5weSwgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYywgCisgICAgICBweXRob24vbmV0c25tcC90ZXN0cy9fX2luaXRfXy5weSwgcHl0aG9uL25ldHNubXAvdGVzdHMvc25tcGQuY29uZiwKKyAgICAgICBweXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5LCBweXRob24vc2V0dXAucHksIHJlbW92ZS1maWxlcywgCisgICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmluLCAKKyAgICAgIHNubXBsaWIvYXNuMS5jLCBzbm1wbGliL2NhbGxiYWNrLmMsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAKKyAgICAgIHNubXBsaWIvY211X2NvbXBhdC5jLCBzbm1wbGliL2NvbnRhaW5lci5jLCAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLCAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jLCBzbm1wbGliL2NvbnRhaW5lcl9udWxsLmMsIAorICAgICAgc25tcGxpYi9kYXRhX2xpc3QuYywgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsIHNubXBsaWIvZGlyX3V0aWxzLmMsCisgICAgICAgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsIHNubXBsaWIvZmlsZV91dGlscy5jLAorICAgICAgc25tcGxpYi9nZXRvcHQuYywgIHNubXBsaWIvaW5ldF9udG9wLmMsIHNubXBsaWIvaW5ldF9wdG9uLmMsCisgICAgICBzbm1wbGliL2ludDY0LmMsICBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsCisgICAgICBzbm1wbGliL2xjZF90aW1lLmMsICBzbm1wbGliL21kNS5jLCBzbm1wbGliL21pYi5jLAorICAgICAgc25tcGxpYi9tdF9zdXBwb3J0LmMsICBzbm1wbGliL29pZF9zdGFzaC5jLCBzbm1wbGliL3BhcnNlLmMsCisgICAgICBzbm1wbGliL3BrY3MuYywgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zY2FwaS5jLAorICAgICAgc25tcGxpYi9zbm1wLXRjLmMsICBzbm1wbGliL3NubXAuYywgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmMsIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBJUFhEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBTU0hEb21haW4uYywgc25tcGxpYi9zbm1wU1RERG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsICBzbm1wbGliL3NubXBfYXV0aC5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsCisgICAgICBzbm1wbGliL3NubXBfZGVidWcuYywgIHNubXBsaWIvc25tcF9lbnVtLmMsCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCAgc25tcGxpYi9zbm1wX29wZW5zc2wuYywKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsICBzbm1wbGliL3NubXBfc2VjbW9kLmMsCisgICAgICBzbm1wbGliL3NubXBfc2VydmljZS5jLCAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLAorICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYywgIHNubXBsaWIvc25tcGtzbS5jLCBzbm1wbGliL3NubXB0c20uYywKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jLCAgc25tcGxpYi9zbm1wdjMuYywgc25tcGxpYi9zbnByaW50Zi5jLAorICAgICAgc25tcGxpYi9zdHJsY3B5LmMsICBzbm1wbGliL3N0cnRva19yLmMsIHNubXBsaWIvc3RydG9sLmMsCisgICAgICBzbm1wbGliL3N0cnRvdWwuYywgIHNubXBsaWIvc3RydG91bGwuYywgc25tcGxpYi9zeXN0ZW0uYywKKyAgICAgIHNubXBsaWIvdGVzdF9iaW5hcnlfYXJyYXkuYywgIHNubXBsaWIvdGV4dF91dGlscy5jLAorICAgICAgc25tcGxpYi90b29scy5jLCBzbm1wbGliL3VjZC1zbm1wLWluY2x1ZGVzLmgsIAorICAgICAgc25tcGxpYi91Y2RfY29tcGF0LmMsIHNubXBsaWIvdmFjbS5jLCBzbm1wbGliL3dpbnBpcGUuYywgCisgICAgICBzbm1wbGliL3dpbnNlcnZpY2UuYywgc25tcGxpYi93aW5zZXJ2aWNlLm1jLAorICAgICAgc25tcGxpYi93aW5zZXJ2aWNlLnJjLCAgc25tcGxpYi93aW5zZXJ2aWNlcmMucmMsIHN0YW1wLWgsCisgICAgICBzdGFtcC1oLmluLCB0ZXN0aW5nL01ha2VmaWxlLmluLCAgdGVzdGluZy9SRUFETUUsCisgICAgICB0ZXN0aW5nL1JVTlRFU1RTLCB0ZXN0aW5nL1QuYywgdGVzdGluZy9UMi5zaCwgCisgICAgICB0ZXN0aW5nL1RFU1RDT05GLnNoLCB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLW1kNSwgCisgICAgICB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEsIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMS1kZXMsIAorICAgICAgdGVzdGluZy9kYXRhLmt1bC1tZDUsIHRlc3RpbmcvZGF0YS5rdWwtc2hhMSwgdGVzdGluZy9ldGltZXRlc3QuYywgCisgICAgICB0ZXN0aW5nL2V2YWxfb25lcHJvZ3JhbS5zaCwgdGVzdGluZy9ldmFsX29uZXNjcmlwdC5zaCwgCisgICAgICB0ZXN0aW5nL2V2YWxfc3VpdGUuc2gsIHRlc3RpbmcvZXZhbF90ZXN0bGlzdCwgCisgICAgICB0ZXN0aW5nL2V2YWxfdG9vbHMuc2gsIHRlc3Rpbmcva2V5bWFuYWdldGVzdC5jLAorICAgICAgdGVzdGluZy9taXNjdGVzdC5jLCAgdGVzdGluZy9yZmMxMjEzL1JFQURNRSwgdGVzdGluZy9yZmMxMjEzL3J1biwgCisgICAgICB0ZXN0aW5nL3JmYzEyMTMvc25tcGZ1bi5zaCwgdGVzdGluZy9yZmMxMjEzL3Rlc3RfZnVuLCAKKyAgICAgIHRlc3RpbmcvcmZjMTIxMy90ZXN0bWliMS5zaCwgdGVzdGluZy9yZmMxMjEzL3Rlc3RtaWIyLnNoLCAKKyAgICAgIHRlc3RpbmcvcmZjMTIxMy90ZXN0bWliMy5zaCwgdGVzdGluZy9zY2FwaXRlc3QuYywgCisgICAgICB0ZXN0aW5nL3Rlc3Rfa2V5Y2hhbmdlLnNoLCB0ZXN0aW5nL3Rlc3Rfa3VsLnNoLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3RyYW5zcG9ydCwgdGVzdGluZy90ZXN0cy9TdjFjb25maWcsIAorICAgICAgdGVzdGluZy90ZXN0cy9TdjJjY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1N2M2NvbmZpZywgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2FnZW50LCB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2Jhc2UsIAorICAgICAgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWd0cmFwZCwgdGVzdGluZy90ZXN0cy9TdjN2YWNtY29uZmlnLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3ZhY21jb25maWcsIHRlc3RpbmcvdGVzdHMvU3Zhbnljb25maWcsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDAwY29uZmlndXJlLCB0ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldCwgdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaCwgdGVzdGluZy90ZXN0cy9UMDIwc25tcHYzZ2V0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQsIHRlc3RpbmcvdGVzdHMvVDAyMjBzbm1wdjNidWxrZ2V0LAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDAyMnNubXB2M2dldE1ENSwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENUFFUywgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVERVMsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjRzbm1wdjNnZXRTSEExLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNXNubXB2M2dldFNIQURFUywgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjZzbm1wdjNnZXRTSEFBRVMsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjhzbm1wdjNnZXRmYWlsLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybSwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybWF1dGgsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtcHJpdiwgdGVzdGluZy90ZXN0cy9UMDUwc25tcHYzdHJhcCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcCwgdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybSwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDIsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MywgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNThhZ2VudGF1dGh0cmFwLAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlLCAgdGVzdGluZy90ZXN0cy9UMDYwdHJhcGRwZXJsLAorICAgICAgdGVzdGluZy90ZXN0cy9UMDYxYWdlbnRwZXJsLCAgdGVzdGluZy90ZXN0cy9UMDY1YWdlbnRleHRlbmQsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cCwgIHRlc3RpbmcvdGVzdHMvVDExMGFnZW50eGdldCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExMWFnZW50eHNldCwgIHRlc3RpbmcvdGVzdHMvVDExMmFnZW50eHNldGZhaWwsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCAgdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCAgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwsICB0ZXN0aW5nL3Rlc3RzL1QxMzBzbm1wdjF2YWNtZ2V0LAorICAgICAgdGVzdGluZy90ZXN0cy9UMTMxc25tcHYyY3ZhY21nZXQsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTMyc25tcHYzdmFjbWdldCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWwsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQyc25tcHYzdmFjbWdldGZhaWwsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUwc29sYXJpc2hvc3RjcHUsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUxc29sYXJpc2hvc3RkaXNrLCB0ZXN0aW5nL3Rlc3RzL1QxNTJob3N0dXB0aW1lLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1M3NvbGFyaXNzd2FwLCB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbCwgdGVzdGluZy90ZXN0cy9UMzAwdWRwLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMxMHRjcCwgdGVzdGluZy90ZXN0cy9UMzIwdWRwdjYsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzMwdGNwdjYsIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXgsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzYwZHRsc3VkcCwgdGVzdGluZy90ZXN0cy9UMzk5YWxpYXMsIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QucHJpdiwgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIuY2VydCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5wcml2LCB3aW4zMi9Db25maWd1cmUsIAorICAgICAgd2luMzIvRVhBTVBMRS5jb25mLndpbjMyLCB3aW4zMi9NYWtlZmlsZS1hcHBzLmluLCAKKyAgICAgIHdpbjMyL01ha2VmaWxlLmluLCB3aW4zMi9NZ210QXBpLXdpbkV4dERMTC5oLCAKKyAgICAgIHdpbjMyL1NubXAtd2luRXh0RExMLmgsIHdpbjMyL2FnZW50X21vZHVsZV9kb3RfY29uZi5oLCAKKyAgICAgIHdpbjMyL2FnZW50X21vZHVsZV9pbmNsdWRlcy5oLCB3aW4zMi9hZ2VudF9tb2R1bGVfaW5pdHMuaCwgCisgICAgICB3aW4zMi9idWlsZC5iYXQsIHdpbjMyL2J1aWxkLnBsLCB3aW4zMi9jb25maWcuaCwgCisgICAgICB3aW4zMi9jb25maWcuaC5ib3JsYW5kLCB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsIAorICAgICAgd2luMzIvZGlzdC9SRUFETUUudHh0LCB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5iYXQsIAorICAgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGwsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9Db25maWd1cmF0aW9uX092ZXJ2aWV3Lmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9EZXZlbG9wZXJfRkFRLmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9GQVEuaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL0hlbHBfQ2F2ZWF0cy5odG1sLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvSW50cm9kdWN0aW9uLmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9OZXQtU05NUC5oaGMsCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL05ldC1TTk1QLmhocCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL3NubXAuY29uZi53aW4zMi5odG1sLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvc25tcGQuY29uZi53aW4zMi5odG1sLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvc25tcHRyYXBkLmNvbmYud2luMzIuaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9BZGQyUGF0aC5uc2ksIAorICAgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvU2V0RW5WYXIubnNpLCAKKyAgICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaSwgd2luMzIvZGlzdC9zY3JpcHRzL2NyZWF0ZS10b2MsIAorICAgICAgd2luMzIvZGlzdC9zY3JpcHRzL21hbmRpcjJodG1sLCAKKyAgICAgIHdpbjMyL2Rpc3Qvc2NyaXB0cy9uZXQtc25tcC1wZXJsLXRlc3QucGwsIAorICAgICAgd2luMzIvZGlzdC9zY3JpcHRzL3BvZGRpcjJodG1sLCB3aW4zMi9kaXN0L3NjcmlwdHMvcmVhZG1lMmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9zY3JpcHRzL3R4dDJodG1sLCB3aW4zMi9kaXN0L3Rvc29jazEuc2gsIAorICAgICAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcCwgCisgICAgICB3aW4zMi9pbnN0YWxsLW5ldC1zbm1wLmJhdCwgd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZGVmLCB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIAorICAgICAgd2luMzIvbGliaGVscGVycy9NYWtlZmlsZS5pbiwgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsIAorICAgICAgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLAorICAgICAgd2luMzIvbGlidWNkbWlicy9saWJ1Y2RtaWJzLmRlZiwgIHdpbjMyL2xvY2FsL01ha2VmaWxlLmluLAorICAgICAgd2luMzIvbG9jYWwvbWliMmMuYmF0LCAgd2luMzIvbG9jYWwvc25tcGNvbmYuYmF0LAorICAgICAgd2luMzIvbG9jYWwvdHJhcHRvZW1haWwuYmF0LCAgd2luMzIvbWliX21vZHVsZV9kb3RfY29uZi5oLAorICAgICAgd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oLCAgd2luMzIvbWliX21vZHVsZV9pbml0cy5oLAorICAgICAgd2luMzIvbWliX21vZHVsZV9zaHV0ZG93bi5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwKKyAgICAgIHdpbjMyL25tYWtlcGVybC5iYXQsICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AsIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AsIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL3NubXBkL3NubXBkLmRzcCwgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AsIAorICAgICAgd2luMzIvc25tcGRmL3NubXBkZi5kc3AsIHdpbjMyL3NubXBnZXQvc25tcGdldC5kc3AsIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwLCB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsIHdpbjMyL3NubXBzZXQvc25tcHNldC5kc3AsIAorICAgICAgd2luMzIvc25tcHNtX2luaXQuaCwgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcCwgCisgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcCwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwLCAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AsCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AsICB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW4sCisgICAgICB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwgIHdpbjMyL3NubXB1c20vc25tcHVzbS5kc3AsCisgICAgICB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AsICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AsCisgICAgICB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyZGxsLmRzdzoKKworIEZpeCA1LjUueCBicmFuY2ggc3RydWN0dXJlIChwYXJ0IDIpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5NjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYzogcHJvcGVyIHByb2Nlc3MKKworIHN0YXR1cyB2YWx1ZXMgZm9yIG5ldGJzZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmM6IHByb3BlciBwcm9jZXNzCisKKyBzdGF0dXMgdmFsdWVzIGZvciBuZXRic2QgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NjYXBpLmM6IGNvbmRpdGlvbmFsaXplIHZhcmlhYmxlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zY2FwaS5jOiBjb25kaXRpb25hbGl6ZSB2YXJpYWJsZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmg6IHRjcC1taWIvdWRwLW1pYgorCisgc3VwcG9ydCBmb3IgdGhlICpic2RzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oOiB0Y3AtbWliL3VkcC1taWIKKworIHN1cHBvcnQgZm9yIHRoZSAqYnNkcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLgorICAgICAgIGM6IHRjcC1taWIvdWRwLW1pYiBzdXBwb3J0IGZvciB0aGUgKmJzZHMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTU5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjOiB0Y3AtbWliL3VkcC1taWIgc3VwcG9ydCBmb3IgdGhlICpic2RzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTU5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hCisgICAgICAgY2Nlc3MuYzogUHJvcGVybHkgZW5kIGRlYnVnIG1lc3NhZ2Ugd2l0aCBuZXdsaW5lIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYQorICAgICAgIGNjZXNzLmM6IFByb3Blcmx5IGVuZCBkZWJ1ZyBtZXNzYWdlIHdpdGggbmV3bGluZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmM6IHJlbW92ZSB2YXIKKworIHRoYXQgc2hhZG93cyB0aGUgdXNlZnVsIG9uZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTU3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYzogcmVtb3ZlIHZhcgorCisgdGhhdCBzaGFkb3dzIHRoZSB1c2VmdWwgb25lIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jOiBtYWpvciBmaWRkbGluZyB0byBnZXQgdGhpbmdzIHdvcmtpbmcKKworIGZvciBvcGVuYnNkIHRvby4gVGhpcyBzaG91bGQgcmVhbGx5IGJlIHJld29ya2VkIHRvIHVzZSB0aGUKKyB0Y3AtbWliL3VkcC1taWIvZGF0YV9hY2Nlc3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk1NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jOiBtYWpvciBmaWRkbGluZyB0byBnZXQgdGhpbmdzIHdvcmtpbmcKKworIGZvciBvcGVuYnNkIHRvby4gVGhpcyBzaG91bGQgcmVhbGx5IGJlIHJld29ya2VkIHRvIHVzZSB0aGUKKyB0Y3AtbWliL3VkcC1taWIvZGF0YV9hY2Nlc3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTU2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYzogZml4IHRjcCBzdGF0ZXMgZm9yIGRyYWdvbmZseWJzZAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTU1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYzogZml4IHRjcCBzdGF0ZXMgZm9yIGRyYWdvbmZseWJzZAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS5oOiBlbmFibGUgbmV3IHRjcC91ZHAgbWlicyBmb3Igc29sYXJpcworICAgICAgZ2l0LXN2bi1pZDoKKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNyAtPiBWNS43LjEucHJlMQorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBmaXggQysrIGNvbW1lbnRzCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHBlcmwvQVNOL0FTTi5wbSwgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwKKyAgICAgICBwZXJsL09JRC9PSUQucG0sIHBlcmwvU05NUC9TTk1QLnBtLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG06IFZlcnNpb24gbnVtYmVyIHVwZGF0ZToKKworIDUuNy4xLnByZTEKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUudG9wOiB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEucHJlMQorCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGNmNGNjZTRjMTg5Y2Y0N2Y0YzQ4OWRiNDNiN2ZhNTEwZjg5MDZhMWEgTWVyZ2U6IGRmOTFhOWYKKworIDkzZTk3ZGMgQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgTW9uCisgQXVnIDggMjI6MTU6MjggMjAxMSArMDEwMAorCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNi1wYXRjaGVzJyBpbnRvCisKKyBWNS02LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqICB3aW4zMi9NYWtlZmlsZS1hcHBzLmluLCB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsIAorICAgICAgd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjogRGVmaW5lCisKKyBfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIHRva2VuIChhcyBwZXIgQWxleCcgYnVpbGQKKyBpbnN0cnVjdGlvbnMpCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGRmMTZkYzIyMjFlOTkzZGQzYzY2NjUwZDVlODcyNTc3ZmZlNmMwMWIgTWVyZ2U6IDcxNGJjODIKKworIDhlNWEyOGQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTM6NTY6NDMgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmZmEwNWIwNTFhYzNlMmIxOTcxOTVhOTk4OWNjN2E5MWZlOGQ5MjgyIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBBdWcgOCAxMzo1NTozOAorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogY29tbWl0IDcxNGJjODJmYTAxZTIxYTM2NTU4MjQ5NjNmYTU0ZTliODA0MmZmYjAgTWVyZ2U6IDZmZThmZTUKKworIDNlZjFkYjUgQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgTW9uCisgQXVnIDggMjE6MjE6NDYgMjAxMSArMDEwMAorCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogOiBjb21taXQgYjQ1MTYwN2RjYTAxNWMxMTFlOTZmZGZlYjJkZGIwNjYxZmI0ZjcyNCBBdXRob3I6IERhdmUKKworIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgTW9uIEF1ZyA4IDIxOjIwOjMyIDIwMTEKKyArMDEwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA2ZmU4ZmU1Mjk0YTQ1YmM3ZTRlYTM3NTFhMWFkN2FhNDdiNWNhYmIyIE1lcmdlOiAzNjRmOGZmCisKKyBmNjlhYmUzIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZworIDggMjI6MDI6MzggMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBjOTQ4MTMwNDRhNGM0YTYwOGU5OGU4MDIyMzA3NWM2ZmFmMDRlZTExIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcgOCAyMTo1NjoxNSAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDM2NGY4ZmZhZWI5MGI0ZWIwMTY1ZmM4NTU2ODhjZDA2MjY2MzI3OTQgTWVyZ2U6IDMyODcyOTUKKworIDdhYmI5MjYgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTE6MjQ6MjYgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS02LXBhdGNoZXMnIGludG8KKworIFY1LTYtcGF0Y2hlcworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGRpc3BsYXkgdGhlIGJyYW5jaCB3ZSdsbCBjb21taXQgdG8KKworCisyMDExLTA4LTA4ICBWbGFkaW1pciBLb25kcmF0aWV2IDx3dWxmMjAwMUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzM4NjYzMzoKKworIGZyb20gd3VsZjIwMDE6IGZpeCBpbnRlZ2VyIG92ZXJmbG93IGluIGRpc2sgcGVyY2VudCBjYWxjdWxhdGlvbnMgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDg0YTc3NWQwNTU3ZmVhOTc1NzBlNDE3MTVhMzE2NDk3MGI0YzAzYTIgTWVyZ2U6IDZmZmYxYzEKKworIGQzNzNjNGYgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnCisgOCAyMDoxMjozMiAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzg3MTM5OiBmcm9tCisKKyB5YWJlcmF1bmV5YTogQXZvaWQgc2VnZmF1bHQgaWYgdHJhcHNlc3MgdHJhbnNwb3J0IGVsZW1lbnQgY2FudCBiZQorIHBhcnNlZCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBuc3NmcGF0Y2hhcHBseTogc3BsaXQgdGhlCisKKyBkaXNwbGF5ZWQgZ2l0IGNvbW1pdCBjb21tYW5kIGludG8gbXVsdGlwbGUgc2VnbWVudHMKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMzODY5NjE6CisKKyBNYWtlIFNOTVAgR0VUIHdvcmsgaW4gYW4gQWdlbnRYIHN1YmFnZW50IGlmIHdyaXRlIHN1cHBvcnQgaXMKKyBkaXNhYmxlZCB2aWEgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIChNYXJrIFJ1c2spLgorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL21pYi5jOiBDSEFOR0VTOiBzbm1wbGliOiBGaXggYSBjcmFzaCB0aGF0IGNvdWxkIGJlCisKKyB0cmlnZ2VyZWQgYnkgY2FsbGluZyBfbWliaW5kZXhfYWRkKCkgd2l0aCB0aGUgc2Vjb25kIGFyZ3VtZW50IG5vdAorIGVxdWFsIHRvIC0xLgorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA2ZmZmMWMxYWU1MWIwNmM5ZDgwZmFmMTUzNzNhOTYzZDE3M2YxNGU4IE1lcmdlOiA4MzdjNTJlCisKKyA4Y2M5MDA0IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDEwOjU4OjU5IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgOGNhN2ZmMWU2OTJjYWVjNDE4NmI3ODhjOWFlMmQyN2JlMjEzMjkwZiBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gQXVnIDggMTA6MzM6NTYKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGI4ZjUyOWNiYTI3YzAxMTRiNGNiNzM0MGNmZDQ0OTUwNGZhMDc1MDYgTWVyZ2U6IDA4MjJmMmQKKworIDU1NmU5MzggQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gQXVnIDggMTA6MDU6MzYgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGZpeCBmdW5jdGlvbiBuYW1lIHR5cG8KKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyOTg4MmEwNzhhOTU5YTBmNzhiMDNlMDE5NjhmMWQxN2I3ZjZhMjk5IE1lcmdlOiA1ZTliZDJmCisKKyAwNDA5YzBhIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDEwOjAzOjM0IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBtYW51YWwgbWVyZ2Ugb2YgcHVsbC9wdXNoCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBtYWtlIG5zcHVsbC9uc3B1c2ggY2hlY2sgZm9yIGEKKworIGNsZWFuIHJlcG8KKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBuZXcgZnVuY3Rpb24gIm5zbWFrZWFsbCIgdG8gdGVzdAorCisgYnVpbGRpbmcgb24gZXZlcnkgYnJhbmNoCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZGVmYXVsdCB0byBtZXJnZQorCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTctcGF0Y2hlcycgaW50bworCisgVjUtNy1wYXRjaGVzCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOiBDSEFOR0VTOiBXaW5kb3dzOiBBdm9pZCB0aGF0IGlmCisKKyB0aGUgTmV0LVNOTVAgUGVybCBtb2R1bGVzIGhhdmUgYmVlbiBidWlsdCB3aXRoIGFub3RoZXIgdmVyc2lvbiBvZgorIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIHRoYW4gQWN0aXZlUGVybCB0aGF0IHVzaW5nIG9uZSBvZiB0aGVzZSBQZXJsCisgbW9kdWxlcyB0cmlnZ2VycyBhICJGcmVlIHRvIHdyb25nIHBvb2wiIGNyYXNoLiBUaGlzIHJlZ3Jlc3Npb24gd2FzCisgY2F1c2VkIGJ5IGNvbW1pdCAzYjE0YzU5Y2Y4Mjc4ZDQxMDIwN2ZmNDJkZWJkYTI2MzY0MjZhNDY4ICh0aGUKKyBuZXRzbm1wX2ZyZWUoKSBpbnRvIFNOTVBfRlJFRSgpIGNoYW5nZXMgaW4gdGhlICoueHMgZmlsZXMpLgorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBlMTA5NTM5OTMwNzAzY2IzMDUyZDUyNDFiMThhYzZmYzA2MmZhYWNhIE1lcmdlOiAwYzliNmNiCisKKyBlNDZiMTcwIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZworIDggMTg6MzQ6MTEgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL21pYi5jOiBDSEFOR0VTOiBzbm1wbGliOiBGaXggYSBjcmFzaCB0aGF0IGNvdWxkIGJlCisKKyB0cmlnZ2VyZWQgYnkgY2FsbGluZyBfbWliaW5kZXhfYWRkKCkgd2l0aCB0aGUgc2Vjb25kIGFyZ3VtZW50IG5vdAorIGVxdWFsIHRvIC0xLgorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA3ZjQyZDBkOTMzMjA0ODQxNTIyNzE0MjdjYzk4MDhjYmRhNDliYmQwIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcgOCAwOTo1MDo1MSAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDBjOWI2Y2JlOWRiZTJlYzUyMTdhOTViNjc4MWZkN2RjMWY2ZWJkYTcgTWVyZ2U6IGZhNmNlZjUKKworIDk2MzMyMGYgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnCisgOCAxODoxNDozNiAyMDExICswMjAwCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGEzYjg2NTRhMjMyYzU2M2JjOTdjYzk5MjVjZDk4NTkwYTMwYzViYzUgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZyA4IDE3OjI0OjE4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZmE2Y2VmNWNhOTFkZjNhMGIwMzQ1NWI2ODU1OWQyYmVlMjQ4MTAxYyBNZXJnZTogZjVmZTUzNgorCisgOGFkZDBkYSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFN1biBBdWcKKyA3IDEwOjE4OjU0IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYTBkZDNjYWYyNTkyNmU0MzQ2NTcxOGJmNDE3YTQ2NGMyZmIzNjM2NiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTdW4gQXVnIDcgMTA6MTc6MDEgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiAzMiBpcyB0b28gbGltaXRlZCBmb3IKKworIGJpZ2dlciB0YWJsZXM7IGluY3JlYXNlIHRoZSBtYXggbXNnIGNvdW50IHRvIDEyOAorCisyMDExLTA4LTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IG1ha2Ugcm9sbHVwIGFuZCBzeW5jIHN1cHBvcnQKKworIC0tcmViYXNlIGFuZCBjaGFuZ2UgdGhlIGRlZmF1bHQgYmFjayB0byBtZXJnZQorCisyMDExLTA4LTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBSRUFETUUud2luMzI6IENIQU5HRVM6IFdpbjMyOiBEb2N1bWVudGVkIGhvdyB0byB1c2UgYnVpbGQuYmF0IHdpdGgKKworIE9wZW5TU0wgZW5hYmxlZAorCisyMDExLTA3LTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBSRUFETUUud2luMzI6IENIQU5HRVM6IFdpbmRvd3M6IFJlbW92ZSBvdXRkYXRlZCBpbnN0cnVjdGlvbnMgYWJvdXQKKworIGVkaXRpbmcgd2luMzJcbGlic25tcF9kbGxcbGlic25tcC5kZWYgZnJvbSBSRUFETUUud2luMzIKKworMjAxMS0wNy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogUkVBRE1FLndpbjMyOiBDSEFOR0VTOiBXaW4zMjogRG9jdW1lbnQgaG93IHRvIGJ1aWxkIDY0LWJpdAorCisgZXhlY3V0YWJsZXMgZm9yIHRoZSB4NjQvYW1kNjQgYXJjaGl0ZWN0dXJlCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGY1ZmU1MzZlOGZkNmM0OGZlMjQzZGVjZDMxZmFjOWNmMWM5MmY0Y2MgTWVyZ2U6IDc4NTBlYTEKKworIDgwOTI4YTggQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnCisgNSAxNToxMzoyNyAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDgwOTI4YTg5MDljZmFiMzdmMDFiMzlhMDcxYTNlOGFkODU5NTYyMjIgTWVyZ2U6IGYxNmEwOTQKKworIDBkYmM4NjkgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnCisgNSAxMzo1NzozMCAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDBkYmM4NjlmZWMwN2Q4ZTkwZGJkMWM5NTQ5M2VlN2NiYzYyM2M5NWMgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZyA1IDEyOjQwOjMxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogQWRkCisKKyBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5kZWYgYW5kIHBlcmwvU05NUC90CisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDg2YzFlMmI5Njc5ZmVjMmNkNzk5YmE3NjAwNWMzZDYwZTlkNDc2MzQgTWVyZ2U6IGJjZDg2MzUKKworIGYxNmEwOTQgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnCisgNSAxMjoyMDo1MCAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDJmOGQ0ZjU3OTZjYmMxYzdlOTY3YWNkYWE4MDE5YjI0ZjE1MjBhMzYgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZyA1IDEyOjAyOjUxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBVbmJyZWFrIHRoZSBWNS00LXBhdGNoZXMgLSByZXZlcnQgY29tbWl0CisKKyBkMmM0NzY4YmQyZWZiNDg2NjQ0MzRhODMxNDI1YzJkZGE4NWQ3MTMzIChDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSAorIDMzNjIyMzM6IGZyb20geWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlCisgbm9pc2UpLgorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oOiAKKworIFVuYnJlYWsgdGhlIFY1LTQtcGF0Y2hlcyBicmFuY2ggLSB3YXMgYnJva2VuIGJ5IGNvbW1pdAorIGJmNzE3OGIwYjIyNTg3ZDQzZDFhODBjMjY5Y2QyMTZiZDU5MzAyMTQgKGFnZW50OiBjaGFuZ2UgdHlwZSBvZgorIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgdG8gbG9uZykKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaDogVW5icmVhayB0aGUgVjUtNC1wYXRjaGVzCisKKyBicmFuY2ggLSB3YXMgYnJva2VuIGJ5IGNvbW1pdAorIDBlNjg0MmZlMDgwY2VjODUzYjA4Y2QyMzIzMDE1YWJhYmMzODFjZTEgKENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0gKKyAzMzgzNDQxOiBmcm9tIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YKKyBmcmVlZCBtZW1vcnkpLgorCisyMDExLTA4LTA1ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBORVdTOiBtaW5vciBORVdTIHBvbGlzaAorCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGJjZDg2MzUwNzEzODIyOTYzZDM3NmVmZjU4MmE5MmY0M2U0MjZkNmMgTWVyZ2U6IDljODEwYTMKKworIDdhMjBmNzEgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgQXVnCisgNSAxMDoyODo1NSAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDNhYTk0OWZiZGZjMWE5NGE4MzQwYWQ4YmFmOGIzMTQ3NTZhMGJiOWQgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZyA1IDEwOjI2OjE1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgOWM4MTBhM2IzN2I2ODU3M2M0MDMzN2UyNDZlMmZhZjI5OWI3N2QzMSBNZXJnZTogNzFjYjJlOAorCisgNjEwZDYzZiBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAxMDo0MjowOCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDk0MzkzMGUxZTEyNDM4NWZkOTQ3MzhiNmRjZGEzN2QyOWRjN2FjN2YgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVGh1IEF1ZyA0IDEwOjQxOjQxCisgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0ZWRjYjg4ZGFlOGIyZTU5ZGM2ODNlODBkNDE0ZmE3ZWNlYzM2ODg1IE1lcmdlOiA2NWYzZWVmCisKKyAyZGQ5ZWQwIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDEwOjI0OjExIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNS1wYXRjaGVzJyBpbnRvCisKKyBWNS01LXBhdGNoZXMKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYmM1Y2EwM2EwNGFiMTljNjM0YTM0ZDA2MGIwYjE2Yjc0ODRjYjUyMCBNZXJnZTogODhmZGRiNworCisgOTBjMGU3NSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyA0IDE5OjEzOjA3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXB1c20uYzogc25tcHVzbTogRml4IHJlY2VudGx5CisKKyBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTEtMDgtMDQgIFN0dWFydCBIZW5kZXJzb24gPHQwancyZnUwa21nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X25ldGJzZC5jOiBDSEFOR0VTOiBvcGVuYnNkOgorCisgUEFUQ0ggMzM1NzkzMjogZnJvbSB0MGp3MmZ1MGttZzogQ2xlYW5pbmcgaW4gbWVtb3J5X25ldGJzZC5jIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBWbGFkaW1pciBLb25kcmF0aWV2IDx3dWxmMjAwMUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYzogQ0hBTkdFUzogYWdlbnQ6CisKKyBQQVRDSCAzMzg2MTQ3OiBmcm9tIHd1bGYyMDAxOiBmaXggVUNELVNOTVAtTUlCOjpkc2tVc2VkIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0NzNkN2U1Y2Q0ZDQxMWJiYTIwZWI4NTM1OWQ4NzI4MDYzMzAxY2JkIE1lcmdlOiBhNGU4YjYyCisKKyA4OGZkZGI3IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA5OjI4OjIyIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjEwMWJiMmQ3YWQ2ZGIwMzhjNzU1YWE5MTkzYzhhY2UwZGJkNGY1OCBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUaHUgQXVnIDQgMDk6Mjg6MDYKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIC5naXRpZ25vcmU6IGlnbm9yZSAqLm9yaWcgYW5kICoucmVqCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBoZWxwIG91dHB1dCBkZXNjcmliZXMgcmViYXNlIHZzCisKKyBtZXJnZSBiZXR0ZXIKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZjEyNmExN2M2YTMwNjM0NTVhNTExOTQwYjAyMzA0N2FiZDliNDhlZSBNZXJnZTogYWQ3NjVmNAorCisgNzdhNDc4NCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwOToyNToxNiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDQ1MmUxNzA3ZjIwOWVjNDVlN2M3ZjJhMzA0MGVmNTk1ZmI5ZDFhZjYgTWVyZ2U6IGRjNzU1YTYKKworIGIzNzJlNWEgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDk6MjU6MDMgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBTdHVhcnQgSGVuZGVyc29uIDx0MGp3MmZ1MGttZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIE1ha2VmaWxlLmluLCBhY2NvbmZpZy5oLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZDQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkNS5oOiBDSEFOR0VTOiBvcGVuYnNkOiBQQVRDSAorICAgICAgMzM1NzkyNzoKKworIGZyb20gdDBqdzJmdTBrbWc6IFJlY29nbmlzZSBvcGVuYnNkNSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBmaXggd2hlcmUgYXJndW1lbnRzIGFyZSBzZXQKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHNwbGl0IG5zc2ZwYXRjaGFwcGx5IGludG8gdHdvCisKKyBwYXJ0czogYXBwbHkgYW5kIGNvbW1pdGluZworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHBhdGNoIHVzaW5nIC1OCisKKworMjAxMS0wOC0wNCAgRGF2aWQgQXJub2xkIDxkamFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vZGVmYXVsdF9zdG9yZS4zLmJvdCwgbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYsIAorICAgICAgbWFuL2ZpeHByb2MuMS5kZWYsIG1hbi9taWIyYy5jb25mLjUuaW4sIG1hbi9uZXQtc25tcC1jb25maWcuMS5kZWYsCisgICAgICAgbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmLCAKKyAgICAgIG1hbi9zbm1wLmNvbmYuNS5kZWYsIG1hbi9zbm1wYnVsa2dldC4xLmRlZiwKKyAgICAgIG1hbi9zbm1wYnVsa3dhbGsuMS5kZWYsICBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXBjb25mLjEuZGVmLAorICAgICAgbWFuL3NubXBkLjguZGVmLCAgbWFuL3NubXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wZC5leGFtcGxlcy41LmRlZiwgCisgICAgICBtYW4vc25tcGRlbHRhLjEuZGVmLCBtYW4vc25tcGRmLjEuZGVmLCBtYW4vc25tcGdldC4xLmRlZiwgCisgICAgICBtYW4vc25tcGdldG5leHQuMS5kZWYsIG1hbi9zbm1wbmV0c3RhdC4xLmRlZiwgbWFuL3NubXBzZXQuMS5kZWYsIAorICAgICAgbWFuL3NubXBzdGF0dXMuMS5kZWYsIG1hbi9zbm1wdGFibGUuMS5kZWYsIG1hbi9zbm1wdGVzdC4xLmRlZiwgCisgICAgICBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgbWFuL3NubXB0cmFwLjEuZGVmLCBtYW4vc25tcHRyYXBkLjguZGVmLCAKKyAgICAgIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZiwgbWFuL3NubXB1c20uMS5kZWYsIG1hbi9zbm1wdmFjbS4xLmRlZiwgCisgICAgICBtYW4vc25tcHdhbGsuMS5kZWY6IENIQU5HRVM6IG1hbjogUEFUQ0ggMzMxMjg2MTogZnJvbSBkamE6IE1hbgorICAgICAgcGFnZXMKKworIGh5cGhlbi12cy1taW51cyBjbGVhbnVwIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRGV0ZWN0IChhbmQgcmVqZWN0KSBPcGVuU1NMCisKKyAxLjAuMAorCisyMDExLTA4LTA0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogQ29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIHNpbGVudAorCisgaW5zdGFsbAorCisyMDExLTA4LTA0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogRW5zdXJlIFdpbmRvd3MgcGFja2FnZQorCisgdW5pbnN0YWxscyBjb21wbGV0ZWx5LgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA4MWM2M2ZiNWM1ZTRhYmI5YzI5YWNhODliZjlkNjk0NDEwMDg2ZTk3IE1lcmdlOiA0YTY5MjBhCisKKyBkYzc1NWE2IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA4OjMzOjM0IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOiBhZGRlZCBzcGFjaW5nIHRvIG1hdGNoIHRoZSBsYXRlciBicmFuY2hlcworCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogbWFudWFsIG1lcmdlCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOiByZW1vdmVkIGFjY2lkZW50aWFsbHkgZHVwbGljYXRlZCBjb2RlCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBtYW51YWwgbWVyZ2UKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IG1hbnVhbCBtZXJnZQorCisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzYyMjMzOiBmcm9tCisKKyB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUgbm9pc2UgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfdmFycy5jLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzA4OgorICAgICAgZnJvbQorCisgeWFiZXJhdW5leWE6IEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoIHJlY2VudCBoZWFkZXIKKyBzaHVmZmxpbmcgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWxsb3cgbnNyb2xsdXAgdG8gdGFrZSBhIC0tbWVyZ2UKKworIGZsYWcgZm9yIG1lcmdpbmcgaW5zdGVhZCBvZiByZWJhc2luZworCisyMDExLTA4LTA0ICBTYWNoaW4gU3VyZW5kcmFuIDxzYWNoaW5zdXJlbmRyYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0ggMzM4MzQ0MTogZnJvbQorCisgc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZiBmcmVlZCBtZW1vcnkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUuaW46IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMjg6IGZyb20geWFiZXJhdW5leWE6CisKKyBBZGQgRnJlZUJTRCA5LnggdG8gc3VwcG9ydGVkIE9TZXMgbGlzdCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzNjIyMzM6IGZyb20KKworIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZSBub2lzZSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF92YXJzLmMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMDg6CisgICAgICBmcm9tCisKKyB5YWJlcmF1bmV5YTogRml4IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgOS54IHdpdGggcmVjZW50IGhlYWRlcgorIHNodWZmbGluZyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhbGxvdyBuc3JvbGx1cCB0byB0YWtlIGEgLS1tZXJnZQorCisgZmxhZyBmb3IgbWVyZ2luZyBpbnN0ZWFkIG9mIHJlYmFzaW5nCisKKzIwMTEtMDgtMDQgIFNhY2hpbiBTdXJlbmRyYW4gPHNhY2hpbnN1cmVuZHJhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSCAzMzgzNDQxOiBmcm9tCisKKyBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mIGZyZWVkIG1lbW9yeSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS5pbjogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMyODogZnJvbSB5YWJlcmF1bmV5YToKKworIEFkZCBGcmVlQlNEIDkueCB0byBzdXBwb3J0ZWQgT1NlcyBsaXN0IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM2MjIzMzogZnJvbQorCisgeWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlIG5vaXNlIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX3ZhcnMuYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMwODoKKyAgICAgIGZyb20KKworIHlhYmVyYXVuZXlhOiBGaXggY29tcGlsYXRpb24gb24gRnJlZUJTRCA5Lnggd2l0aCByZWNlbnQgaGVhZGVyCisgc2h1ZmZsaW5nIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFsbG93IG5zcm9sbHVwIHRvIHRha2UgYSAtLW1lcmdlCisKKyBmbGFnIGZvciBtZXJnaW5nIGluc3RlYWQgb2YgcmViYXNpbmcKKworMjAxMS0wOC0wNCAgU2FjaGluIFN1cmVuZHJhbiA8c2FjaGluc3VyZW5kcmFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIIDMzODM0NDE6IGZyb20KKworIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YgZnJlZWQgbWVtb3J5IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM2MjIzMzogZnJvbQorCisgeWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlIG5vaXNlIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFsbG93IG5zcm9sbHVwIHRvIHRha2UgYSAtLW1lcmdlCisKKyBmbGFnIGZvciBtZXJnaW5nIGluc3RlYWQgb2YgcmViYXNpbmcKKworMjAxMS0wOC0wNCAgU2FjaGluIFN1cmVuZHJhbiA8c2FjaGluc3VyZW5kcmFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIIDMzODM0NDE6IGZyb20KKworIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YgZnJlZWQgbWVtb3J5IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCBzbm1wbGliL2tleXRvb2xzLmMsCisgICAgICBzbm1wbGliL3NjYXBpLmM6CisKKyBDSEFOR0VTOiBidWlsZGluZzogUEFUQ0ggMzM4Mzk1MTogZnJvbSB5YWJlcmF1bmV5YTogRml4IC1XdW51c2VkCisgY29tcGlsZSB3YXJuaW5ncyB3aXRoIEZyZWVCU0QvTmV0QlNEIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCBzbm1wbGliL2tleXRvb2xzLmMsCisgICAgICBzbm1wbGliL3NjYXBpLmM6CisKKyBDSEFOR0VTOiBidWlsZGluZzogUEFUQ0ggMzM4Mzk1MTogZnJvbSB5YWJlcmF1bmV5YTogRml4IC1XdW51c2VkCisgY29tcGlsZSB3YXJuaW5ncyB3aXRoIEZyZWVCU0QvTmV0QlNEIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBlODc4YWJiZGIxODA4ZWY4M2UwYTgwNzQ1MzZmYjU0ZTEzMjE5YThiIE1lcmdlOiA0MDNkZTQyCisKKyA4NzhmYmY0IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA3OjU1OjAwIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjUwYWZhMDY4OTJmZDg5N2FjMzFlMzgzNmE3ZmZjOWUyYjRjZjdiOSBNZXJnZTogMmMxNGMxYworCisgM2FmYzVlMCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwNzo1MTozMyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDU3OGNkN2NjZTM1MWFlOGQ5MDRlYzNkODBiZTliYTZkMWQ0OGE3MTIgTWVyZ2U6IDI1OTg4YmUKKworIGYzYmM1NTEgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDc6NTA6NTYgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGF1dG9jb25mCisKKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnM6IENIQU5HRVM6IGJ1aWxkaW5nOiBQQVRDSAorCisgMzM4Mzk0OTogZnJvbSB5YWJlcmF1bmV5YTogRml4IGF1dG9jb25mIHRlc3RzIGZvciBzeXMvbWJ1Zi5oIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHByb21wdCBmb3IgcGF0Y2ggYW5kIGFuIGFyZWEsIGFuZAorCisgdXNlIHRoZSBwcm9wZXIgQ0hBTkdFUyBsaW5lIGZvcm1hdAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IFVzZSBmZXRjaCAtLWFsbCBhbmQgcmViYXNlIGFzCisKKyBzdWdnZXN0ZWQgYnkgQmFydCBmb3Igc3BlZWQgaW1wcm92ZW1lbnRzCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGQ2YTFhODllNmY2NDg5NTFhOWI4MzE5MzJkM2NjMjMwODIxZjJkMzcgTWVyZ2U6IGRjYjcxMmYKKworIDg3MmUwMTMgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgNCAxMjowNjoxOCAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDQ0OTY5YjRlNTdjMjcxOTRlNWJkMzU3YmM0NTI3NWZlYjg2OTVkMjIgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bCA4IDIwOjUyOjI1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6IENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IEludm9rZQorCisgU25tcFV0aWxPaWRGcmVlKCkgYmVmb3JlIFNubXBVdGlsT2lkQ3B5KCkuIEl0J3Mgbm90IGNsZWFyIHlldCB3aHkKKyB0aGUgb3JpZ2luYWwgY29kZSBkaWQgbm90IG1ha2Ugc25tcHdhbGsgdHJpZ2dlciBhIG1lbW9yeSBsZWFrLgorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkY2I3MTJmZmM4NmIzMzU4MzAwMGVmNGFlOWE1MWNlZDI1Y2QxNWJmIE1lcmdlOiBlODVjZmE1CisKKyA5ODYyM2VmIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDQgMTE6MzY6MTcgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4YTAxZWM2NDIzZDQwMGM0YTEzY2NhYzY4YTM3OTFkMDIxOGEwODg1IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcgNCAxMToxOToxNyAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGU4NWNmYTU5OWIyM2I3NmQ5NzkxM2M5NmI1ZDcwM2JmZjZiYTQ5NDQgTWVyZ2U6IGIwNTZlZTYKKworIGUyMWVlZjIgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgNCAwODo0NDo0MyAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzogQ0hBTkdFUzogYWdlbnQ6CisKKyBBdm9pZCB0aGF0IGEgTUlCIHdhbGsgb24gdGhlIGhvc3QgcmVzb3VyY2VzIE1JQiB0cmlnZ2VycyBhIGNyYXNoIG9uCisgRmVkb3JhIDE1CisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGIwNTZlZTZlYjUzOTA5YWQwNGYxNmVjMjZkMjY5MGQ3YTA4MzE5MmEgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZyA0IDA3OjU5OjA0IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2MKKyAgICAgICBlc3MuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2VzcworICAgICAgIC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCBhZ2VudC9zbm1wX2FnZW50LmMsIAorICAgICAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXB0bHMuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYywgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wX2VudW0uYywgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi9zbm1wdXNtLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYiwgc25tcGQ6CisKKyBwZXJsOiBFbGltaW5hdGUgZGVhZCB2YXJpYWJsZXMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYWU4ZTNlY2QyZGY0Y2YzNzYyNTk0NGFkZWQxZGZlNDczNWQ0NGVlYSBNZXJnZTogNzMxODdjZQorCisgOTMzNWUxOSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFdlZCBBdWcgMyAxNDozNzozNiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDc5NGY5YTY5ZDdlYjY0MjI2ODIwMGIwYTRiMTk5MTUxZGVmNjZlZDAgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEF1ZyAzIDE0OjM2OjI1CisgMjAxMSAtMDcwMAorCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgY29tbWVudAorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXQgZW5kIG9mIG5zcm9sbHVwIG1lbnRpb24gdGhhdAorCisgbm93IHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJ1biBuc3N5bmMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhIG5ldyBuc3N5bmMoKSBmdW5jdGlvbiBmb3IKKworIHB1c2gvcHVsbGluZyBhY3RpdmUgYnJhbmNoZXMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGNvbW1lbnQKKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF0IGVuZCBvZiBuc3JvbGx1cCBtZW50aW9uIHRoYXQKKworIG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byBydW4gbnNzeW5jCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYSBuZXcgbnNzeW5jKCkgZnVuY3Rpb24gZm9yCisKKyBwdXNoL3B1bGxpbmcgYWN0aXZlIGJyYW5jaGVzCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYXQgZW5kIG9mIG5zcm9sbHVwIG1lbnRpb24gdGhhdAorCisgbm93IHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJ1biBuc3N5bmMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhIG5ldyBuc3N5bmMoKSBmdW5jdGlvbiBmb3IKKworIHB1c2gvcHVsbGluZyBhY3RpdmUgYnJhbmNoZXMKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGNvbW1lbnQKKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF0IGVuZCBvZiBuc3JvbGx1cCBtZW50aW9uIHRoYXQKKworIG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byBydW4gbnNzeW5jCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYSBuZXcgbnNzeW5jKCkgZnVuY3Rpb24gZm9yCisKKyBwdXNoL3B1bGxpbmcgYWN0aXZlIGJyYW5jaGVzCisKKzIwMTEtMDgtMDMgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oOiBSZWVuYWJsZSBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlCisgICAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IEEgbmV3IGZ1bmN0aW9uOiBuc3NmcGF0Y2hhcHBseQorCisgdGhhdCBhdXRvLXB1bGxzIGdpdCBjb21tYW5kIGxpbmUgaW5mbyBmcm9tIFNGCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpOiBhZGRlZCB2YXJpYWJsZXMgbmFtZXMgdG8KKworIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOiBXb3JkaW5nIGNoYW5nZXMgdG8KKworIGhlbHAgZGVzY3JpYmUgY29udGV4dHMgYmV0dGVyCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtVTY0Lm0yaTogQWRkZWQKKworIHRoZSBtaXNzaW5nIFU2NCBtMmkgZmlsZQorCisyMDExLTA4LTAzICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIuaDogUmVlbmFibGUgSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZQorICAgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBBIG5ldyBmdW5jdGlvbjogbnNzZnBhdGNoYXBwbHkKKworIHRoYXQgYXV0by1wdWxscyBnaXQgY29tbWFuZCBsaW5lIGluZm8gZnJvbSBTRgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaTogYWRkZWQgdmFyaWFibGVzIG5hbWVzIHRvCisKKyB0aGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzogV29yZGluZyBjaGFuZ2VzIHRvCisKKyBoZWxwIGRlc2NyaWJlIGNvbnRleHRzIGJldHRlcgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LVU2NC5tMmk6IEFkZGVkCisKKyB0aGUgbWlzc2luZyBVNjQgbTJpIGZpbGUKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBBIG5ldyBmdW5jdGlvbjogbnNzZnBhdGNoYXBwbHkKKworIHRoYXQgYXV0by1wdWxscyBnaXQgY29tbWFuZCBsaW5lIGluZm8gZnJvbSBTRgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaTogYWRkZWQgdmFyaWFibGVzIG5hbWVzIHRvCisKKyB0aGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzogV29yZGluZyBjaGFuZ2VzIHRvCisKKyBoZWxwIGRlc2NyaWJlIGNvbnRleHRzIGJldHRlcgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LVU2NC5tMmk6IEFkZGVkCisKKyB0aGUgbWlzc2luZyBVNjQgbTJpIGZpbGUKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBBIG5ldyBmdW5jdGlvbjogbnNzZnBhdGNoYXBwbHkKKworIHRoYXQgYXV0by1wdWxscyBnaXQgY29tbWFuZCBsaW5lIGluZm8gZnJvbSBTRgorCisyMDExLTA3LTE4ICBJbHlhIFlhbm9rIDx5YW5va0BlbWNyYWZ0LmNvbT4KKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmM6IGFnZW50OiBjaGFuZ2UKKworIHR5cGUgb2Ygc25tcF9lbmFibGVhdXRoZW50cmFwcyB0byBsb25nIFR5cGUgb2Ygc25tcF9lbmFibGVhdXRoZW50cmFwcyB2YXJpYWJsZSBpcyBjaGFuZ2VkIGZyb20gaW50IHRvIGxvbmcuCisgVGhpcyBmaXhlcyB0aGUgYnVnIHdpdGggd3JpdGluZyB0byBzbm1wRW5hYmxlQXV0aGVuVHJhcHMgaWYgc2VydmVyCisgaXMgY29tcGlsZWQgZm9yIDY0Yml0IChzbm1wc2V0IHJlcG9ydHMgd3JvbmcgbGVuZ3RoKS4gVGhpcyBidWcgd2FzCisgaW50cm9kdWNlZCBhIGxvbmcgdGltZSBhZ28gKGJ5IGZhZWVjZDAgY29tbWl0KS4gIEFjdHVhbGx5IHRoaXMgaXMgYSAnbGVzcyBlZmZvcnQnIHR5cGUgb2YgZml4IGJ1dCBJIHdvbmRlciB3aHkgd2UKKyBuZWVkIGEgbG9uZyB0byBzdG9yZSBhbiBJTlRFR0VSIGluIHRoZSBmaXJzdCBwbGFjZT8gU2lnbmVkLW9mZi1ieTogSWx5YSBZYW5vayA8eWFub2tAZW1jcmFmdC5jb20+IFNpZ25lZC1vZmYtYnk6IFdlcworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWN0eC1nZXQubTJpOiBhZGRlZCB2YXJpYWJsZXMgbmFtZXMgdG8KKworIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOiBXb3JkaW5nIGNoYW5nZXMgdG8KKworIGhlbHAgZGVzY3JpYmUgY29udGV4dHMgYmV0dGVyCisKKzIwMTEtMDgtMDIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtVTY0Lm0yaTogQWRkZWQKKworIHRoZSBtaXNzaW5nIFU2NCBtMmkgZmlsZQorCisyMDExLTA4LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA2YWQ3ZTI4ZmY5ZTVlNGViYzEzNThlZTM5Y2M5Nzk2YTQ0YTFiZWU3IE1lcmdlOiBmMjgzMmUzCisKKyAxZTE1NGNlIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgV2VkIEF1ZworIDMgMTk6MTU6MjQgMjAxMSArMDIwMAorCisyMDExLTA4LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA2MWIxNzhmMWVlODk1MmFhMDNhYTNiMWJhNTFmNGE2NjU1ZTQ3ZjAxIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFdlZCBBdWcgMyAxODowOTo0NyAyMDExICswMjAwCisKKzIwMTEtMDgtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDogV2hpdGVzcGFjZS1vbmx5IGNoYW5nZTogZml4IGluZGVudGF0aW9uCisKKyBvZiBhbiAjaW5jbHVkZSBkaXJlY3RpdmUKKworMjAxMS0wOC0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogcGVybC9OZXRTTk1QLnhzOiBDSEFOR0VTOiBQZXJsOiBSZW1vdmUgZmlsZSBwZXJsL05ldFNOTVAueHMKKworIGJlY2F1c2UgaXQgYnJlYWtzIHRoZSBXaW5kb3dzIGJ1aWxkLiAgVG8gV2VzOiBpZiB5b3UgY2FuIHRlbGwgbWUgaG93IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB5b3Ugb2JzZXJ2ZWQKKyBJJ2xsIHRyeSB0byBmaW5kIGEgcG9ydGFibGUgZml4LiAgVGhpcyByZXZlcnRzIGNvbW1pdCBkNTQ4NzFmNTI5MzY3NWM4MDU4ZWNjZTg4ZmVkNWI2NDZjODM2MzIzICgiQWRkZWQKKyBhIGJvZ3VzIGVtcHR5IC54cyBmaWxlIGZvciBidW5kbGluZyBvbiBuZXdlciBwZXJsIHRoYXQgd2FudHMKKyAic29tZXRoaW5nIiIpLgorCisyMDExLTA4LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwZjQ4OWIxOTlhZGFiNDhiMTYzM2ViY2FmNWZmNWE3YzIyYzRjYjg5IE1lcmdlOiBmNGVhYTAyCisKKyA3MmE1OWJjIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEF1ZworIDIgMTA6MTE6NTMgMjAxMSArMDIwMAorCisyMDExLTA4LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA3ZmNjMGI4MDMyZjhkYTViN2JjMzAwNTlhZjBiYTY1NmVhZTcxMDkxIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcgMSAxNDoxMToyOCAyMDExICswMjAwCisKKzIwMTEtMDgtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jOiBGaXggYSBjb21waWxlciB3YXJuaW5nIGluCisKKworIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCisKKzIwMTEtMDgtMDEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEFkZCBmaWxlIG5hbWVzIGFuZCBwYXR0ZXJucyBmb3Igb3V0cHV0CisKKyBmaWxlcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBXaW5kb3dzIGJ1aWxkCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IFNvcnQgYWxwaGFiZXRpY2FsbHkKKworCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBBZGQgYXBwcy9zc2h0b3NubXAKKworCisyMDExLTA4LTAxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgLmdpdGlnbm9yZSwgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QtYy5pbmMsIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QteHMuaW5jOiBSZW1vdmUgdHdvIGdlbmVyYXRlZCBQZXJsIGZpbGVzLgorCisKKzIwMTEtMDgtMDIgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGY0ZWFhMDJkOWIwNzZhNjdkNzI3MmRlN2VlZjhlOWRmYmYxODliYmYgTWVyZ2U6IDQwMTI1ZDgKKworIGFkYWRjYjkgQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDIgMDA6NTc6NTEgMjAxMSArMDIwMAorCisyMDExLTA4LTAyICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L25zYi1mdW5jdGlvbnM6IHN1cHByZXNzICJvayIgdGVzdCBvdXRwdXQgaW4gbnNiCisKKworMjAxMS0wOC0wMSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDQwMTI1ZDg1MzljZDg5Zjk1MmZiYzI0NTg4YzVlODFlOWNkODIxZmUgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBBdWcgMQorIDEzOjU4OjMzIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNWFjZjBkMmNlYjM5Nzc5NjRlZDM5ZjAwMzA3M2JhNjQxMzhjMmViZCBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBTdW4gSnVsIDMxIDIzOjU3OjQxCisgMjAxMSArMDIwMAorCisyMDExLTA3LTMxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBhNzcyMmE4MWY5Y2I3YWE4NjcwZTdjMjM4NjAxMzYyYTMxMDg3YWNjIE1lcmdlOiAyNDJlMTc5CisKKyBhZTlhYzZjIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU3VuIEp1bAorIDMxIDA5OjExOjQ1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYXBwcy9zc2h0b3NubXAuYzogRml4IGFuIGluY29ycmVjdCBzb3VyY2UgY29kZSBjb21tZW50OiB0aGVyZSBpcworCisgbm8gcmVxdWlyZW1lbnQgaW4gdGhlIEFOU0kgQyBzdGFuZGFyZCB0aGF0IHN0YWNrIHZhcmlhYmxlcyBzaG91bGQgYmUKKyBpbml0aWFsaXplZCB0byB6ZXJvLgorCisyMDExLTA3LTMxICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAyNDJlMTc5N2IyNjk0YTA2ODk4NTZhZTM2ZDA1ZDM0MTNhYWY4ZDc3IEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFN1biBKdWwgMzEgMDE6NDQ6MDkKKyAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6IENIQU5HRVM6IGJ1aWxkaW5nOiBidWlsZCBmaXggZm9yIHN5c3RlbXMgbGFja2luZworCisgZ2V0YWRkcmluZm8oKSBhbmQgRUFJX0ZBSUwgKGUuZy4gSFAtVVggMTAuMjAvMTEuMDApCisKKzIwMTEtMDctMzAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDE4ZGY3NTlmMTliOTc1YzQ0OWQwMTBiYjBhMTYyMTE5YmI2ODM2MGQgTWVyZ2U6IDU0YTQ0Y2IKKworIDcwNTA3MTggQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTYXQgSnVsCisgMzAgMTY6Mzk6MTMgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4MmQ3M2ZiMTFiZTNhZTMxZjM5YzlkNjE4ZDUzODhkYzliMTAwNmQ3IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwgMjkgMjA6NTE6MjcgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBhdXRvcmVjb25mCisKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogYXV0b3JlY29uZgorCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDEwOWY2Njk0ZDc4OGY0OGViZDlmYzBhMWU5MGM0NWFiYzM3YmVhMjAgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgU2F0IEp1bCAzMCAxNDoyMjoxOQorIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgN2Q4MTAwZWVkNDU5YTFmZjFhMjBjMDY3MzY0ZmE2Y2I0NzQ5MTMwOSBNZXJnZTogMTE2YzI0ZgorCisgOWU0N2FjNCBBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFNhdCBKdWwgMzAgMDA6MjA6MDEgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L25zYi1mdW5jdGlvbnMsIGRpc3QvbnNiLW5pZ2h0bHksIGRpc3QvbnNiLXBhY2thZ2U6IG1pbm9yIG5zYgorCisgZml4ZXMvZW5oYW5jZW1lbnRzIGZyb20gbXkgb2xkIHN2biB0cmVlCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDExNmMyNGYwZjdmYjNmOTliYTY0NjczMGY2MWM1NmQxYWUyM2JhNDEgTWVyZ2U6IDk4MmZiN2YKKworIDRmYzBiOGIgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsCisgMjkgMTE6MzE6MjAgMjAxMSArMDIwMAorCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBjNDgxNzNjMDZhOWVhYWRiZjgxZTZiNDk2MmQ1NWVmMGE1NGRiMjUxIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwgMjkgMTA6Mjc6MzkgMjAxMSArMDIwMAorCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBjb25maWd1cmUsIGx0bWFpbi5zaCwgbTQvbGlidG9vbC5tNDogUmVydW4gYXV0b3JlY29uZgorCisKKzIwMTEtMDctMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IFNvcnQgYWxwaGFiZXRpY2FsbHkKKworCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBBZGQgYXBwcy9zc2h0b3NubXAKKworCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5jOiBGaXggdHdvIGZpbGVuYW1lcyBpbiBob3N0IG1pYgorCisgc291cmNlIGNvZGUgY29tbWVudHMuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA5ODJmYjdmZDhiYWIyNWM0MzIyYWE2MmM1MDQzNzAzNmNlMjk2ZTNlIE1lcmdlOiAxZWRhNjc1CisKKyAzNDU4MTI4IEF1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBKdWwgMjggMTY6MjQ6MDMgMjAxMSArMDIwMAorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBGaXggcG90ZW50aWFsCisKKyBzaWdzZWd2IHdoZW4gYW4gaWZUYWJsZSBlbnRyeSBpcyByZW1vdmVkIGFzIHJlc3VsdCBvZiBib3RoCisgaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIGFuZCBpbnRlcmZhY2VfZmFkZW91dCBhdCB0aGUgc2FtZSB0aW1lLgorCisyMDExLTA3LTI4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhcHBzL3NzaHRvc25tcC5jOiBNYWtlIGFwcHMvc3NodG9zbm1wLmMgYnVpbGQgYWdhaW4gKHdhcyBicm9rZW4gYnkKKworIGNvbW1pdCA2MTIyNDdjZGYxNGMxZTc0NWMzODRjZWZlMWYzZmRlM2U0NDViMzQ3IHRoYXQgY2hhbmdlZAorIE1TR19OT1NJR05BTCBpbnRvIE5FVFNOTVBfTk9TSUdOQUwpCisKKzIwMTEtMDctMjggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDFlZGE2NzUzYjdmZTdkM2IzZjIxN2MwOTI1NGVjMDJkMGVlMWQwY2UgTWVyZ2U6IGRiOGI4NjAKKworIGEyZjllY2UgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgSnVsCisgMjggMTU6MzI6MjggMjAxMSArMDIwMAorCisyMDExLTA3LTI4ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczE6IAorCisgQ0hBTkdFUzogc25tcGQ6IFJlc3RvcmUgc3RvcmFnZSB0YWJsZXMgb24gTGludXgKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBEb2N1bWVudCBpbnRlcmZhY2VfcmVwbGFjZV9vbGQgb3B0aW9uLgorCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogYWRkZWQgJ2ludGVyZmFjZV9yZXBsYWNlX29sZCcgb3B0aW9uIHRvIHJlbW92ZSBvbGQgZW50cmllcyBpbgorIGlmVGFibGUgd2hlbiBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFscmVhZHkgZXhpc2luZyBvbmUKKyBhcHBlYXJzLiAgRS5nLiByZW1vdmUgb2xkIHBwcDAgaW50ZXJmYWNlIHdoZW4gbmV3IHBwcDAgc2hvd3MgdXAuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogRG9jdW1lbnQgdGhlIGludGVyZmFjZV9mYWRlb3V0IG9wdGlvbi4KKworCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBBbGxvdyBpZlRhYmxlCisKKyBlbnRyaWVzIHRvIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgd2hlbiBhcHByb3ByaWF0ZSBpbnRlcmZhY2UKKyBkaXNhcHBlYXJzIChpLmUuIGludGVyZmFjZV9mYWRlb3V0ID0gMCB3b3JrcyBhcyBleHBlY3RlZCkuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogYWRkZWQgJ2ludGVyZmFjZV9mYWRlb3V0JyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzZXQKKyBsaWZldGltZSBvZiBpZlRhYmxlIGVudHJpZXMgb2YgcmVtb3ZlZCBpbnRlcmZhY2VzLiAgUHJldmlvdXMgbGlmZXRpbWUgd2FzIGhhcmRjb2RlZCA1IG1pbnV0ZXMsIG5vdyBpdCdzIGNvbmZpZ3VyYWJsZS4KKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGQ2MmEwZWI5MDcwYjRkOGQ5ZmUyYmNmZGI0ZDUzZDM3ZWY4MTRmOWIgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFRodSBKdWwgMjgKKyAxNDo0OTowOCAyMDExICswMjAwCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogYWRkZWQgJ2ludGVyZmFjZV9yZXBsYWNlX29sZCcgb3B0aW9uIHRvIHJlbW92ZSBvbGQgZW50cmllcyBpbgorIGlmVGFibGUgd2hlbiBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFscmVhZHkgZXhpc2luZyBvbmUKKyBhcHBlYXJzLiAgRS5nLiByZW1vdmUgb2xkIHBwcDAgaW50ZXJmYWNlIHdoZW4gbmV3IHBwcDAgc2hvd3MgdXAuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogRG9jdW1lbnQgdGhlIGludGVyZmFjZV9mYWRlb3V0IG9wdGlvbi4KKworCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBBbGxvdyBpZlRhYmxlCisKKyBlbnRyaWVzIHRvIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgd2hlbiBhcHByb3ByaWF0ZSBpbnRlcmZhY2UKKyBkaXNhcHBlYXJzIChpLmUuIGludGVyZmFjZV9mYWRlb3V0ID0gMCB3b3JrcyBhcyBleHBlY3RlZCkuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6IENIQU5HRVM6CisKKyBzbm1wZDogYWRkZWQgJ2ludGVyZmFjZV9mYWRlb3V0JyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzZXQKKyBsaWZldGltZSBvZiBpZlRhYmxlIGVudHJpZXMgb2YgcmVtb3ZlZCBpbnRlcmZhY2VzLiAgUHJldmlvdXMgbGlmZXRpbWUgd2FzIGhhcmRjb2RlZCA1IG1pbnV0ZXMsIG5vdyBpdCdzIGNvbmZpZ3VyYWJsZS4KKworMjAxMS0wNy0yOCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFwcHMvc3NodG9zbm1wLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzogQ0hBTkdFUzogYnVpbGRpbmc6IGJ1aWxkCisgICAgICBmaXgKKworIGZvciBzeXN0ZW1zIGxhY2tpbmcgTVNHX0RPTlRXQUlUCisKKzIwMTEtMDctMjcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jOiBDSEFOR0VTOiBzbm1wZDogTWFrZQorCisgVENQLU1JQjo6dGNwQ3VyckVzdGFiIHdvcmsgYWdhaW4uIFdhcyBicm9rZW4gaW4gNS43IGJ5IHRoZQorIGludHJvZHVjdGlvbiBvZiB0aGUgImZlYXR1cmVzIiBmZWF0dXJlLgorCisyMDExLTA3LTI3ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZmI4ODA3NGZiYmMyNjhjN2YwNTA5NDkxNTM1YWVjNWZlY2IwNTY4NCBNZXJnZTogYTc0M2FlNQorCisgMzgyMTI3MyBBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBXZWQgSnVsIDI3IDE0OjQ3OjI1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNyAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDMxZmEwN2NkOWZmZGU0NmQ0MWQyYjU4MzhjM2ZjNGQwMTU0OGJmYjUgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBKdWwgMjcKKyAxNDo0NTo0NyAyMDExICswMjAwCisKKzIwMTEtMDctMjcgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBDSEFOR0VTOiBzbm1wZDogcnVuIHNpZ25hbCBoYW5kbGVycyB3aGVuIHNlbGVjdCgpCisKKyBpcyBpbnRlcnJ1cHRlZC4gIFRoaXMgYmVoYXZpb3IgaXMgaW5kaWNhdGVkIGluIGNvbW1lbnQgb24gbGluZSAxMjQ0LCBidXQgaXQgd2FzIG5vdAorIGFjdHVhbGx5IGRvbmUuCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDJlOTQ2NmQ3ZjU5ZDY1ZDA1MDI3NzczNWU0ZWQ5ZDMwNzE5ZmY3NTIgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bCAyNiAxMzoxMDowNCAyMDExICswMjAwCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDc3MDgyOTY3NjBlYWY1YTgwZDg1NDA3NDZjOWMyNDk4MjZmZDFiZmUgTWVyZ2U6IGVhMTFlNWUKKworIGNkNmUzODIgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsCisgMjYgMTY6MjE6NDEgMjAxMSArMDIwMAorCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6IENsYXJpZnkgYW4gSVB2NiBzb3VyY2UgY29kZSBjb21tZW50CisKKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBtYW4vbmV0c25tcF9oYW5kbGVyLjM6IFNwZWxsaW5nIGZpeDoKKworIGRlZmluZWR5IC0+IGRlZmluZWQKKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zOiBTcGVsbGluZworCisgZml4OiBhbGV2aWF0ZSAtPiBhbGxldmlhdGUKKworMjAxMS0wNy0yNiAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGRkMmM0NzEzMzQ5M2Q1YTAwZGU2YjNjZGJjZmFjN2U5ZDQ0YjZmZmUgTWVyZ2U6IGY5Y2NiYzcKKworIGVhMTFlNWUgQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEp1bCAyNiAxNDoyNToyOCAyMDExICswMjAwCisKKzIwMTEtMDctMjYgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjNWE4NDY0YzQyYTk0YzI1MGVlMmRmYTJhNDczMTA5YTczNDIwM2Q4IEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgSnVsIDI2CisgMTQ6MjQ6NTUgMjAxMSArMDIwMAorCisyMDExLTA3LTI1ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZjljY2JjNzcyNjY2MTM0ZDFkMTc4YjUwNWFmOWRkY2RkOWVkNDI0NCBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEp1bCAyNQorIDE1OjAyOjE1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYjBjMGEzNTVkNWY2MDFhMTFiZTQ5MTRmYmY3MTM3MTZhYmQzMGEyOSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgSnVsIDE5CisgMTg6MzY6MTEgMjAxMSAtMDcwMAorCisyMDExLTA3LTIwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjMTRmYzM4NjE0YmFmMTBkNTE3MTM2ZjA0ODA5MDdiN2YwM2Q4ZDc0IEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBKdWwgMjAKKyAxMzo0NDo1OSAyMDExIC0wNzAwCisKKzIwMTEtMDctMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmM6IHJlbW92ZSBicm9rZW4gd2hpdGVzcGFjZSBsaW5lcyB0aGF0CisKKyBsZWFkcyB0byByZWFkaW5nIGNvbmZ1c2lvbgorCisyMDExLTA3LTIwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBlYmRkMjE2YzA3NGJmNDFjZDNhMDg0YmQxNDY4OWNmMDFjODg3YjMxIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBKdWwgMTkKKyAxODozNjoxMSAyMDExIC0wNzAwCisKKzIwMTEtMDctMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIC5naXRpZ25vcmU6IHVwZGF0ZWQgZ2l0aWdub3JlIHRvIGlnbm9yZSBhIG51bWJlciBvZiBhdXRvLWdlbmVyYXRlZAorCisgZmlsZXMKKworMjAxMS0wNy0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYzogcmVtb3ZlIGJyb2tlbiB3aGl0ZXNwYWNlIGxpbmVzIHRoYXQKKworIGxlYWRzIHRvIHJlYWRpbmcgY29uZnVzaW9uCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGRmNWY3MDA1NWNmOWJlMzNmMDVmYjUwYWJlMmY1YTgxZWFjMDkyYWQgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bCAxOSAxMTowNzoxOSAyMDExICswMjAwCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGY1OTZmMTgyNDJkY2RmZDZjZjQ5Yzg4ZGExZDgzNmMxNmUyNjBjYWMgTWVyZ2U6IDBmMzA5YjQKKworIDcwZGVlNGIgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsCisgMTkgMTE6MzM6MjggMjAxMSArMDIwMAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6CisgICAgICAzMzY5NjgwOgorCisgZnJvbSBJbHlhIFlhbm9rOiBjaGFuZ2Ugc25tcF9lbmFibGVhdXRoZW50cmFwcyBmcm9tIGludCB0byBsb25nIHN1Y2gKKyB0aGF0IG1vZGlmeWluZyB0aGUgY29ycmVzcG9uZGluZyBNSUIgb2JqZWN0IGRvZXMgbm90IG92ZXJ3cml0ZQorIG1lbW9yeSBpbiA2NC1iaXQgYnVpbGRzLgorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMzcwNjQ1OgorCisgZnJvbSBCaWxsIEZlbm5lcjogRml4IEFnZW50WCBzdWJhZ2VudCBmb3VyIGJ5dGUgbGVhaworCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGhhcm5lc3M6IGRvCisKKyBub3QgaW52b2tlIElTUlVOTklORygpIG9uIE1pbkdXLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGhhcm5lc3M6CisKKyBjbGVhbnVwIC0gcmVtb3ZlIGNvZGUgdGhhdCBiZWNhbWUgc3VwZXJmbHVvdXMuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IE1pbkdXOiBEbyBub3QKKworIGFzc3VtZSB0aGF0IGtpbGwuZXhlIHJlcG9ydHMgdmlhIGl0cyBleGl0IHN0YXR1cyB3aGV0aGVyIHRoZQorIHNpZ25hbGxlZCBwcm9jZXNzIHN0aWxsIGV4aXN0cy4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQ0hBTkdFUzogdGVzdGluZzoKKworIFJlbW92ZSB0aGUgZnVuY3Rpb24gV0FJVE9SRElFKCkgZnJvbSBzaW1wbGVfZXZhbF90b29scy5zaCBzaW5jZSBpdAorIGlzIG5ldmVyIGludm9rZWQuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBTaW1wbGlmeSBXQUlURk9SKCkgaW4gc2ltcGxlX2V2YWxfdG9vbHMuc2guIFRoZSBjb2RlIHRoYXQgaGFuZGxlZAorIGludm9jYXRpb24gb2YgV0FJVEZPUigpIHdpdGggemVybyBvciBvbmUgYXJndW1lbnRzIGhhcyBiZWVuIGRyb3BwZWQKKyBzaW5jZSBXQUlURk9SKCkgaXMgYWx3YXlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGhhcm5lc3M6CisKKyBtaW5vciBzaW1wbGlmaWNhdGlvbi4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZTogQ0hBTkdFUzoKKworIHRlc3Rpbmc6IFNraXAgdGVzdCA1OSBpZiBTSUdIVVAgaXMgbm90IHN1cHBvcnRlZC4gTWFrZXMgdGVzdCA1OSBwYXNzCisgb24gTWluR1cuCisKKzIwMTEtMDctMDYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IE1pbkdXIGZpeAorCisKKzIwMTEtMDctMDYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgZnJhbWV3b3JrCisKKyByZWZhY3RvcmluZzogSW50cm9kdWNlIFdBSVRGT1JOT1RDT05EKCkuCisKKzIwMTEtMDctMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBNYWtlIFNUT1BQUk9HIHNlbmQgU0lHVEVSTSByZXBlYXRlZGx5LiBUaGlzIGZpeGVzIGEgcmFjZSB3aGVyZQorIFNJR1RFUk0gY291bGQgYmUgc2VudCBiZWZvcmUgdGhlIFNJR1RFUk0gc2lnbmFsIGhhbmRsZXIgd2FzIHNldCB1cCwKKyBlc3BlY2lhbGx5IHdoZW4gcnVubmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBWYWxncmluZC4KKyBDSEFOR0VTOiB0ZXN0aW5nOiBNYWtlIHRoZSBTTk1QX1ZFUkJPU0U9MSBvdXRwdXQgZXZlbiBtb3JlIHZlcmJvc2UuCisKKzIwMTEtMDctMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFRlc3QgaGFybmVzcworCisgcmVmYWN0b3Jpbmc6IGludHJvZHVjZSBFQ0hPU0VORFNJR1RFUk0oKSBhbmQgRUNIT1NFTkRTSUdLSUxMKCkKKworMjAxMS0wNy0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogRml4IGEgYnVnIGluCisKKyB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoIHRoYXQgd2FzIGludHJvZHVjZWQKKyBpbiBjb21taXQgOTM4ZDc1Yy4KKworMjAxMS0wNy0wMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogSWdub3JlICouZXhlIGZpbGVzIGdlbmVyYXRlZCBieSB0aGUgV2luMzIKKworIGJ1aWxkCisKKzIwMTEtMDctMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBUZXN0IG9ubHkgb25jZSBkdXJpbmcgYSB0ZXN0IHdoZXRoZXIgdGhlIHNoZWxsIHN1cHBvcnRzIHN1Yi1zZWNvbmQKKyBzbGVlcGluZyBpbnN0ZWFkIG9mIHJlcGVhdGVkbHkuCisKKzIwMTEtMDctMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjogQ0hBTkdFUzogdGVzdGluZzogQ2hhbmdlZAorCisgZGVmYXVsdCB0aW1lb3V0IGZyb20gMXMgdG8gMTBzIHdoZW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMgYXJlIHJ1bgorIHVuZGVyIFZhbGdyaW5kCisKKzIwMTEtMDctMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBBZnRlciBoYXZpbmcgc2VudCBTSUdURVJNIHRvIHNubXBkIG9yIHNubXB0cmFwZCwgd2FpdCB1bnRpbCB0aGUKKyBwcm9jZXNzIGhhcyBzdG9wcGVkIGJlZm9yZSBzZW5kaW5nIFNJR0tJTEwuIFRoaXMgcmFjZSBjb25kaXRpb24gd2FzCisgaGl0IG1vc3QgZWFzaWx5IHdoZW4gcnVubmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBWYWxncmluZC4KKyBDSEFOR0VTOiB0ZXN0aW5nOiBDaGVjayBQSUQgZmlsZSBleGlzdGVuY2UgYWZ0ZXIgaGF2aW5nIHJlYWQgaXQKKyBpbnN0ZWFkIG9mIGJlZm9yZS4gVGhpcyBmaXhlcyB0aGUgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIFBJRCBmaWxlCisgZGlzYXBwZWFyZWQgYWZ0ZXIgdGhlIGV4aXN0ZW5jZSBjaGVjayBhbmQgYmVmb3JlIGl0IHdhcyByZWFkLgorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRml4IGEgYnVnIGluIGEgZGVidWcgc3RhdGVtZW50CisKKyBpbnRyb2R1Y2VkIGJ5IHBhdGNoIDMzMTAyNTAgLyByMjA0OTQ6IHVzZSAlbGQgdG8gcHJpbnQgYSB2YWx1ZSBvZgorIHR5cGUgb2lkIGluc3RlYWQgb2YgJWQuICBUaGlzIHBhdGNoIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB0byBWNS42IFNWTiBwYXRjaGVzOiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDBmMzA5YjQ5M2MyMWQzYzY5MTQ0ODc1MTRiNDE1NjA3NTRmZmNkZjkgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bCAxOSAwODozNzo1MCAyMDExICswMjAwCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDFiNzQ1NGJjMjgxNTY4NDcwYTEzMDA0NzZkMmVkYjRmNDExZTYwMjkgTWVyZ2U6IDhkOWRjYzgKKworIDY5MGVhN2QgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgSnVsCisgMTkgMDg6MzE6MjggMjAxMSArMDIwMAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhcHBzL3NubXB0cmFwZC5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IEFkZCBtaXNzaW5nIG5ld2xpbmUKKworIGNoYXJhY3RlciBpbiBhIGxvZyBtZXNzYWdlCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFwcHMvc25tcHRyYXBkLmM6IENIQU5HRVM6IHNubXB0cmFwZDogSW52b2tlIHNodXRkb3duX3BlcmwoKSB3aGVuCisKKyBzaHV0dGluZyBkb3duCisKKzIwMTEtMDctMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzogU3BlbGxpbmcgZml4OiBicmFua2V0IC0+IGJyYWNrZXQKKworCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IFJ1biBhdXRvcmVjb25mLgorCisgRml4ZXMgYnVpbGQgYnJlYWthZ2UgY2F1c2VkIGJ5IHBhdGNoCisgZDU4OGVjODUzYmQwNTMxZjIxMmZjYmY1MWI5NjJiOTZjNjgyOGI1OSAoUlBNIDQuOSBzdXBwb3J0KQorCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkNjE3ZDg0ZjgzZmE2OWVkOWZhOWY5OGVmYzRhZmFmODgwZDEyMWYyIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBKdWwgMTQgMTY6NDM6NDcgMjAxMSArMDIwMAorCisyMDExLTA3LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IE1ha2UKKworIG5ldHNubXBfaXB2Nl9mbXRhZGRyKCkgc2hvdyB0aGUgSVB2NiBzY29wZSBJRAorCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogQWRkIHN1cHBvcnQKKyAgICAgIGZvcgorCisgSVB2NiBhZGRyZXNzIHNjb3BlIElECisKKzIwMTEtMDctMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogUnVuIGF1dG9yZWNvbmYKKworCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBhNTY3MjFhM2U3NzU0ZTM4OWRhYTdlOGEzZDU3OTI4OTllZGM5ZGUzIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBKdWwgMTQgMTY6MTg6MzIgMjAxMSArMDIwMAorCisyMDExLTA3LTE1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA4NDRkNGNlODY3YmYzYWJlN2I3NTM2YzVkYmZiYTQwMTkzN2E4ZDRhIE1lcmdlOiBlZWQwMTk4CisKKyA2MTAzNmE4IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgRnJpIEp1bCAxNSAxNTozMzoxMCAyMDExIC0wNzAwCisKKzIwMTEtMDctMTUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDg1MWJjZjUzZmNkMTNjZGYwYmE5ZjEyZTVkNjAzZTczZjhiYjk2MTEgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgRnJpIEp1bCAxNQorIDE1OjMyOjQ5IDIwMTEgLTA3MDAKKworMjAxMS0wNy0xNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6IGZpeCBhIHR5cG8KKworCisyMDExLTA3LTEzICBSb2JlcnQgU3RvcnkgPHJzdG9yeUBsb2NhbGhvc3Q+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBzbm1wbGliOiAgdHdlYWsgcGF0Y2ggMzA0NDg4OCB0byByZXN0b3JlCisKKyBwcm9wZXIgbm9uLWVycm9yIHJldHVybiBkdXJpbmcgbWliIGxvYWRpbmcKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBhZGRlZCA1LjcgcGF0Y2hlcyB0byB0aGUgYnJhbmNoIGxpc3QgYW5kIGZpeCB0aGUgcmVsZWFzZSBmaWxlCisKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBhZGRlZCA1LjcgcGF0Y2hlcyB0byB0aGUgYnJhbmNoIGxpc3QKKworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L3JlbGVhc2U6IGEgY29weSBvZiB0aGUgcmVsZWFzZSBmaWxlIGFwcGxpZWQgdG8gdGhlIG9sZGVyCisKKyBicmFuY2hlcworCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIDUuNyBwYXRjaGVzCisKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYzQzMTIzMWU4ZjBhMzlkMTk1MGJjNzJjMzJlMzQwMmY5MGZhODAzMCBNZXJnZTogNTZmZWU0MAorCisgYTJhYzI0ZCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBKdWwgMTEgMTk6MzM6MTcgMjAxMSAtMDcwMAorCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgY29weSBvZiB0aGUKKworIHNoZWxsLWZ1bmN0aW9ucyB0byB0aGUgb2xkZXIgYnJhbmNoCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvcmVsZWFzZTogYSBjb3B5IG9mIHRoZSByZWxlYXNlIGZpbGUgYXBwbGllZCB0byB0aGUgb2xkZXIKKworIGJyYW5jaGVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5yYzMgLT4gVjUuNworCisyMDExLTA3LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcKKworCisyMDExLTA3LTAxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzogUmV2ZXJ0ICJmaXggZHRsc3VkcAorCisgdHJhbnNwb3J0IGFkZHJlc3MgZm9ybWF0IGZ1bmN0aW9uIiBUaGlzIHJldmVydHMgY29tbWl0IDJhYjNhNmU2ZjJmY2MxZmYzZTVmMGZiNWRjNWQwNWU0OTg4MjBkODkuICAgLSBmb3Igc29tZSByZWFzb24gSSBzYXcgJ3JjJyBhbmQgbXkgYnJhaW4gaW50ZXJwcmV0ZWQgaXQgYXMgICAgJ3ByZS1yZWxlYXNlJy4gV2hhdCBjYW4gSSBzYXksIGl0IHdhcyBsYXRlLiA6LS8KKworMjAxMS0wNy0wMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAbG9jYWxob3N0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6IGZpeCBkdGxzdWRwIHRyYW5zcG9ydAorCisgYWRkcmVzcyBmb3JtYXQgZnVuY3Rpb24gIC0gdXBkYXRlIGlwdjQgZm10YWRkciB0byBoYW5kbGUgc29ja2FkZHIgYW5kIHRvIGNoZWNrICAgIHNpemUgYmVmb3JlIGFzc3VtaW5nIGRhdGEgaXMgYWRkciBwYWlyICAtIG1vdmUgZHRsc3VkcCBmdW5jdGlvbnMgdG8gZXh0cmFjdCBhZGRyKHMpIHRvIHRsc2Jhc2UKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IGZpeCB0YWcgcHVzaGluZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucmMyIC0+IFY1LjcucmMzCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsCisJZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy5yYzMKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiByZW1vdmUgdW5uZWVkZWQgY29tbWVudAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZGlzdC9tYWtlcmVsZWFzZS54bWw6IG1pc2MgcHVibGljYXRpb24gZml4ZXMgZm91bmQgd2hpbGUKKwlwdWJsaXNoaW5nCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiByYW4gYXV0b2hlYWRlciB0byBhZGQgdGhlCisJbWlzc2luZyB0ZW1wbGF0ZSBpZmRlZnMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnJjMSAtPiBWNS43LnJjMgorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHVzZSB0aGUgbmV3IHJ1bi1hdXRvY29uZiBzY3JpcHQKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRpc3QvcnVuLWF1dG9jb25mOiBBIHNjcmlwdCB0byBpbnZva2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiB0aGUKKwlhdXRvY29uZiB0b29sCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogcmVtYWluaW5nIGNvbW1hbmQgbGluZSBjaGFuZ2VzIGZvciBzdm4gLT4KKwlnaXQKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBtYWtlIHRoZSBicmFuY2ggZWNobyBvdXRwdXQgYW5kIHN2biB1cGRhdGUKKwljb252ZXJ0ZWQgdG8gZ2l0IGVxdWl2YWxlbnRzCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogcHVsbCB0aGUgYnJhbmNoIGluZm8gZnJvbSBnaXQKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRpc3QvcmVsZWFzZTogbm90ZWQgdGhhdCB0aGUgbWFzdGVyIGJyYW5jaCBpcyBpbiByYyBzdGF0ZQorCisyMDExLTA2LTI4ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworCSogRkFROiBNZW50aW9uIHRoZSBHaXQgd2lraSBwYWdlCisKKzIwMTEtMDYtMjggIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHVzZSBnaXQgbWVyZ2Ugd2l0aCB0aGUgLS1sb2cKKwlvcHRpb24KKworMjAxMS0wNi0yOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKwkqIC5naXRpZ25vcmU6IEFkZCAuZ2l0aWdub3JlCisKKzIwMTEtMDYtMjggIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisJKiBGQVE6IFdlJ3JlIG5vdyB1c2luZyBnaXQhCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHVzZSByZWJhc2UgdG8gcHV0IGxvY2FsIGNoYW5nZXMgYXQKKwl0aGUgdG9wIG9mIHRoZSByZW1vdGUgYnJhbmNoZXMgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGZlYXR1cmUgdG8gbm90IHJvbGwKKwlicmFuY2hlcyBjdXJyZW5seSBpbiByYyBwaGFzZSBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgbnNyb2xsdXAgZnVuY3Rpb24gZm9yCisJcm9sbGluZyBicmFuY2hlcyB1cHdhcmQuICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGNyZWF0ZWQgYW4gbnNwYXRjaGFwcGx5IGZ1bmN0aW9uCisJdG8gYXBwbHkgYSBwcmV2aW91c2x5IHRlc3RlZCBwYXRjaCBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIGEgbnN0cnlwYXRjaCBmdW5jdGlvbiB0bworCXRlc3QgcGF0Y2ggYXBwbGljYXRpb24gYWdhaW5zdCB2YXJpb3VzIGJyYW5jaGVzIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgdmVyYm9zZSBvdXRwdXQgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTI4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBtb3JlIHByZWZpeCBjaGFuZ2VzIGFuZCBiZXR0ZXIKKwlzZXR0aW5nIG9mIGRlZmF1bHQgdmFsdWVzIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUyNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogdXNlIG5zIHByZWZpeGVzIGluc3RlYWQgb2YgZ2VuZXJpYworCXNubXAgcHJlZml4ZXMgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTI2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiAKKwlNaXNzaW5nIGNoZWNrIGZvciBycG10cy5oIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGNvbmZpZ3VyZTogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCisJbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAorCW1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCisJbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAorCW1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKKwltYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCisJbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAorCW1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCisJbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKKwltYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKKwltYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKKwltYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAorCW1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAorCW1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKKwltYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCisJbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCisJbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCisJbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCisJbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAorCW1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCisJbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKKwltYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKKwltYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCisJbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAorCW1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdXRpbC4zLAorCW1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsCisJbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKKwlzbm1wbGliL3NubXBfdmVyc2lvbi5jOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sCisJaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogVHdlYWsgUlBNIGhhbmRsaW5nIHRvIHdvcmsKKwl3aXRoIGxpYnJhcnkgdmVyc2lvbiA0LjkgQmFzZWQgb24gYSBwYXRjaCBieSBKYW4gU2FmcmFuZWsgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUxOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzogUHJvdmlkZSBhIGZyYW1ld29yayBmb3IgcmVhZGluZworCVJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gYSBjYWNoZSBkaXJlY3RvcnkgKHJhdGhlciB0aGFuIHF1ZXJ5aW5nCisJdGhlIFJQTWRiIGRpcmVjdGx5KS4gIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcworCWZ1bmN0aW9uYWxpdHkuICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA1MTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGNvbmZpZ3VyZTogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA1MTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAorCXNubXBsaWIvc25tcF92ZXJzaW9uLmM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNTE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLAorCWFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzogUHJvdmlkZSBhCisJZnJhbWV3b3JrIGZvciByZWFkaW5nIFJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gYSBjYWNoZSBkaXJlY3RvcnkKKwkocmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIFJQTWRiIGRpcmVjdGx5KS4gIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcworCWZ1bmN0aW9uYWxpdHkuICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLAorCWFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzogUHJvdmlkZSBhCisJZnJhbWV3b3JrIGZvciByZWFkaW5nIFJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gYSBjYWNoZSBkaXJlY3RvcnkKKwkocmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIFJQTWRiIGRpcmVjdGx5KS4gIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcworCWZ1bmN0aW9uYWxpdHkuICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNTEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLAorCWFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzogUHJvdmlkZSBhCisJZnJhbWV3b3JrIGZvciByZWFkaW5nIFJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gYSBjYWNoZSBkaXJlY3RvcnkKKwkocmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIFJQTWRiIGRpcmVjdGx5KS4gIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcworCWZ1bmN0aW9uYWxpdHkuICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRm9sbG93LXVwIGZvciByMjA1MTE6IHJlYWxseSB1c2UKKwl0aGUgcHJvcGVyIGZvcm1hdCBzcGVjaWZpY2F0aW9uLiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGb2xsb3ctdXAgZm9yIHIyMDUxMTogcmVhbGx5IHVzZQorCXRoZSBwcm9wZXIgZm9ybWF0IHNwZWNpZmljYXRpb24uICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNTEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZpeCBhIGJ1ZyBpbiBhIGRlYnVnIHN0YXRlbWVudAorCWludHJvZHVjZWQgYnkgcGF0Y2ggMzMxMDI1MCAvIHIyMDQ5NDogdXNlICVsZCB0byBwcmludCBhIHZhbHVlIG9mCisJdHlwZSBvaWQgaW5zdGVhZCBvZiAlZC4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRml4IGEgYnVnIGluIGEgZGVidWcgc3RhdGVtZW50CisJaW50cm9kdWNlZCBieSBwYXRjaCAzMzEwMjUwIC8gcjIwNDk0OiB1c2UgJWxkIHRvIHByaW50IGEgdmFsdWUgb2YKKwl0eXBlIG9pZCBpbnN0ZWFkIG9mICVkLiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDUxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOiBVc2UgJXAgdG8gcHJpbnQgYSBwb2ludGVyIGluc3RlYWQKKwlvZiAlbGQgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUxMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOiBVc2UgJXAgdG8gcHJpbnQgYSBwb2ludGVyIGluc3RlYWQKKwlvZiAlbGQgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDUxMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnByZTIgLT4gVjUuNy5yYzEKKworMjAxMS0wNi0xMyAxNjoxMSAgaGFyZGFrZXIKIAogICAgKiBjb25maWd1cmU6CiAKLSAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgcnVuIGNvcnJlY3QgdmVyc2lvbiBvZiBhdXRvY29uZgogCi0yMDExLTA2LTI0IDEyOjA4ICBkdHMxMgorMjAxMS0wNi0xMyAxNjoxMCAgaGFyZGFrZXIKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLQotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQotMjAxMS0wNi0yNCAxMjowMiAgZHRzMTIKLQotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgogCiAgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKIAotMjAxMS0wNi0yMyAxNTo0MSAgZHRzMTIKKzIwMTEtMDYtMTMgMTY6MDQgIGhhcmRha2VyCiAKLSAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKyAgICogY29uZmlndXJlOgogCi0gICBUd2VhayBSUE0gaGFuZGxpbmcgdG8gd29yayB3aXRoIGxpYnJhcnkgdmVyc2lvbiA0LjkKLSAgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgSmFuIFNhZnJhbmVrCisgICByYW4gYXV0b2NvbmYKIAotMjAxMS0wNi0yMiAxNDoyNyAgZHRzMTIKKzIwMTEtMDYtMTAgMDY6MDMgIG5iYQogCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6CisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXM6CiAKLSAgIFByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIHJlYWRpbmcgUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbQotICAgYSBjYWNoZSBkaXJlY3RvcnkgKHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBSUE1kYiBkaXJlY3RseSkuCisgICBGaXggYnVpbGQgb2Ygc25tcHVzbSB3aGVuIGFkZGl0aW9uYWwgc2VjIG1vZHVsZXMgcmVxdWVzdGVkCisKKzIwMTEtMDYtMDkgMjE6MTMgIG5iYQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIEluY2x1ZGUgc3Rk54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAj7HniK31gJGL772k9YCMtPWAkpFiLmggdG8gbWFrZSBkbWFsbG9jIGhhcHB5CisKKzIwMTEtMDYtMDkgMTQ6MzUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgQ0hBTkdFUzogQlVHOiAzMTUxODQ1OiBmaXggbXVsdGlwbGUgcmVnaXN0cmF0aW9ucyBvZiBzbm1wCisgICB0cmFuc3BvcnQgaGFuZGxlcgorCisyMDExLTA2LTA4IDE2OjM0ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgbW9yZSBkbnNzZWMgdHdlYWtzCiAgICAKLSAgIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcwotICAgZnVuY3Rpb25hbGl0eS4KKyAgIC0gY3JlYXRlIGFuIGFwcC1nbG9iYWwgdmFsaWRhdG9yIGNvbnRleHQgZm9yIHVzZSB3aXRoIGFsbAorICAgdmFsaWRhdGlvbiByb3V0aW5lcy4gbWFpbmx5IHVzZWZ1bCBmb3IgbG9uZy1saXZlZCBhcHBzLgorICAgLSB1c2UgdGhlIGFwcHR5cGUgYXMgdGhlIHZhbGlkYXRvciAnc2NvcGUnLCBhbGxvd2luZworICAgZm9yIGFwcC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIHZhbGlkYXRpb24gdmlhIGxpYnZhbCdzCisgICBkbnN2YWwuY29uZgogCi0yMDExLTA2LTE3IDE5OjA2ICBidmFzc2NoZQorMjAxMS0wNi0wNyAxNjo0OCAgcnN0b3J5CiAKLSAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg6CiAKLSAgIFVzZSAlcCB0byBwcmludCBhIHBvaW50ZXIgaW5zdGVhZCBvZiAlbGQKKyAgIGFkZCBhIG1heCBkZWZpbmUgZm9yIGVhY2ggZGVmYXVsdCBzdG9yZSB0eXBlCisgICAKKyAgIG5vdCBhY3R1YWxseSB1c2VkLCBqdXN0IGEgaGVscGZ1bCByZW1pbmRlciBmb3IgdGhvc2UgYWRkaW5nCisgICBuZXcgaWRzIHdobyBtaWdodCBub3QgdGhpbmsgdG8gY2hlY2sgTkVUU05NUF9EU19NQVhfU1VCSURTLgorICAgKHRoZSBib29sIGxpc3QgaXMgcmFwaWRseSBhcHByb2FjaGluZyB0aGUgY3VycmVudCBsaW1pdC4pCiAKLTIwMTEtMDYtMDEgMTU6NTcgIGR0czEyCisyMDExLTA2LTA3IDE2OjQ2ICByc3RvcnkKIAotICAgKiBDSEFOR0VTOgorICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBtZW50aW9uIGJ1aWxkZGlyIHdoZW4gY29tcGxhaW5pbmcgYWJvdXQgbm90IGJlaW5nIHJ1biBmcm9tIHNvdXJjZQorICAgdHJlZQogCi0yMDExLTA2LTAxIDE1OjQ4ICBkdHMxMgorMjAxMS0wNi0wMSAyMjoyNCAgaGFyZGFrZXIKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMzMTAyNTA6IGZyb20gZmVubmVyOiBtaXNjIGZpeGVzIGZvcgorICAgZGVidWdnaW5nIG91dHB1dCBvZiBhZ2VudHgKIAotMjAxMS0wNi0wMSAxNTo0NyAgZHRzMTIKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjYgLT4gVjUuNy5wcmUyCisKKzIwMTEtMDUtMTAgMDA6MjAgIGhhcmRha2VyCiAKICAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCiAgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIApAQCAtMTA3LDE5NyArMzAyOTAsNTYgQEAKIAogICAgbWFrZSBkZXBlbmQKIAotMjAxMS0wNi0wMSAxNTo0MiAgZHRzMTIKKzIwMTEtMDUtMTAgMDA6MjAgIGhhcmRha2VyCiAKLSAgICogcGVybC9TTk1QL1NOTVAueHM6CisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgogCi0gICBSZWluc3RhdGUgYW4gInVudXNlZCIgbGFiZWwgdGhhdCBpcyBhY3R1YWxseSBzdGlsbCByZXF1aXJlZC4KLSAgIChyZWZlcmVuY2VkIGluIGxpbmUgMjcxMCkKKyAgIEMrKyAtPiBDIGNvbW1lbnRzCiAKLTIwMTEtMDYtMDEgMTU6MzIgIGR0czEyCisyMDExLTA1LTEwIDAwOjE3ICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKKyAgICogTkVXUzoKIAotICAgRml4IHR5cG8KKyAgIE5FV1MgdXBkYXRlIGZvciA1LjcKIAotMjAxMS0wNi0wMSAxNTowOCAgZHRzMTIKKzIwMTEtMDUtMDkgMjM6MTQgIGhhcmRha2VyCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaDoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIHJldmVydCB0aGUgb2lkIHR5cGVkZWYgcmVzaXppbmcgZnJvbSByMTc4MDkgYmVjYXVzZSBpdCBicm9rZQorICAgYmFja3dhcmRzIGNvbXBhdCwgYXMgcG9pbnRlZCBvdXQgYnkgdXNlcnMgb24gdGhlIC1jb2RlcnMgbGlzdAogCi0yMDExLTA2LTAxIDE0OjUxICBkdHMxMgorMjAxMS0wNS0wOSAyMjo1MSAgaGFyZGFrZXIKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiBjb25maWd1cmU6CisKKyAgIHVzZSBwcm9wZXIgYXV0b2NvbmYgdmVyc2lvbgorCisyMDExLTA1LTA5IDIyOjM4ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHBlcmwvQVNOL0FTTi5wbSwgICAKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwgcGVybC9TTk1QL1NOTVAucG0sIAorICAgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG06CiAKICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQogCi0yMDExLTA1LTMxIDIyOjQ5ICBoYXJkYWtlcgorMjAxMS0wNS0wOSAyMjozOCAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgorICAgKiBNYWtlZmlsZS50b3A6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMDY2ODYyOiBmcm9tIGZoZXc6IGZpeCB0aGUgYWdlbnQgZm9yCi0gICBjb21wYXJpbmcgdW5zaWduZWQgbGFyZ2UgaW5kZXhlcyBvZiB0aGUgZGlzayBhbmQgZXh0ZW5kIHRhYmxlcy4KKyAgIHZlcnNpb24gdXBkYXRlCiAKLTIwMTEtMDUtMzEgMTI6MzAgIGpzYWZyYW5laworMjAxMS0wNS0wOSAyMjoxMCAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKIAotICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGhyU1dSdW5QYXRoIG9mIHN3YXBwZWQtb3V0IHByb2Nlc3NlcyBvbgotICAgTGludXguCi0gICAKLSAgIGZnZXRzKCkgcmV0dXJucyBOVUxMIGJvdGggd2hlbiAvcHJvYy9QSUQvY21kbGluZSBpcyBlbXB0eSAoPQotICAgc3dhcHBlZCBvdXQpIGFuZCB3aGVuIHRoZSBwcm9jZXNzIGV4aXRlZCBhZnRlciBmb3BlbigpLCBzbyBjaGVjawotICAgL3Byb2MvUElEL3N0YXR1cyBpbiBib3RoIGNhc2VzLgotCi0yMDExLTA1LTI2IDE2OjEyICBoYXJkYWtlcgotCi0gICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLQotICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMyOTkzODQ6IGZpeCBJTkZPUk1zIHNvIHRoZXkgcmV0cnkgcHJvYmluZwotICAgZm9yIGFuIGVuZ2luZUlELgotCi0yMDExLTA1LTI2IDE2OjA2ICBoYXJkYWtlcgotCi0gICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLQotICAgQXBwbGllZCAocm91Z2hseSkgcGF0Y2ggMzI5OTM3MCB0byBhdm9pZCByZXdyaXRpbmcgZXhpc3RpbmcKLSAgIGF1dGhrZXkvcHJpdmtleS9ldGNzCi0KLTIwMTEtMDUtMjUgMDk6MjEgIGJ2YXNzY2hlCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOgotCi0gICBDSEFOR0VTOiBzbm1wZDogVXNlIHByb3BlciBmb3JtYXQgc3BlY2lmaWVyIGluIGRlYnVnIHN0YXRlbWVudHMKLSAgIGZvciBwcmludGluZyB2YWx1ZXMgb2YgdHlwZSAnb2lkJy4KLQotMjAxMS0wNS0yNCAxMjo1MSAganNhZnJhbmVrCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYzoKLQotICAgQWRkZWQgTlVMTC1jaGVja3MgYWZ0ZXIgbWFsbG9jCi0KLTIwMTEtMDUtMjIgMTk6MzQgIGR0czEyCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgotCi0gICBDSEFOR0VTOiBhZ2VudDogQlVHOiAzMzA1MTU3OiBGaXggaXBBZGRyZXNzUHJlZml4IGhhbmRsaW5nIG9mCi0gICBJUHY2IGFkZHJlc3NlcwotCi0yMDExLTA1LTIyIDE5OjA3ICBkdHMxMgotCi0gICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6Ci0KLSAgIENIQU5HRVM6IHB5dGhvbjogQlVHOiAzMjk1NDA3OiBGaXggaGFuZGxpbmcgb2Ygdm9pZCBwb2ludGVyCi0KLTIwMTEtMDUtMjIgMTg6NTcgIGR0czEyCi0KLSAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKLQotICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzMjY0ODUyOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKLSAgIChzbm1we1VuYXZhaWxhYmxlLFVua25vd259Q29udGV4dHMsc25tcFVua25vd25QRFVIYW5kbGVycykKLQotMjAxMS0wNS0yMCAxNTo0MSAgZHRzMTIKLQotICAgKiAgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLCBzbm1wbGliL3NubXBJUFhEb21haW4uYywgICAKLSAgICAgIHNubXBsaWIvc25tcFNURERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKLSAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCi0gICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKLQotICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzMjM0NzU0OiBFbnN1cmUgb2xkIGZfY3JlYXRlX2Zyb21fdHN0cmluZwotICAgaG9vayBpcyBpbml0aWFsaXplZCB0byBOVUxMCi0KLTIwMTEtMDUtMTkgMTk6NDYgIGhhcmRha2VyCi0KLSAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLQotICAgdXNlICNpZmRlZiByYXRoZXIgdGhhbiAjaWYgZm9yIGRlZmluZSBjaGVja3MuCi0KLTIwMTEtMDUtMTkgMTc6MTkgIGR0czEyCi0KLSAgICogbWFuL3NubXBfYXBpLjMuZGVmLCBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZjoKLQotICAgQ0hBTkdFUzogbWFuOiBCVUc6IDMxOTA3MjU6IERvY3VtZW50IHNubXB7LF9zZXNzfXN5bmNoX3Jlc3BvbnNlCi0gICBhbmQgc25tcF9hc3luY19zZW5kCi0KLTIwMTEtMDUtMTIgMDk6MDMgIGJ2YXNzY2hlCi0KLSAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotCi0gICBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHNubXBfZnJlZV9zZXNzaW9uKCkuCi0KLTIwMTEtMDUtMTIgMDg6MTIgIGJ2YXNzY2hlCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzoKLQotICAgQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5ldC1TTk1QCi0gICAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSSBpcE5ldFRvTWVkaWFUYWJsZS4KLQotMjAxMS0wNS0xMiAwODowOCAgYnZhc3NjaGUKLQotICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6Ci0KLSAgIENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBOZXQtU05NUAotICAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkgaWZUYWJsZS4KLQotMjAxMS0wNS0xMiAwNzozMyAgYnZhc3NjaGUKLQotICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYzoKLQotICAgQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5ldC1TTk1QCi0gICAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSSBpcEFkZHJUYWJsZS4KLQotMjAxMS0wNS0xMiAwNjo1NCAgYnZhc3NjaGUKLQotICAgKiBDaGFuZ2VMb2c6Ci0KLSAgIERvY3VtZW50YXRpb24gLyBzb3VyY2UgY29kZSBjb21tZW50IHNwZWxsaW5nIGZpeDogZXhpdGVudCAtPgotICAgZXhpc3RlbnQuCi0KLTIwMTEtMDUtMTAgMTU6MDIgIGJ2YXNzY2hlCi0KLSAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6Ci0KLSAgIE1pbkdXOiBhdm9pZCB0aGF0IGdjYyBjb21wbGFpbnMgYWJvdXQgcGFzaW5nIGEgKGNoYXIgKikgYXJndW1lbnQKLSAgIHdoaWxlICh1bnNpZ25lZCBjaGFyICopIGlzIGV4cGVjdGVkLgorICAgYWRkZWQgYSBtaXNzaW5nIDAgaW4gdGhlIHJldmlzaW9uIGRhdGUKIAogMjAxMS0wNS0wOSAyMDo1MiAgbmJhCiAKQEAgLTMwNSw2ICszMDM0Nyw5NCBAQAogCiAgICBVc2Ugc3ltYm9saWMgbmFtZWQgZm9yIGlmVHlwZSB2YWx1ZXMKIAorMjAxMS0wNS0wOSAyMDo0MyAgbmJhCisKKyAgICogbWlicy9yZmNtaWJzLmRpZmY6CisKKyAgIElBTkEgaGFzIGZpeGVkIHRoZSBJQU5BLUlQUE0tTUVUUklDUy1SRUdJU1RSWS1NSUIKKworMjAxMS0wNS0wOSAxNToyNCAgaGFyZGFrZXIKKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisKKyAgIGFkZGVkIGEgbmV3IFJFVklTSU9OIGNsYXVzZSB0byBsaXN0IHRoZSBjaGFuZ2VzIGluIHRoZSB0aGUgcmVjZW50CisgICB1cGRhdGUKKworMjAxMS0wNS0wOSAxNDoxOSAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBhZGRlZCBwaW5nL3RyYWNlcm91dGUgbWlicyBub3RlCisKKzIwMTEtMDUtMDkgMTQ6MTkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYzoKKworICAgd2UgYWN0dWFsbHkgd2FudCB0byB1c2UgdGhlIGJhc2UgT0lEIGFzIHRoZSBzdGFydGluZyBwb2ludCwgbm90CisgICB0aGUgcmVnIE9JRC4KKworMjAxMS0wNS0wOSAxNDoxOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jOgorCisgICBmaXhlZCB0aGUgcHJveHkgc3VwcG9ydCB0byBkbyBhIHByb3BlciBPSUQgbGVzcyB0aGFuIE9JRCBjb21wYXJlLgorICAgV2UgYWN0dWFsbHkgZG9uJ3QgY2FyZSBhYm91dCB0aGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0LAorICAgb25seQorICAgdGhhdCBpdCB3YXMgYmVmb3JlIHRoZSByZWdpc3RlcmVkIHJlYmFzZQorCisyMDExLTA1LTA5IDE0OjE4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmM6CisKKyAgIENIQU5HRVM6IHBhdGNoIDMxNDA4MzM6IGZyb20ganNhZnJhbmVrOiBmaXggcHJveHkgR0VUTkVYVAorICAgcmVxdWVzdHMKKyAgIFdoZW4gT0lEcyByZXF1ZXN0ZWQgYXJlIGJlbG93IHRoZSBwcm94eSByZXF1ZXN0IHJlbWFwLCB3ZSBuZWVkIHRvCisgICBub3QKKyAgIGluY2x1ZGUgYW55IE9JRHMgdGhhdCBtaWdodCBiZSBpbiB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwKKyAgIE9JRAorICAgYW5kIHRoZSByZW1hcHBlZCBPSUQuIFRoaXMgcGF0Y2ggZnVkZ2VzIHRoZSByZXF1ZXN0IHNvIHRoYXQgaXQKKyAgIGZpeGVzCisgICB0aGUgcmVxdWVzdCBPSUQgc28gaXQncyBqdXN0IGJlZm9yZSB0aGUgcmVtYXBwZWQgcHJveHkgcmFuZ2UuCisKKzIwMTEtMDUtMDkgMTQ6MTggIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oLCBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisKKyAgIE5FV1M6IFBBVENIIDMxNjczMjU6IGZyb20ga3Jpc3p0b2Zvcm86IFVDRC1TTk1QL1N5c3RlbVN0YXRzOiBhZGQKKyAgIHZhcmlhYmxlcworICAgdG8gcmVwb3J0IGNwdXN0ZWFsLCBjcHVndWVzdCwgY3B1Z3Vlc3RuaWNlCisKKzIwMTEtMDUtMDkgMTQ6MTcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jOgorCisgICBDSEFOR0VTOiBwYXRjaCAzMTg0MDI2OiBmcm9tIGVpdm5hZXM6IEF2b2lkIGNvbnN0YW50IHJlZnJlc2ggb2YKKyAgIGludGVyZmFjZSBzdGF0aXN0aWNzCisKKzIwMTEtMDUtMDkgMTA6NDQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L3NubXBfYWdlbnQuYywgYXBwcy9zbm1wZGVsdGEuYywgc25tcGxpYi9zY2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgdGhlIE1TVkMgY29tcGlsZXIuCisKKzIwMTEtMDUtMDkgMTA6MzUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9nZXR0aW1lb2ZkYXkuYzoKKworICAgV2luMzIvTVNWQzogRml4ZWQgYSBjb21waWxlciB3YXJuaW5nLgorCisyMDExLTA1LTA5IDEwOjMzICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogRml4ZWQgYSB5ZWFyLTIwMzggYnVnIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgaXBSb3V0ZVRhYmxlLgorCiAyMDExLTA1LTA4IDIwOjAxICBuYmEKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCkBAIC0zMzQsODMgKzMwNDY0LDk5IEBACiAKICAgIFJlbW92ZWQgYW4gdW51c2VkIGxhYmVsIGZyb20gcGVybC9TTk1QL1NOTVAueHMuCiAKLTIwMTEtMDUtMDYgMjE6MzIgIGhhcmRha2VyCisyMDExLTA1LTA3IDE0OjQ4ICBidmFzc2NoZQogCi0gICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaDoKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmg6CiAKLSAgIE5FV1M6IFBBVENIIDMxOTg3ODE6IGZyb20gZmVubmVyOiBHZXQgZGlzbWFuL3BpbmcgYW5kCi0gICBkaXNtYW4vdHJhY2Vyb3V0ZSB0byBhdCBsZWFzdCBjb21waWxlCisgICBDSEFOR0VTOiBzbm1wZDogRGVjbGFyZSB0aGUgT0lEIGFyZ3VtZW50IHR5cGUgb2YgTUlCIHJlZ2lzdHJhdGlvbgorICAgZnVuY3Rpb25zIGFzICdjb25zdCBvaWQgKicgaW5zdGVhZCBvZiAnb2lkIConIHNpbmNlIHRoZXNlCisgICBmdW5jdGlvbnMgZG8gbm90IG1vZGlmeSB0aGUgT0lELgogCi0yMDExLTA1LTA2IDE3OjQ2ICBkdHMxMgorMjAxMS0wNS0wNyAxNDo0NCAgYnZhc3NjaGUKIAotICAgKiBDSEFOR0VTOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgVXNlIHRoZSBjb3JyZWN0IGRhdGEgdHlwZSBmb3IgdGhlICdjYWNoZSBleHBpcmVkJyB2YXJpYWJsZTogY2hhcgorICAgaW5zdGVhZCBvZiBpbnQuCiAKLTIwMTEtMDUtMDYgMTc6MzcgIGR0czEyCisyMDExLTA1LTA3IDE0OjQzICBidmFzc2NoZQogCi0gICAqIENoYW5nZUxvZzoKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIyMDE1MS4KIAotMjAxMS0wNS0wNiAxNzozNSAgZHRzMTIKKzIwMTEtMDUtMDcgMTM6MTUgIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgorICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzoKIAotICAgbWFrZSBkZXBlbmQKKyAgIFdpbjMyOiBpbXByb3ZlZCBzb3VyY2UgY29kZSBjb25zaXN0ZW5jeSBieSB1c2luZyBMUENUU1RSIGluc3RlYWQKKyAgIG9mIExQQ1NUUi4gTm90ZTogdGhpcyBkb2VzIG5vdCBtZWFuIHRoYXQgVW5pY29kZSBidWlsZHMgYXJlCisgICBzdXBwb3J0ZWQuCiAKLTIwMTEtMDUtMDYgMTc6MjIgIGR0czEyCisyMDExLTA1LTA3IDEzOjE0ICBuYmEKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rLmM6CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBBZGQgZmlsZSBmb3Jnb3R0ZW4gaW4gcjIwMzUzCiAKLTIwMTEtMDUtMDYgMTc6MTcgIGR0czEyCisyMDExLTA1LTA2IDIzOjMyICBoYXJkYWtlcgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnAuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oOgogCi0gICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSCAzMTI1OTY6IGZyb20gZmFibGVkODA6IGxpc3RlbiBmb3IgbmV0bGluaworICAgY2hhbmdlIGV2ZW50cyBmb3IgdGhlIGFycC1yZWxhdGVkIHRhYmxlcworCisyMDExLTA1LTA2IDE4OjM2ICByc3RvcnkKKworICAgKiBzbm1wbGliL3N5c3RlbS5jOgorCisgICBORVdTOiBzbm1wbGliOiBhZGQgb3B0aW9uYWwgc3VwcG9ydCBmb3IgbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24KKyAgIG9mIGhvc3RuYW1lcworICAgCisgICAtIG9wdGlvbmFsIGF0IGNvbmZpZ3VyZSB0aW1lOiAtLXdpdGgtbG9jYWwtZG5zc2VjLXZhbGlkYXRpb24KKyAgIC0gcmVxdWlyZXMgRE5TU0VDLVRvb2wgdmFsaWRhdGlvbiBsaWJyYXJpZXMKKyAgIC0gaW5pdGlhbCBzdXBwb3J0LCBmb3Igc3lzdGVtcyB3aXRoIGdldGFkZHJpbmZvLiBzdXBwb3J0IGZvcgorICAgYWRkaXRpb25hbAorICAgcmVzb2x2ZXIgaW50ZXJmYWNlcyBjb21pbmcgc29vbi4KKyAgIC0gYWxzbyBUT0RPOiBmbGFnIGZvciBpZ25vcmluZyB2YWxpZGF0b2luIGVycm9ycyAobG9nICYgY29udGludWUpCisKKzIwMTEtMDUtMDYgMTg6MzYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oOgorCisgICBtb3ZlIHVudXNlZCAoYW5kIHRvbyBnZW5lcmljKSB0b2tlbiB3aXRoaW4gVUNEX0NPTVBBVElCTEUgaWZkZWYKKyAgIAorICAgLSBNQVhMQUJFTCBjb25mbGljdHMgd2l0aCA8YXJwYS9uYW1lc2VyLmg+CisgICAtIGFkZGVkIE5FVFNOTVBfTUFYTEFCRUwKKworMjAxMS0wNS0wNiAxODozNiAgcnN0b3J5CisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICB1cGRhdGUgY29uZmlndXJlL01ha2VmaWxlcyBmb3IgRE5TU0VDIGxvY2FsIHZhbGlkYXRpb24gb3B0aW9uCisKKzIwMTEtMDUtMDYgMTQ6MzggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzoKKworICAgcmVtb3ZlZCB0aGUgYWNjaWRlbnRhbCBicm9rZW4gZmVhdHVyZSByZXF1aXJlIGxpbmUgdGhhdCBnb3QgaGFsZgorICAgaW5zZXJ0ZWQKIAogMjAxMS0wNS0wNiAxMzo1MCAgZHRzMTIKIApAQCAtNDIwLDE1ICszMDU2Niw0OTIgQEAKICAgIC0gYnJva2VuIHJlbW92YWwgb2YgTWljcm9zb2Z0IERMTAogICAgLSByZW1vdmUgYXNzb3J0ZWQgbmV3IE1JQnMgYW5kIGhlYWRlciBmaWxlcwogCisyMDExLTA1LTA2IDEyOjU4ICBkdHMxMgorCisgICAqIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOgorCisgICBTdXBwb3J0IFRhci9HWmlwIGNvbW1hbmQgcGF0aHMgY29udGFpbmluZyBzcGFjZXMKKworMjAxMS0wNS0wNiAxMjo1NyAgZHRzMTIKKworICAgKiB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDoKKworICAgUmVwb3J0IEdaaXAgY29tbWFuZCBjb3JyZWN0bHkKKworMjAxMS0wNS0wNSAyMTo0OCAgbmJhCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYzoKKworICAgRml4IGZvciBEcmFnb25GbHkgQlNEIChkb2VzIG5vdCBkZWZpbmUgSVBfU0VORFNSQ0FERFIpCisKKzIwMTEtMDUtMDUgMjA6MjkgIG5iYQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaDoKKworICAgRml4IHNwZWxsaW5nIG9mIFNPX1JFQ1ZEU1RBRERSCisKKzIwMTEtMDUtMDUgMTg6NTQgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCBtYW4vc25tcC5jb25mLjUuZGVmLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBORVdTOiBhcHBzOiBhZGQgc25tcC5jb25mIHRva2VucyBmb3IgdGltZW91dHMgYW5kIHJldHJpZXMKKwogMjAxMS0wNS0wNSAwNjowNyAgYnZhc3NjaGUKIAotICAgKiBzbm1wbGliL3Rvb2xzLmMsIHRlc3RpbmcvVEVTVENPTkYuc2g6CisgICAqIHNubXBsaWIvdG9vbHMuYywgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6CiAKICAgIENIQU5HRVM6IE1pbkdXOiBNYWRlIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBOZXQtU05NUCB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4gU29tZSB0ZXN0cwogICAgdGhhdCBmYWlsZWQgcHJldmlvdXNseSBhZnRlciB0aGUgTmV0LVNOTVAgYmluYXJpZXMgKE1TVkMgYnVpbGQpCiAgICBoYWQgYmVlbiBpbnN0YWxsZWQgZG8gbm93IHBhc3MuCiAKKzIwMTEtMDUtMDUgMDU6NTcgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCB3aW4zMi93aW4zMi5zbG4sICAgCisgICAgICB3aW4zMi93aW4zMmRsbC5zbG46CisKKyAgIFJlbW92ZWQgVmlzdWFsIFN0dWRpbyAyMDA1IHNvbHV0aW9uIGFuZCBwcm9qZWN0IGZpbGVzIGFnYWluIHNpbmNlCisgICBWaXN1YWwgU3R1ZGlvIDIwMTAgcmVmdXNlcyB0byBsb2FkIHRoZXNlLgorCisyMDExLTA1LTA0IDIzOjQzICBoYXJkYWtlcgorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBjbGVhbiB0aGUgcGVybC9weXRob24gZmVhdHVyZSBsZWZ0b3ZlcnMKKworMjAxMS0wNS0wNCAyMzo0MiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgZml4IG1pYiBtb2R1bGUgaW52b2NhdGlvbgorCisyMDExLTA1LTA0IDIwOjU3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgZml4IGlmZGVmIHR5cG8KKworMjAxMS0wNS0wNCAyMDo1NiAgaGFyZGFrZXIKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgZml4IHBlcmwvcHl0aG9uIGZlYXR1cmUgZGVwZW5kZW5jaWVzCisKKzIwMTEtMDUtMDQgMjA6NTYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYXV0b19ubGlzdC5jOgorCisgICByZXZlcnRlZCBhdXRvX25saXN0IG1hY3JvIHVzYWdlOyB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBoZWFkZXJzCisKKzIwMTEtMDUtMDQgMjA6NTYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIEFkZCBhIC1UIG9wdGlvbiB0byBydW4gJ21ha2UgdGVzdCcKKworMjAxMS0wNS0wNCAyMDo1NiAgaGFyZGFrZXIKKworICAgKiBhcHBzL01ha2VmaWxlLmluOgorCisgICBmaXggdGhlIGVuY29kZV9rZXljaGFuZ2UgLmZ0IGZpbGVuYW1lCisKKzIwMTEtMDUtMDQgMTY6MjAgIGhhcmRha2VyCisKKyAgICogcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIHNubXBsaWIvdG9vbHMuYzoKKworICAgZml4IHRoZSBmZWF0dXJlcyByZXF1aXJlZCBieSB0aGUgVHJhcFJlY2VpdmVyIG1vZHVsZQorCisyMDExLTA1LTA0IDE2OjIwICBoYXJkYWtlcgorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBBZGQgdGhlIFRyYXBSZWNlaXZlciB0byB0aGUgbGlzdCBvZiBwZXJsIG1vZHVsZXMKKworMjAxMS0wNS0wNCAxNDo0MiAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgdXNlIHRoZSBuZXdlciBOZXQtU05NUCBBUElzLCByYXRoZXIgdGhhbiB0aGUgb2xkZXIgVUNEIG9uZXMKKworMjAxMS0wNS0wNCAxNDo0MSAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgcmVtb3ZlIFNFVCBjb2RlIHdoZW4gdW5kZXIgLS1yZWFkLW9ubHkgbW9kZQorCisyMDExLTA1LTA0IDE0OjQxICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYzoKKworICAgcmVxdWlyZSBjaGVja192Yl91aW50CisKKzIwMTEtMDUtMDQgMTQ6NDEgIGhhcmRha2VyCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VudC5jLAorICAgICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBsb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjLCAgIAorICAgICAgcHl0aG9uL25ldHNubXAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBsYXN0IG9mIHRoZSBwZXJsLXVzZWQgZmVhdHVyZSBmdW5jdGlvbnMKKworMjAxMS0wNS0wNCAxNDo0MCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgICAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYzoKKworICAgc3RhcnRlZCB0aGUgZmluYWwgc2V0IG9mIGZ1bmN0aW9uIHJlbW92YWxzIGZvciBmZWF0dXJlcyByZXF1aXJlZAorICAgYnkgcGVybC9weXRob24KKworMjAxMS0wNS0wNCAxNDozOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1zb3VyY2UtaW5jbHVkZXMubTJpOgorCisgICBhZGRlZCB0aGUgbmV0LXNubXAtZmVhdHVyZXMuaCBoZWFkZXIKKworMjAxMS0wNS0wNCAxNDozOSAgaGFyZGFrZXIKKworICAgKiAgcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsICAgCisgICAgICBwZXJsL1NOTVAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgICAKKyAgICAgIHBlcmwvYWdlbnQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmg6CisKKyAgIEFkZGVkIHBlcmwgZmVhdHVyZSByZXF1aXJlbWVudHMKKworMjAxMS0wNS0wNCAxNDozOSAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIE1ha2VmaWxlLnJ1bGVzLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiwgICAKKyAgICAgIHBlcmwvQVNOL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAgIAorICAgICAgcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsICAgCisgICAgICBwZXJsL1NOTVAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsICAgCisgICAgICBwZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oOgorCisgICBob3BlZnVsbHkgd29ya2luZyBydWxlcyB0byBhcHBseSBmZWF0dXJlIHJlcXVpcmVtZW50cyB0byBwZXJsIGFuZAorICAgcHl0aG9uCisKKzIwMTEtMDUtMDQgMTQ6MzggIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIG1vcmUgY2hhbmdlcyB0byByZW1vdmUgdW5uZWVkZWQgZnVuY3Rpb25zIHByaW1hcmlseSB3aGVuIHdyaXRlCisgICBtb2RlIGlzIHR1cm5lZCBvZmYKKworMjAxMS0wNS0wNCAxNDozNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBjaGFuZ2UgdGhlIHdhbnQgaW52b2NhdGlvbiB0byBvbmx5IGRlZmF1bHQgdG8gZXhjbHVkZSBleHRlcm5hbAorICAgaG9va3MKKworMjAxMS0wNS0wNCAxNDozNyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGU6CisKKyAgIHNlYXJjaCB0aHJvdWdoIC54cyBmaWxlcyBmb3IgZnVuY3Rpb24gaW52b2NhdGlvbnMKKworMjAxMS0wNS0wNCAxNDozNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hdXRvX25saXN0LmM6CisKKyAgIGZvcmdvdCBhIHNlbWljb2xvbgorCisyMDExLTA1LTA0IDE0OjM3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYzoKKworICAgaXF1ZXJ5IHBkdSBzZXNzaW9ucyBhcmUgb25seSBuZWVkZWQgaW4gd3JpdGUgbW9kZS4KKworMjAxMS0wNS0wNCAxNDozNiAgaGFyZGFrZXIKKworICAgKiBhcHBzL01ha2VmaWxlLmluOgorCisgICBmaXggZmVhdHVyZSBkZXRlY3Rpb24gb2Ygc29tZXRpbWVzLWJ1aWx0IGFwcGxpY2F0aW9ucworCisyMDExLTA1LTA0IDE0OjM2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2F1dG9fbmxpc3QuYzoKKworICAgdXNlIHRoZSBmZWF0dXJlX3VudXNlZCBtYWNybyBmb3IgbWFraW5nIGFuIGVtcHR5IGZpbGUgZm9yCisgICBjb25zaXN0ZW5jeQorCisyMDExLTA1LTA0IDE0OjM2ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCBhcHBzL3NubXB0bHMuYywgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgQW5vdGhlciBzd2VlcCBmb3IgdW51c2VkIGZ1bmN0aW9ucyB3aGVuIHJlYWRfb25seSBtb2RlIGlzIHR1cm5lZAorICAgb24KKworMjAxMS0wNS0wNCAxNDozNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAgc25tcGxpYi9jaGVja192YXJiaW5kLmM6CisKKyAgIG1hcmsgYSBzbGV3IG9mIGZ1bmN0aW9ucyBhcyBmZWF0dXJlcyB0aGF0IGFyZSBvbmx5IG5lZWRlZCB3aXRoCisgICB3cml0ZV9zdXBwb3J0CisKKzIwMTEtMDUtMDQgMTQ6MzIgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlOgorCisgICBydW4gZ3JlcCB3aXRoIC1uCisKKzIwMTEtMDUtMDQgMTQ6MzIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZmVhdHVyaXplIG5ldHNubXBfc29ja2FkZHJfc2l6ZQorCisyMDExLTA1LTA0IDE0OjMyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKKworICAgcmVtb3ZlIGEgZmVhdHVyZV9yZXF1aXJlIG5vdCBhY3R1YWxseSBuZWVkZWQuCisKKzIwMTEtMDUtMDQgMTQ6MzEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgbWFyayBTVUJDT05UQUlORVJfRklORCBhcyBhIGZlYXR1cmUKKworMjAxMS0wNS0wNCAxNDozMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcHRzbS5jOgorCisgICB0aGUgcm93IGNyZWF0aW9uIEFQSSBpcyBvbmx5IHVzZWQgaW4gdGhlIFRTTSBpbXBsZW1lbnRhdGlvbgorCisyMDExLTA1LTA0IDE0OjMxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHRoZSBuZXdlciBjb250ZXh0IGVuZ2luZUlEIHByb2JpbmcgaXMgb25seSBuZWVkZWQgaWZmIFRTTSBpcyBpbgorICAgdXNlCisKKzIwMTEtMDUtMDQgMTQ6MzAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgZml4IGFuIGlmZGVmIHR5cG8KKworMjAxMS0wNS0wNCAxNDozMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBtb3ZlZCBmZXRhdXJlIGNoaWxkX29mIHN0YXRlbWVudHMgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZQorCisyMDExLTA1LTA0IDE0OjMwICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2Rpcl91dGlscy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgbWFya2VkIGEgY291cGxlIG9mIHJhcmVseSB1c2VkIGNvbnRhaW5lciBmdW5jdGlvbnMuCisKKzIwMTEtMDUtMDQgMTQ6MjkgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKKworICAgc3BsaXQgb3V0IHRoZSBwcmVmaXhfaW5mbyBmZWF0dXJlIGludG8gc3ViLWZlYXR1cmVzCisKKzIwMTEtMDUtMDQgMTQ6MjkgIGhhcmRha2VyCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIG1hcmsgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBhcyB1bm5lZWRlZAorCisyMDExLTA1LTA0IDE0OjI5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmM6CisKKyAgIGZpeCBhIGNoaWxkX29mIHN0YXRlbWVudCB3aXRoIGEgY29weS9wYXN0ZSBlcnJvcgorCisyMDExLTA1LTA0IDE0OjI4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgdGhlIGNvbnRhaW5lciByb3ctcmVtb3ZlIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSB0ZGF0YSByZW1vdmVfcm93CisgICBpcyBuZWVkZWQKKworMjAxMS0wNS0wNCAxNDoyOCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIGZlYXR1cmUgbWFya2luZyBvZiB1bnVzZWQgdGRhdGEgZnVuY3Rpb25zCisgICB0YWJsZV90ZGF0YV9kZWxldGVfdGFibGUKKyAgIHRhYmxlX3RkYXRhX2V4dHJhY3RfdGFibGUKKyAgIHRhYmxlX3RkYXRhX3JlbW92ZV9yb3cKKworMjAxMS0wNS0wNCAxNDoyNyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmM6CisKKyAgIHJlbW92YWwgb2Ygc29tZSByYXJlbHkgdXNlZCBmdW5jdGlvbnMKKyAgIHRhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cKKyAgIHRhYmxlX2RhdGFzZXRfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUKKworMjAxMS0wNS0wNCAxNDoyNyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgQWRkZWQgYSBkZWZpbml0aW9uIHRvIGluY29ycG9yYXRlIHJlYWRfb25seS9ub3RpZnlfb25seQorCisyMDExLTA1LTA0IDE0OjI3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jOgorCisgICBhZGRlZCBhIG1pc3NpbmcgZmVhdHVyZSBkZWZpbml0aW9uIGxpbmUKKworMjAxMS0wNS0wNCAxNDoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbjoKKworICAgYWRkZWQgYmFjayBpbiBtaXNzaW5nIG1pYmdyb3VwIGZlYXR1cmUgZGVmaW5pdGlvbiBsaXN0CisKKzIwMTEtMDUtMDQgMTQ6MjYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIEluY2x1ZGUgdGhlIG9yaWdpbmFsIGJhc2UgZmxhZ3MgdG8gZW5zdXJlIC0td2l0aC1kZWZhdWx0cyBnZXRzCisgICBwaWNrZWQgdXAKKworMjAxMS0wNS0wNCAxNDoyNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgZml4IHVzYWdlCisKKzIwMTEtMDUtMDQgMTQ6MjYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIEFkZGVkIGEgLWIgZmxhZyBmb3IgYmFzZSBhcmd1bWVudHMgdG8gc3RhcnQgZnJvbQorCisyMDExLTA1LTA0IDE0OjI1ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBkZWZhdWx0IHRvIGEgbGluZWFyIHNlYWNoIG9mIHNpemUgdGVzdHMsIHJhdGhlciB0aGFuIGV4cG9uZW50aWFsCisKKzIwMTEtMDUtMDMgMTg6NTUgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogR3VhcmQgbmV0c25tcF91ZHBfcmVjdmZyb20oKSBldGMuIGRlY2xhcmF0aW9ucworICAgY29uc2lzdGVudGx5LgorICAgQ0hBTkdFUzogV2luMzI6IEJ1aWxkcyB3aXRoIFZpc3VhbCBTdHVkaW8gMjAxMC4KKwogMjAxMS0wNS0wMyAxNToyOSAgYnZhc3NjaGUKIAogICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzoKQEAgLTQ1MSw2ICszMTA3NCwyNDggQEAKICAgIFNwZWxsaW5nIGFuZCBncmFtbWFyIGZpeGVzIGZvciB0aGUgc291cmNlIGNvZGUgY29tbWVudHMgaW4KICAgIHNubXBsaWIvd2luc2VydmljZS5jLgogCisyMDExLTA0LTI5IDAwOjIzICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIGFkZGVkIG5vdGUgYWJvdXQgdGhlIG5ldyB0aW1pbmcgZnVuY3Rpb24KKworMjAxMS0wNC0yOSAwMDoxNCAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgVXBkYXRlIHRoZSBtYW51YWwgcGFnZSB0byByZWZsZWN0IHRoZSBuZXcgdGltaW5nIG9wdGlvbnMKKworMjAxMS0wNC0yOSAwMDoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIGJldHRlciBkb2N1bWVudGF0aW9uCisKKzIwMTEtMDQtMjkgMDA6MTQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmM6CisKKyAgIHVzZSB0aGUgbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKCkgZm9yIHBhcnNpbmcKKyAgIGZyZXF1ZW5jaWVzL3RpbWUKKworMjAxMS0wNC0yOSAwMDoxMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jOgorCisgICBmaXggcGR1IGJ1aWxkaW5nIHRlc3RzIHVuZGVyIHZhcmlvdXMgZGlzYWJsZWQgbW9kZXMKKworMjAxMS0wNC0yOSAwMDoxMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jOgorCisgICBkb24ndCB0cnkgdG8gYnVpbGQgdGhlIEdFVCBwZHUgdW5kZXIgbm90aWZ5X29ubHkKKworMjAxMS0wNC0yOSAwMDoxMiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOgorCisgICBmaXggYSBidWcgd2l0aCBuby1zdWZmaXggc3RyaW5ncyBhbmQgdXNlIGEgY29uc3QgaW5wdXQgc3RyaW5nCisKKzIwMTEtMDQtMjkgMDA6MTIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEwbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzX2NsaWIuYzoKKworICAgQSBuZXcgdW5pdCB0ZXN0IGZvciB0aGUgdGltZSBjb252ZXJzaW9uIHJvdXRpbmUKKworMjAxMS0wNC0yOSAwMDoxMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICB1c2UgdGhlIG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcygpIGZ1bmN0aW9uIGZvciBjb21wdXRpbmcKKyAgIGludGVydmFsIHBlcmlvZHMKKworMjAxMS0wNC0yOSAwMDoxMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOgorCisgICBBZGRlZCBhIG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcygpIGZ1bmN0aW9ucyB0byBjb252ZXJ0LCBlLmcuLAorICAgMWggdG8gMzYwMAorCisyMDExLTA0LTI5IDAwOjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmVtb3ZlIGNvZGUgdG8gYnVpbGQvcGFyc2UgR0VUL2V0YyByZXF1ZXN0cyB3aGVuIE5PVElGWV9PTkxZIGlzCisgICB0dXJuZWQgb24uCisKKzIwMTEtMDQtMjcgMjE6MzMgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgdXBkYXRlIHRoZSBORVdTIHRvIHJlZmxlY3QgdGhlIG5ldyAtLWVuYWJsZS1yZWFkLW9ubHkgYW5kCisgICAtLWVuYWJsZS1ub3RpZnktb25seQorCisyMDExLTA0LTI3IDIxOjMzICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOgorCisgICBtaW5vciBpbXByb3ZlbWVudHMgZm9yIHJvbmx5IHZzIHJ3cml0ZSBoYW5kbGluZworCisyMDExLTA0LTI3IDIxOjMyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIHN0aWxsIGVuYWJsZSBST05MWSB3aGVuIFJXUklURSBpc24ndCBwb3NzaWJsZQorCisyMDExLTA0LTI3IDIxOjMyICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBmaXggR0VUIHN1cHBvcnQgd2hlbiBub193cml0ZSBpcyBlbmFibGVkCisKKzIwMTEtMDQtMjcgMjE6MzIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgbWFyayBhIGZ1dHVyZSBtb2RpZmljYXRpb24gbmVlZCBpbiBhIGNvbW1lbnQKKworMjAxMS0wNC0yNyAyMTozMSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYzoKKworICAgZml4IGhhbmRsaW5nIG9mIG5vX3dyaXRlIHN1cHBvcnQKKworMjAxMS0wNC0yNyAyMTozMSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX2FnZW50LmMsIGFnZW50L3NubXBkLmM6CisKKyAgIGRvbid0IG9wZW4gYW55IGxpc3RlbmluZyB0cmFuc3BvcnRzIHdoZW4gbm90aWZ5LW9ubHkgaXMgc3BlY2lmaWVkCisKKzIwMTEtMDQtMjcgMjE6MzEgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgc2V0IHRoZSBuby1saXN0ZW4gYW5kIHJlYWQtb25seSBmbGFncyB3aGVuIC0tZW5hYmxlLW5vdGlmeS1vbmx5CisgICBpcyBzZXQKKworMjAxMS0wNC0yNyAyMTozMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICByYW4gYXV0b2hlYWRlcgorCisyMDExLTA0LTI3IDIxOjMwICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKKworICAgaW1wbGVtZW50IHRoZSBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUIGluIHRoZXNlIHRyYW5zcG9ydHMKKworMjAxMS0wNC0yNyAyMTozMCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmU6CisKKyAgIHJ1biBhdXRvY29uZgorCisyMDExLTA0LTI3IDIxOjI5ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBtb3ZlIHRoZSByZWFkLW9ubHkgZmxhZyBkZWZpbml0aW9uIGJlbG93IHRoZSBub3RpZnktb25seSwgc2luY2UKKyAgIG5vdGlmeS1vbmx5IG5lZWRzIHRvIGltcGx5IHJlYWQtb25seQorCisyMDExLTA0LTI3IDIxOjI5ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIERlZmluZWQgYSBuZXcgLS1lbmFibGUtbm90aWZ5LW9ubHkgZmxhZyBmb3IgYnVpbGRpbmcgYSB0b29sc2V0CisgICB0aGF0IG9ubHkgYWxsb3dzIGZvciBub3RpZmljYXRpb25zIHdpdGggbm8gcmVhZC93cml0ZSBzdXBwb3J0CisKKzIwMTEtMDQtMjcgMjE6MjkgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgRGVmaW5lZCBhIG5ldyAtLW5vLWxpc3RlbiBmbGFnIHRvIHJlbW92ZSBsaXN0ZW5pbmcgc3VwcG9ydAorCisyMDExLTA0LTI3IDIxOjI4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oOgorCisgICB0aGUgZGlzbWFuIHNjaGVkdWxlIG1pYiBpcyBvbmx5IHVzZWZ1bCB3aGVuIFNFVHMgYXJlIHR1cm5lZCBvbgorCisyMDExLTA0LTI3IDIxOjI4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi5oOgorCisgICB0aGUgZGlzbWFuIHNjaGVkdWxlIG1pYiBpcyBvbmx5IHVzZWZ1bCB3aGVuIFNFVHMgYXJlIHR1cm5lZCBvbgorCisyMDExLTA0LTI3IDIxOjI4ICBoYXJkYWtlcgorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIGZpbmlzaGVkIG5vX3dyaXRlIHN1cHBvcnQgZm9yIGNvbW1vbiBpbmNsdWRlZCB0YWJsZXMKKworMjAxMS0wNC0yNyAyMToyNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgQWRkIGJhY2sgaW4gJ25ldHNubXBfc2V0X3Jvd19jb2x1bW4nIHdoZW4gbm9fd3JpdGUgc3VwcG9ydCBpcworICAgZW5hYmxlZAorICAgVGhpcyBmdW5jdGlvbiBpcyBhIGdlbmVyaWMgZGF0YSBtYW5pcHVsYXRpb24gZnVuY3Rpb24sIG5vdCBTRVQKKyAgIHNwZWNpZmljCisKKzIwMTEtMDQtMjcgMjE6MjcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIGRvbid0IHVzZSBtYXJrX3Jvd19jb2x1bW5fd3JpdGFibGUgd2hlbiByZWFkLW9ubHkgc3VwcG9ydCBpcworICAgZW5hYmxlZAorCisyMDExLTA0LTI3IDIxOjI2ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmM6CisKKyAgIGZpeCBub193cml0ZSBzdXBwb3J0CisKKzIwMTEtMDQtMjcgMjE6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6CisKKyAgIGZpeCBub193cml0ZSBzdXBwb3J0CisKIDIwMTEtMDQtMjcgMjE6MTYgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOgpAQCAtNDU4LDYgKzMxMzIzLDQ2MyBAQAogICAgRG9uJ3QgZnJlZSB0aGUgaWZYVGFibGUgcm93IGZvdW5kIG9uIGxvYWQgZmFpbHVyZSBhcyB3ZSBkb24ndCBvd24KICAgIGl0CiAKKzIwMTEtMDQtMjYgMTg6MTYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvZ2l0dG9vbHMsIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczoKKworICAgZ2l0IGJhc2gtc2hlbGwgZnVuY3Rpb25zIHRvIGVuYWJsZSBicmFuY2ggc3dpdGNoaW5nIGFuZCBleHRlcm5hbAorICAgYnVpbGRpbmcKKyAgIFRoZXNlIGxvY2FsIHNoZWxsIGZ1bmN0aW9ucyAoc25tcGNvbmZpZ3VyZSBhbmQgc25tcG1ha2UpIGxldCB5b3UKKyAgIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGluIGV4dGVybmFsCisgICBkaXJlY3RvcmllcworICAgdGhhdCBhcmUgYXV0by1jYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBleGlzdGluZyBicmFuY2ggbmFtZSAod2l0aAorICAgYW4KKyAgIG9wdGlvbmFsIHN1ZmZpeCkuIFRoaXMgbGV0cyB5b3UgcnVuICdzbm1wbWFrZScgZnJvbSB3aXRoaW4gdGhlCisgICBzb3VyY2UKKyAgIGRpcmVjdG9yeSBhbmQgaGF2ZSBpdCBhY3R1YWxseSBleHRlcm5hbGx5IGtlZXAgdHJhY2sgb2YgbW9kaWZpZWQKKyAgIGZpbGVzLCBldGMsIHNvIGJ1aWxkaW5nIGluIG11bHRpcGxlIGJyYW5jaGVzIGNhbiBiZSBkb25lIGZyb20gYQorICAgc2luZ2xlCisgICBnaXQgY2hlY2tvdXQuCisKKzIwMTEtMDQtMjUgMjA6NTcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgY2xlYW4gdXAgdGhlIGl0ZXJhdG9ycworCisyMDExLTA0LTI1IDIwOjU3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGZyZWUgdmFyYmluZHMgYWZ0ZXIgc2VuZGluZworCisyMDExLTA0LTI1IDE4OjQ4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICBDb21tZW50ZWQgb3V0IGFuIHVudXNlZCBmdW5jdGlvbiBiZWNhdXNlIHRoZSBjb21waWxlciBjb21wbGFpbmVkCisgICBhYm91dCBpdC4KKworMjAxMS0wNC0yNSAxODo0NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgRml4ZWQgdHdvIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDExLTA0LTIzIDE0OjMxICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jOgorCisgICBSZW1vdmUgdW5uZWNlc3NhcnkgbnVsbCBjaGVjaworCisyMDExLTA0LTIzIDE0OjA1ICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmM6CisKKyAgIE1vdmUgcG9pbnRlciBkZXJlZmVyZW5jZSB0byBhZnRlciB0aGUgY2hlY2sgZm9yIHN1Y2Nlc3NmdWwKKyAgIGFsbG9jYXRpb24gb2YgdGhlIHBvaW50ZXIKKworMjAxMS0wNC0yMyAwODoyMCAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGUKKworMjAxMS0wNC0yMyAwODoxNiAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBSZW1vdmUgYW4gdW51c2VkIHZhcmlhYmxlCisKKzIwMTEtMDQtMjMgMDg6MDYgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgUmVkdWNlIHZhcmlhYmxlIHNjb3BlCisKKzIwMTEtMDQtMjMgMDc6NTUgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgUmVkdWNlIHZhcmlhYmxlIHNjb3BlCisKKzIwMTEtMDQtMjIgMTk6MzUgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGUKKworMjAxMS0wNC0yMiAxOTozMCAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworMjAxMS0wNC0yMiAxNzoyOSAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgbWVudGlvbiB3aGljaCBtb2R1bGUgaXMgcmVxdWlyZWQgd2hlbiBidWlsZGluZyB0byBnZXQgdGhlIGRlbGl2ZXIKKyAgIHN1cHBvcnQKKworMjAxMS0wNC0yMiAxNjozMyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBkZWxldGVkIGFuIHVubmVlZGVkIGRlYnVnZ2luZyBzdGF0ZW1lbnQKKworMjAxMS0wNC0yMiAxNjozMyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBwcm9wZXJseSB1cGRhdGUgdGhlIG1heCBjb3VudCBpbiB0aGUgb3V0Z29pbmcgbm90aWZpY2F0aW9ucworCisyMDExLTA0LTIyIDE2OjMyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGJldHRlciBwYWNrZXQgZXN0aW1hdGlvbiB0byBlbnN1cmUgd2UgZG9uJ3Qgb3ZlcnJ1bi4KKworMjAxMS0wNC0yMiAxNjozMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBlc3RpbWF0ZSB0aGUgcGFja2V0IHNpemUgYW5kIGJyZWFrIHRoZSBub3RpZmljYXRpb24gdXAgYmFzZWQgb24KKyAgIGl0CisKKzIwMTEtMDQtMjIgMTY6MzEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgdHJhbnNmb3JtIHRoZSBub3RpZmljYXRpb24gc2VuZGluZyBpbnRvIGEgbGFyZ2VyIGxvb3AgZm9yIGxhdGVyCisgICBtdWx0aS1ub3RpZnMKKworMjAxMS0wNC0yMiAxNjozMSAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IGZlYXR1cmUgbWFya2luZy9zZWxlY3Rpb24KKworMjAxMS0wNC0yMiAxNjozMSAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBtZW50aW9uIHRoZSBuZXcgZGVsaXZlcnkgYnkgbm90aWZpY2F0aW9ucworCisyMDExLTA0LTIyIDE2OjMxICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIGRvY3VtZW50IHRoZSBtaW5pbWFsaXN0IHN1cHBvcnQKKworMjAxMS0wNC0yMiAxNjozMCAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgZG9jdW1lbnQgdGhlIG5ldyBkZWxpdmVyQnlOb3RpZnkgY29uZmlnIHRva2VucworCisyMDExLTA0LTIyIDE2OjMwICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGFsbG93IHJ1biB0aW1lIG1vZGlmaWNhdGlvbnMgb2YgdGhlIE9JRHMgdG8gdXNlCisKKzIwMTEtMDQtMjIgMTY6MzAgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOgorCisgICBhZGQgY29uZmlnIGZsYWdzIHRvIG5vdCBpbmNsdWRlIHRoZSBwZXJpb2QgY29uZmlnIGFuZCBtc2cgY291bnQKKyAgIHZhbHVlcworCisyMDExLTA0LTIyIDE2OjI5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGluY2x1ZGUgdGhlIHBlcmlvZGljIGNvdW50LCB0aGUgbWVzc2FnZSBudW1iZXIgYW5kIHRoZSBtYXgKKyAgIG1lc3NhZ2UgbnVtYmVyCisKKzIwMTEtMDQtMjIgMTY6MjkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgZGVsZXRlZCBkZWJ1Z2dpbmcgY29tbWVudAorCisyMDExLTA0LTIyIDE2OjI5ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAgIAorICAgICAgbWlicy9ORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCLnR4dDoKKworICAgTW92ZSB0aGUgbm90aWZpY2F0aW9uIGRlZmluaXRpb24gdG8gd2l0aGluIHRoZSBzdWItbWliCisKKzIwMTEtMDQtMjIgMTY6MjggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgZGVsZXRlIGFuIHVudXNlZCB2YXJpYWJsZQorCisyMDExLTA0LTIyIDE2OjI4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6CisKKyAgIGxvYWQgdGhlIE1JQiBpbnRvIHRoZSBkZWZhdWx0IHNldAorCisyMDExLTA0LTIyIDE2OjI4ICBoYXJkYWtlcgorCisgICAqIG1pYnMvTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQi50eHQ6CisKKyAgIEEgbmV3IG1pYiB0byBob2xkIHRoZSBwZXJpb2RpYyBub3RpZnkgb2JqZWN0cworCisyMDExLTA0LTIyIDE2OjI4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGZpbGwgb3V0IHRoZSBjb25maWcgZnJlZSByb3V0aW5lCisKKzIwMTEtMDQtMjIgMTY6MjcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgcHJvcGVybHkgbW9uaXRvciB0aGUgd2hvbGUgY29udGFpbmVyCisKKzIwMTEtMDQtMjIgMTY6MjcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOgorCisgICBwYXJzZSB0aGUgY29uZiBmaWxlcyBhbmQgY3JlYXRlIGFuZCBpbnNlcnQgb2JqZWN0cyBpbnRvIHRoZQorICAgY29udGFpbmVyCisKKzIwMTEtMDQtMjIgMTY6MjcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgZGVmaW5lZCBhIGNvbnRhaW5lciB0byBzdG9yZSBhIGxpc3Qgb2YgZGVsaXZlciBvYmplY3RzIGluCisKKzIwMTEtMDQtMjIgMTY6MjcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDoKKworICAgYWRkZWQgYSBuZXh0X3J1biB0aW1lc3RhbXAKKworMjAxMS0wNC0yMiAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBhY3R1YWxseSBzZW5kIGEgbm90aWZpY2F0aW9uIHdpdGggdGhlIHJlc3VsdHMKKworMjAxMS0wNC0yMiAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBtYWtlIHRoZSB3YWxrIG9uIHRoZSB0ZXN0IG9iamVjdCBmdW5jdGlvbi4KKworMjAxMS0wNC0yMiAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBjcmVhdGUgYSBtYXggcGFja2V0IHNpemUgY29uZmlnIHRva2VuIGFuZCBwYXJzZSBpdAorCisyMDExLTA0LTIyIDE2OjI1ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDoKKworICAgbWluaW1hbCBzdGFydGluZyB0ZXN0IG9iamVjdAorCisyMDExLTA0LTIyIDE2OjI1ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDoKKworICAgYWRkZWQgYSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHRpbWUgdW50aWwgdGhlIG5leHQgcnVuCisKKzIwMTEtMDQtMjIgMTY6MjUgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgcmVtb3ZlIGxlZnQgaW4gdGVtcGxhdGUgbGluZQorCisyMDExLTA0LTIyIDE2OjI1ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDoKKworICAgdXNlIGFuIGFsYXJtIGNhbGxiYWNrIHByb3RvdHlwZSBmb3IgZXhlY3V0ZQorCisyMDExLTA0LTIyIDE2OjI0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyLCBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDoKKworICAgYmVnaW5uaW5nIHRlbXBsYXRlIGNvZGUgZm9yIGRlbGl2ZXJ5IG9mIGRhdGEgYnkgbm90aWZpY2F0aW9ucworCisyMDExLTA0LTIyIDA5OjEzICBtYWdmcgorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgUmVkdWNlIHZhcmlhYmxlIHNjb3BlCisKKzIwMTEtMDQtMjIgMDk6MDcgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGVzCisKKzIwMTEtMDQtMjIgMDk6MDMgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisKKzIwMTEtMDQtMTkgMDg6MzggIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9saWJzbm1wLnZjcHJvaiwgd2luMzIvd2luMzIuc2xuOgorCisgICBBZGRlZCBWaXN1YWwgU3R1ZGlvIDIwMDUgcHJvamVjdCBhbmQgc29sdXRpb24gZmlsZSBmb3IgYnVpbGRpbmcKKyAgIHRoZSBOZXQtU05NUCBsaWJyYXJ5IGFzIGEgc3RhdGljIGxpYnJhcnkuIEJvdGggdGhlIFdpbjMyIGFuZCB0aGUKKyAgIHg2NCBjb25maWd1cmF0aW9ucyBhcmUgaW5jbHVkZWQuCisKKzIwMTEtMDQtMTkgMDc6NTcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcDoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDExLTA0LTE5IDA3OjM5ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qOgorCisgICBNb3JlIFZpc3VhbCBTdHVkaW8gMjAwNSBwcm9qZWN0IGZpbGUgY2xlYW51cC4KKworMjAxMS0wNC0xOSAwNjo1NyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9iaW46CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMS0wNC0xOCAxNTozNCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLAorICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2o6CisKKyAgIENsZWFuZWQgdXAgV2luMzIgVlMyMDA1IHByb2plY3QgZmlsZXMgLSByZW1vdmVkIHN1cGVyZmx1b3VzCisgICBsaWJyYXJ5IHJlZmVyZW5jZXMuCisKKzIwMTEtMDQtMTggMTU6MjUgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLAorICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osIHdpbjMyL3dpbjMyZGxsLnNsbjoKKworICAgQWRkZWQgeDY0IGNvbmZpZ3VyYXRpb25zLgorCisyMDExLTA0LTE4IDE1OjE0ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYjoKKworICAgQW5vdGhlciBXaW4zMi1yZWxhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QgdXBkYXRlLgorCisyMDExLTA0LTE4IDE1OjEzICBidmFzc2NoZQorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCB3aW4zMi93aW4zMmRsbC5zbG46CisKKyAgIEFkZGVkIHdpbjMyZGxsLXJlbGF0ZWQgVmlzdWFsIFN0dWRpbyAyMDA1IHByb2plY3QgYW5kIHNvbHV0aW9uCisgICBmaWxlcy4KKworMjAxMS0wNC0xOCAxMzozNyAgYnZhc3NjaGUKKworICAgKiAgd2luMzIsIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UsIHdpbjMyL2xpYiwgd2luMzIvbGliYWdlbnQsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQsIHdpbjMyL2xpYnNubXAsIHdpbjMyL2xpYnNubXBfZGxsLCAgIAorICAgICAgd2luMzIvbGlidWNkbWlicywgd2luMzIvbmV0LXNubXAsIHdpbjMyL25ldHNubXBtaWJzLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQsIHdpbjMyL3NubXBidWxrd2Fsaywgd2luMzIvc25tcGQsICAgCisgICAgICB3aW4zMi9zbm1wZGVsdGEsIHdpbjMyL3NubXBkZiwgd2luMzIvc25tcGdldCwgd2luMzIvc25tcGdldG5leHQsICAKKyAgICAgICB3aW4zMi9zbm1wbmV0c3RhdCwgd2luMzIvc25tcHNldCwgd2luMzIvc25tcHN0YXR1cywgICAKKyAgICAgIHdpbjMyL3NubXB0YWJsZSwgd2luMzIvc25tcHRlc3QsIHdpbjMyL3NubXB0cmFuc2xhdGUsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcCwgd2luMzIvc25tcHRyYXBkLCB3aW4zMi9zbm1wdXNtLCB3aW4zMi9zbm1wdmFjbSwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrOgorCisgICBBZGRlZCAqLnZjcHJvai4qLnVzZXIgYW5kIHg2NCB0byB0aGUgd2luMzIgU3VidmVyc2lvbiBpZ25vcmUKKyAgIGxpc3RzLiBSYW4gdGhlc2UgdGhyb3VnaCBMQ19BTEw9QyBzb3J0IC1mdSB0b28uCisKKzIwMTEtMDQtMTggMTI6MTAgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaDoKKworICAgV2luMzIgRExMIGJ1aWxkIGZpeGVzLgorCisyMDExLTA0LTE3IDIwOjU2ICBkdHMxMgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzMTc1NjQwOiBVc2UgSVBfUkVDVkRTVEFERFIgc29ja29wdAorICAgd2hlcmUgYXZhaWxhYmxlICgqQlNEKQorCiAyMDExLTA0LTE1IDEzOjQyICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKQEAgLTQ2Nyw2ICszMTc4OSwxNCBAQAogICAgQ0hBTkdFUzogc25tcGxpYjogQlVHUzogMzE4Mjk4NTogRml4IGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQKICAgIHByZWZpeCBsZW5ndGgKIAorMjAxMS0wNC0xNSAxMzoxNyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsIGFwcHMvc25tcHRyYXBkX2RzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBDSEFOR0VTOiBMaW51eDogUEFUQ0hFUzogMzIwNTgxMTogT3B0aW9uIHRvIHNraXAgZmQvbG9vcC9yYW0KKyAgIGRldmljZXMgaW4gZGlza0lPVGFibGUKKwogMjAxMS0wNC0xNCAyMTozMSAgZHRzMTIKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgpAQCAtNTEzLDQyICszMTg0MywyMzQgQEAKIAogICAgRml4IHdyb25nIG5hbWUgZm9yIGNvbmZpZyB0b2tlbiAnZG9Ob3RSZXRhaW5Ob3RpZmljYXRpb25Mb2dzJwogCi0yMDExLTAzLTE1IDEyOjM3ICBkdHMxMgorMjAxMS0wNC0wOSAyMTo1OSAgbmJhCiAKLSAgICogQ0hBTkdFUywgTkVXUzoKKyAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgUmVtb3ZlIGJvZ3VzIChMaW51eCkgZGVmaW5lcwogCi0yMDExLTAzLTE1IDEwOjU3ICBkdHMxMgorMjAxMS0wNC0wOSAyMTo1NiAgbmJhCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiBzbm1wbGliL3NubXAtdGMuYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIEhBVkVfVE1fVE1fR01UT0ZGIGlzIEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRgogCi0yMDExLTAzLTE1IDEwOjU2ICBkdHMxMgorMjAxMS0wNC0wOSAyMDowOCAgbmJhCiAKLSAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAotICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsIGNvbmZpZ3VyZSwgCisgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLSAgIG1ha2UgZGVwZW5kCisgICBCaWxsIEZlbm5lcnMgcGF0Y2ggdG8gbWFrZSBESVNNQU4gUElORyBhbmQgVFJBQ0VST1VURSBNSUJTCisgICBjb21waWxlIHVuZGVyIExpbnV4CiAKLTIwMTEtMDMtMTUgMTA6NDIgIGR0czEyCisyMDExLTA0LTA5IDIwOjA0ICBuYmEKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwgICAKLSAgICAgIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sICAgCi0gICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgcGVybC9hZ2VudC9hZ2VudC5wbSwgICAKLSAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAgIAotICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5jOgogCi0gICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgIFNvbGFyaXMgc3VwcG9ydCBmb3IgU0NUUC1NSUIKIAotMjAxMS0wMy0xNSAxMDo0MSAgZHRzMTIKKzIwMTEtMDQtMDkgMTk6NTAgIG5iYQogCi0gICAqIE1ha2VmaWxlLnRvcDoKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBUWiBpcyBvbmUgaG91ciBvZmYgaWYgSEFWRV9UTV9UTV9HTVRPRkYgYW5kIFNZU1YgKHN1Y2ggaXMgTGludXgpCisKKzIwMTEtMDQtMDEgMDE6MTEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBkdGxzOiBvdmVyaGF1bCBvZiBkZWJ1ZworICAgCisgICAtIGRyYXN0aWMgcmVkdWN0aW9uIGluIG51bWJlciBvZiBtZXNzYWdlcyBhbmQgbXNnIGNvbXBsZXhpdHkKKyAgIGZvciBiYXNpYyBkdGxzdWRwIHRva2VuCisgICAtIHByZXZpb3VzIGxldmVsIG9mIGRldGFpbCBhdmFpbGFibGUgYnkgYWRkaW5nIDk6ZHRsc2R1cCB0b2tlbgorCisyMDExLTA0LTAxIDAwOjUzICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZHRsczogY2xlYW4gdXAgY2xvc2U7IGNhdGNoCisgICAnY29ubmVjdCcvJ2Rpc2Nvbm5lY3QnCisgICAKKyAgIGNvbm5lY3QgPSB3ZSBnZXQgc3VjY2Vzc2Z1bGx5IGRlY29kZWQgc25tcCBkYXRhCisgICBkaXNjb25uZWN0ID0gMCBieXRlIHJlYWQsIHNzaCBzaHV0ZG93biBmbGFnIHNldAorICAgYWRkIGJpb19jYWNoZSBmbGFncyBmb3IgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZAorICAgY2hlY2sgZm9yIG51bGwgcHRyIGJlZm9yZSBkZXJlZmVyZW5jaW5nCisgICBjbG9zZSBoYW5kbGluZzoKKyAgIC0gb25seSBzZW5kIHF1ZXVlZCBkYXRhIGlmIHdlIGdvdCB0byBjb25uZWN0ZWQgc3RhdGUKKyAgIC0gc2VyaW91c2x5IHJlZHVjZSB0aW1lb3V0IHRvIHdhaXQgZm9yIGp1bmsgcmVhZC4gaSB0aGluaworICAgd2Ugc2hvdWxkbid0IGV2ZW4gYm90aGVyCisgICAtIHJldHVybiBlYXJseSBpZiBjYWNoZXAgaXMgTlVMTCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0ZXN0IGl0CisgICByZXBlYXRlZGx5CisgICAtIHVzZSBjb3JyZWN0IG5mZHMgdmFsdWUgaW4gc2VsZWN0IGNhbGwKKworMjAxMS0wMy0zMSAwNToxNyAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIG1ha2UgdHJ1bmsgYW5kIHY1LTYtcGF0Y2hlcyBjbG9zZWx5IGFsaWduZWQKKyAgIAorICAgbW9zdGx5IGNoYW5nZXMgaW4gZGVidWcsIGNvb2tpZSB0cmFja2luZworCisyMDExLTAzLTI3IDExOjA4ICBtYWdmcgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBTaW1wbGlmeSBhcnJheSByZXNpemluZyBzb21ld2hhdCBmdXJ0aGVyCisKKzIwMTEtMDMtMjcgMTA6MjEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIERvIG5vdCBhc3NpZ24gbmV3X2RhdGEgaWYgdGhlIHZhbHVlIHdvbid0IGJlIHVzZWQuCisgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGVzLgorCisyMDExLTAzLTI3IDEwOjE0ICBtYWdmcgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNsZWFyIGEgY2h1bmsgb2YgbWVtb3J5IGlmIHRoZSBuZXh0IGFjdGlvbgorICAgb24gaXQgaXMgdG8KKyAgIGZpbGwgaXQgc28gdXNlIG1hbGxvYyBpbnN0ZWFkIG9mIGNhbGxvYy4KKworMjAxMS0wMy0yNyAxMDowOSAgbWFnZnIKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgQ29udGFpbmVyQmluYXJ5QXJyYXkgcmVhbGx5IGNhbid0IGhvbGQgYW55dGhuZyBidXQgcG9pbnRlcnMgYW5kCisgICB0aGF0IG1lYW5zIHRoZQorICAgZGF0YV9zaXplIGZpZWxkIGlzIHVubmVjZXNzYXJ5IHNvIEkgcmVtb3ZlZCBpdC4KKworMjAxMS0wMy0yNiAxOTo1NSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCisgICAgICBzbm1wbGliL2ludDY0LmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvc25tcF9zZWNtb2QuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHYzLmM6CisKKyAgIEFkZCBtaXNzaW5nIGluY2x1ZGUKKworMjAxMS0wMy0yNiAwODowNyAgbWFnZnIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgVXNlIHRoZSByaWdodCBmZWF0dXJlIG1hY3JvIGluIG9yZGVyIHRvIG1ha2UgYnVpbGRzIHdpdGgKKyAgIC0tZW5hYmxlLWlwdjYgLS13aXRoLW91dC10cmFuc3BvcnRzPVVEUElQdjYgc3VjY2VlZC4KKworMjAxMS0wMy0yNiAwODowMiAgbWFnZnIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgUmVtb3ZlIGR1cGxpY2F0ZSBjb3BpZXMgb2YgZnVuY3Rpb25zCisKKzIwMTEtMDMtMjUgMjA6MzUgIHJzdG9yeQorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHR3ZWFrIGRlYnVnIG1lc3NhZ2UKKworMjAxMS0wMy0yNSAyMDozMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHVwZGF0ZSBjZXJ0IHRva2VuIGhhbmRsaW5nCisgICAKKyAgIC0gcmVtb3ZlIGRlZlg1MDkgY2VydCB0b2tlbnMgKHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBiZWZvcmUKKyAgIDUuNikKKyAgIC0gd2FybmluZ3MgZm9yIG91ci90aGVpciB0b2tlbnMsIHJlY29tbWVuZCB1c2luZyBsb2NhbC9wZWVyCisKKzIwMTEtMDMtMjUgMjA6MzEgIHJzdG9yeQorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgorCisgICBtZXJnZSBuZXRzbm1wX2R0bHN1ZHA2IGludG8gbmV0c25tcF9kdGxzdWRwCisgICAKKyAgIHVzZSBhZGRyIHNpemUgdG8gdGVsbCB0aGVtIGFwYXJ0CisKKzIwMTEtMDMtMjUgMjA6MzEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgbG9nIChvbmNlKSB3YXJuaW5nIHdoZW4gZGVwcmVjYXRlZCBmX2NyZWF0ZV9mcm9tX3RzdHJpbmcKKyAgIHRyYW5zcG9ydCBmdW5jdGlvbiB1c2VkCisKKzIwMTEtMDMtMjUgMjA6MzAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmM6CisKKyAgIHJlZHVjZSBjYXN0aW5nOyBtYWtlIHN1cmUgdG8gZnJlZSB0aGUgcmlnaHQgcG9pbnRlcgorCisyMDExLTAzLTI1IDIwOjI5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKKworICAgcmVkdWNlIGNhc3RpbmcKKworMjAxMS0wMy0yNCAwNjoxOSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgorCisgICBSZXBsYWNlIGEgdmFyaWFibGUgd2l0aCBhIGNvbnN0YW50LiBNYWtlIG9uZSBtb3JlIG9pZCBjb25zdC4KKworMjAxMS0wMy0xNyAyMTowOSAgbmJhCisKKyAgICogbWFuL3NubXBkZWx0YS4xLmRlZjoKKworICAgRm9ybWF0dGluZyBib3RjaAorCisyMDExLTAzLTE3IDIxOjA3ICBuYmEKKworICAgKiBtaWJzL01ha2VmaWxlLmluOgorCisgICBJbnN0YWxsIHJlcXVpcmVkIG1pYnMKKworMjAxMS0wMy0xNyAyMTowNSAgbmJhCisKKyAgICogbWlicy9yZmNsaXN0OgorCisgICBOZXcgUkZDIG1pYnMKKworMjAxMS0wMy0xNSAxMDozMSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBTcGVsbGluZyBmaXg6IHJlZ2luZXJhdGVkIC0+IHJlZ2VuZXJhdGVkLgorCisyMDExLTAzLTE1IDEwOjE5ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIFNpbXBsaWZpZWQgcjE5NTk0IChsZWFrLWF0LWV4aXQgZml4KS4KKworMjAxMS0wMy0xNSAwOTo1OSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMjAxMTMuCisKKzIwMTEtMDMtMTQgMDk6MzEgIGR0czEyCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgRml4IG1haW4gYWdlbnQgc2VsZWN0IGNhbGwgdG8gdXNlIHRoZSByZW5hbWVkIEFQSSByb3V0aW5lLgorCisyMDExLTAzLTEzIDIwOjA5ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYzoKKworICAgQnJpbmcgdGhlIG5hbWluZyBvZiB0aGUgbGFyZ2VfZmRfc2V0IHNlbGVjdCBjYWxsIGludG8KKyAgIGxpbmUgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQVBJLgogCiAyMDExLTAzLTEyIDA2OjU5ICByc3RvcnkKIApAQCAtNTYzLDggKzMyMDg1LDcgQEAKICAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAgIAogICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKICAgICAgICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCi0gICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oOgorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jOgogCiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IG9wdGltaXphdGlvbnMgZm9yIGxhcmdlIHJvdXRlIHRhYmxlcyBmcm9tCiAgICBTdGVwaGVuIEhlbW1pbmdlcgpAQCAtNTczLDEzICszMjA5NCw4MiBAQAogICAgc3ViamVjdAogICAgaXAtZm9yd2FyZC1taWIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzOyBwYXJ0IDQgbmVlZHMgbW9yZSB3b3JrCiAKLTIwMTEtMDMtMTEgMTE6MTEgIGpzYWZyYW5laworMjAxMS0wMy0xMSAxNDo0MyAgcnN0b3J5CiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgorICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHJhY2UgY29uZGl0aW9uIGluIGhyU1dSdW5UYWJsZQotICAgVHJlYXQgdGhlIHJlYWRzIGZyb20gL3Byb2MvPHBpZD4vKiBjYXJlZnVseSwgcHJvY2Vzc2VzIGNhbiBleGl0Ci0gICBpbiB0aGUgbWlkZGxlIG9mIHByb2Nlc3NpbmcuCisgICBDSEFOR0VTOiBzbm1wbGliOiBhZGQgbW9yZSBvcGVuc3NsIGVycm9yIGNhc2VzIHdoZXJlIHdlIGNoZWNrIGZvcgorICAgbG9jYWwgY2VydAorCisyMDExLTAzLTExIDEyOjAxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKKworICAgTWluR1c6IGRza1RhYmxlOiBSZXBvcnQgemVybyBmb3IgdW5pbXBsZW1lbnRlZCBmaWVsZHMgaW5zdGVhZCBvZgorICAgcmFuZG9tIGRhdGEuCisKKzIwMTEtMDMtMTEgMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQnVpbGRzIHdpdGggbW9zdCByZWNlbnQgTWluR1cgKGhhdmluZyAjZGVmaW5lCisgICBsb2NhbHRpbWVfcikuCisKKzIwMTEtMDMtMTEgMDM6MDggIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHJlZmluZSBjZXJ0IGRlYnVnZ2luZzsgcmVtb3ZlIHVudXNlZCBmdW5jdGlvbgorCisyMDExLTAzLTEwIDIxOjIxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMjA1NzY1OiBoYW5kbGUgcmVjb25maWcgZm9yIGNlcnRTZWNOYW1lCisgICB0b2tlbgorCisyMDExLTAzLTEwIDIwOjAxICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIFNwZWxsaW5nIGZpeCBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQ6IG1lc3NnZXMgLT4gbWVzc2FnZXMuCisKKzIwMTEtMDMtMTAgMTk6NTUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IE1pbm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbgorICAgb2YgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkuCisKKzIwMTEtMDMtMTAgMTk6NDggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMjAzODA2OiBBdm9pZCB0aGF0IHRoZSBtYWluIGFnZW50CisgICBwcm9jZXNzaW5nIGxvb3AgLSB3aGVuIHVzaW5nIG1vcmUgdGhhbiBGRF9TRVRTSVpFIGZpbGUKKyAgIGRlc2NyaXB0b3JzIC0gY2FuIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIGJ5IGludm9raW5nIHNlbGVjdCgpLgorCisyMDExLTAzLTEwIDE5OjQzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IEFkZCB0aGUgZnVuY3Rpb24KKyAgIG5ldHNubXBfbGFyZ2Vfc2VsZWN0KCkuCisKKzIwMTEtMDMtMTAgMTg6NTUgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOWxhcmdlX2ZkX3NldF9jbGliLmM6CisKKyAgIEFkZGVkIGEgbWluaW1hbCB1bml0IHRlc3QgZm9yIG5ldHNubXBfbGFyZ2VfZmRfc2V0LgorCisyMDExLTAzLTEwIDE4OjUyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBNYWtlCisgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSBjbGVhciBhbGwgcmVsZXZhbnQgZmlsZQorICAgZGVzY3JpcHRvcnMuCiAKIDIwMTEtMDMtMTAgMTU6NTEgIGR0czEyCiAKQEAgLTU4OCw2ICszMjE3OCwyODggQEAKICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDMxNzgzODk6IEZpeCBpbmNvbnNpc3RlbnQgaGFuZGxpbmcgb2YgVFoKICAgIG9mZnNldHMKIAorMjAxMS0wMy0xMCAxNTo0MCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZToKKworICAgSWdub3JlIG9iamVjdCBmaWxlcyBhbmQgbGlicmFyaWVzCisKKzIwMTEtMDMtMTAgMTU6MDUgIGR0czEyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzOgorCisgICBJZ25vcmUgb2JqZWN0IGZpbGVzIGFuZCBsaWJyYXJpZXMKKworMjAxMS0wMy0xMCAxNDozMiAgaGFyZGFrZXIKKworICAgKiBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgbWFrZSB2YXJpYWJsZSBuYW1lcyBtYXRjaAorCisyMDExLTAzLTEwIDE0OjI4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jOgorCisgICBGaXhlZCB0d28gY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTEtMDMtMTAgMTQ6MjQgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIGZpeGVkIGluc3RhbGxhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBvcHRpb25hbCBTRVQgcHJvZ3JhbXMKKworMjAxMS0wMy0wOCAwMDo1MyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzOgorCisgICBjaG1vZCBhK3gKKworMjAxMS0wMy0wOCAwMDoxNSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDoKKworICAgcHJpbnQgYW4gZXJyb3IgaWYgdGhlIGVuZCBvZiBhIGZpbGUgd2FzIHJlYWNoZWQgYW5kIHdlJ3JlIG5vdAorICAgYmFjaworICAgaW50byB0aGUgc3RhdGUgd2UgY2FuIHdyaXRlOyBvdGhlcndpc2UgYSBjbG9zaW5nICNpZmRlZiBpcworICAgbWlzc2luZy4KKworMjAxMS0wMy0wOCAwMDoxNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKKworICAgZml4IGVuZGlmIGNvbW1lbnQgdG8gbWF0Y2ggdGhlIG9wZW5pbmcgaWZkZWYKKworMjAxMS0wMy0wOCAwMDoxNSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDoKKworICAgcmVzZXQgdGhlIGNhbndyaXRlIGZsYWcgZm9yIGV2ZXJ5IGZpbGUKKworMjAxMS0wMy0wOCAwMDoxNSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzOgorCisgICB0ZW1wb3JhcmlseSBsZWF2ZSBpbiBoZWFkZXIgZmlsZXMKKworMjAxMS0wMy0wOCAwMDoxNCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYzoKKworICAgY2hhbmdlIHRoZSB1bmlxdWUgZmlsZSBjaGVjayB0byBvbmUgdGhhdCBpcyBub3QgaW4gdGhlIG1pYmdyb3VwCisgICBkaXJlY3RvcnkKKworMjAxMS0wMy0wOCAwMDoxNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcmVhZC1vbmx5LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcmVhZC1vbmx5L1QwMTQxc25tcHYyY3NldGZhaWxfc2ltcGxlOgorCisgICBhIHRlc3QgZm9yIGVuc3VyaW5nIHRoZSBhZ2VudCByZWplY3RzIFNFVCByZXF1ZXN0cyB3aXRoCisgICAtLWVuYWJsZS1yZWFkLW9ubHkKKworMjAxMS0wMy0wOCAwMDoxNCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGU6CisKKyAgIGFkZCBiYWNrIGluIHRoZSBzdG9wYWdlbnQgY29tbWFuZAorCisyMDExLTAzLTA4IDAwOjE0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDFwZHVfdHlwZV9jbGliLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAzcGR1X3BhcnNlX2NsaWIuYzoKKworICAgdW5pdCB0ZXN0cyB3cml0ZW4gZm9yIHRoZSByZWFkLW9ubHkgc3VwcG9ydCBjb252ZXJ0ZWQgdG8gd29yaworICAgd2l0aCBvciB3aXRob3V0IHJlYWQtb25seQorCisyMDExLTAzLTA4IDAwOjEzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZToKKworICAgZG9uJ3QgcnVuIHRoZSBzZXQgdGVzdCBpZiBub193cml0ZV9zdXBwb3J0IGlzIHR1cm5lZCBvbgorCisyMDExLTAzLTA4IDAwOjEzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGU6CisKKyAgIHNraXAgaWYgbm9fd3JpdGVfc3VwcG9ydAorCisyMDExLTAzLTA4IDAwOjEzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZToKKworICAgQSBuZXcgdGVzdCB0byBjaGVjayB3aGV0aGVyIFNOTVB2MmMgU0VUcyB0byBzeXNDb250YWN0IHdvcmsgYXMKKyAgIGV4cGVjdGVkCisKKzIwMTEtMDMtMDggMDA6MTMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFueWNvbmZpZzoKKworICAgYWxsb3cgZm9yIHYyYyBTRVQgc3VwcG9ydCB0ZXN0aW5nCisKKzIwMTEtMDMtMDggMDA6MTIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6CisKKyAgIEFsbG93IGZvciBzaW5nbGUgcXVvdGVzIGZvciB2YWNtIGNvbnRleHQgbmFtZSBxdW90aW5nIHRvbworCisyMDExLTAzLTA3IDE5OjE5ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZToKKworICAgZml4IHRoZSBjb25maWd1cmUgdGVzdHMgdG8gaW5jbHVkZSB0aGUgd29yZCB0ZXN0IGluIHRoZSB0ZXN0CisKKzIwMTEtMDMtMDcgMTk6MTggIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBmaXggdGhlIGNvbmZpZ3VyZSB0ZXN0cyB0byBpbmNsdWRlIHRoZSB3b3JkIHRlc3QgaW4gdGhlIHRlc3QKKworMjAxMS0wMy0wNyAxOToxOCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzOgorCisgICBBZGRlZCBhbiBhbm5veWluZ2x5IGxvbmcgbGlzdCBvZiBleGNlcHRpb25zIHRoYXQgbmVlZHMgdG8gYmUKKyAgIGF1dG9tYXRlZAorCisyMDExLTAzLTA3IDE5OjE4ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXM6CisKKyAgIEEgcXVpY2sgcGVybCBzY3JpcHQgdG8gcmVtb3ZlIHVubmVlZGVkIGNvZGUgbW9kdWxlcyBmcm9tIHRoZQorICAgbW9kdWxlcyBkaXJlY3RvcnkKKworMjAxMS0wMy0wNyAxOToxOCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgbW9yZSBpbXByb3ZlbWVudHMgKHJlbW92ZW1lbnRzKSBmb3IgZmVhdHVyaXphdGlvbiBhbmQgcmVhZC1vbmx5CisgICBzdXBwb3J0CisKKzIwMTEtMDMtMDcgMTc6MTkgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMTk1NTM3OiBNaW5vciBiaW5hcnlfYXJyYXkgY29udGFpbmVyCisgICBzb3J0IG9wdGltaXphdGlvbgorCisyMDExLTAzLTA2IDE5OjQ3ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYzoKKworICAgVGFicyB0byBzcGFjZXMKKworMjAxMS0wMy0wNiAxMToyOCAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczoKKworICAgQ29uZmlndXJlIGNoZWNrIGZvciBnZXRob3N0bmFtZTIKKyAgIFVzZSBnZXRhZGRyaW5mbyBpZiBhdmFpbGFibGUuIE5vdyB3b3JrcyBmb3IgU29sYXJpcyAoYW5kCisgICBXaW5kb3dzPykKKworMjAxMS0wMy0wNSAxOToxNiAgbWFnZnIKKworICAgKiBhcHBzL3NubXB0ZXN0LmM6CisKKyAgIEFkZCBkcm9wcGVkIHx8J3MgZnJvbSByMjAwNzIKKworMjAxMS0wMy0wNSAxMjo1MCAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmM6CisKKyAgIENsZWFuIHVwLCBhbmQgY29zb2xpZGF0ZSByZXN1bHQgdGFibGUgcm93IGNyZWF0aW9uIGludG8gYSBuZXcKKyAgIGZ1bmN0aW9uLgorICAgU2F2ZXMgMjAwIGxpbmVzIG9mIGNvZGUsIHdpdGggKGhvcGVmdWxseSkgbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2UKKworMjAxMS0wMy0wNSAwNjoxNyAgaGFyZGFrZXIKKworICAgKiAgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9zbm1wdGVzdC5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIGRvbid0IGJ1aWxkIFNFVCByZWxhdGVkIGFwcHMgd2l0aCAtLWVuYWJsZS1yZWFkLW9ubHkKKworMjAxMS0wMy0wNSAwNjoxNiAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIGZpeCBpc3N1ZXMgd2l0aCBjb21iaW5pbmcgLS1lbmFibGUtbWluaW1hbGlzdCBhbmQKKyAgIC0tZW5hYmxlLXJlYWQtb25seQorCisyMDExLTAzLTA1IDA2OjE2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZToKKworICAgYmV0dGVyIG91dHB1dCBmb3IgZmluZGluZyBvYmplY3Qgc3ltYm9scy4KKworMjAxMS0wMy0wNCAyMTo1NiAgYmFlcm0KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDoKKworICAgbGFzdCBjb21taXQ6IGNoYW5nZXMgdG8gYWxsb3cgcGFyc2luZyBvZiBmZWF0dWVycyBmaWxlcyB0byBnZXQKKyAgIGFsbCBtaW5pbWFsaXN0IHRhZ3Mgd2hpY2ggYXJlIHRoZW4gcHJvY2Vzc2VkIGZvciByZW1vdmFsCisgICAKKyAgIHRoaXMgY29tbWl0OiBjaGFuZ2VkIGNvbW1lbnRzL3doaXRlIHNwYWNlCisKKzIwMTEtMDMtMDQgMTk6MjcgIGJhZXJtCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6CisKKyAgIGFkZGVkIG5vX3dyaXRlIHN1cHBvcnQgdG8gZXh0ZW5kLmMKKworMjAxMS0wMy0wNCAxOToyNiAgYmFlcm0KKworICAgKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmM6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2VuZGlmIGNvbW1lbnQgZm9yIHJlbW92ZSBpZmRlZiBjb2RlIHN1cHBvcnQKKworMjAxMS0wMy0wNCAxOToyNCAgYmFlcm0KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDoKKworICAgYWRkZWQgY2hhbmdlcyB0byBhbGxvdyBjb2RlIHJlbW92YWwgaW4tcGxhY2UKKyAgIChpLmUuIGRvZXMgbm90IHJlcXVpcmUgY3JlYXRpbmcgYSBuZXcgZmlsZSkKKworMjAxMS0wMy0wNCAxOToyMyAgYmFlcm0KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2lnbm9yZS5yZWdleHA6CisKKyAgIGFkZGluZyBhIGlnbm9yZS5yZWdleHAgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIHdpdGgKKyAgIHJlbW92ZWlmZGVmY29kZS5wbAorCisyMDExLTAzLTA0IDE5OjIwICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgYWRkIGEgb3V0Z29pbmcgbGluayB0byB0aGUgcGFyZW50IG1hcmtpbmcgcGFnZQorCisyMDExLTAzLTA0IDE5OjE5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgQWRkZWQgYSB3aWtpIG91dHB1dCBtb2RlCisKKzIwMTEtMDMtMDQgMTk6MTkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBOb3RlIHRoYXQgdGhlIG9yZyBvdXRwdXQgaXMgdGhlIGRlZmF1bHQgaW4gdGhlIGhlbHAgb3V0cHV0CisKIDIwMTEtMDMtMDQgMTU6MDkgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jOgpAQCAtNTk1LDYgKzMyNDY3LDQ4MCBAQAogICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMiBiaXRzJyBpbgogICAgVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBvbiBMaW51eAogCisyMDExLTAzLTA0IDE0OjQ5ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmVjbGFzc2lmaWNhdGlvbiBvZiB0aGUgcmVtYWluaW5nIGZlYXR1cmVzIGludG8gYSBoaWVyYXJjaHkKKworMjAxMS0wMy0wNCAxNDo0OSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBkb24ndCBkb3VibGUtZGVjbGFyZSBjZXJ0X3V0aWxzCisKKzIwMTEtMDMtMDQgMTQ6NDkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgorCisgICB0aGUgaXBhZGRyZXNzX2xpbnV4IHdhcyBpbmNvcnJlY3RseSBtYXJrZWQgYXMgbmVlZGluZworICAgY2VydF9maW5nZXJwcmludHMKKworMjAxMS0wMy0wNCAxNDo0OCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBwdXQgdGhlIGFnZW50X3JlZ2lzdHJ5IGZlYXR1cmUgaW4gbGlibmV0c25tcGFnZW50LgorCisyMDExLTAzLTAzIDEwOjU2ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBDSEFOR0VTOiBXaW4zMjogRGVwcmVjYXRlZCBsaWJzbm1wLmRlZiAtIGFkZCBORVRTTk1QX0lNUE9SVCB0bworICAgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluc3RlYWQgdG8gZXhwb3J0IGEgZnVuY3Rpb24gZnJvbQorICAgbmV0c25tcC5kbGwuCisKKzIwMTEtMDMtMDMgMTA6NDggIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6CisKKyAgIEFkZGVkIG1pc3NpbmcgTkVUU05NUF9JTVBPUlQgZGVjbGFyYXRpb25zLgorCisyMDExLTAzLTAzIDEwOjI0ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRlZiwgd2luMzIvbGlidWNkbWlicy9saWJ1Y2RtaWJzLmRlZjoKKworICAgUmVtb3ZlZCB0d28gb2Jzb2xldGUgV2luMzIgZmlsZXMuCisKKzIwMTEtMDMtMDMgMTA6MDkgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jOgorCisgICBUcml2aWFsIGNvbW1lbnQgZml4OiBzbm1wSVB2NkJhc2VEb21haW4uYyBjb250YWlucyBJUHY2IGJhc2UKKyAgIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIElQdjQuCisKKzIwMTEtMDMtMDIgMTk6MTAgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYjoKKworICAgQWRkZWQgc25tcHNtX3NodXRkb3duLmggdG8gdGhlIFN1YnZlcnNpb24gaWdub3JlIGxpc3QgYmVjYXVzZQorICAgaXQncyBhIGdlbmVyYXRlZCBmaWxlLgorCisyMDExLTAzLTAyIDE1OjU4ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2NvbmZpZy5oOgorCisgICBSZW1vdmVkIGFuIG9ic29sZXRlIGZpbGUuCisKKzIwMTEtMDMtMDIgMTU6NTIgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCB3aW4zMi9zbm1wc21fc2h1dGRvd24uaCwgIAorICAgICAgIHdpbjMyL3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBWaXN1YWwgU3R1ZGlvIGFmdGVyIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlCisgICAiZmVhdHVyZSIgZmVhdHVyZS4KKworMjAxMS0wMy0wMiAxNTo0OCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9zbm1wc21faW5pdC5oOgorCisgICBSZW1vdmVkIGEgbWlzbGVhZGluZyBjb21tZW50LgorCisyMDExLTAzLTAyIDA4OjQwICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBDb3JyZWN0IHRoZSBjaGVjayBvZiB3ZXRoZXIgdXNtIHNlY3VyaXR5IGlzIGVuYWJsZWQuCisgICBSZWdlbmVyYXRlIGNvbmZpZ3VyZS4KKworMjAxMS0wMy0wMiAwODozOSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZWdlbmVyYXRlCisKKzIwMTEtMDMtMDIgMDg6MjEgIG1hZ2ZyCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQWRkIG1pc3NpbmcgZGVwZW5kZW5jaWVzCisKKzIwMTEtMDMtMDIgMDc6MTkgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljCisKKzIwMTEtMDMtMDIgMDc6MTkgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9jb250YWluZXIuYzoKKworICAgU3BsaXQgdGhlIGNvbnRhaW5lcl9jb21wYXJlX2Z1bmN0aW9ucyBmZWF0dXJlIGludG8KKyAgIGNvbnRhaW5lcl9jb21wYXJlX21lbSwKKyAgIGNvbnRhaW5lcl9jb21wYXJlX2xvbmcsIGNvbnRhaW5lcl9jb21wYXJlX3Vsb25nLAorICAgY29udGFpbmVyX2NvbXBhcmVfaW50MzIgYW5kCisgICBjb250YWluZXJfY29tcGFyZV91aW50MzIKKyAgIFVuaWZ5IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvbXBhcmUgZnVuY3Rpb25zIGZ1cnRoZXIuCisKKzIwMTEtMDMtMDIgMDc6MTkgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9jb250YWluZXIuYzoKKworICAgQ2hhbmdlIHRoZSBzcGVsbGluZyBvZiB0aGUgY29udGFpbmVyX2NvbXBhcmVfY3N0cmluZyBmZWF0dXJlIHRvCisgICBjb250YWluZXJfbmNvbXBhcmVfY3N0cmluZyBhcyB0aGF0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzCisgICBndWFyZGVkIGJ5IHRoYXQKKyAgIGF0dHJpYnV0ZS4KKworMjAxMS0wMy0wMiAwNzoxNyAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgQWRkIHRoZSBtaXNzaW5nIHJlcGxhY2VtZW50IG1hY3JvIGZvciBzbm1wX2luaXRfc3RhdGlzdGljcworCisyMDExLTAzLTAyIDA3OjE2ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkgdGFrZXMgdHdvIGFyZ3VtZW50cyBzbyBsZXQgdGhlCisgICByZXBsYWNlbWVudCBtYWNybworICAgdGFrZSB0d28gYXJndW1lbnRzIGFzIHdlbGwuCisKKzIwMTEtMDItMjcgMTM6NTUgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jOgorCisgICBGaXggdHlwbyBpbiByMTk5OTAKKworMjAxMS0wMi0yNiAxMDo1MyAgbWFnZnIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2s6CisKKyAgIFJlbW92ZSBsaW5lcyBzdGFydGluZyB3aXRoICNkZWZpbmUgaW4gdGhlIG91dHB1dCBvZiB0aGUKKyAgIHByZXByb2Nlc3NvcgorICAgV2hlbiBnY2MgLUUgaXMgY2FsbGVkIHdpdGggLWdnZGIzIChvciAtZEQpIHRoZW4gYWxsIHRoZSBtYWNybworICAgZGVmaW5pdGlvbnMgYXJlCisgICBwYXNzZWQgdGhyb3VnaCB0aGUgcHJlcHJvY2Vzc29yIGFuZCB0aGF0IG1lc3NlcyB1cCBvdXIKKyAgIHByb2Nlc3NpbmcuCisKKzIwMTEtMDItMjYgMTA6NTIgIG1hZ2ZyCisKKyAgICogTWFrZWZpbGUucnVsZXM6CisKKyAgIFB1dCB0aGUgZ2VuZXJhdGVkIGZpbGUgaW4gdGhlIGJ1aWxkIHRyZWUsIG5vdCB0aGUgc291cmNlIHRyZWUuCisKKzIwMTEtMDItMjYgMDE6MjMgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgbW92ZWQgYSBidW5jaCBvZiBmZWF0dXJlcyBpbnRvIHRoZSBsaWJuZXRzbm1wbWlicyBmZWF0dXJlIHNldC4KKworMjAxMS0wMi0yNiAwMToyMiAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF9pbmRleC5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvYWdlbnRfdHJhcC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jLCAgIAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0cywgc25tcGxpYi9taWIuYzoKKworICAgY2xhc3NpZmllZCBsaWJuZXRzbm1wYWdlbnQgZmVhdHVyZXMKKworMjAxMS0wMi0yNiAwMToyMSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGxpYnJhcmllcyAoc25tcGxpYiBmaXJzdCkKKworMjAxMS0wMi0yNiAwMToyMSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgb3V0cHV0IGNsZWFudXAgYW5kIGFkZGVkIGFnZW50LW1pYnMgYW5kIGxvZ2dpbmcgb3B0aW9ucworCisyMDExLTAyLTI2IDAxOjIxICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBhZGQgYSBkZWZhdWx0IHNldCBvZiBhcmd1bWVudHMKKyAgIGNhbGN1bGF0ZSByZXN1bHRpbmcgc2l6ZXMKKworMjAxMS0wMi0yNiAwMToyMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBBZGRlZCBhIG1pc3NpbmcgOworCisyMDExLTAyLTI2IDAxOjIwICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBwcmVmaXggdGhlIG91dHB1dCBmaWxlcyB3aXRoIGEgbnVtYmVyIHRvIGluZGljYXRlIG9yZGVyCisKKzIwMTEtMDItMjYgMDE6MjAgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIHNhdmUgdGhlIHJlc3VsdHMgb2YgdGhlIHN5c3RlbSBleGVjdXRpb25zCisKKzIwMTEtMDItMjYgMDE6MjAgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGVuYWJsZSBidWlsZGluZyBvZiB0aGUgcmVzdWx0aW5nIGNvbWJpbmF0aW9ucworICAgQWRkIGEgLW4gZmxhZyBmb3IgZHJ5LXJ1bnMKKworMjAxMS0wMi0yNiAwMToyMCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgZW5hYmxlIHRoZSAtdCB0YWcgZm9yIGxpbWl0aW5nIHR5cGVzCisKKzIwMTEtMDItMjYgMDE6MTkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIEFkZGVkIGFyZ3VtZW50IHBhcnNpbmcgYW5kIGFyZ3VtZW50cyBmb3Igc2VsZWN0aW5nIGFuZCBsaXN0aW5nCisgICB0eXBlcworCisyMDExLTAyLTI2IDAxOjE5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBnZW5lcmF0ZSBjb25maWd1cmUgc2NyaXB0IGFyZ3VtZW50cyBmcm9tIHNwZWNzCisKKzIwMTEtMDItMjYgMDE6MTkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGFkZGVkIGEgYnVuY2ggb2YgbmV3IGZlYXR1cmUgb3B0aW9ucyBhbmQgY2xlYW5lZCB1cCBhIGJpdAorCisyMDExLTAyLTI2IDAxOjE5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBhZGRlZCBhIG5ldyAobm90IHlldCB3b3JraW5nKSBzY3JpcHQgdG8gdGVzdCBzaXppbmcgb2YgdmFyaW91cworICAgYXJndW1lbnQgc2V0cworCisyMDExLTAyLTI2IDAwOjI2ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CisKKyAgIFNpbXBsaWZ5IHRoZSBjb2RlLiBVbmlmeSBzb21lIGRlYnVnIGxvZ3MuCisKKzIwMTEtMDItMjYgMDA6MTkgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKKworICAgUmVkdWNlIHRoZSBzY29wZSBvZiBhIGZldyB2YXJpYWJsZXMKKworMjAxMS0wMi0yNiAwMDoxNiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgorCisgICBSZW1vdmUgc29tZSB1bnVzZWQgaW5jbHVkZXMuCisKKzIwMTEtMDItMjYgMDA6MTUgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBpbml0aWFsaXplL3VuaW5pdGlhbGl6ZSBtb2R1bGVzIHdpdGggNjQKKyAgIGNoYXJhY3RlciBuYW1lcyBhbmQgbm90IHN1ZmZlciB3aWxkIHdyaXRlcy4KKworMjAxMS0wMi0yNiAwMDoxMiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgorCisgICBDb2RlIHJlc3RydWN0dXJpbmcgLSBwdXQgdGhlIG1hbmFnZWQgcm91dGluZXMgYmVmb3JlIHRoZQorICAgbWFuYWdtZW50IGNvZGUuCisKKzIwMTEtMDItMjYgMDA6MTEgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaDoKKworICAgQ0hBTkdFUzogbGlibmV0c25tcG1pYnM6IE1ha2UgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgZGxtb2QgbW9kdWxlCisgICB0aGF0IGRvbid0IGhhdmUgdG8gYmUgcHVibGljIHN0YXRpYworCisyMDExLTAyLTI2IDAwOjA3ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CisKKyAgIFJlbmFtZSBkZWluaXRfZGxtb2QgdG8gc2h1dGRvd25fZGxtb2QgYXMgdGhhdCBpcyB3aGF0IGl0IHJlYWxseQorICAgaXMgYWJvdXQuCisKKzIwMTEtMDItMjUgMTg6MjQgIGJhZXJtCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYzoKKworICAgYWRkaW5nIG1pbmltYWxpc3QgaWZkZWZzIHRvIG5ldC1zbm1wLXZhY20gbWliCisKKzIwMTEtMDItMjUgMTY6MDkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBwcm9wZXJseSBoYW5kbGUgdHdpbiBjaGlsZHJlbjsgYWxzbyBzb3J0IHRoZSBjaGlsZCBsaXN0CisgICBhbHBoYWJldGljYWxseS4KKworMjAxMS0wMi0yNSAxNjowOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBJIHN1cHBvc2UgbG9nZ2luZyBzaG91bGQgcHJvYmFibHkgZGVmYXVsdCB0byBiZWluZyBhIHdhbnRlZAorICAgb3B0aW9uIDotKQorCisyMDExLTAyLTI1IDE2OjA5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgb3JnLWxpbmsgdGhlIGZpbGVzIGluIHRoZSBvdXRwdXQKKworMjAxMS0wMi0yNSAxNjowOCAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUucnVsZXMsIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sICAgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2ssIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIG1ha2UgdGhlIGZlYXR1cmVzLWNoZWNrIHNjcmlwdCB0cmFjayB0aGUgZnVsbCBzb3VyY2UgcGF0aAorCisyMDExLTAyLTI1IDE2OjA4ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgY2hhbmdlIHRoZSBmdW5jdGlvbiBuYW1lcyB0byBtYXRjaCB0aGF0IGl0J3MgcHJpbnRpbmcgdG8gb3JnLW1vZGUKKyAgIGF0IHRoZSBtb21lbnQuCisKKzIwMTEtMDItMjUgMTY6MDggIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvZmlsZV91dGlscy5jLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL29pZF9zdGFzaC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIGxhc3Qgb2YgdGhlIGZlYXR1cmUgY2xhc3NpZmljYXRpb24gaW4gbGlibmV0c25tcAorCisyMDExLTAyLTI1IDE2OjA3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sY2RfdGltZS5jLCBzbm1wbGliL3NjYXBpLmM6CisKKyAgIG1ha2UgdGhlIHVzbV9zdXBwb3J0IHV0aWxpdGllcyBzZWxmLWRlY2xhcmUgdGhlbXNlbHZlcyBhcworICAgY2hpbGRyZW4gdG8KKyAgIG1ha2Ugc3VyZSB0aGV5J3JlIHByb3Blcmx5IGluY2x1ZGVkIGR1cmluZyBkZXBlbmRlbmN5IG9yZGVyaW5nCisKKzIwMTEtMDItMjUgMTY6MDcgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvY2FsbGJhY2suYywgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jaGVja192YXJiaW5kLmMsIAorICAgICAgICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2RhdGFfbGlzdC5jLCAgIAorICAgICAgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCAgIAorICAgICAgc25tcGxpYi9maWxlX3V0aWxzLmMsIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIHN1cGVyc3RydWN0dXJhbGl6YXRpb25pemluZyB0aGUgZmVhdHVyZXMKKworMjAxMS0wMi0yNSAxNjowNyAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NubXAtdGMuYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAgCisgICAgICAgc25tcGxpYi9zbm1wX2VudW0uYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3N5c3RlbS5jLCAKKyAgICAgICAgc25tcGxpYi90ZXh0X3V0aWxzLmMsIHNubXBsaWIvdG9vbHMuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3VjZF9jb21wYXQuYzoKKworICAgc2lnbmlmaWNhbnQgcGFyZW50L2NoaWxkIGZlYXR1cmUgY2xhc3NpZmljYXRpb24KKworMjAxMS0wMi0yNSAxNjowNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBjbGFzc2lmeSBhIGZldyBjb21wb25lbnRzIGludG8gYSB0b3AtbGV2ZWwgbGlibmV0c25tcCBjb21wb25lbnQKKworMjAxMS0wMi0yNSAxNjowNiAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xjZF90aW1lLmMsIHNubXBsaWIvc2NhcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBzdHJ1Y3R1cml6ZSB0aGUgdXNtIGZlYXR1cmVzCisKKzIwMTEtMDItMjUgMTY6MDYgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYywgc25tcGxpYi9jb250YWluZXJfbnVsbC5jLCAgIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgc3RydWN0dXJlIHRoZSBjb250YWluZXIgZmVhdHVyZXMgaW50byBhIGhpZXJhcmNoeQorCisyMDExLTAyLTI1IDE2OjA1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIGdyb3VwIHRoZSBsb2dnaW5nIGhhbmRsZXJzIHVuZGVyIGEgcGFyZW50IGZlYXR1cmUKKworMjAxMS0wMi0yNSAxNjowNSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIGZpeCB0aGUgZXhwZWN0IGFyZ3VtZW50IGNvdW50CisKKzIwMTEtMDItMjUgMTY6MDUgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBmaXggdGhlIG5hbWUgb2YgdGhlIGV4cGVjdGVkIGlucHV0IGZpbGUKKworMjAxMS0wMi0yNSAxNjowNSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIGFyZ3VtZW50IHBhcnNpbmcgYW5kIHVzYWdlKCkgb3V0cHV0CisKKzIwMTEtMDItMjUgMTY6MDQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgc25tcGxpYi9vaWRfc3Rhc2guYzoKKworICAgLSBhZGRlZCB0d28gb2lkX3N0YXNoIGZ1bmN0aW9ucyBhcyBpbmRpdmlkdWFsIGZlYXR1cmVzCisgICAtIGNsZWFuZWQgdXAgc29tZSB3YXJuaW5ncyBpbiB0aGUgdGFibGVfaXRlcmF0b3IgY29kZQorCiAyMDExLTAyLTI1IDEyOjU1ICBkdHMxMgogCiAgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgpAQCAtNjEyLDYgKzMyOTU4LDE2MSBAQAogCiAgICBBdm9pZCBhIHBvc3NpYmxlIGNyYXNoIGlmIHRoZSBlbmdpbmVJRCBpcyBub3QgYXZhaWxhYmxlIG9yIHNldC4KIAorMjAxMS0wMi0yNSAwMDo0MCAgYmFlcm0KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmg6CisKKyAgIGFkZGluZyBpZmRlZiBjb2RlIGZvciBtaW5pbWFsaXN0IHN1cHBvcnQgb2YgZGlmZm1hbiBtaWIKKworMjAxMS0wMi0yNCAxOToyMSAgYmFlcm0KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmg6CisKKyAgIEFkZGluZyBtaW5pbWFsaXN0IGlmZGVmcyB0byBob3N0IHJlc291cmNlIG1pYgorCisyMDExLTAyLTI0IDA1OjQ2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgc25tcGxpYi9kYXRhX2xpc3QuYzoKKworICAgbWFyayB0aGUgZGF0YV9saXN0IGZ1bmN0aW9uIHRoYXQncyBvbmx5IHVzZWQgaW4gc3RhY2hfY2FjaGluZyBhcworICAgYSBmZWF0dXJlCisKKzIwMTEtMDItMjQgMDU6NDYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jOgorCisgICB3aG9vcHMuCisKKzIwMTEtMDItMjQgMDU6NDYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jOgorCisgICBtb3JlIG1pc3Npbmcgc3Rhc2ggcmVmZXJlbmNlcworCisyMDExLTAyLTI0IDA1OjQ1ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYzoKKworICAgaWZkZWZlZC9mZWF0dXJlZCBvdXQgYSBtaXNzaW5nIHN0YXNoX2NhY2hlIHNlY3Rpb24KKworMjAxMS0wMi0yNCAwNTo0NSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CisKKyAgIG1ha2UgdGhlIHByZWZpeF9pbmZvIG1vcmUgaGllcmFyY2hpY2FsIGFuZCBzdWItZmVhdHVyZSB0aGUgdW51c2VkCisgICBvbmUKKworMjAxMS0wMi0yNCAwNTo0NSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGU6CisKKyAgIGRvIGluY2x1ZGUgdGhlIHBlcmwvcHl0aG9uIGNvZGUgd2hlbiBzZWFyY2hpbmcgZm9yIGZpbGVzCisKKzIwMTEtMDItMjQgMDU6NDUgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBtYWtlIHRoZSBzZW1pLXVzZWQgdGFibGVfdGRhdGEgZnVuY3Rpb25zIGNoaWxkcmVuIG9mCisgICB0YWJsZV90ZGF0YV9hbGwKKyAgIGluc3RlYWQgb2YganVzdCB0YWJsZV90ZGF0YQorCisyMDExLTAyLTIzIDIyOjAwICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgQ29ycmVjdCB0eXBvCisKKzIwMTEtMDItMjMgMjE6NTQgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9wYXJzZS5jOgorCisgICBDb3JyZWN0IHR5cG8KKworMjAxMS0wMi0yMyAyMToxMCAgbmJhCisKKyAgICogYWdlbnQvc25tcF92YXJzLmM6CisKKyAgIHByb3BlciBpbmNsdWRlIG9mIHByb3RvdHlwZQorCisyMDExLTAyLTIzIDIxOjA3ICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBjb21wYXQgc29tZSBmZWF0dXJlIGhlYWRlciBjaGlja2VuIGFuZCBlZ2cgcHJvYmxlbXMKKworMjAxMS0wMi0yMyAxNToyNyAgbmJhCisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIHVuc2lnbmVkIGp1Z2dsaW5nIHRvIHJlbW92ZSB3YXJuaW5ncworCisyMDExLTAyLTIzIDE1OjIzICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIHVuc2lnbmVkIGp1Z2dsaW5nIHRvIHJlbW92ZSB3YXJuaW5ncworCisyMDExLTAyLTIzIDE1OjIwICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIuaDoKKworICAgRW5hYmxlIChwcm9iYWJseSBmb3Jnb3R0ZW4pIGlwQWRkcmVzc1ByZWZpeFRhYmxlCisKKzIwMTEtMDItMjMgMTQ6MzAgIGhhcmRha2VyCisKKyAgICogIGxvY2FsL21pbmltYWxpc3QsIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjaywgICAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jcywgICAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1yZW1vdmUsICAgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGUsICAgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbDoKKworICAgYWRkZWQgb3RoZXIgbWlzc2luZyAnbmV3JyBmaWxlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG1pbmltYWxpc3QKKyAgIHBhdGNoIGZpbGUKKworMjAxMS0wMi0yMyAwOTo1NCAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYzoKKworICAgTG9hZGluZyBJUHY2IGRhdGEgaXMgYSBuby1ubyB3aGVuIElQdjYgbm90IGVuYWJsZWQKKwogMjAxMS0wMi0yMyAwOTozNiAgbmJhCiAKICAgICogYXBwcy9zbm1wdGFibGUuYzoKQEAgLTYyNSw0NCArMzMxMjYsMzQ3IEBACiAKICAgIEZyZWVCU0QgOCBzdXBwb3J0CiAKKzIwMTEtMDItMjMgMDE6NDggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oOgorCisgICBhZGRlZCBtaXNzaW5nIG5ldC1zbm1wLWZlYXR1cmVzLmgKKworMjAxMS0wMi0yMyAwMDowMSAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIE1ha2VmaWxlLnJ1bGVzLCBNYWtlZmlsZS50b3AsIGFnZW50L01ha2VmaWxlLmluLCAgIAorICAgICAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF9pbmRleC5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgICAKKyAgICAgIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvbXVsdGlwbGV4ZXIuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zY2FsYXIuYywgYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgIAorICAgICAgIGFnZW50L2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfcm93LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9kYXJ3aW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmgsIAorICAgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGFnZW50L3NubXBkLmMsIGFwcHMvTWFrZWZpbGUuaW4sICAgCisgICAgICBhcHBzL2FnZW50eHRyYXAuYywgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBhcHBzL3NubXBuZXRzdGF0L25ldHN0YXQuaCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvcm91dGUuYywgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFuc2xhdGUuYywgIAorICAgICAgIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9zcWwuYywgY29uZmlndXJlLCBjb25maWd1cmUuYWMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAKKyAgICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlcywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHBlcmwvT0lEL09JRC54cywgICAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9jYWxsYmFjay5jLCBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgCisgICAgICAgIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYywgc25tcGxpYi9jb250YWluZXJfbnVsbC5jLCAgIAorICAgICAgc25tcGxpYi9kYXRhX2xpc3QuYywgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsICAgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jLCBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgICAKKyAgICAgIHNubXBsaWIvZmlsZV91dGlscy5jLCBzbm1wbGliL2ludDY0LmMsIHNubXBsaWIva2V5dG9vbHMuYywgICAKKyAgICAgIHNubXBsaWIvbGNkX3RpbWUuYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9vaWRfc3Rhc2guYywgICAKKyAgICAgIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NjYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXAtdGMuYywgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsICAgCisgICAgICBzbm1wbGliL3NubXBfZW51bS5jLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9zZWNtb2QuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wa3NtLmMsIHNubXBsaWIvc25tcHRzbS5jLCBzbm1wbGliL3NubXB1c20uYywgICAKKyAgICAgIHNubXBsaWIvc25tcHYzLmMsIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdGV4dF91dGlscy5jLCAgIAorICAgICAgc25tcGxpYi90b29scy5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi91Y2RfY29tcGF0LmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M2NvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdmFjbWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlOgorCisgICBORVdTOiBwYWNrYWdpbmc6IEVuYWJsZSBtaWNyby1hbmQtbWFjcm8tZmVhdHVyZSBtYW5hZ2VtZW50IHdpdGhpbgorICAgTmV0LVNOTVA7IHRoaXMgYWRkcyBhIG51bWJlciBvZiBuZXcgZmxhZ3MgdG8gY29uZmlndXJlCisgICAoLS1lbmFibGUtbWluaW1hbGlzdCBhbmQgLS1lbmFibGUtcmVhZC1vbmx5KS4gVGhlc2UgY2hhbmdlcyBhcmUKKyAgIGRlc2lnbmVkIHRvIHJlbW92ZSBtdWNoIG9mIHRoZSBpbmxpbmUgY29kZSB0aGF0IGlzbid0IGFsd2F5cworICAgbmVjZXNzYXJ5IG9yIGRlc2lyZWQuIFNjcmlwdHMgZXhpc3QgKGFuZCB3aWxsIGJlIGltcHJvdmVkKSB0bworICAgc3RpcCBvdXQgdW51c2VkIGNvbXBvbmVudHMgZnJvbSB0aGUgY29kZSBlbnRpcmVseSB0byBlbmFibGUgYQorICAgc2hvcnRlciByZXZpZXcgcHJvY2VzcyBmb3IgdXBncmFkaW5nIHRvIG5ldyByZWxlYXNlcy4gVGhpcyB3b3JrCisgICB3YXMgZG9uZSBieSBXZXMgSGFyZGFrZXIgYW5kIE1pY2hhZWwgQmFlciBmcm9tIFNQQVJUQSwgSW5jLiBidXQKKyAgIGlzIGJlaW5nIGNoZWNrZWQgaW4gYXMgYSBsYXJnZSBwYXRjaCBzaW5jZSBjb252ZXJ0aW5nIHRoZSBtaWNybworICAgcGF0Y2hlcyBmcm9tIGdpdCB0byBzdm4gdHVyZW5kIG91dCB0byBiZSBpbXBvc3NpYmxlCisKKzIwMTEtMDItMjIgMjM6NTUgIGhhcmRha2VyCisKKyAgICogRkFROgorCisgICB1c2UgdGhlIHdpa2kgVVJMIGluc3RlYWQgb2YgdGhlIHR1dG9yaWFsLTUgVVJMIGZvciB0aGUgc25tcHRyYXAKKyAgIHR1dG9yaWFsCisKKzIwMTEtMDItMjEgMjI6NDAgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYzoKKworICAgcHJvcGVyIHByb2Nlc3Mgc3RhdHVzIHZhbHVlcyBmb3IgbmV0YnNkCisKKzIwMTEtMDItMjEgMjI6MzkgIG5iYQorCisgICAqIHNubXBsaWIvc2NhcGkuYzoKKworICAgY29uZGl0aW9uYWxpemUgdmFyaWFibGUKKworMjAxMS0wMi0yMSAyMjoyMCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmg6CisKKyAgIHRjcC1taWIvdWRwLW1pYiBzdXBwb3J0IGZvciB0aGUgKmJzZHMKKworMjAxMS0wMi0yMSAyMjoxNiAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIHRjcC1taWIvdWRwLW1pYiBzdXBwb3J0IGZvciB0aGUgKmJzZHMKKworMjAxMS0wMi0yMSAyMjowNSAgbmJhCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgUHJvcGVybHkgZW5kIGRlYnVnIG1lc3NhZ2Ugd2l0aCBuZXdsaW5lCisKKzIwMTEtMDItMjEgMjI6MDQgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jOgorCisgICByZW1vdmUgdmFyIHRoYXQgc2hhZG93cyB0aGUgdXNlZnVsIG9uZQorCisyMDExLTAyLTIxIDIyOjAyICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmM6CisKKyAgIG1ham9yIGZpZGRsaW5nIHRvIGdldCB0aGluZ3Mgd29ya2luZyBmb3Igb3BlbmJzZCB0b28uIFRoaXMgc2hvdWxkCisgICByZWFsbHkgYmUgcmV3b3JrZWQgdG8gdXNlIHRoZSB0Y3AtbWliL3VkcC1taWIvZGF0YV9hY2Nlc3MKKworMjAxMS0wMi0yMSAyMTo1OSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYzoKKworICAgZml4IHRjcCBzdGF0ZXMgZm9yIGRyYWdvbmZseWJzZAorCisyMDExLTAyLTIxIDIxOjU3ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS5oOgorCisgICBlbmFibGUgbmV3IHRjcC91ZHAgbWlicyBmb3Igc29sYXJpcworCisyMDExLTAyLTIxIDIxOjUzICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmM6CisKKyAgIERvIG5vdCB1c2UgYzk5CisKIDIwMTEtMDItMjEgMTk6MDggIGhhcmRha2VyCiAKICAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CiAKICAgIFVwZGF0ZWQgY29tbWVudCBhYm91dCB3aGVyZSBtYWtlcmVsZWFzZSBjb21lcyBmcm9tIChub3cgZ2l0aHViKQogCi0yMDExLTAyLTIxIDExOjE0ICBidmFzc2NoZQotCi0gICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgotCi0gICBCYWNrcG9ydGVkIHIxOTQ1NCBmcm9tIHRoZSB0cnVuayBhbmQgdGhlcmVieSBmaXhlZCB0aGlzIFZhbGdyaW5kCi0gICBjb21wbGFpbnQ6Ci0gICAKLSAgID09NjI4Nz09IEludmFsaWQgcmVhZCBvZiBzaXplIDgKLSAgID09NjI4Nz09IGF0IDB4NEU2Q0NBRTogbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQKLSAgICh0YWJsZV9kYXRhc2V0LmM6MTg2KQotICAgPT02Mjg3PT0gYnkgMHg1MTIxOTc0OiBzaHV0ZG93bl9ub3RpZmljYXRpb25fbG9nCi0gICAobm90aWZpY2F0aW9uX2xvZy5jOjU2NCkKLSAgID09NjI4Nz09IGJ5IDB4NTE5NDFEQjogX3NodXRkb3duX21pYl9tb2R1bGVzCi0gICAobWliX21vZHVsZV9zaHV0ZG93bi5oOjMyKQotICAgPT02Mjg3PT0gYnkgMHg1NEIxNEY0OiBzbm1wX2NhbGxfY2FsbGJhY2tzIChjYWxsYmFjay5jOjM0NCkKLSAgID09NjI4Nz09IGJ5IDB4NTQ4QjU4Qjogc25tcF9zaHV0ZG93biAoc25tcF9hcGkuYzo4NjIpCi0gICA9PTYyODc9PSBieSAweDQwNEMwNjogbWFpbiAoc25tcGQuYzoxMDYwKQotICAgPT02Mjg3PT0gQWRkcmVzcyAweDY4NmYzMTggaXMgMjQgYnl0ZXMgaW5zaWRlIGEgYmxvY2sgb2Ygc2l6ZSA0MAotICAgZnJlZSdkCi0gICA9PTYyODc9PSBhdCAweDRBMDYwRTA6IGZyZWUgKHZnX3JlcGxhY2VfbWFsbG9jLmM6MzY2KQotICAgPT02Mjg3PT0gYnkgMHg0RTZBQjE2OiBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlCi0gICAodGFibGVfZGF0YS5jOjMyMCkKLSAgID09NjI4Nz09IGJ5IDB4NEU2Q0M4NDogbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQKLSAgICh0YWJsZV9kYXRhc2V0LmM6MTgwKQotICAgPT02Mjg3PT0gYnkgMHg1MTIxOTc0OiBzaHV0ZG93bl9ub3RpZmljYXRpb25fbG9nCi0gICAobm90aWZpY2F0aW9uX2xvZy5jOjU2NCkKLSAgID09NjI4Nz09IGJ5IDB4NTE5NDFEQjogX3NodXRkb3duX21pYl9tb2R1bGVzCi0gICAobWliX21vZHVsZV9zaHV0ZG93bi5oOjMyKQotICAgPT02Mjg3PT0gYnkgMHg1NEIxNEY0OiBzbm1wX2NhbGxfY2FsbGJhY2tzIChjYWxsYmFjay5jOjM0NCkKLSAgID09NjI4Nz09IGJ5IDB4NTQ4QjU4Qjogc25tcF9zaHV0ZG93biAoc25tcF9hcGkuYzo4NjIpCi0gICA9PTYyODc9PSBieSAweDQwNEMwNjogbWFpbiAoc25tcGQuYzoxMDYwKQotCiAyMDExLTAyLTIwIDA5OjI0ICBidmFzc2NoZQogCiAgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKQEAgLTY3MSw2ICszMzQ3NSw2MSBAQAogICAgVURQIHNvY2tldAogICAgKEZpeGVzIGEgYnVnIGludHJvZHVjZWQgaW4gcjE5NTExLikKIAorMjAxMS0wMi0xOCAxNDo0MyAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oLCBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgQ0hBTkdFUzogc25tcGQ6IHJld29ya2VkIGhyU3RvcmFnZVRhYmxlIHRvIHN1cHBvcnQgbGFyZ2UKKyAgIGZpbGVzeXN0ZW1zLgorICAgCisgICBUaGUgaHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzIGRvZXMgbm90IHJlcG9ydCByZWFsIGFsbG9jYXRpb24gdW5pdAorICAgc2l6ZSwKKyAgIGJ1dCBzb21lIGNhbGN1bGF0ZWQgdmFsdWUgc28gaHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzICoKKyAgIGhyU3RvcmFnZVNpemUKKyAgIGdpdmVzIHJlYWwgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbS4KKyAgIAorICAgVGhpcyBjYWxjdWxhdGlvbiBoYXBwZW5zIG9ubHkgd2hlbiBoclN0b3JhZ2VTaXplIGlzIHRvbyBzbWFsbAorICAgKDMyYml0cykKKyAgIGZvciBmaWxlc3lzdGVtIHNpemUsIGUuZy4gZmlsZXN5c3RlbXMgbGFyZ2VyIHRoYW4gOFRCIHdpdGggNDA5NgorICAgYnl0ZXMKKyAgIGJsb2NrIHNpemUuCisgICAKKyAgIFRoaXMgY2FsY3VsYXRpb24gY2FuIGJlIHR1cm5lZCBvZmYgYnkgJ3JlYWxTdG9yYWdlVW5pdHMnIGNvbmZpZworICAgb3B0aW9uLgorCisyMDExLTAyLTE4IDE0OjI5ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oOgorCisgICBBZGQgSkZTIGFuZCBYRlMgdG8gbGlzdCBvZiBrbm93biBmaWxlc3VzdGVtcworCisyMDExLTAyLTE3IDExOjI4ICBqc2FmcmFuZWsKKworICAgKiBsb2NhbC9zbm1wLWJyaWRnZS1taWI6CisKKyAgIEZpeGVkIHNubXAtYnJpZGdlLW1pYiBpbiBzdGFuZGFsb25lIChhZ2VudHgpIHZlcnNpb24uCisgICBEb24ndCBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBpbnNpZGUgYmxvY2suIFBhdGNoIHByb3ZpZGVkIGJ5CisgICBKZW5zIE9zdGVya2FtcC4KKworMjAxMS0wMi0xNiAxNDo1NiAganNhZnJhbmVrCisKKyAgICogbG9jYWwvc25tcC1icmlkZ2UtbWliOgorCisgICBGaXhlZCBzbm1wLWJyaWRnZS1taWIgd2hlbiB3b3JraW5nIGluIHRoZSBlbWJlZGRlZCBwZXJsLgorCisyMDExLTAyLTE2IDEzOjE2ICBqc2FmcmFuZWsKKworICAgKiBsb2NhbC9zbm1wLWJyaWRnZS1taWI6CisKKyAgIEZpeGVkIEdFVE5FWFQgcHJvY2Vzc2luZyBpbiBzbm1wLWJyaWRnZS1taWIuCisKIDIwMTEtMDItMTUgMjI6MjQgIG5iYQogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmM6CkBAIC02ODMsMTIgKzMzNTQyLDI0IEBACiAKICAgIHJlbW92ZSByZWR1bmRhbnQgaW5jbHVkZXMKIAotMjAxMS0wMi0xNSAyMTo0OCAgbmJhCisyMDExLTAyLTE1IDIxOjQ2ICBuYmEKIAotICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisgICAqIGNvbmZpZ3VyZToKIAogICAgcmVydW4gYXV0b2hlYWRlci9hdXRvY29uZgogCisyMDExLTAyLTE1IDIxOjMzICBuYmEKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgaW5jbHVkZSBzeXMvdHlwZXMuaCBiZWZvcmUgc3lzL3NvY2tldC5oCisKKzIwMTEtMDItMTUgMjE6MjYgIG5iYQorCisgICAqIG00L25ldHNubXBfc2VhcmNoX2xpYnMubTQ6CisKKyAgIFRvbyBtdWNoIHF1b3RpbmcgaXMgYmFkCisKIDIwMTEtMDItMTUgMjE6MTEgIG5iYQogCiAgICAqICBhZ2VudC9taWJncm91cC9taWJJSS5oLCBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsICAgCkBAIC03MTAsNiArMzM1ODEsMzggQEAKIAogICAgRmlsdGVyIElQdjYgZW50cmllcyBmcm9tIElQdjQgdGFibGUKIAorMjAxMS0wMi0xNSAyMDo0MiAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYzoKKworICAgUHJvcGVyIHVzZSBvZiBnZXRwcm9jMiBhbmQgZHJhZ29uZmx5IHN1cHBvcnQKKworMjAxMS0wMi0xNSAyMDo0MSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYzoKKworICAgZ2V0dmZzc3RhdCBpcyBvbmx5IGZvciBOZXRCU0QKKworMjAxMS0wMi0xNSAyMDozOSAgbmJhCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIERldGVjdCBuZWVkIGZvciAtbGt2bSBpbiBwcm9wZXIgdGltZQorCisyMDExLTAyLTE1IDE5OjQyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIHJlbW92ZSB0aGUgc3RhdGVtZW50IGFib3V0IGVuYWJsaW5nIHN0ZGVyciBieSBkZWZhdWx0LgorCisyMDExLTAyLTE1IDE5OjQyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jOgorCisgICByZW1vdmUgMyBmdW5jdGlvbnMgdGhhdCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBoYXZlIHBvc3NpYmx5IG5ldmVyCisgICBiZWVuIHVzZWQKKwogMjAxMS0wMi0xNCAxNDozOCAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9zbm1wZC5jOgpAQCAtNzM4LDYgKzMzNjQxLDE5IEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzE1MjQxMjogSGFuZGxlIChhbmQgcmVwb3J0KSBwcm9ibGVtcwogICAgcmVhZGluZyAvcHJvYy92bXN0YXQKIAorMjAxMS0wMi0wOSAwNzozNCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg6CisKKyAgIEJ1aWxkaW5nIERMTCBhbmQgUGVybCBtb2R1bGVzIHdpdGggd2luMzIvYnVpbGQuYmF0IHdvcmtzIGFnYWluLgorCisyMDExLTAyLTA4IDE5OjM4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oOgorCisgICBSZW1vdmUgdGhlIGZ1bmN0aW9ucyBtYXJrZWQgYXMgZGVwcmVjYXRlZCBhbmQgc2FmZSBmb3IgcmVtb3ZhbCBpbgorICAgNS42LgorCiAyMDExLTAyLTA4IDE3OjQxICBoYXJkYWtlcgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzLCBwZXJsL2FnZW50L2FnZW50LnBtOgpAQCAtNzUzLDYgKzMzNjY5LDMxIEBACiAgICBDSEFOR0VTOiBzbm1wZDogRml4IGEgc3RybGVuIGNhbGN1bGF0aW9uIGFzIHBvaW50ZWQgb3V0IGJ5CiAgICBLb25zdGFudGluIEJheWRhcm92CiAKKzIwMTEtMDItMDcgMjA6MDcgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZjoKKworICAgZG9jdW1lbnQgdGhlIDMgbmV3IFNTSCBjb25maWcgdG9rZW5zCisKKzIwMTEtMDItMDcgMjA6MDcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYzoKKworICAgQ0hBTkdFUzogbGlibmV0c25tcDogbWFkZSB0aGUgU1NIIHRyYW5zcG9ydCBjb25maWd1cmFibGUgYXMgaXQKKyAgIHNob3VsZCBiZS4KKworMjAxMS0wMi0wNyAyMDowNyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oOgorCisgICBBZGRlZCBkZWZhdWx0X3N0b3JlIHN0cmluZ3MgZm9yIHNzaDogdXNlcm5hbWUsIHB1YmtleSwgcHJpdmtleQorCisyMDExLTAyLTA2IDA2OjM0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYzoKKworICAgU2ltcGxpZnkgdGhlIGNvbnRyb2wgZmxvdyB0byBhbGxvdyBmb3IgbW9yZSBvcHRpbWl6YXRpb24uCisKIDIwMTEtMDItMDMgMjI6NDIgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CkBAIC03NjAsNiArMzM3MDEsMjAgQEAKICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMzE3MTg3ODogVXNpbmcgU05NUHYzIGNvbnRleHQgZG9lcyBub3QKICAgIHdvcmsKIAorMjAxMS0wMi0wMiAwNzowOSAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBJbmNsdWRlIHRoZSBVU0lOR18gdmFyaWFibGVzIGZyb20gdGhlIGFnZW50IGxpYnJhcnkgYXMgd2VsbCwgaW4KKyAgIHBhcnRpY3VsYXIgdGhlCisgICBVU0lOR19BR0VOVFhfKiB2YXJpYWJsZXMuCisKKzIwMTEtMDItMDEgMTM6MDcgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYzoKKworICAgRG9uJ3QgY2hlY2sgZm9yIDMyLzY0Yml0IHdyYXAgaW4gY2FsY3VsYXRlZCBlbnRyaWVzLgorCiAyMDExLTAyLTAxIDA5OjQxICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmM6CkBAIC03NzUsNiArMzM3MzAsMTIgQEAKICAgIGxvbmcgdGltZSBvZgogICAgdXB0aW1lIGFuZCBpdCBpcyB2ZXJ5IGhhcmQgdG8gcmVwcm9kdWNlLgogCisyMDExLTAyLTAxIDA3OjE5ICBtYWdmcgorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIFJlbW92ZSBzb21lIHVudXNlZCBpbmNsdWRlcworCiAyMDExLTAxLTMxIDIyOjM5ICBuYmEKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYzoKQEAgLTgwNCw2ICszMzc2NSwxOCBAQAogCiAgICBwcm9wZXJseSBuYW1lIGluaXRhbGl6ZXIgZnVuY3Rpb24gZm9yIGNwdV9raW5mbwogCisyMDExLTAxLTMwIDE1OjIxICBtYWdmcgorCisgICAqIGFwcHMvYWdlbnR4dHJhcC5jOgorCisgICBSZWR1Y2UgdGhlIG51bWJlciBvZiB1c2VkIGluY2x1ZGUgZmlsZXMuCisKKzIwMTEtMDEtMzAgMDk6MzUgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogQWRkIG1pc3NpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb24KKwogMjAxMS0wMS0zMCAwMTowNiAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgpAQCAtODExLDYgKzMzNzg0LDEyIEBACiAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMTUxODk3OiBmZCBsZWFrIHcvIC9wcm9jL3BhcnRpdGlvbnMKICAgIHJlYWQgaW4gZGlza2lvCiAKKzIwMTEtMDEtMjkgMjM6MzYgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jOgorCisgICBORVdTOiBzbm1wZDogQlVHOiAzMTY2NTY4OiBoclN5c3RlbVByb2Nlc3NlcyBtaXNzaW5nIGluIDUuNi81LjYuMQorCiAyMDExLTAxLTI3IDA5OjM1ICBkdHMxMgogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6CkBAIC04MjUsNiArMzM4MDQsMTggQEAKICAgIENIQU5HRVM6IG1pYjJjOiBtYWtlIHRoZSBtaWIyYyBmb3JlYWNoIHJhbmdlcyB3b3JrIGFzIGFkdmVydGlzZWQKICAgIGluIHRoZSBjb21tZW50cy4KIAorMjAxMS0wMS0yNiAxNjo0OSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjdzbm1wdjNEZWZhdWx0c19zaW1wbGU6CisKKyAgIGEgdGVzdCB0byBlbnN1cmUgdjMvVVNNIHNubXAuY29uZiBzZXR0aW5ncyB3b3JrCisKKzIwMTEtMDEtMjYgMTY6NDkgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHJlbW92ZSB0ZXN0b3B0cworCiAyMDExLTAxLTI2IDA5OjEyICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmM6CkBAIC04MzYsMTEgKzMzODI3LDU0IEBACiAgICBmZ2V0cygpIGZyb20gaXQuIHNubXBkIHNob3VsZCBjb250aW51ZSB3aXRoIG90aGVyIHByb2Nlc3NlcyBhbmQKICAgIG5vdCB0byBzdG9wLgogCi0yMDExLTAxLTE5IDA2OjIwICBuYmEKKzIwMTEtMDEtMTkgMTM6NTcgIGpzYWZyYW5laworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxOgorCisgICBNYWtlIHVzIGNvbXBhdGlibGUgd2l0aCBycG0tNC45LCBycG1HZXRGaWxlc3lzdGVtTGlzdCBkb2VzIG5vdAorICAgZXhpc3QgYW55bW9yZSwgc28gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgc2hvdWxkIG5vdCBjaGVjayBpdC4KKworMjAxMS0wMS0xOSAwNjozMSAgbmJhCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxOgorCisgICBkaXNrSU9MQXggcmVxdWlyZXMgZXhwIHdoaWNoIG1heSByZXF1aXJlIC1sbQorCisyMDExLTAxLTE4IDIyOjM5ICBuYmEKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBhdXRvaGVhZGVyCisKKzIwMTEtMDEtMTggMjI6MzcgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaDoKKworICAgRmluZCBwcm9wZXIgaWYtbWliIGludGVyZmFjZSBmb3IgTmV0QlNECisKKzIwMTEtMDEtMTggMjI6MzYgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKKworICAgdHlwbworCisyMDExLTAxLTE4IDIyOjM1ICBuYmEKIAogICAgKiBhY2NvbmZpZy5oOgogCi0gICBEZWZpbmUgRFJBR09ORkxZSUQKKyAgIGRlZmluZSBkcmFnb25mbHlpZAorCisyMDExLTAxLTE0IDEzOjI0ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIEFkZCBJUHY2IHN1cHBvcnQgZm9yIGNyZWF0aW5nIHJvd3MgaW4gaXBBZGRyZXNzdGFibGUuCisgICAKKyAgIFVzaW5nIFNOTVAgU0VULCBpdCBpcyBub3cgcG9zc2libGUgdG8gY3JlYXRlIGFuZCBkZXN0cm95IElQdjYKKyAgIGFkZHJlc3NlcyBvbiBhbiBpbnRlcmZhY2UuCiAKIDIwMTEtMDEtMTQgMTI6MjggIGpzYWZyYW5lawogCkBAIC04NjYsNiArMzM5MDAsMTIgQEAKIAogICAgcmVtb3ZlIGNvbXBsZXRlbHkgdXNlbGVzcyBhbmQgbm9uc2Vuc2ljYWwgY29kZQogCisyMDExLTAxLTEzIDE3OjI0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYWxsb2NhdGUgc3BhY2UgZm9yIGFycmF5IE5VTEwgdGVybWluYXRpb24KKwogMjAxMS0wMS0xMyAxNTo1NiAgZHRzMTIKIAogICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKQEAgLTg3OSw5ICszMzkxOSwxNiBAQAogCiAgICBSZW1vdmUgQysrIGNvbW1lbnRzCiAKKzIwMTEtMDEtMTMgMTM6MTcgIGR0czEyCisKKyAgICogYWdlbnQvYXV0b19ubGlzdC5jOgorCisgICBGaXggYnJva2VuIHBhdGNoCisKIDIwMTEtMDEtMTMgMTI6MTQgIGR0czEyCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxOgogCiAgICBDb25maWd1cmUgZml4ZXMgZm9yIERyYWdvbkZseSBzdXBwb3J0CiAKQEAgLTkwMCw2ICszMzk0NywzMCBAQAogCiAgICBGaXggdHlwbwogCisyMDExLTAxLTEyIDIxOjIzICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmM6CisKKyAgIG1lcmdlIGR1cGxpY2F0ZWQgc2h1dGRvd24gZnVuY3Rpb25zCisKKzIwMTEtMDEtMTIgMjA6MTEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaDoKKworICAgUmVpbXBsZW1lbnQgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoKSBieSBhZGRpbmcgdGhlIGZsYWcKKyAgIE5FVFNOTVBfSVRFUkFUT1JfT1dOU19JSU5GTyBmb3IKKyAgIG5ldHNubXBfaXRlcmF0b3JfaW5mby4gUmVtb3ZlCisgICBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcl9oYW5kbGVyMigpIGJlY2F1c2UgaXQgaXMgbm93CisgICBzdXBlcmZsdW91cy4KKworMjAxMS0wMS0xMiAxOToyMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wX3ZhcnMuYzoKKworICAgQXZvaWQgdGhhdCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IGEgbWlzc2luZyBkZWNsYXJhdGlvbiBmb3IKKyAgIG5ldHNubXBfY2VydHNfYWdlbnRfaW5pdCgpLgorCiAyMDExLTAxLTEyIDE5OjIwICBidmFzc2NoZQogCiAgICAqIApAQCAtOTI3LDI4ICszMzk5OCwxMSBAQAogICAgCiAgICBvcmlnaW5hbCBwYXRjaCBmaXhlZCBzZXZlcmFsIGlzc3Vlcywgb3RoZXIgcGFydHMgYXBwbGllZCBlYXJsaWVyCiAKLTIwMTEtMDEtMTIgMTQ6MzcgIHJzdG9yeQorMjAxMS0wMS0xMSAxNzoyNyAgcnN0b3J5CiAKLSAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jLAotICAgICAgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jLAotICAgICAgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYywgIAotICAgICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYywKLSAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYywKLSAgICAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmM6CisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgogCi0gICBDSEFOR0VTOiBhZ2VudDogTUlCLXNwZWNpZmljIGxlYWstYXQtZXhpdCBmaXhlcy4KLSAgIAotICAgYmFja3BvcnQgYXBwbGljYWJsZSBwYXJ0cyBvZiByMTk1MzMgZnJvbSB0cnVuaworICAgZG8gbm90IGluY2x1ZGUgaXB2NiBzdHJ1Y3QgaWYgaXB2NiBpcyBub3QgZW5hYmxlZAogCiAyMDExLTAxLTExIDE2OjA0ICBkdHMxMgogCkBAIC05OTMsMjQgKzM0MDQ3LDIyIEBACiAKIDIwMTEtMDEtMTEgMTQ6MzYgIGR0czEyCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzOgogCiAgICBOZXRCU0QvRHJhZ29uRmx5ICdzdHJ1Y3QgaWZuZXQnIHJlcXVpcmVzIEtFUk5FTCwgYnV0IG5vdCBfS0VSTkVMCiAgICBbRnJvbSBOZXRCU0QgcGF0Y2ggYXJjaGl2ZV0KICAgIChJIGhvcGUgSSd2ZSBnb3QgdGhpcyBvbmUgcmlnaHQhKQogCi0yMDExLTAxLTExIDE0OjE0ICByc3RvcnkKKzIwMTEtMDEtMTEgMTM6MzQgIGpzYWZyYW5lawogCi0gICAqIAotICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmMsCi0gICAgICAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYzoKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CiAKLSAgIHJldmVydCBQQVRDSCAzMDUzNDM2OiB0Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MgaW52YWxpZAotICAgbWVtb3J5IGFjY2VzcworICAgQ0hBTkdFUzogc25tcGxpYjogZnJvbSBCaWxsIEZlbm5lcjogZml4IHNlbmRpbmcgb2YgVURQIHJlc3BvbnNlcworICAgZnJvbSBtdWx0aWhvbWVkIGFnZW50cy4KICAgIAotICAgdGhlIGJ1ZyB0aGlzIGlzIGZpeGluZyB3YXMgaW50cm9kdWNlZCBpbiByMTc3MTksIGFuZCBmaXhlZCBpbgotICAgcjE3ODYxLgorICAgVHJ5IHRvIHNlbmQgdGhlIHJlc3BvbnNlIGFzIGl0IHdhcyBiZWZvcmUgTmV0LVNOTVAgNS42IChhc3N1bWluZworICAgdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3Qgd2FzIHVuaWNhc3QpIGFuZCBvbmx5IGlmIGl0IGZhaWxzIHRyeSB0bworICAgc2V0IGlmX2luZGV4ICh0aGUgcmVxdWVzdCBtdXN0IGJlIGJyb2FkY2FzdCkuCiAKIDIwMTEtMDEtMTEgMTM6MjIgIGR0czEyCiAKQEAgLTEwMjEsMjEgKzM0MDczLDI4IEBACiAKIDIwMTEtMDEtMTEgMTI6MjQgIGR0czEyCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CiAKICAgIEFkZGl0aW9uYWwgaGVhZGVycyB3aGVuIHRlc3RpbmcgZm9yIElQdjYgaGVhZGVycwogICAgW0Zyb20gTmV0QlNEIHBhdGNoIGFyY2hpdmVdCiAKIDIwMTEtMDEtMTEgMTI6MTQgIGR0czEyCiAKLSAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYzoKIAogICAgTWlzc2luZyB0eXBlIHVuZGVyIGRhcndpbgogICAgW0Zyb20gTmV0QlNEIHBhdGNoIGFyY2hpdmVdCiAKKzIwMTEtMDEtMTEgMTI6MTAgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIE5ldEJTRCBzdXBwb3J0IGZvciBEaXNrIEkvTyBzdGF0cworICAgW0Zyb20gTmV0QlNEIHBhdGNoIGFyY2hpdmVdCisKIDIwMTEtMDEtMTEgMTI6MDEgIGR0czEyCiAKLSAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCiAgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCiAgICBIYW5kbGUgc3lzdGVtcyB3aXRoICdzdHJ1Y3QgdGltZXNwZWMgaWZuZXQuaWZfbGFzdGNoYW5nZScgKHJhdGhlcgpAQCAtMTA2MSw2ICszNDEyMCwxMiBAQAogICAgQ0hBTkdFUzogTmV0QlNEOiBSZXRyaWV2ZSBNSUItSUkgbmV0d29yayBzdGF0aXN0aWNzIHZpYSBzeXNjdGwKICAgIFtGcm9tIE5ldEJTRCBwYXRjaCBhcmNoaXZlXQogCisyMDExLTAxLTExIDA3OjA0ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CisKKyAgIEZpeCBmb3IgcGNpX2xvb2t1cF9uYW1lIGFuZCBSSEVMNAorCiAyMDExLTAxLTEwIDE2OjU2ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmM6CkBAIC0xMDkxLDYgKzM0MTU2LDIzIEBACiAgICBGaXggZGl2aWRlLWJ5LXplcm8gZXJyb3IgaW4gQ1BVIHBlcmZvcm1hbmNlIHN0YXRpc3RpY3MKICAgIFtGcm9tIE5ldEJTRCBwYXRjaCBhcmNoaXZlXQogCisyMDExLTAxLTA5IDIyOjU0ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgQ0hBTkdFUzogT3BlbkJTRDogVXBkYXRlIFNXUnVuIGNvZGUgdG8gdXNlIGt2bV9nZXRwcm9jMgorICAgW0Zyb20gT3BlbkJTRCBwYXRjaCBhcmNoaXZlXQorCisyMDExLTAxLTA5IDIxOjMwICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBPcGVuQlNEOiBGaXggb3JkZXIgb2YgaGVhZGVycyB3aGVuIGNoZWNraW5nCisgICA8bmV0aW5ldC9pbl9wY2IuaD4KKyAgIFtGcm9tIE9wZW5CU0QgcGF0Y2ggYXJjaGl2ZV0KKwogMjAxMS0wMS0wOSAxOTo0NCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jOgpAQCAtMTExNSwxMyArMzQxOTcsMjIgQEAKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9ubGlzdC5jLCAgIAogICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbmV0YnNkLmM6CisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X25ldGJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jOgogCiAgICBzeXNjdGwgdGFrZXMgYSAnc2l6ZV90JyB2YXJpYWJsZSBmb3IgdGhlIHNpemUgcGFyYW1ldGVyCiAKKzIwMTEtMDEtMDggMDg6MzAgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogRml4IC0td2l0aC1zZWN1cml0eS1tb2R1bGVzIGhhbmRsaW5nCisgICBBbGxvdyByZXBlYXRlZCBtb2R1bGVzICh0c20sdHNtKSBhcyB3ZWxsIGFzIGRlZmFpbHQgbW9kdWxlcyAodXNtKQorICAgTW92ZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgZmlsZXMgYWZ0ZXIgdGhlIGNoZWNraW5nCisKIDIwMTEtMDEtMDggMDA6NDcgIG1hZ2ZyCiAKLSAgICogYWNjb25maWcuaDoKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAogICAgVXBkYXRlIGFjY29uZmlnLmggd2l0aCBjaGFuZ2VzIGZyb20gcjE5ODE5LgogICAgUmVydW4gYXV0b2hlYWRlci4KQEAgLTEyNzcsMTIgKzM0MzY4LDQ1IEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMjk0MTgxMTogSGFuZGxlIHN1Y2Nlc3NmdWwgcmVxdWVzdHMgd2l0aAogICAgcmVxSUQgMAogCi0yMDExLTAxLTA1IDE2OjMxICBkdHMxMgorMjAxMS0wMS0wNiAwOTozOCAgYnZhc3NjaGUKIAotICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmM6CiAKLSAgIFVzZSB0aGUgYXBwcm9wcmlhdGUgQVBJIGNhbGwgZm9yIHJlcG9ydGluZyBjb25maWcgZXJyb3JzLgotICAgKCJEb24ndCBiZSBzbyBpbXBhdGllbnQsIERhdmUuLi4uIikKKyAgIFNwZWxsaW5nIGZpeDogSW5pdGlhbHppZXMgLT4gSW5pdGlhbGl6ZXMuCisKKzIwMTEtMDEtMDYgMDk6MzUgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEFkZGVkIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yMigpLgorICAgQ0hBTkdFUzogYWdlbnQ6IEFkZGVkIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKCkuCisgICBDSEFOR0VTOiBhZ2VudDogQWRkZWQgbmV0c25tcF9oYW5kbGVyX293bnNfaXRlcmF0b3JfaW5mbygpLgorICAgQ0hBTkdFUzogYWdlbnQ6IEZpeGVkIGxlYWstYXQtZXhpdCB0cmlnZ2VyZWQgYnkgc25tcE5vdGlmeVRhYmxlLgorICAgQ0hBTkdFUzogYWdlbnQ6IEZpeGVkIGxlYWstYXQtZXhpdCB0cmlnZ2VyZWQgYnkKKyAgIHNubXBUYXJnZXRBZGRyVGFibGUuCisgICBBbHNvLCByZXN0b3JlZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvZgorICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcigpLgorCisyMDExLTAxLTA2IDA0OjQ1ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgaW5jbHVkZSBzeXMvc29ja2V0LmggaWYgYXZhaWxhYmxlCiAKIDIwMTEtMDEtMDUgMTQ6MDYgIGR0czEyCiAKQEAgLTEyOTgsMTIgKzM0NDIyLDE2NCBAQAogICAgQ0hBTkdFUzogc25tcHRyYXBkOiBCVUdTOiAzMTUxMjU0OiBGaXggY3Jhc2ggd2l0aCBpbnZhbGlkCiAgICB0cmFwaGFuZGxlIGRpcmVjdGl2ZQogCisyMDExLTAxLTA1IDA5OjU1ICBkdHMxMgorCisgICAqIGFwcHMvc25tcHdhbGsuYzoKKworICAgRXhwYW5kIHRhYiBjaGFyYWN0ZXJzCisKKzIwMTEtMDEtMDQgMjI6MDYgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDaGVjayB0aGF0IHRoZSBhcmd1bWVudCB0bworICAgbmV0c25tcF90cmFuc3BvcnRfY29weSBpcyBub24tTlVMTAorCiAyMDExLTAxLTA0IDE4OjI0ICBoYXJkYWtlcgogCiAgICAqIENPUFlJTkc6CiAKICAgIENvcHlyaWdodCB1cGRhdGUgZm9yIDIwMTEKIAorMjAxMS0wMS0wNCAxMjowMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKKworICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSB0aGUgV2luMzIgTUlCLUlJCisgICBpbXBsZW1lbnRhdGlvbi4KKworMjAxMS0wMS0wMyAxOTo0OCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5jOgorCisgICBSZW1vdmVkIHR3byB1bnVzZWQgdmFyaWFibGVzLgorCisyMDExLTAxLTAzIDE5OjQ3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgRml4ZWQgYSByZWNlbnRseSBpbnRyb2R1Y2VkIG1pc21hdGNoIGJldHdlZW4gZm9ybWF0IHNwZWNpZmljYXRpb24KKyAgIGFuZCBhcmd1bWVudCBsaXN0LgorCisyMDExLTAxLTAzIDE5OjQ3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBHZXQgcmlkIG9mIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MgYnkgYWRkaW5nIHR3bworICAgI2luY2x1ZGUgZGlyZWN0aXZlcyBhbmQgY29tbWVudGluZyBvdXQgdHdvIHVudXNlZCBmdW5jdGlvbnMuCisKKzIwMTEtMDEtMDIgMDU6NDggIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGRvbid0IGZyZWUgY2FsbGVycyBwdHIKKworMjAxMS0wMS0wMiAwNTo0OCAgcnN0b3J5CisKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvdGFibGUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2lmLmMsIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCAgIAorICAgICAgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXB2My5jLCBzbm1wbGliL3Rvb2xzLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jOgorCisgICBjbGVhbiB1cCBTTk1QX0ZSRUUgdXNhZ2UKKworMjAxMS0wMS0wMiAwNTo0NyAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jOgorCisgICBmaXggY3V0LW4tcGFzdGUgZXJyb3IgaW4gZGVidWcgdG9rZW4KKworMjAxMS0wMS0wMiAwNTo0NyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmg6CisKKyAgIGZpeCBmdW5jdGlvbiBuYW1lIGluIHByb3RvdHlwZQorCisyMDExLTAxLTAyIDA1OjQ2ICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmcKKworMjAxMS0wMS0wMiAwNTo0NiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiByZW1vdmUgaW5saW5lIHZlcnNpb25zIG9mIGNvbnRhaW5lciBmdW5jcworCisyMDExLTAxLTAyIDA1OjQ2ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBkb250IHJldHVybiBlbXB0eSBhcnJheQorCisyMDExLTAxLTAyIDA1OjQ2ICByc3RvcnkKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZiwgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIGZpeCB0eXBvcy9ncmFtbWFyIGluIG1hbiBwYWdlcy9jb21tZW50cyAobm8gY29kZSBjaGFuZ2VzKQorCisyMDExLTAxLTAyIDA1OjQ1ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGFkZCBuZXcgdHJhbnNwb3J0IGNvbmZpZyB0b2tlbnMKKyAgIGxvY2FsQ2VydC9wZWVyQ2VydCwKKyAgIGRlcHJlY2F0ZSBvdXJfaWRlbnRpdHksIHRoZWlyX2lkZW50aXR5CisKKzIwMTEtMDEtMDIgMDU6NDUgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCBtYW4vc25tcGNtZC4xLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wZC5jb25mLjUuZGVmLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGludHJvZHVjZSBuZXcgbG9jYWxDZXJ0L3BlZXJDZXJ0LCBkZXByZWNhdGUKKyAgIHNlcnZlckNlcnQsIGNsaWVudENlcnQsIGRlZlg1MDlTZXJ2ZXJQdWIsIGRlZlg1MDlDbGllbnRQdWIKKworMjAxMS0wMS0wMiAwNTo0NCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgTkVXUzogc25tcGxpYjogYWRkIElQdjYgc3VwcG9ydCB0byBEVExTVURQIHRyYW5zcG9ydAorICAgQ0hBTkdFUzogc25tcGxpYjogdXNlIG5ldyBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgaW4KKyAgIG5ldHNubXBfYWRkcl9wYWlyCisgICBDSEFOR0VTOiBzbm1wbGliOiBhZGQgYmFzZV90cmFuc3BvcnQgcHRyIGZvciB0dW5uZWxlZCB0cmFuc3BvcnRzCisKKzIwMTEtMDEtMDIgMDU6NDIgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHNraXAgbm9uLUFGX0lORVQgaW50ZXJmYWNlcyB3aGVuIGxvYWRpbmcgaXB2NAorICAgYWRkcnMKKwogMjAxMC0xMi0yOSAwMTozNyAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzoKQEAgLTEzMjMsNiArMzQ1OTksMjYgQEAKIAogICAgQnJpbmcgYWxsIHZlcnNpb25zIG9mIG1ha2VyZWxlYXNlLnhtbCBpbnRvIGxpbmUKIAorMjAxMC0xMi0yMSAwNjoxNCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnRfbWlicy5oOgorCisgICBmaXggY29uZmlndXJpbmcgd2l0aCAtLWRpc2FibGUtZGVidWdnaW5nCisKKzIwMTAtMTItMjAgMjM6MjcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIFBhdGNoIGZyb20gTWFnbnVzIHRvIGZpeCBpZiAhIHRlc3RzIG9uIHNvbGFyaXMKKworMjAxMC0xMi0xNCAyMDoxMCAgcnN0b3J5CisKKyAgICogbWFuL3NubXBjbWQuMS5kZWY6CisKKyAgIGZpeCB0eXBvIGluIG1hbiBwYWdlCisKIDIwMTAtMTItMTAgMTU6NTAgIGhhcmRha2VyCiAKICAgICogYWdlbnQvYWdlbnRfdHJhcC5jLCBzbm1wbGliL3NubXB1c20uYzoKQEAgLTEzNDMsNiArMzQ2MzksMjcgQEAKICAgIHRoZSBsb2FkaW5nCiAgICBvZiB0aGUgbGlzdCBhIGJpdC4KIAorMjAxMC0xMi0wNiAyMzoyMyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jOgorCisgICBQYXRjaCBmcm9tIE5pZWxzIHRvIHJlbW92ZSBleHRyYSBoZWFkZXJzIGZyb20gdGhlIGxpbnV4IGRvdDNzdGF0cworICAgaW1wbGVtZW50YXRpb24KKworMjAxMC0xMi0wNiAyMjowOCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6CisKKyAgIENoZWNrIGZvciB0aGUgbWluaW11bSByZXF1aXJlZCBmdW5jdGlvbiBpbiBPcGVuU1NMIGZvciBEVExTCisgICBzdXBwb3J0CisKKzIwMTAtMTItMDYgMTY6MzQgIHJzdG9yeQorCisgICAqIGFnZW50L3NubXBfdmFycy5jOgorCisgICBjYWxsIG5ldHNubXBfY2VydHNfYWdlbnRfaW5pdCBzb29uZXIsIGZpeGluZyBzbm1wdHJhcGQgKEQpVExTCisgICBzdXBwb3J0CisKIDIwMTAtMTItMDYgMTY6MjQgIGhhcmRha2VyCiAKICAgICogYXBwcy9zbm1wdHJhcC5jOgpAQCAtMTM1MCwxMiArMzQ2NjcsMzEgQEAKICAgIGZpeCBjb250ZXh0RW5naW5lSURzIGZvciBvdXRnb2luZyBpbmZvcm1zIGZyb20gc25tcGluZm9ybSB0byBiZQogICAgdGhlIGxvY2FsIGVuZ2luZUlECiAKKzIwMTAtMTItMDEgMjE6MTggIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKKworICAgRml4IGNvbmZsaWN0aW5nIGRlY2xhcmF0aW9ucworCisyMDEwLTEyLTAxIDAxOjIzICBoYXJkYWtlcgorCisgICAqIGFnZW50L3NubXBfdmFycy5jOgorCisgICBQYXRjaCBmcm9tIG1hZ2ZyIHRvIGZpeCBidWlsZGluZyB3aXRob3V0IG9wZW5zc2wKKwogMjAxMC0xMi0wMSAwMTowNiAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9zbm1wZC5jOgogCiAgICB1c2UgbmV0c25tcF9hc3NlcnQgaW5zdGVhZCBvZiBhc3NlcnQKIAorMjAxMC0xMS0zMCAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgaW1wbGVtZW50IERUTFMgY29va2llcyBzZW1pLXByb3Blcmx5IChzdGF0ZSBpcyBzdGlsbCBzYXZlZCwgd2hpY2gKKyAgIHN0aWxsIG5lZWRzIHRvIGNoYW5nZSkKKwogMjAxMC0xMS0zMCAyMzoyNyAgaGFyZGFrZXIKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKQEAgLTEzNzksNiArMzQ3MTUsNTcgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzA1MzQzNjogZnJvbTogdGFrZXZvczogZml4OgogICAgdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2VzcyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MKIAorMjAxMC0xMS0zMCAyMjoxOCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICByZXZlcnRlZCAxOTcwMSAoZXRodG9vbCkgYXMgaXQgYnJva2UgdGhpbmdzCisKKzIwMTAtMTEtMzAgMjE6MDggIG5iYQorCisgICAqIGFwcHMvc25tcHRscy5jLCBhcHBzL3NubXB0cmFwZF9zcWwuYzoKKworICAgdV9pbnQzMl90IGlzIGxlc3MgcG9ydGFibGUgdGhhbiB1aW50MzJfdCAoU29sYXJpcyAxMSkKKworMjAxMC0xMS0zMCAyMDo1MiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIGEgY29tcGlsZSB3YXJuaW5nIGFib3V0IGEgbmVzdGVkIGlmIHdpdGhvdXQgYSBibG9jaworCisyMDEwLTExLTMwIDE5OjU3ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBlcnJvciBjaGVjayB0aGUgcmlnaHQgcG9pbnRlciBhZnRlciBhdHRlbXB0aW5nIGFsbG9jYXRpb24KKworMjAxMC0xMS0zMCAwNTo1OCAgaGFyZGFrZXIKKworICAgKiBhcHBzL3NubXB3YWxrLmM6CisKKyAgIE5FV1M6IGFwcHM6IFBBVENIIDMwNTQ4MTc6IGZyb20gbmlnaHRjb2Rpbmc6IEFkZHMgcGVyLXZhcmlhYmxlCisgICB0aW1lZCBvdXRwdXQgc3VwcG9ydCB0byBzbm1wd2FsayB1c2luZyAtQ1QKKworMjAxMC0xMS0zMCAwNTo1NiAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMwNTcwOTA6IGZyb20gc2hlbW1pbmdlcjogbWFrZSBldGh0b29sCisgICBzdXBwb3J0IG9uIGxpbnV4IHVzZSB0aGUgaGlnaCBzcGVlZCBzdHJ1Y3QgaW5mbyBmb3IgMTAwRysuCisKKzIwMTAtMTEtMzAgMDU6NDcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogc25tcGQ6IFBBVENIIDMwNTcwOTM6IGZyb20gc2hlbW1pbmdlcjogYWxsb3cgbGludXggdG8gdXNlCisgICBsaWJwY2kgZm9yIGNyZWF0aW5nIHVzZWZ1bCBpZkRlc2NyIHN0cmluZ3MKKwogMjAxMC0xMS0zMCAwNDo1OCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYzoKQEAgLTEzODYsNyArMzQ3NzMsMzcgQEAKICAgIENIQU5HRVM6IFBBVENIIDMwNzQ5MTg6IGZyb20gd2Vpemhlbmc6IGNoZWNrIGZvciBDT05UQUlORVJfSU5TRVJUCiAgICBmYWlsdXJlcyBhbmQgcmVhY3QgYXBwcm9wcmlhdGVseSB0byBhdm9pZCBtZW1vcnkgbGVha3MKIAotMjAxMC0xMS0yOSAyMjoxNCAgcnN0b3J5CisyMDEwLTExLTMwIDA0OjM0ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogYWRkIGRlYnVnIGZvciBjZXJ0IGZpbmQgaGludCBhcyBzdHJpbmcvaW50CisKKzIwMTAtMTEtMzAgMDQ6MzAgIHJzdG9yeQorCisgICAqICBhZ2VudC9zbm1wX3ZhcnMuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGluc3RlYWQgb2YgcmVseWluZyBvbiBORVRTTk1QX0RTX0xJQl9BUFBUWVBFLAorICAgYnJlYWsgb3V0CisgICBjZXJ0IHRhYmxlIGluaXRzIHRvIG5ldyBhZ2VudCBjZXJ0IGluaXQgZnVuY3Rpb24sIGNhbGxlZCBmcm9tCisgICBpbml0X2FnZW50LgorCisyMDEwLTExLTMwIDA0OjIxICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiBlbmZvcmNlIG1heCBsZW5ndGggb24gVExTIHNlY05hbWUgbWFwcworICAgQ0hBTkdFUzogc25tcGQ6IGFkZCBwcmlvcml0eSB0byBzZWNuYW1lIGRlYnVnZ2luZworCisyMDEwLTExLTI5IDIyOjIwICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGFkZCBkZWJ1ZyBmb3Igc3NsIGNpcGhlcnMsIGNsYXJpZnkgZmluZ2VycHJpbnQKKyAgIG1hdGNoIGRlYnVnCisKKzIwMTAtMTEtMjkgMjI6MTggIHJzdG9yeQogCiAgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgogCkBAIC0xMzk0LDYgKzM0ODExLDIyIEBACiAgICBzaGFyZWQKICAgIGNhY2hlIHJlbG9hZCBwcm90ZWN0aW9uCiAKKzIwMTAtMTEtMTkgMTU6MjUgIG5iYQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jOgorCisgICBOaWVscywgTmllbHMsIHlvdSBzaG91bGQga25vdyBiZXR0ZXIgdGhhbiBtYWtpbmcgbGFzdCBtaW51dGUKKyAgIGNoYW5nZXMgdG8gYQorICAgcGF0Y2ggYW5kIHRoZW4gY29tbWl0IGl0IHdpdGhvdXQgdGVzdGluZyA6LSgKKworMjAxMC0xMS0xOCAxMTowNCAgYnZhc3NjaGUKKworICAgKiAgLiwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYzoKKworICAgQXBwbGllZCByMTk2ODggb24gdGhlIHRydW5rIHRvbyAoZm9sbG93LXVwIGZvciByMTk2ODUpLgorCiAyMDEwLTExLTE4IDAzOjQ5ICByc3RvcnkKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIApAQCAtMTQwNiw2ICszNDgzOSw1OSBAQAogICAgCiAgICBuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkKCkgaXMgbm90IG1lYW50IGZvciBtaWIgbW9kdWxlcwogCisyMDEwLTExLTE3IDE5OjU5ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfZGFyd2luLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6CisKKyAgIE1vcmUgcHJvY3Rpb24gYWdhaW5zdCBvdmVyZmxvd2luZyBzbnByaW50ZgorCisyMDEwLTExLTE3IDE5OjU3ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaDoKKworICAgRG9udCB1c2UgZmlyc3QgZWxlbWVudCBvZiBvaWQgdG8gc2F2ZSBpZkluZGV4IC0gaXQgY2FuIG9ubHkgYmUKKyAgIDAuLjIKKyAgIFNlY29uZCBlbGVtZW50IGlzIG9ubHkgMC4uMzksIHNvIHdlIGhhdmUgdG8gdXNlIGEgdGhpcmQgZWxlbWVudC4KKworMjAxMC0xMS0xNyAxOTozOSAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaCwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgIAorICAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBUZXN0IGdldGZzc3RhdC9nZXR2ZnNzdGF0IGluIHRpbWUgZm9yIG1vZHVsZSBzZWxlY3Rpb24KKworMjAxMC0xMS0xNyAxOTozNyAgbmJhCisKKyAgICogc25tcGxpYi9maWxlX3V0aWxzLmM6CisKKyAgIFJlbW92ZSBib2d1cyB0ZXN0IGZvciBmbGFncz09MCAoT19SRE9OTFk9PTApLiBNYWtlcworICAgdWRwRW5kcG9pbnRUYWJsZSB3b3JrIGFnYWluCisKKzIwMTAtMTEtMTcgMDQ6NTUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXggZG91YmxlIGZyZWUgaW4gVExTIGVycm9yIGhhbmRsaW5nCisKKzIwMTAtMTEtMTYgMTA6MzkgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlOgorCisgICBSZXZlcnRlZCBNaW5HVy1zcGVjaWZpYyBjaGFuZ2VzIGZyb20gcjE5NTQ5IHN1Y2ggdGhhdCB0ZXN0IFQwNjUKKyAgIHBhc3NlcyBhZ2FpbiBvbiBNaW5HVy4KKworMjAxMC0xMS0xNiAxMDowNCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IExpbnV4OiBhZ2VudDogaXBOZXRUb1BoeXNpY2FsVGFibGU6IERvIG5vdCBsb2cgYW4gZXJyb3IKKyAgIG1lc3NhZ2UgaWYgb25lIG9yIG1vcmUgaW50ZXJmYWNlcyBhcmUgcHJlc2VudCB0aGF0IGRvIG5vdCBoYXZlCisgICBzdWNoIGluZm9ybWF0aW9uIChOVURfTk9BUlApLCBlLmcuIHR1bm5lbHMuIFJlcG9ydGVkIGJ5IFN0ZXBoZW4KKyAgIEhlbW1pbmdlci4gU2VlIGFsc28gcGF0Y2ggIzMxMDcwMDMuCisKIDIwMTAtMTEtMTUgMTQ6MTUgIGJ2YXNzY2hlCiAKICAgICogc25tcGxpYi9hc24xLmM6CkBAIC0xNDE1LDExICszNDkwMSwzOCBAQAogICAgYXNuX2J1aWxkX3NpZ25lZF9pbnQ2NCgpLiBNb3N0IGJ1dCBub3QgYWxsIG9mIHRoZXNlIGJ1Z3Mgd2VyZQogICAgc3BlY2lmaWMgdG8gNjQtYml0IHN5c3RlbXMuIEZpeGVzIGJ1ZyAjMzA5MzE5OS4KIAotMjAxMC0xMS0xNSAxNDoxMiAgYnZhc3NjaGUKKzIwMTAtMTEtMTUgMTM6MzIgIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvc3RydWN0Lmg6CisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOGFzbjFfY2xpYi5jOgogCi0gICBCdWlsZHMgYWdhaW4uCisgICBBdm9pZCB0cmlnZ2VyaW5nIHRydW5jYXRpb24gd2FybmluZ3MuCisKKzIwMTAtMTEtMTUgMTM6MTYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA4YXNuMV9jbGliLmM6CisKKyAgIFJlc3RyaWN0ZWQgYWxsIGNvbnN0YW50cyB0byAzMiBiaXRzLgorCisyMDEwLTExLTE1IDEyOjM1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTY2NS4KKworMjAxMC0xMS0xNSAxMjozMyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaCwgc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENoYW5nZWQgdGhlIGFyZ3VtZW50IHR5cGUgb2YKKyAgIGRlYnVnX3JlZ2lzdGVyX3Rva2VucygpIGZyb20gY2hhciAqIGludG8gY29uc3QgY2hhciAqLgorCisyMDEwLTExLTE1IDEwOjU2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOGFzbjFfY2xpYi5jOgorCisgICBBZGRlZCB1bml0IHRlc3QgZm9yIEFTTi4xIGVuY29kaW5nIGFuZCBkZWNvZGluZyAob25seSAzMi1iaXQgYW5kCisgICA2NC1iaXQKKyAgIGludGVnZXJzIHNvIGZhcikuCiAKIDIwMTAtMTEtMTEgMjI6NDggIG5iYQogCkBAIC0xNDI4LDkgKzM0OTQxLDQxIEBACiAgICBGaXggcjE5NjM2OiBUcmFwT0lEIGlzIG5vdCB0aGUgZmlyc3QgdmFyYmluZCBpbiB0aGUgY29udmVydGVkIHYyCiAgICB0cmFwCiAKKzIwMTAtMTEtMTEgMDg6MzggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oOgorCisgICBDbGVhbnVwOiBSZW1vdmVkIHN1cGVyZmx1b3VzIHJlZmVyZW5jZXMgdG8gdGhlIFBPU0lYIHRocmVhZHMKKyAgIGxpYnJhcnkuCisKKzIwMTAtMTEtMTEgMDg6MjAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTY2MDogVXNlIHBpZF90IGNvbnNpc3RlbnRseS4KKworMjAxMC0xMS0xMCAxNjozNiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBJbnRyb2R1Y2VkIG5ldHNubXBfcGlkX3QuCisgICBDSEFOR0VTOiBXaW4zMjogRWxpbWluYXRlZCBjYXN0cyBiZXR3ZWVuIGludCBhbmQgSEFORExFIGluCisgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMgYW5kCisgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYy4KKworMjAxMC0xMS0xMCAxNTo0OSAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3A6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NjA2OiBjbXVfY29tcGF0IHJlbW92YWwuCisKIDIwMTAtMTEtMTAgMTI6MzEgIGJ2YXNzY2hlCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgogCiAgICBDSEFOR0VTOiBCVUc6IDMxMDI5MDQ6IEFsbCBOZXQtU05NUCBDIHNvdXJjZSBmaWxlcyBhcmUgbm93CiAgICBjb21waWxlZCB3aXRoIC1mbm8tc3QKQEAgLTE0MzksMTYgKzM0OTg0LDk5IEBACiAKIDIwMTAtMTEtMDkgMTM6NDcgIGJ2YXNzY2hlCiAKLSAgICogdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uOgorICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlOgogCiAgICBDSEFOR0VTOiB0ZXN0aW5nOiBUZXN0IFQwMzAgZG9lcyBub3cgcGFzcyBvbiBNaW5HVy4KIAorMjAxMC0xMS0wOSAxMzo0MCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBzaW1wbGVfZXZhbF90b29scy5zaDogUmVtb3ZlZCBhIHN1cGVyZmx1b3VzIElTREVGSU5FRCBpbnZvY2F0aW9uLgorCisyMDEwLTExLTA5IDEyOjA0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X3NpbXBsZToKKworICAgUGFzc2VzIG5vdyBvbiBNaW5HVyB0b28uCisKKzIwMTAtMTEtMDkgMTE6MzEgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTY0Ni4KKworMjAxMC0xMS0wOSAxMTozMCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogSWYgdGhlIGFnZW50IGhhcyBiZWVuIGFza2VkIHRvIHN0b3AsCisgICB3YWl0IHVudGlsIHRoZSBzbm1wZCBwcm9jZXNzIGRpc2FwcGVhcmVkIGJlZm9yZSBwcm9jZWVkaW5nLgorCisyMDEwLTExLTA5IDEwOjAyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogY29tMnNlYzYgZGlyZWN0aXZlOiBJZiBjb25maWd1cmUgaGFzIG5vdCBmb3VuZAorICAgZ2V0YWRkcmluZm8oKSwgbm9uLW51bWVyaWMgSVB2NiBhZGRyZXNzZXMgZG8gbm93IHRyaWdnZXIgYW4gZXJyb3IKKyAgIG1lc3NhZ2UuCisKKzIwMTAtMTEtMDggMTU6MzYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBUZXN0IDcxIChjb20yc2VjNl9zaW1wbGUpIGRvZXMgbm93IHN1Y2NlZWQgZXZlbgorICAgaWYgSVB2NiBETlMgcmVzb2x1dGlvbiBpcyBub3QgYXZhaWxhYmxlLgorCisyMDEwLTExLTA4IDE1OjAyICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgTWluR1csIHRlc3Rpbmc6IGNsaWIgdGVzdHMgYnVpbGQgYWdhaW4gd2l0aG91dCB3YXJuaW5ncy4KKworMjAxMC0xMS0wOCAxNDo1MiAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBDSEFOR0VTOiBNaW5HVzogY29uZmlndXJlOiBEZXRlY3Rpb24gb2YgdGhlIGZ1bmN0aW9ucworICAgZ2FpX3N0cmVycm9yKCksIGdldGFkZHJpbmZvKCksIGdldGhvc3RieW5hbWUoKSBhbmQgZ2V0aG9zdG5hbWUoKQorICAgZG9lcyBub3cgc3VjY2VlZC4KKworMjAxMC0xMS0wOCAxNDo0OCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDdpbmV0X3B0b25fY2xpYi5jOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGRlZCBpbmV0X250b3AoKSBhbmQgaW5ldF9wdG9uKCkgdW5pdCB0ZXN0LgorCisyMDEwLTExLTA4IDE0OjQ3ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgdGVzdGluZzogY2xpYl9idWlsZDogQWRkZWQgI2luY2x1ZGUgZGlyZWN0aXZlcyAoPGFycGEvaW5ldC5oPiBhbmQKKyAgIDxuZXRpbmV0L2lwNi5oPikuCisKIDIwMTAtMTEtMDggMDg6NDYgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKIAogICAgV2luMzI6IGFnZW50OiBlbGltaW5hdGVkIGNhc3RzIGZyb20vdG8gaW50IGZvciB0aHJlYWQgaGFuZGxlcy4KIAorMjAxMC0xMS0wOCAwNzo1OCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgUmVtb3ZlZCBORVRTTk1QX1NUQVRJQ19JTkxJTkUgZnJvbSB0aGUgZGVjbGFyYXRpb24gb2YKKyAgIF9idWlsZF9jYWNoZV9uYW1lIC0gYXQgbGVhc3QgZ2NjIGlzIGJldHRlciB0aGFuIGEgaHVtYW4gYXQKKyAgIGRlY2lkaW5nIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgaW5saW5lZCBhbmQgd2hpY2ggb25lcyBub3QuCisKKzIwMTAtMTEtMDggMDc6NTYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmM6CisKKyAgIG5ldHNubXBfdGFibGVfZGF0YV9jbG9uZV9yb3coKTogQWRkZWQgbWlzc2luZyBmcmVlKCkgc3RhdGVtZW50IGluCisgICBhbiBlcnJvciBwYXRoLgorCiAyMDEwLTExLTA3IDIxOjE1ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgpAQCAtMTQ4NCwxOSArMzUxMTIsNiBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDMwOTY3MjU6IEluY2x1ZGUgU05NUHYxIHRyYXAgT0lEcyBpbgogICAgbmxtTG9nTm90aWZpY2F0aW9uSUQgY29sdW1uCiAKLTIwMTAtMTEtMDcgMTk6MjYgIGR0czEyCi0KLSAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6Ci0KLSAgIFN1cHBvcnQgaG9sZXMgaW4gZGF0YXNldCB0YWJsZXMuCi0gICAoUGFydGlhbCBiYWNrLXBvcnQgb2YgcmV2aXNpb24gMTc5MjkpCi0KLTIwMTAtMTEtMDcgMTk6MjIgIGR0czEyCi0KLSAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgotCi0gICBGaXggYSB0eXBvLCBhbmQgZHJvcCBhIGNvdXBsZSBvZiByZWR1bmRhbnQgdmFyaWFibGVzLgotCiAyMDEwLTExLTA3IDE2OjM1ICBtYWdmcgogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgpAQCAtMTUwNCwxMiArMzUxMTksNjIgQEAKICAgIENIQU5HRVM6IHNubXBsaWI6IGZvcmNlIGEgOyBhdCB0aGUgZW5kIG9mIHRoZSBzdGF0aWNfYXNzZXJ0CiAgICBtYWNyby4KIAotMjAxMC0xMS0wNyAxNjoyMSAgZHRzMTIKKzIwMTAtMTEtMDUgMTU6NDEgIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6CiAKLSAgIEJhY2twb3J0IG9mIHJldmlzaW9uIDE3NTk2Ci0gICBUcml2aWFsIHdhcm5pbmcgZml4ZXMKKyAgIE1hZGUgc3VyZSB0aGF0IHJwbUdldFBhdGgoKSBjYW4gYmUgZm91bmQgYnkgY29uZmlndXJlLgorCisyMDEwLTExLTA1IDE0OjUwICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxOgorCisgICBSZW1vdmVkIHN1cGVyZmx1b3VzIC1JL3Vzci9pbmNsdWRlL3JwbS4KKworMjAxMC0xMS0wNSAxMjoxOCAgYnZhc3NjaGUKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIENIQU5HRVM6IGFnZW50OiBGaW5kIG91dCB3aGV0aGVyIGxpYnJwbSBpcyBhdmFpbGFibGUgYmVmb3JlCisgICBjb25maWd1cmluZyB0aGUgYWdlbnQgbW9kdWxlcyBiZWNhdXNlIGhvc3QvZGF0YS9hY2Nlc3Mvc3dpbnN0CisgICBuZWVkcyBzeW1ib2wgSEFWRV9MSUJSUE0uIEFzIGEgcmVzdWx0LCBjb25maWd1cmUgaGFzIHRvIGJlIHJ1bgorICAgb25seSBvbmNlIGluc3RlYWQgb2YgdHdpY2UgdG8gZW5hYmxlIHRoZSBoclNXSW5zdGFsbGVkIHRhYmxlIG9uCisgICBzeXN0ZW1zIHRoYXQgaGF2ZSBsaWJycG0uCisKKzIwMTAtMTEtMDUgMTI6MTEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXJyb3JUYWJsZS5jOgorCisgICBTdXBwcmVzcyBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMTEtMDUgMTA6MDAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG06IEZpeGVkIGEgbWVtb3J5IGxlYWsKKyAgIGluIG5ldHNubV9zd2luc3RfYXJjaF9pbml0KCkuCisKKzIwMTAtMTEtMDUgMDk6MjMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG06IFBhc3MgY29ycmVjdCBwYXRoIHRvCisgICBycG1kYk9wZW4oKSBzdWNoIHRoYXQgb3BlbmluZyB0aGUgZGF0YWJhc2Ugc3VjY2VlZHMuCisgICBDSEFOR0VTOiBhZ2VudDogaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtOiBMb2cgYW4gZXJyb3IgbWVzc2FnZQorICAgaWYgcnBtZGJPcGVuKCkgZmFpbHMuCisKKzIwMTAtMTEtMDUgMDg6NTAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dfYXBpLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmM6CisKKyAgIFJtb24gLyBkaXNtYW4gY29tcGlsZXIgd2FybmluZyBmaXhlcy4KIAogMjAxMC0xMS0wNSAwODo0OCAgYnZhc3NjaGUKIApAQCAtMTUxNyw2ICszNTE4MiwxOCBAQAogCiAgICBDSEFOR0VTOiBzbm1wbGliOiBBZGRlZCBtYWNybyBuZXRzbm1wX3N0YXRpY19hc3NlcnQoKS4KIAorMjAxMC0xMS0wNSAwODo0MCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworICAgRm9sbG93LXVwIGZvciByMTk1NjYuCisKKzIwMTAtMTEtMDUgMDg6MzcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaDoKKworICAgUmVtb3ZlZCBhIChoYXJtbGVzcyA/KSBjaXJjdWxhciByZWZlcmVuY2UuCisKIDIwMTAtMTEtMDQgMTM6MDkgIGR0czEyCiAKICAgICogZGlzdC9uZXQtc25tcC5zcGVjOgpAQCAtMTUyNCwyNSArMzUyMDEsMjMgQEAKICAgIENIQU5HRVM6IExpbnV4OiBQQVRDSEVTOiAzMDgzMDI3OiBGaXggUlBNIHNwZWMgZmlsZSB0byBzdXBwb3J0CiAgICBDZW50T1MKIAotMjAxMC0xMS0wNCAwNzowOSAgYnZhc3NjaGUKKzIwMTAtMTEtMDMgMTM6MjIgIHJzdG9yeQogCi0gICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDBUbHNJcHY2X3NpbXBsZToKIAotICAgQmFja3BvcnRlZCByMTk2MDIsIHdoaWNoIGZpeGVzIHRoZSBkb3VibGUgZnJlZSBhdCBleGl0IHRoYXQgd2FzCi0gICBpbnRyb2R1Y2VkIGJ5IHIxOTQ2Mi4KKyAgIHNraXAgdGxzaXB2NiB0ZXN0IGlmIG5vdCB0bHN0Y3AvdGNwaXB2NiBkb21haW5zCiAKLTIwMTAtMTEtMDMgMTQ6NTkgIGJ2YXNzY2hlCisyMDEwLTExLTAxIDIzOjAzICBtYWdmcgogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiAgYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NtdV9jb21wYXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9jbXVfY29tcGF0LmMsIHNubXBsaWIvbWliLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKIAotICAgQ0hBTkdFUzogYnVpbGRpbmc6IFZFUlNJT04gaXMgYWdhaW4gYSBudW1iZXIgaW5zdGVhZCBvZiBhIEMKLSAgIGV4cHJlc3Npb24sIHN1Y2ggdGhhdCB0aGUgUGVybCBtb2R1bGVzIGJ1aWxkIGFnYWluLgotCi0yMDEwLTExLTAzIDE0OjQ3ICBidmFzc2NoZQotCi0gICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaDoKLQotICAgRml4ZWQgYW4gaW5jb3JyZWN0IGZpbGUgaGVhZGVyIChhIHNvdXJjZSBjb2RlIGNvbW1lbnQpLgorICAgTkVXUzogc25tcGxpYjogUmVtb3ZlIHRoZSBzdXBwb3J0IGZvciBDTVUgY29tcGF0aWJpbGl0eSBzaW5jZQorICAgdGhlcmUgaXMgbm8gd2F5IHRvIGVuYWJsZSBpdCBhbmQgbm9ib2R5IGhhdmUgbWlzc2VkIGl0LgogCiAyMDEwLTExLTAxIDE2OjUwICBkdHMxMgogCkBAIC0xNTUzLDY4ICszNTIyOCwyNzggQEAKIAogMjAxMC0xMS0wMSAxNjo0NyAgZHRzMTIKIAotICAgKiBtYW4vc25tcGdldC4xLmRlZiwgbWFuL3NubXBnZXRuZXh0LjEuZGVmOgorICAgKiBtYW4vc25tcGdldC4xLmRlZjoKIAogICAgRG9jdW1lbnQgLUNmIGluIHRoZSB0d28gbWFuIHBhZ2VzIHNlcGFyYXRlbHkuCiAKLTIwMTAtMTEtMDEgMTY6MzAgIGR0czEyCisyMDEwLTEwLTI5IDIyOjMxICByc3RvcnkKIAotICAgKiAgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9zbm1wYnVsa2dldC4xLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wYnVsa3dhbGsuMS5kZWYsIG1hbi9zbm1wZ2V0LjEuZGVmLCBtYW4vc25tcGdldG5leHQuMS5kZWYsIAotICAgICAgICBtYW4vc25tcHNldC4xLmRlZiwgbWFuL3NubXB0cmFwLjEuZGVmLCBtYW4vc25tcHRyYXBkLjguZGVmLCAgIAotICAgICAgbWFuL3NubXB3YWxrLjEuZGVmOgorICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKIAotICAgUmVtb3ZlIENNVSBjb3B5cmlnaHQgbm90aWNlIGZyb20gbWFuIHBhZ2VzIHRoYXQKLSAgIHdlcmUgbm90IGluaGVyaXRlZCBmcm9tIENNVS1TTk1QCi0gICAoYW5kIHF1YWxpZnkgdGhlIGNvcHlyaWdodCBmb3IgdGhvc2UgdGhhdCB3ZXJlKS4KKyAgIG51bGwgb3V0IGJpbyBwb2ludGVycyBhZnRlciBiZWluZyBmcmVlZDsgYmFpbCBvbiBjb25uZWN0aW9uCisgICB3aXRoIG5vIHNzbCBwb2ludGVyCiAKLTIwMTAtMTEtMDEgMTM6NTUgIGR0czEyCisyMDEwLTEwLTI5IDE0OjM1ICBidmFzc2NoZQogCi0gICAqICBtYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZiwgbWFuL2ZpeHByb2MuMS5kZWYsICAgCi0gICAgICBtYW4vbWliMmMtdXBkYXRlLjEuZGVmLCBtYW4vbWliMmMuMS5kZWYsIG1hbi9taWJfYXBpLjMuZGVmLCAgIAotICAgICAgbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZiwgbWFuL3JlYWRfY29uZmlnLjMuZGVmLCAgIAotICAgICAgbWFuL3NubXAuY29uZi41LmRlZiwgbWFuL3NubXBfYWdlbnRfYXBpLjMuZGVmLCAgIAotICAgICAgbWFuL3NubXBfYWxhcm0uMy5kZWYsIG1hbi9zbm1wX2FwaS4zLmRlZiwgbWFuL3NubXBfY29uZmlnLjUuZGVmLCAgCi0gICAgICAgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9zbm1wX3RyYXBfYXBpLjMuZGVmLCAgIAotICAgICAgbWFuL3NubXBidWxrZ2V0LjEuZGVmLCBtYW4vc25tcGJ1bGt3YWxrLjEuZGVmLCBtYW4vc25tcGNtZC4xLmRlZiwgCi0gICAgICAgIG1hbi9zbm1wY29uZi4xLmRlZiwgbWFuL3NubXBkLjguZGVmLCBtYW4vc25tcGQuY29uZi41LmRlZiwgICAKLSAgICAgIG1hbi9zbm1wZC5leGFtcGxlcy41LmRlZiwgbWFuL3NubXBkLmludGVybmFsLjUuZGVmLCAgIAotICAgICAgbWFuL3NubXBkZWx0YS4xLmRlZiwgbWFuL3NubXBkZi4xLmRlZiwgbWFuL3NubXBnZXQuMS5kZWYsICAgCi0gICAgICBtYW4vc25tcGdldG5leHQuMS5kZWYsIG1hbi9zbm1wbmV0c3RhdC4xLmRlZiwgbWFuL3NubXBzZXQuMS5kZWYsICAKLSAgICAgICBtYW4vc25tcHN0YXR1cy4xLmRlZiwgbWFuL3NubXB0YWJsZS4xLmRlZiwgbWFuL3NubXB0ZXN0LjEuZGVmLCAgIAotICAgICAgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsIG1hbi9zbm1wdHJhcC4xLmRlZiwgbWFuL3NubXB0cmFwZC44LmRlZiwgCi0gICAgICAgIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZiwgbWFuL3NubXB1c20uMS5kZWYsIG1hbi9zbm1wdmFjbS4xLmRlZiwKLSAgICAgICAgIG1hbi9zbm1wd2Fsay4xLmRlZiwgbWFuL3RrbWliLjEuZGVmLCBtYW4vdHJhcHRvZW1haWwuMS5kZWYsICAgCi0gICAgICBtYW4vdmFyaWFibGVzLjUuZGVmOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmM6CiAKLSAgIFN1cHByZXNzIGZvcmNpbmcgb2YgIkJlcmtlbGV5IERpc3RyaWJ1dGlvbiIgZm9vdGVyCi0gICAoQWxsb3dzIE5ldC1TTk1QIHZlcnNpb24gaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBtYW4KLSAgIHBhZ2UpCisgICBSZXZlcnRlZCBpbmNvcnJlY3QgY2hhbmdlcyBmcm9tIHIxOTU3NS4KIAotMjAxMC0xMS0wMSAxMzo0MiAgZHRzMTIKKzIwMTAtMTAtMjkgMTQ6MjEgIGJ2YXNzY2hlCiAKLSAgICogIG1hbi9taWIyYy4xLmRlZiwgbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9yZWFkX2NvbmZpZy4zLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wLmNvbmYuNS5kZWYsIG1hbi9zbm1wX2FnZW50X2FwaS4zLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wX2FsYXJtLjMuZGVmLCBtYW4vc25tcF9hcGkuMy5kZWYsICAgCi0gICAgICBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL3NubXBfdHJhcF9hcGkuMy5kZWYsICAgCi0gICAgICBtYW4vc25tcGJ1bGtnZXQuMS5kZWYsIG1hbi9zbm1wYnVsa3dhbGsuMS5kZWYsIG1hbi9zbm1wY21kLjEuZGVmLCAKLSAgICAgICAgbWFuL3NubXBjb25mLjEuZGVmLCBtYW4vc25tcGQuOC5kZWYsIG1hbi9zbm1wZC5jb25mLjUuZGVmLCAgIAotICAgICAgbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmLCBtYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYsICAgCi0gICAgICBtYW4vc25tcGdldC4xLmRlZiwgbWFuL3NubXBnZXRuZXh0LjEuZGVmLCBtYW4vc25tcG5ldHN0YXQuMS5kZWYsICAKLSAgICAgICBtYW4vc25tcHNldC4xLmRlZiwgbWFuL3NubXB0YWJsZS4xLmRlZiwgbWFuL3NubXB0ZXN0LjEuZGVmLCAgIAotICAgICAgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsIG1hbi9zbm1wdHJhcC4xLmRlZiwgbWFuL3NubXB0cmFwZC44LmRlZiwgCi0gICAgICAgIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZiwgbWFuL3NubXB1c20uMS5kZWYsIG1hbi9zbm1wdmFjbS4xLmRlZiwKLSAgICAgICAgIG1hbi9zbm1wd2Fsay4xLmRlZiwgbWFuL3ZhcmlhYmxlcy41LmRlZjoKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CiAKLSAgIFVwZGF0ZSBtYW4gcGFnZSBkYXRlc3RhbXBzIHRvIG1hdGNoIHRoZSBsYXRlc3QgKG5vbi10cml2aWFsKQotICAgY29udGVudCBjaGFuZ2UuCisgICBGaXhlZCBhIGJ1ZyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIxOTUxNS4KKworMjAxMC0xMC0yOSAxNDowMCAgYnZhc3NjaGUKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgUmV2ZXJ0ZWQgdGhlIGluY29ycmVjdCBjaGFuZ2VzIGZyb20gcjE5NTkzLgorCisyMDEwLTEwLTI5IDEzOjM4ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIFJlZHVjZWQgbnVtYmVyIG9mIGxlYWstYXQtZXhpdCBjb21wbGFpbnRzIHRyaWdnZXJlZCBieQorICAgc25tcGxpYi9jZXJ0X3V0aWwuYy4KKworMjAxMC0xMC0yOSAxMzozNyAgYnZhc3NjaGUKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jOgorCisgICBNb3JlIGxlYWstYXQtZXhpdCBmaXhlcy4KKworMjAxMC0xMC0yOSAxMzozNSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmg6CisKKyAgIE1vcmUgbGVhay1hdC1leGl0IGZpeGVzLgogCiAyMDEwLTEwLTI5IDEyOjE4ICBidmFzc2NoZQogCi0gICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKIAogICAgU3BlbGxpbmcgZml4IGluIGxvZyB0ZXh0czogY29udGFpbnRlciAtPiBjb250YWluZXIuCiAKKzIwMTAtMTAtMjkgMDk6NTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBSYW4gZmlsbHVwX2VudHJ5X2luZm8oKSB0aHJvdWdoIGluZGVudC4KKworMjAxMC0xMC0yOSAwOTo1NiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIE5ldGxpbmsgSVB2NiBwcmVmaXggcHJvY2Vzc2luZzogQWRkZWQgbW9yZSBkZWJ1ZyBzdGF0ZW1lbnRzLgorCisyMDEwLTEwLTI5IDA5OjU0ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKworICAgTWFkZSBhcmd1bWVudCBjaGVja2luZyBvZiBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJsZV9pbmZvKCkgbW9yZQorICAgc3RyaWN0LgorCisyMDEwLTEwLTI5IDA5OjUyICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmg6CisKKyAgIE1vcmUgTUlCLXNwZWNpZmljIGxlYWstYXQtZXhpdCBmaXhlcy4KKworMjAxMC0xMC0yOSAwNzo1NiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYzoKKworICAgTW9yZSBjb21waWxlciB3YXJuaW5nIGZpeGVzLgorCisyMDEwLTEwLTI4IDE4OjMxICBuYmEKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBGaXggY29uc3QgcXVhbGlmaWVyIHdhcm5pbmcKKworMjAxMC0xMC0yOCAxNzo1MyAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa3N0YXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYzoKKworICAgQ2xlYW4gb3V0IFNvbGFyaXMgd2FybmluZ3MKKworMjAxMC0xMC0yOCAxNzo1MiAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmM6CisKKyAgIExWTSBpcyBMaW51eCBvbmx5CisKKzIwMTAtMTAtMjggMTc6NTEgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgQXZvaWQgY2hhciBzdWJzY3JpcHRzIChzaWduZWQgY2hhcnNcISkKKworMjAxMC0xMC0yOCAxNzo0MyAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGNhc3RzIGFuZCBmb3JtYXQgc3BlY2lmaWVycyBpbiBkZWJ1ZyBvdXRwdXQKKworMjAxMC0xMC0yOCAxNzo0MSAgbmJhCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIENhc3QgdG8gc29ja2FkZHIgdG8gYXZvaWQgd2FybmluZworCisyMDEwLTEwLTI4IDE3OjQwICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYzoKKworICAgVW50YW5nbGUgcGljbCBmcm9tIGtzdGF0IGFjY2VzcyBzbyBpdCBjb21waWxlcyBvbiB4ODYgU29scmFpcworICAgMTAvT3BlblNvbGFyaXMKKworMjAxMC0xMC0yOCAxNToxNSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIE1vcmUgbGVhay1hdC1leGl0IGZpeGVzLgorCisyMDEwLTEwLTI4IDE1OjEzICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEFkZGVkIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoKSwKKyAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKCksIG5ldHNubXBfY2xvbmVfd2F0Y2hlcl9pbmZvKCkKKyAgIGFuZCBuZXRzbm1wX293bnNfd2F0Y2hlcl9pbmZvKCkuIFNlZSBhbHNvIHRoZSBEb3h5Z2VuIGNvbW1lbnRzCisgICBmb3IgbW9yZSBpbmZvLgorCiAyMDEwLTEwLTI4IDE0OjAyICBkdHMxMgogCiAgICAqIGxvY2FsL21pYjJjLmNoZWNrX3ZhbHVlcy5jb25mOgpAQCAtMTYyMiw2ICszNTUwNywxMyBAQAogICAgRml4IGxvZ2ljIG9mIHRlc3RpbmcgZm9yIG91dC1vZi1yYW5nZSBlbnVtIHZhbHVlcy4KICAgIFJlcG9ydGVkIGJ5IEJvcmlzIFp3ZWltdWVsbGVyLgogCisyMDEwLTEwLTI4IDEyOjIzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBHZXQgcmlkIG9mIE9wZW5TU0wtcmVsYXRlZCBjb21waWxhdGlvbiB3YXJuaW5ncy4gU2hvdWxkIHdvcmsgZm9yCisgICBib3RoIE9wZW5TU0wgdmVyc2lvbnMgMC45LnggYW5kIDEuMC54LgorCiAyMDEwLTEwLTI4IDExOjQ2ICBidmFzc2NoZQogCiAgICAqIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuYzoKQEAgLTE2MjksNiArMzU1MjEsMTkgQEAKICAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyAobWlzbWF0Y2ggYmV0d2VlbiBmb3JtYXQgc3BlY2lmaWNhdGlvbgogICAgYW5kIGFyZ3VtZW50KSB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHI2NTYyLgogCisyMDEwLTEwLTI4IDExOjQzICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jOgorCisgICBHZXQgcmlkIG9mIHJlY2VudGx5IGludHJvZHVjZWQgbWVtZHVwKCkgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMTAtMjggMTE6NDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIxOTU1MC4KKwogMjAxMC0xMC0yOCAxMTozMiAgYnZhc3NjaGUKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOgpAQCAtMTYzNiw2ICszNTU0MSwyMyBAQAogICAgUmV2ZXJ0ZWQgcjE5NTY1IGJlY2F1c2UgaXQgY2F1c2VkIGdjYyB0byByZXBvcnQgbW9yZSB3YXJuaW5ncwogICAgaW5zdGVhZCBvZiBsZXNzLgogCisyMDEwLTEwLTI4IDExOjE4ICBidmFzc2NoZQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIxOTU2Ni4KKworMjAxMC0xMC0yOCAxMDo0MCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oLCBzbm1wbGliL2NhbGxiYWNrLmM6CisKKyAgIFBhcnRpYWxseSByZXZlcnRlZCByMTk1MTU6IHJlbW92ZWQgdGhlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zCisgICBhbmQgZGF0YSBtZW1iZXJzIGFnYWluLCBidXQgd2l0aG91dCByZWludHJvZHVjaW5nIHRoZQorICAgbGVhay1hdC1leGl0LgorCiAyMDEwLTEwLTI4IDEwOjMyICBidmFzc2NoZQogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6CkBAIC0xNjQ0LDExICszNTU2Niw4MiBAQAogICAgbG9uZ2VyIG5lY2Vzc2FyeSB0byBjYXN0IHRoZXNlIHR3byBhcmd1bWVudHMgKGhhcyBiZWVuIHJldmVydGVkCiAgICB2aWEgcjE5NTY4KS4KIAotMjAxMC0xMC0yOCAxMDowNiAgYnZhc3NjaGUKKzIwMTAtMTAtMjggMDk6NDcgIGJ2YXNzY2hlCiAKLSAgICogdGVzdGluZy9ldmFsX3Rvb2xzLnNoOgorICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKIAotICAgQmFja3BvcnRlZCBJU0RFRklORUQgZnJvbSByMTg2NzAuCisgICBGaXhlZCB5ZXQgYW5vdGhlciBjcmFzaCBpbiBuZXRzbm1wX2NhY2hlX3JlbW92ZSgpLgorCisyMDEwLTEwLTI4IDA4OjQ0ICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIE1hZGUgaXQgZWFzaWVyIHRvIGVuYWJsZSB0aGUgbWVtb3J5IGxlYWsgY2hlY2tlciBidWlsdC1pbiBpbgorICAgTVNWQydzIEMgcnVudGltZSBsaWJyYXJ5LgorCisyMDEwLTEwLTI3IDIwOjM3ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jOgorCisgICBTaXplb2YgaGFzIHR5cGUgc2l6ZV90CisKKzIwMTAtMTAtMjcgMjA6MzUgIG5iYQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgUmVtb3ZlIHN1cGVyZmx1b3VzIGNhc3QKKworMjAxMC0xMC0yNyAxODo0MCAgbmJhCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIFNwcmlua2xlIHNvbWUgdW5zaWduZWRuZXNzIHNvIHZhcnMgYW5kIHBhcmFtcyBhZ3JlZSBvbiB0eXBlCisKKzIwMTAtMTAtMjcgMTg6MzggIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBJbml0aWFsaXplIHZhcnMgdGhhdCBnY2MgdGhpbmtzIGFyZSB1bmluaXRpYWxpemVkCisKKzIwMTAtMTAtMjcgMTg6MzYgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgQSBtb3JlIG1lYW5pbmdmdWwgdGVzdCBmb3IgTUxEX0xJU1RFTkVSX1FVRVJZCisKKzIwMTAtMTAtMjcgMTg6MzUgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuaDoKKworICAgcHJvdG90eXBlcyBhbmQgaW5jbHVkZXMgd2VyZSBtaXNzaW5nCisKKzIwMTAtMTAtMjcgMTg6MzMgIG5iYQorCisgICAqIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCBhcHBzL3NubXB0ZXN0LmM6CisKKyAgIENoZWNrIGZnZXRzIHJldHVybgogCiAyMDEwLTEwLTI1IDIwOjU5ICBkdHMxMgogCkBAIC0xNjY0LDYgKzM1NjU3LDE0IEBACiAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMDU4MTAxOiBXcml0ZWFibGUgJ2xvbmcnIGluc3RhbmNlcyB3b3JrIG9uCiAgICA2NC1iaXQgc3lzdGVtcywgYnV0IG5vdCB3cml0YWJsZSAnaW50J3MKIAorMjAxMC0xMC0yNSAxNjowNSAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIERvbid0IGF0dGVtcHQgdG8gcHJvY2VzcyB1bnJlY29nbmlzZWQgImlnbm9yZSoiIGRpcmVjdGl2ZXMuCisgICBQYXNzIHRoZXNlIHRocm91Z2ggdG8gdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVyZWQgY29uZmlnIGhhbmRsZXJzCisgICAoaWYgYW55KQorCiAyMDEwLTEwLTI1IDE1OjU2ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOgpAQCAtMTY3OSwxNyArMzU2ODAsMjk5IEBACiAKIDIwMTAtMTAtMjUgMTI6NTQgIGJ2YXNzY2hlCiAKLSAgICogdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGw6CisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGU6CiAKICAgIENIQU5HRVM6IFdpbjMyOiB0ZXN0aW5nOiBBdm9pZCB0aGF0IFQyMDAgZmFpbHMgb24ga25vd24gTWljcm9zb2Z0CiAgICBTTk1QIGV4dGVuc2lvbiBETEwgYnVncy4KIAotMjAxMC0xMC0yMiAwOToxOSAgYnZhc3NjaGUKKzIwMTAtMTAtMjUgMDg6MDYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAgIAorICAgICAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgTkVXUzogTGludXg6IHNubXBkIGlzIGFnYWluIHNpbmdsZS10aHJlYWRlZC4KKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjk1OTgxMTogZnJvbSBKYW4gU2FmcmFuZWs6IFJlaW1wbGVtZW50CisgICBMaW51eCBOZXRsaW5rIElQdjYgcHJlZml4IGxpc3RlbmVyLgorCisyMDEwLTEwLTI1IDA3OjE1ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBBdm9pZCB0aGF0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgY2FzdGluZyBhd2F5IHRoZSAnY29uc3QnCisgICBhdHRyaWJ1dGUgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBzc2xjdHhfY2xpZW50X3NldHVwKCkgYW5kCisgICBzc2xjdHhfc2VydmVyX3NldHVwKCkuCisKKzIwMTAtMTAtMjUgMDY6MjggIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaDoKKworICAgaW5jbHVkZSBuZWVkZWQgcHJvdG90eXBlcworCisyMDEwLTEwLTI1IDA2OjE2ICBuYmEKKworICAgKiAgYXBwcy9zbm1wdGxzLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIEFkanVzdCB0eXBlcyB0byBiZXR0ZXIgbWF0Y2ggdXNhZ2UKKworMjAxMC0xMC0yNSAwNjoxNSAgbmJhCisKKyAgICogbWFuL3NubXBjbWQuMS5kZWY6CisKKyAgIFJldmVhbCBoaWRkZW4gLWUgYW5kIC11IG9wdGlvbnMKKworMjAxMC0xMC0yNSAwNjoxNCAgbmJhCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGluY2x1ZGUgbmVlZGVkIHByb3RvdHlwZXMKKworMjAxMC0xMC0yNSAwNjowMSAgbmJhCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5jLCBhcHBzL3NubXB0cmFwZC5jLAorICAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CisKKyAgIGluY2x1ZGUgbmVlZGVkIHByb3RvdHlwZXMKKworMjAxMC0xMC0yNSAwNjowMCAgbmJhCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwKKyAgICAgICAgIGFwcHMvc25tcHRyYXBkX3NxbC5jOgorCisgICBjb25zdC1qdWdnbGluZyAtIHdlIGRvbnQgbGlrZSB3YXJuaW5ncworCisyMDEwLTEwLTIzIDExOjU2ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBSZWVuYWJsZWQgY2FjaGUgcmVtb3ZhbCBhbmQgZnJlZWluZyAvIG1vdmVkIGNhY2hlIHJlZmNvdW50CisgICBpbmNyZW1lbnRpbmcgdG8gbmV0c25tcF9jYWNoZV9vd25zX2NhY2hlKCkgLyBjb252ZXJ0ZWQgdGFicyB0bworICAgc3BhY2VzLgorCisyMDEwLTEwLTIzIDExOjA0ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBGaXhlZCBhbm90aGVyIGNyYXNoIGluIG5ldHNubXBfY2FjaGVfcmVtb3ZlKCkuCisKKzIwMTAtMTAtMjMgMTE6MDAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBSZW1vdmluZyB0aGUgbGFzdCBjYWNoZSB2aWEKKyAgIG5ldHNubXBfY2FjaGVfcmVtb3ZlKCkgZG9lcyBubyBsb25nZXIgdHJpZ2dlciBhIGNyYXNoLgorCisyMDEwLTEwLTIzIDEwOjU3ICBidmFzc2NoZQorCisgICAqIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYzoKKworICAgVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2FnZW50bGliOiBJbnRyb2R1Y2VkCisgICBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgpLgorCisyMDEwLTEwLTIyIDE1OjI0ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBEaXNhYmxlZCBjYWNoZSBkZWFsbG9jYXRpb24gYmVjYXVzZSBpdCBtYWtlcyB0d28gdW5pdCB0ZXN0cyBmYWlsCisgICAtIHRvIGJlIGFuYWx5emVkIGZ1cnRoZXIuCisKKzIwMTAtMTAtMjIgMTU6MDMgIGJ2YXNzY2hlCisKKyAgICogCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jOgorCisgICBCdWlsZHMgYWdhaW4uCisKKzIwMTAtMTAtMjIgMTQ6NDkgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogTUlCLXNwZWNpZmljIGxlYWstYXQtZXhpdCBmaXhlcy4KKworMjAxMC0xMC0yMiAxNDo0MiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0Lmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBleGFtcGxlIE1JQjogQWRkZWQgc2h1dGRvd24gZnVuY3Rpb24gdGhhdCBmcmVlcworICAgYWxsIG1lbW9yeSBvd25lZCBieSB0aGlzIE1JQiBpbXBsZW1lbnRhdGlvbi4KKworMjAxMC0xMC0yMiAxNDo0MCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogQXV0b21hdGljYWxseSBmcmVlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgICBhbGxvY2F0ZWQgYnkgbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQoKS4KKworMjAxMC0xMC0yMiAxNDozOCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IENvdW50IHRoZSBudW1iZXIgb2YgdXNlcnMgb2YgYSBuZXRzbm1wX2NhY2hlIGRhdGEKKyAgIHN0cnVjdHVyZSBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0LgorCisyMDEwLTEwLTIyIDE0OjM2ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEFkZGVkIHJlZmVyZW5jZSBjb3VudCBpbiB0aGUKKyAgIG5ldHNubXBfYmFieV9zdGVwc19tb2RlcyBkYXRhIHN0cnVjdHVyZSBhbmQgbWFkZSBzdXJlIHRoYXQgdGhpcworICAgZGF0YSBzdHJ1Y3R1cmUgaXMgYXV0b21hdGljYWxseSBmcmVlZCB3aGVuIHRoZSBoYW5kbGVyIHRoYXQgb3ducworICAgaXQgaXMgdW5yZWdpc3RlcmVkLgorCisyMDEwLTEwLTIyIDE0OjM0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogQWRkZWQgbmV0c25tcF91bnJlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZSgpLgorCisyMDEwLTEwLTIyIDA4OjUxICBidmFzc2NoZQogCiAgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CiAKLSAgIEJhY2twb3J0ZWQgcjE5NTI1OiBtYWRlIHN1cmUgdGhhdCBjbGVhbl9zdWJ0cmVlKCkgZGVhbGxvY2F0ZXMgYWxsCi0gICBjb250ZXh0IGNhY2hlIG5vZGVzLgorICAgRm9sbG93LXVwIGZvciByMTk1MTE6IG1hZGUgc3VyZSB0aGF0IGNsZWFuX3N1YnRyZWUoKSBkZWFsbG9jYXRlcworICAgYWxsIGNvbnRleHQgY2FjaGUgbm9kZXMuCisKKzIwMTAtMTAtMjIgMDg6NDkgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBuZXRzbm1wX2NhY2hlX2ZyZWUoKTogQSBtb3JlIGRldGFpbGVkIG1lc3NhZ2UgaXMKKyAgIG5vdyBsb2dnZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGZyZWUgYSBjYWNoZSB0aGF0IGlzIHN0aWxsIGluIHRoZQorICAgY2FjaGUgbGlzdC4KKworMjAxMC0xMC0yMiAwNjozOSAgYnZhc3NjaGUKKworICAgKiBsdG1haW4uc2g6CisKKyAgIFJldmVydGVkIGx0bWFpbi5zaCBjaGFuZ2VzIGZyb20gcjE5NTIyLgorCisyMDEwLTEwLTIyIDA2OjM0ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgbHRtYWluLnNoOgorCisgICBSZWdlbmVyYXRlZCBhdXRvY29uZi9hdXRvbWFrZS9saWJ0b29sLWdlbmVyYXRlZCBmaWxlcyBieSBydW5uaW5nCisgICBhdXRvcmVjb25mIC1mLgorCisyMDEwLTEwLTIxIDA3OjUxICBidmFzc2NoZQorCisgICAqIGx0bWFpbi5zaDoKKworICAgUmVhcHBsaWVkIHIxODcyNityMTg3NjY6IG1ha2UgbGlidG9vbCBzdXBwb3J0IC1mc3RhY2stcHJvdGVjdG9yKi4KKyAgIFNlZSBhbHNvCisgICBodHRwOi8vYmxvZy5nbWFuZS5vcmcvZ21hbmUuY29tcC5nbnUubGlidG9vbC5idWdzL21vbnRoPTIwMTAwNjAxCisgICBmb3IgdGhlIGNvbmZpcm1hdGlvbiB0aGF0IHRoaXMgaXMgYSBsaWJ0b29sIGJ1Zy4KKworMjAxMC0xMC0yMCAyMDoxNiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEF2b2lkIHRoYXQgbmV0c25tcF9jaGVja19kZWZpbmVkbmVzcygpIHRyaWdnZXJzIGEgYnVpbGQgZmFpbHVyZQorICAgd2hlbiBjb21waWxlZCBhZ2FpbnN0IG9sZCBWYWxncmluZCBoZWFkZXJzLiBOb3RlOiB0aGUgaW50cm9kdWNlZAorICAgY2hlY2sgaXMgc3RyaWN0ZXIgdGhhbiBuZWNlc3NhcnkgLSBWQUxHUklORF9QUklOVEZfQkFDS1RSQUNFKCkKKyAgIHdhcyBpbnRyb2R1Y2VkIGluIFZhbGdyaW5kIDMuNS4wIG9yIGJlZm9yZSAobm90IHN1cmUgd2hpY2gKKyAgIHZlcnNpb24pLgorCisyMDEwLTEwLTIwIDE3OjEzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdG9vbHMuYzoKKworICAgYWRkZWQgYSBjb21tZW50IGluIGNvZGUgbm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYSBmYWlybHkgcmVjZW50CisgICB2YWxncmluZAorCisyMDEwLTEwLTIwIDE3OjAwICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZToKKworICAgcmVyYW4gYXV0b2NvbmYgYWZ0ZXIgdXBkYXRpbmcgbGlidG9vbAorCisyMDEwLTEwLTIwIDE2OjU5ICBoYXJkYWtlcgorCisgICAqICBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGluc3RhbGwtc2gsIGx0bWFpbi5zaCwgbTQvbGlidG9vbC5tNCwgICAKKyAgICAgIG00L2x0b3B0aW9ucy5tNCwgbTQvbHR2ZXJzaW9uLm00LCBtNC9sdH5vYnNvbGV0ZS5tNDoKKworICAgdXBkYXRlIHRvIGxpYnRvb2wgMi40CisKKzIwMTAtMTAtMjAgMTY6NTkgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBkaXN0L2F1dG9jb25mLXZlcnNpb246CisKKyAgIHVwZGF0ZWQgdG8gYXV0b2NvbmYgMi42OAorCisyMDEwLTEwLTIwIDE0OjI2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaCwgc25tcGxpYi9jYWxsYmFjay5jLCAgIAorICAgICAgd2luMzIvbWliX21vZHVsZV9zaHV0ZG93bi5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogQWRkZWQgdGhlIGZ1bmN0aW9ucyBuZXRzbm1wX2R1cGxpY2F0ZV92YXJpYWJsZSgpCisgICBhbmQgbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUoKS4KKyAgIENIQU5HRVM6IGFnZW50OiBNZW1vcnkgYWxsb2NhdGVkIGJ5IG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpCisgICBmb3Igc3RvcmluZyBTTk1QIHZhcmlhYmxlcyBpcyBub3cgZnJlZWQgd2hlbiB0aGUgYXNzb2NpYXRlZAorICAgaGFuZGxlciBpcyB1bnJlZ2lzdGVyZWQuCisgICBDSEFOR0VTOiBhZ2VudDogQ2FsbGJhY2sgZnVuY3Rpb24gZGF0YSBkZWFsbG9jYXRpb24gZG9lcyBubworICAgbG9uZ2VyIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBBZ2VudFggc2Vzc2lvbiAtIHRoZQorICAgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCBmb3IgQWdlbnRYIHNlc3Npb25zIGlzIG5vdyBkZWFsbG9jYXRlZAorICAganVzdCBhcyB0aGF0IGZvciBhbnkgb3RoZXIgc2Vzc2lvbi4gVGhpcyBmaXhlcyBhIGxlYWstYXQtZXhpdC4KKyAgIENIQU5HRVM6IGFnZW50OiBOb3RpZnkgZmlsdGVyIHRhYmxlOiBDYWxsYmFjayBmdW5jdGlvbiBkYXRhCisgICBkZWFsbG9jYXRpb24gZG9lcyBubyBsb25nZXIgZnJlZSB0aGUgZGF0YSBpbgorICAgKiAgICAgKnNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyIC0gdGhpcyBpcyBub3cgZG9uZSBieSAgCisgICAgICAgc2h1dGRvd25fc25tcE5vdGlmeUZpbHRlclRhYmxlKCkuICAgIENIQU5HRVM6IFdpbjMyOgorICAgICAgc2h1dGRvd25fc25tcE5vdGlmeUZpbHRlclRhYmxlKCkgYW5kCisKKyAgIHNodXRkb3duX3dpbkV4dERMTCgpIGFyZSBub3cgaW52b2tlZCB3aGVuIHRoZSBOZXQtU05NUCBzZXJ2aWNlIGlzCisgICBzdG9wcGVkLgorCisyMDEwLTEwLTIwIDEzOjQ3ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNXRhYmxlX2RhdGFzZXRfY2FnZW50bGliLmM6CisKKyAgIFVuaXQtdGVzdGluZywgVDAwNXRhYmxlX2RhdGFzZXRfY2FnZW50bGliOiBhZGRlZCBpbml0X2FnZW50KCkgYW5kCisgICBzaHV0ZG93bl9hZ2VudCgpIGNhbGxzLgorCisyMDEwLTEwLTIwIDEzOjEyICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jOgorCisgICBGaXggbm9uLUFOU0kgZnVuY3Rpb24gaGVhZGluZwogCiAyMDEwLTEwLTIwIDEyOjUxICByc3RvcnkKIApAQCAtMTcwMSw3ICszNTk4NCw3IEBACiAKICAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgICAKICAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgYWdlbnQvc25tcGQuYywgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisgICAgICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKIAogICAgQ0hBTkdFUzogc25tcGxpYjogQWRkZWQgc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwKCkuCiAgICBDSEFOR0VTOiBhZ2VudDogQ2FsbCBzaHV0ZG93bl9tYXN0ZXJfYWdlbnQoKSBhbmQgc2h1dGRvd25fYWdlbnQoKQpAQCAtMTcxNywxNCArMzYwMDAsODIgQEAKICAgIGlzIGZvciB0aGlzIGNoYW5nZSB0aGF0IGl0IHdhcyBuZWNlc3NhcnkgdG8gaW50cm9kdWNlIHRoZSBuZXcKICAgIGZ1bmN0aW9uIHNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCgpLgogCi0yMDEwLTEwLTIwIDA3OjU0ICBidmFzc2NoZQorMjAxMC0xMC0xOSAyMzo0OSAgbWFnZnIKIAotICAgKiB0ZXN0aW5nL2V2YWxfdG9vbHMuc2g6CisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9zaW1wbGU6CiAKLSAgIENIQU5HRVM6IHRlc3Rpbmc6IE1hZGUgaXQgcG9zc2libGUgdG8gYW5hbHl6ZSBhbGwgY29kZSBjb3ZlcmVkIGJ5Ci0gICB0aGUgcmVncmVzc2lvbiB0ZXN0cyB3aXRoIGEgZHluYW1pYyBhbmFseXplciwgYXQgbGVhc3QgaWYgdGhhdAotICAgYW5hbHl6ZXIgc3VwcG9ydHMgZm9sbG93aW5nIGNoaWxkIHByb2Nlc3Nlcy4KLSAgIChCYWNrcG9ydGVkIHIxOTI4MyBmcm9tIHRoZSB0cnVuay4pCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGQgbWlzc2luZyBwcmVjb25kaXRpb25zCisKKzIwMTAtMTAtMTkgMjI6MTEgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgZG9uJ3QgZGVmYXVsdCB0byBhcHBseWluZyB0byA1LjIKKworMjAxMC0xMC0xOSAyMjoxMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICBhZGRlZCB0aGUgNS42IGJyYW5jaAorCisyMDEwLTEwLTE5IDIxOjEzICBuYmEKKworICAgKiBzbm1wbGliL3BhcnNlLmM6CisKKyAgIEJVRyAzMDc5MDcyIGZyb20gRGF2ZSBCZWFsOiBmaXggYnVmZmVyIG92ZXJmbG93IGZyb20gYmFkIHVzZSBvZgorICAgc3RybmNhdAorCisyMDEwLTEwLTE5IDIwOjU1ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jOgorCisgICBQQVRDSDogMzA4NTI5NSBmcm9tIEJpbGwgRmVubmVyOiByZWNvZ25pemUgTElTVEVOIHN0YXRlIGFnYWluCisKKzIwMTAtMTAtMTkgMjA6MDkgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jOgorCisgICBGaXggY29tcGlsZXIgd2FybmluZ3MKKworMjAxMC0xMC0xOSAyMDowOCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmM6CisKKyAgIEZpeCByZXR1cm5pbmcgZ2FyYmFnZSBpbiBoclNXSW5zdGFsbGVkTmFtZSAoc2VlIHJldiAxOTQ4NCBmb3IKKyAgIGZ1cnRoZXIgbm90ZXMpCisKKzIwMTAtMTAtMTkgMTk6NTggIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYzoKKworICAgUHJvdGVjdCBhZ2FpbnN0IHVuc2FmZSAoJSkgZGV2aWNlIG5hbWVzCisKKzIwMTAtMTAtMTkgMTk6NTcgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICBTb2xhcmlzIGRvZXMgbm90IHVzZSBnZXRzdGF0LCBzbyBkb250IGRlY2xhcmUgaXQKKworMjAxMC0xMC0xOSAxOTo1NiAgbmJhCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmM6CisKKyAgIHVkcC90Y3AgY29uZnVzaW9uIGluIGRlYnVnIGhhbmRsZQorCisyMDEwLTEwLTE5IDE5OjU0ICBuYmEKKworICAgKiBhcHBzL3NubXB0YWJsZS5jOgorCisgICBBYm9ydCBhZnRlciBiYWQgLUM/IG9wdGlvbgorCisyMDEwLTEwLTE5IDE5OjUzICBuYmEKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBEZWxldGUgcmVkdW5kYW50IGV4dGVybiBkZWNsYXJhdGlvbnMKIAogMjAxMC0xMC0xOSAxODowOCAgYnZhc3NjaGUKIApAQCAtMTczNCw2ICszNjA4NSw2NiBAQAogICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBBdm9pZCB0aGF0IE1TVkMgMjAxMCBwcmludHMgYSB3YXJuaW5nCiAgICBtZXNzYWdlIGFib3V0IHJlZGVmaW5pbmcgRUFERFJJTlVTRS4KIAorMjAxMC0xMC0xOSAxODowNSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBBdm9pZCB0aGF0IE1TVkMgcmVwb3J0cyBhIHdhcm5pbmcgbWVzc2FnZSBhYm91dAorICAgcmVkZWZpbml0aW9uIG9mIHRoZSBtYWxsb2MoKSBtYWNybyBkdXJpbmcgYnVpbGRpbmcgdGhlIE5ldC1TTk1QCisgICBzb3VyY2UgY29kZS4KKworMjAxMC0xMC0xOSAwNzowNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEZhY3RvciBvdXQgY29tbW9uIGNvbmZpZ19hZGRfbWliIHN0YXRtZW50cworCisyMDEwLTEwLTE4IDE0OjIyICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBNYXJrIHRoZSBwcm9wZXIgaGFuZGxlciB0aGF0IG93bnMgdGhlIHRhYmxlIHJlZ2lzdHJhdGlvbgorICAgaW5mb3JtYXRpb24uCisKKzIwMTAtMTAtMTggMTA6NTQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBBZGRlZCBmdW5jdGlvbnMgbmV0c25tcF9oYW5kbGVyX293bnNfdGFicmVxKCksCisgICBuZXRzbm1wX3JlZ2lzdHJhdGlvbl9vd25zX3RhYnJlcSgpLCBuZXRzbm1wX2l0ZXJhdG9yX2Nsb25lKCkuCisgICBFeHBvcnRlZCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2Nsb25lKCkuCisgICBDSEFOR0VTOiBhZ2VudDogTW9kaWZpZWQgbmV0c25tcF9pdGVyYXRvcl9kZWxldGVfdGFibGUoKSBzdWNoCisgICB0aGF0IGl0IGZyZWVzIHRoZSB0YWJsZSByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gc3RvcmVkIGluIGEKKyAgIHRhYmxlIGl0ZXJhdG9yIHRvby4KKyAgIENIQU5HRVM6IGFnZW50OiBNb2RpZmllZCBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcl9oYW5kbGVyKCkKKyAgIHN1Y2ggdGhhdCB0aGUgdGFibGUgaXRlcmF0b3IgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaXMgZnJlZWQKKyAgIHdoZW4gdGhlIGFzc29jaWF0ZWQgaGFuZGxlciBpcyBmcmVlZC4KKyAgIAorICAgUmVzdG9yZWQgdGhlIGJlaGF2aW9yIG9mIG5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIoKSB0byB0aGF0IG9mCisgICByMTk0NDksIHRoYXQgaXMsIG5vdCBzZXR0aW5nIHVwIHRoZSBkYXRhX2ZyZWUgcG9pbnRlciBiZWNhdXNlIG5vdAorICAgYWxsIGNhbGxlcnMgb2YgbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcigpIGV4cGVjdCB0aGF0IHRhYmxlCisgICByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gaXMgZnJlZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBoYW5kbGVyIGlzCisgICBmcmVlZC4KKworMjAxMC0xMC0xOCAxMDozNCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgY2FzdGluZyBhd2F5IGNvbnN0bmVzcy4KKwogMjAxMC0xMC0xOCAwODo1MiAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9zbm1wZC5jOgpAQCAtMTc0Miw2ICszNjE1MywxMyBAQAogICAgd2luZG93LCB0aGUgc25tcGQgcHJvY2VzcyBub3cgc3RvcHMgdXBvbiB0aGUgZmlyc3Qga2V5IHByZXNzLgogICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gZGVidWcgc25tcGQuZXhlIGZvciBtZW1vcnkgbGVha3MuCiAKKzIwMTAtMTAtMTggMDY6MjUgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbjMyOiBidWlsZHMgYWdhaW4gd2l0aG91dCB3YXJuaW5ncyB3aXRoIE1TVkMgNi4KKwogMjAxMC0xMC0xOCAwNjoxNSAgbWFnZnIKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CkBAIC0xNzc3LDEyICszNjE5NSw2NSBAQAogCiAyMDEwLTEwLTE3IDE3OjMzICBidmFzc2NoZQogCi0gICAqIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmM6CisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4uYzoKIAogICAgQ0hBTkdFUzogc25tcGxpYjogQXZvaWQgdGhhdCBWYWxncmluZCBjb21wbGFpbnMgYWJvdXQKICAgIHVuaW5pdGlhbGl6ZWQgZGF0YSBmb3IgdGhlIGJ1ZmZlcnMgcmV0dXJuZWQgYnkKICAgIG5ldHNubXBfY2FsbGJhY2tfcmVjdigpIGFuZCBuZXRzbm1wX2NhbGxiYWNrX2hvb2tfYnVpbGQoKS4KIAorMjAxMC0xMC0xNyAxNjo1NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiB0YWJsZV9oZWxwZXJfaGFuZGxlcigpLCA2NC1iaXQgYXJjaGl0ZWN0dXJlczoKKyAgIGF2b2lkIHBhc3NpbmcgYSBwb2ludGVyIHRvIGEgMzItYml0IHZhbHVlIHRvIGEgZnVuY3Rpb24gdGhhdAorICAgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYSA2NC1iaXQgdmFsdWUgKHBhcnNlX29uZV9vaWRfaW5kZXgoKSkuIE5vdAorICAgc3VyZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBidWcgd2VyZS4gSXQgbWlnaHQgaGF2ZSBjYXVzZWQKKyAgIHZlcnkgc3RyYW5nZSB0YWJsZSBiZWhhdmlvciBvbiA2NC1iaXQgYmlnIGVuZGlhbiBzeXN0ZW1zLgorICAgRm91bmQgdGhpcyB2aWEgVmFsZ3JpbmQuCisKKzIwMTAtMTAtMTcgMTY6NTEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBBdm9pZCB0aGF0IGhyU1dSdW5QYXRoIGNvbnRhaW5zIHRyYWlsaW5nIGdhcmJhZ2UKKyAgIGNoYXJhY3RlcnMgb24gTGludXggc3lzdGVtcy4KKyAgIEZvdW5kIHRoaXMgYnkgYW5hbHl6aW5nIGEgVmFsZ3JpbmQgY29tcGxhaW50LiBGb3IgYW55b25lIHdobyBpcworICAgd29uZGVyaW5nIHdoeSB0aGlzIHBhdGNoIG1ha2VzIHNlbnNlLCBhIHF1b3RlIGZyb20gdGhlIGdsaWJjCisgICBzbnByaW50ZigpIGRvY3VtZW50YXRpb24KKyAgIChodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliYy9tYW51YWwvaHRtbF9ub2RlL0Zvcm1hdHRlZC1PdXRwdXQtRnVuY3Rpb25zLmh0bWwpOgorICAgPHF1b3RlPgorICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQgYmUKKyAgIGdlbmVyYXRlZCBmb3IgdGhlIGdpdmVuIGlucHV0LCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIG51bGwuIElmCisgICB0aGlzIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gc2l6ZSwgbm90IGFsbCBjaGFyYWN0ZXJzIGZyb20KKyAgIHRoZSByZXN1bHQgaGF2ZSBiZWVuIHN0b3JlZCBpbiBzLgorICAgPC9xdW90ZT4KKyAgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIGJlaGF2aW9yLiBBIHF1b3RlCisgICBmcm9tIGh0dHA6Ly9vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA3OTA4Nzk5L3hzaC9zbnByaW50Zi5odG1sOgorICAgPHF1b3RlPgorICAgUkVUVVJOIFZBTFVFCisgICBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgbnVtYmVyIG9mCisgICBieXRlcyB0cmFuc21pdHRlZCBleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgaW4gdGhlIGNhc2Ugb2YKKyAgIHNwcmludGYoKSBvciBzbnByaW50ZigpIG9yIGEgbmVnYXRpdmUgdmFsdWUgaWYgYW4gb3V0cHV0IGVycm9yCisgICB3YXMgZW5jb3VudGVyZWQuCisgICA8L3F1b3RlPgorCisyMDEwLTEwLTE3IDE0OjMxICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IEl0IGlzIGFnYWluIHBvc3NpYmxlIHRvIHJ1biBhbiBpbmRpdmlkdWFsIHRlc3QKKyAgIHZpYSB0aGUgc2NyaXB0IHRlc3RpbmcvUlVOVEVTVFMuCisKKzIwMTAtMTAtMTcgMTQ6MjggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQWRkZWQgdGhlIGZ1bmN0aW9uIG5ldHNubXBfY2hlY2tfZGVmaW5lZG5lc3MoKSwKKyAgIHdoaWNoIGhlbHBzIHRvIGZpbmQgdGhlIGNhdXNlIG9mIHVuZGVmaW5lZCB2YWx1ZSBlcnJvcnMgYXMKKyAgIHJlcG9ydGVkIGJ5IFZhbGdyaW5kLgorCiAyMDEwLTEwLTE3IDE0OjI0ICBidmFzc2NoZQogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oOgpAQCAtMTc5MCwyOSArMzYyNjEsMTU4IEBACiAgICBSZW1vdmVkIGFuIG9ic29sZXRlIGRlY2xhcmF0aW9uOiB0aGUgZnVuY3Rpb24gYWdlbnR4X2J1aWxkKCkgaGFzCiAgICBiZWVuIHJlbW92ZWQgYSBsb25nIHRpbWUgYWdvLgogCisyMDEwLTEwLTE3IDE0OjA1ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIHRoZSBWYWxncmluZCBoZWFkZXIgZmlsZXMuCisKKzIwMTAtMTAtMTcgMTI6MDEgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgRm9sbG93LXVwIGZvciByMTk0Nzc6IG1hZGUgdGhlIGluc2VydGVkIHR5cGVjYXN0cyBwb3J0YWJsZS4KKworMjAxMC0xMC0xNyAxMTowNCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTk0NzY6IGZpeGVkIGEgdHlwby4KKworMjAxMC0xMC0xNyAwOTozNiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBhIGZldyBjb21waWxlciB3YXJuaW5ncyBieSBpbnNlcnRpbmcgYXBwcm9wcmlhdGUgY2FzdHMuCisKKzIwMTAtMTAtMTcgMDk6MjUgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVUU05NUF9SRU1PVkVfQ09OU1QoKS1yZWxhdGVkIGNsZWFudXAuCisKKzIwMTAtMTAtMTcgMDE6NDEgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsICAgCisgICAgICBhZ2VudC9zbm1wZC5jOgorCisgICBORVdTOiBzbm1wZDogUmVtb3ZlIHV0aWxfZnVuY3MvRXhpdCBmcm9tIHRoZSByZXF1aXJlbWVudCBzZXRzIG9mCisgICB1dGlsX2Z1bmNzIGFuZCBkZWZhdWx0X21vZHVsZXMuCisgICBORVdTOiBzbm1wZDogTmV2ZXIgdXNlIEV4aXQgdG8gdGVybWluYXRlIHRoZSBhZ2VudC4KKworMjAxMC0xMC0xNiAyMjozMiAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgYWdlbnQvc25tcGQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgdGhlIHNldHRpbmcgb2YgdGhlIGFyZ3ZyZXN0YXJ0KiB2YXJpYWJsZXMKKyAgIG9wdGlvbmFsIG9uIFVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUuCisgICBORVdTOiBzbm1wZDogUmVtb3ZlIHV0aWxfZnVuY3MvcmVzdGFydCBmcm9tIHRoZSByZXF1aXJlbWVudCBzZXRzCisgICBvZiB1dGlsX2Z1bmNzIGFuZCBkZWZhdWx0X21vZHVsZXMuCisgICBDSEFOR0VTOiBzbm1wZDogQWRkIHV0aWxfZnVuY3MvcmVzdGFydCB0byB0aGUgcmVxdWlyZW1lbnQgc2V0IG9mCisgICB1Y2Qtc25tcC92ZXJzaW9uaW5mby4KKworMjAxMC0xMC0xNiAyMjowNSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEV4dGVuZCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGF0YV9jbG9uZSBhbmQKKyAgIGRhdGFfZnJlZQorCisyMDEwLTEwLTE2IDIyOjAzICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogTWFrZSBpdCBwb3NzaWJsZSB0byBjb3B5IHdhdGNoZWQgZGF0YSBpdGVtcworICAgd2l0aG91dCBtZW1vcnkgbGVha3MuCisKKzIwMTAtMTAtMTYgMjI6MDEgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy93YXRjaGVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGNtcAorCisyMDEwLTEwLTE2IDE5OjQ0ICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBEbyBub3QgbGVhayB0aGUgbGltaXRzIG9mIHNjYWxhcl9ncm91cCBvYmplY3RzIG9uCisgICBzaHV0ZG93bi4KKwogMjAxMC0xMC0xNiAwODozNyAgYnZhc3NjaGUKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQ6CiAKICAgIFNwZWxsaW5nIGZpeDogZHVscGljYXRlIC0+IGR1cGxpY2F0ZS4KIAotMjAxMC0xMC0xNSAxMjo1MyAgYnZhc3NjaGUKKzIwMTAtMTAtMTYgMDg6MzQgIGJ2YXNzY2hlCiAKLSAgICogIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsICAgCi0gICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0Lmg6CisgICAqIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYzoKIAotICAgQ0hBTkdFUzogc25tcGxpYjogQWRkZWQgZnVuY3Rpb24gbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQoKS4KLSAgIENIQU5HRVM6IHNubXBsaWI6IEFkZGVkIGRlY2xhcmF0aW9uIGZvciB0aGUgZnVuY3Rpb24KLSAgIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKSBpbiBhIHB1YmxpYyBhZ2VudCBoZWFkZXIgZmlsZS4KLSAgIENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIG1lbW9yeSBsZWFrIGluCi0gICBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkuCi0gICAoQmFja3BvcnRlZCByMTk0NTAgYW5kIHIxOTQ1NCBmcm9tIHRydW5rLikKKyAgIEFkZGVkIG1vcmUgdGVzdCBjb2RlLgorCisyMDEwLTEwLTE2IDA4OjMzICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZS5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTQ2NTogaGFuZGxlIG91dC1vZi1tZW1vcnkgcHJvcGVybHkgLyByZW1vdmVkIGEKKyAgIGR1cGxpY2F0ZSBmdW5jdGlvbi4KKworMjAxMC0xMC0xNSAxOToxNyAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYWdlbnRsaWJfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhZ2VudGxpYl9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDV0YWJsZV9kYXRhc2V0X2NhZ2VudGxpYi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA1dGFibGVfZGF0YXNldF9jbGliLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jLAorICAgICAgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2xpYi5jOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBJbnRyb2R1Y2VkIG5ldyB0ZXN0IHR5cGUgbmV4dCB0byBjYXBwIGFuZCBjbGliOgorICAgY2FnZW50bGliLgorCisyMDEwLTEwLTE1IDE4OjU2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jbGliLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IEFkZGVkIG5ldHNubXBfbWliX2hhbmRsZXIuZGF0YV9jbG9uZSwgYSBmdW5jdGlvbgorICAgcG9pbnRlciB0aGF0IGRlZmluZXMgaG93IHRvIGNsb25lIG5ldHNubXBfbWliX2hhbmRsZXIubXl2b2lkLgorICAgTXVzdCBiZSBkZWZpbmVkIGlmIGFuZCBvbmx5IGlmIGRhdGFfZnJlZSBpcyBzZXQuIFRoZSBmdW5jdGlvbgorICAgbmV0c25tcF9oYW5kbGVyX2R1cCgpIGRvZXMgbm93IGNsb25lIE1JQiBoYW5kbGVyIHByaXZhdGUgZGF0YSBpZgorICAgZGF0YV9jbG9uZSgpIGlzIHNldC4gUHJldmlvdXNseSBhZnRlciBkdXBsaWNhdGluZyBhIE1JQiBoYW5kbGVyCisgICBhbmQgdW5yZWdpc3RlcmluZyBvbmUgb2YgdGhlIHR3byBNSUIgaGFuZGxlcnMsIHRoZSBwcml2YXRlIGRhdGEKKyAgIHBvaW50ZXIgKG15dm9pZCkgb2YgdGhlIG90aGVyIGJlY2FtZSBhIGRhbmdsaW5nIHBvaW50ZXIuIE5vdGU6CisgICBhZGRpdGlvbiBvZiBuZXRzbm1wX21pYl9oYW5kbGVyLmRhdGFfY2xvbmUgaXMgYW4gQUJJIGNoYW5nZS4KKyAgIENIQU5HRVM6IHRlc3Rpbmc6IGFkZGVkIG1vcmUgdGVzdCBjYXNlcyB0byB0aGUgaGFuZGxlcgorICAgcmVnaXN0cmF0aW9uIHRlc3QuCisKKzIwMTAtMTAtMTUgMTg6MzIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcuCiAKIDIwMTAtMTAtMTUgMTI6MzAgIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jOgorICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jbGliLmM6CiAKICAgIFJldmVydGVkIHIxOTQ2MCBiZWNhdXNlIGl0IG1ha2VzIHNvbWUgcmVncmVzc2lvbiB0ZXN0cyBmYWlsCiAgICAoVDEyMHByb3h5Z2V0X3NpbXBsZSwgVDEyMXByb3h5c2V0X3NpbXBsZSwKQEAgLTE4MjgsMTcgKzM2NDI4LDEwOCBAQAogICAgaGFuZGxlciBubyBsb25nZXIgY2F1c2VzIGEgY3Jhc2ggKGRvdWJsZSBmcmVlKSB3aGVuCiAgICBoYW5kbGVyLT5teXZvaWQgb2YgdGhlIG9yaWdpbmFsIGhhbmRsZXIgd2FzIG5vbi1OVUxMLgogCi0yMDEwLTEwLTE1IDEwOjAyICBidmFzc2NoZQorMjAxMC0xMC0xNSAxMTozMiAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMzoKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jbGliLmM6CiAKLSAgIFNwZWxsaW5nIGZpeDogZHVscGljYXRlcyAtPiBkdXBsaWNhdGVzLgorICAgQWRkZWQgYSB1bml0IHRlc3QgZm9yIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGFuZCBkZXJlZ2lzdHJhdGlvbi4KIAotMjAxMC0xMC0xNSAwOTo1MyAgYnZhc3NjaGUKKzIwMTAtMTAtMTUgMTA6NTYgIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jOgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0gICBGaXhlZCBhIHNwZWxsaW5nIGVycm9yIGluIGEgc291cmNlIGNvZGUgY29tbWVudC4KKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogQnVpbGRzIG5vdyBjb3JyZWN0bHkgd2l0aCBhIDY0LWJpdAorICAgY29tcGlsZXIuCisKKzIwMTAtMTAtMTUgMDk6NDUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBzbm1wX3NodXRkb3duKCk6IGFkZGVkIGNhbGwgdG8KKyAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKS4KKworMjAxMC0xMC0xNSAwNjo0NSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgRm9sbG93LXVwIGZvciByMTk0NTA6IGxldCBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpIGZyZWUKKyAgIGFsbCB0YWJsZV9kYXRhc2V0LXJlbGF0ZWQgbWVtb3J5LgorCisyMDEwLTEwLTE0IDIzOjE1ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgdXNpbmcgYXV0b2NvbmYKKyAgIDIuNjguCisKKzIwMTAtMTAtMTQgMjM6MDEgIG1hZ2ZyCisKKyAgICogIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJlIGNvbnN0IGNvcnJlY3Qgb3ZlciBjYWxscyB0byBzdHIqIGZ1bmN0aW9ucy4KKworMjAxMC0xMC0xNCAxNToxOSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNXRhYmxlX2RhdGFzZXRfY2xpYi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGRlZCBmdW5jdGlvbiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpLgorICAgQ0hBTkdFUzogc25tcGxpYjogQWRkZWQgZGVjbGFyYXRpb24gZm9yIHRoZSBmdW5jdGlvbgorICAgbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpIGluIGEgcHVibGljIGFnZW50IGhlYWRlciBmaWxlLgorICAgQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgbWVtb3J5IGxlYWsgaW4KKyAgIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKS4KKyAgIENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSB1bnJlZ2lzdGVyaW5nIGEKKyAgIHRhYmxlIGhhbmRsZXIuCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBVbml0IHRlc3RzIGNhbiBub3cgaW52b2tlIGZ1bmN0aW9ucyBmcm9tCisgICBsaWJhZ2VudC4KKyAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZGVkIHVuaXQgdGVzdCBmb3IgdGFibGVfZGF0YXNldC4KKworMjAxMC0xMC0xNCAxNDowNSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jOgorCisgICBVbml0IHRlc3QgVDAwMWRlZmF1bHRzdG9yZV9jbGliLmM6IEZpeGVkIGxlYWtzLWF0LWV4aXQuCisKKzIwMTAtMTAtMTQgMDg6NDMgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfcnVuOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBJdCBpcyBub3cgcG9zc2libGUgdG8gYW5hbHl6ZSB0aGUgdW5pdCB0ZXN0cworICAgd2l0aCBWYWxncmluZCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgIFNOTVBfU0FWRV9UTVBESVIgYW5kIERZTkFNSUNfQU5BTFlaRVIuIEFuIGV4YW1wbGU6IChleHBvcnQKKyAgIFNOTVBfU0FWRV9UTVBESVI9eWVzIERZTkFNSUNfQU5BTFlaRVI9InZhbGdyaW5kCisgICAtLXRyYWNlLWNoaWxkcmVuPXllcyAtLWxlYWstY2hlY2s9ZnVsbCI7IGNkIHRlc3RpbmcgJiYKKyAgIC4vUlVORlVMTFRFU1RTIC1nIHVuaXQtdGVzdHMpCisKKzIwMTAtMTAtMTQgMDg6NDAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYzoKKworICAgVW5pdCB0ZXN0IFQwMDRzbm1wX2VudW1fY2xpYi5jOiBhZGRlZCB0ZXN0IGhlYWRlciAvIGFkZGVkIGEgdGVzdAorICAgY2FzZS4KKworMjAxMC0xMC0xNCAwODozOSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYzoKKworICAgRml4ZWQgbGVha3MtYXQtZXhpdCBpbiB1bml0IHRlc3QgVDAwMmNvbnRhaW5lcnNfY2xpYi5jLgorCisyMDEwLTEwLTE0IDA4OjM4ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmM6CisKKyAgIEZpeGVkIGEgbGVhay1hdC1leGl0IGluIHVuaXQgdGVzdCBUMDAxZGVmYXVsdHN0b3JlX2NsaWIuYy4KIAogMjAxMC0xMC0xNCAwODozNiAgYnZhc3NjaGUKIApAQCAtMTg0OCwxOSArMzY1MzksMTk3IEBACiAgICBzZV9hZGRfcGFpcl90b19saXN0KCkgd2l0aCBhIHZhbHVlIHRoYXQgYWxyZWFkeSBleGlzdGVkIGluIHRoZQogICAgbGlzdC4KIAorMjAxMC0xMC0xNCAwNzoxNiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMTAtMTQgMDc6MTIgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMGNvbmZpZ3VyZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMGNvbmZpZ3VyZV9zaW1wbGU6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSB2YXJpYWJsZSAkU05NUF9CQVNFRElSIGlzIGF2YWlsYWJsZSBpbiB0aGUKKyAgIFQwMDBjb25maWd1cmUgdGVzdC4KKworMjAxMC0xMC0xNCAwNjoxOSAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlZ2VuZXJhdGVkCisKKzIwMTAtMTAtMTQgMDU6MzYgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jOgorCisgICBRdWVsbCB3YXJuaW5ncworCisyMDEwLTEwLTE0IDAzOjUwICByc3RvcnkKKworICAgKiAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luNy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICB0ZXN0IGZvciBvcGVuc3NsIHNoYSAyMjQvMjU2LzM4NS81MTIgc3VwcG9ydCBpbnN0ZWFkIG9mCisgICBoYXJkY29kaW5nCisKKzIwMTAtMTAtMTQgMDM6NTAgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIGFkZCBPVVRQVVRFTlZWQVJTIHRvIHNhdmUgaW1wb3J0YW50IGVudmlyb25tZW50IHZhcmlhYmxlczsgd2hlbgorICAgU05NUF9WRVJCT1NFCisgICBpcyBzZXQsIHNhdmUgZW52IHZhcnMgYW5kIGNvbW1hbmQgdG8gaW5kaXZpZHVhbCBpbnZva2VkIGZpbGUgZm9yCisgICBlYWNoIHRlc3Q7CisgICBzYXZlIGVudiB2YXJzIGFuZCBjb21tYW5kIGZvciBlYWNoIFNUQVJUUFJPRworCisyMDEwLTEwLTE0IDAzOjUwICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogYXV0by1jcmVhdGUgdXNlciBzcGVjaWZpZWQgU05NUF9UTVBESVIgYW5kCisgICBTTk1QX1RNUF9QRVJTSVNURU5URElSIHRvbzsgZGVmYXVsdCBTTk1QX1RNUF9QRVJTSVNURU5ESVIgYmFzZWQKKyAgIG9uIFNOTVBfVE1QRElSCisgICBmb3IgdXNlciBzcGVjaWZpZWQgU05NUF9UTVBESVIKKworMjAxMC0xMC0xNCAwMzo0OSAgcnN0b3J5CisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEwLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45Lmg6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBjaGVjayBmb3IgL2Rldi9rbWVtIGluc3RlYWQgb2YgYXNzdW1pbmcgaXQKKyAgIGV4aXN0cyBhbmQgaGFyZGNvZGluZyB3aGVuIGl0IGlzIG5vdCB0aGVyZQorCisyMDEwLTEwLTE0IDAzOjI4ICByc3RvcnkKKworICAgKiAgc25tcGxpYi9zbm1wdHNtLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzZXQgdHJhbnNwb3J0U2VjdXJpdHlMZXZlbCBiYXNlZCBvbiBzc2wgc2Vzc2lvbiBhbGdvcml0aG1zCisKKzIwMTAtMTAtMTQgMDM6MjYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgYWRkIG5ldHNubXBfb3BlbnNzbF9udWxsX2NoZWNrcworCisyMDEwLTEwLTE0IDAzOjIzICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjbGVhbnVwIHNzbC9iaW8gb24gZmFpbGVkIGNvbm5lY3Rpb24KKworMjAxMC0xMC0xNCAwMzoyMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgcXVpZXQgY29tcGlsZXIgd2FybmluZworCisyMDEwLTEwLTE0IDAzOjE4ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICByZW1vdmUgdW51c2VkIHZhcgorCisyMDEwLTEwLTE0IDAzOjE2ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHR5cG8KKworMjAxMC0xMC0xNCAwMzoxMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgY2hlY2sgZm9yIG51bGwgYmVmb3JlIGRlcmVmCisKKzIwMTAtMTAtMTMgMjA6MTIgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBHZW5lcmF0ZSBhIG5vcm1hbCAjbGluZSBkaXJlY3RpdmUgYXMgcGVyIEM5OQorICAgaW5zdGVhZCBvZiB0aGUgY29tcGlsZXItc3BlY2lmaWMgIzxuPi1kaXJlY3RpdmUuCisKIDIwMTAtMTAtMTMgMTY6NTMgIGhhcmRha2VyCiAKLSAgICogZGlzdC9hdXRvY29uZi12ZXJzaW9uLCB0ZXN0aW5nL3Rlc3RzL1QwMDBjb25maWd1cmU6CisgICAqIGRpc3QvYXV0b2NvbmYtdmVyc2lvbiwgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAwY29uZmlndXJlOgogCiAgICBhZGRlZCBhIGF1dG9jb25mIHZlcnNpb24gY2hlY2tpbmcgdGVzdCB0byBjYXRjaCBkZXZlbG9wZXJzIGFuZAogICAgc2NyaXB0cyB0aGF0IGZhaWwgdG8gdXNlIHRoZSBjb3JyZWN0IGF1dG9jb25mIHZlcnNpb24KIAorMjAxMC0xMC0xMyAxNjozMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgUGF0Y2ggZnJvbSBCaWxsIEZlbm5lciB0byBmaXggb25seSBpbmNsdWRpbmcgdGhlIHNlc3Npb25fYXBpLmgKKyAgIGZpbGUKKworMjAxMC0xMC0xMyAxNjoyOSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NDIxOiBNYWRlIHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgYWdhaW4gcmVwb3J0cworICAgdGhlIHByb3BlciBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gd2hpbGUgY29tcGlsaW5nCisgICB1bml0IHRlc3RzLgorCisyMDEwLTEwLTEzIDExOjUzICBidmFzc2NoZQorCisgICAqICB3aW4zMi9NYWtlZmlsZS1hcHBzLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBiYXRjaCBidWlsZCB3aXRoIE9wZW5TU0wgZW5hYmxlZCBhbmQKKyAgIHdpdGggcmVjZW50IE9wZW5TU0wgZGV2ZWxvcG1lbnQgZmlsZXMgd29ya3MgYWdhaW4uCisKKzIwMTAtMTAtMTMgMDk6NTggIGJ2YXNzY2hlCisKKyAgICogIG5ldC1zbm1wLWNvbmZpZy5pbiwgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX3J1bjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBSdW5uaW5nIHRoZSB1bml0IHRlc3RzIGRvZXMgbm93IHdvcmsgKGNkIHRlc3RpbmcKKyAgICYmIC4vUlVORlVMTFRFU1RTIC1nIHVuaXQtdGVzdHMpLgorICAgQ0hBTkdFUzogTWluR1c6IFJ1bm5pbmcgdGhlIHVuaXQgdGVzdHMgZG9lcyBub3cgd29yayAoY2QgdGVzdGluZworICAgJiYgLi9SVU5GVUxMVEVTVFMgLWcgdW5pdC10ZXN0cykuCisKKzIwMTAtMTAtMTMgMDg6MDAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgRml4ZWQgYSBzcGVsbGluZyBlcnJvciBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQuCisKIDIwMTAtMTAtMTMgMDc6NDMgIGJ2YXNzY2hlCiAKICAgICogbmV0LXNubXAtY29uZmlnLmluOgogCiAgICBTcGVsbGluZyBmaXhlcy4KIAorMjAxMC0xMC0xMiAxNDowMiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmg6CisKKyAgIEFkZGVkIGRlY2xhcmF0aW9uIGZvciBzZV9jbGVhcl9zbGlzdCgpLgorCisyMDEwLTEwLTEyIDExOjEyICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmM6CisKKyAgIEFkZGVkIG1vcmUgdGVzdCBjYXNlcyB0bworICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYy4KKyAgIFZlcmlmaWVkIHdpdGggVmFsZ3JpbmQgdGhhdCBldmVyeXRoaW5nIGRvZXMgbm93IHdvcmsgY29ycmVjdGx5CisgICBhbmQgdGhhdCB0aGUKKyAgIHRlc3QgcHJvZ3JhbSBpcyBmcmVlIG9mIGxlYWtzLWF0LWV4aXQuCisKIDIwMTAtMTAtMTIgMTE6MTEgIGJ2YXNzY2hlCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oLCBzbm1wbGliL3NubXBfZW51bS5jOgpAQCAtMTg3OSwxMyArMzY3NDgsMTg5IEBACiAgICBub3Qgd29yay4KICAgIENIQU5HRVM6IHNubXBsaWI6CiAKLTIwMTAtMDktMjEgMDA6MDYgIGhhcmRha2VyCisyMDEwLTEwLTEyIDA2OjI3ICBidmFzc2NoZQorCisgICAqICBSRUFETUUud2luMzIsIHdpbjMyL2xpYmhlbHBlcnMsIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvd2luMzIuZHN3OgorCisgICBDSEFOR0VTOiBXaW4zMjogUEFUQ0g6IDMwODUxODc6IEJ1aWxkaW5nIHZpYSB0aGUgTWljcm9zb2Z0IFZpc3VhbAorICAgU3R1ZGlvIHByb2plY3QgZmlsZSAoLmRzdy8uZHNwKSB3b3JrcyBhZ2Fpbi4KKworMjAxMC0xMC0xMiAwNTozNSAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ29ycmVjdCB0aGUgZXh0ZXJuICJDIiBkZWNsYXJhdGlvbnMgdG8gYmUKKyAgIGNvbnNpc3RlbnQuIFJlbW92ZSBjb21tZW50ZWQgb3V0IGNvZGUuCisKKzIwMTAtMTAtMTEgMjE6NDEgIG5iYQorCisgICAqIGNvbmZpZ3VyZToKKworICAgcnVuIGF1dG9jb25mCisKKzIwMTAtMTAtMTEgMjE6MzkgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfYXB0LmMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIFN1cHBvcnQgZm9yIGhyU1dJbnN0YWxsZWRUYWJsZSBmb3IgZHBrZy9hcHQtYmFzZWQgc3lzdGVtcworCisyMDEwLTEwLTExIDIwOjQ2ICBuYmEKKworICAgKiBtaWJzL01ha2VmaWxlLm1pYiwgbWlicy9yZmNsaXN0OgorCisgICBVcGRhdGUgc291cmNlcyBmb3IgU05NUC1UTFMtVE0tTUlCCisKKzIwMTAtMTAtMTEgMjA6NDIgIG5iYQorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBDaGVjayBlYXJseSBmb3IgcGljbC5oCisKKzIwMTAtMTAtMTEgMjA6MzEgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaDoKKworICAgRml4IHdhcm5pbmdzIGZyb20gbG1zZW5zb3JNaWIKKworMjAxMC0xMC0xMSAyMDozMCAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5jOgorCisgICBGaXggbmV3IHN0eWxlIGxtc2Vuc29yTWliIGZvciBTb2xhcmlzICh3YXMgaXQgZXZlciBjb21waWxlZAorICAgYmVmb3JlKQorCisyMDEwLTEwLTExIDIwOjI4ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYzoKKworICAgRml4IGxtU2Vuc29ycyBmb3IgU29sYXJpcworCisyMDEwLTEwLTExIDIwOjI3ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuYzoKKworICAgRml4IGEgU29sYXJpcyBmaWxlIGRlc2NyaXB0b3IgbGVhaworCisyMDEwLTEwLTExIDIwOjI1ICBuYmEKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgTWFrZSAtLWRpc2FibGUtZGV2ZWxvcGVyIHdvcmsKKworMjAxMC0xMC0xMSAxODoyMyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBzeXNPYmplY3RJRCBhcyB3ZWxsIGFzIHRoZQorICAgZGF0YSB3aGVuIGl0IGlzIHNldCBmcm9tIGEgY29uZmlndXJhdGlvbiBmaWxlLgorCisyMDEwLTEwLTExIDE3OjU4ICBtYWdmcgorCisgICAqIG1hbi9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IGZyb20gIk5pZWxzIEJhZ2dlc2VuIjogU29tZSBzeXN0ZW1zIGRvIG5vdAorICAgc3VwcG9ydCB0aGUgLUUgZmxhZyB0byBncmVwLCB1c2UgYXV0b2NvbmYgdG8gZmluZCB0aGUgcmlnaHQgZWdyZXAKKyAgIGF0IGFsbCB0aW1lcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS42LlJDMyAtPiBWNS42CisKKzIwMTAtMTAtMDcgMjA6MzMgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMTAtMDYgMTE6MzEgIG5iYQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlczoKKworICAgRml4IGlwdjYgZ2VuZXJpYyBjYXNlIHNvIHRlc3QgbWF0Y2hlcyB2ZXJpZmljYXRpb24KKworMjAxMC0xMC0wMSAxNjo0NCAgZHRzMTIKKworICAgKiBtYW4vdmFyaWFibGVzLjUuZGVmOgorCisgICBSZXdvcmsgZGVzY3JpcHRpb24gb2YgT0lEIG5hbWUgaGFuZGxpbmcgdG8gYmUKKyAgIG5vdCBxdWl0ZSBzbyBpbmNyZWRpYmx5IG91dCBvZiBkYXRlLgorCisyMDEwLTA5LTIyIDE0OjAyICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZToKKworICAgZXJnLi4uIHJlYWxseSB1c2UgdGhlIHJpZ2h0IGF1dG9jb25mIHZlcnNpb24gYnkgc2V0dGluZyB0aGUgcGF0aAorICAgcmlnaHQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS42LnJjMiAtPiBWNS42LnJjMworCisyMDEwLTA5LTIxIDIzOjUzICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZToKKworICAgcmVnZW5lcmF0ZWQgd2l0aCBwcm9wZXIgYXV0b2NvbmYgdmVyc2lvbgorCisyMDEwLTA5LTIxIDIzOjQ5ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA5LTIxIDIzOjQ1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHZlcmlmaWVkIHBhdGNoIGZyb20gcnN0b3J5IHRvIGZpeCBjZXJ0aWZpY2F0ZSBsb2FkaW5nIG9mCisgICBpbmNvbXBsZXRlIGNoYWlucworCisyMDEwLTA5LTIxIDE4OjA3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcGF0Y2ggMzA1ODM4ODogZnJvbSBjaHJpc2JvbHQ6IGRvbid0IHBhcnNlCisgICBpbmNsdWRlQWxsRGlza3MgaW4gdGhlIG1haW4gc25tcGxpYiByb3V0aW5lcworCisyMDEwLTA5LTIxIDE4OjA2ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKIAogICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMwNjI1MjY6IGZyb20gbWFyaW9nODU6IGZpeCBzZWN1cml0eQogICAgZW5naW5lSUQgc2V0dGluZyBpbiB0aGUgdHJhcHNlc3MgZGlyZWN0aXZlCiAKKzIwMTAtMDktMjEgMTU6MTMgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBVcGRhdGVkIFdpbjMyIGRvY3VtZW50YXRpb24uCisKKzIwMTAtMDktMjAgMjM6MjAgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jOgorCisgICBQYXRjaCBmcm9tIEZ1bGtvIEhldyB0byBmaXggcGF0Y2ggMjkwMDA3OCB3aGljaCBicm9rZSBzeXNPYmplY3RJRAorICAgbGVuZ3RocworCisyMDEwLTA5LTIwIDIxOjMyICBkdHMxMgorCisgICAqIG1hbi9zbm1wZ2V0LjEuZGVmLCBtYW4vc25tcGdldG5leHQuMS5kZWY6CisKKyAgIERvY3VtZW50IC1DZiBpbiB0aGUgdHdvIG1hbiBwYWdlcyBzZXBhcmF0ZWx5LgorCiAyMDEwLTA5LTIwIDIwOjIzICBidmFzc2NoZQogCiAgICAqIHNubXBsaWIvbWliLmM6CkBAIC0xODkzLDIwICszNjkzOCwzMTEgQEAKICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMDY3NTQwOiBmcm9tIGpveWNlYW5tYWNoaW5lOiBGaXggSVB2NAogICAgT0lEIGluZGV4ZXMgb24gNjQtYml0IGJpZy1lbmRpYW4gc3lzdGVtcy4KIAorMjAxMC0wOS0yMCAxOToyNSAgYnZhc3NjaGUKKworICAgKiAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgsIHdpbjMyL0NvbmZpZ3VyZSwgICAKKyAgICAgIHdpbjMyL01ha2VmaWxlLmluLCB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgd2luMzIvbGliaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBkL3NubXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyZGxsLmRzdzoKKworICAgVW4tYnJlYWsgdGhlIE1TVkMgYnVpbGQuCisKKzIwMTAtMDktMjAgMDk6MTggIGJ2YXNzY2hlCisKKyAgICogZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMsIG1hbiwgdGVzdGluZywgd2luMzI6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdHMuCisKKzIwMTAtMDktMTcgMTA6MzQgIGR0czEyCisKKyAgICogIG1hbi9hZ2VudHh0cmFwLjEuZGVmLCBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vc25tcGJ1bGtnZXQuMS5kZWYsICAgCisgICAgICBtYW4vc25tcGJ1bGt3YWxrLjEuZGVmLCBtYW4vc25tcGdldC4xLmRlZiwgbWFuL3NubXBnZXRuZXh0LjEuZGVmLCAKKyAgICAgICAgbWFuL3NubXBzZXQuMS5kZWYsIG1hbi9zbm1wdHJhcC4xLmRlZiwgbWFuL3NubXB0cmFwZC44LmRlZiwgICAKKyAgICAgIG1hbi9zbm1wd2Fsay4xLmRlZjoKKworICAgUmVtb3ZlIENNVSBjb3B5cmlnaHQgbm90aWNlIGZyb20gbWFuIHBhZ2VzIHRoYXQgd2VyZSBub3QKKyAgIGluaGVyaXRlZCBmcm9tIENNVS1TTk1QIChhbmQgcXVhbGlmeSB0aGUgY29weXJpZ2h0IGZvcgorICAgdGhvc2UgdGhhdCB3ZXJlKS4KKworMjAxMC0wOS0xNyAwOTo1MSAgZHRzMTIKKworICAgKiAgbWFuL2RlZmF1bHRfc3RvcmUuMy5ib3QsIG1hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wLmNvbmYuNS5kZWYsIG1hbi9zbm1wX2FsYXJtLjMuZGVmLCBtYW4vc25tcF9jb25maWcuNS5kZWYsIAorICAgICAgICBtYW4vc25tcGQuY29uZi41LmRlZiwgbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmLCAgIAorICAgICAgbWFuL3NubXBkLmludGVybmFsLjUuZGVmLCBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWY6CisKKyAgIFVwZGF0ZSBtYW4gcGFnZSByZWZlcmVuY2VzIHRvIHJlZmxlY3QgbmV3IEFQSSBkb2N1bWVudGF0aW9uCisgICBzdHJ1Y3R1cmUuCisKKzIwMTAtMDktMTAgMDQ6MjMgIG1hZ2ZyCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgbmV3IHRlc3QqIGVudHJpZXMgZnJvbSB0aGUgdGVzdGluZworICAgTWFrZWZpbGUuaW4gdG8gdGhlIHRvcC1sZXZlbCBNYWtlZmlsZS5pbgorCisyMDEwLTA5LTA4IDE1OjQxICBkdHMxMgorCisgICAqICBtYW4vYWdlbnR4dHJhcC4xLmRlZiwgbWFuL2RlZmF1bHRfc3RvcmUuMy50b3AsICAgCisgICAgICBtYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZiwgbWFuL2ZpeHByb2MuMS5kZWYsICAgCisgICAgICBtYW4vbWliMmMtdXBkYXRlLjEuZGVmLCBtYW4vbWliMmMuMS5kZWYsIG1hbi9taWIyYy5jb25mLjUuaW4sICAgCisgICAgICBtYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmLCBtYW4vbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMS5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL3NubXAtYnJpZGdlLW1pYi4xLCBtYW4vc25tcC5jb25mLjUuZGVmLCBtYW4vc25tcF9hbGFybS4zLmRlZiwgCisgICAgICAgIG1hbi9zbm1wX2NvbmZpZy41LmRlZiwgbWFuL3NubXBidWxrZ2V0LjEuZGVmLCAgIAorICAgICAgbWFuL3NubXBidWxrd2Fsay4xLmRlZiwgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wY29uZi4xLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wZC44LmRlZiwgbWFuL3NubXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wZC5leGFtcGxlcy41LmRlZiwgIAorICAgICAgIG1hbi9zbm1wZC5pbnRlcm5hbC41LmRlZiwgbWFuL3NubXBkZWx0YS4xLmRlZiwgbWFuL3NubXBkZi4xLmRlZiwgCisgICAgICAgIG1hbi9zbm1wZ2V0LjEuZGVmLCBtYW4vc25tcGdldG5leHQuMS5kZWYsIG1hbi9zbm1wbmV0c3RhdC4xLmRlZiwKKyAgICAgICAgIG1hbi9zbm1wc2V0LjEuZGVmLCBtYW4vc25tcHN0YXR1cy4xLmRlZiwgbWFuL3NubXB0YWJsZS4xLmRlZiwgIAorICAgICAgIG1hbi9zbm1wdGVzdC4xLmRlZiwgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsIG1hbi9zbm1wdHJhcC4xLmRlZiwgCisgICAgICAgIG1hbi9zbm1wdHJhcGQuOC5kZWYsIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZiwKKyAgICAgIG1hbi9zbm1wdXNtLjEuZGVmLCAgICBtYW4vc25tcHZhY20uMS5kZWYsIG1hbi9zbm1wd2Fsay4xLmRlZiwKKyAgICAgIG1hbi90a21pYi4xLmRlZiwgICAgbWFuL3RyYXB0b2VtYWlsLjEuZGVmLCBtYW4vdmFyaWFibGVzLjUuZGVmOgorCisgICBVcGRhdGUgbWFuIHBhZ2UgZGF0ZXN0YW1wcyB0byBtYXRjaCB0aGUgbGF0ZXN0IChub24tdHJpdmlhbCkKKyAgIGNvbnRlbnQgY2hhbmdlLgorICAgU3VwcHJlc3MgZm9yY2luZyBvZiAiQmVya2VsZXkgRGlzdHJpYnV0aW9uIiBmb290ZXIKKyAgIChBbGxvd3MgTmV0LVNOTVAgdmVyc2lvbiBpbmZvcm1hdGlvbiB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1hbgorICAgcGFnZSkKKworMjAxMC0wOS0wOCAwNTozNyAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlZ2VuZXJhdGVkCisKKzIwMTAtMDktMDQgMDY6MzggIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIxOTM1NiBieQorICAgY2hhbmdpbmcgdGhlIHJldHVybgorICAgdHlwZSBvZiBuZXRzbm1wX3Rsc2Jhc2VfZnJlZV90bHNkYXRhKCkgZnJvbSB2b2lkKiB0byB2b2lkLgorCisyMDEwLTA5LTA0IDA2OjM3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjE5MzIyIChwYXRjaAorICAgMzA0NDUxMikuCisgICBUaGUgdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIHJlYWRfb2JqaWQoKSB3YXMgYW4gaW50IGluc3RlYWQgb2YKKyAgIHNpemVfdC4KKyAgIFRoaXMgY291bGQgaGF2ZSBjYXVzZWQgbWVtb3J5IGNvcnJ1cHRpb24gb24gNjQtYml0IHN5c3RlbXMuCisKKzIwMTAtMDktMDQgMDM6MDkgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wOS0wNCAwMzowOCAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDktMDQgMDE6NTcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA5LTA0IDAwOjU5ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA5LTAzIDIyOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCB0bHN0Y3AgcGFyc2luZyBvZiBob3N0IG5hbWVzLgorCisyMDEwLTA5LTAzIDIyOjEzICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jOgorCisgICBjaGVjayB0aGUgcmV0dXJuIGNvZGUgb2YgZmdldHMgYW5kIGZvcGVuIGJlZm9yZSBpbnNlcnRpbmcgdGhlCisgICByZXN1bHRzLgorCisyMDEwLTA5LTAzIDIyOjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBQYXRjaCBmcm9tIHRhbmRlcnMgdG8gZml4IGJyb2tlbiBhbGFybXMgYWZ0ZXIgdGhlIHByZXZpb3VzCisgICByZS1lbnRyYW50IHBhdGNoCisKIDIwMTAtMDktMDMgMjI6MDUgIGhhcmRha2VyCiAKLSAgICogc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKIAogICAgQ0hBTkdFUzogc25tcGxpYjogcGF0Y2ggMzA1ODY0NTogZnJvbSBqb3Jpc2VzYXR1cm51czogbW9kaWZpZWQKICAgIHZlcnNpb24gb2YgdGhlIHBhdGNoIHRvIHVzZSBNU0dfRE9OVFdBSVQgZm9yIHRoZSB1bml4IGRvbWFpbgogICAgc29ja2V0CiAKKzIwMTAtMDktMDMgMjE6NTYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMDU4MTQwOiBmcm9tIHRha2V2b3M6IGNoZWNrIHRoYXQgaW5vZGUgaXMKKyAgIG5vbi16ZXJvCisKKzIwMTAtMDktMDMgMjE6NTAgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMDUzNDI4OiBmcm9tIHRha2V2b3M6IGZpeAorICAgZ2V0X3BpZF9mcm9tX2lub2RlIHdoZW4gdGhlIGlub2RlIGlzIG5vdCBmb3VuZC4KKworMjAxMC0wOS0wMyAyMDoyMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJlbW92ZSB0aGUgZHVwbGljYXRlIHJldHVybiBiZWZvcmUgdGhlIGVycm9yIGNvZGVzIGdldCBzZXQuCisKKzIwMTAtMDktMDEgMTg6MDQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogTG9nIGJlZm9yZSByZXR1cm5pbmcuCisKKzIwMTAtMDktMDEgMDI6NDMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIFRMUyBzZW5kX25vdGlmeSBvbiBjbG9zdXJlIGFuZCBzb21lIG1lbW9yeSBjbGVhbi11cCBwYXRjaGVzCisKKzIwMTAtMDgtMzEgMTc6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBPbmx5IHByaW50IHRoZSBzZWN1cml0eS9jb250ZXh0IEVuZ2luZUlEIG1pc21hdGNoIG5vdGUgdW5kZXIgVVNNCisKKzIwMTAtMDgtMjUgMTU6MTMgIHJzdG9yeQorCisgICAqIENIQU5HRVM6CisKKyAgIHJlbW92ZSByZWZlcmVuY2UgdG8gcmV2ZXJ0ZWQgcGF0Y2ggMzA0Mjc2NQorCisyMDEwLTA4LTI1IDE1OjEzICByc3RvcnkKKworICAgKiBhY2NvbmZpZy5oOgorCisgICBhZGQgbm90ZSBvbiB3aGVyZSB0byBmaW5kIGNvbnRlbnQgdXNlZCB0byBnZW5lcmF0ZQorICAgbmV0LXNubXAtY29uZmlnLmguaW4KKworMjAxMC0wOC0yNSAwMjo0NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICByZXZlcnQgcjE5MzQyLCBwYXRjaCAzMDQyNzY1LCB3aGljaCBicm9rZSBjbGllbnQgdGNwIGRpc2Nvbm5lY3QKKyAgIGhhbmRsaW5nCisKKzIwMTAtMDgtMjUgMDI6NDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGZpeCBtb3JlIGNvZGUgYnJva2VuIGJ5ICdjb21waWxlciB3YXJuaW5nIGZpeCcgaW4gcjE5MTc5CisKKzIwMTAtMDgtMjUgMDI6NDUgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnM6CisKKyAgIGNoZWNrIGZvciBjb25mIGVycm9ycyBhZnRlciBhZ2VudCBzdGFydHVwOyBlbmFibGUgbG9nVGltZXN0YW1wOworICAgbWFrZSBzdXJlCisgICBhbGwgY2VydCBuYW1lL3RhZ3MgYXJlIHVuaXF1ZQorCisyMDEwLTA4LTI0IDIxOjA0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmaXggZXJyb3Igc3RyaW5nIHRvIGRpc2N1c3MgdGhlIHJpZ2h0IGZhaWxlZCBvcGVuc3NsIG5ldworICAgaW52b2NhdGlvbgorCiAyMDEwLTA4LTI0IDA1OjM3ICBtYWdmcgogCiAgICAqIGFwcHMvc25tcHVzbS5jOgogCiAgICBDSEFOR0VTOiBzbm1wdXNtOiBDb3JyZWN0IGlmZGVmcywgcmVtb3ZlIGRlYWQgdmFyaWFibGVzLgogCisyMDEwLTA4LTE5IDIxOjIyICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDgtMTkgMjE6MjAgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA4LTE5IDIxOjExICBoYXJkYWtlcgorCisgICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA4LTE5IDIxOjEwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL250by1xbng2Lmg6CisKKyAgIC8vIC0+IEMgY29tbWVudHMKKworMjAxMC0wOC0xOSAyMDozNiAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wOC0xOSAyMDoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIIDMwNDI3NjU6IGZyb20gbWVoYWY6IG1ha2UKKyAgIHNubXBfc3luY2hfcmVzcG9uc2VfY2IoKSByZS1lbnRyYW50CisKKzIwMTAtMDgtMTkgMjA6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHR1cm4gb2ZmIGNvb2tpZSBleGNoYW5nZXMgdW50aWwgYSBjb21wbGV0ZSBjb2RlIHNldCBjYW4gYmUKKyAgIHdyaXR0ZW4gdG8gc3VwcG9ydCBpdCBiYXNlZCBvbiB0aGUgcmVxdWlyZWQgZnVuY3Rpb24gY2FsbGJhY2tzCisKKzIwMTAtMDgtMTcgMTg6MzEgIHJzdG9yeQorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIGFkZCBtaXNzaW5nIGNhbGwgdG8gc3RvcmUgcGVyc2lzdGVudCBkYXRhIGFzIG5lZWRlZAorCisyMDEwLTA4LTE3IDE4OjMxICByc3RvcnkKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiB3aGVuIGRpc3BsYXlpbmcgYSBieXRlIGFzIHNpbmdsZSBkaWdpdCBoZXgKKyAgIHZhbHVlLCBkZWZhdWx0IHRvCisgICBwcmVmaXhpbmcgd2l0aCAwIHVubGVzcyB0aGVyZSBpcyBhIHNlcGVyYXRvciBvciBhZGRpdGlvbiBoaW50CisgICBkYXRhCisKIDIwMTAtMDgtMTcgMTA6MzEgIGJ2YXNzY2hlCiAKICAgICogYXBwcy9zbm1wdXNtLmM6CkBAIC0xOTE1LDYgKzM3MjUxLDEzIEBACiAgICB3aGVuCiAgICBjb21waWxpbmcgd2l0aG91dCBTU0wgc3VwcG9ydC4KIAorMjAxMC0wOC0xNiAyMzoxMSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAyNzkwMjQ5OiBmcm9tIHdpbGxwd2lsbHA6IHJlZHVjZSBjYWNoZSB0aW1lCisgICBmb3IgdGhlIGlmdGFibGUgdG8gM3NlY29uZHMgdG8gaW5jcmVhc2UgYWNjdXJhY3kKKwogMjAxMC0wOC0xNiAxNjoyNiAgaGFyZGFrZXIKIAogICAgKiBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHM6CkBAIC0xOTI5LDYgKzM3MjcyLDMzIEBACiAgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMjgyNTY1MzogZnJvbSBicnU1Y2U6IGZpeCBzZW5kbWFpbC5jZgogICAgcGFyc2luZyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMKIAorMjAxMC0wOC0xNiAxMDoxNiAgZHRzMTIKKworICAgKiBtYW4vTWFrZWZpbGUuaW46CisKKyAgIEJ1aWxkIG5ldHNubXBfYWdlbnRfYXBpLjMgbWFuIHBhZ2UgZnJvbSB0ZW1wbGF0ZQorCisyMDEwLTA4LTE2IDA5OjIwICBkdHMxMgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkxMTM2MTogRG9jdW1lbnRhdGlvbiAoUHJvdmlkZWQgYnkgVG9tYXN6CisgICBMaXMpCisKKzIwMTAtMDgtMTYgMDg6MDYgIGR0czEyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTExMzYxOiBSZS1vcmRlciBjb2RlIHRvIGdyb3VwIHJlbGF0ZWQKKyAgIGZ1bmN0aW9ucyB0b2dldGhlcgorCisyMDEwLTA4LTE2IDA3OjQyICBkdHMxMgorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjk5NTA5ODogRml4IGNyZWF0aW9uIG9mIFNOTVB2MyBzZXNzaW9ucworICAgd2l0aCBBUElfU0lOR0xFCisKIDIwMTAtMDgtMTQgMTY6MzAgIGR0czEyCiAKICAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYzoKQEAgLTE5NDIsMzEgKzM3MzEyLDU0NSBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTA0OTAwOiBEb2N1bWVudGF0aW9uIHBsdXMgYXNzb3J0ZWQKICAgIGhhbmRsZXIgY29kZSBmaXhlcwogCi0yMDEwLTA4LTEzIDEyOjIyICBkdHMxMgorMjAxMC0wOC0xNCAwOToyOCAgZHRzMTIKIAotICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL3NubXBfYWxhcm0uMy5kZWY6CiAKLSAgIEZpeCBoYW5kbGluZyBvZiBpbmRleCB2YWx1ZXMgaW4gY2FjaGUgbG9hZCBmdW5jdGlvbi4KKyAgIFJlc3RvcmUgYWdlbnQgQVBJIG1hbiBwYWdlCisgICBEb24ndCB0cnkgdG8gZXh0cmFjdCBtdWx0aXBsZSBtYW4gcGFnZSBsaW5rcyBwZXIgbGluZQorICAgKHdoaWNoIHJ1bnMgaW50byBwcm9ibGVtcyB3aXRoIE9TLXNwZWNpZmljIGxpbmUgZW5kaW5ncykuCisgICBJbnN0ZWFkLCBlbnN1cmUgdGhlIG1hbiBwYWdlIE5BTUUgc2VjdGlvbiBsaXN0cyBvbmUKKyAgIHJvdXRpbmUgcGVyIGxpbmUKIAotMjAxMC0wOC0xMCAwNDo1OSAgbWFnZnIKKzIwMTAtMDgtMTMgMjM6NTAgIGhhcmRha2VyCisKKyAgICogbWFuL01ha2VmaWxlLmluOgorCisgICBmaXggYnJva2VuIE1ha2VmaWxlIGFmdGVyIG1hbiBwYWdlIG1vdmVzCisKKzIwMTAtMDgtMTMgMjM6NTAgIGhhcmRha2VyCisKKyAgICogbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0LCBtaWJzL3JmY2xpc3Q6CisKKyAgIHVwZGF0ZWQgVExTIE1JQiB0byBjdXJyZW50IGNvcHkKKworMjAxMC0wOC0xMyAyMzo1MCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHJlcGxhY2VkIFJGQyBjb21tZW50IG51bWJlcgorCisyMDEwLTA4LTEzIDIzOjUwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgsIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBwYXRjaDogMzA0Mjc3MDogZnJvbSBtZWhhZjogTWFkZSBydW5fYWxhcm1zKCkKKyAgIHJlZW50cmFudAorCisyMDEwLTA4LTEzIDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMDQ0NTEyOiBmcm9tIHBoaWx3ZWJzdGVyOiBmaXggc3lzb2JqZWN0aWQKKyAgIGRpcmVjdGl2ZS4KKworMjAxMC0wOC0xMyAxOTowMCAgcnN0b3J5CisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXg6CisKKyAgIHVzZSAxMjcuMC4wLjEgaW5zdGVhZCBvZiBsb2NhbGhvc3QgYXMgZGVmYXVsdCBTTk1QX1RFU1RfREVTVCBzbworICAgVExTIHRlc3RzIHdvcmsKKworMjAxMC0wOC0xMyAxODo1MCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGltcGxlbWVudGVkIGEgZml4IGZvciB0aGUgaXNzdWUgcmVwb3J0ZWQgaW4KKyAgIHBhdGNoICMzMDQyNzcwLiBDcmVhdGVkIGEgc25tcF9zZWxlY3RfaW5mb19mbGFncyBmdW5jdGlvbiwgYW5kCisgICBzaW1pbGFyLCB0aGF0IGFsbG93IGZvciBhbGFybXMgdG8gbm90IGJlIHJ1bi4gVGhpcyBpcyB0aGVuIHVzZWQKKyAgIGluIHRoZSBzeW5jaF9yZXNwb25zZSBmdW5jdGlvbnMgdG8gYXZvaWQgMTAwJSBDUFUgbG9vcHMKKworMjAxMC0wOC0xMyAxODo1MCAgaGFyZGFrZXIKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLAorICAgICAgICAgYXBwcy9zbm1wdHJhcGQuYzoKKworICAgbWFrZSBzbm1wdHJhcGQgcmVnaXN0ZXIgdGhlIGNlcnR0b3NlY25hbWUgdGFibGUgaW4gdGhlIGFnZW50eAorICAgcmVnaXN0cmF0aW9ucworCisyMDEwLTA4LTEzIDE4OjQ5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pYjJjLmNvbmY6CisKKyAgIG1pbm9yIHdvcmRpbmcgYWRkaXRpb25zCisKKzIwMTAtMDgtMTMgMTU6MDQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfYWl4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYzoKKworICAgQ0hBTkdFUzogYWl4OiBQQVRDSDogMjg4NjU5ODogZnJvbSBleHNuYWZ1OiBIZWFkZXIgZml4ZXMgZm9yCisgICBjb21waWxpbmcgb24gQUlYNgorCisyMDEwLTA4LTEzIDE1OjA0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsICAgCisgICAgICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbnRvLXFueDYuaDoKKworICAgTkVXUzogcG9ydHM6IFBBVENIOiAyODM2ODk1OiBmcm9tIHNlYW5ib3VkcmVhdTogc3VwcG9ydCBmb3IgUU5YNgorCisyMDEwLTA4LTEzIDE0OjMzICBkdHMxMgorCisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmOgorCisgICAnZW5mb3JjZSBuZXRzbm1wIHByZWZpeGVzCisKKzIwMTAtMDgtMTMgMTQ6MjkgIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYsIG1hbi92YXJiaW5kX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI5ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmLCBtYW4vc25tcF90cmFwX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI4ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI4ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiwgbWFuL3NubXBfYWdlbnRfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjggIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi9zZXNzaW9uX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI3ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYsIG1hbi9wZHVfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjcgIGR0czEyCisKKyAgICogbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyNyAgZHRzMTIKKworICAgKiBtYW4vY29uZmlnX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjIwICBkdHMxMgorCisgICAqIE1ha2VmaWxlLmluLCBkb3h5Z2VuLmNvbmY6CisKKyAgIERvbid0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgbWFuIHBhZ2VzCisKKzIwMTAtMDgtMTMgMTQ6MTggIGR0czEyCisKKyAgICogIG1hbi9zbm1wX2FwaV9lcnJzdHJpbmcuMywgbWFuL3NubXBfY2xvc2UuMywgbWFuL3NubXBfZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX2ZyZWVfcGR1LjMsIG1hbi9zbm1wX29wZW4uMywgbWFuL3NubXBfcGVycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9yZWFkLjMsIG1hbi9zbm1wX3NlbGVjdF9pbmZvLjMsIG1hbi9zbm1wX3NlbmQuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfYXN5bmNfc2VuZC4zLCBtYW4vc25tcF9zZXNzX2Nsb3NlLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX2Vycm9yLjMsIG1hbi9zbm1wX3Nlc3NfaW5pdC4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19vcGVuLjMsIG1hbi9zbm1wX3Nlc3NfcGVycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX3JlYWQuMywgbWFuL3NubXBfc2Vzc19zZWxlY3RfaW5mby4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19zZW5kLjMsIG1hbi9zbm1wX3Nlc3Nfc2Vzc2lvbi4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc190aW1lb3V0LjMsIG1hbi9zbm1wX3NldF9taWJfd2FybmluZ3MuMywgICAKKyAgICAgIG1hbi9zbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zLCBtYW4vc25tcF90aW1lb3V0LjM6CisKKyAgIFJlbW92ZSByZWR1bmRhbnQgbWFuIHBhZ2UgbGlua3MKKyAgIChTaG91bGQgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHksIGJ1dCBkb24ndCBleGlzdCBhbnkgbW9yZQorICAgYW55d2F5KQorCisyMDEwLTA4LTEzIDE0OjEzICBkdHMxMgorCisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9hZGRfbWliZGlyLjMsIG1hbi9hZGRfbW9kdWxlX3JlcGxhY2VtZW50LjMsICAKKyAgICAgICBtYW4vZ2V0X21vZHVsZV9ub2RlLjMsIG1hbi9pbml0X21pYi4zLCBtYW4vaW5pdF9taWJfaW50ZXJuYWxzLjMsIAorICAgICAgICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGVhZi4zLCBtYW4vbmV0c25tcF9saWJyYXJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NldF9kYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCisgICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93LjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMywgbWFuL3ByaW50X2Rlc2NyaXB0aW9uLjMsIG1hbi9wcmludF9taWIuMywgIAorICAgICAgIG1hbi9wcmludF9vYmppZC4zLCBtYW4vcHJpbnRfdmFsdWUuMywgbWFuL3ByaW50X3ZhcmlhYmxlLjMsICAgCisgICAgICBtYW4vcmVhZF9hbGxfbWlicy4zLCBtYW4vcmVhZF9taWIuMywgbWFuL3JlYWRfbW9kdWxlLjMsICAgCisgICAgICBtYW4vcmVhZF9tb2R1bGVfbm9kZS4zLCBtYW4vcmVhZF9vYmppZC4zLCBtYW4vc2h1dGRvd25fbWliLjM6CisKKyAgIFJlbW92ZSBEb3h5Z2VuLWdlbmVyYXRlZCBtYW4gcGFnZXMsIGFuZCB0aG9zZSBsaW5raW5nCisgICBpbmRpdmlkdWFsIHJvdXRpbmVzIHRvIHRoZSBhcHByb3ByaWF0ZSBtYW4gcGFnZS4KKyAgIChUaGVzZSBhcmUgYmV0dGVyIGdlbmVyYXRlZCBkeW5hbWljYWxseSkKKworMjAxMC0wOC0xMyAxMjoxOSAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgUHJvbXB0IGZvciB3aGV0aGVyIHRvIGdlbmVyYXRlIGNhY2hpbmcgY29kZSBvciBub3QuCisKKzIwMTAtMDgtMTMgMTI6MTkgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMuY29uZjoKKworICAgUmV3b3JrIGd1aWRhbmNlIHF1ZXN0aW9ucyB3aGVuIHNlbGVjdGluZyB0aGUgYmVzdCB0YWJsZSBmcmFtZXdvcmsKKyAgIHRvIHVzZS4KKyAgIEVuc3VyZSB0YWJsZSBoYW5kbGluZyBjb2RlIGRvZXNuJ3Qgb3ZlcndyaXRlIHNjYWxhciBoYW5kbGluZworICAgY29kZS4KKyAgIENoZWNrIHRoYXQgdGhlIHN0YXJ0aW5nIHBvaW50IGlzIHN1aXRhYmxlIGZvciBNZkQgZnJhbWV3b3JrLgorCisyMDEwLTA4LTEyIDE1OjQwICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBmaXggY29kZSBicm9rZW4gYnkgJ2NvbXBpbGVyIHdhcm5pbmcgZml4JyBpbiByMTkxNzkKKworMjAxMC0wOC0xMiAxNTozOSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oOgorCisgICBmaXggdHlwbyBpbiBjb21tZW50CisKKzIwMTAtMDgtMTEgMjI6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSBhIGR1cGxpY2F0ZSB2YWx1ZSBjaGVjaworCisyMDEwLTA4LTExIDIyOjA4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnM6CisKKyAgIGFkZCBhIHRlc3Qgd2hlcmUgd2UgY2FuIHRydXN0IGEgQ0Etc2lnbmVkIGNlcnQgYW5kIHdlIGRvbid0IHRydXN0CisgICB0aGUgQ0EKKworMjAxMC0wOC0xMSAyMjowOCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzOgorCisgICB0ZXN0IGEgZGlyZWN0bHkgbWFwcGVkIENBIGNlcnRpZmljYXRlCisKKzIwMTAtMDgtMTEgMjI6MDggIGhhcmRha2VyCisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OgorCisgICBjaGFuZ2UgdGhlIGxhQ29uZmlnIHRvIHJlYWQtd3JpdGUgdG8gbWF0Y2ggdGhlIHBhdGNoCisKKzIwMTAtMDgtMTEgMjI6MDcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDI5MzE0NDY6IGZyb20gYWhtYWtlOiBtYWtlIHRoZSBsb2FkIGF2ZXJhZ2VzCisgICB3cml0YWJsZS4KKworMjAxMC0wOC0xMSAwNjo0MyAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYzoKKworICAgQ0hBTkdFUzogU2lsZW5jZSBzb21lIGNvbXBpbGF0aW9uIHdhcm5pbmdzIGZyb20gdGVzdCBjYXNlcy4KKworMjAxMC0wOC0wOSAyMTowOSAgbWFnZnIKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKIAogICAgQ0hBTkdFUzogSGFuZGxlIGVtYmVkZGVkICUncyBpbiB0aGUgcmVzdWx0IG1lc3NhZ2UuCiAKKzIwMTAtMDgtMDkgMjE6MDcgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIENIQU5HRVM6IERvIG5vIGRvdWJsZSBkZWNsYXJlIHRoZSBpbmRleCB2YWx1ZXMuCisKIDIwMTAtMDgtMDUgMTE6NDkgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6CiAKICAgIFVwZGF0ZSAiYXV0aCoiIHVzYWdlIG1lc3NhZ2Ugd2l0aCBjb250ZXh0IHN1cHBvcnQKIAorMjAxMC0wOC0wMiAyMDowOCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmM6CisKKyAgIEZpeCB0d28gc2lsbHkgbWlzdGFrZXMuCisKKzIwMTAtMDgtMDIgMTQ6MTggIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jOgorCisgICBBSVggZmlsZXN5c3RlbSB0eXBlcyBhcmUgdGFnZ2VkIGFzIGludGVnZXJzLCBub3Qgc3RyaW5ncy4KKworMjAxMC0wOC0wMiAxMzo0OSAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBmaXggUGVybCBzeXN0ZW0oKSBjb25maWd1cmUgY2hlY2sgdG8gd29yayByZWxpYWJseSBvbiBzeXN0ZW1zCisgICB0aGF0IGxhY2sKKyAgIFBlcmwKKworMjAxMC0wOC0wMiAxMTowOCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBtYWRlIGl0IHBvc3NpYmxlIHRvIGFuYWx5emUgYWxsIGNvZGUgY292ZXJlZCBieQorICAgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgd2l0aCBhIGR5bmFtaWMgYW5hbHl6ZXIsIGF0IGxlYXN0IGlmIHRoYXQKKyAgIGFuYWx5emVyIHN1cHBvcnRzIGZvbGxvd2luZyBjaGlsZCBwcm9jZXNzZXMuIEFuIGV4YW1wbGU6CisgICAKKyAgIHJtIC1yZiAvdG1wL3NubXAtdGVzdC0qCisgICBtYWtlIC1zCisgICBTTk1QX1NBVkVfVE1QRElSPXllcyBEWU5BTUlDX0FOQUxZWkVSPSJ2YWxncmluZAorICAgLS10cmFjZS1jaGlsZHJlbj15ZXMgLS10cmFjay1vcmlnaW5zPXllcyIgbWFrZSAtcyB0ZXN0CisgICBncmVwIC1pIHVuaW5pdGlhbGlzZWQgL3RtcC9zbm1wLXRlc3QtKiB8IHhhcmdzIGxlc3MKKworMjAxMC0wOC0wMiAxMTowMiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmM6CisKKyAgIEZpeGVkIHRoZSBmb2xsb3dpbmcgdHdvIFZhbGdyaW5kIGNvbXBsYWludHM6CisgICAKKyAgIENvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocykKKyAgIGF0IDB4NkQ3MDJFMDogdmZwcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkQ5OUQxMTogdnNucHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZEN0E0MTI6IHNucHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZFMTQ0Mzc6IGluZXRfbnRvYSAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg1RTVFMjE5OiBuZXRzbm1wX2lwdjRfZm10YWRkciAoc25tcElQdjRCYXNlRG9tYWluLmM6MjE1KQorICAgYnkgMHg1RTY1NzE3OiBuZXRzbm1wX3RjcF9mbXRhZGRyIChzbm1wVENQRG9tYWluLmM6NzApCisgICBieSAweDVFNTY3RUM6IG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nCisgICAoc25tcF90cmFuc3BvcnQuYzoyMjQpCisgICBieSAweDVFMjQ3OUE6IF9zZXNzX3Byb2Nlc3NfcGFja2V0IChzbm1wX2FwaS5jOjU0NDEpCisgICBieSAweDVFMjVFMzc6IF9zZXNzX3JlYWQgKHNubXBfYXBpLmM6NjAzNykKKyAgIGJ5IDB4NUUyNjFEQTogc25tcF9zZXNzX3JlYWQyIChzbm1wX2FwaS5jOjYxNDkpCisgICBieSAweDVFMjYyODI6IHNubXBfcmVhZDIgKHNubXBfYXBpLmM6NTc0MCkKKyAgIGJ5IDB4NDA0REU0OiBtYWluIChzbm1wZC5jOjEyMjcpCisgICBVbmluaXRpYWxpc2VkIHZhbHVlIHdhcyBjcmVhdGVkIGJ5IGEgaGVhcCBhbGxvY2F0aW9uCisgICBhdCAweDRDMjcwQTU6IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzoyMzYpCisgICBieSAweDVFNjU3Mzk6IG5ldHNubXBfdGNwX2FjY2VwdCAoc25tcFRDUERvbWFpbi5jOjgyKQorICAgYnkgMHg1RTI1MzgzOiBfc2Vzc19yZWFkIChzbm1wX2FwaS5jOjU3ODYpCisgICBieSAweDVFMjYxREE6IHNubXBfc2Vzc19yZWFkMiAoc25tcF9hcGkuYzo2MTQ5KQorICAgYnkgMHg1RTI2MjgyOiBzbm1wX3JlYWQyIChzbm1wX2FwaS5jOjU3NDApCisgICBieSAweDQwNERFNDogbWFpbiAoc25tcGQuYzoxMjI3KQorICAgCisgICBDb25kaXRpb25hbCBqdW1wIG9yIG1vdmUgZGVwZW5kcyBvbiB1bmluaXRpYWxpc2VkIHZhbHVlKHMpCisgICBhdCAweDZGN0IyRTA6IHZmcHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZGQTREMTE6IHZzbnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2Rjg1NDEyOiBzbnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg3MDFGNDM3OiBpbmV0X250b2EgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NTZGQTIxOTogbmV0c25tcF9pcHY0X2ZtdGFkZHIgKHNubXBJUHY0QmFzZURvbWFpbi5jOjIxNSkKKyAgIGJ5IDB4NTcwMTcxNzogbmV0c25tcF90Y3BfZm10YWRkciAoc25tcFRDUERvbWFpbi5jOjcwKQorICAgYnkgMHg1NkYyN0VDOiBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZworICAgKHNubXBfdHJhbnNwb3J0LmM6MjI0KQorICAgYnkgMHg1NkYyOTRGOiBuZXRzbm1wX3RyYW5zcG9ydF9zZW5kIChzbm1wX3RyYW5zcG9ydC5jOjI0OCkKKyAgIGJ5IDB4NTZCQzQ4Nzogc25tcF9zZXNzX2FzeW5jX3NlbmQgKHNubXBfYXBpLmM6NTIwNCkKKyAgIGJ5IDB4NTZCQzY1MTogc25tcF9hc3luY19zZW5kIChzbm1wX2FwaS5jOjQ5OTgpCisgICBieSAweDU2QkM2Nzc6IHNubXBfc2VuZCAoc25tcF9hcGkuYzo0OTg0KQorICAgYnkgMHg1Njk4NDQwOiBzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiIChzbm1wX2NsaWVudC5jOjEwMDYpCisgICBVbmluaXRpYWxpc2VkIHZhbHVlIHdhcyBjcmVhdGVkIGJ5IGEgaGVhcCBhbGxvY2F0aW9uCisgICBhdCAweDRDMjcwQTU6IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzoyMzYpCisgICBieSAweDU3MDFCM0U6IG5ldHNubXBfdGNwX3RyYW5zcG9ydCAoc25tcFRDUERvbWFpbi5jOjE2MykKKyAgIGJ5IDB4NTcwMUU2RjogbmV0c25tcF90Y3BfY3JlYXRlX3RzdHJpbmcgKHNubXBUQ1BEb21haW4uYzozMDUpCisgICBieSAweDU2RjM4MDQ6IG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbAorICAgKHNubXBfdHJhbnNwb3J0LmM6NjAxKQorICAgYnkgMHg1NkYzQUNDOiBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX2NsaWVudAorICAgKHNubXBfdHJhbnNwb3J0LmM6NjY5KQorICAgYnkgMHg1NDM0NEY2OiBzdWJhZ2VudF9vcGVuX21hc3Rlcl9zZXNzaW9uIChzdWJhZ2VudC5jOjc1OCkKKyAgIGJ5IDB4NTQzNDlDODogYWdlbnR4X3Jlb3Blbl9zZXNzaW9uIChzdWJhZ2VudC5jOjg2OSkKKyAgIGJ5IDB4NTQzNEQwMDogc3ViYWdlbnRfc3RhcnR1cCAoc3ViYWdlbnQuYzo5OSkKKyAgIGJ5IDB4NTZFQUVCNzogc25tcF9jYWxsX2NhbGxiYWNrcyAoY2FsbGJhY2suYzozMzgpCisgICBieSAweDU2REU2RkI6IHJlYWRfY29uZmlncyAocmVhZF9jb25maWcuYzoxMDE4KQorICAgYnkgMHg1NkMyODdFOiBpbml0X3NubXAgKHNubXBfYXBpLmM6ODUwKQorICAgYnkgMHg0MDQ3N0I6IG1haW4gKHNubXB0cmFwZC5jOjEwNDgpCisKKzIwMTAtMDgtMDEgMDY6MTEgIGJ2YXNzY2hlCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgRml4ZWQgc3BlbGxpbmcgZXJyb3JzIHJlcG9ydGVkIGJ5IGlzcGVsbCAtbC4KKwogMjAxMC0wOC0wMSAwNjowMCAgYnZhc3NjaGUKIAotICAgKiBzbm1wbGliL3NubXBfZW51bS5jOgorICAgKiAgc25tcGxpYi9zbm1wX2VudW0uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmM6CiAKICAgIEZpeGVkIGEgdHlwbyBpbiBhIHRleHQgc3RyaW5nIGluIGEgdW5pdCB0ZXN0OiByZXN0dXJhbnQgLT4KICAgIHJlc3RhdXJhbnQuCiAKKzIwMTAtMDgtMDEgMDU6NTMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oOgorCisgICBEb2N1bWVudGVkIGJlaGF2aW9yIG9mIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCkuCisKKzIwMTAtMDctMzEgMjM6NTAgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMC5oOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTI2NjogYWRkIG1pc3NpbmcgaGVhZGVyIGZpbGUgdG8gc3VwcG9ydCBNYWMgT1MgWAorICAgMTAuNgorICAgKFNub3cgTGVvcGFyZCAtICJkYXJ3aW4xMCIpCisKKzIwMTAtMDctMzEgMjA6MzggIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNy0zMSAyMDozNSAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDctMzEgMjA6MzEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA3LTMxIDIwOjI0ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDEwLTA3LTMxIDIwOjE2ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA3LTMxIDIwOjExICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBjaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZSByZWFkbWUgc2VjdGlvbiB0byBjYWxsIG91dCBORVdTLXRvbworCisyMDEwLTA3LTMxIDIwOjEwICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIGFkZGVkIG1pc3NpbmcgbmV3cyBpdGVtcworCiAyMDEwLTA3LTMwIDEzOjA2ICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKQEAgLTE5ODEsNiArMzc4NjUsODcgQEAKICAgIENIQU5HRVM6IHB5dGhvbjogcGF0Y2ggMzAzNTU3ODogZnJvbSBzd3M6IGtlZXAgZXJyb3IgY29kZXMgdXAgdG8KICAgIGRhdGUKIAorMjAxMC0wNy0yOSAxNTo0OCAgZHRzMTIKKworICAgKiBjb25maWd1cmU6CisKKyAgIEFkZCBzdXBwb3J0IGZvciBNYWMgT1MgWCAxMC42IChTbm93IExlb3BhcmQgLSAiZGFyd2luMTAiKQorICAgKE9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhcyBNYWMgT1MgWCAxMC41CisgICAoTGVvcGFyZCAtICJkYXJ3aW45IikpCisKKzIwMTAtMDctMjkgMTU6NDcgIGR0czEyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbjoKKworICAgQWRkIHN1cHBvcnQgZm9yIE1hYyBPUyBYIDEwLjYgKFNub3cgTGVvcGFyZCAtICJkYXJ3aW4xMCIpCisgICAoT24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzIE1hYyBPUyBYIDEwLjUKKyAgIChMZW9wYXJkIC0gImRhcndpbjkiKSkKKworMjAxMC0wNy0yOSAxNTowMyAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaDoKKworICAgUHJvdmlkZSBhIGRlZmluaXRpb24gb2YgJ3ZhX2xpc3QnIGZvciB2YXJhcmdzLWJhc2VkIEFQSXMKKworMjAxMC0wNy0yOSAxNDo1OCAgZHRzMTIKKworICAgKiAgYWNjb25maWcuaCwgYWdlbnQvYXV0b19ubGlzdC5jLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaCwgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBBZGQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgQUlYIDcKKyAgIChvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgaWRlbnRpY2FsIHRvIEFJWCA2KQorCisyMDEwLTA3LTI5IDE0OjU2ICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob246CisKKyAgIERpc2FibGUgZW1iZWRkZWQgcGVybCBieSBkZWZhdWx0IG9uIGFyY2hpdGVjdXJlcyB3aGVyZQorICAgdGhpcyBzZWVtcyB0byBjYXVzZSBwcm9ibGVtcyAoSFAtVVggJiBNYWMgT1MgWCkKKworMjAxMC0wNy0yOSAxMToxMyAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEd1YXJkIGFnYWluc3QgYmxhbmsgJ2luY2x1ZGUqJyBsaW5lcy4KKyAgIEhhbmRsZSByZWxhdGl2ZSAnaW5jbHVkZUZpbGUnIHBhdGhzCisKKzIwMTAtMDctMjkgMTA6NDcgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgUmV0dXJuIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciBjb25maWcgZmlsZXMgYXJlIGFjdHVhbGx5CisgICBwcm9jZXNzZWQuCisgICBSZXBvcnQgcHJvYmxlbXMgd2l0aCBmYWlsaW5nIHRvIGluY2x1ZGUgY29uZmlnIGZpbGVzLgorCisyMDEwLTA3LTI4IDE0OjQ0ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaCwgbWFuL2NvbmZpZ19hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vdmFyYmluZF9hcGkuMy5kZWYsICAKKyAgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgQnJpbmcgbWFuIHBhZ2UgZG9jdW1lbnRhdGlvbiwgaGVhZGVyIGZpbGVzIGFuZCBXaW5kb3dzIERMTAorICAgZGVmaW5pdGlvbnMKKyAgIG9mIHRvcC1sZXZlbCBwdWJsaWMgQVBJIGNhbGxzIGludG8gbGluZSB3aXRoIGVhY2ggb3RoZXIuCisKIDIwMTAtMDctMjggMTQ6NDAgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgpAQCAtMTk4OSwxMyArMzc5NTQsMzkgQEAKIAogMjAxMC0wNy0yOCAxNDozNiAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqICBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKIAogICAgRG9uJ3QgbWl4IFNNSXYxIGFuZCBTTUl2MiBNSUJzIGluIHRoZSBsaXN0IG9mIGRlZmF1bHQgTUlCcyB0bwogICAgbG9hZC4KICAgIFVzZSBuZXdlciBTTUl2MiB2ZXJzaW9ucyAod2hpY2ggaW5jbHVkZSBzdWl0YWJsZSBkaXNwbGF5IGhpbnRzKQogICAgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsIFJGQzEyMTMgTUlCICh3aGljaCBkb2Vzbid0KQogCisyMDEwLTA3LTI4IDE0OjEwICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRml4IGluZGVudGF0aW9uIGZvciAnaW5jbHVkZVNlYXJjaCcgcHJvY2Vzc2luZyBjb2RlLgorCisyMDEwLTA3LTI4IDE0OjA5ICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRXh0ZW5kICdpbmNsdWRlJyBjb25maWcgZmlsZSBwcm9jZXNzaW5nIHRvIGNvdmVyIHRocmVlCisgICBkaWZmZXJlbnQgbW9kZXMgb2Ygd29ya2luZzoKKyAgIC0gbG9vayBmb3IgdGhlIGZpbGUgb24gdGhlIGNvbmZpZyBzZWFyY2ggcGF0aAorICAgLSBpbmNsdWRlIHRoZSBzcGVjaWZpZWQgZmlsZSBieSBuYW1lCisgICAtIGlvYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CisgICBVc2UgZGlmZmVyZW50IGNvbmZpZyB0b2tlbnMgdG8gZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuCisKKzIwMTAtMDctMjcgMTE6MTIgIGhhcmRha2VyCisKKyAgICogYWdlbnQva2VybmVsLmMsIGFnZW50L2tlcm5lbC5oLCBhZ2VudC9zbm1wX3ZhcnMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDI5MTI1MjA6IGZyb20gbGlzdG9tOiBGcmVlIGttZW0gcmVmZXJlbmNlcworICAgb24gc2h1dGRvd24KKwogMjAxMC0wNy0yNyAxMDo1NCAgaGFyZGFrZXIKIAogICAgKiBtaWJzL1NNVVgtTUlCLnR4dDoKQEAgLTIwMDMsNiArMzc5OTQsNjQgQEAKICAgIENIQU5HRVM6IG1pYnM6IHBhdGNoIDI5NzQ3MTY6IGZyb20gYnZhc3NjaGU6IGZpeCBpc3N1ZXMgaW4gdGhlCiAgICBTTVVYLU1JQgogCisyMDEwLTA3LTI3IDA4OjU0ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgaW5jbHVkZSB0aGUgbmV3IHNlY3VyaXR5LWhlZGFlcnMgbW9kdWxlCisKKzIwMTAtMDctMjcgMDg6NTQgIGhhcmRha2VyCisKKyAgICogbG9jYWwvc25tcC1icmlkZ2UtbWliOgorCisgICByZW1vdGUgZGVidWdnaW5nL3Byb2Nlc3Npbmcgc3RkZXJyIG91dHB1dAorCisyMDEwLTA3LTI3IDA4OjU0ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL3NubXAtYnJpZGdlLW1pYjoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAzMDI4OTIzOiBmcm9tIGplbnNvOiBuZXcgY29weSBvZiB0aGUKKyAgIGJyaWRnZS1taWIgcGVybCBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTA3LTI3IDA4OjMxICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlcywgICAKKyAgICAgIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi1zZWN1cml0eS1oZWFkZXJzLmluOgorCisgICBzZXBhcmF0ZSBvdXQgdGhlIHNlY3VyaXR5IGhlYWRlci9pbml0IGdlbmVyYXRpb24KKworMjAxMC0wNy0yNyAwODozMSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzOgorCisgICB0cmFuc3BvcnQgY29uZmlndXJlIHBvcnRpb24KKworMjAxMC0wNy0yNyAwODozMCAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cywgICAKKyAgICAgIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi10cmFuc3BvcnQtaGVhZGVycy5pbiwgICAKKyAgICAgIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW46CisKKyAgIG1vdmUgdHJhbnNwb3J0IGhlYWRlciBnZW5lcmF0aW9uIHRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgY3JlYXRlIGFuCisgICBleHRlcm5hbCBzZXBhcmF0ZSBzY3JpcHQgZm9yIGdlbmVyYXRpbmcgaXQKKworMjAxMC0wNy0yNyAwODoxNCAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IHJlcG9ydCBnZnMgZmlsZXN5c3RlbXMgaW4gaHJTdG9yYWdlVGFibGUgYW5kCisgICBockZTVGFibGUuCisKKzIwMTAtMDctMjQgMTU6NDIgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBEb24ndCBsb3NlIHRyYWNrIG9mIHdoaWNoIGNvbmZpZyBmaWxlIHdhcyBiZWluZyBwYXJzZWQsCisgICB3aGVuIHByb2Nlc3NpbmcgYW4gaW5jbHVkZWQgY29uZmlnIGZpbGUuCisgICBGaXhlcyBhIGJ1ZyB3aXRoIHJlcG9ydGluZyBsYXRlciBjb25maWcgZXJyb3JzLgorCiAyMDEwLTA3LTI0IDE1OjM2ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKQEAgLTIwMTEsNiArMzgwNjAsNzkgQEAKICAgIHdoZW4gb3BlbmluZyBhIG5ldyBTTk1QIHNlc3Npb24uCiAgICBGaXhlcyBhIGJ1ZyB3aXRoIHJlcG9ydGluZyBsYXRlciBjb25maWcgZXJyb3JzLgogCisyMDEwLTA3LTIzIDAzOjEyICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBhZGQgdGhlIFRMUyBtb2R1bGVzIHRvIHRoZSBsaXN0IG9mIHRlc3QgbW9kdWxlcworCisyMDEwLTA3LTIxIDE5OjI1ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYzoKKworICAgRml4IHR5cG8gaW4gZG94eWdlbiBjb21tZW50CisKKzIwMTAtMDctMjEgMTk6MjQgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6CisKKyAgIEZpeCB0eXBvIGluIHNwZWVkIGNvbXB1dGF0aW9uCisKKzIwMTAtMDctMjEgMTk6MjEgIG5iYQorCisgICAqIHNubXBsaWIvc25tcF9zZWNtb2QuYzoKKworICAgSW5jbHVkZSBnZW5lcmF0ZWQgc2VjdXJpdHktaW5jbHVkZXMuaAorCisyMDEwLTA3LTIxIDE5OjIwICBuYmEKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmg6CisKKyAgIEZpeCBpbml0IGZ1bmMgbmFtZSAoY29weS1wYXN0ZSBnbGl0Y2gpCisKKzIwMTAtMDctMjEgMTk6MTggIG5iYQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBSZW1vdmUgc3VwZXJmbHVvdXMgc2VtaWNvbG9uCisKKzIwMTAtMDctMjEgMTk6MTggIG5iYQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBPdXQgb2Ygb3JkZXIgZGVjbGFyYXRpb24KKworMjAxMC0wNy0yMSAxOToxNyAgbmJhCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgTG9nIGVycm9yIG9uIGZpbGUgb3BlbiBlcnJvcgorCisyMDEwLTA3LTIxIDE5OjE2ICBuYmEKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIFNwZWxpbmcgZXJyb3IKKworMjAxMC0wNy0yMSAxODoxMCAgbmJhCisKKyAgICogbWlicy9pYW5hbGlzdCwgbWlicy9yZmNsaXN0LCBtaWJzL3JmY21pYnMuZGlmZjoKKworICAgVXBkYXRlIGZvciBjdXJyZW50IFJGQ3MKKworMjAxMC0wNy0yMSAxODowOCAgbmJhCisKKyAgICogbWlicy9JQU5BaWZUeXBlLU1JQi50eHQ6CisKKyAgIEN1cnJlbnQgdmVyc2lvbiBmcm9tIElBTkEKKworMjAxMC0wNy0yMSAxODowNSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIHIxNzQ5NSBlcnJvbmVvdXNseSBkaXNhYmxlZCBkaXNrSU9MQXggZm9yIGxpbnV4CisKIDIwMTAtMDctMjAgMTA6MzggIGpzYWZyYW5lawogCiAgICAqIHNubXBsaWIvc3lzdGVtLmM6CkBAIC0yMDIwLDE4ICszODE0MiwxNjAgQEAKIAogMjAxMC0wNy0yMCAwNzozMiAganNhZnJhbmVrCiAKLSAgICogIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAotICAgICAgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCBtYW4vc25tcHRyYXBkLjguZGVmLCAgCi0gICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKyAgICogIGFnZW50L3NubXBkLmMsIGFwcHMvYWdlbnR4dHJhcC5jLCBhcHBzL3NubXB0cmFuc2xhdGUuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkLmMsIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wdHJhcGQuOC5kZWYsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CiAKICAgIERlc2NyaWJlIC1EIHVzYWdlIGFzIC1EW1RPS0VOXSBpbnN0ZWFkIG9mIC1EIFtUT0tFTl0KIAorMjAxMC0wNy0xNyAxNToxMCAgcnN0b3J5CisKKyAgICogbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0OgorCisgICB1cGRhdGUgZGlzcGxheSBoaW50IHRvIHNvbWUgbGVzcyBhbWJpZ3VvdXMgKGFuZCB0aGF0IHdvcmtzIHdpdGgKKyAgIG91ciBsaWIpCisKKzIwMTAtMDctMTcgMDQ6MTMgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIGZpeCB0ZXN0c2ltcGxlIGZvciBidWlsZGRpciE9c3JjZGlyCisKKzIwMTAtMDctMTcgMDQ6MTIgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIGFkZCB0ZXN0c2ltcGxlIHRhcmdldAorCisyMDEwLTA3LTE2IDE5OjIxICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVsZWFzZSBpdGVyYXRvciB3aGVuIGRvbmUgd2l0aCBpdAorCiAyMDEwLTA3LTE1IDE4OjI4ICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvc25tcHVzbS5jOgogCiAgICBDSEFOR0VTOiBzbm1wbGliOiBmaXggaXNzdWUgd2l0aCBVU00gdXNpbmcgaW5hY3RpdmUgdXNlcnMKIAorMjAxMC0wNy0xNSAwMTozNSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYzoKKworICAgZG9uJ3QgdXNlIHN0cm5kdXAgKHBvcnRhYmlsaXR5KQorCisyMDEwLTA3LTE1IDAxOjM1ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBpbmNsdWRlIGFwcHJvcHJpYXRlIHN0cmluZyBoZWFkZXI7IGRlZmluZSBOQU1FX01BWCBpZiBub3QgYWxyZWFkeQorICAgZGVmaW5lZDsKKyAgIGRvbid0IHVzZSBzdHJuZHVwIChwb3J0YWJpbGl0eSkKKworMjAxMC0wNy0xNSAwMTozNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNoZWNrIHRoYXQgc29tZSBuZXdlciBvcGVuc3NsIG1hY3JvcyBhcmUgZGVmaW5lZCBiZWZvcmUgdXNpbmcKKyAgIHRoZW07IGluY2x1ZGUKKyAgIGFwcHJvcHJpYXRlIHN0cmluZyBoZWFkZXIKKworMjAxMC0wNy0xNSAwMTozNSAgcnN0b3J5CisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBjaGVjayBmb3IgZHRscyBzdXBwb3J0IGluIG9wZW5zc2wKKworMjAxMC0wNy0xNSAwMTozNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGRvbid0IGNvbXBpbGUgZHRscyBkb21haW4gaWYgbm8gZHRscyBzdXBwb3J0IGluIG9wZW5zc2wKKworMjAxMC0wNy0xNSAwMTozNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgaWZkZWYgcHJvdGVjdGlvbiBmb3IgbGF0ZXIgc2hhIGFsZ29yaXRobXMKKworMjAxMC0wNy0xNSAwMTozNCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2Rhcndpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luNy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oOgorCisgICBkYXJ3aW4gb3BlbnNzbCBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgcmVjZW50IHNoYSBhbGdvcml0aG1zCisKKzIwMTAtMDctMTUgMDE6MzMgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgZml4IHR5cG8gaW4gaWZkZWYgdGVzdAorCisyMDEwLTA3LTE1IDAxOjMzICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmM6CisKKyAgIGZpeCBjdXQtbi1wYXN0ZSBlcnJvciBpbiBpbmNsdWRlZCBmaWxlIG5hbWUKKworMjAxMC0wNy0xNCAxNTowOCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYzoKKworICAgZml4IHRoZSBmaXg6IHB1dCBQUkl6IHNwZWMgaW4gY29ycmVjdCBwbGFjZQorCisyMDEwLTA3LTE0IDE1OjAzICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzOgorCisgICBzcGVjaWZ5IFNOTVAgdmVyc2lvbiBvbiBjb21tYW5kbGluZQorCisyMDEwLTA3LTE0IDE1OjAzICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgcXVpZXQgY29tcGlsZXIKKworMjAxMC0wNy0xNCAxNTowMiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTAtMDctMTMgMjA6MDMgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAgYXBwcy9zbm1wdGxzLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaDoKKworICAgaW5jbHVkZSBzc2wuaCBiZWZvcmUgY2VydF91dGlsLmgKKworMjAxMC0wNy0xMyAyMDowMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGRlYnVnIG91dHB1dCBmb3IgZm91bmQgY2VydAorCisyMDEwLTA3LTEzIDE2OjI0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHR5cG8gaW4gbG9nIG1zZworCiAyMDEwLTA3LTEyIDEwOjI2ICBidmFzc2NoZQogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzoKQEAgLTIwNDAsNiArMzgzMDQsMTA5IEBACiAgICBpbnRlcmZhY2VzIHRhYmxlIGRvZXMgbm90IHRyaWdnZXIgb3V0LW9mLXJhbmdlIGFycmF5IGFjY2Vzc2VzCiAgICAod2FzIGRldGVjdGVkIGJ5IEJvdW5kc0NoZWNrZXIpLgogCisyMDEwLTA3LTEyIDEwOjIxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jOgorCisgICBGaXhlZCBhIGRhbmdsaW5nLXBvaW50ZXItcmVhZCB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIxOTAxOC4gSW4KKyAgIHIxOTAxOCB0aGUgdHlwZSBvZiBncm91cFN1YnRyZWVMZW4gd2FzIGNoYW5nZWQgZnJvbSBpbnQgdG8KKyAgIHNpemVfdCwgd2hpY2ggY2hhbmdlZCB0aGUgYmVoYXZpb3Igb2YgdGhlIGxvb3AgIndoaWxlCisgICAoZ3JvdXBTdWJ0cmVlTGVuLS0gPiAwKSAuLi4iOiBpbnN0ZWFkIG9mIG5vdCBleGVjdXRpbmcgdGhlIGxvb3AKKyAgIGJvZHkgd2hlbiBncm91cFN1YnRyZWVMZW4gd2FzIG5lZ2F0aXZlLCByMTkwMTggY2F1c2VkIHRoZSBib2R5IG9mCisgICB0aGF0IGxvb3AgdG8gYmUgZXhlY3V0ZWQuIERldGVjdGVkIGJ5IHJ1bm5pbmcgc25tcGQgdW5kZXIKKyAgIEJvdW5kc0NoZWNrZXIgd2hpbGUgcGVyZm9ybWluZyBhIE1JQiB3YWxrLgorCisyMDEwLTA3LTEyIDEwOjEyICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6CisKKyAgIFJldmVydGVkIHIxOTA0NyAod2hpY2ggd2FzIHdyb25nKSBhbmQgaW1wbGVtZW50ZWQgYSBwcm9wZXIgZml4CisgICBmb3IgdGhlIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaGVzLgorCisyMDEwLTA3LTEyIDEwOjA5ICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgUmVtb3ZlZCBhbiBvYnNvbGV0ZSBjb21tZW50LgorCisyMDEwLTA3LTEyIDEwOjA4ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsIHdpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaDoKKworICAgU3VwcHJlc3NlZCBtb3JlIE1TVkMgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDctMTIgMDQ6NDUgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVmFyczoKKworICAgYWRkIGNvbW1lbnQgd2l0aCBvYmplY3QgbmFtZSBmb3IgbnVtZXJpYyBpZHMKKworMjAxMC0wNy0xMiAwNDo0NSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbmV3IGZ1bmN0aW9uIHRvIGdldCBzZXJ2ZXJJZCBmcm9tIHNubXBUbHN0bUFkZHJUYWJsZSBkYXRhOyB1c2UKKyAgIG5ldyBhcGkKKyAgIHRvIGNvbmZpZyBzZXJ2aWNlSWQgZm9yIHRyYXAgdHJhbnNwb3J0IHdoZW4gc2VuZGluZyB0cmFwcworCisyMDEwLTA3LTExIDExOjE4ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczoKKworICAgQ0hBTkdFUzogQlVHOiAzMDI3OTAwOiB3aGVuIGNyb3NzLWNvbXBpbGluZyBpdCBpcyBub3cgYXNzdW1lZAorICAgdGhhdCBtZW1jbXAoKSBpcyBhdmFpbGFibGUgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGF0IGl0IGlzIG5vdAorICAgYXZhaWxhYmxlLgorCisyMDEwLTA3LTExIDEwOjMwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgcjE5MTk3LgorCisyMDEwLTA3LTEwIDIwOjAwICByc3RvcnkKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3luYyB1cCBoZWxwIG91dHB1dCBhbmQgb3B0aW9ucyBwcm9jZXNzaW5nCisKKzIwMTAtMDctMDkgMTU6MTMgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBVcGRhdGVkIEN5Z3dpbiBzZWN0aW9uIGluIFJFQURNRS53aW4zMi4KKworMjAxMC0wNy0wOSAxNToxMyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jOgorCisgICBDSEFOR0VTOiBXaW4zMjogU3VwcHJlc3NlZCAiaW1wbGljaXQgY2FzdCBmcm9tIGludCB0byB1X2NoYXIiCisgICB3YXJuaW5ncyBnZW5lcmF0ZWQgYnkgTVNWQy4KKworMjAxMC0wNy0wOSAxNToxMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBUZXN0aW5nOiBtYWRlIHRoZSBkZWJ1ZyBvdXRwdXQgdGhhdCBhcHBlYXJzIGluIHRoZSAiaW52b2tlZCIgZmlsZQorICAgZXZlbiBtb3JlIHZlcmJvc2UuCisKKzIwMTAtMDctMDkgMTU6MTAgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbjMyIE1TVkMgYnVpbGQgZml4ZXMuCisKKzIwMTAtMDctMDggMTk6MzAgIG1hcnoKKworICAgKiAgbG9jYWwvY2VydGdlbi10ZXN0LnBsLCBsb2NhbC9uZXQtc25tcC1jZXJ0LCAgIAorICAgICAgbG9jYWwvbmV0LXNubXAtY2VydC5jb25mOgorCisgICBhZGRzIHBlciBpZGVudGl0eSBjb25maWd1cmF0aW9uIGZpbGUgc3VwcG9ydCBzbyBkZWZhdWx0cyBjYW4gYmUKKyAgIGN1c3RvbWlzZWQgb24gY21kbGluZSB3IC1pIDxpZGVudGl0eT4gLSBzZWUgbmV0LXNubXAtY2VydC5jb25mCisgICBmb3IgZXhhbXBsZXMgYW5kIHNvbWUgaGVscCBpbmZvCisKIDIwMTAtMDctMDggMTI6MTcgIGR0czEyCiAKICAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYzoKQEAgLTIwNTMsMzkgKzM4NDIwLDc4MiBAQAogICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzAxOTI0MzogUmVnaXN0ZXIgZXhlY0ZpeCBjb21wYXRhYmlsaXR5CiAgICBkaXJlY3RpdmUgY29ycmVjdGx5LgogCisyMDEwLTA3LTA3IDEwOjE5ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZToKKworICAgQ0hBTkdFUzogQ3lnd2luIGFuZCBNaW5HVzogdGVzdHMgVDExMCwgVDExMSwgVDExMiwgVDEyMCwgVDEyMSBhbmQKKyAgIFQxMjIgZG8gbm93IHBhc3Mgd2hlbiBzbm1wZCBpcyBidWlsdCB3aXRoIHdpbkV4dERMTCBzdXBwb3J0CisgICBlbmFibGVkLgorCisyMDEwLTA3LTA2IDE4OjU5ICBidmFzc2NoZQorCisgICAqICBDaGFuZ2VMb2csIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmksICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBNYWRlIHJlZ3Jlc3Npb24gdGVzdHMgZWFzaWVyIHRvIGRlYnVnIGJ5IGluY2x1ZGluZyBvayAvIG5vdCBvaworICAgc3RhdHVzIGluIHRoZSAiaW52b2tlZCIgZmlsZS4KKyAgIFNwZWxsaW5nIGZpeGVzOiByZW1lYmVyIC0+IHJlbWVtYmVyOyBzZXBlcmF0b3IgLT4gc2VwYXJhdG9yLgorCisyMDEwLTA3LTA2IDE1OjA0ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDoKKworICAgVGVzdCBUMDY1IGRvZXMgbm93IHJlYWxseSBwYXNzIG9uIE1pbkdXLgorCisyMDEwLTA3LTA1IDEwOjAxICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIEFkZGVkIGN1cmx5IGJyYWNlcyBzdWNoIHRoYXQgJ3x8JyBhbmQgJyYmJyBhcmUgZXZhbHVhdGVkIGluIHRoZQorICAgY29ycmVjdCBvcmRlci4KKworMjAxMC0wNy0wNCAxMTozNyAgYnZhc3NjaGUKKworICAgKiBhcHBzOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMDctMDQgMTE6MzQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgRmFsbCBiYWNrIGZyb20gUlVORlVMTFRFU1RTIHRvIFJVTlRFU1RTIGlmIG5laXRoZXIgVEFQOjpIYXJuZXNzCisgICBub3IgVGVzdDo6SGFybmVzcyBpcyBhdmFpbGFibGUuCisKKzIwMTAtMDctMDQgMTE6MjEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgdGVzdCBudW1iZXIgaW4gL3RtcC9zbm1wLXRlc3RzLSR0ZXN0bnVtIGlzIHNldAorICAgdG8gc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bCB0aGFuIGp1c3QgIjAiLgorCisyMDEwLTA3LTA0IDExOjIwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIFNwbGl0IGEgbG9uZyBjb21tZW50IGxpbmUuCisKKzIwMTAtMDctMDQgMTA6NTIgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgQnVnIGZpeDogbWFkZSBzdXJlIHRoYXQgc3JjZGlyIGlzIGNvbXB1dGVkIGNvcnJlY3RseSBpZiBgZGlybmFtZQorICAgJDBgID0gLgorCisyMDEwLTA3LTAyIDE2OjI3ICBidmFzc2NoZQorCisgICAqIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIFNpbXBsaWZpZWQgcjE5MTgxIChGaXhlZCBUTFNUQ1AtZW5hYmxlZCBidWlsZCBmb3IgcGxhdGZvcm1zIHdpdGgKKyAgIG5vbi1lbXB0eSAkKEVYRUVYVCksIGkuZS4gQ3lnd2luIGFuZCBNaW5HVykuCisKKzIwMTAtMDctMDEgMTg6MTUgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgRml4ZWQgVExTVENQLWVuYWJsZWQgYnVpbGQgZm9yIHBsYXRmb3JtcyB3aXRoIG5vbi1lbXB0eQorICAgJChFWEVFWFQpLCBpLmUuIEN5Z3dpbiBhbmQgTWluR1cuCisKKzIwMTAtMDctMDEgMTg6MTEgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wdGxzLmM6CisKKyAgIEZpeGVkIHlldCBhbm90aGVyIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wNy0wMSAxNzo1MyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBGaXhlZCB0d28gcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNy0wMSAwMDoxOSAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA3LTAxIDAwOjEzICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNy0wMSAwMDowMyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA2LTMwIDIzOjU1ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDEwLTA2LTMwIDIzOjQ4ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3NubXBkLmNvbmY6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA2LTMwIDIzOjQ1ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBtaXNzZWQgdHdvIHRva2VucyBpbiB0aGUgbWFuIHBnYWVzCisKKzIwMTAtMDYtMzAgMjM6NDUgIGhhcmRha2VyCisKKyAgICogIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcGQuOC5kZWYsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ2lwaGVyVGVzdHMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ3JsLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNBZ2VudFRyYXAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlciwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyU2Vzc2lvbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVHJhcGRVc2VyLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHJlbmFtZSB0aGUgZGVmWDUwOSB0b2tlbnMgdG8gc29tZXRoaW5nIG1vcmUgZnJpZW5kbHk6IGNsaWVudENlcnQKKyAgIGFuZCBzZXJ2ZXJDZXJ0CisKKzIwMTAtMDYtMzAgMjM6NDQgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgdG9wLWZpbGUgY29tbWVudCB1cGRhdGVzCisKKzIwMTAtMDYtMzAgMjM6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZG9uJ3QgY2FsbCBjZXJ0X2ZpbmQgd2l0aCBhIE5VTEwgYXJndW1lbnQKKworMjAxMC0wNi0zMCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhbGxvdyBkZWYgY2VydHMgdG8gYmUgc3BlY2lmaWVkIHVzaW5nIGEgZmlsZW5hbWUKKworMjAxMC0wNi0zMCAyMzo0MSAgdGFuZGVycworCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgZml4IHN5bnRheCBlcnJvcgorCisyMDEwLTA2LTMwIDIzOjAxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHR1cm4gYSBjb3VwbGUgb2Ygbm9uLWNyaXRpY2FsIGVycm9ycyBpbnRvIGRlYnVnIHN0YXRlbWVudHMgcGVyCisgICBkaXNjdXNzaW9uIHdpdGggcnN0b3J5CisKKzIwMTAtMDYtMzAgMjM6MDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG1ha2UgdGhlIHJlZ2V4cCBwYXR0ZXJuIG1hdGNoIGZvciB0ZXN0cyB0byBydW4gY2FzZSBpbnNlbnNpdGl2ZQorCisyMDEwLTA2LTMwIDIzOjAwICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudC5weToKKworICAgaW1wb3J0IHN0ZGVyciBmcm9tIHN5cywgcGVyIGRpc2N1c3Npb24gb24gLXVzZXJzCisKKzIwMTAtMDYtMzAgMjI6MTcgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYWRkIGJhY2sgaW4gdGhlIGRlZmF1bHQgcG9ydCBzcGVjaWZpZXIKKworMjAxMC0wNi0zMCAyMjoxNyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBlbmFibGUgcHVsbGluZyB0aGUgcHJpdmF0ZSBrZXkgb3ZlciBodHRwCisKKzIwMTAtMDYtMzAgMjI6MTcgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbW92ZSBVUkwgY29sbGVjdGlvbiBpbnRvIGEgc3ViIGZ1bmN0aW9uCisKKzIwMTAtMDYtMzAgMjI6MTYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYWRkZWQgYWJpbGl0eSB0byBwdWxsIGEgY2VydCBmcm9tIGEgVVJMCisKKzIwMTAtMDYtMzAgMjI6MTYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IGFyZ3VtZW50IGJ1ZyBpbiB0aGUgaXNfdXJsIGZ1bmN0aW9uCisKKzIwMTAtMDYtMzAgMjA6NDkgIGhhcmRha2VyCisKKyAgICogYXBwcy9zbm1wdGxzLmM6CisKKyAgIHJlbW92ZSBkZWJ1Z2dpbmcgY29kZQorCisyMDEwLTA2LTMwIDIwOjI3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN0R0bHNDTlNlc3Npb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdkdGxzQ05TZXNzaW9uX3NpbXBsZToKKworICAgcmVuYW1lIGZpbGUgZm9yIGNvbnNpc3RlbmN5CisKKzIwMTAtMDYtMzAgMjA6MDEgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZToKKworICAgdXBkYXRlIGZvciBuZXcgc25tcHRscyBhcHAKKworMjAxMC0wNi0zMCAyMDowMCAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgcmVtb3ZlIGFjY2lkZW50YWxseSBjaGVja2VkIGludCBkZWJ1ZyBjb2RlCisKKzIwMTAtMDYtMzAgMTk6NTkgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIGRlZmluZSBPSURzIGJhc2VkIG9uIFNOTVBfVExTX1RNX0JBU0UKKworMjAxMC0wNi0zMCAxOTo1OSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYzoKKworICAgYXV0by10cmFuc2lzdGlvbiBiZXR3ZWVuIG5vdFJlYWR5L25vdEluU2VydmljZQorCisyMDEwLTA2LTMwIDE5OjU3ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oOgorCisgICBhdXRvLXRyYW5zaXN0aW9uIGJldHdlZW4gbm90UmVhZHkvbm90SW5TZXJ2aWNlOyBhZGQKKyAgIHNubXBfc3RvcmVfbmVlZGVkIG9uIGNvbW1pdAorCisyMDEwLTA2LTMwIDE5OjU2ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1c2UgbmV3IGZpbmdlcnByaW50IHBhcnNlL2J1aWxkIGZ1bmN0aW9uczsgcmVtb3ZlIGJhZCBsZW5ndGgKKyAgIGNoZWNrOyBhdXRvCisgICB0cmFuc2l0aW9uIGJldHdlZW4gbm90UmVhZHkgYW5kIG5vdEluU2VydmljZQorCisyMDEwLTA2LTMwIDE5OjU1ICByc3RvcnkKKworICAgKiBtaWJzL1RMU1RNLU1JQi50eHQ6CisKKyAgIHJlbW92ZSBwcmUtcmZjIG1pYjsgc2VlIFNOTVAtVExTLVRNLU1JQi50eHQgaW5zdGVhZAorCisyMDEwLTA2LTMwIDE5OjU0ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICBjb25zb2xpZGF0ZSBtdWx0aXBsZSBmaWxlcworCisyMDEwLTA2LTMwIDE5OjUzICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1ha2UgaGFzaCB0eXBlIHBhcnNlIHJvdXRpbmUgcHVibGljOyBhZGQgcm91dGluZXMgdG8gYnVpbGQvcGFyc2UKKyAgIFNubXBUTFNGaW5nZXJwcmludAorCisyMDEwLTA2LTMwIDE5OjUxICByc3RvcnkKKworICAgKiAgTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvc25tcHRscy5jLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIE5FV1M6IHNubXB0bHM6IG5ldyBhcHAgZm9yIG1hbmFnaW5nIChEKVRMUyBjb25maWcgdmlhCisgICBTTk1QLVRMUy1UTS1NSUIgdGFibGVzCisKKzIwMTAtMDYtMzAgMTk6NTAgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jOgorCisgICBjYWxsIG5ldyBzbm1wX3N0b3JlX25lZWRlZCgpIGZ1bmN0aW9uIGFmdGVyIGEgY29tbWl0IGluIHRhYmxlcworICAgdGhhdAorICAgaGF2ZSBwZXJzaXN0ZW50IHN0b3JlCisKKzIwMTAtMDYtMzAgMTk6NDkgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IG5ldyBleHBlcmltZW50YWwgc2ltcGxlIHN0YXRlIG1hY2hpbmUKKyAgIE5FV1M6IHNubXBsaWI6IG5ldyBleHBlcmltZW50YWwgcm93IGNyZWF0aW9uIEFQSSB3aGljaCB1c2VzIGEKKyAgIHN0YXRlIG1hY2hpbmUKKyAgIHRvIHRyeSByZWFsbHkgaGFyZCB0byBjcmVhdGUgYSByb3cgZnJvbSBhIGdpdmVuIHZhcmJpbmQgbGlzdAorCisyMDEwLTA2LTMwIDE5OjQ4ICByc3RvcnkKKworICAgKiAgYWdlbnQvc25tcF9hZ2VudC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgTkVXUzogc25tcGQ6IG5ldyBBUEkgZm9yIGluZGljYXRpbmcgdGhhdCBwZXJzaXN0ZW50IHN0b3JlIG5lZWRzCisgICB0byBiZSBzYXZlZCBhZnRlciB0aGUgY3VycmVudCByZXF1ZXN0IGZpbmlzaGVzIHByb2Nlc3NpbmcKKworMjAxMC0wNi0zMCAxOTo0NiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIGFkZCBzb21lIG5ldyB3cmFwcGVyIG1hY3JvcworCisyMDEwLTA2LTMwIDE1OjU5ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0NOU2Vzc2lvbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuU2Vzc2lvbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyU2Vzc2lvbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE1RHRsc1NhblNlc3Npb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTZUbHNTYW5TZXNzaW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3ZHRsc0NOU2Vzc2lvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExOFRsc0NOU2Vzc2lvbl9zaW1wbGU6CisKKyAgIGFkZGVkIGNoZWNrcyBmb3IgY2hlY2tpbmcgZGlyZWN0IHBhc3Npbmcgb2YgbG9jYWxob3N0IHRvIHRoZQorICAgZXhwZWN0ZWQgbmFtZQorCisyMDEwLTA2LTMwIDE1OjU5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyOgorCisgICBjaGVjayBmb3Igd2lsZGNhcmQgc3VwcG9ydAorCisyMDEwLTA2LTMwIDE1OjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzdXBwb3J0IFNBTiBhbmQgQ04gd2lsZGNhcmQgbWF0Y2hpbmcgcGVyIHNwZWMKKworMjAxMC0wNi0zMCAxNTowMCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDaXBoZXJUZXN0cywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDcmwsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0FnZW50VHJhcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzTmFtZSwgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlciwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVHJhcGRVc2VyLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VycywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNWYXJzLCAgCisgICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXgsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NpcGhlclRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzYWdlbnR0cmFwdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc25hbWV0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2FudGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NlcnZlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN0cmFwZHVzZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0c21wcmVmaXgsIAorICAgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMUR0bHNVc2VyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxZHRsc3VkcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMlRsc1VzZXJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJ0bHN0Y3B1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFEdGxzU2VydmVyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExZHRsc3VkcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEyVGxzU2VydmVyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEydGxzdGNwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNEdGxzU2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzZHRsc3VkcHNhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNFRsc1Nhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNHRsc3RjcHNhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMUR0bHNUcmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxZHRsc3VkcHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMlRsc1RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJ0bHN0Y3B0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFEdGxzQWdlbnRUcmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxZHRsc3VkcGFnZW50dHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMyVGxzQWdlbnRUcmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMydGxzdGNwYWdlbnR0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFEdGxzQ3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxZHRsc3VkcGNybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MlRsc0NybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MnRsc3RjcGNybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MUR0bHNDaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxZHRsc2NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJUbHNDaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUydGxzY2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMFRsc0lwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDB0bHNpcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwVGxzUGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDB0bHN0Y3BwZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMUR0bHNQZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMWR0bHNwZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMUR0bHNUc21QcmVmaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFkdGxzdHNtcHJlZml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAyVGxzVHNtUHJlZml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAydGxzdHNtcHJlZml4X3NpbXBsZToKKworICAgbW92ZWQgdGVzdCBmaWxlcyBhcm91bmQgZm9yIGJldHRlciBuYW1pbmcKKworMjAxMC0wNi0zMCAxNDo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29weSBkdGxzIHRyYW5zcG9ydCBhZGRyZXNzIHRvIHRoZSBleHBlY3RlZCBob3N0bmFtZQorCisyMDEwLTA2LTMwIDE0OjU4ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNldCB0aGUgZXhwZWN0ZWQgaG9zdG5hbWUgZnJvbSB0aGUgdHJhbnNwb3J0IHN0cmluZyBpZiBwb3NzaWJsZQorCisyMDEwLTA2LTMwIDE0OjU4ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGEgYml0IG1vcmUgaGVscCBvdXRwdXQgYnkgZGVmYXVsdAorCiAyMDEwLTA2LTI5IDIyOjI5ICB0YW5kZXJzCiAKICAgICogYXBwcy9zbm1wdHJhcGRfYXV0aC5jOgogCiAgICBGb2xsb3ctdXAgZm9yIHIxOTExNjogbWFrZSBzdXJlIHdlIGluY2x1ZGUgYWdlbnQgY29uZmlnCiAKKzIwMTAtMDYtMjkgMjI6MTggIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuaDoKKworICAgQWRkIG1pc3NpbmcgY29uZmlnX3JlcXVpcmVzCisKKzIwMTAtMDYtMjkgMTc6MzMgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBjbWQuMS5kZWY6CisKKyAgIHJld29yayB0aGUgc25tcGNtZCBtYW51YWwgcGFnZSB0byBzZXBhcmF0ZSBvdXQgdGhlIGZsYWdzIGludG8KKyAgIHNlY3Rpb25zIGFwcHJvcHJpYXRlIGZvciB0aGVpciB1c2FnZSB0eXBlCisKKzIwMTAtMDYtMjkgMTY6NTEgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBwb2QgZG9jcywgc29tZSBkZWZhdWx0IHZhbCBmaXhlcywgaW5mbyBvdXRwdXQgbm9ybWFsaXplZAorCisyMDEwLTA2LTI5IDE2OjMyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgYWRkZWQgc3NoLmggaW5jbHVkZQorCisyMDEwLTA2LTI5IDE2OjI3ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICByZW9yZ2FuaXplIHRoZSBtYW51YWwgcGFnZSBhIGJpdCBmb3IgU05NUHYzIGFuZCBUTFMKKworMjAxMC0wNi0yOSAxNjoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggZGVmYXVsdCB0bHMgcmVnaXN0cmF0aW9ucworCisyMDEwLTA2LTI5IDE2OjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgY2hlY2sgZm9yIE5VTEwgdHJhbnNwb3J0cyBhZnRlciBhbiBvcGVuIGZhaWxzCisKKzIwMTAtMDYtMjkgMTY6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmluZyBsb2dnaW5nIGFyb3VuZCBzbyB0aGF0IG9wZW5zc2wgZXJyb3JzIGFyZSBwcmludGVkIG9uCisgICBmYWlsdXJlcworCisyMDEwLTA2LTI5IDE2OjI2ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0c21wcmVmaXg6CisKKyAgIGZpeCBzb21lIG5vbi1pbnRlcmFjdGl2ZSBpbnZvY2F0aW9uIGlzc3VlcworCisyMDEwLTA2LTI5IDE2OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlIHNvbWUgY29tbW9uIGNvZGUgaW50byBhIGNvbW1vbiBmdW5jdGlvbgorCisyMDEwLTA2LTI4IDE5OjEzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NpcGhlclRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFkdGxzY2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MnRsc2NpcGhlcnNfc2ltcGxlOgorCisgICBjaXBoZXIgc3VpdGUgc2VsZWN0aW9uIGFuZCB0ZXN0cyBmb3IgaXQKKworMjAxMC0wNi0yOCAxOToxMiAgaGFyZGFrZXIKKworICAgKiBweXRob24vTElDRU5TRToKKworICAgbGljZW5zZSB1cGRhdGVzCisKKzIwMTAtMDYtMjggMTk6MTIgIGhhcmRha2VyCisKKyAgICogIHB5dGhvbi9SRUFETUUsIHB5dGhvbi9uZXRzbm1wL2NsaWVudC5weSwgICAKKyAgICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIFNOTVB2MyBvdmVyIFRMUyBzdXBwb3J0CisKKzIwMTAtMDYtMjggMTk6MTIgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weToKKworICAgYmV0dGVyIG91dHB1dCBzaG93aW5nIHRlc3QgdHlwZXMKKwogMjAxMC0wNi0yOCAwMDo1NCAgdGFuZGVycwogCiAgICAqICBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfY29udGFpbmVyLjMsICAKICAgICAgICBtYW4vbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMywgbWFuL25ldHNubXBfaGFuZGxlci4zLCAgIAogICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXBkLmNvbmYuNS5kZWYsICAgCi0gICAgICBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWY6CisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmOgogCiAgICBDSEFOR0VTOiBtYW46IGNsZWFuIHVwIG1hbnVhbCBwYWdlcwogICAgKGZyb20gRGViaWFuIHBhdGNoIDU2X21hbnBhZ2UpCiAKLTIwMTAtMDYtMjggMDA6MjEgIHRhbmRlcnMKLQotICAgKiBhZ2VudC9vYmplY3RfbW9uaXRvci5jOgotCi0gICBmaXggY3BwIHN5bnRheCBlcnJvcgotCiAyMDEwLTA2LTI3IDIzOjI5ICB0YW5kZXJzCiAKLSAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCi0gICAgICBhcHBzL3NubXB0cmFwZF9hdXRoLmM6CisgICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2F1dGguYzoKIAogICAgQ0hBTkdFUzogYnVpbGQ6IERvIG5vdCBjYWxsIHZhY21fc3RhbmRhcmRfdmlld3MoKSBvcgogICAgaW5pdF92YWNtX2NvbmZpZ190b2tlbnMoKSBpZiB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgd2FzIG5vdAogICAgY29tcGlsZWQKICAgIChmcm9tIERlYmlhbiBwYXRjaCA2MV92YWNtX21pc3NpbmdfZGVwZW5kZW5jeV9jaGVjaykKIAorMjAxMC0wNi0yNyAwMzoyMyAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBhcHAgdGFnIGNvbXBsZXRpb25zCisKKzIwMTAtMDYtMjcgMDA6NTYgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0LCBsb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmY6CisKKyAgIGhhbmRsZSBjb25maWcgZmlsZSBzZXR0aW5nIGludGVyYWN0aXZlLCB0cnVlL2ZhbHNlIHZhbHVlcyBoYW5kbGVkCisgICBpbiBjb25maWcKKworMjAxMC0wNi0yNiAyMDo1OCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBzb21lIGJ1Z3Mgdy8gc3BhY2VzIGluIG5hbWVzIGFuZCBhcHAgdGFnIGhlbHAKKworMjAxMC0wNi0yNiAxOTozOCAgbWFyegorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgZml4IHRlc3RzIHRvIHVzZSBub24taW50ZXJhY3RpdmUgLUkKKworMjAxMC0wNi0yNiAxNzo0NiAgbWFyegorCisgICAqIGxvY2FsL2NlcnRnZW4tdGVzdC5wbCwgbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYmV0dGVyIGludGVyYWN0aXZlLCA/PWhlbHAsIDx0YWI+IGNvbXBsLCBtb3JlIGhlbHAsIFNBTiBsb29wCisgICBmb3JtYXQgYW5kIHRlcm1pbmF0aW9uIGZpeCwgdG9sZXJhdGUgc3BhY2VzIGluIGZpZWxkcyBhbmQKKyAgIGZpbGVuYW1lcywgbW9yZSBjb21wbGV0ZSBlcnJvciBvdXRwdXQsIGVtYnJ5b25pYyBpbXBvcnQgZnJvbSB1cmwKKworMjAxMC0wNi0yNiAxMzo0OCAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIE1vcmUgY29tcGlsZXIgd2FybmluZyBmaXhlcy4KKworMjAxMC0wNi0yNiAxMzo0NyAgYnZhc3NjaGUKKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGaXhlZCB0aGUgZXJyb3JzIGluIGFjY29uZmlnLmggYW5kIHJlZ2VuZXJhdGVkCisgICBuZXQtc25tcC1jb25maWcuaC5pbi4KKworMjAxMC0wNi0yNiAxMzo0NCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IFNNVVggTUlCIGltcGxlbWVudGF0aW9uLgorCisyMDEwLTA2LTI2IDAwOjQ1ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzYW50ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzZHRsc3VkcHNhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNHRsc3RjcHNhbl9zaW1wbGU6CisKKyAgIGZpeGVzIGFuZCB0ZXN0aW5nIGZvciBjaGVja2luZyBTQU4gRE5TIG5hbWVzIGZyb20gdGhlIHNlcnZlcgorCisyMDEwLTA2LTI2IDAwOjQ0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc25hbWV0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2VydmVydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMWR0bHN1ZHBzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMnRsc3RjcHNlcnZlcnRlc3RzX3NpbXBsZToKKworICAgZ2VuZXJpY2l6ZSB0aGUgc2VydmVyIG5hbWUgdGVzdHMKKworMjAxMC0wNi0yNSAyMzowMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wdHNtLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdHNtcHJlZml4LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFkdGxzdHNtcHJlZml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAydGxzdHNtcHJlZml4X3NpbXBsZToKKworICAgdXNlcHJlZml4IHNjYWxhciB0ZXN0aW5nIGFuZCBzdXBwb3J0CisKKzIwMTAtMDYtMjUgMjM6MDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0czoKKworICAgcmVtb3ZlIGRlYnVnZ2luZyBsaW5lcworCisyMDEwLTA2LTI1IDIzOjAwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHM6CisKKyAgIHB1dCBpbiBvbmx5IG1pbmltaWFsIGRlYnVnIGZsYWdzCisKKzIwMTAtMDYtMjUgMjM6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxZHRsc3VkcGNybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MnRsc3RjcGNybF9zaW1wbGU6CisKKyAgIGNvZGUgYW5kIHRlc3QgY2FzZXMgZm9yIENSTCBoYW5kbGluZworCisyMDEwLTA2LTI1IDE1OjI0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGU6CisKKyAgIEFkZGVkIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSBwcmludGVkIGJ5IHRoZSBQZXJsCisgICBpbnRlcnByZXRlci4KKworMjAxMC0wNi0yNSAxMzowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmVkdWNlIG51bWJlciBvZiByZXNlbmQgYXR0ZW1wdHMgYW5kIHRpbWVvdXQKKworMjAxMC0wNi0yNSAxMzowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHdhcm5pbmcgZml4ZXMKKworMjAxMC0wNi0yNSAxMzowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICByZW1vdmUgbG9naWMgdHlwbyBmcm9tIHByZXZpb3VzIGNvbW1pdAorCisyMDEwLTA2LTI1IDEzOjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMHRsc2lwdjZfc2ltcGxlOgorCisgICBJUHY2IGZpeGVzIGZvciBUQ1AKKwogMjAxMC0wNi0yNSAxMzowMSAganNhZnJhbmVrCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgpAQCAtMjA5OSw2ICszOTIwOSw4NCBAQAogICAgQ0hBTkdFUzogc25tcHRyYW5zbGF0ZTogZml4ZWQgcHJpbnRpbmcgb2YgcmFuZ2VzIHdpdGggVU5TSUdORUQKICAgIHR5cGUuCiAKKzIwMTAtMDYtMjQgMjM6NTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBmdW5jdGlvbiBuYW1lcyBmb3Igc3RhdCBpbmNyZWFzZXMKKworMjAxMC0wNi0yNCAyMzo1MiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZml4IGVycm9ycyBpbiBjb21tZW50cworCisyMDEwLTA2LTI0IDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb21tZW50cyBmb3IgNS40IGZvciBkdGxzCisKKzIwMTAtMDYtMjQgMjM6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNvbW1lbnRzIGZvciA1LjMuMgorCisyMDEwLTA2LTI0IDIzOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjbGllbnQgc2lkZSBjb25uZWN0IGNvbW1lbnRzCisKKzIwMTAtMDYtMjQgMjM6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvdW50ZXIgYW5kIGNvbW1lbnQgaW1wcm92ZW1lbnRzCisKKzIwMTAtMDYtMjQgMjM6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHVwZGF0ZSBjb3VudGVyIGNhbGxzIGFuZCBjb21tZW50IHRleHQKKworMjAxMC0wNi0yNCAxOTowMyAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6CisKKyAgIE1vdmVkIExEX0xJQlJBUllfUEFUSCBzZXR1cCBmcm9tIGluZGl2aWR1YWwgdGVzdHMgc2NyaXB0cyB0bworICAgc2ltcGxlX1RFU1RDT05GLnNoLgorCisyMDEwLTA2LTI0IDE5OjAyICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgRml4ZWQgYSBjb21tZW50LgorCisyMDEwLTA2LTI0IDE3OjQ4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oOgorCisgICBTaG91bGQgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHIxOTA4NC4KKworMjAxMC0wNi0yNCAxNzo0NyAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNi0yNCAxMjozMCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICAidGVzdCAtZSIgaXNuJ3QgcG9ydGFibGU7IHVzZSAidGVzdCAteCIgaW5zdGVhZCBmb3IgdGhlIFBlcmwKKyAgIHN5c3RlbSgpCisgICBjaGVjaworCiAyMDEwLTA2LTIzIDExOjE0ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jOgpAQCAtMjExMSwxOCArMzkyOTksMTEyMiBAQAogICAgaW5zdGVhZCAtIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5LmZvcndhcmRpbmdfdjYgaXMgYm9vbGVhbiwgbm90CiAgICBUcnV0aFZhbHVlLgogCisyMDEwLTA2LTIyIDIzOjA2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0czoKKworICAgc3VwcG9ydCBmb3IgY2VydFNlY05hbWUgbWFwcGluZyBmcm9tIGEgbG9jYWwgY2VydCBmaWxlIG5hbWUgYW5kIGEKKyAgIHRlc3QgZm9yIGl0CisKKzIwMTAtMDYtMjIgMjI6NDQgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAucG06CisKKyAgIGRvY3VtZW5hdGlvbiB1cGRhdGUgdG8gY2xlYW4gdXAgYW5kIGluY2x1ZGUgVExTIHBhcmFtZXRlcnMKKworMjAxMC0wNi0yMiAyMjo0NCAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIHN1cHBvcnQgZm9yIHBhc3NpbmcgaWRlbnRpdGllcyBhbmQgZnVsbCB3b3JraW5nIHZlcnNpb24KKworMjAxMC0wNi0yMiAyMjo0NCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDB0bHN0Y3BwZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMWR0bHNwZXJsLnQ6CisKKyAgIHBlcmwgVExTL0RUTFMgdGVzdHMKKworMjAxMC0wNi0yMiAyMjo0MyAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIGZpcnN0IHB0YWNoIG9uIFNOTVAvVExTIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24gZnVuY3Rpb24KKworMjAxMC0wNi0yMiAyMjo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZmlyc3Qgd29ya2luZyBzdXBwb3J0IGZvciBhIGRlbGF5ZWQgY2xvc2UoKSB0byBhdHRlbXB0IHRvIHNlbmRpbmcKKyAgIG91dHN0YW5kaW5nIHBhY2tldHMgaW4gdGhlIHF1ZXVlOyB0aGlzIGlzIHJlcXVpcmVkIGZvciBzbm1wdHJhcAorICAgdG8gd29yayBhdCBhbGwgd2hlbiBzZW5kaW5nIHRyYXBzIChub3QgaW5mb3Jtcykgb3ZlciBEVExTCisKKzIwMTAtMDYtMjIgMTk6MDMgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDoKKworICAgQ0hBTkdFUzogTWluR1c6IHRlc3RzIFQwNTl0cmFwaGFuZGxlX3NpbXBsZSBhbmQKKyAgIFQwNjVhZ2VudGV4dGVuZF9zaW1wbGUgZG8gbm93IHBhc3MuCisKKzIwMTAtMDYtMjIgMTk6MDEgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jOgorCisgICBUaGUgd2lkdGggYXJndW1lbnQgZm9yICUuKmQgbXVzdCBoYXZlIHR5cGUgaW50LCBub3Qgc2l6ZV90LiBUaGlzCisgICBidWcgd2FzIGludHJvZHVjZWQgaW4gcjE5MDE0LgorCisyMDEwLTA2LTIyIDE4OjU3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmM6CisKKyAgIE5FV1M6IE1pbkdXOiB0aGUgc25tcGQuY29uZiBrZXl3b3JkIGV4dGVuZCBkb2VzIG5vdyB3b3JrLgorICAgTkVXUzogTWluR1c6IHRoZSBzbm1wdHJhcGQuY29uZiBrZXl3b3JkIHRyYXBoYW5kbGUgZG9lcyBub3cgd29yay4KKyAgIENIQU5HRVM6IE1pbkdXOiBydW5fc2hlbGxfY29tbWFuZCgpIHdpdGggZWl0aGVyIGlucHV0IG9yIG91dHB1dAorICAgKGJ1dCBub3QgYm90aCkgZG9lcyBub3cgd29yay4KKyAgIFRoaXMgZGlkIG5vdCB3b3JrIHVudGlsIG5vdyBiZWNhdXNlIG9uIE1pbkdXIG1rc3RlbXAoKSBnZW5lcmF0ZXMKKyAgIGEgTWluR1ctc3R5bGUgcGF0aCAoL3RtcC8uLi4pIHdoaWxlIHN5c3RlbSgpIGludm9rZXMgY21kLmV4ZSBhbmQKKyAgIGhlbmNlIGV4cGVjdHMgYSBXaW5kb3dzLXN0eWxlIHBhdGggKEM6XC4uLikuCisKKzIwMTAtMDYtMjIgMTc6MzkgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgQWxzbyByZXBvcnQgdGhlIHBvcnQgc3BlY2lmaWNhdGlvbiBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXS4KKworMjAxMC0wNi0yMiAxNzozOCAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZToKKworICAgUmVwbGFjZWQgYW4gZXhwbGljaXQgdGVzdCBmb3IgTWluR1cgYnkgYSB0ZXN0IG9uIEhBVkVfU0lHSFVQLgorCisyMDEwLTA2LTIyIDE3OjM2ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciBTSUdIVVAuCisKKzIwMTAtMDYtMjIgMTc6MzUgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgUmVwb3J0IHdoaWNoIHRlc3RzIGZhaWxlZCwgaWYgYW55LgorCiAyMDEwLTA2LTIyIDA4OjM3ICBidmFzc2NoZQogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgogCiAgICBGaXhlZCBhbiBlcnJvciBpbiBhIGNvbW1lbnQgYmxvY2suCiAKKzIwMTAtMDYtMjEgMTk6MjYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZToKKworICAgUmVhcnJhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyB0ZXN0IHN1Y2ggdGhhdCBpdCBpcyBubworICAgbG9uZ2VyIG5lY2Vzc2FyeQorICAgdG8gaW52b2tlIHNpbXBsZV9ldmFsX3Rvb2xzLnNoIHdoZW4gdGhpcyBzY3JpcHQgaXMgaW52b2tlZCBhcyBhCisgICB0cmFwIGhhbmRsZXIKKyAgIGJ5IHNubXB0cmFwZC4KKworMjAxMC0wNi0yMSAwODowMSAgZHRzMTIKKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOgorCisgICBFbnN1cmUgdGhhdCBmZHNldCBzdHJ1Y3R1cmUgaXMgcmVzaXplZCBzdWZmaWNpZW50bHkKKyAgIHRvIGFjY29tb2RhdGUgdGhlIHNwZWNpZmllZCBzb2NrZXQgSUQuCisgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IFNoaXlhbGVpLgorCisyMDEwLTA2LTIwIDE5OjMyICBkdHMxMgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NtdV9jb21wYXQuYywgc25tcGxpYi9wa2NzLmMsICAgCisgICAgICBzbm1wbGliL3NucHJpbnRmLmM6CisKKyAgIEF2b2lkIGR1cGxpY2F0ZSAodW51c2VkKSBzeW1ib2xzLgorCisyMDEwLTA2LTIwIDE5OjMxICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGU6CisKKyAgIENvbW1lbnRlZCBvdXQgZGVidWcgY29kZS4KKworMjAxMC0wNi0yMCAxOTozMCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIFJlc3RvcmVkIHN1bW1hcnkgc3VjY2Vzcy9mYWlsdXJlIGNvdW50IHJlcG9ydGluZy4KKyAgIEFsc28sIG1vdmVkIGtpbGwuZXhlIHRlc3QgYmFjayB0byBSVU5URVNUUy4KKworMjAxMC0wNi0yMCAxOToyOSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBhZGQgdGhlIHRlc3QgbmFtZSB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKKyAgICJpbnZva2VkIi4KKworMjAxMC0wNi0yMCAxOToyNyAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZToKKworICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IHNraXAgdGhlIHRlc3RzIHRoYXQgcmVxdWlyZSBTSUdIVVAgc2luY2UKKyAgIE1pbkdXIGRvZXMgbm90IHN1cHBvcnQgU0lHSFVQLgorCisyMDEwLTA2LTIwIDE1OjE5ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBBZGRlZCBhIGNvbmZpZ3VyZSB0ZXN0IHRoYXQgZGV0ZWN0cyB3aGV0aGVyIG9yIG5vdCBQZXJsJ3MKKyAgIHN5c3RlbSgpIGZ1bmN0aW9uCisgICBpbnZva2VzIGEgUE9TSVggc2hlbGwuICJtYWtlIHRlc3QiIGRvZXMgbm93IGZhbGwgYmFjayB0byBSVU5URVNUUworICAgaWYgbm90LgorCisyMDEwLTA2LTIwIDE1OjE2ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiBvbiBNaW5HVyAtLSBhZGRlZCAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4gd2hlcmUKKyAgIG5lY2Vzc2FyeS4KKyAgIE5vdGU6IGFsdGhvdWdoIDxuZXQtc25tcC90eXBlcy5oPiBpcyBpbmNsdWRlZCBpbmRpcmVjdGx5IGZyb20gdGhlCisgICAqICAgICAqdHJhbnNwb3J0LmggICAgaGVhZGVyIGZpbGVzLCB0aGVzZSAjaW5jbHVkZSBzdGF0ZW1lbnRzIGFyZQorICAgICAgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgICAgYSBwZXNreSAgICBjaXJjdWxhciBkZXBlbmRlbmNlIGJldHdlZW4KKyAgICAgIDxuZXQtc25tcC90eXBlcy5oPiBhbmQgICAgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4uIAorICAgICAgMjAxMC0wNi0yMCAxNToxMiAgYnZhc3NjaGUKKworCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgQ0hBTkdFUzogTWluR1c6IHJlZnVzZSB0byBydW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMgaWYga2lsbC5leGUKKyAgIGNhbm5vdCBiZSBmb3VuZC4KKworMjAxMC0wNi0yMCAxNToxMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBTaG9ydGVuZWQgdGhlIHNyY2RpciBwYXRoIGJ5IG1ha2luZyBzdXJlIHRoYXQgaXQgZG9lcyBub3QgY29udGFpbgorICAgLy4uCisKKzIwMTAtMDYtMTkgMTg6MzAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIEFkZGVkIHN1cHBvcnQgZm9yIHJ1bm5pbmcgUlVORlVMTFRFU1RTIHdpdGggVGVzdDo6SGFybmVzcyBpbgorICAgYW5vdGhlciBkaXJlY3RvcnkgdGhhbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KKworMjAxMC0wNi0xOSAxNjo0MSAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaDoKKworICAgY29tcGxldGUgcmV3cml0ZSBvZiBwYXJhbXMgdG8gdXNlIHRhYmxlX2RhdGFzZXQgaW5zdGVhZCBvZgorICAgY3JlYXRlLWRhdGFzZXQKKworMjAxMC0wNi0xOSAxNjo0MSAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIHVzZSB0ZXh0IGZvciBoYXNoIHR5cGUgaW4gcGVyc2lzdGVudCBzdG9yZQorCisyMDEwLTA2LTE5IDE2OjQwICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmM6CisKKyAgIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTAtMDYtMTkgMTY6NDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggbWlzc2luZyBzcGVjaWZpZXIgaW4gZGVidWcKKworMjAxMC0wNi0xOSAxNjozOSAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXNlIGRlZmluZSBpbnN0ZWFkIG9mIGNvbnN0YW50OyBmaXggY2hlY2sgZm9yIHJvd3MgdG8gc2F2ZQorCisyMDEwLTA2LTE5IDE2OjM5ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCByZW1vdmUvZmluZCBmdW5jdGlvbiBmb3IgbWFwcy9hZGRycy9wYXJhbXM7IHJlbmFtZSBwYXJhbXMKKyAgIHRhZy0+bmFtZTsKKyAgIGRlc3Ryb3kgLT4gZnJlZTsgZ3JvdXAgcmVjZW50IHRydXN0IGZ1bmN0aW9ucyB0b2dldGhlciBpbiBzcmM7CisgICBkb24ndCBzdG9yZQorICAgcGFyYW1zIGZwIGFzIGJpbmFyeTsgaGFuZCB0ZXh0IGFyZ3MgZm9yIGhhc2ggdHlwZSAoZS5nIC0tc2hhMSkKKworMjAxMC0wNi0xOCAxNTozNSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGNvcnJlY3RlZCBlcnJvciBoYW5kbGluZyBpbiBtaWJJSS9hdC4KKworMjAxMC0wNi0xOCAwNzoyMyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA2LTE4IDAxOjQyICBtYWdmcgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYzoKKworICAgRG8gbm90IGRlZmluZSByZXQgdHdpY2Ugd2hlbiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8gaXMgc2V0LgorCisyMDEwLTA2LTE4IDAxOjM5ICBtYWdmcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIENvcnJlY3RlZCB0eXBvLgorCisyMDEwLTA2LTE4IDAwOjMxICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIGJldHRlciBORVdTIGFuZCBDSEFOR0VTIGZpbGVzCisKKzIwMTAtMDYtMTcgMjA6MzkgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA2LTE3IDIwOjMxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wNi0xNyAxODo1OSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAxMC0wNi0xNyAxODo1NSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wNi0xNyAxODo1NCAgaGFyZGFrZXIKKworICAgKiBNYWtlZmlsZS50b3A6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDYtMTcgMTg6MzkgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHJlLWVuYWJsZSBzb21lIGNvbW1hbmRzCisKKzIwMTAtMDYtMTcgMTc6NDYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzOgorCisgICBmb3Jnb3QgbWlzc2luZyBxdW90ZXMgaW4gU0VUIG91dHB1dAorCisyMDEwLTA2LTE3IDE3OjQ2ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc2FnZW50dHJhcHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzOgorCisgICB0bHMgdGVzdGluZyBjbGVhbnVwCisKKzIwMTAtMDYtMTcgMTc6NDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBmaXhlcyBmb3IgYWRkcmVzcyBwcmludGluZzsgbW9yZSB0byBjb21lCisKKzIwMTAtMDYtMTcgMTc6NDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9zdGx5IHByb3Blcmx5IHNldCByZW1vdGUvbG9jYWwgdHJhbnNwb3J0IHBhcmFtZXRlcnMKKworMjAxMC0wNi0xNyAxNzo0NSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNhZ2VudHRyYXB0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxZHRsc3VkcGFnZW50dHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMydGxzdGNwYWdlbnR0cmFwdGVzdHNfc2ltcGxlOgorCisgICB0ZXN0cyBmb3IgYWdlbnRzIHNlbmRpbmcgb2YgdHJhcHMgb3ZlciAoRClUTFMKKworMjAxMC0wNi0xNyAxNzo0NSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFkdGxzdWRwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAydGxzdGNwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExZHRsc3VkcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEydGxzdGNwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFkdGxzdWRwdHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIydGxzdGNwdHJhcHRlc3RzX3NpbXBsZToKKworICAgbW92ZSBleHBvcnQgc3RhdGVtZW50cyB0byB0aGUgc3VwcG9ydCBmaWxlIGZvciBzaW1wbGljaXR5CisKKzIwMTAtMDYtMTcgMTc6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmUgdGxzIGJvb3RzdHJhcHBpbmcgdG8gcG9zdF9wcmVtaWIgc28gb3RoZXIgY29uZmlnIHRva2VucyBjYW4KKyAgIHVzZSB0aGUgY2VydCBsb2FkaW5nIHJlc3VsdHMKKworMjAxMC0wNi0xNyAxNzo0NCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jOgorCisgICBhZGRlZCBzbm1wX2VudW0gdGVzdHMgcHVsbGVkIGZyb20gdGhlIG1haW4oKSB0ZXN0IGF0IHRoZSBib3R0b20KKyAgIG9mIHRoZSBvcmlnaW5hbCAuYyBmaWxlCisKKzIwMTAtMDYtMTcgMTY6MDAgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmM6CisKKyAgIEVsaW1pbmF0ZSAiZGlmZmVyIGluIHNpZ25lZG5lc3MiIHdhcm5pbmcKKworMjAxMC0wNi0xNyAwMDoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKKworICAgcmV2ZXJ0IFVEUCBjaGFuZ2VzIGZyb20gcjE4OTg0IHNpbmNlIGl0IGJyb2tlIHRoZSBVRFAgdHJhbnNwb3J0OworICAgdGhlIHN0cnVjdCBwcm9iYWJseSBuZWVkcyB0byBtYXRjaCBhbm90aGVyIHN0cnVjdCBzb21ld2hlcmUgZWxzZQorCisyMDEwLTA2LTE2IDIzOjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBhIG5ldyBLRVlXT1JEIG91dHB1dCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCisKKzIwMTAtMDYtMTYgMjM6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICB1c2UgY29uZmlnX2FuZF9vcGVuIGZvciBvcGVuaW5nIHRoZSB0cmFuc3BvcnQKKworMjAxMC0wNi0xNiAyMzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZXh0cmEgZGVidWdnaW5nIHN0YXRlbWVudHMKKworMjAxMC0wNi0xNiAyMjoxNCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHM6CisKKyAgIGV4cGxpY2l0bHkgZGVjbGFyZSB0cnVzdCBjZXJ0aWZpY2F0ZXMgdG8gdHJhbnNwb3J0CisKKzIwMTAtMDYtMTYgMjI6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2xlYW51cCBzb21lIGxvc3QgbWVtb3J5IG9uIGNsb3NpbmcKKworMjAxMC0wNi0xNiAyMTo1NiAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHR5cG9zCisKKzIwMTAtMDYtMTYgMjE6MzQgIGR0czEyCisKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAKKyAgICAgICBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgInNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbiIgd2FybmluZ3MgZnJvbQorICAgYWdlbnQgY29kZSBbLVdzaWduLWNvbXBhcmVdCisKKzIwMTAtMDYtMTYgMjA6MTYgIGR0czEyCisKKyAgICogIHNubXBsaWIvYXNuMS5jLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jLCBzbm1wbGliL2Rpcl91dGlscy5jLCAgIAorICAgICAgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3BhcnNlLmMsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvdGV4dF91dGlscy5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAic2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uIiB3YXJuaW5ncyBmcm9tCisgICBsaWJyYXJ5IGNvZGUgWy1Xc2lnbi1jb21wYXJlXQorCisyMDEwLTA2LTE2IDE5OjM2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgb2xkZXIgbm8tbG9uZ2VyLW5lZWRlZC1kdXBsaWNhdGUtY29uZmlnIGVudHJpZXMKKwogMjAxMC0wNi0xNiAxOToxNCAgZHRzMTIKIAogICAgKiBzbm1wbGliL3ZhY20uYzoKIAogICAgRml4IHByb2Nlc3Npbmcgb2YgdmlldyBtYXNrcyAobWlzcGxhY2VkIHBhcmVudGhlc2VzKQogCisyMDEwLTA2LTE2IDE4OjQ1ICBkdHMxMgorCisgICAqICBhcHBzL2FnZW50eHRyYXAuYywgYXBwcy9zbm1wbmV0c3RhdC9pZi5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgICAKKyAgICAgIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCBhcHBzL3NubXB1c20uYzoKKworICAgRWxpbWluYXRlICJzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24iIGZyb20gYXBwIGNvZGUKKyAgIFstV3NpZ24tY29tcGFyZV0KKworMjAxMC0wNi0xNiAxNzoyMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3RyYXBkdXNlcnRlc3RzOgorCisgICBjaGVjayBmb3IgaW5mb3JtcyBzZW50IG92ZXIgdGxzIHRyYW5zcG9ydHMKKworMjAxMC0wNi0xNiAxNzoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29weSBvdGhlciB2YWx1c2UgZnJvbSBwYXJlbnQgdGxzYmFzZSBkYXRhCisKKzIwMTAtMDYtMTYgMTc6MjEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdHJhcGR1c2VydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMWR0bHN1ZHB0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJ0bHN0Y3B0cmFwdGVzdHNfc2ltcGxlOgorCisgICBhZGRlZCBiYXNpYyB0cmFwIHNlbmRpbmcgYW5kIHJlY2VpdmluZyB0ZXN0cworCisyMDEwLTA2LTE2IDE3OjIxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0czoKKworICAgcmVtb3ZlIG5vIGxvbmdlciBuZWVkZWQgdGVtcCBmaWxlIHRvdWNoZXMKKworMjAxMC0wNi0xNiAxNzoyMCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvc25tcF9hZ2VudC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgYWRkZWQgYSBuZXcgZnVuY3Rpb24gYW5kIHRyYW5zcG9ydCBmbGFnIHRvIGluZGljYXRlIGlmIHRoZSBmX29wZW4KKyAgIGNhbGwgaGFzIGJlZW4gY2FsbGVkIHlldAorCisyMDEwLTA2LTE2IDE3OjIwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICB1bnVzZWQgdmFyIHdhcm5pbmcgY2xlYW51cAorCisyMDEwLTA2LTE2IDE3OjE5ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYWRkZWQgdHJ1c3RDZXJ0IGNvbmZpZ3VyYXRpb24gdG9rZW4KKworMjAxMC0wNi0xNiAxNzoxOSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHM6CisKKyAgIG1pbm9yIHR3ZWFrcyBmb3IgdGVzdGluZyBjbGFyaXR5CisKKzIwMTAtMDYtMTYgMTc6MTggIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxZHRsc3VkcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMnRsc3RjcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZToKKworICAgbW92ZWQgY29tcGxleCAoRClUTFMgdG8gYSBzZXBhcmF0ZSBzZWN0aW9uIGFuZCBtYWRlIHRoZSB0cmFuc3BvcnQKKyAgIHRlc3RzIG9ubHkgdGVzdCBtaW5pbWFsIHN1cHBvcnQKKworMjAxMC0wNi0xNiAxNzoxNyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGFkZCBtZWNoYW5pc21zIGZvciBzcGVjaWZ5aW5nIGFuZCBleHBlY3RpbmcgdGhlIGhvc3RuYW1lIG9mIHRoZQorICAgZmFyIHNpZGUKKworMjAxMC0wNi0xNiAxNzoxNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzZXJ2ZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFyczoKKworICAgdGVzdHMgZm9yIHZlcmlmeWluZyBzZXJ2ZXIgY2VydGlmaWNhdGUgY2hlY2sgZmFpbHVyZXMKKworMjAxMC0wNi0xNiAxNzoxNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NlcnZlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFkdGxzdWRwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJ0bHN0Y3BzZXJ2ZXJ0ZXN0c19zaW1wbGU6CisKKyAgIHRlc3RpbmcgZm9yIGNoZWNraW5nIGNsaWVudCBzaWRlIHZlcmlmaWNhdGlvbiBvZiBzZXJ2ZXIKKyAgIGNlcnRpZmljYXRlcworCisyMDEwLTA2LTE2IDE3OjE2ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oOgorCisgICBzZXR1cCBmb3IgYSBob3N0bmFtZSBjb25maWcgb3B0aW9uCisKKzIwMTAtMDYtMTYgMTc6MTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHNldHVwIGZvciBhIGhvc3RuYW1lIGNvbmZpZyBvcHRpb24KKworMjAxMC0wNi0xNiAxNzoxNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjaGVjayB0byBtYWtlIHN1ZXIgc3NsIHBvaW50ZXIgaGFzIGJlZW4gY3JlYXRlZCB2aWEgZl9vcGVuIGNhbGwKKworMjAxMC0wNi0xNiAxNTowMiAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuaCwgYXBwcy9zbm1wdHJhcGQuYzoKKworICAgRGVjbGFyZSAnc2h1dGRvd25fcGVybCcgcHJvcGVybHkuCisKKzIwMTAtMDYtMTYgMTQ6MzcgIGR0czEyCisKKyAgICogYWdlbnQvc25tcGQuYywgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xjZF90aW1lLmM6CisKKyAgIEVsaW1pbmF0ZSAic2lnbmVkIGFuZCB1bnNpZ25lZCB0eXBlIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iCisgICB3YXJuaW5ncyBbLVdzaWduLWNvbXBhcmVdCisKKzIwMTAtMDYtMTYgMTQ6MjcgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBFbGltaW5hdGUgInVudXNlZCB2YXJpYWJsZSIgd2FybmluZworCisyMDEwLTA2LTE2IDE0OjIyICBkdHMxMgorCisgICAqICBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvc25tcGQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CisKKyAgIEVsaW1pbmF0ZSB2YXJpb3VzICJpbXBsaWNpdCBjb252ZXJzaW9uIiB3YXJuaW5ncyBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTE2IDEzOjEzICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhcHBzL3NubXB2YWNtLmMsIHNubXBsaWIvdG9vbHMuYzoKKworICAgRWxpbWluYXRlIChtb3N0KSBzaWduZWQtdnMtdW5zaWduZWQgd2FybmluZ3MgZnJvbSBudW1lcmljIHNjYW5mCisgICBwcm9jZXNzaW5nIFstcGVkYW50aWNdCisKKzIwMTAtMDYtMTYgMDM6MjggIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIHRoZSBncmVhdCB1bi1uYW1lZCBjb250YWluZXIgaHVudAorCisyMDEwLTA2LTE2IDAzOjI3ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHNoYXJlIGNhY2hlIGJldHdlZW4gdGFibGUgYW5kIGNvdW50IHNjYWxhcjsgd2hlbiByZWFkaW5nIGNvbmZpZywKKyAgIGFkZCB0bworICAgbGlicmFyeSBjb250YWluZXJzIGZvciBhY3RpdmUgcm93cywgdGFibGUgY29udGFpbmVycyBmb3IgaW5hY3RpdmUKKyAgIHJvd3M7CisgICB1c2VyIGNlcnRfdXRpbCBhcGlzIGluc3RlYWQgb2YgZGlyZWN0IGNvbnRhaW5lciBtYW5pcHVsYXRpb247CisgICB3aGVuCisgICBzYXZpbmcgaW5hY3RpdmUgbWFwIHJvd3MsIHNraXAgYWxsIGJ1dCBub25Wb2xhdGlsZQorCisyMDEwLTA2LTE2IDAzOjI2ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBmaXggZGVidWcgdG9rZW4gdHlwbworCisyMDEwLTA2LTE2IDAzOjI1ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBhcGkgZm9yIGFkZGluZyBlbnRyaWVzIHRvIHRsdHNtIGFkZHIsIHBhcmFtcyBhbmQgY2VydCBtYXAKKyAgIGNvbnRhaW5lcnM7CisgICByZWdpc3RlciBzZSBzbGlzdCBwYWlyIGVhcmxpZXIgc28gdGhleSBhcmUgYXZhaWxhYmxlIGR1cmluZworICAgY29uZmlnIHBhcnNpbmc7CisgICBtYWtlIHN1cmUgY29uZmlnIHN0cmluZ3MgYXJlIG51bGwgdGVybWluYXRlZAorCisyMDEwLTA2LTE1IDIxOjQyICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgU3VwcHJlc3Mgd2FybmluZ3M6CisgICAnc3RydWN0IG5sbXNnaGRyIGRlZmluZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0JyBhbmQKKyAgICdmdW5jdGlvbiBfbG9hZF92NiBkZWNsYXJlZCBidXQgbmV2ZXIgZGVmaW5lZCcKKworMjAxMC0wNi0xNSAyMTozMCAgZHRzMTIKKworICAgKiAgYWdlbnQva2VybmVsLmMsIGFwcHMvc25tcHRyYXBkX3NxbC5jLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9jbXVfY29tcGF0LmMsIHNubXBsaWIvcGtjcy5jLCBzbm1wbGliL3NucHJpbnRmLmM6CisKKyAgIEVsaW1pbmF0ZSAiZW1wdHkgdHJhbnNsYXRpb24gdW5pdCIgd2FybmluZ3MgWy1wZWRhbnRpY10KKworMjAxMC0wNi0xNSAwNzowNyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDNjb3B5X253b3JkX2NsaWIuYzoKKworICAgQWRkIHRlc3Qgb2YgY29weV9ud29yZAorCisyMDEwLTA2LTE0IDIxOjMyICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6CisKKyAgIEVsaW1pbmF0ZSAib3ZlcmZsb3cgaW4gaW1wbGljaXQgY29uc3RhbnQgY29udmVyc2lvbiIgd2FybmluZ3MKKyAgIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTQgMTU6NTEgIGR0czEyCisKKyAgICogYWdlbnQvc25tcGQuYywgYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRWxpbWluYXRlICJzdHJpbmcgbGVuZ3RoIGdyZWF0ZXIgdGhhbiA1MDkiIHdhcm5pbmdzIFstcGVkYW50aWNdCisKKzIwMTAtMDYtMTQgMTU6MTkgIGR0czEyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CisKKyAgIEVsaW1pbmF0ZSAiaW5pdGlhbGl6ZXIgZWxlbWVudCBpcyBub3QgY29tcHV0YWJsZSIgd2FybmluZ3MKKyAgIFstcGVkYW50aWNdCisKKzIwMTAtMDYtMTQgMDU6MjcgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1cGRhdGUgY291bnQgaGFuZGxlcnMgdG8gY291bnQgbm9uLWFjdGl2ZSByb3dzIHRvbworCisyMDEwLTA2LTE0IDA1OjEyICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICBvbmx5IHR3ZWFrIHN0b3JhZ2VUeXBlIGZvciBhY3RpdmUgcm93czsgcmVzZXQgZW50cnkgZmxhZ3Mgd2hlbgorICAgcmVtb3ZpbmcgZnJvbQorICAgY2VydF91dGlsIG1hcHM7IHdoZW4gY3JlYXRlaW5nIHJvd3MgZnJvbSBjZXJ0X3V0aWwgbWFwcywgc2V0CisgICBzdHJhZ2V0VHlwZSB0bworICAgdm9sYXRpbGUgaWYgbm9uVm9sYXRpbGUgZmxhZyBub3Qgc2V0OyBkb250IGZyZWUgY2FjaGUgaW4KKyAgIGNhY2hlX2xvYWQgb24gZXJyCisKKzIwMTAtMDYtMTQgMDU6MTAgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICBtb3ZlIHRsc3RtQWRkciB0YWJsZSBjb25maWcgcGFyc2luZyB0byBjZXJ0X3V0aWw7IGFkZCBjYWNoZSB0bworICAgbWVyZ2UgY2VydF91dGlsCisgICBhZGRycyAoYWN0aXZlKSBhbmQgbm9uLWFjdGl2ZSByb3dzOworCisyMDEwLTA2LTE0IDA1OjEwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBub25Wb2xhdGlsZSBmbGFnIHRvIHRsc3RtQWRkciB0YWJsZTsgc2V0IGNvbnRhaW5lciBuYW1lOyBza2lwCisgICAnMHgnIGluIGZwCisKKzIwMTAtMDYtMTQgMDU6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjaGFuZ2UgTE9HX0VSUiB0byBMT0dfSU5GTyBmb3Igbm9uLWVycm9yIGxvZyBtc2cKKworMjAxMC0wNi0xMyAyMTowMiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJpbXBsaWNpdCBjb252ZXJzaW9uIiB3YXJuaW5ncyBmcm9tCisgICBNZkQtYmFzZWQgTUlCIG1vZHVsZSBjb2RlLCBhbmQgTWZEIHRlbXBsYXRlIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTIgMjE6MzMgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfc29sYXJpcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJpbXBsaWNpdCBjb252ZXJzaW9uIiB3YXJuaW5ncyBmcm9tIChub24tTWZEKQorICAgTUlCIG1vZHVsZSBjb2RlLiBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTEyIDEwOjI2ICBkdHMxMgorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X2luZGV4LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc2NhbGFyLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCAgIAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgICAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmMsIHNubXBsaWIvZmlsZV91dGlscy5jLCAgIAorICAgICAgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJpbXBsaWNpdCBjb252ZXJzaW9uIiB3YXJuaW5ncyBmcm9tIGxpYnJhcnksCisgICBhcHBzIGFuZCBhZ2VudCBmcmFtZXdvcmsraGVscGVycyBjb2RlLiBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTEwIDIwOjAxICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIGxvb2t1cCBjZXJ0IGtleXMgZm9yIHRscyBkb21haW5zOyB1c2UgU0VDX01PREVMIGRlZmluZSBpbnN0ZWFkIG9mCisgICBoYXJkY29kZWQKKyAgIGNvbnN0YW50OyBhZGQgU0VDX01PREVMX1RTTSB0byBhbGxvd2VkIHNlYyBtb2RlbHMgZm9yIG1wTW9kZWwKKyAgIFNOTVBfVkVSU0lPTl8zCisKKzIwMTAtMDYtMTAgMjA6MDAgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYzoKKworICAgZGVmYXVsdCB0byByZWFkT25seS9hY3RpdmUgZm9yIGJhZCBjb25maWcKKworMjAxMC0wNi0xMCAyMDowMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGFkZCBkZWJ1Zzsgc3dpdGNoIHRvIFNFQ19NT0RFTF9UU00gYW5kIHdhcm4gaWYgb3RoZXIgc2VjbW9kZSBzZXQsCisgICBpbnN0ZWFkCisgICBvZiBzaW1wbHkgbG9nZ2luZyB0aGF0IGl0IHdvbid0IHdvcmsKKworMjAxMC0wNi0xMCAxOTo1OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNoZWNrIHB0cnMgYmVmb3JlIGRlcmVmZXJlbmNlCisKKzIwMTAtMDYtMTAgMTk6NTggIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbW92ZSBzbm1wVGxzdG1BZGRyVGFibGUgZGF0YSBtYW5hZ2VtZW50IHRvIGNlcnRfdXRpbDsgaW1wbGVtZW50CisgICBUQVJHRVRfQUREUgorICAgYW5kIFRBUkdFVF9QQVJBTVMgbG9va3VwIGluIGNlcnQgQVBJCisKKzIwMTAtMDYtMTAgMTk6NDcgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgdXBkYXRlIHNlYyBtb2RlbCBkZWZpbmUgbWlzc2VkIGluIGVhcmxpZXIgY2hlY2tpbgorCisyMDEwLTA2LTEwIDE5OjQ2ICByc3RvcnkKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIGNvbmZpZyB0cmFwc2VzcyB0cmFuc3BvcnRzIG9uIGNyZWF0aW9uOyBzaW1wbGlmeSBpZmRlZnMgZm9yCisgICBESVNBQkxFX1NOTVBWMQorCisyMDEwLTA2LTEwIDE5OjQ2ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wa3NtLmMsICAgCisgICAgICBzbm1wbGliL3NubXB0c20uYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGF1dG8gc3dpdGNoIHRvIHYzIGZvciAoZCl0bHMgc2Vzc2lvbnMgaW5zdGVhZCBvZiBsb2dnaW5nIHRoYXQKKyAgIG90aGVycyB3b250CisgICB3b3JrOyBkZWZpbmUgVFNNIHNlYyBtb2RlbCB3aXRoIG90aGVyIHNlYyBtb2RlbHM7IGNvbnNpc3RlbnRseQorICAgdXNlCisgICBTTk1QX1NFQ19NT0RFTF8qIGluIHRoZSBjb2RlLCB1c2luZyAjZGVmaW5lcyBmb3IgYmFja3dhcmRzCisgICBjb21wYXRpYmlsaXR5CisgICB3LypfU0VDVVJJVFlfTU9ERUwKKworMjAxMC0wNi0xMCAxOTo0NiAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgY2VydFRvVFNOOiBtb3ZlIG1pYiByZWxhdGVkIHBlcnNpc3RlbmNlIGJhY2sgaW50byBtaWIgbW9kdWxlOworICAgY2VydF91dGlsOiBhZGQgdGxzdG1QYXJhbXMgcGVyc2lzdGVuY2U7IHVzZSBzbGlzdCBmb3IgY2VydCBtYXAKKyAgIHR5cGUgbmFtZQorICAgbWFwcGluZzsKKworMjAxMC0wNi0xMCAxOTo0NSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nIChjb25zdCkKKworMjAxMC0wNi0xMCAwNDo1OCAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmM6CisKKyAgIEFkZCBtaXNzaW5nIGluZGVudGF0aW9uIG9mIGEgZG8td2hpbGUgbG9vcCB0byBtYWtlIHRoZSBjb2RlCisgICByZWFkYWJsZS4KKworMjAxMC0wNi0wOSAyMjo1NyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBjb21tZW50IG91dCBrZXlVc2FnZSBzbyBwcm9wZXIgc2VsZi1zaWduZWQgY2VydHMgYXJlIGdlbmVyYXRlZAorCisyMDEwLTA2LTA5IDIyOjU3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzb2xpZGlmeSBjZXJ0aWZpY2F0ZSBhY2NlcHRhbmNlIGZvciB0aGUgY2xpZW50IHNpZGUKKworMjAxMC0wNi0wOSAyMjo1NyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggYXJyYXkgdHlwbworCisyMDEwLTA2LTA5IDIyOjU2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGxvZyBvcGVuc3NsIGVycm9ycyBvbiBhY2NlcHQgZmFpbHVyZQorCisyMDEwLTA2LTA5IDIyOjU2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmVnaXN0ZXIgZGVmYXVsdCBwb3J0cyBmb3IgdGxzL2R0bHMKKworMjAxMC0wNi0wOSAyMjo1NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBkbyBwcm9wZXIgU1RPUkUgbG9hZGluZyBvZiB0cnVzdGVkIGNlcnRpZmljYXRlcyByYXRoZXIgdGhhbiBmaWxlCisgICBiYXNlZCBsb2FkaW5nCisKKzIwMTAtMDYtMDkgMjI6NTYgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGRlZCB0d28gbmV3IEFQSXM6IG5ldHNubXBfY2VydF90cnVzdCBhbmQgbmV0c25tcF9jZXJ0X3RydXN0X2NhCisKKzIwMTAtMDYtMDkgMjI6NTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYWRkZWQgc3RyYWlnaHQgJ3RscycgdHJhbnNwb3J0IG5hbWUKKworMjAxMC0wNi0wOSAyMjo1NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYWRkZWQgc3RyYWlnaHQgJ2R0bHMnIHRyYW5zcG9ydCBuYW1lCisKKzIwMTAtMDYtMDggMjE6MDUgIG1hZ2ZyCisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW46CisKKyAgIEluc3RhbGwgYWdlbnRfcmVhZF9jb25maWcuaCBpbiA1LjYgYXMgd2VsbC4gSXQgZGlzYXBwZWFyZWQgaW4KKyAgIHIxODg0My4KKworMjAxMC0wNi0wOCAwOToyNSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmM6CisKKyAgIFJlbW92ZSAob3IgYWN0aXZhdGUpIHVudXNlZCB2YXJpYWJsZXMuCisgICBGaXggbWlzbmFtZWQgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisKKzIwMTAtMDYtMDggMDc6MTEgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg6CisKKyAgIEFQSSBjaGFuZ2VzIGZvciBwcmVsaW1pbmFyeSBIQUxfYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgVUNEIGRpc2sKKyAgIG1vZHVsZS4KKyAgIChPbWl0dGVkIGZyb20gcmV2aXNpb24gMTg5MzIgY2hlY2tpbikKKworMjAxMC0wNi0wOCAwNDoxOCAgcnN0b3J5CisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW46CisKKyAgIHVwZGF0ZSBtYWtlZmlsZSBmb3IgbW92ZWQgaGVscGVyIGhlYWRlcnMKKwogMjAxMC0wNi0wNyAyMDoxOCAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmM6CkBAIC0yMTMwLDYgKzQwNDIyLDE2OSBAQAogICAgUmV2ZXJ0aW5nIHJldi4gMTc2MTYsIHRoZSBuZWNlc3NhcnkgY2hlY2sgaXMgYWxyZWFkeSBpbiByZXYuCiAgICAxNzQxNS4KIAorMjAxMC0wNi0wNiAwMzo0NSAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogSW4gY2FzZSBleGVjX3ByZWZpeCBpcyB1bnNldCB0aGVuIHNldCBpdCB0bworICAgJyR7cHJlZml4fScgaW4gb3JkZXIgdG8gcGljayB1cCBvdmVycmlkZXMgb2YgJHByZWZpeCBpbiBtYWtlCisgICBpbnN0YWxsLgorCisyMDEwLTA2LTA0IDA0OjA2ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBkbyBhIGJldHRlciBqb2Igb2YgdmVyaWZ5aW5nIGZpbmdlcnByaW50cyBvZiByZW1vdGUgc2VydmVycworICAgcHVsbGluZyBmaW5nZXJwcmludHMgZnJvbSBhIG51bWJlciBvZiBwb3NzaWJsZSBwbGFjZXMKKworMjAxMC0wNi0wNCAwNDowNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBnbyBhaGVhZCBhbmQgbG9nIG91dHB1dCBmaWxlIGZvciBlYXNpZXIgZGVidWdnaW5nIGluIGVycm9ycworCisyMDEwLTA2LTA0IDA0OjA1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBmaXggdHlwbworCisyMDEwLTA2LTA0IDA0OjA1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc2NhcGkuYzoKKworICAgcmVtb3ZlIGNvbW1lbnQgYWJvdXQgcmFuZG9tIGJlaW5nIGluYWRlcXVhdGU7IHdlJ3JlIGRvaW5nIHRoZQorICAgYmVzdCB3ZSBjYW4gYmFzZWQgb24gd2hhdCB3ZSBoYXZlCisKKzIwMTAtMDYtMDQgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB1c2UgYW5vdGhlciB1c2VyIGZvciB0ZXN0aW5nIHNubXBhcHAgZGVmYXVsdCBjZXJ0aWZpY2F0ZQorCisyMDEwLTA2LTA0IDA0OjA0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgcnVuIGEgZGVmYXVsdCB0ZXN0IHdpdGhvdXQgYSBsb2NhbCBrZXkgdG8gZW5zdXJlIHRoZSBzbm1wYXBwIHR5cGUKKyAgIGlzIHBpY2tlZCB1cAorCisyMDEwLTA2LTA0IDA0OjA0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGxvY2FsIGlkZW50aXR5IGFuZCBwdWxsIGl0IGZyb20gYQorICAgZmlsZW5hbWUgb2YgdGhlIGluaXRfc25tcCgpIHJlZ2lzdGVyZWQgdHlwZSBuYW1lCisKKzIwMTAtMDYtMDQgMDQ6MDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbToKKworICAgZG9jIHVwZGF0ZQorCisyMDEwLTA2LTA0IDA0OjAzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNXVuaXgudDoKKworICAgdW5peCBzb2NrZXQgdGVzdAorCisyMDEwLTA2LTA0IDA0OjAzICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDN1ZHA2LnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDR0Y3A2LnQ6CisKKyAgIGlwdjYgdGVzdHMKKworMjAxMC0wNi0wNCAwNDowMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudDoKKworICAgbWVudGlvbiB0ZXN0IG5hbWUgaXMgSVB2NAorCisyMDEwLTA2LTA0IDA0OjAyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50OgorCisgICBjaGVjayB0aGF0IHRyYW5zcG9ydCB3YXMgY29uZmlndXJlZAorCisyMDEwLTA2LTA0IDA0OjAyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG06CisKKyAgIGFkZCBzdXBwb3J0IGZvciBuZXQtc25tcC1jb25maWcuaCBjaGVja3MKKworMjAxMC0wNi0wNCAwNDowMSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9OZXRTTk1QVGVzdFRyYW5zcG9ydC5wbSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQ6CisKKyAgIHNvbWUgYmFzaWMgdHJhbnNwb3J0IGNoZWNraW5nIGZvciBwZXJsOiB1ZHAgYW5kIHRjcAorCisyMDEwLTA2LTA0IDA0OjAxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwsIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDAwMWJhc2ljLnQ6CisKKyAgIGJhc2ljIHRlc3RzIGZvciBwZXJsCisKKzIwMTAtMDYtMDQgMDQ6MDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbToKKworICAgaW5mcmFzdHJ1Y3R1cmUgbW9kdWxlIGZvciB0ZXN0aW5nIHBlcmwgc3VwcG9ydAorCisyMDEwLTA2LTAzIDE1OjU2ICBkdHMxMgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBQb2ludCBMSUJ7Q1VSUkVOVCxBR0UsUkVWSVNJT059IGRvY3VtZW50YXRpb24gdG8gdGhlIGNvcnJlY3QKKyAgIGZpbGUuCisgICBXYXJuIGFib3V0ICdtYWtlZGVwZW5kJyBwaWNraW5nIHVwIHRlc3RpbmcgbW9kdWxlIGNvZGUuCisgICBFbXBoYXNpcyB1cGRhdGUgb2YgJ2Rvd25sb2FkLmh0bWwnIHBhZ2UKKyAgIE1lbnRpb24gdXBkYXRlIG9mIE9mZmljaWFsIFBhdGNoZXMKKyAgIFN1cHByZXNzIGJyb2tlbiBjb21tYW5kcworCisyMDEwLTA2LTAzIDE1OjE2ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmgsIGFnZW50L21pYmdyb3VwL3VjZF9zbm1wLmg6CisKKyAgIFByZWxpbWluYXJ5IEhBTF9iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBVQ0QgZGlzayBtb2R1bGUuCisgICBFbnN1cmVzIGNvbnNpc3RlbnQgcmVwb3J0aW5nIGJldHdlZW4gVUNEIGFuZCBIb3N0UmVzIEZTeXMgdXNhZ2UKKyAgIGFuZCBleHRlbmRzICdza2lwTkZTSW5Ib3N0UmVzb3VyY2VzJyBjb25maWcgdG8gVUNEIGRpc2sgc3RhdHMuCisKKzIwMTAtMDYtMDMgMTU6MTMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmM6CisKKyAgIEZpeCBicm9rZW4gc2l6ZSBjYWxjdWxhdGlvbnMuCisgICBTdXBwb3J0IDY0LWJpdCBzaXplL3VzYWdlIHZhbHVlcy4KKworMjAxMC0wNi0wMiAxNDo1MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHVzZSAtLXdpdGgtY2EgaW5zdGVhZCBvZiAtLWNhCisKKzIwMTAtMDYtMDIgMTQ6NTEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB1c2UgdGhlIG5ldyAtYnJpZWYgb3B0aW9uIGZvciBmaW5nZXJwcmludCBjYXB0dXJpbmcKKworMjAxMC0wNi0wMiAxNDo0MCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCAtLXdpdGgtY2EgaGFuZGxpbmcsIGZpeCBDQSBuZXdjZXJ0cyBib29ra2VlcGluZworCiAyMDEwLTA2LTAyIDEwOjU3ICBqc2FmcmFuZWsKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYywgICAKQEAgLTIxMzgsNiArNDA1OTMsNzMgQEAKICAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHBhcnNpbmcgT0lEcwogICAgaW4gY29uZmlnIGZpbGVzLgogCisyMDEwLTA2LTAyIDAwOjI0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgY2hlY2sgdGhhdCBDQSBjZXJ0aWZpY2F0ZXMgY3JlYXRlZCBhZnRlciBzbm1wZCBzdGFydHMgYXJlIHN0aWxsCisgICB1c2FibGU7IGNoZWNrIGFsbCBvdXRwdXQgZmluZ2VycHJpbnRzIHRvIGVuc3VyZSB0aGV5IHdlcmUKKyAgIHByb3Blcmx5IGNyZWF0ZWQKKworMjAxMC0wNi0wMiAwMDoyMyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhZGQgbWlzc2luZyBkaXJlY3RvcnkgYW5kIGZpbGUgc3VmZml4IHRvIGNhIGludm9jYXRpb25zCisKKzIwMTAtMDYtMDIgMDA6MjEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICBjaGVjayB0aGF0IGNlcnRpZmljYXRlIG91dHB1dCBmaW5nZXJwcmludHMgd2VyZSBmb3VuZAorCisyMDEwLTA2LTAyIDAwOjIwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIHR3byBuZXcgZnVuY3Rpb25zIGZvciB2YWx1ZSBjb21wYXJpc29uIHRlc3Qgb3V0cHV0CisKKzIwMTAtMDYtMDIgMDA6MTYgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgcmVtb3ZlIG5vLWxvbmdlci11c2VkIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHRva2VuIHNwZWNpZmllciAod2UKKyAgIHJlcXVpcmUgYSBjb3B5IG9mIHRoZSBrZXkpCisKKzIwMTAtMDYtMDIgMDA6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgLSBjaGFuZ2VkICdmaW5nZXJwcmludCcgdG9rZW4gdG8gbW9yZSBnZW5lcmljICdpZGVudGl0eScga2V5d29yZAorICAgLSBhZGRlZCB0aGUgYWJpbGl0eSBmb3IgbmV0c25tcF9jZXJ0X2ZpbmQgdG8gdHJ5IG11bHRpcGxlIHR5cGVzCisgICAoRlAgJiBmaWxlKQorICAgLSBhbmQgcHJvdmlkZSB0ZXN0IHN1aXRlIHRlc3QgZm9yIGl0LgorCisyMDEwLTA2LTAxIDIwOjEyICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgUGVybCBleHRlbnNpb24gbW9kdWxlcyBjYW4gbG9hZCB0aGUgTmV0LVNOTVAKKyAgIERMTHMgd2hpbGUgcnVubmluZyB0aGUgTmV0LVNOTVAgcmVncmVzc2lvbiB0ZXN0cy4KKworMjAxMC0wNi0wMSAxNjo0NyAgbWFyegorCisgICAqIGxvY2FsL2NlcnRnZW4tdGVzdC5wbCwgbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbWFqb3IgdXBkYXRlIGJ1ZyBmaXhlcyBhbmQgZmVhdHVyZXMgLSBpbnRlcmFjdGl2ZSBtb2RlLCBzZXBhcmF0ZQorICAgQ0EgZGlycywgZ2VuIGNzciBmcm9tIGNlcnQsIGZpbmdlcnByaW50IGRpc3BsYXkgLS1icmllZiwKKyAgIGVsaW1pbmF0ZSBzZWQsIG9wZW5zc2wuY29uZiBvdmVyd3JpdGUgYW5kIHRlbXBsYXRpbmcKKwogMjAxMC0wNi0wMSAxNDo0OCAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CkBAIC0yMTUyLDYgKzQwNjc0LDQ1NyBAQAogICAgCiAgICBKdXN0IGZpeGluZyBhIHN0dXBpZCB0eXBvLgogCisyMDEwLTA1LTMxIDEwOjQzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGVuYWJsZWQgVW5peCB0cmFuc3BvcnQuCisgICAoRm9yd2FyZC1wb3J0ZWQgcjE4Njg3IGZyb20gdGhlIFY1LjUgYnJhbmNoKS4KKworMjAxMC0wNS0zMCAyMjo1MiAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBlbmFibGUgdG8gcnVuIHdpdGggb2xkZXIgUGVybCAoZS5nLiBQZXJsIDUuMDA0MDUgYXMgc2hpcHBlZCB3aXRoCisgICBJUklYCisgICA2LjUpCisKKzIwMTAtMDUtMzAgMjI6NDkgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgcG9saXNoIGRvY3VtZW50YXRpb24KKworMjAxMC0wNS0zMCAyMDoxOSAgbWFnZnIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sICAgCisgICAgICBuZXQtc25tcC1jb25maWcuaW4sIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEw6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBEbyBub3QgbGluayB3aXRoIGxpYm5ldHNubXBoZWxwZXJzIGFueSBtb3JlIGFzCisgICBpdCBpcyBlbXB0eS4KKworMjAxMC0wNS0zMCAxOToxOCAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCBzbm1wbGliL3NubXAuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogVXNlIGEgdm9pZCBhcmd1bWVudCBmb3IgdGhlIGRhdGEgYXJndW1lbnQgb2YKKyAgIHhkdW1wLgorCisyMDEwLTA1LTMwIDE5OjE4ICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBfcGVybC5jOgorCisgICBDSEFOR0VTOiBCVUc6IDIwNTE3NDI6IGFkZGVkIG1pc3NpbmcgUEVSTF9TWVNfSU5JVDMoKSBjYWxsIChzZWUKKyAgIGFsc28gbWFuIHBlcmxlbWJlZCkuCisKKzIwMTAtMDUtMzAgMTk6MTYgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgKGZyZWUoKSBjYWxsZWQgd2l0aG91dCBiZWluZyBkZWNsYXJlZAorICAgZmlyc3QpLgorCisyMDEwLTA1LTMwIDE2OjU2ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5oLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBzbm1wbGliOiBEbyBub3QgcmVxdWlyZSB0aGF0IHRoZSBVRFAgdHJhbnNwb3J0IGlzIGluY2x1ZGVkLgorCisyMDEwLTA1LTMwIDEyOjAwICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENvcnJlY3QgZGVwZW5kZW5jaWVzIGJldHdlZW4gdHJhbnNwb3J0cy4gUmVtb3ZlCisgICB1bm5lY2Vzc2FyeSBpbmNsdWRlcy4KKworMjAxMC0wNS0zMCAwNjoyMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL2R1bW15LmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IGxpYm5ldHNubXBoZWxwZXJzIGlzIG5vdCBlbXB0eSBzdWNoIHRoYXQgYnVpbGRpbmcKKyAgIE5ldC1TTk1QIG9uIEFJWCBhbmQgSVJJWCBpcyBhZ2FpbiBwb3NzaWJsZS4KKworMjAxMC0wNS0yOSAwOTo1MiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgRm9sbG93LXVwIGZvciByMTg5MDI6IHdvcmtzIGFnYWluIHdpdGhvdXQgVEFQOjpIYXJuZXNzLgorCisyMDEwLTA1LTI4IDIzOjIzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggbG9uZy1hZ28gYnJva2VuIHZlcmJvc2l0eQorCisyMDEwLTA1LTI4IDIzOjA1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggbW9yZSBwcmV2aW91c2x5IGJyb2tlbiBvcHRpb24gcmVuYW1lczsgY2hhbmdlIC1kIHRvCisgICBtYXN0ZXItZGlyZWN0b3J5IGFuZCBhZGQgYXMgYSByZWFsIGFyZ3VtZW50CisKKzIwMTAtMDUtMjggMjM6MDUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX3NpbXBsZToKKworICAgbW9yZSBtaXNzaW5nIG9sZHVjZCByZW5hbWVzCisKKzIwMTAtMDUtMjggMjI6NTcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVOVEVTVFMsIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9vbGR1Y2QsIAorICAgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX3NpbXBsZToKKworICAgcmVuYW1lZCAnb2xkdWNkJyB0byAnc2ltcGxlJyB0byBwdXQgYSBtb3JlIHBvc2l0aXZlIHNwaW4gb24gdGhlbQorCisyMDEwLTA1LTI4IDIyOjU0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUkVBRE1FLCB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHRlc3Qgc3VpdGUKKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5OgorCisgICByZXZlcnQgdW5pbnRlbnRpb25hbmFsbHkgY29tbWl0dGVkIHRlc3QgdGVzdAorCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMsIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHk6CisKKyAgIGZyZWUgdmFyaWFibGVzIGFnYWluCisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgZml4IHdhbGtzIHNvIHRoYXQgbXVsdGlwbGUgd2Fsa3MgdGVybWluYXRlIHByb3Blcmx5CisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgcGF0Y2ggdG8gaGFuZGxlIHRlc3Rpbmcgb2YgbG9vcGluZyBvZiBtdWx0aXBsZSB2YXJiaW5kcyBpbiBhIHdhbGsKKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBpbml0YWwgcGF0Y2ggdG8gcHJldmVudCBsb29waW5nIHdhbGtzCisKKzIwMTAtMDUtMjggMjA6NTMgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgaW1wbGVtZW50IGNlcnQgbG9va3VwIGJ5IGZpbGVuYW1lCisKKzIwMTAtMDUtMjggMDc6MDIgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBjb25zdCBkZWNsYXJhdGlvbnMgdG8gdGhlIGRpc2FibGVkIHZlcnNpb25zCisgICBvZiB0aGUgZGVidWdnaW5nIGNvZGUgYXMgd2VsbC4KKworMjAxMC0wNS0yOCAwMjoxMiAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgYWRkIHBlcnNpc3RlbmNlOyBjaGVjayBmb3IgY29sIG1vZHMgd2hpbGUgcm93IGFjdGl2ZQorCisyMDEwLTA1LTI4IDAyOjExICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaDoKKworICAgQ0hBTkdFUzogYWdlbnRsaWI6IG5ldyBmdW5jdGlvbnMgdG8gbWFrZSBzdGFzaCBwdHIgYW5kIG5ld3JvdworICAgYXZhaWxhYmxlIHRvCisgICB0YWJsZV9kYXRhc2V0IGhhbmRsZXJzCisgICBub25ld3M6IGZpeCB0eXBvOyB0YWJzIHRvIHNwYWNlczsgdXNlIHNpemVvZiBpbnN0ZWFkIG9mIGNvbnN0YW50CisKKzIwMTAtMDUtMjcgMTg6NTkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3A6CisKKyAgIFdpbjMyIGJ1aWxkIGZpeGVzLgorCisyMDEwLTA1LTI3IDE4OjI0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICAibWFrZSB0ZXN0IiB3aXRob3V0IFRBUDo6SGFybmVzcyAod2FzIGJyb2tlbiBieSByMTg4MDIpLgorCisyMDEwLTA1LTI3IDE1OjE1ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgsIAorICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCBzbm1wbGliL2xjZF90aW1lLmMsICAgCisgICAgICBzbm1wbGliL21kNS5jLCBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzLiBNb3N0IGZpeGVzIGludm9sdmVkIGFkZGluZyB0aGUKKyAgICJjb25zdCIga2V5d29yZC4KKwogMjAxMC0wNS0yNyAxMzo1MiAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYzoKQEAgLTIxNTksMTUwICs0MTEzMiwxMzUwIEBACiAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyOTcyNTc5OiBmaXhlZCBjaGVja2luZyBvZgogICAgc25tcFRhcmdldEFkZHJSb3dTdGF0dXMgU0VUIHJlcXVlc3RzLgogCi0yMDEwLTA1LTI3IDA2OjQ5ICBidmFzc2NoZQorMjAxMC0wNS0yNyAxMzo0MSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ydW46CisKKyAgIHJldmVydCBwYXJ0IG9mIDE4ODg1OiB0ZXN0IGZpbGVzIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBieQorICAgdGhlbXNlbHZlcyB0b28KKworMjAxMC0wNS0yNyAxMToxOSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg6CisKKyAgIENIQU5HRVM6IGNvcnJlY3RseSBjYWxjdWxhdGUgaWZYVGFibGUuaWZIQ0luVWNhc3RQa3RzIG9uIDMyLWJpdAorICAgTGludXgKKyAgIAorICAgTGludXggZG9lcyBub3QgcHJvdmlkZSBzdGFuZGFsb25lIGNvdW50ZXIgZm9yIGluY29taW5nIHVuaWNhc3QKKyAgIHBhY2tldHMgKGl1Y2FzdCkKKyAgIC0gaXQgcHJvdmlkZXMgY291bnRlciBvZiBhbGwgcGFja2V0cyAoaWFsbCkgKyBzZXBhcmF0ZSBjb3VudGVyCisgICBmb3IgdGhlIG11bHRpY2FzdAorICAgb25lcyAoaW1jYXN0KS4gUHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgaWZUYWJsZSByZWFkIHRoZXNlCisgICBjb3VudGVycyBhbmQKKyAgIGNhbGN1bGF0ZWQgaXVjYXN0ID0gaWFsbCAtIGltY2FzdCAqYmVmb3JlKiB0aGVzZSB2YWx1ZXMgd2VyZQorICAgZXhwYW5kZWQgaW50bworICAgNjRiaXRzLiBUaGlzIHByb2R1Y2VkIGVycm9ycyBvbiAzMmJpdCBzeXN0ZW1zIHdoZW4gaWFsbAorICAgb3ZlcmZsb3dlZCB0byB6ZXJvIGFuZAorICAgaW1jYXN0IHdhcyBub3plcm8gLT4gaXVjYXN0IGdvdCBuZWdhdGl2ZSBhbmQgJ2M2NCAzMiBiaXQgY2hlY2sKKyAgIGZhaWxlZCcgZXJyb3IgaW4KKyAgIHNubXBkIGxvZy4gTm93IHRoZSBhZ2VudCBleHBhbmRzIHRoZXNlIHZhbHVlcyB0byA2NGJpdHMgZmlyc3QgYW5kCisgICAqICAgICAqdGhlbiogcGVyZm9ybXMgICAgdGhlIGNhbGN1bGF0aW9uLCB1c2luZyBhIG5ldyBmbGFnLiAKKyAgICAgIDIwMTAtMDUtMjcgMDg6MTggIG1hZ2ZyCisKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsIHRlc3RpbmcvUlVOVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX3J1bjoKKworICAgQ0hBTkdFUzogdGVzdGluZzogTW92ZSB0aGUgc2V0dGluZyBvZiBNSUJESVJTIGZyb20gdGhlIHN1cHBvcnQKKyAgIHNjcmlwdCB0byB0aGUgZHJpdmVycyBzaW5jZSBpdCBpcyBuZWVkZWQgZm9yIHRoZSBDIHRlc3RzIGFzIHdlbGwuCisKKzIwMTAtMDUtMjcgMDg6MDkgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgQ0hBTkdFUzogdGVzdGluZzogVXNlIG9sZHVjZF9ydW4sIG5vdCBydW5fb2xkdWNkLiBDaGFuZ2Ugc3JjZGlyCisgICB0byByZWZlciB0byB0aGUgdG9wIGRpcmVjdG9yeSBhbmQgbm90IHRoZSB0ZXN0aW5nIHN1YmRpcmVjdG9yeSBhcworICAgdGhhdCBpcyB3aGF0IGlzIGV4cGVjdGVkIGluIHRoZSB0ZXN0IHNjcmlwdHMuCisKKzIwMTAtMDUtMjcgMDU6MTcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIHdhcm5pbmcgc3F1YXNoaW5nCisKKzIwMTAtMDUtMjcgMDU6MTYgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgsIHNubXBsaWIva2V5dG9vbHMuYywgICAKKyAgICAgIHNubXBsaWIvbGNkX3RpbWUuYzoKKworICAgbW9yZSBjb25zdCBjb3JyZWN0bmVzcworCisyMDEwLTA1LTI3IDA0OjE4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB0ZXN0cyBmb3IgYWdlbnQtbm90LWtub3duLXVzZXItY2VydGlmaWNhdGVzCisKKzIwMTAtMDUtMjcgMDQ6MTYgIGhhcmRha2VyCisKKyAgICogUkVBRE1FLnNubXB2MzoKKworICAgcmVmZXJlbmNlIHRoZSBpdG5lcm5hbCBzdXBwb3J0IGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24KKworMjAxMC0wNS0yNyAwNDoxNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2wvT1BFTlNTTC1MSUNFTlNFLCBzbm1wbGliL29wZW5zc2wvUkVBRE1FOgorCisgICBpbnRlcm5hbCBPcGVuU1NMIHN1cHBvcnQgZG9jdW1lbnRhdGlvbgorCisyMDEwLTA1LTI3IDA0OjE2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIE5FV1M6IGxpYm5ldHNubXA6IFN1cHBvcnQgZm9yIGEgc3RyZWFtLWxpbmUgc3RyaXBwZWQgZG93biB2ZXJzaW9uCisgICBvZiBpbnRlcm5hbCBPcGVuU1NMIHN1cHBvcnQgdXNpbmcgLS13aXRoLW9wZW5zc2w9aW50ZXJuYWwKKworMjAxMC0wNS0yNyAwNDoxNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvb3BlbnNzbF9tZDUuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMsIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3Nwci5oLCAKKyAgICAgICAgc25tcGxpYi9zY2FwaS5jOgorCisgICByZW1vdmUgbW9yZSBkZXBlbmRlbmNpZXMgZm9yIGV4dGVybmFsIG9wZW5zc2wgaGVhZGVycworCisyMDEwLTA1LTI3IDA0OjE1ICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCBzbm1wbGliL29wZW5zc2wsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jZmIxMjguYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQzMl9jb21tb24uaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1X2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tb2Rlcy5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYywgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhLmgsIAorICAgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGExLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGFfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3Nwci5oLCBzbm1wbGliL29wZW5zc2xfYWVzX2NmYi5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX2Flc19jb3JlLmMsIHNubXBsaWIvb3BlbnNzbF9hZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9jYmNfZW5jLmMsIHNubXBsaWIvb3BlbnNzbF9jZmIxMjguYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9kZXNfZW5jLmMsIHNubXBsaWIvb3BlbnNzbF9kZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDMyX2NvbW1vbi5oLCBzbm1wbGliL29wZW5zc2xfbWQ1LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQ1X2xvY2FsLmgsIHNubXBsaWIvb3BlbnNzbF9tb2Rlcy5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX25jYmNfZW5jLmMsIHNubXBsaWIvb3BlbnNzbF9zZXRfa2V5LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfc2hhLmgsIHNubXBsaWIvb3BlbnNzbF9zaGExLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfc2hhX2xvY2FsLmgsIHNubXBsaWIvb3BlbnNzbF9zcHIuaDoKKworICAgbW92ZSBvcGVuc3NsIGNvZGUgaW50byBhIHN1YmRpcmVjdG9yeQorCisyMDEwLTA1LTI3IDA0OjEzICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2Jhc2UsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfb2xkdWNkOgorCisgICBmaXggdGVzdGluZyBzbyBpdCB1c2VzIG11bHRpcGxlIHR5cGVzIG9mIGNyeXB0bworCisyMDEwLTA1LTI3IDA0OjEzICBoYXJkYWtlcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgZGVmaW5pdGlvbnMgYW5kIGZpbGVzIGZvciBkb2luZyBpbnRlcm5hbCBjcnlwdG8gc3VwcG9ydAorCisyMDEwLTA1LTI3IDA0OjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc2NhcGkuYzoKKworICAgaW5jbHVkZSBpbnRlcm5hbCBhZXMvZGVzIGhlYWRlcnMKKworMjAxMC0wNS0yNyAwNDoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfY2ZiMTI4LmM6CisKKyAgIGxvY2FsaXplCisKKzIwMTAtMDUtMjcgMDQ6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2NmYjEyOC5jLCBzbm1wbGliL29wZW5zc2xfbW9kZXMuaDoKKworICAgaW5pdGFsIGNvcGllcyBvZiBjZmIxMjggbW9kZXMgZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Flc19jb3JlLmM6CisKKyAgIGxvY2FsaXplCisKKzIwMTAtMDUtMjcgMDQ6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Flc19jb3JlLmMsIHNubXBsaWIvb3BlbnNzbF9hZXNfbG9jYWwuaDoKKworICAgaW5pdGlhbCB2ZXJzaW9ucyBvZiBhZXNfY29yZS5jIGFuZCBhZXNfbG9jbC5oCisKKzIwMTAtMDUtMjcgMDQ6MTAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmg6CisKKyAgIGluaXRpYWwgY29weSBvZiBhZXMuaCBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDoxMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfYWVzX2NmYi5jOgorCisgICBpbml0aWFsIGNvcHkgb2YgdGhlIG9wZW5zc2wgYWVzX2NmYi5jIGZpbGUKKworMjAxMC0wNS0yNyAwNDoxMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfZGVzX2VuYy5jOgorCisgICBpbmNsdWRlIGxvY2FsaXplZCBjb3BpZXMgb2YgdGhlIGZpbGVzCisKKzIwMTAtMDUtMjcgMDQ6MDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zY2FwaS5jOgorCisgICB1c2UgaW50ZXJuYWwgREVTCisKKzIwMTAtMDUtMjcgMDQ6MDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2NiY19lbmMuYzoKKworICAgbG9jYWxpemVkIGNvcHkgb2YgdGhlIGNiY19lbmMuYyBmaWxlIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjA5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9zcHIuaDoKKworICAgZGVzL3Nwci5oIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9kZXNfZW5jLmM6CisKKyAgIGFkZGVkIGRlc19lbmMuYyBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9tZDUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX3NoYS5oOgorCisgICBsb2NhbCBjb3BpZXMgb2YgdGhlIG9wZW5zc2wgaGVhZGVycworCisyMDEwLTA1LTI3IDA0OjA3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oOgorCisgICBpbml0aWFsIGNvcHkgb2Ygb3BlbnNzbCdzIGRlcy5oCisKKzIwMTAtMDUtMjcgMDQ6MDcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX25jYmNfZW5jLmMsIHNubXBsaWIvb3BlbnNzbF9zZXRfa2V5LmM6CisKKyAgIGxvY2FsaXplZCBoZWFkZXIgZmlsZXMKKworMjAxMC0wNS0yNyAwNDowNyAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9vcGVuc3NsX2Rlc19sb2NhbC5oLCBzbm1wbGliL29wZW5zc2xfbmNiY19lbmMuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9zZXRfa2V5LmM6CisKKyAgIGluaXRhbCBjb3BpZXMgb2Ygc29tZSBvZiB0aGUgb3BlbnNzbCBERVMgZmlsZXMKKworMjAxMC0wNS0yNyAwNDowNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvc2NhcGkuYzoKKworICAgZmluaXNoaW5nIHBvcnRpbmcgb2YgaW50ZXJuYWwgYXV0aCBzdXBwb3J0CisKKzIwMTAtMDUtMjcgMDQ6MDYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgYWRkIGludGVybmFsIGNyeXB0byBmaWxlcyB0byB0aGUgY2hlY2svdXNlIGxpc3QKKworMjAxMC0wNS0yNyAwNDowNiAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9tZDMyX2NvbW1vbi5oLCBzbm1wbGliL21kNV9sb2NsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQzMl9jb21tb24uaCwgc25tcGxpYi9vcGVuc3NsX21kNS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kNV9sb2NhbC5oLCBzbm1wbGliL29wZW5zc2xfc2hhMS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX3NoYV9sb2NhbC5oLCBzbm1wbGliL3NoYV9sb2NsLmg6CisKKyAgIGxvY2FsaXplZCBmaWxlIG5hbWVzIHdpdGggb3BlbnNzbCBwcmVmaXhlcworCisyMDEwLTA1LTI3IDA0OjA1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL29wZW5zc2xfbWQ1LmgsIHNubXBsaWIvbWQ1X2xvY2wuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDUuYzoKKworICAgbG9jYWxpemUgdGhlIG1kNSBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTA1LTI3IDA0OjA1ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL29wZW5zc2xfc2hhLmgsIHNubXBsaWIvb3BlbnNzbF9zaGExLmMsICAgCisgICAgICBzbm1wbGliL3NoYV9sb2NsLmg6CisKKyAgIGNvbXBsZXRlbHkgbG9jYWxpemUgdGhlIG9wZW5zc2wgU0hBIHN1cHBvcnQKKworMjAxMC0wNS0yNyAwNDowNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfc2hhLmg6CisKKyAgIGluaXRpYWwgdmVyaXNvbiBvZiBzaGEuaCBjb3B5CisKKzIwMTAtMDUtMjcgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvbWQzMl9jb21tb24uaCwgc25tcGxpYi9tZDVfbG9jbC5oLCBzbm1wbGliL29wZW5zc2xfbWQ1LmMsIAorICAgICAgICBzbm1wbGliL29wZW5zc2xfc2hhMS5jLCBzbm1wbGliL3NoYV9sb2NsLmg6CisKKyAgIGFkZGVkIGxvY2FsIGNvcGllcyBvZiB0aGUgb3BlbnNzbCBjcnlwdG8gZnVuY3Rpb25zCisKKzIwMTAtMDUtMjcgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jOgorCisgICBtYWtlIHVzZSBvZiBpbnRlcm5hbCBjcnlwdG8gaGFzaCBmdW5jdGlvbnMKKworMjAxMC0wNS0yNyAwNDowMyAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgY29uZmlndXJlIGNoZWNrcyBmb3IgaW50ZXJuYWwtY3J5cHRvIHN1cHBvcnQKKworMjAxMC0wNS0yNiAyMjoxNyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgcHJvcGVybHkgdmVyaWZ5IGV4cGVjdGVkIHNlcnZlciBjZXJ0aWZpY2F0ZXMgdW5kZXIgRFRMUzsgYWRkIGEKKyAgIG5ldyBmbGFnIGluIHRsc2Jhc2UgdG8gaW5kaWNhdGUgdmVyaWZpY2F0aW9uIGhhcyBvY2N1cnJlZAorCisyMDEwLTA1LTI2IDIxOjAyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIGNvbXBpbGVyIHdhcm5pbmcgc3F1YXNoaW5nCisKKzIwMTAtMDUtMjYgMjE6MDIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgsIHNubXBsaWIvbGNkX3RpbWUuYywgICAKKyAgICAgIHNubXBsaWIvc2NhcGkuYzoKKworICAgYWRkIGNvbnN0IHF1YWxpZmllcnMgdG8gYSBmZXcgcGxhY2VzCisKKzIwMTAtMDUtMjYgMTk6NDYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBsaWJuZXRzbm1wbWlicywgbGlibmV0c25tcGhlbHBlcnMgYW5kCisgICBsaWJuZXRzbm1wYWdlbnQgZG8gbm93IGJ1aWxkIGFzIGEgRExMIHdoZW4gY29uZmlndXJlZCB3aXRoCisgICAtLWVuYWJsZS1zaGFyZWQuCisKKzIwMTAtMDUtMjYgMTc6NDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46CisKKyAgIE5FV1M6IG1vdmVkIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsaWJuZXRzbm1waGVscGVycyB0bworICAgbGlibmV0c25tcGFnZW50LiBsaWJuZXRzbm1waGVscGVycyBpcyBub3cgYW4gZW1wdHkgbGlicmFyeS4KKworMjAxMC0wNS0yNiAxNzoyMCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvbnVsbC5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvbnVsbC5jLCAgIAorICAgICAgYWdlbnQvb2xkX2FwaS5jOgorCisgICBSZXZlcnRlZCByMTg4MjkgaW4gb3JkZXIgdG8gbWluaW1pemUgZGlmZnMgd2l0aCBvbGRlciBicmFuY2hlcy4KKworMjAxMC0wNS0yNSAwNzoyMyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIFRlbGwgbmV0LXNubXAtY2VydCB3aGVyZSBuZXQtc25tcC1jb25maWcgaXMgbG9jYXRlZAorCisyMDEwLTA1LTI1IDA3OjE0ICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgQ29ycmVjdCB0aGUgc2lnbmF0dXJlIG9mIG1haW4uIFVzZSAjaW5jbHVkZSBpbnN0ZWFkIG9mIHNvdXJjaW5nCisgICB0byBnZXQgdGhlIGNvZGUgdW5kZXIgdGVzdCBpbiBvcmRlciB0byBnZXQgYmV0dGVyIGVycm9yIG1lc3NhZ2VzCisKKzIwMTAtMDUtMjUgMDc6MTEgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYzoKKworICAgQWRkIGFyZ3VtZW50cyB0byBzcHJpbnRmIHN0YXRlbWVudHMgdG8gbWFrZSB0aGUgdGVzdCB3b3JrCisKKzIwMTAtMDUtMjUgMDc6MDcgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jOgorCisgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBhbmQgZGlzYWJsZWQgY29kZQorCisyMDEwLTA1LTI1IDA1OjIwICBtYWdmcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFNwbGl0IHNubXBJUEJhc2VEb21haW4gYW5kIG1vdmUgdGhlIElQdjQgcGFydHMKKyAgIHRvIElQdjRCYXNlIGFuZCB0aGUgc29ja2V0IGdlbmVyaWMgcGFydHMgdG8gU29ja2V0QmFzZS4KKworMjAxMC0wNS0yNCAyMDoyNCAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nOyBmaW5pc2ggdGxzdG1QYXJhbXNUYWJsZSBsYXN0Q2hhbmdlZCBzY2FsYXIKKworMjAxMC0wNS0yNCAxOToyOCAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBBZGQgLS1leHRlcm5hbC1saWJzIGluIG9yZGVyIHRvIHN1cHBvcnQgYnVpbGRpbmcgdGhlIHRlc3RzIG9uCisgICBzb2xhcmlzCisKKzIwMTAtMDUtMjQgMTM6MzMgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBhcmdoLi4gZml4IGZhbGxvdXQgZnJvbSBtYW51YWxseSAobWlzKWFwcGx5aW5nIHBhdGNoCisKKzIwMTAtMDUtMjQgMTI6NTkgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oOgorCisgICBmaXJzdCBwYXNzIGF0IHRsc3RtUGFyYW1zVGFibGUKKworMjAxMC0wNS0yNCAxMjo1OSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIHVwZGF0ZSBkZWZpbmVzIHRvIG1hdGNoIE1JQiBuYW1lcywgcGVyIGdyYW5kLXBvb2JhaAorCisyMDEwLTA1LTI0IDEyOjU4ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmM6CisKKyAgIHVwZGF0ZSBPSUQgdG8gbWF0Y2ggdXBjb21pbmcgUkZDCisKKzIwMTAtMDUtMjQgMTE6NDggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL251bGwuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L251bGwuYywgICAKKyAgICAgIGFnZW50L29sZF9hcGkuYzoKKworICAgQ0hBTkdFUzogbGlibmV0c25tcGFnZW50LCBsaWJuZXRzbm1waGVscGVyczogbW92ZWQgdGhlIGZ1bmN0aW9ucworICAgbmV0c25tcF9idWxrX3RvX25leHRfZml4X3JlcXVlc3RzKCksCisgICBuZXRzbm1wX2dldF9idWxrX3RvX25leHRfaGFuZGxlcigpLCBuZXRzbm1wX3JlZ2lzdGVyX251bGwoKSwKKyAgIG5ldHNubXBfcmVnaXN0ZXJfbnVsbF9jb250ZXh0KCkgYW5kIG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpCisgICBmcm9tIGxpYm5ldHNubXBoZWxwZXJzIHRvIGxpYm5ldHNubXBhZ2VudC4KKyAgIE5vdGVzOgorICAgLSBUaGlzIGRvZXMgbm90IGFmZmVjdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgYXBwbGljYXRpb25zCisgICB0aGF0IGxpbmsgd2l0aCAkKG5ldC1zbm1wLWNvbmZpZyAtLWFnZW50LWxpYnMpIHNpbmNlIHRoaXMKKyAgIGludm9sdmVzIGxpbmtpbmcgd2l0aCBib3RoIGxpYm5ldHNubXBoZWxwZXJzIGFuZCBsaWJuZXRzbm1wYWdlbnQuCisgICAtIEZ1bmN0aW9ucyBoYXZlIGJlZW4gbW92ZWQgYmV0d2VlbiBsaWJyYXJpZXMgYnkgbW92aW5nIGVudGlyZQorICAgc291cmNlIGZpbGVzLgorCisyMDEwLTA1LTI0IDEwOjEwICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYzoKKworICAgVXNlIHByb3BlciBzdHJpbmcgc2l6ZXMgYW5kIG1ha2Ugc3VyZSBzdHJpbmdzIGFyZQorICAgemVyby10ZXJtaW5hdGVkLgorCisyMDEwLTA1LTI0IDA4OjAxICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgbmV0LXNubXAtY29uZmlnLmluLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBsaWJuZXRzbm1wIGRvZXMgbm93IGJ1aWxkIGFzIGEgRExMIHdoZW4KKyAgIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1zaGFyZWQuCisgICBDSEFOR0VTOiBDeWd3aW46IHBlcmwgbW9kdWxlcyBkbyBub3cgYnVpbGQgKC0td2l0aC1wZXJsLW1vZHVsZXMpLgorICAgTm90ZTogdGhlIFQwNjB0cmFwZHBlcmxfb2xkdWNkLCBUMDYxYWdlbnRwZXJsX29sZHVjZCBhbmQKKyAgIFQxMTVhZ2VudHhwZXJsX29sZHVjZCB0ZXN0cyBzdGlsbCBmYWlsLgorCisyMDEwLTA1LTIzIDIzOjA2ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIHVwZGF0ZSBmaWxlbmFtZXMvcGF0c2ggZm9yIHJlY2VudCBmaWxlIHJlbmFtZXM7IGZpeCB0eXBvcworCisyMDEwLTA1LTIzIDIyOjA4ICBtYWdmcgorCisgICAqICBuZXQtc25tcC1jb25maWcuaW4sIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSB0aGUgc2FtZSBjb21waWxlciBjb21tYW5kIGFuZCBmbGFncyBmb3IKKyAgIGJ1aWxkaW5nIG9mIHRlc3RzIGFzIGZvciBidWlsZGluZyBvZiB0aGUgY29kZSwgdGh1cyBlbmFibGluZyB0ZXN0CisgICBvZiBlLmcuIDMyLWJpdCBjb2RlIGNvbXBpbGVkIG9uIGEgNjQtYml0IHBsYXRmb3JtLgorCisyMDEwLTA1LTIzIDIxOjQxICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIHVwZGF0ZSBpbmNsdWRlL2NvbmZpZyBmaWxlL3BhdGhzIGZvciByZWNlbnQgcmVuYW1lcworCisyMDEwLTA1LTIzIDIxOjMxICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIHJlbmFtZSBmaWxlcyBmb3IgTUlCIHJlbmFtZXMKKworMjAxMC0wNS0yMyAyMToyNSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZToKKworICAgcmVuYW1lIGRpcmVjdG9yaWVzIHRvIG1hdGNoIHJlbmFtZXMgaW4gTUlCCisKKzIwMTAtMDUtMjAgMDg6NDggIGJ2YXNzY2hlCisKKyAgICogbmV0LXNubXAtY29uZmlnLmluOgorCisgICBTd2FwcGVkIGxpbmsgb3JkZXIgb2YgLWxuZXRzbm1waGVscGVycyAtbG5ldHNubXBtaWJzOiBuZXRzbm1wbWlicworICAgZGVwZW5kcyBvbiBuZXRzbm1waGVscGVycyBhbmQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLgorCisyMDEwLTA1LTIwIDA4OjQyICBidmFzc2NoZQorCisgICAqICBhcHBzL3NubXB0cmFwZF9sb2cuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA1LTE5IDE4OjI2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggc3Rhc2hpbmcKKworMjAxMC0wNS0xOSAxODoyNSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jOgorCisgICBvdXRwdXQgZmlsZW5hbWVzIG9mIGZhaWxlZCB0ZXN0cworCisyMDEwLTA1LTE5IDE4OjI1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICB3aXBlIHRyYWlsaW5nIGNvbW1lbnQgQyBtYXJrZXIgaWYgaXQgZXhpc3RzCisKKzIwMTAtMDUtMTkgMTg6MjUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIHRpdGxlIHRoZSBTTk1QdjMgdGVzdHMKKworMjAxMC0wNS0xOSAxODoyNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHRlc3Rpbmcgb2YgYnVpbHQgdGl0bGVzCisKKzIwMTAtMDUtMTkgMTg6MjQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG9ubHkgcHJpbnQgZmFpbHVyZSBoZWFkZXIgaWYgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZQorCisyMDEwLTA1LTE5IDE4OjI0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfb2xkdWNkOgorCisgICBtYWtlIGRlc2NyaXB0aXZlIHRpdGxlcyB3b3JrIGFnYWluCisKKzIwMTAtMDUtMTkgMTg6MjQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NsaWIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ydW4sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIHJlbmFtZSBmaWxlcyBzbyBwcmVmaXhpbmcgaXMgYmFzZWQgb24gdGhlIHN1aXRlIG5hbWUsIG5vdCBmaWxlCisgICB0eXBlCisKKzIwMTAtMDUtMTkgMTc6NTIgIGJ2YXNzY2hlCisKKyAgICogIHBlcmwvQVNOL01ha2VmaWxlLlBMLCBwZXJsL01ha2VmaWxlLlBMLCBwZXJsL01ha2VmaWxlLnN1YnMucGwsICAgCisgICAgICBwZXJsL09JRC9NYWtlZmlsZS5QTCwgcGVybC9TTk1QL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEw6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogcGVybDogYnVpbGRpbmcgdGhlIFBlcmwgbW9kdWxlcyB3aXRoIHRoZSBDeWd3aW4KKyAgIFBlcmwgcGFja2FnZSBpcyBub3cgcG9zc2libGUuCisgICAoRm9yd2FyZC1wb3J0ZWQgcjE4Njg4IGZyb20gdGhlIFY1LjUgYnJhbmNoLikKKworMjAxMC0wNS0xOSAxNzo1MCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmM6CisKKyAgIEZpeGVkIHlldCBhbm90aGVyIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDUtMTkgMTI6MDUgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYzoKKworICAgRmlyc3QtZHJhZnQgc3VwcG9ydCBmb3IgQUlYIGZpbGVzeXN0ZW0gSEFMIG1vZHVsZSAodW50ZXN0ZWQpCisKKzIwMTAtMDUtMTkgMTE6MjUgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jOgorCisgICBTdXBwb3J0IGZvciBTb2xhcmlzLXN0eWxlICdnZXRtbnRlbnQnIEFQSS4KKworMjAxMC0wNS0xOSAwOTo1NyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oOgorCisgICBTaW1wbGlmeSB0aGUgaGFuZGxpbmcgb2YgdW5rbm93bi91bndhbnRlZCBmaWxlIHN5c3RlbXMuCisKKzIwMTAtMDUtMTkgMDk6MzAgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaDoKKworICAgRml4IG1pc3NpbmcvYnJva2VuIEFQSSBkZWNsYXJhdGlvbnMuCisKKzIwMTAtMDUtMTkgMDg6NDYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBNYWRlIGVycm9yIG1lc3NhZ2VzIG1vcmUgY2xlYXIgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIHdyb25nCisgICBpbnZvY2F0aW9uLgorCisyMDEwLTA1LTE5IDAwOjAxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgYWRkZWQgdGVzdCBmb3IgdXNpbmcgYSBjZXJ0aWZpY2F0ZSBzaWduZWQgYnkgYSBDQSBjZXJ0aWZpY2F0ZQorCisyMDEwLTA1LTE4IDIzOjMxICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgbWFrZSBzdXJlIHdlIGNhbGwgdGhlIHJpZ2h0IFBlcmwKKworMjAxMC0wNS0xOCAyMDozOSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IGluY2x1ZGUgbG9jYWwgcG9ydCBudW1iZXIgaW4gcGFja2V0IGR1bXBzLiBBbgorICAgZXhhbXBsZToKKyAgIAorICAgUmVjZWl2ZWQgMzYgYnl0ZSBwYWNrZXQgZnJvbSBVRFA6CisgICBbMTI3LjAuMC4xXTo1MzkwOS0+WzEyNy4wLjAuMV06MTE2MQorICAgMDAwMDogMzAgMjIgMDIgMDEgMDEgMDQgMDYgNzAgNzUgNjIgNkMgNjkgNjMgQTEgMTUgMDIKKyAgIDAiLi4uLi5wdWJsaWMuLi4KKyAgIDAwMTY6IDA0IDM3IEYyIEQ0IDlCIDAyIDAxIDAwIDAyIDAxIDAwIDMwIDA3IDMwIDA1IDA2CisgICAuNy4uLi4uLi4uLjAuMC4uCisgICAwMDMyOiAwMSAwMSAwNSAwMCAuLi4uCisgICAKKyAgIFJlY2VpdmVkIFNOTVAgcGFja2V0KHMpIGZyb20gVURQOgorICAgWzEyNy4wLjAuMV06NTM5MDktPlsxMjcuMC4wLjFdOjExNjEKKyAgIEdFVE5FWFQgbWVzc2FnZQorICAgLS0gY2NpdHQuMQorICAgCisgICBTZW5kaW5nIDExOCBieXRlcyB0byBVRFA6IFsxMjcuMC4wLjFdOjUzOTA5LT5bMTI3LjAuMC4xXToxMTYxCisgICAwMDAwOiAzMCA3NCAwMiAwMSAwMSAwNCAwNiA3MCA3NSA2MiA2QyA2OSA2MyBBMiA2NyAwMgorICAgMHQuLi4uLnB1YmxpYy5nLgorICAgMDAxNjogMDQgMzcgRjIgRDQgOUIgMDIgMDEgMDAgMDIgMDEgMDAgMzAgNTkgMzAgNTcgMDYKKyAgIC43Li4uLi4uLi4uMFkwVy4KKyAgIDAwMzI6IDA4IDJCIDA2IDAxIDAyIDAxIDAxIDAxIDAwIDA0IDRCIDRDIDY5IDZFIDc1IDc4CisgICAuKy4uLi4uLi4uS0xpbnV4CisgICAwMDQ4OiAyMCA2MSA3MyA3NSA3MyAyMCAzMiAyRSAzNiAyRSAzMyAzMyAyRSAzMiAyRCA3MyBhc3VzCisgICAyLjYuMzMuMi1zCisgICAwMDY0OiA2MyA3MyA3NCAyMCAyMyAzMSAyMCA1MyA0RCA1MCAyMCA1MCA1MiA0NSA0NSA0RCBjc3QgIzEgU01QCisgICBQUkVFTQorICAgMDA4MDogNTAgNTQgMjAgNTMgNjEgNzQgMjAgNDEgNzAgNzIgMjAgMzMgMjAgMzIgMzEgM0EgUFQgU2F0IEFwcgorICAgMyAyMToKKyAgIDAwOTY6IDMxIDMwIDNBIDM1IDM4IDIwIDQzIDQ1IDUzIDU0IDIwIDMyIDMwIDMxIDMwIDIwIDEwOjU4IENFU1QKKyAgIDIwMTAKKyAgIDAxMTI6IDc4IDM4IDM2IDVGIDM2IDM0IHg4Nl82NAorCisyMDEwLTA1LTE4IDE5OjQyICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXBkYXRlIHRsc3RtQWRkclRhYmxlCisgICAtIGRlYWwgd2l0aCBoYXNoIHR5cGUgcHJvcGVybHkgZm9yIGdldC9zZXQgYW5kIHBlcnNpc3RlbmNlCisgICAtIGFkZCBjb3VudCBhbmQgbGFzdCBjaGFuZ2VkIHNjYWxhcnMKKworMjAxMC0wNS0xOCAxOTowOCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmM6CisKKyAgIHVwZGF0ZSB0byBvZmZpY2FsIE9JRCBmcm9tIHVwY29taW5nIHJmYworCisyMDEwLTA1LTE4IDE2OjE2ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVwZGF0ZSB0byBvZmZpY2lhbCBPSURzIGZyb20gdXBjb21pbmcgUkZDOyBhZGQgY291bnQvbGFzdCBjaGFuZ2VkCisgICBzY2FsYXJzCisKKzIwMTAtMDUtMTggMTQ6NTYgIGR0czEyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMjAwMTY1NjogSGFuZGxlIG51bGwtdGVybWluYXRpb24gb2YKKyAgIHN0cmluZyB2YWx1ZXMgcHJvcGVybHkuCisgICBCYXNlZCBvbiB0aGUgcHJpbmNpcGxlcyBvZiB0aGUgcGF0Y2ggZnJvbSBUb21teSBCZWFkbGUuCisKKzIwMTAtMDUtMTggMTQ6MzggIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oLCBhZ2VudC9taWJncm91cC9ob3N0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaDoKKworICAgV29ya2luZyg/KSBIQUwtYmFzZWQgdmVyc2lvbiBvZiBockZTVGFibGUuCisKKzIwMTAtMDUtMTggMTQ6MTIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90b29scy5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDUtMTcgMjE6MDMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg6CisKKyAgIHVzZSBwcm9wZXIgVFNNIHNlY3VyaXR5IGNvZGUgKDQpIG5vdyB0aGF0IGl0J3Mgb2ZmaWNpYWwKKworMjAxMC0wNS0xNyAxODo0MyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYzoKKworICAgYmVnaW5uaW5nIG9mIGEgY29udGFpbmVyIHVuaXQgdGVzdAorCisyMDEwLTA1LTE3IDE4OjQzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXN0aW5nLmg6CisKKyAgIGEgYmFzaWMgQy1jb2RlIGJhc2VkIHRlc3QgcmVwb3J0aW5nIG1lY2hhbmlzbQorCisyMDEwLTA1LTE3IDE4OjQyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYzoKKworICAgYmFzaWMgZGVmYXVsdF9zdG9yZSB0ZXN0cworCisyMDEwLTA1LTE3IDE4OjQyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2xpYjoKKworICAgYSBidWlsZCBzeXN0ZW0gZm9yIGJhc2ljIGxpYm5ldHNubXAgdGVzdHMKKworMjAxMC0wNS0xNyAxODoxNCAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg6CisKKyAgIGZpeCBmaW5nZXJwcmludCBiaW4vaGV4IGNvbnZlcnNpb247IGFkZC9yZW1vdmUgY2VydCBzZWMgbWFwcyB2aWEKKyAgIG1pYiBub3cgd29ya3MKKworMjAxMC0wNS0xNyAxODoxMyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzoKKworICAgbmV3IGZ1bmN0aW9uIG5ldHNubXBfYmluYXJ5X3RvX2hleAorCisyMDEwLTA1LTE3IDE4OjEzICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgZnByaW50ZihzdGRlcnIgLT4gREVCVUdNU0dUTCgoCisKKzIwMTAtMDUtMTcgMTg6MTIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1vdmUgY2hlY2sgZm9yIGhhc2ggdHlwZQorCisyMDEwLTA1LTE3IDE2OjM0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIG1ha2UgUlVOVEVTVFMgd29yayBvdXRzaWRlIHRoZSBzb3VyY2VkaXIKKworMjAxMC0wNS0xNyAxNTozNyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBtYWRlIGEgbGltaXRlZCBydW4gdGVzdCBwb3NzaWJsZSBhZ2FpbiB3aXRob3V0IHBlcmwKKworMjAxMC0wNS0xNyAxNTozMiAgZHRzMTIKKworICAgKiAgd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oLCB3aW4zMi9taWJfbW9kdWxlX2luaXRzLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcDoKKworICAgVXNlIG5ld2VyIERpc01hbiBFdmVudCBNSUIgY29kZSBmb3IgTVNWQy1iYXNlZCBidWlsZHMKKyAgIChpbiBsaW5lIHdpdGggYWxsIGNvbmZpZ3VyZS1iYXNlZCBidWlsZHMpCisKKzIwMTAtMDUtMTcgMTU6MjMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmUgdGhlIHJldHVybiBvdXRzaWRlIHRoZSBpZiBzdGF0ZW1lbnQKKworMjAxMC0wNS0xNyAxNToxOCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaDoKKworICAgUHJvdmlkZSBtaXNzaW5nIHB1YmxpYyBpbnRlcmZhY2UgdG8gSEFMLWJhc2VkIGZpbGVzdG9yZSBtb2R1bGUuCisKKzIwMTAtMDUtMTcgMTA6NDEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODc1NCAocmV2ZXJ0IHIxODczOCk6IHIxODc1NCBvbmx5IHBhcnRpYWxseQorICAgcmV2ZXJ0ZWQgcjE4NzM4CisgICBhbmQgaGVuY2UgYnJva2UgdGhlIFdpbjMyLWJ1aWxkLiBGaW5pc2hlZCByZXZlcnNhbCBvZiByMTg3MzggYnkKKyAgIHJlc3RvcmluZworICAgd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oLgorCisyMDEwLTA1LTE2IDE4OjE3ICBidmFzc2NoZQorCisgICAqIGx0bWFpbi5zaDoKKworICAgRm9sbG93LXVwIGZvciByMTg3MjY6IG9ubHkgcGFzcyAtZnN0YWNrLXByb3RlY3RvciogZmxhZ3MgdG8gdGhlCisgICBsaW5rZXIgaW5zdGVhZCBvZiBhbGwgLWYqIGZsYWdzIHN1Y2ggdGhhdCBpdCBiZWNvbWVzIGxlc3MgbGlrZWx5CisgICB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGNhdXNlcyB0cm91YmxlIHdpdGggbm9uLUdOVSB0b29sY2hhaW5zLgorCisyMDEwLTA1LTE2IDE4OjE0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9vbGR1Y2Q6CisKKyAgIE1hZGUgc2hlbGwgY29kZSBmb3IgY29udmVydGluZyBhIHJlbGF0aXZlIHBhdGggdG8gYW4gYWJzb2x1dGUKKyAgIHBhdGggbW9yZQorICAgcm9idXN0IGFuZCBjb252ZXJ0ZWQgIiR7Li4uIy4uLn0iIGNvbnN0cnVjdCBpbnRvIGVjaG8gKyBjdXQuCisKKzIwMTAtMDUtMTYgMTg6MTIgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBNb3JlIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFIHRvCisgICBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUgc3Vic3RpdHV0aW9ucywgbmVjZXNzYXJ5IHRvIG1ha2UKKyAgIHRlc3QgMDU5IGFuZCAwNjUgcGFzcy4KKworMjAxMC0wNS0xNiAxNzozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBmaXggdGVzdHMgZm9yIGNoZWNraW5nIHNodXRkb3duIG9mIGFwcGxpY2F0aW9ucyB0byBub3QgcmVwb3J0CisgICBmYWxzZSBuZWdhdGl2ZXMKKworMjAxMC0wNS0xNiAxMjoxNSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfb2xkdWNkOgorCisgICBNYWRlIHRlc3QgVDA1OSBwYXNzIGFnYWluLiBUaGlzIHRlc3Qgd2FzIHJlY2VudGx5IGJyb2tlbiBieQorICAgcGFzc2luZyBhcmd1bWVudHMgdG8gaXQgd2l0aCBhYnNvbHV0ZSBwYXRocyBpbnN0ZWFkIG9mIHJlbGF0aXZlCisgICBwYXRocy4KKworMjAxMC0wNS0xNiAxMjoxNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9vbGR1Y2Q6CisKKyAgIEFkZGVkICdTS0lQSUZOT1QgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFJy4KKworMjAxMC0wNS0xNiAxMTo0MiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBGaXhlZCBzZXZlcmFsIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDUtMTYgMTE6NDEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhcHBzL3NzaHRvc25tcC5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGluIG9sZCBjb2RlLgorCisyMDEwLTA1LTE2IDA5OjU5ICBidmFzc2NoZQogCiAgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgogCi0gICBDSEFOR0VTOiB3aW5FeHRETEw6IGNvbnZlcnQgYXNzZXJ0KCkgc3RhdGVtZW50cyBpbnRvCi0gICBuZXRzbm1wX2Fzc2VydCgpIHN0YXRlbWVudHMuCisgICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBkb24ndCB0cmlnZ2VyIGEgbmV0c25tcF9hc3NlcnQoKSB3aGVuCisgICBubyBleHRlbnNpb24gRExMcyBoYXZlIGJlZW4gbG9hZGVkLgogCi0yMDEwLTA1LTIzIDIxOjA3ICBkdHMxMgorMjAxMC0wNS0xNSAxNzozMSAgdGFuZGVycwogCi0gICAqIENoYW5nZUxvZzoKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBzdG9wLWdhcCBmaXggdG8gdW5icmVhayAibWFrZSB0ZXN0IiBmb3IgdGhlIG5pZ2h0bHkgYnVpbGRzCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNoYW5nZXM6IFY1LjQuMiAtPiBWNS40LjMKKzIwMTAtMDUtMTUgMTA6NTkgIGJ2YXNzY2hlCiAKLTIwMTAtMDUtMjMgMjA6NDIgIGR0czEyCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICBSZXZlcnRlZCByMTg3MjcgYmVjYXVzZSBpdCBjYXVzZWQgYnVpbGQgZXJyb3JzIG9uIFNvbGFyaXMsIEFJWAorICAgYW5kIEhQLVVYLgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorMjAxMC0wNS0xNSAwMDo0MiAgaGFyZGFrZXIKIAotMjAxMC0wNS0yMyAyMDozOSAgZHRzMTIKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICB3aW4zMi9idWlsZC5wbDoKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICByZXZlcnQgcjE4NzM4IHNpbmNlIG5ldyB0cmFuc3BvcnQgcmVxdWlyZSBkeW5hbWljbHkgYnVpbHQgaGVhZGVyCisgICBmaWxlcwogCi0gICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKzIwMTAtMDUtMTUgMDA6NDAgIGhhcmRha2VyCiAKLTIwMTAtMDUtMTQgMTI6NDYgIGR0czEyCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CiAKLSAgICogQ0hBTkdFUywgTkVXUzoKKyAgIGxvZyBlbnYgdmFyaWFibGVzIHVzZWQgdG8gdGhlIGludm9rZWQgZmlsZQogCi0gICB2ZXJzaW9uIHVwZGF0ZQorMjAxMC0wNS0xNCAyMToyOSAgaGFyZGFrZXIKIAotMjAxMC0wNS0xNCAxMjo0MSAgZHRzMTIKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgogCi0gICAqIENoYW5nZUxvZzoKKyAgIGZpeCBzY3JpcHQgc28gaXQgY2FuIGJlIGludm9rZWQgb3V0c2lkZSB0aGUgdGVzdCBlbnZpcm9ubWVudAorICAgYWdhaW4KIAotICAgdmVyc2lvbiB1cGRhdGUKKzIwMTAtMDUtMTQgMjE6MjggIGhhcmRha2VyCiAKLTIwMTAtMDUtMTQgMTI6MjggIGR0czEyCisgICAqIG1pYnMvU05NUC1UTFMtVE0tTUlCLnR4dDoKIAotICAgKiBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKyAgIGFkZGVkIHRoZSBTTk1QLVRMUy1UTS1NSUIgd2l0aCBmaW5hbCBJQU5BIGFzc2lnbm1lbnQgc2xvdHMKIAotICAgbWFrZSBkZXBlbmQKKzIwMTAtMDUtMTQgMjE6MjcgIGhhcmRha2VyCiAKLTIwMTAtMDUtMTQgMTI6MTkgIGR0czEyCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgdXNlIGZpbmFsIElBTkEgYXNzaWduZWQgVFNNIHByZWZpeGVzCiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisyMDEwLTA1LTE0IDIxOjI2ICBoYXJkYWtlcgogCi0yMDEwLTA1LTE0IDEyOjEwICBkdHMxMgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oOgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICB1c2UgZmluYWwgSUFOQSBhc3NpZ25lZCBEb21haW4gbnVtYmVycwogCi0gICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKzIwMTAtMDUtMTQgMjE6MjUgIGhhcmRha2VyCiAKLTIwMTAtMDUtMTEgMTc6MjYgIGJ2YXNzY2hlCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHNldCBkZWZhdWx0IHZlcnNpb24gYW5kIHNlY2xldmVsIGlmIHRscy9kdGxzCisKKzIwMTAtMDUtMTQgMTU6MjUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjaGVjayByYyBmcm9tIHNlY25hbWUgbWFwcGluZzsgY2xhcmlmeSBjb21tZW50CisKKzIwMTAtMDUtMTQgMTU6MjIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGRvbid0IHVzZSB1bnNvcnRlZCBjb250YWluZXI7IGRvbid0IGZyZWUgY2FsbGVyJ3MgY29udGFpbmVyCisKKzIwMTAtMDUtMTQgMTU6MjIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBhZGQgbGluZWFyX3NlYXJjaCBmb3IgdW5zb3J0ZWQgY29udGFpbmVycworCisyMDEwLTA1LTE0IDExOjU2ICBidmFzc2NoZQorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgd2luMzIvYnVpbGQucGwsIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaDoKKworICAgSW1wcm92ZWQgcG9ydGFiaWxpdHkgYnkgcmVtb3ZpbmcgdGhlIGdlbmVyYXRlZCBmaWxlCisgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaC4KKyAgIENvbW1lbnRlZCBvdXQgdGhlIGNvZGUgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIGdlbmVyYXRpbmcKKyAgIHRoaXMgaGVhZGVyIGZpbGUuCisgICBBZGRlZCBjb25maWd1cmUtdGltZSBjb2RlIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjb25zdHJ1Y3RvcnMKKyAgIGZvciBhbGwgY29uZmlndXJlZAorICAgdHJhbnNwb3J0cyBhcmUgaW52b2tlZCBmcm9tIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYy4KKworMjAxMC0wNS0xNCAxMTowMCAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIERvY3VtZW50YXRpb246IHVwZGF0ZWQgQ3lnd2luIGJ1aWxkIGluc3RydWN0aW9ucy4KKworMjAxMC0wNS0xNCAwOToxNSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfbnVsbC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsICAKKyAgICAgICBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNS0xNCAwODo1MCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBBZGRlZCAtbm8tdW5kZWZpbmVkIGZsYWcgdG8gbGlicmFyeSBsaW5rIGNvbW1hbmRzIHN1Y2ggdGhhdAorICAgbGlidG9vbCBjYW4gYnVpbGQgRExMcyBvbiBXaW4zMi4KKyAgIE5vdGU6IGJ1aWxkaW5nIERMTHMgb24gV2luMzIgZG9lcyBub3QgeWV0IHdvcmsgYmVjYXVzZSBvZiB0aGUKKyAgIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgorICAgbGlibmV0c25tcGhlbHBlcnMgYW5kIGxpYm5ldHNubXBhZ2VudAorICAgKHNlZSBhbHNvCisgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9MaWJyYXJ5X2xheWVyaW5nKS4KKworMjAxMC0wNS0xNCAwODo0MiAgYnZhc3NjaGUKKworICAgKiBsdG1haW4uc2g6CisKKyAgIGxpYnRvb2wgYnVnIGZpeDogYWxzbyBwYXNzIGZsYWdzIHN0YXJ0aW5nIHdpdGggLWYgdG8gdGhlIGxpbmtlcgorICAgc2luY2UgdGhlc2UgY2FuIGFmZmVjdCBsaW5raW5nLiBUaGUgZmxhZyAtZnN0YWNrLXByb3RlY3RvciBlLmcuCisgICB0cmlnZ2VycyBpbmNsdXNpb24gb2YgbGlic3NwLgorCisyMDEwLTA1LTE0IDA4OjQwICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IGFib3J0IGlmIHRoZSBmaWxlIHByb2dyYW0gY291bGQgbm90IGJlIGZvdW5kLAorICAgc2luY2UgdGhpcyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBvcGVyYXRpb24gb2YgbGlidG9vbC4KKyAgIENIQU5HRVM6IEN5Z3dpbjogbmVpdGhlciBjb21waWxlIG5vciBsaW5rIHdpbnBpcGUuYy4KKworMjAxMC0wNS0xMyAwODo1OCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJhbiBhdXRvcmVjb25mLgorCisyMDEwLTA1LTEyIDIwOjE2ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENIQU5HRVM6IExpbnV4OiBidWlsZHMgYWdhaW4gd2l0aCBlbWJlZGRlZCBQZXJsIGRpc2FibGVkIChidWcKKyAgIDI5ODU5MTUpLgorCisyMDEwLTA1LTEyIDE5OjQ3ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuYywgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3A6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4Njg0OiB1bi1icmVhayB0aGUgV2luMzIgTVNWQyBidWlsZC4KKworMjAxMC0wNS0xMiAxOTo0MyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIFdpbjMyOiBmaXhlZCBhIHR5cG8gYW5kIG1hZGUgaW5kZW50YXRpb24gY29uc2lzdGVudC4KKworMjAxMC0wNS0xMiAxOToxMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgY29uc3RydWN0IHRlbXAgYnVpbGQgZmlsZXMgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkKKworMjAxMC0wNS0xMiAxOToxMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHJlY2VudGx5IGJyb2tlbiBvbGQgcGVybCBmdW5jdGlvbmFsaXR5CisKKzIwMTAtMDUtMTIgMTg6MDEgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYWRkZWQgYSAtLXNob3J0IG9wdGlvbiB0byBzaG9ydGVuIHRoZSBzaG93IG91dHB1dCB0byBtaW5pbWFsaXN0aWMKKworMjAxMC0wNS0xMiAxNDoxNCAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gVENQLU1JQi4KKworMjAxMC0wNS0xMiAxMzowMiAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIG1lbW9yeSBsZWFrIHdoZW4gcmVhZGluZyBzZW5zb3JzIGZvcgorICAgTE0tU0VOU09SUy1NSUIuCisKKzIwMTAtMDUtMTIgMTI6NTcgIGR0czEyCiAKICAgICogcGVybC9hZ2VudC9hZ2VudC54czoKIAotICAgQnVpbGRzIGFnYWluIHdpdGggdGhlIE1pY3Jvc29mdCBWaXN1YWwgQyBjb21waWxlcnMsIHdoaWNoIGRvIG5vdAotICAgcmVjb2duaXplIHRoZSBDOTkgVUxMIHN1ZmZpeC4KKyAgIFJldmVydCByZXZpc2lvbiAxODY4OQorICAgTGF0ZXN0IFdpbjMyIGJ1aWxkcyBpbmNsdWRlIHN1cHBvcnQgZm9yIHN0cnRvdWxsLgorCisyMDEwLTA1LTEyIDEyOjA1ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IGFkZGVkIGRldGVjdGlvbiBvZiBsbV9zZW5zb3JzIHZlcnNpb24uCisgICBJIGFtIG5vdCBBdXRvY29uZiBndXJ1LCBzbyBJIGhvcGUgSSBnb3QgaXQgcmlnaHQuIFRoZSBnb2FsIGlzIHRvCisgICBkZWZpbmUgTkVUU05NUF9VU0VfU0VOU09SU19WMyAqYmVmb3JlKiBjb25maWdfbW9kdWxlc19hZ2VudAorICAgcHJvY2Vzc2VzIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaC4KKworMjAxMC0wNS0xMiAwNzowMyAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIG1pc3NpbmcgZGVwZW5kZW5jaWVzIGJldHdlZW4gdHJhbnNwb3J0cy4KKworMjAxMC0wNS0xMiAwMzowOCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHRpdGxlIGdlbmVyYXRpb24gYWZ0ZXIgY2hhbmdlIHRvIHdoYXQgc3JjZGlyIG1lYW50CisKKzIwMTAtMDUtMTIgMDI6MzAgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgdW5kbyBsYXN0IGNoYW5nZSB3aGljaCB0dXJuZWQgb3V0IHRvIG9ubHkgY2F1c2UgZXJyb3JzIGlmIHlvdSBoYWQKKyAgIGEgb2xkIC5jb25mIGZpbGUgYXJvdW5kCisKKzIwMTAtMDUtMTIgMDI6MTMgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IHYzX2NhIGNyZWF0aW9uIGV4dGVuc2lvbiBuYW1lCisKKzIwMTAtMDUtMTIgMDI6MDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGtlZXAgZm9ybWF0IHZlcnNpb24gIyBpbiBjZXJ0IGluZGV4ZXM7IGRvbid0IHN0b3JlIGhhc2ggdHlwZQorICAgc3RyaW5nIGluIGluZGV4OworCisyMDEwLTA1LTEyIDAyOjA1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBmaXggaW52ZXJ0ZWQgY29udmVyc2lvbiBjYWxsOyBsZXNzIHZlcmJvc2UgZGVmYXVsdCBkZWJ1ZworCisyMDEwLTA1LTEyIDAyOjA1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBmaXggcGFyc2luZyBvZiAtVCBuYW1lL3ZhbHVlIHBhaXJzCisKKzIwMTAtMDUtMTEgMjM6MzMgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgYnVnIGZpeGluZyBhbmQgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciAibWFrZSB0ZXN0IiB3aXRoCisgICBUZXN0OjpIYXJuZXNzCisgICAoc3RpbGwgZG9lc24ndCB3b3JrIGZvciBtZSwgdGhvdWdoKQorCisyMDEwLTA1LTExIDIyOjM0ICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIERvIE5PVCBoYXJkY29kZSAvdXNyL2Jpbi9wZXJsIGFzIHRoZSBQZXJsIHBhdGgKKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHN0YXNoIGZpbGUgaGFuZGxpbmcKKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbG9uZyBvcHRpb25zIHN1Y2sgOy0pLiBwcmVmZXIgZG91YmxlIGRhc2hlcyBmb3IgbG9uZyBvcHRpb25zIHRvCisgICBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgTmV0LVNOTVAgY29kZSBiYXNlCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGFkZGVkIGFiaWxpdHkgdG8gcnVuIG9ubHkgdGhlIGZhaWxlZCB0ZXN0cyBmcm9tIHRoZSBsYXN0IHJ1bgorCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBkb24ndCBmb3JjZSBjb2xvcgorCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBjbGVhbnVwIG9mIG9sZGVyCisKKzIwMTAtMDUtMTEgMjA6MTUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIE1pbmltYWxseSBzdXBwb3J0IHRoZSBvbGRlciBUZXN0OjpIYXJuZXNzIHBlcmwgbW9kdWxlIGZvciBydW5uaW5nCisgICB0aGUgb2xkZXIgdGVzdHMgYXQgbGVhc3QKKworMjAxMC0wNS0xMSAyMDoxNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNldCBhIGRlZmF1bHQgc2VjdXJpdHlOYW1lIGFuZCBzZWN1cml0eU1vZGVsIGlmIFRMUyBvciBEVExTIGlzIGluCisgICB1c2Ugb24gdGhlIGNsaWVudCBzaWRlCisKKzIwMTAtMDUtMTEgMjA6MTUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIGFsbG93IHNlY3VyaXR5IG1vZGVscyB0byBwZXJmb3JtIG1vcmUgb2YgdGhlIHNlc3Npb24gc2V0dXA7IG1vdmVkCisgICBtb3JlIFVTTSBzcGVjaWZpYyBzZXR1cCBpbnRvIGl0J3Mgc2V0dXAgcm91dGluZQorCisyMDEwLTA1LTExIDE4OjAyICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHBhcmFtIHRvIGxvb2t1cCBwZWVyIGNlcnQKKworMjAxMC0wNS0xMSAxNjoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBhbGxvdyAnLScgaW4gZnFkbjsgYWRkIGRlYnVnIG91dHB1dCBmb3IgaG9zdCBzcGVjaWZpYyBjb25maWcKIAogMjAxMC0wNS0xMSAxNTo0NiAgZHRzMTIKIAotICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgogCiAgICBFbnN1cmUgJ25ldHNubXBfcmVhZF9tb2R1bGUnIGlzIGF2YWlsYWJsZSBmb3IgcGVybCBidWlsZC4KIApAQCAtMjMxMiwxMiArNDI0ODUsMjE3IEBACiAKICAgIEZpeCBwZXJsIGJ1aWxkIHVuZGVyIFdpbmRvd3MgKHN0cnRvdWxsIG5vdCBhdmFpbGFibGUpCiAKLTIwMTAtMDUtMDkgMTY6MzQgIGJ2YXNzY2hlCisyMDEwLTA1LTEwIDA3OjA3ICBtYWdmcgogCi0gICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2N5Z3dpbi5oOgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmM6CiAKLSAgIENIQU5HRVM6IEN5Z3dpbjogQlVHOiAyOTk3NDkyOiBieXRlIG9yZGVyIG9mIHVkcExvY2FsUG9ydCBpcyBub3cgY29ycmVjdAotICAgKEJhY2twb3J0ZWQgcjE4MDc0IGZyb20gdHJ1bmsuKQorICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIG1pc3Npbmcgc3ltYm9sIG5ldHNubXBfc25tcFNTSERvbWFpbl9sZW4sCisgICBtYWtlIG5ldHNubXBfc25tcFNTSERvbWFpbiBjb25zdC4KKworMjAxMC0wNS0wOSAyMjowMyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2Q6CisKKyAgIERvIG5vdCByZXF1aXJlIHF1b3RlcyBhcm91bmQgdGhlIENQVSBzdHJpbmcgYXMgdGhhdCBkZXBlbmRzIG9uCisgICBob3cgdGhlIGFnZW50IGlzIGNvbmZpZ3VyZWQuCisKKzIwMTAtMDUtMDkgMjE6NDMgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogRXh0cmFjdCB0aGUgRXhpdCBhbmQgcmVzdGFydCogc3Vicm91dGluZXMgZnJvbQorICAgdXRpbF9mdW5jIGluIG9yZGVyIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgbGVzcyBjb2RlIGZvciB0aGUKKyAgIG1pbmltYWwgY2FzZS4KKworMjAxMC0wNS0wOSAxNjo0NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZzogbWFkZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uCisgICBnZXRfZXhlY19vdXRwdXQoKSByZXR1cm5zIGEgdmFsdWUgd2hlbiB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbAorICAgVVNJTkdfVUNEX1NOTVBfRVhURU5TSUJMRV9NT0RVTEUgaGFzIG5vdCBiZWVuIGRlZmluZWQuCisKKzIwMTAtMDUtMDkgMTY6NDUgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogYnVpbGRzIG5vdyBhbHNvIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUKKyAgIGxvY2F0ZWQgb24gYSBTYW1iYSBmaWxlc3lzdGVtIGluc3RlYWQgb2YgYSBsb2NhbCBmaWxlc3lzdGVtLgorCisyMDEwLTA1LTA5IDEzOjA1ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6CisKKyAgIENvcnJlY3QgdGhlIGlmIHRoYXQgdHJpZXMgdG8gZmlndXJlIG91dCBpZiBhIHN1ZmZpY2llbnRseSBuZXcgZ2NjCisgICBpcyBpbiB1c2UuCisKKzIwMTAtMDUtMDkgMTI6NTAgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgQ2hlY2sgZm9yIHRoZSBuZWVkZWQgbW9kdWxlIGFuZCBub3Qgc29tZSBvdGhlciBvbmUuCisgICBMb2cgdGhlIGNvcnJlY3QgbWlzc2luZyBzeW1ib2wuCisKKzIwMTAtMDUtMDkgMDk6MjEgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogdXRpbGl0aWVzL2V4ZWN1dGUgZG8gbm90IG5lZWQgYW55dGhpbmcgZnJvbQorICAgdXRpbF9mdW5jcywgc28gc3RvcCBkZXBlbmRpbmcgb24gaXQuCisKKzIwMTAtMDUtMDkgMDk6MTIgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYzoKKworICAgTkVXUzogc25tcGQ6IFJlbW92ZWQgdGhlIHVudXNlZCBmdW5jdGlvbiB4eF90b2tlbml6ZV9leGVjX2NvbW1hbmQKKyAgIGZyb20gdXRpbGl0aWVzL2V4ZWN1dGUuCisKKzIwMTAtMDUtMDkgMDk6MDEgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFJlcGxhY2UgdGhlIGRlYnVnZ2luZyBmdW5jdGlvbnMgd2l0aCBkdW1taWVzCisgICB3aGVuIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKworMjAxMC0wNS0wOSAwODowMiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfb2xkdWNkOgorCisgICBDaGVjayB0aGF0IHRoZSBVRFAgdHJhbnNwb3J0IGlzIGVuYWJsZWQKKworMjAxMC0wNS0wOSAwODowMSAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdHJhbnNwb3J0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZDoKKworICAgRmFjdG9yIG91dCBjaGVjayBmb3IgbWliSUkvc3lzdGVtX21pYgorCisyMDEwLTA1LTA5IDA3OjU5ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICBBZGQgbWlzc2luZyBpbmNsdWRlcworCisyMDEwLTA1LTA4IDIzOjE2ICBtYWdmcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBBZGRpdGlvbmFsbHkgZml4IG1ha2UgdGVzdCBmb3IgdGhlIHVuY29tbW9uIGNhc2Ugd2hlcmUgYnVpbGRkaXIKKyAgID09IHNyY2RpcgorCisyMDEwLTA1LTA4IDIyOjU1ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogTWFrZSBpdCBwb3NzaWJsZSB0byBydW4gdGhlIHRlc3Qgc3VpdGUgZnJvbQorICAgYW55d2hlcmUuCisgICBDaGFuZ2UgdGhlIC1EIG9wdGlvbiB0byBleHBlY3QgdGhlIHBhdGggb2YgdGhlIHRvcCBzb3VyY2UKKyAgIGRpcmVjdG9yeS4KKyAgIEFkZCBhbiAtc3JjZGlyIG9wdGlvbiB0aGF0IGlzIGFuIGFsaWFzIGZvciAtRC4KKyAgIEFkZCBhbiAtYnVpbGRkaXIgb3B0aW9uIHRvIGRlc2lnbmF0ZSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSB0ZXN0CisgICBvYmplY3QgaXMuCisgICBQdXQgc3JjZGlyIGFuZCBidWlsZGRpciBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSB0ZXN0IHNjcmlwdHMKKyAgIEZhY3RvciBvdXQgdGhlIGdyZXAgcGFydCBvZiBTS0lQSUYgYW5kIFNLSVBJRk5PVCB0byBJU0RFRklORUQKKyAgIFVzZSBtb3JlIHJlYWRhYmxlIGtleXMgaW4gdGhlIG9wdHMgaGFzaCBpbiBSVU5GVUxMVEVTVFMKKyAgIEFkanVzdCBldmVyeXRoaW5nIHRvIHVzZSBzcmNkaXIgYW5kIGJ1aWxkZGlyCisKKzIwMTAtMDUtMDggMjI6NDIgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYzoKKworICAgVXNlIGNvcnJlY3QgYXJndW1lbnQgdHlwZXMKKworMjAxMC0wNS0wOCAyMjowNyAgbWFnZnIKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgQ29uc29saWRhdGUgdGhlIHRlc3QgYW5kIHRlc3QtbWlicyB0YXJnZXRzLgorICAgRXhwb3NlIHRoZSB0ZXN0YWxsIHRhcmdldCBpbiB0aGUgdG9wIG1ha2VmaWxlLgorCisyMDEwLTA1LTA4IDIyOjA1ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgRG8gbm90IGFib3J0IHdoZW4gc3RyIGlzIE5VTEwgYXMgdGhhdCBpcyBhIHBlcmZlY3RseSB2YWxpZCBpbnB1dC4KKworMjAxMC0wNS0wOCAyMjowMyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmM6CisKKyAgIFVzZSBjb3JyZWN0IGFyZ3VtZW50IHR5cGVzCisKKzIwMTAtMDUtMDggMjI6MDIgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICBBZGQgbWlzc2luZyBuZXdsaW5lCisKKzIwMTAtMDUtMDcgMjE6MTEgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZToKKworICAgdXBkYXRlIGZvciBuZXcgY29uZmlndXJlLmFjCisKKzIwMTAtMDUtMDcgMTk6MjEgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgZml4IGhhbmRsaW5nIG9mIGNlcnQgYWxnb3JpdGhtIGluIGZpbmdlcnByaW50czsgY29udmVydCBpbi9vdXQKKyAgIGZpbmdlcnBpbnRzCisgICBmcm9tL3RvIGhleAorCisyMDEwLTA1LTA3IDE5OjIxICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZG9udCBzcGVjaWZ5IGhhc2ggdHlwZSBmb3IgZmluZ2VycHJpbnQKKworMjAxMC0wNS0wNyAxOToyMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGhhbmRsZSBmaW5nZXJwcmludCB0eXBlczsgZHJvcCBzYW4gZmllbGRzIGZyb20gY2VydCBzdHJ1Y3Q7CisgICBjb25zaWRlciBkaXJlY3RvcnkKKyAgIHdoZW4gcGFydG5lcmluZyBrZXlzL2NlcnRzCisKKzIwMTAtMDUtMDcgMTk6MjAgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZS5hYzoKKworICAgbW92ZSBkZWZhdWx0IHByb21wdHMgZWFybGllcgorCisyMDEwLTA1LTA2IDE1OjQwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBiZXR0ZXIgU0FOIGV4dHJhY3Rpb247IHR3ZWFrIGR1Ymd1cyBtZXNzYWdlczsgcXVpZXQgY29tcGlsZXIKKyAgIHdhcm5pbmdzCisKKzIwMTAtMDUtMDYgMTU6MzkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHJlZHVjZSBjZXJ0IGRlYnVnIG91dHB1dDsgZGVidWcgaW5zdGVhZCBvZiBsb2dfaW5mbyBpbiBkdW1wcwogCiAyMDEwLTA1LTA2IDE0OjQ5ICBkdHMxMgogCkBAIC0yMzI2LDc2ICs0MjcwNCw2NzUgQEAKICAgIERvbid0IGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgPHN0cmluZy5oPgogICAgKGJyaW5nIGludG8gbGluZSB3aXRoIGFsbCBvdGhlciBvY2N1cmFuY2VzKQogCi0yMDEwLTA1LTA2IDE0OjQ0ICBkdHMxMgorMjAxMC0wNS0wNiAxNDo0MSAgZHRzMTIKIAotICAgKiB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyc2RrLmRzdzoKLQotICAgQWRkIHByb2plY3QgZGVwZW5kZW5jaWVzIGZvciBNU1ZDIGJ1aWxkcy4KLQotMjAxMC0wNS0wNiAwNjozMyAgYnZhc3NjaGUKLQotICAgKiAgbmV0LXNubXAtY29uZmlnLmluLCB0ZXN0aW5nL1RFU1RDT05GLnNoLCAgIAotICAgICAgdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uLCAgIAotICAgICAgdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybDoKLQotICAgQ0hBTkdFUzogQ3lnd2luOiBEZXRlY3QgZnJlZSBVRFAgcG9ydHMgY29ycmVjdGx5IGZvciB1c2UgaW4gdGVzdCBpbmZyYXN0cnVjdHVyZS4KLSAgIChCYWNrcG9ydGVkIHRydW5rIHIxODA3MyBhbmQgcjE4MDgwKS4KLQotMjAxMC0wNC0zMCAxOToxMCAgYnZhc3NjaGUKLQotICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAotICAgICAgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIHNubXBsaWIvY2FsbGJhY2suYzoKKyAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIHNubXBsaWIvY2FsbGJhY2suYzoKIAogICAgQ0hBTkdFUzogV2luZG93czogRml4IGJ1aWxkIHVuZGVyIE1pbkdXCisgICBiYWNrL2ZvcndhcmQgcG9ydCBvZiByZXZpc2lvbiAxODYzMQogCi0yMDEwLTA0LTMwIDE4OjQ0ICBidmFzc2NoZQorMjAxMC0wNS0wNSAxNzo0MyAgcnN0b3J5CiAKLSAgICogY29uZmlndXJlOgorICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgogCi0gICBTaG91bGQgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHIxODYyNy4KKyAgIGZpeCB0eXBlIGluIGxvZyBtc2cKIAotMjAxMC0wNC0zMCAxODoyNyAgYnZhc3NjaGUKKzIwMTAtMDUtMDUgMTc6NDMgIHJzdG9yeQogCi0gICAqIGNvbmZpZ3VyZS5pbjoKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKIAotICAgbWFkZSBzdXJlIHRoYXQgY3Jvc3MtY29tcGlsaW5nIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgZW5kaWFubmVzcwotICAgZG9lcyBub3QgdHJpZ2dlciBhIHN5bnRheCBlcnJvciBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyAgIHJlbW92ZSBpbXBvcnQgZm9yIHVudXNlZCBmdW5jdGlvbgogCi0yMDEwLTA0LTI4IDEwOjQ4ICBidmFzc2NoZQorMjAxMC0wNS0wNCAwNzoxMiAgbWFnZnIKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKIAotICAgbGVmdCBvdXQgaW5ldF9udG9wKCkgYW5kIGluZXRfcHRvbigpIGZyb20gbGlibmV0c25tcCBzaW5jZSB0aGVzZQotICAgZnVuY3Rpb25zIGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gQ3lnd2lucyBDIGxpYnJhcnkuCisgICBOZWdhdGUgcmVhc29uIGdpdmVuIGZyb20gU0tJUElGCiAKLTIwMTAtMDQtMjggMTA6MjYgIGJ2YXNzY2hlCisyMDEwLTA1LTAzIDIyOjM4ICByc3RvcnkKIAotICAgKiBSRUFETUUud2luMzI6CisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CiAKLSAgIEZpeGVkIGEgZG9jdW1lbnRhdGlvbiBidWcgd2l0aCByZWdhcmQgdG8gdGhlIEN5Z3dpbiBidWlsZDoKLSAgIGxpbmtpbmcgd2l0aCB3czJfMzIgaXMgb25seSBuZWNlc3NhcnkgZm9yIHJlYWxseSBhbmNpZW50IEN5Z3dpbiB2ZXJzaW9ucy4KKyAgIGZpeCBsZW4gaW4gZW1haWwgY21wOyBtb3JlIGV4dHJhY3QgZGVidWdnaW5nCiAKLTIwMTAtMDQtMjggMDc6MjkgIGJ2YXNzY2hlCisyMDEwLTA1LTAzIDIyOjM4ICByc3RvcnkKIAotICAgKiAgc25tcGxpYi9pbmV0X250b3AuYywgc25tcGxpYi9pbmV0X3B0b24uYywgICAKLSAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgogCi0gICBDSEFOR0VTOiBDeWd3aW46IGJ1aWxkcyBub3cgd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZC4KKyAgIGNvcHkgb2NlcnQgdG8gYWRkaW9uYWwgbWFwcwogCi0yMDEwLTA0LTI3IDE2OjU1ICBidmFzc2NoZQorMjAxMC0wNS0wMyAxNDoyMCAgbWFyegogCi0gICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKLSAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgogCi0gICBDSEFOR0VTOiBXaW4zMjogYnVpbGRzIGFnYWluIHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQuCisgICByZW1vdmUgZGVwZW5kZW5jeSBvbiBwZXJsIG1vZHVsZSBub3QgcHJlc2VudCBpbiBDZW50T1MKIAotMjAxMC0wNC0yNyAxNTo0MiAgZHRzMTIKKzIwMTAtMDUtMDMgMDM6NDkgIHJzdG9yeQogCi0gICAqICB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oLCAgIAotICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW46CisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CiAKLSAgIFJlLWluc3RhdGUgTm90aWZpY2F0aW9uLUxvZyBNSUIgc3VwcG9ydCB3aGVuIGJ1aWxkaW5nIHdpdGgKLSAgIFdpbmRvd3MgUGxhdGZvcm0gU0RLLgorICAgZG9uJ3QgYWNjZXNzIHN0cnVjdCBpbnRlcm5hbHMgZGlyZWN0bHkKKworMjAxMC0wNS0wMyAwMzo0OCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBmaXggY29tcGlsaW5nIHdpdGgtb3V0LW1pYm1vZHVsZXM9dXRpbGl0aWVzL2V4ZWN1dGUKKworMjAxMC0wNS0wMSAxOTowOCAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2Q6CisKKyAgIENvcnJlY3QgdGhlIHNvdWdodCBzdHJpbmcgdG8gbWFrZSB0aGUgdGVzdCBwYXNzIHdoZW4gb2suCisKKzIwMTAtMDUtMDEgMTc6MTUgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBtb3JlIGNvbnNpc3RlbnQgdHJlYXRtZW50IG9mIGtleVVzYWdlLCBiYXNpY0NvbnN0cmFpbnRzLCBvdGhlcgorICAgeDUwOXYzIG9wdGlvbnMKKworMjAxMC0wNC0zMCAyMzozNyAgbWFyegorCisgICAqIGxvY2FsL2NlcnRnZW4tdGVzdC5wbDoKKworICAgbGFtZSB0ZXN0IHNjcmlwdCBidXQgY292ZXJzIGEgY2h1bmsgb2YgdGhlIGNvZGUKKworMjAxMC0wNC0zMCAyMzowMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbWtpbnN0YWxsZGlycyBpbnN0ZWFkIGluc3RlYWQgb2YgRmlsZTo6UGF0aAorCisyMDEwLTA0LTMwIDIzOjAwICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgZW5zdXJlIG5ldC1zbm1wLWNvbmZpZyBzY3JpcHQgY2FuIGJlIHJ1biBmcm9tIHRoZSBidWlsZCBkaXIKKworMjAxMC0wNC0zMCAyMTozMSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGhhbmRsZSBnZW5jZXJ0IC0tY2EKKworMjAxMC0wNC0zMCAyMTowMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGhlbHAgZm9yIGNlcnRTZWNOYW1lOyBjb250aW51ZSBidWlsZGluZyBjZXJ0IGluZGV4ZXMgZXZlbiBpZgorICAgd2UgY2FudCBzYXZlCisgICB0byBwZXJzaXN0ZW50IGRpcgorCisyMDEwLTA0LTMwIDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBmaXggY2hlY2sgY291bnQgZm9yIDgyMiBuYW1lcyBpbiB0aGUgc25tcGQubG9nCisKKzIwMTAtMDQtMzAgMjA6NDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYywgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGZpeCBtYWxsb2MgdW5uZGVybGVuZ3RoIGJ5IDEgZXJyb3IKKworMjAxMC0wNC0zMCAyMDo0OCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgY29tbWVudCBvdXQgdGhlIDgyMiB0ZXN0czsgdGhleSdyZSBicm9rZW4gYXQgdGhlIG1vbWVudAorCisyMDEwLTA0LTMwIDE5OjM2ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZG9uJ3QgbG9zZSBTQU4gd2hlbiBzaWduaW5nIHcvIENBCisKKzIwMTAtMDQtMzAgMTg6NDYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbWFrZSBuYW1lIGNoYW5nZSB0byByZmM4MjIgZnJvbSB0eXBvZWQgODIyMAorCisyMDEwLTA0LTMwIDE4OjQ2ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgYWRkZWQgdGVzdHMgdG8gZG8gb3RoZXIgc3ViamVjdEFsdE5hbWUgbWFwcGluZworCisyMDEwLTA0LTMwIDE3OjMxICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IGlzc3VlcyAxLDIsNCBhbmQgLUMgaGFuZGxpbmcKKworMjAxMC0wNC0yOSAwMzozMiAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1cGRhdGUgdGxzdG1DZXJ0VG9UU05UYWJsZSB0byB1c2UgY2FjaGUgKyBjZXJ0X3V0aWwgbWFwcworICAgY29udGFpbmVyCisKKzIwMTAtMDQtMjkgMDM6MzEgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgY2hlY2sgaW5zZXJ0IHJldHVybgorCisyMDEwLTA0LTI5IDAzOjMxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGFkZCByZW1vdmUgZnVuY3Rpb24gdG8gY29udGFpbmVyIGl0ZXJhdG9yOworICAgaW1wbGVtZW50IGl0IGZvcgorICAgYmluYXJ5X2FycmF5CisKKzIwMTAtMDQtMjkgMDM6MzEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBtYWtlIHN1cmUgY29udGFpbmVyIHN5bmMgaW5jcmVtZW50ZWQgb24gc29ydCwgaW5zZXJ0IGFuZCByZW1vdmUKKworMjAxMC0wNC0yOCAwNzoyMCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2luZXRfbnRvcC5jOgorCisgICBSZW1vdmVkIGFuIG9ic29sZXRlIGNvbW1lbnQuCisKKzIwMTAtMDQtMjggMDA6MzMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgZml4IG1ha2VmaWxlIGZvciB0ZXN0IHRhcmdldAorCisyMDEwLTA0LTI4IDAwOjMzICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcDoKKworICAgbWFrZSB0aGUgdGVzdCBzdWl0ZSBydW4gb3V0c2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeSBhZ2Fpbi4KKworMjAxMC0wNC0yOCAwMDozMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIGRlYWwgd2l0aCBvdXQtb2Ytc291cmNlIHRyZWUgYnVpbGRpbmcKKworMjAxMC0wNC0yOCAwMDozMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHRlc3RpbmcgdG8gY2hlY2sgY2VydGlmaWNhdGUgdG8gc2VjdXJpdHluYW1lIG1hcHBpbmdzIGFuZCBkZW5pYWxzCisKKzIwMTAtMDQtMjggMDA6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICBjcmVhdGVkIGEgbWFwcGVkIHVzZXIKKworMjAxMC0wNC0yOCAwMDozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHA6CisKKyAgIGdlbmVyYXRlIG9iamVjdCBjb2RlIHdpdGggLWcgZGVidWdnaW5nCisKKzIwMTAtMDQtMjggMDA6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jOgorCisgICBtb3JlIGFjY3VyYXRlIGN1cnJlbnQgQVBJIHVzYWdlIGZvciBzY2FwaSBjb2RlCisKKzIwMTAtMDQtMjcgMjE6MTMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGZpeCBjZXJ0IGluaXQgZHVwbGljYXRlIGNhbGwgY2hlY2sKKworMjAxMC0wNC0yNyAyMDo1OCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBjb252ZXJ0IHVzZXIgZmluZ2VycHJpbnQgdG8gbG93ZXIgYW5kIHN0cmlwIGNvbG9uczsgYWRkIGV4dGVybgorICAgcHJvdG90eXBlCisgICBmb3IgY2VydCBpbml0IHNvIHdlIGRvbid0IG5lZWQgaGVhZGVyCisKKzIwMTAtMDQtMjcgMjA6MTUgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHNlcGFyYXRlIGNlcnQgaW5pdCBhbmQgY2VydCBsb2FkaW5nOyBhZGQgY2VydFNlY05hbWUgY29uZmlnIHRva2VuCisKKzIwMTAtMDQtMjcgMDM6MTggIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBtZXJnZSBORVRTTk1QX0ZVTkNUSU9OIGFuZCAhTkVUU05NUF9GVU5DVElPTiBhc3NlcnQgY2FzZXMKKworMjAxMC0wNC0yNyAwMzowMiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBsb3RzIG9mIG5ldyBjZXJ0IGZ1bmN0aW9uYWxpdHkKKyAgIC0gYWRkIHNzbCBmdW5jcyBmb3IgY2VydCBleHRlbnNpb25zIGFuZCBzc2wgY2VydCBjaGFpbnMKKyAgIC0gZnVuY3Rpb25zIGFuZCBuZXcgbmV0c21wX2NlcnRfbWFwIHN0cnVjdCBmb3IgbG9va2luZyB1cCBjZXJ0CisgICBtYXBwaW5ncworICAgLSBhZGQgY2VydGlmaWNhdGUgbWFwcGluZyBmb3Igc2VjbmFtZQorICAgLSBhZGQgY29kZSB0byBidWlsZCBjZXJ0IGNoYWlucworICAgLSBhZGQgc3ViamVjdCB0byBjZXJ0IGluZGV4IGNhY2hlCisgICAtIHJlYnVpbGQgaW5kZXhlcyBpZiBhbnkgZXJyb3Igd2hpbGUgcGFyc2luZyBpbmRleAorICAgLSByZWZvcm1hdCBkdW1wIG91dHB1dAorICAgLSBhZGQgTlNfQ0VSVF9DQSBhbGxvd2VkX3VzZSBmbGFnCisgICAtIGFkZCBzdWJqZWN0LCBpc3N1ZXIgYW5kIGlzc3Vlcl9jZXJ0IHRvIG5ldHNubXBfY2VydAorICAgLSBtb3ZlIGNlcnQgY29udGFpbmVyIHNldHVwIHRvIGl0cyBvd24gZnVuY3Rpb24KKyAgIC0gYWRkIGNlcnQgc3ViamVjdCBuYW1lIHN1YmNvbnRhaW5lcgorCisyMDEwLTA0LTI3IDAzOjAyICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eC5jOgorCisgICBtb3ZlIGlwdjYgc3BlY2lmaWMgdmFyIGRlY2wgaW5zaWRlIGlmZGVmCisKKzIwMTAtMDQtMjcgMDM6MDIgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiB0ZGF0YSBoZWxwZXIgbm93IHNhdmVzIGZsYWdzIHBhc3NlZCBkdXJpbmcKKyAgIGNyZWF0aW9uOyBhZGQgdGRhdGEKKyAgIGZsYWcgdG8gTk9UIGNyZWF0ZSB0aGUgdGFibGUgY29udGFpbmVyCisKKzIwMTAtMDQtMjcgMDM6MDEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgTkVXUzogc25tcGxpYjogYWRkIGludGVyZmFjZSBmb3IgZHVwbGljYXRpbmcgYSBjb250YWluZXIKKyAgIENIQU5HRVM6IHNubXBsaWI6IGNvbnRhaW5lciBjaGFuZ2VzOiBhZGQgZmxhZ3MgZmllbGQgdG8gY29udGFpbmVyCisgICBtZXRhLWRhdGE7CisgICBjaGcgYmluYXJ5X2FycmF5IGNvbnRhaW5lciB0byB1c2UgY29udGFpbmVyIG1ldGEtZGF0YSBmbGFncworCisyMDEwLTA0LTI2IDIyOjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBhZGRlZCBhIHRlc3QgdG8gdmVyaWZ5IHRoYXQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aAorICAgYSByZW1vdGUgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgdGhlIGNvbm5lY3Rpb24gaXMgZGVuaWVkCisKKzIwMTAtMDQtMjYgMjI6MzIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkOgorCisgICBhZGRlZCB0ZXN0cyBmb3IgLVQgZmxhZyB1c2FnZSBhbmQgaW52YWxpZCB1c2VyIHVzYWdlCisKKzIwMTAtMDQtMjYgMjA6NTQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfb2xkdWNkOgorCisgICBoYXZlIHRoZSBhbGlhcyB0cmFuc3BvcnQgc291cmNlIHRoZSByaWdodCBTdjNjb25maWcgZmlsZQorCisyMDEwLTA0LTI2IDIwOjUwICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2Q6CisKKyAgIHdvcmtpbmcgc3VwcG9ydCBvZiBUTFMvRFRMUyB0ZXN0aW5nIGluY2x1ZGluZyBjZXJ0IGdlbmVyYXRpb24KKworMjAxMC0wNC0yNiAyMDo0OSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBob25vciB0aGUgY29uZmlnIGRpciBpZiBzcGVjaWZpZWQgdmlhIC1DCisKKzIwMTAtMDQtMjYgMjA6NDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZpeCByZWFsbG9jIGNhbGwgZm9yIGJ1ZmZlcmVkIHBhY2tldHMKKworMjAxMC0wNC0yNiAyMDo0OSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBwcm9wZXIgc2tpcCBvdXRwdXQgZm9yIHJlcG9ydGluZyByZWFzb24KKworMjAxMC0wNC0yNiAyMDo0OSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYWZ0ZXIgYmFja3NsYXNoIGluIG1hY3JvCisKKzIwMTAtMDQtMjYgMjA6NDggIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0cmFuc3BvcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5wcml2LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIuY2VydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLnByaXY6CisKKyAgIHRlc3RzIGZvciBtaW5pbWFsbHkgdGVzdGluZyBhbGwgdGhlIHRyYW5zcG9ydHMKKworMjAxMC0wNC0yNiAyMDo0OCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JFQURNRToKKworICAgbWluaW1hbGx5IGRvY3VtZW50IG5ldyBSVU5GVUxMVEVTVFMgc2NyaXB0CisKKzIwMTAtMDQtMjYgMjA6NDggIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvVC5jLCB0ZXN0aW5nL1QyLnNoLCB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLW1kNSwgICAKKyAgICAgIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMSwgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExLWRlcywgICAKKyAgICAgIHRlc3RpbmcvZGF0YS5rdWwtbWQ1LCB0ZXN0aW5nL2RhdGEua3VsLXNoYTEsIHRlc3RpbmcvbWlzY3Rlc3QuYywgIAorICAgICAgIHRlc3RpbmcvdGVzdF9rZXljaGFuZ2Uuc2gsIHRlc3RpbmcvdGVzdF9rdWwuc2g6CisKKyAgIGRlbGV0ZWQgb2xkIGZpbGVzIG5vdCB3b3J0aCByZXN0b3JpbmcKKworMjAxMC0wNC0yNiAyMDo0OCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2V2YWxfdGVzdGxpc3Q6CisKKyAgIHJlbW92ZSBvYnNvbHV0ZSB0ZXN0IGxpc3QKKworMjAxMC0wNC0yNiAyMDo0NyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmM6CisKKyAgIGEgaGFzaC10ZXN0aW5nIC5jIGZpbGUgSSBoYWQgbGF5aW5nIGFyb3VuZAorCisyMDEwLTA0LTI2IDIwOjQ3ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIG1ha2UgdGVzdGFsbCB0YXJnZXQKKworMjAxMC0wNC0yNiAyMDo0NyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsIHRlc3RpbmcvZXRpbWV0ZXN0LmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3Rpbmcva2V5bWFuYWdldGVzdC5jLCB0ZXN0aW5nL3NjYXBpdGVzdC5jOgorCisgICBtb3ZlIG9sZCBDLWNvZGUgdGVzdHMgaW4gcGxhY2UKKworMjAxMC0wNC0yNiAyMDo0NyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX29sZHVjZDoKKworICAgc2tpcCBzb2xhcmlzIGNvbW1lbnRzCisKKzIwMTAtMDQtMjYgMjA6NDYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgZml4IGludm9jYXRpb24gb2YgUlVORlVMTFRFU1RTCisKKzIwMTAtMDQtMjYgMjA6NDYgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2MWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YyY2NvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdhZ2VudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlndHJhcGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3ZhY21jb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YWNtY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFueWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9TdHJhbnNwb3J0LCB0ZXN0aW5nL3Rlc3RzL1N2MWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3YyY2NvbmZpZywgdGVzdGluZy90ZXN0cy9TdjNjb25maWcsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2FnZW50LCB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2Jhc2UsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ3RyYXBkLCB0ZXN0aW5nL3Rlc3RzL1N2M3ZhY21jb25maWcsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2YWNtY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1N2YW55Y29uZmlnLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gsIHRlc3RpbmcvdGVzdHMvVDAyMHNubXB2M2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjIwc25tcHYzYnVsa2dldCwgdGVzdGluZy90ZXN0cy9UMDIyc25tcHYzZ2V0TUQ1LCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1QUVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1REVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI0c25tcHYzZ2V0U0hBMSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNXNubXB2M2dldFNIQURFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNnNubXB2M2dldFNIQUFFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyOHNubXB2M2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtYXV0aCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybXByaXYsIHRlc3RpbmcvdGVzdHMvVDA1MHNubXB2M3RyYXAsIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcCwgdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybSwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QzLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU4YWdlbnRhdXRodHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZSwgdGVzdGluZy90ZXN0cy9UMDYwdHJhcGRwZXJsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDYxYWdlbnRwZXJsLCB0ZXN0aW5nL3Rlc3RzL1QwNjVhZ2VudGV4dGVuZCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MGNvbTJzZWMsIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXgsIHRlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTEwYWdlbnR4Z2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMTFhZ2VudHhzZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTJhZ2VudHhzZXRmYWlsLCB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTE0YWdlbnR4YWdlbnR4dHJhcCwgdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybCwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbCwgdGVzdGluZy90ZXN0cy9UMTMwc25tcHYxdmFjbWdldCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDEzMXNubXB2MmN2YWNtZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTMyc25tcHYzdmFjbWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MHNubXB2MXZhY21nZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQyc25tcHYzdmFjbWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTBzb2xhcmlzaG9zdGNwdSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1MXNvbGFyaXNob3N0ZGlzaywgdGVzdGluZy90ZXN0cy9UMTUyaG9zdHVwdGltZSwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDE1M3NvbGFyaXNzd2FwLCB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5wcml2LCB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5jZXJ0LCAgCisgICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIucHJpdjoKKworICAgTkVXUzogdGVzdGluZzogQnJhbmQgbmV3IHRlc3Qgc3VpdGUgZGVzaWdlbmVkIHRvIGV2ZW50dWFsbHkgdGVzdAorICAgbW9yZSBmdW5jdGlvbmFsaXR5LCBwcm92aWRlIGZvciBzdXBwb3J0IG9mIHVuaXQtdGVzdHMgYW5kIHN1cHBvcnQKKyAgIG9mIEFQSSB0ZXN0cworCisyMDEwLTA0LTI2IDIwOjQzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIHJlbW92ZWQgYSBkZWJ1Z2dpbmcgZWNobworCisyMDEwLTA0LTI2IDIwOjQzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIG1vcmUgYnVnIGZpeGVzIGZvciBzdHJpbmcgc2VhcmNoZXMKKworMjAxMC0wNC0yNiAyMDo0MyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBhZGRlZCBhIG5ldyBtYWNybyB0byBjaGVjayBhIHRyYXBkIGNvdW50CisKKzIwMTAtMDQtMjYgMjA6NDIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgdXNlIGluZGl2aWR1YWwgb3V0cHV0IGZpbGVzIGFuZCBmaXggc29tZSB0ZXN0cworCisyMDEwLTA0LTI2IDIwOjQyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIG1hZGUgZXhpc3RpbmcgdGVzdCBzdWl0ZSBwdXQgb3V0IFRBUCBvdXRwdXQKKworMjAxMC0wNC0yNiAyMDo0MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5URVNUUywgdGVzdGluZy9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZXZhbF9vbmVwcm9ncmFtLnNoLCB0ZXN0aW5nL2V2YWxfb25lc2NyaXB0LnNoLCAgIAorICAgICAgdGVzdGluZy9ldmFsX3N1aXRlLnNoLCB0ZXN0aW5nL2V2YWxfdG9vbHMuc2gsIHRlc3RpbmcvZnVsbHRlc3RzLCAgCisgICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgYmVnaW5uaW5nIG9mIG1vdmluZyBVQ0QgdGVzdCBzdWl0ZSBpbnRvIGEgbGFyZ2VyIHN1YmRpcmVjdG9yeQorCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBhbGxvdyBydW5uaW5nIHRlc3RzIHRoYXQgbWF0Y2ggYSByZWdleHAKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3VtbWFyaXplIHRlc3RzIHRoYXQgZmFpbGVkCisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGNyZWF0ZWQgdGhlIGFiaWxpdHkgdG8gaGF2ZSBydW5fIHNjcmlwdHMgZm9yIGV4ZWN1dGluZyBjZXJ0YWluCisgICB0eXBlcworCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBtYWRlIHRoZSBidWlsZC1zY3JpcHQtY2hlY2sgcm91dGluZSBnZW5lcmljCisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN1cHBvcnQgZm9yIGJ1aWxkIHNjcmlwdHMKKworMjAxMC0wNC0yNiAyMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgcHJvdmlkZSBpbmZyYXN0cnVjdHVyZSBmb3IgYnVpbGRpbmcgYW5kIHJlbmFtaW5nIHRlc3RzCisKKzIwMTAtMDQtMjYgMjA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG1vcmUgdGVzdCBpbmZyYXN0cnVjdHVyZSBzZXR1cAorCisyMDEwLTA0LTI2IDIwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzdXBwb3J0IHRoZSBrZXl3b3JkICdhbGwnCisKKzIwMTAtMDQtMjYgMjA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGVuYWJsZSBncm91cCBnYXRoZXJpbmcKKworMjAxMC0wNC0yNiAyMDozOSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgY3JlYXRpbm8gb2YgYSBuZXcgdGVzdGluZyBoYXJuZXNzCiAKIDIwMTAtMDQtMjUgMTc6MzcgIGJ2YXNzY2hlCiAKQEAgLTI0MDMsMzQgKzQzMzgwLDQwMyBAQAogCiAgICBEb2N1bWVudGF0aW9uIHVwZGF0ZS4KIAotMjAxMC0wNC0yMSAxMTowNSAgYnZhc3NjaGUKLQotICAgKiBzbm1wbGliL3N0cnRvdWxsLmM6Ci0KLSAgIENvcGllZCB0aGUgc291cmNlIGZpbGUgc25tcGxpYi9zdHJ0b3VsbC5jIGZyb20gdGhlIHRydW5rIHRvIHRoZQotICAgVjUuNCBicmFuY2guCi0KLTIwMTAtMDQtMTggMTM6NDAgIGJ2YXNzY2hlCi0KLSAgICogc25tcGxpYi93aW5waXBlLmM6Ci0KLSAgIEFkZGVkICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gaW4gZmlsZQotICAgc25tcGxpYi93aW5waXBlLmMgc3VjaAotICAgdGhhdCBidWlsZGluZyBvbiBXaW5kb3dzIGRvZXNuJ3QgdHJpZ2dlciBhIHdhcm5pbmcgYWJvdXQKLSAgIGluY2x1ZGluZyBib3RoCi0gICA8c3RkYXJncy5oPiBhbmQgPHZhcmFyZ3MuaD4gaW4gdGhlIHNhbWUgc291cmNlIGZpbGUuCi0KLTIwMTAtMDQtMTggMTM6MjQgIGJ2YXNzY2hlCisyMDEwLTA0LTI1IDE1OjIxICBidmFzc2NoZQogCiAgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKICAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0gICBSZXZlcnRlZCBhbm90aGVyIGNoYW5nZSB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIxODQ5NSBhbmQgdGhhdCdzCi0gICBvYnZpb3VzbHkgYnJva2VuLgorICAgV2luMzI6IHJldmVydGVkIGEgcmVjZW50IHVubmVjZXNzYXJ5IG1vZGlmaWNhdGlvbi4KKworMjAxMC0wNC0yNSAxNTowMCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGhhbmRsZSBtdWx0aXBsZSAtLXNhbiBhcmdzLCBjaGVjayBlcnJvciBjb2RlcyBvbiBvcGVuc3NsIGNtZHMgYW5kCisgICBkaWUgb24gZmFpbHVyZQorCisyMDEwLTA0LTI1IDE0OjE4ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg6CisKKyAgIFdpbjMyOiBidWlsZHMgYWdhaW4gd2l0aCBTREsgc3VwcG9ydCBkaXNhYmxlZC4KKworMjAxMC0wNC0yNSAxNDoxOCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgCisgICAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46CisKKyAgIFdpbjMyOiByZXN0b3JlZCBjb25zaXN0ZW5jeSBiZXR3ZWVuIHdvcmtzcGFjZS1idWlsZCBhbmQgYmF0Y2gKKyAgIGJ1aWxkIC0tIG1hZGUgc3VyZSB0aGF0IG5vdGlmaWNhdGlvbl9sb2cuYyBpcyBvbmx5IGluY2x1ZGVkIGluCisgICB0aGUgbmV0c25tcG1pYnMgcHJvamVjdC4KKworMjAxMC0wNC0yNSAxMzo1OCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgIAorICAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oOgorCisgICBXaW4zMjogZml4ZXMgZm9yIHJlY2VudGx5IGludHJvZHVjZWQgYnVpbGQgYnJlYWthZ2UuCisKKzIwMTAtMDQtMjUgMTM6NTEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW46CisKKyAgIFdpbjMyOiBidWlsZHMgYWdhaW4gd2l0aCBTREsgc3VwcG9ydCBkaXNhYmxlZC4KKworMjAxMC0wNC0yNSAxMzo0OCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCBzbm1wbGliL2Nsb3NlZGlyLmMsIHNubXBsaWIvb3BlbmRpci5jLCAgCisgICAgICAgc25tcGxpYi9yZWFkZGlyLmMsIHNubXBsaWIvd2luc2VydmljZS5jOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgV2luMzIgTVNWQyA2IG5vbi1TREsgYnVpbGQgd29ya3MgYWdhaW4uCisKKzIwMTAtMDQtMjUgMTM6NDIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvQ29uZmlndXJlOgorCisgICBSZW1vdmVkIGFuIG9ic29sZXRlIHRyYW5zZm9ybWF0aW9uIHJ1bGUuCisKKzIwMTAtMDQtMjUgMTI6MDUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE1hZGUgaXQgYWdhaW4gcG9zc2libGUgdG8gZGlzYWJsZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyB3aGVuCisgICBidWlsZGluZyB2aWEgd2luMzIvYnVpbGQuYmF0LgorCisyMDEwLTA0LTIzIDEzOjE0ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYWRkZWQgLS1zYW4gRE5TOmEuYi5jIGhhbmRsaW5nLCBoZWxwIHRleHQgZml4ZXMsIG90aGVyIGJ1ZyBmaXhlcy4KKyAgIE5vdGUgbXVsdGlwbGUgLS1zYW4gbm90IHN1cHBvcnRlZCB5ZXQKKworMjAxMC0wNC0yMSAyMjozMSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbjoKKworICAgYnVpbGQgdGhlIC5tYWRlIHZlcnNpb24gb2YgbmV0LXNubXAtY2VydAorCisyMDEwLTA0LTIxIDIyOjMxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQgYWZ0ZXIgbW92aW5nIGFsbCB0aGUgZmlsZXMgYXJvdW5kCisKKzIwMTAtMDQtMjEgMjA6MTYgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYnVpbGQgdHJ1c3QgY2hhaW4gZm9yIGNsaWVudCBjZXJ0OyBhZGQgc3ViamVjdCB0byBpbmRleCBjYWNoZTsKKyAgIHJlYnVpbGQgaW5kZXhlcworICAgaWYgYW55IGVycm9yIHdoaWxlIHBhcnNpbmcgaW5kZXg7IHJlZm9ybWF0IGR1bXAgb3V0cHV0CisgICAtIGFkZCBOU19DRVJUX0NBIGFsbG93ZWRfdXNlIGZsYWcKKyAgIC0gYWRkIHN1YmplY3QsIGlzc3VlciBhbmQgaXNzdWVyX2NlcnQgdG8gbmV0c25tcF9jZXJ0CisgICAtIG1vdmUgY2VydFRvVFNOX2VudHJ5IHRvIGNlcnRfdXRpbCBoZWFkZXIKKyAgIC0gbW92ZSBjb250YWluZXIgc2V0dXAgdG8gaXRzIG93biBmdW5jdGlvbgorICAgLSBhZGQgc3ViamVjdCBuYW1lIHN1YmNvbnRhaW5lcgorICAgLSBhZGQgbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9leHRlbnNpb25zLAorICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfaXNzdWVkX2J5CisKKzIwMTAtMDQtMjEgMTY6MTYgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBjbWQuMS5kZWY6CisKKyAgIGRvY3VtZW50IHRoZSBzaW5nbGUtZGFzaCAvIHNubXAuY29uZiAvIGRvdWJsZS1kYXNoIHByZWNpZGVuY2UKKworMjAxMC0wNC0yMSAxNjoxNSAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmOgorCisgICBkb2N1bWVudCBpbiB0aGUgc25tcC5jb25mIGZpbGUgdGhhdCB0aGUgdG9rZW5zIGNhbiBiZSB1c2VkIGZvcgorICAgY29tbWFuZCBsaW5lIGFwcGxpY2F0aW9ucyB0b28KKworMjAxMC0wNC0yMSAxNjoxNSAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmOgorCisgICBkb2N1bWVudCB0aGUgZmlsZSBsb2FkaW5nIG9yZGVyIGFuZCBob3cgdG8gdHVybiBvZmYgaG9zdC1zcGVjaWZpYworICAgY29uZmlnCisKKzIwMTAtMDQtMjEgMTU6NTIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBtYW4vc25tcC5jb25mLjUuZGVmLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIE5FV1M6IGFwcHM6IEdlbmVyaWMgaG9zdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHNubXAuY29uZiBmaWxlcworICAgYXJlIG5vdyByZWFkLiBTZWUgdGhlIEhPU1QtU1BFQ0lGSUMgRklMRVMgc2VjdGlvbiBvZiB0aGUKKyAgIHNubXAuY29uZiBtYW51YWwgcGFnZS4KKworMjAxMC0wNC0yMCAxMjo0NCAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9hc24xLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyOTcxMjcwOiByZWZ1c2UgdG8gcGFyc2UgQVNOLjEgdG9rZW5zCisgICB3aXRoIHdyb25nIHR5cGUgZmllbGQuCisgICBUaGlzIG1heSB5aWVsZCB0byBwcm9ibGVtcyB3aXRoIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucyB3aGljaAorICAgbWF5IGRlcGVuZCBvbiBwYXJzaW5nIHVnbHkgQVNOLjEgZGF0YSAtIHdlJ2xsIHNlZS4uLgorCisyMDEwLTA0LTIwIDAwOjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjb21iaW5lIHJlbW90ZSBmaW5nZXJwcmludCBjaGVja2luZyBhbmQgY2hlY2sgYm90aCBzaWRlcworCisyMDEwLTA0LTIwIDAwOjA1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgaWYgdGhlIHJlbW90ZSBmaW5nZXJwcmludCBpcyBzcGVjaWZpZWQsIHJlcXVpcmUgYW4gZXhhY3QgbWF0Y2gKKworMjAxMC0wNC0xOSAyMzo0NCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IHZhcmlvdXMgbWlub3IgYnVncywgZXNwZWNpYWxseSBpbiBvdXRwdXQgbWVzc2FnZXMKKworMjAxMC0wNC0xOSAyMToxNCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgZG9jdW1lbnRhdGlvbiBhbmQgcHJvdG90eXBpbmcgb2YgbmVlZGVkIFJGQyBzdGVwcworCisyMDEwLTA0LTE5IDIxOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNvbnZlcnQgaWYgZXJyb3IgY2hlY2sgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IHNvIG90aGVyIGNvZGUgY2FuIGJlCisgICBvdXRkZW50ZWQKKworMjAxMC0wNC0xOSAyMToxMyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgY29tbWVudHMgZnJvbSB0aGUgUkZDIHRleHQKKworMjAxMC0wNC0xOCAxNToyNSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvdHJhbnNwb3J0cywgICAKKyAgICAgIHdpbjMyL2J1aWxkLnBsLCB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAKKyAgICAgICAgd2luMzIvdHJhbnNwb3J0cywgd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oOgorCisgICBXaW4zMjogYnVpbGRzIGFnYWluLgorCisyMDEwLTA0LTE2IDE4OjUzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjcmVhdGVkIGEgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgc2VjdXJpdHlOYW1lIGZyb20gdGhlIGNlcnQKKworMjAxMC0wNC0xNiAxODo1MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBkb24ndCBuZWVkIHRvIHNldCB0aGUgYWNjZXB0IHN0YXRlIGZvciBUTFMgKGp1c3QgRFRMUykKKworMjAxMC0wNC0xNiAxODo1MyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgVExTIGNvbW1lbnQgZG9jdW1lbnRhdGlvbiBhbmQgc3RlcHMgdGFrZW4gZnJvbSB0aGUgUkZDCisKKzIwMTAtMDQtMTYgMTM6NTUgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBudW1lcm91cyBmaXhlcywgbW9yZSB2ZXJib3NlIGRlZmF1bHQgb3V0cHV0LCBhZGRpdGl2ZSBzaG93IGZsYWdzLAorICAgYXJiaXRyYXJ5IGNvbmZpZyBwYXJhbSBoYW5kbGluZywgYmV0dGVyIGhlbHAgdGV4dAorCisyMDEwLTA0LTE2IDEzOjA4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBkb24ndCBkb3VibGUgZGVjbGFyZSBhIHN0cnVjdAorCisyMDEwLTA0LTE2IDAzOjMwICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBjZXJ0IHV0aWwgZml4ZXMKKyAgIC0gcmVtb3ZlIHVudXNlZCB2YXJzIGFuZCBkdXBsaWNhdGUgY29kZQorICAgLSBjaGVjayBwcnQgYmVmb3JlIGZyZWUKKyAgIC0gbmV3IGZ1bmMgZm9yIHR5cGUgZnJvbSBmaWxlbmFtZQorICAgLSBuZXcgZnVuY3Rpb25zIGZvciBmaW5kaW5nIHN1YnNldHMgZnJvbSBmaWxlbmFtZQorICAgLSBmaXggdHlwZXMgaW4ga2V5IHNlYXJjaCBmdW5jdGlvbiBidXQgdGhlbiBpZmRlZiBpZiAodW51c2VkCisgICBmdW5jdGlvbikKKworMjAxMC0wNC0xNSAyMjo1NyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgdXNlIGEgc3RydWN0dXJlIHJlZmVyZW5jZSB0byBwcmVkZWNsYXJlIHRoZSBzdHJ1Y3R1cmUKKworMjAxMC0wNC0xNSAyMToyNSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgY29ycmVjdCBkZWNsYXJhdGlvbiBvZiB0aGUgZl9vcGVuIGNvbW1hbmQgbm93IHJlcXVpcmluZyByZXR1cm5pbmcKKyAgIGEgdHJhbnNwb3J0CisKKzIwMTAtMDQtMTUgMjE6MDIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSB1bm5lZWRlZCBjb25maWcgY29udGFpbmVyCisKKzIwMTAtMDQtMTUgMjE6MDIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvcHkgZmluZ2VycHJpbnQgdHJhbnNwb3J0IGluZm9ybWF0aW9uIGludG8gbmV3IHRscyBzdHJ1Y3R1cmUKKyAgIHdpdGhpbiBEVExTVURQIHNvIHBlci10cmFuc3BvcnQgZmluZ2VycHJpbnRzIGNhbiBiZSBzcGVjaWZpZWQKKworMjAxMC0wNC0xNSAyMTowMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcHJvcGVybHkgY2hlY2sgZm9yIHRsc2Jhc2UgcG9pbnRlcnMgaW4gZHRsc3VkcF9zZW5kKCkKKworMjAxMC0wNC0xNSAyMTowMSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgZ3JlcCB0aGUgdHJhbnNwb3J0IGxpc3QgZm9yIFRMUyBub3QganVzdCBEVExTIGZvciBjaGVja2luZyBmb3IKKyAgIC1sc3NsCisKKzIwMTAtMDQtMTUgMjE6MDEgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGJ1ZyBmaXhlcyBhbmQgbWFkZSBUTFNUQ1Agd29yayB3aXRoIHRoZSAtVCBmbGFnCisKKzIwMTAtMDQtMTUgMjE6MDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtYWtlIHRoZSBmX29wZW4gY2FsbCBhc3NpZ24gdGhlIG5ldyB0cmFuc3BvcnQgcG9pbnRlciB0byB1c2UgKGFuZAorICAgY2hlY2sgaWYgTlVMTCBhcyBhIGZhaWx1cmUgY29uZGl0aW9uCisKKzIwMTAtMDQtMTUgMjE6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGJlZ2luIHdvcmsgbW92aW5nIERUTFMgY29uZmlnIHJvdXRpbmUgaW4gcGxhY2UKKworMjAxMC0wNC0xNSAyMTowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHBhc3MgdGhlIGVudGlyZSB0bHNiYXNlIHRvIHRoZSBjbGllbnRfc2V0dXAKKworMjAxMC0wNC0xNSAyMTowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsIHNubXBsaWIvc25tcF9hcGkuYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzdGFydGluZyB0aGUgc3RvcmluZyBvZiBjb25maWcgZGF0YSBpbnRvIHRoZSB0bHNiYXNlCisKKzIwMTAtMDQtMTUgMjA6NTkgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNoYW5nZSBjbGllbnQgc3NsIHNldHVwIHRvIGFsbG93IGZvciBkaXJlY3QgZmluZ2VycHJpbnQKKyAgIHNwZWNpZmljYXRpb24gb2YgbXkvdGhlaXIgY2VydHMKKworMjAxMC0wNC0xNSAyMDo1OSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvc25tcF9hZ2VudC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgCisgICAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc3BsaXQgVExTIGludG8gY3JlYXRpb24vY2xvc2UgZnVuY3Rpb25zIGZvciBldmVudHVhbCBjb25maWcKKyAgIHBhc3Npbmcgc3VwcG9ydAorCisyMDEwLTA0LTE1IDIwOjU5ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHBhc3MgdHJhbnNwb3J0IGNvbmZpZyBkYXRhIHRvIHRoZSB0cmFuc3BvcnQgZl9jb25maWcoKSBmdW5jdGlvbgorCisyMDEwLTA0LTE1IDIwOjU5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmV0dXJuIE5VTEwgb24gdHJhbnNwb3J0IGNvbmZpZyBlcnJvcgorCisyMDEwLTA0LTE1IDIwOjU4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgTkVXUzogYXBwczogLVQgY29tbWFuZCBsaW5lIGZsYWcgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlCisgICB0cmFuc3BvcnRzCisKKzIwMTAtMDQtMTUgMjA6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBjaGVjayB0cmFuc3BvcnQgTlVMTG5lc3MgYmVmb3JlIHVzaW5nCisKKzIwMTAtMDQtMTUgMjA6NTggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgYmVnaW5uaW5nIG9mIHdvcmsgdG8gbWFrZSB0cmFuc3BvcnRzIGNvbmZpZ3VyYWJsZSB3aXRoCisgICBzdXBwbGltZW50YWwgY29uZmlndXJhdGlvbiBkYXRhIGFuZCBuZXcgY2FsbHMgZm9yIGZfb3Blbi9mX2NvbmZpZworCisyMDEwLTA0LTE1IDIwOjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGFkZGVkIHRleHQgaW4gY29tbWVudHMgZnJvbSBmdXR1cmUgUkZDIHRvIGRvY3VtZW50IHRoZQorICAgaW1wbGVtZW50YXRpb24KKworMjAxMC0wNC0xNSAxODo1MSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbWFyayBwZW0gdy9rZXkgYXMgaWRlbnRpdHk7IHR3ZWFrIHBhcnRuZXIgZGVidWc7IGNvbXBhcmUgZmlsZQorICAgY3RpbWUgYWdhaW5zdCBpbmRleCB0b28KKworMjAxMC0wNC0xNSAxNzowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgdXNlIGxvY2FsIHNwYWNlIHRvIHJlZm9ybWF0IGNlcnQgZm9yIHNlYXJjaAogCiAyMDEwLTA0LTE1IDE2OjU1ICBidmFzc2NoZQogCi0gICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgorICAgKiB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oOgogCiAgICBQYXJ0aWFsbHkgcmV2ZXJ0ZWQgcjE4NDk2OgogICAgLSBDb21tZW50ZWQgb3V0ICNkZWZpbmUgTkVUU05NUF9VU0VfRExMIGFnYWluIGluIGZpbGUKQEAgLTI0NDQsNiArNDM3OTAsNTUgQEAKICAgIG9yIFY1LjUgYnJhbmNoZXMgYW5kIGhlbmNlIHRoZXJlIHdhcyBubyByZWFzb24gdG8gZGlzYWJsZSB0aGlzCiAgICBwcmVwcm9jZXNzb3Igc3ltYm9sLgogCisyMDEwLTA0LTE1IDE1OjA4ICBtYXJ6CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW46CisKKyAgIGFkZCBuZXQtc25tcC1jZXJ0IHRvIG1ha2UvaW5zdGFsbAorCisyMDEwLTA0LTE1IDEwOjUyICBqc2FmcmFuZWsKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQ6CisKKyAgIFRlc3RzIG5vdCB3b3JraW5nIGZvciBUQ1Agc2hvdWxkIGJlIHNraXBwZWQgYWxzbyBmb3IgVENQNi4KKworMjAxMC0wNC0xNCAxODoxMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZml4IHZhcnMvdGV4dCBmcm9tIGN1dC1uLXBhc3RlCisKKzIwMTAtMDQtMTQgMTc6NDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGZpeCBjb21tZW50cworCisyMDEwLTA0LTE0IDE3OjQ1ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBsb3RzIG9mIGNlcnQgdXBkYXRlcworICAgLSBjaGFuZ2UgY2VydCBzdWJkaXIgc2VhcmNoaW5nIHRvIG1hdGNoIG5ldC1zbm1wLWNlcnQKKyAgIC0gdXBkYXRlIGtleSB0eXBlIGhhbmRsaW5nCisgICAtIGlnbm9yZSB3b3JsZCByZWFkYWJsZSBrZXlzCisgICAtIGtlZXAgdHlwZSBpbiBpbmRleGVzCisgICAtIHR3ZWFrIGNlcnQva2V5IHByaW50IGZvcm1hdAorCisyMDEwLTA0LTE0IDE3OjQ0ICByc3RvcnkKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBtYWtlIG5ldC1zbm1wLWNlcnQgZXhlY3V0YWJsZQorCisyMDEwLTA0LTE0IDEzOjEyICBqc2FmcmFuZWsKKworICAgKiAgdGVzdGluZy90ZXN0cy9TdmFjbWNvbmZpZywgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsOgorCisgICBGaXhlZCB0ZXN0cyAnUHJveHkgR0VUL1NFVCBzdXBwb3J0JyBhbmQgJ1NOTVB2MiB2YWNtIGRlbmlhbAorICAgc3VwcG9ydCcgd2l0aCB1ZHA2IHRyYW5zcG9ydC4KKwogMjAxMC0wNC0xNCAwOTo0NyAgZHRzMTIKIAogICAgKiAgd2luMzIsIHdpbjMyL2Jpbiwgd2luMzIvZGlzdCwgd2luMzIvZGlzdC9odG1saGVscCwgICAKQEAgLTI0NTIsMTAxICs0Mzg0NywxNzIgQEAKICAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZCwgd2luMzIvbGlic25tcCwgd2luMzIvbGlic25tcF9kbGwsICAgCiAgICAgICB3aW4zMi9saWJ1Y2RtaWJzLCB3aW4zMi9sb2NhbCwgd2luMzIvbmV0LXNubXAsICAgCiAgICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudCwgd2luMzIvbmV0LXNubXAvbGlicmFyeSwgd2luMzIvbmV0c25tcG1pYnMsICAKLSAgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkaywgd2luMzIvc25tcGJ1bGtnZXQsIHdpbjMyL3NubXBidWxrd2FsaywgICAKLSAgICAgIHdpbjMyL3NubXBkLCB3aW4zMi9zbm1wZGVsdGEsIHdpbjMyL3NubXBkZiwgd2luMzIvc25tcGRzZGssICAgCi0gICAgICB3aW4zMi9zbm1wZ2V0LCB3aW4zMi9zbm1wZ2V0bmV4dCwgd2luMzIvc25tcG5ldHN0YXQsICAgCi0gICAgICB3aW4zMi9zbm1wc2V0LCB3aW4zMi9zbm1wc3RhdHVzLCB3aW4zMi9zbm1wdGFibGUsIHdpbjMyL3NubXB0ZXN0LCAKLSAgICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZSwgd2luMzIvc25tcHRyYXAsIHdpbjMyL3NubXB0cmFwZCwgICAKLSAgICAgIHdpbjMyL3NubXB1c20sIHdpbjMyL3NubXB2YWNtLCB3aW4zMi9zbm1wd2FsazoKKyAgICAgICB3aW4zMi9zbm1wYnVsa2dldCwgd2luMzIvc25tcGJ1bGt3YWxrLCB3aW4zMi9zbm1wZCwgICAKKyAgICAgIHdpbjMyL3NubXBkZWx0YSwgd2luMzIvc25tcGRmLCB3aW4zMi9zbm1wZ2V0LCB3aW4zMi9zbm1wZ2V0bmV4dCwgIAorICAgICAgIHdpbjMyL3NubXBuZXRzdGF0LCB3aW4zMi9zbm1wc2V0LCB3aW4zMi9zbm1wc3RhdHVzLCAgIAorICAgICAgd2luMzIvc25tcHRhYmxlLCB3aW4zMi9zbm1wdGVzdCwgd2luMzIvc25tcHRyYW5zbGF0ZSwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwLCB3aW4zMi9zbm1wdHJhcGQsIHdpbjMyL3NubXB1c20sIHdpbjMyL3NubXB2YWNtLCAgIAorICAgICAgd2luMzIvc25tcHdhbGs6CiAKICAgIERvbid0IHRyeSB0byBTVk4tbWFuYWdlIHRoZSBXaW5kb3dzIGJhdGNoIGJ1aWxkIGluZnJhc3RydWN0dXJlCiAgICAoYWRkIHJlbGVhc2UsIGRlYnVnLCBNYWtlZmlsZSB0byB0aGUgcHJldmlvdXMgaWdub3JlIGxpc3QpCiAKIDIwMTAtMDQtMTQgMDg6MTYgIGR0czEyCiAKLSAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKIAogICAgRml4IFdpbmRvd3MgYmF0Y2ggYnVpbGQgdXNpbmcgVmlzdWFsIFN0dWRpbyB3aXRoIGR5bmFtaWMgbGlua2luZy4KICAgIFVucmVmZXJlbmNlZCBzeW1ib2wgaW50cm9kdWNlZCBieSBTVk4gcmV2aXNpb24gMTgzOTMKIAotMjAxMC0wNC0xNCAwODoxMSAgZHRzMTIKLQotICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5oOgotCi0gICBGaXggV2luZG93cyBiYXRjaCBidWlsZCB1c2luZyBWaXN1YWwgU3R1ZGlvIDIwMDggd2l0aCBQbGF0Zm9ybQotICAgU0RLIGVuYWJsZWQuCi0KIDIwMTAtMDQtMTQgMDg6MDggIGR0czEyCiAKLSAgICogIHdpbjMyL2J1aWxkLnBsLCB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oLCAgIAotICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCi0gICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKyAgICogd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaDoKIAotICAgQ0hBTkdFUzogV2luMzI6IEZpeCBiYXRjaCBidWlsZCB1c2luZyByZWNlbnQgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpby4KKyAgIENIQU5HRVM6IFdpbjMyOiBGaXggYmF0Y2ggYnVpbGQgdXNpbmcgcmVjZW50IHZlcnNpb25zIG9mIFZpc3VhbAorICAgU3R1ZGlvLgogICAgUGFydGlhbCBiYWNrIHBvcnQgb2YgU1ZOIHJldmlzaW9ucyAxNzU3MyBhbmQgMTc2OTYuCiAKLTIwMTAtMDQtMDcgMTQ6MzcgIGR0czEyCisyMDEwLTA0LTE0IDAxOjQ3ICBtYXJ6CiAKLSAgICogQ0hBTkdFUywgTkVXUzoKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIGZpeCBwZXJtcyBvbiBjcmVhdGVkIGZpbGVzIC1ydy0tLS0tLS0sIHVtYXNrKDA3NykKIAotMjAxMC0wNC0wNyAxNDoyMiAgZHRzMTIKKzIwMTAtMDQtMTMgMjI6MTUgIG1hcnoKIAotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydCwgbG9jYWwvbmV0LXNubXAtY2VydC5jb25mOgogCi0gICBtYWtlIGRlcGVuZAorICAgZml4IHBlcm1zLCBhZGQgLS1jbi8tYywgYmV0dGVyIGRhdGVzIGRlZmF1bHRzLCBzbm1wLXRscyBvcmdfdW5pdCwKKyAgIGFkZGVkIGluaXRpYWwgZHVtbXkgY29uZmlnIGZpbGUKIAotMjAxMC0wNC0wNyAxNDoxMiAgZHRzMTIKKzIwMTAtMDQtMTMgMTQ6MjEgIG1hcnoKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIGZpeGVzIGZvciBzaG93IGNtZHMsIGNtZGxpbmUsIGhlbHAKIAotMjAxMC0wNC0wNyAxNDowOCAgZHRzMTIKKzIwMTAtMDQtMTMgMDI6MTcgIHJzdG9yeQogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CiAKLSAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgYWRkIHN1cHBvcnQgZm9yIGtleStjZXJ0IGluIC5wZW0gZmlsZXM7IG1pc2MgdHdlYWtzCisKKzIwMTAtMDQtMTAgMjM6MjQgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIGJ1aWxkIGZpeCBmb3IgQzg5IGNvbXBpbGVycyAoZS5nLiBvbiBIUC1VWCAxMC4yMCkKKworMjAxMC0wNC0xMCAyMjoyNSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgaW5pdGlhbCBjdXQgYXQgdGxzdG1DZXJ0VG9UU05UYWJsZQorCisyMDEwLTA0LTEwIDIyOjI0ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg6CisKKyAgIGFkZCBkZWZpbmUgb2YgbWF4IGhhc2ggY29uc3RhbnQKKworMjAxMC0wNC0xMCAyMjoyNCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmM6CisKKyAgIHVzZSBjZXJ0IHV0aWwgY2hlY2sgZm9yIGZpbmdlcnByaW50IGxlbi9hbGdvcml0aG0KKworMjAxMC0wNC0xMCAxMjo1OSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHNob3cgY21kIGZpeGVzCisKKzIwMTAtMDQtMDkgMjE6MzIgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmYWlybHkgZnVuY3Rpb25hbCAobm9uLWludGVyYWN0aXZlKSAtIGJlIGl0IGtub3duOiB0aGVyZSBhcmUgYnVncworCisyMDEwLTA0LTA5IDIwOjU0ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oOgorCisgICBtZXJnZSBzb21lIHRhYmxlX2RhdGEuY29uZiBjaGFuZ2VzOyByZW1vdmUgdW51c2VkIGNvZGUgYW5kIGEKKyAgIGJ1bmNoIG9mIHZlcmJvc2UgY29tbWVudHMKKworMjAxMC0wNC0wOCAxNDo1NyAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMtdXBkYXRlOgorCisgICB1c2UgZnVsbCBwYXRoCisKKzIwMTAtMDQtMDggMTA6NTUgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg6CisKKyAgIENoZWNrIHJlc3VsdHMgb2YgY2FsbHMgdG8gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlIGFuZCBsb2cKKyAgIGFuIGVycm9yLgorICAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcmVsYXRlIHZhcmlvdXMgJ2M2NCAzMiBiaXQgY2hlY2sgZmFpbGVkJworICAgZXJyb3JzIHdpdGggc3BlY2lmaWMgY291bnRlci4KKworMjAxMC0wNC0wOCAwMTowOSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oOgorCisgICBhZGQgcHJvdG90eXBlIGZvciBuZXcgZnVuY3Rpb24KKworMjAxMC0wNC0wOCAwMTowNSAgcnN0b3J5CisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogdHJhbnNsYXRlIE5PU1VDSCovRU5ET0ZNSUIgZXJyb3JzIGR1cmluZyBSRVNFUlZFMQorICAgdG8gTk9DUkVBVElPTgorCisyMDEwLTA0LTA4IDAwOjU2ICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIE5FV1M6IHNubXBkOiB0YWJsZV9kYXRhL3RkYXRhIG5leHQgaGFuZGxlciB3aWxsIG5vdCBiZSBjYWxsZWQKKyAgIGR1cmluZyBnZXQKKyAgIHByb2Nlc3NpbmcgaWYgbm8gdmFsaWQgcm93cyBhcmUgZm91bmQgZm9yIHRoZSBoYW5kbGVyCisKKzIwMTAtMDQtMDggMDA6NTYgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKworICAgTkVXUzogc25tcGQ6IGFnZW50IHdpbGwgbm8gbG9uZ2VyIGNhbGwgdGFibGUgaGFuZGxlcnMgaWYgYSBzZXQKKyAgIHJlcXVlc3QgZm9yCisgICB0aGUgaGFuZGxlciBoYXMgaW52YWxpZCBpbmRleGVzCisgICBDSEFOR0VTOiBzbm1wZDogZG9uJ3QgY2FsbCBjbGVhbnVwIG9uIGZpcnN0IHJlcXVlc3Qgb24gYmFkCisgICBpbmRleGVzLiBpbnN0ZWFkLAorICAgc2V0IGFjdHVhbCBlcnJvciBsYXRlciwgYW5kIGZyZWUgcmVxdWVzdCBkYXRhIHNldHMgb24gZmlyc3QKKyAgIHJlcXVlc3QgZm9yIHNldHMKKworMjAxMC0wNC0wOCAwMDo1NiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgZnVuY3Rpb24gdG8gdmFsaWRhdGUgZmluZ2VycHJpbnQgdmFyYmluZAorCisyMDEwLTA0LTA3IDIyOjU2ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBTb2xhcmlzIHRyIGRvZXNuJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIgcmFuZ2VzIHJlbGlhYmx5IChzZWUgdGhlCisgICBhdXRvY29uZiBtYW51YWwpLCBjaGFuZ2UgdGhlIGV4cHJlc3Npb24gdG8gb25lIHRoYXQgaXMgc2ltcGxlCisgICBlbm91Z2ggdG8gYiBzdXBwb3J0ZWQuCiAKIDIwMTAtMDQtMDcgMTQ6MDUgIGR0czEyCiAKQEAgLTI1NTQsMjcgKzQ0MDIwLDUxMCBAQAogCiAgICBJbnNlcnQgdGhlIGNhY2hlIGhlbHBlciBjb3JyZWN0bHkuCiAKKzIwMTAtMDQtMDcgMTA6NDAgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGFkZCBmdW5jdGlvbnMgdG8gcmVtb3ZlIGxpc3Qvcm93IGRhdGEgZnJvbQorICAgcmVxdWVzdCBsaXN0CisKKzIwMTAtMDQtMDcgMTA6NDAgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgaWZkZWYgdmFyIGRlY2wgZm9yIHZhcnMgb25seSB1c2VkIGluIGxhdGVyIGlmZGVmIGJsb2NrCisKKzIwMTAtMDQtMDcgMTA6NDAgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCwgc25tcGxpYi9jaGVja192YXJiaW5kLmMsICAgCisgICAgICBzbm1wbGliL3NubXAtdGMuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYWRkIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIFJvd1N0YXR1cyBhbmQKKyAgIFN0b3JhZ2VUeXBlIHZhcmJpbmRzCisgICAtIGFsc28gcmVtb3ZlIHNvbWUgZHVwbGljYXRlIGNvZGUgYW5kIGZpeCBjb21tZW50cyBpbmRlbnQgbWFuZ2xlZAorCisyMDEwLTA0LTA3IDEwOjM5ICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy11cGRhdGUsIG1hbi9taWIyYy11cGRhdGUuMS5kZWY6CisKKyAgIHVwZGF0ZSBtYW4gcGFnZTsgZml4IHNoZWxsIHJlZGlyZWN0OyBjcmVhdGUgZXhhbXBsZSByY2ZpbGUgaWYKKyAgIG1pc3NpbmcKKworMjAxMC0wNC0wNyAwNzoxNSAgbWFnZnIKKworICAgKiBhcHBzL2FnZW50eHRyYXAuYzoKKworICAgVXNlIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyBpbnN0ZWFkIG9mIERJU0FCTEVfTUlCX0xPQURJTkcKKworMjAxMC0wNC0wNyAwMDozOCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogT25seSBlbmFibGUgaG9zdFN3SW5zdCBycG0gc3VwcG9ydCBvbiBsaW51eCBob3N0cworICAgd2l0aCBsaWJycG0uIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gYnVpbGQgb24gbm9uLXJwbSBsaW51eAorICAgZGlzdHJpYnV0aW9ucy4KKworMjAxMC0wNC0wNyAwMDoxNCAgbWFnZnIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm0sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1hdXRoLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtcHJpdiwgdGVzdGluZy90ZXN0cy9UMDUwc25tcHYzdHJhcCwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlLCB0ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExMWFnZW50eHNldCwgdGVzdGluZy90ZXN0cy9UMTEyYWdlbnR4c2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogQ2hhbmdlIHRoZSB0ZXN0IHN1aXRlIHRvIHdvcmsgZXZlbiBpZiBtaWIKKyAgIGxvb2t1cCBpcyBkaXNhYmxlZC4KKworMjAxMC0wNC0wNyAwMDoxMSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNjoKKworICAgQ2hlY2sgZm9yIGNvbTJzZWM2LCBub3QgY29tMnNlYy4KKworMjAxMC0wNC0wNiAyMjo1MSAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgTW92ZSBkaXJlY3RvcnkgY3JlYXRpb24gYmVmb3JlIHRoZSBkaXJlY3RvcmllcyBhcmUgdXNlZC4KKwogMjAxMC0wNC0wNiAxMTowMyAgZHRzMTIKIAogICAgKiBGQVE6CiAKICAgIFB5dGhvbiBpcyBhcHBhcmVudGx5IGNsaWVudC1zaWRlIG9ubHkuCiAKLTIwMTAtMDQtMDYgMDg6NTYgIGR0czEyCisyMDEwLTA0LTA2IDEwOjA2ICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgbWlicy9VQ0QtU05NUC1NSUIudHh0OgorICAgKiBhZ2VudC9zbm1wZC5jOgogCi0gICBORVdTOiBzbm1wZDogTGF0Y2ggbGFyZ2UtZGlzayBzdGF0aXN0aWNzIGF0IDJUYiAocmF0aGVyIHRoYW4KLSAgIHdyYXBwaW5nLgorICAgU2V0IHN1cHBsZW1lbnRhcnkgZ3JvdXBzIGJlZm9yZSBjaGFuZ2luZyBVSUQKKyAgICh3aGljaCBwcm9iYWJseSBpbnZvbHZlcyBnaXZpbmcgdXAgcHJpdmlsZWdlcykKIAotMjAxMC0wMy0yOSAxNToyNiAgZHRzMTIKKzIwMTAtMDQtMDYgMDg6NTcgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIHNubXBsaWIvcGFyc2UuYzoKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OgogCi0gICBJbmNsdWRlIE1JQiBkaXJlY3Rvcnkgc2VhcmNoIHBhdGggaW4gcmVwb3J0cyBvZiBtaXNzaW5nIE1JQgotICAgZmlsZXMuCi0gICBJbmNsdWRlIGNvbmZpZyBmaWxlIHNlYXJjaCBwYXRoIGluIHJlcG9ydHMgb2YgbWlzc2luZyBhY2Nlc3MKLSAgIGNvbnRyb2wgc2V0dGluZ3MuCisgICBEb2N1bWVudCBsYXJnZS1kaXNrIHN0YXRpc3RpY3MgYXMgbGF0Y2hpbmcgYXQgMlRiIChyYXRoZXIgdGhhbgorICAgd3JhcHBpbmcpLgorCisyMDEwLTA0LTA2IDAxOjUyICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYywgbWFuL21pYjJjLjEuZGVmOgorCisgICBORVdTOiBtaWIyYzogbWliMmMgY2FuIG5vdyBvcHRpb25hbGx5IHJ1biBzZWQgb24gZ2VuZXJhdGVkIGNvZGUKKworMjAxMC0wNC0wNiAwMTo0OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNvbnZlcnQgQysrIGNvbW1lbnRzIHRvIEMgY29tbWVudHMKKworMjAxMC0wNC0wNiAwMTo0OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIG1vdmUgcHRyIGNoZWNrIGJlZm9yZSBwcnQgdXNlCisKKzIwMTAtMDQtMDYgMDE6NDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBmaWxlbmFtZSB0byBkZWJ1ZyBvbiBuZXcgY2VydHM7IG1ha2Ugc3RhdGljIGZ1bmMgdG8gcmV0dXJuCisgICBtb2RlIG5hbWVzCisKKzIwMTAtMDQtMDYgMDA6NDcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGFsbG93IGEgZm91bmQgZmluZ2VycHJpbnQgc2VsZi1zaWduZWQgY2VydCBmb3Igbm93OyBldmVudHVhbGx5CisgICBuZWVkIHRvIHJlc3BlY3QgdGhlIE1JQiBjb25maWcgdGFibGUKKworMjAxMC0wNC0wNiAwMDoxMiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgbWtkaXIgc25tcGxpYi90cmFuc3BvcnRzIHdoZW4gRE5FIGZvciBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UKKyAgIGRpcgorCisyMDEwLTA0LTA2IDAwOjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZW1vdmUgdW51c2VkIHZhcnMKKworMjAxMC0wNC0wNiAwMDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCisyMDEwLTA0LTA2IDAwOjExICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZXJyb3IgY29kZSBjbGVhbnVwIGZvciB0bHNiYXNlX3dyYXB1cF9yZWN2CisKKzIwMTAtMDQtMDUgMjM6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbW9yZSBiZXR0ZXIgZXJyb3IvZGVidWcgY29kZXMKKworMjAxMC0wNC0wNSAyMzowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBjb21tZW50cyBmcm9tIHRoZSBmdXR1cmUtUkZDIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjsgdXNlCisgICBmbGFncyBmb3Igc2VydmVyL2NsaWVudCBzcGVjaWZpY2F0aW9uIGZvciBleHBhbnNpb24KKworMjAxMC0wNC0wNSAyMzowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgZm9yIHVzYWdlIGNvbnN0cmFpbnRzCisKKzIwMTAtMDQtMDUgMjM6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW92ZSBmdW5jdGlvbiBwcm90ZWN0aW9uIGxvZ2ljIGluIGEgdG9wLWxldmVsIGNoZWNrCisKKzIwMTAtMDQtMDIgMTY6MzYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGZpeCBpbml0IG9yZGVyaW5nCisKKzIwMTAtMDQtMDIgMTY6MzYgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtdiB0bHNiYXNlIGluaXQgZnVuY3Rpb24gdG8gYSBwcm9wZXIgY3RvciBmb3IgYXV0by1jYWxsaW5nCisKKzIwMTAtMDQtMDIgMTY6MzYgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ0hBTkdFUzogZ2VuZXJhdGUgdGhlIHRyYW5zcG9ydCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBsaXN0CisgICBkeW5hbWljYWxseSBhbmQgdXNlIGl0CisKKzIwMTAtMDQtMDIgMTY6MzUgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLCBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYywgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQWERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFNTSERvbWFpbi5jLCBzbm1wbGliL3NubXBTVEREb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFNvY2tldEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3RyYW5zcG9ydHMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTVEREb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBtb3ZlZCB0cmFuc3BvcnQgY29kZSBpbnRvIGEgc2VwYXJhdGUgc3ViZGlyZWN0b3J5IGluCisgICBzbm1wbGliCisKKzIwMTAtMDQtMDIgMDk6MDIgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmM6CisKKyAgIERvIG5vdCBhdHRlbXB0IHRvIGNoZWNrIHNpemVvZiB2b2lkIHRvIG9idGFpbiB0aGUgYW1vdW50IG9mCisgICBtZW1vcnkgdG8gY29weS4KKworMjAxMC0wNC0wMSAxNzoxMSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oOgorCisgICBpbnN0ZWFkIG9mIGZ3ZCBkZWNsYXJlcywgcmVxdWlyZSBvdGhlciBoZWFkZXIKKworMjAxMC0wNC0wMSAxNzoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nCisKKzIwMTAtMDQtMDEgMTc6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIG91dGRhdGVkIGRlYnVnIG1zZworCisyMDEwLTA0LTAxIDE3OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHVzZSBjZXJ0YXBpIHRvIGZpbmQgY2VydHMva2V5cworCisyMDEwLTA0LTAxIDE0OjQwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlZ2lzdGVyIGV4dHJhWDUwOVN1YkRpciB0b2tlbgorCisyMDEwLTA0LTAxIDE0OjE4ICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIGNoZWNrIHB0ciBiZWZvcmUgdXNlCisKKzIwMTAtMDQtMDEgMTQ6MTggIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgY2hlY2sgcHRyIGJlZm9yZSB1c2UKKworMjAxMC0wNC0wMSAxMzoxMyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIGFkZCBwZXJzaXN0ZW50IHN0b3JhZ2U7IHRva2VuIGZvciBjcmVhdGluZyBlbnRyaWVzIGluIHNubXBkLmNvbmY7CisgICBmaXggaW5kZXgKKworMjAxMC0wNC0wMSAxMzoxMiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBORVdTOiBzbm1wbGliOiBuZXcgY2VydGlmaWNhdGUgYXBpIHRvIHN1cHBvcnQgdGxzL2R0bHMKKworMjAxMC0wNC0wMSAxMzoxMiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBDSEFOR0VTOiBhZGQgZnVuY3Rpb25zIHRvIGdldCBmaW5nZXJwcmludCBmcm9tIGNlcnQgYW5kIGxvZworICAgb3BlbnNzbCBlcnJzCisKKzIwMTAtMDQtMDEgMTI6NDYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6CisKKyAgIGZpeCB0eXBvCisKKzIwMTAtMDQtMDEgMTA6MzMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBwcmUtQzkwIGNvbXBpbGVycy4KKworMjAxMC0wNC0wMSAxMDowMSAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBDSEFOR0VTOiBtaWIyYzogdGFibGVfZGF0YSB0ZW1wbGF0ZSBlbmhhbmNlbWVudHMKKyAgIC0gYWRkIGVycm9yIGNoZWNrcyBkdXJpbmcgdGFibGUgaW5pdAorICAgLSBjcmVhdGUgY2FjaGUgZWFybGllciBzbyB3ZSBjYW4gYmFpbCBvbiBmYWlsdXJlCisgICAtIGFkZCBvcHRpb24gdG8gY3JlYXRlL2RlbGV0ZSByb3cgdy9vdXQgYWRkaW5nL3JlbW92aW5nIGZyb20KKyAgIGNvbnRhaW5lcgorCisyMDEwLTA0LTAxIDEwOjAwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmg6CisKKyAgIGFkZCBoZWxwZnVsIHBhcmFtIG5hbWVzIGFzIGhpbnRzIGluIHByb3RvdHlwZQorCisyMDEwLTA0LTAxIDEwOjAwICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIHNlYXJjaCBmb3IgY29udGFpbmVyIHNwZWNpZmljIGNvbnRhaW5lciBiZWZvcmUgZ2VuZXJpYworCisyMDEwLTA0LTAxIDEwOjAwICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaCwgc25tcGxpYi9kaXJfdXRpbHMuYywgICAKKyAgICAgIHNubXBsaWIvZmlsZV91dGlscy5jOgorCisgICBORVdTOiBzbm1wbGliOiBlbmhhbmNlIGZpbGUgdXRpbHMgYW5kIGRpciB1dGlscworICAgLSBhZGQgb3B0aW9uYWwgc3RhdHMgc3RydWN0IHRvIG5ldHNubXBfZmlsZQorICAgLSBnZW5lcmFsaXplIGRpciBjb250YWluZXIgZmlsdGVyLCBhZGQgY29udGV4dCB0byBjYWxsYmFjaworICAgLSBhZGQgb3B0aW9uIHRvIHN0b3JlIG5ldHNubXBfZmlsZXMgKHcvc3RhdHMpIGluIGNvbnRhaW5lcgorICAgaW5zdGVhZCBvZiBqdXN0IG5hbWUKKworMjAxMC0wNC0wMSAxMDowMCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBhZGQgcHJvdG90eXBlIHRvIGhlYWRlcjsgY2hlY2sgcHRyIGJlZm9yZSBkZXJlZmVyZW5jaW5nCisKKzIwMTAtMDMtMzEgMTU6MzQgIGpzYWZyYW5laworCisgICAqICBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvc25tcC1icmlkZ2UtbWliLCBtYW4vTWFrZWZpbGUuaW4sICAgCisgICAgICBtYW4vc25tcC1icmlkZ2UtbWliLjEsIG1pYnMvQlJJREdFLU1JQi50eHQsIG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBtaWJzL01ha2VmaWxlLm1pYjoKKworICAgTkVXUzogbWlzYzogUEFUQ0g6IDI5NTI3MDg6IGZyb20gSmVucyBPc3RlcmthbXA6IEFkZGVkIFBlcmwKKyAgIGltcGxlbWVudGF0aW9uIG9mIEJSSURHRS1NSUIKKworMjAxMC0wMy0zMSAwMjoxMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHByb3BlciBwYWNrZXQgbGFiZWxpbmcgZm9yIERUTFNVRFAKKworMjAxMC0wMy0zMSAwMjoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgdXNlIGNvbW1vbiBjb250ZXh0IGNyZWF0aW9uIGNvZGUKKworMjAxMC0wMy0zMCAyMzoyNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2hhbmdlIFRMUyBtZXRob2QgdG8gVExTdjEgZnJvbSBTU0x2MjMKKworMjAxMC0wMy0zMCAyMzoyMyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3ZlIG1vcmUgY29tbW9uIGRhdGEgYW5kIGZ1bmN0aW9uYWxpdHkgaW50byB0aGUgVExTIGJhc2UKKworMjAxMC0wMy0zMCAyMzoyMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbWlub3IgVExTIGNvZGUgY2xlYW51cAorCisyMDEwLTAzLTMwIDIwOjI4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmV3b3JrIGlmKCkgd3JhcHBpbmcgZm9yIGxlc3MgY29uZnVzaW9uIGluIGVycm9yIGhhbmRsaW5nCisKKzIwMTAtMDMtMzAgMjA6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb2RlIGNvbnNvbGlkYXRpb24gaW4gc3RhcnRfbmV3X2NhY2hlZF9jb25uZWN0aW8KKworMjAxMC0wMy0zMCAyMDoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJlbmFtZSBnZW5lcmljICdiaW8nIHBvaW50ZXIgdG8gJ3JlYWRfYmlvJyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5CisKKzIwMTAtMDMtMzAgMjA6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBtb3ZlIGJ1ZmZlcmVkIGRhdGEgY3JlYXRpb24gdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgcmV1c2UKKworMjAxMC0wMy0zMCAxNzo1MiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGluaXRpYWwgY2VydCBnZW4gd3JhcHBlciBzY3JpcHQgLSBub3Qgd29ya2luZworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY2xlYW4gdXAgZXJyb3Igb3V0cHV0IHNvIGl0IGRvZXNuJ3QgcmVwb3J0IHdhbnRfcmVhZCBhbmQKKyAgIHdhbnRfd3JpdGUgZXJyb3JzCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZW5hbWluZyBvZiBzZW5kaW5nIGZ1bmN0aW9uIGZvciBjbGFyaXR5IGFuZCBjaGVjayBvbmUgbW9yZQorICAgbG9jYXRpb24gZm9yIG5lZWRlZCBvdXRnb2luZyBwYWNrZXRzCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBhZGRlZCBkdGxzdWRwIHRyYWNpbmcgdG9rZW5zCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDoKKworICAgQ0hBTkdFUzogYWRkZWQgYSBuZXcgREVCVUdUUkFDRVRPSygpIG1hY3JvCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBiZXR0ZXIgY29tbWVudHMgYW5kIG1vcmUgd29yayBvbiBzZW5kaW5nIGJ1ZmZlcmVkIGRhdGEgaW4gdGhlCisgICByaWdodCBzcG90cworCisyMDEwLTAzLTMwIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggYXJndW1lbnRzIHRvIGdldF9jb21tb25OYW1lCisKKzIwMTAtMDMtMzAgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBiZWdpbm5pbmcgb2YgY2FjaGluZyBvZiBwYWNrZXRzIGJlZm9yZSB0aGV5IGNhbiBiZSBzZW50IHZpYSBEVExTCisKKzIwMTAtMDMtMzAgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBoYW5kbGUgU1NMX1dBTlRfUkVBRC9XUklURSBiZXR0ZXI7IHN0aWxsIG5lZWQgdG8gYnVmZmVyIG91dGdvaW5nCisgICB3cml0ZSBkYXRhCisKKzIwMTAtMDMtMzAgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtaW5vciBjaGFuZ2UgdG8gb3V0cHV0IGVycm9yIHByaW50aW5nCiAKIDIwMTAtMDMtMjkgMTU6MjAgIGR0czEyCiAKQEAgLTI1ODYsNiArNDQ1MzUsMTkgQEAKICAgIE5vdGUgdGhhdCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mCiAgICBleGlzdGluZyBhY2Nlc3MgY29udHJvbCBjb25maWd1cmF0aW9ucy4KIAorMjAxMC0wMy0yOSAxNToxNiAgYnZhc3NjaGUKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBwZXJsOgorICAgTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfcmVxdWVzdF9pbmZvUHRyOjpnZXRWYWx1ZSgpOiBkb24ndCByZXR1cm4KKyAgIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBvbiB0aGUgc3RhY2suIEhvdyBjYW4gdGhpcyBoYXZlIHdvcmtlZAorICAgcmVsaWFibHkgPz8KKyAgIENIQU5HRVM6IHBlcmw6CisgICBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9yZXF1ZXN0X2luZm9QdHI6OnNldFZhbHVlKCksCisgICBBU05fQ09VTlRFUjY0OiBmaXhlZCBidWcgdGhhdCBjb3VsZCBjYXVzZSB0aGlzIG1ldGhvZCB0byBmYWlsCisgICBldmVuIHdoZW4gYSB2YWxpZCBudW1iZXIgd2FzIHByb3ZpZGVkLgorCiAyMDEwLTAzLTI5IDE1OjE1ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcHVzbS5jOgpAQCAtMjU5NCw2ICs0NDU1NiwxNDcgQEAKICAgIHRyYXBzLgogICAgUmVwb3J0ZWQgYnkgU3Jpa2FwaWxhbiBHYW5kaGkKIAorMjAxMC0wMy0yOSAxMjo0NiAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorCisgICBDYXRjaCBzdGRlcnIgb24gV2luZG93cyB0b28uCisKKzIwMTAtMDMtMjkgMTE6NDggIGJ2YXNzY2hlCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQnVpbGRzIGFnYWluIHdpdGggcHJlLUM5MCBjb21waWxlcnMuCisKKzIwMTAtMDMtMjkgMTE6MTkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBwZXJsL09JRC9PSUQueHMsICAgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZGVzdHJveWluZyBhCisgICBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBvYmplY3QuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBmYWlsdXJlIG9mCisgICBjcmVhdGluZyBhIE5ldFNOTVA6Ok9JRCBvYmplY3QuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSB0aGUKKyAgIE5ldFNOTVA6Ok9JRDo6Z2V0dGFibGUoKSBzdWJyb3V0aW5lLgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgdHJpZ2dlcmVkIGJ5CisgICB0aGUgaW1wbGVtZW50YXRpb24gb2YgTmV0U05NUDo6U05NUC4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGEgUERVIHByb2Nlc3NpbmcKKyAgIGVycm9yIGluIE5ldFNOTVA6OlNOTVAuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBtZW1vcnkgbGVha3MgdHJpZ2dlcmVkIGJ5IGNyZWF0aW5nIGFuIFNOTVB2MworICAgc2Vzc2lvbiB2aWEgTmV0U05NUDo6U05NUC4KKyAgIAorICAgQWxzbyBmaXhlZCB0aGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3NlcyB0cmlnZ2VyZWQgYnkKKyAgIGFkZGluZyBhIHZhcmJpbmQgdG8gYSBQRFUgdmlhIE5ldFNOTVA6OlNOTVAgaW50cm9kdWNlZCBhIGZldyBkYXlzCisgICBhZ28uCisgICAKKyAgIFRoZSBidWdzIG1lbnRpb25lZCBhYm92ZSBoYXZlIGJlZW4gZm91bmQgYnkgaW5zcGVjdGluZyB0aGUgb3V0cHV0CisgICBvZiB0aGUgZm9sbG93aW5nIHNoZWxsIGNvbW1hbmQ6CisgICBjZCBwZXJsICYmIHZhbGdyaW5kIC0tdHJhY2UtY2hpbGRyZW49eWVzIC0tbGVhay1jaGVjaz1mdWxsIG1ha2UKKyAgIHRlc3QKKworMjAxMC0wMy0yOSAxMDo1OSAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorCisgICBTd2l0Y2hlZCBiYWNrIHRvIHRoZSBwcmV2aW91cyB3YXkgb2Ygc3RhcnRpbmcgcHJvY2Vzc2VzCisgICBhc3luY2hyb25vdXNseSBiZWNhdXNlIGl0IGlzIG1vcmUgcmVsaWFibGUuCisKKzIwMTAtMDMtMjkgMDk6MjcgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKworICAgRG8gbm90IG9ubHkgc2F2ZSBzbm1wZCAvIHNubXB0cmFwZCBsb2dzIGJ1dCBhbHNvIHRoZSBzdGRvdXQgLworICAgc3RkZXJyIG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhlc2UgcHJvY2Vzc2VzLgorCisyMDEwLTAzLTI4IDE2OjA5ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisKKyAgIENoYW5nZXMgaW4gcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKyAgIC0gQWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbiAtZCBmb3Igc25tcGQgYW5kIHNubXB0cmFwZC4KKyAgIC0gc25tcGQgYW5kIHNubXB0cmFwZCBvdXRwdXQgaXMgbm93IHNhdmVkIHRvIGEgbG9nIGZpbGUgKG9uZSBwZXIKKyAgIHRlc3QpLgorICAgLSBSZXdyb3RlIFBlcmwgY29kZSBmb3Igc3RhcnRpbmcgdGhlIHNubXBkL3NubXB0cmFwZCBwcm9jZXNzZXMKKyAgIHN1Y2ggdGhhdCB0aGUgc2FtZSBjb2RlIHdvcmtzIG9uIFVuaXggYW5kIG9uIFdpbmRvd3MuCisKKzIwMTAtMDMtMjggMTM6MzcgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3Rvb2xzLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBhZGRlZCB0aGUgZnVuY3Rpb25zIG5ldHNubXBfbWFsbG9jKCksCisgICBuZXRzbm1wX2NhbGxvYygpLCBuZXRzbm1wX3JlYWxsb2MoKSwgbmV0c25tcF9zdHJkdXAoKSBhbmQKKyAgIG5ldHNubXBfZnJlZSgpLgorICAgQ0hBTkdFUzogV2luMzI6IHNubXBsaWI6IHJlbW92ZWQgdGhlIHRyb3VibGVzb21lICNkZWZpbmUgbWFsbG9jCisgICBuZXRzbm1wX21hbGxvYyBldGMuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGNhbGxpbmcgZnVuY3Rpb25zIGZyb20KKyAgIHRoZSBOZXQtU05NUCBETEwgZnJvbSBDIG9yIEMrKyBjb2RlIHRoYXQgaXMgYmVpbmcgbGlua2VkIGFnYWluc3QKKyAgIGFub3RoZXIgdmVyc2lvbiBvZiB0aGUgTVNWQyBydW50aW1lIERMTCB0aGFuIHRoZSBOZXQtU05NUCBETEwsCisgICBhbmQgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSB0aGF0IHdpbGwgYmUgZnJlZWQgYnkgdGhlIE5ldC1TTk1QCisgICBETEwsIHlvdSB3aWxsIGVpdGhlciBoYXZlIHRvIGNhbGwgdGhlIE5ldC1TTk1QIG1lbW9yeSBhbGxvY2F0aW9uCisgICBmdW5jdGlvbnMgZXhwbGljaXRseSBvciByZWRlZmluZSBtYWxsb2MoKSBldGMuIHlvdXJzZWxmLgorCisyMDEwLTAzLTI4IDEyOjQ2ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBGaXhlZCBhIHJlY2VudGx5IHJlaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTAzLTI3IDE4OjQyICBidmFzc2NoZQorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBBZGRlZCBhIGNoZWNrIGZvciBpbnZvY2F0aW9uIG9mIGNhbGxvYygpIGZyb20gWFNVQnMuCisKKzIwMTAtMDMtMjYgMTk6MTYgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBwZXJsL09JRC9PSUQueHMsICAgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODM2OCBhbmQgcjE4MzY5OiBtYWRlIHN1cmUgdGhhdCB0aGUgTmV0LVNOTVAgUGVybAorICAgZXh0ZW5zaW9ucyBjb21waWxlIHdpdGhvdXQgdHJpZ2dlcmluZyBwcmVwcm9jZXNzb3Igd2FybmluZ3MgYWJvdXQKKyAgIHJlZGVmaW5pbmcgbWFsbG9jIGV0Yy4gbm9yIHRyaWdnZXIgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3JzIG9uCisgICBXaW5kb3dzLgorCisyMDEwLTAzLTI2IDE0OjQ0ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jOgorCisgICBSZWZhY3RvcmluZzogaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbjoKKyAgIG5ldHNubXBfc2V0X25vbl9ibG9ja2luZ19tb2RlKCkuCisKKzIwMTAtMDMtMjYgMTE6NTggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYywgIAorICAgICAgIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIAorICAgICAgICBzbm1wbGliL2ludDY0LmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYywgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3RleHRfdXRpbHMuYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdXNpbmcgdmFyaWFibGVzIG9mIHR5cGUgY2hhciBhcyBhbgorICAgYXJyYXkgc3Vic2NyaXB0LiBOb3RlOiBhcyBmYXIgYXMgSSBrbm93IHRoZXNlIHdhcm5pbmdzIGFyZSBvbmx5CisgICByZXBvcnRlZCB3aGVuIHVzaW5nIHRoZSBDeWd3aW4gZ2xpYmMgaGVhZGVycy4KKworMjAxMC0wMy0yNiAxMDo0MSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2luY2x1ZGUgZGlyZWN0aXZlIChvbiBXaW5kb3dzIE1TVkMgd2FzIGNvbXBsYWluaW5nCisgICBhYm91dCBzaXplX3Qgd2hpbGUgcHJvY2Vzc2luZyA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4pLgorCiAyMDEwLTAzLTI1IDIwOjA3ICBidmFzc2NoZQogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmM6CkBAIC0yNjA0LDYgKzQ0NzA3LDExNyBAQAogICAgY29ubmVjdCB0byBhbiBBZ2VudFggbWFzdGVyIGFnZW50IHJ1bm5pbmcgb24gdGhlIHNhbWUgc3lzdGVtCiAgICB3aXRob3V0IGhhdmluZyB0byBzZXQgdGhlIHZhcmlhYmxlIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLRVQuCiAKKzIwMTAtMDMtMjUgMTY6MTEgIGJ2YXNzY2hlCisKKyAgICogIHBlcmwvT0lEL09JRC54cywgcGVybC9TTk1QL1NOTVAueHMsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBwZXJsOiBmaXhlZCBzZXZlcmFsICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9ycy4KKyAgIE5vdGU6IHNpbmNlIGNhbGxvYygpIGlzIG5vdCByZWRlZmluZWQgaW4gPENPUkUvWFNVQi5oPiB1c2luZworICAgY2FsbG9jKCkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBsZWFkcyB0byAiRnJlZSB0byB3cm9uZyBwb29sIgorICAgZXJyb3JzLCBhdCBsZWFzdCBvbiBXaW5kb3dzLgorCisyMDEwLTAzLTI1IDE2OjA0ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IG1hZGUgYnVpbGRpbmcgbW9yZSBzaWxlbnQgYnkgbm90CisgICByZWRlZmluaW5nIG1hbGxvYygpIG9yIGZyZWUoKSBkdXJpbmcgY29tcGlsYXRpb24gb2YgUGVybAorICAgZXh0ZW5zaW9ucyAocmVzdWx0ZWQgaW4gd2FybmluZ3MgYWJvdXQgbWFsbG9jKCkgLyBmcmVlKCkKKyAgIHJlZGVmaW5pdGlvbiBpbiB0aGUgUGVybCBoZWFkZXIgQ09SRS9YU1VCLmgpLgorCisyMDEwLTAzLTI1IDE1OjA2ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIHBlcmwvU05NUC9TTk1QLnhzLCAgIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogQlVHOiAyOTY5ODcyOiBtYWRlIHN1cmUgdGhhdCBTT0NLX1NUQVJUVVAgaXMgaW52b2tlZAorICAgYmVmb3JlIGluaXRfYWdlbnQoKSBvbiBXaW5kb3dzLgorCisyMDEwLTAzLTI1IDEzOjM5ICBqc2FmcmFuZWsKKworICAgKiAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBhcHBzL3NubXBzZXQuYywgYXBwcy9zbm1wc3RhdHVzLmMsICAgCisgICAgICBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYXAuYywgICAKKyAgICAgIGFwcHMvc25tcHVzbS5jLCBhcHBzL3NubXB2YWNtLmMsIGFwcHMvc25tcHdhbGsuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIFVzZSBtYWNyb3MgaW5zdGVhZCBvZiBtYWdpYyBudW1iZXJzIGFzIG5ldHNubXBfcGFyc2VfYXJncyByZXR1cm4KKyAgIGNvZGVzLgorCisyMDEwLTAzLTI1IDEzOjMwICBidmFzc2NoZQorCisgICAqICB3aW4zMi9Db25maWd1cmUsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogc2ltcGxpZmllZCB0aGUgYnVpbGQgcHJvY2VzcyBieQorICAgcmVtb3ZpbmcgdGhlIGZpbGUgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4uIFdoaWNoIElQdjYKKyAgIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZnJvbSBuZXRzbm1wLmRsbCBpcyBub3cgZGV0ZXJtaW5lZCBieQorICAgd2hpY2ggb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIERMTCBoYXZlIGJlZW4gZGVjbGFyZWQgYXMKKyAgIE5FVFNOTVBfSU1QT1JULgorCisyMDEwLTAzLTI0IDIwOjExICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfZW51bS5jOgorCisgICBkb24ndCB1c2UgcGFzc2VkIHB0ciBhcyB0ZW1wIHZhcjsgdXNlIHNubXBfZW51bV9saXN0cyBpbiBpbml0CisgICB0ZXN0CisKKzIwMTAtMDMtMjQgMjA6MTAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg6CisKKyAgIGFkZCBORVRTTk1QX0RTX0xJQl9DRVJUX0VYVFJBX1NVQkRJUgorCisyMDEwLTAzLTI0IDIwOjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgbW92ZSBjZXJ0IGluaXQgZWFybGllciAoaGF2ZSB0bHNfYm9vdHN0cmFwIGNhbGwgaXQpCisKKzIwMTAtMDMtMjQgMjA6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmdzOyBhZGQgY2VydCBkZWJ1ZyBtc2dzIGluIHNlcnZlciBzZXR1cDsgZnJlZQorICAgc3NsIGxvZyBkYXRhCisKKzIwMTAtMDMtMjQgMTA6NDcgIGpzYWZyYW5laworCisgICAqICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIGFwcHMvc25tcHNldC5jLCBhcHBzL3NubXBzdGF0dXMuYywgICAKKyAgICAgIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhcC5jLCAgIAorICAgICAgYXBwcy9zbm1wdXNtLmMsIGFwcHMvc25tcHZhY20uYywgYXBwcy9zbm1wd2Fsay5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgQ0hBTkdFUzogYXBwczogcmV0dXJuIG5vemVybyBleGl0IGNvZGUgd2hlbiBwYXJzaW5nIG9mIGNlcnRhaW4KKyAgIHBhcmFtZXRlciBmYWlscy4KKyAgIEUuZy4gJy1BJyBwYXJhbWV0ZXIgd2l0aCB0b28gc2hvcnQgcGFzc3BocmFzZSBvciBLdSBrZXkKKyAgIGdlbmVyYXRpb24gaW4gZ2VuZXJhbC4KKworMjAxMC0wMy0yNCAwNzoxMSAgbWFnZnIKKworICAgKiBhcHBzL2FnZW50eHRyYXAuYzoKKworICAgQ29ycmVjdCB0aGUgdHlwZSBvZiB0aGUgaWQvZGVzY3JpcHRpb24gb2YgdGhlIE9wZW4tUERVLgorCisyMDEwLTAzLTIyIDE4OjI5ICBidmFzc2NoZQorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBVcGRhdGVzIGZvciAibWFrZSBjaGVja3MiOgorICAgLSBNYWRlIHN1cmUgdGhhdCBleGl0IGNvZGUgMCBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgY2hlY2sgaXMKKyAgIHN1Y2Nlc3NmdWwgYW5kIHRoYXQKKyAgIGV4aXQgY29kZSAxIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBjaGVjayBmYWlsZWQuCisgICAtIE1hZGUgIm1ha2VmaWxlY2hlY2siIHNraXAgU3VidmVyc2lvbiBib29ra2VlcGluZyBmaWxlcyBhbmQgYWxzbworICAgdGhlIG1ha2VmaWxlCisgICB0aGF0IGNvbnRhaW5zICJtYWtlZmlsZWNoZWNrIi4KKwogMjAxMC0wMy0yMiAxNjoxMCAgZHRzMTIKIAogICAgKiBtaWJzL05FVC1TTk1QLVBBU1MtTUlCLnR4dDoKQEAgLTI2MTEsNiArNDQ4MjUsMTYgQEAKICAgIEZpeCB0eXBvIGluIGRlZmF1bHQgSXBBZGRyZXNzIHZhbHVlCiAgICAoU2VlIEJ1ZyAjMjk3MjE0MSkKIAorMjAxMC0wMy0yMiAxNTo0NCAgcnN0b3J5CisKKyAgICogIE1ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIHNubXBsaWIvY2FsbGJhY2suYywgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zdHJ0b2tfci5jLCBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIGNoYW5nZSBhbGwgYXNzZXJ0KCkgdG8gbmV0c25tcF9hc3NlcnQoKTsgYWRkIGFzc2VydGNoZWNrIHRvIHRvcAorICAgbGV2ZWwgbWFrZWZpbGUKKwogMjAxMC0wMy0yMiAxNToyNCAgYnZhc3NjaGUKIAogICAgKiBtaWJzL1VDRC1ESVNLSU8tTUlCLnR4dDoKQEAgLTI2MTgsNiArNDQ4NDIsMjMgQEAKICAgIEZvbGxvdy11cCBmb3IgcjE4MzQ5OiBhZGRlZCBtaXNzaW5nIGNvbW1hIHN1Y2ggdGhhdCBpdCBpcyBhZ2FpbgogICAgcG9zc2libGUgdG8gY29tcGlsZSBVQ0QtRElTS0lPLU1JQi4KIAorMjAxMC0wMy0yMiAxNDozNiAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wZC5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBGaXggYnVpbGQgd2hlbiBNSUIgbG9hZGluZyBpcyBkaXNhYmxlZCAoYnJva2VuIGJ5IFNWTiByZXZpc2lvbgorICAgMTgzNDEpCisgICBSZXBvcnQgZGVmYXVsdCBNSUIgcGF0aCBmb3IgY2xpZW50IGFwcHMgdG9vLgorCisyMDEwLTAzLTIyIDEzOjU5ICBkdHMxMgorCisgICAqICBtYW4vc25tcF9hcGlfZXJyc3RyaW5nLjMsIG1hbi9zbm1wX2Nsb3NlLjMsIG1hbi9zbm1wX2Vycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9mcmVlX3BkdS4zLCBtYW4vc25tcF9vcGVuLjMsIG1hbi9zbm1wX3BlcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfcmVhZC4zLCBtYW4vc25tcF9zZWxlY3RfaW5mby4zLCBtYW4vc25tcF9zZW5kLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX3BlcnJvci4zLCBtYW4vc25tcF90aW1lb3V0LjM6CisKKyAgIENIQU5HRVM6IG1hbjogQlVHOiAyOTcyODYwOiBVcGRhdGUgYnJva2VuIHJlZmVyZW5jZXMKKwogMjAxMC0wMy0yMiAxMzo0OSAgZHRzMTIKIAogICAgKiAgbWlicy9VQ0QtRElTS0lPLU1JQi50eHQsIG1pYnMvVUNELURMTU9ELU1JQi50eHQsICAgCkBAIC0yNjM1LDEyICs0NDg3NiwxMDQgQEAKICAgIEFTTiB2YXJiaW5kcyB3aXRoIEFTTiB0eXBlIHplcm8uIE5vdGU6IHRoaXMgY29kZSBjaGFuZ2UgZG9lcyBub3QKICAgIGNoYW5nZSB0aGUgYWdlbnQgYmVoYXZpb3IuCiAKKzIwMTAtMDMtMjAgMjA6MjEgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBNU1ZDLgorCisyMDEwLTAzLTIwIDIwOjIwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYzoKKworICAgQWRkZWQgYSB0cmFpbGluZyBiYWNrc2xhc2ggKHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhlCisgICBwcmV2aW91cyBjb21taXQpLgorCisyMDEwLTAzLTIwIDE5OjM2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIGFnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L3NubXBkLmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAKKyAgICAgICAgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsICAgCisgICAgICBzbm1wbGliL3dpbnBpcGUuYywgc25tcGxpYi93aW5zZXJ2aWNlLmM6CisKKyAgIENIQU5HRVM6IGxpYnNubXA6IGNoYW5nZWQgdGhlIHR5cGUgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBvZgorICAgbmV0c25tcF9zZXRfcm93X2NvbHVtbigpIGZyb20gY29uc3QgY2hhciogdG8gY29uc3Qgdm9pZCogc3VjaAorICAgdGhhdCBubyBjYXN0IGlzIG5lY2Vzc2FyeSB3aGVuIHBhc3NpbmcgYW5vdGhlciBkYXRhdHlwZSB0aGVuCisgICBjaGFyKiBvciBjb25zdCBjaGFyKi4KKyAgIENIQU5HRVM6IFdpbjMyOiBjaGFuZ2VkIGluX2FkZHJfdCBmcm9tIHVfaW50IHRvIHVfbG9uZyBzdWNoIHRoYXQKKyAgIGl0IG1hdGNoZXMgdGhlIGRhdGF0eXBlIG9mIHNvY2thZGRyX2luOjpzaW5fYWRkci4KKyAgIEFsc28sIGZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgKG1vc3RseSBjaGFyICogPD4gdV9jaGFyICoKKyAgIG1pc21hdGNoZXMpIGFuZCByZW1vdmVkIHNvbWUgY2FzdHMuCisKIDIwMTAtMDMtMjAgMTk6MTYgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CiAKICAgIEZpeGVkIHRoZSBjb21waWxlciB3YXJuaW5ncyByZXBvcnRlZCBieSBnY2MgKE1pbkdXKS4KIAorMjAxMC0wMy0yMCAxOTowNSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIHNpZ3Byb2NtYXNrLgorCisyMDEwLTAzLTIwIDA5OjE0ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBSZWZhY3RvcmluZzogbW92ZWQgZHVwbGljYXRlZCBjb2RlIGludG8gYSBuZXcgZnVuY3Rpb24uCisKKzIwMTAtMDMtMTkgMjI6NTYgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIGFnZW50L3NubXBkLmMsIHNubXBsaWIvcGFyc2UuYzoKKworICAgUmVwb3J0IE1JQiBhbmQgY29uZmlnIGRpcmVjdG9yaWVzIHNlYXJjaCBwYXRocyBvbiBlcnJvcnMKKyAgIChhbmQgaW4gdGhlIGhlbHAgbWVzc2FnZSkKKworMjAxMC0wMy0xOSAxMzoxMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogbWFkZSB0aGUgZXJyb3IgbWVzc2FnZSB0aGF0IGlzIGxvZ2dlZCB3aGVuCisgICBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIGlzIGF0dGVtcHRlZCBtb3JlIGRldGFpbGVkLgorICAgCisgICBBbiBleGFtcGxlOgorICAgKGJlZm9yZSkKKyAgIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gKG1pYklJL3NubXAsCisgICBDOlxXSU5ET1dTXFN5c3RlbTMyXHNubXBtaWIuZGxsKQorICAgaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbGVkLgorICAgKGFmdGVyKQorICAgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbjogTUlCIG1vZHVsZXMgbWliSUkvc25tcCBhbmQKKyAgIEM6XFdJTkRPV1NcU3lzdGVtMzJcc25tcG1pYi5kbGwgKG9pZCAuMS4zLjYuMS4yLjEuMTEpLgorICAgaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbGVkLgorCiAyMDEwLTAzLTE5IDEyOjQwICBidmFzc2NoZQogCiAgICAqICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsICAgCkBAIC0yNjU5LDE4ICs0NDk5Miw5NCBAQAogICAgYnkgZXZlcnkgcmVxdWVzdCBmb3Igd2hpY2ggYSByZXNwb25zZSB3aXRoIG5vbi16ZXJvIGVycm9yIHN0YXR1cwogICAgaXMgc2VudCBiYWNrLgogCi0yMDEwLTAzLTE5IDExOjQxICBidmFzc2NoZQorMjAxMC0wMy0xOCAxNjoyOSAgcnN0b3J5CiAKLSAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CiAKLSAgIFJldmVydGVkIHIxODMyNCBzaW5jZSB0aGUgNS40IGJyYW5jaCBpcyBpbiBSQyBzdGFnZSBhbmQgYQotICAgbGVhay1hdC1leGl0IGlzIG5vdCBhIHNob3dzdG9wcGVyLgorICAga2VlcCBjb3VudCBvZiBlbmFibGVkIGxvZ3M7IHVzZSB0aGlzIGNvdW50IHRvIGRldGVybWluZSB3aGVuIHRvCisgICBsb2cgdG8gc3RkZXJyCiAKLTIwMTAtMDMtMTcgMTM6NDEgIGJ2YXNzY2hlCisyMDEwLTAzLTE4IDE2OjI4ICByc3RvcnkKKworICAgKiAgYXBwcy9zbm1wdHJhbnNsYXRlLmMsIGFwcHMvc25tcHRyYXBkLmMsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBORVdTOiBzbm1wbGliOiBuZXcgc25tcCB0b2tlbiBsb2dPcHRpb24gYWxsb3dzIHNwZWNpZnlpbmcgbG9nCisgICBkZXN0aW5hdGlvbnMgdmkgY29uZiBmaWxlcworICAgLSBpZiBzdGRlcnIgbG9nIGVuYWJsZWQgYmVjYXVzZSBvZiBubyBsb2cgZGVzdGluYXRpb24sIHR1cm4gaXQKKyAgIG9mZiB3aGVuIGEKKyAgIGxvZyBkZXN0aW5hdGlvbiBpcyBlbmFibGVkCisgICAtIGRvbid0IGNhbGwgbmV0c25tcF9lbmFibGVfc3RkZXJybG9nKCkgZnJvbSBhcHBzIGFueW1vcmUKKworMjAxMC0wMy0xOCAxNTozMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgdWRwIHRyYW5zcG9ydCBpbmhlcml0YW5jZSB0d2Vha3MKKyAgIC0gbW92ZSBiYXNpYyB1ZHAgcmVjdmZyb20vc2VuZHRvIGNvZGUgZnJvbSBVRFBEb21haW4gdG8KKyAgIFVEUEJhc2VEb21haW4KKyAgIC0gdHdlYWsgdXBkIHJlY3Zmcm9tL3NlbmR0byB0byBjYWxsIHVkcGJhc2UgdmVyc3Rpb24KKyAgIC0gdHdlYWsgdWRwaXB2NCByZWN2ZnJvbS9zZW5kdG8gdG8gY2FsbCB1ZHBiYXNlIHZlcnNpb24KKyAgIC0gYWxzbyBmaXhlZCBuZXRzbm1wX2lwdjRfKiAtPiBuZXRzbm1wX3VkcGlwdjRfKgorICAgLSB0d2VhayBEVExTVURQRG9tYWluIG90IHVzZSB1ZHBiYXNlXyogaW5zdGVhZCBvZiB1ZHBfKgorCisyMDEwLTAzLTE4IDE1OjIxICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcHJvdGVjdCBjZXJ0IGhlYWRlciBhbmQgaW5pdCBjYWxsIHdpdGggaWZkZWZzCisKKzIwMTAtMDMtMTcgMTk6MDEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHVzZSBuZXcgdXRpbGl0eSByb3V0aW5lIGZvciBjZXJ0IG5hbWVzCisKKzIwMTAtMDMtMTcgMTk6MDEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1vdmUgc25tcF9vcGVuc3NsIGhlYWRlciBhZnRlciBvcGVuc3NsIGhlYWRlcnMKKworMjAxMC0wMy0xNyAxOTowMCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBhZGQgcm91dGluZXMgdG8gcHVsbC9kdW1wIG5hbWVzIGZyb20gWDUwOSBjZXJ0cworCisyMDEwLTAzLTE3IDE5OjAwICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICB1c2UgZW51bSBsaXN0cyB0byBtYW5hZ2UgZGlyZWN0b3J5IGluZGV4ZXMKKworMjAxMC0wMy0xNyAxOTowMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2VudW0uYzoKKworICAgaW5pdGlhbGl6ZSBzdGF0aWMgc3RvcmFnZSBiZWZvcmUgdXNlOyBwcm90ZWN0IGVudW0gaW5pdCBmcm9tCisgICBtdWx0aXBsZSBjYWxscworCisyMDEwLTAzLTE3IDE4OjU0ICByc3RvcnkKKworICAgKiBSRUFETUUuYWdlbnQtbWliczoKKworICAgYWRkIGluZm8gYWJvdXQgbmV3IHRzbS90bHMgbWlicworCisyMDEwLTAzLTE3IDE4OjU0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgbW92ZSBjZXJ0IGluaXQgdG8gc25tcCBpbml0CisKKzIwMTAtMDMtMTcgMTM6MzcgIGJ2YXNzY2hlCiAKICAgICogbWlicy9ORVQtU05NUC1BR0VOVC1NSUIudHh0LCBtaWJzL05FVC1TTk1QLUVYVEVORC1NSUIudHh0OgogCi0gICBNaW5vciBNSUIgZml4ZXMgKGJhY2twb3J0ZWQgcjE4MzIwLCByMTgzMjEgYW5kIHIxODMyNSkuCisgICBVcGRhdGVkIE1JQiByZXZpc2lvbiBoaXN0b3J5LgogCiAyMDEwLTAzLTE3IDEzOjI5ICBidmFzc2NoZQogCkBAIC0yNjg1LDg1ICs0NTA5NCwyOTcgQEAKICAgIENIQU5HRVM6IEJVRzogMjk3MTI1NzogRml4ZWQgd2luRXh0RExMIGhhbmRsaW5nIG9mIG11bHRpLXZhcmJpbmQKICAgIGdldE5leHQgcmVxdWVzdHMgd2l0aCBPSURzIGluIHJldmVyc2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyLgogCi0yMDEwLTAzLTE0IDIyOjU2ICBkdHMxMgorMjAxMC0wMy0xNyAxMDoyNSAgYnZhc3NjaGUKIAotICAgKiBDSEFOR0VTLCBORVdTOgorICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIE1vcmUgd2luRXh0RExMIGRlYnVnIG91dHB1dCB0dW5pbmcuCiAKLTIwMTAtMDMtMTQgMjI6MzEgIGR0czEyCisyMDEwLTAzLTE2IDE5OjMxICBidmFzc2NoZQogCi0gICAqIENoYW5nZUxvZzoKKyAgICogbWlicy9ORVQtU05NUC1BR0VOVC1NSUIudHh0OgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgQ29tcGlsZXMgbm93IHdpdGggTUlCIGNvbXBpbGVycyB0aGF0IGRvIG5vdCByZWNvZ25pemUgYSBkb3VibGUKKyAgIGRhc2ggYXMgdGhlIGVuZCBvZiBhIE1JQiBjb21tZW50LgogCi0yMDEwLTAzLTE0IDIyOjI4ICBkdHMxMgorMjAxMC0wMy0xNiAxOToyNyAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKKyAgICogbWlicy9ORVQtU05NUC1FWFRFTkQtTUlCLnR4dDoKIAotICAgbWFrZSBkZXBlbmQKKyAgIEZpeGVkIHR3byBzeW50YXggZXJyb3JzLgogCi0yMDEwLTAzLTE0IDIyOjE5ICBkdHMxMgorMjAxMC0wMy0xNiAxOToxOCAgYnZhc3NjaGUKIAotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CiAKLSAgIG1ha2UgZGVwZW5kCisgICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBmaXhlZCBhIGJ1ZyBpbiBnZXROZXh0IGhhbmRsaW5nIHRoYXQKKyAgIGNvdWxkIGNhdXNlIHRoZSBNSUIgb3V0cHV0IHRvIGJlIHRydW5jYXRlZC4KIAotMjAxMC0wMy0xNCAyMjoxOSAgZHRzMTIKKzIwMTAtMDMtMTYgMTg6NTAgIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6CisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgogCi0gICBtYWtlIGRlcGVuZAorICAgTWFkZSB3aW5FeHRETEwgZGVidWcgb3V0cHV0IG1vcmUgZGV0YWlsZWQuCiAKLTIwMTAtMDMtMTQgMjI6MTAgIGR0czEyCisyMDEwLTAzLTE2IDE1OjI0ICBidmFzc2NoZQogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaDoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIE1hZGUgc3VyZSB0aGF0IEMrKyBwcm9ncmFtcyB0aGF0IGluY2x1ZGUgTmV0LVNOTVAgaGVhZGVyIGZpbGVzCisgICBjb21waWxlIGFnYWluLgogCi0yMDEwLTAzLTE0IDIyOjA3ICBkdHMxMgorMjAxMC0wMy0xNSAwNzoyMCAgbWFnZnIKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmM6CiAKLSAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorICAgTWFrZSBpdCBjb21waWxlIHdpdGggLS1kaXNhYmxlLWRlcHJlY2F0ZWQgYWdhaW4uCisKKzIwMTAtMDMtMTUgMDc6MTkgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmM6CisKKyAgIERpc2FibGUgYWxsIHRoZSBwcmludGluZyBpZiBkZWJ1ZyBvdXRwdXQgaXMgb2ZmLgorCisyMDEwLTAzLTE1IDAwOjE3ICB0YW5kZXJzCisKKyAgICogcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZ3MgcmVnYXJkaW5nIHByaW50ZiBmb3JtYXQKKworMjAxMC0wMy0xNSAwMDowNyAgdGFuZGVycworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmdzIHJlZ2FyZGluZyBwcmludGYgZm9ybWF0CisKKzIwMTAtMDMtMTQgMjE6MDUgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oOgorCisgICBtYWtlIHN1cmUgaGVhZGVyIGlmZGVmIG5hbWUgaXMgdW5pcXVlCisKKzIwMTAtMDMtMTQgMjE6MDQgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmg6CisKKyAgIGFkZCBtaXNzaW5nIGluaXQvc2h1dGRvd24gcHJvdG90eXBlcyB0byBmaXggY29tcGlsZXIgd2FybmluZ3MKKworMjAxMC0wMy0xNCAyMTowMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9kYXRhX2xpc3QuYzoKKworICAgbW92ZSBkZWJ1ZyBtZXNzYWdlIGVhcmxpZXIKKworMjAxMC0wMy0xNCAyMTowMiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jOgorCisgICBhZGQgcHJvdG90eXBlIGZvciBuZXRzbm1wX2luaXRfY29udGFpbmVyOyBmaXggY29tcGxlciB3YXJuaW5nCisKKzIwMTAtMDMtMTQgMjA6NTEgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIENvcnJlY3QgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuIGFuZCBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4KKyAgIGZvciB0aGUgTkVUU05NUF9OT19ERUJVR0dJTkcgY2FzZQorCisyMDEwLTAzLTE0IDE5OjEwICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW5hbWUgY2VydCBpbml0L3NodXRkb3duIGZ1bmNzOyBvbmx5IGNvbXBpbGUgY2VydF91dGlscyBpZgorICAgdXNpbmcvaGF2ZSBTU0w7IGluaXQgY2VydHMgZnJvbSB0bHMgYmFzZQorCisyMDEwLTAzLTE0IDE5OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBjYWxsIG5ldHNubXBfaW5pdF9vcGVuc3NsIGluc3RlYWQgb2YgbmV0c25tcF9pbml0X3Rsc2Jhc2UKKworMjAxMC0wMy0xNCAxOTowOSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIHVwZGF0ZSBmb3IgcmVuYW1lZCBvYmplY3RzIGluIHZlcnNpb24gMDggb2YgdGhlIGR0bHMgZHJhZnQKKworMjAxMC0wMy0xNCAxOTowOCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYiwgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbiwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliLCBhZ2VudC9taWJncm91cC90c20tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oOgorCisgICBpbXBvcnQgaW5pdGlhbCBjb2RlIGZvciBkdGxzIG1pYnMKKworMjAxMC0wMy0xNCAxOTowOCAgcnN0b3J5CisKKyAgICogbWlicy9UTFNUTS1NSUIudHh0OgorCisgICBUTFNUTS1NSUIgZnJvbSBkcmFmdC1pZXRmLWlzbXMtZHRscy10bS0wOS50eHQKKworMjAxMC0wMy0xNCAxNzoyMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIEZpeGVkIGEgZmV3IG1vcmUgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDMtMTQgMTQ6MTAgIGJ2YXNzY2hlCisKKyAgICogcGVybC9kZWZhdWx0X3N0b3JlL3Rlc3QucGw6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3Mzg0OiBjaGFuZ2VkIE5FVFNOTVBfRFNfTUFYX1NVQklEUyBmcm9tIDQwIHRvCisgICA0OC4KKworMjAxMC0wMy0xNCAxMzo1MyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgQ2hhbmdlczoKKyAgIC0gUmVtb3ZlZCAtV25vLWNoYXItc3Vic2NyaXB0cyBmcm9tIERFVkZMQUdTLiBVc2luZyBhIHZhcmlhYmxlIG9yCisgICBleHByZXNzaW9uIG9mCisgICB0eXBlIGNoYXIgYXMgYW4gYXJyYXkgaW5kZXggaXMgYWxtb3N0IGFsd2F5cyBhbiBlcnJvci4KKyAgIEZ1cnRoZXJtb3JlLAorICAgLVdjaGFyLXN1YnNjcmlwdCBkb2VzIG5vdCB0cmlnZ2VyIGFueSB3YXJuaW5ncyBvbiB0aGUgTmV0LVNOTVAKKyAgIGNvZGUgYmFzZS4KKyAgIC0gUmVtb3ZlZCAtV2lubGluZSBmcm9tIERFVkZMQUdTLiBOb3Qgb25seSB3YXMgbm9ib2R5IHBheWluZworICAgYXR0ZW50aW9uIHRvIHRoZQorICAgbWVzc2FnZXMgdHJpZ2dlcmVkIGJ5IC1XaW5saW5lLCBidXQgcmVjZW50IHZlcnNpb25zIG9mIHRoZSBnY2MKKyAgIGNvbXBpbGVyIGFyZQorICAgYmV0dGVyIHRoYW4gaHVtYW5zIGF0IGRlY2lkaW5nIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgaW5saW5lZAorICAgYW5kIHdoaWNoCisgICBvbmVzIG5vdC4KKworMjAxMC0wMy0xNCAxMzozOSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZXJhbiBhdXRvcmVjb25mLgorCisyMDEwLTAzLTE0IDEzOjM5ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDMtMTQgMTM6MzYgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIFJlbW92ZWQgdGhlICcweCcgcHJlZml4IGFnYWluIGZyb20gYSBkZWJ1ZyBzdGF0ZW1lbnQgdGhhdCB3YXMKKyAgIGludHJvZHVjZWQgaW4gcjE4MjgyLgorCisyMDEwLTAzLTEzIDE5OjA3ICBidmFzc2NoZQorCisgICAqICBwZXJsL0FTTi9BU04ueHMsIHBlcmwvT0lEL09JRC54cywgcGVybC9TTk1QL1NOTVAueHMsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvVHJhcFJlY2VpdmVyL3BwcG9ydC5oLCAgIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgRml4ZWQgbW9zdCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIHNvdXJjZSBjb2RlIGluIHRoZQorICAgcGVybCBzdWJkaXJlY3RvcnkuCisgICBOb3RlOiB0aGVzZSBjaGFuZ2VzIG1heSBjb250YWluIHNvbWUgcmVhbCBidWcgZml4ZXMuCisKKzIwMTAtMDMtMTMgMDk6NTcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBGaXhlZCBzZXZlcmFsIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDMtMTMgMDE6MTYgIGhhcmRha2VyCisKKyAgICogYWNjb25maWcuaCwgY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBkZWZpbmUgdGhlIFRMU1RDUCBET01BSU4KKworMjAxMC0wMy0xMyAwMToxNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGZpeCBpZmRlZiB0eXBvCisKKzIwMTAtMDMtMTIgMjA6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjaGFuZ2UgZGVidWdnaW5nIHN5bWJvbCBuYW1lcyB0byBhIGdlbmVyaWMgdGxzIHN0cmluZworCisyMDEwLTAzLTEyIDIwOjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBpbml0aWFsIHdvcmtpbmcgU05NUCBvdmVyIFRMUyBvdmVyIFRDUCBjb25uZWN0aW9uCisKKzIwMTAtMDMtMTIgMjA6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBwcmludCBhIG1vcmUgY29tcGxldGUgT3BlblNTTCBzdGFjaworCisyMDEwLTAzLTEyIDIwOjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBmaXggYXNzZXJ0IHN0YXRlbWVudHMKKworMjAxMC0wMy0xMiAyMDoyMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaDoKKworICAgYWRkZWQgYW4gYWNjZXB0ZWRfYmlvIHBvaW50ZXIgZm9yIHRoZSBiaW8gYWZ0ZXIgU1NMX2FjY2VwdAorCisyMDEwLTAzLTEyIDIwOjIxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgYWRkIHRoZSBhYmlsaXR5IGZvciBmX2NvcHkgYW5kIGZfY29uZmlnCisKKzIwMTAtMDMtMTIgMjA6MjEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIG1pc3NpbmcgOworCisyMDEwLTAzLTEyIDIwOjIxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBhZGQgYSBmX2NvcHkgcG9pbnRlcgorCisyMDEwLTAzLTEyIDIwOjIwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICByZXR1cm4gaW50IG5vdCBpbnQgKiBvbiBlcnJvcgorCisyMDEwLTAzLTEyIDIwOjIwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBhZGRlZCBhIGZfY29uZmlnIGZ1bmN0aW9uIGZvciB0cmFuc3BvcnRzCiAKIDIwMTAtMDMtMTIgMTE6NTMgIGR0czEyCiAKQEAgLTI3NzMsNiArNDUzOTQsMTMgQEAKICAgIGhlYWRlciB0b2tlbgogICAgUGF0Y2ggc3VwcGxpZWQgYnkgRGFuIE5lbHNvbgogCisyMDEwLTAzLTEyIDExOjQzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmM6CisKKyAgIFJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZgorICAgZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKCkKKwogMjAxMC0wMy0xMSAxNjo1MiAgZHRzMTIKIAogICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKQEAgLTI3ODUsMTIgKzQ1NDEzLDI0IEBACiAKICAgIFJlbW92ZSBtZW50aW9uIG9mIHRoZSAoYWJhbmRvbmVkKSAnZGF0YXNldDInIGhlbHBlci4KIAotMjAxMC0wMy0xMSAxNjowMyAgZHRzMTIKKzIwMTAtMDMtMTEgMTU6NTkgIGR0czEyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgRG9uJ3QgaW5pdGlhbGlzZSB0aGUgVExTIHRyYW5zcG9ydCB1bmxlc3MgaXQncyBhY3R1YWxseSBiZWVuCisgICBjb25maWd1cmVkIGluLgorCisyMDEwLTAzLTExIDE1OjQ3ICByc3RvcnkKIAogICAgKiB0ZXN0aW5nL2V2YWxfc3VpdGUuc2g6CiAKLSAgIFVzZSBTTk1QX1RNUERJUiBpbnN0ZWFkIG9mIFRNUERJUgotICAgQmFja3BvcnQgb2YgcmV2aXNpb24gMTgyNjIKKyAgIHVzZSBTTk1QX1RNUERJUiBpbnN0ZWFkIG9mIFRNUERJUgorCisyMDEwLTAzLTExIDE1OjMxICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgcXVlcnkgcmlnaHQgYm9vbCAodHNtIHByZWZpeCBpcyBsaWIgYm9vbCwgbm90IGFwcCkKIAogMjAxMC0wMy0xMSAxNTowOCAgZHRzMTIKIApAQCAtMjgwOCw2ICs0NTQ0OCwxNSBAQAogICAgQ0hBTkdFUzogUEFUQ0g6IDI5Mzc5OTY6IEFkZCBEYXRlOiBoZWFkZXIgdG8gZW1haWwgc2VuZCBieQogICAgdHJhcHRvZW1haWwKIAorMjAxMC0wMy0xMSAxNDo1MCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTY3NDAwOiBSZXRyaWV2ZSBlcnJvciBjb3VudGVycyBmb3IgdGhlCisgICBFdGhlckxpa2UtTUlCCisgICBQYXRjaCBzdXBwbGllZCBieSBKb3NlZiBNb2VsbGVycy4KKwogMjAxMC0wMy0xMSAxNDoyMyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmM6CkBAIC0yODIzLDYgKzQ1NDcyLDIxIEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5NTY2NTc6IEhhbmRsZSBvdmVyLWxlbmd0aCBBZ2VudFggT0lEcy4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFJvYiBXZXN0CiAKKzIwMTAtMDMtMTEgMTI6MjMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfY29tbW9uLmM6CisKKyAgIFByb3ZpZGUgbWlzc2luZyBkZWJ1ZyBwYXJhbWV0ZXIuCisgICBQYXRjaCBwcm92aWRlZCBieSBBbmRyZWFzIEphZWdlci4KKworMjAxMC0wMy0xMSAxMjoyMSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuYzoKKworICAgUHJvdmlkZSBtaXNzaW5nIChkdW1teSkgcmV0dXJuIHZhbHVlLCB0byBzdXBwcmVzcyBjb21waWxlcgorICAgd2FybmluZy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IEFuZHJlYXMgSmFlZ2VyLgorCiAyMDEwLTAzLTExIDEyOjE5ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYzoKQEAgLTI4MzcsNyArNDU1MDEsNyBAQAogCiAyMDEwLTAzLTExIDExOjU3ICBkdHMxMgogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNDoKIAogICAgUmVwbGFjZSBiYWNrcXVvdGUgd2l0aCBzaW5nbGUgcXVvdGUgaW4gY29uZmlndXJlIG91dHB1dCBtZXNzYWdlLgogICAgV2hpbGUgdGhpcyBjaGFuZ2UgaXMgcHJvYmFibHkgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgaXQgZmVlbHMKQEAgLTI4NjgsMjEgKzQ1NTMyLDk1MiBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTUwODQ1OiBGaXggaWZIaWdoU3BlZWQgY2FsY3VsYXRpb24KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IExlb25hcmRvIENoaXF1aXR0bwogCi0yMDEwLTAzLTAzIDE2OjExICBqc2FmcmFuZWsKKzIwMTAtMDMtMTEgMDg6MjYgIGJ2YXNzY2hlCisKKyAgICogIHBlcmwvQVNOL0FTTi54cywgcGVybC9BU04vTWFrZWZpbGUuUEwsIHBlcmwvT0lEL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9PSUQvT0lELnhzLCBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9hZ2VudC54cywgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnhzLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUueHM6CisKKyAgIE1hZGUgY29tcGlsYXRpb24gb2YgdGhlIFBlcmwgbW9kdWxlIE5ldFNOTVAucG0gb24gV2luZG93cyBtb3JlCisgICBzaWxlbnQ6IGFkZGVkIGNvbXBpbGVyIGZsYWdzIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyAgIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIGFuZCBtYWRlIHN1cmUgdGhhdCAjaW5jbHVkZQorICAgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBvY2N1cnMgYmVmb3JlIGFueSBvdGhlciBpbmNsdWRlIGZpbGUKKyAgIHRoYXQgZGVmaW5lcyBfV0lOMzJfV0lOTlQuCisKKzIwMTAtMDMtMTAgMjM6MzEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBORVdTOiBzbm1wbGliOiBjcmVhdGUgaW5kZXhlcyBmb3IgY2VydGlmaWNhdGVzIGluIGNvbmZpZyBwYXRoCisKKzIwMTAtMDMtMTAgMTg6NDggIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wU29ja2V0QmFzZURvbWFpbi5jOgorCisgICBBZGRlZCAiI2luY2x1ZGUgPHVuaXN0ZC5oPiIgc3VjaCB0aGF0IG9uIFVuaXggc3lzdGVtcyB0aGUKKyAgIGNvbXBpbGVyIGRvZXMgbm90IHByaW50IGEgd2FybmluZyBhYm91dCBhIG1pc3NpbmcgZGVjbGFyYXRpb24gZm9yCisgICB0aGUgZnVuY3Rpb24gY2xvc2UoKS4KKworMjAxMC0wMy0xMCAxODozMCAgcnN0b3J5CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcGVybC9BU04vQVNOLnBtLCAgIAorICAgICAgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLCBwZXJsL1NOTVAvU05NUC5wbSwgCisgICAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAgICBwZXJsL2FnZW50L2FnZW50LnBtLAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbToKKworICAgdXBkYXRlIHZlcnNpb24gdG8gNS42LmRldgorCisyMDEwLTAzLTEwIDE4OjI5ICByc3RvcnkKKworICAgKiBsb2NhbC9WZXJzaW9uLU11bmdlLnBsOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogdXBkYXRlIFZlcnNpb24tTXVuZ2UgZm9yIHJlbmFtZWQgY29uZmlndXJlLmFjCisKKzIwMTAtMDMtMTAgMTg6MjkgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZS5hYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IHNhdmUgY29uZmlndXJlIGNhY2hlIGV2ZXJ5IG9uY2UgaW4gd2hpbGUKKworMjAxMC0wMy0xMCAxNjoxMiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluOgorCisgICBSZW9yZGVyZWQgc29tZSBvZiB0aGUgTWFrZWZpbGUgcnVsZXMgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhlCisgICBkaWZmcyB3aXRoIGxpYnNubXBfZGxsL01ha2VmaWxlLmluLgorCisyMDEwLTAzLTEwIDE2OjEwICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluOgorCisgICBXaW4zMiwgYmF0Y2ggYnVpbGRpbmc6IERMTCBidWlsZHMgYWdhaW4uCisKKzIwMTAtMDMtMTAgMTY6MDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIEZpeGVkIGEgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5nIGJ5IGFkZGluZyBhIGZvcndhcmQKKyAgIGRlY2xhcmF0aW9uIGZvciB0aGUgZnVuY3Rpb24gX2NhY2hlX2ZyZWUoKS4KKworMjAxMC0wMy0xMCAxNjowNiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBCdWlsZHMgYWdhaW4gb24gV2luMzIuCisKKzIwMTAtMDMtMTAgMDQ6MTcgIHJzdG9yeQorCisgICAqIFJFQURNRToKKworICAgYWRkIG1pc3NpbmcgY29udHJpYnV0b3JzCisKKzIwMTAtMDMtMTAgMDQ6MTcgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZml4IHBvdGVudGlhbCBkb3VibGUgZnJlZSBpbiBDT05UQUlORVJfRlJFRQorICAgLSBhbHNvIGFkZGVkIHNldmVyYWwgY29tcGFyZSByb3V0aW5lcworCisyMDEwLTAzLTEwIDA0OjE3ICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogd2hlbiBmcmVlaW5nIGEgY2FjaGUsIHN0b3AgdGltZXIgYW5kIGNhbGwgY2FjaGUKKyAgIGZyZWUgZnVuYworICAgLSBhbHNvIGFkZCBuZXRzbm1wX2NhY2hlX3JlbW92ZQorCisyMDEwLTAzLTEwIDAzOjUyICByc3RvcnkKKworICAgKiAgUkVBRE1FLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgdW5kbyBjb21taXQgMTgyMzQKKworMjAxMC0wMy0xMCAwMzo0MSAgcnN0b3J5CisKKyAgICogIFJFQURNRSwgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIE1lcmdlIGJyYW5jaCAncHVsbG1lJyBvZiAuLi90cnVuay1zdGFnaW5nCisKKzIwMTAtMDMtMDkgMTc6NDggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBleHBvcnRlZCBuZXRzbm1wX3JlYWRfbW9kdWxlKCkgZnJvbSBuZXRzbm1wLmRsbAorICAgc3VjaCB0aGF0IE5ldFNOTVAucG0gYnVpbGRzIGFnYWluLgorCisyMDEwLTAzLTA5IDE3OjQ3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbjoKKworICAgU2ltcGxpZmllZCB0d28gbWFrZWZpbGVzIHVzZWQgYnkgYnVpbGQuYmF0IChXaW4zMikuCisKKzIwMTAtMDMtMDkgMTc6MjQgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogYnVpbGRpbmcgTmV0U05NUC5wbSBkb2VzIG5vIGxvbmdlcgorICAgdHJpZ2dlciBjb21waWxlciB3YXJuaW5ncyBhYm91dCByZWRlZmluaW5nIF9XSU4zMl9XSU5OVCBub3IKKyAgIE5URERJX1ZFUlNJT04uCisKKzIwMTAtMDMtMDkgMTc6MjIgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL01ha2VmaWxlLlBMOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IG1hZGUgYnVpbGRpbmcgTmV0U05NUC5wbSBtb3JlIHNpbGVudCBieQorICAgYWRkaW5nIHRoZSBNU1ZDIGNvbXBpbGVyIGZsYWdzIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyAgIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTLgorCisyMDEwLTAzLTA5IDE3OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIHJlbW92ZSBkZWJ1ZyBtc2cgdXNlZCBkdXJpbmcgZGVidWdnaW5nCisKKzIwMTAtMDMtMDkgMTc6MDIgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBpbml0aWFsIGNlcnQgd3JhcHBlciAtIHRlc3RpbmcgcmVwbyB3cml0ZSBwcml2cworCisyMDEwLTAzLTA5IDEwOjIwICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluOgorCisgICBSZW1vdmVkIGR1cGxpY2F0ZSBidWlsZCBydWxlcy4gVGhlc2UgZHVwbGljYXRlIHJ1bGVzIHdlcmUKKyAgIGhhcm1sZXNzIGJ1dCB0cmlnZ2VyZWQgYSB3YXJuaW5nLgorCisyMDEwLTAzLTA5IDAyOjM4ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgsIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGRpcmVjdG9yeSBjb250YWluZXIgZW5oYW5jZW1lbnRzCisgICAtIGZpeCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsKKyAgIC0gYWRkIGZpbHRlciBjYWxsYmFjayB0byBmaWx0ZXIgZmlsZXMgcmV0dXJuZWQKKyAgIC0gYWRkIG9wdGlvbiB0byByZXR1cm4gcmVsYXRpdmUgYW5kIG5vdCBmdWxsIHBhdGhzCisgICAtIGFkZCBvcHRpb24gdG8gc29ydCByZXR1cm5lZCBsaXN0CisgICAtIGFkZCBvcHRpb24gdG8gcmV0dXJuIGVtcHR5IGNvbnRhaW5lciBpbnN0ZWFkIG9mIE5VTEwgaWYgbm8KKyAgIGZpbGVzIGZvdW5kCisgICAtIGNoYW5nZSBkZWZhdWx0IGNvbnRhaW5lciBuYW1lIHRvIGRpcmVjdG9yeSB0aGF0IHdhcyBzY2FubmVkCisgICAtIHR3ZWFrIGRlYnVnL2xvZyBtZXNzYWdlcworCisyMDEwLTAzLTA4IDIzOjA3ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IGRlZmluZSBhbmQgdXNlIG5ldyBORVRTTk1QX0xPR09OQ0UgbWFjcm8KKworMjAxMC0wMy0wOCAyMjo0NCAgcnN0b3J5CisKKyAgICogbWFuL3NubXBfY29uZmlnLjUuZGVmLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGNvbmYgZmlsZXMgY2FuIG5vdyBpbmNsdWRlIG90aGVyIGNvbmYgZmlsZXMKKyAgIC0gYWxzbyB0d2Vha2VkIGRlYnVnIHRva2VucyBoZXJlIGFuZCB0aGVyZQorCisyMDEwLTAzLTA4IDIyOjQzICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGZpeCB0eXBvIChjYXVzZWQgZXh0ZXJuYWwgcmVmZXJlbmNlIHdoZW4gRFRMU1VEUCBjb25maWd1cmVkCisgICB3aXRob3V0IGR0bHN0Y3ApCisKKzIwMTAtMDMtMDYgMDI6MjcgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IG5ldHNubXBfY29udGFpbmVyIGVuaGFuY2VtZW50czoKKyAgIC0gYWRkIGZyZWVfaXRlbSBmdW5jdGlvbjsgZGVmYXVsdHMgdG8KKyAgIG5ldHNubXBfY29udGFpbmVyX3NpbXBsZV9mcmVlCisgICAtIGFkZCBDT05UQUlORVJfRlJFRV9BTEwgbWFjcm8vZnVuY3Rpb24gKGxpa2UgQ09OVEFJTkVSX0NMRUFSIGJ1dAorICAgY2FsbHMgY29udGFpbmVyIGZyZWVfaXRlbSBmb3IgZWFjaCBpdGVtIGluIHByaW1hcnkgY29udGFpbmVyKQorICAgLSBhZGQgYWJpbGl0eSB0byBzZXQgb3B0aW9ucyBvbiBiaW5hcnlfYXJyYXkgY29udGFpbmVycworCisyMDEwLTAzLTAyIDE3OjU1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW46CisKKyAgIE1hZGUgc3VyZSB0aGF0IHdpbjMyL2J1aWxkLmJhdCB3b3JrcyBhZ2FpbiBieSBhZGRpbmcgbWlzc2luZworICAgc291cmNlIGZpbGUgbmFtZXMuIFNvcnRlZCBzb3VyY2UgZmlsZSBuYW1lcyBhbHBoYWJldGljYWxseSB0b28uCisKKzIwMTAtMDMtMDIgMTY6NTQgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgxNjcgKG1lcmdlIG9mIHNubXBkIGFuZCBzbm1wZHNkayBhbmQgYWxzbyBvZgorICAgbmV0c25tcG1pYnMgYW5kIG5ldHNubXBtaWJzc2RrKTogdGhlIGJhdGNoIGZpbGUgd2luMzIvYnVpbGQuYmF0CisgICB3b3JrcyBhZ2FpbiB3aXRoIHRoZSBQbGF0Zm9ybSBTREsgZW5hYmxlZC4KKworMjAxMC0wMy0wMiAxNjo1MiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9NYWtlZmlsZS1hcHBzLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODIxNSAocmVwbGFjZWQgdGhlIG9ic29sZXRlIGNsLmV4ZSBvcHRpb24gL0dYIGJ5CisgICB0aGUgZXF1aXZhbGVudCAvRUhzYzsgYWRkZWQgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiwgYWRkZWQKKyAgIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIGFuZCByZW1vdmVkIC9GcC4uLiBhbmQgL1lYKS4KKworMjAxMC0wMi0yOCAxNTo1NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzoKKworICAgV2luMzI6IGZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCByZWRlZmluaXRpb24gb2YKKyAgIF9XSU4zMl9XSU5OVCBieSBtYWtpbmcgc3VyZSB0aGF0IDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gaXMKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2luZG93cy5oPi4KKworMjAxMC0wMi0yOCAxNToyNCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYmhlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBiYXRjaCBidWlsZDogcmVwbGFjZWQgdGhlIG9ic29sZXRlIC9HWCBieSB0aGUKKyAgIGVxdWl2YWxlbnQgL0VIc2MuCisgICBDSEFOR0VTOiBXaW4zMjogYmF0Y2ggYnVpbGQ6IGFkZGVkIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIKKyAgIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIHRvIG1ha2UgYnVpbGRpbmcgd2l0aCBNU1ZDIDIwMDgKKyAgIG1vcmUgc2lsZW50LgorICAgQ0hBTkdFUzogV2luMzI6IGJhdGNoIGJ1aWxkOiByZW1vdmVkIC9GcC4uLiBhbmQgL1lYLiBUaGVzZQorICAgb3B0aW9ucyBpbmZsdWVuY2UgaG93IHByZWNvbXBpbGVkIGhlYWRlciBmaWxlcyBhcmUgZ2VuZXJhdGVkLAorICAgd2hpY2ggYXJlIG5vdCB1c2VkIGluc2lkZSB0aGUgTmV0LVNOTVAgcHJvamVjdC4gL1lYIGlzIG5vdAorICAgc3VwcG9ydGVkIGJ5IE1TVkMgMjAwOC4KKyAgIENIQU5HRVM6IFdpbjMyOiBiYXRjaCBidWlsZDogcmVtb3ZlZCBhIGR1cGxpY2F0ZSBvY2N1cnJlbmNlIG9mCisgICBzdHJ0b3VsbC5vYmouCisKKzIwMTAtMDItMjggMTQ6MTEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvQ29uZmlndXJlLCB3aW4zMi9NYWtlZmlsZS5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgxNjcgKG1lcmdlIG9mIHNubXBkIGFuZCBzbm1wZHNkayBhbmQgYWxzbyBvZgorICAgbmV0c25tcG1pYnMgYW5kIG5ldHNubXBtaWJzc2RrKTogYXBwbGllZCB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMgdG8KKyAgIHRoZSB3aW4zMi9Db25maWd1cmUgc2NyaXB0IGFuZCB3aW4zMi9NYWtlZmlsZS5pbi4KKworMjAxMC0wMi0yNyAxMzoxMSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCBpbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5waXBlLmgsIGluY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgsICAgCisgICAgICBzbm1wbGliL2dldG9wdC5jLCBzbm1wbGliL2dldHRpbWVvZmRheS5jLCBzbm1wbGliL21pYi5jLCAgIAorICAgICAgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXBfZGVidWcuYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvc3RybGNweS5jLCBzbm1wbGliL3N0cnRva19yLmMsIHNubXBsaWIvc3RydG91bGwuYywgICAKKyAgICAgIHNubXBsaWIvdG9vbHMuYywgc25tcGxpYi91Y2RfY29tcGF0LmMsIHNubXBsaWIvd2lucGlwZS5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGRlY2xhcmVkIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3J0ZWQgZnJvbSB0aGUKKyAgIE5ldC1TTk1QIERMTCBhcyBORVRTTk1QX0lNUE9SVC4gVGhlIHJlc3VsdCBpcyBhIG1pbm9yCisgICBvcHRpbWl6YXRpb246IGNvZGUgdGhhdCB1c2VzIHRoZSBOZXQtU05NUCBETEwgd2lsbCBub3cgY2FsbCB0aGUKKyAgIERMTC1leHBvcnRlZCBmdW5jdGlvbnMgZGlyZWN0bHkgaW5zdGVhZCBvZiBpbmRpcmVjdGx5IHZpYSB0aGUKKyAgIHN0dWIgaW4gdGhlIGltcG9ydCBsaWJyYXJ5LgorCisyMDEwLTAyLTI3IDExOjUwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKKworICAgUmVtb3ZlZCBhIHJlZHVuZGFudCBzdHJuY2FzZWNtcCgpIGRlY2xhcmF0aW9uLgorCisyMDEwLTAyLTI3IDA5OjU3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc3RydG9rX3IuYzoKKworICAgRml4ZWQgYSB0eXBvIGluIGEgc291cmNlIGNvZGUgY29tbWVudC4KKworMjAxMC0wMi0yNyAwOTo1NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTg5IChyc3RvcnkpOiBidWlsZHMgYWdhaW4gb24gV2luZG93cy4KKworMjAxMC0wMi0yNSAxNzo1MyAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcCwgICAKKyAgICAgIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXAvbGlic25tcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIHdpbjMyL3NubXBnZXQvc25tcGdldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AsICAKKyAgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osIHdpbjMyL3NubXBzZXQvc25tcHNldC5kc3AsICAKKyAgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwLCB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgIAorICAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcCwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AsIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgIAorICAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS5kc3AsIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AsIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcCwgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCAgIAorICAgICAgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMi5zbG4sIHdpbjMyL3dpbjMyZGxsLmRzdywgICAKKyAgICAgIHdpbjMyL3dpbjMyZGxsLnNsbjoKKworICAgUmV2ZXJ0ZWQgcjE4MjA3IChkc3AvZHN3IHRvIHZjcHJvai9zbG4gY29udmVyc2lvbikgZXhjZXB0IHRoZQorICAgc3VwcHJlc3Npb24KKyAgIGxpc3QgY2hhbmdlcy4gVGhlIGdvYWwgb2YgdGhpcyBjb252ZXJzaW9uIHdhcyB0d29mb2xkOiBub3Qgb25seQorICAgdG8gYmUgYWJsZQorICAgdG8gbG9hZCB0aGUgcHJvamVjdCBmaWxlcyBpbiBNU1ZDIDIwMDIgLSAyMDA4IGJ1dCBhbHNvIHRvIGJlIGFibGUKKyAgIHRvIGNvbW1pdAorICAgY2hhbmdlcyBtYWRlIGZyb20gaW5zaWRlIHRoZSBNU1ZDIDIwMDggSURFLiBVbmZvcnR1bmF0ZWx5CisgICBjb252ZXJ0aW5nIGRzcC9kc3cKKyAgIGZpbGVzIHRvIHZjcHJvai9zbG4gZmlsZXMgd2l0aCBNU1ZDIDIwMDggbWFrZXMgaXQgaW1wb3NzaWJsZSB0bworICAgbG9hZCB0aGUKKyAgIHZjcHJvai9zbG4gZmlsZXMgd2l0aCBlYXJsaWVyIE1TVkMgdmVyc2lvbnMuIFdoeSBvbiBlYXJ0aCBkaWQKKyAgIE1pY3Jvc29mdAorICAgZGVjaWRlIHRvIHB1dCBhIHZlcnNpb24gbnVtYmVyIGluIFhNTCBmaWxlcyA/CisKKzIwMTAtMDItMjQgMTk6NDEgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyLCB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlLCAgIAorICAgICAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcCwgICAKKyAgICAgIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osIHdpbjMyL2xpYmFnZW50LCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzLCB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLnZjcHJvaiwgd2luMzIvbGlibmV0c25tcHRyYXBkLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgd2luMzIvbGlic25tcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXAvbGlic25tcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbCwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCB3aW4zMi9uZXRzbm1wbWlicywgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgd2luMzIvc25tcGJ1bGtnZXQsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osIHdpbjMyL3NubXBidWxrd2FsaywgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkLCAgIAorICAgICAgd2luMzIvc25tcGQvc25tcGQuZHNwLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIHdpbjMyL3NubXBkZWx0YSwgCisgICAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwLCB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwKKyAgICAgICAgIHdpbjMyL3NubXBkZiwgd2luMzIvc25tcGRmL3NubXBkZi5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgd2luMzIvc25tcGdldCwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC5kc3AsIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dCwgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCB3aW4zMi9zbm1wbmV0c3RhdCwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgd2luMzIvc25tcHNldCwgICAKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC5kc3AsIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wc3RhdHVzLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgd2luMzIvc25tcHRhYmxlLCAgIAorICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AsIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCAgCisgICAgICAgd2luMzIvc25tcHRlc3QsIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgd2luMzIvc25tcHRyYW5zbGF0ZSwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCB3aW4zMi9zbm1wdHJhcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcCwgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCB3aW4zMi9zbm1wdXNtLCAgIAorICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcCwgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB2YWNtLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osIHdpbjMyL3NubXB3YWxrLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwLCB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osICAgCisgICAgICB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyLnNsbiwgd2luMzIvd2luMzJkbGwuZHN3LCAgIAorICAgICAgd2luMzIvd2luMzJkbGwuc2xuOgorCisgICAocmV2ZXJ0ZWQpIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogY29udmVydGVkIC5kc3AvLmRzdyBmaWxlcyB0bworICAgLnZjcHJvai8uc2xuIGZpbGVzLiBUaGlzIGltcGxpZXMgdGhhdCBzdXBwb3J0IGZvciBNU1ZDIDYuMCBoYXMKKyAgIGJlZW4gZHJvcHBlZCBhbmQgdGhlIG1pbmltdW0gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gdmVyc2lvbgorICAgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGlzIE1pY3Jvc29mdCBWaXN1YWwKKyAgIFN0dWRpbyAuTkVUICgyMDAyKS4KKworMjAxMC0wMi0yMyAxOTowMyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IHdoZW4gZ2VuZXJhdGluZyBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBzeXN0ZW0KKyAgIGxvY2F0aW9uIGFuZCBubyBkb21haW4gbmFtZSBpcyBmb3VuZCBpbiAvZXRjL3Jlc29sdi5jb25mLCB1c2UKKyAgICJAbm8ud2hlcmUiIGluc3RlYWQgb2YgIiIuCisKKzIwMTAtMDItMjMgMTg6NTAgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBtNC9hY19wcm9tcHRfdXNlci5tNDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IG1hZGUgc3VyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXMgbm8KKyAgIGxvbmdlciBpbnZva2UgInRhaWwgLTEiLCB3aGljaCBpcyBub3QgUE9TSVgtY29tcGxpYW50LgorCisyMDEwLTAyLTIzIDE4OjQ1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHAsIHRlc3RpbmcvdGVzdHMvVDMxMHRjcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMyMHVkcHY2LCB0ZXN0aW5nL3Rlc3RzL1QzMzB0Y3B2NiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXgsIHRlc3RpbmcvdGVzdHMvVDM2MGR0bHN1ZHAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzOTlhbGlhczoKKworICAgUmVtb3ZlZCBhbGwgdHJhbnNwb3J0IHRlc3RzIHNpbmNlIGl0J3MgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUKKyAgIHdoZXJlIHRoZXkgY2FuIHNhZmVseSBvcGVyYXRlICh3YXMgc3RvcHBpbmcgdGFuZGVycycgbmlnaHRseQorICAgdGVzdHMgZnJvbSBzdWNjZWVkaW5nKQorCisyMDEwLTAyLTIzIDE4OjQxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGVycm9yIGFuZCBkZWJ1Z2dpbmcgb3V0cHV0CisKKzIwMTAtMDItMjMgMTg6NDAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggdGhlIHNlcnZlciBjb250ZXh0IGdlbmVyYXRvciB0byBhY3R1YWxseSwgdW0sIHJldHVybiB0aGUKKyAgIGNvbnRleHQuCisKKzIwMTAtMDItMjMgMTg6NDAgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBpbml0aWFsaXplIHRoZSAncmVzJyB2YXJpYWJsZSBzaW5jZSBpdCdzIGNoZWNrZWQKKworMjAxMC0wMi0yMyAxODozOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBwcm9ncmVzcyB0b3dhcmQgYSByZWFsIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDItMjMgMTg6MzggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICB0bHN0Y3AgY3RvciBpbnZvY2F0aW9uCisKKzIwMTAtMDItMjMgMTg6MzggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaDoKKworICAgcmVxdWlyZSBUTFNCYXNlCisKKzIwMTAtMDItMjMgMTg6MzcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGFkZGVkIGhvc3QgaWRlbnRpZmllciBhcyBvdXRwdXQKKworMjAxMC0wMi0yMyAxODozNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc2lnbmlmaWNhbnQgbW9yZSB3b3JrIG9uIHRoZSBUTFMgVENQIGRvbWFpbgorCisyMDEwLTAyLTIzIDE3OjQzICBidmFzc2NoZQogCiAgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotICAgUmVnZXJhdGUgY29uZmlndXJlIHNjcmlwdCBhZnRlciByZXYuIDE4MTkzIChhdXRvbWF0aWMgUlBNIHZlcnNpb24KLSAgIGRldGVjdGlvbikuCi0gICBOZXQtU05NUCBzaG91bGQgY29tcGlsZSB3aXRoIHJwbS00LjYgYXV0b21hdGljYWxseS4KKyAgIEZvbGxvdy11cCBmb3IgcjE4MTkzIChqc2FmcmFuZWspOiByZXJhbiBhdXRvcmVjb25mIGZvciB0aGUgdHJ1bmsKKyAgIGFuZCB0aGUgNS41IGJyYW5jaC4KKworMjAxMC0wMi0yMyAxNDo1OCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICB1c2UgTkVUU05NUF9QUkl6IGluc3RlYWQgb2YgJXoKIAogMjAxMC0wMi0yMyAxMjoyNyAganNhZnJhbmVrCiAKLSAgICogY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKIAogICAgQ0hBTkdFUzogYnVpbGRpbmc6IEZpeGVkIGNvbXBpbGF0aW9uIHdpdGggcnBtLTQuNi4KICAgIFR1cm4gb24gdGhlIGxlZ2FjeSBBUEkgd2hlbiBycG0tNC42IGlzIGRldGVjdGVkLgogCisyMDEwLTAyLTIzIDA3OjM4ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFJldmVydGVkIHIxODAwMCAoZGlzYWJsaW5nIFNJR0FMUk0gc3VwcG9ydCkgYmVjYXVzZSB0aGlzIGludm9sdmVzCisgICBhIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgY2hhbmdlLgorCisyMDEwLTAyLTIzIDAwOjM2ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUQ1BEb21haW4uYzoKKworICAgZml4IHR5cG8gaW4gY29tbWVudAorCisyMDEwLTAyLTIzIDAwOjM0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGRlYnVnIG1zZyB0d2Vha3M7IHVzZSBuZXcgdHJhbnBvcnQgZnVuY3Rpb25zCisgICAtIGFkZCBkZWJ1ZyBoZWFkZXIgZm9yIHNubXAgdmVyc2lvbgorICAgLSBhZGQgbGVuZ3RoIHRvIGRlYnVnIHNlbmQvcmVjZWl2ZSBtZXNzYWdlcworICAgLSB1c2UgbmV3IHRyYW5wb3J0IGZ1bmN0aW9ucyBmb3Igc2VuZC9yZWN2L2ZpbmRpbmcgcGVlciBhZGRyZXNzCisKKzIwMTAtMDItMjMgMDA6MjUgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgYWRkIG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nLCBuZXRzbm1wX3RyYW5zcG9ydF9zZW5kICYKKyAgIG5ldHNubXBfdHJhbnNwb3J0X3JlY3YKKyAgIC0gbW92ZXMgdHJhbnNwb3J0IG1hbmlwdWxhdGlvbiBpbnRvIHRyYW5zcG9ydCBjb2RlCisgICAtIGNlbnRyYWwgcGxhY2UgZm9yIGxvZ2dpbmcvZGVidWdnaW5nIHNlbnQvcmVjZWl2ZWQgZGF0YQorCisyMDEwLTAyLTIyIDE5OjMzICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogbWFkZSBzdXJlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcyBubworICAgbG9uZ2VyIGludm9rZSAidGFpbCAtMSIsIHdoaWNoIGlzIG5vdCBQT1NJWC1jb21wbGlhbnQuCisKKzIwMTAtMDItMjIgMTk6MjEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgRm9sbG93LXVwIGZvciByMTgxODYuIFJlZ3Jlc3Npb24gdGVzdCAzNCAod2hldGhlciBhdXRoZW50aWNhdGlvbgorICAgZmFpbHVyZSB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCkgcGFzc2VzIG5vdyBhZ2Fpbi4KKworMjAxMC0wMi0yMiAwOToxOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogbWFkZSBzdXJlIHRoYXQgaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbHVyZSBkb2VzCisgICBub3QgY3JlYXRlIGRhbmdsaW5nIHBvaW50ZXJzIGluIHRoZSBNSUIgc3VidHJlZSByZWdpc3RyeS4KKworMjAxMC0wMi0yMiAwOToxMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudCwgYXBwcywgYXBwcy9zbm1wbmV0c3RhdDoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTAyLTIyIDA4OjQyICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZToKKworICAgRm9sbG93LXVwIGZvciByMTgwODQ6IGZpeGVkIGxpYmVheTMyIChPcGVuU1NMKSBjb25maWd1cmUgdGVzdCBmb3IKKyAgIE1pbkdXLgorCisyMDEwLTAyLTIyIDA4OjMxICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODA4NDogZml4ZWQgbGliZWF5MzIgKE9wZW5TU0wpIGNvbmZpZ3VyZSB0ZXN0IGZvcgorICAgTWluR1cuCisKKzIwMTAtMDItMjIgMDg6MTMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIE1pbkdXIHdoZW4gSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQuCisKKzIwMTAtMDItMjEgMTg6NTggIGJ2YXNzY2hlCisKKyAgICogIFJFQURNRS53aW4zMiwgd2luMzIvbGlic2RsbC5kc3csICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCB3aW4zMi93aW4zMmRsbC5kc3c6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogcmVuYW1lZCBsaWJzZGxsLmRzdyBpbnRvIHdpbjMyZGxsLmRzdy4KKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogc2ltcGxpZmllZCBsaW5raW5nIHRoZSBOZXQtU05NUAorICAgYXBwbGljYXRpb25zIHdpdGggbmV0c25tcC5kbGwgYnkgYWRkaW5nIGFsbCBhcHBsaWNhdGlvbiBwcm9qZWN0cworICAgdG8gdGhlIHNhbWUgd29ya3NwYWNlIHRoYXQgaXMgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIERMTC4KKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogbWFkZSBidWlsZGluZyBuZXRzbm1wLmRsbCBsZXNzIGVycm9yCisgICBwcm9uZSBieSBsZXR0aW5nIHRoZSBjb21waWxlciBwcmludCBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZQorICAgcHJlcHJvY2Vzc29yIHN5bWJvbCBORVRTTk1QX1VTRV9ETEwgaGFzIG5vdCBiZWVuIGRlZmluZWQuCisKKzIwMTAtMDItMjEgMTg6NTEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IEFkZGVkIGxpYnNubXAuZGVmIHRvIHRoZSBsaXN0IG9mCisgICBsaWJzbm1wX2RsbC5kc3Agc291cmNlIGZpbGVzIHN1Y2ggdGhhdCB0aGUgRExMIGlzIHJlYnVpbHQgd2hlbgorICAgdGhlIC5kZWYgZmlsZSBoYXMgYmVlbiBtb2RpZmllZC4KKworMjAxMC0wMi0yMSAxODo0NSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBleHBvcnRlZCBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZygpIGZyb20KKyAgIG5ldHNubXAuZGxsLgorCisyMDEwLTAyLTIxIDE3OjM5ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBNb3JlIFdpbjMyIElQdjYgc291cmNlIGNvZGUgY29uc2lzdGVuY3kgaW1wcm92ZW1lbnRzOgorICAgLSBNb3ZlZCAjdW5kZWYgSEFWRV9JRl9OQU1FVE9JTkRFWCBmcm9tIHNubXBsaWIvKi5jIHRvCisgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC4KKyAgIC0gQ2hhbmdlZCB0aGUgZ2xvYmFsIGluNmFkZHJfYW55IHZhcmlhYmxlIGludG8gYSBzdGF0aWMgdmFyaWFibGUKKyAgIHN1Y2ggdGhhdAorICAgbXVsdGlwbGUgZGVmaW5pdGlvbnMgZG8gbm90IHRyaWdnZXIgYSBsaW5rZXIgZXJyb3IuCisgICAtIEFkZGVkIHR5cGVkZWZzIGZvciB1aW50OF90LCBpbnQ4X3QsIHVpbnQxNl90IGFuZCBpbnQxNl90LgorICAgLSBSZXBsYWNlZCAnI2lmIE5FVFNOTVBfRU5BQkxFX0lQVjYnIGJ5ICcjaWZkZWYKKyAgIE5FVFNOTVBfRU5BQkxFX0lQVjYnLgorCisyMDEwLTAyLTIxIDA4OjMwICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmM6CisKKyAgIG1ha2Ugc3VyZSB0aGF0IElOQUREUl9OT05FIGlzIGRlZmluZWQgKGZpeGVzIGJ1aWxkIGVycm9yIG9uCisgICBTb2xhcmlzKQorCisyMDEwLTAyLTE5IDE5OjM5ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBTeW5jaHJvbml6ZWQgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggYW5kCisgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbi4KKworMjAxMC0wMi0xOSAxNDoxOCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBsaWJzbm1wIGJ1aWxkcyBhZ2FpbiBhcyBhIERMTCB3aGVuIElQdjYgaXMKKyAgIGVuYWJsZWQuCisKKzIwMTAtMDItMTkgMTM6MjIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIEZvbGxvdyB1cCBmb3IgcjE4MTY0OiBzeW5jaHJvbml6ZWQgbGlic25tcC5kZWYuaW4gd2l0aAorICAgbGlic25tcC5kZWYKKworMjAxMC0wMi0xOSAwOTowNSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IGFkZGVkICNpbmNsdWRlIDxtYWxsb2MuaD4gaW4KKyAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIHN1Y2ggdGhhdCB0aGUgTVNWQyBjb21waWxlcgorICAgZG9lc24ndCBnZXQgY29uZnVzZWQgYnkgdGhlIG1hbGxvYyByZWRlZmluaXRpb24gd2hlbiBidWlsZGluZworICAgbGlic25tcCBhcyBhIERMTC4KKworMjAxMC0wMi0xOSAwODo1OSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIEV4cG9ydGVkIG5ldHNubXBfcGFyc2VfYXJncygpIHN1Y2ggdGhhdCB0aGUgTmV0LVNOTVAgYXBwbGljYXRpb25zCisgICBidWlsZCBhZ2FpbiB3aGVuIGxpYnNubXAgaXMgYnVpbHQgYXMgYSBETEwuCisKKzIwMTAtMDItMTkgMDg6NTYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBtb3ZlZCBNU1ZDIE9wZW5TU0wgbGlua2VyIHNldHRpbmdzIGZyb20KKyAgIHNubXBsaWIva2V5dG9vbHMuYyB0byB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBzdWNoIHRoYXQKKyAgIHRoZXNlIHNldHRpbmdzIGFyZSBub3Qgb25seSBlZmZlY3RpdmUgd2hlbiBidWlsZGluZyBzbm1wbGliIGFzIGEKKyAgIHN0YXRpYyBsaWJyYXJ5IGJ1dCBhbHNvIHdoZW4gYW55IE5ldC1TTk1QIGFwcGxpY2F0aW9uIGlzIGJ1aWx0CisgICB0aGF0IGxpbmtzIHdpdGggc25tcGxpYiBhcyBhIHN0YXRpYyBsaWJyYXJ5IG9yIGFzIGEgRExMLgorCisyMDEwLTAyLTE5IDA4OjMyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYzoKKworICAgV2luMzIgY2xlYW51cDogTVNWQyAvIERMTCB0ZXN0cyBub3cgdXNlIHRoZSBvZmZpY2lhbGx5IGVuZG9yc2VkCisgICBtYWNybyBuYW1lcy4KKworMjAxMC0wMi0xOSAwNzo1MCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3A6CisKKyAgIEJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0wMi0xOSAwNjo0NyAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgTkVXUzogc25tcGxpYjogUEFUQ0g6IDI5NDI5NDA6IGZyb20gIkJpbGwgRmVubmVyIjogQWRkIGEgbmV3CisgICBmdW5jdGlvbiwgbmV0c25tcF9wYXJzZV9hcmdzLCB0aGF0IGlzIGxpa2Ugc25tcF9wYXJzZV9hcmdzIGJ1dAorICAgdGFrZXMgYW4gYWRkaXRpb25hbCBiaXRtYXNrLCBmbGFncywgdG8gYWZmZWN0IHRoZSBiZWhhdmlvdXIuIEFsc28KKyAgIHJlbW92ZSB0aGUgbWFnaWMgaGFuZGxpbmcgb2Ygc29tZSBhcHBsaWNhdGlvbiBuYW1lcy4KKworMjAxMC0wMi0xOCAxNDoyMiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9iaW46CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0wMi0xOCAxNDoyMCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwOgorCisgICBTb3J0ZWQgbmFtZXMgb2Ygc291cmNlIGZpbGVzIGFscGhhYmV0aWNhbGx5LgorCisyMDEwLTAyLTE4IDEzOjAzICBidmFzc2NoZQorCisgICAqICBSRUFETUUud2luMzIsIHNubXBsaWIvd2luc2VydmljZS5jLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsIHdpbjMyL25ldHNubXBtaWJzc2RrLCAgIAorICAgICAgd2luMzIvc25tcGRzZGssIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgICAKKyAgICAgIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzJzZGsuZHN3OgorCisgICBDSEFOR0VTOiBXaW4zMjogZHJvcHBlZCBzdXBwb3J0IGZvciBidWlsZGluZyBOZXQtU05NUCB3aXRoCisgICBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2LjAgd2l0aG91dCBwbGF0Zm9ybSBTREsuIEJ1aWxkaW5nCisgICBOZXQtU05NUCB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDYuMCArIFBTREsgb3IgYW55IGxhdGVyCisgICB2ZXJzaW9uIG9mIE1TVkMgaXMgc3RpbGwgcG9zc2libGUgaG93ZXZlci4KKyAgIAorICAgTm90ZTogaWYgaW4gdGhlIGZ1dHVyZSBmb3Igd2hhdGV2ZXIgcmVhc29uIGl0IHNob3VsZCBiZWNvbWUKKyAgIG5lY2Vzc2FyeSBhZ2FpbiB0byBiZSBhYmxlIHRvIGJ1aWxkIE5ldC1TTk1QIHdpdGggTVNWQyB3aXRob3V0CisgICByZWx5aW5nIG9uIHRoZSBwbGF0Zm9ybSBTREsgaGVhZGVycywgcGxlYXNlICNpZmRlZiBvdXQgdGhlIE1JQgorICAgY29kZSB0aGF0IHJlbGllcyBvbiB0aGUgUFNESyBoZWFkZXJzIGluc3RlYWQgb2Ygc3BsaXR0aW5nIHRoZQorICAgd29ya3NwYWNlIGZpbGVzIGFnYWluLgorCisyMDEwLTAyLTE4IDEyOjU3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmM6CisKKyAgIGRvczJ1bml4LgorCisyMDEwLTAyLTE4IDA5OjQ1ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oOgorCisgICBTb3VyY2UgY29kZSBjbGVhbnVwOgorICAgLSBNb3ZlZCBkb2N1bWVudGF0aW9uIG9mIG5ldHNubXBfbGFyZ2VfZmRfc2V0IG1lbWJlcnMgdG8gdGhlCisgICBjb21tZW50CisgICBibG9jayBqdXN0IGFib3ZlIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgdHlwZS4KKyAgIC0gUmVtb3ZlZCBzdXBlcmZsdW91cyAnZXh0ZXJuICJDIicgc3BlY2lmaWVyOiB0aGlzIGxpbmthZ2UKKyAgIHNwZWNpZmllcgorICAgb25seSBoYXMgYW4gZWZmZWN0IG9uIGRlY2xhcmF0aW9ucyBvZiB2YXJpYWJsZXMgb2YgZnVuY3Rpb25zIGFuZAorICAgbm90CisgICBvbiB0eXBlZGVmcyBvciBzdHJ1Y3QgZGVmaW5pdGlvbnMuCisgICAtIFJhbiB0aGlzIGhlYWRlciBmaWxlIHRocm91Z2ggaW5kZW50LgorCisyMDEwLTAyLTE4IDA5OjI2ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVBWNkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3A6CisKKyAgIENoYW5nZXM6CisgICAtIEJ1aWxkcyBhZ2FpbiB3aXRoIE1TVkMuCisgICAtIEZpeGVkIGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IE1TVkMgKHBhc3NpbmcgaW50CisgICBpbnN0ZWFkIG9mIHVfc2hvcnQgdG8gaHRvbnMoKSAvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUKKyAgIG1pc3NpbmcgYmVjYXVzZSBvZiBtaXNzaW5nICNpbmNsdWRlIGRpcmVjdGl2ZXMpLgorCisyMDEwLTAyLTE2IDE3OjE2ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IFRoZSBoZWFkZXIgZmlsZSA8c3lzL3RpbWViLmg+IGlzIG5vIGxvbmdlcgorICAgaW5jbHVkZWQgZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4uIE9yOiB0aGUgaGVhZGVyIGZpbGUKKyAgIDxzeXMvdGltZWIuaD4gd2lsbCBoYXZlIHRvIGJlIGluY2x1ZGVkIGV4cGxpY2l0bHkgaW4gc291cmNlIGZpbGVzCisgICB0aGF0IG5lZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBmdW5jdGlvbiBmdGltZSgpLgorICAgCisgICBOb3RlOiBjb21wYXJlZCB0byByMTgwMjQgYW5kIGJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0CisgICBCU0Qgc3lzdGVtcyAtLSA8c3lzL3RpbWViLmg+IHdhcyBvbmx5IGluY2x1ZGVkIGZyb20KKyAgIDxuZXQtc25tcC90eXBlcy5oPiBvbiBCU0Qgc3lzdGVtcyBpbiByZXZpc2lvbnMgcjE4MDI1Li5yMTgxNTIuCisKKzIwMTAtMDItMTQgMTk6MjkgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDguaDoKKworICAgQnVpbGRzIG5vdyBvbiBGcmVlQlNEIHZlcnNpb24gOC4wLgorCisyMDEwLTAyLTEzIDIwOjU5ICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaDoKKworICAgQWRqdXN0IHRoZSBwbGFjZW1lbnQgb2YgOydzIGluIG9yZGVyIHRvCisgICBhKSBBdm9pZCB3YXJuaW5ncyBhYm91dCBzcHVyaW91cyBzZW1pY29sb25zCisgICBiKSBOb3QgaGF2ZSB1bnRlcm1pbmF0ZWQgZGVjbGFyYXRpb25zIGluIGhlYWRlcnMKKworMjAxMC0wMi0xMiAwMjo1NyAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmM6CisKKyAgIENIQU5HRVM6IG1pYjJjOiB1cGRhdGUgaW5saW5lIGRvY3VtZW50YXRpb247IGFkZCBzdG9yYWdldHlwZSB0ZXN0CisgICBmb3IgY29sdW1ucworCisyMDEwLTAyLTEyIDAxOjUwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgZml4IHR5cG8gaW4gZGVmaW5lCisKKzIwMTAtMDItMTIgMDE6MDUgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGZpeCBzZWQgcHJvY2Vzc2luZyBvbiB3aGl0ZS1zcGFjZSBhZGRpbmcgc29sYXJpcyBtYWNoaW5lcworCisyMDEwLTAyLTEwIDIzOjU2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBhZGQgdG9wIHNyY2RpciB0byBjcHAgc2VhcmNoIHBhdGgKKworMjAxMC0wMi0xMCAyMzo1MiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIGZyZWVic2QgbmVlZHMgdGltZS5oIGFib3ZlIHRpbWViLmgKKworMjAxMC0wMi0xMCAyMzozNyAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgdXNlIHNlZCB3aXRoIG11bHRpcmVwbGFjZSBvbiBhIGxpbmUgdG8gZml4IHBvc3NpYmxlIHdoaXRlc3BhY2UKKyAgIGlzc3VlIG9uIHNvbGFyaXMKKworMjAxMC0wMi0xMCAyMzoyMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYmVnaW5uaW5nIHdvcmsgZm9yIFRMUyBzZXBhcmF0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgd2l0aCBhIGJhc2UKKyAgIGZpbGUKKworMjAxMC0wMi0xMCAyMzoyMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmg6CisKKyAgIG1vdmUgYmFzZSB0cmFuc3BvcnQgY3JlYXRpb24gZnVuY3Rpb24gb3V0IG9mIGxpbnV4IGlmZGVmcworCisyMDEwLTAyLTEwIDIzOjIxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlZCBhbm90aGVyIGVycm9yIGxvZ2dpbmcgZnVuY3Rpb24KKworMjAxMC0wMi0xMCAyMzoyMCAgaGFyZGFrZXIKKworICAgKiBtaWJzL05FVC1TTk1QLVRDLnR4dDoKKworICAgYWRkZWQgVExTIG92ZXIgVENQCisKKzIwMTAtMDItMTAgMTY6MzkgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IExpbnV4OiBJbXByb3ZlZCBFdGhlckxpa2UtTUlCIHN1cHBvcnQKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEpvc2VmIE1vZWxsZXJzCisKIDIwMTAtMDItMTAgMTA6MDQgIGR0czEyCiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKQEAgLTI4OTAsNTEgKzQ2NDg1LDI4NSBAQAogICAgQ0hBTkdFUzogcHl0aG9uOiBTdXBwb3J0IG51bGwtYnl0ZXMgaW4gb2N0ZXQgc3RyaW5ncwogICAgUGF0Y2ggc3VwcGxpZWQgYnkgVG9tbXkgQmVhZGxlCiAKLTIwMTAtMDItMDkgMTU6MDUgIGJ2YXNzY2hlCisyMDEwLTAyLTEwIDAwOjU5ICBoYXJkYWtlcgogCi0gICAqICAuLCBSRUFETUUud2luMzIsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmgsIHdpbjMyL01nbXRBcGktd2luRXh0RExMLmgsICAgCi0gICAgICB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oOgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgogCi0gICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiB3b3JrcyBub3cgb24gV2luZG93cyBWaXN0YSwgV2luZG93cyA3Ci0gICBhbmQgV2luZG93cyAyMDA4IHRvby4KLSAgIENIQU5HRVM6IFdpbjMyOiBzaW1wbGlmaWVkIGJ1aWxkaW5nIE5ldC1TTk1QICsgd2luRXh0RExMIHdpdGgKLSAgIE1TVkMuCi0gICBDSEFOR0VTOiBNaW5HVzogd2luRXh0RExMOiBidWlsZHMgbm93LgotICAgTm90ZTogYWxsIHRoZXNlIGNoYW5nZXMgaGF2ZSBiZWVuIGJhY2twb3J0ZWQgZnJvbSB0aGUgdHJ1bmsuCisgICBtb3ZlZCBUTFMgaW5mcmFzdHJ1Y3R1cmUgaW50byBhIGJhc2UgZG9tYWluIGZpbGUKIAotMjAxMC0wMi0wOSAxNDoyOSAgYnZhc3NjaGUKKzIwMTAtMDItMTAgMDA6MDQgIGhhcmRha2VyCiAKLSAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oOgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CiAKLSAgIENIQU5HRVM6IFdpbjMyOiBhZGRlZCAjaW5jbHVkZSA8c3RkaW8uaD4gaW4KLSAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCBzdWNoIHRoYXQgTmV0LVNOTVAgNS41Ci0gICBidWlsZHMgYWdhaW4gd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2LgorICAgbW92ZWQgc29ja2V0NiBmdW5jdGlvbnMgdG8gdGhlIGlwdjYgYmFzZQogCi0yMDEwLTAyLTA4IDE5OjQ3ICBidmFzc2NoZQorMjAxMC0wMi0xMCAwMDowMyAgaGFyZGFrZXIKIAotICAgKiAgLiwgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaCwgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oOgorICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkLCBzbm1wbGliOiBSZW1vdmUgdGhlIGlubGluZSBkZWNsYXJhdGlvbnMgZm9yCi0gICBmdW5jdGlvbnMgdGhhdCBsYWNrIGFuIGlubGluZSBkZWZpbml0aW9uLgotICAgCi0gICBCYWNrcG9ydGVkIHIxNjkyNiBmcm9tIHRoZSB0cnVuayB0byB0aGUgNS40IGJyYW5jaCBiZWNhdXNlIE1hcmlvCi0gICBHYXJ0bmVyIHBvc3RlZAotICAgcGF0Y2ggMjk0NTIwMiBpbiB3aGljaCBoZSByZXBvcnRlZCB0aGF0IGdjYyBwcmludGVkIHNldmVyYWwKLSAgIHdhcm5pbmdzIGxpa2UgdGhlCi0gICBmb2xsb3dpbmcgZm9yIHRoZSBjb2RlIG9uIHRoZSA1LjQgYnJhbmNoOgotICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmg6MjQxOiB3YXJuaW5nOiBpbmxpbmUKLSAgIGZ1bmN0aW9uICd2b2lkKgotICAgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEobmV0c25tcF9yZXF1ZXN0X2luZm8qLCBjb25zdAotICAgY2hhciopJyB1c2VkIGJ1dAotICAgbmV2ZXIgZGVmaW5lZAorICAgd2hpdGUgc3BhY2UgZm9ybWF0dGluZwogCi0yMDEwLTAyLTA1IDA5OjQ4ICBqc2FmcmFuZWsKKzIwMTAtMDItMTAgMDA6MDMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZWQgdWRwX3NlbmQvcmVjdiB0byB1ZHBiYXNlCisKKzIwMTAtMDItMTAgMDA6MDIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFNvY2tldEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmUgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQgaW50byBzb2NrZXRiYXNlCisKKzIwMTAtMDItMTAgMDA6MDIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgbW92ZSBpcHY0IHNwZWNpZmljIFVEUCB0cmFuc3BvcnQgY3JlYXRpb24gdG8gdWRwaXB2NCBiYXNlCisKKzIwMTAtMDItMTAgMDA6MDEgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBtYWRlIGNvbW1vbiBmdW5jdGlvbnMgYmUgcmVmZXJlbmNlZCBkaXJlY3RseSBieSB0aGUgdHJhbnNwb3J0cworICAgYW5kIHJlbW92ZWQgb3JpZ2luYWwgZnVuY3Rpb25hbGl0eTsgdGhleSB3ZXJlIHN0YXRpYyBzbyB0aGVyZSBpcworICAgbm8gYmFja3dhcmRzIGNvbXBhdCBpc3N1ZXMKKworMjAxMC0wMi0xMCAwMDowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlZCBzb2NrZXQgYmFzZWQgY2xvc2UgdG8gYSBzb2NrZXQgYmFzZWQgZG9tYWluIGNvbW1vbiB0byBtYW55CisgICB0aGluZ3MKKworMjAxMC0wMi0wOSAyMzo1OSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jOgorCisgICBtb3ZlIFRDUCBjb21tb24gZnVuY3Rpb25zIHRvIGEgVENQQmFzZSBkb21haW4gaW1wbGVtZW50YXRpb24KKworMjAxMC0wMi0wOSAyMzo1NyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgd2FybmluZyBjbGVhbnVwCisKKzIwMTAtMDItMDkgMjM6NTYgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIHRtU3RhdGVSZWZlcmVuY2Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBpbmRleGVkIGFkZHJfcGFpcgorCisyMDEwLTAyLTA5IDIzOjU2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgbWFrZSBuZXRzbm1wX2R0bHN1ZHBfY2xvc2UgbWFrZSB1c2Ugb2YgbmV0c25tcF9iYXNldWRwX2Nsb3NlCisKKzIwMTAtMDItMDkgMjM6NTUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZWQgYmFzZSBVRFAgc29ja2V0IGNyZWF0aW9uIGludG8gYSBjb21tb24gYmFzZSBmdW5jdGlvbiBhbmQKKyAgIG1hZGUgdXNlIG9mIGl0CisKKzIwMTAtMDItMDkgMjM6NTQgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaDoKKworICAgcHJvcGVyIF9IIGlmZGVmIGNoZWNrcworCisyMDEwLTAyLTA5IDIzOjU0ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIGFkZGVkIGEgcmF3IFVEUCBiYXNlIGRvbWFpbgorCisyMDEwLTAyLTA5IDIzOjUzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBjcmVhdGVkIGEgVURQIElQdjQgYmFzZTsgbW92ZWQgYW5kIHJldXNlZCBtb3JlIGluZnJhc3RydWN0dXJlCisKKzIwMTAtMDItMDkgMjM6NTEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmVkIGlwdjQgYWRkcmVzcyBmb3JtYXR0aW5nIGludG8gc25tcElQdjRCYXNlRG9tYWluCisKKzIwMTAtMDItMDkgMjM6NTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYzoKKworICAgdjYgZG9tYWluIGluZnJhc3RydWN0dXJlIGZpbGVzCisKKzIwMTAtMDItMDkgMjM6NTEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBWNEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQVjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQVjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY0QmFzZURvbWFpbi5jOgorCisgICB2NiBkb21haW4gaW5mcmFzdHJ1Y3R1cmUgZmlsZXMKKworMjAxMC0wMi0wOSAyMzo1MCAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUFY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIE5ldyBJUHY0IGFuZCBJUCBiYXNlIHRyYW5zcG9ydCBmaWxlcworCisyMDEwLTAyLTA5IDIzOjQ4ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgZG9uJ3QgZG91YmxlIGluY2x1ZGUgdHJhbnNwb3J0IG1vZHVsZXMKKworMjAxMC0wMi0wOSAyMzo0OCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oOgorCisgICBtb3ZlZCBhcmNoaXRlY3R1cmUgdGVzdHMgaW50byB0aGUgaGVhZGVyIGZpbGVzIHVzaW5nIGNvbmZpZ19lcnJvcgorICAgZm9yIHNpZ25hbGluZyBwcm9ibGVtcworCisyMDEwLTAyLTA5IDIzOjQ2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgbW92ZWQgYXJjaGl0ZWN0dXJlIHRlc3RzIGludG8gdGhlIGhlYWRlciBmaWxlcyB1c2luZyBjb25maWdfZXJyb3IKKyAgIGZvciBzaWduYWxpbmcgcHJvYmxlbXMKKworMjAxMC0wMi0wOSAyMzo0NSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmg6CisKKyAgIG1vdmVkIGFyY2hpdGVjdHVyZSB0ZXN0cyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdXNpbmcgY29uZmlnX2Vycm9yCisgICBmb3Igc2lnbmFsaW5nIHByb2JsZW1zCisKKzIwMTAtMDItMDkgMjM6NDMgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBjaGVjayBmb3IgYW5kIHJlcG9ydCBjb25maWdfZXJyb3JzIGluIHRyYW5zcG9ydCBoZWFkZXJzCisKKzIwMTAtMDItMDkgMjM6NDMgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIGFsbG93IGEgTkVUU05NUF9RVUlDS19DSEVDSyBlbnYgdmFyaWFibGUgdG8gYnlwYXNzIGhlYWRlciBjaGVja3MKKworMjAxMC0wMi0wOSAyMzo0MiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGJldHRlciBjb21tZW50cworCisyMDEwLTAyLTA5IDIzOjQyICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgY2hlY2sgZm9yIGNvbmZpZ19yZXF1aXJlIG1hY3JvcyBpbiB0cmFuc3BvcnQgaGVhZGVycyBmb3IKKyAgIGZvcmNlLWluY2x1ZGluZyBvZiBvdGhlciB0aGluZ3MKKworMjAxMC0wMi0wOSAyMzo0MSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIHBlcmwvYWdlbnQvYWdlbnQueHMsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIGRlZmluZSBhIHN0YW5kYXJkaXplZCBpbmRleGVkIGFkZHJfcGFpciBpbnN0ZWFkIG9mIHVzaW5nIG9uZQorICAgbGFiZWxlZCBvbmx5IGZvciBVRFAgZXZlcnl3aGVyZQorCisyMDEwLTAyLTA5IDIzOjQwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBmaXggdHJhbnNwb3J0IHByZWZpeCBsaXN0IGZvciBpbmNvbWluZyBtZXNzYWdlcworCisyMDEwLTAyLTA5IDIzOjQwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgsIHNubXBsaWIvc25tcHRzbS5jOgorCisgICByZW1vdmUgdGhlIHNlY3VyaXR5IGxldmVsIGZyb20gdGhlIFRTTSBjYWNoZTsgcHJldmlvdXMgZXhpc3RlbmNlCisgICBmcm9tIGZyb20gYSBkcmFmdCBjb3B5IG9mIHRoZSBUU00gUkZDIGFuZCBpcyBub3cgc3RvcmVkIGVudGlyZWx5CisgICBpbiB0aGUgdG0gcmVmZXJlbmNlCisKKzIwMTAtMDItMDkgMjM6MzkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGltcGxlbWVudCBpbmNvbWluZyBUU00gcHJvY2VkdXJlcyBhY2NvcmRpbmcgdG8gUkZDIHRleHQKKworMjAxMC0wMi0wOSAyMzozOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgaW1wbGVtZW50IG91dGdvaW5nIFRTTSBwcm9jZWR1cmVzIGFjY29yZGluZyB0byBSRkMgdGV4dAorCisyMDEwLTAyLTA5IDIzOjM5ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oOgorCisgICBjcmVhdGUgZGVmaW5lZCBzaXplZCBhcnJheSBhbmQgbGVuZ3RoIHZhcmlhYmxlCisKKzIwMTAtMDItMDUgMDk6NTIgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGZpbGVkZXNjcmlwdGlvciBsZWFrIGluIEV0aGVybGlrZS1NSUIgYW5kCisgICBSTU9OLU1JQgorCisyMDEwLTAyLTA0IDE1OjU3ICBqc2FmcmFuZWsKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAogICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIApAQCAtMjk0NSwyNiArNDY3NzQsNjQgQEAKICAgIFNvbWUgaW50ZXJmYWNlcyBjYW4gcmVwb3J0IHRoZWlyIHJlYWwgc3BlZWQsIGV2ZW4gdGhleSBhcmUgZG93bi4KICAgIEFuZCBpZiB0aGV5IGNhbid0LCB0aGUgZmFsbGJhY2sgdG8gMTBNYnBzIGlzIHN0aWxsIHRoZXJlLgogCi0yMDEwLTAyLTAxIDAxOjA3ICB0YW5kZXJzCisyMDEwLTAyLTAxIDE0OjQ3ICBidmFzc2NoZQogCi0gICAqIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwOgorICAgKiBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmM6CiAKLSAgIEZvbGxvdy11cCBmb3IgcjE4MDkzOiBzYW1lIGNoYW5nZXMgZm9yIGFsbCBicmFuY2hlcworICAgRml4ZWQgdGhlIGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSB0aGUgc291cmNlIGZpbGUKKyAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYy4KKworMjAxMC0wMi0wMSAxNDo0NSAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzIsIHNubXBsaWIva2V5dG9vbHMuYzoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBzaW1wbGlmaWVkIHRoZSBwcm9jZWR1cmUgZm9yIGJ1aWxkaW5nCisgICB3aXRoIFNOTVB2MyBzdXBwb3J0IGVuYWJsZWQgKE9wZW5TU0wpLgorCisyMDEwLTAyLTAxIDE0OjM0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgICAKKyAgICAgIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvbWQ1LmMsIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBhbGwgY2FsbHMgdG8gZnJlZSgpIGFyZSBpbnRlcmNlcHRlZCB3aGVuIGJ1aWxkaW5nCisgICB3aXRoIGRtYWxsb2MKKyAgIHN1cHBvcnQgZW5hYmxlZC4gSW5jbHVkZWQgPGRtYWxsb2MuaD4gaW4gdGhvc2Ugc291cmNlIGZpbGVzIHdoZXJlCisgICBpdCB3YXMgbm90CisgICB5ZXQgaW5jbHVkZWQsIGFuZCBwcm92aWRlZCBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGZyZWUoKSB3aGVyZQorICAgdGhlIGFkZHJlc3Mgb2YKKyAgIHRoaXMgZnVuY3Rpb24gd2FzIHRha2VuIChEbWFsbG9jIGNhbiBvbmx5IGludGVyY2VwdCBmcmVlKCkgd2hlbgorICAgaXQgaXMgY2FsbGVkCisgICBkaXJlY3RseSBidXQgbm90IHdoZW4gaXQgaXMgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyKS4KKworMjAxMC0wMi0wMSAxMDo0OSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CisKKyAgIE5FV1M6IGJ1aWxkaW5nOiBCdWlsZGluZyBOZXQtU05NUCB3aXRoIGRtYWxsb2Mgc3VwcG9ydCBlbmFibGVkIGlzCisgICBhZ2FpbiBwb3NzaWJsZS4KIAogMjAxMC0wMi0wMSAwMTowNSAgdGFuZGVycwogCiAgICAqICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAgIAotICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwOgorICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTRhZ2VudHhhZ2VudHh0cmFwOgogCiAgICBDSEFOR0VTOiBidWlsZGluZzogJ21ha2UgdGVzdCBURVNUT1BUUz0iLVAgdGNwIicgd29ya3MgZmluZSBub3cKIAotMjAxMC0wMS0zMSAwMTo0MiAgdGFuZGVycworMjAxMC0wMS0zMSAwODowMiAgYnZhc3NjaGUKIAotICAgKiBtYW4vTWFrZWZpbGUuaW46CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyOgogCi0gICBGb2xsb3ctdXAgZm9yIHIxNzcxMCAvIGJhY2twb3J0IG9mIHIxNzcxMjogcmVtb3ZlIGFuIG9ic29sZXRlCi0gICBtYW51YWwKLSAgIHBhZ2UgZnJvbSB0aGUgc2V0IG9mIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgRm9sbG93LXVwIGZvciByMTgwODQ6IGZpeGVkIGFuIHNoIHN5bnRheCBlcnJvciBpbiB0aGUgY29uZmlndXJlCisgICBzY3JpcHQKKyAgIHRoYXQgd2FzIHRyaWdnZXJlZCBvbiBzeXN0ZW1zIHdpdGhvdXQgbGliY3J5cHRvIGFuZCB3aXRob3V0CisgICBsaWJlYXkzMi4KKyAgIFRoZSBmb2xsb3dpbmcgZXJyb3Igd2FzIHJlcG9ydGVkOgorICAgY29uZmlndXJlWzMzMTM2XTogeDogdW5rbm93biB0ZXN0IG9wZXJhdG9yCiAKIDIwMTAtMDEtMjkgMjA6MDcgIGpzYWZyYW5lawogCkBAIC0yOTc5LDYgKzQ2ODQ2LDEyOCBAQAogICAgRml4IHRlc3QgMzUgd2hlbiBjb25maWd1cmUgb3B0aW9uICctLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4nIHdhcwogICAgdXNlZCBhbmQgdGhlIGRpcmVjdG9yeSBmb3IgdGVtcC4gZmlsZXMgZG9lcyBub3QgZXhpc3QgeWV0LgogCisyMDEwLTAxLTI5IDE1OjA3ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL2Nsb3NlZGlyLmMsICAgCisgICAgICBzbm1wbGliL2dldHRpbWVvZmRheS5jLCBzbm1wbGliL29wZW5kaXIuYywgc25tcGxpYi9yZWFkZGlyLmMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwOgorCisgICBNb3ZlZCB0aGUgc291cmNlIGNvZGUgb2YgdGhlIG9wZW5kaXIoKSwgcmVhZGRpcigpLCBjbG9zZWRpcigpIGFuZAorICAgZ2V0dGltZW9mZGF5KCkgcmVwbGFjZW1lbnRzIGZvciBNU1ZDIGZyb20gc25tcGxpYi9zeXN0ZW0uYyB0bworICAgc2VwYXJhdGUgc291cmNlIGZpbGVzIGluIHNubXBsaWIuCisKKzIwMTAtMDEtMjkgMDg6NTcgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ29uZmlndXJlIHNjcmlwdCBjb25zaXN0ZW5jeSBpbXByb3ZlbWVudDogcmVuYW1lZCB0aGUgdmFyaWFibGUKKyAgICJzYXZlZF9MSUJTIiBpbnRvICJuZXRzbm1wX3NhdmVfTElCUyIuCisKKzIwMTAtMDEtMjkgMDY6MzkgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4OgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBDaGVjayB0aGUgc2l6ZSBvZiBzdW5fcGF0aCBhbmQgdXNlIHRoYXQgdG8KKyAgIGdlbmVyYXRlIHRoZSBtYXhpbWFsIHNpemUgc3RyaW5ncyBmb3Igc3RyZXNzaW5nIGNvbTJzZWN1bml4LgorCisyMDEwLTAxLTI3IDE1OjE2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZXZhbF90b29scy5zaDoKKworICAgTkVXUzogTWluR1c6IHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBpcyBhZ2FpbiBwb3NzaWJsZQorICAgKCdtYWtlIHRlc3QnKS4KKworMjAxMC0wMS0yNyAxNDo0MyAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IEN5Z3dpbjogYnVpbGRpbmcgd2l0aCBhbm90aGVyIE9wZW5TU0wgcGFja2FnZSB0aGFuIHRoZQorICAgQ3lnd2luLXByb3ZpZGVkIHBhY2thZ2VzIG9wZW5zc2wgYW5kIG9wZW5zc2wtZGV2ZWwgaXMgYWdhaW4KKyAgIHBvc3NpYmxlLgorICAgTkVXUzogTWluR1c6IGJ1aWxkaW5nIHdpdGggT3BlblNTTCB3b3JrcyBhZ2Fpbi4KKworMjAxMC0wMS0yNiAyMToyNyAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIHRoZSBjb250ZXh0IGFyZ3VtZW50IG9mIHNlbmRfdjN0cmFwLAorICAgc2VuZF90cmFwX3ZhcnNfd2l0aF9jb250ZXh0IGFuZCBuZXRzbm1wX3NlbmRfdHJhcHMgcmVmZXIgdG8gYQorICAgY29uc3QgY2hhciouCisKKzIwMTAtMDEtMjYgMjE6MjQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOgorCisgICBDb3JyZWN0IG1pc3NwZWxsaW5nIC0gI2Vsc2lmIHRvICNlbGlmCisKKzIwMTAtMDEtMjYgMjE6MjEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIEFwcGFyZW50bHkgbm90IGFsbCBzeXN0ZW1zIGRlZmluZSBJTkVUX0FERFJTVFJMRU4gc28gYWRkIGl0IGlmIGl0CisgICBpcyBtaXNzaW5nLgorCisyMDEwLTAxLTI2IDE1OjQ2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvVEVTVENPTkYuc2g6CisKKyAgIEFkZGVkIG5ldHN0YXQgcGF0aCBmb3IgTWluR1cuCisKKzIwMTAtMDEtMjYgMTU6MDAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIGZpeCBzdGF0IG5hbWVzCisKKzIwMTAtMDEtMjYgMTU6MDAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4KKworMjAxMC0wMS0yNiAxNDo1OSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgdXNlIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybgorCisyMDEwLTAxLTI2IDE0OjU4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuCisKKzIwMTAtMDEtMjYgMTQ6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHVwZGF0ZSBjb21tZW50cyB0byByZWZsZWN0IFJGQzU1OTEgYXMgdGhlIGRvY3VtZW50IGRlc2NyaWJpbmcgdGhlCisgICBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTAxLTI2IDExOjQzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2N5Z3dpbi5oOgorCisgICBORVdTOiBDeWd3aW46IEJVRzogMjkzOTE2ODogYnl0ZSBvcmRlciBvZiB1ZHBMb2NhbFBvcnQgaXMgbm93CisgICBjb3JyZWN0LgorCisyMDEwLTAxLTI2IDEwOjQ2ICBidmFzc2NoZQorCisgICAqICBuZXQtc25tcC1jb25maWcuaW4sIHRlc3RpbmcvVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsOgorCisgICBORVdTOiBDeWd3aW46IEJVRzogMjkzOTE2ODogZml4ZWQgdGVzdCBpbmZyYXN0cnVjdHVyZSAoIm1ha2UKKyAgIHRlc3QiKS4gVGhpcyBoYXMgYmVlbiBmaXhlZCBieSB1c2luZyB0aGUgcHJvcGVyIGVudmlyb25tZW50CisgICBzZXBhcmF0b3IgY2hhcmFjdGVyIGFuZCBieSBhZGRpbmcgdGhlIHBhdGggb2YgdGhlIG5ldHN0YXQKKyAgIGV4ZWN1dGFibGUgZm9yIEN5Z3dpbiBpbiB0ZXN0aW5nL1RFU1RDT05GLnNoLgorCiAyMDEwLTAxLTI2IDA5OjI3ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgpAQCAtMjk5NSwxMiArNDY5ODQsNjI4IEBACiAgICB3aG9sZSBwcm9jZXNzCiAgICBpcyByZXN0YXJ0ZWQgb25seSB0aHJlZSB0aW1lcywgdG8gcHJldmVudCBlbmRsZXNzIGxvb3AuCiAKKzIwMTAtMDEtMjUgMjI6MTYgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCBzbm1wbGliL3NjYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkOiBEbyBub3QgY2hlY2sgaWYgdmFsdWVzIG9mIHR5cGUgc2l6ZV90CisgICBhcmUgbGVzcyB0aGFuIDAuCisKKzIwMTAtMDEtMjUgMjI6MTEgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBDaGVjayB0aGUgcmFuZ2Ugb2Ygb2lkIHZhbHVlcyB0b3dhcmRzIHRoZSBtYXhpbXVtCisgICBvaWQgdmFsdWUsIG5vdFVMT05HX01BWAorCisyMDEwLTAxLTI1IDIwOjAxICByc3RvcnkKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBvbmx5IGJhaWwgb24gbWlzc2luZyBsaWJpcGhscGFwaSBmb3IgeHdpbnNvY2syCisKKzIwMTAtMDEtMjUgMTk6NTcgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJlbmFtZSBNQVhfU1RBVFMgdG8gTkVUU05NUF9TVEFUX01BWF9TVEFUUworCisyMDEwLTAxLTI1IDE5OjUzICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jOgorCisgICB1cGRhdGUgZm9yIG5ldyBwYXRoIHRvIHNubXBfZ2V0X3N0YXRpc3RpY3M7IGNoZWNrIGZvciBpbmRleAorICAgb3ZlcmZsb3cKKworMjAxMC0wMS0yNSAxOTo0NCAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oOgorCisgICB1cGRhdGUgZm9yIG5ldyBwYXRoIHRvIHNubXBfZ2V0X3N0YXRpc3RpY3MKKworMjAxMC0wMS0yNSAxNjowMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgdXNlICpjdXJyZW50KiBjb3B5IG9mIHRoZSBNSUIgd2hlbiBnZW5lcmF0aW5nIHN0YXRzCisKKzIwMTAtMDEtMjUgMTY6MDEgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL3NubXBfZ2V0X3N0YXRpc3RpYy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaDoKKworICAgbW92ZSBzbm1wX2dldF9zdGF0aXN0aWMgaGVscGVyIHRvIGhlbHBlcnMgZGlyOyB1cGRhdGUgYWxsX2hlbHBlcnMKKyAgIGhlYWRlcgorCisyMDEwLTAxLTI1IDE0OjM0ICBidmFzc2NoZQorCisgICAqIGFwcHMvYWdlbnR4dHJhcC5jOgorCisgICBSZXBsYWNlZCBleHBsaWNpdCBkZWNsYXJhdGlvbnMgb2Ygb3B0aW5kLCBvcHRvcHQgYW5kIG9wdGFyZyBieQorICAgI2luY2x1ZGUgPHVuaXN0ZC5oPiBiZWNhdXNlIGV4cGxpY2l0bHkgZGVjbGFyaW5nIHRoZXNlIHZhcmlhYmxlcworICAgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBDeWd3aW4uCisKKzIwMTAtMDEtMjUgMTQ6MjUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIE5FV1M6IEN5Z3dpbjogSVB2NiBpcyBvbmx5IHN1cHBvcnRlZCB1bmRlciBDeWd3aW4gMS43IG9yIGxhdGVyLgorICAgVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBJUHY2IHN1cHBvcnQgaW4gTmV0LVNOTVAgdW5kZXIgQ3lnd2luCisgICBpbnZvbHZlZCBhIHN0cmFuZ2UgbWl4dHVyZSBvZiBDeWd3aW4gYW5kIFdpbnNvY2syIHNvY2tldCBjYWxscywKKyAgIHdoaWNoIHdhcyB0b28gaGFyZCB0byBtYWludGFpbi4KKyAgIE5FV1M6IEN5Z3dpbjogYnVpbGRzIGFnYWluIHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQKKyAgICgtLWVuYWJsZS1pcHY2KS4gQXQgbGVhc3QgTmV0LVNOTVAgNS41IGRvZXNuJ3QgYnVpbGQgdW5kZXIgQ3lnd2luCisgICB3aXRoIElQdjYgc3VwcG9ydCBlbmFibGVkLiBUaGUgY29uZmlndXJlIHNjcmlwdCByZXBvcnRlZAorICAgImNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZSAuLi4gcmVzdWx0OiAidW5rbm93biwgbm8iIC4uLiBlcnJvcjoKKyAgIElQdjYgdHJhbnNwb3J0cyBub3QgYXZhaWxhYmxlIGlmIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCIuCisKKzIwMTAtMDEtMjUgMTQ6MTMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9pbmV0X250b3AuYywgc25tcGxpYi9pbmV0X3B0b24uYzoKKworICAgQWRkZWQgbWlzc2luZyAjaW5jbHVkZSA8c3RyaW5nLmg+LgorCisyMDEwLTAxLTI1IDE0OjEwICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlczoKKworICAgQWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIHRoZSBJUHY2IHN0YWNrIGluY2x1ZGVkIGluIEN5Z3dpbgorICAgdmVyc2lvbiAxLjcuCisgICBJUHY2IHN1cHBvcnQgaXMgb25lIG9mIHRoZSBuZXcgZmVhdHVyZXMgb2YgQ3lnd2luIDEuNy4gRm9yIG1vcmUKKyAgIGluZm9ybWF0aW9uLAorICAgc2VlIGFsc28gaHR0cDovL2N5Z3dpbi5jb20vY3lnd2luLXVnLW5ldC9vdi1uZXcxLjcuaHRtbC4KKworMjAxMC0wMS0yNSAxMjo0MCAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDSEFOR0VTOiBDeWd3aW46IHRoZSBtZXNzYWdlICJjb25maWd1cmU6IFdBUk5JTkc6IHdpbnNvY2suaDoKKyAgIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgZG9lcyBubyBsb25nZXIgYXBwZWFyIHdoZW4KKyAgIHJ1bm5pbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgICBGb2xsb3ctdXAgZm9yIHIxODA1MDogcmUtZW5hYmxlZCBsaWJpcGhscGFwaSBhbmQgaXBobHBhcGkuaCB0ZXN0cworICAgZm9yIG5vbi1NaW5HVyBwbGF0Zm9ybXMgc2luY2UgdGhlIEN5Z3dpbiBidWlsZCBuZWVkcyB0aGVzZS4KKworMjAxMC0wMS0yNSAwNzoyOCAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCBzbm1wbGliL2luZXRfbnRvcC5jLCAgCisgICAgICAgc25tcGxpYi9pbmV0X3B0b24uYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSBhdXRvY29uZiB0byBkZWNpZGUgaWYgaW5ldF9udG9wLmMgYW5kCisgICBpbmV0X3B0b24uYyBhcmUgdG8gYmUgY29tcGlsZWQuCisKKzIwMTAtMDEtMjUgMDc6MDkgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnM6CisKKyAgIENIQU5HRVM6IE1pbkdXOiBzdHJ1Y3Qgc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWQgY29uZmlndXJlIHRlc3QKKyAgIGRvZXMgbm93IHdvcmsuCisKKzIwMTAtMDEtMjUgMDU6MTQgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIFRMU1RNIGNvdW50ZXIgc3RhdHMKKworMjAxMC0wMS0yNSAwNToxMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgYWRkIGluIFRTTSBuZWVkZWQgY291bnRlciBkZWZpbml0aW9ucworCisyMDEwLTAxLTI1IDA1OjEyICBoYXJkYWtlcgorCisgICAqIG1pYnMvU05NUC1UU00tTUlCLnR4dCwgbWlicy9yZmNsaXN0OgorCisgICBhZGRlZCB0aGUgU05NUC1UU00tTUlCCisKKzIwMTAtMDEtMjQgMTQ6NDMgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oOgorCisgICBORVdTOiBzbm1wZDogTWFkZSBzdWJ0cmVlX2NvbnRleHRfY2FjaGU6OmNvbnRleHRfbmFtZSBhIGNvbnN0CisgICBjaGFyKi4KKworMjAxMC0wMS0yNCAxNDoyNyAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUHJldmVudCBnY2MgcGVkLXdhcm5pbmcgZm9yCisgICBORVRTTk1QX1JFTU9WRV9DT05TVAorCisyMDEwLTAxLTI0IDEzOjI3ICBtYWdmcgorCisgICAqIGFwcHMvc25tcHVzbS5jOgorCisgICBDSEFOR0VTOiBzbm1wdXNtOiBQcmVmZXIgdG8gdXNlIGEgdmFyaWFibGUgb2YgdGhlIHJpZ2h0IHR5cGUgb3ZlcgorICAgYW4gdWdseSBjYXN0LiBMZXNzZW4gdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBhcyB3ZWxsLgorCisyMDEwLTAxLTI0IDEyOjU5ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEludHJvZHVjZWQgdGhlIHZhcmlhYmxlICd3aXRoX3NvY2tsaWInIGluIHRoZQorICAgY29uZmlndXJlIHNjcmlwdC4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gIndpbnNvY2syIiBmb3IgTWluR1cKKyAgIGFuZCB0byAiZGVmYXVsdCIgZm9yIGFsbCBvdGhlciBzeXN0ZW1zLiBXaW5zb2NrMiB0ZXN0cyBhcmUgb25seQorICAgcnVuIGlmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICJ3aW5zb2NrMiIgKE1pbkdXKS4KKworMjAxMC0wMS0yNCAxMjo1MyAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIFJlbW92ZSBzdXBlcmZsdW91cyBkZWJ1ZyBsb2dzLgorCisyMDEwLTAxLTI0IDEyOjQ1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBXaW5kb3dzLCBjb21waWxlciB3YXJuaW5nIGZpeGVzOiBmaXhlZCB3YXJuaW5ncyBhYm91dCBjaGFyICogLworICAgdW5zaWduZWQgY2hhciAqCisgICBtaXNtYXRjaGVzLgorCisyMDEwLTAxLTI0IDEyOjQ0ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBXaW5kb3dzLCBjb21waWxlciB3YXJuaW5nIGZpeDogbWFrZSBpbmV0X250b3AoKSBhbmQgaW5ldF9wdG9uKCkKKyAgIGRlY2xhcmF0aW9ucworICAgYXZhaWxhYmxlIHRvIHRoZSBjb21waWxlci4KKworMjAxMC0wMS0yNCAxMjo0NCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBXaW5kb3dzLCBjb21waWxlciB3YXJuaW5nIGZpeDogbWFkZSBzdXJlIHRoYXQgPHdzMnRjcGlwLmg+IHdpbGwKKyAgIGJlIGluY2x1ZGVkCisgICBmcm9tIDxuZXQtc25tcC90eXBlcy5oPiBzdWNoIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgY29tcGxhaW4KKyAgIGFib3V0IHN0cnVjdAorICAgc29ja2FkZHJfaW42IGJlaW5nIHVzZWQgYmVmb3JlIGJlaW5nIGRlZmluZWQuCisKKzIwMTAtMDEtMjQgMTE6NDIgIGJ2YXNzY2hlCisKKyAgICogbWFuOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMDEtMjQgMTE6NDEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X2luZGV4LmMsIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsICAgCisgICAgICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYl9tb2R1bGVzLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5jLCBhZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCBhZ2VudC9taWJncm91cC9taWJpbmNsLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXBidWxrZ2V0LmMsICAgCisgICAgICBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCBhcHBzL3NubXBkZi5jLCAgIAorICAgICAgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgYXBwcy9zbm1wc2V0LmMsICAgCisgICAgICBhcHBzL3NubXBzdGF0dXMuYywgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdGVzdC5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB1c20uYywgYXBwcy9zbm1wdmFjbS5jLCAgIAorICAgICAgYXBwcy9zbm1wd2Fsay5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oLCBzbm1wbGliL2xjZF90aW1lLmMsICAgCisgICAgICBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wLXRjLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfYXV0aC5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsICAgCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wa3NtLmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgQ2xlYW51cCAoV2luZG93cyk6IHJlbW92ZWQgc3VwZXJmbHVvdXMgI2luY2x1ZGUgPHN5cy90aW1lYi5oPgorICAgZGlyZWN0aXZlcy4gVGhpcyBoZWFkZXIgZmlsZQorICAgaGFzIG9ubHkgdG8gYmUgaW5jbHVkZWQgZnJvbSBzbm1wbGliL3N5c3RlbS5jIGJlY2F1c2Ugb2YgdGhlCisgICBfZnRpbWUoKSBjYWxsIGluIHRoYXQgZmlsZS4KKworMjAxMC0wMS0yNCAxMDo0MyAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L2luZXQuYzoKKworICAgVGhlIG1hY3JvICdDKCknIG5vdyBjYXN0cyBpdHMgcmVzdWx0IGZyb20gdW5zaWduZWQgbG9uZyB0bworICAgdW5zaWduZWQgaW50LgorICAgVGhpcyBjaGFuZ2UgZml4ZXMgYSBjb21waWxlciB3YXJuaW5ncyBhYm91dCBmb3JtYXQgc3BlY2lmaWNhdGlvbgorICAgbWlzbWF0Y2hlcworICAgYW5kIGZpeGVzIGEgYnVnIChpbmNvcnJlY3Qgc25tcG5ldHN0YXQgb3V0cHV0KSBvbiBiaWcgZW5kaWFuCisgICBzeXN0ZW1zLgorCisyMDEwLTAxLTI0IDEwOjMzICBidmFzc2NoZQorCisgICAqIG1hbi9jb25maWdfYXBpLjM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTQ2OiByZW1vdmVkIGdlbmVyYXRlZCBtYW4gcGFnZXMgZnJvbQorICAgcmVwb3NpdG9yeS4KKworMjAxMC0wMS0yNCAxMDozMSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2luc2VydmljZS5oLCBzbm1wbGliL3dpbnNlcnZpY2UuYzoKKworICAgTW92ZWQgdHdvIGRlY2xhcmF0aW9ucyBvZiBzdGF0aWMgZnVuY3Rpb25zIGZyb20gLmggdG8gLmMuCisKKzIwMTAtMDEtMjQgMTA6MjEgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jOgorCisgICBSZW1vdmUgdW5uZWNlc3NhcnkgY2FzdHMuCisKKzIwMTAtMDEtMjQgMTA6MTkgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBidWlsZHMgYWdhaW4gd2hlbiBIQVZFX0dFVEFERFJJTkZPIGlzIG5vdAorICAgZGVmaW5lZC4KKworMjAxMC0wMS0yNCAxMDowMyAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9pbmV0X250b3AuYywgICAKKyAgICAgIHNubXBsaWIvaW5ldF9udG9wLmgsIHNubXBsaWIvaW5ldF9wdG9uLmMsIHNubXBsaWIvaW5ldF9wdG9uLmgsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDaGFuZ2VzOgorICAgLSBBZGRlZCBjb25maWd1cmUgdGVzdHMgZm9yIGluZXRfbnRvcCgpIGFuZCBpbmV0X3B0b24oKS4KKyAgIC0gQWRkZWQgaGVhZGVyIGZpbGVzIHNubXBsaWIvaW5ldF9udG9wLmggYW5kIHNubXBsaWIvaW5ldF9wdG9uLmguCisgICAtIFJlcGxhY2VkICJleHRlcm4gaW5ldF9udG9wKC4uLik7IiBhbmQgImV4dGVybiBpbmV0X3B0b24oLi4uKTsiCisgICBieSAjaW5jbHVkZSAiaW5ldF9udG9wL3B0b24uaCIuCisgICAtIENvbnZlcnRlZCBzbm1wbGliL2luZXRfbnRvcC5jIGFuZCBzbm1wbGliL2luZXRfcHRvbi5jIGZyb20gSyZSCisgICBDIHRvIEFOU0kgQy4KKyAgIC0gUmVwbGFjZWQgdGhlIGluZXRfYXRvbigpIGNhbGxzIHRoYXQgd2VyZSBpbnRyb2R1Y2VkIGluIHIxODAzMworICAgaW4gc25tcGxpYi9zbm1wVURQRG9tYWluLmMgYnkgaW5ldF9wdG9uKCkgY2FsbHMgc3VjaCB0aGF0IGl0IGlzCisgICBhZ2FpbiBwb3NzaWJsZSB0byBidWlsZCBOZXQtU05NUCBvbiBXaW5kb3dzLgorCisyMDEwLTAxLTI0IDA2OjA4ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBSZW1vdmUgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyB0aGF0IGRvbid0CisgICBleGlzdCBvciBhcmUgZGVjbGFyZWQgZWxzZXdoZXJlLgorCisyMDEwLTAxLTI0IDA1OjQ4ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgTkVXUzogc25tcGxpYjogUmVtb3ZlZCB0aGUgdW51c2VkIHZhcmlhYmxlcyB3YXJtX3N0YXJ0X29pZCwKKyAgIGxpbmtfZG93bl9vaWQsIGxpbmtfdXBfb2lkLCBhdXRoX2ZhaWxfb2lkIGFuZCBlZ3BfeHh4X29pZC4KKworMjAxMC0wMS0yMyAyMjowNiAgbWFnZnIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDcwY29tMnNlYywgdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peDoKKworICAgQmV0dGVyIHNldCBvZiBTS0lQSUYvU0tJUElGTk9UUworCisyMDEwLTAxLTIzIDIwOjMxICBtYWdmcgorCisgICAqIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2LCB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peDoKKworICAgQmUgY29ycmVjdCBpbiB3aGF0IGl0IGlzIHRoYXQgaXMgdGVzdGVkIGluIHRoZSBoZWFkZXIuCisKKzIwMTAtMDEtMjMgMjA6MjcgIG1hZ2ZyCisKKyAgICogIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENoYW5nZWQgdGhlIGNvbTJzZWMgZGlyZWN0aXZlcyB0byBmYWlsIGlmIHRoZXJlCisgICBhcmUgdG9vIGZldyBhcmd1bWVudHMuIEFkZGl0aW9uYWxseSBjaGFuZ2VkIHRoZSBzdG9yYWdlIHN0cnVjdHVyZQorICAgdG8gbm90IGFsbG9jYXRlIG1vcmUgc3BhY2UgdGhhbiBuZWNlc3NhcnkuCisKKzIwMTAtMDEtMjMgMjA6MjIgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDA3MGNvbTJzZWMsIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXg6CisKKyAgIG5ldyB0ZXN0cyBjaGVja2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGNvbTJzZWMqIGRpcmVjdGl2ZXMKKworMjAxMC0wMS0yMyAxOToxNyAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgwMjU6IGJ1aWxkcyBhZ2FpbiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLgorCisyMDEwLTAxLTIzIDE3OjUxICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogT1MgaGVhZGVyIGRldGVjdGlvbiBjaGVjayBpcyBub3cgcnVuIGJlZm9yZQorICAgSVB2NiBzdGFjayBkZXRlY3Rpb24uCisgICBDSEFOR0VTOiBTb2xhcmlzOiBzb2NrYWRkcl9pbjYuc2luNl9hZGRyIGNvbmZpZ3VyZSB0ZXN0IGRvZXMgbm93CisgICB3b3JrLgorCisyMDEwLTAxLTIzIDE3OjQyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6CisKKyAgIEZpeGVkIGEgU29sYXJpcy1zcGVjaWZpYyBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTAxLTIzIDE3OjAwICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaDoKKworICAgTWluR1c6IGFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciA8c3lzL3RpbWViLmg+IGFuZCBhbHNvIGZvciBzdHJ1Y3QKKyAgIHRpbWV6b25lLgorCisyMDEwLTAxLTIzIDE2OjMyICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBNaW5HVzogbWFkZSBzdXJlIHRoYXQgdGhlIElQdjYtcmVsYXRlZCBkYXRhdHlwZXMgYXJlIGF2YWlsYWJsZQorICAgYmVmb3JlIGJlaW5nIHVzZWQuCisKKzIwMTAtMDEtMjMgMTY6MzAgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQWRkZWQgI3VuZGVmIEhBVkVfV0lORE9XU19ILgorCisyMDEwLTAxLTIzIDE2OjI4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgTWluR1c6IG1hZGUgZ2V0dGltZW9mZGF5KCkgZGVjbGFyYXRpb24gYXZhaWxhYmxlIGZvciB0aGUKKyAgIGNvbXBpbGVyLgorCisyMDEwLTAxLTIzIDE2OjI3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgTWluR1c6IG1hZGUgZ2V0dGltZW9mZGF5KCkgZGVjbGFyYXRpb24gYXZhaWxhYmxlIGZvciB0aGUKKyAgIGNvbXBpbGVyLgorCisyMDEwLTAxLTIzIDE2OjI2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvaW5ldF9wdG9uLmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdCBjb21wbGFpbiBhYm91dCBhIG1pc3NpbmcKKyAgIHByb3RvdHlwZSBmb3IgaXNkaWdpdCgpLgorCisyMDEwLTAxLTIzIDE2OjI0ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIE1pbkdXOiBpcGhscGFwaS5oIGNvbmZpZ3VyZSB0ZXN0IGRvZXMgbm93IHdvcmsuCisKKzIwMTAtMDEtMjMgMTU6MTAgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzOgorCisgICBSZW5hbWVkIHRoZSBXaW5zb2NrMiBJUHY2IHN0YWNrIGZyb20gJ21pbmd3JyBpbnRvICd3aW5zb2NrMicuCisKKzIwMTAtMDEtMjMgMTU6MDcgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgYWdlbnQvc25tcGQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuaCwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAKKyAgICAgICBzbm1wbGliL2luZXRfbnRvcC5jLCBzbm1wbGliL2luZXRfcHRvbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgSW1wcm92ZWQgcG9ydGFiaWxpdHkgYmV0d2VlbiB0aGUgc3VwcG9ydGVkIFdpbjMyIGNvbXBpbGF0aW9uCisgICBlbnZpcm9ubWVudHMgYXMgZm9sbG93czoKKyAgIC0gTWFkZSBzdXJlIHRoYXQgdGhlIDx3aW5zb2NrMi5oPiBhbmQgPHdzMnRjcGlwLmg+IGhlYWRlciBmaWxlcworICAgYXJlIG9ubHkgaW5jbHVkZWQgZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4uCisgICAtIEFkZGVkIGNvbmZpZ3VyZSBjaGVjayBmb3IgPGlwaGxwYXBpLmg+LgorICAgLSBSZXBsYWNlZCBzZXZlcmFsIFdJTjMyIC8gY3lnd2luIHRlc3RzIGJ5IGEgSEFWRV9JUEhMUEFQSV9ICisgICB0ZXN0LgorICAgLSBEb2N1bWVudGVkIHRoYXQgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggaXMgb25seSB1c2VkCisgICBmb3IgdGhlIE1TVkMgYnVpbGQuCisKKzIwMTAtMDEtMjIgMTY6NDYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90b29scy5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkxMDogYnVpbGRzIGFnYWluIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8KKyAgIDYuCisKKzIwMTAtMDEtMjIgMTY6NDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIHdpbjMyL01nbXRBcGktd2luRXh0RExMLmg6CisKKyAgIEZvbGxvdyB1cCBmb3IgcjE4MDE2OiBidWlsZHMgYWdhaW4gd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4KKworMjAxMC0wMS0yMiAxNDoxMyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODAxNjogbWFkZSBNaW5HVyBsaWJpcGhscGFwaSBjaGVjayBtb3JlIHJvYnVzdC4KKworMjAxMC0wMS0yMiAxMzozMiAgYnZhc3NjaGUKKworICAgKiAgUkVBRE1FLndpbjMyLCBhY2xvY2FsLm00LCBhZ2VudC9hZ2VudF9pbmRleC5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgICAKKyAgICAgIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliX21vZHVsZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsIGFnZW50L21pYmdyb3VwL2hvc3RfcmVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5oLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgYWdlbnQvc25tcGQuYywgYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsICAgCisgICAgICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmMsIGFwcHMvc25tcHNldC5jLCBhcHBzL3NubXBzdGF0dXMuYywgICAKKyAgICAgIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhbnNsYXRlLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2F1dGguYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfc3FsLmMsIGFwcHMvc25tcHVzbS5jLCBhcHBzL3NubXB2YWNtLmMsICAgCisgICAgICBhcHBzL3NubXB3YWxrLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgc25tcGxpYi9hc24xLmMsIHNubXBsaWIvY2FsbGJhY2suYywgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsICAgCisgICAgICBzbm1wbGliL2ludDY0LmMsIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgICAKKyAgICAgIHNubXBsaWIvbGNkX3RpbWUuYywgc25tcGxpYi9tZDUuYywgc25tcGxpYi9taWIuYywgICAKKyAgICAgIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NjYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXAuYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hdXRoLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wX2RlYnVnLmMsIAorICAgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wa3NtLmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCBzbm1wbGliL3ZhY20uYywgICAKKyAgICAgIHNubXBsaWIvd2lucGlwZS5jLCB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogTWluR1c6IHdpbkV4dERMTCBjb21waWxlcyBub3cgdW5kZXIgTWluR1cuCisgICBDSEFOR0VTOiBNaW5HVzogYnVpbGRpbmcgTmV0LVNOTVAgd29ya3MgYWdhaW4uCisgICAKKyAgIERldGFpbGVkIG92ZXJ2aWV3OgorICAgKiBDaGFuZ2VzIGluIHRoZSBjb25maWd1cmUgc2NyaXB0OgorCisgICAtIHNvY2tldCgpIGxpYnJhcnkgY2hlY2sgcGFzc2VzIGFnYWluIG9uIE1pbkdXLgorICAgLSBBZGRlZCBsaWJyYXJ5IGNoZWNrcyBmb3IgbGlid3MyXzMyLCBsaWJyZWdleCBhbmQgbGlic25tcGFwaS4KKyAgIC0gQWRkZWQgY2hlY2sgZm9yIHRoZSB3aW5zb2NrMi5oIGFuZCB3czJ0Y3BpcC5oIGhlYWRlciBmaWxlcy4KKyAgIC0gQWRkZWQgY2hlY2sgZm9yIHRoZSBjaG93bigpIGFuZCBsb2NhbHRpbWVfcigpIGZ1bmN0aW9ucy4KKyAgIC0gc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWQgY2hlY2sgZG9lcyBub3cgd29yayBvbiBNaW5HVy4KKyAgIC0gQWRkZWQgSVB2NiBzdGFjayB0eXBlIGNhbGxlZCAibWluZ3ciLgorICAgKiBTb3VyY2UgY29kZSBjaGFuZ2VzOgorCisgICAtIEluY2x1ZGUgPHdpbnNvY2syLmg+IGZyb20gPG5ldC1zbm1wL3R5cGVzLmg+IGluc3RlYWQgb2YKKyAgIDx3aW5zb2NrLmg+CisgICB1bmRlciBNaW5HVyBzdWNoIHRoYXQgSVB2NiBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KKyAgIC0gTW92ZWQgI2luY2x1ZGUgPHdpbnNvY2suaD4gZnJvbSAuYyBmaWxlcyB0byA8bmV0LXNubXAvdHlwZXMuaD4uCisgICAtIEFkZGVkIGEgY29weSBvZiB0aGUgTWluR1cgaGVhZGVyIGZpbGUgPHNubXAuaD4gKHdoaWNoIGlzIG5vdAorICAgY29weXJpZ2h0ZWQpCisgICBhcyB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oLgorICAgLSBhZ2VudDogb25seSBjYWxsIGNob3duKCkgd2hlbiBhdmFpbGFibGUgKEhBVkVfQ0hPV04pLgorICAgKiBEb2N1bWVudGF0aW9uIGNoYW5nZXM6IHVwZGF0ZWQgUkVBRE1FLndpbjMyLgorCisKKzIwMTAtMDEtMjIgMDg6MzQgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgY2FzdCBmcm9tIGNoYXIqIHRvIGNoYXIqCisKIDIwMTAtMDEtMjIgMDA6MzkgIGhhcmRha2VyCiAKICAgICogQ09QWUlORzoKIAogICAgQ29weXJpZ2h0IGZpbGUgdXBkYXRlIGZvciBTUEFSVEEsIEluYy4KIAorMjAxMC0wMS0yMiAwMDoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgYWRkIHByb3BlciBwcmVmaXhlcyBpbiBUU00gZm9yIFNTSCwgRFRMUywgZXRjLCBiYXNlZCBvbiB0aGUKKyAgIGRvbWFpbgorCisyMDEwLTAxLTIyIDAwOjIwICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIGFkZGVkIDUuNSBicmFuY2gKKworMjAxMC0wMS0yMiAwMDoyMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgbWlub3IgZWNobyBvdXRwdXQgY2hhbmdlCisKKzIwMTAtMDEtMjEgMjA6NTEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgbW92ZSBjb21tZW50IG5leHQgdG8gY29kZSBpdCBpcyB0YWxraW5nIGFib3V0OyBObyBjb2RlIGNoYW5nZQorCiAyMDEwLTAxLTIxIDE0OjU1ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CkBAIC0zMDExLDk3ICs0NzYxNiw0MTggQEAKICAgIFRoZSBrZXJuZWwgbWlnaHQgcHJvdmlkZSBsb25nZXIgZmllbGRzLCBlc3BlY2lhbGx5IG9uIDY0LWJpdAogICAgc3lzdGVtcy4KIAorMjAxMC0wMS0yMCAxMjo0MiAgYnZhc3NjaGUKKworICAgKiBQT1JUSU5HLCBsb2NhbC9zbm1wY2hlY2suZGVmOgorCisgICBGaXhlZCB0eXBvOiByZXBsYWNlZCAnbmVjaXNzYXJ5JyBieSAnbmVjZXNzYXJ5Jy4KKwogMjAxMC0wMS0yMCAwODo1MyAganNhZnJhbmVrCiAKICAgICogbWFuL3NubXBuZXRzdGF0LjEuZGVmOgogCiAgICBGaXggbWlub3IgdHlwbyBpbiBtYW4gcGFnZSwgaXQncyBzbm1wbmV0c3RhdCAtQ3AsIG5vdCAtQ1AuCiAKKzIwMTAtMDEtMTQgMTI6MzQgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogZml4ZWQgbWVtb3J5IGxlYWsgaW4gUk1PTi1NSUIgYW5kIEVUSEVSTElLRS1NSUIgd2hlbgorICAgdGhlcmUgYXJlIG11bHRpcGxlIGFsaWFzZXMgb2YgYW4gbmV0d29yayBpbnRlcmZhY2UKKyAgIFJhdGlvbmFsZTogdGhlIGFsaWFzZWQgaW50ZXJmYWNlcyBoYXZlIHRoZSBzYW1lIGlmSW5kZXggLT4KKyAgIENPTlRBSU5FUl9JTlNFUlQgZmFpbHMsIGJ1dCB0aGUgcmVqZWN0ZWQgZW50cnkgd2FzIG5vdCBmcmVlZC4KKworMjAxMC0wMS0xMyAxMToyMSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4IG1lbW9yeSBsZWFrIGluIGlwQWRkcmVzc1ByZWZpeFRhYmxlCisgICAtIG5ldF9zbm1wX3NlYXJjaF91cGRhdGVfcHJlZml4X2luZm8gcmV0dXJucyBkaWZmZXJlbnQgY29kZSwgd2hlbgorICAgdGhlIGVudHJ5IHdhcyBub3QgaW5zZXJ0ZWQgdG8gbGlzdCBhbmQgY2FuIGJlIGZyZWVkLgorCisyMDEwLTAxLTEyIDAwOjUyICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ0hBTkdFUzogYnVpbGQ6IHJ1biBycG0gY29uZmlndXJlIGNoZWNrcyBmb3IgaHJfc3dpbnN0IHJld3JpdGUKKyAgIChycG0KKyAgIHZlcnNpb24gb25seSkKKworMjAxMC0wMS0xMSAyMzo1OCAgdGFuZGVycworCisgICAqIGFwcHMvTWFrZWZpbGUuaW46CisKKyAgIGFkZCBQRVJMTERPUFRTX0ZPUl9BUFBTIHRvIGFnZW50eHRyYXAgbGluayBsaW5lIChmaXhlcworICAgImxpYnBlcmwuc28gbm90CisgICBmb3VuZCIgZXJyb3JzKQorCisyMDEwLTAxLTExIDAwOjExICB0YW5kZXJzCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDExNGFnZW50eGFnZW50eHRyYXA6CisKKyAgIGdldCByaWQgb2YgdXNpbmcgZGVwcmVjYXRlZCBzeW50YXggZm9yIHRyYXAvaW5mb3JtIHNpbmtzCisKKzIwMTAtMDEtMDggMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogb2Jzb2xldGVkIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRy4KKyAgIEZyb20gbm93IG9uIHVzaW5nIFNJR0FMUk0gdG8gdHJpZ2dlciBOZXQtU05NUCBhbGFybSBoYW5kbGVycyBpcworICAgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKyAgIAorICAgTW90aXZhdGlvbjogYXMga25vd24gbGlibmV0c25tcCBzdXBwb3J0cyB0aW1lLWJhc2VkIGFsYXJtcyB2aWEKKyAgIHRoZSBmdW5jdGlvbnMKKyAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoKSwgcnVuX2FsYXJtcygpIGFuZCBvdGhlciBmdW5jdGlvbnMuIFR3bworICAgZGlmZmVyZW50IHdheXMgdG8KKyAgIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIHJ1bl9hbGFybXMoKSBhcmUgc3VwcG9ydGVkIGluc2lkZQorICAgbGlibmV0c25tcDoKKyAgIDEuIEJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIHRpbWVvdXQgYXJndW1lbnQgb2Ygc2VsZWN0KCkgaXMgc21hbGwKKyAgIGVub3VnaCBzdWNoCisgICB0aGF0IHNlbGVjdCgpIHJldHVybnMgYmVmb3JlIHRoZSBuZXh0IGFsYXJtIG11c3QgYmUgaGFuZGxlZCAod2hlbgorICAgdGhlCisgICB2YXJpYWJsZSBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgaXMgc2V0IHRvIG9uZSwgd2hpY2gKKyAgIGlzIHRoZQorICAgZGVmYXVsdCkuCisgICAyLiBCeSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBrZXJuZWwgZmlyZXMgU0lHQUxSTSBhdCB0aGUgdGltZSB3aGVuCisgICBydW5fYWxhcm1zKCkKKyAgIHNob3VsZCBiZSBjYWxsZWQgKHdoZW4gdGhlIHZhcmlhYmxlCisgICBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgaXMgc2V0CisgICB0byB6ZXJvLCB3aGljaCBoYXMgdG8gYmUgY29uZmlndXJlZCBleHBsaWNpdGx5KS4KKyAgIAorICAgVGhlIGZvbGxvd2luZyBpc3N1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kIGFwcHJvYWNoOgorICAgMS4gQWxhcm0gZnVuY3Rpb25zIGFyZSB1c2VkIGluc2lkZSBOZXQtU05NUCB0byBlLmcuIHJlZnJlc2gKKyAgIGNhY2hlZCB0YWJsZQorICAgY29udGVudHMuIEFzIGZhciBhcyBJIGNhbiBzZWUgdGhlcmUgaXMgbm90aGluZyBpbiB0aGUgTmV0LVNOTVAKKyAgIHNvdXJjZSBjb2RlCisgICB0aGF0IHByZXZlbnRzIHRoZSBmb2xsb3dpbmcgZnJvbSBoYXBwZW5pbmc6IGEgdGFibGUgcmVmcmVzaAorICAgdHJpZ2dlcmVkIHZpYQorICAgU0lHQUxSTSB3aGlsZSBhIHJvdyBpcyBiZWluZyByZW1vdmVkIGZyb20gYSBjYWNoZWQgdGFibGUuIFRoaXMKKyAgIGNhbiByZXN1bHQKKyAgIGluIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBldmVuIGEgY3Jhc2guCisgICAyLiBQT1NJWCByZXN0cmljdHMgc2lnbmFsIGhhbmRsZXJzIHRvIGNhbGxpbmcgZnVuY3Rpb25zIHRoYXQgYXJlCisgICBlaXRoZXIgcmVlbnRyYW50CisgICBvciBub24taW50ZXJydXB0aWJsZQorICAgKGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNCkuCisgICBTdGFuZGFyZCBJL08gZnVuY3Rpb25zIGxpa2UgcHJpbnRmKCkgYW5kIGZwcmludGYoKSBhcmUgbmVpdGhlcgorICAgcmVlbnRyYW50IG5vcgorICAgbm9uLWludGVycnVwdGlibGUuIHJ1bl9hbGFybXMoKSBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSBzaWduYWwKKyAgIGhhbmRsZXIsIHdoaWNoCisgICBtZWFucyB0aGF0IHRoaXMgcmVzdHJpY3Rpb24gYXBwbGllcyB0byB0aGUgZnVuY3Rpb24gcnVuX2FsYXJtcygpCisgICBpdHNlbGYgYW5kCisgICBhbGwgZnVuY3Rpb25zIGNhbGxlZCBieSBpdCAod2hpY2ggaW5jbHVkZXMgdGhlIGFsYXJtIGNhbGxiYWNrCisgICBmdW5jdGlvbnMpLgorICAgT3I6IGUuZy4gc25tcF9sb2coKSBhbmQgaXRzIGNhbGxlcnMgbXVzdCBub3QgYmUgY2FsbGVkIGZyb20KKyAgIGluc2lkZSBydW5fYWxhcm1zKCkKKyAgIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGZyb20gaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIuIFRoaXMKKyAgIGlzIGEgc2V2ZXJlCisgICByZXN0cmljdGlvbiwgYW5kIG9uZSB0aGF0IGlzIGhhcmQgdG8gd29yayB3aXRoLgorICAgMy4gTm90IGFsbCBzb2Z0d2FyZSBkZXZlbG9wZXJzIGtub3cgaG93IHRvIG1ha2Ugc3VyZSB0aGF0IHNpZ25hbAorICAgZGVsaXZlcnkgd29ya3MKKyAgIGNvcnJlY3RseSBpbiBhIG11bHRpdGhyZWFkZWQgY29udGV4dC4gUE9TSVggZG9lcyBub3QgZ3VhcmFudGVlIHRvCisgICB3aGljaCB0aHJlYWQKKyAgIGEgc2lnbmFsIGxpa2UgU0lHQUxSTSB3aWxsIGJlIGRlbGl2ZXJlZCwgdW5sZXNzIHRoYXQgc2lnbmFsIGhhcworICAgYmVlbiBibG9ja2VkCisgICBiZWZvcmUgdGhyZWFkIGNyZWF0aW9uIGFuZCBpcyB1bmJsb2NrZWQgYWZ0ZXIgdGhyZWFkIGNyZWF0aW9uCisgICAoc2VlIGFsc28KKyAgIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvcHRocmVhZF9zaWdtYXNrLmh0bWwpLgorICAgVGhpcyBpcyByZWxldmFudCBmb3IgdGhlIE5ldC1TTk1QIHByb2plY3Qgbm90IG9ubHkgYmVjYXVzZSBhCisgICB3b3JrZXIgdGhyZWFkIGlzCisgICBjcmVhdGVkIGluc2lkZQorICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jIGJ1dCBhbHNvCisgICBiZWNhdXNlIGxpYm5ldHNubXAgaXMgb2Z0ZW4gdXNlZCBpbnNpZGUgbXVsdGl0aHJlYWRlZCBzb2Z0d2FyZS4KKyAgIEN1cnJlbnRseSBubworICAgYXR0ZW1wdCBpcyBtYWRlIHRvIG1ha2Ugc3VyZSB0aGF0IFNJR0FMUk0gaXMgcHJvY2Vzc2VkIGJ5IHRoZQorICAgTmV0LVNOTVAgZXZlbnQKKyAgIHByb2Nlc3NpbmcgbG9vcCB0aHJlYWQuIElmIFNJR0FMUk0gaXMgcHJvY2Vzc2VkIGJ5IGFub3RoZXIKKyAgIHRocmVhZCwgdGhpcyB3aWxsCisgICByZXN1bHQgaW4gb25lIG9yIG1vcmUgZGF0YSByYWNlcy4KKyAgIAorICAgQmVjYXVzZSBhbGwgdGhlIGRpZmZpY3VsdGllcyBhc3NvY2lhdGVkIHdpdGggcHJvY2Vzc2luZyBhbGFybXMKKyAgIGZyb20gaW5zaWRlIGEKKyAgIHNpZ25hbCBoYW5kbGVyIGZ1bmN0aW9uLCBhbmQgYmVjYXVzZSBmaXhpbmcgdGhlc2Ugd291bGQgcmVxdWlyZQorICAgbW9yZSBlZmZvcnQgdGhhbgorICAgaXQgaXMgd29ydGgsIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRyBoYXMgYmVlbgorICAgZGVwcmVjYXRlZCBhbmQgZnJvbSBub3cKKyAgIG9uIGFwcHJvYWNoICgxKSBpcyB0aGUgb25seSBzdXBwb3J0ZWQgYXBwcm9hY2ggdG8gdHJpZ2dlciBhbGFybQorICAgaGFuZGxlcnMuCisKIDIwMTAtMDEtMDcgMTk6NDIgIGhhcmRha2VyCiAKLSAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgorICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jOgogCiAgICBQYXRjaCBmcm9tIFN0ZXBoZW4gSGVtbWluZ2VyIHRvIGZpeCBhIG1pbm9yIG1lbWxlYWsgaW4gY3B1CiAgICBzeXNjdHJsIGZldGNoaW5nCiAKLTIwMTAtMDEtMDYgMTc6NTYgIGR0czEyCisyMDEwLTAxLTA3IDE2OjIxICBidmFzc2NoZQogCi0gICAqIENIQU5HRVM6CisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdmFjbS5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgUmVtb3ZlZCByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpLCBhbmQgbWFkZSBzdXJlIHRoYXQKKyAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgJ1wwJy10ZXJtaW5hdGVzIHRoZSBvdXRwdXQgYnVmZmVyCisgICBpbiBhbGwgY2FzZXMuCisgICBVcGRhdGVkIGRvY3VtZW50YXRpb24gYW5kIHVuaXQgdGVzdHMuCiAKLTIwMTAtMDEtMDYgMTc6MjUgIGR0czEyCisyMDEwLTAxLTA3IDE0OjQxICBidmFzc2NoZQogCi0gICAqIENoYW5nZUxvZzoKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBSZW1vdmVkIHRocmVlIHN1cGVyZmx1b3VzIGNhc3RzIGJlY2F1c2UgdGhlc2UgdHJpZ2dlcmVkIGEKKyAgIGNvbXBpbGVyIHdhcm5pbmcKKyAgIHdoZW4gY29tcGlsZWQgd2l0aCBNU1ZDLgogCi0yMDEwLTAxLTA2IDE3OjA2ICBkdHMxMgorMjAxMC0wMS0wNyAxMzoyOCAgYnZhc3NjaGUKIAotICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCi0gICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKIAotICAgbWFrZSBkZXBlbmQKKyAgIFJldmVydGVkIHRoZSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIGNoYW5nZXMgZnJvbSByMTc5OTIKKyAgIGJlY2F1c2UgdGhlc2UKKyAgIGNhdXNlZCB0aGUgZm9sbG93aW5nIFZhbGdyaW5kIGNvbXBsYWludCBkdXJpbmcgc25tcGQgc3RhcnR1cDoKKyAgIAorICAgPT0yNTIwMT09IENvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQKKyAgIHZhbHVlKHMpCisgICA9PTI1MjAxPT0gYXQgMHg0MDQ3QjE0OiBuZXRzbm1wX3NlbmRfdHJhcHMgKGFnZW50X3RyYXAuYzo3OTgpCisgICA9PTI1MjAxPT0gYnkgMHg0MDQ4MTI4OiBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzCisgICAoYWdlbnRfdHJhcC5jOjg1MykKKyAgID09MjUyMDE9PSBieSAweDQwNDgxOUQ6IHNlbmRfdHJhcF92YXJzIChhZ2VudF90cmFwLmM6OTYzKQorICAgPT0yNTIwMT09IGJ5IDB4NDA0ODI1Qjogc2VuZF9lYXN5X3RyYXAgKGFnZW50X3RyYXAuYzoxMDExKQorICAgPT0yNTIwMT09IGJ5IDB4ODA0QjVEMjogbWFpbiAoc25tcGQuYzozOTQpCiAKLTIwMTAtMDEtMDYgMTc6MDYgIGR0czEyCisyMDEwLTAxLTA3IDEyOjMwICBidmFzc2NoZQogCi0gICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKLSAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jOgogCi0gICBtYWtlIGRlcGVuZAorICAgRml4ZWQgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBtaXNtYXRjaC4KIAotMjAxMC0wMS0wNiAxNjo1NSAgZHRzMTIKKzIwMTAtMDEtMDcgMTI6MTkgIGJ2YXNzY2hlCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oOgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBhc3NpZ25pbmcgYSBjaGFyICogcG9pbnRlciB0bworICAgc3lzT1JUYWJsZTo6T1JfZGVzY3IgZG9lcyBvciBkb2VzIG5vdCB0cmFuc2ZlcgorICAgb3duZXJzaGlwLiBTbyB3aGV0aGVyIE9SX2Rlc2NyIGlzIGRlY2xhcmVkIGFzIGNoYXIgKiBvciBhcyBjb25zdAorICAgY2hhciAqLCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhdAorICAgbGVhc3Qgb25lIHN0YXRlbWVudCBvbiB3aGljaCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IGEgY2hhcgorICAgKiAgLyBjb25zdCBjaGFyICogbWlzbWF0Y2guIFRoZSBvbmx5ICAgIHNvbHV0aW9uIGlzIHRvIGNhc3QgYXdheQorICAgICAgY29uc3Qgd2hlcmUgYXBwcm9wcmlhdGUgdG8gbWFrZSBzdXJlICAgIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90CisgICAgICBjb21wbGFpbiwgICAgYXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBwYXRjaC4gIDIwMTAtMDEtMDcgMTE6NDYgCisgICAgICBidmFzc2NoZQogCi0yMDEwLTAxLTA2IDE2OjQzICBkdHMxMgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqIHNubXBsaWIvc25tcHVzbS5jOgogCi0gICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgIHVzbV9zYXZlX3VzZXIoKTogd2hlbiB3cml0aW5nIHVzZXItPm5hbWUgYW5kIHVzZXItPnNlY05hbWUsIG9ubHkKKyAgIHdyaXRlIHRoZSBBU0NJSSBkYXRhIGFuZCBub3QgdGhlCisgICB0ZXJtaW5hdGluZyAnXDAnLiBTaW5jZSBib3RoIGl0ZW1zIGFyZSByZWFkIGJ5IGNhbGxpbmcKKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCksIHdyaXRpbmcKKyAgIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGlzIG5vdCBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGRhdGEKKyAgIHJlYWQgYmFjayBpcyB0ZXJtaW5hdGVkIHByb3Blcmx5LgorCisyMDEwLTAxLTA3IDA5OjEzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ2hhbmdlZCB0aGUgYmVoYXZpb3Igb2YgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKTogdW50aWwKKyAgIG5vdyB0aGlzCisgICBmdW5jdGlvbiB0ZXJtaW5hdGVkIHRoZSBvdXRwdXQgYnVmZmVyIGluIHNvbWUgY2FzZXMgd2l0aCAnXDAnCisgICAod2hlbiB0aGUKKyAgIGlucHV0IHdhcyBpbiB0aGUgZm9ybWF0IDB4Li4uIGFuZCBhIGJ1ZmZlciBvdmVyZmxvdyBvY2N1cnJlZCBhbmQKKyAgIGFsc28KKyAgIHdoZW4gdGhlIGlucHV0IHdhcyBpbiBBU0NJSSBmb3JtYXQsIGJ1dCBub3Qgd2hlbiB0aGUgaW5wdXQgd2FzIGluCisgICBmb3JtYXQKKyAgIDB4Li4uIGFuZCBubyBidWZmZXIgb3ZlcmZsb3cgb2NjdXJyZWQpLiBDaGFuZ2VkIHRoaXMgc3VjaCB0aGF0CisgICB0aGlzCisgICBmdW5jdGlvbiBkb2VzIG5vIGxvbmdlciB0ZXJtaW5hdGUgdGhlIGlucHV0IGJ1ZmZlciB3aXRoICdcMCcuCisgICBUaGlzCisgICBjaGFuZ2Ugd2FzIHBvc3NpYmxlIGJlY2F1c2UgaW5zaWRlIHRoZSBOZXQtU05NUCBwcm9qZWN0IGFsbAorICAgY2FsbGVycyB0aGF0CisgICBuZWVkZWQgYSAnXDAnIHRlcm1pbmF0ZWQgc3RyaW5nIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdXNlCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpIGluc3RlYWQuCisKKzIwMTAtMDEtMDYgMTc6NTIgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6CisKKyAgIFJldmVydGVkIHIxNzk2OCBhbmQgcjE3OTcyLgorCisyMDEwLTAxLTA2IDE1OjQwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOgorCisgICBGaXhlZCBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzIHJlbGF0ZWQgdG8gdGhlIHVzZSBvZiB0aGUgY29uc3QKKyAgIGtleXdvcmQuCisKKzIwMTAtMDEtMDYgMTU6MzggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgRml4ZWQgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBtaXNtYXRjaC4KKworMjAxMC0wMS0wNiAxNTozNiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oOgorCisgICBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgZnJvbSBjaGFyICogaW50byBjb25zdCBjaGFyICouIFNob3VsZCBoYXZlCisgICBiZWVuIGluY2x1ZGVkIGluIHIxNzk3NS4KKworMjAxMC0wMS0wNiAxNTozMyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNoYXIgKiAvIHVfY2hhciAqCisgICBtaXNtYXRjaGVzLgorCisyMDEwLTAxLTA2IDE1OjMxICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQWRkZWQgdGhlIGZ1bmN0aW9ucyByZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigpIGFuZAorICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoKSwgd2hpY2gKKyAgIGFjY2VwdCBhIHBhcnNlciBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IG1vZGlmeSB0aGUgc3RyaW5nIHRoYXQgaXQKKyAgIHBhcnNlcy4gVXNpbmcgdGhlc2UgZnVuY3Rpb25zIHJlc3VsdHMKKyAgIGluIGVhc2llciB0byByZWFkIGNvZGUgdGhhbiB1c2luZyB0aGUgbm9uLWNvbnN0IGhhbmRsZXIKKyAgIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYW5kIGNhc3RpbmcgdGhlIHBhcnNlcgorICAgZnVuY3Rpb24gZXhwbGljaXRseSBmcm9tICh2b2lkKCopKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikpIHRvCisgICAodm9pZCgqKShjb25zdCBjaGFyKiwgY2hhciopKS4KKworMjAxMC0wMS0wNiAxNToyNyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXB1c20uYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0IHF1YWxpZmllci4KKworMjAxMC0wMS0wNiAxNDo0OCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBBZGRlZCByZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KCkuCisKKzIwMTAtMDEtMDYgMTQ6NDIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOgorCisgICBEdXBsaWNhdGVkIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgUkVHSVNURVJfU1lTT1JfVEFCTEUoKSAvCisgICBSRUdJU1RFUl9TWVNPUl9FTlRSWSgpCisgICBzaW5jZSB0aGF0IGFyZ3VtZW50IGlzIGZyZWVkIHdoaWxlIHVucmVnaXN0ZXJpbmcgc3VjaCBhbiBlbnRyeS4KKyAgIE5vdCBzdXJlIHdoZXRoZXIKKyAgIHRoaXMgY291bGQgYWN0dWFsbHkgdHJpZ2dlciBhIGNhbGwgb2YgZnJlZSgpIHdpdGggYSBjb25zdGFudAorICAgc3RyaW5nIGFzIGFyZ3VtZW50CisgICBhbmQgSSdtIG5laXRoZXIgc3VyZSBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvdWxkIGhhdmUKKyAgIHRyaWdnZXJlZCBhIGNyYXNoLgorCisyMDEwLTAxLTA2IDE0OjM0ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgsIHNubXBsaWIvdmFjbS5jOgorCisgICBGb3IgdGhvc2UgVkFDTSBmdW5jdGlvbnMgdGhhdCBkbyBub3QgbW9kaWZ5IHRoZSBzdHJpbmdzIHBhc3NlZCBhcworICAgYXJndW1lbnRzLAorICAgY2hhbmdlZCB0aGUgYXJndW1lbnQgdHlwZSBmcm9tIGNoYXIgKiB0byBjb25zdCBjaGFyICouCisKKzIwMTAtMDEtMDYgMTQ6MjcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0IHF1YWxpZmllci4KKworMjAxMC0wMS0wNiAxNDoyNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYzoKKworICAgUmVtb3ZlZCBhbiB1bnVzZWQgdmFyaWFibGUuCisKKzIwMTAtMDEtMDYgMTQ6MTQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmM6CisKKyAgIER1cGxpY2F0ZWQgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBSRUdJU1RFUl9TWVNPUl9UQUJMRSgpIC8KKyAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKCkKKyAgIHNpbmNlIHRoYXQgYXJndW1lbnQgaXMgZnJlZWQgd2hpbGUgdW5yZWdpc3RlcmluZyBzdWNoIGFuIGVudHJ5LgorICAgTm90IHN1cmUgd2hldGhlcgorICAgdGhpcyBjb3VsZCBhY3R1YWxseSB0cmlnZ2VyIGEgY2FsbCBvZiBmcmVlKCkgd2l0aCBhIGNvbnN0YW50CisgICBzdHJpbmcgYXMgYXJndW1lbnQKKyAgIGFuZCBJJ20gbmVpdGhlciBzdXJlIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgY291bGQgaGF2ZQorICAgdHJpZ2dlcmVkIGEgY3Jhc2guCisKKzIwMTAtMDEtMDYgMTQ6MDggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmg6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QKKyAgIHF1YWxpZmllci4KKworMjAxMC0wMS0wNiAxNDowNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNoYXIgKiAvIHVfY2hhciAqCisgICBtaXNtYXRjaGVzLgorCisyMDEwLTAxLTA2IDE0OjA0ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENoYW5nZXM6CisgICAtIEFkZGVkIG5ldyBmdW5jdGlvbnMgc2tpcF93aGl0ZV9jb25zdCgpLCBza2lwX25vdF93aGl0ZV9jb25zdCgpLAorICAgc2tpcF90b2tlbl9jb25zdCgpLCBjb3B5X253b3JkX2NvbnN0KCkgYW5kCisgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCgpLgorICAgLSBDaGFuZ2VkIHJldHVybiB0eXBlIG9mIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkgZnJvbQorICAgY2hhciAqIHRvCisgICBjb25zdCBjaGFyICouIE5vdGU6IHRoaXMgZG9lcyBub3QgYWZmZWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgICBzaW5jZSB0aGlzCisgICBmdW5jdGlvbiBoYXMgbm90IHlldCBiZWVuIGluY2x1ZGVkIGluIGFueSByZWxlYXNlLgorICAgLSBGaXhlZCBkb2N1bWVudGF0aW9uIG9mIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgYW5kCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpLgorICAgLSBSZWR1Y2VkIG51bWJlciBvZiBjYXN0LWF3YXktY29uc3QgY29uc3RydWN0cyBpbiByZWFkX2NvbmZpZy5jLgorCisyMDEwLTAxLTA2IDEzOjM1ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOgorCisgICBSZWZpbmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWFjcm8gTkVUU05NUF9SRU1PVkVfQ09OU1QoKToKKyAgIHdoZW4gdXNpbmcKKyAgIHRoZSBnY2MgY29tcGlsZXIsIGl0IGlzIG5vdyB2ZXJpZmllZCB3aGV0aGVyIHRoZSB0eXBlcyAoY29uc3QgdCkKKyAgIGFuZCB0eXBlb2YoZSkKKyAgIGFyZSBjb21wYXRpYmxlLCB3aGVyZSB0IGlzIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgZSB0aGUgc2Vjb25kCisgICBhcmd1bWVudCBvZgorICAgdGhpcyBtYWNyby4KIAogMjAxMC0wMS0wNiAxMzozMyAganNhZnJhbmVrCiAKQEAgLTMxMjEsNyArNDgwNDcsOTYgQEAKIAogICAgKiBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CiAKLSAgIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6IDI5MjIzOTA6IEZpeCB0ZXN0IGZvciBtaXNzaW5nIGNvbnRleHROYW1lIHBhcmFtZXRlcgorICAgQ0hBTkdFUzogc25tcGxpYjogQlVHUzogMjkyMjM5MDogRml4IHRlc3QgZm9yIG1pc3NpbmcgY29udGV4dE5hbWUKKyAgIHBhcmFtZXRlcgorCisyMDEwLTAxLTA2IDExOjU3ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9zbm1wX3BlcmwuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jLCBzbm1wbGliL3BhcnNlLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfc2VydmljZS5jOgorCisgICBDaGFuZ2VzOgorICAgLSBJbnRyb2R1Y2VkIGEgbmV3IG1hY3JvIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCkgdGhhdCBhbGxvd3MgdG8KKyAgIGNhc3QKKyAgIGF3YXkgY29uc3RuZXNzIHdpdGhvdXQgdGhhdCBnY2MgLVdjYXN0LXF1YWwgcmVwb3J0cyBhIHdhcm5pbmcuCisgICAtIE1hZGUgY2FzdGluZyBhd2F5IGNvbnN0bmVzcyBleHBsaWNpdCBieSBpbnRyb2R1Y2luZyB0aGUKKyAgIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCkgbWFjcm8uIFRoaXMgc3VwcHJlc3NlcyB0aGUgd2FybmluZworICAgZ2NjIC1XY2FzdC1xdWFsIHByaW50ZWQgZm9yIHRoZXNlIHN0YXRlbWVudHMuCisKKzIwMTAtMDEtMDYgMTE6NDYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0IHF1YWxpZmllci4KKworMjAxMC0wMS0wNiAwOToxNCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhcHBzL2FnZW50eHRyYXAuYywgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBEbyBub3QgdXNlIDAgd2hlbiByZWZlcnJpbmcgdG8gTlVMTC4KKworMjAxMC0wMS0wNiAwODoyNiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIENoYW5nZWQgYXJndW1lbnQgdHlwZXMgb2YgY2FsY3VsYXRlX3RpbWVfZGlmZigpIGFuZAorICAgY2FsY3VsYXRlX3NlY3RpbWVfZGlmZigpCisgICBmcm9tIHN0cnVjdCB0aW1ldmFsICogdG8gY29uc3Qgc3RydWN0IHRpbWV2YWwgKi4gTm90ZTogdGhpcyBkb2VzCisgICBub3QgYWZmZWN0CisgICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworMjAxMC0wMS0wNiAwODoyMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgQ2hhbmdlcyAobm8gZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb2RpZmllZCk6CisgICAtIFJlbW92ZWQgZGlza2lvX3BhcnNlX2NvbmZpZygpIGRlY2xhcmF0aW9uIGJlY2F1c2UgdGhhdCBmdW5jdGlvbgorICAgaXMgbmVpdGhlciBjYWxsZWQgbm9yIGRlZmluZWQgaW4gdGhlIHNvdXJjZSBmaWxlIGRpc2tpby5jLgorICAgLSBBZGRlZCBkZWNsYXJhdGlvbiBmb3IgZ2V0c3RhdHMoKSBzdWNoIHRoYXQgZ2NjIGRvZXMgbm90CisgICBjb21wbGFpbiBhYm91dCBhIG1pc3NpbmcgZGVjbGFyYXRpb24uCisgICAtIExpbnV4OiBjaGFuZ2VkIHZpc2liaWxpdHkgb2YgZ2V0c3RhdHMoKSBmcm9tIGdsb2JhbCB0byBzdGF0aWMKKyAgIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBCU0QgYW5kIERhcndpbiBpbXBsZW1lbnRhdGlvbnMgb2YKKyAgIGdldHN0YXRzKCkuCisKKzIwMTAtMDEtMDYgMDg6MDAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2hhciAqIC8gdV9jaGFyICogbWlzbWF0Y2hlcy4KKworMjAxMC0wMS0wNiAwMjoxOCAgbWFnZnIKKworICAgKiAgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIG1hbi9NYWtlZmlsZS5pbiwgdGVzdGluZy90ZXN0cy9UMTE0YWdlbnR4YWdlbnR4dHJhcDoKKworICAgQ0hBTkdFUzogYXBwczogT25seSBidWlsZCBhZ2VudHh0cmFwIGlmIHRoZSBhZ2VudHggbGlicmFyaWVzIGFyZQorICAgYnVpbHQuIEFkZCBhIHRlc3QgY2FzZSBmb3IgYWdlbnR4dHJhcC4KKyAgIAorICAgVGhlIGVuYWJsZW1lbnQvZGlzYWJsZW1lbnQgaXMgaW5zcGllcmVkIGJ5IGF1dG9tYWtlIGNvbmRpdGlvbmFscworCisyMDEwLTAxLTA2IDAxOjU5ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYzoKKworICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBzdGFydHRpbWUuCisKKzIwMTAtMDEtMDUgMjI6NTQgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oOgorCisgICBDSEFOR0VTOiBIaWRlIG1vc3QgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gdGhlIGxvZ21hdGNoCisgICBtb2R1bGUuIENsZWFuZWQgdXAgdGhlIGhlYWRlciBhY2NvcmRpbmdseS4gUmVtb3ZlIHRoZSBuZWVkIGZvcgorICAgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYnkgcmVvcmRlcmluZyB0aGUgZnVuY3Rpb25zLgogCiAyMDEwLTAxLTA1IDIyOjMzICBkdHMxMgogCkBAIC0zMTQ3LDkgKzQ4MTYyLDE3NSBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MTI1ODQ6IEZpeCBudWxsIE9JRCBoYW5kbGluZyBpbiBBZ2VudHggb24gNjRiaXQKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkxMjU4NDogRml4IG51bGwgT0lEIGhhbmRsaW5nIGluIEFnZW50eAorICAgb24gNjRiaXQKICAgIFBhdGNoIHN1cHBsaWVkIGJ5IEx1dHogSmFlbmlja2UKIAorMjAxMC0wMS0wNSAxMDoxMSAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaDoKKworICAgQ0hBTkdFUzogaHB1eDogZml4IGJ1aWxkIGVycm9yIG9uIEhQLVVYIDEwLjIwCisKKzIwMTAtMDEtMDUgMDg6NDIgIGpzYWZyYW5laworCisgICAqIG1hbiwgbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICBSZW1vdmUgZ2VuZXJhdGVkIG1hbiBwYWdlcyBmcm9tIHJlcG9zaXRvcnkuCisKKzIwMTAtMDEtMDQgMTY6NDQgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBGaXhlZCBhIHBhc3QtZW5kLW9mLWJ1ZmZlciByZWFkIHRoYXQgb2NjdXJyZWQgd2hlbiBhbiBBU0NJSQorICAgc3RyaW5nIHdhcworICAgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBvZiByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIC8KKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkgYW5kIHRoZSB0aGlyZCBhcmd1bWVudCAoKmxlbikKKyAgIGVxdWFscyAwLgorCisyMDEwLTAxLTA0IDE2OjQxICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2FzdGluZyBhd2F5ICdjb25zdCcuCisKKzIwMTAtMDEtMDQgMTY6MjcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBBZGRlZCB1bml0IHRlc3QgZm9yIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgYW5kCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpLgorCisyMDEwLTAxLTA0IDEwOjQ1ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBVc2UgY29ycmVjdCBvaWQgbGVuZ3RoIGluIHRhYmxlIGluZGV4ZXMuCisKKzIwMTAtMDEtMDQgMDg6MTAgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHNubXBfYWxhcm0uYyBjYW4gYmUgY29tcGlsZWQgYWdhaW4gd2l0aCBDODkKKyAgIGNvbXBpbGVyczogZm9yIEM4OQorICAgaXQgaXMgcmVxdWlyZWQgdGhhdCBpbml0aWFsaXplcnMgYXJlIGNvbnN0YW50IGV4cHJlc3Npb25zLgorCisyMDEwLTAxLTAzIDE2OjI4ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jOgorCisgICBSZW5hbWUgbmV0c25tcF9hcmNoX3RjcGNvbm5fZGVsZXRlIHRvCisgICBuZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoCisgICB0aGUgaGVhZGVyIGZpbGUgYW5kIGFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBtb2R1bGUuCisKKzIwMTAtMDEtMDMgMTY6MjYgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaCwgIAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oOgorCisgICBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbnMuCisKKzIwMDktMTItMzAgMTI6NDkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTMzOiBmaXhlZCB0aGUgaXNzdWUgdGhhdCBpbmNsdWRpbmcgdGhlIGhlYWRlcgorICAgZmlsZQorICAgPG5ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaD4gZnJvbSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorICAgdHJpZ2dlcnMKKyAgIGNvbXBpbGVyIGVycm9ycyBkdXJpbmcgdGhlIGNvbmZpZ3VyZSBwcm9jZXNzIChjb21wbGFpbnRzIGFib3V0CisgICA8bmV0c25tcC9uZXQtc25tcC1jb25maWcuaD4gbm90IGJlaW5nIGluY2x1ZGVkIGJlZm9yZQorICAgPG5ldC1zbm1wL3R5cGVzLmg+KS4KKyAgIE5vdGU6IHRoaXMgZG9lcyBub3Qgc29sdmUgdGhlIHVuZGVybHlpbmcgcHJvYmxlbSB0aGF0IE1JQiBjb2RlCisgICBtdXN0IG5vdAorICAgaW5jbHVkZSB0aGUgaGVhZGVyIGZpbGUgPG5ldC1zbm1wL3R5cGVzLmg+IGJlY2F1c2UgZG9pbmcgc28gd291bGQKKyAgIHRyaWdnZXIgYQorICAgY2lyY3VsYXIgZGVwZW5kZW5jeSBkdXJpbmcgdGhlIGNvbmZpZ3VyZSBzdGVwIChNSUIgY29kZSBpcworICAgY29tcGlsZWQgZHVyaW5nCisgICB0aGUgY29uZmlndXJlIHN0ZXAsIHdoaWxlIHRoZSBjb25maWd1cmUgc3RlcCBnZW5lcmF0ZXMKKyAgIDxuZXRzbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBhbmQgPG5ldC1zbm1wL3R5cGVzLmg+IG5lZWRzCisgICA8bmV0c25tcC9uZXQtc25tcC1jb25maWcuaD4pLgorCisyMDA5LTEyLTMwIDExOjQ4ICBidmFzc2NoZQorCisgICAqIGFwcHMsIG1hbjoKKworICAgRm9sbG93LXVwIGZvciByMTc5MTk6IHVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdHMuCisKKzIwMDktMTItMjggMTg6MDMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfaW5kZXguYzoKKworICAgRml4ZWQgYSBwYXN0LWVuZC1vZi1idWZmZXIgcmVhZC4gRm91bmQgdGhpcyBieSBhbmFseXppbmcgY29tcGlsZXIKKyAgIHdhcm5pbmdzLgorICAgTm90ZTogdGhlIGFmZmVjdGVkIGZ1bmN0aW9uLCByZWdpc3Rlcl9zdHJpbmdfaW5kZXgoKSwgaXNuJ3QKKyAgIGNhbGxlZCBmcm9tCisgICBhbnl3aGVyZSBpbnNpZGUgdGhlIE5ldC1TTk1QIHByb2plY3QgaXRzZWxmLgorCisyMDA5LTEyLTIzIDA5OjQ5ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgorCisgICBGaXggaW52YWxpZCByZWFkIHJlcG9ydGVkIGJ5IHZhbGdyaW5kOgorICAgSW52YWxpZCByZWFkIG9mIHNpemUgMQorICAgbWVtY3B5IChtY19yZXBsYWNlX3N0cm1lbS5jOjQwMikKKyAgIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19jb250YWluZXJfbG9hZF92NAorICAgKGlwYWRkcmVzc19pb2N0bC5jOjI0MCkKKyAgIG5ldHNubXBfYXJjaF9pcGFkZHJlc3NfY29udGFpbmVyX2xvYWQgKGlwYWRkcmVzc19saW51eC5jOjE1OCkKKyAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19jb250YWluZXJfbG9hZCAoaXBhZGRyZXNzX2NvbW1vbi5jOjExMikKKyAgIAorICAgUmV0dXJuaW5nIHN0cnVjdHVyZSB3aXRoIHBvaW50ZXJzIGluc2lkZSBpcyBub3QgdGhlIGJlc3QgdGhpbmcgdG8KKyAgIGRvLgorCisyMDA5LTEyLTIyIDE2OjA1ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBGaXhlZCBzZXZlcmFsIHBhc3QtZW5kLW9mLWJ1ZmZlciByZWFkcy4KKworMjAwOS0xMi0yMiAxMjowMiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaCwgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgCisgICAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBSZXZlcnRlZCB0aGUgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2VzIG9mIHIxNzkxMzoKKyAgIC0gUmVzdG9yZWQgdGhlIGRlZmluaXRpb24gb2YgdGhlIERJRkZUSU1FVkFMKCkgbWFjcm8uCisgICAtIFJlc3RvcmVkIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZnVuY3Rpb25zCisgICBjYWxjdWxhdGVfdGltZV9kaWZmKCksCisgICB1YXRpbWVfcmVhZHkoKSwgbWFya2VyX3R0aWNrcygpIGFuZCB0aW1ldmFsX3R0aWNrcygpLgorICAgLSBzdGFydHRpbWUgaXMgYWdhaW4gYSBnbG9iYWwgdmFyaWFibGUgaW5zdGVhZCBvZiBhIHN0YXRpYyBvbmUuCisgICBBbHNvIGltcGxlbWVudGVkIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKyAgIC0gTW92ZWQgdGhlIG1hcmtlcl90IHR5cGVkZWYgZnJvbSBuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmggdG8KKyAgIG5ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaC4KKyAgIC0gQWRkZWQgYSBuZXcgdHlwZWRlZiwgY29uc3RfbWFya2VyX3QuCisgICAtIEZvciB0aG9zZSBhdGltZV8qKCkgLyB1YXRpbWVfKigpIC8gKl90dGlja3MoKSBmdW5jdGlvbnMgdGhhdCBkbworICAgbm90IGNoYW5nZQorICAgdGhlaXIgYXJndW1lbnRzLCBkZWNsYXJlZCB0aGVzZSBhcmd1bWVudHMgY29uc3RfbWFya2VyX3QgaW5zdGVhZAorICAgb2YgbWFya2VyX3QuCisgICAtIFJlbmFtZWQgbmV0c25tcF9nZXRfc3RhcnR0aW1lKCkgYW5kIG5ldHNubXBfc2V0X3N0YXJ0dGltZSgpIHRvCisgICBuZXRzbm1wX2dldF9hZ2VudF9zdGFydHRpbWUoKSBhbmQgbmV0c25tcF9zZXRfYWdlbnRfc3RhcnR0aW1lKCkKKyAgIHJlc3BlY3RpdmVseS4gTW92ZWQgdGhlc2UgZnVuY3Rpb25zIGZyb20gdG9vbHMuYyB0byBzeXN0ZW0uYy4KKyAgIC0gUmVtb3ZlZCB0aGUgZnVuY3Rpb24gYXRpbWVfaHN1YnRyYWN0KCkgKHdhcyBpbnRyb2R1Y2VkIGluCisgICByMTc5MTMpIGFuZAorICAgaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbiwgbmV0c25tcF9zZXRfYWdlbnRfdXB0aW1lKCkuCisKIDIwMDktMTItMjIgMDc6NTkgIGJ2YXNzY2hlCiAKICAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgpAQCAtMzE2Myw2ICs0ODM0NCwyNSBAQAogICAgc3RyaW5nCiAgICByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCiAKKzIwMDktMTItMjEgMTQ6MjkgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeCBjcmFzaCBpbiBJRi1NSUIgYW5kIElQLU1JQiB3aGVuIHRoZXJlIGFyZQorICAgc29tZSBpbnRlcmZhY2VzIHdpdGggYnJvYWRjYXN0IElQIGFkZHJlc3MgYW5kIHNvbWUgd2l0aG91dC4KKyAgIAorICAgUmVzZXQgdGhlIGJjYXN0ZW50cnkgaW4gdGhlIGxvb3AsIHNvIGl0IGNhbm5vdCBiZSBpbnNlcnRlZCB0byB0aGUKKyAgIGNvbnRhaW5lcgorICAgdHdpY2UuCisgICAKKyAgIFdpdGhvdXQgdGhpcyBwYXRjaCwgd2hlbiBhbiBpbnRlcmZhY2Ugd2l0aG91dCBicm9hZGNhc3QgYWRkcmVzcworICAgaXMgcHJvY2Vzc2VkLAorICAgdGhlIGJjYXN0YWRkcmVzcyBmcm9tIHByZXZpb3VzIGxvb3AgaXMgaW5zZXJ0ZWQgaW50byB0aGUKKyAgIGNvbnRhaW5lci4gVGhpcworICAgb2J2aW91c2x5IGZhaWxzIGFuZCB0aGUgYmNhc3RlbnRyeSBpcyBmcmVlZCwgYnV0IHRoZSBjb250YWluZXIKKyAgIHN0aWxsIGNvbnRhaW5zCisgICByZWZlcmVuY2UgdG8gaXQgLT4gU0lHU0VHVi4KKwogMjAwOS0xMi0yMSAxMzo1MiAgYnZhc3NjaGUKIAogICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CkBAIC0zMTc3LDYgKzQ4Mzc3LDMwIEBACiAgICB0cmlnZ2VyZWQgYnkKICAgIHBhcnNpbmcgdGhlIHBlcnNpc3RlbnREaXIga2V5d29yZC4KIAorMjAwOS0xMi0yMSAxMzozMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgQXBwbGllZCBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgcGF0Y2ggIzI5MDExMjIuIENoYW5nZXM6CisgICAtIE5ldyBmZWF0dXJlOiBzcGVjaWZ5aW5nIEFTTiB0eXBlIFNOTVBfTk9TVUNISU5TVEFOQ0UgYXMgdGhlCisgICB0aGlyZCBhcmd1bWVudAorICAgb2YgbmV0c25tcF9zZXRfcm93X2NvbHVtbigpIHdpbGwgY2F1c2UgYW4gU05NUCBHZXRSZXF1ZXN0IC8KKyAgIEdldE5leHRSZXF1ZXN0IHRvCisgICByZXR1cm4gdGhlIGVycm9yIGNvZGUgbm9TdWNoSW5zdGFuY2UgKFNOTVB2Mikgb3Igbm9TdWNoTmFtZQorICAgKFNOTVB2MSkuIFRoaXMKKyAgIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGhhdmUgYSBjYWNoZWQgdGFibGUgd2l0aCBvbmUgb3IgbW9yZQorICAgImhvbGVzIi4KKyAgIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkbyBub3QgZnJlZSgpIC8gbWFsbG9jKCkgdGhlIG1lbW9yeQorICAgZm9yIHN0b3JpbmcKKyAgIHRoZSBjYWNoZWQgdmFsdWUgaWYgdGhlIHZhbHVlIGhhcyBub3QgYmVlbiBtb2RpZmllZC4KKyAgIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkbyBub3QgZnJlZSgpIC8gbWFsbG9jKCkgdGhlIG1lbW9yeQorICAgZm9yIHN0b3JpbmcKKyAgIHRoZSBjYWNoZWQgdmFsdWUgaWYgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgaGFzIG5vdCBiZWVuCisgICBtb2RpZmllZC4KKyAgIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBpZiB0aGUgc2l6ZSBvZiB0aGUgY2FjaGVkIHZhbHVlCisgICBzaHJ1bmssIHVzZQorICAgcmVhbGxvYygpIGluc3RlYWQgb2YgZnJlZSgpIGFuZCBtYWxsb2MoKS4KKwogMjAwOS0xMi0yMSAxMjoyMyAgYnZhc3NjaGUKIAogICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CkBAIC0zMjE3LDcgKzQ4NDQxLDggQEAKICAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jOgogCiAgICBBcHBsaWVkIHBhdGNoICMyOTEyMDY4LCB3aGljaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGR1cmluZyBzdGFydHVwLgotICAgVGhlIGZ1bmN0aW9uIGxvZ19ub3RpZmljYXRpb24oKSBhZGRzIGEgcm93IHRvIHRoZSB0YWJsZQorICAgVGhlCisgICBmdW5jdGlvbiBsb2dfbm90aWZpY2F0aW9uKCkgYWRkcyBhIHJvdyB0byB0aGUgdGFibGUKICAgIG5sbUxvZ1ZhclRhYmxlLCBidXQKICAgIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhhdCB0YWJsZSBoYXMgYmVlbgogICAgaW5pdGlhbGl6ZWQuIElmCkBAIC0zMjQyLDExICs0ODQ2NywxMTkgQEAKICAgIHZhcmJpbmQgaW5jbHVkZWQgaW4gdHJhcHMgZ2VuZXJhdGVkIGJ5IE5ldC1TTk1QIGl0c2VsZiAoZS5nLgogICAgY29sZFN0YXJ0KS4iCiAKLTIwMDktMTItMjEgMTA6NTAgIGJ2YXNzY2hlCisyMDA5LTEyLTIxIDEwOjA5ICBidmFzc2NoZQogCi0gICAqIFJFQURNRS53aW4zMjoKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FsYXJtLmM6CiAKLSAgIEJhY2twb3J0ZWQgcjE3OTAxIChzcGVsbGluZyBmaXhlcyBhbmQgaHJTeXN0ZW1VcHRpbWUgZG9jdW1lbnRhdGlvbikuCisgICBTcGVsbGluZyBmaXg6IHJlcGxhY2VkIGFsbCBvY2N1cnJlbmNlcyBvZiAnc3BlY2lmYycgYnkKKyAgICdzcGVjaWZpYycuCisKKzIwMDktMTItMjEgMTA6MDYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIFJlZmFjdG9yaW5nOiBlbGltaW5hdGVkIGR1cGxpY2F0ZWQgY29kZSBieSByZWltcGxlbWVudGluZworICAgc25tcF9hbGFybV9yZWdpc3RlcigpIHVzaW5nIHNubXBfYWxhcm1fcmVnaXN0ZXJfaHIoKS4gTmVpdGhlciB0aGUKKyAgIE5ldC1TTk1QIEFQSSBub3IgdGhlIGJlaGF2aW9yIG9mIHNubXBfYWxhcm1fcmVnaXN0ZXIoKSBoYXMgYmVlbgorICAgY2hhbmdlZC4KKworMjAwOS0xMi0yMCAxMToxMCAgbWFnZnIKKworICAgKiAgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9hZ2VudHh0cmFwLmMsIG1hbi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG1hbi9hZ2VudHh0cmFwLjEuZGVmOgorCisgICBORVdTOiBhcHBzOiBBZGQgY29tbWFuZCB0byBzZW5kIEFnZW50WCBub3RpZnkgcmVxdWVzdHMgdG8gYQorICAgbWFzdGVyIGFnZW50LgorCisyMDA5LTEyLTE3IDE2OjQ0ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTc5MTcgLS0gYnVpbGRzIGFnYWluIG9uIFdpbmRvd3Mgc3lzdGVtcy4KKworMjAwOS0xMi0xNyAxNjowMyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgRm9sbG93LXVwIGZvciByMTc5MDMgLyBwYXRjaCAyOTExMzIzICJGaXggYWdlbnQgbG9ja3VwIHdoZW4KKyAgIG1vbml0b3JpbmcKKyAgIEFnZW50WC1kZWxlZ2F0ZWQgaW5mb3JtYXRpb24iIChzdWJtaXR0ZWQgYnkgbXlzZWxmKS4gVGhhdCBwYXRjaAorICAgZGlkIG5vdCBvbmx5CisgICBmaXggdGhlIGxvY2t1cCBidXQgYWxzbyBtYWRlIHNubXBkIHByaW50IGEgd2FybmluZyBkdXJpbmcgc3RhcnR1cAorICAgd2hlbgorICAgaXF1ZXJ5U2VjTmFtZSB3YXMgbm90IGNvbmZpZ3VyZWQuIFRoaXMgd2FybmluZyB3YXMgcHJpbnRlZCBldmVuCisgICB3aGVuIG5vCisgICBpbnRlcm5hbCBxdWVyaWVzIHdlcmUgcGVyZm9ybWVkLiBUaGlzIHdhcm5pbmcgaXMgbm93IG9ubHkgcHJpbnRlZAorICAganVzdCBiZWZvcmUKKyAgIHRoZSBmaXJzdCBpbnRlcm5hbCBxdWVyeSBpcyBtYWRlIChkdXJpbmcgdGhlIGZpcnN0IGNhbGwgb2YKKyAgIG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpIGluc3RlYWQgb2YgZHVyaW5nIGNyZWF0aW9uIG9mCisgICB0aGUgaW50ZXJuYWwKKyAgIHNlc3Npb24pLgorCisyMDA5LTEyLTE3IDEzOjU1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmM6CisKKyAgIFJNT04gTUlCIHNvdXJjZSBjb2RlIGNvbXBpbGVzIGFnYWluIC0tIHNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQKKyAgIGluIHIxNzkxMy4KKworMjAwOS0xMi0xNyAxMzoxOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBNb2RpZmllZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlX3NlY3RpbWVfZGlmZigpIGFuZAorICAgQUdVVElMX3N5c191cF90aW1lKCkgc3VjaCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBub3JtYWxpemUgdGhlCisgICB0dl91c2VjIGZpZWxkIG9mCisgICBzdHJ1Y3QgdGltZXZhbCBwcm9wZXJseS4gTm90ZTogdGhpcyBzb3VyY2UgY29kZSBtb2RpZmljYXRpb24gZG9lcworICAgbm90IGFmZmVjdAorICAgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgdHdvIGZ1bmN0aW9ucy4KKworMjAwOS0xMi0xNyAxMzoxMSAgYnZhc3NjaGUKKworICAgKiBtYW4vbmV0c25tcF91dGlsLjM6CisKKyAgIFJlbW92ZWQgZG9jdW1lbnRhdGlvbiBvZiB0aGUgRElGRlRJTUVWQUwoKSBtYWNybyAtLSBzaG91bGQgaGF2ZQorICAgYmVlbiBpbmNsdWRlZAorICAgaW4gcjE3OTEzLgorCisyMDA5LTEyLTE3IDEzOjA1ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQ29udmVydGVkIHN0YXJ0dGltZSBmcm9tIGEgZ2xvYmFsIHZhcmlhYmxlIGludG8gYSBzdGF0aWMgdmFyaWFibGUKKyAgIGFuZCBhcHBsaWVkIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKyAgIC0gQWRkZWQgdHdvIG5ldyBtYWNyb3M6IE5FVFNOTVBfVElNRVJBREQoKSBhbmQKKyAgIE5FVFNOTVBfVElNRVJTVUIoKS4KKyAgIC0gQWRkZWQgdGhyZWUgbmV3IGZ1bmN0aW9uczogbmV0c25tcF9nZXRfc3RhcnR0aW1lKCksCisgICBuZXRzbm1wX3NldF9zdGFydHRpbWUoKSBhbmQgYXRpbWVfaHN1YnRyYWN0KCkuCisgICAtIFJlcGxhY2VkIGdldHRpbWVvZmRheSgpICsgY2FsY3VsYXRlX3RpbWVfZGlmZigpIGNhbGxzIGJ5IGEgY2FsbAorICAgdG8gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCkuCisgICAtIFJlbW92ZWQgdGhlIG1hY3JvIERJRkZUSU1FVkFMKCkgYmVjYXVzZSBpdCB3YXMgbm90IHVzZWQgaW5zaWRlCisgICB0aGUgTmV0LVNOTVAgcHJvamVjdCBhbmQgYmVjYXVzZSBpdCBjb250YWluZWQgYSBidWcuCisgICAtIFJlbW92ZWQgdGhlIGZ1bmN0aW9ucyBjYWxjdWxhdGVfdGltZV9kaWZmKCksIHVhdGltZV9yZWFkeSgpLAorICAgbWFya2VyX3R0aWNrcygpIGFuZCB0aW1ldmFsX3R0aWNrcygpLgorCisyMDA5LTEyLTE3IDEyOjQ0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIEJ1ZyBmaXg6IGFjY29yZGluZyB0byBSRkMgMjU3MSB0aGUgdW5pdCBvZiBzbm1wRW5naW5lVGltZSBpcyBvbmUKKyAgIHNlY29uZCwKKyAgIG5vdCBvbmUgaHVuZHJlZHRoIG9mIGEgc2Vjb25kLgogCiAyMDA5LTEyLTE3IDEwOjAzICBkdHMxMgogCkBAIC0zMjU0LDYgKzQ4NTg3LDU1IEBACiAKICAgIEZpeCB0eXBvLgogCisyMDA5LTEyLTE2IDEyOjMwICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3Rvb2xzLmMsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbmRvd3Mtb25seSBidWcgZml4ZXM6CisgICAtIEZpeGVkIHRoZSBzdHJhbmdlIGJ1aWxkIGVycm9ycyB0aGF0IG9jY3VycmVkIHdoZW4gY29tcGlsaW5nCisgICBsaWJuZXRzbm1wIGFzIGEgRExMIGFuZCB3aGVuIGVpdGhlciA8c3RkbGliLmg+IG9yIDxzdHJpbmcuaD4gd2FzCisgICBpbmNsdWRlZCBhZnRlciA8bmV0LXNubXAtY29uZmlnLmg+IGluc3RlYWQgb2YgYmVmb3JlLgorICAgLSBGb3IgZGVidWcgYnVpbGRzIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8sIGZpeGVkIHRoZQorICAgbWlzbWF0Y2hlcyBiZXR3ZWVuIHRoZSBfbWFsbG9jX2RiZygpIGNhbGwgaW52b2tlZCBieSBzdHJkdXAoKSBhbmQKKyAgIGZyZWUoKS1pbmcgc3RyZHVwKCktZWQgbWVtb3J5IGJ5IGluY2x1ZGluZyB0aGUgPGNydGRiZy5oPiBoZWFkZXIKKyAgIGluIHRvb2xzLmMgYW5kIGJ5IGRlZmluaW5nIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sCisgICBfQ1JUREJHX01BUF9BTExPQy4gRGV0ZWN0ZWQgdmlhIHRoZSBtZW1vcnkgY2hlY2tlciBpbmNsdWRlZCBpbgorICAgSW50ZWwgUGFyYWxsZWwgU3R1ZGlvLgorCisyMDA5LTEyLTE0IDE3OjIzICB0YW5kZXJzCisKKyAgICogIHBlcmwvYWdlbnQvYWdlbnQueHMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIHN5bmMgZGVmaW5pdGlvbiBvZiBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgaW4gUGVybCB3aXRoIHRoZSBjaGFuZ2VzCisgICBpbgorICAgcjE3ODU1IGFuZCByMTc5MDgKKworMjAwOS0xMi0xNCAxMzo1NSAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wVENQRG9tYWluLmM6CisKKyAgIEZpeCBUQ1AgdHJhbnNwb3J0IGJyb2tlbiBieSByZXYuIDE3ODU1IC0gY29waWVzIG9mCisgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgaW4gc25tcFRDUERvbWFpbi5jIGFuZCBzbm1wVURQRG9tYWluLmMgbXVzdAorICAgYmUgdGhlIHNhbWUuCisKKzIwMDktMTItMTEgMTQ6NDMgIGhhcmRha2VyCisKKyAgICogYXBwcy9zbm1wdXNtLmMsIG1hbi9zbm1wdXNtLjEuZGVmOgorCisgICBDSEFOR0VTOiBzbm1wdXNtOiBwYXRjaCBmcm9tIE1hcnRpbiBCam9ya2x1bmQgdG8gYWRkIGEgLUN3IG9wdGlvbgorICAgdG8gdXNlIGNyZWF0ZUFuZFdhaXQgZm9yIGFnZW50cyB0aGF0IGFyZSBzdHJpY3QgYWJvdXQgbm90CisgICBhbGxvd2luZyBhIHJvdyB0byBiZSBzZXQgdG8gYWN0aXZlIHVudGlsIHRoZSBhdXRoZW50aWNhdGlvbgorICAgcGFzc3dvcmQgaGFzIGJlZW4gY2hhbmdlZDsgcGx1cyB3aGl0ZS1zcGFjZSBjbGVhbiB1cCwgbWFudWFsCisgICBhZGRpdGlvbnMgYW5kIGhlbHAgb3V0cHV0IG1vZGlmaWNhdGlvbnMgYnkgaGFyZGFrZXIKKworMjAwOS0xMi0xMSAxNDozNSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhIGZvcm1hdCBzcGVjaWZpZXIgbWlzbWF0Y2guCisKIDIwMDktMTItMTEgMTQ6MDYgIGJ2YXNzY2hlCiAKICAgICogUkVBRE1FLndpbjMyLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKQEAgLTMyNjcsMTIgKzQ4NjQ5LDM2IEBACiAgICB0cmFwcyBpcyBub3cKICAgIGNvcnJlY3QuCiAKKzIwMDktMTItMTAgMTU6NTIgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSEVTOiAyOTExOTcwOiBQcm9wZXJseSB0ZXJtaW5hdGUgbGlua2VkIGxpc3QKKyAgIG9mIHJlZ2lzdHJhdGlvbnMuCisgICBQYXRjaCBwcm92aWRlZCBieSBNaXJrbyBEZWNrZXJ0LgorCiAyMDA5LTEyLTEwIDE1OjQzICBkdHMxMgogCiAgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCiAgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAyOTExMzIzOiBGaXggYWdlbnQgbG9ja3VwIHdoZW4gbW9uaXRvcmluZyBBZ2VudFgtZGVsZWdhdGVkIGluZm9ybWF0aW9uCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMjkxMTMyMzogRml4IGFnZW50IGxvY2t1cCB3aGVuCisgICBtb25pdG9yaW5nIEFnZW50WC1kZWxlZ2F0ZWQgaW5mb3JtYXRpb24KKworMjAwOS0xMi0xMCAxMzo1OSAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIENoYW5nZXM6CisgICAtIEFkZGVkIGluZm9ybWF0aW9uIGFib3V0IE1pY3Jvc29mdCdzIGltcGxlbWVudGF0aW9uIG9mCisgICBoclN5c3RlbVVwdGltZS4wLgorICAgLSBGaXhlZCBhIGZldyB0eXBvcy4KKworMjAwOS0xMi0xMCAxMzowMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBBZGRlZCBtaXNzaW5nIG5ld2xpbmUgaW4gYSBsb2dnaW5nIHN0YXRlbWVudC4KIAogMjAwOS0xMi0xMCAxMjo1NCAgYnZhc3NjaGUKIApAQCAtMzI4NywyMSArNDg2OTMsMjk0IEBACiAgICBoYXMgYmVlbgogICAgZGV0ZWN0ZWQuCiAKKzIwMDktMTItMTAgMTI6MzcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIE9JRHMgaW4gZGVidWcgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHRoZSB3aW5FeHRETEwgbW9kdWxlIGFyZSBub3cKKyAgIHByaW50ZWQgaW4KKyAgIHN5bWJvbGljIGZvcm0gaW5zdGVhZCBvZiBudW1lcmljIGZvcm0uCisKKzIwMDktMTItMTAgMDg6NTcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvd2luMzJzZGsuZHN3OgorCisgICBQcm9qZWN0IGRlcGVuZGVuY2llcyBzaG91bGQgbm93IHJlYWxseSBiZSBjb3JyZWN0LiBTaG91bGQgaGF2ZQorICAgYmVlbiBpbmNsdWRlZAorICAgaW4gcjE3ODczLgorCisyMDA5LTEyLTEwIDA4OjQxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBDaGFuZ2VzIChvbmx5IHNvdXJjZSBjb2RlIGNvbW1lbnRzIGhhdmUgYmVlbiBjaGFuZ2VkKToKKyAgIC0gUmVtb3ZlZCBhIG5vdGUgdGhhdCBjb250cmFkaWN0ZWQgdGhlIGluc3RydWN0aW9ucyBpbgorICAgUkVBRE1FLndpbjMyLgorICAgLSBVcGRhdGVkIGJ1aWxkIGluc3RydWN0aW9ucyBhZnRlciB0aGUgYWRkaXRpb24gb2YgdGhlIGZpbGUKKyAgIHdpbjMyL1NubXAtd2luRXh0RExMLmggaW4gcjE3ODMwLgorCisyMDA5LTEyLTEwIDA4OjE3ICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcHN0YXR1cy5jOgorCisgICBNYWRlIGZpbGUgaGVhZGVyIGNvbW1lbnRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZGVzY3JpcHRpb25zIGluIHRoZQorICAgcmVzcGVjdGl2ZSBtYW4gcGFnZXMuCisKKzIwMDktMTItMTAgMDM6MDQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IGFnZW50X3N5c09SX2NhbGxiYWNrIHdvbid0IHRyaWdnZXIgYSB3YXJuaW5nIHdoZW4KKyAgIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjay4gQ2hhbmdlIGFnZW50eF9yZW9wZW5fc3lzT1JUYWJsZSBpbgorICAgb3JkZXIgdG8gYXZvaWQgd2FybmluZ3Mgb2YgY29uc3QgcmVtb3ZhbC4KKworMjAwOS0xMi0wOSAxNTowNSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICAtIE1vdmVkIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgdmFyaWFibGUgJ25ld2xpbmUnIGluc2lkZSB0aGUKKyAgIGZ1bmN0aW9uCisgICBsb2dfaGFuZGxlcl9zdGRvdXRlcnIoKSBiZWNhdXNlIHRoaXMgdmFyaWFibGUgaXMgb25seSB1c2VkIGJ5CisgICB0aGF0IGZ1bmN0aW9uLgorICAgLSBEb2N1bWVudGVkIHRoZSBwdXJwb3NlIG9mIHRoZSB2YXJpYWJsZSAnbmV3bGluZScuCisgICAtIEJ1ZyBmaXg6IG1hZGUgc3VyZSB0aGF0IHRoZSBjYWxsIGxvZ19oYW5kbGVyX3N0ZG91dGVycigpIGRvZXMKKyAgIG5vdCB0cmlnZ2VyIGFuCisgICBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgKHN0clstMV0pIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCB0bworICAgdGhpcyBmdW5jdGlvbi4KKwogMjAwOS0xMi0wOSAxNDozNyAganNhZnJhbmVrCiAKICAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKICAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBBZGQgc3VwcG9ydCBvZiBuZXR3b3JrIGludGVyZmFjZXMgd2l0aCBIVyBhZGRyZXNzIGJpZ2dlciB0aGFuIDYgYnl0ZXMgdG8gaXBOZXRUb01lZGlhVGFibGUgYW5kIGlwTmV0VG9QaHlzaWNhbFRhYmxlLgorICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBzdXBwb3J0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyB3aXRoIEhXIGFkZHJlc3MKKyAgIGJpZ2dlciB0aGFuIDYgYnl0ZXMgdG8gaXBOZXRUb01lZGlhVGFibGUgYW5kCisgICBpcE5ldFRvUGh5c2ljYWxUYWJsZS4KICAgIFNvbWUgSFcsIGxpa2UgSW5maW5pQmFuZCwgdXNlcyBIVyBhZGRyZXNzZXMgd2l0aCA5IGFuZCBtb3JlCiAgICBieXRlcy4gU25tcGQgb24gTGludXggd2FzIG5vdCBhYmxlIHRvIHBhcnNlIC9wcm9jL25ldC9hcnAgdGhlbgogICAgYW5kIHByb2R1Y2VkIHVnbHkgJ2lvY3RsIDM1MTIzIHJldHVybmVkIC0xJyB0byBsb2cuCiAKKzIwMDktMTItMDkgMTI6MjcgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBBZGRlZCBtaXNzaW5nIC1MbyBpbiBhIGNvbW1hbmQgbGluZSBleGFtcGxlLgorCisyMDA5LTEyLTA5IDEyOjE2ICBidmFzc2NoZQorCisgICAqIHdpbjMyL3NubXBkc2RrL3NubXBkLmRzcDoKKworICAgQWRkZWQgc25tcGFwaS5saWIgdG8gdGhlIGxpbmtlciBpbnB1dCBsaXN0IG9mIHNubXBkLmV4ZS4KKyAgIEFwcGFyZW50bHkgVmlzdWFsCisgICBTdHVkaW8gMjAwNSBhbmQgMjAwOCBuZWVkIHRoaXMgbGlicmFyeSBpbiB0aGUgbGlua2VyIGlucHV0IGxpc3QKKyAgIHdoZW4gbGlua2luZworICAgdGhlIGV4ZSwgd2hpbGUgZm9yIFZpc3VhbCBTdHVkaW8gNiBpdCBpcyBzdWZmaWNpZW50IHdoZW4gdGhpcworICAgbGlicmFyeSBpcworICAgcHJlc2VudCBpbiB0aGUgbGlua2VyIGlucHV0IGxpc3Qgb2YgbmV0c25tcG1pYnMubGliLgorCisyMDA5LTEyLTA5IDA4OjQ1ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgVXBkYXRlZCBSRUFETUUud2luMzI6IGJlY2F1c2Ugb2YgcjE3ODg0IGFuZCByMTc4NzMsIHRoZSBidWlsZAorICAgcHJvY2VzcyBiZWNhbWUgc2ltcGxlci4KKworMjAwOS0xMi0wOSAwODoyMiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgRXhwb3J0IHN0cnRvdWxsIC0tIHNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gcjE3ODg2LgorCisyMDA5LTEyLTA5IDA4OjIxICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgUmV2ZXJ0ZWQgcjE3NzAwIGZvciBSRUFETUUud2luMzI6IGJlY2F1c2Ugb2YgcjE3ODg2LCBtb2RpZnlpbmcKKyAgIHRoZQorICAgc3RydG91bGwgbGluZSBpbiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiBpcyBubyBsb25nZXIKKyAgIG5lY2Vzc2FyeS4KKworMjAwOS0xMi0wOSAwODoxMiAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgCisgICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbmRvd3M6IHN3aXRjaGVkIGZyb20gX3N0cnRvdWk2NCgpIHRvIHN0cnRvdWxsKCkgZm9yIE1pY3Jvc29mdAorICAgVmlzdWFsIFN0dWRpbworICAgMjAwMiBhbmQgbGF0ZXIgYmVjYXVzZSB0aGUgZm9ybWVyIGlzIG5vdCBmdWxseSBQT1NJWCBjb21wbGlhbnQuCisgICBUaGUgc3RydG91bGwoKQorICAgdW5pdCB0ZXN0IHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0IGZvciBfc3RydG91aTY0KCkgd2l0aAorICAgTVNWQyAyMDA4OgorICAgdGVzdCAxNCBmYWlsZWQgKGlucHV0ICIweCIpOiBleHBlY3RlZCBlbmQgMSwgZ290IGVuZCAwCisgICB0ZXN0IDE2IGZhaWxlZCAoaW5wdXQgIjB4Iik6IGV4cGVjdGVkIGVuZCAxLCBnb3QgZW5kIDAKKwogMjAwOS0xMi0wOCAyMTo1NCAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIHNubXBsaWIvc3lzdGVtLmM6CiAKLSAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkOiBNYWtlIHN1cmUgdGhhdCBhIG1hc2sgaXMgZ2l2ZW4gdG8gb3BlbiB3aGVuIE9fQ1JFQVQgaXMgc3BlY2lmaWVkCisgICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZDogTWFrZSBzdXJlIHRoYXQgYSBtYXNrIGlzIGdpdmVuIHRvIG9wZW4KKyAgIHdoZW4gT19DUkVBVCBpcyBzcGVjaWZpZWQKKworMjAwOS0xMi0wOCAxNjoyMCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi93aW4zMi5kc3c6CisKKyAgIE1hZGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gZXhlJ3MgYW5kIGxpYidzIGV4cGxpY2l0IHN1Y2ggdGhhdAorICAgVmlzdWFsCisgICBTdHVkaW8gY2FuIGZpZ3VyZSBvdXQgdGhlIHByb3BlciBidWlsZCBvcmRlciBpbnN0ZWFkIG9mIHRoZSB1c2VyCisgICBoYXZpbmcKKyAgIHRvIGZpZ3VyZSB0aGlzIG91dC4KKworMjAwOS0xMi0wOCAxNTo0NyAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXB0YWJsZS5jOgorCisgICBCdWlsZHMgYWdhaW4gb24gVW5peCBzeXN0ZW1zIChmaXhlZCBhIHR5cG8gaW50cm9kdWNlZCBpbiByMTc4ODEpLgorCisyMDA5LTEyLTA4IDE1OjM3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcDoKKworICAgQWRkZWQgbWlzc2luZyAjZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLLiBXaXRob3V0IHRoaXMKKyAgIGRlZmluZSB0aGUgTWljcm9zb2Z0CisgICBWaXN1YWwgU3R1ZGlvIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBhIGJlbmlnbiByZWRlZmluaXRpb24gb2YKKyAgIHR5cGUgc29ja2xlbl90LgorCisyMDA5LTEyLTA4IDE1OjI4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIENsZWFuZWQgdXAgdGhlIGNvZGUgZm9yIHNldHRpbmcgbGluZSBidWZmZXJpbmc6CisgICAtIEluc3RlYWQgb2YgaGF2aW5nIGNhbGxzIHRvIHNldHZidWYoKSBpbiBtdWx0aXBsZSBmaWxlcywgdGhlcmUKKyAgIGlzIG5vdyBvbmUgY2FsbAorICAgdG8gc2V0dmJ1ZigpIGZyb20gdGhlIG5ldyBmdW5jdGlvbiBuZXRzbm1wX3NldF9maWxlbG9nLiBUaGVzZQorICAgc291cmNlIGZpbGVzCisgICBhcmU6IHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRyYXBkLmMsCisgICBhcHBzL3NubXB0YWJsZS5jCisgICBhbmQgYWdlbnRcbWliZ3JvdXBcZGlzbWFuXHRyYWNlcm91dGVcdHJhY2VSb3V0ZUN0bFRhYmxlLmMuCisgICAtIFVzaW5nIC1MbyAvIC1MZSBkb2VzIG5vdyBlbmFibGUgbGluZSBidWZmZXJpbmcgZm9yIHN0ZG91dCAvCisgICBzdGRlcnIgcmVzcGVjdGl2ZWx5LgorICAgLSBSZW1vdmVkIGNvZGUgaW4gc25tcGQuYyBhbmQgc25tcHRyYXBkLmMgZm9yIHNldHRpbmcgbGluZQorICAgYnVmZmVyaW5nIG9uIHN0ZG91dAorICAgc2luY2Ugc2V0dGluZyBsaW5lIGJ1ZmZlcmluZyBvbiBzdGRvdXQgaXMgbm93IHRyaWdnZXJlZCBieSB0aGUKKyAgIGNvbW1hbmQtbGluZQorICAgb3B0aW9uIC1Mby4KKyAgIEJ1Z3MgZml4ZWQ6CisgICAtIExpbmUgYnVmZmVyaW5nIG1vZGUgaXMgbm93IGFsc28gc2V0IGZvciBzdGRlcnIgd2hlbiB0aGUKKyAgIGNvbW1hbmQtbGluZSBvcHRpb24KKyAgIC1MZSBoYXMgYmVlbiBzcGVjaWZpZWQuCisgICAtIExpbmUgYnVmZmVyaW5nIG1vZGUgaXMgbm93IHNldCBjb3JyZWN0bHkgZm9yIHN0ZG91dCBvbiBXaW5kb3dzCisgICBzeXN0ZW1zCisgICAoY29tbWFuZC1saW5lIG9wdGlvbiAtTG8pLgorCisyMDA5LTEyLTA4IDEyOjMyICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGxvY2FsIHZhcmlhYmxlcyB0aGF0IHdlcmUgZGVmaW5lZAorICAgYnV0CisgICBub3QgdXNlZCBieSBvbmx5IGVuYWJsaW5nIHRoZSBsb2NhbCB2YXJpYWJsZSBkZWZpbml0aW9ucyBvbiB0aGUKKyAgIHBsYXRmb3JtIHRoYXQgdXNlcyB0aGVzZSB2YXJpYWJsZXMgKExpbnV4KS4KKworMjAwOS0xMi0wOCAxMjoyNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6CisKKyAgIEFkZGVkICNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzLmgiLiBGaXhlcyBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDktMTItMDggMTI6MjUgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9tYWluLmM6CisKKyAgIEluY2x1ZGUgdGhlIGdldGhvc3RlbnQoKSAvIHNldGhvc3RlbnQoKSBkZWNsYXJhdGlvbnMgYmVmb3JlIHVzaW5nCisgICB0aGVzZQorICAgZnVuY3Rpb25zLiBGaXhlcyBhIGNvbXBpbGVyIHdhcm5pbmcgb24gV2luZG93cyBzeXN0ZW1zLgorCisyMDA5LTEyLTA4IDEyOjExICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIEZpeGVkIGFuIGluY29uc2lzdGVuY3kgKHdoaWNoIGlzIGFsbG93ZWQgYnkgdGhlIEFOU0kgQyBzdGFuZGFyZCkKKyAgIGJldHdlZW4KKyAgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9uIG9mCisgICBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIgYW5kCisgICBuZXRzbm1wX2FkZF9kZWZhdWx0X3RyYXBoYW5kbGVyIHN1Y2gKKyAgIHRoYXQgdGhlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIGNvbXBpbGVyIGRvZXMgbm8gbG9uZ2VyIGNvbXBsYWluCisgICBhYm91dAorICAgdGhpcy4KKworMjAwOS0xMi0wOCAxMjowOCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfc2VydmljZS5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmc6IG1hZGUgc3VyZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdAorICAgY29tcGxhaW4gYWJvdXQgaW1wbGljaXRseSBjYXN0aW5nIGF3YXkgY29uc3RuZXNzLgorCisyMDA5LTEyLTA4IDEyOjA3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBPbmx5IGNvbXBpbGUgdGhlIHdpbkV4dERMTCBzb3VyY2UgY29kZSBpZiB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvCisgICBVU0lOR19XSU5FWFRETExfTU9EVUxFIGhhcyBiZWVuIGRlZmluZWQuCisKKzIwMDktMTItMDggMTI6MDMgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9saWJzbm1wLmRzcDoKKworICAgQWRkZWQgbWlzc2luZyAjZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLLgorCisyMDA5LTEyLTA4IDEyOjAxICBidmFzc2NoZQorCisgICAqIHdpbjMyL3dpbjMyc2RrLmRzdzoKKworICAgTWFkZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBleGUncyBhbmQgbGliJ3MgZXhwbGljaXQgc3VjaCB0aGF0CisgICBWaXN1YWwKKyAgIFN0dWRpbyBjYW4gZmlndXJlIG91dCB0aGUgcHJvcGVyIGJ1aWxkIG9yZGVyIGluc3RlYWQgb2YgdGhlIHVzZXIKKyAgIGhhdmluZworICAgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgb3JkZXIuCisKKzIwMDktMTItMDggMDk6NDYgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbmRvd3MgLyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbzogZGlzYWJsZWQgdGhlIGNvbXBpbGVyIHdhcm5pbmcKKyAgIGFib3V0CisgICBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2hlcyAoNDAxOCkgYmVjYXVzZSB0aGlzIHdhcm5pbmcgZG9lcyBub3QKKyAgIHlpZWxkCisgICBhbnkgdXNlZnVsIGluZm9ybWF0aW9uLgorCisyMDA5LTEyLTA4IDA5OjE3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzYzOSAocGF0Y2ggMjc4MDQxMSAtLSBmaXggY29tcGlsZXIgd2FybmluZ3MpOgorICAgYXBwbGllZAorICAgdGhpcyBwYXRjaCB0byBuZXQtc25tcC1jb25maWcuaC5pbiB0b28gc3VjaCB0aGF0CisgICBuZXQtc25tcC1jb25maWcuaCBhbmQKKyAgIG5ldC1zbm1wLWNvbmZpZy5oLmluIG1hdGNoIGFnYWluLgorCisyMDA5LTEyLTA4IDA4OjE2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBhZ2VudHhfc3lzT1JfY2FsbGJhY2soKSBkb2VzIG5vdCB0cmlnZ2VyIGEKKyAgIGNvbXBpbGVyCisgICB3YXJuaW5nIHdoZW4gdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuCisgICBkZWNsYXJlZCBjb25zdC4KKworMjAwOS0xMi0wOCAwODoxNCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CisKKyAgIENoYW5nZWQgdGhlIHJldHVybiB0eXBlIG9mIHN0cnRvdWxsKCkgZnJvbSAndW5zaWduZWQgbG9uZyBsb25nJworICAgKHdoaWNoCisgICBpcyBub3QgdmFsaWQgQzg5KSB0byAndWludDY0X3QnIChkZWNsYXJlZCBpbgorICAgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPikuCisgICBUaGlzIGNoYW5nZSBtYWtlcyB0aGUgTmV0LVNOTVAgc291cmNlIGNvZGUgY29tcGlsZSBhZ2FpbiB3aXRoCisgICBNU1ZDIDYuMC4KIAogMjAwOS0xMi0wNyAxMDo0NiAgZHRzMTIKIApAQCAtMzMxMCwxOCArNDg5ODksNDYgQEAKICAgIFR3ZWFrIG1pc3Npbmcgc3ViaWRlbnRpZmllciBwcm9jZXNzaW5nIHRvIGJlIG1vcmUgdHlwZS1hd2FyZS4KICAgIChBbiBpc3N1ZSB3aXRoIEFJWCwgYXQgbGVhc3QpCiAKKzIwMDktMTItMDYgMTg6MzggIG1hZ2ZyCisKKyAgICogIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IE1ha2UgdGhlIGxpc3RzIG9mIGNvbTJTZWMqRW50cmllcyBzdGF0aWMKKworMjAwOS0xMi0wNiAxODozNCAgbWFnZnIKKworICAgKiAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgTWFrZSB0aGUgaXRlcmF0b3IgdmFyaWFibGUgaW4gbmV0c25tcF8qX2dldFNlY05hbWUgY29uc3QKKworMjAwOS0xMi0wNiAxODoyOSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IENoYW5nZSB0aGUgdHlwZXMgb2YgdGhlIHJldHVybiB2YWx1ZXMgb2YKKyAgIG5ldHNubXBfKl9nZXRTZWNOYW1lIGZyb20gY2hhciogdG8gY29uc3QgY2hhciogc2luY2UgdGhleSBwb2ludAorICAgaW50byBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgorCisyMDA5LTEyLTA1IDIwOjE5ICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgorCisgICBmaXggZGVjbGFyYXRpb24gb2Ygc3RydG91bGwKKwogMjAwOS0xMi0wNSAxNzo0MiAgdGFuZGVycwogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgogCiAgICBjYWxsIG5ldHNubXBfcmVhZF9tb2R1bGUgaW5zdGVhZCBvZiByZWFkX21vZHVsZSB0byBtYWtlIGl0Ci0gICBjb21waWxlIHdpdGggTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKLQotMjAwOS0xMi0wNSAxNzoxOSAgdGFuZGVycwotCi0gICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzoKLQotICAgYXBwbHkgcjE3ODU0IGJ1aWxkIGZpeCB0byBhbGwgYWZmZWN0ZWQgYnJhbmNoZXMKKyAgIGNvbXBpbGUgd2l0aAorICAgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKIAogMjAwOS0xMi0wMiAxNTozOSAganNhZnJhbmVrCiAKQEAgLTMzNDQsNyArNDkwNTEsNyBAQAogCiAyMDA5LTEyLTAxIDEyOjM2ICBkdHMxMgogCi0gICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CiAKICAgIFVwZGF0ZSBhIHJlZHVuZGFudCAoYW5kIHByb2JhYmx5IGluYWNjdXJhdGUpIGNvbW1lbnQuCiAKQEAgLTMzNTIsMTkgKzQ5MDU5LDUyIEBACiAKICAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgogCi0gICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjgyMjM2MDogRml4IG1lbW9yeSBsZWFrIHdoZW4gYnVpbGRpbmcgdGFibGUgT0lEcworICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4MjIzNjA6IEZpeCBtZW1vcnkgbGVhayB3aGVuIGJ1aWxkaW5nCisgICB0YWJsZSBPSURzCiAKIDIwMDktMTItMDEgMTI6MDggIGR0czEyCiAKICAgICogYXBwcy9zbm1wdGFibGUuYzoKIAotICAgQ0hBTkdFUzogc25tcHRhYmxlOiBCVUdTOiAyODM3OTk4OiBIYW5kbGUgbWlzc2luZyBpbnN0YW5jZSBzdWJpZGVudGlmaWVycyBpbiByZXN1bHRzCisgICBDSEFOR0VTOiBzbm1wdGFibGU6IEJVR1M6IDI4Mzc5OTg6IEhhbmRsZSBtaXNzaW5nIGluc3RhbmNlCisgICBzdWJpZGVudGlmaWVycyBpbiByZXN1bHRzCiAKIDIwMDktMTItMDEgMTE6NTYgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jOgogCi0gICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjg0MTAwODogUHJvdGVjdCBhZ2FpbnN0IGNyYXNoIGZvbGxvd2luZyBmYWlsZWQgQWdlbnRYIHJlc3BvbnNlCisgICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjg0MTAwODogUHJvdGVjdCBhZ2FpbnN0IGNyYXNoIGZvbGxvd2luZworICAgZmFpbGVkIEFnZW50WCByZXNwb25zZQorCisyMDA5LTEyLTAxIDA3OjM0ICBqc2FmcmFuZWsKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEZpeCByZXNwb25kaW5nIHRvIGJyb2FkY2FzdCByZXF1ZXN0cy4KKyAgIFVEUCByZXNwb25zZXMgYXJlIHNlbnQgd2l0aCBzb3VyY2UgSVAgYWRkcmVzcyB3aGljaCB3YXMKKyAgIGRlc3RpbmF0aW9uIG9mCisgICBhcHByb3ByaWF0ZSByZXF1ZXN0cyAoaW1wbGVtZW50ZWQgaW4gU1ZOIHJldi4gMTUyMTUpLiBCdXQgaWYgdGhlCisgICBkZXN0aW5hdGlvbgorICAgb2YgYSByZXF1ZXN0IGlzIGJyb2FkY2FzdCBJUCBhZGRyZXNzLCB0aGUgcmVxdWVzdCB3YXMgc2VudCB3aXRoCisgICB0aGUgYnJvYWRjYXN0CisgICBhZGRyZXNzIGFzIHNvdXJjZS4gc2VuZG1zZygpIG9uIExpbnV4IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBhbmQKKyAgIHJldHVybnMgZXJyb3IKKyAgIC0+IHJlc3BvbnNlIGlzIG5vdCBzZW50LiBJbiBvcmRlciB0byBzZW5kIHJlc3BvbnNlcyBmcm9tIHRoZSBzYW1lCisgICBpbnRlcmZhY2UsCisgICBpbnRlcmZhY2UgaW5kZXggb2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSBtdXN0IGJlIHVzZWQuCisKKzIwMDktMTItMDEgMDA6MjkgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGFjdHVhbGx5IGNvbXBpbGUgYWZ0ZXIgMTc4NTIuCisKKzIwMDktMTItMDEgMDA6MjQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGFjdHVhbGx5IGNvbXBpbGUgYWZ0ZXIgMTc4NDIuCiAKIDIwMDktMTEtMzAgMTY6NTUgIGR0czEyCiAKQEAgLTMzNzcsNTIgKzQ5MTE3LDkyIEBACiAKICAgICogbG9jYWwvbWliMmMub2xkLWFwaS5jb25mOgogCi0gICBDSEFOR0VTOiBtaWIyYzogQlVHUzogMjg4ODU2OTogRml4IGdlbmVyYXRpb24gb2YgdGFibGUgY29sdW1ucyBhcnJheQorICAgQ0hBTkdFUzogbWliMmM6IEJVR1M6IDI4ODg1Njk6IEZpeCBnZW5lcmF0aW9uIG9mIHRhYmxlIGNvbHVtbnMKKyAgIGFycmF5CiAKIDIwMDktMTEtMzAgMTY6MzAgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgogCi0gICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjg5NDA1OTogSGFuZGxlIGVycm9ycyB3aGVuIGNvdW50aW5nIGludGVyZmFjZXMKKyAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODk0MDU5OiBIYW5kbGUgZXJyb3JzIHdoZW4gY291bnRpbmcKKyAgIGludGVyZmFjZXMKIAogMjAwOS0xMS0zMCAxNjowNyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYzoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMjg5NzAwMDogU3VwcHJlc3MgMzItYml0IGNvdW50ZXIgdHJ1bmNhdGlvbiB3YXJuaW5ncy4KKyAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDI4OTcwMDA6IFN1cHByZXNzIDMyLWJpdCBjb3VudGVyIHRydW5jYXRpb24KKyAgIHdhcm5pbmdzLgorCisyMDA5LTExLTMwIDE1OjM0ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyOTAzMDkyOiBGaXggYnJva2VuIGhhbmRsaW5nIG9mIGJyb2FkY2FzdAorICAgZW50cmllcy4KIAogMjAwOS0xMS0zMCAxNToxOSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYzoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyOTAxMDI5OiBGaXggY29tcGlsZXIgd2FybmluZyBvbiBDbG9zZUhhbmRsZSgpCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI5MDEwMjk6IEZpeCBjb21waWxlciB3YXJuaW5nIG9uCisgICBDbG9zZUhhbmRsZSgpCiAgICBFbmRpYW4gcHJvYmxlbXMgYWxyZWFkeSBhZGRyZXNzZWQgYnkgcGF0Y2ggIzI4MzU1NzYKIAogMjAwOS0xMS0zMCAxNToxMyAgZHRzMTIKIAogICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgogCi0gICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjg5MDkzMTogQmV0dGVyIGhhbmRsaW5nIG9mIENvdW50ZXI2NCB2YWx1ZXMuCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjg5MDkzMTogQmV0dGVyIGhhbmRsaW5nIG9mIENvdW50ZXI2NAorICAgdmFsdWVzLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgTWF4IFJvbWFub3YuCiAKIDIwMDktMTEtMzAgMTU6MDcgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmM6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4NzgxNjogUHJvdGVjdCBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gY3Jhc2gKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4NzgxNjogUHJvdGVjdCBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8KKyAgIGNyYXNoCisKKzIwMDktMTEtMzAgMTU6MDMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODMyMjA6IEZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyB3aGVuCisgICBpZlhUYWJsZSBpcyBub3QgaW5jbHVkZWQuCiAKIDIwMDktMTEtMzAgMTQ6NDkgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYzoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODgzMTU1OiBGaXggbWVtb3J5IGxlYWsgaW4gcHJveHkgaGFuZGxpbmcuCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODMxNTU6IEZpeCBtZW1vcnkgbGVhayBpbiBwcm94eQorICAgaGFuZGxpbmcuCiAgICBQYXRjaCBzdXBwbGllZCBieSBHb3d0aGFtIFRob21tYW5kcmEuCiAKKzIwMDktMTEtMzAgMTQ6MzIgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODgzMDkyOiBTdXBwb3J0IG1vbml0b3JpbmcgcHJvY2Vzc2VzIHRoYXQKKyAgIHNob3VsZCBub3QgYmUgcnVubmluZy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IENocmlzdGlhbiAoY2c3NSkuCisgICAKKyAgIFFuOiBTaG91bGQgdGhpcyBmdW5jdGlvbmFsaXR5IGJlIGJhY2stcG9ydGVkIHRvIGVhcmxpZXIgbGluZXM/CisKIDIwMDktMTEtMzAgMTQ6MTIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg3NzUxODogRml4IGhhbmRsaW5nIG9mIHNjb3BlZCBBZ2VudFggdmFyaWFibGVzCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4Nzc1MTg6IEZpeCBoYW5kbGluZyBvZiBzY29wZWQgQWdlbnRYCisgICB2YXJpYWJsZXMKKworMjAwOS0xMS0zMCAxNDowMSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjgzNTU3NjogRml4IGVuZGlhbm5lc3MgaXNzdWVzIGluCisgICBwYXNzL3Bhc3NfcGVyc2lzdAogCiAyMDA5LTExLTI3IDA4OjU0ICBqc2FmcmFuZWsKIApAQCAtMzQzMCwxMyArNDkyMTAsMTczIEBACiAKICAgIFJlbW92ZSBleGVjdXRhYmxlIGF0dHJpYnV0ZSBmcm9tIHNvdXJjZSBmaWxlcy4KIAorMjAwOS0xMS0yNSAyMDozNSAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGxvY2FsL21pYjJjLm5vdGlmeS5jb25mOgorCisgICBDSEFOR0VTOiBzbm1wZDogTWFrZSBhbGwgdGhlIG9pZHMgYW5kIG9pZCBsZW5ndGhzIGluIGFnZW50X3RyYXAuYworICAgY29uc3QgYW5kIHVzZSB0aGVtIGZyb20gZXZlcnl3aGVyZS4KKworMjAwOS0xMS0yNSAyMDoyNyAgbWFnZnIKKworICAgKiBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBJbnN0YWxsIGxpYnJhcnkvb2lkLmguIFRoYW5rcyB0byAiVG9tYXN6IExpcyIKKyAgIHdobyBzcG90dGVkIHRoZSBidWcuCisKKzIwMDktMTEtMjUgMDk6NDcgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oOgorCisgICBDb21tZW50LW9ubHkgY2hhbmdlOiBjaGFuZ2VkIHRoZSBuYW1lIGluIHRoZSBmaWxlIGhlYWRlciBmcm9tCisgICB0ZXN0aGFuZGxlci5oCisgICB0byBpbnN0YW5jZS5oIHN1Y2ggdGhhdCBpdCBub3cgbWF0Y2hlcyB0aGUgZmlsZW5hbWUuCisKKzIwMDktMTEtMjQgMDc6NDkgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBSZW1vdmUgdW5uZWNlc3NhcnkgY2FzdAorCisyMDA5LTExLTIzIDA3OjA3ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBNYWtlIHRoZSBlbnRlcnByaXNlIGFyZ3VtZW50IG9mCisgICBuZXRzbm1wX3NlbmRfdHJhcHMgYW5kIHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMgY29uc3QKKworMjAwOS0xMS0yMyAwNzowMiAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIHRoZSBuYW1lIGFyZ3VtZW50IHRvIGZpbmRfdmFyYmluZF9pbl9saXN0CisgICBjb25zdAorCisyMDA5LTExLTIyIDIzOjI1ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4Lmg6CisKKyAgIFJlbW92ZSBzb21lIGxvY2FsIHJlZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucworCisyMDA5LTExLTIyIDAxOjAzICBtYWdmcgorCisgICAqICB3aW4zMi9jb25maWcuaC5ib3JsYW5kLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZywgV2luMzI6IFJlbW92ZSBhIGZldyB1bnVzZWQgY29uZmlndXJlIHN5bWJvbHMKKworMjAwOS0xMS0yMSAwODowMSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oLCB3aW4zMi9zbm1wLXdpbmV4dGRsbC5oOgorCisgICBSZXBsYWNlZCBhbiBhY2NpZGVudGFsbHkgY29tbWl0dGVkIGZpbGUgYnkgdGhlIHByb3BlciBjb250ZW50cy4KKworMjAwOS0xMS0yMCAxNjoyOSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKKworICAgUmV2ZXJ0ZWQgYWNjaWRlbnRhbGx5IG1lcmdlZCBjaGFuZ2VzLgorCisyMDA5LTExLTIwIDE2OjI2ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWIsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvc25tcC13aW5leHRkbGwuaDoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDA5LTExLTIwIDE2OjE4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjLCAgIAorICAgICAgbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBTcGVsbGluZyBmaXggaW4gQyBzb3VyY2UgY29kZSBjb21tZW50czogcmVwbGFjZWQgJ3JldHJpdmFsJyBieQorICAgJ3JldHJpZXZhbCcuCisKKzIwMDktMTEtMjAgMTY6MTUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIEZpeGVkIGEgbmFtaW5nIGluY29uc2lzdGVuY3k6IHJlcGxhY2VkIHR3byBvY2N1cnJlbmNlcyB3aW5FeHREbGwKKyAgIGJ5IHdpbkV4dERMTCBpbiBzb3VyY2UgY29kZSBjb21tZW50cy4KKworMjAwOS0xMS0xOSAyMjo1MiAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyOTAwMDc4OiBBZGQgc3VwcG9ydCBmb3IgT0lEIHZhcmlhYmxlcyB3aXRoCisgICBzaXplIGluIGVsZW1lbnRzIGluc3RlYWQgb2YgYnl0ZXMsIGNvcnJlY3Qgc3lzT2JqZWN0SUQgdG8gdXNlCisgICB0aGlzLgorCiAyMDA5LTExLTEzIDEyOjU5ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIGxvZ2dpbmcgb2YgJ3RydW5jYXRpbmcgaW50ZWdlciB2YWx1ZSA+IDMyIGJpdHMnIGluIElQLU1JQiBhbmQgVENQLU1JQgorICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIGxvZ2dpbmcgb2YgJ3RydW5jYXRpbmcgaW50ZWdlciB2YWx1ZSA+IDMyCisgICBiaXRzJyBpbiBJUC1NSUIgYW5kIFRDUC1NSUIKICAgIFRoZSBjb3VudGVycywgd2hpY2ggZ3JvdyBmYXN0IGFyZSBub3cgY3V0IHRvIDMyYml0cy4KIAorMjAwOS0xMS0xMiAwODoyNiAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBVc2UgYmlnIHByaW50ZidzIGluc3RlYWQgb2YgbWFueSBzbWFsbCBvbmVzIHRvIHNhdmUgYSBmZXcgaHVuZHJlZAorICAgYnl0ZXMgb24gdGhlIGZpbmFsIGV4ZWN1dGFibGUgc2l6ZS4KKworMjAwOS0xMS0xMiAwMjoyNCAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvc3RybGNweS5jLCBzbm1wbGliL3N0cnRva19yLmMsIHNubXBsaWIvc3RydG9sLmMsICAgCisgICAgICBzbm1wbGliL3N0cnRvdWwuYywgc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIEFDX1JFUExBQ0VfRlVOQ1MgdG8gaGFuZGxlIGNvZGUgdGhhdCBpcworICAgbWlzc2luZyBvbiBzb21lIHBsYXRmb3Jtcy4KKwogMjAwOS0xMS0xMSAwOTowMCAgZHRzMTIKIAogICAgKiBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKQEAgLTM0NDUsOTAgKzQ5Mzg1LDg0IEBACiAgICBSZXR1cm4gc3VjY2Vzcy9mYWlsdXJlIHZhbHVlcyBmcm9tIGNhY2hlIGxvYWQgcm91dGluZS4KICAgIFByb2JsZW0gaWRlbnRpZmllZCBieSBYdWFuLgogCi0yMDA5LTEwLTI5IDE2OjA1ICBkdHMxMgorMjAwOS0xMC0zMCAwOTo1MSAgbWFnZnIKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwgICAKLSAgICAgIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sICAgCi0gICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgcGVybC9hZ2VudC9hZ2VudC5wbSwgICAKLSAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAgIAotICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIHNlZHNjcmlwdC5pbiwgICAKLSAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgsICAKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMy5wcmUxICkKKyAgIE5FV1M6IHNubXBsaWI6IFJldmVydCAxNzgwOCwgaW5zdGVhZCBmYWN0b3Igb3V0IHRoZSBkZWNsYXJhdGlvbgorICAgb2Ygb2lkIHRvIGl0J3Mgb3duIGZpbGUgYW5kIGluY2x1ZGUgdGhhdCBmaWxlIGZyb20gYm90aCB0eXBlcy5oCisgICBhbmQgYXNuMS5oCiAKLTIwMDktMTAtMjkgMTQ6MjQgIGR0czEyCisyMDA5LTEwLTMwIDA4OjI4ICBtYWdmcgogCi0gICAqIENIQU5HRVMsIE5FV1M6CisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pZi5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgCisgICAgICAgc25tcGxpYi9taWIuYywgc25tcGxpYi9vaWRfc3Rhc2guYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2RlYnVnLmMsIHNubXBsaWIvc25tcHVzbS5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkLCBzbm1wbmV0c3RhdDogQWRkIGNvcnJlY3Qgc2l6ZSBwcmVmaXhlcworICAgd2hlbiBwcmludGluZyB2YXJpYWJsZXMgb2YgdHlwZSBvaWQuCiAKLTIwMDktMTAtMjkgMTE6NDYgIGR0czEyCisyMDA5LTEwLTMwIDA4OjA3ICBtYWdmcgogCi0gICAqIENoYW5nZUxvZzoKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlIG9pZCB0byBiZSBhIDMyLWJpdCB0eXBlIG9uIElMUDY0IGFuZAorICAgTFA2NCBwbGF0Zm9ybXMuCiAKLTIwMDktMTAtMjkgMTA6MzAgIGR0czEyCisyMDA5LTEwLTMwIDA4OjA1ICBtYWdmcgogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oOgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgTkVXUzogc25tcGxpYjogUmVtb3ZlIHRoZSBvaWQgdHlwZWRlZiBmcm9tCisgICA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+LiBJdCBpcyBzdGlsbCBwcmVzZW50IGluCisgICA8bmV0LXNubXAvdHlwZXMuaD4sIHVzZSB0aGF0IGZpbGUuCiAKLTIwMDktMTAtMjkgMTA6MjggIGR0czEyCisyMDA5LTEwLTI4IDE2OjQ4ICBoYXJkYWtlcgogCi0gICAqIGRveHlnZW4uY29uZjoKKyAgICogYWdlbnQvc25tcF92YXJzLmM6CiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMy5wcmUxICkKKyAgIGRvbid0IHJlcXVpcmUgc3ViYWdlbnRfaW5pdCgpIGlmIG5vdCBvbmx5IGJ1aWxkaW5nIG1hc3RlciBhZ2VudAorICAgY29kZQogCi0yMDA5LTEwLTI5IDA5OjU1ICBkdHMxMgorMjAwOS0xMC0yNyAwNjo0NCAgbWFnZnIKIAotICAgKiBNYWtlZmlsZS50b3A6CisgICAqICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXRvLW9pZC5tMmksICAgCisgICAgICBsb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYsIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMucm93LmNvbmYsIGxvY2FsL21pYjJjLnNjYWxhci5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgQ0hBTkdFUzogbWliMmM6IFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0cyB0byB1X2NoYXIqCisKKzIwMDktMTAtMTQgMjM6MTIgIG1hZ2ZyCisKKyAgICogYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsIHNubXBsaWIvc2NhcGkuYzoKKworICAgQ0hBTkdFUzogYXBwcywgc25tcGxpYjogUEFUQ0g6IDI4MzU1Nzc6IGlkZW50aWZpZWQgYnkgIkJhcnQgVmFuCisgICBBc3NjaGUiOiBSZXBsYWNlIFNOTVBfWkVSTyBvZiBhcnJheXMgd2l0aCBhIG1lbXNldC4KKworMjAwOS0xMC0xMiAyMDoyOCAgbWFnZnIKKworICAgKiBzbm1wbGliL3BhcnNlLmM6CisKKyAgIExlc3NlbiB0aGUgc2NvcGUgb2YgdGhlIHJwIHZhcmlhYmxlIHRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBvbmUuCiAKIDIwMDktMTAtMDkgMTI6MzggIGpzYWZyYW5lawogCiAgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKIAotICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI4NzE3NDc6IHBsdWcgbWVtb3J5IGxlYWsgaW4gT0lEIHByb2Nlc3NpbmcuCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDoyODcxNzQ3OiBwbHVnIG1lbW9yeSBsZWFrIGluIE9JRAorICAgcHJvY2Vzc2luZy4KICAgIFRoZSBtZW1vcnkgbGVha2VkIHdoZW4gc21hbGwgT0lELCB3aGljaCBjb3VsZCBmaXQgcHJlLWFsbG9jYXRlZAogICAgdnAtPm5hbWVfbG9jLCB3YXMgcGxhY2VkIGluIGRpZmZlcmVudCAoYWxsb2NhdGVkKSBvbmUuCiAKQEAgLTM1NDYsNiArNDk0ODAsMTggQEAKICAgIENIQU5HRVM6IHNubXBsaWI6IENoYW5nZSB0aGUgcGFyc2luZyBvZiByYW5nZXMgdG8gYWNjZXB0IGFsbAogICAgdmFsaWQgdmFsdWVzLgogCisyMDA5LTEwLTA3IDIyOjI0ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogbWlzYzogUEFUQ0g6IDI4MzYxMTI6IFVzZSB0aGUgcmlnaHQgbW9kaWZpZXIgd2hlbgorICAgcHJpbnRpbmcgc2l6ZV90IGFuZCBzc2l6ZV90IHZhcmlhYmxlcy4KKwogMjAwOS0xMC0wNyAxMjo1MCAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmM6CkBAIC0zNTU2LDEyICs0OTUwMiwyMCBAQAogCiAyMDA5LTEwLTA1IDE5OjE5ICBtYWdmcgogCi0gICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oLCAgIAorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaCwgICAKICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXh0X3V0aWxzLmg6CiAKICAgIENIQU5HRVM6IHNubXBsaWI6IENvcnJlY3QgdGhlIHNwZWxsaW5nIG9mIF9fY3BsdXNwbHVzIHdoZW4KICAgIGNoZWNraW5nIGlmIHRoZSBmaWxlIHNob3VsZCBiZSB3cmFwcGVkIGluIGV4dGVybiAiQyIuCiAKKzIwMDktMTAtMDUgMDY6MTMgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wd2Fsay5jOgorCisgICBDSEFOR0VTOiBzbm1wd2FsazogSGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIGVuZCBvaWQgaXMgbG9uZ2VyCisgICB0aGFuIHRoZSBjdXJyZW50IG9pZCBjb3JyZWN0bHkKKwogMjAwOS0wOS0zMCAxMDoxMiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgpAQCAtMzU3MCwxOCArNDk1MjQsMzUxIEBACiAgICBpbmZvcm1hdGlvbiBjcmFzaGluZyB0aGUgYWdlbnQuCiAgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IElueWF2ZW4gU2FrYXJhaS4KIAorMjAwOS0wOS0yNyAxNDo1OSAgYWxleF9iCisKKyAgICogIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGwsICAgCisgICAgICB3aW4zMi9kaXN0L3NjcmlwdHMvbWFuZGlyMmh0bWw6CisKKyAgIFdpbjMyOiBCaW5hcnkgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFuZCBzY3JpcHQgdXBkYXRlcy4KKworMjAwOS0wOS0yNCAwMDowOCAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDA5LTA5LTIzIDIzOjU0ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAwOS0wOS0yMyAyMzo0MiAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKwogMjAwOS0wOS0yMyAyMzo0MCAgaGFyZGFrZXIKIAogICAgKiBGQVE6CiAKKyAgIHJlbW92ZSBTVk4gYnJhbmNoIHdvcmRpbmcKKworMjAwOS0wOS0yMyAyMzozNiAgaGFyZGFrZXIKKworICAgKiBGQVE6CisKICAgIHByb3BlciBwcm9qZWN0IGNhcGl0YWxpemF0aW9uCiAKKzIwMDktMDktMjMgMjM6MzUgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDktMjMgMjM6MzAgIGhhcmRha2VyCisKKyAgICogbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCiAyMDA5LTA5LTIyIDIxOjUxICB0YW5kZXJzCiAKICAgICogUkVBRE1FLnNvbGFyaXM6CiAKICAgIGZpeCB0eXBvcwogCisyMDA5LTA5LTE0IDIyOjQ5ICBoYXJkYWtlcgorCisgICAqIENIQU5HRVM6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMDktMDktMTQgMjI6NDggIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDA5LTA5LTE0IDIyOjM5ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA5LTE0IDIyOjM2ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCAgIAorICAgICAgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA5LTE0IDIyOjE4ICBoYXJkYWtlcgorCisgICAqIFJFQURNRS5haXgsIGFwcHMvc25tcG5ldHN0YXQvaWYuYywgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYWl4Lmg6CisKKyAgIFBhdGNoIGZyb20gbWFnZnIgZm9yIDUuNSBzcGVjaWZpYyBhaXggYnVpbGQgZml4ZXMKKworMjAwOS0wOS0wMiAwNzoxMiAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcmVuYW1lIE1JQiBtYWNybyB0byBORVRTTk1QX01JQjJfT0lELCBNSUIgaXMKKyAgIHRvbyBnZW5lcmljIGFuZCBtYXkgY29uZmxpY3Qgd2l0aCBhcHBsaWNhdGlvbnMuCisgICAKKyAgIFRoZSBvbGQgTUlCIG1hY3JvIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVubGVzcworICAgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMgaXMgZGVmaW5lZC4KKworMjAwOS0wOC0zMSAxOTozOCAgbmJhCisKKyAgICogbWlicy9yZmNsaXN0OgorCisgICBBZGRpdGlvbmFsIFJGQyBtaWJzCisKKzIwMDktMDgtMzEgMTk6MzcgIG5iYQorCisgICAqIG1pYnMvSUFOQWlmVHlwZS1NSUIudHh0OgorCisgICBJQU5BIGZpeGVkIGEgYnVnCisKKzIwMDktMDgtMjkgMDc6MjkgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBSZW1vdmUgdW5uZWVkZWQgY2FzdHMuCisKKzIwMDktMDgtMjkgMDc6MjggIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiByZXQgaXMgb25seSB1c2VkIGluIHNldHRhYmxlIHRhYmxlcyBzbyBvbmx5IGRlY2xhcmUgaXQKKyAgIHRoZW4uCisKKzIwMDktMDgtMjkgMDc6MjQgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBSZXBsYWNlIHRoZSBfb2lkX2xlbiB2YXJpYWJsZSB3aXRoIGFuIGV4cGxpY2l0IGNhbGwgb2YKKyAgIE9JRF9MRU5HVEguCisKKzIwMDktMDgtMjkgMDc6MjEgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBNYWtlIGV2ZXJ5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHN0YXRpYyBzdGF0aWMuIFJlbW92ZSB0aGUKKyAgIGRlY2xhcmF0aW9ucyBvZiB0aGUgc3RhdGljIGZ1bmN0aW9ucyBhbmQgdGhlIHByaXZhdGUgZGVmaW5lcyBmcm9tCisgICB0aGUgaGVhZGVyLgorCisyMDA5LTA4LTI5IDA3OjE5ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogUmVvcmRlciB0aGUgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBuZWVkIGZvcgorICAgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKzIwMDktMDgtMjkgMDc6MTYgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBuZXRzbm1wX3RhYmxlX3JlZ2lzdGVyIHNob3VsZCBiZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlCisgICBhbmQgdGFrZSBvbmx5IHR3byBhcmdtZW50cy4KKworMjAwOS0wOC0yOSAwNzoxNCAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IGJ1aWxkX29pZCBleHBlY3RzIGEgcG9pbnRlciB0byBhbGxvY2F0ZWQgb2lkLiBDaGFuZ2UgdG8KKyAgIHVzZSBidWlsZF9vaWRfbm9hbGxvYyBhbmQgcmVtb3ZlIG9uZSBjb3B5IG9mIHRoZSBpbmRpY2VzLgorCisyMDA5LTA4LTI5IDA3OjEwICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogVGhlcmUgaXMgbm8gaW5kZXhfb2lkX2xlbiBtZW1iZXIgaW4gc3RydWN0IGVudHJ5LiBVc2UgdGhlCisgICBpbnRlbmRlZCBsb2NhbCB2YXJpYWJsZSBpbmRleF9vaWRfbGVuLgorCisyMDA5LTA4LTI5IDA3OjA2ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogQ29ycmVjdCB0aGUgcmV0dXJuIHR5cGUgb2YgJHtpfV9nZXQqZW50cnkgdG8gbWF0Y2ggdGhlCisgICByZXR1cm5lZCB0eXBlLgorCisyMDA5LTA4LTI2IDIyOjM3ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgd2h3b29wczsgYmxldyB0aGUgY2hhbmdlbG9nIGZvciByYzIKKworMjAwOS0wOC0yNiAxNzozOCAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wOC0yNiAxNzoyOSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wOC0yNiAxNzoyOCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgdXBkYXRlZCBiYXNlZCBvbiBuZXcgU0YgdXBsb2FkIG1ldGhvZHM7IG5vIGxvbmdlciBhcyBhdXRvbWF0YWJsZQorCisyMDA5LTA4LTI2IDE3OjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCBmcm9tIEphbiB0byBlbmRsZXNzIGxvb3AgaW4gZGVmYXVsdCByb3V0ZXMKKyAgIG9uIGxpbnV4CisKKzIwMDktMDgtMjYgMTc6MjUgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg6CisKKyAgIGFwcGx5IHBhdGNoIGZyb20gSmFuIHRvIGZpeCBDKysgd3JhcHBlcgorCisyMDA5LTA4LTI2IDE0OjUzICBkdHMxMgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgSW5pdGlhbCBzdGFiIGF0IGEgbWluaW1hbC1oZWxwZXIgKHJhdykgdGFibGUgdGVtcGxhdGUsCisgICBsZWF2aW5nIG1vc3Qgb2YgdGhlIHdvcmsgdG8gdGhlIHVzZXItcHJvdmlkZWQgTUlCIGhhbmRsZXIuCisKIDIwMDktMDgtMjYgMTQ6NTAgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgpAQCAtMzU5MSw2ICs0OTg3OCwxMTMgQEAKICAgIGR1ZSB0byAxNS0vMzEtYml0IG1hc2tpbmcgd2hlbiBzZWxlY3RpbmcgcmVxdWVzdCBJRHMuIElkZW50aWZpZWQKICAgIGJ5IGtyb21lc2t5LgogCisyMDA5LTA4LTIwIDEzOjMwICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBsdWcgbGVha3MgaW4gaXBJZlN0YXRzVGFibGUsCisgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSwgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZAorICAgaXBEZWZhdWx0Um91dGVyVGFibGUuCisgICAKKyAgIEl0IHNlZW1zIHRvIG1lIHRoZSB0YWJsZXMgd2VyZSB3cm9uZ2x5IGdlbmVyYXRlZCB3aXRoCisgICBtMmNfZGF0YV9hbGxvY2F0ZSBvcgorICAgc29tZW9uZSBmb3Jnb3QgdG8gcmVsZWFzZSB0aGUgdXNlciBwcm92aWRlZCBkYXRhLgorCisyMDA5LTA4LTEyIDE1OjAwICB0YW5kZXJzCisKKyAgICogTkVXUzoKKworICAgZml4IGxpYnRvb2wgdmVyc2lvbiBpbiBORVdTCisKKzIwMDktMDgtMTEgMDA6NDIgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgQ2hhbmdlTG9nOgorCisgICB3aG9vcHM7IGFkZCByZWFsIGNoYW5nZWxvZyBlbnRlcmllcyBmb3IgLnJjMQorCisyMDA5LTA4LTEwIDIzOjEwICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBmaXggdHlwbyBpbiBzdm4yY2wgbGluZQorCisyMDA5LTA4LTEwIDIzOjA1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDA5LTA4LTEwIDIxOjMyICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA4LTEwIDIxOjIxICBoYXJkYWtlcgorCisgICAqICBkaXN0L21ha2VyZWxlYXNlLnhtbCwgbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsICAgCisgICAgICBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDgtMDcgMTA6MzIgIGR0czEyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgQ29ycmVjdCwgY29uc29saWRhdGUsIGNsYXJpZnkgYW5kIGNsZWFudXAgdGhlIGNhdGFsb2cgb2YgY3VycmVudAorICAgY2hhbmdlcy4KKworMjAwOS0wOC0wNiAwNzo1NyAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIEV4cGFuZCBvbiBleGVjIHZzIGV4dGVuZC4KKwogMjAwOS0wOC0wNSAyMDowNyAgZHRzMTIKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgICAKQEAgLTM2MDgsNiArNTAwMDIsMjIgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAyODIyMzM3OiBGaXggbWVtb3J5IGxlYWsgaW4KICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlCiAKKzIwMDktMDgtMDUgMTU6MTYgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYzoKKworICAgRml4IG1lbW9yeSBsZWFrIGluIE5ldFRvTWVkaWFUYWJsZS4KKyAgIFdoZW4gZGVsZXRpbmcgcm93IGNvbnRleHQsIGRlbGV0ZSBhbHNvIGFzc29jaWF0ZWQgZGF0YS4KKworMjAwOS0wOC0wNSAxNToxNSAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIEZpeCBtZW1vcnkgbGVhayBpbiBOZXRUb01lZGlhVGFibGUuCisgICBUaGUgY29udGFpbmVyIHVzZWQgdG8gdHJhY2sgZW50cmllcyB0byBkZWxldGUgZnJvbSBjYWNoZSBzaG91bGQKKyAgIGJlIHJlbGVhc2VkIHdoZW4gaXQncyBub3QgbmVlZGVkLgorCiAyMDA5LTA4LTA1IDE1OjEyICBqc2FmcmFuZWsKIAogICAgKiAKQEAgLTM2NDIsMzIgKzUwMDUyLDE5MiBAQAogICAgYXMgd2VsbCBhcyBhIGxhcmdlciBncm91cC4KICAgIEFsc28gYWRkcmVzc2VzIGJ1ZyAyMTUwMjg1CiAKKzIwMDktMDgtMDQgMjE6MTYgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBzbm1wbGliOiBmcm9tICJCYXJ0IHZhbiBBc3NjaGUgJiBNYWdudXMgRnJvbXJlaWRlIjogTW9yZSB1cGRhdGVzCisgICB0byBzdHJ0b3VsbC5jCisKIDIwMDktMDgtMDQgMTA6NTcgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IGZyb20gIk1hcmN1cyBS/GNrZXJ0IjogZml4IHBvc3NpYmxlIGNyYXNoIHdoZW4KKyAgIENIQU5HRVM6IHNubXBkOiBmcm9tICJNYXJjdXMgUueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMteeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTmnotrZXJ0IjogZml4IHBvc3NpYmxlIGNyYXNoIHdoZW4KICAgIDY0LWJpdCBjb3VudGVycyBpbiBpcFN5c3RlbVN0YXRzVGFibGUgZ2V0IGJpZ2dlciB0aGFuIDJeMzIKIAotMjAwOS0wNy0yNyAxMjoxMyAgaGFyZGFrZXIKKzIwMDktMDgtMDMgMTk6MjcgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyODI3NzIyOiBmcm9tICJCYXJ0IFZhbiBBc3NjaGUiOiBJbXByb3ZlCisgICBzdHJ0b3VsbCB0byBiZSBsZXNzIE1TVkMtc3BlY2lmaWMKKworMjAwOS0wOC0wMyAxODozOCAgbWFnZnIKKworICAgKiBtYW4vTWFrZWZpbGUuaW46CisKKyAgIHJlbW92ZSBhbiBvYnNvbGV0ZSBtYW51YWwgcGFnZSBmcm9tIHRoZSBzZXQgb2YgZmlsZXMgdGhhdCBzaG91bGQKKyAgIGJlIGluc3RhbGxlZAorCisyMDA5LTA3LTI3IDEyOjQxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAwOS0wNy0yNyAxMjoxMSAgaGFyZGFrZXIKIAogICAgKiBtYW4vbmV0c25tcF9Db250YWluZXJfaXRlcmF0b3IuMzoKIAotICAgcmVtb3ZlIG91dGRhdGUgY2FzZS1jb25mbGljdGluZyBtYW51YWwgcGFnZQorICAgcmVtb3ZlIGFuIG9ic29sZXRlIG1hbnVhbCBwYWdlCiAKLTIwMDktMDctMjcgMTI6MDYgIGhhcmRha2VyCisyMDA5LTA3LTI3IDEyOjAzICBoYXJkYWtlcgogCiAgICAqIHBlcmwvU05NUC90L2J1bGt3YWxrLnQ6CiAKICAgIENIQU5HRVM6IGZyZWVic2Q6IHBhdGNoIGZyb20gQ2V6YXJ5IE1vcmdhIHRvIGZpeCBhIG1ha2UgdGVzdCBvbgogICAgZnJlZWJzZAogCisyMDA5LTA3LTI3IDEyOjAyICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA3LTI3IDExOjUyICBoYXJkYWtlcgorCisgICAqICBGQVEsIE5FV1MsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA3LTI3IDA4OjM5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXg6CisKKyAgIHJldmVydCBhY2NpZGVudGlhbGx5IGFwcGxpZWQgcGF0Y2gKKworMjAwOS0wNy0yNyAwODozNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMzUwdW5peCwgdGVzdGluZy90ZXN0cy9UMzYwZHRsc3VkcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QuY2VydCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QucHJpdiwgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIuY2VydCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLnByaXY6CisKKyAgIGFkZGVkIGEgdGVzdCBjYXNlIGZvciB1ZHAvZHRscworCisyMDA5LTA3LTI3IDA4OjM2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgZG9uJ3QgcmVxdWlyZSBhIHNlc3Npb24gdG8gY2FycnkgYSBzZWNOYW1lCisKKzIwMDktMDctMjYgMjE6MzQgIGFsZXhfYgorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBXaW4zMjogTVNWQyA2IGNvbXBpbGUgZml4ZXMgZm9yIFdvcmtzcGFjZSBidWlsZC4KKworMjAwOS0wNy0yNiAxODoyMCAgYWxleF9iCisKKyAgICogIFJFQURNRS53aW4zMiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zdHJ0b3VsbC5jLCAgIAorICAgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkuYmF0LCB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbCwgICAKKyAgICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaSwgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICAtQWRkZWQgc3RydG91bGwgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyZSBjaGVjayBmb3Igc3lzdGVtcyB3aXRob3V0CisgICBpdCBzdWNoIGFzIFdpbjMyIE1TVkMgNgorICAgLVdpbjMyOiBNU1ZDIDYgY29tcGlsZSBmaXhlcyAtIHJlcXVpcmVzIG5ldyBzdHJ0b3VsbC5jIGZpbGUKKyAgIC1XaW4zMjogTmV3IGJ1aWxkLWJpbmFyeSBzY3JpcHQgdG8gc2ltcGxpZnkgYnVpbGRpbmcgdGhlIFdpbmRvd3MKKyAgIGJpbmFyeSBwYWNrYWdlLgorCisyMDA5LTA3LTI1IDA1OjMxICBtYWdmcgorCisgICAqIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0OgorCisgICBNYWtlIHN1cmUgYSBtZXNzYWdlIGlzIHdyaXR0ZW4gaWYgdGhlIHJlbGV2YW50IHRhYmxlIGlzIG1pc3NpbmcuCisKIDIwMDktMDctMjMgMjE6MjkgIGFsZXhfYgogCiAgICAqIFJFQURNRToKIAogICAgVXBkYXRlIGVtYWlsIGFkZHJlc3MgaW4gUkVBRE1FLgogCisyMDA5LTA3LTIzIDAxOjA3ICBhbGV4X2IKKworICAgKiAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwOgorCisgICBXaW4zMiBNU1ZDIDIwMDgrIGZpeGVzLgorCisyMDA5LTA3LTIzIDAwOjU1ICBhbGV4X2IKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3A6CisKKyAgIFdpbjMyIE1TVkMgMjAwNSsgYnVpbGQgZml4ZXMuIFRoYW5rcyB0byBCYXJ0IFZhbiBBc3NjaGUuCisKKzIwMDktMDctMjEgMTI6MjIgIGR0czEyCisKKyAgICogIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mLCBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCBsb2NhbC9taWIyYy5yb3cuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgQWRkIHNpbXBsZSBkZWJ1ZyBvdXRwdXQgdG8gbWliMmMgdGVtcGxhdGVzLgorCiAyMDA5LTA3LTIxIDEyOjEzICBkdHMxMgogCiAgICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKQEAgLTM2ODYsMTIgKzUwMjU2LDUyIEBACiAKICAgIFVwZGF0ZXMgdG8gQ09ESU5HIHNlY3Rpb24uCiAKKzIwMDktMDctMjAgMTE6MDkgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIuaDoKKworICAgQWRkIG1pc3NpbmcgaGVhZGVyIGZpbGUgZnJvbSBwYXRjaCAjMjA1MzI3My4KKwogMjAwOS0wNy0xOSAxNTowOSAgZHRzMTIKIAogICAgKiBGQVE6CiAKICAgIFVwZGF0ZXMgdG8gQ09NUElMSU5HIHNlY3Rpb24uCiAKKzIwMDktMDctMTYgMTI6MzggIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jOgorCisgICBBZGQgSVB2NiBvY3RldCBjb3VudGVycy4KKyAgIE5ldyBMaW51eCBrZXJuZWxzIChlLmcuIDIuNi4zMS1yYzIsIG1heWJlIHNvbWUgZWFybGllcikgcHJvdmlkZQorICAgY291bnRlcnMgZm9yCisgICBpbmNvbWluZy9vdXRnb2luZyBJUHY2IHRyYWZmaWMgZm9yIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQKKyAgIGlwSWZTdGF0c1RhYmxlLgorCisyMDA5LTA3LTE1IDIyOjQ2ICB0YW5kZXJzCisKKyAgICogdGVzdGluZy90ZXN0cy9UMzUwdW5peDoKKworICAgcHV0IHRlbXBvcmFyeSBkYXRhIHRvIHdoZXJlIHRoZXkgYmVsb25nCisKKzIwMDktMDctMTEgMjE6NTAgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmU6CisKKyAgIHJlZ2VuZXJhdGUgY29uZmlndXJlCisKKzIwMDktMDctMTEgMjE6MDQgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgYnVpbGQgZml4IChlLmcuIGZvciBGcmVlQlNEKTogYWRqdXN0IGt2bSBjb25maWd1cmUgdGVzdHMKKworMjAwOS0wNy0xMCAxMjozNSAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDaGVjayBJUHY2IHBvcnQgcmFuZ2VzIGluIHRoZSBzYW1lIHdheSBhcyBJUHY0IHBvcnRzIGFyZSBjaGVja2VkLgorCiAyMDA5LTA3LTEwIDA3OjQ2ICBqc2FmcmFuZWsKIAogICAgKiAKQEAgLTM3MDIsNiArNTAzMTIsNDMgQEAKICAgIEFsc28gZml4IHRoZSBkZWZhdWx0IHR5cGUgZm9eQ0FTTl9JUEFERFJFU1MgaW4gbWliMmMsIHNvIHRoZQogICAgaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYyBjYW4gYmUgc2FmZWx5IHJlZ2VuZXJhdGVkLgogCisyMDA5LTA3LTA5IDIzOjQyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHAsIHRlc3RpbmcvdGVzdHMvVDMxMHRjcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMyMHVkcHY2LCB0ZXN0aW5nL3Rlc3RzL1QzMzB0Y3B2NiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXg6CisKKyAgIGNsZWFudXAgb2YgdGVzdGluZyBjYXNlcyB0byByZW1vdmUgZG91YmxlIGluY2x1ZGUgYW5kIGRvdWJsZQorICAgZXhwb3J0cworCisyMDA5LTA3LTA5IDIzOjA3ICB0YW5kZXJzCisKKyAgICogdGVzdGluZy90ZXN0cy9UMzAwdWRwOgorCisgICBiZSBjb25zaXN0ZW50IHdpdGggdGhlIFRDUC9JUHY0IHRlc3QKKworMjAwOS0wNy0wOSAyMjoxOCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy90ZXN0cy9TdHJhbnNwb3J0LCB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMTB0Y3AsIHRlc3RpbmcvdGVzdHMvVDMyMHVkcHY2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzMwdGNwdjYsIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXgsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzOTlhbGlhczoKKworICAgbmV3IHRlc3RzIGZvciB0ZXN0aW5nIGRlZmluZWQgdHJhbnNwb3J0cworCisyMDA5LTA3LTA5IDIyOjE3ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvVEVTVENPTkYuc2gsIHRlc3RpbmcvZXZhbF90b29scy5zaDoKKworICAgYSBDT05GSUdBUFAgbWFjcm8gZm9yIGFkZGluZyBzdHVmZiB0byBzbm1wLmNvbmYKKworMjAwOS0wNy0wOCAxNToxMiAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIEZpeCBnZXRob3N0YnlhZGRyIHBhcmFtZXRlciwgbmV0c25tcF91ZHBfZm10YWRkciBuZXZlciByZXR1cm5lZCBhCisgICBob3N0bmFtZS4KKwogMjAwOS0wNy0wNyAxNTo0NiAganNhZnJhbmVrCiAKICAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmMsICAgCkBAIC0zNzE5LDIzICs1MDM2NiwxMzY4MiBAQAogICAgcHJvY2Vzc2luZyAtIHVfbG9uZyBjYW4gbWFrZSBwcm9ibGVtcyBvbiBiaW4gZW5kaWFuIDY0IGJpdAogICAgc3lzdGVtcwogCi0yMDA5LTA2LTE2IDE1OjE5ICByc3RvcnkKKzIwMDktMDYtMjkgMTM6NTIgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUzoKKworICAgcmVtb3ZlIGVudHJ5IGZvciBhIHBhdGNoIHRoYXQgZ290IHJldmVydGVkCisKKzIwMDktMDYtMjUgMTU6MjQgIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBNb3ZlIG5vbi1jb3JlIGRhdGEgdHlwZXMgaW50byBhIHNlcGFyYXRlIChsaWJyYXJ5IGludGVybmFscykKKyAgIGhlYWRlciBmaWxlLgorICAgTW92ZSB0aGUgbGFyZ2VfZmRfc2V0IGRhdGEgc3RydWN0dXJlIGludG8gdGhpcyBoZWFkZXIgZmlsZS4KKworMjAwOS0wNi0xOCAyMjoyOSAgdGFuZGVycworCisgICAqIGFnZW50L3NubXBfcGVybC5jOgorCisgICBDSEFOR0VTOiBidWlsZDogYWxsb3cgYnVpbGRpbmcgd2l0aCBQZXJsIHZlcnNpb25zIHRoYXQgbGFjaworICAgUEVSTF9FWElUX0RFU1RSVUNUX0VORAorCisyMDA5LTA2LTE4IDIyOjEzICB0YW5kZXJzCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9pZi5jOgorCisgICBDSEFOR0VTOiBidWlsZDogYnVpbGQgZml4IGZvciBUcnU2NCBVbml4IGFuZCBJUklYOiBtb3ZlIF9YT1BFTioKKyAgIGRlZmluaXRpb25zIHRvIHdoZXJlIHRoZXkgYXJlIGluIDUuNC54IGFuZCBlYXJsaWVyCisKKzIwMDktMDYtMTggMDY6MDIgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENsZWFuIHVwIC0td2l0aC1ubCBjb25maWd1cmF0aW9uCisgICAqICBNb3ZlIHRoZSBfQVJHX1dJVEggdG8gY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUgIDIwMDktMDYtMTYgMTU6MTcKKyAgICAgICByc3RvcnkKKwogCiAgICAqIHNubXBsaWIvY29udGFpbmVyLmM6CiAKICAgIGNoZWNrIGZvciBudWxsIHBvaW50ZXIgYmVmb3JlIGRlcmVmCiAKKzIwMDktMDYtMTUgMjM6NTIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgYWRkIGNvbW1lbnQgZXhwbGFpbmluZyBub3QgcXVpdGUgb2J2aW91cyBsYWNrIG9mIG1lbW1vdmUKKworMjAwOS0wNi0xNSAxOTozMiAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIFJlbW92ZSAjaWYgMCBjb21tZW50ZWQgY29kZQorCiAyMDA5LTA2LTE1IDE1OjI1ICBkdHMxMgogCiAgICAqIEZBUToKIAogICAgVXBkYXRlcyB0byBBR0VOVCBzZWN0aW9uLgogCi0yMDA5LTA2LTE0IDIyOjAxICB0YW5kZXJzCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgogCi0gICBwb3J0YWJpbGl0eSBmaXggKHN5bmMgd2l0aCA1LjUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjYucmMxIC0+IFY1LjYucmMyCisKKzIwMTAtMDktMDQgMDE6NTcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA5LTA0IDAwOjU5ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA5LTAzIDIyOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCB0bHN0Y3AgcGFyc2luZyBvZiBob3N0IG5hbWVzLgorCisyMDEwLTA5LTAzIDIyOjEzICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jOgorCisgICBjaGVjayB0aGUgcmV0dXJuIGNvZGUgb2YgZmdldHMgYW5kIGZvcGVuIGJlZm9yZSBpbnNlcnRpbmcgdGhlCisgICByZXN1bHRzLgorCisyMDEwLTA5LTAzIDIyOjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBQYXRjaCBmcm9tIHRhbmRlcnMgdG8gZml4IGJyb2tlbiBhbGFybXMgYWZ0ZXIgdGhlIHByZXZpb3VzCisgICByZS1lbnRyYW50IHBhdGNoCisKKzIwMTAtMDktMDMgMjI6MDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHBhdGNoIDMwNTg2NDU6IGZyb20gam9yaXNlc2F0dXJudXM6IG1vZGlmaWVkCisgICB2ZXJzaW9uIG9mIHRoZSBwYXRjaCB0byB1c2UgTVNHX0RPTlRXQUlUIGZvciB0aGUgdW5peCBkb21haW4KKyAgIHNvY2tldAorCisyMDEwLTA5LTAzIDIxOjU2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzA1ODE0MDogZnJvbSB0YWtldm9zOiBjaGVjayB0aGF0IGlub2RlIGlzCisgICBub24temVybworCisyMDEwLTA5LTAzIDIxOjUwICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzA1MzQyODogZnJvbSB0YWtldm9zOiBmaXgKKyAgIGdldF9waWRfZnJvbV9pbm9kZSB3aGVuIHRoZSBpbm9kZSBpcyBub3QgZm91bmQuCisKKzIwMTAtMDktMDMgMjA6MjAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZW1vdmUgdGhlIGR1cGxpY2F0ZSByZXR1cm4gYmVmb3JlIHRoZSBlcnJvciBjb2RlcyBnZXQgc2V0LgorCisyMDEwLTA5LTAxIDE4OjA0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IExvZyBiZWZvcmUgcmV0dXJuaW5nLgorCisyMDEwLTA5LTAxIDAyOjQzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBUTFMgc2VuZF9ub3RpZnkgb24gY2xvc3VyZSBhbmQgc29tZSBtZW1vcnkgY2xlYW4tdXAgcGF0Y2hlcworCisyMDEwLTA4LTMxIDE3OjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgT25seSBwcmludCB0aGUgc2VjdXJpdHkvY29udGV4dCBFbmdpbmVJRCBtaXNtYXRjaCBub3RlIHVuZGVyIFVTTQorCisyMDEwLTA4LTI1IDE1OjEzICByc3RvcnkKKworICAgKiBDSEFOR0VTOgorCisgICByZW1vdmUgcmVmZXJlbmNlIHRvIHJldmVydGVkIHBhdGNoIDMwNDI3NjUKKworMjAxMC0wOC0yNSAxNToxMyAgcnN0b3J5CisKKyAgICogYWNjb25maWcuaDoKKworICAgYWRkIG5vdGUgb24gd2hlcmUgdG8gZmluZCBjb250ZW50IHVzZWQgdG8gZ2VuZXJhdGUKKyAgIG5ldC1zbm1wLWNvbmZpZy5oLmluCisKKzIwMTAtMDgtMjUgMDI6NDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgcmV2ZXJ0IHIxOTM0MiwgcGF0Y2ggMzA0Mjc2NSwgd2hpY2ggYnJva2UgY2xpZW50IHRjcCBkaXNjb25uZWN0CisgICBoYW5kbGluZworCisyMDEwLTA4LTI1IDAyOjQ1ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBmaXggbW9yZSBjb2RlIGJyb2tlbiBieSAnY29tcGlsZXIgd2FybmluZyBmaXgnIGluIHIxOTE3OQorCisyMDEwLTA4LTI1IDAyOjQ1ICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzOgorCisgICBjaGVjayBmb3IgY29uZiBlcnJvcnMgYWZ0ZXIgYWdlbnQgc3RhcnR1cDsgZW5hYmxlIGxvZ1RpbWVzdGFtcDsKKyAgIG1ha2Ugc3VyZQorICAgYWxsIGNlcnQgbmFtZS90YWdzIGFyZSB1bmlxdWUKKworMjAxMC0wOC0yNCAyMTowNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZml4IGVycm9yIHN0cmluZyB0byBkaXNjdXNzIHRoZSByaWdodCBmYWlsZWQgb3BlbnNzbCBuZXcKKyAgIGludm9jYXRpb24KKworMjAxMC0wOC0yNCAwNTozNyAgbWFnZnIKKworICAgKiBhcHBzL3NubXB1c20uYzoKKworICAgQ0hBTkdFUzogc25tcHVzbTogQ29ycmVjdCBpZmRlZnMsIHJlbW92ZSBkZWFkIHZhcmlhYmxlcy4KKworCQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS42LnByZTMgLT4gVjUuNi5yYzEKKworMjAxMC0wOC0xOSAyMToxMSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wOC0xOSAyMToxMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9udG8tcW54Ni5oOgorCisgICAvLyAtPiBDIGNvbW1lbnRzCisKKzIwMTAtMDgtMTkgMjA6MzYgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDgtMTkgMjA6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSCAzMDQyNzY1OiBmcm9tIG1laGFmOiBtYWtlCisgICBzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiKCkgcmUtZW50cmFudAorCisyMDEwLTA4LTE5IDIwOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICB0dXJuIG9mZiBjb29raWUgZXhjaGFuZ2VzIHVudGlsIGEgY29tcGxldGUgY29kZSBzZXQgY2FuIGJlCisgICB3cml0dGVuIHRvIHN1cHBvcnQgaXQgYmFzZWQgb24gdGhlIHJlcXVpcmVkIGZ1bmN0aW9uIGNhbGxiYWNrcworCisyMDEwLTA4LTE3IDE4OjMxICByc3RvcnkKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBhZGQgbWlzc2luZyBjYWxsIHRvIHN0b3JlIHBlcnNpc3RlbnQgZGF0YSBhcyBuZWVkZWQKKworMjAxMC0wOC0xNyAxODozMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogd2hlbiBkaXNwbGF5aW5nIGEgYnl0ZSBhcyBzaW5nbGUgZGlnaXQgaGV4CisgICB2YWx1ZSwgZGVmYXVsdCB0bworICAgcHJlZml4aW5nIHdpdGggMCB1bmxlc3MgdGhlcmUgaXMgYSBzZXBlcmF0b3Igb3IgYWRkaXRpb24gaGludAorICAgZGF0YQorCisyMDEwLTA4LTE3IDEwOjMxICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcHVzbS5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgYW4gdW51c2VkIGxhYmVsIHRoYXQgd2FzIHRyaWdnZXJlZAorICAgd2hlbgorICAgY29tcGlsaW5nIHdpdGhvdXQgU1NMIHN1cHBvcnQuCisKKzIwMTAtMDgtMTYgMjM6MTEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMjc5MDI0OTogZnJvbSB3aWxscHdpbGxwOiByZWR1Y2UgY2FjaGUgdGltZQorICAgZm9yIHRoZSBpZnRhYmxlIHRvIDNzZWNvbmRzIHRvIGluY3JlYXNlIGFjY3VyYWN5CisKKzIwMTAtMDgtMTYgMTY6MjYgIGhhcmRha2VyCisKKyAgICogcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBwYXRjaCAzMDQ2MzcxOiBmcm9tIGNocmlzdG9waGI0OiBGaXggbWVtb3J5IGxlYWsKKyAgIGluIFNOTVB2MSB0cmFwIGhhbmRsaW5nLgorCisyMDEwLTA4LTE2IDE2OjAzICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMjgyNTY1MzogZnJvbSBicnU1Y2U6IGZpeCBzZW5kbWFpbC5jZgorICAgcGFyc2luZyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMKKworMjAxMC0wOC0xNiAxMDoxNiAgZHRzMTIKKworICAgKiBtYW4vTWFrZWZpbGUuaW46CisKKyAgIEJ1aWxkIG5ldHNubXBfYWdlbnRfYXBpLjMgbWFuIHBhZ2UgZnJvbSB0ZW1wbGF0ZQorCisyMDEwLTA4LTE2IDA5OjIwICBkdHMxMgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkxMTM2MTogRG9jdW1lbnRhdGlvbiAoUHJvdmlkZWQgYnkgVG9tYXN6CisgICBMaXMpCisKKzIwMTAtMDgtMTYgMDg6MDYgIGR0czEyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTExMzYxOiBSZS1vcmRlciBjb2RlIHRvIGdyb3VwIHJlbGF0ZWQKKyAgIGZ1bmN0aW9ucyB0b2dldGhlcgorCisyMDEwLTA4LTE2IDA3OjQyICBkdHMxMgorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjk5NTA5ODogRml4IGNyZWF0aW9uIG9mIFNOTVB2MyBzZXNzaW9ucworICAgd2l0aCBBUElfU0lOR0xFCisKKzIwMTAtMDgtMTQgMTY6MzAgIGR0czEyCisKKyAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTExMzYxOiBSZW1vdmUgcmVkdW5kYW50IHZhcmlhYmxlcworCisyMDEwLTA4LTE0IDE2OjIzICBkdHMxMgorCisgICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTA0OTAwOiBEb2N1bWVudGF0aW9uIHBsdXMgYXNzb3J0ZWQKKyAgIGhhbmRsZXIgY29kZSBmaXhlcworCisyMDEwLTA4LTE0IDA5OjI4ICBkdHMxMgorCisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL3NubXBfYWxhcm0uMy5kZWY6CisKKyAgIFJlc3RvcmUgYWdlbnQgQVBJIG1hbiBwYWdlCisgICBEb24ndCB0cnkgdG8gZXh0cmFjdCBtdWx0aXBsZSBtYW4gcGFnZSBsaW5rcyBwZXIgbGluZQorICAgKHdoaWNoIHJ1bnMgaW50byBwcm9ibGVtcyB3aXRoIE9TLXNwZWNpZmljIGxpbmUgZW5kaW5ncykuCisgICBJbnN0ZWFkLCBlbnN1cmUgdGhlIG1hbiBwYWdlIE5BTUUgc2VjdGlvbiBsaXN0cyBvbmUKKyAgIHJvdXRpbmUgcGVyIGxpbmUKKworMjAxMC0wOC0xMyAyMzo1MCAgaGFyZGFrZXIKKworICAgKiBtYW4vTWFrZWZpbGUuaW46CisKKyAgIGZpeCBicm9rZW4gTWFrZWZpbGUgYWZ0ZXIgbWFuIHBhZ2UgbW92ZXMKKworMjAxMC0wOC0xMyAyMzo1MCAgaGFyZGFrZXIKKworICAgKiBtaWJzL1NOTVAtVExTLVRNLU1JQi50eHQsIG1pYnMvcmZjbGlzdDoKKworICAgdXBkYXRlZCBUTFMgTUlCIHRvIGN1cnJlbnQgY29weQorCisyMDEwLTA4LTEzIDIzOjUwICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgcmVwbGFjZWQgUkZDIGNvbW1lbnQgbnVtYmVyCisKKzIwMTAtMDgtMTMgMjM6NTAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaCwgc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHBhdGNoOiAzMDQyNzcwOiBmcm9tIG1laGFmOiBNYWRlIHJ1bl9hbGFybXMoKQorICAgcmVlbnRyYW50CisKKzIwMTAtMDgtMTMgMjM6NDQgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMwNDQ1MTI6IGZyb20gcGhpbHdlYnN0ZXI6IGZpeCBzeXNvYmplY3RpZAorICAgZGlyZWN0aXZlLgorCisyMDEwLTA4LTEzIDE5OjAwICByc3RvcnkKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeDoKKworICAgdXNlIDEyNy4wLjAuMSBpbnN0ZWFkIG9mIGxvY2FsaG9zdCBhcyBkZWZhdWx0IFNOTVBfVEVTVF9ERVNUIHNvCisgICBUTFMgdGVzdHMgd29yaworCisyMDEwLTA4LTEzIDE4OjUwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogaW1wbGVtZW50ZWQgYSBmaXggZm9yIHRoZSBpc3N1ZSByZXBvcnRlZCBpbgorICAgcGF0Y2ggIzMwNDI3NzAuIENyZWF0ZWQgYSBzbm1wX3NlbGVjdF9pbmZvX2ZsYWdzIGZ1bmN0aW9uLCBhbmQKKyAgIHNpbWlsYXIsIHRoYXQgYWxsb3cgZm9yIGFsYXJtcyB0byBub3QgYmUgcnVuLiBUaGlzIGlzIHRoZW4gdXNlZAorICAgaW4gdGhlIHN5bmNoX3Jlc3BvbnNlIGZ1bmN0aW9ucyB0byBhdm9pZCAxMDAlIENQVSBsb29wcworCisyMDEwLTA4LTEzIDE4OjUwICBoYXJkYWtlcgorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsCisgICAgICAgICBhcHBzL3NubXB0cmFwZC5jOgorCisgICBtYWtlIHNubXB0cmFwZCByZWdpc3RlciB0aGUgY2VydHRvc2VjbmFtZSB0YWJsZSBpbiB0aGUgYWdlbnR4CisgICByZWdpc3RyYXRpb25zCisKKzIwMTAtMDgtMTMgMTg6NDkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWliMmMuY29uZjoKKworICAgbWlub3Igd29yZGluZyBhZGRpdGlvbnMKKworMjAxMC0wOC0xMyAxNTowNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9haXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jOgorCisgICBDSEFOR0VTOiBhaXg6IFBBVENIOiAyODg2NTk4OiBmcm9tIGV4c25hZnU6IEhlYWRlciBmaXhlcyBmb3IKKyAgIGNvbXBpbGluZyBvbiBBSVg2CisKKzIwMTAtMDgtMTMgMTU6MDQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgICAKKyAgICAgIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9udG8tcW54Ni5oOgorCisgICBORVdTOiBwb3J0czogUEFUQ0g6IDI4MzY4OTU6IGZyb20gc2VhbmJvdWRyZWF1OiBzdXBwb3J0IGZvciBRTlg2CisKKzIwMTAtMDgtMTMgMTQ6MzMgIGR0czEyCisKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWY6CisKKyAgICdlbmZvcmNlIG5ldHNubXAgcHJlZml4ZXMKKworMjAxMC0wOC0xMyAxNDoyOSAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZiwgbWFuL3ZhcmJpbmRfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjkgIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYsIG1hbi9zbm1wX3RyYXBfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjggIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjggIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmLCBtYW4vc25tcF9hZ2VudF9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyOCAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL3Nlc3Npb25fYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjcgIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZiwgbWFuL3BkdV9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyNyAgZHRzMTIKKworICAgKiBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI3ICBkdHMxMgorCisgICAqIG1hbi9jb25maWdfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjAgIGR0czEyCisKKyAgICogTWFrZWZpbGUuaW4sIGRveHlnZW4uY29uZjoKKworICAgRG9uJ3QgYXV0b21hdGljYWxseSBnZW5lcmF0ZSBtYW4gcGFnZXMKKworMjAxMC0wOC0xMyAxNDoxOCAgZHRzMTIKKworICAgKiAgbWFuL3NubXBfYXBpX2VycnN0cmluZy4zLCBtYW4vc25tcF9jbG9zZS4zLCBtYW4vc25tcF9lcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfZnJlZV9wZHUuMywgbWFuL3NubXBfb3Blbi4zLCBtYW4vc25tcF9wZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX3JlYWQuMywgbWFuL3NubXBfc2VsZWN0X2luZm8uMywgbWFuL3NubXBfc2VuZC4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19hc3luY19zZW5kLjMsIG1hbi9zbm1wX3Nlc3NfY2xvc2UuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfZXJyb3IuMywgbWFuL3NubXBfc2Vzc19pbml0LjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX29wZW4uMywgbWFuL3NubXBfc2Vzc19wZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfcmVhZC4zLCBtYW4vc25tcF9zZXNzX3NlbGVjdF9pbmZvLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX3NlbmQuMywgbWFuL3NubXBfc2Vzc19zZXNzaW9uLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX3RpbWVvdXQuMywgbWFuL3NubXBfc2V0X21pYl93YXJuaW5ncy4zLCAgIAorICAgICAgbWFuL3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMsIG1hbi9zbm1wX3RpbWVvdXQuMzoKKworICAgUmVtb3ZlIHJlZHVuZGFudCBtYW4gcGFnZSBsaW5rcworICAgKFNob3VsZCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgYnV0IGRvbid0IGV4aXN0IGFueSBtb3JlCisgICBhbnl3YXkpCisKKzIwMTAtMDgtMTMgMTQ6MTMgIGR0czEyCisKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL2FkZF9taWJkaXIuMywgbWFuL2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQuMywgIAorICAgICAgIG1hbi9nZXRfbW9kdWxlX25vZGUuMywgbWFuL2luaXRfbWliLjMsIG1hbi9pbml0X21pYl9pbnRlcm5hbHMuMywgCisgICAgICAgIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMywgbWFuL25ldHNubXBfaGFuZGxlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9sZWFmLjMsIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc2V0X2RhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKKyAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zLCBtYW4vcHJpbnRfZGVzY3JpcHRpb24uMywgbWFuL3ByaW50X21pYi4zLCAgCisgICAgICAgbWFuL3ByaW50X29iamlkLjMsIG1hbi9wcmludF92YWx1ZS4zLCBtYW4vcHJpbnRfdmFyaWFibGUuMywgICAKKyAgICAgIG1hbi9yZWFkX2FsbF9taWJzLjMsIG1hbi9yZWFkX21pYi4zLCBtYW4vcmVhZF9tb2R1bGUuMywgICAKKyAgICAgIG1hbi9yZWFkX21vZHVsZV9ub2RlLjMsIG1hbi9yZWFkX29iamlkLjMsIG1hbi9zaHV0ZG93bl9taWIuMzoKKworICAgUmVtb3ZlIERveHlnZW4tZ2VuZXJhdGVkIG1hbiBwYWdlcywgYW5kIHRob3NlIGxpbmtpbmcKKyAgIGluZGl2aWR1YWwgcm91dGluZXMgdG8gdGhlIGFwcHJvcHJpYXRlIG1hbiBwYWdlLgorICAgKFRoZXNlIGFyZSBiZXR0ZXIgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5KQorCisyMDEwLTA4LTEzIDEyOjE5ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBQcm9tcHQgZm9yIHdoZXRoZXIgdG8gZ2VuZXJhdGUgY2FjaGluZyBjb2RlIG9yIG5vdC4KKworMjAxMC0wOC0xMyAxMjoxOSAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy5jb25mOgorCisgICBSZXdvcmsgZ3VpZGFuY2UgcXVlc3Rpb25zIHdoZW4gc2VsZWN0aW5nIHRoZSBiZXN0IHRhYmxlIGZyYW1ld29yaworICAgdG8gdXNlLgorICAgRW5zdXJlIHRhYmxlIGhhbmRsaW5nIGNvZGUgZG9lc24ndCBvdmVyd3JpdGUgc2NhbGFyIGhhbmRsaW5nCisgICBjb2RlLgorICAgQ2hlY2sgdGhhdCB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgc3VpdGFibGUgZm9yIE1mRCBmcmFtZXdvcmsuCisKKzIwMTAtMDgtMTIgMTU6NDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGZpeCBjb2RlIGJyb2tlbiBieSAnY29tcGlsZXIgd2FybmluZyBmaXgnIGluIHIxOTE3OQorCisyMDEwLTA4LTEyIDE1OjM5ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmg6CisKKyAgIGZpeCB0eXBvIGluIGNvbW1lbnQKKworMjAxMC0wOC0xMSAyMjowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIGEgZHVwbGljYXRlIHZhbHVlIGNoZWNrCisKKzIwMTAtMDgtMTEgMjI6MDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VyczoKKworICAgYWRkIGEgdGVzdCB3aGVyZSB3ZSBjYW4gdHJ1c3QgYSBDQS1zaWduZWQgY2VydCBhbmQgd2UgZG9uJ3QgdHJ1c3QKKyAgIHRoZSBDQQorCisyMDEwLTA4LTExIDIyOjA4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnM6CisKKyAgIHRlc3QgYSBkaXJlY3RseSBtYXBwZWQgQ0EgY2VydGlmaWNhdGUKKworMjAxMC0wOC0xMSAyMjowOCAgaGFyZGFrZXIKKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisKKyAgIGNoYW5nZSB0aGUgbGFDb25maWcgdG8gcmVhZC13cml0ZSB0byBtYXRjaCB0aGUgcGF0Y2gKKworMjAxMC0wOC0xMSAyMjowNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmM6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMjkzMTQ0NjogZnJvbSBhaG1ha2U6IG1ha2UgdGhlIGxvYWQgYXZlcmFnZXMKKyAgIHdyaXRhYmxlLgorCisyMDEwLTA4LTExIDA2OjQzICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jOgorCisgICBDSEFOR0VTOiBTaWxlbmNlIHNvbWUgY29tcGlsYXRpb24gd2FybmluZ3MgZnJvbSB0ZXN0IGNhc2VzLgorCisyMDEwLTA4LTA5IDIxOjA5ICBtYWdmcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBDSEFOR0VTOiBIYW5kbGUgZW1iZWRkZWQgJSdzIGluIHRoZSByZXN1bHQgbWVzc2FnZS4KKworMjAxMC0wOC0wOSAyMTowNyAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgQ0hBTkdFUzogRG8gbm8gZG91YmxlIGRlY2xhcmUgdGhlIGluZGV4IHZhbHVlcy4KKworMjAxMC0wOC0wNSAxMTo0OSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzoKKworICAgVXBkYXRlICJhdXRoKiIgdXNhZ2UgbWVzc2FnZSB3aXRoIGNvbnRleHQgc3VwcG9ydAorCisyMDEwLTA4LTAyIDIwOjA4ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYzoKKworICAgRml4IHR3byBzaWxseSBtaXN0YWtlcy4KKworMjAxMC0wOC0wMiAxNDoxOCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmM6CisKKyAgIEFJWCBmaWxlc3lzdGVtIHR5cGVzIGFyZSB0YWdnZWQgYXMgaW50ZWdlcnMsIG5vdCBzdHJpbmdzLgorCisyMDEwLTA4LTAyIDEzOjQ5ICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIGZpeCBQZXJsIHN5c3RlbSgpIGNvbmZpZ3VyZSBjaGVjayB0byB3b3JrIHJlbGlhYmx5IG9uIHN5c3RlbXMKKyAgIHRoYXQgbGFjaworICAgUGVybAorCisyMDEwLTA4LTAyIDExOjA4ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IG1hZGUgaXQgcG9zc2libGUgdG8gYW5hbHl6ZSBhbGwgY29kZSBjb3ZlcmVkIGJ5CisgICB0aGUgcmVncmVzc2lvbiB0ZXN0cyB3aXRoIGEgZHluYW1pYyBhbmFseXplciwgYXQgbGVhc3QgaWYgdGhhdAorICAgYW5hbHl6ZXIgc3VwcG9ydHMgZm9sbG93aW5nIGNoaWxkIHByb2Nlc3Nlcy4gQW4gZXhhbXBsZToKKyAgIAorICAgcm0gLXJmIC90bXAvc25tcC10ZXN0LSoKKyAgIG1ha2UgLXMKKyAgIFNOTVBfU0FWRV9UTVBESVI9eWVzIERZTkFNSUNfQU5BTFlaRVI9InZhbGdyaW5kCisgICAtLXRyYWNlLWNoaWxkcmVuPXllcyAtLXRyYWNrLW9yaWdpbnM9eWVzIiBtYWtlIC1zIHRlc3QKKyAgIGdyZXAgLWkgdW5pbml0aWFsaXNlZCAvdG1wL3NubXAtdGVzdC0qIHwgeGFyZ3MgbGVzcworCisyMDEwLTA4LTAyIDExOjAyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYzoKKworICAgRml4ZWQgdGhlIGZvbGxvd2luZyB0d28gVmFsZ3JpbmQgY29tcGxhaW50czoKKyAgIAorICAgQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZCB2YWx1ZShzKQorICAgYXQgMHg2RDcwMkUwOiB2ZnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2RDk5RDExOiB2c25wcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkQ3QTQxMjogc25wcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkUxNDQzNzogaW5ldF9udG9hIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDVFNUUyMTk6IG5ldHNubXBfaXB2NF9mbXRhZGRyIChzbm1wSVB2NEJhc2VEb21haW4uYzoyMTUpCisgICBieSAweDVFNjU3MTc6IG5ldHNubXBfdGNwX2ZtdGFkZHIgKHNubXBUQ1BEb21haW4uYzo3MCkKKyAgIGJ5IDB4NUU1NjdFQzogbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcKKyAgIChzbm1wX3RyYW5zcG9ydC5jOjIyNCkKKyAgIGJ5IDB4NUUyNDc5QTogX3Nlc3NfcHJvY2Vzc19wYWNrZXQgKHNubXBfYXBpLmM6NTQ0MSkKKyAgIGJ5IDB4NUUyNUUzNzogX3Nlc3NfcmVhZCAoc25tcF9hcGkuYzo2MDM3KQorICAgYnkgMHg1RTI2MURBOiBzbm1wX3Nlc3NfcmVhZDIgKHNubXBfYXBpLmM6NjE0OSkKKyAgIGJ5IDB4NUUyNjI4Mjogc25tcF9yZWFkMiAoc25tcF9hcGkuYzo1NzQwKQorICAgYnkgMHg0MDRERTQ6IG1haW4gKHNubXBkLmM6MTIyNykKKyAgIFVuaW5pdGlhbGlzZWQgdmFsdWUgd2FzIGNyZWF0ZWQgYnkgYSBoZWFwIGFsbG9jYXRpb24KKyAgIGF0IDB4NEMyNzBBNTogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOjIzNikKKyAgIGJ5IDB4NUU2NTczOTogbmV0c25tcF90Y3BfYWNjZXB0IChzbm1wVENQRG9tYWluLmM6ODIpCisgICBieSAweDVFMjUzODM6IF9zZXNzX3JlYWQgKHNubXBfYXBpLmM6NTc4NikKKyAgIGJ5IDB4NUUyNjFEQTogc25tcF9zZXNzX3JlYWQyIChzbm1wX2FwaS5jOjYxNDkpCisgICBieSAweDVFMjYyODI6IHNubXBfcmVhZDIgKHNubXBfYXBpLmM6NTc0MCkKKyAgIGJ5IDB4NDA0REU0OiBtYWluIChzbm1wZC5jOjEyMjcpCisgICAKKyAgIENvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocykKKyAgIGF0IDB4NkY3QjJFMDogdmZwcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkZBNEQxMTogdnNucHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZGODU0MTI6IHNucHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDcwMUY0Mzc6IGluZXRfbnRvYSAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg1NkZBMjE5OiBuZXRzbm1wX2lwdjRfZm10YWRkciAoc25tcElQdjRCYXNlRG9tYWluLmM6MjE1KQorICAgYnkgMHg1NzAxNzE3OiBuZXRzbm1wX3RjcF9mbXRhZGRyIChzbm1wVENQRG9tYWluLmM6NzApCisgICBieSAweDU2RjI3RUM6IG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nCisgICAoc25tcF90cmFuc3BvcnQuYzoyMjQpCisgICBieSAweDU2RjI5NEY6IG5ldHNubXBfdHJhbnNwb3J0X3NlbmQgKHNubXBfdHJhbnNwb3J0LmM6MjQ4KQorICAgYnkgMHg1NkJDNDg3OiBzbm1wX3Nlc3NfYXN5bmNfc2VuZCAoc25tcF9hcGkuYzo1MjA0KQorICAgYnkgMHg1NkJDNjUxOiBzbm1wX2FzeW5jX3NlbmQgKHNubXBfYXBpLmM6NDk5OCkKKyAgIGJ5IDB4NTZCQzY3Nzogc25tcF9zZW5kIChzbm1wX2FwaS5jOjQ5ODQpCisgICBieSAweDU2OTg0NDA6IHNubXBfc3luY2hfcmVzcG9uc2VfY2IgKHNubXBfY2xpZW50LmM6MTAwNikKKyAgIFVuaW5pdGlhbGlzZWQgdmFsdWUgd2FzIGNyZWF0ZWQgYnkgYSBoZWFwIGFsbG9jYXRpb24KKyAgIGF0IDB4NEMyNzBBNTogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOjIzNikKKyAgIGJ5IDB4NTcwMUIzRTogbmV0c25tcF90Y3BfdHJhbnNwb3J0IChzbm1wVENQRG9tYWluLmM6MTYzKQorICAgYnkgMHg1NzAxRTZGOiBuZXRzbm1wX3RjcF9jcmVhdGVfdHN0cmluZyAoc25tcFRDUERvbWFpbi5jOjMwNSkKKyAgIGJ5IDB4NTZGMzgwNDogbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsCisgICAoc25tcF90cmFuc3BvcnQuYzo2MDEpCisgICBieSAweDU2RjNBQ0M6IG5ldHNubXBfdHJhbnNwb3J0X29wZW5fY2xpZW50CisgICAoc25tcF90cmFuc3BvcnQuYzo2NjkpCisgICBieSAweDU0MzQ0RjY6IHN1YmFnZW50X29wZW5fbWFzdGVyX3Nlc3Npb24gKHN1YmFnZW50LmM6NzU4KQorICAgYnkgMHg1NDM0OUM4OiBhZ2VudHhfcmVvcGVuX3Nlc3Npb24gKHN1YmFnZW50LmM6ODY5KQorICAgYnkgMHg1NDM0RDAwOiBzdWJhZ2VudF9zdGFydHVwIChzdWJhZ2VudC5jOjk5KQorICAgYnkgMHg1NkVBRUI3OiBzbm1wX2NhbGxfY2FsbGJhY2tzIChjYWxsYmFjay5jOjMzOCkKKyAgIGJ5IDB4NTZERTZGQjogcmVhZF9jb25maWdzIChyZWFkX2NvbmZpZy5jOjEwMTgpCisgICBieSAweDU2QzI4N0U6IGluaXRfc25tcCAoc25tcF9hcGkuYzo4NTApCisgICBieSAweDQwNDc3QjogbWFpbiAoc25tcHRyYXBkLmM6MTA0OCkKKworMjAxMC0wOC0wMSAwNjoxMSAgYnZhc3NjaGUKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICBGaXhlZCBzcGVsbGluZyBlcnJvcnMgcmVwb3J0ZWQgYnkgaXNwZWxsIC1sLgorCisyMDEwLTA4LTAxIDA2OjAwICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBfZW51bS5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYzoKKworICAgRml4ZWQgYSB0eXBvIGluIGEgdGV4dCBzdHJpbmcgaW4gYSB1bml0IHRlc3Q6IHJlc3R1cmFudCAtPgorICAgcmVzdGF1cmFudC4KKworMjAxMC0wOC0wMSAwNTo1MyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmg6CisKKyAgIERvY3VtZW50ZWQgYmVoYXZpb3Igb2Ygc2VfYWRkX3BhaXJfdG9fc2xpc3QoKS4KKworMjAxMC0wNy0zMSAyMzo1MCAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEwLmg6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5MjY2OiBhZGQgbWlzc2luZyBoZWFkZXIgZmlsZSB0byBzdXBwb3J0IE1hYyBPUyBYCisgICAxMC42CisgICAoU25vdyBMZW9wYXJkIC0gImRhcndpbjEwIikKKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNi5wcmUyIC0+IFY1LjYucHJlMworCisyMDEwLTA3LTMxIDIwOjMxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wNy0zMSAyMDoyNCAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAxMC0wNy0zMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wNy0zMSAyMDoxMSAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgY2hhbmdlZCB0aGUgbmFtZSBvZiB0aGUgcmVhZG1lIHNlY3Rpb24gdG8gY2FsbCBvdXQgTkVXUy10b28KKworMjAxMC0wNy0zMSAyMDoxMCAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBhZGRlZCBtaXNzaW5nIG5ld3MgaXRlbXMKKworMjAxMC0wNy0zMCAxMzowNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0ggMzAzNTMyODogZnJvbTogc3dzOiBjaGVjayB0aGUgcmVzdWx0cyBvZgorICAgc2Vzc2lvbiBjcmVhdGlvbiBmb3IgYSBmYWlsdXJlIGNhc2UuCisKKzIwMTAtMDctMzAgMTM6MDAgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgQ0hBTkdFUzogcHl0aG9uOiBwYXRjaCAzMDM1NTc4OiBmcm9tIHN3czoga2VlcCBlcnJvciBjb2RlcyB1cCB0bworICAgZGF0ZQorCisyMDEwLTA3LTI5IDE1OjQ4ICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZToKKworICAgQWRkIHN1cHBvcnQgZm9yIE1hYyBPUyBYIDEwLjYgKFNub3cgTGVvcGFyZCAtICJkYXJ3aW4xMCIpCisgICAoT24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzIE1hYyBPUyBYIDEwLjUKKyAgIChMZW9wYXJkIC0gImRhcndpbjkiKSkKKworMjAxMC0wNy0yOSAxNTo0NyAgZHRzMTIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uOgorCisgICBBZGQgc3VwcG9ydCBmb3IgTWFjIE9TIFggMTAuNiAoU25vdyBMZW9wYXJkIC0gImRhcndpbjEwIikKKyAgIChPbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgTWFjIE9TIFggMTAuNQorICAgKExlb3BhcmQgLSAiZGFyd2luOSIpKQorCisyMDEwLTA3LTI5IDE1OjAzICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oOgorCisgICBQcm92aWRlIGEgZGVmaW5pdGlvbiBvZiAndmFfbGlzdCcgZm9yIHZhcmFyZ3MtYmFzZWQgQVBJcworCisyMDEwLTA3LTI5IDE0OjU4ICBkdHMxMgorCisgICAqICBhY2NvbmZpZy5oLCBhZ2VudC9hdXRvX25saXN0LmMsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaCwgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIEFkZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBBSVggNworICAgKG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBpZGVudGljYWwgdG8gQUlYIDYpCisKKzIwMTAtMDctMjkgMTQ6NTYgIGR0czEyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbjoKKworICAgRGlzYWJsZSBlbWJlZGRlZCBwZXJsIGJ5IGRlZmF1bHQgb24gYXJjaGl0ZWN1cmVzIHdoZXJlCisgICB0aGlzIHNlZW1zIHRvIGNhdXNlIHByb2JsZW1zIChIUC1VWCAmIE1hYyBPUyBYKQorCisyMDEwLTA3LTI5IDExOjEzICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgR3VhcmQgYWdhaW5zdCBibGFuayAnaW5jbHVkZSonIGxpbmVzLgorICAgSGFuZGxlIHJlbGF0aXZlICdpbmNsdWRlRmlsZScgcGF0aHMKKworMjAxMC0wNy0yOSAxMDo0NyAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBSZXR1cm4gYW4gaW5kaWNhdGlvbiBvZiB3aGV0aGVyIGNvbmZpZyBmaWxlcyBhcmUgYWN0dWFsbHkKKyAgIHByb2Nlc3NlZC4KKyAgIFJlcG9ydCBwcm9ibGVtcyB3aXRoIGZhaWxpbmcgdG8gaW5jbHVkZSBjb25maWcgZmlsZXMuCisKKzIwMTAtMDctMjggMTQ6NDQgIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oLCBtYW4vY29uZmlnX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi92YXJiaW5kX2FwaS4zLmRlZiwgIAorICAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBCcmluZyBtYW4gcGFnZSBkb2N1bWVudGF0aW9uLCBoZWFkZXIgZmlsZXMgYW5kIFdpbmRvd3MgRExMCisgICBkZWZpbml0aW9ucworICAgb2YgdG9wLWxldmVsIHB1YmxpYyBBUEkgY2FsbHMgaW50byBsaW5lIHdpdGggZWFjaCBvdGhlci4KKworMjAxMC0wNy0yOCAxNDo0MCAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIEZpeCBtaXNuYW1lZCBjb21tZW50CisKKzIwMTAtMDctMjggMTQ6MzYgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBEb24ndCBtaXggU01JdjEgYW5kIFNNSXYyIE1JQnMgaW4gdGhlIGxpc3Qgb2YgZGVmYXVsdCBNSUJzIHRvCisgICBsb2FkLgorICAgVXNlIG5ld2VyIFNNSXYyIHZlcnNpb25zICh3aGljaCBpbmNsdWRlIHN1aXRhYmxlIGRpc3BsYXkgaGludHMpCisgICByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgUkZDMTIxMyBNSUIgKHdoaWNoIGRvZXNuJ3QpCisKKzIwMTAtMDctMjggMTQ6MTAgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBGaXggaW5kZW50YXRpb24gZm9yICdpbmNsdWRlU2VhcmNoJyBwcm9jZXNzaW5nIGNvZGUuCisKKzIwMTAtMDctMjggMTQ6MDkgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBFeHRlbmQgJ2luY2x1ZGUnIGNvbmZpZyBmaWxlIHByb2Nlc3NpbmcgdG8gY292ZXIgdGhyZWUKKyAgIGRpZmZlcmVudCBtb2RlcyBvZiB3b3JraW5nOgorICAgLSBsb29rIGZvciB0aGUgZmlsZSBvbiB0aGUgY29uZmlnIHNlYXJjaCBwYXRoCisgICAtIGluY2x1ZGUgdGhlIHNwZWNpZmllZCBmaWxlIGJ5IG5hbWUKKyAgIC0gaW9hZCB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkKKyAgIFVzZSBkaWZmZXJlbnQgY29uZmlnIHRva2VucyB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KKworMjAxMC0wNy0yNyAxMToxMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9rZXJuZWwuYywgYWdlbnQva2VybmVsLmgsIGFnZW50L3NubXBfdmFycy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMjkxMjUyMDogZnJvbSBsaXN0b206IEZyZWUga21lbSByZWZlcmVuY2VzCisgICBvbiBzaHV0ZG93bgorCisyMDEwLTA3LTI3IDEwOjU0ICBoYXJkYWtlcgorCisgICAqIG1pYnMvU01VWC1NSUIudHh0OgorCisgICBDSEFOR0VTOiBtaWJzOiBwYXRjaCAyOTc0NzE2OiBmcm9tIGJ2YXNzY2hlOiBmaXggaXNzdWVzIGluIHRoZQorICAgU01VWC1NSUIKKworMjAxMC0wNy0yNyAwODo1NCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGluY2x1ZGUgdGhlIG5ldyBzZWN1cml0eS1oZWRhZXJzIG1vZHVsZQorCisyMDEwLTA3LTI3IDA4OjU0ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL3NubXAtYnJpZGdlLW1pYjoKKworICAgcmVtb3RlIGRlYnVnZ2luZy9wcm9jZXNzaW5nIHN0ZGVyciBvdXRwdXQKKworMjAxMC0wNy0yNyAwODo1NCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9zbm1wLWJyaWRnZS1taWI6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMzAyODkyMzogZnJvbSBqZW5zbzogbmV3IGNvcHkgb2YgdGhlCisgICBicmlkZ2UtbWliIHBlcmwgaW1wbGVtZW50YXRpb24KKworMjAxMC0wNy0yNyAwODozMSAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMsICAgCisgICAgICBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tc2VjdXJpdHktaGVhZGVycy5pbjoKKworICAgc2VwYXJhdGUgb3V0IHRoZSBzZWN1cml0eSBoZWFkZXIvaW5pdCBnZW5lcmF0aW9uCisKKzIwMTAtMDctMjcgMDg6MzEgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0czoKKworICAgdHJhbnNwb3J0IGNvbmZpZ3VyZSBwb3J0aW9uCisKKzIwMTAtMDctMjcgMDg6MzAgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMsICAgCisgICAgICBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdHJhbnNwb3J0LWhlYWRlcnMuaW4sICAgCisgICAgICBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluOgorCisgICBtb3ZlIHRyYW5zcG9ydCBoZWFkZXIgZ2VuZXJhdGlvbiB0byBhIHNlcGFyYXRlIGZpbGUgYW5kIGNyZWF0ZSBhbgorICAgZXh0ZXJuYWwgc2VwYXJhdGUgc2NyaXB0IGZvciBnZW5lcmF0aW5nIGl0CisKKzIwMTAtMDctMjcgMDg6MTQgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiByZXBvcnQgZ2ZzIGZpbGVzeXN0ZW1zIGluIGhyU3RvcmFnZVRhYmxlIGFuZAorICAgaHJGU1RhYmxlLgorCisyMDEwLTA3LTI0IDE1OjQyICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRG9uJ3QgbG9zZSB0cmFjayBvZiB3aGljaCBjb25maWcgZmlsZSB3YXMgYmVpbmcgcGFyc2VkLAorICAgd2hlbiBwcm9jZXNzaW5nIGFuIGluY2x1ZGVkIGNvbmZpZyBmaWxlLgorICAgRml4ZXMgYSBidWcgd2l0aCByZXBvcnRpbmcgbGF0ZXIgY29uZmlnIGVycm9ycy4KKworMjAxMC0wNy0yNCAxNTozNiAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIERvbid0IGxvc2UgdHJhY2sgb2Ygd2hpY2ggY29uZmlnIGZpbGUgaXMgYmVpbmcgcGFyc2VkLAorICAgd2hlbiBvcGVuaW5nIGEgbmV3IFNOTVAgc2Vzc2lvbi4KKyAgIEZpeGVzIGEgYnVnIHdpdGggcmVwb3J0aW5nIGxhdGVyIGNvbmZpZyBlcnJvcnMuCisKKzIwMTAtMDctMjMgMDM6MTIgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGFkZCB0aGUgVExTIG1vZHVsZXMgdG8gdGhlIGxpc3Qgb2YgdGVzdCBtb2R1bGVzCisKKzIwMTAtMDctMjEgMTk6MjUgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jOgorCisgICBGaXggdHlwbyBpbiBkb3h5Z2VuIGNvbW1lbnQKKworMjAxMC0wNy0yMSAxOToyNCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzoKKworICAgRml4IHR5cG8gaW4gc3BlZWQgY29tcHV0YXRpb24KKworMjAxMC0wNy0yMSAxOToyMSAgbmJhCisKKyAgICogc25tcGxpYi9zbm1wX3NlY21vZC5jOgorCisgICBJbmNsdWRlIGdlbmVyYXRlZCBzZWN1cml0eS1pbmNsdWRlcy5oCisKKzIwMTAtMDctMjEgMTk6MjAgIG5iYQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaDoKKworICAgRml4IGluaXQgZnVuYyBuYW1lIChjb3B5LXBhc3RlIGdsaXRjaCkKKworMjAxMC0wNy0yMSAxOToxOCAgbmJhCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIFJlbW92ZSBzdXBlcmZsdW91cyBzZW1pY29sb24KKworMjAxMC0wNy0yMSAxOToxOCAgbmJhCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIE91dCBvZiBvcmRlciBkZWNsYXJhdGlvbgorCisyMDEwLTA3LTIxIDE5OjE3ICBuYmEKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBMb2cgZXJyb3Igb24gZmlsZSBvcGVuIGVycm9yCisKKzIwMTAtMDctMjEgMTk6MTYgIG5iYQorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgU3BlbGluZyBlcnJvcgorCisyMDEwLTA3LTIxIDE4OjEwICBuYmEKKworICAgKiBtaWJzL2lhbmFsaXN0LCBtaWJzL3JmY2xpc3QsIG1pYnMvcmZjbWlicy5kaWZmOgorCisgICBVcGRhdGUgZm9yIGN1cnJlbnQgUkZDcworCisyMDEwLTA3LTIxIDE4OjA4ICBuYmEKKworICAgKiBtaWJzL0lBTkFpZlR5cGUtTUlCLnR4dDoKKworICAgQ3VycmVudCB2ZXJzaW9uIGZyb20gSUFOQQorCisyMDEwLTA3LTIxIDE4OjA1ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgcjE3NDk1IGVycm9uZW91c2x5IGRpc2FibGVkIGRpc2tJT0xBeCBmb3IgbGludXgKKworMjAxMC0wNy0yMCAxMDozOCAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZml4ZWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGdlbmVyYXRpbmcKKyAgIHRlbXAuIGZpbGUgbmFtZXMKKworMjAxMC0wNy0yMCAwNzozMiAganNhZnJhbmVrCisKKyAgICogIGFnZW50L3NubXBkLmMsIGFwcHMvYWdlbnR4dHJhcC5jLCBhcHBzL3NubXB0cmFuc2xhdGUuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkLmMsIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wdHJhcGQuOC5kZWYsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIERlc2NyaWJlIC1EIHVzYWdlIGFzIC1EW1RPS0VOXSBpbnN0ZWFkIG9mIC1EIFtUT0tFTl0KKworMjAxMC0wNy0xNyAxNToxMCAgcnN0b3J5CisKKyAgICogbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0OgorCisgICB1cGRhdGUgZGlzcGxheSBoaW50IHRvIHNvbWUgbGVzcyBhbWJpZ3VvdXMgKGFuZCB0aGF0IHdvcmtzIHdpdGgKKyAgIG91ciBsaWIpCisKKzIwMTAtMDctMTcgMDQ6MTMgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIGZpeCB0ZXN0c2ltcGxlIGZvciBidWlsZGRpciE9c3JjZGlyCisKKzIwMTAtMDctMTcgMDQ6MTIgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIGFkZCB0ZXN0c2ltcGxlIHRhcmdldAorCisyMDEwLTA3LTE2IDE5OjIxICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVsZWFzZSBpdGVyYXRvciB3aGVuIGRvbmUgd2l0aCBpdAorCisyMDEwLTA3LTE1IDE4OjI4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBmaXggaXNzdWUgd2l0aCBVU00gdXNpbmcgaW5hY3RpdmUgdXNlcnMKKworMjAxMC0wNy0xNSAwMTozNSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYzoKKworICAgZG9uJ3QgdXNlIHN0cm5kdXAgKHBvcnRhYmlsaXR5KQorCisyMDEwLTA3LTE1IDAxOjM1ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBpbmNsdWRlIGFwcHJvcHJpYXRlIHN0cmluZyBoZWFkZXI7IGRlZmluZSBOQU1FX01BWCBpZiBub3QgYWxyZWFkeQorICAgZGVmaW5lZDsKKyAgIGRvbid0IHVzZSBzdHJuZHVwIChwb3J0YWJpbGl0eSkKKworMjAxMC0wNy0xNSAwMTozNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNoZWNrIHRoYXQgc29tZSBuZXdlciBvcGVuc3NsIG1hY3JvcyBhcmUgZGVmaW5lZCBiZWZvcmUgdXNpbmcKKyAgIHRoZW07IGluY2x1ZGUKKyAgIGFwcHJvcHJpYXRlIHN0cmluZyBoZWFkZXIKKworMjAxMC0wNy0xNSAwMTozNSAgcnN0b3J5CisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBjaGVjayBmb3IgZHRscyBzdXBwb3J0IGluIG9wZW5zc2wKKworMjAxMC0wNy0xNSAwMTozNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGRvbid0IGNvbXBpbGUgZHRscyBkb21haW4gaWYgbm8gZHRscyBzdXBwb3J0IGluIG9wZW5zc2wKKworMjAxMC0wNy0xNSAwMTozNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgaWZkZWYgcHJvdGVjdGlvbiBmb3IgbGF0ZXIgc2hhIGFsZ29yaXRobXMKKworMjAxMC0wNy0xNSAwMTozNCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2Rhcndpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luNy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oOgorCisgICBkYXJ3aW4gb3BlbnNzbCBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgcmVjZW50IHNoYSBhbGdvcml0aG1zCisKKzIwMTAtMDctMTUgMDE6MzMgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgZml4IHR5cG8gaW4gaWZkZWYgdGVzdAorCisyMDEwLTA3LTE1IDAxOjMzICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmM6CisKKyAgIGZpeCBjdXQtbi1wYXN0ZSBlcnJvciBpbiBpbmNsdWRlZCBmaWxlIG5hbWUKKworMjAxMC0wNy0xNCAxNTowOCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYzoKKworICAgZml4IHRoZSBmaXg6IHB1dCBQUkl6IHNwZWMgaW4gY29ycmVjdCBwbGFjZQorCisyMDEwLTA3LTE0IDE1OjAzICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzOgorCisgICBzcGVjaWZ5IFNOTVAgdmVyc2lvbiBvbiBjb21tYW5kbGluZQorCisyMDEwLTA3LTE0IDE1OjAzICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgcXVpZXQgY29tcGlsZXIKKworMjAxMC0wNy0xNCAxNTowMiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTAtMDctMTMgMjA6MDMgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAgYXBwcy9zbm1wdGxzLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaDoKKworICAgaW5jbHVkZSBzc2wuaCBiZWZvcmUgY2VydF91dGlsLmgKKworMjAxMC0wNy0xMyAyMDowMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGRlYnVnIG91dHB1dCBmb3IgZm91bmQgY2VydAorCisyMDEwLTA3LTEzIDE2OjI0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHR5cG8gaW4gbG9nIG1zZworCisyMDEwLTA3LTEyIDEwOjI2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzoKKworICAgQ0hBTkdFUzogV2luMzIgYW5kIEN5Z3dpbjogbWFkZSBzdXJlIHRoYXQgYWNjZXNzaW5nIHRoZSBtaWJJSQorICAgaW50ZXJmYWNlcyB0YWJsZSBkb2VzIG5vdCB0cmlnZ2VyIG91dC1vZi1yYW5nZSBhcnJheSBhY2Nlc3NlcworICAgKHdhcyBkZXRlY3RlZCBieSBCb3VuZHNDaGVja2VyKS4KKworMjAxMC0wNy0xMiAxMDoyMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYzoKKworICAgRml4ZWQgYSBkYW5nbGluZy1wb2ludGVyLXJlYWQgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMTkwMTguIEluCisgICByMTkwMTggdGhlIHR5cGUgb2YgZ3JvdXBTdWJ0cmVlTGVuIHdhcyBjaGFuZ2VkIGZyb20gaW50IHRvCisgICBzaXplX3QsIHdoaWNoIGNoYW5nZWQgdGhlIGJlaGF2aW9yIG9mIHRoZSBsb29wICJ3aGlsZQorICAgKGdyb3VwU3VidHJlZUxlbi0tID4gMCkgLi4uIjogaW5zdGVhZCBvZiBub3QgZXhlY3V0aW5nIHRoZSBsb29wCisgICBib2R5IHdoZW4gZ3JvdXBTdWJ0cmVlTGVuIHdhcyBuZWdhdGl2ZSwgcjE5MDE4IGNhdXNlZCB0aGUgYm9keSBvZgorICAgdGhhdCBsb29wIHRvIGJlIGV4ZWN1dGVkLiBEZXRlY3RlZCBieSBydW5uaW5nIHNubXBkIHVuZGVyCisgICBCb3VuZHNDaGVja2VyIHdoaWxlIHBlcmZvcm1pbmcgYSBNSUIgd2Fsay4KKworMjAxMC0wNy0xMiAxMDoxMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOgorCisgICBSZXZlcnRlZCByMTkwNDcgKHdoaWNoIHdhcyB3cm9uZykgYW5kIGltcGxlbWVudGVkIGEgcHJvcGVyIGZpeAorICAgZm9yIHRoZSBjb21waWxlciB3YXJuaW5ncyBhYm91dCBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2hlcy4KKworMjAxMC0wNy0xMiAxMDowOSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIFJlbW92ZWQgYW4gb2Jzb2xldGUgY29tbWVudC4KKworMjAxMC0wNy0xMiAxMDowOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCB3aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmg6CisKKyAgIFN1cHByZXNzZWQgbW9yZSBNU1ZDIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA3LTEyIDA0OjQ1ICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1ZhcnM6CisKKyAgIGFkZCBjb21tZW50IHdpdGggb2JqZWN0IG5hbWUgZm9yIG51bWVyaWMgaWRzCisKKzIwMTAtMDctMTIgMDQ6NDUgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG5ldyBmdW5jdGlvbiB0byBnZXQgc2VydmVySWQgZnJvbSBzbm1wVGxzdG1BZGRyVGFibGUgZGF0YTsgdXNlCisgICBuZXcgYXBpCisgICB0byBjb25maWcgc2VydmljZUlkIGZvciB0cmFwIHRyYW5zcG9ydCB3aGVuIHNlbmRpbmcgdHJhcHMKKworMjAxMC0wNy0xMSAxMToxOCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6CisKKyAgIENIQU5HRVM6IEJVRzogMzAyNzkwMDogd2hlbiBjcm9zcy1jb21waWxpbmcgaXQgaXMgbm93IGFzc3VtZWQKKyAgIHRoYXQgbWVtY21wKCkgaXMgYXZhaWxhYmxlIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhhdCBpdCBpcyBub3QKKyAgIGF2YWlsYWJsZS4KKworMjAxMC0wNy0xMSAxMDozMCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHIxOTE5Ny4KKworMjAxMC0wNy0xMCAyMDowMCAgcnN0b3J5CisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN5bmMgdXAgaGVscCBvdXRwdXQgYW5kIG9wdGlvbnMgcHJvY2Vzc2luZworCisyMDEwLTA3LTA5IDE1OjEzICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgVXBkYXRlZCBDeWd3aW4gc2VjdGlvbiBpbiBSRUFETUUud2luMzIuCisKKzIwMTAtMDctMDkgMTU6MTMgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYzoKKworICAgQ0hBTkdFUzogV2luMzI6IFN1cHByZXNzZWQgImltcGxpY2l0IGNhc3QgZnJvbSBpbnQgdG8gdV9jaGFyIgorICAgd2FybmluZ3MgZ2VuZXJhdGVkIGJ5IE1TVkMuCisKKzIwMTAtMDctMDkgMTU6MTEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgVGVzdGluZzogbWFkZSB0aGUgZGVidWcgb3V0cHV0IHRoYXQgYXBwZWFycyBpbiB0aGUgImludm9rZWQiIGZpbGUKKyAgIGV2ZW4gbW9yZSB2ZXJib3NlLgorCisyMDEwLTA3LTA5IDE1OjEwICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW4zMiBNU1ZDIGJ1aWxkIGZpeGVzLgorCisyMDEwLTA3LTA4IDE5OjMwICBtYXJ6CisKKyAgICogIGxvY2FsL2NlcnRnZW4tdGVzdC5wbCwgbG9jYWwvbmV0LXNubXAtY2VydCwgICAKKyAgICAgIGxvY2FsL25ldC1zbm1wLWNlcnQuY29uZjoKKworICAgYWRkcyBwZXIgaWRlbnRpdHkgY29uZmlndXJhdGlvbiBmaWxlIHN1cHBvcnQgc28gZGVmYXVsdHMgY2FuIGJlCisgICBjdXN0b21pc2VkIG9uIGNtZGxpbmUgdyAtaSA8aWRlbnRpdHk+IC0gc2VlIG5ldC1zbm1wLWNlcnQuY29uZgorICAgZm9yIGV4YW1wbGVzIGFuZCBzb21lIGhlbHAgaW5mbworCisyMDEwLTA3LTA4IDEyOjE3ICBkdHMxMgorCisgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDMwMDM5ODE6IFByb3RlY3QgYWdhaW5zdCBidWZmZXIgb3ZlcmZsb3cKKworMjAxMC0wNy0wOCAxMToxOSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzAxOTI0MzogUmVnaXN0ZXIgZXhlY0ZpeCBjb21wYXRhYmlsaXR5CisgICBkaXJlY3RpdmUgY29ycmVjdGx5LgorCisyMDEwLTA3LTA3IDEwOjE5ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZToKKworICAgQ0hBTkdFUzogQ3lnd2luIGFuZCBNaW5HVzogdGVzdHMgVDExMCwgVDExMSwgVDExMiwgVDEyMCwgVDEyMSBhbmQKKyAgIFQxMjIgZG8gbm93IHBhc3Mgd2hlbiBzbm1wZCBpcyBidWlsdCB3aXRoIHdpbkV4dERMTCBzdXBwb3J0CisgICBlbmFibGVkLgorCisyMDEwLTA3LTA2IDE4OjU5ICBidmFzc2NoZQorCisgICAqICBDaGFuZ2VMb2csIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmksICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBNYWRlIHJlZ3Jlc3Npb24gdGVzdHMgZWFzaWVyIHRvIGRlYnVnIGJ5IGluY2x1ZGluZyBvayAvIG5vdCBvaworICAgc3RhdHVzIGluIHRoZSAiaW52b2tlZCIgZmlsZS4KKyAgIFNwZWxsaW5nIGZpeGVzOiByZW1lYmVyIC0+IHJlbWVtYmVyOyBzZXBlcmF0b3IgLT4gc2VwYXJhdG9yLgorCisyMDEwLTA3LTA2IDE1OjA0ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDoKKworICAgVGVzdCBUMDY1IGRvZXMgbm93IHJlYWxseSBwYXNzIG9uIE1pbkdXLgorCisyMDEwLTA3LTA1IDEwOjAxICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIEFkZGVkIGN1cmx5IGJyYWNlcyBzdWNoIHRoYXQgJ3x8JyBhbmQgJyYmJyBhcmUgZXZhbHVhdGVkIGluIHRoZQorICAgY29ycmVjdCBvcmRlci4KKworMjAxMC0wNy0wNCAxMTozNyAgYnZhc3NjaGUKKworICAgKiBhcHBzOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMDctMDQgMTE6MzQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgRmFsbCBiYWNrIGZyb20gUlVORlVMTFRFU1RTIHRvIFJVTlRFU1RTIGlmIG5laXRoZXIgVEFQOjpIYXJuZXNzCisgICBub3IgVGVzdDo6SGFybmVzcyBpcyBhdmFpbGFibGUuCisKKzIwMTAtMDctMDQgMTE6MjEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgdGVzdCBudW1iZXIgaW4gL3RtcC9zbm1wLXRlc3RzLSR0ZXN0bnVtIGlzIHNldAorICAgdG8gc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bCB0aGFuIGp1c3QgIjAiLgorCisyMDEwLTA3LTA0IDExOjIwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIFNwbGl0IGEgbG9uZyBjb21tZW50IGxpbmUuCisKKzIwMTAtMDctMDQgMTA6NTIgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgQnVnIGZpeDogbWFkZSBzdXJlIHRoYXQgc3JjZGlyIGlzIGNvbXB1dGVkIGNvcnJlY3RseSBpZiBgZGlybmFtZQorICAgJDBgID0gLgorCisyMDEwLTA3LTAyIDE2OjI3ICBidmFzc2NoZQorCisgICAqIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIFNpbXBsaWZpZWQgcjE5MTgxIChGaXhlZCBUTFNUQ1AtZW5hYmxlZCBidWlsZCBmb3IgcGxhdGZvcm1zIHdpdGgKKyAgIG5vbi1lbXB0eSAkKEVYRUVYVCksIGkuZS4gQ3lnd2luIGFuZCBNaW5HVykuCisKKzIwMTAtMDctMDEgMTg6MTUgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgRml4ZWQgVExTVENQLWVuYWJsZWQgYnVpbGQgZm9yIHBsYXRmb3JtcyB3aXRoIG5vbi1lbXB0eQorICAgJChFWEVFWFQpLCBpLmUuIEN5Z3dpbiBhbmQgTWluR1cuCisKKzIwMTAtMDctMDEgMTg6MTEgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wdGxzLmM6CisKKyAgIEZpeGVkIHlldCBhbm90aGVyIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wNy0wMSAxNzo1MyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBGaXhlZCB0d28gcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNy0wMSAwMDoxOSAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA3LTAxIDAwOjEzICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNy0wMSAwMDowMyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA2LTMwIDIzOjU1ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjYucHJlMSAtPiBWNS42LnByZTIKKworMjAxMC0wNi0zMCAyMzo1NSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAxMC0wNi0zMCAyMzo0OCAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBweXRob24vbmV0c25tcC90ZXN0cy9zbm1wZC5jb25mOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wNi0zMCAyMzo0NSAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgbWlzc2VkIHR3byB0b2tlbnMgaW4gdGhlIG1hbiBwZ2FlcworCisyMDEwLTA2LTMwIDIzOjQ1ICBoYXJkYWtlcgorCisgICAqICBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXBkLjguZGVmLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NpcGhlclRlc3RzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NybCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQWdlbnRUcmFwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlclNlc3Npb24sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1RyYXBkVXNlciwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICByZW5hbWUgdGhlIGRlZlg1MDkgdG9rZW5zIHRvIHNvbWV0aGluZyBtb3JlIGZyaWVuZGx5OiBjbGllbnRDZXJ0CisgICBhbmQgc2VydmVyQ2VydAorCisyMDEwLTA2LTMwIDIzOjQ0ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHRvcC1maWxlIGNvbW1lbnQgdXBkYXRlcworCisyMDEwLTA2LTMwIDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGRvbid0IGNhbGwgY2VydF9maW5kIHdpdGggYSBOVUxMIGFyZ3VtZW50CisKKzIwMTAtMDYtMzAgMjM6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWxsb3cgZGVmIGNlcnRzIHRvIGJlIHNwZWNpZmllZCB1c2luZyBhIGZpbGVuYW1lCisKKzIwMTAtMDYtMzAgMjM6NDEgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIGZpeCBzeW50YXggZXJyb3IKKworMjAxMC0wNi0zMCAyMzowMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICB0dXJuIGEgY291cGxlIG9mIG5vbi1jcml0aWNhbCBlcnJvcnMgaW50byBkZWJ1ZyBzdGF0ZW1lbnRzIHBlcgorICAgZGlzY3Vzc2lvbiB3aXRoIHJzdG9yeQorCisyMDEwLTA2LTMwIDIzOjAwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBtYWtlIHRoZSByZWdleHAgcGF0dGVybiBtYXRjaCBmb3IgdGVzdHMgdG8gcnVuIGNhc2UgaW5zZW5zaXRpdmUKKworMjAxMC0wNi0zMCAyMzowMCAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnQucHk6CisKKyAgIGltcG9ydCBzdGRlcnIgZnJvbSBzeXMsIHBlciBkaXNjdXNzaW9uIG9uIC11c2VycworCisyMDEwLTA2LTMwIDIyOjE3ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGFkZCBiYWNrIGluIHRoZSBkZWZhdWx0IHBvcnQgc3BlY2lmaWVyCisKKzIwMTAtMDYtMzAgMjI6MTcgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZW5hYmxlIHB1bGxpbmcgdGhlIHByaXZhdGUga2V5IG92ZXIgaHR0cAorCisyMDEwLTA2LTMwIDIyOjE3ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG1vdmUgVVJMIGNvbGxlY3Rpb24gaW50byBhIHN1YiBmdW5jdGlvbgorCisyMDEwLTA2LTMwIDIyOjE2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGFkZGVkIGFiaWxpdHkgdG8gcHVsbCBhIGNlcnQgZnJvbSBhIFVSTAorCisyMDEwLTA2LTMwIDIyOjE2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBhcmd1bWVudCBidWcgaW4gdGhlIGlzX3VybCBmdW5jdGlvbgorCisyMDEwLTA2LTMwIDIwOjQ5ICBoYXJkYWtlcgorCisgICAqIGFwcHMvc25tcHRscy5jOgorCisgICByZW1vdmUgZGVidWdnaW5nIGNvZGUKKworMjAxMC0wNi0zMCAyMDoyNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdEdGxzQ05TZXNzaW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3ZHRsc0NOU2Vzc2lvbl9zaW1wbGU6CisKKyAgIHJlbmFtZSBmaWxlIGZvciBjb25zaXN0ZW5jeQorCisyMDEwLTA2LTMwIDIwOjAxICByc3RvcnkKKworICAgKiBjb25maWd1cmU6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IHNubXB0bHMgYXBwCisKKzIwMTAtMDYtMzAgMjA6MDAgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHJlbW92ZSBhY2NpZGVudGFsbHkgY2hlY2tlZCBpbnQgZGVidWcgY29kZQorCisyMDEwLTA2LTMwIDE5OjU5ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICBkZWZpbmUgT0lEcyBiYXNlZCBvbiBTTk1QX1RMU19UTV9CQVNFCisKKzIwMTAtMDYtMzAgMTk6NTkgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmM6CisKKyAgIGF1dG8tdHJhbnNpc3Rpb24gYmV0d2VlbiBub3RSZWFkeS9ub3RJblNlcnZpY2UKKworMjAxMC0wNi0zMCAxOTo1NyAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaDoKKworICAgYXV0by10cmFuc2lzdGlvbiBiZXR3ZWVuIG5vdFJlYWR5L25vdEluU2VydmljZTsgYWRkCisgICBzbm1wX3N0b3JlX25lZWRlZCBvbiBjb21taXQKKworMjAxMC0wNi0zMCAxOTo1NiAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXNlIG5ldyBmaW5nZXJwcmludCBwYXJzZS9idWlsZCBmdW5jdGlvbnM7IHJlbW92ZSBiYWQgbGVuZ3RoCisgICBjaGVjazsgYXV0bworICAgdHJhbnNpdGlvbiBiZXR3ZWVuIG5vdFJlYWR5IGFuZCBub3RJblNlcnZpY2UKKworMjAxMC0wNi0zMCAxOTo1NSAgcnN0b3J5CisKKyAgICogbWlicy9UTFNUTS1NSUIudHh0OgorCisgICByZW1vdmUgcHJlLXJmYyBtaWI7IHNlZSBTTk1QLVRMUy1UTS1NSUIudHh0IGluc3RlYWQKKworMjAxMC0wNi0zMCAxOTo1NCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgY29uc29saWRhdGUgbXVsdGlwbGUgZmlsZXMKKworMjAxMC0wNi0zMCAxOTo1MyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtYWtlIGhhc2ggdHlwZSBwYXJzZSByb3V0aW5lIHB1YmxpYzsgYWRkIHJvdXRpbmVzIHRvIGJ1aWxkL3BhcnNlCisgICBTbm1wVExTRmluZ2VycHJpbnQKKworMjAxMC0wNi0zMCAxOTo1MSAgcnN0b3J5CisKKyAgICogIE1ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBhcHBzL3NubXB0bHMuYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBORVdTOiBzbm1wdGxzOiBuZXcgYXBwIGZvciBtYW5hZ2luZyAoRClUTFMgY29uZmlnIHZpYQorICAgU05NUC1UTFMtVE0tTUlCIHRhYmxlcworCisyMDEwLTA2LTMwIDE5OjUwICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYzoKKworICAgY2FsbCBuZXcgc25tcF9zdG9yZV9uZWVkZWQoKSBmdW5jdGlvbiBhZnRlciBhIGNvbW1pdCBpbiB0YWJsZXMKKyAgIHRoYXQKKyAgIGhhdmUgcGVyc2lzdGVudCBzdG9yZQorCisyMDEwLTA2LTMwIDE5OjQ5ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBORVdTOiBzbm1wbGliOiBuZXcgZXhwZXJpbWVudGFsIHNpbXBsZSBzdGF0ZSBtYWNoaW5lCisgICBORVdTOiBzbm1wbGliOiBuZXcgZXhwZXJpbWVudGFsIHJvdyBjcmVhdGlvbiBBUEkgd2hpY2ggdXNlcyBhCisgICBzdGF0ZSBtYWNoaW5lCisgICB0byB0cnkgcmVhbGx5IGhhcmQgdG8gY3JlYXRlIGEgcm93IGZyb20gYSBnaXZlbiB2YXJiaW5kIGxpc3QKKworMjAxMC0wNi0zMCAxOTo0OCAgcnN0b3J5CisKKyAgICogIGFnZW50L3NubXBfYWdlbnQuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE5FV1M6IHNubXBkOiBuZXcgQVBJIGZvciBpbmRpY2F0aW5nIHRoYXQgcGVyc2lzdGVudCBzdG9yZSBuZWVkcworICAgdG8gYmUgc2F2ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCBmaW5pc2hlcyBwcm9jZXNzaW5nCisKKzIwMTAtMDYtMzAgMTk6NDYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBhZGQgc29tZSBuZXcgd3JhcHBlciBtYWNyb3MKKworMjAxMC0wNi0zMCAxNTo1OSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNDTlNlc3Npb24sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhblNlc3Npb24sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlclNlc3Npb24sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNUR0bHNTYW5TZXNzaW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE2VGxzU2FuU2Vzc2lvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN2R0bHNDTlNlc3Npb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMThUbHNDTlNlc3Npb25fc2ltcGxlOgorCisgICBhZGRlZCBjaGVja3MgZm9yIGNoZWNraW5nIGRpcmVjdCBwYXNzaW5nIG9mIGxvY2FsaG9zdCB0byB0aGUKKyAgIGV4cGVjdGVkIG5hbWUKKworMjAxMC0wNi0zMCAxNTo1OSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlcjoKKworICAgY2hlY2sgZm9yIHdpbGRjYXJkIHN1cHBvcnQKKworMjAxMC0wNi0zMCAxNTo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc3VwcG9ydCBTQU4gYW5kIENOIHdpbGRjYXJkIG1hdGNoaW5nIHBlciBzcGVjCisKKzIwMTAtMDYtMzAgMTU6MDAgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ2lwaGVyVGVzdHMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ3JsLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNBZ2VudFRyYXAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc05hbWUsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1RyYXBkVXNlciwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVmFycywgIAorICAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NjaXBoZXJUZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc2FnZW50dHJhcHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNuYW1ldGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NhbnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzZXJ2ZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdHJhcGR1c2VydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdHNtcHJlZml4LCAKKyAgICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFEdGxzVXNlcl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMWR0bHN1ZHB1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJUbHNVc2VyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAydGxzdGNwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExRHRsc1NlcnZlcl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMWR0bHN1ZHBzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMlRsc1NlcnZlcl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMnRsc3RjcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzRHRsc1Nhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM2R0bHN1ZHBzYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTRUbHNTYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTR0bHN0Y3BzYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFEdGxzVHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMWR0bHN1ZHB0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJUbHNUcmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIydGxzdGNwdHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxRHRsc0FnZW50VHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMWR0bHN1ZHBhZ2VudHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMlRsc0FnZW50VHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMnRsc3RjcGFnZW50dHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxRHRsc0NybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MWR0bHN1ZHBjcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJUbHNDcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJ0bHN0Y3Bjcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFEdGxzQ2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MWR0bHNjaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUyVGxzQ2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MnRsc2NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDBUbHNJcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwdGxzaXB2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMFRsc1BlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwdGxzdGNwcGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFEdGxzUGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFkdGxzcGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFEdGxzVHNtUHJlZml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxZHRsc3RzbXByZWZpeF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMlRsc1RzbVByZWZpeF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMnRsc3RzbXByZWZpeF9zaW1wbGU6CisKKyAgIG1vdmVkIHRlc3QgZmlsZXMgYXJvdW5kIGZvciBiZXR0ZXIgbmFtaW5nCisKKzIwMTAtMDYtMzAgMTQ6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvcHkgZHRscyB0cmFuc3BvcnQgYWRkcmVzcyB0byB0aGUgZXhwZWN0ZWQgaG9zdG5hbWUKKworMjAxMC0wNi0zMCAxNDo1OCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzZXQgdGhlIGV4cGVjdGVkIGhvc3RuYW1lIGZyb20gdGhlIHRyYW5zcG9ydCBzdHJpbmcgaWYgcG9zc2libGUKKworMjAxMC0wNi0zMCAxNDo1OCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhIGJpdCBtb3JlIGhlbHAgb3V0cHV0IGJ5IGRlZmF1bHQKKworMjAxMC0wNi0yOSAyMjoyOSAgdGFuZGVycworCisgICAqIGFwcHMvc25tcHRyYXBkX2F1dGguYzoKKworICAgRm9sbG93LXVwIGZvciByMTkxMTY6IG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIGFnZW50IGNvbmZpZworCisyMDEwLTA2LTI5IDIyOjE4ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmg6CisKKyAgIEFkZCBtaXNzaW5nIGNvbmZpZ19yZXF1aXJlcworCisyMDEwLTA2LTI5IDE3OjMzICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wY21kLjEuZGVmOgorCisgICByZXdvcmsgdGhlIHNubXBjbWQgbWFudWFsIHBhZ2UgdG8gc2VwYXJhdGUgb3V0IHRoZSBmbGFncyBpbnRvCisgICBzZWN0aW9ucyBhcHByb3ByaWF0ZSBmb3IgdGhlaXIgdXNhZ2UgdHlwZQorCisyMDEwLTA2LTI5IDE2OjUxICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgcG9kIGRvY3MsIHNvbWUgZGVmYXVsdCB2YWwgZml4ZXMsIGluZm8gb3V0cHV0IG5vcm1hbGl6ZWQKKworMjAxMC0wNi0yOSAxNjozMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIGFkZGVkIHNzaC5oIGluY2x1ZGUKKworMjAxMC0wNi0yOSAxNjoyNyAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgcmVvcmdhbml6ZSB0aGUgbWFudWFsIHBhZ2UgYSBiaXQgZm9yIFNOTVB2MyBhbmQgVExTCisKKzIwMTAtMDYtMjkgMTY6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IGRlZmF1bHQgdGxzIHJlZ2lzdHJhdGlvbnMKKworMjAxMC0wNi0yOSAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIGNoZWNrIGZvciBOVUxMIHRyYW5zcG9ydHMgYWZ0ZXIgYW4gb3BlbiBmYWlscworCisyMDEwLTA2LTI5IDE2OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZpbmcgbG9nZ2luZyBhcm91bmQgc28gdGhhdCBvcGVuc3NsIGVycm9ycyBhcmUgcHJpbnRlZCBvbgorICAgZmFpbHVyZXMKKworMjAxMC0wNi0yOSAxNjoyNiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdHNtcHJlZml4OgorCisgICBmaXggc29tZSBub24taW50ZXJhY3RpdmUgaW52b2NhdGlvbiBpc3N1ZXMKKworMjAxMC0wNi0yOSAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZSBzb21lIGNvbW1vbiBjb2RlIGludG8gYSBjb21tb24gZnVuY3Rpb24KKworMjAxMC0wNi0yOCAxOToxMyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NjaXBoZXJUZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxZHRsc2NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJ0bHNjaXBoZXJzX3NpbXBsZToKKworICAgY2lwaGVyIHN1aXRlIHNlbGVjdGlvbiBhbmQgdGVzdHMgZm9yIGl0CisKKzIwMTAtMDYtMjggMTk6MTIgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL0xJQ0VOU0U6CisKKyAgIGxpY2Vuc2UgdXBkYXRlcworCisyMDEwLTA2LTI4IDE5OjEyICBoYXJkYWtlcgorCisgICAqICBweXRob24vUkVBRE1FLCBweXRob24vbmV0c25tcC9jbGllbnQucHksICAgCisgICAgICBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBTTk1QdjMgb3ZlciBUTFMgc3VwcG9ydAorCisyMDEwLTA2LTI4IDE5OjEyICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHk6CisKKyAgIGJldHRlciBvdXRwdXQgc2hvd2luZyB0ZXN0IHR5cGVzCisKKzIwMTAtMDYtMjggMDA6NTQgIHRhbmRlcnMKKworICAgKiAgbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCAgCisgICAgICAgbWFuL25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZjoKKworICAgQ0hBTkdFUzogbWFuOiBjbGVhbiB1cCBtYW51YWwgcGFnZXMKKyAgIChmcm9tIERlYmlhbiBwYXRjaCA1Nl9tYW5wYWdlKQorCisyMDEwLTA2LTI3IDIzOjI5ICB0YW5kZXJzCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfYXV0aC5jOgorCisgICBDSEFOR0VTOiBidWlsZDogRG8gbm90IGNhbGwgdmFjbV9zdGFuZGFyZF92aWV3cygpIG9yCisgICBpbml0X3ZhY21fY29uZmlnX3Rva2VucygpIGlmIHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSB3YXMgbm90CisgICBjb21waWxlZAorICAgKGZyb20gRGViaWFuIHBhdGNoIDYxX3ZhY21fbWlzc2luZ19kZXBlbmRlbmN5X2NoZWNrKQorCisyMDEwLTA2LTI3IDAzOjIzICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IGFwcCB0YWcgY29tcGxldGlvbnMKKworMjAxMC0wNi0yNyAwMDo1NiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQsIGxvY2FsL25ldC1zbm1wLWNlcnQuY29uZjoKKworICAgaGFuZGxlIGNvbmZpZyBmaWxlIHNldHRpbmcgaW50ZXJhY3RpdmUsIHRydWUvZmFsc2UgdmFsdWVzIGhhbmRsZWQKKyAgIGluIGNvbmZpZworCisyMDEwLTA2LTI2IDIwOjU4ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IHNvbWUgYnVncyB3LyBzcGFjZXMgaW4gbmFtZXMgYW5kIGFwcCB0YWcgaGVscAorCisyMDEwLTA2LTI2IDE5OjM4ICBtYXJ6CisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBmaXggdGVzdHMgdG8gdXNlIG5vbi1pbnRlcmFjdGl2ZSAtSQorCisyMDEwLTA2LTI2IDE3OjQ2ICBtYXJ6CisKKyAgICogbG9jYWwvY2VydGdlbi10ZXN0LnBsLCBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBiZXR0ZXIgaW50ZXJhY3RpdmUsID89aGVscCwgPHRhYj4gY29tcGwsIG1vcmUgaGVscCwgU0FOIGxvb3AKKyAgIGZvcm1hdCBhbmQgdGVybWluYXRpb24gZml4LCB0b2xlcmF0ZSBzcGFjZXMgaW4gZmllbGRzIGFuZAorICAgZmlsZW5hbWVzLCBtb3JlIGNvbXBsZXRlIGVycm9yIG91dHB1dCwgZW1icnlvbmljIGltcG9ydCBmcm9tIHVybAorCisyMDEwLTA2LTI2IDEzOjQ4ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgTW9yZSBjb21waWxlciB3YXJuaW5nIGZpeGVzLgorCisyMDEwLTA2LTI2IDEzOjQ3ICBidmFzc2NoZQorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZpeGVkIHRoZSBlcnJvcnMgaW4gYWNjb25maWcuaCBhbmQgcmVnZW5lcmF0ZWQKKyAgIG5ldC1zbm1wLWNvbmZpZy5oLmluLgorCisyMDEwLTA2LTI2IDEzOjQ0ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgU01VWCBNSUIgaW1wbGVtZW50YXRpb24uCisKKzIwMTAtMDYtMjYgMDA6NDUgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NhbnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNkdGxzdWRwc2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0dGxzdGNwc2FuX3NpbXBsZToKKworICAgZml4ZXMgYW5kIHRlc3RpbmcgZm9yIGNoZWNraW5nIFNBTiBETlMgbmFtZXMgZnJvbSB0aGUgc2VydmVyCisKKzIwMTAtMDYtMjYgMDA6NDQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzbmFtZXRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzZXJ2ZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExZHRsc3VkcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEydGxzdGNwc2VydmVydGVzdHNfc2ltcGxlOgorCisgICBnZW5lcmljaXplIHRoZSBzZXJ2ZXIgbmFtZSB0ZXN0cworCisyMDEwLTA2LTI1IDIzOjAxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC90c20tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmgsICAgCisgICAgICBzbm1wbGliL3NubXB0c20uYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0c21wcmVmaXgsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMWR0bHN0c21wcmVmaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJ0bHN0c21wcmVmaXhfc2ltcGxlOgorCisgICB1c2VwcmVmaXggc2NhbGFyIHRlc3RpbmcgYW5kIHN1cHBvcnQKKworMjAxMC0wNi0yNSAyMzowMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzOgorCisgICByZW1vdmUgZGVidWdnaW5nIGxpbmVzCisKKzIwMTAtMDYtMjUgMjM6MDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0czoKKworICAgcHV0IGluIG9ubHkgbWluaW1pYWwgZGVidWcgZmxhZ3MKKworMjAxMC0wNi0yNSAyMzowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFkdGxzdWRwY3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQydGxzdGNwY3JsX3NpbXBsZToKKworICAgY29kZSBhbmQgdGVzdCBjYXNlcyBmb3IgQ1JMIGhhbmRsaW5nCisKKzIwMTAtMDYtMjUgMTU6MjQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZToKKworICAgQWRkZWQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIHByaW50ZWQgYnkgdGhlIFBlcmwKKyAgIGludGVycHJldGVyLgorCisyMDEwLTA2LTI1IDEzOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZWR1Y2UgbnVtYmVyIG9mIHJlc2VuZCBhdHRlbXB0cyBhbmQgdGltZW91dAorCisyMDEwLTA2LTI1IDEzOjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsIHNubXBsaWIvY2VydF91dGlsLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgd2FybmluZyBmaXhlcworCisyMDEwLTA2LTI1IDEzOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHJlbW92ZSBsb2dpYyB0eXBvIGZyb20gcHJldmlvdXMgY29tbWl0CisKKzIwMTAtMDYtMjUgMTM6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwdGxzaXB2Nl9zaW1wbGU6CisKKyAgIElQdjYgZml4ZXMgZm9yIFRDUAorCisyMDEwLTA2LTI1IDEzOjAxICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFJldmVydGluZyAxOTA5NSwgaXQgYnJlYWtzIHRlc3RzCisKKzIwMTAtMDYtMjUgMDk6NDAgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcHRyYW5zbGF0ZTogZml4ZWQgcHJpbnRpbmcgb2YgcmFuZ2VzIHdpdGggVU5TSUdORUQKKyAgIHR5cGUuCisKKzIwMTAtMDYtMjQgMjM6NTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBmdW5jdGlvbiBuYW1lcyBmb3Igc3RhdCBpbmNyZWFzZXMKKworMjAxMC0wNi0yNCAyMzo1MiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZml4IGVycm9ycyBpbiBjb21tZW50cworCisyMDEwLTA2LTI0IDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb21tZW50cyBmb3IgNS40IGZvciBkdGxzCisKKzIwMTAtMDYtMjQgMjM6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNvbW1lbnRzIGZvciA1LjMuMgorCisyMDEwLTA2LTI0IDIzOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjbGllbnQgc2lkZSBjb25uZWN0IGNvbW1lbnRzCisKKzIwMTAtMDYtMjQgMjM6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvdW50ZXIgYW5kIGNvbW1lbnQgaW1wcm92ZW1lbnRzCisKKzIwMTAtMDYtMjQgMjM6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHVwZGF0ZSBjb3VudGVyIGNhbGxzIGFuZCBjb21tZW50IHRleHQKKworMjAxMC0wNi0yNCAxOTowMyAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6CisKKyAgIE1vdmVkIExEX0xJQlJBUllfUEFUSCBzZXR1cCBmcm9tIGluZGl2aWR1YWwgdGVzdHMgc2NyaXB0cyB0bworICAgc2ltcGxlX1RFU1RDT05GLnNoLgorCisyMDEwLTA2LTI0IDE5OjAyICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgRml4ZWQgYSBjb21tZW50LgorCisyMDEwLTA2LTI0IDE3OjQ4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oOgorCisgICBTaG91bGQgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHIxOTA4NC4KKworMjAxMC0wNi0yNCAxNzo0NyAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNi0yNCAxMjozMCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICAidGVzdCAtZSIgaXNuJ3QgcG9ydGFibGU7IHVzZSAidGVzdCAteCIgaW5zdGVhZCBmb3IgdGhlIFBlcmwKKyAgIHN5c3RlbSgpCisgICBjaGVjaworCisyMDEwLTA2LTIzIDExOjE0ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgdmFsdWUgb2YgSVAtTUlCOjppcHY2SW50ZXJmYWNlRm9yd2FyZGluZyBvbgorICAgTGludXgKKyAgIAorICAgVGhlIHZhbHVlIHdhcyAwIChub3QgZm9yd2FyZGluZykgb3IgMSAoZm9yd2FyZGluZyksIHNob3VsZCBiZSAyCisgICBhbmQgMQorICAgaW5zdGVhZCAtIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5LmZvcndhcmRpbmdfdjYgaXMgYm9vbGVhbiwgbm90CisgICBUcnV0aFZhbHVlLgorCisyMDEwLTA2LTIyIDIzOjA2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0czoKKworICAgc3VwcG9ydCBmb3IgY2VydFNlY05hbWUgbWFwcGluZyBmcm9tIGEgbG9jYWwgY2VydCBmaWxlIG5hbWUgYW5kIGEKKyAgIHRlc3QgZm9yIGl0CisKKzIwMTAtMDYtMjIgMjI6NDQgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAucG06CisKKyAgIGRvY3VtZW5hdGlvbiB1cGRhdGUgdG8gY2xlYW4gdXAgYW5kIGluY2x1ZGUgVExTIHBhcmFtZXRlcnMKKworMjAxMC0wNi0yMiAyMjo0NCAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIHN1cHBvcnQgZm9yIHBhc3NpbmcgaWRlbnRpdGllcyBhbmQgZnVsbCB3b3JraW5nIHZlcnNpb24KKworMjAxMC0wNi0yMiAyMjo0NCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDB0bHN0Y3BwZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMWR0bHNwZXJsLnQ6CisKKyAgIHBlcmwgVExTL0RUTFMgdGVzdHMKKworMjAxMC0wNi0yMiAyMjo0MyAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIGZpcnN0IHB0YWNoIG9uIFNOTVAvVExTIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24gZnVuY3Rpb24KKworMjAxMC0wNi0yMiAyMjo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZmlyc3Qgd29ya2luZyBzdXBwb3J0IGZvciBhIGRlbGF5ZWQgY2xvc2UoKSB0byBhdHRlbXB0IHRvIHNlbmRpbmcKKyAgIG91dHN0YW5kaW5nIHBhY2tldHMgaW4gdGhlIHF1ZXVlOyB0aGlzIGlzIHJlcXVpcmVkIGZvciBzbm1wdHJhcAorICAgdG8gd29yayBhdCBhbGwgd2hlbiBzZW5kaW5nIHRyYXBzIChub3QgaW5mb3Jtcykgb3ZlciBEVExTCisKKzIwMTAtMDYtMjIgMTk6MDMgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaDoKKworICAgQ0hBTkdFUzogTWluR1c6IHRlc3RzIFQwNTkgYW5kIFQwNjUgZG8gbm93IHBhc3MuCisKKzIwMTAtMDYtMjIgMTk6MDEgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jOgorCisgICBUaGUgd2lkdGggYXJndW1lbnQgZm9yICUuKmQgbXVzdCBoYXZlIHR5cGUgaW50LCBub3Qgc2l6ZV90LiBUaGlzCisgICBidWcgd2FzIGludHJvZHVjZWQgaW4gcjE5MDE0LgorCisyMDEwLTA2LTIyIDE4OjU3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmM6CisKKyAgIENIQU5HRVM6IE1pbkdXOiBydW5fc2hlbGxfY29tbWFuZCgpIHdpdGggZWl0aGVyIGlucHV0IG9yIG91dHB1dAorICAgKGJ1dCBub3QgYm90aCkgZG9lcyBub3cgd29yay4KKyAgIFRoaXMgZGlkIG5vdCB3b3JrIHVudGlsIG5vdyBiZWNhdXNlIG9uIE1pbkdXIG1rc3RlbXAoKSBnZW5lcmF0ZXMKKyAgIGEgTWluR1ctc3R5bGUgcGF0aCAoL3RtcC8uLi4pIHdoaWxlIHN5c3RlbSgpIGludm9rZXMgY21kLmV4ZSBhbmQKKyAgIGhlbmNlIGV4cGVjdHMgYSBXaW5kb3dzLXN0eWxlIHBhdGggKEM6XC4uLikuCisKKzIwMTAtMDYtMjIgMTc6MzkgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgQWxzbyByZXBvcnQgdGhlIHBvcnQgc3BlY2lmaWNhdGlvbiBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXS4KKworMjAxMC0wNi0yMiAxNzozOCAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZToKKworICAgUmVwbGFjZWQgYW4gZXhwbGljaXQgdGVzdCBmb3IgTWluR1cgYnkgYSB0ZXN0IG9uIEhBVkVfU0lHSFVQLgorCisyMDEwLTA2LTIyIDE3OjM2ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciBTSUdIVVAuCisKKzIwMTAtMDYtMjIgMTc6MzUgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgUmVwb3J0IHdoaWNoIHRlc3RzIGZhaWxlZCwgaWYgYW55LgorCisyMDEwLTA2LTIyIDA4OjM3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgorCisgICBGaXhlZCBhbiBlcnJvciBpbiBhIGNvbW1lbnQgYmxvY2suCisKKzIwMTAtMDYtMjEgMTk6MjYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZToKKworICAgUmVhcnJhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyB0ZXN0IHN1Y2ggdGhhdCBpdCBpcyBubworICAgbG9uZ2VyIG5lY2Vzc2FyeQorICAgdG8gaW52b2tlIHNpbXBsZV9ldmFsX3Rvb2xzLnNoIHdoZW4gdGhpcyBzY3JpcHQgaXMgaW52b2tlZCBhcyBhCisgICB0cmFwIGhhbmRsZXIKKyAgIGJ5IHNubXB0cmFwZC4KKworMjAxMC0wNi0yMSAwODowMSAgZHRzMTIKKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOgorCisgICBFbnN1cmUgdGhhdCBmZHNldCBzdHJ1Y3R1cmUgaXMgcmVzaXplZCBzdWZmaWNpZW50bHkKKyAgIHRvIGFjY29tb2RhdGUgdGhlIHNwZWNpZmllZCBzb2NrZXQgSUQuCisgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IFNoaXlhbGVpLgorCisyMDEwLTA2LTIwIDE5OjMyICBkdHMxMgorCisgICAqICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NtdV9jb21wYXQuYywgc25tcGxpYi9wa2NzLmMsICAgCisgICAgICBzbm1wbGliL3NucHJpbnRmLmM6CisKKyAgIEF2b2lkIGR1cGxpY2F0ZSAodW51c2VkKSBzeW1ib2xzLgorCisyMDEwLTA2LTIwIDE5OjMxICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGU6CisKKyAgIENvbW1lbnRlZCBvdXQgZGVidWcgY29kZS4KKworMjAxMC0wNi0yMCAxOTozMCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIFJlc3RvcmVkIHN1bW1hcnkgc3VjY2Vzcy9mYWlsdXJlIGNvdW50IHJlcG9ydGluZy4KKyAgIEFsc28sIG1vdmVkIGtpbGwuZXhlIHRlc3QgYmFjayB0byBSVU5URVNUUy4KKworMjAxMC0wNi0yMCAxOToyOSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBhZGQgdGhlIHRlc3QgbmFtZSB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKKyAgICJpbnZva2VkIi4KKworMjAxMC0wNi0yMCAxOToyNyAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZToKKworICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IHNraXAgdGhlIHRlc3RzIHRoYXQgcmVxdWlyZSBTSUdIVVAgc2luY2UKKyAgIE1pbkdXIGRvZXMgbm90IHN1cHBvcnQgU0lHSFVQLgorCisyMDEwLTA2LTIwIDE1OjE5ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBBZGRlZCBhIGNvbmZpZ3VyZSB0ZXN0IHRoYXQgZGV0ZWN0cyB3aGV0aGVyIG9yIG5vdCBQZXJsJ3MKKyAgIHN5c3RlbSgpIGZ1bmN0aW9uCisgICBpbnZva2VzIGEgUE9TSVggc2hlbGwuICJtYWtlIHRlc3QiIGRvZXMgbm93IGZhbGwgYmFjayB0byBSVU5URVNUUworICAgaWYgbm90LgorCisyMDEwLTA2LTIwIDE1OjE2ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiBvbiBNaW5HVyAtLSBhZGRlZCAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4gd2hlcmUKKyAgIG5lY2Vzc2FyeS4KKyAgIE5vdGU6IGFsdGhvdWdoIDxuZXQtc25tcC90eXBlcy5oPiBpcyBpbmNsdWRlZCBpbmRpcmVjdGx5IGZyb20gdGhlCisgICAqICAgICAqdHJhbnNwb3J0LmggICAgaGVhZGVyIGZpbGVzLCB0aGVzZSAjaW5jbHVkZSBzdGF0ZW1lbnRzIGFyZQorICAgICAgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgICAgYSBwZXNreSAgICBjaXJjdWxhciBkZXBlbmRlbmNlIGJldHdlZW4KKyAgICAgIDxuZXQtc25tcC90eXBlcy5oPiBhbmQgICAgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4uIAorICAgICAgMjAxMC0wNi0yMCAxNToxMiAgYnZhc3NjaGUKKworCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgQ0hBTkdFUzogTWluR1c6IHJlZnVzZSB0byBydW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMgaWYga2lsbC5leGUKKyAgIGNhbm5vdCBiZSBmb3VuZC4KKworMjAxMC0wNi0yMCAxNToxMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBTaG9ydGVuZWQgdGhlIHNyY2RpciBwYXRoIGJ5IG1ha2luZyBzdXJlIHRoYXQgaXQgZG9lcyBub3QgY29udGFpbgorICAgLy4uCisKKzIwMTAtMDYtMTkgMTg6MzAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIEFkZGVkIHN1cHBvcnQgZm9yIHJ1bm5pbmcgUlVORlVMTFRFU1RTIHdpdGggVGVzdDo6SGFybmVzcyBpbgorICAgYW5vdGhlciBkaXJlY3RvcnkgdGhhbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KKworMjAxMC0wNi0xOSAxNjo0MSAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaDoKKworICAgY29tcGxldGUgcmV3cml0ZSBvZiBwYXJhbXMgdG8gdXNlIHRhYmxlX2RhdGFzZXQgaW5zdGVhZCBvZgorICAgY3JlYXRlLWRhdGFzZXQKKworMjAxMC0wNi0xOSAxNjo0MSAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIHVzZSB0ZXh0IGZvciBoYXNoIHR5cGUgaW4gcGVyc2lzdGVudCBzdG9yZQorCisyMDEwLTA2LTE5IDE2OjQwICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmM6CisKKyAgIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTAtMDYtMTkgMTY6NDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggbWlzc2luZyBzcGVjaWZpZXIgaW4gZGVidWcKKworMjAxMC0wNi0xOSAxNjozOSAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXNlIGRlZmluZSBpbnN0ZWFkIG9mIGNvbnN0YW50OyBmaXggY2hlY2sgZm9yIHJvd3MgdG8gc2F2ZQorCisyMDEwLTA2LTE5IDE2OjM5ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCByZW1vdmUvZmluZCBmdW5jdGlvbiBmb3IgbWFwcy9hZGRycy9wYXJhbXM7IHJlbmFtZSBwYXJhbXMKKyAgIHRhZy0+bmFtZTsKKyAgIGRlc3Ryb3kgLT4gZnJlZTsgZ3JvdXAgcmVjZW50IHRydXN0IGZ1bmN0aW9ucyB0b2dldGhlciBpbiBzcmM7CisgICBkb24ndCBzdG9yZQorICAgcGFyYW1zIGZwIGFzIGJpbmFyeTsgaGFuZCB0ZXh0IGFyZ3MgZm9yIGhhc2ggdHlwZSAoZS5nIC0tc2hhMSkKKworMjAxMC0wNi0xOCAxNTozNSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGNvcnJlY3RlZCBlcnJvciBoYW5kbGluZyBpbiBtaWJJSS9hdC4KKworMjAxMC0wNi0xOCAwNzoyMyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA2LTE4IDAxOjQyICBtYWdmcgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYzoKKworICAgRG8gbm90IGRlZmluZSByZXQgdHdpY2Ugd2hlbiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8gaXMgc2V0LgorCisyMDEwLTA2LTE4IDAxOjM5ICBtYWdmcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIENvcnJlY3RlZCB0eXBvLgorCisyMDEwLTA2LTE4IDAwOjMxICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIGJldHRlciBORVdTIGFuZCBDSEFOR0VTIGZpbGVzCisKKzIwMTAtMDYtMTcgMjA6MzkgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA2LTE3IDIwOjMxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wNi0xNyAxODo1OSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNSAtPiBWNS42LnByZTEKKworMjAxMC0wNi0xNyAyMDozMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDYtMTcgMTg6NTkgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMTAtMDYtMTcgMTg6NTUgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDYtMTcgMTg6NTQgIGhhcmRha2VyCisKKyAgICogTWFrZWZpbGUudG9wOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA2LTE3IDE4OjM5ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICByZS1lbmFibGUgc29tZSBjb21tYW5kcworCisyMDEwLTA2LTE3IDE3OjQ2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFyczoKKworICAgZm9yZ290IG1pc3NpbmcgcXVvdGVzIGluIFNFVCBvdXRwdXQKKworMjAxMC0wNi0xNyAxNzo0NiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNhZ2VudHRyYXB0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFyczoKKworICAgdGxzIHRlc3RpbmcgY2xlYW51cAorCisyMDEwLTA2LTE3IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgZml4ZXMgZm9yIGFkZHJlc3MgcHJpbnRpbmc7IG1vcmUgdG8gY29tZQorCisyMDEwLTA2LTE3IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vc3RseSBwcm9wZXJseSBzZXQgcmVtb3RlL2xvY2FsIHRyYW5zcG9ydCBwYXJhbWV0ZXJzCisKKzIwMTAtMDYtMTcgMTc6NDUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzYWdlbnR0cmFwdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMWR0bHN1ZHBhZ2VudHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMnRsc3RjcGFnZW50dHJhcHRlc3RzX3NpbXBsZToKKworICAgdGVzdHMgZm9yIGFnZW50cyBzZW5kaW5nIG9mIHRyYXBzIG92ZXIgKEQpVExTCisKKzIwMTAtMDYtMTcgMTc6NDUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxZHRsc3VkcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMnRsc3RjcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMWR0bHN1ZHBzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMnRsc3RjcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxZHRsc3VkcHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMnRsc3RjcHRyYXB0ZXN0c19zaW1wbGU6CisKKyAgIG1vdmUgZXhwb3J0IHN0YXRlbWVudHMgdG8gdGhlIHN1cHBvcnQgZmlsZSBmb3Igc2ltcGxpY2l0eQorCisyMDEwLTA2LTE3IDE3OjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlIHRscyBib290c3RyYXBwaW5nIHRvIHBvc3RfcHJlbWliIHNvIG90aGVyIGNvbmZpZyB0b2tlbnMgY2FuCisgICB1c2UgdGhlIGNlcnQgbG9hZGluZyByZXN1bHRzCisKKzIwMTAtMDYtMTcgMTc6NDQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYzoKKworICAgYWRkZWQgc25tcF9lbnVtIHRlc3RzIHB1bGxlZCBmcm9tIHRoZSBtYWluKCkgdGVzdCBhdCB0aGUgYm90dG9tCisgICBvZiB0aGUgb3JpZ2luYWwgLmMgZmlsZQorCisyMDEwLTA2LTE3IDE2OjAwICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jOgorCisgICBFbGltaW5hdGUgImRpZmZlciBpbiBzaWduZWRuZXNzIiB3YXJuaW5nCisKKzIwMTAtMDYtMTcgMDA6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CisKKyAgIHJldmVydCBVRFAgY2hhbmdlcyBmcm9tIHIxODk4NCBzaW5jZSBpdCBicm9rZSB0aGUgVURQIHRyYW5zcG9ydDsKKyAgIHRoZSBzdHJ1Y3QgcHJvYmFibHkgbmVlZHMgdG8gbWF0Y2ggYW5vdGhlciBzdHJ1Y3Qgc29tZXdoZXJlIGVsc2UKKworMjAxMC0wNi0xNiAyMzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgYSBuZXcgS0VZV09SRCBvdXRwdXQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcworCisyMDEwLTA2LTE2IDIzOjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgdXNlIGNvbmZpZ19hbmRfb3BlbiBmb3Igb3BlbmluZyB0aGUgdHJhbnNwb3J0CisKKzIwMTAtMDYtMTYgMjM6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGV4dHJhIGRlYnVnZ2luZyBzdGF0ZW1lbnRzCisKKzIwMTAtMDYtMTYgMjI6MTQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzOgorCisgICBleHBsaWNpdGx5IGRlY2xhcmUgdHJ1c3QgY2VydGlmaWNhdGVzIHRvIHRyYW5zcG9ydAorCisyMDEwLTA2LTE2IDIyOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNsZWFudXAgc29tZSBsb3N0IG1lbW9yeSBvbiBjbG9zaW5nCisKKzIwMTAtMDYtMTYgMjE6NTYgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCB0eXBvcworCisyMDEwLTA2LTE2IDIxOjM0ICBkdHMxMgorCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgCisgICAgICAgYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24iIHdhcm5pbmdzIGZyb20KKyAgIGFnZW50IGNvZGUgWy1Xc2lnbi1jb21wYXJlXQorCisyMDEwLTA2LTE2IDIwOjE2ICBkdHMxMgorCisgICAqICBzbm1wbGliL2FzbjEuYywgc25tcGxpYi9jaGVja192YXJiaW5kLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgc25tcGxpYi9kaXJfdXRpbHMuYywgICAKKyAgICAgIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9wYXJzZS5jLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3RleHRfdXRpbHMuYywgc25tcGxpYi92YWNtLmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgInNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbiIgd2FybmluZ3MgZnJvbQorICAgbGlicmFyeSBjb2RlIFstV3NpZ24tY29tcGFyZV0KKworMjAxMC0wNi0xNiAxOTozNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIG9sZGVyIG5vLWxvbmdlci1uZWVkZWQtZHVwbGljYXRlLWNvbmZpZyBlbnRyaWVzCisKKzIwMTAtMDYtMTYgMTk6MTQgIGR0czEyCisKKyAgICogc25tcGxpYi92YWNtLmM6CisKKyAgIEZpeCBwcm9jZXNzaW5nIG9mIHZpZXcgbWFza3MgKG1pc3BsYWNlZCBwYXJlbnRoZXNlcykKKworMjAxMC0wNi0xNiAxODo0NSAgZHRzMTIKKworICAgKiAgYXBwcy9hZ2VudHh0cmFwLmMsIGFwcHMvc25tcG5ldHN0YXQvaWYuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsICAgCisgICAgICBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgYXBwcy9zbm1wdXNtLmM6CisKKyAgIEVsaW1pbmF0ZSAic2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uIiBmcm9tIGFwcCBjb2RlCisgICBbLVdzaWduLWNvbXBhcmVdCisKKzIwMTAtMDYtMTYgMTc6MjIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN0cmFwZHVzZXJ0ZXN0czoKKworICAgY2hlY2sgZm9yIGluZm9ybXMgc2VudCBvdmVyIHRscyB0cmFuc3BvcnRzCisKKzIwMTAtMDYtMTYgMTc6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvcHkgb3RoZXIgdmFsdXNlIGZyb20gcGFyZW50IHRsc2Jhc2UgZGF0YQorCisyMDEwLTA2LTE2IDE3OjIxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3RyYXBkdXNlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFkdGxzdWRwdHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIydGxzdGNwdHJhcHRlc3RzX3NpbXBsZToKKworICAgYWRkZWQgYmFzaWMgdHJhcCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgdGVzdHMKKworMjAxMC0wNi0xNiAxNzoyMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHM6CisKKyAgIHJlbW92ZSBubyBsb25nZXIgbmVlZGVkIHRlbXAgZmlsZSB0b3VjaGVzCisKKzIwMTAtMDYtMTYgMTc6MjAgIGhhcmRha2VyCisKKyAgICogIGFnZW50L3NubXBfYWdlbnQuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGFkZGVkIGEgbmV3IGZ1bmN0aW9uIGFuZCB0cmFuc3BvcnQgZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgZl9vcGVuCisgICBjYWxsIGhhcyBiZWVuIGNhbGxlZCB5ZXQKKworMjAxMC0wNi0xNiAxNzoyMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgdW51c2VkIHZhciB3YXJuaW5nIGNsZWFudXAKKworMjAxMC0wNi0xNiAxNzoxOSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGFkZGVkIHRydXN0Q2VydCBjb25maWd1cmF0aW9uIHRva2VuCisKKzIwMTAtMDYtMTYgMTc6MTkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzOgorCisgICBtaW5vciB0d2Vha3MgZm9yIHRlc3RpbmcgY2xhcml0eQorCisyMDEwLTA2LTE2IDE3OjE4ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMWR0bHN1ZHB1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJ0bHN0Y3B1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGU6CisKKyAgIG1vdmVkIGNvbXBsZXggKEQpVExTIHRvIGEgc2VwYXJhdGUgc2VjdGlvbiBhbmQgbWFkZSB0aGUgdHJhbnNwb3J0CisgICB0ZXN0cyBvbmx5IHRlc3QgbWluaW1hbCBzdXBwb3J0CisKKzIwMTAtMDYtMTYgMTc6MTcgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBhZGQgbWVjaGFuaXNtcyBmb3Igc3BlY2lmeWluZyBhbmQgZXhwZWN0aW5nIHRoZSBob3N0bmFtZSBvZiB0aGUKKyAgIGZhciBzaWRlCisKKzIwMTAtMDYtMTYgMTc6MTcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2VydmVydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnM6CisKKyAgIHRlc3RzIGZvciB2ZXJpZnlpbmcgc2VydmVyIGNlcnRpZmljYXRlIGNoZWNrIGZhaWx1cmVzCisKKzIwMTAtMDYtMTYgMTc6MTcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RscywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzZXJ2ZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExZHRsc3VkcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEydGxzdGNwc2VydmVydGVzdHNfc2ltcGxlOgorCisgICB0ZXN0aW5nIGZvciBjaGVja2luZyBjbGllbnQgc2lkZSB2ZXJpZmljYXRpb24gb2Ygc2VydmVyCisgICBjZXJ0aWZpY2F0ZXMKKworMjAxMC0wNi0xNiAxNzoxNiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaDoKKworICAgc2V0dXAgZm9yIGEgaG9zdG5hbWUgY29uZmlnIG9wdGlvbgorCisyMDEwLTA2LTE2IDE3OjE2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzZXR1cCBmb3IgYSBob3N0bmFtZSBjb25maWcgb3B0aW9uCisKKzIwMTAtMDYtMTYgMTc6MTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2hlY2sgdG8gbWFrZSBzdWVyIHNzbCBwb2ludGVyIGhhcyBiZWVuIGNyZWF0ZWQgdmlhIGZfb3BlbiBjYWxsCisKKzIwMTAtMDYtMTYgMTU6MDIgIGR0czEyCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmgsIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIERlY2xhcmUgJ3NodXRkb3duX3BlcmwnIHByb3Blcmx5LgorCisyMDEwLTA2LTE2IDE0OjM3ICBkdHMxMgorCisgICAqIGFnZW50L3NubXBkLmMsIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sY2RfdGltZS5jOgorCisgICBFbGltaW5hdGUgInNpZ25lZCBhbmQgdW5zaWduZWQgdHlwZSBpbiBjb25kaXRpb25hbCBleHByZXNzaW9uIgorICAgd2FybmluZ3MgWy1Xc2lnbi1jb21wYXJlXQorCisyMDEwLTA2LTE2IDE0OjI3ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgRWxpbWluYXRlICJ1bnVzZWQgdmFyaWFibGUiIHdhcm5pbmcKKworMjAxMC0wNi0xNiAxNDoyMiAgZHRzMTIKKworICAgKiAgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L3NubXBkLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgorCisgICBFbGltaW5hdGUgdmFyaW91cyAiaW1wbGljaXQgY29udmVyc2lvbiIgd2FybmluZ3MgWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xNiAxMzoxMyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYXBwcy9zbm1wdmFjbS5jLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgc2lnbmVkLXZzLXVuc2lnbmVkIHdhcm5pbmdzIGZyb20gbnVtZXJpYyBzY2FuZgorICAgcHJvY2Vzc2luZyBbLXBlZGFudGljXQorCisyMDEwLTA2LTE2IDAzOjI4ICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICB0aGUgZ3JlYXQgdW4tbmFtZWQgY29udGFpbmVyIGh1bnQKKworMjAxMC0wNi0xNiAwMzoyNyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICBzaGFyZSBjYWNoZSBiZXR3ZWVuIHRhYmxlIGFuZCBjb3VudCBzY2FsYXI7IHdoZW4gcmVhZGluZyBjb25maWcsCisgICBhZGQgdG8KKyAgIGxpYnJhcnkgY29udGFpbmVycyBmb3IgYWN0aXZlIHJvd3MsIHRhYmxlIGNvbnRhaW5lcnMgZm9yIGluYWN0aXZlCisgICByb3dzOworICAgdXNlciBjZXJ0X3V0aWwgYXBpcyBpbnN0ZWFkIG9mIGRpcmVjdCBjb250YWluZXIgbWFuaXB1bGF0aW9uOworICAgd2hlbgorICAgc2F2aW5nIGluYWN0aXZlIG1hcCByb3dzLCBza2lwIGFsbCBidXQgbm9uVm9sYXRpbGUKKworMjAxMC0wNi0xNiAwMzoyNiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZml4IGRlYnVnIHRva2VuIHR5cG8KKworMjAxMC0wNi0xNiAwMzoyNSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgYXBpIGZvciBhZGRpbmcgZW50cmllcyB0byB0bHRzbSBhZGRyLCBwYXJhbXMgYW5kIGNlcnQgbWFwCisgICBjb250YWluZXJzOworICAgcmVnaXN0ZXIgc2Ugc2xpc3QgcGFpciBlYXJsaWVyIHNvIHRoZXkgYXJlIGF2YWlsYWJsZSBkdXJpbmcKKyAgIGNvbmZpZyBwYXJzaW5nOworICAgbWFrZSBzdXJlIGNvbmZpZyBzdHJpbmdzIGFyZSBudWxsIHRlcm1pbmF0ZWQKKworMjAxMC0wNi0xNSAyMTo0MiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIFN1cHByZXNzIHdhcm5pbmdzOgorICAgJ3N0cnVjdCBubG1zZ2hkciBkZWZpbmVkIGluc2lkZSBwYXJhbWV0ZXIgbGlzdCcgYW5kCisgICAnZnVuY3Rpb24gX2xvYWRfdjYgZGVjbGFyZWQgYnV0IG5ldmVyIGRlZmluZWQnCisKKzIwMTAtMDYtMTUgMjE6MzAgIGR0czEyCisKKyAgICogIGFnZW50L2tlcm5lbC5jLCBhcHBzL3NubXB0cmFwZF9zcWwuYywgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvY211X2NvbXBhdC5jLCBzbm1wbGliL3BrY3MuYywgc25tcGxpYi9zbnByaW50Zi5jOgorCisgICBFbGltaW5hdGUgImVtcHR5IHRyYW5zbGF0aW9uIHVuaXQiIHdhcm5pbmdzIFstcGVkYW50aWNdCisKKzIwMTAtMDYtMTUgMDc6MDcgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAzY29weV9ud29yZF9jbGliLmM6CisKKyAgIEFkZCB0ZXN0IG9mIGNvcHlfbndvcmQKKworMjAxMC0wNi0xNCAyMTozMiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOgorCisgICBFbGltaW5hdGUgIm92ZXJmbG93IGluIGltcGxpY2l0IGNvbnN0YW50IGNvbnZlcnNpb24iIHdhcm5pbmdzCisgICBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTE0IDE1OjUxICBkdHMxMgorCisgICAqIGFnZW50L3NubXBkLmMsIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEVsaW1pbmF0ZSAic3RyaW5nIGxlbmd0aCBncmVhdGVyIHRoYW4gNTA5IiB3YXJuaW5ncyBbLXBlZGFudGljXQorCisyMDEwLTA2LTE0IDE1OjE5ICBkdHMxMgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgorCisgICBFbGltaW5hdGUgImluaXRpYWxpemVyIGVsZW1lbnQgaXMgbm90IGNvbXB1dGFibGUiIHdhcm5pbmdzCisgICBbLXBlZGFudGljXQorCisyMDEwLTA2LTE0IDA1OjI3ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXBkYXRlIGNvdW50IGhhbmRsZXJzIHRvIGNvdW50IG5vbi1hY3RpdmUgcm93cyB0b28KKworMjAxMC0wNi0xNCAwNToxMiAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgb25seSB0d2VhayBzdG9yYWdlVHlwZSBmb3IgYWN0aXZlIHJvd3M7IHJlc2V0IGVudHJ5IGZsYWdzIHdoZW4KKyAgIHJlbW92aW5nIGZyb20KKyAgIGNlcnRfdXRpbCBtYXBzOyB3aGVuIGNyZWF0ZWluZyByb3dzIGZyb20gY2VydF91dGlsIG1hcHMsIHNldAorICAgc3RyYWdldFR5cGUgdG8KKyAgIHZvbGF0aWxlIGlmIG5vblZvbGF0aWxlIGZsYWcgbm90IHNldDsgZG9udCBmcmVlIGNhY2hlIGluCisgICBjYWNoZV9sb2FkIG9uIGVycgorCisyMDEwLTA2LTE0IDA1OjEwICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgbW92ZSB0bHN0bUFkZHIgdGFibGUgY29uZmlnIHBhcnNpbmcgdG8gY2VydF91dGlsOyBhZGQgY2FjaGUgdG8KKyAgIG1lcmdlIGNlcnRfdXRpbAorICAgYWRkcnMgKGFjdGl2ZSkgYW5kIG5vbi1hY3RpdmUgcm93czsKKworMjAxMC0wNi0xNCAwNToxMCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgbm9uVm9sYXRpbGUgZmxhZyB0byB0bHN0bUFkZHIgdGFibGU7IHNldCBjb250YWluZXIgbmFtZTsgc2tpcAorICAgJzB4JyBpbiBmcAorCisyMDEwLTA2LTE0IDA1OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY2hhbmdlIExPR19FUlIgdG8gTE9HX0lORk8gZm9yIG5vbi1lcnJvciBsb2cgbXNnCisKKzIwMTAtMDYtMTMgMjE6MDIgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAiaW1wbGljaXQgY29udmVyc2lvbiIgd2FybmluZ3MgZnJvbQorICAgTWZELWJhc2VkIE1JQiBtb2R1bGUgY29kZSwgYW5kIE1mRCB0ZW1wbGF0ZSBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTEyIDIxOjMzICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAiaW1wbGljaXQgY29udmVyc2lvbiIgd2FybmluZ3MgZnJvbSAobm9uLU1mRCkKKyAgIE1JQiBtb2R1bGUgY29kZS4gWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xMiAxMDoyNiAgZHRzMTIKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF9pbmRleC5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3NjYWxhci5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgICAKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsICAgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jLCBzbm1wbGliL2ZpbGVfdXRpbHMuYywgICAKKyAgICAgIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAiaW1wbGljaXQgY29udmVyc2lvbiIgd2FybmluZ3MgZnJvbSBsaWJyYXJ5LAorICAgYXBwcyBhbmQgYWdlbnQgZnJhbWV3b3JrK2hlbHBlcnMgY29kZS4gWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xMCAyMDowMSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBsb29rdXAgY2VydCBrZXlzIGZvciB0bHMgZG9tYWluczsgdXNlIFNFQ19NT0RFTCBkZWZpbmUgaW5zdGVhZCBvZgorICAgaGFyZGNvZGVkCisgICBjb25zdGFudDsgYWRkIFNFQ19NT0RFTF9UU00gdG8gYWxsb3dlZCBzZWMgbW9kZWxzIGZvciBtcE1vZGVsCisgICBTTk1QX1ZFUlNJT05fMworCisyMDEwLTA2LTEwIDIwOjAwICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmM6CisKKyAgIGRlZmF1bHQgdG8gcmVhZE9ubHkvYWN0aXZlIGZvciBiYWQgY29uZmlnCisKKzIwMTAtMDYtMTAgMjA6MDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBhZGQgZGVidWc7IHN3aXRjaCB0byBTRUNfTU9ERUxfVFNNIGFuZCB3YXJuIGlmIG90aGVyIHNlY21vZGUgc2V0LAorICAgaW5zdGVhZAorICAgb2Ygc2ltcGx5IGxvZ2dpbmcgdGhhdCBpdCB3b24ndCB3b3JrCisKKzIwMTAtMDYtMTAgMTk6NTkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjaGVjayBwdHJzIGJlZm9yZSBkZXJlZmVyZW5jZQorCisyMDEwLTA2LTEwIDE5OjU4ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1vdmUgc25tcFRsc3RtQWRkclRhYmxlIGRhdGEgbWFuYWdlbWVudCB0byBjZXJ0X3V0aWw7IGltcGxlbWVudAorICAgVEFSR0VUX0FERFIKKyAgIGFuZCBUQVJHRVRfUEFSQU1TIGxvb2t1cCBpbiBjZXJ0IEFQSQorCisyMDEwLTA2LTEwIDE5OjQ3ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHVwZGF0ZSBzZWMgbW9kZWwgZGVmaW5lIG1pc3NlZCBpbiBlYXJsaWVyIGNoZWNraW4KKworMjAxMC0wNi0xMCAxOTo0NiAgcnN0b3J5CisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBjb25maWcgdHJhcHNlc3MgdHJhbnNwb3J0cyBvbiBjcmVhdGlvbjsgc2ltcGxpZnkgaWZkZWZzIGZvcgorICAgRElTQUJMRV9TTk1QVjEKKworMjAxMC0wNi0xMCAxOTo0NiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcGtzbS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdHNtLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBhdXRvIHN3aXRjaCB0byB2MyBmb3IgKGQpdGxzIHNlc3Npb25zIGluc3RlYWQgb2YgbG9nZ2luZyB0aGF0CisgICBvdGhlcnMgd29udAorICAgd29yazsgZGVmaW5lIFRTTSBzZWMgbW9kZWwgd2l0aCBvdGhlciBzZWMgbW9kZWxzOyBjb25zaXN0ZW50bHkKKyAgIHVzZQorICAgU05NUF9TRUNfTU9ERUxfKiBpbiB0aGUgY29kZSwgdXNpbmcgI2RlZmluZXMgZm9yIGJhY2t3YXJkcworICAgY29tcGF0aWJpbGl0eQorICAgdy8qX1NFQ1VSSVRZX01PREVMCisKKzIwMTAtMDYtMTAgMTk6NDYgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGNlcnRUb1RTTjogbW92ZSBtaWIgcmVsYXRlZCBwZXJzaXN0ZW5jZSBiYWNrIGludG8gbWliIG1vZHVsZTsKKyAgIGNlcnRfdXRpbDogYWRkIHRsc3RtUGFyYW1zIHBlcnNpc3RlbmNlOyB1c2Ugc2xpc3QgZm9yIGNlcnQgbWFwCisgICB0eXBlIG5hbWUKKyAgIG1hcHBpbmc7CisKKzIwMTAtMDYtMTAgMTk6NDUgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZyAoY29uc3QpCisKKzIwMTAtMDYtMTAgMDQ6NTggIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jOgorCisgICBBZGQgbWlzc2luZyBpbmRlbnRhdGlvbiBvZiBhIGRvLXdoaWxlIGxvb3AgdG8gbWFrZSB0aGUgY29kZQorICAgcmVhZGFibGUuCisKKzIwMTAtMDYtMDkgMjI6NTcgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgY29tbWVudCBvdXQga2V5VXNhZ2Ugc28gcHJvcGVyIHNlbGYtc2lnbmVkIGNlcnRzIGFyZSBnZW5lcmF0ZWQKKworMjAxMC0wNi0wOSAyMjo1NyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc29saWRpZnkgY2VydGlmaWNhdGUgYWNjZXB0YW5jZSBmb3IgdGhlIGNsaWVudCBzaWRlCisKKzIwMTAtMDYtMDkgMjI6NTcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IGFycmF5IHR5cG8KKworMjAxMC0wNi0wOSAyMjo1NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBsb2cgb3BlbnNzbCBlcnJvcnMgb24gYWNjZXB0IGZhaWx1cmUKKworMjAxMC0wNi0wOSAyMjo1NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJlZ2lzdGVyIGRlZmF1bHQgcG9ydHMgZm9yIHRscy9kdGxzCisKKzIwMTAtMDYtMDkgMjI6NTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZG8gcHJvcGVyIFNUT1JFIGxvYWRpbmcgb2YgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgcmF0aGVyIHRoYW4gZmlsZQorICAgYmFzZWQgbG9hZGluZworCisyMDEwLTA2LTA5IDIyOjU2ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkZWQgdHdvIG5ldyBBUElzOiBuZXRzbm1wX2NlcnRfdHJ1c3QgYW5kIG5ldHNubXBfY2VydF90cnVzdF9jYQorCisyMDEwLTA2LTA5IDIyOjU1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGFkZGVkIHN0cmFpZ2h0ICd0bHMnIHRyYW5zcG9ydCBuYW1lCisKKzIwMTAtMDYtMDkgMjI6NTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGFkZGVkIHN0cmFpZ2h0ICdkdGxzJyB0cmFuc3BvcnQgbmFtZQorCisyMDEwLTA2LTA4IDIxOjA1ICBtYWdmcgorCisgICAqIGFnZW50L01ha2VmaWxlLmluOgorCisgICBJbnN0YWxsIGFnZW50X3JlYWRfY29uZmlnLmggaW4gNS42IGFzIHdlbGwuIEl0IGRpc2FwcGVhcmVkIGluCisgICByMTg4NDMuCisKKzIwMTAtMDYtMDggMDk6MjUgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jOgorCisgICBSZW1vdmUgKG9yIGFjdGl2YXRlKSB1bnVzZWQgdmFyaWFibGVzLgorICAgRml4IG1pc25hbWVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorCisyMDEwLTA2LTA4IDA3OjExICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oOgorCisgICBBUEkgY2hhbmdlcyBmb3IgcHJlbGltaW5hcnkgSEFMX2Jhc2VkIGltcGxlbWVudGF0aW9uIG9mIFVDRCBkaXNrCisgICBtb2R1bGUuCisgICAoT21pdHRlZCBmcm9tIHJldmlzaW9uIDE4OTMyIGNoZWNraW4pCisKKzIwMTAtMDYtMDggMDQ6MTggIHJzdG9yeQorCisgICAqIGFnZW50L01ha2VmaWxlLmluOgorCisgICB1cGRhdGUgbWFrZWZpbGUgZm9yIG1vdmVkIGhlbHBlciBoZWFkZXJzCisKKzIwMTAtMDYtMDcgMjA6MTggIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jOgorCisgICBSZXZlcnRpbmcgcmV2LiAxNzYxNiwgdGhlIG5lY2Vzc2FyeSBjaGVjayBpcyBhbHJlYWR5IGluIHJldi4KKyAgIDE3NDE1LgorCisyMDEwLTA2LTA2IDAzOjQ1ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBJbiBjYXNlIGV4ZWNfcHJlZml4IGlzIHVuc2V0IHRoZW4gc2V0IGl0IHRvCisgICAnJHtwcmVmaXh9JyBpbiBvcmRlciB0byBwaWNrIHVwIG92ZXJyaWRlcyBvZiAkcHJlZml4IGluIG1ha2UKKyAgIGluc3RhbGwuCisKKzIwMTAtMDYtMDQgMDQ6MDYgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGRvIGEgYmV0dGVyIGpvYiBvZiB2ZXJpZnlpbmcgZmluZ2VycHJpbnRzIG9mIHJlbW90ZSBzZXJ2ZXJzCisgICBwdWxsaW5nIGZpbmdlcnByaW50cyBmcm9tIGEgbnVtYmVyIG9mIHBvc3NpYmxlIHBsYWNlcworCisyMDEwLTA2LTA0IDA0OjA1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIGdvIGFoZWFkIGFuZCBsb2cgb3V0cHV0IGZpbGUgZm9yIGVhc2llciBkZWJ1Z2dpbmcgaW4gZXJyb3JzCisKKzIwMTAtMDYtMDQgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGZpeCB0eXBvCisKKzIwMTAtMDYtMDQgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zY2FwaS5jOgorCisgICByZW1vdmUgY29tbWVudCBhYm91dCByYW5kb20gYmVpbmcgaW5hZGVxdWF0ZTsgd2UncmUgZG9pbmcgdGhlCisgICBiZXN0IHdlIGNhbiBiYXNlZCBvbiB3aGF0IHdlIGhhdmUKKworMjAxMC0wNi0wNCAwNDowNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHVzZSBhbm90aGVyIHVzZXIgZm9yIHRlc3Rpbmcgc25tcGFwcCBkZWZhdWx0IGNlcnRpZmljYXRlCisKKzIwMTAtMDYtMDQgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBydW4gYSBkZWZhdWx0IHRlc3Qgd2l0aG91dCBhIGxvY2FsIGtleSB0byBlbnN1cmUgdGhlIHNubXBhcHAgdHlwZQorICAgaXMgcGlja2VkIHVwCisKKzIwMTAtMDYtMDQgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgbG9jYWwgaWRlbnRpdHkgYW5kIHB1bGwgaXQgZnJvbSBhCisgICBmaWxlbmFtZSBvZiB0aGUgaW5pdF9zbm1wKCkgcmVnaXN0ZXJlZCB0eXBlIG5hbWUKKworMjAxMC0wNi0wNCAwNDowMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtOgorCisgICBkb2MgdXBkYXRlCisKKzIwMTAtMDYtMDQgMDQ6MDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA1dW5peC50OgorCisgICB1bml4IHNvY2tldCB0ZXN0CisKKzIwMTAtMDYtMDQgMDQ6MDMgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwM3VkcDYudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNHRjcDYudDoKKworICAgaXB2NiB0ZXN0cworCisyMDEwLTA2LTA0IDA0OjAyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50OgorCisgICBtZW50aW9uIHRlc3QgbmFtZSBpcyBJUHY0CisKKzIwMTAtMDYtMDQgMDQ6MDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQ6CisKKyAgIGNoZWNrIHRoYXQgdHJhbnNwb3J0IHdhcyBjb25maWd1cmVkCisKKzIwMTAtMDYtMDQgMDQ6MDIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbToKKworICAgYWRkIHN1cHBvcnQgZm9yIG5ldC1zbm1wLWNvbmZpZy5oIGNoZWNrcworCisyMDEwLTA2LTA0IDA0OjAxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL05ldFNOTVBUZXN0VHJhbnNwb3J0LnBtLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudDoKKworICAgc29tZSBiYXNpYyB0cmFuc3BvcnQgY2hlY2tpbmcgZm9yIHBlcmw6IHVkcCBhbmQgdGNwCisKKzIwMTAtMDYtMDQgMDQ6MDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvcGVybCwgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMDAxYmFzaWMudDoKKworICAgYmFzaWMgdGVzdHMgZm9yIHBlcmwKKworMjAxMC0wNi0wNCAwNDowMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtOgorCisgICBpbmZyYXN0cnVjdHVyZSBtb2R1bGUgZm9yIHRlc3RpbmcgcGVybCBzdXBwb3J0CisKKzIwMTAtMDYtMDMgMTU6NTYgIGR0czEyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIFBvaW50IExJQntDVVJSRU5ULEFHRSxSRVZJU0lPTn0gZG9jdW1lbnRhdGlvbiB0byB0aGUgY29ycmVjdAorICAgZmlsZS4KKyAgIFdhcm4gYWJvdXQgJ21ha2VkZXBlbmQnIHBpY2tpbmcgdXAgdGVzdGluZyBtb2R1bGUgY29kZS4KKyAgIEVtcGhhc2lzIHVwZGF0ZSBvZiAnZG93bmxvYWQuaHRtbCcgcGFnZQorICAgTWVudGlvbiB1cGRhdGUgb2YgT2ZmaWNpYWwgUGF0Y2hlcworICAgU3VwcHJlc3MgYnJva2VuIGNvbW1hbmRzCisKKzIwMTAtMDYtMDMgMTU6MTYgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuaCwgYWdlbnQvbWliZ3JvdXAvdWNkX3NubXAuaDoKKworICAgUHJlbGltaW5hcnkgSEFMX2Jhc2VkIGltcGxlbWVudGF0aW9uIG9mIFVDRCBkaXNrIG1vZHVsZS4KKyAgIEVuc3VyZXMgY29uc2lzdGVudCByZXBvcnRpbmcgYmV0d2VlbiBVQ0QgYW5kIEhvc3RSZXMgRlN5cyB1c2FnZQorICAgYW5kIGV4dGVuZHMgJ3NraXBORlNJbkhvc3RSZXNvdXJjZXMnIGNvbmZpZyB0byBVQ0QgZGlzayBzdGF0cy4KKworMjAxMC0wNi0wMyAxNToxMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYzoKKworICAgRml4IGJyb2tlbiBzaXplIGNhbGN1bGF0aW9ucy4KKyAgIFN1cHBvcnQgNjQtYml0IHNpemUvdXNhZ2UgdmFsdWVzLgorCisyMDEwLTA2LTAyIDE0OjUyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdXNlIC0td2l0aC1jYSBpbnN0ZWFkIG9mIC0tY2EKKworMjAxMC0wNi0wMiAxNDo1MSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHVzZSB0aGUgbmV3IC1icmllZiBvcHRpb24gZm9yIGZpbmdlcnByaW50IGNhcHR1cmluZworCisyMDEwLTA2LTAyIDE0OjQwICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IC0td2l0aC1jYSBoYW5kbGluZywgZml4IENBIG5ld2NlcnRzIGJvb2trZWVwaW5nCisKKzIwMTAtMDYtMDIgMTA6NTcgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHBhcnNpbmcgT0lEcworICAgaW4gY29uZmlnIGZpbGVzLgorCisyMDEwLTA2LTAyIDAwOjI0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgY2hlY2sgdGhhdCBDQSBjZXJ0aWZpY2F0ZXMgY3JlYXRlZCBhZnRlciBzbm1wZCBzdGFydHMgYXJlIHN0aWxsCisgICB1c2FibGU7IGNoZWNrIGFsbCBvdXRwdXQgZmluZ2VycHJpbnRzIHRvIGVuc3VyZSB0aGV5IHdlcmUKKyAgIHByb3Blcmx5IGNyZWF0ZWQKKworMjAxMC0wNi0wMiAwMDoyMyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhZGQgbWlzc2luZyBkaXJlY3RvcnkgYW5kIGZpbGUgc3VmZml4IHRvIGNhIGludm9jYXRpb25zCisKKzIwMTAtMDYtMDIgMDA6MjEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICBjaGVjayB0aGF0IGNlcnRpZmljYXRlIG91dHB1dCBmaW5nZXJwcmludHMgd2VyZSBmb3VuZAorCisyMDEwLTA2LTAyIDAwOjIwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIHR3byBuZXcgZnVuY3Rpb25zIGZvciB2YWx1ZSBjb21wYXJpc29uIHRlc3Qgb3V0cHV0CisKKzIwMTAtMDYtMDIgMDA6MTYgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgcmVtb3ZlIG5vLWxvbmdlci11c2VkIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHRva2VuIHNwZWNpZmllciAod2UKKyAgIHJlcXVpcmUgYSBjb3B5IG9mIHRoZSBrZXkpCisKKzIwMTAtMDYtMDIgMDA6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgLSBjaGFuZ2VkICdmaW5nZXJwcmludCcgdG9rZW4gdG8gbW9yZSBnZW5lcmljICdpZGVudGl0eScga2V5d29yZAorICAgLSBhZGRlZCB0aGUgYWJpbGl0eSBmb3IgbmV0c25tcF9jZXJ0X2ZpbmQgdG8gdHJ5IG11bHRpcGxlIHR5cGVzCisgICAoRlAgJiBmaWxlKQorICAgLSBhbmQgcHJvdmlkZSB0ZXN0IHN1aXRlIHRlc3QgZm9yIGl0LgorCisyMDEwLTA2LTAxIDIwOjEyICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgUGVybCBleHRlbnNpb24gbW9kdWxlcyBjYW4gbG9hZCB0aGUgTmV0LVNOTVAKKyAgIERMTHMgd2hpbGUgcnVubmluZyB0aGUgTmV0LVNOTVAgcmVncmVzc2lvbiB0ZXN0cy4KKworMjAxMC0wNi0wMSAxNjo0NyAgbWFyegorCisgICAqIGxvY2FsL2NlcnRnZW4tdGVzdC5wbCwgbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbWFqb3IgdXBkYXRlIGJ1ZyBmaXhlcyBhbmQgZmVhdHVyZXMgLSBpbnRlcmFjdGl2ZSBtb2RlLCBzZXBhcmF0ZQorICAgQ0EgZGlycywgZ2VuIGNzciBmcm9tIGNlcnQsIGZpbmdlcnByaW50IGRpc3BsYXkgLS1icmllZiwKKyAgIGVsaW1pbmF0ZSBzZWQsIG9wZW5zc2wuY29uZiBvdmVyd3JpdGUgYW5kIHRlbXBsYXRpbmcKKworMjAxMC0wNi0wMSAxNDo0OCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisKKyAgIEZpeGVkIGEgdHlwbyBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQuCisKKzIwMTAtMDYtMDEgMTQ6MjUgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIElQLU1JQjo6aXBJZlN0YXRzUmVhc21SZXFkcyB2YWx1ZS4KKyAgIAorICAgSnVzdCBmaXhpbmcgYSBzdHVwaWQgdHlwby4KKworMjAxMC0wNS0zMSAxMDo0MyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBlbmFibGVkIFVuaXggdHJhbnNwb3J0LgorICAgKEZvcndhcmQtcG9ydGVkIHIxODY4NyBmcm9tIHRoZSBWNS41IGJyYW5jaCkuCisKKzIwMTAtMDUtMzAgMjI6NTIgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZW5hYmxlIHRvIHJ1biB3aXRoIG9sZGVyIFBlcmwgKGUuZy4gUGVybCA1LjAwNDA1IGFzIHNoaXBwZWQgd2l0aAorICAgSVJJWAorICAgNi41KQorCisyMDEwLTA1LTMwIDIyOjQ5ICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHBvbGlzaCBkb2N1bWVudGF0aW9uCisKKzIwMTAtMDUtMzAgMjA6MTkgIG1hZ2ZyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCAgIAorICAgICAgbmV0LXNubXAtY29uZmlnLmluLCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbiwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogRG8gbm90IGxpbmsgd2l0aCBsaWJuZXRzbm1waGVscGVycyBhbnkgbW9yZSBhcworICAgaXQgaXMgZW1wdHkuCisKKzIwMTAtMDUtMzAgMTk6MTggIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgc25tcGxpYi9zbm1wLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFVzZSBhIHZvaWQgYXJndW1lbnQgZm9yIHRoZSBkYXRhIGFyZ3VtZW50IG9mCisgICB4ZHVtcC4KKworMjAxMC0wNS0zMCAxOToxOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuYzoKKworICAgQ0hBTkdFUzogQlVHOiAyMDUxNzQyOiBhZGRlZCBtaXNzaW5nIFBFUkxfU1lTX0lOSVQzKCkgY2FsbCAoc2VlCisgICBhbHNvIG1hbiBwZXJsZW1iZWQpLgorCisyMDEwLTA1LTMwIDE5OjE2ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaDoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIChmcmVlKCkgY2FsbGVkIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQKKyAgIGZpcnN0KS4KKworMjAxMC0wNS0zMCAxNjo1NiAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguaCwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogc25tcGxpYjogRG8gbm90IHJlcXVpcmUgdGhhdCB0aGUgVURQIHRyYW5zcG9ydCBpcyBpbmNsdWRlZC4KKworMjAxMC0wNS0zMCAxMjowMCAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTVEREb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDb3JyZWN0IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRyYW5zcG9ydHMuIFJlbW92ZQorICAgdW5uZWNlc3NhcnkgaW5jbHVkZXMuCisKKzIwMTAtMDUtMzAgMDY6MjEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9kdW1teS5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBsaWJuZXRzbm1waGVscGVycyBpcyBub3QgZW1wdHkgc3VjaCB0aGF0IGJ1aWxkaW5nCisgICBOZXQtU05NUCBvbiBBSVggYW5kIElSSVggaXMgYWdhaW4gcG9zc2libGUuCisKKzIwMTAtMDUtMjkgMDk6NTIgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4OTAyOiB3b3JrcyBhZ2FpbiB3aXRob3V0IFRBUDo6SGFybmVzcy4KKworMjAxMC0wNS0yOCAyMzoyMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IGxvbmctYWdvIGJyb2tlbiB2ZXJib3NpdHkKKworMjAxMC0wNS0yOCAyMzowNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IG1vcmUgcHJldmlvdXNseSBicm9rZW4gb3B0aW9uIHJlbmFtZXM7IGNoYW5nZSAtZCB0bworICAgbWFzdGVyLWRpcmVjdG9yeSBhbmQgYWRkIGFzIGEgcmVhbCBhcmd1bWVudAorCisyMDEwLTA1LTI4IDIzOjA1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19zaW1wbGU6CisKKyAgIG1vcmUgbWlzc2luZyBvbGR1Y2QgcmVuYW1lcworCisyMDEwLTA1LTI4IDIyOjU3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTlRFU1RTLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfb2xkdWNkLCAKKyAgICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19zaW1wbGU6CisKKyAgIHJlbmFtZWQgJ29sZHVjZCcgdG8gJ3NpbXBsZScgdG8gcHV0IGEgbW9yZSBwb3NpdGl2ZSBzcGluIG9uIHRoZW0KKworMjAxMC0wNS0yOCAyMjo1NCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JFQURNRSwgdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSB0ZXN0IHN1aXRlCisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weToKKworICAgcmV2ZXJ0IHVuaW50ZW50aW9uYW5hbGx5IGNvbW1pdHRlZCB0ZXN0IHRlc3QKKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jLCBweXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5OgorCisgICBmcmVlIHZhcmlhYmxlcyBhZ2FpbgorCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIGZpeCB3YWxrcyBzbyB0aGF0IG11bHRpcGxlIHdhbGtzIHRlcm1pbmF0ZSBwcm9wZXJseQorCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIHBhdGNoIHRvIGhhbmRsZSB0ZXN0aW5nIG9mIGxvb3Bpbmcgb2YgbXVsdGlwbGUgdmFyYmluZHMgaW4gYSB3YWxrCisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgaW5pdGFsIHBhdGNoIHRvIHByZXZlbnQgbG9vcGluZyB3YWxrcworCisyMDEwLTA1LTI4IDIwOjUzICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGltcGxlbWVudCBjZXJ0IGxvb2t1cCBieSBmaWxlbmFtZQorCisyMDEwLTA1LTI4IDA3OjAyICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgY29uc3QgZGVjbGFyYXRpb25zIHRvIHRoZSBkaXNhYmxlZCB2ZXJzaW9ucworICAgb2YgdGhlIGRlYnVnZ2luZyBjb2RlIGFzIHdlbGwuCisKKzIwMTAtMDUtMjggMDI6MTIgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIGFkZCBwZXJzaXN0ZW5jZTsgY2hlY2sgZm9yIGNvbCBtb2RzIHdoaWxlIHJvdyBhY3RpdmUKKworMjAxMC0wNS0yOCAwMjoxMSAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0Lmg6CisKKyAgIENIQU5HRVM6IGFnZW50bGliOiBuZXcgZnVuY3Rpb25zIHRvIG1ha2Ugc3Rhc2ggcHRyIGFuZCBuZXdyb3cKKyAgIGF2YWlsYWJsZSB0bworICAgdGFibGVfZGF0YXNldCBoYW5kbGVycworICAgbm9uZXdzOiBmaXggdHlwbzsgdGFicyB0byBzcGFjZXM7IHVzZSBzaXplb2YgaW5zdGVhZCBvZiBjb25zdGFudAorCisyMDEwLTA1LTI3IDE4OjU5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwOgorCisgICBXaW4zMiBidWlsZCBmaXhlcy4KKworMjAxMC0wNS0yNyAxODoyNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgIm1ha2UgdGVzdCIgd2l0aG91dCBUQVA6Okhhcm5lc3MgKHdhcyBicm9rZW4gYnkgcjE4ODAyKS4KKworMjAxMC0wNS0yNyAxNToxNSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oLCAKKyAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgc25tcGxpYi9sY2RfdGltZS5jLCAgIAorICAgICAgc25tcGxpYi9tZDUuYywgc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXBfZGVidWcuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncy4gTW9zdCBmaXhlcyBpbnZvbHZlZCBhZGRpbmcgdGhlCisgICAiY29uc3QiIGtleXdvcmQuCisKKzIwMTAtMDUtMjcgMTM6NTIgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDI5NzI1Nzk6IGZpeGVkIGNoZWNraW5nIG9mCisgICBzbm1wVGFyZ2V0QWRkclJvd1N0YXR1cyBTRVQgcmVxdWVzdHMuCisKKzIwMTAtMDUtMjcgMTM6NDEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfcnVuOgorCisgICByZXZlcnQgcGFydCBvZiAxODg4NTogdGVzdCBmaWxlcyBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gYnkKKyAgIHRoZW1zZWx2ZXMgdG9vCisKKzIwMTAtMDUtMjcgMTE6MTkgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oOgorCisgICBDSEFOR0VTOiBjb3JyZWN0bHkgY2FsY3VsYXRlIGlmWFRhYmxlLmlmSENJblVjYXN0UGt0cyBvbiAzMi1iaXQKKyAgIExpbnV4CisgICAKKyAgIExpbnV4IGRvZXMgbm90IHByb3ZpZGUgc3RhbmRhbG9uZSBjb3VudGVyIGZvciBpbmNvbWluZyB1bmljYXN0CisgICBwYWNrZXRzIChpdWNhc3QpCisgICAtIGl0IHByb3ZpZGVzIGNvdW50ZXIgb2YgYWxsIHBhY2tldHMgKGlhbGwpICsgc2VwYXJhdGUgY291bnRlcgorICAgZm9yIHRoZSBtdWx0aWNhc3QKKyAgIG9uZXMgKGltY2FzdCkuIFByZXZpb3VzIGltcGxlbWVudGF0aW9uIG9mIGlmVGFibGUgcmVhZCB0aGVzZQorICAgY291bnRlcnMgYW5kCisgICBjYWxjdWxhdGVkIGl1Y2FzdCA9IGlhbGwgLSBpbWNhc3QgKmJlZm9yZSogdGhlc2UgdmFsdWVzIHdlcmUKKyAgIGV4cGFuZGVkIGludG8KKyAgIDY0Yml0cy4gVGhpcyBwcm9kdWNlZCBlcnJvcnMgb24gMzJiaXQgc3lzdGVtcyB3aGVuIGlhbGwKKyAgIG92ZXJmbG93ZWQgdG8gemVybyBhbmQKKyAgIGltY2FzdCB3YXMgbm96ZXJvIC0+IGl1Y2FzdCBnb3QgbmVnYXRpdmUgYW5kICdjNjQgMzIgYml0IGNoZWNrCisgICBmYWlsZWQnIGVycm9yIGluCisgICBzbm1wZCBsb2cuIE5vdyB0aGUgYWdlbnQgZXhwYW5kcyB0aGVzZSB2YWx1ZXMgdG8gNjRiaXRzIGZpcnN0IGFuZAorICAgKiAgICAgKnRoZW4qIHBlcmZvcm1zICAgIHRoZSBjYWxjdWxhdGlvbiwgdXNpbmcgYSBuZXcgZmxhZy4gCisgICAgICAyMDEwLTA1LTI3IDA4OjE4ICBtYWdmcgorCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCB0ZXN0aW5nL1JVTlRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ydW46CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IE1vdmUgdGhlIHNldHRpbmcgb2YgTUlCRElSUyBmcm9tIHRoZSBzdXBwb3J0CisgICBzY3JpcHQgdG8gdGhlIGRyaXZlcnMgc2luY2UgaXQgaXMgbmVlZGVkIGZvciB0aGUgQyB0ZXN0cyBhcyB3ZWxsLgorCisyMDEwLTA1LTI3IDA4OjA5ICBtYWdmcgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IFVzZSBvbGR1Y2RfcnVuLCBub3QgcnVuX29sZHVjZC4gQ2hhbmdlIHNyY2RpcgorICAgdG8gcmVmZXIgdG8gdGhlIHRvcCBkaXJlY3RvcnkgYW5kIG5vdCB0aGUgdGVzdGluZyBzdWJkaXJlY3RvcnkgYXMKKyAgIHRoYXQgaXMgd2hhdCBpcyBleHBlY3RlZCBpbiB0aGUgdGVzdCBzY3JpcHRzLgorCisyMDEwLTA1LTI3IDA1OjE3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICB3YXJuaW5nIHNxdWFzaGluZworCisyMDEwLTA1LTI3IDA1OjE2ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oLCBzbm1wbGliL2tleXRvb2xzLmMsICAgCisgICAgICBzbm1wbGliL2xjZF90aW1lLmM6CisKKyAgIG1vcmUgY29uc3QgY29ycmVjdG5lc3MKKworMjAxMC0wNS0yNyAwNDoxOCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdGVzdHMgZm9yIGFnZW50LW5vdC1rbm93bi11c2VyLWNlcnRpZmljYXRlcworCisyMDEwLTA1LTI3IDA0OjE2ICBoYXJkYWtlcgorCisgICAqIFJFQURNRS5zbm1wdjM6CisKKyAgIHJlZmVyZW5jZSB0aGUgaXRuZXJuYWwgc3VwcG9ydCBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uCisKKzIwMTAtMDUtMjcgMDQ6MTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsL09QRU5TU0wtTElDRU5TRSwgc25tcGxpYi9vcGVuc3NsL1JFQURNRToKKworICAgaW50ZXJuYWwgT3BlblNTTCBzdXBwb3J0IGRvY3VtZW50YXRpb24KKworMjAxMC0wNS0yNyAwNDoxNiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBORVdTOiBsaWJuZXRzbm1wOiBTdXBwb3J0IGZvciBhIHN0cmVhbS1saW5lIHN0cmlwcGVkIGRvd24gdmVyc2lvbgorICAgb2YgaW50ZXJuYWwgT3BlblNTTCBzdXBwb3J0IHVzaW5nIC0td2l0aC1vcGVuc3NsPWludGVybmFsCisKKzIwMTAtMDUtMjcgMDQ6MTUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL29wZW5zc2xfbWQ1LmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jLCBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zcHIuaCwgCisgICAgICAgIHNubXBsaWIvc2NhcGkuYzoKKworICAgcmVtb3ZlIG1vcmUgZGVwZW5kZW5jaWVzIGZvciBleHRlcm5hbCBvcGVuc3NsIGhlYWRlcnMKKworMjAxMC0wNS0yNyAwNDoxNSAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgc25tcGxpYi9vcGVuc3NsLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kMzJfY29tbW9uLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDUuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNV9sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbW9kZXMuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMsIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYS5oLCAKKyAgICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhMS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zcHIuaCwgc25tcGxpYi9vcGVuc3NsX2Flc19jZmIuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9hZXNfY29yZS5jLCBzbm1wbGliL29wZW5zc2xfYWVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfY2JjX2VuYy5jLCBzbm1wbGliL29wZW5zc2xfY2ZiMTI4LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfZGVzX2VuYy5jLCBzbm1wbGliL29wZW5zc2xfZGVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQzMl9jb21tb24uaCwgc25tcGxpYi9vcGVuc3NsX21kNS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kNV9sb2NhbC5oLCBzbm1wbGliL29wZW5zc2xfbW9kZXMuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9uY2JjX2VuYy5jLCBzbm1wbGliL29wZW5zc2xfc2V0X2tleS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX3NoYS5oLCBzbm1wbGliL29wZW5zc2xfc2hhMS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX3NoYV9sb2NhbC5oLCBzbm1wbGliL29wZW5zc2xfc3ByLmg6CisKKyAgIG1vdmUgb3BlbnNzbCBjb2RlIGludG8gYSBzdWJkaXJlY3RvcnkKKworMjAxMC0wNS0yNyAwNDoxMyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdiYXNlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX29sZHVjZDoKKworICAgZml4IHRlc3Rpbmcgc28gaXQgdXNlcyBtdWx0aXBsZSB0eXBlcyBvZiBjcnlwdG8KKworMjAxMC0wNS0yNyAwNDoxMyAgaGFyZGFrZXIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGRlZmluaXRpb25zIGFuZCBmaWxlcyBmb3IgZG9pbmcgaW50ZXJuYWwgY3J5cHRvIHN1cHBvcnQKKworMjAxMC0wNS0yNyAwNDoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NjYXBpLmM6CisKKyAgIGluY2x1ZGUgaW50ZXJuYWwgYWVzL2RlcyBoZWFkZXJzCisKKzIwMTAtMDUtMjcgMDQ6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2NmYjEyOC5jOgorCisgICBsb2NhbGl6ZQorCisyMDEwLTA1LTI3IDA0OjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9jZmIxMjguYywgc25tcGxpYi9vcGVuc3NsX21vZGVzLmg6CisKKyAgIGluaXRhbCBjb3BpZXMgb2YgY2ZiMTI4IG1vZGVzIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9hZXNfY29yZS5jOgorCisgICBsb2NhbGl6ZQorCisyMDEwLTA1LTI3IDA0OjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9hZXNfY29yZS5jLCBzbm1wbGliL29wZW5zc2xfYWVzX2xvY2FsLmg6CisKKyAgIGluaXRpYWwgdmVyc2lvbnMgb2YgYWVzX2NvcmUuYyBhbmQgYWVzX2xvY2wuaAorCisyMDEwLTA1LTI3IDA0OjEwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oOgorCisgICBpbml0aWFsIGNvcHkgb2YgYWVzLmggZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MTAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Flc19jZmIuYzoKKworICAgaW5pdGlhbCBjb3B5IG9mIHRoZSBvcGVuc3NsIGFlc19jZmIuYyBmaWxlCisKKzIwMTAtMDUtMjcgMDQ6MTAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Rlc19lbmMuYzoKKworICAgaW5jbHVkZSBsb2NhbGl6ZWQgY29waWVzIG9mIHRoZSBmaWxlcworCisyMDEwLTA1LTI3IDA0OjA5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc2NhcGkuYzoKKworICAgdXNlIGludGVybmFsIERFUworCisyMDEwLTA1LTI3IDA0OjA5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9jYmNfZW5jLmM6CisKKyAgIGxvY2FsaXplZCBjb3B5IG9mIHRoZSBjYmNfZW5jLmMgZmlsZSBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDowOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfc3ByLmg6CisKKyAgIGRlcy9zcHIuaCBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfZGVzX2VuYy5jOgorCisgICBhZGRlZCBkZXNfZW5jLmMgZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfbWQ1LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9zaGEuaDoKKworICAgbG9jYWwgY29waWVzIG9mIHRoZSBvcGVuc3NsIGhlYWRlcnMKKworMjAxMC0wNS0yNyAwNDowNyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaDoKKworICAgaW5pdGlhbCBjb3B5IG9mIG9wZW5zc2wncyBkZXMuaAorCisyMDEwLTA1LTI3IDA0OjA3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9uY2JjX2VuYy5jLCBzbm1wbGliL29wZW5zc2xfc2V0X2tleS5jOgorCisgICBsb2NhbGl6ZWQgaGVhZGVyIGZpbGVzCisKKzIwMTAtMDUtMjcgMDQ6MDcgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvb3BlbnNzbF9kZXNfbG9jYWwuaCwgc25tcGxpYi9vcGVuc3NsX25jYmNfZW5jLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfc2V0X2tleS5jOgorCisgICBpbml0YWwgY29waWVzIG9mIHNvbWUgb2YgdGhlIG9wZW5zc2wgREVTIGZpbGVzCisKKzIwMTAtMDUtMjcgMDQ6MDYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL3NjYXBpLmM6CisKKyAgIGZpbmlzaGluZyBwb3J0aW5nIG9mIGludGVybmFsIGF1dGggc3VwcG9ydAorCisyMDEwLTA1LTI3IDA0OjA2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIGFkZCBpbnRlcm5hbCBjcnlwdG8gZmlsZXMgdG8gdGhlIGNoZWNrL3VzZSBsaXN0CisKKzIwMTAtMDUtMjcgMDQ6MDYgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvbWQzMl9jb21tb24uaCwgc25tcGxpYi9tZDVfbG9jbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kMzJfY29tbW9uLmgsIHNubXBsaWIvb3BlbnNzbF9tZDUuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDVfbG9jYWwuaCwgc25tcGxpYi9vcGVuc3NsX3NoYTEuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9zaGFfbG9jYWwuaCwgc25tcGxpYi9zaGFfbG9jbC5oOgorCisgICBsb2NhbGl6ZWQgZmlsZSBuYW1lcyB3aXRoIG9wZW5zc2wgcHJlZml4ZXMKKworMjAxMC0wNS0yNyAwNDowNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9vcGVuc3NsX21kNS5oLCBzbm1wbGliL21kNV9sb2NsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQ1LmM6CisKKyAgIGxvY2FsaXplIHRoZSBtZDUgaW1wbGVtZW50YXRpb24KKworMjAxMC0wNS0yNyAwNDowNSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9vcGVuc3NsX3NoYS5oLCBzbm1wbGliL29wZW5zc2xfc2hhMS5jLCAgIAorICAgICAgc25tcGxpYi9zaGFfbG9jbC5oOgorCisgICBjb21wbGV0ZWx5IGxvY2FsaXplIHRoZSBvcGVuc3NsIFNIQSBzdXBwb3J0CisKKzIwMTAtMDUtMjcgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX3NoYS5oOgorCisgICBpbml0aWFsIHZlcmlzb24gb2Ygc2hhLmggY29weQorCisyMDEwLTA1LTI3IDA0OjA0ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL21kMzJfY29tbW9uLmgsIHNubXBsaWIvbWQ1X2xvY2wuaCwgc25tcGxpYi9vcGVuc3NsX21kNS5jLCAKKyAgICAgICAgc25tcGxpYi9vcGVuc3NsX3NoYTEuYywgc25tcGxpYi9zaGFfbG9jbC5oOgorCisgICBhZGRlZCBsb2NhbCBjb3BpZXMgb2YgdGhlIG9wZW5zc2wgY3J5cHRvIGZ1bmN0aW9ucworCisyMDEwLTA1LTI3IDA0OjA0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYzoKKworICAgbWFrZSB1c2Ugb2YgaW50ZXJuYWwgY3J5cHRvIGhhc2ggZnVuY3Rpb25zCisKKzIwMTAtMDUtMjcgMDQ6MDMgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGNvbmZpZ3VyZSBjaGVja3MgZm9yIGludGVybmFsLWNyeXB0byBzdXBwb3J0CisKKzIwMTAtMDUtMjYgMjI6MTcgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHByb3Blcmx5IHZlcmlmeSBleHBlY3RlZCBzZXJ2ZXIgY2VydGlmaWNhdGVzIHVuZGVyIERUTFM7IGFkZCBhCisgICBuZXcgZmxhZyBpbiB0bHNiYXNlIHRvIGluZGljYXRlIHZlcmlmaWNhdGlvbiBoYXMgb2NjdXJyZWQKKworMjAxMC0wNS0yNiAyMTowMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICBjb21waWxlciB3YXJuaW5nIHNxdWFzaGluZworCisyMDEwLTA1LTI2IDIxOjAyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oLCBzbm1wbGliL2xjZF90aW1lLmMsICAgCisgICAgICBzbm1wbGliL3NjYXBpLmM6CisKKyAgIGFkZCBjb25zdCBxdWFsaWZpZXJzIHRvIGEgZmV3IHBsYWNlcworCisyMDEwLTA1LTI2IDE5OjQ2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogbGlibmV0c25tcG1pYnMsIGxpYm5ldHNubXBoZWxwZXJzIGFuZAorICAgbGlibmV0c25tcGFnZW50IGRvIG5vdyBidWlsZCBhcyBhIERMTCB3aGVuIGNvbmZpZ3VyZWQgd2l0aAorICAgLS1lbmFibGUtc2hhcmVkLgorCisyMDEwLTA1LTI2IDE3OjQ3ICBidmFzc2NoZQorCisgICAqIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOgorCisgICBORVdTOiBtb3ZlZCBhbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbGlibmV0c25tcGhlbHBlcnMgdG8KKyAgIGxpYm5ldHNubXBhZ2VudC4gbGlibmV0c25tcGhlbHBlcnMgaXMgbm93IGFuIGVtcHR5IGxpYnJhcnkuCisKKzIwMTAtMDUtMjYgMTc6MjAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL251bGwuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L251bGwuYywgICAKKyAgICAgIGFnZW50L29sZF9hcGkuYzoKKworICAgUmV2ZXJ0ZWQgcjE4ODI5IGluIG9yZGVyIHRvIG1pbmltaXplIGRpZmZzIHdpdGggb2xkZXIgYnJhbmNoZXMuCisKKzIwMTAtMDUtMjUgMDc6MjMgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICBUZWxsIG5ldC1zbm1wLWNlcnQgd2hlcmUgbmV0LXNubXAtY29uZmlnIGlzIGxvY2F0ZWQKKworMjAxMC0wNS0yNSAwNzoxNCAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIENvcnJlY3QgdGhlIHNpZ25hdHVyZSBvZiBtYWluLiBVc2UgI2luY2x1ZGUgaW5zdGVhZCBvZiBzb3VyY2luZworICAgdG8gZ2V0IHRoZSBjb2RlIHVuZGVyIHRlc3QgaW4gb3JkZXIgdG8gZ2V0IGJldHRlciBlcnJvciBtZXNzYWdlcworCisyMDEwLTA1LTI1IDA3OjExICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmM6CisKKyAgIEFkZCBhcmd1bWVudHMgdG8gc3ByaW50ZiBzdGF0ZW1lbnRzIHRvIG1ha2UgdGhlIHRlc3Qgd29yaworCisyMDEwLTA1LTI1IDA3OjA3ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYzoKKworICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYW5kIGRpc2FibGVkIGNvZGUKKworMjAxMC0wNS0yNSAwNToyMCAgbWFnZnIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBTcGxpdCBzbm1wSVBCYXNlRG9tYWluIGFuZCBtb3ZlIHRoZSBJUHY0IHBhcnRzCisgICB0byBJUHY0QmFzZSBhbmQgdGhlIHNvY2tldCBnZW5lcmljIHBhcnRzIHRvIFNvY2tldEJhc2UuCisKKzIwMTAtMDUtMjQgMjA6MjQgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZzsgZmluaXNoIHRsc3RtUGFyYW1zVGFibGUgbGFzdENoYW5nZWQgc2NhbGFyCisKKzIwMTAtMDUtMjQgMTk6MjggIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgQWRkIC0tZXh0ZXJuYWwtbGlicyBpbiBvcmRlciB0byBzdXBwb3J0IGJ1aWxkaW5nIHRoZSB0ZXN0cyBvbgorICAgc29sYXJpcworCisyMDEwLTA1LTI0IDEzOjMzICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgYXJnaC4uIGZpeCBmYWxsb3V0IGZyb20gbWFudWFsbHkgKG1pcylhcHBseWluZyBwYXRjaAorCisyMDEwLTA1LTI0IDEyOjU5ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaDoKKworICAgZmlyc3QgcGFzcyBhdCB0bHN0bVBhcmFtc1RhYmxlCisKKzIwMTAtMDUtMjQgMTI6NTkgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICB1cGRhdGUgZGVmaW5lcyB0byBtYXRjaCBNSUIgbmFtZXMsIHBlciBncmFuZC1wb29iYWgKKworMjAxMC0wNS0yNCAxMjo1OCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5jOgorCisgICB1cGRhdGUgT0lEIHRvIG1hdGNoIHVwY29taW5nIFJGQworCisyMDEwLTA1LTI0IDExOjQ4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9udWxsLmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9udWxsLmMsICAgCisgICAgICBhZ2VudC9vbGRfYXBpLmM6CisKKyAgIENIQU5HRVM6IGxpYm5ldHNubXBhZ2VudCwgbGlibmV0c25tcGhlbHBlcnM6IG1vdmVkIHRoZSBmdW5jdGlvbnMKKyAgIG5ldHNubXBfYnVsa190b19uZXh0X2ZpeF9yZXF1ZXN0cygpLAorICAgbmV0c25tcF9nZXRfYnVsa190b19uZXh0X2hhbmRsZXIoKSwgbmV0c25tcF9yZWdpc3Rlcl9udWxsKCksCisgICBuZXRzbm1wX3JlZ2lzdGVyX251bGxfY29udGV4dCgpIGFuZCBuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKQorICAgZnJvbSBsaWJuZXRzbm1waGVscGVycyB0byBsaWJuZXRzbm1wYWdlbnQuCisgICBOb3RlczoKKyAgIC0gVGhpcyBkb2VzIG5vdCBhZmZlY3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGFwcGxpY2F0aW9ucworICAgdGhhdCBsaW5rIHdpdGggJChuZXQtc25tcC1jb25maWcgLS1hZ2VudC1saWJzKSBzaW5jZSB0aGlzCisgICBpbnZvbHZlcyBsaW5raW5nIHdpdGggYm90aCBsaWJuZXRzbm1waGVscGVycyBhbmQgbGlibmV0c25tcGFnZW50LgorICAgLSBGdW5jdGlvbnMgaGF2ZSBiZWVuIG1vdmVkIGJldHdlZW4gbGlicmFyaWVzIGJ5IG1vdmluZyBlbnRpcmUKKyAgIHNvdXJjZSBmaWxlcy4KKworMjAxMC0wNS0yNCAxMDoxMCAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmM6CisKKyAgIFVzZSBwcm9wZXIgc3RyaW5nIHNpemVzIGFuZCBtYWtlIHN1cmUgc3RyaW5ncyBhcmUKKyAgIHplcm8tdGVybWluYXRlZC4KKworMjAxMC0wNS0yNCAwODowMSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsIG5ldC1zbm1wLWNvbmZpZy5pbiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogbGlibmV0c25tcCBkb2VzIG5vdyBidWlsZCBhcyBhIERMTCB3aGVuCisgICBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtc2hhcmVkLgorICAgQ0hBTkdFUzogQ3lnd2luOiBwZXJsIG1vZHVsZXMgZG8gbm93IGJ1aWxkICgtLXdpdGgtcGVybC1tb2R1bGVzKS4KKyAgIE5vdGU6IHRoZSBUMDYwdHJhcGRwZXJsX29sZHVjZCwgVDA2MWFnZW50cGVybF9vbGR1Y2QgYW5kCisgICBUMTE1YWdlbnR4cGVybF9vbGR1Y2QgdGVzdHMgc3RpbGwgZmFpbC4KKworMjAxMC0wNS0yMyAyMzowNiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICB1cGRhdGUgZmlsZW5hbWVzL3BhdHNoIGZvciByZWNlbnQgZmlsZSByZW5hbWVzOyBmaXggdHlwb3MKKworMjAxMC0wNS0yMyAyMjowOCAgbWFnZnIKKworICAgKiAgbmV0LXNubXAtY29uZmlnLmluLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgdGhlIHNhbWUgY29tcGlsZXIgY29tbWFuZCBhbmQgZmxhZ3MgZm9yCisgICBidWlsZGluZyBvZiB0ZXN0cyBhcyBmb3IgYnVpbGRpbmcgb2YgdGhlIGNvZGUsIHRodXMgZW5hYmxpbmcgdGVzdAorICAgb2YgZS5nLiAzMi1iaXQgY29kZSBjb21waWxlZCBvbiBhIDY0LWJpdCBwbGF0Zm9ybS4KKworMjAxMC0wNS0yMyAyMTo0MSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICB1cGRhdGUgaW5jbHVkZS9jb25maWcgZmlsZS9wYXRocyBmb3IgcmVjZW50IHJlbmFtZXMKKworMjAxMC0wNS0yMyAyMTozMSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICByZW5hbWUgZmlsZXMgZm9yIE1JQiByZW5hbWVzCisKKzIwMTAtMDUtMjMgMjE6MjUgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGU6CisKKyAgIHJlbmFtZSBkaXJlY3RvcmllcyB0byBtYXRjaCByZW5hbWVzIGluIE1JQgorCisyMDEwLTA1LTIwIDA4OjQ4ICBidmFzc2NoZQorCisgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgU3dhcHBlZCBsaW5rIG9yZGVyIG9mIC1sbmV0c25tcGhlbHBlcnMgLWxuZXRzbm1wbWliczogbmV0c25tcG1pYnMKKyAgIGRlcGVuZHMgb24gbmV0c25tcGhlbHBlcnMgYW5kIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKworMjAxMC0wNS0yMCAwODo0MiAgYnZhc3NjaGUKKworICAgKiAgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgRml4ZWQgbW9yZSBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNS0xOSAxODoyNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHN0YXNoaW5nCisKKzIwMTAtMDUtMTkgMTg6MjUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYzoKKworICAgb3V0cHV0IGZpbGVuYW1lcyBvZiBmYWlsZWQgdGVzdHMKKworMjAxMC0wNS0xOSAxODoyNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgd2lwZSB0cmFpbGluZyBjb21tZW50IEMgbWFya2VyIGlmIGl0IGV4aXN0cworCisyMDEwLTA1LTE5IDE4OjI1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICB0aXRsZSB0aGUgU05NUHYzIHRlc3RzCisKKzIwMTAtMDUtMTkgMTg6MjUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCB0ZXN0aW5nIG9mIGJ1aWx0IHRpdGxlcworCisyMDEwLTA1LTE5IDE4OjI0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBvbmx5IHByaW50IGZhaWx1cmUgaGVhZGVyIGlmIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUKKworMjAxMC0wNS0xOSAxODoyNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X29sZHVjZDoKKworICAgbWFrZSBkZXNjcmlwdGl2ZSB0aXRsZXMgd29yayBhZ2FpbgorCisyMDEwLTA1LTE5IDE4OjI0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jbGliLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICByZW5hbWUgZmlsZXMgc28gcHJlZml4aW5nIGlzIGJhc2VkIG9uIHRoZSBzdWl0ZSBuYW1lLCBub3QgZmlsZQorICAgdHlwZQorCisyMDEwLTA1LTE5IDE3OjUyICBidmFzc2NoZQorCisgICAqICBwZXJsL0FTTi9NYWtlZmlsZS5QTCwgcGVybC9NYWtlZmlsZS5QTCwgcGVybC9NYWtlZmlsZS5zdWJzLnBsLCAgIAorICAgICAgcGVybC9PSUQvTWFrZWZpbGUuUEwsIHBlcmwvU05NUC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMOgorCisgICBDSEFOR0VTOiBDeWd3aW46IHBlcmw6IGJ1aWxkaW5nIHRoZSBQZXJsIG1vZHVsZXMgd2l0aCB0aGUgQ3lnd2luCisgICBQZXJsIHBhY2thZ2UgaXMgbm93IHBvc3NpYmxlLgorICAgKEZvcndhcmQtcG9ydGVkIHIxODY4OCBmcm9tIHRoZSBWNS41IGJyYW5jaC4pCisKKzIwMTAtMDUtMTkgMTc6NTAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5jOgorCisgICBGaXhlZCB5ZXQgYW5vdGhlciBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA1LTE5IDEyOjA1ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmM6CisKKyAgIEZpcnN0LWRyYWZ0IHN1cHBvcnQgZm9yIEFJWCBmaWxlc3lzdGVtIEhBTCBtb2R1bGUgKHVudGVzdGVkKQorCisyMDEwLTA1LTE5IDExOjI1ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYzoKKworICAgU3VwcG9ydCBmb3IgU29sYXJpcy1zdHlsZSAnZ2V0bW50ZW50JyBBUEkuCisKKzIwMTAtMDUtMTkgMDk6NTcgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaDoKKworICAgU2ltcGxpZnkgdGhlIGhhbmRsaW5nIG9mIHVua25vd24vdW53YW50ZWQgZmlsZSBzeXN0ZW1zLgorCisyMDEwLTA1LTE5IDA5OjMwICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg6CisKKyAgIEZpeCBtaXNzaW5nL2Jyb2tlbiBBUEkgZGVjbGFyYXRpb25zLgorCisyMDEwLTA1LTE5IDA4OjQ2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgTWFkZSBlcnJvciBtZXNzYWdlcyBtb3JlIGNsZWFyIGluIGNhc2Ugb2YgZmFpbHVyZSBvciB3cm9uZworICAgaW52b2NhdGlvbi4KKworMjAxMC0wNS0xOSAwMDowMSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGFkZGVkIHRlc3QgZm9yIHVzaW5nIGEgY2VydGlmaWNhdGUgc2lnbmVkIGJ5IGEgQ0EgY2VydGlmaWNhdGUKKworMjAxMC0wNS0xOCAyMzozMSAgdGFuZGVycworCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIG1ha2Ugc3VyZSB3ZSBjYWxsIHRoZSByaWdodCBQZXJsCisKKzIwMTAtMDUtMTggMjA6MzkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBpbmNsdWRlIGxvY2FsIHBvcnQgbnVtYmVyIGluIHBhY2tldCBkdW1wcy4gQW4KKyAgIGV4YW1wbGU6CisgICAKKyAgIFJlY2VpdmVkIDM2IGJ5dGUgcGFja2V0IGZyb20gVURQOgorICAgWzEyNy4wLjAuMV06NTM5MDktPlsxMjcuMC4wLjFdOjExNjEKKyAgIDAwMDA6IDMwIDIyIDAyIDAxIDAxIDA0IDA2IDcwIDc1IDYyIDZDIDY5IDYzIEExIDE1IDAyCisgICAwIi4uLi4ucHVibGljLi4uCisgICAwMDE2OiAwNCAzNyBGMiBENCA5QiAwMiAwMSAwMCAwMiAwMSAwMCAzMCAwNyAzMCAwNSAwNgorICAgLjcuLi4uLi4uLi4wLjAuLgorICAgMDAzMjogMDEgMDEgMDUgMDAgLi4uLgorICAgCisgICBSZWNlaXZlZCBTTk1QIHBhY2tldChzKSBmcm9tIFVEUDoKKyAgIFsxMjcuMC4wLjFdOjUzOTA5LT5bMTI3LjAuMC4xXToxMTYxCisgICBHRVRORVhUIG1lc3NhZ2UKKyAgIC0tIGNjaXR0LjEKKyAgIAorICAgU2VuZGluZyAxMTggYnl0ZXMgdG8gVURQOiBbMTI3LjAuMC4xXTo1MzkwOS0+WzEyNy4wLjAuMV06MTE2MQorICAgMDAwMDogMzAgNzQgMDIgMDEgMDEgMDQgMDYgNzAgNzUgNjIgNkMgNjkgNjMgQTIgNjcgMDIKKyAgIDB0Li4uLi5wdWJsaWMuZy4KKyAgIDAwMTY6IDA0IDM3IEYyIEQ0IDlCIDAyIDAxIDAwIDAyIDAxIDAwIDMwIDU5IDMwIDU3IDA2CisgICAuNy4uLi4uLi4uLjBZMFcuCisgICAwMDMyOiAwOCAyQiAwNiAwMSAwMiAwMSAwMSAwMSAwMCAwNCA0QiA0QyA2OSA2RSA3NSA3OAorICAgLisuLi4uLi4uLktMaW51eAorICAgMDA0ODogMjAgNjEgNzMgNzUgNzMgMjAgMzIgMkUgMzYgMkUgMzMgMzMgMkUgMzIgMkQgNzMgYXN1cworICAgMi42LjMzLjItcworICAgMDA2NDogNjMgNzMgNzQgMjAgMjMgMzEgMjAgNTMgNEQgNTAgMjAgNTAgNTIgNDUgNDUgNEQgY3N0ICMxIFNNUAorICAgUFJFRU0KKyAgIDAwODA6IDUwIDU0IDIwIDUzIDYxIDc0IDIwIDQxIDcwIDcyIDIwIDMzIDIwIDMyIDMxIDNBIFBUIFNhdCBBcHIKKyAgIDMgMjE6CisgICAwMDk2OiAzMSAzMCAzQSAzNSAzOCAyMCA0MyA0NSA1MyA1NCAyMCAzMiAzMCAzMSAzMCAyMCAxMDo1OCBDRVNUCisgICAyMDEwCisgICAwMTEyOiA3OCAzOCAzNiA1RiAzNiAzNCB4ODZfNjQKKworMjAxMC0wNS0xOCAxOTo0MiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVwZGF0ZSB0bHN0bUFkZHJUYWJsZQorICAgLSBkZWFsIHdpdGggaGFzaCB0eXBlIHByb3Blcmx5IGZvciBnZXQvc2V0IGFuZCBwZXJzaXN0ZW5jZQorICAgLSBhZGQgY291bnQgYW5kIGxhc3QgY2hhbmdlZCBzY2FsYXJzCisKKzIwMTAtMDUtMTggMTk6MDggIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jOgorCisgICB1cGRhdGUgdG8gb2ZmaWNhbCBPSUQgZnJvbSB1cGNvbWluZyByZmMKKworMjAxMC0wNS0xOCAxNjoxNiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1cGRhdGUgdG8gb2ZmaWNpYWwgT0lEcyBmcm9tIHVwY29taW5nIFJGQzsgYWRkIGNvdW50L2xhc3QgY2hhbmdlZAorICAgc2NhbGFycworCisyMDEwLTA1LTE4IDE0OjU2ICBkdHMxMgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDIwMDE2NTY6IEhhbmRsZSBudWxsLXRlcm1pbmF0aW9uIG9mCisgICBzdHJpbmcgdmFsdWVzIHByb3Blcmx5LgorICAgQmFzZWQgb24gdGhlIHByaW5jaXBsZXMgb2YgdGhlIHBhdGNoIGZyb20gVG9tbXkgQmVhZGxlLgorCisyMDEwLTA1LTE4IDE0OjM4ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaCwgYWdlbnQvbWliZ3JvdXAvaG9zdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg6CisKKyAgIFdvcmtpbmcoPykgSEFMLWJhc2VkIHZlcnNpb24gb2YgaHJGU1RhYmxlLgorCisyMDEwLTA1LTE4IDE0OjEyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdG9vbHMuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA1LTE3IDIxOjAzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oOgorCisgICB1c2UgcHJvcGVyIFRTTSBzZWN1cml0eSBjb2RlICg0KSBub3cgdGhhdCBpdCdzIG9mZmljaWFsCisKKzIwMTAtMDUtMTcgMTg6NDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmM6CisKKyAgIGJlZ2lubmluZyBvZiBhIGNvbnRhaW5lciB1bml0IHRlc3QKKworMjAxMC0wNS0xNyAxODo0MyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdGVzdGluZy5oOgorCisgICBhIGJhc2ljIEMtY29kZSBiYXNlZCB0ZXN0IHJlcG9ydGluZyBtZWNoYW5pc20KKworMjAxMC0wNS0xNyAxODo0MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmM6CisKKyAgIGJhc2ljIGRlZmF1bHRfc3RvcmUgdGVzdHMKKworMjAxMC0wNS0xNyAxODo0MiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NsaWI6CisKKyAgIGEgYnVpbGQgc3lzdGVtIGZvciBiYXNpYyBsaWJuZXRzbm1wIHRlc3RzCisKKzIwMTAtMDUtMTcgMTg6MTQgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oOgorCisgICBmaXggZmluZ2VycHJpbnQgYmluL2hleCBjb252ZXJzaW9uOyBhZGQvcmVtb3ZlIGNlcnQgc2VjIG1hcHMgdmlhCisgICBtaWIgbm93IHdvcmtzCisKKzIwMTAtMDUtMTcgMTg6MTMgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIG5ldyBmdW5jdGlvbiBuZXRzbm1wX2JpbmFyeV90b19oZXgKKworMjAxMC0wNS0xNyAxODoxMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGZwcmludGYoc3RkZXJyIC0+IERFQlVHTVNHVEwoKAorCisyMDEwLTA1LTE3IDE4OjEyICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtb3ZlIGNoZWNrIGZvciBoYXNoIHR5cGUKKworMjAxMC0wNS0xNyAxNjozNCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBtYWtlIFJVTlRFU1RTIHdvcmsgb3V0c2lkZSB0aGUgc291cmNlZGlyCisKKzIwMTAtMDUtMTcgMTU6MzcgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5URVNUUzoKKworICAgbWFkZSBhIGxpbWl0ZWQgcnVuIHRlc3QgcG9zc2libGUgYWdhaW4gd2l0aG91dCBwZXJsCisKKzIwMTAtMDUtMTcgMTU6MzIgIGR0czEyCisKKyAgICogIHdpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaCwgd2luMzIvbWliX21vZHVsZV9pbml0cy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3A6CisKKyAgIFVzZSBuZXdlciBEaXNNYW4gRXZlbnQgTUlCIGNvZGUgZm9yIE1TVkMtYmFzZWQgYnVpbGRzCisgICAoaW4gbGluZSB3aXRoIGFsbCBjb25maWd1cmUtYmFzZWQgYnVpbGRzKQorCisyMDEwLTA1LTE3IDE1OjIzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlIHRoZSByZXR1cm4gb3V0c2lkZSB0aGUgaWYgc3RhdGVtZW50CisKKzIwMTAtMDUtMTcgMTU6MTggIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg6CisKKyAgIFByb3ZpZGUgbWlzc2luZyBwdWJsaWMgaW50ZXJmYWNlIHRvIEhBTC1iYXNlZCBmaWxlc3RvcmUgbW9kdWxlLgorCisyMDEwLTA1LTE3IDEwOjQxICBidmFzc2NoZQorCisgICAqIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaDoKKworICAgRm9sbG93LXVwIGZvciByMTg3NTQgKHJldmVydCByMTg3MzgpOiByMTg3NTQgb25seSBwYXJ0aWFsbHkKKyAgIHJldmVydGVkIHIxODczOAorICAgYW5kIGhlbmNlIGJyb2tlIHRoZSBXaW4zMi1idWlsZC4gRmluaXNoZWQgcmV2ZXJzYWwgb2YgcjE4NzM4IGJ5CisgICByZXN0b3JpbmcKKyAgIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaC4KKworMjAxMC0wNS0xNiAxODoxNyAgYnZhc3NjaGUKKworICAgKiBsdG1haW4uc2g6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4NzI2OiBvbmx5IHBhc3MgLWZzdGFjay1wcm90ZWN0b3IqIGZsYWdzIHRvIHRoZQorICAgbGlua2VyIGluc3RlYWQgb2YgYWxsIC1mKiBmbGFncyBzdWNoIHRoYXQgaXQgYmVjb21lcyBsZXNzIGxpa2VseQorICAgdGhhdCB0aGlzIG1vZGlmaWNhdGlvbiBjYXVzZXMgdHJvdWJsZSB3aXRoIG5vbi1HTlUgdG9vbGNoYWlucy4KKworMjAxMC0wNS0xNiAxODoxNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfb2xkdWNkOgorCisgICBNYWRlIHNoZWxsIGNvZGUgZm9yIGNvbnZlcnRpbmcgYSByZWxhdGl2ZSBwYXRoIHRvIGFuIGFic29sdXRlCisgICBwYXRoIG1vcmUKKyAgIHJvYnVzdCBhbmQgY29udmVydGVkICIkey4uLiMuLi59IiBjb25zdHJ1Y3QgaW50byBlY2hvICsgY3V0LgorCisyMDEwLTA1LTE2IDE4OjEyICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgTW9yZSBVU0lOR19VQ0RfU05NUF9FWFRFTlNJQkxFX01PRFVMRSB0bworICAgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFIHN1YnN0aXR1dGlvbnMsIG5lY2Vzc2FyeSB0byBtYWtlCisgICB0ZXN0IDA1OSBhbmQgMDY1IHBhc3MuCisKKzIwMTAtMDUtMTYgMTc6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgZml4IHRlc3RzIGZvciBjaGVja2luZyBzaHV0ZG93biBvZiBhcHBsaWNhdGlvbnMgdG8gbm90IHJlcG9ydAorICAgZmFsc2UgbmVnYXRpdmVzCisKKzIwMTAtMDUtMTYgMTI6MTUgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX29sZHVjZDoKKworICAgTWFkZSB0ZXN0IFQwNTkgcGFzcyBhZ2Fpbi4gVGhpcyB0ZXN0IHdhcyByZWNlbnRseSBicm9rZW4gYnkKKyAgIHBhc3NpbmcgYXJndW1lbnRzIHRvIGl0IHdpdGggYWJzb2x1dGUgcGF0aHMgaW5zdGVhZCBvZiByZWxhdGl2ZQorICAgcGF0aHMuCisKKzIwMTAtMDUtMTYgMTI6MTQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfb2xkdWNkOgorCisgICBBZGRlZCAnU0tJUElGTk9UIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRScuCisKKzIwMTAtMDUtMTYgMTE6NDIgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgRml4ZWQgc2V2ZXJhbCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA1LTE2IDExOjQxICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYXBwcy9zc2h0b3NubXAuYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBpbiBvbGQgY29kZS4KKworMjAxMC0wNS0xNiAwOTo1OSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogZG9uJ3QgdHJpZ2dlciBhIG5ldHNubXBfYXNzZXJ0KCkgd2hlbgorICAgbm8gZXh0ZW5zaW9uIERMTHMgaGF2ZSBiZWVuIGxvYWRlZC4KKworMjAxMC0wNS0xNSAxNzozMSAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzdG9wLWdhcCBmaXggdG8gdW5icmVhayAibWFrZSB0ZXN0IiBmb3IgdGhlIG5pZ2h0bHkgYnVpbGRzCisKKzIwMTAtMDUtMTUgMTA6NTkgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgUmV2ZXJ0ZWQgcjE4NzI3IGJlY2F1c2UgaXQgY2F1c2VkIGJ1aWxkIGVycm9ycyBvbiBTb2xhcmlzLCBBSVgKKyAgIGFuZCBIUC1VWC4KKworMjAxMC0wNS0xNSAwMDo0MiAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHdpbjMyL2J1aWxkLnBsOgorCisgICByZXZlcnQgcjE4NzM4IHNpbmNlIG5ldyB0cmFuc3BvcnQgcmVxdWlyZSBkeW5hbWljbHkgYnVpbHQgaGVhZGVyCisgICBmaWxlcworCisyMDEwLTA1LTE1IDAwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIGxvZyBlbnYgdmFyaWFibGVzIHVzZWQgdG8gdGhlIGludm9rZWQgZmlsZQorCisyMDEwLTA1LTE0IDIxOjI5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgZml4IHNjcmlwdCBzbyBpdCBjYW4gYmUgaW52b2tlZCBvdXRzaWRlIHRoZSB0ZXN0IGVudmlyb25tZW50CisgICBhZ2FpbgorCisyMDEwLTA1LTE0IDIxOjI4ICBoYXJkYWtlcgorCisgICAqIG1pYnMvU05NUC1UTFMtVE0tTUlCLnR4dDoKKworICAgYWRkZWQgdGhlIFNOTVAtVExTLVRNLU1JQiB3aXRoIGZpbmFsIElBTkEgYXNzaWdubWVudCBzbG90cworCisyMDEwLTA1LTE0IDIxOjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICB1c2UgZmluYWwgSUFOQSBhc3NpZ25lZCBUU00gcHJlZml4ZXMKKworMjAxMC0wNS0xNCAyMToyNiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oOgorCisgICB1c2UgZmluYWwgSUFOQSBhc3NpZ25lZCBEb21haW4gbnVtYmVycworCisyMDEwLTA1LTE0IDIxOjI1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHNldCBkZWZhdWx0IHZlcnNpb24gYW5kIHNlY2xldmVsIGlmIHRscy9kdGxzCisKKzIwMTAtMDUtMTQgMTU6MjUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjaGVjayByYyBmcm9tIHNlY25hbWUgbWFwcGluZzsgY2xhcmlmeSBjb21tZW50CisKKzIwMTAtMDUtMTQgMTU6MjIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGRvbid0IHVzZSB1bnNvcnRlZCBjb250YWluZXI7IGRvbid0IGZyZWUgY2FsbGVyJ3MgY29udGFpbmVyCisKKzIwMTAtMDUtMTQgMTU6MjIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBhZGQgbGluZWFyX3NlYXJjaCBmb3IgdW5zb3J0ZWQgY29udGFpbmVycworCisyMDEwLTA1LTE0IDExOjU2ICBidmFzc2NoZQorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgd2luMzIvYnVpbGQucGwsIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaDoKKworICAgSW1wcm92ZWQgcG9ydGFiaWxpdHkgYnkgcmVtb3ZpbmcgdGhlIGdlbmVyYXRlZCBmaWxlCisgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaC4KKyAgIENvbW1lbnRlZCBvdXQgdGhlIGNvZGUgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIGdlbmVyYXRpbmcKKyAgIHRoaXMgaGVhZGVyIGZpbGUuCisgICBBZGRlZCBjb25maWd1cmUtdGltZSBjb2RlIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjb25zdHJ1Y3RvcnMKKyAgIGZvciBhbGwgY29uZmlndXJlZAorICAgdHJhbnNwb3J0cyBhcmUgaW52b2tlZCBmcm9tIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYy4KKworMjAxMC0wNS0xNCAxMTowMCAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIERvY3VtZW50YXRpb246IHVwZGF0ZWQgQ3lnd2luIGJ1aWxkIGluc3RydWN0aW9ucy4KKworMjAxMC0wNS0xNCAwOToxNSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfbnVsbC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsICAKKyAgICAgICBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNS0xNCAwODo1MCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBBZGRlZCAtbm8tdW5kZWZpbmVkIGZsYWcgdG8gbGlicmFyeSBsaW5rIGNvbW1hbmRzIHN1Y2ggdGhhdAorICAgbGlidG9vbCBjYW4gYnVpbGQgRExMcyBvbiBXaW4zMi4KKyAgIE5vdGU6IGJ1aWxkaW5nIERMTHMgb24gV2luMzIgZG9lcyBub3QgeWV0IHdvcmsgYmVjYXVzZSBvZiB0aGUKKyAgIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgorICAgbGlibmV0c25tcGhlbHBlcnMgYW5kIGxpYm5ldHNubXBhZ2VudAorICAgKHNlZSBhbHNvCisgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9MaWJyYXJ5X2xheWVyaW5nKS4KKworMjAxMC0wNS0xNCAwODo0MiAgYnZhc3NjaGUKKworICAgKiBsdG1haW4uc2g6CisKKyAgIGxpYnRvb2wgYnVnIGZpeDogYWxzbyBwYXNzIGZsYWdzIHN0YXJ0aW5nIHdpdGggLWYgdG8gdGhlIGxpbmtlcgorICAgc2luY2UgdGhlc2UgY2FuIGFmZmVjdCBsaW5raW5nLiBUaGUgZmxhZyAtZnN0YWNrLXByb3RlY3RvciBlLmcuCisgICB0cmlnZ2VycyBpbmNsdXNpb24gb2YgbGlic3NwLgorCisyMDEwLTA1LTE0IDA4OjQwICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IGFib3J0IGlmIHRoZSBmaWxlIHByb2dyYW0gY291bGQgbm90IGJlIGZvdW5kLAorICAgc2luY2UgdGhpcyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBvcGVyYXRpb24gb2YgbGlidG9vbC4KKyAgIENIQU5HRVM6IEN5Z3dpbjogbmVpdGhlciBjb21waWxlIG5vciBsaW5rIHdpbnBpcGUuYy4KKworMjAxMC0wNS0xMyAwODo1OCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJhbiBhdXRvcmVjb25mLgorCisyMDEwLTA1LTEyIDIwOjE2ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENIQU5HRVM6IExpbnV4OiBidWlsZHMgYWdhaW4gd2l0aCBlbWJlZGRlZCBQZXJsIGRpc2FibGVkIChidWcKKyAgIDI5ODU5MTUpLgorCisyMDEwLTA1LTEyIDE5OjQ3ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuYywgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3A6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4Njg0OiB1bi1icmVhayB0aGUgV2luMzIgTVNWQyBidWlsZC4KKworMjAxMC0wNS0xMiAxOTo0MyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIFdpbjMyOiBmaXhlZCBhIHR5cG8gYW5kIG1hZGUgaW5kZW50YXRpb24gY29uc2lzdGVudC4KKworMjAxMC0wNS0xMiAxOToxMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgY29uc3RydWN0IHRlbXAgYnVpbGQgZmlsZXMgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkKKworMjAxMC0wNS0xMiAxOToxMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHJlY2VudGx5IGJyb2tlbiBvbGQgcGVybCBmdW5jdGlvbmFsaXR5CisKKzIwMTAtMDUtMTIgMTg6MDEgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYWRkZWQgYSAtLXNob3J0IG9wdGlvbiB0byBzaG9ydGVuIHRoZSBzaG93IG91dHB1dCB0byBtaW5pbWFsaXN0aWMKKworMjAxMC0wNS0xMiAxNDoxNCAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gVENQLU1JQi4KKworMjAxMC0wNS0xMiAxMzowMiAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIG1lbW9yeSBsZWFrIHdoZW4gcmVhZGluZyBzZW5zb3JzIGZvcgorICAgTE0tU0VOU09SUy1NSUIuCisKKzIwMTAtMDUtMTIgMTI6NTcgIGR0czEyCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgUmV2ZXJ0IHJldmlzaW9uIDE4Njg5CisgICBMYXRlc3QgV2luMzIgYnVpbGRzIGluY2x1ZGUgc3VwcG9ydCBmb3Igc3RydG91bGwuCisKKzIwMTAtMDUtMTIgMTI6MDUgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogYWRkZWQgZGV0ZWN0aW9uIG9mIGxtX3NlbnNvcnMgdmVyc2lvbi4KKyAgIEkgYW0gbm90IEF1dG9jb25mIGd1cnUsIHNvIEkgaG9wZSBJIGdvdCBpdCByaWdodC4gVGhlIGdvYWwgaXMgdG8KKyAgIGRlZmluZSBORVRTTk1QX1VTRV9TRU5TT1JTX1YzICpiZWZvcmUqIGNvbmZpZ19tb2R1bGVzX2FnZW50CisgICBwcm9jZXNzZXMgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oLgorCisyMDEwLTA1LTEyIDA3OjAzICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgbWlzc2luZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0cmFuc3BvcnRzLgorCisyMDEwLTA1LTEyIDAzOjA4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggdGl0bGUgZ2VuZXJhdGlvbiBhZnRlciBjaGFuZ2UgdG8gd2hhdCBzcmNkaXIgbWVhbnQKKworMjAxMC0wNS0xMiAwMjozMCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICB1bmRvIGxhc3QgY2hhbmdlIHdoaWNoIHR1cm5lZCBvdXQgdG8gb25seSBjYXVzZSBlcnJvcnMgaWYgeW91IGhhZAorICAgYSBvbGQgLmNvbmYgZmlsZSBhcm91bmQKKworMjAxMC0wNS0xMiAwMjoxMyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggdjNfY2EgY3JlYXRpb24gZXh0ZW5zaW9uIG5hbWUKKworMjAxMC0wNS0xMiAwMjowNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAga2VlcCBmb3JtYXQgdmVyc2lvbiAjIGluIGNlcnQgaW5kZXhlczsgZG9uJ3Qgc3RvcmUgaGFzaCB0eXBlCisgICBzdHJpbmcgaW4gaW5kZXg7CisKKzIwMTAtMDUtMTIgMDI6MDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGZpeCBpbnZlcnRlZCBjb252ZXJzaW9uIGNhbGw7IGxlc3MgdmVyYm9zZSBkZWZhdWx0IGRlYnVnCisKKzIwMTAtMDUtMTIgMDI6MDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIGZpeCBwYXJzaW5nIG9mIC1UIG5hbWUvdmFsdWUgcGFpcnMKKworMjAxMC0wNS0xMSAyMzozMyAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBidWcgZml4aW5nIGFuZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgZm9yICJtYWtlIHRlc3QiIHdpdGgKKyAgIFRlc3Q6Okhhcm5lc3MKKyAgIChzdGlsbCBkb2Vzbid0IHdvcmsgZm9yIG1lLCB0aG91Z2gpCisKKzIwMTAtMDUtMTEgMjI6MzQgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgRG8gTk9UIGhhcmRjb2RlIC91c3IvYmluL3BlcmwgYXMgdGhlIFBlcmwgcGF0aAorCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggc3Rhc2ggZmlsZSBoYW5kbGluZworCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBsb25nIG9wdGlvbnMgc3VjayA7LSkuIHByZWZlciBkb3VibGUgZGFzaGVzIGZvciBsb25nIG9wdGlvbnMgdG8KKyAgIG1hdGNoIHRoZSByZXN0IG9mIHRoZSBOZXQtU05NUCBjb2RlIGJhc2UKKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgYWRkZWQgYWJpbGl0eSB0byBydW4gb25seSB0aGUgZmFpbGVkIHRlc3RzIGZyb20gdGhlIGxhc3QgcnVuCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGRvbid0IGZvcmNlIGNvbG9yCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGNsZWFudXAgb2Ygb2xkZXIKKworMjAxMC0wNS0xMSAyMDoxNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgTWluaW1hbGx5IHN1cHBvcnQgdGhlIG9sZGVyIFRlc3Q6Okhhcm5lc3MgcGVybCBtb2R1bGUgZm9yIHJ1bm5pbmcKKyAgIHRoZSBvbGRlciB0ZXN0cyBhdCBsZWFzdAorCisyMDEwLTA1LTExIDIwOjE1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc2V0IGEgZGVmYXVsdCBzZWN1cml0eU5hbWUgYW5kIHNlY3VyaXR5TW9kZWwgaWYgVExTIG9yIERUTFMgaXMgaW4KKyAgIHVzZSBvbiB0aGUgY2xpZW50IHNpZGUKKworMjAxMC0wNS0xMSAyMDoxNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXB1c20uYzoKKworICAgYWxsb3cgc2VjdXJpdHkgbW9kZWxzIHRvIHBlcmZvcm0gbW9yZSBvZiB0aGUgc2Vzc2lvbiBzZXR1cDsgbW92ZWQKKyAgIG1vcmUgVVNNIHNwZWNpZmljIHNldHVwIGludG8gaXQncyBzZXR1cCByb3V0aW5lCisKKzIwMTAtMDUtMTEgMTg6MDIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggcGFyYW0gdG8gbG9va3VwIHBlZXIgY2VydAorCisyMDEwLTA1LTExIDE2OjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGFsbG93ICctJyBpbiBmcWRuOyBhZGQgZGVidWcgb3V0cHV0IGZvciBob3N0IHNwZWNpZmljIGNvbmZpZworCisyMDEwLTA1LTExIDE1OjQ2ICBkdHMxMgorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBFbnN1cmUgJ25ldHNubXBfcmVhZF9tb2R1bGUnIGlzIGF2YWlsYWJsZSBmb3IgcGVybCBidWlsZC4KKworMjAxMC0wNS0xMSAxNTo0NCAgZHRzMTIKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBGaXggcGVybCBidWlsZCB1bmRlciBXaW5kb3dzIChzdHJ0b3VsbCBub3QgYXZhaWxhYmxlKQorCisyMDEwLTA1LTEwIDA3OjA3ICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIG1pc3Npbmcgc3ltYm9sIG5ldHNubXBfc25tcFNTSERvbWFpbl9sZW4sCisgICBtYWtlIG5ldHNubXBfc25tcFNTSERvbWFpbiBjb25zdC4KKworMjAxMC0wNS0wOSAyMjowMyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2Q6CisKKyAgIERvIG5vdCByZXF1aXJlIHF1b3RlcyBhcm91bmQgdGhlIENQVSBzdHJpbmcgYXMgdGhhdCBkZXBlbmRzIG9uCisgICBob3cgdGhlIGFnZW50IGlzIGNvbmZpZ3VyZWQuCisKKzIwMTAtMDUtMDkgMjE6NDMgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogRXh0cmFjdCB0aGUgRXhpdCBhbmQgcmVzdGFydCogc3Vicm91dGluZXMgZnJvbQorICAgdXRpbF9mdW5jIGluIG9yZGVyIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgbGVzcyBjb2RlIGZvciB0aGUKKyAgIG1pbmltYWwgY2FzZS4KKworMjAxMC0wNS0wOSAxNjo0NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZzogbWFkZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uCisgICBnZXRfZXhlY19vdXRwdXQoKSByZXR1cm5zIGEgdmFsdWUgd2hlbiB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbAorICAgVVNJTkdfVUNEX1NOTVBfRVhURU5TSUJMRV9NT0RVTEUgaGFzIG5vdCBiZWVuIGRlZmluZWQuCisKKzIwMTAtMDUtMDkgMTY6NDUgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogYnVpbGRzIG5vdyBhbHNvIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUKKyAgIGxvY2F0ZWQgb24gYSBTYW1iYSBmaWxlc3lzdGVtIGluc3RlYWQgb2YgYSBsb2NhbCBmaWxlc3lzdGVtLgorCisyMDEwLTA1LTA5IDEzOjA1ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6CisKKyAgIENvcnJlY3QgdGhlIGlmIHRoYXQgdHJpZXMgdG8gZmlndXJlIG91dCBpZiBhIHN1ZmZpY2llbnRseSBuZXcgZ2NjCisgICBpcyBpbiB1c2UuCisKKzIwMTAtMDUtMDkgMTI6NTAgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgQ2hlY2sgZm9yIHRoZSBuZWVkZWQgbW9kdWxlIGFuZCBub3Qgc29tZSBvdGhlciBvbmUuCisgICBMb2cgdGhlIGNvcnJlY3QgbWlzc2luZyBzeW1ib2wuCisKKzIwMTAtMDUtMDkgMDk6MjEgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogdXRpbGl0aWVzL2V4ZWN1dGUgZG8gbm90IG5lZWQgYW55dGhpbmcgZnJvbQorICAgdXRpbF9mdW5jcywgc28gc3RvcCBkZXBlbmRpbmcgb24gaXQuCisKKzIwMTAtMDUtMDkgMDk6MTIgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYzoKKworICAgTkVXUzogc25tcGQ6IFJlbW92ZWQgdGhlIHVudXNlZCBmdW5jdGlvbiB4eF90b2tlbml6ZV9leGVjX2NvbW1hbmQKKyAgIGZyb20gdXRpbGl0aWVzL2V4ZWN1dGUuCisKKzIwMTAtMDUtMDkgMDk6MDEgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFJlcGxhY2UgdGhlIGRlYnVnZ2luZyBmdW5jdGlvbnMgd2l0aCBkdW1taWVzCisgICB3aGVuIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKworMjAxMC0wNS0wOSAwODowMiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfb2xkdWNkOgorCisgICBDaGVjayB0aGF0IHRoZSBVRFAgdHJhbnNwb3J0IGlzIGVuYWJsZWQKKworMjAxMC0wNS0wOSAwODowMSAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdHJhbnNwb3J0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZDoKKworICAgRmFjdG9yIG91dCBjaGVjayBmb3IgbWliSUkvc3lzdGVtX21pYgorCisyMDEwLTA1LTA5IDA3OjU5ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICBBZGQgbWlzc2luZyBpbmNsdWRlcworCisyMDEwLTA1LTA4IDIzOjE2ICBtYWdmcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBBZGRpdGlvbmFsbHkgZml4IG1ha2UgdGVzdCBmb3IgdGhlIHVuY29tbW9uIGNhc2Ugd2hlcmUgYnVpbGRkaXIKKyAgID09IHNyY2RpcgorCisyMDEwLTA1LTA4IDIyOjU1ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogTWFrZSBpdCBwb3NzaWJsZSB0byBydW4gdGhlIHRlc3Qgc3VpdGUgZnJvbQorICAgYW55d2hlcmUuCisgICBDaGFuZ2UgdGhlIC1EIG9wdGlvbiB0byBleHBlY3QgdGhlIHBhdGggb2YgdGhlIHRvcCBzb3VyY2UKKyAgIGRpcmVjdG9yeS4KKyAgIEFkZCBhbiAtc3JjZGlyIG9wdGlvbiB0aGF0IGlzIGFuIGFsaWFzIGZvciAtRC4KKyAgIEFkZCBhbiAtYnVpbGRkaXIgb3B0aW9uIHRvIGRlc2lnbmF0ZSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSB0ZXN0CisgICBvYmplY3QgaXMuCisgICBQdXQgc3JjZGlyIGFuZCBidWlsZGRpciBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSB0ZXN0IHNjcmlwdHMKKyAgIEZhY3RvciBvdXQgdGhlIGdyZXAgcGFydCBvZiBTS0lQSUYgYW5kIFNLSVBJRk5PVCB0byBJU0RFRklORUQKKyAgIFVzZSBtb3JlIHJlYWRhYmxlIGtleXMgaW4gdGhlIG9wdHMgaGFzaCBpbiBSVU5GVUxMVEVTVFMKKyAgIEFkanVzdCBldmVyeXRoaW5nIHRvIHVzZSBzcmNkaXIgYW5kIGJ1aWxkZGlyCisKKzIwMTAtMDUtMDggMjI6NDIgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYzoKKworICAgVXNlIGNvcnJlY3QgYXJndW1lbnQgdHlwZXMKKworMjAxMC0wNS0wOCAyMjowNyAgbWFnZnIKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgQ29uc29saWRhdGUgdGhlIHRlc3QgYW5kIHRlc3QtbWlicyB0YXJnZXRzLgorICAgRXhwb3NlIHRoZSB0ZXN0YWxsIHRhcmdldCBpbiB0aGUgdG9wIG1ha2VmaWxlLgorCisyMDEwLTA1LTA4IDIyOjA1ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgRG8gbm90IGFib3J0IHdoZW4gc3RyIGlzIE5VTEwgYXMgdGhhdCBpcyBhIHBlcmZlY3RseSB2YWxpZCBpbnB1dC4KKworMjAxMC0wNS0wOCAyMjowMyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmM6CisKKyAgIFVzZSBjb3JyZWN0IGFyZ3VtZW50IHR5cGVzCisKKzIwMTAtMDUtMDggMjI6MDIgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICBBZGQgbWlzc2luZyBuZXdsaW5lCisKKzIwMTAtMDUtMDcgMjE6MTEgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZToKKworICAgdXBkYXRlIGZvciBuZXcgY29uZmlndXJlLmFjCisKKzIwMTAtMDUtMDcgMTk6MjEgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgZml4IGhhbmRsaW5nIG9mIGNlcnQgYWxnb3JpdGhtIGluIGZpbmdlcnByaW50czsgY29udmVydCBpbi9vdXQKKyAgIGZpbmdlcnBpbnRzCisgICBmcm9tL3RvIGhleAorCisyMDEwLTA1LTA3IDE5OjIxICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZG9udCBzcGVjaWZ5IGhhc2ggdHlwZSBmb3IgZmluZ2VycHJpbnQKKworMjAxMC0wNS0wNyAxOToyMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGhhbmRsZSBmaW5nZXJwcmludCB0eXBlczsgZHJvcCBzYW4gZmllbGRzIGZyb20gY2VydCBzdHJ1Y3Q7CisgICBjb25zaWRlciBkaXJlY3RvcnkKKyAgIHdoZW4gcGFydG5lcmluZyBrZXlzL2NlcnRzCisKKzIwMTAtMDUtMDcgMTk6MjAgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZS5hYzoKKworICAgbW92ZSBkZWZhdWx0IHByb21wdHMgZWFybGllcgorCisyMDEwLTA1LTA2IDE1OjQwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBiZXR0ZXIgU0FOIGV4dHJhY3Rpb247IHR3ZWFrIGR1Ymd1cyBtZXNzYWdlczsgcXVpZXQgY29tcGlsZXIKKyAgIHdhcm5pbmdzCisKKzIwMTAtMDUtMDYgMTU6MzkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHJlZHVjZSBjZXJ0IGRlYnVnIG91dHB1dDsgZGVidWcgaW5zdGVhZCBvZiBsb2dfaW5mbyBpbiBkdW1wcworCisyMDEwLTA1LTA2IDE0OjQ5ICBkdHMxMgorCisgICAqIHNubXBsaWIvaW5ldF9udG9wLmMsIHNubXBsaWIvaW5ldF9wdG9uLmM6CisKKyAgIERvbid0IGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgPHN0cmluZy5oPgorICAgKGJyaW5nIGludG8gbGluZSB3aXRoIGFsbCBvdGhlciBvY2N1cmFuY2VzKQorCisyMDEwLTA1LTA2IDE0OjQxICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCBzbm1wbGliL2NhbGxiYWNrLmM6CisKKyAgIENIQU5HRVM6IFdpbmRvd3M6IEZpeCBidWlsZCB1bmRlciBNaW5HVworICAgYmFjay9mb3J3YXJkIHBvcnQgb2YgcmV2aXNpb24gMTg2MzEKKworMjAxMC0wNS0wNSAxNzo0MyAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IHR5cGUgaW4gbG9nIG1zZworCisyMDEwLTA1LTA1IDE3OjQzICByc3RvcnkKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICByZW1vdmUgaW1wb3J0IGZvciB1bnVzZWQgZnVuY3Rpb24KKworMjAxMC0wNS0wNCAwNzoxMiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBOZWdhdGUgcmVhc29uIGdpdmVuIGZyb20gU0tJUElGCisKKzIwMTAtMDUtMDMgMjI6MzggIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGZpeCBsZW4gaW4gZW1haWwgY21wOyBtb3JlIGV4dHJhY3QgZGVidWdnaW5nCisKKzIwMTAtMDUtMDMgMjI6MzggIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGNvcHkgb2NlcnQgdG8gYWRkaW9uYWwgbWFwcworCisyMDEwLTA1LTAzIDE0OjIwICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgcmVtb3ZlIGRlcGVuZGVuY3kgb24gcGVybCBtb2R1bGUgbm90IHByZXNlbnQgaW4gQ2VudE9TCisKKzIwMTAtMDUtMDMgMDM6NDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGRvbid0IGFjY2VzcyBzdHJ1Y3QgaW50ZXJuYWxzIGRpcmVjdGx5CisKKzIwMTAtMDUtMDMgMDM6NDggIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgZml4IGNvbXBpbGluZyB3aXRoLW91dC1taWJtb2R1bGVzPXV0aWxpdGllcy9leGVjdXRlCisKKzIwMTAtMDUtMDEgMTk6MDggIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkOgorCisgICBDb3JyZWN0IHRoZSBzb3VnaHQgc3RyaW5nIHRvIG1ha2UgdGhlIHRlc3QgcGFzcyB3aGVuIG9rLgorCisyMDEwLTA1LTAxIDE3OjE1ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbW9yZSBjb25zaXN0ZW50IHRyZWF0bWVudCBvZiBrZXlVc2FnZSwgYmFzaWNDb25zdHJhaW50cywgb3RoZXIKKyAgIHg1MDl2MyBvcHRpb25zCisKKzIwMTAtMDQtMzAgMjM6MzcgIG1hcnoKKworICAgKiBsb2NhbC9jZXJ0Z2VuLXRlc3QucGw6CisKKyAgIGxhbWUgdGVzdCBzY3JpcHQgYnV0IGNvdmVycyBhIGNodW5rIG9mIHRoZSBjb2RlCisKKzIwMTAtMDQtMzAgMjM6MDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG1raW5zdGFsbGRpcnMgaW5zdGVhZCBpbnN0ZWFkIG9mIEZpbGU6OlBhdGgKKworMjAxMC0wNC0zMCAyMzowMCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIGVuc3VyZSBuZXQtc25tcC1jb25maWcgc2NyaXB0IGNhbiBiZSBydW4gZnJvbSB0aGUgYnVpbGQgZGlyCisKKzIwMTAtMDQtMzAgMjE6MzEgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBoYW5kbGUgZ2VuY2VydCAtLWNhCisKKzIwMTAtMDQtMzAgMjE6MDEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBoZWxwIGZvciBjZXJ0U2VjTmFtZTsgY29udGludWUgYnVpbGRpbmcgY2VydCBpbmRleGVzIGV2ZW4gaWYKKyAgIHdlIGNhbnQgc2F2ZQorICAgdG8gcGVyc2lzdGVudCBkaXIKKworMjAxMC0wNC0zMCAyMDo0OCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgZml4IGNoZWNrIGNvdW50IGZvciA4MjIgbmFtZXMgaW4gdGhlIHNubXBkLmxvZworCisyMDEwLTA0LTMwIDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBmaXggbWFsbG9jIHVubmRlcmxlbmd0aCBieSAxIGVycm9yCisKKzIwMTAtMDQtMzAgMjA6NDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGNvbW1lbnQgb3V0IHRoZSA4MjIgdGVzdHM7IHRoZXkncmUgYnJva2VuIGF0IHRoZSBtb21lbnQKKworMjAxMC0wNC0zMCAxOTozNiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGRvbid0IGxvc2UgU0FOIHdoZW4gc2lnbmluZyB3LyBDQQorCisyMDEwLTA0LTMwIDE4OjQ2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1ha2UgbmFtZSBjaGFuZ2UgdG8gcmZjODIyIGZyb20gdHlwb2VkIDgyMjAKKworMjAxMC0wNC0zMCAxODo0NiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGFkZGVkIHRlc3RzIHRvIGRvIG90aGVyIHN1YmplY3RBbHROYW1lIG1hcHBpbmcKKworMjAxMC0wNC0zMCAxNzozMSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBpc3N1ZXMgMSwyLDQgYW5kIC1DIGhhbmRsaW5nCisKKzIwMTAtMDQtMjkgMDM6MzIgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXBkYXRlIHRsc3RtQ2VydFRvVFNOVGFibGUgdG8gdXNlIGNhY2hlICsgY2VydF91dGlsIG1hcHMKKyAgIGNvbnRhaW5lcgorCisyMDEwLTA0LTI5IDAzOjMxICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIGNoZWNrIGluc2VydCByZXR1cm4KKworMjAxMC0wNC0yOSAwMzozMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBORVdTOiBzbm1wbGliOiBhZGQgcmVtb3ZlIGZ1bmN0aW9uIHRvIGNvbnRhaW5lciBpdGVyYXRvcjsKKyAgIGltcGxlbWVudCBpdCBmb3IKKyAgIGJpbmFyeV9hcnJheQorCisyMDEwLTA0LTI5IDAzOjMxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgbWFrZSBzdXJlIGNvbnRhaW5lciBzeW5jIGluY3JlbWVudGVkIG9uIHNvcnQsIGluc2VydCBhbmQgcmVtb3ZlCisKKzIwMTAtMDQtMjggMDc6MjAgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9pbmV0X250b3AuYzoKKworICAgUmVtb3ZlZCBhbiBvYnNvbGV0ZSBjb21tZW50LgorCisyMDEwLTA0LTI4IDAwOjMzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIGZpeCBtYWtlZmlsZSBmb3IgdGVzdCB0YXJnZXQKKworMjAxMC0wNC0yOCAwMDozMyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHA6CisKKyAgIG1ha2UgdGhlIHRlc3Qgc3VpdGUgcnVuIG91dHNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkgYWdhaW4uCisKKzIwMTAtMDQtMjggMDA6MzMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICBkZWFsIHdpdGggb3V0LW9mLXNvdXJjZSB0cmVlIGJ1aWxkaW5nCisKKzIwMTAtMDQtMjggMDA6MzIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB0ZXN0aW5nIHRvIGNoZWNrIGNlcnRpZmljYXRlIHRvIHNlY3VyaXR5bmFtZSBtYXBwaW5ncyBhbmQgZGVuaWFscworCisyMDEwLTA0LTI4IDAwOjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgY3JlYXRlZCBhIG1hcHBlZCB1c2VyCisKKzIwMTAtMDQtMjggMDA6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwOgorCisgICBnZW5lcmF0ZSBvYmplY3QgY29kZSB3aXRoIC1nIGRlYnVnZ2luZworCisyMDEwLTA0LTI4IDAwOjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYzoKKworICAgbW9yZSBhY2N1cmF0ZSBjdXJyZW50IEFQSSB1c2FnZSBmb3Igc2NhcGkgY29kZQorCisyMDEwLTA0LTI3IDIxOjEzICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBmaXggY2VydCBpbml0IGR1cGxpY2F0ZSBjYWxsIGNoZWNrCisKKzIwMTAtMDQtMjcgMjA6NTggIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgY29udmVydCB1c2VyIGZpbmdlcnByaW50IHRvIGxvd2VyIGFuZCBzdHJpcCBjb2xvbnM7IGFkZCBleHRlcm4KKyAgIHByb3RvdHlwZQorICAgZm9yIGNlcnQgaW5pdCBzbyB3ZSBkb24ndCBuZWVkIGhlYWRlcgorCisyMDEwLTA0LTI3IDIwOjE1ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBtYW4vc25tcGQuY29uZi41LmRlZiwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzZXBhcmF0ZSBjZXJ0IGluaXQgYW5kIGNlcnQgbG9hZGluZzsgYWRkIGNlcnRTZWNOYW1lIGNvbmZpZyB0b2tlbgorCisyMDEwLTA0LTI3IDAzOjE4ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgbWVyZ2UgTkVUU05NUF9GVU5DVElPTiBhbmQgIU5FVFNOTVBfRlVOQ1RJT04gYXNzZXJ0IGNhc2VzCisKKzIwMTAtMDQtMjcgMDM6MDIgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbG90cyBvZiBuZXcgY2VydCBmdW5jdGlvbmFsaXR5CisgICAtIGFkZCBzc2wgZnVuY3MgZm9yIGNlcnQgZXh0ZW5zaW9ucyBhbmQgc3NsIGNlcnQgY2hhaW5zCisgICAtIGZ1bmN0aW9ucyBhbmQgbmV3IG5ldHNtcF9jZXJ0X21hcCBzdHJ1Y3QgZm9yIGxvb2tpbmcgdXAgY2VydAorICAgbWFwcGluZ3MKKyAgIC0gYWRkIGNlcnRpZmljYXRlIG1hcHBpbmcgZm9yIHNlY25hbWUKKyAgIC0gYWRkIGNvZGUgdG8gYnVpbGQgY2VydCBjaGFpbnMKKyAgIC0gYWRkIHN1YmplY3QgdG8gY2VydCBpbmRleCBjYWNoZQorICAgLSByZWJ1aWxkIGluZGV4ZXMgaWYgYW55IGVycm9yIHdoaWxlIHBhcnNpbmcgaW5kZXgKKyAgIC0gcmVmb3JtYXQgZHVtcCBvdXRwdXQKKyAgIC0gYWRkIE5TX0NFUlRfQ0EgYWxsb3dlZF91c2UgZmxhZworICAgLSBhZGQgc3ViamVjdCwgaXNzdWVyIGFuZCBpc3N1ZXJfY2VydCB0byBuZXRzbm1wX2NlcnQKKyAgIC0gbW92ZSBjZXJ0IGNvbnRhaW5lciBzZXR1cCB0byBpdHMgb3duIGZ1bmN0aW9uCisgICAtIGFkZCBjZXJ0IHN1YmplY3QgbmFtZSBzdWJjb250YWluZXIKKworMjAxMC0wNC0yNyAwMzowMiAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXguYzoKKworICAgbW92ZSBpcHY2IHNwZWNpZmljIHZhciBkZWNsIGluc2lkZSBpZmRlZgorCisyMDEwLTA0LTI3IDAzOjAyICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogdGRhdGEgaGVscGVyIG5vdyBzYXZlcyBmbGFncyBwYXNzZWQgZHVyaW5nCisgICBjcmVhdGlvbjsgYWRkIHRkYXRhCisgICBmbGFnIHRvIE5PVCBjcmVhdGUgdGhlIHRhYmxlIGNvbnRhaW5lcgorCisyMDEwLTA0LTI3IDAzOjAxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGFkZCBpbnRlcmZhY2UgZm9yIGR1cGxpY2F0aW5nIGEgY29udGFpbmVyCisgICBDSEFOR0VTOiBzbm1wbGliOiBjb250YWluZXIgY2hhbmdlczogYWRkIGZsYWdzIGZpZWxkIHRvIGNvbnRhaW5lcgorICAgbWV0YS1kYXRhOworICAgY2hnIGJpbmFyeV9hcnJheSBjb250YWluZXIgdG8gdXNlIGNvbnRhaW5lciBtZXRhLWRhdGEgZmxhZ3MKKworMjAxMC0wNC0yNiAyMjozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgYWRkZWQgYSB0ZXN0IHRvIHZlcmlmeSB0aGF0IHdoZW4gdGhlIHRyYW5zcG9ydCBpcyBjb25maWd1cmVkIHdpdGgKKyAgIGEgcmVtb3RlIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IHRoZSBjb25uZWN0aW9uIGlzIGRlbmllZAorCisyMDEwLTA0LTI2IDIyOjMyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZDoKKworICAgYWRkZWQgdGVzdHMgZm9yIC1UIGZsYWcgdXNhZ2UgYW5kIGludmFsaWQgdXNlciB1c2FnZQorCisyMDEwLTA0LTI2IDIwOjU0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX29sZHVjZDoKKworICAgaGF2ZSB0aGUgYWxpYXMgdHJhbnNwb3J0IHNvdXJjZSB0aGUgcmlnaHQgU3YzY29uZmlnIGZpbGUKKworMjAxMC0wNC0yNiAyMDo1MCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkOgorCisgICB3b3JraW5nIHN1cHBvcnQgb2YgVExTL0RUTFMgdGVzdGluZyBpbmNsdWRpbmcgY2VydCBnZW5lcmF0aW9uCisKKzIwMTAtMDQtMjYgMjA6NDkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaG9ub3IgdGhlIGNvbmZpZyBkaXIgaWYgc3BlY2lmaWVkIHZpYSAtQworCisyMDEwLTA0LTI2IDIwOjQ5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmaXggcmVhbGxvYyBjYWxsIGZvciBidWZmZXJlZCBwYWNrZXRzCisKKzIwMTAtMDQtMjYgMjA6NDkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgcHJvcGVyIHNraXAgb3V0cHV0IGZvciByZXBvcnRpbmcgcmVhc29uCisKKzIwMTAtMDQtMjYgMjA6NDkgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGFmdGVyIGJhY2tzbGFzaCBpbiBtYWNybworCisyMDEwLTA0LTI2IDIwOjQ4ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdHJhbnNwb3J0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QuY2VydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QucHJpdiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLmNlcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5wcml2OgorCisgICB0ZXN0cyBmb3IgbWluaW1hbGx5IHRlc3RpbmcgYWxsIHRoZSB0cmFuc3BvcnRzCisKKzIwMTAtMDQtMjYgMjA6NDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SRUFETUU6CisKKyAgIG1pbmltYWxseSBkb2N1bWVudCBuZXcgUlVORlVMTFRFU1RTIHNjcmlwdAorCisyMDEwLTA0LTI2IDIwOjQ4ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1QuYywgdGVzdGluZy9UMi5zaCwgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1tZDUsICAgCisgICAgICB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEsIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMS1kZXMsICAgCisgICAgICB0ZXN0aW5nL2RhdGEua3VsLW1kNSwgdGVzdGluZy9kYXRhLmt1bC1zaGExLCB0ZXN0aW5nL21pc2N0ZXN0LmMsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3Rfa2V5Y2hhbmdlLnNoLCB0ZXN0aW5nL3Rlc3Rfa3VsLnNoOgorCisgICBkZWxldGVkIG9sZCBmaWxlcyBub3Qgd29ydGggcmVzdG9yaW5nCisKKzIwMTAtMDQtMjYgMjA6NDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9ldmFsX3Rlc3RsaXN0OgorCisgICByZW1vdmUgb2Jzb2x1dGUgdGVzdCBsaXN0CisKKzIwMTAtMDQtMjYgMjA6NDcgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jOgorCisgICBhIGhhc2gtdGVzdGluZyAuYyBmaWxlIEkgaGFkIGxheWluZyBhcm91bmQKKworMjAxMC0wNC0yNiAyMDo0NyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBtYWtlIHRlc3RhbGwgdGFyZ2V0CisKKzIwMTAtMDQtMjYgMjA6NDcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCB0ZXN0aW5nL2V0aW1ldGVzdC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2tleW1hbmFnZXRlc3QuYywgdGVzdGluZy9zY2FwaXRlc3QuYzoKKworICAgbW92ZSBvbGQgQy1jb2RlIHRlc3RzIGluIHBsYWNlCisKKzIwMTAtMDQtMjYgMjA6NDcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9vbGR1Y2Q6CisKKyAgIHNraXAgc29sYXJpcyBjb21tZW50cworCisyMDEwLTA0LTI2IDIwOjQ2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIGZpeCBpbnZvY2F0aW9uIG9mIFJVTkZVTExURVNUUworCisyMDEwLTA0LTI2IDIwOjQ2ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjFjb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2MmNjb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M2NvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYWdlbnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2Jhc2UsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ3RyYXBkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN2YWNtY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFjbWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3Zhbnljb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3RyYW5zcG9ydCwgdGVzdGluZy90ZXN0cy9TdjFjb25maWcsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2MmNjb25maWcsIHRlc3RpbmcvdGVzdHMvU3YzY29uZmlnLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdhZ2VudCwgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdiYXNlLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWd0cmFwZCwgdGVzdGluZy90ZXN0cy9TdjN2YWNtY29uZmlnLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9TdmFjbWNvbmZpZywgdGVzdGluZy90ZXN0cy9TdmFueWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldCwgdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoLCB0ZXN0aW5nL3Rlc3RzL1QwMjBzbm1wdjNnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIyMHNubXB2M2J1bGtnZXQsIHRlc3RpbmcvdGVzdHMvVDAyMnNubXB2M2dldE1ENSwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENUFFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENURFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNHNubXB2M2dldFNIQTEsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjVzbm1wdjNnZXRTSEFERVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjZzbm1wdjNnZXRTSEFBRVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjhzbm1wdjNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybWF1dGgsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1wcml2LCB0ZXN0aW5nL3Rlc3RzL1QwNTBzbm1wdjN0cmFwLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAsIHRlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0sIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDIsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OGFnZW50YXV0aHRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUsIHRlc3RpbmcvdGVzdHMvVDA2MHRyYXBkcGVybCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA2MWFnZW50cGVybCwgdGVzdGluZy90ZXN0cy9UMDY1YWdlbnRleHRlbmQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzBjb20yc2VjLCB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4LCB0ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExMGFnZW50eGdldCwgdGVzdGluZy90ZXN0cy9UMTExYWdlbnR4c2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTEyYWdlbnR4c2V0ZmFpbCwgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExNGFnZW50eGFnZW50eHRyYXAsIHRlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmwsIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwsIHRlc3RpbmcvdGVzdHMvVDEzMHNubXB2MXZhY21nZXQsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMzFzbm1wdjJjdmFjbWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEzMnNubXB2M3ZhY21nZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MnNubXB2M3ZhY21nZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUwc29sYXJpc2hvc3RjcHUsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTFzb2xhcmlzaG9zdGRpc2ssIHRlc3RpbmcvdGVzdHMvVDE1Mmhvc3R1cHRpbWUsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTNzb2xhcmlzc3dhcCwgdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QuY2VydCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QucHJpdiwgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIuY2VydCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLnByaXY6CisKKyAgIE5FV1M6IHRlc3Rpbmc6IEJyYW5kIG5ldyB0ZXN0IHN1aXRlIGRlc2lnZW5lZCB0byBldmVudHVhbGx5IHRlc3QKKyAgIG1vcmUgZnVuY3Rpb25hbGl0eSwgcHJvdmlkZSBmb3Igc3VwcG9ydCBvZiB1bml0LXRlc3RzIGFuZCBzdXBwb3J0CisgICBvZiBBUEkgdGVzdHMKKworMjAxMC0wNC0yNiAyMDo0MyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICByZW1vdmVkIGEgZGVidWdnaW5nIGVjaG8KKworMjAxMC0wNC0yNiAyMDo0MyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBtb3JlIGJ1ZyBmaXhlcyBmb3Igc3RyaW5nIHNlYXJjaGVzCisKKzIwMTAtMDQtMjYgMjA6NDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgYWRkZWQgYSBuZXcgbWFjcm8gdG8gY2hlY2sgYSB0cmFwZCBjb3VudAorCisyMDEwLTA0LTI2IDIwOjQyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIHVzZSBpbmRpdmlkdWFsIG91dHB1dCBmaWxlcyBhbmQgZml4IHNvbWUgdGVzdHMKKworMjAxMC0wNC0yNiAyMDo0MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBtYWRlIGV4aXN0aW5nIHRlc3Qgc3VpdGUgcHV0IG91dCBUQVAgb3V0cHV0CisKKzIwMTAtMDQtMjYgMjA6NDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVOVEVTVFMsIHRlc3RpbmcvVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2V2YWxfb25lcHJvZ3JhbS5zaCwgdGVzdGluZy9ldmFsX29uZXNjcmlwdC5zaCwgICAKKyAgICAgIHRlc3RpbmcvZXZhbF9zdWl0ZS5zaCwgdGVzdGluZy9ldmFsX3Rvb2xzLnNoLCB0ZXN0aW5nL2Z1bGx0ZXN0cywgIAorICAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIGJlZ2lubmluZyBvZiBtb3ZpbmcgVUNEIHRlc3Qgc3VpdGUgaW50byBhIGxhcmdlciBzdWJkaXJlY3RvcnkKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgYWxsb3cgcnVubmluZyB0ZXN0cyB0aGF0IG1hdGNoIGEgcmVnZXhwCisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN1bW1hcml6ZSB0ZXN0cyB0aGF0IGZhaWxlZAorCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBjcmVhdGVkIHRoZSBhYmlsaXR5IHRvIGhhdmUgcnVuXyBzY3JpcHRzIGZvciBleGVjdXRpbmcgY2VydGFpbgorICAgdHlwZXMKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbWFkZSB0aGUgYnVpbGQtc2NyaXB0LWNoZWNrIHJvdXRpbmUgZ2VuZXJpYworCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzdXBwb3J0IGZvciBidWlsZCBzY3JpcHRzCisKKzIwMTAtMDQtMjYgMjA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHByb3ZpZGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGJ1aWxkaW5nIGFuZCByZW5hbWluZyB0ZXN0cworCisyMDEwLTA0LTI2IDIwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBtb3JlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc2V0dXAKKworMjAxMC0wNC0yNiAyMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3VwcG9ydCB0aGUga2V5d29yZCAnYWxsJworCisyMDEwLTA0LTI2IDIwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBlbmFibGUgZ3JvdXAgZ2F0aGVyaW5nCisKKzIwMTAtMDQtMjYgMjA6MzkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGNyZWF0aW5vIG9mIGEgbmV3IHRlc3RpbmcgaGFybmVzcworCisyMDEwLTA0LTI1IDE3OjM3ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgRG9jdW1lbnRhdGlvbiB1cGRhdGUuCisKKzIwMTAtMDQtMjUgMTU6MjEgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbjMyOiByZXZlcnRlZCBhIHJlY2VudCB1bm5lY2Vzc2FyeSBtb2RpZmljYXRpb24uCisKKzIwMTAtMDQtMjUgMTU6MDAgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBoYW5kbGUgbXVsdGlwbGUgLS1zYW4gYXJncywgY2hlY2sgZXJyb3IgY29kZXMgb24gb3BlbnNzbCBjbWRzIGFuZAorICAgZGllIG9uIGZhaWx1cmUKKworMjAxMC0wNC0yNSAxNDoxOCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oOgorCisgICBXaW4zMjogYnVpbGRzIGFnYWluIHdpdGggU0RLIHN1cHBvcnQgZGlzYWJsZWQuCisKKzIwMTAtMDQtMjUgMTQ6MTggIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIAorICAgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOgorCisgICBXaW4zMjogcmVzdG9yZWQgY29uc2lzdGVuY3kgYmV0d2VlbiB3b3Jrc3BhY2UtYnVpbGQgYW5kIGJhdGNoCisgICBidWlsZCAtLSBtYWRlIHN1cmUgdGhhdCBub3RpZmljYXRpb25fbG9nLmMgaXMgb25seSBpbmNsdWRlZCBpbgorICAgdGhlIG5ldHNubXBtaWJzIHByb2plY3QuCisKKzIwMTAtMDQtMjUgMTM6NTggIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAKKyAgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaDoKKworICAgV2luMzI6IGZpeGVzIGZvciByZWNlbnRseSBpbnRyb2R1Y2VkIGJ1aWxkIGJyZWFrYWdlLgorCisyMDEwLTA0LTI1IDEzOjUxICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluOgorCisgICBXaW4zMjogYnVpbGRzIGFnYWluIHdpdGggU0RLIHN1cHBvcnQgZGlzYWJsZWQuCisKKzIwMTAtMDQtMjUgMTM6NDggIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgc25tcGxpYi9jbG9zZWRpci5jLCBzbm1wbGliL29wZW5kaXIuYywgIAorICAgICAgIHNubXBsaWIvcmVhZGRpci5jLCBzbm1wbGliL3dpbnNlcnZpY2UuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIFdpbjMyIE1TVkMgNiBub24tU0RLIGJ1aWxkIHdvcmtzIGFnYWluLgorCisyMDEwLTA0LTI1IDEzOjQyICBidmFzc2NoZQorCisgICAqIHdpbjMyL0NvbmZpZ3VyZToKKworICAgUmVtb3ZlZCBhbiBvYnNvbGV0ZSB0cmFuc2Zvcm1hdGlvbiBydWxlLgorCisyMDEwLTA0LTI1IDEyOjA1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBNYWRlIGl0IGFnYWluIHBvc3NpYmxlIHRvIGRpc2FibGUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgd2hlbgorICAgYnVpbGRpbmcgdmlhIHdpbjMyL2J1aWxkLmJhdC4KKworMjAxMC0wNC0yMyAxMzoxNCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGFkZGVkIC0tc2FuIEROUzphLmIuYyBoYW5kbGluZywgaGVscCB0ZXh0IGZpeGVzLCBvdGhlciBidWcgZml4ZXMuCisgICBOb3RlIG11bHRpcGxlIC0tc2FuIG5vdCBzdXBwb3J0ZWQgeWV0CisKKzIwMTAtMDQtMjEgMjI6MzEgIGhhcmRha2VyCisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW46CisKKyAgIGJ1aWxkIHRoZSAubWFkZSB2ZXJzaW9uIG9mIG5ldC1zbm1wLWNlcnQKKworMjAxMC0wNC0yMSAyMjozMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kIGFmdGVyIG1vdmluZyBhbGwgdGhlIGZpbGVzIGFyb3VuZAorCisyMDEwLTA0LTIxIDIwOjE2ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGJ1aWxkIHRydXN0IGNoYWluIGZvciBjbGllbnQgY2VydDsgYWRkIHN1YmplY3QgdG8gaW5kZXggY2FjaGU7CisgICByZWJ1aWxkIGluZGV4ZXMKKyAgIGlmIGFueSBlcnJvciB3aGlsZSBwYXJzaW5nIGluZGV4OyByZWZvcm1hdCBkdW1wIG91dHB1dAorICAgLSBhZGQgTlNfQ0VSVF9DQSBhbGxvd2VkX3VzZSBmbGFnCisgICAtIGFkZCBzdWJqZWN0LCBpc3N1ZXIgYW5kIGlzc3Vlcl9jZXJ0IHRvIG5ldHNubXBfY2VydAorICAgLSBtb3ZlIGNlcnRUb1RTTl9lbnRyeSB0byBjZXJ0X3V0aWwgaGVhZGVyCisgICAtIG1vdmUgY29udGFpbmVyIHNldHVwIHRvIGl0cyBvd24gZnVuY3Rpb24KKyAgIC0gYWRkIHN1YmplY3QgbmFtZSBzdWJjb250YWluZXIKKyAgIC0gYWRkIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfZXh0ZW5zaW9ucywKKyAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2lzc3VlZF9ieQorCisyMDEwLTA0LTIxIDE2OjE2ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wY21kLjEuZGVmOgorCisgICBkb2N1bWVudCB0aGUgc2luZ2xlLWRhc2ggLyBzbm1wLmNvbmYgLyBkb3VibGUtZGFzaCBwcmVjaWRlbmNlCisKKzIwMTAtMDQtMjEgMTY6MTUgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZjoKKworICAgZG9jdW1lbnQgaW4gdGhlIHNubXAuY29uZiBmaWxlIHRoYXQgdGhlIHRva2VucyBjYW4gYmUgdXNlZCBmb3IKKyAgIGNvbW1hbmQgbGluZSBhcHBsaWNhdGlvbnMgdG9vCisKKzIwMTAtMDQtMjEgMTY6MTUgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZjoKKworICAgZG9jdW1lbnQgdGhlIGZpbGUgbG9hZGluZyBvcmRlciBhbmQgaG93IHRvIHR1cm4gb2ZmIGhvc3Qtc3BlY2lmaWMKKyAgIGNvbmZpZworCisyMDEwLTA0LTIxIDE1OjUyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgbWFuL3NubXAuY29uZi41LmRlZiwgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBORVdTOiBhcHBzOiBHZW5lcmljIGhvc3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzbm1wLmNvbmYgZmlsZXMKKyAgIGFyZSBub3cgcmVhZC4gU2VlIHRoZSBIT1NULVNQRUNJRklDIEZJTEVTIHNlY3Rpb24gb2YgdGhlCisgICBzbm1wLmNvbmYgbWFudWFsIHBhZ2UuCisKKzIwMTAtMDQtMjAgMTI6NDQgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvYXNuMS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjk3MTI3MDogcmVmdXNlIHRvIHBhcnNlIEFTTi4xIHRva2VucworICAgd2l0aCB3cm9uZyB0eXBlIGZpZWxkLgorICAgVGhpcyBtYXkgeWllbGQgdG8gcHJvYmxlbXMgd2l0aCB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMgd2hpY2gKKyAgIG1heSBkZXBlbmQgb24gcGFyc2luZyB1Z2x5IEFTTi4xIGRhdGEgLSB3ZSdsbCBzZWUuLi4KKworMjAxMC0wNC0yMCAwMDoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY29tYmluZSByZW1vdGUgZmluZ2VycHJpbnQgY2hlY2tpbmcgYW5kIGNoZWNrIGJvdGggc2lkZXMKKworMjAxMC0wNC0yMCAwMDowNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGlmIHRoZSByZW1vdGUgZmluZ2VycHJpbnQgaXMgc3BlY2lmaWVkLCByZXF1aXJlIGFuIGV4YWN0IG1hdGNoCisKKzIwMTAtMDQtMTkgMjM6NDQgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCB2YXJpb3VzIG1pbm9yIGJ1Z3MsIGVzcGVjaWFsbHkgaW4gb3V0cHV0IG1lc3NhZ2VzCisKKzIwMTAtMDQtMTkgMjE6MTQgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGRvY3VtZW50YXRpb24gYW5kIHByb3RvdHlwaW5nIG9mIG5lZWRlZCBSRkMgc3RlcHMKKworMjAxMC0wNC0xOSAyMToxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjb252ZXJ0IGlmIGVycm9yIGNoZWNrIHRvIHJldHVybiBpbW1lZGlhdGVseSBzbyBvdGhlciBjb2RlIGNhbiBiZQorICAgb3V0ZGVudGVkCisKKzIwMTAtMDQtMTkgMjE6MTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGNvbW1lbnRzIGZyb20gdGhlIFJGQyB0ZXh0CisKKzIwMTAtMDQtMTggMTU6MjUgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3RyYW5zcG9ydHMsICAgCisgICAgICB3aW4zMi9idWlsZC5wbCwgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgCisgICAgICAgIHdpbjMyL3RyYW5zcG9ydHMsIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaDoKKworICAgV2luMzI6IGJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0wNC0xNiAxODo1MyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY3JlYXRlZCBhIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHNlY3VyaXR5TmFtZSBmcm9tIHRoZSBjZXJ0CisKKzIwMTAtMDQtMTYgMTg6NTMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIGFjY2VwdCBzdGF0ZSBmb3IgVExTIChqdXN0IERUTFMpCisKKzIwMTAtMDQtMTYgMTg6NTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIFRMUyBjb21tZW50IGRvY3VtZW50YXRpb24gYW5kIHN0ZXBzIHRha2VuIGZyb20gdGhlIFJGQworCisyMDEwLTA0LTE2IDEzOjU1ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbnVtZXJvdXMgZml4ZXMsIG1vcmUgdmVyYm9zZSBkZWZhdWx0IG91dHB1dCwgYWRkaXRpdmUgc2hvdyBmbGFncywKKyAgIGFyYml0cmFyeSBjb25maWcgcGFyYW0gaGFuZGxpbmcsIGJldHRlciBoZWxwIHRleHQKKworMjAxMC0wNC0xNiAxMzowOCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgZG9uJ3QgZG91YmxlIGRlY2xhcmUgYSBzdHJ1Y3QKKworMjAxMC0wNC0xNiAwMzozMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgY2VydCB1dGlsIGZpeGVzCisgICAtIHJlbW92ZSB1bnVzZWQgdmFycyBhbmQgZHVwbGljYXRlIGNvZGUKKyAgIC0gY2hlY2sgcHJ0IGJlZm9yZSBmcmVlCisgICAtIG5ldyBmdW5jIGZvciB0eXBlIGZyb20gZmlsZW5hbWUKKyAgIC0gbmV3IGZ1bmN0aW9ucyBmb3IgZmluZGluZyBzdWJzZXRzIGZyb20gZmlsZW5hbWUKKyAgIC0gZml4IHR5cGVzIGluIGtleSBzZWFyY2ggZnVuY3Rpb24gYnV0IHRoZW4gaWZkZWYgaWYgKHVudXNlZAorICAgZnVuY3Rpb24pCisKKzIwMTAtMDQtMTUgMjI6NTcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIHVzZSBhIHN0cnVjdHVyZSByZWZlcmVuY2UgdG8gcHJlZGVjbGFyZSB0aGUgc3RydWN0dXJlCisKKzIwMTAtMDQtMTUgMjE6MjUgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGNvcnJlY3QgZGVjbGFyYXRpb24gb2YgdGhlIGZfb3BlbiBjb21tYW5kIG5vdyByZXF1aXJpbmcgcmV0dXJuaW5nCisgICBhIHRyYW5zcG9ydAorCisyMDEwLTA0LTE1IDIxOjAyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgdW5uZWVkZWQgY29uZmlnIGNvbnRhaW5lcgorCisyMDEwLTA0LTE1IDIxOjAyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb3B5IGZpbmdlcnByaW50IHRyYW5zcG9ydCBpbmZvcm1hdGlvbiBpbnRvIG5ldyB0bHMgc3RydWN0dXJlCisgICB3aXRoaW4gRFRMU1VEUCBzbyBwZXItdHJhbnNwb3J0IGZpbmdlcnByaW50cyBjYW4gYmUgc3BlY2lmaWVkCisKKzIwMTAtMDQtMTUgMjE6MDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHByb3Blcmx5IGNoZWNrIGZvciB0bHNiYXNlIHBvaW50ZXJzIGluIGR0bHN1ZHBfc2VuZCgpCisKKzIwMTAtMDQtMTUgMjE6MDEgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIGdyZXAgdGhlIHRyYW5zcG9ydCBsaXN0IGZvciBUTFMgbm90IGp1c3QgRFRMUyBmb3IgY2hlY2tpbmcgZm9yCisgICAtbHNzbAorCisyMDEwLTA0LTE1IDIxOjAxICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBidWcgZml4ZXMgYW5kIG1hZGUgVExTVENQIHdvcmsgd2l0aCB0aGUgLVQgZmxhZworCisyMDEwLTA0LTE1IDIxOjAxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbWFrZSB0aGUgZl9vcGVuIGNhbGwgYXNzaWduIHRoZSBuZXcgdHJhbnNwb3J0IHBvaW50ZXIgdG8gdXNlIChhbmQKKyAgIGNoZWNrIGlmIE5VTEwgYXMgYSBmYWlsdXJlIGNvbmRpdGlvbgorCisyMDEwLTA0LTE1IDIxOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBiZWdpbiB3b3JrIG1vdmluZyBEVExTIGNvbmZpZyByb3V0aW5lIGluIHBsYWNlCisKKzIwMTAtMDQtMTUgMjE6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBwYXNzIHRoZSBlbnRpcmUgdGxzYmFzZSB0byB0aGUgY2xpZW50X3NldHVwCisKKzIwMTAtMDQtMTUgMjE6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCBzbm1wbGliL3NubXBfYXBpLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc3RhcnRpbmcgdGhlIHN0b3Jpbmcgb2YgY29uZmlnIGRhdGEgaW50byB0aGUgdGxzYmFzZQorCisyMDEwLTA0LTE1IDIwOjU5ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjaGFuZ2UgY2xpZW50IHNzbCBzZXR1cCB0byBhbGxvdyBmb3IgZGlyZWN0IGZpbmdlcnByaW50CisgICBzcGVjaWZpY2F0aW9uIG9mIG15L3RoZWlyIGNlcnRzCisKKzIwMTAtMDQtMTUgMjA6NTkgIGhhcmRha2VyCisKKyAgICogIGFnZW50L3NubXBfYWdlbnQuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsIAorICAgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNwbGl0IFRMUyBpbnRvIGNyZWF0aW9uL2Nsb3NlIGZ1bmN0aW9ucyBmb3IgZXZlbnR1YWwgY29uZmlnCisgICBwYXNzaW5nIHN1cHBvcnQKKworMjAxMC0wNC0xNSAyMDo1OSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBwYXNzIHRyYW5zcG9ydCBjb25maWcgZGF0YSB0byB0aGUgdHJhbnNwb3J0IGZfY29uZmlnKCkgZnVuY3Rpb24KKworMjAxMC0wNC0xNSAyMDo1OSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJldHVybiBOVUxMIG9uIHRyYW5zcG9ydCBjb25maWcgZXJyb3IKKworMjAxMC0wNC0xNSAyMDo1OCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIE5FV1M6IGFwcHM6IC1UIGNvbW1hbmQgbGluZSBmbGFnIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZQorICAgdHJhbnNwb3J0cworCisyMDEwLTA0LTE1IDIwOjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgY2hlY2sgdHJhbnNwb3J0IE5VTExuZXNzIGJlZm9yZSB1c2luZworCisyMDEwLTA0LTE1IDIwOjU4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGJlZ2lubmluZyBvZiB3b3JrIHRvIG1ha2UgdHJhbnNwb3J0cyBjb25maWd1cmFibGUgd2l0aAorICAgc3VwcGxpbWVudGFsIGNvbmZpZ3VyYXRpb24gZGF0YSBhbmQgbmV3IGNhbGxzIGZvciBmX29wZW4vZl9jb25maWcKKworMjAxMC0wNC0xNSAyMDo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBhZGRlZCB0ZXh0IGluIGNvbW1lbnRzIGZyb20gZnV0dXJlIFJGQyB0byBkb2N1bWVudCB0aGUKKyAgIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDQtMTUgMTg6NTEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1hcmsgcGVtIHcva2V5IGFzIGlkZW50aXR5OyB0d2VhayBwYXJ0bmVyIGRlYnVnOyBjb21wYXJlIGZpbGUKKyAgIGN0aW1lIGFnYWluc3QgaW5kZXggdG9vCisKKzIwMTAtMDQtMTUgMTc6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHVzZSBsb2NhbCBzcGFjZSB0byByZWZvcm1hdCBjZXJ0IGZvciBzZWFyY2gKKworMjAxMC0wNC0xNSAxNjo1NSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oOgorCisgICBQYXJ0aWFsbHkgcmV2ZXJ0ZWQgcjE4NDk2OgorICAgLSBDb21tZW50ZWQgb3V0ICNkZWZpbmUgTkVUU05NUF9VU0VfRExMIGFnYWluIGluIGZpbGUKKyAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIG9uIHRoZSA1LjQgYnJhbmNoLiBUaGlzIGNoYW5nZQorICAgaGFkIGJlZW4gY29tbWl0dGVkIHVuaW50ZW50aW9uYWxseS4KKyAgIC0gUmUtZW5hYmxlZCAjZGVmaW5lCisgICBVU0lOR19OT1RJRklDQVRJT05fTE9HX01JQl9OT1RJRklDQVRJT05fTE9HX01PRFVMRSBpbgorICAgd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCBvbiB0aGUgdHJ1bmsgYW5kIHRoZQorICAgVjUuNSBicmFuY2guIFdoaWxlIGJ1aWxkLmJhdCByZXBvcnRzIGFuIGVycm9yIG9uIGVhcmxpZXIgYnJhbmNoZXMKKyAgIHdpdGggdGhpcyBzeW1ib2wgZW5hYmxlZCwgdGhlcmUgaXMgbm8gc3VjaCBwcm9ibGVtIG9uIHRoZSB0cnVuaworICAgb3IgVjUuNSBicmFuY2hlcyBhbmQgaGVuY2UgdGhlcmUgd2FzIG5vIHJlYXNvbiB0byBkaXNhYmxlIHRoaXMKKyAgIHByZXByb2Nlc3NvciBzeW1ib2wuCisKKzIwMTAtMDQtMTUgMTU6MDggIG1hcnoKKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbjoKKworICAgYWRkIG5ldC1zbm1wLWNlcnQgdG8gbWFrZS9pbnN0YWxsCisKKzIwMTAtMDQtMTUgMTA6NTIgIGpzYWZyYW5laworCisgICAqIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldDoKKworICAgVGVzdHMgbm90IHdvcmtpbmcgZm9yIFRDUCBzaG91bGQgYmUgc2tpcHBlZCBhbHNvIGZvciBUQ1A2LgorCisyMDEwLTA0LTE0IDE4OjEzICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBmaXggdmFycy90ZXh0IGZyb20gY3V0LW4tcGFzdGUKKworMjAxMC0wNC0xNCAxNzo0NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZml4IGNvbW1lbnRzCisKKzIwMTAtMDQtMTQgMTc6NDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGxvdHMgb2YgY2VydCB1cGRhdGVzCisgICAtIGNoYW5nZSBjZXJ0IHN1YmRpciBzZWFyY2hpbmcgdG8gbWF0Y2ggbmV0LXNubXAtY2VydAorICAgLSB1cGRhdGUga2V5IHR5cGUgaGFuZGxpbmcKKyAgIC0gaWdub3JlIHdvcmxkIHJlYWRhYmxlIGtleXMKKyAgIC0ga2VlcCB0eXBlIGluIGluZGV4ZXMKKyAgIC0gdHdlYWsgY2VydC9rZXkgcHJpbnQgZm9ybWF0CisKKzIwMTAtMDQtMTQgMTc6NDQgIHJzdG9yeQorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG1ha2UgbmV0LXNubXAtY2VydCBleGVjdXRhYmxlCisKKzIwMTAtMDQtMTQgMTM6MTIgIGpzYWZyYW5laworCisgICAqICB0ZXN0aW5nL3Rlc3RzL1N2YWNtY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWw6CisKKyAgIEZpeGVkIHRlc3RzICdQcm94eSBHRVQvU0VUIHN1cHBvcnQnIGFuZCAnU05NUHYyIHZhY20gZGVuaWFsCisgICBzdXBwb3J0JyB3aXRoIHVkcDYgdHJhbnNwb3J0LgorCisyMDEwLTA0LTE0IDA5OjQ3ICBkdHMxMgorCisgICAqICB3aW4zMiwgd2luMzIvYmluLCB3aW4zMi9kaXN0LCB3aW4zMi9kaXN0L2h0bWxoZWxwLCAgIAorICAgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIsIHdpbjMyL2Rpc3Qvc2NyaXB0cywgd2luMzIvZW5jb2RlX2tleWNoYW5nZSwgCisgICAgICAgIHdpbjMyL2xpYiwgd2luMzIvbGliYWdlbnQsIHdpbjMyL2xpYmhlbHBlcnMsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQsIHdpbjMyL2xpYnNubXAsIHdpbjMyL2xpYnNubXBfZGxsLCAgIAorICAgICAgd2luMzIvbGlidWNkbWlicywgd2luMzIvbG9jYWwsIHdpbjMyL25ldC1zbm1wLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQsIHdpbjMyL25ldC1zbm1wL2xpYnJhcnksIHdpbjMyL25ldHNubXBtaWJzLCAgCisgICAgICAgd2luMzIvc25tcGJ1bGtnZXQsIHdpbjMyL3NubXBidWxrd2Fsaywgd2luMzIvc25tcGQsICAgCisgICAgICB3aW4zMi9zbm1wZGVsdGEsIHdpbjMyL3NubXBkZiwgd2luMzIvc25tcGdldCwgd2luMzIvc25tcGdldG5leHQsICAKKyAgICAgICB3aW4zMi9zbm1wbmV0c3RhdCwgd2luMzIvc25tcHNldCwgd2luMzIvc25tcHN0YXR1cywgICAKKyAgICAgIHdpbjMyL3NubXB0YWJsZSwgd2luMzIvc25tcHRlc3QsIHdpbjMyL3NubXB0cmFuc2xhdGUsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcCwgd2luMzIvc25tcHRyYXBkLCB3aW4zMi9zbm1wdXNtLCB3aW4zMi9zbm1wdmFjbSwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrOgorCisgICBEb24ndCB0cnkgdG8gU1ZOLW1hbmFnZSB0aGUgV2luZG93cyBiYXRjaCBidWlsZCBpbmZyYXN0cnVjdHVyZQorICAgKGFkZCByZWxlYXNlLCBkZWJ1ZywgTWFrZWZpbGUgdG8gdGhlIHByZXZpb3VzIGlnbm9yZSBsaXN0KQorCisyMDEwLTA0LTE0IDA4OjE2ICBkdHMxMgorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBGaXggV2luZG93cyBiYXRjaCBidWlsZCB1c2luZyBWaXN1YWwgU3R1ZGlvIHdpdGggZHluYW1pYyBsaW5raW5nLgorICAgVW5yZWZlcmVuY2VkIHN5bWJvbCBpbnRyb2R1Y2VkIGJ5IFNWTiByZXZpc2lvbiAxODM5MworCisyMDEwLTA0LTE0IDA4OjA4ICBkdHMxMgorCisgICAqIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBGaXggYmF0Y2ggYnVpbGQgdXNpbmcgcmVjZW50IHZlcnNpb25zIG9mIFZpc3VhbAorICAgU3R1ZGlvLgorICAgUGFydGlhbCBiYWNrIHBvcnQgb2YgU1ZOIHJldmlzaW9ucyAxNzU3MyBhbmQgMTc2OTYuCisKKzIwMTAtMDQtMTQgMDE6NDcgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggcGVybXMgb24gY3JlYXRlZCBmaWxlcyAtcnctLS0tLS0tLCB1bWFzaygwNzcpCisKKzIwMTAtMDQtMTMgMjI6MTUgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0LCBsb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmY6CisKKyAgIGZpeCBwZXJtcywgYWRkIC0tY24vLWMsIGJldHRlciBkYXRlcyBkZWZhdWx0cywgc25tcC10bHMgb3JnX3VuaXQsCisgICBhZGRlZCBpbml0aWFsIGR1bW15IGNvbmZpZyBmaWxlCisKKzIwMTAtMDQtMTMgMTQ6MjEgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXhlcyBmb3Igc2hvdyBjbWRzLCBjbWRsaW5lLCBoZWxwCisKKzIwMTAtMDQtMTMgMDI6MTcgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBzdXBwb3J0IGZvciBrZXkrY2VydCBpbiAucGVtIGZpbGVzOyBtaXNjIHR3ZWFrcworCisyMDEwLTA0LTEwIDIzOjI0ICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBidWlsZCBmaXggZm9yIEM4OSBjb21waWxlcnMgKGUuZy4gb24gSFAtVVggMTAuMjApCisKKzIwMTAtMDQtMTAgMjI6MjUgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIGluaXRpYWwgY3V0IGF0IHRsc3RtQ2VydFRvVFNOVGFibGUKKworMjAxMC0wNC0xMCAyMjoyNCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oOgorCisgICBhZGQgZGVmaW5lIG9mIG1heCBoYXNoIGNvbnN0YW50CisKKzIwMTAtMDQtMTAgMjI6MjQgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jOgorCisgICB1c2UgY2VydCB1dGlsIGNoZWNrIGZvciBmaW5nZXJwcmludCBsZW4vYWxnb3JpdGhtCisKKzIwMTAtMDQtMTAgMTI6NTkgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBzaG93IGNtZCBmaXhlcworCisyMDEwLTA0LTA5IDIxOjMyICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZmFpcmx5IGZ1bmN0aW9uYWwgKG5vbi1pbnRlcmFjdGl2ZSkgLSBiZSBpdCBrbm93bjogdGhlcmUgYXJlIGJ1Z3MKKworMjAxMC0wNC0wOSAyMDo1NCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaDoKKworICAgbWVyZ2Ugc29tZSB0YWJsZV9kYXRhLmNvbmYgY2hhbmdlczsgcmVtb3ZlIHVudXNlZCBjb2RlIGFuZCBhCisgICBidW5jaCBvZiB2ZXJib3NlIGNvbW1lbnRzCisKKzIwMTAtMDQtMDggMTQ6NTcgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLXVwZGF0ZToKKworICAgdXNlIGZ1bGwgcGF0aAorCisyMDEwLTA0LTA4IDEwOjU1ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oOgorCisgICBDaGVjayByZXN1bHRzIG9mIGNhbGxzIHRvIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSBhbmQgbG9nCisgICBhbiBlcnJvci4KKyAgIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHJlbGF0ZSB2YXJpb3VzICdjNjQgMzIgYml0IGNoZWNrIGZhaWxlZCcKKyAgIGVycm9ycyB3aXRoIHNwZWNpZmljIGNvdW50ZXIuCisKKzIwMTAtMDQtMDggMDE6MDkgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaDoKKworICAgYWRkIHByb3RvdHlwZSBmb3IgbmV3IGZ1bmN0aW9uCisKKzIwMTAtMDQtMDggMDE6MDUgIHJzdG9yeQorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHRyYW5zbGF0ZSBOT1NVQ0gqL0VORE9GTUlCIGVycm9ycyBkdXJpbmcgUkVTRVJWRTEKKyAgIHRvIE5PQ1JFQVRJT04KKworMjAxMC0wNC0wOCAwMDo1NiAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBORVdTOiBzbm1wZDogdGFibGVfZGF0YS90ZGF0YSBuZXh0IGhhbmRsZXIgd2lsbCBub3QgYmUgY2FsbGVkCisgICBkdXJpbmcgZ2V0CisgICBwcm9jZXNzaW5nIGlmIG5vIHZhbGlkIHJvd3MgYXJlIGZvdW5kIGZvciB0aGUgaGFuZGxlcgorCisyMDEwLTA0LTA4IDAwOjU2ICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisKKyAgIE5FV1M6IHNubXBkOiBhZ2VudCB3aWxsIG5vIGxvbmdlciBjYWxsIHRhYmxlIGhhbmRsZXJzIGlmIGEgc2V0CisgICByZXF1ZXN0IGZvcgorICAgdGhlIGhhbmRsZXIgaGFzIGludmFsaWQgaW5kZXhlcworICAgQ0hBTkdFUzogc25tcGQ6IGRvbid0IGNhbGwgY2xlYW51cCBvbiBmaXJzdCByZXF1ZXN0IG9uIGJhZAorICAgaW5kZXhlcy4gaW5zdGVhZCwKKyAgIHNldCBhY3R1YWwgZXJyb3IgbGF0ZXIsIGFuZCBmcmVlIHJlcXVlc3QgZGF0YSBzZXRzIG9uIGZpcnN0CisgICByZXF1ZXN0IGZvciBzZXRzCisKKzIwMTAtMDQtMDggMDA6NTYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGZpbmdlcnByaW50IHZhcmJpbmQKKworMjAxMC0wNC0wNyAyMjo1NiAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgU29sYXJpcyB0ciBkb2Vzbid0IHN1cHBvcnQgY2hhcmFjdGVyIHJhbmdlcyByZWxpYWJseSAoc2VlIHRoZQorICAgYXV0b2NvbmYgbWFudWFsKSwgY2hhbmdlIHRoZSBleHByZXNzaW9uIHRvIG9uZSB0aGF0IGlzIHNpbXBsZQorICAgZW5vdWdoIHRvIGIgc3VwcG9ydGVkLgorCisyMDEwLTA0LTA3IDE0OjA1ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgSW5zZXJ0IHRoZSBjYWNoZSBoZWxwZXIgY29ycmVjdGx5LgorCisyMDEwLTA0LTA3IDEwOjQwICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBhZGQgZnVuY3Rpb25zIHRvIHJlbW92ZSBsaXN0L3JvdyBkYXRhIGZyb20KKyAgIHJlcXVlc3QgbGlzdAorCisyMDEwLTA0LTA3IDEwOjQwICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIGlmZGVmIHZhciBkZWNsIGZvciB2YXJzIG9ubHkgdXNlZCBpbiBsYXRlciBpZmRlZiBibG9jaworCisyMDEwLTA0LTA3IDEwOjQwICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wLXRjLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGFkZCBmdW5jdGlvbiB0byB2YWxpZGF0ZSBSb3dTdGF0dXMgYW5kCisgICBTdG9yYWdlVHlwZSB2YXJiaW5kcworICAgLSBhbHNvIHJlbW92ZSBzb21lIGR1cGxpY2F0ZSBjb2RlIGFuZCBmaXggY29tbWVudHMgaW5kZW50IG1hbmdsZWQKKworMjAxMC0wNC0wNyAxMDozOSAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMtdXBkYXRlLCBtYW4vbWliMmMtdXBkYXRlLjEuZGVmOgorCisgICB1cGRhdGUgbWFuIHBhZ2U7IGZpeCBzaGVsbCByZWRpcmVjdDsgY3JlYXRlIGV4YW1wbGUgcmNmaWxlIGlmCisgICBtaXNzaW5nCisKKzIwMTAtMDQtMDcgMDc6MTUgIG1hZ2ZyCisKKyAgICogYXBwcy9hZ2VudHh0cmFwLmM6CisKKyAgIFVzZSBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgaW5zdGVhZCBvZiBESVNBQkxFX01JQl9MT0FESU5HCisKKzIwMTAtMDQtMDcgMDA6MzggIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IE9ubHkgZW5hYmxlIGhvc3RTd0luc3QgcnBtIHN1cHBvcnQgb24gbGludXggaG9zdHMKKyAgIHdpdGggbGlicnBtLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIG9uIG5vbi1ycG0gbGludXgKKyAgIGRpc3RyaWJ1dGlvbnMuCisKKzIwMTAtMDQtMDcgMDA6MTQgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtYXV0aCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybXByaXYsIHRlc3RpbmcvdGVzdHMvVDA1MHNubXB2M3RyYXAsIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcCwgdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybSwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZSwgdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTFhZ2VudHhzZXQsIHRlc3RpbmcvdGVzdHMvVDExMmFnZW50eHNldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWw6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IENoYW5nZSB0aGUgdGVzdCBzdWl0ZSB0byB3b3JrIGV2ZW4gaWYgbWliCisgICBsb29rdXAgaXMgZGlzYWJsZWQuCisKKzIwMTAtMDQtMDcgMDA6MTEgIG1hZ2ZyCisKKyAgICogdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzY6CisKKyAgIENoZWNrIGZvciBjb20yc2VjNiwgbm90IGNvbTJzZWMuCisKKzIwMTAtMDQtMDYgMjI6NTEgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIE1vdmUgZGlyZWN0b3J5IGNyZWF0aW9uIGJlZm9yZSB0aGUgZGlyZWN0b3JpZXMgYXJlIHVzZWQuCisKKzIwMTAtMDQtMDYgMTE6MDMgIGR0czEyCisKKyAgICogRkFROgorCisgICBQeXRob24gaXMgYXBwYXJlbnRseSBjbGllbnQtc2lkZSBvbmx5LgorCisyMDEwLTA0LTA2IDEwOjA2ICBkdHMxMgorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIFNldCBzdXBwbGVtZW50YXJ5IGdyb3VwcyBiZWZvcmUgY2hhbmdpbmcgVUlECisgICAod2hpY2ggcHJvYmFibHkgaW52b2x2ZXMgZ2l2aW5nIHVwIHByaXZpbGVnZXMpCisKKzIwMTAtMDQtMDYgMDg6NTcgIGR0czEyCisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OgorCisgICBEb2N1bWVudCBsYXJnZS1kaXNrIHN0YXRpc3RpY3MgYXMgbGF0Y2hpbmcgYXQgMlRiIChyYXRoZXIgdGhhbgorICAgd3JhcHBpbmcpLgorCisyMDEwLTA0LTA2IDAxOjUyICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYywgbWFuL21pYjJjLjEuZGVmOgorCisgICBORVdTOiBtaWIyYzogbWliMmMgY2FuIG5vdyBvcHRpb25hbGx5IHJ1biBzZWQgb24gZ2VuZXJhdGVkIGNvZGUKKworMjAxMC0wNC0wNiAwMTo0OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNvbnZlcnQgQysrIGNvbW1lbnRzIHRvIEMgY29tbWVudHMKKworMjAxMC0wNC0wNiAwMTo0OSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIG1vdmUgcHRyIGNoZWNrIGJlZm9yZSBwcnQgdXNlCisKKzIwMTAtMDQtMDYgMDE6NDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBmaWxlbmFtZSB0byBkZWJ1ZyBvbiBuZXcgY2VydHM7IG1ha2Ugc3RhdGljIGZ1bmMgdG8gcmV0dXJuCisgICBtb2RlIG5hbWVzCisKKzIwMTAtMDQtMDYgMDA6NDcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGFsbG93IGEgZm91bmQgZmluZ2VycHJpbnQgc2VsZi1zaWduZWQgY2VydCBmb3Igbm93OyBldmVudHVhbGx5CisgICBuZWVkIHRvIHJlc3BlY3QgdGhlIE1JQiBjb25maWcgdGFibGUKKworMjAxMC0wNC0wNiAwMDoxMiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgbWtkaXIgc25tcGxpYi90cmFuc3BvcnRzIHdoZW4gRE5FIGZvciBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UKKyAgIGRpcgorCisyMDEwLTA0LTA2IDAwOjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZW1vdmUgdW51c2VkIHZhcnMKKworMjAxMC0wNC0wNiAwMDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCisyMDEwLTA0LTA2IDAwOjExICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZXJyb3IgY29kZSBjbGVhbnVwIGZvciB0bHNiYXNlX3dyYXB1cF9yZWN2CisKKzIwMTAtMDQtMDUgMjM6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbW9yZSBiZXR0ZXIgZXJyb3IvZGVidWcgY29kZXMKKworMjAxMC0wNC0wNSAyMzowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBjb21tZW50cyBmcm9tIHRoZSBmdXR1cmUtUkZDIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjsgdXNlCisgICBmbGFncyBmb3Igc2VydmVyL2NsaWVudCBzcGVjaWZpY2F0aW9uIGZvciBleHBhbnNpb24KKworMjAxMC0wNC0wNSAyMzowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgZm9yIHVzYWdlIGNvbnN0cmFpbnRzCisKKzIwMTAtMDQtMDUgMjM6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW92ZSBmdW5jdGlvbiBwcm90ZWN0aW9uIGxvZ2ljIGluIGEgdG9wLWxldmVsIGNoZWNrCisKKzIwMTAtMDQtMDIgMTY6MzYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGZpeCBpbml0IG9yZGVyaW5nCisKKzIwMTAtMDQtMDIgMTY6MzYgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtdiB0bHNiYXNlIGluaXQgZnVuY3Rpb24gdG8gYSBwcm9wZXIgY3RvciBmb3IgYXV0by1jYWxsaW5nCisKKzIwMTAtMDQtMDIgMTY6MzYgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ0hBTkdFUzogZ2VuZXJhdGUgdGhlIHRyYW5zcG9ydCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBsaXN0CisgICBkeW5hbWljYWxseSBhbmQgdXNlIGl0CisKKzIwMTAtMDQtMDIgMTY6MzUgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLCBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYywgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQWERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFNTSERvbWFpbi5jLCBzbm1wbGliL3NubXBTVEREb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFNvY2tldEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3RyYW5zcG9ydHMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTVEREb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBtb3ZlZCB0cmFuc3BvcnQgY29kZSBpbnRvIGEgc2VwYXJhdGUgc3ViZGlyZWN0b3J5IGluCisgICBzbm1wbGliCisKKzIwMTAtMDQtMDIgMDk6MDIgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmM6CisKKyAgIERvIG5vdCBhdHRlbXB0IHRvIGNoZWNrIHNpemVvZiB2b2lkIHRvIG9idGFpbiB0aGUgYW1vdW50IG9mCisgICBtZW1vcnkgdG8gY29weS4KKworMjAxMC0wNC0wMSAxNzoxMSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oOgorCisgICBpbnN0ZWFkIG9mIGZ3ZCBkZWNsYXJlcywgcmVxdWlyZSBvdGhlciBoZWFkZXIKKworMjAxMC0wNC0wMSAxNzoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nCisKKzIwMTAtMDQtMDEgMTc6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIG91dGRhdGVkIGRlYnVnIG1zZworCisyMDEwLTA0LTAxIDE3OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHVzZSBjZXJ0YXBpIHRvIGZpbmQgY2VydHMva2V5cworCisyMDEwLTA0LTAxIDE0OjQwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlZ2lzdGVyIGV4dHJhWDUwOVN1YkRpciB0b2tlbgorCisyMDEwLTA0LTAxIDE0OjE4ICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIGNoZWNrIHB0ciBiZWZvcmUgdXNlCisKKzIwMTAtMDQtMDEgMTQ6MTggIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgY2hlY2sgcHRyIGJlZm9yZSB1c2UKKworMjAxMC0wNC0wMSAxMzoxMyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIGFkZCBwZXJzaXN0ZW50IHN0b3JhZ2U7IHRva2VuIGZvciBjcmVhdGluZyBlbnRyaWVzIGluIHNubXBkLmNvbmY7CisgICBmaXggaW5kZXgKKworMjAxMC0wNC0wMSAxMzoxMiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBORVdTOiBzbm1wbGliOiBuZXcgY2VydGlmaWNhdGUgYXBpIHRvIHN1cHBvcnQgdGxzL2R0bHMKKworMjAxMC0wNC0wMSAxMzoxMiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBDSEFOR0VTOiBhZGQgZnVuY3Rpb25zIHRvIGdldCBmaW5nZXJwcmludCBmcm9tIGNlcnQgYW5kIGxvZworICAgb3BlbnNzbCBlcnJzCisKKzIwMTAtMDQtMDEgMTI6NDYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6CisKKyAgIGZpeCB0eXBvCisKKzIwMTAtMDQtMDEgMTA6MzMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBwcmUtQzkwIGNvbXBpbGVycy4KKworMjAxMC0wNC0wMSAxMDowMSAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBDSEFOR0VTOiBtaWIyYzogdGFibGVfZGF0YSB0ZW1wbGF0ZSBlbmhhbmNlbWVudHMKKyAgIC0gYWRkIGVycm9yIGNoZWNrcyBkdXJpbmcgdGFibGUgaW5pdAorICAgLSBjcmVhdGUgY2FjaGUgZWFybGllciBzbyB3ZSBjYW4gYmFpbCBvbiBmYWlsdXJlCisgICAtIGFkZCBvcHRpb24gdG8gY3JlYXRlL2RlbGV0ZSByb3cgdy9vdXQgYWRkaW5nL3JlbW92aW5nIGZyb20KKyAgIGNvbnRhaW5lcgorCisyMDEwLTA0LTAxIDEwOjAwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmg6CisKKyAgIGFkZCBoZWxwZnVsIHBhcmFtIG5hbWVzIGFzIGhpbnRzIGluIHByb3RvdHlwZQorCisyMDEwLTA0LTAxIDEwOjAwICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIHNlYXJjaCBmb3IgY29udGFpbmVyIHNwZWNpZmljIGNvbnRhaW5lciBiZWZvcmUgZ2VuZXJpYworCisyMDEwLTA0LTAxIDEwOjAwICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaCwgc25tcGxpYi9kaXJfdXRpbHMuYywgICAKKyAgICAgIHNubXBsaWIvZmlsZV91dGlscy5jOgorCisgICBORVdTOiBzbm1wbGliOiBlbmhhbmNlIGZpbGUgdXRpbHMgYW5kIGRpciB1dGlscworICAgLSBhZGQgb3B0aW9uYWwgc3RhdHMgc3RydWN0IHRvIG5ldHNubXBfZmlsZQorICAgLSBnZW5lcmFsaXplIGRpciBjb250YWluZXIgZmlsdGVyLCBhZGQgY29udGV4dCB0byBjYWxsYmFjaworICAgLSBhZGQgb3B0aW9uIHRvIHN0b3JlIG5ldHNubXBfZmlsZXMgKHcvc3RhdHMpIGluIGNvbnRhaW5lcgorICAgaW5zdGVhZCBvZiBqdXN0IG5hbWUKKworMjAxMC0wNC0wMSAxMDowMCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBhZGQgcHJvdG90eXBlIHRvIGhlYWRlcjsgY2hlY2sgcHRyIGJlZm9yZSBkZXJlZmVyZW5jaW5nCisKKzIwMTAtMDMtMzEgMTU6MzQgIGpzYWZyYW5laworCisgICAqICBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvc25tcC1icmlkZ2UtbWliLCBtYW4vTWFrZWZpbGUuaW4sICAgCisgICAgICBtYW4vc25tcC1icmlkZ2UtbWliLjEsIG1pYnMvQlJJREdFLU1JQi50eHQsIG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBtaWJzL01ha2VmaWxlLm1pYjoKKworICAgTkVXUzogbWlzYzogUEFUQ0g6IDI5NTI3MDg6IGZyb20gSmVucyBPc3RlcmthbXA6IEFkZGVkIFBlcmwKKyAgIGltcGxlbWVudGF0aW9uIG9mIEJSSURHRS1NSUIKKworMjAxMC0wMy0zMSAwMjoxMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHByb3BlciBwYWNrZXQgbGFiZWxpbmcgZm9yIERUTFNVRFAKKworMjAxMC0wMy0zMSAwMjoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgdXNlIGNvbW1vbiBjb250ZXh0IGNyZWF0aW9uIGNvZGUKKworMjAxMC0wMy0zMCAyMzoyNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2hhbmdlIFRMUyBtZXRob2QgdG8gVExTdjEgZnJvbSBTU0x2MjMKKworMjAxMC0wMy0zMCAyMzoyMyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3ZlIG1vcmUgY29tbW9uIGRhdGEgYW5kIGZ1bmN0aW9uYWxpdHkgaW50byB0aGUgVExTIGJhc2UKKworMjAxMC0wMy0zMCAyMzoyMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbWlub3IgVExTIGNvZGUgY2xlYW51cAorCisyMDEwLTAzLTMwIDIwOjI4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmV3b3JrIGlmKCkgd3JhcHBpbmcgZm9yIGxlc3MgY29uZnVzaW9uIGluIGVycm9yIGhhbmRsaW5nCisKKzIwMTAtMDMtMzAgMjA6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb2RlIGNvbnNvbGlkYXRpb24gaW4gc3RhcnRfbmV3X2NhY2hlZF9jb25uZWN0aW8KKworMjAxMC0wMy0zMCAyMDoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJlbmFtZSBnZW5lcmljICdiaW8nIHBvaW50ZXIgdG8gJ3JlYWRfYmlvJyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5CisKKzIwMTAtMDMtMzAgMjA6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBtb3ZlIGJ1ZmZlcmVkIGRhdGEgY3JlYXRpb24gdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgcmV1c2UKKworMjAxMC0wMy0zMCAxNzo1MiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGluaXRpYWwgY2VydCBnZW4gd3JhcHBlciBzY3JpcHQgLSBub3Qgd29ya2luZworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY2xlYW4gdXAgZXJyb3Igb3V0cHV0IHNvIGl0IGRvZXNuJ3QgcmVwb3J0IHdhbnRfcmVhZCBhbmQKKyAgIHdhbnRfd3JpdGUgZXJyb3JzCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZW5hbWluZyBvZiBzZW5kaW5nIGZ1bmN0aW9uIGZvciBjbGFyaXR5IGFuZCBjaGVjayBvbmUgbW9yZQorICAgbG9jYXRpb24gZm9yIG5lZWRlZCBvdXRnb2luZyBwYWNrZXRzCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBhZGRlZCBkdGxzdWRwIHRyYWNpbmcgdG9rZW5zCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDoKKworICAgQ0hBTkdFUzogYWRkZWQgYSBuZXcgREVCVUdUUkFDRVRPSygpIG1hY3JvCisKKzIwMTAtMDMtMzAgMTc6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBiZXR0ZXIgY29tbWVudHMgYW5kIG1vcmUgd29yayBvbiBzZW5kaW5nIGJ1ZmZlcmVkIGRhdGEgaW4gdGhlCisgICByaWdodCBzcG90cworCisyMDEwLTAzLTMwIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggYXJndW1lbnRzIHRvIGdldF9jb21tb25OYW1lCisKKzIwMTAtMDMtMzAgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBiZWdpbm5pbmcgb2YgY2FjaGluZyBvZiBwYWNrZXRzIGJlZm9yZSB0aGV5IGNhbiBiZSBzZW50IHZpYSBEVExTCisKKzIwMTAtMDMtMzAgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBoYW5kbGUgU1NMX1dBTlRfUkVBRC9XUklURSBiZXR0ZXI7IHN0aWxsIG5lZWQgdG8gYnVmZmVyIG91dGdvaW5nCisgICB3cml0ZSBkYXRhCisKKzIwMTAtMDMtMzAgMTc6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtaW5vciBjaGFuZ2UgdG8gb3V0cHV0IGVycm9yIHByaW50aW5nCisKKzIwMTAtMDMtMjkgMTU6MjAgIGR0czEyCisKKyAgICogc25tcGxpYi92YWNtLmM6CisKKyAgIE5FV1M6IHNubXBkOiBGaXggaGFuZGxpbmcgb2YgbXVsdGlwbGUgbWF0Y2hpbmcgVkFDTSBlbnRyaWVzLgorICAgKFVzZSB0aGUgImJlc3QiIG1hdGNoLCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lKS4KKyAgIFJlcG9ydGVkIGJ5IEFkYW0gTGV3aXMuCisgICBOb3RlIHRoYXQgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZgorICAgZXhpc3RpbmcgYWNjZXNzIGNvbnRyb2wgY29uZmlndXJhdGlvbnMuCisKKzIwMTAtMDMtMjkgMTU6MTYgIGJ2YXNzY2hlCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogcGVybDoKKyAgIE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX3JlcXVlc3RfaW5mb1B0cjo6Z2V0VmFsdWUoKTogZG9uJ3QgcmV0dXJuCisgICBhIHBvaW50ZXIgdG8gYSBidWZmZXIgb24gdGhlIHN0YWNrLiBIb3cgY2FuIHRoaXMgaGF2ZSB3b3JrZWQKKyAgIHJlbGlhYmx5ID8/CisgICBDSEFOR0VTOiBwZXJsOgorICAgTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfcmVxdWVzdF9pbmZvUHRyOjpzZXRWYWx1ZSgpLAorICAgQVNOX0NPVU5URVI2NDogZml4ZWQgYnVnIHRoYXQgY291bGQgY2F1c2UgdGhpcyBtZXRob2QgdG8gZmFpbAorICAgZXZlbiB3aGVuIGEgdmFsaWQgbnVtYmVyIHdhcyBwcm92aWRlZC4KKworMjAxMC0wMy0yOSAxNToxNSAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXB1c20uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogRml4IGFnZW50IGNyYXNoIHdoZW4gc2VuZGluZyBlbmNyeXB0ZWQgU05NUHYzCisgICB0cmFwcy4KKyAgIFJlcG9ydGVkIGJ5IFNyaWthcGlsYW4gR2FuZGhpCisKKzIwMTAtMDMtMjkgMTI6NDYgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKworICAgQ2F0Y2ggc3RkZXJyIG9uIFdpbmRvd3MgdG9vLgorCisyMDEwLTAzLTI5IDExOjQ4ICBidmFzc2NoZQorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIHByZS1DOTAgY29tcGlsZXJzLgorCisyMDEwLTAzLTI5IDExOjE5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgcGVybC9PSUQvT0lELnhzLCAgIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGRlc3Ryb3lpbmcgYQorICAgTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gb2JqZWN0LgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZmFpbHVyZSBvZgorICAgY3JlYXRpbmcgYSBOZXRTTk1QOjpPSUQgb2JqZWN0LgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgdGhlCisgICBOZXRTTk1QOjpPSUQ6OmdldHRhYmxlKCkgc3Vicm91dGluZS4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIHRyaWdnZXJlZCBieQorICAgdGhlIGltcGxlbWVudGF0aW9uIG9mIE5ldFNOTVA6OlNOTVAuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBhIFBEVSBwcm9jZXNzaW5nCisgICBlcnJvciBpbiBOZXRTTk1QOjpTTk1QLgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgbWVtb3J5IGxlYWtzIHRyaWdnZXJlZCBieSBjcmVhdGluZyBhbiBTTk1QdjMKKyAgIHNlc3Npb24gdmlhIE5ldFNOTVA6OlNOTVAuCisgICAKKyAgIEFsc28gZml4ZWQgdGhlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMgdHJpZ2dlcmVkIGJ5CisgICBhZGRpbmcgYSB2YXJiaW5kIHRvIGEgUERVIHZpYSBOZXRTTk1QOjpTTk1QIGludHJvZHVjZWQgYSBmZXcgZGF5cworICAgYWdvLgorICAgCisgICBUaGUgYnVncyBtZW50aW9uZWQgYWJvdmUgaGF2ZSBiZWVuIGZvdW5kIGJ5IGluc3BlY3RpbmcgdGhlIG91dHB1dAorICAgb2YgdGhlIGZvbGxvd2luZyBzaGVsbCBjb21tYW5kOgorICAgY2QgcGVybCAmJiB2YWxncmluZCAtLXRyYWNlLWNoaWxkcmVuPXllcyAtLWxlYWstY2hlY2s9ZnVsbCBtYWtlCisgICB0ZXN0CisKKzIwMTAtMDMtMjkgMTA6NTkgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKworICAgU3dpdGNoZWQgYmFjayB0byB0aGUgcHJldmlvdXMgd2F5IG9mIHN0YXJ0aW5nIHByb2Nlc3NlcworICAgYXN5bmNocm9ub3VzbHkgYmVjYXVzZSBpdCBpcyBtb3JlIHJlbGlhYmxlLgorCisyMDEwLTAzLTI5IDA5OjI3ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisKKyAgIERvIG5vdCBvbmx5IHNhdmUgc25tcGQgLyBzbm1wdHJhcGQgbG9ncyBidXQgYWxzbyB0aGUgc3Rkb3V0IC8KKyAgIHN0ZGVyciBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZXNlIHByb2Nlc3Nlcy4KKworMjAxMC0wMy0yOCAxNjowOSAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorCisgICBDaGFuZ2VzIGluIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisgICAtIEFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb24gLWQgZm9yIHNubXBkIGFuZCBzbm1wdHJhcGQuCisgICAtIHNubXBkIGFuZCBzbm1wdHJhcGQgb3V0cHV0IGlzIG5vdyBzYXZlZCB0byBhIGxvZyBmaWxlIChvbmUgcGVyCisgICB0ZXN0KS4KKyAgIC0gUmV3cm90ZSBQZXJsIGNvZGUgZm9yIHN0YXJ0aW5nIHRoZSBzbm1wZC9zbm1wdHJhcGQgcHJvY2Vzc2VzCisgICBzdWNoIHRoYXQgdGhlIHNhbWUgY29kZSB3b3JrcyBvbiBVbml4IGFuZCBvbiBXaW5kb3dzLgorCisyMDEwLTAzLTI4IDEzOjM3ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi90b29scy5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYWRkZWQgdGhlIGZ1bmN0aW9ucyBuZXRzbm1wX21hbGxvYygpLAorICAgbmV0c25tcF9jYWxsb2MoKSwgbmV0c25tcF9yZWFsbG9jKCksIG5ldHNubXBfc3RyZHVwKCkgYW5kCisgICBuZXRzbm1wX2ZyZWUoKS4KKyAgIENIQU5HRVM6IFdpbjMyOiBzbm1wbGliOiByZW1vdmVkIHRoZSB0cm91Ymxlc29tZSAjZGVmaW5lIG1hbGxvYworICAgbmV0c25tcF9tYWxsb2MgZXRjLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBjYWxsaW5nIGZ1bmN0aW9ucyBmcm9tCisgICB0aGUgTmV0LVNOTVAgRExMIGZyb20gQyBvciBDKysgY29kZSB0aGF0IGlzIGJlaW5nIGxpbmtlZCBhZ2FpbnN0CisgICBhbm90aGVyIHZlcnNpb24gb2YgdGhlIE1TVkMgcnVudGltZSBETEwgdGhhbiB0aGUgTmV0LVNOTVAgRExMLAorICAgYW5kIHdoZW4gYWxsb2NhdGluZyBtZW1vcnkgdGhhdCB3aWxsIGJlIGZyZWVkIGJ5IHRoZSBOZXQtU05NUAorICAgRExMLCB5b3Ugd2lsbCBlaXRoZXIgaGF2ZSB0byBjYWxsIHRoZSBOZXQtU05NUCBtZW1vcnkgYWxsb2NhdGlvbgorICAgZnVuY3Rpb25zIGV4cGxpY2l0bHkgb3IgcmVkZWZpbmUgbWFsbG9jKCkgZXRjLiB5b3Vyc2VsZi4KKworMjAxMC0wMy0yOCAxMjo0NiAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgRml4ZWQgYSByZWNlbnRseSByZWludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wMy0yNyAxODo0MiAgYnZhc3NjaGUKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgQWRkZWQgYSBjaGVjayBmb3IgaW52b2NhdGlvbiBvZiBjYWxsb2MoKSBmcm9tIFhTVUJzLgorCisyMDEwLTAzLTI2IDE5OjE2ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgcGVybC9PSUQvT0lELnhzLCAgIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54czoKKworICAgRm9sbG93LXVwIGZvciByMTgzNjggYW5kIHIxODM2OTogbWFkZSBzdXJlIHRoYXQgdGhlIE5ldC1TTk1QIFBlcmwKKyAgIGV4dGVuc2lvbnMgY29tcGlsZSB3aXRob3V0IHRyaWdnZXJpbmcgcHJlcHJvY2Vzc29yIHdhcm5pbmdzIGFib3V0CisgICByZWRlZmluaW5nIG1hbGxvYyBldGMuIG5vciB0cmlnZ2VyICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9ycyBvbgorICAgV2luZG93cy4KKworMjAxMC0wMy0yNiAxNDo0NCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYzoKKworICAgUmVmYWN0b3Jpbmc6IGludHJvZHVjZWQgYSBuZXcgZnVuY3Rpb246CisgICBuZXRzbm1wX3NldF9ub25fYmxvY2tpbmdfbW9kZSgpLgorCisyMDEwLTAzLTI2IDExOjU4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMsICAKKyAgICAgICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAKKyAgICAgICAgc25tcGxpYi9pbnQ2NC5jLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmMsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi90ZXh0X3V0aWxzLmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVzaW5nIHZhcmlhYmxlcyBvZiB0eXBlIGNoYXIgYXMgYW4KKyAgIGFycmF5IHN1YnNjcmlwdC4gTm90ZTogYXMgZmFyIGFzIEkga25vdyB0aGVzZSB3YXJuaW5ncyBhcmUgb25seQorICAgcmVwb3J0ZWQgd2hlbiB1c2luZyB0aGUgQ3lnd2luIGdsaWJjIGhlYWRlcnMuCisKKzIwMTAtMDMtMjYgMTA6NDEgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBBZGRlZCBtaXNzaW5nICNpbmNsdWRlIGRpcmVjdGl2ZSAob24gV2luZG93cyBNU1ZDIHdhcyBjb21wbGFpbmluZworICAgYWJvdXQgc2l6ZV90IHdoaWxlIHByb2Nlc3NpbmcgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+KS4KKworMjAxMC0wMy0yNSAyMDowNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBhZ2VudHg6IGNoYW5nZWQgZGVmYXVsdCBUQ1AgdGFyZ2V0IGZyb20gMC4wLjAuMDo3MDUgdG8KKyAgIGxvY2FsaG9zdDo3MDUuIFRoaXMgaXMgbm90IG9ubHkgYSBtb3JlIHNlY3VyZSBjaG9pY2UgYnV0IGl0IGFsc28KKyAgIG1ha2VzIGl0IHBvc3NpYmxlIG9uIFdpbmRvd3Mgc3lzdGVtcyB0byBsZXQgYW4gQWdlbnRYIHN1YmFnZW50CisgICBjb25uZWN0IHRvIGFuIEFnZW50WCBtYXN0ZXIgYWdlbnQgcnVubmluZyBvbiB0aGUgc2FtZSBzeXN0ZW0KKyAgIHdpdGhvdXQgaGF2aW5nIHRvIHNldCB0aGUgdmFyaWFibGUgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tFVC4KKworMjAxMC0wMy0yNSAxNjoxMSAgYnZhc3NjaGUKKworICAgKiAgcGVybC9PSUQvT0lELnhzLCBwZXJsL1NOTVAvU05NUC54cywgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogV2luMzI6IHBlcmw6IGZpeGVkIHNldmVyYWwgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3JzLgorICAgTm90ZTogc2luY2UgY2FsbG9jKCkgaXMgbm90IHJlZGVmaW5lZCBpbiA8Q09SRS9YU1VCLmg+IHVzaW5nCisgICBjYWxsb2MoKSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGxlYWRzIHRvICJGcmVlIHRvIHdyb25nIHBvb2wiCisgICBlcnJvcnMsIGF0IGxlYXN0IG9uIFdpbmRvd3MuCisKKzIwMTAtMDMtMjUgMTY6MDQgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogbWFkZSBidWlsZGluZyBtb3JlIHNpbGVudCBieSBub3QKKyAgIHJlZGVmaW5pbmcgbWFsbG9jKCkgb3IgZnJlZSgpIGR1cmluZyBjb21waWxhdGlvbiBvZiBQZXJsCisgICBleHRlbnNpb25zIChyZXN1bHRlZCBpbiB3YXJuaW5ncyBhYm91dCBtYWxsb2MoKSAvIGZyZWUoKQorICAgcmVkZWZpbml0aW9uIGluIHRoZSBQZXJsIGhlYWRlciBDT1JFL1hTVUIuaCkuCisKKzIwMTAtMDMtMjUgMTU6MDYgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgcGVybC9TTk1QL1NOTVAueHMsICAgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBCVUc6IDI5Njk4NzI6IG1hZGUgc3VyZSB0aGF0IFNPQ0tfU1RBUlRVUCBpcyBpbnZva2VkCisgICBiZWZvcmUgaW5pdF9hZ2VudCgpIG9uIFdpbmRvd3MuCisKKzIwMTAtMDMtMjUgMTM6MzkgIGpzYWZyYW5laworCisgICAqICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIGFwcHMvc25tcHNldC5jLCBhcHBzL3NubXBzdGF0dXMuYywgICAKKyAgICAgIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhcC5jLCAgIAorICAgICAgYXBwcy9zbm1wdXNtLmMsIGFwcHMvc25tcHZhY20uYywgYXBwcy9zbm1wd2Fsay5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgVXNlIG1hY3JvcyBpbnN0ZWFkIG9mIG1hZ2ljIG51bWJlcnMgYXMgbmV0c25tcF9wYXJzZV9hcmdzIHJldHVybgorICAgY29kZXMuCisKKzIwMTAtMDMtMjUgMTM6MzAgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBzaW1wbGlmaWVkIHRoZSBidWlsZCBwcm9jZXNzIGJ5CisgICByZW1vdmluZyB0aGUgZmlsZSB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbi4gV2hpY2ggSVB2NgorICAgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBmcm9tIG5ldHNubXAuZGxsIGlzIG5vdyBkZXRlcm1pbmVkIGJ5CisgICB3aGljaCBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgRExMIGhhdmUgYmVlbiBkZWNsYXJlZCBhcworICAgTkVUU05NUF9JTVBPUlQuCisKKzIwMTAtMDMtMjQgMjA6MTEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9lbnVtLmM6CisKKyAgIGRvbid0IHVzZSBwYXNzZWQgcHRyIGFzIHRlbXAgdmFyOyB1c2Ugc25tcF9lbnVtX2xpc3RzIGluIGluaXQKKyAgIHRlc3QKKworMjAxMC0wMy0yNCAyMDoxMCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaDoKKworICAgYWRkIE5FVFNOTVBfRFNfTElCX0NFUlRfRVhUUkFfU1VCRElSCisKKzIwMTAtMDMtMjQgMjA6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBtb3ZlIGNlcnQgaW5pdCBlYXJsaWVyIChoYXZlIHRsc19ib290c3RyYXAgY2FsbCBpdCkKKworMjAxMC0wMy0yNCAyMDoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZ3M7IGFkZCBjZXJ0IGRlYnVnIG1zZ3MgaW4gc2VydmVyIHNldHVwOyBmcmVlCisgICBzc2wgbG9nIGRhdGEKKworMjAxMC0wMy0yNCAxMDo0NyAganNhZnJhbmVrCisKKyAgICogIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgYXBwcy9zbm1wc2V0LmMsIGFwcHMvc25tcHN0YXR1cy5jLCAgIAorICAgICAgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFwLmMsICAgCisgICAgICBhcHBzL3NubXB1c20uYywgYXBwcy9zbm1wdmFjbS5jLCBhcHBzL3NubXB3YWxrLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBDSEFOR0VTOiBhcHBzOiByZXR1cm4gbm96ZXJvIGV4aXQgY29kZSB3aGVuIHBhcnNpbmcgb2YgY2VydGFpbgorICAgcGFyYW1ldGVyIGZhaWxzLgorICAgRS5nLiAnLUEnIHBhcmFtZXRlciB3aXRoIHRvbyBzaG9ydCBwYXNzcGhyYXNlIG9yIEt1IGtleQorICAgZ2VuZXJhdGlvbiBpbiBnZW5lcmFsLgorCisyMDEwLTAzLTI0IDA3OjExICBtYWdmcgorCisgICAqIGFwcHMvYWdlbnR4dHJhcC5jOgorCisgICBDb3JyZWN0IHRoZSB0eXBlIG9mIHRoZSBpZC9kZXNjcmlwdGlvbiBvZiB0aGUgT3Blbi1QRFUuCisKKzIwMTAtMDMtMjIgMTg6MjkgIGJ2YXNzY2hlCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIFVwZGF0ZXMgZm9yICJtYWtlIGNoZWNrcyI6CisgICAtIE1hZGUgc3VyZSB0aGF0IGV4aXQgY29kZSAwIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBjaGVjayBpcworICAgc3VjY2Vzc2Z1bCBhbmQgdGhhdAorICAgZXhpdCBjb2RlIDEgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIGNoZWNrIGZhaWxlZC4KKyAgIC0gTWFkZSAibWFrZWZpbGVjaGVjayIgc2tpcCBTdWJ2ZXJzaW9uIGJvb2trZWVwaW5nIGZpbGVzIGFuZCBhbHNvCisgICB0aGUgbWFrZWZpbGUKKyAgIHRoYXQgY29udGFpbnMgIm1ha2VmaWxlY2hlY2siLgorCisyMDEwLTAzLTIyIDE2OjEwICBkdHMxMgorCisgICAqIG1pYnMvTkVULVNOTVAtUEFTUy1NSUIudHh0OgorCisgICBGaXggdHlwbyBpbiBkZWZhdWx0IElwQWRkcmVzcyB2YWx1ZQorICAgKFNlZSBCdWcgIzI5NzIxNDEpCisKKzIwMTAtMDMtMjIgMTU6NDQgIHJzdG9yeQorCisgICAqICBNYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBzbm1wbGliL2NhbGxiYWNrLmMsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc3RydG9rX3IuYywgc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBjaGFuZ2UgYWxsIGFzc2VydCgpIHRvIG5ldHNubXBfYXNzZXJ0KCk7IGFkZCBhc3NlcnRjaGVjayB0byB0b3AKKyAgIGxldmVsIG1ha2VmaWxlCisKKzIwMTAtMDMtMjIgMTU6MjQgIGJ2YXNzY2hlCisKKyAgICogbWlicy9VQ0QtRElTS0lPLU1JQi50eHQ6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MzQ5OiBhZGRlZCBtaXNzaW5nIGNvbW1hIHN1Y2ggdGhhdCBpdCBpcyBhZ2FpbgorICAgcG9zc2libGUgdG8gY29tcGlsZSBVQ0QtRElTS0lPLU1JQi4KKworMjAxMC0wMy0yMiAxNDozNiAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wZC5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBGaXggYnVpbGQgd2hlbiBNSUIgbG9hZGluZyBpcyBkaXNhYmxlZCAoYnJva2VuIGJ5IFNWTiByZXZpc2lvbgorICAgMTgzNDEpCisgICBSZXBvcnQgZGVmYXVsdCBNSUIgcGF0aCBmb3IgY2xpZW50IGFwcHMgdG9vLgorCisyMDEwLTAzLTIyIDEzOjU5ICBkdHMxMgorCisgICAqICBtYW4vc25tcF9hcGlfZXJyc3RyaW5nLjMsIG1hbi9zbm1wX2Nsb3NlLjMsIG1hbi9zbm1wX2Vycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9mcmVlX3BkdS4zLCBtYW4vc25tcF9vcGVuLjMsIG1hbi9zbm1wX3BlcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfcmVhZC4zLCBtYW4vc25tcF9zZWxlY3RfaW5mby4zLCBtYW4vc25tcF9zZW5kLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX3BlcnJvci4zLCBtYW4vc25tcF90aW1lb3V0LjM6CisKKyAgIENIQU5HRVM6IG1hbjogQlVHOiAyOTcyODYwOiBVcGRhdGUgYnJva2VuIHJlZmVyZW5jZXMKKworMjAxMC0wMy0yMiAxMzo0OSAgZHRzMTIKKworICAgKiAgbWlicy9VQ0QtRElTS0lPLU1JQi50eHQsIG1pYnMvVUNELURMTU9ELU1JQi50eHQsICAgCisgICAgICBtaWJzL1VDRC1JUEZJTFRFUi1NSUIudHh0LCBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisKKyAgIENIQU5HRVM6IG1pYnM6IEJVRzogMjk3Mzg5MDogRml4IGltcG9ydHMsIERpc2tJT0VudHJ5IGxpc3QgYW5kCisgICByZXZpc2lvbiBoaXN0b3JpZXMKKworMjAxMC0wMy0yMiAxMTo1NSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIFdpbjMyLCB3aW5FeHRETEw6IHNvbHZlZCB0aGUgbXlzdGVyeSBvZiAiQVNOIHR5cGUgemVybyIuIFRoZQorICAgd2luRXh0RExMIGNvZGUgZG9lcyBub3cgbm8gbG9uZ2VyIHRyaWdnZXIgY29udmVyc2lvbnMgb2YgV2luZG93cworICAgQVNOIHZhcmJpbmRzIHdpdGggQVNOIHR5cGUgemVyby4gTm90ZTogdGhpcyBjb2RlIGNoYW5nZSBkb2VzIG5vdAorICAgY2hhbmdlIHRoZSBhZ2VudCBiZWhhdmlvci4KKworMjAxMC0wMy0yMCAyMDoyMSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmg6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIE1TVkMuCisKKzIwMTAtMDMtMjAgMjA6MjAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jOgorCisgICBBZGRlZCBhIHRyYWlsaW5nIGJhY2tzbGFzaCAoc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCBpbiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCkuCisKKzIwMTAtMDMtMjAgMTk6MzYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvc25tcGQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvcm91dGUuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsIAorICAgICAgICBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgICAKKyAgICAgIHNubXBsaWIvd2lucGlwZS5jLCBzbm1wbGliL3dpbnNlcnZpY2UuYzoKKworICAgQ0hBTkdFUzogbGlic25tcDogY2hhbmdlZCB0aGUgdHlwZSBvZiB0aGUgZm91cnRoIGFyZ3VtZW50IG9mCisgICBuZXRzbm1wX3NldF9yb3dfY29sdW1uKCkgZnJvbSBjb25zdCBjaGFyKiB0byBjb25zdCB2b2lkKiBzdWNoCisgICB0aGF0IG5vIGNhc3QgaXMgbmVjZXNzYXJ5IHdoZW4gcGFzc2luZyBhbm90aGVyIGRhdGF0eXBlIHRoZW4KKyAgIGNoYXIqIG9yIGNvbnN0IGNoYXIqLgorICAgQ0hBTkdFUzogV2luMzI6IGNoYW5nZWQgaW5fYWRkcl90IGZyb20gdV9pbnQgdG8gdV9sb25nIHN1Y2ggdGhhdAorICAgaXQgbWF0Y2hlcyB0aGUgZGF0YXR5cGUgb2Ygc29ja2FkZHJfaW46OnNpbl9hZGRyLgorICAgQWxzbywgZml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyAobW9zdGx5IGNoYXIgKiA8PiB1X2NoYXIgKgorICAgbWlzbWF0Y2hlcykgYW5kIHJlbW92ZWQgc29tZSBjYXN0cy4KKworMjAxMC0wMy0yMCAxOToxNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgRml4ZWQgdGhlIGNvbXBpbGVyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IGdjYyAoTWluR1cpLgorCisyMDEwLTAzLTIwIDE5OjA1ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBBZGRlZCBjb25maWd1cmUgdGVzdCBmb3Igc2lncHJvY21hc2suCisKKzIwMTAtMDMtMjAgMDk6MTQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIFJlZmFjdG9yaW5nOiBtb3ZlZCBkdXBsaWNhdGVkIGNvZGUgaW50byBhIG5ldyBmdW5jdGlvbi4KKworMjAxMC0wMy0xOSAyMjo1NiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgYWdlbnQvc25tcGQuYywgc25tcGxpYi9wYXJzZS5jOgorCisgICBSZXBvcnQgTUlCIGFuZCBjb25maWcgZGlyZWN0b3JpZXMgc2VhcmNoIHBhdGhzIG9uIGVycm9ycworICAgKGFuZCBpbiB0aGUgaGVscCBtZXNzYWdlKQorCisyMDEwLTAzLTE5IDEzOjEyICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBtYWRlIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgaXMgbG9nZ2VkIHdoZW4KKyAgIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gaXMgYXR0ZW1wdGVkIG1vcmUgZGV0YWlsZWQuCisgICAKKyAgIEFuIGV4YW1wbGU6CisgICAoYmVmb3JlKQorICAgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiAobWliSUkvc25tcCwKKyAgIEM6XFdJTkRPV1NcU3lzdGVtMzJcc25tcG1pYi5kbGwpCisgICBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQuCisgICAoYWZ0ZXIpCisgICBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uOiBNSUIgbW9kdWxlcyBtaWJJSS9zbm1wIGFuZAorICAgQzpcV0lORE9XU1xTeXN0ZW0zMlxzbm1wbWliLmRsbCAob2lkIC4xLjMuNi4xLjIuMS4xMSkuCisgICBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQuCisKKzIwMTAtMDMtMTkgMTI6NDAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBtdWx0aXBsZSB2YXJiaW5kIHNldCByZXF1ZXN0cyBhcmUgbm93CisgICBwcm9jZXNzZWQgY29ycmVjdGx5LgorICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogbWFkZSBlcnJvciBjb2RlcyBpbiBTTk1QIHJlc3BvbnNlIFBEVXMKKyAgIGFzIFJGQy1jb21wbGlhbnQgYXMgcG9zc2libGUuCisgICBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBpZiBsb2FkaW5nIGFuIGV4dGVuc2lvbiBETEwgZmFpbHMsIHRoZQorICAgcmVhc29uIHdoeSBsb2FkaW5nIGZhaWxlZCBpcyBub3cgbG9nZ2VkLgorICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogZml4ZWQgYSBtZW1vcnkgbGVhayB0aGF0IG9jY3VycmVkIHdoZW4KKyAgIFNubXBFeHRlbnNpb25RdWVyeShFeCkgZmFpbGVkLiBUaGlzIG1lbW9yeSBsZWFrIGhhcyBiZWVuIGZvdW5kCisgICB2aWEgc291cmNlIHJlYWRpbmcuIE5vdGU6IGl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIGl0IHdhcyBwb3NzaWJsZQorICAgdG8gdHJpZ2dlciB0aGlzIG1lbW9yeSBsZWFrLiBUaGlzIGxlYWsgaXMgY2VydGFpbmx5IG5vdCB0cmlnZ2VyZWQKKyAgIGJ5IGV2ZXJ5IHJlcXVlc3QgZm9yIHdoaWNoIGEgcmVzcG9uc2Ugd2l0aCBub24temVybyBlcnJvciBzdGF0dXMKKyAgIGlzIHNlbnQgYmFjay4KKworMjAxMC0wMy0xOCAxNjoyOSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBrZWVwIGNvdW50IG9mIGVuYWJsZWQgbG9nczsgdXNlIHRoaXMgY291bnQgdG8gZGV0ZXJtaW5lIHdoZW4gdG8KKyAgIGxvZyB0byBzdGRlcnIKKworMjAxMC0wMy0xOCAxNjoyOCAgcnN0b3J5CisKKyAgICogIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCBhcHBzL3NubXB0cmFwZC5jLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgTkVXUzogc25tcGxpYjogbmV3IHNubXAgdG9rZW4gbG9nT3B0aW9uIGFsbG93cyBzcGVjaWZ5aW5nIGxvZworICAgZGVzdGluYXRpb25zIHZpIGNvbmYgZmlsZXMKKyAgIC0gaWYgc3RkZXJyIGxvZyBlbmFibGVkIGJlY2F1c2Ugb2Ygbm8gbG9nIGRlc3RpbmF0aW9uLCB0dXJuIGl0CisgICBvZmYgd2hlbiBhCisgICBsb2cgZGVzdGluYXRpb24gaXMgZW5hYmxlZAorICAgLSBkb24ndCBjYWxsIG5ldHNubXBfZW5hYmxlX3N0ZGVycmxvZygpIGZyb20gYXBwcyBhbnltb3JlCisKKzIwMTAtMDMtMTggMTU6MzEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIHVkcCB0cmFuc3BvcnQgaW5oZXJpdGFuY2UgdHdlYWtzCisgICAtIG1vdmUgYmFzaWMgdWRwIHJlY3Zmcm9tL3NlbmR0byBjb2RlIGZyb20gVURQRG9tYWluIHRvCisgICBVRFBCYXNlRG9tYWluCisgICAtIHR3ZWFrIHVwZCByZWN2ZnJvbS9zZW5kdG8gdG8gY2FsbCB1ZHBiYXNlIHZlcnN0aW9uCisgICAtIHR3ZWFrIHVkcGlwdjQgcmVjdmZyb20vc2VuZHRvIHRvIGNhbGwgdWRwYmFzZSB2ZXJzaW9uCisgICAtIGFsc28gZml4ZWQgbmV0c25tcF9pcHY0XyogLT4gbmV0c25tcF91ZHBpcHY0XyoKKyAgIC0gdHdlYWsgRFRMU1VEUERvbWFpbiBvdCB1c2UgdWRwYmFzZV8qIGluc3RlYWQgb2YgdWRwXyoKKworMjAxMC0wMy0xOCAxNToyMSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHByb3RlY3QgY2VydCBoZWFkZXIgYW5kIGluaXQgY2FsbCB3aXRoIGlmZGVmcworCisyMDEwLTAzLTE3IDE5OjAxICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICB1c2UgbmV3IHV0aWxpdHkgcm91dGluZSBmb3IgY2VydCBuYW1lcworCisyMDEwLTAzLTE3IDE5OjAxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtb3ZlIHNubXBfb3BlbnNzbCBoZWFkZXIgYWZ0ZXIgb3BlbnNzbCBoZWFkZXJzCisKKzIwMTAtMDMtMTcgMTk6MDAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgYWRkIHJvdXRpbmVzIHRvIHB1bGwvZHVtcCBuYW1lcyBmcm9tIFg1MDkgY2VydHMKKworMjAxMC0wMy0xNyAxOTowMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgdXNlIGVudW0gbGlzdHMgdG8gbWFuYWdlIGRpcmVjdG9yeSBpbmRleGVzCisKKzIwMTAtMDMtMTcgMTk6MDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9lbnVtLmM6CisKKyAgIGluaXRpYWxpemUgc3RhdGljIHN0b3JhZ2UgYmVmb3JlIHVzZTsgcHJvdGVjdCBlbnVtIGluaXQgZnJvbQorICAgbXVsdGlwbGUgY2FsbHMKKworMjAxMC0wMy0xNyAxODo1NCAgcnN0b3J5CisKKyAgICogUkVBRE1FLmFnZW50LW1pYnM6CisKKyAgIGFkZCBpbmZvIGFib3V0IG5ldyB0c20vdGxzIG1pYnMKKworMjAxMC0wMy0xNyAxODo1NCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIG1vdmUgY2VydCBpbml0IHRvIHNubXAgaW5pdAorCisyMDEwLTAzLTE3IDEzOjM3ICBidmFzc2NoZQorCisgICAqIG1pYnMvTkVULVNOTVAtQUdFTlQtTUlCLnR4dCwgbWlicy9ORVQtU05NUC1FWFRFTkQtTUlCLnR4dDoKKworICAgVXBkYXRlZCBNSUIgcmV2aXNpb24gaGlzdG9yeS4KKworMjAxMC0wMy0xNyAxMzoyOSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBvbmUgbGVhay1hdC1leGl0LgorCisyMDEwLTAzLTE3IDEyOjQ0ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBDSEFOR0VTOiBCVUc6IDI5NzEyNTc6IEZpeGVkIHdpbkV4dERMTCBoYW5kbGluZyBvZiBtdWx0aS12YXJiaW5kCisgICBnZXROZXh0IHJlcXVlc3RzIHdpdGggT0lEcyBpbiByZXZlcnNlIGxleGljb2dyYXBoaWNhbCBvcmRlci4KKworMjAxMC0wMy0xNyAxMDoyNSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgTW9yZSB3aW5FeHRETEwgZGVidWcgb3V0cHV0IHR1bmluZy4KKworMjAxMC0wMy0xNiAxOTozMSAgYnZhc3NjaGUKKworICAgKiBtaWJzL05FVC1TTk1QLUFHRU5ULU1JQi50eHQ6CisKKyAgIENvbXBpbGVzIG5vdyB3aXRoIE1JQiBjb21waWxlcnMgdGhhdCBkbyBub3QgcmVjb2duaXplIGEgZG91YmxlCisgICBkYXNoIGFzIHRoZSBlbmQgb2YgYSBNSUIgY29tbWVudC4KKworMjAxMC0wMy0xNiAxOToyNyAgYnZhc3NjaGUKKworICAgKiBtaWJzL05FVC1TTk1QLUVYVEVORC1NSUIudHh0OgorCisgICBGaXhlZCB0d28gc3ludGF4IGVycm9ycy4KKworMjAxMC0wMy0xNiAxOToxOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogZml4ZWQgYSBidWcgaW4gZ2V0TmV4dCBoYW5kbGluZyB0aGF0CisgICBjb3VsZCBjYXVzZSB0aGUgTUlCIG91dHB1dCB0byBiZSB0cnVuY2F0ZWQuCisKKzIwMTAtMDMtMTYgMTg6NTAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIE1hZGUgd2luRXh0RExMIGRlYnVnIG91dHB1dCBtb3JlIGRldGFpbGVkLgorCisyMDEwLTAzLTE2IDE1OjI0ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oOgorCisgICBNYWRlIHN1cmUgdGhhdCBDKysgcHJvZ3JhbXMgdGhhdCBpbmNsdWRlIE5ldC1TTk1QIGhlYWRlciBmaWxlcworICAgY29tcGlsZSBhZ2Fpbi4KKworMjAxMC0wMy0xNSAwNzoyMCAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmM6CisKKyAgIE1ha2UgaXQgY29tcGlsZSB3aXRoIC0tZGlzYWJsZS1kZXByZWNhdGVkIGFnYWluLgorCisyMDEwLTAzLTE1IDA3OjE5ICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jOgorCisgICBEaXNhYmxlIGFsbCB0aGUgcHJpbnRpbmcgaWYgZGVidWcgb3V0cHV0IGlzIG9mZi4KKworMjAxMC0wMy0xNSAwMDoxNyAgdGFuZGVycworCisgICAqIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmdzIHJlZ2FyZGluZyBwcmludGYgZm9ybWF0CisKKzIwMTAtMDMtMTUgMDA6MDcgIHRhbmRlcnMKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5ncyByZWdhcmRpbmcgcHJpbnRmIGZvcm1hdAorCisyMDEwLTAzLTE0IDIxOjA1ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaDoKKworICAgbWFrZSBzdXJlIGhlYWRlciBpZmRlZiBuYW1lIGlzIHVuaXF1ZQorCisyMDEwLTAzLTE0IDIxOjA0ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oOgorCisgICBhZGQgbWlzc2luZyBpbml0L3NodXRkb3duIHByb3RvdHlwZXMgdG8gZml4IGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTAtMDMtMTQgMjE6MDMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvZGF0YV9saXN0LmM6CisKKyAgIG1vdmUgZGVidWcgbWVzc2FnZSBlYXJsaWVyCisKKzIwMTAtMDMtMTQgMjE6MDIgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYzoKKworICAgYWRkIHByb3RvdHlwZSBmb3IgbmV0c25tcF9pbml0X2NvbnRhaW5lcjsgZml4IGNvbXBsZXIgd2FybmluZworCisyMDEwLTAzLTE0IDIwOjUxICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBDb3JyZWN0IG5ldHNubXBfYXNzZXJ0X29yX3JldHVybiBhbmQgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuCisgICBmb3IgdGhlIE5FVFNOTVBfTk9fREVCVUdHSU5HIGNhc2UKKworMjAxMC0wMy0xNCAxOToxMCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVuYW1lIGNlcnQgaW5pdC9zaHV0ZG93biBmdW5jczsgb25seSBjb21waWxlIGNlcnRfdXRpbHMgaWYKKyAgIHVzaW5nL2hhdmUgU1NMOyBpbml0IGNlcnRzIGZyb20gdGxzIGJhc2UKKworMjAxMC0wMy0xNCAxOTowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgY2FsbCBuZXRzbm1wX2luaXRfb3BlbnNzbCBpbnN0ZWFkIG9mIG5ldHNubXBfaW5pdF90bHNiYXNlCisKKzIwMTAtMDMtMTQgMTk6MDkgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICB1cGRhdGUgZm9yIHJlbmFtZWQgb2JqZWN0cyBpbiB2ZXJzaW9uIDA4IG9mIHRoZSBkdGxzIGRyYWZ0CisKKzIwMTAtMDMtMTQgMTk6MDggIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIsIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24sICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYiwgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaDoKKworICAgaW1wb3J0IGluaXRpYWwgY29kZSBmb3IgZHRscyBtaWJzCisKKzIwMTAtMDMtMTQgMTk6MDggIHJzdG9yeQorCisgICAqIG1pYnMvVExTVE0tTUlCLnR4dDoKKworICAgVExTVE0tTUlCIGZyb20gZHJhZnQtaWV0Zi1pc21zLWR0bHMtdG0tMDkudHh0CisKKzIwMTAtMDMtMTQgMTc6MjEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBGaXhlZCBhIGZldyBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTAzLTE0IDE0OjEwICBidmFzc2NoZQorCisgICAqIHBlcmwvZGVmYXVsdF9zdG9yZS90ZXN0LnBsOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzM4NDogY2hhbmdlZCBORVRTTk1QX0RTX01BWF9TVUJJRFMgZnJvbSA0MCB0bworICAgNDguCisKKzIwMTAtMDMtMTQgMTM6NTMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIENoYW5nZXM6CisgICAtIFJlbW92ZWQgLVduby1jaGFyLXN1YnNjcmlwdHMgZnJvbSBERVZGTEFHUy4gVXNpbmcgYSB2YXJpYWJsZSBvcgorICAgZXhwcmVzc2lvbiBvZgorICAgdHlwZSBjaGFyIGFzIGFuIGFycmF5IGluZGV4IGlzIGFsbW9zdCBhbHdheXMgYW4gZXJyb3IuCisgICBGdXJ0aGVybW9yZSwKKyAgIC1XY2hhci1zdWJzY3JpcHQgZG9lcyBub3QgdHJpZ2dlciBhbnkgd2FybmluZ3Mgb24gdGhlIE5ldC1TTk1QCisgICBjb2RlIGJhc2UuCisgICAtIFJlbW92ZWQgLVdpbmxpbmUgZnJvbSBERVZGTEFHUy4gTm90IG9ubHkgd2FzIG5vYm9keSBwYXlpbmcKKyAgIGF0dGVudGlvbiB0byB0aGUKKyAgIG1lc3NhZ2VzIHRyaWdnZXJlZCBieSAtV2lubGluZSwgYnV0IHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgZ2NjCisgICBjb21waWxlciBhcmUKKyAgIGJldHRlciB0aGFuIGh1bWFucyBhdCBkZWNpZGluZyB3aGljaCBmdW5jdGlvbnMgc2hvdWxkIGJlIGlubGluZWQKKyAgIGFuZCB3aGljaAorICAgb25lcyBub3QuCisKKzIwMTAtMDMtMTQgMTM6MzkgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVyYW4gYXV0b3JlY29uZi4KKworMjAxMC0wMy0xNCAxMzozOSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTAzLTE0IDEzOjM2ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBSZW1vdmVkIHRoZSAnMHgnIHByZWZpeCBhZ2FpbiBmcm9tIGEgZGVidWcgc3RhdGVtZW50IHRoYXQgd2FzCisgICBpbnRyb2R1Y2VkIGluIHIxODI4Mi4KKworMjAxMC0wMy0xMyAxOTowNyAgYnZhc3NjaGUKKworICAgKiAgcGVybC9BU04vQVNOLnhzLCBwZXJsL09JRC9PSUQueHMsIHBlcmwvU05NUC9TTk1QLnhzLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL1RyYXBSZWNlaXZlci9wcHBvcnQuaCwgICAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIEZpeGVkIG1vc3QgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBzb3VyY2UgY29kZSBpbiB0aGUKKyAgIHBlcmwgc3ViZGlyZWN0b3J5LgorICAgTm90ZTogdGhlc2UgY2hhbmdlcyBtYXkgY29udGFpbiBzb21lIHJlYWwgYnVnIGZpeGVzLgorCisyMDEwLTAzLTEzIDA5OjU3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgRml4ZWQgc2V2ZXJhbCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTAzLTEzIDAxOjE2ICBoYXJkYWtlcgorCisgICAqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgZGVmaW5lIHRoZSBUTFNUQ1AgRE9NQUlOCisKKzIwMTAtMDMtMTMgMDE6MTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBmaXggaWZkZWYgdHlwbworCisyMDEwLTAzLTEyIDIwOjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY2hhbmdlIGRlYnVnZ2luZyBzeW1ib2wgbmFtZXMgdG8gYSBnZW5lcmljIHRscyBzdHJpbmcKKworMjAxMC0wMy0xMiAyMDoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgaW5pdGlhbCB3b3JraW5nIFNOTVAgb3ZlciBUTFMgb3ZlciBUQ1AgY29ubmVjdGlvbgorCisyMDEwLTAzLTEyIDIwOjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcHJpbnQgYSBtb3JlIGNvbXBsZXRlIE9wZW5TU0wgc3RhY2sKKworMjAxMC0wMy0xMiAyMDoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgZml4IGFzc2VydCBzdGF0ZW1lbnRzCisKKzIwMTAtMDMtMTIgMjA6MjEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg6CisKKyAgIGFkZGVkIGFuIGFjY2VwdGVkX2JpbyBwb2ludGVyIGZvciB0aGUgYmlvIGFmdGVyIFNTTF9hY2NlcHQKKworMjAxMC0wMy0xMiAyMDoyMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGFkZCB0aGUgYWJpbGl0eSBmb3IgZl9jb3B5IGFuZCBmX2NvbmZpZworCisyMDEwLTAzLTEyIDIwOjIxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBtaXNzaW5nIDsKKworMjAxMC0wMy0xMiAyMDoyMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgYWRkIGEgZl9jb3B5IHBvaW50ZXIKKworMjAxMC0wMy0xMiAyMDoyMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgcmV0dXJuIGludCBub3QgaW50ICogb24gZXJyb3IKKworMjAxMC0wMy0xMiAyMDoyMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgYWRkZWQgYSBmX2NvbmZpZyBmdW5jdGlvbiBmb3IgdHJhbnNwb3J0cworCisyMDEwLTAzLTEyIDExOjUzICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXB0YWJsZTogUEFUQ0g6IDI4NTAwNjc6IFN1cHByZXNzIGV4dHJhbmVvdXMgImluZGV4IgorICAgaGVhZGVyIHRva2VuCisgICBQYXRjaCBzdXBwbGllZCBieSBEYW4gTmVsc29uCisKKzIwMTAtMDMtMTIgMTE6NDMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYzoKKworICAgUmVtb3ZlIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mCisgICBnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MoKQorCisyMDEwLTAzLTExIDE2OjUyICBkdHMxMgorCisgICAqIG1hbi9zbm1wY21kLjEuZGVmOgorCisgICBEb2N1bWVudCB0aGUgZm9ybWF0IG9mIHRoZSAtZS8tRSBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKworMjAxMC0wMy0xMSAxNjo0NyAgZHRzMTIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgUmVtb3ZlIG1lbnRpb24gb2YgdGhlIChhYmFuZG9uZWQpICdkYXRhc2V0MicgaGVscGVyLgorCisyMDEwLTAzLTExIDE1OjU5ICBkdHMxMgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIERvbid0IGluaXRpYWxpc2UgdGhlIFRMUyB0cmFuc3BvcnQgdW5sZXNzIGl0J3MgYWN0dWFsbHkgYmVlbgorICAgY29uZmlndXJlZCBpbi4KKworMjAxMC0wMy0xMSAxNTo0NyAgcnN0b3J5CisKKyAgICogdGVzdGluZy9ldmFsX3N1aXRlLnNoOgorCisgICB1c2UgU05NUF9UTVBESVIgaW5zdGVhZCBvZiBUTVBESVIKKworMjAxMC0wMy0xMSAxNTozMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHF1ZXJ5IHJpZ2h0IGJvb2wgKHRzbSBwcmVmaXggaXMgbGliIGJvb2wsIG5vdCBhcHApCisKKzIwMTAtMDMtMTEgMTU6MDggIGR0czEyCisKKyAgICogIGFnZW50L2F1dG9fbmxpc3QuYywgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jLCAgIAorICAgICAgYXBwcy9zbm1wdGVzdC5jLCBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvdG9vbHMuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDI5NTIwMzQ6IFJldHVybiBvZiB0aGUgR3JlYXQgU3VTRSAnc3ByaW50ZicKKyAgIEh1bnQuLi4KKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IExlb25hcmRvIENoaXF1aXR0bworCisyMDEwLTAzLTExIDE0OjU1ICBkdHMxMgorCisgICAqIGxvY2FsL3RyYXB0b2VtYWlsOgorCisgICBDSEFOR0VTOiBQQVRDSDogMjkzNzk5NjogQWRkIERhdGU6IGhlYWRlciB0byBlbWFpbCBzZW5kIGJ5CisgICB0cmFwdG9lbWFpbAorCisyMDEwLTAzLTExIDE0OjUwICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5Njc0MDA6IFJldHJpZXZlIGVycm9yIGNvdW50ZXJzIGZvciB0aGUKKyAgIEV0aGVyTGlrZS1NSUIKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEpvc2VmIE1vZWxsZXJzLgorCisyMDEwLTAzLTExIDE0OjIzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTY4NjQyOiBDYXRjaCBvdmVyZmxvdyBvZiBwYXNzLXRocm91Z2gKKyAgIGNvbW1hbmQgYnVmZmVyLgorICAgUGF0Y2ggZnJvbSBBbmRyZWFzIEphZWdlci9MZW9uYXJkbyBDaGlxdWl0dG8KKworMjAxMC0wMy0xMSAxMjozNyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTU2NjU3OiBIYW5kbGUgb3Zlci1sZW5ndGggQWdlbnRYIE9JRHMuCisgICBQYXRjaCBwcm92aWRlZCBieSBSb2IgV2VzdAorCisyMDEwLTAzLTExIDEyOjIzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jOgorCisgICBQcm92aWRlIG1pc3NpbmcgZGVidWcgcGFyYW1ldGVyLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgQW5kcmVhcyBKYWVnZXIuCisKKzIwMTAtMDMtMTEgMTI6MjEgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmM6CisKKyAgIFByb3ZpZGUgbWlzc2luZyAoZHVtbXkpIHJldHVybiB2YWx1ZSwgdG8gc3VwcHJlc3MgY29tcGlsZXIKKyAgIHdhcm5pbmcuCisgICBQYXRjaCBwcm92aWRlZCBieSBBbmRyZWFzIEphZWdlci4KKworMjAxMC0wMy0xMSAxMjoxOSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmM6CisKKyAgIFN1cHByZXNzIHdhcm5pbmdzIG9mIHBvc3NpYmxlIGJ1ZmZlciBvdmVyZmxvdy4KKyAgIFRoaXMgZG9lc24ndCBfYWN0dWFsbHlfIHByb3RlY3QgYWdhaW5zdCBzdWNoIGFuIG92ZXJmbG93LAorICAgc2luY2UgdGhlIHRhcmdldCBidWZmZXIgaXMgbm9uLWVtcHR5LCBzbyBzdHJuY2F0IGNhbid0CisgICB1c2UgaXQgYWxsIGFueXdheS4gQnV0IHRoaXMgc2hvdWxkIGF0IGxlYXN0IG1pc2xlYWQgdGhlCisgICBjb21waWxlciBzdWZmaWNpZW50bHkgdG8gc2h1dCBpdCB1cCEKKyAgIAorICAgUGF0Y2ggcHJvdmlkZWQgYnkgQW5kcmVhcyBKYWVnZXIuCisKKzIwMTAtMDMtMTEgMTE6NTcgIGR0czEyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQ6CisKKyAgIFJlcGxhY2UgYmFja3F1b3RlIHdpdGggc2luZ2xlIHF1b3RlIGluIGNvbmZpZ3VyZSBvdXRwdXQgbWVzc2FnZS4KKyAgIFdoaWxlIHRoaXMgY2hhbmdlIGlzIHByb2JhYmx5IG5vdCBzdHJpY3RseSBuZWNlc3NhcnksIGl0IGZlZWxzCisgICBzZW5zaWJsZSB0byBhdm9pZCB0aGlzIHBhcnRpY3VsYXIgdXNlIG9mIGJhY2txdW90ZXMsIEp1c3QgSW4KKyAgIENhc2UuCisgICBTZWUgZGlzY3Vzc2lvbiBpbiBQYXRjaCAjMjk1MjE2OQorCisyMDEwLTAzLTExIDExOjQzICBkdHMxMgorCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IFBBVENIOiAyOTUyMTQwOiBPdmVyZmxvdyBjb3VudGVyMzIgYW5kIGdhdWdlMzIKKyAgIG9uIDY0Yml0IHN5c3RlbXMgY29ycmVjdGx5CisgICBQYXRjaCBwcm92aWRlZCBieSBMZW9uYXJkbyBDaGlxdWl0dG8KKworMjAxMC0wMy0xMSAxMTozNiAgZHRzMTIKKworICAgKiB0ZXN0aW5nL1RFU1RDT05GLnNoLCB0ZXN0aW5nL2V2YWxfc3VpdGUuc2g6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMjk1MjAyMDogRXhwbGljaXRseSBzZXQgcGVybWlzc2lvbiBvbgorICAgdGVtcG9yYXJ5IHRlc3Rpbmcgb3V0cHV0IGRpcmVjdG9yaWVzLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTGVvbmFyZG8gQ2hpcXVpdHRvLgorCisyMDEwLTAzLTExIDExOjI2ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5NTA4NDU6IEZpeCBpZkhpZ2hTcGVlZCBjYWxjdWxhdGlvbgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTGVvbmFyZG8gQ2hpcXVpdHRvCisKKzIwMTAtMDMtMTEgMDg6MjYgIGJ2YXNzY2hlCisKKyAgICogIHBlcmwvQVNOL0FTTi54cywgcGVybC9BU04vTWFrZWZpbGUuUEwsIHBlcmwvT0lEL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9PSUQvT0lELnhzLCBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9hZ2VudC54cywgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnhzLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUueHM6CisKKyAgIE1hZGUgY29tcGlsYXRpb24gb2YgdGhlIFBlcmwgbW9kdWxlIE5ldFNOTVAucG0gb24gV2luZG93cyBtb3JlCisgICBzaWxlbnQ6IGFkZGVkIGNvbXBpbGVyIGZsYWdzIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyAgIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIGFuZCBtYWRlIHN1cmUgdGhhdCAjaW5jbHVkZQorICAgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBvY2N1cnMgYmVmb3JlIGFueSBvdGhlciBpbmNsdWRlIGZpbGUKKyAgIHRoYXQgZGVmaW5lcyBfV0lOMzJfV0lOTlQuCisKKzIwMTAtMDMtMTAgMjM6MzEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBORVdTOiBzbm1wbGliOiBjcmVhdGUgaW5kZXhlcyBmb3IgY2VydGlmaWNhdGVzIGluIGNvbmZpZyBwYXRoCisKKzIwMTAtMDMtMTAgMTg6NDggIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wU29ja2V0QmFzZURvbWFpbi5jOgorCisgICBBZGRlZCAiI2luY2x1ZGUgPHVuaXN0ZC5oPiIgc3VjaCB0aGF0IG9uIFVuaXggc3lzdGVtcyB0aGUKKyAgIGNvbXBpbGVyIGRvZXMgbm90IHByaW50IGEgd2FybmluZyBhYm91dCBhIG1pc3NpbmcgZGVjbGFyYXRpb24gZm9yCisgICB0aGUgZnVuY3Rpb24gY2xvc2UoKS4KKworMjAxMC0wMy0xMCAxODozMCAgcnN0b3J5CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcGVybC9BU04vQVNOLnBtLCAgIAorICAgICAgcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbSwgcGVybC9PSUQvT0lELnBtLCBwZXJsL1NOTVAvU05NUC5wbSwgCisgICAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAgICBwZXJsL2FnZW50L2FnZW50LnBtLAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbToKKworICAgdXBkYXRlIHZlcnNpb24gdG8gNS42LmRldgorCisyMDEwLTAzLTEwIDE4OjI5ICByc3RvcnkKKworICAgKiBsb2NhbC9WZXJzaW9uLU11bmdlLnBsOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogdXBkYXRlIFZlcnNpb24tTXVuZ2UgZm9yIHJlbmFtZWQgY29uZmlndXJlLmFjCisKKzIwMTAtMDMtMTAgMTg6MjkgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZS5hYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IHNhdmUgY29uZmlndXJlIGNhY2hlIGV2ZXJ5IG9uY2UgaW4gd2hpbGUKKworMjAxMC0wMy0xMCAxNjoxMiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluOgorCisgICBSZW9yZGVyZWQgc29tZSBvZiB0aGUgTWFrZWZpbGUgcnVsZXMgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhlCisgICBkaWZmcyB3aXRoIGxpYnNubXBfZGxsL01ha2VmaWxlLmluLgorCisyMDEwLTAzLTEwIDE2OjEwICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluOgorCisgICBXaW4zMiwgYmF0Y2ggYnVpbGRpbmc6IERMTCBidWlsZHMgYWdhaW4uCisKKzIwMTAtMDMtMTAgMTY6MDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIEZpeGVkIGEgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5nIGJ5IGFkZGluZyBhIGZvcndhcmQKKyAgIGRlY2xhcmF0aW9uIGZvciB0aGUgZnVuY3Rpb24gX2NhY2hlX2ZyZWUoKS4KKworMjAxMC0wMy0xMCAxNjowNiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBCdWlsZHMgYWdhaW4gb24gV2luMzIuCisKKzIwMTAtMDMtMTAgMDQ6MTcgIHJzdG9yeQorCisgICAqIFJFQURNRToKKworICAgYWRkIG1pc3NpbmcgY29udHJpYnV0b3JzCisKKzIwMTAtMDMtMTAgMDQ6MTcgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZml4IHBvdGVudGlhbCBkb3VibGUgZnJlZSBpbiBDT05UQUlORVJfRlJFRQorICAgLSBhbHNvIGFkZGVkIHNldmVyYWwgY29tcGFyZSByb3V0aW5lcworCisyMDEwLTAzLTEwIDA0OjE3ICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogd2hlbiBmcmVlaW5nIGEgY2FjaGUsIHN0b3AgdGltZXIgYW5kIGNhbGwgY2FjaGUKKyAgIGZyZWUgZnVuYworICAgLSBhbHNvIGFkZCBuZXRzbm1wX2NhY2hlX3JlbW92ZQorCisyMDEwLTAzLTEwIDAzOjUyICByc3RvcnkKKworICAgKiAgUkVBRE1FLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgdW5kbyBjb21taXQgMTgyMzQKKworMjAxMC0wMy0xMCAwMzo0MSAgcnN0b3J5CisKKyAgICogIFJFQURNRSwgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIE1lcmdlIGJyYW5jaCAncHVsbG1lJyBvZiAuLi90cnVuay1zdGFnaW5nCisKKzIwMTAtMDMtMDkgMTc6NDggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBleHBvcnRlZCBuZXRzbm1wX3JlYWRfbW9kdWxlKCkgZnJvbSBuZXRzbm1wLmRsbAorICAgc3VjaCB0aGF0IE5ldFNOTVAucG0gYnVpbGRzIGFnYWluLgorCisyMDEwLTAzLTA5IDE3OjQ3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbjoKKworICAgU2ltcGxpZmllZCB0d28gbWFrZWZpbGVzIHVzZWQgYnkgYnVpbGQuYmF0IChXaW4zMikuCisKKzIwMTAtMDMtMDkgMTc6MjQgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogYnVpbGRpbmcgTmV0U05NUC5wbSBkb2VzIG5vIGxvbmdlcgorICAgdHJpZ2dlciBjb21waWxlciB3YXJuaW5ncyBhYm91dCByZWRlZmluaW5nIF9XSU4zMl9XSU5OVCBub3IKKyAgIE5URERJX1ZFUlNJT04uCisKKzIwMTAtMDMtMDkgMTc6MjIgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL01ha2VmaWxlLlBMOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IG1hZGUgYnVpbGRpbmcgTmV0U05NUC5wbSBtb3JlIHNpbGVudCBieQorICAgYWRkaW5nIHRoZSBNU1ZDIGNvbXBpbGVyIGZsYWdzIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyAgIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTLgorCisyMDEwLTAzLTA5IDE3OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIHJlbW92ZSBkZWJ1ZyBtc2cgdXNlZCBkdXJpbmcgZGVidWdnaW5nCisKKzIwMTAtMDMtMDkgMTc6MDIgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBpbml0aWFsIGNlcnQgd3JhcHBlciAtIHRlc3RpbmcgcmVwbyB3cml0ZSBwcml2cworCisyMDEwLTAzLTA5IDEwOjIwICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluOgorCisgICBSZW1vdmVkIGR1cGxpY2F0ZSBidWlsZCBydWxlcy4gVGhlc2UgZHVwbGljYXRlIHJ1bGVzIHdlcmUKKyAgIGhhcm1sZXNzIGJ1dCB0cmlnZ2VyZWQgYSB3YXJuaW5nLgorCisyMDEwLTAzLTA5IDAyOjM4ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgsIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGRpcmVjdG9yeSBjb250YWluZXIgZW5oYW5jZW1lbnRzCisgICAtIGZpeCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsKKyAgIC0gYWRkIGZpbHRlciBjYWxsYmFjayB0byBmaWx0ZXIgZmlsZXMgcmV0dXJuZWQKKyAgIC0gYWRkIG9wdGlvbiB0byByZXR1cm4gcmVsYXRpdmUgYW5kIG5vdCBmdWxsIHBhdGhzCisgICAtIGFkZCBvcHRpb24gdG8gc29ydCByZXR1cm5lZCBsaXN0CisgICAtIGFkZCBvcHRpb24gdG8gcmV0dXJuIGVtcHR5IGNvbnRhaW5lciBpbnN0ZWFkIG9mIE5VTEwgaWYgbm8KKyAgIGZpbGVzIGZvdW5kCisgICAtIGNoYW5nZSBkZWZhdWx0IGNvbnRhaW5lciBuYW1lIHRvIGRpcmVjdG9yeSB0aGF0IHdhcyBzY2FubmVkCisgICAtIHR3ZWFrIGRlYnVnL2xvZyBtZXNzYWdlcworCisyMDEwLTAzLTA4IDIzOjA3ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IGRlZmluZSBhbmQgdXNlIG5ldyBORVRTTk1QX0xPR09OQ0UgbWFjcm8KKworMjAxMC0wMy0wOCAyMjo0NCAgcnN0b3J5CisKKyAgICogbWFuL3NubXBfY29uZmlnLjUuZGVmLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGNvbmYgZmlsZXMgY2FuIG5vdyBpbmNsdWRlIG90aGVyIGNvbmYgZmlsZXMKKyAgIC0gYWxzbyB0d2Vha2VkIGRlYnVnIHRva2VucyBoZXJlIGFuZCB0aGVyZQorCisyMDEwLTAzLTA4IDIyOjQzICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGZpeCB0eXBvIChjYXVzZWQgZXh0ZXJuYWwgcmVmZXJlbmNlIHdoZW4gRFRMU1VEUCBjb25maWd1cmVkCisgICB3aXRob3V0IGR0bHN0Y3ApCisKKzIwMTAtMDMtMDYgMDI6MjcgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IG5ldHNubXBfY29udGFpbmVyIGVuaGFuY2VtZW50czoKKyAgIC0gYWRkIGZyZWVfaXRlbSBmdW5jdGlvbjsgZGVmYXVsdHMgdG8KKyAgIG5ldHNubXBfY29udGFpbmVyX3NpbXBsZV9mcmVlCisgICAtIGFkZCBDT05UQUlORVJfRlJFRV9BTEwgbWFjcm8vZnVuY3Rpb24gKGxpa2UgQ09OVEFJTkVSX0NMRUFSIGJ1dAorICAgY2FsbHMgY29udGFpbmVyIGZyZWVfaXRlbSBmb3IgZWFjaCBpdGVtIGluIHByaW1hcnkgY29udGFpbmVyKQorICAgLSBhZGQgYWJpbGl0eSB0byBzZXQgb3B0aW9ucyBvbiBiaW5hcnlfYXJyYXkgY29udGFpbmVycworCisyMDEwLTAzLTAyIDE3OjU1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW46CisKKyAgIE1hZGUgc3VyZSB0aGF0IHdpbjMyL2J1aWxkLmJhdCB3b3JrcyBhZ2FpbiBieSBhZGRpbmcgbWlzc2luZworICAgc291cmNlIGZpbGUgbmFtZXMuIFNvcnRlZCBzb3VyY2UgZmlsZSBuYW1lcyBhbHBoYWJldGljYWxseSB0b28uCisKKzIwMTAtMDMtMDIgMTY6NTQgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgxNjcgKG1lcmdlIG9mIHNubXBkIGFuZCBzbm1wZHNkayBhbmQgYWxzbyBvZgorICAgbmV0c25tcG1pYnMgYW5kIG5ldHNubXBtaWJzc2RrKTogdGhlIGJhdGNoIGZpbGUgd2luMzIvYnVpbGQuYmF0CisgICB3b3JrcyBhZ2FpbiB3aXRoIHRoZSBQbGF0Zm9ybSBTREsgZW5hYmxlZC4KKworMjAxMC0wMy0wMiAxNjo1MiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9NYWtlZmlsZS1hcHBzLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODIxNSAocmVwbGFjZWQgdGhlIG9ic29sZXRlIGNsLmV4ZSBvcHRpb24gL0dYIGJ5CisgICB0aGUgZXF1aXZhbGVudCAvRUhzYzsgYWRkZWQgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiwgYWRkZWQKKyAgIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIGFuZCByZW1vdmVkIC9GcC4uLiBhbmQgL1lYKS4KKworMjAxMC0wMi0yOCAxNTo1NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzoKKworICAgV2luMzI6IGZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCByZWRlZmluaXRpb24gb2YKKyAgIF9XSU4zMl9XSU5OVCBieSBtYWtpbmcgc3VyZSB0aGF0IDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gaXMKKyAgIGluY2x1ZGVkIGJlZm9yZSA8d2luZG93cy5oPi4KKworMjAxMC0wMi0yOCAxNToyNCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYmhlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBiYXRjaCBidWlsZDogcmVwbGFjZWQgdGhlIG9ic29sZXRlIC9HWCBieSB0aGUKKyAgIGVxdWl2YWxlbnQgL0VIc2MuCisgICBDSEFOR0VTOiBXaW4zMjogYmF0Y2ggYnVpbGQ6IGFkZGVkIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIKKyAgIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIHRvIG1ha2UgYnVpbGRpbmcgd2l0aCBNU1ZDIDIwMDgKKyAgIG1vcmUgc2lsZW50LgorICAgQ0hBTkdFUzogV2luMzI6IGJhdGNoIGJ1aWxkOiByZW1vdmVkIC9GcC4uLiBhbmQgL1lYLiBUaGVzZQorICAgb3B0aW9ucyBpbmZsdWVuY2UgaG93IHByZWNvbXBpbGVkIGhlYWRlciBmaWxlcyBhcmUgZ2VuZXJhdGVkLAorICAgd2hpY2ggYXJlIG5vdCB1c2VkIGluc2lkZSB0aGUgTmV0LVNOTVAgcHJvamVjdC4gL1lYIGlzIG5vdAorICAgc3VwcG9ydGVkIGJ5IE1TVkMgMjAwOC4KKyAgIENIQU5HRVM6IFdpbjMyOiBiYXRjaCBidWlsZDogcmVtb3ZlZCBhIGR1cGxpY2F0ZSBvY2N1cnJlbmNlIG9mCisgICBzdHJ0b3VsbC5vYmouCisKKzIwMTAtMDItMjggMTQ6MTEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvQ29uZmlndXJlLCB3aW4zMi9NYWtlZmlsZS5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgxNjcgKG1lcmdlIG9mIHNubXBkIGFuZCBzbm1wZHNkayBhbmQgYWxzbyBvZgorICAgbmV0c25tcG1pYnMgYW5kIG5ldHNubXBtaWJzc2RrKTogYXBwbGllZCB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMgdG8KKyAgIHRoZSB3aW4zMi9Db25maWd1cmUgc2NyaXB0IGFuZCB3aW4zMi9NYWtlZmlsZS5pbi4KKworMjAxMC0wMi0yNyAxMzoxMSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCBpbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5waXBlLmgsIGluY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgsICAgCisgICAgICBzbm1wbGliL2dldG9wdC5jLCBzbm1wbGliL2dldHRpbWVvZmRheS5jLCBzbm1wbGliL21pYi5jLCAgIAorICAgICAgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXBfZGVidWcuYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvc3RybGNweS5jLCBzbm1wbGliL3N0cnRva19yLmMsIHNubXBsaWIvc3RydG91bGwuYywgICAKKyAgICAgIHNubXBsaWIvdG9vbHMuYywgc25tcGxpYi91Y2RfY29tcGF0LmMsIHNubXBsaWIvd2lucGlwZS5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGRlY2xhcmVkIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3J0ZWQgZnJvbSB0aGUKKyAgIE5ldC1TTk1QIERMTCBhcyBORVRTTk1QX0lNUE9SVC4gVGhlIHJlc3VsdCBpcyBhIG1pbm9yCisgICBvcHRpbWl6YXRpb246IGNvZGUgdGhhdCB1c2VzIHRoZSBOZXQtU05NUCBETEwgd2lsbCBub3cgY2FsbCB0aGUKKyAgIERMTC1leHBvcnRlZCBmdW5jdGlvbnMgZGlyZWN0bHkgaW5zdGVhZCBvZiBpbmRpcmVjdGx5IHZpYSB0aGUKKyAgIHN0dWIgaW4gdGhlIGltcG9ydCBsaWJyYXJ5LgorCisyMDEwLTAyLTI3IDExOjUwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKKworICAgUmVtb3ZlZCBhIHJlZHVuZGFudCBzdHJuY2FzZWNtcCgpIGRlY2xhcmF0aW9uLgorCisyMDEwLTAyLTI3IDA5OjU3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc3RydG9rX3IuYzoKKworICAgRml4ZWQgYSB0eXBvIGluIGEgc291cmNlIGNvZGUgY29tbWVudC4KKworMjAxMC0wMi0yNyAwOTo1NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTg5IChyc3RvcnkpOiBidWlsZHMgYWdhaW4gb24gV2luZG93cy4KKworMjAxMC0wMi0yNSAxNzo1MyAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcCwgICAKKyAgICAgIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXAvbGlic25tcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZC9zbm1wZC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIHdpbjMyL3NubXBnZXQvc25tcGdldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AsICAKKyAgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osIHdpbjMyL3NubXBzZXQvc25tcHNldC5kc3AsICAKKyAgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwLCB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgIAorICAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcCwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AsIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgIAorICAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS5kc3AsIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AsIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcCwgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCAgIAorICAgICAgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMi5zbG4sIHdpbjMyL3dpbjMyZGxsLmRzdywgICAKKyAgICAgIHdpbjMyL3dpbjMyZGxsLnNsbjoKKworICAgUmV2ZXJ0ZWQgcjE4MjA3IChkc3AvZHN3IHRvIHZjcHJvai9zbG4gY29udmVyc2lvbikgZXhjZXB0IHRoZQorICAgc3VwcHJlc3Npb24KKyAgIGxpc3QgY2hhbmdlcy4gVGhlIGdvYWwgb2YgdGhpcyBjb252ZXJzaW9uIHdhcyB0d29mb2xkOiBub3Qgb25seQorICAgdG8gYmUgYWJsZQorICAgdG8gbG9hZCB0aGUgcHJvamVjdCBmaWxlcyBpbiBNU1ZDIDIwMDIgLSAyMDA4IGJ1dCBhbHNvIHRvIGJlIGFibGUKKyAgIHRvIGNvbW1pdAorICAgY2hhbmdlcyBtYWRlIGZyb20gaW5zaWRlIHRoZSBNU1ZDIDIwMDggSURFLiBVbmZvcnR1bmF0ZWx5CisgICBjb252ZXJ0aW5nIGRzcC9kc3cKKyAgIGZpbGVzIHRvIHZjcHJvai9zbG4gZmlsZXMgd2l0aCBNU1ZDIDIwMDggbWFrZXMgaXQgaW1wb3NzaWJsZSB0bworICAgbG9hZCB0aGUKKyAgIHZjcHJvai9zbG4gZmlsZXMgd2l0aCBlYXJsaWVyIE1TVkMgdmVyc2lvbnMuIFdoeSBvbiBlYXJ0aCBkaWQKKyAgIE1pY3Jvc29mdAorICAgZGVjaWRlIHRvIHB1dCBhIHZlcnNpb24gbnVtYmVyIGluIFhNTCBmaWxlcyA/CisKKzIwMTAtMDItMjQgMTk6NDEgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyLCB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlLCAgIAorICAgICAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcCwgICAKKyAgICAgIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osIHdpbjMyL2xpYmFnZW50LCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzLCB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLnZjcHJvaiwgd2luMzIvbGlibmV0c25tcHRyYXBkLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgd2luMzIvbGlic25tcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXAvbGlic25tcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbCwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCB3aW4zMi9uZXRzbm1wbWlicywgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgd2luMzIvc25tcGJ1bGtnZXQsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osIHdpbjMyL3NubXBidWxrd2FsaywgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkLCAgIAorICAgICAgd2luMzIvc25tcGQvc25tcGQuZHNwLCB3aW4zMi9zbm1wZC9zbm1wZC52Y3Byb2osIHdpbjMyL3NubXBkZWx0YSwgCisgICAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwLCB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwKKyAgICAgICAgIHdpbjMyL3NubXBkZiwgd2luMzIvc25tcGRmL3NubXBkZi5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgd2luMzIvc25tcGdldCwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC5kc3AsIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dCwgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCB3aW4zMi9zbm1wbmV0c3RhdCwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgd2luMzIvc25tcHNldCwgICAKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC5kc3AsIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wc3RhdHVzLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwgd2luMzIvc25tcHRhYmxlLCAgIAorICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AsIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCAgCisgICAgICAgd2luMzIvc25tcHRlc3QsIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgd2luMzIvc25tcHRyYW5zbGF0ZSwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCB3aW4zMi9zbm1wdHJhcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcCwgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCB3aW4zMi9zbm1wdXNtLCAgIAorICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcCwgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB2YWNtLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osIHdpbjMyL3NubXB3YWxrLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwLCB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osICAgCisgICAgICB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyLnNsbiwgd2luMzIvd2luMzJkbGwuZHN3LCAgIAorICAgICAgd2luMzIvd2luMzJkbGwuc2xuOgorCisgICAocmV2ZXJ0ZWQpIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogY29udmVydGVkIC5kc3AvLmRzdyBmaWxlcyB0bworICAgLnZjcHJvai8uc2xuIGZpbGVzLiBUaGlzIGltcGxpZXMgdGhhdCBzdXBwb3J0IGZvciBNU1ZDIDYuMCBoYXMKKyAgIGJlZW4gZHJvcHBlZCBhbmQgdGhlIG1pbmltdW0gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gdmVyc2lvbgorICAgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGlzIE1pY3Jvc29mdCBWaXN1YWwKKyAgIFN0dWRpbyAuTkVUICgyMDAyKS4KKworMjAxMC0wMi0yMyAxOTowMyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IHdoZW4gZ2VuZXJhdGluZyBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBzeXN0ZW0KKyAgIGxvY2F0aW9uIGFuZCBubyBkb21haW4gbmFtZSBpcyBmb3VuZCBpbiAvZXRjL3Jlc29sdi5jb25mLCB1c2UKKyAgICJAbm8ud2hlcmUiIGluc3RlYWQgb2YgIiIuCisKKzIwMTAtMDItMjMgMTg6NTAgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBtNC9hY19wcm9tcHRfdXNlci5tNDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IG1hZGUgc3VyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXMgbm8KKyAgIGxvbmdlciBpbnZva2UgInRhaWwgLTEiLCB3aGljaCBpcyBub3QgUE9TSVgtY29tcGxpYW50LgorCisyMDEwLTAyLTIzIDE4OjQ1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHAsIHRlc3RpbmcvdGVzdHMvVDMxMHRjcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMyMHVkcHY2LCB0ZXN0aW5nL3Rlc3RzL1QzMzB0Y3B2NiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXgsIHRlc3RpbmcvdGVzdHMvVDM2MGR0bHN1ZHAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzOTlhbGlhczoKKworICAgUmVtb3ZlZCBhbGwgdHJhbnNwb3J0IHRlc3RzIHNpbmNlIGl0J3MgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUKKyAgIHdoZXJlIHRoZXkgY2FuIHNhZmVseSBvcGVyYXRlICh3YXMgc3RvcHBpbmcgdGFuZGVycycgbmlnaHRseQorICAgdGVzdHMgZnJvbSBzdWNjZWVkaW5nKQorCisyMDEwLTAyLTIzIDE4OjQxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGVycm9yIGFuZCBkZWJ1Z2dpbmcgb3V0cHV0CisKKzIwMTAtMDItMjMgMTg6NDAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggdGhlIHNlcnZlciBjb250ZXh0IGdlbmVyYXRvciB0byBhY3R1YWxseSwgdW0sIHJldHVybiB0aGUKKyAgIGNvbnRleHQuCisKKzIwMTAtMDItMjMgMTg6NDAgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBpbml0aWFsaXplIHRoZSAncmVzJyB2YXJpYWJsZSBzaW5jZSBpdCdzIGNoZWNrZWQKKworMjAxMC0wMi0yMyAxODozOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBwcm9ncmVzcyB0b3dhcmQgYSByZWFsIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDItMjMgMTg6MzggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICB0bHN0Y3AgY3RvciBpbnZvY2F0aW9uCisKKzIwMTAtMDItMjMgMTg6MzggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaDoKKworICAgcmVxdWlyZSBUTFNCYXNlCisKKzIwMTAtMDItMjMgMTg6MzcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGFkZGVkIGhvc3QgaWRlbnRpZmllciBhcyBvdXRwdXQKKworMjAxMC0wMi0yMyAxODozNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc2lnbmlmaWNhbnQgbW9yZSB3b3JrIG9uIHRoZSBUTFMgVENQIGRvbWFpbgorCisyMDEwLTAyLTIzIDE3OjQzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgxOTMgKGpzYWZyYW5layk6IHJlcmFuIGF1dG9yZWNvbmYgZm9yIHRoZSB0cnVuaworICAgYW5kIHRoZSA1LjUgYnJhbmNoLgorCisyMDEwLTAyLTIzIDE0OjU4ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHVzZSBORVRTTk1QX1BSSXogaW5zdGVhZCBvZiAlegorCisyMDEwLTAyLTIzIDEyOjI3ICBqc2FmcmFuZWsKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEZpeGVkIGNvbXBpbGF0aW9uIHdpdGggcnBtLTQuNi4KKyAgIFR1cm4gb24gdGhlIGxlZ2FjeSBBUEkgd2hlbiBycG0tNC42IGlzIGRldGVjdGVkLgorCisyMDEwLTAyLTIzIDA3OjM4ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFJldmVydGVkIHIxODAwMCAoZGlzYWJsaW5nIFNJR0FMUk0gc3VwcG9ydCkgYmVjYXVzZSB0aGlzIGludm9sdmVzCisgICBhIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgY2hhbmdlLgorCisyMDEwLTAyLTIzIDAwOjM2ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUQ1BEb21haW4uYzoKKworICAgZml4IHR5cG8gaW4gY29tbWVudAorCisyMDEwLTAyLTIzIDAwOjM0ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGRlYnVnIG1zZyB0d2Vha3M7IHVzZSBuZXcgdHJhbnBvcnQgZnVuY3Rpb25zCisgICAtIGFkZCBkZWJ1ZyBoZWFkZXIgZm9yIHNubXAgdmVyc2lvbgorICAgLSBhZGQgbGVuZ3RoIHRvIGRlYnVnIHNlbmQvcmVjZWl2ZSBtZXNzYWdlcworICAgLSB1c2UgbmV3IHRyYW5wb3J0IGZ1bmN0aW9ucyBmb3Igc2VuZC9yZWN2L2ZpbmRpbmcgcGVlciBhZGRyZXNzCisKKzIwMTAtMDItMjMgMDA6MjUgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgYWRkIG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nLCBuZXRzbm1wX3RyYW5zcG9ydF9zZW5kICYKKyAgIG5ldHNubXBfdHJhbnNwb3J0X3JlY3YKKyAgIC0gbW92ZXMgdHJhbnNwb3J0IG1hbmlwdWxhdGlvbiBpbnRvIHRyYW5zcG9ydCBjb2RlCisgICAtIGNlbnRyYWwgcGxhY2UgZm9yIGxvZ2dpbmcvZGVidWdnaW5nIHNlbnQvcmVjZWl2ZWQgZGF0YQorCisyMDEwLTAyLTIyIDE5OjMzICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogbWFkZSBzdXJlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcyBubworICAgbG9uZ2VyIGludm9rZSAidGFpbCAtMSIsIHdoaWNoIGlzIG5vdCBQT1NJWC1jb21wbGlhbnQuCisKKzIwMTAtMDItMjIgMTk6MjEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgRm9sbG93LXVwIGZvciByMTgxODYuIFJlZ3Jlc3Npb24gdGVzdCAzNCAod2hldGhlciBhdXRoZW50aWNhdGlvbgorICAgZmFpbHVyZSB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCkgcGFzc2VzIG5vdyBhZ2Fpbi4KKworMjAxMC0wMi0yMiAwOToxOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogbWFkZSBzdXJlIHRoYXQgaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbHVyZSBkb2VzCisgICBub3QgY3JlYXRlIGRhbmdsaW5nIHBvaW50ZXJzIGluIHRoZSBNSUIgc3VidHJlZSByZWdpc3RyeS4KKworMjAxMC0wMi0yMiAwOToxMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudCwgYXBwcywgYXBwcy9zbm1wbmV0c3RhdDoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTAyLTIyIDA4OjQyICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZToKKworICAgRm9sbG93LXVwIGZvciByMTgwODQ6IGZpeGVkIGxpYmVheTMyIChPcGVuU1NMKSBjb25maWd1cmUgdGVzdCBmb3IKKyAgIE1pbkdXLgorCisyMDEwLTAyLTIyIDA4OjMxICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODA4NDogZml4ZWQgbGliZWF5MzIgKE9wZW5TU0wpIGNvbmZpZ3VyZSB0ZXN0IGZvcgorICAgTWluR1cuCisKKzIwMTAtMDItMjIgMDg6MTMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIE1pbkdXIHdoZW4gSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQuCisKKzIwMTAtMDItMjEgMTg6NTggIGJ2YXNzY2hlCisKKyAgICogIFJFQURNRS53aW4zMiwgd2luMzIvbGlic2RsbC5kc3csICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCB3aW4zMi93aW4zMmRsbC5kc3c6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogcmVuYW1lZCBsaWJzZGxsLmRzdyBpbnRvIHdpbjMyZGxsLmRzdy4KKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogc2ltcGxpZmllZCBsaW5raW5nIHRoZSBOZXQtU05NUAorICAgYXBwbGljYXRpb25zIHdpdGggbmV0c25tcC5kbGwgYnkgYWRkaW5nIGFsbCBhcHBsaWNhdGlvbiBwcm9qZWN0cworICAgdG8gdGhlIHNhbWUgd29ya3NwYWNlIHRoYXQgaXMgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIERMTC4KKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogbWFkZSBidWlsZGluZyBuZXRzbm1wLmRsbCBsZXNzIGVycm9yCisgICBwcm9uZSBieSBsZXR0aW5nIHRoZSBjb21waWxlciBwcmludCBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZQorICAgcHJlcHJvY2Vzc29yIHN5bWJvbCBORVRTTk1QX1VTRV9ETEwgaGFzIG5vdCBiZWVuIGRlZmluZWQuCisKKzIwMTAtMDItMjEgMTg6NTEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IEFkZGVkIGxpYnNubXAuZGVmIHRvIHRoZSBsaXN0IG9mCisgICBsaWJzbm1wX2RsbC5kc3Agc291cmNlIGZpbGVzIHN1Y2ggdGhhdCB0aGUgRExMIGlzIHJlYnVpbHQgd2hlbgorICAgdGhlIC5kZWYgZmlsZSBoYXMgYmVlbiBtb2RpZmllZC4KKworMjAxMC0wMi0yMSAxODo0NSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBleHBvcnRlZCBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZygpIGZyb20KKyAgIG5ldHNubXAuZGxsLgorCisyMDEwLTAyLTIxIDE3OjM5ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBNb3JlIFdpbjMyIElQdjYgc291cmNlIGNvZGUgY29uc2lzdGVuY3kgaW1wcm92ZW1lbnRzOgorICAgLSBNb3ZlZCAjdW5kZWYgSEFWRV9JRl9OQU1FVE9JTkRFWCBmcm9tIHNubXBsaWIvKi5jIHRvCisgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC4KKyAgIC0gQ2hhbmdlZCB0aGUgZ2xvYmFsIGluNmFkZHJfYW55IHZhcmlhYmxlIGludG8gYSBzdGF0aWMgdmFyaWFibGUKKyAgIHN1Y2ggdGhhdAorICAgbXVsdGlwbGUgZGVmaW5pdGlvbnMgZG8gbm90IHRyaWdnZXIgYSBsaW5rZXIgZXJyb3IuCisgICAtIEFkZGVkIHR5cGVkZWZzIGZvciB1aW50OF90LCBpbnQ4X3QsIHVpbnQxNl90IGFuZCBpbnQxNl90LgorICAgLSBSZXBsYWNlZCAnI2lmIE5FVFNOTVBfRU5BQkxFX0lQVjYnIGJ5ICcjaWZkZWYKKyAgIE5FVFNOTVBfRU5BQkxFX0lQVjYnLgorCisyMDEwLTAyLTIxIDA4OjMwICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmM6CisKKyAgIG1ha2Ugc3VyZSB0aGF0IElOQUREUl9OT05FIGlzIGRlZmluZWQgKGZpeGVzIGJ1aWxkIGVycm9yIG9uCisgICBTb2xhcmlzKQorCisyMDEwLTAyLTE5IDE5OjM5ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBTeW5jaHJvbml6ZWQgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggYW5kCisgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbi4KKworMjAxMC0wMi0xOSAxNDoxOCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBsaWJzbm1wIGJ1aWxkcyBhZ2FpbiBhcyBhIERMTCB3aGVuIElQdjYgaXMKKyAgIGVuYWJsZWQuCisKKzIwMTAtMDItMTkgMTM6MjIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIEZvbGxvdyB1cCBmb3IgcjE4MTY0OiBzeW5jaHJvbml6ZWQgbGlic25tcC5kZWYuaW4gd2l0aAorICAgbGlic25tcC5kZWYKKworMjAxMC0wMi0xOSAwOTowNSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IGFkZGVkICNpbmNsdWRlIDxtYWxsb2MuaD4gaW4KKyAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIHN1Y2ggdGhhdCB0aGUgTVNWQyBjb21waWxlcgorICAgZG9lc24ndCBnZXQgY29uZnVzZWQgYnkgdGhlIG1hbGxvYyByZWRlZmluaXRpb24gd2hlbiBidWlsZGluZworICAgbGlic25tcCBhcyBhIERMTC4KKworMjAxMC0wMi0xOSAwODo1OSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIEV4cG9ydGVkIG5ldHNubXBfcGFyc2VfYXJncygpIHN1Y2ggdGhhdCB0aGUgTmV0LVNOTVAgYXBwbGljYXRpb25zCisgICBidWlsZCBhZ2FpbiB3aGVuIGxpYnNubXAgaXMgYnVpbHQgYXMgYSBETEwuCisKKzIwMTAtMDItMTkgMDg6NTYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBtb3ZlZCBNU1ZDIE9wZW5TU0wgbGlua2VyIHNldHRpbmdzIGZyb20KKyAgIHNubXBsaWIva2V5dG9vbHMuYyB0byB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBzdWNoIHRoYXQKKyAgIHRoZXNlIHNldHRpbmdzIGFyZSBub3Qgb25seSBlZmZlY3RpdmUgd2hlbiBidWlsZGluZyBzbm1wbGliIGFzIGEKKyAgIHN0YXRpYyBsaWJyYXJ5IGJ1dCBhbHNvIHdoZW4gYW55IE5ldC1TTk1QIGFwcGxpY2F0aW9uIGlzIGJ1aWx0CisgICB0aGF0IGxpbmtzIHdpdGggc25tcGxpYiBhcyBhIHN0YXRpYyBsaWJyYXJ5IG9yIGFzIGEgRExMLgorCisyMDEwLTAyLTE5IDA4OjMyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYzoKKworICAgV2luMzIgY2xlYW51cDogTVNWQyAvIERMTCB0ZXN0cyBub3cgdXNlIHRoZSBvZmZpY2lhbGx5IGVuZG9yc2VkCisgICBtYWNybyBuYW1lcy4KKworMjAxMC0wMi0xOSAwNzo1MCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3A6CisKKyAgIEJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0wMi0xOSAwNjo0NyAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgTkVXUzogc25tcGxpYjogUEFUQ0g6IDI5NDI5NDA6IGZyb20gIkJpbGwgRmVubmVyIjogQWRkIGEgbmV3CisgICBmdW5jdGlvbiwgbmV0c25tcF9wYXJzZV9hcmdzLCB0aGF0IGlzIGxpa2Ugc25tcF9wYXJzZV9hcmdzIGJ1dAorICAgdGFrZXMgYW4gYWRkaXRpb25hbCBiaXRtYXNrLCBmbGFncywgdG8gYWZmZWN0IHRoZSBiZWhhdmlvdXIuIEFsc28KKyAgIHJlbW92ZSB0aGUgbWFnaWMgaGFuZGxpbmcgb2Ygc29tZSBhcHBsaWNhdGlvbiBuYW1lcy4KKworMjAxMC0wMi0xOCAxNDoyMiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9iaW46CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0wMi0xOCAxNDoyMCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwOgorCisgICBTb3J0ZWQgbmFtZXMgb2Ygc291cmNlIGZpbGVzIGFscGhhYmV0aWNhbGx5LgorCisyMDEwLTAyLTE4IDEzOjAzICBidmFzc2NoZQorCisgICAqICBSRUFETUUud2luMzIsIHNubXBsaWIvd2luc2VydmljZS5jLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsIHdpbjMyL25ldHNubXBtaWJzc2RrLCAgIAorICAgICAgd2luMzIvc25tcGRzZGssIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgICAKKyAgICAgIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzJzZGsuZHN3OgorCisgICBDSEFOR0VTOiBXaW4zMjogZHJvcHBlZCBzdXBwb3J0IGZvciBidWlsZGluZyBOZXQtU05NUCB3aXRoCisgICBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2LjAgd2l0aG91dCBwbGF0Zm9ybSBTREsuIEJ1aWxkaW5nCisgICBOZXQtU05NUCB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDYuMCArIFBTREsgb3IgYW55IGxhdGVyCisgICB2ZXJzaW9uIG9mIE1TVkMgaXMgc3RpbGwgcG9zc2libGUgaG93ZXZlci4KKyAgIAorICAgTm90ZTogaWYgaW4gdGhlIGZ1dHVyZSBmb3Igd2hhdGV2ZXIgcmVhc29uIGl0IHNob3VsZCBiZWNvbWUKKyAgIG5lY2Vzc2FyeSBhZ2FpbiB0byBiZSBhYmxlIHRvIGJ1aWxkIE5ldC1TTk1QIHdpdGggTVNWQyB3aXRob3V0CisgICByZWx5aW5nIG9uIHRoZSBwbGF0Zm9ybSBTREsgaGVhZGVycywgcGxlYXNlICNpZmRlZiBvdXQgdGhlIE1JQgorICAgY29kZSB0aGF0IHJlbGllcyBvbiB0aGUgUFNESyBoZWFkZXJzIGluc3RlYWQgb2Ygc3BsaXR0aW5nIHRoZQorICAgd29ya3NwYWNlIGZpbGVzIGFnYWluLgorCisyMDEwLTAyLTE4IDEyOjU3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmM6CisKKyAgIGRvczJ1bml4LgorCisyMDEwLTAyLTE4IDA5OjQ1ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oOgorCisgICBTb3VyY2UgY29kZSBjbGVhbnVwOgorICAgLSBNb3ZlZCBkb2N1bWVudGF0aW9uIG9mIG5ldHNubXBfbGFyZ2VfZmRfc2V0IG1lbWJlcnMgdG8gdGhlCisgICBjb21tZW50CisgICBibG9jayBqdXN0IGFib3ZlIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgdHlwZS4KKyAgIC0gUmVtb3ZlZCBzdXBlcmZsdW91cyAnZXh0ZXJuICJDIicgc3BlY2lmaWVyOiB0aGlzIGxpbmthZ2UKKyAgIHNwZWNpZmllcgorICAgb25seSBoYXMgYW4gZWZmZWN0IG9uIGRlY2xhcmF0aW9ucyBvZiB2YXJpYWJsZXMgb2YgZnVuY3Rpb25zIGFuZAorICAgbm90CisgICBvbiB0eXBlZGVmcyBvciBzdHJ1Y3QgZGVmaW5pdGlvbnMuCisgICAtIFJhbiB0aGlzIGhlYWRlciBmaWxlIHRocm91Z2ggaW5kZW50LgorCisyMDEwLTAyLTE4IDA5OjI2ICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVBWNkJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3A6CisKKyAgIENoYW5nZXM6CisgICAtIEJ1aWxkcyBhZ2FpbiB3aXRoIE1TVkMuCisgICAtIEZpeGVkIGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IE1TVkMgKHBhc3NpbmcgaW50CisgICBpbnN0ZWFkIG9mIHVfc2hvcnQgdG8gaHRvbnMoKSAvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUKKyAgIG1pc3NpbmcgYmVjYXVzZSBvZiBtaXNzaW5nICNpbmNsdWRlIGRpcmVjdGl2ZXMpLgorCisyMDEwLTAyLTE2IDE3OjE2ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgQ0hBTkdFUzogV2luMzI6IFRoZSBoZWFkZXIgZmlsZSA8c3lzL3RpbWViLmg+IGlzIG5vIGxvbmdlcgorICAgaW5jbHVkZWQgZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4uIE9yOiB0aGUgaGVhZGVyIGZpbGUKKyAgIDxzeXMvdGltZWIuaD4gd2lsbCBoYXZlIHRvIGJlIGluY2x1ZGVkIGV4cGxpY2l0bHkgaW4gc291cmNlIGZpbGVzCisgICB0aGF0IG5lZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBmdW5jdGlvbiBmdGltZSgpLgorICAgCisgICBOb3RlOiBjb21wYXJlZCB0byByMTgwMjQgYW5kIGJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0CisgICBCU0Qgc3lzdGVtcyAtLSA8c3lzL3RpbWViLmg+IHdhcyBvbmx5IGluY2x1ZGVkIGZyb20KKyAgIDxuZXQtc25tcC90eXBlcy5oPiBvbiBCU0Qgc3lzdGVtcyBpbiByZXZpc2lvbnMgcjE4MDI1Li5yMTgxNTIuCisKKzIwMTAtMDItMTQgMTk6MjkgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDguaDoKKworICAgQnVpbGRzIG5vdyBvbiBGcmVlQlNEIHZlcnNpb24gOC4wLgorCisyMDEwLTAyLTEzIDIwOjU5ICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaDoKKworICAgQWRqdXN0IHRoZSBwbGFjZW1lbnQgb2YgOydzIGluIG9yZGVyIHRvCisgICBhKSBBdm9pZCB3YXJuaW5ncyBhYm91dCBzcHVyaW91cyBzZW1pY29sb25zCisgICBiKSBOb3QgaGF2ZSB1bnRlcm1pbmF0ZWQgZGVjbGFyYXRpb25zIGluIGhlYWRlcnMKKworMjAxMC0wMi0xMiAwMjo1NyAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmM6CisKKyAgIENIQU5HRVM6IG1pYjJjOiB1cGRhdGUgaW5saW5lIGRvY3VtZW50YXRpb247IGFkZCBzdG9yYWdldHlwZSB0ZXN0CisgICBmb3IgY29sdW1ucworCisyMDEwLTAyLTEyIDAxOjUwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgZml4IHR5cG8gaW4gZGVmaW5lCisKKzIwMTAtMDItMTIgMDE6MDUgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGZpeCBzZWQgcHJvY2Vzc2luZyBvbiB3aGl0ZS1zcGFjZSBhZGRpbmcgc29sYXJpcyBtYWNoaW5lcworCisyMDEwLTAyLTEwIDIzOjU2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBhZGQgdG9wIHNyY2RpciB0byBjcHAgc2VhcmNoIHBhdGgKKworMjAxMC0wMi0xMCAyMzo1MiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIGZyZWVic2QgbmVlZHMgdGltZS5oIGFib3ZlIHRpbWViLmgKKworMjAxMC0wMi0xMCAyMzozNyAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgdXNlIHNlZCB3aXRoIG11bHRpcmVwbGFjZSBvbiBhIGxpbmUgdG8gZml4IHBvc3NpYmxlIHdoaXRlc3BhY2UKKyAgIGlzc3VlIG9uIHNvbGFyaXMKKworMjAxMC0wMi0xMCAyMzoyMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYmVnaW5uaW5nIHdvcmsgZm9yIFRMUyBzZXBhcmF0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgd2l0aCBhIGJhc2UKKyAgIGZpbGUKKworMjAxMC0wMi0xMCAyMzoyMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmg6CisKKyAgIG1vdmUgYmFzZSB0cmFuc3BvcnQgY3JlYXRpb24gZnVuY3Rpb24gb3V0IG9mIGxpbnV4IGlmZGVmcworCisyMDEwLTAyLTEwIDIzOjIxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlZCBhbm90aGVyIGVycm9yIGxvZ2dpbmcgZnVuY3Rpb24KKworMjAxMC0wMi0xMCAyMzoyMCAgaGFyZGFrZXIKKworICAgKiBtaWJzL05FVC1TTk1QLVRDLnR4dDoKKworICAgYWRkZWQgVExTIG92ZXIgVENQCisKKzIwMTAtMDItMTAgMTY6MzkgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IExpbnV4OiBJbXByb3ZlZCBFdGhlckxpa2UtTUlCIHN1cHBvcnQKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEpvc2VmIE1vZWxsZXJzCisKKzIwMTAtMDItMTAgMTA6MDQgIGR0czEyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgQ0hBTkdFUzogcHl0aG9uOiBTdXBwb3J0IG51bGwtYnl0ZXMgaW4gb2N0ZXQgc3RyaW5ncworICAgUGF0Y2ggc3VwcGxpZWQgYnkgVG9tbXkgQmVhZGxlCisKKzIwMTAtMDItMTAgMDA6NTkgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZWQgVExTIGluZnJhc3RydWN0dXJlIGludG8gYSBiYXNlIGRvbWFpbiBmaWxlCisKKzIwMTAtMDItMTAgMDA6MDQgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBtb3ZlZCBzb2NrZXQ2IGZ1bmN0aW9ucyB0byB0aGUgaXB2NiBiYXNlCisKKzIwMTAtMDItMTAgMDA6MDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICB3aGl0ZSBzcGFjZSBmb3JtYXR0aW5nCisKKzIwMTAtMDItMTAgMDA6MDMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZWQgdWRwX3NlbmQvcmVjdiB0byB1ZHBiYXNlCisKKzIwMTAtMDItMTAgMDA6MDIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFNvY2tldEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmUgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQgaW50byBzb2NrZXRiYXNlCisKKzIwMTAtMDItMTAgMDA6MDIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgbW92ZSBpcHY0IHNwZWNpZmljIFVEUCB0cmFuc3BvcnQgY3JlYXRpb24gdG8gdWRwaXB2NCBiYXNlCisKKzIwMTAtMDItMTAgMDA6MDEgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBtYWRlIGNvbW1vbiBmdW5jdGlvbnMgYmUgcmVmZXJlbmNlZCBkaXJlY3RseSBieSB0aGUgdHJhbnNwb3J0cworICAgYW5kIHJlbW92ZWQgb3JpZ2luYWwgZnVuY3Rpb25hbGl0eTsgdGhleSB3ZXJlIHN0YXRpYyBzbyB0aGVyZSBpcworICAgbm8gYmFja3dhcmRzIGNvbXBhdCBpc3N1ZXMKKworMjAxMC0wMi0xMCAwMDowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlZCBzb2NrZXQgYmFzZWQgY2xvc2UgdG8gYSBzb2NrZXQgYmFzZWQgZG9tYWluIGNvbW1vbiB0byBtYW55CisgICB0aGluZ3MKKworMjAxMC0wMi0wOSAyMzo1OSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jOgorCisgICBtb3ZlIFRDUCBjb21tb24gZnVuY3Rpb25zIHRvIGEgVENQQmFzZSBkb21haW4gaW1wbGVtZW50YXRpb24KKworMjAxMC0wMi0wOSAyMzo1NyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgd2FybmluZyBjbGVhbnVwCisKKzIwMTAtMDItMDkgMjM6NTYgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIHRtU3RhdGVSZWZlcmVuY2Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBpbmRleGVkIGFkZHJfcGFpcgorCisyMDEwLTAyLTA5IDIzOjU2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgbWFrZSBuZXRzbm1wX2R0bHN1ZHBfY2xvc2UgbWFrZSB1c2Ugb2YgbmV0c25tcF9iYXNldWRwX2Nsb3NlCisKKzIwMTAtMDItMDkgMjM6NTUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZWQgYmFzZSBVRFAgc29ja2V0IGNyZWF0aW9uIGludG8gYSBjb21tb24gYmFzZSBmdW5jdGlvbiBhbmQKKyAgIG1hZGUgdXNlIG9mIGl0CisKKzIwMTAtMDItMDkgMjM6NTQgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaDoKKworICAgcHJvcGVyIF9IIGlmZGVmIGNoZWNrcworCisyMDEwLTAyLTA5IDIzOjU0ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIGFkZGVkIGEgcmF3IFVEUCBiYXNlIGRvbWFpbgorCisyMDEwLTAyLTA5IDIzOjUzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBjcmVhdGVkIGEgVURQIElQdjQgYmFzZTsgbW92ZWQgYW5kIHJldXNlZCBtb3JlIGluZnJhc3RydWN0dXJlCisKKzIwMTAtMDItMDkgMjM6NTEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmVkIGlwdjQgYWRkcmVzcyBmb3JtYXR0aW5nIGludG8gc25tcElQdjRCYXNlRG9tYWluCisKKzIwMTAtMDItMDkgMjM6NTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYzoKKworICAgdjYgZG9tYWluIGluZnJhc3RydWN0dXJlIGZpbGVzCisKKzIwMTAtMDItMDkgMjM6NTEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBWNEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQVjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQVjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY0QmFzZURvbWFpbi5jOgorCisgICB2NiBkb21haW4gaW5mcmFzdHJ1Y3R1cmUgZmlsZXMKKworMjAxMC0wMi0wOSAyMzo1MCAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUFY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIE5ldyBJUHY0IGFuZCBJUCBiYXNlIHRyYW5zcG9ydCBmaWxlcworCisyMDEwLTAyLTA5IDIzOjQ4ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgZG9uJ3QgZG91YmxlIGluY2x1ZGUgdHJhbnNwb3J0IG1vZHVsZXMKKworMjAxMC0wMi0wOSAyMzo0OCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oOgorCisgICBtb3ZlZCBhcmNoaXRlY3R1cmUgdGVzdHMgaW50byB0aGUgaGVhZGVyIGZpbGVzIHVzaW5nIGNvbmZpZ19lcnJvcgorICAgZm9yIHNpZ25hbGluZyBwcm9ibGVtcworCisyMDEwLTAyLTA5IDIzOjQ2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgbW92ZWQgYXJjaGl0ZWN0dXJlIHRlc3RzIGludG8gdGhlIGhlYWRlciBmaWxlcyB1c2luZyBjb25maWdfZXJyb3IKKyAgIGZvciBzaWduYWxpbmcgcHJvYmxlbXMKKworMjAxMC0wMi0wOSAyMzo0NSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmg6CisKKyAgIG1vdmVkIGFyY2hpdGVjdHVyZSB0ZXN0cyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdXNpbmcgY29uZmlnX2Vycm9yCisgICBmb3Igc2lnbmFsaW5nIHByb2JsZW1zCisKKzIwMTAtMDItMDkgMjM6NDMgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBjaGVjayBmb3IgYW5kIHJlcG9ydCBjb25maWdfZXJyb3JzIGluIHRyYW5zcG9ydCBoZWFkZXJzCisKKzIwMTAtMDItMDkgMjM6NDMgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIGFsbG93IGEgTkVUU05NUF9RVUlDS19DSEVDSyBlbnYgdmFyaWFibGUgdG8gYnlwYXNzIGhlYWRlciBjaGVja3MKKworMjAxMC0wMi0wOSAyMzo0MiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGJldHRlciBjb21tZW50cworCisyMDEwLTAyLTA5IDIzOjQyICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgY2hlY2sgZm9yIGNvbmZpZ19yZXF1aXJlIG1hY3JvcyBpbiB0cmFuc3BvcnQgaGVhZGVycyBmb3IKKyAgIGZvcmNlLWluY2x1ZGluZyBvZiBvdGhlciB0aGluZ3MKKworMjAxMC0wMi0wOSAyMzo0MSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIHBlcmwvYWdlbnQvYWdlbnQueHMsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIGRlZmluZSBhIHN0YW5kYXJkaXplZCBpbmRleGVkIGFkZHJfcGFpciBpbnN0ZWFkIG9mIHVzaW5nIG9uZQorICAgbGFiZWxlZCBvbmx5IGZvciBVRFAgZXZlcnl3aGVyZQorCisyMDEwLTAyLTA5IDIzOjQwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBmaXggdHJhbnNwb3J0IHByZWZpeCBsaXN0IGZvciBpbmNvbWluZyBtZXNzYWdlcworCisyMDEwLTAyLTA5IDIzOjQwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgsIHNubXBsaWIvc25tcHRzbS5jOgorCisgICByZW1vdmUgdGhlIHNlY3VyaXR5IGxldmVsIGZyb20gdGhlIFRTTSBjYWNoZTsgcHJldmlvdXMgZXhpc3RlbmNlCisgICBmcm9tIGZyb20gYSBkcmFmdCBjb3B5IG9mIHRoZSBUU00gUkZDIGFuZCBpcyBub3cgc3RvcmVkIGVudGlyZWx5CisgICBpbiB0aGUgdG0gcmVmZXJlbmNlCisKKzIwMTAtMDItMDkgMjM6MzkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGltcGxlbWVudCBpbmNvbWluZyBUU00gcHJvY2VkdXJlcyBhY2NvcmRpbmcgdG8gUkZDIHRleHQKKworMjAxMC0wMi0wOSAyMzozOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgaW1wbGVtZW50IG91dGdvaW5nIFRTTSBwcm9jZWR1cmVzIGFjY29yZGluZyB0byBSRkMgdGV4dAorCisyMDEwLTAyLTA5IDIzOjM5ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oOgorCisgICBjcmVhdGUgZGVmaW5lZCBzaXplZCBhcnJheSBhbmQgbGVuZ3RoIHZhcmlhYmxlCisKKzIwMTAtMDItMDUgMDk6NTIgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGZpbGVkZXNjcmlwdGlvciBsZWFrIGluIEV0aGVybGlrZS1NSUIgYW5kCisgICBSTU9OLU1JQgorCisyMDEwLTAyLTA0IDE1OjU3ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IHJlcG9ydCByZWFsIGlmU3BlZWQgb2YgbmV0d29yayBpbnRlcmZhY2UgZXZlbiBpdAorICAgaXMgZG93bi4KKyAgIFNvbWUgaW50ZXJmYWNlcyBjYW4gcmVwb3J0IHRoZWlyIHJlYWwgc3BlZWQsIGV2ZW4gdGhleSBhcmUgZG93bi4KKyAgIEFuZCBpZiB0aGV5IGNhbid0LCB0aGUgZmFsbGJhY2sgdG8gMTBNYnBzIGlzIHN0aWxsIHRoZXJlLgorCisyMDEwLTAyLTAxIDE0OjQ3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYzoKKworICAgRml4ZWQgdGhlIGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSB0aGUgc291cmNlIGZpbGUKKyAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYy4KKworMjAxMC0wMi0wMSAxNDo0NSAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzIsIHNubXBsaWIva2V5dG9vbHMuYzoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBzaW1wbGlmaWVkIHRoZSBwcm9jZWR1cmUgZm9yIGJ1aWxkaW5nCisgICB3aXRoIFNOTVB2MyBzdXBwb3J0IGVuYWJsZWQgKE9wZW5TU0wpLgorCisyMDEwLTAyLTAxIDE0OjM0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgICAKKyAgICAgIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvbWQ1LmMsIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBhbGwgY2FsbHMgdG8gZnJlZSgpIGFyZSBpbnRlcmNlcHRlZCB3aGVuIGJ1aWxkaW5nCisgICB3aXRoIGRtYWxsb2MKKyAgIHN1cHBvcnQgZW5hYmxlZC4gSW5jbHVkZWQgPGRtYWxsb2MuaD4gaW4gdGhvc2Ugc291cmNlIGZpbGVzIHdoZXJlCisgICBpdCB3YXMgbm90CisgICB5ZXQgaW5jbHVkZWQsIGFuZCBwcm92aWRlZCBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGZyZWUoKSB3aGVyZQorICAgdGhlIGFkZHJlc3Mgb2YKKyAgIHRoaXMgZnVuY3Rpb24gd2FzIHRha2VuIChEbWFsbG9jIGNhbiBvbmx5IGludGVyY2VwdCBmcmVlKCkgd2hlbgorICAgaXQgaXMgY2FsbGVkCisgICBkaXJlY3RseSBidXQgbm90IHdoZW4gaXQgaXMgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyKS4KKworMjAxMC0wMi0wMSAxMDo0OSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CisKKyAgIE5FV1M6IGJ1aWxkaW5nOiBCdWlsZGluZyBOZXQtU05NUCB3aXRoIGRtYWxsb2Mgc3VwcG9ydCBlbmFibGVkIGlzCisgICBhZ2FpbiBwb3NzaWJsZS4KKworMjAxMC0wMi0wMSAwMTowNSAgdGFuZGVycworCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTRhZ2VudHhhZ2VudHh0cmFwOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogJ21ha2UgdGVzdCBURVNUT1BUUz0iLVAgdGNwIicgd29ya3MgZmluZSBub3cKKworMjAxMC0wMS0zMSAwODowMiAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMjoKKworICAgRm9sbG93LXVwIGZvciByMTgwODQ6IGZpeGVkIGFuIHNoIHN5bnRheCBlcnJvciBpbiB0aGUgY29uZmlndXJlCisgICBzY3JpcHQKKyAgIHRoYXQgd2FzIHRyaWdnZXJlZCBvbiBzeXN0ZW1zIHdpdGhvdXQgbGliY3J5cHRvIGFuZCB3aXRob3V0CisgICBsaWJlYXkzMi4KKyAgIFRoZSBmb2xsb3dpbmcgZXJyb3Igd2FzIHJlcG9ydGVkOgorICAgY29uZmlndXJlWzMzMTM2XTogeDogdW5rbm93biB0ZXN0IG9wZXJhdG9yCisKKzIwMTAtMDEtMjkgMjA6MDcgIGpzYWZyYW5laworCisgICAqIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZToKKworICAgRWxhYm9yYXRlIG9uIHJldi4gMTgwODkgYW5kIGFkanVzdCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB0aGUKKyAgICogICAgKnJlYWxseSB3b3JraW5nIG9uZSouICAyMDEwLTAxLTI5IDE5OjExICBqc2FmcmFuZWsKKworCisgICAqIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZToKKworICAgRml4IHRlc3QgMzUgd2hlbiBjb25maWd1cmUgb3B0aW9uICctLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4nIHdhcworICAgdXNlZCBhbmQgdGhlIGRpcmVjdG9yeSBmb3IgdGVtcC4gZmlsZXMgZG9lcyBub3QgZXhpc3QgeWV0LgorCisyMDEwLTAxLTI5IDE1OjA3ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL2Nsb3NlZGlyLmMsICAgCisgICAgICBzbm1wbGliL2dldHRpbWVvZmRheS5jLCBzbm1wbGliL29wZW5kaXIuYywgc25tcGxpYi9yZWFkZGlyLmMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwOgorCisgICBNb3ZlZCB0aGUgc291cmNlIGNvZGUgb2YgdGhlIG9wZW5kaXIoKSwgcmVhZGRpcigpLCBjbG9zZWRpcigpIGFuZAorICAgZ2V0dGltZW9mZGF5KCkgcmVwbGFjZW1lbnRzIGZvciBNU1ZDIGZyb20gc25tcGxpYi9zeXN0ZW0uYyB0bworICAgc2VwYXJhdGUgc291cmNlIGZpbGVzIGluIHNubXBsaWIuCisKKzIwMTAtMDEtMjkgMDg6NTcgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ29uZmlndXJlIHNjcmlwdCBjb25zaXN0ZW5jeSBpbXByb3ZlbWVudDogcmVuYW1lZCB0aGUgdmFyaWFibGUKKyAgICJzYXZlZF9MSUJTIiBpbnRvICJuZXRzbm1wX3NhdmVfTElCUyIuCisKKzIwMTAtMDEtMjkgMDY6MzkgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4OgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBDaGVjayB0aGUgc2l6ZSBvZiBzdW5fcGF0aCBhbmQgdXNlIHRoYXQgdG8KKyAgIGdlbmVyYXRlIHRoZSBtYXhpbWFsIHNpemUgc3RyaW5ncyBmb3Igc3RyZXNzaW5nIGNvbTJzZWN1bml4LgorCisyMDEwLTAxLTI3IDE1OjE2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZXZhbF90b29scy5zaDoKKworICAgTkVXUzogTWluR1c6IHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBpcyBhZ2FpbiBwb3NzaWJsZQorICAgKCdtYWtlIHRlc3QnKS4KKworMjAxMC0wMS0yNyAxNDo0MyAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IEN5Z3dpbjogYnVpbGRpbmcgd2l0aCBhbm90aGVyIE9wZW5TU0wgcGFja2FnZSB0aGFuIHRoZQorICAgQ3lnd2luLXByb3ZpZGVkIHBhY2thZ2VzIG9wZW5zc2wgYW5kIG9wZW5zc2wtZGV2ZWwgaXMgYWdhaW4KKyAgIHBvc3NpYmxlLgorICAgTkVXUzogTWluR1c6IGJ1aWxkaW5nIHdpdGggT3BlblNTTCB3b3JrcyBhZ2Fpbi4KKworMjAxMC0wMS0yNiAyMToyNyAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIHRoZSBjb250ZXh0IGFyZ3VtZW50IG9mIHNlbmRfdjN0cmFwLAorICAgc2VuZF90cmFwX3ZhcnNfd2l0aF9jb250ZXh0IGFuZCBuZXRzbm1wX3NlbmRfdHJhcHMgcmVmZXIgdG8gYQorICAgY29uc3QgY2hhciouCisKKzIwMTAtMDEtMjYgMjE6MjQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOgorCisgICBDb3JyZWN0IG1pc3NwZWxsaW5nIC0gI2Vsc2lmIHRvICNlbGlmCisKKzIwMTAtMDEtMjYgMjE6MjEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIEFwcGFyZW50bHkgbm90IGFsbCBzeXN0ZW1zIGRlZmluZSBJTkVUX0FERFJTVFJMRU4gc28gYWRkIGl0IGlmIGl0CisgICBpcyBtaXNzaW5nLgorCisyMDEwLTAxLTI2IDE1OjQ2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvVEVTVENPTkYuc2g6CisKKyAgIEFkZGVkIG5ldHN0YXQgcGF0aCBmb3IgTWluR1cuCisKKzIwMTAtMDEtMjYgMTU6MDAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIGZpeCBzdGF0IG5hbWVzCisKKzIwMTAtMDEtMjYgMTU6MDAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4KKworMjAxMC0wMS0yNiAxNDo1OSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgdXNlIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybgorCisyMDEwLTAxLTI2IDE0OjU4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuCisKKzIwMTAtMDEtMjYgMTQ6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHVwZGF0ZSBjb21tZW50cyB0byByZWZsZWN0IFJGQzU1OTEgYXMgdGhlIGRvY3VtZW50IGRlc2NyaWJpbmcgdGhlCisgICBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTAxLTI2IDExOjQzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2N5Z3dpbi5oOgorCisgICBORVdTOiBDeWd3aW46IEJVRzogMjkzOTE2ODogYnl0ZSBvcmRlciBvZiB1ZHBMb2NhbFBvcnQgaXMgbm93CisgICBjb3JyZWN0LgorCisyMDEwLTAxLTI2IDEwOjQ2ICBidmFzc2NoZQorCisgICAqICBuZXQtc25tcC1jb25maWcuaW4sIHRlc3RpbmcvVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsOgorCisgICBORVdTOiBDeWd3aW46IEJVRzogMjkzOTE2ODogZml4ZWQgdGVzdCBpbmZyYXN0cnVjdHVyZSAoIm1ha2UKKyAgIHRlc3QiKS4gVGhpcyBoYXMgYmVlbiBmaXhlZCBieSB1c2luZyB0aGUgcHJvcGVyIGVudmlyb25tZW50CisgICBzZXBhcmF0b3IgY2hhcmFjdGVyIGFuZCBieSBhZGRpbmcgdGhlIHBhdGggb2YgdGhlIG5ldHN0YXQKKyAgIGV4ZWN1dGFibGUgZm9yIEN5Z3dpbiBpbiB0ZXN0aW5nL1RFU1RDT05GLnNoLgorCisyMDEwLTAxLTI2IDA5OjI3ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4IHJhcmUgcmFjZSBjb25kaXRpb24gd2hlbiByZWFkaW5nIFJQTQorICAgZGF0YWJhc2UuCisgICBPbGQgcnBtIHZlcnNpb25zIHJldHVybiBOVUxMIGluc3RlYWQgb2YgSGVhZGVyIHdoZW4gYW5vdGhlciBSUE0KKyAgIGluc3RhbmNlIGhvbGRzCisgICBkYXRhYmFzZSBsb2Nrcy4gSS5lLiBzbm1wZCBzb21ldGltZXMgY3Jhc2hlcyB3aGVuIHJlYWRpbmcKKyAgIGhyX3N3SW5zdCBhbmQgcnBtIGlzCisgICBpbnN0YWxsaW5nL3VwZGF0aW5nL3JlbW92aW5nIGFub3RoZXIgcGFja2FnZS4gQXMgYSBzb2x1dGlvbiwKKyAgIHdob2xlIFJQTSBjYWNoZQorICAgaXMgdGhyb3duIGF3YXkgYW5kIHJlLXJlYWQgd2hlbiB3ZSBnb3QgYW4gZXJyb3IgZnJvbSBsaWJycG0uIFRoZQorICAgd2hvbGUgcHJvY2VzcworICAgaXMgcmVzdGFydGVkIG9ubHkgdGhyZWUgdGltZXMsIHRvIHByZXZlbnQgZW5kbGVzcyBsb29wLgorCisyMDEwLTAxLTI1IDIyOjE2ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgc25tcGxpYi9zY2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZDogRG8gbm90IGNoZWNrIGlmIHZhbHVlcyBvZiB0eXBlIHNpemVfdAorICAgYXJlIGxlc3MgdGhhbiAwLgorCisyMDEwLTAxLTI1IDIyOjExICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQ2hlY2sgdGhlIHJhbmdlIG9mIG9pZCB2YWx1ZXMgdG93YXJkcyB0aGUgbWF4aW11bQorICAgb2lkIHZhbHVlLCBub3RVTE9OR19NQVgKKworMjAxMC0wMS0yNSAyMDowMSAgcnN0b3J5CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgb25seSBiYWlsIG9uIG1pc3NpbmcgbGliaXBobHBhcGkgZm9yIHh3aW5zb2NrMgorCisyMDEwLTAxLTI1IDE5OjU3ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZW5hbWUgTUFYX1NUQVRTIHRvIE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMKKworMjAxMC0wMS0yNSAxOTo1MyAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYzoKKworICAgdXBkYXRlIGZvciBuZXcgcGF0aCB0byBzbm1wX2dldF9zdGF0aXN0aWNzOyBjaGVjayBmb3IgaW5kZXgKKyAgIG92ZXJmbG93CisKKzIwMTAtMDEtMjUgMTk6NDQgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaDoKKworICAgdXBkYXRlIGZvciBuZXcgcGF0aCB0byBzbm1wX2dldF9zdGF0aXN0aWNzCisKKzIwMTAtMDEtMjUgMTY6MDMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIHVzZSAqY3VycmVudCogY29weSBvZiB0aGUgTUlCIHdoZW4gZ2VuZXJhdGluZyBzdGF0cworCisyMDEwLTAxLTI1IDE2OjAxICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9zbm1wX2dldF9zdGF0aXN0aWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9zbm1wX2dldF9zdGF0aXN0aWMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmg6CisKKyAgIG1vdmUgc25tcF9nZXRfc3RhdGlzdGljIGhlbHBlciB0byBoZWxwZXJzIGRpcjsgdXBkYXRlIGFsbF9oZWxwZXJzCisgICBoZWFkZXIKKworMjAxMC0wMS0yNSAxNDozNCAgYnZhc3NjaGUKKworICAgKiBhcHBzL2FnZW50eHRyYXAuYzoKKworICAgUmVwbGFjZWQgZXhwbGljaXQgZGVjbGFyYXRpb25zIG9mIG9wdGluZCwgb3B0b3B0IGFuZCBvcHRhcmcgYnkKKyAgICNpbmNsdWRlIDx1bmlzdGQuaD4gYmVjYXVzZSBleHBsaWNpdGx5IGRlY2xhcmluZyB0aGVzZSB2YXJpYWJsZXMKKyAgIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggQ3lnd2luLgorCisyMDEwLTAxLTI1IDE0OjI1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBORVdTOiBDeWd3aW46IElQdjYgaXMgb25seSBzdXBwb3J0ZWQgdW5kZXIgQ3lnd2luIDEuNyBvciBsYXRlci4KKyAgIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gb2YgSVB2NiBzdXBwb3J0IGluIE5ldC1TTk1QIHVuZGVyIEN5Z3dpbgorICAgaW52b2x2ZWQgYSBzdHJhbmdlIG1peHR1cmUgb2YgQ3lnd2luIGFuZCBXaW5zb2NrMiBzb2NrZXQgY2FsbHMsCisgICB3aGljaCB3YXMgdG9vIGhhcmQgdG8gbWFpbnRhaW4uCisgICBORVdTOiBDeWd3aW46IGJ1aWxkcyBhZ2FpbiB3aXRoIElQdjYgc3VwcG9ydCBlbmFibGVkCisgICAoLS1lbmFibGUtaXB2NikuIEF0IGxlYXN0IE5ldC1TTk1QIDUuNSBkb2Vzbid0IGJ1aWxkIHVuZGVyIEN5Z3dpbgorICAgd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZC4gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgcmVwb3J0ZWQKKyAgICJjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUgLi4uIHJlc3VsdDogInVua25vd24sIG5vIiAuLi4gZXJyb3I6CisgICBJUHY2IHRyYW5zcG9ydHMgbm90IGF2YWlsYWJsZSBpZiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQiLgorCisyMDEwLTAxLTI1IDE0OjEzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvaW5ldF9udG9wLmMsIHNubXBsaWIvaW5ldF9wdG9uLmM6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2luY2x1ZGUgPHN0cmluZy5oPi4KKworMjAxMC0wMS0yNSAxNDoxMCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXM6CisKKyAgIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciB0aGUgSVB2NiBzdGFjayBpbmNsdWRlZCBpbiBDeWd3aW4KKyAgIHZlcnNpb24gMS43LgorICAgSVB2NiBzdXBwb3J0IGlzIG9uZSBvZiB0aGUgbmV3IGZlYXR1cmVzIG9mIEN5Z3dpbiAxLjcuIEZvciBtb3JlCisgICBpbmZvcm1hdGlvbiwKKyAgIHNlZSBhbHNvIGh0dHA6Ly9jeWd3aW4uY29tL2N5Z3dpbi11Zy1uZXQvb3YtbmV3MS43Lmh0bWwuCisKKzIwMTAtMDEtMjUgMTI6NDAgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ0hBTkdFUzogQ3lnd2luOiB0aGUgbWVzc2FnZSAiY29uZmlndXJlOiBXQVJOSU5HOiB3aW5zb2NrLmg6CisgICBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiIGRvZXMgbm8gbG9uZ2VyIGFwcGVhciB3aGVuCisgICBydW5uaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0LgorICAgRm9sbG93LXVwIGZvciByMTgwNTA6IHJlLWVuYWJsZWQgbGliaXBobHBhcGkgYW5kIGlwaGxwYXBpLmggdGVzdHMKKyAgIGZvciBub24tTWluR1cgcGxhdGZvcm1zIHNpbmNlIHRoZSBDeWd3aW4gYnVpbGQgbmVlZHMgdGhlc2UuCisKKzIwMTAtMDEtMjUgMDc6MjggIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgc25tcGxpYi9pbmV0X250b3AuYywgIAorICAgICAgIHNubXBsaWIvaW5ldF9wdG9uLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgYXV0b2NvbmYgdG8gZGVjaWRlIGlmIGluZXRfbnRvcC5jIGFuZAorICAgaW5ldF9wdG9uLmMgYXJlIHRvIGJlIGNvbXBpbGVkLgorCisyMDEwLTAxLTI1IDA3OjA5ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzOgorCisgICBDSEFOR0VTOiBNaW5HVzogc3RydWN0IHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkIGNvbmZpZ3VyZSB0ZXN0CisgICBkb2VzIG5vdyB3b3JrLgorCisyMDEwLTAxLTI1IDA1OjE0ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBUTFNUTSBjb3VudGVyIHN0YXRzCisKKzIwMTAtMDEtMjUgMDU6MTMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIGFkZCBpbiBUU00gbmVlZGVkIGNvdW50ZXIgZGVmaW5pdGlvbnMKKworMjAxMC0wMS0yNSAwNToxMiAgaGFyZGFrZXIKKworICAgKiBtaWJzL1NOTVAtVFNNLU1JQi50eHQsIG1pYnMvcmZjbGlzdDoKKworICAgYWRkZWQgdGhlIFNOTVAtVFNNLU1JQgorCisyMDEwLTAxLTI0IDE0OjQzICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaDoKKworICAgTkVXUzogc25tcGQ6IE1hZGUgc3VidHJlZV9jb250ZXh0X2NhY2hlOjpjb250ZXh0X25hbWUgYSBjb25zdAorICAgY2hhciouCisKKzIwMTAtMDEtMjQgMTQ6MjcgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFByZXZlbnQgZ2NjIHBlZC13YXJuaW5nIGZvcgorICAgTkVUU05NUF9SRU1PVkVfQ09OU1QKKworMjAxMC0wMS0yNCAxMzoyNyAgbWFnZnIKKworICAgKiBhcHBzL3NubXB1c20uYzoKKworICAgQ0hBTkdFUzogc25tcHVzbTogUHJlZmVyIHRvIHVzZSBhIHZhcmlhYmxlIG9mIHRoZSByaWdodCB0eXBlIG92ZXIKKyAgIGFuIHVnbHkgY2FzdC4gTGVzc2VuIHRoZSBzY29wZSBvZiB0aGUgdmFyaWFibGUgYXMgd2VsbC4KKworMjAxMC0wMS0yNCAxMjo1OSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBJbnRyb2R1Y2VkIHRoZSB2YXJpYWJsZSAnd2l0aF9zb2NrbGliJyBpbiB0aGUKKyAgIGNvbmZpZ3VyZSBzY3JpcHQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICJ3aW5zb2NrMiIgZm9yIE1pbkdXCisgICBhbmQgdG8gImRlZmF1bHQiIGZvciBhbGwgb3RoZXIgc3lzdGVtcy4gV2luc29jazIgdGVzdHMgYXJlIG9ubHkKKyAgIHJ1biBpZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAid2luc29jazIiIChNaW5HVykuCisKKzIwMTAtMDEtMjQgMTI6NTMgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBSZW1vdmUgc3VwZXJmbHVvdXMgZGVidWcgbG9ncy4KKworMjAxMC0wMS0yNCAxMjo0NSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgV2luZG93cywgY29tcGlsZXIgd2FybmluZyBmaXhlczogZml4ZWQgd2FybmluZ3MgYWJvdXQgY2hhciAqIC8KKyAgIHVuc2lnbmVkIGNoYXIgKgorICAgbWlzbWF0Y2hlcy4KKworMjAxMC0wMS0yNCAxMjo0NCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgV2luZG93cywgY29tcGlsZXIgd2FybmluZyBmaXg6IG1ha2UgaW5ldF9udG9wKCkgYW5kIGluZXRfcHRvbigpCisgICBkZWNsYXJhdGlvbnMKKyAgIGF2YWlsYWJsZSB0byB0aGUgY29tcGlsZXIuCisKKzIwMTAtMDEtMjQgMTI6NDQgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgV2luZG93cywgY29tcGlsZXIgd2FybmluZyBmaXg6IG1hZGUgc3VyZSB0aGF0IDx3czJ0Y3BpcC5oPiB3aWxsCisgICBiZSBpbmNsdWRlZAorICAgZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4gc3VjaCB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IGNvbXBsYWluCisgICBhYm91dCBzdHJ1Y3QKKyAgIHNvY2thZGRyX2luNiBiZWluZyB1c2VkIGJlZm9yZSBiZWluZyBkZWZpbmVkLgorCisyMDEwLTAxLTI0IDExOjQyICBidmFzc2NoZQorCisgICAqIG1hbjoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTAxLTI0IDExOjQxICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF9pbmRleC5jLCBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJfbW9kdWxlcy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5jLCBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgYWdlbnQvbWliZ3JvdXAvbWliaW5jbC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wYnVsa2dldC5jLCAgIAorICAgICAgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgYXBwcy9zbm1wZGYuYywgICAKKyAgICAgIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsIGFwcHMvc25tcHNldC5jLCAgIAorICAgICAgYXBwcy9zbm1wc3RhdHVzLmMsIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRlc3QuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdXNtLmMsIGFwcHMvc25tcHZhY20uYywgICAKKyAgICAgIGFwcHMvc25tcHdhbGsuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaCwgc25tcGxpYi9sY2RfdGltZS5jLCAgIAorICAgICAgc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcC10Yy5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2F1dGguYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgICAKKyAgICAgIHNubXBsaWIvc25tcGtzbS5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgc25tcGxpYi92YWNtLmM6CisKKyAgIENsZWFudXAgKFdpbmRvd3MpOiByZW1vdmVkIHN1cGVyZmx1b3VzICNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyAgIGRpcmVjdGl2ZXMuIFRoaXMgaGVhZGVyIGZpbGUKKyAgIGhhcyBvbmx5IHRvIGJlIGluY2x1ZGVkIGZyb20gc25tcGxpYi9zeXN0ZW0uYyBiZWNhdXNlIG9mIHRoZQorICAgX2Z0aW1lKCkgY2FsbCBpbiB0aGF0IGZpbGUuCisKKzIwMTAtMDEtMjQgMTA6NDMgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmM6CisKKyAgIFRoZSBtYWNybyAnQygpJyBub3cgY2FzdHMgaXRzIHJlc3VsdCBmcm9tIHVuc2lnbmVkIGxvbmcgdG8KKyAgIHVuc2lnbmVkIGludC4KKyAgIFRoaXMgY2hhbmdlIGZpeGVzIGEgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgZm9ybWF0IHNwZWNpZmljYXRpb24KKyAgIG1pc21hdGNoZXMKKyAgIGFuZCBmaXhlcyBhIGJ1ZyAoaW5jb3JyZWN0IHNubXBuZXRzdGF0IG91dHB1dCkgb24gYmlnIGVuZGlhbgorICAgc3lzdGVtcy4KKworMjAxMC0wMS0yNCAxMDozMyAgYnZhc3NjaGUKKworICAgKiBtYW4vY29uZmlnX2FwaS4zOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzk0NjogcmVtb3ZlZCBnZW5lcmF0ZWQgbWFuIHBhZ2VzIGZyb20KKyAgIHJlcG9zaXRvcnkuCisKKzIwMTAtMDEtMjQgMTA6MzEgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnNlcnZpY2UuaCwgc25tcGxpYi93aW5zZXJ2aWNlLmM6CisKKyAgIE1vdmVkIHR3byBkZWNsYXJhdGlvbnMgb2Ygc3RhdGljIGZ1bmN0aW9ucyBmcm9tIC5oIHRvIC5jLgorCisyMDEwLTAxLTI0IDEwOjIxICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYzoKKworICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3RzLgorCisyMDEwLTAxLTI0IDEwOjE5ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYnVpbGRzIGFnYWluIHdoZW4gSEFWRV9HRVRBRERSSU5GTyBpcyBub3QKKyAgIGRlZmluZWQuCisKKzIwMTAtMDEtMjQgMTA6MDMgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvaW5ldF9udG9wLmMsICAgCisgICAgICBzbm1wbGliL2luZXRfbnRvcC5oLCBzbm1wbGliL2luZXRfcHRvbi5jLCBzbm1wbGliL2luZXRfcHRvbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ2hhbmdlczoKKyAgIC0gQWRkZWQgY29uZmlndXJlIHRlc3RzIGZvciBpbmV0X250b3AoKSBhbmQgaW5ldF9wdG9uKCkuCisgICAtIEFkZGVkIGhlYWRlciBmaWxlcyBzbm1wbGliL2luZXRfbnRvcC5oIGFuZCBzbm1wbGliL2luZXRfcHRvbi5oLgorICAgLSBSZXBsYWNlZCAiZXh0ZXJuIGluZXRfbnRvcCguLi4pOyIgYW5kICJleHRlcm4gaW5ldF9wdG9uKC4uLik7IgorICAgYnkgI2luY2x1ZGUgImluZXRfbnRvcC9wdG9uLmgiLgorICAgLSBDb252ZXJ0ZWQgc25tcGxpYi9pbmV0X250b3AuYyBhbmQgc25tcGxpYi9pbmV0X3B0b24uYyBmcm9tIEsmUgorICAgQyB0byBBTlNJIEMuCisgICAtIFJlcGxhY2VkIHRoZSBpbmV0X2F0b24oKSBjYWxscyB0aGF0IHdlcmUgaW50cm9kdWNlZCBpbiByMTgwMzMKKyAgIGluIHNubXBsaWIvc25tcFVEUERvbWFpbi5jIGJ5IGluZXRfcHRvbigpIGNhbGxzIHN1Y2ggdGhhdCBpdCBpcworICAgYWdhaW4gcG9zc2libGUgdG8gYnVpbGQgTmV0LVNOTVAgb24gV2luZG93cy4KKworMjAxMC0wMS0yNCAwNjowOCAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUmVtb3ZlIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgdGhhdCBkb24ndAorICAgZXhpc3Qgb3IgYXJlIGRlY2xhcmVkIGVsc2V3aGVyZS4KKworMjAxMC0wMS0yNCAwNTo0OCAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IFJlbW92ZWQgdGhlIHVudXNlZCB2YXJpYWJsZXMgd2FybV9zdGFydF9vaWQsCisgICBsaW5rX2Rvd25fb2lkLCBsaW5rX3VwX29pZCwgYXV0aF9mYWlsX29pZCBhbmQgZWdwX3h4eF9vaWQuCisKKzIwMTAtMDEtMjMgMjI6MDYgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDA3MGNvbTJzZWMsIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXg6CisKKyAgIEJldHRlciBzZXQgb2YgU0tJUElGL1NLSVBJRk5PVFMKKworMjAxMC0wMS0yMyAyMDozMSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNiwgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXg6CisKKyAgIEJlIGNvcnJlY3QgaW4gd2hhdCBpdCBpcyB0aGF0IGlzIHRlc3RlZCBpbiB0aGUgaGVhZGVyLgorCisyMDEwLTAxLTIzIDIwOjI3ICBtYWdmcgorCisgICAqICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDaGFuZ2VkIHRoZSBjb20yc2VjIGRpcmVjdGl2ZXMgdG8gZmFpbCBpZiB0aGVyZQorICAgYXJlIHRvbyBmZXcgYXJndW1lbnRzLiBBZGRpdGlvbmFsbHkgY2hhbmdlZCB0aGUgc3RvcmFnZSBzdHJ1Y3R1cmUKKyAgIHRvIG5vdCBhbGxvY2F0ZSBtb3JlIHNwYWNlIHRoYW4gbmVjZXNzYXJ5LgorCisyMDEwLTAxLTIzIDIwOjIyICBtYWdmcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwNzBjb20yc2VjLCB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4OgorCisgICBuZXcgdGVzdHMgY2hlY2tpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG9mIHRoZSBjb20yc2VjKiBkaXJlY3RpdmVzCisKKzIwMTAtMDEtMjMgMTk6MTcgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDI1OiBidWlsZHMgYWdhaW4gd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4KKworMjAxMC0wMS0yMyAxNzo1MSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IE9TIGhlYWRlciBkZXRlY3Rpb24gY2hlY2sgaXMgbm93IHJ1biBiZWZvcmUKKyAgIElQdjYgc3RhY2sgZGV0ZWN0aW9uLgorICAgQ0hBTkdFUzogU29sYXJpczogc29ja2FkZHJfaW42LnNpbjZfYWRkciBjb25maWd1cmUgdGVzdCBkb2VzIG5vdworICAgd29yay4KKworMjAxMC0wMS0yMyAxNzo0MiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOgorCisgICBGaXhlZCBhIFNvbGFyaXMtc3BlY2lmaWMgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wMS0yMyAxNzowMCAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmg6CisKKyAgIE1pbkdXOiBhZGRlZCBjb25maWd1cmUgdGVzdCBmb3IgPHN5cy90aW1lYi5oPiBhbmQgYWxzbyBmb3Igc3RydWN0CisgICB0aW1lem9uZS4KKworMjAxMC0wMS0yMyAxNjozMiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgTWluR1c6IG1hZGUgc3VyZSB0aGF0IHRoZSBJUHY2LXJlbGF0ZWQgZGF0YXR5cGVzIGFyZSBhdmFpbGFibGUKKyAgIGJlZm9yZSBiZWluZyB1c2VkLgorCisyMDEwLTAxLTIzIDE2OjMwICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEFkZGVkICN1bmRlZiBIQVZFX1dJTkRPV1NfSC4KKworMjAxMC0wMS0yMyAxNjoyOCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIE1pbkdXOiBtYWRlIGdldHRpbWVvZmRheSgpIGRlY2xhcmF0aW9uIGF2YWlsYWJsZSBmb3IgdGhlCisgICBjb21waWxlci4KKworMjAxMC0wMS0yMyAxNjoyNyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE1pbkdXOiBtYWRlIGdldHRpbWVvZmRheSgpIGRlY2xhcmF0aW9uIGF2YWlsYWJsZSBmb3IgdGhlCisgICBjb21waWxlci4KKworMjAxMC0wMS0yMyAxNjoyNiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2luZXRfcHRvbi5jOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QgY29tcGxhaW4gYWJvdXQgYSBtaXNzaW5nCisgICBwcm90b3R5cGUgZm9yIGlzZGlnaXQoKS4KKworMjAxMC0wMS0yMyAxNjoyNCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBNaW5HVzogaXBobHBhcGkuaCBjb25maWd1cmUgdGVzdCBkb2VzIG5vdyB3b3JrLgorCisyMDEwLTAxLTIzIDE1OjEwICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlczoKKworICAgUmVuYW1lZCB0aGUgV2luc29jazIgSVB2NiBzdGFjayBmcm9tICdtaW5ndycgaW50byAnd2luc29jazInLgorCisyMDEwLTAxLTIzIDE1OjA3ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsIGFnZW50L3NubXBkLmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmgsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgCisgICAgICAgc25tcGxpYi9pbmV0X250b3AuYywgc25tcGxpYi9pbmV0X3B0b24uYywgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEltcHJvdmVkIHBvcnRhYmlsaXR5IGJldHdlZW4gdGhlIHN1cHBvcnRlZCBXaW4zMiBjb21waWxhdGlvbgorICAgZW52aXJvbm1lbnRzIGFzIGZvbGxvd3M6CisgICAtIE1hZGUgc3VyZSB0aGF0IHRoZSA8d2luc29jazIuaD4gYW5kIDx3czJ0Y3BpcC5oPiBoZWFkZXIgZmlsZXMKKyAgIGFyZSBvbmx5IGluY2x1ZGVkIGZyb20gPG5ldC1zbm1wL3R5cGVzLmg+LgorICAgLSBBZGRlZCBjb25maWd1cmUgY2hlY2sgZm9yIDxpcGhscGFwaS5oPi4KKyAgIC0gUmVwbGFjZWQgc2V2ZXJhbCBXSU4zMiAvIGN5Z3dpbiB0ZXN0cyBieSBhIEhBVkVfSVBITFBBUElfSAorICAgdGVzdC4KKyAgIC0gRG9jdW1lbnRlZCB0aGF0IHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGlzIG9ubHkgdXNlZAorICAgZm9yIHRoZSBNU1ZDIGJ1aWxkLgorCisyMDEwLTAxLTIyIDE2OjQ2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdG9vbHMuYzoKKworICAgRm9sbG93LXVwIGZvciByMTc5MTA6IGJ1aWxkcyBhZ2FpbiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCisgICA2LgorCisyMDEwLTAxLTIyIDE2OjQxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCB3aW4zMi9NZ210QXBpLXdpbkV4dERMTC5oOgorCisgICBGb2xsb3cgdXAgZm9yIHIxODAxNjogYnVpbGRzIGFnYWluIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uCisKKzIwMTAtMDEtMjIgMTQ6MTMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgRm9sbG93LXVwIGZvciByMTgwMTY6IG1hZGUgTWluR1cgbGliaXBobHBhcGkgY2hlY2sgbW9yZSByb2J1c3QuCisKKzIwMTAtMDEtMjIgMTM6MzIgIGJ2YXNzY2hlCisKKyAgICogIFJFQURNRS53aW4zMiwgYWNsb2NhbC5tNCwgYWdlbnQvYWdlbnRfaW5kZXguYywgICAKKyAgICAgIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYl9tb2R1bGVzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCBhZ2VudC9taWJncm91cC9ob3N0X3Jlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuaCwgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGFnZW50L3NubXBkLmMsIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCAgIAorICAgICAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5jLCBhcHBzL3NubXBzZXQuYywgYXBwcy9zbm1wc3RhdHVzLmMsICAgCisgICAgICBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9hdXRoLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX3NxbC5jLCBhcHBzL3NubXB1c20uYywgYXBwcy9zbm1wdmFjbS5jLCAgIAorICAgICAgYXBwcy9zbm1wd2Fsay5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIHNubXBsaWIvYXNuMS5jLCBzbm1wbGliL2NhbGxiYWNrLmMsIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCAgIAorICAgICAgc25tcGxpYi9pbnQ2NC5jLCBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsICAgCisgICAgICBzbm1wbGliL2xjZF90aW1lLmMsIHNubXBsaWIvbWQ1LmMsIHNubXBsaWIvbWliLmMsICAgCisgICAgICBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zY2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXV0aC5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCAKKyAgICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgICAKKyAgICAgIHNubXBsaWIvc25tcGtzbS5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgc25tcGxpYi92YWNtLmMsICAgCisgICAgICBzbm1wbGliL3dpbnBpcGUuYywgd2luMzIvU25tcC13aW5FeHRETEwuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IE1pbkdXOiB3aW5FeHRETEwgY29tcGlsZXMgbm93IHVuZGVyIE1pbkdXLgorICAgQ0hBTkdFUzogTWluR1c6IGJ1aWxkaW5nIE5ldC1TTk1QIHdvcmtzIGFnYWluLgorICAgCisgICBEZXRhaWxlZCBvdmVydmlldzoKKyAgICogQ2hhbmdlcyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdDoKKworICAgLSBzb2NrZXQoKSBsaWJyYXJ5IGNoZWNrIHBhc3NlcyBhZ2FpbiBvbiBNaW5HVy4KKyAgIC0gQWRkZWQgbGlicmFyeSBjaGVja3MgZm9yIGxpYndzMl8zMiwgbGlicmVnZXggYW5kIGxpYnNubXBhcGkuCisgICAtIEFkZGVkIGNoZWNrIGZvciB0aGUgd2luc29jazIuaCBhbmQgd3MydGNwaXAuaCBoZWFkZXIgZmlsZXMuCisgICAtIEFkZGVkIGNoZWNrIGZvciB0aGUgY2hvd24oKSBhbmQgbG9jYWx0aW1lX3IoKSBmdW5jdGlvbnMuCisgICAtIHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkIGNoZWNrIGRvZXMgbm93IHdvcmsgb24gTWluR1cuCisgICAtIEFkZGVkIElQdjYgc3RhY2sgdHlwZSBjYWxsZWQgIm1pbmd3Ii4KKyAgICogU291cmNlIGNvZGUgY2hhbmdlczoKKworICAgLSBJbmNsdWRlIDx3aW5zb2NrMi5oPiBmcm9tIDxuZXQtc25tcC90eXBlcy5oPiBpbnN0ZWFkIG9mCisgICA8d2luc29jay5oPgorICAgdW5kZXIgTWluR1cgc3VjaCB0aGF0IElQdjYgc3VwcG9ydCBpcyBhdmFpbGFibGUuCisgICAtIE1vdmVkICNpbmNsdWRlIDx3aW5zb2NrLmg+IGZyb20gLmMgZmlsZXMgdG8gPG5ldC1zbm1wL3R5cGVzLmg+LgorICAgLSBBZGRlZCBhIGNvcHkgb2YgdGhlIE1pbkdXIGhlYWRlciBmaWxlIDxzbm1wLmg+ICh3aGljaCBpcyBub3QKKyAgIGNvcHlyaWdodGVkKQorICAgYXMgd2luMzIvU25tcC13aW5FeHRETEwuaC4KKyAgIC0gYWdlbnQ6IG9ubHkgY2FsbCBjaG93bigpIHdoZW4gYXZhaWxhYmxlIChIQVZFX0NIT1dOKS4KKyAgICogRG9jdW1lbnRhdGlvbiBjaGFuZ2VzOiB1cGRhdGVkIFJFQURNRS53aW4zMi4KKworCisyMDEwLTAxLTIyIDA4OjM0ICBtYWdmcgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IGNhc3QgZnJvbSBjaGFyKiB0byBjaGFyKgorCisyMDEwLTAxLTIyIDAwOjM5ICBoYXJkYWtlcgorCisgICAqIENPUFlJTkc6CisKKyAgIENvcHlyaWdodCBmaWxlIHVwZGF0ZSBmb3IgU1BBUlRBLCBJbmMuCisKKzIwMTAtMDEtMjIgMDA6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGFkZCBwcm9wZXIgcHJlZml4ZXMgaW4gVFNNIGZvciBTU0gsIERUTFMsIGV0YywgYmFzZWQgb24gdGhlCisgICBkb21haW4KKworMjAxMC0wMS0yMiAwMDoyMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICBhZGRlZCA1LjUgYnJhbmNoCisKKzIwMTAtMDEtMjIgMDA6MjAgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIG1pbm9yIGVjaG8gb3V0cHV0IGNoYW5nZQorCisyMDEwLTAxLTIxIDIwOjUxICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIG1vdmUgY29tbWVudCBuZXh0IHRvIGNvZGUgaXQgaXMgdGFsa2luZyBhYm91dDsgTm8gY29kZSBjaGFuZ2UKKworMjAxMC0wMS0yMSAxNDo1NSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMjkyNjM3NDogZnJvbSBFZCBTd2llcms6IGZpeGVkIHJlYWRpbmcgb2YKKyAgIGlwQWRkcmVzc1RhYmxlIGZyb20gL3Byb2MvbmV0L2lmX2luZXQ2IG9uIExpbnV4CisgICAKKyAgIFRoZSBrZXJuZWwgbWlnaHQgcHJvdmlkZSBsb25nZXIgZmllbGRzLCBlc3BlY2lhbGx5IG9uIDY0LWJpdAorICAgc3lzdGVtcy4KKworMjAxMC0wMS0yMCAxMjo0MiAgYnZhc3NjaGUKKworICAgKiBQT1JUSU5HLCBsb2NhbC9zbm1wY2hlY2suZGVmOgorCisgICBGaXhlZCB0eXBvOiByZXBsYWNlZCAnbmVjaXNzYXJ5JyBieSAnbmVjZXNzYXJ5Jy4KKworMjAxMC0wMS0yMCAwODo1MyAganNhZnJhbmVrCisKKyAgICogbWFuL3NubXBuZXRzdGF0LjEuZGVmOgorCisgICBGaXggbWlub3IgdHlwbyBpbiBtYW4gcGFnZSwgaXQncyBzbm1wbmV0c3RhdCAtQ3AsIG5vdCAtQ1AuCisKKzIwMTAtMDEtMTQgMTI6MzQgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogZml4ZWQgbWVtb3J5IGxlYWsgaW4gUk1PTi1NSUIgYW5kIEVUSEVSTElLRS1NSUIgd2hlbgorICAgdGhlcmUgYXJlIG11bHRpcGxlIGFsaWFzZXMgb2YgYW4gbmV0d29yayBpbnRlcmZhY2UKKyAgIFJhdGlvbmFsZTogdGhlIGFsaWFzZWQgaW50ZXJmYWNlcyBoYXZlIHRoZSBzYW1lIGlmSW5kZXggLT4KKyAgIENPTlRBSU5FUl9JTlNFUlQgZmFpbHMsIGJ1dCB0aGUgcmVqZWN0ZWQgZW50cnkgd2FzIG5vdCBmcmVlZC4KKworMjAxMC0wMS0xMyAxMToyMSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4IG1lbW9yeSBsZWFrIGluIGlwQWRkcmVzc1ByZWZpeFRhYmxlCisgICAtIG5ldF9zbm1wX3NlYXJjaF91cGRhdGVfcHJlZml4X2luZm8gcmV0dXJucyBkaWZmZXJlbnQgY29kZSwgd2hlbgorICAgdGhlIGVudHJ5IHdhcyBub3QgaW5zZXJ0ZWQgdG8gbGlzdCBhbmQgY2FuIGJlIGZyZWVkLgorCisyMDEwLTAxLTEyIDAwOjUyICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ0hBTkdFUzogYnVpbGQ6IHJ1biBycG0gY29uZmlndXJlIGNoZWNrcyBmb3IgaHJfc3dpbnN0IHJld3JpdGUKKyAgIChycG0KKyAgIHZlcnNpb24gb25seSkKKworMjAxMC0wMS0xMSAyMzo1OCAgdGFuZGVycworCisgICAqIGFwcHMvTWFrZWZpbGUuaW46CisKKyAgIGFkZCBQRVJMTERPUFRTX0ZPUl9BUFBTIHRvIGFnZW50eHRyYXAgbGluayBsaW5lIChmaXhlcworICAgImxpYnBlcmwuc28gbm90CisgICBmb3VuZCIgZXJyb3JzKQorCisyMDEwLTAxLTExIDAwOjExICB0YW5kZXJzCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDExNGFnZW50eGFnZW50eHRyYXA6CisKKyAgIGdldCByaWQgb2YgdXNpbmcgZGVwcmVjYXRlZCBzeW50YXggZm9yIHRyYXAvaW5mb3JtIHNpbmtzCisKKzIwMTAtMDEtMDggMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogb2Jzb2xldGVkIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRy4KKyAgIEZyb20gbm93IG9uIHVzaW5nIFNJR0FMUk0gdG8gdHJpZ2dlciBOZXQtU05NUCBhbGFybSBoYW5kbGVycyBpcworICAgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKyAgIAorICAgTW90aXZhdGlvbjogYXMga25vd24gbGlibmV0c25tcCBzdXBwb3J0cyB0aW1lLWJhc2VkIGFsYXJtcyB2aWEKKyAgIHRoZSBmdW5jdGlvbnMKKyAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoKSwgcnVuX2FsYXJtcygpIGFuZCBvdGhlciBmdW5jdGlvbnMuIFR3bworICAgZGlmZmVyZW50IHdheXMgdG8KKyAgIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIHJ1bl9hbGFybXMoKSBhcmUgc3VwcG9ydGVkIGluc2lkZQorICAgbGlibmV0c25tcDoKKyAgIDEuIEJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIHRpbWVvdXQgYXJndW1lbnQgb2Ygc2VsZWN0KCkgaXMgc21hbGwKKyAgIGVub3VnaCBzdWNoCisgICB0aGF0IHNlbGVjdCgpIHJldHVybnMgYmVmb3JlIHRoZSBuZXh0IGFsYXJtIG11c3QgYmUgaGFuZGxlZCAod2hlbgorICAgdGhlCisgICB2YXJpYWJsZSBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgaXMgc2V0IHRvIG9uZSwgd2hpY2gKKyAgIGlzIHRoZQorICAgZGVmYXVsdCkuCisgICAyLiBCeSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBrZXJuZWwgZmlyZXMgU0lHQUxSTSBhdCB0aGUgdGltZSB3aGVuCisgICBydW5fYWxhcm1zKCkKKyAgIHNob3VsZCBiZSBjYWxsZWQgKHdoZW4gdGhlIHZhcmlhYmxlCisgICBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgaXMgc2V0CisgICB0byB6ZXJvLCB3aGljaCBoYXMgdG8gYmUgY29uZmlndXJlZCBleHBsaWNpdGx5KS4KKyAgIAorICAgVGhlIGZvbGxvd2luZyBpc3N1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kIGFwcHJvYWNoOgorICAgMS4gQWxhcm0gZnVuY3Rpb25zIGFyZSB1c2VkIGluc2lkZSBOZXQtU05NUCB0byBlLmcuIHJlZnJlc2gKKyAgIGNhY2hlZCB0YWJsZQorICAgY29udGVudHMuIEFzIGZhciBhcyBJIGNhbiBzZWUgdGhlcmUgaXMgbm90aGluZyBpbiB0aGUgTmV0LVNOTVAKKyAgIHNvdXJjZSBjb2RlCisgICB0aGF0IHByZXZlbnRzIHRoZSBmb2xsb3dpbmcgZnJvbSBoYXBwZW5pbmc6IGEgdGFibGUgcmVmcmVzaAorICAgdHJpZ2dlcmVkIHZpYQorICAgU0lHQUxSTSB3aGlsZSBhIHJvdyBpcyBiZWluZyByZW1vdmVkIGZyb20gYSBjYWNoZWQgdGFibGUuIFRoaXMKKyAgIGNhbiByZXN1bHQKKyAgIGluIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBldmVuIGEgY3Jhc2guCisgICAyLiBQT1NJWCByZXN0cmljdHMgc2lnbmFsIGhhbmRsZXJzIHRvIGNhbGxpbmcgZnVuY3Rpb25zIHRoYXQgYXJlCisgICBlaXRoZXIgcmVlbnRyYW50CisgICBvciBub24taW50ZXJydXB0aWJsZQorICAgKGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNCkuCisgICBTdGFuZGFyZCBJL08gZnVuY3Rpb25zIGxpa2UgcHJpbnRmKCkgYW5kIGZwcmludGYoKSBhcmUgbmVpdGhlcgorICAgcmVlbnRyYW50IG5vcgorICAgbm9uLWludGVycnVwdGlibGUuIHJ1bl9hbGFybXMoKSBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSBzaWduYWwKKyAgIGhhbmRsZXIsIHdoaWNoCisgICBtZWFucyB0aGF0IHRoaXMgcmVzdHJpY3Rpb24gYXBwbGllcyB0byB0aGUgZnVuY3Rpb24gcnVuX2FsYXJtcygpCisgICBpdHNlbGYgYW5kCisgICBhbGwgZnVuY3Rpb25zIGNhbGxlZCBieSBpdCAod2hpY2ggaW5jbHVkZXMgdGhlIGFsYXJtIGNhbGxiYWNrCisgICBmdW5jdGlvbnMpLgorICAgT3I6IGUuZy4gc25tcF9sb2coKSBhbmQgaXRzIGNhbGxlcnMgbXVzdCBub3QgYmUgY2FsbGVkIGZyb20KKyAgIGluc2lkZSBydW5fYWxhcm1zKCkKKyAgIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGZyb20gaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIuIFRoaXMKKyAgIGlzIGEgc2V2ZXJlCisgICByZXN0cmljdGlvbiwgYW5kIG9uZSB0aGF0IGlzIGhhcmQgdG8gd29yayB3aXRoLgorICAgMy4gTm90IGFsbCBzb2Z0d2FyZSBkZXZlbG9wZXJzIGtub3cgaG93IHRvIG1ha2Ugc3VyZSB0aGF0IHNpZ25hbAorICAgZGVsaXZlcnkgd29ya3MKKyAgIGNvcnJlY3RseSBpbiBhIG11bHRpdGhyZWFkZWQgY29udGV4dC4gUE9TSVggZG9lcyBub3QgZ3VhcmFudGVlIHRvCisgICB3aGljaCB0aHJlYWQKKyAgIGEgc2lnbmFsIGxpa2UgU0lHQUxSTSB3aWxsIGJlIGRlbGl2ZXJlZCwgdW5sZXNzIHRoYXQgc2lnbmFsIGhhcworICAgYmVlbiBibG9ja2VkCisgICBiZWZvcmUgdGhyZWFkIGNyZWF0aW9uIGFuZCBpcyB1bmJsb2NrZWQgYWZ0ZXIgdGhyZWFkIGNyZWF0aW9uCisgICAoc2VlIGFsc28KKyAgIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvcHRocmVhZF9zaWdtYXNrLmh0bWwpLgorICAgVGhpcyBpcyByZWxldmFudCBmb3IgdGhlIE5ldC1TTk1QIHByb2plY3Qgbm90IG9ubHkgYmVjYXVzZSBhCisgICB3b3JrZXIgdGhyZWFkIGlzCisgICBjcmVhdGVkIGluc2lkZQorICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jIGJ1dCBhbHNvCisgICBiZWNhdXNlIGxpYm5ldHNubXAgaXMgb2Z0ZW4gdXNlZCBpbnNpZGUgbXVsdGl0aHJlYWRlZCBzb2Z0d2FyZS4KKyAgIEN1cnJlbnRseSBubworICAgYXR0ZW1wdCBpcyBtYWRlIHRvIG1ha2Ugc3VyZSB0aGF0IFNJR0FMUk0gaXMgcHJvY2Vzc2VkIGJ5IHRoZQorICAgTmV0LVNOTVAgZXZlbnQKKyAgIHByb2Nlc3NpbmcgbG9vcCB0aHJlYWQuIElmIFNJR0FMUk0gaXMgcHJvY2Vzc2VkIGJ5IGFub3RoZXIKKyAgIHRocmVhZCwgdGhpcyB3aWxsCisgICByZXN1bHQgaW4gb25lIG9yIG1vcmUgZGF0YSByYWNlcy4KKyAgIAorICAgQmVjYXVzZSBhbGwgdGhlIGRpZmZpY3VsdGllcyBhc3NvY2lhdGVkIHdpdGggcHJvY2Vzc2luZyBhbGFybXMKKyAgIGZyb20gaW5zaWRlIGEKKyAgIHNpZ25hbCBoYW5kbGVyIGZ1bmN0aW9uLCBhbmQgYmVjYXVzZSBmaXhpbmcgdGhlc2Ugd291bGQgcmVxdWlyZQorICAgbW9yZSBlZmZvcnQgdGhhbgorICAgaXQgaXMgd29ydGgsIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRyBoYXMgYmVlbgorICAgZGVwcmVjYXRlZCBhbmQgZnJvbSBub3cKKyAgIG9uIGFwcHJvYWNoICgxKSBpcyB0aGUgb25seSBzdXBwb3J0ZWQgYXBwcm9hY2ggdG8gdHJpZ2dlciBhbGFybQorICAgaGFuZGxlcnMuCisKKzIwMTAtMDEtMDcgMTk6NDIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYzoKKworICAgUGF0Y2ggZnJvbSBTdGVwaGVuIEhlbW1pbmdlciB0byBmaXggYSBtaW5vciBtZW1sZWFrIGluIGNwdQorICAgc3lzY3RybCBmZXRjaGluZworCisyMDEwLTAxLTA3IDE2OjIxICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBSZW1vdmVkIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCksIGFuZCBtYWRlIHN1cmUgdGhhdAorICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSAnXDAnLXRlcm1pbmF0ZXMgdGhlIG91dHB1dCBidWZmZXIKKyAgIGluIGFsbCBjYXNlcy4KKyAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cy4KKworMjAxMC0wMS0wNyAxNDo0MSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXB1c20uYzoKKworICAgUmVtb3ZlZCB0aHJlZSBzdXBlcmZsdW91cyBjYXN0cyBiZWNhdXNlIHRoZXNlIHRyaWdnZXJlZCBhCisgICBjb21waWxlciB3YXJuaW5nCisgICB3aGVuIGNvbXBpbGVkIHdpdGggTVNWQy4KKworMjAxMC0wMS0wNyAxMzoyOCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIFJldmVydGVkIHRoZSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIGNoYW5nZXMgZnJvbSByMTc5OTIKKyAgIGJlY2F1c2UgdGhlc2UKKyAgIGNhdXNlZCB0aGUgZm9sbG93aW5nIFZhbGdyaW5kIGNvbXBsYWludCBkdXJpbmcgc25tcGQgc3RhcnR1cDoKKyAgIAorICAgPT0yNTIwMT09IENvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQKKyAgIHZhbHVlKHMpCisgICA9PTI1MjAxPT0gYXQgMHg0MDQ3QjE0OiBuZXRzbm1wX3NlbmRfdHJhcHMgKGFnZW50X3RyYXAuYzo3OTgpCisgICA9PTI1MjAxPT0gYnkgMHg0MDQ4MTI4OiBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzCisgICAoYWdlbnRfdHJhcC5jOjg1MykKKyAgID09MjUyMDE9PSBieSAweDQwNDgxOUQ6IHNlbmRfdHJhcF92YXJzIChhZ2VudF90cmFwLmM6OTYzKQorICAgPT0yNTIwMT09IGJ5IDB4NDA0ODI1Qjogc2VuZF9lYXN5X3RyYXAgKGFnZW50X3RyYXAuYzoxMDExKQorICAgPT0yNTIwMT09IGJ5IDB4ODA0QjVEMjogbWFpbiAoc25tcGQuYzozOTQpCisKKzIwMTAtMDEtMDcgMTI6MzAgIGJ2YXNzY2hlCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBGaXhlZCBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uIG1pc21hdGNoLgorCisyMDEwLTAxLTA3IDEyOjE5ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oOgorCisgICBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGFzc2lnbmluZyBhIGNoYXIgKiBwb2ludGVyIHRvCisgICBzeXNPUlRhYmxlOjpPUl9kZXNjciBkb2VzIG9yIGRvZXMgbm90IHRyYW5zZmVyCisgICBvd25lcnNoaXAuIFNvIHdoZXRoZXIgT1JfZGVzY3IgaXMgZGVjbGFyZWQgYXMgY2hhciAqIG9yIGFzIGNvbnN0CisgICBjaGFyICosIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0CisgICBsZWFzdCBvbmUgc3RhdGVtZW50IG9uIHdoaWNoIHRoZSBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgYSBjaGFyCisgICAqICAvIGNvbnN0IGNoYXIgKiBtaXNtYXRjaC4gVGhlIG9ubHkgICAgc29sdXRpb24gaXMgdG8gY2FzdCBhd2F5CisgICAgICBjb25zdCB3aGVyZSBhcHByb3ByaWF0ZSB0byBtYWtlIHN1cmUgICAgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QKKyAgICAgIGNvbXBsYWluLCAgICBhcyBpbXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoLiAgMjAxMC0wMS0wNyAxMTo0NiAKKyAgICAgIGJ2YXNzY2hlCisKKworICAgKiBzbm1wbGliL3NubXB1c20uYzoKKworICAgdXNtX3NhdmVfdXNlcigpOiB3aGVuIHdyaXRpbmcgdXNlci0+bmFtZSBhbmQgdXNlci0+c2VjTmFtZSwgb25seQorICAgd3JpdGUgdGhlIEFTQ0lJIGRhdGEgYW5kIG5vdCB0aGUKKyAgIHRlcm1pbmF0aW5nICdcMCcuIFNpbmNlIGJvdGggaXRlbXMgYXJlIHJlYWQgYnkgY2FsbGluZworICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSwgd3JpdGluZworICAgdGhlIHRlcm1pbmF0aW5nICdcMCcgaXMgbm90IG5lY2Vzc2FyeSB0byBndWFyYW50ZWUgdGhhdCB0aGUgZGF0YQorICAgcmVhZCBiYWNrIGlzIHRlcm1pbmF0ZWQgcHJvcGVybHkuCisKKzIwMTAtMDEtMDcgMDk6MTMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDaGFuZ2VkIHRoZSBiZWhhdmlvciBvZiByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpOiB1bnRpbAorICAgbm93IHRoaXMKKyAgIGZ1bmN0aW9uIHRlcm1pbmF0ZWQgdGhlIG91dHB1dCBidWZmZXIgaW4gc29tZSBjYXNlcyB3aXRoICdcMCcKKyAgICh3aGVuIHRoZQorICAgaW5wdXQgd2FzIGluIHRoZSBmb3JtYXQgMHguLi4gYW5kIGEgYnVmZmVyIG92ZXJmbG93IG9jY3VycmVkIGFuZAorICAgYWxzbworICAgd2hlbiB0aGUgaW5wdXQgd2FzIGluIEFTQ0lJIGZvcm1hdCwgYnV0IG5vdCB3aGVuIHRoZSBpbnB1dCB3YXMgaW4KKyAgIGZvcm1hdAorICAgMHguLi4gYW5kIG5vIGJ1ZmZlciBvdmVyZmxvdyBvY2N1cnJlZCkuIENoYW5nZWQgdGhpcyBzdWNoIHRoYXQKKyAgIHRoaXMKKyAgIGZ1bmN0aW9uIGRvZXMgbm8gbG9uZ2VyIHRlcm1pbmF0ZSB0aGUgaW5wdXQgYnVmZmVyIHdpdGggJ1wwJy4KKyAgIFRoaXMKKyAgIGNoYW5nZSB3YXMgcG9zc2libGUgYmVjYXVzZSBpbnNpZGUgdGhlIE5ldC1TTk1QIHByb2plY3QgYWxsCisgICBjYWxsZXJzIHRoYXQKKyAgIG5lZWRlZCBhICdcMCcgdGVybWluYXRlZCBzdHJpbmcgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB1c2UKKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkgaW5zdGVhZC4KKworMjAxMC0wMS0wNiAxNzo1MiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzoKKworICAgUmV2ZXJ0ZWQgcjE3OTY4IGFuZCByMTc5NzIuCisKKzIwMTAtMDEtMDYgMTU6NDAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6CisKKyAgIEZpeGVkIG1vcmUgY29tcGlsZXIgd2FybmluZ3MgcmVsYXRlZCB0byB0aGUgdXNlIG9mIHRoZSBjb25zdAorICAga2V5d29yZC4KKworMjAxMC0wMS0wNiAxNTozOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jOgorCisgICBGaXhlZCBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uIG1pc21hdGNoLgorCisyMDEwLTAxLTA2IDE1OjM2ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg6CisKKyAgIENoYW5nZWQgYXJndW1lbnQgdHlwZSBmcm9tIGNoYXIgKiBpbnRvIGNvbnN0IGNoYXIgKi4gU2hvdWxkIGhhdmUKKyAgIGJlZW4gaW5jbHVkZWQgaW4gcjE3OTc1LgorCisyMDEwLTAxLTA2IDE1OjMzICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2hhciAqIC8gdV9jaGFyICoKKyAgIG1pc21hdGNoZXMuCisKKzIwMTAtMDEtMDYgMTU6MzEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBBZGRlZCB0aGUgZnVuY3Rpb25zIHJlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCkgYW5kCisgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigpLCB3aGljaAorICAgYWNjZXB0IGEgcGFyc2VyIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBzdHJpbmcgdGhhdCBpdAorICAgcGFyc2VzLiBVc2luZyB0aGVzZSBmdW5jdGlvbnMgcmVzdWx0cworICAgaW4gZWFzaWVyIHRvIHJlYWQgY29kZSB0aGFuIHVzaW5nIHRoZSBub24tY29uc3QgaGFuZGxlcgorICAgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgY2FzdGluZyB0aGUgcGFyc2VyCisgICBmdW5jdGlvbiBleHBsaWNpdGx5IGZyb20gKHZvaWQoKikoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSkgdG8KKyAgICh2b2lkKCopKGNvbnN0IGNoYXIqLCBjaGFyKikpLgorCisyMDEwLTAxLTA2IDE1OjI3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorCisyMDEwLTAxLTA2IDE0OjQ4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEFkZGVkIHJlYWRfY29uZmlnX3JlYWRfb2JqaWRfY29uc3QoKS4KKworMjAxMC0wMS0wNiAxNDo0MiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6CisKKyAgIER1cGxpY2F0ZWQgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBSRUdJU1RFUl9TWVNPUl9UQUJMRSgpIC8KKyAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKCkKKyAgIHNpbmNlIHRoYXQgYXJndW1lbnQgaXMgZnJlZWQgd2hpbGUgdW5yZWdpc3RlcmluZyBzdWNoIGFuIGVudHJ5LgorICAgTm90IHN1cmUgd2hldGhlcgorICAgdGhpcyBjb3VsZCBhY3R1YWxseSB0cmlnZ2VyIGEgY2FsbCBvZiBmcmVlKCkgd2l0aCBhIGNvbnN0YW50CisgICBzdHJpbmcgYXMgYXJndW1lbnQKKyAgIGFuZCBJJ20gbmVpdGhlciBzdXJlIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgY291bGQgaGF2ZQorICAgdHJpZ2dlcmVkIGEgY3Jhc2guCisKKzIwMTAtMDEtMDYgMTQ6MzQgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaCwgc25tcGxpYi92YWNtLmM6CisKKyAgIEZvciB0aG9zZSBWQUNNIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBtb2RpZnkgdGhlIHN0cmluZ3MgcGFzc2VkIGFzCisgICBhcmd1bWVudHMsCisgICBjaGFuZ2VkIHRoZSBhcmd1bWVudCB0eXBlIGZyb20gY2hhciAqIHRvIGNvbnN0IGNoYXIgKi4KKworMjAxMC0wMS0wNiAxNDoyNyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorCisyMDEwLTAxLTA2IDE0OjI2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jOgorCisgICBSZW1vdmVkIGFuIHVudXNlZCB2YXJpYWJsZS4KKworMjAxMC0wMS0wNiAxNDoxNCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYzoKKworICAgRHVwbGljYXRlZCB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIFJFR0lTVEVSX1NZU09SX1RBQkxFKCkgLworICAgUkVHSVNURVJfU1lTT1JfRU5UUlkoKQorICAgc2luY2UgdGhhdCBhcmd1bWVudCBpcyBmcmVlZCB3aGlsZSB1bnJlZ2lzdGVyaW5nIHN1Y2ggYW4gZW50cnkuCisgICBOb3Qgc3VyZSB3aGV0aGVyCisgICB0aGlzIGNvdWxkIGFjdHVhbGx5IHRyaWdnZXIgYSBjYWxsIG9mIGZyZWUoKSB3aXRoIGEgY29uc3RhbnQKKyAgIHN0cmluZyBhcyBhcmd1bWVudAorICAgYW5kIEknbSBuZWl0aGVyIHN1cmUgYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyBjb3VsZCBoYXZlCisgICB0cmlnZ2VyZWQgYSBjcmFzaC4KKworMjAxMC0wMS0wNiAxNDowOCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuaDoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdAorICAgcXVhbGlmaWVyLgorCisyMDEwLTAxLTA2IDE0OjA2ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2hhciAqIC8gdV9jaGFyICoKKyAgIG1pc21hdGNoZXMuCisKKzIwMTAtMDEtMDYgMTQ6MDQgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ2hhbmdlczoKKyAgIC0gQWRkZWQgbmV3IGZ1bmN0aW9ucyBza2lwX3doaXRlX2NvbnN0KCksIHNraXBfbm90X3doaXRlX2NvbnN0KCksCisgICBza2lwX3Rva2VuX2NvbnN0KCksIGNvcHlfbndvcmRfY29uc3QoKSBhbmQKKyAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KCkuCisgICAtIENoYW5nZWQgcmV0dXJuIHR5cGUgb2YgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSBmcm9tCisgICBjaGFyICogdG8KKyAgIGNvbnN0IGNoYXIgKi4gTm90ZTogdGhpcyBkb2VzIG5vdCBhZmZlY3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgIHNpbmNlIHRoaXMKKyAgIGZ1bmN0aW9uIGhhcyBub3QgeWV0IGJlZW4gaW5jbHVkZWQgaW4gYW55IHJlbGVhc2UuCisgICAtIEZpeGVkIGRvY3VtZW50YXRpb24gb2YgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSBhbmQKKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkuCisgICAtIFJlZHVjZWQgbnVtYmVyIG9mIGNhc3QtYXdheS1jb25zdCBjb25zdHJ1Y3RzIGluIHJlYWRfY29uZmlnLmMuCisKKzIwMTAtMDEtMDYgMTM6MzUgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6CisKKyAgIFJlZmluZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWNybyBORVRTTk1QX1JFTU9WRV9DT05TVCgpOgorICAgd2hlbiB1c2luZworICAgdGhlIGdjYyBjb21waWxlciwgaXQgaXMgbm93IHZlcmlmaWVkIHdoZXRoZXIgdGhlIHR5cGVzIChjb25zdCB0KQorICAgYW5kIHR5cGVvZihlKQorICAgYXJlIGNvbXBhdGlibGUsIHdoZXJlIHQgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBlIHRoZSBzZWNvbmQKKyAgIGFyZ3VtZW50IG9mCisgICB0aGlzIG1hY3JvLgorCisyMDEwLTAxLTA2IDEzOjMzICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9hdC5oOgorCisgICBBZGQgc3VwcG9ydCBvZiBuZXR3b3JrIGludGVyZmFjZXMgd2l0aCBIVyBhZGRyZXNzIGJpZ2dlciB0aGFuIDYKKyAgIGJ5dGVzIHRvIGF0VGFibGUuIFNvbWUgSFcsIGxpa2UgSW5maW5pQmFuZCwgdXNlcyBIVyBhZGRyZXNzZXMKKyAgIHdpdGggOSBhbmQgbW9yZSBieXRlcy4KKworMjAxMC0wMS0wNiAxMjo0NSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tzdGF0LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUdTOiAyOTI0MTQwOiBGaXggdGVybWluYXRpb24gb2YgQ1BVL0ZQVSB0eXBlcworCisyMDEwLTAxLTA2IDEyOjMzICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHUzogMjkyMjM5MDogRml4IHRlc3QgZm9yIG1pc3NpbmcgY29udGV4dE5hbWUKKyAgIHBhcmFtZXRlcgorCisyMDEwLTAxLTA2IDExOjU3ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9zbm1wX3BlcmwuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jLCBzbm1wbGliL3BhcnNlLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfc2VydmljZS5jOgorCisgICBDaGFuZ2VzOgorICAgLSBJbnRyb2R1Y2VkIGEgbmV3IG1hY3JvIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCkgdGhhdCBhbGxvd3MgdG8KKyAgIGNhc3QKKyAgIGF3YXkgY29uc3RuZXNzIHdpdGhvdXQgdGhhdCBnY2MgLVdjYXN0LXF1YWwgcmVwb3J0cyBhIHdhcm5pbmcuCisgICAtIE1hZGUgY2FzdGluZyBhd2F5IGNvbnN0bmVzcyBleHBsaWNpdCBieSBpbnRyb2R1Y2luZyB0aGUKKyAgIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCkgbWFjcm8uIFRoaXMgc3VwcHJlc3NlcyB0aGUgd2FybmluZworICAgZ2NjIC1XY2FzdC1xdWFsIHByaW50ZWQgZm9yIHRoZXNlIHN0YXRlbWVudHMuCisKKzIwMTAtMDEtMDYgMTE6NDYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0IHF1YWxpZmllci4KKworMjAxMC0wMS0wNiAwOToxNCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhcHBzL2FnZW50eHRyYXAuYywgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBEbyBub3QgdXNlIDAgd2hlbiByZWZlcnJpbmcgdG8gTlVMTC4KKworMjAxMC0wMS0wNiAwODoyNiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIENoYW5nZWQgYXJndW1lbnQgdHlwZXMgb2YgY2FsY3VsYXRlX3RpbWVfZGlmZigpIGFuZAorICAgY2FsY3VsYXRlX3NlY3RpbWVfZGlmZigpCisgICBmcm9tIHN0cnVjdCB0aW1ldmFsICogdG8gY29uc3Qgc3RydWN0IHRpbWV2YWwgKi4gTm90ZTogdGhpcyBkb2VzCisgICBub3QgYWZmZWN0CisgICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworMjAxMC0wMS0wNiAwODoyMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgQ2hhbmdlcyAobm8gZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb2RpZmllZCk6CisgICAtIFJlbW92ZWQgZGlza2lvX3BhcnNlX2NvbmZpZygpIGRlY2xhcmF0aW9uIGJlY2F1c2UgdGhhdCBmdW5jdGlvbgorICAgaXMgbmVpdGhlciBjYWxsZWQgbm9yIGRlZmluZWQgaW4gdGhlIHNvdXJjZSBmaWxlIGRpc2tpby5jLgorICAgLSBBZGRlZCBkZWNsYXJhdGlvbiBmb3IgZ2V0c3RhdHMoKSBzdWNoIHRoYXQgZ2NjIGRvZXMgbm90CisgICBjb21wbGFpbiBhYm91dCBhIG1pc3NpbmcgZGVjbGFyYXRpb24uCisgICAtIExpbnV4OiBjaGFuZ2VkIHZpc2liaWxpdHkgb2YgZ2V0c3RhdHMoKSBmcm9tIGdsb2JhbCB0byBzdGF0aWMKKyAgIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBCU0QgYW5kIERhcndpbiBpbXBsZW1lbnRhdGlvbnMgb2YKKyAgIGdldHN0YXRzKCkuCisKKzIwMTAtMDEtMDYgMDg6MDAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2hhciAqIC8gdV9jaGFyICogbWlzbWF0Y2hlcy4KKworMjAxMC0wMS0wNiAwMjoxOCAgbWFnZnIKKworICAgKiAgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIG1hbi9NYWtlZmlsZS5pbiwgdGVzdGluZy90ZXN0cy9UMTE0YWdlbnR4YWdlbnR4dHJhcDoKKworICAgQ0hBTkdFUzogYXBwczogT25seSBidWlsZCBhZ2VudHh0cmFwIGlmIHRoZSBhZ2VudHggbGlicmFyaWVzIGFyZQorICAgYnVpbHQuIEFkZCBhIHRlc3QgY2FzZSBmb3IgYWdlbnR4dHJhcC4KKyAgIAorICAgVGhlIGVuYWJsZW1lbnQvZGlzYWJsZW1lbnQgaXMgaW5zcGllcmVkIGJ5IGF1dG9tYWtlIGNvbmRpdGlvbmFscworCisyMDEwLTAxLTA2IDAxOjU5ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYzoKKworICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBzdGFydHRpbWUuCisKKzIwMTAtMDEtMDUgMjI6NTQgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oOgorCisgICBDSEFOR0VTOiBIaWRlIG1vc3QgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gdGhlIGxvZ21hdGNoCisgICBtb2R1bGUuIENsZWFuZWQgdXAgdGhlIGhlYWRlciBhY2NvcmRpbmdseS4gUmVtb3ZlIHRoZSBuZWVkIGZvcgorICAgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYnkgcmVvcmRlcmluZyB0aGUgZnVuY3Rpb25zLgorCisyMDEwLTAxLTA1IDIyOjMzICBkdHMxMgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIENIQU5HRVM6IHB5dGhvbjogQlVHUzogMjkxOTM3OTogSW5pdGlhbGlzZSBTTk1QIHNlc3Npb25zIHByb3Blcmx5CisgICBQcm92aWRlZCBieSBEaWVnbyBCaWxsaQorCisyMDEwLTAxLTA1IDIyOjIwICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6IDI5MTkzMjA6IEF2b2lkIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkKKyAgIFJlcG9ydGVkIGJ5IFRvbWFzeiBMaXMKKworMjAxMC0wMS0wNSAxODo1OCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUdTOiAyOTE0NDEwOiBGaXggY3Jhc2ggb24gZW1wdHkgY29tbWFuZCBsaW5lcworCisyMDEwLTAxLTA1IDE1OjMxICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MTI1ODQ6IEZpeCBudWxsIE9JRCBoYW5kbGluZyBpbiBBZ2VudHgKKyAgIG9uIDY0Yml0CisgICBQYXRjaCBzdXBwbGllZCBieSBMdXR6IEphZW5pY2tlCisKKzIwMTAtMDEtMDUgMTA6MTEgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4Lmg6CisKKyAgIENIQU5HRVM6IGhwdXg6IGZpeCBidWlsZCBlcnJvciBvbiBIUC1VWCAxMC4yMAorCisyMDEwLTAxLTA1IDA4OjQyICBqc2FmcmFuZWsKKworICAgKiBtYW4sIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgUmVtb3ZlIGdlbmVyYXRlZCBtYW4gcGFnZXMgZnJvbSByZXBvc2l0b3J5LgorCisyMDEwLTAxLTA0IDE2OjQ0ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRml4ZWQgYSBwYXN0LWVuZC1vZi1idWZmZXIgcmVhZCB0aGF0IG9jY3VycmVkIHdoZW4gYW4gQVNDSUkKKyAgIHN0cmluZyB3YXMKKyAgIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgb2YgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSAvCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQgKCpsZW4pCisgICBlcXVhbHMgMC4KKworMjAxMC0wMS0wNCAxNjo0MSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNhc3RpbmcgYXdheSAnY29uc3QnLgorCisyMDEwLTAxLTA0IDE2OjI3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQWRkZWQgdW5pdCB0ZXN0IGZvciByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIGFuZAorICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKS4KKworMjAxMC0wMS0wNCAxMDo0NSAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgVXNlIGNvcnJlY3Qgb2lkIGxlbmd0aCBpbiB0YWJsZSBpbmRleGVzLgorCisyMDEwLTAxLTA0IDA4OjEwICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBzbm1wX2FsYXJtLmMgY2FuIGJlIGNvbXBpbGVkIGFnYWluIHdpdGggQzg5CisgICBjb21waWxlcnM6IGZvciBDODkKKyAgIGl0IGlzIHJlcXVpcmVkIHRoYXQgaW5pdGlhbGl6ZXJzIGFyZSBjb25zdGFudCBleHByZXNzaW9ucy4KKworMjAxMC0wMS0wMyAxNjoyOCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYzoKKworICAgUmVuYW1lIG5ldHNubXBfYXJjaF90Y3Bjb25uX2RlbGV0ZSB0bworICAgbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorICAgdGhlIGhlYWRlciBmaWxlIGFuZCBhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgbW9kdWxlLgorCisyMDEwLTAxLTAzIDE2OjI2ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgsICAKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaDoKKworICAgQWRkIG1pc3NpbmcgZGVjbGFyYXRpb25zLgorCisyMDA5LTEyLTMwIDEyOjQ5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkzMzogZml4ZWQgdGhlIGlzc3VlIHRoYXQgaW5jbHVkaW5nIHRoZSBoZWFkZXIKKyAgIGZpbGUKKyAgIDxuZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg+IGZyb20gPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyAgIHRyaWdnZXJzCisgICBjb21waWxlciBlcnJvcnMgZHVyaW5nIHRoZSBjb25maWd1cmUgcHJvY2VzcyAoY29tcGxhaW50cyBhYm91dAorICAgPG5ldHNubXAvbmV0LXNubXAtY29uZmlnLmg+IG5vdCBiZWluZyBpbmNsdWRlZCBiZWZvcmUKKyAgIDxuZXQtc25tcC90eXBlcy5oPikuCisgICBOb3RlOiB0aGlzIGRvZXMgbm90IHNvbHZlIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gdGhhdCBNSUIgY29kZQorICAgbXVzdCBub3QKKyAgIGluY2x1ZGUgdGhlIGhlYWRlciBmaWxlIDxuZXQtc25tcC90eXBlcy5oPiBiZWNhdXNlIGRvaW5nIHNvIHdvdWxkCisgICB0cmlnZ2VyIGEKKyAgIGNpcmN1bGFyIGRlcGVuZGVuY3kgZHVyaW5nIHRoZSBjb25maWd1cmUgc3RlcCAoTUlCIGNvZGUgaXMKKyAgIGNvbXBpbGVkIGR1cmluZworICAgdGhlIGNvbmZpZ3VyZSBzdGVwLCB3aGlsZSB0aGUgY29uZmlndXJlIHN0ZXAgZ2VuZXJhdGVzCisgICA8bmV0c25tcC9uZXQtc25tcC1jb25maWcuaD4gYW5kIDxuZXQtc25tcC90eXBlcy5oPiBuZWVkcworICAgPG5ldHNubXAvbmV0LXNubXAtY29uZmlnLmg+KS4KKworMjAwOS0xMi0zMCAxMTo0OCAgYnZhc3NjaGUKKworICAgKiBhcHBzLCBtYW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTE5OiB1cGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3RzLgorCisyMDA5LTEyLTI4IDE4OjAzICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X2luZGV4LmM6CisKKyAgIEZpeGVkIGEgcGFzdC1lbmQtb2YtYnVmZmVyIHJlYWQuIEZvdW5kIHRoaXMgYnkgYW5hbHl6aW5nIGNvbXBpbGVyCisgICB3YXJuaW5ncy4KKyAgIE5vdGU6IHRoZSBhZmZlY3RlZCBmdW5jdGlvbiwgcmVnaXN0ZXJfc3RyaW5nX2luZGV4KCksIGlzbid0CisgICBjYWxsZWQgZnJvbQorICAgYW55d2hlcmUgaW5zaWRlIHRoZSBOZXQtU05NUCBwcm9qZWN0IGl0c2VsZi4KKworMjAwOS0xMi0yMyAwOTo0OSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKKworICAgRml4IGludmFsaWQgcmVhZCByZXBvcnRlZCBieSB2YWxncmluZDoKKyAgIEludmFsaWQgcmVhZCBvZiBzaXplIDEKKyAgIG1lbWNweSAobWNfcmVwbGFjZV9zdHJtZW0uYzo0MDIpCisgICBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfY29udGFpbmVyX2xvYWRfdjQKKyAgIChpcGFkZHJlc3NfaW9jdGwuYzoyNDApCisgICBuZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2NvbnRhaW5lcl9sb2FkIChpcGFkZHJlc3NfbGludXguYzoxNTgpCisgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfY29udGFpbmVyX2xvYWQgKGlwYWRkcmVzc19jb21tb24uYzoxMTIpCisgICAKKyAgIFJldHVybmluZyBzdHJ1Y3R1cmUgd2l0aCBwb2ludGVycyBpbnNpZGUgaXMgbm90IHRoZSBiZXN0IHRoaW5nIHRvCisgICBkby4KKworMjAwOS0xMi0yMiAxNjowNSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgRml4ZWQgc2V2ZXJhbCBwYXN0LWVuZC1vZi1idWZmZXIgcmVhZHMuCisKKzIwMDktMTItMjIgMTI6MDIgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIAorICAgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgUmV2ZXJ0ZWQgdGhlIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgY2hhbmdlcyBvZiByMTc5MTM6CisgICAtIFJlc3RvcmVkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBESUZGVElNRVZBTCgpIG1hY3JvLgorICAgLSBSZXN0b3JlZCB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGZ1bmN0aW9ucworICAgY2FsY3VsYXRlX3RpbWVfZGlmZigpLAorICAgdWF0aW1lX3JlYWR5KCksIG1hcmtlcl90dGlja3MoKSBhbmQgdGltZXZhbF90dGlja3MoKS4KKyAgIC0gc3RhcnR0aW1lIGlzIGFnYWluIGEgZ2xvYmFsIHZhcmlhYmxlIGluc3RlYWQgb2YgYSBzdGF0aWMgb25lLgorICAgQWxzbyBpbXBsZW1lbnRlZCB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CisgICAtIE1vdmVkIHRoZSBtYXJrZXJfdCB0eXBlZGVmIGZyb20gbmV0LXNubXAvbGlicmFyeS90b29scy5oIHRvCisgICBuZXQtc25tcC9saWJyYXJ5L3R5cGVzLmguCisgICAtIEFkZGVkIGEgbmV3IHR5cGVkZWYsIGNvbnN0X21hcmtlcl90LgorICAgLSBGb3IgdGhvc2UgYXRpbWVfKigpIC8gdWF0aW1lXyooKSAvICpfdHRpY2tzKCkgZnVuY3Rpb25zIHRoYXQgZG8KKyAgIG5vdCBjaGFuZ2UKKyAgIHRoZWlyIGFyZ3VtZW50cywgZGVjbGFyZWQgdGhlc2UgYXJndW1lbnRzIGNvbnN0X21hcmtlcl90IGluc3RlYWQKKyAgIG9mIG1hcmtlcl90LgorICAgLSBSZW5hbWVkIG5ldHNubXBfZ2V0X3N0YXJ0dGltZSgpIGFuZCBuZXRzbm1wX3NldF9zdGFydHRpbWUoKSB0bworICAgbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCkgYW5kIG5ldHNubXBfc2V0X2FnZW50X3N0YXJ0dGltZSgpCisgICByZXNwZWN0aXZlbHkuIE1vdmVkIHRoZXNlIGZ1bmN0aW9ucyBmcm9tIHRvb2xzLmMgdG8gc3lzdGVtLmMuCisgICAtIFJlbW92ZWQgdGhlIGZ1bmN0aW9uIGF0aW1lX2hzdWJ0cmFjdCgpICh3YXMgaW50cm9kdWNlZCBpbgorICAgcjE3OTEzKSBhbmQKKyAgIGludHJvZHVjZWQgYSBuZXcgZnVuY3Rpb24sIG5ldHNubXBfc2V0X2FnZW50X3VwdGltZSgpLgorCisyMDA5LTEyLTIyIDA3OjU5ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgUmV2ZXJ0ZWQgcjE3OTI2LCB3aGljaCBtYWRlIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkKKyAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgemVyby10ZXJtaW5hdGVkLiBBIG5ldyBwYXRjaCB3aWxsCisgICBmb2xsb3cKKyAgIHRoYXQgZml4ZXMgdGhlIGNhbGxlcnMgb2YgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSB0aGF0CisgICB3ZXJlCisgICBhc3N1bWluZyB0aGF0IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgemVyby10ZXJtaW5hdGVzIHRoZQorICAgc3RyaW5nCisgICByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCisKKzIwMDktMTItMjEgMTQ6MjkgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeCBjcmFzaCBpbiBJRi1NSUIgYW5kIElQLU1JQiB3aGVuIHRoZXJlIGFyZQorICAgc29tZSBpbnRlcmZhY2VzIHdpdGggYnJvYWRjYXN0IElQIGFkZHJlc3MgYW5kIHNvbWUgd2l0aG91dC4KKyAgIAorICAgUmVzZXQgdGhlIGJjYXN0ZW50cnkgaW4gdGhlIGxvb3AsIHNvIGl0IGNhbm5vdCBiZSBpbnNlcnRlZCB0byB0aGUKKyAgIGNvbnRhaW5lcgorICAgdHdpY2UuCisgICAKKyAgIFdpdGhvdXQgdGhpcyBwYXRjaCwgd2hlbiBhbiBpbnRlcmZhY2Ugd2l0aG91dCBicm9hZGNhc3QgYWRkcmVzcworICAgaXMgcHJvY2Vzc2VkLAorICAgdGhlIGJjYXN0YWRkcmVzcyBmcm9tIHByZXZpb3VzIGxvb3AgaXMgaW5zZXJ0ZWQgaW50byB0aGUKKyAgIGNvbnRhaW5lci4gVGhpcworICAgb2J2aW91c2x5IGZhaWxzIGFuZCB0aGUgYmNhc3RlbnRyeSBpcyBmcmVlZCwgYnV0IHRoZSBjb250YWluZXIKKyAgIHN0aWxsIGNvbnRhaW5zCisgICByZWZlcmVuY2UgdG8gaXQgLT4gU0lHU0VHVi4KKworMjAwOS0xMi0yMSAxMzo1MiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTI4OiB3aGlsZSByMTc5MjggZml4ZWQgYSBkYW5nbGluZyBwb2ludGVyCisgICBkZXJlZmVyZW5jZQorICAgZGV0ZWN0ZWQgYnkgcnVubmluZyB0aGUgTmV0LVNOTVAgc29mdHdhcmUgb24gV2luZG93cywgdGhhdCBwYXRjaAorICAgaW50cm9kdWNlZAorICAgYSBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlIGFib3V0IHdoaWNoIG9ubHkgVmFsZ3JpbmQgb24gTGludXgKKyAgIGNvbXBsYWluZWQuCisgICBUaGlzIGZvbGxvdy11cCBwYXRjaCBmaXhlcyBib3RoIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzCisgICB0cmlnZ2VyZWQgYnkKKyAgIHBhcnNpbmcgdGhlIHBlcnNpc3RlbnREaXIga2V5d29yZC4KKworMjAwOS0xMi0yMSAxMzozMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgQXBwbGllZCBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgcGF0Y2ggIzI5MDExMjIuIENoYW5nZXM6CisgICAtIE5ldyBmZWF0dXJlOiBzcGVjaWZ5aW5nIEFTTiB0eXBlIFNOTVBfTk9TVUNISU5TVEFOQ0UgYXMgdGhlCisgICB0aGlyZCBhcmd1bWVudAorICAgb2YgbmV0c25tcF9zZXRfcm93X2NvbHVtbigpIHdpbGwgY2F1c2UgYW4gU05NUCBHZXRSZXF1ZXN0IC8KKyAgIEdldE5leHRSZXF1ZXN0IHRvCisgICByZXR1cm4gdGhlIGVycm9yIGNvZGUgbm9TdWNoSW5zdGFuY2UgKFNOTVB2Mikgb3Igbm9TdWNoTmFtZQorICAgKFNOTVB2MSkuIFRoaXMKKyAgIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGhhdmUgYSBjYWNoZWQgdGFibGUgd2l0aCBvbmUgb3IgbW9yZQorICAgImhvbGVzIi4KKyAgIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkbyBub3QgZnJlZSgpIC8gbWFsbG9jKCkgdGhlIG1lbW9yeQorICAgZm9yIHN0b3JpbmcKKyAgIHRoZSBjYWNoZWQgdmFsdWUgaWYgdGhlIHZhbHVlIGhhcyBub3QgYmVlbiBtb2RpZmllZC4KKyAgIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkbyBub3QgZnJlZSgpIC8gbWFsbG9jKCkgdGhlIG1lbW9yeQorICAgZm9yIHN0b3JpbmcKKyAgIHRoZSBjYWNoZWQgdmFsdWUgaWYgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgaGFzIG5vdCBiZWVuCisgICBtb2RpZmllZC4KKyAgIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBpZiB0aGUgc2l6ZSBvZiB0aGUgY2FjaGVkIHZhbHVlCisgICBzaHJ1bmssIHVzZQorICAgcmVhbGxvYygpIGluc3RlYWQgb2YgZnJlZSgpIGFuZCBtYWxsb2MoKS4KKworMjAwOS0xMi0yMSAxMjoyMyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEFwcGxpZWQgYSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIHBhdGNoICMyOTEyMDU1OiBtYWtlIHN1cmUKKyAgIHRoYXQKKyAgIHBhcnNpbmcgdGhlICJwZXJzaXN0ZW50RGlyIiBrZXl3b3JkIGluIHNubXAuY29uZiBkb2VzIG5vdCB0cmlnZ2VyCisgICBhCisgICBkYW5nbGluZyBwb2ludGVyLiBUbyBteSBzdXJwcmlzZSBCb3VuZHNDaGVja2VyIGNvbXBsYWluZWQgYWJvdXQKKyAgIHRoaXMKKyAgIChvbiBXaW5kb3dzKSwgYnV0IFZhbGdyaW5kIGRpZCBub3QgcmVwb3J0IHRoaXMgaXNzdWUgKG9uIExpbnV4KS4KKworMjAwOS0xMi0yMSAxMjowOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTI1IChmaXggbWVtb3J5IGxlYWsgZHVyaW5nIHN0YXJ0dXApOiB3aGlsZQorICAgcjE3OTI1IGZpeGVkCisgICBvbmx5IHRoZSBsZWFrIHRyaWdnZXJlZCBmcm9tIGluc2lkZSB0aGUgZm9yLWxvb3AsIHRoaXMgcGF0Y2ggZG9lcworICAgbm93IGFsc28KKyAgIGZpeCB0aGUgbGVhayB0cmlnZ2VyZWQgYnkgdGhlIG5ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfcm93KCkKKyAgIGNhbGwgbmVhcgorICAgdGhlIGVuZCBvZiBsb2dfbm90aWZpY2F0aW9uKCkuCisKKzIwMDktMTItMjEgMTI6MDEgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBBcHBsaWVkIHBhdGNoICMyOTEyMDYyOiBtYWtlIHN1cmUgdGhhdCB0aGUgc3RyaW5nIHJldHVybmVkIGJ5CisgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIGlzIHByb3Blcmx5IHRlcm1pbmF0ZWQsIHN1Y2ggdGhhdAorICAgdGhlCisgICBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gZG8gbm90IHRyaWdnZXIgcGFzdC1lbmQtb2YtYnVmZmVyIHJlYWRzLgorICAgRm91bmQKKyAgIHRoaXMgaXNzdWUgdmlhIEJvdW5kc0NoZWNrZXIuCisKKzIwMDktMTItMjEgMTE6MDYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jOgorCisgICBBcHBsaWVkIHBhdGNoICMyOTEyMDY4LCB3aGljaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGR1cmluZyBzdGFydHVwLgorICAgVGhlCisgICBmdW5jdGlvbiBsb2dfbm90aWZpY2F0aW9uKCkgYWRkcyBhIHJvdyB0byB0aGUgdGFibGUKKyAgIG5sbUxvZ1ZhclRhYmxlLCBidXQKKyAgIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhhdCB0YWJsZSBoYXMgYmVlbgorICAgaW5pdGlhbGl6ZWQuIElmCisgICB0aGF0IGhhcHBlbnMsIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIGEgcm93IGJ1dCB0aGF0IG1lbW9yeSBpcworICAgbmV2ZXIKKyAgIGFkZGVkIHRvIHRoZSBjYWNoZWQgdGFibGUgZGF0YS4gVGhlIEJvdW5kc0NoZWNrZXIgdG9vbCByZXBvcnRlZAorICAgdGhpcyBhcworICAgYSAibWVtb3J5IGxlYWsgbGVhdmluZyBzY29wZSIuCisKKzIwMDktMTItMjEgMTA6NTQgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBBZGRlZCB0aGUgZm9sbG93aW5nIHRleHQgdG8gdGhlICJMaW1pdGF0aW9ucyIgc2VjdGlvbiBvZgorICAgUkVBRE1FLndpbjMyOgorICAgIldoZW4gdXNpbmcgd2luRXh0RExMLCB0aGVyZSBpcyBhbiBvZmZzZXQgb2YgdXAgdG8gb25lIHNlY29uZAorICAgYmV0d2VlbiB0aGUKKyAgIHZhbHVlIG9mIHRoZSBzeXNVcFRpbWUgdmFyYmluZCBpbmNsdWRlZCBpbiB0aGUgdHJhcHMgZ2VuZXJhdGVkIGJ5CisgICBTTk1QCisgICBleHRlbnNpb24gRExMcyAoZS5nLiBsaW5rVXAgYW5kIGxpbmtEb3duKSBhbmQgdGhlIHZhbHVlIG9mIHRoZQorICAgc3lzVXBUaW1lCisgICB2YXJiaW5kIGluY2x1ZGVkIGluIHRyYXBzIGdlbmVyYXRlZCBieSBOZXQtU05NUCBpdHNlbGYgKGUuZy4KKyAgIGNvbGRTdGFydCkuIgorCisyMDA5LTEyLTIxIDEwOjA5ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBTcGVsbGluZyBmaXg6IHJlcGxhY2VkIGFsbCBvY2N1cnJlbmNlcyBvZiAnc3BlY2lmYycgYnkKKyAgICdzcGVjaWZpYycuCisKKzIwMDktMTItMjEgMTA6MDYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FsYXJtLmM6CisKKyAgIFJlZmFjdG9yaW5nOiBlbGltaW5hdGVkIGR1cGxpY2F0ZWQgY29kZSBieSByZWltcGxlbWVudGluZworICAgc25tcF9hbGFybV9yZWdpc3RlcigpIHVzaW5nIHNubXBfYWxhcm1fcmVnaXN0ZXJfaHIoKS4gTmVpdGhlciB0aGUKKyAgIE5ldC1TTk1QIEFQSSBub3IgdGhlIGJlaGF2aW9yIG9mIHNubXBfYWxhcm1fcmVnaXN0ZXIoKSBoYXMgYmVlbgorICAgY2hhbmdlZC4KKworMjAwOS0xMi0yMCAxMToxMCAgbWFnZnIKKworICAgKiAgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9hZ2VudHh0cmFwLmMsIG1hbi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG1hbi9hZ2VudHh0cmFwLjEuZGVmOgorCisgICBORVdTOiBhcHBzOiBBZGQgY29tbWFuZCB0byBzZW5kIEFnZW50WCBub3RpZnkgcmVxdWVzdHMgdG8gYQorICAgbWFzdGVyIGFnZW50LgorCisyMDA5LTEyLTE3IDE2OjQ0ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTc5MTcgLS0gYnVpbGRzIGFnYWluIG9uIFdpbmRvd3Mgc3lzdGVtcy4KKworMjAwOS0xMi0xNyAxNjowMyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgRm9sbG93LXVwIGZvciByMTc5MDMgLyBwYXRjaCAyOTExMzIzICJGaXggYWdlbnQgbG9ja3VwIHdoZW4KKyAgIG1vbml0b3JpbmcKKyAgIEFnZW50WC1kZWxlZ2F0ZWQgaW5mb3JtYXRpb24iIChzdWJtaXR0ZWQgYnkgbXlzZWxmKS4gVGhhdCBwYXRjaAorICAgZGlkIG5vdCBvbmx5CisgICBmaXggdGhlIGxvY2t1cCBidXQgYWxzbyBtYWRlIHNubXBkIHByaW50IGEgd2FybmluZyBkdXJpbmcgc3RhcnR1cAorICAgd2hlbgorICAgaXF1ZXJ5U2VjTmFtZSB3YXMgbm90IGNvbmZpZ3VyZWQuIFRoaXMgd2FybmluZyB3YXMgcHJpbnRlZCBldmVuCisgICB3aGVuIG5vCisgICBpbnRlcm5hbCBxdWVyaWVzIHdlcmUgcGVyZm9ybWVkLiBUaGlzIHdhcm5pbmcgaXMgbm93IG9ubHkgcHJpbnRlZAorICAganVzdCBiZWZvcmUKKyAgIHRoZSBmaXJzdCBpbnRlcm5hbCBxdWVyeSBpcyBtYWRlIChkdXJpbmcgdGhlIGZpcnN0IGNhbGwgb2YKKyAgIG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpIGluc3RlYWQgb2YgZHVyaW5nIGNyZWF0aW9uIG9mCisgICB0aGUgaW50ZXJuYWwKKyAgIHNlc3Npb24pLgorCisyMDA5LTEyLTE3IDEzOjU1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmM6CisKKyAgIFJNT04gTUlCIHNvdXJjZSBjb2RlIGNvbXBpbGVzIGFnYWluIC0tIHNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQKKyAgIGluIHIxNzkxMy4KKworMjAwOS0xMi0xNyAxMzoxOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBNb2RpZmllZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlX3NlY3RpbWVfZGlmZigpIGFuZAorICAgQUdVVElMX3N5c191cF90aW1lKCkgc3VjaCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBub3JtYWxpemUgdGhlCisgICB0dl91c2VjIGZpZWxkIG9mCisgICBzdHJ1Y3QgdGltZXZhbCBwcm9wZXJseS4gTm90ZTogdGhpcyBzb3VyY2UgY29kZSBtb2RpZmljYXRpb24gZG9lcworICAgbm90IGFmZmVjdAorICAgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgdHdvIGZ1bmN0aW9ucy4KKworMjAwOS0xMi0xNyAxMzoxMSAgYnZhc3NjaGUKKworICAgKiBtYW4vbmV0c25tcF91dGlsLjM6CisKKyAgIFJlbW92ZWQgZG9jdW1lbnRhdGlvbiBvZiB0aGUgRElGRlRJTUVWQUwoKSBtYWNybyAtLSBzaG91bGQgaGF2ZQorICAgYmVlbiBpbmNsdWRlZAorICAgaW4gcjE3OTEzLgorCisyMDA5LTEyLTE3IDEzOjA1ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQ29udmVydGVkIHN0YXJ0dGltZSBmcm9tIGEgZ2xvYmFsIHZhcmlhYmxlIGludG8gYSBzdGF0aWMgdmFyaWFibGUKKyAgIGFuZCBhcHBsaWVkIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKyAgIC0gQWRkZWQgdHdvIG5ldyBtYWNyb3M6IE5FVFNOTVBfVElNRVJBREQoKSBhbmQKKyAgIE5FVFNOTVBfVElNRVJTVUIoKS4KKyAgIC0gQWRkZWQgdGhyZWUgbmV3IGZ1bmN0aW9uczogbmV0c25tcF9nZXRfc3RhcnR0aW1lKCksCisgICBuZXRzbm1wX3NldF9zdGFydHRpbWUoKSBhbmQgYXRpbWVfaHN1YnRyYWN0KCkuCisgICAtIFJlcGxhY2VkIGdldHRpbWVvZmRheSgpICsgY2FsY3VsYXRlX3RpbWVfZGlmZigpIGNhbGxzIGJ5IGEgY2FsbAorICAgdG8gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCkuCisgICAtIFJlbW92ZWQgdGhlIG1hY3JvIERJRkZUSU1FVkFMKCkgYmVjYXVzZSBpdCB3YXMgbm90IHVzZWQgaW5zaWRlCisgICB0aGUgTmV0LVNOTVAgcHJvamVjdCBhbmQgYmVjYXVzZSBpdCBjb250YWluZWQgYSBidWcuCisgICAtIFJlbW92ZWQgdGhlIGZ1bmN0aW9ucyBjYWxjdWxhdGVfdGltZV9kaWZmKCksIHVhdGltZV9yZWFkeSgpLAorICAgbWFya2VyX3R0aWNrcygpIGFuZCB0aW1ldmFsX3R0aWNrcygpLgorCisyMDA5LTEyLTE3IDEyOjQ0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIEJ1ZyBmaXg6IGFjY29yZGluZyB0byBSRkMgMjU3MSB0aGUgdW5pdCBvZiBzbm1wRW5naW5lVGltZSBpcyBvbmUKKyAgIHNlY29uZCwKKyAgIG5vdCBvbmUgaHVuZHJlZHRoIG9mIGEgc2Vjb25kLgorCisyMDA5LTEyLTE3IDEwOjAzICBkdHMxMgorCisgICAqIG1hbi9zbm1wdGVzdC4xLmRlZjoKKworICAgRml4IHR5cG8uCisKKzIwMDktMTItMTYgMTI6MzAgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvdG9vbHMuYywgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luZG93cy1vbmx5IGJ1ZyBmaXhlczoKKyAgIC0gRml4ZWQgdGhlIHN0cmFuZ2UgYnVpbGQgZXJyb3JzIHRoYXQgb2NjdXJyZWQgd2hlbiBjb21waWxpbmcKKyAgIGxpYm5ldHNubXAgYXMgYSBETEwgYW5kIHdoZW4gZWl0aGVyIDxzdGRsaWIuaD4gb3IgPHN0cmluZy5oPiB3YXMKKyAgIGluY2x1ZGVkIGFmdGVyIDxuZXQtc25tcC1jb25maWcuaD4gaW5zdGVhZCBvZiBiZWZvcmUuCisgICAtIEZvciBkZWJ1ZyBidWlsZHMgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbywgZml4ZWQgdGhlCisgICBtaXNtYXRjaGVzIGJldHdlZW4gdGhlIF9tYWxsb2NfZGJnKCkgY2FsbCBpbnZva2VkIGJ5IHN0cmR1cCgpIGFuZAorICAgZnJlZSgpLWluZyBzdHJkdXAoKS1lZCBtZW1vcnkgYnkgaW5jbHVkaW5nIHRoZSA8Y3J0ZGJnLmg+IGhlYWRlcgorICAgaW4gdG9vbHMuYyBhbmQgYnkgZGVmaW5pbmcgdGhlIHByZXByb2Nlc3NvciBzeW1ib2wKKyAgIF9DUlREQkdfTUFQX0FMTE9DLiBEZXRlY3RlZCB2aWEgdGhlIG1lbW9yeSBjaGVja2VyIGluY2x1ZGVkIGluCisgICBJbnRlbCBQYXJhbGxlbCBTdHVkaW8uCisKKzIwMDktMTItMTQgMTc6MjMgIHRhbmRlcnMKKworICAgKiAgcGVybC9hZ2VudC9hZ2VudC54cywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgc3luYyBkZWZpbml0aW9uIG9mIG5ldHNubXBfdWRwX2FkZHJfcGFpciBpbiBQZXJsIHdpdGggdGhlIGNoYW5nZXMKKyAgIGluCisgICByMTc4NTUgYW5kIHIxNzkwOAorCisyMDA5LTEyLTE0IDEzOjU1ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBUQ1BEb21haW4uYzoKKworICAgRml4IFRDUCB0cmFuc3BvcnQgYnJva2VuIGJ5IHJldi4gMTc4NTUgLSBjb3BpZXMgb2YKKyAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciBpbiBzbm1wVENQRG9tYWluLmMgYW5kIHNubXBVRFBEb21haW4uYyBtdXN0CisgICBiZSB0aGUgc2FtZS4KKworMjAwOS0xMi0xMSAxNDo0MyAgaGFyZGFrZXIKKworICAgKiBhcHBzL3NubXB1c20uYywgbWFuL3NubXB1c20uMS5kZWY6CisKKyAgIENIQU5HRVM6IHNubXB1c206IHBhdGNoIGZyb20gTWFydGluIEJqb3JrbHVuZCB0byBhZGQgYSAtQ3cgb3B0aW9uCisgICB0byB1c2UgY3JlYXRlQW5kV2FpdCBmb3IgYWdlbnRzIHRoYXQgYXJlIHN0cmljdCBhYm91dCBub3QKKyAgIGFsbG93aW5nIGEgcm93IHRvIGJlIHNldCB0byBhY3RpdmUgdW50aWwgdGhlIGF1dGhlbnRpY2F0aW9uCisgICBwYXNzd29yZCBoYXMgYmVlbiBjaGFuZ2VkOyBwbHVzIHdoaXRlLXNwYWNlIGNsZWFuIHVwLCBtYW51YWwKKyAgIGFkZGl0aW9ucyBhbmQgaGVscCBvdXRwdXQgbW9kaWZpY2F0aW9ucyBieSBoYXJkYWtlcgorCisyMDA5LTEyLTExIDE0OjM1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGEgZm9ybWF0IHNwZWNpZmllciBtaXNtYXRjaC4KKworMjAwOS0xMi0xMSAxNDowNiAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzIsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICB3aW5FeHRETEwgYnVncyBmaXhlZDoKKyAgIC0gc3lzVXBUaW1lLjAgZG9lcyBub3cgcmVwb3J0IHRoZSBjb3JyZWN0IHZhbHVlLgorICAgLSBhIGxpbmtVcCBvciBsaW5rRG93biB0cmFwIGlzIG5vdyBzZW50IGFmdGVyIHRoZSBzdGF0dXMgb2YgYQorICAgbmV0d29yayBpbnRlcmZhY2UKKyAgIGhhcyBjaGFuZ2VkLgorICAgLSB0aGUgdmFsdWUgb2YgdGhlIHN5c1VwVGltZS4wIHZhcmJpbmQgaW4gbGlua1VwIGFuZCBsaW5rRG93bgorICAgdHJhcHMgaXMgbm93CisgICBjb3JyZWN0LgorCisyMDA5LTEyLTEwIDE1OjUyICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0hFUzogMjkxMTk3MDogUHJvcGVybHkgdGVybWluYXRlIGxpbmtlZCBsaXN0CisgICBvZiByZWdpc3RyYXRpb25zLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTWlya28gRGVja2VydC4KKworMjAwOS0xMi0xMCAxNTo0MyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMjkxMTMyMzogRml4IGFnZW50IGxvY2t1cCB3aGVuCisgICBtb25pdG9yaW5nIEFnZW50WC1kZWxlZ2F0ZWQgaW5mb3JtYXRpb24KKworMjAwOS0xMi0xMCAxMzo1OSAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIENoYW5nZXM6CisgICAtIEFkZGVkIGluZm9ybWF0aW9uIGFib3V0IE1pY3Jvc29mdCdzIGltcGxlbWVudGF0aW9uIG9mCisgICBoclN5c3RlbVVwdGltZS4wLgorICAgLSBGaXhlZCBhIGZldyB0eXBvcy4KKworMjAwOS0xMi0xMCAxMzowMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBBZGRlZCBtaXNzaW5nIG5ld2xpbmUgaW4gYSBsb2dnaW5nIHN0YXRlbWVudC4KKworMjAwOS0xMi0xMCAxMjo1NCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgRml4ZWQgdGhlIGZvbGxvd2luZyB3aW5FeHRETEwgYnVnczoKKyAgIC0gRml4ZWQgYnVnIGluIHRyYXAgZm9yd2FyZGluZzogbGlua0Rvd24gdHJhcHMgd2VyZSBzZW50IGFzCisgICB3YXJtU3RhcnQgdHJhcHMKKyAgIGFuZCBsaW5rVXAgdHJhcHMgd2VyZSBzZW50IGFzIGxpbmtEb3duIHRyYXBzLgorICAgLSBGaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBleHRlbnNpb24gRExMIGxvYWRpbmcuCisgICAtIEEgZGVidWcgdHJhY2Ugc3RhdGVtZW50IGlzIG5vdyBpbnZva2VkIHdoZW5ldmVyIGEgc2VyaW91cyBlcnJvcgorICAgaGFzIGJlZW4KKyAgIGRldGVjdGVkLgorCisyMDA5LTEyLTEwIDEyOjM3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBPSURzIGluIGRlYnVnIG1lc3NhZ2VzIGdlbmVyYXRlZCBieSB0aGUgd2luRXh0RExMIG1vZHVsZSBhcmUgbm93CisgICBwcmludGVkIGluCisgICBzeW1ib2xpYyBmb3JtIGluc3RlYWQgb2YgbnVtZXJpYyBmb3JtLgorCisyMDA5LTEyLTEwIDA4OjU3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL3dpbjMyc2RrLmRzdzoKKworICAgUHJvamVjdCBkZXBlbmRlbmNpZXMgc2hvdWxkIG5vdyByZWFsbHkgYmUgY29ycmVjdC4gU2hvdWxkIGhhdmUKKyAgIGJlZW4gaW5jbHVkZWQKKyAgIGluIHIxNzg3My4KKworMjAwOS0xMi0xMCAwODo0MSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgQ2hhbmdlcyAob25seSBzb3VyY2UgY29kZSBjb21tZW50cyBoYXZlIGJlZW4gY2hhbmdlZCk6CisgICAtIFJlbW92ZWQgYSBub3RlIHRoYXQgY29udHJhZGljdGVkIHRoZSBpbnN0cnVjdGlvbnMgaW4KKyAgIFJFQURNRS53aW4zMi4KKyAgIC0gVXBkYXRlZCBidWlsZCBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIGFkZGl0aW9uIG9mIHRoZSBmaWxlCisgICB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oIGluIHIxNzgzMC4KKworMjAwOS0xMi0xMCAwODoxNyAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBzdGF0dXMuYzoKKworICAgTWFkZSBmaWxlIGhlYWRlciBjb21tZW50cyBjb25zaXN0ZW50IHdpdGggdGhlIGRlc2NyaXB0aW9ucyBpbiB0aGUKKyAgIHJlc3BlY3RpdmUgbWFuIHBhZ2VzLgorCisyMDA5LTEyLTEwIDAzOjA0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBhZ2VudF9zeXNPUl9jYWxsYmFjayB3b24ndCB0cmlnZ2VyIGEgd2FybmluZyB3aGVuCisgICByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2suIENoYW5nZSBhZ2VudHhfcmVvcGVuX3N5c09SVGFibGUgaW4KKyAgIG9yZGVyIHRvIGF2b2lkIHdhcm5pbmdzIG9mIGNvbnN0IHJlbW92YWwuCisKKzIwMDktMTItMDkgMTU6MDUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgLSBNb3ZlZCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHZhcmlhYmxlICduZXdsaW5lJyBpbnNpZGUgdGhlCisgICBmdW5jdGlvbgorICAgbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyKCkgYmVjYXVzZSB0aGlzIHZhcmlhYmxlIGlzIG9ubHkgdXNlZCBieQorICAgdGhhdCBmdW5jdGlvbi4KKyAgIC0gRG9jdW1lbnRlZCB0aGUgcHVycG9zZSBvZiB0aGUgdmFyaWFibGUgJ25ld2xpbmUnLgorICAgLSBCdWcgZml4OiBtYWRlIHN1cmUgdGhhdCB0aGUgY2FsbCBsb2dfaGFuZGxlcl9zdGRvdXRlcnIoKSBkb2VzCisgICBub3QgdHJpZ2dlciBhbgorICAgaW52YWxpZCBtZW1vcnkgYWNjZXNzIChzdHJbLTFdKSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgdG8KKyAgIHRoaXMgZnVuY3Rpb24uCisKKzIwMDktMTItMDkgMTQ6MzcgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogQWRkIHN1cHBvcnQgb2YgbmV0d29yayBpbnRlcmZhY2VzIHdpdGggSFcgYWRkcmVzcworICAgYmlnZ2VyIHRoYW4gNiBieXRlcyB0byBpcE5ldFRvTWVkaWFUYWJsZSBhbmQKKyAgIGlwTmV0VG9QaHlzaWNhbFRhYmxlLgorICAgU29tZSBIVywgbGlrZSBJbmZpbmlCYW5kLCB1c2VzIEhXIGFkZHJlc3NlcyB3aXRoIDkgYW5kIG1vcmUKKyAgIGJ5dGVzLiBTbm1wZCBvbiBMaW51eCB3YXMgbm90IGFibGUgdG8gcGFyc2UgL3Byb2MvbmV0L2FycCB0aGVuCisgICBhbmQgcHJvZHVjZWQgdWdseSAnaW9jdGwgMzUxMjMgcmV0dXJuZWQgLTEnIHRvIGxvZy4KKworMjAwOS0xMi0wOSAxMjoyNyAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIEFkZGVkIG1pc3NpbmcgLUxvIGluIGEgY29tbWFuZCBsaW5lIGV4YW1wbGUuCisKKzIwMDktMTItMDkgMTI6MTYgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvc25tcGRzZGsvc25tcGQuZHNwOgorCisgICBBZGRlZCBzbm1wYXBpLmxpYiB0byB0aGUgbGlua2VyIGlucHV0IGxpc3Qgb2Ygc25tcGQuZXhlLgorICAgQXBwYXJlbnRseSBWaXN1YWwKKyAgIFN0dWRpbyAyMDA1IGFuZCAyMDA4IG5lZWQgdGhpcyBsaWJyYXJ5IGluIHRoZSBsaW5rZXIgaW5wdXQgbGlzdAorICAgd2hlbiBsaW5raW5nCisgICB0aGUgZXhlLCB3aGlsZSBmb3IgVmlzdWFsIFN0dWRpbyA2IGl0IGlzIHN1ZmZpY2llbnQgd2hlbiB0aGlzCisgICBsaWJyYXJ5IGlzCisgICBwcmVzZW50IGluIHRoZSBsaW5rZXIgaW5wdXQgbGlzdCBvZiBuZXRzbm1wbWlicy5saWIuCisKKzIwMDktMTItMDkgMDg6NDUgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBVcGRhdGVkIFJFQURNRS53aW4zMjogYmVjYXVzZSBvZiByMTc4ODQgYW5kIHIxNzg3MywgdGhlIGJ1aWxkCisgICBwcm9jZXNzIGJlY2FtZSBzaW1wbGVyLgorCisyMDA5LTEyLTA5IDA4OjIyICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBFeHBvcnQgc3RydG91bGwgLS0gc2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiByMTc4ODYuCisKKzIwMDktMTItMDkgMDg6MjEgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBSZXZlcnRlZCByMTc3MDAgZm9yIFJFQURNRS53aW4zMjogYmVjYXVzZSBvZiByMTc4ODYsIG1vZGlmeWluZworICAgdGhlCisgICBzdHJ0b3VsbCBsaW5lIGluIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmIGlzIG5vIGxvbmdlcgorICAgbmVjZXNzYXJ5LgorCisyMDA5LTEyLTA5IDA4OjEyICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAKKyAgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luZG93czogc3dpdGNoZWQgZnJvbSBfc3RydG91aTY0KCkgdG8gc3RydG91bGwoKSBmb3IgTWljcm9zb2Z0CisgICBWaXN1YWwgU3R1ZGlvCisgICAyMDAyIGFuZCBsYXRlciBiZWNhdXNlIHRoZSBmb3JtZXIgaXMgbm90IGZ1bGx5IFBPU0lYIGNvbXBsaWFudC4KKyAgIFRoZSBzdHJ0b3VsbCgpCisgICB1bml0IHRlc3QgcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQgZm9yIF9zdHJ0b3VpNjQoKSB3aXRoCisgICBNU1ZDIDIwMDg6CisgICB0ZXN0IDE0IGZhaWxlZCAoaW5wdXQgIjB4Iik6IGV4cGVjdGVkIGVuZCAxLCBnb3QgZW5kIDAKKyAgIHRlc3QgMTYgZmFpbGVkIChpbnB1dCAiMHgiKTogZXhwZWN0ZWQgZW5kIDEsIGdvdCBlbmQgMAorCisyMDA5LTEyLTA4IDIxOjU0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQ6IE1ha2Ugc3VyZSB0aGF0IGEgbWFzayBpcyBnaXZlbiB0byBvcGVuCisgICB3aGVuIE9fQ1JFQVQgaXMgc3BlY2lmaWVkCisKKzIwMDktMTItMDggMTY6MjAgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvd2luMzIuZHN3OgorCisgICBNYWRlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGV4ZSdzIGFuZCBsaWIncyBleHBsaWNpdCBzdWNoIHRoYXQKKyAgIFZpc3VhbAorICAgU3R1ZGlvIGNhbiBmaWd1cmUgb3V0IHRoZSBwcm9wZXIgYnVpbGQgb3JkZXIgaW5zdGVhZCBvZiB0aGUgdXNlcgorICAgaGF2aW5nCisgICB0byBmaWd1cmUgdGhpcyBvdXQuCisKKzIwMDktMTItMDggMTU6NDcgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wdGFibGUuYzoKKworICAgQnVpbGRzIGFnYWluIG9uIFVuaXggc3lzdGVtcyAoZml4ZWQgYSB0eXBvIGludHJvZHVjZWQgaW4gcjE3ODgxKS4KKworMjAwOS0xMi0wOCAxNTozNyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3A6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2RlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESy4gV2l0aG91dCB0aGlzCisgICBkZWZpbmUgdGhlIE1pY3Jvc29mdAorICAgVmlzdWFsIFN0dWRpbyBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgYSBiZW5pZ24gcmVkZWZpbml0aW9uIG9mCisgICB0eXBlIHNvY2tsZW5fdC4KKworMjAwOS0xMi0wOCAxNToyOCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBDbGVhbmVkIHVwIHRoZSBjb2RlIGZvciBzZXR0aW5nIGxpbmUgYnVmZmVyaW5nOgorICAgLSBJbnN0ZWFkIG9mIGhhdmluZyBjYWxscyB0byBzZXR2YnVmKCkgaW4gbXVsdGlwbGUgZmlsZXMsIHRoZXJlCisgICBpcyBub3cgb25lIGNhbGwKKyAgIHRvIHNldHZidWYoKSBmcm9tIHRoZSBuZXcgZnVuY3Rpb24gbmV0c25tcF9zZXRfZmlsZWxvZy4gVGhlc2UKKyAgIHNvdXJjZSBmaWxlcworICAgYXJlOiBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0cmFwZC5jLAorICAgYXBwcy9zbm1wdGFibGUuYworICAgYW5kIGFnZW50XG1pYmdyb3VwXGRpc21hblx0cmFjZXJvdXRlXHRyYWNlUm91dGVDdGxUYWJsZS5jLgorICAgLSBVc2luZyAtTG8gLyAtTGUgZG9lcyBub3cgZW5hYmxlIGxpbmUgYnVmZmVyaW5nIGZvciBzdGRvdXQgLworICAgc3RkZXJyIHJlc3BlY3RpdmVseS4KKyAgIC0gUmVtb3ZlZCBjb2RlIGluIHNubXBkLmMgYW5kIHNubXB0cmFwZC5jIGZvciBzZXR0aW5nIGxpbmUKKyAgIGJ1ZmZlcmluZyBvbiBzdGRvdXQKKyAgIHNpbmNlIHNldHRpbmcgbGluZSBidWZmZXJpbmcgb24gc3Rkb3V0IGlzIG5vdyB0cmlnZ2VyZWQgYnkgdGhlCisgICBjb21tYW5kLWxpbmUKKyAgIG9wdGlvbiAtTG8uCisgICBCdWdzIGZpeGVkOgorICAgLSBMaW5lIGJ1ZmZlcmluZyBtb2RlIGlzIG5vdyBhbHNvIHNldCBmb3Igc3RkZXJyIHdoZW4gdGhlCisgICBjb21tYW5kLWxpbmUgb3B0aW9uCisgICAtTGUgaGFzIGJlZW4gc3BlY2lmaWVkLgorICAgLSBMaW5lIGJ1ZmZlcmluZyBtb2RlIGlzIG5vdyBzZXQgY29ycmVjdGx5IGZvciBzdGRvdXQgb24gV2luZG93cworICAgc3lzdGVtcworICAgKGNvbW1hbmQtbGluZSBvcHRpb24gLUxvKS4KKworMjAwOS0xMi0wOCAxMjozMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBsb2NhbCB2YXJpYWJsZXMgdGhhdCB3ZXJlIGRlZmluZWQKKyAgIGJ1dAorICAgbm90IHVzZWQgYnkgb25seSBlbmFibGluZyB0aGUgbG9jYWwgdmFyaWFibGUgZGVmaW5pdGlvbnMgb24gdGhlCisgICBwbGF0Zm9ybSB0aGF0IHVzZXMgdGhlc2UgdmFyaWFibGVzIChMaW51eCkuCisKKzIwMDktMTItMDggMTI6MjYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgorCisgICBBZGRlZCAjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy5oIi4gRml4ZXMgYSBjb21waWxlciB3YXJuaW5nLgorCisyMDA5LTEyLTA4IDEyOjI1ICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jOgorCisgICBJbmNsdWRlIHRoZSBnZXRob3N0ZW50KCkgLyBzZXRob3N0ZW50KCkgZGVjbGFyYXRpb25zIGJlZm9yZSB1c2luZworICAgdGhlc2UKKyAgIGZ1bmN0aW9ucy4gRml4ZXMgYSBjb21waWxlciB3YXJuaW5nIG9uIFdpbmRvd3Mgc3lzdGVtcy4KKworMjAwOS0xMi0wOCAxMjoxMSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBGaXhlZCBhbiBpbmNvbnNpc3RlbmN5ICh3aGljaCBpcyBhbGxvd2VkIGJ5IHRoZSBBTlNJIEMgc3RhbmRhcmQpCisgICBiZXR3ZWVuCisgICBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbiBvZgorICAgbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyIGFuZAorICAgbmV0c25tcF9hZGRfZGVmYXVsdF90cmFwaGFuZGxlciBzdWNoCisgICB0aGF0IHRoZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBjb21waWxlciBkb2VzIG5vIGxvbmdlciBjb21wbGFpbgorICAgYWJvdXQKKyAgIHRoaXMuCisKKzIwMDktMTItMDggMTI6MDggIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX3NlcnZpY2UuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nOiBtYWRlIHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QKKyAgIGNvbXBsYWluIGFib3V0IGltcGxpY2l0bHkgY2FzdGluZyBhd2F5IGNvbnN0bmVzcy4KKworMjAwOS0xMi0wOCAxMjowNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgT25seSBjb21waWxlIHRoZSB3aW5FeHRETEwgc291cmNlIGNvZGUgaWYgdGhlIHByZXByb2Nlc3NvciBtYWNybworICAgVVNJTkdfV0lORVhURExMX01PRFVMRSBoYXMgYmVlbiBkZWZpbmVkLgorCisyMDA5LTEyLTA4IDEyOjAzICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3A6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2RlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESy4KKworMjAwOS0xMi0wOCAxMjowMSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi93aW4zMnNkay5kc3c6CisKKyAgIE1hZGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gZXhlJ3MgYW5kIGxpYidzIGV4cGxpY2l0IHN1Y2ggdGhhdAorICAgVmlzdWFsCisgICBTdHVkaW8gY2FuIGZpZ3VyZSBvdXQgdGhlIHByb3BlciBidWlsZCBvcmRlciBpbnN0ZWFkIG9mIHRoZSB1c2VyCisgICBoYXZpbmcKKyAgIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIG9yZGVyLgorCisyMDA5LTEyLTA4IDA5OjQ2ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW5kb3dzIC8gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW86IGRpc2FibGVkIHRoZSBjb21waWxlciB3YXJuaW5nCisgICBhYm91dAorICAgc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoZXMgKDQwMTgpIGJlY2F1c2UgdGhpcyB3YXJuaW5nIGRvZXMgbm90CisgICB5aWVsZAorICAgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbi4KKworMjAwOS0xMi0wOCAwOToxNyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTc2MzkgKHBhdGNoIDI3ODA0MTEgLS0gZml4IGNvbXBpbGVyIHdhcm5pbmdzKToKKyAgIGFwcGxpZWQKKyAgIHRoaXMgcGF0Y2ggdG8gbmV0LXNubXAtY29uZmlnLmguaW4gdG9vIHN1Y2ggdGhhdAorICAgbmV0LXNubXAtY29uZmlnLmggYW5kCisgICBuZXQtc25tcC1jb25maWcuaC5pbiBtYXRjaCBhZ2Fpbi4KKworMjAwOS0xMi0wOCAwODoxNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgYWdlbnR4X3N5c09SX2NhbGxiYWNrKCkgZG9lcyBub3QgdHJpZ2dlciBhCisgICBjb21waWxlcgorICAgd2FybmluZyB3aGVuIHRoZSB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBoYXMgYmVlbgorICAgZGVjbGFyZWQgY29uc3QuCisKKzIwMDktMTItMDggMDg6MTQgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgorCisgICBDaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBvZiBzdHJ0b3VsbCgpIGZyb20gJ3Vuc2lnbmVkIGxvbmcgbG9uZycKKyAgICh3aGljaAorICAgaXMgbm90IHZhbGlkIEM4OSkgdG8gJ3VpbnQ2NF90JyAoZGVjbGFyZWQgaW4KKyAgIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4pLgorICAgVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGNvbXBpbGUgYWdhaW4gd2l0aAorICAgTVNWQyA2LjAuCisKKzIwMDktMTItMDcgMTA6NDYgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdGFibGUuYzoKKworICAgVHdlYWsgbWlzc2luZyBzdWJpZGVudGlmaWVyIHByb2Nlc3NpbmcgdG8gYmUgbW9yZSB0eXBlLWF3YXJlLgorICAgKEFuIGlzc3VlIHdpdGggQUlYLCBhdCBsZWFzdCkKKworMjAwOS0xMi0wNiAxODozOCAgbWFnZnIKKworICAgKiAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogTWFrZSB0aGUgbGlzdHMgb2YgY29tMlNlYypFbnRyaWVzIHN0YXRpYworCisyMDA5LTEyLTA2IDE4OjM0ICBtYWdmcgorCisgICAqICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBNYWtlIHRoZSBpdGVyYXRvciB2YXJpYWJsZSBpbiBuZXRzbm1wXypfZ2V0U2VjTmFtZSBjb25zdAorCisyMDA5LTEyLTA2IDE4OjI5ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogQ2hhbmdlIHRoZSB0eXBlcyBvZiB0aGUgcmV0dXJuIHZhbHVlcyBvZgorICAgbmV0c25tcF8qX2dldFNlY05hbWUgZnJvbSBjaGFyKiB0byBjb25zdCBjaGFyKiBzaW5jZSB0aGV5IHBvaW50CisgICBpbnRvIGludGVybmFsIHN0cnVjdHVyZXMuCisKKzIwMDktMTItMDUgMjA6MTkgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg6CisKKyAgIGZpeCBkZWNsYXJhdGlvbiBvZiBzdHJ0b3VsbAorCisyMDA5LTEyLTA1IDE3OjQyICB0YW5kZXJzCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIGNhbGwgbmV0c25tcF9yZWFkX21vZHVsZSBpbnN0ZWFkIG9mIHJlYWRfbW9kdWxlIHRvIG1ha2UgaXQKKyAgIGNvbXBpbGUgd2l0aAorICAgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKKworMjAwOS0xMi0wMiAxNTozOSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIGludmFsaWQgYWNjZXNzIHRvIG1lbW9yeSBpbiBUQ1AtTUlCCisgICBUaGlzIHBhcnRseSByZXZlcnRzIHBhdGNoIDE3NzE5IC0gdGhlIGVudHJpZXMgKmFyZSogdXNlZCBhZnRlcgorICAgcmF3X2RhdGEgY29udGFpbmVyIGlzIGZyZWVkLiBUaGVzZSBlbnRyaWVzIHNob3VsZCBiZSBmcmVlZCB3aGVuCisgICBhc3NvY2lhdGVkIHJvd3JlcV9jdHggaXMgZnJlZWQuCisKKzIwMDktMTItMDIgMDg6MzAgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCB1ZHBUYWJsZSBpbmRleGVzIG9uIGJpZy1lbmRpYW4gNjRiaXQgTGludXguCisgICBUaGUgaW5kZXggd2FzIGFsd2F5cyAnMC4wLjAuMCcgaW5zdGVhZCBvZiByZWFsIGxvY2FsIElQIGFkZHJlc3MuCisKKzIwMDktMTItMDEgMTI6MzYgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBVcGRhdGUgYSByZWR1bmRhbnQgKGFuZCBwcm9iYWJseSBpbmFjY3VyYXRlKSBjb21tZW50LgorCisyMDA5LTEyLTAxIDEyOjMxICBkdHMxMgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4MjIzNjA6IEZpeCBtZW1vcnkgbGVhayB3aGVuIGJ1aWxkaW5nCisgICB0YWJsZSBPSURzCisKKzIwMDktMTItMDEgMTI6MDggIGR0czEyCisKKyAgICogYXBwcy9zbm1wdGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcHRhYmxlOiBCVUdTOiAyODM3OTk4OiBIYW5kbGUgbWlzc2luZyBpbnN0YW5jZQorICAgc3ViaWRlbnRpZmllcnMgaW4gcmVzdWx0cworCisyMDA5LTEyLTAxIDExOjU2ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4NDEwMDg6IFByb3RlY3QgYWdhaW5zdCBjcmFzaCBmb2xsb3dpbmcKKyAgIGZhaWxlZCBBZ2VudFggcmVzcG9uc2UKKworMjAwOS0xMi0wMSAwNzozNCAganNhZnJhbmVrCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBGaXggcmVzcG9uZGluZyB0byBicm9hZGNhc3QgcmVxdWVzdHMuCisgICBVRFAgcmVzcG9uc2VzIGFyZSBzZW50IHdpdGggc291cmNlIElQIGFkZHJlc3Mgd2hpY2ggd2FzCisgICBkZXN0aW5hdGlvbiBvZgorICAgYXBwcm9wcmlhdGUgcmVxdWVzdHMgKGltcGxlbWVudGVkIGluIFNWTiByZXYuIDE1MjE1KS4gQnV0IGlmIHRoZQorICAgZGVzdGluYXRpb24KKyAgIG9mIGEgcmVxdWVzdCBpcyBicm9hZGNhc3QgSVAgYWRkcmVzcywgdGhlIHJlcXVlc3Qgd2FzIHNlbnQgd2l0aAorICAgdGhlIGJyb2FkY2FzdAorICAgYWRkcmVzcyBhcyBzb3VyY2UuIHNlbmRtc2coKSBvbiBMaW51eCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgYW5kCisgICByZXR1cm5zIGVycm9yCisgICAtPiByZXNwb25zZSBpcyBub3Qgc2VudC4gSW4gb3JkZXIgdG8gc2VuZCByZXNwb25zZXMgZnJvbSB0aGUgc2FtZQorICAgaW50ZXJmYWNlLAorICAgaW50ZXJmYWNlIGluZGV4IG9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2UgbXVzdCBiZSB1c2VkLgorCisyMDA5LTEyLTAxIDAwOjI5ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBhY3R1YWxseSBjb21waWxlIGFmdGVyIDE3ODUyLgorCisyMDA5LTEyLTAxIDAwOjI0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBhY3R1YWxseSBjb21waWxlIGFmdGVyIDE3ODQyLgorCisyMDA5LTExLTMwIDE2OjU1ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4NzM4NTg6IEZpeCBoYW5kbGluZyBvZiBzY2hlZE93bmVyIGluZGV4LgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTWF4IFNjaHViZXJ0LgorCisyMDA5LTExLTMwIDE2OjQ2ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLm9sZC1hcGkuY29uZjoKKworICAgQ0hBTkdFUzogbWliMmM6IEJVR1M6IDI4ODg1Njk6IEZpeCBnZW5lcmF0aW9uIG9mIHRhYmxlIGNvbHVtbnMKKyAgIGFycmF5CisKKzIwMDktMTEtMzAgMTY6MzAgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjg5NDA1OTogSGFuZGxlIGVycm9ycyB3aGVuIGNvdW50aW5nCisgICBpbnRlcmZhY2VzCisKKzIwMDktMTEtMzAgMTY6MDcgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDI4OTcwMDA6IFN1cHByZXNzIDMyLWJpdCBjb3VudGVyIHRydW5jYXRpb24KKyAgIHdhcm5pbmdzLgorCisyMDA5LTExLTMwIDE1OjM0ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyOTAzMDkyOiBGaXggYnJva2VuIGhhbmRsaW5nIG9mIGJyb2FkY2FzdAorICAgZW50cmllcy4KKworMjAwOS0xMS0zMCAxNToxOSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyOTAxMDI5OiBGaXggY29tcGlsZXIgd2FybmluZyBvbgorICAgQ2xvc2VIYW5kbGUoKQorICAgRW5kaWFuIHByb2JsZW1zIGFscmVhZHkgYWRkcmVzc2VkIGJ5IHBhdGNoICMyODM1NTc2CisKKzIwMDktMTEtMzAgMTU6MTMgIGR0czEyCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDI4OTA5MzE6IEJldHRlciBoYW5kbGluZyBvZiBDb3VudGVyNjQKKyAgIHZhbHVlcy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IE1heCBSb21hbm92LgorCisyMDA5LTExLTMwIDE1OjA3ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODc4MTY6IFByb3RlY3QgYWdhaW5zdCBkaXZpc2lvbi1ieS16ZXJvCisgICBjcmFzaAorCisyMDA5LTExLTMwIDE1OjAzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODgzMjIwOiBGaXggY29tcGlsYXRpb24gcHJvYmxlbXMgd2hlbgorICAgaWZYVGFibGUgaXMgbm90IGluY2x1ZGVkLgorCisyMDA5LTExLTMwIDE0OjQ5ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4MzE1NTogRml4IG1lbW9yeSBsZWFrIGluIHByb3h5CisgICBoYW5kbGluZy4KKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEdvd3RoYW0gVGhvbW1hbmRyYS4KKworMjAwOS0xMS0zMCAxNDozMiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODMwOTI6IFN1cHBvcnQgbW9uaXRvcmluZyBwcm9jZXNzZXMgdGhhdAorICAgc2hvdWxkIG5vdCBiZSBydW5uaW5nLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgQ2hyaXN0aWFuIChjZzc1KS4KKyAgIAorICAgUW46IFNob3VsZCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmUgYmFjay1wb3J0ZWQgdG8gZWFybGllciBsaW5lcz8KKworMjAwOS0xMS0zMCAxNDoxMiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODc3NTE4OiBGaXggaGFuZGxpbmcgb2Ygc2NvcGVkIEFnZW50WAorICAgdmFyaWFibGVzCisKKzIwMDktMTEtMzAgMTQ6MDEgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4MzU1NzY6IEZpeCBlbmRpYW5uZXNzIGlzc3VlcyBpbgorICAgcGFzcy9wYXNzX3BlcnNpc3QKKworMjAwOS0xMS0yNyAwODo1NCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYzoKKworICAgUmVtb3ZlIGV4ZWN1dGFibGUgYXR0cmlidXRlIGZyb20gc291cmNlIGZpbGVzLgorCisyMDA5LTExLTI1IDIwOjM1ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgbG9jYWwvbWliMmMubm90aWZ5LmNvbmY6CisKKyAgIENIQU5HRVM6IHNubXBkOiBNYWtlIGFsbCB0aGUgb2lkcyBhbmQgb2lkIGxlbmd0aHMgaW4gYWdlbnRfdHJhcC5jCisgICBjb25zdCBhbmQgdXNlIHRoZW0gZnJvbSBldmVyeXdoZXJlLgorCisyMDA5LTExLTI1IDIwOjI3ICBtYWdmcgorCisgICAqIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEluc3RhbGwgbGlicmFyeS9vaWQuaC4gVGhhbmtzIHRvICJUb21hc3ogTGlzIgorICAgd2hvIHNwb3R0ZWQgdGhlIGJ1Zy4KKworMjAwOS0xMS0yNSAwOTo0NyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg6CisKKyAgIENvbW1lbnQtb25seSBjaGFuZ2U6IGNoYW5nZWQgdGhlIG5hbWUgaW4gdGhlIGZpbGUgaGVhZGVyIGZyb20KKyAgIHRlc3RoYW5kbGVyLmgKKyAgIHRvIGluc3RhbmNlLmggc3VjaCB0aGF0IGl0IG5vdyBtYXRjaGVzIHRoZSBmaWxlbmFtZS4KKworMjAwOS0xMS0yNCAwNzo0OSAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0CisKKzIwMDktMTEtMjMgMDc6MDcgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgdGhlIGVudGVycHJpc2UgYXJndW1lbnQgb2YKKyAgIG5ldHNubXBfc2VuZF90cmFwcyBhbmQgc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycyBjb25zdAorCisyMDA5LTExLTIzIDA3OjAyICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgdGhlIG5hbWUgYXJndW1lbnQgdG8gZmluZF92YXJiaW5kX2luX2xpc3QKKyAgIGNvbnN0CisKKzIwMDktMTEtMjIgMjM6MjUgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguaDoKKworICAgUmVtb3ZlIHNvbWUgbG9jYWwgcmVkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zCisKKzIwMDktMTEtMjIgMDE6MDMgIG1hZ2ZyCisKKyAgICogIHdpbjMyL2NvbmZpZy5oLmJvcmxhbmQsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nLCBXaW4zMjogUmVtb3ZlIGEgZmV3IHVudXNlZCBjb25maWd1cmUgc3ltYm9scworCisyMDA5LTExLTIxIDA4OjAxICBidmFzc2NoZQorCisgICAqIHdpbjMyL1NubXAtd2luRXh0RExMLmgsIHdpbjMyL3NubXAtd2luZXh0ZGxsLmg6CisKKyAgIFJlcGxhY2VkIGFuIGFjY2lkZW50YWxseSBjb21taXR0ZWQgZmlsZSBieSB0aGUgcHJvcGVyIGNvbnRlbnRzLgorCisyMDA5LTExLTIwIDE2OjI5ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgorCisgICBSZXZlcnRlZCBhY2NpZGVudGFsbHkgbWVyZ2VkIGNoYW5nZXMuCisKKzIwMDktMTEtMjAgMTY6MjYgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYiwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9zbm1wLXdpbmV4dGRsbC5oOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMDktMTEtMjAgMTY6MTggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmMsICAgCisgICAgICBsb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIFNwZWxsaW5nIGZpeCBpbiBDIHNvdXJjZSBjb2RlIGNvbW1lbnRzOiByZXBsYWNlZCAncmV0cml2YWwnIGJ5CisgICAncmV0cmlldmFsJy4KKworMjAwOS0xMS0yMCAxNjoxNSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgRml4ZWQgYSBuYW1pbmcgaW5jb25zaXN0ZW5jeTogcmVwbGFjZWQgdHdvIG9jY3VycmVuY2VzIHdpbkV4dERsbAorICAgYnkgd2luRXh0RExMIGluIHNvdXJjZSBjb2RlIGNvbW1lbnRzLgorCisyMDA5LTExLTE5IDIyOjUyICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDI5MDAwNzg6IEFkZCBzdXBwb3J0IGZvciBPSUQgdmFyaWFibGVzIHdpdGgKKyAgIHNpemUgaW4gZWxlbWVudHMgaW5zdGVhZCBvZiBieXRlcywgY29ycmVjdCBzeXNPYmplY3RJRCB0byB1c2UKKyAgIHRoaXMuCisKKzIwMDktMTEtMTMgMTI6NTkgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgbG9nZ2luZyBvZiAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIKKyAgIGJpdHMnIGluIElQLU1JQiBhbmQgVENQLU1JQgorICAgVGhlIGNvdW50ZXJzLCB3aGljaCBncm93IGZhc3QgYXJlIG5vdyBjdXQgdG8gMzJiaXRzLgorCisyMDA5LTExLTEyIDA4OjI2ICBtYWdmcgorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIFVzZSBiaWcgcHJpbnRmJ3MgaW5zdGVhZCBvZiBtYW55IHNtYWxsIG9uZXMgdG8gc2F2ZSBhIGZldyBodW5kcmVkCisgICBieXRlcyBvbiB0aGUgZmluYWwgZXhlY3V0YWJsZSBzaXplLgorCisyMDA5LTExLTEyIDAyOjI0ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9zdHJsY3B5LmMsIHNubXBsaWIvc3RydG9rX3IuYywgc25tcGxpYi9zdHJ0b2wuYywgICAKKyAgICAgIHNubXBsaWIvc3RydG91bC5jLCBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgQUNfUkVQTEFDRV9GVU5DUyB0byBoYW5kbGUgY29kZSB0aGF0IGlzCisgICBtaXNzaW5nIG9uIHNvbWUgcGxhdGZvcm1zLgorCisyMDA5LTExLTExIDA5OjAwICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBGaXggY2FjaGUgZnJlZSByb3V0aW5lIHRvIG1hdGNoIGhlYWRlciBkZWNsYXJhdGlvbi4KKyAgIFJldHVybiBzdWNjZXNzL2ZhaWx1cmUgdmFsdWVzIGZyb20gY2FjaGUgbG9hZCByb3V0aW5lLgorICAgUHJvYmxlbSBpZGVudGlmaWVkIGJ5IFh1YW4uCisKKzIwMDktMTAtMzAgMDk6NTEgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaCwgIAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgTkVXUzogc25tcGxpYjogUmV2ZXJ0IDE3ODA4LCBpbnN0ZWFkIGZhY3RvciBvdXQgdGhlIGRlY2xhcmF0aW9uCisgICBvZiBvaWQgdG8gaXQncyBvd24gZmlsZSBhbmQgaW5jbHVkZSB0aGF0IGZpbGUgZnJvbSBib3RoIHR5cGVzLmgKKyAgIGFuZCBhc24xLmgKKworMjAwOS0xMC0zMCAwODoyOCAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaWYuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgIAorICAgICAgIHNubXBsaWIvbWliLmMsIHNubXBsaWIvb2lkX3N0YXNoLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCBzbm1wbGliL3NubXB1c20uYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkLCBzbm1wbmV0c3RhdDogQWRkIGNvcnJlY3Qgc2l6ZSBwcmVmaXhlcworICAgd2hlbiBwcmludGluZyB2YXJpYWJsZXMgb2YgdHlwZSBvaWQuCisKKzIwMDktMTAtMzAgMDg6MDcgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDaGFuZ2Ugb2lkIHRvIGJlIGEgMzItYml0IHR5cGUgb24gSUxQNjQgYW5kCisgICBMUDY0IHBsYXRmb3Jtcy4KKworMjAwOS0xMC0zMCAwODowNSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oOgorCisgICBORVdTOiBzbm1wbGliOiBSZW1vdmUgdGhlIG9pZCB0eXBlZGVmIGZyb20KKyAgIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4uIEl0IGlzIHN0aWxsIHByZXNlbnQgaW4KKyAgIDxuZXQtc25tcC90eXBlcy5oPiwgdXNlIHRoYXQgZmlsZS4KKworMjAwOS0xMC0yOCAxNjo0OCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9zbm1wX3ZhcnMuYzoKKworICAgZG9uJ3QgcmVxdWlyZSBzdWJhZ2VudF9pbml0KCkgaWYgbm90IG9ubHkgYnVpbGRpbmcgbWFzdGVyIGFnZW50CisgICBjb2RlCisKKzIwMDktMTAtMjcgMDY6NDQgIG1hZ2ZyCisKKyAgICogIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtdG8tb2lkLm0yaSwgICAKKyAgICAgIGxvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZiwgbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5yb3cuY29uZiwgbG9jYWwvbWliMmMuc2NhbGFyLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIENIQU5HRVM6IG1pYjJjOiBSZW1vdmUgdW5uZWNlc3NhcnkgY2FzdHMgdG8gdV9jaGFyKgorCisyMDA5LTEwLTE0IDIzOjEyICBtYWdmcgorCisgICAqIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCBzbm1wbGliL3NjYXBpLmM6CisKKyAgIENIQU5HRVM6IGFwcHMsIHNubXBsaWI6IFBBVENIOiAyODM1NTc3OiBpZGVudGlmaWVkIGJ5ICJCYXJ0IFZhbgorICAgQXNzY2hlIjogUmVwbGFjZSBTTk1QX1pFUk8gb2YgYXJyYXlzIHdpdGggYSBtZW1zZXQuCisKKzIwMDktMTAtMTIgMjA6MjggIG1hZ2ZyCisKKyAgICogc25tcGxpYi9wYXJzZS5jOgorCisgICBMZXNzZW4gdGhlIHNjb3BlIG9mIHRoZSBycCB2YXJpYWJsZSB0byB0aGUgc21hbGxlc3QgcG9zc2libGUgb25lLgorCisyMDA5LTEwLTA5IDEyOjM4ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOjI4NzE3NDc6IHBsdWcgbWVtb3J5IGxlYWsgaW4gT0lECisgICBwcm9jZXNzaW5nLgorICAgVGhlIG1lbW9yeSBsZWFrZWQgd2hlbiBzbWFsbCBPSUQsIHdoaWNoIGNvdWxkIGZpdCBwcmUtYWxsb2NhdGVkCisgICB2cC0+bmFtZV9sb2MsIHdhcyBwbGFjZWQgaW4gZGlmZmVyZW50IChhbGxvY2F0ZWQpIG9uZS4KKworMjAwOS0xMC0wOSAwNTozMSAgbWFnZnIKKworICAgKiBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmM6CisKKyAgIENIQU5HRVM6IEJVRzogMjgzODI0MzogQ29ycmVjdCB0aGUgb3V0cHV0IG9mIHVuc2lnbmVkIHZhbHVlcy4KKyAgIFRoYW5rcyB0byBKYWNrIEh1YW5nIG9mIFF1YWxjb21tIHdobyBwb2ludGVkIG91dCB0aGlzIGJ1Zy4KKworMjAwOS0xMC0wOSAwNTowMCAgbWFnZnIKKworICAgKiBzbm1wbGliL3BhcnNlLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENoYW5nZSB0aGUgcGFyc2luZyBvZiByYW5nZXMgdG8gYWNjZXB0IGFsbAorICAgdmFsaWQgdmFsdWVzLgorCisyMDA5LTEwLTA3IDIyOjI0ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogbWlzYzogUEFUQ0g6IDI4MzYxMTI6IFVzZSB0aGUgcmlnaHQgbW9kaWZpZXIgd2hlbgorICAgcHJpbnRpbmcgc2l6ZV90IGFuZCBzc2l6ZV90IHZhcmlhYmxlcy4KKworMjAwOS0xMC0wNyAxMjo1MCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCBjcmVhdGlvbiBvZiB2aWV3cyB1c2luZyBzbm1wdXNtLCBPSURzIHdpdGgKKyAgIGluZGV4ZXMgPiAyNTUgYXJlIGFsbG93ZWQgbm93LgorICAgVGhpcyByZXZlcnRzIFNWTiBjb21taXQgIzc0OTIuCisKKzIwMDktMTAtMDUgMTk6MTkgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdGV4dF91dGlscy5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDb3JyZWN0IHRoZSBzcGVsbGluZyBvZiBfX2NwbHVzcGx1cyB3aGVuCisgICBjaGVja2luZyBpZiB0aGUgZmlsZSBzaG91bGQgYmUgd3JhcHBlZCBpbiBleHRlcm4gIkMiLgorCisyMDA5LTEwLTA1IDA2OjEzICBtYWdmcgorCisgICAqIGFwcHMvc25tcHdhbGsuYzoKKworICAgQ0hBTkdFUzogc25tcHdhbGs6IEhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBlbmQgb2lkIGlzIGxvbmdlcgorICAgdGhhbiB0aGUgY3VycmVudCBvaWQgY29ycmVjdGx5CisKKzIwMDktMDktMzAgMTA6MTIgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKKworICAgQ0hBTkdFUzogU29sYXJpczogUHJvdGVjdCBhZ2FpbnN0IG1pc3NpbmcgcGFja2FnZSB2ZXJzaW9uCisgICBpbmZvcm1hdGlvbiBjcmFzaGluZyB0aGUgYWdlbnQuCisgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IElueWF2ZW4gU2FrYXJhaS4KKworMjAwOS0wOS0yNyAxNDo1OSAgYWxleF9iCisKKyAgICogIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGwsICAgCisgICAgICB3aW4zMi9kaXN0L3NjcmlwdHMvbWFuZGlyMmh0bWw6CisKKyAgIFdpbjMyOiBCaW5hcnkgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFuZCBzY3JpcHQgdXBkYXRlcy4KKworCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS41LnJjMyAtPiBWNS41CisKKzIwMDktMDktMjMgMjM6NDIgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDktMjMgMjM6NDAgIGhhcmRha2VyCisKKyAgICogRkFROgorCisgICByZW1vdmUgU1ZOIGJyYW5jaCB3b3JkaW5nCisKKzIwMDktMDktMjMgMjM6MzYgIGhhcmRha2VyCisKKyAgICogRkFROgorCisgICBwcm9wZXIgcHJvamVjdCBjYXBpdGFsaXphdGlvbgorCisyMDA5LTA5LTIzIDIzOjM1ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA5LTIzIDIzOjMwICBoYXJkYWtlcgorCisgICAqIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAwOS0wOS0yMiAyMTo1MSAgdGFuZGVycworCisgICAqIFJFQURNRS5zb2xhcmlzOgorCisgICBmaXggdHlwb3MKKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNS5yYzIgLT4gVjUuNS5yYzMKKwkKKzIwMDktMDktMTQgMjI6MzkgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDktMTQgMjI6MzYgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsICAgCisgICAgICBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDktMTQgMjI6MTggIGhhcmRha2VyCisKKyAgICogUkVBRE1FLmFpeCwgYXBwcy9zbm1wbmV0c3RhdC9pZi5jLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9haXguaDoKKworICAgUGF0Y2ggZnJvbSBtYWdmciBmb3IgNS41IHNwZWNpZmljIGFpeCBidWlsZCBmaXhlcworCisyMDA5LTA5LTAyIDA3OjEyICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiByZW5hbWUgTUlCIG1hY3JvIHRvIE5FVFNOTVBfTUlCMl9PSUQsIE1JQiBpcworICAgdG9vIGdlbmVyaWMgYW5kIG1heSBjb25mbGljdCB3aXRoIGFwcGxpY2F0aW9ucy4KKyAgIAorICAgVGhlIG9sZCBNSUIgbWFjcm8gaXMga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdW5sZXNzCisgICBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUyBpcyBkZWZpbmVkLgorCisyMDA5LTA4LTMxIDE5OjM4ICBuYmEKKworICAgKiBtaWJzL3JmY2xpc3Q6CisKKyAgIEFkZGl0aW9uYWwgUkZDIG1pYnMKKworMjAwOS0wOC0zMSAxOTozNyAgbmJhCisKKyAgICogbWlicy9JQU5BaWZUeXBlLU1JQi50eHQ6CisKKyAgIElBTkEgZml4ZWQgYSBidWcKKworMjAwOS0wOC0yOSAwNzoyOSAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IFJlbW92ZSB1bm5lZWRlZCBjYXN0cy4KKworMjAwOS0wOC0yOSAwNzoyOCAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IHJldCBpcyBvbmx5IHVzZWQgaW4gc2V0dGFibGUgdGFibGVzIHNvIG9ubHkgZGVjbGFyZSBpdAorICAgdGhlbi4KKworMjAwOS0wOC0yOSAwNzoyNCAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IFJlcGxhY2UgdGhlIF9vaWRfbGVuIHZhcmlhYmxlIHdpdGggYW4gZXhwbGljaXQgY2FsbCBvZgorICAgT0lEX0xFTkdUSC4KKworMjAwOS0wOC0yOSAwNzoyMSAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IE1ha2UgZXZlcnkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgc3RhdGljIHN0YXRpYy4gUmVtb3ZlIHRoZQorICAgZGVjbGFyYXRpb25zIG9mIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGFuZCB0aGUgcHJpdmF0ZSBkZWZpbmVzIGZyb20KKyAgIHRoZSBoZWFkZXIuCisKKzIwMDktMDgtMjkgMDc6MTkgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBSZW9yZGVyIHRoZSBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIG5lZWQgZm9yCisgICBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworMjAwOS0wOC0yOSAwNzoxNiAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IG5ldHNubXBfdGFibGVfcmVnaXN0ZXIgc2hvdWxkIGJlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUKKyAgIGFuZCB0YWtlIG9ubHkgdHdvIGFyZ21lbnRzLgorCisyMDA5LTA4LTI5IDA3OjE0ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogYnVpbGRfb2lkIGV4cGVjdHMgYSBwb2ludGVyIHRvIGFsbG9jYXRlZCBvaWQuIENoYW5nZSB0bworICAgdXNlIGJ1aWxkX29pZF9ub2FsbG9jIGFuZCByZW1vdmUgb25lIGNvcHkgb2YgdGhlIGluZGljZXMuCisKKzIwMDktMDgtMjkgMDc6MTAgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBUaGVyZSBpcyBubyBpbmRleF9vaWRfbGVuIG1lbWJlciBpbiBzdHJ1Y3QgZW50cnkuIFVzZSB0aGUKKyAgIGludGVuZGVkIGxvY2FsIHZhcmlhYmxlIGluZGV4X29pZF9sZW4uCisKKzIwMDktMDgtMjkgMDc6MDYgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBDb3JyZWN0IHRoZSByZXR1cm4gdHlwZSBvZiAke2l9X2dldCplbnRyeSB0byBtYXRjaCB0aGUKKyAgIHJldHVybmVkIHR5cGUuCisKKzIwMDktMDgtMjYgMjI6MzcgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB3aHdvb3BzOyBibGV3IHRoZSBjaGFuZ2Vsb2cgZm9yIHJjMgorCisyMDA5LTA4LTI2IDE3OjM4ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA4LTI2IDE3OjI5ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjUucmMxIC0+IFY1LjUucmMyCisJCisyMDA5LTA4LTI2IDE3OjM4ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA4LTI2IDE3OjI5ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA4LTI2IDE3OjI4ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICB1cGRhdGVkIGJhc2VkIG9uIG5ldyBTRiB1cGxvYWQgbWV0aG9kczsgbm8gbG9uZ2VyIGFzIGF1dG9tYXRhYmxlCisKKzIwMDktMDgtMjYgMTc6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIGZyb20gSmFuIHRvIGVuZGxlc3MgbG9vcCBpbiBkZWZhdWx0IHJvdXRlcworICAgb24gbGludXgKKworMjAwOS0wOC0yNiAxNzoyNSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaDoKKworICAgYXBwbHkgcGF0Y2ggZnJvbSBKYW4gdG8gZml4IEMrKyB3cmFwcGVyCisKKzIwMDktMDgtMjYgMTQ6NTMgIGR0czEyCisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBJbml0aWFsIHN0YWIgYXQgYSBtaW5pbWFsLWhlbHBlciAocmF3KSB0YWJsZSB0ZW1wbGF0ZSwKKyAgIGxlYXZpbmcgbW9zdCBvZiB0aGUgd29yayB0byB0aGUgdXNlci1wcm92aWRlZCBNSUIgaGFuZGxlci4KKworMjAwOS0wOC0yNiAxNDo1MCAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFByb3RlY3QgYWdhaW5zdCBib2d1cyBmYWlsdXJlcyAocmV0dXJuaW5nIDApIGFuZCBzdWJzZXF1ZW50CisgICBkb3VibGUtZnJlZXMsCisgICBkdWUgdG8gMTUtLzMxLWJpdCBtYXNraW5nIHdoZW4gc2VsZWN0aW5nIHJlcXVlc3QgSURzLiBJZGVudGlmaWVkCisgICBieSBrcm9tZXNreS4KKworMjAwOS0wOC0yMCAxMzozMCAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwbHVnIGxlYWtzIGluIGlwSWZTdGF0c1RhYmxlLAorICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUsIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQKKyAgIGlwRGVmYXVsdFJvdXRlclRhYmxlLgorICAgCisgICBJdCBzZWVtcyB0byBtZSB0aGUgdGFibGVzIHdlcmUgd3JvbmdseSBnZW5lcmF0ZWQgd2l0aAorICAgbTJjX2RhdGFfYWxsb2NhdGUgb3IKKyAgIHNvbWVvbmUgZm9yZ290IHRvIHJlbGVhc2UgdGhlIHVzZXIgcHJvdmlkZWQgZGF0YS4KKworMjAwOS0wOC0xMiAxNTowMCAgdGFuZGVycworCisgICAqIE5FV1M6CisKKyAgIGZpeCBsaWJ0b29sIHZlcnNpb24gaW4gTkVXUworCisyMDA5LTA4LTExIDAwOjQyICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIENoYW5nZUxvZzoKKworICAgd2hvb3BzOyBhZGQgcmVhbCBjaGFuZ2Vsb2cgZW50ZXJpZXMgZm9yIC5yYzEKKworMjAwOS0wOC0xMCAyMzoxMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgZml4IHR5cG8gaW4gc3ZuMmNsIGxpbmUKKworMjAwOS0wOC0xMCAyMzowNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAwOS0wOC0xMCAyMTozMiAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS41LnByZTMgLT4gVjUuNS5yYzEKKworMjAwOS0wOC0xMCAyMzoxMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgZml4IHR5cG8gaW4gc3ZuMmNsIGxpbmUKKworMjAwOS0wOC0xMCAyMzowNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAwOS0wOC0xMCAyMTozMiAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wOC0xMCAyMToyMSAgaGFyZGFrZXIKKworICAgKiAgZGlzdC9tYWtlcmVsZWFzZS54bWwsIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCAgIAorICAgICAgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA4LTA3IDEwOjMyICBkdHMxMgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIENvcnJlY3QsIGNvbnNvbGlkYXRlLCBjbGFyaWZ5IGFuZCBjbGVhbnVwIHRoZSBjYXRhbG9nIG9mIGN1cnJlbnQKKyAgIGNoYW5nZXMuCisKKzIwMDktMDgtMDYgMDc6NTcgIGR0czEyCisKKyAgICogRkFROgorCisgICBFeHBhbmQgb24gZXhlYyB2cyBleHRlbmQuCisKKzIwMDktMDgtMDUgMjA6MDcgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsICAgCisgICAgICBzbm1wbGliL2ZpbGVfdXRpbHMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjgyMjM1NTogRml4IG1lbW9yeSBsZWFrcyBvbgorICAgdWRwRW5kcG9pbnRUYWJsZSAobGludXgpCisgICBQYXRjaCBzdXBwbGllZCBieSBGcmFuayBMaWNodGVuaGVsZAorCisyMDA5LTA4LTA1IDE5OjA1ICBkdHMxMgorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAyODIyMzM3OiBGaXggbWVtb3J5IGxlYWsgaW4KKyAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlCisKKzIwMDktMDgtMDUgMTU6MTYgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYzoKKworICAgRml4IG1lbW9yeSBsZWFrIGluIE5ldFRvTWVkaWFUYWJsZS4KKyAgIFdoZW4gZGVsZXRpbmcgcm93IGNvbnRleHQsIGRlbGV0ZSBhbHNvIGFzc29jaWF0ZWQgZGF0YS4KKworMjAwOS0wOC0wNSAxNToxNSAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIEZpeCBtZW1vcnkgbGVhayBpbiBOZXRUb01lZGlhVGFibGUuCisgICBUaGUgY29udGFpbmVyIHVzZWQgdG8gdHJhY2sgZW50cmllcyB0byBkZWxldGUgZnJvbSBjYWNoZSBzaG91bGQKKyAgIGJlIHJlbGVhc2VkIHdoZW4gaXQncyBub3QgbmVlZGVkLgorCisyMDA5LTA4LTA1IDE1OjEyICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgRml4IG1lbW9yeSBsZWFrIGluIFVEUC0gYW5kIFRDUC1NSUIuCisgICBUaGUgZGF0YSBmcm9tIHJhd19kYXRhIGFyZSBjb3BpZWQgdG8gY2FjaGUsIHNvIGl0IHNob3VsZCBiZQorICAgZnJlZWQuCisKKzIwMDktMDgtMDUgMTA6MTYgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdGFibGUuYzoKKworICAgQ0hBTkdFUzogYXBwczogQlVHOiAyODExNTc3OiBGaXggYnVnIGluIEdldEJ1bGsgaGFuZGxpbmcuCisgICBEb24ndCBnZXQgY29uZnVzZWQgYnkgaW5kZXggdmFsdWVzIHRoYXQgY29udGFpbiBhICc6JyBjaGFyYWN0ZXIuCisKKzIwMDktMDgtMDQgMjE6NTkgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1hY2Nlc3MtdW5zb3J0ZWQtZXh0ZXJuYWwtZGVmaW5lcy5tMmk6CisKKyAgIENIQU5HRVM6IG1pYjJjOiBCVUc6IDI4MjcyNjk6IFN1cHByZXNzIG5vbi1vcmRlcmVkIFRPRE8gY29tbWVudHMuCisKKzIwMDktMDgtMDQgMjE6MzUgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMub2xkLWFwaS5jb25mOgorCisgICBIYW5kbGUgZ2VuZXJhdGluZyBjb2RlIGZvciBhIHNpbmdsZSB0YWJsZSwKKyAgIGFzIHdlbGwgYXMgYSBsYXJnZXIgZ3JvdXAuCisgICBBbHNvIGFkZHJlc3NlcyBidWcgMjE1MDI4NQorCisyMDA5LTA4LTA0IDIxOjE2ICBtYWdmcgorCisgICAqIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgc25tcGxpYjogZnJvbSAiQmFydCB2YW4gQXNzY2hlICYgTWFnbnVzIEZyb21yZWlkZSI6IE1vcmUgdXBkYXRlcworICAgdG8gc3RydG91bGwuYworCisyMDA5LTA4LTA0IDEwOjU3ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmcm9tICJNYXJjdXMgUueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMteeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTmnotrZXJ0IjogZml4IHBvc3NpYmxlIGNyYXNoIHdoZW4KKyAgIDY0LWJpdCBjb3VudGVycyBpbiBpcFN5c3RlbVN0YXRzVGFibGUgZ2V0IGJpZ2dlciB0aGFuIDJeMzIKKworMjAwOS0wOC0wMyAxOToyNyAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI4Mjc3MjI6IGZyb20gIkJhcnQgVmFuIEFzc2NoZSI6IEltcHJvdmUKKyAgIHN0cnRvdWxsIHRvIGJlIGxlc3MgTVNWQy1zcGVjaWZpYworCisyMDA5LTA4LTAzIDE4OjM4ICBtYWdmcgorCisgICAqIG1hbi9NYWtlZmlsZS5pbjoKKworICAgcmVtb3ZlIGFuIG9ic29sZXRlIG1hbnVhbCBwYWdlIGZyb20gdGhlIHNldCBvZiBmaWxlcyB0aGF0IHNob3VsZAorICAgYmUgaW5zdGFsbGVkCisKKzIwMDktMDctMjcgMTI6NDEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDA5LTA3LTI3IDEyOjExICBoYXJkYWtlcgorCisgICAqIG1hbi9uZXRzbm1wX0NvbnRhaW5lcl9pdGVyYXRvci4zOgorCisgICByZW1vdmUgYW4gb2Jzb2xldGUgbWFudWFsIHBhZ2UKKworMjAwOS0wNy0yNyAxMjowMyAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvdC9idWxrd2Fsay50OgorCisgICBDSEFOR0VTOiBmcmVlYnNkOiBwYXRjaCBmcm9tIENlemFyeSBNb3JnYSB0byBmaXggYSBtYWtlIHRlc3Qgb24KKyAgIGZyZWVic2QKKworMjAwOS0wNy0yNyAxMjowMiAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wNy0yNyAxMTo1MiAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBORVdTLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wNy0yNyAwODozOSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4OgorCisgICByZXZlcnQgYWNjaWRlbnRpYWxseSBhcHBsaWVkIHBhdGNoCisKKzIwMDktMDctMjcgMDg6MzcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXgsIHRlc3RpbmcvdGVzdHMvVDM2MGR0bHN1ZHAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LmNlcnQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LnByaXYsIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLmNlcnQsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5wcml2OgorCisgICBhZGRlZCBhIHRlc3QgY2FzZSBmb3IgdWRwL2R0bHMKKworMjAwOS0wNy0yNyAwODozNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGRvbid0IHJlcXVpcmUgYSBzZXNzaW9uIHRvIGNhcnJ5IGEgc2VjTmFtZQorCisyMDA5LTA3LTI2IDIxOjM0ICBhbGV4X2IKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgV2luMzI6IE1TVkMgNiBjb21waWxlIGZpeGVzIGZvciBXb3Jrc3BhY2UgYnVpbGQuCisKKzIwMDktMDctMjYgMTg6MjAgIGFsZXhfYgorCisgICAqICBSRUFETUUud2luMzIsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3RydG91bGwuYywgICAKKyAgICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LmJhdCwgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGwsICAgCisgICAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2ksIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgLUFkZGVkIHN0cnRvdWxsIGZ1bmN0aW9uIGFuZCBjb25maWd1cmUgY2hlY2sgZm9yIHN5c3RlbXMgd2l0aG91dAorICAgaXQgc3VjaCBhcyBXaW4zMiBNU1ZDIDYKKyAgIC1XaW4zMjogTVNWQyA2IGNvbXBpbGUgZml4ZXMgLSByZXF1aXJlcyBuZXcgc3RydG91bGwuYyBmaWxlCisgICAtV2luMzI6IE5ldyBidWlsZC1iaW5hcnkgc2NyaXB0IHRvIHNpbXBsaWZ5IGJ1aWxkaW5nIHRoZSBXaW5kb3dzCisgICBiaW5hcnkgcGFja2FnZS4KKworMjAwOS0wNy0yNSAwNTozMSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdDoKKworICAgTWFrZSBzdXJlIGEgbWVzc2FnZSBpcyB3cml0dGVuIGlmIHRoZSByZWxldmFudCB0YWJsZSBpcyBtaXNzaW5nLgorCisyMDA5LTA3LTIzIDIxOjI5ICBhbGV4X2IKKworICAgKiBSRUFETUU6CisKKyAgIFVwZGF0ZSBlbWFpbCBhZGRyZXNzIGluIFJFQURNRS4KKworMjAwOS0wNy0yMyAwMTowNyAgYWxleF9iCisKKyAgICogIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcDoKKworICAgV2luMzIgTVNWQyAyMDA4KyBmaXhlcy4KKworMjAwOS0wNy0yMyAwMDo1NSAgYWxleF9iCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwOgorCisgICBXaW4zMiBNU1ZDIDIwMDUrIGJ1aWxkIGZpeGVzLiBUaGFua3MgdG8gQmFydCBWYW4gQXNzY2hlLgorCisyMDA5LTA3LTIxIDEyOjIyICBkdHMxMgorCisgICAqICBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZiwgbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgbG9jYWwvbWliMmMucm93LmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIEFkZCBzaW1wbGUgZGVidWcgb3V0cHV0IHRvIG1pYjJjIHRlbXBsYXRlcy4KKworMjAwOS0wNy0yMSAxMjoxMyAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIEZpeCBtaXNzaW5nIHNlbWljb2xvbiB0eXBvcy4KKworMjAwOS0wNy0yMSAwOToxNSAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIE5ldyBzdWdnZXN0ZWQgZW50cmllcy4KKworMjAwOS0wNy0yMCAxOToyNCAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFVwZGF0ZXMgdG8gQ09ESU5HIHNlY3Rpb24uCisKKzIwMDktMDctMjAgMTE6MDkgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIuaDoKKworICAgQWRkIG1pc3NpbmcgaGVhZGVyIGZpbGUgZnJvbSBwYXRjaCAjMjA1MzI3My4KKworMjAwOS0wNy0xOSAxNTowOSAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFVwZGF0ZXMgdG8gQ09NUElMSU5HIHNlY3Rpb24uCisKKzIwMDktMDctMTYgMTI6MzggIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jOgorCisgICBBZGQgSVB2NiBvY3RldCBjb3VudGVycy4KKyAgIE5ldyBMaW51eCBrZXJuZWxzIChlLmcuIDIuNi4zMS1yYzIsIG1heWJlIHNvbWUgZWFybGllcikgcHJvdmlkZQorICAgY291bnRlcnMgZm9yCisgICBpbmNvbWluZy9vdXRnb2luZyBJUHY2IHRyYWZmaWMgZm9yIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQKKyAgIGlwSWZTdGF0c1RhYmxlLgorCisyMDA5LTA3LTE1IDIyOjQ2ICB0YW5kZXJzCisKKyAgICogdGVzdGluZy90ZXN0cy9UMzUwdW5peDoKKworICAgcHV0IHRlbXBvcmFyeSBkYXRhIHRvIHdoZXJlIHRoZXkgYmVsb25nCisKKzIwMDktMDctMTEgMjE6NTAgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmU6CisKKyAgIHJlZ2VuZXJhdGUgY29uZmlndXJlCisKKzIwMDktMDctMTEgMjE6MDQgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgYnVpbGQgZml4IChlLmcuIGZvciBGcmVlQlNEKTogYWRqdXN0IGt2bSBjb25maWd1cmUgdGVzdHMKKworMjAwOS0wNy0xMCAxMjozNSAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDaGVjayBJUHY2IHBvcnQgcmFuZ2VzIGluIHRoZSBzYW1lIHdheSBhcyBJUHY0IHBvcnRzIGFyZSBjaGVja2VkLgorCisyMDA5LTA3LTEwIDA3OjQ2ICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGxvY2FsL21pYjJjOgorCisgICBGaXggYW5vdGhlciBJUHY0IGFkZHJlc3Mgc2l6ZSAtIGxvbmcgaGFzIDggYnl0ZXMgb24gNjRiaXQgTGludXguCisgICBBbHNvIGZpeCB0aGUgZGVmYXVsdCB0eXBlIGZvXkNBU05fSVBBRERSRVNTIGluIG1pYjJjLCBzbyB0aGUKKyAgIGlwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMgY2FuIGJlIHNhZmVseSByZWdlbmVyYXRlZC4KKworMjAwOS0wNy0wOSAyMzo0MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMzAwdWRwLCB0ZXN0aW5nL3Rlc3RzL1QzMTB0Y3AsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMjB1ZHB2NiwgdGVzdGluZy90ZXN0cy9UMzMwdGNwdjYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4OgorCisgICBjbGVhbnVwIG9mIHRlc3RpbmcgY2FzZXMgdG8gcmVtb3ZlIGRvdWJsZSBpbmNsdWRlIGFuZCBkb3VibGUKKyAgIGV4cG9ydHMKKworMjAwOS0wNy0wOSAyMzowNyAgdGFuZGVycworCisgICAqIHRlc3RpbmcvdGVzdHMvVDMwMHVkcDoKKworICAgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBUQ1AvSVB2NCB0ZXN0CisKKzIwMDktMDctMDkgMjI6MTggIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvU3RyYW5zcG9ydCwgdGVzdGluZy90ZXN0cy9UMzAwdWRwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzEwdGNwLCB0ZXN0aW5nL3Rlc3RzL1QzMjB1ZHB2NiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMzMHRjcHY2LCB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzk5YWxpYXM6CisKKyAgIG5ldyB0ZXN0cyBmb3IgdGVzdGluZyBkZWZpbmVkIHRyYW5zcG9ydHMKKworMjAwOS0wNy0wOSAyMjoxNyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1RFU1RDT05GLnNoLCB0ZXN0aW5nL2V2YWxfdG9vbHMuc2g6CisKKyAgIGEgQ09ORklHQVBQIG1hY3JvIGZvciBhZGRpbmcgc3R1ZmYgdG8gc25tcC5jb25mCisKKzIwMDktMDctMDggMTU6MTIgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBGaXggZ2V0aG9zdGJ5YWRkciBwYXJhbWV0ZXIsIG5ldHNubXBfdWRwX2ZtdGFkZHIgbmV2ZXIgcmV0dXJuZWQgYQorICAgaG9zdG5hbWUuCisKKzIwMDktMDctMDcgMTU6NDYgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmM6CisKKyAgIEZpeCBJUCBhZGRyZXNzIGxlbmd0aCBvbiA2NCBiaXQgc3lzdGVtcyBpbiBtaWJJSSwgcGFzcyBhbmQKKyAgIHBhc3NfcGVyc2lzdCBtb2R1bGVzLgorCisyMDA5LTA3LTA3IDE1OjI0ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOgorCisgICBVc2UgY29ycmVjdGx5IHNpemVkIElQIGFkZHJlc3NlcyBpbiBhZGRyZXNzIHRyYW5zbGF0aW9uIHRhYmxlCisgICBwcm9jZXNzaW5nIC0gdV9sb25nIGNhbiBtYWtlIHByb2JsZW1zIG9uIGJpbiBlbmRpYW4gNjQgYml0CisgICBzeXN0ZW1zCisKKzIwMDktMDYtMjkgMTM6NTIgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUzoKKworICAgcmVtb3ZlIGVudHJ5IGZvciBhIHBhdGNoIHRoYXQgZ290IHJldmVydGVkCisKKzIwMDktMDYtMjUgMTU6MjQgIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBNb3ZlIG5vbi1jb3JlIGRhdGEgdHlwZXMgaW50byBhIHNlcGFyYXRlIChsaWJyYXJ5IGludGVybmFscykKKyAgIGhlYWRlciBmaWxlLgorICAgTW92ZSB0aGUgbGFyZ2VfZmRfc2V0IGRhdGEgc3RydWN0dXJlIGludG8gdGhpcyBoZWFkZXIgZmlsZS4KKworMjAwOS0wNi0xOCAyMjoyOSAgdGFuZGVycworCisgICAqIGFnZW50L3NubXBfcGVybC5jOgorCisgICBDSEFOR0VTOiBidWlsZDogYWxsb3cgYnVpbGRpbmcgd2l0aCBQZXJsIHZlcnNpb25zIHRoYXQgbGFjaworICAgUEVSTF9FWElUX0RFU1RSVUNUX0VORAorCisyMDA5LTA2LTE4IDIyOjEzICB0YW5kZXJzCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9pZi5jOgorCisgICBDSEFOR0VTOiBidWlsZDogYnVpbGQgZml4IGZvciBUcnU2NCBVbml4IGFuZCBJUklYOiBtb3ZlIF9YT1BFTioKKyAgIGRlZmluaXRpb25zIHRvIHdoZXJlIHRoZXkgYXJlIGluIDUuNC54IGFuZCBlYXJsaWVyCisKKzIwMDktMDYtMTggMDY6MDIgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENsZWFuIHVwIC0td2l0aC1ubCBjb25maWd1cmF0aW9uCisgICAqICBNb3ZlIHRoZSBfQVJHX1dJVEggdG8gY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUgIDIwMDktMDYtMTYgMTU6MTcKKyAgICAgICByc3RvcnkKKworCisgICAqIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIGNoZWNrIGZvciBudWxsIHBvaW50ZXIgYmVmb3JlIGRlcmVmCisKKzIwMDktMDYtMTUgMjM6NTIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgYWRkIGNvbW1lbnQgZXhwbGFpbmluZyBub3QgcXVpdGUgb2J2aW91cyBsYWNrIG9mIG1lbW1vdmUKKworMjAwOS0wNi0xNSAxOTozMiAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIFJlbW92ZSAjaWYgMCBjb21tZW50ZWQgY29kZQorCisyMDA5LTA2LTE1IDE1OjI1ICBkdHMxMgorCisgICAqIEZBUToKKworICAgVXBkYXRlcyB0byBBR0VOVCBzZWN0aW9uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjUucHJlMiAtPiBWNS41LnByZTMKKworMjAwOS0wNi0xMyAwMToxMiAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI1NjQ1NTI6IGZyb20gYWhtYWtlOiBwcm92aWRlIGxpYm5ldGxpbmsKKyAgIHN1cHBvcnQgZm9yIGxvYWRpbmcgdGhlIHRjcCB0YWJsZQorCisyMDA5LTA2LTEyIDE5OjAyICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNDAwMTAxOiByZW1vdmUgZGVsZXRlZCBpbnRlcmZhY2VzIGZyb20KKyAgIGlmVGFibGUKIAogMjAwOS0wNi0xMSAyMzowOSAgaGFyZGFrZXIKIApAQCAtMzc0NCwxOSArNjQwNTAsMzYgQEAKICAgICAgIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgsICAgCiAgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3A6CiAKLSAgIENIQU5HRVM6IHdpbjMyOiBQQVRDSDogMjY5Mzc0NjogZnJvbSBidmFzc2NoZTogaW1wcm92ZWQgc29ja2V0IHN0YXJ0dXAgc3VwcG9ydAorICAgQ0hBTkdFUzogd2luMzI6IFBBVENIOiAyNjkzNzQ2OiBmcm9tIGJ2YXNzY2hlOiBpbXByb3ZlZCBzb2NrZXQKKyAgIHN0YXJ0dXAgc3VwcG9ydAogCiAyMDA5LTA2LTExIDIyOjU3ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMDEyNDAyOiBkb24ndCBmYWlsIG9uIGZhaWx1cmUgdG8gbG9vayB1cCBpbnRlcmZhY2UgZXJyb3IgY291bnRlcnMuCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIwMTI0MDI6IGRvbid0IGZhaWwgb24gZmFpbHVyZSB0byBsb29rIHVwCisgICBpbnRlcmZhY2UgZXJyb3IgY291bnRlcnMuCisKKzIwMDktMDYtMTEgMjI6MDMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICByZXZlcnQgcHJldmlvdXMgY29tbWl0IHRvIG1ha2UgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGJhY2sgdG8KKyAgIHRoZWlyIHJlZ3VsYXIgaW5zYW5lIG9yZGVyaW5nOyBJIGRvbid0IGxpa2UgdGhpcyBzaXR1YXRpb24gYXQgYWxsCisKKzIwMDktMDYtMTEgMjE6NDIgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBpbmNsdWRlIGxhcmdlX2ZkX3NldC5oIGJlZm9yZSB0eXBlZGVmaW5nIHNvbWV0aGluZyBiYXNlZCBvbiB0aGUKKyAgIHN0cnVjdHVyZQogCiAyMDA5LTA2LTAzIDEyOjM1ICBkdHMxMgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgogCi0gICBDSEFOR0VTOiBwZXJsOiBQQVRDSEVTOiAyNzkzODU3OiBSZXBvcnQgZmFpbGVkIGFzeW5jaHJvbm91cyByZXF1ZXN0cy4KKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIRVM6IDI3OTM4NTc6IFJlcG9ydCBmYWlsZWQgYXN5bmNocm9ub3VzCisgICByZXF1ZXN0cy4KIAogMjAwOS0wNi0wMyAxMTo0NiAgZHRzMTIKIApAQCAtMzc2OSw3ICs2NDA5Miw4IEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jOgogCi0gICBQQVRDSDogMjE4MjU5MjogQ2xlYW4gdXAgdmFjbUNvbnRleHRUYWJsZSBhZnRlciB1bnJlZ2lzdHJhdGlvbnMKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjE4MjU5MjogQ2xlYW4gdXAgdmFjbUNvbnRleHRUYWJsZSBhZnRlcgorICAgdW5yZWdpc3RyYXRpb25zCiAgICBQYXRjaCBzdXBwbGllZCBieSBKb2huIEZvcnN5dGgKIAogMjAwOS0wNi0wMyAxMDoxMiAgZHRzMTIKQEAgLTM3ODAsMTggKzY0MTA0LDIxIEBACiAgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCiAgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcHYzLmM6CiAKLSAgIENIQU5HRVM6IFBBVENIOiAyNzk3MjUxOiBTdXBwb3J0IG11bHRpcGxlIGluaXRpYWxpc2F0aW9uIGFuZCBzaHV0ZG93biwgZml4IG1lbW9yeSBsZWFrcworICAgQ0hBTkdFUzogUEFUQ0g6IDI3OTcyNTE6IFN1cHBvcnQgbXVsdGlwbGUgaW5pdGlhbGlzYXRpb24gYW5kCisgICBzaHV0ZG93biwgZml4IG1lbW9yeSBsZWFrcwogICAgUGF0Y2ggc3VwcGxpZWQgYnkgSXZvc2gKIAogMjAwOS0wNi0wMSAxNTo1MyAgZHRzMTIKIAogICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKIAotICAgQ0hBTkdFUzogZG9jczogUEFUQ0hFUzogMjc4ODA3MjogRG9jdW1lbnQgJ2xvZ21hdGNoJyBmdW5jdGlvbmFsaXR5LgorICAgQ0hBTkVHUzogZG9jczogUEFUQ0hFUzogMjc4ODA3MjogRG9jdW1lbnQgJ2xvZ21hdGNoJworICAgZnVuY3Rpb25hbGl0eS4KIAogMjAwOS0wNi0wMSAxNTo1MCAgZHRzMTIKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCBzbm1wbGliL21pYi5jLCAgIAorICAgICAgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsICAgCiAgICAgICBzbm1wbGliL3N5c3RlbS5jLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKICAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCkBAIC0zNzk5LDE3ICs2NDEyNiwzMiBAQAogCiAyMDA5LTA2LTAxIDE1OjM3ICBkdHMxMgogCi0gICAqICBhY2xvY2FsLm00LCBjb25maWd1cmUsIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL21vbml0b3IsICAgCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wc3RhdC5jLCBjb25maWd1cmUsICAgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9tb25pdG9yLCBtNC9saWJ0b29sLm00LCAgIAogICAgICAgbWFuL3NubXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wZC5leGFtcGxlcy41LmRlZjoKIAotICAgQ0hBTkdFUzogZG9jczogUEFUQ0g6IDI3OTU3Mzk6IEZpeCBpbmNvcnJlY3QgZGlzay9maWxlIHNpemUgZGVzY3JpcHRpb25zICYgdW5pdCBzcGVjaWZpZXJzCisgICBDSEFOR0VTOiBkb2NzOiBQQVRDSDogMjc5NTczOTogRml4IGluY29ycmVjdCBkaXNrL2ZpbGUgc2l6ZQorICAgZGVzY3JpcHRpb25zICYgdW5pdCBzcGVjaWZpZXJzCiAKIDIwMDktMDYtMDEgMTM6MTEgIGR0czEyCiAKICAgICogRVhBTVBMRS5jb25mLmRlZjoKIAogICAgUmV3b3JrIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIHRvIG1hdGNoIGN1cnJlbnQgc25tcGQuY29uZig1KQotICAgc3RydWN0dXJlLCBhbmQgbW9yZSBjbGVhcmx5IGlsbHVzdHJhdGUgY3VycmVudCBiZXN0IHByYWN0aXNlLgorICAgc3RydWN0dXJlLAorICAgYW5kIG1vcmUgY2xlYXJseSBpbGx1c3RyYXRlIGN1cnJlbnQgYmVzdCBwcmFjdGlzZS4KKworMjAwOS0wNS0zMCAwNjo1OCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJfbW9kdWxlcy5jOgorCisgICBSZW1vdmUgdW51c2VkIGluY2x1ZGUuCiAKIDIwMDktMDUtMjkgMDk6MTQgIGR0czEyCiAKQEAgLTM4MTksMTggKzY0MTYxLDQyIEBACiAKIDIwMDktMDUtMjkgMDk6MDggIGR0czEyCiAKLSAgICogbG9jYWwvcGFzc3Rlc3QucGwsIG1pYnMvTWFrZWZpbGUuaW4sIG1pYnMvTkVULVNOTVAtUEFTUy1NSUIudHh0OgorICAgKiAgbG9jYWwvcGFzc3Rlc3QsIGxvY2FsL3Bhc3N0ZXN0LnBsLCBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgbWlicy9ORVQtU05NUC1QQVNTLU1JQi50eHQ6CiAKICAgIFJld29yayAicGFzc3Rlc3QiIGV4YW1wbGVzIHRvIGZ1bGx5IHZhbGlkYXRlIEdFVE5FWFQgcmVxdWVzdHMsCiAgICBhbmQgdXNlIGEgbGVnaXRpbWF0ZSBNSUIgc3RydWN0dXJlIGZvciBvdXRwdXQuCiAgICBBZGQgYW4gZXhhbXBsZSBNSUIgdG8gZGVmaW5lIHRoYXQgc3RydWN0dXJlLgogCi0yMDA5LTA1LTI4IDEyOjU1ICBkdHMxMgorMjAwOS0wNS0yOCAxMjo0MSAgZHRzMTIKIAogICAgKiBGQVE6CiAKLSAgIFN5bmNocm9uaXNlIHdpdGggbGF0ZXN0IEZBUQotICAgKGluY2x1ZGluZyA1LjUgcmV2aXNpb25zIHVwIHRvIE1JQnMgc2VjdGlvbikKKyAgIFVwZGF0ZXMgdG8gTUlCcyBzZWN0aW9uCisKKzIwMDktMDUtMjggMTE6NTYgIGR0czEyCisKKyAgICogRkFROgorCisgICBUd2VhayBwaHJhc2luZyBvZiBhbiAob3ZlcmxvbmcpIHF1ZXN0aW9uIGluIHRoZSBQZXJsIHNlY3Rpb24KKworMjAwOS0wNS0yOCAxMTozMSAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIE5ldyBlbnRyeSBpbiB0aGUgQXBwbGljYXRpb25zIHNlY3Rpb24KKworMjAwOS0wNS0yOCAxMDo0MSAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFVwZGF0ZXMgdG8gQXBwbGljYXRpb25zIHNlY3Rpb24KKworMjAwOS0wNS0yNyAxNToyNiAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFVwZGF0ZXMgdG8gR0VORVJBTCBzZWN0aW9uLgogCiAyMDA5LTA1LTE5IDE3OjUwICBhbGV4X2IKIApAQCAtMzg0OSw3ICs2NDIxNSw5IEBACiAKICAgICogc25tcGxpYi9zY2FwaS5jOgogCi0gICBDSEFOR0VTOiBidWlsZDogQlVHOiAyNzgyNzAwOiBidWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcgLS13aXRoLXBrY3Mgb24gU29sYXJpcworICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMjc4MjcwMDogYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nCisgICAtLXdpdGgtcGtjcyBvbgorICAgU29sYXJpcwogCiAyMDA5LTA1LTE1IDE0OjU5ICBqc2FmcmFuZWsKIApAQCAtMzg3MSwyOSArNjQyMzksNTAgQEAKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IEFsbG93ICJtb25pdG9yIiB0byBoYW5kbGUgbmVnYXRpdmUgdGhyZXNob2xkIHZhbHVlcy4KKyAgIENIQU5HRVM6IHNubXBkOiBBbGxvdyAibW9uaXRvciIgdG8gaGFuZGxlIG5lZ2F0aXZlIHRocmVzaG9sZAorICAgdmFsdWVzLgogICAgUmVwb3J0ZWQgYnkgUmljaGFyZCBHaXBwcy4KIAogMjAwOS0wNS0xMyAyMjozMiAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvdmFjbS5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI3OTE0MTc6IGZpeCBzbm1wZCBzZWdmYXVsdCB3aGVuIHJ1biB3aXRoIC1EQUxMCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI3OTE0MTc6IGZpeCBzbm1wZCBzZWdmYXVsdCB3aGVuIHJ1biB3aXRoCisgICAtREFMTAogICAgUGF0Y2ggc3VwcGxpZWQgYnkgUm9uIFJvc2tlbnMuCiAKIDIwMDktMDUtMTMgMDg6MDIgIGR0czEyCiAKICAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CiAKLSAgIEJyaW5nIGRvY3VtZW50YXRpb24gb2Ygbm90aWZpY2F0aW9uRXZlbnQgc3ludGF4IGludG8gbGluZSB3aXRoIHJlYWxpdHkuCi0gICAoVXNlcyAiLW0iIHJhdGhlciB0aGFuICItbiIgdG8gcmVnaXN0ZXIgc3RhbmRhcmQgTUlCIHBheWxvYWQgb2JqZWN0cykKKyAgIEJyaW5nIGRvY3VtZW50YXRpb24gb2Ygbm90aWZpY2F0aW9uRXZlbnQgc3ludGF4IGludG8gbGluZSB3aXRoCisgICByZWFsaXR5LgorICAgKFVzZXMgIi1tIiByYXRoZXIgdGhhbiAiLW4iIHRvIHJlZ2lzdGVyIHN0YW5kYXJkIE1JQiBwYXlsb2FkCisgICBvYmplY3RzKQogICAgSW5jb25zaXN0ZW5jeSByZXBvcnRlZCBieSBSaWNoYXJkIEdpcHBzLgogCi0yMDA5LTA1LTEyIDIzOjI2ICBhbGV4X2IKKzIwMDktMDUtMTAgMjE6MTIgIGFsZXhfYgogCi0gICAqIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsIHBlcmwvYWdlbnQvYWdlbnQueHM6CisgICAqICB3aW4zMi9NYWtlZmlsZS1hcHBzLmluLCB3aW4zMi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkc2RrL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjoKIAotICAgV2luMzI6IEJ1aWxkIGZpeGVzIC0gY2hhbmdlIHVuc2lnbmVkIGxvbmcgbG9uZyB0byB1aW50NjRfdC4KKyAgIFdpbjMyOiBBZGRlZCBhdXRvbWF0aWMgbWFuaWZlc3QgbWVyZ2luZyB3aXRoIG10LmV4ZSBmb3IgTVNWQyAyMDA4CisgICBldGMuCisKKzIwMDktMDUtMDggMTM6MTIgIGFsZXhfYgorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBDaGFuZ2VzOiBXaW4zMjogQWRkIHN1cHBvcnQgZm9yIFdpbmRvd3MgNywgVmlzdGEgYW5kIDIwMDggZm9yCisgICB3aW5FeHRETEwuCisKKzIwMDktMDUtMDggMDI6MDcgIGFsZXhfYgorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgV2luMzI6IEJ1aWxkIGZpeGVzIGZvciBETEwuCiAKIDIwMDktMDUtMDcgMjM6MDAgIHRhbmRlcnMKIApAQCAtMzkwMSwxNyArNjQyOTAsMzE1IEBACiAKICAgIGJ1aWxkIGZpeCBmb3IgSFAtVVg6IGluY2x1ZGUgPHN5cy9wYXJhbS5oPiBmb3IgREVWX0JTSVpFCiAKKzIwMDktMDUtMDcgMDU6MTEgIG5iYQorCisgICAqIGFnZW50L3NubXBfcGVybC5oOgorCisgICBVcHMsIG1pc3NlZCBhIG5ldyBwcm90b3R5cGUgaGVhZGVyCisKKzIwMDktMDUtMDYgMjI6MjYgIG5iYQorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBBIG1hbiBsaW5lIGNhbm5vdCBzdGFydCB3aXRoIGEgJworCisyMDA5LTA1LTA2IDIyOjA3ICBuYmEKKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIElQdjYgYWRyZXNzZXMgYXJlIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgdGhlbiAzMmJpdHMKKworMjAwOS0wNS0wNiAyMjowNiAgbmJhCisKKyAgICogIGFnZW50L2FnZW50X3N5c09SVGFibGUuYywgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oLCBzbm1wbGliL29pZF9zdGFzaC5jOgorCisgICBTcHJpbmtsZSBzb21lIGNvbnN0LW5lc3Mgd2hlcmUgcmVsZXZhbnQKKworMjAwOS0wNS0wNiAyMjowMiAgbmJhCisKKyAgICogc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgVHJpdmlhbCB3YXJuaW5nIGZpeGVzCisKKzIwMDktMDUtMDYgMjI6MDAgIG5iYQorCisgICAqIG1pYnMvcmZjbWlicy5kaWZmOgorCisgICBIbW1tLCBJQU5BIGZpeGVkIHRoZWlyIGJ1ZyB0b28KKworMjAwOS0wNS0wNiAyMTo1OSAgbmJhCisKKyAgICogUkVBRE1FOgorCisgICBVcGRhdGUgZW1haWwgdG8gY3VycmVudAorCisyMDA5LTA1LTA2IDIxOjU5ICBuYmEKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jLCAgIAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBhZ2VudC9zbm1wX3BlcmwuYywgYWdlbnQvc25tcF92YXJzLmMsICAgCisgICAgICBhZ2VudC9zbm1wZC5jLCBwZXJsL1NOTVAvU05NUC54cywgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMsIAorICAgICAgICBzbm1wbGliL3NubXBfc2VydmljZS5jOgorCisgICBUcml2aWFsIHdhcm5pbmcgZml4ZXMKKworMjAwOS0wNS0wNiAyMTo0OSAgbmJhCisKKyAgICogYXBwcy9zbm1wdHJhcGRfbG9nLmM6CisKKyAgIGNvbnRleHRFbmdpbmVJRCBpcyBhIGhleHN0cmluZywgbm90IGFuIG9iamVjdCBpZGVudGlmaWVyCisKKzIwMDktMDUtMDYgMjE6NDUgIG5iYQorCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYywgYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMsICAgCisgICAgICBzbm1wbGliL2FzbjEuYywgc25tcGxpYi9kaXJfdXRpbHMuYywgc25tcGxpYi9pbnQ2NC5jLCAgIAorICAgICAgc25tcGxpYi9taWIuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wdXNtLmMsICAgCisgICAgICBzbm1wbGliL3NubXB2My5jOgorCisgICBGaXggZm9ybWF0IHdhcm5pbmdzIGZyb20gZGVidWcgb3V0cHV0CisKKzIwMDktMDUtMDYgMjA6NDUgIG5iYQorCisgICAqIG1pYnMvc21pc3RyaXA6CisKKyAgIFByb3Blcmx5IHJlY29nbml6ZSBtZXNzYWdlIHN5bnRheCBtb2R1bGVzICh0byBiZSBhYmxlIHRvIGlnbm9yZQorICAgdGhlbSkKKworMjAwOS0wNS0wNiAyMDozNiAgbmJhCisKKyAgICogbWlicy9yZmNsaXN0OgorCisgICBSRkMgdXBkYXRlcworCisyMDA5LTA1LTA2IDIwOjM1ICBuYmEKKworICAgKiBtaWJzL3JmY21pYnMuZGlmZjoKKworICAgU3ludGF4IGZpeCBmb3IgY3VycmVudCBJQU5BLVBSSU5URVItTUlCCisKKzIwMDktMDUtMDYgMjA6MzQgIG5iYQorCisgICAqIG1pYnMvSUFOQWlmVHlwZS1NSUIudHh0OgorCisgICBVcGRhdGUgdG8gY3VycmVudCBJQU5BIHZlcnNpb24KKworMjAwOS0wNS0wNCAxMzo0NyAgYWxleF9iCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBXaW4zMjogQnVpbGQgZml4ZXMgZm9yIERMTC4KKworMjAwOS0wNS0wMSAxNTo0MyAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgTkVXUzogc25tcGxpYjogU3RvcCB1c2luZyBhIGZpeGVkIHN0cmluZyBmb3IgaW5kZW50YXRpb24uIFJlbW92ZQorICAgdGhlIERFQlVHSU5ERU5UKCkgbWFjcm8gKHRoYXQgZGlkIG5vdGhpbmcpLiBDaGFuZ2UgdGhlIG1lYW5pbmcgb2YKKyAgIHRoZSBpbnRlcm5hbCBfX0RCR0lOREVOVCgpIG1hY3JvIHRvIHJldHVybiB0aGUgbnVtYmVyIG9mIHNwYWNlcworICAgdG8gaW5kZW50IGluc3RlYWQgb2YgYSBzdHJpbmcgdGhhdCByZXByZXNlbnQgdGhlIGluZGVudGF0aW9uCisgICBsZXZlbC4gRGVwcmVjYXRlIHRoZSBkZWJ1Z19pbmRlbnQgZnVuY3Rpb24uCisKKzIwMDktMDQtMzAgMDY6NTcgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgbG9jYWwvbWliMmMuaW50X3dhdGNoLmNvbmY6CisKKyAgIENIQU5HRVM6IHNubXBkOiBVc2Ugc3RhdGljIHdhdGNoZXJfaW5mbyBmb3IgYWxsIHdhdGNoZWQgdmFyaWFibGVzCisgICBhbmQgaW4gaW50X3dhdGNoLgorCisyMDA5LTA0LTMwIDA2OjQxICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogU2VwYXJhdGUgaW5pdGlhbGl6YXRpb24gZnJvbSBhbGxvY2F0aW9uIGZvcgorICAgbmV0c25tcF93YXRjaGVyX2luZm8gc3RydWN0dXJlcyB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHVzZQorICAgc3RhdGljYWxseSBhbGxvY2F0ZWQgZGF0YS4KKworMjAwOS0wNC0zMCAwNjozNCAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIEFkZCBtaXNzaW5nIHJldHVybiB2YWx1ZS4KKworMjAwOS0wNC0zMCAwMDoxOCAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgZG9jdW1lbnQgdGhlIERUTFMgc3VwcG9ydDsgc2VtaSBkb2N1bWVudCB0aGUgU1NIIHN1cHBvcnQgYW5kCisgICBkb2N1bWVudCB0aGUgLXMgc3dpdGNoIHRvIG1hbnkgVkFDTSBzZXR0aW5ncworCisyMDA5LTA0LTI5IDIzOjU0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcHJvdGVjdCBhZ2FpbnN0IGNvbm5lY3Rpb24gb3BlbmluZyBlcnJvcnMgYW5kIGZyZWUgbWVtb3J5IG9uCisgICBmYWlsdXJlcworCisyMDA5LTA0LTI5IDEyOjE5ICBhbGV4X2IKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luMzI6IFVwZGF0ZSBkZWZpbmVzIGZvciBfV0lOMzJfV0lOTlQgYW5kIE5URERJX1ZFUlNJT04gdG8KKyAgIHN1cHBvcnQgV2luZG93cyAyMDAwIGFuZCBoaWdoZXIgYW5kIGFkZCBJUFY2IGRlZmluZSB0byBhbGxvdyBJUFY2CisgICBjb2RlIHRvIGNvbXBpbGUuCisKKzIwMDktMDQtMjggMDY6MzQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmM6CisKKyAgIHNubXBkLCBMaW51eDogUmVtb3ZlIHNvbWUgdW51c2VkIHZhcmlhYmxlcy4KKworMjAwOS0wNC0yOCAwNjowNyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jOgorCisgICBzbm1wZDogQWRkIG1pc3NpbmcgYXJndW1lbnQgdG8gcHJpbnRmLWxpa2UgY2FsbC4KKworMjAwOS0wNC0yOCAwNTo1MyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmM6CisKKyAgIHNubXBkOiBNYXJrIG1vcmUgb2lkcyBhcyBjb25zdC4KKworMjAwOS0wNC0yOCAwNTo1MSAgbWFnZnIKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBSZXR1cm4gYSB2YWx1ZSBmcm9tIHNwcmludF9yZWFsbG9jX3ZhbHVlIGV2ZW4gaWYgbm8gc3VidHJlZSBpcworICAgbG9jYXRlZC4KKworMjAwOS0wNC0yOCAwMToxMiAgYWxleF9iCisKKyAgICogIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW4zMjogTVNWQzogT25seSB1c2UgV2luZG93cyBBUEkgZnVuY3Rpb25zIGF2YWlsYWJsZSBvbiBXaW5YUCBvcgorICAgYmVmb3JlIChJUFY2KSBvciAyMDAwIG9yIGJlZm9yZSAobm8gSVBWNikuCisKKzIwMDktMDQtMjYgMjM6MzAgIGFsZXhfYgorCisgICAqICB3aW4zMi9NYWtlZmlsZS1hcHBzLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wZHNkay9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46CisKKyAgIFdpbjMyOiBSZW1vdmUgbWFjaGluZSB0eXBlIG9mIEkzODYgZnJvbSBMSU5LMzJfRkxBR1MgdG8gYWxsb3cKKyAgIGNvbXBpbGluZyB3aXRoIE1TVkMgMjAwOCBhcyBlaXRoZXIgMzIgb3IgNjQtYml0LgorCisyMDA5LTA0LTI2IDE3OjM4ICBhbGV4X2IKKworICAgKiAgd2luMzIvTWFrZWZpbGUtYXBwcy5pbiwgd2luMzIvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZHNkay9NYWtlZmlsZS5pbiwgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBCdWlsZCBmaXhlcyBmb3IgTVNWQyAyMDA4LiBDb3B5IGFuZCBjbGVhbnVwCisgICBtYW5pZmVzdCBmaWxlcy4KKworMjAwOS0wNC0yNiAxNToyMSAgYWxleF9iCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luMzI6IFJlLWVuYWJsZSBwYXNzIGFuZCBwYXNzX3BlcnNpc3QgQ291bnRlcjY0IGZvciBNU1ZDLgorCisyMDA5LTA0LTI2IDE0OjM0ICBhbGV4X2IKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5oLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsIHdpbjMyL2J1aWxkLnBsLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IEJ1aWxkIGZpeGVzIGZvciBNU1ZDIDIwMDguIElGVFlQRSBpcyBkZWZpbmVkIGJ5CisgICBNU1ZDIDIwMDgsIHNvIGludGVyZmFjZXMuYyB2YXJpYWJsZXMgd2VyZSBjaGFuZ2VkIHRvIE5FVFNOTVBfLgorCiAyMDA5LTA0LTI2IDEzOjA2ICBhbGV4X2IKIAogICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKIAogICAgV2luMzI6IFVwZGF0ZSBidWlsZCBpbnN0cnVjdGlvbnMgaW4gY29tbWVudHMuCiAKKzIwMDktMDQtMjQgMTM6MjggIGhhcmRha2VyCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgZml4IHRoZSBBU05fT1BBUVVFIHBhdGNoIHRoYXQgd2FzIGNvbW1pdGVkIHdpdGhvdXQgcHJvcGVyIGRpZmYKKyAgIGNvbnRleHQKKwogMjAwOS0wNC0yNCAwNzozMSAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNDoKIAotICAgQ0hBTkdFUzogSFAtVVg6IEJVRzogMjc3OTQ3MjogRmlsZXN5c3RlbXMgbWlzc2luZyBpbiBoclN0b3JhZ2UgdGFibGUgb24gSFAtVVggMTEuMzEKKyAgIENIQU5HRVM6IEhQLVVYOiBCVUc6IDI3Nzk0NzI6IEZpbGVzeXN0ZW1zIG1pc3NpbmcgaW4gaHJTdG9yYWdlCisgICB0YWJsZSBvbiBIUC1VWCAxMS4zMQogICAgKGFsbG93IGZvciBtbnR0YWIgdGhhdCBpcyBhIGNoYXJhY3RlciBzcGVjaWFsIGRldmljZSkKIAogMjAwOS0wNC0yNCAwMTozNiAgYWxleF9iCkBAIC0zOTIxLDE4ICs2NDYwOCw3OCBAQAogCiAgICBDSEFOR0VTOiBXaW4zMjogQlVHOiAyNzc5NTQxIEZpeGVkIGhhbmRsZSBsZWFrIGluIHBhc3NfcGVyc2lzdC4KIAotMjAwOS0wNC0yMyAyMzoxNCAgdGFuZGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgotCi0gICBDSEFOR0VTOiBBSVg6IEJVRzogMjcxMjY3MDogQWdlbnQgY3Jhc2hlcyBvbiBBSVggd2l0aCBoclN0b3JhZ2UKK0NoYW5nZXM6IFY1LjUucHJlMSAtPiBWNS41LnByZTIKIAogMjAwOS0wNC0yMyAyMjo1MyAgaGFyZGFrZXIKIAotICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYzoKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oLCBzbm1wbGliL3NubXBfYWxhcm0uYzoKIAogICAgZml4IEMrKyBzdHlsZSBjb21tZW50cwogCisyMDA5LTA0LTIzIDIyOjI1ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA0LTIzIDIyOjIzICBoYXJkYWtlcgorCisgICAqICBtYW4vY29uZmlnX2FwaS4zLCBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgICAKKyAgICAgIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICBpbml0aWFsIGRveHlnZW4gZXh0cmFjdHMgZm9yIHRoZSBuZXcgaGVhZGVycworCisyMDA5LTA0LTIzIDIyOjE5ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCiAyMDA5LTA0LTIzIDIyOjE2ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmM6CkBAIC0zOTQxLDI4ICs2NDY4OCw5MSBAQAogCiAyMDA5LTA0LTIzIDIyOjEwICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0OgogCi0gICBDSEFOR0VTOiBIUC1VWDogQlVHOiAyNzc5NDcyOiBGaWxlc3lzdGVtcyBtaXNzaW5nIGluIGhyU3RvcmFnZSB0YWJsZSBvbiBIUC1VWCAxMS4zMQorICAgQ0hBTkdFUzogSFAtVVg6IEJVRzogMjc3OTQ3MjogRmlsZXN5c3RlbXMgbWlzc2luZyBpbiBoclN0b3JhZ2UKKyAgIHRhYmxlIG9uCisgICBIUC1VWCAxMS4zMQogCiAyMDA5LTA0LTIzIDIxOjQ4ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jOgogCi0gICBDSEFOR0VTOiBTb2xhcmlzOiBQQVRDSDogMjc1MTU4ODogSW5jb25zaXN0ZW50IGRhdGEgKGUuZy4gVURQL1RDUCBNSUIgc2NhbGFyIHZhbHVlcyBvZiB6ZXJvKSBjYW4gYmUgcmVwb3J0ZWQgb24gU29sYXJpcyAxMFU0KworICAgQ0hBTkdFUzogU29sYXJpczogUEFUQ0g6IDI3NTE1ODg6IEluY29uc2lzdGVudCBkYXRhIChlLmcuIFVEUC9UQ1AKKyAgIE1JQgorICAgc2NhbGFyIHZhbHVlcyBvZiB6ZXJvKSBjYW4gYmUgcmVwb3J0ZWQgb24gU29sYXJpcyAxMFU0KwogICAgUGF0Y2ggcHJvdmlkZWQgYnkgQW5kZXJzIFBlcnNzb24KIAorMjAwOS0wNC0yMyAxNzozMCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmg6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTkwMTc2NDogZnJvbSBrcmlzenRvZm9ybyBmb3Igc3VwcG9ydGluZworICAgbG9nd2F0Y2ggZmlsZXMgdGhhdCBhcmUgZGF0ZSBiYXNlZAorCisyMDA5LTA0LTIzIDE3OjIyICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1NOTVAvU05NUC54czoKKworICAgTkVXUzogcGVybDogUEFUQ0ggMTk1NjE5MzogZnJvbSBjYWNveWxlOiBiZXRhIHRocmVhZGFibGUgcGVybAorICAgbW9kdWxlIGNvZGUgZm9yIFNOTVB2MS9TTk1QdjJjIHVzYWdlLgorCiAyMDA5LTA0LTIzIDE2OjU3ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYzoKIAotICAgQ0hBTkdFUzogc29sYXJpczogUEFUQ0g6IDIwMTI0MDQ6IGRlYWwgd2l0aCBtb3JlIHRoYW4gMTAgaW50ZXJmYWNlcy4gTmV3IGhhcmRjb2RlZCBsaW1pdCBpcyA1MC4gQSBiZXR0ZXIgc2NhbGluZyBwYXRjaCB3b3VsZCBiZSBhcHByZWNpYXRlZCA6LSkKKyAgIENIQU5HRVM6IHNvbGFyaXM6IFBBVENIOiAyMDEyNDA0OiBkZWFsIHdpdGggbW9yZSB0aGFuIDEwCisgICBpbnRlcmZhY2VzLiBOZXcgaGFyZGNvZGVkIGxpbWl0IGlzIDUwLiBBIGJldHRlciBzY2FsaW5nIHBhdGNoCisgICB3b3VsZCBiZSBhcHByZWNpYXRlZCA6LSkKKworMjAwOS0wNC0yMyAxNjo0NyAgaGFyZGFrZXIKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBkb2N1bWVudCB0aGF0IHRoZSBldGhlcmxpa2UtbWliIGhhcyBhbiBpbXBsZW1lbnRhdGlvbgorCisyMDA5LTA0LTIzIDE2OjQwICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2VzcywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZW51bXMuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9vaWRzLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAyMDUzMjczOiBmcm9tIG5hcmVuZHJhX2tfZGVsbCB0byBpbWxwZW1lbnQKKyAgIHRoZSBldGhlcmxpa2UgbWliIChhdCBsZWFzdCBvbiBsaW51eCkKIAogMjAwOS0wNC0yMyAxNjozNSAgaGFyZGFrZXIKIAogICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1vaWRzLm0yYzoKIAotICAgQ0hBTkdFUzogbWliMmM6IFBBVENIOiAyMTM2NDM3OiBtYWtlIEZMQUcgZGVmaW5lcyBtb3JlIDY0Yml0IGZyaWVuZGx5IHdoZW4gaHVnZSB0YWJsZXMgYXJlIGVuY291bnRlcmVkCisgICBDSEFOR0VTOiBtaWIyYzogUEFUQ0g6IDIxMzY0Mzc6IG1ha2UgRkxBRyBkZWZpbmVzIG1vcmUgNjRiaXQKKyAgIGZyaWVuZGx5IHdoZW4gaHVnZSB0YWJsZXMgYXJlIGVuY291bnRlcmVkCiAKIDIwMDktMDQtMjMgMTY6MjcgIGhhcmRha2VyCiAKQEAgLTM5NzUsMTMgKzY0Nzg1LDE1IEBACiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50LnB5OgogCi0gICBDSEFOR0VTOiBweXRob246IFBBVENIOiAyMDc0ODE3OiBmcm9tIGZlbm5lciB0byBmaXggcmVnZXhwIGVuZ2luZSBDUFUgcGVyZm9ybWFuY2UgaXNzdWVzCisgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAyMDc0ODE3OiBmcm9tIGZlbm5lciB0byBmaXggcmVnZXhwIGVuZ2luZQorICAgQ1BVIHBlcmZvcm1hbmNlIGlzc3VlcwogCiAyMDA5LTA0LTIzIDE2OjE0ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIxNjI2NTI6IHBhdGNoIHRvIGZpeCBzaW1wbGUgaHJmcyBjaGVja3Mgd2hlbiBORlMgaXMgaW4gdXNlLgorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMTYyNjUyOiBwYXRjaCB0byBmaXggc2ltcGxlIGhyZnMgY2hlY2tzCisgICB3aGVuIE5GUyBpcyBpbiB1c2UuCiAKIDIwMDktMDQtMjMgMTY6MTEgIGhhcmRha2VyCiAKQEAgLTQwMzMsNiArNjQ4NDUsNTggQEAKIAogICAgRml4IG1lbW9yeSBsZWFrIGluIFNDVFAgY29udGFpbmVycy4KIAorMjAwOS0wNC0yMyAwODoyOSAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBpcyBwcm9iYWJseSBiZXN0IHJlZ2FyZGVkIGFzIGFuICJvcGFxdWUiCisgICBkYXRhCisgICBzdHJ1Y3R1cmUsIGFuZCBpc24ndCByZWFsbHkgaW50ZW5kZWQgZm9yIGRpcmVjdCBtYW5pcHVsYXRpb24uCisgICBNb3ZlIGl0IGJhY2sgaW50byB0aGUgPGxpYnJhcnkvbGFyZ2VfZmRfc2V0Lmg+IGhlYWRlciBmaWxlLgorICAgKExpa2UgaXQgd2FzIGJlZm9yZSBEYXZlIHN0dWNrIGhpcyBvYXIgaW4uLi4uKQorCisyMDA5LTA0LTIzIDA4OjE5ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBGdWVydGhlciBpbXByb3ZlbWVudHMgdG8gdGhlIGxhcmdlIEZEIHNldCBzdXBwb3J0CisgICAoU2VlIHBhdGNoICMyNzcyNzg3KQorCisyMDA5LTA0LTIzIDA2OjQ1ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaDoKKworICAgYnVpbGRpbmc6IFVzZSBjb25maWdfZXJyb3IoLi4uKSBpbnN0ZWFkIG9mCisgICBjb25maWdfcmVxdWlyZShub24tZXhpc3RpbmcpIHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuCisKKzIwMDktMDQtMjMgMDY6NDEgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmg6CisKKyAgIHNubXBsaWIsIExpbnV4OiBNb3ZlIGdldF9waWRfZnJvbV9pbm9kZSB0byBpdCdzIG93biBmaWxlIGFuZCBvbmx5CisgICBjb21waWxlIGl0IGlmIG5lZWRlZCwgYWxzbyByZW5hbWUgaXQgdG8KKyAgIG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlLgorCisyMDA5LTA0LTIzIDA0OjMzICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmgsIGFnZW50L3NubXBkLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjQzMTM1MyBmcm9tIGhucm9zZSB0byBtYWtlIHNvbWUgQysrCisgICBjb21waWxlcnMgaGFwcGllcgorCiAyMDA5LTA0LTIzIDAzOjI3ICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvc25tcF9hbGFybS5jOgpAQCAtNDA0MCwyNyArNjQ5MDQsMjY0IEBACiAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjUwNTQ4ODogZnJvbSBkYWJva2V5IHRvIGZpeCBhbGFybXMgbm90CiAgICBiZWluZyB0cmlnZ2VyZWQgYXQgdGhlIHJpZ2h0IHRpbWVzIGR1ZSB0byBsYXJnZSBjbG9jayBza2V3cy4KIAorMjAwOS0wNC0yMyAwMDowMSAgaGFyZGFrZXIKKworICAgKiAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9uZXRzdGF0LmgsIG1hbi9zbm1wbmV0c3RhdC4xLmRlZjoKKworICAgTkVXUzogc25tcG5ldHN0YXQ6IFBBVENIOiAyNTY0NTM4OiBmcm9tIGFobWFrZSB0byBzdXBwb3J0IEdFVEJVTEsKKyAgIGluIHYyYysgc25tcCB2ZXJzaW9ucworCiAyMDA5LTA0LTIyIDIzOjQ5ICBoYXJkYWtlcgogCiAgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsICAgCi0gICAgICBhcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsICAgCi0gICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5oLCBzbm1wbGliL3N5c3RlbS5jOgorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jLCBzbm1wbGliL3N5c3RlbS5jOgogCiAgICBDSEFOR0VTOiBwb3J0czogUEFUQ0g6IDI2ODgzNDI6IGZyb20gYWhtYWtlIHRvIGZpeCB2YXJpb3VzCiAgICBjb21waWxlciB3YXJuaW5nCiAKKzIwMDktMDQtMjIgMjM6MjMgIGhhcmRha2VyCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDI3NjM3MTogZnJvbSBmaGV3IHRvIGFsbG93IHBlcmwgdG8gdXNlCisgICBPUEFRVUVzCisKKzIwMDktMDQtMjIgMjM6MTcgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMjc3NTgwMDogZnJvbSBBZGFtIFJvbWFuZWsgdG8gYWxsb3cKKyAgIHB5dGhvbiB0aHJlYWRpbmcgdG8gY29udGludWUgd2hlbiBhIHJlcXVlc3QgaXMgc2VudAorCiAyMDA5LTA0LTIyIDIyOjExICBhbGV4X2IKIAogICAgKiBSRUFETUUsIFJFQURNRS53aW4zMjoKIAogICAgVXBkYXRlIFRIQU5LUyBzZWN0aW9uLgogCisyMDA5LTA0LTIyIDIxOjIxICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKKworICAgRm9sZCB0aGUgZnVuY3Rpb24gZXh0cmFjdF9pbm9kZS4gd2l0aCBvbmx5IG9uZSB1c2VyLCBpbnRvIGl0J3MKKyAgIHVzZXIuCisgICBSZW1vdmUgdGhlICNkZWZpbmUgRklMRV9ESVNQLCB3aXRoIG9ubHkgb25lIHVzZXIsIHdpdGggdGhlIGFjdHVhbAorICAgdmFsdWUuCisKKzIwMDktMDQtMjIgMjE6MDMgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCB3aXRoIFNNVVggZW5hYmxlZC4KKworMjAwOS0wNC0yMiAxMzo0MyAganNhZnJhbmVrCisKKyAgICogUkVBRE1FLmFnZW50LW1pYnM6CisKKyAgIEFkZCBhIG5vdGUgaG93IHRoZSBuZXcgUk1PTi1NSUIgaW1wbGVtZW50YWlvbiB3b3JrcworCisyMDA5LTA0LTIyIDEzOjQxICBkdHMxMgorCisgICAqIG1hbi92YXJiaW5kX2FwaS4zLmRlZjoKKworICAgRmlsbCBvdXQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFZhcmJpbmQtcmVsYXRlZCBBUEkgY2FsbHMuCisKKzIwMDktMDQtMjIgMTM6MzcgIGpzYWZyYW5laworCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi5oLCBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2VzcywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9lbnVtcy5oLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfb2lkcy5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAyMTAzNDkyOiBpbXBsZW1lbnQKKyAgIFJNT04tTUlCOjpldGhlclN0YXRzSmFiYmVycworICAgUGF0Y2ggZnJvbSBOYXJlbmRyYSBLLiwgU2FuZGVlcCBLLiBTaGFuZGlseWEgYW5kIFNoeWFtIEl5ZXIKKwogMjAwOS0wNC0yMiAxMDowOCAgZHRzMTIKIAogICAgKiBtYW4vbWliX2FwaS4zLmRlZjoKIAogICAgQ29ycmVjdCBhIHNlcmlvdXNseSBtaXNsZWFkaW5nIChpLmUuIHdyb25nKSBkZXNjcmlwdGlvbiBvZiB0aGUKLSAgIHB1cnBvc2UgYW5kIGJlaGF2aW91ciBvZiB0aGUgcHJpbnRfZGVzY3JpcHRpb24gZmFtaWx5IG9mIGNhbGxzLgorICAgcHVycG9zZQorICAgYW5kIGJlaGF2aW91ciBvZiB0aGUgcHJpbnRfZGVzY3JpcHRpb24gZmFtaWx5IG9mIGNhbGxzLgorCisyMDA5LTA0LTIyIDA5OjMyICBkdHMxMgorCisgICAqIG1hbi9taWJfYXBpLjMuZGVmOgorCisgICBGdXJ0aGVyIHBvbGlzaGluZyBvZiB0aGUgZGVzY3JpcHRpb25zIG9mIE1JQi1yZWxhdGVkIEFQSSBjYWxscy4KKworMjAwOS0wNC0yMiAwNzozOSAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFJlbW92ZSB1bm5lY2Vzc2FyeSByYW5nZSBjaGVja3MuCisgICAoVGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBsYXJnZV9mZF9zZXQgcm91dGluZXMgdGhlbXNlbHZlcykuCisKKzIwMDktMDQtMjEgMjM6MjcgIGFsZXhfYgorCisgICAqICB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3A6CisKKyAgIHdpbjMyOiBGaXggV2luZG93cyBidWlsZCBlbnZpcm9ubWVudCB0byBzdXBwb3J0IHBhdGNoIDI3NzI3ODcuCisKKzIwMDktMDQtMjEgMTU6MzMgIGR0czEyCisKKyAgICogIGFnZW50L3NubXBkLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW4sIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCAgIAorICAgICAgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBSZXZpc2VkIHZlcnNpb24gb2YgcGF0Y2ggIzI3NzI3ODcKKworMjAwOS0wNC0yMSAxNToxNSAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAKKyAgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwOgorCisgICBVbmRvIHJldmlzaW9uIDE3NTE1CisgICAoYnJva2VuL2luY29tcGxldGUgcGF0Y2gpCisKKzIwMDktMDQtMjEgMTQ6MzcgIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbiwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgCisgICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI3NzI3ODc6IENsZWFuZXIgYXBwcm9hY2ggdG8gaGFuZGxpbmcKKyAgIGxhcmdlIGZkX3NldHMuCisgICBCYXNlZCBvbiBwYXRjaCBzdXBwbGllZCBieSBCYXJ0IFZhbiBBc3NjaGUuCisKKzIwMDktMDQtMjEgMTQ6MzQgIGR0czEyCisKKyAgICogbWFuL01ha2VmaWxlLmluOgorCisgICBQcm9wZXJseSBnZW5lcmF0ZSBuZXcgY29yZSBBUEkgbWFuIHBhZ2VzLgorCisyMDA5LTA0LTIxIDA5OjM4ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaDoKKworICAgRmlyc3QtY3V0IGF0IGlkZW50aWZ5aW5nIHRoZSBjb3JlIE5ldC1TTk1QIEFQSSBjYWxscy4KKyAgIE1vdmUgdGhlc2UgaW50byB0aGUgYXBwcm9wcmlhdGUgdG9wLWxldmVsIGhlYWRlciBmaWxlcy4KKworMjAwOS0wNC0yMSAwOTozNiAgZHRzMTIKKworICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vY29uZmlnX2FwaS4zLmRlZiwgbWFuL3JlYWRfY29uZmlnLjMuZGVmLCAgIAorICAgICAgbWFuL3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vc25tcF9hcGkuMy5kZWY6CisKKyAgIFJlbmFtZSBjb25maWcvc2Vzc2lvbiBBUEkgbWFuIHBhZ2VzLCBpbiBsaW5lIHdpdGggb3RoZXIgY29yZSBBUEkKKyAgIHN0cnVjdHVyZS4KKworMjAwOS0wNC0yMSAwOTozMiAgZHRzMTIKKworICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL3BkdV9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vcmVhZF9jb25maWcuMy5kZWYsIG1hbi9zbm1wX2FwaS4zLmRlZiwgbWFuL3ZhcmJpbmRfYXBpLjMuZGVmOgorCisgICBEb2N1bWVudCAob3IgcmVzdHJ1Y3R1cmUpIHRoZSBjb3JlIEFQSSBlbGVtZW50cy4KKyAgIEFsaWduIHRoaXMgb3JnYW5pc2F0aW9uIHdpdGggdGhlIGZpcnN0LWN1dCByZXN0cnVjdHVyaW5nCisgICBvZiB0aGUgbWFpbiBoZWFkZXIgZmlsZXMuCisKKzIwMDktMDQtMjAgMTA6MjMgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBTa2lwIGZpbGUgaGFuZGxlcyB0aGF0IGFyZSB0b28gbGFyZ2UgZm9yIGZkX3NldCB0byBjb3BlIHdpdGguCisgICBBIHNpbXBsZSBmaXggZm9yIHRoZSBpbW1lZGlhdGUgcHJvYmxlbSBhZGRyZXNzZWQgYnkgcGF0Y2gKKyAgICMxNjI3MDQ5LgorCisyMDA5LTA0LTIwIDEwOjE5ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIFJldmVydCBwYXRjaCAjMTYyNzA0OSAoZXh0ZW5zaW9uIHRvIGRlYWwgd2l0aCBsYXJnZSBmaWxlCisgICBoYW5kbGVycykuCisgICBTZWUgdGhlIGRpc2N1c3Npb24gb24gdGhhdCB0cmFja2VyIGVudHJ5IGZvciBiYWNrZ3JvdW5kIGFzIHRvCisgICB3aHkuCisKKzIwMDktMDQtMjAgMDA6NTkgIGFsZXhfYgorCisgICAqICBSRUFETUUud2luMzIsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsIHBlcmwvYWdlbnQvYWdlbnQueHMsICAgCisgICAgICB3aW4zMi9Db25maWd1cmUsIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbiwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCAKKyAgICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3A6CisKKyAgIHdpbjMyOiBCdWlsZCBmaXhlcyBmb3IgV2luZG93cy4gcGFzcyBhbmQgcGFzc19wZXJzaXN0IHN0aWxsIG5lZWQKKyAgIHRvIGJlIGZpeGVkIHRvIHN1cHBvcnQgQ291bnRlcjY0IG9uIFdpbmRvd3MuCisKKzIwMDktMDQtMjAgMDA6NDggIGFsZXhfYgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICB3aW4zMjogU3luYyBuZXQtc25tcC1jb25maWcuaC5pbiBhbmQgbmV0LXNubXAtY29uZmlnLmgKKworMjAwOS0wNC0xNyAyMToyMSAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsIGx0bWFpbi5zaCwgbTQvbGlidG9vbC5tNCwgCisgICAgICAgIG00L2x0b3B0aW9ucy5tNCwgbTQvbHRzdWdhci5tNCwgbTQvbHR2ZXJzaW9uLm00OgorCisgICBDSEFOR0VTOiBidWlsZDogVXBncmFkZSBsaWJ0b29sIHZlcnNpb24gdG8gMi4yLjYgaW4gb3JkZXIgdG8gd29yaworICAgYXJvdW5kIGEgYnVnbGV0IHRoYXQgbWFkZSBhdXRvcmVjb25mIC12aWYgZXJhc2UgY29uZmlnLnN1YiBhbmQKKyAgIGNvbmZpZy5ndWVzcy4KKworMjAwOS0wNC0xNCAyMTo1OSAgbWFnZnIKKworICAgKiBzbm1wbGliL3BhcnNlLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMTk3Njc3MjogQ2hhbmdlZCB0aGUgbWliIHBhcnNlciB0byBoYW5kbGUKKyAgIGxvbmcgYmluYXJ5IGFuZCBoZXggc3RyaW5ncy4KKworMjAwOS0wNC0xMSAxMjo1MiAgcnN0b3J5CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHN1Z2dlc3QgdHJ1bmNhdGlvbiBvZiBDaGFuZ2VMb2cucmVhbGx5YWRkCiAKIDIwMDktMDQtMTAgMjM6MTggIGFsZXhfYgogCkBAIC00MDk1LDcgKzY1MTk2LDggQEAKIAogMjAwOS0wNC0xMCAyMTo0NSAgYWxleF9iCiAKLSAgICogd2luMzIvQ29uZmlndXJlOgorICAgKiAgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsICAgCisgICAgICB3aW4zMi9kaXN0L1JFQURNRS50eHQ6CiAKICAgIFdpbjMyOiBNaW5vciBidWlsZCBhbmQgcmVhZG1lIHVwZGF0ZXMuCiAKQEAgLTQxMDcsMjQgKzY1MjA5LDI3IEBACiAgICBORVdTOiBXaW4zMjogUEFUQ0ggMjY4NjI0ODogQXBwbGllZCBwYXRjaCBieSBCYXJ0IFZhbiBBc3NjaGUKICAgIHdoaWNoIGZpeGVzIHNldmVyYWwgd2luRXh0RExMIGJ1Z3MuCiAKLTIwMDktMDQtMTAgMjA6MTQgIHJzdG9yeQorMjAwOS0wNC0xMCAyMDoxNyAgcnN0b3J5CiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CiAKLSAgIHJlc3RvcmUgYW5ub3lpbmcgbG9nIG1lc3NhZ2UsIGJ1dCBmaXggY2F1c2Ugb2YgaXQgb24gIWZyZWVic2Qgc3lzdGVtcworICAgcmVzdG9yZSBhbm5veWluZyBsb2cgbWVzc2FnZSwgYnV0IGZpeCBjYXVzZSBvZiBpdCBvbiAhZnJlZWJzZAorICAgc3lzdGVtcwogCiAyMDA5LTA0LTA5IDEyOjI4ICBkdHMxMgogCiAgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNTUwNzMwOiBSZXBvcnQgZXJyb3JzIGZyb20gaXRlcmF0b3ItYmFzZWQgaGFuZGxlcnMuCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE1NTA3MzA6IFJlcG9ydCBlcnJvcnMgZnJvbSBpdGVyYXRvci1iYXNlZAorICAgaGFuZGxlcnMuCiAgICBCYXNlZCBvbiBhIHBhdGNoIHByb3ZpZGVkIGJ5IFdheW5lIEdsYW50egogCiAyMDA5LTA0LTA5IDExOjQxICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjEyNDI4ODogRml4IHNldHRpbmcgb2YgdXNtVXNlclByaXZQcm90b2NvbCBhdCBjcmVhdGlvbi4KKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjEyNDI4ODogRml4IHNldHRpbmcgb2YKKyAgIHVzbVVzZXJQcml2UHJvdG9jb2wgYXQgY3JlYXRpb24uCiAgICBMb2dpYyBidWcsIHJlcG9ydGVkIGJ5IFJhbWVzaCBLb3RhYmFnaQogCiAyMDA5LTA0LTA5IDA5OjEyICBkdHMxMgpAQCAtNDE0MSw0NyArNjUyNDYsOTggQEAKICAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDIyNjA4Mjg6IEZpeCBweXRob24gc25tcHdhbGsgbWVtb3J5IGxlYWsKICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEdhYnJpZWxlIE1lc3NpbmVvCiAKKzIwMDktMDQtMDkgMDg6NTggIGR0czEyCisKKyAgICogcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjI3MjM0NzogSW1wbGVtZW50ICJpbXBsaWVkIiBpbiBNSUIgaGFzaAorICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKwogMjAwOS0wNC0wOSAwODo1NCAgZHRzMTIKIAogICAgKiBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mOgogCi0gICBDSEFOR0VTOiBtaWIyYzogUEFUQ0g6IDIzMTYxMjc6IEZpeCBidWcgaW4gaXRlcmF0ZV9hY2Nlc3MgZ2VuZXJhdGVkIGNvZGUuCisgICBDSEFOR0VTOiBtaWIyYzogUEFUQ0g6IDIzMTYxMjc6IEZpeCBidWcgaW4gaXRlcmF0ZV9hY2Nlc3MKKyAgIGdlbmVyYXRlZCBjb2RlLgorCisyMDA5LTA0LTA5IDA4OjQ4ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL25ldGJzZC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI0MzU2ODE6IEVuYWJsZSBpZi1taWIgcmV3cml0ZSAod2l0aAorICAgc3lzY3RsIGJhY2tlbmQpIG9uIE5ldEJTRAogCiAyMDA5LTA0LTA5IDA4OjQ0ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjQzNTc5MzogU3VwcG9ydCA2NC1iaXQgSUYtTUlCIGNvdW50ZXJzIG9uIHN5c2N0bCAoKkJTRCkgc3lzdGVtcy4KKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjQzNTc5MzogU3VwcG9ydCA2NC1iaXQgSUYtTUlCIGNvdW50ZXJzIG9uCisgICBzeXNjdGwgKCpCU0QpIHN5c3RlbXMuCiAgICBQYXRjaCBwcm92aWRlZCBieSBKYW4gQW5kcmVzCiAKKzIwMDktMDQtMDkgMDg6MDAgIHRhbmRlcnMKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBmaXggY29tcGlsYXRpb24gd2FybmluZ3MKKworMjAwOS0wNC0wOCAyMzoxNyAgdGFuZGVycworCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIG1vdmUgY29tbWVudHMgdG8gYSBwbGFjZSB3aGVyZSB0aGV5IGFyZSBsZWdhbAorCisyMDA5LTA0LTA4IDIzOjAzICB0YW5kZXJzCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgLSByZW5hbWUgbmV3IGdldFJlcXVlc3RvcklwIHRvIGdldFNvdXJjZUlQIGFuZCBnZXRUYXJnZXRJcCB0bworICAgZ2V0RGVzdElwCisgICAtIHJlbWluZCB0aGF0IHRoaXMgaXMgZnVsbHkgdHJhbnNwb3J0LXNwZWNpZmljLCBpLmUuIFVEUC9JUHY0CisgICBvbmx5IQorCiAyMDA5LTA0LTA4IDE2OjAwICBkdHMxMgogCiAgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMzg0Nzc5OiBGaXggaGFuZGxpbmcgb2YgR2V0QnVsayB3aXRoIE4+MCxNPT0wCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIzODQ3Nzk6IEZpeCBoYW5kbGluZyBvZiBHZXRCdWxrIHdpdGgKKyAgIE4+MCxNPT0wCiAgICBQYXRjaCBwcm92aWRlZCBieSBBbmd1cyBTYWxrZWxkCiAKIDIwMDktMDQtMDggMTU6NTIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI0MDYzNzg6IEZpeCBoclNXUnVuUGVyZk1lbSBvbiA2NC1iaXQgU29sYXJpcyBzeXN0ZW1zCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI0MDYzNzg6IEZpeCBoclNXUnVuUGVyZk1lbSBvbiA2NC1iaXQKKyAgIFNvbGFyaXMgc3lzdGVtcwogICAgUGF0Y2ggcHJvdmlkZWQgYnkgTlR3b08KIAogMjAwOS0wNC0wOCAxNTo0OCAgZHRzMTIKIAogICAgKiBzbm1wbGliL21pYi5jOgogCi0gICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjQ3OTcwMDogRml4IHpvbmVkIElQIGFkZHJlc3MgdXNlZCBhcyB0YWJsZSBpbmRpY2VzCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjQ3OTcwMDogRml4IHpvbmVkIElQIGFkZHJlc3MgdXNlZCBhcworICAgdGFibGUgaW5kaWNlcwogICAgUGF0Y2ggcHJvdmlkZWQgYnkgQnJpYW4gUmV0Zm9yZC4KIAogMjAwOS0wNC0wOCAxNTozMyAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgogCi0gICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjQ5MjM3NzogRml4IHR5cG8vYnVnIGluIHNubXBfZW5hYmxlX2NhbGxiYWNrKCkKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyNDkyMzc3OiBGaXggdHlwby9idWcgaW4KKyAgIHNubXBfZW5hYmxlX2NhbGxiYWNrKCkKICAgIFJlcG9ydGVkIGJ5IGpveWNlYW5tYWNoaW5lCiAKKzIwMDktMDQtMDggMTU6MjkgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjUwNzI0OTogc2N0cC1taWIgc3VwcG9ydCBmb3IgRnJlZUJTRC4KKwogMjAwOS0wNC0wOCAxNToxNiAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CkBAIC00MTk0LDcgKzY1MzUwLDggQEAKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgogCi0gICBDSEFOR0VTOiBweXRob246IFBBVENIOiAyNTgwOTc5OiBGaXggcHl0aG9uIHNlc3Npb24gcG9pbnRlcnMgb24gNjQtYml0IHN5c3RlbXMuCisgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAyNTgwOTc5OiBGaXggcHl0aG9uIHNlc3Npb24gcG9pbnRlcnMgb24KKyAgIDY0LWJpdCBzeXN0ZW1zLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgSm9obiBLaHZhdG92LgogCiAyMDA5LTA0LTA4IDE0OjQ5ICBkdHMxMgpAQCAtNDIwOCw4ICs2NTM2NSw3IEBACiAyMDA5LTA0LTA4IDE0OjM0ICBkdHMxMgogCiAgICAqICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sICAgCi0gICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LWMuaW5jLCAKLSAgICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QteHMuaW5jOgorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzOgogCiAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIOiAyNzI2MzAyOiBQYXNzIHJlc3VsdHMgb2YgUGVybCB0cmFwCiAgICBoYW5kbGVycyB0byB0cmFwIGRhZW1vbgpAQCAtNDIyMyw2ICs2NTM3OSwxNCBAQAogICAgaGlnaC1BU0NJSSBjaGFycwogICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmFydCBWYW4gQXNzY2hlCiAKKzIwMDktMDQtMDggMTQ6MjQgIGR0czEyCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDI3MDk3MDU6IFJldHJpZXZlIHNyYy90YXJnZXQgSVAgYWRkcmVzcyBpbgorICAgUGVybC1iYXNlZCBhZ2VudHMKKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IGZoZXcKKwogMjAwOS0wNC0wOCAxNDoxNiAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CkBAIC00MjQ5LDYgKzY1NDEzLDI4IEBACiAgICBRbjogRG9lcyB0aGlzIGV2ZW4gcXVhbGlmeSBhcyBhbiBlcnJvcj8gV291bGRuJ3QgYSB3YXJuaW5nIGJlCiAgICBzdWZmaWNpZW50PwogCisyMDA5LTA0LTA2IDE5OjMzICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oLCBzbm1wbGliL3BhcnNlLmM6CisKKyAgIHNubXBsaWI6IE1ha2UgdGhlIG5vZGUgc3RydWN0IHByaXZhdGUuIEhpZGUgdGhlIG9yaGFuX25vZGVzCisgICB2YXJpYWJsZS4KKworMjAwOS0wNC0wNiAxODo0NSAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuYzoKKworICAgc25tcGQscGVybDogSWYgbXlfcGVybCBpcyBOVUxMIHdoZW4gcGFzc2VkIHRvIHBlcmxfZGVzdHJ1Y3QgdGhlbgorICAgdGhhdCBmdW5jdGlvbiBjcmFzaGVzIGZvciBzb21lIHBlcmwgdmVyc2lvbnMgc28gY2hlY2sgdGhhdCBpdCBpcworICAgbm9uLW51bGwgYmVmb3JlIGRlc3Ryb3lpbmcgaXQuCisKKzIwMDktMDQtMDYgMTg6NDIgIG1hZ2ZyCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgcGVybDogQXZvaWQgc3VycHJpc2VzIGlmIHRoZSBwZXJsIHN0cmluZyBjb250YWlucyBwcmludGYgZXNjYXBlCisgICBjaGFyYWN0ZXJzLgorCiAyMDA5LTA0LTA2IDE4OjIyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKQEAgLTQyNTcsNyArNjU0NDMsNyBAQAogICAgKEF2b2lkcyB0cnVuY2F0ZWQgd2FsayBvZiBoclNXUnVuUGF0aCBvbiBTdVNFIHN5c3RlbXMpCiAgICBSZXBvcnRlZCBieSBLYW1pbCBLaXNpZWwuCiAKLTIwMDktMDQtMDYgMTI6MDUgIHRhbmRlcnMKKzIwMDktMDQtMDYgMTE6NTggIHRhbmRlcnMKIAogICAgKiBwZXJsL2FnZW50L2FnZW50LnhzLCBwZXJsL2FnZW50L3R5cGVtYXA6CiAKQEAgLTQyNjYsMTEgKzY1NDUyLDEwOSBAQAogICAgZ2V0Um9vdE9JRCB3b3JrcyBwcm9wZXJseS4gTm93IHBhc3NlcyAibWFrZSB0ZXN0IiBhbmQgIm1ha2UKICAgIHBlcmx0ZXN0Ii4KIAotMjAwOS0wNC0wNiAxMjowMiAgZHRzMTIKKzIwMDktMDQtMDUgMTA6MDUgIG1hZ2ZyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgogCi0gICBGaXggdHlwbworICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuCisKKzIwMDktMDQtMDUgMDk6NTMgIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgICAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsIGxvY2FsL21pYjJjLm5vdGlmeS5jb25mOgorCisgICBNYWtlIGV2ZW4gbW9yZSB2YXJpYWJsZXMgYW5kIHRlbXBsYXRlcyBjb25zdC4KKworMjAwOS0wNC0wNCAyMjoxMyAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaDoKKworICAgc25tcGQ6IE1ha2UgbW9yZSBsb2NhbCB2YXJpYWJsZXMgY29uc3QgYW5kIGxvY2FsLgorCisyMDA5LTA0LTA0IDEwOjA3ICBtYWdmcgorCisgICAqIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRyYXBkLmMsIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgTWFyayB0aGUgcmVjb25maWcgdmFyaWFibGUgYXMgc3RhdGljIHNpbmNlIGl0IGlzIHByaXZhdGUgdG8gdGhlCisgICBtb2R1bGUuCisKKzIwMDktMDQtMDQgMTA6MDMgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmM6CisKKyAgIE1hcmsgdGhlIGZpbGUgc2NvcGUgcHJpdmF0ZSB2YXJpYWJsZSBtaW5pbXVtX3N3YXAgYXMgc3RhdGljLgorCisyMDA5LTA0LTA0IDA5OjU4ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jOgorCisgICBzbm1wbGliOiBNYWtlIG1vcmUgc3ltYm9scyBjb25zdCBpbiBvcmRlciB0byBtb3ZlIHRoZW0gdG8KKyAgIHJlYWRvbmx5IG1lbW9yeS4KIAogMjAwOS0wNC0wMiAyMToyNCAgaGFyZGFrZXIKIApAQCAtNDI3OSw2ICs2NTU2MywxMzEgQEAKICAgIENIQU5HRVM6IEJVRyAxMTI2OTQ6IFBhdGNoIGZyb20gQmlsbCBGZW5uZXI6IGRvbid0IG9wZW4gKGFuZAogICAgY2xvYmJlcikgYW4gYWdlbnR4IHNvY2tldCBpZiB0aGUgb3RoZXIgdHJhbnNwb3J0cyBmYWlsIHRvIG9wZW4KIAorMjAwOS0wNC0wMSAyMzo0MSAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDA5LTA0LTAxIDIzOjE5ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAwOS0wNC0wMSAyMzowNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMDktMDQtMDEgMjM6MDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBjb252ZXJ0IGNvbW1lbnRzIHRvIEFOU0kgY29tbWVudHMKKworMjAwOS0wNC0wMSAyMjoyMSAgaGFyZGFrZXIKKworICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wNC0wMSAyMjowMyAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9tYWtlcmVsZWFzZS54bWwsIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNCAtPiBWNS41LnByZTEKKworMjAwOS0wNC0wMSAyMTo1OCAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmLCBtYW4vc25tcGQuOC5kZWY6CisKKyAgIHVwZGF0ZXMgZm9yIFNTSAorCisyMDA5LTA0LTAxIDE5OjM5ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIE1ha2UgdGhlIHNyYyBwb2ludGVyIG9mIHNubXBfY2xvbmVfbWVtIGEgcG9pbnRlciB0byBjb25zdGFudC4KKworMjAwOS0wNC0wMSAxODoyMyAgaGFyZGFrZXIKKworICAgKiBhcHBzOgorCisgICBpZ25vcmUgJ3NzaHRvc25tcCcKKworMjAwOS0wNC0wMSAxNzozMSAgaGFyZGFrZXIKKworICAgKiAgYXBwcy9zc2h0b3NubXAuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIG1hbi9zbm1wZC44LmRlZiwgc25tcGxpYi9zbm1wU1NIRG9tYWluLmM6CisKKyAgIE1ha2Ugc3NoIHRyYW5zcG9ydCBzdXBwb3J0IHVzZSBhIHVuaXggc29ja2V0IHdpdGggcHJvcGVyCisgICBjcmVkZW50aWFsIHBhc3NpbmcKKworMjAwOS0wNC0wMSAxNzoyOSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CisKKyAgIG1ha2UgdGhlIGV4ZWMgY2FjaGUgcmVhZGFibGUgb25seSBieSB0aGUgdXNlcgorCisyMDA5LTA0LTAxIDE3OjI4ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBtb3ZlIHN0cmluZyB0byB1aWQvZ2lkIGZ1bmN0aW9uYWxpdHkgdG8gc25tcGxpYiBmb3IgcmV1c2UKKwogMjAwOS0wMy0zMSAxNToxMiAgZHRzMTIKIAogICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CkBAIC00MzAwLDYgKzY1NzA5LDkzIEBACiAKICAgIEMgY29tbWVudHMgdXNlIC8qIC4uLiAqLywgbm90ICMKIAorMjAwOS0wMy0zMSAwODowNSAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBGaXggY29tcGlsYXRpb24gd2l0aCBnbGliYyA8IDIuNCwgSUNNUHY2IG1lc3NhZ2UgdHlwZXMgc3RhcnRpbmcKKyAgIHdpdGggTUxEXyogaGF2ZSBkaWZmZXJlbnQgbmFtZSB0aGVyZS4KKworMjAwOS0wMy0yNCAwNjowNCAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBEbyBub3QgY29tcGlsZSB0aGUgcGFydHMgdGhhdCBkZXBlbmQgb24gbGlic3NsIGlmIGxpYnNzbCBpcworICAgbWlzc2luZy4KKworMjAwOS0wMy0yMyAwOToyMSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaDoKKworICAgTkVXUzogc25tcGQ6IGlwTmV0VG9QaHlzaWNhbExhc3RVcGRhdGVkIE9JRCBpbXBsZW1lbnRlZAorICAgCisgICBUaGUgdmFsdWUgaXMgZXN0aW1hdGVkIHdpdGggZXZlcnkgY2FjaGUgcmVsb2FkLCB3aGljaCBpcyBvbmNlIGluCisgICA2MCBzZWNvbmRzIGJ5IGRlZmF1bHQuCisgICBUaGF0IG1lYW5zIHRoZSB2YWx1ZSByZXBvcnRlZCBieSBzbm1wZCBtYXkgZGlmZmVyIGZyb20gcmVhbGl0eSBieQorICAgb25lIG1pbnV0ZS4KKyAgIElmIGFueWJvZHkgbmVlZHMgYmV0dGVyIHByZWNpc2lvbiwgdGhlIGNhY2hlIHRpbWVvdXQgY2FuIGJlCisgICBjb25maWd1cmVkIGJ5IHNldHRpbmcKKyAgIE5FVC1TTk1QLUFHRU5ULU1JQjo6bnNDYWNoZVRpbWVvdXQuMS4zLjYuMS4yLjEuNC4zNSB0bworICAgYXBwcm9wcmlhdGUgdmFsdWUgYnkgc25tcHNldC4KKworMjAwOS0wMy0yMCAxOTozOCAgaGFyZGFrZXIKKworICAgKiBkaXN0L2V4dHJhY3RuZXdzOgorCisgICBmaXggbGFjayBvZiB3cmFwcGluZyBsaW5lcyBwcm9ibGVtCisKKzIwMDktMDMtMjAgMTg6MzEgIGhhcmRha2VyCisKKyAgICogTkVXUywgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgY29uZmlnIG9wdGlvbnMsIGV0YywgZm9yIFNTSCBhbmQgRFRMUworCisyMDA5LTAzLTIwIDE4OjI0ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcGQuOC5kZWY6CisKKyAgIGN1cnJlbnRseSBtaW5pbWFsIGRvY3VtZW50YXRpb24gb24gZHRscyBhbmQgc3NoCisKKzIwMDktMDMtMjAgMTY6NTAgIGhhcmRha2VyCisKKyAgICogIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvc3NodG9zbm1wLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBBZGRlZCBhbHBoYSBzbm1wIG92ZXIgc3NoIHN1cHBvcnQKKworMjAwOS0wMy0yMCAxNjoxNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNoZWNrIHRoZSBzZWMgbmFtZSBsZW5ndGgsIG5vdCBqdXN0IHRoZSBjb250ZW50cworCisyMDA5LTAzLTIwIDE2OjAxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBzZXF1ZW5jZSBwYXJzaW5nIGZpeAorCisyMDA5LTAzLTIwIDE1OjUzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGFkZGVkIGEgbmV3IGZsYWcgdG8gYWxsb3cgZm9yIHNpZ25hbGxpbmcgb2YgbGVnYWwgZW1wdHkgcGFja2V0cworICAgZnJvbSBhIHRyYW5zcG9ydAorCisyMDA5LTAzLTE4IDE5OjQyICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIGFnYWluLgorCiAyMDA5LTAzLTE4IDEwOjUyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYzoKQEAgLTQzMjksNiArNjU4MjUsMjAgQEAKICAgIEZpeCB2YWxncmluZCB3YXJuaW5nLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgU3RlcGhlbiBIZW1taW5nZXIKIAorMjAwOS0wMy0xNyAyMjo1NyAgbWFnZnIKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5oOgorCisgICBQQVRDSDogMjY4ODM0MjogZnJvbSAiQmFydCBWYW4gQXNzY2hlIjogVXNlIHByb3BlciBmdW5jdGlvbgorICAgcG9pbnRlcnMKKworMjAwOS0wMy0xMyAyMToyNiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKKworICAgUHJvY2VzcyBock1lbW9yeVNpemUgKHNjYWxhcikgc2VwYXJhdGVseSBmcm9tIGhyU3RvcmFnZVRhYmxlLgorICAgVGhpcyBzaW1wbGlmaWVzIHRoZSBoYW5kbGVyIGNvZGUgc3RydWN0dXJlLgorCiAyMDA5LTAzLTEzIDIxOjIzICBkdHMxMgogCiAgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsICAgCkBAIC00MzUzLDYgKzY1ODYzLDI3IEBACiAgICAoQW4gYWx0ZXJuYXRpdmUgbWlnaHQgYmUgdG8gY3JlYXRlIGEgbmV3IGVudHJ5IGluc3RlYWQpLgogICAgUHJvYmxlbSByZXBvcnRlZCBieSBOaWNrIEhpbmRsZXkKIAorMjAwOS0wMy0xMCAxNToyNSAganNhZnJhbmVrCisKKyAgICogUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmM6CisKKyAgIE5FV1M6IHNubXBkOiBpcEFkZHJlc3NTcGluTG9jayBpbXBsZW1lbnRlZAorCisyMDA5LTAzLTAyIDExOjIzICBkdHMxMgorCisgICAqIENPUFlJTkc6CisKKyAgIEZpeCBhdHRyaWJ1dGlvbiBvZiBsYXRlc3QgY29weXJpZ2h0IG5vdGljZS4KKworMjAwOS0wMi0yOCAxODoyMSAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE1vdmUgdGhlICNkZWZpbmUgY29uZmlnXyooLi4uKSBmcm9tIGFjY29uZmlnLmggdG8gdGhlIGNvbmZpZ3VyZQorICAgc2NyaXB0IHNvIHRoYXQgdGhleSBhcmUgbmV4dCB0byB0aGUgY29kZSB0aGF0IGhhbmRsZSB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgY29uZmlnXyogdG9rZW4uCisKIDIwMDktMDItMjcgMTM6MjAgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgpAQCAtNDM2Miw2ICs2NTg5MywyMCBAQAogICAgSXQncyBiZWluZyB3cml0dGVuIHRvIGxvZyBldmVyeXRpbWUgc29tZW9uZSBxdWVyaWVzCiAgICBVQ0QtU05NUC1ESVNLSU8gTUlCLgogCisyMDA5LTAyLTI1IDA2OjQxICBtYWdmcgorCisgICAqIGFwcHMvc25tcG5ldHN0YXQvaWYuYzoKKworICAgVXNlIHRoZSBmZWF0dXJlIHRlc3QgbWFjcm9zIHRvIHNldCB3aGF0IGlzIG5lZWRlZC4KKyAgIERvIG5vdCB1c2UgdGhlIGludGVybmFsIEdOVSBsaWJjIG1hY3JvcyB0aGF0IGFyZSBzZXQgYnkgc2V0dGluZworICAgdGhlIGZlYXR1cmUgdGVzdCBtYWNyb3MuCisKKzIwMDktMDItMjUgMDY6MzggIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBBZGQgbWlzc2luZyBpbmNsdWRlLgorCiAyMDA5LTAyLTI0IDA3OjI2ICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CkBAIC00MzY5LDI3ICs2NTkxNCw5NCBAQAogICAgQ0hBTkdFUzogTWFrZSAtTE4gc3RvcCBkdW1waW5nIGNvcmUuIE1ha2UgYmFkIGRlYnVnIGxldmVscyByZXBvcnQKICAgIHRoZSBvZmZlbmRpbmcgc3ltYm9sLgogCi0yMDA5LTAyLTE4IDE1OjI3ICBqc2FmcmFuZWsKKzIwMDktMDItMjQgMDY6NTAgIG1hZ2ZyCiAKLSAgICogIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMsICAgCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgTW92ZSB0aGUgZGlyZWN0b3J5IGNyZWF0aW9uIGNvZGUgdG8gaGFwcGVuIGFmdGVyIHRoZSBkb21haW4KKyAgIHNlbGVjdGlvbiBjb2RlIHNvIHRoYXQgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiBjb2RlIGtub3dzIHdoYXQKKyAgIGRpcmVjdG9yeSB0byBjcmVhdGUuCisKKzIwMDktMDItMjQgMDY6NDcgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgQ2hhbmdlIHRoZSBlcnJvciBjaGVja2luZyBvcHRpb24gLS1lbmFibGUtbXlzcWwgdG8gc3VnZ2VzdCB0aGF0CisgICB0aGF0IC0td2l0aC1teXNxbCBpcyB1c2VkIHJhdGhlciB0aGF0IC0td2l0aC1vcGVuc3NsLgorCisyMDA5LTAyLTI0IDA2OjQ0ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVnZW5lcmF0ZSBhdXRvY29uZiBhcnRpZmFjdHMuCisKKzIwMDktMDItMjMgMTg6NDMgIHJzdG9yeQorCisgICAqIGFwcHMvc25tcHRyYXBkX3NxbC5jOgorCisgICBhZGQgZm9yZ290dGVuIGZpbGUKKworMjAwOS0wMi0yMCAwNDo0MSAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgCisgICAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWwsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgYWRkZWQgZW1hY3MgYXV0b2NvbmYgbW9kZSBzcGVjaWZpZXIKKworMjAwOS0wMi0xOSAxODozMiAgcnN0b3J5CisKKyAgICogUkVBRE1FLnNxbCwgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmOgorCisgICBkb2N1bWVudCBuZXcgc3FsIHRyYXAgbG9nZ2luZworCisyMDA5LTAyLTE5IDE4OjIwICByc3RvcnkKKworICAgKiAgQ09QWUlORywgTkVXUywgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9zbm1wdHJhcGQuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmgsIGNvbmZpZ3VyZSwgIAorICAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBkaXN0L3NjaGVtYS1zbm1wdHJhcGQuc3FsLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBzbm1wdHJhcGQ6IGFkZCB0cmFwIGhhbmRsZXIgZm9yIGxvZ2dpbmcgdHJhcHMgdG8gYSBteXNxbAorICAgZGF0YWJhc2UKKworMjAwOS0wMi0xOSAxNzo1OCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jOgorCisgICBORVdTOiBzbm1wbGliOiBhZGRlZCBpdGVyYXRvciBmb3Igc2luZ2x5IGxpbmtlZCBsaXN0czsgYWRkCisgICBjb250YWluZXIgbmFtZSBpbiBtb3JlIGVycm9yIG1zZ3MKKworMjAwOS0wMi0xOCAxODo1MiAgcnN0b3J5CisKKyAgICogYXBwcy9zbm1wdXNtLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogY2hhbmdlIE1BWF9FTkdJTkVJRF9MRU5HVEggdG8gMzIsIHBlcgorICAgU05NUC1GUkFNRVdPUkstTUlCIFNubXBFbmdpbmVJRCBUQworCisyMDA5LTAyLTE4IDE0OjQxICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYywgICAKICAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgsICAgCiAgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmM6CiAKLSAgIEZpeCBzY3RwLW1pYiBjb21waWxhdGlvbiBwcm9ibGVtcwotCi0yMDA5LTAyLTE4IDE1OjI3ICBqc2FmcmFuZWsKLQotICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaDoKLQotICAgQmFja3BvcnQgZ2V0X3BpZF9mcm9tX2lub2RlIGZyb20gdHJ1bmssIGl0J3MgbmVlZGVkIGJ5IHNjdHAtbWliCisgICBDb25maWd1cmUgc2NyaXB0IGRvZXMgbm90IGxpa2UgbmV0LXNubXAtY29uZmlnLmggYmVpbmcgaW5jbHVkZWQKKyAgIGZyb20gaGVhZGVyCisgICBmaWxlcywgd2hpY2ggYXJlIGFkZGVkIGJ5IC0td2l0aC1taWItbW9kdWxlcz0sIGxldCdzIHJlbW92ZSBpdAorICAgZnJvbSB0aGVyZS4KIAogMjAwOS0wMi0xNiAyMToyNCAgaGFyZGFrZXIKIApAQCAtNDM5OCw2ICs2NjAxMCwxMDEgQEAKICAgIENIQU5HRVM6IHBlcmw6IEJVRyAxNTU0ODE3OiBQYXRjaCBmcm9tIHhhbmNvOiBmaXggdGhlIGNsYXNzCiAgICBhc3NpZ21lbnQgc28gZ2V0Um9vdE9JRCB3b3JrcyBwcm9wZXJseS4KIAorMjAwOS0wMi0xNSAwNzoyMCAgbWFnZnIKKworICAgKiBhY2NvbmZpZy5oOgorCisgICBDb3JyZWN0IGNvcHkvcGFzdGUgbWlzdGFrZQorCisyMDA5LTAyLTEyIDAwOjI1ICBoYXJkYWtlcgorCisgICAqICBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIG1pYnMvTkVULVNOTVAtVEMudHh0LCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICBzbm1wbGliL3NubXB0c20uYzoKKworICAgQW4gZWFybHkgZXhwZXJpbWVudGFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEVExTIG92ZXIgVURQCisgICB0cmFuc3BvcnQgZnJvbSB0aGUgSUVURiBJU01TIHdvcmtpbmcgZ3JvdXAKKworMjAwOS0wMi0xMSAyMzozMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICB1cGRhdGVkIHJlbGVhc2UgaW5zdHJ1Y3Rpb25zCisKKzIwMDktMDItMDYgMjE6MzYgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIGFzIEMrKyBhZ2Fpbi4KKworMjAwOS0wMi0wNSAyMjo1NiAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N2cjUuaDoKKworICAgQ0hBTkdFUzogYnVpbGQ6IEFzc3VtZSB0aGF0IHRoZSB0YXJnZXQgcGxhdGZvcm0gc3VwcG9ydHMgbWVtY3B5LAorICAgbWVtbW92ZSwgbWVtc2V0LCBzdHJjaHIgYW5kIHN0cnJjaHIuCisKKzIwMDktMDItMDQgMDY6NTcgIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zbm1wX2RlYnVnLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NucHJpbnRmLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBSZW1vdmUgc3VwcG9ydCBmb3IgdXNlIG9mIHZhcmFyZ3MuaC4gTm93IGFzc3VtZXMgdGhhdAorICAgc3RkYXJnLmggaXMgYXZhaWxhYmxlLgorCisyMDA5LTAyLTA0IDA2OjQ5ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X3RyYXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHYzLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IEludHJvZHVjZSBwcmludGYtbGlrZSB2ZXJzaW9ucyBvZiBjb25maWdfcGVycm9yCisgICBhbmQgY29uZmlnX3B3YXJuIChuZXRzbm1wX2NvbmZpZ19lcnJvciBhbmQgbmV0c25tcF9jb25maWdfd2FybikuCisgICBSZXBsYWNlIG1hbnkgaW5zdGFuY2VzIG9mIHsgdG1wYnVmWy4uLl07IHNwcmludGYodG1wYnVmLCAuLi4pOworICAgY29uZmlnX3AqKHRtcGJ1Zik7IH0gd2l0aCBuZXRzbm1wX2NvbmZpZ18qKC4uLik7CisKKzIwMDktMDItMDMgMTY6MTQgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oOgorCisgICBhZGQgdGhlIHJlZ2luZm8gYW5kIGFuZCBzZXNzaW9uIHBvaW50ZXIgdG8gdGhlIFJFR0lTVEVSX09JRAorICAgY2FsbGJhY2sKKworMjAwOS0wMi0wMyAwMDoxOCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBmaXhlZCAtbHNzbCBjaGVjaworCiAyMDA5LTAxLTI5IDA4OjM4ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKQEAgLTQ0MDksMTQgKzY2MTE2LDE0IEBACiAgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgogCiAgICBGaXggc3JjL2RzdCBjb25mdXNpb24KLSAgIFBhdGNoIHByb3ZpZGVkIGJ5IEtyenlzenRvZiBPbL9kemtpCisgICBQYXRjaCBwcm92aWRlZCBieSBLcnp5c3p0b2YgT2zniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLblm5h6a2kKIAogMjAwOS0wMS0yOCAwOToyOSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKIAogICAgQ0hBTkdFUzogRml4IHR3byBidWdzIHdpdGggc211eCBwYXNzd29yZCBzdXBwb3J0LgotICAgUGF0Y2ggc3VwcGxpZWQgYnkgS3J6eXN6dG9mIE9sv2R6a2kKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEtyenlzenRvZiBPbOeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMtuWbmHpraQogCiAyMDA5LTAxLTIzIDE0OjUzICBqc2FmcmFuZWsKIApAQCAtNDQyNCw2ICs2NjEzMSw1MSBAQAogCiAgICBGaXggcGFyc2luZyBvZiBsZXZlbCByYW5nZXMgaW4gJy1MPGNhcGl0YWw+Jy4KIAorMjAwOS0wMS0yMCAxNDo1MSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIENoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIDxycG0vcnBtZmlsZXV0aWwuaD4gYmVmb3JlIGluY2x1ZGluZworICAgaXQuCisKKzIwMDktMDEtMTkgMjA6NTAgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIHdpdGhvdXQgSVB2NiBhZ2Fpbi4KKworMjAwOS0wMS0xOSAxNTowMSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguaCwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTkyNzc1MTogZnJvbSBNaXRzdXJ1IENoaW5lbjogaW1wbGVtZW50CisgICBpY21wTXNnU3RhdHNUYWJsZSBvbiBMaW51eAorCisyMDA5LTAxLTE5IDA5OjQxICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmgsICAgCisgICAgICBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMjQ0OTIxMDogYWRkIDY0LWJpdCBkaXNrIHVzYWdlIHN0YXRpc3RpY3MgdG8KKyAgIFVDRC1TTk1QLU1JQjo6ZHNrVGFibGUKKworMjAwOS0wMS0xOCAwNzo0MCAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBDSEFOR0VTOiBCVUc6IDIxNjgxODA6IENoYW5nZWQgLS1kaXNhYmxlLXJlZW50cmFudCB0byBub3QKKyAgIGFjdGl2YXRlIHRoZSByZWVudHJhbnQgY29kZSBhbmQgbWFkZSAtLWVuYWJsZS1yZWVudHJhbnQgYWNjZXB0IG5vCisgICB2YWx1ZXMgb3RoZXIgdGhhbiB5ZXMgYW5kIG5vLiBEaWQgdGhlIHNhbWUgZm9yCisgICAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNrcywgLS1lbmFibGUtbWliLWNvbmZpZy1kZWJ1ZywKKyAgIC0td2l0aC1kZWZhdWx0cywgLS1lbmFibGUtZGV2ZWxvcGVyIGFuZCAtLWVuYWJsZS10ZXN0aW5nLWNvZGUgYXMKKyAgIHdlbGwuCisKIDIwMDktMDEtMTMgMDk6MTcgIGpzYWZyYW5lawogCiAgICAqIHNubXBsaWIvYXNuMS5jOgpAQCAtNDQzNCw2ICs2NjE4Niw2MyBAQAogICAgZWFjaCBzdWJpZGVudGlmaWVyLiBUaGlzIGlzIG5vdyBjaGVja2VkIGFuZCBwYXJzaW5nIG9mIE9JRCBmYWlscywKICAgIGlmIHRoaXMgY29uZGl0aW9uIGlzIG5vdCBtZXQuCiAKKzIwMDktMDEtMTEgMjE6NTQgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IENoZWNrIHRoYXQgdGhlIHRlbXAtZmlsZS1wYXR0ZXJuIGVuZHMgaW4gNiBYJ3MKKyAgIGFzIG1rc3RlbXAgYW5kIG1rdGVtcCByZXF1aXJlIHRoYXQuCisKKzIwMDktMDEtMTEgMjE6MzggIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogQmUgYSBsb3QgbW9yZSBzdHJpY3Qgb24gdGhlIHZhbHVlcyB0aGF0IGFyZQorICAgYWNjZXB0YWJsZSBmb3IgLS13aXRoLXBlcnNpc3RlbnQtbWFzayAob25seSBhbGxvdyB0aHJlZSBvY3RhbAorICAgZGlnaXRzKQorCisyMDA5LTAxLTExIDIwOjQyICBtYWdmcgorCisgICAqICBhY2xvY2FsLm00LCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgbTQvbmV0c25tcF9hcmcubTQ6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBXZSBhcmUgY3VycmVudGx5IHVzaW5nIHRoZSBwcmFjdGljZSBvZiBhZGRpbmcKKyAgIGEgbWlycm9yaW5nIEFDX0FSR19XSVRIL0VOQUJMRSB0byBlYWNoIEFDX0FSR19FTkFCTEUvV0lUSC4gVGhpcworICAgcGF0Y2ggYWRkcyBORVRTTk1QX0FSR19XSVRIL0VOQUJMRSBtYWNyb3MgdGhhdCBhdXRvbWF0aWNhbGx5IGFkZHMKKyAgIHRoZSBtaXJyb3IgdmFyaWFibGUgYW5kIHRoZW4gY29udmVydHMgdGhlIGNvbmZpZ3VyZSBtYWNoaW5lcnkgdG8KKyAgIHVzZSB0aGVtLgorCisyMDA5LTAxLTExIDIwOjM2ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIE1vdmUgQUNfREVGSU5FUyBpbiBjb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSB0byBiZSBsb2NhdGVkIG5leHQKKyAgIHRvIHRoZSBBQ19BUkdfLi4uIHRoZXkgZGVwZW5kIG9uLgorCisyMDA5LTAxLTExIDIwOjM0ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBDaGFuZ2UgdGhlIGRlZmF1bHQgdmVyc2lvbiBudW1iZXIgY2hlY2tpbmcgdG8gYmUgZWFzaWVyIHRvIHJlYWQKKworMjAwOS0wMS0xMSAxOToxOSAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBNb3ZlIHRoZSBsYXN0IEFDX0FSR18uLi4ncyB0byBjb25maWdfcHJvamVjdF93aXRoX2VuYWJsZS4KKworMjAwOS0wMS0xMSAxOTowOCAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogQ2hhbmdlIHRoZSBtYWNybyBmb3IgLS13aXRoLWZlYXR1cmVzLW9mIGZyb20KKyAgIEFDX0FSR19FTkFCTEUgdG8gQUNfQVJHX1dJVEggaW4gb3JkZXIgdG8gbWFrZSB0aGUgb3B0aW9uIGJlCisgICAtLXdpdGgtZmVhdHVyZXMtb2YuCisKIDIwMDktMDEtMDggMTA6NDUgIGpzYWZyYW5lawogCiAgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CkBAIC00NDQ4LDEyICs2NjI1NywyMDkgQEAKICAgIGluIHN0YWJsZQogICAgYnJhbmNoZXMuIFdlIG5vdyBzdXBwb3J0IGJvdGggb2YgdGhlbS4KIAorMjAwOS0wMS0wOCAwMzo1MSAgbWFnZnIKKworICAgKiBNYWtlZmlsZS50b3A6CisKKyAgIERvIG5vdCBkZXBlbmQgb24gdGhlIGV4aXN0YW5jZSBvZiAvYmluL3NoLiBBbHNvIGZvbGxvdyB0aGUgYWR2aWNlCisgICBvZiB0aGUgYXV0b2NvbmYgbWFudWFsIGFuZCBmaW5hbGx5IGFsbG93IGZvciBsaWJ0b29sIHRoYXQgYWRvcHRzCisgICB0aGUgZ2VuZXJhdGVkIHNjcmlwdCBhZnRlciB0aGUgY2FwYWJpbGl0aWVzIG9mIFNIRUxMLgorCisyMDA5LTAxLTA3IDE2OjAyICBqc2FmcmFuZWsKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBSZW9yZGVyIHRoZSBuZXRpbmV0L2ljbXBfdmFyLmggYW5kIG5ldGluZXQvaXBfaWNtcC5oLCB0aGUgbGF0ZXIKKyAgIG9uZSBtdXN0IGJlIGNoZWNrZWQgZmlyc3Qgb24gRnJlZUJTRCA3CisKIDIwMDktMDEtMDYgMjI6MjMgIGhhcmRha2VyCiAKICAgICogQ09QWUlORzoKIAogICAgdXBkYXRlIFNQQVJUQSBmb3IgMjAwOQogCisyMDA5LTAxLTAzIDIwOjIzICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgbTQvYWNfcHJvbXB0X3VzZXIubTQ6CisKKyAgIFVwZ3JhZGUgdGhlIEFDX1BST01QVF9VU0VSIG1hY3JvcyB0byBhdXRvY29uZiAyLjYzIHdoZXJlCisgICBBQ19GRF9NU0cgaXMgZGVwcmVjYXRlZCBhbmQgQVNfTUVTU0FHRV9GRCBpcyByZWNvbW1lbmRlZC4KKworMjAwOS0wMS0wMyAxNDoyMCAgbWFnZnIKKworICAgKiAgYWNpbmNsdWRlLm00LCBhY2xvY2FsLm00LCBjb25maWd1cmUsIG00L2FjX2FkZF9zZWFyY2hfcGF0aC5tNCwgICAKKyAgICAgIG00L2FjX21zZ19jYWNoZS5tNCwgbTQvYWNfbXNnX21vZHVsZV9kYmcubTQsICAgCisgICAgICBtNC9hY19wcm9tcHRfdXNlci5tNCwgbTQvbmV0c25tcF9zZWFyY2hfbGlicy5tNDoKKworICAgU3BsaXQgYWNpbmNsdWRlLm00IGludG8gc21hbGxlciBwYXJ0cyBieSBmdW5jdGlvbi4KKworMjAwOS0wMS0wMyAxNDoxNSAgbWFnZnIKKworICAgKiBNYWtlZmlsZS5hbToKKworICAgTWFrZSBhdXRvcmVjb25mIHdvcmsgYWdhaW4uCisKKzIwMDktMDEtMDMgMTQ6MTEgIG1hZ2ZyCisKKyAgICogIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlndXJlLCBjb25maWd1cmUuYWMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBpbnN0YWxsLXNoLCBsdG1haW4uc2gsIG00LCAKKyAgICAgICAgbTQvbGlidG9vbC5tNCwgbTQvbHRvcHRpb25zLm00LCBtNC9sdHN1Z2FyLm00LCBtNC9sdHZlcnNpb24ubTQsIAorICAgICAgICBtNC9sdH5vYnNvbGV0ZS5tNDoKKworICAgVXBkYXRlIHRvIGxpYnRvb2wtMi4yLjQKKworMjAwOS0wMS0wMyAxMzoyOCAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczogQ2hlY2sgZm9yIGEgZnVuY3Rpb24sIG5vdCBhIG1hY3JvLgorICAgY29uZmlndXJlOiBSZWdlbmVyYXRlCisKKzIwMDktMDEtMDMgMDE6MDMgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIHJlcXVpcmUgLWxzc2w7IHdpbGwgYmUgY2hhbmdlZCBsYXRlciB0byBkbyAnaWYgbmVlZGVkJworCisyMDA5LTAxLTAzIDAwOjE5ICBtYWdmcgorCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvbWliSUkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmgsIGFnZW50L21pYmdyb3VwL3RhcmdldC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvc25tcF9nZXRfc3RhdGlzdGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvc25tcF9nZXRfc3RhdGlzdGljLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBVbmlmeSBhbGwgc25tcGQgc3RhdGlzdGljIHZhcmlhYmxlcyBhbmQgbWFrZSB0aGUKKyAgIGhhbmRsZXJzIGluc3RhbmNlcyBvZiBhIGNvbW1vbiBoYW5kbGVyLgorCisyMDA5LTAxLTAxIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBjbGVhbiB1cCBhIGZldyBjb21tZW50cyBhbmQgcmVtb3ZlIHVudXNlZCBmdW5jdGlvbgorCisyMDA5LTAxLTAxIDE3OjI1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBmaXggdmFyaW91cyBtaW5vciBtZW1vcnkgbGVhayBpc3N1ZXMKKworMjAwOS0wMS0wMSAxNDoyOCAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgsIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtdG9wLm0yYywgCisgICAgICAgIGxvY2FsL21pYjJjLmFycmF5LXVzZXIuY29uZiwgbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5jcmVhdGUtZGF0YXNldC5jb25mLCBsb2NhbC9taWIyYy5pbnRfd2F0Y2guY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnJvdy5jb25mLCBsb2NhbC9taWIyYy5zY2FsYXIuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgTkVXUzogc25tcGxpYjogQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBvaWQgYXJndW1lbnRzIGZyb20gb2lkKiB0bworICAgY29uc3Qgb2lkKi4gVXBkYXRlIG1pYjJjIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBjaGFuZ2UuCisKKzIwMDktMDEtMDEgMTM6NTYgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jOgorCisgICBDaGVjayByZXR1cm4gdmFsdWVzIGFuZCBmcmVlIGFsbG9jYXRlZCByZXNvdXJjZXMgb24gZXJyb3IuCisKKzIwMDktMDEtMDEgMTI6NTQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICBEbyBub3QgbGVhayBhbGlhc19saXN0IG9uIHJldHVybiBmcm9tIF9uZXh0X2FsaWFzLgorCisyMDA5LTAxLTAxIDExOjI2ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgTWFrZSB2YXJpYWJsZSBjb25zdCBhcyBpdCBuZXZlciBpcyBjaGFuZ2VkLgorCisyMDA5LTAxLTAxIDExOjI1ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jOgorCisgICBSZW1vdmUgYW4gdW51c2VkIHZhcmlhYmxlLgorCisyMDA4LTEyLTMxIDIxOjQxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGRvbid0IHVzZSB0aGUgZnVuY3Rpb25zIGlmIHdlJ3JlIG5vdCBsaW5rZWQgd2l0aCBvcGVuc3NsCisKKzIwMDgtMTItMzEgMjA6NTYgIGhhcmRha2VyCisKKyAgICogcGVybC9UcmFwUmVjZWl2ZXIvY29uc3QtYy5pbmMsIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LXhzLmluYzoKKworICAgbmV3ZXIgcGVybCBnZW5lcmF0ZWQgdXBkYXRlcworCisyMDA4LTEyLTMxIDE4OjAyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgYWRkZWQgYSBmZXcgbW9yZSByZWN2L3NlbmQgZGVidWdnaW5nIHN0YXRlbWVudHMKKworMjAwOC0xMi0zMSAxODowMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzoKKworICAgQWxsb3cgcXVvdGVkIHNlY3VyaXR5IG5hbWVzIGZvciBvbmVzIGNvbnRhaW5pbmcgc3BhY2VzCisKKzIwMDgtMTItMzEgMTg6MDEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGFuIG9wZW5zc2wgaW5pdGlhbGl6YXRpb24gd3JhcHBlcgorCisyMDA4LTEyLTMwIDAwOjAzICBtYWdmcgorCisgICAqIGFwcHMvc25tcHRlc3QuYywgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgVXNlIHNubXBfZHVwbGljYXRlX29iamlkIGluc3RlYWQgb2YgdmFyaW91cyBtYWxsb2MrbWVtY3B5CisgICB2YXJpYW50cyBpbiBvcmRlciB0byBtYWtlIGNsZWFyZXIgY29kZS4KKworMjAwOC0xMi0yOSAyMzozNCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCBzbm1wbGliL2FzbjEuYzoKKworICAgVXNlIGZvcm1hdCBzdHJpbmdzIGZvciBwcmludGYtbGlrZSBmdW5jdGlvbnMuCisgICBQcmVmZXIgc3RyY3B5IG92ZXIgc3ByaW50ZihkZXN0LCAiJXMiLCBzcmMpCisgICBQcmVmZXIgREVCVUdNU0dUTCgoZm9ybWF0LCBhcmdzKSkgb3ZlciBzcHJpbnRmKGxvY2FsLCBmb3JtYXQsCisgICBhcmdzKTsgREVCVUdNU0dUTCgoIiVzIiwgbG9jYWwpKQorCisyMDA4LTEyLTE4IDE3OjA0ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIGV4cG9ydCBvdXQgb2YgdGhlIGZpbGUgc29tZSBoZWxwZnVsIGdlbmVyaWMgdWRwIGZ1bmN0aW9ucworCisyMDA4LTEyLTE2IDAwOjEzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oOgorCisgICBjaGFuZ2UgbG9jYWxzbSBzZWN1cml0eSBtb2RlbCB0byB0c20gKGFuZCBhZGQgMSkKKwogMjAwOC0xMi0xNSAyMzoyNSAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmM6CkBAIC00NDYxLDEyICs2NjQ2Nyw2MSBAQAogICAgUGF0Y2ggdG8gY2hhbmdlIGEgdHlwZWRlZiBuYW1lIGZyb20gbGluayB0byBub2RlbGluayB0byBhdm9pZAogICAgbmFtaW5nIGNvbmZsaWN0IGlzc3Vlcy4KIAotMjAwOC0xMi0wOSAwMTowMSAgaGFyZGFrZXIKKzIwMDgtMTItMDkgMDE6NDEgIGhhcmRha2VyCiAKLSAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBsb2NhbHNtLmgsIHNubXBsaWIvc25tcGxvY2Fsc20uYzoKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKIAotICAgQXMgYWdyZWVkIGluIHRoZSBhZG1pbiBtZWV0aW5nLCByZW1vdmUgdGhlIG9sZGVyIHNubXBsb2NhbHNtCi0gICBzZWN1cml0eSBtb2RlbAorICAgdXNlIGludDMyX3QgaW5zdGVhZCBvZiBpbnRfMzIgd2hpY2ggZG9lc24ndCB3b3JrIGF0IGFsbCBvbiBGMTAKKworMjAwOC0xMi0wOSAwMTowNyAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICByZW1vdmUgdGhlIG5vdGUgdGhhdCB3ZSBtb3ZlZCB0byBzdm4uLi4gb2Jzb2xldGUgYXQgdGhpcyBwb2ludCwKKyAgIHRvIHNheSB0aGUgbGVhc3QKKworMjAwOC0xMi0wOSAwMTowNSAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBtZW50aW9uIHRoZSBUU00gaW1wbGVtZW50YXRpb24KKworMjAwOC0xMi0wOSAwMDo1OCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgZmxhZyBzb21lIHN0ZXBzIGFuZCBtYW5kYXRvcnkKKworMjAwOC0xMi0wOSAwMDo1NyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oOgorCisgICByZW1vdmUgYWNjaWRlbnRpYWwgbmV3IGRlZmluZXMgdGhhdCBhcmVuJ3QgbmVlZGVkIHlldAorCisyMDA4LTEyLTA5IDAwOjU2ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGxvY2Fsc20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgsIHNubXBsaWIvc25tcGxvY2Fsc20uYywgICAKKyAgICAgIHNubXBsaWIvc25tcHRzbS5jOgorCisgICByZW1vdmUgb2xkZXIgbG9jYWxzbSBzZWN1cml0eSBtb2RlbCBhbmQgcmVwbGFjZSB3aXRoIGEgbmV3ZXIgVFNNCisgICBiYXNlZCBvbiB0aGUgdXBjb21pbmcgSUVURiBzcGVjCisKKzIwMDgtMTItMDkgMDA6NTAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBmaXggaXNzdWUgd2l0aCBjb250ZXh0IHByb2JpbmcKKworMjAwOC0xMi0wNCAxMjozMyAganNhZnJhbmVrCisKKyAgICogYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdHJhcGQuYzoKKworICAgRGFlbW9uaXplIGFmdGVyIHRyYW5zcG9ydHMgYXJlIGNyZWF0ZWQgYW5kIGxpc3RlbmluZyBzb2NrZXRzIGFyZQorICAgYm91bmQgdG8gYXBwcm9wcmlhdGUgcG9ydHMuIFRoaXMgYWxsb3dzIHRvIGV4aXQgd2l0aCBub3plcm8gZXhpdAorICAgY29kZSB3aGVuIHRoZSBiaW5kaW5nIGZhaWxzLgogCiAyMDA4LTEyLTA0IDExOjQ0ICBqc2FmcmFuZWsKIApAQCAtNDQ3NSw2ICs2NjUzMCw0MCBAQAogCiAgICBQcmludCBwb3J0cyBhcyB1bnNpZ25lZCBudW1iZXJzLgogCisyMDA4LTExLTI0IDE5OjA5ICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oOgorCisgICBfX0VYVEVOU0lPTlNfXyBpcyBub3cgaGFuZGxlZCBieSBjb25maWd1cmUKKworMjAwOC0xMS0yMiAxODozNiAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50OgorCisgICBEbyBub3QgdHJ5IHRvIHVzZSB0aGUgbW9kdWxlIGxpc3QgYXMgYSBmaWxlIHRoYXQgc2hvdWxkIGJlCisgICBpbmNsdWRlZCBpbiB0aGUgYnVpbGQsIHRodXMgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIG9uCisgICBTb2xhcmlzLgorCisyMDA4LTExLTIwIDIyOjMwICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X3RyYXAuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYywgCisgICAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIFJlcGxhY2UgbWVtZHVwKCh1X2NoYXIqKikmeCwgKHVfY2hhciopeSwgeiAqIHNpemVvZihvaWQpKSB3aXRoIHgKKyAgID0gc25tcF9kdXBsaWNhdAorICAgZV9vYmppZCh5LCB6KSBzaW5jZSB0aGUgbGF0ZXIgaXMgZWFzaWVyIHRvIHJlYWQgYW5kIGV4cHJlc3NlcyB0aGUKKyAgIGludGVudGlvbiBvZiB0CisgICBoZSBjb2RlIGNsZWFyZXIuCisKKzIwMDgtMTEtMjAgMjI6MDEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBVc2UgbWVtY3B5IGluc3RlYWQgb2YgbWVtbW92ZSB0byBjb3B5IG9pZHMgYXMgaXQgaXMga25vd24gdGhhdAorICAgdGhlIGFyZWFzIGFyZSBub25vdmVybGFwcGluZy4KKwogMjAwOC0xMS0yMCAyMDo1MSAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBTVEREb21haW4uYzoKQEAgLTQ0ODgsNiArNjY1NzcsMzUgQEAKICAgIENIQU5HRVM6IERvIG5vdCB1c2UgJW0gaW4gcHJpbnRmLWZvcm1hdHRlZCBzdHJpbmdzIHNpbmNlICVtIGluCiAgICBwcmludGYgaXMgYSBnbGliYyBleHRlbnNpb24uCiAKKzIwMDgtMTEtMTYgMjI6MDEgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLmFjOgorCisgICBCdW1wIHRoZSByZXF1aXJlZCBhdXRvY29uZiB2ZXJzaW9uIHRvIDIuNjMgYXMgcGVyIDE3MzAxLgorCisyMDA4LTExLTE2IDIxOjU1ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczoKKworICAgUmVtb3ZlIGFuIHVudXNlZCBmdW5jdGlvbiBmcm9tIHRoZSBjb25maWd1cmUgdGVzdCBmb3IgX19mdW5jX18uCisKKzIwMDgtMTEtMTYgMjE6NTEgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBNNCB1c2VzIGRubCwgbm90IFwgZm9yIGxpbmUgY29uY2F0ZW5hdGlvbi4KKyAgIFwgaW50cm9kdWNlZCBhIHNwdXJpb3VzIGRlZmluZSBpbiBuZXQtc25tcC1jb25maWcuaC5pbiwgdGh1cyB0aGlzCisgICBjaGFuZ2UuCisgICBSZXJhbiBhdXRvY29uZiBhbmQgYXV0b2hlYWRlci4KKworMjAwOC0xMS0xMyAyMjoxNCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZToKKworICAgTkVXUzogYnVpbGQ6IHVwZGF0ZSB0byBhdXRvY29uZiAyLjYzCisKIDIwMDgtMTEtMTMgMDA6MzAgIHRhbmRlcnMKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgpAQCAtNDQ5NywxMSArNjY2MTUsMTcgQEAKIAogMjAwOC0xMS0xMyAwMDoyNiAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQ6CiAKICAgIGZpeCB0eXBvCiAKLTIwMDgtMTEtMTMgMDA6MjQgIHRhbmRlcnMKKzIwMDgtMTEtMTMgMDA6MjYgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudDoKKworICAgZml4IHR5cG8KKworMjAwOC0xMS0xMyAwMDoxOSAgdGFuZGVycwogCiAgICAqIGRpc3QvZXh0cmFjdG5ld3M6CiAKQEAgLTQ1MjcsMTIgKzY2NjUxLDExNyBAQAogICAgTkVXUzogc25tcGQ6IEFwcGx5aW5nIHBhdGNoIGZyb20gTWFnbnVzIEZyb21yZWlkZSB0byBmaXggdGhlCiAgICBnZXRidWxrIGlzc3VlIHJlcG9ydGVkIGJ5IE9zY2FyIE1pcmEtU2FuY2hlegogCisyMDA4LTEwLTMwIDIyOjM0ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2U6CisKKyAgIHJlbW92ZSB0aGUgb2xkZXIgKG9ic29sZXRlKSBtYWtlcmVsZWFzZSBzY3JpcHQKKworMjAwOC0xMC0yMiAxNzoyNCAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCB0aGUgbGliIHVzaW5nIGEgQysrIGNvbXBpbGVyIG9uY2UgbW9yZS4KKwogMjAwOC0xMC0yMiAwNzoyOSAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CiAKICAgIERvbid0IGNsZWFyIHNlc3Npb24gZmxhZ3Mgd2hlbiB0ZXN0aW5nIG9uZSBiaXQuCiAKKzIwMDgtMTAtMjEgMjE6MTAgIG1hZ2ZyCisKKyAgICogIEFHRU5ULnR4dCwgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCBhZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cFZhbHVlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvaHB1eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2hwdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oLCBsb2NhbC9taWIyYy5vbGQtYXBpLmNvbmYsICAgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL0ZBUS5odG1sOgorCisgICBORVdTOiBtaXNjOiBQQVRDSDogMTczNzcyNzogZnJvbSBqb3ljZWFubWFjaGluZTogQWRkIGEKKyAgIE5FVFNOTVBfT0xEQVBJXyBwcmVmaXggdG8gdGhlIGFjY2VzcyBtYWNyb3MgdGhhdCBhcmUgdXNlZCBpbiB0aGUKKyAgIG9sZC1hcGkgaGVscGVyLgorICAgSSBkaWQgYWRkIHRoZSBwcmVmaXggdG8gYWxsIHVzZXJzIGluIG91ciBjb2RlLgorCisyMDA4LTEwLTIxIDIxOjAwICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oLCAKKyAgICAgICAgc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jOgorCisgICBORVdTOiBtaXNjOiBQQVRDSDogMTczNzcyNzogZnJvbSBqb3ljZWFubWFjaGluZTogUmVwbGFjZSBhbGwgdXNlcworICAgb2YgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0Ugd2l0aCBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworCiAyMDA4LTEwLTE2IDA5OjU2ICBqc2FmcmFuZWsKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIApAQCAtNDU0Miw2ICs2Njc3MSw1MSBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMDgyNzI2OiBjb3JyZWN0bHkgcmVwb3J0IE5JQyBzcGVlZHMKICAgIGhpZ2hlciB0aGFuIDRHYml0L3MKIAorMjAwOC0xMC0xNiAwODowMCAganNhZnJhbmVrCisKKyAgICogbWFuOgorCisgICBTY3JhdGNoIHByZXZpb3VzIGNvbW1pdCwgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMSB0byBiZSBpZ25vcmVkLgorCisyMDA4LTEwLTE2IDA3OjM3ICBqc2FmcmFuZWsKKworICAgKiBtYW46CisKKyAgIEFkZCBjb21waWxlZCBuZXQtc25tcC1jb25maWcuMSB0byBzdm46aWdub3JlIGxpc3QKKworMjAwOC0xMC0xNSAxMjo1NyAganNhZnJhbmVrCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9pcC1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2dldC5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZW51bXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCwgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9vaWRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMTc5NzExMTogaW1wbGVtZW50IElQLU1JQjo6aXBJZlN0YXRzVGFibGUKKworMjAwOC0xMC0xNSAwOToyNyAgdGFuZGVycworCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcG9ydGFiaWxpdHkgZml4OiBhdm9pZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaW4gdGhlIG1pZGRsZSBvZgorICAgY29kZQorCiAyMDA4LTEwLTE0IDE4OjU1ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgpAQCAtNDU3MCw2ICs2Njg0NCwyMyBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxOTc3NDM5OiBGaXggcGFzcy9fcGVyc2lzdCBidWcgd2l0aCBTRVQKICAgIG9pZCB2YWx1ZQogCisyMDA4LTEwLTEyIDE3OjI0ICBtYWdmcgorCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBSZWltcGxlbWVudGF0aW9uIG9mIHNubXBNUERTdGF0cy4KKworMjAwOC0xMC0xMCAyMToxMyAgZHRzMTIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNDoKKworICAgQ29uc29saWRhdGUgY2hlY2tzIG9uIGdlbmVyYWwgTy9TIGNoYXJhY3RlcmlzdGljcworCiAyMDA4LTEwLTA3IDA4OjUwICBqc2FmcmFuZWsKIAogICAgKiBkaXN0L2ZpbmQtcmVxdWlyZXM6CkBAIC00NTc3LDE4ICs2Njg2OCw3OCBAQAogICAgQ0hBTkdFUzogYnVpbGRpbmc6IEJVRzogMjA5NTk4MzogZml4IHN5bnRheCBlcnJvciBpbgogICAgZmluZC1yZXF1aXJlcyBoZWxwZXIgc2NyaXB0IGFuZCBtYWtlIGl0IGV4ZWN1dGFibGUKIAorMjAwOC0xMC0wNiAxOTozMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgaWZkZWYgc3lzL3BvbGwKKworMjAwOC0xMC0wMyAxNDoxNiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYzoKKworICAgcGF0Y2ggZnJvbSBTaGFjaGFyIFNjaGVtZXNoIHRvIGZpeCBhIHF1b3RlIGVzY2FwaW5nCisKKzIwMDgtMDktMzAgMjI6MTkgIGhhcmRha2VyCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYzoKKworICAgYWRkZWQgYSBuZWVkZWQgdHJhaWxpbmcgbmV3bGluZQorCiAyMDA4LTA5LTMwIDIyOjExICBkdHMxMgogCiAgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CiAKICAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyMDIyOTQ4OiBGaXggZm9yIENvdW50ZXI2NCBpbiBwZXJsIHN1YmFnZW50CiAKKzIwMDgtMDktMzAgMjE6NDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICAtIE5FV1M6IHNubXBsaWI6IEltcGxlbWVudGVkIFJGQzUzNDMgY29udGV4dEVuZ2luZUlEIHByb2JpbmcuCisgICBUaGlzIGFsbG93cyBmb3IgcHJvYmluZyBvZiB0aGUgY29udGV4dEVuZ2luZUlEIHdpdGhvdXQgcmVxdWlyaW5nCisgICB0aGUgVVNNIHNlY3VyaXR5IG1vZGVsLgorICAgLSBpbXBsZW1lbnRlZCBlbnRpcmVseSB3aXRoaW4gdGhlIGxpYnJhcnkgZm9yIGJvdGggY2xpZW50cyBhbmQKKyAgIHNlcnZlcnMuCisKKzIwMDgtMDktMzAgMjE6MzMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg6CisKKyAgIEFkZCBhIGxvY2FsIGRlZmluaXRpb24gZm9yIGhhdmluZyBzZWN1cml0eSBtb2RlbHMgZGVmaW5lIHRoZWlyCisgICBvd24KKyAgIGNvbnRleHRFbmdpbmVJRCBwcm9iZQorCisyMDA4LTA5LTMwIDIxOjMxICBoYXJkYWtlcgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEFkZCBhIGRlZmluaXRpb24gZm9yIHRoZSBTU0ggZG9tYWluCisKIDIwMDgtMDktMzAgMjE6MDggIGR0czEyCiAKICAgICogYWdlbnQvc25tcF9hZ2VudC5jOgogCiAgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDEyNTczNDc6IE5vbi1maXhlZCBzaXplIGNvbm5lY3Rpb24gYnVmZmVyCiAKKzIwMDgtMDktMzAgMDc6MzIgIGpzYWZyYW5laworCisgICAqIGFnZW50L01ha2VmaWxlLmluOgorCisgICBORVdTOiBidWlsZGluZzogUEFUQ0g6IDIwOTExNTY6IGNvcnJlY3RseSBkZWNsYXJlIGRlcGVuZGVuY2llcyBpbgorICAgTWFrZWZpbGUuCisgICAnbWFrZSAtaiA8Tj4nIHNob3VsZCB3b3JrIG5vdy4KKworMjAwOC0wOS0yNCAyMDo1OCAgZHRzMTIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzOgorCisgICBJZGVudGlmeSB3aGVyZSBwYXJ0aWN1bGFyIGNoZWNrcyBhcmUgYWN0dWFsbHkgdXNlZAorICAgKGxpYnJhcnksIGFnZW50LCBhcHBsaWNhdGlvbnMgb3Igbm90IGF0IGFsbCkKKwogMjAwOC0wOS0yNCAxMjo1MyAganNhZnJhbmVrCiAKICAgICogIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmMsICAgCkBAIC00NTk3LDc3ICs2Njk0OCwxMzIgQEAKICAgIFVzZSB0aGUgbG9uZ2VzdCBpbnRlZ2VyIGZvciBpbm9kZSBudW1iZXJzIGFuZCAocG9zc2libHkgNjQgYml0KQogICAgY291bnRlcnMuCiAKLTIwMDgtMDktMDUgMDk6MjcgIGR0czEyCisyMDA4LTA5LTIwIDA5OjAxICBtYWdmcgogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzM6CiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMiApCisgICBORVdTOiBidWlsZDogRG8gbm90IHJlcXVpcmUgdXNlIG9mIC0td2l0aC1lbmRpYW5uZXNzIHdoZW4KKyAgIGNyb3NzLWNvbXBpbGluZy4KIAotMjAwOC0wOS0wNSAwOToyNyAgZHRzMTIKKzIwMDgtMDktMTkgMTU6MTkgIGR0czEyCiAKLSAgICogQ0hBTkdFUzoKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIENvcnJlY3QgbG9jYXRpb24gb2YgZG9jdW1lbnRhdGlvbiBmaWxlcy4KIAotMjAwOC0wOS0wNSAwOToyNSAgZHRzMTIKKzIwMDgtMDktMTkgMDU6MjggIG1hZ2ZyCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgQW5kIGFkZCB0aGUgY2h1bmsgdGhhdCBJIGxvc3QuCiAKLTIwMDgtMDktMDUgMDk6MjAgIGR0czEyCisyMDA4LTA5LTE5IDA1OjIzICBtYWdmcgogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24sICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBNb3ZlIG1vcmUgdGhpbmdzIGZyb20gYWNjb25maWcuaCB0byB0aGUgdGVtcGxhdGVzIGluIHRoZQorICAgY29uZmlndXJlIGlucHV0IGZpbGVzLgogCi0yMDA4LTA5LTA1IDA5OjE2ICBkdHMxMgorMjAwOC0wOS0xNyAxMzozMSAganNhZnJhbmVrCiAKLSAgICogZG94eWdlbi5jb25mOgorICAgKiBkaXN0L2ZpbmQtcmVxdWlyZXM6CiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMiApCisgICBtYWtlIGZpbmQtcmVxdWlyZXMgZXhlY3V0YWJsZSBzbyBpdCdzIGFjdHVhbGx5IHVzYWJsZSBieSB0aGUKKyAgIG5ldC1zbm1wLnNwZWMKIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjAwOC0wOS0xNyAxMjowOCAganNhZnJhbmVrCiAKLUNoYW5nZXM6IFY1LjQuMSAtPiBWNS40LjIKKyAgICogbWFuL01ha2VmaWxlLmluLCBtYW4vbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMS5kZWY6CisKKyAgIGFkZCBtYW4gcGFnZSBmb3IgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIKKworMjAwOC0wOS0xNiAxODowMiAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGdXJ0aGVyIG1pbmltaXphdGlvbiBvZiBhY2NvbmZpZy5oCisKKzIwMDgtMDktMTEgMjI6MjggIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTW92ZSBhIGZldyBtb3JlIHZhcmlhYmxlcyBvdXQgb2YgYWNjb25maWcuaAorCisyMDA4LTA5LTExIDIwOjM3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxNzM3NDM5OiBmcm9tIGVtaXk6IGF1dG9tYXRpYyBsaW5rIHVwL2Rvd24KKyAgIHRyYXBzIG9uIGEgd2Fsazsgc3RpbGwgbmVlZCBhIGJldHRlciBpbnRlcmZhY2UgZm9yIG1hbnVhbGx5IGRvaW5nCisgICB0aGluZ3Mgb24gYW4gb2NjYXNpb25hbCBiYXNpcworCisyMDA4LTA5LTExIDIwOjI1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IFBBVENIOiA3MDA2ODE6IGxpbWl0ZWQgc3VwcG9ydCBmb3IgVURQdjQgYnJvYWRjYXN0CisgICBhZGRyZXNzZXMKKworMjAwOC0wOS0xMCAwNjozOSAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlcywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgQUNfQ0hFQ0tfVFlQRVMgaW5zdGVhZCBvZiBhIGhvbWVncm93bgorICAgYWx0ZXJuYXRpdmUgdG8gY2hlY2sgZm9yIHR5cGVzCisKKzIwMDgtMDktMDkgMjA6MjcgIG1hZ2ZyCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIEFkZCBhbGwgdGhlIHBhcnRzIG9mIGNvbmZpZ3VyZS5hYyB0byB0aGUgZGVwZW5kZW5jeSBsaXN0CisKKzIwMDgtMDktMDkgMTg6MTMgIGhhcmRha2VyCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIHVwZGF0ZSB0byByZWZsZWN0IGNvbmZpZ3VyZS5pbiAtPiBjb25maWd1cmUuYWMgY2hhbmdlCisKKzIwMDgtMDktMDkgMTY6MTUgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgZGVmYXVsdCB0byAtcDAKKworMjAwOC0wOS0wOCAyMzo0MSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBsb2NhbHNtLmM6CisKKyAgIGNoZWNrIGZvciBhIHNlc3Npb24gdHVubmVsZWQgZmxhZyBiZWZvcmUgcmV0dXJuaW5nIGFuCisgICBhdXRoZW50aWNhdGlvbiBmYWlsdXJlCisKKzIwMDgtMDktMDggMjM6MzkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBTZXQgdGhlIHR1bm5lbGVkIGZsYWcgd2hlbiBkZWFsaW5nIHdpdGggYSB0dW5uZWwtYmFzZWQgdHJhbnNwb3J0OworICAgZG9uJ3QgcmVxdWlyZSBhIHNlY3VyaXR5RW5naW5lSUQgaWYgdGhlIHNlY3VyaXR5IG1vZGVsIGRvZXNuJ3QKKyAgIGhhdmUgb25lIChqdXN0IFVTTSBuZWVkcyBpdCkKKworMjAwOC0wOS0wOCAyMDoyNCAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oLCBzbm1wbGliL3NubXAtdGMuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAyMDk5OTg1OiBBZGRlZCBjb25zdCBxdWFsaWZpZXJzIHRvIHRpbWUKKyAgIGNvbnZlcnNpb24gcm91dGlucwogCiAyMDA4LTA5LTA1IDA3OjUxICBkdHMxMgogCkBAIC00NjgwLDc2ICs2NzA4Niw3NSBAQAogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CiAKLSAgIENIQU5HRVM6IHB5dGhvbjogQlVHOiAxODY4Mjc4OiBQeXRob24gc2VnZmF1bHQgKGludHJvZHVjZWQgYnkgcjE2OTYyKQorICAgQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDE4NjgyNzg6IFB5dGhvbiBzZWdmYXVsdCAoaW50cm9kdWNlZCBieQorICAgcjE2OTYyKQogCi0yMDA4LTA4LTI5IDIxOjE5ICBkdHMxMgorMjAwOC0wOS0wMyAxMzo0MyAgZHRzMTIKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjIucmMzICkKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMjAwMDg3NDogQ2xlYW51cCB0cmFuc3BvcnQgc2VsZWN0aW9uLgogCi0yMDA4LTA4LTI5IDIxOjE4ICBkdHMxMgorMjAwOC0wOS0wMyAxMzoyOSAgZHRzMTIKIAotICAgKiBDSEFOR0VTLCBORVdTOgorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbjoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIFRpZHkgdXAgcGVybC9weXRob24gYW5kIE8vUyBkYXRhIHN0cnVjdHVyZSB0ZXN0cy4KIAotMjAwOC0wOC0yOSAyMToxNSAgZHRzMTIKKzIwMDgtMDgtMzEgMTg6MTQgIGR0czEyCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBUaWR5IHVwIChtb3N0IG9mKSB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzIG9mIHRoZSBjb25maWd1cmUKKyAgIGZyYW1ld29yay4KKyAgIFRoaXMgaXMgbW9zdGx5IHJlLWluZGVudGF0aW9uLCByZS1jb21tZW50aW5nLCBhbmQgYSBjZXJ0YWluCisgICBhbW91bnQKKyAgIG9mIGp1ZGljaW91cyByZS1vcmRlcmluZyBvZiB0aGUgdGVzdHMgd2l0aGluIGluZGl2aWR1YWwKKyAgIHN1Yi1zY3JpcHQuCiAKLTIwMDgtMDgtMjkgMjE6MDggIGR0czEyCisyMDA4LTA4LTMxIDE3OjMwICBkdHMxMgogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYzoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIEFubm90YXRlIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB3aXRoIHN1Z2dlc3RlZCBiZXN0IHByYWN0aWNlCisgICBzdHJ1Y3R1cmUuCisgICBOb3RlIHRoYXQgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGhhcyBhbHRlcmVkIHRoZSBjb2RlIHdpdGhpbgorICAgJ2NvbmZpZ3VyZScgaXRzZWxmIChvdGhlciB0aGFuIGFmZmVjdGluZyBsaW5lIG51bWJlcnMpCiAKLTIwMDgtMDgtMjkgMjE6MDQgIGR0czEyCisyMDA4LTA4LTMxIDE3OjI2ICBkdHMxMgogCi0gICAqIGRveHlnZW4uY29uZjoKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBjb25maWd1cmUuZCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIAorICAgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgCisgICAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24sICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlcywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjIucmMzICkKKyAgIE5FV1M6IGJ1aWxkOiBzcGxpdCBjb25maWd1cmUgdGVtcGxhdGUgaW50byBzZXBhcmF0ZSBwaWVjZXMuCisgICAoTW9zdGx5KSBzZWxmLWNvbnRhaW5lZCwgYW5kIHNpZ25pZmljYW50bHkgbGVzcyBjb25mdXNpbmchCiAKKzIwMDgtMDgtMzEgMTc6MjMgIGR0czEyCisKKyAgICogY29uZmlndXJlLmFjLCBjb25maWd1cmUuaW46CisKKyAgIFJlbmFtZSBjb25maWd1cmUgdGVtcGxhdGUgaW4gbGluZSB3aXRoIGN1cnJlbnQgYmVzdCBwcmFjdGljZS4KIAogMjAwOC0wOC0yOSAxOTo1NCAgZHRzMTIKIApAQCAtNDc1NywxMiArNjcxNjIsMjAgQEAKIAogICAgUmV0YWluIGZpbGVuYW1lcyB3aGljaCBkb24ndCBpbmNsdWRlIHRoZSBleHBlY3RlZCBwcmVmaXguCiAKKzIwMDgtMDgtMjcgMjE6NTUgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jczoKKworICAgaWdub3JlIC5saWJzIGRpcmVjdG9yaWVzCisKIDIwMDgtMDgtMjcgMTM6MzkgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYzoKIAogICAgUy8zOTAgdXNlcyBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybWF0IG9mIHRoZSAvcHJvYy9jcHVpbmZvIGZpbGU6Ci0gICBwcm9jZXNzb3IgMDogdmVyc2lvbiA9IEZGLCBpZGVudGlmaWNhdGlvbiA9IDA2MEFGRSwgbWFjaGluZSA9IDIwOTQKKyAgIHByb2Nlc3NvciAwOiB2ZXJzaW9uID0gRkYsIGlkZW50aWZpY2F0aW9uID0gMDYwQUZFLCBtYWNoaW5lID0KKyAgIDIwOTQKIAogMjAwOC0wOC0yMiAyMzo0NyAgdGFuZGVycwogCkBAIC00Nzc2LDE0ICs2NzE4OSwxOCBAQAogCiAgICBORVdTOiBidWlsZDogQlVHOiAyMDIzODAzOiBDb21waWxhdGlvbiBwcm9ibGVtcyBvbiBIUC1VWCAxMS4zMQogICAgQ0hBTkdFUzogYnVpbGQ6IExpbWl0IHRoZSB1c2Ugb2YgX0tFUk5FTCBkZWZpbml0aW9ucyBpbiBjb25maWd1cmUKLSAgIHRlc3RzIHRvIG1hdGNoIHRoZSB1c2Ugb2YgX0tFUk5FTCBpbiBvdXIgY29kZWJhc2UKKyAgIHRlc3RzIHRvIG1hdGNoIHRoZSB1c2UKKyAgIG9mIF9LRVJORUwgaW4gb3VyIGNvZGViYXNlCiAKIDIwMDgtMDgtMjIgMDA6MTggIHRhbmRlcnMKIAotICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CiAKLSAgIEZpeCBidWlsZCBmYWlsdXJlIG9uIEhQLVVYIDExLjMxOiB1c2UgZ2V0cGFnZXNpemUoKSBpbnN0ZWFkIG9mIFBHU0hJRlQuCi0gICBTdWNjZXNzZnVsbHkgdGVzdGVkIG9uIEhQLVVYIDEwLjIwLCAxMS4wMCwgMTEuMTEsIDExLjIzIGFuZCAxMS4zMS4KKyAgIEZpeCBidWlsZCBmYWlsdXJlIG9uIEhQLVVYIDExLjMxOiB1c2UgZ2V0cGFnZXNpemUoKSBpbnN0ZWFkIG9mCisgICBQR1NISUZULgorICAgU3VjY2Vzc2Z1bGx5IHRlc3RlZCBvbiBIUC1VWCAxMC4yMCwgMTEuMDAsIDExLjExLCAxMS4yMyBhbmQKKyAgIDExLjMxLgogCiAyMDA4LTA4LTIxIDEwOjAzICBqc2FmcmFuZWsKIApAQCAtNDc5MSwzNTQ3ICs2NzIwOCw1MzI4IEBACiAKICAgIGFkZCBTQ1RQLU1JQgogCisyMDA4LTA4LTIwIDE3OjM3ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBIYXZlIG9ubHkgb25lIHZhcmlhYmxlIG5hbWVkIHBhc3N3ZCBpbiBzbXV4X2F1dGhfcGVlci4KKwogMjAwOC0wOC0xOSAyMzoyMiAgdGFuZGVycwogCiAgICAqIFJFQURNRS50cnU2NDoKIAogICAgdXBkYXRlIFJFQURNRSBmb3IgVHJ1NjQgYWZ0ZXIgdGhlIHNlbmR0by9yZWN2ZnJvbSBmaXhlcwogCi0yMDA4LTA4LTE5IDIwOjM2ICBkdHMxMgorMjAwOC0wOC0xOSAyMDoyNyAgdGFuZGVycwogCi0gICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywgICAKLSAgICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oOgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjIucmMyICkKKyAgIGZpeCBzaWduaWZpY2FudCB0eXBvCiAKLTIwMDgtMDgtMTkgMjA6MzYgIGR0czEyCisyMDA4LTA4LTE5IDEzOjI1ICBkdHMxMgogCi0gICAqIENIQU5HRVMsIE5FV1M6CisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaDoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIEZvcmNlIHVzZSBvZiAvcHJvYy8lZC9wc2luZm8gaW50ZXJmYWNlIG9uIFNvbGFyaXMuCisgICBUZW1wb3JhcnkgaGFjayB3aGlsZSB3ZSBpbnZlc3RpZ2F0ZSB0aGUgaXNzdWVzIHdpdGgKKyAgIHRoZSBrdm1fcHJvYygpIGNvZGUuCisgICAKKyAgIFRoZSAnY29uZmlnX3JlcXVpcmUnIHByb2Nlc3NpbmcgZG9lc24ndCBjdXJyZW50bHkKKyAgIHBpY2sgdXAgdGhlIGZ1bGwgI2lmZGVmIGVudmlyb25tZW50LCBzbyBkZWZhdWx0cworICAgdG8gdXNpbmcga3ZtX3Byb2MoKS4gSSdtIG5vdCBjb252aW5jZWQgdGhpcyB3YXMKKyAgIHdvcmtpbmcgYmVmb3JlIGFueXdheSwKIAotMjAwOC0wOC0xOSAyMDoyNiAgZHRzMTIKKzIwMDgtMDgtMTkgMTM6MTcgIGR0czEyCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIEZpeCBwcm9ibGVtcyBpbiAvcHJvYy8lZC9wc2luZm8gaW50ZXJmYWNlIHByb2Nlc3NpbmcuCiAKLTIwMDgtMDgtMTkgMjA6MDggIGR0czEyCisyMDA4LTA4LTE5IDA4OjQ3ICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycywgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2VzczoKIAotICAgbWFrZSBkZXBlbmQKKyAgIElnbm9yZSBsaWJyYXJ5IGFuZCBvYmplY3QgZmlsZXMKIAotMjAwOC0wOC0xOSAyMDowMyAgZHRzMTIKKzIwMDgtMDgtMTkgMDg6MzYgIGR0czEyCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIEFjdGl2YXRlIHN0YXRpc3RpY3MgdGhhdCBhcmUgc3VwcG9ydGVkIG9uIFNvbGFyaXMgYW5kL29yIExpbnV4CisgICBJUHY2CiAKLTIwMDgtMDgtMTkgMTk6NTUgIGR0czEyCisyMDA4LTA4LTE5IDA4OjExICBkdHMxMgogCi0gICAqIGRveHlnZW4uY29uZjoKKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CiAKLSAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5yYzIgKQotCisgICBJbXByb3ZlZCB0cmFjaW5nIG9mIFNNVVggYXV0aGVudGljYXRpb24gcHJvYmxlbXMuCiAKIDIwMDgtMDgtMTkgMDg6MDggIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYzoKLSAgICAgQmV0dGVyIHRyYWNpbmcgb2YgRGlzTWFuIG9iamVjdCBwcm9jZXNzaW5nLgorCisgICBCZXR0ZXIgdHJhY2luZyBvZiBEaXNNYW4gb2JqZWN0IHByb2Nlc3NpbmcuCiAKIDIwMDgtMDgtMTggMjI6NDMgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oOgotICAgICByZW1vdmUgYm9ndXMgd2hpdGUgc3BhY2UKIAotMjAwOC0wOC0xOCAyMjozOCAgdGFuZGVycwotCi0gICAqIFJFQURNRS5hZ2VudC1taWJzOgotICAgICBkb2N1bWVudCBTQ1RQLU1JQiBhZGRpdGlvbgorICAgcmVtb3ZlIGJvZ3VzIHdoaXRlIHNwYWNlCiAKIDIwMDgtMDgtMTggMjI6MDEgIGR0czEyCiAKICAgICogcGVybC9TTk1QL1NOTVAucG06Ci0gICAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyMDIxNDQ0OiBTdXBwb3J0IFNOTVB2MmMgaW4gZ2V0dGFibGUgcHJvY2Vzc2luZworCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjAyMTQ0NDogU3VwcG9ydCBTTk1QdjJjIGluIGdldHRhYmxlCisgICBwcm9jZXNzaW5nCiAKIDIwMDgtMDgtMTggMjE6NDQgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wa3NtLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyMDAzNDUwOiBGaXggYSBjb3VwbGUgb2YgNjQtYml0IHByb2JsZW1zLgogCi0yMDA4LTA4LTE4IDE5OjA1ICB0YW5kZXJzCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjAwMzQ1MDogRml4IGEgY291cGxlIG9mIDY0LWJpdAorICAgcHJvYmxlbXMuCiAKLSAgICogbWlicy9NYWtlZmlsZS5pbjoKLSAgICAgZml4IFNDVFAtTUlCIGluc3RhbGwKKzIwMDgtMDgtMTggMTQ6MzAgIGhhcmRha2VyCiAKLTIwMDgtMDgtMTcgMjE6MjkgIGR0czEyCisgICAqIGFwcHMvc25tcHVzbS5jOgogCi0gICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliLCBhZ2VudC9taWJncm91cC9zY3RwLW1pYi5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXguYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmMsIG1pYnMvTWFrZWZpbGUuaW4sCi0gICAgIG1pYnMvTWFrZWZpbGUubWliLCBtaWJzL1NDVFAtTUlCLnR4dDoKLSAgICAgTkVXUzogc25tcGQ6IFBBVENIOiAyMDIzNjMzOiBhZGQgU0NUUC1NSUIgaW1wbGVtZW50YXRpb24gKExpbnV4IG9ubHkpCisgICByZXZlcnQgMTcxNTcgc2luY2UgaXQgYnJva2Ugc29tZXRoaW5nCisKKzIwMDgtMDgtMTggMDc6MDYgIGpzYWZyYW5laworCisgICAqIFJFQURNRS5hZ2VudC1taWJzOgorCisgICBhZGQgU0NUUC1NSUIgaW1wbGVtZW50YXRpb24gKExpbnV4IG9ubHkpCiAKIDIwMDgtMDgtMTcgMjE6MDggIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjAyMjkzNjogRml4IEFnZW50WCBDb3VudGVyNjQgZGVjb2Rpbmcgb24KLSAgICAgNjQtYml0IGFyY2hpdGVjdHVyZXMKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMDIyOTM2OiBGaXggQWdlbnRYIENvdW50ZXI2NCBkZWNvZGluZyBvbgorICAgNjQtYml0IGFyY2hpdGVjdHVyZXMKIAogMjAwOC0wOC0xNyAyMDo1MCAgZHRzMTIKIAogICAgKiBhZ2VudC9zbm1wZC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIwMTQyMDQ6IFN1cHBvcnQgLWcge2dyb3VwbmFtZX0KKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMDE0MjA0OiBTdXBwb3J0IC1nIHtncm91cG5hbWV9CisKKzIwMDgtMDgtMTUgMTM6NDUgIGhhcmRha2VyCisKKyAgICogYXBwcy9zbm1wdXNtLmM6CisKKyAgIE5FV1M6IHNubXB1c206IFBBVENIOiAxNTkxMzU1OiBmcm9tIHBwYXNzZXJhOiBBbGxvdyBjbG9uaW5nIHRvCisgICBlbmdpbmVJRHMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gdGhlIGFnZW50J3MgZW5naW5lSUQKKworMjAwOC0wOC0xNCAxNTo1NCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jLmM6CisKKyAgIFNXUnVuIHByb2Nlc3NpbmcgbmVlZHMgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbHMgb2YgJ3N0cnVjdCB1c2VyJworICAgKFNvbGFyaXMpCiAKIDIwMDgtMDgtMTMgMTM6MDIgIGpzYWZyYW5lawogCi0gICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKLSAgICAgQ29ycmVjdGx5IHBhcnNlIGludGVyZmFjZSBpbmRleGVzIGhpZ2hlciB0aGFuIDB4ZmYuCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eC5jOgorCisgICBDb3JyZWN0bHkgcGFyc2UgaW50ZXJmYWNlIGluZGV4ZXMgaGlnaGVyIHRoYW4gMHhmZi4KIAogMjAwOC0wOC0xMiAwODoyNyAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgotICAgICBDbG9zZSBmaWxlIHdoZW4gcGFyc2luZyBvZiAvcHJvYy9YWFgvc3RhdHVzIGZhaWxzLgorCisgICBDbG9zZSBmaWxlIHdoZW4gcGFyc2luZyBvZiAvcHJvYy9YWFgvc3RhdHVzIGZhaWxzLgorCisyMDA4LTA4LTEyIDA3OjI3ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIsIGFnZW50L21pYmdyb3VwL3NjdHAtbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmMsIG1pYnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBtaWJzL01ha2VmaWxlLm1pYiwgbWlicy9TQ1RQLU1JQi50eHQ6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMjAyMzYzMzogYWRkIFNDVFAtTUlCIGltcGxlbWVudGF0aW9uIChMaW51eAorICAgb25seSkKKworMjAwOC0wOC0wNyAxMDowMyAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBGaXggaW5ldE5ldFRvTWVkaWFUYWJsZSB0YWJsZSBwcm9jZXNzaW5nIC0gY29udGludWUgd2l0aCBuZXh0CisgICBlbnRyeSB3aGVuIGZpbGx1cF9lbnRyeV9pbmZvKCkgZmFpbHMuCiAKIDIwMDgtMDgtMDcgMDk6MDAgIGpzYWZyYW5lawogCiAgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgotICAgICBGaXggZG9jdW1lbnRhdGlvbiBvZiBleGVjIHN0YXRhbWVudCAtIGl0IGRvZXMgbm90IGNhY2hlIHJlc3VsdHMgYW55bW9yZS4KLSAgICAgUmVsYXRlZCB0byBidWcgODgzMTM0CiAKLTIwMDgtMDctMzEgMTY6NDggIGR0czEyCisgICBGaXggZG9jdW1lbnRhdGlvbiBvZiBleGVjIHN0YXRhbWVudCAtIGl0IGRvZXMgbm90IGNhY2hlIHJlc3VsdHMKKyAgIGFueW1vcmUuIFJlbGF0ZWQgdG8gYnVnIDg4MzEzNAogCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5yYzEgKQorMjAwOC0wNy0zMSAyMzozOSAgZHRzMTIKIAotMjAwOC0wNy0zMSAxNjo0NyAgZHRzMTIKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jaW5mby5jOgogCi0gICAqIENIQU5HRVM6Ci0gICAgIHZlcnNpb24gdXBkYXRlCisgICBGaXggYSB0eXBvLCBhbmQgYSBib2d1cyBmaWVsZCBuYW1lIGluIHRoZSBBSVggcHJvY2luZm8gc3RydWN0dXJlLgogCi0yMDA4LTA3LTMxIDE2OjE0ICBkdHMxMgorMjAwOC0wNy0zMSAyMzozNSAgZHRzMTIKIAotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYzoKIAotMjAwOC0wNy0zMSAxNjowNSAgZHRzMTIKLQotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLAotICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKLSAgICAgbWFrZSBkZXBlbmQKLQotMjAwOC0wNy0zMSAxNjowMyAgZHRzMTIKLQotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBJbmNsdWRlIG1pc3NpbmcgaGVhZGVycywgYW5kIGZpeCBvbmUgYm9ndXMgZmllbGQgbmFtZSBpbiBTb2xhcmlzCisgICBwcm9jIHN0cnVjdHVyZS4KIAogMjAwOC0wNy0zMCAxNzo0MCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzoKLSAgICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMjAwMzE0NDogSW5jcmVhc2Ugc2l6ZSBvZiBBZ2VudFggcGFja2V0IGJ1aWxkIGJ1ZmZlcgogCi0yMDA4LTA3LTMwIDE3OjI4ICBkdHMxMgotCi0gICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNjgxMDM1OiBmcm9tIG1hZ2ZyOiBpbXByb3ZlIG5ldC1zbm1wLWNvbmZpZyAvYmluL3NoIGNvbXBhdGliaWxpdHkKLSAgICAgQmFjay1wb3J0IG9mIFNWTiByZXZpc2lvbiAxNTk2MQotCi0yMDA4LTA3LTMwIDA5OjU4ICBkdHMxMgotCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jOgotICAgICBDSEFOR0VTOiBhZ2VudDogQlVHOiAxNTU3MzcyOiBSZWFsaWduIGhyRlNTdG9yYWdlSW5kZXggd2l0aCBoclN0b3JhZ2VUYWJsZQorICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMjAwMzE0NDogSW5jcmVhc2Ugc2l6ZSBvZiBBZ2VudFggcGFja2V0CisgICBidWlsZCBidWZmZXIKIAogMjAwOC0wNy0zMCAwNzo1NyAgZHRzMTIKIAogICAgKiBzbm1wbGliL21pYi5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDIwMjc4MzQ6IEV4dGVuZCBzdHJpbmcgcHJpbnQgYnVmZmVyIGJ5IHRoZSBtaW5pbXVtIG5lY2Vzc2FyeS4KKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAyMDI3ODM0OiBFeHRlbmQgc3RyaW5nIHByaW50IGJ1ZmZlciBieSB0aGUKKyAgIG1pbmltdW0gbmVjZXNzYXJ5LgorCisyMDA4LTA3LTI5IDIzOjM0ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2N5Z3dpbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9rdm1fcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9ubGlzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BycHNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmM6CisKKyAgIEZpeCBhc3NvcnRlZCBzaWxseSB0eXBvcyAtIHVuYmFsYW5jZWQgcGFyZW50aGVzZXMKKyAgIGFuZCB0aGUgd3JvbmcgdHlwZSBlbnVtZXJhdGlvbiB2YWx1ZSBuYW1lcy4KKworMjAwOC0wNy0yOSAyMzozMSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmM6CisKKyAgIEVuc3VyZSBzd3J1biBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHByVGFibGUgY2FsbHMsCisgICByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGhyU1dSdW5UYWJsZSB0byB0cmlnZ2VyIHRoaXMuCiAKIDIwMDgtMDctMjkgMTY6MTkgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6Ci0gICAgIGEpIEZpeCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGp1c3Qgb25lIHBsYWNlCi0gICAgIChtYWtlcyBpdCBlYXNpZXIgdG8gY2hhbmdlIGlmIG5lY2Vzc2FyeSkKLSAgICAgYikgRml4IHZhcmlvdXMgdW5mb3J0dW5hdGUgbGluZS1icmVha3MgKHdpdGhpbiAicGR1LT5mbGFncyIpCisKKyAgIGEpIEZpeCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGp1c3Qgb25lIHBsYWNlCisgICAobWFrZXMgaXQgZWFzaWVyIHRvIGNoYW5nZSBpZiBuZWNlc3NhcnkpCisgICBiKSBGaXggdmFyaW91cyB1bmZvcnR1bmF0ZSBsaW5lLWJyZWFrcyAod2l0aGluICJwZHUtPmZsYWdzIikKKworMjAwOC0wNy0yOSAxNjowNSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oOgorCisgICBJZiB0aGUgcmUtd3JpdHRlbiBTV1J1biBtb2R1bGUgaWYgYXZhaWxhYmxlLCB0aGVuIHVzZSBpdCBmb3IKKyAgIHRoZSBVQ0Qtc3BlY2lmaWMgcHJUYWJsZSBhcyB3ZWxsIGFzIHRoZSBoclNXUnVuVGFibGUuCisgICBDb25zaXN0ZW5jeSBpcyBnb29kLi4uLgorCisyMDA4LTA3LTI5IDE1OjIzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jOgorCisgICBTdXBwcmVzcyBqdW5rIGluIGhyU1dSdW5OYW1lICYgaHJTV1J1blBhcmFtZXRlcnMgdmFsdWVzCisKKzIwMDgtMDctMjkgMTA6MjcgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYzoKKworICAgVGhlIGNhY2hlL2NvbnRhaW5lciByZWxhdGUgdG8gdGhlIGRhdGEgaXRzZWxmLCBzbyBzaG91bGQKKyAgIG1vcmUgbmF0dXJhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGRhdGFfYWNjZXNzIG1vZHVsZSwKKyAgIHJhdGhlciB0aGFuIGEgcGFydGljdWxhciBNSUIgdGFibGUgbW9kdWxlLgorCisyMDA4LTA3LTI4IDIxOjE4ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYzoKKworICAgJ3VzZWQnIGFuZCAnZnJlZScgYXJlIG5vdCB0aGUgc2FtZSB0aGluZywgRGF2ZS4gUGF5IGF0dGVudGlvbiBhdAorICAgdGhlIGJhY2suLi4uCiAKIDIwMDgtMDctMjggMTQ6MzkgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6Ci0gICAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDIwMjM4MDM6IEVuc3VyZSBjb21waWxhdGlvbiBpcyBub3QgZGVwZW5kZW50Ci0gICAgIG9uIGFuIGlycmVsZXZhbnQgY29uZmlndXJlIGNoYXJhY3RlcmlzdGljIGZvciBIUC1VWCAxMQogCi0yMDA4LTA3LTI4IDExOjQxICBkdHMxMgotCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBORVdTOiBidWlsZGluZzogYWRkIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybiBjb25maWd1cmUgb3B0aW9uCi0gICAgIEJhY2twb3J0IG9mIFNWTiByZXZpc2lvbiAxNzEyMQorICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMjAyMzgwMzogRW5zdXJlIGNvbXBpbGF0aW9uIGlzIG5vdCBkZXBlbmRlbnQKKyAgIG9uIGFuIGlycmVsZXZhbnQgY29uZmlndXJlIGNoYXJhY3RlcmlzdGljIGZvciBIUC1VWCAxMQogCiAyMDA4LTA3LTI4IDEwOjU2ICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHNldC5jOgotICAgICBDSEFOR0VTOiBhcHBzOiBCVUc6IDE5NjQxMzY6IERyb3AgTlVMTCB0eXBlIGZyb20gc25tcHNldCB1c2FnZSBtZXNzYWdlLgorCisgICBDSEFOR0VTOiBhcHBzOiBCVUc6IDE5NjQxMzY6IERyb3AgTlVMTCB0eXBlIGZyb20gc25tcHNldCB1c2FnZQorICAgbWVzc2FnZS4KKworMjAwOC0wNy0yNSAxNDoxOSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0LmgsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmg6CisKKyAgIFVzZSAnLS1lbmFibGUtbmV3LWZlYXR1cmVzJyBtZWNoYW5pc20gdG8gaW5jbHVkZSBoclNXKiByZS13cml0ZXMKKworMjAwOC0wNy0yNSAxNDoxMyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fZGFyd2luLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX25saXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX251bGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BycHNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmM6CisKKyAgIFByZWxpbWluYXJ5IE9TLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiBSdW5uaW5nIGFuZCBJbnN0YWxsZWQKKyAgIFNvZnR3YXJlIGRhdGEgYWNjZXNzLgogCiAyMDA4LTA3LTI0IDIzOjIyICB0YW5kZXJzCiAKICAgICogbWFuL3NubXBjbWQuMS5kZWY6Ci0gICAgIENIQU5HRVM6IGRvY3VtZW50YXRpb246IEJVRzogMjAyNzEyOTogZml4IHR5cG8gaW4gc25tcGNtZC4xCisKKyAgIENIQU5HRVM6IGRvY3VtZW50YXRpb246IEJVRzogMjAyNzEyOTogZml4IHR5cG8gaW4gc25tcGNtZC4xCisKKzIwMDgtMDctMjQgMTA6MDAgIGpzYWZyYW5laworCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWYsIHNlZHNjcmlwdC5pbjoKKworICAgcmVmbGVjdCBkZWZhdWx0IHRlbXAgZmlsZSBwYXR0ZXJuIGluIG1hbiBwYWdlIGlmIGl0J3MgbW9kaWZpZWQgYnkKKyAgIC4vY29uZmlndXJlIHNjcmlwdAorCisyMDA4LTA3LTI0IDA4OjM2ICBqc2FmcmFuZWsKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogYnVpbGRpbmc6IGFkZCAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4gY29uZmlndXJlIG9wdGlvbgogCiAyMDA4LTA3LTI0IDA2OjUzICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4MjM4MDA6IHJlbGVhc2UgYW5kIHJlbG9hZCBhbGwgdHJhcCBkZXN0aW5hdGlvbnMgb24gU0lHSFVQCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgyMzgwMDogcmVsZWFzZSBhbmQgcmVsb2FkIGFsbCB0cmFwCisgICBkZXN0aW5hdGlvbnMgb24gU0lHSFVQCisKKzIwMDgtMDctMjIgMTQ6MzMgIGpzYWZyYW5laworCisgICAqIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluOgorCisgICBmaXggbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgdG8gcnVuIHdpdGhvdXQgYXJndW1lbnRzCisKKzIwMDgtMDctMjIgMTQ6MjEgIGpzYWZyYW5laworCisgICAqICAuLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIG5ldC1zbm1wLWNvbmZpZy5pbiwgICAKKyAgICAgIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluOgorCisgICBORVdTOiBtaXNjOiBzZXBhcmF0ZSB1c2VyIG1hbmFnZW1lbnQgZnJvbSBuZXQtc25tcC1jb25maWcgaW50bworICAgbmV3IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIHNjcmlwdAogCiAyMDA4LTA3LTIxIDEzOjQ0ICBkdHMxMgogCiAgICAqIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jOgotICAgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMTk0NDU4MTogUHJvdGVjdCBhZ2FpbnN0IGNvcmUgZHVtcHMgd2l0aCBsb25nIHN0cmluZyBpbmRleCB2YWx1ZXMuCiAKLTIwMDgtMDctMTcgMTU6MDcgIGR0czEyCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMTk0NDU4MTogUHJvdGVjdCBhZ2FpbnN0IGNvcmUgZHVtcHMgd2l0aAorICAgbG9uZyBzdHJpbmcgaW5kZXggdmFsdWVzLgogCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKLSAgICAgbWFrZSBkZXBlbmQKKzIwMDgtMDctMTggMTU6MTkgIGhhcmRha2VyCiAKLTIwMDgtMDctMTcgMTQ6NDIgIGR0czEyCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgogCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnJjMSApCisgICBuZXcgc2lnbmluZyBrZXkKIAogMjAwOC0wNy0xNyAxMDowNSAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyMDE4MDMxOiBEb24ndCBwcm9iZSBlbmdpbmVJRCBpbiBpbnRlcm5hbCBtb25pdG9yIHNlc3Npb25zLgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyMDE4MDMxOiBEb24ndCBwcm9iZSBlbmdpbmVJRCBpbiBpbnRlcm5hbAorICAgbW9uaXRvciBzZXNzaW9ucy4KKworMjAwOC0wNy0xMCAxOTozMyAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgZml4IGEgcmVnZXhwIHF1b3RlCisKKzIwMDgtMDctMTAgMTQ6MTIgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL3N5c3RlbS5jOgorCisgICBidWlsZCBmaXggZm9yIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIGdldGFkZHJpbmZvIChlLmcuIEhQLVVYCisgICAxMS4wIGFuZCBlYXJsaWVyLCBTb2xhcmlzIDcgYW5kIGVhcmxpZXIpCiAKIDIwMDgtMDctMTAgMTM6NTAgIGFsZXhfYgogCiAgICAqIHdpbjMyL01ha2VmaWxlLmluOgotICAgICBDSEFOR0VTOiBidWlsZGluZzogQlVHOiAyMDE0NTI2OiBXaW4zMjogc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmggbm90IGluc3RhbGxlZAorCisgICBDSEFOR0VTOiBidWlsZGluZzogQlVHOiAyMDE0NTI2OiBXaW4zMjoKKyAgIHNubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oIG5vdCBpbnN0YWxsZWQKIAogMjAwOC0wNy0wNiAxNTowNSAgYWxleF9iCiAKLSAgICogUkVBRE1FLndpbjMyLCB3aW4zMi9Db25maWd1cmUsIHdpbjMyL2J1aWxkLnBsLAotICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVsZGluZzogQWRkIHN1cHBvcnQgZm9yIHdpbkV4dERMTCB0byBidWlsZC5iYXQgKHdpbjMyKQorICAgKiAgUkVBRE1FLndpbjMyLCB3aW4zMi9Db25maWd1cmUsIHdpbjMyL2J1aWxkLnBsLCAgIAorICAgICAgd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IGJ1bGRpbmc6IEFkZCBzdXBwb3J0IGZvciB3aW5FeHRETEwgdG8gYnVpbGQuYmF0ICh3aW4zMikKIAogMjAwOC0wNy0wNiAxMjozOCAgYWxleF9iCiAKICAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgotICAgICBXaW4zMiBidWlsZCBmaXhlcyAtIGFkZCBtaXNzaW5nIGZ1bmN0aW9uIGZvciBETEwgYnVpbGQuCisKKyAgIFdpbjMyIGJ1aWxkIGZpeGVzIC0gYWRkIG1pc3NpbmcgZnVuY3Rpb24gZm9yIERMTCBidWlsZC4KIAogMjAwOC0wNy0wMiAxMjozOSAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjAwNjc4NjogSW50ZXJmYWNlIG5hbWUgY2FuIGhhdmUgbW9yZSB0aGFuIDggY2hhcmFjdGVycy4KKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjAwNjc4NjogSW50ZXJmYWNlIG5hbWUgY2FuIGhhdmUgbW9yZSB0aGFuIDgKKyAgIGNoYXJhY3RlcnMuCisKKzIwMDgtMDYtMjUgMTc6MzkgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvYWdlbnRfdHJhcC5jLCBhcHBzL3NubXB0cmFwLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmLCAgIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxOTE2ODQwOiBuZXcgY29uZmlnIG9wdGlvbiB0byBzZXQgU05NUHYxIHRyYXAKKyAgIGFnZW50IGFkZHJlc3MKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxOTE2ODQwOiBpbnRyb2R1Y2UKKyAgIG5ldHNubXBfZ2V0aG9zdGJ5bmFtZV92NAogCiAyMDA4LTA2LTI1IDE1OjE2ICBqc2FmcmFuZWsKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKLSAgICAgZml4IGFzc2VydGlvbiB3aGVuIHVzZWQgd2l0aCBwZXJsIDUuMTAKIAotMjAwOC0wNi0yNCAyMjozNiAgdGFuZGVycworICAgZml4IGFzc2VydGlvbiB3aGVuIHVzZWQgd2l0aCBwZXJsIDUuMTAKIAotICAgKiB0ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQsIHRlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaCwgdGVzdGluZy90ZXN0cy9UMDIwc25tcHYzZ2V0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjIwc25tcHYzYnVsa2dldDoKLSAgICAgQ0hBTkdFUzogYnVpbGRpbmc6IERpc2FibGUgdGVzdHMgaWYgdGhlIGFnZW50IGlzIGJ1aWx0IHdpdGhvdXQgdGhlIG1pYiBtb2R1bGUgdGhleSBkZXBlbmQgb24uCi0gICAgIEJhY2twb3J0IG9mIHIxNzA4Ny4KKzIwMDgtMDYtMjQgMDU6MDEgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXB1c20uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQ6IEJVRzogMjAwMTEyNDogQWxsb3cgZW1iZWRkZWQgTlVMCisgICBjaGFyYWN0ZXJzIGluIHVzbVVzZXJQdWJsaWMKKworMjAwOC0wNi0yMyAxOTo1NyAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIE9ubHkgcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGV4dHJhIFwwIGFmdGVyIHRoZSBkYXRhIGZvciBPQ1RFVAorICAgU1RSSU5HIHZhbHVlZCBlbnRpdGllcworCisyMDA4LTA2LTIzIDE5OjEzICBtYWdmcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQsIHRlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaCwgdGVzdGluZy90ZXN0cy9UMDIwc25tcHYzZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyMjBzbm1wdjNidWxrZ2V0OgorCisgICBDSEFOR0VTOiBidWlsZGluZzogRGlzYWJsZSB0ZXN0cyBpZiB0aGUgYWdlbnQgaXMgYnVpbHQgd2l0aG91dAorICAgdGhlIG1pYiBtb2R1bGUgdGhleSBkZXBlbmQgb24uCisKKzIwMDgtMDYtMjEgMTI6MTQgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIFJlbW92ZSBzcHVyaW91cyBBQ19NU0dfUkVTVUxUIGluc2lkZSBhbiBBQ19DQUNIRV9DSEVDSworCisyMDA4LTA2LTE4IDA1OjA3ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBIYW5kbGUgc29sYXJpcyBhd2sgYXMgd2VsbC4KKworMjAwOC0wNi0xNyAxNjowMSAgdGFuZGVycworCisgICAqIGFnZW50L2F1dG9fbmxpc3QuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxOTk1NzUzOiBmcm9tIHZvbGtvdl9wZXRlcjogbWlub3IgY2xlYW51cAorICAgYWdlbnQvYXV0b19ubGlzdC5jCiAKIDIwMDgtMDYtMTcgMDg6NTcgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jOgotICAgICBGaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBzcHJpbnRmIGZvciBUQ1AvSVB2NgotICAgICBDcm9zcy1wb3J0IG9mIHJldmlzaW9uIDE2NjY4CisKKyAgIEZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHNwcmludGYgZm9yIFRDUC9JUHY2CisgICBDcm9zcy1wb3J0IG9mIHJldmlzaW9uIDE2NjY4CiAKIDIwMDgtMDYtMTYgMjM6NTUgIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE5OTUxNzI6IGZpeCAtLXdpdGhvdXQtZWxmIGNvbmZpZ3VyZSB1c2FnZSBtZXNzYWdlCiAKLTIwMDgtMDYtMTUgMjI6MTUgIGR0czEyCisgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxOTk1MTcyOiBmaXggLS13aXRob3V0LWVsZiBjb25maWd1cmUgdXNhZ2UKKyAgIG1lc3NhZ2UKIAotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjIucHJlMiApCi0KLTIwMDgtMDYtMTUgMjI6MTQgIGR0czEyCi0KLSAgICogQ0hBTkdFUywgTkVXUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwOC0wNi0xNSAyMTo1NSAgZHRzMTIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIFZlcnNpb24gdXBkYXRlCi0gICAgIAotICAgICBBbHNvIGZpeCBhbGwgQ2hhbmdlTG9nIGVudHJpZXMgc2luY2UgdGhlIENWUy0+U1ZOIG1vdmUsCi0gICAgIHdoaWNoIGhhdmUgYmVlbiBvbWl0dGluZyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGZpbGVzCi0gICAgIHdlcmUgYWZmZWN0ZWQgYnkgYW55IGdpdmVuIGNoYW5nZS4KLQotMjAwOC0wNi0xNSAyMTozMiAgZHRzMTIKLQotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6Ci0gICAgIG1ha2UgZGVwZW5kCi0KLTIwMDgtMDYtMTUgMjE6MDYgIGR0czEyCi0KLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjIucHJlMiApCiAyMDA4LTA2LTEzIDIyOjE2ICBkdHMxMgogCiAgICAqIGRpc3QvZmluZC1yZXF1aXJlcywgZGlzdC9uZXQtc25tcC5zcGVjOgotICAgICBDSEFOR0VTOiBidWlsZDogSW1wcm92ZWQgUlBNIHNwZWMgZmlsZXMsIGZvciBiZXR0ZXIgY29uc2lzdGVuY3kgd2l0aCB2ZW5kb3ItcHJvdmlkZWQgcGFja2FnZXMuCi0gICAgIFByb3ZpZGVkIGJ5IEphbiBTYWZyYW5lawogCi0yMDA4LTA2LTEzIDIxOjU0ICBkdHMxMgotCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBSZXN0b3JlIGVtYmVkZGVkIHBlcmwgdG8gZGVmYXVsdCBNYWMgT1MvWCBidWlsZC4KLSAgICAgKHJldmVyc2luZyByZXZpc2lvbiAxNjk4OCkKKyAgIENIQU5HRVM6IGJ1aWxkOiBJbXByb3ZlZCBSUE0gc3BlYyBmaWxlcywgZm9yIGJldHRlciBjb25zaXN0ZW5jeQorICAgd2l0aCB2ZW5kb3ItcHJvdmlkZWQgcGFja2FnZXMuCisgICBQcm92aWRlZCBieSBKYW4gU2FmcmFuZWsKIAogMjAwOC0wNi0xMyAyMTowMyAgZHRzMTIKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxODk5NzYyOiBUd2VhayBlbWJlZGRlZF9wZXJsIGNvbmZpZ3VyZSBjaGVja3MuCisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTg5OTc2MjogVHdlYWsgZW1iZWRkZWRfcGVybCBjb25maWd1cmUKKyAgIGNoZWNrcy4KKworMjAwOC0wNi0xMyAwNTo0MyAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgCisgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IGJ1aWxkaW5nOiBSZXRpcmUgdGhlIGNvbmZpZ19vbGQvbmV3X3JlcXVpcmUgZmVhdHVyZSBhbmQKKyAgIHJlcGxhY2UgaXQgd2l0aCBjb25maWdfdmVyc2lvbl9yZXF1aXJlIHRoYXQgY29tcGFyZXMgdmVyc2lvbgorICAgbnVtYmVycyB0byBhY2hpZXZlIGEgc2ltaWxhciB0aGluZwogCiAyMDA4LTA2LTEyIDEyOjUwICBkdHMxMgogCiAgICAqIGRpc3QvbWFrZXJlbGVhc2U6Ci0gICAgIE9ubHkgYWRkIG5vbi1kZWZhdWx0IE1JQiBtb2R1bGVzIHRvIHRoZSB0ZXN0IGJ1aWxkcy4KLSAgICAgU3BlY2lmeWluZyB0aGUgaG9zdCBtb2R1bGUgaXMgbm90IG5lZWRlZCBvbiBMaW51eCBzeXN0ZW1zLAotICAgICBhbmQgbWF5IGJyZWFrIG9uIG90aGVyIE8vU3MuIFNwZWNpZnlpbmcgdGhlIGRpc21hbi9ldmVudAotICAgICBNSUIgaXMgdW5uZWNlc3Nhcnkgb24gYW55IHN5c3RlbS4KIAotMjAwOC0wNi0xMiAxMjo0NSAgZHRzMTIKLQotICAgKiBkaXN0L21ha2VyZWxlYXNlOgotICAgICBNaXNzaW5nIE1ENSBzaWduYXR1cmUgZmlsZSBmb3IgemlwIHJlbGVhc2UKLQotMjAwOC0wNi0xMiAxMjo0NCAgZHRzMTIKLQotICAgKiBkaXN0L21ha2VyZWxlYXNlOgotICAgICBCYXNpYyBkb2N1bWVudGF0aW9uIGFuZCBoZWxwL3VzYWdlIG1lc3NhZ2VzLgorICAgT25seSBhZGQgbm9uLWRlZmF1bHQgTUlCIG1vZHVsZXMgdG8gdGhlIHRlc3QgYnVpbGRzLgorICAgU3BlY2lmeWluZyB0aGUgaG9zdCBtb2R1bGUgaXMgbm90IG5lZWRlZCBvbiBMaW51eCBzeXN0ZW1zLAorICAgYW5kIG1heSBicmVhayBvbiBvdGhlciBPL1NzLiBTcGVjaWZ5aW5nIHRoZSBkaXNtYW4vZXZlbnQKKyAgIE1JQiBpcyB1bm5lY2Vzc2FyeSBvbiBhbnkgc3lzdGVtLgogCiAyMDA4LTA2LTExIDEwOjE2ICBkdHMxMgogCiAgICAqIGRpc3QvbWFrZXJlbGVhc2U6Ci0gICAgIE9ubHkgZW5hYmxlIElQWCB0cmFuc3BvcnQgb24gTGludXggc3lzdGVtcworCisgICBPbmx5IGVuYWJsZSBJUFggdHJhbnNwb3J0IG9uIExpbnV4IHN5c3RlbXMKIAogMjAwOC0wNi0xMCAxNDozNyAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6Ci0gICAgIHNubXBkOiBQQVRDSDogMTkxODM4MzogRml4IERpc01hbiBtb25pdG9yaW5nIG9mIEFnZW50WCBzdWJhZ2VudHMKLSAgICAgTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBhY3R1YWxseSB1c2UgdGhlIGNvZGUgc3VibWl0dGVkIGluIHRoYXQKLSAgICAgcGF0Y2guCi0gICAgIEluc3RlYWQgaXQgaW5zZXJ0cyBhIGNhbGxiYWNrIGhvb2sgaW50byB0aGUKLSAgICAgc25tcF9zeW5jaF9yZXNwb25zZV9jYgotICAgICByb3V0aW5lICh1c2luZyB0aGUgbXl2b2lkIHBvaW50ZXIgYW5kIGEgbmV3IHNlc3Npb24gZmxhZyksIHdoaWNoCi0gICAgIGhhcwotICAgICB0aGUgc2FtZSBlZmZlY3Qgd2l0aG91dCBuZWVkaW5nIHRvIGR1cGxpY2F0ZSBhbnkgY29kZS4KKyAgICogIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIHNubXBkOiBQQVRDSDogMTkxODM4MzogRml4IERpc01hbiBtb25pdG9yaW5nIG9mIEFnZW50WCBzdWJhZ2VudHMKKyAgIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgdXNlIHRoZSBjb2RlIHN1Ym1pdHRlZCBpbiB0aGF0CisgICBwYXRjaC4KKyAgIEluc3RlYWQgaXQgaW5zZXJ0cyBhIGNhbGxiYWNrIGhvb2sgaW50byB0aGUKKyAgIHNubXBfc3luY2hfcmVzcG9uc2VfY2IKKyAgIHJvdXRpbmUgKHVzaW5nIHRoZSBteXZvaWQgcG9pbnRlciBhbmQgYSBuZXcgc2Vzc2lvbiBmbGFnKSwgd2hpY2gKKyAgIGhhcworICAgdGhlIHNhbWUgZWZmZWN0IHdpdGhvdXQgbmVlZGluZyB0byBkdXBsaWNhdGUgYW55IGNvZGUuCiAKIDIwMDgtMDYtMTAgMTI6NTIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYzoKLSAgICAgRml4IGxvZ2ljIGVycm9ycyBpbiBoYW5kbGluZyBvZiBvbGQvY3VycmVudCB2YXJiaW5kIGxpc3RzLgotICAgICBSZXBvcnRlZCBieSBGcmVkIEdhbyBpbiBwYXRjaCAjMTkxODM4MwogCi0yMDA4LTA2LTEwIDEwOjUxICBkdHMxMgorICAgRml4IGxvZ2ljIGVycm9ycyBpbiBoYW5kbGluZyBvZiBvbGQvY3VycmVudCB2YXJiaW5kIGxpc3RzLgorICAgUmVwb3J0ZWQgYnkgRnJlZCBHYW8gaW4gcGF0Y2ggIzE5MTgzODMKKworMjAwOC0wNi0wOSAxOTowOCAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL3NjYXBpLmM6Ci0gICAgIHVwZGF0ZSB0byBtYXRjaCBwdWJsaXNoZWQgcmVsZWFzZQorCisgICB1cGRhdGUgdG8gbWF0Y2ggcHVibGlzaGVkIHJlbGVhc2UKKworMjAwOC0wNi0wOSAxNjo1OCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgYWRkZWQgc25tcF92ZXJzaW9uLmMKIAogMjAwOC0wNi0wOSAwOTowNSAgZHRzMTIKIAogICAgKiBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHVzbS5jOgotICAgICBBIGNvdXBsZSBtb3JlIG1pc3NpbmcgZXJyb3IgY2hlY2tzLgotICAgICBCYXNlZCBvbiB0aG9zZSByZXBvcnRlZCBieSBCb3lhIFN1bgorCisgICBBIGNvdXBsZSBtb3JlIG1pc3NpbmcgZXJyb3IgY2hlY2tzLgorICAgQmFzZWQgb24gdGhvc2UgcmVwb3J0ZWQgYnkgQm95YSBTdW4KIAogMjAwOC0wNi0wNiAxMjowMiAgZHRzMTIKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgQmV0dGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIHBlcmwgb24gTWFjIE9TL1gKLSAgICAgKG5lYXJseSB3b3JraW5nIG9uIExlb3BhcmQgbm93KQogCi0yMDA4LTA2LTA1IDIzOjA3ICB0YW5kZXJzCisgICBCZXR0ZXIgaGFuZGxpbmcgb2YgZW1iZWRkZWQgcGVybCBvbiBNYWMgT1MvWAorICAgKG5lYXJseSB3b3JraW5nIG9uIExlb3BhcmQgbm93KQogCi0gICAqIGRpc3QvbmV0LXNubXAuc3BlYzoKLSAgICAgc3luYyB3aXRoIHRydW5rCisyMDA4LTA2LTAzIDIzOjE0ICB0YW5kZXJzCiAKLTIwMDgtMDYtMDUgMjE6MTIgIHRhbmRlcnMKKyAgICogIGFjY29uZmlnLmgsIGFnZW50L2F1dG9fbmxpc3QuYywgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3lzdGVtLmM6CiAKLSAgICogY29uZmlndXJlOgotICAgICBydW4gYXV0b2NvbmYKKyAgIE5FV1M6IGFpeDogQWRkIHN1cHBvcnQgZm9yIEFJWCA2LngKIAotMjAwOC0wNi0wNSAyMToxMSAgdGFuZGVycwotCi0gICAqIGFjY29uZmlnLmgsIGFnZW50L2F1dG9fbmxpc3QuYywgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsCi0gICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS5oLAotICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBjb25maWd1cmUuaW4sCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3lzdGVtLmM6Ci0gICAgIE5FV1M6IEFJWDogQWRkIHN1cHBvcnQgZm9yIEFJWCA2LnguCi0gICAgIFN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gdHJ1bmsgKHBhc3NlZCBleHRlbnNpdmUgcmVncmVzc2lvbgotICAgICB0ZXN0aW5nKS4KLQotMjAwOC0wNi0wNSAyMTowNCAgdGFuZGVycworMjAwOC0wNi0wMyAyMjo0NiAgdGFuZGVycwogCiAgICAqIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgY29uZmlndXJlLCBsdG1haW4uc2g6Ci0gICAgIE5FV1M6IGJ1aWxkOiBVcGRhdGUgdG8gbGlidG9vbCAxLjUuMjYgKGZyb20gMS41LjI0KSwgZS5nLiB0bwotICAgICBiZXR0ZXIgc3VwcG9ydCBBSVggNi4xIGFuZCBNYWMgT1MgWCBMZW9wYXJkLgotICAgICBTdWNjZXNzZnVsbHkgdGVzdGVkIG9uIHRydW5rIChwYXNzZWQgZXh0ZW5zaXZlIHJlZ3Jlc3Npb24KLSAgICAgdGVzdGluZykuCiAKLTIwMDgtMDYtMDMgMDk6MzcgIGR0czEyCisgICBORVdTOiBidWlsZDogVXBkYXRlIHRvIGxpYnRvb2wgMS41LjI2IChmcm9tIDEuNS4yNCksIGUuZy4gdG8KKyAgIGJldHRlciBzdXBwb3J0IEFJWCA2LjEgYW5kIE1hYyBPUyBYIExlb3BhcmQKIAotICAgKiBSRUFETUUub3NYOgotICAgICBEb2N1bWVudCB3aHkgZW1iZWRkZWQgcGVybCB3YXMgZGlzYWJsZWQuCisyMDA4LTA2LTAzIDIyOjM5ICB0YW5kZXJzCiAKLTIwMDgtMDYtMDMgMDg6NTcgIGR0czEyCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIHdoeSBhZGQgbGVnYWN5IGRlZmluaXRpb25zIGZvciBuZXcgc3R1ZmY/CisKKzIwMDgtMDYtMDMgMDk6MDMgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jOgotICAgICBFbnN1cmUgdGhlIGRlZmF1bHQgaW50ZXJuYWwgcXVlcnkgc2Vzc2lvbiBoYXMgYSB2YWxpZCBlbmdpbmVJRCwKLSAgICAgdG8gYXZvaWQgaGF2aW5nIHRvIHByb2JlIGZvciBpdCBvbiB0aGUgZmlyc3QgdXNlLgogCi0yMDA4LTA2LTAyIDE1OjE4ICBkdHMxMgorICAgRW5zdXJlIHRoZSBkZWZhdWx0IGludGVybmFsIHF1ZXJ5IHNlc3Npb24gaGFzIGEgdmFsaWQgZW5naW5lSUQsCisgICB0byBhdm9pZCBoYXZpbmcgdG8gcHJvYmUgZm9yIGl0IG9uIHRoZSBmaXJzdCB1c2UuCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIERyb3AgZW1iZWRkZWQgcGVybCBmcm9tIHRoZSBkZWZhdWx0IGJ1aWxkIG9uIE1hYyBPUy9YCi0gICAgIFRoIGR1YWwtYXJjaGl0ZWN0dXJlIG5hdHVyZSBvZiB0aGUgZGVmYXVsdCBwZXJsIGJpbmFyeQotICAgICBjb25mdXNlcyB0aGUgY29uZmlndXJlIHNjcmlwdCBzdWZmaWNpZW50bHkgdGhhdCB0aGUKLSAgICAgY29kZSB3b24ndCBhY3R1YWxseSBjb21waWxlLgorMjAwOC0wNi0wMiAyMjoxNyAgbWFnZnIKIAotMjAwOC0wNi0wMiAxMzoyNyAgZHRzMTIKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IENvbnZlcnQgZ2VuZXJpYyBzb3VyY2UgYXJndW1lbnRzIGZyb20gY29uc3QKKyAgIHVfY2hhciogdG8gY29uc3Qgdm9pZCogZm9yIHNubXBfcGR1X2FkZF92YXJpYWJsZSwKKyAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUsIHNubXBfc2V0X3Zhcl92YWx1ZSwKKyAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSBhbmQgbWVtZHVwLgorCisyMDA4LTA2LTAyIDEzOjI4ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmM6Ci0gICAgIEVuc3VyZSB0aGF0IHRoZSAidHJpZ2dlciBhcm1lZCIgZmxhZyBpcyBjbGVhcmVkIHdoZW5ldmVyIHRoZQotICAgICBtYXRjaGluZwotICAgICBleHByZXNzaW9uIGlzIGZvdW5kIHRvIGhvbGQgLSBldmVuIGlmIHRoZSB0cmlnZ2VyIGRvZXNuJ3QKLSAgICAgYWN0dWFsbHkgZmlyZS4KLSAgICAgVGhpcyBhZmZlY3RzIHRoZSBiZWhhdmlvdXIgb2YgaW5pdGlhbGx5LXRydWUgZXhwcmVzc2lvbnMsIHdoZW4KLSAgICAgdGhpcwotICAgICBpbml0aWFsIGZpcmluZyBpcyBzdXBwcmVzc2VkIHVzaW5nIHRoZSBtdGVUcmlnZ2VyKlN0YXJ0dXAgb2JqZWN0LgotICAgICBXaXRob3V0IHRoaXMgdHdlYWssIHRoZSB0cmlnZ2VyIHdpbGwgZmlyZSBvbiB0aGUgc2Vjb25kIHNhbXBsaW5nCi0gICAgIChhcyBpZiB0aGUgZXhwcmVzc2lvbiBoYWQgZXZhbHVhdGVkIGZhbHNlIGZpcnN0IHRpbWUgcm91bmQpLgorCisgICBFbnN1cmUgdGhhdCB0aGUgInRyaWdnZXIgYXJtZWQiIGZsYWcgaXMgY2xlYXJlZCB3aGVuZXZlciB0aGUKKyAgIG1hdGNoaW5nCisgICBleHByZXNzaW9uIGlzIGZvdW5kIHRvIGhvbGQgLSBldmVuIGlmIHRoZSB0cmlnZ2VyIGRvZXNuJ3QKKyAgIGFjdHVhbGx5IGZpcmUuCisgICBUaGlzIGFmZmVjdHMgdGhlIGJlaGF2aW91ciBvZiBpbml0aWFsbHktdHJ1ZSBleHByZXNzaW9ucywgd2hlbgorICAgdGhpcworICAgaW5pdGlhbCBmaXJpbmcgaXMgc3VwcHJlc3NlZCB1c2luZyB0aGUgbXRlVHJpZ2dlcipTdGFydHVwIG9iamVjdC4KKyAgIFdpdGhvdXQgdGhpcyB0d2VhaywgdGhlIHRyaWdnZXIgd2lsbCBmaXJlIG9uIHRoZSBzZWNvbmQgc2FtcGxpbmcKKyAgIChhcyBpZiB0aGUgZXhwcmVzc2lvbiBoYWQgZXZhbHVhdGVkIGZhbHNlIGZpcnN0IHRpbWUgcm91bmQpLgogCiAyMDA4LTA2LTAxIDIwOjAyICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLAotICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jLAotICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5oOgotICAgICBIYW5kbGUgdmFyYmluZCBwYXlsb2FkIGZvciBpbnRlcm5hbCBsaW5rVXAvRG93biBub3RpZmljYXRpb25zLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaDoKKworICAgSGFuZGxlIHZhcmJpbmQgcGF5bG9hZCBmb3IgaW50ZXJuYWwgbGlua1VwL0Rvd24gbm90aWZpY2F0aW9ucy4KIAogMjAwOC0wNi0wMSAwNjo0NSAgdGFuZGVycwogCiAgICAqIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54czoKLSAgICAgTkVXUzogc25tcHRyYXBkOiBCVUc6IDE5NTUyMjc6IE1lbW9yeSBsZWFrIGZvciBlbWJlZGRlZCBQZXJsIG9uCi0gICAgIHg4Nl82NAogCi0yMDA4LTA1LTI5IDE2OjExICBkdHMxMgorICAgTkVXUzogc25tcHRyYXBkOiBCVUc6IDE5NTUyMjc6IE1lbW9yeSBsZWFrIGZvciBlbWJlZGRlZCBQZXJsIG9uCisgICB4ODZfNjQKIAotICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmM6Ci0gICAgIFNpbGx5IHR5cG8KKzIwMDgtMDUtMzEgMTI6MDggIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFRoZSBzY2FsYXIgaGVscGVyIHRoYXQgd2FzIGNhbGxlZCBmcm9tIHRoZQorICAgc2NhbGFyX2dyb3VwIGhlbHBlciBkaWQgbm90aGluZyBzYXZlIGFkZGluZyBhIHRyYWlsaW5nIDAgdG8gdGhlCisgICBhcmd1bWVudC4gUmVtb3ZlIHRoZSB1c2Ugb2YgdGhlIHNjYWxhciBoZWxwZXIgZnJvbSB0aGUKKyAgIHNjYWxhcl9ncm91cCBhbmQgYWRkIHRoZSB0cmFpbGluZyAwIGluIHRoZSBzY2FsYXJfZ3JvdXAgaGVscGVyLgorCisyMDA4LTA1LTMwIDEzOjU2ICBkdHMxMgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIFR3ZWFrIGxpc3Qgb2Ygb24tbGluZSBzb2Z0d2FyZSBkaXJlY3RvcmllcyB0byBiZSB1cGRhdGVkLgogCiAyMDA4LTA1LTI5IDA5OjU5ICBkdHMxMgogCi0gICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgYXBwcy9zbm1wdGVzdC5jLAotICAgICBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHVzbS5jLCBzbm1wbGliL3NubXB1c20uYzoKLSAgICAgVmFyaW91cyBtaXNzaW5nIGVycm9yIGNoZWNrcywgZXRjLgotICAgICBSZXBvcnRlZCBieSBCb3lhIFN1bi4KKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCBhcHBzL3NubXB0ZXN0LmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHVzbS5jLCBzbm1wbGliL3NubXB1c20uYzoKKworICAgVmFyaW91cyBtaXNzaW5nIGVycm9yIGNoZWNrcywgZXRjLgorICAgUmVwb3J0ZWQgYnkgQm95YSBTdW4uCiAKIDIwMDgtMDUtMjggMTE6NDggIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jOgotICAgICBSZXBvcnQgY2FjaGVkIG1lbW9yeSBzaXplL3VzYWdlIHByb3Blcmx5IChwYXJ0aWN1bGFybHkgb24KLSAgICAgRnJlZUJTRCkuCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jOgorCisgICBSZXBvcnQgY2FjaGVkIG1lbW9yeSBzaXplL3VzYWdlIHByb3Blcmx5IChwYXJ0aWN1bGFybHkgb24KKyAgIEZyZWVCU0QpLgogCiAyMDA4LTA1LTI4IDExOjIxICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jOgotICAgICBCcmluZyBtZW1CdWZmZXIgY29kZSBpbnRvIGxpbmUgd2l0aCByZXZpc2lvbiAxNjk3NS4KKworICAgQnJpbmcgbWVtQnVmZmVyIGNvZGUgaW50byBsaW5lIHdpdGggcmV2aXNpb24gMTY5NzUuCiAKIDIwMDgtMDUtMjggMTE6MTAgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jOgotICAgICBMaW51eCAyLjYga2VybmVsIGRvZXMgbm90IHJlcG9ydCBzaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uLgorCisgICBMaW51eCAyLjYga2VybmVsIGRvZXMgbm90IHJlcG9ydCBzaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uLgogCiAyMDA4LTA1LTI4IDA5OjE4ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTkzMTM5MTogRml4IHJlcG9ydGluZyBvZiBNZW1vcnkgYnVmZmVycyBhbmQKLSAgICAgY2FjaGVkIG1lbW9yeS4KLSAgICAgUHJvYmxlbSByZXBvcnRlZCBieSBkb2NvbmVpbGwuCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE5MzEzOTE6IEZpeCByZXBvcnRpbmcgb2YgTWVtb3J5IGJ1ZmZlcnMgYW5kCisgICBjYWNoZWQgbWVtb3J5LgorICAgUHJvYmxlbSByZXBvcnRlZCBieSBkb2NvbmVpbGwuCisKKzIwMDgtMDUtMjggMDg6MzAgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyAgIFR3ZWFrIHRoZSBmaXggZm9yIGJ1ZyAjMTkxMjY0NwogCiAyMDA4LTA1LTI4IDA2OjU2ICBtYWdmcgogCiAgICAqIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBFbmZvcmNlIHRoZSBsb3dlciBsaW1pdCBvbiBzY2FsYXJfZ3JvdXBzCi0gICAgIFRoaXMgZml4ZXMgdGhlIGNhc2Ugb2YgZ2V0bmV4dCBpY21wLjAgcmV0dXJuaW5nIGljbXAuMC4wIGluc3RlYWQKLSAgICAgb2YgdGhlCi0gICAgIGV4cGVjdGVkIGljbXBJbk1zZ3MuMAorCisgICBDSEFOR0VTOiBzbm1wZDogRW5mb3JjZSB0aGUgbG93ZXIgbGltaXQgb24gc2NhbGFyX2dyb3VwcworICAgVGhpcyBmaXhlcyB0aGUgY2FzZSBvZiBnZXRuZXh0IGljbXAuMCByZXR1cm5pbmcgaWNtcC4wLjAgaW5zdGVhZAorICAgb2YgdGhlCisgICBleHBlY3RlZCBpY21wSW5Nc2dzLjAKIAogMjAwOC0wNS0yNyAyMjowMyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxOTEyNjQ3OiBGaXggbWVtb3J5IGxlYWsgZm9sbG93aW5nIGZhaWxlZAotICAgICByZXF1ZXN0cy4KLSAgICAgRml4IHByb3ZpZGVkIGJ5IEFudG9uIFBhaworCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxOTEyNjQ3OiBGaXggbWVtb3J5IGxlYWsgZm9sbG93aW5nIGZhaWxlZAorICAgcmVxdWVzdHMuCisgICBGaXggcHJvdmlkZWQgYnkgQW50b24gUGFrCiAKIDIwMDgtMDUtMjcgMjE6MjIgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDE5NTgwNDE6IEVuc3VyZSBJRHMgYXJlIG5vdCB0cnVuY2F0ZWQuCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMTk1ODA0MTogRW5zdXJlIElEcyBhcmUgbm90IHRydW5jYXRlZC4KIAogMjAwOC0wNS0yNyAxNDoxOCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYzoKLSAgICAgTW9uaXRvciBtZW1vcnkgYnVmZmVycyBvbiBGcmVlQlNEIHN5c3RlbXMuCi0gICAgIEFQSSBzdWdnZXN0ZWQgYnkgQ2hyaXMKKworICAgTW9uaXRvciBtZW1vcnkgYnVmZmVycyBvbiBGcmVlQlNEIHN5c3RlbXMuCisgICBBUEkgc3VnZ2VzdGVkIGJ5IENocmlzCiAKIDIwMDgtMDUtMjcgMTI6NDcgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYzoKLSAgICAgRml4IGNhcmVsZXNzIHR5cG8gd2hlbiBhcHBseWluZyBNYXhpbSdzIHBhdGNoLgorCisgICBGaXggY2FyZWxlc3MgdHlwbyB3aGVuIGFwcGx5aW5nIE1heGltJ3MgcGF0Y2guCisKKzIwMDgtMDUtMjUgMjE6MzcgIG1hZ2ZyCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFJlaW1wbGVtZW50YXRpb24gb2YgdXNtU3RhdHMuCiAKIDIwMDgtMDUtMjUgMDc6MjQgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jOgotICAgICBSZW1vdmUgYSBsb2NhbCB2YXJpYWJsZSBvbmx5IHVzZWQgdG8gdHJhY2sgYSBsb2NhbCBzdHJpbmcKLSAgICAgY29uc3RhbnQgYW5kIHJlcGxhY2UgdCB3aXRoIGEgZGlyZWN0IHJlZmVyZW5jZSB0byB0aGUgc3RyaW5nCi0gICAgIGNvbnN0YW50LgotICAgICBNYXJrIHR3byBsb2NhbCBmdW5jdGlvbnMgc3RhdGljIGFzIHdlbGwuCisKKyAgIFJlbW92ZSBhIGxvY2FsIHZhcmlhYmxlIG9ubHkgdXNlZCB0byB0cmFjayBhIGxvY2FsIHN0cmluZworICAgY29uc3RhbnQgYW5kIHJlcGxhY2UgdCB3aXRoIGEgZGlyZWN0IHJlZmVyZW5jZSB0byB0aGUgc3RyaW5nCisgICBjb25zdGFudC4KKyAgIE1hcmsgdHdvIGxvY2FsIGZ1bmN0aW9ucyBzdGF0aWMgYXMgd2VsbC4KIAogMjAwOC0wNS0yNSAwNzoxNyAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmM6Ci0gICAgIFJlb3JkZXIgdG8gYXZvaWQgb25lIHN0cmxlbiBjYWxsLgotICAgICBBZGQgbWlzc2luZyBjYXN0LgorCisgICBSZW9yZGVyIHRvIGF2b2lkIG9uZSBzdHJsZW4gY2FsbC4KKyAgIEFkZCBtaXNzaW5nIGNhc3QuCiAKIDIwMDgtMDUtMjUgMDc6MTQgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYzoKLSAgICAgTWFrZSBpcGZ3X25hbWUgYSBzdGF0aWMgYXJyYXkgaW5zdGVhZCBvZiBhIHBvaW50ZXIgYXMgaXQgaXMKLSAgICAgcHJpdmF0ZSB0byB0aGlzIG1vZHVsZS4KKworICAgTWFrZSBpcGZ3X25hbWUgYSBzdGF0aWMgYXJyYXkgaW5zdGVhZCBvZiBhIHBvaW50ZXIgYXMgaXQgaXMKKyAgIHByaXZhdGUgdG8gdGhpcyBtb2R1bGUuCiAKIDIwMDgtMDUtMjUgMDc6MDUgIG1hZ2ZyCiAKICAgICogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jOgotICAgICBXaGVuIGNhc3RpbmcsIGNhc3QgdG8gdGhlIHJpZ2h0IHR5cGUuCisKKyAgIFdoZW4gY2FzdGluZywgY2FzdCB0byB0aGUgcmlnaHQgdHlwZS4KKworMjAwOC0wNS0yNSAwNjowOCAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvcmVhZF9vbmx5LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywKKyAgICAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgYXBwcy9zbm1wdGVzdC5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIFJlbW92ZSB3YXJuaW5ncyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIG9uIHNvbGFyaXMuCiAKIDIwMDgtMDUtMjQgMjA6MzAgIGR0czEyCiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKLSAgICAgQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDE4MjYxNzQ6IENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cgd2hlbgotICAgICBwcmludGluZyB2YWx1ZXMuCi0gICAgIEFkZHJlc3NlcyBDVkUtMjAwOC0yMjkyCisKKyAgIENIQU5HRVM6IHB5dGhvbjogQlVHOiAxODI2MTc0OiBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IHdoZW4KKyAgIHByaW50aW5nIHZhbHVlcy4KKyAgIEFkZHJlc3NlcyBDVkUtMjAwOC0yMjkyCisKKzIwMDgtMDUtMjQgMTM6MTEgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIE9uIEFJWCBuZXRpbmV0L2luX3BjYi5oIGRlcGVuZHMgb24gbmV0L3JvdXRlLmguIEFkZCB0aGUgaW5jbHVkZQorICAgZm9yIGNvbmZpZ3VyZS4KKworMjAwOC0wNS0yNCAwOTowNiAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBNYWtlIHRoZSBjaGVja3MgZm9yIG5ldGluZXQvaW5fcGNiLmggYW5kIHN5cy9kaXNrbGFiZWwuaCB1c2UgdGhlCisgICBub3JtYWwKKyAgIG1hY2hpbmVyeS4KKyAgIEFkZCBhIG5ldHNubXAgcHJlZml4IHRvIHRoZSBjYWNoZSB2YXJpYWJsZQorICAgY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSIHRvCisgICBwYWNpZnkgYWNsb2NhbC4KIAogMjAwOC0wNS0yMyAyMDoyNyAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiBGaXggZm9yIENQVSBzdGF0cyBvbiBGcmVlQlNECi0gICAgIFByb3ZpZGVkIGJ5IE1heGltIFNvYm9sZXYKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiBGaXggZm9yIENQVSBzdGF0cyBvbiBGcmVlQlNECisgICBQcm92aWRlZCBieSBNYXhpbSBTb2JvbGV2CiAKIDIwMDgtMDUtMjMgMjA6MTIgIGR0czEyCiAKICAgICogZGlzdC9zbm1wZC1pbml0LmQsIGRpc3Qvc25tcHRyYXBkLWluaXQuZDoKLSAgICAgQ0hBTkdFUzogaW5zdGFsbDogUEFUQ0g6IDE5Njk2Mjc6IEhhbmRsZSBlbXB0eQotICAgICAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrIGZpbGUKLSAgICAgRml4IHByb3ZpZGVkIGJ5IEpvc2ggV2lsbWVzCisKKyAgIENIQU5HRVM6IGluc3RhbGw6IFBBVENIOiAxOTY5NjI3OiBIYW5kbGUgZW1wdHkKKyAgIC9ldGMvc3lzY29uZmlnL25ldHdvcmsgZmlsZQorICAgRml4IHByb3ZpZGVkIGJ5IEpvc2ggV2lsbWVzCiAKIDIwMDgtMDUtMjMgMjA6MDcgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTk2NzE5NDogUmVjb2duaXNlIE5GUzQgbW91bnRzCi0gICAgIFN1Ym1pdHRlZCBieSBGYWJyaWNlIEJhY2NoZWxsYQorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE5NjcxOTQ6IFJlY29nbmlzZSBORlM0IG1vdW50cworICAgU3VibWl0dGVkIGJ5IEZhYnJpY2UgQmFjY2hlbGxhCiAKIDIwMDgtMDUtMjIgMjA6NTUgIGR0czEyCiAKICAgICogc25tcGxpYi9hc24xLmM6Ci0gICAgIERvbid0IGNoYW5nZSBsZW5ndGggb2YgT0lEIGJ1ZmZlciBpZiBwYXJzaW5nIHRoZSBPSUQgZmFpbHMuCi0gICAgIFJlcG9ydGVkIGJ5IHNhaWZ1bGxhIE1vaGQgQWJkdWwuCisKKyAgIERvbid0IGNoYW5nZSBsZW5ndGggb2YgT0lEIGJ1ZmZlciBpZiBwYXJzaW5nIHRoZSBPSUQgZmFpbHMuCisgICBSZXBvcnRlZCBieSBzYWlmdWxsYSBNb2hkIEFiZHVsLgorCisyMDA4LTA1LTIyIDEzOjM0ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICB1cGRhdGUgdGhlIGFkdmVydGlzaW5nIHNlY3Rpb24gYW5kIGNoYW5nZSBub3RlIGFib3V0IGhvdyB0bworICAgdXBsb2FkIGZpbGVzIChhZGRpbmcgYW4gYXV0b21hdHRlZCByc3luYyBjb21tYW5kKQorCisyMDA4LTA1LTIyIDA0OjA4ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5jOgorCisgICBBZGQgbWlzc2luZyBpbmNsdWRlLgorCisyMDA4LTA1LTIxIDIwOjI3ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgdGhlIGFsaWFzIG1vZHVsZSB3aXRoIGEgQysrIGNvbXBpbGVyLgorCisyMDA4LTA1LTIxIDEzOjQwICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBhZGRlZCBGU0YgZGlyZWN0b3J5IGluZm8KKworMjAwOC0wNS0yMSAwOToyMSAgZHRzMTIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBBZGQgRnJlZSBTb2Z0d2FyZSBEaXJlY3RvcnkgdG8gdGhlIGxpc3Qgb2YgcGxhY2VzIHRvIGJlIHVwZGF0ZWQuCisKKzIwMDgtMDUtMjAgMjM6MDAgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5oLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCwgYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmgsIAorICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogVGhlIG1ham9yaXR5IG9mIHRoZSBkZXBlbmRlbmNpZXMgb24gdXRpbF9mdW5jcyBpcworICAgZm9yIHRoZSBoZWFkZXJfKiBmdW5jdGlvbnMuIEZhY3RvciBvdXQgdGhlIGhlYWRlcl8qIGZ1bmN0aW9ucyBhbmQKKyAgIGFkanVzdCB0aGUgcmVxdWlyZW1lbnRzLgorCisyMDA4LTA1LTIwIDIyOjQwICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmgsIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuaCwgYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuaCwgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMsCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5oLCBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmgsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmMsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmgsIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgQ0hBTkdFUzogRG8gbm90IGNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpIGlmIG5vdGhpbmcgZnJvbQorICAgdXRpbF9mdW5jcyBpcyB1c2VkCiAKIDIwMDgtMDUtMTQgMTM6MzUgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6Ci0gICAgIGZpeCBidWlsZCBmYWlsdXJlcyB3aXRoIGVhcmxpZXIgTGludXgga2VybmVscyAoZS5nLiB3aXRoIFJINy4xKQotICAgICBpbnRyb2R1Y2VkIGJ5IHIxNjkwOQogCi0yMDA4LTA1LTA5IDE5OjA0ICBkdHMxMgorICAgZml4IGJ1aWxkIGZhaWx1cmVzIHdpdGggZWFybGllciBMaW51eCBrZXJuZWxzIChlLmcuIHdpdGggUkg3LjEpCisgICBpbnRyb2R1Y2VkIGJ5IHIxNjkwOQogCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwKLSAgICAgcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwKLSAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIHBlcmwvYWdlbnQvYWdlbnQucG0sCi0gICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLAotICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgc2Vkc2NyaXB0LmluLAotICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjIucHJlMSApCisyMDA4LTA1LTEzIDE4OjU2ICBoYXJkYWtlcgogCi0yMDA4LTA1LTA5IDE5OjA0ICBkdHMxMgorICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0gICAqIENIQU5HRVMsIE5FV1M6Ci0gICAgIHZlcnNpb24gdXBkYXRlCisgICBmaXggY29tbWVudCB0eXBvCiAKLTIwMDgtMDUtMDkgMTg6NDcgIGR0czEyCisyMDA4LTA1LTEzIDE1OjQ2ICBoYXJkYWtlcgogCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKKyAgICogTkVXUzoKIAotMjAwOC0wNS0wOSAxNToyNCAgZHRzMTIKKyAgIGRvY3VtZW50IHRoZSAtdCBzd2l0Y2ggY2hhbmdlCiAKLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgotICAgICBtYWtlIGRlcGVuZAorMjAwOC0wNS0xMyAxNTo0NSAgaGFyZGFrZXIKIAotMjAwOC0wNS0wOSAxNToxNCAgZHRzMTIKKyAgICogbWFuL3NubXBjbWQuMS5kZWY6CiAKLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjIucHJlMSApCisgICBkb2N1bWVudCB0aGUgYWxpYXMga2V5d29yZAogCi0yMDA4LTA1LTA5IDE0OjUxICBkdHMxMgorMjAwOC0wNS0xMyAxNTo0MSAgaGFyZGFrZXIKIAotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICAqIG1hbi9zbm1wY21kLjEuZGVmLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgogCi0yMDA4LTA1LTA5IDE0OjQ3ICBkdHMxMgorICAgYWxsb3cgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB0byBiZSB1c2VkIGZvciB0aW1lb3V0IHZhbHVlcwogCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yICkKKzIwMDgtMDUtMTIgMjE6MTEgIGhhcmRha2VyCiAKLTIwMDgtMDUtMDkgMTQ6MjMgIGR0czEyCisgICAqIG1pYnMvTkVULVNOTVAtVEMudHh0LCBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jOgogCi0gICAqIE1ha2VmaWxlLnRvcDoKLSAgICAgdmVyc2lvbiB1cGRhdGUKKyAgIEFkZGVkIGEgcmVhbCBzbm1wQWxpYXNEb21haW4gT0lEIGRlZmluaXRpb24KIAotMjAwOC0wNS0wOSAxMzo1OCAgZHRzMTIKKzIwMDgtMDUtMTIgMjE6MDcgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmM6Ci0gICAgIERlYnVnZ2luZyBtZXNzYWdlcy4KKyAgICogTkVXUzoKKworICAgdXBkYXRlZCBORVdTIHdpdGggbmV3IGFsaWFzIGJsdXJiCisKKzIwMDgtMDUtMTIgMjE6MDcgIGhhcmRha2VyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBbGlhc0RvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgbWFuL3NubXAuY29uZi41LmRlZiwgICAKKyAgICAgIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgTkVXUzogc25tcGxpYjogQWRkZWQgYSBhbGlhcyB0cmFuc3BvcnQgZm9yIG1hcHBpbmcgY29tcGxleAorICAgdHJhbnNwb3J0IHN0cmluZ3MgdG8gc2ltcGxlIG5hbWUgZGVmaW5pdGlvbnMKKworMjAwOC0wNS0xMiAxOTozOCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgc3RyaXAgb2ZmIHRyYWlsaW5nIG1vZHVsZSBuYW1lCisKKzIwMDgtMDUtMTIgMDY6MDMgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYzoKKworICAgTWFrZSBtaWJJSS9zbm1wIHdvcmsgYWdhaW4uCisKKzIwMDgtMDUtMTAgMjE6NDcgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLgorCisyMDA4LTA1LTEwIDA5OjU1ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF9pbmRleC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBzbm1wbGliL2FzbjEuYzoKKworICAgQ0hBTkdFUzogc25tcGQsIHNubXBsaWI6IFJlcGxhY2UgdGhlIGludmFsaWQgJTA4cCBmb3JtYXQKKyAgIHNwZWNpZmllciB3aXRoIHRoZSBjb3JyZWN0ICU4cC4KKworMjAwOC0wNS0xMCAwOTo1MSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgQ0hBTkdFUzogc25tcGQsIHNubXBuZXRzdGF0LCBzbm1wdHJhcGQsIHNubXBkZWx0YTogVXNlIE5VTEwKKyAgIGluc3RlYWQgb2YgMCBmb3IgTlVMTCBwb2ludGVycy4gVXNlIGNhc3RlZCAwJ3MgaW5zdGVhZCBvZiAwIGZvcgorICAgTlVMTCBmdW5jdGlvbiBwb2ludGVycy4KKworMjAwOC0wNS0xMCAwOTo0MCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBtaXNzaW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KKworMjAwOC0wNS0xMCAwOTozOSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsIGFnZW50L3NubXBfdmFycy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQWRkIG1pc3NpbmcgaW5jbHVkZSBmaWxlcy4KKworMjAwOC0wNS0xMCAwOTozMyAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmMsICAgCisgICAgICBzbm1wbGliL2RhdGFfbGlzdC5jOgorCisgICBDSEFOR0VTOiBzbm1wZCwgc25tcGxpYiwgbWliMmM6IE1vdmUgdGhlIGRlZmluaXRpb24gb2YgaW5saW5lCisgICBmdW5jdGlvbnMgc28gdGhhdCB0aGUgY29tcGlsZXIgc2VlcyB0aGVtIGJlZm9yZSBpdCBzZWVzIHVzZXMgb2YKKyAgIHRoZW0uCisKKzIwMDgtMDUtMTAgMDk6MzAgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaDoKKworICAgQ0hBTkdFUzogc25tcGQsIHNubXBsaWI6IFJlbW92ZSB0aGUgaW5saW5lIGRlY2xhcmF0aW9ucyBmb3IKKyAgIGZ1bmN0aW9ucyB0aGF0IGxhY2sgYW4gaW5saW5lIGRlZmluaXRpb24uCisKKzIwMDgtMDUtMDkgMjE6MzUgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X2luZGV4LmMsIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2FnZW50X3RyYXAuYywgIAorICAgICAgIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jLCAgCisgICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX251bGwuYywgc25tcGxpYi9sY2RfdGltZS5jLCBzbm1wbGliL21kNS5jLCAgIAorICAgICAgc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXBfZGVidWcuYywgIAorICAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkLCBzbm1wbGliOiBVc2UgTlVMTCBpbnN0ZWFkIG9mIDAgZm9yIE5VTEwgcG9pbnRlcnMuCisgICBVc2UgY2FzdGVkIDAncyBpbnN0ZWFkIG9mIDAgZm9yIE5VTEwgZnVuY3Rpb24gcG9pbnRlcnMuCisKKzIwMDgtMDUtMDkgMjE6MjcgIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgCisgICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKworICAgQ0hBTkdFUzogc25tcGQsIHNubXBsaWI6IGZpeHVwcyBmb3IgcHJvdG90eXBlIFsodm9pZCkgcmVwbGFjaW5nCisgICAoKV0uCisKKzIwMDgtMDUtMDkgMjE6MjMgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmM6CisKKyAgIFJlbW92ZSBkZWFkIGNvZGUuCisKKzIwMDgtMDUtMDkgMTk6MTYgIGR0czEyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZToKKworICAgTWlzc2luZyBNRDUgc2lnbmF0dXJlIGZpbGUgZm9yIHppcCByZWxlYXNlCisKKzIwMDgtMDUtMDkgMTk6MTUgIGR0czEyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZToKKworICAgQmFzaWMgZG9jdW1lbnRhdGlvbiBhbmQgaGVscC91c2FnZSBtZXNzYWdlcy4KIAogMjAwOC0wNS0wOCAxNDowMCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6Ci0gICAgIERyb3Agc3VwcG9ydCBmb3IgdGhlIGludGVyaW0gU0lPQ0RFVlBSSVZBVEUtYmFzZWQgaW9jdGwgY2FsbHMuCi0gICAgIFNJT0NHTUlJUEhZL1NJT0NHTUlJUkVHIGhhdmUgYmVlbiBkZWZpbmVkIHNpbmNlIGF0IGxlYXN0IFNlcHQKLSAgICAgMjAwMSAoa2VybmVsIDIuNC4xMCksCi0gICAgIHNvIHRoZSByaXNrIG9mIGNhbGxpbmcgYW4gaW5hcHByb3ByaWF0ZSBwcml2YXRlIGlvY3RsIGlzIHByb2JhYmx5Ci0gICAgIGdyZWF0ZXIgdGhhbgotICAgICB0aGF0IG9mIG1pc3NpbmcgaW5mb3JtYXRpb24gZnJvbSBhbiBhbmNpZW50IHN5c3RlbS4KKworICAgRHJvcCBzdXBwb3J0IGZvciB0aGUgaW50ZXJpbSBTSU9DREVWUFJJVkFURS1iYXNlZCBpb2N0bCBjYWxscy4KKyAgIFNJT0NHTUlJUEhZL1NJT0NHTUlJUkVHIGhhdmUgYmVlbiBkZWZpbmVkIHNpbmNlIGF0IGxlYXN0IFNlcHQKKyAgIDIwMDEgKGtlcm5lbCAyLjQuMTApLAorICAgc28gdGhlIHJpc2sgb2YgY2FsbGluZyBhbiBpbmFwcHJvcHJpYXRlIHByaXZhdGUgaW9jdGwgaXMgcHJvYmFibHkKKyAgIGdyZWF0ZXIgdGhhbgorICAgdGhhdCBvZiBtaXNzaW5nIGluZm9ybWF0aW9uIGZyb20gYW4gYW5jaWVudCBzeXN0ZW0uCiAKIDIwMDgtMDUtMDggMDk6MDIgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotICAgICBEb24ndCB0cnkgdG8gYXV0b21hdGljYWxseSBjcmVhdGUgYW5vbnltb3VzIHVzZXJzLgotICAgICAoQW4gaW52YWxpZCB0cmFwc2VzcyBkaXJlY3RpdmUgbWF5IGNyYXNoIHRoZSBhZ2VudCkKKworICAgRG9uJ3QgdHJ5IHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGFub255bW91cyB1c2Vycy4KKyAgIChBbiBpbnZhbGlkIHRyYXBzZXNzIGRpcmVjdGl2ZSBtYXkgY3Jhc2ggdGhlIGFnZW50KQorCisyMDA4LTA1LTA2IDA4OjM4ICBqc2FmcmFuZWsKKworICAgKiBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIC0gcmVtb3ZlICV7bGliY3VycmVudH0KKyAgIC0gYWRkIG9wZW5zc2wtZGV2ZWwgdG8gYnVpbGQgcmVxdWlyZW1lbnRzCisgICAtIGRvbid0IHVzZSBQcm92aWRlczogdW5sZXNzIG5lY2Vzc2FyeSwgbGV0IHJwbWJ1aWxkIGNvbXB1dGUgdGhlCisgICBwcm92aWRlZCBsaWJyYXJpZXMKKyAgIC0gZG9uJ3Qgc3BlY2lmeSBQUkVGSVggZm9yIHBlcmwKKworMjAwOC0wNS0wNiAwODozOCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICByZXZlcnRpbmcgYWNjaWRlbnRhbHkgY29tbWl0ZWQgZmlsZXMKKworMjAwOC0wNS0wNiAwODozNCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICAtIHJlbW92ZSAle2xpYmN1cnJlbnR9CisgICAtIGFkZCBvcGVuc3NsLWRldmVsIHRvIGJ1aWxkIHJlcXVpcmVtZW50cworICAgLSBkb24ndCB1c2UgUHJvdmlkZXM6IHVubGVzcyBuZWNlc3NhcnksIGxldCBycG1idWlsZCBjb21wdXRlIHRoZQorICAgcHJvdmlkZWQgbGlicmFyaWVzCisgICAtIGRvbid0IHNwZWNpZnkgUFJFRklYIGZvciBwZXJsCisKKzIwMDgtMDUtMDUgMjE6NDMgIGR0czEyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIE1lY2hhbmlzbSB0byBzZWxlY3QgdXBjb21pbmcgbW9kdWxlIHJlLXdyaXRlcyBhbmQvb3IKKyAgIHJlY2VudGx5LWRlcHJlY2F0ZWQgbW9kdWxlcy4KIAogMjAwOC0wNS0wMiAxMDoxOSAgZHRzMTIKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45Lmg6Ci0gICAgIEhhbmRsZSB1ZHBUYWJsZSBpbmRleGluZyBvbiBib3RoIFBQQyBhbmQgSW50ZWwgaGFyZHdhcmUuCisKKyAgIEhhbmRsZSB1ZHBUYWJsZSBpbmRleGluZyBvbiBib3RoIFBQQyBhbmQgSW50ZWwgaGFyZHdhcmUuCisKKzIwMDgtMDQtMzAgMTk6NDUgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFJlbW92ZSB0aGUgc3VwcG9ydCBmb3IgZ2VuZXJhdGlvbiBvZiBzdGF0aXN0aWNzCisgICBvZiBob3cgb2Z0ZW4gYSBjZXJ0YWluIGRlYnVnIGxvZyBsZXZlbCBpcyB0cmlnZ2VyZWQuCisKKzIwMDgtMDQtMzAgMTk6NDEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IFJlbW92ZSB0aGUgdmFyaWFibGUgZGVidWdfbnVtX2V4Y2x1ZGVkLgorICAgVGhlcmUgaXMgbm90aGluZyB0aGF0IHNldHMgZGVidWdfbnVtX2V4Y2x1ZGVkIGFuZCB0aGVyZSBpcyBubyB3YXkKKyAgIHRvIGZvciBpdAorICAgdG8gYWZmZWN0IHRoZSByZXN1bHQgb2YgYW55IGZ1bmN0aW9uLgogCiAyMDA4LTA0LTMwIDA1OjI4ICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgotICAgICBSZW1vdmUgdW5uY2Vzc2FyeSBwcm90b3R5cGVzCisKKyAgIFJlbW92ZSB1bm5jZXNzYXJ5IHByb3RvdHlwZXMKKworMjAwOC0wNC0yMyAxNjozOSAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgYWN0dWFsbHkgdXNlIHRoZSBicmFuY2ggcGF0aCwgZG9uJ3QganVzdCBzYXkgeW91J3JlIGdvaW5nIHRvCiAKIDIwMDgtMDQtMTkgMjI6MjAgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYzoKLSAgICAgZG9uJ3QgZGVwZW5kIG9uIE9JRCByZXNvbHV0aW9uIGZvciBkaXNtYW4gbGlua1VwRG93bk5vdGlmaWNhdGlvbnMKKworICAgZG9uJ3QgZGVwZW5kIG9uIE9JRCByZXNvbHV0aW9uIGZvciBkaXNtYW4gbGlua1VwRG93bk5vdGlmaWNhdGlvbnMKKworMjAwOC0wNC0wOCAyMDo0MyAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaDoKKworICAgQWNjZXB0IHRoYXQgcGVvcGxlIHdpbGwgdHJ5IHRvIGNvbXBpbGUgdGhpcyBjb2RlIHdpdGggcHJlLUFOU0kKKyAgIGNvbXBpbGVycyBhbmQgY2hhbmdlIGl0IHRvIGhhbmRsZSB0aGF0IGNhc2UuCiAKIDIwMDgtMDQtMDggMjA6MzggIGhhcmRha2VyCiAKICAgICogcGVybC9hZ2VudC9hZ2VudC5wbToKLSAgICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYW4gZXh0cmEgYnJhY2UgaW4gdGhlIGRvY3MgcG9pbnRlZCBvdXQgYnkKLSAgICAgSmFzb24gTWFydGluCisKKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGFuIGV4dHJhIGJyYWNlIGluIHRoZSBkb2NzIHBvaW50ZWQgb3V0IGJ5CisgICBKYXNvbiBNYXJ0aW4KKworMjAwOC0wNC0wOCAyMDozNCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgdXBkYXRlIGFuZCByZXN0cnVjdHVyZSBhIGJpdCB0byBmaXggYSBmZXcgcHJvYmxlbXMKKworMjAwOC0wNC0wNyAyMDowNiAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL251bGwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEFzIHRoZSBudWxsIGhhbmRsZXIgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YKKyAgIGhhbmRsaW5nIEdFVF9CVUxLIHJlcXVlc3RzIGl0IGlzIG5vdyBtYXJrZWQgYXMgc3VjaCBpbiB0aGUKKyAgIHJlZ2lzdHJhdGlvbi4KIAogMjAwOC0wNC0wNyAxNDowMCAgZHRzMTIKIAogICAgKiBzbm1wbGliL3BhcnNlLmM6Ci0gICAgIEFub3RoZXIgb3Zlci1zaG9ydCBERVNDUklQVElPTiBidWZmZXIuCisKKyAgIEFub3RoZXIgb3Zlci1zaG9ydCBERVNDUklQVElPTiBidWZmZXIuCiAKIDIwMDgtMDQtMDcgMTM6NTcgIGR0czEyCiAKICAgICogc25tcGxpYi9wYXJzZS5jOgotICAgICBIYW5kbGUgbG9uZ2VyIERFU0NSSVBUSU9OL1JFRkVSRU5DRSBzdHJpbmdzIGluIENhcGFiaWxpdGllcwotICAgICBzdGF0ZW1lbnRzLgotICAgICAoQ29uc2lzdGVudCBwcm9jZXNzaW5nIHdpdGggb3RoZXIgTUlCIGRlZmluaXRpb24gbWFjcm9zKS4KLSAgICAgRml4IHByb3ZpZGVkIGJ5IEFsZWtzYW5kciBMb21hbm92LgorCisgICBIYW5kbGUgbG9uZ2VyIERFU0NSSVBUSU9OL1JFRkVSRU5DRSBzdHJpbmdzIGluIENhcGFiaWxpdGllcworICAgc3RhdGVtZW50cy4KKyAgIChDb25zaXN0ZW50IHByb2Nlc3Npbmcgd2l0aCBvdGhlciBNSUIgZGVmaW5pdGlvbiBtYWNyb3MpLgorICAgRml4IHByb3ZpZGVkIGJ5IEFsZWtzYW5kciBMb21hbm92LgorCisyMDA4LTA0LTAyIDE5OjM1ICBoYXJkYWtlcgorCisgICAqIEZBUToKKworICAgbWVudGlvbiBsaWJlbGYgcGFja2FnZSByZW5hbWUKKworMjAwOC0wMy0yOSAwOToyOSAgbWFnZnIKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jLCAKKyAgICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg6CisKKyAgIE5FV1M6IHNubXBkOiBFbmFibGUgYXV0b21hdGljIHJlcmVnaXN0ZXJpbmcgb2Ygc3lzT1JUYWJsZSBlbnRyaWVzCisgICBmcm9tIEFnZW50WCBzdWJhZ2VudHMuIEFkZCB0aGUgc3lzT1JUYWJsZSBpbnRlcmZhY2UgdG8gdGhlCisgICBpbmNsdWRlIGRpcmVjdG9yeS4gUmV3cml0ZSB0aGUgc3lzT1JUYWJsZSBtb2R1bGUgdG8gdXNlIHRoZQorICAgdGFibGVfY29udGFpbmVyIGhhbmRsZXIuCisKKzIwMDgtMDMtMjcgMDM6MjEgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZSwgZGlzdC9uZXQtc25tcC5zcGVjLCBkaXN0L3BhdG1lOgorCisgICB1bmNvbW1pdCAzIGFjY2lkZW50YWwgbXVsdGlwbGUgZmlsZSBjb21taXRzCisKKzIwMDgtMDMtMjcgMDM6MTggIGhhcmRha2VyCisKKyAgICogIGRpc3QvbWFrZXJlbGVhc2UsIGRpc3QvbWFrZXJlbGVhc2UueG1sLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCisgICAgICBkaXN0L3BhdG1lOgorCisgICB2YXJpb3VzIHJld29yZGluZywgcmVzdHJ1Y3R1cmluZyBhbmQgcHJvcGVyIGZpbGUgcmVwbGFjZW1lbnQKKyAgIHNjaGVtZQogCiAyMDA4LTAzLTI2IDA3OjUyICBtYWdmcgogCiAgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLSAgICAgTkVXUzogc25tcGxpYjogZnJvbSAiQWxla3NhbmRyIExvbWFub3YiOiBDb3JyZWN0ZWQgcmVnaXN0ZXJpbmcgb2YKLSAgICAgbXVsdGlwbGUgcHJlbWliIGNvbmZpZyBoYW5kbGVycyBzbyB0aGF0IGFsbCBvZiB0aGVtIGdldAotICAgICByZWdpc3RlcmVkIGFzIHByZW1pYiBoYW5kbGVycyBhcyBvcHBvc2VkIHRvIHRoZSBlYXJsaWVyIGJlaGF2aW91cgotICAgICB3aGVyZSB0aGV5IGFsd2F5cyBnb3QgcmVnaXN0ZXJlZCBhcyBub3JtYWwgY29uZmlnIGl0ZW1zLgorCisgICBORVdTOiBzbm1wbGliOiBmcm9tICJBbGVrc2FuZHIgTG9tYW5vdiI6IENvcnJlY3RlZCByZWdpc3RlcmluZyBvZgorICAgbXVsdGlwbGUgcHJlbWliIGNvbmZpZyBoYW5kbGVycyBzbyB0aGF0IGFsbCBvZiB0aGVtIGdldAorICAgcmVnaXN0ZXJlZCBhcyBwcmVtaWIgaGFuZGxlcnMgYXMgb3Bwb3NlZCB0byB0aGUgZWFybGllciBiZWhhdmlvdXIKKyAgIHdoZXJlIHRoZXkgYWx3YXlzIGdvdCByZWdpc3RlcmVkIGFzIG5vcm1hbCBjb25maWcgaXRlbXMuCisKKzIwMDgtMDMtMjYgMDc6MTYgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEdldCB0aGUgdGFibGVfY29udGFpbmVyIGRhdGEgZnJvbSB0aGUgcmlnaHQKKyAgIGhhbmRsZXIgd2hlbiB1bnJlZ2lzdGVyaW5nIGEgdGFibGVfY29udGFpbmVyLgogCiAyMDA4LTAzLTI1IDA2OjA3ICBtYWdmcgogCiAgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6Ci0gICAgIFJlbW92ZSBzcHVyaW91cyBwcmludGYgZnJvbSB1bnJlZ2lzdGVyX21pYl9jb250ZXh0CisKKyAgIFJlbW92ZSBzcHVyaW91cyBwcmludGYgZnJvbSB1bnJlZ2lzdGVyX21pYl9jb250ZXh0CiAKIDIwMDgtMDMtMjQgMTc6NTQgIGR0czEyCiAKICAgICogbG9jYWwvbWliMmM6Ci0gICAgIENIQU5HRVM6IG1pYjJjOiBCVUc6IDE4NzQwNTksMTczNzA2ODogSGFuZGxlIE1JQiBvYmplY3RzIHdpdGgKLSAgICAgZW1iZWRkZWQgaHlwaGVucworCisgICBDSEFOR0VTOiBtaWIyYzogQlVHOiAxODc0MDU5LDE3MzcwNjg6IEhhbmRsZSBNSUIgb2JqZWN0cyB3aXRoCisgICBlbWJlZGRlZCBoeXBoZW5zCiAKIDIwMDgtMDMtMjQgMTc6MjkgIGR0czEyCiAKICAgICogc25tcGxpYi9hc24xLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMTg2NjY1NTogSGFuZGxlIHBhcnNpbmcgaW52YWxpZCBPSUQKLSAgICAgc3ViaWRlbnRpZmllcnMKKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAxODY2NjU1OiBIYW5kbGUgcGFyc2luZyBpbnZhbGlkIE9JRAorICAgc3ViaWRlbnRpZmllcnMKIAogMjAwOC0wMy0yNCAxNjo1MyAgZHRzMTIKIAogICAgKiBzbm1wbGliL2FzbjEuYzoKLSAgICAgQ0hBTkdFUzogbGlicmFyeTogUEFUQ0g6IDE5MjE4NjE6IEF2b2lkIGVuZGxlc3MgbG9vcCBhZnRlcgotICAgICB0cnVuY2F0aW5nIDY0Yml0IGludAorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBQQVRDSDogMTkyMTg2MTogQXZvaWQgZW5kbGVzcyBsb29wIGFmdGVyCisgICB0cnVuY2F0aW5nIDY0Yml0IGludAogCiAyMDA4LTAzLTI0IDE1OjAwICBkdHMxMgogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxODIzMzgxOiBWYWxpZCBNSUIgZGlyZWN0b3J5IHNlYXJjaCBwYXRoIG9uCi0gICAgIFdpbmRvd3MKKworICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTgyMzM4MTogVmFsaWQgTUlCIGRpcmVjdG9yeSBzZWFyY2ggcGF0aCBvbgorICAgV2luZG93cworCisyMDA4LTAzLTIyIDA4OjQyICBtYWdmcgorCisgICAqIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgc25tcHRyYXBkIHdpdGhvdXQgZW1iZWRkZWQgcGVybCBhZ2Fpbi4KIAogMjAwOC0wMy0yMSAxNzo1NSAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLAotICAgICBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywKLSAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVbml4RG9tYWluLmMsCi0gICAgIHNubXBsaWIvd2lucGlwZS5jOgotICAgICBORVdTOiBsaWJzbm1wOiBQQVRDSDogMTg5NTkyNzogZnJvbSBqaHVtODExMTogY2hhbmdlIG9ic29sZXRlCi0gICAgIHJlY3Yvc2VuZCB0byByZWN2ZnJvbS9zZW5kdG8KKyAgICogIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi93aW5waXBlLmM6CisKKyAgIE5FV1M6IGxpYnNubXA6IFBBVENIOiAxODk1OTI3OiBmcm9tIGpodW04MTExOiBjaGFuZ2Ugb2Jzb2xldGUKKyAgIHJlY3Yvc2VuZCB0byByZWN2ZnJvbS9zZW5kdG8KIAogMjAwOC0wMy0yMSAxNzo0OSAgaGFyZGFrZXIKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgotICAgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAxODYyMTc3OiBmcm9tIHdhZmZsZXNvdWZmbGU6IG1hZGUgY29kZQotICAgICBtb3JlIHdpbmRvd3MvY3lnd2luIGNvbXBpbGVyIGZyaWVuZGwKKworICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMTg2MjE3NzogZnJvbSB3YWZmbGVzb3VmZmxlOiBtYWRlIGNvZGUKKyAgIG1vcmUgd2luZG93cy9jeWd3aW4gY29tcGlsZXIgZnJpZW5kbAogCiAyMDA4LTAzLTIxIDE3OjQ1ICBoYXJkYWtlcgogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudC5weToKLSAgICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMTg3Nzg0MDogZml4IE1JQiBsYWJlbCBhbmQgaW5kZXhpbmcgZHVlCi0gICAgIHRvIHNsaWdodGx5IGJyb2tlbiByZWdleHAKKworICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMTg3Nzg0MDogZml4IE1JQiBsYWJlbCBhbmQgaW5kZXhpbmcgZHVlCisgICB0byBzbGlnaHRseSBicm9rZW4gcmVnZXhwCiAKIDIwMDgtMDMtMjEgMTc6MzkgIGhhcmRha2VyCiAKICAgICogcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG06Ci0gICAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxOTIwMzkwOiBmcm9tIHdpbG1lc2o6IGZpeCByZWdpc3RyYXRpb24gb2YKLSAgICAgdGFibGVzIHdpdGggLjAgYXMgSUlEcworCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTkyMDM5MDogZnJvbSB3aWxtZXNqOiBmaXggcmVnaXN0cmF0aW9uIG9mCisgICB0YWJsZXMgd2l0aCAuMCBhcyBJSURzCiAKIDIwMDgtMDMtMjEgMTc6MzIgIGhhcmRha2VyCiAKICAgICogcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG06Ci0gICAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxOTE0NjQ1OiBmcm9tIHdpbG1lc2o6IGJldHRlciBlbmQgb2YgbWliCi0gICAgIHN1cHBvcnQKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE5MTQ2NDU6IGZyb20gd2lsbWVzajogYmV0dGVyIGVuZCBvZiBtaWIKKyAgIHN1cHBvcnQKIAogMjAwOC0wMy0yMSAxNzoyOCAgaGFyZGFrZXIKIAogICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgotICAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTkxNDY0MzogZnJvbSB3aWxtZXNqOiBmaXggaXNzdWVzIHdpdGgKLSAgICAgZW1iZWRkZWQgcGVybCByZXR1cm5pbmcgMCBiZWluZyByZWNsYXNzaWZpZWQgYXMgYSB3cm9uZyBkYXRhIHR5cGUKLSAgICAgd2hlbiBhbiBpbnQgd29ya3MuCisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxOTE0NjQzOiBmcm9tIHdpbG1lc2o6IGZpeCBpc3N1ZXMgd2l0aAorICAgZW1iZWRkZWQgcGVybCByZXR1cm5pbmcgMCBiZWluZyByZWNsYXNzaWZpZWQgYXMgYSB3cm9uZyBkYXRhIHR5cGUKKyAgIHdoZW4gYW4gaW50IHdvcmtzLgogCiAyMDA4LTAzLTIxIDE3OjIyICBoYXJkYWtlcgogCiAgICAqIGxvY2FsL01ha2VmaWxlLmluOgotICAgICBDSEFOR0VTOiBtaWIyYzogUEFUQ0ggMTkxNDM5ODogZnJvbSB3aWxtZXNqOiBpbnN0YWxsCi0gICAgIG1pYjJjLnBlcmwuY29uZgorCisgICBDSEFOR0VTOiBtaWIyYzogUEFUQ0ggMTkxNDM5ODogZnJvbSB3aWxtZXNqOiBpbnN0YWxsCisgICBtaWIyYy5wZXJsLmNvbmYKIAogMjAwOC0wMy0yMSAxNzowMiAgaGFyZGFrZXIKIAogICAgKiBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbToKLSAgICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE5MTQzOTM6IGZyb20gd2lsbWVzajogcmVnaXN0ZXJBZ2VudCBjYW4KLSAgICAgbm93IGJlIHJ1biBtdWx0aXBsZSB0aW1lcworCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTkxNDM5MzogZnJvbSB3aWxtZXNqOiByZWdpc3RlckFnZW50IGNhbgorICAgbm93IGJlIHJ1biBtdWx0aXBsZSB0aW1lcwogCiAyMDA4LTAzLTIxIDE2OjM1ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYzoKLSAgICAgTkVXUzogc25tcGQ6IFBBVENIOiAxOTA5ODEzOiBmaXggdGFibGVfaXRlcmF0b3IgaGludCB0byBnZXRfZmlyc3QKLSAgICAgd2hlbiBTT1JURUQgZmxhZyBpcyBzZXQKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxOTA5ODEzOiBmaXggdGFibGVfaXRlcmF0b3IgaGludCB0byBnZXRfZmlyc3QKKyAgIHdoZW4gU09SVEVEIGZsYWcgaXMgc2V0CisKKzIwMDgtMDMtMjEgMTY6MjQgIGhhcmRha2VyCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmMsIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIE5FV1M6IHNubXB0cmFwZDogUEFUQ0g6IDE5MDgyODg6IGZyb20gYW5lZGVsOiBJZiBzbm1wdHJhcGQgLWYKKyAgIGludGVycnVwdGVkIHdpdGggY3RybC1DIHJ1biBwZXJsIEVORCBibG9jaworCisyMDA4LTAzLTIxIDE2OjE2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE5MDIxMTM6IGZyb20ganNhZnJhbmVrOiBmaXggZXJyb3IgbG9nIGluCisgICBpbmV0TmV0VG9NZWRpYXRhYmxlCisKKzIwMDgtMDMtMjEgMTY6MTIgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE5MDIxMDU6IGZyb20ganNhZnJhbmVrOiBoaWRlIGFuZCBpbXByb3ZlIGRlYnVnCisgICBsb2cgbWVzc2FnZXMgY3JlYXRlZCBieSBwYXRjaCAxNzA1NTk0CisKKzIwMDgtMDMtMDcgMTU6NDIgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5oOgorCisgICBIQUwtYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhyRlNUYWJsZS4KKworMjAwOC0wMy0wNyAxNTo0MCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cywgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21vdW50cy5oOgorCisgICBJbml0aWFsIEhBTCBpbXBsZW1lbnRhdGlvbiBvZiBGaWxlU3lzdGVtIGluZm9ybWF0aW9uCisKKzIwMDgtMDMtMDcgMTU6MzUgIGR0czEyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENoZWNrIGZvciBnZXR2ZnNzdGF0KCkKKworMjAwOC0wMy0wNyAxNTozNCAgZHRzMTIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTgyMzM4MTogVXNlIGEgc2Vuc2libGUgZGVmYXVsdCBNSUJESVIgcGF0aAorICAgb24gQ3lnd2luL01pbkdXCisgICAoU2hvdWxkIHRoaXMgYmUgYXBwbGllZCB0byBvdGhlciBicmFuY2hlcz8gSWYgc28sIHdoaWNoPykKIAogMjAwOC0wMi0yNyAyMjoxMiAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgotICAgICBGaXggQysrIHN0eWxlIGNvbW1lbnQKKworICAgRml4IEMrKyBzdHlsZSBjb21tZW50CisKKzIwMDgtMDItMjcgMDc6NDkgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmM6CisKKyAgIFRoZSBMVk0gZGlzayBwYXRjaCBpbnRyb2R1Y2VkIGEgbWVtb3J5IGxlYWsuIFRoaXMgcmVtb3ZlcyB0aGUKKyAgIGxlYWsuCisKKzIwMDgtMDItMjYgMjM6MjcgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIG1ha2UgdGhlIHNjcmlwdCBtb3JlIGhpZXJhcmNoaWFsL3N0cnVjdHVyZWQKKworMjAwOC0wMi0yNiAyMTozNiAgbmJhCisKKyAgICogYXBwcy9zbm1wdHJhbnNsYXRlLmM6CisKKyAgIENIQU5HRVM6IEluaXRhbGl6ZSBsb2cgc3Vic3lzdGVtCisKKzIwMDgtMDItMjYgMjE6MzQgIG5iYQorCisgICAqIHNubXBsaWIvcGFyc2UuYzoKKworICAgQ0hBTkdFUzogRml4IGZvciByZWZzIHRvIE9CSkVDVC1HUk9VUCBpbiBhbm90aGVyIE1JQgorCisyMDA4LTAyLTI2IDIxOjIzICBuYmEKKworICAgKiAgbWlicy9ESVNNQU4tRVZFTlQtTUlCLnR4dCwgbWlicy9ESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0LCAgIAorICAgICAgbWlicy9JUC1GT1JXQVJELU1JQi50eHQsIG1pYnMvSVAtTUlCLnR4dCwgICAKKyAgICAgIG1pYnMvSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQsIG1pYnMvTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0LCAgIAorICAgICAgbWlicy9TTk1QLVVTTS1BRVMtTUlCLnR4dCwgbWlicy9TTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQsICAgCisgICAgICBtaWJzL1RSQU5TUE9SVC1BRERSRVNTLU1JQi50eHQsIG1pYnMvVFVOTkVMLU1JQi50eHQ6CisKKyAgIFVwZGF0ZSB0byBhdXRvZXh0cmFjdGVkIG1pYiBmaWxlcyAoYmxhbmsgbGluZSBjaGFubWdlcykKKworMjAwOC0wMi0yNiAyMDo0NiAgbmJhCisKKyAgICogbWlicy9NYWtlZmlsZS5taWIsIG1pYnMvaWFuYWxpc3QsIG1pYnMvcmZjbGlzdDoKKworICAgVXBkYXRlIGZvciBjdXJyZW50bHkgcmVsZWFzZWQgUkZDIE1JQlMKKworMjAwOC0wMi0yNiAyMDo0NSAgbmJhCisKKyAgICogIG1pYnMvSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQi50eHQsICAgCisgICAgICBtaWJzL0lBTkEtTEFOR1VBR0UtTUlCLnR4dCwgbWlicy9JQU5BLVJUUFJPVE8tTUlCLnR4dCwgICAKKyAgICAgIG1pYnMvSUFOQWlmVHlwZS1NSUIudHh0OgorCisgICBVcGRhdGUgSUFOQSBNSUJTIHRvIGN1cnJlbnQgdmVyc2lvbgorCisyMDA4LTAyLTI1IDIyOjIxICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oOgorCisgICBhZGQgbWlzc2luZyAjaW5jbHVkZTxwdGhyZWFkLmg+IGZvciBwdGhyZWFkX211dGV4X3QKKworMjAwOC0wMi0yNSAyMjowNiAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jOgorCisgICBhIGJldHRlciBwb3J0YWJpbGl0eSBmaXgKKworMjAwOC0wMi0yMyAwMDo1OSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxNzA1NTk0OiBmcm9tIGNfdmFydW46IEZpeCB2YXJpb3VzIGFzcGVjdHMgb2YKKyAgIGxpbnV4IGlwQWRkcmVzc1ByZWZpeFRhYmxlIHJlcG9ydGluZy4KIAogMjAwOC0wMi0yMiAyMzo1MiAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTg5NjExODogcGF0Y2ggZnJvbSBqc2FmcmFuZWs6IGZpeCBpZlRhYmxlCi0gICAgIDMyYml0IGNvdW50ZXJzIG9uIGxpbnV4CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTg5NjExODogcGF0Y2ggZnJvbSBqc2FmcmFuZWs6IGZpeCBpZlRhYmxlCisgICAzMmJpdCBjb3VudGVycyBvbiBsaW51eAorCisyMDA4LTAyLTIyIDIzOjQ5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmM6CisKKyAgIHBhdGNoIGZyb20ganNhZnJhbmVrOiBDcmVhdGUgaXB2NlNjb3BlWm9uZUVudHJ5IG9ubHkgZm9yCisgICBsaW5rLWxvY2FsIGFkZHJlc3NlcyBhbmQgb25seSBvbmNlIHBlciBpbnRlcmZhY2UuCiAKIDIwMDgtMDItMjIgMjM6NDQgIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9wYXJzZS5jOgotICAgICBDSEFOR0VTOiBsaWJzbm1wOiBQQVRDSDogMTg5ODIwNDogZnJvbSBNaWtlIFdlc2NvdHQ6IGZpeCBidWcKLSAgICAgMTg5ODE5OCBpbiBwYXJzZS5jIHRvIGF2b2lkIGEgc2VnZmF1bHQgd2hlbiBwYXJzaW5nIGJyb2tlbiBtaWJzLgorCisgICBDSEFOR0VTOiBsaWJzbm1wOiBQQVRDSDogMTg5ODIwNDogZnJvbSBNaWtlIFdlc2NvdHQ6IGZpeCBidWcKKyAgIDE4OTgxOTggaW4gcGFyc2UuYyB0byBhdm9pZCBhIHNlZ2ZhdWx0IHdoZW4gcGFyc2luZyBicm9rZW4gbWlicy4KIAogMjAwOC0wMi0xOCAxMjoxMSAgZHRzMTIKIAogICAgKiBtYW4vbWliX2FwaS4zLmRlZjoKLSAgICAgQ2xhcmlmeSB0aGUgbmVlZCB0byByZXNldCBidWZmZXIgbGVuZ3RoIHdoZW4gY2FsbGluZyAncmVhZF9vYmppZCcKLSAgICAgcmVwZWF0ZWRseS4KKworICAgQ2xhcmlmeSB0aGUgbmVlZCB0byByZXNldCBidWZmZXIgbGVuZ3RoIHdoZW4gY2FsbGluZyAncmVhZF9vYmppZCcKKyAgIHJlcGVhdGVkbHkuCisKKzIwMDgtMDItMTggMTA6MzIgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYzoKKworICAgcG9ydGFiaWxpdHkgZml4CisKKzIwMDgtMDItMTggMDc6MzkgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYzoKKworICAgbWFrZSBzdXJlIHRoYXQgbmV0c25tcF9pcXVlcnlfdXNlcl9zZXNzaW9uIGV0IGFsLiBhcmUgcHJvcGVybHkKKyAgIGRlY2xhcmVkCiAKIDIwMDgtMDItMTcgMTg6MDEgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKLSAgICAgZml4IHR5cG8gaW4gdmFyaWFibGUgbmFtZQorCisgICBmaXggdHlwbyBpbiB2YXJpYWJsZSBuYW1lCiAKIDIwMDgtMDItMTcgMDg6MzggIHRhbmRlcnMKIAogICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgotICAgICBwb3J0YWJpbGl0eSBmaXgKKworICAgcG9ydGFiaWxpdHkgZml4CisKKzIwMDgtMDItMTUgMTc6NDUgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBsb3dlcmVkIGZhaWx1cmUgbWVzc2FnZSB0byBpbnNlcnQgdG8gZGVidWc7IHJlbW92ZWQgQ1ZTIElEIGZyb20KKyAgIHRvcCBvZiBsaW5lCisKKzIwMDgtMDItMTUgMTc6MzkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBkb24ndCBpbnNlcnQgZW1wdHkgZW50cmllcworCisyMDA4LTAyLTE1IDE3OjMxICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgcGF0Y2ggZnJvbSBqc2FmcmFuZSBvbiBpcmM6IG1ha2UgaXB2NiBlbnRyaWVzIHdvcmsgb24gNjQgYml0CisgICBtYWNoaW5lcworCisyMDA4LTAyLTE1IDE2OjI0ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBwYXNzIDEgYXQgYSBuZXcgbWFrZXJlbGVhc2Ugc2NyaXB0OyBjdXJyZW50bHkganVzdCBjb252ZXJ0ZWQgY29kZQorICAgbW9zdGx5CisKKzIwMDgtMDItMTUgMTY6MjIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmM6CisKKyAgIHJlbW92ZSBsaW51eCBjaGVja3MKKworMjAwOC0wMi0xNSAxNTo0NSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIHJlbW92ZSByZWZlcmVuY2VzIHRvIFJEQV9SVEEKKworMjAwOC0wMi0xNSAxNTozNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIGRvbid0IGNvbXBpbGUgaW4gdGhlIGlwdjYgY29kZSBpZiBOREFfUlRBIGlzbid0IGRlZmluZWQKIAogMjAwOC0wMi0xNSAxMzowMCAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6Ci0gICAgIHBvcnRhYmlsaXR5IGZpeAorCisgICBwb3J0YWJpbGl0eSBmaXgKKworMjAwOC0wMi0xNSAwNjoxOSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIG1pbm9yIGJ1ZyB1cGRhdGUgZnJvbSBjX3ZhcnVuCisKKzIwMDgtMDItMTUgMDU6MTMgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE3MDQxMDU6IGZyb20gY192YXJ1bjogQWRkIElQdjYgc3VwcG9ydCB0bworICAgdGhlIGluZXROZXRUb01lZGlhVGFibGUgZm9yIGxpbnV4CisKKzIwMDgtMDItMTUgMDU6MTIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliLmg6CisKKyAgIHJlcXVpcmUgbmV3IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIHRhYmxlCisKKzIwMDgtMDItMTUgMDU6MDAgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9lbnVtcy5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaCwKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmg6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTcxNTQwNTogZnJvbSBjX3ZhcnVuOiBJbXBsZW1lbnQgdGhlCisgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBvbiBsaW51eAogCiAyMDA4LTAyLTE1IDA0OjM5ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L3NubXBkLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcxNjU0ODogZnJvbSBteWFtYXRvOiBGaXggaGVscCBvdXRwdXQgc28KLSAgICAgbm8gc3BhY2UgaXMgcHJpbnRlZCBiZXR3ZWVuIC1EIGFuZCBhcmd1bWVudHMuCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcxNjU0ODogZnJvbSBteWFtYXRvOiBGaXggaGVscCBvdXRwdXQgc28KKyAgIG5vIHNwYWNlIGlzIHByaW50ZWQgYmV0d2VlbiAtRCBhbmQgYXJndW1lbnRzLgorCisyMDA4LTAyLTE1IDA0OjI3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uLmgsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmg6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTcyMzYxMTogZnJvbSBFbWkgWWFuYWdpOiBOZXcgaW1wbGVtZW50YXRpb24KKyAgIG9mIHRoZSBybW9uIGFsYXJtVGFibGUKIAogMjAwOC0wMi0xNSAwMzo0NCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgotICAgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE4OTM0Njg6IGZyb20gZ2tvZW5pZzogZml4ZWQgcmVnaXN0cmF0aW9uIG9mCi0gICAgIE9JRHMgd2l0aCByYW5nZXMKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxODkzNDY4OiBmcm9tIGdrb2VuaWc6IGZpeGVkIHJlZ2lzdHJhdGlvbiBvZgorICAgT0lEcyB3aXRoIHJhbmdlcwogCiAyMDA4LTAyLTE0IDIxOjQwICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6Ci0gICAgIGZpeCB0eXBvIGluIHZhcmlhYmxlIGRlY2xhcmF0aW9uICh1bmJyZWFrcyB0aGUgYnVpbGQgb24gYSBmZXcKLSAgICAgc3lzdGVtcykKKworICAgZml4IHR5cG8gaW4gdmFyaWFibGUgZGVjbGFyYXRpb24gKHVuYnJlYWtzIHRoZSBidWlsZCBvbiBhIGZldworICAgc3lzdGVtcykKIAogMjAwOC0wMi0xNCAwMDoyOSAgaGFyZGFrZXIKIAogICAgKiBDT1BZSU5HOgotICAgICB5ZWFyIHVwZGF0ZSBmb3Igc3BhcnRhCisKKyAgIHllYXIgdXBkYXRlIGZvciBzcGFydGEKIAogMjAwOC0wMi0xMyAyMzozNyAgbWFnZnIKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmM6Ci0gICAgIE5FV1M6IHNubXBsaWI6IENoYW5nZSBDT05UQUlORVJfSU5TRVJUIHRvIG5vdCBkbyBwYXJ0aWFsIGluc2VydHMKLSAgICAgaW4gY29udGFpbmVycyB3aXRoIG11bHRpcGxlIGluZGljZXMgd2hlbiBvbmUgaW5zZXJ0IGZhaWxzLgorCisgICBORVdTOiBzbm1wbGliOiBDaGFuZ2UgQ09OVEFJTkVSX0lOU0VSVCB0byBub3QgZG8gcGFydGlhbCBpbnNlcnRzCisgICBpbiBjb250YWluZXJzIHdpdGggbXVsdGlwbGUgaW5kaWNlcyB3aGVuIG9uZSBpbnNlcnQgZmFpbHMuCiAKIDIwMDgtMDItMTMgMjM6MTEgIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9zbm1wdXNtLmM6Ci0gICAgIEZpeGVkIHRoZSBjcmVhdGVVc2VyIGxpbmUgdG8gc3BlY2lmeSB0aGUgLWUgZmxhZyAocmVzcG9uZGluZyB0byBhCi0gICAgIGNvbXBsYWludCBhYm91dCBpdCBiZSBtaXNzaW5nKQorCisgICBGaXhlZCB0aGUgY3JlYXRlVXNlciBsaW5lIHRvIHNwZWNpZnkgdGhlIC1lIGZsYWcgKHJlc3BvbmRpbmcgdG8gYQorICAgY29tcGxhaW50IGFib3V0IGl0IGJlIG1pc3NpbmcpCisKKzIwMDgtMDItMTMgMTc6NDIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTc3OTU1ODogZnJvbSBicnVtYnM6IEltcGxlbWVudCB0aGUKKyAgIGRpc2tJT0xBMSw1LDEwIG9iamVjdGlvbnMgaW4gdGhlIGRpc2tpby1taWIgdW5kZXIgbGludXgKIAogMjAwOC0wMi0xMyAxNzoxNSAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3ODM3MzM6IFB1dCB0aGUgcGFja2FnZSB2ZXJzaW9uIG51bWJlcgotICAgICBpbnRvIHRoZSBoclNXSW5zdCB0YWJsZSBmb3Igc29sYXJpcy4KKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzgzNzMzOiBQdXQgdGhlIHBhY2thZ2UgdmVyc2lvbiBudW1iZXIKKyAgIGludG8gdGhlIGhyU1dJbnN0IHRhYmxlIGZvciBzb2xhcmlzLgorCisyMDA4LTAyLTEzIDE2OjU4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzgzNDIzOiBmcm9tIGpzYWZyYW5lazogcmV0dXJuIGEgY29ycmVjdAorICAgaXB2NkludGVyZmFjZUlkZW50aWZpZXIgb2YgbG9vcGJhY2sgb24gbGludXgKIAogMjAwOC0wMi0xMyAxNjoxMiAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc4NDc0NzogZnJvbSBqc2FmcmFuZWs6IEZpeCBsb25nIHVzYWdlCi0gICAgIGZvciBpcCBhZHJlc3NlcyBvbiA2NCBiaXQgc3lzdGVtcyBpbiB2YXJpb3VzIE1JQi1JSSB0YWJsZXMuCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzg0NzQ3OiBmcm9tIGpzYWZyYW5lazogRml4IGxvbmcgdXNhZ2UKKyAgIGZvciBpcCBhZHJlc3NlcyBvbiA2NCBiaXQgc3lzdGVtcyBpbiB2YXJpb3VzIE1JQi1JSSB0YWJsZXMuCisKKzIwMDgtMDItMTMgMTY6MDcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaDoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxODA2NTAxOiBmcm9tIGptYWdkZXI6IEFkZCBhIHNubXBfdjN0cmFwCisgICBmdW5jdGlvbiBmb3Igc2VuZGluZyB0cmFwcyB3aXRoIGEgc25tcHYzIGNvbnRleHQKIAogMjAwOC0wMi0xMyAxNjowMiAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4MjYxMDI6IGZyb20ganNhZnJhbmVrOiBzdXBwb3J0IGxvbmdlcgotICAgICBpbnRlcmZhY2UgbmFtZXMgb24gbGludXgKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOgogCi0yMDA4LTAyLTEzIDA5OjIyICB0YW5kZXJzCi0KLSAgICogY29uZmlndXJlOgotICAgICByZXZlcnQgdG8gYXV0b2NvbmYgMi41OSBwZXIgZXhpc3RpbmcgcG9saWN5CisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4MjYxMDI6IGZyb20ganNhZnJhbmVrOiBzdXBwb3J0IGxvbmdlcgorICAgaW50ZXJmYWNlIG5hbWVzIG9uIGxpbnV4CiAKIDIwMDgtMDItMTIgMjM6MjMgIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9taWIuYzoKLSAgICAgQ0hBTkdFUzogbGlic25tcDogUEFUQ0g6IDE4MDc0ODk6IGZpeCBpZ25vcmluZyBvZiBkaXNwbGF5IGhpbnRzLgorCisgICBDSEFOR0VTOiBsaWJzbm1wOiBQQVRDSDogMTgwNzQ4OTogZml4IGlnbm9yaW5nIG9mIGRpc3BsYXkgaGludHMuCisKKzIwMDgtMDItMTIgMjM6MTkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOgorCisgICAKKworMjAwOC0wMi0xMiAyMzoxNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAxODIzNDY1IGZyb20ganNhZnJhbmVrOiBmaXggaWNtcCBjYWNoZQorICAgcmVnaXN0cmF0aW9uCisKKzIwMDgtMDItMTIgMjI6MTYgIGhhcmRha2VyCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmM6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTgyODYwMjogZnJvbSB0Z29oYWQ6IFN1cHBvcnQgaXBEZWZhdWx0VFRMCisgICBhbmQgaXBGb3J3YXJkaW5nIFNFVHMgb24gbGludXgKIAogMjAwOC0wMi0xMiAyMjowOSAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODY2ODIzOiBmcm9tIGpzYWZyYW5lazogdHJ1bmNhdGUgMzIgYml0Ci0gICAgIGNvdW50ZXIgdmFsdWVzIG9uIDY0IGJpdCBtYWNoaW5lcyB0byBhdm9pZCBib2d1cyB3YXJuaW5ncy4KKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODY2ODIzOiBmcm9tIGpzYWZyYW5lazogdHJ1bmNhdGUgMzIgYml0CisgICBjb3VudGVyIHZhbHVlcyBvbiA2NCBiaXQgbWFjaGluZXMgdG8gYXZvaWQgYm9ndXMgd2FybmluZ3MuCiAKIDIwMDgtMDItMTIgMTk6MDUgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLAotICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTg0OTkwMzogZnJvbSBqc2FmcmFuZWs6IGRvIG5vdCBzcGFtIGxvZwotICAgICB3aXRoIGFzc2VydHMgd2hlbiBYRU4gaXMgdXNlZAorICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4NDk5MDM6IGZyb20ganNhZnJhbmVrOiBkbyBub3Qgc3BhbSBsb2cKKyAgIHdpdGggYXNzZXJ0cyB3aGVuIFhFTiBpcyB1c2VkCiAKIDIwMDgtMDItMTIgMTg6NTAgIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9jYWxsYmFjay5jOgotICAgICBDSEFOR0VTOiBsaWJzbm1wOiBQQVRDSDogMTg3NTAyMjogZnJvbSBzZW1fcHJnOiBpbXByb3ZlIGNhbGxiYWNrCi0gICAgIGxvY2tpbmcgbWVjaGFuaXNtcworCisgICBDSEFOR0VTOiBsaWJzbm1wOiBQQVRDSDogMTg3NTAyMjogZnJvbSBzZW1fcHJnOiBpbXByb3ZlIGNhbGxiYWNrCisgICBsb2NraW5nIG1lY2hhbmlzbXMKIAogMjAwOC0wMi0xMiAxNzo0MCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODc5MjYxOiBmcm9tIGFtZXNidXJ5OiBBZGQgaW4gaW5hY3RpdmUKLSAgICAgbWVtb3J5IHRvIHRoZSBjYWNoZWQgcmVwb3J0IGZvciBmcmVlYnNkCiAKLTIwMDgtMDItMTIgMTU6MjIgIGhhcmRha2VyCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4NzkyNjE6IGZyb20gYW1lc2J1cnk6IEFkZCBpbiBpbmFjdGl2ZQorICAgbWVtb3J5IHRvIHRoZSBjYWNoZWQgcmVwb3J0IGZvciBmcmVlYnNkCisKKzIwMDgtMDItMTIgMTU6MzIgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oLCBzbm1wbGliL3NubXB2My5jOgorCisgICBORVdTOiBsaWJzbm1wOiBQYXRjaDogMTg4MjA2OTogZnJvbSBuc2NocmVuazogQWRkIGEgZXhhY3RFbmdpbmVJRAorICAgdG9rZW4gZm9yIHNwZWNpZnlpbmcgYW4gZXhhY3QgU05NUHYzIGVuZ2luZUlEIHRvIHVzZQorCisyMDA4LTAyLTEyIDE1OjE4ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jOgotICAgICBDaGFuZ2Ugc25wcmludGYgcHJpbnQgbGVuZ3RocyB0byBsZW4tMSB0byBsZWF2ZSAwIGluIGZpbmFsCi0gICAgIHBvc2l0aW9uIGZvciBwcmludGluZworCisgICBtaW5vciBjbGVhbnVwcyBmcm9tIHJldmlld2luZyBwYXJ0cyBvZiB0aGUgY29kZQorCisyMDA4LTAyLTEyIDE1OjE3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE4ODI2MjE6IGZyb20ganNhZnJhbmVrOiBBZGQgTFZNIHN1cHBvcnQgdG8KKyAgIHRoZSBwYXJ0aXRpb24gdGFibGUKIAogMjAwOC0wMi0xMSAyMjoyNiAgaGFyZGFrZXIKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgZml4IHF1b3RlZCBzdHJpbmdzIGluIGhlbHAgb3V0cHV0CisKKyAgIGZpeCBxdW90ZWQgc3RyaW5ncyBpbiBoZWxwIG91dHB1dAogCiAyMDA4LTAxLTMwIDE3OjI5ICBoYXJkYWtlcgogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBhZGRlZCB2YWNtX2NvbmYgdG8gZXhpc3RpbmcgY29uZmlndXJlIGZpbGVzIChmb3IgdHJhcGQgdG9vKQorCisgICBhZGRlZCB2YWNtX2NvbmYgdG8gZXhpc3RpbmcgY29uZmlndXJlIGZpbGVzIChmb3IgdHJhcGQgdG9vKQogCiAyMDA4LTAxLTIwIDA3OjU1ICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE4NzIyNjY6IFBFUkxDQyBjaGVjayBmYWlscyBmb3IgQ0Mgd2l0aAotICAgICBvcHRpb25zCisKKyAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE4NzIyNjY6IFBFUkxDQyBjaGVjayBmYWlscyBmb3IgQ0Mgd2l0aAorICAgb3B0aW9ucwogCiAyMDA4LTAxLTE3IDAxOjEzICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oOgotICAgICBmaXggZGVmYXVsdCBtaWJzIHRvIGluY2x1ZGUgdmFjbV9jb25mIHRvbworCisgICBmaXggZGVmYXVsdCBtaWJzIHRvIGluY2x1ZGUgdmFjbV9jb25mIHRvbwogCiAyMDA4LTAxLTE3IDAwOjA5ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODI2MDg4OiBmcm9tIEphbiBTYWZyYW5lazogVXNlIHRoZSByaWdodAotICAgICBpbnRlcmZhY2UgdCByZWFkIHRoZSBuZXRtYXNrCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgyNjA4ODogZnJvbSBKYW4gU2FmcmFuZWs6IFVzZSB0aGUgcmlnaHQKKyAgIGludGVyZmFjZSB0IHJlYWQgdGhlIG5ldG1hc2sKIAogMjAwOC0wMS0xNiAyMTo1NCAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6Ci0gICAgIENIQU5HRVM6IEhhbmRsZSBkZXZpY2UgbmFtZXMgd2l0aCBlbWJlZGRlZCBzcGFjZXMgaW4KLSAgICAgVUNELVNOTVAtTUlCOjpkc2tEZXZpY2UKKworICAgQ0hBTkdFUzogSGFuZGxlIGRldmljZSBuYW1lcyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBpbgorICAgVUNELVNOTVAtTUlCOjpkc2tEZXZpY2UKIAogMjAwOC0wMS0xNiAwMDo0NyAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgyODgzOTogZnJvbSBqc2FmcmFuZWsgdG8gcHJvdmlkZSBiZXR0ZXIKLSAgICAgaGFuZGxpbmcgb2YgZGlza3MgbW91bnRlZCBvbiBwYXRocyB3aXRoIGVtYmVkZGVkIHNwYWNlcworCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4Mjg4Mzk6IGZyb20ganNhZnJhbmVrIHRvIHByb3ZpZGUgYmV0dGVyCisgICBoYW5kbGluZyBvZiBkaXNrcyBtb3VudGVkIG9uIHBhdGhzIHdpdGggZW1iZWRkZWQgc3BhY2VzCiAKIDIwMDgtMDEtMTUgMTY6NDcgIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9kZWZhdWx0X3N0b3JlLmM6Ci0gICAgIGNvdmVyaXR5IGJ1ZyAyMDU6IGRvdWJsZSBjaGVjayBwb2ludGVyIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG51bGwKKworICAgY292ZXJpdHkgYnVnIDIwNTogZG91YmxlIGNoZWNrIHBvaW50ZXIgdGhhdCBzaG91bGQgbmV2ZXIgYmUgbnVsbAorCisyMDA4LTAxLTE0IDIzOjU1ICBtYWdmcgorCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuaDoKKworICAgVXBkYXRlIHRoZSBzbm1wIGFuZCBzeXN0ZW0gbWlicyB0byBiZSBoYW5kbGVyIGJhc2VkCisKKzIwMDgtMDEtMTMgMDA6MDAgIG1hZ2ZyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUywgIAorICAgICAgIGRveHlnZW4uY29uZiwgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCwgc2Vkc2NyaXB0LmluLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKworICAgTGVzc2VuIHRoZSBudW1iZXIgb2YgcGxhY2VzIHRoYXQgbmVlZCB0byBiZSBjaGFuZ2VkIGluIG9yZGVyIHRvCisgICBkbyBhIHJlbGVhc2UuCisgICBDaGFuZ2UgdG8gdXNlIHRoZSBjb25maWd1cmUgdmVyc2lvbiBudW1iZXIgYXMgdGhlIHBhY2thZ2UgdmVyc2lvbgorICAgbnVtYmVyLgogCiAyMDA4LTAxLTA5IDIxOjU4ICBtYWdmcgogCiAgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgotICAgICBEZWxldGUgdW51c2VkIHN0YXRpYyBmdW5jdGlvbnMKKworICAgRGVsZXRlIHVudXNlZCBzdGF0aWMgZnVuY3Rpb25zCiAKIDIwMDgtMDEtMDYgMTM6MDEgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgotICAgICBNYWtlIGVycm9yX3N0cmluZyBwcml2YXRlIGFuZCByZWFkb25seQorCisgICBNYWtlIGVycm9yX3N0cmluZyBwcml2YXRlIGFuZCByZWFkb25seQogCiAyMDA3LTEyLTIyIDE5OjIyICBkdHMxMgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgotICAgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDE4MjYxNzQ6IENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cgd2hlbgotICAgICBwcmludGluZyB2YWx1ZXMuCisKKyAgIENIQU5HRVM6IHBlcmw6IEJVRzogMTgyNjE3NDogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuCisgICBwcmludGluZyB2YWx1ZXMuCiAKIDIwMDctMTItMjEgMjM6MTkgIGR0czEyCiAKICAgICogcGVybC9TTk1QL1NOTVAucG06Ci0gICAgIENIQU5HRVM6IHBlcmw6IEJVRzogMTc0NzczMzogTW9yZSByb2J1c3QgaGFuZGxpbmcgb2YgdW5kZWZpbmVkCi0gICAgIHZhbHVlcy4KLSAgICAgUGF0Y2ggc3VwcGxpZWQgYnkgTWF0dGkgTGlubmFudnVvcmkKKworICAgQ0hBTkdFUzogcGVybDogQlVHOiAxNzQ3NzMzOiBNb3JlIHJvYnVzdCBoYW5kbGluZyBvZiB1bmRlZmluZWQKKyAgIHZhbHVlcy4KKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IE1hdHRpIExpbm5hbnZ1b3JpCiAKIDIwMDctMTItMjEgMjE6MzMgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc0ODIwNjogUHJvdGVjdCBhZ2FpbnN0IGZhaWx1cmVzIHRvIG9wZW4KLSAgICAgL2V0Yy9tdGFiIChvciBlcXVpdikKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc0ODIwNjogUHJvdGVjdCBhZ2FpbnN0IGZhaWx1cmVzIHRvIG9wZW4KKyAgIC9ldGMvbXRhYiAob3IgZXF1aXYpCiAKIDIwMDctMTItMjEgMTg6NDIgIGR0czEyCiAKICAgICogbmV0LXNubXAtY29uZmlnLmluOgotICAgICBCcmluZyBvcmRlciBvZiBhZ2VudCBsaWJyYXJ5IGxpbmtpbmcgaW50byBsaW5lIHdpdGggYWdlbnQKLSAgICAgTWFrZWZpbGUuCi0gICAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgU3RldmUgTWNDYXJ0aHkuCi0gICAgIFFuOiBTaG91bGQgNS4yLnggYW5kIDUuMy54IGFsc28gdXNlIHRoZSBzYW1lIG9yZGVyPwotICAgICAoZm9yIGJvdGggYWdlbnQgTWFrZWZpbGUgYW5kIG5ldC1zbm1wLWNvbmZpZykKKworICAgQnJpbmcgb3JkZXIgb2YgYWdlbnQgbGlicmFyeSBsaW5raW5nIGludG8gbGluZSB3aXRoIGFnZW50CisgICBNYWtlZmlsZS4KKyAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgU3RldmUgTWNDYXJ0aHkuCisgICBRbjogU2hvdWxkIDUuMi54IGFuZCA1LjMueCBhbHNvIHVzZSB0aGUgc2FtZSBvcmRlcj8KKyAgIChmb3IgYm90aCBhZ2VudCBNYWtlZmlsZSBhbmQgbmV0LXNubXAtY29uZmlnKQogCiAyMDA3LTEyLTIxIDEzOjExICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHRyYXBkX2xvZy5jOgotICAgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxODAyODMzOiBFbnN1cmUgc25tcHRyYXBkIGJ1aWxkcyB3aXRoCi0gICAgIC0tZGlzYWJsZS1zbm1wdjEvMmMKKworICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTgwMjgzMzogRW5zdXJlIHNubXB0cmFwZCBidWlsZHMgd2l0aAorICAgLS1kaXNhYmxlLXNubXB2MS8yYwogCiAyMDA3LTEyLTIwIDE2OjI2ICBkdHMxMgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgotICAgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDE4MzQ1Mzk6IENvbnNpc3RlbnQgaGFuZGxpbmcgb2YgT0lEIHBhcnNpbmcuCi0gICAgIEFwcGxpZXMgcGF0Y2ggIzE4MzQ5ODMsIHByb3ZpZGVkIGJ5IERtaXRyeSBLYXJhc2lrCisKKyAgIENIQU5HRVM6IHBlcmw6IEJVRzogMTgzNDUzOTogQ29uc2lzdGVudCBoYW5kbGluZyBvZiBPSUQgcGFyc2luZy4KKyAgIEFwcGxpZXMgcGF0Y2ggIzE4MzQ5ODMsIHByb3ZpZGVkIGJ5IERtaXRyeSBLYXJhc2lrCisKKzIwMDctMTItMjAgMTY6MDUgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBNb3JlIGludGVybmFsIHF1ZXJ5IGRlYnVnZ2luZyBvdXRwdXQuCiAKIDIwMDctMTItMjAgMTQ6MjAgIGR0czEyCiAKICAgICogYWdlbnQvaGVscGVycy93YXRjaGVyLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE4MjIzNjA6IEZpeCBzcGlubG9jayBoZWxwZXIgZXJyb3IgaGFuZGxpbmcuCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE4MjIzNjA6IEZpeCBzcGlubG9jayBoZWxwZXIgZXJyb3IgaGFuZGxpbmcuCiAKIDIwMDctMTItMjAgMTQ6MTggIGR0czEyCiAKICAgICogc25tcGxpYi9hc24xLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMTc5NTg0MDogU2lnbmVkIDMyLWJpdCB0cnVuY2F0aW9uIGxvZ2dlZAotICAgICBhcyBkZWJ1ZyBtZXNzYWdlIHJhdGhlciB0aGVuIGVycm9yLgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDE3OTU4NDA6IFNpZ25lZCAzMi1iaXQgdHJ1bmNhdGlvbiBsb2dnZWQKKyAgIGFzIGRlYnVnIG1lc3NhZ2UgcmF0aGVyIHRoZW4gZXJyb3IuCiAKIDIwMDctMTItMjAgMTQ6MTQgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3OTI4OTA6IGluY2x1ZGUgQ0lGUyBtb3VudHMgd2hlbiBza2lwcGluZwotICAgICByZW1vdGUgZmlsZXN5c3RlbXMKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc5Mjg5MDogaW5jbHVkZSBDSUZTIG1vdW50cyB3aGVuIHNraXBwaW5nCisgICByZW1vdGUgZmlsZXN5c3RlbXMKIAogMjAwNy0xMi0yMCAxNDoxMiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3NzEyMjE6IFJldGFpbiBpZkxhc3RDaGFuZ2UgaW5mb3JtYXRpb24gb24KLSAgICAgZGF0YSByZWxvYWQuCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3NzEyMjE6IFJldGFpbiBpZkxhc3RDaGFuZ2UgaW5mb3JtYXRpb24gb24KKyAgIGRhdGEgcmVsb2FkLgogCiAyMDA3LTEyLTIwIDE0OjA4ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc1ODIxMjogSGFuZGxpbmcgbWlzc2luZyB2YXJpYWJsZSB0eXBlcwotICAgICAoSXBBZGRyZXNzLENvdW50ZXIsT3BhcXVlKQorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzU4MjEyOiBIYW5kbGluZyBtaXNzaW5nIHZhcmlhYmxlIHR5cGVzCisgICAoSXBBZGRyZXNzLENvdW50ZXIsT3BhcXVlKQogCiAyMDA3LTEyLTE5IDIyOjM5ICBtYWdmcgogCi0gICAqIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsCi0gICAgIHNubXBsaWIvY29udGFpbmVyX251bGwuYywgc25tcGxpYi9kYXRhX2xpc3QuYywKLSAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotICAgICBDb3JyZWN0IGRveHlnZW4gd2FybmluZ3MKKyAgICogIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9udWxsLmMsIHNubXBsaWIvZGF0YV9saXN0LmMsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENvcnJlY3QgZG94eWdlbiB3YXJuaW5ncwogCiAyMDA3LTEyLTE5IDIyOjMxICBtYWdmcgogCi0gICAqIHRlc3RpbmcvdGVzdHMvU3YzdmFjbWNvbmZpZywgdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gsIHRlc3RpbmcvdGVzdHMvVDAyMnNubXB2M2dldE1ENSwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1QUVTLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVERVMsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAyNXNubXB2M2dldFNIQURFUywKLSAgICAgdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcCwgdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybSwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDU4YWdlbnRhdXRodHJhcCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlLCB0ZXN0aW5nL3Rlc3RzL1QwNjB0cmFwZHBlcmwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDA2MWFnZW50cGVybCwgdGVzdGluZy90ZXN0cy9UMDY1YWdlbnRleHRlbmQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwLCB0ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbCwgdGVzdGluZy90ZXN0cy9UMTMwc25tcHYxdmFjbWdldCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTMxc25tcHYyY3ZhY21nZXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDE0MHNubXB2MXZhY21nZXRmYWlsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDE1MHNvbGFyaXNob3N0Y3B1LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTFzb2xhcmlzaG9zdGRpc2ssIHRlc3RpbmcvdGVzdHMvVDE1Mmhvc3R1cHRpbWUsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDE1M3NvbGFyaXNzd2FwLCB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGw6Ci0gICAgIFVzZSBORVRTTk1QXy1wcmVmaXhlZCBzeW1ib2xzIHdoZW4gZGVjaWRpbmcgd2hhdCB0ZXN0cyB0byBydW4gYXMKLSAgICAgdGhlIGNvbXBhdCBzeW1ib2xzIGFyZW4ndCBkZWZpbmVkLgorICAgKiAgdGVzdGluZy90ZXN0cy9TdjN2YWNtY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaCwgdGVzdGluZy90ZXN0cy9UMDIyc25tcHYzZ2V0TUQ1LCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1QUVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1REVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI1c25tcHYzZ2V0U0hBREVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAsIHRlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNThhZ2VudGF1dGh0cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlLCB0ZXN0aW5nL3Rlc3RzL1QwNjB0cmFwZHBlcmwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNjFhZ2VudHBlcmwsIHRlc3RpbmcvdGVzdHMvVDA2NWFnZW50ZXh0ZW5kLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAsIHRlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwsIHRlc3RpbmcvdGVzdHMvVDEzMHNubXB2MXZhY21nZXQsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMzFzbm1wdjJjdmFjbWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MHNubXB2MXZhY21nZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUwc29sYXJpc2hvc3RjcHUsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTFzb2xhcmlzaG9zdGRpc2ssIHRlc3RpbmcvdGVzdHMvVDE1Mmhvc3R1cHRpbWUsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTNzb2xhcmlzc3dhcCwgdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbDoKKworICAgVXNlIE5FVFNOTVBfLXByZWZpeGVkIHN5bWJvbHMgd2hlbiBkZWNpZGluZyB3aGF0IHRlc3RzIHRvIHJ1biBhcworICAgdGhlIGNvbXBhdCBzeW1ib2xzIGFyZW4ndCBkZWZpbmVkLgogCiAyMDA3LTEyLTE5IDIyOjA2ICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLSAgICAgQlVHIDE4MzE1Njg6IHN0cmR1cCBtaWdodCBmYWlsIGFuZCByZXR1cm4gTlVMTCAtIHRha2UgY2FyZSBvZiBpdAotICAgICBpbiB0aGlzIGNhc2UgYXQgbGVhc3QuCisKKyAgIEJVRyAxODMxNTY4OiBzdHJkdXAgbWlnaHQgZmFpbCBhbmQgcmV0dXJuIE5VTEwgLSB0YWtlIGNhcmUgb2YgaXQKKyAgIGluIHRoaXMgY2FzZSBhdCBsZWFzdC4KIAogMjAwNy0xMi0xOSAyMTo0OSAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYywgc25tcGxpYi9zbm1wX2FwaS5jOgotICAgICBCVUcgMTgyNDg4MzogUmVtb3ZlIG1lbW9yeSBsZWFrCisKKyAgIEJVRyAxODI0ODgzOiBSZW1vdmUgbWVtb3J5IGxlYWsKIAogMjAwNy0xMi0xOSAyMDo0NiAgbWFnZnIKIAogICAgKiBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYzoKLSAgICAgQ0hBTkdFUzogQlVHOiAxODUxMDQ3OiBEbyBub3QgdHJ5IHRvIGRvIG1vcmUgaGFuZGxpbmcgb2YgYSB2YWx1ZQotICAgICBvbmNlIGl0IGlzIGZvdW5kIHRvIGJlIGNvcnJ1cHQgYnkgdGhlIHdhdGNoZXIgaGVscGVyLCB0aHVzCi0gICAgIGF2b2lkaW5nIGNvZGUgdGhhdCBjb3VudHMgb24gZ2V0dGluZyB0aGUgcmlnaHQgdHlwZS4gVGhpcyBidWcgd2FzCi0gICAgIGZvdW5kIGJ5IENoYXJsaWUgTWlsbGVyLCBJbmRlcGVuZGVudCBTZWN1cml0eSBFdmFsdWF0b3JzLgorCisgICBDSEFOR0VTOiBCVUc6IDE4NTEwNDc6IERvIG5vdCB0cnkgdG8gZG8gbW9yZSBoYW5kbGluZyBvZiBhIHZhbHVlCisgICBvbmNlIGl0IGlzIGZvdW5kIHRvIGJlIGNvcnJ1cHQgYnkgdGhlIHdhdGNoZXIgaGVscGVyLCB0aHVzCisgICBhdm9pZGluZyBjb2RlIHRoYXQgY291bnRzIG9uIGdldHRpbmcgdGhlIHJpZ2h0IHR5cGUuIFRoaXMgYnVnIHdhcworICAgZm91bmQgYnkgQ2hhcmxpZSBNaWxsZXIsIEluZGVwZW5kZW50IFNlY3VyaXR5IEV2YWx1YXRvcnMuCiAKIDIwMDctMTEtMjcgMDk6NTYgIGR0czEyCiAKICAgICogbWFuL3NubXB0cmFwZC44LmRlZjoKLSAgICAgQ2xhcmlmeSB1c2Ugb2YgdGhlIC1BIChsb2cgYXBwZW5kKSBvcHRpb24uCisKKyAgIENsYXJpZnkgdXNlIG9mIHRoZSAtQSAobG9nIGFwcGVuZCkgb3B0aW9uLgogCiAyMDA3LTExLTIyIDE1OjQyICByc3RvcnkKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYzoKLSAgICAgY2hlY2sgcmVxdWVzdCwgbm90IHJlcXVlc3RzLiByZXBvcnRlZCBieSB1bGltIG9uIGlyYwogCi0yMDA3LTExLTIyIDE1OjE2ICByc3RvcnkKKyAgIGNoZWNrIHJlcXVlc3QsIG5vdCByZXF1ZXN0cy4gcmVwb3J0ZWQgYnkgdWxpbSBvbiBpcmMKKworMjAwNy0xMS0yMiAxNToxNyAgcnN0b3J5CiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmM6Ci0gICAgIGNoZWNrIHJlcXVlc3QsIG5vdCByZXF1ZXN0cy4gcmVwb3J0ZWQgYnkgdWxpbSBvbiBpcmMKKworICAgY2hlY2sgcmVxdWVzdCwgbm90IHJlcXVlc3RzLiByZXBvcnRlZCBieSB1bGltIG9uIGlyYwogCiAyMDA3LTExLTE5IDIxOjM0ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jOgotICAgICBDSEFOR0VTOiBTb2xhcmlzOiBQQVRDSDogMTgzNDY5OTogZnJvbSBhcGVyc3NvbjogRml4IDE4MzMyOTQ6Ci0gICAgIERMUEkgcHJvYmxlbXMgb24gU29sYXJpcyAyLjYKKworICAgQ0hBTkdFUzogU29sYXJpczogUEFUQ0g6IDE4MzQ2OTk6IGZyb20gYXBlcnNzb246IEZpeCAxODMzMjk0OgorICAgRExQSSBwcm9ibGVtcyBvbiBTb2xhcmlzIDIuNgorCisyMDA3LTExLTE3IDE2OjI2ICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGQ6IFVzZSB0aGUgd29ya2VyIGhlbHBlcnMgZnJvbSB0aGUKKyAgIHJlZ2lzdGVyXypfaW5zdGFuY2UgaGVscGVycyBhbmQgc2NoZWR1bGUgdGhlIGluc3RhbmNlIGhlbHBlcnMgZm9yCisgICByZW1vdmFsIGluIDUuNgorCisyMDA3LTExLTE0IDEyOjIxICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuaDoKKworICAgU3VwcG9ydCB2MyBsbXNlbnNvcnMgQVBJLgorCisyMDA3LTExLTE0IDEyOjE5ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5jOgorCisgICBGaXggbWlzbGVhZGluZyBkZWJ1ZyBvdXRwdXQgbWVzc2FnZS4KKworMjAwNy0xMS0xMyAxMzo1OSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg6CisKKyAgIFByZWxpbWluYXJ5IHJlLXdvcmtpbmcgb2YgdGhlIExNLVNFTlNPUlMtTUlCLCB0byBzZXBhcmF0ZSBvdXQKKyAgIHRoZSBzZW5zb3IgaGFyZHdhcmUgcHJvY2Vzc2luZyBmcm9tIHRoZSBNSUIgdGFibGVzIHRoZW1zZWx2ZXMuCiAKIDIwMDctMTEtMDggMjM6MTcgIHRhbmRlcnMKIAotICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6Ci0gICAgIENIQU5HRVM6IFNvbGFyaXM6IFBBVENIOiAxODI0MTk2OiB7aWZPcGVyU3RhdHVzLGlwQWRFbnRJZkluZGV4fQotICAgICByZXBvcnRlZCBpbmNvcnJlY3RseQotICAgICBQYXRjaCBzdXBwbGllZCBieSBBbmRlcnMgUGVyc3Nvbi4gRml4ZXMgQnVncyAxODIyMjc1IGFuZCAxODE5MTg5LgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6CisKKyAgIENIQU5HRVM6IFNvbGFyaXM6IFBBVENIOiAxODI0MTk2OiB7aWZPcGVyU3RhdHVzLGlwQWRFbnRJZkluZGV4fQorICAgcmVwb3J0ZWQgaW5jb3JyZWN0bHkKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IEFuZGVycyBQZXJzc29uLiBGaXhlcyBCdWdzIDE4MjIyNzUgYW5kIDE4MTkxODkuCisKKzIwMDctMTAtMjYgMjE6MjIgIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBhZ2VudC9taWJncm91cC9leGFtcGxlcy93YXRjaGVkLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaDoKKworICAgTkVXUzogc25tcGQ6IEFkZGVkIHN1cHBvcnQgZm9yIGEgdXNlciBwcm92aWRlZCBsZW5ndGggdmFyaWFibGUKKyAgIGFuZCBDIHN0cmluZyB2YWx1ZXMgdG8gdGhlIHdhdGNoZXIgaGVscGVyLgorCisyMDA3LTEwLTE2IDIyOjM5ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wU1RERG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBVc2UgJXAgdG8gcHJpbnQgcG9pbnRlcnMuIERvIG5vdCB1c2UgJXAgdG8gcHJpbnQgbnVtYmVycy4KKworMjAwNy0xMC0xNiAwNzozMSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE1ha2UgdGhlIGxpYnJhcnkgYnVpbGRhYmxlIGFzIEMgYWdhaW4uCiAKIDIwMDctMTAtMTYgMDc6MTcgIG1hZ2ZyCiAKLSAgICogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9oZWxwZXJzL3NjYWxhci5jLAotICAgICBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKLSAgICAgQ0hBTkdFUzogbWlzYzogYXZvaWQgY2FsbGluZyBkZWJ1ZyBtYWNyb3Mgd2l0aCB0b28gbWFueQotICAgICBhcmd1bWVudHMuCisgICAqICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L2hlbHBlcnMvc2NhbGFyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIENIQU5HRVM6IG1pc2M6IGF2b2lkIGNhbGxpbmcgZGVidWcgbWFjcm9zIHdpdGggdG9vIG1hbnkKKyAgIGFyZ3VtZW50cy4KIAogMjAwNy0xMC0xNiAwNjoxOCAgbWFnZnIKIAotICAgKiBzbm1wbGliL3NubXBfc2VydmljZS5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6Ci0gICAgIE1ha2UgdGhlIGxpYnJhcnkgYnVpbGRhYmxlIGFzIEMrKyBhZ2Fpbi4KKyAgICogIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX3NlcnZpY2UuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgTWFrZSB0aGUgbGlicmFyeSBidWlsZGFibGUgYXMgQysrIGFnYWluLgorCisyMDA3LTEwLTE1IDIwOjUyICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaCwgICAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIGRlY2xhcmUgbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQ7IGluY2x1ZGUgaGVhZGVyIGZvciBpdAorICAgYXMgbmVlZGVkCiAKIDIwMDctMTAtMTUgMjA6MzkgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jOgotICAgICBDb252ZXJ0IGFuIGluZmluaXRlIGxvb3AgdG8gYSBmaW5pdGUgb25lLgotICAgICBSZW1vdmUgYW4gdW51c2VkIHZhcmlhYmxlLgorCisgICBDb252ZXJ0IGFuIGluZmluaXRlIGxvb3AgdG8gYSBmaW5pdGUgb25lLgorICAgUmVtb3ZlIGFuIHVudXNlZCB2YXJpYWJsZS4KIAogMjAwNy0xMC0xNCAyMjoxMCAgbWFnZnIKIAotICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jLAotICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jOgotICAgICBDSEFOR0VTOiBtaXNjOiBBdm9pZCBjYWxsaW5nIGRlYnVnIG1hY3JvcyB3aXRoIHRvbyBmZXcgYXJndW1lbnRzLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYzoKKworICAgQ0hBTkdFUzogbWlzYzogQXZvaWQgY2FsbGluZyBkZWJ1ZyBtYWNyb3Mgd2l0aCB0b28gZmV3IGFyZ3VtZW50cy4KIAogMjAwNy0xMC0xNCAyMDo1MSAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE4MTE0Njk6IHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgoKQotICAgICByZWFkcyBwYXN0IG1hbGxvYydkIGJ1ZmZlcgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTgxMTQ2OTogcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aCgpCisgICByZWFkcyBwYXN0IG1hbGxvYydkIGJ1ZmZlcgogCiAyMDA3LTEwLTE0IDIwOjQxICB0YW5kZXJzCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6Ci0gICAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxODExNDYzOiBwZXJsIGFzeW5jIGNhbGxiYWNrIGNvcmVkdW1wCi0gICAgIENIQU5HRVM6IHBlcmw6IEJVRzogMTYwNjA2MjogcGVybCBidWxrd2FsayAoYXN5bmMpIGNvcmVkdW1wCisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxODExNDYzOiBwZXJsIGFzeW5jIGNhbGxiYWNrIGNvcmVkdW1wCisgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDE2MDYwNjI6IHBlcmwgYnVsa3dhbGsgKGFzeW5jKSBjb3JlZHVtcAogCiAyMDA3LTEwLTE0IDE5OjA3ICB0YW5kZXJzCiAKICAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE4MDYzMzY6IGZpeCAtTFMgb3B0aW9uIHBhcnNpbmcKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE4MDYzMzY6IGZpeCAtTFMgb3B0aW9uIHBhcnNpbmcKIAogMjAwNy0xMC0xNCAxMjoxMiAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmM6Ci0gICAgIGZpeCBjb21tZW50CisKKyAgIGZpeCBjb21tZW50CiAKIDIwMDctMTAtMTMgMjM6MjggIHRhbmRlcnMKIAogICAgKiB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdDoKLSAgICAgQ0hBTkdFUzogdGVzdDogZW5oYW5jZSBzbm1wbmV0c3RhdCB0ZXN0IHRvIGNoZWNrIHRjcFRhYmxlIGluIFRDUAotICAgICBtb2RlCisKKyAgIENIQU5HRVM6IHRlc3Q6IGVuaGFuY2Ugc25tcG5ldHN0YXQgdGVzdCB0byBjaGVjayB0Y3BUYWJsZSBpbiBUQ1AKKyAgIG1vZGUKIAogMjAwNy0xMC0xMyAyMjoyOCAgdGFuZGVycwogCi0gICAqIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaDoKLSAgICAgQ0hBTkdFUzogU29sYXJpczogQlVHOiAxODEwODE0OiB0Y3BUYWJsZSBtaXNzaW5nIGVudHJpZXMgYW5kCi0gICAgIHdyb25nIHBvcnRzCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oOgorCisgICBDSEFOR0VTOiBTb2xhcmlzOiBCVUc6IDE4MTA4MTQ6IHRjcFRhYmxlIG1pc3NpbmcgZW50cmllcyBhbmQKKyAgIHdyb25nIHBvcnRzCiAKIDIwMDctMTAtMTIgMjE6NDYgIHRhbmRlcnMKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmg6Ci0gICAgIENIQU5HRVM6IFNvbGFyaXM6ICNkZWZpbmUgTkVXX01JQl9DT01QTElBTlQgdG8gc3VwcG9ydCBTb2xhcmlzCi0gICAgIDEwVTQrCisKKyAgIENIQU5HRVM6IFNvbGFyaXM6ICNkZWZpbmUgTkVXX01JQl9DT01QTElBTlQgdG8gc3VwcG9ydCBTb2xhcmlzCisgICAxMFU0KwogCiAyMDA3LTEwLTExIDIwOjQ2ICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgbGVhayBtZW1vcnkgd2hlbmV2ZXIgYW4gdWRwIGFkZHJlc3MgaXMKLSAgICAgZm9ybWF0dGVkLgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgbGVhayBtZW1vcnkgd2hlbmV2ZXIgYW4gdWRwIGFkZHJlc3MgaXMKKyAgIGZvcm1hdHRlZC4KKworMjAwNy0xMC0wMyAwMTowMiAgYWxleF9iCisKKyAgICogIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgd2luMzIvZGlzdC9SRUFETUUudHh0LCAgIAorICAgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvQWRkMlBhdGgubnNpLCAgIAorICAgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOgorCisgICAtRml4IGZvciBidWcgMTc2ODc5Ny4gTlNJUyBJbnN0YWxsZXIgc2NyaXB0IG5vdyB3YXJucyB0aGUgdXNlciBpZgorICAgdGhlIFBBVEgKKyAgIGlzID4gMTAyNCBhcyBOU0lTIGNhbiBub3QgaGFuZGxlIHZhcmlhYmxlcyBsYXJnZXIgdGhhbiAxMDI0LgorICAgLVVwZGF0ZXMgdG8gYnVpbGQgaW5zdHJ1Y3Rpb25zLgogCiAyMDA3LTA5LTMwIDIwOjU5ICBtYWdmcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaCwgc25tcGxpYi9zbm1wX2FwaS5jLAotICAgICBzbm1wbGliL3NubXBfc2VydmljZS5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6Ci0gICAgIENIQU5HRVM6IEJVRzogMTgwMTgzNTogQWRkZWQgdGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBkZWZhdWx0Ci0gICAgIHRyYW5zcG9ydHMgZm9yIGFuIGFwcGxpY2F0aW9uLiBPbiBvcGVuIHRoZSBkaWZmZXJlbnQgdHJhbnNwb3J0cwotICAgICB3aWxsIGJlIHRyaWVkIGluIG9yZGVyLiBBcyBhIGNvbnNlcXVlbmNlIHNubXAgYW5kIHNubXB0cmFwIG5vdwotICAgICB3aWxsIHRyeSBmaXJzdCB1ZHAgYW5kIHRoZW4gdWRwNiBhbmQgYWdlbnR4IHdpbCB0cnkgZmlyc3QgdW5peAotICAgICBhbmQgdGhlbiB0Y3AuCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfc2VydmljZS5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIENIQU5HRVM6IEJVRzogMTgwMTgzNTogQWRkZWQgdGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBkZWZhdWx0CisgICB0cmFuc3BvcnRzIGZvciBhbiBhcHBsaWNhdGlvbi4gT24gb3BlbiB0aGUgZGlmZmVyZW50IHRyYW5zcG9ydHMKKyAgIHdpbGwgYmUgdHJpZWQgaW4gb3JkZXIuIEFzIGEgY29uc2VxdWVuY2Ugc25tcCBhbmQgc25tcHRyYXAgbm93CisgICB3aWxsIHRyeSBmaXJzdCB1ZHAgYW5kIHRoZW4gdWRwNiBhbmQgYWdlbnR4IHdpbCB0cnkgZmlyc3QgdW5peAorICAgYW5kIHRoZW4gdGNwLgogCiAyMDA3LTA5LTI5IDEzOjEwICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IHRyeSB0byBsb29rIHVwIGVtcHR5IHN0cmluZ3MgYXMKLSAgICAgaG9zdG5hbWVzIGZvciBJUHY2Ci0gICAgIEFkZGl0aW5hbGx5LCBwcmludCB3aGF0IHN0cmluZyBmaWxlZCB0byByZXNvbHZlIHVzaW5nIGdldGFkZHJpbmZvCi0gICAgIGZvciBJUHY2CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCB0cnkgdG8gbG9vayB1cCBlbXB0eSBzdHJpbmdzIGFzCisgICBob3N0bmFtZXMgZm9yIElQdjYKKyAgIEFkZGl0aW5hbGx5LCBwcmludCB3aGF0IHN0cmluZyBmaWxlZCB0byByZXNvbHZlIHVzaW5nIGdldGFkZHJpbmZvCisgICBmb3IgSVB2NgorCisyMDA3LTA5LTI5IDA2OjI2ICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgwNDQ0NTogZnJvbSBhcGVyc3NvbjogSGlnaCBvcmRlciBiaXRzIG9mCisgICBIQ0luT2N0ZXRzIG5vdCBzZXQgb24gU29sYXJpcwogCiAyMDA3LTA5LTI0IDIwOjQzICBoYXJkYWtlcgogCiAgICAqIENPUFlJTkc6Ci0gICAgIHllYXIgdXBkYXRlCisKKyAgIHllYXIgdXBkYXRlCisKKzIwMDctMDktMjMgMDY6MDMgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBmaXggI2VsaWYKKworMjAwNy0wOS0yMSAyMjowNCAgdGFuZGVycworCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGF0dGVtcHQgdG8gZml4IGJ1aWxkIGZvciBTb2xhcmlzL0FJWC9IUC1VWAorICAgYnJva2VuIGJ5IHIxNjY4NAogCiAyMDA3LTA5LTIwIDIxOjU1ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NDY4MzE6IGZyb20gY3VubmlqZDogZml4IHByb2Nlc3MKLSAgICAgY2hlY2tpbmcgcmFjZQotICAgICBjb25kaXRpb24gdW5kZXIgTGludXggYW5kIHBsYXRmb3JtICNpZmRlZnMKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzQ2ODMxOiBmcm9tIGN1bm5pamQ6IGZpeCBwcm9jZXNzCisgICBjaGVja2luZyByYWNlCisgICBjb25kaXRpb24gdW5kZXIgTGludXggYW5kIHBsYXRmb3JtICNpZmRlZnMKIAogMjAwNy0wOS0xOSAyMTowOSAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IENvdmVyaXR5ICMxODM6IGZpeCBtZW1vcnkgbGVhayBpZgotICAgICBJUF9QS1RJTkZPIGZhaWxzCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogQ292ZXJpdHkgIzE4MzogZml4IG1lbW9yeSBsZWFrIGlmCisgICBJUF9QS1RJTkZPIGZhaWxzCisKKzIwMDctMDktMTkgMTk6NTcgIGR0czEyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgRml4IG1pc251bWJlcmluZ3Mgb2Ygc3RlcHMuCisgICBJdCBpcyAqc28qIGRpZmZpY3VsdCB0byBmaW5kIHByb3Blcmx5IG51bWVyYXRlIHN0YWZmIHRoZXNlCisgICBkYXlzLi4uLgogCiAyMDA3LTA5LTE2IDA5OjUxICBtYWdmcgogCiAgICAqIGxvY2FsL21pYjJjLXVwZGF0ZToKLSAgICAgUmVtb3ZlIGJhc2hpc21zLiBUaGlzIGlzIG5ldGJzZCBwYXRjaC1ldCBmcm9tIGJ1ZyAxNzQ1NDA0LgorCisgICBSZW1vdmUgYmFzaGlzbXMuIFRoaXMgaXMgbmV0YnNkIHBhdGNoLWV0IGZyb20gYnVnIDE3NDU0MDQuCiAKIDIwMDctMDktMTYgMDk6NDUgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuYzoKLSAgICAgVXNlIGNvbnN0IGNoYXIqIGZvciB0ZW1wb3JhcnkgY29uc3RhbnQgc3RyaW5nIHZhcmlhYmxlLiBUaGlzIGlzCi0gICAgIG5ldGJzZCBwYXRjaC1lYSBmcm9tIGJ1ZyAxNzQ1NDA0LgorCisgICBVc2UgY29uc3QgY2hhciogZm9yIHRlbXBvcmFyeSBjb25zdGFudCBzdHJpbmcgdmFyaWFibGUuIFRoaXMgaXMKKyAgIG5ldGJzZCBwYXRjaC1lYSBmcm9tIGJ1ZyAxNzQ1NDA0LgogCiAyMDA3LTA5LTE2IDA5OjQwICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLSAgICAgVXNlIHRoZSBuYXR1cmFsIHR5cGUgb2YgaW5fYWRkcl90J3MgZm9yIGNvbXBhcmlzaW9ucy4gVGhpcyBpcwotICAgICBuZXRic2QgcGF0Y2gtZWEgZnJvbSBidWcgMTc0NTQwNC4KKworICAgVXNlIHRoZSBuYXR1cmFsIHR5cGUgb2YgaW5fYWRkcl90J3MgZm9yIGNvbXBhcmlzaW9ucy4gVGhpcyBpcworICAgbmV0YnNkIHBhdGNoLWVhIGZyb20gYnVnIDE3NDU0MDQuCiAKIDIwMDctMDktMTYgMDc6MDYgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jOgotICAgICBDSEFOR0VTOiBCVUc6IDE3OTM1NDU6IFRha2UgdGhlIG5hbWUgZnJvbSB0aGUgc29ja2FkZHJfdW4gaW4KLSAgICAgb3JkZXIgdG8gYXZvaWQgdHJhbnNwb3J0IHNwZWNpZmllcnMgYW5kIG90aGVyIGRlY29yYXRpb25zLgogCi0yMDA3LTA5LTE0IDE0OjQ0ICBkdHMxMgorICAgQ0hBTkdFUzogQlVHOiAxNzkzNTQ1OiBUYWtlIHRoZSBuYW1lIGZyb20gdGhlIHNvY2thZGRyX3VuIGluCisgICBvcmRlciB0byBhdm9pZCB0cmFuc3BvcnQgc3BlY2lmaWVycyBhbmQgb3RoZXIgZGVjb3JhdGlvbnMuCisKKzIwMDctMDktMTQgMTM6MTggIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaDoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBoZWFkZXIgZm9yIHN3cnVuIHJld3JpdGUKKworMjAwNy0wOS0xNCAxMzoxNiAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIGFkZCB1dGlsaXR5IG1hY3JvCisgICAtIGFjdGl2YXRlIG5ldyBob3N0IHJlc291cmNlIHJld3JpdGVzCisKKzIwMDctMDktMTQgMTM6MTMgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QuaDoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBjb25maWdfcmVxdWlyZSBmb3IgbmV3IHJld3JpdGVzLCBpZiBlbmFibGVkCisKKzIwMDctMDktMTQgMTM6MTEgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5jOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIGFkZC9maXggZGlzay9wYXJ0aXRpb24gdGFibGVzIG9uIGRhcndpbgorCisyMDA3LTA5LTE0IDEzOjA5ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9kYXJ3aW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaDoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBhZGQgaHJTV0luc3RhbGxlZFRhYmxlIGZvciBkYXJ3aW4KKworMjAwNy0wOS0xNCAwODo0NCAgZHRzMTIKIAogICAgKiBkaXN0L21ha2VyZWxlYXNlOgotICAgICBTeW5jaCB3aXRoIG1haW4gdHJ1bmsgcmVsZWFzZSBzY3JpcHQuCisKKyAgIFByb3RlY3QgYWdhaW5zdCB1bmV4cGVjdGVkIGNvbW1hbmQgYXJndW1lbnRzLgorCisyMDA3LTA5LTE0IDA4OjAwICBkdHMxMgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIERvY3VtZW50IHVzZSBvZiAic3ZuIGV4cG9ydCIgcmF0aGVyIHRoYW4gInN2biBjaGVja291dCIuCisgICBDb3ZlciBnZW5lcmF0aW9uIG9mIHRoZSB6aXAgYXJjaGl2ZSBhcyB3ZWxsIGFzIHRoZSB0YXJiYWxsLgogCiAyMDA3LTA5LTEzIDIxOjI1ICB0YW5kZXJzCiAKICAgICogUkVBRE1FOgotICAgICBkcm9wIG9ic29sZXRlIG1pcnJvcnMKKworICAgZHJvcCBvYnNvbGV0ZSBtaXJyb3JzCisKKzIwMDctMDktMTMgMTc6MjkgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9kYXJ3aW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuaDoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBob3N0IHJlc291cmNlcyBTV1J1biBhbmQgU1dSdW5QZXJmIFRhYmxlIGZvciBkYXJ3aW45CisKKzIwMDctMDktMTMgMTc6MjIgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgaW4gcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucworCisyMDA3LTA5LTEzIDE3OjE5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3N5c3RlbS5jOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIGZvciBkYXJ3aW45LCByZXhlYyBhZnRlciBmb3JrIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc29tZSBtYWNoCisgICBjYWxscworCisyMDA3LTA5LTEyIDE4OjUxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBuZXcgdXRpbGl0eSBmdW5jdGlvbiB0byByZWFkIGEgZGlyZWN0b3J5IGhpZXJhcmN5IGludG8gYQorICAgY29udGFpbmVyCisKKzIwMDctMDktMTIgMTc6NTUgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBuZXcgc3RyaW5nIGNvbXBhcmUgY2FsbGJhY2sKKworMjAwNy0wOS0xMiAxNzo1MyAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmg6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gbmV3IG5ldHNubXBfY2FjaGVfZnJlZSBmdW5jdGlvbgorCisyMDA3LTA5LTEyIDE3OjQ2ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgYWRkIG1pc3NpbmcgbmV3bGluZSBpbiBkZWJ1ZyBtc2cKKworMjAwNy0wOS0xMiAxNzo0MiAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmY6CisKKyAgIFBhdGNoZXMgZnJvbSBBcHBsZQorICAgLSBhZGQgb3B0aW9uYWwgY2FjaGUKKyAgIC0gY2hlY2svaGFuZGxlIGVycm9ycyBmb3IgYWxsIGZ1bmN0aW9ucyBpbiBpbml0IGZ1bmMKKyAgIC0gdHlwZWRlZiBnZW5lcmF0ZWQgc3RydWN0CisgICAtIHNraXAgcHJvY2Vzc2VkIHJlcXVlc3RzCisgICAtIGNoZWNrIGZvciBudWxsIHdoZW4gZXh0cmFjdGluZyByb3cKKworMjAwNy0wOS0xMiAxNzozNSAgcnN0b3J5CisKKyAgICogQ09QWUlORzoKKworICAgYWRkIG5ldyBjb3B5cmlnaHQvY29udHJpYnV0b3IKKworMjAwNy0wOS0wNSAyMDoxMiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmM6CisKKyAgIENvbWJpbmUgc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXN7bG9jLGNvbixuYW1lfSBpbnRvIG9uZSBmdW5jdGlvbgorICAgc2luY2UgdGhleSBhbGwgZG8gdGhlIHNhbWUgdGhpbmcKIAogMjAwNy0wOC0yNSAxNDoyNCAgbWFnZnIKIAotICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaDoKLSAgICAgTWFrZSBtb3N0IG9mIG5vdGlmaWNhdGlvbl9sb2cgc3RhdGljLiBNaW5pbWl6ZSB0aGUgaGVhZGVyIGZpbGUuCisgICAqICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmg6CisKKyAgIE1ha2UgbW9zdCBvZiBub3RpZmljYXRpb25fbG9nIHN0YXRpYy4gTWluaW1pemUgdGhlIGhlYWRlciBmaWxlLgogCiAyMDA3LTA4LTIyIDIxOjU2ICB0YW5kZXJzCiAKICAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKLSAgICAgTkVXUzogYWdlbnQ6IHN1cHByZXNzIGFubm95aW5nICJyZWdpc3RyYXRpb24gIT0gZHVwbGljYXRlIgotICAgICB3YXJuaW5nIGZvciByb290IG9pZHMKLSAgICAgKG90aGVyd2lzZSwgeW91J2xsIGdldCB0aGlzIG1lc3NhZ2Ugb24gYWxtb3N0IGV2ZXJ5IHN0YXJ0dXApCisKKyAgIE5FV1M6IGFnZW50OiBzdXBwcmVzcyBhbm5veWluZyAicmVnaXN0cmF0aW9uICE9IGR1cGxpY2F0ZSIKKyAgIHdhcm5pbmcgZm9yIHJvb3Qgb2lkcworICAgKG90aGVyd2lzZSwgeW91J2xsIGdldCB0aGlzIG1lc3NhZ2Ugb24gYWxtb3N0IGV2ZXJ5IHN0YXJ0dXApCiAKIDIwMDctMDgtMjAgMDg6MDYgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6Ci0gICAgIE5FV1M6IHNubXBsaWI6IGZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHNwcmludGYgZm9yCi0gICAgIFVEUC9JUHY2CiAKLTIwMDctMDgtMTcgMDk6MDggIGR0czEyCisgICBORVdTOiBzbm1wbGliOiBmaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBzcHJpbnRmIGZvcgorICAgVURQL0lQdjYKKworMjAwNy0wOC0xNyAwOToxMCAgZHRzMTIKIAogICAgKiBGQVE6Ci0gICAgIFN5bmNoIHdpdGggbWFpbiBkZXZlbG9wbWVudCAoYW5kIG9uLWxpbmUpIEZBUSB0ZXh0LgorCisgICBTdWJ2ZXJzaW9uLCBub3QgQ1ZTLgogCiAyMDA3LTA4LTE3IDA4OjU5ICBkdHMxMgogCiAgICAqIEZBUToKLSAgICAgQ2xhcmlmeSBoYW5kbGluZyBvZiB1bmtub3duIGNvbW11bml0aWVzCisKKyAgIENsYXJpZnkgaGFuZGxpbmcgb2YgdW5rbm93biBjb21tdW5pdGllcwogCiAyMDA3LTA4LTE2IDE1OjM2ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgotICAgICBEb24ndCBqdXN0IHJlcG9ydCB0aGUgcHJvYmxlbSAtIGl0IG1pZ2h0IGJlIHNlbnNpYmxlIHRvIGF2b2lkCi0gICAgIGNyYXNoaW5nIHRoZSBhZ2VudCBhcyB3ZWxsIQorCisgICBEb24ndCBqdXN0IHJlcG9ydCB0aGUgcHJvYmxlbSAtIGl0IG1pZ2h0IGJlIHNlbnNpYmxlIHRvIGF2b2lkCisgICBjcmFzaGluZyB0aGUgYWdlbnQgYXMgd2VsbCEKIAogMjAwNy0wOC0xNiAxNTozNSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzQ0MTU3OiBSZXBvcnQgZHVwbGljYXRlICJleHRlbmQvZXhlYyIKLSAgICAgaWRlbnRpZmllcnMuCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc0NDE1NzogUmVwb3J0IGR1cGxpY2F0ZSAiZXh0ZW5kL2V4ZWMiCisgICBpZGVudGlmaWVycy4KIAogMjAwNy0wOC0xNiAxNToyNCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgYXBwcy9zbm1wdHJhcGRfZHMuaDoKLSAgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSDogMTc0Njk5MjogSW1wcm92ZSBzbm1wdHJhcGQKLSAgICAgYWNjZXNzLWNvbnRyb2wgZXJyb3IgbWVzc2FnZXMuCisKKyAgIENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0g6IDE3NDY5OTI6IEltcHJvdmUgc25tcHRyYXBkCisgICBhY2Nlc3MtY29udHJvbCBlcnJvciBtZXNzYWdlcy4KIAogMjAwNy0wOC0xNiAxNDoxMiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1MjkzNDogRml4IG9mZi1ieS1vbmUgcXNvcnQgZXJyb3IgaW4KLSAgICAgdGFibGUgdXRpbGl0aWVzLgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTI5MzQ6IEZpeCBvZmYtYnktb25lIHFzb3J0IGVycm9yIGluCisgICB0YWJsZSB1dGlsaXRpZXMuCiAKIDIwMDctMDgtMTYgMTM6MzEgIGR0czEyCiAKICAgICogYWdlbnQvc25tcF9hZ2VudC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTM0Mzc6IEZpeCBlcnJvciBpbmRleCBvbiBmYWlsaW5nIFNFVAotICAgICByZXF1ZXN0cworCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTM0Mzc6IEZpeCBlcnJvciBpbmRleCBvbiBmYWlsaW5nIFNFVAorICAgcmVxdWVzdHMKIAogMjAwNy0wOC0xNiAxMzoyNSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1MzQ0OTogRml4IEFnZW50WCBlcnJvciBwcm9wYWdhdGlvbgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTM0NDk6IEZpeCBBZ2VudFggZXJyb3IgcHJvcGFnYXRpb24KIAogMjAwNy0wOC0xNiAxMjozNCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzUzNDYzOiBGaXggQWdlbnRYIHN1YmFnZW50IHBpbmcgYWxhcm0KLSAgICAgaGFuZGxpbmcKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzUzNDYzOiBGaXggQWdlbnRYIHN1YmFnZW50IHBpbmcgYWxhcm0KKyAgIGhhbmRsaW5nCiAKIDIwMDctMDgtMTYgMTI6MTMgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTgyMDg6IEZpeCBtZW1vcnkgbGVhaworCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTgyMDg6IEZpeCBtZW1vcnkgbGVhawogCiAyMDA3LTA4LTE2IDEyOjAzICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzc0NjEyOiBNb3JlIHJlc2lsaWVudCBwcm9jZXNzIHN0YXR1cwotICAgICBoYW5kbGluZworCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NzQ2MTI6IE1vcmUgcmVzaWxpZW50IHByb2Nlc3Mgc3RhdHVzCisgICBoYW5kbGluZwogCiAyMDA3LTA4LTE2IDExOjU4ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTc3NTEyNDogRml4IGNsaWVudGFkZHIgZnVuY3Rpb25hbGl0eQorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTc3NTEyNDogRml4IGNsaWVudGFkZHIgZnVuY3Rpb25hbGl0eQogCiAyMDA3LTA4LTE2IDA5OjM4ICBkdHMxMgogCiAgICAqIHNubXBsaWIvcGFyc2UuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE3NjgyODU6IENvdW50IE1JQiBmaWxlcyBjb3JyZWN0bHkgaW4KLSAgICAgYWRkX21pYmRpcigpCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNzY4Mjg1OiBDb3VudCBNSUIgZmlsZXMgY29ycmVjdGx5IGluCisgICBhZGRfbWliZGlyKCkKIAogMjAwNy0wOC0xNiAwOTozNSAgZHRzMTIKIAogICAgKiBhcHBzL3NubXB0cmFwZC5jOgotICAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIOiAxNzY3NzI1OiBDbG9zZSBhbGwgbm9uIHN0YW5kYXJkIGZpbGUKLSAgICAgaGFuZGxlcworCisgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIOiAxNzY3NzI1OiBDbG9zZSBhbGwgbm9uIHN0YW5kYXJkIGZpbGUKKyAgIGhhbmRsZXMKIAogMjAwNy0wOC0xNiAwOTowMCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZS5jOgotICAgICBEZWNsYXJlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUgY29ycmVjdGx5LCBhbmQgb21pdCB1bnVzZWQKLSAgICAgdmFyaWFibGVzLgotICAgICBQYXRjaCBmcm9tIE1hZ251cyBGcm9tcmVpZGUuCisKKyAgIERlY2xhcmUgaW5pdGlhbGlzYXRpb24gcm91dGluZSBjb3JyZWN0bHksIGFuZCBvbWl0IHVudXNlZAorICAgdmFyaWFibGVzLgorICAgUGF0Y2ggZnJvbSBNYWdudXMgRnJvbXJlaWRlLgogCiAyMDA3LTA4LTE2IDA4OjU1ICBkdHMxMgogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaDoKLSAgICAgUmVhZCBpbiBhZ2VudCBjb25maWd1cmF0aW9uIHNldHRpbmdzICpiZWZvcmUqIHRoZSBoZWFkZXIKLSAgICAgZmlsZXMgdGhhdCBtaWdodCByZWx5IG9uIHRoZW0uCisKKyAgIFJlYWQgaW4gYWdlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqYmVmb3JlKiB0aGUgaGVhZGVyCisgICBmaWxlcyB0aGF0IG1pZ2h0IHJlbHkgb24gdGhlbS4KKworMjAwNy0wOC0wNSAxNjoxNiAgYWxleF9iCisKKyAgICogd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCB3aW4zMi9kaXN0L1JFQURNRS50eHQ6CisKKyAgIENoYW5nZSB3aW4zMiBidWlsZCByZWFkbWUgZmlsZXMgdG8gQ1JMRi4KKworMjAwNy0wOC0wNSAxNDoxNiAgYWxleF9iCisKKyAgICogd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0OgorCisgICBXaW4zMjogQ2hhbmdlIGJ1aWxkIGRvY3MgdG8gdXNlIGR5bmFtaWMgKERMTCkgaW5zdGVhZCBvZiBzdGF0aWMuCiAKIDIwMDctMDgtMDIgMTM6NDYgIGR0czEyCiAKICAgICogbWlicy9ORVQtU05NUC1FWEFNUExFUy1NSUIudHh0OgotICAgICBJdCBtaWdodCBiZSBzbGlnaHRseSBsZXNzIGNvbmZ1c2luZyBpZiB0aGUgbmV0U25tcEV4YW1wbGVTdHJpbmcKLSAgICAgTUlCIG9iamVjdCBkaWQgYWN0dWFsbHkgdGFrZSBzdHJpbmcgdmFsdWVzLiBQaWNreSwgSSBrbm93Li4uLgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBJdCBtaWdodCBiZSBzbGlnaHRseSBsZXNzIGNvbmZ1c2luZyBpZiB0aGUgbmV0U25tcEV4YW1wbGVTdHJpbmcKKyAgIE1JQiBvYmplY3QgZGlkIGFjdHVhbGx5IHRha2Ugc3RyaW5nIHZhbHVlcy4gUGlja3ksIEkga25vdy4uLi4KIAotQ2hhbmdlczogVjUtNC1wYXRjaGVzIGJyYW5jaCBjcmVhdGVkIC0+IFY1LjQuMQorMjAwNy0wNy0yOCAxMzowMiAgcnN0b3J5CiAKLTIwMDctMDctMjcgMTc6MDIgIGhhcmRha2VyCisgICAqIGRpc3Qvc3ZudXA6CiAKLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xICkKLQotMjAwNy0wNy0yNyAxNzowMSAgaGFyZGFrZXIKLQotICAgKiBDSEFOR0VTLCBORVdTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA3LTI3IDE2OjU4ICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgcmVtb3ZlIGJvZ3VzIGVtcHR5ICogbGluZXMgZnJvbSB0aGUgQ2hhbmdlTG9nCi0KLTIwMDctMDctMjcgMTY6NTQgIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICBmaXggdmVyc2lvbiBudW1iZXJzIGluIENoYW5nZUxvZwotCi0yMDA3LTA3LTI3IDE2OjU0ICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNy0yNyAxNjoxNSAgaGFyZGFrZXIKLQotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCi0KLTIwMDctMDctMjcgMTY6MTMgIGhhcmRha2VyCi0KLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEgKQorICAgZml4IHRhZyBleHRyYWN0aW9uOyBjaGVjayBmb3IgZW1wdHkgdGFnIGVhcmxpZXIKIAogMjAwNy0wNy0yNSAyMjo0MSAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzYwNjMzOiBmaXggdHlwbyBpbiBkZWJ1ZyBtZXNzYWdlCiAKLTIwMDctMDctMjIgMDA6NTUgIHRhbmRlcnMKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3NjA2MzM6IGZpeCB0eXBvIGluIGRlYnVnIG1lc3NhZ2UKIAotICAgKiBORVdTOgotICAgICByZW1vdmUgZHVwbGljYXRlIGVudHJ5Ci0KLTIwMDctMDctMjIgMDA6NTIgIHRhbmRlcnMKLQotICAgKiBORVdTOgotICAgICBpbXByb3ZlIE5FV1Mgc2VjdGlvbiBmb3IgNS40LjEKLQotMjAwNy0wNy0yMSAxNjoxNyAgaGFyZGFrZXIKLQotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucmM0ICkKLQotMjAwNy0wNy0yMSAxNjoxNiAgaGFyZGFrZXIKLQotICAgKiBDSEFOR0VTLCBORVdTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA3LTIxIDE2OjEzICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNy0yMSAxNTowNyAgaGFyZGFrZXIKLQotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCi0KLTIwMDctMDctMjEgMTU6MDYgIGhhcmRha2VyCi0KLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucmM0ICkKLQotMjAwNy0wNy0yMSAxNDo1MSAgaGFyZGFrZXIKKzIwMDctMDctMjEgMjE6MzYgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0gICAgIHBhdGNoIHRvIGZpeCBmb3J3YXJkaW5nIGVuY29kaW5nCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGZpeCBmb3J3YXJkaW5nIGVuY29kaW5nCiAKIDIwMDctMDctMjAgMDg6MjEgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgotICAgICBUd2VhayB3YXJuaW5nIG1lc3NhZ2UgZm9yIChvbGQtc3R5bGUsIGludmFsaWQgZm9ybWF0KSAiZXhlYyBPSUQiCi0gICAgIGRpcmVjdGl2ZXMuCiAKLTIwMDctMDctMTkgMjE6MTYgIHRhbmRlcnMKLQotICAgKiBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGNvbmZpZ3VyZSwgbHRtYWluLnNoOgotICAgICBORVdTOiBidWlsZDogdXBkYXRlIHRvIGxpYnRvb2wgMS41LjI0IChmcm9tIDEuNS4yMikKLSAgICAgQ0hBTkdFUzogSFAtVVg6IEJVRzogMTc0MjI3ODogY29tcGlsZSBlcnJvciBvbiBIUC1VWCAxMS4yMyAoSUE2NCkKLQotMjAwNy0wNy0xOSAyMTowMSAgZHRzMTIKLQotICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsIGFnZW50L3NubXBkLmM6Ci0gICAgIENoZWNrIGZvciBwcmVzZW5jZSBvZiAnY2hvd24nIGFuZCAnbG9jYWx0aW1lX3InIHJvdXRpbmVzIGJlZm9yZQotICAgICB1c2luZyB0aGVtLgotCi0yMDA3LTA3LTE5IDIxOjAwICBkdHMxMgotCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIENvbmZpZ3VyZSBjaGVja3MgZm9yICdjaG93bicgYW5kICdsb2NhbHRpbWVfcicgZnVuY3Rpb25zCi0KLTIwMDctMDctMTcgMDA6MjAgIGhhcmRha2VyCi0KLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnJjMyApCi0KLTIwMDctMDctMTcgMDA6MTkgIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA3LTE3IDAwOjE3ICBoYXJkYWtlcgotCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQotMjAwNy0wNy0xNyAwMDoxNiAgaGFyZGFrZXIKLQotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5yYzMgKQorICAgVHdlYWsgd2FybmluZyBtZXNzYWdlIGZvciAob2xkLXN0eWxlLCBpbnZhbGlkIGZvcm1hdCkgImV4ZWMgT0lEIgorICAgZGlyZWN0aXZlcy4KIAogMjAwNy0wNy0xNiAyMzo1OSAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLAotICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsCi0gICAgIHNubXBsaWIvZGF0YV9saXN0LmM6Ci0gICAgIEFwcGx5IChjb3JyZWN0KSBwYXRjaCBmcm9tIE1hcmN1cyBSdWVja2VydCB0byByZW1vdmUgYXNzZXJ0cwotICAgICB1c2luZyBzb3J0LW8taWxsZWdhbCBDIHN0cmluZyBjb21wYXJlcworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIHNubXBsaWIvZGF0YV9saXN0LmM6CisKKyAgIEFwcGx5IChjb3JyZWN0KSBwYXRjaCBmcm9tIE1hcmN1cyBSdWVja2VydCB0byByZW1vdmUgYXNzZXJ0cworICAgdXNpbmcgc29ydC1vLWlsbGVnYWwgQyBzdHJpbmcgY29tcGFyZXMKIAogMjAwNy0wNy0xNiAyMzo1OSAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLAotICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsCi0gICAgIHNubXBsaWIvZGF0YV9saXN0LmM6Ci0gICAgIFJlbW92ZSBwcmV2aW91cyBwYXRjaCB3aGljaCB3YXMgdGhlIHdyb25nIHZlcnNpb24KKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBzbm1wbGliL2RhdGFfbGlzdC5jOgorCisgICBSZW1vdmUgcHJldmlvdXMgcGF0Y2ggd2hpY2ggd2FzIHRoZSB3cm9uZyB2ZXJzaW9uCiAKIDIwMDctMDctMTYgMjM6NTcgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLAotICAgICBzbm1wbGliL2RhdGFfbGlzdC5jOgotICAgICBBcHBseSBwYXRjaCBmcm9tIE1hcmN1cyBSdWVja2VydCB0byByZW1vdmUgYXNzZXJ0cyB1c2luZwotICAgICBzb3J0LW8taWxsZWdhbCBDIHN0cmluZyBjb21wYXJlcworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIHNubXBsaWIvZGF0YV9saXN0LmM6CisKKyAgIEFwcGx5IHBhdGNoIGZyb20gTWFyY3VzIFJ1ZWNrZXJ0IHRvIHJlbW92ZSBhc3NlcnRzIHVzaW5nCisgICBzb3J0LW8taWxsZWdhbCBDIHN0cmluZyBjb21wYXJlcworCisyMDA3LTA3LTEzIDE5OjI3ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2U6CisKKyAgIGdlbmVyYXRlIHppcCBmaWxlcwogCiAyMDA3LTA3LTEyIDIxOjUxICB0YW5kZXJzCiAKICAgICogcGVybC9hZ2VudC9hZ2VudC5wbToKLSAgICAgZml4IHN1YmFnZW50IGV4YW1wbGUgKGRvY3VtZW50YXRpb24pCisKKyAgIGZpeCBzdWJhZ2VudCBleGFtcGxlIChkb2N1bWVudGF0aW9uKQogCiAyMDA3LTA3LTEyIDIxOjI3ICB0YW5kZXJzCiAKICAgICogbWFuL3NubXBfc2Vzc19hcGkuMy5kZWY6Ci0gICAgIHNubXBfc2Vzc19yZWFkIHJldHVybnMgaW50LCBub3Qgdm9pZAogCi0yMDA3LTA3LTA3IDAwOjE3ICBoYXJkYWtlcgotCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5yYzIgKQotCi0yMDA3LTA3LTA3IDAwOjE3ICBoYXJkYWtlcgotCi0gICAqIENIQU5HRVM6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDctMDcgMDA6MTMgIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA3LTA3IDAwOjExICBoYXJkYWtlcgotCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQotMjAwNy0wNy0wNyAwMDoxMCAgaGFyZGFrZXIKLQotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5yYzIgKQorICAgc25tcF9zZXNzX3JlYWQgcmV0dXJucyBpbnQsIG5vdCB2b2lkCiAKIDIwMDctMDctMDYgMjM6MzkgIGhhcmRha2VyCiAKICAgICogTWFrZWZpbGUucnVsZXMsIE1ha2VmaWxlLnRvcDoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IHVzZSBsaWJ0b29sIGNsZWFuIGZvciByZW1vdmluZyBmaWxlcyB0byBlbnN1cmUgd2UKLSAgICAgZGVsZXRlIGFsbCBsaWJ0b29sIHRlbXBvcmFyeSBmaWxlcy4KKworICAgQ0hBTkdFUzogYnVpbGQ6IHVzZSBsaWJ0b29sIGNsZWFuIGZvciByZW1vdmluZyBmaWxlcyB0byBlbnN1cmUgd2UKKyAgIGRlbGV0ZSBhbGwgbGlidG9vbCB0ZW1wb3JhcnkgZmlsZXMuCisKKzIwMDctMDctMDYgMjM6MzQgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgdXNlIGEgcmVjdXJzaXZlIHJldmVydCBpbnN0ZWFkIG9mIHJtL3VwZGF0ZTsgcmVtb3ZlIGRvdWJsZSAvIGZyb20KKyAgIGVkaXRpbmcgY2FsbHMKIAogMjAwNy0wNy0wNiAyMToyMiAgcnN0b3J5CiAKICAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotICAgICBzdG9wIHNlYXJjaGluZyBwYXRocyB3aGVuIGRvbmUKKworICAgc3RvcCBzZWFyY2hpbmcgcGF0aHMgd2hlbiBkb25lCiAKIDIwMDctMDctMDYgMjE6MTQgIHJzdG9yeQogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKLSAgICAgZG8gbm90IGZyZWUgaW50ZXJmYWNlIGVudHJ5IGp1c3QgYmVjYXVzZSB3ZSBjYW4gbm90IGdldCBzdGF0cyBmb3IKLSAgICAgaXQKKworICAgZG8gbm90IGZyZWUgaW50ZXJmYWNlIGVudHJ5IGp1c3QgYmVjYXVzZSB3ZSBjYW4gbm90IGdldCBzdGF0cyBmb3IKKyAgIGl0CiAKIDIwMDctMDctMDYgMTU6MzIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUcgMTc0NTExMzogSGFuZGxlIHNpbmdsZS1saW5lIChhbmQgemVyby1saW5lKQotICAgICBvdXRwdXQgaW4gVUNEIGNvbXBhdGFiaWxpdHkgbW9kZS4KKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRyAxNzQ1MTEzOiBIYW5kbGUgc2luZ2xlLWxpbmUgKGFuZCB6ZXJvLWxpbmUpCisgICBvdXRwdXQgaW4gVUNEIGNvbXBhdGFiaWxpdHkgbW9kZS4KKworMjAwNy0wNy0wNiAwOTowOCAgZHRzMTIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIHNubXBsaWIvc25tcF9jbGllbnQuYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IFBBVENIIDE3MjgyNDc6IGZyb20gTWl0c3VydSBDaGluZW46IGNsZWFucyB1cAorICAgdGhlIGludDY0IHR5cGUgY2hlY2tpbmcgYW5kIHVzYWdlIGZvciBidWlsZGluZyBwYWNrZXRzIGVzcGVjaWFsbHkKKyAgIHVuZGVyIE1TVkMuCiAKIDIwMDctMDctMDUgMTQ6NDUgIHJzdG9yeQogCiAgICAqIC4sIFJFQURNRS5vc1g6Ci0gICAgIHIyMDA0NEBkaGNwMjExOiByc3RvcnkgfCAyMDA3LTA3LTA1IDEwOjQ0OjAxIC0wNDAwCi0gICAgIHJlbW92ZSBkaXNhYmxlLXN0YXRpYyBmcm9tIHJlY29tbWVuZGVkIG9wdGlvbnMKKworICAgcjIwMDQ0QGRoY3AyMTE6IHJzdG9yeSB8IDIwMDctMDctMDUgMTA6NDQ6MDEgLTA0MDAKKyAgIHJlbW92ZSBkaXNhYmxlLXN0YXRpYyBmcm9tIHJlY29tbWVuZGVkIG9wdGlvbnMKIAogMjAwNy0wNy0wNSAxMTowNSAgcnN0b3J5CiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgotICAgICBza2lwIHN0YXRzIHBhcnNpbmcgb24gaW50ZXJmYWNlcyB3aXRoIG5vIHN0YXRpc3RpY3MKKworICAgc2tpcCBzdGF0cyBwYXJzaW5nIG9uIGludGVyZmFjZXMgd2l0aCBubyBzdGF0aXN0aWNzCisKKzIwMDctMDctMDUgMTE6MDEgIHJzdG9yeQorCisgICAqIGRpc3QvY2hlY2stYXBpLWNoYW5nZToKKworICAgY2hlY2sgZm9yIGRpciBleGlzdGVuY2UKIAogMjAwNy0wNy0wNCAyMzoyNiAgdGFuZGVycwogCiAgICAqIGFnZW50L01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluOgotICAgICBDSEFOR0VTOiBwZXJsOiBpbnN0YWxsIGVtYmVkZGVkIHBlcmwgaW5pdCBmaWxlcyBmb3IKLSAgICAgc25tcGQvc25tcHRyYXBkIHdpdGggbW9kZSA2NDQgaW5zdGVhZCBvZiA3NTUKKworICAgQ0hBTkdFUzogcGVybDogaW5zdGFsbCBlbWJlZGRlZCBwZXJsIGluaXQgZmlsZXMgZm9yCisgICBzbm1wZC9zbm1wdHJhcGQgd2l0aCBtb2RlIDY0NCBpbnN0ZWFkIG9mIDc1NQogCiAyMDA3LTA3LTA0IDIxOjQyICB0YW5kZXJzCiAKICAgICogUkVBRE1FLm9zWDoKLSAgICAgUGVybCBwcm9ibGVtcyAoYmVsaWV2ZWQgdG8gYmUpIGZpeGVkCiAKLTIwMDctMDctMDMgMjI6MzYgIGhhcmRha2VyCi0KLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIENIQU5HRVM6IGxpYnJhcnk6IFBhdGNoIGZyb20gIk1pdHN1cnUgQ2hpbmVuIjogY2xlYW5zIHVwIHRoZQotICAgICBpbnQ2NCB0eXBlIGNoZWNraW5nIGFuZCB1c2FnZSBmb3IgYnVpbGRpbmcgcGFja2V0cyBlc3BlY2lhbGx5Ci0gICAgIHVuZGVyIE1TVkMuCisgICBQZXJsIHByb2JsZW1zIChiZWxpZXZlZCB0byBiZSkgZml4ZWQKIAogMjAwNy0wNy0wMyAxMjo1NiAgdGFuZGVycwogCiAgICAqIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtOgotICAgICByZW1vdmUgZXhlY3V0YWJsZSBmbGFnIGZyb20gU1ZOIHByb3BlcnRpZXMKKworICAgcmVtb3ZlIGV4ZWN1dGFibGUgZmxhZyBmcm9tIFNWTiBwcm9wZXJ0aWVzCisKKzIwMDctMDctMDIgMDY6NTMgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdmFjbS5jOgorCisgICBSZW1vdmUgdW51c2VkIG9pZCBkZWNsYXJhdGlvbnMKIAogMjAwNy0wNy0wMiAwNjowMiAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYzoKLSAgICAgQWRkIG1pc3NpbmcgcmV0dXJuIHZhbHVlIHRvIF9tdGVFdmVudF9maXJlX25vdGlmeS4KKworICAgQWRkIG1pc3NpbmcgcmV0dXJuIHZhbHVlIHRvIF9tdGVFdmVudF9maXJlX25vdGlmeS4KIAogMjAwNy0wNy0wMiAwNTozMSAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmM6Ci0gICAgIFJlbW92ZSB0aGUgZGVjbGFyYXRpb24gb2YgYW4gdW5kZWZpbmVkIHN0YXRpYyBmdW5jdGlvbi4KIAotMjAwNy0wNy0wMSAxOTo1OSAgdGFuZGVycworICAgUmVtb3ZlIHRoZSBkZWNsYXJhdGlvbiBvZiBhbiB1bmRlZmluZWQgc3RhdGljIGZ1bmN0aW9uLgogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBtaW5vciBoZWxwIHRleHQgZm9ybWF0dGluZyBmaXgKKzIwMDctMDctMDEgMjA6MzIgIHRhbmRlcnMKIAotMjAwNy0wNi0zMCAwNTozNCAgdGFuZGVycworICAgKiBkaXN0L25zYi1uaWdodGx5LCBkaXN0L25zYi1wYWNrYWdlOgogCi0gICAqIGRpc3QvbmV0LXNubXAuc3BlYzoKLSAgICAgYWRkIC0tZW5hYmxlLWFzLW5lZWRlZCBpZiBidWlsZGluZyB3aXRoIGVtYmVkZGVkIFBlcmwgc3VwcG9ydAorICAgbWFrZSBnZXRvcHRzIHdvcmsgb24gVHJ1NjQgYnkgcmVzcGF3bmluZyBpbiBQb3NpeCBtb2RlCiAKLTIwMDctMDYtMzAgMDQ6MzcgIGhhcmRha2VyCisyMDA3LTA3LTAxIDE5OjU2ICB0YW5kZXJzCiAKLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnJjMSApCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBuZXQtc25tcC1jb25maWcuaW46CiAKLTIwMDctMDYtMzAgMDQ6MzcgIGhhcmRha2VyCisgICBDSEFOR0VTOiBidWlsZDogLS1kaXNhYmxlLWFzLW5lZWRlZCBub3cgYWxsb3dzIHRvIHJldmVydCB0byB0aGUKKyAgIGZvcm1lciBkZWZhdWx0IGJlaGF2aW91ciBvZiBsaW5raW5nIGxpYnBlcmwgdG8gYXBwbGljYXRpb25zCisgICByYXRoZXIgdGhhbiBOZXQtU05NUCBMaWJyYXJpZXMgKGluIGNhc2Ugb2YgYW55IHByb2JsZW1zKQogCi0gICAqIENIQU5HRVMsIE5FV1M6Ci0gICAgIHZlcnNpb24gdXBkYXRlCisyMDA3LTA2LTMwIDA2OjE3ICBoYXJkYWtlcgogCi0yMDA3LTA2LTMwIDA0OjM2ICBoYXJkYWtlcgorICAgKiBkaXN0L21ha2VyZWxlYXNlOgogCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKKyAgIGFjdHVhbGx5IGNhbGwgcmVtb3ZlZmlsZXMKIAotMjAwNy0wNi0zMCAwNDozNCAgaGFyZGFrZXIKKzIwMDctMDYtMjggMjM6NTAgIG1hZ2ZyCiAKLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOgogCi0yMDA3LTA2LTMwIDA0OjMyICBoYXJkYWtlcgorICAgTkVXUzogc25tcGxpYjogQWRkZWQgR0NDIGZvcm1hdCBjaGVja2luZyBhdHRyaWJ1dGVzIHRvIHRoZSBkZWJ1ZworICAgZnVuY3Rpb25zLgogCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnJjMSApCisyMDA3LTA2LTI4IDIzOjM3ICBtYWdmcgogCi0yMDA3LTA2LTI5IDIyOjE4ICB0YW5kZXJzCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jOgogCi0gICAqIFJFQURNRS5haXgsIFJFQURNRS5pcml4LCBSRUFETUUuc29sYXJpcywgYWdlbnQvTWFrZWZpbGUuaW4sCi0gICAgIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBuZXQtc25tcC1jb25maWcuaW46Ci0gICAgIE5FV1M6IHBlcmw6IEJVRzogMTYxOTgyNzogbGluayBsaWJuZXRzbm1wYWdlbnQvbGlibmV0c25tcHRyYXBkCi0gICAgIChyYXRoZXIgdGhhbiBzbm1wZC9zbm1wdHJhcGQpIGFnYWluc3QgbGlicGVybCB3aGVuIGNvbmZpZ3VyZWQKLSAgICAgd2l0aCAtLWVuYWJsZS1hcy1uZWVkZWQKKyAgIFJlbW92ZSBjYXN0cyBvZiB1bnVzZWQgdmFsdWVzCisKKzIwMDctMDYtMjggMjM6MzYgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCiAKIDIwMDctMDYtMjggMjI6MDkgIHRhbmRlcnMKIAogICAgKiBuZXQtc25tcC1jb25maWcuaW46Ci0gICAgIHJlbmFtZSBsYXN0IG9jY3VyZW5jZSBvZiBERUZBVUxUX01JQltESVJdUyB0bwotICAgICBORVRTTk1QX0RFRkFVTFRfTUlCW0RJUl1TCisKKyAgIHJlbmFtZSBsYXN0IG9jY3VyZW5jZSBvZiBERUZBVUxUX01JQltESVJdUyB0bworICAgTkVUU05NUF9ERUZBVUxUX01JQltESVJdUworCisyMDA3LTA2LTI4IDA4OjE1ICBtYWdmcgorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIERvIG5vdCB0cmFuc2Zvcm0gdGhlIGlnbm9yZWQgcmVzdWx0IG9mIHJlYWxsb2NfZm9ybWF0X3RyYXAKIAogMjAwNy0wNi0yNiAyMjoxMiAgdGFuZGVycwogCiAgICAqIGFwcHMvTWFrZWZpbGUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiB3b3JrIGFyb3VuZCBsaWJuZXRzbm1wYWdlbnQvbGlibmV0c25tcGhlbHBlcnMKLSAgICAgZGVwZW5kZW5jeSBpc3N1ZXMgd2hlbiBsaW5raW5nIHNubXB0cmFwZAorCisgICBDSEFOR0VTOiBidWlsZDogd29yayBhcm91bmQgbGlibmV0c25tcGFnZW50L2xpYm5ldHNubXBoZWxwZXJzCisgICBkZXBlbmRlbmN5IGlzc3VlcyB3aGVuIGxpbmtpbmcgc25tcHRyYXBkCiAKIDIwMDctMDYtMjYgMjE6NDUgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IHVzZSBMREZMQUdTIHdoZW4gYnVpbGRpbmcgYWdlbnQsIGhlbHBlcnMgYW5kIG1pYgotICAgICBsaWIgdG8gYmUgY29uc2lzdGVudCB3aXRoIGxpYm5ldG5tcAorCisgICBDSEFOR0VTOiBidWlsZDogdXNlIExERkxBR1Mgd2hlbiBidWlsZGluZyBhZ2VudCwgaGVscGVycyBhbmQgbWliCisgICBsaWIgdG8gYmUgY29uc2lzdGVudCB3aXRoIGxpYm5ldG5tcAogCiAyMDA3LTA2LTI2IDIxOjI4ICB0YW5kZXJzCiAKICAgICogSU5TVEFMTDoKLSAgICAgbWlub3IgdXBkYXRlcworCisgICBtaW5vciB1cGRhdGVzCisKKzIwMDctMDYtMjYgMTU6MTAgIHJzdG9yeQorCisgICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIGRvbid0IGluaXRpYWxpemUgdmFyIGluIGV4dGVybiBkZWNsOyBpbnN0ZWFkLCBpbml0aWFsaXplIGFjdHVhbAorICAgdmFyCisKKzIwMDctMDYtMjUgMjE6MjkgIHRhbmRlcnMKKworICAgKiBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGNvbmZpZ3VyZSwgbHRtYWluLnNoOgorCisgICBORVdTOiBidWlsZDogdXBkYXRlIHRvIGxpYnRvb2wgMS41LjI0IChmcm9tIDEuNS4yMikKIAogMjAwNy0wNi0yNCAxMjo1NyAgdGFuZGVycwogCi0gICAqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLAotICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBIQVZFX1NTSVpFX1QgY2xlYW51cAorICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBIQVZFX1NTSVpFX1QgY2xlYW51cAogCiAyMDA3LTA2LTIzIDIyOjU2ICB0YW5kZXJzCiAKICAgICogUkVBRE1FLmhwdXgxMToKLSAgICAgZG9uJ3Qgc3VnZ2VzdCAtLXdpdGgtbGlicz0tbG5tCiAKLTIwMDctMDYtMjIgMTU6MDkgIGR0czEyCisgICBkb24ndCBzdWdnZXN0IC0td2l0aC1saWJzPS1sbm0KIAotICAgKiB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwLAotICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsCi0gICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCB3aW4zMi9saWJzZGxsLmRzdywKLSAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLAotICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsCi0gICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcCwKLSAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwLAotICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcCwgd2luMzIvc25tcGQvc25tcGQuZHNwLAotICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcCwgd2luMzIvc25tcGRmL3NubXBkZi5kc3AsCi0gICAgIHdpbjMyL3NubXBkc2RrL3NubXBkLmRzcCwgd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcCwKLSAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwLAotICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsIHdpbjMyL3NubXBzZXQvc25tcHNldC5kc3AsCi0gICAgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AsIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwLAotICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AsCi0gICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AsCi0gICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcCwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsCi0gICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS5kc3AsIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcCwKLSAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwLCB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyc2RrLmRzdzoKLSAgICAgRW5mb3JjZSBET1Mtc3R5bGUgbGluZSBlbmRpbmdzLCB0byBrZWVwIFZpc3VhbCBTdHVkaW8gaGFwcHkuCisyMDA3LTA2LTIyIDE1OjA1ICBkdHMxMgorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AsIHdpbjMyL2xpYnNkbGwuZHN3LCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AsIHdpbjMyL3NubXBkL3NubXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwLCB3aW4zMi9zbm1wZGYvc25tcGRmLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkc2RrL3NubXBkLmRzcCwgd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCwgd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AsIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcCwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AsIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzJzZGsuZHN3OgorCisgICBFbmZvcmNlIERPUy1zdHlsZSBsaW5lIGVuZGluZ3MsIHRvIGtlZXAgVmlzdWFsIFN0dWRpbyBoYXBweS4KKworMjAwNy0wNi0yMSAxNDowMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaDoKKworICAgZGVmYXVsdCB0byB1c2luZyBpZlRhYmxlIHJld3JpdGVzCiAKIDIwMDctMDYtMjAgMjE6MzQgIHRhbmRlcnMKIAotICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOgotICAgICBmaXggdHlwbworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOgorCisgICBmaXggdHlwbwogCiAyMDA3LTA2LTE5IDIyOjIzICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIGZpeCBQZXJsLXJlbGF0ZWQgYXV0b2NvbmYgbWVzc2FnZXMKKworICAgZml4IFBlcmwtcmVsYXRlZCBhdXRvY29uZiBtZXNzYWdlcwogCiAyMDA3LTA2LTE5IDE1OjA4ICB0YW5kZXJzCiAKICAgICogZGlzdC9uZXQtc25tcC5zcGVjOgotICAgICBDSEFOR0VTOiBidWlsZDogYWRkICJCdWlsZFJlcXVpcmVzOiBwZXJsLUV4dFV0aWxzLUVtYmVkIiB0byB0aGUKLSAgICAgc3BlYyBmaWxlLCBlLmcuIGZvciBGZWRvcmEgNworCisgICBDSEFOR0VTOiBidWlsZDogYWRkICJCdWlsZFJlcXVpcmVzOiBwZXJsLUV4dFV0aWxzLUVtYmVkIiB0byB0aGUKKyAgIHNwZWMgZmlsZSwgZS5nLiBmb3IgRmVkb3JhIDcKIAogMjAwNy0wNi0xOCAyMjoyOCAgaGFyZGFrZXIKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKLSAgICAgZml4IGJyb2tlbiBjb21tZW50LgogCi0yMDA3LTA2LTE4IDIyOjA0ICBoYXJkYWtlcgotCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5wcmUzICkKLQotMjAwNy0wNi0xOCAyMjowMyAgaGFyZGFrZXIKLQotICAgKiBDSEFOR0VTLCBORVdTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA2LTE4IDIxOjU3ICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKKyAgIGZpeCBicm9rZW4gY29tbWVudC4KIAogMjAwNy0wNi0xOCAyMTo1NCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOgotICAgICByZXZlcnQgZG91YmxlIGxpbmtpbmcgb2YgbGlibmV0c21ucCBwYXJ0IG9mIHBhdGNoIHRoYXQgd2FzCi0gICAgIHN1cHBvc2VkIHRvIGJlIHB1bGxlZCBib2ZlciBhcHBseWluZyBpbiByMTY1MzggKHRoYW5rcyB0YW5kZXJzCi0gICAgIGZvciBjYXRjaGluZyBpdCkKIAotMjAwNy0wNi0xOCAyMTo0OCAgaGFyZGFrZXIKLQotICAgKiBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6Ci0gICAgIG1ha2UgZGVwZW5kCi0KLTIwMDctMDYtMTggMjE6NDcgIGhhcmRha2VyCi0KLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQotCi0yMDA3LTA2LTE4IDIxOjQ2ICBoYXJkYWtlcgotCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnByZTMgKQorICAgcmV2ZXJ0IGRvdWJsZSBsaW5raW5nIG9mIGxpYm5ldHNtbnAgcGFydCBvZiBwYXRjaCB0aGF0IHdhcworICAgc3VwcG9zZWQgdG8gYmUgcHVsbGVkIGJvZmVyIGFwcGx5aW5nIGluIHIxNjUzOCAodGhhbmtzIHRhbmRlcnMKKyAgIGZvciBjYXRjaGluZyBpdCkKIAogMjAwNy0wNi0xOCAyMTozNCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBzbm1wbGliL01ha2VmaWxlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogcGF0Y2ggZnJvbSBhcHBsZSB0byBzaW1wbGlmeSBtYWtlZmlsZSB0YXJnZXQKLSAgICAgcmVmZXJlbmNlcyBpbiBzb21lIHJ1bGVzLgorCisgICBDSEFOR0VTOiBidWlsZDogcGF0Y2ggZnJvbSBhcHBsZSB0byBzaW1wbGlmeSBtYWtlZmlsZSB0YXJnZXQKKyAgIHJlZmVyZW5jZXMgaW4gc29tZSBydWxlcy4KIAogMjAwNy0wNi0xOCAyMToxNyAgaGFyZGFrZXIKIAogICAgKiBtYW4vc25tcF9jb25maWcuNS5kZWYsIG1hbi9zbm1wZ2V0LjEuZGVmOgotICAgICBDSEFOR0VTOiBwYXRjaCBmcm9tIGFwcGxlIHRvIGZpeCBtaW5vciBkb2N1bWVudGF0aW9uIGJ1Z3MuCisKKyAgIENIQU5HRVM6IHBhdGNoIGZyb20gYXBwbGUgdG8gZml4IG1pbm9yIGRvY3VtZW50YXRpb24gYnVncy4KIAogMjAwNy0wNi0xOCAyMToxMyAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaDoKLSAgICAgCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45Lmg6CisKKyAgIAogCiAyMDA3LTA2LTE4IDIxOjEyICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZGFyd2luLmM6Ci0gICAgIENIQU5HRVM6IHBhdGNoIGZyb20gYXBwbGUgdG8gaW1wcm92ZSBtZW1vcnkgcmVwb3J0aW5nCisKKyAgIENIQU5HRVM6IHBhdGNoIGZyb20gYXBwbGUgdG8gaW1wcm92ZSBtZW1vcnkgcmVwb3J0aW5nCiAKIDIwMDctMDYtMTggMjE6MDkgIGhhcmRha2VyCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oOgotICAgICBDSEFOR0VTOiBwYXRjaCBmcm9tIGFwcGxlIHRvIGZpeCBjcm9zcy1jb21waWxlIGJ1aWxkcyBpbiBhcHBsZXMKLSAgICAgYnVpbGQgZW52aXJvbm1lbnQuCisKKyAgIENIQU5HRVM6IHBhdGNoIGZyb20gYXBwbGUgdG8gZml4IGNyb3NzLWNvbXBpbGUgYnVpbGRzIGluIGFwcGxlcworICAgYnVpbGQgZW52aXJvbm1lbnQuCiAKIDIwMDctMDYtMTggMjA6NTQgIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKLSAgICAgQ0hBTkdFUzogcGF0Y2g6IDE3MzcwODU6IGZyb20ganNhZnJhbmVrOiBmaXggdGhlIC1NIHN3aXRjaCBmb3IKLSAgICAgbWliIHBhcnNpbmcgYnkgbG9hZGluZyBkZWZhdWx0cyBmaXJzdCBiZWZvcmUgcGVyZm9ybWluZyB0aGUgc2V0Ci0gICAgIHNvIGl0IGRvZXMgbm90IGdldCBvdmVyd3JpdHRlbiBieSB0aGUgZGVmYXVsdHMgbGF0ZXIuCisKKyAgIENIQU5HRVM6IHBhdGNoOiAxNzM3MDg1OiBmcm9tIGpzYWZyYW5lazogZml4IHRoZSAtTSBzd2l0Y2ggZm9yCisgICBtaWIgcGFyc2luZyBieSBsb2FkaW5nIGRlZmF1bHRzIGZpcnN0IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBzZXQKKyAgIHNvIGl0IGRvZXMgbm90IGdldCBvdmVyd3JpdHRlbiBieSB0aGUgZGVmYXVsdHMgbGF0ZXIuCiAKIDIwMDctMDYtMTggMjA6NTAgIGhhcmRha2VyCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6Ci0gICAgIE5FV1M6IHBlcmw6IHBhdGNoOiAxNzI1MDQ5OiBmaXggYnVsa3dhbGsgaW4gY2FzZXMgb2Ygbm9uLXJlcGVhdGVyCi0gICAgIHVzYWdlLgorCisgICBORVdTOiBwZXJsOiBwYXRjaDogMTcyNTA0OTogZml4IGJ1bGt3YWxrIGluIGNhc2VzIG9mIG5vbi1yZXBlYXRlcgorICAgdXNhZ2UuCiAKIDIwMDctMDYtMTggMTQ6MTAgIHRhbmRlcnMKIAogICAgKiBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTDoKLSAgICAgQ0hBTkdFUzogcGVybDogZml4IHByZXJlcXVpc2l0ZXMgZm9yIE5ldFNOTVA6OlRyYXBSZWNlaXZlcgorCisgICBDSEFOR0VTOiBwZXJsOiBmaXggcHJlcmVxdWlzaXRlcyBmb3IgTmV0U05NUDo6VHJhcFJlY2VpdmVyCiAKIDIwMDctMDYtMTggMTM6MzkgIHRhbmRlcnMKIAogICAgKiBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbToKLSAgICAgQ0hBTkdFUzogcGVybDogZml4IHN5bnRheCBlcnJvciBpbiBOZXRTTk1QOjphZ2VudDo6U3VwcG9ydAorCisgICBDSEFOR0VTOiBwZXJsOiBmaXggc3ludGF4IGVycm9yIGluIE5ldFNOTVA6OmFnZW50OjpTdXBwb3J0CisKKzIwMDctMDYtMTYgMjM6MDEgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgbmV0LXNubXAtY29uZmlnLmluOgorCisgICBORVdTOiBwZXJsOiBCVUc6IDE2MTk4Mjc6IGxpbmsgbGlibmV0c25tcGFnZW50L2xpYm5ldHNubXB0cmFwZAorICAgKHJhdGhlciB0aGFuIHNubXBkL3NubXB0cmFwZCkgYWdhaW5zdCBsaWJwZXJsLgogCiAyMDA3LTA2LTE0IDE1OjQxICByc3RvcnkKIAogICAgKiBsb2NhbC9taWIyYy5jb25mOgotICAgICBmaXggdHlwbyBpbiB1c2VyIG91dHB1dCwgYXMgbm90ZWQgb24gY29kZXJzCisKKyAgIGZpeCB0eXBvIGluIHVzZXIgb3V0cHV0LCBhcyBub3RlZCBvbiBjb2RlcnMKKworMjAwNy0wNi0xNCAxNTozNiAgcnN0b3J5CisKKyAgICogZGlzdC9jdnNzaG93OgorCisgICB1c2UgJ3N2biBpbmZvJyB0byBxdWVyeSBmb3IgdXJsCiAKIDIwMDctMDYtMTQgMDQ6MzcgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4Lmg6Ci0gICAgIEFkZCBtaXNzaW5nIGFyZ3VtZW50IHR5cGUgaW4gb3JkZXIgdG8gc2lsZW5jZSBhIGdjYyB3YXJuaW5nCisKKyAgIEFkZCBtaXNzaW5nIGFyZ3VtZW50IHR5cGUgaW4gb3JkZXIgdG8gc2lsZW5jZSBhIGdjYyB3YXJuaW5nCisKKzIwMDctMDYtMTMgMDY6MzcgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIERvIG5vdCB0cnkgdG8gYmUgY2xldmVyIGluIHRoZSBoYW5kaW5nIG9mIC1sa3ZtIGluIExBR0VOVExJQlMuCisgICBJbmNsdWRlIGl0IGlmIGFueSBzb3VnaHQgZnVuY3Rpb24gaXMgaW4gaXQuCiAKIDIwMDctMDYtMTEgMTA6MTEgIHRhbmRlcnMKIAogICAgKiBSRUFETUUuYWl4OgotICAgICBkb2N1bWVudCB4bGM8LT5jY19yIGNvbXBpbGVyIGlzc3VlcyB3aXRoIFBlcmwgb24gQUlYIChzZWUgYnVnCi0gICAgICMxNjAwMDk5KQorCisgICBkb2N1bWVudCB4bGM8LT5jY19yIGNvbXBpbGVyIGlzc3VlcyB3aXRoIFBlcmwgb24gQUlYIChzZWUgYnVnCisgICAjMTYwMDA5OSkKIAogMjAwNy0wNi0xMCAyMjoyOSAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAotICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODI0NzogZnJvbSBtaXRzdXJ1X2NoaW5lbjogQWRkIHR5cGUKLSAgICAgY2hlY2sgZm9yIGludD8/X3QgYW5kIHVpbnQ/P190CisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjQ3OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBBZGQgdHlwZQorICAgY2hlY2sgZm9yIGludD8/X3QgYW5kIHVpbnQ/P190CiAKIDIwMDctMDYtMTAgMjI6MjIgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKLSAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgotICAgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyNDQ6IGZyb20gbWl0c3VydV9jaGluZW46IEFkZAotICAgICBjb25maWd1cmUgY2hlY2sgZm9yIHNpbjZfc2NvcGVfaWQKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyNDQ6IGZyb20gbWl0c3VydV9jaGluZW46IEFkZAorICAgY29uZmlndXJlIGNoZWNrIGZvciBzaW42X3Njb3BlX2lkCiAKIDIwMDctMDYtMTAgMjI6MTUgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKLSAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IFBBVENIOiAxNzI4MjQxOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBhZGQgY29uZmlndXJlIGNoZWNrCi0gICAgIGZvciA8c3lzL3Vpby5oPiAobWFrZSBzdXJlIGlvdiBzdHJ1Y3R1cmUgaXMgZGVjbGFyZWQpCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTcyODI0MTogZnJvbSBtaXRzdXJ1X2NoaW5lbjogYWRkIGNvbmZpZ3VyZSBjaGVjaworICAgZm9yIDxzeXMvdWlvLmg+IChtYWtlIHN1cmUgaW92IHN0cnVjdHVyZSBpcyBkZWNsYXJlZCkKKworMjAwNy0wNi0xMCAwNjozMyAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBVc2UgTkVUU05NUF9TRUFSQ0hfTElCUyB0byBzaW1wbGlmeSBzZWFyY2hpbmcgZm9yIHN5c3RlbSBzcGVjaWZpYworICAgbGlicmFyaWVzCisKKzIwMDctMDYtMTAgMDY6MjYgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIFVzZSBORVRTTk1QX1NFQVJDSF9MSUJTIHRvIHNpbXBsaWZ5IHNlYXJjaGluZyBmb3IgLWxzZW5zb3JzCisKKzIwMDctMDYtMTAgMDY6MTggIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgVXNlIE5FVFNOTVBfU0VBUkNIX0xJQlMgdG8gc2ltcGxpZnkgc2VhcmNoaW5nIGZvciAtbGRldnN0YXQKKworMjAwNy0wNi0xMCAwNjoxMyAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgVXNlIE5FVFNOTVBfU0VBUkNIX0xJQlMgdG8gc2ltcGxpZnkgc2VhcmNoaW5nIGZvciAtbGRsCisKKzIwMDctMDYtMDkgMDg6NTggIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvY29uZmlnLmguYm9ybGFuZCwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgVXNlIE5FVFNOTVBfU0VBUkNIX0xJQlMgdG8gc2ltcGxpZnkgc2VhcmNoaW5nIGZvciAtbGt2bQogCiAyMDA3LTA2LTA4IDIwOjMyICB0YW5kZXJzCiAKLSAgICogTWFrZWZpbGUuaW46Ci0gICAgIEZpeCByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgcjE2NDc5OiAnbWFrZSB0ZXN0IFRFU1RPUFRTPSItVAotICAgICB0Y3AiJyBub3cKLSAgICAgd29ya3MgYWdhaW4uIG1ha2VyZWxlYXNlIG5vdyB1c2VzIHRoZSByaWdodCBvcHRpb24uCisgICAqIE1ha2VmaWxlLmluLCBkaXN0L21ha2VyZWxlYXNlOgorCisgICBGaXggcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHIxNjQ3OTogJ21ha2UgdGVzdCBURVNUT1BUUz0iLVQKKyAgIHRjcCInIG5vdworICAgd29ya3MgYWdhaW4uIG1ha2VyZWxlYXNlIG5vdyB1c2VzIHRoZSByaWdodCBvcHRpb24uCisKKzIwMDctMDYtMDggMTA6NDYgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgQ0hBTkdFUzogc25tcHRyYXBkOiBGRUFUVVJFOiA3NDEzNzU6IEV4dGVuZCAtRiBmbGFnIHRvIGNvdmVyCisgICBzeXNsb2cvZXhlY3V0ZSBmb3JtYXQgc3RyaW5ncy4KIAogMjAwNy0wNi0wOCAxMDo0NCAgZHRzMTIKIAotICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgotICAgICBJbXByb3ZlIG1lbW9yeSBoYW5kbGluZyBvZiBzdHlsZS1zcGVjaWZpYyBmb3JtYXQgc3RyaW5ncy4KKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgSW1wcm92ZSBtZW1vcnkgaGFuZGxpbmcgb2Ygc3R5bGUtc3BlY2lmaWMgZm9ybWF0IHN0cmluZ3MuCiAKIDIwMDctMDYtMDggMTA6MzMgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6Ci0gICAgIERlZmF1bHQgdG8gcmVwb3J0aW5nIE5GUyBtb3VudHMgYXMgTmV0d29ya0Rpc2suCisKKyAgIERlZmF1bHQgdG8gcmVwb3J0aW5nIE5GUyBtb3VudHMgYXMgTmV0d29ya0Rpc2suCisKKzIwMDctMDYtMDggMDY6MDIgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgVXNlIE5FVFNOTVBfU0VBUkNIX0xJQlMgdG8gc2ltcGxpZnkgc2VhcmNoaW5nIGZvciAtbHJwbSBhbmQKKyAgIHRoaW5ncyBpdCBkZXBlbmRzCisgICBvbgorCisyMDA3LTA2LTA4IDA1OjU5ICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46CisKKyAgIEFkZCBtaXNzaW5nIFwKKworMjAwNy0wNi0wOCAwNTozMSAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgVXNlIE5FVFNOTVBfU0VBUkNIX0xJQlMgdG8gc2ltcGxpZnkgc2VhcmNoaW5nIGZvciAtbGtzdGF0CisKKzIwMDctMDYtMDggMDU6MjggIG1hZ2ZyCisKKyAgICogYWNpbmNsdWRlLm00OgorCisgICBDSEFOR0VTOiBidWlsZGluZzogQWRkIGEgdmFyaWF0aW9uIG9mIEFDX1NFQVJDSF9MSUJTIHdoZXJlIHRoZQorICAgcmVzdWx0IHZhcmlhYmxlIGlzIHNldHRhYmxlLgogCiAyMDA3LTA2LTA4IDA1OjE2ICBtYWdmcgogCi0gICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgUmVtb3ZlIHRoZSB1bnVzZWQgdW5kZWYgSEFWRV9QRVJMX0VWQUxfUFYuCi0gICAgIFRoZSBQZXJsX2V2YWxfcHYgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IHRoZQotICAgICBIQVZFX1BFUkxfRVZBTF9QVl9bVUxdQyBkZWZpbmVzLAotICAgICB0aGlzIG9uZSBpcyBuZXZlciBzZXQgYnkgb3VyIGNvbmZpZ3VyZSBzY3JpcHQuCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZW1vdmUgdGhlIHVudXNlZCB1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVi4KKyAgIFRoZSBQZXJsX2V2YWxfcHYgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IHRoZQorICAgSEFWRV9QRVJMX0VWQUxfUFZfW1VMXUMgZGVmaW5lcywKKyAgIHRoaXMgb25lIGlzIG5ldmVyIHNldCBieSBvdXIgY29uZmlndXJlIHNjcmlwdC4KIAogMjAwNy0wNi0wNyAxNjowMiAgZHRzMTIKIAotICAgKiAuY3ZzaWdub3JlLCBhZ2VudC8uY3ZzaWdub3JlLCBhZ2VudC9oZWxwZXJzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwLy5jdnNpZ25vcmUsIGFnZW50L21pYmdyb3VwL1Jtb24vLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4Ly5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcGZ3Y2hhaW5zLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJLy5jdnNpZ25vcmUsIGFnZW50L21pYmdyb3VwL21pc2MvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3NtdXgvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFBhcmFtZXRlcnMvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvLmN2c2lnbm9yZSwgYXBwcy8uY3ZzaWdub3JlLAotICAgICBhcHBzL3NubXBuZXRzdGF0Ly5jdnNpZ25vcmUsIGRpc3QvLmN2c2lnbm9yZSwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC8uY3ZzaWdub3JlLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50Ly5jdnNpZ25vcmUsCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS8uY3ZzaWdub3JlLCBpbmNsdWRlL3VjZC1zbm1wLy5jdnNpZ25vcmUsCi0gICAgIGxvY2FsLy5jdnNpZ25vcmUsIG1hbi8uY3ZzaWdub3JlLCBtaWJzLy5jdnNpZ25vcmUsIG92Ly5jdnNpZ25vcmUsCi0gICAgIHBlcmwvLmN2c2lnbm9yZSwgcGVybC9BU04vLmN2c2lnbm9yZSwKLSAgICAgcGVybC9BbnlEYXRhX1NOTVAvLmN2c2lnbm9yZSwgcGVybC9PSUQvLmN2c2lnbm9yZSwKLSAgICAgcGVybC9TTk1QLy5jdnNpZ25vcmUsIHBlcmwvU05NUC90Ly5jdnNpZ25vcmUsCi0gICAgIHBlcmwvVHJhcFJlY2VpdmVyLy5jdnNpZ25vcmUsIHBlcmwvYWdlbnQvLmN2c2lnbm9yZSwKLSAgICAgcGVybC9hZ2VudC9TdXBwb3J0Ly5jdnNpZ25vcmUsCi0gICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS8uY3ZzaWdub3JlLAotICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvLmN2c2lnbm9yZSwgcGVybC9tYW5hZ2VyLy5jdnNpZ25vcmUsCi0gICAgIHNubXBsaWIvLmN2c2lnbm9yZSwgdGVzdGluZy8uY3ZzaWdub3JlLCB3aW4zMi8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9iaW4vLmN2c2lnbm9yZSwgd2luMzIvZW5jb2RlX2tleWNoYW5nZS8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9saWIvLmN2c2lnbm9yZSwgd2luMzIvbGliYWdlbnQvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvbGliaGVscGVycy8uY3ZzaWdub3JlLCB3aW4zMi9saWJuZXRzbm1wdHJhcGQvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvbGlic25tcC8uY3ZzaWdub3JlLCB3aW4zMi9saWJzbm1wX2RsbC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9saWJ1Y2RtaWJzLy5jdnNpZ25vcmUsIHdpbjMyL25ldC1zbm1wLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL25ldC1zbm1wL2FnZW50Ly5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL25ldC1zbm1wL2xpYnJhcnkvLmN2c2lnbm9yZSwgd2luMzIvbmV0c25tcG1pYnMvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvLmN2c2lnbm9yZSwgd2luMzIvc25tcGJ1bGtnZXQvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcGJ1bGt3YWxrLy5jdnNpZ25vcmUsIHdpbjMyL3NubXBkLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXBkZWx0YS8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wZGYvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcGRzZGsvLmN2c2lnbm9yZSwgd2luMzIvc25tcGdldC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wZ2V0bmV4dC8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wbmV0c3RhdC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wc2V0Ly5jdnNpZ25vcmUsIHdpbjMyL3NubXBzdGF0dXMvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcHRhYmxlLy5jdnNpZ25vcmUsIHdpbjMyL3NubXB0ZXN0Ly5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvLmN2c2lnbm9yZSwgd2luMzIvc25tcHRyYXAvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcHRyYXBkLy5jdnNpZ25vcmUsIHdpbjMyL3NubXB1c20vLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcHZhY20vLmN2c2lnbm9yZSwgd2luMzIvc25tcHdhbGsvLmN2c2lnbm9yZToKLSAgICAgUmVtb3ZlIHJlZHVuZGFudCBDVlMtYWRtaW4gZmlsZXMuCisgICAqICAuY3ZzaWdub3JlLCBhZ2VudC8uY3ZzaWdub3JlLCBhZ2VudC9oZWxwZXJzLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC8uY3ZzaWdub3JlLCBhZ2VudC9taWJncm91cC9SbW9uLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4Ly5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5Ly5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0Ly5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwZndjaGFpbnMvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJLy5jdnNpZ25vcmUsIGFnZW50L21pYmdyb3VwL21pc2MvLmN2c2lnbm9yZSwgIAorICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvLmN2c2lnbm9yZSwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFBhcmFtZXRlcnMvLmN2c2lnbm9yZSwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS8uY3ZzaWdub3JlLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy8uY3ZzaWdub3JlLCBhcHBzLy5jdnNpZ25vcmUsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0Ly5jdnNpZ25vcmUsIGRpc3QvLmN2c2lnbm9yZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvLmN2c2lnbm9yZSwgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8uY3ZzaWdub3JlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5Ly5jdnNpZ25vcmUsIGluY2x1ZGUvdWNkLXNubXAvLmN2c2lnbm9yZSwgCisgICAgICAgIGxvY2FsLy5jdnNpZ25vcmUsIG1hbi8uY3ZzaWdub3JlLCBtaWJzLy5jdnNpZ25vcmUsCisgICAgICBvdi8uY3ZzaWdub3JlLCAgICBwZXJsLy5jdnNpZ25vcmUsIHBlcmwvQVNOLy5jdnNpZ25vcmUsICAgCisgICAgICBwZXJsL0FueURhdGFfU05NUC8uY3ZzaWdub3JlLCBwZXJsL09JRC8uY3ZzaWdub3JlLCAgIAorICAgICAgcGVybC9TTk1QLy5jdnNpZ25vcmUsIHBlcmwvU05NUC90Ly5jdnNpZ25vcmUsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci8uY3ZzaWdub3JlLCBwZXJsL2FnZW50Ly5jdnNpZ25vcmUsICAgCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS8uY3ZzaWdub3JlLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlLy5jdnNpZ25vcmUsIHBlcmwvbWFuYWdlci8uY3ZzaWdub3JlLCAgIAorICAgICAgc25tcGxpYi8uY3ZzaWdub3JlLCB0ZXN0aW5nLy5jdnNpZ25vcmUsIHdpbjMyLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9iaW4vLmN2c2lnbm9yZSwgd2luMzIvZW5jb2RlX2tleWNoYW5nZS8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvbGliLy5jdnNpZ25vcmUsIHdpbjMyL2xpYmFnZW50Ly5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzLy5jdnNpZ25vcmUsIHdpbjMyL2xpYm5ldHNubXB0cmFwZC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvbGlic25tcC8uY3ZzaWdub3JlLCB3aW4zMi9saWJzbm1wX2RsbC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvbGlidWNkbWlicy8uY3ZzaWdub3JlLCB3aW4zMi9uZXQtc25tcC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL2xpYnJhcnkvLmN2c2lnbm9yZSwgd2luMzIvbmV0c25tcG1pYnMvLmN2c2lnbm9yZSwgIAorICAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrLy5jdnNpZ25vcmUsIHdpbjMyL3NubXBidWxrZ2V0Ly5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvLmN2c2lnbm9yZSwgd2luMzIvc25tcGQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wZGYvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXBkc2RrLy5jdnNpZ25vcmUsIHdpbjMyL3NubXBnZXQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0Ly5jdnNpZ25vcmUsIHdpbjMyL3NubXBuZXRzdGF0Ly5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wc2V0Ly5jdnNpZ25vcmUsIHdpbjMyL3NubXBzdGF0dXMvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXB0YWJsZS8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wdGVzdC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wdHJhcC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkLy5jdnNpZ25vcmUsIHdpbjMyL3NubXB1c20vLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXB2YWNtLy5jdnNpZ25vcmUsIHdpbjMyL3NubXB3YWxrLy5jdnNpZ25vcmU6CisKKyAgIFJlbW92ZSByZWR1bmRhbnQgQ1ZTLWFkbWluIGZpbGVzLgogCiAyMDA3LTA2LTA3IDEyOjU2ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9zZWNtb2QuYzoKLSAgICAgSGFuZGxlIHVucmVnaXN0ZXJpbmcgdGhlIGZpcnN0IFNlY3VyaXR5IE1vZGVsIGluIHRoZSBsaXN0LgotICAgICBSZXBvcnRlZCBieSBBbGVrc2FuZHIgTG9tYW5vdi4KKworICAgSGFuZGxlIHVucmVnaXN0ZXJpbmcgdGhlIGZpcnN0IFNlY3VyaXR5IE1vZGVsIGluIHRoZSBsaXN0LgorICAgUmVwb3J0ZWQgYnkgQWxla3NhbmRyIExvbWFub3YuCiAKIDIwMDctMDYtMDcgMDk6MTMgIGR0czEyCiAKICAgICogYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjoKLSAgICAgSW5zdGFsbCBoZWFkZXIgZmlsZXMgZm9yIHN0YXNoX2NhY2hlIGFuZCBzdGFzaF90b19uZXh0IGhlbHBlcnMuCisKKyAgIEluc3RhbGwgaGVhZGVyIGZpbGVzIGZvciBzdGFzaF9jYWNoZSBhbmQgc3Rhc2hfdG9fbmV4dCBoZWxwZXJzLgogCiAyMDA3LTA2LTA3IDA5OjA3ICBkdHMxMgogCiAgICAqIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46Ci0gICAgIFNlcGFyYXRlIG91dCBoZWFkZXIgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBDCi0gICAgIHNvdXJjZSBmaWxlLgorCisgICBTZXBhcmF0ZSBvdXQgaGVhZGVyIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgQworICAgc291cmNlIGZpbGUuCiAKIDIwMDctMDYtMDcgMDg6NTkgIGR0czEyCiAKICAgICogYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjoKLSAgICAgU29ydCBsaXN0cyBvZiBoZWxwZXJzIChzb3VyY2UgY29kZSwgb2JqZWN0IGZpbGVzIGFuZCBoZWFkZXJzKS4KLSAgICAgVGhpcyBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBvbWl0dGVkLgorCisgICBTb3J0IGxpc3RzIG9mIGhlbHBlcnMgKHNvdXJjZSBjb2RlLCBvYmplY3QgZmlsZXMgYW5kIGhlYWRlcnMpLgorICAgVGhpcyBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBvbWl0dGVkLgogCiAyMDA3LTA2LTA3IDA4OjQyICBkdHMxMgogCiAgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLSAgICAgUHJvdGVjdCBhZ2FpbnN0IHN5c3RlbXMgd2l0aG91dCBTX0lTRElSLgorCisgICBQcm90ZWN0IGFnYWluc3Qgc3lzdGVtcyB3aXRob3V0IFNfSVNESVIuCisKKzIwMDctMDYtMDYgMjI6MzYgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIFdlIGFyZW4ndCB1c2luZyBsaWJ0b29scyBkbG9wZW4gc3VwcG9ydCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworICAgY29uZmlndXJlIGZvciBpdAogCiAyMDA3LTA2LTA2IDEyOjM3ICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIENIQU5HRVM6IEFJWDogdXNlICItV2wsLWJydGwiIHdoZW4gY29tcGlsaW5nIHdpdGggZ2NjCisKKyAgIENIQU5HRVM6IEFJWDogdXNlICItV2wsLWJydGwiIHdoZW4gY29tcGlsaW5nIHdpdGggZ2NjCisKKzIwMDctMDYtMDYgMTA6MjYgIG1hZ2ZyCisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVtb3ZlIHRoZSB1bnVzZWQgdW5kZWYgSEFWRV9QRVJMX0VWQUxfUFYuCisgICBUaGUgUGVybF9ldmFsX3B2IGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBieSB0aGUKKyAgIEhBVkVfUEVSTF9FVkFMX1BWX1tVTF1DIGRlZmluZXMsCisgICB0aGlzIG9uZSBpcyBuZXZlciBzZXQgYnkgb3VyIGNvbmZpZ3VyZSBzY3JpcHQuCiAKIDIwMDctMDYtMDYgMTA6MjAgIGR0czEyCiAKICAgICogYXBwcy9zbm1wdHJhcGQuYzoKLSAgICAgRW5zdXJlIG91dHB1dCBpcyBwcm9wZXJseSBkaXJlY3RlZCB0byBzeXNsb2cuCi0gICAgIE90aGVyd2lzZSwgcHJvYmxlbXMgaW4gdGhlIGNvbmZpZyBlbnZpcm9ubWVudCBjYW4gdHJpZ2dlcgotICAgICBlcnJvcnMgYmVpbmcgZGlyZWN0ZWQgdG8gc3RkZXJyLCBhbmQgc3Vic2VxdWVudCBsb2dnaW5nCi0gICAgIG91dHB1dCBnZXRzIGxvc3QuCisKKyAgIEVuc3VyZSBvdXRwdXQgaXMgcHJvcGVybHkgZGlyZWN0ZWQgdG8gc3lzbG9nLgorICAgT3RoZXJ3aXNlLCBwcm9ibGVtcyBpbiB0aGUgY29uZmlnIGVudmlyb25tZW50IGNhbiB0cmlnZ2VyCisgICBlcnJvcnMgYmVpbmcgZGlyZWN0ZWQgdG8gc3RkZXJyLCBhbmQgc3Vic2VxdWVudCBsb2dnaW5nCisgICBvdXRwdXQgZ2V0cyBsb3N0LgogCiAyMDA3LTA2LTA2IDEwOjEzICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKLSAgICAgTW9yZSBoZWxwZnVsIGRlYnVnZ2luZyBvdXRwdXQuCisKKyAgIE1vcmUgaGVscGZ1bCBkZWJ1Z2dpbmcgb3V0cHV0LgogCiAyMDA3LTA2LTA2IDA1OjUzICBtYWdmcgogCi0gICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQ6Ci0gICAgIENIQU5HRVM6IG1pc2M6IERvbid0IHVzZSB0aGUgbGVnYWN5IHN5bWJvbAotICAgICBTTk1QVFJBUERfRElTQUJMRV9BR0VOVFgKKyAgICogIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210OgorCisgICBDSEFOR0VTOiBtaXNjOiBEb24ndCB1c2UgdGhlIGxlZ2FjeSBzeW1ib2wKKyAgIFNOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWAorCisyMDA3LTA2LTA1IDE3OjQ5ICBtYWdmcgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBSZW1vdmUgZXhwbGljaXQgZGVmaW5pdGlvbnMgb2YgaXRlbXMgdGhhdAorICAgYXV0b2hlYWRlciBhbHNvIGRlZmluZXMKIAogMjAwNy0wNi0wNSAxNTo1OSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE3Mjk2Mjk6IEZpeCBtZW1vcnkgbGVhayBpbiBkaXNtYW4KLSAgICAgYWdlbnQuCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNzI5NjI5OiBGaXggbWVtb3J5IGxlYWsgaW4gZGlzbWFuCisgICBhZ2VudC4KKworMjAwNy0wNi0wNSAxNDo1MiAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFN1cHBvcnQgcGVyLXRyYXAgZm9ybWF0IHNwZWNpZmljYXRpb25zCisKKzIwMDctMDYtMDUgMDY6NTcgIG1hZ2ZyCisKKyAgICogbmV0LXNubXAtY29uZmlnLmluOgorCisgICBORVdTOiBtaXNjOiBBZGQgY29uZmlnIHJlcmVhZGluZyBzdXBwb3J0IHRvIHRoZSBzdWJhZ2VudAorICAgZ2VuZXJhdGVkIGJ5IG5ldC1zbm1wLWNvbmZpZyAtLWNvbXBpbGUtc3ViYWdlbnQKKworMjAwNy0wNi0wNCAyMjoyOSAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogU2ltcGxpZnkgdGhlIGRldGVjdGlvbiBvZiBsaWJyYXJpZXMgbmVlZGVkIGZvcgorICAgZ2V0aG9zdGJ5bmFtZQogCiAyMDA3LTA2LTA0IDIyOjA2ICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLSAgICAgTkVXUzogc25tcGxpYjogQ2hhbmdlIHNubXBfc2Vzc19hZGRfZXggdG8gY29uc2lzdGVudGx5IGNsb3NlIGFuZAotICAgICBkZWxldGUgdGhlIHRyYW5zcG9ydCBhcmd1bWVudCBvbiBmYWlsdXJlLCBlYXJsaWVyIHRoZSBsaXZlbmVzcyBvZgotICAgICB0aGUgdHJhbnNwb3J0IGFyZ3VtZW50IHdhcyB1bmRlY2lkZWQuCiAKLTIwMDctMDYtMDQgMTU6NTAgIGhhcmRha2VyCi0KLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnByZTIgKQotCi0yMDA3LTA2LTA0IDE1OjUwICBoYXJkYWtlcgotCi0gICAqIENIQU5HRVMsIE5FV1M6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDYtMDQgMTU6NDQgIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA2LTA0IDE1OjQyICBoYXJkYWtlcgotCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZDoKLSAgICAgbWFrZSBkZXBlbmQKLQotMjAwNy0wNi0wNCAxNTo0MSAgaGFyZGFrZXIKLQotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCi0KLTIwMDctMDYtMDQgMTU6MzkgIGhhcmRha2VyCi0KLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucHJlMiApCisgICBORVdTOiBzbm1wbGliOiBDaGFuZ2Ugc25tcF9zZXNzX2FkZF9leCB0byBjb25zaXN0ZW50bHkgY2xvc2UgYW5kCisgICBkZWxldGUgdGhlIHRyYW5zcG9ydCBhcmd1bWVudCBvbiBmYWlsdXJlLCBlYXJsaWVyIHRoZSBsaXZlbmVzcyBvZgorICAgdGhlIHRyYW5zcG9ydCBhcmd1bWVudCB3YXMgdW5kZWNpZGVkLgogCiAyMDA3LTA2LTA0IDE0OjM2ICBoYXJkYWtlcgogCi0gICAqIE1ha2VmaWxlLmluLCB0ZXN0aW5nL1JVTlRFU1RTOgotICAgICBDSEFOR0VTOiB0ZXN0OiBzdXBwb3J0IGEgLW4gZmxhZyB0byBSVU5URVNUUyB0byBwcmludCB0aGUgdGVzdAotICAgICBudW1iZXIgZm91bmQgaW4gdGhlIHRlc3QgZmlsZSBhcyBvcHBvc2VkIHRvIHRoZSBudW1lcmljYWwgY291bnQKKyAgICogTWFrZWZpbGUuaW4sIGRpc3QvbWFrZXJlbGVhc2UsIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIENIQU5HRVM6IHRlc3Q6IHN1cHBvcnQgYSAtbiBmbGFnIHRvIFJVTlRFU1RTIHRvIHByaW50IHRoZSB0ZXN0CisgICBudW1iZXIgZm91bmQgaW4gdGhlIHRlc3QgZmlsZSBhcyBvcHBvc2VkIHRvIHRoZSBudW1lcmljYWwgY291bnQKIAogMjAwNy0wNi0wNCAxMzowOSAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgotICAgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyMzc6IGZyb20gbWl0c3VydV9jaGluZW46IE1vdmUKLSAgICAgdmFyaWFibGUgZGVjbGFyYXRpb24gYXQgdGhlIHRvcCBvZiBuZXRzbm1wX3VkcF9zZW5kdG8KKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjM3OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBNb3ZlCisgICB2YXJpYWJsZSBkZWNsYXJhdGlvbiBhdCB0aGUgdG9wIG9mIG5ldHNubXBfdWRwX3NlbmR0bworCisyMDA3LTA2LTA0IDEyOjUyICB0YW5kZXJzCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyMzM6IGZyb20gbWl0c3VydV9jaGluZW46IG1ha2Ugc3VyZQorICAgdHlwZSBuZmRzX3QgaXMgZGVmaW5lZAogCiAyMDA3LTA2LTA0IDEyOjEzICB0YW5kZXJzCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIGNvbmZpZ3VyZSwKLSAgICAgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAotICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgotICAgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyMzA6IGZyb20gbWl0c3VydV9jaGluZW46IGFkZAotICAgICBjb25maWd1cmUgY2hlY2sgZm9yIGdhaV9zdHJlcnJvcigpCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjMwOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBhZGQKKyAgIGNvbmZpZ3VyZSBjaGVjayBmb3IgZ2FpX3N0cmVycm9yKCkKIAogMjAwNy0wNi0wNCAxMDozNSAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjI2OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBtYWtlIHN1cmUKLSAgICAgSUZfTkFNRVNJWkUgaXMgZGVmaW5lZAorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyMjY6IGZyb20gbWl0c3VydV9jaGluZW46IG1ha2Ugc3VyZQorICAgSUZfTkFNRVNJWkUgaXMgZGVmaW5lZAorCisyMDA3LTA2LTA0IDEwOjI4ICB0YW5kZXJzCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjIzOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBhZGQKKyAgIGNvbmZpZ3VyZSBjaGVjayBmb3IgbmV0bGluayBzb2NrZXQKIAogMjAwNy0wNi0wNCAwOTo0NyAgdGFuZGVycwogCiAgICAqIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0OgotICAgICBhbHNvIHNraXAgdGhpcyB0ZXN0IG9uIElSSVg2NAorCisgICBhbHNvIHNraXAgdGhpcyB0ZXN0IG9uIElSSVg2NAorCisyMDA3LTA2LTAyIDE2OjEzICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogRml4IGNvbXBpbGF0aW9uIG9uIElSSVgKIAogMjAwNy0wNi0wMiAwODoyNCAgbWFnZnIKIAotICAgKiBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZHluaXguaCwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oLCBzbm1wbGliL3NubXBfYXBpLmMsCi0gICAgIHdpbjMyL2NvbmZpZy5oLmJvcmxhbmQsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgQ0hBTkdFUzogc25tcGFwaTogRG8gbm90IHVzZSBnZXRzZXJ2YnluYW1lIHRvIGZpbmQgZGVmYXVsdCBwb3J0Ci0gICAgIG51bWJlcnMsIGp1c3QgaGFyZGNvZGUgdGhlbSBhbmQgbGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZW0gaWYKLSAgICAgbmVlZGVkLgorICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZHluaXguaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgd2luMzIvY29uZmlnLmguYm9ybGFuZCwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGFwaTogRG8gbm90IHVzZSBnZXRzZXJ2YnluYW1lIHRvIGZpbmQgZGVmYXVsdCBwb3J0CisgICBudW1iZXJzLCBqdXN0IGhhcmRjb2RlIHRoZW0gYW5kIGxldCB0aGUgdXNlciBvdmVycmlkZSB0aGVtIGlmCisgICBuZWVkZWQuCiAKIDIwMDctMDYtMDEgMjI6NTUgIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IExpbmsgbGliZGwgYWdhaW5zdCBsaWJuZXRzbm1wbWlicyBpbnN0ZWFkIG9mCi0gICAgIHNubXBkLgotICAgICBGaXhlcyB0aGUgYnVpbGQgb24gKHNvbWUpIFNvbGFyaXMgc3lzdGVtcy4KIAotMjAwNy0wNi0wMSAyMTozNiAgZHRzMTIKKyAgIENIQU5HRVM6IGJ1aWxkOiBMaW5rIGxpYmRsIGFnYWluc3QgbGlibmV0c25tcG1pYnMgaW5zdGVhZCBvZgorICAgc25tcGQuCisgICBGaXhlcyB0aGUgYnVpbGQgb24gKHNvbWUpIFNvbGFyaXMgc3lzdGVtcy4KIAotICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IEZFQVRVUkVTOiAxMDQxODg4OiBDaGVjayBkaXJlY3RvcnkgcGF0aHMgZm9yCi0gICAgIGNvbmZpZyBmaWxlcy4KLSAgICAgQmFja3BvcnQgZnJvbSBtYWluIGRldmVsb3BtZW50IHRydW5rIG9mIGJ1ZyBmaXguCisyMDA3LTA2LTAxIDIyOjM0ICB0YW5kZXJzCiAKLTIwMDctMDYtMDEgMjE6MjMgIGR0czEyCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgogCi0gICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogRkVBVFVSRVM6IDg1MTg4NzogUmVwb3J0IHJhbmdlIGluZm9ybWF0aW9uIGZvcgotICAgICBpbnZhbGlkIFNFVCByZXF1ZXN0cy4KLSAgICAgQmFja3BvcnQgZnJvbSBtYWluIHRydW5rIG9mIGJ1ZyBmaXguCisgICBmaXggTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwgY29uZmlndXJlIGNoZWNrIG9uIElSSVgKKyAgIChyZWdyZXNzaW9uIGZyb20gcjE2NDUxKQorCisyMDA3LTA2LTAxIDE0OjMzICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIE5FV1M6IHNubXB0cmFwZDogV2l0aGRyYXcgZGVwcmVjYXRlZCBvcHRpb25zLgorICAgKFRocmVlIGFuZCBhIGhhbGYgeWVhcnMnIHdhcm5pbmcgc2hvdWxkIGJlIGVub3VnaCBmb3IgYW55b25lISkKIAogMjAwNy0wNS0zMSAyMzo1MSAgdGFuZGVycwogCi0gICAqIGFnZW50L01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwKLSAgICAgbmV0LXNubXAtY29uZmlnLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogTGluayBsaWJrdm0gYW5kIGxpYndyYXAgdG8gbGlibmV0c25tcGFnZW50Ci0gICAgIGluc3RlYWQgb2Ygc25tcGQuCi0gICAgIEZpeGVzIHRlc3QgIzQ0IChQZXJsIHN1YmFnZW50KSBvbiBzeXN0ZW1zIHVzaW5nIG9uZSBvZiB0aG9zZQotICAgICBsaWJyYXJpZXMuCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBMaW5rIGxpYmt2bSBhbmQgbGlid3JhcCB0byBsaWJuZXRzbm1wYWdlbnQKKyAgIGluc3RlYWQgb2Ygc25tcGQuCisgICBGaXhlcyB0ZXN0ICM0NCAoUGVybCBzdWJhZ2VudCkgb24gc3lzdGVtcyB1c2luZyBvbmUgb2YgdGhvc2UKKyAgIGxpYnJhcmllcy4KKworMjAwNy0wNS0zMSAyMzo0MiAgbWFnZnIKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IE1vdmUgc3lzT1JMYXN0Q2hhbmdlIGZyb20gbWliSUkvc3lzdGVtX21pYiB0bworICAgbWliSUkvc3lzT1JUYWJsZSBpbiBvcmRlciB0byBrZWVwIHRoZSBkYXRhIGFuZCB0aGUgdXNlIHRvZ2V0aGVyLgogCiAyMDA3LTA1LTMxIDE0OjM5ICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHRyYXBkX2xvZy5jOgotICAgICBGaXggbG9nZ2luZyBvZiBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4KKworICAgRml4IGxvZ2dpbmcgb2YgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uCiAKIDIwMDctMDUtMzEgMTA6MTAgIGR0czEyCiAKICAgICogYXBwcy9zbm1wdHJhcGRfbG9nLmM6Ci0gICAgIFJlbW92ZSBib2d1cyBkZWJ1ZyBvdXRwdXQuCisKKyAgIFJlbW92ZSBib2d1cyBkZWJ1ZyBvdXRwdXQuCisKKzIwMDctMDUtMzEgMDk6NDggIGR0czEyCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgUmVtb3ZlIHJlZHVuZGFudCBjb2RlLgorCisyMDA3LTA1LTMxIDA5OjQzICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXB0cmFwZDogRkVBVFVSRTogMTE1OTk0NzogQWxsb3cgY29udHJvbCBvZiB0cmFwaGFuZGxlCisgICBkYXRhIGZvcm1hdAogCiAyMDA3LTA1LTMwIDIyOjUzICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIHBlcmwvQVNOL01ha2VmaWxlLlBMLAotICAgICBwZXJsL09JRC9NYWtlZmlsZS5QTCwgcGVybC9TTk1QL01ha2VmaWxlLlBMLAotICAgICBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwKLSAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMOgotICAgICBDSEFOR0VTOiBBSVg6IGJ1aWxkIGZpeGVzIGZvciBlbWJlZGRlZCBQZXJsCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgcGVybC9BU04vTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL09JRC9NYWtlZmlsZS5QTCwgcGVybC9TTk1QL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEw6CisKKyAgIENIQU5HRVM6IEFJWDogYnVpbGQgZml4ZXMgZm9yIGVtYmVkZGVkIFBlcmwKKworMjAwNy0wNS0zMCAyMjozNCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBIUC1VWCAxMS54IGFuZCBJUklYIDYuNSBidWlsZCBmaXggKHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieQorICAgcjE2NDUxKQorCisyMDA3LTA1LTI5IDIzOjA0ICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBtYWtlIHVzZSBvZiBBQ19QUk9HX1NFRC9BQ19QUk9HX0dSRVAgYW5kIC8gdG8KKyAgIGZ1cnRoZXIgbWluaW1pemUgc2VkL2dyZXAgcHJvYmxlbXMKIAogMjAwNy0wNS0yOSAyMjo0MiAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IFVzZSB0aGUgZGVmYXVsdF90YXJnZXQgYXJndW1lbnQgaWYgaXQgaXMKLSAgICAgbm9uLU5VTEwsIG5vdCBpZiBpdCBpcyBOVUxMLgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBVc2UgdGhlIGRlZmF1bHRfdGFyZ2V0IGFyZ3VtZW50IGlmIGl0IGlzCisgICBub24tTlVMTCwgbm90IGlmIGl0IGlzIE5VTEwuCisKKzIwMDctMDUtMjkgMTA6MzAgIHRhbmRlcnMKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFJlbW92ZSBtb3JlIG5ldC1zbm1wIHNwZWNpYWxzIGluIHRoZSBjb25maWd1cmUKKyAgIHNjcmlwdHMgdG8gZWFzZSBtYWludGVuYW5jZS4KKyAgIEFsc28gY2hhbmdlIHJlY2VudGx5IGFkZGVkIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19TU19GQU1JTFkuCiAKIDIwMDctMDUtMjkgMTA6MjcgIHRhbmRlcnMKIAogICAgKiBSRUFETUUuYWdlbnQtbWliczoKLSAgICAgYWRkIHJlY2VudCBtZmQgcmV3cml0ZXMKKworICAgYWRkIHJlY2VudCBtZmQgcmV3cml0ZXMKKworMjAwNy0wNS0yOSAxMDoyMiAgdGFuZGVycworCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogUmVtb3ZlIG1vcmUgbmV0LXNubXAgc3BlY2lhbHMgaW4gdGhlIGNvbmZpZ3VyZQorICAgc2NyaXB0cyB0byBlYXNlIG1haW50ZW5hbmNlLgorICAgQWxzbyBjaGFuZ2Ugd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggZm9yIGNvbnNpc3RlbmN5LgorCisyMDA3LTA1LTI4IDIzOjMwICBtYWdmcgorCisgICAqICBQT1JUSU5HLCBhY2NvbmZpZy5oLCBhY2luY2x1ZGUubTQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9ob3N0X3Jlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q1LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9pcml4LmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N2cjUuaCwgICAKKyAgICAgIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wLXRjLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgIAorICAgICAgIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBSZW1vdmUgbW9yZSBuZXQtc25tcCBzcGVjaWFscyBpbiB0aGUgY29uZmlndXJlCisgICBzY3JpcHRzIHRvIGVhc2UgbWFpbnRlbmFuY2UuCisKKzIwMDctMDUtMjggMTY6MzEgIGR0czEyCisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZiwgbWFuL3NubXBjbWQuMS5kZWYsIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IEZFQVRVUkVTOiAxNDA3NDc2OiBSZW5hbWUgJ3N0cmljdENvbW1lbnRUZXJtJworICAgdG8gcmVmbGVjdCB0aGUgYWN0dWFsIGJlaGF2aW91ci4KKworMjAwNy0wNS0yOCAxNToyNSAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IEZFQVRVUkVTOiAxMDQxODg4OiBDaGVjayBkaXJlY3RvcnkgcGF0aHMgZm9yCisgICBjb25maWcgZmlsZXMuCisKKzIwMDctMDUtMjggMTM6MTMgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBGRUFUVVJFUzogODUxODg3OiBSZXBvcnQgcmFuZ2UgaW5mb3JtYXRpb24gZm9yCisgICBpbnZhbGlkIFNFVCByZXF1ZXN0cy4KKworMjAwNy0wNS0yOCAxMjowOCAgdGFuZGVycworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYzoKKworICAgTkVXUzogU29sYXJpczogUEFUQ0g6IDE3MTk3MzA6IGZyb20gYXBlcnNzb246IHN1cHBvcnQgZm9yCisgICBpcFN5c3RlbVN0YXRzVGFibGUgYW5kIGlwQWRkcmVzc1RhYmxlCisgICBQYXJ0IDIgKFNvbGFyaXMtc3BlY2lmaWMgbmV3IGZpbGVzKQorCisyMDA3LTA1LTI4IDEyOjAyICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmg6CisKKyAgIE5FV1M6IExpbnV4OiBQQVRDSDogMTcyNDYwMjogZnJvbSBtaXRzdXJ1X2NoaW5lbjogbWZkLWJhc2VkCisgICBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbXBsZW1lbnRhdGlvbgorCisyMDA3LTA1LTI4IDEyOjAwICB0YW5kZXJzCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX29pZHMuaDoKKworICAgTkVXUzogTGludXg6IFBBVENIOiAxNzI0NjAyOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBtZmQtYmFzZWQKKyAgIGlwRGVmYXVsdFJvdXRlclRhYmxlIGltcGxlbWVudGF0aW9uCisKKzIwMDctMDUtMjggMTE6NTkgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmg6CisKKyAgIE5FV1M6IExpbnV4OiBQQVRDSDogMTcyNDYwMjogZnJvbSBtaXRzdXJ1X2NoaW5lbjogbWZkLWJhc2VkCisgICBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbXBsZW1lbnRhdGlvbgorCisyMDA3LTA1LTI4IDEwOjA5ICBkdHMxMgorCisgICAqIGFwcHMvc25tcHdhbGsuYywgbWFuL3NubXB3YWxrLjEuZGVmOgorCisgICBEb2N1bWVudCB0aGUgLUNFIG9wdGlvbi4KIAogMjAwNy0wNS0yNyAyMTo0MiAgdGFuZGVycwogCiAgICAqIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMOgotICAgICBTb21lIGxhbWUgbGlua2VycyAoZS5nLiBvbiBIUC1VWCAxMS4yMy9JQTY0KSBuZWVkIHF1aXRlIGEgYml0IG9mCi0gICAgIGhlbHAgdG8gc3VjY2Vzc2Z1bGx5IGxpbmsgdGhlIFBlcmwgbW9kdWxlcy4KKworICAgU29tZSBsYW1lIGxpbmtlcnMgKGUuZy4gb24gSFAtVVggMTEuMjMvSUE2NCkgbmVlZCBxdWl0ZSBhIGJpdCBvZgorICAgaGVscCB0byBzdWNjZXNzZnVsbHkgbGluayB0aGUgUGVybCBtb2R1bGVzLgorCisyMDA3LTA1LTI3IDIxOjMzICBkdHMxMgorCisgICAqIGFwcHMvc25tcHdhbGsuYzoKKworICAgQ0hBTkdFUzogc25tcHdhbGs6IFBBVENIOiAxNzIzNjIwOiBTcGVjaWZ5IGFuIGV4cGxpY2l0IGVuZC1wb2ludAorICAgZm9yIHRoZSB3YWxrLgorICAgQW4gYWx0ZXJuYXRpdmUgKG1vcmUgZmxleGlibGUpIGFwcHJvYWNoIHRvIHRoZSBwcm9wb3NlZCBwYXRjaCwKKyAgIGJ1dCBvbmUgdGhhdAorICAgcHJvdmlkZXMgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5LiBBbHNvIGFkZHJlc3NlcyBGZWF0dXJlIFJlcXVlc3QKKyAgICM3MjI3ODQuCiAKIDIwMDctMDUtMjcgMjA6NTIgIHRhbmRlcnMKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgQWRkIGRlc2NyaXB0aW9ucyB0byBBQ19ERUZJTkU7IGRyb3Agb2Jzb2xldGUgQUNfQ0hFQ0tfTElCKG0sCi0gICAgIGFzaW4pLgogCi0yMDA3LTA1LTI3IDE5OjU0ICBkdHMxMgorICAgQWRkIGRlc2NyaXB0aW9ucyB0byBBQ19ERUZJTkU7IGRyb3Agb2Jzb2xldGUgQUNfQ0hFQ0tfTElCKG0sCisgICBhc2luKS4KIAotICAgKiBzbm1wbGliL3BhcnNlLmM6Ci0gICAgIENIQU5HRVM6IGxpYnJhcnk6IEZFQVRVUkVTOiA0NTQwMjg6IERldGVjdCBhbmQgaGFuZGxlIGVtcHR5IE1JQgotICAgICBpbmRleCBmaWxlcy4KKzIwMDctMDUtMjcgMTk6MjggIGR0czEyCisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogbGlicmFyeTogRkVBVFVSRVM6IDQ1NDAyODogRGV0ZWN0IGVtcHR5IE1JQiBpbmRleCBmaWxlcy4KKworMjAwNy0wNS0yNyAxOTowNiAgZHRzMTIKKworICAgKiAgYWdlbnQvc25tcGQuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wZDogRkVBVFVSRVM6IDEwMTk0Mjk6IFNldCBzdXBwbGVtZW50YXJ5IGdyb3VwcyB2aWEKKyAgIGluaXRncm91cHMoMykKKworMjAwNy0wNS0yNyAwNjoyNyAgdGFuZGVycworCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmg6CisKKyAgIE5FV1M6IFNvbGFyaXM6IFBBVENIOiAxNzE5NzMwOiBmcm9tIGFwZXJzc29uOiBzdXBwb3J0IGZvcgorICAgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZCBpcEFkZHJlc3NUYWJsZQogCiAyMDA3LTA1LTI3IDA2OjIwICB0YW5kZXJzCiAKICAgICogUkVBRE1FLmFpeDoKLSAgICAgZ3JhbW1hciBmaXgKKworICAgZ3JhbW1hciBmaXgKIAogMjAwNy0wNS0yNiAxNjo0MSAgYWxleF9iCiAKLSAgICogUkVBRE1FLndpbjMyLCB3aW4zMi9Db25maWd1cmUsIHdpbjMyL2J1aWxkLnBsLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIFdpbjMyIElQdjYgYnVpbGQgZml4ZXMuIElQdjYgbm93IHJlcXVpcmVzIFBTREsuCisgICAqICBSRUFETUUud2luMzIsIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvYnVpbGQucGwsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0yMDA3LTA1LTI2IDE1OjE0ICBhbGV4X2IKKyAgIFdpbjMyIElQdjYgYnVpbGQgZml4ZXMuIElQdjYgbm93IHJlcXVpcmVzIFBTREsuCiAKLSAgICogUkVBRE1FLndpbjMyLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIElQdjYgYnVpbGQgZml4ZXMgZm9yIGJ1aWxkLmJhdCwgQ29uZmlndXJlIGFuZCBSRUFETUUud2luMzIuCisyMDA3LTA1LTI2IDE1OjE2ICBhbGV4X2IKKworICAgKiAgUkVBRE1FLndpbjMyLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBJUHY2IGJ1aWxkIGZpeGVzIGZvciBidWlsZC5iYXQsIENvbmZpZ3VyZSBhbmQgUkVBRE1FLndpbjMyLgogCiAyMDA3LTA1LTI1IDIzOjAzICB0YW5kZXJzCiAKICAgICogUkVBRE1FLmFpeCwgUkVBRE1FLnNvbGFyaXMsIFJFQURNRS50cnU2NDoKLSAgICAgRG9jdW1lbnRhdGlvbiB1cGRhdGUgdy5yLnQuIHJlY2VudCBjaGFuZ2VzIChtaWJJSS9pcHY2IGFuZCBBSVgKLSAgICAgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcpLgorCisgICBEb2N1bWVudGF0aW9uIHVwZGF0ZSB3LnIudC4gcmVjZW50IGNoYW5nZXMgKG1pYklJL2lwdjYgYW5kIEFJWAorICAgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcpLgorCisyMDA3LTA1LTI1IDE4OjU0ICByc3RvcnkKKworICAgKiBkaXN0L2N2c3Nob3c6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IHVybCBmb3JtYXQgaW4gc3ZuIGVudHJpZXMKIAogMjAwNy0wNS0yNSAxNToyOCAgdGFuZGVycwogCiAgICAqIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTDoKLSAgICAgU29tZSBzeXN0ZW1zIChlLmcuIEhQLVVYIDExLjIzL0lBNjQpIGN1cnJlbnRseSBzdGlsbCBuZWVkCi0gICAgICJuZXQtc25tcC1jb25maWcgLS1saWJzIiAoaW5zdGVhZCBvZiBqdXN0IC0tbmV0c25tcC1saWJzKSBmb3IKLSAgICAgbGlua2luZwotICAgICBsaWJuZXRzbm1wIHRvIGEgUGVybCBtb2R1bGUuCisKKyAgIFNvbWUgc3lzdGVtcyAoZS5nLiBIUC1VWCAxMS4yMy9JQTY0KSBjdXJyZW50bHkgc3RpbGwgbmVlZAorICAgIm5ldC1zbm1wLWNvbmZpZyAtLWxpYnMiIChpbnN0ZWFkIG9mIGp1c3QgLS1uZXRzbm1wLWxpYnMpIGZvcgorICAgbGlua2luZworICAgbGlibmV0c25tcCB0byBhIFBlcmwgbW9kdWxlLgogCiAyMDA3LTA1LTI0IDIzOjU1ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBvbmx5IGVuYWJsZSBtaWJJSS9pcHY2IHRocm91Z2ggLS1lbmFibGUtaXB2NiBvbgotICAgICBzeXN0ZW1zIGl0IGJ1aWxkcyBwcm9wZXJseSBvbiAoTGludXggYW5kICpCU0QpCisKKyAgIENIQU5HRVM6IGJ1aWxkOiBvbmx5IGVuYWJsZSBtaWJJSS9pcHY2IHRocm91Z2ggLS1lbmFibGUtaXB2NiBvbgorICAgc3lzdGVtcyBpdCBidWlsZHMgcHJvcGVybHkgb24gKExpbnV4IGFuZCAqQlNEKQogCiAyMDA3LTA1LTI0IDIzOjE1ICB0YW5kZXJzCiAKICAgICogcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMOgotICAgICBTb21lIHN5c3RlbXMgKGUuZy4gSFAtVVggMTEuMjMvSUE2NCkgY3VycmVudGx5IHN0aWxsIG5lZWQKLSAgICAgIm5ldC1zbm1wLWNvbmZpZyAtLWxpYnMiIChpbnN0ZWFkIG9mIGp1c3QgLS1uZXRzbm1wLWxpYnMpIGZvcgotICAgICBsaW5raW5nIGxpYnNubXBhZ2VudCB0byBhIFBlcmwgbW9kdWxlLgorCisgICBTb21lIHN5c3RlbXMgKGUuZy4gSFAtVVggMTEuMjMvSUE2NCkgY3VycmVudGx5IHN0aWxsIG5lZWQKKyAgICJuZXQtc25tcC1jb25maWcgLS1saWJzIiAoaW5zdGVhZCBvZiBqdXN0IC0tbmV0c25tcC1saWJzKSBmb3IKKyAgIGxpbmtpbmcgbGlic25tcGFnZW50IHRvIGEgUGVybCBtb2R1bGUuCiAKIDIwMDctMDUtMjQgMjI6MDEgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jOgotICAgICBDb3JyZWN0IG9idmlvdXNseSBicm9rZW4gdXNlIG9mIHRoZSBLTE9PS1VQIG1hY3JvIHRvIGJlCi0gICAgIGNvbnNpc3RlbnQgYXQgbGVhc3QKKworICAgQ29ycmVjdCBvYnZpb3VzbHkgYnJva2VuIHVzZSBvZiB0aGUgS0xPT0tVUCBtYWNybyB0byBiZQorICAgY29uc2lzdGVudCBhdCBsZWFzdAogCiAyMDA3LTA1LTI0IDIwOjUxICB0YW5kZXJzCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDcuaDoKLSAgICAgQ0hBTkdFUzogRnJlZUJTRDogYWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgdXBjb21pbmcgRnJlZUJTRCA3CisKKyAgIENIQU5HRVM6IEZyZWVCU0Q6IGFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHVwY29taW5nIEZyZWVCU0QgNworCisyMDA3LTA1LTI0IDE0OjA2ICByc3RvcnkKKworICAgKiBNYWtlZmlsZS50b3A6CisKKyAgIGJ1bXAgbGliY3VycmVudCB0byAyMCB0byBsZWF2ZSBzcGFjZSBmb3IgNS40LnggcmVsZWFzZXMKIAogMjAwNy0wNS0yNCAxMjo0OCAgdGFuZGVycwogCiAgICAqIGFnZW50L01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluOgotICAgICBmaXggbGlicmFyeSBsaW5raW5nIG9uIEhQLVVYIDExLjIzL0lBNjQKIAotMjAwNy0wNS0yNCAwODozNiAgdGFuZGVycwotCi0gICAqIE1ha2VmaWxlLnRvcDoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogaW5jcmVtZW50ICJjdXJyZW50IiBhbmQgImFnZSIgYWNjb3JkaW5nIHRvCi0gICAgIGxpYnRvb2wKLSAgICAgdmVyc2lvbmluZyBwb2xpY3ksIHNpbmNlIGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIDUuNC4KLSAgICAgV2Ugbm93IGJ1aWxkIGxpYm5ldHNubXAuc28uMTUuMS4wLgotICAgICA1LjQuMS5wcmUxIHdhcyBicm9rZW4gaW4gdGhpcyByZWdhcmQuCisgICBmaXggbGlicmFyeSBsaW5raW5nIG9uIEhQLVVYIDExLjIzL0lBNjQKIAogMjAwNy0wNS0yMyAxOTowNSAgdGFuZGVycwogCi0gICAqIE1ha2VmaWxlLmluLCBNYWtlZmlsZS5ydWxlcywgYWdlbnQvTWFrZWZpbGUuaW4sCi0gICAgIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwKLSAgICAgY29uZmlndXJlLmluLCBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwKLSAgICAgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLAotICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsIHNubXBsaWIvTWFrZWZpbGUuaW46Ci0gICAgIE5FV1M6IHNubXBsaWI6IEJVRzogMTYxOTgyNzogbGluayBuZXQtc25tcCBsaWJyYXJpZXMgYW5kIGJpbmFyaWVzCi0gICAgIGFnYWluc3QgdGhlIG5ldC1zbm1wIGxpYnJhcmllcyB0aGV5IHJlYWxseSBkZXBlbmQgb24KLSAgICAgLSByZWZsZWN0IGxpYnJhcnkgaW50ZXJkZXBlbmRlbmNpZXMgYXQgbGluayB0aW1lCi0gICAgIC0gZml4IGRlcGVuZGVuY2llcyBvbiBsaWJjcnlwdG8sIGxpYnBrY3MxMSBhbmQgbGlia3N0YXQKLSAgICAgLSBpbnN0YWxsIGxpYnJhcmllcyBpbiBjb3JyZWN0IG9yZGVyIChpbXBvcnRhbnQgZm9yIGxpYnRvb2wKLSAgICAgcmVsaW5raW5nKQotICAgICBORVdTOiBQZXJsOiBsaW5rIFBlcmwgbW9kdWxlcyBhZ2FpbnN0IHRoZSBleGFjdCBzZXQgb2YgbGlicmFyaWVzCi0gICAgIHRoZXkgZGVwZW5kIG9uCisgICAqICBNYWtlZmlsZS5pbiwgTWFrZWZpbGUucnVsZXMsIGFnZW50L01ha2VmaWxlLmluLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmluLCBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgc25tcGxpYi9NYWtlZmlsZS5pbjoKIAotMjAwNy0wNS0yMiAxNDo0MCAgaGFyZGFrZXIKKyAgIE5FV1M6IHNubXBsaWI6IEJVRzogMTYxOTgyNzogbGluayBuZXQtc25tcCBsaWJyYXJpZXMgYW5kIGJpbmFyaWVzCisgICBhZ2FpbnN0IHRoZSBuZXQtc25tcCBsaWJyYXJpZXMgdGhleSByZWFsbHkgZGVwZW5kIG9uCisgICAtIHJlZmxlY3QgbGlicmFyeSBpbnRlcmRlcGVuZGVuY2llcyBhdCBsaW5rIHRpbWUKKyAgIC0gZml4IGRlcGVuZGVuY2llcyBvbiBsaWJjcnlwdG8sIGxpYnBrY3MxMSBhbmQgbGlia3N0YXQKKyAgIC0gaW5zdGFsbCBsaWJyYXJpZXMgaW4gY29ycmVjdCBvcmRlciAoaW1wb3J0YW50IGZvciBsaWJ0b29sCisgICByZWxpbmtpbmcpCisgICBORVdTOiBQZXJsOiBsaW5rIFBlcmwgbW9kdWxlcyBhZ2FpbnN0IHRoZSBleGFjdCBzZXQgb2YgbGlicmFyaWVzCisgICB0aGV5IGRlcGVuZCBvbgogCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwKLSAgICAgcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwKLSAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIHBlcmwvYWdlbnQvYWdlbnQucG0sCi0gICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLAotICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgc2Vkc2NyaXB0LmluLAotICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICB2ZXJzaW9uIHN0YW1wIDUuNC4xLnByZTEKKzIwMDctMDUtMjIgMTY6MjYgIGhhcmRha2VyCiAKLTIwMDctMDUtMjIgMDA6MjQgIGhhcmRha2VyCisgICAqIGRpc3QvbWFrZXJlbGVhc2U6CiAKLSAgICogQ0hBTkdFUywgTkVXUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNS0yMiAwMDoxOSAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDUtMjIgMDA6MDEgIGhhcmRha2VyCi0KLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgotICAgICBtYWtlIGRlcGVuZAorICAgdXNlIHN2biBleHBvcnQgaW5zdGVhZCBvZiBjaGVja291dAogCiAyMDA3LTA1LTIyIDAwOjAwICBoYXJkYWtlcgogCiAgICAqIE1ha2VmaWxlLmluOgotICAgICBpZ25vcmUgd2luRXh0RExMIGluIGNvbW1lbnQgY2hlY2sKKworICAgaWdub3JlIHdpbkV4dERMTCBpbiBjb21tZW50IGNoZWNrCiAKIDIwMDctMDUtMjEgMjM6NTQgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNpbmZvLmM6Ci0gICAgIC8vIC0+IEMgY29tbWVudAogCi0yMDA3LTA1LTIxIDIzOjUxICBoYXJkYWtlcgorICAgLy8gLT4gQyBjb21tZW50CiAKLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorMjAwNy0wNS0yMSAyMzozMyAgdGFuZGVycworCisgICAqICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzMi4xMC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpczIuNy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpczIuOC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpczIuOS5oOgorCisgICBzeW5jIHdpdGggNS40LCB0aGVzZSBhcmUgb2Jzb2xldGUgbm93CiAKIDIwMDctMDUtMjEgMjM6MTEgIG1hZ2ZyCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBEaXNhYmxlIGlubGluaW5nIG9uIHNvbGFyaXMgYXMgdGhlcmUgYXJlIHNvbWUKLSAgICAgbGlua2luZyBlcnJvcnMgdGhhdCBzaG93IHVwIGlmIHRoZSBpbmxpbmUgc3VwcG9ydCBpcyBsZWZ0Ci0gICAgIGVuYWJsZWQuCi0KLTIwMDctMDUtMjEgMjI6NDYgIGhhcmRha2VyCi0KLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucHJlMSApCi0KLTIwMDctMDUtMjEgMjI6MjIgIGhhcmRha2VyCi0KLSAgICogTWFrZWZpbGUudG9wOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA1LTIxIDIzOjUxICBoYXJkYWtlcgotCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQotCi0yMDA3LTA1LTIxIDIzOjExICBtYWdmcgogCiAgICBDSEFOR0VTOiBidWlsZGluZzogRGlzYWJsZSBpbmxpbmluZyBvbiBzb2xhcmlzIGFzIHRoZXJlIGFyZSBzb21lCiAgICBsaW5raW5nIGVycm9ycyB0aGF0IHNob3cgdXAgaWYgdGhlIGlubGluZSBzdXBwb3J0IGlzIGxlZnQKICAgIGVuYWJsZWQuCiAKLTIwMDctMDUtMjEgMjI6NDYgIGhhcmRha2VyCisyMDA3LTA1LTIxIDA2OjA1ICBtYWdmcgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjEucHJlMSApCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgogCi0yMDA3LTA1LTIxIDIyOjIyICBoYXJkYWtlcgotCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgQ0hBTkdFUzogYnVpbGRpbmc6IEF0IGxlYXN0IFN1biBDIDUuNyBmYWlscyBpZiBvbmUgdHJpZXMgdG8KKyAgIGFjY2VzcyBfX2Z1bmNfXyBpbiBhIGV4dGVybiBpbmxpbmUgZnVuY3Rpb24sIHNvIHRlc3QgZm9yIHRoYXQKKyAgIGNhc2UuCiAKIDIwMDctMDUtMjAgMjE6MzQgIHRhbmRlcnMKIAotCSogYWdlbnQvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotCSAgTkVXUzogc25tcGxpYjogQlVHOiAxNjE5ODI3OiBsaW5rIGFnYWluc3QgbmVlZGVkIGV4dGVybmFsCi0JICBsaWJyYXJpZXMgYXQgbGlicmFyeSBsaW5rIHRpbWUgKHdoZXJlIHRoZXkgYXJlIHJlZmVyZW5jZWQpLAotCSAgcmF0aGVyIHRoYW4gYXBwbGljYXRpb24gbGluayB0aW1lLgotCSAgQWxyZWFkeSBjb3ZlcnMgbW9zdCBvZiBsaWJuZXRzbm1wbWlicycgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLgotCSAgRml4ZXMgYnVpbGQgaXNzdWVzIG9uIHNvbWUgcGxhdGZvcm1zIChlLmcuIGJ1aWxkaW5nIHdpdGggc2hhcmVkCi0JICBsaWJyYXJpZXMgb24gQUlYKS4gVGVzdGVkIG9uIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBMaW51eCwKLQkgIFNvbGFyaXMsIEhQLVVYLCBBSVggYW5kIElSSVguCisgICAqIGFnZW50L01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgTkVXUzogc25tcGxpYjogQlVHOiAxNjE5ODI3OiBsaW5rIGFnYWluc3QgbmVlZGVkIGV4dGVybmFsCisgICBsaWJyYXJpZXMgYXQgbGlicmFyeSBsaW5rIHRpbWUgKHdoZXJlIHRoZXkgYXJlIHJlZmVyZW5jZWQpLAorICAgcmF0aGVyIHRoYW4gYXBwbGljYXRpb24gbGluayB0aW1lLgorICAgQWxyZWFkeSBjb3ZlcnMgbW9zdCBvZiBsaWJuZXRzbm1wbWlicycgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLgorICAgRml4ZXMgYnVpbGQgaXNzdWVzIG9uIHNvbWUgcGxhdGZvcm1zIChlLmcuIGJ1aWxkaW5nIHdpdGggc2hhcmVkCisgICBsaWJyYXJpZXMgb24gQUlYKS4gVGVzdGVkIG9uIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBMaW51eCwKKyAgIFNvbGFyaXMsIEhQLVVYLCBBSVggYW5kIElSSVguCiAKIDIwMDctMDUtMTkgMTU6MjcgIG1hZ2ZyCiAKLQkqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLAotCSAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLQkgIENIQU5HRVM6IGJ1aWxkaW5nOiBDaGVjayBmb3Igc3VwcG9ydCBvZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucwotCSAgaW5zdGVhZCBvZiBuZXN0ZWQgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgd2hlbiBkZXRlcm1pbmluZyBpZgotCSAgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgd29yaworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogQ2hlY2sgZm9yIHN1cHBvcnQgb2Ygc3RhdGljIGlubGluZSBmdW5jdGlvbnMKKyAgIGluc3RlYWQgb2YgbmVzdGVkIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHdoZW4gZGV0ZXJtaW5pbmcgaWYKKyAgIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHdvcmsKKworMjAwNy0wNS0xOSAwODo0MCAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCB3aW4zMi9jb25maWcuaC5ib3JsYW5kLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSB1c2Ugb2YgdGhlIEM5OSBwcmVkZWZpbmVkIHZhcmlhYmxlCisgICBfX2Z1bmNfXyBpbiBhZGRpdGlvbiB0byB0aGUgR0NDIHN5bWJvbCBfX0ZVTkNUSU9OX18gdG8gZ2V0IHRoZQorICAgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbgorCisyMDA3LTA1LTE4IDE4OjEyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE3MjEwOTY6IGZyb20gbWl0c3VydV9jaGluZW46IHJlbW92ZQorICAgdW51c2VkIHZhcmlhYmxlIHN0YXRzIGZyb20ga2VybmVsIGV4dHJhY3Rpb24gZm9yIGJldHRlcgorICAgcG9ydGFiaWxpdHkuCiAKIDIwMDctMDUtMTggMTg6MDggIGhhcmRha2VyCiAKLQkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNzE5MjU0OiBmcm9tICJDaHJpc3RhbiBKdW5nIjogdXBkYXRlCi0JICBIUkZTX2lnbm9yZSBsaXN0IHRvIGN1cnJlbnQgbGludXggbGlrZWx5aG9vZHMKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTcxOTI1NDogZnJvbSAiQ2hyaXN0YW4gSnVuZyI6IHVwZGF0ZQorICAgSFJGU19pZ25vcmUgbGlzdCB0byBjdXJyZW50IGxpbnV4IGxpa2VseWhvb2RzCiAKIDIwMDctMDUtMTggMTg6MDIgIGhhcmRha2VyCiAKLQkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgotCSAgTkVXUzogc25tcGQ6IHBhdGNoOiAxNzE5MjUzOiBmcm9tICJDaHJpc3RpYW4gSnVuZyI6IGZpeAotCSAgc2tpcE5GU0luSG9zdFJlc291cmNlcyBzbyBpdCBkb2VzIG5vdCBicmVhayBvbiB0aGUgc2Vjb25kIHdhbGsgb2YKLQkgIHRoZSB0YWJsZS4KKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6CisKKyAgIE5FV1M6IHNubXBkOiBwYXRjaDogMTcxOTI1MzogZnJvbSAiQ2hyaXN0aWFuIEp1bmciOiBmaXgKKyAgIHNraXBORlNJbkhvc3RSZXNvdXJjZXMgc28gaXQgZG9lcyBub3QgYnJlYWsgb24gdGhlIHNlY29uZCB3YWxrIG9mCisgICB0aGUgdGFibGUuCisKKzIwMDctMDUtMTggMTc6NTUgIG1hZ2ZyCisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVyYW4gYXV0b2hlYWRlciBhbmQgYWRqdXN0ZWQgYWNjb25maWcuaCBhZnRlciBjaGFuZ2VzIGluIHIxNjM4NworCisyMDA3LTA1LTE4IDE3OjU0ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNzE1NDA2OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiByZWdpc3RyYXRpb24KKyAgIG9yZGVyaW5nIGZpeGVzIGZvciBpY21wU3RhdHNUYWJsZQorCisyMDA3LTA1LTE4IDE3OjQ2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNzE1Mzk1OiBmaXggaWNtcCB0YWJsZSBlcnJvcnMgaW4gbmV3IGljbXAKKyAgIGNvZGUKKworMjAwNy0wNS0xOCAxNzo0NSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIAogCiAyMDA3LTA1LTE4IDE1OjA1ICB0YW5kZXJzCiAKLQkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotCSAgTkVXUzogQUlYOiBmaXggZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBidWlsZGluZyBpbnN0ZWFkIG9mIGZvcmNpbmcKLQkgIHN0YXRpYworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgTkVXUzogQUlYOiBmaXggZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBidWlsZGluZyBpbnN0ZWFkIG9mIGZvcmNpbmcKKyAgIHN0YXRpYworCisyMDA3LTA1LTE4IDE0OjE4ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIEFDX0NIRUNLX01FTUJFUlMgaW5zdGVhZCBvZgorICAgQUNfQ0hFQ0tfU1RSVUNUX0ZPUiB3aGVuIGNoZWNraW5nIGZvciBzdHJ1Y3QgaXBzdGF0IG1lbWJlcnMgaW4KKyAgIG9yZGVyIHRvIG1ha2UgY29uZmlndXJlLmluIHNtYWxsZXIKIAogMjAwNy0wNS0xOCAxMDoyMiAgbWFnZnIKIAotCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmg6Ci0JICBDSEFOR0VTOiBzbm1wZDogQ29ycmVjdCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBmb3IKLQkgIGhvc3QvaHJfc3RvcmFnZQorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IENvcnJlY3QgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gZm9yCisgICBob3N0L2hyX3N0b3JhZ2UKKworMjAwNy0wNS0xOCAwOTo1NyAgbWFnZnIKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBEbyBub3QgdGVybWluYXRlIG9uIFNJR0NITEQgc2luY2UgZGFzaCBhbmQKKyAgIHNvdW1lIGJvdXJuZSBzaGVsbHMgd2lsbCBleGl0IHRoZSBtYWluIHNoZWxsIHdoZW4gYSBzdWJzaGVsbAorICAgdGVybWluYXRlcyBpbiB0aGF0IGNhc2UuCisKKzIwMDctMDUtMTggMDk6MjIgIHRhbmRlcnMKKworICAgKiBhcHBzL3NubXB1c20uYzoKKworICAgVW5kb2luZyBhY2NpZGVudGFsIGNoYW5nZSBjb21taXR0ZWQgaW4gcjE2MzczLgorCisyMDA3LTA1LTE3IDIzOjIxICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODczMzc6IEltcGxlbWVudCBfc2Vzc19vcGVuIGluIHRlcm1zCisgICBvZiBzbm1wX3Nlc3NfYWRkCiAKIDIwMDctMDUtMTcgMjI6MTYgIG1hZ2ZyCiAKLQkqIGFnZW50L2FnZW50X3RyYXAuYywgYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB0cmFwZC5jLAotCSAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywKLQkgIHNubXBsaWIvc25tcF9hcGkuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTYyMDQyNDogRml4IG5vdGlmaWNhdGlvbiBzZW5kaW5nIHNvIHRoYXQKLQkgIGV4cGxpY2l0IHNwZWNpZmljYXRpb24gb2YgcG9ydCAxNjIgc2hvdWxkIGJlIHVubmVjZXNzYXJ5Ci0JICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIOiAxNjIwNDI0OiBGaXggbm90aWZpY2F0aW9uIHJlY2VwdGlvbiBzbwotCSAgdGhhdCBleHBsaWNpdCBzcGVjaWZpY2F0aW9uIG9mIHBvcnQgMTYyIHNob3VsZCBiZSB1bm5lY2Vzc2FyeQotCSAgQ0hBTkdFUzogYXBwczogUEFUQ0g6IDE2MjA0MjQ6IEZpeCBub3RpZmljYXRpb24gc2VuZGluZyBzbyB0aGF0Ci0JICBleHBsaWNpdCBzcGVjaWZpY2F0aW9uIG9mIHBvcnQgMTYyIHNob3VsZCBiZSB1bm5lY2Vzc2FyeQotCSAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2MjA0MjQ6IEhvbm9yCi0JICBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQgb3ZlciB0aGUgZGVmYXVsdCBzeXN0ZW0KKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjIwNDI0OiBGaXggbm90aWZpY2F0aW9uIHNlbmRpbmcgc28gdGhhdAorICAgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiBvZiBwb3J0IDE2MiBzaG91bGQgYmUgdW5uZWNlc3NhcnkKKyAgIENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0g6IDE2MjA0MjQ6IEZpeCBub3RpZmljYXRpb24gcmVjZXB0aW9uIHNvCisgICB0aGF0IGV4cGxpY2l0IHNwZWNpZmljYXRpb24gb2YgcG9ydCAxNjIgc2hvdWxkIGJlIHVubmVjZXNzYXJ5CisgICBDSEFOR0VTOiBhcHBzOiBQQVRDSDogMTYyMDQyNDogRml4IG5vdGlmaWNhdGlvbiBzZW5kaW5nIHNvIHRoYXQKKyAgIGV4cGxpY2l0IHNwZWNpZmljYXRpb24gb2YgcG9ydCAxNjIgc2hvdWxkIGJlIHVubmVjZXNzYXJ5CisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTYyMDQyNDogSG9ub3IKKyAgIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCBvdmVyIHRoZSBkZWZhdWx0IHN5c3RlbQogCiAyMDA3LTA1LTE3IDIxOjUzICBoYXJkYWtlcgogCi0JKiBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLAotCSAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLAotCSAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLAotCSAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE3MTA2MzI6IGZyb20gbWF2YXJsZXk6IGZpeCBtZW1vcnkgbGVhayBvbgotCSAgYnJva2VuIGNvbnRhaW5lciBpbnNlcnRpb25zIGZvciB0aGUgaXBBZGRyZXNzVGFibGUKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNzEwNjMyOiBmcm9tIG1hdmFybGV5OiBmaXggbWVtb3J5IGxlYWsgb24KKyAgIGJyb2tlbiBjb250YWluZXIgaW5zZXJ0aW9ucyBmb3IgdGhlIGlwQWRkcmVzc1RhYmxlCiAKIDIwMDctMDUtMTcgMTg6MDYgIHJzdG9yeQogCi0JKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzoKLQkgIENIQU5HRVM6IFBBVENIOiAxNzE5MjQ0OiBmaXggbWZkIGdlbmVyYXRpbmcgbWFwIGZ1bmN0aW9uCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJhY3RpdmUtc2V0dXAubTJjOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTcxOTI0NDogZml4IG1mZCBnZW5lcmF0aW5nIG1hcCBmdW5jdGlvbgorCisyMDA3LTA1LTE3IDE3OjQ2ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuaDoKKworICAgTkVXUzogc25tcGQ6IHBhdGNoOiAxNzA4MjQzOiBmcm9tIG5ob3JtYW46IGltcGxlbWVudCB0aGUKKyAgIGlwRGVmYXVsdFJvdXRlVGFibGUgb24gbGludXgKIAogMjAwNy0wNS0xNyAxNjozMSAgaGFyZGFrZXIKIAotCSogY29uZmlndXJlLmluOgotCSAgTkVXUzogcG9ydHM6IHBhdGNoOiAxNzA2MzQ0OiBmcm9tIG5heWxvcjogZml4IGNvbXBpbGF0aW9uIHdpdGgKLQkgIGN5Z3dpbgorICAgKiBjb25maWd1cmUuaW46CisKKyAgIE5FV1M6IHBvcnRzOiBwYXRjaDogMTcwNjM0NDogZnJvbSBuYXlsb3I6IGZpeCBjb21waWxhdGlvbiB3aXRoCisgICBjeWd3aW4KIAogMjAwNy0wNS0xNyAxNjoyMiAgaGFyZGFrZXIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgotCSAgTkVXUzogc25tcGQ6IHBhdGNoOiAxNzAwMTU3OiBmcm9tIGFmcmlrYTogZml4ZXMgb3JkZXJpbmcgb2YgZXhlYwotCSAgdG9rZW5zIGluIHRoZSByZXN1bHRpbmcgbWliIHRyZWUKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgorCisgICBORVdTOiBzbm1wZDogcGF0Y2g6IDE3MDAxNTc6IGZyb20gYWZyaWthOiBmaXhlcyBvcmRlcmluZyBvZiBleGVjCisgICB0b2tlbnMgaW4gdGhlIHJlc3VsdGluZyBtaWIgdHJlZQogCiAyMDA3LTA1LTE3IDE1OjUzICBoYXJkYWtlcgogCi0JKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYzoKLQkgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTYxNzI1NTogZml4IGxlbmd0aCBvZiB0aGUgaGlzdG9yeSBhcnJheQotCSAgdG8gbWF0Y2ggY29kZS4KKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTYxNzI1NTogZml4IGxlbmd0aCBvZiB0aGUgaGlzdG9yeSBhcnJheQorICAgdG8gbWF0Y2ggY29kZS4KIAogMjAwNy0wNS0xNyAxMzo1MyAgaGFyZGFrZXIKIAotCSogYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdHJhcGQuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTIyNTQ0MDogQXBwbHkgaW50ZW50IG9mIHBhdGNoOiB0byBkZWxheQotCSAgc2lnaHVwIHRpbGwgaXQgaXMgc2FmZS4KLQkgIENIQU5HRVM6IHNubXB0cmFwZDogcGF0Y2g6IDEyMjU0NDA6IEFwcGx5IGludGVudCBvZiBwYXRjaDogdG8KLQkgIGRlbGF5IHNpZ2h1cCB0aWxsIGl0IGlzIHNhZmUuCisgICAqIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTIyNTQ0MDogQXBwbHkgaW50ZW50IG9mIHBhdGNoOiB0byBkZWxheQorICAgc2lnaHVwIHRpbGwgaXQgaXMgc2FmZS4KKyAgIENIQU5HRVM6IHNubXB0cmFwZDogcGF0Y2g6IDEyMjU0NDA6IEFwcGx5IGludGVudCBvZiBwYXRjaDogdG8KKyAgIGRlbGF5IHNpZ2h1cCB0aWxsIGl0IGlzIHNhZmUuCisKKzIwMDctMDUtMTcgMTM6MzUgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSBjb25maWdfZXJyb3IgaW5zdGVhZCBvZiBjb25maWdfcmVxdWlyZSBvZgorICAgYSBib2d1cyBmaWxlLyNlcnJvciB0byBnZW5lcmF0ZSBlcnJvciBtZXNzYWdlcyBhdCBjb25maWd1cmUgdGltZS4KIAogMjAwNy0wNS0xNyAwNDozOSAgaGFyZGFrZXIKIAotCSogc25tcGxpYi9hc24xLmM6Ci0JICBDSEFOR0VTOiBzbm1wbGliOiBwYXRjaDogMTY0NTY5ODogZml4IDY0LWJpdCBzaWduZWQgaW50ZWdlcgotCSAgZW5jb2RpbmcKKyAgICogYXBwcy9zbm1wdXNtLmMsIHNubXBsaWIvYXNuMS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBwYXRjaDogMTY0NTY5ODogZml4IDY0LWJpdCBzaWduZWQgaW50ZWdlcgorICAgZW5jb2RpbmcKIAogMjAwNy0wNS0xNiAyMzo1MyAgdGFuZGVycwogCi0JKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4Lmg6Ci0JICBDSEFOR0VTOiBIUC1VWDogSFAtVVggbmVlZHMgX1JFRU5UUkFOVCBkZWZpbmVkIHRvIHBpY2sgdXAKLQkgIHN0cnRva19yLgotCSAgT3RoZXJ3aXNlLCBhdCBsZWFzdCBmb3IgNjQtYml0IGNvZGUsIHN0cnRva19yIHdpbGwgbm90IHdvcmsKLQkgIGFuZCB3aWxsIG1ha2UgbmV0LXNubXAgc2VnZmF1bHQuCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaDoKKworICAgQ0hBTkdFUzogSFAtVVg6IEhQLVVYIG5lZWRzIF9SRUVOVFJBTlQgZGVmaW5lZCB0byBwaWNrIHVwCisgICBzdHJ0b2tfci4KKyAgIE90aGVyd2lzZSwgYXQgbGVhc3QgZm9yIDY0LWJpdCBjb2RlLCBzdHJ0b2tfciB3aWxsIG5vdCB3b3JrCisgICBhbmQgd2lsbCBtYWtlIG5ldC1zbm1wIHNlZ2ZhdWx0LgorCisyMDA3LTA1LTE2IDIzOjM5ICB0YW5kZXJzCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBmaXggcGF0Y2ggMTYyNTA2OSAocjE2MzY1KSB0byBub3QgYnJlYWsgdGhlIGJ1aWxkIG9uIFNvbGFyaXMKKyAgIDIuNi83CisKKzIwMDctMDUtMTUgMTc6MzMgIHJzdG9yeQorCisgICAqIGRpc3Qvc3ZudXA6CisKKyAgIC0gYWRkIHdhcm5pbmcgaWYgc3RhciBub3QgYXZhaWxhYmxlCisgICAtIGZpeCBwYXR0ZXJuIHRvIGV4Y2x1ZGUgLnN2biBkaXJzIGZyb20gdGFyYmFsbHMKKworMjAwNy0wNS0xNSAxNTo1NSAgcnN0b3J5CisKKyAgICogZGlzdC9jdnN1cDoKKworICAgd2FybiBpZiBzdGFyIG5vdCBhdmFpbGFibGUKIAogMjAwNy0wNS0xNSAxNDozNiAgdGFuZGVycwogCi0JKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYzoKLQkgIGZpeCB0eXBvCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfc29sYXJpcy5jOgorCisgICBmaXggdHlwbwogCiAyMDA3LTA1LTE0IDIxOjQ5ICB0YW5kZXJzCiAKLQkqIGFwcHMvTWFrZWZpbGUuaW46Ci0JICBhZGQgbWlzc2luZyBDRkxBR1MgdG8gbGluayBsaW5lCisgICAqIGFwcHMvTWFrZWZpbGUuaW46CisKKyAgIGFkZCBtaXNzaW5nIENGTEFHUyB0byBsaW5rIGxpbmUKIAogMjAwNy0wNS0xNCAyMTo0OCAgdGFuZGVycwogCi0JKiBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOgotCSAgYWRkIG1pc3NpbmcgQ0ZMQUdTIHRvIGxpbmsgbGluZQorICAgKiBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOgorCisgICBhZGQgbWlzc2luZyBDRkxBR1MgdG8gbGluayBsaW5lCisKKzIwMDctMDUtMTQgMTU6NTcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTYyNTA2OTogc3BlZWQgaW1wcm92ZW1lbnRzIGZvciBzb2xhcmlzCisgICByb3V0aW5nIHRhYmxlIGFjY2VzcwogCiAyMDA3LTA1LTE0IDE0OjUwICBoYXJkYWtlcgogCi0JKiBhZ2VudC9zbm1wX2FnZW50LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE1OTU1Njg6IGZyb20gY3lyaWxfbWFyZ2FyaWE6IGZpeAotCSAgZGVsZWdhdGVkIFNFVCByZXF1ZXN0cyBmcm9tIGFnZW50eCBzdWJhZ2VudHMKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE1OTU1Njg6IGZyb20gY3lyaWxfbWFyZ2FyaWE6IGZpeAorICAgZGVsZWdhdGVkIFNFVCByZXF1ZXN0cyBmcm9tIGFnZW50eCBzdWJhZ2VudHMKKworMjAwNy0wNS0xNCAxNDowNCAgaGFyZGFrZXIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICB1cGRhdGUgdG8gcG9pbnQgdG8gd2lraSBhbmQgYSBmZXcgbW9yZSBjdnMgLT4gc3ZuIGNoYW5nZXMKIAogMjAwNy0wNS0xMyAxNDoyNyAgbWFnZnIKIAotCSogc25tcGxpYi9zbm1wX3NlcnZpY2UuYzoKLQkgIENIQU5HRVM6IHNubXBsaWI6IFJlYWQgdGhlIGNvbmZpZyBwYXJhbWV0ZXJzIGRlZlRhcmdldCBhbmQKLQkgIGRlZkRvbWFpbiBmcm9tIHNubXAuY29uZiBhcyB3ZWxsIGFzIGZyb20gPGFwcGxpY2F0aW9uPi5jb25mCisgICAqIHNubXBsaWIvc25tcF9zZXJ2aWNlLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFJlYWQgdGhlIGNvbmZpZyBwYXJhbWV0ZXJzIGRlZlRhcmdldCBhbmQKKyAgIGRlZkRvbWFpbiBmcm9tIHNubXAuY29uZiBhcyB3ZWxsIGFzIGZyb20gPGFwcGxpY2F0aW9uPi5jb25mCisKKzIwMDctMDUtMTIgMTE6MTcgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogRGVhbGxvY2F0ZSB0aGUgX21pYmluZGV4ZXMgY2FjaGUgaW4KKyAgIHNodXRkb3duX21pYiB0byBtYWtlIGZvciBhIGNsZWFuZXIgZXhpdCBvZiB0aGUgbGlicmFyeQogCiAyMDA3LTA1LTEyIDExOjE0ICBtYWdmcgogCi0JKiBzbm1wbGliL21pYi5jOgotCSAgQ0hBTkdFUzogc25tcGxpYjogRGVhbGxvY2F0ZSB0aGUgY29uZm1pYnMgYW5kIGNvbmZtaWJkaXJzCi0JICB2YXJpYWJsZXMgaW4gc2h1dGRvd25fbWliIHRvIG1ha2UgZm9yIGEgY2xlYW5lciBleGl0IG9mIHRoZQotCSAgbGlicmFyeQorICAgKiBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBEZWFsbG9jYXRlIHRoZSBjb25mbWlicyBhbmQgY29uZm1pYmRpcnMKKyAgIHZhcmlhYmxlcyBpbiBzaHV0ZG93bl9taWIgdG8gbWFrZSBmb3IgYSBjbGVhbmVyIGV4aXQgb2YgdGhlCisgICBsaWJyYXJ5CiAKIDIwMDctMDUtMTEgMjE6MDYgIG1hZ2ZyCiAKLQkqIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2ODczMzY6IFN0YXJ0IHVzaW5nIHRoZSBlbmhhbmNlZAotCSAgcmVhZF9jb25maWcgaW50ZXJmYWNlCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY4NzMzNjogU3RhcnQgdXNpbmcgdGhlIGVuaGFuY2VkCisgICByZWFkX2NvbmZpZyBpbnRlcmZhY2UKIAogMjAwNy0wNS0xMSAyMDozMyAgbWFnZnIKIAotCSogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotCSAgUEFUQ0ggMTY4NzMyOTogQXBwbGllZCBwYXJ0IDIgb2YgdGhlIHBhdGNoIC0gV2hlbiByZWdpc3RlcmluZwotCSAgbXVsdGlwbGUgcHJlbWliIGhhbmRsZXJzIG9ubHkgdGhlIGxhc3Qgb25lIHdhcyByZWdpc3RlcmVkIHByZW1pYiwKLQkgIHRoZSBvdGhlcnMgd2VyZSByZWdpc3RlcmQgYXQgdGhlIG5vcm1hbCB0aW1lLiBUaGlzIHBhdGNoIHB1dHMgYWxsCi0JICByZWdpc3RyYXRpb24gaW4gb25lIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIHByb2JsZW1hdGljIHZhbHVlIGFzCi0JICBhbiBhcmd1bWVudCBhbmQgbWFrZXMgdGhlIG9sZCBmdW5jdGlvbnMgdGhpbiB3cmFwcGVycyBvZiB0aGUgbmV3Ci0JICBvbmUKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBQQVRDSCAxNjg3MzI5OiBBcHBsaWVkIHBhcnQgMiBvZiB0aGUgcGF0Y2ggLSBXaGVuIHJlZ2lzdGVyaW5nCisgICBtdWx0aXBsZSBwcmVtaWIgaGFuZGxlcnMgb25seSB0aGUgbGFzdCBvbmUgd2FzIHJlZ2lzdGVyZWQgcHJlbWliLAorICAgdGhlIG90aGVycyB3ZXJlIHJlZ2lzdGVyZCBhdCB0aGUgbm9ybWFsIHRpbWUuIFRoaXMgcGF0Y2ggcHV0cyBhbGwKKyAgIHJlZ2lzdHJhdGlvbiBpbiBvbmUgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgcHJvYmxlbWF0aWMgdmFsdWUgYXMKKyAgIGFuIGFyZ3VtZW50IGFuZCBtYWtlcyB0aGUgb2xkIGZ1bmN0aW9ucyB0aGluIHdyYXBwZXJzIG9mIHRoZSBuZXcKKyAgIG9uZQogCiAyMDA3LTA1LTExIDIwOjI0ICBtYWdmcgogCi0JKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0JICBDSEFOR0U6IHNubXBsaWI6IFBBVENIIDE2ODczMjk6IEFwcGxpZWQgcGFydCAzIG9mIHRoZSBwYXRjaCAtIHVzZQotCSAgdGhlIHNhbWUgYWxnb3JpdGhtIHRvIGRldGVybWluZSB3aGF0IHRvIHVucmVnaXN0ZXIgYXMgaXMgdXNlZCB0bwotCSAgZGV0ZXJtaW5lIHdoYXQgdG8gcmVnc3RlcgorICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRTogc25tcGxpYjogUEFUQ0ggMTY4NzMyOTogQXBwbGllZCBwYXJ0IDMgb2YgdGhlIHBhdGNoIC0gdXNlCisgICB0aGUgc2FtZSBhbGdvcml0aG0gdG8gZGV0ZXJtaW5lIHdoYXQgdG8gdW5yZWdpc3RlciBhcyBpcyB1c2VkIHRvCisgICBkZXRlcm1pbmUgd2hhdCB0byByZWdzdGVyCiAKIDIwMDctMDUtMTEgMTY6MzIgIG1hZ2ZyCiAKLQkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jOgotCSAgRG9uJ3QgbG9nIGhvc3QvaHJfcHJvYyBldmVudHMgaW4gdGhlIHNubXBkIGRvbWFpbgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuYzoKKworICAgRG9uJ3QgbG9nIGhvc3QvaHJfcHJvYyBldmVudHMgaW4gdGhlIHNubXBkIGRvbWFpbgogCiAyMDA3LTA1LTExIDE2OjI3ICBtYWdmcgogCi0JKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKLQkgIERlY29yYXRlIG1vcmUgZGVidWcgbGluZXMgd2l0aCB0aGUgdGFnIHRoYXQgY29udHJvbHMgdGhlIGxvZworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgRGVjb3JhdGUgbW9yZSBkZWJ1ZyBsaW5lcyB3aXRoIHRoZSB0YWcgdGhhdCBjb250cm9scyB0aGUgbG9nCiAKIDIwMDctMDUtMTEgMTU6MDcgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfc29sYXJpcy5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTYyODYxMzogUmVzdG9yZSBtZW1Ub3RhbEZyZWUuMCBvbiBTb2xhcmlzCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfc29sYXJpcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjI4NjEzOiBSZXN0b3JlIG1lbVRvdGFsRnJlZS4wIG9uIFNvbGFyaXMKIAogMjAwNy0wNS0xMCAyMTo1MiAgdGFuZGVycwogCi0JKiBNYWtlZmlsZS5pbiwgcHl0aG9uL3NldHVwLnB5OgotCSAgTkVXUzogcHl0aG9uOiBQQVRDSDogMTcxNjExNDogTGV0IHB5dGhvbiBidWlsZCBpbiBzb3VyY2UgdHJlZQotCSAgUGF0Y2ggcHJvdmlkZWQgYnkgSm9jaGVuIEZyaWVkcmljaCAoRGViaWFuIHBhdGNoICMzOCkuCisgICAqIE1ha2VmaWxlLmluLCBweXRob24vc2V0dXAucHk6CisKKyAgIE5FV1M6IHB5dGhvbjogUEFUQ0g6IDE3MTYxMTQ6IExldCBweXRob24gYnVpbGQgaW4gc291cmNlIHRyZWUKKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IEpvY2hlbiBGcmllZHJpY2ggKERlYmlhbiBwYXRjaCAjMzgpLgogCiAyMDA3LTA1LTEwIDA1OjE4ICBtYWdmcgogCi0JKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0JICBQQVRDSCAxNjg3MzI5OiBBcHBsaWVkIHBhcnQgMSBvZiB0aGUgcGF0Y2ggLSBsZXNzZW5zIHRoZSBzY29wZSBvZgotCSAgdGhlIGx0bXAyIHZhcmlhYmxlCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgUEFUQ0ggMTY4NzMyOTogQXBwbGllZCBwYXJ0IDEgb2YgdGhlIHBhdGNoIC0gbGVzc2VucyB0aGUgc2NvcGUgb2YKKyAgIHRoZSBsdG1wMiB2YXJpYWJsZQogCiAyMDA3LTA1LTA5IDIzOjU3ICB0YW5kZXJzCiAKLQkqIFJFQURNRS5pcml4OgotCSAgZG9jdW1lbnQgb3B0aW1pemVkIElSSVggY3B1IHN0YXRzCisgICAqIFJFQURNRS5pcml4OgorCisgICBkb2N1bWVudCBvcHRpbWl6ZWQgSVJJWCBjcHUgc3RhdHMKIAogMjAwNy0wNS0wOSAyMzo0OSAgdGFuZGVycwogCi0JKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwKLQkgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzaW5mby5jLAotCSAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNpbmZvLmg6Ci0JICBORVdTOiBpcml4OiBQQVRDSDogMTcwOTc0ODogT3B0aW1pemVkIElSSVggY3B1IHN0YXRzCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNpbmZvLmg6CiAKLTIwMDctMDUtMDkgMjI6MTYgIHRhbmRlcnMKKyAgIE5FV1M6IGlyaXg6IFBBVENIOiAxNzA5NzQ4OiBPcHRpbWl6ZWQgSVJJWCBjcHUgc3RhdHMKIAotCSogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6Ci0JICBGaXggcHJvYmxlbXMgd2l0aCBzaW5nbGUtbGluZSBleHRlbmQgc2NyaXB0cy4KLQkgIChmaXggdHlwbyBpbiByMTYzMzIgZm9yIDUuNC54KQorMjAwNy0wNS0wOSAyMToyMyAgcnN0b3J5CiAKLTIwMDctMDUtMDkgMDE6MTAgIGFsZXhfYgorICAgKiBkaXN0L2N2c3Nob3c6CiAKLQkqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKLQkgIFdpbjMyIGJ1aWxkIGZpeGVzLgorICAgdXBkYXRlIHRvIHNob3cgc3ZuIHJlcG8gdG9vCisKKzIwMDctMDUtMDkgMTU6MzkgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIGljbXBTdGF0c1RhYmxlIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIExpbnV4CiAKIDIwMDctMDUtMDggMTk6NDggIG1hZ2ZyCiAKLQkqIGFnZW50L3NubXBfYWdlbnQuYzoKLQkgIFJldmVydCBtaXN0YWtlbmx5IGNvbW1pdHRlZCBleHRyYSB0cmFjZSBsb2dzCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgUmV2ZXJ0IG1pc3Rha2VubHkgY29tbWl0dGVkIGV4dHJhIHRyYWNlIGxvZ3MKIAogMjAwNy0wNS0wNyAyMDo0NiAgaGFyZGFrZXIKIAotCSogcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sCi0JICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS54cywKLQkgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS90ZXN0LnBsOgotCSAgdXBkYXRlIGFnZW50OjpkZWZhdWx0X3N0b3JlIHBlcmwgbW9kdWxlIGZvciBuZXcgZGVmcworICAgKiAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS54cywgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS90ZXN0LnBsOgorCisgICB1cGRhdGUgYWdlbnQ6OmRlZmF1bHRfc3RvcmUgcGVybCBtb2R1bGUgZm9yIG5ldyBkZWZzCisKKzIwMDctMDUtMDcgMjA6MjQgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgbW9yZSBzdm4gY29udmVyc2lvbiBmaXhlcwogCiAyMDA3LTA1LTA3IDIwOjIzICBoYXJkYWtlcgogCi0JKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX2FnZW50LmMsCi0JICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmOgotCSAgTkVXUzogc25tcGQ6IEJVRzogMTcxMjk4ODogZGVmYXVsdCBhbmQgY29uZmlndXJhYmxlIG1heGltdW0KLQkgIG51bWJlciBvZiB2YXJiaW5kcyByZXR1cm5hYmxlIHRvIGEgR0VUQlVMSyByZXF1ZXN0CisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgsIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBORVdTOiBzbm1wZDogQlVHOiAxNzEyOTg4OiBkZWZhdWx0IGFuZCBjb25maWd1cmFibGUgbWF4aW11bQorICAgbnVtYmVyIG9mIHZhcmJpbmRzIHJldHVybmFibGUgdG8gYSBHRVRCVUxLIHJlcXVlc3QKKworMjAwNy0wNS0wNyAyMDowNSAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICByZW5hbWUgb2YgYnJhbmNoIGRpcnMKKworMjAwNy0wNS0wNyAxNjoxNCAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICBhdHRlbXB0ZWQgKHVudGVzdGVkKSB1cGRhdGUKKworMjAwNy0wNS0wNyAxMzo1NSAgcnN0b3J5CisKKyAgICogZGlzdC9zdm51cDoKKworICAgZG9uJ3QgZGVsZXRlIHRhcmJhbGwgaWYgc2NwIGZhaWxzCiAKIDIwMDctMDUtMDQgMjA6MjcgIHRhbmRlcnMKIAotCSogcGVybC9TTk1QL1NOTVAueHM6Ci0JICBDSEFOR0VTOiBwZXJsOiBmaXggU05NUCBTRVQgZm9yIElQIGFkZHJlc3NlcyBvbiA2NC1iaXQKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IGZpeCBTTk1QIFNFVCBmb3IgSVAgYWRkcmVzc2VzIG9uIDY0LWJpdAogCiAyMDA3LTA1LTA0IDEwOjIyICB0YW5kZXJzCiAKLQkqIE1ha2VmaWxlLmluOgotCSAgaW5zdGFsbCBkcmFnb25mbHkuaAorICAgKiBNYWtlZmlsZS5pbjoKKworICAgaW5zdGFsbCBkcmFnb25mbHkuaAogCiAyMDA3LTA1LTAzIDIzOjAxICB0YW5kZXJzCiAKLQkqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RyYWdvbmZseS5oOgotCSAgQ0hBTkdFUzogQlVHOiAxNzEwOTEwOiBpbml0aWFsIHN1cHBvcnQgZm9yIERyYWdvbkZseSBCU0QKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZHJhZ29uZmx5Lmg6CisKKyAgIENIQU5HRVM6IEJVRzogMTcxMDkxMDogaW5pdGlhbCBzdXBwb3J0IGZvciBEcmFnb25GbHkgQlNECiAKIDIwMDctMDUtMDMgMjI6MTAgIHRhbmRlcnMKIAotCSogcGVybC9TTk1QL1NOTVAueHM6Ci0JICBDSEFOR0VTOiBwZXJsOiBmaXggU05NUCBTRVQgZm9yIElQIGFkZHJlc3NlcyBvbiA2NC1iaXQKLQkgIFBhdGNoIHByb3Bvc2VkIGJ5IEplZmYgTGFuZ2UuCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBmaXggU05NUCBTRVQgZm9yIElQIGFkZHJlc3NlcyBvbiA2NC1iaXQKKyAgIFBhdGNoIHByb3Bvc2VkIGJ5IEplZmYgTGFuZ2UuCisKKzIwMDctMDUtMDMgMTY6MDAgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIGJ1aWxkIGZpeCAoZS5nLiBmb3IgZWFybHkgQUlYKTogdXNlIHVpbnQzMl90IGkucy5vLiBfX3VpbnQzMl90CiAKIDIwMDctMDUtMDIgMTM6MTMgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgotCSAgRml4IHByb2JsZW1zIHdpdGggc2luZ2xlLWxpbmUgZXh0ZW5kIHNjcmlwdHMuCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgorCisgICBGaXggcHJvYmxlbXMgd2l0aCBzaW5nbGUtbGluZSBleHRlbmQgc2NyaXB0cy4KKworMjAwNy0wNS0wMSAxOTo1MSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgorCisgICAtIHRlc3QgZm9yIElGQV9GX1RFTVBPUkFSWSBiZWZvcmUgdXNpbmcKKyAgIC0gcmVtb3ZlIHJlZHVuZGFudCBpZmRlZgogCiAyMDA3LTA1LTAxIDExOjM0ICBkdHMxMgogCi0JKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgotCSAgQ0hBTkdFUzogc25tcHRyYXBkOiBTdXBwb3J0IGZvciBmb3J3YXJkaW5nIHRyYXBzIGJ5IE9JRCBzdWJ0cmVlLgotCSAgKENvbnNpc3RlbnQgd2l0aCBzdWJ0cmVlLWJhc2VkIHNjcmlwdCBwcm9jZXNzaW5nKS4KKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgQ0hBTkdFUzogc25tcHRyYXBkOiBTdXBwb3J0IGZvciBmb3J3YXJkaW5nIHRyYXBzIGJ5IE9JRCBzdWJ0cmVlLgorICAgKENvbnNpc3RlbnQgd2l0aCBzdWJ0cmVlLWJhc2VkIHNjcmlwdCBwcm9jZXNzaW5nKS4KKworMjAwNy0wNC0zMCAxNDo1MSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAzMDA0OiBDb25zb2xpZGF0ZSBzbm1wNiBoYW5kbGluZy4KKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IE5laWwgSG9ybWFuLCBwbHVzIHNvbWUgZXh0cmEgdGlkeWluZyB1cC4KKworMjAwNy0wNC0zMCAxNDozMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAyMzY2OiBTdXBwb3J0IGZvciBpY21wU3RhdHNUYWJsZQorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTmVpbCBIb3JtYW4KKworMjAwNy0wNC0zMCAxNDozMSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDIzNjE6IFJlYWQgc3RhdHMgZnJvbSAvcHJvYy9uZXQvc25tcDYKKworMjAwNy0wNC0zMCAxNDoxNCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgorCisgICBGaXggY29tcGlsYXRpb24gcHJvYmxlbXMgd2hlbiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQuCiAKIDIwMDctMDQtMzAgMTM6MjYgIGR0czEyCiAKLQkqIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jLAotCSAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uaDoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMDczNzogVGlkeSB1cCBzZXRTZXJpYWxObwotCSAgaW1wbGVtZW50YXRpb25zLgorICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDA3Mzc6IFRpZHkgdXAgc2V0U2VyaWFsTm8KKyAgIGltcGxlbWVudGF0aW9ucy4KIAogMjAwNy0wNC0zMCAxMzowNiAgZHRzMTIKIAotCSogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDA3MzI6IEZpeCBkZWJ1ZyBvdXRwdXQgc3RhdGVtZW50cy4KKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMDczMjogRml4IGRlYnVnIG91dHB1dCBzdGF0ZW1lbnRzLgogCiAyMDA3LTA0LTMwIDEzOjAyICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDA3MzA6IFJlbW92ZSB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMDczMDogUmVtb3ZlIHVudXNlZCBleHRlcm4gZGVjbGFyYXRpb24uCiAKIDIwMDctMDQtMzAgMTE6MzIgIGR0czEyCiAKLQkqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY5ODE4NDogUmVnaXN0ZXIgbm9uLWRlZmF1bHQgY29udGV4dAotCSAgaW50ZWdlcnMgYXMgd3JpdGFibGUuCi0JICBQYXRjaCBwcm92aWRlZCBieSBNYXJrIE5heWxvci4KKyAgICogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2OTgxODQ6IFJlZ2lzdGVyIG5vbi1kZWZhdWx0IGNvbnRleHQKKyAgIGludGVnZXJzIGFzIHdyaXRhYmxlLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTWFyayBOYXlsb3IuCisKKzIwMDctMDQtMzAgMTE6MjYgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2OTgxNzogSW1wcm92ZWQgUkZDIDQyOTMgc3VwcG9ydC4KKyAgIEluY2x1ZGVzIG5vbi11bmljYXN0IGFuZCByYW5kb21seSBjaG9zZW4gSVAgYWRkcmVzc2VzLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgVmFydW4gQ2hhbmRyYW1vaGFuCiAKIDIwMDctMDQtMzAgMTE6MDQgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2OTI3Njg6IEZpeCBjb3B5aW5nIG9mIG5vbi1vY3RldC1hbGlnbmVkCi0JICBJUCBhZGRyZXNzIHByZWZpeGVzLgorICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2OTI3Njg6IEZpeCBjb3B5aW5nIG9mIG5vbi1vY3RldC1hbGlnbmVkCisgICBJUCBhZGRyZXNzIHByZWZpeGVzLgorCisyMDA3LTA0LTMwIDEwOjUwICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50Lmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY3MDUxMTogSW1wbGVtZW50IG5ldHdvcmsgY29ubmVjdGlvbgorICAgcHJvY2VzcyBJRCBvYmplY3RzLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgVmFydW4gQ2hhbmRyYW1vaGFuCisKKzIwMDctMDQtMzAgMTA6NDYgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIEZpeCBkZWNsYXJhdGlvbiBvZiBzbm1wX3Nlc3NfcmVhZF9leHRkKCkKIAogMjAwNy0wNC0zMCAxMDoyNSAgZHRzMTIKIAotCSogc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmM6Ci0JICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4NzMyNTogRml4IHByb2JsZW0gd2l0aCBvcGVyYXRvcgotCSAgcHJlY2VkZW5jZS4KKyAgICogc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjg3MzI1OiBGaXggcHJvYmxlbSB3aXRoIG9wZXJhdG9yCisgICBwcmVjZWRlbmNlLgorCisyMDA3LTA0LTMwIDEwOjIxICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4NzMxOTogRGVjbGFyZSBzbm1wX3Nlc3NfcmVhZF9leHRkKCkKKworMjAwNy0wNC0zMCAxMDoxNCAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjg3MzE4OiBNYWtlIF9zZXNzX3NlbHBvbF9pbmZvIHN0YXRpYy4KKworMjAwNy0wNC0zMCAxMDowOSAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjg3MzE3OiBSZW1vdmUgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlCiAKIDIwMDctMDQtMzAgMTA6MDcgIGR0czEyCiAKLQkqIHNubXBsaWIvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi9zbm1wX2FwaS5jOgotCSAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODczMTY6IERvbid0IGRyb3AgY29uc3QgZnJvbSBjYXN0cy4KKyAgICogc25tcGxpYi9zbm1wVW5peERvbWFpbi5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjg3MzE2OiBEb24ndCBkcm9wIGNvbnN0IGZyb20gY2FzdHMuCisKKzIwMDctMDQtMjcgMTA6MjEgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKKworICAgQnJpbmcgZHluYW1pYyBtb2R1bGUgdW5sb2FkIHByb2Nlc3NpbmcgbW9yZSBpbnRvIGxpbmUgd2l0aAorICAgIm5vcm1hbCIgTUlCIG1vZHVsZXMuIFN1Z2dlc3RlZCBieSBNYWdudXMgRnJvbXJlaWRlLgorICAgU2VlIGNvZGVycyB0aHJlYWQgInNodXRkb3duX2ZvbyBvciBkZWluaXRfZm9vIi4KKworMjAwNy0wNC0yNyAxMDoxNyAgZHRzMTIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBVcGRhdGUgcG9zdC1yZWxlYXNlIGFubm91bmNlbWVudCBpbnN0cnVjdGlvbnMuCiAKIDIwMDctMDQtMjQgMTI6MzUgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgotCSAgRml4IGluY29tcGxldGUgT0lEIGhhbmRsaW5nIG9mIHNpbmdsZS1saW5lIGV4dGVuZCBzY3JpcHRzLgotCSAgUmVwb3J0ZWQgYnkgTWF4IG9uIGNvZGVycyBsaXN0LCA3dGggQXByaWwuIFNlZSB0aHJlYWQKLQkgICIuLi4gc2VnZmF1bHQgLi4gd2hlbiBhdHRlbXB0aW5nIFNOTVAgR0VUIG9uIGV4dGVuZCBvciBleGVjIGl0ZW0iCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgorCisgICBGaXggaW5jb21wbGV0ZSBPSUQgaGFuZGxpbmcgb2Ygc2luZ2xlLWxpbmUgZXh0ZW5kIHNjcmlwdHMuCisgICBSZXBvcnRlZCBieSBNYXggb24gY29kZXJzIGxpc3QsIDd0aCBBcHJpbC4gU2VlIHRocmVhZAorICAgIi4uLiBzZWdmYXVsdCAuLiB3aGVuIGF0dGVtcHRpbmcgU05NUCBHRVQgb24gZXh0ZW5kIG9yIGV4ZWMgaXRlbSIKIAogMjAwNy0wNC0yMCAwODozMCAgZHRzMTIKIAotCSogbWFuL3NubXBkLmNvbmYuNS5kZWY6Ci0JICBEb2N1bWVudCB0aGUgYmVoYXZpb3VyIG9mIGEgbG9hZCB0aHJlc2hvbGQgb2YgMC4KLQkgIFJlcG9ydGVkIGJ5IEZvbmcgVHN1aS4KKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIERvY3VtZW50IHRoZSBiZWhhdmlvdXIgb2YgYSBsb2FkIHRocmVzaG9sZCBvZiAwLgorICAgUmVwb3J0ZWQgYnkgRm9uZyBUc3VpLgogCiAyMDA3LTA0LTIwIDA4OjIxICBkdHMxMgogCi0JKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6Ci0JICBMb25nLXRlcm0gbG9hZCBhdmVyYWdlIGlzIGNhbGN1bGF0ZWQgb3ZlciAxNSBtaW51dGVzLCBub3QgMTAuCi0JICBSZXBvcnRlZCBieSBGb25nIFRzdWkKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OgorCisgICBMb25nLXRlcm0gbG9hZCBhdmVyYWdlIGlzIGNhbGN1bGF0ZWQgb3ZlciAxNSBtaW51dGVzLCBub3QgMTAuCisgICBSZXBvcnRlZCBieSBGb25nIFRzdWkKKworMjAwNy0wNC0xOSAxMjo1MyAgZHRzMTIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBUd2VhayBDaGFuZ2VMb2cgaW5zdHJ1Y3Rpb25zIGZvciBTVk4KIAogMjAwNy0wNC0xMCAxNDoxNiAgZHRzMTIKIAotCSogcGVybC9TTk1QL1NOTVAueHM6Ci0JICBEZXRlY3QgT0lEIHJldHJhY2tpbmcgKGFzIHdlbGwgYXMgc2ltcGxlIHJlcGV0aXRpb25zKSB3aGVuCi0JICBidWxrd2Fsa2luZyBhbiBPSUQgdHJlZS4KLQkgIFNlZSB1c2VycyB0aHJlYWQgIm1pc3NpbmcgaW5kaWNlcyBpbiBidWxrd2FsayByZXN1bHQiLgorICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgRGV0ZWN0IE9JRCByZXRyYWNraW5nIChhcyB3ZWxsIGFzIHNpbXBsZSByZXBldGl0aW9ucykgd2hlbgorICAgYnVsa3dhbGtpbmcgYW4gT0lEIHRyZWUuCisgICBTZWUgdXNlcnMgdGhyZWFkICJtaXNzaW5nIGluZGljZXMgaW4gYnVsa3dhbGsgcmVzdWx0Ii4KIAogMjAwNy0wNC0xMCAxMTo0OSAgZHRzMTIKIAotCSogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oOgotCSAgQ2xhcmlmeSBjb3B5cmlnaHQgc3RhdHVzIG9mIFdpbjMyIEFQSSBkZWZpbml0aW9ucy4KKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oOgorCisgICBDbGFyaWZ5IGNvcHlyaWdodCBzdGF0dXMgb2YgV2luMzIgQVBJIGRlZmluaXRpb25zLgogCiAyMDA3LTA0LTEwIDExOjI3ICBkdHMxMgogCi0JKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9keW5peC5oOgotCSAgQ2xhcmlmeSBjb3B5cmlnaHQgc3RhdHVzIG9mIEJTRC1kZXJpdmVkIFRDUFRWKiBkZWZpbml0aW9ucy4KKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZHluaXguaDoKIAotMjAwNy0wNC0wMyAwODo1OSAgdGFuZGVycworICAgQ2xhcmlmeSBjb3B5cmlnaHQgc3RhdHVzIG9mIEJTRC1kZXJpdmVkIFRDUFRWKiBkZWZpbml0aW9ucy4KIAotCSogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6Ci0JICBmaXggc3ludGF4IGVycm9yIGludHJvZHVjZWQgYnkgbGFzdCBwYXRjaAorMjAwNy0wNC0wOSAxNDowMiAgcnN0b3J5CisKKyAgICogZGlzdC9zdm51cDoKKworICAgLSByZW1vdmUgZGVidWdnaW5nCisgICAtIGNoZWNrIHJjIGZvciB0YXIsIGd6aXAgYW5kIHNjcCBzdGVwcworCisyMDA3LTA0LTA2IDE4OjM4ICByc3RvcnkKKworICAgKiBkaXN0L3N2bnVwOgorCisgICBzdm4gZXF1aXZhbGVudCBvZiBjdnN1cAogCiAyMDA3LTA0LTAzIDA4OjU0ICBkdHMxMgogCi0JKiBtYW4vc25tcGQuY29uZi41LmRlZjoKLQkgIEVtcGhhc2lzZSB0aGUgdXNlIG9mIFNOTVB2MyBpbiBEaXNNYW4gbW9uaXRvcmluZy4KLQkgIEZpeCB0aGUgc3ludGF4IG9mIG5vbi1leGlzdGFuY2UvdmFsdWUtY2hhbmdlIHRlc3RzLgorICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgRW1waGFzaXNlIHRoZSB1c2Ugb2YgU05NUHYzIGluIERpc01hbiBtb25pdG9yaW5nLgorICAgRml4IHRoZSBzeW50YXggb2Ygbm9uLWV4aXN0YW5jZS92YWx1ZS1jaGFuZ2UgdGVzdHMuCiAKIDIwMDctMDQtMDIgMTQ6NTUgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDEwNDYzMjc6IFJlc2V0ICJpbmNsdWRlQWxsRGlza3MiIGZsYWcgd2hlbgotCSAgcmVsb2FkaW5nLgorICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDEwNDYzMjc6IFJlc2V0ICJpbmNsdWRlQWxsRGlza3MiIGZsYWcgd2hlbgorICAgcmVsb2FkaW5nLgogCiAyMDA3LTA0LTAyIDE0OjQ1ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjAyMjg2OiBEb24ndCBsZXQgdGFibGUgaG9sZXMgYmxvY2sgbGF0ZXIKLQkgIHJvd3MuCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTYwMjI4NjogRG9uJ3QgbGV0IHRhYmxlIGhvbGVzIGJsb2NrIGxhdGVyCisgICByb3dzLgogCiAyMDA3LTA0LTAyIDEzOjUxICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxMDczNzgyOiBSZXN0b3JlIFBlcmZTdGF0IHZhbHVlcyBmb3IgRnJlZUJTRAotCSAgNS54IHN5c3RlbXMuCi0JICBJdCdzIHVuY2xlYXIgd2h5IHRoZSAibmV3IiBjYWxjdWxhdGlvbiB3YXMgYSkgcHJvcG9zZWQsIGIpCi0JICB3aXRoZHJhd24sCi0JICBhbmQgYykgd2hhdCB3YXMgd3Jvbmcgd2l0aCB0aGUgcHJldmlvdXMgY2FsY3VsYXRpb24gKHdoaWNoIHNlZW1zCi0JICB0bwotCSAgbWF0Y2ggdGhlIG91dHB1dCBvZiAncHMnKQorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDEwNzM3ODI6IFJlc3RvcmUgUGVyZlN0YXQgdmFsdWVzIGZvciBGcmVlQlNECisgICA1Lnggc3lzdGVtcy4KKyAgIEl0J3MgdW5jbGVhciB3aHkgdGhlICJuZXciIGNhbGN1bGF0aW9uIHdhcyBhKSBwcm9wb3NlZCwgYikKKyAgIHdpdGhkcmF3biwKKyAgIGFuZCBjKSB3aGF0IHdhcyB3cm9uZyB3aXRoIHRoZSBwcmV2aW91cyBjYWxjdWxhdGlvbiAod2hpY2ggc2VlbXMKKyAgIHRvCisgICBtYXRjaCB0aGUgb3V0cHV0IG9mICdwcycpCiAKIDIwMDctMDQtMDIgMTM6MDYgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogOTAyNjEwOiBEb24ndCBkaXNjYXJkIHBlbmRpbmcgZGF0YSBmb2xsb3dpbmcKLQkgIGEgVFJBUC4KKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDkwMjYxMDogRG9uJ3QgZGlzY2FyZCBwZW5kaW5nIGRhdGEgZm9sbG93aW5nCisgICBhIFRSQVAuCiAKIDIwMDctMDQtMDIgMTI6NTYgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogOTAyODAxOiBGaXggb3JkZXJpbmcgb2YgU01VWC1yZWdpc3RlcmVkCi0JICBzdWJ0cmVlcy4KKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDkwMjgwMTogRml4IG9yZGVyaW5nIG9mIFNNVVgtcmVnaXN0ZXJlZAorICAgc3VidHJlZXMuCiAKIDIwMDctMDQtMDIgMTI6MzUgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTY4NTA2NzogTW9yZSBwcmVjaXNlIGhhbmRsaW5nIG9mCi0JICBTTk1QdjMtYWRtaW4gTUlCIHRhYmxlcy4KLQkgIFRoaXMgYWN0dWFsbHkgZml4ZXMgdGhyZWUgc2VwYXJhdGUgcHJvYmxlbXM6Ci0JICAqIEEgR0VUIHJlcXVlc3QgZm9yICd2YWNtR3JvdXBOYW1lLntncm91cH0uMC57YW55dGhpbmd9JyB3aWxsCi0JICBzdWNjZWVkCi0JICAoc2luY2UgdGhlIDAgc3ViaWQgYWN0cyBhcyBhIG51bGwtdGVybWluYXRvciBmb3IgdGhlIGdyb3VwIG5hbWUpLgotCSAgKiBBIEdFVCByZXF1ZXN0IGZvciAndmFjbVZpZXdUcmVlRmFtaWx5VHlwZS4iX25vbmUiLjEnIHdpbGwKLQkgIHN1Y2NlZWQKLQkgIChpbXBsaWNpdGx5IGFkZGluZyB0aGUgc3ViaWQgMCB0byB0aGUgaW5jb21wbGV0ZSBPSUQgaW5kZXggdmFsdWUpCi0JICAqIEEgR0VUIHJlcXVlc3QgZm9yICd2YWNtQWNjZXNzU3RhdHVzLiJncm91cCIuIiIuMy40JyB3aWxsCi0JICBzdWNjZWVkCi0JICAoc2luY2UgVkFDTSBjaGVja3MgYWNjZXB0IHRoZSBnaXZlbiBzZWN1cml0eSBsZXZlbCAqb3IqaGlnaGVyKikKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmM6CiAKLTIwMDctMDQtMDIgMTI6MjYgIGR0czEyCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjg1MDY3OiBNb3JlIHByZWNpc2UgaGFuZGxpbmcgb2YKKyAgIFNOTVB2My1hZG1pbiBNSUIgdGFibGVzLgorICAgVGhpcyBhY3R1YWxseSBmaXhlcyB0aHJlZSBzZXBhcmF0ZSBwcm9ibGVtczoKKyAgICogIEEgR0VUIHJlcXVlc3QgZm9yICd2YWNtQWNjZXNzU3RhdHVzLiJncm91cCIuIiIuMy40JyB3aWxsICAgCisgICAgICBzdWNjZWVkICAgIChzaW5jZSBWQUNNIGNoZWNrcyBhY2NlcHQgdGhlIGdpdmVuIHNlY3VyaXR5IGxldmVsCisgICAgICAqb3IqaGlnaGVyKikgIDIwMDctMDQtMDIgMTI6MjYgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgotCSAgQ2hlY2sgdGhhdCBHRVQgcmVxdWVzdHMgbWF0Y2ggYSB2YWxpZCBPSUQuCi0JICAoT3RoZXJ3aXNlIGEgcmVxdWVzdCBmb3IgaHJTdG9yYWdle0NvbHVtbn0ue2luZGV4fS57YW55dGhpbmd9Ci0JICB3aWxsIGlnbm9yZSB0aGUgZXh0cmEgc3ViaWRzLCBhbmQgcmV0dXJuIHN1Y2Nlc3MpCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6CisKKyAgIENoZWNrIHRoYXQgR0VUIHJlcXVlc3RzIG1hdGNoIGEgdmFsaWQgT0lELgorICAgKE90aGVyd2lzZSBhIHJlcXVlc3QgZm9yIGhyU3RvcmFnZXtDb2x1bW59LntpbmRleH0ue2FueXRoaW5nfQorICAgd2lsbCBpZ25vcmUgdGhlIGV4dHJhIHN1YmlkcywgYW5kIHJldHVybiBzdWNjZXNzKQogCiAyMDA3LTA0LTAyIDEyOjIxICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmM6Ci0JICBQcmV2ZW50IGNyYXNoIHdoZW4gd2Fsa2luZyAoaW52YWxpZD8pIEV2ZW50LU1JQiBPYmplY3RzIFRhYmxlLgorICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmM6CisKKyAgIFByZXZlbnQgY3Jhc2ggd2hlbiB3YWxraW5nIChpbnZhbGlkPykgRXZlbnQtTUlCIE9iamVjdHMgVGFibGUuCiAKIDIwMDctMDQtMDIgMTE6MzAgIGR0czEyCiAKLQkqIGRpc3QvbWFrZXJlbGVhc2U6Ci0JICBGaXggYSBjb3VwbGUgb2YgdHlwb3MgaW4gdGhlIHJlLXdvcmtlZCBtYWtlcmVsZWFzZSBzY3JpcHQuCisgICAqIGRpc3QvbWFrZXJlbGVhc2U6CisKKyAgIEZpeCBhIGNvdXBsZSBvZiB0eXBvcyBpbiB0aGUgcmUtd29ya2VkIG1ha2VyZWxlYXNlIHNjcmlwdC4KIAogMjAwNy0wMy0yOSAxMjoxNCAgdGFuZGVycwogCi0JKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLQkgIGZpeCBzeW50YXggZXJyb3IgKCI9PSIgaXMgYmFkKQorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgZml4IHN5bnRheCBlcnJvciAoIj09IiBpcyBiYWQpCisKKzIwMDctMDMtMjcgMDg6NTUgIGR0czEyCisKKyAgICogYWNpbmNsdWRlLm00LCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgUmVhZCB1c2VyLXByb21wdGVkIHZhbHVlcyBmcm9tIG9yaWdpbmFsIHN0ZGluIChub3QgL2Rldi9udWxsKQogCiAyMDA3LTAzLTI3IDA4OjM4ICBkdHMxMgogCi0JKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLQkgIEFjY2VwdCAnMmMnIGFzIGEgdmFsaWQgcmVzcG9uc2Ugd2hlbiBjaG9vc2luZyB0aGUgZGVmYXVsdCB2ZXJzaW9uCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBBY2NlcHQgJzJjJyBhcyBhIHZhbGlkIHJlc3BvbnNlIHdoZW4gY2hvb3NpbmcgdGhlIGRlZmF1bHQgdmVyc2lvbgogCiAyMDA3LTAzLTI3IDA4OjI5ICBkdHMxMgogCi0JKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLQkgIENIQU5HRVM6IGNvbmZpZ3VyZTogQlVHOiAxNTY3MzI0OiBDbGFyaWZ5IHByb21wdGluZyBmb3IKLQkgIHVzZXItc3VwcGxpZWQgdmFsdWVzLgotCSAgTm93IG9ubHkgcmVtZW1iZXJzIChhbmQgdXNlcykgcHJldmlvdXMgdmFsdWVzIHdoZW4gZXhwbGljaXRseQotCSAgdG9sZCB0byBkbyBzbywKLQkgIGUuZy4gY29uZmlndXJlIC1DCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgogCi0yMDA3LTAzLTI1IDIyOjMyICBkdHMxMgorICAgQ0hBTkdFUzogY29uZmlndXJlOiBCVUc6IDE1NjczMjQ6IENsYXJpZnkgcHJvbXB0aW5nIGZvcgorICAgdXNlci1zdXBwbGllZCB2YWx1ZXMuCisgICBOb3cgb25seSByZW1lbWJlcnMgKGFuZCB1c2VzKSBwcmV2aW91cyB2YWx1ZXMgd2hlbiBleHBsaWNpdGx5CisgICB0b2xkIHRvIGRvIHNvLAorICAgZS5nLiBjb25maWd1cmUgLUMKIAotCSogbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYsIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwKLQkgIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKLQkgIFZhcmlhYmxlLWxlbmd0aCBzdHJpbmcgdmFsdWVzIGFyZSBtb3JlIGxpa2VseSB0aGFuIGZpeGVkIGxlbmd0aC4KKzIwMDctMDMtMjcgMDg6MjMgIGR0czEyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIEZpeCBpbmNvbnNpc3RlbmN5IGluIHBhdGNoICMxNjI3MDQ5IC0gPHBvbGwuaD4gdnMgPHN5cy9wb2xsLmg+CisKKzIwMDctMDMtMjUgMjI6MzEgIGR0czEyCisKKyAgICogIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mLCBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIFZhcmlhYmxlLWxlbmd0aCBzdHJpbmcgdmFsdWVzIGFyZSBtb3JlIGxpa2VseSB0aGFuIGZpeGVkIGxlbmd0aC4KIAogMjAwNy0wMy0yNSAyMjoyOCAgZHRzMTIKIAotCSogbG9jYWwvbWliMmMuYXJyYXktdXNlci5jb25mOgotCSAgQ0hBTkdFUzogbWliMmM6IEJVRzogODMzNjczOiBNb3JlIGZvY3VzZWQgc2l6ZSBjaGVja3MuCisgICAqIGxvY2FsL21pYjJjLmFycmF5LXVzZXIuY29uZjoKKworICAgQ0hBTkdFUzogbWliMmM6IEJVRzogODMzNjczOiBNb3JlIGZvY3VzZWQgc2l6ZSBjaGVja3MuCiAKIDIwMDctMDMtMjUgMjE6MjUgIGR0czEyCiAKLQkqIGFnZW50L3NubXBfYWdlbnQuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2NzcwNjM6IENoZWNrIGZvciBmYWlsZWQgbWFsbG9jIGNhbGxzLgorICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2NzcwNjM6IENoZWNrIGZvciBmYWlsZWQgbWFsbG9jIGNhbGxzLgogCiAyMDA3LTAzLTI1IDE5OjAzICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jOgotCSAgQ2hlY2sgU0VUIHJlcXVlc3RzIGFnYWluc3QgdGhlIGNvcnJlY3QgdHlwZSAoSVAgQWRkcmVzcyAhPSBPY3RldAotCSAgU3RyKQorICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jOgogCi0yMDA3LTAzLTI1IDE4OjU4ICBkdHMxMgorICAgQ2hlY2sgU0VUIHJlcXVlc3RzIGFnYWluc3QgdGhlIGNvcnJlY3QgdHlwZSAoSVAgQWRkcmVzcyAhPSBPY3RldAorICAgU3RyKQogCi0JKiBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTY4NTA4MTogQ2hlY2sgZm9yIHZhbGlkIE9JRCBvbiBGcmVlL1VuZG8KLQkgIHBhc3Nlcy4KKzIwMDctMDMtMjUgMTg6NTUgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTY4NTA4MTogQ2hlY2sgZm9yIHZhbGlkIE9JRCBvbiBGcmVlL1VuZG8KKyAgIHBhc3Nlcy4KIAogMjAwNy0wMy0yMyAwOTo0NCAgZHRzMTIKIAotCSogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6Ci0JICBDSEFORUdTOiBzbm1wbGliOiBCVUc6IDE2ODYzODQ6IERvY3VtZW50IG5vbi11c2Ugb2YgJ3JlbW90ZV9wb3J0JwotCSAgZmllbGQuCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBDSEFORUdTOiBzbm1wbGliOiBCVUc6IDE2ODYzODQ6IERvY3VtZW50IG5vbi11c2Ugb2YgJ3JlbW90ZV9wb3J0JworICAgZmllbGQuCiAKIDIwMDctMDMtMjMgMDk6MTkgIGR0czEyCiAKLQkqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpOgotCSAgQWxsb3cgc3BhY2UgZm9yIGV4dGVybmFsIGluZGV4ZXMgd2hlbiBzYXZpbmcgdGFibGUgZW50cmllcy4KLQkgIChTZWUgcGF0Y2ggIzE2NDIyNTUpCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpOgogCi0yMDA3LTAzLTIzIDA5OjE1ICBkdHMxMgorICAgQWxsb3cgc3BhY2UgZm9yIGV4dGVybmFsIGluZGV4ZXMgd2hlbiBzYXZpbmcgdGFibGUgZW50cmllcy4KKyAgIChTZWUgcGF0Y2ggIzE2NDIyNTUpCiAKLQkqIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjQyMjU1OiBIYW5kbGUgc2F2aW5nIGxvbmcKLQkgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZSBlbnRyaWVzLgorMjAwNy0wMy0yMyAwOToxNCAgZHRzMTIKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2NDIyNTU6IEhhbmRsZSBzYXZpbmcgbG9uZworICAgc25tcE5vdGlmeUZpbHRlclRhYmxlIGVudHJpZXMuCisKKzIwMDctMDMtMjMgMDk6MDkgIGR0czEyCisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODE5Nzc6IEFkZCBjYWxsYmFja3MgcHJpb3IgdG8gcmVhZGluZworICAgY29uZmlnLgogCiAyMDA3LTAzLTIzIDA5OjA2ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjc2NDc4OiBmaXggdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzCi0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjc2NDc2OiBmaXggdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzCisgICAqIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY3NjQ3ODogZml4IHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzcworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTY3NjQ3NjogZml4IHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzcwogCiAyMDA3LTAzLTIzIDA5OjAxICBkdHMxMgogCi0JKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0JICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY1MzY3MDogQ29uc2lzdGVudCBTTk1QdjMgYmVoYXZpb3VyCi0JICB3aGVuIG9wZW5pbmcgc2Vzc2lvbnMuCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2NTM2NzA6IENvbnNpc3RlbnQgU05NUHYzIGJlaGF2aW91cgorICAgd2hlbiBvcGVuaW5nIHNlc3Npb25zLgorCisyMDA3LTAzLTIzIDA4OjU3ICBkdHMxMgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjI3MDQ5OiBOZXcgQVBJIHRvIGhhbmRsZSBsYXJnZSBudW1iZXJzCisgICBvZiBmaWxlIGRlc2NyaXB0b3JzLgogCiAyMDA3LTAzLTIyIDE5OjE0ICBkdHMxMgogCi0JKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0JICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4MTAzMDogQmV0dGVyIGhhbmRsaW5nIG9mIGVtcHR5Ci0JICBhcHB0eXBlIGNvbmZpZ3MuCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODEwMzA6IEJldHRlciBoYW5kbGluZyBvZiBlbXB0eQorICAgYXBwdHlwZSBjb25maWdzLgogCiAyMDA3LTAzLTIyIDE5OjEyICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgsCi0JICBhZ2VudC9zbm1wZC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjc4Nzg4OiBCZXR0ZXIgaGFuZGxpbmcgb2YgU01VWCBzb2NrZXQKLQkgIGRlc2NyaXB0b3JzLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5oLCAgIAorICAgICAgYWdlbnQvc25tcGQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjc4Nzg4OiBCZXR0ZXIgaGFuZGxpbmcgb2YgU01VWCBzb2NrZXQKKyAgIGRlc2NyaXB0b3JzLgogCiAyMDA3LTAzLTIyIDE5OjA5ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjgzMDU0OiBzZXQgdWRwRW5kcG9pbnRJbnN0YW5jZSB0bwotCSAgaWRlbnRpZnkgZGlmZmVyZW50IHByb2Nlc3Nlcy4KKyAgICogYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjgzMDU0OiBzZXQgdWRwRW5kcG9pbnRJbnN0YW5jZSB0bworICAgaWRlbnRpZnkgZGlmZmVyZW50IHByb2Nlc3Nlcy4KIAogMjAwNy0wMy0yMSAxMjozNSAgZHRzMTIKIAotCSogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgotCSAgRGVjbGFyZSBPSUQgY29uc3RhbnRzIGFzIHN1Y2ggKHJhdGhlciB0aGFuIEFQSSBjYWxscykuCi0JICBQcm9wb3NlZCBieSBBbGV4IEJ1cmdlcgorICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CiAKLTIwMDctMDMtMjAgMjA6MDggIHJzdG9yeQorICAgRGVjbGFyZSBPSUQgY29uc3RhbnRzIGFzIHN1Y2ggKHJhdGhlciB0aGFuIEFQSSBjYWxscykuCisgICBQcm9wb3NlZCBieSBBbGV4IEJ1cmdlcgogCi0JKiBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYzoKLQkgIE5FV1M6IHNubXBkOiBQQVRDSDogMTY2NjczNzogaW5jbHVkZSBpcHY2IGNvdW50cyBpbgotCSAgdWRwSW5EYXRhZ3JhbXMsIHVkcE5vUG9ydHMsIHVkcEluRXJyb3JzLCB1ZHBPdXREYXRhZ3JhbXMKKzIwMDctMDMtMjAgMjA6MDcgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE2NjY3Mzc6IGluY2x1ZGUgaXB2NiBjb3VudHMgaW4KKyAgIHVkcEluRGF0YWdyYW1zLCB1ZHBOb1BvcnRzLCB1ZHBJbkVycm9ycywgdWRwT3V0RGF0YWdyYW1zCiAKIDIwMDctMDMtMTkgMjI6MDkgIHRhbmRlcnMKIAotCSogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wY3AuYzoKLQkgIHVzZSBwbUZyZWVSZXN1bHQoKSBpbnN0ZWFkIG9mIGZyZWUoKQorICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BjcC5jOgogCi0yMDA3LTAzLTE3IDAwOjI1ICB0YW5kZXJzCisgICB1c2UgcG1GcmVlUmVzdWx0KCkgaW5zdGVhZCBvZiBmcmVlKCkKIAotCSogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgsCi0JICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgsCi0JICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotCSAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNjgxMDczOiAjaWZkZWYgYmFzZWQgY29uZmlnX2Vycm9yIGluc3RlYWQKLQkgIG9mIHNwZWNpYWwgY2FzZXMgaW4gY29uZmlndXJlCi0JICBCYWNrcG9ydCBmcm9tIE1BSU4uCisyMDA3LTAzLTE5IDA5OjM5ICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmM6CisKKyAgIGdldCByaWQgb2YgQysrIGNvbW1lbnRzCiAKIDIwMDctMDMtMTYgMTQ6MDQgIGR0czEyCiAKLQkqIGRpc3QvY2hhbmdlbG9nZml4LCBkaXN0L21ha2VyZWxlYXNlLCBsb2NhbC9WZXJzaW9uLU11bmdlLnBsOgotCSAgQ29udmVydCBidWlsZCBzeXN0ZW0gdG8gU1ZOIHZlcnNpb24uCisgICAqICBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TLCBkaXN0L2NoYW5nZWxvZ2ZpeCwgZGlzdC9tYWtlcmVsZWFzZSwgICAKKyAgICAgIGxvY2FsL1ZlcnNpb24tTXVuZ2UucGw6CisKKyAgIENvbnZlcnQgYnVpbGQgc3lzdGVtIHRvIFNWTiB2ZXJzaW9uLgorCisyMDA3LTAzLTE1IDEwOjU5ICB0YW5kZXJzCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNjgxMDczOiAjaWZkZWYgYmFzZWQgY29uZmlnX2Vycm9yIGluc3RlYWQKKyAgIG9mIHNwZWNpYWwgY2FzZXMgaW4gY29uZmlndXJlCisKKzIwMDctMDMtMTUgMTA6NDcgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmM6CisKKyAgIGdldCByaWQgb2YgQysrIGNvbW1lbnRzCiAKIDIwMDctMDMtMTQgMjM6MzEgIHRhbmRlcnMKIAotCSogUkVBRE1FLmlyaXgsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLAotCSAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wY3AuYywKLQkgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGNwLmg6Ci0JICBORVdTOiBJUklYOiBQQVRDSDogMTY3NTg2OTogZnJvbSBiYmljZTogQ1BVIHN0YXRpc3RpY3MgZm9yIElSSVgKLQkgIGJhc2VkIG9uIFBDUAorICAgKiAgUkVBRE1FLmlyaXgsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wY3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGNwLmg6CisKKyAgIE5FV1M6IElSSVg6IFBBVENIOiAxNjc1ODY5OiBmcm9tIGJiaWNlOiBDUFUgc3RhdGlzdGljcyBmb3IgSVJJWAorICAgYmFzZWQgb24gUENQCisKKzIwMDctMDMtMTQgMjI6MDkgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jLCBhZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9oZWxwZXJzL251bGwuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgYWdlbnQvaGVscGVycy9zY2FsYXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMsIGFnZW50L2hlbHBlcnMvc2VyaWFsaXplLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2ODEwNDM6IGZyb20gbWFnZnI6IGNsZWFuIHVwIGhlbHBlcgorICAgaW5jbHVkZXMKKworMjAwNy0wMy0xNCAyMTo1NCAgdGFuZGVycworCisgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2ODEwMzU6IGZyb20gbWFnZnI6IGltcHJvdmUgbmV0LXNubXAtY29uZmlnCisgICAvYmluL3NoIGNvbXBhdGliaWxpdHkKKworMjAwNy0wMy0xNCAxODozMSAgdGFuZGVycworCisgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNjc4MzAwOiBmcm9tIG1hZ2ZyOiBjb21waWxlLXN1YmFnZW50CisgICBkb2Vzbid0IGNhbGwgc2h1dGRvd25fIG1ldGhvZHMKIAogMjAwNy0wMy0xNCAxNjoxMiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NDQyODA6IERvbid0IGF1dG9tYXRpY2FsbHkgcHJvYmUgZm9yCi0JICB2MyBFbmdpbmVJRHMuCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NDQyODA6IERvbid0IGF1dG9tYXRpY2FsbHkgcHJvYmUgZm9yCisgICB2MyBFbmdpbmVJRHMuCiAKIDIwMDctMDMtMTMgMTA6MjYgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKLQkgIENoZWNrIGZvciB6ZXJvLXNpemUgcHNldWRvLWZpbGVzeXN0ZW1zLiBSZXBvcnQgdGhlbSBhcyBlbXB0eQotCSAgcmF0aGVyIHRoYW4gZnVsbCwgc28gdGhleSB3b24ndCBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLgorICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CiAKLTIwMDctMDMtMTMgMDk6MTEgIHRhbmRlcnMKLQotCSogc25tcGxpYi9taWIuYzoKLQkgIEJhY2sgb3V0IGNoYW5nZXMgdG8gYnJhbmNoZXMgZG9uZSBpbiBTVk4gMTU5NTMgKHBhdGNoIDE2NzgzMDIpCi0JICBiZWNhdXNlIHRoZXkgYXJlIG9ubHkgYXBwcm9wcmlhdGUgZm9yIE1BSU4KKyAgIENoZWNrIGZvciB6ZXJvLXNpemUgcHNldWRvLWZpbGVzeXN0ZW1zLiBSZXBvcnQgdGhlbSBhcyBlbXB0eQorICAgcmF0aGVyIHRoYW4gZnVsbCwgc28gdGhleSB3b24ndCBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLgogCiAyMDA3LTAzLTEzIDA1OjU5ICB0YW5kZXJzCiAKLQkqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuaDoKLQkgIENIQU5HRVM6IFBBVENIOiAxNjc4MzA1OiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBjYWNoZSBpbgotCSAgaGFyZHdhcmUvY3B1L2NwdSBvbiBzaHV0ZG93biAoaGVhZGVyIHBhcnQpCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuaDoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDU6IGZyb20gbWFnZnI6IERlYWxsb2NhdGUgdGhlIGNhY2hlIGluCisgICBoYXJkd2FyZS9jcHUvY3B1IG9uIHNodXRkb3duIChoZWFkZXIgcGFydCkKIAogMjAwNy0wMy0xMiAyMzowOSAgdGFuZGVycwogCi0JKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsCi0JICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmg6Ci0JICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwNjogZnJvbSBtYWdmcjogRGVhbGxvY2F0ZSB0aGUgbG9nIGluCi0JICBub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nCisgICAqICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmg6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc4MzA2OiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBsb2cgaW4KKyAgIG5vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cKIAogMjAwNy0wMy0xMiAyMzowNCAgdGFuZGVycwogCi0JKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmM6Ci0JICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwNTogZnJvbSBtYWdmcjogRGVhbGxvY2F0ZSB0aGUgY2FjaGUgaW4KLQkgIGhhcmR3YXJlL2NwdS9jcHUgb24gc2h1dGRvd24KKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwNTogZnJvbSBtYWdmcjogRGVhbGxvY2F0ZSB0aGUgY2FjaGUgaW4KKyAgIGhhcmR3YXJlL2NwdS9jcHUgb24gc2h1dGRvd24KIAogMjAwNy0wMy0xMiAyMjo1NyAgdGFuZGVycwogCi0JKiBzbm1wbGliL21pYi5jOgotCSAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDI6IGZyb20gbWFnZnI6IG5ldHNubXBfbWliaW5kZXhfbG9hZCBsZWFrcwotCSAgbWVtb3J5CisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc4MzAyOiBmcm9tIG1hZ2ZyOiBuZXRzbm1wX21pYmluZGV4X2xvYWQgbGVha3MKKyAgIG1lbW9yeQogCiAyMDA3LTAzLTEyIDIyOjUwICB0YW5kZXJzCiAKLQkqIHNubXBsaWIvc25tcF9hcGkuYzoKLQkgIENIQU5HRVM6IFBBVENIOiAxNjc4MzAxOiBmcm9tIG1hZ2ZyOiBkZWFsbG9jYXRlIGRvbWFpbiByZWdpc3RyeQotCSAgYXQgc2h1dGRvd24KKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwMTogZnJvbSBtYWdmcjogZGVhbGxvY2F0ZSBkb21haW4gcmVnaXN0cnkKKyAgIGF0IHNodXRkb3duCiAKIDIwMDctMDMtMTIgMjI6MzEgIHRhbmRlcnMKIAotCSogbmV0LXNubXAtY29uZmlnLmluOgotCSAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgyOTg6IGZyb20gbWFnZnI6IGNvbXBpbGUtc3ViYWdlbnQgY2hlY2tzIGZvcgotCSAgYmFkIEhBVkVfU0lHTkFMX0gKKyAgICogbmV0LXNubXAtY29uZmlnLmluOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3ODI5ODogZnJvbSBtYWdmcjogY29tcGlsZS1zdWJhZ2VudCBjaGVja3MgZm9yCisgICBiYWQgSEFWRV9TSUdOQUxfSAorCisyMDA3LTAzLTEyIDIxOjQ3ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjkwNDg6IEFkZCBzdXBwb3J0IGZvcgorICAgaXB2NkludGVyZmFjZUlkZW50aWZpZXIKIAogMjAwNy0wMy0xMiAyMTozNyAgZHRzMTIKIAotCSogYWdlbnQvaGVscGVycy90YWJsZS5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTQxMzcyODogUmVmZXJlbmNlIGluZGV4IHZhbHVlcyBpbiBkZWJ1ZwotCSAgb3V0cHV0IGNvcnJlY3RseS4KKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNDEzNzI4OiBSZWZlcmVuY2UgaW5kZXggdmFsdWVzIGluIGRlYnVnCisgICBvdXRwdXQgY29ycmVjdGx5LgogCiAyMDA3LTAzLTEyIDIxOjM0ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxMTAyMDU4OiBTa2lwIG5vbi1tb3VudGVkIGRpc2tzIChlLmcuIHN3YXAKLQkgIHBhcnRpdGlvbnMpCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTEwMjA1ODogU2tpcCBub24tbW91bnRlZCBkaXNrcyAoZS5nLiBzd2FwCisgICBwYXJ0aXRpb25zKQogCiAyMDA3LTAzLTEyIDIxOjMwICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsCi0JICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsCi0JICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjgxOTM6IFVwZGF0ZSByZWdpc3RyYXRpb24gb2YKLQkgIFJlYXNtTWF4U2l6ZSBzdXBwb3J0LgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjgxOTM6IFVwZGF0ZSByZWdpc3RyYXRpb24gb2YKKyAgIFJlYXNtTWF4U2l6ZSBzdXBwb3J0LgogCiAyMDA3LTAzLTEyIDIxOjI4ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjgxOTM6IEZpeCBjaGVjayBmb3IgdjYgUmVhc21NYXhTaXplCi0JICBzdXBwb3J0LgorICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2ODE5MzogRml4IGNoZWNrIGZvciB2NiBSZWFzbU1heFNpemUKKyAgIHN1cHBvcnQuCiAKIDIwMDctMDMtMTIgMTk6NTYgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY4OTUyOiBJZ25vcmUgem9tYmllIHByb2Nlc3Nlcy4KKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2ODk1MjogSWdub3JlIHpvbWJpZSBwcm9jZXNzZXMuCiAKIDIwMDctMDMtMTIgMTk6NTQgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2NTk4NTogSW1wbGVtZW50IGlwUmVhc21UaW1lb3V0Ci0JICBUaG91Z2ggdGhpcyByZWdpc3RlcnMgYW4gaW5zdGFuY2UsIHJhdGhlciB0aGFuIHRoZSBmdWxsIHNjYWxhcgotCSAgb2JqZWN0CisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY1OTg1OiBJbXBsZW1lbnQgaXBSZWFzbVRpbWVvdXQKKyAgIFRob3VnaCB0aGlzIHJlZ2lzdGVycyBhbiBpbnN0YW5jZSwgcmF0aGVyIHRoYW4gdGhlIGZ1bGwgc2NhbGFyCisgICBvYmplY3QKIAogMjAwNy0wMy0xMiAxOTo1MSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsIHNubXBsaWIvdmFjbS5jOgotCSAgQ0hBTkdFUzogbGlicmFyeTogUEFUQ0hFUzogMTY2NTU0MzogSGFuZGxlIFZBQ00gY2hlY2tzIGNvcnJlY3RseS4KLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY1NTQ5OiBIYW5kbGUgY3JlYXRpbmcgVkFDTSBlbnRyaWVzCi0JICBjb3JyZWN0bHkuCi0JICBbQm90aCBwYXRjaGVzIGFyZSByZXF1aXJlZCBmb3IgY29ycmVjdCBvcGVyYXRpb25dCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgQ0hBTkdFUzogbGlicmFyeTogUEFUQ0hFUzogMTY2NTU0MzogSGFuZGxlIFZBQ00gY2hlY2tzIGNvcnJlY3RseS4KKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY1NTQ5OiBIYW5kbGUgY3JlYXRpbmcgVkFDTSBlbnRyaWVzCisgICBjb3JyZWN0bHkuCisgICBbQm90aCBwYXRjaGVzIGFyZSByZXF1aXJlZCBmb3IgY29ycmVjdCBvcGVyYXRpb25dCiAKIDIwMDctMDMtMTIgMTk6NDcgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NTk2MjM6IEhhbmRsZSBTTVVYIHBlZXJzIHdpdGggYW4gZW1wdHkKLQkgIHBhc3N3b3JkLgorICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NTk2MjM6IEhhbmRsZSBTTVVYIHBlZXJzIHdpdGggYW4gZW1wdHkKKyAgIHBhc3N3b3JkLgorCisyMDA3LTAzLTEyIDE5OjQ0ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NTc3NDE6IEhhbmRsZSA2NC1iaXQgdHlwZXMgdmlhIHBhc3MKKyAgIG1lY2hhbmlzbS4KIAogMjAwNy0wMy0xMiAxOTo0MCAgZHRzMTIKIAotCSogYWdlbnQvYWdlbnRfdHJhcC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NDQyODA6IFVzZSB0aGUgY29ycmVjdCBlbmdpbmVJRCB3aGVuCi0JICBzZW5kaW5nIHYzIHRyYXBzLgorICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjQ0MjgwOiBVc2UgdGhlIGNvcnJlY3QgZW5naW5lSUQgd2hlbgorICAgc2VuZGluZyB2MyB0cmFwcy4KIAogMjAwNy0wMy0xMiAxOTozMiAgZHRzMTIKIAotCSogc25tcGxpYi9zbm1wX2FwaS5jOgotCSAgQ0hBTkdFUzogbGlicmFyeTogUEFUQ0hFUzogMTY0MjA3MTogRG9uJ3QgZmlkZGxlIHdpdGggdGhlIHN0b3JhZ2UKLQkgIG9mIHByZS1leGlzdGluZyB1c2Vycy4KKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBQQVRDSEVTOiAxNjQyMDcxOiBEb24ndCBmaWRkbGUgd2l0aCB0aGUgc3RvcmFnZQorICAgb2YgcHJlLWV4aXN0aW5nIHVzZXJzLgogCiAyMDA3LTAzLTEyIDE5OjMwICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY0MTg2NTogRG9uJ3QgZG91YmxlIGNoZWNrIHNubXBUcmFwT0lECi0JICBpbiB0aGUgZmlsdGVyIHRhYmxlLgorICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjQxODY1OiBEb24ndCBkb3VibGUgY2hlY2sgc25tcFRyYXBPSUQKKyAgIGluIHRoZSBmaWx0ZXIgdGFibGUuCiAKIDIwMDctMDMtMTIgMTk6MjUgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jLAotCSAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjM5NzI2OiBSZXBvcnQgcGh5c2ljYWwgbWVtb3J5Ci0JICBjb3JyZWN0bHkgb24gKkJTRAorICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTYzOTcyNjogUmVwb3J0IHBoeXNpY2FsIG1lbW9yeQorICAgY29ycmVjdGx5IG9uICpCU0QKKworMjAwNy0wMy0wOSAyMTozMSAgdGFuZGVycworCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc0Mjk5OiBmcm9tIG1hZ2ZyOiBMZXNzZW4gdGhlIHNjb3BlIG9mIHRoZSB6b25lCisgICB2YXJpYWJsZSBpbiBkdW1wX3JlYWxsb2Nfb2lkX3RvX2luZXRhZGRyZXNzCisKKzIwMDctMDMtMDkgMjE6MjkgIHRhbmRlcnMKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc0MzAyOiBmcm9tIG1hZ2ZyOiBMZXNzZW4gdGhlIHNjb3BlIG9mIHRoZSBsZW4KKyAgIHZhcmlhYmxlIGluIGNvbnZlcnRfdjJwZHVfdG9fdjEKIAogMjAwNy0wMy0wOCAxNTo1MiAgZHRzMTIKIAotCSogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbmV0YnNkLmgsCi0JICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmg6Ci0JICBJbmNsdWRlIEhvc3QgUmVzb3VyY2VzIE1JQiBvbiBOZXRCU0QgYW5kIE9wZW5CU0QKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL25ldGJzZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oOgorCisgICBJbmNsdWRlIEhvc3QgUmVzb3VyY2VzIE1JQiBvbiBOZXRCU0QgYW5kIE9wZW5CU0QKKworMjAwNy0wMy0wNyAwOTo0MyAgdGFuZGVycworCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzQyOTg6IGZyb20gbWFnZnI6IFJlbW92ZSB1bnVzZWQgc2lua3BvcnQKKyAgIHZhcmlhYmxlCiAKIDIwMDctMDMtMDYgMTM6NTEgIGR0czEyCiAKLQkqIGFnZW50L3NubXBfYWdlbnQuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDExNTk5MDg6IEZpeCBtZW1vcnkgbGVhaworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CiAKLTIwMDctMDMtMDIgMjI6NTggIHRhbmRlcnMKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDExNTk5MDg6IEZpeCBtZW1vcnkgbGVhawogCi0JKiBzbm1wbGliL01TRzAwMDAxLmJpbjoKLQkgIGRlLW1hbmdlIGJpbmFyeSBmaWxlCisyMDA3LTAzLTAyIDIyOjQwICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9NU0cwMDAwMS5iaW46CisKKyAgIG5vIGVvbC1zdHlsZSBmb3IgYmluYXJ5IGZpbGVzCisKKzIwMDctMDMtMDIgMjI6MjYgIHRhbmRlcnMKKworICAgKiBkb2MvcmZjL3NtaVYyL3JmYzI1NzkuZXJyYXRhfjoKKworICAgZG9uJ3Qgc2hpcCBlZGl0b3IgYmFja3VwIGNvcGllcworCisyMDA3LTAzLTAyIDE2OjIwICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9NU0cwMDAwMS5iaW46CisKKyAgIGZsYWcgYXMgYmluYXJ5CiAKIDIwMDctMDMtMDIgMTI6NDQgIHRhbmRlcnMKIAotCSogQ29kaW5nU3R5bGU6Ci0JICBmaXggdHlwbworICAgKiBDb2RpbmdTdHlsZToKKworICAgZml4IHR5cG8KKworMjAwNy0wMy0wMiAwOTo1NyAgZHRzMTIKKworICAgKiBUT0RPOgorCisgICBNaW5vciB0d2VhayAtIHBsYXlpbmcgd2l0aCBTVk4gYXMgbXVjaCBhcyBhbnl0aGluZy4uLi4KKworMjAwNy0wMy0wMSAyMzo1NyAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBtZW50aW9uIHRoYXQgd2UgbW92ZWQgdG8gU1ZOCiAKIDIwMDctMDItMjggMTU6MjcgIGR0czEyCiAKLQkqIENIQU5HRVMsIENoYW5nZUxvZywgTkVXUzoKLQkgIENoZWNrcG9pbnQgc3VtbWFyeSBvZiBDVlMgY2hhbmdlcywgcHJlcGFyYXRvcnkgZm9yIHRoZSBTVk4KLQkgIHN3aXRjaC4KKyAgICogQ0hBTkdFUywgQ2hhbmdlTG9nLCBORVdTOgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNoYW5nZXM6IFY1LjQgLT4gU1ZOIGNoZWNrcG9pbnQgKFY1LTQtcGF0Y2hlcyBicmFuY2gpCisgICBDaGVja3BvaW50IHN1bW1hcnkgb2YgQ1ZTIGNoYW5nZXMsIHByZXBhcmF0b3J5IGZvciB0aGUgU1ZOCisgICBzd2l0Y2guCiAKIDIwMDctMDItMjcgMTM6MzYgIHJzdG9yeQogCkBAIC04MzUxLDE3ICs3MjU0OSwxMiBAQAogCiAgICBhZGQgaGVhZGVyIGZvciBlYXNpZXIgY29uZmlndXJlIC0td2l0aC1taWItbW9kdWxlCiAKLTIwMDctMDItMjcgMTI6MzQgIHJzdG9yeQotCi0gICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oOgotCi0gICBmaWxlIGlwQWRkcmVzc1ByZWZpeFRhYmxlLmggd2FzIGFkZGVkIG9uIGJyYW5jaCBWNS00LXBhdGNoZXMgb24gMjAwNy0wMi0yNyAxMjozNDo1OSArMDAwMAotCi0yMDA3LTAyLTI2IDE0OjU1ICBkdHMxMgorMjAwNy0wMi0yNiAxNDo1NCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzoKIAogICAgUmUtY29ycmVjdCBpbnRlcnByZXRhdGlvbiBvZiAibnVsbCBPSUQiIGluIHRoZSBBZ2VudFggc3BlY3MuCisgICAoZm9yIHRoZSBsYXN0IHRpbWUsIEkgdHJ1c3QhKQogCiAyMDA3LTAyLTI2IDE0OjM3ICBkdHMxMgogCkBAIC04MzczLDE1ICs3MjU2NiwxNSBAQAogCiAgICAqIHBlcmwvOiBBU04vTWFrZWZpbGUuUEwsIE9JRC9NYWtlZmlsZS5QTCwKICAgICAgU05NUC9NYWtlZmlsZS5QTCwgVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLAotICAgICBhZ2VudC9NYWtlZmlsZS5QTCwgYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTAotLCBkZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMOgorICAgICBhZ2VudC9NYWtlZmlsZS5QTCwgYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwKKyAgICAgZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTDoKIAogICAgUHJvbXB0aW5nIGZvciBhIHNpbmdsZSBkaXJlY3RvcnksIG5vdCBhbiBhcnJheS4KIAogMjAwNy0wMi0yNiAxMTozMiAgZHRzMTIKIAotICAgKiBsb2NhbC86IG1pYjJjLmNvbnRhaW5lci5jb25mLCBtaWIyYy5pdGVyYXRlLmNvbmYKLSwgbWliMmMudGFibGVfZGF0YS5jb25mOgorICAgKiBsb2NhbC86IG1pYjJjLmNvbnRhaW5lci5jb25mLCBtaWIyYy5pdGVyYXRlLmNvbmYsCisgICAgIG1pYjJjLnRhYmxlX2RhdGEuY29uZjoKIAogICAgQ0hBTkdFUzogbWliMmM6IEJVRzogMTQyOTQ3MjogUHJvdGVjdCBhZ2FpbnN0IG1pc3NpbmcgaW5zdGFuY2VzIChhbmQgaW52YWxpZCBvYmplY3RzKQogCkBAIC04Mzk5LDE1ICs3MjU5MiwxNSBAQAogCiAyMDA3LTAyLTIzIDIxOjUzICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlOgogCiAgICBhZGQgcXVvdGVzIHRvIGZpeCBzaGVsbCBzeW50YXggZXJyb3Igd2hlbiBlbXB0eQogCi0yMDA3LTAyLTIyIDIyOjQ3ICB0YW5kZXJzCisyMDA3LTAyLTIyIDIyOjM1ICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CiAKLSAgIExhc3QgY29tbWl0IGJyb2tlIHRoZSBidWlsZC4gTm93IGVzY2FwZSBiYWNrc2xhc2hlcyBwcm9wZXJseS4gUGxlYXNlIHJlbWVtYmVyIHRvIHVzZSBhdXRvY29uZiAyLjU5IGZvciB0aGUgcGF0Y2hlcyBicmFuY2hlcyEKKyAgIExhc3QgY29tbWl0IGJyb2tlIHRoZSBidWlsZC4gTm93IGVzY2FwZSBiYWNrc2xhc2hlcyBwcm9wZXJseS4KIAogMjAwNy0wMi0yMiAxNTozOCAgZHRzMTIKIApAQCAtODQ1MiwyMCArNzI2NDUsMTcgQEAKIAogICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTA5NjE2NjogSGFuZGxlIC0td2l0aG91dC1sb2dmaWxlIGNvcnJlY3RseS4KIAotMjAwNy0wMi0xOSAxNjozNiAgZHRzMTIKLQotICAgKiBkaXN0LzogTWFrZWZpbGUsIG5zYi1jb25maWcsIG5zYi1mdW5jdGlvbnMKLSwgbnNiLW5pZ2h0bHksIG5zYi1wYWNrYWdlLAotICAgICBuc2ItcGxhdGZvcm0sIHBhdG1lLCBSRUFETUUuYnVpbGQtc2NyaXB0cwotOgotCi0gICByZW1vdmVkIGRpc3QgZmlsZXMgb25seSB0byBiZSBkaXN0cmlidXRlZCBpbiB0aGUgbWFpbiBDVlMgYnJhbmNoCi0KLTIwMDctMDItMTkgMTY6MzAgIGR0czEyCisyMDA3LTAyLTE5IDE2OjM0ICBkdHMxMgogCiAgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CiAKLSAgIFJlbGVhc2UgSW5zdHJ1Y3Rpb25zIG9ubHkgdG8gYmUgZGlzdHJpYnV0ZWQgaW4gdGhlIG1haW4gQ1ZTIGJyYW5jaAorICAgTWVudGlvbiByZW1vdmFsIGZyb20gQ1ZTIG9mIGRlbGV0ZWQgZmlsZXMKKworMjAwNy0wMi0xOSAxNTo1NiAgZHRzMTIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBSZXdvcmsgcmVsZWFzZSBpbnN0cnVjdGlvbnMgdG8gdGFrZSBhY2NvdW50IG9mICJtYWtlcmVsZWFzZSIgc2NyaXB0CiAKIDIwMDctMDItMTkgMTA6NDkgIGR0czEyCiAKQEAgLTg0ODQsNyArNzI2NzQsNyBAQAogICAgKiBNYWtlZmlsZS5pbjoKIAogICAgRG9uJ3QgaW52b2tlICd2ZXJzaW9udGFnJyBmb3IgdGFnZ2luZyB0aGUgQ1ZTIHRyZWUuCi0gICBJdCBkb2Vzbid0IGhhbmRsZSB0aGlzIGFueSBtb3JlLiAoVXNlICdtYWtlcmVsZWFzZScgaW5zdGVhZCkKKyAgIEl0IGRvZXNuJ3QgaGFuZGxlIHRoaXMgYW55IG1vcmUuICAoVXNlICdtYWtlcmVsZWFzZScgaW5zdGVhZCkKIAogMjAwNy0wMi0xOSAxMDowMiAgZHRzMTIKIApAQCAtODU0NSwxMSArNzI3MzUsNDggQEAKIAogICAgYWRkZWQgdGhlIGZsb3cgbGFibGUgbWliLCB3aGljaCB0aGUgdHVubmVsLW1pYiByZWZlcnMgdG8KIAotMjAwNy0wMi0wNyAxNzoxNyAgaGFyZGFrZXIKKzIwMDctMDItMDUgMjM6MDIgIHRhbmRlcnMKIAotICAgKiBtaWJzL0lQVjYtRkxPVy1MQUJFTC1NSUIudHh0OgorICAgKiBkaXN0L25zYi1mdW5jdGlvbnM6CiAKLSAgIGZpbGUgSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQgd2FzIGFkZGVkIG9uIGJyYW5jaCBWNS00LXBhdGNoZXMgb24gMjAwNy0wMi0wNyAxNzoxOToxMCArMDAwMAorICAgbW9yZSBwb3J0YWJpbGl0eSBmaXhlcworCisyMDA3LTAyLTA1IDIyOjUwICB0YW5kZXJzCisKKyAgICogZGlzdC9jaGVjay1hcGktY2hhbmdlOgorCisgICB1c2UgL2Jpbi9zaCB1bmxlc3MgYmFzaCBmZWF0dXJlcyBhcmUgcmVhbGx5IG5lZWRlZAorCisyMDA3LTAyLTA1IDIxOjUyICByc3RvcnkKKworICAgKiBNYWtlZmlsZS50b3A6CisKKyAgIG5vdGUgdGhhdCBjdXJyZW50IHNob3VsZCBiZSBidW1wZWQgYnkgNSB3aGVuIGJ1bXBlZAorCisyMDA3LTAyLTA1IDIxOjQ5ICByc3RvcnkKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICAtIG5vdGUgdGhhdCBjdXJyZW50IHNob3VsZCBiZSBidW1wZWQgYnkgNSB3aGVuIHVwZGF0ZWQKKyAgIC0gYWRkIHBvaW50ZXIgdG8gbmV3IGNoZWNrLWFwaS1jaGFuZ2VzIHNjcmlwdAorCisyMDA3LTAyLTA1IDIxOjQ2ICByc3RvcnkKKworICAgKiBkaXN0L2NoZWNrLWFwaS1jaGFuZ2U6CisKKyAgIHNpbXBsaXN0aWMgbmV3IHNjcmlwdCB0byBoZWxwIGNoZWNrIGZvciBhcGkgY2hhbmdlcyBiZXR3ZWVuIHJlbGVhc2VzCisKKzIwMDctMDItMDUgMjE6MzggIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oOgorCisgICBtYWtlIG5ldyBzdHJ1Y3QgbWVtYmVyIGNvbmRpdGlvbmFsLCBzaW5jZSB1c2UgaXMgY29uZGl0aW9uYWwKKworMjAwNy0wMi0wNSAyMToyMCAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgbW92ZSBmdW5jdGlvbiBjYWxsIG91dCBvZiBhc3NlcnQKIAogMjAwNy0wMi0wNSAxNToxNiAgZHRzMTIKIApAQCAtODU1OCwxNiArNzI3ODUsOSBAQAogICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2NDE4OTU6IEV4dGVuZCBzaG9ydCB2aWV3IG1hc2tzIChhcyBwZXIgUkZDIHNwZWNzKQogICAgUGF0Y2ggc3VwcGxpZWQgYnkgTWljaGFlbCBLaXJraGFtLgogCi0yMDA3LTAyLTA1IDE1OjEwICByc3RvcnkKKzIwMDctMDItMDUgMTQ6MzEgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOgotCi0gICBtb3ZlIGZ1bmN0aW9uIGNhbGwgb3V0IG9mIGFzc2VydAotCi0yMDA3LTAyLTA1IDE0OjM4ICBkdHMxMgotCi0gICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMKLToKKyAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYzoKIAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjM5MzYwOiBGaXggc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSByb3cgY3JlYXRpb24uCiAgICBQYXRjaCBzdXBwbGllZCBieSBNaWNoYWVsIEtpcmtoYW0uCkBAIC04NTc5LDI2ICs3Mjc5OSw4MyBAQAogICAgRml4IGNvbXBpbGF0aW9uIGlmIExPQ0tfUEVSX0NBTExCQUNLX1NVQklEIG5vdCBkZWZpbmVkLgogICAgUmVwb3J0ZWQgYnkgRW1pIFlhbmFnaQogCisyMDA3LTAyLTA1IDA5OjQ4ICBkdHMxMgorCisgICAqIEZBUToKKworICAgU3BlbGxpbmcgY29ycmVjdGlvbjogJ3N1cGVyY2VkZWQnIC0+ICdzdXBlcnNlZGVkJworICAgKE9oLCB0aGUgc2hhbWUgb2YgaXQhKQorCiAyMDA3LTAxLTMxIDEzOjUxICB0YW5kZXJzCiAKICAgICogTWFrZWZpbGUudG9wOgogCiAgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxNjQ3OTc2OiBDeWd3aW4vTWluR1cgV2luZG93cyBidWlsZCBmYWlscyBkdWUgdG8gbGlidG9vbCBlcnJvcgogCi0yMDA3LTAxLTMwIDEzOjQzICB0YW5kZXJzCisyMDA3LTAxLTMwIDEzOjM5ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgogCiAgICBDSEFOR0VTOiBidWlsZDogeWV0IGFub3RoZXIgZml4IHRvIGFkZHJlc3MgYnVpbGQgaXNzdWVzIHdpdGggZXRodG9vbCAob24gUkg5KS4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IE1hZ251cyBGcm9tcmVpZGUuCiAKKzIwMDctMDEtMzAgMDk6MTAgIGR0czEyCisKKyAgICogRkFROgorCisgICBDbGFyaWZ5IHdoZW4gc3ltbGluayBmaXggaXMvaXNuJ3QgYXBwcm9wcmlhdGUuICBTeW5jaCB3aXRoIFdpa2kuCisKKzIwMDctMDEtMjkgMTE6MTIgIGR0czEyCisKKyAgICogRkFROgorCisgICBBdXRoZW50aWNhdGVkIFNOTVB2MyByZXF1ZXN0cyBzdGlsbCBuZWVkIGEgdXNlcm5hbWUuICAoU3luY2ggd2l0aCBXaWtpKQorCiAyMDA3LTAxLTI5IDExOjAzICB0YW5kZXJzCiAKLSAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYywgYWdlbnQvaGVscGVycy90YWJsZS5jCis6CiAKICAgIGdldCByaWQgb2YgQysrIGNvbW1lbnRzCiAKLTIwMDctMDEtMjUgMjI6NDUgIHRhbmRlcnMKKzIwMDctMDEtMjggMTM6MzYgIHRhbmRlcnMKKworICAgKiBkaXN0L25zYi1mdW5jdGlvbnM6CisKKyAgIGZpeCBiYWQgdGVzdAorCisyMDA3LTAxLTI4IDEzOjA2ICB0YW5kZXJzCisKKyAgICogZGlzdC9uc2ItZnVuY3Rpb25zOgorCisgICByZW5hbWUgdmFyaWFibGUgdG8gcmVzb2x2ZSBuYW1lIGNsYXNoIGFuZCB0byB1bmJyZWFrIG5pZ2h0bHkgYnVpbGRzIG9uIFNvbGFyaXMKKworMjAwNy0wMS0yOCAxMjo1MiAgdGFuZGVycworCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgZ2V0IHJpZCBvZiBDKysgY29tbWVudHMKKworMjAwNy0wMS0yNyAxNDo0MCAgdGFuZGVycworCisgICAqIGRpc3QvbnNiLW5pZ2h0bHk6CisKKyAgIGZpeCB0eXBvCisKKzIwMDctMDEtMjcgMTQ6MjMgIHRhbmRlcnMKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYzoKKworICAgZ2V0IHJpZCBvZiBDKysgY29tbWVudHMKKworMjAwNy0wMS0yNiAxMToxNSAgdGFuZGVycworCisgICAqIGRpc3QvOiBuc2ItY29uZmlnLCBuc2ItZnVuY3Rpb25zLCBuc2ItbmlnaHRseQorLCBuc2ItcGFja2FnZToKKworICAgbW9yZSBCb3VybmUgc2hlbGwgY29tcGF0aWJpbGl0eSBmaXhlcworCisyMDA3LTAxLTI1IDIyOjQxICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CiAKQEAgLTg2MTIsNiArNzI4ODksNyBAQAogCiAyMDA3LTAxLTI1IDIyOjA1ICB0YW5kZXJzCiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbnQuYwogLCBsb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjOgogCkBAIC04NjI5LDEyICs3MjkwNyw3MCBAQAogCiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2NDQ3MTQ6IGZyb20gIkxlbGFuZCBXYWxsYWNlIjogcmVwbGFjZSBsYXN0IHJlbWFpbmluZyBpbnN0YW5jZSBvZiBkZXByZWNhdGVkIGNvcHlfd29yZCBieSBjb3B5X253b3JkCiAKKzIwMDctMDEtMjUgMTU6MzAgIHRhbmRlcnMKKworICAgKiBkaXN0LzogbnNiLWNvbmZpZywgbnNiLWZ1bmN0aW9ucywgbnNiLW5pZ2h0bHkKKywgbnNiLXBhY2thZ2UsIG5zYi1wbGF0Zm9ybToKKworICAgbWFueSBCb3VybmUgc2hlbGwgcG9ydGFiaWxpdHkgZml4ZXMKKworMjAwNy0wMS0yNCAxNjozOSAgZHRzMTIKKworICAgKiBkaXN0LzogbnNiLWNvbmZpZywgbnNiLWZ1bmN0aW9ucywgbnNiLW5pZ2h0bHkKKywgbnNiLXBhY2thZ2UsIG5zYi1wbGF0Zm9ybToKKworICAgUHJlLVBvc2l4IEJvdXJuZSBzaGVsbCBjb21wYXRhYmlsaXR5LgorCiAyMDA3LTAxLTI0IDE0OjAyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKIAogICAgVHdlYWsgZGVidWcgb3V0cHV0CiAKKzIwMDctMDEtMjQgMTM6NTggIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMtdXBkYXRlOgorCisgICBTaGVsbHNjcmlwdCBwb3J0YWJpbGl0eS4gIChFdmVyeXRoaW5nIGhhcyAvYmluL3NoKQorCisyMDA3LTAxLTI0IDEzOjQ5ICBkdHMxMgorCisgICAqIGRpc3QvOiBjdnNzaG93LCBjdnN1cCwgbnNiLWNvbmZpZywKKyAgICAgbnNiLWZ1bmN0aW9ucywgbnNiLW5pZ2h0bHksIG5zYi1wYWNrYWdlLAorICAgICBuc2ItcGxhdGZvcm06CisKKyAgIEltcHJvdmUgc2hlbGwtc2NyaXB0IHBvcnRhYmlsaXR5LiAoRXZlcnl0aGluZyBoYXMgL2Jpbi9zaCEpCisKKzIwMDctMDEtMjQgMTM6NDAgIGR0czEyCisKKyAgICogc25tcGxpYi86IHNubXBVRFBEb21haW4uYywgc25tcF9jbGllbnQuYzoKKworICAgRXh0cmEgZGVidWdnaW5nIG91dHB1dAorCisyMDA3LTAxLTI0IDEzOjM4ICBkdHMxMgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYworLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywKKyAgICAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaCwKKyAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oOgorCisgICBQcmVsaW1pbmFyeSB0YWJsZSB1bnJlZ2lzdHJhdGlvbiBBUEkuCisKKzIwMDctMDEtMjQgMTM6MTEgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdHJhcGRfbG9nLmM6CisKKyAgIE1vdmUgaG9zdG5hbWUgdHJhbnNsYXRpb24gaW50byB0aGUgdHJhbnNwb3J0LXNwZWNpZmljIGxpYnJhcnkgcm91dGluZXMuCisgICAoV2hlcmUgaXQgYmVsb25ncyEpCisKKzIwMDctMDEtMjQgMTM6MDQgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsCisgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBCYXNpYyBmcmFtZXdvcmsgZm9yIHRyYW5zcG9ydC1zcGVjaWZpYyB0cmFuc2xhdGlvbiBvZiBob3N0bmFtZXMuCisKIDIwMDctMDEtMjQgMTI6MjcgIGR0czEyCiAKICAgICogYXBwcy9zbm1wdHJhcGRfbG9nLmM6CkBAIC04NjUxLDggKzcyOTg3LDcgQEAKIAogICAgKiBhZ2VudC9taWJncm91cC86CiAgICAgIGlwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMKLSwgaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jCi0sCissIGlwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywKICAgICAgaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYwogLAogICAgICBpcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKQEAgLTg3MDIsNiArNzMwMzcsNyBAQAogCiAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEJVRzogMTYzODIyNTogRml4IGludGVycHJldGF0aW9uIG9mIHRyYW5zcG9ydCBhZGRyZXNzIGRhdGEuCiAgICAoS2VlcCB0aGlzIGNvbnNpc3RlbnQgd2l0aCBzbm1wVURQRG9tYWluLmMpCisgICBUaGlzIGRvZXMgbm90IGZlZWwgdGhlIHJpZ2h0IHdheSB0byBoYW5kbGUgdGhpcyEKIAogMjAwNy0wMS0yMyAxNDoxMCAgZHRzMTIKIApAQCAtODczMCw4ICs3MzA2Niw3IEBACiAKIDIwMDctMDEtMjIgMTY6MTYgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4LzogbWFzdGVyX2FkbWluLmMsIG1hc3Rlci5jCi06CisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC86IG1hc3Rlci5jLCBtYXN0ZXJfYWRtaW4uYzoKIAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjQxNjg1OiBIYW5kbGUgdW5yZXNwb25zaXZlIEFnZW50WCBzdWJhZ2VudHMgbW9yZSByZWxpYWJseS4KICAgIEZpeCBwcm92aWRlZCBieSBKb3NlZiBNb2VsbGVycwpAQCAtODc1OCw3ICs3MzA5MywxNCBAQAogICAgQ0hBTkdFUzogRnJlZUJTRDogQlVHOiAxNjMzNDgzOiBTdXBwb3J0IENQVSBIQUwgb24gRnJlZUJTRDQueAogICAgKGJlZm9yZSBDUFUgZGVmaW5pdGlvbnMgd2VyZSBtb3ZlZCB0byA8c3lzL3Jlc291cmNlLmg+KQogCi0yMDA3LTAxLTE5IDE0OjIyICB0YW5kZXJzCisyMDA3LTAxLTE5IDE2OjE1ICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIGxpYnJhcnkgbGF5ZXJpbmcgaW1wcm92ZW1lbnRzOiAqbW92ZSogKHJhdGhlciB0aGFuIGNvcHkpIGdsb2JhbCB2YXJpYWJsZXMKKyAgIGZyb20gc25tcHRyYXBkIHRvIGxpYm5ldHNubXB0cmFwZAorCisyMDA3LTAxLTE5IDE0OjE4ICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sCiAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKQEAgLTg3NjgsMTMgKzczMTEwLDI2IEBACiAKIDIwMDctMDEtMTkgMTE6MjUgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwKKyAgICogY29uZmlndXJlLmluLCBjb25maWd1cmUsCiAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCiAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLAogICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKIAogICAgQ0hBTkdFUzogYnVpbGQ6IGFkZCBjb25maWd1cmUgY2hlY2sgZm9yIGhhc21udG9wdCB0byBmaXggdGhlIGJ1aWxkIG9uIHN5c3RlbXMgdGhhdCBsYWNrIGl0CiAKKzIwMDctMDEtMTggMTI6NTAgIHRhbmRlcnMKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBsaWJyYXJ5IGxheWVyaW5nIGltcHJvdmVtZW50czogbW92ZSBnbG9iYWwgdmFyaWFibGVzIGZyb20gc25tcHRyYXBkIHRvIGxpYm5ldHNubXB0cmFwZAorCisyMDA3LTAxLTE4IDExOjEzICB0YW5kZXJzCisKKyAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywKKyAgICAgbWFuL3NubXB0cmFwZC44LmRlZiwgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmOgorCisgICBkcm9wICItZSIvcHJpbnRFdmVudE51bWJlcnMgc3VwcG9ydCBmb3Igc25tcHRyYXBkIChvYnNvbGV0ZSwgZGVwcmVjYXRlZCBhbmQgYnJlYWtzIGxpYnJhcnkgbGF5ZXJpbmcpCisKIDIwMDctMDEtMTYgMTA6MDQgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jOgpAQCAtODc5NSw2ICs3MzE1MCwxMiBAQAogCiAgICBEb24ndCBoYXJkY29kZSB0aGUgc2l6ZSBvZiBjb3VudGVyNjQgc3RydWN0dXJlIChtYXkgYmUgd3Jvbmcgb24gNjQtYml0IGJveGVzKQogCisyMDA3LTAxLTE2IDA5OjAwICBkdHMxMgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgRXh0cmEgZGVidWdnaW5nIG91dHB1dC4KKwogMjAwNy0wMS0xMSAyMjoxMyAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywKQEAgLTg4MDQsMTAgKzczMTY1LDE2IEBACiAKICAgIENIQU5HRVM6IHNubXBsaWI6IGxpYnJhcnkgbGF5ZXJpbmcgaW1wcm92ZW1lbnRzOiBpbnRyb2R1Y2UgbmV0c25tcF9ta3RlbXAgdG8gcHJldmVudCBsaWJuZXRzbm1wYWdlbnQgZnJvbSBkZXBlbmRpbmcgb24gbGlibmV0c25tcG1pYnMKIAorMjAwNy0wMS0xMSAyMTozNSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuaW46CisKKyAgIGNoYW5nZWQgYXV0b2NvbmYgcmVxIHRvIDIuNjEKKwogMjAwNy0wMS0xMSAyMToyOCAgaGFyZGFrZXIKIAotICAgKiBzbm1wbGliLzogc25tcEFBTDVQVkNEb21haW4uYywgc25tcElQWERvbWFpbi5jCi0sIHNubXBTVEREb21haW4uYywgc25tcFRDUERvbWFpbi5jLAorICAgKiBzbm1wbGliLzogc25tcEFBTDVQVkNEb21haW4uYywgc25tcElQWERvbWFpbi5jLAorICAgICBzbm1wU1RERG9tYWluLmMsIHNubXBUQ1BEb21haW4uYywKICAgICAgc25tcFRDUElQdjZEb21haW4uYywgc25tcFVEUERvbWFpbi5jLAogICAgICBzbm1wVURQSVB2NkRvbWFpbi5jLCBzbm1wX3NlcnZpY2UuYywKICAgICAgc25tcF90cmFuc3BvcnQuYzoKQEAgLTg4MzIsNiArNzMxOTksMTIgQEAKIAogICAgQ0hBTkdFUzogU29sYXJpczogSUYtTUlCIGZpeDogYWRkIG1pc3NpbmcgcmV0dXJuIGF0IGVuZCBvZiBnZXRfaWZfc3RhdHMKIAorMjAwNy0wMS0wOCAwODozMCAgdGFuZGVycworCisgICAqIGFnZW50L01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBidWlsZDogbGlicmFyeSBsYXllcmluZyBpbXByb3ZlbWVudHM6IGJ1aWxkIGxpYnJhcmllcyBpbiB0aGUgY29ycmVjdCBvcmRlciAobGlibmV0c25tcGFnZW50IGJlZm9yZSBsaWJuZXRzbm1waGVscGVycyBiZWZvcmUgbGlibmV0c25tcG1pYnMpCisKIDIwMDctMDEtMDcgMTk6NDcgIHRhbmRlcnMKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmg6CkBAIC04ODQ1LDcgKzczMjE4LDcgQEAKICAgIENIQU5HRVM6IFNvbGFyaXM6IEJVRzogMTYyNjE1Mzogbm8gaHJTV1J1biBpbmZvcm1hdGlvbnMgb24gU29sYXJpcyB6b25lcwogICAgUGF0Y2ggcHJvdmlkZWQgYnkgS2xhdXMgTXVlaGxmZWxkCiAKLTIwMDctMDEtMDYgMDA6MzQgIHRhbmRlcnMKKzIwMDctMDEtMDYgMDA6MzAgIHRhbmRlcnMKIAogICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgogCkBAIC04ODU3LDEyICs3MzIzMCwxNyBAQAogCiAgICBnZXQgcmlkIG9mIEMrKyBjb21tZW50cwogCi0yMDA3LTAxLTAzIDIyOjIzICB0YW5kZXJzCisyMDA3LTAxLTAyIDIzOjMzICB0YW5kZXJzCiAKLSAgICogcGVybC9TTk1QLzogU05NUC54cywgdC9jb25mLnQ6CisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CiAKLSAgIGNsZWFuIHVwIGNvbXBpbGUgYW5kIGZpeCB0ZXN0cy4KLSAgIEJhY2twb3J0IGZyb20gNS41LmRldgorICAgQlVHOiBDb3Zlcml0eSAjMTczOiByZW1vdmUgc3VwZXJmbHVvdXMgTlVMTCBjaGVjayAoYWxyZWFkeSBkZXJlZmVyZW5jZWQgZWFybGllciBhbnl3YXkpCisKKzIwMDctMDEtMDIgMjM6MDggIHRhbmRlcnMKKworICAgKiBzbm1wbGliL3N5c3RlbS5jOgorCisgICBvbmx5IGxvZyBhIG1lc3NhZ2Ugd2hlbiB0aGUgbWliX2luZGV4ZXMgZGlyZWN0b3J5IGlzICpyZWFsbHkqIGNyZWF0ZWQKIAogMjAwNy0wMS0wMiAyMjo1MyAgdGFuZGVycwogCkBAIC04ODc2LDYgKzczMjU0LDYyIEBACiAKICAgIEJVRzogQ292ZXJpdHkgIzE5MzogcHJvcGVybHkgaW5pdGlhbGl6ZSBzZXNzaW9uIHBvaW50ZXIgYmVmb3JlIHVzZQogCisyMDA3LTAxLTAyIDIwOjEzICB0YW5kZXJzCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgYmFjayBvdXQgcHJldmlvdXMgYmFkIGNoYW5nZSB0byBhZ2VudCByZWdpc3RyeQorCisyMDA3LTAxLTAyIDE5OjUyICB0YW5kZXJzCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2MDE0NTM6IGZyb20gIlJvYmVydCBXaWxjb3giOiBEeW5hbWljIE1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGltcHJvdmVtZW50cworCisyMDA3LTAxLTAyIDE5OjUyICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywKKyAgICAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy9udWxsLmMsCisgICAgIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMKKywgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMKKywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsCisgICAgIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMsIHNubXBsaWIvc25tcHVzbS5jLAorICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jCissIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsCisgICAgIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmMsCisgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywKKyAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLAorICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLAorICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsCisgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTYwMTQ1MzogZnJvbSAiUm9iZXJ0IFdpbGNveCI6IER5bmFtaWMgTWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgaW1wcm92ZW1lbnRzCisKKzIwMDctMDEtMDIgMTc6NTYgIHRhbmRlcnMKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgcmVtb3ZlIExEX1JVTl9QQVRIIGNvbW1lbnQgZm9yIHB5dGhvbgorCisyMDA3LTAxLTAyIDE3OjM4ICB0YW5kZXJzCisKKyAgICogTWFrZWZpbGUudG9wLCBjb25maWd1cmUsIG5ldC1zbm1wLWNvbmZpZy5pbgorOgorCisgICBDSEFOR0VTOiBidWlsZDogdXBkYXRlIHRvIGF1dG9jb25mIDIuNjEKKworMjAwNy0wMS0wMiAxNzoyMyAgdGFuZGVycworCisgICAqIE1ha2VmaWxlLmluLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9rZnJlZWJzZC5oOgorCisgICBORVdTOiBQb3J0czogUEFUQ0g6IDE2MjM4NzQ6IGZyb20gIlBldHIgU2FsaW5nZXIiOiBhZGQgR05VL2tGcmVlQlNEIHN1cHBvcnQKKworMjAwNy0wMS0wMiAxNzoxNyAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IGFkZCB3b3JrYXJvdW5kIGZvciBBQ19GVU5DX0dFVE1OVEVOVCgpIGJ1ZyBpbiBhdXRvY29uZiAyLjYwYiBhbmQgMi42MSAoc2VlIERlYmlhbiBidWdzICM0MDMyNDMsICM0MDMwNzkpCisKIDIwMDctMDEtMDIgMTY6NDggIGR0czEyCiAKICAgICogbG9jYWwvbWliMmM6CkBAIC04ODg1LDggKzczMzE5LDggQEAKIAogMjAwNy0wMS0wMiAxNjowMCAgZHRzMTIKIAotICAgKiBzbm1wbGliLzogc25tcFVEUERvbWFpbi5jLCBzbm1wVURQSVB2NkRvbWFpbi5jCi0sIHNubXBVbml4RG9tYWluLmM6CisgICAqIHNubXBsaWIvOiBzbm1wVURQRG9tYWluLmMsIHNubXBVRFBJUHY2RG9tYWluLmMsCisgICAgIHNubXBVbml4RG9tYWluLmM6CiAKICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMTYwMDE3MTogU3VwcG9ydCBsb25nZXIgY29tbXVuaXR5IHN0cmluZ3MgaW4gVkFDTSBjb25maWcuCiAgICBQYXRjaCBwcm92aWRlZCBieSBSb2JlcnQgV2lsY294CkBAIC04ODk4LDIwICs3MzMzMiwyNyBAQAogICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTU0NjgxNzogRml4IHNubXBFbnRlcnByaXNlIHZhcmJpbmQgd2hlbiBmb3J3YXJkaW5nIHYxIHRyYXBzLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgUGFibG8gUGFzc2VyYS4KIAotMjAwNy0wMS0wMiAxMDozOCAgZHRzMTIKKzIwMDctMDEtMDIgMTA6MzQgIGR0czEyCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CiAKICAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTYyNTEzNTogY29uZmlndXJlIGxvY2F0aW9uIG9mIHB5dGhvbiBpbnRlcnByZXRlcgogICAgUHJvdmlkZWQgYnkgQW5kcmV3IExhbmdtZWFkCiAKLTIwMDctMDEtMDIgMTA6MzggIGR0czEyCisyMDA3LTAxLTAyIDEwOjM0ICBkdHMxMgogCiAgICAqIE1ha2VmaWxlLmluLCBNYWtlZmlsZS50b3A6CiAKICAgIE5FV1M6IGNvbmZpZ3VyZTogUEFUQ0ggMTYyNTEzNTogY29uZmlndXJlIGxvY2F0aW9uIG9mIHB5dGhvbiBpbnRlcnByZXRlcgogICAgUHJvdmlkZWQgYnkgQW5kcmV3IExhbmdtZWFkCiAKKzIwMDctMDEtMDIgMTA6MjIgIGR0czEyCisKKyAgICogY29uZmlndXJlLmluLCBjb25maWd1cmU6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTYyNDQwNjogb3B0aW9uIHRvIGhhcmRjb2RlIGxvY2F0aW9uIG9mIG1vdW50IHRhYmxlCisgICBTdWJtaXR0ZWQgYnkgSm9jaGVuCisKIDIwMDctMDEtMDEgMTc6NDQgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgpAQCAtODkxOSwxMiArNzMzNjAsMzMgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTYwMTE4OCwgQlVHOiAxNjAwNDMyOiBIYW5kbGUgc2lnbmFscyBwcm9wZXJseSB3aGVuIHJlc3RhcnRpbmcgdGhlIGFnZW50LgogICAgRml4IHByb3ZpZGVkIGJ5IExvaWMgRG9tYWlnbmUuCiAKLTIwMDctMDEtMDEgMTY6MTIgIGR0czEyCisyMDA3LTAxLTAxIDE3OjM1ICBkdHMxMgogCi0gICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgSGFuZGxlIG5vbi13cml0YWJsZSBNSUIgaW5kZXhlcyAoZS5nLiBydW4gYXMgbm9uLXByaXZpbGVnZWQgdXNlcikKKworMjAwNy0wMS0wMSAxNjowOSAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jCis6CiAKICAgIE5FV1M6IHNubXBsaWI6IFBBVENIRVMgMTU5MjcwNjogRml4IG1lbW9yeSBsZWFrIHdoZW4gY2xvbmluZyB2YXJiaW5kcy4KLSAgIFBhdGNoIGJ5IFN0ZXZlbiBEb3JpZ290dGkuCisgICBCYXNlZCBvbiBhIHN1Z2dlc3Rpb24gYnkgU3RldmVuIERvcmlnb3R0aS4KKworMjAwNy0wMS0wMSAxNjowOSAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNTkyNzA2OiBGaXggbWVtb3J5IGxlYWsgd2hlbiBjbG9uaW5nIHZhcmJpbmRzLgorICAgQmFzZWQgb24gYSBzdWdnZXN0aW9uIGJ5IFN0ZXZlbiBEb3JpZ290dGkuCisKKzIwMDctMDEtMDEgMTU6NDggIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvOiBwYXNzLmMsIHBhc3NfcGVyc2lzdC5jOgorCisgICBORVdTOiBhZ2VudDogUEFUQ0ggMTU4NTE0NjogRXh0ZW5kIHJhbmdlIG9mIGF2YWlsYWJsZSBlcnJvciBjb2RlcworICAgU3VibWl0dGVkIGJ5IEFudGhvbnkgTm92YXRzaXMuCiAKIDIwMDctMDEtMDEgMTU6MjkgIGR0czEyCiAKQEAgLTg5MzUsOCArNzMzOTcsOCBAQAogCiAyMDA3LTAxLTAxIDE1OjE2ICBkdHMxMgogCi0gICAqIGFwcHMvOiBzbm1wZGYuYywgc25tcGdldC5jLCBzbm1wZ2V0bmV4dC5jCi0sIHNubXBzZXQuYzoKKyAgICogYXBwcy86IHNubXBkZi5jLCBzbm1wZ2V0LmMsIHNubXBnZXRuZXh0LmMsCisgICAgIHNubXBzZXQuYzoKIAogICAgTW92ZSBnbG9iYWwgJ2ZhaWx1cmVzJyB2YXJpYWJsZSBjbG9zZXIgdG8gd2hlcmUgaXQgaXMgdXNlZC4KICAgIENIQU5HRVM6IGFwcHM6IFBBVENIOiAxNTI5NTIzOiBDbG9zZSBTTk1QIHNlc3Npb24gb24gZmFpbHVyZS4KQEAgLTg5NDgsNiArNzM0MTAsMTYgQEAKICAgIFByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgZG91YmxlIGRlbGV0ZS4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IE1hZ251cyBGcm9tcmVpZGUuCiAKKzIwMDctMDEtMDEgMTQ6MjIgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oLCBzbm1wbGliL21pYi5jLAorICAgICBzbm1wbGliL3BhcnNlLmM6CisKKyAgIE1haW50YWluIE1JQiBkaXJlY3RvcnkgaW5kZXggZmlsZXMgdW5kZXIgL3Zhci9uZXQtc25tcAorICAgKGluIGxpbmUgd2l0aCBGaWxlIEhpZXJhcmNoeSBTdGFuZGFyZCBzcGVjaWZpY2F0aW9ucykKKyAgIFNlZSBodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9Mzg5NDM0CisgICBhbmQgZGlzY3Vzc2lvbiAiTUlCcyBpbiBuZXQtc25tcCIgb24gY29kZXJzIGxpc3QgKE9jdCAyMDA2KQorCiAyMDA3LTAxLTAxIDExOjI4ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYzoKQEAgLTg5NTUsNiArNzM0MjcsMTIgQEAKICAgIEVuc3VyZSBzeXNPUkRlc2NyaXB0aW9ucyBhcmUgbnVsbC10ZXJtaW5hdGVkLCBzbyB0aGV5IGNhbiBiZQogICAgc2FmZWx5IHBhc3NlZCB0byAnc3RyZHVwKCknLiAgUmVwb3J0ZWQgYnkgV29sZmdhbmcgUGVkb3QuCiAKKzIwMDYtMTItMjkgMTc6MjUgIGR0czEyCisKKyAgICogRkFROgorCisgICBTeW5jaHJvbmlzZSB3aXRoIFdpa2kgdmVyc2lvbi4KKwogMjAwNi0xMi0yOCAyMzoyOSAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgpAQCAtODk4NCwxMCArNzM0NjIsOSBAQAogCiAyMDA2LTEyLTE3IDE4OjAxICBhbGV4X2IKIAotICAgKiB3aW4zMi86IE1ha2VmaWxlLWFwcHMuaW4sIGxpYnNubXBfZGxsL01ha2VmaWxlLmluCi0sIHNubXBkL01ha2VmaWxlLmluLCBzbm1wZHNkay9NYWtlZmlsZS5pbgotLCBzbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwKLSAgICAgc25tcHRyYXBkL01ha2VmaWxlLmluOgorICAgKiB3aW4zMi86IE1ha2VmaWxlLWFwcHMuaW4sIGxpYnNubXBfZGxsL01ha2VmaWxlLmluLAorICAgICBzbm1wZC9NYWtlZmlsZS5pbiwgc25tcGRzZGsvTWFrZWZpbGUuaW4sCisgICAgIHNubXBuZXRzdGF0L01ha2VmaWxlLmluLCBzbm1wdHJhcGQvTWFrZWZpbGUuaW46CiAKICAgIEFkZCBnZGkzMi5saWIgdG8gZml4IGxpbmtpbmcgcHJvYmxlbSB3aGVuIHVzaW5nIHRoZSBzdGF0aWMgdmVyc2lvbiBvZiB0aGUKICAgIFNTTCBsaWJyYXJpZXMuICBUaGFua3MgdG8gU2ltb24gRWR3YXJkcyBmb3IgdGhlIGZpeC4KQEAgLTkwMDAsMTUgKzczNDc3LDE1IEBACiAKIDIwMDYtMTItMTIgMjM6NTMgIHRhbmRlcnMKIAotICAgKiBhZ2VudC9taWJncm91cC9ob3N0LzogaHJfZmlsZXN5cy5jLCBocl9zdG9yYWdlLmMKLSwgaHJfc3dpbnN0LmM6CisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvOiBocl9maWxlc3lzLmMsIGhyX3N0b3JhZ2UuYywKKyAgICAgaHJfc3dpbnN0LmM6CiAKICAgIENIQU5HRVM6IExpbnV4OiBQQVRDSDogMTU4MTI5NDogZnJvbSAiTWljaGFlbCBUYXRhcmlub3YiOiBob3N0LXJlc291cmNlcyBpbXByb3ZlbWVudHMKIAogMjAwNi0xMi0xMiAyMToyNyAgdGFuZGVycwogCi0gICAqIHdpbjMyL25ldC1zbm1wLzogbmV0LXNubXAtY29uZmlnLmgsCi0gICAgIG5ldC1zbm1wLWNvbmZpZy5oLmluOgorICAgKiB3aW4zMi9uZXQtc25tcC86IG5ldC1zbm1wLWNvbmZpZy5oLCBuZXQtc25tcC1jb25maWcuaC5pbgorOgogCiAgICByZS1hZGQgVURQX0FERFJFU1NFU19JTl9IT1NUX09SREVSCiAKQEAgLTkwMjQsNyArNzM1MDEsNyBAQAogCiAgICBDSEFOR0VTOiBXaW4zMjogZml4IHdpbjMyL0NvbmZpZ3VyZSAtLXdpdGgtaXB2NgogCi0yMDA2LTEyLTEyIDE4OjIxICB0YW5kZXJzCisyMDA2LTEyLTEyIDE4OjEwICB0YW5kZXJzCiAKICAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CiAKQEAgLTkwMzYsMTMgKzczNTEzLDg4IEBACiAKICAgIEFkZCB2ZXJzaW9uIHRvIEZBUS5odG1sLgogCi0yMDA2LTEyLTA5IDAwOjE2ICB0YW5kZXJzCisyMDA2LTEyLTA5IDE3OjExICBhbGV4X2IKIAotICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS86IGRhcndpbjguaCwgZGFyd2luOS5oCisgICAqIG1hbi86IE1ha2VmaWxlLmluLCBtYWtlX2luZGV4LnBsLCBtYW5fc2VjdGlvbnMudHh0CiA6CiAKKyAgIC1DcmVhdGUgaHRtbCBwYWdlcyBmb3IgQUxMIG1hbiBwYWdlcy4KKyAgIC1JbXByb3ZlIGVycm9yIG1lc3NhZ2Ugd2hlbiBjcmVhdGluZyB0aGUgaW5kZXguaHRtbCBmaWxlLgorCisyMDA2LTEyLTA5IDE3OjA2ICBhbGV4X2IKKworICAgKiBsb2NhbC86IGh0bWwtYWRkLWhlYWRlci1mb290ZXIucGwsIGh0bWwtdGV4dGZpbGUtZml4LnBsCis6CisKKyAgIEFkZCB0aWR5IGNvbW1hbmQgbGluZSBvcHRpb24gYW5kIGFkZCBtaXNzaW5nIFJFQURNRSBmaWxlcy4KKworMjAwNi0xMi0wOSAwMDoxNiAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtLzogZGFyd2luOC5oLCBkYXJ3aW45Lmg6CisKICAgIENIQU5HRVM6IE1hY09TWDogUEFUQ0g6IDE2MDA0NTM6IGZyb20gIkNocmlzIEphbGJlcnQiOiBPUyBYIGNvbXBpbGUtdGltZSBlbmRpYW4gZGV0ZXJtaW5hdGlvbgogCisyMDA2LTEyLTA4IDIyOjQ3ICB0YW5kZXJzCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgZG9jdW1lbnQgc29tZSBtb3JlIHBvc3QtcmVsZWFzZSB0YXNrcworCisyMDA2LTEyLTA4IDIyOjI2ICB0YW5kZXJzCisKKyAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKKyAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zCissIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywKKyAgICAgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMworLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCBtYW4vbmV0c25tcF9jb250YWluZXIuMworLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgbWFuL25ldHNubXBfZGVidWcuMworLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMworLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAorICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAorICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zCissIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywKKyAgICAgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zCissIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCisgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCisgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAorICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCisgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMworLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMworLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLAorICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywKKyAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMKKywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zCissIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCisgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMKKywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLAorICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMworLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAorICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsCisgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMworLCBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMKKywgbWFuL25ldHNubXBfd2F0Y2hlci4zLCBwZXJsL0FTTi9BU04ucG0sCisgICAgIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwKKyAgICAgcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbQorLCBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbQorLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwKKyAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIGNvbmZpZ3VyZSwKKyAgICAgY29uZmlndXJlLmluLCBkb3h5Z2VuLmNvbmYsIHNlZHNjcmlwdC5pbiwKKyAgICAgZGlzdC9NYWtlZmlsZSwgZGlzdC9uZXQtc25tcC5zcGVjLAorICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jLCBGQVEsIFJFQURNRToKKworICAgLSB2ZXJzaW9uIHRhZyAoIDUuNS5kZXYgKQorCiAyMDA2LTEyLTA4IDIyOjIwICB0YW5kZXJzCiAKICAgICogbG9jYWwvVmVyc2lvbi1NdW5nZS5wbDoKQEAgLTkwNTUsMzEgKzczNjA3LDQ0IEBACiAKICAgIE5FV1M6IEJVRzogMTYxMTUyNDogZml4IHRjcCBjb25uZWN0aW9uIHRhYmxlIGZkIGxlYWsKIAotMjAwNi0xMi0wNyAxNTo1NiAgdGFuZGVycworMjAwNi0xMi0wOCAxMzoxNyAgbWFyegogCi0gICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlLzogY3B1LmgsIGNwdS9jcHVfbWFjaC5jCi0sIGNwdS9jcHVfbWFjaC5oOgorICAgKiBwZXJsL1NOTVAvOiBNYWtlZmlsZS5QTCwgU05NUC5wbToKKworICAgcmV2ZXJ0IHVuaW5mb3JtZWQgdmVyc2lvbiBjaGFuZ2UKKworMjAwNi0xMi0wNyAyMTo1MCAgdWlkMzkwMzkKKworICAgKiBwZXJsL1NOTVAvOiBNYWtlZmlsZS5QTCwgU05NUC5wbSwgU05NUC54cywKKyAgICAgdC9jb25mLnQ6CisKKyAgIGNsZWFuIHVwIGNvbXBpbGUgYW5kIGZpeCB0ZXN0cworCisyMDA2LTEyLTA3IDE2OjQ4ICBtYXJ6CisKKyAgICogcGVybC9TTk1QL1NOTVAucG06CisKKyAgIGNvbW1lbnQgZml4CisKKzIwMDYtMTItMDcgMTU6NTIgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS86IGNwdS5oLCBjcHUvY3B1X21hY2guYywKKyAgICAgY3B1L2NwdV9tYWNoLmg6CiAKICAgIE5FV1M6IE1hY09TWDogUEFUQ0g6IDE2MDA1MjI6IGZyb20gIkJpbGwgRmVubmVyIjogQ1BVIEhBTCBpbXBsZW1lbnRhdGlvbiBmb3IgbWFjaC9kYXJ3aW4KIAotMjAwNi0xMi0wNyAxNTo1NCAgdGFuZGVycwotCi0gICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbWFjaC5jOgotCi0gICBmaWxlIGNwdV9tYWNoLmMgd2FzIGFkZGVkIG9uIGJyYW5jaCBWNS00LXBhdGNoZXMgb24gMjAwNi0xMi0wNyAxNTo1NjozOCArMDAwMAotCi0yMDA2LTEyLTA3IDE1OjU0ICB0YW5kZXJzCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmg6Ci0KLSAgIGZpbGUgY3B1X21hY2guaCB3YXMgYWRkZWQgb24gYnJhbmNoIFY1LTQtcGF0Y2hlcyBvbiAyMDA2LTEyLTA3IDE1OjU2OjM4ICswMDAwCi0KIDIwMDYtMTItMDcgMTM6MTAgIHRhbmRlcnMKIAogICAgKiBwZXJsL1NOTVAvU05NUC5wbToKIAogICAgQ0hBTkdFUzogZG9jdW1lbnRhdGlvbjogUEFUQ0g6IDE2MDQ1ODA6IFNOTVAoMykgbWFudWFsIHBhZ2UgY29ycmVjdGlvbnMgKHNwb3R0ZWQgYnkgdGVrLW9wcykKIAorMjAwNi0xMi0wNiAyMDozMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBkb2N1bWVudCB2YXJpb3VzIGFzcGVjdHMgb2YgcG9zdC1yZWxlYXNlIHRoaW5ncyB0byBkbworCiAyMDA2LTEyLTA2IDE1OjM0ICByc3RvcnkKIAogICAgKiBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6CkBAIC05MTE4LDYgKzczNjgzLDM5IEBACiAKICAgIENIQU5HRVM6IEJVRzogMTYwMDA5MzogYXV0b2NvbmYgMi42MCBicmVha3MgdGhlIGJ1aWxkCiAKKzIwMDYtMTItMDQgMTc6NDkgIGhhcmRha2VyCisKKyAgICogQ09QWUlORzoKKworICAgY2hhbmdlIHRvcCB0ZXh0IHRvIHJlbW92ZSBoaXN0b3J5IHNlY3Rpb24gd2hpY2ggd2FzIG91dCBvZiBkYXRlCisKKzIwMDYtMTItMDMgMjM6MjAgIGFsZXhfYgorCisgICAqIHdpbjMyLzogZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LAorICAgICBuZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3A6CisKKyAgIFdpbjMyOiAgV29ya3NwYWNlIGNvbXBpbGUgZml4LCBidWlsZCBpbnN0cnVjdGlvbnMgdXBkYXRlLgorCisyMDA2LTExLTI0IDE3OjUzICBoYXJkYWtlcgorCisgICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbgorLCBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmMsCisgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgLSB2ZXJzaW9uIHRhZyAoIDUuNCApCisKKzIwMDYtMTEtMjQgMTc6NTIgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAwNi0xMS0yNCAxNzo0OCAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQ2hhbmdlczogVjUuNC5yYzMgLT4gVjUuNApAQCAtMTI5NDMsNiArNzc1NDEsNyBAQAogCiAyMDA2LTA4LTE3IDA3OjUwICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jCiAsIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYzoKIApAQCAtMTM5NDUsNiArNzg1NDQsNyBAQAogCiAyMDA2LTA2LTEyIDEzOjA1ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMKIDoKIApAQCAtMTU0MzYsNyArODAwMzYsNyBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKIAotICAgSGFuZGxlIGZ1bGwtbGVuZ3RoIElQdjYgYWRkcmVzc2VzLiAgRml4IHN1cHBsaWVkIGJ5IFJhZGVrIFZva8OhbAorICAgSGFuZGxlIGZ1bGwtbGVuZ3RoIElQdjYgYWRkcmVzc2VzLiAgRml4IHN1cHBsaWVkIGJ5IFJhZGVrIFZva+eIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMteeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTjgJUKIAogMjAwNi0wMS0zMCAwMTo1MiAgZHRzMTIKIApAQCAtMTU0ODMsNyArODAwODMsNyBAQAogLCBzbm1wbGliL3NubXBfYXBpLmMsIHBlcmwvU05NUC9TTk1QLnBtOgogCiAgICBIYW5kbGUgbm9uLWluY3JlYXNpbmcgT0lEcyBkdXJpbmcgYSAocGVybCkgYnVsa3dhbGsuCi0gICBQYXRjaCAjMTM2NDY1MCBmcm9tIE9sZSBCasO4cm4gSGVzc2VuCisgICBQYXRjaCAjMTM2NDY1MCBmcm9tIE9sZSBCaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMteeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTll7duIEhlc3NlbgogCiAyMDA2LTAxLTI3IDAzOjA3ICBkdHMxMgogCkBAIC0xNTkzNyw2ICs4MDUzNyw3IEBACiAKIDIwMDYtMDEtMTAgMDM6MDcgIHRhbmRlcnMKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTE1OTQ0LDYgKzgwNTQ1LDcgQEAKIAogMjAwNi0wMS0wOSAxNzo0MSAgdGFuZGVycwogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMTY5NTUsNiArODE1NTcsNyBAQAogCiAyMDA1LTEyLTA5IDIwOjU4ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTE2OTc3LDYgKzgxNTgwLDcgQEAKIAogMjAwNS0xMi0wOSAyMDo1NyAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMKIDoKIApAQCAtMTgyNTcsNiArODI4NjEsNyBAQAogCiAyMDA1LTExLTE2IDE1OjE4ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jCiA6CiAKQEAgLTE4Mzk2LDYgKzgzMDAxLDcgQEAKIAogMjAwNS0xMS0xNSAyMToxNCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMKIDoKIApAQCAtMTg0MDksNiArODMwMTUsNyBAQAogCiAyMDA1LTExLTE1IDIxOjA4ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMKIDoKIApAQCAtMTg0MzgsNiArODMwNDUsNyBAQAogCiAyMDA1LTExLTE1IDE5OjI0ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMTg1NTQsNiArODMxNjIsNyBAQAogCiAyMDA1LTExLTE0IDE3OjI4ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0xOTgzNSw2ICs4NDQ0NCw3IEBACiAKIDIwMDUtMTAtMjggMjM6MjcgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5oCiA6CiAKQEAgLTE5ODQyLDYgKzg0NDUyLDcgQEAKIAogMjAwNS0xMC0yOCAyMzoyNiAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMKIDoKIApAQCAtMjE5MTAsNiArODY1MjEsNyBAQAogCiAyMDA1LTA5LTI3IDE5OjI1ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMKIDoKIApAQCAtMjI2MjIsNiArODcyMzQsNyBAQAogCiAyMDA1LTA5LTA2IDE5OjE3ICB0YW5kZXJzCiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS8uY3ZzaWdub3JlCiA6CiAKQEAgLTIyNzM0LDYgKzg3MzQ3LDcgQEAKIAogMjAwNS0wOC0zMCAwODowNiAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY29uc3RhbnRzLmgKIDoKIApAQCAtMjU1NzAsNiArOTAxODQsNyBAQAogCiAyMDA1LTAzLTI4IDE0OjI5ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMjU1OTksNyArOTAyMTQsNyBAQAogICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmM6CiAKICAgIC0gcGFzcyBOVUxMIHRvIGNvbmZpZyBoYW5kbGVyIHJlZywgdG8gdXNlIGN1cnJlbnQgYXBwdHlwZQotICAgLSBhZGQgc2VwZXJhdG9ycyBhbmQgaGVhZGVycyB3aGVuIHNhdmluZyBwZXJzaXN0ZW50IGRhdGEKKyAgIC0gYWRkIHNlcGFyYXRvcnMgYW5kIGhlYWRlcnMgd2hlbiBzYXZpbmcgcGVyc2lzdGVudCBkYXRhCiAgICAtIHJlbW92ZSBleHRyYW5lb3VzIG5ld2xpbmUgaW4gcGVyc2lzdGVudCBkYXRhCiAKIDIwMDUtMDMtMjQgMjI6MDYgIHJzdG9yeQpAQCAtMjU2MTAsNiArOTAyMjUsNyBAQAogCiAyMDA1LTAzLTI0IDE2OjQ4ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTI2MzQ3LDYgKzkwOTYzLDcgQEAKIAogMjAwNS0wMS0yNyAyMjo1MiAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0yODEwMiw2ICs5MjcxOSw3IEBACiAKIDIwMDQtMTAtMTcgMjA6NTYgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0yODUyMiw2ICs5MzE0MCw3IEBACiAKIDIwMDQtMTAtMTQgMTg6MTUgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaAogOgogCkBAIC0yODg3MCw2ICs5MzQ4OSw3IEBACiAKIDIwMDQtMTAtMDggMTk6MjcgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jCiA6CiAKQEAgLTI4ODc3LDYgKzkzNDk3LDcgQEAKIAogMjAwNC0xMC0wOCAxOToyNSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMKIDoKIApAQCAtMjk5MzAsNiArOTQ1NTEsNyBAQAogCiAyMDA0LTA5LTI0IDA5OjE1ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTI5OTg5LDYgKzk0NjExLDcgQEAKIAogMjAwNC0wOS0yMyAxMzoyNCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuYwogOgogCkBAIC0zMDE2NSw2ICs5NDc4OCw3IEBACiAKIDIwMDQtMDktMjEgMDY6NDMgIGhhcmRha2VyCiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuYwogOgogCkBAIC0zMTE5OCw3ICs5NTgyMiw3IEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgogCi0gICBmaXggZmxvYXQgY2FsYyBpbiB2YXJfZXh0ZW5zaWJsZV9kaXNrIHBlciBIYXJhbGQgU3RyYd9iZXJnZXIgPGhzQHN5c2xvZy5hdD4KKyAgIGZpeCBmbG9hdCBjYWxjIGluIHZhcl9leHRlbnNpYmxlX2Rpc2sgcGVyIEhhcmFsZCBTdHJh54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteODg2VyZ2VyIDxoc0BzeXNsb2cuYXQ+CiAKIDIwMDQtMDgtMzEgMTQ6MDIgIGhhcmRha2VyCiAKQEAgLTMxMzU3LDYgKzk1OTgxLDcgQEAKIAogMjAwNC0wOC0yNyAyMzoyMiAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTMyMjE3LDYgKzk2ODQyLDcgQEAKIAogMjAwNC0wNy0xMCAxOTo1MSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMzIzMDEsNiArOTY5MjcsNyBAQAogCiAyMDA0LTA3LTA5IDIyOjU4ICBoYXJkYWtlcgogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmMKIDoKIApAQCAtMzIzNzksNiArOTcwMDYsNyBAQAogCiAyMDA0LTA3LTA5IDA5OjU3ICBoYXJkYWtlcgogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlLy5jdnNpZ25vcmUKIDoKIApAQCAtMzI1MjIsNiArOTcxNTAsNyBAQAogCiAyMDA0LTA3LTA3IDEzOjQxICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKIDoKIApAQCAtMzMzNDksNiArOTc5NzgsNyBAQAogCiAyMDA0LTA2LTI4IDE1OjExICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnN0YW50cy5oCiA6CiAKQEAgLTMzNzc5LDcgKzk4NDA5LDcgQEAKICAgICogY29uZmlndXJlLmluLCBjb25maWd1cmU6CiAKICAgIEZpeCBoYW5kbGluZyBvZiAtLWVuYWJsZS1sb2NhbC1zbXV4IG9wdGlvbgotICAgKFBhdGNoICM5NDk4MDggZnJvbSBFcmlrIMRuZ2flcmQpCisgICAoUGF0Y2ggIzk0OTgwOCBmcm9tIEVyaWsg54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy2bmdn54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteiEmmQpCiAKIDIwMDQtMDYtMTggMDY6NDYgIGR0czEyCiAKQEAgLTM2MDE5LDYgKzEwMDY0OSw3IEBACiAKIDIwMDQtMDQtMTMgMTE6NDQgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKIDoKIApAQCAtMzYwMjYsNiArMTAwNjU3LDcgQEAKIAogMjAwNC0wNC0xMyAxMTo0MyAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jCiA6CiAKQEAgLTY0NzQzLDcgKzEyOTM3NSw3IEBACiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvOiBocl9zd3J1bi5jIChWNC0yLXBhdGNoZXMuNSksIGhyX3N3cnVuLmMKIDoKIAotICAgRml4IExpbnV4IGZpbGUgZGVzY3JpcHRvciBsZWFrIChyZXBvcnRlZCBieSBPbGl2ZXIgRuRuZ2VyKQorICAgRml4IExpbnV4IGZpbGUgZGVzY3JpcHRvciBsZWFrIChyZXBvcnRlZCBieSBPbGl2ZXIgRueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXnqatnZXIpCiAgICAKIDIwMDEtMDMtMTQgMDU6MjIgIGpicG4KIApAQCAtNjkyNjgsNyArMTMzOTAwLDcgQEAKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYzoKIAotICAgLSAobWVtb3J5LmMpOiBQYXRjaCBmcm9tIFJhZ25hciBLavhyc3RhZDoKKyAgIC0gKG1lbW9yeS5jKTogUGF0Y2ggZnJvbSBSYWduYXIgS2rniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAjL9yc3RhZDoKICAgICAgLSBmaXhlZCBsaW51eCBwcm9ibGVtOiB3cm9uZyBwYXJhbXMgZ2V0dGluZyByZXR1cm5lZC4KICAgIAogMjAwMC0wNS0yNSAwNTozOCAgbXNsaWZjYWsKQEAgLTcxMDQ4LDcgKzEzNTY4MCw3IEBACiAKICAgIC0gKGNvbmZpZ3VyZSogdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMpOgogICAgICAtIFByb3ZpZGUgbWlzc2luZyAnZ2V0cGFnZXNpemUnIHJvdXRpbmUgZm9yIFNvbGFyaXMgMi40Ci0gICAgICAgKFRoYW5rcyB0byBSYWduYXIgS2r4cnN0YWQpCisgICAgICAgKFRoYW5rcyB0byBSYWduYXIgS2rniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAjL9yc3RhZCkKICAgIAogMjAwMC0wMi0xNiAyMDoxNyAgbXNsaWZjYWsKIApAQCAtNzgzNzYsNyArMTQzMDA4LDcgQEAKICAgICAgbG9hZGF2ZS5jLCBtZW1vcnlfc29sYXJpczIuYywgcGFzcy5jLCBwYXNzX3BlcnNpc3QuYywgcHJvYy5jLAogICAgICB2ZXJzaW9uaW5mby5jLCBhbGFybS5jLCBldmVudC5jLCBNYWtlZmlsZS5pbiwgcGFyc2UuYywgc25tcC5jLAogICAgICBzbm1wX2RlYnVnLmMsIHNubXBfbG9nZ2luZy5jLCBzbm1wX2xvZ2dpbmcuaCk6IFBhdGNoIGZyb20gUmFnbmFyCi0gICAgIEtq+HJzdGFkOgorICAgICBLaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXniK31gJGL772k9YCMv3JzdGFkOgogICAgICAtIGRvIGZpbGUsIHN0ZGVyciwgYW5kIHN5c2xvZyBzdXBwb3J0LgogICAgCiAxOTk5LTA3LTE1IDA4OjQ1ICBoYXJkYWtlcgpAQCAtNzg1MTksNyArMTQzMTUxLDcgQEAKIAogICAgKiBhZ2VudC9zbm1wZC5jOgogCi0gICAtIChzbm1wZC5jKTogUGF0Y2ggZnJvbSBSYWduYXIgS2r4cnN0YWQ6CisgICAtIChzbm1wZC5jKTogUGF0Y2ggZnJvbSBSYWduYXIgS2rniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAjL9yc3RhZDoKICAgICAgLSBBZGQgb3B0aW9ucyBmb3Igc3dpdGNoaW5nIHRvIGEgZ2l2ZW4gdWlkIGFuZCBnaWQuCiAgICAKIDE5OTktMDctMDggMTU6MTYgIGhhcmRha2VyCkBAIC05NTI4OCw3ICsxNTk5MjAsNyBAQAogCiAgICAqIHNubXBsaWIvbWliLmM6CiAKLSAgIEZpeCBhIEMgcHJlY2VkZW5jZSBib3RjaC11cCwgdGhhbmtzIHRvIEZhYnLtY2lvIExhcyBDYXNhcyA8RmFicmljaW9AYXRhbi5jb20uYnI+CisgICBGaXggYSBDIHByZWNlZGVuY2UgYm90Y2gtdXAsIHRoYW5rcyB0byBGYWJy54it9YCRi++9pPWAkYvvvaTmrbvigLJjaW8gTGFzIENhc2FzIDxGYWJyaWNpb0BhdGFuLmNvbS5icj4KICAgIAogMjAwMy0wMi0yNiAxNDoxNCAgbmJhCiAKQEAgLTExMjA3MSw3ICsxNzY3MDMsNyBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvOiBocl9zd3J1bi5jIChWNC0yLXBhdGNoZXMuNSksIGhyX3N3cnVuLmM6CiAKLSAgIEZpeCBMaW51eCBmaWxlIGRlc2NyaXB0b3IgbGVhayAocmVwb3J0ZWQgYnkgT2xpdmVyIEbkbmdlcikKKyAgIEZpeCBMaW51eCBmaWxlIGRlc2NyaXB0b3IgbGVhayAocmVwb3J0ZWQgYnkgT2xpdmVyIEbniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy156mrZ2VyKQogICAgCiAyMDAxLTAzLTE0IDA1OjIyICBqYnBuCiAKQEAgLTExNjMxNiw3ICsxODA5NDgsNyBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKIAotICAgRml4IExpbnV4IGZpbGUgZGVzY3JpcHRvciBsZWFrIChyZXBvcnRlZCBieSBPbGl2ZXIgRuRuZ2VyKQorICAgRml4IExpbnV4IGZpbGUgZGVzY3JpcHRvciBsZWFrIChyZXBvcnRlZCBieSBPbGl2ZXIgRueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXnqatnZXIpCiAgICAKIDIwMDEtMDMtMTMgMTM6MjAgIGhhcmRha2VyCiAKQEAgLTExOTU2Miw3ICsxODQxOTQsNyBAQAogCQogMjAwMC0wNS0yNSAxMDowNyAgaGFyZGFrZXIKIAotCS0gKG1lbW9yeS5jKTogUGF0Y2ggZnJvbSBSYWduYXIgS2r4cnN0YWQ6CisJLSAobWVtb3J5LmMpOiBQYXRjaCBmcm9tIFJhZ25hciBLaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXniK31gJGL772k9YCMv3JzdGFkOgogCSAgLSBmaXhlZCBsaW51eCBwcm9ibGVtOiB3cm9uZyBwYXJhbXMgZ2V0dGluZyByZXR1cm5lZC4KIAkKIDIwMDAtMDUtMjUgMDU6MzggIG1zbGlmY2FrCkBAIC0xMjA3NTEsNyArMTg1MzgzLDcgQEAKIAogCS0gKGNvbmZpZ3VyZSogdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMpOgogCSAgLSBQcm92aWRlIG1pc3NpbmcgJ2dldHBhZ2VzaXplJyByb3V0aW5lIGZvciBTb2xhcmlzIDIuNAotCSAgICAoVGhhbmtzIHRvIFJhZ25hciBLavhyc3RhZCkKKwkgICAgKFRoYW5rcyB0byBSYWduYXIgS2rniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAjL9yc3RhZCkKIAkKIDIwMDAtMDItMTYgMjA6MTcgIG1zbGlmY2FrCiAKQEAgLTEyNjA4NSw3ICsxOTA3MTcsNyBAQAogICAgIC0gKHNubXBkZWx0YS5jLCBpbnQ2NC5jLCBpbnQ2NC5oKTogbWluaW1hbCBjNjQgc3VwcG9ydCBmb3Igc25tcGRlbHRhLiBVbnRlc3RlZC4KIAogaGFyZGFrZXIgIDggSnVsIDk5IDE2OjAyOjU4Ci0gICAgLSAoc25tcGQuYyk6IFBhdGNoIGZyb20gUmFnbmFyIEtq+HJzdGFkOgorICAgIC0gKHNubXBkLmMpOiBQYXRjaCBmcm9tIFJhZ25hciBLaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXniK31gJGL772k9YCMv3JzdGFkOgogICAgICAgLSBBZGQgb3B0aW9ucyBmb3Igc3dpdGNoaW5nIHRvIGEgZ2l2ZW4gdWlkIGFuZCBnaWQuCiAKIGRhdmVzICA5IEp1bCA5OSAwMTo0OTo0OQpAQCAtMTI2MTMyLDcgKzE5MDc2NCw3IEBACiAgICAgICBsb2FkYXZlLmMsIG1lbW9yeV9zb2xhcmlzMi5jLCBwYXNzLmMsIHBhc3NfcGVyc2lzdC5jLCBwcm9jLmMsCiAgICAgICB2ZXJzaW9uaW5mby5jLCBhbGFybS5jLCBldmVudC5jLCBNYWtlZmlsZS5pbiwgcGFyc2UuYywgc25tcC5jLAogICAgICAgc25tcF9kZWJ1Zy5jLCBzbm1wX2xvZ2dpbmcuYywgc25tcF9sb2dnaW5nLmgpOiBQYXRjaCBmcm9tIFJhZ25hcgotICAgICAgS2r4cnN0YWQ6CisgICAgICBLaueIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXniK31gJGL772k9YCMv3JzdGFkOgogICAgICAgLSBkbyBmaWxlLCBzdGRlcnIsIGFuZCBzeXNsb2cgc3VwcG9ydC4KIAogaGFyZGFrZXIgMjAgSnVsIDk5IDE3OjA2OjUzCmRpZmYgLS1naXQgYS9GQVEgYi9GQVEKaW5kZXggZjRmNzc1NS4uMjg0NGQzMyAxMDA2NDQKLS0tIGEvRkFRCisrKyBiL0ZBUQpAQCAtMSw3ICsxLDcgQEAKICAgICAgIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIChGQVEpIGZvciB0aGUgVUNEL05ldC1TTk1QIHBhY2thZ2UKICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkJICAgICAgIEZBUSBBdXRob3I6IERhdmUgU2hpZWxkCi0JICAgICAgICBOZXQtU05NUCBWZXJzaW9uOiA1LjQuNCBTVk4gYnJhbmNoCisJCQlOZXQtU05NUCBWZXJzaW9uOiA1LjcuMwogCSAgICBOZXQtU05NUC9VQ0QtU05NUCBQcm9qZWN0IExlYWRlcjogV2VzIEhhcmRha2VyCiAJICAgICBFbWFpbDogbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogCkBAIC0xMzE0LDcgKzEzMTQsNyBAQAogICBjb3ZlcmVkIGluIHRoZSBBR0VOVCBhbmQgQ09ESU5HIHNlY3Rpb25zLgogCiAgIFlvdSBzaG91bGQgYWxzbyByZWFkIHRoZSBzbm1wdHJhcCB0dXRvcmlhbCBhdAotCWh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvY29tbWFuZHMvc25tcHRyYXAuaHRtbAorICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9UVVQ6c25tcHRyYXAKICAgd2hpY2ggd2lsbCBoZWxwIHlvdSB1bmRlcnN0YW5kIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8ga25vdyBhYm91dCB0cmFwcy4KIAogCkBAIC0xMzUxLDcgKzEzNTEsNyBAQAogICAgICAgICBmb3J3YXJkIGRlZmF1bHQgICAgICAgICAgICAgICAgICAxMC4wLjAuMgogCiAgIFRoZXJlJ3MgYSB0dXRvcmlhbCB3aXRoIG1vcmUgZGV0YWlscyBvbiB0aGUgd2ViIHNpdGUgYXQKLQlodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L2NvbW1hbmRzL3NubXB0cmFwLmh0bWwKKyAgICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVFVUOnNubXB0cmFwCiAKIAogCkBAIC0yMTU4LDYgKzIxNTgsMTUgQEAKICAgb3V0cHV0IGlzIHJldHVybmVkIGluIGEgZml4ZWQgZm9ybWF0LCBhbmQgaXQgaXMgdXAgdG8gdGhlIHJlY2VpdmluZwogICBhcHBsaWNhdGlvbiB0byBpbnRlcnByZXQgdGhpcyBhcHByb3ByaWF0ZWx5LgogCisgIE5vdGUgdGhhdCB0aGUgInJlbG9jYXRhYmxlIiBmb3JtIG9mIHRoZSAnZXhlYycgZGlyZWN0aXZlICgnZXhlYyBPSUQgLi4uLicpCisgIHByb2R1Y2VzIE1JQiBvdXRwdXQgdGhhdCBpcyBub3Qgc3RyaWN0bHkgdmFsaWQuIEZvciB0aGlzIHJlYXNvbiwgc3VwcG9ydAorICBmb3IgdGhpcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiAnZXh0ZW5kIE9JRCAuLi4nLCB3aGljaCBwcm9kdWNlcworICB3ZWxsLWZvcm1lZCBNSUIgcmVzdWx0cyAoYXMgd2VsbCBhcyBwcm92aWRpbmcgZnVsbGVyIGZ1bmN0aW9uYWxpdHkpLgorICBUaGUgbW9zdCByZWNlbnQgcmVsZWFzZXMgb2YgdGhlIGFnZW50IGRvbid0IGluY2x1ZGUgc3VwcG9ydCBmb3IgInJlbG9jYXRhYmxlCisgIGV4ZWMiIGJ5IGRlZmF1bHQuIFRoaXMgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBpbmNsdWRlZCB3aGVuIHRoZSBhZ2VudCBpcworICBmaXJzdCBjb21waWxlZCwgYnkgaW5jbHVkaW5nIHRoZSBtb2R1bGUgJ3VjZC1zbm1wL2V4dGVuc2libGUnIGluc3RlYWQgb2YKKyAgJ2FnZW50L2V4dGVuZCcuCisKIAogICAncGFzcycgaXMgYSBtb3JlIGdlbmVyYWwgbWVjaGFuaXNtIGZvciBpbXBsZW1lbnRpbmcgYXJiaXRyYXJ5IE1JQgogICBvYmplY3RzLiAgVGhlIHNwZWNpZmllZCBjb21tYW5kIHdpbGwgYmUgaW52b2tlZCBmb3IgYW55IHJlcXVlc3Qgd2l0aGluCkBAIC0yNTk0LDcgKzI2MDMsNyBAQAogCiAKIFdoeSBkb2VzIHRoZSBhZ2VudCBjb21wbGFpbiBhYm91dCAnbm8gYWNjZXNzIGNvbnRyb2wgaW5mb3JtYXRpb24nPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgIEFsdGhvdWdoIGFuIFNOTVAgYWdlbnQgbWF5IHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIG1hbmFnZW1lbnQKICAgaW5mb3JtYXRpb24sIGl0IGlzIG5vdCBuZWNlc3NhcmlseSBhcHByb3ByaWF0ZSB0byByZXBvcnQgdGhlIHdob2xlCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOGMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxIEBACitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCAwZWE0MWFhLi5jZmNkZjczIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAtMSwzICsxLDQgQEAKKwogIwogIyBNYWtlZmlsZS5pbiAoYXQgdGhlIHJvb3Qgb2YgbmV0LXNubXApCiAjCkBAIC02LDYgKzcsNyBAQAogVlBBVEgJCT0gQHNyY2RpckAKIAogU1VCRElSUwkJPSBzbm1wbGliIEBNQUlOU1VCU0AKK0ZUU1VCRElSUwk9IEBGVE1BSU5TVUJTQCBzbm1wbGliCiBURVNURElSUwk9IHRlc3RpbmcKIAogQ1BQCQk9IEBDUFBAIAkJCQkJICAgICAgICBcCkBAIC0xMywyMiArMTUsMjMgQEAKIAkJLURET05UX0lOQ19TVFJVQ1RTIC1EQklORElSPSQoYmluZGlyKSAJCSAgICAgICAgXAogCQkkKEVYVFJBQ1BQRkxBR1MpCiAKLUlOU1RBTExIRUFERVJTPXZlcnNpb24uaAorSU5TVEFMTEhFQURFUlM9dmVyc2lvbi5oIG5ldC1zbm1wLWZlYXR1cmVzLmgKIElOQ0xVREVTVUJESVI9c3lzdGVtCiBJTkNMVURFU1VCRElSSEVBREVSUz0gYWl4LmggYnNkLmggYnNkaTMuaCBic2RpNC5oIGJzZGkuaCBjeWd3aW4uaCBcCi0JZGFyd2luLmggZGFyd2luNy5oIGRhcndpbjguaCBkYXJ3aW45LmggZHluaXguaCBcCisJZGFyd2luLmggZGFyd2luNy5oIGRhcndpbjguaCBkYXJ3aW45LmggZGFyd2luMTAuaCBkcmFnb25mbHkuaCBkeW5peC5oIFwKIAlmcmVlYnNkMi5oIGZyZWVic2QzLmggZnJlZWJzZDQuaCBmcmVlYnNkNS5oIGZyZWVic2Q2LmggXAogCWZyZWVic2Q3LmggZnJlZWJzZDguaCBmcmVlYnNkOS5oIGZyZWVic2QxMC5oIGZyZWVic2QxMS5oIFwKIAlmcmVlYnNkMTIuaCBmcmVlYnNkLmggXAotICAgICAgICBnZW5lcmljLmggaHB1eC5oIFwKLQlpcml4LmggbGludXguaCBtaW5ndzMyLmggbWlwcy5oIG5ldGJzZC5oIG9zZjUuaCBcCisgICAgICAgIGdlbmVyaWMuaCBcCisJaHB1eC5oIGlyaXguaCBsaW51eC5oIG1pbmd3MzIuaCBtaXBzLmggbmV0YnNkLmggb3NmNS5oIFwKIAlvcGVuYnNkLmggb3BlbmJzZDUuaCBvcGVuYnNkNC5oIFwKIAlzb2xhcmlzMi4zLmggc29sYXJpczIuNC5oIHNvbGFyaXMyLjUuaCBzb2xhcmlzMi42LmggXAotCXNvbGFyaXMuaCBzdW5vcy5oIHN2cjUuaCBzeXN2LmggdWx0cml4NC5oIGRyYWdvbmZseS5oCisJc29sYXJpcy5oIHN1bm9zLmggc3ZyNS5oIHN5c3YuaCB1bHRyaXg0LmgKIElOQ0xVREVTVUJESVIyPW1hY2hpbmUKIElOQ0xVREVTVUJESVJIRUFERVJTMj1nZW5lcmljLmgKIElOU1RBTExCVUlMVEhFQURFUlM9aW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotSU5TVEFMTEJJTlNDUklQVFM9bmV0LXNubXAtY29uZmlnCitJTlNUQUxMQlVJTFRJTkNMVURFSEVBREVSUz1ARkVBVFVSRUhFQURFUlNACitJTlNUQUxMQklOU0NSSVBUUz1uZXQtc25tcC1jb25maWcgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIKIElOU1RBTExVQ0RIRUFERVJTPXVjZC1zbm1wLWNvbmZpZy5oIHZlcnNpb24uaCBtaWJfbW9kdWxlX2NvbmZpZy5oCiAKICMKQEAgLTQ0LDEzICs0NywyMCBAQAogIyBwZXJsIHNwZWNpZmljCiAjCiAjIHllcywgb3JkZXIgbWF0dGVycyBoZXJlLiAgZGVmYXVsdF9zdG9yZSBtdXN0IG9jY3VyIGJlZm9yZSBhbnl0aGluZyBlbHNlCi1QRVJMTU9EVUxFUz1kZWZhdWx0X3N0b3JlIFNOTVAgQVNOIE9JRCBhZ2VudAorUEVSTE1PRFVMRVM9ZGVmYXVsdF9zdG9yZSBTTk1QIEFTTiBPSUQgYWdlbnQgVHJhcFJlY2VpdmVyCitQRVJMTU9EVUxFRlRTPXBlcmwvZGVmYXVsdF9zdG9yZS9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuZnQgXAorCXBlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuZnQgXAorCXBlcmwvQVNOL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5mdCBcCisJcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmZ0IFwKKwlwZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5mdCBcCisJcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmZ0CiBQRVJMQVJHUz1AUEVSTEFSR1NACiAKICMKICMgcHl0aG9uIHNwZWNpZmljCiAjCiBQWVRIT05BUkdTPUBQWVRIT05BUkdTQAorUFlUSE9OTU9EVUxFRlRTPXB5dGhvbi9uZXRzbm1wL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5mdAogCiAjCiAjIGxpYnRvb2wKQEAgLTU4LDkgKzY4LDE0IEBACiBMSUJUT09MX0RFUFMgPSBATElCVE9PTF9ERVBTQAogCiAjCisjIGZlYXR1cmUgY2hlY2tzIGZvciBvcHRpb25hbCBjb21wb25lbnRzCisjCitGVE9USEVSVEFSR1M9QFBFUkxGRUFUVVJFU0AgQFBZVEhPTkZFQVRVUkVTQAorCisjCiAjIHRhcmdldHMKICMKLWFsbDogICAgc2Vkc2NyaXB0IEVYQU1QTEUuY29uZiBzdGFuZGFyZGFsbCBuZXQtc25tcC1jb25maWcteCBAUEVSTFRBUkdTQCBAUFlUSE9OVEFSR1NACithbGw6ICAgIHNlZHNjcmlwdCBFWEFNUExFLmNvbmYgIEBGRUFUVVJFVEFSR1NAIHN0YW5kYXJkYWxsIG5ldC1zbm1wLWNvbmZpZy14IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIEBQRVJMVEFSR1NAIEBQWVRIT05UQVJHU0AKIAogc3RhcnQtZmxhZzoKIAlAdG91Y2ggYnVpbGQtaW4tcHJvZ3Jlc3MtZmxhZwpAQCAtNzIsMjMgKzg3LDIzIEBACiAJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjawogCiAKLXNubXBsaWI6Citzbm1wbGliOiBARkVBVFVSRVRBUkdTQAogCUAoY2Qgc25tcGxpYjsgJChNQUtFKSApCiAKLWFnZW50OgorYWdlbnQ6IEBGRUFUVVJFVEFSR1NACiAJQChjZCBzbm1wbGliOyAkKE1BS0UpICkKIAlAKGNkIGFnZW50OyAkKE1BS0UpICkKIAotYXBwczoKK2FwcHM6IEBGRUFUVVJFVEFSR1NACiAJQChjZCBzbm1wbGliOyAkKE1BS0UpICkKIAlAKGNkIGFnZW50OyAkKE1BS0UpIGxpYnMpCiAJQChjZCBhcHBzOyAkKE1BS0UpICkKIAotc25tcGdldCBzbm1wYnVsa2dldCBzbm1wd2FsayBzbm1wYnVsa3dhbGsgc25tcHRyYW5zbGF0ZSBzbm1wc3RhdHVzIHNubXBkZWx0YSBzbm1wdGFibGUgc25tcHRlc3Qgc25tcHNldCBzbm1wdXNtIHNubXB2YWNtIHNubXBnZXRuZXh0IGVuY29kZV9rZXljaGFuZ2Ugc25tcGRmIHNubXB0cmFwOgorc25tcGdldCBzbm1wYnVsa2dldCBzbm1wd2FsayBzbm1wYnVsa3dhbGsgc25tcHRyYW5zbGF0ZSBzbm1wc3RhdHVzIHNubXBkZWx0YSBzbm1wdGFibGUgc25tcHRlc3Qgc25tcHNldCBzbm1wdXNtIHNubXB2YWNtIHNubXBnZXRuZXh0IGVuY29kZV9rZXljaGFuZ2Ugc25tcGRmIHNubXB0cmFwIHNubXB0bHM6IEBGRUFUVVJFVEFSR1NACiAJQChjZCBzbm1wbGliOyAkKE1BS0UpICkKIAlAKGNkIGFwcHM7ICQoTUFLRSkgJEAgKQogCi1zbm1wdHJhcGQ6CithZ2VudHh0cmFwIHNubXB0cmFwZDogQEZFQVRVUkVUQVJHU0AKIAlAKGNkIHNubXBsaWI7ICQoTUFLRSkgKQogCUAoY2QgYWdlbnQ7ICQoTUFLRSkgbGlicykKIAlAKGNkIGFwcHM7ICQoTUFLRSkgJEAgKQpAQCAtOTgsNiArMTEzLDcgQEAKICMKIHNlZHNjcmlwdDogc2Vkc2NyaXB0LmluIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJChzcmNkaXIpL2FnZW50L21pYmdyb3VwL21pYmRlZnMuaAogCSQoQ1BQKSAkKHNyY2Rpcikvc2Vkc2NyaXB0LmluIHwgZWdyZXAgJ15zWy8jXScgfCBzZWQgJ3MvUkVNT1ZFTUUvL2c7cyMgKi8jLyNnO3MvICojLyMvZztzIy8gKiMvI2c7cy8jIGcvI2cvOycgPiBzZWRzY3JpcHQKKwllY2hvICdzL1ZFUlNJT05JTkZPLyQoVkVSU0lPTikvZycgPj4gc2Vkc2NyaXB0CiAJZWNobyAncyNEQVRBRElSIyQoZGF0YWRpcikjZycgPj4gc2Vkc2NyaXB0CiAJZWNobyAncyNMSUJESVIjJChsaWJkaXIpI2cnID4+IHNlZHNjcmlwdAogCWVjaG8gJ3MjQklORElSIyQoYmluZGlyKSNnJyA+PiBzZWRzY3JpcHQKQEAgLTEwNywyNCArMTIzLDIxIEBACiBFWEFNUExFLmNvbmY6IHNlZHNjcmlwdCBFWEFNUExFLmNvbmYuZGVmCiAJJChTRUQpIC1mIHNlZHNjcmlwdCAkKHNyY2RpcikvRVhBTVBMRS5jb25mLmRlZiA+IEVYQU1QTEUuY29uZgogCi1kb2NzOiBkb2NzZGlyIG1hbmNwCitkb2NzOiBkb2NzZGlyIAogCiBkb2NzZGlyOiBkb2NzZG94CiAKIGRvY3Nkb3g6IGRveHlnZW4uY29uZgotCXNyY2Rpcj0kKHNyY2RpcikgZG94eWdlbiAkKHNyY2RpcikvZG94eWdlbi5jb25mCi0JLXJtIGRvY3MvbWFuL21hbjMvdG9kby4zCi0JLXJtIGRvY3MvbWFuL21hbjMvZGVwcmVjYXRlZC4zCi0KLW1hbmNwOgotCUBmb3IgaSBpbiBkb2NzL21hbi9tYW4zLyogOyBkbyBcCi0JICAgICBjcCAkJGkgbWFuL25ldHNubXBfYGJhc2VuYW1lICQkaWAgOyBcCi0JZG9uZQorCXNyY2Rpcj0kKHNyY2RpcikgVkVSU0lPTj0kKFZFUlNJT04pIGRveHlnZW4gJChzcmNkaXIpL2RveHlnZW4uY29uZgogCiBuZXQtc25tcC1jb25maWcteDogbmV0LXNubXAtY29uZmlnCiAJY2htb2QgYSt4IG5ldC1zbm1wLWNvbmZpZwogCXRvdWNoIG5ldC1zbm1wLWNvbmZpZy14CiAKK25ldC1zbm1wLWNyZWF0ZS12My11c2VyLXg6IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyCisJY2htb2QgYSt4IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyCisJdG91Y2ggbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIteAorCiAjCiAjIGV4dHJhIGluc3RhbGwgcnVsZXMKICMKQEAgLTEzNywxMSArMTUwLDggQEAKICMKICMgdGVzdCB0YXJnZXRzCiAjCi10ZXN0OiBhbGwgdGVzdGRpcnMKLQkoIGNkIHRlc3Rpbmc7ICQoTUFLRSkgdGVzdCApCi0KLXRlc3QtbWliczogYWxsIHRlc3RkaXJzCi0JKCBjZCB0ZXN0aW5nOyAkKE1BS0UpIHRlc3QtbWlicyApCit0ZXN0IHRlc3QtbWlicyB0ZXN0YWxsIHRlc3RmYWlsZWQgdGVzdHNpbXBsZTogYWxsIHRlc3RkaXJzCisJKCBjZCB0ZXN0aW5nOyAkKE1BS0UpICRAICkKIAogdGVzdGRpcnM6CiAJZm9yIGkgaW4gJChURVNURElSUykgOyBkbwlcCkBAIC0xNTQsNyArMTY0LDcgQEAKIGRpc3RhbGw6ICR7c3JjZGlyfS9jb25maWd1cmUgJHtzcmNkaXJ9L2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggCiAKIE9USEVSQ0xFQU5UQVJHRVRTPUVYQU1QTEUuY29uZiBzZWRzY3JpcHQKLU9USEVSQ0xFQU5UT0RPUz1wZXJsY2xlYW4gQFBZVEhPTkNMRUFOVEFSR1NACitPVEhFUkNMRUFOVE9ET1M9cGVybGNsZWFuIEBQWVRIT05DTEVBTlRBUkdTQCBjbGVhbmZlYXR1cmVzIHBlcmxjbGVhbmZlYXR1cmVzIHB5dGhvbmNsZWFuZmVhdHVyZXMKIAogIwogIyBwZXJsIHNwZWNpZmljIGJ1aWxkIHJ1bGVzCkBAIC0xOTUsMTMgKzIwNSwyMSBAQAogCUBpZiB0ZXN0IC1mIHBlcmwvTWFrZWZpbGU7IHRoZW4gXAogCSAgICggY2QgcGVybCA7ICQoTUFLRSkgY2xlYW4gKSA7IFwKIAlmaQorCiBwZXJscmVhbGNsZWFuOgogCUBpZiB0ZXN0IC1mIHBlcmwvTWFrZWZpbGU7IHRoZW4gXAogCSAgICggY2QgcGVybCA7ICQoTUFLRSkgcmVhbGNsZWFuICkgOyBcCiAJZmkKIAorLmguZnQ6CisJJChGRUFUVVJFQ0hFQ0spIC0tZmVhdHVyZS1nbG9iYWwgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggYGRpcm5hbWUgJDxgICQ8ICRAICQoQ0MpIC1JICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlIC1JICQodG9wX3NyY2RpcikvaW5jbHVkZSAtRSAkKENQUEZMQUdTKSAkKENGTEFHUykgLWMKIAotIworcGVybGZlYXR1cmVzOiAkKFBFUkxNT0RVTEVGVFMpCisKK3BlcmxjbGVhbmZlYXR1cmVzOgorCSQoUk0pICQoUEVSTE1PRFVMRUZUUykKKworCiAjIHB5dGhvbiBzcGVjaWZpYyBidWlsZCBydWxlcwogIwogUFlNQUtFPSQoUFlUSE9OKSBzZXR1cC5weSAkKFBZVEhPTkFSR1MpCkBAIC0yMjksNiArMjQ3LDEwIEBACiBweXRob25jbGVhbjoKIAlAKGRpcj1gcHdkYDsgY2QgcHl0aG9uOyAkKFBZTUFLRSkgY2xlYW4gLS1iYXNlZGlyPSQkZGlyKQogCitweXRob25mZWF0dXJlczogJChQWVRIT05NT0RVTEVGVFMpCisKK3B5dGhvbmNsZWFuZmVhdHVyZXM6CisJJChSTSkgJChQWVRIT05NT0RVTEVGVFMpCiAKICMKICMgbWFrZSBkaXN0Y2xlYW4gY29tcGxldGVseSByZW1vdmVzIGFsbCB0cmFjZXMgb2YgYnVpbGRpbmcgaW5jbHVkaW5nCkBAIC0yNDcsMTIgKzI2OSwxNSBAQAogY29uZmlnY2xlYW46IG1ha2VmaWxlY2xlYW4KIAlybSAtZiBjb25maWcuY2FjaGUgY29uZmlnLnN0YXR1cyBjb25maWcubG9nIFwKIAkJbGlidG9vbCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIFwKLQkJbmV0LXNubXAtY29uZmlnIG5ldC1zbm1wLWNvbmZpZy14IGNvbmZpZ3VyZS1zdW1tYXJ5CisJCW5ldC1zbm1wLWNvbmZpZyBuZXQtc25tcC1jb25maWcteCBjb25maWd1cmUtc3VtbWFyeSBcCisJCW5ldC1zbm1wLWNyZWF0ZS12My11c2VyIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLXgKIAlybSAtZiBtaWJzLy5pbmRleAogCXJtIC1mIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAkJXAogCQlpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAkJXAogCQlpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmggXAotCQlzbm1wbGliL3NubXBzbV9pbml0LmggICAgICAgICAgICAgICAgICAgXAorCQlpbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oICAgICAgICAgICAgICAgICAgXAorCQlzbm1wbGliL3NubXBzbV9pbml0Lmggc25tcGxpYi9zbm1wc21fc2h1dGRvd24uaCAgICAgXAorICAgICAgICAgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oICAgICAgICAgICBcCiAJCWFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbmNsdWRlcy5oIAlcCiAJCWFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbml0cy5oIAlcCiAJCWFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9zaHV0ZG93bi5oIAlcCkBAIC0yNjAsNyArMjg1LDggQEAKIAkJYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbmNsdWRlcy5oIAlcCiAJCWFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfaW5pdHMuaCAJXAogCQlhZ2VudC9taWJncm91cC9taWJfbW9kdWxlX3NodXRkb3duLmggCVwKLQkJYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9kb3RfY29uZi5oCisJCWFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfZG90X2NvbmYuaCAgICBcCisJCWxvY2FsL3NubXBjb25mCiAJcm0gLXJmIG1rCiAJcm0gLWYgKi5jb3JlCiAKQEAgLTI4MSw4ICszMDcsMjggQEAKIAkgICAgZWNobyAiV0FSTklORzogbm90IHJ1bm5pbmcgY29uZmlnLnN0YXR1cyI7IFwKIAlmaQogCitjb25maWd1cmVfYWMgPSBjb25maWd1cmUuYWMgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50IFwKKwljb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzIFwKKwljb25maWd1cmUuZC9jb25maWdfb3NfbGliczEgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMiBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxIFwKKwljb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMyBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0IFwKKwljb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycyBcCisJY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcyBcCisJY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsIFwKKwljb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocyBcCisJY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24gXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzIFwKKwljb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZQorCiAkKHNyY2RpcikvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogc3RhbXAtaC5pbgotJChzcmNkaXIpL3N0YW1wLWguaW46IGNvbmZpZ3VyZS5pbiBhY2NvbmZpZy5oCiskKHNyY2Rpcikvc3RhbXAtaC5pbjogJChjb25maWd1cmVfYWMpIGFjY29uZmlnLmgKIAlAaWYgdGVzdCAieCQoTk9BVVRPREVQUykiID0gIngiIC1hICJ4JChBVVRPSEVBREVSKSIgIT0gIng6IjsgdGhlbiBcCiAJICAgIGNkICR7c3JjZGlyfSAmJiBMQ19DT0xMQVRFPUMgJChBVVRPSEVBREVSKTsgXAogCSAgICBlY2hvIHRpbWVzdGFtcCA+ICR7c3JjZGlyfS9zdGFtcC1oLmluOyBcCkBAIC0zMDEsNyArMzQ3LDcgQEAKIAkgICAgZWNobyAiV0FSTklORzogbm90IHJ1bm5pbmcgY29uZmlnLnN0YXR1cyI7IFwKIAlmaQogCi0kKHNyY2RpcikvY29uZmlndXJlOiBjb25maWd1cmUuaW4gYWNsb2NhbC5tNAorJChzcmNkaXIpL2NvbmZpZ3VyZTogJChjb25maWd1cmVfYWMpIGFjbG9jYWwubTQKIAlAaWYgdGVzdCAieCQoTk9BVVRPREVQUykiID0gIngiIC1hICJ4JChBVVRPQ09ORikiICE9ICJ4OiI7IHRoZW4gXAogCSAgICBjZCAke3NyY2Rpcn0gJiYgJChBVVRPQ09ORik7IFwKIAkgICAgZWNobyAiUGxlYXNlIHJ1biBjb25maWd1cmUgbm93LiI7IFwKQEAgLTMxMCw2ICszNTYsMzAgQEAKIAkgICAgZWNobyAiV0FSTklORzogbm90IHJ1bm5pbmcgYXV0b2NvbmYiOyBcCiAJZmkKIAorZ2VuZGlyPWRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzCitnZW5lcmF0aW9uLXNjcmlwdHM6IGdlbmVyYXRpb24tc2NyaXB0cy1kaXJzICQoZ2VuZGlyKS9nZW4tdHJhbnNwb3J0LWhlYWRlcnMgJChnZW5kaXIpL2dlbi1zZWN1cml0eS1oZWFkZXJzCisKKyQoZ2VuZGlyKS9nZW4tdmFyaWFibGVzOiAkKGdlbmRpcikvZ2VuLXZhcmlhYmxlcy5pbgorCS4vY29uZmlnLnN0YXR1cworCitnZW5lcmF0aW9uLXNjcmlwdHMtZGlyczoKKwlAaWYgWyAhIC1kIGRpc3QgXSA7IHRoZW4gXAorCSAgICBta2RpciBkaXN0IDsgICAgICAgIFwKKwlmaQorCUBpZiBbICEgLWQgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMgXSA7IHRoZW4gXAorCSAgICBta2RpciBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cyA7ICAgICAgICBcCisJZmkKKworJChnZW5kaXIpL2dlbi10cmFuc3BvcnQtaGVhZGVyczogJChnZW5kaXIpL2dlbi10cmFuc3BvcnQtaGVhZGVycy5pbiAkKGdlbmRpcikvZ2VuLXZhcmlhYmxlcworCXJtIC1mICRACisJYXV0b2NvbmYgLW8gJEAgJDwKKwljaG1vZCBhK3ggJEAKKworJChnZW5kaXIpL2dlbi1zZWN1cml0eS1oZWFkZXJzOiAkKGdlbmRpcikvZ2VuLXNlY3VyaXR5LWhlYWRlcnMuaW4gJChnZW5kaXIpL2dlbi12YXJpYWJsZXMKKwlybSAtZiAkQAorCWF1dG9jb25mIC1vICRAICQ8CisJY2htb2QgYSt4ICRACisKIGNvbmZpZy5zdGF0dXM6IGNvbmZpZ3VyZQogCUBpZiB0ZXN0ICJ4JChOT0FVVE9ERVBTKSIgPSAieCI7IHRoZW4gXAogCSAgICBlY2hvICJydW5uaW5nIGNvbmZpZy5zdGF0dXMgYmVjYXVzZSAkPyBjaGFuZ2VkIjsgXApAQCAtMzQ3LDI1ICs0MTcsMzUgQEAKIAlmaQogCiBjaGVja3M6Ci0JJChNQUtFKSAtayBtYWtlZmlsZWNoZWNrIGNvbW1lbnRjaGVjayB3YXJuaW5nY2hlY2sgZGVwZW5kY2hlY2sKKwkkKE1BS0UpIC1rIG1ha2VmaWxlY2hlY2sgY29tbWVudGNoZWNrIHdhcm5pbmdjaGVjayBkZXBlbmRjaGVjayBcCisJYXNzZXJ0Y2hlY2sgcGVybGNhbGxvY2NoZWNrCiAKIGRlcGVuZGNoZWNrOgogCUBlY2hvICJDaGVja2luZyBmb3IgZnVsbCBwYXRocyBpbiBkZXBlbmRlbmN5IGZpbGVzLi4uIgotCUBncmVwIC1uIC1FICJeLyIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSBNYWtlZmlsZS5kZXBlbmRgICYmIGV4aXQgMQorCUBpZiBncmVwIC1uIC1FICJeLyIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSBNYWtlZmlsZS5kZXBlbmRgOyB0aGVuIGZhbHNlOyBmaQogCiB3YXJuaW5nY2hlY2s6CiAJQGVjaG8gIkNoZWNraW5nIGZvciBjcHAgd2FybmluZ3MuLi4iCi0JQGdyZXAgLW4gLUUgIiN3YXJuaW5nIiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIFwqLlxbY2hcXWAgJiYgZXhpdCAxCisJQGlmIGdyZXAgLW4gIiN3YXJuaW5nIiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIFwqLlxbY2hcXWA7IHRoZW4gZmFsc2U7IGZpCisKK2Fzc2VydGNoZWNrOgorCUBlY2hvICJDaGVja2luZyBmb3Igbm9uLXNubXAgYXNzZXJ0cy4uLiIKKwlAaWYgZ3JlcCAtbiAtdyAiYXNzZXJ0IiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIFwqLlxbY2hcXSB8IGdyZXAgLXYgc25tcF9hc3NlcnQuaCB8IGVncmVwIC12ICdwZXJsLy4qYycgfCBncmVwIC12IG9wZW5zc2xgOyB0aGVuIGZhbHNlOyBmaQogCiBjb21tZW50Y2hlY2s6CiAJQGVjaG8gIkNoZWNraW5nIGZvciBDKysgc3R5bGUgY29tbWVudHMuLi4iCi0JQGdyZXAgLW4gLUUgIihbXjopbl18XikvLyIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtcGF0aCAnLi93aW4zMicgLXBydW5lIC1vIC1uYW1lIFwqLlxbY2hcXSB8IGdyZXAgLXYgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmNgICYmIGV4aXQgMQorCUBpZiBncmVwIC1uIC1FICIoW146KW5dfF4pLy8iIGAkKEZJTkQpICQodG9wX3NyY2RpcikgLXBhdGggJy4vd2luMzInIC1wcnVuZSAtbyAtbmFtZSBcKi5cW2NoXF0gfCBncmVwIC12IGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jYDsgdGhlbiBmYWxzZTsgZmkKIAotIyBhbHdheXMgZXhpdCAxLCBzaW5jZSBJIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIGludmVydCBncmVwIHJjCiBtYWtlZmlsZWNoZWNrOgogCUBlY2hvICJDaGVja2luZyBmb3Igbm9uLXBvcnRhYmxlIE1ha2VmaWxlIGNvbnN0cnVjdHMuLi4iCi0JQGdyZXAgLW4gIlwuYz0iIGAkKEZJTkQpICQodG9wX3NyY2RpcikgLW5hbWUgIk1ha2VmaWxlLioiYAotCUBleGl0IDEKKwlAaWYgZ3JlcCAtbiAiXC5jPSIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSAuc3ZuIC1wcnVuZSAtbyAtcGF0aCAuL01ha2VmaWxlLmluIC1wcnVuZSAtbyAtbmFtZSAiTWFrZWZpbGUuKiIgLXByaW50YDsgdGhlbiBmYWxzZTsgZmkKKworIyBJbnZva2luZyBjYWxsb2MoKSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGZyb20gYSBQZXJsIFhTVUIgYW5kIGZyZWVpbmcgdGhhdAorIyBtZW1vcnkgYnkgY2FsbGluZyBmcmVlKCkgZnJvbSB0aGUgWFNVQiBpcyBhIHN1cmUgd2F5IHRvIHRyaWdnZXIgIkZyZWUgdG8KKyMgd3JvbmcgcG9vbCIgZXJyb3JzIG9uIFdpbmRvd3MuCitwZXJsY2FsbG9jY2hlY2s6CisJQGVjaG8gIkNoZWNraW5nIGZvciBjYWxsb2MoKSBpbiBQZXJsJ3MgZXh0ZXJuYWwgc3Vicm91dGluZXMgLi4uIgorCUBpZiBncmVwIC1ud0UgJ2NhbGxvY3xTTk1QX01BTExPQ19TVFJVQ1R8U05NUF9NQUxMT0NfVFlQRURFRicgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSAnKi54cydgOyB0aGVuIGZhbHNlOyBmaQogCiBkaXN0OiB0YXIKIApAQCAtMzc4LDMgKzQ1OCw0IEBACiAJc25tcGdldCBzbm1wYnVsa2dldCBzbm1wd2FsayBzbm1wYnVsa3dhbGsgc25tcHRyYW5zbGF0ZSBzbm1wc3RhdHVzIFwKIAlzbm1wZGVsdGEgc25tcHRhYmxlIHNubXB0ZXN0IHNubXBzZXQgc25tcHVzbSBzbm1wdmFjbSBzbm1wZ2V0bmV4dCBcCiAJZW5jb2RlX2tleWNoYW5nZSBzbm1wZGYgc25tcHRyYXAgc25tcHRyYXBkCisuUEhPTlk6IHBlcmxmZWF0dXJlcyBweXRob25mZWF0dXJlcwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucnVsZXMgYi9NYWtlZmlsZS5ydWxlcwppbmRleCA2NTY4N2VmLi45ZTllOTAwIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5ydWxlcworKysgYi9NYWtlZmlsZS5ydWxlcwpAQCAtMTQsNiArMTQsNjIgQEAKIAogb2JqczogJHtPQkpTfSAke0xPQkpTfQogCisjIGZlYXR1cmVzIHJlcXVpcmUgdGhhdCBzdWJkaXJzIGJlIG1hZGUgKmZpcnN0KiB0byBnZXQgZGVwZW5kZW5jeQorIyBjb2xsZWN0aW9uIHByb2Nlc3NlZCBpbiB0aGUgcmlnaHQgb3JkZXIKKy5QSE9OWTogZmVhdHVyZXMgZnRvYmpzIGZ0c3ViZGlycworZmVhdHVyZXM6ICQoRlRPVEhFUlRBUkdTKSBmdHN1YmRpcnMgZnRvYmpzICQoRkVBVFVSRUZJTEUpCitmdG9ianM6ICQoRlRPQkpTKQorJChGRUFUVVJFRklMRSk6ICQoRlRPQkpTKSAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaAorCWNhdCAkKEZUT0JKUykgPiAkKEZFQVRVUkVGSUxFKS5pbgorCSQoRkVBVFVSRVBST0NFU1MpICQoRkVBVFVSRUZJTEUpICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oIEBGRUFUVVJFX1JFTU9WRV9GTEFHU0AgQEZFQVRVUkVfQUREX0ZMQUdTQAorZnRzdWJkaXJzOgorCUBpZiB0ZXN0ICIkKEZUU1VCRElSUykiICE9ICIiOyB0aGVuIFwKKwkgICAgU1VCRElSUz0iJChGVFNVQkRJUlMpIiA7ICAgICAgICBcCisgICAgICAgIGVsc2UgCQkJIAkgICAgXAorICAgICAgICAgICAgU1VCRElSUz0iJChTVUJESVJTKSIgOyAgICAgICAgICBcCisgICAgICAgIGZpIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiB0ZXN0ICIkJFNVQkRJUlMiICE9ICIiOyB0aGVuIFwKKwkJaXQ9IiQkU1VCRElSUyIgOyBcCisJCWZvciBpIGluICQkaXQgOyBkbyBcCisJCQllY2hvICJtYWtpbmcgZmVhdHVyZXMgaW4gYHB3ZGAvJCRpIjsgXAorCQkJKCBjZCAkJGkgOyAkKE1BS0UpIGZlYXR1cmVzICkgOyBcCisJCQlpZiB0ZXN0ICQkPyAhPSAwIDsgdGhlbiBcCisJCQkJZXhpdCAxIDsgXAorCQkJZmkgIFwKKwkJZG9uZSBcCisJZmkKKworLlBIT05ZOiBjbGVhbmZlYXR1cmVzIGNsZWFuZmVhdHVyZXNzdWJkaXJzCitjbGVhbmZlYXR1cmVzOiBjbGVhbmZlYXR1cmVzc3ViZGlycworCSAgICAgICBybSAtZiAkKEZUT0JKUykKKwkgICAgICAgcm0gLWYgJChGRUFUVVJFRklMRSkKKwkgICAgICAgcm0gLWYgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmgKKworY2xlYW5mZWF0dXJlc3N1YmRpcnM6CisJQGlmIHRlc3QgIiQoRlRTVUJESVJTKSIgIT0gIiI7IHRoZW4gXAorCSAgICBTVUJESVJTPSIkKEZUU1VCRElSUykiIDsgICAgICAgIFwKKyAgICAgICAgZWxzZSAJCQkgCSAgICBcCisgICAgICAgICAgICBTVUJESVJTPSIkKFNVQkRJUlMpIiA7ICAgICAgICAgIFwKKyAgICAgICAgZmkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIHRlc3QgIiQkU1VCRElSUyIgIT0gIiI7IHRoZW4gXAorCQlpdD0iJCRTVUJESVJTIiA7IFwKKwkJZm9yIGkgaW4gJCRpdCA7IGRvIFwKKwkJCWVjaG8gIm1ha2luZyBjbGVhbmZlYXR1cmVzIGluIGBwd2RgLyQkaSI7IFwKKwkJCSggY2QgJCRpIDsgJChNQUtFKSBjbGVhbmZlYXR1cmVzICkgOyBcCisJCQlpZiB0ZXN0ICQkPyAhPSAwIDsgdGhlbiBcCisJCQkJZXhpdCAxIDsgXAorCQkJZmkgIFwKKwkJZG9uZSBcCisJZmkKKworIyBmZWF0dXJlLWNoZWNrIGRlZmluaXRpb25zCisuU1VGRklYRVM6IC5mdAorLmMuZnQ6CisJQHRlc3QgLWYgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggfHwgXAorCSAgICBlY2hvICIvKiBHZW5lcmF0ZWQgYnkgbWFrZS4gRG8gbm90IG1vZGlmeSBkaXJlY3RseSAqLyIgXAorCQk+ICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oCisJJChGRUFUVVJFQ0hFQ0spIC0tZmVhdHVyZS1nbG9iYWwgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggJChteXN1YmRpcikgJDwgJEAgJChDQykgLUUgJChDUFBGTEFHUykgJChDRkxBR1MpIC1jCisKIHN1YmRpcnM6CiAJQGlmIHRlc3QgIiQoU1VCRElSUykiICE9ICIiOyB0aGVuIFwKIAkJaXQ9IiQoU1VCRElSUykiIDsgXApAQCAtNDIsNiArOTgsNyBAQAogIyBoZWFkZXJzCiAjCiAjIHNldCBJTlNUQUxMSEVBREVSUyB0byBhIGxpc3Qgb2YgdGhpbmdzIHRvIGluc3RhbGwgaW4gZWFjaCBtYWtlZmlsZS4KKyMgc2V0IElOU1RBTExCVUlMVElOQ0xVREVIRUFERVJTIGEgbGlzdCBidWlsdCBhbmQgcGxhY2VkIGludG8gaW5jbHVkZS9uZXQtc25tcC8KICMgc2V0IElOU1RBTExCVUlMVEhFQURFUlMgdG8gYSBsaXN0IG9mIHRoaW5ncyB0byBpbnN0YWxsIGZyb20gYnVpbGRkaXIKICMgc2V0IElOU1RBTExTVUJESVJIRUFERVJTIGFuZCBJTlNUQUxMU1VCRElSIHRvIHN1YmRpcmVjdG9yeSBoZWFkZXJzCiAjIHNldCBJTlNUQUxMU1VCRElSSEVBREVSUzIgYW5kIElOU1RBTExTVUJESVIyIHRvIG1vcmUgc3ViZGlyZWN0b3J5IGhlYWRlcnMKQEAgLTUwLDYgKzEwNywxNiBAQAogaW5zdGFsbGhlYWRlcnM6IGluc3RhbGxsb2NhbGhlYWRlcnMgQGluc3RhbGx1Y2RoZWFkZXJzQCBpbnN0YWxsc3ViZGlyaGVhZGVycwogCiBpbnN0YWxsbG9jYWxoZWFkZXJzOgorCUBpZiB0ZXN0ICIkKElOU1RBTExCVUlMVElOQ0xVREVIRUFERVJTKSIgIT0gIiIgOyB0aGVuIFwKKwkJZWNobyBjcmVhdGluZyBkaXJlY3RvcnkgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpIDsgXAorCQlpdD0iJChJTlNUQUxMQlVJTFRJTkNMVURFSEVBREVSUykiIDsgXAorCQkkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpL2xpYnJhcnkgOyBcCisJCSQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQgOyBcCisJCWZvciBpIGluICQkaXQgOyBkbyBcCisJCQkkKElOU1RBTExfREFUQSkgaW5jbHVkZS9uZXQtc25tcC8kJGkgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpLyQkaSA7IFwKKwkJCWVjaG8gImluc3RhbGxpbmcgJCRpIGluICQoSU5TVEFMTF9QUkVGSVgpJChpbmNsdWRlZGlyKS8kJGkiIDsgXAorCQlkb25lIFwKKwlmaQogCUBpZiB0ZXN0ICIkKElOU1RBTExIRUFERVJTKSIgIT0gIiIgOyB0aGVuIFwKIAkJZWNobyBjcmVhdGluZyBkaXJlY3RvcnkgJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpIDsgXAogCQlpdD0iJChJTlNUQUxMSEVBREVSUykiIDsgXApAQCAtMzI3LDcgKzM5NCw3IEBACiAjIGNsZWFuaW5nIHRhcmdldHMKICMKIGNsZWFuOiBjbGVhbnN1YmRpcnMgJChPVEhFUkNMRUFOVE9ET1MpCi0JJChMSUJUT09MQ0xFQU4pICR7T0JKU30gJHtMT0JKU30gY29yZSAkKFNUQU5EQVJEQ0xFQU5UQVJHRVRTKSAkKE9USEVSQ0xFQU5UQVJHRVRTKQorCSQoTElCVE9PTENMRUFOKSAke09CSlN9ICR7TE9CSlN9ICAke0ZUT0JKU30gY29yZSAkKFNUQU5EQVJEQ0xFQU5UQVJHRVRTKSAkKE9USEVSQ0xFQU5UQVJHRVRTKQogCiBjbGVhbnN1YmRpcnM6CiAJQGlmIHRlc3QgIiQoU1VCRElSUykiICE9ICIiOyB0aGVuIFwKQEAgLTQwNCw1ICs0NzEsNSBAQAogLlBIT05ZOiBjbGVhbiBjbGVhbnN1YmRpcnMgbGludCBcCiAJaW5zdGFsbCBpbnN0YWxscHJvZ3MgaW5zdGFsbGhlYWRlcnMgaW5zdGFsbGxpYnMgXAogCWluc3RhbGxiaW4gaW5zdGFsbHNiaW4gaW5zdGFsbHN1YmRpcnMgXAotCWFsbCBzdWJkaXJzIHN0YW5kYXJkYWxsIG9ianMgXAorCWFsbCBzdWJkaXJzIHN0YW5kYXJkYWxsIG9ianMgZmVhdHVyZXMgXAogCWRlcGVuZCBub3N5c2RlcGVuZCBkaXN0ZGVwZW5kIGRlcGVuZGRpcnMgbm9zeXNkZXBlbmRkaXJzIGRpc3RkZXBlbmRkaXJzCmRpZmYgLS1naXQgYS9NYWtlZmlsZS50b3AgYi9NYWtlZmlsZS50b3AKaW5kZXggYzRjNDRlZS4uNTAzZjYxZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudG9wCisrKyBiL01ha2VmaWxlLnRvcApAQCAtMSw3ICsxLDcgQEAKICMKICMgTWluaW11bSBlbnZpcm9ubWVudCBhbmQgdmlydHVhbCBwYXRoIHNldHVwCiAjCi1TSEVMTAkJPSAvYmluL3NoCitTSEVMTAkJPSBAU0hFTExACiBzcmNkaXIJCT0gQHNyY2RpckAKIHRvcF9zcmNkaXIJPSBAdG9wX3NyY2RpckAKIFZFUlNJT04JCT0gQFZFUlNJT05ACkBAIC0xNSw2ICsxNSw3IEBACiBiaW5kaXIJCT0gQGJpbmRpckAKIHNiaW5kaXIJCT0gQHNiaW5kaXJACiBsaWJkaXIJCT0gQGxpYmRpckAKK2RhdGFyb290ZGlyCT0gQGRhdGFyb290ZGlyQAogZGF0YWRpcgkJPSBAZGF0YWRpckAKIGluY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAvbmV0LXNubXAKIHVjZGluY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAvdWNkLXNubXAKQEAgLTM1LDYgKzM2LDggQEAKIElOU1RBTEwJCT0gJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBASU5TVEFMTEAKIFVOSU5TVEFMTAk9ICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZgogTElCVE9PTENMRUFOCT0gJChMSUJUT09MKSAtLW1vZGU9Y2xlYW4gcm0gLWYKK0ZFQVRVUkVDSEVDSwk9ICQodG9wX3NyY2RpcikvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrCitGRUFUVVJFUFJPQ0VTUwk9ICQodG9wX3NyY2RpcikvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZQogSU5TVEFMTF9EQVRBICAgID0gQElOU1RBTExfREFUQUAKIFNFRAkJPSBAU0VEQAogTE5fUwkJPSBATE5fU0AKQEAgLTQzLDYgKzQ2LDcgQEAKIFBFUkwgICAgICAgICAgICA9IEBQRVJMUFJPR0AKIFBZVEhPTiAgICAgICAgICA9IEBQWVRIT05QUk9HQAogRklORCAgICAgICAgICAgID0gQEZJTkRACitFR1JFUCAgICAgICAgICAgPSBARUdSRVBACiAKICMKICMgQ29tcGlsZXIgYXJndW1lbnRzCkBAIC02MSw3ICs2NSw3IEBACiAjIFRoZSAoc2xpZ2h0bHkgY2xhcmlmaWVkKSBydWxlczoKICMKICMgLSBJZiBhbnkgaW50ZXJmYWNlcy9zdHJ1Y3R1cmVzIGhhdmUgYmVlbiByZW1vdmVkIG9yIGNoYW5nZWQgc2luY2UgdGhlCi0jICAgbGFzdCB1cGRhdGUsIGluY3JlbWVudCBjdXJyZW50LCBhbmQgc2V0IGFnZSBhbmQgcmV2aXNpb24gdG8gMC4gU3RvcC4KKyMgICBsYXN0IHVwZGF0ZSwgaW5jcmVtZW50IGN1cnJlbnQgKCs1KSwgYW5kIHNldCBhZ2UgYW5kIHJldmlzaW9uIHRvIDAuIFN0b3AuCiAjCiAjIC0gSWYgYW55IGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IHB1YmxpYyByZWxlYXNlLCB0aGVuCiAjICAgaW5jcmVtZW50IGN1cnJlbnQgYW5kIGFnZSwgYW5kIHNldCByZXZpc2lvbiB0byAwLiBTdG9wLgpAQCAtNzUsMTUgKzc5LDE1IEBACiAjIHBvbGljeTogd2UgaW5jcmVtZW50IG1ham9yIHJlbGVhc2VzIG9mIExJQkNVUlJFTlQgYnkgNSBzdGFydGluZyBhdAogIyA1LjMgd2FzIGF0IDEwLCA1LjQgaXMgYXQgMTUsIC4uLiAgVGhpcyBsZWF2ZXMgc29tZSByb29tIGZvciBuZWVkZWQKICMgY2hhbmdlcyBmb3IgcGFzdCByZWxlYXNlcyBpZiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4KLSMgCi1MSUJDVVJSRU5UICA9IDE2Ci1MSUJBR0UgICAgICA9IDEKKyMKK0xJQkNVUlJFTlQgID0gMzAKK0xJQkFHRSAgICAgID0gMAogTElCUkVWSVNJT04gPSAzCiAKIExJQl9MRF9DTUQgICAgICA9ICQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChMSU5LQ0MpICQoQ0ZMQUdTKSAtcnBhdGggJChsaWJkaXIpIC12ZXJzaW9uLWluZm8gJChMSUJDVVJSRU5UKTokKExJQlJFVklTSU9OKTokKExJQkFHRSkgLW8KIExJQl9FWFRFTlNJT04gICA9IGxhCiBMSUJfVkVSU0lPTiAgICAgPQotTElCX0xEQ09ORklHX0NNRCA9ICQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAkKGxpYmRpcikKK0xJQl9MRENPTkZJR19DTUQgPSAkKExJQlRPT0wpIC0tbW9kZT1maW5pc2ggJChJTlNUQUxMX1BSRUZJWCkkKGxpYmRpcikKIExJTksJCT0gJChMSUJUT09MKSAtLW1vZGU9bGluayAkKExJTktDQykKICMgUkFOTElCIAk9IEBSQU5MSUJACiBSQU5MSUIJCT0gOgpAQCAtMTEzLDUgKzExNyw1IEBACiBTTk1QTElCX0lOQ0xVREVTICAgICAgICA9ICQoQFNOTVBMSUJfSU5DTFVERVNAKQogQUdFTlRfSU5DTFVERVMgICAgICAgICAgPSAkKEBBR0VOVF9JTkNMVURFU0ApCiBIRUxQRVJfSU5DTFVERVMgICAgICAgICA9ICQoQEhFTFBFUl9JTkNMVURFU0ApCi1NSUJHUk9VUF9JTkNMVURFUyAgICAgICA9ICQoQE1JQkdST1VQX0lOQ0xVREVTQCkKK01JQkdST1VQX0lOQ0xVREVTICAgICAgID0gJChATUlCR1JPVVBfSU5DTFVERVNAKSBARVhURVJOQUxfTUlCR1JPVVBfSU5DTFVERVNACiAKZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IDM4YjYyY2YuLjkzOTZhZWUgMTAwNjQ0Ci0tLSBhL05FV1MKKysrIGIvTkVXUwpAQCAtMywxMDYgKzMsMzM0IEBACiB0aGF0IGhhdmUgYmVlbiBmaXhlZC9hcHBsaWVkLCBhbmQgdGhlIENoYW5nZUxvZyBmaWxlIGZvciBhIGNvbXByZWhlbnNpdmUKIGxpc3Rpbmcgb2YgYWxsIGNoYW5nZXMgbWFkZSB0byB0aGUgY29kZS4KIAotKjUuNC40KgorKjUuNy4zKgorICAgIE1hbnkgbWFueSBidWcgZml4ZXMgYW5kIG1pbm9yIGltcHJvdmVtZW50cwogCi0gICAgc25tcGxpYjoKLSAgICAgIC0gW0JVRyAzMTcxODc4XTogVXNpbmcgU05NUHYzIGNvbnRleHQgZG9lcyBub3Qgd29yawotCi0gICAgc25tcGQ6Ci0gICAgICAtIFZhcmlvdXMgNjQtYml0IGZpeGVzCi0KLSAgICBGcmVlQlNELE5ldEJTRCxPcGVuQlNEOgotICAgICAgICBJbmNvcnBvcmF0ZSBmaXhlcyBmcm9tIHRoZXNlIE8vUyBwYXRjaCBhcmNoaXZlcwotCi0KLSo1LjQuMyoKLQotICAgIHNubXBkOgotICAgICAgLSBDaGFuZ2UgZGVmYXVsdCBBZ2VudFggdGFyZ2V0IGZyb20gMC4wLjAuMDo3MDUgdG8gbG9jYWxob3N0OjcwNQotICAgICAgLSBGaXggQ1ZFLTIwMDgtNDMwOSAoR0VUQlVMSyBpc3N1ZSByZXBvcnRlZCBieSBPc2NhciBNaXJhLVNhbmNoZXopCi0gICAgICAtIEZpeCBoYW5kbGluZyBvZiBtdWx0aXBsZSBtYXRjaGluZyBWQUNNIGVudHJpZXMKLSAgICAgICAgKFVzZSB0aGUgImJlc3QiIG1hdGNoLCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lKS4KLSAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mCi0gICAgICAgICAgICBleGlzdGluZyBhY2Nlc3MgY29udHJvbCBjb25maWd1cmF0aW9ucy4KLSAgICAgIC0gTGF0Y2ggbGFyZ2UtZGlzayBzdGF0aXN0aWNzIGF0IDJUYiAocmF0aGVyIHRoYW4gd3JhcHBpbmcpCi0KLSAgICBMaW51eDoKLSAgICAgIC0gRml4IGJ1aWxkIG9uIG1vZGVybiBkaXN0cmlidXRpb25zICh1c2luZyBycG0tNC42KQotCi0gICAgV2luZG93czoKLSAgICAgIC0gRml4IHZhcmlvdXMgYnVpbGRzIChyZWNlbnQgTVNWQywgTWluR1csIElQdjYsIHdpbkV4dERMTCkKLQotCi0qNS40LjIqCi0KLSAgICBzbm1wbGliOgotICAgICAgLSBbUEFUQ0ggMTkyMTg2MV06IEF2b2lkIGVuZGxlc3MgbG9vcCBhZnRlciB0cnVuY2F0aW5nIDY0Yml0IGludAotICAgICAgLSBCZXR0ZXIgaGFuZGxpbmcgb2YgQ09OVEFJTkVSX0lOU0VSVCBmYWlsdXJlcyB3aXRoIG11bHRpcGxlIGluZGljZXMKLQotICAgIHNubXBkOgotICAgICAgLSBbUEFUQ0ggMjAyMzYzM106IGFkZCBTQ1RQLU1JQiBpbXBsZW1lbnRhdGlvbiAoTGludXggb25seSkKLSAgICAgIC0gc3VwcHJlc3MgYW5ub3lpbmcgInJlZ2lzdHJhdGlvbiAhPSBkdXBsaWNhdGUiIHdhcm5pbmcgZm9yIHJvb3Qgb2lkcwotCi0gICAgYnVpbGQ6Ci0gICAgICAtIFtCVUcgMjAyMzgwM106IENvbXBpbGF0aW9uIHByb2JsZW1zIG9uIEhQLVVYIDExLjMxCi0gICAgICAtIFVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNgotCi0gICAgQUlYOgotICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgQUlYIDYueC4KLQotCi0qNS40LjEqCi0KLSAgICBzbm1wbGliOgotICAgICAgLSBbQlVHIDE2MTk4MjddOiBsaW5rIGxpYnJhcmllcyBhZ2FpbnN0IG5lZWRlZCBleHRlcm5hbCBsaWJyYXJpZXMKLSAgICAgIC0gW1BBVENIIDE2MTY5MTJdOiBmaXggbWVtb3J5IGxlYWsgaW4gVURQIHRyYW5zcG9ydCBjb2RlCi0gICAgICAtIFtQQVRDSCAxNTkyNzA2XTogZml4IG1lbW9yeSBsZWFrIHdoZW4gY2xvbmluZyB2YXJiaW5kcwotICAgICAgLSBDaGFuZ2Ugc25tcF9zZXNzX2FkZF9leCB0byBjb25zaXN0ZW50bHkgY2xvc2UgYW5kIGRlbGV0ZSB0aGUKLSAgICAgICAgdHJhbnNwb3J0IGFyZ3VtZW50IG9uIGZhaWx1cmUsIGVhcmxpZXIgdGhlIGxpdmVuZXNzIG9mIHRoZQotICAgICAgICB0cmFuc3BvcnQgYXJndW1lbnQgd2FzIHVuZGVjaWRlZC4KLQotICAgIHNubXBkOgotICAgICAgLSBbQlVHIDE1NTg4MjNdOiBmaXggaXBBZGRyZXNzVGFibGUgbWVtb3J5IGxlYWsKLSAgICAgIC0gW0JVRyAxNTk2NjM4XTogZml4IG1lbW9yeSBsZWFrIGluIGlwQ2lkclJvdXRlVGFibGUsIGluZXRDaWRyUm91dGVUYWJsZQotICAgICAgLSBbQlVHIDE2MTE1MjRdOiBmaXggdGNwIGNvbm5lY3Rpb24gdGFibGUgZmlsZSBkZXNjcmlwdG9yIGxlYWsKLSAgICAgIC0gaGFuZGxlIHJvdyBkZWxldGlvbiBpc3N1ZXMgaW4gZGF0YXNldCB0YWJsZXMKLSAgICAgIC0gW0JVRyAxNzEyOTg4XTogZGVmYXVsdCBhbmQgY29uZmlndXJhYmxlIG1heGltdW0gbnVtYmVyIG9mCi0gICAgICAgIHZhcmJpbmRzIHJldHVybmFibGUgdG8gYSBHRVRCVUxLIHJlcXVlc3QuCi0gICAgICAtIFtQQVRDSCAxNjY2NzM3XTogaW5jbHVkZSBpcHY2IGNvdW50cyBpbgotCXVkcEluRGF0YWdyYW1zLCB1ZHBOb1BvcnRzLCB1ZHBJbkVycm9ycywgdWRwT3V0RGF0YWdyYW1zCi0gICAgICAtIFtQQVRDSCAxNzAwMTU3XTogZml4ZXMgb3JkZXJpbmcgb2YgZXhlYyB0b2tlbnMgaW4gdGhlIHJlc3VsdGluZyBtaWIgdHJlZQotICAgICAgLSBbUEFUQ0ggMTcxOTI1M106IGZpeCBza2lwTkZTSW5Ib3N0UmVzb3VyY2VzIHNvIGl0IGRvZXMgbm90IGJyZWFrIG9uIHRoZQotCXNlY29uZCB3YWxrIG9mIHRoZSB0YWJsZS4KKyAgICBzbm1wZCwgc25tcHRyYXBkIGFuZCBhcHBzOgorICAgICAgLSBQYXRjaCAyNTI1OiBmcm9tIFJ5YW4gU3RlaW5tZXR6OiBGaXggYXJndW1lbnQgbGVuZ3RoIHBhcnNpbmcgb2YgdGhlCisJaG9zdCByZXNvdXJjZXMgbWliCisgICAgICAtIE1ha2UgRU5WX1NFUEFSQVRPUl9DSEFSIGNvbmZpZ3VyYWJsZQorICAgICAgLSBTRUNVUklUWTogYSBkZW5pYWwgb2Ygc2VydmljZSBhdHRhY2sgdmVjdG9yIHdhcyBkaXNjb3ZlcmVkIG9uCisgICAgICAgIHRoZSBsaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSUNNUC1NSUIuICBUaGlzIHJlbGVhc2UgZml4ZXMKKyAgICAgICAgdGhpcyBidWcgYW5kIGFsbCB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byB1cGRhdGUgdGhlaXIgU05NUAorICAgICAgICBhZ2VudCBpZiB0aGV5IG1ha2UgdXNlIG9mIHRoZSBJQ01QLU1JQiB0YWJsZSBvYmplY3RzLgogCiAgICAgcGVybDoKLSAgICAgIC0gbGluayBQZXJsIG1vZHVsZXMgYWdhaW5zdCB0aGUgZXhhY3Qgc2V0IG9mIGxpYnJhcmllcyBuZWVkZWQKLSAgICAgIC0gW0JVRyAxNjE5ODI3XTogcHJvcGVybHkgbGluayBhZ2FpbnN0IGxpYnBlcmwgd2hlbiBjb25maWd1cmVkIHdpdGgKLQktLWVuYWJsZS1hcy1uZWVkZWQKLSAgICAgIC0gW1BBVENIIDE3MjUwNDldOiBmaXggYnVsa3dhbGsgaW4gY2FzZXMgb2Ygbm9uLXJlcGVhdGVyCisgICAgICAtIEJVRzogMjQwMjogQWRkIHN1cHBvcnQgZm9yIFNOTVB2MyB0cmFwcwogCi0gICAgYnVpbGQ6Ci0gICAgICAtIHVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNCAoZnJvbSAxLjUuMjIpCisgICAgV2luZG93czoKKyAgICAgIC0gUG9ydCBiYXRjaCBidWlsZCBpbmZyYXN0cnVjdHVyZSB0byBWaXN1YWwgU3R1ZGlvIDIwMTAgYW5kIGxhdGVyCisJRnJvbSBWaXN1YWwgU3R1ZGlvIDIwMTAgb24gaXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHNwZWNpZnkKKwlpbmNsdWRlIG9yIGxpYnJhcnkgZGlyZWN0b3JpZXMgZ2xvYmFsbHkgLSB0aGVzZSBoYXZlIHRvIGJlCisJc3BlY2lmaWVkIHBlciBwcm9qZWN0LiBIZW5jZSB0d28gYWRkaXRpb25hbCBtZW51IGVudHJpZXMgaW4KKwlidWlsZC5iYXQgdGhhdCBhbGxvdyB0byBzcGVjaWZ5IHRoZXNlIGRpcmVjdG9yaWVzLgorCisqNS43LjIqCisgICAgc25tcDoKKyAgICAgIC0gQlVHOiAzNTI2NTQ5OiBDVkUtMjAxMi0yMTQxIEFycmF5IGluZGV4IGVycm9yIGxlYWRpbmcgdG8gY3Jhc2gKKworICAgIHNubXBkOgorICAgICAgLSBCVUc6IDM1MzIwOTA6IEZpeCBoaWdoIGlmSW5kZXggdmFsdWVzIGNyYXNoaW5nIGhyRGV2aWNlRGVzY3IKKworICAgIGJ1aWxkaW5nOgorICAgICAgLSBQQVRDSDogMjA5MTE1NjogY29ycmVjdGx5IGRlY2xhcmUgZGVwZW5kZW5jaWVzIGluIE1ha2VmaWxlLiAnbWFrZQorICAgICAgICAtaiA8Tj4nIHNob3VsZCB3b3JrIG5vdy4gQmFja3BvcnQgdGhpcyB0byBWNS00IGFzIGl0IGlzIG5lZWRlZCBmb3IKKyAgICAgICAgY29ycmVjdCBvcGVyYXRpb24gaW4gdGhlIHNpbmdsZSB0aHJlYWRlZCBjYXNlIG9mIG1ha2UgbWlibGliIGFzCisgICAgICAgIHdlbGwuCisKKyAgICBNYW55IG90aGVyIG1pc2NlbGxhbmVvdXMgbWlub3IgYnVnIGZpeGVzCisKKyo1LjcuMSoKKworICBsaWJuZXRzbm1wOgorICAgICAgLSBGaXhlZCB0aGUgbWliLXBhcnNpbmctYnVnIGludHJvZHVjZWQgc2hvcnRseSBiZWZvcmUgNS43CisKKyAgYWdlbnQ6CisgICAgICAtIGZpeGVkIHJvdW5kaW5nIGVycm9ycyBmb3IgZGlzayBwZXJjZW50YWdlIGNhbGN1bGF0aW9ucworCisgIG9wZW5ic2Q6CisgICAgICAtIGJldHRlciBzdXBwb3J0IGZvciByZWNlbnQgb3BlbmJzZCByZWxlYXNlcworCisgIGZlYXR1cmVzOgorICAgICAgLSBidWcgZml4ZXMgd2l0aCBtaW5pbWFsaXN0IHN1cHBvcnQgYWZ0ZXIgYWRkaXRpb25hbCB1c2VyIGZlZWRiYWNrCisKKyAgTWFueSBvdGhlciBtaXNjZWxsYW5lb3VzIG1pbm9yIGJ1ZyBmaXhlcworCisqNS43KgorCisgIHNubXBkOgorICAgICAgLSBEZWxpdmVyeSBvZiBkYXRhIHZpYSByZWd1bGFyaWx5IHNjaGVkdWxlZCBub3RpZmljYXRpb25zLgorICAgICAgICAoc2VlICJEYXRhIERlbGl2ZXJ5IHZpYSBOb3RmaWNhdGlvbnMiIGluIHNubXBkLmNvbmYpCisgICAgICAtIE1hbnkgdGltZS1iYXNlZCBjb25maWcgb3B0aW9ucyBjYW4gdGFrZSAobSlpbnMsIChoKW91cnMsIC4uLiBhcmd1bWVudHMKKyAgICAgICAgKHNlZSB0aGUgc25tcGQuY29uZiBtYW51YWwgcGFnZSkKKyAgICAgIC0gVGhlIFBJTkcgYW5kIFRSQUNFUk9VVEUgTUlCcyBub3cgY29tcGlsZSBhbmQgd29yay1pc2ggb24gbGludXgKKyAgICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvRElTTUFOCisgICAgICAtIE1pYiBoYW5kbGVycyBjYW4gbm93IGltcGxlbWVudCBhIGRhdGFfY2xvbmUgZnVuY3Rpb24gZm9yCisgICAgICAgIGNsb25pbmcgdGhlIG15dm9pZCBzdHJ1Y3R1cmUgdmFyaWFibGUgdG8gYXZvaWQgZGFuZ2xpbmcgcG9pbnRlcnMKKyAgICAgIC0gRml4ZWQgcGVyc2lzdGVudCBzdG9yYWdlIG9mIFZBQ00gTUlCIGNvbmZpZ3VyYXRpb24KKyAgICAgIC0gTXVsdGktaG9tZWQgYWdlbnRzIHNlbmQgVURQIHJlc3BvbnNlcyBmcm9tIHRoZSBwcm9wZXIgSVAgYWRkcmVzcworICAgICAgLSBUaGUgaHJTdG9yYWdlVGFibGUgaW1wbGVtZW50YXRpb24gbm93IHN1cHBvcnRzIGxhcmdlIGZpbGVzeXN0ZW1zIGJldHRlcgorICAgICAgLSBvcHRpbWl6YXRpb25zIGZvciBsYXJnZSByb3V0ZSB0YWJsZXMKKyAgICAgIC0gQWRkZWQgYSBkZWxpdmVyeUJ5Tm90aWZ5IGNvbmZpZyB0b2tlbiBmb3IgcmVndWxhciBkYXRhIGRlbGl2ZXJ5CisgICAgICAgIChzZWUgdGhlIHNubXBkLmNvbmYgbWFudWFsIHBhZ2UgYW5kIHRoZSBORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCKQorICAgICAgLSBbUEFUQ0ggMzE0MTQ2Ml06IGZpeCBhZ2VudHggc3ViYWdlbnQgaXNzdWVzIHdpdGggbXVsdGlwbGUtb2JqZWN0IHJlcXVlc3RzCisgICAgICAtIFtQQVRDSCAzMDU3MDkzXTogbGludXggdXNlcyBsaWJwY2kgZm9yIGNyZWF0aW5nIHVzZWZ1bCBpZkRlc2NyIHN0cmluZ3MKKyAgICAgIC0gW1BBVENIIDMxMzEzOTddOiBodWdlIHNwZWVkdXBzIG9mIHRoZSBUQ1AvVURQIFRhYmxlcworCisgIGxpYm5ldHNubXA6CisgICAgICAtIFJlbW92ZWQgdGhlIG9sZGVyIENNVSBjb21wYXRpYmlsaXR5IHN1cHBvcnQKKyAgICAgIC0gVGhlIFNTSCB0cmFuc3BvcnQgaXMgbm93IGNvbmZpZ3VyYWJsZQorCisgIFRMUy9EVExTIHN1cHBvcnQ6CisgICAgICAtIFRoZSBTTk1QIG92ZXIgRFRMUyB0cmFuc3BvcnQgbm93IHByb3Blcmx5IHN1cHBvcnRzIElQdjYKKyAgICAgIC0gSW50cm9kdWNlZCBuZXcgY29uZmlndXJhdGlvbiB0b2tlbnM6IGxvY2FsQ2VydC9wZWVyQ2VydAorICAgICAgICAoZGVwcmVjYXRpbmcgc2VydmVyQ2VydCwgY2xpZW50Q2VydCwgZGVmWDUwOVNlcnZlclB1YiwgZGVmWDUwOUNsaWVudFB1YikKKyAgICAgIC0gVmFyaW91cyBmaXhlcyBmb3IgdGhlIFRMUy9EVExTIHRyYW5zcG9ydHMKKworICBhcHBzOgorICAgICAgLSBBZGRlZCBhIHBlci12YXJpYWJsZSB0aW1lZCBvdXRwdXQgc3VwcG9ydCB0byBzbm1wd2FsayB1c2luZyAtQ1QKKyAgICAgIC0gc25tcGluZm9ybSBub3cgY29ycmVjdGx5IHVzZXMgdGhlIGxvY2FsIGVuZ2luZUlEIGZvciBpbmZvcm1zCisgICAgICAtIEEgbnVtYmVyIG9mIG1pYjJjIGJ1ZyBmaXhlcworICAgICAgLSBOZXcgc25tcC5jb25mIHRva2VucyBmb3IgdGltZW91dHMgYW5kIHJldHJpZXMKKworICBidWlsZGluZzoKKyAgICAgIC0gTmV3IGZsYWdzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGNvbXBpbGVkIGNvZGUgdG8gYmFyZSBtaW5pbXVtcy4KKyAgICAgICAgVGhpcyBpcyBwcm92aWRlZCBieSBhIG5ldyBnZW5lcmljIGZlYXR1cmUgbWFya2luZy9zZWxlY3Rpb24gbWVjaGFuaXNtLgorICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9GZWF0dXJlX01hcmtpbmdfYW5kX1NlbGVjdGlvbgorICAgICAgLSBJdCdzIG5vdyBwb3NzaWJsZSB0byBidWlsZCB3aXRob3V0IFNOTVB2My9VU00KKyAgICAgICAgKGUuZy4sIGlmIHlvdSBvbmx5IHdhbnQgVExTL0RUTFMgd2l0aCBTTk1QdjMvVFNNKQorICAgICAgLSBJdCdzIHBvc3NpYmxlIHRvIGJ1aWxkIHRoZSBzdWl0ZSB3aXRoIG5vIFNFVCBzdXBwb3J0CisgICAgICAgIGNvbmZpZ3VyZSB1c2luZyAtLWVuYWJsZS1yZWFkLW9ubHkKKyAgICAgIC0gSXQncyBwb3NzaWJsZSB0byBidWlsZCB0aGUgYWdlbnQgYXMgYSBub3RpZnktb25seSBhZ2VudAorICAgICAgICBjb25maWd1cmUgdXNpbmcgLS1lbmFibGUtbm90aWZ5LW9ubHkKKyAgICAgIC0gQWRkZWQgYSBzY3JpcHQgdG8gdGVzdCBtZW1vcnkgdXNhZ2Ugd2l0aCB2YXJpb3VzIGNvbmZpZyBvcHRpb25zCisgICAgICAgIChzZWUgdGhlIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzIHNjcmlwdCkKKyAgICAgIC0gTmV0LVNOTVAgY2FuIG5vdyBiZSBidWlsdCB0byBwZXJmb3JtIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uCisgICAgICAgIChpbnN0YWxsIEROU1NFQy1Ub29scycgbGlidmFsIGFuZCB1c2UgLS13aXRoLWxvY2FsLWRuc3NlYy12YWxpZGF0aW9uKQorCisgIHRlc3Rpbmc6CisgICAgICAtIGEgbnVtYmVyIG9mIG5ldyBBUEkgdW5pdC10ZXN0cyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHN1aXRlCisgICAgICAgICh0byBydW4gdGhlIHRlc3RzOiBjZCB0ZXN0aW5nICYmIC4vUlVORlVMTFRFU1RTIC1nIHVuaXQtdGVzdHMpCisgICAgICAtIFRoZSB1bml0IHRlc3RzIGNhbiBiZSBtb3JlIGVhc2lseSBydW4gdW5kZXIgdmFsZ3JpbmQKKyAgICAgICAgKFNlZSBodHRwOi8vYml0Lmx5L2pzZ1JudiBmb3IgZGV0YWlscykKKworICBvcGVuYnNkOgorICAgICAgLSBTdXBwb3J0IGZvciB1cGRhdGluZyB0aGUgcm91dGluZyB0YWJsZSB2aWEgU05NUAorCisgIHdpbjMyOgorICAgICAgLSBUaGUgdGVzdGluZyBzdWl0ZSB3b3JrcyBiZXR0ZXIgdW5kZXIgd2luMzIgZW52aXJvbm1lbnRzCisgICAgICAtIE1hbnkgYnVpbGRpbmcgZml4ZXMgZm9yIHRoZSB3aW4zMiBlbnZpcm9ubWVudChzKQorCisgIHNvbGFyaXM6CisgICAgICAtIE5ldC1TTk1QIG5vdyBzdXBwb3J0cyB0aGUgU0NUUC1NSUIKKworICBEcmFnb25GbHlCU0QsIEZyZWVCU0Q4OgorICAgICAgLSBOZXQtU05NUCBzaG91bGQgbm93IHdvcmsgb24gRHJhZ29uRmx5QlNEIGFuZCBGcmVlQlNEOAorCisgIEFuZCBvZiBjb3Vyc2U6CisgICAgICAtIE1hbnkgb3RoZXIgYnVnIGZpeGVzLiAgU2VlIHRoZSBDSEFOR0VTIGFuZCBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisKKyo1LjYqCisKKyAgICBhbGw6CisgICAgICAtIEltcGxlbWVudGVkIHRoZSBTTk1QIG92ZXIgVExTIGFuZCBTTk1QIG92ZXIgRFRMUyBwcm90b2NvbHMgW1JGQy10by1iZV0KKyAgICAgICAgU2VlIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL1RVVDpVc2luZ19UTFMKKyAgICAgIC0gSW1wbGVtZW50ZWQgdGhlICJUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwiIFtSRkM1NTkxXQorICAgICAgLSBHZW5lcmljIGhvc3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvbiAuY29uZiBmaWxlcyBhcmUgbm93IHJlYWQuCisJU2VlIHRoZSBIT1NULVNQRUNJRklDIEZJTEVTIHNlY3Rpb24gb2YgdGhlIHNubXAuY29uZiBtYW51YWwgcGFnZQorICAgICAgICBhbmQgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvQ29uZmlndXJhdGlvbgorICAgICAgLSBJbmNsdWRlIHN0YXRlbWVudHMgY2FuIG5vdyBiZSB1c2VkIGluIC5jb25mIGZpbGVzLgorICAgICAgICBTZWUgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvQ29uZmlndXJhdGlvbgorCisgICAgc25tcGQ6CisgICAgICAtIEZpeCBoYW5kbGluZyBvZiBtdWx0aXBsZSBtYXRjaGluZyBWQUNNIGVudHJpZXMuIChVc2UgdGhlICJiZXN0IgorCW1hdGNoLCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lKS4gUmVwb3J0ZWQgYnkgQWRhbSBMZXdpcy4gTm90ZQorCXRoYXQgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZiBleGlzdGluZyBhY2Nlc3MKKwljb250cm9sIGNvbmZpZ3VyYXRpb25zLgorICAgICAgLSBBZ2VudCB3aWxsIG5vIGxvbmdlciBjYWxsIHRhYmxlIGhhbmRsZXJzIGlmIGEgc2V0IHJlcXVlc3QgZm9yIHRoZQorCWhhbmRsZXIgaGFzIGludmFsaWQgaW5kZXhlcworICAgICAgLSB0YWJsZV9kYXRhL3RkYXRhIG5leHQgaGFuZGxlciB3aWxsIG5vdCBiZSBjYWxsZWQgZHVyaW5nIGdldAorCXByb2Nlc3NpbmcgaWYgbm8gdmFsaWQgcm93cyBhcmUgZm91bmQgZm9yIHRoZSBoYW5kbGVyCisgICAgICAtIFtQQVRDSCAyOTUyNzA4XTogQWRkZWQgUGVybCBpbXBsZW1lbnRhdGlvbiBvZiBCUklER0UtTUlCCisgICAgICAtIG1vdmVkIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsaWJuZXRzbm1waGVscGVycyB0bworCWxpYm5ldHNubXBhZ2VudC4gbGlibmV0c25tcGhlbHBlcnMgaXMgbm93IGFuIGVtcHR5IGxpYnJhcnkuCisgICAgICAtIEltcGxlbWVudGVkIHRoZSBUU00tTUlCIGFuZCB0aGUgVExTVE0tTUlCCisgICAgICAtIG5ldyBBUEkgZm9yIGluZGljYXRpbmcgdGhhdCBwZXJzaXN0ZW50IHN0b3JlIG5lZWRzIHRvIGJlIHNhdmVkCisJYWZ0ZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCBmaW5pc2hlcyBwcm9jZXNzaW5nCisgICAgICAtIFtQQVRDSCAyOTMxNDQ2XTogbWFrZSB0aGUgbG9hZCBhdmVyYWdlcyB3cml0YWJsZS4KKworICAgIGFwcHM6CisgICAgICAtIEEgbmV3IHRvb2wgJ25ldC1zbm1wLWNlcnQnIHRoYXQgZWFzaWx5IGNyZWF0ZXMgYW5kIG1hbmFnZXMKKyAgICAgICAgWC41MDkgY2VydGlmaWNhdGVzIGZvciB1c2Ugd2l0aCB0aGUgU05NUCBvdmVyIChEKVRMUyBwcm90b2NvbHMuCisgICAgICAtIEFkZGVkIGFuICdhZ2VudHh0cmFwJyBjb21tYW5kIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB2aWEgQWdlbnRYCisgICAgICAgIChTZWUgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVFVUOmFnZW50eHRyYXAgZm9yIGRldGFpbHMpCisgICAgICAtIC1UIGNvbW1hbmQgbGluZSBmbGFnIGNhbiBiZSB1c2VkIHRvIHBhc3MgY29uZmlndXJhdGlvbgorICAgICAgICBkaXJlY3RseSB0byB0cmFuc3BvcnRzIHRoYXQgY2FuIGFjY2VwdCBjb25maWd1cmF0aW9uIHRva2VucworICAgICAgLSBBIG5ldyAnc25tcHRscycgY29tbWFuZCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBhZ2VudCdzIFRMUyBjb25maWd1cmF0aW9uCisKKyAgICBzbm1wbGliOgorICAgICAgLSBBIG1vcmUgbW9kdWxhciB0cmFuc3BvcnQgc3Vic3lzdGVtIHRoYXQgYWxsb3dzIHRoaXJkIHBhcnR5CisgICAgICAgIGV4dGVuc2lvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgY29kZSByZXVzZS4KKyAgICAgIC0gTmV3IHRyYW5zcG9ydCBmdW5jdGlvbnM6IGZfY29uZmlnLCBmX29wZW4sIGZfY29weSBhbmQgZl9zZXR1cF9zZXNzaW9uCisgICAgICAtIFRyYW5zcG9ydHMgY2FuIG5vdyBzcGVjaWZ5IHNlc3Npb24gZGVmYXVsdHMKKyAgICAgICAgLSBFLkcuIGR0bHN1ZHA6IGF1dG8tc2V0cyB0aGUgU05NUCB2ZXJzaW9uIGFuZCB0aGUgc2VjdXJpdHkgbW9kZWwuCisgICAgICAtIFtQQVRDSCAyOTQyOTQwXTogQWRkIGEgbmV3IGZ1bmN0aW9uLCBuZXRzbm1wX3BhcnNlX2FyZ3MsIHRoYXQgaXMKKwlsaWtlIHNubXBfcGFyc2VfYXJncyBidXQgdGFrZXMgYW4gYWRkaXRpb25hbCBiaXRtYXNrLCBmbGFncywgdG8KKwlhZmZlY3QgdGhlIGJlaGF2aW91ci4gQWxzbyByZW1vdmUgdGhlIG1hZ2ljIGhhbmRsaW5nIG9mIHNvbWUKKwlhcHBsaWNhdGlvbiBuYW1lcy4KKyAgICAgIC0gQSBuZXcgWC41MDkgY2VydGlmaWNhdGUgQVBJIGZvciBpbmRleGluZyBhbmQgcmVhZGluZyBjZXJ0aWZpY2F0ZXMKKyAgICAgIC0gbmV3IGV4cGVyaW1lbnRhbCByb3cgY3JlYXRpb24gQVBJIHdoaWNoIHVzZXMgYSBzdGF0ZSBtYWNoaW5lCisgICAgICAgIHRvIHRyeSByZWFsbHkgaGFyZCB0byBjcmVhdGUgYSByb3cgZnJvbSBhIGdpdmVuIHZhcmJpbmQgbGlzdAorICAgICAgLSBuZXRzbm1wX2NvbnRhaW5lciBlbmhhbmNlbWVudHM6CisgICAgICAgIC0gYWRkZWQgYSBmcmVlX2l0ZW0gZnVuY3Rpb24KKyAgICAgICAgLSBhZGRlZCBhIENPTlRBSU5FUl9GUkVFX0FMTCBtYWNyby9mdW5jdGlvbgorICAgICAgICAtIGFkZGVkIGFuIGludGVyZmFjZSBmb3IgZHVwbGljYXRpbmcgYSBjb250YWluZXIgKENPTlRBSU5FUl9EVVApCisgICAgICAgIC0gYWRkZWQgYSByZW1vdmUgZnVuY3Rpb24gdG8gY29udGFpbmVyX2l0ZXJhdG9ycworCS0gYWRkZWQgYW4gYWJpbGl0eSB0byBzZXQgb3B0aW9ucyBvbiBiaW5hcnlfYXJyYXkgY29udGFpbmVycworICAgICAgLSBuZXcgc25tcCB0b2tlbiBsb2dPcHRpb24gYWxsb3dzIHNwZWNpZnlpbmcgbG9nIGRlc3RpbmF0aW9ucworICAgICAgICB2aWEgY29uZmlndXJhdGlvbiBjb25mIGZpbGVzCisgICAgICAtIEEgdmVyeSBzaWduaWZpY2FudCByZWR1Y3Rpb24gaW4gY29tcGlsZXIgd2FybmluZyBvdXRwdXQKKyAgICAgIC0gbmV3IGV4cGVyaW1lbnRhbCBzaW1wbGUgc3RhdGUgbWFjaGluZSBoYW5kbGluZyBBUEkKKworICAgIGJ1aWxkaW5nOgorICAgICAgLSBTdXBwb3J0IGZvciBhIHN0cmVhbS1saW5lIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiBpbnRlcm5hbAorICAgICAgICBPcGVuU1NMIHN1cHBvcnQgdXNpbmcgLS13aXRoLW9wZW5zc2w9aW50ZXJuYWwuCisgICAgICAtIERvIG5vdCByZXF1aXJlIHRoYXQgdGhlIFVEUCB0cmFuc3BvcnQgaXMgaW5jbHVkZWQuCisgICAgICAtIEJ1aWxkaW5nIE5ldC1TTk1QIHdpdGggZG1hbGxvYyBzdXBwb3J0IGVuYWJsZWQgaXMgYWdhaW4gcG9zc2libGUuCisKKyAgICBtaWIyYzoKKyAgICAgIC0gbWliMmMgY2FuIG5vdyBvcHRpb25hbGx5IHJ1biBzZWQgb24gZ2VuZXJhdGVkIGNvZGUKKworICAgIHRlc3Rpbmc6CisgICAgICAtIEEgYnJhbmQgbmV3IHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc3VwcG9ydGluZyBtdWx0aXBsZSB0ZXN0IHN1aXRlcworICAgICAgICBTZWUgcGVybGRvYyB0ZXN0aW5nL1JVTkZVTExURVNUUyBmb3IgZGV0YWlscwogCiAgICAgcHl0aG9uOgotICAgICAgLSBbUEFUQ0ggMTcxNjExNF06IExldCBweXRob24gYnVpbGQgaW4gdGhlIE5ldC1TTk1QIHNvdXJjZSB0cmVlCisgICAgICAtIHdhbGtpbmcgYnJva2VuIGFnZW50cyB3b24ndCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wCiAKLSAgICBNYWNPU1g6Ci0gICAgICAtIFtQQVRDSCAxNjAwNTIyXTogQ1BVIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyIChIQUwpCi0gICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBtYWNoL2RhcndpbgotICAgICAgLSBJRi1NSUIgcmV3cml0ZSBub3cgZW5hYmxlZCBieSBkZWZhdWx0CisgICAgd2luMzI6CisgICAgICAtIElQdjYgaXMgb25seSBzdXBwb3J0ZWQgdW5kZXIgQ3lnd2luIDEuNyBvciBsYXRlci4KKyAgICAgIC0gW0JVRyAyOTM5MTY4XTogYnl0ZSBvcmRlciBvZiB1ZHBMb2NhbFBvcnQgaXMgbm93IGNvcnJlY3QuCisgICAgICAtIFtCVUcgMjkzOTE2OF06IGZpeGVkIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgKCJtYWtlIHRlc3QiKS4gVGhpcyBoYXMKKwliZWVuIGZpeGVkIGJ5IHVzaW5nIHRoZSBwcm9wZXIgZW52aXJvbm1lbnQgc2VwYXJhdG9yIGNoYXJhY3RlciBhbmQKKwlieSBhZGRpbmcgdGhlIHBhdGggb2YgdGhlIG5ldHN0YXQgZXhlY3V0YWJsZSBmb3IgQ3lnd2luIGluCisJdGVzdGluZy9URVNUQ09ORi5zaC4KKyAgICAgIC0gYnVpbGRpbmcgd2l0aCBhbm90aGVyIE9wZW5TU0wgcGFja2FnZSB0aGFuIHRoZSBDeWd3aW4tcHJvdmlkZWQKKwlwYWNrYWdlcyBvcGVuc3NsIGFuZCBvcGVuc3NsLWRldmVsIGlzIGFnYWluIHBvc3NpYmxlLgorICAgICAgLSBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgaXMgYWdhaW4gcG9zc2libGUgKCdtYWtlIHRlc3QnKS4KKyAgICAgIC0gd2luRXh0RExMIGNvbXBpbGVzIG5vdyB1bmRlciBNaW5HVy4KKyAgICAgIC0gdGhlIHNubXBkLmNvbmYga2V5d29yZCAnZXh0ZW5kJyBpcyBub3cgc3VwcG9ydGVkIHVuZGVyIE1pbkdXCisgICAgICAtIHRoZSBzbm1wdHJhcGQuY29uZiBrZXl3b3JkIHRyYXBoYW5kbGUgaXMgbm93IHN1cHBvcnRlZCB1bmRlciBNaW5HVwogCi0gICAgV2luMzI6Ci0gICAgICAtIGZpeCBBRVMgc3VwcG9ydAotICAgICAgLSBbUEFUQ0ggMTcwNjM0NF06IGZpeCBjb21waWxhdGlvbiB3aXRoIGN5Z3dpbgorICAgIHFueDY6CisgICAgICAtIFtQQVRDSCAyODM2ODk1XTogc3VwcG9ydCBmb3IgUU5YNgogCi0gICAgSVJJWDoKLSAgICAgIC0gW1BBVENIIDE3MDk3NDhdOiBPcHRpbWl6ZWQgSVJJWCBjcHUgc3RhdHMKKyo1LjUqCisKKyAgICBBbGwgYXBwbGljYXRpb25zOgorICAgICAgLSBBZGRlZCB0aGUgYWJpbGl0eSB0byAiYWxpYXMiIHRyYW5zcG9ydHMgdG8gYSBtb3JlIHNpbXBsZSBuYW1lCisgICAgICAgICAoc2VlIHRoZSAiYWxpYXMiIGtleXdvcmQgaW4gdGhlIHNubXAuY29uZiBtYW51YWwgcGFnZSkKKyAgICAgIC0gVGhlIC10ICh0aW1lb3V0KSBzd2l0Y2ggd2lsbCBhY2NlcHQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyAoZWc6IC4xKQorCisgICAgc25tcGQ6CisgICAgICAtIFtCVUcgMTcxMjk4OF06IGRlZmF1bHQvY29uZmlndXJhYmxlIG1heCAjIHZhcmJpbmRzIHJldHVybmVkIGJ5IEdFVEJVTEsKKyAgICAgIC0gW1BBVENIIDE1ODUxNDZdOiBFeHRlbmQgcmFuZ2Ugb2YgYXZhaWxhYmxlIGVycm9yIGNvZGVzCisgICAgICAtIFtQQVRDSCAxNjU0NDI0XTogSGFuZGxlIHJvdyBkZWxldGlvbiBpc3N1ZXMgaW4gZGF0YXNldCB0YWJsZXMKKyAgICAgIC0gW1BBVENIIDE2NjY3MzddOiBJbmNsdWRlIElQdjYgdHJhZmZpYyBpbiB2YXJpb3VzIFVEUCBjb3VudGVycworICAgICAgLSBbUEFUQ0ggMTcwMDE1N106IEZpeCBvcmRlcmluZyBvZiBleGVjIHRva2VucyBpbiBNSUIgb3V0cHV0CisgICAgICAtIFtQQVRDSCAxNzE5MjUzXTogZml4IHNraXBORlNJbkhvc3RSZXNvdXJjZXMgZm9yIG11bHRpcGxlIHdhbGtzCisgICAgICAtIFtQQVRDSCAxNzIzNjExXTogTmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSTU9OIGFsYXJtVGFibGUKKyAgICAgIC0gW1BBVENIIDE3Mzc0MzldOiBhdXRvbWF0aWMgbGluayB1cC9kb3duIHRyYXBzIG9uIGEgd2FsaworICAgICAgLSBbUEFUQ0ggMTgwNjUwMV06IEFkZCBBUEkgZm9yIHNlbmRpbmcgdHJhcHMgd2l0aCBhIHNubXB2MyBjb250ZXh0CisgICAgICAtIFtQQVRDSCAxODgyNjIxXTogQWRkIExWTSBzdXBwb3J0IHRvIHRoZSBwYXJ0aXRpb24gdGFibGUKKyAgICAgIC0gW1BBVENIIDE4OTM0NjhdOiBmaXhlZCByZWdpc3RyYXRpb24gb2YgT0lEcyB3aXRoIHJhbmdlcworICAgICAgLSBbUEFUQ0ggMTkwMTc2NF06IFN1cHBvcnQgZGF0ZS1iYXNlZCBsb2d3YXRjaCBmaWxlcworICAgICAgLSBbUEFUQ0ggMTkwOTgxM106IGZpeCB0YWJsZV9pdGVyYXRvciBoYW5kbGluZyBvZiBTT1JURUQgaGludAorICAgICAgLSBbUEFUQ0ggMTkxNjg0MF06IG5ldyBjb25maWcgb3B0aW9uIHRvIHNldCBTTk1QdjEgdHJhcCBhZ2VudCBhZGRyZXNzCisgICAgICAtIFtQQVRDSCAyMTAzNDkyXTogaW1wbGVtZW50IFJNT04tTUlCOjpldGhlclN0YXRzSmFiYmVycworICAgICAgLSBbUEFUQ0ggMjQ0OTIxMF06IGFkZCA2NC1iaXQgdXNhZ2Ugc3RhdGlzdGljcyB0byBVQ0QtU05NUC1NSUI6OmRza1RhYmxlCisgICAgICAtIEFkZCBzdXBwb3J0IGZvciBhIHVzZXIgcHJvdmlkZWQgbGVuZ3RoIHZhcmlhYmxlCisJICAgYW5kIEMgc3RyaW5nIHZhbHVlcyB0byB0aGUgd2F0Y2hlciBoZWxwZXIuCisgICAgICAtIEF1dG9tYXRpY2FsbHkgcmVyZWdpc3RlciBzeXNPUlRhYmxlIGVudHJpZXMgZnJvbSBBZ2VudFggc3ViYWdlbnRzLgorICAgICAgLSBGaXggdmFyaW91cyBtZW1vcnkgbGVha3MKKyAgICAgIC0gSW1wbGVtZW50IGlwQWRkcmVzc1NwaW5Mb2NrCisgICAgICAtIEltcGxlbWVudCBpcE5ldFRvUGh5c2ljYWxMYXN0VXBkYXRlZAorICAgICAgLSBTdXBwcmVzcyBhbm5veWluZyAicmVnaXN0cmF0aW9uICE9IGR1cGxpY2F0ZSIgd2FybmluZyBmb3Igcm9vdCBvaWRzCisKKyAgICBzbm1wdHJhcGQ6CisgICAgICAtIFtQQVRDSCAxOTA4Mjg4XTogUnVuIHBlcmwgRU5EIGJsb2NrIG9uIHRlcm1pbmF0aW9uCisgICAgICAtIEFkZCB0cmFwIGhhbmRsZXIgZm9yIGxvZ2dpbmcgdHJhcHMgdG8gYSBteXNxbCBkYXRhYmFzZQorICAgICAgLSBXaXRoZHJhdyBkZXByZWNhdGVkIG9wdGlvbnMuCisKKyAgICBzbm1wbmV0c3RhdDoKKyAgICAgIC0gW1BBVENIIDI1NjQ1MzhdOiBTdXBwb3J0IEdFVEJVTEsgaW4gdjJjKyBzbm1wIHZlcnNpb25zCisKKyAgICBzbm1wdXNtOgorICAgICAgLSBbUEFUQ0ggMTU5MTM1NV06IEFsbG93IGNsb25pbmcgdG8gYXJiaXRyYXJ5IGVuZ2luZUlEcworCisgICAgc25tcGxpYjoKKyAgICAgIC0gW0JVRyAxNjE5ODI3XTogSW1wcm92ZSBoYW5kbGluZyBvZiBsaW5rIGRlcGVuZGVuY2llcworICAgICAgLSBbUEFUQ0ggIDcwMDY4MV06IGxpbWl0ZWQgc3VwcG9ydCBmb3IgVURQdjQgYnJvYWRjYXN0IGFkZHJlc3NlcworICAgICAgLSBbUEFUQ0ggMTg4MjA2OV06IEFkZCB0b2tlbiBmb3Igc3BlY2lmeWluZyBhbiBleGFjdCBTTk1QdjMgZW5naW5lSUQKKyAgICAgIC0gRml4IGFzc29ydGVkIG1lbW9yeSBsZWFrcworICAgICAgLSBJbXBsZW1lbnRlZCBSRkM1MzQzIGNvbnRleHRFbmdpbmVJRCBwcm9iaW5nLgorICAgICAgLSBTdXBwb3J0IGZvciB0aGUgVFNNIHNlY3VyaXR5IG1vZGVsIGZvciB1c2Ugd2l0aCB0dW5uZWxpbmcKKworICAgIG1pc2M6CisgICAgICAtIEFkZCBjb25maWcgcmVyZWFkIHN1cHBvcnQgdG8gIm5ldC1zbm1wLWNvbmZpZyAtLWNvbXBpbGUtc3ViYWdlbnQiIGNvZGUKKyAgICAgIC0gUHJlbGltaW5hcnkgKGFscGhhKSBzdXBwb3J0IGZvciBTTk1QIG92ZXIgU1NIIGFuZCBEVExTL1VEUC4KKyAgICAgIC0gUHJlbGltaW5hcnkgKGFscGhhKSBzdXBwb3J0IGZvciB0aGUgVFNNIHNlY3VyaXR5IG1vZGVsCisgICAgICAtIFNlcGFyYXRlIHVzZXIgbWFuYWdlbWVudCBpbnRvIG5ldyBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciBzY3JpcHQKKworICAgIGJ1aWxkaW5nOgorICAgICAgLSBJbXByb3ZlZCBjcm9zcy1jb21waWxhdGlvbiBzdXBwb3J0CisgICAgICAtIEltcHJvdmVkIGxpYnJhcnkgbGF5ZXJpbmcgJiBkZXBlbmRlbmN5IGhhbmRsaW5nIHdoZW4gbGlua2luZyBhcHBzCisgICAgICAtIEltcHJvdmVkIFJQTSBzcGVjIGZpbGVzLCBmb3IgY29uc2lzdGVuY3kgd2l0aCB2ZW5kb3ItcHJvdmlkZWQgcGFja2FnZXMuCisgICAgICAtIE1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIGJ1aWxkIGVudmlyb25tZW50IGJhc2VkIG9uIHZlcnNpb24KKyAgICAgIC0gTmV3IHRlc3Qgc2NyaXB0cyB0byB0ZXN0IE5ldC1TTk1QIHRyYW5zcG9ydCBmdW5jdGlvbmFsaXR5CisgICAgICAtIFJlc3RydWN0dXJlIGNvbmZpZ3VyZSB0ZW1wbGF0ZQorICAgICAgLSBVcGRhdGUgdG8gYXV0b2NvbmYgMi42MyAmIGxpYnRvb2wgMi4yLjYKKworICAgIHBlcmw6CisgICAgICAtIFtCVUcgMTYxOTgyN106IGltcHJvdmUgaGFuZGxpbmcgb2YgbGluayBkZXBlbmRlbmNpZXMKKyAgICAgIC0gW1BBVENIIDE5NTYxOTNdOiBiZXRhIHRocmVhZGFibGUgcGVybCBtb2R1bGUgY29kZSBmb3IgU05NUHYxLzJjIHVzYWdlLgorCisgICAgcHl0aG9uOgorICAgICAgLSBbUEFUQ0ggMTcxNjExNF06IExldCBweXRob24gYnVpbGQgaW4gc291cmNlIHRyZWUgKERlYmlhbiBwYXRjaCAjMzgpCisKKyAgICBMaW51eDoKKyAgICAgIC0gW1BBVENIIDE3MDQxMDVdOiBBZGQgSVB2NiBzdXBwb3J0IHRvIHRoZSBpbmV0TmV0VG9NZWRpYVRhYmxlCisgICAgICAtIFtQQVRDSCAxNzA1NTk0XTogVmFyaW91cyBmaXhlcyB0byBpcEFkZHJlc3NQcmVmaXhUYWJsZSByZXBvcnRpbmcKKyAgICAgIC0gW1BBVENIIDE3MDgyNDNdOiBJbXBsZW1lbnQgaXBEZWZhdWx0Um91dGVUYWJsZQorICAgICAgLSBbUEFUQ0ggMTcxNTQwNV06IEltcGxlbWVudCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICAgICAgLSBbUEFUQ0ggMTcyNDYwMl06IE1mRC1iYXNlZCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgLSBbUEFUQ0ggMTgyODYwMl06IFN1cHBvcnQgaXBEZWZhdWx0VFRMIGFuZCBpcEZvcndhcmRpbmcgU0VUcworICAgICAgLSBbUEFUQ0ggMTkyNzc1MV06IEltcGxlbWVudCBpY21wTXNnU3RhdHNUYWJsZQorICAgICAgLSBbUEFUQ0ggMjAyMzYzM106IEltcGxlbWVudCBTQ1RQLU1JQgorICAgICAgLSBbUEFUQ0ggMjA1MzI3M106IEltcGxlbWVudCBFdGhlckxpa2UgTUlCCiAKICAgICBBSVg6Ci0gICAgICAtIEZpeCBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nIGluc3RlYWQgb2YgZm9yY2luZyBzdGF0aWMgdXNlCisgICAgICAtIEFkZCBzdXBwb3J0IGZvciBBSVggNi54CisgICAgICAtIEZpeCBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nIGluc3RlYWQgb2YgZm9yY2luZyBzdGF0aWMKIAogICAgIEZyZWVCU0Q6CiAgICAgICAtIFtCVUcgMTYzMzQ4M106IFN1cHBvcnQgQ1BVIEhBTCBvbiBGcmVlQlNENC54CisgICAgICAtIFtQQVRDSCAxNjIzODc0XTogYWRkIEdOVS9rRnJlZUJTRCBzdXBwb3J0CisKKyAgICBJUklYOgorICAgICAgLSBbUEFUQ0ggMTcwOTc0OF06IE9wdGltaXplZCBJUklYIGNwdSBzdGF0cworICAgICAgLSBbUEFUQ0ggMTY3NTg2OV06IENQVSBzdGF0aXN0aWNzIGZvciBJUklYIGJhc2VkIG9uIFBDUAorCisgICAgTWFjT1NYOgorICAgICAgLSBbUEFUQ0ggMTYwMDUyMl06IENQVSBIQUwgaW1wbGVtZW50YXRpb24gZm9yIG1hY2gvZGFyd2luCisKKyAgICBTb2xhcmlzOgorICAgICAgLSBbUEFUQ0ggMTcxOTczMF06IHN1cHBvcnQgZm9yIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQgaXBBZGRyZXNzVGFibGUKKworICAgIFdpbjMyOgorICAgICAgLSBbUEFUQ0ggMjY4NjI0OF06IEZpeCBzZXZlcmFsIHdpbkV4dERMTCBidWdzLgorICAgICAgLSBbUEFUQ0ggMTcwNjM0NF06IEZpeCBjb21waWxhdGlvbiB3aXRoIGN5Z3dpbgorICAgICAgLSBGaXggQUVTIHN1cHBvcnQKIAogCiAqNS40KgpAQCAtNDI5LDcgKzY1Nyw3IEBACiAgICAgICAgLSBFbmFibGUgdGhlc2UgdGFsYmxlcyBieSBzcGVjaWZ5aW5nIC0tZW5hYmxlLW1mZC1yZXdyaXRlcyB0byBjb25maWd1cmUuCiAgICAgICAgLSBNb3N0IG9mIHRoZXNlIHRhYmxlcyBoYXZlIElQdjYgc3VwcG9ydCBhcyB3ZWxsLgogICAgICAtIGlmSW5kZXggbm8gbG9uZ2VyIGNoYW5nZXMgd2hlbiBpbnRlcmZhY2VzIGFyZSBhZGRlZC9yZW1vdmVkLCBhbmQgYWxsCi0gICAgICAgICB0YWJsZXMvb2JqZWN0IHdpaWwgbm93IHVzZSB0aGUgc2FtZSBpZkluZGV4IGZvciB0aGUgc2FtZSBpbnRlcmZhY2UuCisgICAgICAgICB0YWJsZXMvb2JqZWN0IHdpbGwgbm93IHVzZSB0aGUgc2FtZSBpZkluZGV4IGZvciB0aGUgc2FtZSBpbnRlcmZhY2UuCiAKICAgIFNvbGFyaXM6CiAgICAgIC0gbmV3IGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciB1Y2Qtc25tcC9sbVNlbnNvcnMgTUlCIG1vZHVsZQpAQCAtNDYzLDcgKzY5MSw3IEBACiAKICBQb3J0czoKICAgIC0gTGludXggMi42IGltcHJvdmVtZW50cwotICAgLSBXaW4zMiBTdXBvcnQgZm9yIFRDUCBhbmQgVURQIG92ZXIgSVB2NiB2aWEgV2luc29jayB2ZXJzaW9uIDIKKyAgIC0gV2luMzIgc3VwcG9ydCBmb3IgVENQIGFuZCBVRFAgb3ZlciBJUHY2IHZpYSBXaW5zb2NrIHZlcnNpb24gMgogICAgLSBXaW4zMiBmaXhlcyBpbiBtYW55IHBsYWNlcy4KICAgIC0gV2luMzIgc2VydmljZSBzdXBwb3J0IGZvciBzbm1wdHJhcGQKICAgIC0gV2luMzIgc3VwcG9ydCBmb3Igc25tcGNvbmYKQEAgLTY1Niw3ICs4ODQsNyBAQAogKjUuMC40KgogCiAgICBEdXJpbmcgdGhlIHRlc3RpbmcgZm9yIHJlbGVhc2UgNS4wLjQsIGEgcmVsZWFzZSBjYW5kaWRhdGUgd2FzIHVwbG9hZGVkCi0gICB0byBTb3VyY2Vmb3JnZSBhbmQgbWFya2VkIGFzIGhpZGRlbi4gRm9yIHZhcmlvdXNlIHJlYXNvbnMsIHRoZSByZWxlYXNlCisgICB0byBTb3VyY2Vmb3JnZSBhbmQgbWFya2VkIGFzIGhpZGRlbi4gRm9yIHZhcmlvdXMgcmVhc29ucywgdGhlIHJlbGVhc2UKICAgIHdhcyBkZWxheWVkIGFuZCBmdXJ0aGVyIGNoYW5nZXMgYW5kIGZpeGVzIHdlcmUgbWFkZS4gIEhvd2V2ZXIsIHRoZSAKICAgIHJlbGVhc2UgY2FuZGlkYXRlIGZpbGVzIHN0aWxsIGFwcGVhcmVkIG9uIHRoZSBwdWJsaWMgRlRQIHNlcnZlciBhbmQgb3VyCiAgICBtaXJyb3JzLiBUbyBhdm9pZCB0aGUgY29uZnVzaW9uIHRoYXQgY291bGQgb2NjdXIgdG8gdXNlcnMgd2hvIG1heSBoYXZlCkBAIC05MjYsNyArMTE1NCw3IEBACiAgICAgICAoc2VlIHRoZSB0cmFwc2VzcyBzZWN0aW9uIG9mIHRoZSBzbm1wZC5jb25mIG1hbnVhbCBwYWdlKQogICAgIC0gaW5kZXggbWF0Y2hpbmcgaW4gb2lkcyBoYXMgYmVlbiBpbXByb3ZlZAogICAgICAgKHNlZSB0aGUgc25tcGNtZCBtYW51YWwgcGFnZSBvbiAtT3gsIC1PRSwgYW5kIC1PYikuCi0gICAgLSBzbm1wdHJhcGQgaGFzIG5ldyBmb3JtYXRpbmcgZGlyZWN0aXZlcy4KKyAgICAtIHNubXB0cmFwZCBoYXMgbmV3IGZvcm1hdHRpbmcgZGlyZWN0aXZlcy4KICAgICAgIChzZWUgdGhlIHNubXB0cmFwZCBtYW51YWwgcGFnZSBvbiBmb3JtYXQxIGFuZCBmb3JtYXQyKS4KICAgICAtIHRoZSBhZ2VudCBjYW4gbGlzdGVuIHRvIG11bHRpcGxlIHBvcnRzLgogICAgIC0gdGhlIGFnZW50IGNhbiBiZSByZXN0cmljdGVkIHRvIGxpc3RlbmluZyBvbiBvbmx5IGNlcnRhaW4gaW50ZXJmYWNlcy4KQEAgLTExMDMsNyArMTMzMSw3IEBACiAgICAgLSBtYW55IG1pc2MgYnVnIGZpeGVzLCBhcyBhbHdheXMuCiAKICAgUG9ydHM6Ci0gICAgLSBzbm1wbmV0c3RhdCBoYXMgYmVlbiBwb3J0ZWQgdG8gdGhlIHdpbjMyIGVudmlvcm5tZW50LgorICAgIC0gc25tcG5ldHN0YXQgaGFzIGJlZW4gcG9ydGVkIHRvIHRoZSB3aW4zMiBlbnZpcm9ubWVudC4KIAogKjMuNS4zKgogICAgIC0gQnVnIGZpeGVzLCBpbmNsdWRpbmcgcm93IGNyZWF0aW9uIHNldHMgdG8gbWliIG1vZHVsZXMgc2hvdWxkIHdvcmsgYWdhaW4uCkBAIC0xMjU5LDcgKzE0ODcsNyBAQAogICAgIC0gRkFRIGZpbGUhCiAgICAgLSBidWctcmVwb3J0IHNjcmlwdCEKICAgICAtIEFnZW50IGNhbiByZWFkIC5jb25mIGZpbGVzIGZyb20gbW9yZSBwbGFjZXM6Ci0gICAgICAtIFNOTVBDT05GUEFUSCBlbnZpb3JubWVudCB2YXJpYWJsZS4KKyAgICAgIC0gU05NUENPTkZQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAgICAgLSBjb21tYW5kIGxpbmUgb3B0aW9uczogIC1jIEZJTEUgYW5kIC1DLgogICAgIC0gQWdlbnQgY2FuIHNlbmQgY29sZHN0YXJ0IGFuZCBhdXRoZW50aWNhdGlvbiB0cmFwcy4KICAgICAtIEFsbCByZXF1ZXN0cy9wYXRjaGVzL3F1ZXN0aW9ucyBzaG91bGQgZ28gdG8gCmRpZmYgLS1naXQgYS9QT1JUSU5HIGIvUE9SVElORwppbmRleCBkYWNiMTVhLi4yZDQ1M2Y2IDEwMDY0NAotLS0gYS9QT1JUSU5HCisrKyBiL1BPUlRJTkcKQEAgLTI1LDcgKzI1LDcgQEAKIHRoZSBwYWNrYWdlIHRvIG5ldyBhcmNoaXRlY3R1cmVzIHJhcmVseSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIHNldHVwCiBhbmQgc2VuZCBtZSBwYXRjaGVzIHdpdGggbG90cyBvZiAnI2lmZGVmIEFSQ0gnIHR5cGUgQyBjb2RlIGluIGl0LiAgTGV0CiBtZSBzYXkgdXAgZnJvbnQsIEkgKmhhdGUqIHRoaXMgdHlwZSBvZiBjb2Rpbmcgbm93IChldmVuIHRob3VnaCBJIHVzZWQKLXRvIHVzZSBpdCBhIGxvdCkuICBXaGF0IGlzIGJldHRlciBpcyB0byBjaGVjayBmb3IgdGhlIG5lY2lzc2FyeQordG8gdXNlIGl0IGEgbG90KS4gIFdoYXQgaXMgYmV0dGVyIGlzIHRvIGNoZWNrIGZvciB0aGUgbmVjZXNzYXJ5CiBmdW5jdGlvbmFsaXR5IHVzaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0IGFuZCB0aGVuIHVzZSB0aGUgcmVzdWx0cyBvZgogdGhvc2UgdGVzdHMuCiAKQEAgLTc1LDE3ICs3NSwxMyBAQAogLS0tIFNUUlVDVFVSRSBNRU1CRVIgQ0hFQ0tTCiAKIEluIGNvbmZpZ3VyZS5pbjoKLSAgQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCisgIEFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBTVFJVQ1RVUkUuTUVNQkVSXSwsLFtbCiAjaW5jbHVkZSBsaW5lcwotXSwgU1RSVUNUVVJFLCBNRU1CRVIpCi0gICBeXl5eXl5eXl4gIF5eXl5eXiAgKGNoYW5nZSkKLQotSW4gYWNjb25maWcuaDoKLSAgI3VuZGVmIFNUUlVDVF9TVFJVQ1RVUkVfSEFTX01FTUJFUgotICAgICAgICAgICAgICAgIF5eXl5eXl5eXiAgICAgXl5eXl5eICAoY2hhbmdlKQorXV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl4gXl5eXl5eICAoY2hhbmdlKQogCiBJbiBzb3VyY2UgY29kZToKLSAgI2lmZGVmIFNUUlVDVF9TVFJVQ1RVUkVfSEFTX01FTUJFUgorICAjaWZkZWYgSEFWRV9TVFJVQ1RfU1RSVUNUVVJFX01FTUJFUgogICAgIC8qIHVzZSBpdCAqLwogICAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDYyOWFmMzEuLjg2NjAwYmMgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi0JICAgICAgIFJFQURNRSBmaWxlIGZvciBuZXQtc25tcCBWZXJzaW9uOiA1LjQuNAorCSAgICAgICBSRUFETUUgZmlsZSBmb3IgbmV0LXNubXAgVmVyc2lvbjogNS43LjMKIAogRElTQ0xBSU1FUgogCkBAIC0yNTYsNyArMjU2LDcgQEAKICAgICBEYW4gQS4gRGlja2V5IDxkZGlja2V5QHRyYW5zaXRpb24uY29tPgogICAgIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGNzYy5saXYuYWMudWs+CiAgICAgR2lvdmFubmkgUy4gTWFyem90IDxnbWFyem90QG5vcnRlbG5ldHdvcmtzLmNvbT4KLSAgICBOaWVscyBCYWdnZXNlbiA8cmVjbmJhQG1lZGlhdG9yLnVuaS1jLmRrPgorICAgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgIFNpbW9uIExlaW5lbiA8c2ltb25AbGltbWF0LnN3aXRjaC5jaD4KICAgICBEYXZpZCBULiBQZXJraW5zIDxkcGVya2luc0Bkc3BlcmtpbnMuY29tPgogICAgIE1pa2UgUGVyaWsgPG1pa2VwQGNydC5jb20+CkBAIC0zNDksNyArMzQ5LDEyIEBACiAgICAgUGV0ZXIgTWFydGluIDxwbm1hcnRpbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICAgVGhvbWFzIExhY2tleSA8dGVsYWNrZXlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgIEpvZSBCdWVobGVyIDxqYnVlaGxlckBzcGlyZW50Y29tLmNvbT4KKyAgICBBbmRlcnMgUGVyc3NvbiA8YXBlcnNzb25AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICAgIFJvamVyIDxyb2plckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICAgQmFydCBWYW4gQXNzY2hlIDxiYXJ0LnZhbmFzc2NoZUBnbWFpbC5jb20+CisgICAgUGFibG8gQ2FyYm9uaSA8cGNhcmJvbmlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICAgIEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorICAgIEJyaWFuIFNpcG9zIDxic2lwb3Nya2ZAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogCiAgIFdlJ3ZlIHByb2JhYmx5IGZvcmdvdHRlbiBwZW9wbGUgb24gdGhpcyBsaXN0LiAgTGV0IHVzIGtub3cgaWYgeW91J3ZlCiAgIGNvbnRyaWJ1dGVkIGNvZGUgYW5kIHdlJ3ZlIGxlZnQgeW91IG91dC4KZGlmZiAtLWdpdCBhL1JFQURNRS5hZ2VudC1taWJzIGIvUkVBRE1FLmFnZW50LW1pYnMKaW5kZXggODcxNmY4ZC4uNTNmMWNhYSAxMDA2NDQKLS0tIGEvUkVBRE1FLmFnZW50LW1pYnMKKysrIGIvUkVBRE1FLmFnZW50LW1pYnMKQEAgLTQwLDYgKzQwLDcgQEAKICAgRyAgc2NhbGFyIGdyb3VwIGhlbHBlcgogICBXICB3YXRjaGVkIHNjYWxhciAKICAgTSAgbWZkCisgIEMgIGNvbnRhaW5lciB0YWJsZQogCiBQbGF0Zm9ybSBLZXlzCiAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYzLDkgKzY0LDEwIEBACiAgdGFibGUvb2JqZWN0IGdyb3VwICAgICAgICAgICBPUyAgICAgICBSZWwgICBTdHlsIEZpbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogU05NUHYyLU1JQgotIHN5c3RlbS4qLjAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgIDMuMiAgICAgTyBtaWJJSS9zeXN0ZW1fbWliLmMKLSBzeXNPUlRhYmxlICAgICAgICAgICAgICAgICAgIEEgICAgICAgICAzLjQgICAgIE8gbWliSUkvc3lzT1JUYWJsZS5jCi0gc25tcC4qLjAgICAgICAgICAgICAgICAgICAgICBBICAgICAgICAgMy4yICAgICBPIG1pYklJL3NubXBfbWliLmMKKyBzeXN0ZW0uPy4wICAgICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjUgICAgIFcgbWliSUkvc3lzdGVtX21pYi5jCisgLnN5c09STGFzdENoYW5nZS4wICAgICAgICAgICBBICAgICAgICAgNS41ICAgICBXIG1pYklJL3N5c09SVGFibGUuYworIHN5c09SVGFibGUgICAgICAgICAgICAgICAgICAgQSAgICAgICAgIDUuNSAgICAgQyBtaWJJSS9zeXNPUlRhYmxlLmMKKyBzbm1wLiouMCAgICAgICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjUgICAgIEcgbWliSUkvc25tcF9taWJfNV81LmMKICBzZXRTZXJpYWxOby4wICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjAgICAgIFcgbWliSUkvc2V0U2VyaWFsTm8uYwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc0LDE1ICs3NiwxNSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNOTVAtTVBELU1JQgotIHNubXBNUERTdGF0cy4qLjAgICAgICAgICAgICAgQSAgICAgICAgIH40LjA/ICAgTyBzbm1wdjMvc25tcE1QRFN0YXRzLmMKKyBzbm1wTVBEU3RhdHMuKi4wICAgICAgICAgICAgIEEgICAgICAgICB+NC4wPyAgIEcgc25tcHYzL3NubXBNUERTdGF0c181XzUuYwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNOTVAtVEFSR0VULU1JQgogIHNubXBUYXJnZXRTcGluTG9jay4wICAgICAgICAgQSAgICAgICAgIDMuNiAgICAgTyB0YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jCiAgc25tcFRhcmdldEFkZHJUYWJsZSAgICAgICAgICBBICAgICAgICAgMy42ICAgICBPIHRhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMKICBzbm1wVGFyZ2V0UGFyYW1zVGFibGUgICAgICAgIEEgICAgICAgICAzLjYgICAgIE8gdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jCi0gc25tcFVuYXZhaWxhYmxlQ29udGV4dHMuMCAgICBBICAgICAgICAgNS4wICAgICBPIHRhcmdldC90YXJnZXRfY291bnRlcnMuYwotIHNubXBVbmtub3duQ29udGV4dHMuMCAgICAgICAgQSAgICAgICAgIDUuMCAgICAgTyB0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMKKyBzbm1wVW5hdmFpbGFibGVDb250ZXh0cy4wICAgIEEgICAgICAgICA1LjUgICAgIEcgdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYworIHNubXBVbmtub3duQ29udGV4dHMuMCAgICAgICAgQSAgICAgICAgIDUuNSAgICAgRyB0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU05NUC1OT1RJRklDQVRJT04tTUlCCkBAIC0xMDMsNiArMTA1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU05NUC1VU0VSLUJBU0VELVNNLU1JQgogIHVzbVN0YXRzLiouMCAgICAgICAgICAgICAgICAgQSAgICAgICAgIH40LjAgICAgTyBzbm1wdjMvdXNtU3RhdHMuYworIHVzbVN0YXRzLiouMCAgICAgICAgICAgICAgICAgQSAgICAgICAgIDUuNSAgICAgRyBzbm1wdjMvdXNtU3RhdHNfNV81LmMKICB1c21Vc2VyVGFibGUgICAgICAgICAgICAgICAgIEEgICAgICAgICB+NC4wPyAgIE8gc25tcHYzL3VzbVVzZXIuYwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1MSwxOSArMTU0LDIxIEBACiAgaWNtcC4qLjAgICAgICAgICAgICAgICAgICAgICBVICQyICAgICAgfjMuMiAgICBHIG1pYklJL2ljbXAuYwogCiAgaXBTeXN0ZW1TdGF0c1RhYmxlICAgICAgICAgICBMICAgICAgICAgNS4yICAgICBNIGlwLW1pYi89LyoKKyBpcFN5c3RlbVN0YXRzVGFibGUgICAgICAgICAgICBTICAgICAgICA1LjUgICAgIE0gaXAtbWliLz0vKgogIGlwSWZTdGF0c1RhYmxlTGFzdENoYW5nZS4wICAgLS0tCi0gaXBJZlN0YXRzVGFibGUgICAgICAgICAgICAgICAtLS0KKyBpcElmU3RhdHNUYWJsZSAgICAgICAgICAgICAgIEwtLSAgICAgICA1LjUgICAgIE0gaXAtbWliLz0vKgogCiAgaXBBZGRyVGFibGUgKEQpICAgICAgICAgICAgICBVICQyICAgICAgNC4yICAgICBPIG1pYklJL2lwQWRkci5jCi0gaXBBZGRyZXNzU3BpbkxvY2suMCAgICAgICAgICAtLS0KKyBpcEFkZHJlc3NTcGluTG9jay4wICAgICAgICAgIEEgICAgICAgICA1LjUgICAgIE8gbWliSUkvaXBBZGRyLmMKICBpcEFkZHJlc3NUYWJsZSAgICAgICAgICAgICAgIEwgICAgICAgICA1LjIgICAgIE0gaXAtbWliLz0vKgorIGlwQWRkcmVzc1RhYmxlICAgICAgICAgICAgICAgIFMgICAgICAgIDUuNSAgICAgTSBpcC1taWIvPS8qCiAgaXBBZGRyZXNzUHJlZml4VGFibGUgICAgICAgICBMICAgICAgICAgNS4zICAgICBNIGlwLW1pYi89LyoKIAogIGlwUm91dGVUYWJsZSAoRCkgICAgICAgICAgICAgVSAkMiAgICAgIH4zLjUgICAgTyBtaWJJSS8qcm91dGUqLmMKICBpcE5ldFRvTWVkaWFUYWJsZSAoRCkgICAgICAgIFUgJDIgICAgICB+My41ICAgIE8gbWliSUkvYXQuYwogIGlwTmV0VG9QaHlzaWNhbFRhYmxlICAgICAgICAgKGltcGxlbWVudGVkIGFzIGluZXROZXRUb01lZGlhVGFibGUpCiAgaW5ldE5ldFRvTWVkaWFUYWJsZSAgICAgICAgICBMICAgICAgICAgNS4yICAgICBNIGlwLW1pYi89LyoKLSBpcERlZmF1bHRSb3V0ZXJUYWJsZSAgICAgICAgIC0tLQorIGlwRGVmYXVsdFJvdXRlclRhYmxlICAgICAgICAgTCAgICAgICAgIDUuNSAgICAgTSBpcC1taWIvPS8qCiAKICBpY21wU3RhdHNUYWJsZSAgICAgICAgICAgICAgIC0tLQogIGljbXBNc2dTdGF0c1RhYmxlICAgICAgICAgICAgLS0tCkBAIC0xNzksNiArMTg0LDkgQEAKICBpcHY2Um91dGVyQWR2ZXJ0U3BpbkxvY2suMCAgIC0tLQogIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlICAgICAgLS0tCiAKKyBpcEZvcndhcmRpbmcuMCAgICAgICAgICAgICAgIEwgICAgICAgICAgNS40ICAgIFMgaXAtbWliL2lwX3NjYWxhcnMuYworIGlwRGVmYXVsdFRUTC4wICAgICAgICAgICAgICAgTCAgICAgICAgICA1LjQgICAgUyBpcC1taWIvaXBfc2NhbGFycy5jCisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSVBWNi1NSUIKICBpcHY2TUlCT2JqZWN0cy4/LjAgICAgICAgICAgIFUgICAgICAgICA0LjEgICAgIE8gbWliSUkvaXB2Ni5jCkBAIC0yMzYsNiArMjQ0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUk1PTi1NSUIKICBldGhlclN0YXRzVGFibGUgICAgICAgICAgICAgIFUgICAgICAgICA1LjAgICAgIE8gUm1vbi9zdGF0aXN0aWNzLmMKKyAuZXRoZXJTdGF0c0phYmJlcnMgICAgICAgICAgIEwzICAgICAgICA1LjUgICAgIE0gcm1vbi1taWIvPS8qCiAgZXRoZXJIaXN0b3J5Q29udHJvbFRhYmxlICAgICBVICAgICAgICAgNS4wICAgICBPIFJtb24vaGlzdG9yeS5jCiAgZXRoZXJIaXN0b3J5VGFibGUgICAgICAgICAgICBVICAgICAgICAgNS4wICAgICBPIFJtb24vaGlzdG9yeS5jCiAgYWxhcm1UYWJsZSAgICAgICAgICAgICAgICAgICBVICAgICAgICAgMy4yICAgICBPIFJtb24vYWxhcm0uYwpAQCAtMzIzLDcgKzMzMiw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRXRoZXJMaWtlLU1JQgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tCisgZG90M1N0YXRzVGFibGUgICAgICAgICAgICAgICBMICAgICAgICA1LjUgICAgICBNIGV0aGVybGlrZS1taWIvPQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFHRU5UWC1NSUIKQEAgLTQwOCwxNiArNDE3LDI5IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU0NUUC1NSUIKLSBzY3RwU3RhdHMgICAgICAgICAgICAgICAgICAgIEwgICAgICAgICA1LjQuMiAgIFMgc2N0cC1taWIvc2N0cFNjYWxhcnMqCi0gc2N0cFBhcmFtZXRlcnMgICAgICAgICAgICAgICBMICAgICAgICAgNS40LjIgICBTIHNjdHAtbWliL3NjdHBTY2FsYXJzKgotIHNjdHBBc3NvY1RhYmxlICAgICAgICAgICAgICAgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Ci0gc2N0cEFzc29jTG9jYWxBZGRyVGFibGUgICAgICBMICAgICAgICAgNS40LjIgICBDIHNjdHAtbWliLz0KLSBzY3RwQXNzb2NSZW1BZGRyVGFibGUgICAgICAgIEwgICAgICAgICA1LjQuMiAgIEMgc2N0cC1taWIvPQotIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSAgICAgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Ci0gc2N0cExvb2t1cFJlbVBvcnRUYWJsZSAgICAgICBMICAgICAgICAgNS40LjIgICBDIHNjdHAtbWliLz0KLSBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSAgIEwgICAgICAgICA1LjQuMiAgIEMgc2N0cC1taWIvPQotIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Ci0gc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlICAgICBMICAgICAgICAgNS40LjIgICBDIHNjdHAtbWliLz0KKyBzY3RwU3RhdHMgICAgICAgICAgICAgICAgICAgIEwgICAgICAgICA1LjUgICAgIFMgc2N0cC1taWIvc2N0cFNjYWxhcnMqCisgc2N0cFBhcmFtZXRlcnMgICAgICAgICAgICAgICBMICAgICAgICAgNS41ICAgICBTIHNjdHAtbWliL3NjdHBTY2FsYXJzKgorIHNjdHBBc3NvY1RhYmxlICAgICAgICAgICAgICAgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89Cisgc2N0cEFzc29jTG9jYWxBZGRyVGFibGUgICAgICBMICAgICAgICAgNS41ICAgICBDIHNjdHAtbWliLz0KKyBzY3RwQXNzb2NSZW1BZGRyVGFibGUgICAgICAgIEwgICAgICAgICA1LjUgICAgIEMgc2N0cC1taWIvPQorIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSAgICAgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89Cisgc2N0cExvb2t1cFJlbVBvcnRUYWJsZSAgICAgICBMICAgICAgICAgNS41ICAgICBDIHNjdHAtbWliLz0KKyBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSAgIEwgICAgICAgICA1LjUgICAgIEMgc2N0cC1taWIvPQorIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89Cisgc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlICAgICBMICAgICAgICAgNS41ICAgICBDIHNjdHAtbWliLz0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTTk1QLVRTTS1NSUIKKyBzbm1wVHNtU3RhdHMgICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjYgICAgIEQgdHNtLW1pYi9zbm1wVHNtU3RhdHMvPQorIHNubXBDb25maWd1cmF0aW9uICAgICAgICAgICAgQSAgICAgICAgIDUuNiAgICAgVyB0c20tbWliLz0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUTFNUTS1NSUIKKyBzbm1wVGxzdG1TZXNzaW9uICAgICAgICAgICAgIEEgICAgICAgICA1LjYgICAgIFcgdGxzdG0tbWliLz0vKgorIHRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nLiogICAgQSAgICAgICAgIDUuNiAgICAgdyB0bHN0bS1taWIvPQorIHRsc3RtQ2VydFRvVFNOVGFibGUgICAgICAgICAgQSAgICAgICAgIDUuNiAgICAgRCB0bHN0bS1taWIvPS8qCisgdGxzdG1QYXJhbXNUYWJsZSAgICAgICAgICAgICBBICAgICAgICAgNS42ICAgICBEIHRsc3RtLW1pYi89LyoKKyB0bHN0bUFkZHJUYWJsZSAgICAgICAgICAgICAgIEEgICAgICAgICA1LjYgICAgIEQgdGxzdG0tbWliLz0vKgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNDI1LDYgKzQ0Nyw3IEBACiAtLS0tLS0tLS0tCiAgMTogYXZhaWxhYmxlIGZvciBzeXN0ZW1zIHVzaW5nIEtBTUUgaXB2NgogIDI6IHdpdGggcGxhdGZvcm0gU0RLLiBTZWUgUkVBRE1FLndpbjMyCisgMzogd29ya3Mgb25seSB3aXRoIEludGVsIGFuZCBCcm9hZGNvbSBuZXR3b3JrIGNhcmRzIGFuZCBtdXN0IHJ1biBhcyByb290IG9ubHkKIAogT3RoZXIgZmVhdHVyZSBpbmZvCiAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQzNSwzICs0NTgsNSBAQAogIHByb3BlciBjb250ZXh0IHN1cHBvcnQgICAgICAgICAgICAgICAgICAgNS4yCiAgRElTTUFOLUVWRU5ULU1JQiBpbXBsZW1lbnRhdGlvbiByZXdyaXRlICA1LjMKICBBZ2VudFgsIGhvc3QsIGRpc21hbi9ldmVudCBieSBkZWZhdWx0ICAgIDUuMworIFNTSCBUcmFuc3BvcnQgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgNS41CisgKEQpVExTIFRyYW5zcG9ydCBtb2R1bGUgICAgICAgICAgICAgICAgICA1LjYKZGlmZiAtLWdpdCBhL1JFQURNRS5haXggYi9SRUFETUUuYWl4CmluZGV4IDE2ZjcyNWUuLmUyNWU5YjYgMTAwNjQ0Ci0tLSBhL1JFQURNRS5haXgKKysrIGIvUkVBRE1FLmFpeApAQCAtNiw3ICs2LDYgQEAKIAogVGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcga25vd24gcHJvYmxlbXMgb24gQUlYOgogCi0KIDEpIFNoYXJlZCBsaWJyYXJpZXMgLyBlbWJlZGRlZCBwZXJsCiAKIFVwIHRvIChhbmQgaW5jbHVkaW5nKSBuZXQtc25tcCA1LjQsIGNvbmZpZ3VyZSBmb3JjZWQgYSBzdGF0aWMgYnVpbGQKQEAgLTE0LDExICsxMywxMCBAQAogCiBTdGFydGluZyB3aXRoIG5ldC1zbm1wIDUuNC4xLCB3ZSBidWlsZCBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQgb24gQUlYCiAobGlrZSBvbiBhbnkgb3RoZXIgcGxhdGZvcm0pIHVzaW5nIHJ1bi10aW1lIGxpbmtpbmcuIGNvbmZpZ3VyZSBmb3JjZXMgdGhlCi11c2Ugb2YgdGhlIHJlcXVpcmVkICItYnJ0bCIgbGlua2VyIGZsYWcuIFdlIGFsc28gcmVjb21tZW5kCit1c2Ugb2YgdGhlIHJlcXVpcmVkICItYnJ0bCIgbGlua2VyIGZsYWcuCiAKLSAgIC4vY29uZmlndXJlIC0tZW5hYmxlLWFzLW5lZWRlZCAuLi4KLQotZm9yIHByb3BlciBsaWJwZXJsIGxpbmtpbmcuCitXaXRoIG5ldC1zbm1wIDUuNSB0aGUgc2hhcmVkIGxpYnJhcnkgYnVpbGQgaXMgYnJva2VuIGFnYWluIGJ1dCB0aGUgdGhlcmUgaXMKK25vIGZvcmNlZCBzdGF0aWMgYnVpbGQgLSB1c2UgLS1kaXNhYmxlLXNoYXJlZCB3aGVuIGJ1aWxkaW5nLgogCiAyKSAiZ3JlcDogY2FwYWNpdHkgZXhjZWVkZWQiIG9yICJzZWQ6IENvbW1hbmQgbGluZSBpcyB0b28gbG9uZyIgZHVyaW5nIGNvbmZpZ3VyZQogCmRpZmYgLS1naXQgYS9SRUFETUUuaXJpeCBiL1JFQURNRS5pcml4CmluZGV4IDc5YmY3ZWMuLmM3OTc3ZTkgMTAwNjQ0Ci0tLSBhL1JFQURNRS5pcml4CisrKyBiL1JFQURNRS5pcml4CkBAIC0zNCwxNyArMzQsNyBAQAogICBodHRwOi8vc2YubmV0L3N1cHBvcnQvdHJhY2tlci5waHA/YWlkPTE2NzU4NjkKIAogCi0zLiBQZXJsCi0tLS0tLS0tCi0KLVdoZW4gY29tcGlsaW5nIHdpdGggUGVybCBzdXBwb3J0LCBpdCdzIHJlY29tbWVuZGVkIHRvIHNwZWNpZnkKLQotICAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1hcy1uZWVkZWQKLQotZm9yIHByb3BlciBsaWJwZXJsIGxpbmtpbmcuCi0KLQotNC4gS25vd24gSXNzdWVzCiszLiBLbm93biBJc3N1ZXMKIC0tLS0tLS0tLS0tLS0tLQogCiBBY2Nlc3NpbmcgY2VydGFpbiBNSUIgb2JqZWN0cyBvbiBJUklYNjQgbWFjaGluZXMgKGkuZS4gd2hlbiBydW5uaW5nIGEgNjQtYml0IApAQCAtNTYsNyArNDYsNyBAQAogICAgLi9jb25maWd1cmUgLS13aXRob3V0LWttZW0tdXNhZ2UgLi4uCiAKIAotNS4gRmVlZGJhY2sKKzMuIEZlZWRiYWNrCiAtLS0tLS0tLS0tLQogCiBQbGVhc2UgYWxzbyBzZWUgUkVBRE1FIGFuZCBQT1JUSU5HLgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm9zWCBiL1JFQURNRS5vc1gKaW5kZXggYjE1YWZhNy4uNDliNThlNyAxMDA2NDQKLS0tIGEvUkVBRE1FLm9zWAorKysgYi9SRUFETUUub3NYCkBAIC03LDEwICs3LDYgQEAKIAogICAtIEFMTAogCi0gICAgLSBUZXN0IDQ0IChQZXJsIEFnZW50WCBTdWJhZ2VudCkgZmFpbHMuCi0KLSAgICAgICAtIGNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWFzLW5lZWRlZCBmb3IgcHJvcGVyIGxpYnBlcmwgbGlua2luZwotCiAgICAgLSBubGlzdCBkb2Vzbid0IHN1cHBvcnQgaWNtcHN0YXQKIAogICAgICAgIC0gZGlzYWJsZSB0aGUgaWNtcCBtb2R1bGUgZHVyaW5nIGNvbmZpZ3VyZSBieSBzcGVjaWZ5aW5nCkBAIC0xOSw3ICsxNSw3IEBACiAKIAogICAtIDEwLjQuNyAoVW5pdmVyc2FsKSBhbmQgTGVvcGFyZCB3aXRoIDUuNCBzb3VyY2VzOgotICAgICAgICBbU3VwcGxpZWQgYnkgQ2hyaXMgSmFsYmVydCwgc2xpZ2h0bHkgdXBkYXRlZF0KKyAgICAgICAgW1N1cHBsaWVkIGJ5IENocmlzIEphbGJlcnRdCiAKICAgICAgICAtIGJ1aWxkIHVzaW5nIGdjYyA0LjAgKHNlZSBiZWxvdykgYW5kIGNvbmZpZ3VyZSB1c2luZzoKICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0vdmFyL2RiL25ldC1zbm1wIFwKQEAgLTI3LDcgKzIzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1ycG0gXAogICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLW1pYi1tb2R1bGVzPSJob3N0IHVjZC1zbm1wL2Rpc2tpbyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLW91dC1taWItbW9kdWxlcz0ibWliSUkvaWNtcCBob3N0L2hyX3N3cnVuIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1hcy1uZWVkZWQgXAogICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWttZW0tdXNhZ2UKIAogICAgICAgIFRoZSBmaXJzdCBsaW5lIHNldHMgdXAgcGVyc2lzdGVudCBzdG9yYWdlIGluIHRoZSBPUyBYIHN0YW5kYXJkIGxvY2F0aW9uLgpAQCAtNjQsMjAgKzU5LDMgQEAKICAgICAgICAgICAgICAgICAgICAtLXByZWZpeD0vdXNyIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0vdmFyL2RiL3VjZC1zbm1wCiAgICAgICAgICAgICAgICAgICAgLS13aXRoLW1pYi1tb2R1bGVzPWhvc3QKIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaXRoIE1hYyBPUyBYIDEwLjUuMiwgYW5kIE5ldC1TTk1QIDUuNC4yLCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCi1zZWVtcyB0byBidWlsZCBhbmQgcnVuIHN1Y2Nlc3NmdWxseS4gICBUaGUgbWFpbiB0d2VhayBuZWVkZWQgdG8gZ2V0Ci10aGluZ3Mgd29ya2luZyB3YXMgdG8gZGlzYWJsZSAiZW1iZWRkZWQgcGVybCIgKHdoaWNoIGlzIGFjdGl2ZSBieQotZGVmYXVsdCBpbiA1LjQgYW5kIGFib3ZlKS4KLQotICBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IGVuYWJsaW5nIGVtYmVkZGVkIHBlcmwgd2lsbCB0cnkgdG8gdXNlIHRoZQotc2FtZSBDRkxBR1MgdXNlZCBmb3IgY29tcGlsaW5nIHBlcmwsIHdoZW4gY29tcGlsaW5nIHRoZSBOZXQtU05NUCBjb2RlCi0od2hpY2ggaXMgcHJvYmFibHkgcmVhc29uYWJsZSkuICBVbmZvcnR1bmF0ZWx5LCB0aGUgZGVmYXVsdCBwZXJsIGJpbmFyeQotdGhhdCBjb21lcyB3aXRoIE1hYyBPUy9YIDEwLjUgKGF0IGxlYXN0KSBpcyBhICJ1bml2ZXJzYWwgYmluYXJ5IiwKLXNvIHRoZSBDRkxBR1MgdGhhdCBpdCB1c2VzIGluY2x1ZGUgIi1hcmNoIGkzODYgLWFyY2ggcHBjIi4gIFRoaXMKLWR1YWwtYXJjaGl0ZWN0dXJlIG9wdGlvbiBjb25mdXNlcyB0aGUgY29uZmlndXJlIHNjcmlwdCwgYW5kIG1lYW5zCi10aGF0IGl0IGNhbm5vdCBkZXRlY3QgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgaG9zdCBzeXN0ZW0gY29ycmVjdGx5LgotCi1EYXZlCi1KdW5lIDIwMDgKZGlmZiAtLWdpdCBhL1JFQURNRS5zbm1wdjMgYi9SRUFETUUuc25tcHYzCmluZGV4IDI2M2M5NTUuLjk5ZTQyMzggMTAwNjQ0Ci0tLSBhL1JFQURNRS5zbm1wdjMKKysrIGIvUkVBRE1FLnNubXB2MwpAQCAtNSw3ICs1LDkgQEAKIGRvZXNuJ3QgOy0pIC0tV2VzOgogCiBOb3RlOiBTSEEgYXV0aGVudGljYXRpb24gYW5kIERFUy9BRVMgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG9ubHkgYXZhaWxhYmxlCi1pZiB5b3UgaGF2ZSBPcGVuU1NMIGluc3RhbGxlZC4KK2lmIHlvdSBoYXZlIE9wZW5TU0wgaW5zdGFsbGVkIG9yIGlmIHlvdSd2ZSBjb21waWxlZCB1c2luZworLS13aXRoLW9wZW5zc2w9aW50ZXJuYWwuICBJZiB5b3UgdXNlIC0td2l0aC1vcGVuc3NsPWludGVybmFsIHBsZWFzZQorcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBpbiBzbm1wbGliL29wZW5zc2wvUkVBRE1FIGZvciBpbXBvcnRhbnQgZGV0YWlscy4KIAogTm90ZTogZW5jcnlwdGlvbiBzdXBwb3J0IG5vdyAqaXMqIGVuYWJsZWQgaW4gdGhlIGJpbmFyeSByZWxlYXNlcyBkb3dubG9hZGFibGUKIGZyb20gdGhlIG5ldC1zbm1wIHdlYiBzaXRlLgpkaWZmIC0tZ2l0IGEvUkVBRE1FLnNvbGFyaXMgYi9SRUFETUUuc29sYXJpcwppbmRleCBhZWJjZTZmLi42MjVhYWUyIDEwMDY0NAotLS0gYS9SRUFETUUuc29sYXJpcworKysgYi9SRUFETUUuc29sYXJpcwpAQCAtOTk0LDEwICs5OTQsOCBAQAogCiAgICAuL2NvbmZpZ3VyZSAtZW5hYmxlLWVtYmVkZGVkLXBlcmwgLi4uCiAKLUl0J3MgcmVjb21tZW5kZWQgdG8gYWRkIC0tZW5hYmxlLWFzLW5lZWRlZCBmb3IgcHJvcGVyIGxpYnBlcmwgbGlua2luZy4KLQotRW5hYmxpbmcgUGVybCBzdXBwb3J0IHNob3VsZCBvbmx5IGJlIGRvbmUgaWYgeW91IGFyZSBzdXJlIHlvdSByZWFsbHkgCi1uZWVkIFBlcmwsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CitUaGlzIHNob3VsZCBvbmx5IGJlIGRvbmUgaWYgeW91IGFyZSBzdXJlIHlvdSByZWFsbHkgbmVlZCBQZXJsLCAKK2ZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CiAKIFNvbGFyaXMgOCBhbmQgbGF0ZXIgc2hpcCB3aXRoIGEgdmVyc2lvbiBvZiBQZXJsIGNvbXBpbGVkIHVzaW5nIFN1bidzIGNjLiAKIApkaWZmIC0tZ2l0IGEvUkVBRE1FLnNxbCBiL1JFQURNRS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNzAzOAotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5zcWwKQEAgLTAsMCArMSwyOSBAQAorc25tcHRyYXBkIE15U1FMIExvZ2dpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgdHJhcCBoYW5kbGVyIGZvciBsb2dnaW5nIHRyYXBzIHRvIGEgTXlTUUwgZGF0YWJhc2Ugd2FzIGFkZGVkCitpbiByZWxlYXNlIDUuNS4wLgorCitUaGUgTXlTUUwgZGF0YWJhc2UgbG9jYXRpb24gYW5kIHBhc3N3b3JkIG11c3QgYmUgY29uZmlndXJlZCBpbgorL3Jvb3QvLm15LmNuZjoKKworCVtzbm1wdHJhcGRdCisJaG9zdD1sb2NhbGhvc3QKKwlwYXNzd29yZD1zcWwKKworVXNlciBtYXkgYWxzbyBiZSBjb25maWd1cmVkLCBpZiB1c2luZyBhIE15U1FMIHVzZXIgYmVzaWRlcyByb290LgorCitzbm1wdHJhcGQuY29uZiBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gZm9yIHRoZSBxdWV1ZSBzaXplIGFuZAorcGVyaW9kaWMgZmx1c2ggaW50ZXJ2YWw6CisKKwkjIG1heGltdW0gbnVtYmVyIG9mIHRyYXBzIHRvIHF1ZXVlIGJlZm9yZSBmb3JjZWQgZmx1c2gKKwlzcWxNYXhRdWV1ZSAxNDAKKworCSMgc2Vjb25kcyBiZXR3ZWVuIHBlcmlvZGljIHF1ZXVlIGZsdXNoZXMKKwlzcWxTYXZlSW50ZXJ2YWwgOQorCitBIHZhbHVlIG9mIDAgZm9yIHNxbFNhdmVJbnRlcnZhbCB3aWxsIGNvbXBsZXRlbHkgZGlzYWJsZSBNeVNRTAorbG9nZ2luZyBvZiB0cmFwcy4KKworVGhlIHNjaGVtYSBtdXN0IGJlIGxvYWRlZCBpbnRvIE15U1FMIGJlZm9yZSBydW5uaW5nIHNubXB0cmFwZC4KK1RoZSBzY2hlbWEgY2FuIGJlIGZvdW5kIGluIGRpc3Qvc2NoZW1hLXNubXB0cmFwZC5zcWwKZGlmZiAtLWdpdCBhL1JFQURNRS53aW4zMiBiL1JFQURNRS53aW4zMgppbmRleCBkOTQyYjhhLi5lNDkyNDNiIDEwMDY0NAotLS0gYS9SRUFETUUud2luMzIKKysrIGIvUkVBRE1FLndpbjMyCkBAIC00LDE0ICs0LDEzIEBACiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotVGhpcyBndWlkZSBkZXNjcmliZXMgYnVpbGRpbmcgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2LjAgYW5kIGhpZ2hlciwgd2l0aAotdGhlIGdjYyBjb21waWxlciBmcm9tIE1pbkdXIC8gTVNZUywgYW5kIHdpdGggdGhlIGdjYyBjb21waWxlciBmcm9tIEN5Z3dpbi4KLUFzIGRldmVsb3BlcnMgYnVpbGQgd2l0aCBvdGhlciBXaW4zMiBlbnZpcm9ubWVudHMsIHRoZWlyIG5vdGVzIHdpbGwgYmUgCi1pbmNsdWRlZCBoZXJlLgorVGhpcyBndWlkZSBkZXNjcmliZXMgaG93IHRvIGJ1aWxkIE5ldC1TTk1QIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKyssIHRoZQorTWluR1cgZ2NjIGNvbXBpbGVyIG9yIHRoZSBDeWd3aW4gZ2NjIGNvbXBpbGVyLiAgQXMgZGV2ZWxvcGVycyBidWlsZCB3aXRoIG90aGVyCitXaW4zMiBlbnZpcm9ubWVudHMsIHRoZWlyIG5vdGVzIHdpbGwgYmUgaW5jbHVkZWQgaGVyZS4KIAotVGhlIHJlbWFpbmRlciBvZiB0aGlzIGd1aWRlIGhhcyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIDoKK1RoZSBzZWN0aW9ucyBpbiB0aGlzIGd1aWRlIGFyZToKIAotU3RhdHVzIGFzIG9mIDE0LU9jdC0yMDA2IGZvciBXaW4zMiBwbGF0Zm9ybXMKK0N1cnJlbnQgU3RhdHVzIGZvciBXaW4zMiBwbGF0Zm9ybXMKIEludGVyYWN0aW9ucyB3aXRoIE90aGVyIFZlbmRvcidzIFByb2R1Y3RzCiBSdW5uaW5nIE5ldC1TTk1QIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlCiBDby1leGlzdGVuY2Ugd2l0aCBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlcwpAQCAtMzksMzIgKzM4LDMyIEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgotKiBTdGF0dXMgYXMgb2YgMTQtT2N0LTIwMDYgZm9yIFdpbjMyIHBsYXRmb3JtcworKiBOZXQtU05NUCBzdGF0dXMgZm9yIFdpbjMyIHBsYXRmb3JtcwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIEFsbCBhcHBsaWNhdGlvbnMgYnVpbGQgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2LjAsIE1pY3Jvc29mdCBEZXZlbG9wbWVudAotRW52aXJvbm1lbnQgMjAwMyAoTVNWQyA3LjAvNy4xKSwgZ2NjIHVuZGVyIEN5Z3dpbiwgYW5kIGdjYyB1bmRlciBNaW5HVy4gIAorRW52aXJvbm1lbnQgMjAwMyAoTVNWQyA3LjAvNy4xKSwgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAwNSwgTWljcm9zb2Z0CitWaXN1YWwgU3R1ZGlvIDIwMDgsIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAsIGdjYyB1bmRlciBDeWd3aW4gYW5kIGdjYwordW5kZXIgTWluR1cuCiAKLSAgLSAgQWxsIG9mIHRoZSBhcHBsaWNhdGlvbnMgd29yawotICAgICAoc25tcHdhbGssIHNubXBnZXQsIHNubXBzZXQsIHNubXB0cmFwLCBldGMuLi4pLgotICAtICBUaGUgc3lzdGVtLCBzbm1wLCBpcCwgdGNwLCB1ZHAsIGljbXAgbWliZ3JvdXBzIGZ1bmN0aW9uCi0gICAgICAgICAod2hlbiBhZ2VudCBpcyBidWlsdCB1c2luZyB0aGUgc25tcGRzZGsgcHJvamVjdCkuCisgIC0gIEFsbCBvZiB0aGUgYXBwbGljYXRpb25zIHdvcmsgKHNubXB3YWxrLCBzbm1wZ2V0LCBzbm1wc2V0LCBzbm1wdHJhcCwgLi4uKS4KKyAgLSAgVGhlIHN5c3RlbSwgc25tcCwgaXAsIHRjcCwgdWRwIGFuZCBpY21wIE1JQi1ncm91cHMgd29yayAocmVxdWlyZXMgdGhlCisgICAgIFBsYXRmb3JtIFNESykuCiAgIC0gIFRoZSBOZXQtU05NUCBhZ2VudCBydW5zIGFzIGFuIEFnZW50WCBtYXN0ZXIgYWdlbnQgb3IgYXMgc3ViYWdlbnQuCiAgIC0gIHNtdXggaXMgd29ya2luZy4KICAgLSAgVGhlIHRhcmdldCwgbm90aWZpY2F0aW9uLCBkaXNtYW4vbXRlIGdyb3VwcyBjb21waWxlIGJ1dCBhcmUgbm90IHRlc3RlZC4KICAgLSAgVGhlIFRDUC9JUHY2IGFuZCBVRFAvSVB2NiB0cmFuc3BvcnRzIGNvbXBpbGUgYnV0IGFyZSBub3QgdGVzdGVkLgotICAgICAgICAgCiAgIC0gIEV4dGVuZGluZyB0aGUgYWdlbnQgdG8gc3VwcG9ydCBlbnRlcnByaXNlLXNwZWNpZmljIE1JQnMgd29ya3MuCiAgIC0gIFJ1bm5pbmcgdGhlIGFnZW50IG9uIGEgbm9uLXN0YW5kYXJkIFVEUCBvciBUQ1AgcG9ydCB3b3Jrcy4KLSAgLSAgU25tcGQgY2FuIGJlIHJlZ2lzdGVyZWQgYXMgYSBXaW5kb3dzIE5ULzIwMDAvWFAgc2VydmljZS4KLSAgLSAgU25tcHRyYXBkIGNhbiBiZSByZWdpc3RlcmVkIGFzIGEgV2luZG93cyBOVC8yMDAwL1hQIHNlcnZpY2UuCisgIC0gIFNubXBkIGNhbiBiZSByZWdpc3RlcmVkIGFzIGEgV2luZG93cyBzZXJ2aWNlLgorICAtICBTbm1wdHJhcGQgY2FuIGJlIHJlZ2lzdGVyZWQgYXMgYSBXaW5kb3dzIHNlcnZpY2UuCiAgIC0gIFNvbWUgYnVpbGQgZW52aXJvbm1lbnRzIGFsbG93IGxvbmcgcGF0aG5hbWVzIHRoYXQgY29udGFpbgogICAgICBlbWJlZGRlZCBzcGFjZXMuICBBcyB0aGlzIGlzIG5vdCB0cnVlIGZvciBDeWd3aW4gImNvbmZpZ3VyZSIsCiAgICAgIHRoZSBkb2N1bWVudGVkIGV4YW1wbGUgc2NyaXB0cyB3aWxsIHJlZmVyIHRvICJjOi91c3IiCiAgICAgIGFzIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3IgaW5zdGFsbGVkIE5ldC1TTk1QIHNvZnR3YXJlLgogICAtICBXaGVuIHVzaW5nIHRoZSB3aW5FeHRETEwgZXh0ZW5zaW9uIGFnZW50LCB0aGUgTmV0LVNOTVAgYWdlbnQgd2lsbAotICAgICBsb2FkIHRoZSBXaW5kb3dzIFNOTVAgU2VydmljZSBleHRlbnNpb24gRExMcworICAgICBsb2FkIHRoZSBXaW5kb3dzIFNOTVAgU2VydmljZSBleHRlbnNpb24gRExMcy4KIAogVGhlIG5leHQgc3Vic2VjdGlvbiByZWxhdGVzIHRvIGl0ZW1zIHRoYXQgYXJlIGJ1aWx0IHVzaW5nIFZpc3VhbCBTdHVkaW8KIApAQCAtNzgsOCArNzcsMTMgQEAKICAgLSAgQWxsIERlYnVnIGFuZCBSZWxlYXNlIHRhcmdldHMgbGlua2VkIHdpdGggbGlic25tcCBwcm9qZWN0IHRhcmdldHMKICAgICAgYnVpbGQgd2l0aG91dCBlcnJvcnMsIGFuZCBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KIAotICAtICBCb3RoIHRoZSBXb3Jrc3BhY2UgZ3JhcGhpY2FsIGVudmlyb25tZW50IGFuZCBjb21tYW5kIGxpbmUgbm1ha2UgaXMgCi0gICAgIHN1cHBvcnRlZCBmb3IgYnVpbGRpbmcgdW5kZXIgTVNWQy4KKyAgLSAgQm90aCBidWlsZGluZyB2aWEgdGhlIGludGVyYWN0aXZlIGRldmVsb3BtZW50IGVudmlyb25tZW50IGFuZCB2aWEgdGhlCisgICAgIGNvbW1hbmQgbGluZSAobm1ha2UpIGlzIHN1cHBvcnRlZC4KKworICAtICBXaXRoIFZpc3VhbCBTdHVkaW8gMjAwNSBhbmQgbGF0ZXIsIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBjYW4gYmUKKyAgICAgY29tcGlsZWQgaW50byBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBleGVjdXRhYmxlcyAodGhlIGFtZDY0L3g2NAorICAgICBhcmNoaXRlY3R1cmUpLiBQcmV2aW91cyBWaXN1YWwgU3R1ZGlvIHZlcnNpb25zIHN1cHBvcnQgMzItYml0IGV4ZWN1dGFibGVzCisgICAgIG9ubHkuCiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDEsOSArMTA1LDkgQEAKICAgICAgQ2hlY2sgdGhlIFNlcnZpY2VzIHBhbmVsIHRvIGJlIHN1cmUgbm8gb3RoZXIgU05NUCBwcm9ncmFtIGNvbmZsaWN0cy4gU2VlCiAgICAgIHRoZSBzZWN0aW9uIHRpdGxlZCAnQ28tZXhpc3RlbmNlIHdpdGggTWljcm9zb2Z0IFNOTVAgc2VydmljZXMnIGJlbG93LgogCi0gIC0gIFJ1bm5pbmcgdGhlIE5ldC1TTk1QIGFnZW50IGluc3RlYWQgb2YgdGhlIE1TIHN1cHBsaWVkIG9uZSB3b3JrcwotICAgICAoYXQgdGhlIGxvc3Mgb2YgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSkuICAgU2VlIHRoZSBzZWN0aW9uIHRpdGxlZCAKLSAgICAgJ0NvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzJyBiZWxvdy4KKyAgLSAgVGhlIE5ldC1TTk1QIGFnZW50IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIE1TIHN1cHBsaWVkIG9uZSB3aGlsZQorICAgICByZXRhaW5pbmcgYWxsIGZ1bmN0aW9uYWxpdHkgYW5kIHdpdGggc2xpZ2h0bHkgYmV0dGVyIFNOTVAgY29uZm9ybWFuY2UuCisgICAgIFNlZSB0aGUgc2VjdGlvbiB0aXRsZWQgJ0NvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzJyBiZWxvdy4KIAogICAtICBUaGUgTmV0LVNOTVAgYWdlbnQgZG9lcyBub3QgdXNlIHRoZSBNUyBTTk1QLmRsbCwgdGhlcmVmb3JlIGl0IGNhbm5vdCAKICAgICAgcnVuIGFzIGFuIGV4dGVuc2libGUgcGFydCBvZiB0aGUgTVMgYWdlbnQuICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYSB0aGlyZApAQCAtMTYzLDkgKzE2Nyw5IEBACiB0aGUgZGVmYXVsdCBXaW5kb3dzICgyMDAzKSBleHRlbnNpb25zIGluY2x1ZGVkIHdpdGggV2luZG93cy4gIE90aGVyIE5ldC1TTk1QIAogbW9kdWxlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgbW9kdWxlcyBsb2FkZWQgYnkgd2luRXh0RExMLgogCi1UaGUgYmluYXJ5IGluc3RhbGwgb2YgTmV0LVNOTVAgaW5jbHVkZXMgc2hvcnRjdXRzIGluIHRoZSBTdGFydCBtZW51IGZvciByZWdpc3RlcmluZyAKLWFuZCB1bnJlZ2lzdGVyaW5nIHNubXBkIGFuZCBzbm1wdHJhcGQgYXMgYSBzZXJ2aWNlIHdpdGggdGhlIGNvcnJlY3QgY29tbWFuZCBsaW5lIAotb3B0aW9ucy4KK1RoZSBiaW5hcnkgaW5zdGFsbCBvZiBOZXQtU05NUCBpbmNsdWRlcyBzaG9ydGN1dHMgaW4gdGhlIFN0YXJ0IG1lbnUgZm9yCityZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBzbm1wZCBhbmQgc25tcHRyYXBkIGFzIGEgc2VydmljZSB3aXRoIHRoZQorY29ycmVjdCBjb21tYW5kIGxpbmUgb3B0aW9ucy4KIAogQSBzaW1wbGUgdGVzdCB0byBzZWUgaWYgd2luRXh0RExMIGlzIHdvcmtpbmcgaXMgdG8gZ2V0IHRoZSBzeXNEZXNjciBzdHJpbmcuCiAKQEAgLTIzNSw3ICsyMzksMTAgQEAKIENvbXBpbGluZyBOZXQtU05NUCB3aXRoIHRoZSB3aW5FeHRETEwgZXh0ZW5zaW9uIChNU1ZDKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoZW4gYnVpbGRpbmcgd2l0aCBNU1ZDIDYsIHRoZSBNaWNyb3NvZnQgUGxhdGZvcm0gU0RLIGlzIHJlcXVpcmVkLgorV2hlbiBidWlsZGluZyB3aXRoIE1TVkMgNiwgdGhlIE1pY3Jvc29mdCBQbGF0Zm9ybSBTREsgaXMgcmVxdWlyZWQuIE5vdGU6IHRoZQorbW9zdCByZWNlbnQgUGxhdGZvcm0gU0RLIHZlcnNpb24gdGhhdCBpcyBzdGlsbCBjb21wYXRpYmxlIHdpdGggTVNWQyA2IGlzIHRoZQorRmVicnVhcnkgMjAwMyBlZGl0aW9uLiBUaGlzIGVkaXRpb24gaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBvbmxpbmUgYnV0IGNhbiBiZQorb3JkZXJlZCB2aWEgaHR0cDovL21zc2RrLm9yZGVycG9ydC5uZXQvMjIyMjE4NDgvc2hvd2FsbC5hc3AuCiAKIENvbmZpZ3VyZSAvIG5tYWtlOgogCkBAIC00MDUsMzMgKzQxMiwxOCBAQAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUlmIHlvdSBhcmUgY29tcGlsaW5nIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYuMCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdAoteW91IGluc3RhbGwgdGhlIENvcmUgUGxhdGZvcm0gU0RLIChQU0RLKS4gIFdpdGhvdXQgdGhlIFBTREssIHNvbWUgZnVuY3Rpb25hbGl0eQotd2lsbCBiZSBkaXNhYmxlZCBzdWNoIGFzIHRoZSBjb3JlIGVsZW1lbnRzIG9mIHRoZSBtaWJJSSBncm91cCBvZiB0aGUgYWdlbnQgCi13aGljaCB1c2UgdGhlICJJUCBIZWxwZXIgQVBJIiAoSVBITFBBUEkpLgorSWYgeW91IGFyZSB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2LjAsIHlvdSB3aWxsIGhhdmUgdG8gaW5zdGFsbCB0aGUKK1BsYXRmb3JtIFNESyAoUFNESykgZmlyc3QuCiAKLVRvIGRldGVybWluZSB3aGF0IGNvZGUgaXMgZGlzYWJsZWQgd2hlbiB0aGUgUFNESyBpcyBub3QgdXNlZCwgc2VhcmNoIHRoZQotc291cmNlIGNvZGUgZm9yIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLLgorT25jZSB0aGUgUFNESyBoYXMgYmVlbiBpbnN0YWxsZWQsIHNlbGVjdCB0aGUgZm9sbG93aW5nIGFjdGlvbiBmcm9tIHRoZSBTdGFydAorTWVudTogUHJvZ3JhbXMgLyBNaWNyb3NvZnQgV2luZG93cyBTREsgLyBWaXN1YWwgU3R1ZGlvIFJlZ2lzdHJhdGlvbiAvIFdpbmRvd3MKK1NESyBDb25maWd1cmF0aW9uIFRvb2wuCiAKLVRoZSBQU0RLIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gdGhlIE1TRE4gc2l0ZS4gIEdvIHRvIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20gCi1hbmQgZG8gYSBzZWFyY2ggZm9yICdwc2RrIGRvd25sb2FkJyAod2l0aG91dCB0aGUgcXVvdGVzKS4gIFlvdSBzaG91bGQgZmluZCBib3RoCi1hIHdlYiBpbnN0YWxsIGFuZCBhIGZ1bGwgaW5zdGFsbC4gIAotCi1XaGVuIGluc3RhbGxpbmcgdGhlIFNESywgYWxsIHRoYXQgaXMgcmVxdWlyZWQgaXMgdGhlICdDb3JlJy4KLQotT25jZSB0aGlzIHBhY2thZ2UgaGFzIGluc3RhbGxlZCwgZnJvbSB0aGUgU3RhcnQgTWVudSBydW4gCi0gICJQcm9ncmFtcyAtPk1pY3Jvc29mdCBQbGF0Zm9ybSBTREsuLi4gLT4gCi0gICBWaXN1YWwgU3R1ZGlvIFJlZ2lzdHJhdGlvbiAtPgotICAgUmVnaXN0ZXIgUFNESyBEaXJlY3RvcmllcyB3aXRoIFZpc3VhbCBTdHVkaW8iCi0KLUlmIHlvdSBhcmUgY29tcGlsaW5nIHVzaW5nIGFueSBvZiB0aGUgZm9sbG93aW5nIHN5c3RlbXMsIHRoZSBQU0RLIGRvd25sb2FkCi1pcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGUgcmVxdWlyZWQgcGFydHMgb2YgdGhlIFBTREsgYXJlIGluY2x1ZGVkIHdpdGggdGhlIAotaW5zdGFsbGF0aW9uIG9mIHRoZSBjb21waWxlcjoKLQotICAgIC0gTWljcm9zb2Z0IERldmVsb3BtZW50IEVudmlyb25tZW50IDIwMDIgKE1TVkMgNy4wKQotICAgIC0gTWljcm9zb2Z0IERldmVsb3BtZW50IEVudmlyb25tZW50IDIwMDMgKE1TVkMgNy4xKQotICAgIC0gQ3lnd2luIChnY2MpCi0gICAgLSBNaW5HVyAoZ2NjKQorSWYgeW91IGFyZSB1c2luZyBhbnkgb2YgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudHMsIHRoZSBQU0RLIGRvd25sb2FkIGlzIG5vdAorbmVjZXNzYXJ5IGFzIHRoZSByZXF1aXJlZCBwYXJ0cyBvZiB0aGUgUFNESyBhcmUgaW5jbHVkZWQ6CisgICAgLSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDAyIG9yIGxhdGVyLgorICAgIC0gQ3lnd2luLgorICAgIC0gTWluR1cuCiAKIEluIG9yZGVyIGZvciB0aGUgcHJvY2VzcyBwYXJ0IG9mIHRoZSBob3N0IHJlc291cmNlcyBNSUIgdG8gd29yayB1bmRlciBXaW5kb3dzCiBOVCB5b3Ugd2lsbCBuZWVkIHRvIG9idGFpbiBQU0FQSS5ETEwuIFRoaXMgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBkb3dubG9hZCAKQEAgLTQ1MSwxMiArNDQzLDEzIEBACiAKIFRoZXJlIGFyZSB0d28gd2F5cyB0byBidWlsZCBOZXQtU05NUCB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4gIFRoZSBmaXJzdAogYW5kIGVhc2llc3QgbWV0aG9kIGlzIHVzaW5nIENvbmZpZ3VyZSBhbmQgbm1ha2Ugb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHRoZSAKLXNlY29uZCBpcyB1c2luZyB0aGUgV29ya3NwYWNlIGZpbGVzIHdpdGggdGhlIGdyYXBoaWNhbCBpbnRlcmZhY2UuCitzZWNvbmQgaXMgdXNpbmcgdGhlIFdvcmtzcGFjZSBmaWxlcyBpbnNpZGUgdGhlIGludGVyYWN0aXZlIGRldmVsb3BtZW50CitlbnZpcm9ubWVudC4KIAogVG8gdXNlIG5tYWtlIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBDb25maWd1cmUgc2NyaXB0IGlzIHJ1biBmaXJzdCB0byBjcmVhdGUKLXRoZSB2YXJpb3VzIG1ha2UgZmlsZXMuICBPbmNlIHRoZXkgYXJlIGNyZWF0ZWQsIG5tYWtlIGlzIHVzZWQgdG8gYnVpbGQgdGhlIAotYXBwbGljYXRpb25zLiAgUGVybCBpcyByZXF1aXJlZCB0byB1c2UgdGhpcyBtZXRob2QsIGFzIHRoZSBDb25maWd1cmUgc2NyaXB0Ci1pcyB3cml0dGVuIGluIFBlcmwuICBBY3RpdmVTdGF0ZSBBY3RpdmVQZXJsIGlzIGF2YWlsYWJsZSBhdDoKK3RoZSB2YXJpb3VzIG1ha2VmaWxlcy4gIE9uY2UgdGhlc2UgaGF2ZSBiZWVuIGNyZWF0ZWQsIG5tYWtlIGlzIHVzZWQgdG8gYnVpbGQKK3RoZSBhcHBsaWNhdGlvbnMuICBQZXJsIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGlzIG1ldGhvZCwgYXMgdGhlIENvbmZpZ3VyZQorc2NyaXB0IGlzIHdyaXR0ZW4gaW4gUGVybC4gIEFjdGl2ZVN0YXRlIEFjdGl2ZVBlcmwgaXMgYXZhaWxhYmxlIGF0OgogCiAgICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL1Byb2R1Y3RzL0FjdGl2ZVBlcmwvCiAKQEAgLTQ2NSw1MiArNDU4LDQxIEBACiByZWNvbW1lbmRlZCB0aGF0IHlvdSByZWFkIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgd29ya3NwYWNlcyBhcmUgY29uZmlndXJlZAogZXZlbiBpZiB5b3Ugd2lsbCBvbmx5IGJlIHVzaW5nIHRoZSBjb21tYW5kIGxpbmUgQ29uZmlndXJlIC8gbm1ha2Ugc3lzdGVtLgogCi1Gb3IgdGhlIGdyYXBoaWNhbCBpbnRlcmZhY2UsIHRoZXJlIGFyZSB0d28gbWFpbiBXaW4zMiB3b3Jrc3BhY2VzIAotKCd3aW4zMi5kc3cnIGFuZCAnd2luMzJzZGsuZHN3JyksIGNvbnRhaW5pbmcgbW9yZSBvciBsZXNzIHRoZSBzYW1lIHNldCAKLW9mIHByb2plY3RzLCBwbHVzICdsaWJkbGwuZHN3JyB3aGljaCBjb250YWlucyBhIG1pbmltYWwgc2V0IG9mIHByb2plY3RzIAotZm9yIHVzZSB3aXRoIHRoZSBQZXJsIG1vZHVsZSBvbmx5LiAgCi0KLVdpbjMyLmRzdyBpcyBmb3IgZGV2ZWxvcGVycyB3aG8gaGF2ZSBub3QgaW5zdGFsbGVkIHRoZSBQbGF0Zm9ybSBTREsgZnJvbSAKLU1pY3Jvc29mdCdzIE1TRE4gU0RLIFVwZGF0ZSBzaXRlIHdoZW4gdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNi4wLgotV2luMzJzZGsuZHN3IGlzIGZvciB0aG9zZSB3aG8gaGF2ZSBvciB3aG8gYXJlIHVzaW5nIHRoZSBNaWNyb3NvZnQgRGV2ZWxvcG1lbnQgCi1FbnZpcm9ubWVudCAyMDAyLzIwMDMgKE1TVkMgNy4wLzcuMSksIEN5Z3dpbiAoZ2NjKSBvciBNaW5HVyAoZ2NjKS4KLQotTGliZGxsLmRzdyBjb21waWxlcyBhIERMTCB2ZXJzaW9uIG9mIHNubXBsaWIgKG5ldHNubXAuZGxsKS4KK0ZvciBidWlsZGluZyB2aWEgdGhlIGludGVyYWN0aXZlIGRldmVsb3BtZW50IGVudmlyb25tZW50LCB0aGVyZSBhcmUgdGhlIFdpbjMyCit3b3Jrc3BhY2VzIHdpbjMyLmRzdyBhbmQgbGliZGxsLmRzdy4gVGhlIGxhc3Qgd29ya3NwYWNlIGFsbG93cyB0byBidWlsZCBhIERMTAordmVyc2lvbiBvZiBzbm1wbGliIChuZXRzbm1wLmRsbCkuCiAKIFRoZXJlIGlzIG9uZSBjb3JlIGRldmVsb3BtZW50IGxpYnJhcnkgKCdsaWJzbm1wJyksIHRvZ2V0aGVyIHdpdGggYSBudW1iZXIgCiBvZiB1dGlsaXR5IHByb2plY3RzIGZvciB0aGUgaW5kaXZpZHVhbCBleGVjdXRhYmxlIGNvbW1hbmRzICgnc25tcGdldCcsIAogJ3NubXB3YWxrJywgZXRjLi4uKS4gIEFsbCBvZiB0aGVzZSBwcm9qZWN0cyByZXF1aXJlIHRoZSAubGliIGNyZWF0ZWQgYnkgCiB0aGUgbGlic25tcCBwcm9qZWN0LgogCi1UaGUgYWdlbnQgcmVxdWlyZXMgdGhlIGNvcmUgbGlicmFyeSBwbHVzIHRoZSBvdGhlciB0aHJlZSBsaWJyYXJ5IHByb2plY3RzIAotKCdsaWJhZ2VudCcsIGxpYmhlbHBlcnMnIGFuZCBlaXRoZXIgJ25ldHNubXBtaWJzJyBvciAnbmV0c25tcG1pYnNzZGsnIAotZGVwZW5kaW5nIG9uIHdoaWNoIHdvcmtzcGFjZSBpcyBiZWluZyB1c2VkKSB0b2dldGhlciB3aXRoIHRoZSBtYWluIGFnZW50IAotcHJvamVjdCAoZWl0aGVyICdzbm1wZCcgb3IgJ3NubXBkc2RrJykuCitUaGUgYWdlbnQgcmVxdWlyZXMgdGhlIGNvcmUgbGlicmFyeSBwbHVzIHRoZSBvdGhlciB0d28gbGlicmFyeSBwcm9qZWN0cworKCdsaWJhZ2VudCcgYW5kICduZXRzbm1wbWlicycpIHRvZ2V0aGVyIHdpdGggdGhlIG1haW4gYWdlbnQgcHJvamVjdCAoJ3NubXBkJykuCiAKIFRoZSBmaW5hbCBhcHBsaWNhdGlvbiBwcm9qZWN0IGlzIHRoZSB0cmFwIGhhbmRsZXIgJ3NubXB0cmFwZCcuICBUaGlzIGFsc28KLXJlcXVpcmVzIHRoZSBhZ2VudCBsaWJyYXJpZXMgKCdsaWJhZ2VudCcsICdsaWJoZWxwZXJzJyBhbmQgJ25ldHNubXBtaWJzJykKLWFzIHdlbGwgYXMgdGhlIGNvcmUgZGV2ZWxvcG1lbnQgbGlicmFyeS4KK3JlcXVpcmVzIHRoZSBhZ2VudCBsaWJyYXJpZXMgKCdsaWJhZ2VudCcgYW5kICduZXRzbm1wbWlicycpIGFzIHdlbGwgYXMgdGhlCitjb3JlIGRldmVsb3BtZW50IGxpYnJhcnkuCiAKLVRoZXJlIGlzIGEgRGVidWcgdmVyc2lvbiBhbmQgUmVsZWFzZSB2ZXJzaW9uIGZvciBlYWNoIHN1YnByb2plY3QuCi1UaGlzIGlzIHNvIHRoZSBEZWJ1ZyBhbmQgUmVsZWFzZSB2ZXJzaW9ucyBvZiBhbiBhcHBsaWNhdGlvbiBjYW4gYmUgYnVpbHQgYW5kIAotdGVzdGVkIHNlcGFyYXRlbHkuCitUaGVyZSBpcyBhIERlYnVnIHZlcnNpb24gYW5kIFJlbGVhc2UgdmVyc2lvbiBmb3IgZWFjaCBzdWJwcm9qZWN0LiAgVGhpcyBpcyBzbwordGhlIERlYnVnIGFuZCBSZWxlYXNlIHZlcnNpb25zIG9mIGFuIGFwcGxpY2F0aW9uIGNhbiBiZSBidWlsdCBhbmQgdGVzdGVkCitzZXBhcmF0ZWx5LgogCi1Cb3RoIFZDKysgNi4wIGFuZCA3LjEgaGF2ZSBiZWVuIHRlc3RlZC4gIEJ1aWxkaW5nIHdpdGggZWFybGllciBNaWNyb3NvZnQKLWNvbXBpbGVyIHZlcnNpb25zIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCitWQysrIDYuMCwgNy4xLCA4LjAgKDIwMDUpLCA5LjAgKDIwMDgpIGFuZCAxMC4wICgyMDEwKSBoYXZlIGJlZW4gdGVzdGVkLgorQnVpbGRpbmcgd2l0aCBlYXJsaWVyIE1pY3Jvc29mdCBjb21waWxlciB2ZXJzaW9ucyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgogCi1Ob3RlOiAgQ29tcGlsaW5nIE5ldC1TTk1QIHVzaW5nIE1TVkMgMjAwMyAuTkVUIChNU1ZDIDcuMSkgd2lsbCBhZGQgYSAKLSAgICAgICBkZXBlbmRlbmN5IG9mIE1TVkNSNzEuRExMIGZvciBORVRTTk1QLkRMTCBhbmQgYWxsIGFwcGxpY2F0aW9ucy4KLSAgICAgICBTZWFyY2ggbXNkbi5taWNyb3NvZnQuY29tIGZvciBtc3ZjcjcxLmRsbCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotICAgICAgIG9uIGRpc3RyaWJ1dGluZyBhcHBsaWNhdGlvbnMgY29tcGlsZWQgd2l0aCBNU1ZDIDIwMDMgLk5ldC4KK05vdGU6IGlmIHlvdSB3YW50IHRvIGRpc3RyaWJ1dGUgdGhlIGdlbmVyYXRlZCBleGVjdXRhYmxlLCB5b3Ugd2lsbCBhbHNvIG5lZWQKK3RvIGRpc3RyaWJ1dGUgdGhlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFJlZGlzdHJpYnV0YWJsZSBQYWNrYWdlLiBDaGVjayB0aGUKK0VVTEEgaW5jbHVkZWQgd2l0aCB0aGF0IHBhY2thZ2UgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGl0LgogCiBPcGVuU1NMIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIGVuY3J5cHRpb24gY2FwYWJpbGl0aWVzIGluIFNOTVB2MywKIG9yIFNIQSBhdXRoZW50aWNhdGlvbi4KIAogU2luY2UgdGhlIE1TVkMgYnVpbGQgZW52aXJvbm1lbnQgZG9lcyBub3QgbmF0aXZlbHkgdXNlICJjb25maWd1cmUiIG5vciAibWFrZSIKIHRvIGdlbmVyYXRlIHRoZSB2YXJpb3VzIHBhdGhuYW1lcyB0aGF0IHRoZSBwcm9ncmFtcyByZXF1aXJlLCB0aGUgaGVhZGVyIGZpbGVzIAotbmVlZCB0byBiZSBtYW51YWxseSBtb2RpZmllZCB3aGVuIHVzaW5nIHRoZSBncmFwaGljYWwgYnVpbGQgc3lzdGVtLCBhbmQgYW4gCi1pbnN0YWxsIHNjcmlwdCBpcyBwcm92aWRlZC4gIFdoZW4gdXNpbmcgdGhlIFBlcmwgQ29uZmlndXJlIC8gbm1ha2Ugc3lzdGVtLCAKLXRoZSBoZWFkZXIgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgbW9kaWZpZWQgYW5kIHJlcXVpcmUgbm8gbWFudWFsIGVkaXRpbmcuCituZWVkIHRvIGJlIG1hbnVhbGx5IG1vZGlmaWVkIHdoZW4gdXNpbmcgdGhlIElERSwgYW5kIGFuIGluc3RhbGwgc2NyaXB0IGlzCitwcm92aWRlZC4gIFdoZW4gdXNpbmcgdGhlIFBlcmwgQ29uZmlndXJlIC8gbm1ha2Ugc3lzdGVtLCB0aGUgaGVhZGVyIGZpbGVzIGFyZQorYXV0b21hdGljYWxseSBtb2RpZmllZCBhbmQgcmVxdWlyZSBubyBtYW51YWwgZWRpdGluZy4KIAogVGhlIHByb2plY3RzIGFyZSBhcnJhbmdlZCBzbyB0aGF0IEFMTCBvZiB0aGUgdXNhYmxlIHByb2R1Y3RzLCB0aGUgLmV4ZSBmaWxlcywKIGFyZSB3cml0dGVuIHRvIHRoZSB3aW4zMlxiaW4gZGlyZWN0b3J5LiAgVGhlIHdpbjMyXGxpYiBkaXJlY3RvcnkgaXMgdXNlZCBvbmx5IApAQCAtNTU1LDEyICs1MzcsMjIgQEAKIAogMS4gIE9wZW4gYSBjb21tYW5kIHByb21wdAogCi0yLiAgSW5pdGlhbGl6ZSB0aGUgVmlzdWFsIFN0dWRpbyBidWlsZCBlbnZpcm9ubWVudCBieSBydW5uaW5nIFZDVkFSUzMyLmJhdAorMi4gIFdoZW4gYnVpbGRpbmcgd2l0aCBPcGVuU1NMLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBJTkNMVURFIGFuZCBMSUIKKyAgICBzdWNoIHRoYXQgdGhlc2UgcG9pbnQgYXQgdGhlIHByb3BlciBPcGVuU1NMIGRpcmVjdG9yaWVzLiBBbiBleGFtcGxlOgorCisgICAgc2V0IElOQ0xVREU9QzpcT3BlblNTTC1XaW4zMlxpbmNsdWRlCisgICAgc2V0IExJQj1DOlxPcGVuU1NMLVdpbjMyXGxpYlxWQ1xzdGF0aWMKKworMy4gIEluaXRpYWxpemUgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGQgZW52aXJvbm1lbnQgYnkgcnVubmluZyB2Y3ZhcnNhbGwuYmF0CiAgICAgd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBiaW4gZm9sZGVyIG9mIHlvdXIgVmlzdWFsIFN0dWRpbyBpbnN0YWxsIGZvbGRlci4KKyAgICBJZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSA2NC1iaXQgYmluYXJpZXMgaW5zdGVhZCBvZiAzMi1iaXQgYmluYXJpZXMsIHJ1bgorICAgIHZjdmFyc2FsbC5iYXQgd2l0aCB0aGUgYW1kNjQgYXJndW1lbnQuIFNlZSBhbHNvICJIb3cgdG86IEVuYWJsZSBhIDY0LUJpdAorICAgIFZpc3VhbCBDKysgVG9vbHNldCBhdCB0aGUgQ29tbWFuZCBMaW5lIiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgIChodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveDRkMmMwOXMlMjh2PXZzLjgwJTI5LmFzcHgpLgogCi0zLiAgUnVuIHdpbjMyXGJ1aWxkLmJhdAorNC4gIFJ1biB3aW4zMlxidWlsZC5iYXQKIAotNC4gIFRoZSBmb2xsb3dpbmcgc2NyZWVuIHdpbGwgYXBwZWFyOgorNS4gIFRoZSBmb2xsb3dpbmcgc2NyZWVuIHdpbGwgYXBwZWFyOgogCiAgICAgTmV0LVNOTVAgYnVpbGQgYW5kIGluc3RhbGwgb3B0aW9ucwogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTU4OSw3ICs1ODEsNyBAQAogCiAgICAgU2VsZWN0IG9wdGlvbiB0byBzZXQgLyB0b2dnbGU6ICAKIAotNS4gIFRvZ2dsZSB0aGUgb3B0aW9ucyBvbiBhbmQgb2ZmIGFzIGRlc2lyZWQgYnkgdHlwaW5nIHRoZSBsaW5lIG51bWJlciAKKzYuICBUb2dnbGUgdGhlIG9wdGlvbnMgb24gYW5kIG9mZiBhcyBkZXNpcmVkIGJ5IHR5cGluZyB0aGUgbGluZSBudW1iZXIgCiAgICAgZm9sbG93ZWQgYnkgPGVudGVyPi4gIAogCiAgICAgVG8gY29tcGlsZSB3aXRoIE9wZW5TU0wsIHRoZSBPcGVuU1NMIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyBtdXN0IApAQCAtNTk5LDcgKzU5MSw3IEBACiAgICAgVG8gY29tcGlsZSB3aXRoIHRoZSBQbGF0Zm9ybSBTREssIHRoZSBQbGF0Zm9ybSBTREsgbXVzdCBhbHJlYWR5IGJlIAogICAgIGluc3RhbGxlZC4gIFNlZSB0aGUgc2VjdGlvbiAnSW5zdGFsbGluZyBQbGF0Zm9ybSBTREsnIGZvciBkZXRhaWxzLgogCi0gICAgVG8gdXNlIHRoZSBJUHY2IHRyYW5zcG9ydHMsIHlvdSBtdXN0IGJlIHVzaW5nIFdpbmRvd3MgOTggb3IgbGF0ZXIuCisgICAgVG8gdXNlIHRoZSBJUHY2IHRyYW5zcG9ydHMsIFdpbmRvd3MgOTggb3IgbGF0ZXIgaXMgcmVxdWlyZWQuCiAKICAgICBTZWUgdGhlIHNlY3Rpb24gJ1J1bm5pbmcgTmV0LVNOTVAgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIE1pY3Jvc29mdCAKICAgICBTTk1QIHNlcnZpY2UnIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIHdpbkV4dERMTCBhZ2VudC4KQEAgLTYwOSw3ICs2MDEsNyBAQAogCiAgICAgV2hlbiB5b3UgYXJlIHJlYWR5IHRvIGJ1aWxkLCB0eXBlIGYgPGVudGVyPgogCi02LiAgQnVpbGRpbmcgd2lsbCBiZWdpbi4gIEZvbGxvd2luZyBpcyBhIHNhbXBsZSBzY3JlZW4gc2hvdCBvZiBhIHF1aWV0IGJ1aWxkOgorNy4gIEJ1aWxkaW5nIHdpbGwgYmVnaW4uICBGb2xsb3dpbmcgaXMgYSBzYW1wbGUgc2NyZWVuIHNob3Qgb2YgYSBxdWlldCBidWlsZDoKIAogICAgIEJ1aWxkaW5nLi4uCiAgICAgCkBAIC02MzEsNyArNjIzLDcgQEAKICAgICAKICAgICBEb25lIQogCi03LiAgSWYgdGhlIGZvbGRlciB0aGF0IE5ldC1TTk1QIHdhcyBpbnN0YWxsZWQgdG8gaXMgZXZlciBjaGFuZ2VkLCBtb2RpZnkgdGhlIAorOC4gIElmIHRoZSBmb2xkZXIgdGhhdCBOZXQtU05NUCB3YXMgaW5zdGFsbGVkIHRvIGlzIGV2ZXIgY2hhbmdlZCwgbW9kaWZ5IHRoZSAKICAgICBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHJlZ2lzdHJ5IGtleXMgYXMgZXhwbGFpbmVkIGluIHRoZSAKICAgICAnQ29uZmlndXJhdGlvbl9PdmVydmlldy5odG1sJyBmaWxlIGxvY2F0ZWQgaW4gd2luMzIvZGlzdC9odG1saGVscC4KIApAQCAtNzE1LDE5ICs3MDcsMTkgQEAKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1UaGUgd2luMzJzZGsuZHN3IHdvcmtzcGFjZSB3aWxsIGJ1aWxkIHRoZSBhZ2VudCB0aGF0IHByb3ZpZGVzIG1pYi1JSSBvYmplY3RzCi1mb3IgbmV0d29yayBpbnRlcmZhY2UgbGF5ZXJzLCBhbmQgdGhlIElQLCBJQ01QLCBUQ1AgYW5kIFVEUCB0YWJsZXMuICBUaGlzCi13b3Jrc3BhY2UgcmVxdWlyZXMgdGhlIFBsYXRmb3JtIFNESyB0byBiZSBpbnN0YWxsZWQuICBVc2UgdGhlIHdpbjMyLmRzdyAKLXdvcmtzcGFjZSBpZiB5b3UgZG9uJ3QgaGF2ZSBvciBkb24ndCBuZWVkIHRoZXNlIGZlYXR1cmVzLiAgTm90ZTogIE90aGVyIAotZmVhdHVyZXMgbWF5IGJlIGRpc2FibGVkIGlmIHRoZSBQbGF0Zm9ybSBTREsgaXMgbm90IHVzZWQuICBTZWUgdGhlIHNlY3Rpb24KLSdJbnN0YWxsaW5nIFBsYXRmb3JtIFNESycgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitUaGUgd2luMzIuZHN3IGFuZCB3aW4zMmRsbC5kc3cgd29ya3NwYWNlcyBhbGxvdyB0byBidWlsZCB0aGUgYWdlbnQgYW5kIHRoZQorYXBwbGljYXRpb25zLiBQcm9jZWVkIGFzIGZvbGxvd3M6CiAKLTEuIElmIFNOTVB2MyBlbmNyeXB0aW9uIGNhcGFiaWxpdGllcyBvciBTSEEgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQsCisxLiBVcGRhdGUgdGhlIHZlcnNpb24gc3RhbXAgaW4gd2luMzJcbmV0LXNubXBcbmV0LXNubXAtY29uZmlnLmguICBUaGUgY3VycmVudAorICAgdmVyc2lvbiBjYW4gYmUgZm91bmQgaW4gdGhlIFVuaXggY29uZmlndXJlIHNjcmlwdCAodG9wIGxldmVsIGZvbGRlcikgYnkgCisgICBsb29raW5nIGZvciB0aGUgUEFDS0FHRV9WRVJTSU9OIHZhcmlhYmxlLgorCisyLiBJZiBTTk1QdjMgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgb3IgU0hBIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLAogICAgaW5zdGFsbCB0aGUgT3BlblNTTCBETEwgYW5kIGxpYnJhcnkgZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gCiAgICAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyB3aXRoIE9wZW5TU0wiIGFuZCB0aGVuIGNvbnRpbnVlIHdpdGggCiAgICBzdGVwIDIuCiAKLTIuIFRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBwYXRoIGlzIGM6XHVzci4gIFRoaXMgZm9sZGVyIHdpbGwgY29udGFpbiBhbGwKKzMuIFRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBwYXRoIGlzIGM6XHVzci4gIFRoaXMgZm9sZGVyIHdpbGwgY29udGFpbiBhbGwKICAgIHRoZSBiaW5hcmllcywgTUlCIGZpbGVzLCBjb25maWd1cmF0aW9uIGZpbGVzIGV0Yy4gIFRvIGNoYW5nZSB0aGUgbG9jYXRpb24sCiAgICB0aGUgd2luMzJcbmV0LXNubXBcbmV0LXNubXAtY29uZmlnLmggZmlsZSBuZWVkcyB0byBiZSBtb2RpZmllZCBieSBjaGFuZ2luZwogICAgdGhlIElOU1RBTExfQkFTRSB2YXJpYWJsZS4gCkBAIC03MzksMTE4ICs3MzEsOCBAQAogCiAgICAgIEZvciBleGFtcGxlOiAjZGVmaW5lIElOU1RBTExfQkFTRSAiYzovdXNyIi4gIAogCi0zLiBJZiB5b3UgYXJlIHVzaW5nIHdpbjMyc2RrLCB0aGUgUGxhdGZvcm0gU0RLIG11c3QgYmUgZW5hYmxlZC4gIEVkaXQgdGhlIAotICAgdGhlIHdpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oIGZpbGUgYW5kICpjaGFuZ2UqOgotCi0gICAgICAgIC8qICN1bmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyAqLwotCi0gICB0bzoKLQotICAgICAgICAjZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIDEKLQotNC4gQnVpbGQgdGhlIGFwcGxpY2F0aW9ucwotCi0gICBTdGF0aWMgYnVpbGQgKGRvZXMgbm90IHVzZSBOZXRTTk1QLkRMTCkKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICBNUyBWQysrIDYuMDoKLSAgIC0tLS0tLS0tLS0tLQotICAgYS4gT3BlbiB3aW4zMi5kc3cgb3Igd2luMzJzZGsuZHN3LgotICAgYi4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgIAotICAgYy4gU2V0IFJlbGVhc2UgYW5kL29yIERlYnVnIGluICdQcm9qZWN0IGNvbmZpZ3VyYXRpb25zJyB0byBzdWl0LgotICAgZC4gQ2xpY2sgIlJlQnVpbGQgQWxsIi4KLSAgIGUuIFdoZW4gYnVpbGRpbmcgaXMgZG9uZSwgVmlldyB0aGUgT3V0cHV0IHdpbmRvdywgY2xpcCBhbmQKLSAgICAgIHNhdmUgdG8gYSB0ZXh0IGZpbGUgaWYgdGhlcmUgaXMgc29tZSBpbmZvcm1hdGlvbiB0byBzaGFyZS4KLSAgIGYuIENsaWNrICJGaWxlLT5DbG9zZSBXb3Jrc3BhY2UiLgotCi0gICBNUyBWQysrIDcuMCs6Ci0gICAtLS0tLS0tLS0tLS0tCi0gICBhLiAgT3BlbiB3aW4zMi5kc3cgb3Igd2luMzJzZGsuZHN3LgotICAgYi4gIENsaWNrICJZZXMgdG8gQWxsIiB0byBjb252ZXJ0IHRoZSB3b3Jrc3BhY2UKLSAgIGMuICBDbGljayAiQnVpbGQtPkNvbmZpZ3VyYXRpb24gTWFuYWdlciIgYW5kIHNlbGVjdCBlaXRoZXIgUmVsZWFzZSBvciBEZWJ1ZyBmb3IgCi0gICAgICAgJ0FjdGl2ZSBTb2x1dGlvbiBDb25maWd1cmF0aW9uJyBhbmQgY2xpY2sgIkNsb3NlIgotICAgZC4gIFJpZ2h0LWNsaWNrIHRoZSAibGliYWdlbnQiIHByb2plY3QsIGFuZCBzZWxlY3QgIlJlYnVpbGQiCi0gICBlLiAgUmlnaHQtY2xpY2sgdGhlICJsaWJoZWxwZXJzIiBwcm9qZWN0LCBhbmQgc2VsZWN0ICJSZWJ1aWxkIgotICAgZi4gIFJpZ2h0LWNsaWNrIHRoZSAibGlibmV0c25tcHRyYXBkIiBwcm9qZWN0LCBhbmQgc2VsZWN0ICJSZWJ1aWxkIgotICAgZy4gIFJpZ2h0LWNsaWNrIHRoZSAic25tcGxpYiIgcHJvamVjdCwgYW5kIHNlbGVjdCAiUmVidWlsZCIKLSAgIGguICBSaWdodC1jbGljayB0aGUgIm5ldHNubXBtaWJzKHNkaykiIHByb2plY3QsIGFuZCBzZWxlY3QgIlJlYnVpbGQiCi0gICBpLiAgQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgCi0gICBqLiAgU2V0IFJlbGVhc2UgYW5kL29yIERlYnVnIGluICdQcm9qZWN0IGNvbmZpZ3VyYXRpb25zJyB0byBzdWl0IG1ha2luZwotICAgICAgIHN1cmUgbGliYWdlbnQsIGxpYmhlbHBlcnMsIGxpYm5ldHNubXB0cmFwZCwgc25tcGxpYiBhbmQgbmV0c25tcG1pYnMgYXJlIAotICAgICAgIE5PVCBzZWxlY3RlZC4KLSAgIGsuICBDbGljayAiUmVidWlsZCIuCi0gICBsLiAgV2hlbiBidWlsZGluZyBpcyBkb25lLCBWaWV3IHRoZSBPdXRwdXQgd2luZG93LCBjbGlwIGFuZAotICAgICAgIHNhdmUgdG8gYSB0ZXh0IGZpbGUgaWYgdGhlcmUgaXMgc29tZSBpbmZvcm1hdGlvbiB0byBzaGFyZS4KLSAgIG0uICBDbGljayAiRmlsZS0+Q2xvc2UgU29sdXRpb24iLgotCi0gICBEeW5hbWljIGJ1aWxkICh1c2VzIE5ldFNOTVAuRExMKQotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgQ29tcGxldGUgdGhlIHNlY3Rpb24gJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gV29ya3NwYWNlIC0gQnVpbGRpbmcgdGhlIERMTCcuCi0gICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBOZXQtU05NUCBsaWJyYXJ5IERMTCB3aGljaCBpcyBuZWVkZWQgYnkgdGhlIAotICAgYXBwbGljYXRpb25zIGFuZCB3aWxsIGVuYWJsZSBETEwgc3VwcG9ydCBpbiBuZXQtc25tcC1jb25maWcuaC4KLQotICAgTVMgVkMrKyA2LjA6Ci0gICAtLS0tLS0tLS0tLS0KLSAgIGEuIE9wZW4gd2luMzIuZHN3IG9yIHdpbjMyc2RrLmRzdy4KLSAgIGIuIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iICAKLSAgIGMuIFNldCBSZWxlYXNlIGFuZC9vciBEZWJ1ZyBpbiAnUHJvamVjdCBjb25maWd1cmF0aW9ucycgdG8gc3VpdCBmb3IgdGhlIAotICAgICAgYXBwbGljYXRpb25zLiAgTWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgYXJlIE5PVCBzZWxlY3RlZDoKLQotICAgICAgbGliYWdlbnQKLSAgICAgIGxpYmhlbHBlcnMKLSAgICAgIGxpYnNubXAKLSAgICAgIG5ldHNubXBtaWIoc2RrKQotICAgICAgbGlibmV0c25tcHRyYXBkCi0KLSAgIGQuIENsaWNrICJSZUJ1aWxkIEFsbCIuCi0gICBlLiBXaGVuIGJ1aWxkaW5nIGlzIGRvbmUsIFZpZXcgdGhlIE91dHB1dCB3aW5kb3csIGNsaXAgYW5kCi0gICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBmLiBDbGljayAiRmlsZS0+Q2xvc2UgV29ya3NwYWNlIi4KLQotICAgTVMgVkMrKyA3LjArOgotICAgLS0tLS0tLS0tLS0tLQotICAgYS4gT3BlbiB3aW4zMi5kc3cgb3Igd2luMzJzZGsuZHN3LgotICAgYi4gQ2xpY2sgIlllcyB0byBBbGwiIHRvIGNvbnZlcnQgdGhlIHdvcmtzcGFjZQotICAgYy4gQ2xpY2sgIkJ1aWxkLT5Db25maWd1cmF0aW9uIE1hbmFnZXIiIGFuZCBzZWxlY3QgZWl0aGVyIFJlbGVhc2Ugb3IgRGVidWcgZm9yIAotICAgICAgJ0FjdGl2ZSBTb2x1dGlvbiBDb25maWd1cmF0aW9uJyBhbmQgY2xpY2sgIkNsb3NlIgotICAgZC4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgCi0gICBlLiBTZXQgUmVsZWFzZSBhbmQvb3IgRGVidWcgaW4gJ1Byb2plY3QgY29uZmlndXJhdGlvbnMnIHRvIHN1aXQgZm9yIHRoZSAKLSAgICAgIGFwcGxpY2F0aW9ucy4gIE1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBOT1Qgc2VsZWN0ZWQ6Ci0KLSAgICAgIGxpYmFnZW50Ci0gICAgICBsaWJoZWxwZXJzCi0gICAgICBsaWJzbm1wCi0gICAgICBuZXRzbm1wbWliKHNkaykKLSAgICAgIGxpYm5ldHNubXB0cmFwZAotCi0gICBmLiBDbGljayAiUmVidWlsZCIuCi0gICBnLiBXaGVuIGJ1aWxkaW5nIGlzIGRvbmUsIFZpZXcgdGhlIE91dHB1dCB3aW5kb3csIGNsaXAgYW5kCi0gICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBoLiBDbGljayAiRmlsZS0+Q2xvc2UgU29sdXRpb24iLgotICAKLTUuICBJZiB0aGUgUGVybCBtb2R1bGVzIGFyZSByZXF1aXJlZCwgY29udGludWUgd2l0aCB0aGUgbmV4dCBzZWN0aW9uOgotICAgICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEJ1aWxkaW5nIHRoZSBQZXJsIFNOTVAgbW9kdWxlcycuCi0KLSAgICBPdGhlcndpc2UsIGNvbnRpbnVlIHdpdGggdGhlIHNlY3Rpb246IAotICAgICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEluc3RhbGxpbmcnCi0KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIE1pY3Jvc29mdCBWaXN1YWwgQysrIC0gV29ya3NwYWNlIC0gQnVpbGRpbmcgdGhlIERMTAotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLTEuICBPcHRpb25hbDogTWFrZSBhIGJhY2t1cCBvZiB0aGUgZXhpc3RpbmcgbmV0LXNubXAtY29uZmlnLmggd2hpY2ggY29udGFpbnMgCi0gICAgc2V0dGluZ3MgZm9yIGEgc3RhdGljIGJ1aWxkIG9mIE5ldC1TTk1QOgotCi0gICAgQ29weSB3aW4zMlxuZXQtc25tcFxuZXQtc25tcC1jb25maWcuaCB0byAKLSAgICB3aW4zMlxuZXQtc25tcFxzdGF0aWMtY29uZmlnLmguCi0KLTIuICBPcGVuIHdpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oIHVzaW5nIGEgdGV4dCBlZGl0b3IuCi0KLTMuICAqQ2hhbmdlKiB0aGUgZm9sbG93aW5nIGxpbmUgd2hpY2ggaXMgbG9jYXRlZCBuZWFyIHRoZSB0b3Agb2YgdGhlIGZpbGU6Cis0LiAgV2hlbiBidWlsZGluZyBETExzIGluc3RlYWQgb2Ygc3RhdGljIGxpYnJhcmllcywgKmNoYW5nZSogdGhlIGZvbGxvd2luZworICAgIGxpbmUgd2hpY2ggaXMgbG9jYXRlZCBuZWFyIHRoZSB0b3Agb2YgdGhlIGZpbGU6CiAKICAgICAgICAgLyogI3VuZGVmIE5FVFNOTVBfVVNFX0RMTCAqLwogCkBAIC04NTgsMzggKzc0MCwyMiBAQAogCiAgICAgICAgICNkZWZpbmUgTkVUU05NUF9VU0VfRExMIDEKIAotNC4gIE9wdGlvbmFsOiBNYWtlIGEgYmFja3VwIG9mIHRoZSBuZXcgbmV0LXNubXAtY29uZmlnLmggd2hpY2ggY29udGFpbnMgCi0gICAgc2V0dGluZ3MgZm9yIGEgRExMIGJ1aWxkIG9mIE5ldC1TTk1QOgorNS4gQnVpbGQgdGhlIGFnZW50IGFuZCB0aGUgYXBwbGljYXRpb25zCiAKLSAgICBDb3B5IHdpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oIHRvIAotICAgIHdpbjMyXG5ldC1zbm1wXGRsbC1jb25maWcuaC4KLQotNS4gQnVpbGQgdGhlIERMTAotCi0gICBNUyBWQysrIDYuMDoKLSAgIC0tLS0tLS0tLS0tLQotICAgYS4gT3BlbiBsaWJzZGxsLmRzdy4KLSAgIGIuIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iICAKLSAgIGMuIFNldCBSZWxlYXNlIGFuZC9vciBEZWJ1ZyBpbiAnUHJvamVjdCBjb25maWd1cmF0aW9ucycgdG8gc3VpdC4KLSAgIGQuIENsaWNrICJDbGVhbiIuICAqKiBEbyBOT1Qgc2tpcCB0aGlzIHN0ZXAuICoqCi0gICBlLiBDbGljayAiQnVpbGQtPkJhdGNoIEJ1aWxkLi4uIiAgCi0gICBmLiBDbGljayAiUmVCdWlsZCBBbGwiLgotICAgZy4gV2hlbiBidWlsZGluZyBpcyBkb25lLCBWaWV3IHRoZSBPdXRwdXQgd2luZG93LCBjbGlwIGFuZAorICAgYS4gT3BlbiB3aW4zMi5kc3cgKHN0YXRpYyBidWlsZCkgb3Igd2luMzJkbGwuZHN3IChkeW5hbWljIGJ1aWxkKS4KKyAgIGIuIElmIHlvdSB3YW50IHRvIGdlbmVyYXRlIDY0LWJpdCBiaW5hcmllcyBpbnN0ZWFkIG9mIDMyLWJpdCBiaW5hcmllcywKKyAgICAgIHNlbGVjdCAiQnVpbGQvQ29uZmlndXJhdGlvbiBNYW5hZ2VyIiBhbmQgYWRkIHRoZSAieDY0IiBwbGF0Zm9ybS4KKyAgIGMuIFNlbGVjdCAiQnVpbGQvQmF0Y2ggQnVpbGQuLi4iICAKKyAgIGQuIFNlbGVjdCB0aGUgcHJvamVjdHMgYW5kIGNvbmZpZ3VyYXRpb25zIHlvdSB3YW50IHRvIGJ1aWxkLgorICAgZS4gQ2xpY2sgIlJlQnVpbGQgQWxsIi4KKyAgIGYuIFdoZW4gYnVpbGRpbmcgaXMgZG9uZSwgVmlldyB0aGUgT3V0cHV0IHdpbmRvdywgY2xpcCBhbmQKICAgICAgIHNhdmUgdG8gYSB0ZXh0IGZpbGUgaWYgdGhlcmUgaXMgc29tZSBpbmZvcm1hdGlvbiB0byBzaGFyZS4KLSAgIGguIENsaWNrICJGaWxlLT5DbG9zZSBXb3Jrc3BhY2UiLgogCi0gICBNUyBWQysrIDcuMCs6Ci0gICAtLS0tLS0tLS0tLS0tCi0gICBhLiBPcGVuIGxpYnNkbGwuZHN3LgotICAgYi4gQ2xpY2sgIlllcyB0byBBbGwiIHRvIGNvbnZlcnQgdGhlIHdvcmtzcGFjZQotICAgYy4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgCi0gICBkLiBTZXQgUmVsZWFzZSBhbmQvb3IgRGVidWcgaW4gJ1Byb2plY3QgY29uZmlndXJhdGlvbnMnIHRvIHN1aXQuCi0gICBlLiBDbGljayAiQ2xlYW4iLiAgKiogRG8gTk9UIHNraXAgdGhpcyBzdGVwLiAqKgotICAgZi4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgCi0gICBnLiBDbGljayAiUmVidWlsZCIuCi0gICBoLiBXaGVuIGJ1aWxkaW5nIGlzIGRvbmUsIFZpZXcgdGhlIE91dHB1dCB3aW5kb3csIGNsaXAgYW5kCi0gICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBpLiBDbGljayAiRmlsZS0+Q2xvc2UgU29sdXRpb24iLgorNi4gIElmIHRoZSBQZXJsIG1vZHVsZXMgYXJlIHJlcXVpcmVkLCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHNlY3Rpb246CisgICAgJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmcgdGhlIFBlcmwgU05NUCBtb2R1bGVzJy4KKworICAgIE90aGVyd2lzZSwgY29udGludWUgd2l0aCB0aGUgc2VjdGlvbjogCisgICAgJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gSW5zdGFsbGluZycKIAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkwMywyMSArNzY5LDE2IEBACiBsb2FkIGl0J3Mgb3duIGNvcHkgb2YgdGhlIE1JQiwgYW5kIHNoYXJpbmcgZGF0YSBiZXR3ZWVuIG1vZHVsZXMgd2lsbAogbm90IGJlIHBvc3NpYmxlLiAgRm9yIGV4YW1wbGUsIHRoZSBjb25mIG1vZHVsZSB0ZXN0cyB3aWxsIGZhaWwuCiAKLTEuICBDb21wbGV0ZSB0aGUgc2VjdGlvbiAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZycuICBUaGlzIHdpbGwgYnVpbGQKLSAgICB0aGUgYXBwbGljYXRpb25zLiAgCisxLiAgQ29tcGxldGUgdGhlIHNlY3Rpb24gJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmcnIGFuZCBjaG9vc2UgZm9yCisgICAgdGhlIGR5bmFtaWMgYnVpbGQuICBUaGlzIHdpbGwgYnVpbGQgdGhlIGxpYnJhcmllcywgYWdlbnQgYW5kIGFwcGxpY2F0aW9ucy4KIAogICAgIE5vdGU6ICBTTk1QRC5FWEUgYW5kIFNOTVBUUkFQRC5FWEUgYXJlIHJlcXVpcmVkIGZvciBydW5uaW5nIHRoZSB0ZXN0cyAKICAgICAgICAgICAgYWdhaW5zdCB0aGUgU05NUCBQZXJsIG1vZHVsZS4KIAotMi4gIENvbXBsZXRlIHRoZSBzZWN0aW9uICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIFdvcmtzcGFjZSAtIEJ1aWxkaW5nIHRoZSBETEwnLgotICAgIFRoaXMgd2lsbCBjcmVhdGUgdGhlIE5ldC1TTk1QIGxpYnJhcnkgRExMIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIFBlcmwgCi0gICAgbW9kdWxlcy4gIE5vdGU6ICBUaGlzIHN0ZXAgY2FuIGJlIHNraXBwZWQgaWYgdGhlIERMTCB3YXMgYWxyZWFkeSBjcmVhdGVkCi0gICAgaW4gc3RlcCAxLgotCi0zLiAgSW5zdGFsbCBOZXQtU05NUCBhcyBkZXNjcmliZWQgaW4gdGhlICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEluc3RhbGxpbmcnCisyLiAgSW5zdGFsbCBOZXQtU05NUCBhcyBkZXNjcmliZWQgaW4gdGhlICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEluc3RhbGxpbmcnCiAgICAgc2VjdGlvbiB0byBpbnN0YWxsIHRoZSBhcHBsaWNhdGlvbnMsIHRoZSBETEwgYW5kIHRoZSAubGliIGZpbGVzLgogCi00LiAgQ29udGludWUgd2l0aCB0aGUgV2luMzIgc2VjdGlvbiBvZiB0aGUgUGVybCBSRUFETUUgZmlsZSBsb2NhdGVkIGluIAorMy4gIENvbnRpbnVlIHdpdGggdGhlIFdpbjMyIHNlY3Rpb24gb2YgdGhlIFBlcmwgUkVBRE1FIGZpbGUgbG9jYXRlZCBpbiAKICAgICBwZXJsXFNOTVBcUkVBRE1FLgogCiAKQEAgLTEwMzgsMjYgKzg5OSw5IEBACiAJZnRwOi8vZnRwLm9wZW5zc2wub3JnL3NvdXJjZS8KIAogCi0gMy4gT25jZSB0aGUgT3BlblNTTCBsaWJyYXJpZXMgYXJlIGJ1aWx0LCB5b3UgbXVzdCBjb3B5IHRoZW0gdG8gdGhlIHRoZSBNU1ZDIAotICAgIGRpcmVjdG9yeToKKyAzLiBPbmNlIHRoZSBPcGVuU1NMIGxpYnJhcmllcyBhcmUgYnVpbHQsIGNvcHkgdGhlIGZvbGRlciBpbmMzMlxvcGVuc3NsIHRvCisgICAgQzpcT3BlblNTTFxJbmNsdWRlXG9wZW5zc2wgYW5kIHRoZSBmb2xkZXIgb3V0MzJkbGwgdG8gQzpcT3BlblNTTFxMaWJcVkMuCiAKLSAgICBhLiAgQ29weSBmb2xkZXIgaW5jMzJcb3BlbnNzbCB0byB0aGUgaW5jbHVkZSBmb2xkZXIgb2YgTVNWQysrCi0KLSAgICAgICAgRXhhbXBsZTogIkM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXAotICAgICAgICAgICAgICAgICAgVmM3XGluY2x1ZGVcb3BlbnNzbFwqLmgiCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvXAotICAgICAgICAgICAgICAgICAgVkM5OFxpbmNsdWRlXG9wZW5zc2xcKi5oIgotCi0gICAgYi4gIENvcHkgZmlsZSBvdXQzMmRsbFxsaWJlYXkzMi5saWIgdG8gdGhlIGxpYiBmb2xkZXIgb2YgTVNWQysrCi0KLSAgICAgICAgRXhhbXBsZTogIkM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXAotICAgICAgICAgICAgICAgICAgVmM3XGxpYlxsaWJlYXkzMi5saWIiCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvXAotICAgICAgICAgICAgICAgICAgVkM5OFxsaWJcbGliZWF5MzIubGliIgotCi0gICAgYy4gIENvcHkgZmlsZSBvdXQzMmRsbFxsaWJlYXkzMi5kbGwgdG8geW91ciAld2luZGlyJVxzeXN0ZW0zMiBmb2xkZXIKLQotICAgICAgICBFeGFtcGxlOiAiQzpcd2lubnRcc3lzdGVtMzJcbGliZWF5MzIuZGxsIgogCiBVc2luZyBhIHByZS1jb21waWxlZCB2ZXJzaW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMDY4LDIzICs5MTIsNiBAQAogCiAgMi4gSW5zdGFsbCB0aGUgcGFja2FnZSB0byBjOlxPcGVuU1NMLgogCi0gMy4gQ29weSB0aGUgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIHRvIHRoZSB0aGUgTVNWQyBkaXJlY3Rvcnk6Ci0KLSAgICBhLiAgQ29weSBmb2xkZXIgYzpcT3BlblNTTFxpbmNsdWRlXG9wZW5zc2wgdG8gdGhlIGluY2x1ZGUgZm9sZGVyIG9mIAotICAgICAgICBNU1ZDKysuCi0KLSAgICAgICAgRXhhbXBsZTogIkM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXAotICAgICAgICAgICAgICAgICAgVmM3XGluY2x1ZGVcb3BlbnNzbFwqLmgiCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvXAotICAgICAgICAgICAgICAgICAgVkM5OFxpbmNsdWRlXG9wZW5zc2xcKi5oIgotCi0gICAgYi4gIENvcHkgZmlsZSBjOlxPcGVuU1NMXGxpYlxWQ1xsaWJlYXkzMi5saWIgdG8gdGhlIGxpYiBmb2xkZXIgb2YgTVNWQysrLgotCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwM1wKLSAgICAgICAgICAgICAgICAgIFZjN1xsaWJcbGliZWF5MzIubGliIgotICAgICAgICBFeGFtcGxlOiAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1wKLSAgICAgICAgICAgICAgICAgIFZDOThcbGliXGxpYmVheTMyLmxpYiIKLQogCiBQcm9qZWN0IGNoYW5nZXMKID09PT09PT09PT09PT09PQpAQCAtMTA5MywzOCArOTIwLDEwIEBACiAKIAkjZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMQogCi0gMi4gT3BlbiBWaXN1YWwgU3R1ZGlvLCBhZGQgdGhlIGxpbmsgbGluZSB0byB0aGUgUHJvamVjdCBTZXR0aW5ncwotICAgIGZvciBhbGwgdGhlIGFwcGxpY2F0aW9ucywgYW5kIGVzcGVjaWFsbHkgZm9yIHRoZSBsaWJzbm1wX2RsbCBwcm9qZWN0LAotICAgIGZvciBhcyB5b3Uga25vdywgYSAuRExMIGlzIGFuIGFwcGxpY2F0aW9uLgotICAgIFlvdSBNVVNUIGRvIHRoaXMgZm9yIGxpYnNkbGwuZHN3LCBhbmQgZWl0aGVyIHdpbjMyLmRzdyBvciB3aW4zMnNkay5kc3csCi0gICAgd2hpY2hldmVyIHlvdSB1c2UuCi0KLSAgIE1TIFZDKysgNi4wOgotICAgLS0tLS0tLS0tLS0tCi0gICBhLiAgQ2xpY2sgUHJvamVjdC0+U2V0dGluZ3MuICAKLSAgIGIuICBIaWdobGlnaHQgdGhlIG5hbWVzIG9mIGFsbCBwcm9qZWN0cyBleGNlcHQgbGlic25tcCwgbGliYWdlbnQsIGxpYmhlbHBlcnMsCi0gICAgICAgbGlibmV0c25tcHRyYXBkLCBuZXRzbm1wbWlicywgbmV0c25tcG1pYnNzZGsuCi0gICBjLiAgU2VsZWN0IHRoZSBMaW5rIHNlY3Rpb24uCi0gICBkLiAgQWRkIHRoZSBuZXh0IGxpbmUgdG8gdGhlICdPYmplY3QvTGlicmFyeSBNb2R1bGVzJyBsaXN0IGZvciBEZWJ1ZyBhbmQgCi0gICAgICAgUmVsZWFzZSB2ZXJzaW9uczoKLQotICAgICAgICAgbGliZWF5MzIubGliIAotCi0gICBNUyBWQysrIDcuMCs6Ci0gICAtLS0tLS0tLS0tLS0tCi0gICBhLiAgRm9yIGVhY2ggcHJvamVjdCAoZXhjZXB0IGxpYnNubXAsIGxpYmFnZW50LCBsaWJoZWxwZXJzLCBsaWJuZXRzbm1wdHJhcGQsCi0gICAgICAgbmV0c25tcG1pYnMsIG5ldHNubXBtaWJzc2RrKSwgY2xpY2sgUHJvamVjdC0+UHJvcGVydGllcy4gCi0gICBiLiAgRm9yIENvbmZpZ3VyYXRpb24sIHNlbGVjdCAnUmVsZWFzZScKLSAgIGMuICBDbGljayBMaW5rZXIgYW5kIHRoZW4gSW5wdXQKLSAgIGQuICBBZGQgdG8gdGhlICdBZGRpdGlvbmFsIERlcGVuZGVuY2llcycgc2VjdGlvbjoKLQotICAgICAgICAgbGliZWF5MzIubGliIAotCi0gICBlLiAgRm9yIENvbmZpZ3VyYXRpb24sIHNlbGVjdCAnRGVidWcnCi0gICBmLiAgQ2xpY2sgTGlua2VyIGFuZCB0aGVuIElucHV0Ci0gICBnLiAgQWRkIHRvIHRoZSAnQWRkaXRpb25hbCBEZXBlbmRlbmNpZXMnIHNlY3Rpb246Ci0KLSAgICAgICAgIGxpYmVheTMyLmxpYiAKKyAyLiBPcGVuIFZpc3VhbCBTdHVkaW8sIG9wZW4gdGhlIFRvb2xzIG1lbnUgYW5kIHNlbGVjdCBPcHRpb25zLiBHbyB0bworICAgIFByb2plY3RzIGFuZCBTb2x1dGlvbnMgYW5kIHNlbGVjdCBWQysrIERpcmVjdG9yaWVzLiBBZGQKKyAgICBDOlxPcGVuU1NMXEluY2x1ZGUgdG8gdGhlIGxpc3Qgb2YgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKKyAgICBDOlxPcGVuU1NMXExpYlxWQyB0byB0aGUgbGlzdCBvZiBsaWJyYXJ5IGRpcmVjdG9yaWVzLgogCiAgMy4gQ29udGludWUgd2l0aCB0aGUgc2VjdGlvbiAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyIKIApAQCAtMTEzNiwxNiArOTM1LDEwIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogVGhlIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbiBzdXBwb3J0cyBTTk1QIG92ZXIgSVB2NC1iYXNlZCB0cmFuc3BvcnRzLgotSG93ZXZlciwgV2luZG93cyBYUCBhbmQgV2luZG93cyAyMDAwIGluY2x1ZGUgYW4gSVB2Ni1jYXBhYmxlIHN0YWNrLCB3aGljaAorSG93ZXZlciBXaW5kb3dzIDIwMDAgYW5kIGxhdGVyIGluY2x1ZGUgYW4gSVB2Ni1jYXBhYmxlIHN0YWNrIHdoaWNoCiBjYW4gYmUgdXNlZCB0byBwcm92aWRlIFNOTVAgb3ZlciBJUHY2LiAgVG8gZW5hYmxlIElQdjYsIHRoZSBNaWNyb3NvZnQgUFNESyAKLWlzIHJlcXVpcmVkIGFuZCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgdG8gdGhlIE5ldC1TTk1QIHdpbjMyIFZpc3VhbCBDKysgCi1jb25maWd1cmF0aW9uIGFyZSBuZWVkZWQ6Ci0KLVByb2plY3QgY2hhbmdlcwotPT09PT09PT09PT09PT09Ci0KLSAxLiBFZGl0IHRoZSB3aW4zMlxuZXQtc25tcFxuZXQtc25tcC1jb25maWcuaCBoZWFkZXIgZmlsZS4gIENoYW5nZQotICAgIHRoZSBzaW5nbGUgSU5FVDYgbGluZSBmcm9tOgoraXMgcmVxdWlyZWQgYW5kIE5FVFNOTVBfRU5BQkxFX0lQVjYgaGFzIHRvIGJlIGVuYWJsZWQgaW4KK3dpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oLiBDaGFuZ2UgdGhlIGZvbGxvd2luZyBzaW5nbGUgbGluZSBmcm9tOgogCiAgICAgICAgIC8qICN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCiAKQEAgLTExNTMsMjAgKzk0Niw3IEBACiAKICAgICAgICAJI2RlZmluZSBORVRTTk1QX0VOQUJMRV9JUFY2IDEKIAotIDIuIEVkaXQgdGhlIHdpbjMyXGxpYnNubXBfZGxsXGxpYnNubXAuZGVmIGZpbGUuICBBbGwgdGhlIElQdjYgZnVuY3Rpb25zIHdpbGwKLSAgICBiZSBjb21tZW50ZWQgb3V0IGFuZCB3aWxsIG5lZWQgdG8gYmUgZW5hYmxlZCBieSByZW1vdmluZyAnO0lQdjYnIGZyb20gdGhlCi0gICAgYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4gIAotCi0gICAgRm9yIGV4YW1wbGUsIGNoYW5nZToKLQotCi0gICAgICAgIDtJUHY2ICAgICAgICBuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkKLQotICAgIHRvOgotCi0gICAgICAgICAgICAgICAgbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5Ci0KLSAzLiBDb250aW51ZSB3aXRoIHRoZSBzZWN0aW9uICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEJ1aWxkaW5nIgorTmV4dCwgY29udGludWUgd2l0aCB0aGUgc2VjdGlvbiAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyIKIAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyNDUsOSArMTAyNSw3IEBACiBmb3IgV2luZG93cyBiYXNlZCBzeXN0ZW1zLiBUaGUgY3lnd2luMS5kbGwgcHJvdmlkZXMgYSBQT1NJWCBlbXVsYXRpb24gbGF5ZXIgCiB0aGF0IHNpbXBsaWZpZXMgcG9ydGluZyBVbml4IC8gTGludXggYXBwbGljYXRpb25zIHRvIFdpbmRvd3MuIFRoZSBDeWd3aW4gZGxscwogYXJlIHJlcXVpcmVkIGlmIGFuIGFwcGxpY2F0aW9uIGlzIHRvIGJlIGRpc3RyaWJ1dGVkLiBUaGUgZGVwZW5kZW5jeSBvbiB0aGUgCi1DeWd3aW4gZGxscyBjYW4gYmUgZWxpbWluYXRlZCB3aXRoIHRoZSAtLW1uby1jeWd3aW4gY29tcGlsZXIgZmxhZywgd2hpY2ggdXNlcwotTWluR1cgdG8gY29tcGlsZSBhIG5hdGl2ZSBXaW5kb3dzIGJpbmFyeSwgYnV0IHRoZSBiZW5lZml0IG9mIHRoZSBQT1NJWCBlbXVsYXRpb24KLWlzIGxvc3QuIFRoZSBDeWd3aW4gdG9vbCBjaGFpbiBhbmQgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYXQ6CitUaGUgQ3lnd2luIHRvb2wgY2hhaW4gYW5kIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGF0OgogCiBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2N5Z3dpbi8KIApAQCAtMTI2OSw0MSArMTA0NywzMyBAQAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUFuIGFsdGVybmF0ZSB3YXkgdG8gYnVpbGQgTmV0LVNOTVAgZm9yIHdpbjMyIGlzIHRvIHVzZSBDeWdudXMncyBjeWd3aW4zMgotZW52aXJvbm1lbnQuICBJbmZvcm1hdGlvbiBvbiB0aGUgQ3lnbnVzIGN5Z3dpbjMyIGVudmlyb25tZW50IGlzIGF2YWlsYWJsZQorQW4gYWx0ZXJuYXRlIHdheSB0byBidWlsZCBhbmQgcnVuIE5ldC1TTk1QIG9uIFdpbjMyIGlzIHRvIHVzZSB0aGUgQ3lnd2luCitlbnZpcm9ubWVudC4gIERldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDeWd3aW4gZW52aXJvbm1lbnQgaXMgYXZhaWxhYmxlCiBvbiB0aGUgd2ViIGF0OiBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2N5Z3dpbi8uCiAKIEN5Z3dpbiBhbGxvd3MgeW91IHRvIGNvbXBpbGUgYWxtb3N0IHRoZSBjb21wbGV0ZSBhZ2VudCBhbmQgYXBwbGljYXRpb25zLgotVGhlIGZvbGxvd2luZyBjb25maWd1cmUgb3B0aW9ucyBjcmVhdGVzIGEgd29ya2luZyBzZXQgb2YgcHJvZ3JhbXM6CitBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyZSBvcHRpb25zIGNyZWF0ZSBhIHdvcmtpbmcgc2V0IG9mCitwcm9ncmFtczoKIAorRU5WX1NFUEFSQVRPUj0iOiIgXAogLi9jb25maWd1cmUgXAogCS0td2l0aC1taWItbW9kdWxlcz0iaG9zdCBhZ2VudHggZGlzbWFuL2V2ZW50LW1pYiBleGFtcGxlcy9leGFtcGxlIiBcCiAJLS13aXRoLW91dC1taWItbW9kdWxlcz1ob3N0L2hyX25ldHdvcmsgXAotICAgICAgICAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIFwKIAotSWYgeW91IHdhbnQgdG8gdXNlIFNOTVB2MyBhdXRoIGFuZCBwcml2YWN5IGZlYXR1cmVzLCBhZGQ6Ci0JLS13aXRoLW9wZW5zc2w9Ii91c3IiIFwKK0lmIHlvdSB3YW50IHRvIGRpc2FibGUgU05NUHYzIGF1dGggYW5kIHByaXZhY3kgZmVhdHVyZXMsIGFkZDoKKwktLXdpdGhvdXQtb3BlbnNzbCBcCiAKIElmIHlvdSB3YW50IHRvIHVzZSBJUHY2IHRyYW5zcG9ydHMsIGFkZDoKLQktLWVuYWJsZS1pcHY2IC0td2l0aC10cmFuc3BvcnRzPSJUQ1BJUHY2IFVEUElQdjYiCisJLS1lbmFibGUtaXB2NgogCi1Ob3RlOiAgVGhlIHNvdXJjZSBjb2RlIHNob3VsZCAqbm90KiBiZSBpbiBhIGZvbGRlciB0aGF0IGNvbnRhaW5zIGEgc3BhY2UuICBGb3IKLSAgICAgICBleGFtcGxlLCBjb21waWxpbmcgaW4geW91ciAnTXkgRG9jdW1lbnRzJyBvciB5b3VyIERlc2t0b3AgKHVzdWFsbHkKLSAgICAgICBjOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXHh4eHhcRGVza3RvcCkgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgCi1UaGlzIGhhcyBiZWVuIHRlc3RlZCBmb3IgV2luZG93cyA5OCBhbmQgV2luZG93cyBOVCA0LjAuICBJbiBvcmRlciBmb3IKLXRoZSBwcm9jZXNzIHBhcnQgb2YgdGhlIGhvc3QgcmVzb3VyY2VzIE1JQiB0byB3b3JrIHVuZGVyIE5UIHlvdSB3aWxsIG5lZWQKLXRvIGdldCBob2xkIG9mIHRoZSBQU0FQSS5ETEwuIFRoaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBkb3dubG9hZCBzZWN0aW9uCi1vZiB3d3cubWljcm9zb2Z0LmNvbS4gIFRoZSBETEwgaXMgaW5jbHVkZWQgd2l0aCBXaW5kb3dzIDIwMDAgYW5kIFhQLAotYW5kIGlzIGFsc28gcGFydCBvZiB0aGUgVkMrKyBkaXN0cmlidXRpb24uICBUaGUgSVBITFBBUEkgbGlicmFyeSBpcwotcGFydCBvZiB0aGUgIk1pY3Jvc29mdCBQbGF0Zm9ybSBTREsiLCB3aGljaCBpcyBhbHNvIGF2YWlsYWJsZSBmcm9tCi13d3cubWljcm9zb2Z0LmNvbS4gIFNlZSB0aGUgc2VjdGlvbiAiSW5zdGFsbGluZyBQbGF0Zm9ybSBTREsiIGZvciBkZXRhaWxzLgorTm90ZTogdGhlIHNvdXJjZSBjb2RlIHNob3VsZCAqbm90KiBiZSBpbiBhIGZvbGRlciB0aGF0IGNvbnRhaW5zIGEgc3BhY2UuCitGb3IgZXhhbXBsZSwgY29tcGlsaW5nIGluIHlvdXIgJ015IERvY3VtZW50cycgZm9sZGVyIG9yIHlvdXIgRGVza3RvcCBmb2xkZXIKKyh1c3VhbGx5IGM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NceHh4eFxEZXNrdG9wKSBpcyBub3Qgc3VwcG9ydGVkLgogCi1FYXJsaWVyIHJlbGVhc2VzIG9mIEN5Z3dpbiBtYXkgbmVlZCB0byB1c2UgdGhlIGNvbmZpZ3VyZSBmbGFnCi0JLS13aXRoLWxpYnM9Ii1scmVnZXggLWxpYnBobHBhcGkiCi1idXQgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCBoYXMgc2luY2UgYmVlbiBpbmNvcnBvcmF0ZWQKLWludG8gdGhlIG1haW4gQ3lnd2luIHBhY2thZ2UsIGFuZCBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvCi1pbmNsdWRlIGl0IHNlcGFyYXRlbHkuCitBIG5vdGUgZm9yIFdpbmRvd3MgTlQgdXNlcnM6IGluIG9yZGVyIGZvciB0aGUgcHJvY2VzcyBwYXJ0IG9mIHRoZSBob3N0CityZXNvdXJjZXMgTUlCIChocl9zd3J1bikgdG8gd29yayB1bmRlciBXaW5kb3dzIE5UIHlvdSB3aWxsIG5lZWQgdG8gZ2V0IGhvbGQKK29mIFBTQVBJLkRMTC4gVGhpcyBETEwgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBkb3dubG9hZCBzZWN0aW9uIG9mCit3d3cubWljcm9zb2Z0LmNvbSwgYW5kIGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIFZDKysgZGlzdHJpYnV0aW9uLgogCiBJZiB0aGUgZm9sZGVyIHRoYXQgTmV0LVNOTVAgd2FzIGluc3RhbGxlZCB0byBpcyBldmVyIGNoYW5nZWQsIG1vZGlmeSB0aGUgCiBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHJlZ2lzdHJ5IGtleXMgYXMgZXhwbGFpbmVkIGluIHRoZSAKQEAgLTEzMjAsMTcgKzEwOTAsMTYgQEAKIE1pbkdXIHRvb2xzIHdpdGggdGhlIE1TeVMgZW52aXJvbm1lbnQuIE1pbkdXLCBNU3lTIGFuZCB0aGUgYXNzb2NpYXRlZAogZG9jdW1lbnRhdGlvbiBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm1pbmd3Lm9yZy4KIAotQ29tcGlsaW5nIG5ldC1zbm1wIHdpdGggTWluR1cgcmVxdWlyZXMgR05VIHJlZ2V4LiBBIEdOVSByZWdleCBwYWNrYWdlIHRoYXQKLWJ1aWxkcyB1bmRlciBNaW5HVyB3aXRoIE1TeVMgaXMgYXZhaWxhYmxlIGF0OiAKK0NvbXBpbGluZyBuZXQtc25tcCB3aXRoIE1pbkdXIHJlcXVpcmVzIEdOVSByZWdleCBhbmQgbGliaW50bC4gQmluYXJpZXMgYW5kCitkZXZlbG9wZXIgaGVhZGVyIGZpbGVzIGZvciB0aGVzZSBsaWJyYXJpZXMgYXJlIGF2YWlsYWJsZSBhdDogCiAKLSAgICAgICAgaHR0cDovL3d3dy5ib2Vkb2cuY29tL25ldC1zbm1wL2dudV9yZWdleC9yZWdleC0wLTEyLW1pbmd3LXIyLnRhci5negorICAgICAgICBodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0L3BhY2thZ2VzL3JlZ2V4Lmh0bQorICAgICAgICBodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0L3BhY2thZ2VzL2xpYmludGwuaHRtCiAKLU5vdGU6ICBUaGUgc291cmNlIGNvZGUgc2hvdWxkICpub3QqIGJlIGluIGEgZm9sZGVyIHRoYXQgY29udGFpbnMgYSBzcGFjZS4gIEZvcgotICAgICAgIGV4YW1wbGUsIGNvbXBpbGluZyBpbiB5b3VyICdNeSBEb2N1bWVudHMnIG9yIHlvdXIgRGVza3RvcCAodXN1YWxseQotICAgICAgIGM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NceHh4eFxEZXNrdG9wKSBpcyBub3Qgc3VwcG9ydGVkLgotICAgICAgIAotMS4gIEJ1aWxkIGFuZCBpbnN0YWxsIEdOVSByZWdleCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgCi0gICAgcmVnZXgtMC0xMi1taW5ndy1yMiBSRUFETUUuCitQcm9jZWVkIGFzIGZvbGxvd3MgdG8gYnVpbGQgTmV0LVNOTVA6CisKKzEuICBJbnN0YWxsIEdOVSByZWdleCBhbmQgR05VIGxpYmludGwgYmluYXJpZXMgYW5kIGRldmVsb3BlciBmaWxlcyBpbiB0aGUKKyAgICBNaW5HVyB0cmVlLgogCiAyLiAgSWYgU05NUHYzIGVuY3J5cHRpb24gY2FwYWJpbGl0aWVzIG9yIFNIQSBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCwKICAgICBpbnN0YWxsIHRoZSBPcGVuU1NMIERMTCBhbmQgbGlicmFyeSBmaWxlIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiAKQEAgLTEzNTcsNyArMTEyNiw3IEBACiAKIAkuL2NvbmZpZ3VyZSAtLXByZWZpeD0iJEJBU0VESVIiIFwKIAkJLS13aXRoLW1pYmRpcnM9IiRCQVNFRElSL3NoYXJlL3NubXAvbWlicyIgXAotCS0td2l0aC1taWItbW9kdWxlcz0iYWdlbnR4IGRpc21hbi9ldmVudC1taWIgZXhhbXBsZXMvZXhhbXBsZSIgXAorCS0td2l0aC1taWItbW9kdWxlcz0iYWdlbnR4IGRpc21hbi9ldmVudC1taWIgd2luRXh0RExMIGV4YW1wbGVzL2V4YW1wbGUiXAogICAgICAgICAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIFwKIAogICAgIE5vdGU6IHdoaWxlIHRoZSBOZXQtU05NUCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaG9zdCByZXNvdXJjZXMgTUlCIGlzIG5vdApkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KaW5kZXggMjIxMGI2ZS4uNDlkOTEzZSAxMDA2NDQKLS0tIGEvVE9ETworKysgYi9UT0RPCkBAIC0yNCw4ICsyNCw4IEBACiAgIFR1bm5lbAogICBXV1ctTUlCCiAgIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyOgotICAgIEhvc3RSZXMJKGNvbnZlcnQgdG8gdXNlIEhBTCBhbmQgY2xlYW4gdXApCi0gICAgVUNEYXZpcwkoY29udmVydCB0byB1c2UgSEFMIGFuZCB1cGRhdGUgc3RydWN0dXJlcykKKyAgICBIb3N0UmVzCShjb252ZXJ0IHRvIHVzZSBIQUwgYW5kIGNsZWFuIHVwIC0gaW4gcHJvZ3Jlc3MpCisgICAgVUNEYXZpcwkoY29udmVydCB0byB1c2UgSEFMIGFuZCB1cGRhdGUgc3RydWN0dXJlcyAtIGluIHByb2dyZXNzKQogCiBFeHRlbnNpYmlsaXR5OgogICBBZ2VudFgJKHJlYXNvbmFibHkgc3RhYmxlIG5vdykKZGlmZiAtLWdpdCBhL2FjY29uZmlnLmggYi9hY2NvbmZpZy5oCmluZGV4IDBlZDA2YjkuLjEyZjg1YzYgMTAwNjQ0Ci0tLSBhL2FjY29uZmlnLmgKKysrIGIvYWNjb25maWcuaApAQCAtMSw1ICsxLDkgQEAKIC8qIAogICogbmV0LXNubXAgY29uZmlndXJhdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIE5PVEU6IERPIE5PVCBFRElUIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4gYXMgeW91ciBjaGFuZ2VzCisgKiAgICAgICB3aWxsIGJlIG92ZXJ3cml0dGVuLiBUaGlzIGNvbnRlbnQgaXMgaW4gYWNjb25maWcuaCBhbmQgbWVyZ2VkCisgKiAgICAgICBpbnRvIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4gYnkgYXV0b2hlYWRlci4KICAqLwogLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwpAQCAtMjMsMjk0ICsyNywxNSBAQAogICovCiAjaWZuZGVmIE5FVFNOTVBfTk9fQVVUT0NPTkZfREVGSU5JVElPTlMKIAotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50MzJfdCAqLwotI3VuZGVmIEhBVkVfSU5UMzJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1aW50MzJfdCAqLwotI3VuZGVmIEhBVkVfVUlOVDMyX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdV9pbnQzMl90ICovCi0jdW5kZWYgSEFWRV9VX0lOVDMyX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50NjRfdCAqLwotI3VuZGVmIEhBVkVfSU5UNjRfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1aW50NjRfdCAqLwotI3VuZGVmIEhBVkVfVUlOVDY0X1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdV9pbnQ2NF90ICovCi0jdW5kZWYgSEFWRV9VX0lOVDY0X1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50cHRyX3QgKi8KLSN1bmRlZiBIQVZFX0lOVFBUUl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVpbnRwdHJfdCAqLwotI3VuZGVmIEhBVkVfVUlOVFBUUl9UCi0KLS8qIGdvdCBzb2NrbGVuX3Q/ICovCi0jdW5kZWYgSEFWRV9TT0NLTEVOX1QKLQotLyogZ290IGluX2FkZHJfdD8gKi8KLSN1bmRlZiBIQVZFX0lOX0FERFJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZ2V0ZGV2cygpICovCi0jdW5kZWYgSEFWRV9HRVRERVZTCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBkZXZzdGF0X2dldGRldnMoKSAqLwotI3VuZGVmIEhBVkVfREVWU1RBVF9HRVRERVZTCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSA8bmV0aW5ldC9pbl9wY2IuaD4gKi8KLSN1bmRlZiBIQVZFX05FVElORVRfSU5fUENCX0gKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIDxzeXMvZGlza2xhYmVsLmg+ICovCi0jdW5kZWYgSEFWRV9TWVNfRElTS0xBQkVMX0gKLQotLyogZGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgKHByb2Nlc3NvcikgZGVmaW5lcyBfX0ZVTkNUSU9OX18gZm9yIHlvdSAqLwotI3VuZGVmIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQKLQotLyogb24gYWl4LCBpZiB5b3UgaGF2ZSBwZXJmc3RhdCAqLwotI3VuZGVmIEhBVkVfUEVSRlNUQVQKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGxpYmRiLCBsaWJubSBvciBsaWJycG0sIHJlc3BlY3RpdmVseSAqLwotI3VuZGVmIEhBVkVfTElCREIKLSN1bmRlZiBIQVZFX0xJQk5NCi0jdW5kZWYgSEFWRV9MSUJSUE0KLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHBrZ2luZm8gKi8KLSN1bmRlZiBIQVZFX1BLR0lORk8KLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGdldGhvc3RieW5hbWUgKi8KLSN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUUKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwZXJsX2V2YWxfcHYoKSBmdW5jdGlvbiAqLwotI3VuZGVmIEhBVkVfUEVSTF9FVkFMX1BWX0xDCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0aGUgUGVybF9ldmFsX3B2KCkgZnVuY3Rpb24gKi8KLSN1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVl9VQwotCi0vKiBwcmludGluZyBzeXN0ZW0gKi8KLSN1bmRlZiBIQVZFX0xQU1RBVAotI3VuZGVmIExQU1RBVF9QQVRICi0jdW5kZWYgSEFWRV9QUklOVENBUAotLyogVXNlIGRtYWxsb2MgdG8gZG8gbWFsbG9jIGRlYnVnZ2luZz8gKi8KLSN1bmRlZiBIQVZFX0RNQUxMT0NfSAotCi0vKiBsb2NhdGlvbiBvZiBVTklYIGtlcm5lbCAqLwotI2RlZmluZSBLRVJORUxfTE9DICIvdm11bml4IgotCi0vKiBsb2NhdGlvbiBvZiBtb3VudCB0YWJsZSBsaXN0ICovCi0jZGVmaW5lIEVUQ19NTlRUQUIgIi9ldGMvbW50dGFiIgotCi0vKiBsb2NhdGlvbiBvZiBzd2FwIGRldmljZSAob2sgaWYgbm90IGZvdW5kKSAqLwotI3VuZGVmIERNRU1fTE9DCi0KLS8qIENvbW1hbmQgdG8gZ2VuZXJhdGUgcHMgb3V0cHV0LCB0aGUgZmluYWwgY29sdW1uIG11c3QgYmUgdGhlIHByb2Nlc3MKLSAgIG5hbWUgd2l0aE9VVCBhcmd1bWVudHMgKi8KLSNkZWZpbmUgUFNDTUQgIi9iaW4vcHMiCi0KLS8qIFdoZXJlIGlzIHRoZSB1bmFtZSBjb21tYW5kICovCi0jZGVmaW5lIFVOQU1FUFJPRyAiL2Jpbi91bmFtZSIKLQotLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgbGludXggYW5kIC9wcm9jL25ldC9kZXYgaGFzIHRoZSBjb21wcmVzc2VkCi0gICBmaWVsZCwgd2hpY2ggZXhpc3RzIGluIGxpbnV4IGtlcm5lbHMgMi4yIGFuZCBncmVhdGVyLiAqLwotI3VuZGVmIFBST0NfTkVUX0RFVl9IQVNfQ09NUFJFU1NFRAotCi0vKiBkZWZpbmUgcnRlbnRyeSB0byBvcnRlbnRyeSBvbiBTWVNWIG1hY2hpbmVzIChhbHBoYXMpICovCi0jdW5kZWYgUlRFTlRSWQotCi0vKiBVc2UgQlNEIDQuNCByb3V0aW5nIHRhYmxlIGVudHJpZXM/ICovCi0jdW5kZWYgUlRFTlRSWV80XzQKLQotLyogRG9lcyBzdHJ1Y3Qgc2lnYWN0aW9uIGhhdmUgYSBzYV9zaWdhY3Rpb24gZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NJR0FDVElPTl9IQVNfU0FfU0lHQUNUSU9OCi0KLS8qIERvZXMgc3RydWN0IHRtIGhhdmUgYSB0bV9nbXRvZmYgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1RNX0hBU19UTV9HTVRPRkZGCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9sZW4gZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9MRU4KLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHIgaGF2ZSBhIHNhX2ZhbWlseTIgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIKLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBoYXZlIGEgc3NfZmFtaWx5IGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19TU19GQU1JTFkKLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBoYXZlIGEgX19zc19mYW1pbHkgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX19fU1NfRkFNSUxZCi0KLS8qIERvZXMgc3RydWN0IGluNl9hZGRyIGhhdmUgYSBzNl91bi5zYTZfbGFkZCBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfSU42X0FERFJfSEFTX1M2X1VOX1NBNl9MQUREUgotCi0vKiBydGVudHJ5IHN0cnVjdHVyZSB0ZXN0cyAqLwotI3VuZGVmIFJURU5UUllfUlRfTkVYVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVU5JVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VU0UKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfUkVGQ05UCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0hBU0gKLQotLyogaWZuZXQgc3RydWN0dXJlIHRlc3RzICovCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9TUEVFRAotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfVFlQRQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSU1DQVNUUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSVFEUk9QUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfTlNFQwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTk9QUk9UTwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT01DQVNUUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09CWVRFUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSUJZVEVTCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9BRERSTElTVAotCi0vKiB0Y3BzdGF0LnRjcHNfcmN2bWVtZHJvcCAqLwotI3VuZGVmIFNUUlVDVF9UQ1BTVEFUX0hBU19UQ1BTX1JDVk1FTURST1AKLQotLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLSN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19ESVNDQVJECi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUCi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUQkNBU1QKLQotLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLSN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19GVUxMU09DSwotCi0vKiBhcnBoZC5hdF9uZXh0ICovCi0jdW5kZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUCi0KLS8qIGlmYWRkci5pZmFfbmV4dCAqLwotI3VuZGVmIFNUUlVDVF9JRkFERFJfSEFTX0lGQV9ORVhUCi0KLS8qIGlmbmV0LmlmX210dSAqLwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTVRVCi0KLS8qIHN3ZGV2dC5zd19uYmxrc2VuYWJsZWQgKi8KLSN1bmRlZiBTVFJVQ1RfU1dERVZUX0hBU19TV19OQkxLU0VOQUJMRUQKLQotLyogbmxpc3Qubl92YWx1ZSAqLwotI3VuZGVmIFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRQotCi0vKiBubGlzdDY0Lm5fdmFsdWUgKi8KLSN1bmRlZiBTVFJVQ1RfTkxJU1Q2NF9IQVNfTl9WQUxVRQotCi0vKiBpcHN0YXQgc3RydWN0dXJlIHRlc3RzICovCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGT1JXQVJECi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGUkFHCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0RFTElWRVJFRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHRFJPUFBFRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHVElNRU9VVAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19MT0NBTE9VVAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1BST1RPCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUk9VVEUKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0RST1BQRUQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0ZSQUdNRU5UUwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19SRUFTU0VNQkxFRAotCi0vKiB2ZnNzdGF0LmZfZnJzaXplICovCi0jdW5kZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFCi0KLS8qIHZmc3N0YXQuZl9maWxlcyAqLwotI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTCi0KLS8qIHN0YXRmcyBpbm9kZSBzdHJ1Y3R1cmUgdGVzdHMqLwotI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRklMRVMKLSN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZGUkVFCi0jdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GQVZBSUwKLQotLyogZGVzX2tzX3N0cnVjdC53ZWFrX2tleSAqLwotI3VuZGVmIFNUUlVDVF9ERVNfS1NfU1RSVUNUX0hBU19XRUFLX0tFWQotCi0vKiBpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUwgZGVmaW5lZCAqLwotI3VuZGVmIElGTkVUX05FRURTX0tFUk5FTAotCi0vKiBzeXNjdGwgd29ya3MgdG8gZ2V0IGJvb3R0aW1lLCBldGMuLi4gKi8KLSN1bmRlZiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMCi0KLS8qIGRlZmluZSBpZiBTSU9DR0lGQUREUiBleGlzdHMgaW4gc3lzL2lvY3RsLmggKi8KLSN1bmRlZiBTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIKLQotLyogRGVmaW5lIGlmIHN0YXRmcyB0YWtlcyAyIGFyZ3MgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaGFzCi0gICB0eXBlIHN0cnVjdCBmc19kYXRhLiBbVWx0cml4XSAqLwotI3VuZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKLQotLyogRGVmaW5lIGlmIHRoZSBUQ1AgdGltZXIgY29uc3RhbnRzIGluIDxuZXRpbmV0L3RjcF90aW1lci5oPgotICAgZGVwZW5kIG9uIHRoZSBpbnRlZ2VyIHZhcmlhYmxlIGBoeicuICBbRnJlZUJTRCA0LnhdICovCi0jdW5kZWYgVENQVFZfTkVFRFNfSFoKLQotLyogTm90LXRvLWJlLWNvbXBpbGVkIG1hY3JvcyBmb3IgdXNlIGJ5IGNvbmZpZ3VyZSBvbmx5ICovCi0jZGVmaW5lIGNvbmZpZ19yZXF1aXJlKHgpCi0jZGVmaW5lIGNvbmZpZ19leGNsdWRlKHgpCi0jZGVmaW5lIGNvbmZpZ19hcmNoX3JlcXVpcmUoeCx5KQotI2RlZmluZSBjb25maWdfcGFyc2VfZG90X2NvbmYodyx4LHkseikKLSNkZWZpbmUgY29uZmlnX2FkZF9taWIoeCkKLSNkZWZpbmUgY29uZmlnX2JlbG9uZ3NfaW4oeCkKLSNkZWZpbmUgY29uZmlnX2Vycm9yKHgpCi0jZGVmaW5lIGNvbmZpZ193YXJuaW5nKHgpCi0gIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChtaW5ndzMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1IgIjsiCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnOycKLSNlbHNlCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1IgIjoiCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnOicKLSNlbmRpZgotCiAvKiBkZWZpbml0aW9ucyBhZGRlZCBieSBjb25maWd1cmUgb24tdGhlLWZseSAqLwogQFRPUEAKIEBCT1RUT01ACiAKIC8qIGVuZCBvZiBkZWZpbml0aW9ucyBhZGRlZCBieSBjb25maWd1cmUgb24tdGhlLWZseSAqLwogCi0jaWZuZGVmIEhBVkVfU1RSQ0hSCi0jaWZkZWYgSEFWRV9JTkRFWAotIyBkZWZpbmUgc3RyY2hyIGluZGV4Ci0jIGRlZmluZSBzdHJyY2hyIHJpbmRleAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0lOREVYCi0jaWZkZWYgSEFWRV9TVFJDSFIKLSNpZmRlZiBtaW5ndzMyCi0jIGRlZmluZSBpbmRleChhLGIpIHN0cmNocihhLGIpCi0jIGRlZmluZSByaW5kZXgoYSxiKSBzdHJyY2hyKGEsYikKLSNlbHNlCi0jIGRlZmluZSBpbmRleCBzdHJjaHIKLSMgZGVmaW5lIHJpbmRleCBzdHJyY2hyCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1DUFkKLSNpZmRlZiBIQVZFX0JDT1BZCi0jIGRlZmluZSBtZW1jcHkoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1tb3ZlKGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtY21wIGJjbXAKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1NT1ZFCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIG1lbW1vdmUgbWVtY3B5Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfQkNPUFkKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgYmNvcHkocywgZCwgbikgbWVtY3B5ICgoZCksIChzKSwgKG4pKQotIyBkZWZpbmUgYnplcm8ocCxuKSBtZW1zZXQoKHApLCgwKSwobikpCi0jIGRlZmluZSBiY21wIG1lbWNtcAotI2VuZGlmCi0jZW5kaWYKLQogLyogSWYgeW91IGhhdmUgb3BlbnNzbCAwLjkuNyBvciBhYm92ZSwgeW91IGxpa2VseSBoYXZlIEFFUyBzdXBwb3J0LiAqLwogI3VuZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9PUEVOU1NMX0FFU19IKSAmJiBkZWZpbmVkKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUKQorI2lmIChkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9PUEVOU1NMX0FFU19IKSAmJiBkZWZpbmVkKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUKSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiAjZGVmaW5lIEhBVkVfQUVTIDEKICNlbmRpZgogCkBAIC0zNjQsMjcgKzg5LDYgQEAKIC8qIGRlZmF1bHQgbGlzdCBvZiBtaWJzIHRvIGxvYWQgKi8KICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQlMgIklQLU1JQjpJRi1NSUI6VENQLU1JQjpVRFAtTUlCOlNOTVB2Mi1NSUI6UkZDMTIxMy1NSUIiCiAKLS8qIGRlZmF1bHQgbG9jYXRpb24gdG8gbG9vayBmb3IgbWlicyB0byBsb2FkIHVzaW5nIHRoZSBhYm92ZSB0b2tlbnMKLSAgIGFuZC9vciB0aG9zZSBpbiB0aGUgTUlCUyBlbnZyaW9ubWVudCB2YXJpYWJsZSovCi0jdW5kZWYgTkVUU05NUF9ERUZBVUxUX01JQkRJUlMKLQotLyogZGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZCwgc3BlY2lmaWVkIGJ5IHBhdGguICovCi0jdW5kZWYgTkVUU05NUF9ERUZBVUxUX01JQkZJTEVTCi0KLS8qIHNob3VsZCB3ZSBjb21waWxlIHRvIHVzZSBzcGVjaWFsIG9wYXF1ZSB0eXBlczogZmxvYXQsIGRvdWJsZSwKLSAgIGNvdW50ZXI2NCwgaTY0LCB1aTY0LCB1bmlvbj8gKi8KLSN1bmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKLQotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgYm90aCBhdXRoZW50aWNhdGlvbiBhbmQKLSAgIHByaXZhY3kgc3VwcG9ydC4gKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotCi0vKiBkZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTUQ1IGNvZGUgLi4uKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKLQotLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGNvZGVTMTEgbGlicmFyeSAuLi4qLwotI3VuZGVmIE5FVFNOTVBfVVNFX1BLQ1MxMQotCiAvKiBkZWJ1Z2dpbmcgc3R1ZmYgKi8KIC8qIGlmIGRlZmluZWQsIHdlIG9wdGltaXplIHRoZSBjb2RlIHRvIGV4Y2x1ZGUgYWxsIGRlYnVnZ2luZyBjYWxscy4gKi8KICN1bmRlZiBORVRTTk1QX05PX0RFQlVHR0lORwpAQCAtNDAwLDkgKzEwNCw2IEBACiAgICBsaW5lczogUEVSU0lTVEVOVF9ESVJFQ1RPUlkvTkFNRS5wZXJzaXN0ZW50LmNvbmYgKi8KICNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSAiL3Zhci9zbm1wIgogCi0vKiBQRVJTSVNURU5UX01BU0s6IHRoZSB1bWFzayBwZXJtaXNzaW9ucyB0byBzZXQgdXAgcGVyc2lzdGVudCBmaWxlcyB3aXRoICovCi0jZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLIDA3NwotCiAvKiBBR0VOVF9ESVJFQ1RPUllfTU9ERTogdGhlIG1vZGUgdGhlIGFnZW50cyBzaG91bGQgdXNlIHRvIGNyZWF0ZQogICAgZGlyZWN0b3JpZXMgd2l0aC4gU2luY2UgdGhlIGRhdGEgc3RvcmVkIGhlcmUgaXMgcHJvYmFibHkgc2Vuc2l0aXZlLCBpdAogICAgcHJvYmFibHkgc2hvdWxkIGJlIHJlYWQtb25seSBieSByb290L2FkbWluaXN0cmF0b3IuICovCkBAIC00NDcsMTkgKzE0OCw2IEBACiAvKiBVc2UgbGlid3JhcCB0byBoYW5kbGUgYWxsb3cvZGVueSBob3N0cz8gKi8KICN1bmRlZiBORVRTTk1QX1VTRV9MSUJXUkFQCiAKLS8qIHRlc3RpbmcgY29kZSBzZWN0aW9ucy4gKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgCi0KLS8qIElmIHlvdSBkb24ndCBoYXZlIHJvb3QgYWNjZXNzIGRvbid0IGV4aXQgdXBvbiBrbWVtIGVycm9ycyAqLwotI3VuZGVmIE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MKLQotLyogSWYgd2UgZG9uJ3Qgd2FudCB0byB1c2Uga21lbS4gKi8KLSN1bmRlZiBORVRTTk1QX05PX0tNRU1fVVNBR0UKLQotLyogSWYgeW91IGRvbid0IHdhbnQgdGhlIGFnZW50IHRvIHJlcG9ydCBvbiB2YXJpYWJsZXMgaXQgZG9lc24ndCBoYXZlIGRhdGEgZm9yICovCi0jdW5kZWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKLQotCiAvKiBNaWItMiB0cmVlIEluZm8gKi8KIC8qIFRoZXNlIGFyZSB0aGUgc3lzdGVtIGluZm9ybWF0aW9uIHZhcmlhYmxlcy4gKi8KIApAQCAtNTYzLDcgKzI1MSw3IEBACiAjaWZkZWYgV0lOMzIKICNkZWZpbmUgTkVUU05NUF9PU1RZUEUgTkVUU05NUF9XSU4zMklECiAjZW5kaWYKLSNpZiBkZWZpbmVkKGFpeDMpIHx8IGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXgzKSB8fCBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAjZGVmaW5lIE5FVFNOTVBfT1NUWVBFIE5FVFNOTVBfQUlYSUQKICNlbmRpZgogI2lmIGRlZmluZWQoZGFyd2luKSAmJiAoZGFyd2luID49IDgpCkBAIC02NTQsOSArMzQyLDYgQEAKIC8qIGludGVybmFsIGRlZmluZSAqLwogI2RlZmluZSBORVRTTk1QX0xBU1RGSUVMRCAtMQogCi0vKiBjb25maWd1cmUgb3B0aW9ucyBzcGVjaWZpZWQgKi8KLSNkZWZpbmUgTkVUU05NUF9DT05GSUdVUkVfT1BUSU9OUyAiIgotCiAvKiAgUGx1Z2dhYmxlIHRyYW5zcG9ydHMuICAqLwogCiAvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBVRFAvSVAgdHJhbnNwb3J0IGRvbWFpbiBpcwpAQCAtNjkxLDEzICszNzYsMzIgQEAKICAgICBhdmFpbGFibGUuICAqLwogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCiAKLS8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFVEUC9JUCB0cmFuc3BvcnQgZG9tYWluIGlzCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBUTFMgdHJhbnNwb3J0IGRvbWFpbiBpcwogICAgIGF2YWlsYWJsZS4gICAqLwotI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU19ET01BSU4KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNCQVNFX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBBbGlhcyB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFNTSCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBEVExTL1VEUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTL1RDUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgogCiAvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHN0ZGluL291dCB0cmFuc3BvcnQgZG9tYWluIGlzIGF2YWlsYWJsZS4gICAqLwogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NURF9ET01BSU4KIAorLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgSVB2NEJhc2UgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9JUFY0QkFTRV9ET01BSU4KKwogLyogZGVmaW5lIHRoaXMgaWYgdGhlIFVTTSBzZWN1cml0eSBtb2R1bGUgaXMgYXZhaWxhYmxlICovCiAjdW5kZWYgTkVUU05NUF9TRUNNT0RfVVNNCiAKQEAgLTcwNywxOCArNDExLDkgQEAKIC8qIGRlZmluZSB0aGlzIGlmIHRoZSBsb2NhbCBzZWN1cml0eSBtb2R1bGUgaXMgYXZhaWxhYmxlICovCiAjdW5kZWYgTkVUU05NUF9TRUNNT0RfTE9DQUxTTQogCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCByZWVudHJhbnQvdGhyZWFkZWQgY29kZSAoaW5jb21wbGV0ZSkqLwotI3VuZGVmIE5FVFNOTVBfUkVFTlRSQU5UCi0KIC8qIGRlZmluZSBpZiBjb25maWd1cmVkIGFzIGEgIm1pbmktYWdlbnQiICovCiAjdW5kZWYgTkVUU05NUF9NSU5JX0FHRU5UCiAKLS8qIGRlZmluZSBpZiB5b3UgYXJlIGVtYmVkZGluZyBwZXJsIGluIHRoZSBtYWluIGFnZW50ICovCi0jdW5kZWYgTkVUU05NUF9FTUJFRERFRF9QRVJMCi0KLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBidWlsZCBNRkQgbW9kdWxlIHJld3JpdGVzKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMKLQogLyogdGhpcyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5ldC1zbm1wIG1pYiB0cmVlLiAgSXQgc2hvdWxkbid0IGJlCiAgICBjaGFuZ2VkLCBhcyB0aGUgcGxhY2VzIGl0IGlzIHVzZWQgYXJlIGV4cGVjdGVkIHRvIGJlIGNvbnN0YW50CiAgICB2YWx1ZXMgb3IgYXJlIGRpcmVjdGx5IHRpZWQgdG8gdGhlIFVDRC1TTk1QLU1JQi4gKi8KQEAgLTc4NiwzMyArNDgxLDEyIEBACiAjICBkZWZpbmUgTkVUU05NUF9JTVBPUlQgZXh0ZXJuCiAjZW5kaWYKIAotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2Ci0KLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byByZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdCBieSBkZWZhdWx0ICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWAotCi0vKiBkZWZpbmUgaWYgYWdlbnR4IHRyYW5zcG9ydCBpcyB0byB1c2UgZG9tYWluIHNvY2tldHMgb25seSAqLwotI3VuZGVmIE5FVFNOTVBfQUdFTlRYX0RPTV9TT0NLX09OTFkKLQotLyogZGVmaW5lIGlmIHlvdSBkbyBub3Qgd2FudCBzbm1wdHJhcGQgdG8gcmVnaXN0ZXIgYXMgYW4gQWdlbnRYIHN1YmFnZW50ICovCi0jdW5kZWYgTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgKLQotLyogZGVmaW5lIHRoaXMgaWYgd2UncmUgdXNpbmcgdGhlIG5ldyBNSVQgY3J5cHRvIEFQSSAqLwotI3VuZGVmIE5FVFNOTVBfVVNFX0tFUkJFUk9TX01JVAotCi0vKiBkZWZpbmUgdGhpcyBpZiB5b3UncmUgdXNpbmcgSGVpbWRhbCBLZXJiZXJvcyAqLwotI3VuZGVmIE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwKLQogLyogY29tbWVudCB0aGUgbmV4dCBsaW5lIGlmIHlvdSBhcmUgY29tcGlsaW5nIHdpdGggbGlic25tcC5oIAogICAgYW5kIGFyZSBub3QgdXNpbmcgdGhlIFVDLURhdmlzIFNOTVAgbGlicmFyeS4gKi8KICNkZWZpbmUgVUNEX1NOTVBfTElCUkFSWSAxCiAKLS8qIGFkZCBpbiByZWNlbnQgQ01VIGxpYnJhcnkgZXh0ZW5zaW9ucyAobm90IGNvbXBsZXRlKSAqLwotI3VuZGVmIENNVV9DT01QQVRJQkxFCi0KIC8qIGZpbmFsIGNvbmNsdXNpb24gb24gbmxpc3QgdXNhZ2UgKi8KLSNpZiBkZWZpbmVkKEhBVkVfTkxJU1QpICYmIGRlZmluZWQoU1RSVUNUX05MSVNUX0hBU19OX1ZBTFVFKSAmJiAhZGVmaW5lZChORVRTTk1QX0RPTlRfVVNFX05MSVNUKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCisjaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUpICYmICFkZWZpbmVkKE5FVFNOTVBfRE9OVF9VU0VfTkxJU1QpICYmIGRlZmluZWQoSEFWRV9LTUVNKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCiAjZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9OTElTVAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FjaW5jbHVkZS5tNCBiL2FjaW5jbHVkZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxMjk4MC4uMDAwMDAwMAotLS0gYS9hY2luY2x1ZGUubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotZG5sIEBzeW5vcHNpcyBBQ19QUk9NUFRfVVNFUl9OT19ERUZJTkUoVkFSSUFCTEVOQU1FLFFVRVNUSU9OLFtERUZBVUxUXSkKLWRubAotZG5sIEFza3MgYSBRVUVTVElPTiBhbmQgcHV0cyB0aGUgcmVzdWx0cyBpbiBWQVJJQUJMRU5BTUUgd2l0aCBhbiBvcHRpb25hbAotZG5sIERFRkFVTFQgdmFsdWUgaWYgdGhlIHVzZXIgbWVyZWx5IGhpdHMgcmV0dXJuLgotZG5sCi1kbmwgQHZlcnNpb24gMS4xNQotZG5sIEBhdXRob3IgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci1kbmwKLUFDX0RFRlVOKFtBQ19QUk9NUFRfVVNFUl9OT19ERUZJTkVdLAotZG5sIGNoYW5nZXF1b3RlKDw8LCA+PikgZG5sCi1kbmwgPDwKLVsKLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWVjaG8gJEVDSE9fTiAiJDIgKCQzKTogJEVDSE9fQyIKLXJlYWQgdG1waW5wdXQKLWlmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJDMiICE9ICIiOyB0aGVuCi0gIHRtcGlucHV0PSIkMyIKLWZpCi1ldmFsICQxPVwiJHRtcGlucHV0XCIKLWVsc2UKLXRtcGlucHV0PSIkMyIKLWV2YWwgJDE9XCIkdG1waW5wdXRcIgotZmkKLV0KLWRubCA+PgotZG5sIGNoYW5nZXF1b3RlKFssIF0pCi0pIGRubCBkb25lIEFDX1BST01QVF9VU0VSCi0KLWRubCBAc3lub3BzaXMgQUNfUFJPTVBUX1VTRVIoVkFSSUFCTEVOQU1FLFFVRVNUSU9OLFtERUZBVUxUXSxRVU9URUQpCi1kbmwKLWRubCBBc2tzIGEgUVVFU1RJT04gYW5kIHB1dHMgdGhlIHJlc3VsdHMgaW4gVkFSSUFCTEVOQU1FIHdpdGggYW4gb3B0aW9uYWwKLWRubCBERUZBVUxUIHZhbHVlIGlmIHRoZSB1c2VyIG1lcmVseSBoaXRzIHJldHVybi4gIEFsc28gY2FsbHMgCi1kbmwgQUNfREVGSU5FX1VOUVVPVEVEKCkgb24gdGhlIFZBUklBQkxFTkFNRSBmb3IgVkFSSUFCTEVOQU1FcyB0aGF0IHNob3VsZAotZG5sIGJlIGVudGVyZWQgaW50byB0aGUgY29uZmlnLmggZmlsZSBhcyB3ZWxsLiAgSWYgUVVPVEVEIGlzICJxdW90ZWQiIHRoZW4KLWRubCB0aGUgcmVzdWx0IHdpbGwgYmUgZGVmaW5lZCB3aXRoaW4gcXVvdGVzLgotZG5sCi1kbmwgQHZlcnNpb24gMS4xNQotZG5sIEBhdXRob3IgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci1kbmwKLUFDX0RFRlVOKFtBQ19QUk9NUFRfVVNFUl0sCi1bCi1NU0dfQ0hFQ0s9YGVjaG8gIiQyIiB8IHRhaWwgLTFgCi1BQ19DQUNIRV9DSEVDSygkTVNHX0NIRUNLLCBhY19jdl91c2VyX3Byb21wdF8kMSwKLVtlY2hvICIiID4mQUNfRkRfTVNHCi1BQ19QUk9NUFRfVVNFUl9OT19ERUZJTkUoJDEsWyQyXSwkMykKLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfJDE9XCQkMQotZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mQUNfRkRfTVNHCi1dKQotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0XyQxIiAhPSAibm9uZSI7IHRoZW4KLSAgaWYgdGVzdCAieCQ0IiA9ICJ4cXVvdGVkIiAtbyAieCQ0IiA9ICJ4UVVPVEVEIjsgdGhlbgotICAgIEFDX0RFRklORV9VTlFVT1RFRCgkMSwiJGFjX2N2X3VzZXJfcHJvbXB0XyQxIikKLSAgZWxzZQotICAgIEFDX0RFRklORV9VTlFVT1RFRCgkMSwkYWNfY3ZfdXNlcl9wcm9tcHRfJDEpCi0gIGZpCi1maQotXSkgZG5sCi0KLWRubCBAc3lub3BzaXMgQUNfQ0hFQ0tfU1RSVUNUX0ZPUihJTkNMVURFUyxTVFJVQ1QsTUVNQkVSLERFRklORSxbbm9dKQotZG5sCi1kbmwgQ2hlY2tzIFNUUlVDVCBmb3IgTUVNQkVSIGFuZCBkZWZpbmVzIERFRklORSBpZiBmb3VuZC4KLWRubAotZG5sIEB2ZXJzaW9uIDEuMTUKLWRubCBAYXV0aG9yIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotZG5sCi1BQ19ERUZVTihbQUNfQ0hFQ0tfU1RSVUNUX0ZPUl0sWwotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiJDIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIiQzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotY2hhbmdlcXVvdGUoLCApZG5sCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLWNoYW5nZXF1b3RlKFssIF0pZG5sCi0KLUFDX01TR19DSEVDS0lORyhbZm9yICQyLiQzXSkKLUFDX0NBQ0hFX1ZBTCgkYWNfc2FmZV9hbGwsCi1bCi1pZiB0ZXN0ICJ4JDQiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngkNCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iJDQiCi1maQotQUNfVFJZX0NPTVBJTEUoWwotJDEKLV0sWwotc3RydWN0ICQyIHRlc3RpdDsgCi10ZXN0aXQuJDMgJGRlZmluZWl0OwotXSwgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIiwgZXZhbCAiJHthY19zYWZlX2FsbH09bm8iICkKLV0pCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoeWVzKQotICBBQ19ERUZJTkVfVU5RVU9URUQoJGFjX3VjX2RlZmluZSkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi0KLV0pCi0KLWRubCBBQ19DSEVDS19JRk5FVF9GT1IoU1VCU1RSVUNULFtub10pCi1BQ19ERUZVTihbQUNfQ0hFQ0tfSUZORVRfRk9SXSxbCi1kbmwgY2hlY2sgZm9yICQxIGluIHN0cnVjdCBpZm5ldAotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotXSwgaWZuZXQsICQxLCAkMikKLV0pCi0KLWRubAotZG5sIEFkZCBhIHNlYXJjaCBwYXRoIHRvIHRoZSBMSUJTIGFuZCBDRkxBR1MgdmFyaWFibGVzCi1kbmwKLUFDX0RFRlVOKFtBQ19BRERfU0VBUkNIX1BBVEhdLFsKLSAgaWYgdGVzdCAieCQxIiAhPSB4IC1hIC1kICQxOyB0aGVuCi0gICAgIGlmIHRlc3QgLWQgJDEvbGliOyB0aGVuCi0gICAgICAgTERGTEFHUz0iLUwkMS9saWIgJExERkxBR1MiCi0gICAgIGZpCi0gICAgIGlmIHRlc3QgLWQgJDEvaW5jbHVkZTsgdGhlbgotCUNQUEZMQUdTPSItSSQxL2luY2x1ZGUgJENQUEZMQUdTIgotICAgICBmaQotICBmaQotXSkKLQotZG5sCi1kbmwgU3RvcmUgaW5mb3JtYXRpb24gZm9yIGRpc3BsYXlpbmcgbGF0ZXIuCi1kbmwKLUFDX0RFRlVOKFtBQ19NU0dfQ0FDSEVfSU5JVF0sWwotICBybSAtZiBjb25maWd1cmUtc3VtbWFyeQotXSkKLQotQUNfREVGVU4oW0FDX01TR19DQUNIRV9BRERdLFsKLSAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgotICAkMQotRU9GCi1dKQotCi1BQ19ERUZVTihbQUNfTVNHX0NBQ0hFX0RJU1BMQVldLFsKLSAgZWNobyAiIgotICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIGVjaG8gIiAgICAgICAgICAgIE5ldC1TTk1QIGNvbmZpZ3VyYXRpb24gc3VtbWFyeToiCi0gIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSAgZWNobyAiIgotICBjYXQgY29uZmlndXJlLXN1bW1hcnkKLSAgZWNobyAiIgotICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIGVjaG8gIiIKLV0pCi0KLUFDX0RFRlVOKFtBQ19NU0dfTU9EVUxFX0RCR10sCi1bCi0gIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KLSAgICBlY2hvICQxICQyICQzICQ0Ci0gIGZpCi1dCi0pCmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNAppbmRleCA0NDFjNzUyLi5jZDgwYzc0IDEwMDY0NAotLS0gYS9hY2xvY2FsLm00CisrKyBiL2FjbG9jYWwubTQKQEAgLTEsNyArMSw3IEBACi0jIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xMC4xIC0qLSBBdXRvY29uZiAtKi0KKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjExIC0qLSBBdXRvY29uZiAtKi0KIAogIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCi0jIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpAQCAtMTEsNjY0MCArMTEsMTQgQEAKICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQogIyBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKLSMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCi0KLSMgc2VyaWFsIDUyIEFDX1BST0dfTElCVE9PTAotCi0KLSMgQUNfUFJPVklERV9JRkVMU0UoTUFDUk8tTkFNRSwgSUYtUFJPVklERUQsIElGLU5PVC1QUk9WSURFRCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCBieSBBdXRvY29uZiwgZGVmaW5lIGl0IGhlcmUuCi1tNF9pZmRlZihbQUNfUFJPVklERV9JRkVMU0VdLAotICAgICAgICAgW10sCi0gICAgICAgICBbbTRfZGVmaW5lKFtBQ19QUk9WSURFX0lGRUxTRV0sCi0JICAgICAgICAgW200X2lmZGVmKFtBQ19QUk9WSURFXyQxXSwKLQkJICAgICAgICAgICBbJDJdLCBbJDNdKV0pXSkKLQotCi0jIEFDX1BST0dfTElCVE9PTAotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLAotW0FDX1JFUVVJUkUoW19BQ19QUk9HX0xJQlRPT0xdKWRubAotZG5sIElmIEFDX1BST0dfQ1hYIGhhcyBhbHJlYWR5IGJlZW4gZXhwYW5kZWQsIHJ1biBBQ19MSUJUT09MX0NYWAotZG5sIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UsIGhvb2sgaXQgaW4gYXQgdGhlIGVuZCBvZiBBQ19QUk9HX0NYWC4KLSAgQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLSAgICBbQUNfTElCVE9PTF9DWFhdLAotICAgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtBQ19MSUJUT09MX0NYWAotICBdKV0pCi1kbmwgQW5kIGEgc2ltaWxhciBzZXR1cCBmb3IgRm9ydHJhbiA3NyBzdXBwb3J0Ci0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCi0gICAgW0FDX0xJQlRPT0xfRjc3XSwKLSAgICBbZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbQUNfTElCVE9PTF9GNzcKLV0pXSkKLQotZG5sIFF1b3RlIEFdW01fUFJPR19HQ0ogc28gdGhhdCBhY2xvY2FsIGRvZXNuJ3QgYnJpbmcgaXQgaW4gbmVlZGxlc3NseS4KLWRubCBJZiBlaXRoZXIgQUNfUFJPR19HQ0ogb3IgQV1bTV9QUk9HX0dDSiBoYXZlIGFscmVhZHkgYmVlbiBleHBhbmRlZCwgcnVuCi1kbmwgQUNfTElCVE9PTF9HQ0ogaW1tZWRpYXRlbHksIG90aGVyd2lzZSwgaG9vayBpdCBpbiBhdCB0aGUgZW5kIG9mIGJvdGguCi0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCi0gICAgW0FDX0xJQlRPT0xfR0NKXSwKLSAgICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAotICAgICAgW0FDX0xJQlRPT0xfR0NKXSwKLSAgICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfQUNfUFJPR19HQ0pdLAotCVtBQ19MSUJUT09MX0dDSl0sCi0gICAgICBbaWZkZWYoW0FDX1BST0dfR0NKXSwKLQkgICAgIFtkZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtBQ19MSUJUT09MX0dDSl0pXSkKLSAgICAgICBpZmRlZihbQV1bTV9QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0FDX0xJQlRPT0xfR0NKXSldKQotICAgICAgIGlmZGVmKFtMVF9BQ19QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtMVF9BQ19QUk9HX0dDSl0sCi0JCWRlZm4oW0xUX0FDX1BST0dfR0NKXSlbQUNfTElCVE9PTF9HQ0pdKV0pXSldKQotXSldKSMgQUNfUFJPR19MSUJUT09MCi0KLQotIyBfQUNfUFJPR19MSUJUT09MCi0jIC0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSwKLVtBQ19SRVFVSVJFKFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX0NYWF0pZG5sCi1BQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9GNzddKWRubAotQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfR0NKXSlkbmwKLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi0KLSMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLUFDX1NVQlNUKExJQlRPT0wpZG5sCi0KLSMgUHJldmVudCBtdWx0aXBsZSBleHBhbnNpb24KLWRlZmluZShbQUNfUFJPR19MSUJUT09MXSwgW10pCi1dKSMgX0FDX1BST0dfTElCVE9PTAotCi0KLSMgQUNfTElCVE9PTF9TRVRVUAotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0sCi1bQUNfUFJFUkVRKDIuNTApZG5sCi1BQ19SRVFVSVJFKFtBQ19FTkFCTEVfU0hBUkVEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VOQUJMRV9TVEFUSUNdKWRubAotQUNfUkVRVUlSRShbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19OTV0pZG5sCi0KLUFDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCi1BQ19SRVFVSVJFKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pZG5sCi0jIEF1dG9jb25mIDIuMTMncyBBQ19PQkpFWFQgYW5kIEFDX0VYRUVYVCBtYWNyb3Mgb25seSB3b3JrcyBmb3IgQyBjb21waWxlcnMhCi1BQ19SRVFVSVJFKFtBQ19PQkpFWFRdKWRubAotQUNfUkVRVUlSRShbQUNfRVhFRVhUXSlkbmwKLWRubAotQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLUFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQotQUNfTElCVE9PTF9PQkpESVIKLQotQUNfUkVRVUlSRShbX0xUX0FDX1NZU19DT01QSUxFUl0pZG5sCi1fTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0gICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi0gIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICAgIENPTExFQ1RfTkFNRVM9Ci0gICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9J3NlZCAtZSAxcy9eWC8vJwotW3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGAkXFxcXF1cKS9cXFwxL2cnXQotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLVtkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnXQotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCi1ub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKLQotIyBDb25zdGFudHM6Ci1ybT0icm0gLWYiCi0KLSMgR2xvYmFsIHZhcmlhYmxlczoKLWRlZmF1bHRfb2ZpbGU9bGlidG9vbAotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLQotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi0jIHdoaWNoIG5lZWRzICcubGliJykuCi1saWJleHQ9YQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi1vZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCi13aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgotCi1BQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCi1BQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQotQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCi0KLW9sZF9DQz0iJENDIgotb2xkX0NGTEFHUz0iJENGTEFHUyIKLQotIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci10ZXN0IC16ICIkQVMiICYmIEFTPWFzCi10ZXN0IC16ICIkQ0MiICYmIENDPWNjCi10ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgotdGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKLXRlc3QgLXogIiROTSIgJiYgTk09bm0KLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLXRlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKLXRlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06Ci10ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKLXRlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCi0KLSMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgotb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCi1vbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQotCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gIG9wZW5ic2QqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCi0gICAgOzsKLSAgKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotICAgIDs7Ci0gIGVzYWMKLSAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi1maQotCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAotY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLWZpbGVfbWFnaWMqKQotICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCi0gICAgQUNfUEFUSF9NQUdJQwotICBmaQotICA7OwotZXNhYwotCi1fTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUwotCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfTElCVE9PTF9ETE9QRU5dLCBlbmFibGVfZGxvcGVuPXllcywgZW5hYmxlX2Rsb3Blbj1ubykKLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1lbmFibGVfd2luMzJfZGxsPXllcywgZW5hYmxlX3dpbjMyX2RsbD1ubykKLQotQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotCVthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotQUNfQVJHX1dJVEgoW3BpY10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKLQlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAotICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKLSAgICBbcGljX21vZGU9ZGVmYXVsdF0pCi10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKLQotIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLXRhZ25hbWU9Ci1BQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLV9MVF9BQ19UQUdDT05GSUcKLV0pIyBBQ19MSUJUT09MX1NFVFVQCi0KLQotIyBfTFRfQUNfU1lTX0NPTVBJTEVSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotXSkjIF9MVF9BQ19TWVNfQ09NUElMRVIKLQotCi0jIF9MVF9DQ19CQVNFTkFNRShDQykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1BQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSwKLVtmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLV0pCi0KLQotIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAotIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KLUFDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotCi0KLSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKLSMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KLUFDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gLXIgY29uZnRlc3QqCi1dKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBzb21lIHRoaW5ncyBvbiBkYXJ3aW4KLUFDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWwotICBjYXNlICRob3N0X29zIGluCi0gICAgcmhhcHNvZHkqIHwgZGFyd2luKikKLSAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKLSAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZ10sW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2RdLAotICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KLSAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KLSAgICMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQotICAgIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCi0gICAjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCi0gICAjIGxpbmsgZmxhZ3MuCi0gICBlY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYwotICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLSAgICAgLWR5bmFtaWNsaWIgJHt3bH0tc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jCi0gICBpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliOyB0aGVuCi0gICAgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0gICAgIHJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKLSAgIGZpCi0gICBybSBjb25mdGVzdC5jCi0gICAgICBmaV0pCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKLSAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAotICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubwotICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KLSAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKLSAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKLSAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzXSwKLSAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSAgICBdKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyM11dKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbjEuKikKLSAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbiopCi0gICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCi0gICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAotICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/Ci0gICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCi0gICAxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCi0gICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKLSAgIDEwLltbMDEyXV0qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAxMC4qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0gICAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJwotICAgIGZpCi0gICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJwotICAgIGVsc2UKLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9In4kTk1FRElUIC1zIFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSBcJHtsaWJ9IgotICAgIGZpCi0gICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiI7IHRoZW4KLSAgICAgIF9sdF9kc3ltdXRpbD0ifiREU1lNVVRJTCBcJGxpYiB8fCA6IgotICAgIGVsc2UKLSAgICAgIF9sdF9kc3ltdXRpbD0KLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLV0pCi0KLSMgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKLSMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAotIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCi0jIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KLSMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKLSMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCi1BQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmldLFtdKQotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi1dKSMgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotCi0KLSMgX0xUX0FDX1NIRUxMX0lOSVQoQVJHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdLAotW2lmZGVmKFtBQ19ESVZFUlNJT05fTk9USUNFXSwKLQkgICAgIFtBQ19ESVZFUlRfUFVTSChBQ19ESVZFUlNJT05fTk9USUNFKV0sCi0JIFtBQ19ESVZFUlRfUFVTSChOT1RJQ0UpXSkKLSQxCi1BQ19ESVZFUlRfUE9QCi1dKSMgX0xUX0FDX1NIRUxMX0lOSVQKLQotCi0jIF9MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNICi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaAotIyB3aWxsIGZpbmQgYW4gZWNobyBjb21tYW5kIHdoaWNoIGRvZXNuJ3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotQUNfREVGVU4oW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwKLVtfTFRfQUNfU0hFTExfSU5JVChbCi0jIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCi1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotCi1jYXNlIFgkRUNITyBpbgotWCotLWZhbGxiYWNrLWVjaG8pCi0gICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCi0gIEVDSE89YGVjaG8gIiRFQ0hPIiB8IHNlZCAncyxcXFxcXFskXVxcWyRdMCwnWyRdMCcsJ2AKLSAgOzsKLWVzYWMKLQotZWNobz0ke0VDSE8tZWNob30KLWlmIHRlc3QgIlhbJF0xIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgotICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KLSAgc2hpZnQKLWVsaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgotICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCi0gIDoKLWVsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnIDsgdGhlbgotICAjIFlpcHBlZSwgJGVjaG8gd29ya3MhCi0gIDoKLWVsc2UKLSAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgotICBleGVjICRTSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KLWZpCi0KLWlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KLSAgc2hpZnQKLSAgY2F0IDw8RU9GCi1bJF0qCi1FT0YKLSAgZXhpdCAwCi1maQotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1pZiB0ZXN0IC16ICIkRUNITyI7IHRoZW4KLWlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgotIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0Ci0gIGZvciBjbWQgaW4gJ3NlZCA1MHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAycSAiWyRdMCInICdlY2hvIHRlc3QnOyBkbwotICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAya0IsIDFrQiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCi0gICAgaWYgKGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGApIDI+L2Rldi9udWxsICYmCi0gICAgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCAmJgotICAgICAgICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi1maQotCi1pZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICA6Ci1lbHNlCi0gICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQotICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCi0gICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCi0gICMKLSAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCi0gICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gICAgICBlY2hvPSIkZGlyL2VjaG8iCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0KLSAgaWYgdGVzdCAiWCRlY2hvIiA9IFhlY2hvOyB0aGVuCi0gICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCi0gICAgaWYgdGVzdCAiWGAocHJpbnQgLXIgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KLSAgICAgIGVjaG89J3ByaW50IC1yJwotICAgIGVsaWYgKHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQpICYmCi0JIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KLSAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgotICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0gICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0gICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKLSAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KLSAgICBlbHNlCi0gICAgICAjIFRyeSB1c2luZyBwcmludGYuCi0gICAgICBlY2hvPSdwcmludGYgJXNcbicKLSAgICAgIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotCSBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCSMgQ29vbCwgcHJpbnRmIHdvcmtzCi0JOgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgotCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKLQlleHBvcnQgQ09ORklHX1NIRUxMCi0JU0hFTEw9IiRDT05GSUdfU0hFTEwiCi0JZXhwb3J0IFNIRUxMCi0JZWNobz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCWVjaG89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCi0gICAgICBlbHNlCi0JIyBtYXliZSB3aXRoIGEgc21hbGxlciBzdHJpbmcuLi4KLQlwcmV2PToKLQotCWZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDUwcSAiWyRdMCInOyBkbwotCSAgaWYgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIikgMj4vZGV2L251bGwKLQkgIHRoZW4KLQkgICAgYnJlYWsKLQkgIGZpCi0JICBwcmV2PSIkY21kIgotCWRvbmUKLQotCWlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiWyRdMCInOyB0aGVuCi0JICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAotCSAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKLQkgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICJbJF0wIiAkezErIlskXUAifQotCWVsc2UKLQkgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCi0JICBlY2hvPWVjaG8KLQlmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotZmkKLWZpCi0KLSMgQ29weSBlY2hvIGFuZCBxdW90ZSB0aGUgY29weSBzdWl0YWJseSBmb3IgcGFzc2luZyB0byBsaWJ0b29sIGZyb20KLSMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgotRUNITz0kZWNobwotaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KLSAgIEVDSE89IiRDT05GSUdfU0hFTEwgXFxcJFxbJF0wIC0tZmFsbGJhY2stZWNobyIKLWZpCi0KLUFDX1NVQlNUKEVDSE8pCi1dKV0pIyBfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotCi0KLSMgX0xUX0FDX0xPQ0sKLSMgLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTE9DS10sCi1bQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotCVthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCi0jIGxpYnRvb2wgc3VwcG9ydC4KLWNhc2UgJGhvc3QgaW4KLWlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqRUxGLTMyKikKLSAgICAgIEhQVVhfSUE2NF9NT0RFPSIzMiIKLSAgICAgIDs7Ci0gICAgKkVMRi02NCopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iNjQiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdbI11saW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgotICAgICAgOzsKLSAgICBlc2FjCi0gICBlbHNlCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC0zMiIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW4zMiIKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLTY0IgotICAgICAgOzsKLSAgICBlc2FjCi0gICBmaQotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLXg4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAotczM5MCotKmxpbnV4KnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqMzItYml0KikKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKLSAgICAgICAgICA7OwotICAgICAgICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTB4LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKLSAgICAgICAgICA7OwotICAgICAgICBzMzkwKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotKi0qLXNjbzMuMnY1KikKLSAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCi0gICAgW0FDX0xBTkdfUFVTSChDKQotICAgICBBQ19UUllfTElOSyhbXSxbXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKLSAgICAgQUNfTEFOR19QT1BdKQotICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgotICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgotICBmaQotICA7Owotc3BhcmMqLSpzb2xhcmlzKikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqNjQtYml0KikKLSAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCi0gICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7Ci0gICAgICAqKQotICAgICAgICBpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgIExEPSIke0xELWxkfSAtNjQiCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotQUNfUFJPVklERV9JRkVMU0UoW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKLVsqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiopCi0gIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCi0gIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKLSAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKLSAgOzsKLSAgXSkKLWVzYWMKLQotbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0KLV0pIyBfTFRfQUNfTE9DSwotCi0KLSMgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCi0jCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pCi1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAotICBbJDI9bm8KLSAgaWZlbHNlKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICQyPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKLV0pCi0KLWlmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCi0gICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKLWVsc2UKLSAgICBpZmVsc2UoWyQ2XSwgLCA6LCBbJDZdKQotZmkKLV0pIyBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTgotCi0KLSMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKLSAgWyQyPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJDMiCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgICQyPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICAkMj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotXSkKLQotaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KLSAgICBpZmVsc2UoWyQ0XSwgLCA6LCBbJDRdKQotZWxzZQotICAgIGlmZWxzZShbJDVdLCAsIDosIFskNV0pCi1maQotXSkjIEFDX0xJQlRPT0xfTElOS0VSX09QVElPTgotCi0KLSMgQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sCi1bIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi1BQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAotICBpPTAKLSAgdGVzdHN0cmluZz0iQUJDRCIKLQotICBjYXNlICRidWlsZF9vcyBpbgotICBtc2Rvc2RqZ3BwKikKLSAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCi0gICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgotICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCi0gICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAotICAgIDs7Ci0KLSAgZ251KikKLSAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKLSAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgotICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCi0gICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQotICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KLSAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKLSAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYW1pZ2FvcyopCi0gICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgotICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQotICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcwotICAgIGZpCi0gICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCi0gICAgOzsKLQotICBpbnRlcml4KikKLSAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4Ci0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWyAJXV0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICBlbHNlCi0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQotICAgICAgd2hpbGUgKHRlc3QgIlgiYCRTSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICA9ICJYWCR0ZXN0c3RyaW5nIikgPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKLQkgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgIHRlc3RzdHJpbmc9Ci0gICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uIG1hc3NpdmUKLSAgICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCi0gICAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi1dKQotaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm9uZSkKLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLQotCi0jIF9MVF9BQ19DSEVDS19ETEZDTgotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAotW0FDX0NIRUNLX0hFQURFUlMoZGxmY24uaClkbmwKLV0pIyBfTFRfQUNfQ0hFQ0tfRExGQ04KLQotCi0jIF9MVF9BQ19UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAotW0FDX1JFUVVJUkUoW19MVF9BQ19DSEVDS19ETEZDTl0pZG5sCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIFskNF0KLWVsc2UKLSAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1bI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLQotI2lmIEhBVkVfRExGQ05fSAotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBSVExEX0dMT0JBTAotIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAotI2Vsc2UKLSMgIGlmZGVmIERMX0dMT0JBTAotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAotIyAgZWxzZQotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQotICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLwotI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCi0jICBpZmRlZiBSVExEX0xBWlkKLSMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQotIyAgZWxzZQotIyAgICBpZmRlZiBETF9MQVpZCi0jICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKLSMgICAgZWxzZQotIyAgICAgIGlmZGVmIFJUTERfTk9XCi0jICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmZGVmIERMX05PVwotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOwotI2VuZGlmCi0KLXZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KLWludCBtYWluICgpCi17Ci0gIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKLQotICBpZiAoc2VsZikKLSAgICB7Ci0gICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKLSAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7Ci0gICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KLSAgICB9Ci0gIGVsc2UKLSAgICBwdXRzIChkbGVycm9yICgpKTsKLQotICAgIGV4aXQgKHN0YXR1cyk7Ci19XQotRU9GCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCi0gICAgbHRfc3RhdHVzPSQ/Ci0gICAgY2FzZSB4JGx0X3N0YXR1cyBpbgotICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKLSAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKLSAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OwotICAgIGVzYWMKLSAgZWxzZSA6Ci0gICAgIyBjb21waWxhdGlvbiBmYWlsZWQKLSAgICAkMwotICBmaQotZmkKLXJtIC1mciBjb25mdGVzdCoKLV0pIyBfTFRfQUNfVFJZX0RMT1BFTl9TRUxGCi0KLQotIyBBQ19MSUJUT09MX0RMT1BFTl9TRUxGCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKWRubAotaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCi0gIGVuYWJsZV9kbG9wZW49dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KLWVsc2UKLSAgbHRfY3ZfZGxvcGVuPW5vCi0gIGx0X2N2X2Rsb3Blbl9saWJzPQotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICA7OwotCi0gIG1pbmd3KiB8IHB3MzIqKQotICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OwotCi0gIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OwotCi0gIGRhcndpbiopCi0gICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0Ci0gICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWwotICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICBdKQotICAgOzsKLQotICAqKQotICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKLQkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCi0gICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAotCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCi0JW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCi0JICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCi0JICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCi0JICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKLQkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKLQkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAotCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQotCSAgICAgIF0pCi0JICAgIF0pCi0JICBdKQotCV0pCi0gICAgICBdKQotICAgIDs7Ci0gIGVzYWMKLQotICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCi0gICAgZW5hYmxlX2Rsb3Blbj15ZXMKLSAgZWxzZQotICAgIGVuYWJsZV9kbG9wZW49bm8KLSAgZmkKLQotICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KLSAgZGxvcGVuKQotICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKLQotICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgotCi0gICAgc2F2ZV9MSUJTPSIkTElCUyIKLSAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCi0KLSAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAotCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKLQkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCi0gICAgXSkKLQotICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgotICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi0gICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAotICAgIAkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAotCSAgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRigKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQotICAgICAgXSkKLSAgICBmaQotCi0gICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0gICAgTElCUz0iJHNhdmVfTElCUyIKLSAgICA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7Ci0gIGVzYWMKLQotICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKLSAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7Ci0gIGVzYWMKLWZpCi1dKSMgQUNfTElCVE9PTF9ETE9QRU5fU0VMRgotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0NDX0NfTyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlcgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAotQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAotICBbX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKLSAgW19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubwotICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCi0gICBta2RpciBjb25mdGVzdAotICAgY2QgY29uZnRlc3QKLSAgIG1rZGlyIG91dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi1dKQotXSkjIEFDX0xJQlRPT0xfUFJPR19DQ19DX08KLQotCi0jIEFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfTE9DS10pZG5sCi0KLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCi0gIGhhcmRfbGlua3M9eWVzCi0gICRybSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCi0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTCi0KLQotIyBBQ19MSUJUT09MX09CSkRJUgotIyAtLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAotW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCi1ta2RpciAubGlicyAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAubGliczsgdGhlbgotICBsdF9jdl9vYmpkaXI9LmxpYnMKLWVsc2UKLSAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KLSAgbHRfY3Zfb2JqZGlyPV9saWJzCi1maQotcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQotb2JqZGlyPSRsdF9jdl9vYmpkaXIKLV0pIyBBQ19MSUJUT09MX09CSkRJUgotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sCi1bQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9Ci1pZiB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8IFwKLSAgIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8IFwKLSAgIHRlc3QgIlgkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCi1maQotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQotCi1pZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgPSByZWxpbms7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi1dKSMgQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgKLQotCi0jIEFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAotW3N0cmlwbGliPQotb2xkX3N0cmlwbGliPQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQotaWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8IGdyZXAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgotICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgotICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKLSAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLWVsc2UKLSMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAotICBjYXNlICRob3N0X29zIGluCi0gICBkYXJ3aW4qKQotICAgICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCi0gICAgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgotICAgICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCi0gICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotICAgICAgIGVsc2UKLSAgQUNfTVNHX1JFU1VMVChbbm9dKQotZmkKLSAgICAgICA7OwotICAgKikKLSAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgIDs7Ci0gIGVzYWMKLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfTElCX1NUUklQCi0KLQotIyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCi1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLW00X2lmKCQxLFtdLFsKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7Ci0gICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKLSAgZXNhYwotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICBpZiBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgotICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKLSAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKLSAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKLSAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgZWxzZQotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICBmaQotICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAotICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KLSAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9Ci0gIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCi0gIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KLSAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCi0gICAgZWxzZQotICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCi0JbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCi0gICAgZmkKLSAgZG9uZQotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyB8IGF3ayAnCi1CRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7Ci0gIGx0X2Zvbz0iIjsKLSAgbHRfY291bnQ9MDsKLSAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKLSAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7Ci0gICAgICBpZiAoJGx0X2kgPT0gIi4uIikgewotICAgICAgICBsdF9jb3VudCsrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKLSAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBsdF9jb3VudC0tOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQotICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KLX0nYAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCi1lbHNlCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLWZpXSkKLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4W1s0LTldXSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVtbNDVdXSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotICBtNF9pZihbJDFdLCBbXSxbCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKSAKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCi0gIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLAotW2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyJdKQotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sCi1bbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyJdKQotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSCi0KLQotIyBfTFRfQUNfVEFHQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19BUkdfV0lUSChbdGFnc10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtdGFnc0A8OkA9VEFHU0A6PkBdLAotICAgICAgICBbaW5jbHVkZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIEA8OkBhdXRvbWF0aWNAOj5AXSldLAotICAgIFt0YWduYW1lcz0iJHdpdGh2YWwiXSkKLQotaWYgdGVzdCAtZiAiJGx0bWFpbiIgJiYgdGVzdCAtbiAiJHRhZ25hbWVzIjsgdGhlbgotICBpZiB0ZXN0ICEgLWYgIiR7b2ZpbGV9IjsgdGhlbgotICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBleGlzdF0pCi0gIGZpCi0KLSAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgotICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgICAgQUNfTVNHX1dBUk4oW291dHB1dCBmaWxlIGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0XSkKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfV0FSTihbdXNpbmcgYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBgJG9maWxlJ10pCi0gICAgZmkKLSAgZmkKLSAgaWYgdGVzdCAteiAiJExUQ0ZMQUdTIjsgdGhlbgotICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDRkxBR1M9J2AiCi0gIGZpCi0KLSAgIyBFeHRyYWN0IGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBpbiAkb2ZpbGUuCi0gICMgTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGUgZW50aXJlIGxpc3QgaXMgb24gb25lIGxpbmUuCi0gIGF2YWlsYWJsZV90YWdzPWBncmVwICJeYXZhaWxhYmxlX3RhZ3M9IiAiJHtvZmlsZX0iIHwgJFNFRCAtZSAncy9hdmFpbGFibGVfdGFncz1cKC4qJFwpL1wxLycgLWUgJ3MvXCIvL2cnYAotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICBmb3IgdGFnbmFtZSBpbiAkdGFnbmFtZXM7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCi0gICAgY2FzZSBgJGVjaG8gIlgkdGFnbmFtZSIgfCAkWHNlZCAtZSAnczpbWy1fQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAsL11dOjpnJ2AgaW4KLSAgICAiIikgOzsKLSAgICAqKSAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCi0JOzsKLSAgICBlc2FjCi0KLSAgICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQiIDwgIiR7b2ZpbGV9IiA+IC9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgIEFDX01TR19FUlJPUihbdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzXSkKLSAgICBmaQotCi0gICAgIyBVcGRhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgaWYgdGVzdCAtbiAiJHRhZ25hbWUiOyB0aGVuCi0gICAgICBlY2hvIGFwcGVuZGluZyBjb25maWd1cmF0aW9uIHRhZyBcIiR0YWduYW1lXCIgdG8gJG9maWxlCi0KLSAgICAgIGNhc2UgJHRhZ25hbWUgaW4KLSAgICAgIENYWCkKLQlpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotCSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLQkgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCi0JICBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRwotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIEY3NykKLQlpZiB0ZXN0IC1uICIkRjc3IiAmJiB0ZXN0ICJYJEY3NyIgIT0gIlhubyI7IHRoZW4KLQkgIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgR0NKKQotCWlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgotCSAgQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUcKLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBSQykKLQlBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCi0JOzsKLQotICAgICAgKikKLQlBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBBcHBlbmQgdGhlIG5ldyB0YWcgbmFtZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIiA7IHRoZW4KLSAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgJHRhZ25hbWUiCi0gICAgZmkKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotCi0gICMgTm93IHN1YnN0aXR1dGUgdGhlIHVwZGF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgaWYgZXZhbCAic2VkIC1lICdzL15hdmFpbGFibGVfdGFncz0uKlwkL2F2YWlsYWJsZV90YWdzPVwiJGF2YWlsYWJsZV90YWdzXCIvJyBcIiRvZmlsZVwiID4gXCIke29maWxlfVRcIiI7IHRoZW4KLSAgICBtdiAiJHtvZmlsZX1UIiAiJG9maWxlIgotICAgIGNobW9kICt4ICIkb2ZpbGUiCi0gIGVsc2UKLSAgICBybSAtZiAiJHtvZmlsZX1UIgotICAgIEFDX01TR19FUlJPUihbdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuXSkKLSAgZmkKLWZpCi1dKSMgX0xUX0FDX1RBR0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9ETE9QRU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIGNoZWNrcyBmb3IgZGxvcGVuIHN1cHBvcnQKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCi0gW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSkKLV0pIyBBQ19MSUJUT09MX0RMT1BFTgotCi0KLSMgQUNfTElCVE9PTF9XSU4zMl9ETEwKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIERMTHMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1bQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJUT09MX1NFVFVQXSkKLV0pIyBBQ19MSUJUT09MX1dJTjMyX0RMTAotCi0KLSMgQUNfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnCi0jIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KLUFDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKLVtkZWZpbmUoW0FDX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIGlmZWxzZSgkMSwgbm8sIG5vLCB5ZXMpKWRubAotQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAotCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zaGFyZWQ9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX3NoYXJlZD1dQUNfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9TSEFSRUQKLQotCi0jIEFDX0RJU0FCTEVfU0hBUkVECi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCBzaGFyZWQgZmxhZyB0byAtLWRpc2FibGUtc2hhcmVkCi1BQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9TSEFSRUQobm8pCi1dKSMgQUNfRElTQUJMRV9TSEFSRUQKLQotCi0jIEFDX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCi1bZGVmaW5lKFtBQ19FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW3N0YXRpY10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKLQlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OwotICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0gICAgKikKLSAgICAgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zdGF0aWM9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX3N0YXRpYz1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9TVEFUSUMKLQotCi0jIEFDX0RJU0FCTEVfU1RBVElDCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCBzdGF0aWMgZmxhZyB0byAtLWRpc2FibGUtc3RhdGljCi1BQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9TVEFUSUMobm8pCi1dKSMgQUNfRElTQUJMRV9TVEFUSUMKLQotCi0jIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCi1bZGVmaW5lKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKLSAgICBbb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwKLQotCi0jIEFDX0RJU0FCTEVfRkFTVF9JTlNUQUxMCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCB0byAtLWRpc2FibGUtZmFzdC1pbnN0YWxsCi1BQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9GQVNUX0lOU1RBTEwobm8pCi1dKSMgQUNfRElTQUJMRV9GQVNUX0lOU1RBTEwKLQotCi0jIEFDX0xJQlRPT0xfUElDTU9ERShbTU9ERV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnCi0jIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1waWNfbW9kZT1pZmVsc2UoJCMsMSwkMSxkZWZhdWx0KQotXSkjIEFDX0xJQlRPT0xfUElDTU9ERQotCi0KLSMgQUNfUFJPR19FR1JFUAotIyAtLS0tLS0tLS0tLS0tCi0jIFRoaXMgaXMgcHJlZGVmaW5lZCBzdGFydGluZyB3aXRoIEF1dG9jb25mIDIuNTQsIHNvIHRoaXMgY29uZGl0aW9uYWwKLSMgZGVmaW5pdGlvbiBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlIHJlcXVpcmUgQXV0b2NvbmYgMi41NCBvciBsYXRlci4KLW00X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sIFtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlZ3JlcF0sIFthY19jdl9wcm9nX2VncmVwXSwKLSAgIFtpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKLSAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCi0gICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKLSAgICBmaV0pCi0gRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKLSBBQ19TVUJTVChbRUdSRVBdKQotXSldKQotCi0KLSMgQUNfUEFUSF9UT09MX1BSRUZJWAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQotQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAotW2Nhc2UgJE1BR0lDX0NNRCBpbgotW1tcXC8qXSB8ICA/OltcXC9dKl0pCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSopCi0gIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWRubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgotZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAotZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KLSAgYWNfZHVtbXk9ImlmZWxzZShbJDJdLCAsICRQQVRILCBbJDJdKSIKLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgotICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgotCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi0JImZpbGVfbWFnaWMgIiopCi0JICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAotCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCi0qKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCi0qKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKLSoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAotKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCi0qKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91Ci0qKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCi0qKiogYnVnLWxpYnRvb2xAZ251Lm9yZwotCi1FT0YKLQkgIGZpIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCi0gIDs7Ci1lc2FjXSkKLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLV0pIyBBQ19QQVRIX1RPT0xfUFJFRklYCi0KLQotIyBBQ19QQVRIX01BR0lDCi0jIC0tLS0tLS0tLS0tLS0KLSMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKLUFDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSwKLVtBQ19QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLWlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIEFDX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLSAgZWxzZQotICAgIE1BR0lDX0NNRD06Ci0gIGZpCi1maQotXSkjIEFDX1BBVEhfTUFHSUMKLQotCi0jIEFDX1BST0dfTEQKLSMgLS0tLS0tLS0tLQotIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCi1BQ19ERUZVTihbQUNfUFJPR19MRF0sCi1bQUNfQVJHX1dJVEgoW2dudS1sZF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKLQlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKLSAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKLSAgICBbd2l0aF9nbnVfbGQ9bm9dKQotQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAotYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7Ci0gICopCi0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwotICBlc2FjCi0gIGNhc2UgJGFjX3Byb2cgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCi0gICAgICBkb25lCi0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKLSAgICAgIDs7Ci0gICIiKQotICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgotICAgIGFjX3Byb2c9bGQKLSAgICA7OwotICAqKQotICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICB3aXRoX2dudV9sZD11bmtub3duCi0gICAgOzsKLSAgZXNhYwotZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCi1lbHNlCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQotZmkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAotW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpXSkKLUxEPSIkbHRfY3ZfcGF0aF9MRCIKLWlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkTEQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCi1maQotdGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKLUFDX1BST0dfTERfR05VCi1dKSMgQUNfUFJPR19MRAotCi0KLSMgQUNfUFJPR19MRF9HTlUKLSMgLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKLVsjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCi1jYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIGx0X2N2X3Byb2dfZ251X2xkPXllcwotICA7OwotKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KLSAgOzsKLWVzYWNdKQotd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCi1dKSMgQUNfUFJPR19MRF9HTlUKLQotCi0jIEFDX1BST0dfTERfUkVMT0FEX0ZMQUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKLSMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgotQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAotW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKLSAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCi0gIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKLXJlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZwotY2FzZSAkcmVsb2FkX2ZsYWcgaW4KLSIiIHwgIiAiKikgOzsKLSopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OwotZXNhYwotcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotY2FzZSAkaG9zdF9vcyBpbgotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZWxzZQotICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGZpCi0gICAgOzsKLWVzYWMKLV0pIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHCi0KLQotIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCi0jICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCi1BQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAotW0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAotbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCi1bbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCi1sdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJwotIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0Ci0jIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCi0jICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KLSMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgotIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgotIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgotIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAotIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQotIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4W1s0LTldXSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWJlb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1ic2RpW1s0NV1dKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KLSAgOzsKLQotY3lnd2luKikKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIDs7Ci0KLW1pbmd3KiB8IHB3MzIqKQotICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5Ci0gICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAotICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgotICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIGZpCi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGkqODYgKQotICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KLSAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCi0gICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgZmkKLSAgOzsKLQotZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotaHB1eDEwLjIwKiB8IGhwdXgxMSopCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBQQS1SSVNDIFswLTldLlswLTldJ10KLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKLSAgICA7OwotICAqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRMRCBpbgotICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OwotICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgZXNhYwotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotbmV3b3M2KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbwotICA7OwotCi1udG8tcW54KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotICA7OwotCi1vcGVuYnNkKikKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1yZG9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc29sYXJpcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gIG1vdG9yb2xhKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKLSAgICA7OwotICBuY3IpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBzZXF1ZW50KQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKLSAgICA7OwotICBzbmkpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KLSAgICA7OwotICBzaWVtZW5zKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgcGMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotZXNhYwotXSkKLWZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi10ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLV0pIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAotCi0KLSMgQUNfUFJPR19OTQotIyAtLS0tLS0tLS0tCi0jIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKLUFDX0RFRlVOKFtBQ19QUk9HX05NXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC1jb21wYXRpYmxlIG5tXSwgbHRfY3ZfcGF0aF9OTSwKLVtpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCi0gICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotICBsdF9jdl9wYXRoX05NPSIkTk0iCi1lbHNlCi0gIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0gICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKLSAgZmkKLSAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCi0gICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbwotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCi0gICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCi0JIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKLQkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCi0JIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCi0JY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0JKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQotCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKLQkgIGJyZWFrCi0JICA7OwotCSopCi0JICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkgICovZGV2L251bGwqKQotCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhawotCSAgICA7OwotCSAgKikKLQkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKLQkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIGRvbmUKLSAgdGVzdCAteiAiJGx0X2N2X3BhdGhfTk0iICYmIGx0X2N2X3BhdGhfTk09bm0KLWZpXSkKLU5NPSIkbHRfY3ZfcGF0aF9OTSIKLV0pIyBBQ19QUk9HX05NCi0KLQotIyBBQ19DSEVDS19MSUJNCi0jIC0tLS0tLS0tLS0tLS0KLSMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQotQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUxJQk09Ci1jYXNlICRob3N0IGluCi0qLSotYmVvcyogfCAqLSotY3lnd2luKiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQotICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKLSAgOzsKLSotbmNyLXN5c3Y0LjMqKQotICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKLSAgOzsKLSopCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCi0gIDs7Ci1lc2FjCi1dKSMgQUNfQ0hFQ0tfTElCTQotCi0KLSMgQUNfTElCTFRETF9DT05WRU5JRU5DRShbRElSRUNUT1JZXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc2V0cyBMSUJMVERMIHRvIHRoZSBsaW5rIGZsYWdzIGZvciB0aGUgbGlibHRkbCBjb252ZW5pZW5jZSBsaWJyYXJ5IGFuZAotIyBMVERMSU5DTCB0byB0aGUgaW5jbHVkZSBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaGVhZGVyIGFuZCBhZGRzCi0jIC0tZW5hYmxlLWx0ZGwtY29udmVuaWVuY2UgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKLSMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKLSMgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuICBMSUJMVERMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aAotIyAnJHt0b3BfYnVpbGRkaXJ9LycgYW5kIExURExJTkNMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnJHt0b3Bfc3JjZGlyfS8nCi0jIChub3RlIHRoZSBzaW5nbGUgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMgbm90IGZsYXQgYW5kIHlvdSdyZSBub3QKLSMgdXNpbmcgYXV0b21ha2UsIGRlZmluZSB0b3BfYnVpbGRkaXIgYW5kIHRvcF9zcmNkaXIgYXBwcm9wcmlhdGVseSBpbgotIyB0aGUgTWFrZWZpbGVzLgotQUNfREVGVU4oW0FDX0xJQkxURExfQ09OVkVOSUVOQ0VdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLSAgY2FzZSAkZW5hYmxlX2x0ZGxfY29udmVuaWVuY2UgaW4KLSAgbm8pIEFDX01TR19FUlJPUihbdGhpcyBwYWNrYWdlIG5lZWRzIGEgY29udmVuaWVuY2UgbGlibHRkbF0pIDs7Ci0gICIiKSBlbmFibGVfbHRkbF9jb252ZW5pZW5jZT15ZXMKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1jb252ZW5pZW5jZSIgOzsKLSAgZXNhYwotICBMSUJMVERMPScke3RvcF9idWlsZGRpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pL2xpYmx0ZGxjLmxhCi0gIExURExJTkNMPSctSSR7dG9wX3NyY2Rpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pCi0gICMgRm9yIGJhY2t3YXJkcyBub24tZ2V0dGV4dCBjb25zaXN0ZW50IGNvbXBhdGliaWxpdHkuLi4KLSAgSU5DTFRETD0iJExURExJTkNMIgotXSkjIEFDX0xJQkxURExfQ09OVkVOSUVOQ0UKLQotCi0jIEFDX0xJQkxURExfSU5TVEFMTEFCTEUoW0RJUkVDVE9SWV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldHMgTElCTFRETCB0byB0aGUgbGluayBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaW5zdGFsbGFibGUgbGlicmFyeSBhbmQKLSMgTFRETElOQ0wgdG8gdGhlIGluY2x1ZGUgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGhlYWRlciBhbmQgYWRkcwotIyAtLWVuYWJsZS1sdGRsLWluc3RhbGwgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKLSMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKLSMgYW5kIGFuIGluc3RhbGxlZCBsaWJsdGRsIGlzIG5vdCBmb3VuZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuCi0jIExJQkxUREwgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICcke3RvcF9idWlsZGRpcn0vJyMgYW5kIExURExJTkNMIHdpdGgKLSMgJyR7dG9wX3NyY2Rpcn0vJyAobm90ZSB0aGUgc2luZ2xlIHF1b3RlcyEpLiAgSWYgeW91ciBwYWNrYWdlIGlzIG5vdAotIyBmbGF0IGFuZCB5b3UncmUgbm90IHVzaW5nIGF1dG9tYWtlLCBkZWZpbmUgdG9wX2J1aWxkZGlyIGFuZCB0b3Bfc3JjZGlyCi0jIGFwcHJvcHJpYXRlbHkgaW4gdGhlIE1ha2VmaWxlcy4KLSMgSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYWNybyBtYXkgaGF2ZSB0byBiZSBjYWxsZWQgYWZ0ZXIgQUNfUFJPR19MSUJUT09MLgotQUNfREVGVU4oW0FDX0xJQkxURExfSU5TVEFMTEFCTEVdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLSAgQUNfQ0hFQ0tfTElCKGx0ZGwsIGx0X2RsaW5pdCwKLSAgW3Rlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgIT0geHllcyAmJiBlbmFibGVfbHRkbF9pbnN0YWxsPW5vXSwKLSAgW2lmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgPSB4bm87IHRoZW4KLSAgICAgQUNfTVNHX1dBUk4oW2xpYmx0ZGwgbm90IGluc3RhbGxlZCwgYnV0IGluc3RhbGxhdGlvbiBkaXNhYmxlZF0pCi0gICBlbHNlCi0gICAgIGVuYWJsZV9sdGRsX2luc3RhbGw9eWVzCi0gICBmaQotICBdKQotICBpZiB0ZXN0IHgiJGVuYWJsZV9sdGRsX2luc3RhbGwiID0geCJ5ZXMiOyB0aGVuCi0gICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGwiCi0gICAgTElCTFRETD0nJHt0b3BfYnVpbGRkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKS9saWJsdGRsLmxhCi0gICAgTFRETElOQ0w9Jy1JJHt0b3Bfc3JjZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkKLSAgZWxzZQotICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1pbnN0YWxsPW5vIgotICAgIExJQkxUREw9Ii1sbHRkbCIKLSAgICBMVERMSU5DTD0KLSAgZmkKLSAgIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgotICBJTkNMVERMPSIkTFRETElOQ0wiCi1dKSMgQUNfTElCTFRETF9JTlNUQUxMQUJMRQotCi0KLSMgQUNfTElCVE9PTF9DWFgKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEMrKyBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfQ1hYXSkKLV0pIyBBQ19MSUJUT09MX0NYWAotCi0KLSMgX0xUX0FDX0xBTkdfQ1hYCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotQUNfUkVRVUlSRShbX0xUX0FDX1BST0dfQ1hYQ1BQXSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1DWFhdKQotXSkjIF9MVF9BQ19MQU5HX0NYWAotCi0jIF9MVF9BQ19QUk9HX0NYWENQUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfUFJPR19DWFhDUFBdLAotWwotQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLSAgQUNfUFJPR19DWFhDUFAKLWZpCi1dKSMgX0xUX0FDX1BST0dfQ1hYQ1BQCi0KLSMgQUNfTElCVE9PTF9GNzcKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEZvcnRyYW4gNzcgbGlicmFyaWVzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLAotW0FDX1JFUVVJUkUoW19MVF9BQ19MQU5HX0Y3N10pCi1dKSMgQUNfTElCVE9PTF9GNzcKLQotCi0jIF9MVF9BQ19MQU5HX0Y3NwotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRjc3XSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1GNzddKQotXSkjIF9MVF9BQ19MQU5HX0Y3NwotCi0KLSMgQUNfTElCVE9PTF9HQ0oKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEdDSiBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfR0NKXSkKLV0pIyBBQ19MSUJUT09MX0dDSgotCi0KLSMgX0xUX0FDX0xBTkdfR0NKCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0sCi1bQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSxbXSwKLSAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSxbXSwKLSAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX0FDX1BST0dfR0NKXSxbXSwKLSAgICAgIFtpZmRlZihbQUNfUFJPR19HQ0pdLFtBQ19SRVFVSVJFKFtBQ19QUk9HX0dDSl0pXSwKLQkgW2lmZGVmKFtBXVtNX1BST0dfR0NKXSxbQUNfUkVRVUlSRShbQV1bTV9QUk9HX0dDSl0pXSwKLQkgICBbQUNfUkVRVUlSRShbQV1bQ19QUk9HX0dDSl9PUl9BXVtNX1BST0dfR0NKXSldKV0pXSldKV0pCi1fTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9R0NKXSkKLV0pIyBfTFRfQUNfTEFOR19HQ0oKLQotCi0jIEFDX0xJQlRPT0xfUkMKLSMgLS0tLS0tLS0tLS0tLQotIyBlbmFibGUgc3VwcG9ydCBmb3IgV2luZG93cyByZXNvdXJjZSBmaWxlcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfUkNdKQotX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfVJDXSkKLV0pIyBBQ19MSUJUT09MX1JDCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwgW19MVF9BQ19MQU5HX0NfQ09ORklHXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCi1bbHRfc2F2ZV9DQz0iJENDIgotQUNfTEFOR19QVVNIKEMpCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKLQotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLUFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotQUNfTElCVE9PTF9ETE9QRU5fU0VMRgotCi0jIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLUFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLUFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKLQotYWl4W1s0LTldXSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQotICAgIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1BPUAotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19DX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIEMgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5Ci0jIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sIFtfTFRfQUNfTEFOR19DWFhfQ09ORklHKENYWCldKQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF9DT05GSUddLAotW0FDX0xBTkdfUFVTSChDKyspCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCi1BQ19SRVFVSVJFKFtfTFRfQUNfUFJPR19DWFhDUFBdKQotCi1fTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgotX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQotX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KLV9MVF9BQ19UQUdWQVIocHJlZGVwcywgJDEpPQotX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQotX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KLV9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9Ci0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWNwcAotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9MRD0kTEQKLWx0X3NhdmVfR0NDPSRHQ0MKLUdDQz0kR1hYCi1sdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECi1pZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCi0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKLWZpCi1pZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KLSAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAotZmkKLXRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi1DQz0ke0NYWC0iYysrIn0KLWNvbXBpbGVyPSRDQwotX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0jIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2VuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQotIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJwotZWxzZQotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9Ci1maQotCi1pZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgotCi0gIEFDX1BST0dfTEQKLQotICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKLSAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bwotICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCi0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwgXAotCWdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAgIGZpCi0gIGVsc2UKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIHdsYXJjPQotCi0gICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KLSAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQotICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCi0gICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCi0gICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gIGZpCi0KLSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLWVsc2UKLSAgR1hYPW5vCi0gIHdpdGhfZ251X2xkPW5vCi0gIHdsYXJjPQotZmkKLQotIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcwotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIGFpeFtbNC05XV0qKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSIiCi0gICAgZWxzZQotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLSAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKLQlmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgIGNhc2UgJGxkX2ZsYWcgaW4KLQkgICotYnJ0bCopCi0JICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgIGJyZWFrCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgZmkKLQotICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKLSAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCWlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLQkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JdGhlbgotCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICA6Ci0JZWxzZQotCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQlzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgIyBub3QgdXNpbmcgZ2NjCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0JIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQlzaGFyZWRfZmxhZz0nLUcnCi0gICAgICBlbHNlCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQllbHNlCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCWZpCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLSAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwotICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgZWxzZQotCSMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCV9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0JIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgZmkKLSAgICBmaQotICAgIDs7Ci0KLSAgYmVvcyopCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLSAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgZmkKLSAgICA7OwotCi0gIGNob3J1cyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGVsc2UKLQllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZml+Ci0gICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIGZpCi0gIDs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKLSAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzIDsgdGhlbgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgZmkKLSAgICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgICAgOzsKLQotICBkZ3V4KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZWMrKyopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBnaGN4KikKLQkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZnJlZWJzZFtbMTJdXSopCi0gICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZSBzd2l0Y2ggdG8gRUxGCi0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIGZyZWVic2QtZWxmKikKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICA7OwotICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKLSAgICAjIGNvbnZlbnRpb25zCi0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLSAgICA7OwotICBnbnUqKQotICAgIDs7Ci0gIGhwdXg5KikKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCSMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgQ0MqKQotICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotICAgIGFDQyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAjCi0gICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0gICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotICAgICAgIyBkZXBlbmRlbmNpZXMuCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiW1stXV1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotICAgICAgOzsKLSAgICAqKQotICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgaHB1eDEwKnxocHV4MTEqKQotICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKSA7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkJICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkJICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGFDQyopCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGlhNjQqKQotCSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBpbnRlcml4W1szLTldXSopCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgOzsKLSAgaXJpeDUqIHwgaXJpeDYqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTR0kgQysrCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JIyBpbiB0aGUgYXJjaGl2ZS4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JICBlbHNlCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgIC1vICRsaWInCi0JICBmaQotCWZpCi0JX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0JOzsKLSAgICBlc2FjCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgOzsKLSAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8IGdyZXAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCwkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGljcGMqKQotCSMgSW50ZWwgQysrCi0Jd2l0aF9nbnVfbGQ9eWVzCi0JIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAotCSMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCi0JY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JKiJWZXJzaW9uIDcuIiopCi0gIAkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICA7OwotCSopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICB0bXBfaWR5bj0KLQkgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKLQkgIGVzYWMKLSAgCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JZXNhYwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCTs7Ci0gICAgICBwZ0NDKiB8IHBnY3BwKikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLSAgCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICA7OwotICAgICAgY3h4KikKLQkjIENvbXBhcSBDKysKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMrKyA1LjkKLQkgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCi0JICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCi0JICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAjIHdvdWxkIGJlIGJldHRlci4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAjIGluIHRoZSBhcmNoaXZlLgotCSAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICA7OwotCWVzYWMKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBseW54b3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBtODhrKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgbXZzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgY3h4KikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG5ldGJzZCopCi0gICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICBmaQotICAgICMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLSAgICA7OwotICBvcGVuYnNkMiopCi0gICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBvcGVuYnNkKikKLSAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBmaQotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIGZpCi0gICAgOzsKLSAgb3NmMyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0KLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgY3h4KikKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKLQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgb3NmNCogfCBvc2Y1KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIFJDQyopCi0JIyBSYXRpb25hbCBDKysgMi40LjEKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGN4eCopCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+Ci0JICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAtV2wsLWlucHV0IC1XbCwkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uCSR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KLQkgICRybSAkbGliLmV4cCcKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQkgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKLQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgcHNvcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIHN1bm9zNCopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFN1biBDKysgNC54Ci0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBsY2MqKQotCSMgTHVjaWQKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHNvbGFyaXMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKLQlfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCWNhc2UgJGhvc3Rfb3MgaW4KLQkgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0JICAqKQotCSAgICAjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSAgICAjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgotCSAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCSAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JICAgIDs7Ci0JZXNhYwotCV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkjIGluIHRoZSBhcmNoaXZlLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBnY3gqKQotCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICAqKQotCSMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKLQkgIGlmICRDQyAtLXZlcnNpb24gfCBncmVwIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKLQkgIGVsc2UKLQkgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcwotCSAgICAjIHBsYXRmb3JtLgotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgotCSAgZmkKLQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0JICAqKQotCSAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQkgIGVzYWMKLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgIyBhcyAteiBkZWZzLgotICAgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKLSAgICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQotICAgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCi0gICAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KLSAgICAjIFNvIHRoYXQgYmVoYXZpb3VyIGlzIG9ubHkgZW5hYmxlZCBpZiBTQ09BQlNQQVRIIGlzIHNldCB0byBhCi0gICAgIyBub24tZW1wdHkgdmFsdWUgaW4gdGhlIGVudmlyb25tZW50LiAgTW9zdCBsaWtlbHkgb25seSB1c2VmdWwgZm9yCi0gICAgIyBjcmVhdGluZyBvZmZpY2lhbCBkaXN0cmlidXRpb25zIG9mIHBhY2thZ2VzLgotICAgICMgVGhpcyBpcyBhIGhhY2sgdW50aWwgbGlidG9vbCBvZmZpY2lhbGx5IHN1cHBvcnRzIGFic29sdXRlIHBhdGgKLSAgICAjIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyaWVzLgotICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKLSAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHRhbmRlbSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIE5DQyopCi0JIyBOb25TdG9wLVVYIE5DQyAzLjIwCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB2eHdvcmtzKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLWVzYWMKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLXRlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotX0xUX0FDX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKLV9MVF9BQ19UQUdWQVIoTEQsICQxKT0iJExEIgotCi1BQ19MSUJUT09MX1BPU1RERVBfUFJFREVQKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUE9QCi1DQz0kbHRfc2F2ZV9DQwotTERDWFg9JExECi1MRD0kbHRfc2F2ZV9MRAotR0NDPSRsdF9zYXZlX0dDQwotd2l0aF9nbnVfbGRjeHg9JHdpdGhfZ251X2xkCi13aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAotbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECi1sdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKLWx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1dKSMgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKLQotIyBBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCi0jIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci0jIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1kbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKLWRubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCi1kbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCi1kbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAotZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCi1pZmVsc2UoWyQxXSxbXSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotaW50IGE7Ci12b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQotRU9GCi1dLFskMV0sW0NYWF0sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLWNsYXNzIEZvbwotewotcHVibGljOgotICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KLXByaXZhdGU6Ci0gIGludCBhOwotfTsKLUVPRgotXSxbJDFdLFtGNzddLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0gICAgICBzdWJyb3V0aW5lIGZvbwotICAgICAgaW1wbGljaXQgbm9uZQotICAgICAgaW50ZWdlcio0IGEKLSAgICAgIGE9MAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLUVPRgotXSxbJDFdLFtHQ0pdLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1wdWJsaWMgY2xhc3MgZm9vIHsKLSAgcHJpdmF0ZSBpbnQgYTsKLSAgcHVibGljIHZvaWQgYmFyICh2b2lkKSB7Ci0gICAgYSA9IDA7Ci0gIH0KLX07Ci1FT0YKLV0pCi1kbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci1kbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi0KLSAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQotICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KLSAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubwotCi0gICMgVGhlIGAqJyBpbiB0aGUgY2FzZSBtYXRjaGVzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlIGBjYXNlJyBpbgotICAjICRvdXRwdXRfdmVyYm9zZV9jbWQgY2FuIHRyaWdnZXIgZ2xvYiBleHBhbnNpb24gZHVyaW5nIHRoZSBsb29wCi0gICMgZXZhbCB3aXRob3V0IHRoaXMgc3Vic3RpdHV0aW9uLgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1gJGVjaG8gIlgkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiIHwgJFhzZWQgLWUgIiRub19nbG9iX3N1YnN0ImAKLQotICBmb3IgcCBpbiBgZXZhbCAkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWRgOyBkbwotICAgIGNhc2UgJHAgaW4KLQotICAgIC1MKiB8IC1SKiB8IC1sKikKLSAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgotICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KLSAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiBcCi0JICB8fCB0ZXN0ICRwID0gIi1SIjsgdGhlbgotCSBwcmV2PSRwCi0JIGNvbnRpbnVlCi0gICAgICAgZWxzZQotCSBwcmV2PQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBjYXNlICRwIGluCi0JIC1MKiB8IC1SKikKLQkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKLQkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKLQkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KLQkgICBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KLQkgICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgotCSAgIGVsc2UKLQkgICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCi0JICAgZmkKLQkgICA7OwotCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZwotCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KLQkgZXNhYwotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KLQkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgotCSBlbHNlCi0JICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKi4kb2JqZXh0KQotICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAotICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgotICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgotCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcwotCSBjb250aW51ZQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgotCSAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCi0JIGVsc2UKLQkgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCi0JIGZpCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKLQkgZWxzZQotCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgotCi0gICAgZXNhYwotICBkb25lCi0KLSAgIyBDbGVhbiB1cC4KLSAgcm0gLWYgYS5vdXQgYS5leGUKLWVsc2UKLSAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKLWZpCi0KLSRybSAtZiBjb25mZXN0LiRvYmpleHQKLQotX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KLWlmIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgotICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCi1maQotCi0jIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgotaWZlbHNlKFskMV0sW0NYWF0sCi1bY2FzZSAkaG9zdF9vcyBpbgotaW50ZXJpeFtbMy05XV0qKQotICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCi0gICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCi0gIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQotICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9Ci0gIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPQotICA7OwotCi1saW51eCopCi0gIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotICAqU3VuXCBDKikKLSAgICAjIFN1biBDKysgNS45Ci0gICAgIwotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBDQyopCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCi0gICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAotICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci1lc2FjCi1dKQotY2FzZSAiICRfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkgIiBpbgotKiIgLWxjICIqKSBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8gOzsKLWVzYWMKLV0pIyBBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQCi0KLSMgQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIEMgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5Ci0jIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sIFtfTFRfQUNfTEFOR19GNzdfQ09ORklHKEY3NyldKQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRjc3XSkKLUFDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQotCi1fTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgotX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKLV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWYKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKLSAgICAgIHN1YnJvdXRpbmUgdAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLSIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAotICAgICAgcHJvZ3JhbSB0Ci0gICAgICBlbmQKLSIKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke0Y3Ny0iZjc3In0KLWNvbXBpbGVyPSRDQwotX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi1BQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7Ci1haXhbWzQtOV1dKikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGZpCi0gIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLV9MVF9BQ19UQUdWQVIoR0NDLCAkMSk9IiRHNzciCi1fTFRfQUNfVEFHVkFSKExELCAkMSk9IiRMRCIKLQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUE9QCi1DQz0iJGx0X3NhdmVfQ0MiCi1dKSMgQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLCBbX0xUX0FDX0xBTkdfR0NKX0NPTkZJRyhHQ0opXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSwKLVtBQ19MQU5HX1NBVkUKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWphdmEKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtHQ0otImdjaiJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0KLV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUkVTVE9SRQotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5Ci0jIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSwgW19MVF9BQ19MQU5HX1JDX0NPTkZJRyhSQyldKQotQUNfREVGVU4oW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCi1bQUNfTEFOR19TQVZFCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9cmMKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke1JDLSJ3aW5kcmVzIn0KLWNvbXBpbGVyPSRDQwotX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcwotCi1BQ19MSUJUT09MX0NPTkZJRygkMSkKLQotQUNfTEFOR19SRVNUT1JFCi1DQz0iJGx0X3NhdmVfQ0MiCi1dKSMgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9DT05GSUcoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIElmIFRBR05BTUUgaXMgbm90IHBhc3NlZCwgdGhlbiBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdAotIyB3aXRoIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlCi0jIGFkZCBjb2RlIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieQotIyBUQUdOQU1FIGZyb20gdGhlIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTkZJR10sCi1bIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihDQywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKExELCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGluc3RhbGxfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3R1bmluc3RhbGxfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1xbJF0wIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXFskXTAgLS1mYWxsYmFjay1lY2hvIlskXS9bJF0wIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWlmZWxzZShbJDFdLCBbXSwKLSAgW2NmZ2ZpbGU9IiR7b2ZpbGV9VCIKLSAgdHJhcCAiJHJtIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKLSAgJHJtIC1mICIkY2ZnZmlsZSIKLSAgQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSldLAotICBbY2ZnZmlsZT0iJG9maWxlIl0pCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi1pZmVsc2UoWyQxXSwgW10sCi1bIyEgJFNIRUxMCi0KLSMgYCRlY2hvICIkY2ZnZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVApCi0jIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KLSMKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbDoKLSMgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgotU0VEPSRsdF9TRUQKLQotIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KLVhzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKLQotIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKLSMgaWYgQ0RQQVRIIGlzIHNldC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCi1hdmFpbGFibGVfdGFncz0KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUddLAotWyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVdKQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X1tdX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRfTFRfQUNfVEFHVkFSKEdDQywgJDEpCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X1tdX0xUX0FDX1RBR1ZBUihMRCwgJDEpCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKQotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKQotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9bXV9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfW11fTFRfQUNfVEFHVkFSKHByZWRlcHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfW11fTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkKLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkCi0jIGxpYnJhcnkKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfW11fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfW11fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSkKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKQotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKQotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKQotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9bXV9MVF9BQ19UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSkKLQotaWZlbHNlKFskMV0sW10sCi1bIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHXSwKLVsjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZV0pCi0KLV9fRU9GX18KLQotaWZlbHNlKFskMV0sW10sIFsKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICBjYXQgPDxcRU9GID4+ICIkY2ZnZmlsZSIKLQotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLUVPRgotICAgIDs7Ci0gIGVzYWMKLQotICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKLSAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwgXAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi1dKQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi1dKSMgQUNfTElCVE9PTF9DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSlkbmwKLQotX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCi0KLSAgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKLSAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAotICAgIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQotZmkKLV0pIyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSQotCi0KLSMgQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQotQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKQotQUNfUkVRVUlSRShbQUNfUFJPR19OTV0pCi1BQ19SRVFVSVJFKFtBQ19PQkpFWFRdKQotIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KLUFDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCi1BQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAotWwotIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCi0jIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQotCi0jIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCi1zeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0KLSMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgotc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXi4gLiogXCguKlwpJC9leHRlcm4gaW50IFwxOy9wJyIKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0KLSMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCi1jYXNlICRob3N0X29zIGluCi1haXgqKQotICBzeW1jb2RlPSdbW0JDRFRdXScKLSAgOzsKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKLSAgOzsKLWhwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKLSAgZmkKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLSAgOzsKLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICBmaQotICA7OwotaXJpeCogfCBub25zdG9wdXgqKQotICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0gIDs7Ci1vc2YqKQotICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJwotICA7Owotc29sYXJpcyopCi0gIHN5bWNvZGU9J1tbQkRSVF1dJwotICA7Owotc2NvMy4ydjUqKQotICBzeW1jb2RlPSdbW0RUXV0nCi0gIDs7Ci1zeXN2NC4ydXcyKikKLSAgc3ltY29kZT0nW1tEVF1dJwotICA7Owotc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgc3ltY29kZT0nW1tBQkRUXV0nCi0gIDs7Ci1zeXN2NCkKLSAgc3ltY29kZT0nW1tERk5TVFVdXScKLSAgOzsKLWVzYWMKLQotIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi1vcHRfY3I9Ci1jYXNlICRidWlsZF9vcyBpbgotbWluZ3cqKQotICBvcHRfY3I9YGVjaG8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKLSAgOzsKLWVzYWMKLQotIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCi1jYXNlIGAkTk0gLVYgMj4mMWAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKLWVzYWMKLQotIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcmNvcmUsIHRoZW4gd2l0aCBpdC4KLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLQotICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgotICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgotCi0gICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbIAldXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbIAldXVtbIAldXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLQotICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KLSAgcGlwZV93b3Jrcz1ubwotCi0gIHJtIC1mIGNvbmZ0ZXN0KgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi1jaGFyIG5tX3Rlc3RfdmFyOwotdm9pZCBubV90ZXN0X2Z1bmMoKXt9Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLUVPRgotCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCi0gICAgbmxpc3Q9Y29uZnRlc3Qubm0KLSAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgotICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLSAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCi0JbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCi0gICAgICBlbHNlCi0Jcm0gLWYgIiRubGlzdCJUCi0gICAgICBmaQotCi0gICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgICBpZiBncmVwICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JaWYgZ3JlcCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQkgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotRU9GCi0JICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCi0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCi0KLQkgIGNhdCA8PEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCi0jIGRlZmluZSBsdF9wdHJfdCB2b2lkICoKLSNlbHNlCi0jIGRlZmluZSBsdF9wdHJfdCBjaGFyICoKLSMgZGVmaW5lIGNvbnN0Ci0jZW5kaWYKLQotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICovCi1jb25zdCBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpuYW1lOwotICBsdF9wdHJfdCBhZGRyZXNzOwotfQotbHRfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KLXsKLUVPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAotCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAobHRfcHRyX3QpIDB9Ci19OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotRU9GCi0JICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgotCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKLQkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAotCWZpCi0gICAgICBlbHNlCi0JZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKLQotICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCi0gIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgotICAgIGJyZWFrCi0gIGVsc2UKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQotICBmaQotZG9uZQotXSkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KLWZpCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQob2spCi1maQotXSkgIyBBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwKLVtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KLV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KLV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KLQotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10pCi0gaWZlbHNlKFskMV0sW0NYWF0sWwotICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICA7OwotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLSAgICAqZGpncHAqKQotICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gICAgICA7OwotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeFtbNC05XV0qKQotCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JZWxzZQotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0JZmkKLQk7OwotICAgICAgY2hvcnVzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCWN4Y2g2OCopCi0JICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgIyBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAgZGFyd2luKikKLSAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgIHhsYyopCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFub2NvbW1vbicKLSAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAgICAgIDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgIGRndXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBlYysrKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgOzsKLQkgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKLQk7OwotICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCp8aWE2NCopCi0JICAgICAgIyArWiB0aGUgZGVmYXVsdAotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgaW50ZXJpeCopCi0JIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCi0JIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgICMgS0FJIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JICAgIDs7Ci0JICBpY3BjKiB8IGVjcGMqKQotCSAgICAjIEludGVsIEMrKwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyogfCBwZ2NwcCopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqKQotCTs7Ci0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgOzsKLQkgIFJDQyopCi0JICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgRGlnaXRhbC9Db21wYXEgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHBzb3MqKQotCTs7Ci0gICAgICBzb2xhcmlzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0JICAgIDs7Ci0JICBnY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3Vub3M0KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC54Ci0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB2eHdvcmtzKikKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gIGZpCi1dLAotWwotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFtbMy05XV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLQotICAgIG1zZG9zZGpncHAqKQotICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKLSAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgICBkYXJ3aW4qKQotICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgeGxjKikKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFub2NvbW1vbicKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAotCVtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi1dKQotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLWlmIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCi0gIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpLAotICAgIFskX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpaWZlbHNlKFskMV0sW10sWyAtRFBJQ10sW2lmZWxzZShbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCi0gICAgW2Nhc2UgJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgotICAgICAiIiB8ICIgIiopIDs7Ci0gICAgICopIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7Ci0gICAgIGVzYWNdLAotICAgIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgIDs7Ci0gICopCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpaWZlbHNlKFskMV0sW10sWyAtRFBJQ10sW2lmZWxzZShbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgotQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrc10sCi0gIF9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKLSAgJGx0X3RtcF9zdGF0aWNfZmxhZywKLSAgW10sCi0gIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKLV0pCi0KLQotIyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotaWZlbHNlKFskMV0sW0NYWF0sWwotICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBjYXNlICRob3N0X29zIGluCi0gIGFpeFtbNC05XV0qKQotICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLSAgICBpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGZpCi0gICAgOzsKLSAgcHczMiopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgotICA7OwotICBjeWd3aW4qIHwgbWluZ3cqKQotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvOy9eLipbWyBdXV9fbm1fXy9zL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gICopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgZXNhYwotICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KLV0sWwotICBydW5wYXRoX3Zhcj0KLSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfQUNfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi0gIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgotICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAotICBfTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIF9MVF9BQ19UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgotZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCi0gIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCi0gICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCi0gICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgotICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGVsc2UKLSAgCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCi0gICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgotICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgotICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKLSAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICBlc2FjCi0KLSAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4W1szLTldXSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeFtbNC05XV0qKQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0JIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0iIgotICAgICAgZWxzZQotCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLQlpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQllbHNlCi0JICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWZpCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0JIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0JIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0JIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLQljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCi0JICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAJICAgIGJyZWFrCi0gIAkgIGZpCi0JICBkb25lCi0JICA7OwotCWVzYWMKLQotCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgZmkKLQotICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKLQkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotICAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLQllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0JIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJwotCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCi0JICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLQotICAgIGJzZGlbWzQ1XV0qKQotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSAgICAgIGxpYmV4dD1saWIKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0gICAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0gICAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotICAgICAgX0xUX0FDX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwotICAgICAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KLSAgICAgICAgICAgICAxMC5bWzAxMl1dKQotICAgICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgICA7OwotCi0gICAgZGd1eCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBmcmVlYnNkMSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMiopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICAgIDs7Ci0KLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCSAgOzsKLQkqKQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIG9wZW5ic2QqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQotCSAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiB0ZXh0JwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGVsc2UKLQl3bGFyYz0nJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0gICAgICAqKQotCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAotCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQllbHNlCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KLQkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCi0JIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLQlzbmkpCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KLQk7OwotCXNpZW1lbnMpCi0JICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKLQkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgICA7OwotCW1vdG9yb2xhKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQuMyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLV0pCi1BQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCi10ZXN0ICIkX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoteHx4eWVzKQotICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCi0gIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLQotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW5dKQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQotCXBpY19mbGFnPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLSAgICAgICAgaWYgQUNfVFJZX0VWQUwoX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQotICAgICAgICB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgICAgZWxzZQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotICAgICAgICBmaQotICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKV0pCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLV0pIyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTCi0KLQotIyBfTFRfQUNfRklMRV9MVERMTF9DCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQmUgY2FyZWZ1bCB0aGF0IHRoZSBzdGFydCBtYXJrZXIgYWx3YXlzIGZvbGxvd3MgYSBuZXdsaW5lLgotQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdLCBbCi0jIC8qIGx0ZGxsLmMgc3RhcnRzIGhlcmUgKi8KLSMgI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jICNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0jICNpbmNsdWRlIDxzdGRpby5oPgotIwotIyAjaWZuZGVmIF9fQ1lHV0lOX18KLSMgIyAgaWZkZWYgX19DWUdXSU4zMl9fCi0jICMgICAgZGVmaW5lIF9fQ1lHV0lOX18gX19DWUdXSU4zMl9fCi0jICMgIGVuZGlmCi0jICNlbmRpZgotIwotIyAjaWZkZWYgX19jcGx1c3BsdXMKLSMgZXh0ZXJuICJDIiB7Ci0jICNlbmRpZgotIyBCT09MIEFQSUVOVFJZIERsbE1haW4gKEhJTlNUQU5DRSBoSW5zdCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpOwotIyAjaWZkZWYgX19jcGx1c3BsdXMKLSMgfQotIyAjZW5kaWYKLSMKLSMgI2lmZGVmIF9fQ1lHV0lOX18KLSMgI2luY2x1ZGUgPGN5Z3dpbi9jeWd3aW5fZGxsLmg+Ci0jIERFQ0xBUkVfQ1lHV0lOX0RMTCggRGxsTWFpbiApOwotIyAjZW5kaWYKLSMgSElOU1RBTkNFIF9faERsbEluc3RhbmNlX2Jhc2U7Ci0jCi0jIEJPT0wgQVBJRU5UUlkKLSMgRGxsTWFpbiAoSElOU1RBTkNFIGhJbnN0LCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKLSMgewotIyAgIF9faERsbEluc3RhbmNlX2Jhc2UgPSBoSW5zdDsKLSMgICByZXR1cm4gVFJVRTsKLSMgfQotIyAvKiBsdGRsbC5jIGVuZHMgaGVyZSAqLwotXSkjIF9MVF9BQ19GSUxFX0xURExMX0MKLQotCi0jIF9MVF9BQ19UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfVEFHVkFSXSwgW2lmZWxzZShbJDJdLCBbXSwgWyQxXSwgWyQxXyQyXSldKQotCi0KLSMgb2xkIG5hbWVzCi1BQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgICBbQUNfUFJPR19MSUJUT09MXSkKLUFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCi1BQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sICBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQotQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCi1BQ19ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKLUFDX0RFRlVOKFtBTV9QUk9HX0xEXSwgICAgICAgIFtBQ19QUk9HX0xEXSkKLUFDX0RFRlVOKFtBTV9QUk9HX05NXSwgICAgICAgIFtBQ19QUk9HX05NXSkKLQotIyBUaGlzIGlzIGp1c3QgdG8gc2lsZW5jZSBhY2xvY2FsIGFib3V0IHRoZSBtYWNybyBub3QgYmVpbmcgdXNlZAotaWZlbHNlKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pCi0KLUFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sCi1bQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwgbm8pCi0gIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgotICBBQ19TVUJTVChHQ0pGTEFHUykKLV0pCi0KLUFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwKLVtBQ19DSEVDS19UT09MKFJDLCB3aW5kcmVzLCBubykKLV0pCi0KLQotIyBDaGVhcCBiYWNrcG9ydCBvZiBBU19FWEVDVVRBQkxFX1AgYW5kIHJlcXVpcmVkIG1hY3JvcwotIyBmcm9tIEF1dG9jb25mIDIuNTk7IHdlIHNob3VsZCBub3QgdXNlICRhc19leGVjdXRhYmxlX3AgZGlyZWN0bHkuCi0KLSMgX0FTX1RFU1RfUFJFUEFSRQotIyAtLS0tLS0tLS0tLS0tLS0tCi1tNF9pZm5kZWYoW19BU19URVNUX1BSRVBBUkVdLAotW200X2RlZnVuKFtfQVNfVEVTVF9QUkVQQVJFXSwKLVtpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2V4ZWN1dGFibGVfcD0ndGVzdCAteCcKLWVsc2UKLSAgYXNfZXhlY3V0YWJsZV9wPSd0ZXN0IC1mJwotZmkKLV0pXSkjIF9BU19URVNUX1BSRVBBUkUKLQotIyBBU19FWEVDVVRBQkxFX1AKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgYSBmaWxlIGlzIGV4ZWN1dGFibGUuCi1tNF9pZm5kZWYoW0FTX0VYRUNVVEFCTEVfUF0sCi1bbTRfZGVmdW4oW0FTX0VYRUNVVEFCTEVfUF0sCi1bQVNfUkVRVUlSRShbX0FTX1RFU1RfUFJFUEFSRV0pZG5sCi0kYXNfZXhlY3V0YWJsZV9wICQxW11kbmwKLV0pXSkjIEFTX0VYRUNVVEFCTEVfUAotCi0jIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKLSMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIwotIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCi0jICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgTFRfQUNfUFJPR19TRUQKLSMgLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKLSMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KLUFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sCi1bQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAotWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgotIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGlmIEFTX0VYRUNVVEFCTEVfUChbIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiXSk7IHRoZW4KLSAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgICAgZmkKLSAgICBkb25lCi0gIGRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLWx0X2FjX21heD0wCi1sdF9hY19jb3VudD0wCi0jIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcwotIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KLWZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbwotICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQotICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KLSAgbHRfYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KLSAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGJyZWFrCi0gIGZpCi0gIHdoaWxlIHRydWU7IGRvCi0gICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKLSAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KLSAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAotICAgIGVjaG8gPj5jb25mdGVzdC5ubAotICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCi0gICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhawotICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCi0gICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KLSAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKLSAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBmaQotICBkb25lCi1kb25lCi1dKQotU0VEPSRsdF9jdl9wYXRoX1NFRAotQUNfU1VCU1QoW1NFRF0pCi1BQ19NU0dfUkVTVUxUKFskU0VEXSkKLV0pCi0KLW00X2luY2x1ZGUoW2FjaW5jbHVkZS5tNF0pCittNF9pbmNsdWRlKFttNC9hY19hZGRfc2VhcmNoX3BhdGgubTRdKQorbTRfaW5jbHVkZShbbTQvYWNfbXNnX2NhY2hlLm00XSkKK200X2luY2x1ZGUoW200L2FjX21zZ19tb2R1bGVfZGJnLm00XSkKK200X2luY2x1ZGUoW200L2FjX3Byb21wdF91c2VyLm00XSkKK200X2luY2x1ZGUoW200L2xpYnRvb2wubTRdKQorbTRfaW5jbHVkZShbbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2x0fm9ic29sZXRlLm00XSkKK200X2luY2x1ZGUoW200L25ldHNubXBfYXJnLm00XSkKK200X2luY2x1ZGUoW200L25ldHNubXBfc2VhcmNoX2xpYnMubTRdKQpkaWZmIC0tZ2l0IGEvYWdlbnQvTWFrZWZpbGUuZGVwZW5kIGIvYWdlbnQvTWFrZWZpbGUuZGVwZW5kCmluZGV4IGVkNjEyNWMuLjkzNDg2YTIgMTAwNjQ0Ci0tLSBhL2FnZW50L01ha2VmaWxlLmRlcGVuZAorKysgYi9hZ2VudC9NYWtlZmlsZS5kZXBlbmQKQEAgLTUsNTggKzUsNjcgQEAKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NSw2ICs3NCw3IEBACiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAyLDYyICsxMTIsNjggQEAKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE2Niw2ICsxODIsNyBAQAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMDMsNjcgKzIyMCw3MiBAQAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2luZGV4Lmggc25tcGQuaAogLi9hZ2VudF9pbmRleC5sbzogbWliZ3JvdXAvc3RydWN0LmggLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjcyLDYgKzI5NCw3IEBACiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMwOCwyOCArMzMxLDY0IEBACiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBtaWJncm91cC9zdHJ1Y3QuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogc25tcGQuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zdHJ1Y3QuaCBzbm1wZC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudF9tb2R1bGVfaW5jbHVkZXMuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc211eC9zbXV4LmggbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS92YWNtX2NvbmYuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc211eC9zbXV4LmggbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtQ29uZi5oIG1pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2luY2x1ZGVzLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCBtaWJncm91cC90ZXN0aGFuZGxlci5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX3N5c3RlbS5oIG1pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX2RldmljZS5oIG1pYmdyb3VwL2hvc3QvaHJfb3RoZXIuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmggbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaCBtaWJncm91cC9ob3N0L2hyX2Rpc2suaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmggbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX3N3aW5zdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL3Jvd3MuaCBtaWJncm91cC9SbW9uL2FndXRpbC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCBtaWJncm91cC9SbW9uL2FsYXJtVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmggbWliZ3JvdXAvUm1vbi9ldmVudC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL3Jvd3MuaCBtaWJncm91cC9SbW9uL2FndXRpbC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCBtaWJncm91cC9SbW9uL2FsYXJtLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL1Jtb24vaGlzdG9yeS5oIG1pYmdyb3VwL1Jtb24vZXZlbnQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmggbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9vdGhlci5oIG1pYmdyb3VwL2hvc3QvaHJfcHJvYy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX25ldHdvcmsuaCBtaWJncm91cC9ob3N0L2hyX3ByaW50LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfZGlzay5oIG1pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmggbWliZ3JvdXAvbWliSUkvYXQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvaXAuaCBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuaCBtaWJncm91cC9taWJJSS9hdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS90Y3AuaCBtaWJncm91cC9taWJJSS9pY21wLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3VkcC5oIG1pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oIG1pYmdyb3VwL21pYklJL2lwdjYuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJkZWZzLmggbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wYXNzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmggbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmggbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9kbG1vZC5oIG1pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5oIG1pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9uc0RlYnVnLmggbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVNjYWxhcnMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oCkBAIC0zNDcsNDUgKzQwNiwxOCBAQAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCBtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaCBtaWJncm91cC9taWJJSS9hdC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9pcC5oIG1pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5oIG1pYmdyb3VwL21pYklJL2F0LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3NubXBfbWliLmggbWliZ3JvdXAvbWliSUkvdGNwLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL2ljbXAuaCBtaWJncm91cC9taWJJSS91ZHAuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmggbWliZ3JvdXAvbWliSUkvaXB2Ni5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wcm9jLmggLi4vYWdlbnQvbWliZ3JvdXAvbWliZGVmcy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wYXNzLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9kaXNrLmggbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9leHRlbmQuaCBtaWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9maWxlLmggbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmggbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5oIG1pYmdyb3VwL2FnZW50L25zQ2FjaGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaCBtaWJncm91cC9taWJJSS90Y3BUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS91ZHBUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuaApAQCAtMzk1LDYgKzQyNywxMCBAQAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgKQEAgLTQxMyw2ICs0NDksMTkgQEAKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZW51bXMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfY29uc3RhbnRzLmgKQEAgLTQyNiw2ICs0NzUsMjAgQEAKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX29pZHMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oCkBAIC00NTgsNjIgKzUyMSw2NiBAQAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2RvdF9jb25mLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2FnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfZG90X2NvbmYuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTIyLDYgKzU4OSw3IEBACiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTU1OSwzNCArNjI3LDE2NyBAQAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oIHNubXBkLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IG1pYmdyb3VwL3N0cnVjdC5oIC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaApAQCAtNTk0LDI5ICs3OTUsMTMgQEAKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTYyNSw4MSArODEwLDExMiBAQAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmgKIC4vYXV0b19ubGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hdXRvX25saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2F1dG9fbmxpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hdXRvX25saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYXV0b19ubGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9hdXRvX25saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi9rZXJuZWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4va2VybmVsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2tlcm5lbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2tlcm5lbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2tlcm5lbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcwOCw2ICs5MjQsNyBAQAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKQEAgLTc0MywyMyArOTYwLDU0IEBACiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBtMm0uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaCBtMm0uaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc3RydWN0LmggLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2luY2x1ZGVzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCBtaWJncm91cC90ZXN0aGFuZGxlci5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyX3N5c3RlbS5oIG1pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9SbW9uL3Jvd3MuaCBtaWJncm91cC9SbW9uL2FndXRpbC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCBtaWJncm91cC9SbW9uL2FsYXJtVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmggbWliZ3JvdXAvUm1vbi9ldmVudC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmggbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuaCBtaWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmggbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuaCBtaWJncm91cC9ob3N0L2hyX290aGVyLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfcHJvYy5oIG1pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyX3ByaW50LmggbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmggbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfc3dydW4uaCBtaWJncm91cC9ob3N0L2hyX3N3aW5zdC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmggbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmggbWliZ3JvdXAvUm1vbi9yb3dzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL1Jtb24vYWd1dGlsLmggbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL1Jtb24vYWxhcm0uaCBtaWJncm91cC9SbW9uL2hpc3RvcnkuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvUm1vbi9ldmVudC5oIG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVTY2FsYXJzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oIG1pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXB2My91c21Vc2VyLmggbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaCBtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL2F0LmggbWliZ3JvdXAvbWliSUkvaXAuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmggbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvYXQuaCBtaWJncm91cC9taWJJSS90Y3AuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvaWNtcC5oIG1pYmdyb3VwL21pYklJL3VkcC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS9pcHY2LmggbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJkZWZzLmggbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oIG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaCBtaWJncm91cC9hZ2VudC9leHRlbmQuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJncm91cC91Y2Qtc25tcC9maWxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmggbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaCBtaWJncm91cC91Y2Qtc25tcC9tZW1vcnkuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmggbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9hZ2VudC9uc0NhY2hlLmggbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVTY2FsYXJzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmgKQEAgLTc3Niw0MSArMTAyNCwxOCBAQAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaCBtaWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXB2My91c21TdGF0cy5oIG1pYmdyb3VwL3NubXB2My91c21Vc2VyLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaCBtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL2F0LmggbWliZ3JvdXAvbWliSUkvaXAuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmggbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvYXQuaCBtaWJncm91cC9taWJJSS9zbm1wX21pYi5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS90Y3AuaCBtaWJncm91cC9taWJJSS9pY21wLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3VkcC5oIG1pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oIG1pYmdyb3VwL21pYklJL2lwdjYuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oIC4uL2FnZW50L21pYmdyb3VwL21pYmRlZnMuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaCBtaWJncm91cC91Y2Qtc25tcC9wYXNzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oIG1pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oIG1pYmdyb3VwL2FnZW50L2V4dGVuZC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oIG1pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaCBtaWJncm91cC91Y2Qtc25tcC9wcm94eS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9tZW1vcnkuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuaCBtaWJncm91cC9hZ2VudC9uc0RlYnVnLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zQ2FjaGUuaCBtaWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oIG1pYmdyb3VwL21pYklJL3RjcFRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3VkcFRhYmxlLmggbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmgKQEAgLTgxOSw3ICsxMDQ0LDEyIEBACiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCkBAIC04MzYsNiArMTA2NiwxOSBAQAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uc3RhbnRzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9jb25zdGFudHMuaApAQCAtODQ5LDYgKzEwOTIsMjAgQEAKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX29pZHMuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oCkBAIC04NzgsNjYgKzExMzUsNjkgQEAKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2FnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfc2h1dGRvd24uaAogLi9taWJfbW9kdWxlcy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbml0cy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NDYsNiArMTIwNiw3IEBACiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTk4Myw2MyArMTI0NCw2OSBAQAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29iamVjdF9tb25pdG9yLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwNDgsNiArMTMxNSw3IEBACiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA4NCw2NyArMTM1MiwxNzkgQEAKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc25tcGQuaCBtaWJncm91cC9zdHJ1Y3QuaAotLi9zbm1wX2FnZW50LmxvOiBtaWJncm91cC91dGlsX2Z1bmNzLmggbWliZ3JvdXAvc3RydWN0LmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHNubXBkLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCBtMm0uaCBzbm1wZC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmggbWliZ3JvdXAvc211eC9zbXV4LmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTE1Myw2ICsxNTMzLDcgQEAKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExODksNjMgKzE1NzAsNjkgQEAKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzbm1wX3BlcmwuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHNubXBfcGVybC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI1NCw2ICsxNjQxLDcgQEAKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyOTEsMzAwICsxNjc5LDc3IEBACiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmgga2VybmVsLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgga2VybmVsLmgKIC4vc25tcF92YXJzLmxvOiBtaWJncm91cC9zdHJ1Y3QuaCBzbm1wZC5oCiAuL3NubXBfdmFycy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuaAogLi9zbm1wX3ZhcnMubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oCiAuL3NubXBfdmFycy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmgKLS4vc25tcF92YXJzLmxvOiBtaWJncm91cC9zbXV4L3NtdXguaCBtaWJncm91cC9zbm1wdjMvdXNtQ29uZi5oCi0uL3NubXBfdmFycy5sbzogbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oIG1pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oCisuL3NubXBfdmFycy5sbzogbWliZ3JvdXAvc211eC9zbXV4LmggbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oCisuL3NubXBfdmFycy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuaCBtaWJncm91cC9taWJJSS92YWNtX2NvbmYuaAogLi9zbm1wX3ZhcnMubG86IHNubXBfcGVybC5oIC4uL2FnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbml0cy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIG0ybS5oIHNubXBkLmggbWliZ3JvdXAvc3RydWN0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaCBtaWJncm91cC91dGlsX2Z1bmNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3N0cnVjdC5oIC4uL2FnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfaW5jbHVkZXMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5oIG1pYmdyb3VwL3Rlc3RoYW5kbGVyLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmggbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmggbWliZ3JvdXAvaG9zdC9ocl9vdGhlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ob3N0L2hyX3Byb2MuaCBtaWJncm91cC9ob3N0L2hyX25ldHdvcmsuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oIG1pYmdyb3VwL2hvc3QvaHJfZGlzay5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5oIG1pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ob3N0L2hyX3N3cnVuLmggbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5oIG1pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaCBtaWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL1Jtb24vcm93cy5oIG1pYmdyb3VwL1Jtb24vYWd1dGlsLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oIG1pYmdyb3VwL1Jtb24vYWxhcm0uaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmggbWliZ3JvdXAvUm1vbi9ldmVudC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlU2NhbGFycy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5oCi0uL3NubXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmggbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCBtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmggbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS9hdC5oIG1pYmdyb3VwL21pYklJL2lwLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oIG1pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL21pYklJL2F0LmggbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbWliSUkvdGNwLmggbWliZ3JvdXAvbWliSUkvaWNtcC5oIG1pYmdyb3VwL21pYklJL3VkcC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS9pcHY2LmggbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oCi0uL3NubXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJkZWZzLmggbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5oIG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91Y2Qtc25tcC9kaXNrLmggbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9hZ2VudC9leHRlbmQuaCBtaWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91Y2Qtc25tcC9maWxlLmggbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuaCBtaWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91Y2Qtc25tcC9tZW1vcnkuaCBtaWJncm91cC91Y2Qtc25tcC92bXN0YXQuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5oIG1pYmdyb3VwL2FnZW50L25zRGVidWcuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5oIG1pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmggbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmggbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaCBtaWJncm91cC9taWJJSS90Y3BUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS91ZHBUYWJsZS5oIG1pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmgKLS4vc25tcGQubG86IC4uL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIG1pYmdyb3VwL3NtdXgvc211eC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNTkzLDYgKzE3NTgsNyBAQAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE2MzAsNjMgKzE3OTYsNjkgQEAKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTY5NSw2ICsxODY3LDcgQEAKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE3MzIsNjMgKzE5MDUsNjggQEAKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE3OTcsNiArMTk3NSw3IEBACiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE4MzQsNjMgKzIwMTMsNjggQEAKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTg5OSw2ICsyMDgzLDcgQEAKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE5MzYsNjMgKzIxMjEsNjggQEAKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIwMDEsNiArMjE5MSw3IEBACiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMDM4LDYzICsyMjI5LDY4IEBACiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMTAzLDYgKzIyOTksNyBAQAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTIxNDAsNjMgKzIzMzcsNjggQEAKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMjA1LDYgKzI0MDcsNyBAQAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjI0Miw2MyArMjQ0NSw2OCBAQAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjMwNyw2ICsyNTE1LDcgQEAKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMzQ0LDYzICsyNTUzLDY4IEBACiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjQwOSw2ICsyNjIzLDcgQEAKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI0NDYsNjMgKzI2NjEsNjggQEAKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI1MTEsNiArMjczMSw3IEBACiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNTQ4LDY0ICsyNzY5LDY5IEBACiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjYxNCw2ICsyODQwLDcgQEAKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjY1MSw2MyArMjg3OCw2OCBAQAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNzE2LDYgKzI5NDgsNyBAQAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNzUzLDYzICsyOTg2LDY4IEBACiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI4MTgsNiArMzA1Niw3IEBACiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI4NTUsNjMgKzMwOTQsNjggQEAKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjkyMCw2ICszMTY0LDcgQEAKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjk1Nyw2MyArMzIwMiw2OCBAQAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMDIyLDYgKzMyNzIsNyBAQAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMDU5LDYzICszMzEwLDE3NiBAQAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzEyNCw2ICszNDg4LDcgQEAKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMTYxLDY1ICszNTI2LDcwIEBACiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0LmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMjI4LDYgKzM1OTgsNyBAQAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzI2NSwxNjcgKzM2MzYsNzAgQEAKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX3RvX25leHQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzQzNCw2ICszNzA4LDcgQEAKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zNDcxLDYzICszNzQ2LDE3NiBAQAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zNTM2LDYgKzM5MjQsNyBAQAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zNTczLDYzICszOTYyLDY4IEBACiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM2MzgsNiArNDAzMiw3IEBACiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zNjc1LDYzICs0MDcwLDY4IEBACiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zNzQwLDYgKzQxNDAsNyBAQAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzc3Nyw2MyArNDE3OCw2OCBAQAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzg0Miw2ICs0MjQ4LDcgQEAKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zODc5LDY0ICs0Mjg2LDY5IEBACiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM5NDUsNiArNDM1Nyw3IEBACiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTM5ODIsNjMgKzQzOTUsNjggQEAKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDA0Nyw2ICs0NDY1LDcgQEAKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00MDg0LDYzICs0NTAzLDY4IEBACiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDE0OSw2ICs0NTczLDcgQEAKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQxODYsNjMgKzQ2MTEsNjggQEAKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQyNTEsNiArNDY4MSw3IEBACiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQyODgsNjkgKzQ3MTksNzAgQEAKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5oCiAuL21pYmdyb3VwL2tlcm5lbF9zdW5vczUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAva2VybmVsX3N1bm9zNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJncm91cC9rZXJuZWxfc3Vub3M1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliZ3JvdXAva2VybmVsX3N1bm9zNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL2tlcm5lbF9zdW5vczUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQzNTksNiArNDc5MSw3IEBACiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQzOTYsNjQgKzQ4MjksNjkgQEAKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi9taWJncm91cC90ZXN0aGFuZGxlci5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00NDYyLDYgKzQ5MDAsNyBAQAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQ0OTgsMTQgKzQ5MzcsMTUgQEAKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbWliZ3JvdXAvc3RydWN0LmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91dGlsX2Z1bmNzLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4vbWliZ3JvdXAvc3RydWN0LmggLi9taWJncm91cC91dGlsX2Z1bmNzLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuL21pYmdyb3VwL3V0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuL21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2FnZW50L21pYmdyb3VwL21pYmRlZnMuaAogLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAvd2luRXh0RExMLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYmdyb3VwL3dpbkV4dERMTC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYmdyb3VwL3dpbkV4dERMTC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL3dpbkV4dERMTC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApkaWZmIC0tZ2l0IGEvYWdlbnQvTWFrZWZpbGUuaW4gYi9hZ2VudC9NYWtlZmlsZS5pbgppbmRleCBhNjQ0OGY4Li43NDhiMDFjIDEwMDY0NAotLS0gYS9hZ2VudC9NYWtlZmlsZS5pbgorKysgYi9hZ2VudC9NYWtlZmlsZS5pbgpAQCAtMyw2ICszLDcgQEAKICMKIAogdG9wX2J1aWxkZGlyCT0gLi4KK215c3ViZGlyPWFnZW50CiAKICMgdXNlIEdOVSB2cGF0aCwgaWYgYXZhaWxhYmxlLCB0byBvbmx5IHNldCBhIHBhdGggZm9yIHNvdXJjZSBhbmQgaGVhZGVycwogIyBWUEFUSCB3aWxsIHBpY2sgdXAgb2JqZWN0cyB0b28sIHdoaWNoIGlzIGJhZCBpZiB5b3UgYXJlIHNoYXJpbmcgYQpAQCAtMTYsMTUgKzE3LDE4IEBACiAjIHdoYXQgdG8gaW5zdGFsbAogIwogU1VCRElSUz1oZWxwZXJzIG1pYmdyb3VwCitGVFNVQkRJUlM9bWliZ3JvdXAgaGVscGVycwogCiBJTlNUQUxMU0JJTlBST0dTPSBAU05NUERACiBJTlNUQUxMTElCUwk9IGxpYm5ldHNubXBhZ2VudC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIElOU1RBTExQT1NUTElCUwk9IGxpYm5ldHNubXBtaWJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogCiBJTkNMVURFU1VCRElSPWFnZW50Ci1JTkNMVURFU1VCRElSSEVBREVSUz1hZ2VudF9yZWFkX2NvbmZpZy5oIFwKK0hFQURFUlM9XAorCWFnZW50X3JlYWRfY29uZmlnLmggXAogCWFnZW50X3JlZ2lzdHJ5LmggXAogCWFnZW50X2luZGV4LmggXAorCWFnZW50X3N5c09SVGFibGUuaCBcCiAJYWdlbnRfdHJhcC5oIFwKIAlhdXRvX25saXN0LmggXAogCWRzX2FnZW50LmggXApAQCAtMzQsNyArMzgsMzggQEAKIAlhZ2VudF9oYW5kbGVyLmggXAogCW5ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmggXAogCW1pYl9tb2R1bGVzLmggXAotCWFnZW50X2NhbGxiYWNrcy5oCisJYWdlbnRfY2FsbGJhY2tzLmggXAorCXN5c09SVGFibGUuaCBcCisJYWxsX2hlbHBlcnMuaCBcCisJYmFieV9zdGVwcy5oIFwKKwlidWxrX3RvX25leHQuaCBcCisJY2FjaGVfaGFuZGxlci5oIFwKKwlkZWJ1Z19oYW5kbGVyLmggXAorCWluc3RhbmNlLmggXAorCW1vZGVfZW5kX2NhbGwuaCBcCisJbXVsdGlwbGV4ZXIuaCBcCisJbnVsbC5oIFwKKwlvbGRfYXBpLmggXAorCXJlYWRfb25seS5oIFwKKwlyb3dfbWVyZ2UuaCBcCisJc2NhbGFyLmggXAorCXNjYWxhcl9ncm91cC5oIFwKKwlzZXJpYWxpemUuaCBcCisJc25tcF9nZXRfc3RhdGlzdGljLmggXAorCXN0YXNoX2NhY2hlLmggXAorCXN0YXNoX3RvX25leHQuaCBcCisJdGFibGVfYXJyYXkuaCBcCisJdGFibGVfY29udGFpbmVyLmggXAorCXRhYmxlLmggXAorCXRhYmxlX2RhdGEuaCBcCisJdGFibGVfZGF0YXNldC5oIFwKKwl0YWJsZV90ZGF0YS5oIFwKKwl0YWJsZV9pdGVyYXRvci5oIFwKKwl3YXRjaGVyLmgKKworSEVBREVSU09OTFk9bWZkLmggc2V0X2hlbHBlci5oCisKK0lOQ0xVREVTVUJESVJIRUFERVJTPSQoSEVBREVSUykgJChIRUFERVJTT05MWSkKIAogSU5TVEFMTEJVSUxUU1VCRElSSEVBREVSUz0uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggXAogCQkJICAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaCBcCkBAIC00Miw3ICs3Nyw4IEBACiBJTlNUQUxMQlVJTFRTVUJESVI9YWdlbnQKIAogSU5DTFVERU1JQkdST1VQRElSPWFnZW50L21pYmdyb3VwCi1JTkNMVURFTUlCR1JPVVBESVJIRUFERVJTPXV0aWxfZnVuY3MuaAorSU5DTFVERU1JQkdST1VQRElSSEVBREVSUz1zdHJ1Y3QuaCB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIFwKKwl1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKIAogT1RIRVJJTlNUQUxMPWluc3RhbGxtaWJncm91cGhlYWRlcnMgQEVNQkVEUEVSTElOU1RBTExACiBPVEhFUlVOSU5TVEFMTD1ARU1CRURQRVJMVU5JTlNUQUxMQApAQCAtNjAsNiArOTYsNyBAQAogCWFnZW50X2luZGV4LmgJXAogCWFnZW50X3JlYWRfY29uZmlnLmggXAogCWFnZW50X3JlZ2lzdHJ5LmggXAorCWFnZW50X3N5c09SVGFibGUuaCBcCiAJYWdlbnRfdHJhcC5oCVwKIAlhdXRvX25saXN0LmgJXAogCWRzX2FnZW50LmgJXApAQCAtNzUsMTYgKzExMiwxNiBAQAogIyBob3cgdG8gYnVpbGQgaXQgaW5mbwogIwogVVNFTElCUwkJPSAuLi9zbm1wbGliL2xpYm5ldHNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCi1IRUxQRVJMSUIJPSBoZWxwZXJzL2xpYm5ldHNubXBoZWxwZXJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogQUdFTlRMSUIJPSBsaWJuZXRzbm1wYWdlbnQuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCiBNSUJMSUIJCT0gbGlibmV0c25tcG1pYnMuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCiAKIExBR0VOVExJQlMJPSBATEFHRU5UTElCU0AKIExNSUJMSUJTCT0gQExNSUJMSUJTQAorVkFMX0xJQlMJPSBAVkFMX0xJQlNACiBQRVJMTERPUFRTX0ZPUl9BUFBTID0gQFBFUkxMRE9QVFNfRk9SX0FQUFNACiBQRVJMTERPUFRTX0ZPUl9MSUJTID0gQFBFUkxMRE9QVFNfRk9SX0xJQlNACi1MSUJTCQk9ICQoVVNFTElCUykgQEFHRU5UTElCU0AgJChQRVJMTERPUFRTX0ZPUl9BUFBTKQotT1VSX0FHRU5UX0xJQlMJPSAkKEFHRU5UTElCKSAkKEhFTFBFUkxJQikgJChNSUJMSUIpICQoTElCUykgQERMTElCU0AKK0xJQlMJCT0gJChVU0VMSUJTKSBAQUdFTlRMSUJTQCAkKFBFUkxMRE9QVFNfRk9SX0FQUFMpICQoVkFMX0xJQlMpCitPVVJfQUdFTlRfTElCUwk9ICQoQUdFTlRMSUIpICQoTUlCTElCKSAkKExJQlMpIEBETExJQlNACiBDUFBGTEFHUwk9ICQoVE9QX0lOQ0xVREVTKSAtSS4gJChBR0VOVF9JTkNMVURFUykgJChNSUJHUk9VUF9JTkNMVURFUykgXAogCQkgICQoU05NUExJQl9JTkNMVURFUykgQENQUEZMQUdTQCAKIApAQCAtOTUsMzAgKzEzMiwxNDkgQEAKIAogIyBsaWJuZXRzbm1wbWlicyBvYmplY3RzLgogQG1pYmdyb3VwX2xpc3RfbG9ACitAbWliZ3JvdXBfbGlzdF9mdEAKIEBtaWJncm91cF9saXN0X29ACiBAYWdlbnRncm91cF9saXN0X2xvQAorQGFnZW50Z3JvdXBfbGlzdF9mdEAKIEBhZ2VudGdyb3VwX2xpc3Rfb0AKK0ZUTUlCT0JKUwk9ICQobWliZ3JvdXBfbGlzdF9mdCkgbWliX21vZHVsZXMuZnQgYXV0b19ubGlzdC5mdAogTE1JQk9CSlMJPSAkKG1pYmdyb3VwX2xpc3RfbG8pIG1pYl9tb2R1bGVzLmxvIGF1dG9fbmxpc3QubG8KIE1JQk9CSlMJCT0gJChtaWJncm91cF9saXN0X28pIG1pYl9tb2R1bGVzLm8gYXV0b19ubGlzdC5vCiAKICMgbGlibmV0c25tcGFnZW50IG9iamVjdHMKLUxJQkFHRU5UT0JKUz1zbm1wX2FnZW50Lm8gc25tcF92YXJzLm8gYWdlbnRfcmVhZF9jb25maWcubyBcCi0JYWdlbnRfcmVnaXN0cnkubyBhZ2VudF9pbmRleC5vIGFnZW50X3RyYXAubyBrZXJuZWwubyBcCi0JIGFnZW50X2hhbmRsZXIubyAkKGFnZW50Z3JvdXBfbGlzdF9vKSBAT1RIRVJBR0VOVExJQk9CSlNACi1MTElCQUdFTlRPQkpTPXNubXBfYWdlbnQubG8gc25tcF92YXJzLmxvIGFnZW50X3JlYWRfY29uZmlnLmxvIFwKLQlhZ2VudF9yZWdpc3RyeS5sbyBhZ2VudF9pbmRleC5sbyBhZ2VudF90cmFwLmxvIGtlcm5lbC5sbyBcCi0JYWdlbnRfaGFuZGxlci5sbyAkKGFnZW50Z3JvdXBfbGlzdF9sbykgQE9USEVSQUdFTlRMSUJMT0JKU0AKK0xJQkFHRU5UT0JKUz0gXAorCWhlbHBlcnMvYWxsX2hlbHBlcnMubyBcCisJaGVscGVycy9iYWJ5X3N0ZXBzLm8gXAorCWhlbHBlcnMvYnVsa190b19uZXh0Lm8gXAorCWhlbHBlcnMvY2FjaGVfaGFuZGxlci5vIFwKKwloZWxwZXJzL2RlYnVnX2hhbmRsZXIubyBcCisJaGVscGVycy9pbnN0YW5jZS5vIFwKKwloZWxwZXJzL21vZGVfZW5kX2NhbGwubyBcCisJaGVscGVycy9tdWx0aXBsZXhlci5vIFwKKwloZWxwZXJzL251bGwubyBcCisJaGVscGVycy9vbGRfYXBpLm8gXAorCWhlbHBlcnMvcmVhZF9vbmx5Lm8gXAorCWhlbHBlcnMvcm93X21lcmdlLm8gXAorCWhlbHBlcnMvc2NhbGFyLm8gXAorCWhlbHBlcnMvc2NhbGFyX2dyb3VwLm8gXAorCWhlbHBlcnMvc2VyaWFsaXplLm8gXAorCWhlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLm8gXAorCWhlbHBlcnMvc3Rhc2hfY2FjaGUubyBcCisJaGVscGVycy9zdGFzaF90b19uZXh0Lm8gXAorCWhlbHBlcnMvdGFibGUubyBcCisJaGVscGVycy90YWJsZV9hcnJheS5vIFwKKwloZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5vIFwKKwloZWxwZXJzL3RhYmxlX2RhdGEubyBcCisJaGVscGVycy90YWJsZV9kYXRhc2V0Lm8gXAorCWhlbHBlcnMvdGFibGVfaXRlcmF0b3IubyBcCisJaGVscGVycy90YWJsZV9yb3cubyBcCisJaGVscGVycy90YWJsZV90ZGF0YS5vIFwKKwloZWxwZXJzL3dhdGNoZXIubyBcCisJYWdlbnRfaGFuZGxlci5vIFwKKwlhZ2VudF9pbmRleC5vIFwKKwlhZ2VudF9yZWFkX2NvbmZpZy5vIFwKKwlhZ2VudF9yZWdpc3RyeS5vIFwKKwlhZ2VudF9zeXNPUlRhYmxlLm8gXAorCWFnZW50X3RyYXAubyBcCisJa2VybmVsLm8gXAorCXNubXBfYWdlbnQubyBcCisJc25tcF92YXJzLm8gXAorCSQoYWdlbnRncm91cF9saXN0X28pIFwKKwlAT1RIRVJBR0VOVExJQk9CSlNACisKK0xMSUJBR0VOVE9CSlM9IFwKKwloZWxwZXJzL2FsbF9oZWxwZXJzLmxvIFwKKwloZWxwZXJzL2JhYnlfc3RlcHMubG8gXAorCWhlbHBlcnMvYnVsa190b19uZXh0LmxvIFwKKwloZWxwZXJzL2NhY2hlX2hhbmRsZXIubG8gXAorCWhlbHBlcnMvZGVidWdfaGFuZGxlci5sbyBcCisJaGVscGVycy9pbnN0YW5jZS5sbyBcCisJaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvIFwKKwloZWxwZXJzL211bHRpcGxleGVyLmxvIFwKKwloZWxwZXJzL251bGwubG8gXAorCWhlbHBlcnMvb2xkX2FwaS5sbyBcCisJaGVscGVycy9yZWFkX29ubHkubG8gXAorCWhlbHBlcnMvcm93X21lcmdlLmxvIFwKKwloZWxwZXJzL3NjYWxhci5sbyBcCisJaGVscGVycy9zY2FsYXJfZ3JvdXAubG8gXAorCWhlbHBlcnMvc2VyaWFsaXplLmxvIFwKKwloZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbyBcCisJaGVscGVycy9zdGFzaF9jYWNoZS5sbyBcCisJaGVscGVycy9zdGFzaF90b19uZXh0LmxvIFwKKwloZWxwZXJzL3RhYmxlLmxvIFwKKwloZWxwZXJzL3RhYmxlX2FycmF5LmxvIFwKKwloZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbyBcCisJaGVscGVycy90YWJsZV9kYXRhLmxvIFwKKwloZWxwZXJzL3RhYmxlX2RhdGFzZXQubG8gXAorCWhlbHBlcnMvdGFibGVfaXRlcmF0b3IubG8gXAorCWhlbHBlcnMvdGFibGVfcm93LmxvIFwKKwloZWxwZXJzL3RhYmxlX3RkYXRhLmxvIFwKKwloZWxwZXJzL3dhdGNoZXIubG8gXAorCWFnZW50X2hhbmRsZXIubG8gXAorCWFnZW50X2luZGV4LmxvIFwKKwlhZ2VudF9yZWFkX2NvbmZpZy5sbyBcCisJYWdlbnRfcmVnaXN0cnkubG8gXAorCWFnZW50X3N5c09SVGFibGUubG8gXAorCWFnZW50X3RyYXAubG8gXAorCWtlcm5lbC5sbyBcCisJc25tcF9hZ2VudC5sbyBcCisJc25tcF92YXJzLmxvIFwKKwkkKGFnZW50Z3JvdXBfbGlzdF9sbykgXAorCUBPVEhFUkFHRU5UTElCTE9CSlNACisKK0xMSUJBR0VOVEZUUz0gXAorCWhlbHBlcnMvYWxsX2hlbHBlcnMuZnQgXAorCWhlbHBlcnMvYmFieV9zdGVwcy5mdCBcCisJaGVscGVycy9idWxrX3RvX25leHQuZnQgXAorCWhlbHBlcnMvY2FjaGVfaGFuZGxlci5mdCBcCisJaGVscGVycy9kZWJ1Z19oYW5kbGVyLmZ0IFwKKwloZWxwZXJzL2luc3RhbmNlLmZ0IFwKKwloZWxwZXJzL21vZGVfZW5kX2NhbGwuZnQgXAorCWhlbHBlcnMvbXVsdGlwbGV4ZXIuZnQgXAorCWhlbHBlcnMvbnVsbC5mdCBcCisJaGVscGVycy9vbGRfYXBpLmZ0IFwKKwloZWxwZXJzL3JlYWRfb25seS5mdCBcCisJaGVscGVycy9yb3dfbWVyZ2UuZnQgXAorCWhlbHBlcnMvc2NhbGFyLmZ0IFwKKwloZWxwZXJzL3NjYWxhcl9ncm91cC5mdCBcCisJaGVscGVycy9zZXJpYWxpemUuZnQgXAorCWhlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmZ0IFwKKwloZWxwZXJzL3N0YXNoX2NhY2hlLmZ0IFwKKwloZWxwZXJzL3N0YXNoX3RvX25leHQuZnQgXAorCWhlbHBlcnMvdGFibGUuZnQgXAorCWhlbHBlcnMvdGFibGVfYXJyYXkuZnQgXAorCWhlbHBlcnMvdGFibGVfY29udGFpbmVyLmZ0IFwKKwloZWxwZXJzL3RhYmxlX2RhdGEuZnQgXAorCWhlbHBlcnMvdGFibGVfZGF0YXNldC5mdCBcCisJaGVscGVycy90YWJsZV9pdGVyYXRvci5mdCBcCisJaGVscGVycy90YWJsZV9yb3cuZnQgXAorCWhlbHBlcnMvdGFibGVfdGRhdGEuZnQgXAorCWhlbHBlcnMvd2F0Y2hlci5mdCBcCisJYWdlbnRfaGFuZGxlci5mdCBcCisJYWdlbnRfaW5kZXguZnQgXAorCWFnZW50X3JlYWRfY29uZmlnLmZ0IFwKKwlhZ2VudF9yZWdpc3RyeS5mdCBcCisJYWdlbnRfc3lzT1JUYWJsZS5mdCBcCisJYWdlbnRfdHJhcC5mdCBcCisJa2VybmVsLmZ0IFwKKwlzbm1wX2FnZW50LmZ0IFwKKwlzbm1wX3ZhcnMuZnQgXAorCSQoYWdlbnRncm91cF9saXN0X2Z0KSBcCisJQE9USEVSQUdFTlRMSUJMRlRTQAogCiAjIFRoZSBhZ2VudCBvYmplY3RzLgogQUdFTlRPQkpTPXNubXBkLm8gQG90aGVyX2FnZW50b2Jqc0AKIExBR0VOVE9CSlM9c25tcGQubG8gQG90aGVyX2xhZ2VudG9ianNACitGVEFHRU5UT0JKUz1zbm1wZC5mdCBAb3RoZXJfZnRhZ2VudG9ianNACiAKICMKICMgRGVmaW5lIE9CSlMgYW5kIExPQkpTIGZvciBjbGVhbiB0YXJnZXQgKGp1c3QgdGhpcyBkaXJlY3RvcnkpCiAjCiBPQkpTCQk9ICQoTElCQUdFTlRPQkpTKSAgJChBR0VOVE9CSlMpICBtaWJfbW9kdWxlcy5vICBhdXRvX25saXN0Lm8KIExPQkpTCQk9ICQoTExJQkFHRU5UT0JKUykgJChMQUdFTlRPQkpTKSBtaWJfbW9kdWxlcy5sbyBhdXRvX25saXN0LmxvCitGVE9CSlMJCT0gJChMTElCQUdFTlRGVFMpICQoRlRBR0VOVE9CSlMpIG1pYl9tb2R1bGVzLmZ0IGF1dG9fbmxpc3QuZnQKIAorRkVBVFVSRUZJTEUgICAgID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZmVhdHVyZXMuaAogCiBhbGw6IGFnZW50bGliIHN1YmRpcnMgbWlibGliICQoSU5TVEFMTEJJTlBST0dTKSAkKElOU1RBTExTQklOUFJPR1MpCiAKQEAgLTE0MCwxMyArMjk2LDEyIEBACiBzbm1wZCQoRVhFRVhUKToJJHtMQUdFTlRPQkpTfSAkKFVTRUxJQlMpICQoQUdFTlRMSUIpICQoSEVMUEVSTElCKSAkKE1JQkxJQikgJChMSUJUQVJHKSAKIAkkKExJTkspICQoQ0ZMQUdTKSAtbyAkQCAke0xBR0VOVE9CSlN9ICR7TERGTEFHU30gJHtPVVJfQUdFTlRfTElCU30KIAotCiBsaWJuZXRzbm1wYWdlbnQuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pOiAgICAke0xMSUJBR0VOVE9CSlN9ICQoVVNFTElCUykKLQkkKExJQl9MRF9DTUQpICQoQUdFTlRMSUIpICR7TExJQkFHRU5UT0JKU30gJChVU0VMSUJTKSAke0xBR0VOVExJQlN9ICQoTERGTEFHUykgJChQRVJMTERPUFRTX0ZPUl9MSUJTKSAkKExJQl9MRF9MSUJTKQorCSQoTElCX0xEX0NNRCkgJChBR0VOVExJQikgJHtMTElCQUdFTlRPQkpTfSAkKFVTRUxJQlMpICR7TEFHRU5UTElCU30gQExEX05PX1VOREVGSU5FREAgJChMREZMQUdTKSAkKFBFUkxMRE9QVFNfRk9SX0xJQlMpICQoTElCX0xEX0xJQlMpIEBBR0VOVExJQlNACiAJJChSQU5MSUIpICQoQUdFTlRMSUIpCiAKLWxpYm5ldHNubXBtaWJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogJHtMTUlCT0JKU30gJChIRUxQRVJMSUIpICQoQUdFTlRMSUIpICQoVVNFTElCUykKLQkkKExJQl9MRF9DTUQpICQoTUlCTElCKSAke0xNSUJPQkpTfSAkKEhFTFBFUkxJQikgJChBR0VOVExJQikgJChVU0VMSUJTKSAke0xNSUJMSUJTfSAkKExERkxBR1MpICQoTElCX0xEX0xJQlMpCitsaWJuZXRzbm1wbWlicy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTik6ICR7TE1JQk9CSlN9ICQoQUdFTlRMSUIpICQoVVNFTElCUykKKwkkKExJQl9MRF9DTUQpICQoTUlCTElCKSAke0xNSUJPQkpTfSAkKEFHRU5UTElCKSAkKFVTRUxJQlMpIEBMRF9OT19VTkRFRklORURAICQoTERGTEFHUykgJHtMTUlCTElCU30gJChQRVJMTERPUFRTX0ZPUl9MSUJTKSAkKExJQl9MRF9MSUJTKSBAQUdFTlRMSUJTQAogCSQoUkFOTElCKSAkKE1JQkxJQikKIAogYWdlbnRsaWI6ICQoQUdFTlRMSUIpCkBAIC0xNjUsMTUgKzMyMCwxNiBAQAogCSAgQGVjaG8gInJlbW92ZWQgc25tcF9wZXJsLnBsIGZyb20gJChJTlNUQUxMX1BSRUZJWCkkKHNubXBsaWJkaXIpIgogCiBpbnN0YWxsbWliZ3JvdXBoZWFkZXJzOgotCUBpZiB0ZXN0ICIkKElOQ0xVREVNSUJHUk9VUERJUkhFQURFUlMpIiAhPSAiIiA7IHRoZW4gXAotICAgICAgICAgICAgICAgIGVjaG8gY3JlYXRpbmcgZGlyZWN0b3J5ICQoSU5TVEFMTF9QUkVGSVgpJChpbmNsdWRlZGlyKS9hZ2VudCA7IFwKLSAgICAgICAgICAgICAgICBpdD0iJChJTkNMVURFTUlCR1JPVVBESVJIRUFERVJTKSIgOyBcCi0gICAgICAgICAgICAgICAgJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoSU5TVEFMTF9QUkVGSVgpJChpbmNsdWRlZGlyKS9hZ2VudCA7IFwKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiAkJGl0IDsgZG8gXAotICAgICAgICAgICAgICAgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICQodG9wX3NyY2RpcikvJChJTkNMVURFTUlCR1JPVVBESVIpLyQkaSAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQgOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJpbnN0YWxsaW5nICQkaSBpbiAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQiIDsgXAotICAgICAgICAgICAgICAgIGRvbmUgXAotICAgICAgICBmaQorCUBmb3IgaXQgaW4gJChJTkNMVURFTUlCR1JPVVBESVJIRUFERVJTKSA7IGRvIFwKKwkJaXRkPWBkaXJuYW1lICIkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQvJCRpdCJgIDsgXAorCQlpZiBbICEgLWQgIiQkaXRkIiBdIDsgdGhlbiBcCisJCQllY2hvICJjcmVhdGluZyBkaXJlY3RvcnkgJCRpdGQiIDsgXAorCQkJJChTSEVMTCkgIiQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIgIiQkaXRkIiA7IFwKKwkJZmkgOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAiJCh0b3Bfc3JjZGlyKS8kKElOQ0xVREVNSUJHUk9VUERJUikvJCRpdCIgXAorCQkJIiQkaXRkIiA7IFwKKwkJZWNobyAiaW5zdGFsbGluZyAkJGl0IGluICQkaXRkIiA7IFwKKwlkb25lCiAKIEBtb2R1bGVfbGlzdF9kZXBzQAogQGFnZW50X21vZHVsZV9saXN0X2RlcHNACkBAIC0xODQsMTAgKzM0MCw2IEBACiAjIGRlcGVuZGVuY3kgZm9yIHNubXBsaWIgb2JqZWN0LiBpdCdzIGhlcmUgYmVjYXVzZSB0aGUgaGVhZGVycyBsaXN0ZWQKICMgYXJlIHJlbGF0aXZlIHRvIHRoZSBhZ2VudCBkaXJlY3RvcnkuCiAKLSQoSEVMUEVSTElCKTogc3ViZGlycwotIyB0aGUgYWJvdmUgaXMgbmVlZGVkIHdoZW4gYnVpbGRpbmcgd2l0aCAnLWonIGFyZ3VtZW50IC0gZXZlcnl0aGluZyB3aGF0IG5lZWRzIAotIyBoZWxwZXIgbGliIG11c3Qgd2FpdCB1bnRpbCAnc3ViZGlycycgdGFyZ2V0IGlzIGZpbmlzaGVkCi0KIHN1YmRpcnM6IGFnZW50bGliCiAjIHdhaXQgZm9yIGFnZW50bGliIGJlZm9yZSBidWlsZGluZyAnc3ViZGlycycgdGFyZ2V0CiAKZGlmZiAtLWdpdCBhL2FnZW50L2FnZW50X2hhbmRsZXIuYyBiL2FnZW50L2FnZW50X2hhbmRsZXIuYwppbmRleCBmY2JjNmRkLi41OWU5NjEzIDEwMDY0NAotLS0gYS9hZ2VudC9hZ2VudF9oYW5kbGVyLmMKKysrIGIvYWdlbnQvYWdlbnRfaGFuZGxlci5jCkBAIC05LDYgKzksNyBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIApAQCAtMjEsNiArMjIsOSBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF9oYW5kbGVyLCBsaWJuZXRzbm1wYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkLCBhZ2VudF9oYW5kbGVyKQogCiBzdGF0aWMgbmV0c25tcF9taWJfaGFuZGxlciAqX2Nsb25lX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaXQpOwogCkBAIC04NCw5ICs4OCwxMSBAQAogICogQHsKICAqLwogCi0vKiogY3JlYXRlcyBhIG5ldHNubXBfbWliX2hhbmRsZXIgc3RydWN0dXJlIGdpdmVuIGEgbmFtZSBhbmQgYSBhY2Nlc3MgbWV0aG9kLgorLyoqIENyZWF0ZXMgYSBNSUIgaGFuZGxlciBzdHJ1Y3R1cmUuCisgKiAgVGhlIG5ldyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGFuZCBmaWxsZWQgdXNpbmcgdGhlIGdpdmVuIG5hbWUKKyAqICBhbmQgYWNjZXNzIG1ldGhvZC4KICAqICBUaGUgcmV0dXJuZWQgaGFuZGxlciBzaG91bGQgdGhlbiBiZSBAbGluayBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKQotICogIHJlZ2lzdGVyZWQuQGVuZGxpbmsKKyAqICByZWdpc3RlcmVkIEBlbmRsaW5rLgogICoKICAqICBAcGFyYW0gbmFtZSBpcyB0aGUgaGFuZGxlciBuYW1lIGFuZCBpcyBjb3BpZWQgdGhlbiBhc3NpZ25lZCB0bwogICogICAgICAgICAgICAgIG5ldHNubXBfbWliX2hhbmRsZXItPmhhbmRsZXJfbmFtZQpAQCAtMTE3LDggKzEyMyw5IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotLyoqIGNyZWF0ZXMgYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgZ2l2ZW4gYSBuYW1lLCBhCi0gKiAgYWNjZXNzX21ldGhvZCBmdW5jdGlvbiwgYSByZWdpc3RyYXRpb24gbG9jYXRpb24gb2lkIGFuZCB0aGUgbW9kZXMKKy8qKiBDcmVhdGVzIGEgTUlCIGhhbmRsZXIgc3RydWN0dXJlLgorICogIFRoZSBuZXcgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBhbmQgZmlsbGVkIHVzaW5nIHRoZSBnaXZlbiBuYW1lLAorICogIGFjY2VzcyBmdW5jdGlvbiwgcmVnaXN0cmF0aW9uIGxvY2F0aW9uIE9JRCBhbmQgbGlzdCBvZiBtb2RlcyB0aGF0CiAgKiAgdGhlIGhhbmRsZXIgc3VwcG9ydHMuIElmIG1vZGVzID09IDAsIHRoZW4gbW9kZXMgd2lsbCBhdXRvbWF0aWNhbGx5CiAgKiAgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlIG9mIG9ubHkgSEFORExFUl9DQU5fREVGQVVMVCwgd2hpY2ggaXMKICAqICBieSBkZWZhdWx0IHJlYWQtb25seSBHRVQgYW5kIEdFVE5FWFQgcmVxdWVzdHMuIEEgaGFuZGVyIHdoaWNoIHN1cHBvcnRzCkBAIC0xMzMsNyArMTQwLDcgQEAKICAqCiAgKiAgQHBhcmFtIHJlZ19vaWQgaXMgdGhlIHJlZ2lzdHJhdGlvbiBsb2NhdGlvbiBvaWQuCiAgKgotICogIEBwYXJhbSByZWdfb2lkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHJlZ19vaWQsIGNhbiB1c2UgdGhlIG1hY3JvLAorICogIEBwYXJhbSByZWdfb2lkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHJlZ19vaWQ7IGNhbiB1c2UgdGhlIG1hY3JvLAogICogICAgICAgICBPSURfTEVOR1RICiAgKgogICogIEBwYXJhbSBtb2RlcyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSByZWFkL3dyaXRlIGFjY2Vzcy4gIElmIG1vZGVzID09IDAsIApAQCAtMTYyLDcgKzE2OSw3IEBACiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICoKIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGVzKQogewogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnRoZV9yZWc7CkBAIC0xNzksMjQgKzE4Niw2OCBAQAogICAgIHRoZV9yZWctPnByaW9yaXR5ID0gREVGQVVMVF9NSUJfUFJJT1JJVFk7CiAgICAgaWYgKG5hbWUpCiAgICAgICAgIHRoZV9yZWctPmhhbmRsZXJOYW1lID0gc3RyZHVwKG5hbWUpOwotICAgIHRoZV9yZWctPnJvb3RvaWQgPSBuZXRzbm1wX21lbWR1cChyZWdfb2lkLCByZWdfb2lkX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICB0aGVfcmVnLT5yb290b2lkID0gc25tcF9kdXBsaWNhdGVfb2JqaWQocmVnX29pZCwgcmVnX29pZF9sZW4pOwogICAgIHRoZV9yZWctPnJvb3RvaWRfbGVuID0gcmVnX29pZF9sZW47CiAgICAgcmV0dXJuIHRoZV9yZWc7CiB9CiAKKy8qKiBDcmVhdGVzIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIHdpdGggYSBuZXcgTUlCIGhhbmRsZXIuCisgKiAgVGhpcyBmdW5jdGlvbiBmaXJzdCBAbGluayBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCkgY3JlYXRlcyBAZW5kbGluaworICogIGEgTUlCIGhhbmRsZXIsIHRoZW4gQGxpbmsgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoKQorICogIG1ha2VzIHJlZ2lzdGF0aW9uIHN0cnVjdHVyZSBAZW5kbGluayBmb3IgaXQuCisgKgorICogIEBwYXJhbSBuYW1lIGlzIHRoZSBoYW5kbGVyIG5hbWUgZm9yIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoKQorICoKKyAqICBAcGFyYW0gaGFuZGxlcl9hY2Nlc3NfbWV0aG9kIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB1c2VkIGFzIHRoZSBhY2Nlc3MKKyAqICAgICBtZXRob2QgZm9yIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoKQorICoKKyAqICBAcGFyYW0gcmVnX29pZCBpcyB0aGUgcmVnaXN0cmF0aW9uIGxvY2F0aW9uIG9pZC4KKyAqCisgKiAgQHBhcmFtIHJlZ19vaWRfbGVuIGlzIHRoZSBsZW5ndGggb2YgcmVnX29pZDsgY2FuIHVzZSB0aGUgbWFjcm8sCisgKiAgICAgICAgIE9JRF9MRU5HVEgKKyAqCisgKiAgQHBhcmFtIG1vZGVzIGlzIHVzZWQgdG8gY29uZmlndXJlIHJlYWQvd3JpdGUgYWNjZXNzLCBhcyBpbgorICogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgpCisgKgorICogIEByZXR1cm4gUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdC4KKyAqICAgICAgICAgIElmIHRoZSBzdHJ1Y3R1cmVzIGNyZWF0aW9uIGZhaWxlZCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCkKKyAqICBAc2VlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKCkKKyAqLwogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqCiBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbihjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kLCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kLCBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgbW9kZXMpCiB7Ci0gICAgcmV0dXJuCi0gICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIobmFtZSwgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sIG1vZGVzKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpydiA9IE5VTEw7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIobmFtZSwgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kKTsKKyAgICBpZiAoaGFuZGxlcikgeworICAgICAgICBydiA9IG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKAorICAgICAgICAgICAgbmFtZSwgaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIG1vZGVzKTsKKyAgICAgICAgaWYgKCFydikKKyAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOworICAgIH0KKyAgICByZXR1cm4gcnY7CiB9CiAKLS8qKiByZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gKi8KKy8qKiBSZWdpc3RlcnMgYSBNSUIgaGFuZGxlciBpbnNpZGUgdGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUuCisgKiAgQ2hlY2tzIGdpdmVuIHJlZ2lzdGF0aW9uIGhhbmRsZXIgZm9yIHNhbml0eSwgdGhlbgorICogIEBsaW5rIG5ldHNubXBfcmVnaXN0ZXJfbWliKCkgcGVyZm9ybXMgcmVnaXN0cmF0aW9uIEBlbmRsaW5rCisgKiAgaW4gdGhlIE1JQiB0cmVlLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgKiAgcG9pbnRlci4gT24gc3VjY2VzcywgU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiBpcyBjYWxsZWQuCisgKiAgVGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3QgbWF5IGJlIGNyZWF0ZWQgYnkgY2FsbCBvZgorICogIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkuCisgKgorICogIEBwYXJhbSByZWdpbmZvIFBvaW50ZXIgdG8gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdC4KKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QX0VSUl8qIGVycm9yIGNvZGUuCisgKgorICogIEBzZWUgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oKQorICogIEBzZWUgbmV0c25tcF9yZWdpc3Rlcl9taWIoKQorICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQogewpAQCAtMjYxLDcgKzMxMiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLCAxKTsKIH0KIAotLyoqIHVucmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuICovCisvKiogVW5yZWdpc3RlcnMgYSBNSUIgaGFuZGxlciBkZXNjcmliZWQgaW5zaWRlIHRoZSByZWdpc3RyYXRpb24gc3RydWN0dXJlLgorICogIFJlbW92ZXMgYSByZWdpc3RyYXRpb24sIHBlcmZvcm1lZCBlYXJsaWVyIGJ5CisgKiAgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKCksIGZyb20gdGhlIE1JQiB0cmVlLgorICogIFVzZXMgdW5yZWdpc3Rlcl9taWJfY29udGV4dCgpIHRvIGRvIHRoZSB0YXNrLgorICoKKyAqICBAcGFyYW0gcmVnaW5mbyBQb2ludGVyIHRvIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpCisgKiAgQHNlZSB1bnJlZ2lzdGVyX21pYl9jb250ZXh0KCkKKyAqLwogaW50CiBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQogewpAQCAtMjcxLDcgKzMzMywyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPmNvbnRleHROYW1lKTsKIH0KIAotLyoqIHJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiAqLworLyoqIFJlZ2lzdGVycyBhIE1JQiBoYW5kbGVyIGluc2lkZSB0aGUgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZS4KKyAqICBDaGVja3MgZ2l2ZW4gcmVnaXN0YXRpb24gaGFuZGxlciBmb3Igc2FuaXR5LCB0aGVuCisgKiAgQGxpbmsgbmV0c25tcF9yZWdpc3Rlcl9taWIoKSBwZXJmb3JtcyByZWdpc3RyYXRpb24gQGVuZGxpbmsKKyAqICBpbiB0aGUgTUlCIHRyZWUsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAqICBwb2ludGVyLiBOZXZlciBjYWxscyBTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLgorICogIFRoZSByZWdpc3RyYXRpb24gc3RydWN0IG1heSBiZSBjcmVhdGVkIGJ5IGNhbGwgb2YKKyAqICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigpLgorICoKKyAqICBAcGFyYW0gcmVnaW5mbyBQb2ludGVyIHRvIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfbWliKCkKKyAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfbm9jYWxsYmFjayhuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQogewpAQCAtMzE5LDExICszOTUsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mbywgMCk7CiB9CiAKLS8qKiBpbmplY3QgYSBuZXcgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIHRoZSBoYW5kbGVycwotICAgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiAgVGhlIG5ldwotICAgaGFuZGxlciBpcyBpbmplY3RlZCBhZnRlciB0aGUgYmVmb3JlX3doYXQgaGFuZGxlciwgb3IgaWYgTlVMTCBhdAotICAgdGhlIHRvcCBvZiB0aGUgbGlzdCBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgbmV3IGhhbmRsZXIgdG8gYmUgY2FsbGVkCi0gICBmaXJzdC4qLworLyoqIEluamVjdHMgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIGhhbmRsZXJzLgorICogIFRoZSBnaXZlbiBNSUIgaGFuZGxlciBpcyBpbnNlcnRlZCBhZnRlciB0aGUgaGFuZGxlciBuYW1lZCBiZWZvcmVfd2hhdC4KKyAqICBJZiBiZWZvcmVfd2hhdCBpcyBOVUxMLCB0aGUgaGFuZGxlciBpcyBwdXQgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCwKKyAqICBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgZmlyc3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkKKyAqICBAc2VlIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIoKQorICovCiBpbnQKIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtMzc3LDEwICs0NTgsMTUgQEAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCi0vKiogaW5qZWN0IGEgbmV3IGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiB0aGUgaGFuZGxlcnMKLSAgIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gIFRoZSBuZXcgaGFuZGxlciBpcwotICAgaW5qZWN0ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgbmV3IGhhbmRsZXIKLSAgIHRvIGJlIGNhbGxlZCBmaXJzdC4qLworLyoqIEluamVjdHMgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIGhhbmRsZXJzLgorICogIFRoZSBnaXZlbiBNSUIgaGFuZGxlciBpcyBwdXQgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCwKKyAqICBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgZmlyc3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkKKyAqICBAc2VlIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCkKKyAqLwogaW50CiBuZXRzbm1wX2luamVjdF9oYW5kbGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIpCkBAIC0zODgsNyArNDc0LDEzIEBACiAgICAgcmV0dXJuIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKHJlZ2luZm8sIGhhbmRsZXIsIE5VTEwpOwogfQogCi0vKiogY2FsbHMgYSBoYW5kbGVyIHdpdGggd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nIG9mIGFyZ3VtZW50cywgZXRjLiAqLworLyoqIENhbGxzIGEgTUlCIGhhbmRsZXJzIGNoYWluLCBzdGFydGluZyB3aXRoIHNwZWNpZmljIGhhbmRsZXIuCisgKiAgVGhlIGdpdmVuIGFyZ3VtZW50cyBhbmQgTUlCIGhhbmRsZXIgYXJlIGNoZWNrZWQKKyAqICBmb3Igc2FuaXR5LCB0aGVuIHRoZSBoYW5kbGVycyBhcmUgY2FsbGVkLCBvbmUgYnkgb25lLAorICogIHVudGlsIG5leHQgaGFuZGxlciBpcyBOVUxMLgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KKyAqLwogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NhbGxfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpuZXh0X2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApAQCAtNDA5LDUzICs1MDEsNTUgQEAKICAgICB9CiAKICAgICBkbyB7Ci0gICAgbmggPSBuZXh0X2hhbmRsZXItPmFjY2Vzc19tZXRob2Q7Ci0gICAgaWYgKCFuaCkgewotICAgICAgICBpZiAobmV4dF9oYW5kbGVyLT5uZXh0KSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gYWNjZXNzIG1ldGhvZCBzcGVjaWZpZWQgaW4gaGFuZGxlciAlcy4iLAotICAgICAgICAgICAgICAgICAgICAgbmV4dF9oYW5kbGVyLT5oYW5kbGVyX25hbWUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgbmggPSBuZXh0X2hhbmRsZXItPmFjY2Vzc19tZXRob2Q7CisgICAgICAgIGlmICghbmgpIHsKKyAgICAgICAgICAgIGlmIChuZXh0X2hhbmRsZXItPm5leHQpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gYWNjZXNzIG1ldGhvZCBzcGVjaWZpZWQgaW4gaGFuZGxlciAlcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfaGFuZGxlci0+aGFuZGxlcl9uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoZSBmaW5hbCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBpbiB0aGUgY2hhaW4gbWF5IHdlbGwgbm90IG5lZWQKKyAgICAgICAgICAgICAqIHRvIGluY2x1ZGUgYSBoYW5kbGVyIHJvdXRpbmUsIGlmIHRoZSBwcm9jZXNzaW5nIG9mIHRoaXMgb2JqZWN0CisgICAgICAgICAgICAgKiBpcyBoYW5kbGVkIGNvbXBsZXRlbHkgYnkgdGhlIGFnZW50IHRvb2xraXQgaGVscGVycy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1RMKCgiaGFuZGxlcjpjYWxsaW5nIiwgImNhbGxpbmcgaGFuZGxlciAlcyBmb3IgbW9kZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9oYW5kbGVyLT5oYW5kbGVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSkpOworCiAgICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBmaW5hbCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBpbiB0aGUgY2hhaW4gbWF5IHdlbGwgbm90IG5lZWQKLSAgICAgICAgICogdG8gaW5jbHVkZSBhIGhhbmRsZXIgcm91dGluZSwgaWYgdGhlIHByb2Nlc3Npbmcgb2YgdGhpcyBvYmplY3QKLSAgICAgICAgICogaXMgaGFuZGxlZCBjb21wbGV0ZWx5IGJ5IHRoZSBhZ2VudCB0b29sa2l0IGhlbHBlcnMuCisgICAgICAgICAqIFhYWDogZGVmaW5lIGFjY2VwdGFibGUgcmV0dXJuIHN0YXR1c2VzCiAgICAgICAgICAqLwotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLSAgICB9CisgICAgICAgIHJldCA9ICgqbmgpIChuZXh0X2hhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sIHJlcXVlc3RzKTsKIAotICAgIERFQlVHTVNHVEwoKCJoYW5kbGVyOmNhbGxpbmciLCAiY2FsbGluZyBoYW5kbGVyICVzIGZvciBtb2RlICVzXG4iLAotICAgICAgICAgICAgICAgIG5leHRfaGFuZGxlci0+aGFuZGxlcl9uYW1lLAotICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSkpOworICAgICAgICBERUJVR01TR1RMKCgiaGFuZGxlcjpyZXR1cm5lZCIsICJoYW5kbGVyICVzIHJldHVybmVkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBuZXh0X2hhbmRsZXItPmhhbmRsZXJfbmFtZSwgcmV0KSk7CiAKLSAgICAvKgotICAgICAqIFhYWDogZGVmaW5lIGFjY2VwdGFibGUgcmV0dXJuIHN0YXR1c2VzIAotICAgICAqLwotICAgIHJldCA9ICgqbmgpIChuZXh0X2hhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sIHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKCEgKG5leHRfaGFuZGxlci0+ZmxhZ3MgJiBNSUJfSEFORExFUl9BVVRPX05FWFQpKQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBERUJVR01TR1RMKCgiaGFuZGxlcjpyZXR1cm5lZCIsICJoYW5kbGVyICVzIHJldHVybmVkICVkXG4iLAotICAgICAgICAgICAgICAgIG5leHRfaGFuZGxlci0+aGFuZGxlcl9uYW1lLCByZXQpKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogZGlkIGhhbmRsZXIgc2lnbmFsIHRoYXQgaXQgZGlkbid0IHdhbnQgYXV0byBuZXh0IHRoaXMgdGltZSBhcm91bmQ/CisgICAgICAgICAqLworICAgICAgICBpZihuZXh0X2hhbmRsZXItPmZsYWdzICYgTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0UpIHsKKyAgICAgICAgICAgIG5leHRfaGFuZGxlci0+ZmxhZ3MgJj0gfk1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgIGlmICghIChuZXh0X2hhbmRsZXItPmZsYWdzICYgTUlCX0hBTkRMRVJfQVVUT19ORVhUKSkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAvKgotICAgICAqIGRpZCBoYW5kbGVyIHNpZ25hbCB0aGF0IGl0IGRpZG4ndCB3YW50IGF1dG8gbmV4dCB0aGlzIHRpbWUgYXJvdW5kPwotICAgICAqLwotICAgIGlmKG5leHRfaGFuZGxlci0+ZmxhZ3MgJiBNSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRSkgewotICAgICAgICBuZXh0X2hhbmRsZXItPmZsYWdzICY9IH5NSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbmV4dF9oYW5kbGVyID0gbmV4dF9oYW5kbGVyLT5uZXh0OworICAgICAgICBuZXh0X2hhbmRsZXIgPSBuZXh0X2hhbmRsZXItPm5leHQ7CiAKICAgICB9IHdoaWxlKG5leHRfaGFuZGxlcik7CiAKICAgICByZXR1cm4gcmV0OwogfQogCi0vKiogQGludGVybmFsCi0gKiAgY2FsbHMgYWxsIHRoZSBoYW5kbGVycyBmb3IgYSBnaXZlbiBtb2RlLgorLyoqIEBwcml2YXRlCisgKiAgQ2FsbHMgYWxsIHRoZSBNSUIgSGFuZGxlcnMgaW4gcmVnaXN0cmF0aW9uIHN0cnVjdCBmb3IgYSBnaXZlbiBtb2RlLgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KICAqLwogaW50CiBuZXRzbm1wX2NhbGxfaGFuZGxlcnMobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTQ4Niw2ICs1ODAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7ICAgIC8qIGxlZ2FsICovCiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTUwMCw2ICs1OTUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBtb2RlIGluIG5ldHNubXBfY2FsbF9oYW5kbGVycyEgYnVnIVxuIik7CkBAIC01MTcsOCArNjEzLDEzIEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotLyoqIGNhbGxzIHRoZSBuZXh0IGhhbmRsZXIgaW4gdGhlIGNoYWluIGFmdGVyIHRoZSBjdXJyZW50IG9uZSB3aXRoCi0gICB3aXRoIGFwcHJvcHJpYXRlIE5VTEwgY2hlY2tpbmcsIGV0Yy4gKi8KKy8qKiBAcHJpdmF0ZQorICogIENhbGxzIHRoZSBuZXh0IE1JQiBoYW5kbGVyIGluIHRoZSBjaGFpbiwgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lLgorICogIFRoZSBnaXZlbiBhcmd1bWVudHMgYW5kIE1JQiBoYW5kbGVyIGFyZSBjaGVja2VkCisgKiAgZm9yIHNhbml0eSwgdGhlbiB0aGUgbmV4dCBoYW5kbGVyIGlzIGNhbGxlZC4KKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QX0VSUl8qIGVycm9yIGNvZGUuCisgKi8KIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpjdXJyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApAQCAtNTM5LDggKzY0MCwxNSBAQAogICAgIHJldHVybiBuZXRzbm1wX2NhbGxfaGFuZGxlcihjdXJyZW50LT5uZXh0LCByZWdpbmZvLCByZXFpbmZvLCByZXF1ZXN0cyk7CiB9CiAKLS8qKiBjYWxscyB0aGUgbmV4dCBoYW5kbGVyIGluIHRoZSBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBvbmUgd2l0aAotICAgd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nLCBldGMuICovCisvKiogQHByaXZhdGUKKyAqICBDYWxscyB0aGUgbmV4dCBNSUIgaGFuZGxlciBpbiB0aGUgY2hhaW4sIGFmdGVyIHRoZSBjdXJyZW50IG9uZS4KKyAqICBUaGUgZ2l2ZW4gYXJndW1lbnRzIGFuZCBNSUIgaGFuZGxlciBhcmUgbm90IHZhbGlkYXRlZCBiZWZvcmUKKyAqICB0aGUgY2FsbCwgb25seSByZXF1ZXN0IGlzIGNoZWNrZWQuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobmV0c25tcF9jYWxsX25leHRfaGFuZGxlcl9vbmVfcmVxdWVzdCxuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0NBTExfTkVYVF9IQU5ETEVSX09ORV9SRVFVRVNUCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXJfb25lX3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqY3VycmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTU2Miw4ICs2NzAsMTUgQEAKICAgICByZXF1ZXN0cy0+bmV4dCA9IHJlcXVlc3Q7CiAgICAgcmV0dXJuIHJldDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfQ0FMTF9ORVhUX0hBTkRMRVJfT05FX1JFUVVFU1QgKi8KIAotLyoqIGZyZWVzIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gaGFuZGxlciAqLworLyoqIERlYWxsb2NhdGVzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBoYW5kbGVyLgorICogIFRoZSBoYW5kbGVyIGlzIHJlbW92ZWQgZnJvbSBjaGFpbiBhbmQgdGhlbiBmcmVlZC4KKyAqICBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBoYW5kbGVyIHBvaW50ZXIgaXMgaW52YWxpZAorICogIGFuZCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgKgorICogIEBwYXJhbSBoYW5kbGVyIGlzIHRoZSBNSUIgSGFuZGxlciB0byBiZSBmcmVlZAorICovCiB2b2lkCiBuZXRzbm1wX2hhbmRsZXJfZnJlZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKQogewpAQCAtNTgzLDM5ICs2OTgsNjYgQEAKICAgICB9CiB9CiAKLS8qKiBkdXBsaWNhdGVzIGEgaGFuZGxlciBhbmQgYWxsIHN1YnNlcXVlbnQgaGFuZGxlcnMKLSAqIHNlZSBhbHNvIF9jbG9uZV9oYW5kbGVyCisvKiogRHVwbGljYXRlcyBhIE1JQiBoYW5kbGVyIGFuZCBhbGwgc3Vic2VxdWVudCBoYW5kbGVycy4KKyAqICBDcmVhdGVzIGEgY29weSBvZiBhbGwgZGF0YSBpbiBnaXZlbiBoYW5kbGVycyBjaGFpbi4KKyAqCisgKiAgQHBhcmFtIGhhbmRsZXIgaXMgdGhlIE1JQiBIYW5kbGVyIHRvIGJlIGR1cGxpY2F0ZWQKKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY29tcGxldGUgY29weSwKKyAqICAgICAgICAgb3IgTlVMTCBpZiBhbnkgcHJvYmxlbSBvY2N1cmVkLgorICoKKyAqIEBzZWUgX2Nsb25lX2hhbmRsZXIoKQogICovCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfaGFuZGxlcl9kdXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcikKIHsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoID0gTlVMTDsKIAotICAgIGlmIChoYW5kbGVyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghaGFuZGxlcikKKyAgICAgICAgZ290byBlcnI7CiAKICAgICBoID0gX2Nsb25lX2hhbmRsZXIoaGFuZGxlcik7CisgICAgaWYgKCFoKQorICAgICAgICBnb3RvIGVycjsKIAotICAgIGlmIChoICE9IE5VTEwpIHsKKyAgICAvKgorICAgICAqIFByb3ZpZGluZyBhIGNsb25lIGZ1bmN0aW9uIHdpdGhvdXQgYSBmcmVlIGZ1bmN0aW9uIGlzIGFza2luZyBmb3IKKyAgICAgKiBtZW1vcnkgbGVha3MsIGFuZCBwcm92aWRpbmcgYSBmcmVlIGZ1bmN0aW9uIHdpdGhvdXQgY2xvbmUgZnVuY3Rpb24KKyAgICAgKiBpcyBhc2tpbmcgZm9yIG1lbW9yeSBjb3JydXB0aW9uLiBIZW5jZSB0aGUgbG9nIHN0YXRlbWVudCBiZWxvdy4KKyAgICAgKi8KKyAgICBpZiAoISFoYW5kbGVyLT5kYXRhX2Nsb25lICE9ICEhaGFuZGxlci0+ZGF0YV9mcmVlKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZGF0YV9jbG9uZSAvIGRhdGFfZnJlZSBpbmNvbnNpc3RlbnQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgaGFuZGxlci0+aGFuZGxlcl9uYW1lKTsKKyAgICBpZiAoaGFuZGxlci0+bXl2b2lkICYmIGhhbmRsZXItPmRhdGFfY2xvbmUpIHsKKyAgICAgICAgaC0+bXl2b2lkID0gaGFuZGxlci0+ZGF0YV9jbG9uZShoYW5kbGVyLT5teXZvaWQpOworICAgICAgICBpZiAoIWgtPm15dm9pZCkKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgIH0gZWxzZQogICAgICAgICBoLT5teXZvaWQgPSBoYW5kbGVyLT5teXZvaWQ7Ci0gICAgICAgIGgtPmRhdGFfZnJlZSA9IGhhbmRsZXItPmRhdGFfZnJlZTsKKyAgICBoLT5kYXRhX2Nsb25lID0gaGFuZGxlci0+ZGF0YV9jbG9uZTsKKyAgICBoLT5kYXRhX2ZyZWUgPSBoYW5kbGVyLT5kYXRhX2ZyZWU7CiAKLSAgICAgICAgaWYgKGhhbmRsZXItPm5leHQgIT0gTlVMTCkgewotICAgICAgICAgICAgaC0+bmV4dCA9IG5ldHNubXBfaGFuZGxlcl9kdXAoaGFuZGxlci0+bmV4dCk7Ci0gICAgICAgICAgICBpZiAoaC0+bmV4dCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoLT5uZXh0LT5wcmV2ID0gaDsKLSAgICAgICAgfQotICAgICAgICBoLT5wcmV2ID0gTlVMTDsKLSAgICAgICAgcmV0dXJuIGg7CisgICAgaWYgKGhhbmRsZXItPm5leHQgIT0gTlVMTCkgeworICAgICAgICBoLT5uZXh0ID0gbmV0c25tcF9oYW5kbGVyX2R1cChoYW5kbGVyLT5uZXh0KTsKKyAgICAgICAgaWYgKCFoLT5uZXh0KQorICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgIGgtPm5leHQtPnByZXYgPSBoOwogICAgIH0KKyAgICBoLT5wcmV2ID0gTlVMTDsKKyAgICByZXR1cm4gaDsKKworZXJyOgorICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGgpOwogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiogZnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCAqLworLyoqIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdC4KKyAqICBUaGUgcmVnaXN0cmF0aW9uIG9iamVjdCBhbmQgYWxsIE1JQiBIYW5kbGVycyBpbiB0aGUgY2hhaW4gYXJlCisgKiAgZnJlZWQuIFdoZW4gdGhlIGZ1bmN0aW9uIGVuZHMsIGdpdmVuIHBvaW50ZXIgaXMgbm8gbG9uZ2VyIHZhbGlkCisgKiAgYW5kIHNob3VsZCBiZSBzZXQgdG8gTlVMTC4KKyAqCisgKiAgQHBhcmFtIHJlZ2luZm8gaXMgdGhlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCB0byBiZSBmcmVlZAorICovCiB2b2lkCiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKIHsKQEAgLTYyOSw3ICs3NzEsMTYgQEAKICAgICB9CiB9CiAKLS8qKiBkdXBsaWNhdGVzIHRoZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgKi8KKy8qKiBEdXBsaWNhdGVzIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCBhbmQgYWxsIHN1YnNlcXVlbnQgaGFuZGxlcnMuCisgKiAgQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCBhbmQgYWxsIGl0cyBkYXRhLgorICoKKyAqICBAcGFyYW0gcmVnaW5mbyBpcyB0aGUgaGFuZGxlciByZWdpc3RyYXRpb24gb2JqZWN0IHRvIGJlIGR1cGxpY2F0ZWQKKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY29tcGxldGUgY29weSwKKyAqICAgICAgICAgb3IgTlVMTCBpZiBhbnkgcHJvYmxlbSBvY2N1cmVkLgorICoKKyAqIEBzZWUgbmV0c25tcF9oYW5kbGVyX2R1cCgpCisgKi8KIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKgogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9kdXAobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKIHsKQEAgLTY2OSw4ICs4MjAsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlZ2luZm8tPnJvb3RvaWQgIT0gTlVMTCkgewotICAgICAgICAgICAgci0+cm9vdG9pZCA9IG5ldHNubXBfbWVtZHVwKHJlZ2luZm8tPnJvb3RvaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICByLT5yb290b2lkID0KKyAgICAgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChyZWdpbmZvLT5yb290b2lkLCByZWdpbmZvLT5yb290b2lkX2xlbik7CiAgICAgICAgICAgICBpZiAoci0+cm9vdG9pZCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjg4LDkgKzgzOSwxNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiogY3JlYXRlcyBhIGNhY2hlIG9mIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZSBzYXZlZCBmb3IgZnV0dXJlCi0gICByZWZlcmVuY2UuICBVc2UgbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlKCkgbGF0ZXIgdG8gbWFrZSBzdXJlIGl0J3Mgc3RpbGwKLSAgIHZhbGlkIGJlZm9yZSByZWZlcmVuY2luZyBpdCBpbiB0aGUgZnV0dXJlLiAqLworLyoqIENyZWF0ZXMgYSBjYWNoZSBvZiBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgc2F2ZWQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisgKiAgVGhlIGNhY2hlIGlzIGZpbGxlZCB3aXRoIHBvaW50ZXJzIGZyb20gcGFyYW1ldGVycy4gTm90ZSB0aGF0CisgKiAgdGhlIGlucHV0IHN0cnVjdHVyZXMgYXJlIG5vdCBkdXBsaWNhdGVkLCBidXQgcHV0IGRpcmVjdGx5IGludG8KKyAqICB0aGUgbmV3IGNhY2hlIHN0cnVjdC4KKyAqICBVc2UgbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlKCkgbGF0ZXIgdG8gbWFrZSBzdXJlIGl0J3Mgc3RpbGwKKyAqICB2YWxpZCBiZWZvcmUgcmVmZXJlbmNpbmcgaXQgaW4gdGhlIGZ1dHVyZS4KKyAqCisgKiBAc2VlIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZSgpCisgKiBAc2VlIG5ldHNubXBfZnJlZV9kZWxlZ2F0ZWRfY2FjaGUoKQorICovCiBORVRTTk1QX0lOTElORSBuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZSAqCiBuZXRzbm1wX2NyZWF0ZV9kZWxlZ2F0ZWRfY2FjaGUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApAQCAtNzEyLDkgKzg3MCwxNyBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLS8qKiBjaGVjaydzIGEgZ2l2ZW4gY2FjaGUgYW5kIHJldHVybnMgaXQgaWYgaXQgaXMgc3RpbGwgdmFsaWQgKGllLCB0aGUKLSAgIGFnZW50IHN0aWxsIGNvbnNpZGVycyBpdCB0byBiZSBhbiBvdXRzdGFuZGluZyByZXF1ZXN0LiAgUmV0dXJucwotICAgTlVMTCBpZiBpdCdzIG5vIGxvbmdlciB2YWxpZC4gKi8KKy8qKiBDaGVjayBpZiBhIGdpdmVuIGRlbGVnYXRlZCBjYWNoZSBpcyBzdGlsbCB2YWxpZC4KKyAqICBUaGUgY2FjaGUgaXMgdmFsaWQgaWYgaXQncyBhIHBhcnQgb2YgdHJhbnNhY3Rpb24KKyAqICAoaWUsIHRoZSBhZ2VudCBzdGlsbCBjb25zaWRlcnMgaXQgdG8gYmUgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCkuCisgKgorICogIEBwYXJhbSBkY2FjaGUgaXMgdGhlIGRlbGVnYXRlZCBjYWNoZSB0byBiZSBjaGVja2VkLgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgdGhlIGNhY2hlIHBvaW50ZXIgaWYgaXQgaXMgc3RpbGwgdmFsaWQsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlKCkKKyAqIEBzZWUgbmV0c25tcF9mcmVlX2RlbGVnYXRlZF9jYWNoZSgpCisgKi8KIE5FVFNOTVBfSU5MSU5FIG5ldHNubXBfZGVsZWdhdGVkX2NhY2hlICoKIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZShuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZSAqZGNhY2hlKQogewpAQCAtNzI4LDcgKzg5NCwxNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiogZnJlZXMgYSBjYWNoZSBvbmNlIHlvdSdyZSBmaW5pc2hlZCB1c2luZyBpdCAqLworLyoqIEZyZWUgYSBjYWNoZSBvbmNlIGl0J3Mgbm8gbG9uZ2VyIHVzZWQuCisgKiAgRGVsZXRlcyB0aGUgZGF0YSBhbGxvY2F0ZWQgYnkgbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlKCkuCisgKiAgU3RydWN0dXJlcyB3aGljaCB3ZXJlIG5vdCBhbGxvY2F0ZWQgYnkgbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlKCkKKyAqICBhcmUgbm90IGZyZWVkIChwb2ludGVycyBhcmUgZHJvcHBlZCkuCisgKgorICogIEBwYXJhbSBkY2FjaGUgaXMgdGhlIGRlbGVnYXRlZCBjYWNoZSB0byBiZSBmcmVlZC4KKyAqCisgKiBAc2VlIG5ldHNubXBfY3JlYXRlX2RlbGVnYXRlZF9jYWNoZSgpCisgKiBAc2VlIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZSgpCisgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKIG5ldHNubXBfZnJlZV9kZWxlZ2F0ZWRfY2FjaGUobmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGUgKmRjYWNoZSkKIHsKQEAgLTc0Miw3ICs5MTcsMTQgQEAKIH0KIAogCi0vKiogbWFya3MgYSBsaXN0IG9mIHJlcXVlc3RzIGFzIGRlbGVnYXRlZCAob3Igbm90IGlmIGlzZGVsZWdhZGVkID0gMCkgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQU5ETEVSX01BUktfUkVRVUVTVFNfQVNfREVMRUdBVEVECisvKiogU2V0cyBhIGxpc3Qgb2YgcmVxdWVzdHMgYXMgZGVsZWdhdGVkIG9yIG5vdCBkZWxlZ2F0ZWQuCisgKiAgU3dlZXBzIHRocm91Z2ggZ2l2ZW4gY2hhaW4gb2YgcmVxdWVzdHMgYW5kIHNldHMgJ2RlbGVnYXRlZCcKKyAqICBmbGFnIGFjY29yZGluZ2x5IHRvIHRoZSBpc2RlbGVnYWRlZCBwYXJhbWV0ZXIuCisgKgorICogIEBwYXJhbSByZXF1ZXN0cyBSZXF1ZXN0IGxpc3QuCisgKiAgQHBhcmFtIGlzZGVsZWdhdGVkIE5ldyB2YWx1ZSBvZiB0aGUgJ2RlbGVnYXRlZCcgZmxhZy4KKyAqLwogdm9pZAogbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNkZWxlZ2F0ZWQpCkBAIC03NTIsMTYgKzkzNCwxOCBAQAogICAgICAgICByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0OwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hBTkRMRVJfTUFSS19SRVFVRVNUU19BU19ERUxFR0FURUQgKi8KIAotLyoqIGFkZCBkYXRhIHRvIGEgcmVxdWVzdCB0aGF0IGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgYnkgc3VibW9kdWxlcworLyoqIEFkZHMgZGF0YSBmcm9tIG5vZGUgbGlzdCB0byB0aGUgcmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKiAgRGF0YSBpbiB0aGUgcmVxdWVzdCBjYW4gYmUgbGF0ZXIgZXh0cmFjdGVkIGFuZCB1c2VkIGJ5IHN1Ym1vZHVsZXMuCiAgKgotICogQHBhcmFtIHJlcXVlc3QgdGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZQorICogQHBhcmFtIHJlcXVlc3QgRGVzdGluYXRpb24gcmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCiAgKgotICogQHBhcmFtIG5vZGUgdGhpcyBpcyB0aGUgZGF0YSB0byBiZSBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QKLSAqICAgICAgICAgICAgIHJlcXVlc3QtPnBhcmVudF9kYXRhCisgKiBAcGFyYW0gbm9kZSBUaGUgZGF0YSB0byBiZSBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QKKyAqICAgICAgICAgICAgIHJlcXVlc3QtPnBhcmVudF9kYXRhLgogICoKLSAqIEByZXR1cm4gdm9pZAotICoKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGEoKQorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YSgpCiAgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LApAQCAtNzc1LDcgKzk1OSw3IEBACiAgICAgfQogfQogCi0vKiogcmVtb3ZlIGRhdGEgZnJvbSBhIHJlcXVlc3QKKy8qKiBSZW1vdmVzIGFsbCBkYXRhIGZyb20gYSByZXF1ZXN0LgogICoKICAqIEBwYXJhbSByZXF1ZXN0IHRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUKICAqCkBAIC03ODMsNiArOTY3LDggQEAKICAqCiAgKiBAcmV0dXJuIDAgb24gc3VjY2Vzc2Z1bCBmaW5kLWFuZC1kZWxldGUsIDEgb3RoZXJ3aXNlLgogICoKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEoKQorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YSgpCiAgKi8KIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGEobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCkBAIC03OTQsMTYgKzk4MCwyMCBAQAogICAgIHJldHVybiBuZXRzbm1wX3JlbW92ZV9saXN0X25vZGUoJnJlcXVlc3QtPnBhcmVudF9kYXRhLCBuYW1lKTsKIH0KIAotLyoqIGV4dHJhY3QgZGF0YSBmcm9tIGEgcmVxdWVzdCB0aGF0IHdhcyBhZGRlZCBwcmV2aW91c2x5IGJ5IGEgcGFyZW50IG1vZHVsZQorLyoqIEV4dHJhY3RzIGRhdGEgZnJvbSBhIHJlcXVlc3QuCisgKiAgUmV0cmlldmVzIGRhdGEgdGhhdCB3YXMgcHJldmlvdXNseSBhZGRlZCB0byB0aGUgcmVxdWVzdCwKKyAqICB1c3VhbGx5IGJ5IGEgcGFyZW50IG1vZHVsZS4KICAqCi0gKiBAcGFyYW0gcmVxdWVzdCB0aGUgbmV0c25tcCByZXF1ZXN0IGluZm8gZnVuY3Rpb24KKyAqIEBwYXJhbSByZXF1ZXN0IFNvdXJjZSByZXF1ZXN0IGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KICAqCi0gKiBAcGFyYW0gbmFtZSB1c2VkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgcmVxdWVzdC0+cGFyZW50X2RhdGEtPm5hbWUgdmFsdWUsCi0gKiAgICAgICAgICAgICBpZiBhIG1hdGNoIGlzIGZvdW5kIHJlcXVlc3QtPnBhcmVudF9kYXRhLT5kYXRhIGlzIHJldHVybmVkCisgKiBAcGFyYW0gbmFtZSBVc2VkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgcmVxdWVzdC0+cGFyZW50X2RhdGEtPm5hbWUgdmFsdWU7CisgKiAgICAgICAgICAgICBpZiBhIG1hdGNoIGlzIGZvdW5kLCByZXF1ZXN0LT5wYXJlbnRfZGF0YS0+ZGF0YSBpcyByZXR1cm5lZC4KICAqCi0gKiBAcmV0dXJuIGEgdm9pZCBwb2ludGVyKHJlcXVlc3QtPnBhcmVudF9kYXRhLT5kYXRhKSwgb3RoZXJ3aXNlIE5VTEwgaXMKLSAqICAgICAgICAgcmV0dXJuZWQgaWYgcmVxdWVzdCBpcyBOVUxMIG9yIHJlcXVlc3QtPnBhcmVudF9kYXRhIGlzIE5VTEwgb3IKLSAqICAgICAgICAgcmVxdWVzdC0+cGFyZW50X2RhdGEgb2JqZWN0IGlzIG5vdCBmb3VuZC4KKyAqIEByZXR1cm4gR2l2ZXMgYSB2b2lkIHBvaW50ZXIocmVxdWVzdC0+cGFyZW50X2RhdGEtPmRhdGEpOyBOVUxMIGlzCisgKiAgICAgICAgIHJldHVybmVkIGlmIHNvdXJjZSBkYXRhIGlzIE5VTEwgb3IgdGhlIG9iamVjdCBpcyBub3QgZm91bmQuCisgKgorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSgpCisgKiBAc2VlIG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhKCkKICAqLwogdm9pZCAgICAqCiBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKQEAgLTgxNCw3ICsxMDA0LDE1IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLS8qKiBGcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIHJlcXVlc3QgKi8KKy8qKiBGcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIHJlcXVlc3QuCisgKiAgRGVsZXRlcyB0aGUgZGF0YSBpbiBnaXZlbiByZXF1ZXN0IG9ubHkuIE90aGVyIGNoYWluIGl0ZW1zCisgKiAgYXJlIHVuYWZmZWN0ZWQuCisgKgorICogQHBhcmFtIHJlcXVlc3QgUmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgdG8gYmUgbW9kaWZpZWQuCisgKgorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSgpCisgKiBAc2VlIG5ldHNubXBfZnJlZV9saXN0X2RhdGEoKQorICovCiBORVRTTk1QX0lOTElORSB2b2lkCiBuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCkKIHsKQEAgLTgyMiw3ICsxMDIwLDE0IEBACiAgICAgICAgIG5ldHNubXBfZnJlZV9saXN0X2RhdGEocmVxdWVzdC0+cGFyZW50X2RhdGEpOwogfQogCi0vKiogRnJlZSB0aGUgZXh0cmEgZGF0YSBzdG9yZWQgaW4gYSBidW5jaCBvZiByZXF1ZXN0cyAoYWxsIGRhdGEgaW4gdGhlIGNoYWluKSAqLworLyoqIEZyZWUgdGhlIGV4dHJhIGRhdGEgc3RvcmVkIGluIGEgYnVuY2ggb2YgcmVxdWVzdHMuCisgKiAgRGVsZXRlcyBhbGwgZGF0YSBpbiB0aGUgY2hhaW4gaW5zaWRlIHJlcXVlc3QuCisgKgorICogQHBhcmFtIHJlcXVlc3QgUmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgdG8gYmUgbW9kaWZpZWQuCisgKgorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSgpCisgKiBAc2VlIG5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0KCkKKyAqLwogTkVUU05NUF9JTkxJTkUgdm9pZAogbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0KQogewpAQCAtODMyLDcgKzEwMzcsMTcgQEAKICAgICB9CiB9CiAKLS8qKiBSZXR1cm5zIGEgaGFuZGxlciBmcm9tIGEgY2hhaW4gYmFzZWQgb24gdGhlIG5hbWUgKi8KKy8qKiBSZXR1cm5zIGEgTUlCIGhhbmRsZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLgorICoKKyAqIEBwYXJhbSByZWdpbmZvIEhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdCB3aGljaCBjb250YWlucyB0aGUgY2hhaW4uCisgKgorICogQHBhcmFtIG5hbWUgVGFyZ2V0IE1JQiBIYW5kbGVyIG5hbWUgc3RyaW5nLiBUaGUgbmFtZSBpcyBjYXNlCisgKiAgICAgICAgc2Vuc2l0aXZlLgorICoKKyAqIEByZXR1cm4gVGhlIE1JQiBIYW5kbGVyIGlzIHJldHVybmVkLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqCisgKiBAc2VlIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKCkKKyAqLwogbmV0c25tcF9taWJfaGFuZGxlciAqCiBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9ieV9uYW1lKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC04NDgsMTAgKzEwNjMsMjIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotLyoqIFJldHVybnMgYSBoYW5kbGVyJ3Mgdm9pZCAqIHBvaW50ZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLgotIFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIHVzZWQgYnkgdGhlIGdlbmVyYWwgcHVibGljIGFzIHRoZSB2b2lkICoKLSBkYXRhIG1heSBjaGFuZ2UgYXMgYSBoYW5kbGVyIGV2b2x2ZXMuICBIYW5kbGVycyBzaG91bGQgcmVhbGx5Ci0gYWR2ZXJ0aXNlIHNvbWUgZnVuY3Rpb24gZm9yIHlvdSB0byB1c2UgaW5zdGVhZC4gKi8KKy8qKiBSZXR1cm5zIGEgaGFuZGxlcidzIHZvaWQgcG9pbnRlciBmcm9tIGEgY2hhaW4gYmFzZWQgb24gdGhlIG5hbWUuCisgKgorICogQHdhcm5pbmcgVGhlIHZvaWQgcG9pbnRlciBkYXRhIG1heSBjaGFuZ2UgYXMgYSBoYW5kbGVyIGV2b2x2ZXMuCisgKiAgICAgICAgSGFuZGxlcnMgc2hvdWxkIHJlYWxseSBhZHZlcnRpc2Ugc29tZSBmdW5jdGlvbiBmb3IgeW91CisgKiAgICAgICAgdG8gdXNlIGluc3RlYWQuCisgKgorICogQHBhcmFtIHJlZ2luZm8gSGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBjaGFpbi4KKyAqCisgKiBAcGFyYW0gbmFtZSBUYXJnZXQgTUlCIEhhbmRsZXIgbmFtZSBzdHJpbmcuIFRoZSBuYW1lIGlzIGNhc2UKKyAqICAgICAgICBzZW5zaXRpdmUuCisgKgorICogQHJldHVybiBUaGUgTUlCIEhhbmRsZXIncyB2b2lkICogcG9pbnRlciBpcyByZXR1cm5lZCwKKyAqICAgICAgICBvciBOVUxMIGlmIHRoZSBoYW5kbGVyIGlzIG5vdCBmb3VuZC4KKyAqCisgKiBAc2VlIG5ldHNubXBfZmluZF9oYW5kbGVyX2J5X25hbWUoKQorICovCiB2b2lkICAgICAgICAgICAqCiBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9kYXRhX2J5X25hbWUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQpAQCAtODYyLDggKzEwODksMTIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotLyoqIGNsb25lcyBhIG1pYiBoYW5kbGVyIChuYW1lLCBmbGFncyBhbmQgYWNjZXNzIG1ldGhvZHMgb25seTsgbm90IG15dm9pZCkKLSAqIHNlZSBhbHNvIG5ldHNubXBfaGFuZGxlcl9kdXAKKy8qKiBAcHJpdmF0ZQorICogIENsb25lcyBhIE1JQiBIYW5kbGVyIHdpdGggaXRzIGJhc2ljIHByb3BlcnRpZXMuCisgKiAgQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIGdpdmVuIE1JQiBIYW5kbGVyLiBDb3BpZXMgbmFtZSwgZmxhZ3MgYW5kCisgKiAgYWNjZXNzIG1ldGhvZHMgb25seTsgbm90IG15dm9pZC4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX2hhbmRsZXJfZHVwKCkKICAqLwogc3RhdGljIG5ldHNubXBfbWliX2hhbmRsZXIgKgogX2Nsb25lX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaXQpCkBAIC04ODgsNyArMTExOSwxNSBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKChuZXRzbm1wX21pYl9oYW5kbGVyICopaGFuZGxlcik7CiB9CiAKLS8qKiByZWdpc3RlcnMgYSBnaXZlbiBoYW5kbGVyIGJ5IG5hbWUgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgZWFzaWx5IGxhdGVyLgorLyoqIFJlZ2lzdGVycyBhIGdpdmVuIGhhbmRsZXIgYnkgbmFtZSwgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgZWFzaWx5IGxhdGVyLgorICogIFBvaW50ZXIgdG8gdGhlIGhhbmRsZXIgaXMgcHV0IGludG8gYSBsaXN0IHdoZXJlIGl0IGNhbiBiZSBlYXNpbHkgbG9jYXRlZAorICogIGF0IGFueSB0aW1lLgorICoKKyAqIEBwYXJhbSBuYW1lIE5hbWUgc3RyaW5nIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gaGFuZGxlciBQb2ludGVyIHRoZSBNSUIgSGFuZGxlci4KKyAqCisgKiBAc2VlIG5ldHNubXBfY2xlYXJfaGFuZGxlcl9saXN0KCkKICAqLwogdm9pZAogbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwKQEAgLTkwMCw3ICsxMTM5LDEzIEBACiAgICAgREVCVUdNU0dUTCgoImhhbmRsZXJfcmVnaXN0cnkiLCAicmVnaXN0ZXJpbmcgaGVscGVyICVzXG4iLCBuYW1lKSk7CiB9CiAKLS8qKiBjbGVhcnMgdGhlIGVudGlyZSBoYW5kbGVyLXJlZ2lzdHJhdGlvbiBsaXN0CisvKiogQ2xlYXJzIHRoZSBlbnRpcmUgTUlCIEhhbmRsZXJzIHJlZ2lzdHJhdGlvbiBsaXN0LgorICogIE1JQiBIYW5kbGVycyByZWdpc3RyYXRpb24gbGlzdCBpcyB1c2VkIHRvIGFjY2VzcyBhbnkgTUlCIEhhbmRsZXIgYnkKKyAqICBpdHMgbmFtZS4gVGhlIGZ1bmN0aW9uIGZyZWVzIHRoZSBsaXN0IG1lbW9yeSBhbmQgc2V0cyBwb2ludGVyIHRvIE5VTEwuCisgKiAgSW5zdGVhZCBvZiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHksIHVzZSBzaHV0ZG93bl9hZ2VudCgpLgorICoKKyAqICBAc2VlIHNodXRkb3duX2FnZW50KCkKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ieV9uYW1lKCkKICAqLwogdm9pZAogbmV0c25tcF9jbGVhcl9oYW5kbGVyX2xpc3Qodm9pZCkKQEAgLTkxMCw4ICsxMTU1LDggQEAKICAgICBoYW5kbGVyX3JlZyA9IE5VTEw7CiB9CiAKLS8qKiBAaW50ZXJuYWwKLSAqICBpbmplY3RzIGEgaGFuZGxlciBpbnRvIGEgc3VidHJlZSwgcGVlcnMgYW5kIGNoaWxkcmVuIHdoZW4gYSBnaXZlbgorLyoqIEBwcml2YXRlCisgKiAgSW5qZWN0cyBhIGhhbmRsZXIgaW50byBhIHN1YnRyZWUsIHBlZXJzIGFuZCBjaGlsZHJlbiB3aGVuIGEgZ2l2ZW4KICAqICBzdWJ0cmVlcyBuYW1lIG1hdGNoZXMgYSBwYXNzZWQgaW4gbmFtZS4KICAqLwogdm9pZApAQCAtOTU4LDggKzEyMDMsOCBAQAogfQogCiBzdGF0aWMgaW50ICAgICAgZG9uZWl0ID0gMDsKLS8qKiBAaW50ZXJuYWwKLSAqICBwYXJzZXMgdGhlICJpbmplY3RIYW5kbGVyIiB0b2tlbiBsaW5lLgorLyoqIEBwcml2YXRlCisgKiAgUGFyc2VzIHRoZSAiaW5qZWN0SGFuZGxlciIgdG9rZW4gbGluZS4KICAqLwogdm9pZAogcGFyc2VfaW5qZWN0SGFuZGxlcl9jb25mKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQpAQCAtOTc1LDkgKzEyMjAsMTAgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgaGFuZGxlcl90b19pbnNlcnQsIHNpemVvZihoYW5kbGVyX3RvX2luc2VydCkpOwotICAgIGhhbmRsZXIgPSBuZXRzbm1wX2dldF9saXN0X2RhdGEoaGFuZGxlcl9yZWcsIGhhbmRsZXJfdG9faW5zZXJ0KTsKKyAgICBoYW5kbGVyID0gKG5ldHNubXBfbWliX2hhbmRsZXIqKW5ldHNubXBfZ2V0X2xpc3RfZGF0YShoYW5kbGVyX3JlZywgaGFuZGxlcl90b19pbnNlcnQpOwogICAgIGlmICghaGFuZGxlcikgewotICAgICAgICBjb25maWdfcGVycm9yKCJubyBzdWNoIFwiJXNcIiBoYW5kbGVyIHJlZ2lzdGVyZWQuIik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoIm5vIFwiJXNcIiBoYW5kbGVyIHJlZ2lzdGVyZWQuIiwKKwkJCSAgICAgaGFuZGxlcl90b19pbnNlcnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05OTUsOCArMTI0MSw4IEBACiAgICAgfQogfQogCi0vKiogQGludGVybmFsCi0gKiAgY2FsbGJhY2sgdG8gZW5zdXJlIGluamVjdEhhbmRsZXIgcGFyc2VyIGRvZXNuJ3QgZG8gdGhpbmdzIHR3aWNlCisvKiogQHByaXZhdGUKKyAqICBDYWxsYmFjayB0byBlbnN1cmUgaW5qZWN0SGFuZGxlciBwYXJzZXIgZG9lc24ndCBkbyB0aGluZ3MgdHdpY2UuCiAgKiAgQHRvZG8gcmVwbGFjZSB0aGlzIHdpdGggYSBtZXRob2QgdG8gY2hlY2sgdGhlIGhhbmRsZXIgY2hhaW4gaW5zdGVhZC4KICAqLwogc3RhdGljIGludApAQCAtMTAwNyw4ICsxMjUzLDExIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qKiBAaW50ZXJuYWwKKy8qKiBAcHJpdmF0ZQogICogIFJlZ2lzdGVycyB0aGUgaW5qZWN0SGFuZGxlIHBhcnNlciB0b2tlbi4KKyAqICBVc2VkIGluIGluaXRfYWdlbnRfcmVhZF9jb25maWcoKS4KKyAqCisgKiAgQHNlZSBpbml0X2FnZW50X3JlYWRfY29uZmlnKCkKICAqLwogdm9pZAogbmV0c25tcF9pbml0X2hhbmRsZXJfY29uZih2b2lkKQpAQCAtMTAyMyw2ICsxMjcyLDcgQEAKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYWdlbnRfbW9kZSIsIHN0cmR1cCgiR0VUIiksIE1PREVfR0VUKTsKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYWdlbnRfbW9kZSIsIHN0cmR1cCgiR0VUTkVYVCIpLCBNT0RFX0dFVE5FWFQpOwogICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJhZ2VudF9tb2RlIiwgc3RyZHVwKCJHRVRCVUxLIiksIE1PREVfR0VUQlVMSyk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJhZ2VudF9tb2RlIiwgc3RyZHVwKCJTRVRfQkVHSU4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RFX1NFVF9CRUdJTik7CiAgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImFnZW50X21vZGUiLCBzdHJkdXAoIlNFVF9SRVNFUlZFMSIpLApAQCAtMTA2Myw2ICsxMzEzLDcgQEAKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYmFieXN0ZXBfbW9kZSIsIHN0cmR1cCgicG9zdF9yZXF1ZXN0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgTU9ERV9CU1RFUF9QT1NUX1JFUVVFU1QpOwogICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJiYWJ5c3RlcF9tb2RlIiwgc3RyZHVwKCJvcmlnaW5hbCIpLCAweGZmZmYpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgLyoKICAgICAgKiB4eHgtcmtzOiBobW1tLi4gd2lsbCB0aGlzIHdvcmsgZm9yIG1vZGVzIHdoaWNoIGFyZSBvcidkIHRvZ2V0aGVyPwpkaWZmIC0tZ2l0IGEvYWdlbnQvYWdlbnRfaW5kZXguYyBiL2FnZW50L2FnZW50X2luZGV4LmMKaW5kZXggZWQ5YmExNC4uMDEyOTIxNyAxMDA2NDQKLS0tIGEvYWdlbnQvYWdlbnRfaW5kZXguYworKysgYi9hZ2VudC9hZ2VudF9pbmRleC5jCkBAIC04LDYgKzgsNyBAQAogCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTE4LDE1ICsxOSw4IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxmY250bC5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01NCw2ICs0OCwxMCBAQAogI2luY2x1ZGUgImFnZW50eC9jbGllbnQuaCIKICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnRfaW5kZXhfYWxsLCBsaWJuZXRzbm1wYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZW1vdmVfaW5kZXgsIGFnZW50X2luZGV4X2FsbCkKKwogICAgICAgICAvKgogICAgICAgICAgKiBJbml0aWFsIHN1cHBvcnQgZm9yIGluZGV4IGFsbG9jYXRpb24KICAgICAgICAgICovCkBAIC05Miw3ICs5MCwxMSBAQAogICAgIGlmIChyZXMgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBjaGFyICAgICAgICAgICAqcnYgPSBzdHJkdXAocmVzLT52YWwuc3RyaW5nKTsKKyAgICAgICAgY2hhciAqcnYgPSAoY2hhciAqKW1hbGxvYyhyZXMtPnZhbF9sZW4gKyAxKTsKKyAgICAgICAgaWYgKHJ2KSB7CisgICAgICAgICAgICBtZW1jcHkocnYsIHJlcy0+dmFsLnN0cmluZywgcmVzLT52YWxfbGVuKTsKKyAgICAgICAgICAgIHJ2W3Jlcy0+dmFsX2xlbl0gPSAwOworICAgICAgICB9CiAgICAgICAgIGZyZWUocmVzKTsKICAgICAgICAgcmV0dXJuIHJ2OwogICAgIH0KQEAgLTE2Myw3ICsxNjUsNyBAQAogCiAgICAgREVCVUdNU0dUTCgoInJlZ2lzdGVyX2luZGV4IiwgInJlZ2lzdGVyICIpKTsKICAgICBERUJVR01TR1ZBUigoInJlZ2lzdGVyX2luZGV4IiwgdmFyYmluZCkpOwotICAgIERFQlVHTVNHKCgicmVnaXN0ZXJfaW5kZXgiLCAiZm9yIHNlc3Npb24gJTA4cFxuIiwgc3MpKTsKKyAgICBERUJVR01TRygoInJlZ2lzdGVyX2luZGV4IiwgImZvciBzZXNzaW9uICU4cFxuIiwgc3MpKTsKIAogI2lmIGRlZmluZWQoVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRSkgJiYgIWRlZmluZWQoVEVTVElORykKICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKQEAgLTMwMSwxMiArMzAzLDEyIEBACiAgICAgaWYgKG5ld19pbmRleCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICgwID09IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJm5ld19pbmRleC0+dmFyYmluZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT5uYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT52YWwuc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+dmFsX2xlbikpIHsKKyAgICBpZiAoTlVMTCA9PSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZuZXdfaW5kZXgtPnZhcmJpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPnZhbF9sZW4pKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGlmIChzbm1wX2Nsb25lX3ZhciggdmFyYmluZCwgbmV3X2luZGV4LT52YXJiaW5kICkgIT0gMCApIAogICAgICAgICAgKi8KQEAgLTQ1MywxMiArNDU1LDE2IEBACiAgICAgICAgICAqIFJlbGVhc2UgYW4gYWxsb2NhdGVkIGluZGV4LAogICAgICAgICAgKiAgIHRvIGFsbG93IGl0IHRvIGJlIHVzZWQgZWxzZXdoZXJlCiAgICAgICAgICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlbGVhc2VfaW5kZXgsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVMRUFTRV9JTkRFWAogaW50CiByZWxlYXNlX2luZGV4KG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmJpbmQpCiB7CiAgICAgcmV0dXJuICh1bnJlZ2lzdGVyX2luZGV4KHZhcmJpbmQsIFRSVUUsIE5VTEwpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTEVBU0VfSU5ERVggKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTU9WRV9JTkRFWAogICAgICAgICAvKgogICAgICAgICAgKiBDb21wbGV0ZWx5IHJlbW92ZSBhbiBhbGxvY2F0ZWQgaW5kZXgsCiAgICAgICAgICAqICAgZHVlIHRvIGVycm9ycyBpbiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuCkBAIC00NjgsNiArNDc0LDcgQEAKIHsKICAgICByZXR1cm4gKHVucmVnaXN0ZXJfaW5kZXgodmFyYmluZCwgRkFMU0UsIHNzKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRU1PVkVfSU5ERVggKi8KIAogdm9pZAogdW5yZWdpc3Rlcl9pbmRleF9ieV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNzKQpAQCAtNTkxLDYgKzU5OCw4IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1bnJlZ2lzdGVyX2luZGV4ZXMsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9JTkRFWEVTCiBpbnQKIHVucmVnaXN0ZXJfc3RyaW5nX2luZGV4KG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbiwgY2hhciAqY3ApCiB7CkBAIC02MzAsNiArNjM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfbGVuICogc2l6ZW9mKG9pZCkpOwogICAgIHJldHVybiAodW5yZWdpc3Rlcl9pbmRleCgmdmFyYmluZCwgRkFMU0UsIG1haW5fc2Vzc2lvbikpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9JTkRFWEVTICovCiAKIHZvaWQKIGR1bXBfaWR4X3JlZ2lzdHJ5KHZvaWQpCkBAIC02OTUsNiArNzA1LDggQEAKICAgICB9CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb3VudF9pbmRleGVzLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTlVTRUQKIHVuc2lnbmVkIGxvbmcKIGNvdW50X2luZGV4ZXMob2lkICogbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBpbmNsdWRlX3VuYWxsb2NhdGVkKQogewpAQCAtNzE0LDcgKzcyNiw3IEBACiAgICAgfQogICAgIHJldHVybiBuOwogfQotCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTlVTRUQgKi8KIAogI2lmZGVmIFRFU1RJTkcKIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJiaW5kOwpkaWZmIC0tZ2l0IGEvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYyBiL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmMKaW5kZXggNTMzMDQyYS4uZjllZjFhZiAxMDA2NDQKLS0tIGEvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYworKysgYi9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jCkBAIC0zLDYgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TWVNfUEFSQU1fSAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgpAQCAtMjIsMTEgKzIzLDcgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC02MSw4ICs1OCw2IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZW5kaWYKICNlbmRpZgotI2VsaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+CiAjZW5kaWYKICNpZiBIQVZFX1NZU19TVFJFQU1fSAogIyAgIGlmZGVmIHN5c3Y1VW5peFdhcmU3CkBAIC0xMTIsMTcgKzEwNywxOCBAQAogI2luY2x1ZGUgImFnZW50X21vZHVsZV9pbmNsdWRlcy5oIgogI2luY2x1ZGUgIm1pYl9tb2R1bGVfaW5jbHVkZXMuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50X3JlYWRfY29uZmlnX2FsbCwgbGlibmV0c25tcGFnZW50KQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciwgYWdlbnRfcmVhZF9jb25maWdfYWxsKQorCiAjaWZkZWYgSEFWRV9VTklTVERfSAogdm9pZAogc25tcGRfc2V0X2FnZW50X3VzZXIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0jaWYgZGVmaW5lZChIQVZFX0dFVFBXTkFNKSAmJiBkZWZpbmVkKEhBVkVfUFdEX0gpCi0gICAgc3RydWN0IHBhc3N3ZCAgKmluZm87Ci0jZW5kaWYKLQogICAgIGlmIChjcHRyWzBdID09ICcjJykgewogICAgICAgICBjaGFyICAgICAgICAgICAqZWNwOwogICAgICAgICBpbnQgICAgICAgICAgICAgdWlkOworCiAgICAgICAgIHVpZCA9IHN0cnRvdWwoY3B0ciArIDEsICZlY3AsIDEwKTsKICAgICAgICAgaWYgKCplY3AgIT0gMCkgewogICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiQmFkIG51bWJlciIpOwpAQCAtMTMwLDQ3ICsxMjYsNTEgQEAKIAkgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklELCB1aWQpOwogCX0KLSAgICB9CiAjaWYgZGVmaW5lZChIQVZFX0dFVFBXTkFNKSAmJiBkZWZpbmVkKEhBVkVfUFdEX0gpCi0gICAgZWxzZSBpZiAoKGluZm8gPSBnZXRwd25hbShjcHRyKSkgIT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0JCQkgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCwgaW5mby0+cHdfdWlkKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb25maWdfcGVycm9yKCJVc2VyIG5vdCBmb3VuZCBpbiBwYXNzd2QgZGF0YWJhc2UiKTsKLSAgICB9Ci0gICAgZW5kcHdlbnQoKTsKKyAgICAgICAgc3RydWN0IHBhc3N3ZCAgKmluZm87CisKKyAgICAgICAgaW5mbyA9IGdldHB3bmFtKGNwdHIpOworICAgICAgICBpZiAoaW5mbykKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCwgaW5mby0+cHdfdWlkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiVXNlciBub3QgZm91bmQgaW4gcGFzc3dkIGRhdGFiYXNlIik7CisgICAgICAgIGVuZHB3ZW50KCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQKIHNubXBkX3NldF9hZ2VudF9ncm91cChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSNpZiBkZWZpbmVkKEhBVkVfR0VUR1JOQU0pICYmIGRlZmluZWQoSEFWRV9HUlBfSCkKLSAgICBzdHJ1Y3QgZ3JvdXAgICAqaW5mbzsKLSNlbmRpZgotCiAgICAgaWYgKGNwdHJbMF0gPT0gJyMnKSB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICplY3A7CiAgICAgICAgIGludCAgICAgICAgICAgICBnaWQgPSBzdHJ0b3VsKGNwdHIgKyAxLCAmZWNwLCAxMCk7CisKICAgICAgICAgaWYgKCplY3AgIT0gMCkgewogICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiQmFkIG51bWJlciIpOwogCX0gZWxzZSB7CiAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkgICAgICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBnaWQpOwogCX0KLSAgICB9CiAjaWYgZGVmaW5lZChIQVZFX0dFVEdSTkFNKSAmJiBkZWZpbmVkKEhBVkVfR1JQX0gpCi0gICAgZWxzZSBpZiAoKGluZm8gPSBnZXRncm5hbShjcHRyKSkgIT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0JCQkgICBORVRTTk1QX0RTX0FHRU5UX0dST1VQSUQsIGluZm8tPmdyX2dpZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiR3JvdXAgbm90IGZvdW5kIGluIGdyb3VwIGRhdGFiYXNlIik7Ci0gICAgfQotICAgIGVuZHB3ZW50KCk7CisgICAgICAgIHN0cnVjdCBncm91cCAgICppbmZvOworCisgICAgICAgIGluZm8gPSBnZXRncm5hbShjcHRyKTsKKyAgICAgICAgaWYgKGluZm8pCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBpbmZvLT5ncl9naWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJHcm91cCBub3QgZm91bmQgaW4gZ3JvdXAgZGF0YWJhc2UiKTsKKyAgICAgICAgZW5kZ3JlbnQoKTsKICNlbmRpZgorICAgIH0KIH0KICNlbmRpZgogCisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKIHZvaWQKIHNubXBkX3NldF9hZ2VudF9hZGRyZXNzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewpAQCAtMTk3LDYgKzE5Nyw3IEBACiAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICBORVRTTk1QX0RTX0FHRU5UX1BPUlRTLCBidWYpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KIAogdm9pZAogaW5pdF9hZ2VudF9yZWFkX2NvbmZpZyhjb25zdCBjaGFyICphcHApCkBAIC0yNDUsMTUgKzI0NiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wZF9mcmVlX3RyYXBjb21tdW5pdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tdW5pdHktc3RyaW5nIik7CiAjZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCBhcHAsICJ2MXRyYXBhZGRyZXNzIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9UUkFQX0FERFIpOwogI2lmZGVmIEhBVkVfVU5JU1REX0gKICAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImFnZW50dXNlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3NldF9hZ2VudF91c2VyLCBOVUxMLCAidXNlcmlkIik7CiAgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJhZ2VudGdyb3VwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcGRfc2V0X2FnZW50X2dyb3VwLCBOVUxMLCAiZ3JvdXBpZCIpOwogI2VuZGlmCisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKICAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImFnZW50YWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3NldF9hZ2VudF9hZGRyZXNzLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUCBiaW5kIGFkZHJlc3MiKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCiAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sIGFwcCwgInF1aXQiLCAKIAkJCSAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUVVJVF9JTU1FRElBVEVMWSk7CkBAIC0yODQsOSArMjkwLDYgQEAKICAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19QUkVfVVBEQVRFX0NPTkZJRywgTlVMTCk7CiAgICAgZnJlZV9jb25maWcoKTsKLSNpZmRlZiBVU0lOR19NSUJJSV9WQUNNX0NPTkZfTU9EVUxFCi0gICAgdmFjbV9zdGFuZGFyZF92aWV3cygwLDAsTlVMTCxOVUxMKTsKLSNlbmRpZgogICAgIHJlYWRfY29uZmlncygpOwogfQogCkBAIC0zMDIsMTAgKzMwNSwyNyBAQAogfQogCiB2b2lkCitzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwgY29uc3QgY2hhciAqaGVscCkKK3sKKyAgICBERUJVR01TR1RMKCgic25tcGRfcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAicmVnaXN0ZXJpbmcgLmNvbmYgdG9rZW4gZm9yIFwiJXNcIlxuIiwgdG9rZW4pKTsKKyAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIodG9rZW4sICh2b2lkKCopKGNvbnN0IGNoYXIgKiwgY2hhciAqKSlwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VyLCBoZWxwKTsKK30KKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NOTVBEX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NOTVBEX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBEX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIKK3ZvaWQKIHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqdG9rZW4pCiB7CiAgICAgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIodG9rZW4pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUERfVU5SRUdJU1RFUl9DT05GSUdfSEFORExFUiAqLwogCiAvKgogICogdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IG1pYi1tb2R1bGVzIHRvIHN0b3JlIHBlcm1lbmFudApkaWZmIC0tZ2l0IGEvYWdlbnQvYWdlbnRfcmVnaXN0cnkuYyBiL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmMKaW5kZXggZDBkMzViNy4uMGRkNmM0MiAxMDA2NDQKLS0tIGEvYWdlbnQvYWdlbnRfcmVnaXN0cnkuYworKysgYi9hZ2VudC9hZ2VudF9yZWdpc3RyeS5jCkBAIC0xMSw3ICsxMSw5IEBACiAgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCi0vKiogQGRlZmdyb3VwIGFnZW50X3JlZ2lzdHJ5IE1haW50YWluIGEgcmVnaXN0cnkgb2YgTUlCIHN1YnRyZWVzLCB0b2dldGhlciB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIG1pYm1vZHVsZSwgc2Vzc2lvbnMsIGV0YworLyoqIEBkZWZncm91cCBhZ2VudF9yZWdpc3RyeSBSZWdpc3RyeSBvZiBNSUIgc3VidHJlZXMsIG1vZHVsZXMsIHNlc3Npb25zLCBldGMKKyAqICAgICBNYWludGFpbiBhIHJlZ2lzdHJ5IG9mIE1JQiBzdWJ0cmVlcywgdG9nZXRoZXIgd2l0aCByZWxhdGVkIGluZm9ybWF0aW9uCisgKiAgICAgcmVnYXJkaW5nIE1JQiBtb2R1bGVzLCBzZXNzaW9ucywgZXRjCiAgKiAgIEBpbmdyb3VwIGFnZW50CiAgKgogICogQHsKQEAgLTIwLDYgKzIyLDggQEAKICNkZWZpbmUgSU5fU05NUF9WQVJTX0MKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0zMCwxNSArMzQsOCBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTIsNiArNDksNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgogCkBAIC02OCwxMyArNjYsMzk1IEBACiAjaW5jbHVkZSAiYWdlbnR4L2NsaWVudC5oIgogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX21pYl9kZXRhY2hfbm9kZShuZXRzbm1wX3N1YnRyZWUgKnMpOwotTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQgaW52YWxpZGF0ZV9sb29rdXBfY2FjaGUoY29uc3QgY2hhciAqY29udGV4dCk7Ci12b2lkIG5ldHNubXBfc2V0X2xvb2t1cF9jYWNoZV9zaXplKGludCBuZXdzaXplKTsKLWludCBuZXRzbm1wX2dldF9sb29rdXBfY2FjaGVfc2l6ZSh2b2lkKTsKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF9yZWdpc3RyeV9hbGwsIGxpYm5ldHNubXBhZ2VudCkKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVucmVnaXN0ZXJfbWliX3RhYmxlX3JvdywgYWdlbnRfcmVnaXN0cnlfYWxsKQorCisvKiogQGRlZmdyb3VwIGFnZW50X2xvb2t1cF9jYWNoZSBMb29rdXAgY2FjaGUsIHN0b3JpbmcgdGhlIHJlZ2lzdGVyZWQgT0lEcy4KKyAqICAgICBNYWludGFpbiB0aGUgY2FjaGUgdXNlZCBmb3IgbG9jYXRpbmcgc3ViLXRyZWVzIGFuZCBPSURzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KKworLyoqICBMb29rdXAgY2FjaGUgLSBkZWZhdWx0IHNpemUuKi8KKyNkZWZpbmUgU1VCVFJFRV9ERUZBVUxUX0NBQ0hFX1NJWkUgOAorLyoqICBMb29rdXAgY2FjaGUgLSBtYXggYWNjZXB0YWJsZSBzaXplLiovCisjZGVmaW5lIFNVQlRSRUVfTUFYX0NBQ0hFX1NJWkUgICAgIDMyCitpbnQgbG9va3VwX2NhY2hlX3NpemUgPSAwOyAvKmVuYWJsZWQgbGF0ZXIgYWZ0ZXIgcmVnaXN0cmF0aW9ucyBhcmUgbG9hZGVkICovCisKK3R5cGVkZWYgc3RydWN0IGxvb2t1cF9jYWNoZV9zIHsKKyAgIG5ldHNubXBfc3VidHJlZSAqbmV4dDsKKyAgIG5ldHNubXBfc3VidHJlZSAqcHJldmlvdXM7Cit9IGxvb2t1cF9jYWNoZTsKKwordHlwZWRlZiBzdHJ1Y3QgbG9va3VwX2NhY2hlX2NvbnRleHRfcyB7CisgICBjaGFyICpjb250ZXh0OworICAgc3RydWN0IGxvb2t1cF9jYWNoZV9jb250ZXh0X3MgKm5leHQ7CisgICBpbnQgdGhlY2FjaGVjb3VudDsKKyAgIGludCBjdXJyZW50cG9zOworICAgbG9va3VwX2NhY2hlIGNhY2hlW1NVQlRSRUVfTUFYX0NBQ0hFX1NJWkVdOworfSBsb29rdXBfY2FjaGVfY29udGV4dDsKKworc3RhdGljIGxvb2t1cF9jYWNoZV9jb250ZXh0ICp0aGVjb250ZXh0Y2FjaGUgPSBOVUxMOworCisvKiogU2V0IHRoZSBsb29rdXAgY2FjaGUgc2l6ZSBmb3Igb3B0aW1pemVkIGFnZW50IHJlZ2lzdHJhdGlvbiBwZXJmb3JtYW5jZS4KKyAqIE5vdGUgdGhhdCBpdCBpcyBvbmx5IHVzZWQgYnkgbWFzdGVyIGFnZW50IC0gc3ViLWFnZW50IGRvZXNuJ3QgbmVlZCB0aGUgY2FjaGUuCisgKiBUaGUgcm91Z2ggZ3VpZGUgaXMgdGhhdCB0aGUgY2FjaGUgc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiBzaW11bHRhbmVvdXMgbWFuYWdlcnMgeW91IGV4cGVjdCB0byB0YWxrIHRvIHRoZSBhZ2VudCAoTSkgdGltZXMgODAlCisgKiAob3Igc28sIGhlIHNheXMgcmFuZG9tbHkpIHRoZSBhdmVyYWdlIG51bWJlciAoTikgb2YgdmFyYmluZHMgeW91CisgKiBleHBlY3QgdG8gcmVjZWl2ZSBpbiBhIGdpdmVuIHJlcXVlc3QgZm9yIGEgbWFuYWdlci4gIGllLCBNIHRpbWVzIE4uCisgKiBCaWdnZXIgZG9lcyBOT1QgbmVjZXNzYXJpbHkgbWVhbiBiZXR0ZXIuICBDZXJ0YWlubHkgMTYgc2hvdWxkIGJlIGFuCisgKiB1cHBlciBsaW1pdC4gIDMyIGlzIHRoZSBoYXJkIGNvZGVkIGxpbWl0LgorICoKKyAqIEBwYXJhbSBuZXdzaXplIHNldCB0byB0aGUgbWF4aW11bSBzaXplIG9mIGEgY2FjaGUgZm9yIGEgZ2l2ZW4KKyAqIGNvbnRleHQuICBTZXQgdG8gMCB0byBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgb3IgdG8gLTEgdG8gc2V0CisgKiB0byB0aGUgZGVmYXVsdCBjYWNoZSBzaXplICg4KSwgb3IgdG8gYSBudW1iZXIgb2YgeW91ciBjaG9zaW5nLiAgVGhlCisgKi8KK3ZvaWQKK25ldHNubXBfc2V0X2xvb2t1cF9jYWNoZV9zaXplKGludCBuZXdzaXplKSB7CisgICAgaWYgKG5ld3NpemUgPCAwKQorICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IFNVQlRSRUVfREVGQVVMVF9DQUNIRV9TSVpFOworICAgIGVsc2UgaWYgKG5ld3NpemUgPCBTVUJUUkVFX01BWF9DQUNIRV9TSVpFKQorICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IG5ld3NpemU7CisgICAgZWxzZQorICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IFNVQlRSRUVfTUFYX0NBQ0hFX1NJWkU7Cit9CisKKy8qKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxvb2t1cCBjYWNoZSBzaXplCisgKiAgU2hvdWxkIGJlIGNhbGxlZCBmcm9tIG1hc3RlciBhZ2VudCBvbmx5IC0gc3ViLWFnZW50IGRvZXNuJ3QgbmVlZCB0aGUgY2FjaGUuCisgKgorICogIEByZXR1cm4gdGhlIGN1cnJlbnQgbG9va3VwIGNhY2hlIHNpemUKKyAqLworaW50CituZXRzbm1wX2dldF9sb29rdXBfY2FjaGVfc2l6ZSh2b2lkKSB7CisgICAgcmV0dXJuIGxvb2t1cF9jYWNoZV9zaXplOworfQorCisvKiogUmV0dXJucyBsb29rdXAgY2FjaGUgZW50cnkgZm9yIHRoZSBjb250ZXh0IG9mIGdpdmVuIG5hbWUuCisgKgorICogIEBwYXJhbSBjb250ZXh0IE5hbWUgb2YgdGhlIGNvbnRleHQuIE5hbWUgaXMgY2FzZSBzZW5zaXRpdmUuCisgKgorICogIEByZXR1cm4gdGhlIGxvb2t1cCBjYWNoZSBjb250ZXh0CisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBsb29rdXBfY2FjaGVfY29udGV4dCAqCitnZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29uc3QgY2hhciAqY29udGV4dCkgeworICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpwdHI7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBjb250ZXh0ID0gIiI7CisKKyAgICBmb3IocHRyID0gdGhlY29udGV4dGNhY2hlOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkgeworICAgICAgICBpZiAoc3RyY21wKHB0ci0+Y29udGV4dCwgY29udGV4dCkgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIXB0cikgeworICAgICAgICBpZiAobmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dCkpIHsKKyAgICAgICAgICAgIHB0ciA9IFNOTVBfTUFMTE9DX1RZUEVERUYobG9va3VwX2NhY2hlX2NvbnRleHQpOworICAgICAgICAgICAgcHRyLT5uZXh0ID0gdGhlY29udGV4dGNhY2hlOworICAgICAgICAgICAgcHRyLT5jb250ZXh0ID0gc3RyZHVwKGNvbnRleHQpOworICAgICAgICAgICAgdGhlY29udGV4dGNhY2hlID0gcHRyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHB0cjsKK30KKworLyoqIEFkZHMgYW4gZW50cnkgdG8gdGhlIExvb2t1cCBDYWNoZSB1bmRlciBzcGVjaWZpZWQgY29udGV4dCBuYW1lLgorICoKKyAqICBAcGFyYW0gY29udGV4dCAgTmFtZSBvZiB0aGUgY29udGV4dC4gTmFtZSBpcyBjYXNlIHNlbnNpdGl2ZS4KKyAqCisgKiAgQHBhcmFtIG5leHQgICAgIE5leHQgc3VidHJlZSBpdGVtLgorICoKKyAqICBAcGFyYW0gcHJldmlvdXMgUHJldmlvdXMgc3VidHJlZSBpdGVtLgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZAorbG9va3VwX2NhY2hlX2FkZChjb25zdCBjaGFyICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBuZXRzbm1wX3N1YnRyZWUgKm5leHQsIG5ldHNubXBfc3VidHJlZSAqcHJldmlvdXMpIHsKKyAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqY3B0cjsKKworICAgIGlmICgoY3B0ciA9IGdldF9jb250ZXh0X2xvb2t1cF9jYWNoZShjb250ZXh0KSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNwdHItPnRoZWNhY2hlY291bnQgPCBsb29rdXBfY2FjaGVfc2l6ZSkKKyAgICAgICAgY3B0ci0+dGhlY2FjaGVjb3VudCsrOworCisgICAgY3B0ci0+Y2FjaGVbY3B0ci0+Y3VycmVudHBvc10ubmV4dCA9IG5leHQ7CisgICAgY3B0ci0+Y2FjaGVbY3B0ci0+Y3VycmVudHBvc10ucHJldmlvdXMgPSBwcmV2aW91czsKKworICAgIGlmICgrK2NwdHItPmN1cnJlbnRwb3MgPj0gbG9va3VwX2NhY2hlX3NpemUpCisgICAgICAgIGNwdHItPmN1cnJlbnRwb3MgPSAwOworfQorCisvKiogQHByaXZhdGUKKyAqICBSZXBsYWNlcyBuZXh0IGFuZCBwcmV2aW91cyBwb2ludGVyIGluIGdpdmVuIExvb2t1cCBDYWNoZS4KKyAqCisgKiAgQHBhcmFtIHB0ciAgICAgIExvb2t1cCBDYWNoZSBwb2ludGVyLgorICoKKyAqICBAcGFyYW0gbmV4dCAgICAgTmV4dCBzdWJ0cmVlIGl0ZW0uCisgKgorICogIEBwYXJhbSBwcmV2aW91cyBQcmV2aW91cyBzdWJ0cmVlIGl0ZW0uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCitsb29rdXBfY2FjaGVfcmVwbGFjZShsb29rdXBfY2FjaGUgKnB0ciwKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZSAqbmV4dCwgbmV0c25tcF9zdWJ0cmVlICpwcmV2aW91cykgeworCisgICAgcHRyLT5uZXh0ID0gbmV4dDsKKyAgICBwdHItPnByZXZpb3VzID0gcHJldmlvdXM7Cit9CisKKy8qKiBGaW5kcyBhbiBlbnRyeSBpbiB0aGUgTG9va3VwIENhY2hlLgorICoKKyAqICBAcGFyYW0gY29udGV4dCAgQ2FzZSBzZW5zaXRpdmUgbmFtZSBvZiB0aGUgY29udGV4dC4KKyAqCisgKiAgQHBhcmFtIG5hbWUgICAgIFRoZSBPSUQgd2UncmUgc2VhcmNoaW5nIGZvci4KKyAqCisgKiAgQHBhcmFtIG5hbWVfbGVuIE51bWJlciBvZiBzdWItaWRzIChzaW5nbGUgaW50ZWdlcnMpIGluIHRoZSBPSUQuCisgKgorICogIEBwYXJhbSByZXRjbXAgICBWYWx1ZSBzZXQgdG8gc25tcF9vaWRfY29tcGFyZSgpIGNhbGwgcmVzdWx0LgorICogICAgICAgICAgICAgICAgICBUaGUgdmFsdWUsIGlmIHNldCwgaXMgYWx3YXlzIG5vbm5lZ2F0aXZlLgorICoKKyAqICBAcmV0dXJuIGdpdmVzIExvb2t1cCBDYWNoZSBlbnRyeSwgb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKgorICogIEBzZWUgc25tcF9vaWRfY29tcGFyZSgpCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBsb29rdXBfY2FjaGUgKgorbG9va3VwX2NhY2hlX2ZpbmQoY29uc3QgY2hhciAqY29udGV4dCwgY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sCisgICAgICAgICAgICAgICAgICBpbnQgKnJldGNtcCkgeworICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpjcHRyOworICAgIGxvb2t1cF9jYWNoZSAqcmV0ID0gTlVMTDsKKyAgICBpbnQgY21wOworICAgIGludCBpOworCisgICAgaWYgKChjcHRyID0gZ2V0X2NvbnRleHRfbG9va3VwX2NhY2hlKGNvbnRleHQpKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvcihpID0gMDsgaSA8IGNwdHItPnRoZWNhY2hlY291bnQgJiYgaSA8IGxvb2t1cF9jYWNoZV9zaXplOyBpKyspIHsKKyAgICAgICAgaWYgKGNwdHItPmNhY2hlW2ldLnByZXZpb3VzLT5zdGFydF9hKQorICAgICAgICAgICAgY21wID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCBuYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B0ci0+Y2FjaGVbaV0ucHJldmlvdXMtPnN0YXJ0X2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHItPmNhY2hlW2ldLnByZXZpb3VzLT5zdGFydF9sZW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbXAgPSAxOworICAgICAgICBpZiAoY21wID49IDApIHsKKyAgICAgICAgICAgICpyZXRjbXAgPSBjbXA7CisgICAgICAgICAgICByZXQgPSAmKGNwdHItPmNhY2hlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisvKiogQHByaXZhdGUKKyAqICBDbGVhcnMgY2FjaGUgY291bnQgYW5kIHBvc2l0aW9uIGluIExvb2t1cCBDYWNoZS4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKK2ludmFsaWRhdGVfbG9va3VwX2NhY2hlKGNvbnN0IGNoYXIgKmNvbnRleHQpIHsKKyAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqY3B0cjsKKyAgICBpZiAoKGNwdHIgPSBnZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29udGV4dCkpICE9IE5VTEwpIHsKKyAgICAgICAgY3B0ci0+dGhlY2FjaGVjb3VudCA9IDA7CisgICAgICAgIGNwdHItPmN1cnJlbnRwb3MgPSAwOworICAgIH0KK30KKwordm9pZAorY2xlYXJfbG9va3VwX2NhY2hlKHZvaWQpIHsKKworICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpwdHIgPSBOVUxMLCAqbmV4dCA9IE5VTEw7CisKKyAgICBwdHIgPSB0aGVjb250ZXh0Y2FjaGU7CisgICAgd2hpbGUgKHB0cikgeworCW5leHQgPSBwdHItPm5leHQ7CisJU05NUF9GUkVFKHB0ci0+Y29udGV4dCk7CisJU05NUF9GUkVFKHB0cik7CisJcHRyID0gbmV4dDsKKyAgICB9CisgICAgdGhlY29udGV4dGNhY2hlID0gTlVMTDsgLyogISEhICovCit9CisKKy8qKiAgQH0gKi8KKy8qIEVuZCBvZiBMb29rdXAgY2FjaGUgY29kZSAqLworCisvKiogQGRlZmdyb3VwIGFnZW50X2NvbnRleHRfY2FjaGUgQ29udGV4dCBjYWNoZSwgc3RvcmluZyB0aGUgT0lEcyB1bmRlciB0aGVpciBjb250ZXh0cy4KKyAqICAgICBNYWludGFpbiB0aGUgY2FjaGUgdXNlZCBmb3IgbG9jYXRpbmcgc3ViLXRyZWVzIHJlZ2lzdGVyZWQgdW5kZXIgZGlmZmVyZW50IGNvbnRleHRzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KIHN1YnRyZWVfY29udGV4dF9jYWNoZSAqY29udGV4dF9zdWJ0cmVlcyA9IE5VTEw7CiAKKy8qKiBSZXR1cm5zIHRoZSB0b3AgZWxlbWVudCBvZiBjb250ZXh0IHN1YnRyZWVzIGNhY2hlLgorICogIFVzZSBpdCBpZiB5b3Ugd2lzaCB0byBzd2VlcCB0aHJvdWdoIHRoZSBjYWNoZSBlbGVtZW50cy4KKyAqICBOb3RlIHRoYXQgdGhlIHJldHVybiBtYXkgYmUgTlVMTCAoY2FjaGUgbWF5IGJlIGVtcHR5KS4KKyAqCisgKiAgQHJldHVybiBwb2ludGVyIHRvIHRvcG1vc3QgY29udGV4dCBzdWJ0cmVlIGNhY2hlIGVsZW1lbnQuCisgKi8KK3N1YnRyZWVfY29udGV4dF9jYWNoZSAqCitnZXRfdG9wX2NvbnRleHRfY2FjaGUodm9pZCkKK3sKKyAgICByZXR1cm4gY29udGV4dF9zdWJ0cmVlczsKK30KKworLyoqIEZpbmRzIHRoZSBmaXJzdCBzdWJ0cmVlIHJlZ2lzdGVyZWQgdW5kZXIgZ2l2ZW4gY29udGV4dC4KKyAqCisgKiAgQHBhcmFtIGNvbnRleHRfbmFtZSBUZXh0IG5hbWUgb2YgdGhlIGNvbnRleHQgd2UncmUgc2VhcmNoaW5nIGZvci4KKyAqCisgKiAgQHJldHVybiBwb2ludGVyIHRvIHRoZSBmaXJzdCBzdWJ0cmVlIGVsZW1lbnQsIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICovCituZXRzbm1wX3N1YnRyZWUgKgorbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQoreworICAgIHN1YnRyZWVfY29udGV4dF9jYWNoZSAqcHRyOworCisgICAgaWYgKCFjb250ZXh0X25hbWUpIHsKKyAgICAgICAgY29udGV4dF9uYW1lID0gIiI7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAibG9va2luZyBmb3Igc3VidHJlZSBmb3IgY29udGV4dDogXCIlc1wiXG4iLCAKKwkJY29udGV4dF9uYW1lKSk7CisgICAgZm9yIChwdHIgPSBjb250ZXh0X3N1YnRyZWVzOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5uZXh0KSB7CisgICAgICAgIGlmIChwdHItPmNvbnRleHRfbmFtZSAhPSBOVUxMICYmIAorCSAgICBzdHJjbXAocHRyLT5jb250ZXh0X25hbWUsIGNvbnRleHRfbmFtZSkgPT0gMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiZm91bmQgb25lIGZvcjogXCIlc1wiXG4iLCBjb250ZXh0X25hbWUpKTsKKyAgICAgICAgICAgIHJldHVybiBwdHItPmZpcnN0X3N1YnRyZWU7CisgICAgICAgIH0KKyAgICB9CisgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiZGlkbid0IGZpbmQgYSBzdWJ0cmVlIGZvciBjb250ZXh0OiBcIiVzXCJcbiIsIAorCQljb250ZXh0X25hbWUpKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoqIEFkZHMgdGhlIHN1YnRyZWUgdG8gQ29udGV4dCBDYWNoZSB1bmRlciBnaXZlbiBjb250ZXh0IG5hbWUuCisgKgorICogIEBwYXJhbSBjb250ZXh0X25hbWUgVGV4dCBuYW1lIG9mIHRoZSBjb250ZXh0IHdlJ3JlIGFkZGluZy4KKyAqCisgKiAgQHBhcmFtIG5ld190cmVlIFRoZSBzdWJ0cmVlIHRvIGJlIGFkZGVkLgorICoKKyAqICBAcmV0dXJuIGNvcHkgb2YgdGhlIG5ld190cmVlIHBvaW50ZXIsIG9yIE5VTEwgaWYgY2Fubm90IGFkZC4KKyAqLworbmV0c25tcF9zdWJ0cmVlICoKK2FkZF9zdWJ0cmVlKG5ldHNubXBfc3VidHJlZSAqbmV3X3RyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK3sKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0ciA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3VidHJlZV9jb250ZXh0X2NhY2hlKTsKKyAgICAKKyAgICBpZiAoIWNvbnRleHRfbmFtZSkgeworICAgICAgICBjb250ZXh0X25hbWUgPSAiIjsKKyAgICB9CisKKyAgICBpZiAoIXB0cikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiYWRkaW5nIHN1YnRyZWUgZm9yIGNvbnRleHQ6IFwiJXNcIlxuIiwJCisJCWNvbnRleHRfbmFtZSkpOworCisgICAgcHRyLT5uZXh0ID0gY29udGV4dF9zdWJ0cmVlczsKKyAgICBwdHItPmZpcnN0X3N1YnRyZWUgPSBuZXdfdHJlZTsKKyAgICBwdHItPmNvbnRleHRfbmFtZSA9IHN0cmR1cChjb250ZXh0X25hbWUpOworICAgIGNvbnRleHRfc3VidHJlZXMgPSBwdHI7CisKKyAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOworfQorCit2b2lkCituZXRzbm1wX3JlbW92ZV9zdWJ0cmVlKG5ldHNubXBfc3VidHJlZSAqdHJlZSkKK3sKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0cjsKKworICAgIGlmICghdHJlZS0+cHJldikgeworICAgICAgICBmb3IgKHB0ciA9IGNvbnRleHRfc3VidHJlZXM7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorICAgICAgICAgICAgaWYgKHB0ci0+Zmlyc3Rfc3VidHJlZSA9PSB0cmVlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBuZXRzbm1wX2Fzc2VydChwdHIpOworICAgICAgICBpZiAocHRyKQorICAgICAgICAgICAgcHRyLT5maXJzdF9zdWJ0cmVlID0gdHJlZS0+bmV4dDsKKyAgICB9IGVsc2UKKyAgICAgICAgdHJlZS0+cHJldi0+bmV4dCA9IHRyZWUtPm5leHQ7CisKKyAgICBpZiAodHJlZS0+bmV4dCkKKyAgICAgICAgdHJlZS0+bmV4dC0+cHJldiA9IHRyZWUtPnByZXY7Cit9CisKKy8qKiBSZXBsYWNlcyBmaXJzdCBzdWJ0cmVlIHJlZ2lzdGVyZWQgdW5kZXIgZ2l2ZW4gY29udGV4dCBuYW1lLgorICogIE92ZXJ3cml0ZXMgYSBzdWJ0cmVlIHBvaW50ZXIgaW4gQ29udGV4dCBDYWNoZSBmb3IgdGhlIGNvbnRleHQgbmFtZS4KKyAqICBUaGUgcHJldmlvdXMgc3VidHJlZSBwb2ludGVyIGlzIGxvc3QuIElmIHRoZXJlJ3Mgbm8gc3VidHJlZQorICogIHVuZGVyIHRoZSBzdXBwbGllZCBuYW1lLCB0aGVuIGEgbmV3IGNhY2hlIGl0ZW0gaXMgY3JlYXRlZC4KKyAqCisgKiAgQHBhcmFtIG5ld190cmVlICAgICBUaGUgbmV3IHN1YnRyZWUgdG8gYmUgc2V0LgorICoKKyAqICBAcGFyYW0gY29udGV4dF9uYW1lIFRleHQgbmFtZSBvZiB0aGUgY29udGV4dCB3ZSdyZSByZXBsYWNpbmcuCisgKiAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBjYXNlIHNlbnNpdGl2ZS4KKyAqCisgKiBAcmV0dXJuIGNvcHkgb2YgdGhlIG5ld190cmVlIHBvaW50ZXIsIG9yIE5VTEwgb24gZXJyb3IuCisgKi8KK25ldHNubXBfc3VidHJlZSAqCituZXRzbm1wX3N1YnRyZWVfcmVwbGFjZV9maXJzdChuZXRzbm1wX3N1YnRyZWUgKm5ld190cmVlLCAKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK3sKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0cjsKKyAgICBpZiAoIWNvbnRleHRfbmFtZSkgeworICAgICAgICBjb250ZXh0X25hbWUgPSAiIjsKKyAgICB9CisgICAgZm9yIChwdHIgPSBjb250ZXh0X3N1YnRyZWVzOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5uZXh0KSB7CisgICAgICAgIGlmIChwdHItPmNvbnRleHRfbmFtZSAhPSBOVUxMICYmCisJICAgIHN0cmNtcChwdHItPmNvbnRleHRfbmFtZSwgY29udGV4dF9uYW1lKSA9PSAwKSB7CisgICAgICAgICAgICBwdHItPmZpcnN0X3N1YnRyZWUgPSBuZXdfdHJlZTsKKyAgICAgICAgICAgIHJldHVybiBwdHItPmZpcnN0X3N1YnRyZWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGFkZF9zdWJ0cmVlKG5ld190cmVlLCBjb250ZXh0X25hbWUpOworfQorCisKK3ZvaWQgY2xlYXJfc3VidHJlZSAobmV0c25tcF9zdWJ0cmVlICpzdWIpOworCisvKiogQ29tcGxldGVseSBjbGVhcnMgYm90aCB0aGUgQ29udGV4dCBjYWNoZSBhbmQgdGhlIExvb2t1cCBjYWNoZS4KKyAqLwordm9pZAorY2xlYXJfY29udGV4dCh2b2lkKSB7CisKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0ciA9IE5VTEwsICpuZXh0ID0gTlVMTDsKKyAgICBuZXRzbm1wX3N1YnRyZWUgKnQsICp1OworCisgICAgREVCVUdNU0dUTCgoImFnZW50X3JlZ2lzdHJ5IiwgImNsZWFyIGNvbnRleHRcbiIpKTsKKworICAgIHB0ciA9IGdldF90b3BfY29udGV4dF9jYWNoZSgpOyAKKyAgICB3aGlsZSAocHRyKSB7CisJbmV4dCA9IHB0ci0+bmV4dDsKKworCWZvciAodCA9IHB0ci0+Zmlyc3Rfc3VidHJlZTsgdDsgdCA9IHUpIHsKKyAgICAgICAgICAgIHUgPSB0LT5uZXh0OworCSAgICBjbGVhcl9zdWJ0cmVlKHQpOworCX0KKworICAgICAgICBmcmVlKE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLCBwdHItPmNvbnRleHRfbmFtZSkpOworICAgICAgICBTTk1QX0ZSRUUocHRyKTsKKworCXB0ciA9IG5leHQ7CisgICAgfQorICAgIGNvbnRleHRfc3VidHJlZXMgPSBOVUxMOyAvKiAhISEgKi8KKyAgICBjbGVhcl9sb29rdXBfY2FjaGUoKTsKK30KKworLyoqICBAfSAqLworLyogRW5kIG9mIENvbnRleHQgY2FjaGUgY29kZSAqLworCisvKiogQGRlZmdyb3VwIGFnZW50X21pYl9zdWJ0cmVlIE1haW50YWluaW5nIE1JQiBzdWJ0cmVlcy4KKyAqICAgICBNYWludGFpbmluZyBNSUIgbm9kZXMgYW5kIHN1YnRyZWVzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfbWliX2RldGFjaF9ub2RlKG5ldHNubXBfc3VidHJlZSAqcyk7CisKKy8qKiBGcmVlcyBzaW5nbGUgc3VidHJlZSBpdGVtLgorICogIERlYWxsb2NhdGVkIG1lbW9yeSBmb3IgZ2l2ZW4gbmV0c25tcF9zdWJ0cmVlIGl0ZW0sIGluY2x1ZGluZworICogIEhhbmRsZSBSZWdpc3RyYXRpb24gc3RydWN0dXJlIHN0b3JlZCBpbnNpZGUgdGhpcyBpdGVtLgorICogIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIHBvaW50ZXIgaXMgaW52YWxpZAorICogIGFuZCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgKgorICogIEBwYXJhbSBhIFRoZSBzdWJ0cmVlIGl0ZW0gdG8gZGlzcG9zZS4KKyAqLwogdm9pZAogbmV0c25tcF9zdWJ0cmVlX2ZyZWUobmV0c25tcF9zdWJ0cmVlICphKQogewpAQCAtOTYsNiArNDc2LDE0IEBACiAgIH0KIH0KIAorLyoqIENyZWF0ZXMgZGVlcCBjb3B5IG9mIGEgc3VidHJlZSBpdGVtLgorICogIER1cGxpY2F0ZXMgYWxsIHByb3BlcnRpZXMgc3RvcmVkIGluIHRoZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZworICogIEhhbmRsZSBSZWdpc3RyYXRpb24gc3RydWN0dXJlIHN0b3JlZCBpbnNpZGUgdGhlIGl0ZW0uCisgKgorICogIEBwYXJhbSBhIFRoZSBzdWJ0cmVlIGl0ZW0gdG8gY29weS4KKyAqCisgKiAgQHJldHVybiBkZWVwIGNvcHkgb2YgdGhlIHN1YnRyZWUgaXRlbSwgb3IgTlVMTCBvbiBlcnJvci4KKyAqLwogbmV0c25tcF9zdWJ0cmVlICoKIG5ldHNubXBfc3VidHJlZV9kZWVwY29weShuZXRzbm1wX3N1YnRyZWUgKmEpCiB7CkBAIC0xMzYsNzggKzUyNCwxMCBAQAogICByZXR1cm4gYjsKIH0KIAotc3VidHJlZV9jb250ZXh0X2NhY2hlICoKLWdldF90b3BfY29udGV4dF9jYWNoZSh2b2lkKQotewotICAgIHJldHVybiBjb250ZXh0X3N1YnRyZWVzOwotfQotCi1uZXRzbm1wX3N1YnRyZWUgKgotbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQotewotICAgIHN1YnRyZWVfY29udGV4dF9jYWNoZSAqcHRyOwotCi0gICAgaWYgKCFjb250ZXh0X25hbWUpIHsKLSAgICAgICAgY29udGV4dF9uYW1lID0gIiI7Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAibG9va2luZyBmb3Igc3VidHJlZSBmb3IgY29udGV4dDogXCIlc1wiXG4iLCAKLQkJY29udGV4dF9uYW1lKSk7Ci0gICAgZm9yIChwdHIgPSBjb250ZXh0X3N1YnRyZWVzOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwdHItPmNvbnRleHRfbmFtZSAhPSBOVUxMICYmIAotCSAgICBzdHJjbXAocHRyLT5jb250ZXh0X25hbWUsIGNvbnRleHRfbmFtZSkgPT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiZm91bmQgb25lIGZvcjogXCIlc1wiXG4iLCBjb250ZXh0X25hbWUpKTsKLSAgICAgICAgICAgIHJldHVybiBwdHItPmZpcnN0X3N1YnRyZWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiZGlkbid0IGZpbmQgYSBzdWJ0cmVlIGZvciBjb250ZXh0OiBcIiVzXCJcbiIsIAotCQljb250ZXh0X25hbWUpKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotbmV0c25tcF9zdWJ0cmVlICoKLWFkZF9zdWJ0cmVlKG5ldHNubXBfc3VidHJlZSAqbmV3X3RyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKLXsKLSAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0ciA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3VidHJlZV9jb250ZXh0X2NhY2hlKTsKLSAgICAKLSAgICBpZiAoIWNvbnRleHRfbmFtZSkgewotICAgICAgICBjb250ZXh0X25hbWUgPSAiIjsKLSAgICB9Ci0KLSAgICBpZiAoIXB0cikgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgCi0gICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiYWRkaW5nIHN1YnRyZWUgZm9yIGNvbnRleHQ6IFwiJXNcIlxuIiwJCi0JCWNvbnRleHRfbmFtZSkpOwotCi0gICAgcHRyLT5uZXh0ID0gY29udGV4dF9zdWJ0cmVlczsKLSAgICBwdHItPmZpcnN0X3N1YnRyZWUgPSBuZXdfdHJlZTsKLSAgICBwdHItPmNvbnRleHRfbmFtZSA9IHN0cmR1cChjb250ZXh0X25hbWUpOwotICAgIGNvbnRleHRfc3VidHJlZXMgPSBwdHI7Ci0KLSAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOwotfQotCi1uZXRzbm1wX3N1YnRyZWUgKgotbmV0c25tcF9zdWJ0cmVlX3JlcGxhY2VfZmlyc3QobmV0c25tcF9zdWJ0cmVlICpuZXdfdHJlZSwgCi0JCQkgICAgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCi17Ci0gICAgc3VidHJlZV9jb250ZXh0X2NhY2hlICpwdHI7Ci0gICAgaWYgKCFjb250ZXh0X25hbWUpIHsKLSAgICAgICAgY29udGV4dF9uYW1lID0gIiI7Ci0gICAgfQotICAgIGZvciAocHRyID0gY29udGV4dF9zdWJ0cmVlczsgcHRyICE9IE5VTEw7IHB0ciA9IHB0ci0+bmV4dCkgewotICAgICAgICBpZiAocHRyLT5jb250ZXh0X25hbWUgIT0gTlVMTCAmJgotCSAgICBzdHJjbXAocHRyLT5jb250ZXh0X25hbWUsIGNvbnRleHRfbmFtZSkgPT0gMCkgewotICAgICAgICAgICAgcHRyLT5maXJzdF9zdWJ0cmVlID0gbmV3X3RyZWU7Ci0gICAgICAgICAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhZGRfc3VidHJlZShuZXdfdHJlZSwgY29udGV4dF9uYW1lKTsKLX0KLQotTkVUU05NUF9JTkxJTkUgdm9pZAorLyoqIEBwcml2YXRlCisgKiAgUmVwbGFjZXMgbmV4dCBzdWJ0cmVlIHBvaW50ZXIgaW4gZ2l2ZW4gc3VidHJlZS4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKIG5ldHNubXBfc3VidHJlZV9jaGFuZ2VfbmV4dChuZXRzbm1wX3N1YnRyZWUgKnB0ciwgbmV0c25tcF9zdWJ0cmVlICp0aGVuZXh0KQogewogICAgIHB0ci0+bmV4dCA9IHRoZW5leHQ7CkBAIC0yMTksNyArNTM5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRoZW5leHQtPm9pZF9vZmYpOwogfQogCi1ORVRTTk1QX0lOTElORSB2b2lkCisvKiogQHByaXZhdGUKKyAqICBSZXBsYWNlcyBwcmV2aW91cyBzdWJ0cmVlIHBvaW50ZXIgaW4gZ2l2ZW4gc3VidHJlZS4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKIG5ldHNubXBfc3VidHJlZV9jaGFuZ2VfcHJldihuZXRzbm1wX3N1YnRyZWUgKnB0ciwgbmV0c25tcF9zdWJ0cmVlICp0aGVwcmV2KQogewogICAgIHB0ci0+cHJldiA9IHRoZXByZXY7CkBAIC0yMzEsMTIgKzU1NCwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdHItPm9pZF9vZmYpOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobmV0c25tcF9zdWJ0cmVlX2NvbXBhcmUsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9TVUJUUkVFX0NPTVBBUkUKKy8qKiBDb21wYXJlcyBPSURzIG9mIGdpdmVuIHN1YnRyZWVzLgorICoKKyAqICBAcGFyYW0gYXAsYnAgUG9pbnRlcnMgdG8gdGhlIHN1YnRyZWVzIHRvIGJlIGNvbXBhcmVkLgorICoKKyAqICBAcmV0dXJuIE9JRHMgbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gcmVzdWx0LgorICoKKyAqICBAc2VlIHNubXBfb2lkX2NvbXBhcmUoKQorICovCiBpbnQKIG5ldHNubXBfc3VidHJlZV9jb21wYXJlKGNvbnN0IG5ldHNubXBfc3VidHJlZSAqYXAsIGNvbnN0IG5ldHNubXBfc3VidHJlZSAqYnApCiB7CiAgICAgcmV0dXJuIHNubXBfb2lkX2NvbXBhcmUoYXAtPm5hbWVfYSwgYXAtPm5hbWVsZW4sIGJwLT5uYW1lX2EsIGJwLT5uYW1lbGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfU1VCVFJFRV9DT01QQVJFICovCiAKKy8qKiBKb2lucyB0aGUgZ2l2ZW4gc3VidHJlZSB3aXRoIHRoZSBjdXJyZW50IHRyZWUuCisgKiAgVHJlZXMgYXJlIGpvaW5lZCBhbmQgdGhlIG9uZSBzdXBwbGllZCBhcyBwYXJhbWV0ZXIgaXMgZnJlZWQuCisgKgorICogIEBwYXJhbSByb290IFRoZSBzdWJ0cmVlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgc3VidHJlZS4KKyAqICAgICAgICAgICAgICBEbyBub3QgdXNlIHRoZSBwb2ludGVyIGFmdGVyIGpvaW5pbmcgLSBpdCBtYXkgYmUgaW52YWxpZC4KKyAqLwogdm9pZAogbmV0c25tcF9zdWJ0cmVlX2pvaW4obmV0c25tcF9zdWJ0cmVlICpyb290KQogewpAQCAtMjgzLDEwICs2MjMsMTggQEAKIH0KIAogCi0gICAgICAgIC8qCi0gICAgICAgICAqICBTcGxpdCB0aGUgc3VidHJlZSBpbnRvIHR3byBhdCB0aGUgc3BlY2lmaWVkIHBvaW50LAotICAgICAgICAgKiAgICByZXR1cm5pbmcgdGhlIG5ldyAoc2Vjb25kKSBzdWJ0cmVlCi0gICAgICAgICAqLworLyoqIFNwbGl0IHRoZSBzdWJ0cmVlIGludG8gdHdvIGF0IHRoZSBzcGVjaWZpZWQgcG9pbnQuCisgKiAgU3VidHJlZXMgb2YgdGhlIGdpdmVuIE9JRCBhbmQgc2VwYXJhdGVkIGFuZCBmb3JtZWQgaW50byB0aGUKKyAqICByZXR1cm5lZCBzdWJ0cmVlLgorICoKKyAqICBAcGFyYW0gY3VycmVudCBUaGUgZWxlbWVudCBhdCB3aGljaCBzcGxpdHRpbmcgaXMgc3RhcnRlZC4KKyAqCisgKiAgQHBhcmFtIG5hbWUgVGhlIE9JRCB3ZSdkIGxpa2UgdG8gc3BsaXQuCisgKgorICogIEBwYXJhbSBuYW1lX2xlbiBMZW5ndGggb2YgdGhlIE9JRC4KKyAqCisgKiAgQHJldHVybiBoZWFkIG9mIHRoZSBuZXcgKHNlY29uZCkgc3VidHJlZS4KKyAqLwogbmV0c25tcF9zdWJ0cmVlICoKIG5ldHNubXBfc3VidHJlZV9zcGxpdChuZXRzbm1wX3N1YnRyZWUgKmN1cnJlbnQsIG9pZCBuYW1lW10sIGludCBuYW1lX2xlbikKIHsKQEAgLTMyMCw5ICs2NjgsNyBAQAogCXJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChjdXJyZW50LT5lbmRfYSAhPSBOVUxMKSB7Ci0JU05NUF9GUkVFKGN1cnJlbnQtPmVuZF9hKTsKLSAgICB9CisgICAgU05NUF9GUkVFKGN1cnJlbnQtPmVuZF9hKTsKICAgICBjdXJyZW50LT5lbmRfYSA9IHRtcF9hOwogICAgIGN1cnJlbnQtPmVuZF9sZW4gPSBuYW1lX2xlbjsKICAgICBpZiAobmV3X3N1Yi0+c3RhcnRfYSAhPSBOVUxMKSB7CkBAIC0zOTMsMTIgKzczOSwxOSBAQAogICAgIHJldHVybiBuZXdfc3ViOwogfQogCisvKiogTG9hZHMgdGhlIHN1YnRyZWUgdW5kZXIgZ2l2ZW4gY29udGV4dCBuYW1lLgorICoKKyAqICBAcGFyYW0gbmV3X3N1YiBUaGUgc3VidHJlZSB0byBiZSBsb2FkZWQgaW50byBjdXJyZW50IHN1YnRyZWUuCisgKgorICogIEBwYXJhbSBjb250ZXh0X25hbWUgVGV4dCBuYW1lIG9mIHRoZSBjb250ZXh0IHdlJ3JlIHNlYXJjaGluZyBmb3IuCisgKgorICogIEByZXR1cm4gZ2l2ZXMgTUlCX1JFR0lTVEVSRURfT0sgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KIGludAogbmV0c25tcF9zdWJ0cmVlX2xvYWQobmV0c25tcF9zdWJ0cmVlICpuZXdfc3ViLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCiB7Ci0gICAgbmV0c25tcF9zdWJ0cmVlICp0cmVlMSwgKnRyZWUyLCAqbmV3MjsKKyAgICBuZXRzbm1wX3N1YnRyZWUgKnRyZWUxLCAqdHJlZTI7CiAgICAgbmV0c25tcF9zdWJ0cmVlICpwcmV2LCAqbmV4dDsKLSAgICBpbnQgICAgICAgICAgICAgcmVzLCByYyA9IDA7CiAKICAgICBpZiAobmV3X3N1YiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBNSUJfUkVHSVNURVJFRF9PSzsgICAgICAgLyogRGVnZW5lcmF0ZSBjYXNlICovCkBAIC00NDAsNyArNzkzLDcgQEAKICAgICAvKiAgSGFuZGxlIG5ldyBzdWJ0cmVlcyB0aGF0IHN0YXJ0IGluIHZpcmdpbiB0ZXJyaXRvcnkuICAqLwogCiAgICAgaWYgKHRyZWUxID09IE5VTEwpIHsKLQluZXcyID0gTlVMTDsKKyAgICAgICAgbmV0c25tcF9zdWJ0cmVlICpuZXcyID0gTlVMTDsKIAkvKiAgSXMgdGhlcmUgYW55IG92ZXJsYXAgd2l0aCBsYXRlciBzdWJ0cmVlcz8gICovCiAJaWYgKHRyZWUyICYmIHNubXBfb2lkX2NvbXBhcmUobmV3X3N1Yi0+ZW5kX2EsIG5ld19zdWItPmVuZF9sZW4sCiAJCQkJICAgICAgdHJlZTItPnN0YXJ0X2EsIHRyZWUyLT5zdGFydF9sZW4pID4gMCkgewpAQCAtNDk5LDEwICs4NTIsOCBAQAogCSAgICBJZiB0aGUgbmV3IHN1YnRyZWUgZXh0ZW5kcyBiZXlvbmQgdGhpcyBleGlzdGluZyByZWdpb24sCiAJICAgICAgICAgICAgc3BsaXQgaXQsIGFuZCByZWN1cnNlIHRvIG1lcmdlIHRoZSB0d28gcGFydHMuICAqLwogCi0JcmMgPSBzbm1wX29pZF9jb21wYXJlKG5ld19zdWItPmVuZF9hLCBuZXdfc3ViLT5lbmRfbGVuLCAKLQkJCSAgICAgIHRyZWUxLT5lbmRfYSwgdHJlZTEtPmVuZF9sZW4pOwotCi0gICAgICAgIHN3aXRjaCAocmMpIHsKKwlzd2l0Y2ggKHNubXBfb2lkX2NvbXBhcmUobmV3X3N1Yi0+ZW5kX2EsIG5ld19zdWItPmVuZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlMS0+ZW5kX2EsIHRyZWUxLT5lbmRfbGVuKSkgewogCiAJY2FzZSAtMToKIAkgICAgLyogIEV4aXN0aW5nIHN1YnRyZWUgY29udGFpbnMgbmV3IG9uZS4gICovCkBAIC01MzEsOCArODgyLDIzIEBACiAJCiAJICAgIGlmIChuZXh0ICYmIChuZXh0LT5uYW1lbGVuICA9PSBuZXdfc3ViLT5uYW1lbGVuKSAmJgogCQkobmV4dC0+cHJpb3JpdHkgPT0gbmV3X3N1Yi0+cHJpb3JpdHkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19zdWItPm5hbWVsZW4gIT0gMSkgLyogaWdub3JlIHJvb3QgT0lEIGR1cHMgKi8KLSAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR1cGxpY2F0ZSByZWdpc3RyYXRpb24gKCVzLCAlcykiLCBuZXh0LT5sYWJlbF9hLCBuZXdfc3ViLT5sYWJlbF9hKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3X3N1Yi0+bmFtZWxlbiAhPSAxKSB7ICAgIC8qIGlnbm9yZSByb290IE9JRCBkdXBzICovCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBvdXRfbGVuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4gPSAwOworICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAqYnVmID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGJ1Zl9vdmVyZmxvdyA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZCgodV9jaGFyICoqKSAmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmJ1Zl9vdmVyZmxvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc3ViLT5zdGFydF9hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zdWItPnN0YXJ0X2xlbik7CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBsaWNhdGUgcmVnaXN0cmF0aW9uOiBNSUIgbW9kdWxlcyAlcyBhbmQgJXMgKG9pZCAlcyVzKS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQtPmxhYmVsX2EsIG5ld19zdWItPmxhYmVsX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA/IGJ1ZiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfb3ZlcmZsb3cgPyAiIFtUUlVOQ0FURURdIiA6ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShidWYpOworICAgICAgICAgICAgICAgIH0KIAkJcmV0dXJuIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OOwogCSAgICB9CiAKQEAgLTU1OCwyMCArOTI0LDE4OCBAQAogCiAJY2FzZSAgMToKIAkgICAgLyogIE5ldyBzdWJ0cmVlIGNvbnRhaW5zIHRoZSBleGlzdGluZyBvbmUuICAqLwotCSAgICBuZXcyID0gbmV0c25tcF9zdWJ0cmVlX3NwbGl0KG5ld19zdWIsIHRyZWUxLT5lbmRfYSx0cmVlMS0+ZW5kX2xlbik7Ci0JICAgIHJlcyA9IG5ldHNubXBfc3VidHJlZV9sb2FkKG5ld19zdWIsIGNvbnRleHRfbmFtZSk7Ci0JICAgIGlmIChyZXMgIT0gTUlCX1JFR0lTVEVSRURfT0spIHsKLQkJbmV0c25tcF9zdWJ0cmVlX2ZyZWUobmV3Mik7Ci0JCXJldHVybiByZXM7Ci0JICAgIH0KLQkgICAgcmV0dXJuIG5ldHNubXBfc3VidHJlZV9sb2FkKG5ldzIsIGNvbnRleHRfbmFtZSk7Ci0JfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZSAqbmV3MiA9CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZV9zcGxpdChuZXdfc3ViLCB0cmVlMS0+ZW5kX2EsdHJlZTEtPmVuZF9sZW4pOworICAgICAgICAgICAgICAgIGludCByZXMgPSBuZXRzbm1wX3N1YnRyZWVfbG9hZChuZXdfc3ViLCBjb250ZXh0X25hbWUpOworICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gTUlCX1JFR0lTVEVSRURfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfc3VidHJlZShuZXcyKTsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdWJ0cmVlX2ZyZWUobmV3Mik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX3N1YnRyZWVfbG9hZChuZXcyLCBjb250ZXh0X25hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi0vKgotICogTm90ZTogcmVnaW5mbyB3aWxsIGJlIGZyZWVkIG9uIGZhaWx1cmVzCisvKiogRnJlZSB0aGUgZ2l2ZW4gc3VidHJlZSBhbmQgYWxsIGl0cyBjaGlsZHJlbi4KKyAqCisgKiAgQHBhcmFtIHN1YiBTdWJ0cmVlIGJyYW5jaCB0byBiZSBjbGVhcmVkIGFuZCBmcmVlZC4KKyAqICAgICAgICAgICAgIEFmdGVyIHRoZSBjYWxsLCB0aGlzIHBvaW50ZXIgaXMgaW52YWxpZAorICogICAgICAgICAgICAgYW5kIHNob3VsZCBiZSBzZXQgdG8gTlVMTC4KKyAqLwordm9pZAorY2xlYXJfc3VidHJlZSAobmV0c25tcF9zdWJ0cmVlICpzdWIpIHsKKworICAgIG5ldHNubXBfc3VidHJlZSAqYzsKKyAgICAKKyAgICBpZiAoc3ViID09IE5VTEwpCisJcmV0dXJuOworCisgICAgZm9yKGMgPSBzdWI7IGM7KSB7CisgICAgICAgIHN1YiA9IGM7CisgICAgICAgIGMgPSBjLT5jaGlsZHJlbjsKKyAgICAgICAgbmV0c25tcF9zdWJ0cmVlX2ZyZWUoc3ViKTsKKyAgICB9CisKK30KKworbmV0c25tcF9zdWJ0cmVlICoKK25ldHNubXBfc3VidHJlZV9maW5kX3ByZXYoY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbGVuLCBuZXRzbm1wX3N1YnRyZWUgKnN1YnRyZWUsCisJCQkgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK3sKKyAgICBsb29rdXBfY2FjaGUgKmxvb2t1cF9jYWNoZSA9IE5VTEw7CisgICAgbmV0c25tcF9zdWJ0cmVlICpteXB0ciA9IE5VTEwsICpwcmV2aW91cyA9IE5VTEw7CisgICAgaW50IGNtcCA9IDE7CisgICAgc2l6ZV90IGxsX29mZiA9IDA7CisKKyAgICBpZiAoc3VidHJlZSkgeworICAgICAgICBteXB0ciA9IHN1YnRyZWU7CisgICAgfSBlbHNlIHsKKwkvKiBsb29rIHRocm91Z2ggZXZlcnl0aGluZyAqLworICAgICAgICBpZiAobG9va3VwX2NhY2hlX3NpemUpIHsKKyAgICAgICAgICAgIGxvb2t1cF9jYWNoZSA9IGxvb2t1cF9jYWNoZV9maW5kKGNvbnRleHRfbmFtZSwgbmFtZSwgbGVuLCAmY21wKTsKKyAgICAgICAgICAgIGlmIChsb29rdXBfY2FjaGUpIHsKKyAgICAgICAgICAgICAgICBteXB0ciA9IGxvb2t1cF9jYWNoZS0+bmV4dDsKKyAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGxvb2t1cF9jYWNoZS0+cHJldmlvdXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW15cHRyKQorICAgICAgICAgICAgICAgIG15cHRyID0gbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dF9uYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG15cHRyID0gbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dF9uYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogdGhpcyBvcHRpbWl6YXRpb24gY2F1c2VzIGEgc2VnZmF1bHQgb24gc2YgY2YgYWxwaGEtbGludXgxLgorICAgICAqIGlmZGVmIG91dCB1bnRpbCBzb21lb25lIGZpZ3VyZXMgb3V0IHdoeSBhbmQgZml4ZXMgaXQuIHh4eC1ya3MgMjAwNTExMTcKKyAgICAgKi8KKyNpZm5kZWYgX19hbHBoYQorI2RlZmluZSBXVEVTVF9PUFRJTUlaQVRJT04gMQorI2VuZGlmCisjaWZkZWYgV1RFU1RfT1BUSU1JWkFUSU9OCisgICAgREVCVUdNU0dUTCgoInd0ZXN0Iiwib2lkIGluOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJ3dGVzdCIsIG5hbWUsIGxlbikpOworICAgIERFQlVHTVNHKCgid3Rlc3QiLCJcbiIpKTsKKyNlbmRpZgorICAgIGZvciAoOyBteXB0ciAhPSBOVUxMOyBwcmV2aW91cyA9IG15cHRyLCBteXB0ciA9IG15cHRyLT5uZXh0KSB7CisjaWZkZWYgV1RFU1RfT1BUSU1JWkFUSU9OCisgICAgICAgIC8qIENvbXBhcmUgdGhlIGluY29taW5nIG9pZCB3aXRoIHRoZSBsaW5rZWQgbGlzdC4gIElmIHdlIGhhdmUKKyAgICAgICAgICAgcmVzdWx0cyBvZiBwcmV2aW91cyBjb21wYXJlcywgaXRzIGZhc3RlciB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgIGxlbmd0aCB3ZSBkaWZmZXJlZCBpbiB0aGUgbGFzdCBjaGVjayBpcyBncmVhdGVyIHRoYW4gdGhlCisgICAgICAgICAgIGxlbmd0aCBiZXR3ZWVuIHRoaXMgcG9pbnRlciBhbmQgdGhlIGxhc3QgdGhlbiB3ZSBkb24ndCBuZWVkCisgICAgICAgICAgIHRvIGFjdHVhbGx5IHBlcmZvcm0gYSBjb21wYXJpc29uICovCisgICAgICAgIERFQlVHTVNHVEwoKCJ3dGVzdCIsIm9pZCBjbXA6ICIpKTsKKyAgICAgICAgREVCVUdNU0dPSUQoKCJ3dGVzdCIsIG15cHRyLT5zdGFydF9hLCBteXB0ci0+c3RhcnRfbGVuKSk7CisgICAgICAgIERFQlVHTVNHKCgid3Rlc3QiLCIgIC0tLSBvZmYgPSAlbHUsIGluIG9mZiA9ICVsdSB0ZXN0ID0gJWRcbiIsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylteXB0ci0+b2lkX29mZiwgKHVuc2lnbmVkIGxvbmcpbGxfb2ZmLAorICAgICAgICAgICAgICAgICAgIShsbF9vZmYgJiYgbXlwdHItPm9pZF9vZmYgJiYKKyAgICAgICAgICAgICAgICAgICAgbXlwdHItPm9pZF9vZmYgPiBsbF9vZmYpKSk7CisgICAgICAgIGlmICghKGxsX29mZiAmJiBteXB0ci0+b2lkX29mZiAmJiBteXB0ci0+b2lkX29mZiA+IGxsX29mZikgJiYKKyAgICAgICAgICAgIG5ldHNubXBfb2lkX2NvbXBhcmVfbGwobmFtZSwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXB0ci0+c3RhcnRfYSwgbXlwdHItPnN0YXJ0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxsX29mZikgPCAwKSB7CisjZWxzZQorICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZShuYW1lLCBsZW4sIG15cHRyLT5zdGFydF9hLCBteXB0ci0+c3RhcnRfbGVuKSA8IDApIHsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGxvb2t1cF9jYWNoZV9zaXplICYmIHByZXZpb3VzICYmIGNtcCkgeworICAgICAgICAgICAgICAgIGlmIChsb29rdXBfY2FjaGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9va3VwX2NhY2hlX3JlcGxhY2UobG9va3VwX2NhY2hlLCBteXB0ciwgcHJldmlvdXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvb2t1cF9jYWNoZV9hZGQoY29udGV4dF9uYW1lLCBteXB0ciwgcHJldmlvdXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcHJldmlvdXM7Cit9CisKK25ldHNubXBfc3VidHJlZSAqCituZXRzbm1wX3N1YnRyZWVfZmluZF9uZXh0KGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwKKwkJCSAgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCit7CisgICAgbmV0c25tcF9zdWJ0cmVlICpteXB0ciA9IE5VTEw7CisKKyAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX3ByZXYobmFtZSwgbGVuLCBzdWJ0cmVlLCBjb250ZXh0X25hbWUpOworCisgICAgaWYgKG15cHRyICE9IE5VTEwpIHsKKyAgICAgICAgbXlwdHIgPSBteXB0ci0+bmV4dDsKKyAgICAgICAgd2hpbGUgKG15cHRyICE9IE5VTEwgJiYgKG15cHRyLT52YXJpYWJsZXMgPT0gTlVMTCB8fCAKKwkJCQkgbXlwdHItPnZhcmlhYmxlc19sZW4gPT0gMCkpIHsKKyAgICAgICAgICAgIG15cHRyID0gbXlwdHItPm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG15cHRyOworICAgIH0gZWxzZSBpZiAoc3VidHJlZSAhPSBOVUxMICYmIHNubXBfb2lkX2NvbXBhcmUobmFtZSwgbGVuLCAKKwkJCQkgICBzdWJ0cmVlLT5zdGFydF9hLCBzdWJ0cmVlLT5zdGFydF9sZW4pIDwgMCkgeworICAgICAgICByZXR1cm4gc3VidHJlZTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK25ldHNubXBfc3VidHJlZSAqCituZXRzbm1wX3N1YnRyZWVfZmluZChjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBsZW4sIG5ldHNubXBfc3VidHJlZSAqc3VidHJlZSwgCisJCSAgICAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQoreworICAgIG5ldHNubXBfc3VidHJlZSAqbXlwdHI7CisKKyAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX3ByZXYobmFtZSwgbGVuLCBzdWJ0cmVlLCBjb250ZXh0X25hbWUpOworICAgIGlmIChteXB0ciAmJiBteXB0ci0+ZW5kX2EgJiYKKyAgICAgICAgc25tcF9vaWRfY29tcGFyZShuYW1lLCBsZW4sIG15cHRyLT5lbmRfYSwgbXlwdHItPmVuZF9sZW4pPDApIHsKKyAgICAgICAgcmV0dXJuIG15cHRyOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCisvKiogIEB9ICovCisvKiBFbmQgb2YgU3VidHJlZXMgbWFpbnRhaW5pbmcgY29kZSAqLworCisvKiogQGRlZmdyb3VwIGFnZW50X21pYl9yZWdpc3RlcmluZyBSZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBNSUIgc3VidHJlZXMuCisgKiAgICAgQWRkaW5nIGFuZCByZW1vdmluZyBNSUIgbm9kZXMgdG8gdGhlIGRhdGFiYXNlIHVuZGVyIHRoZWlyIGNvbnRleHRzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KKworCisvKiogUmVnaXN0ZXJzIGEgTUlCIGhhbmRsZXIuCisgKgorICogIEBwYXJhbSBtb2R1bGVOYW1lCisgKiAgQHBhcmFtIHZhcgorICogIEBwYXJhbSB2YXJzaXplCisgKiAgQHBhcmFtIG51bXZhcnMKKyAqICBAcGFyYW0gIG1pYmxvYworICogIEBwYXJhbSBtaWJsb2NsZW4KKyAqICBAcGFyYW0gcHJpb3JpdHkKKyAqICBAcGFyYW0gcmFuZ2Vfc3ViaWQKKyAqICBAcGFyYW0gcmFuZ2VfdWJvdW5kCisgKiAgQHBhcmFtICBzcworICogIEBwYXJhbSBjb250ZXh0CisgKiAgQHBhcmFtIHRpbWVvdXQKKyAqICBAcGFyYW0gZmxhZ3MKKyAqICBAcGFyYW0gcmVnaW5mbyBSZWdpc3RyYXRpb24gaGFuZGxlciBzdHJ1Y3R1cmUuCisgKiAgICAgICAgICAgICAgICAgSW4gYSBjYXNlIG9mIGZhaWx1cmUsIGl0IHdpbGwgYmUgZnJlZWQuCisgKiAgQHBhcmFtIHBlcmZvcm1fY2FsbGJhY2sKKyAqCisgKiAgQHJldHVybiBnaXZlcyBNSUJfUkVHSVNURVJFRF9PSyBvciBNSUJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpCisgKiAgQHNlZSByZWdpc3Rlcl9hZ2VudHhfbGlzdCgpCisgKiAgQHNlZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUoKQogICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbWliKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCkBAIC01OTEsNyArMTEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICBpbnQgcGVyZm9ybV9jYWxsYmFjaykKIHsKICAgICBuZXRzbm1wX3N1YnRyZWUgKnN1YnRyZWUsICpzdWIyOwotICAgIGludCAgICAgICAgICAgICByZXMsIGk7CisgICAgaW50ICAgICAgICAgICAgIHJlczsKICAgICBzdHJ1Y3QgcmVnaXN0ZXJfcGFyYW1ldGVycyByZWdfcGFybXM7CiAgICAgaW50IG9sZF9sb29rdXBfY2FjaGVfdmFsID0gbmV0c25tcF9nZXRfbG9va3VwX2NhY2hlX3NpemUoKTsKIApAQCAtNjcyLDYgKzEyMDYsNyBAQAogCXJlc3Qgb2YgdGhlIHJhbmdlLiAgKi8KIAogICAgIGlmIChyZXMgPT0gTUlCX1JFR0lTVEVSRURfT0sgJiYgcmFuZ2Vfc3ViaWQgIT0gMCkgeworICAgICAgICBpbnQgaTsKIAlmb3IgKGkgPSBtaWJsb2NbcmFuZ2Vfc3ViaWQgLSAxXSArIDE7IGkgPD0gKGludClyYW5nZV91Ym91bmQ7IGkrKykgewogCSAgICBzdWIyID0gbmV0c25tcF9zdWJ0cmVlX2RlZXBjb3B5KHN1YnRyZWUpOwogCkBAIC02OTgsNiArMTIzMyw3IEBACiAgICAgICAgICAgICBpZiAocmVzICE9IE1JQl9SRUdJU1RFUkVEX09LKSB7CiAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl9taWJfY29udGV4dChtaWJsb2MsIG1pYmxvY2xlbiwgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9zdWJpZCwgcmFuZ2VfdWJvdW5kLCBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV9zdWJ0cmVlKHN1YjIpOwogCQluZXRzbm1wX3N1YnRyZWVfZnJlZShzdWIyKTsKICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9sb29rdXBfY2FjaGVfc2l6ZShvbGRfbG9va3VwX2NhY2hlX3ZhbCk7CiAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZV9sb29rdXBfY2FjaGUoY29udGV4dCk7CkBAIC03MzMsNiArMTI2OSw5IEBACiAgICAgICAgIHJlZ19wYXJtcy50aW1lb3V0ID0gdGltZW91dDsKICAgICAgICAgcmVnX3Bhcm1zLmZsYWdzID0gKHVfY2hhcikgZmxhZ3M7CiAgICAgICAgIHJlZ19wYXJtcy5jb250ZXh0TmFtZSA9IGNvbnRleHQ7CisgICAgICAgIHJlZ19wYXJtcy5zZXNzaW9uID0gc3M7CisgICAgICAgIHJlZ19wYXJtcy5yZWdpbmZvID0gcmVnaW5mbzsKKyAgICAgICAgcmVnX3Bhcm1zLmNvbnRleHROYW1lID0gY29udGV4dDsKICAgICAgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR0lTVEVSX09JRCwgJnJlZ19wYXJtcyk7CiAgICAgfQpAQCAtNzQyLDEwICsxMjgxLDkgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKgotICogUmVhdHRhY2ggYSBwYXJ0aWN1bGFyIG5vZGUuICAKKy8qKiBAcHJpdmF0ZQorICogIFJlYXR0YWNoIGEgcGFydGljdWxhciBub2RlLiAgCiAgKi8KLQogc3RhdGljIHZvaWQKIHJlZ2lzdGVyX21pYl9yZWF0dGFjaF9ub2RlKG5ldHNubXBfc3VidHJlZSAqcykKIHsKQEAgLTc2Niw2ICsxMzA0LDkgQEAKICAgICAgICAgcmVnX3Bhcm1zLnJhbmdlX3Vib3VuZCA9IHMtPnJhbmdlX3Vib3VuZDsKICAgICAgICAgcmVnX3Bhcm1zLnRpbWVvdXQgPSBzLT50aW1lb3V0OwogICAgICAgICByZWdfcGFybXMuZmxhZ3MgPSBzLT5mbGFnczsKKyAgICAgICAgcmVnX3Bhcm1zLnNlc3Npb24gPSBzLT5zZXNzaW9uOworICAgICAgICByZWdfcGFybXMucmVnaW5mbyA9IHMtPnJlZ2luZm87CisgICAgICAgIC8qIFhYWDogbWlzc2luZyBpbiBzdWJ0cmVlOiByZWdfcGFybXMuY29udGV4dE5hbWUgPSBzLT5jb250ZXh0OyAqLwogICAgICAgICBpZiAoKE5VTEwgIT0gcy0+cmVnaW5mbykgJiYgKE5VTEwgIT0gcy0+cmVnaW5mby0+Y29udGV4dE5hbWUpKQogICAgICAgICAgICAgcmVnX3Bhcm1zLmNvbnRleHROYW1lID0gcy0+cmVnaW5mby0+Y29udGV4dE5hbWU7CiAgICAgICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKQEAgLTc3NCwxMCArMTMxNSw4IEBACiAgICAgfQogfQogCi0vKgotICogQ2FsbCBjYWxsYmFja3MgdG8gcmVhdHRhY2ggYWxsIG91ciBub2Rlcy4gIAorLyoqIENhbGwgY2FsbGJhY2tzIHRvIHJlYXR0YWNoIGFsbCBvdXIgbm9kZXMuICAKICAqLwotCiB2b2lkCiByZWdpc3Rlcl9taWJfcmVhdHRhY2godm9pZCkKIHsKQEAgLTc5NCwxMCArMTMzMywxMSBAQAogICAgIH0KIH0KIAotLyoKLSAqIE1hcmsgYSBub2RlIGFzIGRldGFjaGVkLiAgCisvKiogQHByaXZhdGUKKyAqICBNYXJrIGEgbm9kZSBhcyBkZXRhY2hlZC4KKyAqCisgKiAgQHBhcmFtIHMgVGhlIG5vdGUgdG8gYmUgbWFya2VkCiAgKi8KLQogc3RhdGljIHZvaWQKIHJlZ2lzdGVyX21pYl9kZXRhY2hfbm9kZShuZXRzbm1wX3N1YnRyZWUgKnMpCiB7CkBAIC04MDYsMTIgKzEzNDYsMTAgQEAKICAgICB9CiB9CiAKLS8qCi0gKiBNYXJrIGFsbCBvdXIgcmVnaXN0ZXJlZCBPSURzIGFzIGRldGFjaGVkLiAgVGhpcyBpcyBvbmx5IHJlYWxseQotICogdXNlZnVsIGZvciBzdWJhZ2VudCBwcm90b2NvbHMsIHdoZW4gYSBjb25uZWN0aW9uIGlzIGxvc3Qgb3IKLSAqIHNvbWV0aGluZy4gIAorLyoqIE1hcmsgYWxsIG91ciByZWdpc3RlcmVkIE9JRHMgYXMgZGV0YWNoZWQuCisgKiAgVGhpcyBpcyBvbmx5IHJlYWxseSB1c2VmdWwgZm9yIHN1YmFnZW50IHByb3RvY29scywgd2hlbgorICogIGEgY29ubmVjdGlvbiBpcyBsb3N0IG9yIHRoZSBzdWJhZ2VudCBpcyBiZWluZyBzaHV0IGRvd24uICAKICAqLwotCiB2b2lkCiByZWdpc3Rlcl9taWJfZGV0YWNoKHZvaWQpCiB7CkBAIC04MjcsMTIgKzEzNjUsNjAgQEAKICAgICB9CiB9CiAKKy8qKiBSZWdpc3RlciBhIG5ldyBtb2R1bGUgaW50byB0aGUgTUlCIGRhdGFiYXNlLCB3aXRoIGFsbCBwb3NzaWJsZSBjdXN0b20gb3B0aW9ucworICoKKyAqICBAcGFyYW0gIG1vZHVsZU5hbWUgVGV4dCBuYW1lIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBuYW1lIHdpbGwgYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kdWxlCisgKiAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgYWdlbnQuCisgKgorICogIEBwYXJhbSAgdmFyICAgICAgICBBcnJheSBvZiB2YXJpYWJsZXMgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgbW9kdWxlLgorICoKKyAqICBAcGFyYW0gIHZhcnNpemUgICAgU2l6ZSBvZiBhIHNpbmdsZSB2YXJpYWJsZSBpbiB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBzaXplIGlzIG5vcm1hbGx5IGVxdWFsIHRvIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUpLAorICogICAgICAgICAgICAgICAgICAgICBidXQgaWYgd2Ugd2lzaCB0byB1c2Ugc2hvcnRlciAob3IgbG9uZ2VyKSBPSURzLCB0aGVuIHdlCisgKiAgICAgICAgICAgICAgICAgICAgIGNvdWxkIHVzZSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgdmFyaWFibGUgc3RydWN0dXJlLgorICoKKyAqICBAcGFyYW0gIG51bXZhcnMgICAgTnVtYmVyIG9mIHZhcmlhYmxlcyBpbiB0aGUgdmFyIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGhvdyBtYW55IHZhcmlhYmxlcyB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmVnaXN0ZXIuCisgKgorICogIEBwYXJhbSAgbWlibG9jICAgICBCYXNlIE9JRCBvZiB0aGUgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICBBbGwgT0lEcyBpbiB2YXIgYXJyYXkgc2hvdWxkIGJlIHN1Yi1vaWRzIG9mIHRoZSBiYXNlIE9JRC4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2NsZW4gIExlbmd0aCBvZiB0aGUgYmFzZSBPSUQuCisgKiAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnRlZ2VycyBtYWtpbmcgdXAgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcGFyYW0gIHByaW9yaXR5ICAgUmVnaXN0cmF0aW9uIHByaW9yaXR5LgorICogICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGFjaGlldmUgYSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gd2hlbiBkaWZmZXJlbnQKKyAqICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgcmVnaXN0ZXIgaWRlbnRpY2FsIG9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMuCisgKiAgICAgICAgICAgICAgICAgICAgIFByaW1hcmlseSB1c2VkIHdpdGggQWdlbnRYIHN1YmFnZW50IHJlZ2lzdHJhdGlvbnMuCisgKgorICogIEBwYXJhbSByYW5nZV9zdWJpZCBJZiBub24temVybywgdGhlIG1vZHVsZSBpcyByZWdpc3RlcmVkIGFnYWluc3QgYSByYW5nZQorICogICAgICAgICAgICAgICAgICAgICBvZiBPSURzLCB3aXRoIHRoaXMgcGFyYW1ldGVyIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudAorICogICAgICAgICAgICAgICAgICAgICBzdWJpZGVudGlmaWVyIC0gc2VlIFJGQyAyNzQxIGZvciBkZXRhaWxzLgorICogICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHkgdXNlZCB0byByZWdpc3RlciBhIHNpbmdsZSByb3cgb2YgYSB0YWJsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgSWYgemVybywgdGhlbiByZWdpc3RlciB0aGUgbW9kdWxlIGFnYWluc3QgdGhlIGZ1bGwgT0lEIHN1YnRyZWUuCisgKgorICogIEBwYXJhbSByYW5nZV91Ym91bmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UgYmVpbmcgcmVnaXN0ZXJlZCAoc2VlIFJGQyAyNzQxKQorICogICAgICAgICAgICAgICAgICAgICBJZiByYW5nZV9zdWJpZCBpcyB6ZXJvLCB0aGVuIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisgKgorICogIEBwYXJhbSBzcyAKKyAqICBAcGFyYW0gY29udGV4dAorICogIEBwYXJhbSB0aW1lb3V0IAorICogIEBwYXJhbSBmbGFncyAKKyAqCisgKiAgQHJldHVybiBnaXZlcyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl8qIGVycm9yIGNvZGUuCisgKgorICogIEBzZWUgcmVnaXN0ZXJfbWliKCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9wcmlvcml0eSgpCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfcmFuZ2UoKQorICogIEBzZWUgdW5yZWdpc3Rlcl9taWIoKQorICovCiBpbnQKIHJlZ2lzdGVyX21pYl9jb250ZXh0KGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywKLSAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG1pYmxvYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG1pYmxvYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaWJsb2NsZW4sCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFuZ2Vfc3ViaWQsCkBAIC04NDYsMTIgKzE0MzIsNTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIGZsYWdzKTsKIH0KIAorLyoqIFJlZ2lzdGVyIGEgbmV3IG1vZHVsZSBpbnRvIHRoZSBNSUIgZGF0YWJhc2UsIGFzIGJlaW5nIHJlc3BvbnNpYmxlCisgKiAgIGZvciBhIHJhbmdlIG9mIE9JRHMgKHR5cGljYWxseSBhIHNpbmdsZSByb3cgb2YgYSB0YWJsZSkuCisgKgorICogIEBwYXJhbSAgbW9kdWxlTmFtZSBUZXh0IG5hbWUgb2YgdGhlIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIG5hbWUgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBhZ2VudC4KKyAqCisgKiAgQHBhcmFtICB2YXIgICAgICAgIEFycmF5IG9mIHZhcmlhYmxlcyB0byBiZSByZWdpc3RlcmVkIGluIHRoZSBtb2R1bGUuCisgKgorICogIEBwYXJhbSAgdmFyc2l6ZSAgICBTaXplIG9mIGEgc2luZ2xlIHZhcmlhYmxlIGluIHZhciBhcnJheS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIHNpemUgaXMgbm9ybWFsbHkgZXF1YWwgdG8gc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZSksCisgKiAgICAgICAgICAgICAgICAgICAgIGJ1dCBpZiB3ZSB3aXNoIHRvIHVzZSBzaG9ydGVyIChvciBsb25nZXIpIE9JRHMsIHRoZW4gd2UKKyAqICAgICAgICAgICAgICAgICAgICAgY291bGQgdXNlIGRpZmZlcmVudCB2YXJpYW50IG9mIHRoZSB2YXJpYWJsZSBzdHJ1Y3R1cmUuCisgKgorICogIEBwYXJhbSAgbnVtdmFycyAgICBOdW1iZXIgb2YgdmFyaWFibGVzIGluIHRoZSB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaG93IG1hbnkgdmFyaWFibGVzIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byByZWdpc3Rlci4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2MgICAgIEJhc2UgT0lEIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIEFsbCBPSURzIGluIHZhciBhcnJheSBzaG91bGQgYmUgc3ViLW9pZHMgb2YgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcGFyYW0gIG1pYmxvY2xlbiAgTGVuZ3RoIG9mIHRoZSBiYXNlIE9JRC4KKyAqICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGludGVnZXJzIG1ha2luZyB1cCB0aGUgYmFzZSBPSUQuCisgKgorICogIEBwYXJhbSAgcHJpb3JpdHkgICBSZWdpc3RyYXRpb24gcHJpb3JpdHkuCisgKiAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gYWNoaWV2ZSBhIGRlc2lyZWQgY29uZmlndXJhdGlvbiB3aGVuIGRpZmZlcmVudAorICogICAgICAgICAgICAgICAgICAgICBzZXNzaW9ucyByZWdpc3RlciBpZGVudGljYWwgb3Igb3ZlcmxhcHBpbmcgcmVnaW9ucy4KKyAqICAgICAgICAgICAgICAgICAgICAgUHJpbWFyaWx5IHVzZWQgd2l0aCBBZ2VudFggc3ViYWdlbnQgcmVnaXN0cmF0aW9ucy4KKyAqCisgKiAgQHBhcmFtIHJhbmdlX3N1YmlkIElmIG5vbi16ZXJvLCB0aGUgbW9kdWxlIGlzIHJlZ2lzdGVyZWQgYWdhaW5zdCBhIHJhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgIG9mIE9JRHMsIHdpdGggdGhpcyBwYXJhbWV0ZXIgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50CisgKiAgICAgICAgICAgICAgICAgICAgIHN1YmlkZW50aWZpZXIgLSBzZWUgUkZDIDI3NDEgZm9yIGRldGFpbHMuCisgKiAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSB1c2VkIHRvIHJlZ2lzdGVyIGEgc2luZ2xlIHJvdyBvZiBhIHRhYmxlLgorICogICAgICAgICAgICAgICAgICAgICBJZiB6ZXJvLCB0aGVuIHJlZ2lzdGVyIHRoZSBtb2R1bGUgYWdhaW5zdCB0aGUgZnVsbCBPSUQgc3VidHJlZS4KKyAqCisgKiAgQHBhcmFtIHJhbmdlX3Vib3VuZCBUaGUgZW5kIG9mIHRoZSByYW5nZSBiZWluZyByZWdpc3RlcmVkIChzZWUgUkZDIDI3NDEpCisgKiAgICAgICAgICAgICAgICAgICAgIElmIHJhbmdlX3N1YmlkIGlzIHplcm8sIHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyAqCisgKiAgQHBhcmFtIHNzIAorICoKKyAqICBAcmV0dXJuIGdpdmVzIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QRVJSXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSByZWdpc3Rlcl9taWIoKQorICogIEBzZWUgcmVnaXN0ZXJfbWliX3ByaW9yaXR5KCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9jb250ZXh0KCkKKyAqICBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqLwogaW50CiByZWdpc3Rlcl9taWJfcmFuZ2UoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyc2l6ZSwKICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywKLSAgICAgICAgICAgICAgICAgICBvaWQgKiBtaWJsb2MsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbWlibG9jLAogICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaWJsb2NsZW4sCiAgICAgICAgICAgICAgICAgICAgaW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgbmV0c25tcF9zZXNzaW9uICogc3MpCkBAIC04NjEsMjcgKzE0OTMsMTAxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3N1YmlkLCByYW5nZV91Ym91bmQsIHNzLCAiIiwgLTEsIDApOwogfQogCisvKiogUmVnaXN0ZXIgYSBuZXcgbW9kdWxlIGludG8gdGhlIE1JQiBkYXRhYmFzZSwgd2l0aCBhIG5vbi1kZWZhdWx0IHByaW9yaXR5CisgKgorICogIEBwYXJhbSAgbW9kdWxlTmFtZSBUZXh0IG5hbWUgb2YgdGhlIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIG5hbWUgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBhZ2VudC4KKyAqCisgKiAgQHBhcmFtICB2YXIgICAgICAgIEFycmF5IG9mIHZhcmlhYmxlcyB0byBiZSByZWdpc3RlcmVkIGluIHRoZSBtb2R1bGUuCisgKgorICogIEBwYXJhbSAgdmFyc2l6ZSAgICBTaXplIG9mIGEgc2luZ2xlIHZhcmlhYmxlIGluIHZhciBhcnJheS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIHNpemUgaXMgbm9ybWFsbHkgZXF1YWwgdG8gc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZSksCisgKiAgICAgICAgICAgICAgICAgICAgIGJ1dCBpZiB3ZSB3aXNoIHRvIHVzZSBzaG9ydGVyIChvciBsb25nZXIpIE9JRHMsIHRoZW4gd2UKKyAqICAgICAgICAgICAgICAgICAgICAgY291bGQgdXNlIGRpZmZlcmVudCB2YXJpYW50IG9mIHRoZSB2YXJpYWJsZSBzdHJ1Y3R1cmUuCisgKgorICogIEBwYXJhbSAgbnVtdmFycyAgICBOdW1iZXIgb2YgdmFyaWFibGVzIGluIHRoZSB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaG93IG1hbnkgdmFyaWFibGVzIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byByZWdpc3Rlci4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2MgICAgIEJhc2UgT0lEIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIEFsbCBPSURzIGluIHZhciBhcnJheSBzaG91bGQgYmUgc3ViLW9pZHMgb2YgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcGFyYW0gIG1pYmxvY2xlbiAgTGVuZ3RoIG9mIHRoZSBiYXNlIE9JRC4KKyAqICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGludGVnZXJzIG1ha2luZyB1cCB0aGUgYmFzZSBPSUQuCisgKgorICogIEBwYXJhbSAgcHJpb3JpdHkgICBSZWdpc3RyYXRpb24gcHJpb3JpdHkuCisgKiAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gYWNoaWV2ZSBhIGRlc2lyZWQgY29uZmlndXJhdGlvbiB3aGVuIGRpZmZlcmVudAorICogICAgICAgICAgICAgICAgICAgICBzZXNzaW9ucyByZWdpc3RlciBpZGVudGljYWwgb3Igb3ZlcmxhcHBpbmcgcmVnaW9ucy4KKyAqICAgICAgICAgICAgICAgICAgICAgUHJpbWFyaWx5IHVzZWQgd2l0aCBBZ2VudFggc3ViYWdlbnQgcmVnaXN0cmF0aW9ucy4KKyAqCisgKiAgQHJldHVybiBnaXZlcyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl8qIGVycm9yIGNvZGUuCisgKgorICogIEBzZWUgcmVnaXN0ZXJfbWliKCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9yYW5nZSgpCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKiAgQHNlZSB1bnJlZ2lzdGVyX21pYigpCisgKi8KIGludAogcmVnaXN0ZXJfbWliX3ByaW9yaXR5KGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2YXIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bXZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHkpCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHkpCiB7CiAgICAgcmV0dXJuIHJlZ2lzdGVyX21pYl9yYW5nZShtb2R1bGVOYW1lLCB2YXIsIHZhcnNpemUsIG51bXZhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJsb2MsIG1pYmxvY2xlbiwgcHJpb3JpdHksIDAsIDAsIE5VTEwpOwogfQogCisvKiogUmVnaXN0ZXIgYSBuZXcgbW9kdWxlIGludG8gdGhlIE1JQiBkYXRhYmFzZSwgdXNpbmcgZGVmYXVsdCBwcmlvcml0eSBhbmQgY29udGV4dAorICoKKyAqICBAcGFyYW0gIG1vZHVsZU5hbWUgVGV4dCBuYW1lIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBuYW1lIHdpbGwgYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kdWxlCisgKiAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgYWdlbnQuCisgKgorICogIEBwYXJhbSAgdmFyICAgICAgICBBcnJheSBvZiB2YXJpYWJsZXMgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgbW9kdWxlLgorICoKKyAqICBAcGFyYW0gIHZhcnNpemUgICAgU2l6ZSBvZiBhIHNpbmdsZSB2YXJpYWJsZSBpbiB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBzaXplIGlzIG5vcm1hbGx5IGVxdWFsIHRvIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUpLAorICogICAgICAgICAgICAgICAgICAgICBidXQgaWYgd2Ugd2lzaCB0byB1c2Ugc2hvcnRlciAob3IgbG9uZ2VyKSBPSURzLCB0aGVuIHdlCisgKiAgICAgICAgICAgICAgICAgICAgIGNvdWxkIHVzZSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgdmFyaWFibGUgc3RydWN0dXJlLgorICoKKyAqICBAcGFyYW0gIG51bXZhcnMgICAgTnVtYmVyIG9mIHZhcmlhYmxlcyBpbiB0aGUgdmFyIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGhvdyBtYW55IHZhcmlhYmxlcyB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmVnaXN0ZXIuCisgKgorICogIEBwYXJhbSAgbWlibG9jICAgICBCYXNlIE9JRCBvZiB0aGUgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICBBbGwgT0lEcyBpbiB2YXIgYXJyYXkgc2hvdWxkIGJlIHN1Yi1vaWRzIG9mIHRoZSBiYXNlIE9JRC4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2NsZW4gIExlbmd0aCBvZiB0aGUgYmFzZSBPSUQuCisgKiAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnRlZ2VycyBtYWtpbmcgdXAgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcmV0dXJuIGdpdmVzIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QRVJSXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfcHJpb3JpdHkoKQorICogIEBzZWUgcmVnaXN0ZXJfbWliX3JhbmdlKCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9jb250ZXh0KCkKKyAqICBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqLwogaW50CiByZWdpc3Rlcl9taWIoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwKLSAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKKyAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKICAgICAgICAgICAgICBzaXplX3QgdmFyc2l6ZSwKLSAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuKQorICAgICAgICAgICAgIHNpemVfdCBudW12YXJzLCBjb25zdCBvaWQgKiBtaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4pCiB7CiAgICAgcmV0dXJuIHJlZ2lzdGVyX21pYl9wcmlvcml0eShtb2R1bGVOYW1lLCB2YXIsIHZhcnNpemUsIG51bXZhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJsb2MsIG1pYmxvY2xlbiwgREVGQVVMVF9NSUJfUFJJT1JJVFkpOwogfQogCisvKiogQHByaXZhdGUKKyAqICBVbmxvYWRzIGEgc3VidHJlZSBmcm9tIE1JQiB0cmVlLgorICoKKyAqICBAcGFyYW0gIHN1YiAgICAgVGhlIHN1Yi10cmVlIHdoaWNoIGlzIGJlaW5nIHJlbW92ZWQuCisgKgorICogIEBwYXJhbSAgcHJldiAgICBQcmV2aW91cyBlbnRyeSwgYmVmb3JlIHRoZSB1bmxvYWRlZCBvbmUuCisgKgorICogIEBwYXJhbSAgY29udGV4dCBOYW1lIG9mIHRoZSBjb250ZXh0IHdoaWNoIGlzIGJlaW5nIHJlbW92ZWQuCisgKgorICogIEBzZWUgdW5yZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKi8KIHZvaWQKIG5ldHNubXBfc3VidHJlZV91bmxvYWQobmV0c25tcF9zdWJ0cmVlICpzdWIsIG5ldHNubXBfc3VidHJlZSAqcHJldiwgY29uc3QgY2hhciAqY29udGV4dCkKIHsKQEAgLTkzNywxMCArMTY0MywxMCBAQAogfQogCiAvKioKLSAqIFVucmVnaXN0ZXJzIGFuIE9JRCB0aGF0IGhhcyBhbiBhc3NvY2lhdGVkIGNvbnRleHQgbmFtZSB2YWx1ZS4gCi0gKiBUeXBpY2FsbHkgdXNlZCB3aGVuIGEgbW9kdWxlIGhhcyBtdWx0aXBsZSBjb250ZXh0cyBkZWZpbmVkLiAgVGhlIHBhcmFtZXRlcnMKLSAqIHByaW9yaXR5LCByYW5nZV9zdWJpZCwgYW5kIHJhbmdlX3Vib3VuZCBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCi0gKiBhZ2VudHgsIHNlZSBSRkMgMjc0MSwgb3RoZXJ3aXNlIHRoZXNlIHZhbHVlcyBzaG91bGQgYWx3YXlzIGJlIDAuCisgKiBVbnJlZ2lzdGVycyBhIG1vZHVsZSByZWdpc3RlcmVkIGFnYWluc3QgYSBnaXZlbiBPSUQgKG9yIHJhbmdlKSBpbiBhIHNwZWNpZmllZCBjb250ZXh0LiAKKyAqIFR5cGljYWxseSB1c2VkIHdoZW4gYSBtb2R1bGUgaGFzIG11bHRpcGxlIGNvbnRleHRzIGRlZmluZWQuCisgKiBUaGUgcGFyYW1ldGVycyBwcmlvcml0eSwgcmFuZ2Vfc3ViaWQsIHJhbmdlX3Vib3VuZCBhbmQgY29udGV4dAorICogc2hvdWxkIG1hdGNoIHRob3NlIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIG1vZHVsZSBvcmlnaW5hbGx5LgogICoKICAqIEBwYXJhbSBuYW1lICB0aGUgc3BlY2lmaWMgT0lEIHRvIHVucmVnaXN0ZXIgaWYgaXQgY29uYXRpbnMgdGhlIGFzc29jaWF0ZWQKICAqICAgICAgICAgICAgICBjb250ZXh0LgpAQCAtOTYyLDggKzE2NjgsMTEgQEAKICAqCiAgKiBAcGFyYW0gY29udGV4dCAgYSBjb250ZXh0IG5hbWUgdGhhdCBoYXMgYmVlbiBjcmVhdGVkCiAgKgotICogQHJldHVybiAKKyAqIEByZXR1cm4gZ2l2ZXMgTUlCX1VOUkVHSVNURVJFRF9PSyBvciBNSUJfKiBlcnJvciBjb2RlLgogICogCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWJfcHJpb3JpdHkoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9yYW5nZSgpCiAgKi8KIGludAogdW5yZWdpc3Rlcl9taWJfY29udGV4dChvaWQgKiBuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHksCkBAIC05NzksNyArMTY4OCw3IEBACiAKICAgICBuZXRzbm1wX3NldF9sb29rdXBfY2FjaGVfc2l6ZSgwKTsKIAotICAgIGlmICgocmFuZ2Vfc3ViaWQgIT0gMCkgJiYgIChyYW5nZV9zdWJpZCA8PSBsZW4pKQorICAgIGlmICgocmFuZ2Vfc3ViaWQgPiAwKSAmJiAgKChzaXplX3QpcmFuZ2Vfc3ViaWQgPD0gbGVuKSkKICAgICAgICAgb3JpZ19zdWJpZF92YWwgPSBuYW1lW3JhbmdlX3N1YmlkLTFdOwogCiAgICAgd2hpbGUodW5yZWdpc3RlcmluZyl7CkBAIC0xMDY0LDYgKzE3NzMsNyBAQAogICAgIHJldHVybiBNSUJfVU5SRUdJU1RFUkVEX09LOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9NSUJfVEFCTEVfUk9XCiBpbnQKIG5ldHNubXBfdW5yZWdpc3Rlcl9taWJfdGFibGVfcm93KG9pZCAqIG5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YXJfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsCkBAIC0xMTQyLDcgKzE4NTIsMzggQEAKIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9NSUJfVEFCTEVfUk9XICovCiAKKy8qKgorICogVW5yZWdpc3RlcnMgYSBtb2R1bGUgcmVnaXN0ZXJlZCBhZ2FpbnN0IGEgZ2l2ZW4gT0lEIChvciByYW5nZSkgaW4gdGhlIGRlZmF1bHQgY29udGV4dC4gCisgKiBUeXBpY2FsbHkgdXNlZCB3aGVuIGEgbW9kdWxlIGhhcyBtdWx0aXBsZSBjb250ZXh0cyBkZWZpbmVkLgorICogVGhlIHBhcmFtZXRlcnMgcHJpb3JpdHksIHJhbmdlX3N1YmlkLCBhbmQgcmFuZ2VfdWJvdW5kIHNob3VsZAorICogbWF0Y2ggdGhvc2UgdXNlZCB0byByZWdpc3RlciB0aGUgbW9kdWxlIG9yaWdpbmFsbHkuCisgKgorICogQHBhcmFtIG5hbWUgIHRoZSBzcGVjaWZpYyBPSUQgdG8gdW5yZWdpc3RlciBpZiBpdCBjb25hdGlucyB0aGUgYXNzb2NpYXRlZAorICogICAgICAgICAgICAgIGNvbnRleHQuCisgKgorICogQHBhcmFtIGxlbiAgIHRoZSBsZW5ndGggb2YgdGhlIE9JRCwgdXNlICBPSURfTEVOR1RIIG1hY3JvLgorICoKKyAqIEBwYXJhbSBwcmlvcml0eSAgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDI1NSwgdXNlZCB0byBhY2hpZXZlIGEgZGVzaXJlZAorICogICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHdoZW4gZGlmZmVyZW50IHNlc3Npb25zIHJlZ2lzdGVyIGlkZW50aWNhbCBvcgorICogICAgICAgICAgICAgICAgICBvdmVybGFwcGluZyByZWdpb25zLiAgU3ViYWdlbnRzIHdpdGggbm8gcGFydGljdWxhcgorICogICAgICAgICAgICAgICAgICBrbm93bGVkZ2Ugb2YgcHJpb3JpdHkgc2hvdWxkIHJlZ2lzdGVyIHdpdGggdGhlIGRlZmF1bHQKKyAqICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgMTI3LgorICoKKyAqIEBwYXJhbSByYW5nZV9zdWJpZCAgcGVybWl0cyBzcGVjaWZ5aW5nIGEgcmFuZ2UgaW4gcGxhY2Ugb2Ygb25lIG9mIGEgc3VidHJlZQorICogICAgICAgICAgICAgICAgICAgICBzdWItaWRlbnRpZmllcnMuICBXaGVuIHRoaXMgdmFsdWUgaXMgemVybywgbm8gcmFuZ2UgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgYmVpbmcgc3BlY2lmaWVkLgorICoKKyAqIEBwYXJhbSByYW5nZV91Ym91bmQgIHRoZSB1cHBlciBib3VuZCBvZiBhIHN1Yi1pZGVudGlmaWVyJ3MgcmFuZ2UuCisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHByZXNlbnQgb25seSBpZiByYW5nZV9zdWJpZCBpcyBub3QgMC4KKyAqCisgKiBAcmV0dXJuIGdpdmVzIE1JQl9VTlJFR0lTVEVSRURfT0sgb3IgTUlCXyogZXJyb3IgY29kZS4KKyAqIAorICogQHNlZSB1bnJlZ2lzdGVyX21pYigpCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KCkKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKi8KIGludAogdW5yZWdpc3Rlcl9taWJfcmFuZ2Uob2lkICogbmFtZSwgc2l6ZV90IGxlbiwgaW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kKQpAQCAtMTE1MSwxOCArMTg5Miw2MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3Vib3VuZCwgIiIpOwogfQogCisvKioKKyAqIFVucmVnaXN0ZXJzIGEgbW9kdWxlIHJlZ2lzdGVyZWQgYWdhaW5zdCBhIGdpdmVuIE9JRCBhdCB0aGUgc3BlY2lmaWVkIHByaW9yaXR5LgorICogVGhlIHByaW9yaXR5IHBhcmFtZXRlciBzaG91bGQgbWF0Y2ggdGhhdCB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBtb2R1bGUgb3JpZ2luYWxseS4KKyAqCisgKiBAcGFyYW0gbmFtZSAgdGhlIHNwZWNpZmljIE9JRCB0byB1bnJlZ2lzdGVyIGlmIGl0IGNvbmF0aW5zIHRoZSBhc3NvY2lhdGVkCisgKiAgICAgICAgICAgICAgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gbGVuICAgdGhlIGxlbmd0aCBvZiB0aGUgT0lELCB1c2UgIE9JRF9MRU5HVEggbWFjcm8uCisgKgorICogQHBhcmFtIHByaW9yaXR5ICBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMjU1LCB1c2VkIHRvIGFjaGlldmUgYSBkZXNpcmVkCisgKiAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gd2hlbiBkaWZmZXJlbnQgc2Vzc2lvbnMgcmVnaXN0ZXIgaWRlbnRpY2FsIG9yCisgKiAgICAgICAgICAgICAgICAgIG92ZXJsYXBwaW5nIHJlZ2lvbnMuICBTdWJhZ2VudHMgd2l0aCBubyBwYXJ0aWN1bGFyCisgKiAgICAgICAgICAgICAgICAgIGtub3dsZWRnZSBvZiBwcmlvcml0eSBzaG91bGQgcmVnaXN0ZXIgd2l0aCB0aGUgZGVmYXVsdAorICogICAgICAgICAgICAgICAgICB2YWx1ZSBvZiAxMjcuCisgKgorICogQHJldHVybiBnaXZlcyBNSUJfVU5SRUdJU1RFUkVEX09LIG9yIE1JQl8qIGVycm9yIGNvZGUuCisgKiAKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWIoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9yYW5nZSgpCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliX2NvbnRleHQoKQorICovCiBpbnQKIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KG9pZCAqIG5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSkKIHsKICAgICByZXR1cm4gdW5yZWdpc3Rlcl9taWJfcmFuZ2UobmFtZSwgbGVuLCBwcmlvcml0eSwgMCwgMCk7CiB9CiAKKy8qKgorICogVW5yZWdpc3RlcnMgYSBtb2R1bGUgcmVnaXN0ZXJlZCBhZ2FpbnN0IGEgZ2l2ZW4gT0lEIGF0IHRoZSBkZWZhdWx0IHByaW9yaXR5LgorICoKKyAqIEBwYXJhbSBuYW1lICB0aGUgc3BlY2lmaWMgT0lEIHRvIHVucmVnaXN0ZXIgaWYgaXQgY29uYXRpbnMgdGhlIGFzc29jaWF0ZWQKKyAqICAgICAgICAgICAgICBjb250ZXh0LgorICoKKyAqIEBwYXJhbSBsZW4gICB0aGUgbGVuZ3RoIG9mIHRoZSBPSUQsIHVzZSAgT0lEX0xFTkdUSCBtYWNyby4KKyAqCisgKiBAcmV0dXJuIGdpdmVzIE1JQl9VTlJFR0lTVEVSRURfT0sgb3IgTUlCXyogZXJyb3IgY29kZS4KKyAqIAorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9wcmlvcml0eSgpCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliX2NvbnRleHQoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9yYW5nZSgpCisgKiBAc2VlIHVucmVnaXN0ZXJfYWdlbnR4X2xpc3QoKQorICovCiBpbnQKIHVucmVnaXN0ZXJfbWliKG9pZCAqIG5hbWUsIHNpemVfdCBsZW4pCiB7CiAgICAgcmV0dXJuIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KG5hbWUsIGxlbiwgREVGQVVMVF9NSUJfUFJJT1JJVFkpOwogfQogCisvKiogVW5yZWdpc3RlcnMgc3VidHJlZSBvZiBPSURzIGJvdW5kZWQgdG8gZ2l2ZW4gc2Vzc2lvbi4KKyAqCisgKiAgQHBhcmFtIHNzIFNlc3Npb24gd2hpY2ggT0lEcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0cmVlLgorICoKKyAqICBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqICBAc2VlIHVucmVnaXN0ZXJfYWdlbnR4X2xpc3QoKQorICovCiB2b2lkCiB1bnJlZ2lzdGVyX21pYnNfYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzcykKIHsKQEAgLTEyMjQsMTUgKzIwMDgsMjEgQEAKICAgICB9CiB9CiAKLS8qCi0gKiBpbl9hX3ZpZXc6IGRldGVybWluZXMgaWYgYSBnaXZlbiBzbm1wX3BkdSBpcyBhbGxvd2VkIHRvIHNlZSBhCi0gKiBnaXZlbiBuYW1lL25hbWVsZW4gT0lEIHBvaW50ZXIKLSAqIG5hbWUgICAgICAgICBJTiAtIG5hbWUgb2YgdmFyLCBPVVQgLSBuYW1lIG1hdGNoZWQKLSAqIG5hbWVMZW4gICAgICBJTiAtbnVtYmVyIG9mIHN1Yi1pZHMgaW4gbmFtZSwgT1VUIC0gc3ViaWQtaXMgaW4gbWF0Y2hlZCBuYW1lCi0gKiBwaSAgICAgICAgICAgSU4gLSByZWxldmFudCBhdXRoIGluZm8gcmUgUERVIAotICogY3ZwICAgICAgICAgIElOIC0gcmVsZXZhbnQgYXV0aCBpbmZvIHJlIG1pYiBtb2R1bGUKKy8qKiBEZXRlcm1pbmVzIGlmIGdpdmVuIFBEVSBpcyBhbGxvd2VkIHRvIHNlZSAob3IgdXBkYXRlKSBhIGdpdmVuIE9JRC4KKyAqCisgKiBAcGFyYW0gbmFtZSAgICBUaGUgT0lEIHRvIGNoZWNrIGFjY2VzcyBmb3IuCisgKiAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHRoaXMgcGFyYW1ldGVyIGhvbGRzIHRoZSBPSUQgYWN0dWFsbHkgbWF0Y2hlZAorICoKKyAqIEBwYXJhbSBuYW1lbGVuIE51bWJlciBvZiBzdWItaWRlbnRpZmllcnMgaW4gdGhlIE9JRC4KKyAqICAgICAgICAgICAgICAgIE9uIHJldHVybiwgdGhpcyBwYXJhbWV0ZXIgaG9sZHMgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2hlZCBPSUQKKyAqCisgKiBAcGFyYW0gcGR1ICAgICBQRFUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIE9JRC4KKyAqCisgKiBAcGFyYW0gdHlwZSAgICBBTlMuMSB0eXBlIG9mIHRoZSB2YWx1ZSBhdCBnaXZlbiBPSUQuCisgKiAgICAgICAgICAgICAgICAoVXNlZCBmb3IgY2F0Y2hpbmcgU05NUHYxIHJlcXVlc3RzIGZvciBTTUl2Mi1vbmx5IG9iamVjdHMpCisgKgorICogQHJldHVybiBnaXZlcyBWQUNNX1NVQ0NFU1MgaWYgdGhlIE9JRCBpcyBpbiB0aGUgUERVLCBvdGhlcndpc2UgZXJyb3IgY29kZS4KICAqLwotCiBpbnQKIGluX2FfdmlldyhvaWQgKm5hbWUsIHNpemVfdCAqbmFtZWxlbiwgbmV0c25tcF9wZHUgKnBkdSwgaW50IHR5cGUpCiB7CkBAIC0xMjc3LDE3ICsyMDY3LDIyIEBACiAgICAgcmV0dXJuIFZBQ01fTk9TRUNOQU1FOwogfQogCi0vKgotICogY2hlY2tfYWNjZXM6IGRldGVybWluZXMgaWYgYSBnaXZlbiBzbm1wX3BkdSBpcyBldmVyIGdvaW5nIHRvIGJlCi0gKiBhbGxvd2VkIHRvIGRvIGFueW50aGluZyBvciBpZiBpdCdzIG5vdCBnb2luZyB0byBldmVyIGJlCi0gKiBhdXRoZW50aWNhdGVkLgorLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIFBEVSByZXF1ZXN0IGNvdWxkIHBvdGVudGlhbGx5IHN1Y2NlZWQuCisgKiAgKFByZWxpbWluYXJ5LCBPSUQtaW5kZXBlbmRlbnQgdmFsaWRhdGlvbikKKyAqCisgKiBAcGFyYW0gcGR1ICAgICBQRFUgcmVxdWVzdGluZyBhY2Nlc3MKKyAqCisgKiBAcmV0dXJuIGdpdmVzIFZBQ01fU1VDQ0VTUyAgIGlmIHRoZSBlbnRpcmUgTUlCIHRyZWUgaXMgYWNjZXNzaWJsZQorICogICAgICAgICAgICAgICBWQUNNX05PVElOVklFVyBpZiB0aGUgZW50aXJlIE1JQiB0cmVlIGlzIGluYWNjZXNzaWJsZQorICogICAgICAgICAgICAgICBWQUNNX1NVQlRSRUVfVU5LTk9XTiBpZiBzb21lIHBvcnRpb25zIGFyZSBhY2Nlc3NpYmxlCisgKiAgICAgICAgICAgICAgIG90aGVyIGNvZGVzIG1heSByZXR1cm5lZCBvbiBlcnJvcgogICovCiBpbnQKIGNoZWNrX2FjY2VzcyhuZXRzbm1wX3BkdSAqcGR1KQogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTiAtIHBkdSBiZWluZyBjaGVja2VkICovCiAgICAgc3RydWN0IHZpZXdfcGFyYW1ldGVycyB2aWV3X3Bhcm1zOwogICAgIHZpZXdfcGFybXMucGR1ID0gcGR1OwotICAgIHZpZXdfcGFybXMubmFtZSA9IDA7CisgICAgdmlld19wYXJtcy5uYW1lID0gTlVMTDsKICAgICB2aWV3X3Bhcm1zLm5hbWVsZW4gPSAwOwogICAgIHZpZXdfcGFybXMuZXJyb3Jjb2RlID0gMDsKICAgICB2aWV3X3Bhcm1zLmNoZWNrX3N1YnRyZWUgPSAwOwpAQCAtMTMxMiwxMiArMjEwNywxOSBAQAogICAgIHJldHVybiAxOwogfQogCi0vKiogY2hlY2tzIHRvIHNlZSBpZiBldmVyeXRoaW5nIHdpdGhpbiBhCi0gKiAgZ2l2ZW4gc3VidHJlZSBpcyBlaXRoZXI6IGluIHZpZXcsIG5vdCBpbiB2aWV3LCBvciBwb3NzaWJseSBib3RoLgotICogIElmIHRoZSBlbnRpcmUgc3VidHJlZSBpcyBub3QtaW4tdmlldyB3ZSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8KLSAqICBza2lwIGNhbGxpbmcgdGhlIHN1Yi1oYW5kbGVycyBlbnRpcmVseS4KLSAqICBAcmV0dXJucyAwIGlmIGVudGlyZSBzdWJ0cmVlIGlzIGFjY2Vzc2libGUsIDUgaWYgbm90IGFuZCA3IGlmCi0gKiAgcG9ydGlvbnMgYXJlIGJvdGguICAxIG9uIGVycm9yIChpbGxlZ2FsIHBkdSB2ZXJzaW9uKS4KKy8qKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBQRFUgcmVxdWVzdCBjb3VsZCBwb3RlbnRpYWxseSBhY2Nlc3MKKyAqICAgdGhlIHNwZWNpZmllZCBNSUIgc3VidHJlZQorICoKKyAqIEBwYXJhbSBwZHUgICAgIFBEVSByZXF1ZXN0aW5nIGFjY2VzcworICoKKyAqIEBwYXJhbSBuYW1lICAgIFRoZSBPSUQgdG8gY2hlY2sgYWNjZXNzIGZvci4KKyAqCisgKiBAcGFyYW0gbmFtZWxlbiBOdW1iZXIgb2Ygc3ViLWlkZW50aWZpZXJzIGluIHRoZSBPSUQuCisgKgorICogQHJldHVybiBnaXZlcyBWQUNNX1NVQ0NFU1MgICBpZiB0aGUgZW50aXJlIE1JQiB0cmVlIGlzIGFjY2Vzc2libGUKKyAqICAgICAgICAgICAgICAgVkFDTV9OT1RJTlZJRVcgaWYgdGhlIGVudGlyZSBNSUIgdHJlZSBpcyBpbmFjY2Vzc2libGUKKyAqICAgICAgICAgICAgICAgVkFDTV9TVUJUUkVFX1VOS05PV04gaWYgc29tZSBwb3J0aW9ucyBhcmUgYWNjZXNzaWJsZQorICogICAgICAgICAgICAgICBvdGhlciBjb2RlcyBtYXkgcmV0dXJuZWQgb24gZXJyb3IKICAqLwogaW50CiBuZXRzbm1wX2FjbV9jaGVja19zdWJ0cmVlKG5ldHNubXBfcGR1ICpwZHUsIG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVsZW4pCkBAIC0xMzQ5LDI0OSArMjE1MSwxMCBAQAogICAgIHJldHVybiAxOwogfQogCi0jZGVmaW5lIFNVQlRSRUVfREVGQVVMVF9DQUNIRV9TSVpFIDgKLSNkZWZpbmUgU1VCVFJFRV9NQVhfQ0FDSEVfU0laRSAgICAgMzIKLWludCBsb29rdXBfY2FjaGVfc2l6ZSA9IDA7IC8qZW5hYmxlZCBsYXRlciBhZnRlciByZWdpc3RyYXRpb25zIGFyZSBsb2FkZWQgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgbG9va3VwX2NhY2hlX3MgewotICAgbmV0c25tcF9zdWJ0cmVlICpuZXh0OwotICAgbmV0c25tcF9zdWJ0cmVlICpwcmV2aW91czsKLX0gbG9va3VwX2NhY2hlOwotCi10eXBlZGVmIHN0cnVjdCBsb29rdXBfY2FjaGVfY29udGV4dF9zIHsKLSAgIGNoYXIgKmNvbnRleHQ7Ci0gICBzdHJ1Y3QgbG9va3VwX2NhY2hlX2NvbnRleHRfcyAqbmV4dDsKLSAgIGludCB0aGVjYWNoZWNvdW50OwotICAgaW50IGN1cnJlbnRwb3M7Ci0gICBsb29rdXBfY2FjaGUgY2FjaGVbU1VCVFJFRV9NQVhfQ0FDSEVfU0laRV07Ci19IGxvb2t1cF9jYWNoZV9jb250ZXh0OwotCi1zdGF0aWMgbG9va3VwX2NhY2hlX2NvbnRleHQgKnRoZWNvbnRleHRjYWNoZSA9IE5VTEw7Ci0KLS8qKiBzZXQgdGhlIGxvb2t1cCBjYWNoZSBzaXplIGZvciBvcHRpbWl6ZWQgYWdlbnQgcmVnaXN0cmF0aW9uIHBlcmZvcm1hbmNlLgotICogQHBhcmFtIG5ld3NpemUgc2V0IHRvIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBjYWNoZSBmb3IgYSBnaXZlbgotICogY29udGV4dC4gIFNldCB0byAwIHRvIGNvbXBsZXRlbHkgZGlzYWJsZSBjYWNoaW5nLCBvciB0byAtMSB0byBzZXQKLSAqIHRvIHRoZSBkZWZhdWx0IGNhY2hlIHNpemUgKDgpLCBvciB0byBhIG51bWJlciBvZiB5b3VyIGNob3NpbmcuICBUaGUKLSAqIHJvdWdoIGd1aWRlIGlzIHRoYXQgaXQgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZgotICogc2ltdWx0YW5pb3VzIG1hbmFnZXJzIHlvdSBleHBlY3QgdG8gdGFsayB0byB0aGUgYWdlbnQgKE0pIHRpbWVzIDgwJQotICogKG9yIHNvLCBoZSBzYXlzIHJhbmRvbWx5KSB0aGUgYXZlcmFnZSBudW1iZXIgKE4pIG9mIHZhcmJpbmRzIHlvdQotICogZXhwZWN0IHRvIHJlY2VpdmUgaW4gYSBnaXZlbiByZXF1ZXN0IGZvciBhIG1hbmFnZXIuICBpZSwgTSB0aW1lcyBOLgotICogQmlnZ2VyIGRvZXMgTk9UIG5lY2Vzc2FyaWx5IG1lYW4gYmV0dGVyLiAgQ2VydGFpbmx5IDE2IHNob3VsZCBiZSBhbgotICogdXBwZXIgbGltaXQuICAzMiBpcyB0aGUgaGFyZCBjb2RlZCBsaW1pdC4KLSAqLwotdm9pZAotbmV0c25tcF9zZXRfbG9va3VwX2NhY2hlX3NpemUoaW50IG5ld3NpemUpIHsKLSAgICBpZiAobmV3c2l6ZSA8IDApCi0gICAgICAgIGxvb2t1cF9jYWNoZV9zaXplID0gU1VCVFJFRV9ERUZBVUxUX0NBQ0hFX1NJWkU7Ci0gICAgZWxzZSBpZiAobmV3c2l6ZSA8IFNVQlRSRUVfTUFYX0NBQ0hFX1NJWkUpCi0gICAgICAgIGxvb2t1cF9jYWNoZV9zaXplID0gbmV3c2l6ZTsKLSAgICBlbHNlCi0gICAgICAgIGxvb2t1cF9jYWNoZV9zaXplID0gU1VCVFJFRV9NQVhfQ0FDSEVfU0laRTsKLX0KLQotLyoqIHJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbG9va3VwIGNhY2hlIHNpemUKLSAqICBAcmV0dXJuIHRoZSBjdXJyZW50IGxvb2t1cCBjYWNoZSBzaXplCi0gKi8KLWludAotbmV0c25tcF9nZXRfbG9va3VwX2NhY2hlX3NpemUodm9pZCkgewotICAgIHJldHVybiBsb29rdXBfY2FjaGVfc2l6ZTsKLX0KLQotTkVUU05NUF9TVEFUSUNfSU5MSU5FIGxvb2t1cF9jYWNoZV9jb250ZXh0ICoKLWdldF9jb250ZXh0X2xvb2t1cF9jYWNoZShjb25zdCBjaGFyICpjb250ZXh0KSB7Ci0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKnB0cjsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIGNvbnRleHQgPSAiIjsKLQotICAgIGZvcihwdHIgPSB0aGVjb250ZXh0Y2FjaGU7IHB0cjsgcHRyID0gcHRyLT5uZXh0KSB7Ci0gICAgICAgIGlmIChzdHJjbXAocHRyLT5jb250ZXh0LCBjb250ZXh0KSA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICghcHRyKSB7Ci0gICAgICAgIGlmIChuZXRzbm1wX3N1YnRyZWVfZmluZF9maXJzdChjb250ZXh0KSkgewotICAgICAgICAgICAgcHRyID0gU05NUF9NQUxMT0NfVFlQRURFRihsb29rdXBfY2FjaGVfY29udGV4dCk7Ci0gICAgICAgICAgICBwdHItPm5leHQgPSB0aGVjb250ZXh0Y2FjaGU7Ci0gICAgICAgICAgICBwdHItPmNvbnRleHQgPSBzdHJkdXAoY29udGV4dCk7Ci0gICAgICAgICAgICB0aGVjb250ZXh0Y2FjaGUgPSBwdHI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHRyOwotfQotCi1ORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZAotbG9va3VwX2NhY2hlX2FkZChjb25zdCBjaGFyICpjb250ZXh0LAotICAgICAgICAgICAgICAgICBuZXRzbm1wX3N1YnRyZWUgKm5leHQsIG5ldHNubXBfc3VidHJlZSAqcHJldmlvdXMpIHsKLSAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqY3B0cjsKLQotICAgIGlmICgoY3B0ciA9IGdldF9jb250ZXh0X2xvb2t1cF9jYWNoZShjb250ZXh0KSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChjcHRyLT50aGVjYWNoZWNvdW50IDwgbG9va3VwX2NhY2hlX3NpemUpCi0gICAgICAgIGNwdHItPnRoZWNhY2hlY291bnQrKzsKLQotICAgIGNwdHItPmNhY2hlW2NwdHItPmN1cnJlbnRwb3NdLm5leHQgPSBuZXh0OwotICAgIGNwdHItPmNhY2hlW2NwdHItPmN1cnJlbnRwb3NdLnByZXZpb3VzID0gcHJldmlvdXM7Ci0KLSAgICBpZiAoKytjcHRyLT5jdXJyZW50cG9zID49IGxvb2t1cF9jYWNoZV9zaXplKQotICAgICAgICBjcHRyLT5jdXJyZW50cG9zID0gMDsKLX0KLQotTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKLWxvb2t1cF9jYWNoZV9yZXBsYWNlKGxvb2t1cF9jYWNoZSAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdWJ0cmVlICpuZXh0LCBuZXRzbm1wX3N1YnRyZWUgKnByZXZpb3VzKSB7Ci0KLSAgICBwdHItPm5leHQgPSBuZXh0OwotICAgIHB0ci0+cHJldmlvdXMgPSBwcmV2aW91czsKLX0KLQotTkVUU05NUF9TVEFUSUNfSU5MSU5FIGxvb2t1cF9jYWNoZSAqCi1sb29rdXBfY2FjaGVfZmluZChjb25zdCBjaGFyICpjb250ZXh0LCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwKLSAgICAgICAgICAgICAgICAgIGludCAqcmV0Y21wKSB7Ci0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKmNwdHI7Ci0gICAgbG9va3VwX2NhY2hlICpyZXQgPSBOVUxMOwotICAgIGludCBjbXA7Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAoKGNwdHIgPSBnZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29udGV4dCkpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZm9yKGkgPSAwOyBpIDwgY3B0ci0+dGhlY2FjaGVjb3VudCAmJiBpIDwgbG9va3VwX2NhY2hlX3NpemU7IGkrKykgewotICAgICAgICBpZiAoY3B0ci0+Y2FjaGVbaV0ucHJldmlvdXMtPnN0YXJ0X2EpCi0gICAgICAgICAgICBjbXAgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsIG5hbWVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHRyLT5jYWNoZVtpXS5wcmV2aW91cy0+c3RhcnRfYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B0ci0+Y2FjaGVbaV0ucHJldmlvdXMtPnN0YXJ0X2xlbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNtcCA9IDE7Ci0gICAgICAgIGlmIChjbXAgPj0gMCkgewotICAgICAgICAgICAgKnJldGNtcCA9IGNtcDsKLSAgICAgICAgICAgIHJldCA9ICYoY3B0ci0+Y2FjaGVbaV0pOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0KLU5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCi1pbnZhbGlkYXRlX2xvb2t1cF9jYWNoZShjb25zdCBjaGFyICpjb250ZXh0KSB7Ci0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKmNwdHI7Ci0gICAgaWYgKChjcHRyID0gZ2V0X2NvbnRleHRfbG9va3VwX2NhY2hlKGNvbnRleHQpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGNwdHItPnRoZWNhY2hlY291bnQgPSAwOwotICAgICAgICBjcHRyLT5jdXJyZW50cG9zID0gMDsKLSAgICB9Ci19Ci0KLW5ldHNubXBfc3VidHJlZSAqCi1uZXRzbm1wX3N1YnRyZWVfZmluZF9wcmV2KG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLAotCQkJICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCi17Ci0gICAgbG9va3VwX2NhY2hlICpsb29rdXBfY2FjaGUgPSBOVUxMOwotICAgIG5ldHNubXBfc3VidHJlZSAqbXlwdHIgPSBOVUxMLCAqcHJldmlvdXMgPSBOVUxMOwotICAgIGludCBjbXAgPSAxOwotICAgIHNpemVfdCBsbF9vZmYgPSAwOwotCi0gICAgaWYgKHN1YnRyZWUpIHsKLSAgICAgICAgbXlwdHIgPSBzdWJ0cmVlOwotICAgIH0gZWxzZSB7Ci0JLyogbG9vayB0aHJvdWdoIGV2ZXJ5dGhpbmcgKi8KLSAgICAgICAgaWYgKGxvb2t1cF9jYWNoZV9zaXplKSB7Ci0gICAgICAgICAgICBsb29rdXBfY2FjaGUgPSBsb29rdXBfY2FjaGVfZmluZChjb250ZXh0X25hbWUsIG5hbWUsIGxlbiwgJmNtcCk7Ci0gICAgICAgICAgICBpZiAobG9va3VwX2NhY2hlKSB7Ci0gICAgICAgICAgICAgICAgbXlwdHIgPSBsb29rdXBfY2FjaGUtPm5leHQ7Ci0gICAgICAgICAgICAgICAgcHJldmlvdXMgPSBsb29rdXBfY2FjaGUtPnByZXZpb3VzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFteXB0cikKLSAgICAgICAgICAgICAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHRfbmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHRfbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIHRoaXMgb3B0aW1pemF0aW9uIGNhdXNlcyBhIHNlZ2ZhdWx0IG9uIHNmIGNmIGFscGhhLWxpbnV4MS4KLSAgICAgKiBpZmRlZiBvdXQgdW50aWwgc29tZW9uZSBmaWd1cmVzIG91dCB3aHkgYW5kIGZpeGVzIGl0LiB4eHgtcmtzIDIwMDUxMTE3Ci0gICAgICovCi0jaWZuZGVmIF9fYWxwaGEKLSNkZWZpbmUgV1RFU1RfT1BUSU1JWkFUSU9OIDEKLSNlbmRpZgotI2lmZGVmIFdURVNUX09QVElNSVpBVElPTgotICAgIERFQlVHTVNHVEwoKCJ3dGVzdCIsIm9pZCBpbjogIikpOwotICAgIERFQlVHTVNHT0lEKCgid3Rlc3QiLCBuYW1lLCBsZW4pKTsKLSAgICBERUJVR01TRygoInd0ZXN0IiwiXG4iKSk7Ci0jZW5kaWYKLSAgICBmb3IgKDsgbXlwdHIgIT0gTlVMTDsgcHJldmlvdXMgPSBteXB0ciwgbXlwdHIgPSBteXB0ci0+bmV4dCkgewotI2lmZGVmIFdURVNUX09QVElNSVpBVElPTgotICAgICAgICAvKiBDb21wYXJlIHRoZSBpbmNvbWluZyBvaWQgd2l0aCB0aGUgbGlua2VkIGxpc3QuICBJZiB3ZSBoYXZlCi0gICAgICAgICAgIHJlc3VsdHMgb2YgcHJldmlvdXMgY29tcGFyZXMsIGl0cyBmYXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQotICAgICAgICAgICBsZW5ndGggd2UgZGlmZmVyZWQgaW4gdGhlIGxhc3QgY2hlY2sgaXMgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgICBsZW5ndGggYmV0d2VlbiB0aGlzIHBvaW50ZXIgYW5kIHRoZSBsYXN0IHRoZW4gd2UgZG9uJ3QgbmVlZAotICAgICAgICAgICB0byBhY3R1YWxseSBwZXJmb3JtIGEgY29tcGFyaXNvbiAqLwotICAgICAgICBERUJVR01TR1RMKCgid3Rlc3QiLCJvaWQgY21wOiAiKSk7Ci0gICAgICAgIERFQlVHTVNHT0lEKCgid3Rlc3QiLCBteXB0ci0+c3RhcnRfYSwgbXlwdHItPnN0YXJ0X2xlbikpOwotICAgICAgICBERUJVR01TRygoInd0ZXN0IiwiICAtLS0gb2ZmID0gJWQsIGluIG9mZiA9ICVkIHRlc3QgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgIG15cHRyLT5vaWRfb2ZmLCBsbF9vZmYsCi0gICAgICAgICAgICAgICAgICAhKGxsX29mZiAmJiBteXB0ci0+b2lkX29mZiAmJgotICAgICAgICAgICAgICAgICAgICBteXB0ci0+b2lkX29mZiA+IGxsX29mZikpKTsKLSAgICAgICAgaWYgKCEobGxfb2ZmICYmIG15cHRyLT5vaWRfb2ZmICYmIG15cHRyLT5vaWRfb2ZmID4gbGxfb2ZmKSAmJgotICAgICAgICAgICAgbmV0c25tcF9vaWRfY29tcGFyZV9sbChuYW1lLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cHRyLT5zdGFydF9hLCBteXB0ci0+c3RhcnRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGxfb2ZmKSA8IDApIHsKLSNlbHNlCi0gICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKG5hbWUsIGxlbiwgbXlwdHItPnN0YXJ0X2EsIG15cHRyLT5zdGFydF9sZW4pIDwgMCkgewotI2VuZGlmCi0gICAgICAgICAgICBpZiAobG9va3VwX2NhY2hlX3NpemUgJiYgcHJldmlvdXMgJiYgY21wKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvb2t1cF9jYWNoZSkgewotICAgICAgICAgICAgICAgICAgICBsb29rdXBfY2FjaGVfcmVwbGFjZShsb29rdXBfY2FjaGUsIG15cHRyLCBwcmV2aW91cyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbG9va3VwX2NhY2hlX2FkZChjb250ZXh0X25hbWUsIG15cHRyLCBwcmV2aW91cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmV2aW91czsKLX0KLQotbmV0c25tcF9zdWJ0cmVlICoKLW5ldHNubXBfc3VidHJlZV9maW5kX25leHQob2lkICpuYW1lLCBzaXplX3QgbGVuLAotCQkJICBuZXRzbm1wX3N1YnRyZWUgKnN1YnRyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKLXsKLSAgICBuZXRzbm1wX3N1YnRyZWUgKm15cHRyID0gTlVMTDsKLQotICAgIG15cHRyID0gbmV0c25tcF9zdWJ0cmVlX2ZpbmRfcHJldihuYW1lLCBsZW4sIHN1YnRyZWUsIGNvbnRleHRfbmFtZSk7Ci0KLSAgICBpZiAobXlwdHIgIT0gTlVMTCkgewotICAgICAgICBteXB0ciA9IG15cHRyLT5uZXh0OwotICAgICAgICB3aGlsZSAobXlwdHIgIT0gTlVMTCAmJiAobXlwdHItPnZhcmlhYmxlcyA9PSBOVUxMIHx8IAotCQkJCSBteXB0ci0+dmFyaWFibGVzX2xlbiA9PSAwKSkgewotICAgICAgICAgICAgbXlwdHIgPSBteXB0ci0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbXlwdHI7Ci0gICAgfSBlbHNlIGlmIChzdWJ0cmVlICE9IE5VTEwgJiYgc25tcF9vaWRfY29tcGFyZShuYW1lLCBsZW4sIAotCQkJCSAgIHN1YnRyZWUtPnN0YXJ0X2EsIHN1YnRyZWUtPnN0YXJ0X2xlbikgPCAwKSB7Ci0gICAgICAgIHJldHVybiBzdWJ0cmVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotbmV0c25tcF9zdWJ0cmVlICoKLW5ldHNubXBfc3VidHJlZV9maW5kKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLCAKLQkJICAgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCi17Ci0gICAgbmV0c25tcF9zdWJ0cmVlICpteXB0cjsKLQotICAgIG15cHRyID0gbmV0c25tcF9zdWJ0cmVlX2ZpbmRfcHJldihuYW1lLCBsZW4sIHN1YnRyZWUsIGNvbnRleHRfbmFtZSk7Ci0gICAgaWYgKG15cHRyICYmIG15cHRyLT5lbmRfYSAmJgotICAgICAgICBzbm1wX29pZF9jb21wYXJlKG5hbWUsIGxlbiwgbXlwdHItPmVuZF9hLCBteXB0ci0+ZW5kX2xlbik8MCkgewotICAgICAgICByZXR1cm4gbXlwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihnZXRfc2Vzc2lvbl9mb3Jfb2lkLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9TRVNTSU9OX0ZPUl9PSUQKIG5ldHNubXBfc2Vzc2lvbiAqCi1nZXRfc2Vzc2lvbl9mb3Jfb2lkKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQorZ2V0X3Nlc3Npb25fZm9yX29pZChjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKIHsKICAgICBuZXRzbm1wX3N1YnRyZWUgKm15cHRyOwogCkBAIC0xNjA5LDYgKzIxNzIsNyBAQAogICAgICAgICByZXR1cm4gbXlwdHItPnNlc3Npb247CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX1NFU1NJT05fRk9SX09JRCAqLwogCiB2b2lkCiBzZXR1cF90cmVlKHZvaWQpCkBAIC0xNjY4LDYzICsyMjMyLDYgQEAKIAogfQogCi12b2lkCi1jbGVhcl9zdWJ0cmVlIChuZXRzbm1wX3N1YnRyZWUgKnN1YikgewotCi0gICAgbmV0c25tcF9zdWJ0cmVlICpjOwotICAgIAotICAgIGlmIChzdWIgPT0gTlVMTCkKLQlyZXR1cm47Ci0KLSAgICBmb3IoYyA9IHN1YjsgYzspIHsKLSAgICAgICAgc3ViID0gYzsKLSAgICAgICAgYyA9IGMtPmNoaWxkcmVuOwotICAgICAgICBuZXRzbm1wX3N1YnRyZWVfZnJlZShzdWIpOwotICAgIH0KLQotfQotCi12b2lkCi1jbGVhcl9sb29rdXBfY2FjaGUodm9pZCkgewotCi0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKnB0ciA9IE5VTEwsICpuZXh0ID0gTlVMTDsKLQotICAgIHB0ciA9IHRoZWNvbnRleHRjYWNoZTsKLSAgICB3aGlsZSAocHRyKSB7Ci0JbmV4dCA9IHB0ci0+bmV4dDsKLQlTTk1QX0ZSRUUocHRyLT5jb250ZXh0KTsKLQlTTk1QX0ZSRUUocHRyKTsKLQlwdHIgPSBuZXh0OwotICAgIH0KLSAgICB0aGVjb250ZXh0Y2FjaGUgPSBOVUxMOyAvKiAhISEgKi8KLX0KLQotdm9pZAotY2xlYXJfY29udGV4dCh2b2lkKSB7Ci0KLSAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0ciA9IE5VTEwsICpuZXh0ID0gTlVMTDsKLSAgICBuZXRzbm1wX3N1YnRyZWUgKnQsICp1OwotCi0gICAgREVCVUdNU0dUTCgoImFnZW50X3JlZ2lzdHJ5IiwgImNsZWFyIGNvbnRleHRcbiIpKTsKLQotICAgIHB0ciA9IGdldF90b3BfY29udGV4dF9jYWNoZSgpOyAKLSAgICB3aGlsZSAocHRyKSB7Ci0JbmV4dCA9IHB0ci0+bmV4dDsKLQotCWZvciAodCA9IHB0ci0+Zmlyc3Rfc3VidHJlZTsgdDsgdCA9IHUpIHsKLSAgICAgICAgICAgIHUgPSB0LT5uZXh0OwotCSAgICBjbGVhcl9zdWJ0cmVlKHQpOwotCX0KLQotCVNOTVBfRlJFRShwdHItPmNvbnRleHRfbmFtZSk7Ci0gICAgICAgIFNOTVBfRlJFRShwdHIpOwotCi0JcHRyID0gbmV4dDsKLSAgICB9Ci0gICAgY29udGV4dF9zdWJ0cmVlcyA9IE5VTEw7IC8qICEhISAqLwotICAgIGNsZWFyX2xvb2t1cF9jYWNoZSgpOwotfQotCiBleHRlcm4gdm9pZCAgICAgZHVtcF9pZHhfcmVnaXN0cnkodm9pZCk7CiB2b2lkCiBkdW1wX3JlZ2lzdHJ5KHZvaWQpCkBAIC0xNzc5LDcgKzIyODYsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAobXlwdHIyLT5sYWJlbF9hICYmIG15cHRyMi0+bGFiZWxfYVswXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChteXB0cjItPmxhYmVsX2EsICJvbGRfYXBpIikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdnAgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXB0cjItPnJlZ2luZm8tPmhhbmRsZXItPm15dm9pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB2YXJpYWJsZSopbXlwdHIyLT5yZWdpbmZvLT5oYW5kbGVyLT5teXZvaWQ7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwcmludF9yZWFsbG9jX29iamlkKCZzLCAmc2wsICZzbF9vLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT5uYW1lLCB2cC0+bmFtZWxlbikpIHsKQEAgLTE4MDEsMTkgKzIzMDgsMjcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChzICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKHMpOwotICAgIH0KLSAgICBpZiAoZSAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRShlKTsKLSAgICB9Ci0gICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUodik7Ci0gICAgfQorICAgIFNOTVBfRlJFRShzKTsKKyAgICBTTk1QX0ZSRUUoZSk7CisgICAgU05NUF9GUkVFKHYpOwogCiAgICAgZHVtcF9pZHhfcmVnaXN0cnkoKTsKIH0KIAorLyoqICBAfSAqLworLyogRW5kIG9mIE1JQiByZWdpc3RyYXRpb24gY29kZSAqLworCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9zaWduYWwsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1NJR05BTAorCisvKiogQGRlZmdyb3VwIGFnZW50X3NpZ25hbHMgUE9TSVggc2lnbmFscyBzdXBwb3J0IGZvciBhZ2VudHMuCisgKiAgICAgUmVnaXN0ZXJpbmcgYW5kIHVucmVnaXN0ZXJpbmcgc2lnbmFsIGhhbmRsZXJzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KKwogaW50ICAgICAgICAgICAgIGV4dGVybmFsX3NpZ25hbF9zY2hlZHVsZWRbTlVNX0VYVEVSTkFMX1NJR1NdOwogdm9pZCAgICAgICAgICAgICgqZXh0ZXJuYWxfc2lnbmFsX2hhbmRsZXJbTlVNX0VYVEVSTkFMX1NJR1NdKSAoaW50KTsKIApAQCAtMTgzOCw2ICsyMzUzLDIwIEBACiAjZW5kaWYKIH0KIAorLyoqIFJlZ2lzdGVycyBhIFBPU0lYIFNpZ25hbCBoYW5kbGVyLgorICogIEltcGxlbWVudHMgdGhlIHNpZ25hbCByZWdpc3RlcmluZyBwcm9jZXNzIGZvciBQT1NJWCBhbmQgbm9uLVBPU0lYCisgKiAgc3lzdGVtcy4gQWxzbywgdW5pZmllcyB0aGUgd2F5IHNpZ25hbHMgd29yay4KKyAqICBOb3RlIHRoYXQgdGhlIHNpZ25hbCBoYW5kbGVyIHNob3VsZCByZWdpc3RlciBpdHNlbGYgYWdhaW4gd2l0aAorICogIHNpZ25hbCgpIGNhbGwgYmVmb3JlIGVuZCBvZiBleGVjdXRpb24gdG8gcHJldmVudCBwb3NzaWJsZSBwcm9ibGVtcy4KKyAqCisgKiAgQHBhcmFtIHNpZyBQT1NJWCBTaWduYWwgSUQgbnVtYmVyLCBhcyBkZWZpbmVkIGluIHNpZ25hbC5oLgorICoKKyAqICBAcGFyYW0gZnVuYyBOZXcgc2lnbmFsIGhhbmRsZXIgZnVuY3Rpb24uCisgKgorICogIEByZXR1cm4gdmFsdWUgaXMgU0lHX1JFR0lTVEVSRURfT0sgZm9yIHN1Y2Nlc3MgYW5kCisgKiAgICAgICAgU0lHX1JFR0lTVFJBVElPTl9GQUlMRUQgaWYgdGhlIHJlZ2lzdHJhdGlvbiBjYW4ndAorICogICAgICAgIGJlIGhhbmRsZWQuCisgKi8KIGludAogcmVnaXN0ZXJfc2lnbmFsKGludCBzaWcsIHZvaWQgKCpmdW5jKSAoaW50KSkKIHsKQEAgLTE4NzEsNiArMjQwMCwxMiBAQAogICAgIHJldHVybiBTSUdfUkVHSVNURVJFRF9PSzsKIH0KIAorLyoqIFVucmVnaXN0ZXJzIGEgUE9TSVggU2lnbmFsIGhhbmRsZXIuCisgKgorICogIEBwYXJhbSBzaWcgUE9TSVggU2lnbmFsIElEIG51bWJlciwgYXMgZGVmaW5lZCBpbiBzaWduYWwuaC4KKyAqCisgKiAgQHJldHVybiB2YWx1ZSBpcyBTSUdfVU5SRUdJU1RFUkVEX09LIGZvciBzdWNjZXNzLCBvciBlcnJvciBjb2RlLgorICovCiBpbnQKIHVucmVnaXN0ZXJfc2lnbmFsKGludCBzaWcpCiB7CkBAIC0xODgyLDMgKzI0MTcsOSBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhV0lOMzIgKi8KIAogLyoqICBAfSAqLworLyogRW5kIG9mIHNpZ25hbHMgc3VwcG9ydCBjb2RlICovCisKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1NJR05BTCAqLworCisvKiogIEB9ICovCisKZGlmZiAtLWdpdCBhL2FnZW50L2FnZW50X3N5c09SVGFibGUuYyBiL2FnZW50L2FnZW50X3N5c09SVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjI4MDYwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5jCkBAIC0wLDAgKzEsMjM2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgorCit0eXBlZGVmIHN0cnVjdCBkYXRhX25vZGVfcyB7CisgICAgc3RydWN0IHN5c09SVGFibGUgZGF0YTsKKyAgICBzdHJ1Y3QgZGF0YV9ub2RlX3MqIG5leHQ7CisgICAgc3RydWN0IGRhdGFfbm9kZV9zKiBwcmV2OworfSogZGF0YV9ub2RlOworCitzdGF0aWMgZGF0YV9ub2RlIHRhYmxlID0gTlVMTDsKKworc3RhdGljIHZvaWQKK2VyYXNlKGRhdGFfbm9kZSBlbnRyeSkKK3sKKyAgICBlbnRyeS0+ZGF0YS5PUl91cHRpbWUgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJVTlJFR19TWVNPUiAlcFxuIiwgJmVudHJ5LT5kYXRhKSk7CisgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLCBTTk1QRF9DQUxMQkFDS19VTlJFR19TWVNPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeS0+ZGF0YSk7CisgICAgZnJlZShlbnRyeS0+ZGF0YS5PUl9vaWQpOworICAgIGZyZWUoZW50cnktPmRhdGEuT1JfZGVzY3IpOworICAgIGlmIChlbnRyeS0+bmV4dCA9PSBlbnRyeSkKKyAgICAgICAgdGFibGUgPSBOVUxMOworICAgIGVsc2UgeworICAgICAgICBlbnRyeS0+bmV4dC0+cHJldiA9IGVudHJ5LT5wcmV2OworICAgICAgICBlbnRyeS0+cHJldi0+bmV4dCA9IGVudHJ5LT5uZXh0OworICAgICAgICBpZiAoZW50cnkgPT0gdGFibGUpCisgICAgICAgICAgICB0YWJsZSA9IGVudHJ5LT5uZXh0OworICAgIH0KKyAgICBmcmVlKGVudHJ5KTsKK30KKwordm9pZAorbmV0c25tcF9zeXNPUlRhYmxlX2ZvcmVhY2godm9pZCAoKmYpKGNvbnN0IHN0cnVjdCBzeXNPUlRhYmxlKiwgdm9pZCopLCB2b2lkKiBjKQoreworICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgImZvcmVhY2goJXAsICVwKVxuIiwgZiwgYykpOworICAgIGlmKHRhYmxlKSB7CisgICAgICAgIGRhdGFfbm9kZSBydW4gPSB0YWJsZTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgZGF0YV9ub2RlIHRtcCA9IHJ1bjsKKyAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4dDsKKyAgICAgICAgICAgIGYoJnRtcC0+ZGF0YSwgYyk7CisgICAgICAgIH0gd2hpbGUodGFibGUgJiYgcnVuICE9IHRhYmxlKTsKKyAgICB9Cit9CisKK2ludAorcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqIG9pZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3IsIG5ldHNubXBfc2Vzc2lvbiAqIHNzKQoreworICAgIGRhdGFfbm9kZSBlbnRyeTsKKworICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgInJlZ2lzdGVyaW5nOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJhZ2VudC9zeXNPUlRhYmxlIiwgb2lkaW4sIG9pZGxlbikpOworICAgIERFQlVHTVNHKCgiYWdlbnQvc3lzT1JUYWJsZSIsICIsIHNlc3Npb24gJXBcbiIsIHNzKSk7CisKKyAgICBlbnRyeSA9IChkYXRhX25vZGUpY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGF0YV9ub2RlX3MpKTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IGVudHJ5XG4iKSk7CisgICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEOworICAgIH0KKworICAgIGVudHJ5LT5kYXRhLk9SX2Rlc2NyID0gc3RyZHVwKGRlc2NyKTsKKyAgICBpZiAoZW50cnktPmRhdGEuT1JfZGVzY3IgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IHN5c09SRGVzY3JcbiIpKTsKKyAgICAgICAgZnJlZShlbnRyeSk7CisgICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEOworICAgIH0KKworICAgIGVudHJ5LT5kYXRhLk9SX29pZCA9IChvaWQgKikgbWFsbG9jKHNpemVvZihvaWQpICogb2lkbGVuKTsKKyAgICBpZiAoZW50cnktPmRhdGEuT1Jfb2lkID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBzeXNPUklEXG4iKSk7CisgICAgICAgIGZyZWUoZW50cnktPmRhdGEuT1JfZGVzY3IpOworICAgICAgICBmcmVlKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIFNZU19PUlRBQkxFX1JFR0lTVFJBVElPTl9GQUlMRUQ7CisgICAgfQorCisgICAgbWVtY3B5KGVudHJ5LT5kYXRhLk9SX29pZCwgb2lkaW4sIHNpemVvZihvaWQpICogb2lkbGVuKTsKKyAgICBlbnRyeS0+ZGF0YS5PUl9vaWRsZW4gPSBvaWRsZW47CisgICAgZW50cnktPmRhdGEuT1Jfc2VzcyA9IHNzOworCisgICAgaWYodGFibGUpIHsKKyAgICAgICAgZW50cnktPm5leHQgPSB0YWJsZTsKKyAgICAgICAgZW50cnktPnByZXYgPSB0YWJsZS0+cHJldjsKKyAgICAgICAgdGFibGUtPnByZXYtPm5leHQgPSBlbnRyeTsKKyAgICAgICAgdGFibGUtPnByZXYgPSBlbnRyeTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGFibGUgPSBlbnRyeS0+bmV4dCA9IGVudHJ5LT5wcmV2ID0gZW50cnk7CisKKyAgICBlbnRyeS0+ZGF0YS5PUl91cHRpbWUgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKworICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUiwgJmVudHJ5LT5kYXRhKTsKKworICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RFUkVEX09LOworfQorCitpbnQKK3JlZ2lzdGVyX3N5c09SVGFibGUob2lkICogb2lkaW4sIHNpemVfdCBvaWRsZW4sIGNvbnN0IGNoYXIgKmRlc2NyKQoreworICAgIHJldHVybiByZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkaW4sIG9pZGxlbiwgZGVzY3IsIE5VTEwpOworfQorCitpbnQKK3VucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqIG9pZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9pZGxlbiwgbmV0c25tcF9zZXNzaW9uICogc3MpCit7CisgICAgaW50IGFueV91bnJlZ2lzdGVyZWQgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAic3lzT1JUYWJsZSB1bnJlZ2lzdGVyaW5nOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJhZ2VudC9zeXNPUlRhYmxlIiwgb2lkaW4sIG9pZGxlbikpOworICAgIERFQlVHTVNHKCgiYWdlbnQvc3lzT1JUYWJsZSIsICIsIHNlc3Npb24gJXBcbiIsIHNzKSk7CisKKyAgICBpZih0YWJsZSkgeworICAgICAgICBkYXRhX25vZGUgcnVuID0gdGFibGU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGRhdGFfbm9kZSB0bXAgPSBydW47CisgICAgICAgICAgICBydW4gPSBydW4tPm5leHQ7CisgICAgICAgICAgICBpZiAodG1wLT5kYXRhLk9SX3Nlc3MgPT0gc3MgJiYKKyAgICAgICAgICAgICAgICBzbm1wX29pZF9jb21wYXJlKG9pZGluLCBvaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAtPmRhdGEuT1Jfb2lkLCB0bXAtPmRhdGEuT1Jfb2lkbGVuKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJhc2UodG1wKTsKKyAgICAgICAgICAgICAgICBhbnlfdW5yZWdpc3RlcmVkID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSh0YWJsZSAmJiBydW4gIT0gdGFibGUpOworICAgIH0KKworICAgIGlmIChhbnlfdW5yZWdpc3RlcmVkKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgInVucmVnaXN0ZXJpbmcgc3VjY2Vzc2Z1bGxcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNZU19PUlRBQkxFX1VOUkVHSVNURVJFRF9PSzsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJ1bnJlZ2lzdGVyaW5nIGZhaWxlZFxuIikpOworICAgICAgICByZXR1cm4gU1lTX09SVEFCTEVfTk9fU1VDSF9SRUdJU1RSQVRJT047CisgICAgfQorfQorCisKK2ludAordW5yZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqIG9pZGluLCBzaXplX3Qgb2lkbGVuKQoreworICAgIHJldHVybiB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWRpbiwgb2lkbGVuLCBOVUxMKTsKK30KKworCit2b2lkCit1bnJlZ2lzdGVyX3N5c09SVGFibGVfYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzcykKK3sKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsCisgICAgICAgICAgICAgICAgInN5c09SVGFibGUgdW5yZWdpc3RlcmluZyBzZXNzaW9uICVwXG4iLCBzcykpOworCisgICBpZih0YWJsZSkgeworICAgICAgICBkYXRhX25vZGUgcnVuID0gdGFibGU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGRhdGFfbm9kZSB0bXAgPSBydW47CisgICAgICAgICAgICBydW4gPSBydW4tPm5leHQ7CisgICAgICAgICAgICBpZiAoKChzcy0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1NVQlNFU1NJT04pICYmCisgICAgICAgICAgICAgICAgIHRtcC0+ZGF0YS5PUl9zZXNzID09IHNzKSB8fAorICAgICAgICAgICAgICAgICghKHNzLT5mbGFncyAmIFNOTVBfRkxBR1NfU1VCU0VTU0lPTikgJiYgdG1wLT5kYXRhLk9SX3Nlc3MgJiYKKyAgICAgICAgICAgICAgICAgdG1wLT5kYXRhLk9SX3Nlc3MtPnN1YnNlc3Npb24gPT0gc3MpKQorICAgICAgICAgICAgICAgIGVyYXNlKHRtcCk7CisgICAgICAgIH0gd2hpbGUodGFibGUgJiYgcnVuICE9IHRhYmxlKTsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsCisgICAgICAgICAgICAgICAgInN5c09SVGFibGUgdW5yZWdpc3RlcmluZyBzZXNzaW9uICVwIGRvbmVcbiIsIHNzKSk7Cit9CisKK3N0YXRpYyBpbnQKK3JlZ2lzdGVyX3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKQoreworICAgIHN0cnVjdCBzeXNPUlRhYmxlICpwYXJtcyA9IChzdHJ1Y3Qgc3lzT1JUYWJsZSAqKSBzZXJ2ZXJhcmc7CisKKyAgICByZXR1cm4gcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKHBhcm1zLT5PUl9vaWQsIHBhcm1zLT5PUl9vaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJtcy0+T1JfZGVzY3IsIHBhcm1zLT5PUl9zZXNzKTsKK30KKworc3RhdGljIGludAordW5yZWdpc3Rlcl9zeXNPUl9ieV9zZXNzaW9uX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24gPSAobmV0c25tcF9zZXNzaW9uICopIHNlcnZlcmFyZzsKKworICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKHNlc3Npb24pOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VucmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcGFybXMgPSAoc3RydWN0IHN5c09SVGFibGUgKikgc2VydmVyYXJnOworCisgICAgcmV0dXJuIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKHBhcm1zLT5PUl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm1zLT5PUl9vaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm1zLT5PUl9zZXNzKTsKK30KKwordm9pZAoraW5pdF9hZ2VudF9zeXNPUlRhYmxlKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAiaW5pdF9hZ2VudF9zeXNPUlRhYmxlXG4iKSk7CisKKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfUkVHX1NZU09SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2ssIE5VTEwpOworICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2ssIE5VTEwpOworICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUl9TRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl9zeXNPUl9ieV9zZXNzaW9uX2NhbGxiYWNrLCBOVUxMKTsKK30KKwordm9pZAorc2h1dGRvd25fYWdlbnRfc3lzT1JUYWJsZSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgInNodXRkb3duX3N5c09SVGFibGVcbiIpKTsKKyAgICB3aGlsZSh0YWJsZSkKKyAgICAgICAgZXJhc2UodGFibGUpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvYWdlbnRfdHJhcC5jIGIvYWdlbnQvYWdlbnRfdHJhcC5jCmluZGV4IDEzNTljOTAuLjA4MGI4YmYgMTAwNjQ0Ci0tLSBhL2FnZW50L2FnZW50X3RyYXAuYworKysgYi9hZ2VudC9hZ2VudF90cmFwLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTM0LDExICszNSw3IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00OSw4ICs0Niw2IEBACiAjZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbGlmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgogI2VuZGlmCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC01OCw2ICs1Myw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KQEAgLTY5LDYgKzY1LDE0IEBACiAjaW5jbHVkZSAiYWdlbnR4L3Byb3RvY29sLmgiCiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50X3RyYXBfYWxsLCBsaWJuZXRzbm1wYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0cmFwX3ZhcnNfd2l0aF9jb250ZXh0LCBhZ2VudF90cmFwX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZW1vdmVfdHJhcF9zZXNzaW9uLCBhZ2VudF90cmFwX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNlbmRfdjN0cmFwLG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNlbmRfdHJhcF9wZHUsbmV0c25tcF91bnVzZWQpCisKIHN0cnVjdCB0cmFwX3NpbmsgewogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2VzcDsKICAgICBzdHJ1Y3QgdHJhcF9zaW5rICpuZXh0OwpAQCAtNzgsMzYgKzgyLDI4IEBACiAKIHN0cnVjdCB0cmFwX3NpbmsgKnNpbmtzID0gTlVMTDsKIAotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKLQotb2lkICAgICAgICAgICAgIG9iamlkX2VudGVycHJpc2V0cmFwW10gPSB7IE5FVFNOTVBfTk9USUZJQ0FUSU9OX01JQiB9Owotb2lkICAgICAgICAgICAgIHRyYXBfdmVyc2lvbl9pZFtdID0geyBORVRTTk1QX1NZU1RFTV9NSUIgfTsKLWludCAgICAgICAgICAgICBlbnRlcnByaXNldHJhcF9sZW47Ci1pbnQgICAgICAgICAgICAgdHJhcF92ZXJzaW9uX2lkX2xlbjsKK2NvbnN0IG9pZCAgICAgICBvYmppZF9lbnRlcnByaXNldHJhcFtdID0geyBORVRTTk1QX05PVElGSUNBVElPTl9NSUIgfTsKK2NvbnN0IG9pZCAgICAgICB0cmFwX3ZlcnNpb25faWRbXSA9IHsgTkVUU05NUF9TWVNURU1fTUlCIH07Citjb25zdCBpbnQgICAgICAgZW50ZXJwcmlzZXRyYXBfbGVuID0gT0lEX0xFTkdUSChvYmppZF9lbnRlcnByaXNldHJhcCk7Citjb25zdCBpbnQgICAgICAgdHJhcF92ZXJzaW9uX2lkX2xlbiA9IE9JRF9MRU5HVEgodHJhcF92ZXJzaW9uX2lkKTsKIAogI2RlZmluZSBTTk1QVjJfVFJBUFNfUFJFRklYCVNOTVBfT0lEX1NOTVBNT0RVTEVTLDEsMSw1Ci1vaWQgICAgICAgICAgICAgdHJhcF9wcmVmaXhbXSAgICA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCB9Owotb2lkICAgICAgICAgICAgIGNvbGRfc3RhcnRfb2lkW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDEgfTsgIC8qIFNOTVB2Mi1NSUIgKi8KLW9pZCAgICAgICAgICAgICB3YXJtX3N0YXJ0X29pZFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCAyIH07ICAvKiBTTk1QdjItTUlCICovCi1vaWQgICAgICAgICAgICAgbGlua19kb3duX29pZFtdICA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgMyB9OyAgLyogSUYtTUlCICovCi1vaWQgICAgICAgICAgICAgbGlua191cF9vaWRbXSAgICA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgNCB9OyAgLyogSUYtTUlCICovCi1vaWQgICAgICAgICAgICAgYXV0aF9mYWlsX29pZFtdICA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgNSB9OyAgLyogU05NUHYyLU1JQiAqLwotb2lkICAgICAgICAgICAgIGVncF94eHhfb2lkW10gICAgPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDk5IH07IC8qID8/PyAqLworY29uc3Qgb2lkICAgICAgIHRyYXBfcHJlZml4W10gICAgPSB7IFNOTVBWMl9UUkFQU19QUkVGSVggfTsKK2NvbnN0IG9pZCAgICAgICBjb2xkX3N0YXJ0X29pZFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCAxIH07ICAvKiBTTk1QdjItTUlCICovCiAKICNkZWZpbmUgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgJU05NUF9PSURfU05NUE1PRFVMRVMsMSwxLDQKLW9pZCAgICAgICAgICAgICBzbm1wdHJhcF9vaWRbXSA9IHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDEsIDAgfTsKLW9pZCAgICAgICAgICAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkW10gPQotICAgIHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDMsIDAgfTsKLW9pZCAgICAgICAgICAgICBzeXN1cHRpbWVfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDEsIDMsIDAgfTsKLXNpemVfdCAgICAgICAgICBzbm1wdHJhcF9vaWRfbGVuOwotc2l6ZV90ICAgICAgICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRfbGVuOwotc2l6ZV90ICAgICAgICAgIHN5c3VwdGltZV9vaWRfbGVuOworY29uc3Qgb2lkICAgICAgIHNubXB0cmFwX29pZFtdID0geyBTTk1QVjJfVFJBUF9PQkpTX1BSRUZJWCwgMSwgMCB9OworY29uc3Qgb2lkICAgICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRbXSA9IHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDMsIDAgfTsKK2NvbnN0IG9pZCAgICAgICBzeXN1cHRpbWVfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDEsIDMsIDAgfTsKK2NvbnN0IHNpemVfdCAgICBzbm1wdHJhcF9vaWRfbGVuID0gT0lEX0xFTkdUSChzbm1wdHJhcF9vaWQpOworY29uc3Qgc2l6ZV90ICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRfbGVuID0gT0lEX0xFTkdUSChzbm1wdHJhcGVudGVycHJpc2Vfb2lkKTsKK2NvbnN0IHNpemVfdCAgICBzeXN1cHRpbWVfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc3lzdXB0aW1lX29pZCk7CiAKICNkZWZpbmUgU05NUFYyX0NPTU1fT0JKU19QUkVGSVgJU05NUF9PSURfU05NUE1PRFVMRVMsMTgsMQotb2lkICAgICAgICAgICAgIGFnZW50YWRkcl9vaWRbXSA9IHsgU05NUFYyX0NPTU1fT0JKU19QUkVGSVgsIDMsIDAgfTsKLXNpemVfdCAgICAgICAgICBhZ2VudGFkZHJfb2lkX2xlbjsKLW9pZCAgICAgICAgICAgICBjb21tdW5pdHlfb2lkW10gPSB7IFNOTVBWMl9DT01NX09CSlNfUFJFRklYLCA0LCAwIH07Ci1zaXplX3QgICAgICAgICAgY29tbXVuaXR5X29pZF9sZW47Citjb25zdCBvaWQgICAgICAgYWdlbnRhZGRyX29pZFtdID0geyBTTk1QVjJfQ09NTV9PQkpTX1BSRUZJWCwgMywgMCB9OworY29uc3Qgc2l6ZV90ICAgIGFnZW50YWRkcl9vaWRfbGVuID0gT0lEX0xFTkdUSChhZ2VudGFkZHJfb2lkKTsKK2NvbnN0IG9pZCAgICAgICBjb21tdW5pdHlfb2lkW10gPSB7IFNOTVBWMl9DT01NX09CSlNfUFJFRklYLCA0LCAwIH07Citjb25zdCBzaXplX3QgICAgY29tbXVuaXR5X29pZF9sZW4gPSBPSURfTEVOR1RIKGNvbW11bml0eV9vaWQpOwogI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQogY2hhciAgICAgICAgICAgKnNubXBfdHJhcGNvbW11bml0eSA9IE5VTEw7CiAjZW5kaWYKQEAgLTE0MSwxOCArMTM3LDEyIEBACiB2b2lkCiBpbml0X3RyYXBzKHZvaWQpCiB7Ci0gICAgZW50ZXJwcmlzZXRyYXBfbGVuICA9IE9JRF9MRU5HVEgob2JqaWRfZW50ZXJwcmlzZXRyYXApOwotICAgIHRyYXBfdmVyc2lvbl9pZF9sZW4gPSBPSURfTEVOR1RIKHRyYXBfdmVyc2lvbl9pZCk7Ci0gICAgc25tcHRyYXBfb2lkX2xlbiAgICA9IE9JRF9MRU5HVEgoc25tcHRyYXBfb2lkKTsKLSAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc25tcHRyYXBlbnRlcnByaXNlX29pZCk7Ci0gICAgc3lzdXB0aW1lX29pZF9sZW4gICA9IE9JRF9MRU5HVEgoc3lzdXB0aW1lX29pZCk7Ci0gICAgYWdlbnRhZGRyX29pZF9sZW4gICA9IE9JRF9MRU5HVEgoYWdlbnRhZGRyX29pZCk7Ci0gICAgY29tbXVuaXR5X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoY29tbXVuaXR5X29pZCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBmcmVlX3RyYXBfc2Vzc2lvbihzdHJ1Y3QgdHJhcF9zaW5rICpzcCkKIHsKKyAgICBERUJVR01TR1RMKCgidHJhcCIsICJmcmVlaW5nIGNhbGxiYWNrIHRyYXAgc2Vzc2lvbiAoJXAsICVwKVxuIiwgc3AsIHNwLT5zZXNwKSk7CiAgICAgc25tcF9jbG9zZShzcC0+c2VzcCk7CiAgICAgZnJlZShzcCk7CiB9CkBAIC0xNjgsNyArMTU4LDcgQEAKICAgICAgICAgICogc29tZXRoaW5nIGVsc2Ugd2FudHMgdG8gaGFuZGxlIG5vdGlmaWNhdGlvbiByZWdpc3RyYXRpb25zIAogICAgICAgICAgKi8KICAgICAgICAgc3RydWN0IGFnZW50X2FkZF90cmFwX2FyZ3MgYXJnczsKLSAgICAgICAgREVCVUdNU0dUTCgoInRyYXAiLCAiYWRkaW5nIGNhbGxiYWNrIHRyYXAgc2lua1xuIikpOworICAgICAgICBERUJVR01TR1RMKCgidHJhcCIsICJhZGRpbmcgY2FsbGJhY2sgdHJhcCBzaW5rICglcClcbiIsIHNzKSk7CiAgICAgICAgIGFyZ3Muc3MgPSBzczsKICAgICAgICAgYXJncy5jb25maXJtID0gY29uZmlybTsKICAgICAgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLApAQCAtMTk0LDExICsxODQsMTMgQEAKICAgICByZXR1cm4gMTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTU9WRV9UUkFQX1NFU1NJT04KIGludAogcmVtb3ZlX3RyYXBfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzcykKIHsKLSAgICBzdHJ1Y3QgdHJhcF9zaW5rICpzcCA9IHNpbmtzLCAqcHJldiA9IDA7CisgICAgc3RydWN0IHRyYXBfc2luayAqc3AgPSBzaW5rcywgKnByZXYgPSBOVUxMOwogCisgICAgREVCVUdNU0dUTCgoInRyYXAiLCAicmVtb3ZpbmcgdHJhcCBzZXNzaW9uc1xuIikpOwogICAgIHdoaWxlIChzcCkgewogICAgICAgICBpZiAoc3AtPnNlc3AgPT0gc3MpIHsKICAgICAgICAgICAgIGlmIChwcmV2KSB7CkBAIC0yMTYsNiArMjA4LDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBmcmVlX3RyYXBfc2Vzc2lvbihzcCk7ICAKICAgICAgICAgICAgICAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRyYXAiLCAicmVtb3ZpbmcgdHJhcCBzZXNzaW9uICglcCwgJXApXG4iLCBzcCwgc3AtPnNlc3ApKTsKICAgICAgICAgICAgIGZyZWUoc3ApOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KQEAgLTIyNCw2ICsyMTcsNyBAQAogICAgIH0KICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTU9WRV9UUkFQX1NFU1NJT04gKi8KIAogI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQogc3RhdGljIGludApAQCAtMzE4LDYgKzMxMiw3IEBACiBzbm1wZF9mcmVlX3RyYXBzaW5rcyh2b2lkKQogewogICAgIHN0cnVjdCB0cmFwX3NpbmsgKnNwID0gc2lua3M7CisgICAgREVCVUdNU0dUTCgoInRyYXAiLCAiZnJlZWluZyB0cmFwIHNlc3Npb25zXG4iKSk7CiAgICAgd2hpbGUgKHNwKSB7CiAgICAgICAgIHNpbmtzID0gc2lua3MtPm5leHQ7CiAgICAgICAgIGZyZWVfdHJhcF9zZXNzaW9uKHNwKTsKQEAgLTMzOCw3ICszMzMsNiBAQAogICAgIG5ldHNubXBfcGR1ICAgICAgICAgICAqdGVtcGxhdGVfdjFwZHU7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpmaXJzdF92YiwgKnZibGlzdDsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcjsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgIGxlbjsKIAogICAgIC8qCiAgICAgICogTWFrZSBhIGNvcHkgb2YgdGhlIHYyIFRyYXAgUERVCkBAIC00MTgsOSArNDEyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRfbGVuKTsKICAgICAgICAgaWYgKHZhcikgewotICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2UgPQotICAgICAgICAgICAgICAgIG5ldHNubXBfbWVtZHVwKHZhci0+dmFsLm9iamlkLCB2YXItPnZhbF9sZW4pOwogICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2VfbGVuZ3RoID0gdmFyLT52YWxfbGVuL3NpemVvZihvaWQpOworICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2UgPQorICAgICAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHZhci0+dmFsLm9iamlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX3YxcGR1LT5lbnRlcnByaXNlX2xlbmd0aCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0ZW1wbGF0ZV92MXBkdS0+ZW50ZXJwcmlzZSAgICAgICAgPSBOVUxMOwogICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2VfbGVuZ3RoID0gMDsJCS8qIFhYWCA/Pz8gKi8KQEAgLTQzMCw3ICs0MjUsNyBAQAogICAgICAgICAgKiBGb3IgZW50ZXJwcmlzZS1zcGVjaWZpYyB0cmFwcywgc3BsaXQgdGhlIHNubXBUcmFwT0lEIHZhbHVlCiAgICAgICAgICAqICAgaW50byBlbnRlcnByaXNlIGFuZCBzcGVjaWZpYyB0cmFwCiAgICAgICAgICAqLwotICAgICAgICBsZW4gPSB2Ymxpc3QtPnZhbF9sZW4gLyBzaXplb2Yob2lkKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IHZibGlzdC0+dmFsX2xlbiAvIHNpemVvZihvaWQpOwogICAgICAgICBpZiAoIGxlbiA8PSAyICkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCiAgICAgICAgICAgICAgICAgICAgICAic2VuZF90cmFwOiB2MiB0cmFwT0lEIHRvbyBzaG9ydCAoJWQpXG4iLCAoaW50KWxlbik7CkBAIC00NDQsNyArNDM5LDcgQEAKICAgICAgICAgICAgIGxlbi0tOwogICAgICAgICBTTk1QX0ZSRUUodGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2UpOwogICAgICAgICB0ZW1wbGF0ZV92MXBkdS0+ZW50ZXJwcmlzZSA9Ci0gICAgICAgICAgICBuZXRzbm1wX21lbWR1cCh2Ymxpc3QtPnZhbC5vYmppZCwgbGVuKnNpemVvZihvaWQpKTsKKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHZibGlzdC0+dmFsLm9iamlkLCBsZW4pOwogICAgICAgICB0ZW1wbGF0ZV92MXBkdS0+ZW50ZXJwcmlzZV9sZW5ndGggPSBsZW47CiAgICAgfQogICAgIHZhciA9IGZpbmRfdmFyYmluZF9pbl9saXN0KCB2Ymxpc3QsIGFnZW50YWRkcl9vaWQsCkBAIC02MjUsOSArNjIwLDkgQEAKICAqLwogaW50CiBuZXRzbm1wX3NlbmRfdHJhcHMoaW50IHRyYXAsIGludCBzcGVjaWZpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBlbnRlcnByaXNlLCBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBjb250ZXh0LCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb250ZXh0LCBpbnQgZmxhZ3MpCiB7CiAgICAgbmV0c25tcF9wZHUgICAgICAgICAgICp0ZW1wbGF0ZV92MXBkdTsKICAgICBuZXRzbm1wX3BkdSAgICAgICAgICAgKnRlbXBsYXRlX3YycGR1OwpAQCAtNjM3LDYgKzYzMiw4IEBACiAgICAgaW5fYWRkcl90ICAgICAgICAgICAgICpwZHVfaW5fYWRkcl90OwogICAgIHVfbG9uZyAgICAgICAgICAgICAgICAgdXB0aW1lOwogICAgIHN0cnVjdCB0cmFwX3NpbmsgKnNpbms7CisgICAgY29uc3QgY2hhciAgICAgICAgICAgICp2MXRyYXBhZGRyZXNzOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcmVzID0gMDsKIAogICAgIERFQlVHTVNHVEwoKCAidHJhcCIsICJzZW5kX3RyYXAgJWQgJWQgIiwgdHJhcCwgc3BlY2lmaWMpKTsKICAgICBERUJVR01TR09JRCgoInRyYXAiLCBlbnRlcnByaXNlLCBlbnRlcnByaXNlX2xlbmd0aCkpOwpAQCAtNzE4LDcgKzcxNSw3IEBACiAgICAgICAgICAgICAgICAgIXNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICYodGVtcGxhdGVfdjJwZHUtPnZhcmlhYmxlcyksCiAgICAgICAgICAgICAgICAgICAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkLCBzbm1wdHJhcGVudGVycHJpc2Vfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIEFTTl9PQkpFQ1RfSUQsCi0gICAgICAgICAgICAgICAgICAgICAoY2hhciopZW50ZXJwcmlzZSwgZW50ZXJwcmlzZV9sZW5ndGgqc2l6ZW9mKG9pZCkpKSB7CisgICAgICAgICAgICAgICAgICAgICBlbnRlcnByaXNlLCBlbnRlcnByaXNlX2xlbmd0aCpzaXplb2Yob2lkKSkpIHsKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKICAgICAgICAgICAgICAgICAgICAgICJzZW5kX3RyYXA6IGZhaWxlZCB0byBhZGQgc25tcEVudGVycHJpc2UgdG8gdjIgdHJhcFxuIik7CiAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdSh0ZW1wbGF0ZV92MnBkdSk7CkBAIC03OTAsOSArNzg3LDI5IEBACiAgICAgICogRW5zdXJlIHRoYXQgdGhlIHYxIHRyYXAgUERVIGluY2x1ZGVzIHRoZSBsb2NhbCBJUCBhZGRyZXNzCiAgICAgICovCiAgICAgICAgcGR1X2luX2FkZHJfdCA9IChpbl9hZGRyX3QgKikgdGVtcGxhdGVfdjFwZHUtPmFnZW50X2FkZHI7Ci0gICAgICAqcGR1X2luX2FkZHJfdCA9IGdldF9teWFkZHIoKTsKKyAgICAgICB2MXRyYXBhZGRyZXNzID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1RSQVBfQUREUik7CisgICAgICAgaWYgKHYxdHJhcGFkZHJlc3MgIT0gTlVMTCkgeworICAgICAgICAgICAvKiAidjF0cmFwYWRkcmVzcyIgd2FzIHNwZWNpZmllZCBpbiBjb25maWcsIHRyeSB0byByZXNvbHZlIGl0ICovCisgICAgICAgICAgIHJlcyA9IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZV92NCh2MXRyYXBhZGRyZXNzLCBwZHVfaW5fYWRkcl90KTsKKyAgICAgICB9CisgICAgICAgaWYgKHYxdHJhcGFkZHJlc3MgPT0gTlVMTCB8fCByZXMgPCAwKSB7CisgICAgICAgICAgIC8qICJ2MXRyYXBhZGRyZXNzIiB3YXMgbm90IHNwZWNpZmllZCBpbiBjb25maWcgb3IgdGhlIHJlc29sdXRpb24gZmFpbGVkLAorICAgICAgICAgICAgKiB0cnkgYW55IGxvY2FsIGFkZHJlc3MgKi8KKyAgICAgICAgICAgKnBkdV9pbl9hZGRyX3QgPSBnZXRfbXlhZGRyKCk7CisgICAgICAgfQorCiAgICAgfQogCisgICAgaWYgKHRlbXBsYXRlX3YycGR1KSB7CisJLyogQSBjb250ZXh0IG5hbWUgd2FzIHByb3ZpZGVkLCBzbyBjb3B5IGl0IGFuZCBpdHMgbGVuZ3RoIHRvIHRoZSB2MiBwZHUKKwkgKiB0ZW1wbGF0ZS4gKi8KKwlpZiAoY29udGV4dCAhPSBOVUxMKQorCXsKKwkJdGVtcGxhdGVfdjJwZHUtPmNvbnRleHROYW1lICAgID0gc3RyZHVwKGNvbnRleHQpOworCQl0ZW1wbGF0ZV92MnBkdS0+Y29udGV4dE5hbWVMZW4gPSBzdHJsZW4oY29udGV4dCk7CisJfQorICAgIH0KIAogICAgIC8qCiAgICAgICogIE5vdyBsb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgdHJhcCBzaW5rcwpAQCAtODMwLDcgKzg0Nyw3IEBACiB2b2lkCiBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzKGludCB0cmFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BlY2lmaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJzKQogewogICAgIG5ldHNubXBfc2VuZF90cmFwcyh0cmFwLCBzcGVjaWZpYywKQEAgLTg4Nyw5ICs5MDQsNiBAQAogewogICAgIG5ldHNubXBfcGR1ICAgICpwZHU7CiAgICAgaW50ICAgICAgICAgICAgcmVzdWx0OwotICAgIGNoYXIgICAgICAgICAgIHRtcFtTUFJJTlRfTUFYX0xFTl07Ci0gICAgaW50ICAgICAgICAgICAgbGVuOwotCiAKICAgICBpZiAoIXNlc3MgfHwgIXRlbXBsYXRlX3BkdSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTIxLDcgKzkzNSw5IEBACiAgICAgICAgIGlmICgoc2Vzcy0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMykgJiYKICAgICAgICAgICAgICAgICAocGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1RSQVAyKSAmJgogICAgICAgICAgICAgICAgIChzZXNzLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApKSB7Ci0gICAgICAgICAgICBsZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKHRtcCwgc2l6ZW9mKHRtcCkpOworICAgICAgICAgICAgdV9jaGFyICAgICAgICAgIHRtcFtTUFJJTlRfTUFYX0xFTl07CisKKyAgICAgICAgICAgIGludCBsZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKHRtcCwgc2l6ZW9mKHRtcCkpOwogICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlEID0gbmV0c25tcF9tZW1kdXAodG1wLCBsZW4pOwogICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuID0gbGVuOwogICAgICAgICB9CkBAIC05NDksNiArOTY1LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh0cmFwX3ZlcnNpb25faWQpLCB2YXJzKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RSQVBfVkFSU19XSVRIX0NPTlRFWFQKKy8qIFNlbmQgYSB0cmFwIHVuZGVyIGEgY29udGV4dCAqLwordm9pZCBzZW5kX3RyYXBfdmFyc193aXRoX2NvbnRleHQoaW50IHRyYXAsIGludCBzcGVjaWZpYywgCisgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgY29uc3QgY2hhciAqY29udGV4dCkKK3sKKyAgICBpZiAodHJhcCA9PSBTTk1QX1RSQVBfRU5URVJQUklTRVNQRUNJRklDKQorICAgICAgICBuZXRzbm1wX3NlbmRfdHJhcHModHJhcCwgc3BlY2lmaWMsIG9iamlkX2VudGVycHJpc2V0cmFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgob2JqaWRfZW50ZXJwcmlzZXRyYXApLCB2YXJzLAorCQkJCQkJCQkgIGNvbnRleHQsIDApOworICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF9zZW5kX3RyYXBzKHRyYXAsIHNwZWNpZmljLCB0cmFwX3ZlcnNpb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh0cmFwX3ZlcnNpb25faWQpLCB2YXJzLCAKKwkJCQkJCQkJICBjb250ZXh0LCAwKTsKKyAgICAJCit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UUkFQX1ZBUlNfV0lUSF9DT05URVhUICovCisKIC8qKgogICogU2VuZHMgYW4gU05NUHYxIHRyYXAgKG9yIHRoZSBTTk1QdjIgZXF1aXZhbGVudCkgdG8gdGhlIGxpc3Qgb2YgIAogICogY29uZmlndXJlZCB0cmFwIGRlc3RpbmF0aW9ucyAob3IgInNpbmtzIiksIHVzaW5nIHRoZSBwcm92aWRlZCAKQEAgLTEwMDcsMTEgKzEwNDAsMzQgQEAKICAgICBzZW5kX3RyYXBfdmFycygtMSwgLTEsIHZhcnMpOwogfQogCisvKioKKyAqIFNpbWlsYXIgdG8gc2VuZF92MnRyYXAoKSwgd2l0aCB0aGUgYWRkZWQgYWJpbGl0eSB0byBzcGVjaWZ5IGEgY29udGV4dC4gIElmCisgKiB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgTlVMTCwgdGhlbiB0aGlzIGNhbGwgaXMgZXF1aXZhbGVudCB0byBzZW5kX3YydHJhcCgpLgorICoKKyAqIEBwYXJhbSB2YXJzIGlzIHVzZWQgdG8gc3VwcGx5IHRoZSBsaXN0IG9mIHZhcmlhYmxlIGJpbmRpbmdzIGZvciB0aGUgdHJhcC4KKyAqIAorICogQHBhcmFtIGNvbnRleHQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb250ZXh0IG9mIHRoZSB0cmFwLgorICoKKyAqIEByZXR1cm4gdm9pZAorICoKKyAqIEBzZWUgc2VuZF92MnRyYXAKKyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFTkRfVjNUUkFQCit2b2lkIHNlbmRfdjN0cmFwKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgY29uc3QgY2hhciAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX3NlbmRfdHJhcHMoLTEsIC0xLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdHJhcF92ZXJzaW9uX2lkLCBPSURfTEVOR1RIKHRyYXBfdmVyc2lvbl9pZCksCisgICAgICAgICAgICAgICAgICAgICAgIHZhcnMsIGNvbnRleHQsIDApOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0VORF9WM1RSQVAgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFTkRfVFJBUF9QRFUKIHZvaWQKIHNlbmRfdHJhcF9wZHUobmV0c25tcF9wZHUgKnBkdSkKIHsKICAgICBzZW5kX3RyYXBfdmFycygtMSwgLTEsIHBkdS0+dmFyaWFibGVzKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFTkRfVFJBUF9QRFUgKi8KIAogCiAKQEAgLTEwNzMsNyArMTEyOSw2IEBACiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfdHJhcHNpbmsoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKICAgICBjaGFyICAgICAgICAgICAqc3AsICpjcCwgKnBwID0gTlVMTDsKICAgICBjaGFyICAgICAgICAgICAgKnN0OwogCkBAIC0xMDg2LDkgKzExNDEsNyBAQAogICAgIGlmIChwcCkKIAljb25maWdfcHdhcm4oIlRoZSBzZXBhcmF0ZSBwb3J0IGFyZ3VtZW50IHRvIHRyYXBzaW5rIGlzIGRlcHJlY2F0ZWQiKTsKICAgICBpZiAoY3JlYXRlX3YxX3RyYXBfc2Vzc2lvbihzcCwgcHAsIGNwID8gY3AgOiBzbm1wX3RyYXBjb21tdW5pdHkpID09IDApIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgImNhbm5vdCBjcmVhdGUgdHJhcHNpbms6ICVzIiwgY3B0cik7Ci0gICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9ICdcMCc7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiY2Fubm90IGNyZWF0ZSB0cmFwc2luazogJXMiLCBjcHRyKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTEwOTcsOSArMTE1MCw3IEBACiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfdHJhcDJzaW5rKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKLSAgICBjaGFyICAgICAgICAgICAqc3AsICpjcCwgKnBwID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAgKnN0OworICAgIGNoYXIgICAgICAgICAgICpzdCwgKnNwLCAqY3AsICpwcCA9IE5VTEw7CiAKICAgICBpZiAoIXNubXBfdHJhcGNvbW11bml0eSkKICAgICAgICAgc25tcF90cmFwY29tbXVuaXR5ID0gc3RyZHVwKCJwdWJsaWMiKTsKQEAgLTExMTAsMTggKzExNjEsMTQgQEAKICAgICBpZiAocHApCiAJY29uZmlnX3B3YXJuKCJUaGUgc2VwYXJhdGUgcG9ydCBhcmd1bWVudCB0byB0cmFwc2luazIgaXMgZGVwcmVjYXRlZCIpOwogICAgIGlmIChjcmVhdGVfdjJfdHJhcF9zZXNzaW9uKHNwLCBwcCwgY3AgPyBjcCA6IHNubXBfdHJhcGNvbW11bml0eSkgPT0gMCkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiY2Fubm90IGNyZWF0ZSB0cmFwMnNpbms6ICVzIiwgY3B0cik7Ci0gICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9ICdcMCc7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiY2Fubm90IGNyZWF0ZSB0cmFwMnNpbms6ICVzIiwgY3B0cik7CiAgICAgfQogfQogCiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfaW5mb3Jtc2luayhjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07Ci0gICAgY2hhciAgICAgICAgICAgKnNwLCAqY3AsICpwcCA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgICpzdDsKKyAgICBjaGFyICAgICAgICAgICAqc3QsICpzcCwgKmNwLCAqcHAgPSBOVUxMOwogCiAgICAgaWYgKCFzbm1wX3RyYXBjb21tdW5pdHkpCiAgICAgICAgIHNubXBfdHJhcGNvbW11bml0eSA9IHN0cmR1cCgicHVibGljIik7CkBAIC0xMTMyLDkgKzExNzksNyBAQAogICAgIGlmIChwcCkKIAljb25maWdfcHdhcm4oIlRoZSBzZXBhcmF0ZSBwb3J0IGFyZ3VtZW50IHRvIGluZm9ybXNpbmsgaXMgZGVwcmVjYXRlZCIpOwogICAgIGlmIChjcmVhdGVfdjJfaW5mb3JtX3Nlc3Npb24oc3AsIHBwLCBjcCA/IGNwIDogc25tcF90cmFwY29tbXVuaXR5KSA9PSAwKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJjYW5ub3QgY3JlYXRlIGluZm9ybXNpbms6ICVzIiwgY3B0cik7Ci0gICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9ICdcMCc7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiY2Fubm90IGNyZWF0ZSBpbmZvcm1zaW5rOiAlcyIsIGNwdHIpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMTE2OSw5ICsxMjE0LDEwIEBACiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfdHJhcHNlc3MoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAqYXJndltNQVhfQVJHU10sICpjcCA9IGNwdHIsIHRtcFtTUFJJTlRfTUFYX0xFTl07Ci0gICAgaW50ICAgICAgICAgICAgIGFyZ247CisgICAgY2hhciAgICAgICAgICAgKmFyZ3ZbTUFYX0FSR1NdLCAqY3AgPSBjcHRyOworICAgIGludCAgICAgICAgICAgICBhcmduLCByYzsKICAgICBuZXRzbm1wX3Nlc3Npb24gc2Vzc2lvbiwgKnNzOworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKIAogICAgIC8qCkBAIC0xMTg0LDE1ICsxMjMwLDI4IEBACiAgICAgICovCiAgICAgYXJndlswXSA9IHN0cmR1cCgic25tcGQtdHJhcHNlc3MiKTsgLyogYm9ndXMgZW50cnkgZm9yIGdldG9wdCgpICovCiAgICAgZm9yIChhcmduID0gMTsgY3AgJiYgYXJnbiA8IE1BWF9BUkdTOyBhcmduKyspIHsKKyAgICAgICAgY2hhciAgICAgICAgICAgIHRtcFtTUFJJTlRfTUFYX0xFTl07CisKICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCB0bXAsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgYXJndlthcmduXSA9IHN0cmR1cCh0bXApOwogICAgIH0KIAotICAgIHNubXBfcGFyc2VfYXJncyhhcmduLCBhcmd2LCAmc2Vzc2lvbiwgIkM6IiwgdHJhcE9wdFByb2MpOworICAgIG5ldHNubXBfcGFyc2VfYXJncyhhcmduLCBhcmd2LCAmc2Vzc2lvbiwgIkM6IiwgdHJhcE9wdFByb2MsCisgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfUEFSU0VfQVJHU19OT0xPR0dJTkcgfAorICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1BBUlNFX0FSR1NfTk9aRVJPKTsKIAotICAgIHNzID0gc25tcF9hZGQoJnNlc3Npb24sCi0JCSAgbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQoInNubXB0cmFwIiwgc2Vzc2lvbi5wZWVybmFtZSksCi0JCSAgTlVMTCwgTlVMTCk7CisgICAgdHJhbnNwb3J0ID0gbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQoInNubXB0cmFwIiwgc2Vzc2lvbi5wZWVybmFtZSk7CisgICAgaWYgKHRyYW5zcG9ydCA9PSBOVUxMKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoInNubXBkOiBmYWlsZWQgdG8gcGFyc2UgdGhpcyBsaW5lLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgocmMgPSBuZXRzbm1wX3Nlc3NfY29uZmlnX2FuZF9vcGVuX3RyYW5zcG9ydCgmc2Vzc2lvbiwgdHJhbnNwb3J0KSkKKyAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIHNlc3Npb24uc19zbm1wX2Vycm5vID0gcmM7CisgICAgICAgIHNlc3Npb24uc19lcnJubyA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3MgPSBzbm1wX2FkZCgmc2Vzc2lvbiwgdHJhbnNwb3J0LCBOVUxMLCBOVUxMKTsKICAgICBmb3IgKDsgYXJnbiA+IDA7IGFyZ24tLSkgewogICAgICAgICBmcmVlKGFyZ3ZbYXJnbiAtIDFdKTsKICAgICB9CkBAIC0xMjExLDIxICsxMjcwLDE4IEBACiAgICAgaWYgKHNzLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8zICYmCiAgICAgICAgIHRyYXB0eXBlICE9IFNOTVBfTVNHX0lORk9STSAgICYmCiAgICAgICAgIHNzLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApIHsKKyAgICAgICAgICAgIHVfY2hhciAgICAgICAgICB0bXBbU1BSSU5UX01BWF9MRU5dOworCiAgICAgICAgICAgICBsZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKCB0bXAsIHNpemVvZih0bXApKTsKICAgICAgICAgICAgIHNzLT5zZWN1cml0eUVuZ2luZUlEID0gbmV0c25tcF9tZW1kdXAodG1wLCBsZW4pOwogICAgICAgICAgICAgc3MtPnNlY3VyaXR5RW5naW5lSURMZW4gPSBsZW47CiAgICAgfQogCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLSAgICBpZiAoc3MtPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzEpIHsKLSAgICAgICAgYWRkX3RyYXBfc2Vzc2lvbihzcywgU05NUF9NU0dfVFJBUCwgMCwgU05NUF9WRVJTSU9OXzEpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHNzLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8xKQorICAgICAgICB0cmFwdHlwZSA9IFNOTVBfTVNHX1RSQVA7CiAjZW5kaWYKLSAgICAgICAgYWRkX3RyYXBfc2Vzc2lvbihzcywgdHJhcHR5cGUsICh0cmFwdHlwZSA9PSBTTk1QX01TR19JTkZPUk0pLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNzLT52ZXJzaW9uKTsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotICAgIH0KLSNlbmRpZgorICAgIGFkZF90cmFwX3Nlc3Npb24oc3MsIHRyYXB0eXBlLCAodHJhcHR5cGUgPT0gU05NUF9NU0dfSU5GT1JNKSwgc3MtPnZlcnNpb24pOwogfQogCiAjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCmRpZmYgLS1naXQgYS9hZ2VudC9hdXRvX25saXN0LmMgYi9hZ2VudC9hdXRvX25saXN0LmMKaW5kZXggZGZmMWYyYi4uZWNkYWYyNCAxMDA2NDQKLS0tIGEvYWdlbnQvYXV0b19ubGlzdC5jCisrKyBiL2FnZW50L2F1dG9fbmxpc3QuYwpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgKiBhbGxvY2F0ZSBhbiBleHRyYSBieXRlIGZvciBpbmNsdXNpb24gb2YgYSBwcmVjZWRpbmcgJ18nIGxhdGVyIAogICAgICAgICAgKi8KICAgICAgICAgaXQtPm5sWzBdLm5fbmFtZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4oc3RyaW5nKSArIDIpOwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBzdHJjcHkoaXQtPm5sWzBdLm5fbmFtZSwgc3RyaW5nKTsKICAgICAgICAgaXQtPm5sWzBdLm5fbmFtZVtzdHJsZW4oc3RyaW5nKSsxXSA9ICdcMCc7CiAjZWxpZiBkZWZpbmVkKGZyZWVic2Q5KQpAQCAtMTQ5LDcgKzE0OSw2IEBACiBzdGF0aWMgdm9pZAogaW5pdF9ubGlzdChzdHJ1Y3Qgbmxpc3QgbmxbXSkKIHsKLSNpZmRlZiBORVRTTk1QX0NBTl9VU0VfTkxJU1QKICAgICBpbnQgICAgICAgICAgICAgcmV0OwogI2lmIEhBVkVfS1ZNX09QRU5GSUxFUwogICAgIGt2bV90ICAgICAgICAgICprZXJuZWw7CkBAIC0xNzcsNyArMTc2LDcgQEAKICAgICB9CiAgICAga3ZtX2Nsb3NlKGtlcm5lbCk7CiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICEgSEFWRV9LVk1fT1BFTkZJTEVTICovCi0jaWYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpKSAmJiBkZWZpbmVkKEhBVkVfS05MSVNUKQorI2lmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKSAmJiBkZWZpbmVkKEhBVkVfS05MSVNUKQogICAgIGlmIChrbmxpc3QobmwsIDEsIHNpemVvZihzdHJ1Y3Qgbmxpc3QpKSA9PSAtMSkgewogICAgICAgICBERUJVR01TR1RMKCgiYXV0b19ubGlzdDppbml0X25saXN0IiwgImtubGlzdCBmYWlsZWQgb24gc3ltYm9sOiAgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIG5sWzBdLm5fbmFtZSkpOwpAQCAtMjA3LDcgKzIwNiw3IEBACiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qYWl4NCAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhIEhBVkVfS1ZNX09QRU5GSUxFUyAqLwogICAgIGZvciAocmV0ID0gMDsgbmxbcmV0XS5uX25hbWUgIT0gTlVMTDsgcmV0KyspIHsKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgaWYgKG5sW3JldF0ubl90eXBlID09IDAgJiYgbmxbcmV0XS5uX3ZhbHVlICE9IDApCiAgICAgICAgICAgICBubFtyZXRdLm5fdHlwZSA9IDE7CiAjZW5kaWYKQEAgLTIyMiw3ICsyMjEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgbmxbcmV0XS5uX3ZhbHVlKSk7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfQ0FOX1VTRV9OTElTVCAqLwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kIGIvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQKaW5kZXggODNmZTU0ZS4uZDIwZTEyNSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQKKysrIGIvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQKQEAgLTUsNTggKzUsNjcgQEAKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY1LDYgKzc0LDcgQEAKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAyLDYzICsxMTIsNjkgQEAKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjcsNiArMTgzLDcgQEAKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMDQsNjMgKzIyMSw2OCBAQAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2OSw2ICsyOTEsNyBAQAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzA2LDYzICszMjksNjggQEAKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM3MSw2ICszOTksNyBAQAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQwOCw2MyArNDM3LDY4IEBACiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDczLDYgKzUwNyw3IEBACiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNTEwLDYzICs1NDUsNjggQEAKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01NzUsNiArNjE1LDcgQEAKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjEyLDYzICs2NTMsNjggQEAKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjc3LDYgKzcyMyw3IEBACiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzE0LDYzICs3NjEsNjggQEAKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03NzksNiArODMxLDcgQEAKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtODE2LDYyICs4NjksNjggQEAKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODgwLDYgKzkzOSw3IEBACiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTE3LDYzICs5NzcsNjggQEAKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05ODIsNiArMTA0Nyw3IEBACiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAxOSw2NCArMTA4NSw2OSBAQAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA4NSw2ICsxMTU2LDcgQEAKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExMjIsNjMgKzExOTQsNjggQEAKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExODcsNiArMTI2NCw3IEBACiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjI0LDYzICsxMzAyLDY4IEBACiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjg5LDYgKzEzNzIsNyBAQAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTMyNiw2MyArMTQxMCw2OCBAQAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM5MSw2ICsxNDgwLDcgQEAKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0MjgsNjMgKzE1MTgsNjggQEAKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0OTMsNiArMTU4OCw3IEBACiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNTMwLDYzICsxNjI2LDE3NiBAQAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE1OTUsNiArMTgwNCw3IEBACiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE2MzIsNjUgKzE4NDIsNzAgQEAKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX3RvX25leHQuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjk5LDYgKzE5MTQsNyBAQAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE3MzYsMTY2ICsxOTUyLDcwIEBACiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE5MDQsNiArMjAyNCw3IEBACiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE5NDEsNjMgKzIwNjIsMTc2IEBACiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMDA2LDYgKzIyNDAsNyBAQAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjA0Myw2MyArMjI3OCw2OCBAQAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjEwOCw2ICsyMzQ4LDcgQEAKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMTQ1LDYzICsyMzg2LDY4IEBACiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjIxMCw2ICsyNDU2LDcgQEAKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMjQ3LDYzICsyNDk0LDY4IEBACiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjMxMiw2ICsyNTY0LDcgQEAKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjM0OSw2NCArMjYwMiw2OSBAQAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI0MTUsNiArMjY3Myw3IEBACiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNDUyLDYzICsyNzExLDY4IEBACiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNTE3LDYgKzI3ODEsNyBAQAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNTU0LDYzICsyODE5LDY4IEBACiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2MTksNiArMjg4OSw3IEBACiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjY1NiwzICsyOTI3LDQgQEAKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluIGIvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbgppbmRleCBiODNhZjg5Li41MTc4Yjc5IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluCisrKyBiL2FnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4KQEAgLTEsMyArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciBsaWJuZXRzbm1waGVscGVycworIworCiB0b3BfYnVpbGRkaXI9Li4vLi4KIAogIyB1c2UgR05VIHZwYXRoLCBpZiBhdmFpbGFibGUsIHRvIG9ubHkgc2V0IGEgcGF0aCBmb3Igc291cmNlIGFuZCBoZWFkZXJzCkBAIC0xNCwxMzEgKzE4LDIxIEBACiAKIElOU1RBTExMSUJTPWxpYm5ldHNubXBoZWxwZXJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogSU5DTFVERVNVQkRJUj1hZ2VudAotSEVBREVSUz1hbGxfaGVscGVycy5oIFwKLQliYWJ5X3N0ZXBzLmggXAotCWJ1bGtfdG9fbmV4dC5oIFwKLQljYWNoZV9oYW5kbGVyLmggXAotICAgICAgICBkZWJ1Z19oYW5kbGVyLmggXAotCWluc3RhbmNlLmggXAotCW1vZGVfZW5kX2NhbGwuaCBcCi0gICAgICAgIG11bHRpcGxleGVyLmggXAotICAgICAgICBudWxsLmggXAotICAgICAgICBvbGRfYXBpLmggXAotICAgICAgICByZWFkX29ubHkuaCBcCi0gICAgICAgIHJvd19tZXJnZS5oIFwKLQlzY2FsYXIuaCBcCi0Jc2NhbGFyX2dyb3VwLmggXAotICAgICAgICBzZXJpYWxpemUuaCBcCi0Jc3Rhc2hfY2FjaGUuaCBcCi0Jc3Rhc2hfdG9fbmV4dC5oIFwKLSAgICAgICAgdGFibGUuaCBcCi0JdGFibGVfYXJyYXkuaCBcCi0JdGFibGVfY29udGFpbmVyLmggXAotICAgICAgICB0YWJsZV9kYXRhLmggXAotICAgICAgICB0YWJsZV9kYXRhc2V0LmggXAotICAgICAgICB0YWJsZV9pdGVyYXRvci5oIFwKLSAgICAgICAgdGFibGVfdGRhdGEuaCBcCi0Jd2F0Y2hlci5oCi0KLSMgTm8gaGVhZGVyICd0YWJsZV9yb3cuaCcKLQotSEVBREVSU09OTFk9bWZkLmggc2V0X2hlbHBlci5oCi1JTkNMVURFU1VCRElSSEVBREVSUz0kKEhFQURFUlMpICQoSEVBREVSU09OTFkpCiAKICMKICMgQnVpbGQgaW5mbwogIwotTkVUU05NUExJQiAgICAgID0gLi4vLi4vc25tcGxpYi9saWJuZXRzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogSEVMUEVSTElCICAgICAgID0gbGlibmV0c25tcGhlbHBlcnMuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCi1BR0VOVExJQiAgICAgICAgPSAuLi9saWJuZXRzbm1wYWdlbnQuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCi1NSUJMSUIgICAgICAgICAgPSAuLi9saWJuZXRzbm1wbWlicy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKICMgLUkuIC1JLi4gLUkuLi8uLgogQ1BQRkxBR1M9ICQoVE9QX0lOQ0xVREVTKSAtSS4gJChBR0VOVF9JTkNMVURFUykgJChNSUJHUk9VUF9JTkNMVURFUykgXAogCSQoU05NUExJQl9JTkNMVURFUykgQENQUEZMQUdTQAogCi1TUkNTID0gIGFsbF9oZWxwZXJzLmMgXAotCWJhYnlfc3RlcHMuYyBcCi0JYnVsa190b19uZXh0LmMgXAotCWNhY2hlX2hhbmRsZXIuYyBcCi0JZGVidWdfaGFuZGxlci5jIFwKLQlpbnN0YW5jZS5jIFwKLQltb2RlX2VuZF9jYWxsLmMgXAotCW11bHRpcGxleGVyLmMgXAotCW51bGwuYyBcCi0Jb2xkX2FwaS5jIFwKLQlyZWFkX29ubHkuYyBcCi0Jcm93X21lcmdlLmMgXAotCXNjYWxhci5jIFwKLQlzY2FsYXJfZ3JvdXAuYyBcCi0Jc2VyaWFsaXplLmMgXAotCXN0YXNoX2NhY2hlLmMgXAotCXN0YXNoX3RvX25leHQuYyBcCi0JdGFibGUuYyBcCi0JdGFibGVfYXJyYXkuYyBcCi0JdGFibGVfY29udGFpbmVyLmMgXAotCXRhYmxlX2RhdGEuYyBcCi0JdGFibGVfZGF0YXNldC5jIFwKLQl0YWJsZV9pdGVyYXRvci5jIFwKLQl0YWJsZV9yb3cuYyBcCi0JdGFibGVfdGRhdGEuYyBcCi0Jd2F0Y2hlci5jCitPQkpTID0gZHVtbXkubwogCi1PQkpTID0gIGFsbF9oZWxwZXJzLm8gXAotCWJhYnlfc3RlcHMubyBcCi0JYnVsa190b19uZXh0Lm8gXAotCWNhY2hlX2hhbmRsZXIubyBcCi0JZGVidWdfaGFuZGxlci5vIFwKLQlpbnN0YW5jZS5vIFwKLQltb2RlX2VuZF9jYWxsLm8gXAotCW11bHRpcGxleGVyLm8gXAotCW51bGwubyBcCi0Jb2xkX2FwaS5vIFwKLQlyZWFkX29ubHkubyBcCi0Jcm93X21lcmdlLm8gXAotCXNjYWxhci5vIFwKLQlzY2FsYXJfZ3JvdXAubyBcCi0Jc2VyaWFsaXplLm8gXAotCXN0YXNoX2NhY2hlLm8gXAotCXN0YXNoX3RvX25leHQubyBcCi0JdGFibGUubyBcCi0JdGFibGVfYXJyYXkubyBcCi0JdGFibGVfY29udGFpbmVyLm8gXAotCXRhYmxlX2RhdGEubyBcCi0JdGFibGVfZGF0YXNldC5vIFwKLQl0YWJsZV9pdGVyYXRvci5vIFwKLQl0YWJsZV9yb3cubyBcCi0JdGFibGVfdGRhdGEubyBcCi0Jd2F0Y2hlci5vCi0KLUxPQkpTID0gYWxsX2hlbHBlcnMubG8gXAotCWJhYnlfc3RlcHMubG8gXAotCWJ1bGtfdG9fbmV4dC5sbyBcCi0JY2FjaGVfaGFuZGxlci5sbyBcCi0JZGVidWdfaGFuZGxlci5sbyBcCi0JaW5zdGFuY2UubG8gXAotCW1vZGVfZW5kX2NhbGwubG8gXAotCW11bHRpcGxleGVyLmxvIFwKLQludWxsLmxvIFwKLQlvbGRfYXBpLmxvIFwKLQlyZWFkX29ubHkubG8gXAotCXJvd19tZXJnZS5sbyBcCi0Jc2NhbGFyLmxvIFwKLQlzY2FsYXJfZ3JvdXAubG8gXAotCXNlcmlhbGl6ZS5sbyBcCi0Jc3Rhc2hfY2FjaGUubG8gXAotCXN0YXNoX3RvX25leHQubG8gXAotCXRhYmxlLmxvIFwKLQl0YWJsZV9hcnJheS5sbyBcCi0JdGFibGVfY29udGFpbmVyLmxvIFwKLQl0YWJsZV9kYXRhLmxvIFwKLQl0YWJsZV9kYXRhc2V0LmxvIFwKLQl0YWJsZV9pdGVyYXRvci5sbyBcCi0JdGFibGVfcm93LmxvIFwKLQl0YWJsZV90ZGF0YS5sbyBcCi0Jd2F0Y2hlci5sbworTE9CSlMgPSBkdW1teS5sbwogCiBhbGw6IHN0YW5kYXJkYWxsCiAKIGxpYm5ldHNubXBoZWxwZXJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogICAgJChMT0JKUykKLQkkKExJQl9MRF9DTUQpICRAICQoTE9CSlMpICQoQUdFTlRMSUIpICQoTkVUU05NUExJQikgJChMREZMQUdTKSAkKExJQl9MRF9MSUJTKQorCSQoTElCX0xEX0NNRCkgJEAgJChMT0JKUykgQExEX05PX1VOREVGSU5FREAgJChMREZMQUdTKSAkKExJQl9MRF9MSUJTKQogCSQoUkFOTElCKSAkQApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jIGIvYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jCmluZGV4IDAyYmM4YWYuLmUxZTFiNzggMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYworKysgYi9hZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMKQEAgLTIsMTggKzIsMTAgQEAKICAqICBAeyAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpZmRlZiBTVElMTF9UT19ETwotICAgICAgICAvKgotICAgICAgICAgKiBJdCBvdWdodCB0byBiZSBwb3NzaWJsZSB0byBqdXN0ICNpbmNsdWRlIHRoZXNlIGZpbGVzLAotICAgICAgICAgKiAgIGJ1dCB0aGV5IHJlbHkgb24gdmFyaW91cyBvdGhlciB0eXBlcyBiZWluZyBkZWZpbmVkIGZpcnN0LgotICAgICAgICAgKgotICAgICAgICAgKiBJIHJlYWxseSBjYW4ndCBmYWNlIHRyYWNraW5nIGRvd24gdGhlIGRlcGVuZGVuY3kgY2hhaW4KLSAgICAgICAgICogICBqdXN0IGF0IHRoZSBtb21lbnQuCi0gICAgICAgICAqIFNvIHdlJ2xsIGp1c3QgaGF2ZSB0byBsaXZlIHdpdGggdGhlIHdhcm5pbmdzLi4uLgotICAgICAgICAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5Lmg+CkBAIC0yMSwxNSArMTMsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oPgogCi0jZWxzZQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl9oZWxwZXJzLCBsaWJuZXRzbm1wYWdlbnQpCiAKLXZvaWQgIG5ldHNubXBfaW5pdF9kZWJ1Z19oZWxwZXIodm9pZCk7Ci12b2lkICBuZXRzbm1wX2luaXRfc2VyaWFsaXplKHZvaWQpOwotdm9pZCAgbmV0c25tcF9pbml0X3JlYWRfb25seV9oZWxwZXIodm9pZCk7Ci12b2lkICBuZXRzbm1wX2luaXRfYnVsa190b19uZXh0X2hlbHBlcih2b2lkKTsKLXZvaWQgIG5ldHNubXBfaW5pdF90YWJsZV9kYXRhc2V0KHZvaWQpOwotdm9pZCAgbmV0c25tcF9pbml0X3N0YXNoX2NhY2hlX2hlbHBlcih2b2lkKTsKLSNlbmRpZgogCiAvKiogY2FsbCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIGFsbCBoYW5kbGVycyB3aXRoIGluaXRfIHJvdXRpbmVzLiAqLwogdm9pZApAQCAtMzksOCArMjQsMTYgQEAKICAgICBuZXRzbm1wX2luaXRfc2VyaWFsaXplKCk7CiAgICAgbmV0c25tcF9pbml0X3JlYWRfb25seV9oZWxwZXIoKTsKICAgICBuZXRzbm1wX2luaXRfYnVsa190b19uZXh0X2hlbHBlcigpOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFTRVQKICAgICBuZXRzbm1wX2luaXRfdGFibGVfZGF0YXNldCgpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX01FUkdFCisgICAgbmV0c25tcF9pbml0X3Jvd19tZXJnZSgpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX01FUkdFICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICBuZXRzbm1wX2luaXRfc3Rhc2hfY2FjaGVfaGVscGVyKCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLwogfQogCiAvKiogQGRlZmdyb3VwIHV0aWxpdGllcyB1dGlsaXR5X2hhbmRsZXJzCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYyBiL2FnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jCmluZGV4IDY0YmJhODkuLmQ3OWFjYmMgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jCisrKyBiL2FnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jCkBAIC0zLDkgKzMsMTkgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGJhYnlfc3RlcHMsIG1pYl9oZWxwZXJzKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQkFCWV9TVEVQUworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfcmVxdWVzdHNfZXJyb3IpCisjZW5kaWYKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0JBQllfU1RFUFMKKwogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaD4KIAogI2RlZmluZSBCQUJZX1NURVBTX1BFUl9NT0RFX01BWCAgICAgNApAQCAtMTQsNiArMjQsNyBAQAogc3RhdGljIHVfc2hvcnQgZ2V0X21vZGVfbWFwW0JBQllfU1RFUFNfUEVSX01PREVfTUFYXSA9IHsKICAgICBNT0RFX0JTVEVQX1BSRV9SRVFVRVNULCBNT0RFX0JTVEVQX09CSkVDVF9MT09LVVAsIEJTVEVQX1VTRV9PUklHSU5BTCwgTU9ERV9CU1RFUF9QT1NUX1JFUVVFU1QgfTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0YXRpYyB1X3Nob3J0IHNldF9tb2RlX21hcFtTTk1QX01TR19JTlRFUk5BTF9TRVRfTUFYXVtCQUJZX1NURVBTX1BFUl9NT0RFX01BWF0gPSB7CiAgICAgLypSMSovCiAgICAgeyBNT0RFX0JTVEVQX1BSRV9SRVFVRVNULCBNT0RFX0JTVEVQX09CSkVDVF9MT09LVVAsIE1PREVfQlNURVBfUk9XX0NSRUFURSwKQEAgLTMzLDYgKzQ0LDcgQEAKICAgICB7IE1PREVfQlNURVBfVU5ET19DT01NSVQsIE1PREVfQlNURVBfVU5ET19TRVQsIE1PREVfQlNURVBfVU5ET19DTEVBTlVQLAogICAgICAgTU9ERV9CU1RFUF9QT1NUX1JFUVVFU1R9CiB9OworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiBzdGF0aWMgaW50CiBfYmFieV9zdGVwc19oZWxwZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTUxLDYgKzYzLDIwIEBACiAgKiAgQHsKICAqLwogCitzdGF0aWMgbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzICoKK25ldHNubXBfYmFieV9zdGVwc19tb2Rlc19yZWYobmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzICptZCkKK3sKKyAgICBtZC0+cmVmY250Kys7CisgICAgcmV0dXJuIG1kOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzX2RlcmVmKG5ldHNubXBfYmFieV9zdGVwc19tb2RlcyAqbWQpCit7CisgICAgaWYgKC0tbWQtPnJlZmNudCA9PSAwKQorCWZyZWUobWQpOworfQorCiAvKiogcmV0dXJucyBhIGJhYnlfc3RlcHMgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4KICAqICBoYW5kbGVyIGNoYWluLgogICovCkBAIC03MSw3ICs5NywxMCBAQAogICAgICAgICBtaCA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgeworCW1kLT5yZWZjbnQgPSAxOwogICAgICAgICBtaC0+bXl2b2lkID0gbWQ7CisJbWgtPmRhdGFfY2xvbmUgPSAodm9pZCAqKCopKHZvaWQgKikpbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzX3JlZjsKKwltaC0+ZGF0YV9mcmVlID0gKHZvaWQgKCopKHZvaWQgKikpbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzX2RlcmVmOwogICAgICAgICBpZiAoMCA9PSBtb2RlcykKICAgICAgICAgICAgIG1vZGVzID0gQkFCWV9TVEVQX0FMTDsKICAgICAgICAgbWQtPnJlZ2lzdGVyZWQgPSBtb2RlczsKQEAgLTk5LDExICsxMjgsMTIgQEAKICAgICBERUJVR01TR1RMKCgiYmFieV9zdGVwcyIsICJHb3QgcmVxdWVzdCwgbW9kZSAlc1xuIiwKICAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIixyZXFpbmZvLT5tb2RlKSkpOwogCi0gICAgYnNfbW9kZXMgPSBoYW5kbGVyLT5teXZvaWQ7CisgICAgYnNfbW9kZXMgPSAobmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzKiloYW5kbGVyLT5teXZvaWQ7CiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBic19tb2Rlcyk7CiAKICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICAvKgogICAgICAgICAgKiBjbGVhciBjb21wbGV0ZWQgbW9kZXMKQEAgLTEyMSw2ICsxNTEsNyBAQAogICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKICAgICAgICAgbW9kZV9tYXBfcHRyID0gc2V0X21vZGVfbWFwW3JlcWluZm8tPm1vZGVdOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8qCkBAIC0yMjIsNiArMjUzLDcgQEAKICAgICAgICAgaWYgKEJTVEVQX1VTRV9PUklHSU5BTCAhPSBtb2RlX21hcF9wdHJbaV0pIHsKICAgICAgICAgICAgIHVfaW50ICAgIG1vZGVfZmxhZzsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBza2lwIHVuZG8gY29tbWl0IGlmIGNvbW1pdCB3YXNuJ3QgaGl0LCBhbmQKICAgICAgICAgICAgICAqIHVuZG9fY2xlYW51cCBpZiB1bmRvX3NldHVwIHdhc24ndCBoaXQuCkBAIC0yNDAsNiArMjcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgc2tpcHBpbmcgdW5kbyBjbGVhbnVwIChubyB1bmRvIHNldHVwKVxuIikpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgICAgICByZXFpbmZvLT5tb2RlID0gbW9kZV9tYXBfcHRyW2ldOwogICAgICAgICAgICAgbW9kZV9mbGFnID0gbmV0c25tcF9iYWJ5X3N0ZXBfbW9kZTJmbGFnKCBtb2RlX21hcF9wdHJbaV0gKTsKQEAgLTI5Myw3ICszMjYsMTAgQEAKICAgICAgICAgICogaW4gY29tbWl0LCBmcmVlIG9yIHVuZG8uKQogICAgICAgICAgKi8KICAgICAgICAgaWYgKE1PREVfSVNfR0VUKHNhdmVfbW9kZSkKLSAgICAgICAgICAgIHx8IChzYXZlX21vZGUgPCBTTk1QX01TR19JTlRFUk5BTF9TRVRfQ09NTUlUKSkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgICAgIHx8IChzYXZlX21vZGUgPCBTTk1QX01TR19JTlRFUk5BTF9TRVRfQ09NTUlUKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICByYyA9IG5ldHNubXBfY2hlY2tfcmVxdWVzdHNfZXJyb3IocmVxdWVzdHMpOwogICAgICAgICAgICAgaWYocmMpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYmFieV9zdGVwcyIsICIgICBFUlJPUjpyZXF1ZXN0IGVycm9yXG4iKSk7CkBAIC0zMTUsMTIgKzM1MSwxNSBAQAogICogIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZQogICogIHVzZS4KICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2luaXQsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9CQUJZX1NURVBTX0hBTkRMRVJfSU5JVAogdm9pZAogbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfaW5pdCh2b2lkKQogewogICAgIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ieV9uYW1lKCJiYWJ5X3N0ZXBzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQoQkFCWV9TVEVQX0FMTCkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9CQUJZX1NURVBTX0hBTkRMRVJfSU5JVCAqLwogCiAvKiogQH0gKi8KIApAQCAtMzkxLDYgKzQzMCw3IEBACiAgICAgICAgICAgICBtZXRob2QgPSBhY2Nlc3NfbWV0aG9kcy0+Z2V0X3ZhbHVlczsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfQlNURVBfQ0hFQ0tfVkFMVUU6CiAgICAgICAgIGlmKCBhY2Nlc3NfbWV0aG9kcy0+b2JqZWN0X3N5bnRheF9jaGVja3MgKQogICAgICAgICAgICAgbWV0aG9kID0gYWNjZXNzX21ldGhvZHMtPm9iamVjdF9zeW50YXhfY2hlY2tzOwpAQCAtNDQwLDYgKzQ4MCw3IEBACiAgICAgICAgIGlmKCBhY2Nlc3NfbWV0aG9kcy0+dW5kb19jbGVhbnVwICkKICAgICAgICAgICAgIG1ldGhvZCA9IGFjY2Vzc19tZXRob2RzLT51bmRvX2NsZWFudXA7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAKICAgICBjYXNlIE1PREVfQlNURVBfUE9TVF9SRVFVRVNUOgogICAgICAgICBpZiggYWNjZXNzX21ldGhvZHMtPnBvc3RfcmVxdWVzdCApCkBAIC00ODQsNiArNTI1LDcgQEAKICAgICBzd2l0Y2goIG1vZGUgKSB7CiAgICAgICAgIGNhc2UgTU9ERV9CU1RFUF9PQkpFQ1RfTE9PS1VQOgogICAgICAgICAgICAgcmV0dXJuIEJBQllfU1RFUF9PQkpFQ1RfTE9PS1VQOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBNT0RFX0JTVEVQX1NFVF9WQUxVRToKICAgICAgICAgICAgIHJldHVybiBCQUJZX1NURVBfU0VUX1ZBTFVFOwogICAgICAgICBjYXNlIE1PREVfQlNURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDoKQEAgLTUwOCw2ICs1NTAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIEJBQllfU1RFUF9DT01NSVQ7CiAgICAgICAgIGNhc2UgTU9ERV9CU1RFUF9VTkRPX0NPTU1JVDoKICAgICAgICAgICAgIHJldHVybiBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCgidW5rbm93biBmbGFnIik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUxNiwzICs1NTksNyBAQAogfQogLyoqICBAfSAqLwogCisjZWxzZSAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9CQUJZX1NURVBTICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGJhYnlfc3RlcHMpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQkFCWV9TVEVQUyAqLworCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jIGIvYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYwppbmRleCA0ZGQxOTE0Li5lNjA3ZWRhIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jCisrKyBiL2FnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMKQEAgLTEsMTEgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMgYi9hZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYwppbmRleCA1MjBkNDYzLi41MjBhNGNmIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYworKysgYi9hZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYwpAQCAtMSw0ICsxLDE1IEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTEsNiArMjIsMTEgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhY2hlX2hhbmRsZXIsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FjaGVfZmluZF9ieV9vaWQsIGNhY2hlX2hhbmRsZXIpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FjaGVfZ2V0X2hlYWQsIGNhY2hlX2hhbmRsZXIpCisKIHN0YXRpYyBuZXRzbm1wX2NhY2hlICAqY2FjaGVfaGVhZCA9IE5VTEw7CiBzdGF0aWMgaW50ICAgICAgICAgICAgIGNhY2hlX291dHN0YW5kaW5nX3ZhbGlkID0gMDsKIHN0YXRpYyBpbnQgICAgICAgICAgICAgX2NhY2hlX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlICk7CkBAIC02OSw2ICs4NSwxNCBAQAogICogIHRoZSBjYWNoZSB3aGVuIGl0IGV4cGlyZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBrZWVwaW5nIHRoZSBjYWNoZSBmcmVzaCwKICAqICBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGluY29taW5nIHNubXAgcmVxdWVzdHMuCiAgKgorICogIElmIE5FVFNOTVBfQ0FDSEVfUkVTRVRfVElNRVJfT05fVVNFIGlzIHNldCwgdGhlIGV4cGlyeSB0aW1lciB3aWxsIGJlCisgKiAgcmVzZXQgb24gZWFjaCBjYWNoZSBhY2Nlc3MuIEluIHByYWN0aWNlIHRoZSAndGltZW91dCcgYmVjb21lcyBhIHRpbWVyCisgKiAgd2hpY2ggdHJpZ2dlcnMgd2hlbiB0aGUgY2FjaGUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBpcyB1c2VmdWwKKyAqICBpZiB0aGUgY2FjaGUgaXMgYXV0b21hdGljYWxseSBrZXB0IHN5bmNocm9uaXplZDogZS5nLiBieSByZWNlaXZpbmcKKyAqICBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBmcm9tIE5ldGxpbmssIGlub3RpZnkgb3Igc2ltaWxhci4gVGhpcyBzaG91bGQKKyAqICBub3QgYmUgdXNlZCBpZiBjYWNoZSBpcyBub3Qgc3luY2hyb25pemVkIGF1dG9tYXRpY2FsbHkgYXMgaXQgd291bGQKKyAqICByZXN1bHQgaW4gc3RhbGUgY2FjaGUgaW5mb3JtYXRpb24gd2hlbiBpZiBwb2xsaW5nIGhhcHBlbnMgdG9vIGZhc3QuCisgKgogICoKICAqICBIZXJlIGFyZSBzb21lIHN1Z2dlc3Rpb25zIGZvciBzb21lIGNvbW1vbiBzaXR1YXRpb25zLgogICoKQEAgLTEwMCw5ICsxMjQsMjAgQEAKICAqICAgICAgICAgIE5FVFNOTVBfQ0FDSEVfRE9OVF9BVVRPX1JFTEVBU0UKICAqICAgICAgICAgIE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQKICAqCisgKiAgRHluYW1pY2FsbHkgdXBkYXRlZCwgdW5sb2FkZWQgYWZ0ZXIgdGltZW91dDoKKyAqICAgICAgSWYgdGhlIGNhY2hlIGlzIGtlcHQgdXAgdG8gZGF0ZSBkeW5hbWljYWxseSBieSBsaXN0ZW5pbmcgZm9yCisgKiAgICAgIGNoYW5nZSBub3RpZmljYXRpb25zIHNvbWVob3csIGJ1dCBpdCBzaG91bGQgbm90IGJlIGluIG1lbW9yeQorICogICAgICBpZiBpdCdzIG5vdCBuZWVkZWQuIFNldCB0aGUgZm9sbG93aW5nIGZsYWc6CisgKgorICogICAgICAgICAgTkVUU05NUF9DQUNIRV9SRVNFVF9USU1FUl9PTl9VU0UKKyAqCiAgKiAgQHsKICAqLwogCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlICk7CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUNIRV9HRVRfSEVBRAogLyoqIGdldCBjYWNoZSBoZWFkCiAgKiBAaW50ZXJuYWwKICAqIHVuYWR2ZXJ0aXNlZCBmdW5jdGlvbiB0byBnZXQgY2FjaGUgaGVhZC4gWW91IHJlYWxseSBzaG91bGQgbm90CkBAIC0xMTMsMTEgKzE0OCwxMyBAQAogewogICAgIHJldHVybiBjYWNoZV9oZWFkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FDSEVfR0VUX0hFQUQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBQ0hFX0ZJTkRfQllfT0lECiAvKiogZmluZCBleGlzdGluZyBjYWNoZQogICovCiBuZXRzbm1wX2NhY2hlICoKLW5ldHNubXBfY2FjaGVfZmluZF9ieV9vaWQob2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKQorbmV0c25tcF9jYWNoZV9maW5kX2J5X29pZChjb25zdCBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pCiB7CiAgICAgbmV0c25tcF9jYWNoZSAgKmNhY2hlOwogCkBAIC0xMjksMTMgKzE2NiwxNCBAQAogICAgIAogICAgIHJldHVybiBOVUxMOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FDSEVfRklORF9CWV9PSUQgKi8KIAogLyoqIHJldHVybnMgYSBjYWNoZQogICovCiBuZXRzbm1wX2NhY2hlICoKIG5ldHNubXBfY2FjaGVfY3JlYXRlKGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICogbG9hZF9ob29rLAogICAgICAgICAgICAgICAgICAgICAgTmV0c25tcENhY2hlRnJlZSAqIGZyZWVfaG9vaywKLSAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikKIHsKICAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGUgPSBOVUxMOwogCkBAIC0xNzMsNiArMjExLDk1IEBACiAgICAgcmV0dXJuIGNhY2hlOwogfQogCitzdGF0aWMgbmV0c25tcF9jYWNoZSAqCituZXRzbm1wX2NhY2hlX3JlZihuZXRzbm1wX2NhY2hlICpjYWNoZSkKK3sKKyAgICBjYWNoZS0+cmVmY250Kys7CisgICAgcmV0dXJuIGNhY2hlOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9jYWNoZV9kZXJlZihuZXRzbm1wX2NhY2hlICpjYWNoZSkKK3sKKyAgICBpZiAoLS1jYWNoZS0+cmVmY250ID09IDApIHsKKyAgICAgICAgbmV0c25tcF9jYWNoZV9yZW1vdmUoY2FjaGUpOworICAgICAgICBuZXRzbm1wX2NhY2hlX2ZyZWUoY2FjaGUpOworICAgIH0KK30KKworLyoqIGZyZWVzIGEgY2FjaGUKKyAqLworaW50CituZXRzbm1wX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqY2FjaGUpCit7CisgICAgbmV0c25tcF9jYWNoZSAgKnBvczsKKworICAgIGlmIChOVUxMID09IGNhY2hlKQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgZm9yIChwb3MgPSBjYWNoZV9oZWFkOyBwb3M7IHBvcyA9IHBvcy0+bmV4dCkgeworICAgICAgICBpZiAocG9zID09IGNhY2hlKSB7CisgICAgICAgICAgICBzaXplX3QgICAgICAgICAgb3V0X2xlbiA9IDA7CisgICAgICAgICAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiA9IDA7CisgICAgICAgICAgICBjaGFyICAgICAgICAgICAqYnVmID0gTlVMTDsKKworICAgICAgICAgICAgc3ByaW50X3JlYWxsb2Nfb2JqaWQoKHVfY2hhciAqKikgJmJ1ZiwgJmJ1Zl9sZW4sICZvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgcG9zLT5yb290b2lkLCBwb3MtPnJvb3RvaWRfbGVuKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgIm5vdCBmcmVlaW5nIGNhY2hlIHdpdGggcm9vdCBPSUQgJXMgKHN0aWxsIGluIGxpc3QpXG4iLAorICAgICAgICAgICAgICAgICAgICAgYnVmKTsKKyAgICAgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZigwICE9IGNhY2hlLT50aW1lcl9pZCkKKyAgICAgICAgbmV0c25tcF9jYWNoZV90aW1lcl9zdG9wKGNhY2hlKTsKKworICAgIGlmIChjYWNoZS0+dmFsaWQpCisgICAgICAgIF9jYWNoZV9mcmVlKGNhY2hlKTsKKworICAgIGlmIChjYWNoZS0+dGltZXN0YW1wTSkKKwlmcmVlKGNhY2hlLT50aW1lc3RhbXBNKTsKKworICAgIGlmIChjYWNoZS0+cm9vdG9pZCkKKyAgICAgICAgZnJlZShjYWNoZS0+cm9vdG9pZCk7CisKKyAgICBmcmVlKGNhY2hlKTsKKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKy8qKiByZW1vdmVzIGEgY2FjaGUKKyAqLworaW50CituZXRzbm1wX2NhY2hlX3JlbW92ZShuZXRzbm1wX2NhY2hlICpjYWNoZSkKK3sKKyAgICBuZXRzbm1wX2NhY2hlICAqY3VyLCpwcmV2OworCisgICAgaWYgKCFjYWNoZSB8fCAhY2FjaGVfaGVhZCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGNhY2hlID09IGNhY2hlX2hlYWQpIHsKKyAgICAgICAgY2FjaGVfaGVhZCA9IGNhY2hlX2hlYWQtPm5leHQ7CisgICAgICAgIGlmIChjYWNoZV9oZWFkKQorICAgICAgICAgICAgY2FjaGVfaGVhZC0+cHJldiA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHByZXYgPSBjYWNoZV9oZWFkOworICAgIGN1ciA9IGNhY2hlX2hlYWQtPm5leHQ7CisgICAgZm9yICg7IGN1cjsgcHJldiA9IGN1ciwgY3VyID0gY3VyLT5uZXh0KSB7CisgICAgICAgIGlmIChjYWNoZSA9PSBjdXIpIHsKKyAgICAgICAgICAgIHByZXYtPm5leHQgPSBjdXItPm5leHQ7CisgICAgICAgICAgICBpZiAoY3VyLT5uZXh0KQorICAgICAgICAgICAgICAgIGN1ci0+bmV4dC0+cHJldiA9IGN1ci0+cHJldjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwogLyoqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgY2FjaGUgbG9hZCBmdW5jdGlvbiAqLwogc3RhdGljIHZvaWQKIF90aW1lcl9yZWxvYWQodW5zaWduZWQgaW50IHJlZ05vLCB2b2lkICpjbGllbnRhcmdzKQpAQCAtMjE3LDcgKzM0NCw3IEBACiAKICAgICBjYWNoZS0+ZmxhZ3MgJj0gfk5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQ7CiAgICAgREVCVUdNU0dUKCgiY2FjaGVfdGltZXI6c3RhcnQiLAotICAgICAgICAgICAgICAgInN0YXJ0aW5nIHRpbWVyICVkIGZvciBjYWNoZSAlcFxuIiwgY2FjaGUtPnRpbWVyX2lkLCBjYWNoZSkpOworICAgICAgICAgICAgICAgInN0YXJ0aW5nIHRpbWVyICVsdSBmb3IgY2FjaGUgJXBcbiIsIGNhY2hlLT50aW1lcl9pZCwgY2FjaGUpKTsKICAgICByZXR1cm4gY2FjaGUtPnRpbWVyX2lkOwogfQogCkBAIC0yMzQsNyArMzYxLDcgQEAKICAgICB9CiAKICAgICBERUJVR01TR1QoKCJjYWNoZV90aW1lcjpzdG9wIiwKLSAgICAgICAgICAgICAgICJzdG9wcGluZyB0aW1lciAlZCBmb3IgY2FjaGUgJXBcbiIsIGNhY2hlLT50aW1lcl9pZCwgY2FjaGUpKTsKKyAgICAgICAgICAgICAgICJzdG9wcGluZyB0aW1lciAlbHUgZm9yIGNhY2hlICVwXG4iLCBjYWNoZS0+dGltZXJfaWQsIGNhY2hlKSk7CiAKICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoY2FjaGUtPnRpbWVyX2lkKTsKICAgICBjYWNoZS0+ZmxhZ3MgfD0gTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRDsKQEAgLTI3MCwxMiArMzk3LDIzIEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAorLyoqIE1ha2VzIHN1cmUgdGhhdCBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgY2FjaGUgaXMgZnJlZWQgd2hlbiB0aGUgaGFuZGxlcgorICogIGlzIHVucmVnaXN0ZXJlZC4KKyAqLwordm9pZCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKQoreworICAgIG5ldHNubXBfYXNzZXJ0KGhhbmRsZXItPm15dm9pZCk7CisgICAgKChuZXRzbm1wX2NhY2hlICopaGFuZGxlci0+bXl2b2lkKS0+cmVmY250Kys7CisgICAgaGFuZGxlci0+ZGF0YV9jbG9uZSA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2NhY2hlX3JlZjsKKyAgICBoYW5kbGVyLT5kYXRhX2ZyZWUgPSAodm9pZCgqKSh2b2lkKikpbmV0c25tcF9jYWNoZV9kZXJlZjsKK30KKwogLyoqIHJldHVybnMgYSBjYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAgCiAgKi8KIG5ldHNubXBfbWliX2hhbmRsZXIgKgogbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcihpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcENhY2hlRnJlZSAqIGZyZWVfaG9vaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pCiB7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqcmV0ID0gTlVMTDsKICAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGUgPSBOVUxMOwpAQCAtMjg1LDEyICs0MjMsMTUgQEAKICAgICAgICAgY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSh0aW1lb3V0LCBsb2FkX2hvb2ssIGZyZWVfaG9vaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290b2lkLCByb290b2lkX2xlbik7CiAgICAgICAgIHJldC0+bXl2b2lkID0gKHZvaWQgKikgY2FjaGU7CisgICAgICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9vd25zX2NhY2hlKHJldCk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9CiAKIC8qKiBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKSBidXQgYWxzbwogICogaW5qZWN0cyBhIGNhY2hlIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfY2FjaGVfaGFuZGxlcl9yZWdpc3RlcixuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0NBQ0hFX0hBTkRMRVJfUkVHSVNURVIKIGludAogbmV0c25tcF9jYWNoZV9oYW5kbGVyX3JlZ2lzdGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKiByZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUqIGNhY2hlKQpAQCAtMzAxLDkgKzQ0MiwxMiBAQAogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfQ0FDSEVfSEFORExFUl9SRUdJU1RFUiAqLwogCiAvKiogZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKCkgYnV0IGFsc28KICAqIGluamVjdHMgYSBjYWNoZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihuZXRzbm1wX3JlZ2lzdGVyX2NhY2hlX2hhbmRsZXIsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9SRUdJU1RFUl9DQUNIRV9IQU5ETEVSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfY2FjaGVfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICogcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywKQEAgLTMxNywxMSArNDYxLDEyIEBACiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKHJlZ2luZm8pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9SRUdJU1RFUl9DQUNIRV9IQU5ETEVSICovCiAKLU5FVFNOTVBfU1RBVElDX0lOTElORSBjaGFyICoKK3N0YXRpYyBjaGFyICoKIF9idWlsZF9jYWNoZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgY2hhciAqZHVwID0gbWFsbG9jKHN0cmxlbihuYW1lKSArIHN0cmxlbihDQUNIRV9OQU1FKSArIDIpOworICAgIGNoYXIgKmR1cCA9IChjaGFyKiltYWxsb2Moc3RybGVuKG5hbWUpICsgc3RybGVuKENBQ0hFX05BTUUpICsgMik7CiAgICAgaWYgKE5VTEwgPT0gZHVwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzcHJpbnRmKGR1cCwgIiVzOiVzIiwgQ0FDSEVfTkFNRSwgbmFtZSk7CkBAIC0zNTIsMTcgKzQ5NywyMCBAQAogewogICAgIG5ldHNubXBfY2FjaGUgICpyZXN1bHQ7CiAgICAgY2hhciAqY2FjaGVfbmFtZSA9IF9idWlsZF9jYWNoZV9uYW1lKG5hbWUpOwotICAgIHJlc3VsdCA9IG5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBjYWNoZV9uYW1lKTsKKyAgICByZXN1bHQgPSAobmV0c25tcF9jYWNoZSopbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKHJlcWluZm8sIGNhY2hlX25hbWUpOwogICAgIFNOTVBfRlJFRShjYWNoZV9uYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvKiogRXh0cmFjdCB0aGUgY2FjaGUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcmVxdWVzdCAoUERVKSAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfZXh0cmFjdF9jYWNoZV9pbmZvLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfRVhUUkFDVF9DQUNIRV9JTkZPCiBuZXRzbm1wX2NhY2hlICAqCiBuZXRzbm1wX2V4dHJhY3RfY2FjaGVfaW5mbyhuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqIHJlcWluZm8pCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfY2FjaGVfcmVxaW5mb19leHRyYWN0KHJlcWluZm8sIENBQ0hFX05BTUUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9FWFRSQUNUX0NBQ0hFX0lORk8gKi8KIAogCiAvKiogQ2hlY2sgaWYgdGhlIGNhY2hlIHRpbWVvdXQgaGFzIHBhc3NlZC4gU2V0cyBhbmQgcmV0dXJuIHRoZSBleHBpcmVkIGZsYWcuICovCkBAIC0zNzEsMTEgKzUxOSwxMyBAQAogewogICAgIGlmKE5VTEwgPT0gY2FjaGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmKCFjYWNoZS0+dmFsaWQgfHwgKE5VTEwgPT0gY2FjaGUtPnRpbWVzdGFtcCkgfHwgKC0xID09IGNhY2hlLT50aW1lb3V0KSkKKyAgICBpZiAoY2FjaGUtPmV4cGlyZWQpCisgICAgICAgIHJldHVybiAxOworICAgIGlmKCFjYWNoZS0+dmFsaWQgfHwgKE5VTEwgPT0gY2FjaGUtPnRpbWVzdGFtcE0pIHx8ICgtMSA9PSBjYWNoZS0+dGltZW91dCkpCiAgICAgICAgIGNhY2hlLT5leHBpcmVkID0gMTsKICAgICBlbHNlCi0gICAgICAgIGNhY2hlLT5leHBpcmVkID0gYXRpbWVfcmVhZHkoY2FjaGUtPnRpbWVzdGFtcCwgMTAwMCAqIGNhY2hlLT50aW1lb3V0KTsKKyAgICAgICAgY2FjaGUtPmV4cGlyZWQgPSBuZXRzbm1wX3JlYWR5X21vbm90b25pYyhjYWNoZS0+dGltZXN0YW1wTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwICogY2FjaGUtPnRpbWVvdXQpOwogICAgIAogICAgIHJldHVybiBjYWNoZS0+ZXhwaXJlZDsKIH0KQEAgLTQwOSwxMSArNTU5LDE0IEBACiAvKiogSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBhIGdpdmVuIHJlcXVlc3Q/CiAgKiBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkuIG5ldHNubXBfY2FjaGVfaXNfdmFsaWQoKSBpcyBwcmVmZXJyZWQuCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihuZXRzbm1wX2lzX2NhY2hlX3ZhbGlkLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfSVNfQ0FDSEVfVkFMSUQKIGludAogbmV0c25tcF9pc19jYWNoZV92YWxpZChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqIHJlcWluZm8pCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfY2FjaGVfaXNfdmFsaWQocmVxaW5mbywgQ0FDSEVfTkFNRSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0lTX0NBQ0hFX1ZBTElEICovCiAKIC8qKiBJbXBsZW1lbnRzIHRoZSBjYWNoZSBoYW5kbGVyICovCiBpbnQKQEAgLTQ0Myw3ICs1OTYsNyBAQAogICAgICAgICAgICAgICAgICAgICJjYWNoZSBub3QgZm91bmQsIGRpc2FibGVkIG9yIGhhZCBubyBsb2FkIG1ldGhvZFxuIikpOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICB9Ci0gICAgc25wcmludGYoYWRkcnN0cixzaXplb2YoYWRkcnN0ciksICIlcCIsIGNhY2hlKTsKKyAgICBzbnByaW50ZihhZGRyc3RyLHNpemVvZihhZGRyc3RyKSwgIiVsZCIsIChsb25nIGludCljYWNoZSk7CiAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpjYWNoZV9oYW5kbGVyIiwgInVzaW5nIGNhY2hlICVzOiAiLCBhZGRyc3RyKSk7CiAgICAgREVCVUdNU0dPSUQoKCJoZWxwZXI6Y2FjaGVfaGFuZGxlciIsIGNhY2hlLT5yb290b2lkLCBjYWNoZS0+cm9vdG9pZF9sZW4pKTsKICAgICBERUJVR01TRygoImhlbHBlcjpjYWNoZV9oYW5kbGVyIiwgIlxuIikpOwpAQCAtNDYzLDcgKzYxNiw5IEBACiAgICAgY2FzZSBNT0RFX0dFVDoKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOiB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIG9ubHkgdG91Y2ggY2FjaGUgb25jZSBwZXIgcGR1IHJlcXVlc3QsIHRvIHByZXZlbnQgYSBjYWNoZQpAQCAtNDc0LDcgKzYyOSw3IEBACiAgICAgICAgICAqIG1heWJlIHVzZSBhIHJlZmVyZW5jZSBjb3VudGVyPwogICAgICAgICAgKi8KICAgICAgICAgaWYgKG5ldHNubXBfY2FjaGVfaXNfdmFsaWQocmVxaW5mbywgYWRkcnN0cikpCi0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNhbGwgdGhlIGxvYWQgaG9vaywgYW5kIHVwZGF0ZSB0aGUgY2FjaGUgdGltZXN0YW1wLgpAQCAtNDgzLDE2ICs2MzgsMTYgQEAKICAgICAgICAgbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkKGNhY2hlKTsKICAgICAgICAgbmV0c25tcF9jYWNoZV9yZXFpbmZvX2luc2VydChjYWNoZSwgcmVxaW5mbywgYWRkcnN0cik7CiAgICAgICAgIC8qKiBuZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJyAqLwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgIG5ldHNubXBfYXNzZXJ0KG5ldHNubXBfY2FjaGVfaXNfdmFsaWQocmVxaW5mbywgYWRkcnN0cikpOwogICAgICAgICAvKiogbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgKi8KLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIEEgKHN1Y2Nlc3NmdWwpIFNFVCByZXF1ZXN0IHdvdWxkbid0IHR5cGljYWxseSB0cmlnZ2VyIGEgcmVsb2FkIG9mCkBAIC01MDYsNyArNjYxLDggQEAKICAgICAgICAgICAgIGNhY2hlLT52YWxpZCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgLyoqIG5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnICovCi0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiY2FjaGVfaGFuZGxlcjogVW5yZWNvZ25pc2VkIG1vZGUgKCVkKVxuIiwKQEAgLTUxNCw4ICs2NzAsOSBAQAogICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9FUlJfR0VORVJSKTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICB9Ci0gICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7Ci0gICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsgICAgIC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworICAgIGlmIChjYWNoZS0+ZmxhZ3MgJiBORVRTTk1QX0NBQ0hFX1JFU0VUX1RJTUVSX09OX1VTRSkKKyAgICAgICAgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigmY2FjaGUtPnRpbWVzdGFtcE0pOworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTU5LDEwICs3MTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHJlbGVhc2VfY2FjaGVkX3Jlc291cmNlcywgTlVMTCk7CiAgICAgICAgIGNhY2hlX291dHN0YW5kaW5nX3ZhbGlkID0gMTsKICAgICB9Ci0gICAgaWYgKGNhY2hlLT50aW1lc3RhbXApCi0gICAgICAgIGF0aW1lX3NldE1hcmtlcihjYWNoZS0+dGltZXN0YW1wKTsKLSAgICBlbHNlCi0gICAgICAgIGNhY2hlLT50aW1lc3RhbXAgPSBhdGltZV9uZXdNYXJrZXIoKTsKKyAgICBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKCZjYWNoZS0+dGltZXN0YW1wTSk7CiAgICAgREVCVUdNU0dUKCgiaGVscGVyOmNhY2hlX2hhbmRsZXIiLCAiIGxvYWRlZCAoJWQpXG4iLCBjYWNoZS0+dGltZW91dCkpOwogCiAgICAgcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jIGIvYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMKaW5kZXggNGUzNTY5NS4uZTRhODQzOCAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMKKysrIGIvYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMKQEAgLTksMTMgKzksNiBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNTMsOCArNDYsMTQgQEAKICAgICByZXR1cm4gbmV0c25tcF9jcmVhdGVfaGFuZGxlcigiZGVidWciLCBuZXRzbm1wX2RlYnVnX2hlbHBlcik7CiB9CiAKKyNpZmRlZiBORVRTTk1QX05PX0RFQlVHR0lORworCisjZGVmaW5lIGRlYnVnX3ByaW50X3JlcXVlc3RzKHgpCisKKyNlbHNlIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HICovCisKIC8qKiBAaW50ZXJuYWwgZGVidWcgcHJpbnQgdmFyaWFibGVzIGluIGEgY2hhaW4gKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBkZWJ1Z19wcmludF9yZXF1ZXN0cyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CkBAIC04Miw2ICs4MSw3IEBACiAgICAgfQogfQogCisjZW5kaWYgLyogTkVUU05NUF9OT19ERUJVR0dJTkcgKi8KIAogLyoqIEBpbnRlcm5hbCBJbXBsZW1lbnRzIHRoZSBkZWJ1ZyBoYW5kbGVyICovCiBpbnQKQEAgLTkwLDYwICs5MCw2NyBAQAogICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CisgICAgaW50IHJldDsKIAotICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhwdHI7Ci0gICAgaW50ICAgICAgICAgICAgIGksIHJldCwgY291bnQ7Ci0gICAgY2hhciAgICAgICAgICAgKmNwOworICAgIERFQlVHSUYoImhlbHBlcjpkZWJ1ZyIpIHsKKyAgICAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaHB0cjsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAqY3A7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgIGksIGNvdW50OwogCi0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICJFbnRlcmluZyBEZWJ1Z2dpbmcgSGVscGVyOlxuIikpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICBIYW5kbGVyIFJlZ2lzdHJhdGlvbiBJbmZvOlxuIikpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE5hbWU6ICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgICByZWdpbmZvLT5oYW5kbGVyTmFtZSkpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIENvbnRleHQ6ICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgICBTTk1QX1NUUk9STlVMTChyZWdpbmZvLT5jb250ZXh0TmFtZSkpKTsKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBCYXNlIE9JRDogICAgIikpOwotICAgIERFQlVHTVNHT0lEKCgiaGVscGVyOmRlYnVnIiwgcmVnaW5mby0+cm9vdG9pZCwgcmVnaW5mby0+cm9vdG9pZF9sZW4pKTsKLSAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICJFbnRlcmluZyBEZWJ1Z2dpbmcgSGVscGVyOlxuIikpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgSGFuZGxlciBSZWdpc3RyYXRpb24gSW5mbzpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgTmFtZTogICAgICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICByZWdpbmZvLT5oYW5kbGVyTmFtZSkpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBDb250ZXh0OiAgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIFNOTVBfU1RST1JOVUxMKHJlZ2luZm8tPmNvbnRleHROYW1lKSkpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBCYXNlIE9JRDogICAgIikpOworICAgICAgICBERUJVR01TR09JRCgoImhlbHBlcjpkZWJ1ZyIsIHJlZ2luZm8tPnJvb3RvaWQsIHJlZ2luZm8tPnJvb3RvaWRfbGVuKSk7CisgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOmRlYnVnIiwgIlxuIikpOwogCi0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgTW9kZXM6ICAgICAgIDB4JXggPSAiLAotICAgICAgICAgICAgICAgIHJlZ2luZm8tPm1vZGVzKSk7Ci0gICAgZm9yIChjb3VudCA9IDAsIGkgPSByZWdpbmZvLT5tb2RlczsgaTsgaSA9IGkgPj4gMSwgY291bnQrKykgewotICAgICAgICBpZiAoaSAmIDB4MDEpIHsKLSAgICAgICAgICAgIGNwID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiaGFuZGxlcl9jYW5fbW9kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxIDw8IGNvdW50KTsKLSAgICAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOmRlYnVnIiwgIiVzIHwgIiwgU05NUF9TVFJPUk5VTEwoY3ApKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE1vZGVzOiAgICAgICAweCV4ID0gIiwKKyAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+bW9kZXMpKTsKKyAgICAgICAgZm9yIChjb3VudCA9IDAsIGkgPSByZWdpbmZvLT5tb2RlczsgaTsgaSA9IGkgPj4gMSwgY291bnQrKykgeworICAgICAgICAgICAgaWYgKGkgJiAweDAxKSB7CisgICAgICAgICAgICAgICAgY3AgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJoYW5kbGVyX2Nhbl9tb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSA8PCBjb3VudCk7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiJXMgfCAiLCBTTk1QX1NUUk9STlVMTChjcCkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKKworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBQcmlvcml0eTogICAgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPnByaW9yaXR5KSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgIEhhbmRsZXIgQ2FsbGluZyBDaGFpbjpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAiKSk7CisgICAgICAgIGZvciAoaHB0ciA9IHJlZ2luZm8tPmhhbmRsZXI7IGhwdHI7IGhwdHIgPSBocHRyLT5uZXh0KSB7CisgICAgICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICIgLT4gJXMiLCBocHRyLT5oYW5kbGVyX25hbWUpKTsKKyAgICAgICAgICAgIGlmIChocHRyLT5teXZvaWQpCisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiIFtteXZvaWQgPSAlcF0iLCBocHRyLT5teXZvaWQpKTsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKKworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgUmVxdWVzdCBpbmZvcm1hdGlvbjpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgTW9kZTogICAgICAgICVzICglZCA9IDB4JXgpXG4iLAorICAgICAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSksCisgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUsIHJlcWluZm8tPm1vZGUpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUmVxdWVzdCBWYXJpYWJsZXM6XG4iKSk7CisgICAgICAgIGRlYnVnX3ByaW50X3JlcXVlc3RzKHJlcXVlc3RzKTsKKworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgLS0tIGNhbGxpbmcgbmV4dCBoYW5kbGVyIC0tLSBcbiIpKTsKICAgICB9Ci0gICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiXG4iKSk7CiAKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBQcmlvcml0eTogICAgJWRcbiIsCi0gICAgICAgICAgICAgICAgcmVnaW5mby0+cHJpb3JpdHkpKTsKLQotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICBIYW5kbGVyIENhbGxpbmcgQ2hhaW46XG4iKSk7Ci0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAiKSk7Ci0gICAgZm9yIChocHRyID0gcmVnaW5mby0+aGFuZGxlcjsgaHB0cjsgaHB0ciA9IGhwdHItPm5leHQpIHsKLSAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiIC0+ICVzIiwgaHB0ci0+aGFuZGxlcl9uYW1lKSk7Ci0gICAgICAgIGlmIChocHRyLT5teXZvaWQpCi0gICAgICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICIgW215dm9pZCA9ICV4XSIsIGhwdHItPm15dm9pZCkpOwotICAgIH0KLSAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKLQotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICBSZXF1ZXN0IGluZm9ybWF0aW9uOlxuIikpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE1vZGU6ICAgICAgICAlcyAoJWQgPSAweCV4KVxuIiwKLSAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSksCi0gICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSwgcmVxaW5mby0+bW9kZSkpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIFJlcXVlc3QgVmFyaWFibGVzOlxuIikpOwotICAgIGRlYnVnX3ByaW50X3JlcXVlc3RzKHJlcXVlc3RzKTsKLQotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAtLS0gY2FsbGluZyBuZXh0IGhhbmRsZXIgLS0tIFxuIikpOwogICAgIHJldCA9IG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywgcmVxdWVzdHMpOwogCi0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgIFJlc3VsdHM6XG4iKSk7Ci0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUmV0dXJuZWQgY29kZTogJWRcbiIsIHJldCkpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIFJldHVybmVkIFZhcmlhYmxlczpcbiIpKTsKLSAgICBkZWJ1Z19wcmludF9yZXF1ZXN0cyhyZXF1ZXN0cyk7CisgICAgREVCVUdJRigiaGVscGVyOmRlYnVnIikgeworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgUmVzdWx0czpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUmV0dXJuZWQgY29kZTogJWRcbiIsIHJldCkpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBSZXR1cm5lZCBWYXJpYWJsZXM6XG4iKSk7CisgICAgICAgIGRlYnVnX3ByaW50X3JlcXVlc3RzKHJlcXVlc3RzKTsKIAotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiRXhpdGluZyBEZWJ1Z2dpbmcgSGVscGVyOlxuIikpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIkV4aXRpbmcgRGVidWdnaW5nIEhlbHBlcjpcbiIpKTsKKyAgICB9CisKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xNTcsNCArMTY0LDMgQEAKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfYnlfbmFtZSgiZGVidWciLCBuZXRzbm1wX2dldF9kZWJ1Z19oYW5kbGVyKCkpOwogfQogLyoqICBAfSAqLwotCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2R1bW15LmMgYi9hZ2VudC9oZWxwZXJzL2R1bW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3OWFlNAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L2hlbHBlcnMvZHVtbXkuYwpAQCAtMCwwICsxIEBACitjaGFyIGNvbnN0IG5ldHNubXBfaGVscGVyc19kdW1teV90ZXh0W10gPSAiZHVtbXkgc3ltYm9sIHRvIG1ha2Ugc3VyZSB0aGF0IGxpbmtpbmcgbmV0c25tcGhlbHBlcnMgZG9lcyBub3QgZmFpbCBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgZW1wdHkgbGlicmFyaWVzLiI7CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMgYi9hZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMKaW5kZXggNWM5ZTE2ZC4uYTVlZTg0MSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jCisrKyBiL2FnZW50L2hlbHBlcnMvaW5zdGFuY2UuYwpAQCAtOSw2ICs5LDEyIEBACiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg+CiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpZiBIQVZFX1NUUklOR19ICkBAIC0xOCwxNiArMjQsMTcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaD4KIAorbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoaW5zdGFuY2UpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5zdGFuY2UsIG1pYl9oZWxwZXJzKQorCiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX251bV9maWxlX2luc3RhbmNlX3MgeworICAgIGludCAgIHJlZmNudDsKICAgICBjaGFyICpmaWxlX25hbWU7CiAgICAgRklMRSAqZmlsZXA7Ci0gICAgaW50ICAgdHlwZTsKKyAgICB1X2NoYXIgdHlwZTsKICAgICBpbnQgICBmbGFnczsKIH0gbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZTsKIApAQCAtMzcsNiArNDQsMjIgQEAKICAqICBAewogICovCiAKK3N0YXRpYyBuZXRzbm1wX251bV9maWxlX2luc3RhbmNlICoKK25ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2VfcmVmKG5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2UgKm5maSkKK3sKKyAgICBuZmktPnJlZmNudCsrOworICAgIHJldHVybiBuZmk7Cit9CisKK3N0YXRpYyB2b2lkCituZXRzbm1wX251bV9maWxlX2luc3RhbmNlX2RlcmVmKG5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2UgKm5maSkKK3sKKyAgICBpZiAoLS1uZmktPnJlZmNudCA9PSAwKSB7CisJZnJlZShuZmktPmZpbGVfbmFtZSk7CisJZnJlZShuZmkpOworICAgIH0KK30KKwogLyoqCiAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIGhlbHBlciBoYW5kbGVyLCBjYWxscyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyLCB3aGljaAogICogdGhlbiBjb3VsZCBiZSByZWdpc3RlcmVkLCB1c2luZyBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKS4KQEAgLTEwOCw4ICsxMzEsOCBAQAogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqCiBnZXRfcmVnKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgIGNvbnN0IGNoYXIgKm91cm5hbWUsCi0gICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKLSAgICAgICAgdm9pZCAqaXQsCisgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZSAqaXQsCiAgICAgICAgIGludCBtb2RlcywKICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzY2FsYXJoLCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQpAQCAtMTI0LDcgKzE0Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzKTsKICAgICAgICAgbXloYW5kbGVyID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcihvdXJuYW1lLCBzY2FsYXJoKTsKLSAgICAgICAgbXloYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKSBpdDsKKyAgICAgICAgbXloYW5kbGVyLT5teXZvaWQgPSBpdDsKKwlteWhhbmRsZXItPmRhdGFfY2xvbmUgPSAodm9pZCooKikodm9pZCopKW5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2VfcmVmOworCW15aGFuZGxlci0+ZGF0YV9mcmVlID0gKHZvaWQoKikodm9pZCopKW5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2VfZGVyZWY7CiAgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIobXlyZWcsIG15aGFuZGxlcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbXlyZWcgPQpAQCAtMTMyLDcgKzE1NywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZXMpOwotICAgICAgICBteXJlZy0+aGFuZGxlci0+bXl2b2lkID0gKHZvaWQgKikgaXQ7CisgICAgICAgIG15cmVnLT5oYW5kbGVyLT5teXZvaWQgPSBpdDsKKwlteXJlZy0+aGFuZGxlci0+ZGF0YV9jbG9uZQorCSAgICA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX251bV9maWxlX2luc3RhbmNlX3JlZjsKKwlteXJlZy0+aGFuZGxlci0+ZGF0YV9mcmVlCisJICAgID0gKHZvaWQgKCopKHZvaWQgKikpbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZV9kZXJlZjsKICAgICB9CiAgICAgaWYgKGNvbnRleHROYW1lKQogICAgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOwpAQCAtMTQwLDI1NSArMTY5LDMxOCBAQAogfQogCiAvKiBXYXRjaGVkICdsb25nJyBpbnN0YW5jZXMgYXJlIHdyaXRhYmxlIG9uIGJvdGggMzItYml0IGFuZCA2NC1iaXQgc3lzdGVtcyAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfdWxvbmdfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX1VMT05HX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1bG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YodV9sb25nKSwKKyAgICAgICAgICAgICAgICAgICBBU05fVU5TSUdORUQsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX1VMT05HX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1bG9uZ19pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTE9OR19JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1bG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JXUklURSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVfbG9uZyksCisgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VMT05HX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9DT1VOVEVSMzJfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAiY291bnRlcjMyX2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCBuZXRzbm1wX2luc3RhbmNlX2NvdW50ZXIzMl9oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YodV9sb25nKSwKKyAgICAgICAgICAgICAgICAgICBBU05fQ09VTlRFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfQ09VTlRFUjMyX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfbG9uZ19pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfTE9OR19JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJsb25nX2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCBuZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKGxvbmcpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfTE9OR19JTlNUQU5DRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9uZ19pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT05HX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAibG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShteXJlZyk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUldSSVRFKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YobG9uZyksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPTkdfSU5TVEFOQ0UgKi8KIAogLyogV2F0Y2hlZCAnaW50JyBpbnN0YW5jZXMgYXJlIG9ubHkgd3JpdGFibGUgb24gMzItYml0IHN5c3RlbXMgICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9vbmx5X3VpbnRfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX1VJTlRfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICppdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1aW50X2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCBuZXRzbm1wX2luc3RhbmNlX3VpbnRfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVuc2lnbmVkIGludCksCisgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9VSU5UX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1aW50X2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VJTlRfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl91aW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgInVpbnRfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCBuZXRzbm1wX2luc3RhbmNlX3VpbnRfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JXUklURSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVuc2lnbmVkIGludCksCisgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VJTlRfSU5TVEFOQ0UgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlYWRfb25seV9pbnRfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0lOVF9JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAiaW50X2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCBuZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoaW50KSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0lOVF9JTlNUQU5DRSAqLwogCiAgIC8qCiAgICAqIENvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIChpbmNvbnNpc3RlbnRseSBuYW1lZCkgcm91dGluZQogICAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9JTlRfSU5TVEFOQ0UKIGludAogcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewogICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlKG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgc3ViaGFuZGxlcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfSU5UX0lOU1RBTkNFICovCiAKIC8qCiAgKiBDb250ZXh0IHJlZ2lzdHJhdGlvbnMKICAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlX2NvbnRleHQsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUkVBRF9PTkxZX1VMT05HX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1bG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZyA9CisgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChteXJlZyAmJiBjb250ZXh0TmFtZSkKKyAgICAgIG15cmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgIG15cmVnLCBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YodV9sb25nKSwgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9VTE9OR19JTlNUQU5DRV9DT05URVhUICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl91bG9uZ19pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1VMT05HX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgInVsb25nX2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSwgbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworICAgIGlmIChteXJlZyAmJiBjb250ZXh0TmFtZSkKKyAgICAgIG15cmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgIG15cmVnLCBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YodV9sb25nKSwgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1VMT05HX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2VfY29udGV4dCxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfQ09VTlRFUjMyX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImNvdW50ZXIzMl9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9jb3VudGVyMzJfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgY29udGV4dE5hbWUpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZShteXJlZyk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWcgPQorICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAobXlyZWcgJiYgY29udGV4dE5hbWUpCisgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICBteXJlZywgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVfbG9uZyksIEFTTl9DT1VOVEVSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9DT1VOVEVSMzJfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2VfY29udGV4dCxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfTE9OR19JTlNUQU5DRV9DT05URVhUCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3ViaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAibG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIGNvbnRleHROYW1lKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKG15cmVnICYmIGNvbnRleHROYW1lKQorICAgICAgbXlyZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgbXlyZWcsIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZihsb25nKSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUkVBRF9PTkxZX0xPTkdfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfbG9uZ19pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX0xPTkdfSU5TVEFOQ0VfQ09OVEVYVAogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAibG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworICAgIGlmIChteXJlZyAmJiBjb250ZXh0TmFtZSkKKyAgICAgIG15cmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgIG15cmVnLCBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YobG9uZyksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX0xPTkdfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfaW50X2luc3RhbmNlX2NvbnRleHQsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfSU5UX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImludF9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIGNvbnRleHROYW1lKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShteXJlZyk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWcgPQorICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JXUklURSk7CisgICAgaWYgKG15cmVnICYmIGNvbnRleHROYW1lKQorICAgICAgbXlyZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgbXlyZWcsIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZihpbnQpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9JTlRfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9JTlRfSU5TVEFOQ0VfQ09OVEVYVAogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImludF9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9pbnRfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgY29udGV4dE5hbWUpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZShteXJlZyk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWcgPQorICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAobXlyZWcgJiYgY29udGV4dE5hbWUpCisgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICBteXJlZywgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKGludCksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9JTlRfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCiAvKgogICogQ29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgKGluY29uc2lzdGVudGx5IG5hbWVkKSByb3V0aW5lCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfaW50X2luc3RhbmNlX2NvbnRleHQsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0lOVF9JTlNUQU5DRV9DT05URVhUCiBpbnQKIHJlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCkBAIC0zOTgsNyArNDkwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfSU5UX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX05VTV9GSUxFX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbnVtX2ZpbGVfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLApAQCAtNDIzLDExICs1MTgsMTIgQEAKICAgICAgICAgcmV0dXJuIE1JQl9SRUdJU1RSQVRJT05fRkFJTEVEOwogICAgIH0KIAorICAgIG5maS0+cmVmY250ID0gMTsKICAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImZpbGVfbnVtX2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgbmZpLAogICAgICAgICAgICAgICAgICAgICBtb2RlLCBuZXRzbm1wX2luc3RhbmNlX251bV9maWxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIGNvbnRleHROYW1lKTsKICAgICBpZiAoTlVMTCA9PSBteXJlZykgewotICAgICAgICBmcmVlKG5maSk7IC8qIFNOTVBfRlJFRSBvdmVya2lsbCBvbiBsb2NhbCB2YXIgKi8KKyAgICAgICAgbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZV9kZXJlZihuZmkpOwogICAgICAgICByZXR1cm4gTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQ7CiAgICAgfQogCkBAIC00MzgsNyArNTM0LDEwIEBACiAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShteXJlZyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9OVU1fRklMRV9JTlNUQU5DRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfaW50X2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX0lOVF9JTlNUQU5DRQogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbiBpbnQgaGVscGVyIGhhbmRsZXIgdG8gYSBzcGVjaWZpZWQgT0lELgogICoKQEAgLTQ1OSwyODQgKzU1OCwyNSBAQAogICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImludF9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIE5VTEwpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpLAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZihpbnQpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9JTlRfSU5TVEFOQ0UgKi8KIAotaW50Ci1uZXRzbm1wX2luc3RhbmNlX3Vsb25nX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKKyNpZmRlZiBIQVZFX0RNQUxMT0NfSAorc3RhdGljIHZvaWQgZnJlZV93cmFwcGVyKHZvaWQgKiBwKQogewotCi0gICAgdV9sb25nICAgICAgICAgKml0ID0gKHVfbG9uZyAqKSBoYW5kbGVyLT5teXZvaWQ7Ci0gICAgdV9sb25nICAgICAgICAgKml0X3NhdmU7Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyIiwgIkdvdCByZXF1ZXN0OiAgJWRcbiIsCi0gICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSkpOwotCi0gICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGRhdGEgcmVxdWVzdHMgCi0gICAgICAgICAqLwotICAgIGNhc2UgTU9ERV9HRVQ6Ci0gICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fVU5TSUdORUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGl0LCBzaXplb2YoKml0KSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNFVCByZXF1ZXN0cy4gIFNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHJlZ2lzdGVyZWQgUldSSVRFIAotICAgICAgICAgKi8KLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgotICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSAhPSBBU05fVU5TSUdORUQpCi0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9XUk9OR1RZUEUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyIAotICAgICAgICAgKi8KLSAgICAgICAgaXRfc2F2ZSA9IG5ldHNubXBfbWVtZHVwKGl0LCBzaXplb2YodV9sb25nKSk7Ci0gICAgICAgIGlmIChpdF9zYXZlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5TVEFOQ0VfSEFORExFUl9OQU1FLCBpdF9zYXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiB1cGRhdGUgY3VycmVudCAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIHVfbG9uZyAlbHUgLT4gJWx1XG4iLCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpKSk7Ci0gICAgICAgICppdCA9ICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKLSAgICAgICAgKml0ID0KLSAgICAgICAgICAgICooKHVfbG9uZyAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQU5DRV9IQU5ETEVSX05BTUUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKLSAgICBjYXNlIE1PREVfU0VUX0ZSRUU6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG5vdGhpbmcgdG8gZG8gCi0gICAgICAgICAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQotICAgICAgICByZXR1cm4gbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihoYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7Ci0KLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICBmcmVlKHApOwogfQotCi1pbnQKLW5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKLXsKLQotICAgIHVfbG9uZyAgICAgICAgICppdCA9ICh1X2xvbmcgKikgaGFuZGxlci0+bXl2b2lkOwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXIiLAotICAgICAgICAgICAgICAgICJHb3QgcmVxdWVzdDogICVkXG4iLCByZXFpbmZvLT5tb2RlKSk7Ci0KLSAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogZGF0YSByZXF1ZXN0cyAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX0dFVDoKLSAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBpdCwgc2l6ZW9mKCppdCkpOwotICAgICAgICBicmVhazsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKLSAgICAgICAgICovCi0gICAgZGVmYXVsdDoKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKLSAgICAgICAgICAgICAgICAgIm5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXI6IGlsbGVnYWwgbW9kZVxuIik7Ci0gICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotICAgIH0KLSAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQotICAgICAgICByZXR1cm4gbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihoYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7Ci0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Ci0KLWludAotbmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKLXsKLQotICAgIGxvbmcgICAgICAgICAgICppdCA9IChsb25nICopIGhhbmRsZXItPm15dm9pZDsKLSAgICBsb25nICAgICAgICAgICAqaXRfc2F2ZTsKLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlciIsICJHb3QgcmVxdWVzdDogICVkXG4iLAotICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpKTsKLQotICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewotICAgICAgICAvKgotICAgICAgICAgKiBkYXRhIHJlcXVlc3RzIAotICAgICAgICAgKi8KLSAgICBjYXNlIE1PREVfR0VUOgotICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGl0LCBzaXplb2YoKml0KSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNFVCByZXF1ZXN0cy4gIFNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHJlZ2lzdGVyZWQgUldSSVRFIAotICAgICAgICAgKi8KLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgotICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSAhPSBBU05fSU5URUdFUikKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1dST05HVFlQRSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKLSAgICAgICAgLyoKLSAgICAgICAgICogc3RvcmUgb2xkIGluZm8gZm9yIHVuZG8gbGF0ZXIgCi0gICAgICAgICAqLwotICAgICAgICBpdF9zYXZlID0gbmV0c25tcF9tZW1kdXAoaXQsIHNpemVvZihsb25nKSk7Ci0gICAgICAgIGlmIChpdF9zYXZlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5TVEFOQ0VfSEFORExFUl9OQU1FLCBpdF9zYXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiB1cGRhdGUgY3VycmVudCAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIHVfbG9uZyAlbHUgLT4gJWx1XG4iLCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpKSk7Ci0gICAgICAgICppdCA9ICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKLSAgICAgICAgKml0ID0KLSAgICAgICAgICAgICooKHVfbG9uZyAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQU5DRV9IQU5ETEVSX05BTUUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKLSAgICBjYXNlIE1PREVfU0VUX0ZSRUU6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG5vdGhpbmcgdG8gZG8gCi0gICAgICAgICAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQotCi1pbnQKLW5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKLXsKLQotICAgIGludCAqaXQgPSAoaW50ICopIGhhbmRsZXItPm15dm9pZDsKLSAgICBpbnQgKml0X3NhdmU7Ci0gICAgbG9uZyB0bXBfaXQ7Ci0gICAgCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIiLCAiR290IHJlcXVlc3Q6ICAlZFxuIiwKLSAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKSk7Ci0KLSAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogZGF0YSByZXF1ZXN0cyAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX0dFVDoKLQkvKgotCSAqIFVzZSBhIGxvbmcgaGVyZSwgb3RoZXJ3aXNlIG9uIDY0IGJpdCB1c2Ugb2YgYW4gaW50IHdvdWxkIGZhaWwKLQkgKi8KLQl0bXBfaXQgPSAqaXQ7Ci0gICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJnRtcF9pdCwgc2l6ZW9mKHRtcF9pdCkpOwotICAgICAgICBicmVhazsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKLSAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gQVNOX0lOVEVHRVIpCi0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9XUk9OR1RZUEUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyIAotICAgICAgICAgKi8KLSAgICAgICAgaXRfc2F2ZSA9IG5ldHNubXBfbWVtZHVwKGl0LCBzaXplb2YoaW50KSk7Ci0gICAgICAgIGlmIChpdF9zYXZlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5TVEFOQ0VfSEFORExFUl9OQU1FLCBpdF9zYXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiB1cGRhdGUgY3VycmVudCAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIGludCAlZCAtPiAlbGRcbiIsICppdCwKLSAgICAgICAgICAgICAgICAgICAgKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikpKTsKLSAgICAgICAgKml0ID0gKGludCkgKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9VTkRPOgotICAgICAgICAqaXQgPQotICAgICAgICAgICAgKigodV9pbnQgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQU5DRV9IQU5ETEVSX05BTUUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKLSAgICBjYXNlIE1PREVfU0VUX0ZSRUU6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG5vdGhpbmcgdG8gZG8gCi0gICAgICAgICAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorI2Vsc2UKKyNkZWZpbmUgZnJlZV93cmFwcGVyIGZyZWUKKyNlbmRpZgogCiBpbnQKIG5ldHNubXBfaW5zdGFuY2VfbnVtX2ZpbGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtNzQ1LDcgKzU4NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBuZXRzbm1wX251bV9maWxlX2luc3RhbmNlICpuZmk7Ci0gICAgdV9sb25nIGl0LCAqaXRfc2F2ZTsKKyAgICB1X2xvbmcgaXQ7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIHVfbG9uZyAqaXRfc2F2ZTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBpbnQgcmM7CiAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGhhbmRsZXIpOwpAQCAtNzg3LDYgKzYzMCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFNFVCByZXF1ZXN0cy4gIFNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHJlZ2lzdGVyZWQgUldSSVRFIAogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCA9PSBuZmktPmZpbGVwKTsKICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gbmZpLT50eXBlKQpAQCAtODIxLDcgKzY2NSw3IEBACiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOU1RBTkNFX0hBTkRMRVJfTkFNRSwgaXRfc2F2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmVlX3dyYXBwZXIpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTg1OSw2ICs3MDMsMTIgQEAKICAgICAgICAgICAgIG5maS0+ZmlsZXAgPSBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJuZXRzbm1wX2luc3RhbmNlX251bV9maWxlX2hhbmRsZXI6IGlsbGVnYWwgbW9kZVxuIik7CisgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgIH0KIAogICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCkBAIC04NjgsODYgKzcxOCw2IEBACiB9CiAKIGludAotbmV0c25tcF9pbnN0YW5jZV91aW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKLXsKLQotICAgIHVuc2lnbmVkIGludCAqaXQgPSAodW5zaWduZWQgaW50ICopIGhhbmRsZXItPm15dm9pZDsKLSAgICB1bnNpZ25lZCBpbnQgKml0X3NhdmU7Ci0gICAgdW5zaWduZWQgbG9uZyB0bXBfaXQ7Ci0gICAgCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaW5zdGFuY2VfdWludF9oYW5kbGVyIiwgIkdvdCByZXF1ZXN0OiAgJWRcbiIsCi0gICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSkpOwotCi0gICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGRhdGEgcmVxdWVzdHMgCi0gICAgICAgICAqLwotICAgIGNhc2UgTU9ERV9HRVQ6Ci0JLyoKLQkgKiBVc2UgYSBsb25nIGhlcmUsIG90aGVyd2lzZSBvbiA2NCBiaXQgdXNlIG9mIGFuIGludCB3b3VsZCBmYWlsCi0JICovCi0JdG1wX2l0ID0gKml0OwotICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX1VOU0lHTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmdG1wX2l0LCBzaXplb2YodW5zaWduZWQgbG9uZykpOwotICAgICAgICBicmVhazsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKLSAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gQVNOX1VOU0lHTkVEKQotICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfV1JPTkdUWVBFKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgotICAgICAgICAvKgotICAgICAgICAgKiBzdG9yZSBvbGQgaW5mbyBmb3IgdW5kbyBsYXRlciAKLSAgICAgICAgICovCi0gICAgICAgIGl0X3NhdmUgPSBuZXRzbm1wX21lbWR1cChpdCwgc2l6ZW9mKHVfaW50KSk7Ci0gICAgICAgIGlmIChpdF9zYXZlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5TVEFOQ0VfSEFORExFUl9OQU1FLCBpdF9zYXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiB1cGRhdGUgY3VycmVudCAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIHVpbnQgJWQgLT4gJWxkXG4iLCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpKSk7Ci0gICAgICAgICppdCA9ICh1bnNpZ25lZCBpbnQpICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKLSAgICAgICAgKml0ID0KLSAgICAgICAgICAgICooKHVfaW50ICopIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfSEFORExFUl9OQU1FKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6Ci0gICAgY2FzZSBNT0RFX1NFVF9GUkVFOgotICAgICAgICAvKgotICAgICAgICAgKiBub3RoaW5nIHRvIGRvIAotICAgICAgICAgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCi0gICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KLQotaW50CiBuZXRzbm1wX2luc3RhbmNlX2hlbHBlcl9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLApAQCAtOTc5LDYgKzc0OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgpAQCAtOTk0LDYgKzc2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICAgICAgaWYgKGNtcCA8IDAgfHwgKGNtcCA9PSAwICYmIHJlcXVlc3RzLT5pbmNsdXNpdmUpKSB7CkBAIC0xMDE5LDYgKzc5MSwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgIm5ldHNubXBfaW5zdGFuY2VfaGVscGVyX2hhbmRsZXI6IGlsbGVnYWwgbW9kZVxuIik7CisgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgIH0KICAgICAvKgogICAgICAqIGdvdCBoZXJlIG9ubHkgaWYgaWxsZWdhbCBtb2RlIGZvdW5kIApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMgYi9hZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYwppbmRleCA5MTJmNThjLi4wYmZjYzY5IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYworKysgYi9hZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYwpAQCAtOSwxMiArOSwxNyBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmg+CiAKK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKG1vZGVfZW5kX2NhbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobW9kZV9lbmRfY2FsbCwgbWliX2hlbHBlcnMpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NT0RFX0VORF9DQUxMCiAvKiogQGRlZmdyb3VwIG1vZGVfZW5kX2NhbGwgbW9kZV9lbmRfY2FsbAogICogIEF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgcmVxdWVzdHMsIGNhbGwgYW5vdGhlciBoYW5kbGVyIGhvb2suCiAgKiAgSGFuZGxlcnMgdGhhdCB3YW50IHRvIGxvb3AgdGhyb3VnaCBhIHNlcmllcyBvZiByZXF1ZXN0cyBhbmQgdGhlbgpAQCAtMTAxLDcgKzEwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7CiAKICAgICAvKiB0aGVuIGNhbGwgdGhlIGNhbGxiYWNrIGhhbmRsZXJzICovCi0gICAgZm9yKHB0ciA9IGhhbmRsZXItPm15dm9pZDsgcHRyOyBwdHIgPSBwdHItPm5leHQpIHsKKyAgICBmb3IgKHB0ciA9IChuZXRzbm1wX21vZGVfaGFuZGxlcl9saXN0KiloYW5kbGVyLT5teXZvaWQ7IHB0cjsgcHRyID0gcHRyLT5uZXh0KSB7CiAgICAgICAgIGlmIChwdHItPm1vZGUgPT0gTkVUU05NUF9NT0RFX0VORF9BTExfTU9ERVMgfHwKICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUgPT0gcHRyLT5tb2RlKSB7CiAgICAgICAgICAgICByZXQyID0gbmV0c25tcF9jYWxsX2hhbmRsZXIocHRyLT5jYWxsYmFja19oYW5kbGVyLCByZWdpbmZvLApAQCAtMTEzLDUgKzExOCwxMCBAQAogICAgIAogICAgIHJldHVybiByZXQyOwogfQorI2Vsc2UKK25ldHNubXBfZmVhdHVyZV91bnVzZWQobW9kZV9lbmRfY2FsbCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NT0RFX0VORF9DQUxMICovCisKKwogLyoqICBAfSAqLwogCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL211bHRpcGxleGVyLmMgYi9hZ2VudC9oZWxwZXJzL211bHRpcGxleGVyLmMKaW5kZXggZTU0M2Y1Ny4uMmE3YTY2NCAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9tdWx0aXBsZXhlci5jCisrKyBiL2FnZW50L2hlbHBlcnMvbXVsdGlwbGV4ZXIuYwpAQCAtODQsNiArODQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTEwMCw2ICsxMDEsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFg6IHByb2Nlc3MgU0VUcyBzcGVjaWFsbHksIGFuZCBwb3NzaWJseSBvdGhlcnMgCiAgICAgICAgICAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bnN1cHBvcnRlZCBtb2RlIGZvciBtdWx0aXBsZXhlcjogJWRcbiIsCiAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9udWxsLmMgYi9hZ2VudC9oZWxwZXJzL251bGwuYwppbmRleCBkMTEwZWI4Li45N2RmYzkyIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL251bGwuYworKysgYi9hZ2VudC9oZWxwZXJzL251bGwuYwpAQCAtMSwxNiArMSwxNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbnVsbC5oPgorCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L251bGwuaD4KLQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX251bGwob2lkICogbG9jLCBzaXplX3QgbG9jX2xlbikKIHsKQEAgLTIzLDE0ICsyMywxNiBAQAogewogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CiAgICAgcmVnaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbik7Ci0gICAgcmVnaW5mby0+aGFuZGxlck5hbWUgPSBzdHJkdXAoIiIpOwotICAgIHJlZ2luZm8tPnJvb3RvaWQgPSBsb2M7Ci0gICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gPSBsb2NfbGVuOwotICAgIHJlZ2luZm8tPmhhbmRsZXIgPQotICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJudWxsIiwgbmV0c25tcF9udWxsX2hhbmRsZXIpOwotICAgIGlmIChjb250ZXh0TmFtZSkKLSAgICAgICAgcmVnaW5mby0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOwotICAgIHJlZ2luZm8tPm1vZGVzID0gSEFORExFUl9DQU5fREVGQVVMVDsKKyAgICBpZiAocmVnaW5mbyAhPSBOVUxMKSB7CisgICAgICAgIHJlZ2luZm8tPmhhbmRsZXJOYW1lID0gc3RyZHVwKCIiKTsKKyAgICAgICAgcmVnaW5mby0+cm9vdG9pZCA9IGxvYzsKKyAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gPSBsb2NfbGVuOworICAgICAgICByZWdpbmZvLT5oYW5kbGVyID0KKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoIm51bGwiLCBuZXRzbm1wX251bGxfaGFuZGxlcik7CisgICAgICAgIGlmIChjb250ZXh0TmFtZSkKKyAgICAgICAgICAgIHJlZ2luZm8tPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICAgICAgcmVnaW5mby0+bW9kZXMgPSBIQU5ETEVSX0NBTl9ERUZBVUxUIHwgSEFORExFUl9DQU5fR0VUQlVMSzsKKyAgICB9CiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9vbGRfYXBpLmMgYi9hZ2VudC9oZWxwZXJzL29sZF9hcGkuYwppbmRleCA2ZTM2Nzc2Li5kMmI5OWQ5IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL29sZF9hcGkuYworKysgYi9hZ2VudC9oZWxwZXJzL29sZF9hcGkuYwpAQCAtMSwxOSArMSwzMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oPgorCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L29sZF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAjZGVmaW5lIE1JQl9DTElFTlRTX0FSRV9FVklMIDEKIAorI2lmZGVmIEhBVkVfRE1BTExPQ19ICitzdGF0aWMgdm9pZCBmcmVlX3dyYXBwZXIodm9pZCAqIHApCit7CisgICAgZnJlZShwKTsKK30KKyNlbHNlCisjZGVmaW5lIGZyZWVfd3JhcHBlciBmcmVlCisjZW5kaWYKKwogLyoKICAqIGRvbid0IHVzZSB0aGVzZSEgCiAgKi8KQEAgLTM5LDYgKzUxLDE5IEBACiAgICAgcmV0dXJuIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoIm9sZF9hcGkiLCBuZXRzbm1wX29sZF9hcGlfaGVscGVyKTsKIH0KIAorc3RydWN0IHZhcmlhYmxlICoKK25ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyKQoreworICAgIHN0cnVjdCB2YXJpYWJsZSAqdmFyMiA9IE5VTEw7CisgICAgCisgICAgaWYgKHZhcikgeworICAgICAgICBjb25zdCBpbnQgdmFyc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCB2YXJpYWJsZSwgbmFtZSkgKyB2YXItPm5hbWVsZW4gKiBzaXplb2YodmFyLT5uYW1lWzBdKTsKKyAgICAgICAgdmFyMiA9IG1hbGxvYyh2YXJzaXplKTsKKyAgICAgICAgaWYgKHZhcjIpCisgICAgICAgICAgICBtZW1jcHkodmFyMiwgdmFyLCB2YXJzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHZhcjI7Cit9CiAKIC8qKiBSZWdpc3RlcnMgYW4gb2xkIEFQSSBzZXQgaW50byB0aGUgbWliIHRyZWUuICBGdW5jdGlvbmFsbHkgdGhpcwogICogbWltaWNzIHRoZSBvbGQgcmVnaXN0ZXJfbWliX2NvbnRleHQoKSBmdW5jdGlvbiAoYW5kIGluIGZhY3QgdGhlIG5ldwpAQCAtNDYsMTAgKzcxLDEwIEBACiAgKi8KIGludAogbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bXZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbWlibG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG1pYmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWlibG9jbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFuZ2Vfc3ViaWQsCkBAIC02NywyMSArOTIsMzEgQEAKICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2cDsKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbyA9CiAgICAgICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24pOworICAgICAgICBpZiAocmVnaW5mbyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKIAotICAgICAgICB2cCA9IG5ldHNubXBfbWVtZHVwKChjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNvbnN0IGNoYXIgKikgdmFyICsgdmFyc2l6ZSAqIGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnNpemUpOworCXZwID0gbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGUoKGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqKQorCQkJCQkoKGNvbnN0IGNoYXIgKikgdmFyICsgdmFyc2l6ZSAqIGkpKTsKIAogICAgICAgICByZWdpbmZvLT5oYW5kbGVyID0gZ2V0X29sZF9hcGlfaGFuZGxlcigpOwogICAgICAgICByZWdpbmZvLT5oYW5kbGVyTmFtZSA9IHN0cmR1cChtb2R1bGVOYW1lKTsKICAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gPSAobWlibG9jbGVuICsgdnAtPm5hbWVsZW4pOwogICAgICAgICByZWdpbmZvLT5yb290b2lkID0KICAgICAgICAgICAgIChvaWQgKikgbWFsbG9jKHJlZ2luZm8tPnJvb3RvaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBpZiAocmVnaW5mby0+cm9vdG9pZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBTTk1QX0ZSRUUodnApOworICAgICAgICAgICAgU05NUF9GUkVFKHJlZ2luZm8tPmhhbmRsZXJOYW1lKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShyZWdpbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KIAogICAgICAgICBtZW1jcHkocmVnaW5mby0+cm9vdG9pZCwgbWlibG9jLCBtaWJsb2NsZW4gKiBzaXplb2Yob2lkKSk7CiAgICAgICAgIG1lbWNweShyZWdpbmZvLT5yb290b2lkICsgbWlibG9jbGVuLCB2cC0+bmFtZSwgdnAtPm5hbWVsZW4KICAgICAgICAgICAgICAgICogc2l6ZW9mKG9pZCkpOwogICAgICAgICByZWdpbmZvLT5oYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKSB2cDsKKyAgICAgICAgcmVnaW5mby0+aGFuZGxlci0+ZGF0YV9jbG9uZQorCSAgICA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2R1cGxpY2F0ZV92YXJpYWJsZTsKKyAgICAgICAgcmVnaW5mby0+aGFuZGxlci0+ZGF0YV9mcmVlID0gZnJlZTsKIAogICAgICAgICByZWdpbmZvLT5wcmlvcml0eSA9IHByaW9yaXR5OwogICAgICAgICByZWdpbmZvLT5yYW5nZV9zdWJpZCA9IHJhbmdlX3N1YmlkOwpAQCAtODksMTQgKzEyNCwxNSBAQAogICAgICAgICByZWdpbmZvLT5yYW5nZV91Ym91bmQgPSByYW5nZV91Ym91bmQ7CiAgICAgICAgIHJlZ2luZm8tPnRpbWVvdXQgPSB0aW1lb3V0OwogICAgICAgICByZWdpbmZvLT5jb250ZXh0TmFtZSA9IChjb250ZXh0KSA/IHN0cmR1cChjb250ZXh0KSA6IE5VTEw7Ci0gICAgICAgIHJlZ2luZm8tPm1vZGVzID0gSEFORExFUl9DQU5fUldSSVRFOworICAgICAgICByZWdpbmZvLT5tb2RlcyA9IHZwLT5hY2wgPT0gTkVUU05NUF9PTERBUElfUk9OTFkgPyBIQU5ETEVSX0NBTl9ST05MWSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyBpbiB0aGUgbWliIHRyZWUgCiAgICAgICAgICAqLwogICAgICAgICBpZiAobmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKHJlZ2luZm8pICE9IE1JQl9SRUdJU1RFUkVEX09LKSB7CiAgICAgICAgICAgICAvKiogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZ2luZm8pOyBhbHJlYWR5IGZyZWVkICovCi0gICAgICAgICAgICBTTk1QX0ZSRUUodnApOworICAgICAgICAgICAgLyogU05NUF9GUkVFKHZwKTsgYWxyZWFkeSBmcmVlZCAqLwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CkBAIC0xMDUsNyArMTQxLDcgQEAKIC8qKiByZWdpc3RlcnMgYSByb3cgd2l0aGluIGEgbWliIHRhYmxlICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbWliX3RhYmxlX3Jvdyhjb25zdCBjaGFyICptb2R1bGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW12YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG1pYmxvYywKQEAgLTExOSw4ICsxNTUsOCBAQAogICAgIG9pZCAgICAgICAgICAgICB1Ym91bmQgPSAwOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG51bXZhcnM7IGkrKykgewotICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZyID0KLSAgICAgICAgICAgIChzdHJ1Y3QgdmFyaWFibGUgKikgKChjaGFyICopIHZhciArIChpICogdmFyc2l6ZSkpOworICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZyID0KKyAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKikgKChjb25zdCBjaGFyICopIHZhciArIChpICogdmFyc2l6ZSkpOwogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyOwogICAgICAgICBpZiAoIHZhcl9zdWJpZCA+IChpbnQpbWlibG9jbGVuICkgewogICAgICAgICAgICAgYnJlYWs7ICAgIC8qIGRvZXNuJ3QgbWFrZSBzZW5zZSAqLwpAQCAtMTYxLDE0ICsxOTcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgIHItPnJvb3RvaWRfbGVuKSk7CiAgICAgICAgIERFQlVHTVNHKCgibmV0c25tcF9yZWdpc3Rlcl9taWJfdGFibGVfcm93IiwgIiglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAodmFyX3N1YmlkIC0gdnItPm5hbWVsZW4pKSk7Ci0gICAgICAgIHItPmhhbmRsZXItPm15dm9pZCA9ICh2b2lkICopIG1hbGxvYyh2YXJzaXplKTsKKyAgICAgICAgci0+aGFuZGxlci0+bXl2b2lkID0gbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGUodnIpOworICAgICAgICByLT5oYW5kbGVyLT5kYXRhX2Nsb25lID0gKHZvaWQgKigqKSh2b2lkICopKW5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlOworICAgICAgICByLT5oYW5kbGVyLT5kYXRhX2ZyZWUgPSBmcmVlOwogCiAgICAgICAgIGlmIChyLT5oYW5kbGVyLT5teXZvaWQgPT0gTlVMTCkgewogICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHIpOwogICAgICAgICAgICAgcmMgPSBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxFRDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG1lbWNweSgoY2hhciAqKSByLT5oYW5kbGVyLT5teXZvaWQsIHZyLCB2YXJzaXplKTsKIAogICAgICAgICByLT5jb250ZXh0TmFtZSA9IChjb250ZXh0KSA/IHN0cmR1cChjb250ZXh0KSA6IE5VTEw7CiAKQEAgLTIzOCwxMyArMjc1LDEzIEBACiAgICAgaW50ICAgICAgICAgICAgIHN0YXR1czsKIAogICAgIHN0cnVjdCB2YXJpYWJsZSAqdnA7Ci0gICAgV3JpdGVNZXRob2QgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7Ci0gICAgc2l6ZV90ICAgICAgICAgIGxlbjsKLSAgICB1X2NoYXIgICAgICAgICAqYWNjZXNzID0gTlVMTDsKICAgICBuZXRzbm1wX29sZF9hcGlfY2FjaGUgKmNhY2hlcHRyOwogICAgIG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqb2xkYXNwID0gTlVMTDsKLSAgICBvaWQgICAgICAgICAgICAgdG1wX25hbWVbTUFYX09JRF9MRU5dOworICAgIHVfY2hhciAgICAgICAgICphY2Nlc3MgPSBOVUxMOworICAgIFdyaXRlTWV0aG9kICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOworICAgIHNpemVfdCAgICAgICAgICBsZW47CiAgICAgc2l6ZV90ICAgICAgICAgIHRtcF9sZW47CisgICAgb2lkICAgICAgICAgICAgIHRtcF9uYW1lW01BWF9PSURfTEVOXTsKIAogICAgIHZwID0gKHN0cnVjdCB2YXJpYWJsZSAqKSBoYW5kbGVyLT5teXZvaWQ7CiAKQEAgLTI3NSw3ICszMTIsOSBAQAogICAgICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICAgICAgY2FzZSBNT0RFX0dFVDoKICAgICAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBBY3R1YWxseSBjYWxsIHRoZSBvbGQgbWliLW1vZHVsZSBmdW5jdGlvbiAKICAgICAgICAgICAgICAqLwpAQCAtMzA2LDcgKzM0NSw5IEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiByZXN1bHQgcmV0dXJuZWQgCiAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlICE9IE1PREVfU0VUX1JFU0VSVkUxKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdnAtPnR5cGUsIGFjY2VzcywgbGVuKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMzEsNyArMzcyLDkgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBBQUE6IGZhbGwgdGhyb3VnaCBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGEgc2V0IChzZWUgQkJCKSAKICAgICAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlICE9IE1PREVfU0VUX1JFU0VSVkUxKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FjaGVwdHIgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfb2xkX2FwaV9jYWNoZSk7CkBAIC0zNDMsNyArMzg2LDggQEAKICAgICAgICAgICAgIHdyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9MRF9BUElfTkFNRSwgY2FjaGVwdHIsIGZyZWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPTERfQVBJX05BTUUsIGNhY2hlcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmVlX3dyYXBwZXIpKTsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBCQkI6IGZhbGwgdGhyb3VnaCBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGEgc2V0IChzZWUgQUFBKSAKICAgICAgICAgICAgICAqLwpAQCAtNDAzLDcgKzQ0Nyw3IEBACiAgKi8KIHN0YXRpYyBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmN1cnJlbnRfYWdlbnRfc2Vzc2lvbiA9IE5VTEw7CiBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKgotbmV0c25tcF9nZXRfY3VycmVudF9hZ2VudF9zZXNzaW9uKCkKK25ldHNubXBfZ2V0X2N1cnJlbnRfYWdlbnRfc2Vzc2lvbih2b2lkKQogewogICAgIHJldHVybiBjdXJyZW50X2FnZW50X3Nlc3Npb247CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jIGIvYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYwppbmRleCA1MTJmOTRiLi4wYjA2ZDRmIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jCisrKyBiL2FnZW50L2hlbHBlcnMvcmVhZF9vbmx5LmMKQEAgLTEsMTEgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNTAsNiArNDQsNyBAQAogCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgpAQCAtNTgsMTkgKzUzLDE3IEBACiAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgogICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9FUlJfTk9UV1JJVEFCTEUpOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBjYXNlIE1PREVfR0VUOgogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgIGNhc2UgTU9ERV9HRVRCVUxLOgogICAgICAgICAvKiBuZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJyAqLwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX0VSUl9HRU5FUlIpOwotICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KKwogICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX0VSUl9HRU5FUlIpOwotICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7ICAgICAvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKyAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogfQogCiAvKiogaW5pdGlhbGl6ZXMgdGhlIHJlYWRfb25seSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSByZWFkX29ubHkKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvcm93X21lcmdlLmMgYi9hZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jCmluZGV4IDZiNjQ0MzAuLjRhOGU0NzYgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvcm93X21lcmdlLmMKKysrIGIvYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYwpAQCAtMSw0ICsxLDEwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNiwxMSArMTIsMTIgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyb3dfbWVyZ2UsIHJvd19tZXJnZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yocm93X21lcmdlX2FsbCwgbWliX2hlbHBlcnMpCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaD4KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JPV19NRVJHRQogLyoqIEBkZWZncm91cCByb3dfbWVyZ2Ugcm93X21lcmdlCiAgKiAgQ2FsbHMgc3ViIGhhbmRsZXJzIHdpdGggcmVxdWVzdCBmb3Igb25lIHJvdyBhdCBhIHRpbWUuCiAgKiAgQGluZ3JvdXAgdXRpbGl0aWVzCkBAIC0zOCw2ICs0NSw4IEBACiAKIC8qKiBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKSBidXQgYWxzbwogICogaW5qZWN0cyBhIHJvd19tZXJnZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9yb3dfbWVyZ2UsIHJvd19tZXJnZV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUk9XX01FUkdFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcm93X21lcmdlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pCiB7CkBAIC00NSw2ICs1NCw3IEBACiAJCSAgICBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlcihyZWdpbmZvLT5yb290b2lkX2xlbisxKSk7CiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JPV19NRVJHRSAqLwogCiBzdGF0aWMgdm9pZAogX3JtX3N0YXR1c19mcmVlKHZvaWQgKm1lbSkKQEAgLTc2LDE0ICs4NiwxNCBAQAogICAgICAqIHNlZSBpZiB3ZSd2ZSBhbHJlYWR5IGJlZW4gaGVyZQogICAgICAqLwogICAgIHJjID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgInJvd19tZXJnZTolcCIsIHJlZ2luZm8pOwotICAgIGlmICgoLTEgPT0gcmMpIHx8IChyYyA+PSBzaXplb2YoYnVmKSkpIHsKKyAgICBpZiAoKC0xID09IHJjKSB8fCAoKHNpemVfdClyYyA+PSBzaXplb2YoYnVmKSkpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcga2V5XG4iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIAotICAgIHJtX3N0YXR1cyA9IG5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBidWYpOworICAgIHJtX3N0YXR1cyA9IChuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXMqKW5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBidWYpOwogICAgIGlmICgoTlVMTCA9PSBybV9zdGF0dXMpICYmIGNyZWF0ZV9taXNzaW5nKSB7Ci0gICAgICAgIHZvaWQgKmRhdGFfbGlzdDsKKyAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKmRhdGFfbGlzdDsKICAgICAgICAgCiAgICAgICAgIHJtX3N0YXR1cyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzKTsKICAgICAgICAgaWYgKE5VTEwgPT0gcm1fc3RhdHVzKSB7CkBAIC0zNjIsNSArMzcyLDEwIEBACiAgICAgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX2J5X25hbWUoInJvd19tZXJnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfcm93X21lcmdlX2hhbmRsZXIoLTEpKTsKIH0KKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX01FUkdFICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHJvd19tZXJnZSk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ST1dfTUVSR0UgKi8KKworCiAvKiogIEB9ICovCiAKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc2NhbGFyLmMgYi9hZ2VudC9oZWxwZXJzL3NjYWxhci5jCmluZGV4IDQyYzY2YjQuLjdhNGM5ZTAgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvc2NhbGFyLmMKKysrIGIvYWdlbnQvaGVscGVycy9zY2FsYXIuYwpAQCAtMTAsNiArMTAsMTEgQEAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyLmg+CisKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xNywxMCArMjIsNiBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaD4KQEAgLTc3LDggKzc4LDggQEAKICAgICAgKiBFeHRlbmQgdGhlIHJlZ2lzdGVyZWQgT0lEIHdpdGggc3BhY2UgZm9yIHRoZSBpbnN0YW5jZSBzdWJpZAogICAgICAqIChidXQgZG9uJ3QgZXh0ZW5kIHRoZSBsZW5ndGgganVzdCB5ZXQhKQogICAgICAqLwotICAgIHJlZ2luZm8tPnJvb3RvaWQgPSByZWFsbG9jKHJlZ2luZm8tPnJvb3RvaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnaW5mby0+cm9vdG9pZF9sZW4rMSkgKiBzaXplb2Yob2lkKSApOworICAgIHJlZ2luZm8tPnJvb3RvaWQgPSAob2lkKilyZWFsbG9jKHJlZ2luZm8tPnJvb3RvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnaW5mby0+cm9vdG9pZF9sZW4rMSkgKiBzaXplb2Yob2lkKSApOwogICAgIHJlZ2luZm8tPnJvb3RvaWRbIHJlZ2luZm8tPnJvb3RvaWRfbGVuIF0gPSAwOwogCiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF9pbnN0YW5jZV9oYW5kbGVyKCkpOwpAQCAtMTEyLDggKzExMyw4IEBACiAgICAgICogRXh0ZW5kIHRoZSByZWdpc3RlcmVkIE9JRCB3aXRoIHNwYWNlIGZvciB0aGUgaW5zdGFuY2Ugc3ViaWQKICAgICAgKiAoYnV0IGRvbid0IGV4dGVuZCB0aGUgbGVuZ3RoIGp1c3QgeWV0ISkKICAgICAgKi8KLSAgICByZWdpbmZvLT5yb290b2lkID0gcmVhbGxvYyhyZWdpbmZvLT5yb290b2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuKzEpICogc2l6ZW9mKG9pZCkgKTsKKyAgICByZWdpbmZvLT5yb290b2lkID0gKG9pZCopcmVhbGxvYyhyZWdpbmZvLT5yb290b2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuKzEpICogc2l6ZW9mKG9pZCkgKTsKICAgICByZWdpbmZvLT5yb290b2lkWyByZWdpbmZvLT5yb290b2lkX2xlbiBdID0gMDsKIAogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfaW5zdGFuY2VfaGFuZGxlcigpKTsKQEAgLTE2MSw2ICsxNjIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTE3OSw2ICsxODEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICByZWdpbmZvLT5yb290b2lkW3JlZ2luZm8tPnJvb3RvaWRfbGVuKytdID0gMDsKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMgYi9hZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jCmluZGV4IGE1ZDExOWUuLjZiN2YwOTggMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMKKysrIGIvYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYwpAQCAtMSw1ICsxLDEwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaD4KKwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTcsMTMgKzEyLDE5IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oPgorCitzdGF0aWMgbmV0c25tcF9zY2FsYXJfZ3JvdXAqCitjbG9uZV9zY2FsYXJfZ3JvdXAobmV0c25tcF9zY2FsYXJfZ3JvdXAqIHNyYykKK3sKKyAgbmV0c25tcF9zY2FsYXJfZ3JvdXAgKnQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc2NhbGFyX2dyb3VwKTsKKyAgaWYodCAhPSBOVUxMKSB7CisgICAgdC0+bGJvdW5kID0gc3JjLT5sYm91bmQ7CisgICAgdC0+dWJvdW5kID0gc3JjLT51Ym91bmQ7CisgIH0KKyAgcmV0dXJuIHQ7Cit9CiAKIC8qKiBAZGVmZ3JvdXAgc2NhbGFyX2dyb3VwX2dyb3VwIHNjYWxhcl9ncm91cAogICogIFByb2Nlc3MgZ3JvdXBzIG9mIHNjYWxhcnMuCkBAIC0zOCw2ICs0OSw4IEBACiAJICAgIHNncm91cC0+bGJvdW5kID0gZmlyc3Q7CiAJICAgIHNncm91cC0+dWJvdW5kID0gbGFzdDsKICAgICAgICAgICAgIHJldC0+bXl2b2lkID0gKHZvaWQgKilzZ3JvdXA7CisgICAgICAgICAgICByZXQtPmRhdGFfZnJlZSA9IGZyZWU7CisgICAgICAgICAgICByZXQtPmRhdGFfY2xvbmUgPSAodm9pZCAqKCopKHZvaWQgKikpY2xvbmVfc2NhbGFyX2dyb3VwOwogCX0KICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAgLTQ4LDcgKzYxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCBmaXJzdCwgb2lkIGxhc3QpCiB7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF9pbnN0YW5jZV9oYW5kbGVyKCkpOwotICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfc2NhbGFyX2hhbmRsZXIoKSk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF9zY2FsYXJfZ3JvdXBfaGFuZGxlcihmaXJzdCwgbGFzdCkpOwogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3NlcmlhbGl6ZShyZWdpbmZvKTsKIH0KQEAgLTk3LDEyICsxMDksMTQgQEAKICAgICAgICAgcmV0ID0gU05NUF9OT1NVQ0hPQkpFQ1Q7CiAgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGlmIChjbXAgIT0gMCB8fAogICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggPD0gcmVnaW5mby0+cm9vdG9pZF9sZW4pIHsKIAkgICAgLyoKQEAgLTEyOCwxMiArMTQyLDEzIEBACiAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgcmV0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIAkgICAgfQotICAgICAgICAgICAgcm9vdF90bXBbcmVnaW5mby0+cm9vdG9pZF9sZW4rK10gPSBzdWJpZDsKKyAgICAgICAgICAgIHJvb3RfdG1wW3JlZ2luZm8tPnJvb3RvaWRfbGVuXSA9IHN1YmlkOworICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gKz0gMjsKICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWQgPSByb290X3RtcDsKICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwogICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCA9IHJvb3Rfc2F2ZTsKLSAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuLS07CisgICAgICAgICAgICByZWdpbmZvLT5yb290b2lkX2xlbiAtPSAyOwogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE2Miw3ICsxNzcsOCBAQAogCWVsc2UgaWYgKHN1YmlkID4gc2dyb3VwLT51Ym91bmQpCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgCi0gICAgICAgIHJvb3RfdG1wW3JlZ2luZm8tPnJvb3RvaWRfbGVuKytdID0gc3ViaWQ7CisgICAgICAgIHJvb3RfdG1wW3JlZ2luZm8tPnJvb3RvaWRfbGVuXSA9IHN1YmlkOworICAgICAgICByZWdpbmZvLT5yb290b2lkX2xlbiArPSAyOwogICAgICAgICByZWdpbmZvLT5yb290b2lkID0gcm9vdF90bXA7CiAgICAgICAgIHJldCA9IG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwpAQCAtMTc1LDEyICsxOTEsMTIgQEAKICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUIHx8CiAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFKSkgewogICAgICAgICAgICAgc25tcF9zZXRfdmFyX29iamlkKHJlcXVlc3RzLT5yZXF1ZXN0dmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCwgcmVnaW5mby0+cm9vdG9pZF9sZW4pOwotICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVtyZWdpbmZvLT5yb290b2lkX2xlbi0xXSA9ICsrc3ViaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCwgcmVnaW5mby0+cm9vdG9pZF9sZW4gLSAxKTsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbcmVnaW5mby0+cm9vdG9pZF9sZW4gLSAyXSA9ICsrc3ViaWQ7CiAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlID0gQVNOX1BSSVZfUkVUUlk7CiAgICAgICAgIH0KICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCA9IHJvb3Rfc2F2ZTsKLSAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4tLTsKKyAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gLT0gMjsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc2VyaWFsaXplLmMgYi9hZ2VudC9oZWxwZXJzL3NlcmlhbGl6ZS5jCmluZGV4IDg5MmY5YjMuLmVlYzY2YjQgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvc2VyaWFsaXplLmMKKysrIGIvYWdlbnQvaGVscGVycy9zZXJpYWxpemUuYwpAQCAtMSwxMSArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jIGIvYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFjMmFjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaD4KKworbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoaGVscGVyX3N0YXRpc3RpY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGVscGVyX3N0YXRpc3RpY3MsIG1pYl9oZWxwZXJzKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSEVMUEVSX1NUQVRJU1RJQ1MKKy8qIGlmIHdlJ3JlIG5vdCBuZWVkZWQsIHRoZW4gbmVpdGhlciBpcyB0aGlzICovCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdGF0aXN0aWNzKQorI2VuZGlmCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IRUxQRVJfU1RBVElTVElDUworc3RhdGljIGludAorbmV0c25tcF9nZXRfc3RhdGlzdGljX2hlbHBlcl9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQpIHsKKyAgICAgICAgY29uc3Qgb2lkIGlkeCA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbcmVnaW5mby0+cm9vdG9pZF9sZW4gLSAyXSArCisgICAgICAgICAgICAob2lkKSh1aW50cHRyX3QpaGFuZGxlci0+bXl2b2lkOworICAgICAgICB1aW50MzJfdCB2YWx1ZTsKKworICAgICAgICBpZiAoaWR4ID4gTkVUU05NUF9TVEFUX01BWF9TVEFUUykKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIHZhbHVlID0gc25tcF9nZXRfc3RhdGlzdGljKGlkeCk7CisgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworfQorCitzdGF0aWMgbmV0c25tcF9taWJfaGFuZGxlciAqCituZXRzbm1wX2dldF9zdGF0aXN0aWNfaGFuZGxlcihpbnQgb2Zmc2V0KQoreworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKnJldCA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoImdldF9zdGF0aXN0aWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X3N0YXRpc3RpY19oZWxwZXJfaGFuZGxlcik7CisgICAgaWYgKHJldCkgeworICAgICAgICByZXQtPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVDsKKyAgICAgICAgcmV0LT5teXZvaWQgPSAodm9pZCopKHVpbnRwdHJfdClvZmZzZXQ7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9zdGF0aXN0aWNfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgc3RhcnQsIGludCBiZWdpbiwgaW50IGVuZCkKK3sKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9zdGF0aXN0aWNfaGFuZGxlcihiZWdpbiAtIHN0YXJ0KSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm8sIHN0YXJ0LCBzdGFydCArIChlbmQgLSBiZWdpbikpOworfQorI2Vsc2UgLyogIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEVMUEVSX0dFVF9TVEFUSVNUSUNTICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGhlbHBlcl9zdGF0aXN0aWNzKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IRUxQRVJfR0VUX1NUQVRJU1RJQ1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYyBiL2FnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYwppbmRleCBlZmIxZWI0Li41ZGExNzk2IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMKKysrIGIvYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jCkBAIC0xLDE3ICsxLDIyIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oPgorbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoc3Rhc2hfY2FjaGUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3Rhc2hfY2FjaGUsIG1pYl9oZWxwZXJzKQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NUQVNIX0NBQ0hFCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2gpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfaXRlcmF0ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaF9nZXRfZGF0YSkKKyNlbmRpZgorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0Lmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oPgorCiBleHRlcm4gTmV0c25tcENhY2hlTG9hZCBfbmV0c25tcF9zdGFzaF9jYWNoZV9sb2FkOwogZXh0ZXJuIE5ldHNubXBDYWNoZUZyZWUgX25ldHNubXBfc3Rhc2hfY2FjaGVfZnJlZTsKICAKQEAgLTMyLDcgKzM3LDggQEAKICAgICBuZXRzbm1wX3N0YXNoX2NhY2hlX2luZm8gKmNpbmZvOwogCiAgICAgY2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3Rhc2hfY2FjaGVfaW5mbyk7Ci0gICAgY2luZm8tPmNhY2hlX2xlbmd0aCA9IDMwOworICAgIGlmIChjaW5mbyAhPSBOVUxMKQorICAgICAgICBjaW5mby0+Y2FjaGVfbGVuZ3RoID0gMzA7CiAgICAgcmV0dXJuIGNpbmZvOwogfQogCkBAIC02Niw3ICs3Miw3IEBACiAgICAgfQogCiAgICAgaGFuZGxlci0+bXl2b2lkID0gY2luZm87Ci0gICAgaGFuZGxlci0+ZGF0YV9mcmVlID0gZnJlZTsKKyAgICBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZShoYW5kbGVyKTsKIAogICAgIHJldHVybiBoYW5kbGVyOwogfQpAQCAtMTEyLDcgKzExOCw3IEBACiBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICAqKgogbmV0c25tcF9leHRyYWN0X3N0YXNoX2NhY2hlKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvKQogewotICAgIHJldHVybiBuZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEocmVxaW5mbywgU1RBU0hfQ0FDSEVfTkFNRSk7CisgICAgcmV0dXJuIChuZXRzbm1wX29pZF9zdGFzaF9ub2RlKiopbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKHJlcWluZm8sIFNUQVNIX0NBQ0hFX05BTUUpOwogfQogCiAKQEAgLTE0Myw3ICsxNDksNyBAQAogICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6c3Rhc2hfY2FjaGUiLCAiUHJvY2Vzc2luZyBHRVQgcmVxdWVzdFxuIikpOwogICAgICAgICBmb3IocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewotICAgICAgICAgICAgY2RhdGEgPQorICAgICAgICAgICAgY2RhdGEgPSAobmV0c25tcF92YXJpYWJsZV9saXN0KikKICAgICAgICAgICAgICAgICBuZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YShjaW5mby0+Y2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCk7CkBAIC0xNTUsNyArMTYxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RhdGEtPnZhbC5zdHJpbmcsIGNkYXRhLT52YWxfbGVuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKQEAgLTE2Niw3ICsxNzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCk7CiAgICAgICAgICAgICBpZiAoY25vZGUgJiYgY25vZGUtPnRoZWRhdGEpIHsKLSAgICAgICAgICAgICAgICBjZGF0YSA9IGNub2RlLT50aGVkYXRhOworICAgICAgICAgICAgICAgIGNkYXRhID0gIChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QqKWNub2RlLT50aGVkYXRhOwogICAgICAgICAgICAgICAgIGlmIChjZGF0YS0+dmFsLnN0cmluZyAmJiBjZGF0YS0+bmFtZSAmJiBjZGF0YS0+bmFtZV9sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpzdGFzaF9jYWNoZSIsICJGb3VuZCBjYWNoZWQgR0VUTkVYVCB2YXJiaW5kXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgiaGVscGVyOnN0YXNoX2NhY2hlIiwgY2RhdGEtPm5hbWUsIGNkYXRhLT5uYW1lX2xlbmd0aCkpOwpAQCAtMTc4LDcgKzE4Myw2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC0xODYsNyArMTkwLDggQEAKICAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwogICAgIH0KLSAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOyAgICAgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAogLyoqIHVwZGF0ZXMgYSBnaXZlbiBjYWNoZSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBuZWVkcyB0byBvciBub3QuCkBAIC0yNDIsMyArMjQ3LDYgQEAKIH0KIC8qKiAgQH0gKi8KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChzdGFzaF9jYWNoZSk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMgYi9hZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYwppbmRleCBhYWJhYWE4Li5kN2JhZmZkIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYworKysgYi9hZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYwpAQCAtMSwxNyArMSwyMiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaD4KK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKHN0YXNoX3RvX25leHQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3Rhc2hfdG9fbmV4dCwgbWliX2hlbHBlcnMpCisKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9TVEFTSF9UT19ORVhUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2gpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfYWRkX2RhdGEpCisjZW5kaWYKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX1RPX05FWFQKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0Lmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oPgorCiAvKiogQGRlZmdyb3VwIHN0YXNoX3RvX25leHQgc3Rhc2hfdG9fbmV4dAogICogIENvbnZlcnQgR0VUX1NUQVNIIHJlcXVlc3RzIGludG8gR0VUTkVYVCByZXF1ZXN0cyBmb3IgdGhlIGhhbmRsZXIuCiAgKiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBoYW5kbGVyIGlzIHRvIGNvbnZlcnQgYSBHRVRfU1RBU0ggYXV0by1jYWNoZSByZXF1ZXN0CkBAIC0xMTksMyArMTI0LDYgQEAKIH0KIC8qKiAgQH0gKi8KIAorI2Vsc2UgIC8qICEgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9UT19ORVhUICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHN0YXNoX3RvX25leHQpOworI2VuZGlmIC8qICEgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9UT19ORVhUICovCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlLmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlLmMKaW5kZXggMzJhMDgwMy4uODgyZTg0YyAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZS5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGUuYwpAQCAtMTIsMjIgKzEyLDQwIEBACiAgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2gpCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9hbGwsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfYnVpbGRfcmVzdWx0LCB0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZ2V0X29yX2NyZWF0ZV9yb3dfc3Rhc2gsIHRhYmxlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3RyYXRpb25fb3duc190YWJsZV9pbmZvLCB0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfc3BhcnNlLCB0YWJsZV9hbGwpCisKIHN0YXRpYyB2b2lkICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzKTsKQEAgLTk5LDYgKzExNywzMSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKKy8qKiBDb25maWd1cmVzIGEgaGFuZGxlciBzdWNoIHRoYXQgdGFibGUgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGlzIGZyZWVkIGJ5CisgKiAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoKS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGhhbmRsZXItPm15dm9pZCBwb2ludHMgdG8KKyAqICBhbiBvYmplY3Qgb2YgdHlwZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvLgorICovCit2b2lkIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8obmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcikKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChoYW5kbGVyKTsKKyAgICBuZXRzbm1wX2Fzc2VydChoYW5kbGVyLT5teXZvaWQpOworICAgIGhhbmRsZXItPmRhdGFfY2xvbmUKKwk9ICh2b2lkICooKikodm9pZCAqKSkgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19jbG9uZTsKKyAgICBoYW5kbGVyLT5kYXRhX2ZyZWUKKwk9ICh2b2lkICgqKSh2b2lkICopKSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWU7Cit9CisKKy8qKiBDb25maWd1cmVzIGEgaGFuZGxlciBzdWNoIHRoYXQgdGFibGUgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGlzIGZyZWVkIGJ5CisgKiAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoKS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHJlZy0+aGFuZGxlci0+bXl2b2lkCisgKiAgcG9pbnRzIHRvIGFuIG9iamVjdCBvZiB0eXBlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8uCisgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RSQVRJT05fT1dOU19UQUJMRV9JTkZPCit2b2lkIG5ldHNubXBfcmVnaXN0cmF0aW9uX293bnNfdGFibGVfaW5mbyhuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcpCit7CisgICAgaWYgKHJlZykKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhyZWctPmhhbmRsZXIpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNUUkFUSU9OX09XTlNfVEFCTEVfSU5GTyAqLwogCiAvKiogY3JlYXRlcyBhIHRhYmxlIGhhbmRsZXIgZ2l2ZW4gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0LAogICogIGluc2VydHMgaXQgaW50byB0aGUgcmVxdWVzdCBjaGFpbiBhbmQgdGhlbiBjYWxscwpAQCAtMTA4LDEwICsxNTEsMjEgQEAKIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFicmVxKQogewotICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcih0YWJyZXEpKTsKKyAgICBpbnQgcmMgPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIG5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIodGFicmVxKSk7CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIHJjOworCiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KIAoraW50CituZXRzbm1wX3VucmVnaXN0ZXJfdGFibGUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKK3sKKyAgICAvKiBMb2NhdGUgInRoaXMiIHJlZ2luZm8gKi8KKyAgICAvKiBTTk1QX0ZSRUUocmVnaW5mby0+bXl2b2lkKTsgKi8KKyAgICByZXR1cm4gbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIocmVnaW5mbyk7Cit9CisKIC8qKiBFeHRyYWN0cyB0aGUgcHJvY2Vzc2VkIHRhYmxlIGluZm9ybWF0aW9uIGZyb20gYSBnaXZlbiByZXF1ZXN0LgogICogIENhbGwgdGhpcyBmcm9tIHN1YmhhbmRsZXJzIG9uIGEgcmVxdWVzdCB0byBleHRyYWN0IHRoZSBwcm9jZXNzZWQKICAqICBuZXRzbm1wX3JlcXVlc3RfaW5mbyBpbmZvcm1hdGlvbi4gIFRoZSByZXN1bHRpbmcgaW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlCkBAIC0xNTAsOCArMjA0LDggQEAKICAgICBpbnQgICAgICAgICAgICAgb2lkX2luZGV4X3BvczsKICAgICB1bnNpZ25lZCBpbnQgICAgb2lkX2NvbHVtbl9wb3M7CiAgICAgdW5zaWduZWQgaW50ICAgIHRtcF9pZHg7Ci0gICAgc2l6ZV90CSAgICB0bXBfbGVuOwotICAgIGludCAgICAgICAgICAgICBpbmNvbXBsZXRlLCBvdXRfb2ZfcmFuZ2UsIGNsZWFuZWRfdXAgPSAwOworICAgIHNzaXplX3QgCSAgICB0bXBfbGVuOworICAgIGludCAgICAgICAgICAgICBpbmNvbXBsZXRlLCBvdXRfb2ZfcmFuZ2U7CiAgICAgaW50ICAgICAgICAgICAgIHN0YXR1cyA9IFNOTVBfRVJSX05PRVJST1IsIG5lZWRfcHJvY2Vzc2luZyA9IDA7CiAgICAgb2lkICAgICAgICAgICAgKnRtcF9uYW1lOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YmxfcmVxX2luZm87CkBAIC0xNzcsOCArMjMxLDkgQEAKIAogICAgIERFQlVHSUYoImhlbHBlcjp0YWJsZTpyZXEiKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGU6cmVxIiwKLSAgICAgICAgICAgICAgICAgICAgIkdvdCByZXF1ZXN0IGZvciBoYW5kbGVyICVzOiBiYXNlIG9pZDoiLAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLT5oYW5kbGVyX25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgIkdvdCAlcyAoJWQpIG1vZGUgcmVxdWVzdCBmb3IgaGFuZGxlciAlczogYmFzZSBvaWQ6IiwKKyAgICAgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpLAorICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlLCBoYW5kbGVyLT5oYW5kbGVyX25hbWUpKTsKICAgICAgICAgREVCVUdNU0dPSUQoKCJoZWxwZXI6dGFibGU6cmVxIiwgcmVnaW5mby0+cm9vdG9pZCwKICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuKSk7CiAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOnRhYmxlOnJlcSIsICJcbiIpKTsKQEAgLTE5MywxNSArMjQ4LDIwIEBACiAgICAgICogaW4gdGhlIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvLiAKICAgICAgKi8KICAgICBpZiAobmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKHJlcWluZm8sIGhhbmRsZXItPm5leHQtPmhhbmRsZXJfbmFtZSkpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGlmIChNT0RFX0lTX1NFVChyZXFpbmZvLT5tb2RlKSkgewogICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKICAgICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIC8qKiBYWFgtcmtzOiBtZW1vcnkgbGVhay4gYWRkIGNsZWFudXAgaGFuZGxlcj8gKi8KICAgICAgICAgICAgIG5ldHNubXBfZnJlZV9hZ2VudF9kYXRhX3NldHMocmVxaW5mbyk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGlmICggTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkgJiYKICAgICAgICAgIChyZXFpbmZvLT5tb2RlICE9IE1PREVfU0VUX1JFU0VSVkUxKSkgewogICAgICAgICAvKgpAQCAtMjExLDE1ICsyNzEsMTYgQEAKICAgICAgICAgICogYSB2YWxpZCB0YWJsZSBpbmZvIHBvaW50ZXIpLgogICAgICAgICAgKi8KICAgICAgICAgaWYoTlVMTCA9PSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cykpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZTpoZWxwZXIiLCJubyB0YWJsZSBpbmZvIGZvciBzZXQgLSBza2lwcGluZ1xuIikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZSIsIm5vIHRhYmxlIGluZm8gZm9yIHNldCAtIHNraXBwaW5nXG4iKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbmVlZF9wcm9jZXNzaW5nID0gMTsKICAgICB9CiAgICAgZWxzZSB7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIGZvciBSRVNFUlZFMSBhbmQgR0VUUywgb25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGF0IGxlYXN0Ci0gICAgICAgICAqIG9uZSB2YWxpZCByZXF1ZXN0LgorICAgICAgICAgKiBmb3IgR0VUUywgb25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB2YWxpZCByZXF1ZXN0LgorICAgICAgICAgKiBmb3IgUkVTRVJWRTEsIG9ubHkgY29udGludWUgaWYgd2UgaGF2ZSBpbmRleGVzIGZvciBhbGwgcmVxdWVzdHMuCiAgICAgICAgICAqLwogICAgICAgICAgICAKICAgICAvKgpAQCAtMjUyLDYgKzMxMyw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkgewogICAgICAgICAgICAgREVCVUdJRigiaGVscGVyOnRhYmxlOnNldCIpIHsKICAgICAgICAgICAgICAgICB1X2NoYXIgICAgICAgICAqYnVmID0gTlVMTDsKQEAgLTI2MCw3ICszMjIsNyBAQAogICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgiaGVscGVyOnRhYmxlOnNldCIsIHZhci0+bmFtZSwgdmFyLT5uYW1lX2xlbmd0aCkpOwogICAgICAgICAgICAgICAgIG91dF9sZW4gPSAwOwogICAgICAgICAgICAgICAgIGlmIChzcHJpbnRfcmVhbGxvY19ieV90eXBlKCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIsIDAsIDAsIDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLCBOVUxMLCBOVUxMLCBOVUxMKSkgewogICAgICAgICAgICAgICAgICAgICBERUJVR01TRygoImhlbHBlcjp0YWJsZTpzZXQiLCIgdHlwZT0lZCglMDJ4KSwgdmFsdWU9JXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnR5cGUsIHZhci0+dHlwZSwgYnVmKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI3OSw2ICszNDEsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNoZWNrIHRvIG1ha2Ugc3VyZSBpdHMgaW4gdGFibGUgcmFuZ2UgCkBAIC0zMzQsMTAgKzM5NywxMyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqICBSZWplY3QgcmVxdWVzdHMgb2YgdGhlIGZvcm0gJ215VGFibGUuTicgICAoTiAhPSAxKQogICAgICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpCiAgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT1RXUklUQUJMRSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUKQorICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQpCiAgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSE9CSkVDVCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM1Miw2ICs0MTgsMTEgQEAKICAgICAgICAgdGJsX3JlcV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CiAgICAgICAgIGlmIChOVUxMID09IHRibF9yZXFfaW5mbykgewogICAgICAgICAgICAgdGJsX3JlcV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyk7CisgICAgICAgICAgICBpZiAodGJsX3JlcV9pbmZvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0YmxfcmVxX2luZm8tPnJlZ19pbmZvID0gdGJsX2luZm87CiAgICAgICAgICAgICB0YmxfcmVxX2luZm8tPmluZGV4ZXMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQodGJsX2luZm8tPmluZGV4ZXMpOwogICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5udW1iZXJfaW5kZXhlcyA9IDA7ICAgICAgIC8qIG5vbmUgeWV0ICovCkBAIC0zNzEsNyArNDQyLDggQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBvaWQgaXMgbG9uZyBlbm91Z2ggdG8gY29udGFpbiBDT0xVTU4gaW5mbwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlOmNvbCIsICIgIGhhdmUgYXQgbGVhc3QgYSBjb2x1bW4gKCVkKVxuIiwKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGU6Y29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgIGhhdmUgYXQgbGVhc3QgYSBjb2x1bW4gKCUiIE5FVFNOTVBfUFJJbyAiZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWVbb2lkX2NvbHVtbl9wb3NdKSk7CiAgICAgICAgICAgICBpZiAodmFyLT5uYW1lW29pZF9jb2x1bW5fcG9zXSA8IHRibF9pbmZvLT5taW5fY29sdW1uKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpjb2wiLApAQCAtNDAzLDEwICs0NzUsMTIgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqICBSZWplY3QgcmVxdWVzdHMgb2YgdGhlIGZvcm0gJ215RW50cnkuTicgICAoaW52YWxpZCBOKQogICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgICAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkKICAgICAgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9UV1JJVEFCTEUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNUKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQyNyw4ICs1MDEsOSBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAodGJsX3JlcV9pbmZvLT5jb2xudW0gIT0gdmFyLT5uYW1lW29pZF9jb2x1bW5fcG9zXSkgewogICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlOmNvbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgd2hpY2ggZG9lc24ndCBtYXRjaCByZXEgJWQgLSB0cnVuY2F0aW5nIGluZGV4IGluZm9cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZVtvaWRfY29sdW1uX3Bvc10pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB3aGljaCBkb2Vzbid0IG1hdGNoIHJlcSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiBORVRTTk1QX1BSSW8gImQgLSB0cnVuY2F0aW5nIGluZGV4IGluZm9cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZVtvaWRfY29sdW1uX3Bvc10pKTsKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogZGlmZmVyZW50IGNvbHVtbiEgdHJ1bmNhdGUgdXNlbGVzcyBpbmRleCBpbmZvIAogICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ0Nyw4ICs1MjIsOCBAQAogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHRibF9yZXFfaW5mby0+aW5kZXhfb2lkX2xlbiA9CiAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZV9sZW5ndGggLSBvaWRfaW5kZXhfcG9zOwotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGUiLCAiICAgIGhhdmUgJWQgYnl0ZXMgb2YgaW5kZXhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5pbmRleF9vaWRfbGVuKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZSIsICIgICAgaGF2ZSAlbHUgYnl0ZXMgb2YgaW5kZXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpdGJsX3JlcV9pbmZvLT5pbmRleF9vaWRfbGVuKSk7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQodGJsX3JlcV9pbmZvLT5pbmRleF9vaWRfbGVuIDwgTUFYX09JRF9MRU4pOwogICAgICAgICAgICAgICAgIG1lbWNweSh0YmxfcmVxX2luZm8tPmluZGV4X29pZCwgJnZhci0+bmFtZVtvaWRfaW5kZXhfcG9zXSwKICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5pbmRleF9vaWRfbGVuICogc2l6ZW9mKG9pZCkpOwpAQCAtNDczLDggKzU0OCwxMCBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVCApIHsKICAgICAgICAgICAgICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSE9CSkVDVCk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgfSBlbHNlIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxICkgewogICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01MDAsNiArNTc3LDggQEAKICAgICAgICAgZm9yICh0bXBfaWR4ID0gMCwgdmIgPSB0YmxfcmVxX2luZm8tPmluZGV4ZXM7CiAgICAgICAgICAgICAgdG1wX2lkeCA8IHRibF9pbmZvLT5udW1iZXJfaW5kZXhlczsKICAgICAgICAgICAgICArK3RtcF9pZHgsIHZiID0gdmItPm5leHRfdmFyaWFibGUpIHsKKyAgICAgICAgICAgIHNpemVfdCBwYXJzZWRfb2lkX2xlbjsKKwogICAgICAgICAgICAgaWYgKGluY29tcGxldGUgJiYgdG1wX2xlbikgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogaW5jb21wbGV0ZS9pbGxlZ2FsIE9JRCwgc2V0IHVwIGR1bW15IDAgdG8gcGFyc2UgCkBAIC01MTQsMjkgKzU5MywyNyBAQAogICAgICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICogUmVqZWN0IHJlcXVlc3RzIG9mIHRoZSBmb3JtICdteU9iamVjdCcgICAobm8gaW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgIT0gTU9ERV9HRVRORVhUKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSElOU1RBTkNFKTsKLSAgICAgICAgICAgICAgICAgICAgY2xlYW5lZF91cCA9IDE7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRtcF9sZW4gPSAwOwotICAgICAgICAgICAgICAgIHRtcF9uYW1lID0gKG9pZCAqKSAmIHRtcF9sZW47CisgICAgICAgICAgICAgICAgdG1wX25hbWUgPSBOVUxMOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHRyeSBhbmQgcGFyc2UgY3VycmVudCBpbmRleCAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHBhcnNlX29uZV9vaWRfaW5kZXgoJnRtcF9uYW1lLCAmdG1wX2xlbiwKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHRtcF9sZW4gPj0gMCk7CisgICAgICAgICAgICBwYXJzZWRfb2lkX2xlbiA9IHRtcF9sZW47CisgICAgICAgICAgICBpZiAocGFyc2Vfb25lX29pZF9pbmRleCgmdG1wX25hbWUsICZwYXJzZWRfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiLCAxKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgICBpbmNvbXBsZXRlID0gMTsKICAgICAgICAgICAgICAgICB0bXBfbGVuID0gLTE7ICAgLyogaXMgdGhpcyBuZWNlc3Nhcnk/IEJldHRlciBzYWZlIHRoYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc29ycnkgKi8KICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG1wX2xlbiA9IHBhcnNlZF9vaWRfbGVuOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGUiLCAiICBnb3QgMSAoaW5jb21wbGV0ZT0lZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wbGV0ZSkpOwogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogZG8gbm90IGNvdW50IGluY29tcGxldGUgaW5kZXhlcyAKICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlIiwgIiAgZ290IDEgKGluY29tcGxldGU9JWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tcGxldGUpKTsKICAgICAgICAgICAgICAgICBpZiAoaW5jb21wbGV0ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgKyt0YmxfcmVxX2luZm8tPm51bWJlcl9pbmRleGVzOyAvKiogZ290IG9uZSBvayAqLwpAQCAtNTQ5LDEyICs2MjYsMTEgQEAKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyoqIGZvciBsb29wICovCiAKICAgICAgICAgREVCVUdJRigiaGVscGVyOnRhYmxlOnJlc3VsdHMiKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlOnJlc3VsdHMiLCAiICBmb3VuZCAlZCBpbmRleGVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5udW1iZXJfaW5kZXhlcykpOwotICAgICAgICAgICAgaWYgKCFjbGVhbmVkX3VwKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgIGNvdW50OwogICAgICAgICAgICAgICAgIHVfY2hhciAgICAgICAgICpidWYgPSBOVUxMOwogICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuID0gMCwgb3V0X2xlbiA9IDA7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpyZXN1bHRzIiwgIiAgZm91bmQgJWQgaW5kZXhlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfcmVxX2luZm8tPm51bWJlcl9pbmRleGVzKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpyZXN1bHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBjb2x1bW46ICVkLCBpbmRleGVzOiAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5jb2xudW0sCkBAIC01NjQsNyArNjQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGNvdW50KyssIHZiID0gdmItPm5leHRfdmFyaWFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0X2xlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzcHJpbnRfcmVhbGxvY19ieV90eXBlKCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmIsIDAsIDAsIDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiLCBOVUxMLCBOVUxMLCBOVUxMKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6dGFibGU6cmVzdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGluZGV4OiB0eXBlPSVkKCUwMngpLCB2YWx1ZT0lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmItPnR5cGUsIHZiLT50eXBlLCBidWYpKTsKQEAgLTU4NCw3ICs2NjAsNiBAQAogICAgICAgICAgICAgICAgICAgICBmcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOnRhYmxlOnJlc3VsdHMiLCAiXG4iKSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAogCkBAIC01OTUsOCArNjcwLDI0IEBACiAgICAgICAgIGlmICgocmVxaW5mby0+bW9kZSAhPSBNT0RFX0dFVE5FWFQpICYmCiAgICAgICAgICAgICAoKHRibF9yZXFfaW5mby0+bnVtYmVyX2luZGV4ZXMgIT0gdGJsX2luZm8tPm51bWJlcl9pbmRleGVzKSB8fAogICAgICAgICAgICAgICh0bXBfbGVuICE9IC0xKSkpIHsKKwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBpbmRleChlcykgZm9yIHRhYmxlIC0gc2tpcHBpbmdcbiIpKTsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgICAgIGlmICggTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkgKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBubyBwb2ludCBpbiBjb250aW51aW5nIHdpdGhvdXQgaW5kZXhlcyBmb3Igc2V0LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpOworICAgICAgICAgICAgICAgIC8qKiBjbGVhciBmaXJzdCByZXF1ZXN0IHNvIHdlIHdvbnQgdHJ5IHRvIHJ1biBGUkVFIG1vZGUgKi8KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldHMocmVxdWVzdHMpOworICAgICAgICAgICAgICAgIC8qKiBzZXQgYWN0dWFsIGVycm9yICovCisgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfTk9DUkVBVElPTik7CisgICAgICAgICAgICAgICAgbmVlZF9wcm9jZXNzaW5nID0gMDsgLyogZG9uJ3QgY2FsbCBuZXh0IGhhbmRsZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNISU5TVEFOQ0UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTYwNSw3ICs2OTYsOSBAQAogICAgICAgICArK25lZWRfcHJvY2Vzc2luZzsKIAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgZWFjaCByZXF1ZXN0ICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogYmFpbCBpZiB0aGVyZSBpcyBub3RoaW5nIGZvciBvdXIgY2hpbGQgaGFuZGxlcnMKQEAgLTcxOCw2ICs4MTEsNyBAQAogCiAvKiogY3JlYXRlIHNwYXJzZSB0YWJsZSBoYW5kbGVyCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9TUEFSU0UKIG5ldHNubXBfbWliX2hhbmRsZXIgKgogbmV0c25tcF9zcGFyc2VfdGFibGVfaGFuZGxlcl9nZXQodm9pZCkKIHsKQEAgLTczMywxNCArODI3LDQxIEBACiBuZXRzbm1wX3NwYXJzZV90YWJsZV9yZWdpc3RlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJyZXEpCiB7Ci0gICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLAotICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKFNQQVJTRV9UQUJMRV9IQU5ETEVSX05BTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhcnNlX3RhYmxlX2hlbHBlcl9oYW5kbGVyKSk7Ci0gICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyKHRhYnJlcSkpOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIxLCAqaGFuZGxlcjI7CisgICAgaW50IHJjOworCisgICAgaGFuZGxlcjEgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKFNQQVJTRV9UQUJMRV9IQU5ETEVSX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhcnNlX3RhYmxlX2hlbHBlcl9oYW5kbGVyKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyMSkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGhhbmRsZXIyID0gbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcih0YWJyZXEpOworICAgIGlmIChOVUxMID09IGhhbmRsZXIyICkgeworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyMSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIxKTsKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIxKTsKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcjIpOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIyKTsKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qKiBoYW5kbGVyMSBpcyBpbiByZWdpbmZvLi4uIHJlbW92ZSBhbmQgZnJlZT8/ICovCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIyKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIC8qKiBib3RoIGhhbmRsZXJzIG5vdyBpbiByZWdpbmZvLCBzbyBub3RoaW5nIHRvIGRvIG9uIGVycm9yICovCiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1NQQVJTRSAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9CVUlMRF9SRVNVTFQKIC8qKiBCdWlsZHMgdGhlIHJlc3VsdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYWdlbnQgZ2l2ZW4gdGhlIHRhYmxlIGluZm9ybWF0aW9uLgogICogIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiByZXN1bHRzIGZyb20gbG93ZWwgbGV2ZWwgaGFuZGxlcnMgdG8KICAqICB0aGUgYWdlbnQuICBJdCB0YWtlcyBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBwcm9wZXIgcmVzdWx0aW5nIG9pZApAQCAtNzc0LDcgKzg5NSw2IEBACiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAotCiAvKiogZ2l2ZW4gYSByZWdpc3RyYXRpb24gaW5mbyBvYmplY3QsIGEgcmVxdWVzdCBvYmplY3QgYW5kIHRoZSB0YWJsZQogICogIGluZm8gb2JqZWN0IGl0IGJ1aWxkcyB0aGUgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lIG9pZCBmcm9tIHRoZQogICogIGluZGV4IHZhbHVlcyBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB0YWJsZV9pbmZvCkBAIC04MTEsNiArOTMxLDcgQEAKIAogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9CVUlMRF9SRVNVTFQgKi8KIAogLyoqIGdpdmVuIGEgcmVnaXN0cmF0aW9uIGluZm8gb2JqZWN0LCBhIHJlcXVlc3Qgb2JqZWN0IGFuZCB0aGUgdGFibGUKICAqICBpbmZvIG9iamVjdCBpdCBidWlsZHMgdGhlIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSBvaWQgZnJvbSB0aGUKQEAgLTkyOSw2ICsxMDUwLDQyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKgorbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19jbG9uZShuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0cmkpCit7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqY29weTsKKyAgICBjb3B5ID0gbWFsbG9jKHNpemVvZigqY29weSkpOworICAgIGlmIChjb3B5KSB7CisgICAgICAgICpjb3B5ID0gKnRyaTsKKyAgICAgICAgY29weS0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZCh0cmktPmluZGV4ZXMpOworICAgICAgICBpZiAoIWNvcHktPmluZGV4ZXMpIHsKKyAgICAgICAgICAgIGZyZWUoY29weSk7CisgICAgICAgICAgICBjb3B5ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY29weTsKK30KKwordm9pZAorbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRyaSkKK3sKKyAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOVUxMICE9IHRyaS0+aW5kZXhlcykKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodHJpLT5pbmRleGVzKTsKKworI2lmIDAKKyAgICAvKgorICAgICAqIHNpZ2guLi4gZXhhbXBsZSB1c2Ugb2YgdmFsaWRfY29sdW1ucyBwb2ludHMgdG8gc3RhdGljIG1lbW9yeSwKKyAgICAgKiBzbyBmcmVlaW5nIGl0IHdvdWxkIGJlIGJhZC4uLiB3ZSdsbCBqdXN0IGhhdmUgdG8gbGl2ZSB3aXRoIGFueQorICAgICAqIGxlYWtzLCBmb3Igbm93Li4uCisgICAgICovCisjZW5kaWYKKworICAgIGZyZWUodHJpKTsKK30KKwogLyoqIEB9ICovCiAKIC8qCkBAIC0xMDU0LDMzICsxMjExLDIwIEBACiAgKgogICovCiB2b2lkCi0jaWYgSEFWRV9TVERBUkdfSAogbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXMobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCi0jZWxzZQotbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModmFfYWxpc3QpCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7CiAgICAgdmFfbGlzdCAgICAgICAgIGRlYnVnYXJnczsKICAgICBpbnQgICAgICAgICAgICAgdHlwZTsKIAotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2YV9zdGFydChkZWJ1Z2FyZ3MsIHRpbmZvKTsKLSNlbHNlCi0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGluZm87Ci0KLSAgICB2YV9zdGFydChkZWJ1Z2FyZ3MpOwotICAgIHRpbmZvID0gdmFfYXJnKGRlYnVnYXJncywgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqKTsKLSNlbmRpZgotCiAgICAgd2hpbGUgKCh0eXBlID0gdmFfYXJnKGRlYnVnYXJncywgaW50KSkgIT0gMCkgewogICAgICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXgodGluZm8sIHR5cGUpOwogICAgIH0KLQogICAgIHZhX2VuZChkZWJ1Z2FyZ3MpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RhdGljIHZvaWQKIF9yb3dfc3Rhc2hfZGF0YV9saXN0X2ZyZWUodm9pZCAqcHRyKSB7CiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnRtcCA9IChuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqKXB0cjsKQEAgLTEwODgsNiArMTIzMiw3IEBACiAgICAgZnJlZShwdHIpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfR0VUX09SX0NSRUFURV9ST1dfU1RBU0gKIC8qKiByZXR1cm5zIGEgcm93LXdpZGUgcGxhY2UgdG8gc3RvcmUgZGF0YSBpbi4KICAgICBAdG9kbyBUaGlzIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IGNoYW5nZSB0byBhZGQgZnJlZSBwb2ludGVyIGZ1bmN0aW9ucy4gKi8KIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKioKQEAgLTEwOTYsNyArMTI0MSw3IEBACiB7CiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnN0YXNocCA9IE5VTEw7CiAgICAgc3Rhc2hwID0gKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKiopCi0gICAgICAgIG5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBzdG9yYWdlX25hbWUpOworICAgICAgICBuZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEocmVxaW5mbywgKGNvbnN0IGNoYXIgKikgc3RvcmFnZV9uYW1lKTsKIAogICAgIGlmICghc3Rhc2hwKSB7CiAgICAgICAgIC8qCkBAIC0xMTA4LDEyICsxMjUzLDE0IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgIC8qIGFjay4gb3V0IG9mIG1lbSAqLwogCiAgICAgICAgIG5ldHNubXBfYWdlbnRfYWRkX2xpc3RfZGF0YShyZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KHN0b3JhZ2VfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdCgoY29uc3QgY2hhciAqKSBzdG9yYWdlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rhc2hwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yb3dfc3Rhc2hfZGF0YV9saXN0X2ZyZWUpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXNocDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0dFVF9PUl9DUkVBVEVfUk9XX1NUQVNIICovCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBhZHZhbmNlIHRoZSB0YWJsZSBpbmZvIGNvbG51bSB0byB0aGUgbmV4dCBjb2x1bW4sIG9yIDAgaWYgdGhlcmUgYXJlIG5vIG1vcmUKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYwppbmRleCAxOWI5YzVjLi43Yzk4YWFlIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jCkBAIC00LDYgKzQsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5Lmg+CiAKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xMSwxNCArMTcsMTkgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2FycmF5X2FsbCwgbWliX2hlbHBlcnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9hcnJheV9yZWdpc3Rlcix0YWJsZV9hcnJheV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfYXJyYXlfZmluZF90YWJsZV9hcnJheV9oYW5kbGVyLHRhYmxlX2FycmF5X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9hcnJheV9leHRyYWN0X2FycmF5X2NvbnRleHQsdGFibGVfYXJyYXlfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2FycmF5X2NoZWNrX3Jvd19zdGF0dXMsdGFibGVfYXJyYXlfYWxsKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSCisKIC8qCiAgKiBzbm1wLmg6I2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfQkVHSU4gICAgICAgIC0xIAogICogc25tcC5oOiNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxICAgICAwIApAQCAtMTkzLDYgKzIwNCw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnaW5mbywgdGFicmVnKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX1JFR0lTVEVSCiBpbnQKIG5ldHNubXBfdGFibGVfYXJyYXlfcmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFicmVnLApAQCAtMjA2LDggKzIxOCwxMCBAQAogICAgIHJldHVybiBuZXRzbm1wX3RhYmxlX2NvbnRhaW5lcl9yZWdpc3RlcihyZWdpbmZvLCB0YWJyZWcsIGNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsIGdyb3VwX3Jvd3MpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQVJSQVlfUkVHSVNURVIgKi8KIAogLyoqIGZpbmQgdGhlIGhhbmRsZXIgZm9yIHRoZSB0YWJsZV9hcnJheSBoZWxwZXIuICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQVJSQVlfRklORF9UQUJMRV9BUlJBWV9IQU5ETEVSCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfZmluZF90YWJsZV9hcnJheV9oYW5kbGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pCiB7CkBAIC0yMjMsMTUgKzIzNywxOSBAQAogCiAgICAgcmV0dXJuIG1oOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQVJSQVlfRklORF9UQUJMRV9BUlJBWV9IQU5ETEVSICovCiAKIC8qKiBmaW5kIHRoZSBjb250ZXh0IGRhdGEgdXNlZCBieSB0aGUgdGFibGVfYXJyYXkgaGVscGVyICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQVJSQVlfRVhUUkFDVF9BUlJBWV9DT05URVhUCiBuZXRzbm1wX2NvbnRhaW5lciAgICAgICoKIG5ldHNubXBfZXh0cmFjdF9hcnJheV9jb250ZXh0KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0KQogewotICAgIHJldHVybiBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUQUJMRV9BUlJBWV9OQU1FKTsKKyAgICByZXR1cm4gKG5ldHNubXBfY29udGFpbmVyKiluZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUQUJMRV9BUlJBWV9OQU1FKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0VYVFJBQ1RfQVJSQVlfQ09OVEVYVCAqLwogCiAvKiogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gdmFsaWRhdGUgUm93U3RhdHVzIHRyYW5zaXRpb25zLiAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0NIRUNLX1JPV19TVEFUVVMKIGludAogbmV0c25tcF90YWJsZV9hcnJheV9jaGVja19yb3dfc3RhdHVzKG5ldHNubXBfdGFibGVfYXJyYXlfY2FsbGJhY2tzICpjYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ3JvdXAgKmFnLApAQCAtMzEwLDYgKzMyOCw3IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0NIRUNLX1JPV19TVEFUVVMgKi8KIAogLyoqIEB9ICovCiAKQEAgLTM0NCwzNyArMzYzLDEzIEBACiAvKgogICogY29udGV4dCBpbmZvIGZvciBTRVQgcmVxdWVzdHMKICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHR5cGVkZWYgc3RydWN0IHNldF9jb250ZXh0X3MgewogICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbzsKICAgICB0YWJsZV9jb250YWluZXJfZGF0YSAqdGFkOwogICAgIGludCAgICAgICAgICAgICBzdGF0dXM7CiB9IHNldF9jb250ZXh0OwotCi1zdGF0aWMgdm9pZAotcmVsZWFzZV9uZXRzbm1wX3JlcXVlc3RfZ3JvdXAobmV0c25tcF9pbmRleCAqZywgdm9pZCAqdikKLXsKLSAgICBuZXRzbm1wX3JlcXVlc3RfZ3JvdXBfaXRlbSAqdG1wOwotICAgIG5ldHNubXBfcmVxdWVzdF9ncm91cCAqZ3JvdXAgPSAobmV0c25tcF9yZXF1ZXN0X2dyb3VwICopIGc7Ci0KLSAgICBpZiAoIWcpCi0gICAgICAgIHJldHVybjsKLSAgICB3aGlsZSAoZ3JvdXAtPmxpc3QpIHsKLSAgICAgICAgdG1wID0gZ3JvdXAtPmxpc3Q7Ci0gICAgICAgIGdyb3VwLT5saXN0ID0gdG1wLT5uZXh0OwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotCi0gICAgZnJlZShncm91cCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZWxlYXNlX25ldHNubXBfcmVxdWVzdF9ncm91cHModm9pZCAqdnApCi17Ci0gICAgbmV0c25tcF9jb250YWluZXIgKmMgPSAobmV0c25tcF9jb250YWluZXIqKXZwOwotICAgIENPTlRBSU5FUl9GT1JfRUFDSChjLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKQotICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX25ldHNubXBfcmVxdWVzdF9ncm91cCwgTlVMTCk7Ci0gICAgQ09OVEFJTkVSX0ZSRUUoYyk7Ci19CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIHZvaWQKIGJ1aWxkX25ld19vaWQobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTQ4OCw3ICs0ODMsNyBAQAogICAgICAgICAgICAgaW5kZXgub2lkcyA9IHRibHJlcV9pbmZvLT5pbmRleF9vaWQ7CiAgICAgICAgICAgICBpbmRleC5sZW4gPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkX2xlbjsKIAotICAgICAgICAgICAgcm93ID0gQ09OVEFJTkVSX0ZJTkQodGFkLT50YWJsZSwgJmluZGV4KTsKKyAgICAgICAgICAgIHJvdyA9IChuZXRzbm1wX2luZGV4KilDT05UQUlORVJfRklORCh0YWQtPnRhYmxlLCAmaW5kZXgpOwogICAgICAgICAgICAgaWYgKCFyb3cpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFibGVfYXJyYXk6Z2V0IiwgIm5vIHJvdyBmb3VuZFxuIikpOwogICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoYWd0cmVxX2luZm8sIGN1cnJlbnQsCkBAIC01NTUsNyArNTUwLDcgQEAKICAgICAgICAgICovCiAgICAgICAgIGluZGV4Lm9pZHMgPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkOwogICAgICAgICBpbmRleC5sZW4gPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkX2xlbjsKLSAgICAgICAgdG1wID0gQ09OVEFJTkVSX0ZJTkQocmVxdWVzdF9ncm91cCwgJmluZGV4KTsKKyAgICAgICAgdG1wID0gKG5ldHNubXBfaW5kZXgqKUNPTlRBSU5FUl9GSU5EKHJlcXVlc3RfZ3JvdXAsICZpbmRleCk7CiAgICAgICAgIGlmICh0bXApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZV9hcnJheTpncm91cCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGV4aXN0aW5nIGdyb3VwOiIpKTsKQEAgLTU2NCw2ICs1NTksOCBAQAogICAgICAgICAgICAgREVCVUdNU0coKCJ0YWJsZV9hcnJheTpncm91cCIsICJcbiIpKTsKICAgICAgICAgICAgIGcgPSAobmV0c25tcF9yZXF1ZXN0X2dyb3VwICopIHRtcDsKICAgICAgICAgICAgIGkgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfcmVxdWVzdF9ncm91cF9pdGVtKTsKKyAgICAgICAgICAgIGlmIChpID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgaS0+cmkgPSBjdXJyZW50OwogICAgICAgICAgICAgaS0+dHJpID0gdGJscmVxX2luZm87CiAgICAgICAgICAgICBpLT5uZXh0ID0gZy0+bGlzdDsKQEAgLTU3OSw2ICs1NzYsMTEgQEAKICAgICAgICAgREVCVUdNU0coKCJ0YWJsZV9hcnJheTpncm91cCIsICJcbiIpKTsKICAgICAgICAgZyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9yZXF1ZXN0X2dyb3VwKTsKICAgICAgICAgaSA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9yZXF1ZXN0X2dyb3VwX2l0ZW0pOworICAgICAgICBpZiAoaSA9PSBOVUxMIHx8IGcgPT0gTlVMTCkgeworICAgICAgICAgICAgU05NUF9GUkVFKGkpOworICAgICAgICAgICAgU05NUF9GUkVFKGcpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGctPmxpc3QgPSBpOwogICAgICAgICBnLT50YWJsZSA9IHRhZC0+dGFibGU7CiAgICAgICAgIGktPnJpID0gY3VycmVudDsKQEAgLTU4OSwxMyArNTkxLDE1IEBACiAgICAgICAgICAqIHNlYXJjaCBmb3Igcm93LiBhbGwgY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgcm93LAogICAgICAgICAgKiBsYXRlciwgd2UnbGwgbWFrZSBhIGNvcHkgaW4gdW5kb19pbmZvIGJlZm9yZSB3ZSBzdGFydCBwcm9jZXNzaW5nLgogICAgICAgICAgKi8KLSAgICAgICAgcm93ID0gZy0+ZXhpc3Rpbmdfcm93ID0gQ09OVEFJTkVSX0ZJTkQodGFkLT50YWJsZSwgJmluZGV4KTsKKyAgICAgICAgcm93ID0gZy0+ZXhpc3Rpbmdfcm93ID0gKG5ldHNubXBfaW5kZXgqKUNPTlRBSU5FUl9GSU5EKHRhZC0+dGFibGUsICZpbmRleCk7CiAgICAgICAgIGlmICghZy0+ZXhpc3Rpbmdfcm93KSB7CiAgICAgICAgICAgICBpZiAoIXRhZC0+Y2ItPmNyZWF0ZV9yb3cpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICAgICAgaWYoTU9ERV9JU19TRVQoYWd0cmVxX2luZm8tPm1vZGUpKQogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKGFndHJlcV9pbmZvLCBjdXJyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKICAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoYWd0cmVxX2luZm8sIGN1cnJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CiAgICAgICAgICAgICAgICAgZnJlZShnKTsKQEAgLTYyNCw2ICs2MjgsMzMgQEAKICAgICB9IC8qKiBmb3IoIGN1cnJlbnQgLi4uICkgKi8KIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK3N0YXRpYyB2b2lkCityZWxlYXNlX25ldHNubXBfcmVxdWVzdF9ncm91cChuZXRzbm1wX2luZGV4ICpnLCB2b2lkICp2KQoreworICAgIG5ldHNubXBfcmVxdWVzdF9ncm91cF9pdGVtICp0bXA7CisgICAgbmV0c25tcF9yZXF1ZXN0X2dyb3VwICpncm91cCA9IChuZXRzbm1wX3JlcXVlc3RfZ3JvdXAgKikgZzsKKworICAgIGlmICghZykKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxlIChncm91cC0+bGlzdCkgeworICAgICAgICB0bXAgPSBncm91cC0+bGlzdDsKKyAgICAgICAgZ3JvdXAtPmxpc3QgPSB0bXAtPm5leHQ7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICB9CisKKyAgICBmcmVlKGdyb3VwKTsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfbmV0c25tcF9yZXF1ZXN0X2dyb3Vwcyh2b2lkICp2cCkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYyA9IChuZXRzbm1wX2NvbnRhaW5lciopdnA7CisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGMsIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopCisgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfbmV0c25tcF9yZXF1ZXN0X2dyb3VwLCBOVUxMKTsKKyAgICBDT05UQUlORVJfRlJFRShjKTsKK30KKwogc3RhdGljIHZvaWQKIHByb2Nlc3Nfc2V0X2dyb3VwKG5ldHNubXBfaW5kZXggKm8sIHZvaWQgKmMpCiB7CkBAIC04MTcsNiArODQ4LDcgQEAKIAogICAgIHJldHVybiBjb250ZXh0LnN0YXR1czsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODUyLDYgKzg4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIG1vZGVfbmFtZVthZ3RyZXFfaW5mby0+bW9kZV0pKTsKICAgICB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgaWYgKE1PREVfSVNfU0VUKGFndHJlcV9pbmZvLT5tb2RlKSkgewogICAgICAgICAvKgogICAgICAgICAgKiBuZXRzbm1wX211dGV4X2xvY2soJnRhZC0+bG9jayk7CkBAIC04NjIsNiArODk1LDcgQEAKICAgICAgICAgICogbmV0c25tcF9tdXRleF91bmxvY2soJnRhZC0+bG9jayk7CiAgICAgICAgICAqLwogICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICByYyA9IHByb2Nlc3NfZ2V0X3JlcXVlc3RzKHJlZ2luZm8sIGFndHJlcV9pbmZvLCByZXF1ZXN0cywgdGFkKTsKIAogICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CkBAIC04ODEsNCArOTE1LDUgQEAKICAgICAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVIgKi8KIC8qKiBAZW5kY29uZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMKaW5kZXggZDA4YmZmMi4uMDhlOTc0MSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYworKysgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jCkBAIC00LDYgKzQsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTEsMTQgKzE3LDIxIEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgogCituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZSh0YWJsZV9jb250YWluZXIpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfY29udGFpbmVyLCB0YWJsZV9jb250YWluZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2NvbnRhaW5lcl9yZXBsYWNlX3JvdywgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfZXh0cmFjdCwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfbWFuYWdlbWVudCwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfcm93X3JlbW92ZSwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfcm93X2luc2VydCwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfYWxsLCBtaWJfaGVscGVycykKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUgorCiAvKgogICogc25tcC5oOiNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfU0VUX0JFR0lOICAgICAgICAtMSAKICAqIHNubXAuaDojZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMSAgICAgMCAKQEAgLTM0LDYgKzQ3LDkgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgY29udGFpbmVyX3RhYmxlX2RhdGFfcyB7CiAKKyAgICAvKiogTnVtYmVyIG9mIGhhbmRsZXJzIHdob3NlIG15dm9pZCBwb2ludGVyIHBvaW50cyB0byB0aGlzIHN0cnVjdHVyZS4gKi8KKyAgICBpbnQgcmVmY250OworCiAgICAvKiogcmVnaXN0cmF0aW9uIGluZm8gZm9yIHRoZSB0YWJsZSAqLwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRibHJlZ19pbmZvOwogCkBAIC0xNTksNiArMTc1LDcgQEAKICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfTUFOQUdFTUVOVAogY29udGFpbmVyX3RhYmxlX2RhdGEgKgogbmV0c25tcF90Y29udGFpbmVyX2NyZWF0ZV90YWJsZSggY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGxvbmcgZmxhZ3MgKQpAQCAtMTc5LDcgKzE5Niw3IEBACiAgICAgfQogCiAgICAgaWYgKGZsYWdzKQotICAgICAgICB0YWJsZS0+a2V5X3R5cGUgPSBmbGFncyAmIDB4MDM7ICAvKiBVc2UgbG93ZXN0IHR3byBiaXRzICovCisgICAgICAgIHRhYmxlLT5rZXlfdHlwZSA9IChjaGFyKShmbGFncyAmIDB4MDMpOyAgLyogVXNlIGxvd2VzdCB0d28gYml0cyAqLwogICAgIGVsc2UKICAgICAgICAgdGFibGUtPmtleV90eXBlID0gVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYOwogCkBAIC0yMDMsNiArMjIwLDcgQEAKICAgICBTTk1QX0ZSRUUodGFibGUpOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUl9NQU5BR0VNRU5UICovCiAKICAgICAvKgogICAgICAqIFRoZSB2YXJpb3VzIHN0YW5kYWxvbmUgcm93IG9wZXJhdGlvbiByb3V0aW5lcwpAQCAtMjI5LDYgKzI0Nyw3IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUkVQTEFDRV9ST1cKIGludAogbmV0c25tcF90Y29udGFpbmVyX3JlcGxhY2Vfcm93KCBjb250YWluZXJfdGFibGVfZGF0YSAqdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaW5kZXggKm9sZF9yb3csIG5ldHNubXBfaW5kZXggKm5ld19yb3cgKQpAQCAtMjM5LDYgKzI1OCw3IEBACiAgICAgbmV0c25tcF90Y29udGFpbmVyX2FkZF9yb3coICAgIHRhYmxlLCBuZXdfcm93ICk7CiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUkVQTEFDRV9ST1cgKi8KIAogICAgIC8qIG5ldHNubXBfdGNvbnRhaW5lcl9yZW1vdmVfZGVsZXRlX3JvdygpIHdpbGwgYmUgdGFibGUtc3BlY2lmaWMgdG9vICovCiAKQEAgLTI0OSw2ICsyNjksMjAgQEAKICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKK3N0YXRpYyBjb250YWluZXJfdGFibGVfZGF0YSAqCituZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9kYXRhX2Nsb25lKGNvbnRhaW5lcl90YWJsZV9kYXRhICp0YWQpCit7CisgICAgKyt0YWQtPnJlZmNudDsKKyAgICByZXR1cm4gdGFkOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9jb250YWluZXJfdGFibGVfZGF0YV9mcmVlKGNvbnRhaW5lcl90YWJsZV9kYXRhICp0YWQpCit7CisgICAgaWYgKC0tdGFkLT5yZWZjbnQgPT0gMCkKKwlmcmVlKHRhZCk7Cit9CisKIC8qKiByZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9jb250YWluZXIgaGVscGVyICovCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYnJlZywKQEAgLTI3Myw2ICszMDcsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICB0YWQtPnJlZmNudCA9IDE7CiAgICAgdGFkLT50YmxyZWdfaW5mbyA9IHRhYnJlZzsgIC8qIHdlIG5lZWQgaXQgdG9vLCBidXQgaXQgcmVhbGx5IGlzIG5vdCBvdXJzICovCiAgICAgaWYoa2V5X3R5cGUpCiAgICAgICAgIHRhZC0+a2V5X3R5cGUgPSBrZXlfdHlwZTsKQEAgLTI4OSw2ICszMjQsOCBAQAogICAgICAgICBjb250YWluZXItPm5jb21wYXJlID0gbmV0c25tcF9uY29tcGFyZV9uZXRzbm1wX2luZGV4OwogICAgIAogICAgIGhhbmRsZXItPm15dm9pZCA9ICh2b2lkKil0YWQ7CisgICAgaGFuZGxlci0+ZGF0YV9jbG9uZSA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9kYXRhX2Nsb25lOworICAgIGhhbmRsZXItPmRhdGFfZnJlZSA9ICh2b2lkICgqKSh2b2lkICopKW5ldHNubXBfY29udGFpbmVyX3RhYmxlX2RhdGFfZnJlZTsKICAgICBoYW5kbGVyLT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFQ7CiAgICAgCiAgICAgcmV0dXJuIGhhbmRsZXI7CkBAIC0zMTUsMTMgKzM1MiwzNSBAQAogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRhYnJlZyk7CiB9CiAKK2ludAorbmV0c25tcF9jb250YWluZXJfdGFibGVfdW5yZWdpc3RlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQoreworICAgIGNvbnRhaW5lcl90YWJsZV9kYXRhICp0YWQ7CisKKyAgICBpZiAoIXJlZ2luZm8pCisgICAgICAgIHJldHVybiBNSUJfVU5SRUdJU1RSQVRJT05fRkFJTEVEOworICAgIHRhZCA9IChjb250YWluZXJfdGFibGVfZGF0YSAqKQorICAgICAgICBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9kYXRhX2J5X25hbWUocmVnaW5mbywgInRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmICh0YWQpIHsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoIHRhZC0+dGFibGUgKTsKKyAgICAgICAgdGFkLT50YWJsZSA9IE5VTEw7CisJLyoKKwkgKiBOb3RlOiBkb24ndCBmcmVlIHRoZSBtZW1vcnkgdGFkIHBvaW50cyBhdCBoZXJlIC0gdGhhdCBpcyBkb25lCisJICogYnkgbmV0c25tcF9jb250YWluZXJfdGFibGVfZGF0YV9mcmVlKCkuCisJICovCisgICAgfQorICAgIHJldHVybiBuZXRzbm1wX3VucmVnaXN0ZXJfdGFibGUoIHJlZ2luZm8gKTsKK30KKwogLyoqIHJldHJpZXZlIHRoZSBjb250YWluZXIgdXNlZCBieSB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUl9FWFRSQUNUCiBuZXRzbm1wX2NvbnRhaW5lcioKIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2NvbnRhaW5lcl9leHRyYWN0KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0KQogewogICAgIHJldHVybiAobmV0c25tcF9jb250YWluZXIgKikKICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRBQkxFX0NPTlRBSU5FUl9DT05UQUlORVIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX0VYVFJBQ1QgKi8KIAogI2lmbmRlZiBORVRTTk1QX1VTRV9JTkxJTkUKIC8qKiBmaW5kIHRoZSBjb250ZXh0IGRhdGEgdXNlZCBieSB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciAqLwpAQCAtMzQ2LDYgKzQwNSw3IEBACiB9CiAjZW5kaWYgLyogaW5saW5lICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUk9XX0lOU0VSVAogLyoqIGluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRhYmxlX2NvbnRhaW5lciBlbnRyeSBpbnRvIGEgcmVxdWVzdCBsaXN0ICovCiB2b2lkCiBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfaW5zZXJ0KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LApAQCAtNDEzLDYgKzQ3Myw3NiBAQAogICAgICAgICB9CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX1JPV19JTlNFUlQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUl9ST1dfUkVNT1ZFCisvKiogcmVtb3ZlcyBhIHRhYmxlX2NvbnRhaW5lciBlbnRyeSBmcm9tIGEgcmVxdWVzdCBsaXN0ICovCit2b2lkCituZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfcmVtb3ZlKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2luZGV4ICAgICAgICAqcm93KQoreworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICpyZXE7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAgICAgICp0aGlzX2luZGV4ID0gTlVMTDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgICAgICAqdGhhdF9pbmRleCA9IE5VTEw7CisgICAgb2lkICAgICAgYmFzZV9vaWRbXSA9IHswLCAwfTsJLyogTWFrZSBzdXJlIGluZGV4IE9JRHMgYXJlIGxlZ2FsISAqLworICAgIG9pZCAgICAgIHRoaXNfb2lkW01BWF9PSURfTEVOXTsKKyAgICBvaWQgICAgICB0aGF0X29pZFtNQVhfT0lEX0xFTl07CisgICAgc2l6ZV90ICAgdGhpc19vaWRfbGVuLCB0aGF0X29pZF9sZW47CisKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8qCisgICAgICogV2UnbGwgYWRkIHRoZSBuZXcgcm93IGluZm9ybWF0aW9uIHRvIGFueSByZXF1ZXN0CisgICAgICogc3RydWN0dXJlIHdpdGggdGhlIHNhbWUgaW5kZXggdmFsdWVzIGFzIHRoZSByZXF1ZXN0CisgICAgICogcGFzc2VkIGluICh3aGljaCBpbmNsdWRlcyB0aGF0IG9uZSEpLgorICAgICAqCisgICAgICogU28gY29uc3RydWN0IGFuIE9JRCBiYXNlZCBvbiB0aGVzZSBpbmRleCB2YWx1ZXMuCisgICAgICovCisKKyAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgdGhpc19pbmRleCA9IHRhYmxlX2luZm8tPmluZGV4ZXM7CisgICAgYnVpbGRfb2lkX25vYWxsb2ModGhpc19vaWQsIE1BWF9PSURfTEVOLCAmdGhpc19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGJhc2Vfb2lkLCAyLCB0aGlzX2luZGV4KTsKKworICAgIC8qCisgICAgICogV2UgbmVlZCB0byBsb29rIHRocm91Z2ggdGhlIHdob2xlIG9mIHRoZSByZXF1ZXN0IGxpc3QKKyAgICAgKiAoYXMgcmVjZWl2ZWQgYnkgdGhlIGN1cnJlbnQgaGFuZGxlciksIGFzIHRoZXJlJ3Mgbm8KKyAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGZpcnN0CisgICAgICogdmFyYmluZCB0aGF0IHJlZmVycyB0byB0aGlzIHJvdy4KKyAgICAgKiAgIEluIHBhcnRpY3VsYXIsIGEgUm93U3RhdHVzIGNvbnRyb2xsZWQgcm93IGNyZWF0aW9uCisgICAgICogbWF5IGVhc2lseSBvY2N1ciBsYXRlciBpbiB0aGUgdmFyaWFibGUgbGlzdC4KKyAgICAgKgorICAgICAqIFNvIGZpcnN0LCB3ZSByZXdpbmQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuLi4uCisgICAgICovCisgICAgZm9yIChyZXE9cmVxdWVzdDsgcmVxLT5wcmV2OyByZXE9cmVxLT5wcmV2KQorICAgICAgICA7CisKKyAgICAvKgorICAgICAqIC4uLiBhbmQgdGhlbiBzdGFydCBsb29raW5nIGZvciBtYXRjaGluZyBpbmRleGVzCisgICAgICogKGJ5IGNvbnN0cnVjdGluZyBPSURzIGZyb20gdGhlc2UgaW5kZXggdmFsdWVzKQorICAgICAqLworICAgIGZvciAoOyByZXE7IHJlcT1yZXEtPm5leHQpIHsKKyAgICAgICAgaWYgKHJlcS0+cHJvY2Vzc2VkKSAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcSk7CisgICAgICAgIHRoYXRfaW5kZXggPSB0YWJsZV9pbmZvLT5pbmRleGVzOworICAgICAgICBidWlsZF9vaWRfbm9hbGxvYyh0aGF0X29pZCwgTUFYX09JRF9MRU4sICZ0aGF0X29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Vfb2lkLCAyLCB0aGF0X2luZGV4KTsKKyAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIHJlcXVlc3QgaGFzIHRoZSBzYW1lIGluZGV4IHZhbHVlcywKKyAgICAgICAgICogc28gYWRkIHRoZSBuZXdseS1jcmVhdGVkIHJvdyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKHRoaXNfb2lkLCB0aGlzX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXRfb2lkLCB0aGF0X29pZF9sZW4pID09IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhKHJlcSwgVEFCTEVfQ09OVEFJTkVSX1JPVyk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUk9XX1JFTU9WRSAqLwogCiAvKiogQGNvbmQgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00ODIsNyArNjEyLDcgQEAKICAgICAgICAgICogY29sdW1uLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAqLwogICAgICAgICBfc2V0X2tleSggdGFkLCByZXF1ZXN0LCB0YmxyZXFfaW5mbywgJmtleSwgJmluZGV4ICk7Ci0gICAgICAgIHJvdyA9IF9maW5kX25leHRfcm93KHRhZC0+dGFibGUsIHRibHJlcV9pbmZvLCBrZXkpOworICAgICAgICByb3cgPSAobmV0c25tcF9pbmRleCopX2ZpbmRfbmV4dF9yb3codGFkLT50YWJsZSwgdGJscmVxX2luZm8sIGtleSk7CiAgICAgICAgIGlmIChyb3cpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiB1cGRhdGUgaW5kZXhlcyBpbiB0YmxyZXFfaW5mbyAoaW5kZXggJiB2YXJiaW5kKSwKQEAgLTUxOCwxNyArNjQ4LDIxIEBACiAgICAgZWxzZSB7CiAKICAgICAgICAgX3NldF9rZXkoIHRhZCwgcmVxdWVzdCwgdGJscmVxX2luZm8sICZrZXksICZpbmRleCApOwotICAgICAgICByb3cgPSBDT05UQUlORVJfRklORCh0YWQtPnRhYmxlLCBrZXkpOworICAgICAgICByb3cgPSAobmV0c25tcF9pbmRleCopQ09OVEFJTkVSX0ZJTkQodGFkLT50YWJsZSwga2V5KTsKICAgICAgICAgaWYgKE5VTEwgPT0gcm93KSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogbm90IHJlc3VsdHMgZm91bmQuIEZvciBhIGdldCwgdGhhdCBpcyBhbiBlcnJvcgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFibGVfY29udGFpbmVyIiwgIm5vIHJvdyBmb3VuZFxuIikpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGlmKChhZ3RyZXFfaW5mby0+bW9kZSAhPSBNT0RFX1NFVF9SRVNFUlZFMSkgfHwgLyogZ2V0ICovCiAgICAgICAgICAgICAgICAocmVnaW5mby0+bW9kZXMgJiBIQU5ETEVSX0NBTl9OT1RfQ1JFQVRFKSkgeyAvKiBubyBjcmVhdGUgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKGFndHJlcV9pbmZvLCByZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICB9CiAgICAgfSAvKiogR0VUL1NFVCAqLwogICAgIApAQCAtNTkwLDcgKzcyNCwxMSBAQAogICAgICAqIHJlZ2lzdHJhdGlvbi4KICAgICAgKi8KICAgICBvbGRtb2RlID0gYWd0cmVxX2luZm8tPm1vZGU7Ci0gICAgaWYoTU9ERV9JU19HRVQob2xkbW9kZSkgfHwgKE1PREVfU0VUX1JFU0VSVkUxID09IG9sZG1vZGUpKSB7CisgICAgaWYoTU9ERV9JU19HRVQob2xkbW9kZSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgfHwgKE1PREVfU0VUX1JFU0VSVkUxID09IG9sZG1vZGUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgICkgewogICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqY3Vycl9yZXF1ZXN0OwogICAgICAgICAvKgogICAgICAgICAgKiBMb29wIHRocm91Z2ggZWFjaCBvZiB0aGUgcmVxdWVzdHMsIGFuZApAQCAtNzIxLDcgKzg1OSw3IEBACiBuZXRzbm1wX3RhYmxlX2luZGV4X2ZpbmRfbmV4dF9yb3cobmV0c25tcF9jb250YWluZXIgKmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRibHJlcSkKIHsKLSAgICByZXR1cm4gX2ZpbmRfbmV4dF9yb3coYywgdGJscmVxLCBOVUxMICk7CisgICAgcmV0dXJuIChuZXRzbm1wX2luZGV4KilfZmluZF9uZXh0X3JvdyhjLCB0YmxyZXEsIE5VTEwgKTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzMwLDQgKzg2OCw5IEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUiAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZCh0YWJsZV9jb250YWluZXIpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSICovCiAvKiogQH0gKi8KKworCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jCmluZGV4IDMxNzMzMWEuLjY1OWQ5MDMgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jCkBAIC0xLDQgKzEsMTAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNiwxMyArMTIsMzAgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YV9hbGwsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YSwgdGFibGVfZGF0YV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X3RhYmxlX2RhdGEsIHRhYmxlX2RhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGV4dHJhY3RfdGFibGVfcm93X2RhdGEsIHRhYmxlX2RhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluc2VydF90YWJsZV9yb3csIHRhYmxlX2RhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfZGVsZXRlX3RhYmxlLCB0YWJsZV9kYXRhX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfZXh0cmFzLCB0YWJsZV9kYXRhX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfY3JlYXRlX3RhYmxlLCB0YWJsZV9kYXRhX2V4dHJhcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX2NyZWF0ZV9yb3csIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfY29weV9yb3csIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfcmVtb3ZlX2RlbGV0ZV9yb3csIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfdW5yZWdpc3RlciwgdGFibGVfZGF0YV9leHRyYXMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YV9yb3dfY291bnQsIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfcm93X29wZXJhdGlvbnMsIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfcm93X2ZpcnN0LCB0YWJsZV9kYXRhX2V4dHJhcykKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEEKKwogLyoqIEBkZWZncm91cCB0YWJsZV9kYXRhIHRhYmxlX2RhdGEKICAqICBIZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuCiAgKiAgQGluZ3JvdXAgdGFibGUKQEAgLTgwLDE2ICsxMDMsMTcgQEAKICAgICBpZiAocm93LT5pbmRleGVzKSB7CiAgICAgICAgIG5ld3Jvdy0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZChuZXdyb3ctPmluZGV4ZXMpOwogICAgICAgICBpZiAoIW5ld3Jvdy0+aW5kZXhlcykgewotICAgICAgICAgICAgZnJlZSAobmV3cm93KTsKKyAgICAgICAgICAgIGZyZWUobmV3cm93KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHJvdy0+aW5kZXhfb2lkKSB7Ci0gICAgICAgIG5ld3Jvdy0+aW5kZXhfb2lkID0gbmV0c25tcF9tZW1kdXAocm93LT5pbmRleF9vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleF9vaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBuZXdyb3ctPmluZGV4X29pZCA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChyb3ctPmluZGV4X29pZCwgcm93LT5pbmRleF9vaWRfbGVuKTsKICAgICAgICAgaWYgKCFuZXdyb3ctPmluZGV4X29pZCkgewotICAgICAgICAgICAgZnJlZSAobmV3cm93KTsKKyAgICAgICAgICAgIGZyZWUobmV3cm93LT5pbmRleGVzKTsKKyAgICAgICAgICAgIGZyZWUobmV3cm93KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI3LDcgKzI1MSw3IEBACiB9CiAKIC8qKiBzd2FwcyBvdXQgb3JpZ3JvdyB3aXRoIG5ld3Jvdy4gIFRoaXMgZG9lcyAqbm90KiBkZWxldGUvZnJlZSBhbnl0aGluZyEgKi8KLU5FVFNOTVBfSU5MSU5FIHZvaWQKK3ZvaWQKIG5ldHNubXBfdGFibGVfZGF0YV9yZXBsYWNlX3JvdyhuZXRzbm1wX3RhYmxlX2RhdGEgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcm93ICpvcmlncm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcm93ICpuZXdyb3cpCkBAIC0yODYsMTIgKzMxMCwxNSBAQAogICAgICAqIEdlbmVyaWMgQVBJIC0gbW9zdGx5IHJlbmFtZWQgd3JhcHBlcnMKICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NSRUFURV9UQUJMRQogbmV0c25tcF90YWJsZV9kYXRhICoKIG5ldHNubXBfdGFibGVfZGF0YV9jcmVhdGVfdGFibGUoY29uc3QgY2hhciAqbmFtZSwgbG9uZyBmbGFncykKIHsKICAgICByZXR1cm4gbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YSggbmFtZSApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9DUkVBVEVfVEFCTEUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfREVMRVRFX1RBQkxFCiB2b2lkCiBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCBuZXRzbm1wX3RhYmxlX2RhdGEgKnRhYmxlICkKIHsKQEAgLTMxMSwxNCArMzM4LDEzIEBACiAgICAgfQogICAgIHRhYmxlLT5maXJzdF9yb3cgPSBOVUxMOwogCi0gICAgaWYgKHRhYmxlLT5uYW1lKSB7Ci0gICAgICAgIFNOTVBfRlJFRSh0YWJsZS0+bmFtZSk7Ci0gICAgICAgIHRhYmxlLT5uYW1lID0gTlVMTDsKLSAgICB9CisgICAgU05NUF9GUkVFKHRhYmxlLT5uYW1lKTsKICAgICBTTk1QX0ZSRUUodGFibGUpOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfREVMRVRFX1RBQkxFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NSRUFURV9ST1cKIG5ldHNubXBfdGFibGVfcm93ICoKIG5ldHNubXBfdGFibGVfZGF0YV9jcmVhdGVfcm93KCB2b2lkKiBlbnRyeSApCiB7CkBAIC0zMjcsOSArMzUzLDExIEBACiAgICAgICAgIHJvdy0+ZGF0YSA9IGVudHJ5OwogICAgIHJldHVybiByb3c7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NSRUFURV9ST1cgKi8KIAogICAgIC8qIG5ldHNubXBfdGFibGVfZGF0YV9jbG9uZV9yb3coKSBkZWZpbmVkIGFib3ZlICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NPUFlfUk9XCiBpbnQKIG5ldHNubXBfdGFibGVfZGF0YV9jb3B5X3JvdyggbmV0c25tcF90YWJsZV9yb3cgICpvbGRfcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JvdyAgKm5ld19yb3cgKQpAQCAtMzQyLDExICszNzAsMTIgQEAKICAgICBpZiAob2xkX3Jvdy0+aW5kZXhlcykKICAgICAgICAgbmV3X3Jvdy0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZChvbGRfcm93LT5pbmRleGVzKTsKICAgICBpZiAob2xkX3Jvdy0+aW5kZXhfb2lkKQotICAgICAgICBuZXdfcm93LT5pbmRleF9vaWQgPSBuZXRzbm1wX21lbWR1cChvbGRfcm93LT5pbmRleF9vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9yb3ctPmluZGV4X29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgIG5ld19yb3ctPmluZGV4X29pZCA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChvbGRfcm93LT5pbmRleF9vaWQsIG9sZF9yb3ctPmluZGV4X29pZF9sZW4pOwogICAgIC8qIFhYWCAtIERvZXNuJ3QgY29weSB0YWJsZS1zcGVjaWZpYyByb3cgc3RydWN0dXJlICovCiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NPUFlfUk9XICovCiAKICAgICAvKgogICAgICAqIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfcm93KCkKQEAgLTM1NiwxMiArMzg1LDE0IEBACiAgICAgICogICAgIGFsbCBkZWZpbmVkIGFib3ZlCiAgICAgICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1JFTU9WRV9ERUxFVEVfUk9XCiB2b2lkICoKIG5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfZGVsZXRlX3JvdyhuZXRzbm1wX3RhYmxlX2RhdGEgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcm93ICpyb3cpCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3codGFibGUsIHJvdyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1JFTU9WRV9ERUxFVEVfUk9XICovCiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDAzLDYgKzQzNCw4IEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnaW5mbywgdGFibGVfaW5mbyk7CiB9CiAKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9UQUJMRV9EQVRBCiAvKiogcmVnaXN0ZXJzIGEgaGFuZGxlciBhcyBhIHJlYWQtb25seSBkYXRhIHRhYmxlCiAgKiAgSWYgdGFibGVfaW5mbyAhPSBOVUxMLCBpdCByZWdpc3RlcnMgaXQgYXMgYSBub3JtYWwgdGFibGUgdG9vLiAqLwogaW50CkBAIC00MTMsNiArNDQ2LDE2IEBACiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF9yZWFkX29ubHlfaGFuZGxlcigpKTsKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhKHJlZ2luZm8sIHRhYmxlLCB0YWJsZV9pbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9UQUJMRV9EQVRBICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1VOUkVHSVNURVIKK2ludAorbmV0c25tcF91bnJlZ2lzdGVyX3RhYmxlX2RhdGEobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKK3sKKyAgICAvKiBmcmVlIHRhYmxlOyAqLworICAgIHJldHVybiBuZXRzbm1wX3VucmVnaXN0ZXJfdGFibGUocmVnaW5mbyk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1VOUkVHSVNURVIgKi8KIAogLyoKICAqIFRoZSBoZWxwZXIgaGFuZGxlciB0aGF0IHRha2VzIGNhcmUgb2YgcGFzc2luZyBhIHNwZWNpZmljIHJvdyBvZgpAQCAtNDQ1LDcgKzQ4OCw5IEBACiAgICAgICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogICAgICAgICBjYXNlIE1PREVfR0VUOgogICAgICAgICBjYXNlIE1PREVfR0VUTkVYVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9EQVRBX1RBQkxFLCB0YWJsZSwgTlVMTCkpOwpAQCAtNTE5LDkgKzU2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICogZXF1YWwgbWF0Y2gsIHJldHVybiB0aGUgbmV4dCByb3cgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSByb3ctPm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSByb3ctPm5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvKgpAQCAtNTk4LDYgKzY0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgICAgIHZhbGlkX3JlcXVlc3QgPSAxOwogICAgICAgICAgICAgaWYgKE5VTEwgIT0KQEAgLTYyMiw2ICs2NjYsNyBAQAogICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CiAgICAgICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKICAgICAgICAgICAgIHZhbGlkX3JlcXVlc3QgPSAxOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIH0KICAgICB9CkBAIC02NjQsNiArNzA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0RBVEFfUk9XKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0VYVFJBQ1RfVEFCTEVfUk9XX0RBVEEKIC8qKiBleHRyYWN0cyB0aGUgZGF0YSBmcm9tIHRoZSByb3cgYmVpbmcgYWNjZXNzZWQgcGFzc2VkIGZyb20gdGhlCiAgKiB0YWJsZV9kYXRhIGhlbHBlciAqLwogdm9pZCAgICAgICAgICAgKgpAQCAtNjc2LDkgKzcyMiwxMSBAQAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9FWFRSQUNUX1RBQkxFX1JPV19EQVRBICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlNFUlRfVEFCTEVfUk9XCiAvKiogaW5zZXJ0cyBhIG5ld2x5IGNyZWF0ZWQgdGFibGVfZGF0YSByb3cgaW50byBhIHJlcXVlc3QgKi8KLU5FVFNOTVBfSU5MSU5FIHZvaWQKK3ZvaWQKIG5ldHNubXBfaW5zZXJ0X3RhYmxlX3JvdyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcm93KQogewpAQCAtNzQxLDYgKzc4OSw3IEBACiAgICAgICAgIH0KICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlNFUlRfVEFCTEVfUk9XICovCiAKIC8qIGJ1aWxkcyBhIHJlc3VsdCBnaXZlbiBhIHJvdywgYSB2YXJiaW5kIHRvIHNldCBhbmQgdGhlIGRhdGEgKi8KIGludApAQCAtODUyLDExICs5MDEsMTMgQEAKICAgICAgKiBHZW5lcmljIEFQSSAtIG1vc3RseSByZW5hbWVkIHdyYXBwZXJzCiAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9ST1dfRklSU1QKIG5ldHNubXBfdGFibGVfcm93ICoKIG5ldHNubXBfdGFibGVfZGF0YV9yb3dfZmlyc3QobmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSkKIHsKICAgICByZXR1cm4gbmV0c25tcF90YWJsZV9kYXRhX2dldF9maXJzdF9yb3codGFibGUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9ST1dfRklSU1QgKi8KIAogbmV0c25tcF90YWJsZV9yb3cgKgogbmV0c25tcF90YWJsZV9kYXRhX3Jvd19nZXQoICBuZXRzbm1wX3RhYmxlX2RhdGEgKnRhYmxlLApAQCAtOTIxLDExICs5NzIsMTMgQEAKICAgICByZXR1cm4gbmV0c25tcF90YWJsZV9kYXRhX3Jvd19uZXh0X2J5b2lkKHRhYmxlLCBpbnN0YW5jZSwgbGVuKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX0NPVU5UCiBpbnQKIG5ldHNubXBfdGFibGVfZGF0YV9yb3dfY291bnQobmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSkKIHsKICAgICByZXR1cm4gbmV0c25tcF90YWJsZV9kYXRhX251bV9yb3dzKHRhYmxlKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX0NPVU5UICovCiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtOTM1LDYgKzk4OCw3IEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9ST1dfT1BFUkFUSU9OUwogdm9pZCAqCiBuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfZmlyc3QobmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSkKIHsKQEAgLTk5NCw2ICsxMDQ4LDcgQEAKICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3Jvd19uZXh0X2J5b2lkKHRhYmxlLCBpbnN0YW5jZSwgbGVuKTsKICAgICByZXR1cm4gKHJvdyA/IHJvdy0+ZGF0YSA6IE5VTEwgKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX09QRVJBVElPTlMgKi8KIAogICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgKiBHZW5lcmljIEFQSSAtIG1vc3RseSByZW5hbWVkIHdyYXBwZXJzCkBAIC0xMDA1LDUgKzEwNjAsOSBAQAogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHRhYmxlX2RhdGEpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQSAqLworCiAvKiogQH0gCiAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jIGIvYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMKaW5kZXggZjkyZTNlMS4uOTMxYzI3YSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMKQEAgLTEsNCArMSwxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTYsOCArMTMsMzMgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhc2V0X2FsbCwgbWliX2hlbHBlcnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YXNldCwgdGFibGVfZGF0YXNldF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YXNldF9yZW1vdmVfcm93LCB0YWJsZV9kYXRhc2V0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX3NldF9jb2x1bW4sIHRhYmxlX2RhdGFzZXRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFzZXRfZ2V0X25ld3JvdywgdGFibGVfZGF0YXNldF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfc2V0X2FkZF9pbmRleGVzLCB0YWJsZV9kYXRhc2V0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkZWxldGVfdGFibGVfZGF0YV9zZXQsIHRhYmxlX2RhdGFzZXRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3csIHRhYmxlX2RhdGFzZXRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFzZXRfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUsIHRhYmxlX2RhdGFzZXRfYWxsKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEFCTEVfREFUQVNFVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZ2V0X29yX2NyZWF0ZV9yb3dfc3Rhc2gpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfZ2V0X2RhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfYWRkX2RhdGEpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEFCTEVfREFUQVNFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVAorCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG1pYl90b19hc25fdHlwZSkKKyNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KIAogc3RhdGljIG5ldHNubXBfZGF0YV9saXN0ICphdXRvX3RhYmxlczsKIApAQCAtNzIsODIgKzEwNCwxMCBAQAogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAotLyoqIENyZWF0ZSBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgc3RydWN0dXJlIGdpdmVuIGEgdGFibGVfZGF0YSBkZWZpbml0aW9uICovCi1uZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICoKLW5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfc2V0KGNvbnN0IGNoYXIgKnRhYmxlX25hbWUpCi17Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0ID0KLSAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX2RhdGFfc2V0KTsKLSAgICBpZiAoIXRhYmxlX3NldCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgdGFibGVfc2V0LT50YWJsZSA9IG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGEodGFibGVfbmFtZSk7Ci0gICAgcmV0dXJuIHRhYmxlX3NldDsKLX0KLQotdm9pZCBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQpCi17Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICpwdHIsICpuZXh0OwotICAgIG5ldHNubXBfdGFibGVfcm93ICpwcm93LCAqcG5leHRyb3c7Ci0KLSAgICBmb3IgKHB0ciA9IHRhYmxlX3NldC0+ZGVmYXVsdF9yb3c7IHB0cjsgcHRyID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gcHRyLT5uZXh0OwotICAgICAgICBmcmVlKHB0cik7Ci0gICAgfQotICAgIHRhYmxlX3NldC0+ZGVmYXVsdF9yb3cgPSBOVUxMOwotICAgIGZvciAocHJvdyA9IHRhYmxlX3NldC0+dGFibGUtPmZpcnN0X3JvdzsgcHJvdzsgcHJvdyA9IHBuZXh0cm93KSB7Ci0gICAgICAgIHBuZXh0cm93ID0gcHJvdy0+bmV4dDsKLSAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZV9zZXQsIHByb3cpOwotICAgIH0KLSAgICB0YWJsZV9zZXQtPnRhYmxlLT5maXJzdF9yb3cgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUodGFibGVfc2V0LT50YWJsZSk7Ci0gICAgZnJlZSh0YWJsZV9zZXQpOwotfQotCi0vKiogY2xvbmVzIGEgZGF0YXNldCByb3csIGluY2x1ZGluZyBhbGwgZGF0YS4gKi8KLW5ldHNubXBfdGFibGVfcm93ICoKLW5ldHNubXBfdGFibGVfZGF0YV9zZXRfY2xvbmVfcm93KG5ldHNubXBfdGFibGVfcm93ICpyb3cpCi17Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICpkYXRhLCAqKm5ld3Jvd2RhdGE7Ci0gICAgbmV0c25tcF90YWJsZV9yb3cgKm5ld3JvdzsKLQotICAgIGlmICghcm93KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIG5ld3JvdyA9IG5ldHNubXBfdGFibGVfZGF0YV9jbG9uZV9yb3cocm93KTsKLSAgICBpZiAoIW5ld3JvdykKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBkYXRhID0gKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqKSByb3ctPmRhdGE7Ci0KLSAgICBpZiAoZGF0YSkgewotICAgICAgICBmb3IgKG5ld3Jvd2RhdGEgPQotICAgICAgICAgICAgIChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKiopICYobmV3cm93LT5kYXRhKTsgZGF0YTsKLSAgICAgICAgICAgICBuZXdyb3dkYXRhID0gJigoKm5ld3Jvd2RhdGEpLT5uZXh0KSwgZGF0YSA9IGRhdGEtPm5leHQpIHsKLQotICAgICAgICAgICAgKm5ld3Jvd2RhdGEgPSBuZXRzbm1wX21lbWR1cChkYXRhLAotICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UpKTsKLSAgICAgICAgICAgIGlmICghKm5ld3Jvd2RhdGEpIHsKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX3JvdyhuZXdyb3cpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGF0YS0+ZGF0YS52b2lkcCkgewotICAgICAgICAgICAgICAgICgqbmV3cm93ZGF0YSktPmRhdGEudm9pZHAgPSBuZXRzbm1wX21lbWR1cChkYXRhLT5kYXRhLnZvaWRwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5kYXRhX2xlbik7Ci0gICAgICAgICAgICAgICAgaWYgKCEoKm5ld3Jvd2RhdGEpLT5kYXRhLnZvaWRwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfcm93KG5ld3Jvdyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3cm93OwotfQotCiAvKiogZGVsZXRlcyBhIHNpbmdsZSBkYXRhc2V0IHRhYmxlIGRhdGEuCiAgKiAgcmV0dXJucyB0aGUgKHBvc3NpYmx5IHN0aWxsIGdvb2QpIG5leHQgcG9pbnRlciBvZiB0aGUgZGVsZXRlZCBkYXRhIG9iamVjdC4KICAqLwotTkVUU05NUF9JTkxJTkUgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICoKK05FVFNOTVBfU1RBVElDX0lOTElORSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKgogbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9kYXRhKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZGF0YSkKIHsKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKm5leHRQdHIgPSBOVUxMOwpAQCAtMTc4LDcgKzEzOCw3IEBACiAgICAgaWYgKCFyb3cpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRhdGEgPSBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3Jvdyhyb3cpOworICAgIGRhdGEgPSAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlKiluZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3Jvdyhyb3cpOwogICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfYWxsX2RhdGEoZGF0YSk7CiB9CiAKQEAgLTIwNCw2ICsxNjQsNyBAQAogfQogCiAvKiogcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSB0YWJsZSwgYnV0IGRvZXNuJ3QgZGVsZXRlL2ZyZWUgdGhlIGNvbHVtbiB2YWx1ZXMgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX1JFTU9WRV9ST1cKIE5FVFNOTVBfSU5MSU5FIHZvaWQKIG5ldHNubXBfdGFibGVfZGF0YXNldF9yZW1vdmVfcm93KG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yb3cgKnJvdykKQEAgLTIxMyw2ICsxNzQsNyBAQAogCiAgICAgbmV0c25tcF90YWJsZV9kYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZS0+dGFibGUsIHJvdyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX1JFTU9WRV9ST1cgKi8KIAogLyoqIHJlbW92ZXMgYSByb3cgZnJvbSB0aGUgdGFibGUgYW5kIHRoZW4gZGVsZXRlcyBpdCAoYW5kIGFsbCBpdHMgZGF0YSkgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKQEAgLTIzMCw2ICsxOTIsODAgQEAKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX2FsbF9kYXRhKGRhdGEpOwogfQogCisvKiogQ3JlYXRlIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBzdHJ1Y3R1cmUgZ2l2ZW4gYSB0YWJsZV9kYXRhIGRlZmluaXRpb24gKi8KK25ldHNubXBfdGFibGVfZGF0YV9zZXQgKgorbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YV9zZXQoY29uc3QgY2hhciAqdGFibGVfbmFtZSkKK3sKKyAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQgPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfZGF0YV9zZXQpOworICAgIGlmICghdGFibGVfc2V0KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB0YWJsZV9zZXQtPnRhYmxlID0gbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YSh0YWJsZV9uYW1lKTsKKyAgICByZXR1cm4gdGFibGVfc2V0OworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVMRVRFX1RBQkxFX0RBVEFfU0VUCit2b2lkIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldCkKK3sKKyAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKnB0ciwgKm5leHQ7CisgICAgbmV0c25tcF90YWJsZV9yb3cgKnByb3csICpwbmV4dHJvdzsKKworICAgIGZvciAocHRyID0gdGFibGVfc2V0LT5kZWZhdWx0X3JvdzsgcHRyOyBwdHIgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBwdHItPm5leHQ7CisgICAgICAgIGZyZWUocHRyKTsKKyAgICB9CisgICAgdGFibGVfc2V0LT5kZWZhdWx0X3JvdyA9IE5VTEw7CisgICAgZm9yIChwcm93ID0gdGFibGVfc2V0LT50YWJsZS0+Zmlyc3Rfcm93OyBwcm93OyBwcm93ID0gcG5leHRyb3cpIHsKKyAgICAgICAgcG5leHRyb3cgPSBwcm93LT5uZXh0OworICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVtb3ZlX2FuZF9kZWxldGVfcm93KHRhYmxlX3NldCwgcHJvdyk7CisgICAgfQorICAgIHRhYmxlX3NldC0+dGFibGUtPmZpcnN0X3JvdyA9IE5VTEw7CisgICAgbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSh0YWJsZV9zZXQtPnRhYmxlKTsKKyAgICBmcmVlKHRhYmxlX3NldCk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUxFVEVfVEFCTEVfREFUQV9TRVQgKi8KKworLyoqIGNsb25lcyBhIGRhdGFzZXQgcm93LCBpbmNsdWRpbmcgYWxsIGRhdGEuICovCituZXRzbm1wX3RhYmxlX3JvdyAqCituZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2Nsb25lX3JvdyhuZXRzbm1wX3RhYmxlX3JvdyAqcm93KQoreworICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZGF0YSwgKipuZXdyb3dkYXRhOworICAgIG5ldHNubXBfdGFibGVfcm93ICpuZXdyb3c7CisKKyAgICBpZiAoIXJvdykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuZXdyb3cgPSBuZXRzbm1wX3RhYmxlX2RhdGFfY2xvbmVfcm93KHJvdyk7CisgICAgaWYgKCFuZXdyb3cpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZGF0YSA9IChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKikgcm93LT5kYXRhOworCisgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgZm9yIChuZXdyb3dkYXRhID0KKyAgICAgICAgICAgICAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICoqKSAmKG5ld3Jvdy0+ZGF0YSk7IGRhdGE7CisgICAgICAgICAgICAgbmV3cm93ZGF0YSA9ICYoKCpuZXdyb3dkYXRhKS0+bmV4dCksIGRhdGEgPSBkYXRhLT5uZXh0KSB7CisKKyAgICAgICAgICAgICpuZXdyb3dkYXRhID0gbmV0c25tcF9tZW1kdXAoZGF0YSwKKyAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlKSk7CisgICAgICAgICAgICBpZiAoISpuZXdyb3dkYXRhKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9yb3cobmV3cm93KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEtPmRhdGEudm9pZHApIHsKKyAgICAgICAgICAgICAgICAoKm5ld3Jvd2RhdGEpLT5kYXRhLnZvaWRwID0KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tZW1kdXAoZGF0YS0+ZGF0YS52b2lkcCwgZGF0YS0+ZGF0YV9sZW4pOworICAgICAgICAgICAgICAgIGlmICghKCpuZXdyb3dkYXRhKS0+ZGF0YS52b2lkcCkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX3JvdyhuZXdyb3cpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5ld3JvdzsKK30KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoKICAqIERhdGEgU2V0IEFQSTogRGVmYXVsdCByb3cgb3BlcmF0aW9ucwpAQCAtMjQ4LDkgKzI4NCwxMCBAQAogICAgIGZvciAoOyBkZWZyb3c7IGRlZnJvdyA9IGRlZnJvdy0+bmV4dCkgewogICAgICAgICBuZXRzbm1wX3NldF9yb3dfY29sdW1uKHJvdywgZGVmcm93LT5jb2x1bW4sIGRlZnJvdy0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZyb3ctPmRhdGEudm9pZHAsIGRlZnJvdy0+ZGF0YV9sZW4pOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKGRlZnJvdy0+d3JpdGFibGUpCiAgICAgICAgICAgICBuZXRzbm1wX21hcmtfcm93X2NvbHVtbl93cml0YWJsZShyb3csIGRlZnJvdy0+Y29sdW1uLCAxKTsKLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIHJvdzsKIH0KQEAgLTI4OCw2ICszMjUsOCBAQAogICAgIH0KIAogICAgIG5ld19jb2wgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSk7CisgICAgaWYgKG5ld19jb2wgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIG5ld19jb2wtPnR5cGUgPSB0eXBlOwogICAgIG5ld19jb2wtPndyaXRhYmxlID0gd3JpdGFibGU7CiAgICAgbmV3X2NvbC0+Y29sdW1uID0gY29sdW1uOwpAQCAtMzIzLDE0ICszNjIsOSBAQAogICogIHRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBjYWxsaW5nIG5ldHNubXBfdGFibGVfc2V0X2FkZF9kZWZhdWx0X3JvdwogICogIHJlcGVhdGVkbHkgZm9yIHlvdS4KICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1NFVF9NVUxUSV9BRERfREVGQVVMVF9ST1cKIHZvaWQKLSNpZiBIQVZFX1NUREFSR19ICiBuZXRzbm1wX3RhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cobmV0c25tcF90YWJsZV9kYXRhX3NldCAqdHNldCwgLi4uKQotI2Vsc2UKLW5ldHNubXBfdGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3Jvdyh2YV9kY2wKLSAgICApCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7CiAgICAgdmFfbGlzdCAgICAgICAgIGRlYnVnYXJnczsKICAgICB1bnNpZ25lZCBpbnQgICAgY29sdW1uOwpAQCAtMzM4LDE0ICszNzIsNyBAQAogICAgIHZvaWQgICAgICAgICAgICpkYXRhOwogICAgIHNpemVfdCAgICAgICAgICBkYXRhX2xlbjsKIAotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2YV9zdGFydChkZWJ1Z2FyZ3MsIHRzZXQpOwotI2Vsc2UKLSAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0c2V0OwotCi0gICAgdmFfc3RhcnQoZGVidWdhcmdzKTsKLSAgICB0c2V0ID0gdmFfYXJnKGRlYnVnYXJncywgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqKTsKLSNlbmRpZgogCiAgICAgd2hpbGUgKChjb2x1bW4gPSB2YV9hcmcoZGVidWdhcmdzLCB1bnNpZ25lZCBpbnQpKSAhPSAwKSB7CiAgICAgICAgIHR5cGUgPSB2YV9hcmcoZGVidWdhcmdzLCBpbnQpOwpAQCAtMzU4LDcgKzM4NSw3IEBACiAKICAgICB2YV9lbmQoZGVidWdhcmdzKTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfU0VUX01VTFRJX0FERF9ERUZBVUxUX1JPVyAqLwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgpAQCAtMzk4LDExICs0MjUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqZGF0YV9zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8pCiB7CisgICAgaW50IHJldDsKKwogICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKICAgICAgICAgLyoKICAgICAgICAgICogYWxsb2NhdGUgdGhlIHRhYmxlIGlmIG9uZSB3YXNuJ3QgYWxsb2NhdGVkIAogICAgICAgICAgKi8KICAgICAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgICAgIGlmICh0YWJsZV9pbmZvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KIAogICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8tPmluZGV4ZXMgJiYgZGF0YV9zZXQtPnRhYmxlLT5pbmRleGVzX3RlbXBsYXRlKSB7CkBAIC00MzMsOCArNDY0LDExIEBACiAKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF90YWJsZV9kYXRhX3NldF9oYW5kbGVyKGRhdGFfc2V0KSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YShyZWdpbmZvLCBkYXRhX3NldC0+dGFibGUsCisgICAgcmV0ID0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhKHJlZ2luZm8sIGRhdGFfc2V0LT50YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8pOworICAgIGlmIChyZXQgPT0gU05NUEVSUl9TVUNDRVNTICYmIHJlZ2luZm8tPmhhbmRsZXIpCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnaW5mby0+aGFuZGxlci0+bmV4dCk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogbmV3cm93X3N0YXNoICAgKgpAQCAtNDQ2LDExICs0ODAsMTQgQEAKICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqbmV3cm93ICAgPSBOVUxMOwogCiAgICAgbmV3cm93c3Rhc2ggPSBTTk1QX01BTExPQ19UWVBFREVGKG5ld3Jvd19zdGFzaCk7Ci0gICAgbmV3cm93c3Rhc2gtPmNyZWF0ZWQgPSAxOwotICAgIG5ld3JvdyA9IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfY3JlYXRlX3Jvd19mcm9tX2RlZmF1bHRzCi0gICAgICAgICAgICAgICAgICAgICAgICAoZGF0YXRhYmxlLT5kZWZhdWx0X3Jvdyk7Ci0gICAgbmV3cm93LT5pbmRleGVzID0gc25tcF9jbG9uZV92YXJiaW5kKHRhYmxlX2luZm8tPmluZGV4ZXMpOwotICAgIG5ld3Jvd3N0YXNoLT5uZXdyb3cgPSBuZXdyb3c7CisKKyAgICBpZiAobmV3cm93c3Rhc2ggIT0gTlVMTCkgeworICAgICAgICBuZXdyb3dzdGFzaC0+Y3JlYXRlZCA9IDE7CisgICAgICAgIG5ld3JvdyA9IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfY3JlYXRlX3Jvd19mcm9tX2RlZmF1bHRzCisgICAgICAgICAgICAoZGF0YXRhYmxlLT5kZWZhdWx0X3Jvdyk7CisgICAgICAgIG5ld3Jvdy0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZCh0YWJsZV9pbmZvLT5pbmRleGVzKTsKKyAgICAgICAgbmV3cm93c3Rhc2gtPm5ld3JvdyA9IG5ld3JvdzsKKyAgICB9CiAKICAgICByZXR1cm4gbmV3cm93c3Rhc2g7CiB9CkBAIC00NjksOCArNTA2LDYgQEAKICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcm93LCAqbmV3cm93ID0gTlVMTDsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKLSAgICBvaWQgICAgICAgICAgICAqc3VmZml4OwotICAgIHNpemVfdCAgICAgICAgICBzdWZmaXhfbGVuOwogICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKipzdGFzaHAgPSBOVUxMOwogCiAgICAgaWYgKCFoYW5kbGVyKQpAQCAtNDgwLDYgKzUxNSwxMSBAQAogICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewogICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICpkYXRhdGFibGUgPQogICAgICAgICAgICAgKG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKikgaGFuZGxlci0+bXl2b2lkOworICAgICAgICBjb25zdCBvaWQgKiBjb25zdCBzdWZmaXggPQorICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMjsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN1ZmZpeF9sZW4gPQorICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggLSAocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAyKTsKKwogICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTQ4OCwxNiArNTI4LDEwIEBACiAgICAgICAgICAqLwogICAgICAgICByb3cgPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93KHJlcXVlc3QpOwogICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7Ci0gICAgICAgIHN1ZmZpeCA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDI7Ci0gICAgICAgIHN1ZmZpeF9sZW4gPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCAtCi0gICAgICAgICAgICAocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAyKTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKE1PREVfSVNfU0VUKHJlcWluZm8tPm1vZGUpKSB7CiAKLSAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl07IC8qIGlzIHRoaXMgcmVhc29uYWJsZSBzaXplPz8gKi8KLSAgICAgICAgICAgIGludCAgcmM7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogdXNlIGEgY2FjaGVkIGNvcHkgb2YgdGhlIHJvdyBmb3IgbW9kaWZpY2F0aW9uIAogICAgICAgICAgICAgICovCkBAIC01MDYsMzAgKzU0MCwxNiBAQAogICAgICAgICAgICAgICogY2FjaGUgbG9jYXRpb246IG1heSBoYXZlIGJlZW4gY3JlYXRlZCBhbHJlYWR5IGJ5IG90aGVyCiAgICAgICAgICAgICAgKiBTRVQgcmVxdWVzdHMgaW4gdGhlIHNhbWUgbWFzdGVyIHJlcXVlc3QuIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICByYyA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJkYXRhc2V0X3Jvd19zdGFzaDolczoiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhdGFibGUtPnRhYmxlLT5uYW1lKTsKLSAgICAgICAgICAgIGlmICgoLTEgPT0gcmMpIHx8IChyYyA+PSBzaXplb2YoYnVmKSkpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCIlcyBoYW5kbGVyIG5hbWUgdG9vIGxvbmdcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgIHN0YXNocCA9IG5ldHNubXBfdGFibGVfZGF0YXNldF9nZXRfb3JfY3JlYXRlX3N0YXNoKHJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHN0YXNocCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfR0VORVJSKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbiA9IHNpemVvZihidWYpIC0gcmM7Ci0gICAgICAgICAgICByYyA9IHNucHJpbnRfb2JqaWQoJmJ1ZltyY10sIGxlbiwgdGFibGVfaW5mby0+aW5kZXhfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmluZGV4X29pZF9sZW4pOwotICAgICAgICAgICAgaWYgKC0xID09IHJjKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiJXMgb2lkIG9yIG5hbWUgdG9vIGxvbmdcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXNocCA9IChuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqKQotICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZ2V0X29yX2NyZWF0ZV9yb3dfc3Rhc2gocmVxaW5mbywgYnVmKTsKIAogICAgICAgICAgICAgbmV3cm93c3Rhc2gKLSAgICAgICAgICAgICAgICA9IG5ldHNubXBfb2lkX3N0YXNoX2dldF9kYXRhKCpzdGFzaHAsIHN1ZmZpeCwgc3VmZml4X2xlbik7CisgICAgICAgICAgICAgICAgPSAobmV3cm93X3N0YXNoKiluZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YSgqc3Rhc2hwLCBzdWZmaXgsIHN1ZmZpeF9sZW4pOwogCiAgICAgICAgICAgICBpZiAoIW5ld3Jvd3N0YXNoKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyb3cpIHsKQEAgLTU1Nyw2ICs1NzcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICogZXhpc3Rpbmcgcm93IHRoYXQgbmVlZHMgdG8gYmUgbW9kaWZpZWQgCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBuZXdyb3dzdGFzaCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV3cm93X3N0YXNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3Jvd3N0YXNoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG5ld3JvdyA9IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfY2xvbmVfcm93KHJvdyk7CiAgICAgICAgICAgICAgICAgICAgIG5ld3Jvd3N0YXNoLT5uZXdyb3cgPSBuZXdyb3c7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTczLDEyICs1OTgsMTcgQEAKICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUyKQogICAgICAgICAgICAgICAgIHJvdyA9IG5ld3JvdzsKICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIGlmIChyb3cpCiAgICAgICAgICAgICBkYXRhID0gKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqKSByb3ctPmRhdGE7CiAKICAgICAgICAgaWYgKCFyb3cgfHwgIXRhYmxlX2luZm8gfHwgIWRhdGEpIHsKLSAgICAgICAgICAgIGlmICghTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkgfHwgIXRhYmxlX2luZm8pIHsKKyAgICAgICAgICAgIGlmICghdGFibGVfaW5mbworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgICAgICAgICB8fCAhTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC01OTIsOSArNjIyLDEwIEBACiAgICAgICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICBjYXNlIE1PREVfR0VUQlVMSzogICAgIC8qIFhYWFdXVyAqLwotICAgICAgICAgICAgaWYgKCFkYXRhIHx8IGRhdGEtPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNISU5TVEFOQ0UpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCFkYXRhIHx8IGRhdGEtPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIE5vdGU6IGRhdGEtPmRhdGEudm9pZHAgY2FuIGJlIE5VTEwsIGUuZy4gd2hlbiBhIHplcm8tbGVuZ3RoCiAgICAgICAgICAgICAgICAgICogb2N0ZXQgc3RyaW5nIGhhcyBiZWVuIHN0b3JlZCBpbiB0aGUgdGFibGUgY2FjaGUuCkBAIC02MDMsMTAgKzYzNCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+Y29sbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRhdGEudm9pZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKilkYXRhLT5kYXRhLnZvaWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZGF0YV9sZW4pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgICAgICBpZiAoZGF0YSkgewogICAgICAgICAgICAgICAgIC8qCkBAIC03OTcsOSArODMwLDkgQEAKICAgICAJCSAgICBmb3IgKHJlcSA9IHJlcXVlc3RzOyByZXE7IHJlcT1yZXEtPm5leHQpIHsKICAgICAgICAgCiAJCSAgICAJLyoKLSAgICAgICAgIAkJCSogRm9yIHJlcXVlc3RzIHRoYXQgaGF2ZSB0aGUgb2xkIHJvdyB2YWx1ZXMsCi0gICAgICAgICAJCQkqIHNvIGFkZCB0aGUgbmV3bHktY3JlYXRlZCByb3cgaW5mb3JtYXRpb24uCi0gICAgICAgICAJICAgIAkqLworICAgICAgICAgICAgICAgICAgICAgICAgICogRm9yIHJlcXVlc3RzIHRoYXQgaGF2ZSB0aGUgb2xkIHJvdyB2YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBzbyBhZGQgdGhlIG5ld2x5LWNyZWF0ZWQgcm93IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgIAkgICAgCWlmICgobmV0c25tcF90YWJsZV9yb3cgKikgbmV0c25tcF9leHRyYWN0X3RhYmxlX3JvdyhyZXEpID09IHJvdykgewogCSAgICAJCQluZXRzbm1wX3JlcXVlc3RfcmVtb3ZlX2xpc3RfZGF0YShyZXEsIFRBQkxFX0RBVEFfUk9XKTsKICAgICAgICAgICAgIAkJCW5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcSwKQEAgLTgyMyw2ICs4NTYsMTIgQEAKIAkJbmV3cm93ID0gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgInRhYmxlX2RhdGFzZXQ6IHVua25vd24gbW9kZSBwYXNzZWQgaW50byB0aGUgaGFuZGxlclxuIik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICB9CiAgICAgfQogCkBAIC04NDMsMTggKzg4MiwxOSBAQAogLyoqCiAgKiBleHRyYWN0cyBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgcG9pbnRlciBmcm9tIGEgZ2l2ZW4gcmVxdWVzdAogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9TRVRfQ09MVU1OCiBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKgogbmV0c25tcF9leHRyYWN0X3RhYmxlX2RhdGFfc2V0X2NvbHVtbihuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29sdW1uKQogewogICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZGF0YSA9Ci0gICAgICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9yb3dfZGF0YSggcmVxdWVzdCApOworICAgICAgICAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlKiluZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93X2RhdGEoIHJlcXVlc3QgKTsKICAgICBpZiAoZGF0YSkgewogICAgICAgICBkYXRhID0gbmV0c25tcF90YWJsZV9kYXRhX3NldF9maW5kX2NvbHVtbihkYXRhLCBjb2x1bW4pOwogICAgIH0KICAgICByZXR1cm4gZGF0YTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9TRVRfQ09MVU1OICovCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCkBAIC04ODIsOSArOTIyLDIzIEBACiAgICAgaWYgKCFyZWdpc3RyYXRpb25fbmFtZSkgewogICAgICAgICByZWdpc3RyYXRpb25fbmFtZSA9IHRhYmxlX3NldC0+dGFibGUtPm5hbWU7CiAgICAgfQotICAgIG5ldHNubXBfYWRkX2xpc3RfZGF0YSgmYXV0b190YWJsZXMsIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdChyZWdpc3RyYXRpb25fbmFtZSwgdGFibGVzLCBOVUxMKSk7ICAgICAvKiBYWFggKi8KKyAgICBuZXRzbm1wX2FkZF9saXN0X2RhdGEoJmF1dG9fdGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QocmVnaXN0cmF0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMsIGZyZWUpKTsgICAgIC8qIFhYWCAqLwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVF9VTlJFR0lTVEVSX0FVVE9fREFUQV9UQUJMRQorLyoqIFVuZG8gdGhlIGVmZmVjdCBvZiBuZXRzbm1wX3JlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZSgpLgorICovCit2b2lkCituZXRzbm1wX3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlKG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldCwKKwkJCQkgICBjaGFyICpyZWdpc3RyYXRpb25fbmFtZSkKK3sKKyAgICBuZXRzbm1wX3JlbW92ZV9saXN0X25vZGUoJmF1dG9fdGFibGVzLCByZWdpc3RyYXRpb25fbmFtZQorCQkJICAgICA/IHJlZ2lzdHJhdGlvbl9uYW1lIDogdGFibGVfc2V0LT50YWJsZS0+bmFtZSk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX1VOUkVHSVNURVJfQVVUT19EQVRBX1RBQkxFICovCisKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCiBzdGF0aWMgdm9pZAogX3RhYmxlX3NldF9hZGRfaW5kZXhlcyhuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQsIHN0cnVjdCB0cmVlICp0cCkKQEAgLTEwMTIsNyArMTA2Niw3IEBACiAgICAgICAgIHN0cnVjdCB0cmVlICAgICp0cDI7CiAgICAgCiAgICAgICAgIGlmICghc25tcF9wYXJzZV9vaWQodHAtPmF1Z21lbnRzLCBuYW1lLCAmbmFtZV9sZW5ndGgpKSB7Ci0gICAgICAgICAgICBjb25maWdfcHdhcm4oIkkgY2FuJ3QgcGFyc2UgdGhlIGF1Z21lbnQgdGFiZWwgbmFtZSIpOworICAgICAgICAgICAgY29uZmlnX3B3YXJuKCJJIGNhbid0IHBhcnNlIHRoZSBhdWdtZW50IHRhYmxlIG5hbWUiKTsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiICBjYW4ndCBwYXJzZSAlc1xuIiwgdHAtPmF1Z21lbnRzKTsKICAgICAgICAgICAgIFNOTVBfRlJFRSAodGFibGVfc2V0KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNDQsNyArMTA5OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBERUJVR01TR1RMKCgidGFibGVfc2V0X2FkZF90YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJhZGRpbmcgY29sdW1uICVzKCVkKSBvZiB0eXBlICVkIChhY2Nlc3MgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIGNvbHVtbiAlcyglbGQpIG9mIHR5cGUgJWQgKGFjY2VzcyAlZClcbiIsCiAgICAgICAgICAgICAgICAgICAgIHRwLT5sYWJlbCwgdHAtPnN1YmlkLCB0eXBlLCB0cC0+YWNjZXNzKSk7CiAKICAgICAgICAgc3dpdGNoICh0cC0+YWNjZXNzKSB7CkBAIC0xMDU3LDcgKzExMTEsNyBAQAogICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KICAgICAgICAgY2FzZSBNSUJfQUNDRVNTX1JFQURPTkxZOgogICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlX3NldF9hZGRfdGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgImFkZGluZyBjb2x1bW4gJWQgb2YgdHlwZSAlZFxuIiwgdHAtPnN1YmlkLCB0eXBlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIGNvbHVtbiAlbGQgb2YgdHlwZSAlZFxuIiwgdHAtPnN1YmlkLCB0eXBlKSk7CiAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3codGFibGVfc2V0LCB0cC0+c3ViaWQsIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fud3JpdGUsIE5VTEwsIDApOwogICAgICAgICAgICAgbWluY29sID0gU05NUF9NSU4obWluY29sLCB0cC0+c3ViaWQpOwpAQCAtMTEwMCw3ICsxMTU0LDcgQEAKICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcm93OwogICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZHI7CiAKLSAgICBsaW5lID0gY29weV9ud29yZChsaW5lLCB0bmFtZSwgU05NUF9NQVhCVUZfTUVESVVNKTsKKyAgICBsaW5lID0gY29weV9ud29yZChsaW5lLCB0bmFtZSwgc2l6ZW9mKHRuYW1lKSk7CiAKICAgICB0YWJsZXMgPSAoZGF0YV9zZXRfdGFibGVzICopIG5ldHNubXBfZ2V0X2xpc3RfZGF0YShhdXRvX3RhYmxlcywgdG5hbWUpOwogICAgIGlmICghdGFibGVzKSB7CkBAIC0xMTIzLDcgKzExNzcsNyBAQAogCiAgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZV9zZXRfYWRkX3JvdyIsICJhZGRpbmcgaW5kZXggb2YgdHlwZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgdmItPnR5cGUpKTsKLSAgICAgICAgYnVmX3NpemUgPSBTTk1QX01BWEJVRl9NRURJVU07CisgICAgICAgIGJ1Zl9zaXplID0gc2l6ZW9mKGJ1Zik7CiAgICAgICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX21lbW9yeSh2Yi0+dHlwZSwgbGluZSwgYnVmLCAmYnVmX3NpemUpOwogICAgICAgICBuZXRzbm1wX3RhYmxlX3Jvd19hZGRfaW5kZXgocm93LCB2Yi0+dHlwZSwgYnVmLCBidWZfc2l6ZSk7CiAgICAgfQpAQCAtMTE0MSwxNCArMTE5NSwxNiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmX3NpemUgPSBTTk1QX01BWEJVRl9NRURJVU07CisgICAgICAgIGJ1Zl9zaXplID0gc2l6ZW9mKGJ1Zik7CiAgICAgICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX21lbW9yeShkci0+dHlwZSwgbGluZSwgYnVmLCAmYnVmX3NpemUpOwogICAgICAgICBERUJVR01TR1RMKCgidGFibGVfc2V0X2FkZF9yb3ciLAogICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIGRhdGEgYXQgY29sdW1uICVkIG9mIHR5cGUgJWRcbiIsIGRyLT5jb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgIGRyLT50eXBlKSk7CiAgICAgICAgIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4ocm93LCBkci0+Y29sdW1uLCBkci0+dHlwZSwgYnVmLCBidWZfc2l6ZSk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAoZHItPndyaXRhYmxlKQogICAgICAgICAgICAgbmV0c25tcF9tYXJrX3Jvd19jb2x1bW5fd3JpdGFibGUocm93LCBkci0+Y29sdW1uLCAxKTsgICAgICAgLyogbWFrZSB3cml0YWJsZSAqLworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmMgPSBuZXRzbm1wX3RhYmxlX2RhdGFfYWRkX3Jvdyh0YWJsZXMtPnRhYmxlX3NldC0+dGFibGUsIHJvdyk7CiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykgewpAQCAtMTE2MSw2ICsxMjE3LDY0IEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfb2lkX3N0YXNoX25vZGUgKioKK25ldHNubXBfdGFibGVfZGF0YXNldF9nZXRfb3JfY3JlYXRlX3N0YXNoKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqZGF0YXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm8pCit7CisgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnN0YXNocCA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgIGJ1ZlsyNTZdOyAvKiBpcyB0aGlzIHJlYXNvbmFibGUgc2l6ZT8/ICovCisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcmM7CisKKyAgICByYyA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJkYXRhc2V0X3Jvd19zdGFzaDolczoiLAorICAgICAgICAgICAgICAgICAgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7CisgICAgaWYgKCgtMSA9PSByYykgfHwgKChzaXplX3QpcmMgPj0gc2l6ZW9mKGJ1ZikpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIiVzIGhhbmRsZXIgbmFtZSB0b28gbG9uZ1xuIiwgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGxlbiA9IHNpemVvZihidWYpIC0gcmM7CisgICAgcmMgPSBzbnByaW50X29iamlkKCZidWZbcmNdLCBsZW4sIHRhYmxlX2luZm8tPmluZGV4X29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+aW5kZXhfb2lkX2xlbik7CisgICAgaWYgKC0xID09IHJjKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIiVzIG9pZCBvciBuYW1lIHRvbyBsb25nXG4iLCBkYXRhdGFibGUtPnRhYmxlLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3Rhc2hwID0gKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKiopCisgICAgICAgIG5ldHNubXBfdGFibGVfZ2V0X29yX2NyZWF0ZV9yb3dfc3Rhc2gocmVxaW5mbywgKHVfY2hhciAqKSBidWYpOworICAgIHJldHVybiBzdGFzaHA7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX0dFVF9ORVdST1cKK25ldHNubXBfdGFibGVfcm93ICoKK25ldHNubXBfdGFibGVfZGF0YXNldF9nZXRfbmV3cm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9vdG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICpkYXRhdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbykKK3sKKyAgICBvaWQgKiBjb25zdCBzdWZmaXggPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUgKyByb290b2lkX2xlbiArIDI7CisgICAgc2l6ZV90IHN1ZmZpeF9sZW4gPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoIC0gKHJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnN0YXNocDsKKyAgICBuZXdyb3dfc3Rhc2ggICAqbmV3cm93c3Rhc2g7CisKKyAgICBzdGFzaHAgPSBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZ2V0X29yX2NyZWF0ZV9zdGFzaChyZXFpbmZvLCBkYXRhdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mbyk7CisgICAgaWYgKE5VTEwgPT0gc3Rhc2hwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG5ld3Jvd3N0YXNoID0gKG5ld3Jvd19zdGFzaCopbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGEoKnN0YXNocCwgc3VmZml4LCBzdWZmaXhfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSBuZXdyb3dzdGFzaCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbmV3cm93c3Rhc2gtPm5ld3JvdzsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFTRVRfR0VUX05FV1JPVyAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgogICogRGF0YSBTZXQgQVBJOiBSb3cgb3BlcmF0aW9ucwpAQCAtMTIwOCw2ICsxMzIyLDcgQEAKICAgICByZXR1cm4gc3RhcnQ7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAvKioKICAqIG1hcmtzIGEgZ2l2ZW4gY29sdW1uIGluIGEgcm93IGFzIHdyaXRhYmxlIG9yIG5vdC4KICAqLwpAQCAtMTIzNCwxNyArMTM0OSwzNCBAQAogICAgICAgICB9CiAgICAgICAgIGRhdGEtPmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICAgZGF0YS0+d3JpdGFibGUgPSB3cml0YWJsZTsKLSAgICAgICAgZGF0YS0+bmV4dCA9IHJvdy0+ZGF0YTsKKyAgICAgICAgZGF0YS0+bmV4dCA9IChzdHJ1Y3QgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlX3MqKXJvdy0+ZGF0YTsKICAgICAgICAgcm93LT5kYXRhID0gZGF0YTsKICAgICB9IGVsc2UgewogICAgICAgICBkYXRhLT53cml0YWJsZSA9IHdyaXRhYmxlOwogICAgIH0KICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKioKLSAqIHNldHMgYSBnaXZlbiBjb2x1bW4gaW4gYSByb3cgd2l0aCBkYXRhIGdpdmVuIGEgdHlwZSwgdmFsdWUsIGFuZAotICogbGVuZ3RoLiAgRGF0YSBpcyBtZW1kdXAnZWQgYnkgdGhlIGZ1bmN0aW9uLgorICogU2V0cyBhIGdpdmVuIGNvbHVtbiBpbiBhIHJvdyB3aXRoIGRhdGEgZ2l2ZW4gYSB0eXBlLCB2YWx1ZSwKKyAqIGFuZCBsZW5ndGguIERhdGEgaXMgbWVtZHVwJ2VkIGJ5IHRoZSBmdW5jdGlvbiwgYXQgbGVhc3QgaWYKKyAqIHR5cGUgIT0gU05NUF9OT1NVQ0hJTlNUQU5DRSBhbmQgaWYgdmFsdWVfbGVuID4gMC4KKyAqCisgKiBAcGFyYW1baW5dIHJvdyAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgdG8gYmUgbW9kaWZpZWQuCisgKiBAcGFyYW1baW5dIGNvbHVtbiAgICBJbmRleCBvZiB0aGUgY29sdW1uIHRvIGJlIG1vZGlmaWVkLgorICogQHBhcmFtW2luXSB0eXBlICAgICAgRWl0aGVyIHRoZSBBU04gdHlwZSBvZiB0aGUgdmFsdWUgdG8gYmUgc2V0IG9yCisgKiAgIFNOTVBfTk9TVUNISU5TVEFOQ0UuCisgKiBAcGFyYW1baW5dIHZhbHVlICAgICBJZiB0eXBlICE9IFNOTVBfTk9TVUNISU5TVEFOQ0UsIHBvaW50ZXIgdG8gdGhlCisgKiAgIG5ldyB2YWx1ZS4gTWF5IGJlIE5VTEwgaWYgdmFsdWVfbGVuID09IDAsIGUuZy4gd2hlbiBzdG9yaW5nIGEKKyAqICAgemVyby1sZW5ndGggb2N0ZXQgc3RyaW5nLiBJZ25vcmVkIHdoZW4gdHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFLgorICogQHBhcmFtW2luXSB2YWx1ZV9sZW4gSWYgdHlwZSAhPSBTTk1QX05PU1VDSElOU1RBTkNFLCBudW1iZXIgb2YgYnl0ZXMKKyAqICAgb2NjdXBpZWQgYnkgKnZhbHVlLiBJZ25vcmVkIHdoZW4gdHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFLgorICoKKyAqIEByZXR1cm4gU05NUEVSUl9TVUNDRVNTIHVwb24gc3VjY2VzczsgU05NUEVSUl9NQUxMT0Mgd2hlbiBvdXQgb2YgbWVtb3J5OworICogICBvciBTTk1QRVJSX0dFTkVSUiB3aGVuIHJvdyA9PSAwIG9yIHdoZW4gdHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgZGF0YXR5cGUKKyAqICAgb2YgdGhlIGRhdGEgc3RvcmVkIGluICpyb3cuIAorICoKICAqLwogaW50CiBuZXRzbm1wX3NldF9yb3dfY29sdW1uKG5ldHNubXBfdGFibGVfcm93ICpyb3csIHVuc2lnbmVkIGludCBjb2x1bW4sCkBAIC0xMjcwLDI5ICsxNDAyLDM2IEBACiAKICAgICAgICAgZGF0YS0+Y29sdW1uID0gY29sdW1uOwogICAgICAgICBkYXRhLT50eXBlID0gdHlwZTsKLSAgICAgICAgZGF0YS0+bmV4dCA9IHJvdy0+ZGF0YTsKKyAgICAgICAgZGF0YS0+bmV4dCA9IChzdHJ1Y3QgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlX3MqKXJvdy0+ZGF0YTsKICAgICAgICAgcm93LT5kYXRhID0gZGF0YTsKICAgICB9CiAKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgaWYgKGRhdGEtPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAvKiBUcmFuc2l0aW9ucyBmcm9tIC8gdG8gU05NUF9OT1NVQ0hJTlNUQU5DRSBhcmUgYWxsb3dlZCwgYnV0IG5vIG90aGVyIHRyYW5zaXRpb25zLiAqLworICAgIGlmIChkYXRhLT50eXBlICE9IHR5cGUgJiYgZGF0YS0+dHlwZSAhPSBTTk1QX05PU1VDSElOU1RBTkNFCisgICAgICAgICYmIHR5cGUgIT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogCi0gICAgICAgIFNOTVBfRlJFRShkYXRhLT5kYXRhLnZvaWRwKTsKLSAgICAgICAgaWYgKHZhbHVlX2xlbikgewotICAgICAgICAgICAgZGF0YS0+ZGF0YS5zdHJpbmcgPSBuZXRzbm1wX21lbWR1cCh2YWx1ZSwgKHZhbHVlX2xlbikpOwotICAgICAgICAgICAgaWYgKCFkYXRhLT5kYXRhLnN0cmluZykgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19DUklULCAibm8gbWVtb3J5IGluIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9NQUxMT0M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkYXRhLT5kYXRhLnN0cmluZyA9IG1hbGxvYygxKTsKLSAgICAgICAgfQotICAgICAgICBkYXRhLT5kYXRhX2xlbiA9IHZhbHVlX2xlbjsKKyAgICAvKiBSZXR1cm4gbm93IGlmIG5laXRoZXIgdGhlIHR5cGUgbm9yIHRoZSBkYXRhIGl0c2VsZiBoYXMgYmVlbiBtb2RpZmllZC4gKi8KKyAgICBpZiAoZGF0YS0+dHlwZSA9PSB0eXBlICYmIGRhdGEtPmRhdGFfbGVuID09IHZhbHVlX2xlbgorICAgICAgICAmJiAodmFsdWUgPT0gTlVMTCB8fCBtZW1jbXAoJmRhdGEtPmRhdGEuc3RyaW5nLCB2YWx1ZSwgdmFsdWVfbGVuKSA9PSAwKSkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICAvKiBSZWFsbG9jYXRlIG1lbW9yeSBhbmQgc3RvcmUgdGhlIG5ldyB2YWx1ZS4gKi8KKyAgICBkYXRhLT5kYXRhLnZvaWRwID0gcmVhbGxvYyhkYXRhLT5kYXRhLnZvaWRwLCB2YWx1ZSA/IHZhbHVlX2xlbiA6IDApOworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZV9sZW4gJiYgIWRhdGEtPmRhdGEudm9pZHApIHsKKyAgICAgICAgZGF0YS0+ZGF0YV9sZW4gPSAwOworICAgICAgICBkYXRhLT50eXBlID0gU05NUF9OT1NVQ0hJTlNUQU5DRTsKKyAgICAgICAgc25tcF9sb2coTE9HX0NSSVQsICJubyBtZW1vcnkgaW4gbmV0c25tcF9zZXRfcm93X2NvbHVtbiIpOworICAgICAgICByZXR1cm4gU05NUEVSUl9NQUxMT0M7CiAgICAgfQorICAgIGlmICh2YWx1ZSAmJiB2YWx1ZV9sZW4pCisgICAgICAgIG1lbWNweShkYXRhLT5kYXRhLnN0cmluZywgdmFsdWUsIHZhbHVlX2xlbik7CisgICAgZGF0YS0+dHlwZSA9IHR5cGU7CisgICAgZGF0YS0+ZGF0YV9sZW4gPSB2YWx1ZV9sZW47CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgogICogRGF0YSBTZXQgQVBJOiBJbmRleCBvcGVyYXRpb25zCkBAIC0xMzEwLDMzICsxNDQ5LDI2IEBACiAKIC8qKiBhZGRzIG11bHRpcGxlIGluZGV4ZXMgdG8gYSB0YWJsZV9kYXRhc2V0IGhlbHBlciBvYmplY3QuCiAgKiAgVG8gZW5kIHRoZSBsaXN0LCB1c2UgYSAwIGFmdGVyIHRoZSBsaXN0IG9mIEFTTiBpbmRleCB0eXBlcy4gKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9TRVRfQUREX0lOREVYRVMKIHZvaWQKLSNpZiBIQVZFX1NUREFSR19ICiBuZXRzbm1wX3RhYmxlX3NldF9hZGRfaW5kZXhlcyhuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQotI2Vsc2UKLW5ldHNubXBfdGFibGVfc2V0X2FkZF9pbmRleGVzKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewogICAgIHZhX2xpc3QgICAgICAgICBkZWJ1Z2FyZ3M7CiAgICAgaW50ICAgICAgICAgICAgIHR5cGU7CiAKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdmFfc3RhcnQoZGVidWdhcmdzLCB0c2V0KTsKLSNlbHNlCi0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdHNldDsKLQotICAgIHZhX3N0YXJ0KGRlYnVnYXJncyk7Ci0gICAgdHNldCA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKik7Ci0jZW5kaWYKIAogICAgIGlmICh0c2V0KQogICAgICAgICB3aGlsZSAoKHR5cGUgPSB2YV9hcmcoZGVidWdhcmdzLCBpbnQpKSAhPSAwKQotICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX2FkZF9pbmRleCh0c2V0LT50YWJsZSwgdHlwZSk7CisgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfYWRkX2luZGV4KHRzZXQtPnRhYmxlLCAodV9jaGFyKXR5cGUpOwogCiAgICAgdmFfZW5kKGRlYnVnYXJncyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9TRVRfQUREX0lOREVYRVMgKi8KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHRhYmxlX2RhdGFzZXQpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVCAqLwogLyoqIEB9IAogICovCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMKaW5kZXggZTc3NDJlZC4uOGVkNWNkMCAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYwpAQCAtODQsMjAgKzg0LDM0IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaD4KKwogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2l0ZXJhdG9yX2FsbCwgbWliX2hlbHBlcnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9pdGVyYXRvcl9pbnNlcnRfY29udGV4dCwgdGFibGVfaXRlcmF0b3JfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2l0ZXJhdG9yX2NyZWF0ZV90YWJsZSwgdGFibGVfaXRlcmF0b3JfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2l0ZXJhdG9yX3Jvd19maXJzdCwgdGFibGVfaXRlcmF0b3JfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2l0ZXJhdG9yX3Jvd19jb3VudCwgdGFibGVfaXRlcmF0b3JfYWxsKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfU1RBU0hfQ0FDSEUKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRhdGFfbGlzdF9nZXRfbGlzdF9ub2RlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2FkZF9kYXRhKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NUQVNIX0NBQ0hFICovCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCiAgKiBJdGVyYXRvciBBUEk6IFRhYmxlIG1haW50ZW5hbmNlCkBAIC0xMTYsNiArMTMwLDcgQEAKICAgICAgKgogICAgICAqIFRpbWUgd2lsbCBzaG93IHdoZXRoZXIgdGhpcyBpcyBhIHNlbnNpYmxlIGFwcHJvYWNoIG9yIG5vdC4KICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9DUkVBVEVfVEFCTEUKIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqCiBuZXRzbm1wX2l0ZXJhdG9yX2NyZWF0ZV90YWJsZSggTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50ICpmaXJzdERQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTmV4dF9EYXRhX1BvaW50ICAqbmV4dERQLApAQCAtMTM2LDcgKzE1MSw5IEBACiAKICAgICByZXR1cm4gaWluZm87CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9DUkVBVEVfVEFCTEUgKi8KIAorLyoqIEZyZWUgdGhlIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIGEgdGFibGUgaXRlcmF0b3IuICovCiB2b2lkCiBuZXRzbm1wX2l0ZXJhdG9yX2RlbGV0ZV90YWJsZSggbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbyApCiB7CkBAIC0xNDcsNiArMTY0LDcgQEAKICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQoIGlpbmZvLT5pbmRleGVzICk7CiAgICAgICAgIGlpbmZvLT5pbmRleGVzID0gTlVMTDsKICAgICB9CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKGlpbmZvLT50YWJsZV9yZWdpbmZvKTsKICAgICBTTk1QX0ZSRUUoIGlpbmZvICk7CiB9CiAKQEAgLTE2NCw3ICsxODIsMzcgQEAKICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKLS8qKiByZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIgKi8KK3N0YXRpYyBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKgorbmV0c25tcF9pdGVyYXRvcl9yZWYobmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbykKK3sKKyAgICBpaW5mby0+cmVmY250Kys7CisgICAgcmV0dXJuIGlpbmZvOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9pdGVyYXRvcl9kZXJlZihuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvKQoreworICAgIGlmICgtLWlpbmZvLT5yZWZjbnQgPT0gMCkKKyAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9kZWxldGVfdGFibGUoaWluZm8pOworfQorCit2b2lkIG5ldHNubXBfaGFuZGxlcl9vd25zX2l0ZXJhdG9yX2luZm8obmV0c25tcF9taWJfaGFuZGxlciAqaCkKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChoKTsKKyAgICBuZXRzbm1wX2Fzc2VydChoLT5teXZvaWQpOworICAgICgobmV0c25tcF9pdGVyYXRvcl9pbmZvICopKGgtPm15dm9pZCkpLT5yZWZjbnQrKzsKKyAgICBoLT5kYXRhX2Nsb25lID0gKHZvaWQgKigqKSh2b2lkICopKW5ldHNubXBfaXRlcmF0b3JfcmVmOworICAgIGgtPmRhdGFfZnJlZSAgPSAodm9pZCgqKSh2b2lkICopKW5ldHNubXBfaXRlcmF0b3JfZGVyZWY7Cit9CisKKy8qKgorICogUmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyLgorICoKKyAqIFRoZSBjYWxsZXIgcmVtYWlucyB0aGUgb3duZXIgb2YgdGhlIGl0ZXJhdG9yIGluZm9ybWF0aW9uIG9iamVjdCBpZgorICogdGhlIGZsYWcgTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8gaGFzIG5vdCBiZWVuIHNldCwgYW5kIHRoZSBjcmVhdGVkCisgKiBoYW5kbGVyIGJlY29tZXMgdGhlIG93bmVyIG9mIHRoZSBpdGVyYXRvciBpbmZvcm1hdGlvbiBpZiB0aGUgZmxhZworICogTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8gaGFzIGJlZW4gc2V0LgorICovCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIobmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbykKIHsKQEAgLTE4MSw2ICsyMjksOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIG1lLT5teXZvaWQgPSBpaW5mbzsKKyAgICBpZiAoaWluZm8tPmZsYWdzICYgTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8pCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX2l0ZXJhdG9yX2luZm8obWUpOwogICAgIHJldHVybiBtZTsKIH0KIApAQCAtMTk0LDcgKzI0NCwxMSBAQAogICoKICAqIEBwYXJhbSByZWdpbmZvIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gc3RydWN0CiAgKgotICogQHBhcmFtIGlpbmZvIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfaXRlcmF0b3JfaW5mbyBzdHJ1Y3QKKyAqIEBwYXJhbSBpaW5mbyBBIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gc3RydWN0LiBJZiB0aGUgZmxhZworICogTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8gaXMgbm90IHNldCBpbiBpaW5mby0+ZmxhZ3MsIHRoZSBjYWxsZXIgcmVtYWlucworICogdGhlIG93bmVyIG9mIHRoaXMgc3RydWN0dXJlLiBBbmQgaWYgdGhlIGZsYWcgTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8gaXMKKyAqIHNldCBpbiBpaW5mby0+ZmxhZ3MsIG93bmVyc2hpcCBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIHBhc3NlZCB0byB0aGUKKyAqIGhhbmRsZXIuCiAgKgogICogQHJldHVybiBNSUJfUkVHSVNURVJFRF9PSyBpcyByZXR1cm5lZCBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBhIHN1Y2Nlc3MuCiAgKglGYWlsdXJlcyBhcmUgTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQsIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLgpAQCAtMjA1LDcgKzI1OSw5IEBACiBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8pCiB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICByZWdpbmZvLT5tb2RlcyB8PSBIQU5ETEVSX0NBTl9TVEFTSDsKKyNlbmRpZiAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIoaWluZm8pKTsKICAgICBpZiAoIWlpbmZvKQpAQCAtMjM2LDYgKzI5Miw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRBQkxFX0lURVJBVE9SX05BTUUpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfSVRFUkFUT1JfSU5TRVJUX0NPTlRFWFQKIC8qKiBpbnNlcnRzIHRhYmxlX2l0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZm9yIGEgbmV3bHkKICAqICBjcmVhdGVkIHJvdyBpbnRvIGEgcmVxdWVzdCAqLwogTkVUU05NUF9JTkxJTkUgdm9pZApAQCAtMzAwLDYgKzM1Nyw3IEBACiAgICAgICAgIH0KICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9JTlNFUlRfQ09OVEVYVCAqLwogCiAjZGVmaW5lIFRJX1JFUVVFU1RfQ0FDSEUgInRpX2NhY2hlIgogCkBAIC0zMTQsNyArMzcyLDcgQEAKIAogc3RhdGljIHZvaWQKIG5ldHNubXBfZnJlZV90aV9jYWNoZSh2b2lkICppdCkgewotICAgIHRpX2NhY2hlX2luZm8gKmJlZXIgPSBpdDsKKyAgICB0aV9jYWNoZV9pbmZvICpiZWVyID0gKHRpX2NhY2hlX2luZm8qKWl0OwogICAgIGlmICghaXQpIHJldHVybjsKICAgICBpZiAoYmVlci0+ZGF0YV9jb250ZXh0ICYmIGJlZXItPmZyZWVfY29udGV4dCkgewogICAgICAgICAgICAgKGJlZXItPmZyZWVfY29udGV4dCkoYmVlci0+ZGF0YV9jb250ZXh0LCBiZWVyLT5paW5mbyk7CkBAIC0zNDAsMTEgKzM5OCwxMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGV4dHJhY3QgZXhpc3RpbmcgY2FjaGVkIHN0YXRlICovCi0gICAgdGlfaW5mbyA9IG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRJX1JFUVVFU1RfQ0FDSEUpOworICAgIHRpX2luZm8gPSAodGlfY2FjaGVfaW5mbyopbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwgVElfUkVRVUVTVF9DQUNIRSk7CiAKICAgICAvKiBubyBleGlzdGluZyBjYWNoZWQgc3RhdGUuICBtYWtlIGEgbmV3IG9uZS4gKi8KICAgICBpZiAoIXRpX2luZm8pIHsKICAgICAgICAgdGlfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYodGlfY2FjaGVfaW5mbyk7CisgICAgICAgIGlmICh0aV9pbmZvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUSV9SRVFVRVNUX0NBQ0hFLApAQCAtNDAwLDE1ICs0NjAsMTcgQEAKICAgICB2b2lkICAgICAgICAgICAqY2FsbGJhY2tfZGF0YV9jb250ZXh0ID0gTlVMTDsKICAgICB0aV9jYWNoZV9pbmZvICAqdGlfaW5mbyA9IE5VTEw7CiAgICAgaW50ICAgICAgICAgICAgIHJlcXVlc3RfY291bnQgPSAwOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFCiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKmNpbmZvID0gTlVMTDsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKm9sZF9pbmRleGVzID0gTlVMTCwgKnZiOwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX3JlZ19pbmZvID0gTlVMTDsKICAgICBpbnQgaTsKICAgICBuZXRzbm1wX2RhdGFfbGlzdCAgICAqbGRhdGEgPSBOVUxMOwotICAgIAorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KKwogICAgIGlpbmZvID0gKG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqKSBoYW5kbGVyLT5teXZvaWQ7CiAgICAgaWYgKCFpaW5mbyB8fCAhcmVnaW5mbyB8fCAhcmVxaW5mbykKLSAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogCiAgICAgdGJsX2luZm8gPSBpaW5mby0+dGFibGVfcmVnaW5mbzsKIApAQCAtNDMxLDEyICs0OTMsMTUgQEAKIAogICAgIC8qIHByZWxpbWluYXJ5IGFuYWx5c2lzICovCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICBjYXNlIE1PREVfR0VUX1NUQVNIOgogICAgICAgICBjaW5mbyA9IG5ldHNubXBfZXh0cmFjdF9zdGFzaF9jYWNoZShyZXFpbmZvKTsKICAgICAgICAgdGFibGVfcmVnX2luZm8gPSBuZXRzbm1wX2ZpbmRfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8ocmVnaW5mbyk7CiAKICAgICAgICAgLyogWFhYOiBtb3ZlIHRoaXMgbWFsbG9jIHRvIHN0YXNoX2NhY2hlIGhhbmRsZXI/ICovCiAgICAgICAgIHJlcXRtcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9yZXF1ZXN0X2luZm8pOworICAgICAgICBpZiAocmVxdG1wID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICByZXF0bXAtPnN1YnRyZWUgPSByZXF1ZXN0cy0+c3VidHJlZTsKICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdG1wLApAQCAtNDQ3LDEyICs1MTIsMjEgQEAKICAgICAgICAgLyogcmVtZW1iZXIgdGhlIGluZGV4ZXMgdGhhdCB3ZXJlIG9yaWdpbmFsbHkgcGFyc2VkLiAqLwogICAgICAgICBvbGRfaW5kZXhlcyA9IHRhYmxlX2luZm8tPmluZGV4ZXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICBmb3IocmVxdWVzdCA9IHJlcXVlc3RzIDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAodGFibGVfaW5mbyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBDbGVhbnVwIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHRhYmxlX2luZm8tPmNvbG51bSA8IHRibF9pbmZvLT5taW5fY29sdW1uIC0gMSkgewogICAgICAgICAgICAgICAgIC8qIFhYWDogb3B0aW1pemUgYmV0dGVyIHRoYW4gdGhpcyAqLwogICAgICAgICAgICAgICAgIC8qIGZvciBub3csIGp1c3QgaW5jcmVhc2UgdG8gY29sbnVtLTEgKi8KQEAgLTQ2MywxMCArNTM3LDE4IEBACiAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cHJvY2Vzc2VkID0gVEFCTEVfSVRFUkFUT1JfTk9UQUdBSU47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRpX2luZm8gPQorICAgICAgICAgICAgdGlfaW5mbyA9ICh0aV9jYWNoZV9pbmZvKikKICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUSV9SRVFVRVNUX0NBQ0hFKTsKICAgICAgICAgICAgIGlmICghdGlfaW5mbykgewogICAgICAgICAgICAgICAgIHRpX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKHRpX2NhY2hlX2luZm8pOworICAgICAgICAgICAgICAgIGlmICh0aV9pbmZvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogQ2xlYW51cCAKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQoZnJlZV90aGlzX2luZGV4X3NlYXJjaCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRJX1JFUVVFU1RfQ0FDSEUsCkBAIC00ODQsOCArNTY2LDExIEBACiAgICAgICovCiAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQgfHwKICAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVE5FWFQgfHwKLSAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVF9TVEFTSCB8fAotICAgICAgICByZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxKSB7CisgICAgICAgIHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRfU1RBU0gKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIHx8IHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgcmVxdWVzdCBpbiB0aGUgbGlzdCwKICAgICAgICAgICogICBzbyB0aGF0IHdlJ2xsIGtub3cgd2hlbiB3ZSdyZSBmaW5pc2hlZApAQCAtNTU1LDI3ICs2NDAsNTMgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIC8qIFhYWDogc3RvcmUgaW4gYW4gYXJyYXkgZm9yIGZhc3RlciByZXRyaXZhbCAqLworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IHN0b3JlIGluIGFuIGFycmF5IGZvciBmYXN0ZXIgcmV0cmlldmFsICovCiAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2luZm8gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIENsZWFudXAgCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKHJlcXRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUocmVxdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY29sb2lkW3JlZ2luZm8tPnJvb3RvaWRfbGVuICsgMV0gPSB0YWJsZV9pbmZvLT5jb2xudW07CiAKLSAgICAgICAgICAgICAgICAgICAgdGlfaW5mbyA9CisgICAgICAgICAgICAgICAgICAgIHRpX2luZm8gPSAodGlfY2FjaGVfaW5mbyopCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUSV9SRVFVRVNUX0NBQ0hFKTsKIAogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocmVxaW5mby0+bW9kZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIE1PREVfR0VUOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvb2tpbmcgZm9yIGV4YWN0IG1hdGNoZXMgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX29pZF9ub2FsbG9jKG15bmFtZSwgTUFYX09JRF9MRU4sICZteW5hbWVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb2lkLCBjb2xvaWRfbGVuLCBpbmRleF9zZWFyY2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUobXluYW1lLCBteW5hbWVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGtlZXAgdGhpcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfcmVtZW1iZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15bmFtZSwgbXluYW1lX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2RhdGFfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2xvb3BfY29udGV4dCwgaWluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGtlZXAgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRzbm1wX2l0ZXJhdG9yX3JlbWVtYmVyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXluYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15bmFtZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfZGF0YV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2xvb3BfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaW5mbykgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBDbGVhbnVwIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKHJlcXRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRlJFRShyZXF0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2NvdW50LS07ICAgLyogT25lIGxlc3MgdG8gbG9vayBmb3IgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpbmZvLT5mcmVlX2RhdGFfY29udGV4dCAmJiBjYWxsYmFja19kYXRhX2NvbnRleHQpIHsKQEAgLTU4NSw2ICs2OTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRQogICAgICAgICAgICAgICAgICAgICBjYXNlIE1PREVfR0VUX1NUQVNIOgogICAgICAgICAgICAgICAgICAgICAgICAgLyogY29sbGVjdCBkYXRhIGZvciBlYWNoIGNvbHVtbiBmb3IgZXZlcnkgcm93ICovCiAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9vaWRfbm9hbGxvYyhteW5hbWUsIE1BWF9PSURfTEVOLCAmbXluYW1lX2xlbiwKQEAgLTYxMiw2ICs3MjQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5jb2xudW0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiID0gcmVxdG1wLT5yZXF1ZXN0dmIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdmFyaWFibGVfbGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZiID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ2xlYW51cCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiLT50eXBlID0gQVNOX05VTEw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX29iamlkKHZiLCBteW5hbWUsIG15bmFtZV9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywKQEAgLTYyNywxNyArNzQ4LDMwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlID0gTU9ERV9HRVRfU1RBU0g7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLwogCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9va2luZyBmb3IgIm5leHQiIG1hdGNoZXMgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRzbm1wX2NoZWNrX2dldG5leHRfcmVwbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCwgY29sb2lkLCBjb2xvaWRfbGVuLCBpbmRleF9zZWFyY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aV9pbmZvLT5yZXN1bHRzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfcmVtZW1iZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpX2luZm8tPnJlc3VsdHMtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aV9pbmZvLT5yZXN1bHRzLT5uYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2RhdGFfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2xvb3BfY29udGV4dCwgaWluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRzbm1wX2l0ZXJhdG9yX3JlbWVtYmVyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlfaW5mby0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aV9pbmZvLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19kYXRhX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfbG9vcF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpbmZvKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENsZWFudXAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICBJZiB3ZSd2ZSBiZWVuIHRvbGQgdGhhdCB0aGUgcm93cyBhcmUgc29ydGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdGhlbiB0aGUgZmlyc3QgdmFsaWQgb25lIHdlIGZpbmQKQEAgLTY1NCwxMiArNzg4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgogICAgICAgICAgICAgICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgICAgICAgICAgICAgICAgICAgICAgLyogbmVlZGVkIHByb2Nlc3NpbmcgYWxyZWFkeSBkb25lIGluIFJFU0VSVkUxICovCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKQEAgLTY5Nyw3ICs4MzMsNyBAQAogICAgICAgICAgICAgICAgIGZvcihyZXF1ZXN0ID0gcmVxdWVzdHMgOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHRpX2luZm8gPQorICAgICAgICAgICAgICAgICAgICB0aV9pbmZvID0gKHRpX2NhY2hlX2luZm8qKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJX1JFUVVFU1RfQ0FDSEUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXRpX2luZm8tPnJlc3VsdHMpIHsKQEAgLTcyMiwxMyArODU4LDE2IEBACiAgICAgfQogCiAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQgfHwKLSAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVE5FWFQgfHwKLSAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkgeworICAgICAgICByZXFpbmZvLT5tb2RlID09IE1PREVfR0VUTkVYVAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgfHwgcmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICApIHsKICAgICAgICAgLyogcGVyIHJlcXVlc3QgbGFzdCBtaW51dGUgcHJvY2Vzc2luZyAqLwogICAgICAgICBmb3IocmVxdWVzdCA9IHJlcXVlc3RzIDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0aV9pbmZvID0KKyAgICAgICAgICAgIHRpX2luZm8gPSAodGlfY2FjaGVfaW5mbyopCiAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwgVElfUkVRVUVTVF9DQUNIRSk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvID0KICAgICAgICAgICAgICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKQEAgLTc1OSw3ICs4OTgsOSBAQAogICAgICAgICAgICAgICAgIC8qIEZBTEwgVEhST1VHSCAqLwogCiAgICAgICAgICAgICBjYXNlIE1PREVfR0VUOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgaWYgKHRpX2luZm8tPmRhdGFfY29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgLyogd2UgZG9uJ3QgYWRkIGEgZnJlZSBwb2ludGVyLCBzaW5jZSBpdCdzIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICBUSV9SRVFVRVNUX0NBQ0hFIGluc3RlYWQgKi8KQEAgLTc4MiwxMCArOTIzLDEyIEBACiAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUTkVYVCkgewogICAgICAgICAgICAgcmVxaW5mby0+bW9kZSA9IE1PREVfR0VUOwogICAgICAgICB9CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICB9IGVsc2UgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRfU1RBU0gpIHsKICAgICAgICAgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKHJlcXRtcCk7CiAgICAgICAgIFNOTVBfRlJFRShyZXF0bXApOwogICAgICAgICB0YWJsZV9pbmZvLT5pbmRleGVzID0gb2xkX2luZGV4ZXM7CisjZW5kaWYgIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KICAgICB9CiAKIApAQCAtODE2LDYgKzk1OSw3IEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfSVRFUkFUT1JfUk9XX0ZJUlNUCiB2b2lkICoKIG5ldHNubXBfaXRlcmF0b3Jfcm93X2ZpcnN0KCBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvICkgewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdnAxLCAqdnAyOwpAQCAtODM0LDYgKzk3OCw3IEBACiAgICAgc25tcF9mcmVlX3ZhcmJpbmQoIHZwMSApOwogICAgIHJldHVybiBjdHgyOyAgLyogb3IgKmN0eDIgPz8gKi8KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0lURVJBVE9SX1JPV19GSVJTVCAqLwogCiB2b2lkICoKIG5ldHNubXBfaXRlcmF0b3Jfcm93X2dldCggbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbywgdm9pZCAqcm93ICkKQEAgLTk0NSw3ICsxMDkwLDcgQEAKIAogICAgIHZwMSA9IHNubXBfY2xvbmVfdmFyYmluZChpaW5mby0+aW5kZXhlcyk7CiAgICAgdnAyID0gaWluZm8tPmdldF9maXJzdF9kYXRhX3BvaW50KCAmY3R4MSwgJmN0eDIsIHZwMSwgaWluZm8gKTsKLSAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgImZpcnN0IERQOiAleCAleCAleFxuIiwKKyAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgImZpcnN0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eDEsIGN0eDIsIHZwMikpOwogCiAgICAgLyogWFhYIC0gZnJlZSBjb250ZXh0ID8gKi8KQEAgLTk2NCw3ICsxMTA5LDcgQEAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdnAyID0gaWluZm8tPmdldF9uZXh0X2RhdGFfcG9pbnQoICZjdHgxLCAmY3R4MiwgdnAyLCBpaW5mbyApOwotICAgICAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgIm5leHQgRFA6ICV4ICV4ICV4XG4iLAorICAgICAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgIm5leHQgRFA6ICVwICVwICVwXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eDEsIGN0eDIsIHZwMikpOwogICAgICAgICAvKiBYWFggLSBmcmVlIGNvbnRleHQgPyAqLwogICAgIH0KQEAgLTk5NCw3ICsxMTM5LDcgQEAKIAogICAgIHZwMSA9IHNubXBfY2xvbmVfdmFyYmluZChpaW5mby0+aW5kZXhlcyk7CiAgICAgdnAyID0gaWluZm8tPmdldF9maXJzdF9kYXRhX3BvaW50KCAmY3R4MSwgJmN0eDIsIHZwMSwgaWluZm8gKTsKLSAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgImZpcnN0IERQOiAleCAleCAleFxuIiwKKyAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgImZpcnN0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eDEsIGN0eDIsIHZwMikpOwogCiAgICAgaWYgKCAhaW5zdGFuY2UgfHwgIWxlbiApIHsKQEAgLTEwMzEsNyArMTE3Niw3IEBACiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZwMiA9IGlpbmZvLT5nZXRfbmV4dF9kYXRhX3BvaW50KCAmY3R4MSwgJmN0eDIsIHZwMiwgaWluZm8gKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJuZXh0IERQOiAleCAleCAleFxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJuZXh0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgxLCBjdHgyLCB2cDIpKTsKICAgICAgICAgLyogWFhYIC0gZnJlZSBjb250ZXh0ID8gKi8KICAgICB9CkBAIC0xMDQyLDYgKzExODcsNyBAQAogICAgIHJldHVybiAoIHZwMiA/IGN0eDIgOiBOVUxMICk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9ST1dfQ09VTlQKIGludAogbmV0c25tcF9pdGVyYXRvcl9yb3dfY291bnQoIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8gKQogewpAQCAtMTA2MCw3ICsxMjA2LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIERFQlVHTVNHVEwoKCJ0YWJsZTppdGVyYXRvcjpjb3VudCIsICJmaXJzdCBEUDogJXggJXggJXhcbiIsCisgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmNvdW50IiwgImZpcnN0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4MSwgY3R4MiwgdnAyKSk7CiAKICAgICAvKiBYWFggLSBmcmVlIGNvbnRleHQgPyAqLwpAQCAtMTA2OCw3ICsxMjE0LDcgQEAKICAgICB3aGlsZSAodnAyKSB7CiAgICAgICAgIGkrKzsKICAgICAgICAgdnAyID0gaWluZm8tPmdldF9uZXh0X2RhdGFfcG9pbnQoICZjdHgxLCAmY3R4MiwgdnAyLCBpaW5mbyApOwotICAgICAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Y291bnQiLCAibmV4dCBEUDogJXggJXggJXggKCVkKVxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmNvdW50IiwgIm5leHQgRFA6ICVwICVwICVwICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgxLCBjdHgyLCB2cDIsIGkpKTsKICAgICAgICAgLyogWFhYIC0gZnJlZSBjb250ZXh0ID8gKi8KICAgICB9CkBAIC0xMDc3LDYgKzEyMjMsNyBAQAogICAgIHNubXBfZnJlZV92YXJiaW5kKCB2cDEgKTsKICAgICByZXR1cm4gaTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0lURVJBVE9SX1JPV19DT1VOVCAqLwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfcm93LmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jCmluZGV4IDdjOGE0YzQuLjJhMzNmMjMgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvdGFibGVfcm93LmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYwpAQCAtOCw2ICs4LDcgQEAKICNkZWZpbmUgVEFCTEVfUk9XX0RBVEEgICJ0YWJsZV9yb3ciCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMjMsNiArMjQsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3Jvd19hbGwsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfcm93X2V4dHJhY3QsIHRhYmxlX3Jvd19hbGwpCisKKwogLyoKICAqIHNubXAuaDojZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9CRUdJTiAgICAgICAgLTEgCiAgKiBzbm1wLmg6I2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTEgICAgIDAgCkBAIC0xMzYsNyArMTQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBNQVhfT0lEX0xFTi1yb3dfb2lkX2xlbiwgJmxlbiwgTlVMTCwgMCwgaW5kZXgpOwogICAgIHJvd19vaWRfbGVuICs9IGxlbjsKICAgICBmcmVlKHJlZ2luZm8tPnJvb3RvaWQpOwotICAgIHJlZ2luZm8tPnJvb3RvaWQgPSBuZXRzbm1wX21lbWR1cChyb3dfb2lkLCByb3dfb2lkX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICByZWdpbmZvLT5yb290b2lkID0gc25tcF9kdXBsaWNhdGVfb2JqaWQocm93X29pZCwgcm93X29pZF9sZW4pOwogICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuID0gcm93X29pZF9sZW47CiAKICAgICAgCkBAIC0xNTQsMTEgKzE2MCwxMyBAQAogCiAKIC8qKiByZXR1cm4gdGhlIHJvdyBkYXRhIHN0cnVjdHVyZSBzdXBwbGllZCB0byB0aGUgdGFibGVfcm93IGhlbHBlciAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1JPV19FWFRSQUNUCiB2b2lkICoKIG5ldHNubXBfdGFibGVfcm93X2V4dHJhY3QobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QpCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRBQkxFX1JPV19EQVRBKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1JPV19FWFRSQUNUICovCiAvKiogQGNvbmQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYwppbmRleCA0NmQzZTE4Li44ODY1MDg0IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jCkBAIC0xLDQgKzEsMTAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTYsMTEgKzEyLDcgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaD4KIApAQCAtMTgsNiArMjAsMjIgQEAKICNpbmNsdWRlIDxkbWFsbG9jLmg+CiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3RkYXRhX2FsbCwgbWliX2hlbHBlcnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfdGRhdGEsIHRhYmxlX3RkYXRhX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV90ZGF0YV9kZWxldGVfdGFibGUsIHRhYmxlX3RkYXRhX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV90ZGF0YV9leHRyYWN0X3RhYmxlLCB0YWJsZV90ZGF0YV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfdGRhdGFfcmVtb3ZlX3JvdywgdGFibGVfdGRhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3RkYXRhX2luc2VydF9yb3csIHRhYmxlX3RkYXRhX2FsbCkKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1RBQkxFX1REQVRBCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X2luc2VydCkKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9UQUJMRV9UREFUQV9SRU1PVkVfUk9XCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X3JlbW92ZSkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9UQUJMRV9UREFUQV9SRU1PVkVfUk9XICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEFCTEVfVERBVEEgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBCisKIC8qKiBAZGVmZ3JvdXAgdGRhdGEgdGRhdGEKICAqICBJbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGRhdGFtYXR0ZWQgc3RvcmFnZS4KICAqICBAaW5ncm91cCB0YWJsZQpAQCAtNTcsMTIgKzc1LDIxIEBACiAgICAgaWYgKCAhdGFibGUgKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHRhYmxlLT5mbGFncyA9IGZsYWdzOwogICAgIGlmIChuYW1lKQogICAgICAgICB0YWJsZS0+bmFtZSA9IHN0cmR1cChuYW1lKTsKLSAgICB0YWJsZS0+Y29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCggInRhYmxlX2NvbnRhaW5lciIgKTsKKworICAgIGlmICghKHRhYmxlLT5mbGFncyAmIFREQVRBX0ZMQUdfTk9fQ09OVEFJTkVSKSkgeworICAgICAgICB0YWJsZS0+Y29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCggbmFtZSApOworICAgICAgICBpZiAoIXRhYmxlLT5jb250YWluZXIpCisgICAgICAgICAgICB0YWJsZS0+Y29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCggInRhYmxlX2NvbnRhaW5lciIgKTsKKyAgICAgICAgaWYgKHRhYmxlLT5jb250YWluZXIpCisgICAgICAgICAgICB0YWJsZS0+Y29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cChuYW1lKTsKKyAgICB9CiAgICAgcmV0dXJuIHRhYmxlOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfREVMRVRFX1RBQkxFCiAvKiogY3JlYXRlcyBhbmQgcmV0dXJucyBhICd0ZGF0YScgdGFibGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHZvaWQKIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlKG5ldHNubXBfdGRhdGEgKnRhYmxlKQpAQCAtNzgsNiArMTA1LDcgQEAKICAgICBTTk1QX0ZSRUUodGFibGUpOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBX0RFTEVURV9UQUJMRSAqLwogCiAvKiogY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gbmV3IHJvdyBkYXRhIHN0cnVjdHVyZSAqLwogbmV0c25tcF90ZGF0YV9yb3cgKgpAQCAtODgsNiArMTE2LDggQEAKIH0KIAogLyoqIGNsb25lcyBhICd0ZGF0YScgcm93LiBET0VTIE5PVCBDTE9ORSBUSEUgVEFCTEUtU1BFQ0lGSUMgRU5UUlkgREFUQS4gKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZGF0YV9jbG9uZV9yb3csIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9DTE9ORV9ST1cKIG5ldHNubXBfdGRhdGFfcm93ICoKIG5ldHNubXBfdGRhdGFfY2xvbmVfcm93KG5ldHNubXBfdGRhdGFfcm93ICpyb3cpCiB7CkBAIC0xMDgsOCArMTM4LDggQEAKICAgICB9CiAKICAgICBpZiAocm93LT5vaWRfaW5kZXgub2lkcykgewotICAgICAgICBuZXdyb3ctPm9pZF9pbmRleC5vaWRzID0gbmV0c25tcF9tZW1kdXAocm93LT5vaWRfaW5kZXgub2lkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPm9pZF9pbmRleC5sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgIG5ld3Jvdy0+b2lkX2luZGV4Lm9pZHMgPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQocm93LT5vaWRfaW5kZXgub2lkcywgcm93LT5vaWRfaW5kZXgubGVuKTsKICAgICAgICAgaWYgKCFuZXdyb3ctPm9pZF9pbmRleC5vaWRzKSB7CiAgICAgICAgICAgICBpZiAobmV3cm93LT5pbmRleGVzKQogICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKG5ld3Jvdy0+aW5kZXhlcyk7CkBAIC0xMjAsOSArMTUwLDEyIEBACiAKICAgICByZXR1cm4gbmV3cm93OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfQ0xPTkVfUk9XICovCiAKIC8qKiBjb3B5IHRoZSBjb250ZW50cyBvZiBhICd0ZGF0YScgcm93LgogICAgIERPRVMgTk9UIENPUFkgVEhFIFRBQkxFLVNQRUNJRklDIEVOVFJZIERBVEEuICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfY29weV9yb3csIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9DT1BZX1JPVwogaW50CiBuZXRzbm1wX3RkYXRhX2NvcHlfcm93KG5ldHNubXBfdGRhdGFfcm93ICpkc3Rfcm93LCBuZXRzbm1wX3RkYXRhX3JvdyAqc3JjX3JvdykKIHsKQEAgLTEzOCwxNCArMTcxLDE1IEBACiAgICAgfQogCiAgICAgaWYgKHNyY19yb3ctPm9pZF9pbmRleC5vaWRzKSB7Ci0gICAgICAgIGRzdF9yb3ctPm9pZF9pbmRleC5vaWRzID0gbmV0c25tcF9tZW1kdXAoc3JjX3Jvdy0+b2lkX2luZGV4Lm9pZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93LT5vaWRfaW5kZXgubGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBkc3Rfcm93LT5vaWRfaW5kZXgub2lkcyA9IHNubXBfZHVwbGljYXRlX29iamlkKHNyY19yb3ctPm9pZF9pbmRleC5vaWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3ctPm9pZF9pbmRleC5sZW4pOwogICAgICAgICBpZiAoIWRzdF9yb3ctPm9pZF9pbmRleC5vaWRzKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfQ09QWV9ST1cgKi8KIAogLyoqIGRlbGV0ZXMgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZSBzcGVjaWZpZWQgcm93CiAgKiAgcmV0dXJucyB0aGUgdGFibGUtc3BlY2lmaWMgZW50cnkgZGF0YQpAQCAtMjEzLDEzICsyNDcsMTcgQEAKICAgICAvKgogICAgICAqIGFkZCB0aGlzIHJvdyB0byB0aGUgc3RvcmVkIHRhYmxlCiAgICAgICovCi0gICAgQ09OVEFJTkVSX0lOU0VSVCggdGFibGUtPmNvbnRhaW5lciwgcm93ICk7Ci0gICAgREVCVUdNU0dUTCgoInRkYXRhX2FkZF9yb3ciLCAiYWRkZWQgcm93ICgleClcbiIsIHJvdykpOworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKCB0YWJsZS0+Y29udGFpbmVyLCByb3cgKSAhPSAwKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisKKyAgICBERUJVR01TR1RMKCgidGRhdGFfYWRkX3JvdyIsICJhZGRlZCByb3cgKCVwKVxuIiwgcm93KSk7CiAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCiAvKiogc3dhcHMgb3V0IG9yaWdyb3cgd2l0aCBuZXdyb3cuICBUaGlzIGRvZXMgKm5vdCogZGVsZXRlL2ZyZWUgYW55dGhpbmchICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfcmVwbGFjZV9yb3csIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9SRVBMQUNFX1JPVwogdm9pZAogbmV0c25tcF90ZGF0YV9yZXBsYWNlX3JvdyhuZXRzbm1wX3RkYXRhICp0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqb3JpZ3JvdywKQEAgLTIyOCw2ICsyNjYsNyBAQAogICAgIG5ldHNubXBfdGRhdGFfcmVtb3ZlX3Jvdyh0YWJsZSwgb3JpZ3Jvdyk7CiAgICAgbmV0c25tcF90ZGF0YV9hZGRfcm93KHRhYmxlLCBuZXdyb3cpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfUkVQTEFDRV9ST1cgKi8KIAogLyoqCiAgKiByZW1vdmVzIGEgcm93IGZyb20gdGhlIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIGl0IChubyBmcmVlJ3MgY2FsbGVkKQpAQCAtMzE1LDIwICszNTQsMzQgQEAKICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAqcmVxdWVzdDsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAgICAgICAqcm93OworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3Byb2Nlc3NpbmcgPSAxOwogCiAgICAgc3dpdGNoICggcmVxaW5mby0+bW9kZSApIHsKICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBuZWVkX3Byb2Nlc3NpbmcgPSAwOyAvKiBvbmx5IG5lZWQgcHJvY2Vzc2luZyBpZiBzb21lIHZhcnMgZm91bmQgKi8KKyAgICAgICAgLyoqIEZhbGwgdGhyb3VnaCAqLworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgIAogICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOwotICAgICAgICAgICAgaWYgKCF0YWJsZV9pbmZvKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgLyogYWNrICovCi0gICAgICAgICAgICByb3cgPSBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdCggcmVxdWVzdCApOwotCisgICAgICAgICAgICBpZiAoIXRhYmxlX2luZm8pIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCh0YWJsZV9pbmZvKTsgLyogeWVzLCB0aGlzIHdpbGwgYWx3YXlzIGhpdCAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgIC8qIGVlayAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgcm93ID0gKG5ldHNubXBfdGRhdGFfcm93KiluZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdCggcmVxdWVzdCApOworICAgICAgICAgICAgaWYgKCFyb3cgJiYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQpKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQocm93KTsgLyogeWVzLCB0aGlzIHdpbGwgYWx3YXlzIGhpdCAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgIC8qIGVlayAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytuZWVkX3Byb2Nlc3Npbmc7CiAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9UQUJMRSwgdGFibGUsIE5VTEwpKTsKQEAgLTMzNiw2ICszODksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9ST1csICAgcm93LCAgIE5VTEwpKTsKICAgICAgICAgfQorICAgICAgICAvKiogc2tpcCBuZXh0IGhhbmRsZXIgaWYgcHJvY2Vzc2luZyBub3QgbmVlZGVkICovCisgICAgICAgIGlmICghbmVlZF9wcm9jZXNzaW5nKQorICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7CiAgICAgfQogCiAgICAgLyogbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgKi8KQEAgLTM1NCw2ICs0MTAsMTcgQEAKICAgICAgICAgICAgICAgICAgIHRhYmxlLT5jb250YWluZXIsIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZGF0YV91bnJlZ2lzdGVyLCB0YWJsZV90ZGF0YV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfVU5SRUdJU1RFUgoraW50CituZXRzbm1wX3RkYXRhX3VucmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbykKK3sKKyAgICAvKiBmcmVlIHRhYmxlOyAqLworICAgIHJldHVybiBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV91bnJlZ2lzdGVyKHJlZ2luZm8pOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfVU5SRUdJU1RFUiAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfRVhUUkFDVF9UQUJMRQogLyoqIGV4dHJhY3RzIHRoZSB0ZGF0YSB0YWJsZSBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAqLwogbmV0c25tcF90ZGF0YSAqCiBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QpCkBAIC0zNjEsMTUgKzQyOCwxOSBAQAogICAgIHJldHVybiAobmV0c25tcF90ZGF0YSAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9UQUJMRSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9UREFUQV9FWFRSQUNUX1RBQkxFICovCiAKIC8qKiBleHRyYWN0cyB0aGUgdGRhdGEgY29udGFpbmVyIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfZXh0cmFjdF9jb250YWluZXIsIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9FWFRSQUNUX0NPTlRBSU5FUgogbmV0c25tcF9jb250YWluZXIgKgogbmV0c25tcF90ZGF0YV9leHRyYWN0X2NvbnRhaW5lcihuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCkKIHsKLSAgICBuZXRzbm1wX3RkYXRhICp0ZGF0YSA9IG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9UQUJMRSk7CisgICAgbmV0c25tcF90ZGF0YSAqdGRhdGEgPSAobmV0c25tcF90ZGF0YSopCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRBQkxFX1REQVRBX1RBQkxFKTsKICAgICByZXR1cm4gKCB0ZGF0YSA/IHRkYXRhLT5jb250YWluZXIgOiBOVUxMICk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9FWFRSQUNUX0NPTlRBSU5FUiAqLwogCiAvKiogZXh0cmFjdHMgdGhlIHRkYXRhIHJvdyBiZWluZyBhY2Nlc3NlZCBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAqLwogbmV0c25tcF90ZGF0YV9yb3cgKgpAQCAtMzkxLDYgKzQ2Miw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfSU5TRVJUX1JPVwogLyoqIGluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRkYXRhIHJvdyBpbnRvIGEgcmVxdWVzdCAqLwogTkVUU05NUF9JTkxJTkUgdm9pZAogbmV0c25tcF9pbnNlcnRfdGRhdGFfcm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LApAQCAtMzk4LDYgKzQ3MCwxNyBAQAogewogICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19pbnNlcnQocmVxdWVzdCwgKG5ldHNubXBfaW5kZXggKilyb3cpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfSU5TRVJUX1JPVyAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfUkVNT1ZFX1JPVworLyoqIGluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRkYXRhIHJvdyBpbnRvIGEgcmVxdWVzdCAqLworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3cpCit7CisgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X3JlbW92ZShyZXF1ZXN0LCAobmV0c25tcF9pbmRleCAqKXJvdyk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9UREFUQV9SRU1PVkVfUk9XICovCiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDI4LDcgKzUxMSw3IEBACiBuZXRzbm1wX3RkYXRhX3Jvd19nZXQoICBuZXRzbm1wX3RkYXRhICAgICAqdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93KQogewotICAgIHJldHVybiBDT05UQUlORVJfRklORCggdGFibGUtPmNvbnRhaW5lciwgcm93ICk7CisgICAgcmV0dXJuIChuZXRzbm1wX3RkYXRhX3JvdyopQ09OVEFJTkVSX0ZJTkQoIHRhYmxlLT5jb250YWluZXIsIHJvdyApOwogfQogCiAvKiogcmV0dXJucyB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlICovCkBAIC00NjMsNyArNTQ2LDcgQEAKIAogICAgIGluZGV4Lm9pZHMgPSBzZWFyY2hmb3I7CiAgICAgaW5kZXgubGVuICA9IHNlYXJjaGZvcl9sZW47Ci0gICAgcmV0dXJuIENPTlRBSU5FUl9GSU5EKCB0YWJsZS0+Y29udGFpbmVyLCAmaW5kZXggKTsKKyAgICByZXR1cm4gKG5ldHNubXBfdGRhdGFfcm93KilDT05UQUlORVJfRklORCggdGFibGUtPmNvbnRhaW5lciwgJmluZGV4ICk7CiB9CiAKIC8qKiBmaW5kcyB0aGUgbGV4aWNhbGx5IG5leHQgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlCkBAIC00OTIsOSArNTc1LDExIEBACiAKICAgICBpbmRleC5vaWRzID0gc2VhcmNoZm9yOwogICAgIGluZGV4LmxlbiAgPSBzZWFyY2hmb3JfbGVuOwotICAgIHJldHVybiBDT05UQUlORVJfTkVYVCggdGFibGUtPmNvbnRhaW5lciwgJmluZGV4ICk7CisgICAgcmV0dXJuIChuZXRzbm1wX3RkYXRhX3JvdyopQ09OVEFJTkVSX05FWFQoIHRhYmxlLT5jb250YWluZXIsICZpbmRleCApOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfcm93X2NvdW50LCB0YWJsZV90ZGF0YV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfUk9XX0NPVU5UCiBpbnQKIG5ldHNubXBfdGRhdGFfcm93X2NvdW50KG5ldHNubXBfdGRhdGEgKnRhYmxlKQogewpAQCAtNTAyLDYgKzU4Nyw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBDT05UQUlORVJfU0laRSggdGFibGUtPmNvbnRhaW5lciApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfUk9XX0NPVU5UICovCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCkBAIC01MTEsNiArNTk3LDggQEAKIAogCiAvKiogY29tcGFyZSBhIHJvdyB3aXRoIHRoZSBnaXZlbiBpbmRleCB2YWx1ZXMgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZGF0YV9jb21wYXJlX2lkeCwgdGFibGVfdGRhdGFfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX0NPTVBBUkVfSURYCiBpbnQKIG5ldHNubXBfdGRhdGFfY29tcGFyZV9pZHgobmV0c25tcF90ZGF0YV9yb3cgICAgICpyb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaW5kZXhlcykKQEAgLTUyMiw2ICs2MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGluZGV4ZXMpOwogICAgIHJldHVybiBuZXRzbm1wX3RkYXRhX2NvbXBhcmVfb2lkKHJvdywgc2VhcmNoZm9yLCBzZWFyY2hmb3JfbGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX0NPTVBBUkVfSURYICovCiAKIC8qKiBjb21wYXJlIGEgcm93IHdpdGggdGhlIGdpdmVuIGluZGV4IE9JRCAqLwogaW50CkBAIC01NTMsNiArNjQyLDEwIEBACiAgICAgcmV0dXJuIHNubXBfb2lkdHJlZV9jb21wYXJlKCBpbmRleC0+b2lkcywgaW5kZXgtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmV0bywgICBjb21wYXJldG9fbGVuKTsKIH0KKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEEgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQodGFibGVfdGRhdGEpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEEgKi8KKwogCiAvKiogQH0gCiAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvd2F0Y2hlci5jIGIvYWdlbnQvaGVscGVycy93YXRjaGVyLmMKaW5kZXggOWNiYjRkMy4uOWIzOTMzYiAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy93YXRjaGVyLmMKKysrIGIvYWdlbnQvaGVscGVycy93YXRjaGVyLmMKQEAgLTEsMTkgKzEsMzggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3dhdGNoZXIuaD4KKwogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyLmg+CiAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIEhBVkVfRE1BTExPQ19ICitzdGF0aWMgdm9pZCBmcmVlX3dyYXBwZXIodm9pZCAqIHApCit7CisgICAgZnJlZShwKTsKK30KKyNlbHNlCisjZGVmaW5lIGZyZWVfd3JhcHBlciBmcmVlCisjZW5kaWYKKworbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUod2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9hbGwsIG1pYl9oZWxwZXJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfY3JlYXRlX2luZm82LCB3YXRjaGVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih3YXRjaGVyX3JlZ2lzdGVyX3RpbWVzdGFtcCwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl91bG9uZ19zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfcmVhZF9vbmx5X3Vsb25nX3NjYWxhciwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9yZWFkX29ubHlfaW50X3NjYWxhciwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9sb25nX3NjYWxhciwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9yZWFkX29ubHlfbG9uZ19zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfaW50X3NjYWxhciwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9vbmx5X2NvdW50ZXIzMl9zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfc3BpbmxvY2ssIHdhdGNoZXJfYWxsKQorCiAvKiogQGRlZmdyb3VwIHdhdGNoZXIgd2F0Y2hlcgogICogIFdhdGNoIGEgc3BlY2lmaWVkIHZhcmlhYmxlIGFuZCBwcm9jZXNzIGl0IGFzIGFuIGluc3RhbmNlIG9yIHNjYWxhciBvYmplY3QKICAqICBAaW5ncm91cCBsZWFmCkBAIC0zMywyMiArNTIsNTcgQEAKIH0KIAogbmV0c25tcF93YXRjaGVyX2luZm8gKgotbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCB1X2NoYXIgdHlwZSwgaW50IGZsYWdzKQorbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbzYobmV0c25tcF93YXRjaGVyX2luZm8gKndpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHVfY2hhciB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBzaXplX3QgbWF4X3NpemUsIHNpemVfdCogc2l6ZV9wKQogewotICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF93YXRjaGVyX2luZm8pOwotCi0gICAgd2luZm8tPmRhdGEgICAgICA9IGRhdGE7CisgICAgd2luZm8tPmRhdGEgPSBkYXRhOwogICAgIHdpbmZvLT5kYXRhX3NpemUgPSBzaXplOwotICAgIHdpbmZvLT5tYXhfc2l6ZSAgPSBzaXplOwkvKiBQcm9iYWJseSB3cm9uZyBmb3Igbm9uLWZpeGVkIHNpemUgZGF0YSAqLwotICAgIHdpbmZvLT50eXBlICAgICAgPSB0eXBlOwotICAgIGlmIChmbGFncykKLSAgICAgICAgd2luZm8tPmZsYWdzID0gZmxhZ3M7Ci0gICAgZWxzZQotICAgICAgICB3aW5mby0+ZmxhZ3MgPSBXQVRDSEVSX0ZJWEVEX1NJWkU7Ci0KKyAgICB3aW5mby0+bWF4X3NpemUgPSBtYXhfc2l6ZTsKKyAgICB3aW5mby0+dHlwZSA9IHR5cGU7CisgICAgd2luZm8tPmZsYWdzID0gZmxhZ3M7CisgICAgd2luZm8tPmRhdGFfc2l6ZV9wID0gc2l6ZV9wOwogICAgIHJldHVybiB3aW5mbzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfQ1JFQVRFX0lORk82CituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm82KHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCB1X2NoYXIgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBzaXplX3QgbWF4X3NpemUsIHNpemVfdCogc2l6ZV9wKQoreworICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF93YXRjaGVyX2luZm8pOworICAgIGlmICh3aW5mbykKKyAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbzYod2luZm8sIGRhdGEsIHNpemUsIHR5cGUsIGZsYWdzLCBtYXhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9wKTsKKyAgICByZXR1cm4gd2luZm87Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0NSRUFURV9JTkZPNiAqLworCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHVfY2hhciB0eXBlLCBpbnQgZmxhZ3MpCit7CisgIHJldHVybiBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvNih3aW5mbywgZGF0YSwgc2l6ZSwKKwkJCQkgICAgdHlwZSwgKGZsYWdzID8gZmxhZ3MgOiBXQVRDSEVSX0ZJWEVEX1NJWkUpLAorCQkJCSAgICBzaXplLCAgLyogUHJvYmFibHkgd3JvbmcgZm9yIG5vbi1maXhlZAorCQkJCQkgICAgKiBzaXplIGRhdGEgKi8KKwkJCQkgICAgTlVMTCk7Cit9CisKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyh2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgdV9jaGFyIHR5cGUsIGludCBmbGFncykKK3sKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfd2F0Y2hlcl9pbmZvKTsKKyAgICBpZiAod2luZm8pCisgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8od2luZm8sIGRhdGEsIHNpemUsIHR5cGUsIGZsYWdzKTsKKyAgICByZXR1cm4gd2luZm87Cit9CisKKy8qKgorICogUmVnaXN0ZXIgYSB3YXRjaGVkIHNjYWxhci4gVGhlIGNhbGxlciByZW1haW5zIHRoZSBvd25lciBvZiB3YXRjaGluZm8uCisgKgorICogQHNlZSBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKCkKKyAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3YXRjaGluZm8pCkBAIC02Miw2ICsxMTYsMzAgQEAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShyZWdpbmZvKTsKIH0KIAorLyoqCisgKiBSZWdpc3RlciBhIHdhdGNoZWQgc2NhbGFyLiBPd25lcnNoaXAgb2Ygd2F0Y2hpbmZvIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBoYW5kbGVyLgorICoKKyAqIEBzZWUgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlKCkKKyAqLworaW50CituZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisJCQkJICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2F0Y2hpbmZvKQoreworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKndoYW5kbGVyOworCisgICAgd2hhbmRsZXIgICAgICAgICA9IG5ldHNubXBfZ2V0X3dhdGNoZXJfaGFuZGxlcigpOworICAgIHdoYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKXdhdGNoaW5mbzsKKyAgICBuZXRzbm1wX293bnNfd2F0Y2hlcl9pbmZvKHdoYW5kbGVyKTsKKworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgd2hhbmRsZXIpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKHJlZ2luZm8pOworfQorCisvKioKKyAqIFJlZ2lzdGVyIGEgd2F0Y2hlZCBzY2FsYXIuIFRoZSBjYWxsZXIgcmVtYWlucyB0aGUgb3duZXIgb2Ygd2F0Y2hpbmZvLgorICoKKyAqIEBzZWUgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIoKQorICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3YXRjaGluZm8pCkBAIC03NSw3ICsxNTMsODcgQEAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnaW5mbyk7CiB9CiAKKy8qKgorICogUmVnaXN0ZXIgYSB3YXRjaGVkIHNjYWxhci4gT3duZXJzaGlwIG9mIHdhdGNoaW5mbyBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaGFuZGxlci4KKyAqCisgKiBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoKQorICovCitpbnQKK25ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2F0Y2hpbmZvKQoreworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKndoYW5kbGVyOwogCisgICAgd2hhbmRsZXIgICAgICAgICA9IG5ldHNubXBfZ2V0X3dhdGNoZXJfaGFuZGxlcigpOworICAgIHdoYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKXdhdGNoaW5mbzsKKyAgICBuZXRzbm1wX293bnNfd2F0Y2hlcl9pbmZvKHdoYW5kbGVyKTsKKworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgd2hhbmRsZXIpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihyZWdpbmZvKTsKK30KKwordm9pZAorbmV0c25tcF9vd25zX3dhdGNoZXJfaW5mbyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKQoreworICAgIG5ldHNubXBfYXNzZXJ0KGhhbmRsZXIpOworICAgIG5ldHNubXBfYXNzZXJ0KGhhbmRsZXItPm15dm9pZCk7CisgICAgaGFuZGxlci0+ZGF0YV9jbG9uZSA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2Nsb25lX3dhdGNoZXJfaW5mbzsKKyAgICBoYW5kbGVyLT5kYXRhX2ZyZWUgPSBmcmVlOworfQorCisvKiogQGNvbmQgKi8KKworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHNpemVfdAorZ2V0X2RhdGFfc2l6ZShjb25zdCBuZXRzbm1wX3dhdGNoZXJfaW5mbyogd2luZm8pCit7CisgICAgaWYgKHdpbmZvLT5mbGFncyAmIFdBVENIRVJfU0laRV9TVFJMRU4pCisgICAgICAgIHJldHVybiBzdHJsZW4oKGNvbnN0IGNoYXIqKXdpbmZvLT5kYXRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2l6ZV90IHJlczsKKyAgICAgICAgaWYgKHdpbmZvLT5mbGFncyAmIFdBVENIRVJfU0laRV9JU19QVFIpCisgICAgICAgICAgICByZXMgPSAqd2luZm8tPmRhdGFfc2l6ZV9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXMgPSB3aW5mby0+ZGF0YV9zaXplOworICAgICAgICBpZiAod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9TSVpFX1VOSVRfT0lEUykKKyAgICAgICAgICByZXMgKj0gc2l6ZW9mKG9pZCk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorfQorCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZAorc2V0X2RhdGEobmV0c25tcF93YXRjaGVyX2luZm8qIHdpbmZvLCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBtZW1jcHkod2luZm8tPmRhdGEsIGRhdGEsIHNpemUpOworICAgIGlmICh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfU1RSTEVOKQorICAgICAgICAoKGNoYXIqKXdpbmZvLT5kYXRhKVtzaXplXSA9ICdcMCc7CisgICAgZWxzZSB7CisgICAgICAgIGlmICh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfVU5JVF9PSURTKQorICAgICAgICAgIHNpemUgLz0gc2l6ZW9mKG9pZCk7CisgICAgICAgIGlmICh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfSVNfUFRSKQorICAgICAgICAgICAgKndpbmZvLT5kYXRhX3NpemVfcCA9IHNpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdpbmZvLT5kYXRhX3NpemUgPSBzaXplOworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHNpemVfdCBzaXplOworICAgIGNoYXIgZGF0YVsxXTsKK30gbmV0c25tcF93YXRjaGVyX2NhY2hlOworCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgbmV0c25tcF93YXRjaGVyX2NhY2hlKgorbmV0c25tcF93YXRjaGVyX2NhY2hlX2NyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBuZXRzbm1wX3dhdGNoZXJfY2FjaGUgKnJlcyA9IChuZXRzbm1wX3dhdGNoZXJfY2FjaGUqKQorICAgICAgICBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfd2F0Y2hlcl9jYWNoZSkgKyBzaXplIC0gMSk7CisgICAgaWYgKHJlcykgeworICAgICAgICByZXMtPnNpemUgPSBzaXplOworICAgICAgICBtZW1jcHkocmVzLT5kYXRhLCBkYXRhLCBzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworLyoqIEBlbmRjb25kICovCiAKIGludAogbmV0c25tcF93YXRjaGVyX2hlbHBlcl9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCkBAIC04Myw4ICsyNDEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8gPSAobmV0c25tcF93YXRjaGVyX2luZm8gKikgaGFuZGxlci0+bXl2b2lkOwotICAgIHVfY2hhciAgICAgICAgICAgICAgKm9sZF9kYXRhOworICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAqd2luZm8gPSAobmV0c25tcF93YXRjaGVyX2luZm8gKikgaGFuZGxlci0+bXl2b2lkOworICAgIG5ldHNubXBfd2F0Y2hlcl9jYWNoZSAqb2xkX2RhdGE7CiAKICAgICBERUJVR01TR1RMKCgiaGVscGVyOndhdGNoZXIiLCAiR290IHJlcXVlc3Q6ICAlZFxuIiwgcmVxaW5mby0+bW9kZSkpOwogICAgIERFQlVHTVNHVEwoKCAiaGVscGVyOndhdGNoZXIiLCAiICBvaWQ6IikpOwpAQCAtMTAwLDI2ICsyNTgsMjggQEAKICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5mby0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmZvLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZm8tPmRhdGFfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZGF0YV9zaXplKHdpbmZvKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIFNFVCByZXF1ZXN0cy4gIFNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHJlZ2lzdGVyZWQgUldSSVRFIAogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gd2luZm8tPnR5cGUpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1dST05HVFlQRSk7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9XUk9OR1RZUEUpOwogICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKCh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX01BWF9TSVpFKSAmJgotICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA+ICB3aW5mby0+bWF4X3NpemUpIHx8CisgICAgICAgIH0gZWxzZSBpZiAoKCh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX01BWF9TSVpFKSAmJgorICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA+IHdpbmZvLT5tYXhfc2l6ZSkgfHwKICAgICAgICAgICAgICgod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9GSVhFRF9TSVpFKSAmJgotICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPSB3aW5mby0+ZGF0YV9zaXplKSkgewotICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1dST05HTEVOR1RIKTsKLSAgICAgICAgICAgICBoYW5kbGVyLT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuICE9IGdldF9kYXRhX3NpemUod2luZm8pKSkgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfV1JPTkdMRU5HVEgpOworICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7CisgICAgICAgIH0gZWxzZSBpZiAoKHdpbmZvLT5mbGFncyAmIFdBVENIRVJfU0laRV9TVFJMRU4pICYmCisgICAgICAgICAgICAobWVtY2hyKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcsICdcMCcsCisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbikgIT0gTlVMTCkpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1dST05HVkFMVUUpOworICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKQEAgLTEyNywxNiArMjg3LDE2IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyIAogICAgICAgICAgKi8KLSAgICAgICAgb2xkX2RhdGEgPSBuZXRzbm1wX21lbWR1cCh3aW5mby0+ZGF0YSwgd2luZm8tPmRhdGFfc2l6ZSk7CisgICAgICAgIG9sZF9kYXRhID0KKyAgICAgICAgICAgIG5ldHNubXBfd2F0Y2hlcl9jYWNoZV9jcmVhdGUod2luZm8tPmRhdGEsIGdldF9kYXRhX3NpemUod2luZm8pKTsKICAgICAgICAgaWYgKG9sZF9kYXRhID09IE5VTEwpIHsKICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwogICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7Ci0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgid2F0Y2hlciIsIG9sZF9kYXRhLCBmcmVlKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgid2F0Y2hlciIsIG9sZF9kYXRhLCAmZnJlZV93cmFwcGVyKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgpAQCAtMTQ5LDE5ICszMDksMjMgQEAKICAgICAgICAgLyoKICAgICAgICAgICogdXBkYXRlIGN1cnJlbnQgCiAgICAgICAgICAqLwotICAgICAgICBtZW1jcHkod2luZm8tPmRhdGEsICh2b2lkICopcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICBzZXRfZGF0YSh3aW5mbywgKHZvaWQgKilyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1PREVfU0VUX1VORE86Ci0gICAgICAgIG1lbWNweSh3aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3RzLCAid2F0Y2hlciIpLAotICAgICAgICAgICAgICAgd2luZm8tPmRhdGFfc2l6ZSk7CisgICAgICAgIG9sZF9kYXRhID0gKG5ldHNubXBfd2F0Y2hlcl9jYWNoZSopbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsICJ3YXRjaGVyIik7CisgICAgICAgIHNldF9kYXRhKHdpbmZvLCBvbGRfZGF0YS0+ZGF0YSwgb2xkX2RhdGEtPnNpemUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgotICAgICAgICB3aW5mby0+ZGF0YV9zaXplID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbjsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAid2F0Y2hlciBoYW5kbGVyIGNhbGxlZCB3aXRoIGFuIHVua25vd24gbW9kZTogJWRcbiIsCisgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogCiAgICAgfQogCkBAIC0yMDAsNiArMzY0LDcgQEAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnaW5mbyk7ICAgLyogWFhYIC0gb3IgaW5zdGFuY2U/ICovCiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFR0lTVEVSX1RJTUVTVEFNUAogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfdGltZXN0YW1wKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcl90IHRpbWVzdGFtcCkKQEAgLTIxMCw2ICszNzUsNyBAQAogCiAgICAgcmV0dXJuIG5ldHNubXBfd2F0Y2hlZF90aW1lc3RhbXBfcmVnaXN0ZXIod2hhbmRsZXIsIHJlZ2luZm8sIHRpbWVzdGFtcCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFR0lTVEVSX1RJTUVTVEFNUCAqLwogCiAKIGludApAQCAtMjQ3LDExICs0MTMsMTMgQEAKICAgICAgICAgICogVGltZXN0YW1wcyBhcmUgaW5oZXJlbnRseSBSZWFkLU9ubHksCiAgICAgICAgICAqICBzbyBkb24ndCBuZWVkIHRvIHN1cHBvcnQgU0VUIHJlcXVlc3RzLgogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT1RXUklUQUJMRSk7CiAgICAgICAgIGhhbmRsZXItPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgLyogbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgKi8KQEAgLTI2NSw2ICs0MzMsOCBAQAogICAgICAqCiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfU1BJTkxPQ0sKKwogbmV0c25tcF9taWJfaGFuZGxlciAqCiBuZXRzbm1wX2dldF93YXRjaGVkX3NwaW5sb2NrX2hhbmRsZXIodm9pZCkKIHsKQEAgLTI5MCw3ICs0NjAsNyBAQAogICAgIHdpbmZvICAgICAgICAgICAgPSBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oKHZvaWQgKilzcGlubG9jaywKIAkJICAgICAgICAgICBzaXplb2YoaW50KSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCB3aGFuZGxlcik7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIocmVnaW5mbywgd2luZm8pOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihyZWdpbmZvLCB3aW5mbyk7CiB9CiAKIApAQCAtMzE0LDYgKzQ4NCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIEVuc3VyZSB0aGUgYXNzaWduZWQgdmFsdWUgbWF0Y2hlcyB0aGUgY3VycmVudCBvbmUKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQpAQCAtMzM0LDExICs1MDUsMTMgQEAKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKIAkoKnNwaW5sb2NrKSsrOwogCWJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIC8qIG5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnICovCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1NQSU5MT0NLICovCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTM0NywxMTggKzUyMCwxNDIgQEAKICAgICAgKgogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfY2xvbmVfd2F0Y2hlcl9pbmZvKG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbykKK3sKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqY29weSA9IG1hbGxvYyhzaXplb2YoKmNvcHkpKTsKKyAgICBpZiAoY29weSkKKwkqY29weSA9ICp3aW5mbzsKKyAgICByZXR1cm4gY29weTsKK30KKworc3RhdGljIGludAorcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHVfY2hhciB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLCBpbnQgbW9kZSkKK3sKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvID0gTlVMTDsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICp3aGFuZGxlciA9IE5VTEw7CisgICAgbmV0c25tcF93YXRjaGVyX2luZm8qIHdhdGNoaW5mbyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyhkYXRhLCBzaXplLCB0eXBlLCBXQVRDSEVSX0ZJWEVEX1NJWkUpOworICAgIGlmICh3YXRjaGluZm8pCisgICAgICAgIHdoYW5kbGVyID0gbmV0c25tcF9nZXRfd2F0Y2hlcl9oYW5kbGVyKCk7CisgICAgaWYgKHdhdGNoaW5mbyAmJiB3aGFuZGxlcikgeworICAgICAgICB3aGFuZGxlci0+bXl2b2lkID0gd2F0Y2hpbmZvOworCW5ldHNubXBfb3duc193YXRjaGVyX2luZm8od2hhbmRsZXIpOworICAgICAgICByZWdpbmZvID0KKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBtb2RlKTsKKyAgICB9CisgICAgaWYgKHdhdGNoaW5mbyAmJiB3aGFuZGxlciAmJiByZWdpbmZvKSB7CisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgd2hhbmRsZXIpOworICAgICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnaW5mbyk7CisgICAgfQorICAgIGlmICh3aGFuZGxlcikKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUod2hhbmRsZXIpOworICAgIGVsc2UgaWYgKHdhdGNoaW5mbykKKyAgICAgICAgZnJlZSh3YXRjaGluZm8pOworICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9VTE9OR19TQ0FMQVIKIGludAogbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUgKSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIHVfbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFICkpOworICAgIHJldHVybiByZWdpc3Rlcl9zY2FsYXJfd2F0Y2hlcigKKyAgICAgICAgbmFtZSwgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggdV9sb25nICksCisgICAgICAgIEFTTl9VTlNJR05FRCwgc3ViaGFuZGxlciwgSEFORExFUl9DQU5fUldSSVRFKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfVUxPTkdfU0NBTEFSICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFQURfT05MWV9VTE9OR19TQ0FMQVIKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkgKSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIHVfbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFICkpOworICAgIHJldHVybiByZWdpc3Rlcl9zY2FsYXJfd2F0Y2hlcigKKyAgICAgICAgbmFtZSwgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggdV9sb25nICksCisgICAgICAgIEFTTl9VTlNJR05FRCwgc3ViaGFuZGxlciwgSEFORExFUl9DQU5fUk9OTFkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUFEX09OTFlfVUxPTkdfU0NBTEFSICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0xPTkdfU0NBTEFSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFICksCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCi0gICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCBsb25nICksCi0gICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSApKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoCisgICAgICAgIG5hbWUsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIGxvbmcgKSwKKyAgICAgICAgQVNOX0lOVEVHRVIsIHN1YmhhbmRsZXIsIEhBTkRMRVJfQ0FOX1JXUklURSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0xPTkdfU0NBTEFSICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFQURfT05MWV9MT05HX1NDQUxBUgogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSApLAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAotICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUgKSk7CisgICAgcmV0dXJuIHJlZ2lzdGVyX3NjYWxhcl93YXRjaGVyKAorICAgICAgICBuYW1lLCByZWdfb2lkLCByZWdfb2lkX2xlbiwKKyAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCBsb25nICksCisgICAgICAgIEFTTl9JTlRFR0VSLCBzdWJoYW5kbGVyLCBIQU5ETEVSX0NBTl9ST05MWSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFQURfT05MWV9MT05HX1NDQUxBUiAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0lOVF9TQ0FMQVIKIGludAogbmV0c25tcF9yZWdpc3Rlcl9pbnRfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFICksCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCi0gICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCBpbnQgKSwKLSAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFICkpOworICAgIHJldHVybiByZWdpc3Rlcl9zY2FsYXJfd2F0Y2hlcigKKyAgICAgICAgbmFtZSwgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggaW50ICksCisgICAgICAgIEFTTl9JTlRFR0VSLCBzdWJoYW5kbGVyLCBIQU5ETEVSX0NBTl9SV1JJVEUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9JTlRfU0NBTEFSICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFQURfT05MWV9JTlRfU0NBTEFSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSApLAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAotICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggaW50ICksCi0gICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSApKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoCisgICAgICAgIG5hbWUsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIGludCApLAorICAgICAgICBBU05fSU5URUdFUiwgc3ViaGFuZGxlciwgSEFORExFUl9DQU5fUk9OTFkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUFEX09OTFlfSU5UX1NDQUxBUiAqLwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfQ09VTlRFUjMyX1NDQUxBUgogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkgKSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIHVfbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9DT1VOVEVSLCBXQVRDSEVSX0ZJWEVEX1NJWkUgKSk7CisgICAgcmV0dXJuIHJlZ2lzdGVyX3NjYWxhcl93YXRjaGVyKAorICAgICAgICBuYW1lLCByZWdfb2lkLCByZWdfb2lkX2xlbiwKKyAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCB1X2xvbmcgKSwKKyAgICAgICAgQVNOX0NPVU5URVIsIHN1YmhhbmRsZXIsIEhBTkRMRVJfQ0FOX1JPTkxZKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9DT1VOVEVSMzJfU0NBTEFSICovCiAvKiogIEB9ICovCiAKZGlmZiAtLWdpdCBhL2FnZW50L2tlcm5lbC5jIGIvYWdlbnQva2VybmVsLmMKaW5kZXggYmM0NzZkYS4uMDBmZGU3NyAxMDA2NDQKLS0tIGEvYWdlbnQva2VybmVsLmMKKysrIGIvYWdlbnQva2VybmVsLmMKQEAgLTEsNyArMSwxOSBAQAotCi0vKgotICogIDEzIEp1biA5MSAgd3NhayAod2sweEBhbmRyZXcpIGFkZGVkIG1pcHMgc3VwcG9ydAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBOZXQtU05NUCAtIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wgYWdlbnQgbGlicmFyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZmlsZSBrZXJuZWwuYworICogICAgIE5ldC1TTk1QIEtlcm5lbCBEYXRhIEFjY2VzcyBMaWJyYXJ5LgorICogICAgIFByb3ZpZGVzIGFjY2VzcyB0byBrZXJuZWwgdmlydHVhbCBtZW1vcnkgZm9yIHN5c3RlbXMgdGhhdAorICogICAgIHN1cHBvcnQgaXQuCisgKiBAYXV0aG9yICAgU2VlIFJFQURNRSBmaWxlIGZvciBhIGxpc3Qgb2YgY29udHJpYnV0b3JzCiAgKi8KKy8qIENvcHlyaWdodHM6CisgKiAgICAgQ29weXJpZ2h0IGhvbGRlcnMgYXJlIGxpc3RlZCBpbiBSRUFETUUgZmlsZS4KKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQuIExpY2Vuc2UgdGVybXMgYXJlIHNwZWNpZmllZAorICogICAgIGluIENPUFlJTkcgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIApAQCAtNDAsNyArNTIsNyBAQAogCiAKICNpZiBIQVZFX0tWTV9ICi1rdm1fdCAgICAgICAgICAqa2Q7Citrdm1fdCAqa2QgPSBOVUxMOwogCiAvKioKICAqIEluaXRpYWxpemUgdGhlIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyBrZXJuZWwgdmlydHVhbCBtZW1vcnkuCkBAIC01Niw2ICs2OCwxMiBAQAogICAgIGNoYXIgICAgICAgICAgICBlcnJbNDA5Nl07CiAKICAgICBrZCA9IGt2bV9vcGVuZmlsZXMoTlVMTCwgTlVMTCwgTlVMTCwgT19SRE9OTFksIGVycik7CisgICAgaWYgKCFrZCkKKyNpZmRlZiBLVk1fTk9fRklMRVMKKwlrZCA9IGt2bV9vcGVuZmlsZXMoTlVMTCwgTlVMTCwgTlVMTCwgS1ZNX05PX0ZJTEVTLCBlcnIpOworI2Vsc2UKKwlrZCA9IGt2bV9vcGVuZmlsZXMoTlVMTCwgIi9kZXYvbnVsbCIsIE5VTEwsIE9fUkRPTkxZLCBlcnIpOworI2VuZGlmCiAgICAgaWYgKCFrZCAmJiAhbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fUk9PVF9BQ0NFU1MpKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19DUklULCAiaW5pdF9rbWVtOiBrdm1fb3BlbmZpbGVzIGZhaWxlZDogJXNcbiIsIGVycik7CkBAIC03MywxOCArOTEsMTggQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0KLS8qCi0gKiAga2xvb2t1cDoKKy8qKiBSZWFkcyBrZXJuZWwgbWVtb3J5LgorICogIFNlZWtzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gaW4ga21lbSwgdGhlbgorICogIGRvZXMgYSByZWFkIG9mIGdpdmVuIGFtb3VudCBvYiBieXRlcyBpbnRvIHRhcmdldCBidWZmZXIuCiAgKgotICogIEl0IHNlZWtzIHRvIHRoZSBsb2NhdGlvbiAgb2ZmICBpbiBrbWVtCi0gKiAgSXQgZG9lcyBhIHJlYWQgaW50byAgdGFyZ2V0ICBvZiAgc2l6ICBieXRlcy4KKyAqIEBwYXJhbSBvZmYgVGhlIGxvY2F0aW9uIHRvIHNlZWsuCiAgKgotICogIFJldHVybiAwIG9uIGZhaWx1cmUgYW5kIDEgb24gc3VjZXNzLgorICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGJ1ZmZlciB0byByZWFkIGludG8uCiAgKgorICogQHBhcmFtIHNpeiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAqCisgKiBAcmV0dXJuIGdpdmVzIDEgb24gc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJlLgogICovCi0KLQogaW50CiBrbG9va3VwKHVuc2lnbmVkIGxvbmcgb2ZmLCB2b2lkICp0YXJnZXQsIHNpemVfdCBzaXopCiB7CkBAIC0xMDcsNiArMTI1LDE4IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKKy8qKiBDbG9zZXMgdGhlIGtlcm5lbCBtZW1vcnkgc3VwcG9ydC4KKyAqLwordm9pZAorZnJlZV9rbWVtKHZvaWQpCit7CisgICAgaWYgKGtkICE9IE5VTEwpCisgICAgeworICAgICAga3ZtX2Nsb3NlKGtkKTsKKyAgICAgIGtkID0gTlVMTDsKKyAgICB9Cit9CisKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9LVk1fSCAqLwogCiBzdGF0aWMgb2ZmX3QgICAga2xzZWVrKG9mZl90KTsKQEAgLTE1MSwxOSArMTgxLDE3IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotCi0vKgorLyoqIEBwcml2YXRlCiAgKiAgU2VlayBpbnRvIHRoZSBrZXJuZWwgZm9yIGEgdmFsdWUuCiAgKi8KLXN0YXRpYyAgICAgICAgICBvZmZfdAorc3RhdGljIG9mZl90CiBrbHNlZWsob2ZmX3QgYmFzZSkKIHsKICAgICByZXR1cm4gKGxzZWVrKGttZW0sIChvZmZfdCkgYmFzZSwgU0VFS19TRVQpKTsKIH0KIAotCi0vKgotICogIFJlYWQgZnJvbSB0aGUga2VybmVsIAorLyoqIEBwcml2YXRlCisgKiAgUmVhZCBmcm9tIHRoZSBrZXJuZWwuCiAgKi8KIHN0YXRpYyBpbnQKIGtscmVhZChjaGFyICpidWYsIGludCBidWZsZW4pCkBAIC0xNzEsMTggKzE5OSwxOCBAQAogICAgIHJldHVybiAocmVhZChrbWVtLCBidWYsIGJ1ZmxlbikpOwogfQogCi0KLS8qCi0gKiAga2xvb2t1cDoKKy8qKiBSZWFkcyBrZXJuZWwgbWVtb3J5LgorICogIFNlZWtzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gaW4ga21lbSwgdGhlbgorICogIGRvZXMgYSByZWFkIG9mIGdpdmVuIGFtb3VudCBvYiBieXRlcyBpbnRvIHRhcmdldCBidWZmZXIuCiAgKgotICogIEl0IHNlZWtzIHRvIHRoZSBsb2NhdGlvbiAgb2ZmICBpbiBrbWVtCi0gKiAgSXQgZG9lcyBhIHJlYWQgaW50byAgdGFyZ2V0ICBvZiAgc2l6ICBieXRlcy4KKyAqIEBwYXJhbSBvZmYgVGhlIGxvY2F0aW9uIHRvIHNlZWsuCiAgKgotICogIFJldHVybiAwIG9uIGZhaWx1cmUgYW5kIDEgb24gc3VjZXNzLgorICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGJ1ZmZlciB0byByZWFkIGludG8uCiAgKgorICogQHBhcmFtIHNpeiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAqCisgKiBAcmV0dXJuIGdpdmVzIDEgb24gc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJlLgogICovCi0KLQogaW50CiBrbG9va3VwKHVuc2lnbmVkIGxvbmcgb2ZmLCB2b2lkICp0YXJnZXQsIHNpemVfdCBzaXopCiB7CkBAIC0yMTIsNiArMjQwLDI3IEBACiAgICAgcmV0dXJuICgxKTsKIH0KIAorLyoqIENsb3NlcyB0aGUga2VybmVsIG1lbW9yeSBzdXBwb3J0LgorICovCit2b2lkCitmcmVlX2ttZW0odm9pZCkKK3sKKyAgICBpZiAoc3dhcCA+PSAwKSB7CisgICAgICAgIGNsb3NlKHN3YXApOworICAgICAgICBzd2FwID0gLTE7CisgICAgfQorICAgIGlmIChtZW0gPj0gMCkgeworICAgICAgICBjbG9zZShtZW0pOworICAgICAgICBtZW0gPSAtMTsKKyAgICB9CisgICAgaWYgKGttZW0gPj0gMCkgeworICAgICAgICBjbG9zZShrbWVtKTsKKyAgICAgICAga21lbSA9IC0xOworICAgIH0KK30KKwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIQVZFX0tWTV9IICovCiAKKyNlbHNlCitpbnQgdW51c2VkOwkvKiBTdXBwcmVzcyAiZW1wdHkgdHJhbnNsYXRpb24gdW5pdCIgd2FybmluZyAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0NBTl9VU0VfTkxJU1QgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2tlcm5lbC5oIGIvYWdlbnQva2VybmVsLmgKaW5kZXggZWI2YTc0Yy4uMTMxNjg3YSAxMDA2NDQKLS0tIGEvYWdlbnQva2VybmVsLmgKKysrIGIvYWdlbnQva2VybmVsLmgKQEAgLTEsNyArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBOZXQtU05NUCAtIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wgYWdlbnQgbGlicmFyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZmlsZSBrZXJuZWwuaAorICogICAgIE5ldC1TTk1QIEtlcm5lbCBEYXRhIEFjY2VzcyBMaWJyYXJ5IC0gaGVhZGVyLgorICogICAgIFByb3ZpZGVzIGFjY2VzcyB0byBrZXJuZWwgdmlydHVhbCBtZW1vcnkgZm9yIHN5c3RlbXMgdGhhdAorICogICAgIHN1cHBvcnQgaXQuCisgKiBAYXV0aG9yICAgU2VlIFJFQURNRSBmaWxlIGZvciBhIGxpc3Qgb2YgY29udHJpYnV0b3JzCisgKi8KKy8qIENvcHlyaWdodHM6CisgKiAgICAgQ29weXJpZ2h0IGhvbGRlcnMgYXJlIGxpc3RlZCBpbiBSRUFETUUgZmlsZS4KKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQuIExpY2Vuc2UgdGVybXMgYXJlIHNwZWNpZmllZAorICogICAgIGluIENPUFlJTkcgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZmRlZiBORVRTTk1QX0NBTl9VU0VfTkxJU1QKIGV4dGVybiBpbnQgICAgICBpbml0X2ttZW0oY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgICAgICBrbG9va3VwKHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkICAgICBmcmVlX2ttZW0odm9pZCk7CiAjZGVmaW5lIE5FVFNOTVBfS0xPT0tVUCh4LHkseikga2xvb2t1cCgodW5zaWduZWQgbG9uZykgeCx5LHopCiAjZWxzZQogI2RlZmluZSBORVRTTk1QX0tMT09LVVAoeCx5LHopICgwKQpAQCAtMTEsMyArMjgsNCBAQAogI2luY2x1ZGUgPGt2bS5oPgogZXh0ZXJuIGt2bV90ICAgKmtkOwogI2VuZGlmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJfbW9kdWxlcy5jIGIvYWdlbnQvbWliX21vZHVsZXMuYwppbmRleCA5NWU0Njk1Li5jZGUzMTdlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJfbW9kdWxlcy5jCisrKyBiL2FnZW50L21pYl9tb2R1bGVzLmMKQEAgLTE3LDExICsxNyw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTMzLDkgKzI5LDYgQEAKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC00OSw5ICs0Miw2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oPgogI2luY2x1ZGUgIm1pYl9tb2R1bGVfaW5jbHVkZXMuaCIKLSNpZmRlZiBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi0jaW5jbHVkZSAibWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgiCi0jZW5kaWYKIAogc3RhdGljIGludCBuZWVkX3NodXRkb3duID0gMDsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kIGIvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kCmluZGV4IGRlYWJmMDIuLmE0ZTk3MTEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZAorKysgYi9hZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQKQEAgLTgsNTUgKzgsNjQgQEAKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjUsNiArNzQsNyBAQAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDEsNjkgKzExMSw3MSBAQAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggaGVhZGVyX2NvbXBsZXguaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9oZWFkZXJfY29tcGxleC5sbzogaGVhZGVyX2NvbXBsZXguaAogLi9rZXJuZWxfc3Vub3M1LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2tlcm5lbF9zdW5vczUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4va2VybmVsX3N1bm9zNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2tlcm5lbF9zdW5vczUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9rZXJuZWxfc3Vub3M1LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNzIsNiArMTg0LDcgQEAKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjA4LDY0ICsyMjEsNzAgQEAKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHRlc3RoYW5kbGVyLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdGVzdGhhbmRsZXIubG86IHRlc3RoYW5kbGVyLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI3NCw2ICsyOTMsNyBAQAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMxMCw2OTEgKzMzMCw3NiBAQAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKLS4vdXRpbF9mdW5jcy5sbzogdXRpbGl0aWVzL2V4ZWN1dGUuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc3RydWN0LmgKKy4vdXRpbF9mdW5jcy5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91dGlsX2Z1bmNzLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi91dGlsX2Z1bmNzLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggdXRpbGl0aWVzL2V4ZWN1dGUuaAogLi91dGlsX2Z1bmNzLmxvOiB1Y2Qtc25tcC9lcnJvcm1pYi5oIG1pYmRlZnMuaAogLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vd2luRXh0RExMLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3dpbkV4dERMTC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3dpbkV4dERMTC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3dpbkV4dERMTC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4vUm1vbi9hZ3V0aWwuaCAuL1Jtb24vYWd1dGlsX2FwaS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAotLi9SbW9uL2FsYXJtLmxvOiAuL1Jtb24vYWxhcm0uaCAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dfYXBpLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL1Jtb24vZXZlbnQubG86IC4vUm1vbi9ldmVudC5oIC4vUm1vbi9hZ3V0aWxfYXBpLmggLi9SbW9uL3Jvd19hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuL1Jtb24vaGlzdG9yeS5oIC4vUm1vbi9hZ3V0aWxfYXBpLmggLi9SbW9uL3Jvd19hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vUm1vbi9yb3dzLmxvOiAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dzLmggLi9SbW9uL3Jvd19hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiBzdHJ1Y3QuaCAuL1Jtb24vc3RhdGlzdGljcy5oIC4vUm1vbi9hZ3V0aWxfYXBpLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuL1Jtb24vcm93X2FwaS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDAzLDYgKzQwOCw3IEBACiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDQwLDY2ICs0NDYsNzEgQEAKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL2FnZW50L2V4dGVuZC5sbzogYWdlbnQvZXh0ZW5kLmggdXRpbGl0aWVzL2V4ZWN1dGUuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiBtaWJkZWZzLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiBhZ2VudC9leHRlbmQuaCB1dGlsaXRpZXMvZXhlY3V0ZS5oIHN0cnVjdC5oCisuL2FnZW50L2V4dGVuZC5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggbWliZGVmcy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTA4LDYgKzUxOSw3IEBACiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE0NCw2NSArNTU2LDcwIEBACiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIGFnZW50L25zQ2FjaGUuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50L25zQ2FjaGUubG86IGFnZW50L25zQ2FjaGUuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTIxMSw2ICs2MjgsNyBAQAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyNDcsNjUgKzY2NSw3MCBAQAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBhZ2VudC9uc0RlYnVnLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiBhZ2VudC9uc0RlYnVnLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzMTQsNiArNzM3LDcgQEAKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzNTAsNjUgKzc3NCw3MCBAQAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIGFnZW50L25zTG9nZ2luZy5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiBhZ2VudC9uc0xvZ2dpbmcuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQxNyw2ICs4NDYsNyBAQAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0NTQsNjQgKzg4NCw2OSBAQAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE1MjAsNiArOTU1LDcgQEAKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE1NTcsNjQgKzk5Myw2OSBAQAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE2MjMsNiArMTA2NCw3IEBACiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE2NjAsNjQgKzExMDIsNjkgQEAKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNzI2LDYgKzExNzMsNyBAQAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNzYzLDY1ICsxMjExLDcwIEBACiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2FnZW50L3NubXBkLmggYWdlbnR4L2FnZW50eF9jb25maWcuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogYWdlbnR4L3Byb3RvY29sLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE4MzAsNiArMTI4Myw3IEBACiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTg2NywxNjggKzEzMjEsNzAgQEAKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaW5kZXguaAogLi9hZ2VudHgvY2xpZW50LmxvOiBhZ2VudHgvcHJvdG9jb2wuaCBhZ2VudHgvY2xpZW50LmggYWdlbnR4L3N1YmFnZW50LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggLi4vLi4vYWdlbnQvc25tcGQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiBhZ2VudHgvcHJvdG9jb2wuaCBhZ2VudHgvbWFzdGVyX2FkbWluLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIwMzcsNiArMTM5Myw3IEBACiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjA3NCw2NyArMTQzMSwxODMgQEAKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IGFnZW50eC9wcm90b2NvbC5oIGFnZW50eC9jbGllbnQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2luZGV4LmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiBtaWJJSS9zeXNPUlRhYmxlLmggLi9hZ2VudHgvbWFzdGVyLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi9hZ2VudHgvbWFzdGVyLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2FnZW50L3NubXBkLmggYWdlbnR4L3Byb3RvY29sLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogYWdlbnR4L21hc3Rlcl9hZG1pbi5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMTQzLDY1ICsxNjE2LDcwIEBACiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogYWdlbnR4L3Byb3RvY29sLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIyMTAsNiArMTY4OCw3IEBACiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMjQ2LDY4ICsxNzI1LDE4NCBAQAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4uLy4uL2FnZW50L3NubXBkLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiBhZ2VudHgvcHJvdG9jb2wuaCBhZ2VudHgvY2xpZW50LmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2FnZW50L3NubXBkLmggYWdlbnR4L3Byb3RvY29sLmggYWdlbnR4L2NsaWVudC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogYWdlbnR4L2FnZW50eF9jb25maWcuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiBtaWJJSS9zeXNPUlRhYmxlLmggLi9hZ2VudHgvc3ViYWdlbnQuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuL2FnZW50eC9zdWJhZ2VudC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMzE2LDYgKzE5MTEsNyBAQAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMzUzLDY0ICsxOTQ5LDY5IEBACiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjQxOSw2ICsyMDIwLDcgQEAKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjQ1Niw2NyArMjA1OCw3MiBAQAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNTI1LDYgKzIxMzIsNyBAQAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI1NjIsNjUgKzIxNzAsNzAgQEAKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmggLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2MjksNiArMjI0Miw3IEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI2NjYsNjYgKzIyODAsNzEgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogaGVhZGVyX2NvbXBsZXguaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjczNCw2ICsyMzUzLDcgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI3NzEsNjYgKzIzOTEsNzEgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiBoZWFkZXJfY29tcGxleC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yODM5LDYgKzI0NjQsNyBAQAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI4NzYsNjYgKzI1MDIsNzEgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI5NDQsNiArMjU3NSw3IEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjk4MSw2ICsyNjEzLDcgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmggLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmgKQEAgLTI5ODksNjIgKzI2MjIsNjYgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMDUzLDYgKzI2OTAsNyBAQAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMwOTAsNjYgKzI3MjgsNzEgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTMxNTgsNiArMjgwMSw3IEBACiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMxOTUsNjMgKzI4MzksNjggQEAKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzI2MCw2ICsyOTA5LDcgQEAKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMjk3LDY0ICsyOTQ3LDY5IEBACiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzM2Myw2ICszMDE4LDcgQEAKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMzk5LDE3MiArMzA1NSw3MCBAQAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogc3RydWN0LmggLi9leGFtcGxlcy9leGFtcGxlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jb2x1bW5zLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfZW51bXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi9leGFtcGxlcy9leGFtcGxlLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM1NzMsNiArMzEyNyw3IEBACiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zNjEwLDY1ICszMTY1LDE4MyBAQAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY29sdW1ucy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzY3Nyw2NyArMzM1MCw3MiBAQAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM3NDYsNjYgKzM0MjQsNzEgQEAKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfZW51bXMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzgxNCw2ICszNDk3LDcgQEAKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTM4NTAsNjQgKzM1MzQsNzAgQEAKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBub3RpZmljYXRpb24uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogbm90aWZpY2F0aW9uLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM5MTYsNiArMzYwNiw3IEBACiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzk1Myw2MyArMzY0NCw2OCBAQAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQwMTgsNiArMzcxNCw3IEBACiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDA1NCw2NSArMzc1MSw3MSBAQAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogc3RydWN0LmggLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDEyMSw2ICszODI0LDcgQEAKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00MTU4LDY0ICszODYyLDY5IEBACiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDIyNCw2ICszOTMzLDcgQEAKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTQyMzIsNjMgKzM5NDIsNjcgQEAKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi9ob3N0L2hyX2RldmljZS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oIGhvc3RfcmVzLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQyOTcsNiArNDAxMSw3IEBACiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNDMwNyw2MiArNDAyMiw2NiBAQAogLi9ob3N0L2hyX2Rpc2subG86IC4vaG9zdC9ocl9kaXNrLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQzNzEsNiArNDA5MCw3IEBACiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00NDA4LDY2ICs0MTI4LDI5NSBAQAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5LmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiBob3N0X3Jlcy5oIC4vaG9zdC9ocl9maWxlc3lzLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuL2hvc3QvaHJfc3RvcmFnZS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogaG9zdF9yZXMuaCAuL2hvc3QvaHJfZmlsZXN5cy5oIC4vaG9zdC9ocl9zdG9yYWdlLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuL2hvc3QvaHJfZGlzay5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IGhvc3RfcmVzLmggLi9ob3N0L2hyaF9maWxlc3lzLmggLi9ob3N0L2hyaF9zdG9yYWdlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi9ob3N0L2hyX2Rpc2suaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiBob3N0X3Jlcy5oIC4vaG9zdC9ocmhfZmlsZXN5cy5oIC4vaG9zdC9ocmhfc3RvcmFnZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4vaG9zdC9ocl9kaXNrLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ0NzYsNiArNDQyNSw3IEBACiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00NTEzLDY2ICs0NDYzLDcxIEBACiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IGhvc3RfcmVzLmggbWliSUkvaW50ZXJmYWNlcy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi9ob3N0L2hyX25ldHdvcmsuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oIGhvc3RfcmVzLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBob3N0X3Jlcy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDU4MSw2ICs0NTM2LDcgQEAKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNDU5MCw2MyArNDU0Niw2NyBAQAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4vaG9zdC9ocl9vdGhlci5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogaG9zdF9yZXMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00NjU1LDYgKzQ2MTUsNyBAQAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNDY2Miw2NiArNDYyMyw3MCBAQAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi9ob3N0L2hyX3BhcnRpdGlvbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuL2hvc3QvaHJfZmlsZXN5cy5oIC4vaG9zdC9ocl9kaXNrLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4vaG9zdC9ocl9wYXJ0aXRpb24uaCAuL2hvc3QvaHJfZmlsZXN5cy5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuL2hvc3QvaHJfZGlzay5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaG9zdC9ocl9wcmludC5sbzogaG9zdF9yZXMuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ3MzAsNiArNDY5NSw3IEBACiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTQ3MzcsNjUgKzQ3MDMsNzEgQEAKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi9ob3N0L2hyX3ByaW50Lmggc3RydWN0LmgKLS4vaG9zdC9ocl9wcmludC5sbzogdXRpbF9mdW5jcy5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4vaG9zdC9ocl9wcmludC5oIHN0cnVjdC5oIHV0aWxfZnVuY3MuaAorLi9ob3N0L2hyX3ByaW50LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vaG9zdC9ocl9wcmludC5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vaG9zdC9ocl9wcmludC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00ODA0LDYgKzQ3NzYsNyBAQAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDg0MSw2OCArNDgxNCw3MyBAQAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL2hvc3QvaHJfcHJvYy5sbzogaG9zdF9yZXMuaCAuL2hvc3QvaHJfcHJvYy5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hvc3QvaHJfcHJvYy5sbzogaG9zdF9yZXMuaAorLi9ob3N0L2hyX3Byb2MubG86IC4vaG9zdC9ocl9wcm9jLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogdWNkLXNubXAvbG9hZGF2ZS5oIG1pYmRlZnMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ5MTEsNiArNDg4OSw3IEBACiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNDkxOCw4ICs0ODk3LDcgQEAKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuL2hvc3QvaHJfc3RvcmFnZS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi9ob3N0L2hyX2ZpbGVzeXMuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4vaG9zdC9ocl9zdG9yYWdlLmggLi9ob3N0L2hyX2ZpbGVzeXMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00OTUxLDY1ICs0OTI5LDE4MCBAQAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTUwMTgsNiArNTExMSw3IEBACiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCkBAIC01MDI3LDMyICs1MTIxLDUyIEBACiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuL2hvc3QvaHJfc3dpbnN0LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogaG9zdF9yZXMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTUwNjIsMjIgKzUxNzYsNiBAQAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTUwOTIsNiArNTE5MCw3IEBACiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTUxMDIsNjMgKzUyMDEsMjg4IEBACiAuL2hvc3QvaHJfc3dydW4ubG86IC4vaG9zdC9ocl9zd3J1bi5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmggLi9ob3N0L2hyU1dSdW5UYWJsZS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01MTY3LDYgKzU0OTEsNyBAQAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01MjAzLDY2ICs1NTI4LDcxIEBACiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBob3N0LmggaG9zdF9yZXMuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi9ob3N0L2hyX3N5c3RlbS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIGhvc3QuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogaG9zdF9yZXMuaCAuL2hvc3QvaHJfc3lzdGVtLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01MjcxLDYgKzU2MDEsNyBAQAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01MzA4LDY3ICs1NjM5LDcyIEBACiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuL2lwLW1pYi9pcF9zY2FsYXJzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL2F0LmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01Mzc3LDYgKzU3MTMsNyBAQAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01NDE0LDY4ICs1NzUxLDczIEBACiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oIC4vbWliSUkvYXQuaAogLi9taWJJSS9hdC5sbzogLi9taWJJSS9pbnRlcmZhY2VzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9pY21wLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTQ4NCw2ICs1ODI2LDcgQEAKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01NTIxLDY2ICs1ODY0LDczIEBACiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmggdXRpbF9mdW5jcy5oCi0uL21pYklJL2ljbXAubG86IHN0cnVjdC5oIC4vbWliSUkvaWNtcC5oIC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9taWJJSS9pY21wLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggLi9taWJJSS9pY21wLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTU1ODksNiArNTkzOSw3IEBACiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNTYyNiwxNzYgKzU5NzcsNzcgQEAKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuL21pYklJL2ludGVyZmFjZXMuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi9taWJJSS9zeXNPUlRhYmxlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL21pYklJL2lwLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkvaXAubG86IHN0cnVjdC5oIC4vbWliSUkvaXAuaCAuL21pYklJL3Zhcl9yb3V0ZS5oCi0uL21pYklJL2lwLmxvOiAuL21pYklJL3JvdXRlX3dyaXRlLmggLi9taWJJSS9hdC5oIC4vbWliSUkvaXBBZGRyLmgKLS4vbWliSUkvaXAubG86IC4vbWliSUkvaW50ZXJmYWNlcy5oIC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTgwNCw2ICs2MDU2LDcgQEAKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTU4NDEsMTc3ICs2MDk0LDE4OSBAQAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9taWJJSS9pcEFkZHIubG86IC4vbWliSUkvaXAuaCAuL21pYklJL3Zhcl9yb3V0ZS5oIC4vbWliSUkvcm91dGVfd3JpdGUuaAotLi9taWJJSS9pcEFkZHIubG86IC4vbWliSUkvYXQuaCAuL21pYklJL2ludGVyZmFjZXMuaCAuL21pYklJL3N5c09SVGFibGUuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvcm91dGVfaGVhZGVycy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGUuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY29sdW1ucy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9lbnVtcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL3Zhcl9yb3V0ZS5oCisuL21pYklJL2lwQWRkci5sbzogLi9taWJJSS9hdC5oIC4vbWliSUkvaW50ZXJmYWNlcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL21pYklJL2lwLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9taWJJSS9pcC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIC4vbWliSUkvaXAuaAorLi9taWJJSS9pcC5sbzogLi9taWJJSS92YXJfcm91dGUuaCAuL21pYklJL3JvdXRlX3dyaXRlLmggLi9taWJJSS9hdC5oCisuL21pYklJL2lwLmxvOiAuL21pYklJL2lwQWRkci5oIC4vbWliSUkvaW50ZXJmYWNlcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi9taWJJSS9yb3V0ZV9oZWFkZXJzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjAyMCw2ICs2Mjg1LDcgQEAKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjA1Nyw2NSArNjMyMywxODUgQEAKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfZW51bXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL3JvdXRlX2hlYWRlcnMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NvbHVtbnMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfZW51bXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS92YXJfcm91dGUuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjEyNCw2NiArNjUxMCw3MSBAQAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9lbnVtcy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02MTkyLDYgKzY1ODMsNyBAQAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTYyMjksNjcgKzY2MjEsNzEgQEAKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL21pYklJL2lwdjYuaAotLi9taWJJSS9pcHY2LmxvOiAuL21pYklJL3Zhcl9yb3V0ZS5oIC4vbWliSUkvcm91dGVfd3JpdGUuaCAuL21pYklJL2F0LmgKLS4vbWliSUkvaXB2Ni5sbzogLi9taWJJSS9pbnRlcmZhY2VzLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vYWdlbnQva2VybmVsLmggLi9taWJJSS9pcHY2LmggLi9taWJJSS92YXJfcm91dGUuaAorLi9taWJJSS9pcHY2LmxvOiAuL21pYklJL3JvdXRlX3dyaXRlLmggLi9taWJJSS9hdC5oIC4vbWliSUkvaW50ZXJmYWNlcy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02Mjk4LDYgKzY2OTQsNyBAQAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjMzNCw2NiArNjczMSw3MCBAQAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IHN0cnVjdC5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi9taWJJSS9rZXJuZWxfbGludXguaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi9taWJJSS9rZXJuZWxfbGludXguaCAuL21pYklJL2tlcm5lbF9taWIuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjQwMiw2ICs2ODAzLDcgQEAKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02NDM5LDY0ICs2ODQxLDE3OCBAQAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4vbWliSUkva2VybmVsX3N5c2N0bC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NTA1LDYgKzcwMjEsNyBAQAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjU0Miw2NCArNzA1OSw2OSBAQAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4vbWliSUkvbXRhX3NlbmRtYWlsLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY2MDgsNiArNzEzMCw3IEBACiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTY2NDQsNjYgKzcxNjcsNzEgQEAKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4vbWliSUkvaXAuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi9taWJJSS92YXJfcm91dGUuaCAuL21pYklJL3JvdXRlX3dyaXRlLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4vbWliSUkvYXQuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi9taWJJSS9pcC5oIC4vbWliSUkvdmFyX3JvdXRlLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4vbWliSUkvcm91dGVfd3JpdGUuaCAuL21pYklJL2F0LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY3MTIsNiArNzI0MCw3IEBACiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTY3NDksNjQgKzcyNzgsMTgwIEBACiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4vbWliSUkvc2V0U2VyaWFsTm8uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuL21pYklJL3NubXBfbWliXzVfNS5oIC4vbWliSUkvdXBkYXRlcy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02ODE1LDYgKzc0NjAsNyBAQAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02ODUxLDY1ICs3NDk3LDcyIEBACiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4vbWliSUkvc25tcF9taWIuaCAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4vbWliSUkvc25tcF9taWIuaCAuL21pYklJL3VwZGF0ZXMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjkxOCw2ICs3NTcxLDcgQEAKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02OTU1LDY2ICs3NjA5LDcyIEBACiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL21pYklJL3N5c09SVGFibGUubG86IHN0cnVjdC5oIHV0aWxfZnVuY3MuaCAuL21pYklJL3N5c09SVGFibGUuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9hZ2VudC9zbm1wZC5oIGFnZW50eC9zdWJhZ2VudC5oIGFnZW50eC9jbGllbnQuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuL21pYklJL3N5c09SVGFibGUuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzAyMyw2ICs3NjgzLDcgQEAKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03MDU5LDY3ICs3NzIwLDc3IEBACiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiBzdHJ1Y3QuaCAuL21pYklJL3N5c3RlbV9taWIuaCAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIHN0cnVjdC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuL21pYklJL3N5c3RlbV9taWIuaCAuL21pYklJL3VwZGF0ZXMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS90Y3AubG86IC4vbWliSUkvbWliSUlfY29tbW9uLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzEyOCw2ICs3Nzk5LDcgQEAKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTcxNjUsNjggKzc4MzcsNzUgQEAKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oIHV0aWxfZnVuY3MuaAotLi9taWJJSS90Y3AubG86IHN0cnVjdC5oIC4vbWliSUkvdGNwLmggLi9taWJJSS90Y3BUYWJsZS5oCi0uL21pYklJL3RjcC5sbzogLi9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvdGNwLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggLi9taWJJSS90Y3AuaAorLi9taWJJSS90Y3AubG86IC4vbWliSUkvdGNwVGFibGUuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi9taWJJSS9taWJJSV9jb21tb24uaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcyMzUsNiArNzkxNCw3IEBACiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTcyNzIsNjcgKzc5NTIsNzIgQEAKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmggLi9taWJJSS90Y3AuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi9taWJJSS90Y3BUYWJsZS5oIC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuL21pYklJL3RjcFRhYmxlLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliSUkvdWRwLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTczNDEsNiArODAyNiw3IEBACiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03Mzc4LDY4ICs4MDY0LDc1IEBACiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkvdWRwLmxvOiBzdHJ1Y3QuaCAuL21pYklJL3VkcC5oIC4vbWliSUkvdWRwVGFibGUuaAotLi9taWJJSS91ZHAubG86IC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL21pYklJL3VkcC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIC4vbWliSUkvdWRwLmgKKy4vbWliSUkvdWRwLmxvOiAuL21pYklJL3VkcFRhYmxlLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03NDQ4LDYgKzgxNDEsNyBAQAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03NDg1LDY1ICs4MTc5LDE3OCBAQAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCAuL21pYklJL3VkcC5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuL21pYklJL3VkcFRhYmxlLmggLi9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4vbWliSUkvdWRwVGFibGUuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTc1NTIsNiArODM1OSw3IEBACiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03NTg5LDY2ICs4Mzk3LDcwIEBACiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4vbWliSUkvdmFjbV9jb25mLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi9taWJJSS9zeXNPUlRhYmxlLmggLi4vLi4vYWdlbnQvc25tcGQuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4vbWliSUkvdmFjbV9jb25mLmggLi4vLi4vYWdlbnQvc25tcGQuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzY1Nyw2ICs4NDY5LDcgQEAKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTc2OTQsNjQgKzg1MDcsNjkgQEAKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuL21pYklJL3ZhY21fY29udGV4dC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03NzYwLDYgKzg1NzgsNyBAQAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzc5Nyw2NyArODYxNiw3MiBAQAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuL21pYklJL3ZhY21fdmFycy5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuL21pYklJL3ZhY21fdmFycy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4vbWliSUkvcm91dGVfaGVhZGVycy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03ODY2LDYgKzg2OTAsNyBAQAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzkwMyw2OCArODcyOCw3NSBAQAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4vbWliSUkvaXAuaCAuL21pYklJL3Zhcl9yb3V0ZS5oIC4vbWliSUkvcm91dGVfd3JpdGUuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4vbWliSUkvYXQuaCAuLi8uLi9hZ2VudC9rZXJuZWwuaCAuL21pYklJL2ludGVyZmFjZXMuaAotLi9taWJJSS92YXJfcm91dGUubG86IHN0cnVjdC5oIHV0aWxfZnVuY3MuaAorLi9taWJJSS92YXJfcm91dGUubG86IHN0cnVjdC5oIHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi9taWJJSS92YXJfcm91dGUubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzk3Myw2ICs4ODA1LDcgQEAKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTgwMDksNjUgKzg4NDIsNzAgQEAKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuL21pc2MvaXBmd2FjYy5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCAuL21pc2MvaXBmd2FjYy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04MDc2LDYgKzg5MTQsNyBAQAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTgxMTMsNjUgKzg5NTIsNzEgQEAKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04MTgwLDYgKzkwMjUsNyBAQAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04MjE3LDY1ICs5MDYzLDcwIEBACiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODI4NCw2ICs5MTM1LDcgQEAKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04MzIxLDYgKzkxNzMsNyBAQAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogaGVhZGVyX2NvbXBsZXguaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKQEAgLTgzMzMsNjUgKzkxODYsODMzIEBACiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IHNubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiBub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuL1Jtb24vYWd1dGlsLmggLi9SbW9uL2FndXRpbF9hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vUm1vbi9hbGFybS5sbzogLi9SbW9uL2FsYXJtLmggLi9SbW9uL2FndXRpbF9hcGkuaCAuL1Jtb24vcm93X2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IHV0aWxpdGllcy9pcXVlcnkuaCAuL1Jtb24vYWxhcm1UYWJsZS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9SbW9uL2V2ZW50LmxvOiAuL1Jtb24vZXZlbnQuaCAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi9SbW9uL2hpc3RvcnkuaCAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vcm93cy5sbzogLi9SbW9uL2FndXRpbF9hcGkuaCAuL1Jtb24vcm93cy5oIC4vUm1vbi9yb3dfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi9SbW9uL3N0YXRpc3RpY3MuaCAuL1Jtb24vYWd1dGlsX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi9SbW9uL3Jvd19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODQwMCw2ICsxMDAyMSw3IEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg0MzcsNjUgKzEwMDU5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04NTA0LDYgKzEwMTMxLDcgQEAKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg1NDEsNjUgKzEwMTY5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODYwOCw2ICsxMDI0MSw3IEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg2NDUsNjUgKzEwMjc5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04NzEyLDYgKzEwMzUxLDcgQEAKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg3NDksNjUgKzEwMzg5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODgxNiw2ICsxMDQ2MSw3IEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg4NTMsNjUgKzEwNDk5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04OTIwLDYgKzEwNTcxLDcgQEAKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg5NTcsNjUgKzEwNjA5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTAyNCw2ICsxMDY4MSw3IEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTA2MSw2NSArMTA3MTksNzAgQEAKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTEyOCw2ICsxMDc5MSw3IEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTE2NSw2NSArMTA4MjksNzAgQEAKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTIzMiw2ICsxMDkwMSw3IEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTkyNjksNjUgKzEwOTM5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4vc2N0cC1taWIvc2N0cFNjYWxhcnMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTMzNiw2ICsxMTAxMSw3IEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05MzczLDY0ICsxMTA0OSwxNzggQEAKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NDM5LDYgKzExMjI5LDcgQEAKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTQ3Niw2NCArMTEyNjcsMTc5IEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiBrZXJuZWxfc3Vub3M1LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTk1NDIsNiArMTE0NDgsNyBAQAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05NTc5LDYgKzExNDg2LDcgQEAKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKQEAgLTk1ODgsNjMgKzExNDk2LDE4MiBAQAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIHN0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NjUzLDYgKzExNjgwLDcgQEAKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05NjkwLDY4ICsxMTcxOCwxODkgQEAKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCBzdHJ1Y3QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzoga2VybmVsX3N1bm9zNS5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NzYwLDYgKzExOTA5LDcgQEAKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTk3OTYsNjUgKzExOTQ2LDcwIEBACiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc211eC5oIHV0aWxfZnVuY3MuaAotLi9zbXV4L3NtdXgubG86IHN0cnVjdC5oIG1pYmRlZnMuaCAuLi8uLi9hZ2VudC9zbm1wZC5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc211eC5oCisuL3NtdXgvc211eC5sbzogbWliZGVmcy5oIC4uLy4uL2FnZW50L3NubXBkLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTk4NjMsNiArMTIwMTgsNyBAQAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTk4OTksNjUgKzEyMDU1LDcwIEBACiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHNtdXguaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc211eC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4vc211eC9zbm1wX2JncC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05OTY2LDYgKzEyMTI3LDcgQEAKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAwMDIsNjUgKzEyMTY0LDcwIEBACiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzbXV4LmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc211eC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuL3NtdXgvc25tcF9vc3BmLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwMDY5LDYgKzEyMjM2LDcgQEAKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAxMDUsNjUgKzEyMjczLDcwIEBACiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzbXV4LmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc211eC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuL3NtdXgvc25tcF9yaXAyLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwMTcyLDYgKzEyMzQ1LDcgQEAKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAyMDgsNjUgKzEyMzgyLDE4MyBAQAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiBzdHJ1Y3QuaCBtaWJJSS9zeXNPUlRhYmxlLmggLi9zbm1wdjMvc25tcEVuZ2luZS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vc25tcHYzL3NubXBFbmdpbmUuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwMjc1LDYgKzEyNTY3LDcgQEAKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDMxMiw2NSArMTI2MDUsNzEgQEAKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiBtaWJJSS9zeXNPUlRhYmxlLmggLi9zbm1wdjMvc25tcE1QRFN0YXRzLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuL3NubXB2My9zbm1wTVBEU3RhdHMuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwMzc5LDYgKzEyNjc4LDcgQEAKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA0MTYsNjMgKzEyNzE2LDE3OSBAQAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4vc25tcHYzL3VzbVN0YXRzXzVfNS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDQ4MSw2ICsxMjg5Nyw3IEBACiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDUxNyw2NSArMTI5MzQsNzIgQEAKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiBzdHJ1Y3QuaCBtaWJJSS9zeXNPUlRhYmxlLmggLi9zbm1wdjMvdXNtU3RhdHMuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL3NubXB2My91c21TdGF0cy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vc25tcHYzL3VzbVN0YXRzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwNTg0LDYgKzEzMDA4LDcgQEAKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA2MjAsNjUgKzEzMDQ1LDcwIEBACiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4vc25tcHYzL3VzbVVzZXIuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vc25tcHYzL3VzbVVzZXIuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA2ODcsNiArMTMxMTcsNyBAQAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDcyNCw2NSArMTMxNTUsNzAgQEAKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oIHV0aWxfZnVuY3MuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogc3RydWN0LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDc5MSw2ICsxMzIyNyw3IEBACiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA4MjgsNjQgKzEzMjY1LDY5IEBACiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA4OTQsNiArMTMzMzYsNyBAQAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwOTMxLDY1ICsxMzM3NCwxNzkgQEAKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCB0YXJnZXQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA5OTgsNiArMTM1NTUsNyBAQAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExMDM1LDY0ICsxMzU5MywxNzggQEAKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTExMDEsNiArMTM3NzMsNyBAQAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExMTM3LDggKzEzODEwLDExIEBACiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAotLi90dW5uZWwvdHVubmVsLmxvOiB0dW5uZWwuaCBpZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmggdHVubmVsLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaAogLi90dW5uZWwvdHVubmVsLmxvOiBpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5oCkBAIC0xMTE0Niw2MiArMTM4MjIsNjYgQEAKIC4vdHVubmVsL3R1bm5lbC5sbzogaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oCiAuL3R1bm5lbC90dW5uZWwubG86IGlmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGVmcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTIxMCw2ICsxMzg5MCw3IEBACiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTEyNDcsNjYgKzEzOTI4LDE4MiBAQAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmggc3RydWN0LmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi91Y2Qtc25tcC9kaXNrLmggbWliZGVmcy5oIHV0aWxfZnVuY3MuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuL3VjZC1zbm1wL2Vycm9ybWliLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi91Y2Qtc25tcC9kaXNrLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL2Rpc2subG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIC4vdWNkLXNubXAvZXJyb3JtaWIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmggc3RydWN0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi91Y2Qtc25tcC9kaXNrLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIC4vdWNkLXNubXAvZXJyb3JtaWIuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTEzMTUsNiArMTQxMTIsNyBAQAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTEzNTEsNjUgKzE0MTQ5LDcxIEBACiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogc3RydWN0LmggLi91Y2Qtc25tcC9kaXNraW8uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIC4vdWNkLXNubXAvZGlza2lvLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExNDE4LDYgKzE0MjIyLDcgQEAKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE0NTQsNjUgKzE0MjU5LDcwIEBACiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4vdWNkLXNubXAvZGxtb2QuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTE1MjEsNiArMTQzMzEsNyBAQAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTU1OCw2NSArMTQzNjksNzEgQEAKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmggc3RydWN0LmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4vdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJkZWZzLmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuL3VjZC1zbm1wL2Vycm9ybWliLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExNjI1LDYgKzE0NDQyLDcgQEAKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTY2Miw2NyArMTQ0ODAsNzYgQEAKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogc3RydWN0LmggLi91Y2Qtc25tcC9leHRlbnNpYmxlLmggbWliZGVmcy5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IHV0aWxpdGllcy9leGVjdXRlLmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IHV0aWxpdGllcy9leGVjdXRlLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExNzMxLDYgKzE0NTU4LDcgQEAKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTc2Nyw2NSArMTQ1OTUsNzEgQEAKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc3RydWN0LmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi91Y2Qtc25tcC9maWxlLmggbWliZGVmcy5oIHV0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogc3RydWN0LmggLi91Y2Qtc25tcC9maWxlLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL2ZpbGUubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTgzNCw2ICsxNDY2OCw3IEBACiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE4NzAsNjUgKzE0NzA1LDcwIEBACiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4vdWNkLXNubXAvaHB1eC5oCi0uL3VjZC1zbm1wL2hwdXgubG86IG1pYmRlZnMuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi91Y2Qtc25tcC9ocHV4LmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTkzNyw2ICsxNDc3Nyw3IEBACiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTk3Myw2NiArMTQ4MTQsMTgyIEBACiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogc3RydWN0LmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi91Y2Qtc25tcC9sbVNlbnNvcnMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IGhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogdWNkLXNubXAvbG1zZW5zb3JzTWliLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyMDQxLDYgKzE0OTk4LDcgQEAKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjA3OCwyNzMgKzE1MDM2LDczIEBACiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCBzdHJ1Y3QuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuL3VjZC1zbm1wL2xvYWRhdmUuaCBtaWJkZWZzLmggdXRpbF9mdW5jcy5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4vdWNkLXNubXAvbG9hZGF2ZS5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogdXRpbF9mdW5jcy5oIC4vdWNkLXNubXAvbG9nbWF0Y2guaCBtaWJkZWZzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi91Y2Qtc25tcC9tZW1vcnkuaAorLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi91Y2Qtc25tcC9sb2dtYXRjaC5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjM1Myw2ICsxNTExMSw3IEBACiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyMzkwLDY2ICsxNTE0OSwxODEgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI0NTgsNiArMTUzMzIsNyBAQAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjQ5NSw2NiArMTUzNzAsNzEgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5oIG1pYmRlZnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI1NjMsNiArMTU0NDMsNyBAQAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTI2MDAsNjYgKzE1NDgxLDcxIEBACiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC9tZW1vcnkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCAuL3VjZC1zbm1wL21lbW9yeS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXguaCBtaWJkZWZzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyNjY4LDYgKzE1NTU0LDcgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyNzA1LDY2ICsxNTU5Miw3NCBAQAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvbWVtb3J5LmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggc3RydWN0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuL3VjZC1zbm1wL21lbW9yeS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuaCBtaWJkZWZzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyNzczLDYgKzE1NjY4LDcgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTI4MTAsNjYgKzE1NzA2LDcxIEBACiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuL3VjZC1zbm1wL21lbW9yeS5oIC4vdWNkLXNubXAvbWVtb3J5X2hwdXguaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogbWliZGVmcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjg3OCw2ICsxNTc3OSw3IEBACiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyOTE1LDY2ICsxNTgxNyw3MSBAQAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvbWVtb3J5LmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCAuL3VjZC1zbm1wL21lbW9yeS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjk4Myw2ICsxNTg5MCw3IEBACiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzAyMCw2NiArMTU5MjgsNzIgQEAKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzA4OCw2ICsxNjAwMiw3IEBACiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTMxMjQsNjYgKzE2MDM5LDc0IEBACiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4vdWNkLXNubXAvcGFzcy5oIG1pYmRlZnMuaCAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Bhc3MuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5oCisuL3VjZC1zbm1wL3Bhc3MubG86IHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzE5Miw2ICsxNjExNSw3IEBACiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzMjI5LDY1ICsxNjE1Myw3MyBAQAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmggc3RydWN0LmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCBzdHJ1Y3QuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzMjk2LDYgKzE2MjI4LDcgQEAKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzMzMyLDY3ICsxNjI2NSw3NCBAQAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IHN0cnVjdC5oIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzQwMSw2ICsxNjM0MSw3IEBACiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTM0MzcsNjYgKzE2Mzc4LDc1IEBACiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4vdWNkLXNubXAvcHJvYy5oIG1pYmRlZnMuaCAuL3VjZC1zbm1wL2Vycm9ybWliLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogdXRpbF9mdW5jcy5oIC4uLy4uL2FnZW50L2tlcm5lbC5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Byb2MuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4vdWNkLXNubXAvZXJyb3JtaWIuaCB1dGlsX2Z1bmNzLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Byb2MubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCisuL3VjZC1zbm1wL3Byb2MubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM1MDUsNiArMTY0NTUsNyBAQAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzU0MSw2NCArMTY0OTIsNzAgQEAKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4vdWNkLXNubXAvcHJveHkuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi91Y2Qtc25tcC9wcm94eS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzYwNyw2ICsxNjU2NCw3IEBACiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzNjQzLDE3MCArMTY2MDEsNzMgQEAKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmggbWliZGVmcy5oIHV0aWxfZnVuY3MuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4vdWNkLXNubXAvdm1zdGF0LmggbWliZGVmcy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggdXRpbF9mdW5jcy9yZXN0YXJ0LmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzgxNSw2ICsxNjY3Niw3IEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzODUxLDY2ICsxNjcxMyw3MSBAQAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbWliZGVmcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC92bXN0YXQuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiBtaWJkZWZzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM5MTksNiArMTY3ODYsNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTM5NTYsNjYgKzE2ODI0LDE4MiBAQAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvdm1zdGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC92bXN0YXQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IG1pYmRlZnMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oIG1pYmRlZnMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQwMjQsNiArMTcwMDgsNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDA2MSw2NiArMTcwNDYsNzEgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC92bXN0YXQuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogbWliZGVmcy5oIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQxMjksNiArMTcxMTksNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQxNjUsNjYgKzE3MTU2LDcxIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbWliZGVmcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvdm1zdGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiBtaWJkZWZzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi91Y2Qtc25tcC92bXN0YXQuaCAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDIzMyw2ICsxNzIyOSw3IEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDI3MCw2NiArMTcyNjcsNzIgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogbWliZGVmcy5oIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0MzM4LDYgKzE3MzQxLDcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQzNzQsNjYgKzE3Mzc4LDcxIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBtaWJkZWZzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IG1pYmRlZnMuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4vdWNkLXNubXAvdm1zdGF0LmggLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDQ0Miw2ICsxNzQ1MSw3IEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDQ3OSw2NyArMTc0ODksNzIgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiBtaWJkZWZzLmggc3RydWN0LmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogbWliZGVmcy5oIHN0cnVjdC5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4vdWNkLXNubXAvdm1zdGF0LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0NTQ4LDYgKzE3NTYzLDcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQ1ODUsNjYgKzE3NjAxLDcxIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC92bXN0YXQuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vdWNkLXNubXAvdm1zdGF0LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IG1pYmRlZnMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQ2NTMsNiArMTc2NzQsNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQ2ODksNjYgKzE3NzExLDQzNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIG1pYmRlZnMuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiBtaWJkZWZzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi91Y2Qtc25tcC92bXN0YXQuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4vdXRpbF9mdW5jcy9FeGl0LmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDc1Nyw2ICsxODE1MCw3IEBACiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0Nzk0LDY1ICsxODE4OCw3MCBAQAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiB1Y2Qtc25tcC9lcnJvcm1pYi5oIG1pYmRlZnMuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4vdXRpbGl0aWVzL2V4ZWN1dGUuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJkZWZzLmggLi91dGlsaXRpZXMvZXhlY3V0ZS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiBzdHJ1Y3QuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQ4NjEsNiArMTgyNjAsNyBAQAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0ODk3LDY0ICsxODI5Nyw3MCBAQAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsaXRpZXMvaXF1ZXJ5LmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IHV0aWxpdGllcy9pcXVlcnkuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQ5NjMsNiArMTgzNjksNyBAQAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQ5OTksNSArMTg0MDYsNSBAQAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IHN0cnVjdC5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmluIGIvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4KaW5kZXggZjY0MWFiNy4uMjM0MWFiNCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4KKysrIGIvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4KQEAgLTEsNCArMSw2IEBACiB0b3BfYnVpbGRkaXI9Li4vLi4KK215c3ViZGlyPWFnZW50L21pYmdyb3VwCisKICMgY3VycmVudGx5IGFzc3VtZXMgZ2NjOiAgICAoWFhYOiBmaXggdmlhIGNvbmZpZ3VyZSB0ZXN0cykKIERMRkxBR1M9LWZQSUMgLXNoYXJlZAogCkBAIC0xNiw2ICsxOCw4IEBACiAKIE9USEVSQ0xFQU5UQVJHRVRTPUBkbGxjbGVhbnNACiAKK0ZFQVRVUkVGSUxFPS4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZmVhdHVyZXMtbWliZ3JvdXBzLmgKKwogIyBOZWVkIGEgc3BlY2lhbCAuYyAtPiAubyBkZWZpbml0aW9uIGhlcmUgdG8gbWFrZSBzdXJlIHdlIHBsYWNlIHRoZQogIyBvYmplY3QgZmlsZXMgaW4gdGhlIHN1YiBkaXJlY3RvcnkuCiAKQEAgLTI1LDEwICsyOSwxMiBAQAogQG1pYl9tb2R1bGVfbGlzdF9vQAogQG1pYl9tb2R1bGVfbGlzdF9sb0AKIEBtaWJfbW9kdWxlX2xpc3RfY0AKK0BtaWJfbW9kdWxlX2xpc3RfZnRACiAKLU9CSlMgID0gJChtaWJfbW9kdWxlX2xpc3RfbykKLUxPQkpTID0gJChtaWJfbW9kdWxlX2xpc3RfbG8pCi1TUkNTICA9ICQobWliX21vZHVsZV9saXN0X2MpCitPQkpTICAgPSAkKG1pYl9tb2R1bGVfbGlzdF9vKQorTE9CSlMgID0gJChtaWJfbW9kdWxlX2xpc3RfbG8pCitTUkNTICAgPSAkKG1pYl9tb2R1bGVfbGlzdF9jKQorRlRPQkpTID0gJChtaWJfbW9kdWxlX2xpc3RfZnQpCiAKIGFsbDogc3RhbmRhcmRhbGwgJChMT0JKUykKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi5oIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi5oCmluZGV4IDg0N2VhYTkuLjNhN2QzYTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24uaAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uLmgKQEAgLTQ3LDcgKzQ3LDkgQEAKIGNvbmZpZ19yZXF1aXJlKFJtb24vcm93cykKIGNvbmZpZ19yZXF1aXJlKFJtb24vYWd1dGlsKQogY29uZmlnX3JlcXVpcmUoUm1vbi9zdGF0aXN0aWNzKQotY29uZmlnX3JlcXVpcmUoUm1vbi9hbGFybSkKKy8qIG9sZGVyIGltcGxlbWVudGF0aW9uOiAqLworLyogY29uZmlnX3JlcXVpcmUoUm1vbi9hbGFybSkgKi8KK2NvbmZpZ19yZXF1aXJlKFJtb24vYWxhcm1UYWJsZSkKIGNvbmZpZ19yZXF1aXJlKFJtb24vaGlzdG9yeSkKIGNvbmZpZ19yZXF1aXJlKFJtb24vZXZlbnQpCiBjb25maWdfYWRkX21pYihSTU9OLU1JQikKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMgYi9hZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jCmluZGV4IDNiMGM4N2EuLjEyYzYzNDIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogI2luY2x1ZGUgImFndXRpbC5oIgogI2luY2x1ZGUgImFndXRpbF9hcGkuaCIKIApAQCAtMjAyLDIwICsyMDAsNyBAQAogdV9sb25nCiBBR1VUSUxfc3lzX3VwX3RpbWUodm9pZCkKIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgY3VycmVudCwgZGVsdGE7Ci0gICAgZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKLQotICAgIGdldHRpbWVvZmRheSgmY3VycmVudCwgTlVMTCk7Ci0gICAgY3VycmVudC50dl9zZWMtLTsKLSAgICBjdXJyZW50LnR2X3VzZWMgKz0gMTAwMDAwMEw7Ci0gICAgZGVsdGEudHZfc2VjID0gY3VycmVudC50dl9zZWMgLSBzdGFydHRpbWUudHZfc2VjOwotICAgIGRlbHRhLnR2X3VzZWMgPSBjdXJyZW50LnR2X3VzZWMgLSBzdGFydHRpbWUudHZfdXNlYzsKLSAgICBpZiAoZGVsdGEudHZfdXNlYyA+IDEwMDAwMDBMKSB7Ci0gICAgICAgIGRlbHRhLnR2X3VzZWMgLT0gMTAwMDAwMEw7Ci0gICAgICAgIGRlbHRhLnR2X3NlYysrOwotICAgIH0KLQotICAgIHJldHVybiBkZWx0YS50dl9zZWMgKiAxMDAgKyBkZWx0YS50dl91c2VjIC8gMTAwMDA7CisgICAgcmV0dXJuIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYyBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYwppbmRleCBhMDRkNDE1Li45NWNiMDE3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5jCkBAIC0yNywxMSArMjcsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00Myw3ICszOSw2IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgImFsYXJtLmgiCiAgICAgLyoKICAgICAgKiBJbXBsZW1lbnRhdGlvbiBoZWFkZXJzIApAQCAtNjg0LDIzICs2NzksMzAgQEAKIG9pZCAgICAgICAgICAgICBvaWRhbGFybVZhcmlhYmxlc09pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxNiwgMyB9OwogCiBzdHJ1Y3QgdmFyaWFibGU3IG9pZGFsYXJtVmFyaWFibGVzW10gPSB7Ci0gICAge0lEYWxhcm1JbmRleCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDF9fSwKLSAgICB7SURhbGFybUludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDJ9fSwKLSAgICB7SURhbGFybVZhcmlhYmxlLCBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgM319LAotICAgIHtJRGFsYXJtU2FtcGxlVHlwZSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCA0fX0sCi0gICAge0lEYWxhcm1WYWx1ZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDV9fSwKLSAgICB7SURhbGFybVN0YXJ0dXBBbGFybSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsCi0gICAgIHsxLCAxLCA2fX0sCi0gICAge0lEYWxhcm1SaXNpbmdUaHJlc2hvbGQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLAotICAgICB7MSwgMSwgN319LAotICAgIHtJRGFsYXJtRmFsbGluZ1RocmVzaG9sZCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsCi0gICAgIHsxLCAxLCA4fX0sCi0gICAge0lEYWxhcm1SaXNpbmdFdmVudEluZGV4LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywKLSAgICAgezEsIDEsIDl9fSwKLSAgICB7SURhbGFybUZhbGxpbmdFdmVudEluZGV4LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywKLSAgICAgezEsIDEsIDEwfX0sCi0gICAge0lEYWxhcm1Pd25lciwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDExfX0sCi0gICAge0lEYWxhcm1TdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgMTJ9fQorICAgIHtJRGFsYXJtSW5kZXgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxfX0sCisgICAge0lEYWxhcm1JbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAyfX0sCisgICAge0lEYWxhcm1WYXJpYWJsZSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDN9fSwKKyAgICB7SURhbGFybVNhbXBsZVR5cGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgNH19LAorICAgIHtJRGFsYXJtVmFsdWUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCA1fX0sCisgICAge0lEYWxhcm1TdGFydHVwQWxhcm0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgNn19LAorICAgIHtJRGFsYXJtUmlzaW5nVGhyZXNob2xkLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDd9fSwKKyAgICB7SURhbGFybUZhbGxpbmdUaHJlc2hvbGQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgOH19LAorICAgIHtJRGFsYXJtUmlzaW5nRXZlbnRJbmRleCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCA5fX0sCisgICAge0lEYWxhcm1GYWxsaW5nRXZlbnRJbmRleCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxMH19LAorICAgIHtJRGFsYXJtT3duZXIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxMX19LAorICAgIHtJRGFsYXJtU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDEyfX0KIH07CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uaCBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uaAppbmRleCBhZTQ4YzJkLi4wNWYyMTUyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5oCkBAIC0yMSw4ICsyMSw2IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9BTEFSTV9ICiAjZGVmaW5lIF9NSUJHUk9VUF9BTEFSTV9ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCi0KICAgICAvKgogICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMgCiAgICAgICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODE2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYwpAQCAtMCwwICsxLDg0MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRWRpdGlvbiBIaXN0b3J5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICMgICBEYXRlICAgICBDb21tZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSAgfAorfCAtLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tIHwKK3wgICAxIDA3LzA1LzE4IENyZWF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy50YWJsZV9kYXRhLmNvbmYsdiAxLjExLjIuMSAyMDA2LzAxLzExIDE1OjE3OjQ3IGR0czEyIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKKyNpbmNsdWRlICJhbGFybVRhYmxlLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHF1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfZXh0cmFjdF90YWJsZSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5X3BkdV9zZXNzaW9uKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisvKiogSW5pdGlhbGl6ZXMgdGhlIGFsYXJtVGFibGUgbW9kdWxlICovCit2b2lkCitpbml0X2FsYXJtVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGhlcmUgd2UgaW5pdGlhbGl6ZSBhbGwgdGhlIHRhYmxlcyB3ZSdyZSBwbGFubmluZyBvbiBzdXBwb3J0aW5nIAorICAgICAqLworICAgIGluaXRpYWxpemVfdGFibGVfYWxhcm1UYWJsZSgpOworfQorCisvKiogSW5pdGlhbGl6ZSB0aGUgYWxhcm1UYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfYWxhcm1UYWJsZSh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgICAgICBhbGFybVRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxNiwgMywgMSB9OworICAgIHNpemVfdCAgICAgICAgICBhbGFybVRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKGFsYXJtVGFibGVfb2lkKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWc7CisgICAgbmV0c25tcF90ZGF0YSAgKnRhYmxlX2RhdGE7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImluaXRpYWxpemVfdGFibGVfYWxhcm1UYWJsZSBjYWxsZWQuXG4iKSk7CisgICAgcmVnID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImFsYXJtVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisKKyAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGUoImFsYXJtVGFibGUiLCAwKTsKKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgICAvKiBpbmRleDogYWxhcm1JbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl9BTEFSTUlOREVYOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fQUxBUk1TVEFUVVM7CisKKyAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlIAorICAgICAqLworfQorCitleHRlcm4gaW50CitldmVudF9hcGlfc2VuZF9hbGFybSh1X2NoYXIgaXNfcmlzaW5nLAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGFsYXJtX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV2ZW50X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgb2lkICogYWxhcm1lZF92YXIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxhcm1lZF92YXJfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHNhbXBsZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHRoZV90aHJlc2hvbGQsIGNvbnN0IGNoYXIgKmFsYXJtX2Rlc2NyKTsKKworI2RlZmluZSBBTEFSTV9TVFIxX0xFTgkzMgordHlwZWRlZiBlbnVtIHsKKyAgICBSTU9OMV9FTlRSWV9WQUxJRCA9IDEsCisgICAgUk1PTjFfRU5UUllfQ1JFQVRFX1JFUVVFU1QsCisgICAgUk1PTjFfRU5UUllfVU5ERVJfQ1JFQVRJT04sCisgICAgUk1PTjFfRU5UUllfSU5WQUxJRAorfSBSTU9OMV9FTlRSWV9TVEFUVVNfVDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTQU1QTEVfVFlQRV9BQlNPTFVURSA9CisgICAgMSwKKyAgICBTQU1QTEVfVFlQRV9ERUxURQorfSBTQU1QTEVfVFlQRV9UOworCit0eXBlZGVmIGVudW0geworICAgIEFMQVJNX05PVEhJTkcgPQorICAgIDAsCisgICAgQUxBUk1fUklTSU5HLAorICAgIEFMQVJNX0ZBTExJTkcsCisgICAgQUxBUk1fQk9USAorfSBBTEFSTV9UWVBFX1Q7CisgICAgLyoKKyAgICAgKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAKKyAgICAgKi8KK3N0cnVjdCBhbGFybVRhYmxlX2VudHJ5IHsKKyAgICAvKgorICAgICAqIEluZGV4IHZhbHVlcyAKKyAgICAgKi8KKyAgICBsb25nICAgICAgICAgICAgYWxhcm1JbmRleDsKKworICAgIC8qCisgICAgICogQ29sdW1uIHZhbHVlcyAKKyAgICAgKi8KKyAgICBsb25nICAgICAgICAgICAgYWxhcm1JbnRlcnZhbDsKKyAgICBsb25nICAgICAgICAgICAgb2xkX2FsYXJtSW50ZXJ2YWw7CisgICAgb2lkICAgICAgICAgICAgIGFsYXJtVmFyaWFibGVbQUxBUk1fU1RSMV9MRU5dOworICAgIHNpemVfdCAgICAgICAgICBhbGFybVZhcmlhYmxlX2xlbjsKKyAgICBvaWQgICAgICAgICAgICAgb2xkX2FsYXJtVmFyaWFibGVbQUxBUk1fU1RSMV9MRU5dOworICAgIHNpemVfdCAgICAgICAgICBvbGRfYWxhcm1WYXJpYWJsZV9sZW47CisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtU2FtcGxlVHlwZTsKKyAgICBsb25nICAgICAgICAgICAgb2xkX2FsYXJtU2FtcGxlVHlwZTsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1WYWx1ZTsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1TdGFydHVwQWxhcm07CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybVN0YXJ0dXBBbGFybTsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1SaXNpbmdUaHJlc2hvbGQ7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybVJpc2luZ1RocmVzaG9sZDsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1GYWxsaW5nVGhyZXNob2xkOworICAgIGxvbmcgICAgICAgICAgICBvbGRfYWxhcm1GYWxsaW5nVGhyZXNob2xkOworICAgIGxvbmcgICAgICAgICAgICBhbGFybVJpc2luZ0V2ZW50SW5kZXg7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybVJpc2luZ0V2ZW50SW5kZXg7CisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtRmFsbGluZ0V2ZW50SW5kZXg7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybUZhbGxpbmdFdmVudEluZGV4OworICAgIGNoYXIgICAgICAgICAgICBhbGFybU93bmVyW0FMQVJNX1NUUjFfTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgYWxhcm1Pd25lcl9sZW47CisgICAgY2hhciAgICAgICAgICAgIG9sZF9hbGFybU93bmVyW0FMQVJNX1NUUjFfTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgb2xkX2FsYXJtT3duZXJfbGVuOworICAgIGxvbmcgICAgICAgICAgICBhbGFybVN0YXR1czsKKyAgICBsb25nICAgICAgICAgICAgb2xkX2FsYXJtU3RhdHVzOworCisgICAgaW50ICAgICAgICAgICAgIHZhbGlkOworICAgIHVuc2lnbmVkIGludCAgICBhbGFybV9yZWc7CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOworICAgIHVfbG9uZyAgICAgICAgICBsYXN0X2Fic192YWx1ZTsKKyAgICBBTEFSTV9UWVBFX1QgICAgcHJldl9hbGFybTsgICAgICAgIC8qIE5PVEhJTkcgfCBSSVNJTkcgfCBGQUxMSU5HICovCit9OworCisKK3ZvaWQKK2FsYXJtVGFibGVfcnVuKCB1bnNpZ25lZCBpbnQgcmVnLCB2b2lkICpjbGllbnRhcmcpCit7CisgICAgc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5ICopY2xpZW50YXJnOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyOworICAgIHVfbG9uZyBuZXdfdmFsdWU7CisgICAgaW50IHJjOworCisgICAgaWYgKCFlbnRyeSkgeworICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoIHJlZyApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qCisgICAgICogUmV0cmlldmUgdGhlIHJlcXVlc3RlZCBNSUIgdmFsdWUocykuLi4KKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVRhYmxlX3J1biBjYWxsZWRcbiIpKTsKKyAgICB2YXIgPSAobmV0c25tcF92YXJpYWJsZV9saXN0ICopU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF92YXJpYWJsZV9saXN0ICk7CisgICAgaWYgKCF2YXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZmFpbGVkIHRvIGNyZWF0ZSBhbGFybVRhYmxlIHF1ZXJ5IHZhcmJpbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzbm1wX3NldF92YXJfb2JqaWQoIHZhciwgZW50cnktPmFsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhcmlhYmxlX2xlbiApOworICAgIAorICAgIHJjID0gbmV0c25tcF9xdWVyeV9nZXQoICB2YXIsIGVudHJ5LT5zZXNzaW9uICk7CisgICAgaWYgKCByYyAhPSBTTk1QX0VSUl9OT0VSUk9SICkgeworICAgICAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVZhcmlhYmxlIHF1ZXJ5IGZhaWxlZCAoJWQpXG4iLCByYykpOworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisJc3dpdGNoICh2YXItPnR5cGUpIHsKKyAgICBjYXNlIEFTTl9JTlRFR0VSOgorICAgIGNhc2UgQVNOX0NPVU5URVI6CisgICAgY2FzZSBBU05fVElNRVRJQ0tTOgorICAgIGNhc2UgQVNOX0dBVUdFOgorICAgIGNhc2UgQVNOX0NPVU5URVI2NDoKKyAgICAgICAgbmV3X3ZhbHVlID0gKnZhci0+dmFsLmludGVnZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHTVNHVEwoKCJybW9uOmFsYXJtVGFibGUiLCAiaW52YWxpZCB0eXBlICglZClcbiIsIHZhci0+dHlwZSkpOworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXIpOworICAgICAgICByZXR1cm4gOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1JbmRleC4lbGQgbGFzdCB2YWx1ZSAoJWxkKVxuIiwgZW50cnktPmFsYXJtSW5kZXgsIGVudHJ5LT5sYXN0X2Fic192YWx1ZSkpOworICAgIERFQlVHTVNHVEwoKCJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1JbmRleC4lbGQgbmV3X3ZhbHVlICglbGQpXG4iLCBlbnRyeS0+YWxhcm1JbmRleCwgbmV3X3ZhbHVlKSk7CisKKyAgICBlbnRyeS0+YWxhcm1WYWx1ZSA9IChTQU1QTEVfVFlQRV9BQlNPTFVURSA9PSBlbnRyeS0+YWxhcm1TYW1wbGVUeXBlKSA/CisgICAgICAgIG5ld192YWx1ZSA6IG5ld192YWx1ZSAtIGVudHJ5LT5sYXN0X2Fic192YWx1ZTsKKyAgICBlbnRyeS0+bGFzdF9hYnNfdmFsdWUgPSBuZXdfdmFsdWU7CisKKyAgICBpZiAoQUxBUk1fUklTSU5HICE9IGVudHJ5LT5wcmV2X2FsYXJtICYmCisgICAgICAgIGVudHJ5LT5hbGFybVZhbHVlID49IGVudHJ5LT5hbGFybVJpc2luZ1RocmVzaG9sZCkgeworICAgICAgICBpZiAoU05NUF9FUlJfTk9FUlJPUiA9PSBldmVudF9hcGlfc2VuZF9hbGFybSgxLCBlbnRyeS0+YWxhcm1JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1SaXNpbmdFdmVudEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhcmlhYmxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1TYW1wbGVUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1WYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1SaXNpbmdUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJpc2luZyIpKQorICAgICAgICAgICAgZW50cnktPnByZXZfYWxhcm0gPSBBTEFSTV9SSVNJTkc7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJmYWlsZWQgdG8gc2VuZCByaXNpbmcgYWxhcm1cbiIpOworICAgIH0KKyAgICBlbHNlIGlmIChBTEFSTV9GQUxMSU5HICE9IGVudHJ5LT5wcmV2X2FsYXJtICYmCisgICAgICAgICAgICAgZW50cnktPmFsYXJtVmFsdWUgPD0gZW50cnktPmFsYXJtRmFsbGluZ1RocmVzaG9sZCkgeworICAgICAgICBpZiAoU05NUF9FUlJfTk9FUlJPUiA9PSBldmVudF9hcGlfc2VuZF9hbGFybSgwLCBlbnRyeS0+YWxhcm1JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybUZhbGxpbmdFdmVudEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1WYXJpYWJsZV9sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtU2FtcGxlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtRmFsbGluZ1RocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWxsaW5nIikpCisgICAgICAgICAgICBlbnRyeS0+cHJldl9hbGFybSA9IEFMQVJNX0ZBTExJTkc7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJmYWlsZWQgdG8gc2VuZCBmYWxsaW5nIGFsYXJtXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBERUJVR01TR1RMKCgicm1vbjphbGFybVRhYmxlIiwgIm5vIGFsYXJtIHNlbnRcbiIpKTsKKworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcik7Cit9CisKK3ZvaWQKK2FsYXJtVGFibGVfZW5hYmxlKCBzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqZW50cnkgKQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImFsYXJtVGFibGVfZW5hYmxlIGNhbGxlZC5cbiIpKTsKKyAgICBpZiAoZW50cnktPmFsYXJtX3JlZykgeworICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoIGVudHJ5LT5hbGFybV9yZWcgKTsKKyAgICAgICAgZW50cnktPmFsYXJtX3JlZyA9IDA7CisgICAgfQorCisgICAgaWYgKGVudHJ5LT5hbGFybUludGVydmFsKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHJlZ2lzdGVyIG9uY2UgdG8gcnVuIEFTQVAsIGFuZCBhbm90aGVyIHRvIHJ1bgorICAgICAgICAgKiBhdCB0aGUgdHJpZ2dlciBmcmVxdWVuY3kKKyAgICAgICAgICovCisgICAgICAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoMCwgMCwgYWxhcm1UYWJsZV9ydW4sIGVudHJ5ICk7CisgICAgICAgIGVudHJ5LT5hbGFybV9yZWcgPSBzbm1wX2FsYXJtX3JlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtSW50ZXJ2YWwsIFNBX1JFUEVBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcnVuLCBlbnRyeSApOworICAgIH0KK30KKwordm9pZAorYWxhcm1UYWJsZV9kaXNhYmxlKCBzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqZW50cnkgKQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImFsYXJtVGFibGVfZGlzYWJsZSBjYWxsZWQuXG4iKSk7CisgICAgaWYgKGVudHJ5LT5hbGFybV9yZWcpIHsKKyAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKCBlbnRyeS0+YWxhcm1fcmVnICk7CisgICAgICAgIGVudHJ5LT5hbGFybV9yZWcgPSAwOworICAgICAgICAvKiBYWFggLSBwZXJoYXBzIHJlbGVhc2UgYW55IHByZXZpb3VzIHJlc3VsdHMgKi8KKyAgICB9Cit9CisKKy8qCisgKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAKKyAqLworbmV0c25tcF90ZGF0YV9yb3cgKgorYWxhcm1UYWJsZV9jcmVhdGVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGVfZGF0YSwgbG9uZyBhbGFybUluZGV4KQoreworICAgIHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5ICplbnRyeTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworCisgICAgREVCVUdNU0dUTCgoICJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1UYWJsZV9jcmVhdGVFbnRyeSBjYWxsZWQuXG4iKSk7CisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3JvdygpOworICAgIGlmICghcm93KSB7CisgICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByb3ctPmRhdGEgPSBlbnRyeTsKKyAgICBlbnRyeS0+YWxhcm1JbmRleCA9IGFsYXJtSW5kZXg7CisgICAgZW50cnktPmFsYXJtSW50ZXJ2YWwgPSAxOworICAgIGVudHJ5LT5hbGFybVNhbXBsZVR5cGUgPSBTQU1QTEVfVFlQRV9BQlNPTFVURTsKKyAgICBlbnRyeS0+YWxhcm1TdGFydHVwQWxhcm0gPSBBTEFSTV9CT1RIOworICAgIGVudHJ5LT5hbGFybVJpc2luZ1RocmVzaG9sZCA9IDEwOworICAgIGVudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQgPSA1OworICAgIGVudHJ5LT5hbGFybVJpc2luZ0V2ZW50SW5kZXggPSBhbGFybUluZGV4OworICAgIGVudHJ5LT5hbGFybUZhbGxpbmdFdmVudEluZGV4ID0gYWxhcm1JbmRleDsKKyAgICBlbnRyeS0+cHJldl9hbGFybSA9IEFMQVJNX05PVEhJTkc7CisgICAgbmV0c25tcF90ZGF0YV9yb3dfYWRkX2luZGV4KHJvdywgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoZW50cnktPmFsYXJtSW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmFsYXJtSW5kZXgpKTsKKyAgICBuZXRzbm1wX3RkYXRhX2FkZF9yb3codGFibGVfZGF0YSwgcm93KTsKKyAgICByZXR1cm4gcm93OworfQorCisvKgorICogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlIAorICovCit2b2lkCithbGFybVRhYmxlX3JlbW92ZUVudHJ5KG5ldHNubXBfdGRhdGEgKiB0YWJsZV9kYXRhLCBuZXRzbm1wX3RkYXRhX3JvdyAqIHJvdykKK3sKKyAgICBzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVRhYmxlX3JlbW92ZUVudHJ5IGNhbGxlZC5cbiIpKTsKKyAgICBpZiAoIXJvdykKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KKyAgICBlbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZV9kYXRhLCByb3cpOworICAgIGlmIChlbnRyeSkgeworICAgICAgICBhbGFybVRhYmxlX2Rpc2FibGUoZW50cnkpOworICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOyAgICAgICAvKiBYWFggLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KKyAgICB9Cit9CisKKworLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBhbGFybVRhYmxlIHRhYmxlICovCitpbnQKK2FsYXJtVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfdGRhdGEgICp0YWJsZV9kYXRhOworICAgIG5ldHNubXBfdGRhdGFfcm93ICp0YWJsZV9yb3c7CisgICAgc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKnRhYmxlX2VudHJ5OworICAgIGludCAgICAgICAgICAgICByZXQ7CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAqc2VjTmFtZTsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImFsYXJtVGFibGVfaGFuZGxlciBjYWxsZWQuXG4iKSk7CisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5ERVg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1JbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOVEVSVkFMOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQVJJQUJMRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1WYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtVmFyaWFibGVfbGVuICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU2FtcGxlVHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVZBTFVFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtVmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk06CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGFydHVwQWxhcm0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1SaXNpbmdUaHJlc2hvbGQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1GQUxMSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtRmFsbGluZ1RocmVzaG9sZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR0VWRU5USU5ERVg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1SaXNpbmdFdmVudEluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR0VWRU5USU5ERVg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1GYWxsaW5nRXZlbnRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTU9XTkVSOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1Pd25lcl9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQVJJQUJMRToKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNUQVJUVVBBTEFSTToKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX2ludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR0VWRU5USU5ERVg6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX2ludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9UV1JJVEFCTEUpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVZBUklBQkxFOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk06CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR0VWRU5USU5ERVg6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTU9XTkVSOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9yb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfcm93ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfY3JlYXRlRW50cnkodGFibGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlcik7CisgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9yb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaW5zZXJ0X3RkYXRhX3JvdyhyZXF1ZXN0LCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOVEVSVkFMOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQVJJQUJMRToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBUlRVUEFMQVJNOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR0VWRU5USU5ERVg6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUludGVydmFsID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW50ZXJ2YWw7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW50ZXJ2YWwgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNVkFSSUFCTEU6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtVmFyaWFibGVfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuIC8gc2l6ZW9mKG9pZCk7CisgICAgICAgICAgICAgICAgbWVtc2V0KHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPmFsYXJtVmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPmFsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLm9iamlkLAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1TYW1wbGVUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU2FtcGxlVHlwZTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TYW1wbGVUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNUQVJUVVBBTEFSTToKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU3RhcnR1cEFsYXJtID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU3RhcnR1cEFsYXJtOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVN0YXJ0dXBBbGFybSA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVJpc2luZ1RocmVzaG9sZCA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVJpc2luZ1RocmVzaG9sZDsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1SaXNpbmdUaHJlc2hvbGQgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtRmFsbGluZ1RocmVzaG9sZCA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQ7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtRmFsbGluZ1RocmVzaG9sZCA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1SaXNpbmdFdmVudEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtUmlzaW5nRXZlbnRJbmRleDsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1SaXNpbmdFdmVudEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1GYWxsaW5nRXZlbnRJbmRleCA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdFdmVudEluZGV4OworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdFdmVudEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTU9XTkVSOgorICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+b2xkX2FsYXJtT3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPmFsYXJtT3duZXIpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtT3duZXJfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtT3duZXJfbGVuOworICAgICAgICAgICAgICAgIG1lbXNldCh0YWJsZV9lbnRyeS0+YWxhcm1Pd25lciwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybU93bmVyKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT5hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbik7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtT3duZXJfbGVuID0gcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXR1cyA9IHRhYmxlX2VudHJ5LT5hbGFybVN0YXR1czsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX3JvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1JTlRFUlZBTDoKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW50ZXJ2YWwgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUludGVydmFsOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtSW50ZXJ2YWwgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNVkFSSUFCTEU6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+YWxhcm1WYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1WYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+YWxhcm1WYXJpYWJsZSkpOworICAgICAgICAgICAgICAgICAgICBtZW1zZXQodGFibGVfZW50cnktPm9sZF9hbGFybVZhcmlhYmxlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlX2xlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtVmFyaWFibGVfbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU2FtcGxlVHlwZSA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU2FtcGxlVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVNhbXBsZVR5cGUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBUlRVUEFMQVJNOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGFydHVwQWxhcm0gPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXJ0dXBBbGFybTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXJ0dXBBbGFybSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVJpc2luZ1RocmVzaG9sZCA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtUmlzaW5nVGhyZXNob2xkOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtUmlzaW5nVGhyZXNob2xkID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUZhbGxpbmdUaHJlc2hvbGQ7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1GYWxsaW5nVGhyZXNob2xkID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR0VWRU5USU5ERVg6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVJpc2luZ0V2ZW50SW5kZXggPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVJpc2luZ0V2ZW50SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1SaXNpbmdFdmVudEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1GYWxsaW5nRXZlbnRJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtRmFsbGluZ0V2ZW50SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1GYWxsaW5nRXZlbnRJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT5hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybU93bmVyKSk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCh0YWJsZV9lbnRyeS0+b2xkX2FsYXJtT3duZXIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPmFsYXJtT3duZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtT3duZXJfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1Pd25lcl9sZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVN0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU3RhdHVzOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVZBUklBQkxFOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk06CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR0VWRU5USU5ERVg6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTU9XTkVSOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT52YWxpZCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgeworICAgICAgICAgICAgICAgIGNhc2UgUk1PTjFfRU5UUllfVkFMSUQ6CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfZW5hYmxlKCB0YWJsZV9lbnRyeSApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFJNT04xX0VOVFJZX1VOREVSX0NSRUFUSU9OOgorICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX2Rpc2FibGUoIHRhYmxlX2VudHJ5ICk7CisjaWYgMAorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c2Vzc2lvbiA9IChuZXRzbm1wX3Nlc3Npb24gKikKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXF1ZXJ5X3BkdV9zZXNzaW9uKHJlcWluZm8tPmFzcC0+cGR1KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlY05hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1NFQ05BTUUpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VjTmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VzcyAgID0gbmV0c25tcF9pcXVlcnlfdXNlcl9zZXNzaW9uKHNlY05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9xdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uKHNlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInJtb246YWxhcm1UYWJsZSIsICJ1c2VyIG5hbWUgJXNcbiIsIHNlY05hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidXNlciBuYW1lICVzIG5vdCBmb3VuZFxuIiwgc2VjTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIHVzZXIgbmFtZVxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBzZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzID0gbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBzZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIllvdSBtdXN0IHNwZWNpZnkgYSBkZWZhdWx0IHVzZXIgbmFtZSB1c2luZyB0aGUgYWdlbnRTZWNOYW1lIHRva2VuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUk1PTjFfRU5UUllfSU5WQUxJRDoKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDcwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuaApAQCAtMCwwICsxLDQxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBFZGl0aW9uIEhpc3Rvcnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIyAgIERhdGUgICAgIENvbW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5ICB8Cit8IC0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0gfAorfCAgIDEgMDcvMDUvMTggQ3JlYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IG1pYjJjLnRhYmxlX2RhdGEuY29uZix2IDEuMTEuMi4xIDIwMDYvMDEvMTEgMTU6MTc6NDcgZHRzMTIgRXhwICQKKyAqLworI2lmbmRlZiBBTEFSTVRBQkxFX0gKKyNkZWZpbmUgQUxBUk1UQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKHV0aWxpdGllcy9pcXVlcnkpCitjb25maWdfcmVxdWlyZShSbW9uL2FndXRpbCkKK2NvbmZpZ19yZXF1aXJlKFJtb24vcm93cykKK2NvbmZpZ19yZXF1aXJlKFJtb24vZXZlbnQpCisKKy8qCisgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCisgKi8KK3ZvaWQgICAgICAgICAgICBpbml0X2FsYXJtVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9hbGFybVRhYmxlKHZvaWQpOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgYWxhcm1UYWJsZV9oYW5kbGVyOworCisvKgorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgYWxhcm1UYWJsZSAKKyAqLworI2RlZmluZSBDT0xVTU5fQUxBUk1JTkRFWAkJMQorI2RlZmluZSBDT0xVTU5fQUxBUk1JTlRFUlZBTAkJMgorI2RlZmluZSBDT0xVTU5fQUxBUk1WQVJJQUJMRQkJMworI2RlZmluZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFCQk0CisjZGVmaW5lIENPTFVNTl9BTEFSTVZBTFVFCQk1CisjZGVmaW5lIENPTFVNTl9BTEFSTVNUQVJUVVBBTEFSTQkJNgorI2RlZmluZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQJCTcKKyNkZWZpbmUgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRAkJOAorI2RlZmluZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYCQk5CisjZGVmaW5lIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYCQkxMAorI2RlZmluZSBDT0xVTU5fQUxBUk1PV05FUgkJMTEKKyNkZWZpbmUgQ09MVU1OX0FMQVJNU1RBVFVTCQkxMgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBTEFSTVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYyBiL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYwppbmRleCBjYWIxZDhiLi5iYjg3YmZlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jCkBAIC0xOSwxNiArMTksMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00NSw4ICs0Miw2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotCiAjaW5jbHVkZSAiZXZlbnQuaCIKIAogLyoKQEAgLTU1LDYgKzUwLDggQEAKICNpbmNsdWRlICJhZ3V0aWxfYXBpLmgiCiAjaW5jbHVkZSAicm93X2FwaS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbnByaW50X29iamlkKQorCiAvKgogICogRmlsZSBzY29wZSBkZWZpbml0aW9ucyBzZWN0aW9uIAogICovCkBAIC03NzIsMjMgKzc2OSwzNCBAQAogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgICAgICAgICAgIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KLSAgICB7RVZFTlRJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDF9fSwKLSAgICB7RVZFTlRERVNDUklQVElPTiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7RVZFTlRUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7RVZFTlRDT01NVU5JVFksIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0VWRU5UTEFTVFRJTUVTRU5ULCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0VWRU5UU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDd9fQorICAgIHtFVkVOVElOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgMX19LAorICAgIHtFVkVOVERFU0NSSVBUSU9OLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtFVkVOVFRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtFVkVOVENPTU1VTklUWSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7RVZFTlRMQVNUVElNRVNFTlQsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7RVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7RVZFTlRTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgN319CiB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIGxvZ1RhYmxlX3ZhcmlhYmxlc1tdID0gewogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgICAgICAgICAgIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KLSAgICB7TE9HRVZFTlRJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nVGFibGUsIDIsIHsxLCAxfX0sCi0gICAge0xPR0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7TE9HVElNRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9sb2dUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7TE9HREVTQ1JJUFRJT04sIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG9nVGFibGUsIDIsIHsxLCA0fX0KKyAgICB7TE9HRVZFTlRJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9nVGFibGUsIDIsIHsxLCAxfX0sCisgICAge0xPR0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb2dUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7TE9HVElNRSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb2dUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7TE9HREVTQ1JJUFRJT04sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9nVGFibGUsIDIsIHsxLCA0fX0KIAogfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5oIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5oCmluZGV4IGRmY2FjZTcuLmIwM2UxNjIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuaAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmgKQEAgLTIxLDE0ICsyMSwxMyBAQAogI2lmbmRlZiBfTUlCR1JPVVBfRVZFTlRfSAogI2RlZmluZSBfTUlCR1JPVVBfRVZFTlRfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQotCi1jb25maWdfcmVxdWlyZShSbW9uL2FndXRpbCkKLWNvbmZpZ19yZXF1aXJlKFJtb24vcm93cykKLQogICAgIC8qCiAgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcyAKICAgICAgKi8KICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfZXZlbnQodm9pZCk7CiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCisKK2NvbmZpZ19yZXF1aXJlKFJtb24vYWd1dGlsKQorY29uZmlnX3JlcXVpcmUoUm1vbi9yb3dzKQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMgYi9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYwppbmRleCA5YzY4NTZmLi5jOGU5YzI1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYworKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYwpAQCAtMjQsMTEgKzI0LDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDQsOCArNDAsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogI2luY2x1ZGUgImhpc3RvcnkuaCIKIAogLyoKQEAgLTY1NiwxOCArNjUwLDIwIEBACiAgICAgLyoKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCAgICAgICAgICAgTCwgb2lkc3VmZml4IAogICAgICAqLwotICAgIHtDVFJMX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLCB7MSwgMX19LAotICAgIHtDVFJMX0RBVEFTT1VSQ0UsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsCi0gICAgIHsxLCAyfX0sCi0gICAge0NUUkxfQlVDS0VUU1JFUVVFU1RFRCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsCi0gICAgIDIsIHsxLCAzfX0sCi0gICAge0NUUkxfQlVDS0VUU0dSQU5URUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsCi0gICAgIHsxLCA0fX0sCi0gICAge0NUUkxfSU5URVJWQUwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLAotICAgICB7MSwgNX19LAotICAgIHtDVFJMX09XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLAotICAgICB7MSwgNn19LAotICAgIHtDVFJMX1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCA3fX0sCisgICAge0NUUkxfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCAxfX0sCisgICAge0NUUkxfREFUQVNPVVJDRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7Q1RSTF9CVUNLRVRTUkVRVUVTVEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7Q1RSTF9CVUNLRVRTR1JBTlRFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q1RSTF9JTlRFUlZBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NUUkxfT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NUUkxfU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDd9fSwKIAogfTsKIApAQCAtNjc4LDMyICs2NzQsMzYgQEAKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCAgICAgICAgTCwgb2lkc3VmZml4IAogICAgICAqLwotICAgIHtEQVRBX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDF9fSwKLSAgICB7REFUQV9TQU1QTEVJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCAyfX0sCi0gICAge0RBVEFfSU5URVJWQUxTVEFSVCwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDN9fSwKLSAgICB7REFUQV9EUk9QRVZFTlRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDR9fSwKLSAgICB7REFUQV9PQ1RFVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtEQVRBX1BLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgNn19LAotICAgIHtEQVRBX0JST0FEQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLAotICAgICB7MSwgN319LAotICAgIHtEQVRBX01VTFRJQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLAotICAgICB7MSwgOH19LAotICAgIHtEQVRBX0NSQ0FMSUdORVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDl9fSwKLSAgICB7REFUQV9VTkRFUlNJWkVQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDEwfX0sCi0gICAge0RBVEFfT1ZFUlNJWkVQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDExfX0sCi0gICAge0RBVEFfRlJBR01FTlRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDEyfX0sCi0gICAge0RBVEFfSkFCQkVSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxM319LAotICAgIHtEQVRBX0NPTExJU0lPTlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLAotICAgICB7MSwgMTR9fSwKLSAgICB7REFUQV9VVElMSVpBVElPTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCAxNX19LAorICAgIHtEQVRBX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDF9fSwKKyAgICB7REFUQV9TQU1QTEVJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAyfX0sCisgICAge0RBVEFfSU5URVJWQUxTVEFSVCwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7REFUQV9EUk9QRVZFTlRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7REFUQV9PQ1RFVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtEQVRBX1BLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtEQVRBX0JST0FEQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgN319LAorICAgIHtEQVRBX01VTFRJQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgOH19LAorICAgIHtEQVRBX0NSQ0FMSUdORVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDl9fSwKKyAgICB7REFUQV9VTkRFUlNJWkVQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDEwfX0sCisgICAge0RBVEFfT1ZFUlNJWkVQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDExfX0sCisgICAge0RBVEFfRlJBR01FTlRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDEyfX0sCisgICAge0RBVEFfSkFCQkVSUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxM319LAorICAgIHtEQVRBX0NPTExJU0lPTlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgMTR9fSwKKyAgICB7REFUQV9VVElMSVpBVElPTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxNX19LAogCiB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuaCBiL2FnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5oCmluZGV4IDA5NGJlZTQuLmQyYzQwMWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5oCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5oCkBAIC0yMSw4ICsyMSw2IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9ISVNUT1JZX0gKICNkZWZpbmUgX01JQkdST1VQX0hJU1RPUllfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQotCiAgICAgLyoKICAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzIAogICAgICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dfYXBpLmggYi9hZ2VudC9taWJncm91cC9SbW9uL3Jvd19hcGkuaAppbmRleCAyZDNjODMyLi45ZjU3NmJlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL3Jvd19hcGkuaAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL3Jvd19hcGkuaApAQCAtNzksNyArNzksNyBAQAogICogQXBpIHByb3RvdHlwZXMgCiAgKi8KIHZvaWQgICAgICAgICAgICBST1dBUElfaW5pdF90YWJsZShUQUJMRV9ERUZJTlRJT05fVCAqIHRhYmxlX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIG1heF9udW1iZXJfb2ZfZW50cmllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlRSWV9DQUxMQkFDS19UICogQ2xia0NyZWF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlRSWV9DQUxMQkFDS19UICogQ2xia0Nsb25lLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMgYi9hZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYwppbmRleCBkOGMzY2MxLi5hYzI2ZTMwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYworKysgYi9hZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYwpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogI2luY2x1ZGUgImFndXRpbF9hcGkuaCIKICNpbmNsdWRlICJyb3dzLmgiCiAjaW5jbHVkZSAicm93X2FwaS5oIgpAQCAtMjU3LDcgKzI1NSw3IEBACiAKIHZvaWQKIFJPV0FQSV9pbml0X3RhYmxlKFRBQkxFX0RFRklOVElPTl9UICogdGFibGVfcHRyLAotICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICB1X2xvbmcgbWF4X251bWJlcl9vZl9lbnRyaWVzLAogICAgICAgICAgICAgICAgICAgRU5UUllfQ0FMTEJBQ0tfVCAqIENsYmtDcmVhdGUsCiAgICAgICAgICAgICAgICAgICBFTlRSWV9DQUxMQkFDS19UICogQ2xia0Nsb25lLApAQCAtMjY5LDcgKzI2Nyw3IEBACiB7CiAgICAgdGFibGVfcHRyLT5uYW1lID0gbmFtZTsKICAgICBpZiAoIXRhYmxlX3B0ci0+bmFtZSkKLSAgICAgICAgdGFibGVfcHRyLT5uYW1lID0gIlVua25vd24iOworICAgICAgICB0YWJsZV9wdHItPm5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKiwiVW5rbm93biIpOwogCiAgICAgdGFibGVfcHRyLT5tYXhfbnVtYmVyX29mX2VudHJpZXMgPSBtYXhfbnVtYmVyX29mX2VudHJpZXM7CiAgICAgdGFibGVfcHRyLT5DbGJrQ3JlYXRlID0gQ2xia0NyZWF0ZTsKQEAgLTc1Niw3ICs3NTQsNyBAQAogICAgICAgICBzY3Jsci0+Zmlyc3RfZGF0YV9wdHIgPSBicHRyLT5uZXh0OwogICAgICAgICBzY3Jsci0+bGFzdF9kYXRhX3B0ci0+bmV4dCA9IGJwdHI7CiAgICAgICAgIHNjcmxyLT5sYXN0X2RhdGFfcHRyID0gKE5FWFRFRF9QVFJfVCAqKSBicHRyOwotICAgICAgICBicHRyLT5uZXh0ID0gMDsKKyAgICAgICAgYnB0ci0+bmV4dCA9IE5VTEw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYnB0ciA9IHNjcmxyLT5jdXJyZW50X2RhdGFfcHRyOwogICAgICAgICBzY3Jsci0+Y3VycmVudF9kYXRhX3B0ciA9IGJwdHItPm5leHQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYyBiL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jCmluZGV4IGZiNGY1ZjUuLjNlZDRhY2IgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jCkBAIC0yNCwxMSArMjQsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00Myw3ICszOSw2IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKICAgICAgICAgLyoKICAgICAgICAgICogSW1wbGVtZW50YXRpb24gaGVhZGVycyAKQEAgLTQ2OCw1MiArNDYzLDUyIEBACiBvaWQgICAgICAgICAgICAgb2lkc3RhdGlzdGljc1ZhcmlhYmxlc09pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxNiwgMSB9OwogCiBzdHJ1Y3QgdmFyaWFibGU3IG9pZHN0YXRpc3RpY3NWYXJpYWJsZXNbXSA9IHsKLSAgICB7SURldGhlclN0YXRzSW5kZXgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDF9fSwKLSAgICB7SURldGhlclN0YXRzRGF0YVNvdXJjZSwgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgMn19LAotICAgIHtJRGV0aGVyU3RhdHNEcm9wRXZlbnRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAzfX0sCi0gICAge0lEZXRoZXJTdGF0c09jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgNH19LAotICAgIHtJRGV0aGVyU3RhdHNQa3RzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCA1fX0sCi0gICAge0lEZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDZ9fSwKLSAgICB7SURldGhlclN0YXRzTXVsdGljYXN0UGt0cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgN319LAotICAgIHtJRGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LAotICAgICAzLCB7MSwgMSwgOH19LAotICAgIHtJRGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCA5fX0sCi0gICAge0lEZXRoZXJTdGF0c092ZXJzaXplUGt0cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgMTB9fSwKLSAgICB7SURldGhlclN0YXRzRnJhZ21lbnRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAxMX19LAotICAgIHtJRGV0aGVyU3RhdHNKYWJiZXJzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAxMn19LAotICAgIHtJRGV0aGVyU3RhdHNDb2xsaXNpb25zLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAxM319LAotICAgIHtJRGV0aGVyU3RhdHNQa3RzNjRPY3RldHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDE0fX0sCi0gICAge0lEZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzLCBBU05fQ09VTlRFUiwgUk9OTFksCisgICAge0lEZXRoZXJTdGF0c0luZGV4LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAxfX0sCisgICAge0lEZXRoZXJTdGF0c0RhdGFTb3VyY2UsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDJ9fSwKKyAgICB7SURldGhlclN0YXRzRHJvcEV2ZW50cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgM319LAorICAgIHtJRGV0aGVyU3RhdHNPY3RldHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDR9fSwKKyAgICB7SURldGhlclN0YXRzUGt0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgNX19LAorICAgIHtJRGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCA2fX0sCisgICAge0lEZXRoZXJTdGF0c011bHRpY2FzdFBrdHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDd9fSwKKyAgICB7SURldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDh9fSwKKyAgICB7SURldGhlclN0YXRzVW5kZXJzaXplUGt0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgOX19LAorICAgIHtJRGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDEwfX0sCisgICAge0lEZXRoZXJTdGF0c0ZyYWdtZW50cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTF9fSwKKyAgICB7SURldGhlclN0YXRzSmFiYmVycywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTJ9fSwKKyAgICB7SURldGhlclN0YXRzQ29sbGlzaW9ucywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTN9fSwKKyAgICB7SURldGhlclN0YXRzUGt0czY0T2N0ZXRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAxNH19LAorICAgIHtJRGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTV9fSwKLSAgICB7SURldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzLCBBU05fQ09VTlRFUiwgUk9OTFksCisgICAge0lEZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTZ9fSwKLSAgICB7SURldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzLCBBU05fQ09VTlRFUiwgUk9OTFksCisgICAge0lEZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTd9fSwKLSAgICB7SURldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLAorICAgIHtJRGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCiAgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAxOH19LAotICAgIHtJRGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLAorICAgIHtJRGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTl9fSwKLSAgICB7SURldGhlclN0YXRzT3duZXIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDIwfX0sCi0gICAge0lEZXRoZXJTdGF0c1N0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDIxfX0sCi0gICAge0lEZXRoZXJTdGF0c0Ryb3BwZWRGcmFtZXMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHMyRW50cnksCi0gICAgIDMsIHs0LCAxLCAxfX0sCi0gICAge0lEZXRoZXJTdGF0c0NyZWF0ZVRpbWUsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfZXRoZXJTdGF0czJFbnRyeSwgMywKLSAgICAgezQsIDEsIDJ9fSwKKyAgICB7SURldGhlclN0YXRzT3duZXIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDIwfX0sCisgICAge0lEZXRoZXJTdGF0c1N0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDIxfX0sCisgICAge0lEZXRoZXJTdGF0c0Ryb3BwZWRGcmFtZXMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHMyRW50cnksIDMsIHs0LCAxLCAxfX0sCisgICAge0lEZXRoZXJTdGF0c0NyZWF0ZVRpbWUsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0czJFbnRyeSwgMywgezQsIDEsIDJ9fSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgKaW5kZXggOGM2ZDkxZC4uOWI2MjJhNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNpZm5kZWYgX3N0YXRpc3RpY3NfaF9pbmNsdWRlZF9fCiAjZGVmaW5lIF9zdGF0aXN0aWNzX2hfaW5jbHVkZWRfXwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zdGF0aXN0aWNzKHZvaWQpOwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9zdGF0aXN0aWNzX2hfaW5jbHVkZWRfXyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYwppbmRleCAxZjg1ODZhLi40ODM3OWEyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYwpAQCAtMSw1ICsxLDYgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3dhdGNoZXIuaD4KQEAgLTEwLDExICsxMSwxNyBAQAogI2luY2x1ZGUgInN0cnVjdC5oIgogCiAjaWZuZGVmIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogI2luY2x1ZGUgIm1pYmRlZnMuaCIKICNkZWZpbmUgU0hFTExDT01NQU5EIDMKICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShleHRyYWN0X3RhYmxlX3Jvd19kYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YV9kZWxldGVfdGFibGUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW5zZXJ0X3RhYmxlX3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogb2lkICBuc19leHRlbmRfb2lkW10gICAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDMsIDIgfTsKIG9pZCAgZXh0ZW5kX2NvdW50X29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCAzLCAyLCAxIH07CiBvaWQgIGV4dGVuZF9jb25maWdfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDMsIDIsIDIgfTsKQEAgLTI3LDcgKzM0LDcgQEAKICAgICBzaXplX3QgICAgICAgICAgICAgIG9pZF9sZW47CiAgICAgbG9uZyAgICAgICAgICAgICAgICBudW1fZW50cmllczsKICAgICBuZXRzbm1wX2V4dGVuZCAgICAgKmVoZWFkOwotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgICAgKnJlZ1szXTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICAgICpyZWdbNF07CiAgICAgc3RydWN0IGV4dGVuZF9yZWdpc3RyYXRpb25fYmxvY2tfcyAqbmV4dDsKIH0gZXh0ZW5kX3JlZ2lzdHJhdGlvbl9ibG9jazsKIGV4dGVuZF9yZWdpc3RyYXRpb25fYmxvY2sgKmVyZWdfaGVhZCA9IE5VTEw7CkBAIC00NCwxOCArNTEsNDcgQEAKIHVuc2lnbmVkIGludCAgICAgICAgICAgICBtYXhfY29tcGF0YWJpbGl0eV9lbnRyaWVzID0gNTA7CiBuZXRzbm1wX29sZF9leHRlbmQgKmNvbXBhdGFiaWxpdHlfZW50cmllczsKIAorY2hhciAgICAgICAgICAgKmNtZGxpbmVidWY7CitzaXplX3QgICAgICAgICAgY21kbGluZXNpemU7CisKIFdyaXRlTWV0aG9kIGZpeEV4ZWMyRXJyb3I7CiBGaW5kVmFyTWV0aG9kIHZhcl9leHRlbnNpYmxlX29sZDsKIG9pZCAgb2xkX2V4dGVuc2libGVfdmFyaWFibGVzX29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCBORVRTTk1QX1NIRUxMTUlCTlVNLCAxIH07CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IHZhcmlhYmxlMiBvbGRfZXh0ZW5zaWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7TUlCSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7TUlCSU5ERVh9fSwKLSAgICB7RVJST1JOQU1FLCAgICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JOQU1FfX0sCi0gICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge1NIRUxMQ09NTUFORH19LAotICAgIHtFUlJPUkZMQUcsICAgIEFTTl9JTlRFR0VSLCAgIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZMQUd9fSwKLSAgICB7RVJST1JNU0csICAgICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JNU0d9fSwKLSAgICB7RVJST1JGSVgsICAgICBBU05fSU5URUdFUiwgIFJXUklURSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGSVh9fSwKLSAgICB7RVJST1JGSVhDTUQsICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGSVhDTUR9fQorICAgIHtNSUJJTkRFWCwgICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtNSUJJTkRFWH19LAorICAgIHtFUlJPUk5BTUUsICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICB7U0hFTExDT01NQU5ELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7U0hFTExDT01NQU5EfX0sCisgICAge0VSUk9SRkxBRywgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge0VSUk9SRkxBR319LAorICAgIHtFUlJPUk1TRywgICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUk1TR319LAorICAgIHtFUlJPUkZJWCwgICAgIEFTTl9JTlRFR0VSLCAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZJWH19LAorICAgIHtFUlJPUkZJWENNRCwgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZJWENNRH19CiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBvbGRfZXh0ZW5zaWJsZV92YXJpYWJsZXNbXSA9IHsKKyAgICB7TUlCSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7TUlCSU5ERVh9fSwKKyAgICB7RVJST1JOQU1FLCAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JOQU1FfX0sCisgICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge1NIRUxMQ09NTUFORH19LAorICAgIHtFUlJPUkZMQUcsICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICB7RVJST1JNU0csICAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JNU0d9fSwKKyAgICB7RVJST1JGSVgsICAgICBBU05fSU5URUdFUiwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZJWH19LAorICAgIHtFUlJPUkZJWENNRCwgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZJWENNRH19Cit9OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNlbmRpZgogCiAKQEAgLTg3LDcgKzEyMyw4IEBACiAgICAgbmV0c25tcF90YWJsZV9kYXRhICAgICAgICAgICAgICAgICpkaW5mbzsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICAgKnRpbmZvOwogICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgICAgICAqd2luZm87Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAgICpyZWc7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAgICpyZWcgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmM7CiAKICAgICBmb3IgKCBlcHRyPWVyZWdfaGVhZDsgZXB0cjsgZXB0cj1lcHRyLT5uZXh0ICkgewogICAgICAgICBpZiAoIXNubXBfb2lkX2NvbXBhcmUoIGJhc2UsIGxlbiwgZXB0ci0+cm9vdF9vaWQsIGVwdHItPm9pZF9sZW4pKQpAQCAtOTUsNiArMTMyLDggQEAKICAgICB9CiAgICAgaWYgKCFlcHRyKSB7CiAgICAgICAgIGVwdHIgPSBTTk1QX01BTExPQ19UWVBFREVGKCBleHRlbmRfcmVnaXN0cmF0aW9uX2Jsb2NrICk7CisgICAgICAgIGlmICghZXB0cikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBlcHRyLT5yb290X29pZCA9IHNubXBfZHVwbGljYXRlX29iamlkKCBiYXNlLCBsZW4gKTsKICAgICAgICAgZXB0ci0+b2lkX2xlbiAgPSBsZW47CiAgICAgICAgIGVwdHItPm51bV9lbnRyaWVzID0gMDsKQEAgLTExNSwxMCArMTU0LDIwIEBACiAgICAgdGluZm8tPm1pbl9jb2x1bW4gPSBDT0xVTU5fRVhUQ0ZHX0ZJUlNUX0NPTFVNTjsKICAgICB0aW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9FWFRDRkdfTEFTVF9DT0xVTU47CiAgICAgb2lkX2J1ZltsZW5dID0gMjsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnICAgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKICAgICAgICAgICAgICAgICAibnNFeHRlbmRDb25maWdUYWJsZSIsIGhhbmRsZV9uc0V4dGVuZENvbmZpZ1RhYmxlLCAKICAgICAgICAgICAgICAgICBvaWRfYnVmLCBsZW4rMSwgSEFORExFUl9DQU5fUldSSVRFKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGEoIHJlZywgZGluZm8sIHRpbmZvICk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnICAgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibnNFeHRlbmRDb25maWdUYWJsZSIsIGhhbmRsZV9uc0V4dGVuZENvbmZpZ1RhYmxlLCAKKyAgICAgICAgICAgICAgICBvaWRfYnVmLCBsZW4rMSwgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YSggcmVnLCBkaW5mbywgdGluZm8gKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhyZWctPmhhbmRsZXItPm5leHQpOwogICAgIGVwdHItPnJlZ1swXSA9IHJlZzsKIAogICAgICAgICAvKgpAQCAtMTM1LDcgKzE4NCwxMCBAQAogICAgIHJlZyAgID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICAgIm5zRXh0ZW5kT3V0MVRhYmxlIiwgaGFuZGxlX25zRXh0ZW5kT3V0cHV0MVRhYmxlLCAKICAgICAgICAgICAgICAgICBvaWRfYnVmLCBsZW4rMSwgSEFORExFUl9DQU5fUk9OTFkpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YSggcmVnLCBkaW5mbywgdGluZm8gKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YSggcmVnLCBkaW5mbywgdGluZm8gKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhyZWctPmhhbmRsZXItPm5leHQpOwogICAgIGVwdHItPnJlZ1sxXSA9IHJlZzsKIAogICAgICAgICAvKgpAQCAtMTU0LDcgKzIwNiwxMCBAQAogICAgIHJlZyAgID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICAgIm5zRXh0ZW5kT3V0MlRhYmxlIiwgaGFuZGxlX25zRXh0ZW5kT3V0cHV0MlRhYmxlLCAKICAgICAgICAgICAgICAgICBvaWRfYnVmLCBsZW4rMSwgSEFORExFUl9DQU5fUk9OTFkpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUoIHJlZywgdGluZm8gKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUoIHJlZywgdGluZm8gKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhyZWctPmhhbmRsZXItPm5leHQpOwogICAgIGVwdHItPnJlZ1syXSA9IHJlZzsKIAogICAgICAgICAvKgpAQCAtMTY3LDkgKzIyMiw0NCBAQAogICAgIHdpbmZvID0gbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAogICAgICAgICAgICAgICAgICYoZXB0ci0+bnVtX2VudHJpZXMpLCBzaXplb2YoZXB0ci0+bnVtX2VudHJpZXMpLAogICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoIHJlZywgd2luZm8gKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKCByZWcsIHdpbmZvICk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgZ290byBiYWlsOworICAgIGVwdHItPnJlZ1szXSA9IHJlZzsKIAogICAgIHJldHVybiBlcHRyOworCitiYWlsOgorICAgIGlmIChlcHRyLT5yZWdbM10pCisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKGVwdHItPnJlZ1szXSk7CisgICAgaWYgKGVwdHItPnJlZ1syXSkKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoZXB0ci0+cmVnWzJdKTsKKyAgICBpZiAoZXB0ci0+cmVnWzFdKQorICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihlcHRyLT5yZWdbMV0pOworICAgIGlmIChlcHRyLT5yZWdbMF0pCisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKGVwdHItPnJlZ1swXSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitfdW5yZWdpc3Rlcl9leHRlbmQoZXh0ZW5kX3JlZ2lzdHJhdGlvbl9ibG9jayAqZXB0cikKK3sKKyAgICBleHRlbmRfcmVnaXN0cmF0aW9uX2Jsb2NrICpwcmV2OworCisgICAgbmV0c25tcF9hc3NlcnQoZXB0cik7CisgICAgZm9yIChwcmV2ID0gZXJlZ19oZWFkOyBwcmV2ICYmIHByZXYtPm5leHQgIT0gZXB0cjsgcHJldiA9IHByZXYtPm5leHQpCisJOworICAgIGlmIChwcmV2KSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KGVwdHIgPT0gcHJldi0+bmV4dCk7CisJcHJldi0+bmV4dCA9IGVwdHItPm5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoZXB0ciA9PSBlcmVnX2hlYWQpOworCWVyZWdfaGVhZCA9IGVwdHItPm5leHQ7CisgICAgfQorCisgICAgbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZShlcHRyLT5kaW5mbyk7CisgICAgZnJlZShlcHRyLT5yb290X29pZCk7CisgICAgZnJlZShlcHRyKTsKIH0KIAogaW50CkBAIC0xODMsNiArMjczLDcgQEAKICAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoIGVwdHItPnJlZ1swXSApOwogICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlciggZXB0ci0+cmVnWzFdICk7CiAgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKCBlcHRyLT5yZWdbMl0gKTsKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoIGVwdHItPnJlZ1szXSApOwogICAgICAgICBTTk1QX0ZSRUUoZXB0cik7CiAgICAgfQogICAgIGVyZWdfaGVhZCA9IE5VTEw7CkBAIC0yMDMsOCArMjk0LDggQEAKICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZXhlYyIsIGV4dGVuZF9wYXJzZV9jb25maWcsIE5VTEwsIE5VTEwpOwogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzaCIsICAgZXh0ZW5kX3BhcnNlX2NvbmZpZywgTlVMTCwgTlVMTCk7CiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImV4ZWNGaXgiLCBleHRlbmRfcGFyc2VfY29uZmlnLCBOVUxMLCBOVUxMKTsKLSAgICBjb21wYXRhYmlsaXR5X2VudHJpZXMgPSBjYWxsb2MoIG1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF9vbGRfZXh0ZW5kKSk7CisgICAgY29tcGF0YWJpbGl0eV9lbnRyaWVzID0gKG5ldHNubXBfb2xkX2V4dGVuZCAqKQorICAgICAgICBjYWxsb2MoIG1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMsIHNpemVvZihuZXRzbm1wX29sZF9leHRlbmQpKTsKICAgICBSRUdJU1RFUl9NSUIoInVjZC1leHRlbnNpYmxlIiwgb2xkX2V4dGVuc2libGVfdmFyaWFibGVzLAogICAgICAgICAgICAgICAgICB2YXJpYWJsZTIsIG9sZF9leHRlbnNpYmxlX3ZhcmlhYmxlc19vaWQpOwogI2VuZGlmCkBAIC0yMTQsNiArMzA1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRfY2xlYXJfY2FsbGJhY2ssIE5VTEwpOwogfQogCit2b2lkCitzaHV0ZG93bl9leHRlbmQodm9pZCkKK3sKKyNpZm5kZWYgVVNJTkdfVUNEX1NOTVBfRVhURU5TSUJMRV9NT0RVTEUKKyAgICBmcmVlKGNvbXBhdGFiaWxpdHlfZW50cmllcyk7CisgICAgY29tcGF0YWJpbGl0eV9lbnRyaWVzID0gTlVMTDsKKyNlbmRpZgorICAgIHdoaWxlIChlcmVnX2hlYWQpCisJX3VucmVnaXN0ZXJfZXh0ZW5kKGVyZWdfaGVhZCk7Cit9CisKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICoKICAgICAgICAgICogIENhY2hlZC1kYXRhIGhvb2tzCkBAIC0yMjQsNiArMzI2LDEwIEBACiBpbnQKIGV4dGVuZF9sb2FkX2NhY2hlKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICptYWdpYykKIHsKKyNpZm5kZWYgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCisgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfV0FSTklORywic3VwcG9ydCBmb3IgcnVuX2V4ZWNfY29tbWFuZCBub3QgYXZhaWxhYmxlXG4iKSk7CisgICAgcmV0dXJuIC0xOworI2Vsc2UKICAgICBpbnQgIG91dF9sZW4gPSAxMDI0KjEwMDsKICAgICBjaGFyIG91dF9idWZbIDEwMjQqMTAwIF07CiAgICAgaW50ICBjbWRfbGVuID0gMjU1KjIgKyAyOwkvKiAyICogRGlzcGxheVN0cmluZ3MgKi8KQEAgLTI2Myw3ICszNjksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICggZXh0ZW5zaW9uLT5udW1saW5lcyA+IDEgKSB7Ci0gICAgICAgICAgICBleHRlbnNpb24tPmxpbmVzID0gY2FsbG9jKCBzaXplb2YoY2hhciAqKSwgZXh0ZW5zaW9uLT5udW1saW5lcyApOworICAgICAgICAgICAgZXh0ZW5zaW9uLT5saW5lcyA9IChjaGFyKiopY2FsbG9jKCBzaXplb2YoY2hhciAqKSwgZXh0ZW5zaW9uLT5udW1saW5lcyApOwogICAgICAgICAgICAgbWVtY3B5KCBleHRlbnNpb24tPmxpbmVzLCBsaW5lX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjaGFyICopICogZXh0ZW5zaW9uLT5udW1saW5lcyApOwogICAgICAgICB9IGVsc2UgewpAQCAtMjcyLDYgKzM3OCw3IEBACiAgICAgfQogICAgIGV4dGVuc2lvbi0+cmVzdWx0ID0gcmV0OwogICAgIHJldHVybiByZXQ7CisjZW5kaWYgLyogIWRlZmluZWQoVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFKSAqLwogfQogCiB2b2lkCkBAIC00NTAsNiArNTU3LDEwIEBACiAgICAgfQogCiAgICAgZXB0ciAgICAgID0gX3JlZ2lzdGVyX2V4dGVuZCggb2lkX2J1Ziwgb2lkX2xlbiApOworICAgIGlmICghZXB0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGV4dGVuZCBlbnRyeSAnJXMnIC0gcG9zc2libHkgZHVwbGljYXRlIG5hbWUuXG4iLCBleGVjX25hbWUgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBleHRlbnNpb24gPSBfbmV3X2V4dGVuc2lvbiggZXhlY19uYW1lLCBmbGFncywgZXB0ciApOwogICAgIGlmIChleHRlbnNpb24pIHsKICAgICAgICAgZXh0ZW5zaW9uLT5jb21tYW5kICA9IHN0cmR1cCggZXhlY19jb21tYW5kICk7CkBAIC00NzgsMTAgKzU4OSwyMSBAQAogICAgICAgICAgICAgCiAgICAgfSBlbHNlIGlmICghc3RyY21wKCB0b2tlbiwgInNoIiAgICkgfHwKICAgICAgICAgICAgICAgICFzdHJjbXAoIHRva2VuLCAiZXhlYyIgKSkgewotICAgICAgICBpZiAoIG51bV9jb21wYXRhYmlsaXR5X2VudHJpZXMgPT0gbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyApCisgICAgICAgIGlmICggbnVtX2NvbXBhdGFiaWxpdHlfZW50cmllcyA9PSBtYXhfY29tcGF0YWJpbGl0eV9lbnRyaWVzICkgewogICAgICAgICAgICAgLyogWFhYIC0gc2hvdWxkIHJlYWxseSB1c2UgZHluYW1pYyBhbGxvY2F0aW9uICovCi0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJObyBmdXJ0aGVyIFVDRC1jb21wYXRpYmxlIGVudHJpZXMiICk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ldHNubXBfb2xkX2V4dGVuZCAqbmV3X2NvbXBhdGFiaWxpdHlfZW50cmllczsKKyAgICAgICAgICAgIG5ld19jb21wYXRhYmlsaXR5X2VudHJpZXMgPSByZWFsbG9jKGNvbXBhdGFiaWxpdHlfZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyoyKnNpemVvZihuZXRzbm1wX29sZF9leHRlbmQpKTsKKyAgICAgICAgICAgIGlmICghbmV3X2NvbXBhdGFiaWxpdHlfZW50cmllcykKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJObyBmdXJ0aGVyIFVDRC1jb21wYXRpYmxlIGVudHJpZXMiICk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQobmV3X2NvbXBhdGFiaWxpdHlfZW50cmllcytudW1fY29tcGF0YWJpbGl0eV9lbnRyaWVzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfb2xkX2V4dGVuZCkqbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyk7CisgICAgICAgICAgICAgICAgbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyAqPSAyOworICAgICAgICAgICAgICAgIGNvbXBhdGFiaWxpdHlfZW50cmllcyA9IG5ld19jb21wYXRhYmlsaXR5X2VudHJpZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG51bV9jb21wYXRhYmlsaXR5X2VudHJpZXMgIT0gbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcykKICAgICAgICAgICAgIGNvbXBhdGFiaWxpdHlfZW50cmllc1sKICAgICAgICAgICAgICAgICBudW1fY29tcGF0YWJpbGl0eV9lbnRyaWVzKysgXS5leGVjX2VudHJ5ID0gZXh0ZW5zaW9uOwogICAgIH0KQEAgLTYwMSw2ICs3MjMsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKioqKioqKioqKi8KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBWYWxpZGF0ZSB0aGUgbmV3IGFzc2lnbm1lbnRzCkBAIC05MjYsNiArMTA0OSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX0VSUl9HRU5FUlIpOwpAQCAtOTMzLDYgKzEwNTcsNyBAQAogICAgICAgICB9CiAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIC8qCiAgICAgICogSWYgd2UncmUgbWFya2luZyBhIGdpdmVuIHJvdyBhcyBhY3RpdmUsCiAgICAgICogIHRoZW4gd2UgbmVlZCB0byBjaGVjayB0aGF0IGl0J3MgcmVhZHkuCkBAIC05NTcsNyArMTA4Miw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKQEAgLTEwOTAsOCArMTIxNiw4IEBACiAgICAgb2lkIG9pZF9idWZbTUFYX09JRF9MRU5dOwogICAgIGludCBvaWRfbGVuOwogICAgIGludCBpOwotICAgIGNoYXIgKnRva2VuOwotICAgIGludCAgIHRva2VuX2xlbjsKKyAgICBjaGFyICAqdG9rZW47CisgICAgc2l6ZV90IHRva2VuX2xlbjsKIAogICAgIGlmICghcmVxdWVzdCB8fCAhdGFibGVfaW5mbyB8fCAhdGFibGVfaW5mby0+aW5kZXhlcwogICAgICAgICAgICAgICAgICB8fCAhdGFibGVfaW5mby0+aW5kZXhlcy0+bmV4dF92YXJpYWJsZSkgewpAQCAtMTEwNiw3ICsxMjMyLDcgQEAKICAgICAgKiAgR0VUIGhhbmRsaW5nIC0gZmluZCB0aGUgZXhhY3QgZW50cnkgYmVpbmcgcmVxdWVzdGVkCiAgICAgICoqKi8KICAgICBpZiAoIG1vZGUgPT0gTU9ERV9HRVQgKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCAibnNFeHRlbmRUYWJsZTpvdXRwdXQyIiwgIkdFVDogJXMgLyAlZFxuICIsCisgICAgICAgIERFQlVHTVNHVEwoKCAibnNFeHRlbmRUYWJsZTpvdXRwdXQyIiwgIkdFVDogJXMgLyAlbGRcbiAiLAogICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAqdGFibGVfaW5mby0+aW5kZXhlcy0+bmV4dF92YXJpYWJsZS0+dmFsLmludGVnZXIpKTsKICAgICAgICAgZm9yICggZXB0ciA9IGVyZWctPmVoZWFkOyBlcHRyOyBlcHRyID0gZXB0ci0+bmV4dCApIHsKQEAgLTExMjksNyArMTI1NSw2IEBACiAgICAgICAgICAgICBpZiAobGluZV9pZHggPCAxIHx8IGxpbmVfaWR4ID4gZXB0ci0+bnVtbGluZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVwdHI7CiAgICAgfQogCiAgICAgICAgIC8qKioKQEAgLTEyNDYsOSArMTM3MSw4IEBACiAgICAgICAgICAgICBzbm1wX3NldF92YXJfdmFsdWUoIHRhYmxlX2luZm8tPmluZGV4ZXMtPm5leHRfdmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIqKSZsaW5lX2lkeCwgc2l6ZW9mKGxpbmVfaWR4KSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVwdHI7ICAvKiBGaW5hbGx5LCBzaWduYWwgc3VjY2VzcyAqLwogICAgIH0KLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gZXB0cjsgIC8qIEZpbmFsbHksIHNpZ25hbCBzdWNjZXNzICovCiB9CiAKIC8qCkBAIC0xMzM4LDYgKzE0NjIsMzIgQEAKICAgICAgICAgICoKICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK2NoYXIgKiBfZ2V0X2NtZGxpbmUobmV0c25tcF9leHRlbmQgKmV4dGVuZCkKK3sKKyAgICBzaXplX3QgICAgICAgICAgc2l6ZTsKKyAgICBjaGFyICAgICAgICAgICAqbmV3YnVmOworICAgIGNvbnN0IGNoYXIgICAgICphcmdzID0gZXh0ZW5kLT5hcmdzOworCisgICAgaWYgKGFyZ3MgPT0gTlVMTCkKKyAgICAgICAgLyogVXNlIGVtcHR5IHN0cmluZyBmb3IgcHJvY2Vzc2VzIHdpdGhvdXQgYXJndW1lbnRzLiAqLworICAgICAgICBhcmdzID0gIiI7CisKKyAgICBzaXplID0gc3RybGVuKGV4dGVuZC0+Y29tbWFuZCkgKyBzdHJsZW4oYXJncykgKyAyOworICAgIGlmIChzaXplID4gY21kbGluZXNpemUpIHsKKyAgICAgICAgbmV3YnVmID0gcmVhbGxvYyhjbWRsaW5lYnVmLCBzaXplKTsKKyAgICAgICAgaWYgKCFuZXdidWYpIHsKKyAgICAgICAgICAgIGZyZWUoY21kbGluZWJ1Zik7CisgICAgICAgICAgICBjbWRsaW5lYnVmID0gTlVMTDsKKyAgICAgICAgICAgIGNtZGxpbmVzaXplID0gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGNtZGxpbmVidWYgPSBuZXdidWY7CisgICAgICAgIGNtZGxpbmVzaXplID0gc2l6ZTsKKyAgICB9CisgICAgc3ByaW50ZihjbWRsaW5lYnVmLCAiJXMgJXMiLCBleHRlbmQtPmNvbW1hbmQsIGFyZ3MpOworICAgIHJldHVybiBjbWRsaW5lYnVmOworfQorCiB1X2NoYXIgKgogdmFyX2V4dGVuc2libGVfb2xkKHN0cnVjdCB2YXJpYWJsZSAqIHZwLAogICAgICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKQEAgLTEzNDgsNiArMTQ5OCw3IEBACiAgICAgbmV0c25tcF9vbGRfZXh0ZW5kICpleHRlbiA9IE5VTEw7CiAgICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OwogICAgIHVuc2lnbmVkIGludCBpZHg7CisgICAgY2hhciAgICAgICAgICpjbWRsaW5lOwogCiAgICAgaWYgKGhlYWRlcl9zaW1wbGVfdGFibGUKICAgICAgICAgKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QsIG51bV9jb21wYXRhYmlsaXR5X2VudHJpZXMpKQpAQCAtMTM2Niw4ICsxNTE3LDEwIEBACiAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihleHRlbi0+ZXhlY19lbnRyeS0+dG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIChleHRlbi0+ZXhlY19lbnRyeS0+dG9rZW4pKTsKICAgICAgICAgY2FzZSBTSEVMTENPTU1BTkQ6Ci0gICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihleHRlbi0+ZXhlY19lbnRyeS0+Y29tbWFuZCk7Ci0gICAgICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKGV4dGVuLT5leGVjX2VudHJ5LT5jb21tYW5kKSk7CisgICAgICAgICAgICBjbWRsaW5lID0gX2dldF9jbWRsaW5lKGV4dGVuLT5leGVjX2VudHJ5KTsKKyAgICAgICAgICAgIGlmIChjbWRsaW5lKQorICAgICAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGNtZGxpbmUpOworICAgICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIGNtZGxpbmUpOwogICAgICAgICBjYXNlIEVSUk9SRkxBRzogICAgICAgIC8qIHJldHVybiBjb2RlIGZyb20gdGhlIHByb2Nlc3MgKi8KICAgICAgICAgICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggZXh0ZW4tPmV4ZWNfZW50cnktPmNhY2hlICk7CiAgICAgICAgICAgICBsb25nX3JldCA9IGV4dGVuLT5leGVjX2VudHJ5LT5yZXN1bHQ7CkBAIC0xMzkwLDggKzE1NDMsMTAgQEAKIAogICAgICAgICBjYXNlIEVSUk9SRklYQ01EOgogICAgICAgICAgICAgaWYgKGV4dGVuLT5lZml4X2VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXh0ZW4tPmVmaXhfZW50cnktPmNvbW1hbmQpOwotICAgICAgICAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSBleHRlbi0+ZWZpeF9lbnRyeS0+Y29tbWFuZCk7CisgICAgICAgICAgICAgICAgY21kbGluZSA9IF9nZXRfY21kbGluZShleHRlbi0+ZWZpeF9lbnRyeSk7CisJCWlmIChjbWRsaW5lKQorICAgICAgICAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihjbWRsaW5lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgY21kbGluZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICp2YXJfbGVuID0gMDsKICAgICAgICAgICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgJmxvbmdfcmV0dXJuKTsgIC8qIEp1c3QgbmVlZHMgdG8gYmUgbm9uLW51bGwhICovCkBAIC0xNDE2LDYgKzE1NzEsNyBAQAogICAgIGlkeCA9IG5hbWVbbmFtZV9sZW4tMV0gLTE7CiAgICAgZXh0ZW4gPSAmY29tcGF0YWJpbGl0eV9lbnRyaWVzWyBpZHggXTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGlmICh2YXJfdmFsX3R5cGUgIT0gQVNOX0lOVEVHRVIpIHsKQEAgLTE0MzYsNiArMTU5Miw3IEBACiAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiAgICAgICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggZXh0ZW4tPmVmaXhfZW50cnktPmNhY2hlICk7CiAgICAgfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuaCBiL2FnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oCmluZGV4IDhmMTlkYjMuLjhiNzZjZDQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBORVRTTk1QX0VYVEVORF9ICiAjZGVmaW5lIE5FVFNOTVBfRVhURU5EX0gKIAotY29uZmlnX3JlcXVpcmUoIHV0aWxfZnVuY3MgKQorY29uZmlnX3JlcXVpcmUoIHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSApCiBjb25maWdfcmVxdWlyZSggdXRpbGl0aWVzL2V4ZWN1dGUgKQogY29uZmlnX2FkZF9taWIoTkVULVNOTVAtRVhURU5ELU1JQikKIApAQCAtMjgsNiArMjgsNyBAQAogfSBuZXRzbm1wX2V4dGVuZDsKIAogdm9pZCAgICAgICAgICAgICAgICAgaW5pdF9leHRlbmQodm9pZCk7Cit2b2lkICAgICAgICAgICAgICAgICBzaHV0ZG93bl9leHRlbmQodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBoYW5kbGVfbnNFeHRlbmRDb25maWdUYWJsZTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIGhhbmRsZV9uc0V4dGVuZE91dHB1dDFUYWJsZTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIGhhbmRsZV9uc0V4dGVuZE91dHB1dDJUYWJsZTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYwppbmRleCBmOGU3M2YwLi5kMzIyNjNiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NjYWxhci5oPgpAQCAtMTEsNyArMTIsOCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oPgogI2luY2x1ZGUgImFnZW50L25zQ2FjaGUuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNhY2hlX2dldF9oZWFkKQogCiAKIC8qCkBAIC0yMSw2ICsyMyw4IEBACiBleHRlcm4gbmV0c25tcF9jYWNoZSAqbmV0c25tcF9jYWNoZV9nZXRfaGVhZCh2b2lkKTsKIAogCisjZGVmaW5lIG5zQ2FjaGUgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNQorCiAvKgogICogT0lEcyBmb3IgdGhlIGNhY2hlZ2luZyBjb250cm9sIHNjYWxhciBvYmplY3RzCiAgKgpAQCAtMjgsOCArMzIsNiBAQAogICogIHRoYW4gdGhlIChzb2xlKSB2YWxpZCBpbnN0YW5jZSBpbiBlYWNoIGNhc2UsIGluIG9yZGVyCiAgKiAgdG8gaGFuZGxlIHJlcXVlc3RzIGZvciBpbnZhbGlkIGluc3RhbmNlcyBwcm9wZXJseS4KICAqLwotb2lkIG5zQ2FjaGVUaW1lb3V0X29pZFtdICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA1LCAxfTsKLW9pZCBuc0NhY2hlRW5hYmxlZF9vaWRbXSAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNSwgMn07CiAKIC8qCiAgKiAuLi4gYW5kIGZvciB0aGUgY2FjaGUgdGFibGUuCkBAIC00NCwxNSArNDYsMTcgQEAKICNkZWZpbmUgTlNDQUNIRV9TVEFUVVNfQUNUSVZFICAgNAogI2RlZmluZSBOU0NBQ0hFX1NUQVRVU19FWFBJUkVEICA1CiAKLW9pZCBuc0NhY2hlVGFibGVfb2lkW10gICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNSwgM307Ci0KLWV4dGVybiBzdHJ1Y3Qgc25tcF9hbGFybSAqCitORVRTTk1QX0lNUE9SVCBzdHJ1Y3Qgc25tcF9hbGFybSAqCiBzYV9maW5kX3NwZWNpZmljKHVuc2lnbmVkIGludCBjbGllbnRyZWcpOwogCiAKIHZvaWQKIGluaXRfbnNDYWNoZSh2b2lkKQogeworICAgIGNvbnN0IG9pZCBuc0NhY2hlVGltZW91dF9vaWRbXSAgICA9IHsgbnNDYWNoZSwgMSB9OworICAgIGNvbnN0IG9pZCBuc0NhY2hlRW5hYmxlZF9vaWRbXSAgICA9IHsgbnNDYWNoZSwgMiB9OworICAgIGNvbnN0IG9pZCBuc0NhY2hlVGFibGVfb2lkW10gICAgICA9IHsgbnNDYWNoZSwgMyB9OworCiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gICAgICAgICAgICppaW5mbzsKIApAQCAtMTAyLDcgKzEwNiw3IEBACiAgICAgLyoKICAgICAgKiAuLi4uIGFuZCByZWdpc3RlciB0aGUgdGFibGUgd2l0aCB0aGUgYWdlbnQuCiAgICAgICovCi0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcigKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAidHpDYWNoZVRhYmxlIiwgaGFuZGxlX25zQ2FjaGVUYWJsZSwKICAgICAgICAgICAgIG5zQ2FjaGVUYWJsZV9vaWQsIE9JRF9MRU5HVEgobnNDYWNoZVRhYmxlX29pZCksCkBAIC0xMzcsNiArMTQxLDcgQEAKIAlicmVhazsKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAJZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgaWYgKCByZXF1ZXN0LT5zdGF0dXMgIT0gMCApIHsKQEAgLTE1OCw2ICsxNjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9DQUNIRV9USU1FT1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTg3LDYgKzE5Myw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmICggcmVxdWVzdC0+c3RhdHVzICE9IDAgKSB7CkBAIC0yMTEsNiArMjE4LDcgQEAKIAluZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9OT19DQUNISU5HLCBlbmFibGVkKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjk1LDkgKzMwMywxMCBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAkJfQogCQlzdGF0dXMgPSAoY2FjaGVfZW50cnktPmVuYWJsZWQgPwotCSAgICAgICAgICAgICAgICAgICAoY2FjaGVfZW50cnktPnRpbWVzdGFtcCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICghYXRpbWVfcmVhZHkoY2FjaGVfZW50cnktPnRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAqY2FjaGVfZW50cnktPnRpbWVvdXQpID8KKwkgICAgICAgICAgICAgICAgICAgKGNhY2hlX2VudHJ5LT50aW1lc3RhbXBNID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhY2hlX2VudHJ5LT50aW1lb3V0ID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFuZXRzbm1wX3JlYWR5X21vbm90b25pYyhjYWNoZV9lbnRyeS0+dGltZXN0YW1wTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKmNhY2hlX2VudHJ5LT50aW1lb3V0KSA/CiAJICAgICAgICAgICAgICAgICAgICAgICAgTlNDQUNIRV9TVEFUVVNfQUNUSVZFOgogCSAgICAgICAgICAgICAgICAgICAgICAgIE5TQ0FDSEVfU1RBVFVTX0VYUElSRUQpIDoKIAkgICAgICAgICAgICAgICAgICAgICAgTlNDQUNIRV9TVEFUVVNfRU1QVFkpIDoKQEAgLTMxNCw2ICszMjMsNyBAQAogCWJyZWFrOwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTM2MSw3ICszNzEsNiBAQAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfRVJSX05PQ1JFQVRJT04pOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOwkvKiBYWFggLSBpcyB0aGlzIHJpZ2h0ID8gKi8KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKIAkgICAgfQogCX0KIAlicmVhazsKQEAgLTQwNSwxNCArNDE0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJICAgIGNhc2UgTlNDQUNIRV9TVEFUVVNfRU1QVFk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9lbnRyeS0+ZnJlZV9jYWNoZShjYWNoZV9lbnRyeSwgY2FjaGVfZW50cnktPm1hZ2ljKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoY2FjaGVfZW50cnktPnRpbWVzdGFtcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9lbnRyeS0+dGltZXN0YW1wID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoY2FjaGVfZW50cnktPnRpbWVzdGFtcE0pOworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfZW50cnktPnRpbWVzdGFtcE0gPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAJCX0KIAkgICAgICAgIGJyZWFrOwogCSAgICB9CiAJfQogCWJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYwppbmRleCA0MGQ1NWQ0Li44OWE5MGIwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jCkBAIC0xMCwzNCArMTAsMzIgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiYWdlbnQvbnNEZWJ1Zy5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKIAotCi0KLS8qCi0gKiBPSURzIGZvciB0aGUgZGVidWdnaW5nIGNvbnRyb2wgc2NhbGFyIG9iamVjdHMKLSAqCi0gKiBOb3RlIHRoYXQgdGhlc2Ugd2UncmUgcmVnaXN0ZXJpbmcgdGhlIGZ1bGwgb2JqZWN0IHJhdGhlcgotICogIHRoYW4gdGhlIChzb2xlKSB2YWxpZCBpbnN0YW5jZSBpbiBlYWNoIGNhc2UsIGluIG9yZGVyCi0gKiAgdG8gaGFuZGxlIHJlcXVlc3RzIGZvciBpbnZhbGlkIGluc3RhbmNlcyBwcm9wZXJseS4KLSAqLwotb2lkIG5zRGVidWdFbmFibGVkX29pZFtdICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA3LCAxLCAxfTsKLW9pZCBuc0RlYnVnT3V0cHV0QWxsX29pZFtdICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNywgMSwgMn07Ci1vaWQgbnNEZWJ1Z0R1bXBQZHVfb2lkW10gICAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDcsIDEsIDN9OwotCi0vKgotICogLi4uIGFuZCBmb3IgdGhlIHRva2VuIHRhYmxlLgotICovCi0KLSNkZWZpbmUgIERCR1RPS0VOX1BSRUZJWAkyCi0jZGVmaW5lICBEQkdUT0tFTl9FTkFCTEVECTMKLSNkZWZpbmUgIERCR1RPS0VOX1NUQVRVUwk0Ci1vaWQgbnNEZWJ1Z1Rva2VuVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDcsIDEsIDR9OwotCisjZGVmaW5lIG5zQ29uZmlnRGVidWcgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNywgMQogCiB2b2lkCiBpbml0X25zRGVidWcodm9pZCkKIHsKKyAgICAvKgorICAgICAqIE9JRHMgZm9yIHRoZSBkZWJ1Z2dpbmcgY29udHJvbCBzY2FsYXIgb2JqZWN0cworICAgICAqCisgICAgICogTm90ZSB0aGF0IHRoZXNlIHdlJ3JlIHJlZ2lzdGVyaW5nIHRoZSBmdWxsIG9iamVjdCByYXRoZXIKKyAgICAgKiAgdGhhbiB0aGUgKHNvbGUpIHZhbGlkIGluc3RhbmNlIGluIGVhY2ggY2FzZSwgaW4gb3JkZXIKKyAgICAgKiAgdG8gaGFuZGxlIHJlcXVlc3RzIGZvciBpbnZhbGlkIGluc3RhbmNlcyBwcm9wZXJseS4KKyAgICAgKi8KKyAgICBjb25zdCBvaWQgbnNEZWJ1Z0VuYWJsZWRfb2lkW10gICAgPSB7IG5zQ29uZmlnRGVidWcsIDF9OworICAgIGNvbnN0IG9pZCBuc0RlYnVnT3V0cHV0QWxsX29pZFtdICA9IHsgbnNDb25maWdEZWJ1ZywgMn07CisgICAgY29uc3Qgb2lkIG5zRGVidWdEdW1wUGR1X29pZFtdICAgID0geyBuc0NvbmZpZ0RlYnVnLCAzfTsKKworICAgIC8qCisgICAgICogLi4uIGFuZCBmb3IgdGhlIHRva2VuIHRhYmxlLgorICAgICAqLworCisjZGVmaW5lICBEQkdUT0tFTl9QUkVGSVgJMgorI2RlZmluZSAgREJHVE9LRU5fRU5BQkxFRAkzCisjZGVmaW5lICBEQkdUT0tFTl9TVEFUVVMJNAorICAgIGNvbnN0IG9pZCBuc0RlYnVnVG9rZW5UYWJsZV9vaWRbXSA9IHsgbnNDb25maWdEZWJ1ZywgNH07CisKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAgICAgICAgICAgKmlpbmZvOwogCkBAIC05Myw3ICs5MSw3IEBACiAgICAgLyoKICAgICAgKiAuLi4uIGFuZCByZWdpc3RlciB0aGUgdGFibGUgd2l0aCB0aGUgYWdlbnQuCiAgICAgICovCi0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcigKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAidHpEZWJ1Z1RhYmxlIiwgaGFuZGxlX25zRGVidWdUYWJsZSwKICAgICAgICAgICAgIG5zRGVidWdUb2tlblRhYmxlX29pZCwgT0lEX0xFTkdUSChuc0RlYnVnVG9rZW5UYWJsZV9vaWQpLApAQCAtMTI2LDYgKzEyNCw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTE1MSw2ICsxNTAsNyBAQAogCSAgICBlbmFibGVkID0gMDsKIAlzbm1wX3NldF9kb19kZWJ1Z2dpbmcoIGVuYWJsZWQgKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTgxLDYgKzE4MSw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTIwNiw2ICsyMDcsNyBAQAogCSAgICBlbmFibGVkID0gMDsKIAlzbm1wX3NldF9kb19kZWJ1Z2dpbmcoIGVuYWJsZWQgKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjM3LDYgKzIzOSw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTI2Myw2ICsyNjYsNyBAQAogCW5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAogCSAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQsIGVuYWJsZWQpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNDcsNiArMzUxLDcgQEAKIAlicmVhazsKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAJZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCAhPSAwKQpAQCAtNDUzLDYgKzQ1OCw3IEBACiAJICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jCmluZGV4IDNlNWIwMmYuLjdmMjBiZGIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NjYWxhci5oPgpAQCAtMTEsOSArMTIsMTEgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CiAjaW5jbHVkZSAiYWdlbnQvbnNMb2dnaW5nLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogCi0KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGxvZ2dpbmdfZXh0ZXJuYWwpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfaXRlcmF0b3JfaW5zZXJ0X2NvbnRleHQpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBPSUQgYW5kIGNvbHVtbnMgZm9yIHRoZSBsb2dnaW5nIHRhYmxlLgpAQCAtMjMsMTUgKzI2LDE0IEBACiAjZGVmaW5lICBOU0xPR0dJTkdfTUFYTEVWRUwJNAogI2RlZmluZSAgTlNMT0dHSU5HX1NUQVRVUwk1CiAKLW9pZCBuc0xvZ2dpbmdUYWJsZV9vaWRbXSAgICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA3LCAyLCAxfTsKLQotCiB2b2lkCiBpbml0X25zTG9nZ2luZyh2b2lkKQogewogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICAgICAgICAgICAqaWluZm87CiAKKyAgICBjb25zdCBvaWQgbnNMb2dnaW5nVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDcsIDIsIDF9OworCiAgICAgLyoKICAgICAgKiBSZWdpc3RlciB0aGUgdGFibGUuCiAgICAgICogV2UgbmVlZCB0byBkZWZpbmUgdGhlIGNvbHVtbiBzdHJ1Y3R1cmUgYW5kIGluZGV4aW5nLi4uLgpAQCAtNjIsNyArNjQsNyBAQAogICAgIC8qCiAgICAgICogLi4uLiBhbmQgcmVnaXN0ZXIgdGhlIHRhYmxlIHdpdGggdGhlIGFnZW50LgogICAgICAqLwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IoCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgInR6TG9nZ2luZ1RhYmxlIiwgaGFuZGxlX25zTG9nZ2luZ1RhYmxlLAogICAgICAgICAgICAgbnNMb2dnaW5nVGFibGVfb2lkLCBPSURfTEVOR1RIKG5zTG9nZ2luZ1RhYmxlX29pZCksCkBAIC0xOTAsNiArMTkyLDcgQEAKIAlicmVhazsKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAoIHJlcXVlc3QtPnN0YXR1cyAhPSAwICkgewpAQCAtMzA4LDcgKzMxMSw2IEBACiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9OT1NVQ0hPQkpFQ1QpOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX05PU1VDSE9CSkVDVDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKIAkgICAgfQogCX0KIAlicmVhazsKQEAgLTQ0OSwxMSArNDUxLDExIEBACiAgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX0FDVElWRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2gtPmVuYWJsZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNfTk9USU5TRVJWSUNFOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2doLT5lbmFibGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJICAgIGNhc2UgUlNfREVTVFJPWToKIAkJICAgICAgICBuZXRzbm1wX3JlbW92ZV9sb2doYW5kbGVyKCBsb2doICk7CkBAIC00NjMsNiArNDY1LDcgQEAKIAkgICAgfQogCX0KIAlicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMKaW5kZXggNGY0ZWEwMC4uODRiZDhmYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYwpAQCAtNCwxMCArNCwxMyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJuc01vZHVsZVRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCisKIHZvaWQKIG5zTW9kdWxlVGFibGVfZnJlZSh2b2lkICpjb250ZXh0LCBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmRvbnRfY2FyZSkKIHsKQEAgLTE4LDggKzIxLDcgQEAKIHZvaWQKIGluaXRpYWxpemVfdGFibGVfbnNNb2R1bGVUYWJsZSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgICAgICBuc01vZHVsZVRhYmxlX29pZFtdID0KLSAgICAgICAgeyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCAyLCAxIH07CisgICAgY29uc3Qgb2lkIG5zTW9kdWxlVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDIsIDEgfTsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15X2hhbmRsZXI7CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbzsKQEAgLTczLDEwICs3NSwxMCBAQAogICAgICAqLwogICAgIERFQlVHTVNHVEwoKCJpbml0aWFsaXplX3RhYmxlX25zTW9kdWxlVGFibGUiLAogICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyB0YWJsZSBuc01vZHVsZVRhYmxlIGFzIGEgdGFibGUgaXRlcmF0b3JcbiIpKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKG15X2hhbmRsZXIsIGlpbmZvKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihteV9oYW5kbGVyLCBpaW5mbyk7CiB9CiAKLS8qKiBJbml0aWFsemllcyB0aGUgbnNNb2R1bGVUYWJsZSBtb2R1bGUgKi8KKy8qKiBJbml0aWFsaXplcyB0aGUgbnNNb2R1bGVUYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfbnNNb2R1bGVUYWJsZSh2b2lkKQogewpAQCAtMTM3LDE4ICsxMzksMTggQEAKICAgICAqbXlfZGF0YV9jb250ZXh0ID0gY3RyZWUtPnRyZWU7CiAKICAgICB2cHRyID0gcHV0X2luZGV4X2RhdGE7Ci0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgY3RyZWUtPmNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUsCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsIGN0cmVlLT5jb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY3RyZWUtPmNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUpKTsKIAogICAgIHZwdHIgPSB2cHRyLT5uZXh0X3ZhcmlhYmxlOwogICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLAotICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopY3RyZWUtPmNvbnRleHRfcHRyLT5maXJzdF9zdWJ0cmVlLT5uYW1lX2EsCisgICAgICAgICAgICAgICAgICAgICAgIGN0cmVlLT5jb250ZXh0X3B0ci0+Zmlyc3Rfc3VidHJlZS0+bmFtZV9hLAogICAgICAgICAgICAgICAgICAgICAgICBjdHJlZS0+Y29udGV4dF9wdHItPmZpcnN0X3N1YnRyZWUtPm5hbWVsZW4gKgogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSk7CiAKICAgICB1bHRtcCA9IGN0cmVlLT5jb250ZXh0X3B0ci0+Zmlyc3Rfc3VidHJlZS0+cHJpb3JpdHk7CiAgICAgdnB0ciA9IHZwdHItPm5leHRfdmFyaWFibGU7Ci0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgJiB1bHRtcCwgc2l6ZW9mKHVsdG1wKSk7CisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICYgdWx0bXAsIHNpemVvZih1bHRtcCkpOwogCiAgICAgcmV0dXJuIHB1dF9pbmRleF9kYXRhOwogfQpAQCAtMTg1LDE2ICsxODcsMTYgQEAKICAgICAqbXlfZGF0YV9jb250ZXh0ID0gY3RyZWUtPnRyZWU7CiAKICAgICB2cHRyID0gcHV0X2luZGV4X2RhdGE7Ci0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgY3RyZWUtPmNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUsCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsIGN0cmVlLT5jb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY3RyZWUtPmNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUpKTsKIAogICAgIHZwdHIgPSB2cHRyLT5uZXh0X3ZhcmlhYmxlOwotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAodV9jaGFyICopIGN0cmVlLT50cmVlLT5uYW1lX2EsCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsIGN0cmVlLT50cmVlLT5uYW1lX2EsCiAgICAgICAgICAgICAgICAgICAgICAgIGN0cmVlLT50cmVlLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOwogCiAgICAgdWx0bXAgPSBjdHJlZS0+dHJlZS0+cHJpb3JpdHk7CiAgICAgdnB0ciA9IHZwdHItPm5leHRfdmFyaWFibGU7Ci0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgJiB1bHRtcCwgc2l6ZW9mKHVsdG1wKSk7CisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICYgdWx0bXAsIHNpemVvZih1bHRtcCkpOwogCiAgICAgcmV0dXJuIHB1dF9pbmRleF9kYXRhOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYwppbmRleCAzMWI5ZmU1Li5kN2QzY2U5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYwpAQCAtMyw2ICszLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTEwLDE1ICsxMSwxNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg+CiAjaW5jbHVkZSAibnNUcmFuc2FjdGlvblRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCisKIC8qKiBJbml0aWFsaXplIHRoZSBuc1RyYW5zYWN0aW9uVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXQncyBjb250ZW50cwogICAgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KIHZvaWQKIGluaXRpYWxpemVfdGFibGVfbnNUcmFuc2FjdGlvblRhYmxlKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAgICAgIG5zVHJhbnNhY3Rpb25UYWJsZV9vaWRbXSA9Ci0gICAgICAgIHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgOCwgMSB9OwotICAgIHNpemVfdCAgICAgICAgICBuc1RyYW5zYWN0aW9uVGFibGVfb2lkX2xlbiA9Ci0gICAgICAgIE9JRF9MRU5HVEgobnNUcmFuc2FjdGlvblRhYmxlX29pZCk7CisgICAgY29uc3Qgb2lkIG5zVHJhbnNhY3Rpb25UYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgOCwgMSB9OwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlfaGFuZGxlcjsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvOwpAQCAtMzMsMTEgKzMzLDEwIEBACiAgICAgICogaWYgeW91ciB0YWJsZSBpcyByZWFkIG9ubHksIGl0J3MgZWFzaWVzdCB0byBjaGFuZ2UgdGhlCiAgICAgICogSEFORExFUl9DQU5fUldSSVRFIGRlZmluaXRpb24gYmVsb3cgdG8gSEFORExFUl9DQU5fUk9OTFkgCiAgICAgICovCi0gICAgbXlfaGFuZGxlciA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJuc1RyYW5zYWN0aW9uVGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1RyYW5zYWN0aW9uVGFibGVfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNUcmFuc2FjdGlvblRhYmxlX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNUcmFuc2FjdGlvblRhYmxlX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBteV9oYW5kbGVyID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICJuc1RyYW5zYWN0aW9uVGFibGUiLCBuc1RyYW5zYWN0aW9uVGFibGVfaGFuZGxlciwKKyAgICAgICAgbnNUcmFuc2FjdGlvblRhYmxlX29pZCwgT0lEX0xFTkdUSChuc1RyYW5zYWN0aW9uVGFibGVfb2lkKSwKKyAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOwogCiAgICAgaWYgKCFteV9oYW5kbGVyIHx8ICF0YWJsZV9pbmZvIHx8ICFpaW5mbykgewogICAgICAgICBpZiAobXlfaGFuZGxlcikKQEAgLTY1LDEwICs2NCwxMCBAQAogICAgICAqLwogICAgIERFQlVHTVNHVEwoKCJpbml0aWFsaXplX3RhYmxlX25zVHJhbnNhY3Rpb25UYWJsZSIsCiAgICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5nIHRhYmxlIG5zVHJhbnNhY3Rpb25UYWJsZSBhcyBhIHRhYmxlIGl0ZXJhdG9yXG4iKSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihteV9oYW5kbGVyLCBpaW5mbyk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIobXlfaGFuZGxlciwgaWluZm8pOwogfQogCi0vKiogSW5pdGlhbHppZXMgdGhlIG5zVHJhbnNhY3Rpb25UYWJsZSBtb2R1bGUgKi8KKy8qKiBJbml0aWFsaXplcyB0aGUgbnNUcmFuc2FjdGlvblRhYmxlIG1vZHVsZSAqLwogdm9pZAogaW5pdF9uc1RyYW5zYWN0aW9uVGFibGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jCmluZGV4IGQyY2VlMzUuLjc5ZmE5N2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYwpAQCAtNCwxMSArNCwxOCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS92YWNtLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJuc1ZhY21BY2Nlc3NUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9zdG9yYWdldHlwZSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2l0ZXJhdG9yX2luc2VydF9jb250ZXh0KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG5zVmFjbUFjY2Vzc1RhYmxlIG1vZHVsZSAqLwogdm9pZAogaW5pdF9yZWdpc3Rlcl9uc1ZhY21fY29udGV4dChjb25zdCBjaGFyICpjb250ZXh0KQpAQCAtMTcsMTcgKzI0LDIyIEBACiAgICAgICogSW5pdGlhbGl6ZSB0aGUgbnNWYWNtQWNjZXNzVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzCiAgICAgICogICBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZAogICAgICAqLwotICAgIHN0YXRpYyBvaWQgbnNWYWNtQWNjZXNzVGFibGVfb2lkW10gICA9IHsgMSwzLDYsMSw0LDEsODA3MiwxLDksMSB9OwotICAgIHNpemVfdCAgICAgbnNWYWNtQWNjZXNzVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobnNWYWNtQWNjZXNzVGFibGVfb2lkKTsKKyAgICBjb25zdCBvaWQgbnNWYWNtQWNjZXNzVGFibGVfb2lkW10gICA9IHsgMSwzLDYsMSw0LDEsODA3MiwxLDksMSB9OwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gICAgICAgICAgICppaW5mbzsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCi0gICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm5zVmFjbUFjY2Vzc1RhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNWYWNtQWNjZXNzVGFibGVfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNWYWNtQWNjZXNzVGFibGVfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1ZhY21BY2Nlc3NUYWJsZV9vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgIm5zVmFjbUFjY2Vzc1RhYmxlIiwgbnNWYWNtQWNjZXNzVGFibGVfaGFuZGxlciwKKyAgICAgICAgbnNWYWNtQWNjZXNzVGFibGVfb2lkLCBPSURfTEVOR1RIKG5zVmFjbUFjY2Vzc1RhYmxlX29pZCksCisgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICJuc1ZhY21BY2Nlc3NUYWJsZSIsIG5zVmFjbUFjY2Vzc1RhYmxlX2hhbmRsZXIsCisgICAgICAgIG5zVmFjbUFjY2Vzc1RhYmxlX29pZCwgT0lEX0xFTkdUSChuc1ZhY21BY2Nlc3NUYWJsZV9vaWQpLAorICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ4LDcgKzYwLDcgQEAKICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4dFswXSApCiAgICAgICAgIHJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dCk7CiAKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKHJlZywgaWluZm8pOworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKHJlZywgaWluZm8pOwogfQogCiB2b2lkCkBAIC0xOTEsNiArMjAzLDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTMzNiw2ICszNDksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudF9taWJzLmggYi9hZ2VudC9taWJncm91cC9hZ2VudF9taWJzLmgKaW5kZXggOGMwZGUxYy4uNTBkZDE1OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnRfbWlicy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50X21pYnMuaApAQCAtMSw2ICsxLDggQEAKIGNvbmZpZ19yZXF1aXJlKGFnZW50L25zVHJhbnNhY3Rpb25UYWJsZSkKIGNvbmZpZ19yZXF1aXJlKGFnZW50L25zTW9kdWxlVGFibGUpCisjaWZuZGVmIE5FVFNOTVBfTk9fREVCVUdHSU5HCiBjb25maWdfcmVxdWlyZShhZ2VudC9uc0RlYnVnKQorI2VuZGlmCiBjb25maWdfcmVxdWlyZShhZ2VudC9uc0NhY2hlKQogY29uZmlnX3JlcXVpcmUoYWdlbnQvbnNMb2dnaW5nKQogY29uZmlnX3JlcXVpcmUoYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYwppbmRleCBkMTU2ZDQ3Li5iNTkwYzdhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgQWdlbnRYIENvbmZpZ3VyYXRpb24KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMTQsMTkgKzE1LDE1IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1BXRF9ICi0jaW5jbHVkZSA8cHdkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0dSUF9ICi0jaW5jbHVkZSA8Z3JwLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJzbm1wZC5oIgogI2luY2x1ZGUgImFnZW50eC9hZ2VudHhfY29uZmlnLmgiCiAjaW5jbHVkZSAiYWdlbnR4L3Byb3RvY29sLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHVzZXJfaW5mb3JtYXRpb24pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfdGltZV90b19zZWNzKQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBDb21tb24gbWFzdGVyIGFuZCBzdWItYWdlbnQKQEAgLTQ3LDcgKzQ0LDYgQEAKIGFnZW50eF9wYXJzZV9tYXN0ZXIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7CiAgICAgaW50ICAgICAgICAgICAgIGkgPSAtMTsKLSAgICBjaGFyICAgICAgICAgICAgYnVmW0JVRlNJWl07CiAKICAgICBpZiAoIXN0cmNtcChjcHRyLCAiYWdlbnR4IikgfHwKICAgICAgICAgIXN0cmNtcChjcHRyLCAiYWxsIikgfHwKQEAgLTYwLDggKzU2LDcgQEAKICAgICAgICAgaSA9IGF0b2koY3B0cik7CiAKICAgICBpZiAoaSA8IDAgfHwgaSA+IDEpIHsKLSAgICAgICAgc3ByaW50ZihidWYsICJtYXN0ZXIgJyVzJyB1bnJlY29nbmlzZWQiLCBjcHRyKTsKLSAgICAgICAgY29uZmlnX3BlcnJvcihidWYpOworCW5ldHNubXBfY29uZmlnX2Vycm9yKCJtYXN0ZXIgJyVzJyB1bnJlY29nbmlzZWQiLCBjcHRyKTsKICAgICB9IGVsc2UKICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9NQVNURVIsIGkpOwogfQpAQCAtNzUsMTIgKzcwLDYgQEAKICAgICBpbnQgc19wZXJtID0gLTE7CiAgICAgaW50IGRfcGVybSA9IC0xOwogICAgIGNoYXIgKnN0OwotI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAotICAgIHN0cnVjdCBwYXNzd2QgKnB3ZDsKLSNlbmRpZgotI2lmIEhBVkVfR0VUR1JOQU0gJiYgSEFWRV9HUlBfSAotICAgIHN0cnVjdCBncm91cCAgKmdycDsKLSNlbmRpZgogCiAgICAgREVCVUdNU0dUTCgoImFnZW50eC9jb25maWciLCAicG9ydCBwZXJtaXNzaW9uczogJXNcbiIsIGNwdHIpKTsKICAgICBzb2NrZXRfcGVybSA9IHN0cnRva19yKGNwdHIsICIgXHQiLCAmc3QpOwpAQCAtMTA3LDE2ICs5Niw3IEBACiAgICAgICogVHJ5IHRvIGhhbmRsZSBudW1lcmljIFVJRHMgb3IgdXNlciBuYW1lcyBmb3IgdGhlIHNvY2tldCBvd25lcgogICAgICAqLwogICAgIGlmIChzb2NrZXRfdXNlcikgewotICAgICAgICB1aWQgPSBhdG9pKHNvY2tldF91c2VyKTsKLSAgICAgICAgaWYgKCB1aWQgPT0gMCApIHsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKLSAgICAgICAgICAgIHB3ZCA9IGdldHB3bmFtKCBzb2NrZXRfdXNlciApOwotICAgICAgICAgICAgaWYgKHB3ZCkKLSAgICAgICAgICAgICAgICB1aWQgPSBwd2QtPnB3X3VpZDsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiQ2FuJ3QgaWRlbnRpZnkgQWdlbnRYIHNvY2tldCB1c2VyICglcykuXG4iLCBzb2NrZXRfdXNlcik7Ci0gICAgICAgIH0KKyAgICAgICAgdWlkID0gbmV0c25tcF9zdHJfdG9fdWlkKHNvY2tldF91c2VyKTsKICAgICAgICAgaWYgKCB1aWQgIT0gMCApCiAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS19VU0VSLCB1aWQpOwpAQCAtMTI4LDE2ICsxMDgsNyBAQAogICAgICAqIGFuZCBzaW1pbGFybHkgZm9yIHRoZSBzb2NrZXQgZ3JvdXAgb3duZXJzaGlwCiAgICAgICovCiAgICAgaWYgKHNvY2tldF9ncm91cCkgewotICAgICAgICBnaWQgPSBhdG9pKHNvY2tldF9ncm91cCk7Ci0gICAgICAgIGlmICggZ2lkID09IDAgKSB7Ci0jaWYgSEFWRV9HRVRHUk5BTSAmJiBIQVZFX0dSUF9ICi0gICAgICAgICAgICBncnAgPSBnZXRncm5hbSggc29ja2V0X2dyb3VwICk7Ci0gICAgICAgICAgICBpZiAoZ3JwKQotICAgICAgICAgICAgICAgIGdpZCA9IGdycC0+Z3JfZ2lkOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJDYW4ndCBpZGVudGlmeSBBZ2VudFggc29ja2V0IGdyb3VwICglcykuXG4iLCBzb2NrZXRfZ3JvdXApOwotICAgICAgICB9CisgICAgICAgIGdpZCA9IG5ldHNubXBfc3RyX3RvX2dpZChzb2NrZXRfZ3JvdXApOwogICAgICAgICBpZiAoIGdpZCAhPSAwICkKICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX0dST1VQLCBnaWQpOwpAQCAtMTQ5LDggKzEyMCwxMiBAQAogdm9pZAogYWdlbnR4X3BhcnNlX2FnZW50eF90aW1lb3V0KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGludCB4ID0gYXRvaShjcHRyKTsKKyAgICBpbnQgeCA9IG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcyhjcHRyKTsKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L2NvbmZpZy90aW1lb3V0IiwgIiVzXG4iLCBjcHRyKSk7CisgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiSW52YWxpZCB0aW1lb3V0IHZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1RJTUVPVVQsIHggKiBPTkVfU0VDKTsKIH0KQEAgLTE4NSwxMSArMTYwLDE0IEBACiAgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoIjphZ2VudHgiLCB0b2tlbiwgcGFyc2VyLCByZWxlYXNlciwgaGVscCk7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudHhfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRYX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIKIHZvaWQKIGFnZW50eF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKnRva2VuKQogewogICAgIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoIjphZ2VudHgiLCB0b2tlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BR0VOVFhfVU5SRUdJU1RFUl9DT05GSUdfSEFORExFUiAqLwogCiB2b2lkCiBhZ2VudHhfY29uZmlnX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYwppbmRleCAxZGJkZDJiLi5kMzZmZTJkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jCkBAIC0zLDYgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMTksMTEgKzIwLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMzYsOSArMzMsNiBAQAogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTQ4LDcgKzQyLDcgQEAKICNpbmNsdWRlICJhZ2VudHgvY2xpZW50LmgiCiAjaW5jbHVkZSAiYWdlbnR4L3N1YmFnZW50LmgiCiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7CituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzZXRfYWdlbnRfdXB0aW1lKQogCiAgICAgICAgIC8qCiAgICAgICAgICAqIEFnZW50WCBoYW5kbGluZyB1dGlsaXR5IHJvdXRpbmVzCkBAIC02Myw3ICs1Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgaW50IHJlcWlkLCBuZXRzbm1wX3BkdSAqcGR1LCB2b2lkICptYWdpYykKIHsKICAgICBzdHJ1Y3Qgc3luY2hfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBzeW5jaF9zdGF0ZSAqKSBtYWdpYzsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93LCBkaWZmOwogCiAgICAgaWYgKCFzdGF0ZSB8fCByZXFpZCAhPSBzdGF0ZS0+cmVxaWQpIHsKICAgICAgICAgcmV0dXJuIGhhbmRsZV9hZ2VudHhfcGFja2V0KG9wLCBzZXNzaW9uLCByZXFpZCwgcGR1LCBtYWdpYyk7CkBAIC04MCwxNyArNzMsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFN5bmNocm9uaXNlIHN5c1VwVGltZSB3aXRoIHRoZSBtYXN0ZXIgYWdlbnQKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotICAgICAgICAgICAgbm93LnR2X3NlYy0tOwotICAgICAgICAgICAgbm93LnR2X3VzZWMgKz0gMTAwMDAwMEw7Ci0gICAgICAgICAgICBkaWZmLnR2X3NlYyA9IHBkdS0+dGltZSAvIDEwMDsKLSAgICAgICAgICAgIGRpZmYudHZfdXNlYyA9IChwZHUtPnRpbWUgLSAoZGlmZi50dl9zZWMgKiAxMDApKSAqIDEwMDAwOwotICAgICAgICAgICAgc3RhcnR0aW1lLnR2X3NlYyA9IG5vdy50dl9zZWMgLSBkaWZmLnR2X3NlYzsKLSAgICAgICAgICAgIHN0YXJ0dGltZS50dl91c2VjID0gbm93LnR2X3VzZWMgLSBkaWZmLnR2X3VzZWM7Ci0gICAgICAgICAgICBpZiAoc3RhcnR0aW1lLnR2X3VzZWMgPiAxMDAwMDAwTCkgewotICAgICAgICAgICAgICAgIHN0YXJ0dGltZS50dl91c2VjIC09IDEwMDAwMDBMOwotICAgICAgICAgICAgICAgIHN0YXJ0dGltZS50dl9zZWMrKzsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHNubXBfc2V0X2FnZW50X3VwdGltZShwZHUtPnRpbWUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChvcCA9PSBORVRTTk1QX0NBTExCQUNLX09QX1RJTUVEX09VVCkgewogICAgICAgICBzdGF0ZS0+cGR1ID0gTlVMTDsKQEAgLTIxMiw3ICsxOTUsNyBAQAogICAgIHBkdS0+cmFuZ2Vfc3ViaWQgPSByYW5nZV9zdWJpZDsKICAgICBpZiAoY29udGV4dE5hbWUpIHsKICAgICAgICAgcGR1LT5mbGFncyB8PSBBR0VOVFhfTVNHX0ZMQUdfTk9OX0RFRkFVTFRfQ09OVEVYVDsKLSAgICAgICAgcGR1LT5jb21tdW5pdHkgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgICAgICBwZHUtPmNvbW11bml0eSA9ICh1X2NoYXIgKikgc3RyZHVwKGNvbnRleHROYW1lKTsKICAgICAgICAgcGR1LT5jb21tdW5pdHlfbGVuID0gc3RybGVuKGNvbnRleHROYW1lKTsKICAgICB9CiAKQEAgLTI2OSw3ICsyNTIsNyBAQAogICAgIHBkdS0+cmFuZ2Vfc3ViaWQgPSByYW5nZV9zdWJpZDsKICAgICBpZiAoY29udGV4dE5hbWUpIHsKICAgICAgICAgcGR1LT5mbGFncyB8PSBBR0VOVFhfTVNHX0ZMQUdfTk9OX0RFRkFVTFRfQ09OVEVYVDsKLSAgICAgICAgcGR1LT5jb21tdW5pdHkgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgICAgICBwZHUtPmNvbW11bml0eSA9ICh1X2NoYXIgKikgc3RyZHVwKGNvbnRleHROYW1lKTsKICAgICAgICAgcGR1LT5jb21tdW5pdHlfbGVuID0gc3RybGVuKGNvbnRleHROYW1lKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYwppbmRleCA2YjBmNjVlLi5jNDJhNDJhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jCkBAIC0xNCw2ICsxNCw3IEBACiAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaWYgSEFWRV9JT19ICiAjaW5jbHVkZSA8aW8uaD4KICNlbmRpZgpAQCAtMzEsOSArMzIsNiBAQAogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtNTMsNiArNTEsMTAgQEAKICNpbmNsdWRlICJhZ2VudHgvcHJvdG9jb2wuaCIKICNpbmNsdWRlICJhZ2VudHgvbWFzdGVyX2FkbWluLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh1bml4X3NvY2tldF9wYXRocykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZyZWVfYWdlbnRfc25tcF9zZXNzaW9uX2J5X3Nlc3Npb24pCisKIHZvaWQKIHJlYWxfaW5pdF9tYXN0ZXIodm9pZCkKIHsKQEAgLTYwLDEzICs2Miw2IEBACiAgICAgY2hhciAqYWdlbnR4X3NvY2tldHM7CiAgICAgY2hhciAqY3AxOwogCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KLSAgICBpbnQgYWdlbnR4X2Rpcl9wZXJtOwotICAgIGludCBhZ2VudHhfc29ja19wZXJtOwotICAgIGludCBhZ2VudHhfc29ja191c2VyOwotICAgIGludCBhZ2VudHhfc29ja19ncm91cDsKLSNlbmRpZgotCiAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19BR0VOVF9ST0xFKSAhPSBNQVNURVJfQUdFTlQpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTgsNiArOTMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9BR0VOVFhfVElNRU9VVCk7CiAgICAgc2Vzcy5yZXRyaWVzID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1JFVFJJRVMpOworCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KKyAgICB7CisJaW50IGFnZW50eF9kaXJfcGVybSA9CisJICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9ESVJfUEVSTSk7CisJaWYgKGFnZW50eF9kaXJfcGVybSA9PSAwKQorCSAgICBhZ2VudHhfZGlyX3Blcm0gPSBORVRTTk1QX0FHRU5UX0RJUkVDVE9SWV9NT0RFOworCW5ldHNubXBfdW5peF9jcmVhdGVfcGF0aF93aXRoX21vZGUoYWdlbnR4X2Rpcl9wZXJtKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGNwMSA9IGFnZW50eF9zb2NrZXRzOwogICAgIHdoaWxlIChjcDEpIHsKICAgICAgICAgbmV0c25tcF90cmFuc3BvcnQgKnQ7CkBAIC0xMTEsNDQgKzExOCwxNSBAQAogICAgICAgICBpZiAoY3AxICE9IE5VTEwpIHsKICAgICAgICAgICAgICpjcDErKyA9ICdcMCc7CiAJfQotICAgIAotICAgICAgICBpZiAoc2Vzcy5wZWVybmFtZVswXSA9PSAnLycpIHsKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTgotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqICBJZiB0aGlzIGlzIGEgVW5peCBwYXRobmFtZSwKLSAgICAgICAgICAgICAqICB0cnkgYW5kIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZpcnN0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhZ2VudHhfZGlyX3Blcm0gPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9YX0RJUl9QRVJNKTsKLSAgICAgICAgICAgIGlmIChhZ2VudHhfZGlyX3Blcm0gPT0gMCkKLSAgICAgICAgICAgICAgICBhZ2VudHhfZGlyX3Blcm0gPSBORVRTTk1QX0FHRU5UX0RJUkVDVE9SWV9NT0RFOwotICAgICAgICAgICAgaWYgKG1rZGlyaGllcihzZXNzLnBlZXJuYW1lLCAobW9kZV90KWFnZW50eF9kaXJfcGVybSwgMSkpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBhZ2VudFggc29ja2V0OiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzLnBlZXJuYW1lKTsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBuZXRzbm1wX3Nlc3NfbG9nX2Vycm9yKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5peCBkb21haW4gc3VwcG9ydCBub3QgYXZhaWxhYmxlXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzcyk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIAorCiAgICAgICAgIC8qCi0gICAgICAgICAqICBPdGhlcndpc2UsIGxldCAnc25tcF9vcGVuJyBpbnRlcnByZXQgdGhlIHN0cmluZy4KKyAgICAgICAgICogIExldCAnc25tcF9vcGVuJyBpbnRlcnByZXQgdGhlIGRlc2NyaXB0b3IuCiAgICAgICAgICAqLwogICAgICAgICBzZXNzLmxvY2FsX3BvcnQgPSBBR0VOVFhfUE9SVDsgICAgICAvKiBJbmRpY2F0ZSBzZXJ2ZXIgJiBzZXQgZGVmYXVsdCBwb3J0ICovCiAgICAgICAgIHNlc3MucmVtb3RlX3BvcnQgPSAwOwogICAgICAgICBzZXNzLmNhbGxiYWNrID0gaGFuZGxlX21hc3Rlcl9hZ2VudHhfcGFja2V0OwogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIHQgPSBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX3NlcnZlcigiYWdlbnR4Iiwgc2Vzcy5wZWVybmFtZSk7Ci0gICAgICAgIGlmICh0ID09IE5VTEwgJiYgZXJybm8gPT0gRUFERFJJTlVTRSkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIENvdWxkIGJlIGEgbGVmdC1vdmVyIHNvY2tldCAobm93IGRlbGV0ZWQpCi0gICAgICAgICAgICAgKiBUcnkgYWdhaW4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdCA9IG5ldHNubXBfdHJhbnNwb3J0X29wZW5fc2VydmVyKCJhZ2VudHgiLCBzZXNzLnBlZXJuYW1lKTsKLSAgICAgICAgfQogICAgICAgICBpZiAodCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogZGlhZ25vc2Ugc25tcF9vcGVuIGVycm9ycyB3aXRoIHRoZSBpbnB1dCBuZXRzbm1wX3Nlc3Npb24KQEAgLTE3MSwyMyArMTQ5LDI0IEBACiAgICAgICAgIH0gZWxzZSB7CiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KICAgICAgICAgICAgIGlmICh0LT5kb21haW4gPT0gbmV0c25tcF9Vbml4RG9tYWluICYmIHQtPmxvY2FsICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjaGFyIG5hbWVbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgKyAxXTsKLSAgICAgICAgICAgICAgICBtZW1jcHkobmFtZSwgdC0+bG9jYWwsIHQtPmxvY2FsX2xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgbmFtZVt0LT5sb2NhbF9sZW5ndGhdID0gJ1wwJzsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIEFwcGx5IGFueSBzZXR0aW5ncyB0byB0aGUgb3duZXJzaGlwL3Blcm1pc3Npb25zIG9mIHRoZQogICAgICAgICAgICAgICAgICAqIEFnZW50WCBzb2NrZXQKICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBhZ2VudHhfc29ja19wZXJtID0KKyAgICAgICAgICAgICAgICBpbnQgYWdlbnR4X3NvY2tfcGVybSA9CiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tfUEVSTSk7Ci0gICAgICAgICAgICAgICAgYWdlbnR4X3NvY2tfdXNlciA9CisgICAgICAgICAgICAgICAgaW50IGFnZW50eF9zb2NrX3VzZXIgPQogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX1VTRVIpOwotICAgICAgICAgICAgICAgIGFnZW50eF9zb2NrX2dyb3VwID0KKyAgICAgICAgICAgICAgICBpbnQgYWdlbnR4X3NvY2tfZ3JvdXAgPQogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX0dST1VQKTsKIAorICAgICAgICAgICAgICAgIGNoYXIgbmFtZVtzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSArIDFdOworICAgICAgICAgICAgICAgIG1lbWNweShuYW1lLCB0LT5sb2NhbCwgdC0+bG9jYWxfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBuYW1lW3QtPmxvY2FsX2xlbmd0aF0gPSAnXDAnOworCiAgICAgICAgICAgICAgICAgaWYgKGFnZW50eF9zb2NrX3Blcm0gIT0gMCkKICAgICAgICAgICAgICAgICAgICAgY2htb2QobmFtZSwgYWdlbnR4X3NvY2tfcGVybSk7CiAKQEAgLTIxMyw2ICsxOTIsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCisgICAgbmV0c25tcF91bml4X2RvbnRfY3JlYXRlX3BhdGgoKTsKKyNlbmRpZgorCiAgICAgU05NUF9GUkVFKGFnZW50eF9zb2NrZXRzKTsKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJpbml0aWFsaXppbmcuLi4gICBET05FXG4iKSk7CiB9CkBAIC0yMzQsNyArMjE3LDcgQEAKIAogICAgIGNhY2hlID0gbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlKGNhY2hlKTsKICAgICBpZiAoIWNhY2hlKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInJlc3BvbnNlIHRvbyBsYXRlIG9uIHNlc3Npb24gJTA4cFxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAicmVzcG9uc2UgdG9vIGxhdGUgb24gc2Vzc2lvbiAlOHBcbiIsCiAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24pKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjQzLDggKzIyNiw4IEBACiAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKICAgICBjYXNlIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfVElNRURfT1VUOnsKICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICpzID0gc25tcF9zZXNzX3BvaW50ZXIoc2Vzc2lvbik7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJ0aW1lb3V0IG9uIHNlc3Npb24gJTA4cFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInRpbWVvdXQgb24gc2Vzc2lvbiAlOHAgcmVxPTB4JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLCAodW5zaWduZWQpcmVxaWQpKTsKIAogICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUVTVF9JU19OT1RfREVMRUdBVEVEKTsKQEAgLTI4MSwxMCArMjY0LDEwIEBACiAgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX0RJU0NPTk5FQ1Q6CiAgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX1NFTkRfRkFJTEVEOgogICAgICAgICBpZiAob3BlcmF0aW9uID09IE5FVFNOTVBfQ0FMTEJBQ0tfT1BfRElTQ09OTkVDVCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiZGlzY29ubmVjdCBvbiBzZXNzaW9uICUwOHBcbiIsCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJkaXNjb25uZWN0IG9uIHNlc3Npb24gJThwXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbikpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAic2VuZCBmYWlsZWQgb24gc2Vzc2lvbiAlMDhwXG4iLAorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAic2VuZCBmYWlsZWQgb24gc2Vzc2lvbiAlOHBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uKSk7CiAgICAgICAgIH0KICAgICAgICAgY2xvc2VfYWdlbnR4X3Nlc3Npb24oc2Vzc2lvbiwgLTEpOwpAQCAtMzA4LDkgKzI5MSwxMCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJnb3QgcmVzcG9uc2UgZXJyc3RhdD0lZCwgKHJlcT0weCV4LHRyYW5zPSIKKyAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJnb3QgcmVzcG9uc2UgZXJyc3RhdD0lbGQsIChyZXE9MHgleCx0cmFucz0iCiAgICAgICAgICAgICAgICAgIjB4JXgsc2Vzcz0weCV4KVxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPmVycnN0YXQscGR1LT5yZXFpZCxwZHUtPnRyYW5zaWQsIHBkdS0+c2Vzc2lkKSk7CisgICAgICAgICAgICAgICAgcGR1LT5lcnJzdGF0LCAodW5zaWduZWQpcGR1LT5yZXFpZCwgKHVuc2lnbmVkKXBkdS0+dHJhbnNpZCwKKwkJKHVuc2lnbmVkKXBkdS0+c2Vzc2lkKSk7CiAKICAgICBpZiAocGR1LT5lcnJzdGF0ICE9IEFHRU5UWF9FUlJfTk9FUlJPUikgewogICAgICAgICAvKiBbUkZDIDI0NzEgLSA3LjIuNS4yLl0KQEAgLTM4Nyw5ICszNzEsOSBAQAogICAgICAgICAgICAgREVCVUdNU0dPSUQoKCJhZ2VudHgvbWFzdGVyIiwgdmFyLT5uYW1lLCB2YXItPm5hbWVfbGVuZ3RoKSk7CiAgICAgICAgICAgICBERUJVR01TRygoImFnZW50eC9tYXN0ZXIiLCAiXG4iKSk7CiAgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX0FHRU5UX1ZFUkJPU0UpKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiICAgID4+ICIpKTsKLSAgICAgICAgICAgICAgICBERUJVR01TR1ZBUigoInNubXBfYWdlbnQiLCB2YXIpKTsKLSAgICAgICAgICAgICAgICBERUJVR01TRygoInNubXBfYWdlbnQiLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiICAgID4+ICIpKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1ZBUigoImFnZW50eC9tYXN0ZXIiLCB2YXIpKTsKKyAgICAgICAgICAgICAgICBERUJVR01TRygoImFnZW50eC9tYXN0ZXIiLCAiXG4iKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qCkBAIC00ODEsNiArNDY1LDcgQEAKICAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKEFHRU5UWF9NU0dfR0VUTkVYVCk7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShBR0VOVFhfTVNHX1RFU1RTRVQpOwogICAgICAgICBicmVhazsKQEAgLTUwNCw2ICs0ODksNyBAQAogICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKICAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKEFHRU5UWF9NU0dfQ0xFQU5VUFNFVCk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLApAQCAtNjE1LDEyICs2MDEsMTEgQEAKICAgICAvKgogICAgICAqIHNlbmQgdGhlIHJlcXVlc3RzIG91dC4KICAgICAgKi8KLSAgICBERUJVR01TR1RMKCgiYWdlbnR4IiwgInNlbmRpbmcgcGR1IChyZXE9MHgleCx0cmFucz0weCV4LHNlc3M9MHgleClcbiIsCi0gICAgICAgICAgICAgICAgcGR1LT5yZXFpZCxwZHUtPnRyYW5zaWQsIHBkdS0+c2Vzc2lkKSk7CisgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAic2VuZGluZyBwZHUgKHJlcT0weCV4LHRyYW5zPTB4JXgsc2Vzcz0weCV4KVxuIiwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQpcGR1LT5yZXFpZCwgKHVuc2lnbmVkKXBkdS0+dHJhbnNpZCwgKHVuc2lnbmVkKXBkdS0+c2Vzc2lkKSk7CiAgICAgcmVzdWx0ID0gc25tcF9hc3luY19zZW5kKGF4X3Nlc3Npb24sIHBkdSwgYWdlbnR4X2dvdF9yZXNwb25zZSwgY2JfZGF0YSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IDAgKSB7Ci0gICAgICAgIHNubXBfZnJlZV9wZHUoIHBkdSApOworICAgIGlmIChyZXN1bHQgPT0gMCkgeworICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmggYi9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmgKaW5kZXggYjZhN2Y2Yi4uYTVkYmZhZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5oCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuaApAQCAtNyw3ICs3LDYgQEAKIGNvbmZpZ19yZXF1aXJlKGFnZW50eC9jbGllbnQpCiBjb25maWdfcmVxdWlyZShhZ2VudHgvbWFzdGVyX2FkbWluKQogY29uZmlnX3JlcXVpcmUoYWdlbnR4L2FnZW50eF9jb25maWcpCi1jb25maWdfcmVxdWlyZShtaWJJSS9zeXNPUlRhYmxlKQogCiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X21hc3Rlcih2b2lkKTsKICAgICAgdm9pZCAgICAgICAgICAgIHJlYWxfaW5pdF9tYXN0ZXIodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMKaW5kZXggMTJkZGI1ZC4uNGVhZWFiNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYwpAQCAtMiw2ICsyLDcgQEAKICAqICBBZ2VudFggQWRtaW5pc3RyYXRpdmUgcmVxdWVzdCBoYW5kbGluZwogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmZGVmIEhBVkVfU1RSSU5HX0gKQEAgLTEzLDExICsxNCw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTI5LDkgKzI2LDYgQEAKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKQEAgLTQ1LDEyICszOSwxNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2luZGV4Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgotI2luY2x1ZGUgIm1pYklJL3N5c09SVGFibGUuaCIKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmg+CiAjaW5jbHVkZSAibWFzdGVyLmgiCiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7Ci0KLQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodW5yZWdpc3Rlcl9taWJfdGFibGVfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodHJhcF92YXJzX3dpdGhfY29udGV4dCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShhbGxvY2F0ZV9nbG9iYWxjYWNoZWlkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVtb3ZlX2luZGV4KQogCiBuZXRzbm1wX3Nlc3Npb24gKgogZmluZF9hZ2VudHhfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBpbnQgc2Vzc2lkKQpAQCAtNjgsOSArNjQsOCBAQAogb3Blbl9hZ2VudHhfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1KQogewogICAgIG5ldHNubXBfc2Vzc2lvbiAqc3A7Ci0gICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKIAotICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgIm9wZW4gJTA4cFxuIiwgc2Vzc2lvbikpOworICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgIm9wZW4gJThwXG4iLCBzZXNzaW9uKSk7CiAgICAgc3AgPSAobmV0c25tcF9zZXNzaW9uICopIG1hbGxvYyhzaXplb2YobmV0c25tcF9zZXNzaW9uKSk7CiAgICAgaWYgKHNwID09IE5VTEwpIHsKICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gQUdFTlRYX0VSUl9PUEVOX0ZBSUxFRDsKQEAgLTEwOCw4ICsxMDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuZ3RoKTsKICAgICBzcC0+c2VjdXJpdHlBdXRoUHJvdG9MZW4gPSBwZHUtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGg7CiAgICAgc3AtPnNlY3VyaXR5TmFtZSA9IHN0cmR1cCgoY2hhciAqKSBwZHUtPnZhcmlhYmxlcy0+dmFsLnN0cmluZyk7Ci0gICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotICAgIHNwLT5lbmdpbmVUaW1lID0gY2FsY3VsYXRlX3RpbWVfZGlmZigmbm93LCAmc3RhcnR0aW1lKTsKKyAgICBzcC0+ZW5naW5lVGltZSA9ICh1aW50MzJfdCkoKG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKSArIDUwKSAvIDEwMCkgJiAweDdmZmZmZmZmTDsKIAogICAgIHNwLT5zdWJzZXNzaW9uID0gc2Vzc2lvbjsgICAvKiBsaW5rIGJhY2sgdG8gaGVhZCAqLwogICAgIHNwLT5mbGFncyB8PSBTTk1QX0ZMQUdTX1NVQlNFU1NJT047CkBAIC0xMTcsNyArMTExLDcgQEAKICAgICBzcC0+ZmxhZ3MgfD0gKHBkdS0+ZmxhZ3MgJiBBR0VOVFhfTVNHX0ZMQUdfTkVUV09SS19CWVRFX09SREVSKTsKICAgICBzcC0+bmV4dCA9IHNlc3Npb24tPnN1YnNlc3Npb247CiAgICAgc2Vzc2lvbi0+c3Vic2Vzc2lvbiA9IHNwOwotICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgIm9wZW5lZCAlMDhwID0gJWQgd2l0aCBmbGFncyA9ICUwMnhcbiIsCisgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAib3BlbmVkICU4cCA9ICVsZCB3aXRoIGZsYWdzID0gJTAybHhcbiIsCiAgICAgICAgICAgICAgICAgc3AsIHNwLT5zZXNzaWQsIHNwLT5mbGFncyAmIEFHRU5UWF9NU0dfRkxBR1NfTUFTSykpOwogCiAgICAgcmV0dXJuIHNwLT5zZXNzaWQ7CkBAIC0xMzEsNyArMTI1LDcgQEAKICAgICBpZiAoIXNlc3Npb24pCiAgICAgICAgIHJldHVybiBBR0VOVFhfRVJSX05PVF9PUEVOOwogCi0gICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiY2xvc2UgJTA4cCwgJWRcbiIsIHNlc3Npb24sIHNlc3NpZCkpOworICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgImNsb3NlICU4cCwgJWRcbiIsIHNlc3Npb24sIHNlc3NpZCkpOwogICAgIGlmIChzZXNzaWQgPT0gLTEpIHsKICAgICAgICAgLyoKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgbG9ja2luZyB1cCB0aGUgYWdlbnQgd2hlbgpAQCAtMTQ5LDkgKzE0Myw3IEBACiAgICAgICAgICAgICAgICAgCiAgICAgICAgIHVucmVnaXN0ZXJfbWlic19ieV9zZXNzaW9uKHNlc3Npb24pOwogICAgICAgICB1bnJlZ2lzdGVyX2luZGV4X2J5X3Nlc3Npb24oc2Vzc2lvbik7Ci0gICAgICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1JfU0VTUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopc2Vzc2lvbik7CisgICAgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKHNlc3Npb24pOwogCVNOTVBfRlJFRShzZXNzaW9uLT5teXZvaWQpOwogICAgICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT0VSUk9SOwogICAgIH0KQEAgLTE2Myw5ICsxNTUsNyBAQAogICAgICAgICBpZiAoc3AtPnNlc3NpZCA9PSBzZXNzaWQpIHsKICAgICAgICAgICAgIHVucmVnaXN0ZXJfbWlic19ieV9zZXNzaW9uKHNwKTsKICAgICAgICAgICAgIHVucmVnaXN0ZXJfaW5kZXhfYnlfc2Vzc2lvbihzcCk7Ci0gICAgICAgICAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUl9TRVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopc3ApOworICAgICAgICAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX2J5X3Nlc3Npb24oc3ApOwogCiAgICAgICAgICAgICAqcHJldk5leHQgPSBzcC0+bmV4dDsKIApAQCAtMTc4LDcgKzE2OCw3IEBACiAgICAgICAgICAgICBmcmVlKHNwKTsKICAgICAgICAgICAgIHNwID0gTlVMTDsKIAotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiY2xvc2VkICUwOHAsICVkIG9rYXlcbiIsCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJjbG9zZWQgJThwLCAlZCBva2F5XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbiwgc2Vzc2lkKSk7CiAgICAgICAgICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT0VSUk9SOwogICAgICAgICB9CkBAIC0yMzMsNyArMjIzLDcgQEAKICAgICByZWctPmhhbmRsZXItPm15dm9pZCA9IHNlc3Npb247CiAgICAgcmVnLT5nbG9iYWxfY2FjaGVpZCA9IGNhY2hlaWQ7CiAgICAgaWYgKE5VTEwgIT0gcGR1LT5jb21tdW5pdHkpCi0gICAgICAgIHJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAocGR1LT5jb21tdW5pdHkpOworICAgICAgICByZWctPmNvbnRleHROYW1lID0gc3RyZHVwKChjaGFyICopcGR1LT5jb21tdW5pdHkpOwogCiAgICAgLyoKICAgICAgKiByZWdpc3RlciBtaWIuIE5vdGUgdGhhdCBmb3IgZmFpbHVyZSBjYXNlcywgdGhlIHJlZ2lzdHJhdGlvbiBpbmZvCkBAIC0zODAsMjAgKzM3MCwxNyBAQAogYWRkX2FnZW50X2NhcHNfbGlzdChuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1KQogewogICAgIG5ldHNubXBfc2Vzc2lvbiAqc3A7Ci0gICAgc3RydWN0IHN5c09SVGFibGUgcGFybXM7CisgICAgY2hhciogZGVzY3JpcHRpb247CiAKICAgICBzcCA9IGZpbmRfYWdlbnR4X3Nlc3Npb24oc2Vzc2lvbiwgcGR1LT5zZXNzaWQpOwogICAgIGlmIChzcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT1RfT1BFTjsKIAotICAgIHBhcm1zLk9SX29pZCA9IHBkdS0+dmFyaWFibGVzLT5uYW1lOwotICAgIHBhcm1zLk9SX29pZGxlbiA9IHBkdS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aDsKLSAgICBwYXJtcy5PUl9kZXNjciAgPSBuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbChwZHUtPnZhcmlhYmxlcy0+dmFsLnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+dmFsX2xlbik7Ci0gICAgcGFybXMuT1Jfc2VzcyA9IHNwOwotICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9SRUdfU1lTT1IsICh2b2lkKikmcGFybXMpOwotICAgIGZyZWUocGFybXMuT1JfZGVzY3IpOworICAgIGRlc2NyaXB0aW9uID0gbmV0c25tcF9zdHJkdXBfYW5kX251bGwocGR1LT52YXJpYWJsZXMtPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+dmFsX2xlbik7CisgICAgcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKHBkdS0+dmFyaWFibGVzLT5uYW1lLCBwZHUtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBzcCk7CisgICAgZnJlZShkZXNjcmlwdGlvbik7CiAgICAgcmV0dXJuIEFHRU5UWF9FUlJfTk9FUlJPUjsKIH0KIApAQCAtNDAxLDMyICszODgsMjggQEAKIHJlbW92ZV9hZ2VudF9jYXBzX2xpc3QobmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgbmV0c25tcF9wZHUgKnBkdSkKIHsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNwOwotICAgIHN0cnVjdCBzeXNPUlRhYmxlIHBhcm1zOworICAgIGludCByYzsKIAogICAgIHNwID0gZmluZF9hZ2VudHhfc2Vzc2lvbihzZXNzaW9uLCBwZHUtPnNlc3NpZCk7CiAgICAgaWYgKHNwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBBR0VOVFhfRVJSX05PVF9PUEVOOwogCi0gICAgcGFybXMuT1Jfb2lkID0gcGR1LT52YXJpYWJsZXMtPm5hbWU7Ci0gICAgcGFybXMuT1Jfb2lkbGVuID0gcGR1LT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoOwotICAgIHBhcm1zLk9SX3Nlc3MgPSBzcDsKLSAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1IsICh2b2lkKikmcGFybXMpOwotICAgIC8qCi0gICAgICogbm8gZWFzeSB3YXkgdG8gZ2V0IGFuIGVycm9yIGNvZGUuLi4KLSAgICAgKiBpZiAocmMgPCAwKQotICAgICAqICAgcmV0dXJuIEFHRU5UWF9FUlJfVU5LTk9XTl9BR0VOVENBUFM7Ci0gICAgICovCisgICAgcmMgPSB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhwZHUtPnZhcmlhYmxlcy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCwgc3ApOworCisgICAgaWYgKHJjIDwgMCkKKyAgICAgIHJldHVybiBBR0VOVFhfRVJSX1VOS05PV05fQUdFTlRDQVBTOworCiAgICAgcmV0dXJuIEFHRU5UWF9FUlJfTk9FUlJPUjsKIH0KIAogaW50CiBhZ2VudHhfbm90aWZ5KG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIG5ldHNubXBfcGR1ICpwZHUpCiB7Ci0gICAgbmV0c25tcF9zZXNzaW9uICpzcDsKKyAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgKnNwOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyOwotICAgIGV4dGVybiBvaWQgICAgICBzeXN1cHRpbWVfb2lkW10sIHNubXB0cmFwX29pZFtdOwotICAgIGV4dGVybiBzaXplX3QgICBzeXN1cHRpbWVfb2lkX2xlbiwgc25tcHRyYXBfb2lkX2xlbjsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgIHN5c3VwdGltZV9vaWRbXSwgc25tcHRyYXBfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IHNpemVfdCAgICBzeXN1cHRpbWVfb2lkX2xlbiwgc25tcHRyYXBfb2lkX2xlbjsKIAogICAgIHNwID0gZmluZF9hZ2VudHhfc2Vzc2lvbihzZXNzaW9uLCBwZHUtPnNlc3NpZCk7CiAgICAgaWYgKHNwID09IE5VTEwpCkBAIC00NTQsNyArNDM3LDE4IEBACiAgICAgICogICAgIGFzIHRoaXMgaXMgdmFsaWQgQWdlbnRYIHN5bnRheC4KICAgICAgKi8KIAotICAgIHNlbmRfdHJhcF92YXJzKC0xLCAtMSwgcGR1LT52YXJpYWJsZXMpOworCS8qIElmIGEgY29udGV4dCBuYW1lIHdhcyBzcGVjaWZpZWQsIHNlbmQgdGhlIHRyYXAgdXNpbmcgdGhhdCBjb250ZXh0LgorCSAqIE90aGVyd2lzZSwgc2VuZCB0aGUgdHJhcCB3aXRob3V0IHRoZSBjb250ZXh0IHVzaW5nIHRoZSBvbGQgbWV0aG9kICovCisJaWYgKHBkdS0+Y29udGV4dE5hbWUgIT0gTlVMTCkKKwl7CisgICAgICAgIHNlbmRfdHJhcF92YXJzX3dpdGhfY29udGV4dCgtMSwgLTEsIHBkdS0+dmFyaWFibGVzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5jb250ZXh0TmFtZSk7CisJfQorCWVsc2UKKwl7CisgICAgICAgIHNlbmRfdHJhcF92YXJzKC0xLCAtMSwgcGR1LT52YXJpYWJsZXMpOworCX0KKwogICAgIHJldHVybiBBR0VOVFhfRVJSX05PRVJST1I7CiB9CiAKQEAgLTQ3NywxNiArNDcxLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcWlkLCBuZXRzbm1wX3BkdSAqcGR1LCB2b2lkICptYWdpYykKIHsKICAgICBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmFzcDsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwogCiAgICAgaWYgKG9wZXJhdGlvbiA9PSBORVRTTk1QX0NBTExCQUNLX09QX0RJU0NPTk5FQ1QpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLAotICAgICAgICAgICAgICAgICAgICAidHJhbnNwb3J0IGRpc2Nvbm5lY3Qgb24gc2Vzc2lvbiAlMDhwXG4iLCBzZXNzaW9uKSk7CisgICAgICAgICAgICAgICAgICAgICJ0cmFuc3BvcnQgZGlzY29ubmVjdCBvbiBzZXNzaW9uICU4cFxuIiwgc2Vzc2lvbikpOwogICAgICAgICAvKgogICAgICAgICAgKiBTaHV0IHRoaXMgc2Vzc2lvbiBkb3duIGdyYWNlZnVsbHkuICAKICAgICAgICAgICovCiAgICAgICAgIGNsb3NlX2FnZW50eF9zZXNzaW9uKHNlc3Npb24sIC0xKTsKICAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gTkVUU05NUF9DQUxMQkFDS19PUF9DT05ORUNUKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zcG9ydCBjb25uZWN0IG9uIHNlc3Npb24gJThwXG4iLCBzZXNzaW9uKSk7CisgICAgICAgIHJldHVybiAxOwogICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uICE9IE5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRSkgewogICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJ1bmV4cGVjdGVkIGNhbGxiYWNrIG9wICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24pKTsKQEAgLTUwMyw4ICs1MDAsOSBAQAogICAgICAgICBhc3AgPSBpbml0X2FnZW50X3NubXBfc2Vzc2lvbihzZXNzaW9uLCBwZHUpOwogICAgIH0KIAotICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgImhhbmRsZSBwZHUgKHJlcT0weCV4LHRyYW5zPTB4JXgsc2Vzcz0weCV4KVxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPnJlcWlkLHBkdS0+dHJhbnNpZCwgcGR1LT5zZXNzaWQpKTsKKyAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJoYW5kbGUgcGR1IChyZXE9MHglbHgsdHJhbnM9MHglbHgsc2Vzcz0weCVseClcbiIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpcGR1LT5yZXFpZCwgKHVuc2lnbmVkIGxvbmcpcGR1LT50cmFuc2lkLAorCQkodW5zaWduZWQgbG9uZylwZHUtPnNlc3NpZCkpOwogICAgIAogICAgIHN3aXRjaCAocGR1LT5jb21tYW5kKSB7CiAgICAgY2FzZSBBR0VOVFhfTVNHX09QRU46CkBAIC01NzUsMTMgKzU3MywxMyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0gICAgYXNwLT5wZHUtPnRpbWUgPSBjYWxjdWxhdGVfdGltZV9kaWZmKCZub3csICZzdGFydHRpbWUpOworICAgIGFzcC0+cGR1LT50aW1lID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CiAgICAgYXNwLT5wZHUtPmNvbW1hbmQgPSBBR0VOVFhfTVNHX1JFU1BPTlNFOwogICAgIGFzcC0+cGR1LT5lcnJzdGF0ID0gYXNwLT5zdGF0dXM7Ci0gICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAic2VuZCByZXNwb25zZSwgc3RhdCAlZCAocmVxPTB4JXgsdHJhbnM9IgotICAgICAgICAgICAgICAgICIweCV4LHNlc3M9MHgleClcbiIsCi0gICAgICAgICAgICAgICAgYXNwLT5zdGF0dXMsIHBkdS0+cmVxaWQscGR1LT50cmFuc2lkLCBwZHUtPnNlc3NpZCkpOworICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInNlbmQgcmVzcG9uc2UsIHN0YXQgJWQgKHJlcT0weCVseCx0cmFucz0iCisgICAgICAgICAgICAgICAgIjB4JWx4LHNlc3M9MHglbHgpXG4iLAorICAgICAgICAgICAgICAgIGFzcC0+c3RhdHVzLCAodW5zaWduZWQgbG9uZylwZHUtPnJlcWlkLAorCQkodW5zaWduZWQgbG9uZylwZHUtPnRyYW5zaWQsICh1bnNpZ25lZCBsb25nKXBkdS0+c2Vzc2lkKSk7CiAgICAgaWYgKCFzbm1wX3NlbmQoYXNwLT5zZXNzaW9uLCBhc3AtPnBkdSkpIHsKICAgICAgICAgY2hhciAgICAgICAgICAgKmViID0gTlVMTDsKICAgICAgICAgaW50ICAgICAgICAgICAgIHBlLCBwc2U7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jCmluZGV4IGE0ODI3NzAuLjA4NDVjZjEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jCkBAIC0yNiwxMSArMjYsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00NiwxMCArNDIsNiBAQAogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgImFnZW50eC9wcm90b2NvbC5oIgpAQCAtMTM1LDcgKzEyNyw3IEBACiAjZW5kaWYKICAgICB9CiAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKmJ1ZiArIGlsZW4pLCA0KTsKLSAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JWx1ICgweCUuMmxYKVxuIiwgaXZhbHVlLAorICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIEludGVnZXI6XHQldSAoMHglLjJYKVxuIiwgaXZhbHVlLAogICAgICAgICAgICAgICBpdmFsdWUpKTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTE2OCw3ICsxNjAsNyBAQAogI2VuZGlmCiAgICAgfQogICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgb3JpZ19idWZwLCA0KTsKLSAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMlgpXG4iLCBvcmlnX3ZhbCwKKyAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JXUgKDB4JS4yWClcbiIsIG9yaWdfdmFsLAogICAgICAgICAgICAgICBvcmlnX3ZhbCkpOwogfQogCkBAIC0yNjQsOCArMjU2LDggQEAKIAogICAgIERFQlVHRFVNUEhFQURFUigic2VuZCIsICJPSUQgSGVhZGVyIik7CiAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKmJ1ZiArIGlsZW4pLCA0KTsKLSAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICAjIHN1YmlkczpcdCVkICgweCUuMlgpXG4iLCBuYW1lX2xlbiwKLSAgICAgICAgICAgICAgbmFtZV9sZW4pKTsKKyAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICAjIHN1YmlkczpcdCVkICgweCUuMlgpXG4iLCAoaW50KW5hbWVfbGVuLAorICAgICAgICAgICAgICAodW5zaWduZWQgaW50KW5hbWVfbGVuKSk7CiAgICAgREVCVUdQUklOVElOREVOVCgiZHVtcHZfc2VuZCIpOwogICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIHByZWZpeDpcdCVkICgweCUuMlgpXG4iLCBwcmVmaXgsIHByZWZpeCkpOwogICAgIERFQlVHUFJJTlRJTkRFTlQoImR1bXB2X3NlbmQiKTsKQEAgLTQ0OSw2ICs0NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT5uYW1lLCB2cC0+bmFtZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19vcmRlcikpIHsKICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CisgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgREVCVUdJTkRFTlRMRVNTKCk7CkBAIC00ODgsNyArNDgxLDcgQEAKICAgICBjYXNlIEFTTl9PUEFRVUVfRE9VQkxFOgogICAgICAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCAiQnVpbGQgT3BhcXVlIERvdWJsZSIpOwogICAgICAgICBERUJVR1BSSU5USU5ERU5UKCJkdW1wdl9zZW5kIik7Ci0gICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIERvdWJsZTpcdCVsZlxuIiwgKih2cC0+dmFsLmRvdWJsZVZhbCkpKTsKKyAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgRG91YmxlOlx0JWZcbiIsICoodnAtPnZhbC5kb3VibGVWYWwpKSk7CiAgICAgICAgIGlmICghYWdlbnR4X3JlYWxsb2NfYnVpbGRfZG91YmxlCiAgICAgICAgICAgICAoYnVmLCBidWZfbGVuLCBvdXRfbGVuLCBhbGxvd19yZWFsbG9jLCAqKHZwLT52YWwuZG91YmxlVmFsKSwKICAgICAgICAgICAgICBuZXR3b3JrX29yZGVyKSkgewpAQCAtNTQ4LDYgKzU0MSw3IEBACiAgICAgICAgICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERFQlVHRFVNUEhFQURFUigic2VuZCIsICJCdWlsZCBDb3VudGVyNjQgKGxvdywgaGlnaCkiKTsKICAgICAgICAgICAgIGlmICghYWdlbnR4X3JlYWxsb2NfYnVpbGRfaW50CkBAIC01NjIsNiArNTU2LDcgQEAKICAgICAgICAgICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC02OTksNiArNjk0LDE3IEBACiAgICAgICAgIHBkdS0+ZmxhZ3MgJj0gfihBR0VOVFhfTVNHX0ZMQUdfTk9OX0RFRkFVTFRfQ09OVEVYVCk7CiAgICAgfQogCisJLyogV2UndmUgcmVjZWl2ZWQgYSBQRFUgdGhhdCBoYXMgc3BlY2lmaWVkIGEgY29udGV4dC4gIE5ldFNOTVAgaG93ZXZlciwgdXNlcworCSAqIHRoZSBwZHUtPmNvbW11bml0eSBmaWVsZCB0byBzcGVjaWZ5IGNvbnRleHQgd2hlbiB1c2luZyB0aGUgQWdlbnRYCisJICogcHJvdG9jb2wuICBUaGVyZWZvcmUgd2UgbmVlZCB0byBjb3B5IHRoZSBjb250ZXh0IG5hbWUgYW5kIGxlbmd0aCBpbnRvIHRoZQorCSAqIHBkdS0+Y29tbXVuaXR5IGFuZCBwZHUtPmNvbW11bml0eV9sZW4gZmllbGRzLCByZXNwZWN0aXZlbHkuICovCisJaWYgKHBkdS0+Y29udGV4dE5hbWUgIT0gTlVMTCAmJiBwZHUtPmNvbW11bml0eSA9PSBOVUxMKQorCXsJCisJCXBkdS0+Y29tbXVuaXR5ICAgICA9ICh1X2NoYXIgKikgc3RyZHVwKHBkdS0+Y29udGV4dE5hbWUpOworCQlwZHUtPmNvbW11bml0eV9sZW4gPSBwZHUtPmNvbnRleHROYW1lTGVuOworCQlwZHUtPmZsYWdzIHw9IEFHRU5UWF9NU0dfRkxBR19OT05fREVGQVVMVF9DT05URVhUOworCX0KKwogICAgIC8qCiAgICAgICogQnVpbGQgdGhlIGhlYWRlciAoYW5kIGNvbnRleHQgaWYgYXBwcm9wcmlhdGUpLiAgCiAgICAgICovCkBAIC05MDIsNyArOTA4LDcgQEAKICAgICAgICAgfQogICAgICAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCAiUmVzcG9uc2UiKTsKICAgICAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKmJ1ZiArICpvdXRfbGVuIC0gNCksIDQpOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBzeXNVcFRpbWU6XHQlZFxuIiwgcGR1LT50aW1lKSk7CisgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIHN5c1VwVGltZTpcdCVsdVxuIiwgcGR1LT50aW1lKSk7CiAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogCiAgICAgICAgIGlmICghYWdlbnR4X3JlYWxsb2NfYnVpbGRfc2hvcnQKQEAgLTkxOCw5ICs5MjQsOSBAQAogICAgICAgICB9CiAgICAgICAgIERFQlVHRFVNUEhFQURFUigic2VuZCIsICJSZXNwb25zZSBlcnJvcnMiKTsKICAgICAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKmJ1ZiArICpvdXRfbGVuIC0gNCksIDQpOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBlcnJzdGF0Olx0JWRcbiIsIHBkdS0+ZXJyc3RhdCkpOworICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBlcnJzdGF0Olx0JWxkXG4iLCBwZHUtPmVycnN0YXQpKTsKICAgICAgICAgREVCVUdQUklOVElOREVOVCgiZHVtcHZfc2VuZCIpOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBlcnJpbmRleDpcdCVkXG4iLCBwZHUtPmVycmluZGV4KSk7CisgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIGVycmluZGV4Olx0JWxkXG4iLCBwZHUtPmVycmluZGV4KSk7CiAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogCiAgICAgICAgIC8qCkBAIC0xMDYzLDcgKzEwNjksNyBAQAogICAgICAgICB2YWx1ZSArPSBkYXRhWzBdOwogI2VuZGlmCiAgICAgfQotICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIEludGVnZXI6XHQlbGQgKDB4JS4yWClcbiIsIHZhbHVlLCB2YWx1ZSkpOworICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIEludGVnZXI6XHQldSAoMHglLjJYKVxuIiwgdmFsdWUsIHZhbHVlKSk7CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0xMDk0LDcgKzExMDAsNyBAQAogICAgIH0KIAogICAgIERFQlVHRFVNUFNFVFVQKCJyZWN2IiwgZGF0YSwgMik7Ci0gICAgREVCVUdNU0coKCJkdW1wdl9yZWN2IiwgIiAgU2hvcnQ6XHQlbGQgKDB4JS4yWClcbiIsIHZhbHVlLCB2YWx1ZSkpOworICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIFNob3J0Olx0JWh1ICgweCUuMlgpXG4iLCB2YWx1ZSwgdmFsdWUpKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTExNDAsNyArMTE0Niw3IEBACiAgICAgKmxlbmd0aCAtPSA0OwogCiAgICAgREVCVUdNU0coKCJkanAiLCAiICBwYXJzZV9vaWRcbiIpKTsKLSAgICBERUJVR01TRygoImRqcCIsICIgIHNpemVvZihvaWQpID0gJWRcbiIsIHNpemVvZihvaWQpKSk7CisgICAgREVCVUdNU0coKCJkanAiLCAiICBzaXplb2Yob2lkKSA9ICVkXG4iLCAoaW50KXNpemVvZihvaWQpKSk7CiAgICAgaWYgKG5fc3ViaWQgPT0gMCAmJiBwcmVmaXggPT0gMCkgewogICAgICAgICAvKgogICAgICAgICAgKiBOdWxsIE9JRCAKQEAgLTExNTgsNyArMTE2NCw5IEBACiAgICAgICovCiAgICAgdG1wX29pZF9sZW4gPSAocHJlZml4ID8gbl9zdWJpZCArIDUgOiBuX3N1YmlkKTsKICAgICBpZiAoKm9pZF9sZW4gPCB0bXBfb2lkX2xlbikgewotICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4IiwgIk92ZXJzaXplZCBPYmplY3QgSURcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJPdmVyc2l6ZWQgT2JqZWN0IElEIChidWY9JSIgTkVUU05NUF9QUkl6ICJkIgorCQkgICAgIiBwZHU9JWQpXG4iLCAqb2lkX2xlbiwgdG1wX29pZF9sZW4pKTsKKyAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTE2OSw2ICsxMTc3LDcgQEAKICNlbmRpZgogICAgIGlmICgqbGVuZ3RoIDwgNCAqIG5fc3ViaWQpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJJbmNvbXBsZXRlIE9iamVjdCBJRFxuIikpOworICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMjI3LDE0ICsxMjM2LDE0IEBACiAKICAgICBpZiAoKmxlbmd0aCA8IDQpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJJbmNvbXBsZXRlIHN0cmluZyAodG9vIHNob3J0OiAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICpsZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludCkqbGVuZ3RoKSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGxlbiA9IGFnZW50eF9wYXJzZV9pbnQoZGF0YSwgbmV0d29ya19ieXRlX29yZGVyKTsKICAgICBpZiAoKmxlbmd0aCA8IGxlbiArIDQpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJJbmNvbXBsZXRlIHN0cmluZyAoc3RpbGwgdG9vIHNob3J0OiAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICpsZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludCkqbGVuZ3RoKSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAobGVuID4gKnN0cl9sZW4pIHsKQEAgLTEzMjIsNyArMTMzMSw3IEBACiAgICAgICAgICpvcGFxdWVfbGVuID0gc2l6ZW9mKGRvdWJsZSk7CiAgICAgICAgIG1lbWNweShvcGFxdWVfYnVmLCAmZnUuY1swXSwgc2l6ZW9mKGRvdWJsZSkpOwogICAgICAgICAqdHlwZSA9IEFTTl9PUEFRVUVfRE9VQkxFOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiRG91YmxlOiAlbGZcbiIsIGZ1LmRvdWJsZVZhbCkpOworICAgICAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiRG91YmxlOiAlZlxuIiwgZnUuZG91YmxlVmFsKSk7CiAgICAgICAgIHJldHVybiBjcDsKIAogICAgIGNhc2UgQVNOX09QQVFVRV9JNjQ6CkBAIC0xMzQ1LDggKzEzNTQsNiBAQAogewogICAgIHVfY2hhciAgICAgICAgICpidWZwID0gZGF0YTsKICAgICB1X2ludCAgICAgICAgICAgaW50X3ZhbDsKLSAgICBpbnQgICAgICAgICAgICBpbnRfb2Zmc2V0OwotICAgIHVfaW50ICAgICAgICAgICppbnRfcHRyID0gKHVfaW50ICopIGRhdGFfYnVmOwogICAgIHN0cnVjdCBjb3VudGVyNjQgdG1wNjQ7CiAKICAgICBERUJVR0RVTVBIRUFERVIoInJlY3YiLCAiVmFyQmluZDoiKTsKQEAgLTE0MDEsMTYgKzE0MDgsMTYgQEAKIAogICAgIGNhc2UgQVNOX0NPVU5URVI2NDoKICAgICAgICAgbWVtc2V0KCZ0bXA2NCwgMCwgc2l6ZW9mKHRtcDY0KSk7Ci0gICAgICAgIGlmIChuZXR3b3JrX2J5dGVfb3JkZXIpIHsKLSAgICAgICAgICAgIHRtcDY0LmhpZ2ggPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnAsICAgbmV0d29ya19ieXRlX29yZGVyKTsKLSAgICAgICAgICAgIHRtcDY0LmxvdyAgPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnArNCwgbmV0d29ya19ieXRlX29yZGVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRtcDY0LmhpZ2ggPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnArNCwgbmV0d29ya19ieXRlX29yZGVyKTsKLSAgICAgICAgICAgIHRtcDY0LmxvdyAgPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnAsICAgbmV0d29ya19ieXRlX29yZGVyKTsKLSAgICAgICAgfQorCWlmIChuZXR3b3JrX2J5dGVfb3JkZXIpIHsKKwkgICAgdG1wNjQuaGlnaCA9IGFnZW50eF9wYXJzZV9pbnQoYnVmcCwgICBuZXR3b3JrX2J5dGVfb3JkZXIpOworCSAgICB0bXA2NC5sb3cgID0gYWdlbnR4X3BhcnNlX2ludChidWZwKzQsIG5ldHdvcmtfYnl0ZV9vcmRlcik7CisJfSBlbHNlIHsKKwkgICAgdG1wNjQuaGlnaCA9IGFnZW50eF9wYXJzZV9pbnQoYnVmcCs0LCBuZXR3b3JrX2J5dGVfb3JkZXIpOworCSAgICB0bXA2NC5sb3cgID0gYWdlbnR4X3BhcnNlX2ludChidWZwLCAgIG5ldHdvcmtfYnl0ZV9vcmRlcik7CisJfQogCiAgICAgICAgIG1lbWNweShkYXRhX2J1ZiwgJnRtcDY0LCBzaXplb2YodG1wNjQpKTsKLSAgICAgICAgKmRhdGFfbGVuID0gc2l6ZW9mKHRtcDY0KTsKKwkqZGF0YV9sZW4gPSBzaXplb2YodG1wNjQpOwogCWJ1ZnAgICAgKz0gODsKIAkqbGVuZ3RoIC09IDg7CiAgICAgICAgIGJyZWFrOwpAQCAtMTUyOSw2ICsxNTM2LDcgQEAKICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICBidWZwICs9IDQ7CiAKKyAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAqbGVuZ3RoIC09IDIwOwogICAgIGlmICgqbGVuZ3RoICE9IHBheWxvYWQpIHsgICAvKiBTaG9ydCBwYXlsb2FkICovCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTYwNCwxMSArMTYxMiwyMSBAQAogICAgICAgICBwZHUtPmNvbW11bml0eV9sZW4gPSBidWZfbGVuOwogICAgICAgICBzbm1wX2Nsb25lX21lbSgodm9pZCAqKikgJnBkdS0+Y29tbXVuaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBidWZmZXIsICh1bnNpZ25lZCkgYnVmX2xlbik7CisJCQorCQkvKiBUaGUgTmV0U05NUCBBUEkgc3R1ZmZzIHRoZSBjb250ZXh0IGludG8gdGhlIFBEVSdzIGNvbW11bml0eSBzdHJpbmcKKwkJICogZmllbGQsIHdoZW4gdXNpbmcgdGhlIEFnZW50WCBQcm90b2NvbC4gIFRoZSByZXN0IG9mIHRoZSBjb2RlIGhvd2V2ZXIsCisJCSAqIGV4cGVjdHMgdG8gZmluZCB0aGUgY29udGV4dCBpbiB0aGUgUERVJ3MgY29udGV4dCBmaWVsZC4gIFRoZXJlZm9yZSB3ZQorCQkgKiBuZWVkIHRvIGNvcHkgdGhlIGNvbnRleHQgaW50byB0aGUgUERVJ3MgY29udGV4dCBmaWVsZHMuICAqLworCQlpZiAocGR1LT5jb21tdW5pdHlfbGVuID4gMCAmJiBwZHUtPmNvbnRleHROYW1lID09IE5VTEwpCisJCXsKKwkJCXBkdS0+Y29udGV4dE5hbWUgICAgPSBzdHJkdXAoKGNoYXIgKikgcGR1LT5jb21tdW5pdHkpOworCQkJcGR1LT5jb250ZXh0TmFtZUxlbiA9IHBkdS0+Y29tbXVuaXR5X2xlbjsKKwkJfQorCiAgICAgICAgIGJ1Zl9sZW4gPSBzaXplb2YoYnVmZmVyKTsKICAgICB9CiAKICAgICBERUJVR0RVTVBIRUFERVIoInJlY3YiLCAiUERVIik7Ci0gICAgREVCVUdJTkRFTlRNT1JFKCk7CiAgICAgc3dpdGNoIChwZHUtPmNvbW1hbmQpIHsKICAgICBjYXNlIEFHRU5UWF9NU0dfT1BFTjoKICAgICAgICAgcGR1LT50aW1lID0gKmJ1ZnA7ICAgICAgLyogVGltZW91dCAqLwpAQCAtMTYyMSw3ICsxNjM5LDggQEAKICAgICAgICAgREVCVUdEVU1QSEVBREVSKCJyZWN2IiwgIlN1YmFnZW50IE9JRCIpOwogICAgICAgICBidWZwID0gYWdlbnR4X3BhcnNlX29pZChidWZwLCBsZW5ndGgsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9idWZmZXIsICZvaWRfYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5mbGFncyAmIEFHRU5UWF9GTEFHU19ORVRXT1JLX0JZVEVfT1JERVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIEFHRU5UWF9GTEFHU19ORVRXT1JLX0JZVEVfT1JERVIpOwogICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgaWYgKGJ1ZnAgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CkBAIC0xNjI5LDcgKzE2NDgsOCBAQAogICAgICAgICB9CiAgICAgICAgIERFQlVHRFVNUEhFQURFUigicmVjdiIsICJTdWJhZ2VudCBEZXNjcmlwdGlvbiIpOwogICAgICAgICBidWZwID0gYWdlbnR4X3BhcnNlX3N0cmluZyhidWZwLCBsZW5ndGgsIGJ1ZmZlciwgJmJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+ZmxhZ3MgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFHRU5UWF9GTEFHU19ORVRXT1JLX0JZVEVfT1JERVIpOwogICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgaWYgKGJ1ZnAgPT0gTlVMTCkgewpAQCAtMTg3MiwxNCArMTg5MiwxMSBAQAogCiAgICAgZGVmYXVsdDoKICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7Ci0gICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4IiwgIlVucmVjb2duaXNlZCBQRFUgdHlwZTogJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgIHBkdS0+Y29tbWFuZCkpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9VTktOT1dOX1BEVTsKICAgICB9CiAgICAgREVCVUdJTkRFTlRMRVNTKCk7Ci0gICAgREVCVUdJTkRFTlRMRVNTKCk7Ci0gICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMKaW5kZXggMzEyZDhkYS4uMWY5ZDMxYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMKQEAgLTIsMTcgKzIsMTQgQEAKICAqICBBZ2VudFggc3ViLWFnZW50CiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0yMSw5ICsxOCw2IEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC00NiwxMiArNDAsMTYgQEAKICNpbmNsdWRlICJhZ2VudHgvYWdlbnR4X2NvbmZpZy5oIgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaD4KLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotI2luY2x1ZGUgIm1pYklJL3N5c09SVGFibGUuaCIKLSNlbmRpZgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmg+CiAKICNpbmNsdWRlICJzdWJhZ2VudC5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnR4X3N1YmFnZW50LCBhZ2VudHhfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50eF9lbmFibGVfc3ViYWdlbnQsIGFnZW50eF9zdWJhZ2VudCkKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVtb3ZlX3RyYXBfc2Vzc2lvbikKKwogI2lmZGVmIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKIAogc3RhdGljIFNOTVBDYWxsYmFjayBzdWJhZ2VudF9yZWdpc3Rlcl9waW5nX2FsYXJtOwpAQCAtNjEsMTAgKzU5LDEyIEBACiBpbnQgICAgICAgICAgICAgaGFuZGxlX3N1YmFnZW50X3Jlc3BvbnNlKGludCBvcCwgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcWlkLCBuZXRzbm1wX3BkdSAqcGR1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICptYWdpYyk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50ICAgICAgICAgICAgIGhhbmRsZV9zdWJhZ2VudF9zZXRfcmVzcG9uc2UoaW50IG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXFpZCwgbmV0c25tcF9wZHUgKnBkdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1hZ2ljKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiB2b2lkICAgICAgICAgICAgc3ViYWdlbnRfc3RhcnR1cF9jYWxsYmFjayh1bnNpZ25lZCBpbnQgY2xpZW50cmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKIGludCAgICAgICAgICAgICBzdWJhZ2VudF9vcGVuX21hc3Rlcl9zZXNzaW9uKHZvaWQpOwpAQCAtMTY0LDE4ICsxNjQsMTkgQEAKICAgICByZXR1cm4gcmM7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BR0VOVFhfRU5BQkxFX1NVQkFHRU5UCiB2b2lkCiBuZXRzbm1wX2VuYWJsZV9zdWJhZ2VudCh2b2lkKSB7CiAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX0FHRU5UX1JPTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJfQUdFTlQpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRYX0VOQUJMRV9TVUJBR0VOVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IGFnZW50X25ldHNubXBfc2V0X2luZm8gKgogc2F2ZV9zZXRfdmFycyhuZXRzbm1wX3Nlc3Npb24gKiBzcywgbmV0c25tcF9wZHUgKnBkdSkKIHsKICAgICBzdHJ1Y3QgYWdlbnRfbmV0c25tcF9zZXRfaW5mbyAqcHRyOwotICAgIHN0cnVjdCB0aW1ldmFsICBub3c7Ci0gICAgZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKIAogICAgIHB0ciA9IChzdHJ1Y3QgYWdlbnRfbmV0c25tcF9zZXRfaW5mbyAqKQogICAgICAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ2VudF9uZXRzbm1wX3NldF9pbmZvKSk7CkBAIC0xODgsOCArMTg5LDcgQEAKICAgICBwdHItPnRyYW5zSUQgPSBwZHUtPnRyYW5zaWQ7CiAgICAgcHRyLT5zZXNzID0gc3M7CiAgICAgcHRyLT5tb2RlID0gU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxOwotICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKLSAgICBwdHItPnVwdGltZSA9IGNhbGN1bGF0ZV90aW1lX2RpZmYoJm5vdywgJnN0YXJ0dGltZSk7CisgICAgcHRyLT51cHRpbWUgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKIAogICAgIHB0ci0+dmFyX2xpc3QgPSBzbm1wX2Nsb25lX3ZhcmJpbmQocGR1LT52YXJpYWJsZXMpOwogICAgIGlmIChwdHItPnZhcl9saXN0ID09IE5VTEwpIHsKQEAgLTI0MSw2ICsyNDEsNyBAQAogICAgICAgICBwcmV2ID0gcHRyOwogICAgIH0KIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIHN0YXRpYyB2b2lkCiBzZW5kX2FnZW50eF9lcnJvcihuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24sIG5ldHNubXBfcGR1ICpwZHUsIGludCBlcnJzdGF0LCBpbnQgZXJyaW5kZXgpCkBAIC0zMzEsOCArMzMyLDkgQEAKICAgICAgKiBvaywgd2UgaGF2ZSBhIHBkdSBmcm9tIHRoZSBuZXQuIE1vZGlmeSBhcyBuZWVkZWQgCiAgICAgICovCiAKLSAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwgImhhbmRsaW5nIGFnZW50eCByZXF1ZXN0IChyZXE9MHgleCx0cmFucz0iCi0gICAgICAgICAgICAgICAgIjB4JXgsc2Vzcz0weCV4KVxuIiwgcGR1LT5yZXFpZCxwZHUtPnRyYW5zaWQsIHBkdS0+c2Vzc2lkKSk7CisgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsICJoYW5kbGluZyBBZ2VudFggcmVxdWVzdCAocmVxPTB4JXgsdHJhbnM9IgorICAgICAgICAgICAgICAgICIweCV4LHNlc3M9MHgleClcbiIsICh1bnNpZ25lZClwZHUtPnJlcWlkLAorCQkodW5zaWduZWQpcGR1LT50cmFuc2lkLCAodW5zaWduZWQpcGR1LT5zZXNzaWQpKTsKICAgICBwZHUtPnZlcnNpb24gPSBBR0VOVFhfVkVSU0lPTl8xOwogICAgIHBkdS0+ZmxhZ3MgfD0gVUNEX01TR19GTEFHX0FMV0FZU19JTl9WSUVXOwogCkBAIC00MDMsNiArNDA1LDcgQEAKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsICIgIC0+IHJlc3BvbnNlXG4iKSk7CiAgICAgICAgIHJldHVybiAxOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgQUdFTlRYX01TR19URVNUU0VUOgogICAgICAgICAvKgogICAgICAgICAgKiBYWFhXV1cgd2UgaGF2ZSB0byBtYXAgdGhpcyB0d2ljZSB0byBib3RoIFJFU0VSVkUxIGFuZCBSRVNFUlZFMiAKQEAgLTQ4MCw2ICs0ODMsNyBAQAogICAgICAgICBteWNhbGxiYWNrID0gaGFuZGxlX3N1YmFnZW50X3NldF9yZXNwb25zZTsKICAgICAgICAgcmV0bWFnaWMgPSBhc2k7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAKICAgICBkZWZhdWx0OgogICAgICAgICBTTk1QX0ZSRUUoc21hZ2ljKTsKQEAgLTQ5OSwxNCArNTAzLDE0IEBACiAgICAgICovCiAKICAgICBpbnRlcm5hbF9wZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwotICAgIGludGVybmFsX3BkdS0+Y29udGV4dE5hbWUgPSBpbnRlcm5hbF9wZHUtPmNvbW11bml0eTsKKyAgICBpbnRlcm5hbF9wZHUtPmNvbnRleHROYW1lID0gKGNoYXIgKikgaW50ZXJuYWxfcGR1LT5jb21tdW5pdHk7CiAgICAgaW50ZXJuYWxfcGR1LT5jb250ZXh0TmFtZUxlbiA9IGludGVybmFsX3BkdS0+Y29tbXVuaXR5X2xlbjsKICAgICBpbnRlcm5hbF9wZHUtPmNvbW11bml0eSA9IE5VTEw7CiAgICAgaW50ZXJuYWxfcGR1LT5jb21tdW5pdHlfbGVuID0gMDsKICAgICByZXN1bHQgPSBzbm1wX2FzeW5jX3NlbmQoYWdlbnR4X2NhbGxiYWNrX3Nlc3MsIGludGVybmFsX3BkdSwgbXljYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgcmV0bWFnaWMpOwogICAgIGlmIChyZXN1bHQgPT0gMCkgewotICAgICAgICBzbm1wX2ZyZWVfcGR1KGludGVybmFsX3BkdSk7CisgICAgICAgIHNubXBfZnJlZV9wZHUoIGludGVybmFsX3BkdSApOwogICAgIH0KICAgICByZXR1cm4gMTsKIH0KQEAgLTU0NSwxNCArNTQ5LDE5IEBACiAKICAgICBwZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwogICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLAotICAgICAgICAgICAgICAgICJoYW5kbGluZyBBZ2VudFggcmVzcG9uc2UgKGNtZCAweCUwMnggb3JpZ19jbWQgMHglMDJ4KVxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPmNvbW1hbmQsIHNtYWdpYy0+b3JpZ2luYWxfY29tbWFuZCkpOworICAgICAgICAgICAgICAgICJoYW5kbGluZyBBZ2VudFggcmVzcG9uc2UgKGNtZCAweCUwMnggb3JpZ19jbWQgMHglMDJ4KSIKKyAgICAgICAgICAgICAgICAiIChyZXE9MHgleCx0cmFucz0weCV4LHNlc3M9MHgleClcbiIsCisgICAgICAgICAgICAgICAgcGR1LT5jb21tYW5kLCBzbWFnaWMtPm9yaWdpbmFsX2NvbW1hbmQsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXBkdS0+cmVxaWQsICh1bnNpZ25lZClwZHUtPnRyYW5zaWQsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXBkdS0+c2Vzc2lkKSk7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgaWYgKHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19JTlRFUk5BTF9TRVRfRlJFRSB8fAogICAgICAgICBwZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfSU5URVJOQUxfU0VUX1VORE8gfHwKICAgICAgICAgcGR1LT5jb21tYW5kID09IFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9DT01NSVQpIHsKICAgICAgICAgZnJlZV9zZXRfdmFycyhzbWFnaWMtPnNlc3Npb24sIHBkdSk7CiAgICAgfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGlmIChzbWFnaWMtPm9yaWdpbmFsX2NvbW1hbmQgPT0gQUdFTlRYX01TR19HRVRORVhUKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLApAQCAtNTg0LDcgKzU5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAqIHNldCB0byBgZW5kT2ZNaWJWaWV3JyIuICAKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl9vYmppZCh2LCB1LT5uYW1lLCB1LT5uYW1lX2xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSh2LCBTTk1QX0VORE9GTUlCVklFVywgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSh2LCBTTk1QX0VORE9GTUlCVklFVywgTlVMTCwgMCk7CiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUgdmlvbGF0aW9uIC0tIHJldHVybiBlbmRPZk1pYlZpZXdcbiIpKTsKICAgICAgICAgICAgICAgICB9CkBAIC02MTQsMTMgKzYyMywxNCBAQAogICAgIHJldHVybiAxOwogfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiBoYW5kbGVfc3ViYWdlbnRfc2V0X3Jlc3BvbnNlKGludCBvcCwgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgaW50IHJlcWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB2b2lkICptYWdpYykKIHsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnJldHNlc3M7CiAgICAgc3RydWN0IGFnZW50X25ldHNubXBfc2V0X2luZm8gKmFzaTsKLSAgICBpbnQgICAgcmVzdWx0OworICAgIGludCByZXN1bHQ7CiAKICAgICBpZiAob3AgIT0gTkVUU05NUF9DQUxMQkFDS19PUF9SRUNFSVZFRF9NRVNTQUdFIHx8IG1hZ2ljID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC02MjksNyArNjM5LDggQEAKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwKICAgICAgICAgICAgICAgICAiaGFuZGxpbmcgYWdlbnR4IHN1YmFnZW50IHNldCByZXNwb25zZSAobW9kZT0lZCxyZXE9MHgleCwiCiAgICAgICAgICAgICAgICAgInRyYW5zPTB4JXgsc2Vzcz0weCV4KVxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPmNvbW1hbmQsIHBkdS0+cmVxaWQscGR1LT50cmFuc2lkLCBwZHUtPnNlc3NpZCkpOworICAgICAgICAgICAgICAgICh1bnNpZ25lZClwZHUtPmNvbW1hbmQsICh1bnNpZ25lZClwZHUtPnJlcWlkLAorCQkodW5zaWduZWQpcGR1LT50cmFuc2lkLCAodW5zaWduZWQpcGR1LT5zZXNzaWQpKTsKICAgICBwZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwogCiAgICAgYXNpID0gKHN0cnVjdCBhZ2VudF9uZXRzbm1wX3NldF9pbmZvICopIG1hZ2ljOwpAQCAtNjQ4LDcgKzY1OSw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSBzbm1wX2FzeW5jX3NlbmQoYWdlbnR4X2NhbGxiYWNrX3Nlc3MsIHBkdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfc3ViYWdlbnRfc2V0X3Jlc3BvbnNlLCBhc2kpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOworICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoIHBkdSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiICBnb2luZyBmcm9tIFJFU0VSVkUxIC0+IFJFU0VSVkUyXG4iKSk7CkBAIC02NzQsNyArNjg1LDcgQEAKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwgIiAgRklOSVNIRURcbiIpKTsKICAgICByZXR1cm4gMTsKIH0KLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogCiBpbnQKQEAgLTY4Myw3ICs2OTQsNyBAQAogewogICAgIHN0cnVjdCByZWdpc3Rlcl9wYXJhbWV0ZXJzICpyZWdfcGFybXMgPQogICAgICAgICAoc3RydWN0IHJlZ2lzdGVyX3BhcmFtZXRlcnMgKikgc2VydmVyYXJnOwotICAgIG5ldHNubXBfc2Vzc2lvbiAqYWdlbnR4X3NzID0gKG5ldHNubXBfc2Vzc2lvbiAqKSBjbGllbnRhcmc7CisgICAgbmV0c25tcF9zZXNzaW9uICphZ2VudHhfc3MgPSAqKG5ldHNubXBfc2Vzc2lvbiAqKiljbGllbnRhcmc7CiAKICAgICBpZiAobWlub3JJRCA9PSBTTk1QRF9DQUxMQkFDS19SRUdJU1RFUl9PSUQpCiAgICAgICAgIHJldHVybiBhZ2VudHhfcmVnaXN0ZXIoYWdlbnR4X3NzLApAQCAtNzAzLDE0ICs3MTQsMTMgQEAKIH0KIAogCi0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLWludAorc3RhdGljIGludAogYWdlbnR4X3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKIHsKLSAgICBzdHJ1Y3QgcmVnaXN0ZXJfc3lzT1JfcGFyYW1ldGVycyAqcmVnX3Bhcm1zID0KLSAgICAgICAgKHN0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzICopIHNlcnZlcmFyZzsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKmFnZW50eF9zcyA9IChuZXRzbm1wX3Nlc3Npb24gKikgY2xpZW50YXJnOworICAgIGNvbnN0IHN0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzICpyZWdfcGFybXMgPQorICAgICAgICAoY29uc3Qgc3RydWN0IHJlZ2lzdGVyX3N5c09SX3BhcmFtZXRlcnMgKikgc2VydmVyYXJnOworICAgIG5ldHNubXBfc2Vzc2lvbiAqYWdlbnR4X3NzID0gKihuZXRzbm1wX3Nlc3Npb24gKiopY2xpZW50YXJnOwogCiAgICAgaWYgKG1pbm9ySUQgPT0gU05NUERfQ0FMTEJBQ0tfUkVHX1NZU09SKQogICAgICAgICByZXR1cm4gYWdlbnR4X2FkZF9hZ2VudGNhcHMoYWdlbnR4X3NzLApAQCAtNzIxLDEzICs3MzEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19wYXJtcy0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19wYXJtcy0+bmFtZWxlbik7CiB9Ci0jZW5kaWYKIAogCiBzdGF0aWMgaW50CiBzdWJhZ2VudF9zaHV0ZG93bihpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewotICAgIG5ldHNubXBfc2Vzc2lvbiAqdGhlc2Vzc2lvbiA9IChuZXRzbm1wX3Nlc3Npb24gKiljbGllbnRhcmc7CisgICAgbmV0c25tcF9zZXNzaW9uICp0aGVzZXNzaW9uID0gKihuZXRzbm1wX3Nlc3Npb24gKiopY2xpZW50YXJnOwogICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLCAic2h1dHRpbmcgZG93biBzZXNzaW9uLi4uLlxuIikpOwogICAgIGlmICh0aGVzZXNzaW9uID09IE5VTEwpIHsKIAlERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwgIkVtcHR5IHNlc3Npb24gdG8gc2h1dGRvd25cbiIpKTsKQEAgLTc1NSwyNCArNzY0LDI5IEBACiB2b2lkCiBhZ2VudHhfcmVnaXN0ZXJfY2FsbGJhY2tzKG5ldHNubXBfc2Vzc2lvbiAqIHMpCiB7CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzX3A7CisKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwKICAgICAgICAgICAgICAgICAicmVnaXN0ZXJpbmcgY2FsbGJhY2tzIGZvciBzZXNzaW9uICVwXG4iLCBzKSk7CisgICAgc2Vzc19wID0gbmV0c25tcF9tZW1kdXAoJnMsIHNpemVvZihzKSk7CisgICAgbmV0c25tcF9hc3NlcnQoc2Vzc19wKTsKKyAgICBzLT5teXZvaWQgPSBzZXNzX3A7CisgICAgaWYgKCFzZXNzX3ApCisgICAgICAgIHJldHVybjsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFnZW50X3NodXRkb3duLCBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFnZW50X3NodXRkb3duLCBzZXNzX3ApOwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR0lTVEVSX09JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3JlZ2lzdHJhdGlvbl9jYWxsYmFjaywgc2Vzc19wKTsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19VTlJFR0lTVEVSX09JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIHMpOwotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzZXNzX3ApOwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9zeXNPUl9jYWxsYmFjaywgcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHNlc3NfcCk7CiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdfU1lTT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHMpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHNlc3NfcCk7CiB9CiAKIC8qCkBAIC03ODUsMjIgKzc5OSwyMCBAQAogICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLAogICAgICAgICAgICAgICAgICJ1bnJlZ2lzdGVyaW5nIGNhbGxiYWNrcyBmb3Igc2Vzc2lvbiAlcFxuIiwgc3MpKTsKICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NIVVRET1dOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJhZ2VudF9zaHV0ZG93biwgc3MsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJhZ2VudF9zaHV0ZG93biwgc3MtPm15dm9pZCwgMSk7CiAgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR0lTVEVSX09JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3JlZ2lzdHJhdGlvbl9jYWxsYmFjaywgc3MsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzcy0+bXl2b2lkLCAxKTsKICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdJU1RFUl9PSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIHNzLCAxKTsKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzcy0+bXl2b2lkLCAxKTsKICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVHX1NZU09SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHNzLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3N5c09SX2NhbGxiYWNrLCBzcy0+bXl2b2lkLCAxKTsKICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdfU1lTT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9zeXNPUl9jYWxsYmFjaywgc3MsIDEpOwotI2VuZGlmCi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3N5c09SX2NhbGxiYWNrLCBzcy0+bXl2b2lkLCAxKTsKKyAgICBTTk1QX0ZSRUUoc3MtPm15dm9pZCk7CiB9CiAKIC8qCkBAIC05MTQsNiArOTI2LDE0IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCithZ2VudHhfcmVvcGVuX3N5c09SVGFibGUoY29uc3Qgc3RydWN0IHN5c09SVGFibGUqIGRhdGEsIHZvaWQqIHYpCit7CisgICAgbmV0c25tcF9zZXNzaW9uICphZ2VudHhfc3MgPSAobmV0c25tcF9zZXNzaW9uICopIHY7CisgIAorICAgIGFnZW50eF9hZGRfYWdlbnRjYXBzKGFnZW50eF9zcywgZGF0YS0+T1Jfb2lkLCBkYXRhLT5PUl9vaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+T1JfZGVzY3IpOworfQogCiAvKgogICogQWxhcm0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gb3BlbiBhIHNlc3Npb24gdG8gdGhlIG1hc3RlciBhZ2VudC4gIElmIGEKQEAgLTk0MiwxNSArOTYyLDIwIEBACiAgICAgICAgIHJlZ2lzdGVyX21pYl9yZWF0dGFjaCgpOwogCiAgICAgICAgIC8qCisgICAgICAgICAqIFJlcmVnaXN0ZXIgYWxsIG91ciBzeXNPUkVudHJpZXMKKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfc3lzT1JUYWJsZV9mb3JlYWNoKCZhZ2VudHhfcmVvcGVuX3N5c09SVGFibGUsIG1haW5fc2Vzc2lvbik7CisKKyAgICAgICAgLyoKICAgICAgICAgICogUmVnaXN0ZXIgYSBwaW5nIGFsYXJtIChpZiBuZWVkIGJlKS4gIAogICAgICAgICAgKi8KLSAgICAgICAgc3ViYWdlbnRfcmVnaXN0ZXJfcGluZ19hbGFybSgwLCAwLCAwLCBtYWluX3Nlc3Npb24pOworICAgICAgICBzdWJhZ2VudF9yZWdpc3Rlcl9waW5nX2FsYXJtKDAsIDAsIE5VTEwsIG1haW5fc2Vzc2lvbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNsaWVudHJlZyA9PSAwKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogUmVnaXN0ZXIgYSByZWF0dGFjaCBhbGFybSBmb3IgbGF0ZXIgCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHN1YmFnZW50X3JlZ2lzdGVyX3BpbmdfYWxhcm0oMCwgMCwgMCwgbWFpbl9zZXNzaW9uKTsKKyAgICAgICAgICAgIHN1YmFnZW50X3JlZ2lzdGVyX3BpbmdfYWxhcm0oMCwgMCwgTlVMTCwgbWFpbl9zZXNzaW9uKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oIGIvYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgKaW5kZXggN2Y5NTNkMy4uZmM1ZjI2YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgKQEAgLTUsNiArNSwxMyBAQAogLyogdGhlc2UgZ28gaW50byBib3RoIHRoZSBtaW5pIGFnZW50IGFuZCB0aGUgZnVsbCBhZ2VudCAqLwogY29uZmlnX3JlcXVpcmUoc25tcHYzbWlicykKIAorLyogdmVyeSBmZXcgZGVmYXVsdCBtaWJzICovCitjb25maWdfYWRkX21pYihTTk1QdjItTUlCKQorY29uZmlnX2FkZF9taWIoSUYtTUlCKQorY29uZmlnX2FkZF9taWIoSVAtTUlCKQorY29uZmlnX2FkZF9taWIoVENQLU1JQikKK2NvbmZpZ19hZGRfbWliKFVEUC1NSUIpCisKICNpZmRlZiBORVRTTk1QX01JTklfQUdFTlQKIAogLyogbGltaXQgdGhlIG1pYklJIG1vZHVsZXMgdG8gdGhlIGJhcmUgbWluaW11bSAqLwpAQCAtMTMsMTQgKzIwLDYgQEAKIGNvbmZpZ19yZXF1aXJlKG1pYklJL3N5c09SVGFibGUpCiBjb25maWdfcmVxdWlyZShtaWJJSS92YWNtX3ZhcnMpCiBjb25maWdfcmVxdWlyZShtaWJJSS92YWNtX2NvbmYpCi1jb25maWdfcmVxdWlyZSh1dGlsaXRpZXMvZXhlY3V0ZSkKLQotLyogdmVyeSBmZXcgZGVmYXVsdCBtaWJzICovCi1jb25maWdfYWRkX21pYihTTk1QdjItTUlCKQotY29uZmlnX2FkZF9taWIoSUYtTUlCKQotY29uZmlnX2FkZF9taWIoSVAtTUlCKQotY29uZmlnX2FkZF9taWIoVENQLU1JQikKLWNvbmZpZ19hZGRfbWliKFVEUC1NSUIpCiAKICNlbHNlIC8qICFORVRTTk1QX01JTklfQUdFTlQgPT0gdGhlIGZ1bGwgc2hhYmFuZyAqLwogCkBAIC0zMiwyMiArMzEsMjEgQEAKIGNvbmZpZ19yZXF1aXJlKGFnZW50X21pYnMpCiBjb25maWdfcmVxdWlyZShhZ2VudHgpCiBjb25maWdfcmVxdWlyZShkaXNtYW4vZXZlbnQpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogY29uZmlnX3JlcXVpcmUoZGlzbWFuL3NjaGVkdWxlKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIGNvbmZpZ19yZXF1aXJlKHV0aWxpdGllcykKIAogLyogZGVmYXVsdCBNSUJzIHRvIGF1dG8taW5jbHVkZSBmb3IgcGFyc2luZyAqLwogLyogTk9URTogd2UgY29uc2lkZXIgdGhlc2UgTUlCcyB1c2VycyB3aWxsIGxpa2VseSB3YW50IHRvIGxvYWQgYnkKICAgIGRlZmF1bHQsIGV2ZW4gaWYgdGhleSdyZSBub3Qgc3VwcG9ydGluZyBpdCBpbiB0aGUgYWdlbnQgKGllLCB0aGUKICAgIGNvbW1hbmQgbGluZSB0b29scyBuZWVkIHRvIGxvYWQgdGhlbSBhbnl3YXkpICovCi1jb25maWdfYWRkX21pYihTTk1QdjItTUlCKQotY29uZmlnX2FkZF9taWIoSUYtTUlCKQotY29uZmlnX2FkZF9taWIoSVAtTUlCKQotY29uZmlnX2FkZF9taWIoVENQLU1JQikKLWNvbmZpZ19hZGRfbWliKFVEUC1NSUIpCiBjb25maWdfYWRkX21pYihIT1NULVJFU09VUkNFUy1NSUIpCiBjb25maWdfYWRkX21pYihOT1RJRklDQVRJT04tTE9HLU1JQikKIGNvbmZpZ19hZGRfbWliKERJU01BTi1FVkVOVC1NSUIpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogY29uZmlnX2FkZF9taWIoRElTTUFOLVNDSEVEVUxFLU1JQikKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBleHRyYSBtb2R1bGVzICovCiAvKiB0aGVzZSBzeW1ib2xzIGFyZSBzZXQgaW4gdGhlIGhvc3Qgc3BlY2lmaWMgbmV0LXNubXAvc3lzdGVtLzxvcz4uaCBmaWxlcyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYyBiL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5ODc5YQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMKQEAgLTAsMCArMSw0NzUgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZmlmbykKKworI2luY2x1ZGUgImRlbGl2ZXJCeU5vdGlmeS5oIgorCisvKiB3ZSBzaG91bGQgbmV2ZXIgc3BsaXQgYmV5b25kIHRoaXMgKi8KKyNkZWZpbmUgTUFYX01FU1NBR0VfQ09VTlQgMTI4CisjZGVmaW5lIEJBU0VfUEFDS0VUX1NJWkUgMTAwIC8qIHNob3VsZCBiZSBlbm91Z2ggdG8gc3RvcmUgU05NUHYzIG1zZyBoZWFkZXJzICovCisKKy8qIGlmIHYgaXMgIU5VTEwsIHRoZW4gZXN0aW1hdGUgaXQncyBsaWtlbHkgc2l6ZSAqLworI2RlZmluZSBFU1RJTUFURV9WQVJfU0laRSh2KSAodj8odi0+bmFtZV9sZW5ndGggKyB2LT52YWxfbGVuICsgOCk6MCkKKwordm9pZCBwYXJzZV9kZWxpdmVyX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIHBhcnNlX2RlbGl2ZXJfbWF4c2l6ZV9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOwordm9pZCBwYXJzZV9kYXRhX25vdGlmaWNhdGlvbl9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3ZvaWQgcGFyc2VfcGVyaW9kaWNfdGltZV9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3ZvaWQgcGFyc2VfbWVzc2FnZV9udW1iZXJfb2lkX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIHBhcnNlX21heF9tZXNzYWdlX251bWJlcl9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3ZvaWQgZnJlZV9kZWxpdmVyX2NvbmZpZyh2b2lkKTsKKworc3RhdGljIHZvaWQgX3NjaGVkdWxlX25leHRfZXhlY3V0ZV90aW1lKHZvaWQpOworCitvaWQgICAgZGF0YV9ub3RpZmljYXRpb25fb2lkW01BWF9PSURfTEVOXQorICAgICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAzLCAxLCA1LCA0LCAwLCAxIH07CitzaXplX3QgZGF0YV9ub3RpZmljYXRpb25fb2lkX2xlbiA9IDEzOworCitvaWQgICAgbmV0c25tcF9wZXJpb2RpY190aW1lX29pZFtNQVhfT0lEX0xFTl0KKyAgICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMywgMSwgNSwgMywgMSwgMCB9Oworc2l6ZV90IG5ldHNubXBfcGVyaW9kaWNfdGltZV9vaWRfbGVuID0gMTM7CisKK29pZCAgICBuZXRzbm1wX21lc3NhZ2VfbnVtYmVyX29pZFtNQVhfT0lEX0xFTl0KKyAgICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMywgMSwgNSwgMywgMiwgMCB9Oworc2l6ZV90IG5ldHNubXBfbWVzc2FnZV9udW1iZXJfb2lkX2xlbiA9IDEzOworCitvaWQgICAgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkW01BWF9PSURfTEVOXQorICAgICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAzLCAxLCA1LCAzLCAzLCAwIH07CitzaXplX3QgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2xlbiA9IDEzOworCitvaWQgb2JqaWRfc25tcHRyYXBbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNCwgMSwgMCB9OworCisjZGVmaW5lIERFRkFVTFRfTUFYX0RFTElWRVJfU0laRSAtMTsKK3N0YXRpYyBpbnQgZGVmYXVsdF9tYXhfc2l6ZTsKK3Vuc2lnbmVkIGludCBhbGFybV9yZWc7CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKmRlbGl2ZXJfY29udGFpbmVyOworCitzdGF0aWMgaW50CitfZGVsaXZlcl9jb21wYXJlKGRlbGl2ZXJfYnlfbm90aWZ5ICpsaHMsIGRlbGl2ZXJfYnlfbm90aWZ5ICpyaHMpIHsKKyAgICAvKiBzb3J0IGJ5IHRoZSBuZXh0X3J1biB0aW1lICovCisgICAgaWYgKGxocy0+bmV4dF9ydW4gPCByaHMtPm5leHRfcnVuKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKK30KKworLyoqIEluaXRpYWxpemVzIHRoZSBtdGVUcmlnZ2VyIG1vZHVsZSAqLwordm9pZAoraW5pdF9kZWxpdmVyQnlOb3RpZnkodm9pZCkKK3sKKyAgICAvKiByZWdpc3RlciB0aGUgY29uZmlnIHRva2VucyAqLworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkZWxpdmVyQnlOb3RpZnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9kZWxpdmVyX2NvbmZpZywgJmZyZWVfZGVsaXZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlstcF0gWy1tXSBbLXMgbWF4c2l6ZV0gRlJFUVVFTkNZIE9JRCIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeU1heFBhY2tldFNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9kZWxpdmVyX21heHNpemVfY29uZmlnLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXplSW5CeXRlcyIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeU9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlX2RhdGFfbm90aWZpY2F0aW9uX29pZF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogWFhYOiByZXNldCB0byBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9JRCIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeUZyZXF1ZW5jeU9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlX3BlcmlvZGljX3RpbWVfb2lkX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBYWFg6IHJlc2V0IHRvIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0lEIik7CisKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGVsaXZlckJ5Tm90aWZ5TWVzc2FnZU51bWJlck9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlX21lc3NhZ2VfbnVtYmVyX29pZF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogWFhYOiByZXNldCB0byBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9JRCIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeU1heE1lc3NhZ2VOdW1iZXJPaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBYWFg6IHJlc2V0IHRvIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0lEIik7CisKKyAgICAvKiBjcmVhdGUgdGhlIGNvbnRhaW5lciB0byBzdG9yZSB0aGUgY29uZmlnIG9iamVjdHMqLworICAgIGRlbGl2ZXJfY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZGVsaXZlckJ5Tm90aWZ5OmZpZm8iKTsKKyAgICBpZiAoTlVMTCA9PSBkZWxpdmVyX2NvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZGVsaXZlckJ5Tm90aWZ5OiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBvdXIgZGF0YSBjb250YWluZXJcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGl2ZXJfY29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiZGVsaXZlckJ5Tm90aWZ5Iik7CisgICAgZGVsaXZlcl9jb250YWluZXItPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSAqKSBfZGVsaXZlcl9jb21wYXJlOworCisgICAgLyogc2V0IHRoZSBkZWZhdWx0cyAqLworICAgIGRlZmF1bHRfbWF4X3NpemUgPSBERUZBVUxUX01BWF9ERUxJVkVSX1NJWkU7CisKKyAgICBhbGFybV9yZWcgPSAwOworfQorCit2b2lkCitfcGFyc2VfY29uZmlnX29pZChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSwKKyAgICAgICAgICAgICAgICAgIG9pZCAqb2lkX3N0b3JlLCBzaXplX3QgKm9pZF9zdG9yZV9sZW4pIHsKKyAgICBzaXplX3QgdG1wX2xlbiA9IE1BWF9PSURfTEVOOworICAgIC8qIHBhcnNlIHRoZSBPSUQgZ2l2ZW4gKi8KKworICAgIGlmICghc25tcF9wYXJzZV9vaWQobGluZSwgb2lkX3N0b3JlLCAmdG1wX2xlbikpIHsKKyAgICAgICAgY2hhciBidWZbU1BSSU5UX01BWF9MRU5dOworICAgICAgICBzbnByaW50ZihidWYsIFNQUklOVF9NQVhfTEVOLTEsICJ1bmtub3duICVzIE9JRDogJXMiLCB0b2tlbiwgbGluZSk7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoYnVmKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpvaWRfc3RvcmVfbGVuID0gdG1wX2xlbjsKK30KKwordm9pZAorcGFyc2VfZGF0YV9ub3RpZmljYXRpb25fb2lkX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkgeworICAgIF9wYXJzZV9jb25maWdfb2lkKHRva2VuLCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbm90aWZpY2F0aW9uX29pZCwgJmRhdGFfbm90aWZpY2F0aW9uX29pZF9sZW4pOworfQorCit2b2lkCitwYXJzZV9wZXJpb2RpY190aW1lX29pZF9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIHsKKyAgICBfcGFyc2VfY29uZmlnX29pZCh0b2tlbiwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BlcmlvZGljX3RpbWVfb2lkLCAmbmV0c25tcF9wZXJpb2RpY190aW1lX29pZF9sZW4pOworfQorCit2b2lkCitwYXJzZV9tZXNzYWdlX251bWJlcl9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSB7CisgICAgX3BhcnNlX2NvbmZpZ19vaWQodG9rZW4sIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tZXNzYWdlX251bWJlcl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgJm5ldHNubXBfbWVzc2FnZV9udW1iZXJfb2lkX2xlbik7Cit9CisKK3ZvaWQKK3BhcnNlX21heF9tZXNzYWdlX251bWJlcl9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSB7CisgICAgX3BhcnNlX2NvbmZpZ19vaWQodG9rZW4sIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICZuZXRzbm1wX21heF9tZXNzYWdlX251bWJlcl9vaWRfbGVuKTsKK30KKwordm9pZAorcGFyc2VfZGVsaXZlcl9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIHsKKyAgICBjb25zdCBjaGFyICpjcCA9IGxpbmU7CisgICAgY2hhciBidWZbU1BSSU5UX01BWF9MRU5dOworICAgIHNpemVfdCBidWZfbGVuID0gU1BSSU5UX01BWF9MRU47CisgICAgaW50IG1heF9zaXplID0gREVGQVVMVF9NQVhfREVMSVZFUl9TSVpFOworICAgIGludCBmcmVxdWVuY3k7CisgICAgb2lkIHRhcmdldF9vaWRbTUFYX09JRF9MRU5dOworICAgIHNpemVfdCB0YXJnZXRfb2lkX2xlbiA9IE1BWF9PSURfTEVOOworICAgIGRlbGl2ZXJfYnlfbm90aWZ5ICpuZXdfbm90aWZ5ID0gTlVMTDsKKyAgICBpbnQgZmxhZ3MgPSAwOworCisgICAgd2hpbGUoY3AgJiYgKmNwID09ICctJykgeworICAgICAgICBzd2l0Y2ggKCooY3ArMSkpIHsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICBjcCA9IHNraXBfdG9rZW5fY29uc3QoY3ApOworICAgICAgICAgICAgaWYgKCFjcCkgeworICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm5vIGFyZ3VtZW50IGdpdmVuIHRvIC1zIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF4X3NpemUgPSBhdG9pKGNwKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ3AnOgorICAgICAgICAgICAgZmxhZ3MgPSBmbGFncyB8IE5FVFNOTVBfREVMSVZFUl9OT19QRVJJT0RfT0lEOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICBmbGFncyA9IGZsYWdzIHwgTkVUU05NUF9ERUxJVkVSX05PX01TR19DT1VOVFM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29uZmlnX3BlcnJvcigidW5rbm93biBmbGFnIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KGNwKTsKKyAgICB9CisKKyAgICBpZiAoIWNwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIm5vIGZyZXF1ZW5jeSBnaXZlbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvcHlfbndvcmQoY3AsIGJ1ZiwgYnVmX2xlbik7CisgICAgZnJlcXVlbmN5ID0gbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKGJ1Zik7CisgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KGNwKTsKKworICAgIGlmIChmcmVxdWVuY3kgPD0gMCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJpbGxlZ2FsIGZyZXF1ZW5jeSBnaXZlbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjcCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJubyBPSUQgZ2l2ZW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIHBhcnNlIHRoZSBPSUQgZ2l2ZW4gKi8KKyAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKGNwLCB0YXJnZXRfb2lkLCAmdGFyZ2V0X29pZF9sZW4pKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoInVua25vd24gZGVsaXZlckJ5Tm90aWZ5IE9JRCIpOworICAgICAgICBERUJVR01TR1RMKCgiZGVsaXZlckJ5Tm90aWZ5IiwgIlRoZSBPSUQgd2l0aCB0aGUgcHJvYmxlbTogJXNcbiIsIGNwKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBzZXQgdXAgdGhlIG9iamVjdCB0byBzdG9yZSBhbGwgdGhlIGRhdGEgKi8KKyAgICBuZXdfbm90aWZ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihkZWxpdmVyX2J5X25vdGlmeSk7CisgICAgbmV3X25vdGlmeS0+ZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworICAgIG5ld19ub3RpZnktPm1heF9wYWNrZXRfc2l6ZSA9IG1heF9zaXplOworICAgIG5ld19ub3RpZnktPmxhc3RfcnVuID0gdGltZShOVUxMKTsKKyAgICBuZXdfbm90aWZ5LT5uZXh0X3J1biA9IG5ld19ub3RpZnktPmxhc3RfcnVuICsgZnJlcXVlbmN5OworICAgIG5ld19ub3RpZnktPmZsYWdzID0gZmxhZ3M7CisKKyAgICBuZXdfbm90aWZ5LT50YXJnZXQgPSBtYWxsb2ModGFyZ2V0X29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgbmV3X25vdGlmeS0+dGFyZ2V0X2xlbiA9IHRhcmdldF9vaWRfbGVuOworICAgIG1lbWNweShuZXdfbm90aWZ5LT50YXJnZXQsIHRhcmdldF9vaWQsIHRhcmdldF9vaWRfbGVuKnNpemVvZihvaWQpKTsKKworICAgIC8qIFhYWDogbmVlZCB0byBkbyB0aGUgd2hvbGUgY29udGFpbmVyICovCisgICAgc25tcF9hbGFybV9yZWdpc3RlcihjYWxjdWxhdGVfdGltZV91bnRpbF9uZXh0X3J1bihuZXdfbm90aWZ5LCBOVUxMKSwgMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAmZGVsaXZlcl9leGVjdXRlLCBOVUxMKTsKKworICAgIC8qIGFkZCBpdCB0byB0aGUgY29udGFpbmVyICovCisgICAgQ09OVEFJTkVSX0lOU0VSVChkZWxpdmVyX2NvbnRhaW5lciwgbmV3X25vdGlmeSk7CisgICAgX3NjaGVkdWxlX25leHRfZXhlY3V0ZV90aW1lKCk7Cit9CisKK3ZvaWQKK3BhcnNlX2RlbGl2ZXJfbWF4c2l6ZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIHsKKyAgICBkZWZhdWx0X21heF9zaXplID0gYXRvaShsaW5lKTsKK30KKworc3RhdGljIHZvaWQKK19mcmVlX2RlbGl2ZXJfb2JqKGRlbGl2ZXJfYnlfbm90aWZ5ICpvYmosIHZvaWQgKmNvbnRleHQpIHsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4ob2JqICE9IE5VTEwsICk7CisgICAgU05NUF9GUkVFKG9iai0+dGFyZ2V0KTsKKyAgICBTTk1QX0ZSRUUob2JqKTsKK30KKwordm9pZAorZnJlZV9kZWxpdmVyX2NvbmZpZyh2b2lkKSB7CisgICAgZGVmYXVsdF9tYXhfc2l6ZSA9IERFRkFVTFRfTUFYX0RFTElWRVJfU0laRTsKKyAgICBDT05UQUlORVJfQ0xFQVIoZGVsaXZlcl9jb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfZnJlZV9kZWxpdmVyX29iaiwgTlVMTCk7CisgICAgaWYgKGFsYXJtX3JlZykgeworICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoYWxhcm1fcmVnKTsKKyAgICAgICAgYWxhcm1fcmVnID0gMDsKKyAgICB9Cit9CisKK3ZvaWQKK2RlbGl2ZXJfZXhlY3V0ZSh1bnNpZ25lZCBpbnQgY2xpZW50cmVnLCB2b2lkICpjbGllbnRhcmcpIHsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsICp3YWxrZXIsICpkZWxpdmVyX25vdGlmaWNhdGlvbiwgKnZhcnRtcDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnJlYWR5X2Zvcl9kZWxpdmVyeVtNQVhfTUVTU0FHRV9DT1VOVF07CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzOworICAgIGludCByYywgaTsKKyAgICBkZWxpdmVyX2J5X25vdGlmeSAqb2JqOworICAgIG5ldHNubXBfaXRlcmF0b3IgKml0ZXJhdG9yOworICAgIHRpbWVfdCAgICAgICAgICAgIG5vdyA9IHRpbWUoTlVMTCk7CisgICAgdV9sb25nICAgICAgICAgICAgbWVzc2FnZV9jb3VudCwgbWF4X21lc3NhZ2VfY291bnQsIHRtcF9sb25nOworICAgIHVfbG9uZyAgICAgICAgICAgKm1heF9tZXNzYWdlX2NvdW50X3B0cnNbTUFYX01FU1NBR0VfQ09VTlRdOworICAgIHNpemVfdCAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZTsKKworICAgIERFQlVHTVNHVEwoKCJkZWxpdmVyQnlOb3RpZnkiLCAiU3RhcnRpbmcgdGhlIGV4ZWN1dGUgcm91dGluZVxuIikpOworCisgICAgLyogWFhYOiBuZWVkIHRvIGRvIHRoZSB3aG9sZSBjb250YWluZXIgKi8KKyAgICBpdGVyYXRvciA9IENPTlRBSU5FUl9JVEVSQVRPUihkZWxpdmVyX2NvbnRhaW5lcik7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKGl0ZXJhdG9yICE9IE5VTEwsKTsKKworICAgIHNlc3MgPSBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKKworICAgIGZvcihvYmogPSBJVEVSQVRPUl9GSVJTVChpdGVyYXRvcik7IG9iajsKKyAgICAgICAgb2JqID0gSVRFUkFUT1JfTkVYVChpdGVyYXRvcikpIHsKKworICAgICAgICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHJ1biB0aGlzIG9uZSB5ZXQgKi8KKyAgICAgICAgaWYgKG9iai0+bmV4dF9ydW4gPiBub3cpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtYXhfbWVzc2FnZV9jb3VudCA9IDE7CisgICAgICAgIG1lc3NhZ2VfY291bnQgPSAwOworCisgICAgICAgIC8qIGZpbGwgdGhlIHZhcmJpbmQgbGlzdCB3aXRoIHRoZSB0YXJnZXQgb2JqZWN0ICovCisgICAgICAgIHZhcnMgPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKTsKKyAgICAgICAgc25tcF9zZXRfdmFyX29iamlkKCB2YXJzLCBvYmotPnRhcmdldCwgb2JqLT50YXJnZXRfbGVuICk7CisgICAgICAgIHZhcnMtPnR5cGUgPSBBU05fTlVMTDsKKworICAgICAgICAvKiB3YWxrIHRoZSBPSUQgdHJlZSBmb3IgdGhlIGRhdGEgKi8KKyAgICAgICAgcmMgPSBuZXRzbm1wX3F1ZXJ5X3dhbGsodmFycywgc2Vzcyk7CisgICAgICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAvKiBYWFg6IGRpc2FibGU/IGFuZCByZXNldCB0aGUgbmV4dCBxdWVyeSB0aW1lIHBvaW50ISAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImRlbGl2ZXJCeU5vdGlmeTogZmFpbGVkIHRvIGlzc3VlIHRoZSBxdWVyeSIpOworICAgICAgICAgICAgSVRFUkFUT1JfUkVMRUFTRShpdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB3YWxrZXIgPSB2YXJzOworCisgICAgICAgIHdoaWxlICh3YWxrZXIpIHsKKworICAgICAgICAgICAgLyogU2V0IHVwIHRoZSBub3RpZmljYXRpb24gaXRzZWxmICovCisgICAgICAgICAgICBkZWxpdmVyX25vdGlmaWNhdGlvbiA9IE5VTEw7CisgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgPSBCQVNFX1BBQ0tFVF9TSVpFOworCisgICAgICAgICAgICAvKiBhZGQgaW4gdGhlIG5vdGlmaWNhdGlvbiB0eXBlICovCisgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZkZWxpdmVyX25vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqaWRfc25tcHRyYXAsIE9JRF9MRU5HVEgob2JqaWRfc25tcHRyYXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX25vdGlmaWNhdGlvbl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbm90aWZpY2F0aW9uX29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgKz0gRVNUSU1BVEVfVkFSX1NJWkUoZGVsaXZlcl9ub3RpZmljYXRpb24pOworCisgICAgICAgICAgICAvKiBhZGQgaW4gdGhlIGN1cnJlbnQgbWVzc2FnZSBudW1iZXIgaW4gdGhpcyBzZXF1ZW5jZSAqLworICAgICAgICAgICAgaWYgKCEob2JqLT5mbGFncyAmIE5FVFNOTVBfREVMSVZFUl9OT19QRVJJT0RfT0lEKSkgeworICAgICAgICAgICAgICAgIHRtcF9sb25nID0gb2JqLT5mcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmZGVsaXZlcl9ub3RpZmljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BlcmlvZGljX3RpbWVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZXJpb2RpY190aW1lX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fVU5TSUdORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmdG1wX2xvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodG1wX2xvbmcpKTsKKyAgICAgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgKz0gRVNUSU1BVEVfVkFSX1NJWkUoZGVsaXZlcl9ub3RpZmljYXRpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBhZGQgaW4gdGhlIGN1cnJlbnQgbWVzc2FnZSBudW1iZXIgaW4gdGhpcyBzZXF1ZW5jZSAqLworICAgICAgICAgICAgbWVzc2FnZV9jb3VudCsrOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VfY291bnQgPiBNQVhfTUVTU0FHRV9DT1VOVCkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkZWxpdmVyeSBjb25zdHJ1Y3QgZ3JldyB0b28gbGFyZ2UuLi4gIGdpdmluZyB1cFxuIik7CisgICAgICAgICAgICAgICAgLyogWFhYOiBkaXNhYmxlIGl0ICovCisgICAgICAgICAgICAgICAgLyogWFhYOiBzZW5kIGEgbm90aWZpY2F0aW9uIGFib3V0IGl0PyAqLworICAgICAgICAgICAgICAgIElURVJBVE9SX1JFTEVBU0UoaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc3RvcmUgdGhpcyBmb3IgbGF0ZXIgdXBkYXRpbmcgYW5kIHNlbmRpbmcgKi8KKyAgICAgICAgICAgIHJlYWR5X2Zvcl9kZWxpdmVyeVttZXNzYWdlX2NvdW50LTFdID0gZGVsaXZlcl9ub3RpZmljYXRpb247CisKKyAgICAgICAgICAgIGlmICghKG9iai0+ZmxhZ3MgJiBORVRTTk1QX0RFTElWRVJfTk9fTVNHX0NPVU5UUykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZkZWxpdmVyX25vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWVzc2FnZV9udW1iZXJfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tZXNzYWdlX251bWJlcl9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJm1lc3NhZ2VfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWVzc2FnZV9jb3VudCkpOworICAgICAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZSArPSBFU1RJTUFURV9WQVJfU0laRShkZWxpdmVyX25vdGlmaWNhdGlvbik7CisKKyAgICAgICAgICAgICAgICAvKiBhZGQgaW4gdGhlIG1heCBtZXNzYWdlIG51bWJlciBjb3VudCBmb3IgdGhpcyBzZXF1ZW5jZSAqLworICAgICAgICAgICAgICAgIHZhcnRtcCA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJmRlbGl2ZXJfbm90aWZpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopICZtYXhfbWVzc2FnZV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtYXhfbWVzc2FnZV9jb3VudCkpOworICAgICAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZSArPSBFU1RJTUFURV9WQVJfU0laRShkZWxpdmVyX25vdGlmaWNhdGlvbik7CisKKyAgICAgICAgICAgICAgICAvKiB3ZSdsbCBuZWVkIHRvIHVwZGF0ZSB0aGlzIGNvdW50ZXIgbGF0ZXIgKi8KKyAgICAgICAgICAgICAgICBtYXhfbWVzc2FnZV9jb3VudF9wdHJzW21lc3NhZ2VfY291bnQtMV0gPQorICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhcnRtcC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGp1c3QgdG8gYmUgc3VyZSAqLworICAgICAgICAgICAgICAgIG1heF9tZXNzYWdlX2NvdW50X3B0cnNbbWVzc2FnZV9jb3VudC0xXSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIGNvcHkgaW4gdGhlIGNvbGxlY3RlZCBkYXRhICovCisgICAgICAgICAgICB3aGlsZSh3YWxrZXIpIHsKKyAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZkZWxpdmVyX25vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlci0+bmFtZSwgd2Fsa2VyLT5uYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlci0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlci0+dmFsLnN0cmluZywgd2Fsa2VyLT52YWxfbGVuKTsKKworICAgICAgICAgICAgICAgIC8qIDggYnl0ZSBwYWRkaW5nIGZvciBBU04gZW5jb2RpbmdzIGFuIGEgZmV3IGV4dHJhIE9JRCBieXRlcyAqLworICAgICAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZSArPSBFU1RJTUFURV9WQVJfU0laRSh3YWxrZXIpOworCisgICAgICAgICAgICAgICAgd2Fsa2VyID0gd2Fsa2VyLT5uZXh0X3ZhcmlhYmxlOworCisgICAgICAgICAgICAgICAgLyogaWYgdGhlIGN1cnJlbnQgc2l6ZSBQTFVTIHRoZSBuZXh0IG9uZSAod2hpY2ggaXMgbm93CisgICAgICAgICAgICAgICAgICAgaW4gJ3dhbGtlcicpIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltZXQgdGhlbiB3ZSBzdG9wIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBpZiAob2JqLT5tYXhfcGFja2V0X3NpemUgPiAwICYmCisgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZSArCisgICAgICAgICAgICAgICAgICAgIEVTVElNQVRFX1ZBUl9TSVpFKHdhbGtlcikgPj0KKyAgICAgICAgICAgICAgICAgICAgb2JqLT5tYXhfcGFja2V0X3NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBzZW5kIG91dCB0aGUgbm90aWZpY2F0aW9uICovCisgICAgICAgICAgICBzZW5kX3YydHJhcChkZWxpdmVyX25vdGlmaWNhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBmb3IoaSA9IDA7IGkgPCBtZXNzYWdlX2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIC8qIHVwZGF0ZSB0aGUgbWF4IGNvdW50IHBvaW50ZXIgKi8KKyAgICAgICAgICAgIGlmIChtYXhfbWVzc2FnZV9jb3VudF9wdHJzW2ldKQorICAgICAgICAgICAgICAgICoobWF4X21lc3NhZ2VfY291bnRfcHRyc1tpXSkgPSBtZXNzYWdlX2NvdW50OworICAgICAgICAgICAgCisgICAgICAgICAgICBzZW5kX3YydHJhcChyZWFkeV9mb3JfZGVsaXZlcnlbaV0pOworICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQocmVhZHlfZm9yX2RlbGl2ZXJ5W2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworCisgICAgICAgIC8qIHJlY29yZCB0aGlzIGFzIHRoZSB0aW1lIHByb2Nlc3NlZCAqLworICAgICAgICAvKiBYWFg6IHRoaXMgbWF5IGNyZWVwIGJ5IGEgZmV3IHNlY29uZHMgd2hlbiBwcm9jZXNzaW5nIGFuZCBtYXliZSB3ZSB3YW50CisgICAgICAgICAgIHRvIGRvIHRoZSB0aW1lIHN0YW1wIGF0IHRoZSBiZWdpbm5pbmc/ICovCisgICAgICAgIG9iai0+bGFzdF9ydW4gPSB0aW1lKE5VTEwpOworICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0ZXJhdG9yKTsKKworICAgIC8qIGNhbGN1bGF0ZSB0aGUgbmV4dCB0aW1lIHRvIHNsZWVwIGZvciAqLworICAgIF9zY2hlZHVsZV9uZXh0X2V4ZWN1dGVfdGltZSgpOworfQorCitpbnQKK2NhbGN1bGF0ZV90aW1lX3VudGlsX25leHRfcnVuKGRlbGl2ZXJfYnlfbm90aWZ5ICppdCwgdGltZV90ICpub3cpIHsKKyAgICB0aW1lX3QgICAgICAgICAgbG9jYWxfbm93OworCisgICAgLyogaWYgd2Ugd2VyZW4ndCBwYXNzZWQgYSB2YWxpZCB0aW1lLCBmYWtlIGl0ICovCisgICAgaWYgKE5VTEwgPT0gbm93KSB7CisgICAgICAgIG5vdyA9ICZsb2NhbF9ub3c7CisgICAgICAgIHRpbWUoJmxvY2FsX25vdyk7CisgICAgfQorCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKGl0LT5sYXN0X3J1biAhPSAwLCAtMSk7CisKKyAgICAvKiBzZXQgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIG5leHQgcnVuICovCisgICAgaXQtPm5leHRfcnVuID0gaXQtPmxhc3RfcnVuICsgaXQtPmZyZXF1ZW5jeTsKKworICAgIC8qIGhvdyBsb25nIHVudGlsIHRoZSBuZXh0IHJ1bj8gKi8KKyAgICByZXR1cm4gaXQtPm5leHRfcnVuIC0gKm5vdzsKK30KKworc3RhdGljIHZvaWQKK19zY2hlZHVsZV9uZXh0X2V4ZWN1dGVfdGltZSh2b2lkKSB7CisgICAgdGltZV90ICAgICAgICAgICAgIGxvY2FsX25vdyA9IHRpbWUoTlVMTCk7CisgICAgaW50ICAgICAgICAgICAgICAgIHNsZWVwX2ZvciA9IElOVF9NQVg7CisgICAgaW50ICAgICAgICAgICAgICAgIG5leHRfdGltZTsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqaXRlcmF0b3I7CisgICAgZGVsaXZlcl9ieV9ub3RpZnkgKm9iajsKKworICAgIERFQlVHTVNHVEwoKCJkZWxpdmVyQnlOb3RpZnkiLCAiQ2FsY3VsYXRpbmcgc2NoZWR1bGluZyBuZWVkZWRcbiIpKTsKKworICAgIGlmIChhbGFybV9yZWcpIHsKKyAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKGFsYXJtX3JlZyk7CisgICAgICAgIGFsYXJtX3JlZyA9IDA7CisgICAgfQorCisgICAgaXRlcmF0b3IgPSBDT05UQUlORVJfSVRFUkFUT1IoZGVsaXZlcl9jb250YWluZXIpOworICAgIGlmIChOVUxMID09IGl0ZXJhdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Iob2JqID0gSVRFUkFUT1JfRklSU1QoaXRlcmF0b3IpOyBvYmo7CisgICAgICAgIG9iaiA9IElURVJBVE9SX05FWFQoaXRlcmF0b3IpKSB7CisgICAgICAgIG5leHRfdGltZSA9IGNhbGN1bGF0ZV90aW1lX3VudGlsX25leHRfcnVuKG9iaiwgJmxvY2FsX25vdyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJkZWxpdmVyQnlOb3RpZnkiLCAiICBvYmo6ICVkIChsYXN0PSVkLCBuZXh0X3J1bj0lZClcbiIsIG5leHRfdGltZSwgb2JqLT5sYXN0X3J1biwgb2JqLT5uZXh0X3J1bikpOworICAgICAgICBpZiAobmV4dF90aW1lIDwgc2xlZXBfZm9yKQorICAgICAgICAgICAgc2xlZXBfZm9yID0gbmV4dF90aW1lOworICAgIH0KKworICAgIGlmIChzbGVlcF9mb3IgIT0gSU5UX01BWCkgeworICAgICAgICBpZiAoc2xlZXBfZm9yIDwgMSkKKyAgICAgICAgICAgIHNsZWVwX2ZvciA9IDE7IC8qIGdpdmUgYXQgbGVhc3QgYSBzbWFsbCBwYXVzZSAqLworICAgICAgICBERUJVR01TR1RMKCgiZGVsaXZlckJ5Tm90aWZ5IiwgIk5leHQgZXhlY3V0aW9uIGluICVkIChtYXggPSAlZCkgc2Vjb25kc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgc2xlZXBfZm9yLCBJTlRfTUFYKSk7CisgICAgICAgIGFsYXJtX3JlZyA9IHNubXBfYWxhcm1fcmVnaXN0ZXIoc2xlZXBfZm9yLCAwLCAmZGVsaXZlcl9leGVjdXRlLCBOVUxMKTsKKyAgICB9CisKKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0ZXJhdG9yKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaCBiL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyYzM2NgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBERUxJVkVSQllOT1RJRllfSAorI2RlZmluZSBERUxJVkVSQllOT1RJRllfSCAxCisKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworY29uZmlnX2FkZF9taWIoTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQikKKwordm9pZCBpbml0X2RlbGl2ZXJCeU5vdGlmeSh2b2lkKTsKKwordm9pZCBwYXJzZV9kZWxpdmVyX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIGZyZWVfZGVsaXZlcl9jb25maWcodm9pZCk7CisKK1NOTVBBbGFybUNhbGxiYWNrIGRlbGl2ZXJfZXhlY3V0ZTsKKworI2RlZmluZSBORVRTTk1QX0RFTElWRVJfTk9fUEVSSU9EX09JRCAgIDB4MDEKKyNkZWZpbmUgTkVUU05NUF9ERUxJVkVSX05PX01TR19DT1VOVFMgICAweDAyCisKKy8qIGltcGxlbWVudGF0aW9uIGRldGFpbHMgKi8KK3R5cGVkZWYgc3RydWN0IGRlbGl2ZXJfYnlfbm90aWZ5X3MgeworICAgaW50ICAgICBmcmVxdWVuY3k7CisgICBpbnQgICAgIGxhc3RfcnVuOworICAgaW50ICAgICBuZXh0X3J1bjsKKyAgIG9pZCAgICAqdGFyZ2V0OworICAgc2l6ZV90ICB0YXJnZXRfbGVuOworICAgaW50ICAgICBtYXhfcGFja2V0X3NpemU7CisgICBpbnQgICAgIGZsYWdzOworfSBkZWxpdmVyX2J5X25vdGlmeTsKKworaW50IGNhbGN1bGF0ZV90aW1lX3VudGlsX25leHRfcnVuKGRlbGl2ZXJfYnlfbm90aWZ5ICppdCwgdGltZV90ICpub3cpOworCisjZW5kaWYgLyogZGVsaXZlckJ5Tm90aWZ5X2ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmgKaW5kZXggODBmM2UxZi4uNmI3Y2RkNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmgKQEAgLTMsNyArMywxMCBAQAogICovCiBjb25maWdfcmVxdWlyZShkaXNtYW4vZXZlbnQtbWliKQogY29uZmlnX3JlcXVpcmUoZGlzbWFuL2V4cHJlc3Npb24tbWliKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKy8qIHRoZSBzY2hlZHVsZSBtaWIgaXMgYWxsIGFib3V0IHdyaXRpbmcgKFNFVHMpICovIAogY29uZmlnX3JlcXVpcmUoZGlzbWFuL3NjaGVkdWxlKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIC8qIGNvbmZpZ19yZXF1aXJlKGRpc21hbi9uc2xvb2t1cC1taWIpICAgKi8KIC8qIGNvbmZpZ19yZXF1aXJlKGRpc21hbi9waW5nLW1pYikgICAgICAgKi8KIC8qIGNvbmZpZ19yZXF1aXJlKGRpc21hbi90cmFjZXJvdXRlLW1pYikgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMKaW5kZXggMzI3ZjhiYS4uYmM0ZmYwYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMKQEAgLTQsMTIgKzQsMTcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGlzbWFuX2RlYnVnZ2luZywgbGlibmV0c25tcG1pYnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobXRlZXZlbnQsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG10ZWV2ZW50X3JlbW92ZWVudHJ5LCBtdGVldmVudCkKKwogbmV0c25tcF90ZGF0YSAqZXZlbnRfdGFibGVfZGF0YTsKIAogICAgIC8qCkBAIC0yMyw3ICsyOCw3IEBACiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgImluaXQgZXZlbnQgY29udGFpbmVyXG4iKSk7CiAgICAgaWYgKCFldmVudF90YWJsZV9kYXRhKSB7CiAgICAgICAgIGV2ZW50X3RhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSgibXRlRXZlbnRUYWJsZSIsIDApOwotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiY3JlYXRlIGV2ZW50IGNvbnRhaW5lciAoJXgpXG4iLAorICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiY3JlYXRlIGV2ZW50IGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90YWJsZV9kYXRhKSk7CiAgICAgfQogfQpAQCAtNDMsMTIgKzQ4LDEyIEBACiAKICAgICAvKgogICAgICAqIEluc2VydCBmaXhlZCBldmVudHMgZm9yIHRoZSBkZWZhdWx0IHRyaWdnZXIgbm90aWZpY2F0aW9ucwotICAgICAqCisgICAgICogCiAgICAgICogTkI6IGludGVybmFsIGV2ZW50cyAod2l0aCBhbiBvd25lciBvZiAiX3NubXBkIikgd2lsbCBub3QgaW4KICAgICAgKiBmYWN0IHJlZmVyIHRvIHRoZSBtdGVPYmplY3RzVGFibGUgZm9yIHRoZSBwYXlsb2FkIHZhcmJpbmRzLgotICAgICAqIFRoZSByb3V0aW5lIG10ZU9iamVjdHNfaW50ZXJuYWxfdmJsaXN0KCkgaGFyZGNvZGVzIHRoZQorICAgICAqIFRoZSByb3V0aW5lIG10ZU9iamVjdHNfaW50ZXJuYWxfdmJsaXN0KCkgaGFyZGNvZGVzIHRoZSAKICAgICAgKiBhcHByb3ByaWF0ZSB2YXJiaW5kcyBmb3IgdGhlc2UgaW50ZXJuYWwgZXZlbnRzLgotICAgICAqICAgVGhpcyByb3V0aW5lIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHdoZW5ldmVyIGEgbmV3CisgICAgICogICBUaGlzIHJvdXRpbmUgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgd2hlbmV2ZXIgYSBuZXcgCiAgICAgICogaW50ZXJuYWwgZXZlbnQgaXMgYWRkZWQuCiAgICAgICovCiAgICAgaWYgKCBfZGVmYXVsdHNfaW5pdCkKQEAgLTExOSw2ICsxMjQsNyBAQAogICAgICAqCiAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ESVNNQU5fREVCVUdHSU5HCiB2b2lkCiBfbXRlRXZlbnRfZHVtcCh2b2lkKQogewpAQCAtMTM1LDEyICsxNDEsMTIgQEAKICAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICIoJXMsICVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kZXhlcy0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleGVzLT5uZXh0X3ZhcmlhYmxlLT52YWwuc3RyaW5nKSk7Ci0gICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV2ZW50OmR1bXAiLCAiOiAleCwgJXhcbiIsIHJvdywgZW50cnkpKTsKKyAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICI6ICVwLCAlcFxuIiwgcm93LCBlbnRyeSkpOwogICAgICAgICBpKys7CiAgICAgfQogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICJFdmVudFRhYmxlICVkIGVudHJpZXNcbiIsIGkpKTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRElTTUFOX0RFQlVHR0lORyAqLwogCiAvKgogICogQ3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgZXZlbnQgdGFibGUgCkBAIC0xOTYsNiArMjAyLDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTVRFRVZFTlRfUkVNT1ZFRU5UUlkKIC8qCiAgKiBSZW1vdmUgYSByb3cgZnJvbSB0aGUgZXZlbnQgdGFibGUgCiAgKi8KQEAgLTIwOCw5ICsyMTUsOSBAQAogICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLwogICAgIGVudHJ5ID0gKHN0cnVjdCBtdGVFdmVudCAqKQogICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3JvdyhldmVudF90YWJsZV9kYXRhLCByb3cpOwotICAgIGlmIChlbnRyeSkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTVRFRVZFTlRfUkVNT1ZFRU5UUlkgKi8KIAogICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAqCkBAIC0yMjIsMTAgKzIyOSwxMiBAQAogX210ZUV2ZW50X2ZpcmVfbm90aWZ5KCBzdHJ1Y3QgbXRlRXZlbnQgICAgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRlVHJpZ2dlciAgKnRyaWdnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqc3VmZml4LCBzaXplX3Qgc2Z4X2xlbiApOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogX210ZUV2ZW50X2ZpcmVfc2V0KCAgICBzdHJ1Y3QgbXRlRXZlbnQgICAgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRlVHJpZ2dlciAgKnRyaWdnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqc3VmZml4LCBzaXplX3Qgc2Z4X2xlbiApOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiBpbnQKIG10ZUV2ZW50X2ZpcmUoIGNoYXIgKm93bmVyLCBjaGFyICpldmVudCwgICAgICAvKiBFdmVudCB0byBpbnZva2UgICAgKi8KQEAgLTI2MSwxMSArMjcwLDEzIEBACiAgICAgICAgIF9tdGVFdmVudF9maXJlX25vdGlmeSggZW50cnksIHRyaWdnZXIsIHN1ZmZpeCwgc19sZW4gKTsKICAgICAgICAgZmlyZWQgPSAxOwogICAgIH0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgaWYgKGVudHJ5LT5tdGVFdmVudEFjdGlvbnMgJiBNVEVfRVZFTlRfU0VUKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6ZmlyZSIsICJGaXJpbmcgc2V0IGV2ZW50XG4iKSk7CiAgICAgICAgIF9tdGVFdmVudF9maXJlX3NldCggZW50cnksIHRyaWdnZXIsIHN1ZmZpeCwgc19sZW4gKTsKICAgICAgICAgZmlyZWQgPSAxOwogICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGlmICghZmlyZWQpCiAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6ZmlyZSIsICJNYXRjaGVkIGV2ZW50IGlzIGVtcHR5XG4iKSk7CkBAIC0zMzAsNyArMzQxLDcgQEAKICAgICB2cC0+bmV4dF92YXJpYWJsZSAgICAgPSB2Ymxpc3QtPm5leHRfdmFyaWFibGU7CiAgICAgdmJsaXN0LT5uZXh0X3ZhcmlhYmxlID0gdmFyOwogfQotI2VuZGlmCisjZW5kaWYgLyogX19OT1RfTkVFREVEICovCiAKIGludAogX210ZUV2ZW50X2ZpcmVfbm90aWZ5KCBzdHJ1Y3QgbXRlRXZlbnQgICAqZW50cnksICAgICAvKiBUaGUgZXZlbnQgdG8gZmlyZSAgKi8KQEAgLTMzOCw5ICszNDksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICBvaWQgKnN1ZmZpeCwgc2l6ZV90IHNmeF9sZW4gKSAvKiBNYXRjaGluZyBpbnN0YW5jZSAgKi8KIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnYyOwotICAgIG9pZCAgICBzbm1wdHJhcF9vaWRbXSAgID0geyAxLDMsNiwxLDYsMywxLDEsNCwxLDAgfTsKLSAgICBzaXplX3Qgc25tcHRyYXBfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc25tcHRyYXBfb2lkKTsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnM7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgICBzbm1wdHJhcF9vaWRbXTsKKyAgICBleHRlcm4gY29uc3Qgc2l6ZV90ICAgIHNubXB0cmFwX29pZF9sZW47CisgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICpzOwogCiAgICAgICAgICAvKgogICAgICAgICAgICogVGhlIEV2ZW50LU1JQiBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBvYmplY3RzIGZyb20gdGhlCkBAIC00MjEsNyArNDMyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAodjIgPSB2YXI7IHYyICYmIHYyLT5uZXh0X3ZhcmlhYmxlOyB2Mj12Mi0+bmV4dF92YXJpYWJsZSkKICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBtdGVPYmplY3RzX2ludGVybmFsX3ZibGlzdCh2MiwgIGVudHJ5LT5tdGVOb3RpZnlPYmplY3RzLCB0cmlnZ2VyLCBzKTsKKyAgICAgICAgICAgIG10ZU9iamVjdHNfaW50ZXJuYWxfdmJsaXN0KHYyLCBlbnRyeS0+bXRlTm90aWZ5T2JqZWN0cywgdHJpZ2dlciwgcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQzNCw2ICs0NDUsNyBAQAogfQogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBpbnQKIF9tdGVFdmVudF9maXJlX3NldCggc3RydWN0IG10ZUV2ZW50ICAgKmVudHJ5LCAgICAgIC8qIFRoZSBldmVudCB0byBmaXJlICovCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGVUcmlnZ2VyICp0cmlnZ2VyLCAgICAvKiBUcmlnZ2VyIHRoYXQgZmlyZWQgKi8KQEAgLTQ3Nyw0ICs0ODksNCBAQAogCiAgICAgLyogWFhYIC0gTmVlZCB0byBjaGVjayByZXN1bHQgKi8KIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaAppbmRleCBiMzU4NTE5Li4zYmU1YzZlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaApAQCAtNDYsNyArNDYsNyBAQAogICAgICAqIENvbHVtbiB2YWx1ZXMgZm9yIHRoZSBtYWluIG10ZUV2ZW50VGFibGUKICAgICAgKi8KICAgICBjaGFyICAgICAgICAgICAgbXRlRXZlbnRDb21tZW50W01URV9TVFIyX0xFTisxXTsKLSAgICBjaGFyICAgICAgICAgICAgbXRlRXZlbnRBY3Rpb25zOworICAgIHVfY2hhciAgICAgICAgICBtdGVFdmVudEFjdGlvbnM7CiAKICAgICAvKgogICAgICAqIENvbHVtbiB2YWx1ZXMgZm9yIE5vdGlmaWNhdGlvbiBldmVudHMgKG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMKaW5kZXggMWI5ZGU3OC4uMjQxOTJhNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CkBAIC0xMSw2ICsxMiw3IEBACiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlRXZlbnRzQ29uZiBtb2R1bGUgKi8KIHZvaWQKQEAgLTQ2OSw3ICs0NzEsNyBAQAogc3RvcmVfbXRlRVRhYmxlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwotICAgIGNoYXIgICAgICAgICAgICpjcHRyOworICAgIGNoYXIgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgKnZwOwogICAgIHNpemVfdCAgICAgICAgICB0aW50OwogICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CkBAIC00OTksMTIgKzUwMSwxMiBAQAogICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVFVGFibGUgIik7CiAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgIHZwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVFTmFtZTsgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZUV2ZW50Q29tbWVudDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVFTmFtZTsgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZUV2ZW50Q29tbWVudDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIC8qIC4uLiAoYnV0IHNraXAgdGhlIG10ZUV2ZW50QWN0aW9uIGZpZWxkKS4uLiAqLwogICAgICAgICB0aW50ID0gZW50cnktPmZsYWdzICYgKE1URV9FVkVOVF9GTEFHX0VOQUJMRUR8TVRFX0VWRU5UX0ZMQUdfQUNUSVZFKTsgCiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwpAQCAtNTIwLDE3ICs1MjIsMTcgQEAKICAgICAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZUVOb3RUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogICAgIAotICAgICAgICAgICAgdnAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZUVOYW1lOyAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7CisgICAgICAgICAgICBjcCA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlRU5hbWU7ICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKICAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlTm90aWZpY2F0aW9uOwogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09CSkVDVF9JRCwgY3B0ciwgJnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVOb3RpZmljYXRpb25fbGVuKTsKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZU5vdGlmeU93bmVyOyAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCA9IGVudHJ5LT5tdGVOb3RpZnlPYmplY3RzOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlTm90aWZ5T3duZXI7ICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwID0gZW50cnktPm10ZU5vdGlmeU9iamVjdHM7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CiAgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CiAgICAgICAgIH0KIApAQCAtNTM5LDE5ICs1NDEsMTkgQEAKICAgICAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZUVTZXRUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogICAgIAotICAgICAgICAgICAgdnAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZUVOYW1lOyAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7CisgICAgICAgICAgICBjcCA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlRU5hbWU7ICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKICAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlU2V0T0lEOwogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09CSkVDVF9JRCwgY3B0ciwgJnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVTZXRPSURfbGVuKTsKICAgICAgICAgICAgIHRpbnQgPSBlbnRyeS0+bXRlU2V0VmFsdWU7CiAgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fSU5URUdFUiwgICBjcHRyLCAmdGludCwgTlVMTCk7Ci0gICAgICAgICAgICB2cCA9IGVudHJ5LT5tdGVTZXRUYXJnZXQ7ICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAmdGludCApOwotICAgICAgICAgICAgdnAgPSBlbnRyeS0+bXRlU2V0Q29udGV4dDsgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwID0gZW50cnktPm10ZVNldFRhcmdldDsgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CisgICAgICAgICAgICBjcCA9IGVudHJ5LT5tdGVTZXRDb250ZXh0OyAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAmdGludCApOwogICAgICAgICAgICAgdGludCA9IGVudHJ5LT5mbGFncyAmIChNVEVfU0VUX0ZMQUdfT0JKV0lMRHxNVEVfU0VUX0ZMQUdfQ1RYV0lMRCk7IAogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX1VOU0lHTkVELCAgY3B0ciwgJnRpbnQsIE5VTEwpOwogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKaW5kZXggNTg5MmZiNy4uN2QyYzk0YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCkBAIC03LDExICs3LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudC5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfb2lkKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyogSW5pdGlhbGl6ZXMgdGhlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yMCw3ICsyOCw2IEBACiAgICAgc3RhdGljIG9pZCAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCA4OCwgMSwgNCwgMyB9OwogICAgIHNpemVfdCAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIChjb21iaW5lZCkgdGFibGUgY29udGFpbmVyIGlzIGF2YWlsYWJsZS4uLgpAQCAtMzAsMTEgKzM3LDE5IEBACiAgICAgLyoKICAgICAgKiAuLi4gdGhlbiBzZXQgdXAgdGhlIE1JQiBpbnRlcmZhY2UgdG8gdGhlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgc2xpY2UKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNDgsMTAgKzYzLDE4IEBACiAKICAgICAvKiBSZWdpc3RlciB0aGlzIHVzaW5nIHRoZSAoY29tbW9uKSBldmVudF90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBldmVudF90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKLSAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiRXZlbnQgTm90aWZ5IFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJFdmVudCBOb3RpZnkgVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3RhYmxlX2RhdGEpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KIAogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgdGFibGUgKi8KQEAgLTEwOSw2ICsxMzIsOCBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0yMzUsNiArMjYwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgKaW5kZXggYmUyYmNjNi4uYWJkNjExMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oCkBAIC05LDYgKzksNyBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYwppbmRleCAzNjQ2MTQ0Li5lZTY5NmYxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMKQEAgLTcsMTEgKzcsMjAgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyogSW5pdGlhbGl6ZXMgdGhlIG10ZUV2ZW50U2V0VGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yMCw3ICsyOSw2IEBACiAgICAgc3RhdGljIG9pZCAgbXRlRXZlbnRTZXRUYWJsZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCA4OCwgMSwgNCwgNCB9OwogICAgIHNpemVfdCAgICAgIG10ZUV2ZW50U2V0VGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobXRlRXZlbnRTZXRUYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIChjb21iaW5lZCkgdGFibGUgY29udGFpbmVyIGlzIGF2YWlsYWJsZS4uLgpAQCAtMzAsMTEgKzM4LDE5IEBACiAgICAgLyoKICAgICAgKiAuLi4gdGhlbiBzZXQgdXAgdGhlIE1JQiBpbnRlcmZhY2UgdG8gdGhlIG10ZUV2ZW50U2V0VGFibGUgc2xpY2UKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZUV2ZW50U2V0VGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50U2V0VGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZUV2ZW50U2V0VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50U2V0VGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNDgsMTAgKzY0LDE5IEBACiAKICAgICAvKiBSZWdpc3RlciB0aGlzIHVzaW5nIHRoZSAoY29tbW9uKSBldmVudF90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBldmVudF90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKLSAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiRXZlbnQgU2V0IFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJFdmVudCBTZXQgVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3RhYmxlX2RhdGEpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlRXZlbnRTZXRUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KKwogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIG10ZUV2ZW50U2V0VGFibGUgdGFibGUgKi8KIGludApAQCAtMTIzLDYgKzE0OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0yNzgsNiArMzA0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmgKaW5kZXggYjhjYjEyNC4uNzFlYzA5YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5oCkBAIC05LDYgKzksNyBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9tdGVFdmVudFNldFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZUV2ZW50U2V0VGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVFdmVudFNldFRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYwppbmRleCAxOWZlMGExLi5jNWI1MzRlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMKQEAgLTcsMTIgKzcsMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAidXRpbGl0aWVzL2lxdWVyeS5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudC5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeV9wZHVfc2Vzc2lvbikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobXRlZXZlbnRfcmVtb3ZlZW50cnkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qIEluaXRpYWxpemVzIHRoZSBtdGVFdmVudFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjEsNyArMzMsNiBAQAogICAgIHN0YXRpYyBvaWQgIG10ZUV2ZW50VGFibGVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDQsIDIgfTsKICAgICBzaXplX3QgICAgICBtdGVFdmVudFRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZUV2ZW50VGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMxLDExICs0MiwxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVFdmVudFRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVFdmVudFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVFdmVudFRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ5LDEwICs2OCwxOCBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgKGNvbW1vbikgZXZlbnRfdGFibGVfZGF0YSBjb250YWluZXIgKi8KICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgZXZlbnRfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7Ci0gICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgIkV2ZW50IFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJFdmVudCBUYWJsZSBjb250YWluZXIgKCVwKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdGFibGVfZGF0YSkpOwogfQogCit2b2lkCitzaHV0ZG93bl9tdGVFdmVudFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIG10ZUV2ZW50VGFibGUgdGFibGUgKi8KIGludApAQCAtMTExLDYgKzEzOCw4IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTMzOCw2ICszNjcsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogICAgIH0KICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50Om1pYiIsICJUYWJsZSBoYW5kbGVyLCBkb25lXG4iKSk7CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuaAppbmRleCBhN2Q3NTYwLi5hZGMxYzMwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmgKQEAgLTksNiArOSw3IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZUV2ZW50VGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fbXRlRXZlbnRUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG10ZUV2ZW50VGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jCmluZGV4IDEyM2FmN2YuLmNmOTUwYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYwpAQCAtMjM2LDggKzIzNiw3IEBACiAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCiAgICAgZW50cnkgPSAoc3RydWN0IG10ZU9iamVjdCAqKQogICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3JvdyhvYmplY3RzX3RhYmxlX2RhdGEsIHJvdyk7Ci0gICAgaWYgKGVudHJ5KQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYwppbmRleCAzZjkyOTNjLi43Njc5ODY1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYwpAQCAtNjIsNyArNjIsNyBAQAogICAgIGxpbmUgID0gcmVhZF9jb25maWdfcmVhZF9kYXRhKEFTTl9PQ1RFVF9TVFIsIGxpbmUsICZ2cCwgICAgJmxlbik7CiAgICAgbGluZSAgPSByZWFkX2NvbmZpZ19yZWFkX2RhdGEoQVNOX1VOU0lHTkVELCAgbGluZSwgJmluZGV4LCAmbGVuKTsKIAotICAgIERFQlVHTVNHKCgiZGlzbWFuOmV2ZW50OmNvbmYiLCAiKCVzLCAlcywgJWQpICIsIG93bmVyLCBvbmFtZSwgaW5kZXgpKTsKKyAgICBERUJVR01TRygoImRpc21hbjpldmVudDpjb25mIiwgIiglcywgJXMsICVsdSkgIiwgb3duZXIsIG9uYW1lLCBpbmRleCkpOwogCiAgICAgcm93ICAgPSBtdGVPYmplY3RzX2NyZWF0ZUVudHJ5KCBvd25lciwgb25hbWUsIGluZGV4LCAwICk7CiAgICAgLyogZW50cnkgPSAoc3RydWN0IG10ZU9iamVjdCAqKW5ldHNubXBfdGRhdGFfcm93X2VudHJ5KCByb3cgKTsgKi8KQEAgLTExMSw3ICsxMTEsNyBAQAogc3RvcmVfbXRlT1RhYmxlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwotICAgIGNoYXIgICAgICAgICAgICpjcHRyOworICAgIGNoYXIgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgKnZwOwogICAgIHNpemVfdCAgICAgICAgICB0aW50OwogICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CkBAIC0xMzEsMTYgKzEzMSwxNiBAQAogICAgICAgICBpZiAoIGVudHJ5LT5mbGFncyAmIE1URV9PQkpFQ1RfRkxBR19GSVhFRCApCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmNvbmYiLCAiICBTdG9yaW5nICglcyAlcyAlZClcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6Y29uZiIsICIgIFN0b3JpbmcgKCVzICVzICVsZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm10ZU93bmVyLCBlbnRyeS0+bXRlT05hbWUsIGVudHJ5LT5tdGVPSW5kZXgpKTsKICAgICAgICAgbWVtc2V0KGxpbmUsIDAsIHNpemVvZihsaW5lKSk7CiAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZU9UYWJsZSAiKTsKICAgICAgICAgY3B0ciA9IGxpbmUgKyBzdHJsZW4obGluZSk7CiAKLSAgICAgICAgdnAgPSBlbnRyeS0+bXRlT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKLSAgICAgICAgdnAgPSBlbnRyeS0+bXRlT05hbWU7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKKyAgICAgICAgY3AgPSBlbnRyeS0+bXRlT3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKKyAgICAgICAgY3AgPSBlbnRyeS0+bXRlT05hbWU7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX1VOU0lHTkVELCAgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVPSW5kZXgsIE5VTEwpOwogICAgICAgICB2cCAgID0gZW50cnktPm10ZU9iamVjdElEOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jCmluZGV4IDk2NDgyZTUuLmY3ZjZlMDIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMKQEAgLTcsMTEgKzcsMjEgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX29pZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3RydXRodmFsdWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKwogLyoqIEluaXRpYWxpemVzIHRoZSBtdGVPYmplY3RzVGFibGUgbW9kdWxlICovCiB2b2lkCiBpbml0X210ZU9iamVjdHNUYWJsZSh2b2lkKQpAQCAtMjAsNyArMzAsNiBAQAogICAgIHN0YXRpYyBvaWQgbXRlT2JqZWN0c1RhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA4OCwgMSwgMywgMSB9OwogICAgIHNpemVfdCAgICAgbXRlT2JqZWN0c1RhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZU9iamVjdHNUYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIG9iamVjdCB0YWJsZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLi4uCkBAIC0zMCwxMSArMzksMTkgQEAKICAgICAvKgogICAgICAqIC4uLiB0aGVuIHNldCB1cCB0aGUgTUlCIGludGVyZmFjZSB0byB0aGlzIHRhYmxlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVPYmplY3RzVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVPYmplY3RzVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlT2JqZWN0c1RhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlT2JqZWN0c1RhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZU9iamVjdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZU9iamVjdHNUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVPYmplY3RzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVPYmplY3RzVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC01MCw2ICs2NywxNSBAQAogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBvYmplY3RzX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOwogfQogCit2b2lkCitzaHV0ZG93bl9tdGVPYmplY3RzVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVPYmplY3RzVGFibGUgdGFibGUgKi8KIGludApAQCAtMTA1LDYgKzEzMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0zMDksNyArMzM2LDEyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgKaW5kZXggMTRiZmIyNi4uZjVjZDdiYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaApAQCAtOSw2ICs5LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfbXRlT2JqZWN0c1RhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZU9iamVjdHNUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG10ZU9iamVjdHNUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMKaW5kZXggMTFjYjViNy4uNWEwZGNiYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jCkBAIC00LDExICs0LDE2IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkaXNtYW5fZGVidWdnaW5nLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtdGV0cmlnZ2VyLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtdGV0cmlnZ2VyX3JlbW92ZWVudHJ5LCBtdGV0cmlnZ2VyKQorCiBuZXRzbm1wX3RkYXRhICp0cmlnZ2VyX3RhYmxlX2RhdGE7CiAKIG9pZCAgICBfc3lzVXBUaW1lX2luc3RhbmNlW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDMsIDAgfTsKQEAgLTMxLDcgKzM2LDcgQEAKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gY3JlYXRlIG10ZVRyaWdnZXJUYWJsZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJjcmVhdGUgdHJpZ2dlciBjb250YWluZXIgKCV4KVxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgImNyZWF0ZSB0cmlnZ2VyIGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcl90YWJsZV9kYXRhKSk7CiAgICAgfQogICAgIG10ZVRyaWdnZXJGYWlsdXJlcyA9IDA7CkBAIC01Myw2ICs1OCw3IEBACiAgICAgICoKICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RJU01BTl9ERUJVR0dJTkcKIHZvaWQKIF9tdGVUcmlnZ2VyX2R1bXAodm9pZCkKIHsKQEAgLTY5LDEyICs3NSwxMiBAQAogICAgICAgICBERUJVR01TRygoImRpc21hbjpldmVudDpkdW1wIiwgIiglcywgJXMpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleGVzLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPmluZGV4ZXMtPm5leHRfdmFyaWFibGUtPnZhbC5zdHJpbmcpKTsKLSAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICI6ICV4LCAleFxuIiwgcm93LCBlbnRyeSkpOworICAgICAgICBERUJVR01TRygoImRpc21hbjpldmVudDpkdW1wIiwgIjogJXAsICVwXG4iLCByb3csIGVudHJ5KSk7CiAgICAgICAgIGkrKzsKICAgICB9CiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpkdW1wIiwgIlRyaWdnZXJUYWJsZSAlZCBlbnRyaWVzXG4iLCBpKSk7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RJU01BTl9ERUJVR0dJTkcgKi8KIAogLyoKICAqIENyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRyaWdnZXIgdGFibGUgCkBAIC0xNDIsNiArMTQ4LDcgQEAKICAgICByZXR1cm4gcm93OwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTVRFVFJJR0dFUl9SRU1PVkVFTlRSWQogLyoKICAqIFJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0cmlnZ2VyIHRhYmxlIAogICovCkBAIC0xNTksNiArMTY2LDcgQEAKICAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NVEVUUklHR0VSX1JFTU9WRUVOVFJZICovCiAKICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgKaW5kZXggMmIzZWI0OC4uMTk2MjZiMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oCkBAIC0xMjIsOCArMTIyLDggQEAKICAgICAvKgogICAgICAqIENvbHVtbiB2YWx1ZXMgZm9yIEV4aXN0ZW5jZSB0ZXN0cyAobXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlKQogICAgICAqLwotICAgIGNoYXIgICAgICAgICAgICBtdGVURXhUZXN0OwotICAgIGNoYXIgICAgICAgICAgICBtdGVURXhTdGFydHVwOworICAgIHVfY2hhciAgICAgICAgICBtdGVURXhUZXN0OworICAgIHVfY2hhciAgICAgICAgICBtdGVURXhTdGFydHVwOwogICAgIGNoYXIgICAgICAgICAgICBtdGVURXhPYmpPd25lcltNVEVfU1RSMV9MRU4rMV07CiAgICAgY2hhciAgICAgICAgICAgIG10ZVRFeE9iamVjdHNbIE1URV9TVFIxX0xFTisxXTsKICAgICBjaGFyICAgICAgICAgICAgbXRlVEV4RXZPd25lclsgTVRFX1NUUjFfTEVOKzFdOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKaW5kZXggYWQ0NjlkNy4uZWQxZWMzMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCkBAIC03LDExICs3LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjAsNyArMjgsNiBAQAogICAgIHN0YXRpYyBvaWQgbXRlVEJvb2xUYWJsZV9vaWRbXSAgICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDIsIDUgfTsKICAgICBzaXplX3QgICAgIG10ZVRCb29sVGFibGVfb2lkX2xlbiAgPSBPSURfTEVOR1RIKG10ZVRCb29sVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMwLDExICszNywxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUQm9vbFRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVEJvb2xUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUQm9vbFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVEJvb2xUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC01MSw2ICs2NiwxNCBAQAogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJUcmlnZ2VyIEJvb2wgVGFibGVcbiIpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTEyOCw2ICsxNTEsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CiAgICAgICAgICAqLwpAQCAtMjg1LDYgKzMwOSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCmluZGV4IGQyZDJkY2IuLmYyZGRkNzcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuaApAQCAtOSw2ICs5LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYwppbmRleCBjMDE1ZTI0Li5lN2JiNjliIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CkBAIC0xNCw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlckNvbmYgbW9kdWxlICovCiB2b2lkCkBAIC0yNCwxMyArMjYsMTYgQEAKICAgICAvKgogICAgICAqIFJlZ2lzdGVyIGNvbmZpZyBoYW5kbGVyIGZvciB1c2VyLWxldmVsIChmaXhlZCkgdHJpZ2dlcnMgLi4uCiAgICAgICovCi0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoIm1vbml0b3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9tdGVNb25pdG9yLCAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJpZ2dlcm5hbWUgWy1JXSBbLWkgT0lEIHwgLW8gT0lEXSogWy1lIGV2ZW50XSBleHByZXNzaW9uICIpOwotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkZWZhdWx0TW9uaXRvcnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzLCBOVUxMLCAieWVzfG5vIik7Ci0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImxpbmtVcERvd25Ob3RpZmljYXRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfbGlua1VwRG93bl90cmFwcywgICAgTlVMTCwgInllc3xubyIpOworICAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCJtb25pdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9tdGVNb25pdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyaWdnZXJuYW1lIFstSV0gWy1pIE9JRCB8IC1vIE9JRF0qIFstZSBldmVudF0gZXhwcmVzc2lvbiAiKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigiZGVmYXVsdE1vbml0b3JzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICJ5ZXN8bm8iKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigibGlua1VwRG93bk5vdGlmaWNhdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2xpbmtVcERvd25fdHJhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgInllc3xubyIpOwogCiAgICAgLyoKICAgICAgKiAuLi4gZm9yIHBlcnNpc3RlbnQgc3RvcmFnZSBvZiB2YXJpb3VzIGV2ZW50IHRhYmxlIGVudHJpZXMgLi4uCkBAIC0xNDAsMTEgKzE0NSwxMSBAQAogCiAKIHZvaWQKLXBhcnNlX210ZU1vbml0b3IoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCitwYXJzZV9tdGVNb25pdG9yKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpsaW5lKQogewogICAgIGNoYXIgICBidWZbICBTUFJJTlRfTUFYX0xFTl07CiAgICAgY2hhciAgIHRuYW1lW01URV9TVFIxX0xFTisxXTsKLSAgICBjaGFyICAqY3A7CisgICAgY29uc3QgY2hhciAgKmNwOwogICAgIGxvbmcgICB0ZXN0ID0gMDsKIAogICAgIGNoYXIgICBlbmFtZVtNVEVfU1RSMV9MRU4rMV07CkBAIC0xNjMsNyArMTY4LDcgQEAKICAgICBjaGFyICAgb2lkX25hbWVfYnVmW1NQUklOVF9NQVhfTEVOXTsKICAgICBvaWQgICAgbmFtZV9idWZbTUFYX09JRF9MRU5dOwogICAgIHNpemVfdCBuYW1lX2J1Zl9sZW47Ci0gICAgbG9uZyAgIG9wICAgID0gMDsKKyAgICB1X2NoYXIgb3AgICAgPSAwOwogICAgIGxvbmcgICB2YWx1ZSA9IDA7CiAKICAgICBzdHJ1Y3QgbXRlT2JqZWN0ICAqb2JqZWN0OwpAQCAtMTgzLDkgKzE4OCw5IEBACiAgICAgbWVtc2V0KCBidWYsICAgMCwgc2l6ZW9mKGJ1ZikpOwogICAgIG1lbXNldCggdG5hbWUsIDAsIHNpemVvZih0bmFtZSkpOwogICAgIG1lbXNldCggZW5hbWUsIDAsIHNpemVvZihlbmFtZSkpOwotICAgIGZvciAoY3AgPSBjb3B5X253b3JkKGxpbmUsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOworICAgIGZvciAoY3AgPSBjb3B5X253b3JkX2NvbnN0KGxpbmUsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgOwotICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCAgIGJ1ZiwgU1BSSU5UX01BWF9MRU4pKSB7CisgICAgICAgICBjcCA9IGNvcHlfbndvcmRfY29uc3QoY3AsICAgYnVmLCBTUFJJTlRfTUFYX0xFTikpIHsKIAogICAgICAgICBpZiAoIGJ1ZlswXSA9PSAnLScgKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGJ1ZlsxXSkgewpAQCAtMTk4LDcgKzIwMyw3IEBACiAgICAgICAgICAgICBjYXNlICdyJzoKICAgICAgICAgICAgIGNhc2UgJ3UnOgogICAgICAgICAgICAgICAgIC8qIHNraXAgb3B0aW9uIHBhcmFtZXRlciAqLwotICAgICAgICAgICAgICAgIGNwID0gc2tpcF90b2tlbiggY3AgKTsKKyAgICAgICAgICAgICAgICBjcCA9IHNraXBfdG9rZW5fY29uc3QoIGNwICk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdEJzoKICAgICAgICAgICAgIGNhc2UgJ0knOgpAQCAtMjEyLDcgKzIxNyw3IEBACiAgICAgICAgICAgICAgICAgICogICAgICBIYW5kbGUgZWl0aGVyIGNhc2UuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKGNwICYmICpjcCAhPSAnLScpCi0gICAgICAgICAgICAgICAgICAgIGNwID0gc2tpcF90b2tlbiggY3AgKTsKKyAgICAgICAgICAgICAgICAgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KCBjcCApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnMCc6CiAgICAgICAgICAgICBjYXNlICcxJzoKQEAgLTI3Niw3ICsyODEsNyBAQAogICAgICAgICAqIE90aGVyd2lzZSB0aGUgZmlyc3QgdG9rZW4gaXMgdGhlIE9JRCB0byBiZSBtb25pdG9yZWQuCiAgICAgICAgICogICBTa2lwIGl0IGFuZCBsb29rIGF0IHRoZSBuZXh0IHRva2VuIChpZiBhbnkpLgogICAgICAgICAqLwotICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsICAgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgIGNwID0gY29weV9ud29yZF9jb25zdChjcCwgICBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgaWYgKGNwKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhIG51bWVyaWMgdmFsdWUsIHRoZW4gaXQnbGwgYmUgdGhlIE1JTgpAQCAtMjg0LDcgKzI4OSw3IEBACiAgICAgICAgICAgICAgKiBPdGhlcndpc2UgaXQnbGwgYmUgdGhlIG9wZXJhdGlvbiBmaWVsZCBvZiBhCiAgICAgICAgICAgICAgKiAgIGJvb2xlYW4gdGVzdCAodGhlIHRoaXJkIGZvcm0pCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICggaXNkaWdpdChidWZbMF0pIHx8IGJ1ZlswXSA9PSAnLScgKQorICAgICAgICAgICAgaWYgKCBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKShidWZbMF0pKSB8fCBidWZbMF0gPT0gJy0nICkKICAgICAgICAgICAgICAgICB0ZXN0ID0gTVRFX1RSSUdHRVJfVEhSRVNIT0xEOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRlc3QgPSBNVEVfVFJJR0dFUl9CT09MRUFOOwpAQCAtMzE1LDkgKzMyMCw5IEBACiAgICAgICogTm93IHN0YXJ0IHBhcnNpbmcgYWdhaW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlyZWN0aXZlLAogICAgICAqICAgZXh0cmFjdGluZyB0aGUgdmFyaW91cyBvcHRpb25zLi4uCiAgICAgICovCi0gICAgZm9yIChjcCA9IGNvcHlfbndvcmQobGluZSwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgZm9yIChjcCA9IGNvcHlfbndvcmRfY29uc3QobGluZSwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICA7Ci0gICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsICAgYnVmLCBTUFJJTlRfTUFYX0xFTikpIHsKKyAgICAgICAgIGNwID0gY29weV9ud29yZF9jb25zdChjcCwgICBidWYsIFNQUklOVF9NQVhfTEVOKSkgewogCiAgICAgICAgIGlmIChidWZbMF0gPT0gJy0nICkgewogICAgICAgICAgICAgc3dpdGNoIChidWZbMV0pIHsKQEAgLTMzMiw3ICszMzcsNyBAQAogICAgICAgICAgICAgICAgIG1lbXNldCggb2lkX25hbWVfYnVmLCAwLCBzaXplb2Yob2lkX25hbWVfYnVmKSk7CiAgICAgICAgICAgICAgICAgbWVtc2V0KCAgICAgbmFtZV9idWYsIDAsIHNpemVvZiggICAgbmFtZV9idWYpKTsKICAgICAgICAgICAgICAgICBuYW1lX2J1Zl9sZW4gPSBNQVhfT0lEX0xFTjsKLSAgICAgICAgICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIG9pZF9uYW1lX2J1ZiwgTVRFX1NUUjFfTEVOKTsKKyAgICAgICAgICAgICAgICBjcCA9IGNvcHlfbndvcmRfY29uc3QoY3AsIG9pZF9uYW1lX2J1ZiwgTVRFX1NUUjFfTEVOKTsKICAgICAgICAgICAgICAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKG9pZF9uYW1lX2J1ZiwgbmFtZV9idWYsICZuYW1lX2J1Zl9sZW4pKSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkaXNjb250aW51aXR5IE9JRDogJXNcbiIsIG9pZF9uYW1lX2J1Zik7CiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoInVua25vd24gZGlzY29udGludWl0eSBPSUQiKTsKQEAgLTM0Niw3ICszNTEsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIAogICAgICAgICAgICAgY2FzZSAnZSc6ICAgLyogIGV2ZW50ICovCi0gICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZChjcCwgZW5hbWUsIE1URV9TVFIxX0xFTik7CisgICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZF9jb25zdChjcCwgZW5hbWUsIE1URV9TVFIxX0xFTik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgCiAgICAgICAgICAgICBjYXNlICdJJzogICAvKiB2YWx1ZSBpbnN0YW5jZSAqLwpAQCAtMzY3LDcgKzM3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZHgrKzsKLSAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICBvYmplY3QgPSBtdGVPYmplY3RzX2FkZE9JRCggInNubXBkLmNvbmYiLCB0bmFtZSwgaWR4LCBidWYsIDAgKTsKICAgICAgICAgICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVW5rbm93biBwYXlsb2FkIE9JRDogJXNcbiIsIGJ1Zik7CkBAIC0zNzksNyArMzg0LDcgQEAKICAgICAKICAgICAgICAgICAgIGNhc2UgJ28nOiAgIC8qICBvYmplY3QgICovCiAgICAgICAgICAgICAgICAgaWR4Kys7Ci0gICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZF9jb25zdChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbXRlT2JqZWN0c19hZGRPSUQoICJzbm1wZC5jb25mIiwgdG5hbWUsIGlkeCwgYnVmLCAxICk7CiAgICAgICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlVua25vd24gcGF5bG9hZCBPSUQ6ICVzXG4iLCBidWYpOwpAQCAtMzkwLDcgKzM5NSw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgCiAgICAgICAgICAgICBjYXNlICdyJzogICAvKiAgcmVwZWF0IGZyZXF1ZW5jeSAqLwotICAgICAgICAgICAgICAgIGNwICAgICA9IGNvcHlfbndvcmQoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOworICAgICAgICAgICAgICAgIGNwICAgICA9IGNvcHlfbndvcmRfY29uc3QoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgICAgICAgIHJlcGVhdCA9IHN0cnRvdWwoYnVmLCBOVUxMLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAKQEAgLTQwNiw3ICs0MTEsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIAogICAgICAgICAgICAgY2FzZSAndSc6ICAgLyogIHVzZXIgKi8KLSAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICBzZXNzICAgPSBuZXRzbm1wX2lxdWVyeV91c2VyX3Nlc3Npb24oYnVmKTsKICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBzZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1c2VyIG5hbWUgJXMgbm90IGZvdW5kXG4iLCBidWYpOwpAQCAtNDQ3LDcgKzQ1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IE1URV9FWElTVF9BQlNFTlQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgKiAuLi4gdGhlbiBleHRyYWN0IHRoZSBtb25pdG9yZWQgT0lELgpAQCAtNDU1LDcgKzQ2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBtZW1jcHkob2lkX25hbWVfYnVmLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgY3AgPSBOVUxMOyAgLyogVG8gdGVybWluYXRlIHRoZSBwcm9jZXNzaW5nIGxvb3AgKi8KLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpjb25mIiwgIiVzOiBFeGlzdCAoJXMsICVsZClcbiIsCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6Y29uZiIsICIlczogRXhpc3QgKCVzLCAlZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuYW1lLCBvaWRfbmFtZV9idWYsIG9wKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIApAQCAtNDY1LDcgKzQ3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAqICAgaWRlbnRpZnkgdGhlIGJvb2xlYW4gb3BlcmF0b3IgLi4uCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBtZW1jcHkob2lkX25hbWVfYnVmLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZlswXSA9PSAnIScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBNVEVfQk9PTF9VTkVRVUFMOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZlswXSA9PSAnPScpIHsKQEAgLTQ4NywxMCArNDkyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAqIC4uLiB0aGVuIGV4dHJhY3QgdGhlIGNvbXBhcmlzb24gdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAqICAgICAoaWdub3JpbmcgYW55dGhpbmcgdGhhdCByZW1haW5zKQogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgY3AgICAgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgY3AgICAgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b2woYnVmLCBOVUxMLCAwKTsKICAgICAgICAgICAgICAgICAgICAgY3AgPSBOVUxMOyAgLyogVG8gdGVybWluYXRlIHRoZSBwcm9jZXNzaW5nIGxvb3AgKi8KLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpjb25mIiwgIiVzOiBCb29sICglcywgJWxkLCAlbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmNvbmYiLCAiJXM6IEJvb2wgKCVzLCAlZCwgJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bmFtZSwgb2lkX25hbWVfYnVmLCBvcCwgdmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgCkBAIC01MDEsNyArNTA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIG1lbWNweShvaWRfbmFtZV9idWYsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgICAgICAgICAgICBtZW1zZXQoICAgICAgICAgYnVmLCAgIDAsIFNQUklOVF9NQVhfTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgY3AgID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgICAgIGNwICA9IGNvcHlfbndvcmRfY29uc3QoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b2woYnVmLCBOVUxMLCAwKTsKICAgICAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTY4OSw3ICs2OTQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b2woY3AsIE5VTEwsIDApOwogICAgICAgICAgICAgZW50cnktPm10ZVRUaERGYWxsVmFsdWUgID0gdmFsdWU7Ci0gICAgICAgICAgICBjcCA9IHNraXBfdG9rZW4oY3ApOworICAgICAgICAgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KGNwKTsKICAgICAgICAgICAgIHZhbHVlID0gc3RydG9sKGNwLCBOVUxMLCAwKTsKICAgICAgICAgICAgIGVudHJ5LT5tdGVUVGhEUmlzZVZhbHVlICA9IHZhbHVlOwogICAgICAgICAgICAgLyoKQEAgLTcyOSw3ICs3MzQsNyBAQAogfQogCiB2b2lkCi1wYXJzZV9saW5rVXBEb3duX3RyYXBzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQorcGFyc2VfbGlua1VwRG93bl90cmFwcyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqbGluZSkKIHsKICAgICAvKgogICAgICAqIFhYWCAtIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCBhY2NvcmRpbmcgdG8gdGhlCkBAIC03NDgsNyArNzUzLDcgQEAKIAogCiB2b2lkCi1wYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQorcGFyc2VfZGVmYXVsdF9tdGVNb25pdG9ycyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqbGluZSkKIHsKICAgICBpZiAoc3RybmNtcCggbGluZSwgInllcyIsIDMpID09IDApIHsKICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpjb25mIiwgIlJlZ2lzdGVyaW5nIGRlZmF1bHQgbW9uaXRvcnNcbiIpKTsKQEAgLTEyNjgsNyArMTI3Myw3IEBACiBzdG9yZV9tdGVUVGFibGUoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKIHsKICAgICBjaGFyICAgICAgICAgICAgbGluZVtTTk1QX01BWEJVRl07Ci0gICAgY2hhciAgICAgICAgICAgKmNwdHI7CisgICAgY2hhciAgICAgICAgICAgKmNwdHIsICpjcDsKICAgICB2b2lkICAgICAgICAgICAqdnA7CiAgICAgc2l6ZV90ICAgICAgICAgIHRpbnQ7CiAgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKQEAgLTEyOTgsMTIgKzEzMDMsMTIgQEAKICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlVFRhYmxlICIpOwogICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZVRyaWdnZXJDb21tZW50OyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZVRyaWdnZXJDb21tZW50OyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICAvKgogICAgICAgICAgKiAuLi4gKGJ1dCBza2lwIHRoZSBtdGVUcmlnZ2VyVGVzdCBhbmQKICAgICAgICAgICogICAgICBhc3NvcnRlZCBib29sZWFuIGZsYWcgZmllbGRzKS4uLgpAQCAtMTMxMSwxNiArMTMxNiwxNiBAQAogICAgICAgICB2cCAgID0gZW50cnktPm10ZVRyaWdnZXJWYWx1ZUlEOwogICAgICAgICB0aW50ID0gZW50cnktPm10ZVRyaWdnZXJWYWx1ZUlEX2xlbjsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09CSkVDVF9JRCwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUcmlnZ2VyVGFyZ2V0OyAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUcmlnZ2VyQ29udGV4dDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUcmlnZ2VyVGFyZ2V0OyAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUcmlnZ2VyQ29udGV4dDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKICAgICAgICAgdGludCA9IGVudHJ5LT5tdGVUcmlnZ2VyRnJlcXVlbmN5OwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZVRyaWdnZXJPT3duZXI7ICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZVRyaWdnZXJPYmplY3RzOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZVRyaWdnZXJPT3duZXI7ICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZVRyaWdnZXJPYmplY3RzOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICB0aW50ID0gZW50cnktPmZsYWdzICYKICAgICAgICAgICAgICAgICAgIChNVEVfVFJJR0dFUl9GTEFHX1ZXSUxEICB8TVRFX1RSSUdHRVJfRkxBR19DV0lMRHwKICAgICAgICAgICAgICAgICAgICBNVEVfVFJJR0dFUl9GTEFHX0VOQUJMRUR8TVRFX1RSSUdHRVJfRkxBR19BQ1RJVkUpOwpAQCAtMTMzNywxMCArMTM0MiwxMCBAQAogICAgICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlVERUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVE5hbWU7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVEZWx0YURpc2NvbnRJRDsKICAgICAgICAgICAgIHRpbnQgPSBlbnRyeS0+bXRlRGVsdGFEaXNjb250SURfbGVuOwpAQCAtMTM2MiwyNCArMTM2NywyNCBAQAogICAgICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlVEV4VGFibGUgIik7CiAgICAgICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUTmFtZTsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKICAgICAgICAgICAgIHRpbnQgPSAoZW50cnktPm10ZVRFeFRlc3QgICAgJiAweGZmKSA8PCA4OwogICAgICAgICAgICAgdGludHw9IChlbnRyeS0+bXRlVEV4U3RhcnR1cCAmIDB4ZmYpOwogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX1VOU0lHTkVELCAgY3B0ciwgJnRpbnQsIE5VTEwgKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVURXhPYmpPd25lcjsgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEV4T2JqZWN0czsgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRFeE9iak93bmVyOyAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVURXhPYmplY3RzOyAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVURXhFdk93bmVyOyAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEV4RXZlbnQ7ICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRFeEV2T3duZXI7ICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVURXhFdmVudDsgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwogICAgICAgICB9CkBAIC0xMzg4LDEwICsxMzkzLDEwIEBACiAgICAgICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVUQmxUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVE5hbWU7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgdGludCA9ICBlbnRyeS0+bXRlVEJvb2xDb21wYXJpc29uOwogICAgICAgICAgICAgdGludCB8PSAoZW50cnktPmZsYWdzICYgTVRFX1RSSUdHRVJfRkxBR19CU1RBUlQpOwpAQCAtMTM5OSwxNSArMTQwNCwxNSBAQAogICAgICAgICAgICAgdGludCA9ICBlbnRyeS0+bXRlVEJvb2xWYWx1ZTsKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9JTlRFR0VSLCAgIGNwdHIsICZ0aW50LCBOVUxMICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEJvb2xPYmpPd25lcjsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUQm9vbE9iamVjdHM7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVEJvb2xPYmpPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUQm9vbE9iamVjdHM7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUQm9vbEV2T3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEJvb2xFdmVudDsgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRCb29sRXZPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUQm9vbEV2ZW50OyAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwogICAgICAgICB9CkBAIC0xNDE2LDEwICsxNDIxLDEwIEBACiAgICAgICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVUVGhUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVE5hbWU7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX1VOU0lHTkVELCBjcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cnktPm10ZVRUaFN0YXJ0dXAsICAgIE5VTEwgKTsKQEAgLTE0MzIsMjggKzE0MzcsMjggQEAKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9JTlRFR0VSLCAgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVUVGhERmFsbFZhbHVlLCBOVUxMICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoT2JqT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoT2JqZWN0czsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhPYmpPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhPYmplY3RzOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoUmlzZU93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaFJpc2VFdmVudDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUVGhGYWxsT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoRmFsbEV2ZW50OyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaFJpc2VPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhSaXNlRXZlbnQ7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoRmFsbE93bmVyOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaEZhbGxFdmVudDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaERSaXNlT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoRFJpc2VFdmVudDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUVGhERmFsbE93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaERGYWxsRXZlbnQ7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoRFJpc2VPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhEUmlzZUV2ZW50OyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaERGYWxsT3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoREZhbGxFdmVudDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogCiAgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgKaW5kZXggNTYwYzNlYS4uYmZiY2ZjYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgKQEAgLTcsOSArNyw5IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJDb25mKHZvaWQpOwotdm9pZCAgICAgICAgICAgIHBhcnNlX210ZU1vbml0b3IoIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLXZvaWQgICAgICAgICAgICBwYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzKCBjb25zdCBjaGFyICosIGNoYXIgKik7Ci12b2lkICAgICAgICAgICAgcGFyc2VfbGlua1VwRG93bl90cmFwcyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkICAgICAgICAgICAgcGFyc2VfbXRlTW9uaXRvciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwordm9pZCAgICAgICAgICAgIHBhcnNlX2RlZmF1bHRfbXRlTW9uaXRvcnMoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQgICAgICAgICAgICBwYXJzZV9saW5rVXBEb3duX3RyYXBzKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIAogdm9pZCAgICAgICAgICAgIHBhcnNlX210ZVRUYWJsZSggIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIHZvaWQgICAgICAgICAgICBwYXJzZV9tdGVURFRhYmxlKCBjb25zdCBjaGFyICosIGNoYXIgKik7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCmluZGV4IGUwOTI5ODIuLmMyYzJlOGUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCkBAIC03LDExICs3LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX29pZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3RydXRodmFsdWUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlckRlbHRhVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yMSw2ICsyNyw3IEBACiAgICAgc2l6ZV90ICAgICAgbXRlVERlbHRhVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobXRlVERlbHRhVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKyAgICBpbnQgICAgICAgICByYzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMwLDExICszNywxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVUcmlnZ2VyRGVsdGFUYWJsZSBzbGljZQogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlVHJpZ2dlckRlbHRhVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRGVsdGFUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURGVsdGFUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVREZWx0YVRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJEZWx0YVRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckRlbHRhVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVERlbHRhVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURGVsdGFUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ3LDcgKzYyLDEwIEBACiAgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9NVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFOwogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgKGNvbW1vbikgdHJpZ2dlcl90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwotICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCB0cmlnZ2VyX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOworICAgIHJjID0gbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIHRyaWdnZXJfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnLT5oYW5kbGVyLT5uZXh0KTsKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiVHJpZ2dlciBEZWx0YSBUYWJsZVxuIikpOwogfQogCkBAIC0xMDksNiArMTI3LDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTI0OCw2ICsyNjcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKaW5kZXggMjUwMjZlZS4uMjJiNjgzZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYwpAQCAtNywxMSArNywxOCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjAsNyArMjcsNyBAQAogICAgIHN0YXRpYyBvaWQgbXRlVEV4aXN0VGFibGVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDIsIDQgfTsKICAgICBzaXplX3QgICAgIG10ZVRFeGlzdFRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZVRFeGlzdFRhYmxlX29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisgICAgaW50ICAgICAgICByYzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMwLDExICszNywxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUgc2xpY2UKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURXhpc3RUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRFeGlzdFRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURXhpc3RUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRFeGlzdFRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNDcsNyArNjIsMTEgQEAKICAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OX01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVDsKIAogICAgIC8qIFJlZ2lzdGVyIHRoaXMgdXNpbmcgdGhlIChjb21tb24pIHRyaWdnZXJfdGFibGVfZGF0YSBjb250YWluZXIgKi8KLSAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgdHJpZ2dlcl90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKKyAgICByYyA9IG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCB0cmlnZ2VyX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnLT5oYW5kbGVyLT5uZXh0KTsKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiVHJpZ2dlciBFeGlzdCBUYWJsZVxuIikpOwogfQogCkBAIC0xMjMsNiArMTQyLDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTI2NCw2ICsyODQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMKaW5kZXggNjIzOTYxMi4uODhjMmY4YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYwpAQCAtNywxMiArNywyNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5X3BkdV9zZXNzaW9uKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl91aW50KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobXRldHJpZ2dlcl9yZW1vdmVlbnRyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3RydXRodmFsdWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBtdGVUcmlnZ2VyVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yMSw3ICszNiw2IEBACiAgICAgc3RhdGljIG9pZCAgbXRlVHJpZ2dlclRhYmxlX29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDg4LCAxLCAyLCAyIH07CiAgICAgc2l6ZV90ICAgICAgbXRlVHJpZ2dlclRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZVRyaWdnZXJUYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIChjb21iaW5lZCkgdGFibGUgY29udGFpbmVyIGlzIGF2YWlsYWJsZS4uLgpAQCAtMzEsMTEgKzQ1LDE5IEBACiAgICAgLyoKICAgICAgKiAuLi4gdGhlbiBzZXQgdXAgdGhlIE1JQiBpbnRlcmZhY2UgdG8gdGhlIG10ZVRyaWdnZXJUYWJsZSBzbGljZQogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlVHJpZ2dlclRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNTIsNiArNzQsMTUgQEAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiVHJpZ2dlciBUYWJsZVxuIikpOwogfQogCit2b2lkCitzaHV0ZG93bl9tdGVUcmlnZ2VyVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVUcmlnZ2VyVGFibGUgdGFibGUgKi8KIGludApAQCAtMTUyLDYgKzE4Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC00NjMsNyArNDk1LDE0IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICAvKiogc2V0IHVwIHRvIHNhdmUgcGVyc2lzdGVudCBzdG9yZSAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKKwogICAgICAgICBicmVhazsKKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaAppbmRleCBlMzgyNjEyLi5jNWMzOTNhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oCkBAIC0xMSw2ICsxMSw3IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9tdGVUcmlnZ2VyVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVUcmlnZ2VyVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYwppbmRleCAxZjY2NDllLi41YWVkMGM4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCkBAIC03LDExICs3LDE4IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjAsNyArMjcsNiBAQAogICAgIHN0YXRpYyBvaWQgbXRlVFRocmVzaFRhYmxlX29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDg4LCAxLCAyLCA2IH07CiAgICAgc2l6ZV90ICAgICBtdGVUVGhyZXNoVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobXRlVFRocmVzaFRhYmxlX29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKICAgICAvKgogICAgICAqIEVuc3VyZSB0aGUgKGNvbWJpbmVkKSB0YWJsZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLi4uCkBAIC0zMCwxMSArMzYsMTkgQEAKICAgICAvKgogICAgICAqIC4uLiB0aGVuIHNldCB1cCB0aGUgTUlCIGludGVyZmFjZSB0byB0aGUgbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVFRocmVzaFRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVFRocmVzaFRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUVGhyZXNoVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUVGhyZXNoVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC01MSw2ICs2NSwxNSBAQAogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJUcmlnZ2VyIFRocmVzaG9sZCBUYWJsZVxuIikpOwogfQogCit2b2lkCitzaHV0ZG93bl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUgdGFibGUgKi8KIGludApAQCAtMTY1LDYgKzE4OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0zNTgsNiArMzgyLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKaW5kZXggMjgyY2M2Ny4uODBmNWYyYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaApAQCAtOSw2ICs5LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jCmluZGV4IDQxYmJlMjkuLmE3NTllMmQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmMKQEAgLTcsMTEgKzcsMTQgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImRpc21hbi9leHByL2V4cEVycm9yVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisKIC8qIEluaXRpYWxpemVzIHRoZSBleHBFeHByZXNzaW9uRXJyb3JUYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfZXhwRXJyb3JUYWJsZSh2b2lkKQpAQCAtNDgsNyArNTEsNyBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgKGNvbW1vbikgZXhwcl90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBleHByX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOwotICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgIkV4cHJlc3Npb24gRXJyb3IgVGFibGUgY29udGFpbmVyICgleClcbiIsCisgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiRXhwcmVzc2lvbiBFcnJvciBUYWJsZSBjb250YWluZXIgKCVwKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3RhYmxlX2RhdGEpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5jCmluZGV4IDFjMjRiNzguLmM5MjQxNDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb24uYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmMKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJpbml0IGV4cHJlc3Npb24gY29udGFpbmVyXG4iKSk7CiAgICAgaWYgKCFleHByX3RhYmxlX2RhdGEpIHsKICAgICAgICAgIGV4cHJfdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJleHBFeHByZXNzaW9uVGFibGUiLCAwKTsKLSAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgImNyZWF0ZSBleHByZXNzaW9uIGNvbnRhaW5lciAoJXgpXG4iLAorICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiY3JlYXRlIGV4cHJlc3Npb24gY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3RhYmxlX2RhdGEpKTsKICAgICB9CiB9CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV4cHI6ZHVtcCIsICIoJXMsICVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kZXhlcy0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleGVzLT5uZXh0X3ZhcmlhYmxlLT52YWwuc3RyaW5nKSk7Ci0gICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV4cHI6ZHVtcCIsICI6ICV4LCAleFxuIiwgcm93LCBlbnRyeSkpOworICAgICAgICBERUJVR01TRygoImRpc21hbjpleHByOmR1bXAiLCAiOiAlcCwgJXBcbiIsIHJvdywgZW50cnkpKTsKICAgICAgICAgaSsrOwogICAgIH0KICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6ZHVtcCIsICJFeHByZXNzaW9uVGFibGUgJWQgZW50cmllc1xuIiwgaSkpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMKaW5kZXggNjE3NDRlMS4uODI2ZDY3OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jCkBAIC00LDEzICs0LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKwogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQorCiAvKiBJbml0aWFsaXplcyB0aGUgZXhwRXhwcmVzc2lvbkNvbmYgbW9kdWxlICovCiB2b2lkCiBpbml0X2V4cEV4cHJlc3Npb25Db25mKHZvaWQpCkBAIC0yMjYsNyArMjMyLDcgQEAKIHN0b3JlX2V4cEVUYWJsZShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewogICAgIGNoYXIgICAgICAgICAgICAgICAgICBsaW5lW1NOTVBfTUFYQlVGXTsKLSAgICBjaGFyICAgICAgICAgICAgICAgICAqY3B0cjsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAqY3B0ciwgKmNwOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICp2cDsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgdGludDsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAqcm93OwpAQCAtMjU2LDE3ICsyNjIsMTcgQEAKICAgICAgICAgc3RyY2F0KGxpbmUsICJfZXhwRVRhYmxlICIpOwogICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICB2cCAgID0gZW50cnktPmV4cE93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPmV4cE5hbWU7ICAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cE93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cE5hbWU7ICAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogCi0gICAgICAgIHZwICAgPSBlbnRyeS0+ZXhwRXhwcmVzc2lvbjsgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+ZXhwRXhwcmVzc2lvbjsgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIHRpbnQgPSBlbnRyeS0+ZXhwVmFsdWVUeXBlOwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwotICAgICAgICB2cCAgID0gZW50cnktPmV4cENvbW1lbnQ7ICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cENvbW1lbnQ7ICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICB0aW50ID0gZW50cnktPmV4cERlbHRhSW50ZXJ2YWw7CiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9VTlNJR05FRCwgIGNwdHIsICZ0aW50LCBOVUxMICk7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMKaW5kZXggYzA3ZTVmYy4uNzlhYTcxNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMKQEAgLTcsMTIgKzcsMjEgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAidXRpbGl0aWVzL2lxdWVyeS5oIgogI2luY2x1ZGUgImRpc21hbi9leHByL2V4cEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5X3BkdV9zZXNzaW9uKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKiBJbml0aWFsaXplcyB0aGUgZXhwRXhwcmVzc2lvblRhYmxlIG1vZHVsZSAqLwogdm9pZAogaW5pdF9leHBFeHByZXNzaW9uVGFibGUodm9pZCkKQEAgLTQ5LDcgKzU4LDcgQEAKIAogICAgIC8qIFJlZ2lzdGVyIHRoaXMgdXNpbmcgdGhlIChjb21tb24pIGV4cHJfdGFibGVfZGF0YSBjb250YWluZXIgKi8KICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgZXhwcl90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKLSAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJFeHByZXNzaW9uIFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgIkV4cHJlc3Npb24gVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90YWJsZV9kYXRhKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdC5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmMKaW5kZXggZGZmZTRlNC4uYzI3NDM3YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmMKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJpbml0IGV4cE9iamVjdCBjb250YWluZXJcbiIpKTsKICAgICBpZiAoIWV4cE9iamVjdF90YWJsZV9kYXRhKSB7CiAgICAgICAgICBleHBPYmplY3RfdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJleHBPYmplY3RUYWJsZSIsIDApOwotICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiY3JlYXRlIGV4cE9iamVjdCBjb250YWluZXIgKCV4KVxuIiwKKyAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgImNyZWF0ZSBleHBPYmplY3QgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBPYmplY3RfdGFibGVfZGF0YSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYwppbmRleCA2ZTE4YzIyLi42NDA2OWQ5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5jCkBAIC00LDEyICs0LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBPYmplY3QuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKKwogLyogSW5pdGlhbGl6ZXMgdGhlIGV4cE9iamVjdENvbmYgbW9kdWxlICovCiB2b2lkCiBpbml0X2V4cE9iamVjdENvbmYodm9pZCkKQEAgLTExNSw3ICsxMTgsNyBAQAogc3RvcmVfZXhwT1RhYmxlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CiAgICAgY2hhciAgICAgICAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwotICAgIGNoYXIgICAgICAgICAgICAgICAgICpjcHRyOworICAgIGNoYXIgICAgICAgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAgKnZwOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICB0aW50OwogICAgIG5ldHNubXBfdGRhdGFfcm93ICAgICpyb3c7CkBAIC0xNDUsMTAgKzE0OCwxMCBAQAogICAgICAgICBzdHJjYXQobGluZSwgIl9leHBPVGFibGUgIik7CiAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgIHZwICAgPSBlbnRyeS0+ZXhwT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgIHZwICAgPSBlbnRyeS0+ZXhwTmFtZTsgICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+ZXhwT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+ZXhwTmFtZTsgICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIHRpbnQgPSBlbnRyeS0+ZXhwT2JqZWN0SW5kZXg7CiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9VTlNJR05FRCwgIGNwdHIsICZ0aW50LCBOVUxMICk7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jCmluZGV4IDZlNjBiODEuLmFkZGE0MzggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYwpAQCAtNywxMSArNywxOCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBPYmplY3QuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyogSW5pdGlhbGl6ZXMgdGhlIGV4cE9iamVjdFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtNTEsNyArNTgsNyBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgY29tbW9uIGV4cE9iamVjdF90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBleHBPYmplY3RfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7Ci0gICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiRXhwcmVzc2lvbiBPYmplY3QgVGFibGUgY29udGFpbmVyICgleClcbiIsCisgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiRXhwcmVzc2lvbiBPYmplY3QgVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwT2JqZWN0X3RhYmxlX2RhdGEpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jCmluZGV4IDk3YmNiYWIuLmQ3NGRiZDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZVRhYmxlLmMKQEAgLTU5LDcgKzU5LDcgQEAKICAgICBpZiAoIWluZGV4ZXMgfHwgIWluZGV4ZXMtPm5leHRfdmFyaWFibGUgfHwKICAgICAgICAgIWluZGV4ZXMtPm5leHRfdmFyaWFibGUtPm5leHRfdmFyaWFibGUgKSB7CiAgICAgICAgIC8qIFhYWCAtIFNob3VsZG4ndCBoYXBwZW4hICovCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJnZXQgKCVkKSBlbnRyeSAoJXMsICVzLCAiLCBtb2RlLApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKG1vZGUgPT0gTU9ERV9HRVRORVhUIHx8IG1vZGUgPT0gTU9ERV9HRVRCVUxLKSB7CiAgICAgICAgICAgICBleHAgPSBleHBFeHByZXNzaW9uX2dldEZpcnN0RW50cnkoKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgImZpcnN0IGVudHJ5ICgleClcbiIsIGV4cCApKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgImZpcnN0IGVudHJ5ICglcClcbiIsIGV4cCApKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgImluY29tcGxldGUgcmVxdWVzdFxuIiApKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgLyogTm8gbWF0Y2ggKi8KQEAgLTg2LDcgKzg2LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBleHAgPSBleHBFeHByZXNzaW9uX2dldEVudHJ5KCAoY2hhciopaW5kZXhlcy0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKWluZGV4ZXMtPm5leHRfdmFyaWFibGUtPnZhbC5zdHJpbmcpOwotICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ1c2luZyBlbnRyeSAoJXgpXG4iLCBleHAgKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgInVzaW5nIGVudHJ5ICglcClcbiIsIGV4cCApKTsKICAgICB9CiAKICAgICAvKgpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIH0KIE5FWFRfRVhQOgogICAgICAgICBleHAgPSBleHBFeHByZXNzaW9uX2dldE5leHRFbnRyeSggZXhwLT5leHBPd25lciwgZXhwLT5leHBOYW1lICk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgInVzaW5nIG5leHQgZW50cnkgKCV4KVxuIiwgZXhwICkpOworICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ1c2luZyBuZXh0IGVudHJ5ICglcClcbiIsIGV4cCApKTsKICAgICB9CiAgICAgaWYgKCFleHApIHsKICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAibm8gbW9yZSBlbnRyaWVzXG4iKSk7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoIHZwLT52YWwub2JqaWRbMF0gIT0gMCApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gaW5zdGFuY2UgKCVkKVxuIiwgdnAtPnZhbC5vYmppZFswXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICJub24temVybyBpbnN0YW5jZSAoJSIgTkVUU05NUF9QUklvICJkKVxuIiwgdnAtPnZhbC5vYmppZFswXSkpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAvKiBJbnZhbGlkIGluc3RhbmNlICovCiAgICAgICAgIH0KIApAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXMgPSBleHBWYWx1ZV9ldmFsdWF0ZUV4cHJlc3Npb24oIGV4cCwgTlVMTCwgMCApOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAic2NhbGFyIGdldCByZXR1cm5lZCAoJXgpXG4iLCByZXMpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgInNjYWxhciBnZXQgcmV0dXJuZWQgKCVwKVxuIiwgcmVzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogT3RoZXJ3aXNlLCBza2lwIHRoZSBsZWFkaW5nICcuMCcgYW5kIHVzZQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJlcyA9IGV4cFZhbHVlX2V2YWx1YXRlRXhwcmVzc2lvbiggZXhwLCB2cC0+dmFsLm9iamlkKzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAtPnZhbF9sZW4vc2l6ZW9mKG9pZCktMSk7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ3L2NhcmQgZ2V0IHJldHVybmVkICgleClcbiIsIHJlcykpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAidy9jYXJkIGdldCByZXR1cm5lZCAoJXApXG4iLCByZXMpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmICggdnAtPnZhbF9sZW4gPiAwICYmIHZwLT52YWwub2JqaWRbMF0gIT0gMCApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gbmV4dCBpbnN0YW5jZSAoJWQpXG4iLCB2cC0+dmFsLm9iamlkWzBdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIG5leHQgaW5zdGFuY2UgKCUiIE5FVFNOTVBfUFJJbyAiZClcbiIsIHZwLT52YWwub2JqaWRbMF0pKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgLyogQWxsIHZhbGlkIGluc3RhbmNlcyBzdGFydCB3aXRoIC4wICovCiAgICAgICAgIH0KICAgICAgICAgcGxlbiA9IGV4cC0+ZXhwUHJlZml4X2xlbjsKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCB2cCwgQVNOX1BSSVZfSU1QTElFRF9PQkpFQ1RfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIqKW51bGxJbnN0YW5jZSwgMypzaXplb2Yob2lkKSk7CiAgICAgICAgICAgICByZXMgPSBleHBWYWx1ZV9ldmFsdWF0ZUV4cHJlc3Npb24oIGV4cCwgTlVMTCwgMCApOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAic2NhbGFyIG5leHQgcmV0dXJuZWQgKCV4KVxuIiwgcmVzKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJzY2FsYXIgbmV4dCByZXR1cm5lZCAoJXApXG4iLCByZXMpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBOb3cgY29tZXMgdGhlIGludGVyZXN0aW5nIGNhc2UgLSBmaW5kaW5nIHRoZQpAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICAgICAgICAgICAgbGVuID0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlcyA9IGV4cFZhbHVlX2V2YWx1YXRlRXhwcmVzc2lvbiggZXhwLCB2cC0+dmFsLm9iamlkKzEsIGxlbi0xKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgIncvY2FyZCBuZXh0IHJldHVybmVkICgleClcbiIsIHJlcykpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAidy9jYXJkIG5leHQgcmV0dXJuZWQgKCVwKVxuIiwgcmVzKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuYwppbmRleCBiN2IyNTdlLi4xZmViM2VlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFcnJvclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXJyb3JUYWJsZS5jCkBAIC02NiwxMyArNjYsMTcgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZQlFWFBFUlJPUlRJTUUgIDEKLSAgICB7RVhQRVJST1JUSU1FLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCAxfX0sCisgICAge0VYUEVSUk9SVElNRSwgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgMX19LAogI2RlZmluZQlFWFBFUlJPUklOREVYIDIKLSAgICB7RVhQRVJST1JJTkRFWCwgQVNOX0lOVEVHRVIsICBST05MWSwgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0VYUEVSUk9SSU5ERVgsIEFTTl9JTlRFR0VSLCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZQlFWFBFUlJPUkNPREUgMwotICAgIHtFWFBFUlJPUkNPREUsICBBU05fSU5URUdFUiwgIFJPTkxZLCB2YXJfZXhwRXJyb3JUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7RVhQRVJST1JDT0RFLCAgQVNOX0lOVEVHRVIsICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lCUVYUEVSUk9SSU5TVEFOQ0UgNAotICAgIHtFWFBFUlJPUklOU1RBTkNFLCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCA0fX0KKyAgICB7RVhQRVJST1JJTlNUQU5DRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgNH19CiB9OwogCiBleHRlcm4gc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpleHBFeHByZXNzaW9uVGFibGVTdG9yYWdlOwpAQCAtMTM1LDQgKzEzOSw2IEBACiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+ZXhwRXJyb3JJbnN0YW5jZUxlbiAqIHNpemVvZihvaWQpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5leHBFcnJvckluc3RhbmNlOwogICAgIH0KKworICAgIHJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYwppbmRleCBkYTBlMTlhLi4yMTI5NTJkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYwpAQCAtMjEsNiArMjEsNyBAQAogICogVGhpcyBzaG91bGQgYWx3YXlzIGJlIGluY2x1ZGVkIGZpcnN0IGJlZm9yZSBhbnl0aGluZyBlbHNlIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTQ1LDYgKzQ2LDEwIEBACiAjaW5jbHVkZSAiZXhwT2JqZWN0VGFibGUuaCIKICNpbmNsdWRlICJleHBWYWx1ZVRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRkb21haW5fc3VwcG9ydCkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogZXhwRXhwcmVzc2lvblRhYmxlX3ZhcmlhYmxlc19vaWQ6CkBAIC02NSwxOSArNzAsMjYgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZQlFWFBFWFBSRVNTSU9OICAzCi0gICAge0VYUEVYUFJFU1NJT04sICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7RVhQRVhQUkVTU0lPTiwgICAgICAgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZQlFWFBFWFBSRVNTSU9OVkFMVUVUWVBFIDQKLSAgICB7RVhQRVhQUkVTU0lPTlZBTFVFVFlQRSwgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtFWFBFWFBSRVNTSU9OVkFMVUVUWVBFLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lCUVYUEVYUFJFU1NJT05DT01NRU5UIDUKLSAgICB7RVhQRVhQUkVTU0lPTkNPTU1FTlQsICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtFWFBFWFBSRVNTSU9OQ09NTUVOVCwgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lCUVYUEVYUFJFU1NJT05ERUxUQUxOVEVSVkFMIDYKLSAgICB7RVhQRVhQUkVTU0lPTkRFTFRBTE5URVJWQUwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0VYUEVYUFJFU1NJT05ERUxUQUxOVEVSVkFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNn19LAogI2RlZmluZQlFWFBFWFBSRVNTSU9OUFJFRklYIDcKLSAgICB7RVhQRVhQUkVTU0lPTlBSRUZJWCwgICAgQVNOX09CSkVDVF9JRCwgUk9OTFksICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgN319LAorICAgIHtFWFBFWFBSRVNTSU9OUFJFRklYLCAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDd9fSwKICNkZWZpbmUJRVhQRVhQUkVTU0lPTkVSUk9SUyA4Ci0gICAge0VYUEVYUFJFU1NJT05FUlJPUlMsICAgIEFTTl9VTlNJR05FRCwgIFJPTkxZLCAgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDh9fSwKKyAgICB7RVhQRVhQUkVTU0lPTkVSUk9SUywgICAgQVNOX1VOU0lHTkVELCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA4fX0sCiAjZGVmaW5lCUVYUEVYUFJFU1NJT05FTlRSWVNUQVRVUyAgOQotICAgIHtFWFBFWFBSRVNTSU9ORU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA5fX0KKyAgICB7RVhQRVhQUkVTU0lPTkVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgOX19CiB9OwogCiAvKgpAQCAtMzExLDkgKzMyMyw3IEBACiAgICAgY2hhciAgICAgICAgICAgKmNwdHI7CiAgICAgc2l6ZV90ICAgICAgICAgIHRtcGludDsKICAgICBzdHJ1Y3QgZXhwRXhwcmVzc2lvblRhYmxlX2RhdGEgKlN0b3JhZ2VUbXA7Ci0gICAgc3RydWN0IGV4cE9iamVjdFRhYmxlX2RhdGEgKk9iamVjdFN0b3JhZ2VUbXA7Ci0gICAgc3RydWN0IGV4cFZhbHVlVGFibGVfZGF0YSAqVmFsdWVTdG9yYWdlVG1wOwotICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpbmRleCwgKmhjX29iamVjdCwgKmhjX3ZhbHVlOworICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpbmRleDsKIAogICAgIERFQlVHTVNHVEwoKCJleHBFeHByZXNzaW9uVGFibGUiLCAic3RvcmluZyBkYXRhLi4uICAiKSk7CiAKQEAgLTU3NCw2ICs1ODQsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNjU4LDYgKzY2OSw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC03NDYsNiArNzU4LDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTgzMCw2ICs4NDMsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTE1NCw2ICsxMTY4LDcgQEAKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5oYXZlX2NvcGllZF9hdXRoX2luZm8gPSAxOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYwppbmRleCA4ZDE4NTVkLi5lMDU3ZjU2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0zNCw2ICszNSw5IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBtaW5pbWFsIGluY2x1ZGUgZGlyZWN0aXZlcyAKQEAgLTY2LDIzICs3MCwzMiBAQAogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lCUVYUE9CSkVDVElEICAyCi0gICAge0VYUE9CSkVDVElELCAgICAgICAgIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtFWFBPQkpFQ1RJRCwgICAgICAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUJRVhQT0JKRUNUSURXSUxEQ0FSRCAzCi0gICAge0VYUE9CSkVDVElEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtFWFBPQkpFQ1RJRFdJTERDQVJELCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDN9fSwKICNkZWZpbmUJRVhQT0JKRUNUU0FNUExFVFlQRSA0Ci0gICAge0VYUE9CSkVDVFNBTVBMRVRZUEUsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtFWFBPQkpFQ1RTQU1QTEVUWVBFLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDR9fSwKICNkZWZpbmUJRVhQT0JKRUNUREVMVEFESVNDT05USU5VSVRZSUQgNQotICAgIHtFWFBPQkpFQ1RERUxUQURJU0NPTlRJTlVJVFlJRCwgIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtFWFBPQkpFQ1RERUxUQURJU0NPTlRJTlVJVFlJRCwgIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgNX19LAogI2RlZmluZQlFWFBPQkpFQ1RESVNDT05USU5VSVRZSURXSUxEQ0FSRCA2Ci0gICAge0VYUE9CSkVDVERJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCA2fX0sCisgICAge0VYUE9CSkVDVERJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCA2fX0sCiAjZGVmaW5lCUVYUE9CSkVDVERJU0NPTlRJTlVJVFlJRFRZUEUgNwotICAgIHtFWFBPQkpFQ1RESVNDT05USU5VSVRZSURUWVBFLCAgICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtFWFBPQkpFQ1RESVNDT05USU5VSVRZSURUWVBFLCAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgN319LAogI2RlZmluZQlFWFBPQkpFQ1RDT05ESVRJT05BTCAgOAotICAgIHtFWFBPQkpFQ1RDT05ESVRJT05BTCwgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCA4fX0sCisgICAge0VYUE9CSkVDVENPTkRJVElPTkFMLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDh9fSwKICNkZWZpbmUJRVhQT0JKRUNUQ09ORElUSU9OQUxXSUxEQ0FSRCAgOQotICAgIHtFWFBPQkpFQ1RDT05ESVRJT05BTFdJTERDQVJELCAgICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgOX19LAorICAgIHtFWFBPQkpFQ1RDT05ESVRJT05BTFdJTERDQVJELCAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgOX19LAogI2RlZmluZQlFWFBPQkpFQ1RFTlRSWVNUQVRVUyAgMTAKLSAgICB7RVhQT0JKRUNURU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDEwfX0KKyAgICB7RVhQT0JKRUNURU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDEwfX0KIH07CiAKIApAQCAtMjA3LDcgKzIyMCw2IEBACiBwYXJzZV9leHBPYmplY3RUYWJsZShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKIHsKICAgICBzaXplX3QgICAgICAgICAgdG1waW50OwotICAgIG9pZCAgICAgICAgICAgICp0bXBvaWQgPSBOVUxMOwogICAgIHN0cnVjdCBleHBPYmplY3RUYWJsZV9kYXRhICpTdG9yYWdlVG1wID0KICAgICAgICAgU05NUF9NQUxMT0NfU1RSVUNUKGV4cE9iamVjdFRhYmxlX2RhdGEpOwogCkBAIC0zOTQsNiArNDA2LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBERUJVR01TR1RMKCgiZXhwT2JqZWN0VGFibGUiLCAic3RvcmFnZSBkb25lXG4iKSk7CisgICAgcmV0dXJuIDA7CiB9CiAKIApAQCAtNTY0LDYgKzU3Nyw3IEBACiAgICAgICAgICAqIHByZXZpb3VzIHZhbHVlcywgYXMgdGhlc2UgYXJlIGZyb20gYSBkaWZmZXJlbnQgb2JqZWN0PyAgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTY0NCw2ICs2NTgsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNzI1LDcgKzc0MCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTgyMiw2ICs4MzcsNyBAQAogICAgICAgICAgKiBwcmV2aW91cyB2YWx1ZXMsIGFzIHRoZXNlIGFyZSBmcm9tIGEgZGlmZmVyZW50IG9iamVjdD8gIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC05MDUsNyArOTIxLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtOTg5LDcgKzEwMDUsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xMDgzLDYgKzEwOTksNyBAQAogICAgICAgICAgKiBwcmV2aW91cyB2YWx1ZXMsIGFzIHRoZXNlIGFyZSBmcm9tIGEgZGlmZmVyZW50IG9iamVjdD8gIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xMTY3LDcgKzExODQsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNDM4LDYgKzE0NTUsNyBAQAogICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPmV4cE9iamVjdEVudHJ5U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmMKaW5kZXggMGY1ZTBiNi4uNmIzMTVjNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cFZhbHVlVGFibGUuYwpAQCAtNzYsMjEgKzc2LDI5IEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUJRVhQVkFMVUVDT1VOVEVSMzJWQUwgMgotICAgIHtFWFBWQUxVRUNPVU5URVIzMlZBTCwgIEFTTl9DT1VOVEVSLCAgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtFWFBWQUxVRUNPVU5URVIzMlZBTCwgIEFTTl9DT1VOVEVSLCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZQlFWFBWQUxVRVVOU0lHTkVEMzJWQUwgMwotICAgIHtFWFBWQUxVRVVOU0lHTkVEMzJWQUwsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgM319LAorICAgIHtFWFBWQUxVRVVOU0lHTkVEMzJWQUwsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZQlFWFBWQUxVRVRJTUVUSUNLU1ZBTCA0Ci0gICAge0VYUFZBTFVFVElNRVRJQ0tTVkFMLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0VYUFZBTFVFVElNRVRJQ0tTVkFMLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lCUVYUFZBTFVFSU5URUdFUjMyVkFMIDUKLSAgICB7RVhQVkFMVUVJTlRFR0VSMzJWQUwsICBBU05fSU5URUdFUiwgIFJPTkxZLCB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7RVhQVkFMVUVJTlRFR0VSMzJWQUwsICBBU05fSU5URUdFUiwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDV9fSwKICNkZWZpbmUJRVhQVkFMVUVJUEFERFJFU1NWQUwgNgotICAgIHtFWFBWQUxVRUlQQUREUkVTU1ZBTCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtFWFBWQUxVRUlQQUREUkVTU1ZBTCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgNn19LAogI2RlZmluZQlFWFBWQUxVRU9DVEVUU1RSSU5HVkFMIDcKLSAgICB7RVhQVkFMVUVPQ1RFVFNUUklOR1ZBTCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgN319LAorICAgIHtFWFBWQUxVRU9DVEVUU1RSSU5HVkFMLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA3fX0sCiAjZGVmaW5lCUVYUFZBTFVFT0lEVkFMICA4Ci0gICAge0VYUFZBTFVFT0lEVkFMLCAgICAgICBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0VYUFZBTFVFT0lEVkFMLCAgICAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA4fX0sCiAjZGVmaW5lCUVYUFZBTFVFQ09VTlRFUjY0VkFMICA5Ci0gICAge0VYUFZBTFVFQ09VTlRFUjY0VkFMLCBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA5fX0KKyAgICB7RVhQVkFMVUVDT1VOVEVSNjRWQUwsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDl9fQogfTsKIAogCkBAIC0yMzcsNyArMjQ1LDYgQEAKICAgICBjaGFyICAgICAgICAgICAqcmVzdWx0LCAqcmVzdWx0YmFrOwogICAgIGNoYXIgICAgICAgICAgICp0ZW1wLCAqdGVtcGJhazsKICAgICBjaGFyICAgICAgICAgICAgaW50Y2hhclsxMF07Ci0gICAgaW50ICAgICAgICAgICAgIGRvbGxhcjEsIGRvbGxhcjI7CiAgICAgaW50ICAgICAgICAgICAgIGkgPSAwLCBqLCBrLCBsOwogICAgIGxvbmcgICAgICAgICAgICB2YWx1ZTsKICAgICB1bnNpZ25lZCBsb25nICAgcmVzdWx0X3VfbG9uZzsKQEAgLTMxNCw3ICszMjEsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlX2xpc3QgKnZhcnM7CiAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOwotICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMTsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIEluaXRpYWxpemUgdGhlIFNOTVAgbGlicmFyeQpAQCAtMzYxLDcgKzM2Nyw3IEBACiAKICAgICAgICAgICAgICAgICB2YXJzID0gcmVzcG9uc2UtPnZhcmlhYmxlczsKICAgICAgICAgICAgICAgICB2YWx1ZSA9ICoodmFycy0+dmFsLmludGVnZXIpOwotICAgICAgICAgICAgICAgIHNwcmludGYoaW50Y2hhciwgIiV1IiwgdmFsdWUpOworICAgICAgICAgICAgICAgIHNwcmludGYoaW50Y2hhciwgIiVsdSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDw9IHN0cmxlbihpbnRjaGFyKTsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBpbnRjaGFyW2sgLSAxXTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CkBAIC00MjUsMTUgKzQzMSwxMSBAQAogCiAKIHZvaWQKLWJ1aWxkX3ZhbHVldGFibGUoKQorYnVpbGRfdmFsdWV0YWJsZSh2b2lkKQogewogICAgIHN0cnVjdCBleHBFeHByZXNzaW9uVGFibGVfZGF0YSAqZXhwc3RvcmFnZTsKICAgICBzdHJ1Y3QgZXhwT2JqZWN0VGFibGVfZGF0YSAqb2Jqc3RvcmFnZSwgKm9iamZvdW5kID0gTlVMTDsKICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaW5kZXgsICpvYmplY3RfaGNpbmRleDsKLSAgICBjaGFyICAgICAgICAgICAqb3duZXI7Ci0gICAgc2l6ZV90ICAgICAgICAgIG93bmVyX2xlbjsKLSAgICBjaGFyICAgICAgICAgICAqbmFtZTsKLSAgICBzaXplX3QgICAgICAgICAgbmFtZV9sZW47CiAgICAgY2hhciAgICAgICAgICAgKmV4cHJlc3Npb247CiAgICAgb2lkICAgICAgICAgICAgKmluZGV4OwogICAgIGludCAgICAgICAgICAgICBpID0gMCwgaiwgbDsKQEAgLTUxNyw5ICs1MTksNyBAQAogICAgICAgICAgICAgb2lkICAgICAgICAgICAgKm5leHRfT0lEOwogICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIG5leHRfT0lEX2xlbjsKICAgICAgICAgICAgIHRhZ2dldE9JRF9sZW4gPSBvYmpmb3VuZC0+ZXhwT2JqZWN0SURMZW47Ci0gICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGVfbGlzdCAqdmFyczsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBzdGF0dXM7Ci0gICAgICAgICAgICBpbnQgICAgICAgICAgICAgY291bnQgPSAxOwogICAgICAgICAgICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc3M7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogSW5pdGlhbGl6ZSB0aGUgU05NUCBsaWJyYXJ5CkBAIC02MzEsMTIgKzYzMSw3IEBACiAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQogewogCi0gICAgc3RhdGljIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyczsKLSAgICBzaXplX3QgICAgICAgICAgbmV3bGVuID0KLSAgICAgICAgKmxlbmd0aCAtIChzaXplb2YoZXhwVmFsdWVUYWJsZV92YXJpYWJsZXNfb2lkKSAvIHNpemVvZihvaWQpICsKLSAgICAgICAgICAgICAgICAgICAzIC0gMSk7CiAgICAgc3RydWN0IGV4cFZhbHVlVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICAgIGNvdW50ZXIzMjsKIAogCiAKQEAgLTcxMSw2ICs3MDYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkZWZhdWx0OgogICAgICAgICBFUlJPUl9NU0coIiIpOworCXJldHVybiBOVUxMOwogICAgIH0KIH0KIApAQCAtNzgwLDYgKzc3Niw3IEBACiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIChhIC8gYik7CiAgICAgfQorICAgIHJldHVybiAwOwogfQogCiB1bnNpZ25lZCBsb25nCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYwppbmRleCAzZTA3ODZmLi40OGFkZDY4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKQEAgLTQsMTAgKzQsMTQgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAibXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdykKKwogbmV0c25tcF90YWJsZV9kYXRhX3NldCAqbXRlRXZlbnROb3RpZl90YWJsZV9zZXQ7CiAKIApAQCAtNjEsMTIgKzY1LDIxIEBACiAgICAgICogbm90ZTogaWYgeW91IGRvbid0IG5lZWQgYSBzdWJoYW5kbGVyIHRvIGRlYWwgd2l0aCBhbnkgYXNwZWN0cwogICAgICAqIG9mIHRoZSByZXF1ZXN0LCBjaGFuZ2UgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9oYW5kbGVyIHRvICJOVUxMIiAKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhX3NldChuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSksIG10ZUV2ZW50Tm90aWZfdGFibGVfc2V0LCBOVUxMKTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGFfc2V0KG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLCBtdGVFdmVudE5vdGlmX3RhYmxlX3NldCwgTlVMTCk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogfQogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgbW9kdWxlICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYwppbmRleCBiNGJkN2ExLi4yMmJhZDczIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm10ZVRyaWdnZXJUYWJsZS5oIgpAQCAtMTEsNiArMTIsOSBAQAogI2luY2x1ZGUgIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCIKICNpbmNsdWRlICJtdGVPYmplY3RzVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YXNldCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cpCisKIHN0YXRpYyBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQgPSBOVUxMOwogCiAvKiogSW5pdGlhbGl6ZSB0aGUgbXRlRXZlbnRUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYwppbmRleCA0ZjdlOTVmLi4wOWNlYjJhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jCkBAIC04LDYgKzgsNyBAQAogICogVGhpcyBzaG91bGQgYWx3YXlzIGJlIGluY2x1ZGVkIGZpcnN0IGJlZm9yZSBhbnl0aGluZyBlbHNlIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTE3LDYgKzE4LDkgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBtaW5pbWFsIGluY2x1ZGUgZGlyZWN0aXZlcyAKQEAgLTQ4LDIwICs1Miw0MCBAQAogICovCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCB2YXJpYWJsZTIgbXRlT2JqZWN0c1RhYmxlX3ZhcmlhYmxlc1tdID0gewogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBNVEVPQkpFQ1RTSUQgICAgICAgICAgNQotICAgIHtNVEVPQkpFQ1RTSUQsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX210ZU9iamVjdHNUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7TVRFT0JKRUNUU0lELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgTVRFT0JKRUNUU0lEV0lMRENBUkQgIDYKLSAgICB7TVRFT0JKRUNUU0lEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsCi0gICAgIHsxLCA0fX0sCisgICAge01URU9CSkVDVFNJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZSAgIE1URU9CSkVDVFNFTlRSWVNUQVRVUyAgNwotICAgIHtNVEVPQkpFQ1RTRU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsCi0gICAgIHsxLCA1fX0sCisgICAge01URU9CSkVDVFNFTlRSWVNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZU9iamVjdHNUYWJsZSwgMiwgezEsIDV9fSwKIAogfTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KK3N0cnVjdCB2YXJpYWJsZTIgbXRlT2JqZWN0c1RhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKi8KKyNkZWZpbmUgICBNVEVPQkpFQ1RTSUQgICAgICAgICAgNQorICAgIHtNVEVPQkpFQ1RTSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLCB7MSwgM319LAorI2RlZmluZSAgIE1URU9CSkVDVFNJRFdJTERDQVJEICA2CisgICAge01URU9CSkVDVFNJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsIHsxLCA0fX0sCisjZGVmaW5lICAgTVRFT0JKRUNUU0VOVFJZU1RBVFVTICA3CisgICAge01URU9CSkVDVFNFTlRSWVNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLCB7MSwgNX19LAorCit9OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoKICAqIChMID0gbGVuZ3RoIG9mIHRoZSBvaWRzdWZmaXgpIAogICovCkBAIC0zMDEsNiArMzI1LDEwIEBACiAKICAgICBERUJVR01TR1RMKCgibXRlT2JqZWN0c1RhYmxlIiwKICAgICAgICAgICAgICAgICAidmFyX210ZU9iamVjdHNUYWJsZTogRW50ZXJpbmcuLi4gIFxuIikpOworCisJLyogc2V0IGRlZmF1bHQgdmFsdWUgKi8KKwkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKwogICAgIC8qCiAgICAgICogdGhpcyBhc3N1bWVzIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYWxsIHlvdXIgZGF0YSBwcm9wZXJseQogICAgICAqLwpAQCAtMzE5LDE3ICszNDcsMjMgQEAKIAogCiAgICAgY2FzZSBNVEVPQkpFQ1RTSUQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlT2JqZWN0c0lEOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSAoU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0lETGVuKSAqIHNpemVvZihvaWQpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVPYmplY3RzSUQ7CiAKICAgICBjYXNlIE1URU9CSkVDVFNJRFdJTERDQVJEOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZU9iamVjdHNJRFdpbGRjYXJkOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0lEV2lsZGNhcmQpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZU9iamVjdHNJRFdpbGRjYXJkOwogCiAgICAgY2FzZSBNVEVPQkpFQ1RTRU5UUllTVEFUVVM6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlT2JqZWN0c0VudHJ5U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0VudHJ5U3RhdHVzKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVPYmplY3RzRW50cnlTdGF0dXM7CiAKQEAgLTM0Miw2ICszNzYsNyBAQAogCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIAogaW50CiB3cml0ZV9tdGVPYmplY3RzSUQoaW50IGFjdGlvbiwKQEAgLTQyMyw2ICs0NTgsOSBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTUwNyw2ICs1NDUsOCBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNjQxLDYgKzY4MSw4IEBACiAKIAogICAgICAgICAgICAgU3RvcmFnZU5ldyA9IFNOTVBfTUFMTE9DX1NUUlVDVChtdGVPYmplY3RzVGFibGVfZGF0YSk7CisgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5tdGVPd25lciA9IG5ldHNubXBfc3RyZHVwX2FuZF9udWxsKHZwLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+dmFsX2xlbik7CiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5tdGVPd25lckxlbiA9IHZwLT52YWxfbGVuOwpAQCAtNzczLDExICs4MTUsMTYgQEAKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5tdGVPYmplY3RzRW50cnlTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKIHZvaWQKIG10ZV9hZGRfb2JqZWN0cyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJzLAogICAgICAgICAgICAgICAgIHN0cnVjdCBtdGVUcmlnZ2VyVGFibGVfZGF0YSAqaXRlbSwgY29uc3QgY2hhciAqb3duZXIsCkBAIC04ODgsNiArOTM1LDggQEAKICAgICAgKiBtYWxsb2MgaW5pdGlhbCBzdHJ1Y3QgCiAgICAgICovCiAgICAgU3RvcmFnZU5ldyA9IFNOTVBfTUFMTE9DX1NUUlVDVChtdGVPYmplY3RzVGFibGVfZGF0YSk7CisgICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICBTdG9yYWdlTmV3LT5tdGVPd25lciA9IG5ldHNubXBfc3RyZHVwX2FuZF9udWxsKG93bmVyLCBzdHJsZW4ob3duZXIpKTsKICAgICBTdG9yYWdlTmV3LT5tdGVPd25lckxlbiA9IHN0cmxlbihvd25lcik7CiAgICAgU3RvcmFnZU5ldy0+bXRlT2JqZWN0c05hbWUgPSBuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbChvYmpuYW1lLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oCmluZGV4IGQzYzNjNTAuLjRkNDRjODcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgKQEAgLTU5LDExICs1OSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogb2lkbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvaWRuYW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc3dpbGQpOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlT2JqZWN0c0lEOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlT2JqZWN0c0lEV2lsZGNhcmQ7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVPYmplY3RzRW50cnlTdGF0dXM7Ci0KLSAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZU9iamVjdHNFbnRyeVN0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuYwppbmRleCA0OWNlYjVmLi41YjE3OTI3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKQEAgLTQ4LDMzICs0OCw2MiBAQAogICovCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCB2YXJpYWJsZTIgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5DT01QQVJJU09OICAzCi0gICAge01URVRSSUdHRVJCT09MRUFOQ09NUEFSSVNPTiwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5DT01QQVJJU09OLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSwgMiwgezEsIDF9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSQk9PTEVBTlZBTFVFICA0Ci0gICAge01URVRSSUdHRVJCT09MRUFOVkFMVUUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJCT09MRUFOVkFMVUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOU1RBUlRVUCAgNQotICAgIHtNVEVUUklHR0VSQk9PTEVBTlNUQVJUVVAsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJCT09MRUFOU1RBUlRVUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIgIDYKLSAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTICA3Ci0gICAge01URVRSSUdHRVJCT09MRUFOT0JKRUNUUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSQk9PTEVBTk9CSkVDVFMsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5FVkVOVE9XTkVSICA4Ci0gICAge01URVRSSUdHRVJCT09MRUFORVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSQk9PTEVBTkVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA2fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5FVkVOVCAgOQotICAgIHtNVEVUUklHR0VSQk9PTEVBTkVWRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJCT09MRUFORVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA3fX0sCi0KIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJCb29sZWFuVGFibGVfdmFyaWFibGVzW10gPSB7CisgICAgLyoKKyAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAorICAgICAqLworI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOQ09NUEFSSVNPTiAgMworICAgIHtNVEVUUklHR0VSQk9PTEVBTkNPTVBBUklTT04sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCAxfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5WQUxVRSAgNAorICAgIHtNVEVUUklHR0VSQk9PTEVBTlZBTFVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgMn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOU1RBUlRVUCAgNQorICAgIHtNVEVUUklHR0VSQk9PTEVBTlNUQVJUVVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCAzfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIgIDYKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSwgMiwgezEsIDR9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSQk9PTEVBTk9CSkVDVFMgIDcKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA1fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5FVkVOVE9XTkVSICA4CisgICAge01URVRSSUdHRVJCT09MRUFORVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgNn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFORVZFTlQgIDkKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5FVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgN319LAorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwpAQCAtMTI2LDYgKzE1NSwxMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJCb29sZWFuVGFibGUiLAogICAgICAgICAgICAgICAgICJ2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZTogRW50ZXJpbmcuLi4gIFxuIikpOworCisJLyogc2V0IGRlZmF1bHQgdmFsdWUgKi8KKwkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKwogICAgIC8qCiAgICAgICogdGhpcyBhc3N1bWVzIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYWxsIHlvdXIgZGF0YSBwcm9wZXJseQogICAgICAqLwpAQCAtMTQ0LDM3ICsxNzcsNTEgQEAKIAogCiAgICAgY2FzZSBNVEVUUklHR0VSQk9PTEVBTkNPTVBBUklTT046CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5Db21wYXJpc29uOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5Db21wYXJpc29uKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbkNvbXBhcmlzb247CiAKICAgICBjYXNlIE1URVRSSUdHRVJCT09MRUFOVkFMVUU6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5WYWx1ZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuVmFsdWUpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuVmFsdWU7CiAKICAgICBjYXNlIE1URVRSSUdHRVJCT09MRUFOU1RBUlRVUDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhblN0YXJ0dXA7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhblN0YXJ0dXApOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuU3RhcnR1cDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVI6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzT3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuT2JqZWN0c093bmVyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbk9iamVjdHNPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJCb29sZWFuT2JqZWN0czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbk9iamVjdHM7CiAKICAgICBjYXNlIE1URVRSSUdHRVJCT09MRUFORVZFTlRPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhbkV2ZW50T3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuRXZlbnRPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5FdmVudE93bmVyOwogCiAgICAgY2FzZSBNVEVUUklHR0VSQk9PTEVBTkVWRU5UOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJCb29sZWFuRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuRXZlbnRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuRXZlbnQ7CiAKQEAgLTE4Nyw2ICsyMzQsNyBAQAogCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIAogaW50CiB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhbkNvbXBhcmlzb24oaW50IGFjdGlvbiwKQEAgLTgwMCwzICs4NDgsNSBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCmluZGV4IGY2ODU1ODYuLjY0MTNkYTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaApAQCAtMzEsNiArMzEsNyBAQAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlKHZvaWQpOwogICAgICBGaW5kVmFyTWV0aG9kICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGU7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhbkNvbXBhcmlzb247CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhblZhbHVlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5TdGFydHVwOwpAQCAtMzgsNiArMzksNyBAQAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5FdmVudE93bmVyOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5FdmVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCmluZGV4IDNlZGI5MzUuLmM4MjllNmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCkBAIC00OCwyMSArNDgsMzggQEAKICAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJEZWx0YVRhYmxlX3ZhcmlhYmxlc1tdID0gewogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSUQgIDMKLSAgICB7TVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlELCBBU05fT0JKRUNUX0lELCBSV1JJVEUsCisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckRlbHRhVGFibGUsIDIsIHsxLCAxfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEV0lMRENBUkQgIDQKLSAgICB7TVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckRlbHRhVGFibGUsIDIsIHsxLCAyfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEVFlQRSAgNQotICAgIHtNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckRlbHRhVGFibGUsIDIsIHsxLCAzfX0sCi0KIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJEZWx0YVRhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKi8KKyNkZWZpbmUgICBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSUQgIDMKKyAgICB7TVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlLCAyLCB7MSwgMX19LAorI2RlZmluZSAgIE1URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFdJTERDQVJEICA0CisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRGVsdGFUYWJsZSwgMiwgezEsIDJ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFICA1CisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlLCAyLCB7MSwgM319LAorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwpAQCAtMTE0LDYgKzEzMSwxMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJEZWx0YVRhYmxlIiwKICAgICAgICAgICAgICAgICAidmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlOiBFbnRlcmluZy4uLiAgXG4iKSk7CisKKyAgICAvKiBzZXQgZGVmYXVsdCB2YWx1ZSAqLworCSp3cml0ZV9tZXRob2QgPSBOVUxMOworCiAgICAgLyoKICAgICAgKiB0aGlzIGFzc3VtZXMgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbGwgeW91ciBkYXRhIHByb3Blcmx5CiAgICAgICovCkBAIC0xMjksMjQgKzE1MCwyOSBAQAogCiAKICAgICBjYXNlIE1URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SUQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9CiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURMZW4gKiBzaXplb2Yob2lkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEOwogCiAgICAgY2FzZSBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURXSUxEQ0FSRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0KICAgICAgICAgICAgIHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+CiAgICAgICAgICAgICBtdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEVFlQRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURUeXBlOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEVHlwZSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEVHlwZTsKIAotCiAgICAgZGVmYXVsdDoKICAgICAgICAgRVJST1JfTVNHKCIiKTsKICAgICB9CkBAIC0xNTUsNyArMTgxLDcgQEAKIAogCiAKLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogd3JpdGVfbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTQxNCwzICs0NDAsNCBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCmluZGV4IDBlOGExN2UuLmZhNDg3MmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCkBAIC0zMCw4ICszMCwxMCBAQAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9tdGVUcmlnZ2VyRGVsdGFUYWJsZSh2b2lkKTsKICAgICAgRmluZFZhck1ldGhvZCAgIHZhcl9tdGVUcmlnZ2VyRGVsdGFUYWJsZTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRFdpbGRjYXJkOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEVHlwZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX01URVRSSUdHRVJERUxUQVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYwppbmRleCAxYWQwYTc0Li40ZTZiNjRiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCkBAIC00OCwzMCArNDgsNTYgQEAKICAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRVRFU1QgIDMKLSAgICB7TVRFVFJJR0dFUkVYSVNURU5DRVRFU1QsIEFTTl9CSVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VURVNULCBBU05fQklUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgMX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VTVEFSVFVQICA0Ci0gICAge01URVRSSUdHRVJFWElTVEVOQ0VTVEFSVFVQLCBBU05fQklUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFU1RBUlRVUCwgQVNOX0JJVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUU09XTkVSICA1Ci0gICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkVYSVNURU5DRU9CSkVDVFNPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTICA2Ci0gICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UT1dORVIgIDcKLSAgICB7TVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDV9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlQgIDgKLSAgICB7TVRFVFJJR0dFUkVYSVNURU5DRUVWRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgNn19LAotCiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGVfdmFyaWFibGVzW10gPSB7CisgICAgLyoKKyAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAorICAgICAqLworI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VURVNUICAzCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VURVNULCBBU05fQklUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCAxfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRVNUQVJUVVAgIDQKKyAgICB7TVRFVFJJR0dFUkVYSVNURU5DRVNUQVJUVVAsIEFTTl9CSVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDJ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUU09XTkVSICA1CisgICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgM319LAorI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTICA2CisgICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDR9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlRPV05FUiAgNworICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCA1fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UICA4CisgICAge01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCA2fX0sCit9OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoKICAqIChMID0gbGVuZ3RoIG9mIHRoZSBvaWRzdWZmaXgpIAogICovCkBAIC0xMzEsNiArMTU3LDEwIEBACiAKICAgICBERUJVR01TR1RMKCgibXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlIiwKICAgICAgICAgICAgICAgICAidmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZTogRW50ZXJpbmcuLi4gIFxuIikpOworCisJLyogc2V0IGRlZmF1bHQgdmFsdWUgKi8KKwkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKwogICAgIC8qCiAgICAgICogdGhpcyBhc3N1bWVzIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYWxsIHlvdXIgZGF0YSBwcm9wZXJseQogICAgICAqLwpAQCAtMTQ5LDMyICsxNzksNDQgQEAKIAogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFVEVTVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlVGVzdDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZVRlc3RMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VUZXN0OwogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFU1RBUlRVUDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlU3RhcnR1cDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZVN0YXJ0dXBMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VTdGFydHVwOwogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUU09XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzT3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzT3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzT3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0c0xlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZU9iamVjdHM7CiAKICAgICBjYXNlIE1URVRSSUdHRVJFWElTVEVOQ0VFVkVOVE9XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VFdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnRPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50T3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJFWElTVEVOQ0VFVkVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VFdmVudExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50OwogCkBAIC0xODcsNiArMjI5LDcgQEAKIAogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAKIGludAogd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZVRlc3QoaW50IGFjdGlvbiwKQEAgLTczNSwzICs3NzgsNSBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaAppbmRleCA0MGRiZDRlLi43NWM2NDI3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oCkBAIC0yOSwxMSArMjksMTMgQEAKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlKHZvaWQpOwogICAgICBGaW5kVmFyTWV0aG9kICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VUZXN0OwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZVN0YXJ0dXA7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0c093bmVyOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZU9iamVjdHM7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnRPd25lcjsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VFdmVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX01URVRSSUdHRVJFWElTVEVOQ0VUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMKaW5kZXggNGE0NDA4Yy4uODBhNDVhMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYwpAQCAtOCw2ICs4LDcgQEAKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0yMCw2ICsyMSwxMyBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG1pYl9zbnByaW50X3ZhcmlhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGRvbWFpbl9zdXBwb3J0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdWludCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ190aW1lX3RvX3NlY3MpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVhZGVyX2NvbXBsZXhfZmluZF9lbnRyeSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoKICAqIG1pbmltYWwgaW5jbHVkZSBkaXJlY3RpdmVzIApAQCAtNzgsNTAgKzg2LDk4IEBACiAgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyVGFibGVfdmFyaWFibGVzW10gPSB7CiAgICAgLyoKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIE1URVRSSUdHRVJDT01NRU5UICAgICA1Ci0gICAge01URVRSSUdHRVJDT01NRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCAzfX0sCisgICAge01URVRSSUdHRVJDT01NRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRFU1QgICAgICAgIDYKLSAgICB7TVRFVFJJR0dFUlRFU1QsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7TVRFVFJJR0dFUlRFU1QsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDR9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSU0FNUExFVFlQRSAgNwotICAgIHtNVEVUUklHR0VSU0FNUExFVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDV9fSwKKyAgICB7TVRFVFJJR0dFUlNBTVBMRVRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlZBTFVFSUQgICAgIDgKLSAgICB7TVRFVFJJR0dFUlZBTFVFSUQsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDZ9fSwKKyAgICB7TVRFVFJJR0dFUlZBTFVFSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDZ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVkFMVUVJRFdJTERDQVJEICA5Ci0gICAge01URVRSSUdHRVJWQUxVRUlEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsCi0gICAgIDIsIHsxLCA3fX0sCisgICAge01URVRSSUdHRVJWQUxVRUlEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA3fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRBUkdFVFRBRyAgIDEwCi0gICAge01URVRSSUdHRVJUQVJHRVRUQUcsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDh9fSwKKyAgICB7TVRFVFJJR0dFUlRBUkdFVFRBRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgOH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJDT05URVhUTkFNRSAgMTEKLSAgICB7TVRFVFJJR0dFUkNPTlRFWFROQU1FLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCA5fX0sCisgICAge01URVRSSUdHRVJDT05URVhUTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgOX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJDT05URVhUTkFNRVdJTERDQVJEICAxMgotICAgIHtNVEVUUklHR0VSQ09OVEVYVE5BTUVXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkNPTlRFWFROQU1FV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxMH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJGUkVRVUVOQ1kgICAxMwotICAgIHtNVEVUUklHR0VSRlJFUVVFTkNZLCBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDExfX0sCisgICAge01URVRSSUdHRVJGUkVRVUVOQ1ksIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTF9fSwKICNkZWZpbmUgICBNVEVUUklHR0VST0JKRUNUU09XTkVSICAxNAotICAgIHtNVEVUUklHR0VST0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCAxMn19LAorICAgIHtNVEVUUklHR0VST0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxMn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJPQkpFQ1RTICAgICAxNQotICAgIHtNVEVUUklHR0VST0JKRUNUUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgMTN9fSwKKyAgICB7TVRFVFJJR0dFUk9CSkVDVFMsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDEzfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkVOQUJMRUQgICAgIDE2Ci0gICAge01URVRSSUdHRVJFTkFCTEVELCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgMTR9fSwKKyAgICB7TVRFVFJJR0dFUkVOQUJMRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxNH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJFTlRSWVNUQVRVUyAgMTcKLSAgICB7TVRFVFJJR0dFUkVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgMTV9fSwKLQorICAgIHtNVEVUUklHR0VSRU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxNX19LAogfTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KK3N0cnVjdCB2YXJpYWJsZTIgbXRlVHJpZ2dlclRhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKi8KKyNkZWZpbmUgICBNVEVUUklHR0VSQ09NTUVOVCAgICAgNQorICAgIHtNVEVUUklHR0VSQ09NTUVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAzfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRFU1QgICAgICAgIDYKKyAgICB7TVRFVFJJR0dFUlRFU1QsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgNH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJTQU1QTEVUWVBFICA3CisgICAge01URVRSSUdHRVJTQU1QTEVUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA1fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlZBTFVFSUQgICAgIDgKKyAgICB7TVRFVFJJR0dFUlZBTFVFSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgNn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJWQUxVRUlEV0lMRENBUkQgIDkKKyAgICB7TVRFVFJJR0dFUlZBTFVFSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgN319LAorI2RlZmluZSAgIE1URVRSSUdHRVJUQVJHRVRUQUcgICAxMAorICAgIHtNVEVUUklHR0VSVEFSR0VUVEFHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDh9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSQ09OVEVYVE5BTUUgIDExCisgICAge01URVRSSUdHRVJDT05URVhUTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA5fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkNPTlRFWFROQU1FV0lMRENBUkQgIDEyCisgICAge01URVRSSUdHRVJDT05URVhUTkFNRVdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxMH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJGUkVRVUVOQ1kgICAxMworICAgIHtNVEVUUklHR0VSRlJFUVVFTkNZLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTF9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VST0JKRUNUU09XTkVSICAxNAorICAgIHtNVEVUUklHR0VST0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDEyfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUk9CSkVDVFMgICAgIDE1CisgICAge01URVRSSUdHRVJPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDEzfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkVOQUJMRUQgICAgIDE2CisgICAge01URVRSSUdHRVJFTkFCTEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxNH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJFTlRSWVNUQVRVUyAgMTcKKyAgICB7TVRFVFJJR0dFUkVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxNX19LAorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwpAQCAtMzU2LDggKzQxMiw3IEBACiB2b2lkCiBwYXJzZV9zaW1wbGVfbW9uaXRvcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKIHsKLSAgICBjaGFyICAgICAgICAgICAgYnVmW1NQUklOVF9NQVhfTEVOXSwgKmNwLCBlYnVmW1NQUklOVF9NQVhfTEVOXSwKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRuYW1lWzY0XTsKKyAgICBjaGFyICAgICAgICAgICAgYnVmW1NQUklOVF9NQVhfTEVOXSwgKmNwLCBldmVudG5hbWVbNjRdOwogICAgIG9pZCAgICAgICAgICAgICBvYnVmW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgb2J1ZkxlbjsKICAgICBzdHJ1Y3QgbXRlVHJpZ2dlclRhYmxlX2RhdGEgKlN0b3JhZ2VOZXc7CkBAIC00MDMsOCArNDU4LDE3IEBACiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICdyJzoKICAgICAgICAgICAgIGlmIChjcCkgeworICAgICAgICAgICAgICAgIGludCBmcmVxOwogICAgICAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU5ldy0+bXRlVHJpZ2dlckZyZXF1ZW5jeSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBmcmVxID0gbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKGJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKGZyZXEgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiSW52YWxpZCAtciB2YWx1ZVxuIik7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFhYWDogZnJlZSBTdG9yYWdlTmV3IAorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTdG9yYWdlTmV3LT5tdGVUcmlnZ2VyRnJlcXVlbmN5ID0gKHVuc2lnZW5kIGxvbmcpIGZyZXE7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIk5vIHBhcmFtZXRlciBhZnRlciAtciBnaXZlblxuIik7CiAgICAgICAgICAgICAgICAgLyoKQEAgLTQ0NCw4ICs1MDgsNyBAQAogICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKICAgICAgICAgICAgIG9idWZMZW4gPSBNQVhfT0lEX0xFTjsKICAgICAgICAgICAgIGlmICghc25tcF9wYXJzZV9vaWQoYnVmLCBvYnVmLCAmb2J1ZkxlbikpIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGVidWYsICJ1bmFibGUgdG8gcGFyc2Ugb2lkOiAlcyIsIGJ1Zik7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcihlYnVmKTsKKwkJbmV0c25tcF9jb25maWdfZXJyb3IoInVuYWJsZSB0byBwYXJzZSBvaWQ6ICVzIiwgYnVmKTsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIFhYWDogZnJlZSBTdG9yYWdlTmV3IAogICAgICAgICAgICAgICAgICAqLwpAQCAtNTA2LDggKzU2OSw3IEBACiAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKICAgICBvYnVmTGVuID0gTUFYX09JRF9MRU47CiAgICAgaWYgKCFzbm1wX3BhcnNlX29pZChidWYsIG9idWYsICZvYnVmTGVuKSkgewotICAgICAgICBzcHJpbnRmKGVidWYsICJ1bmFibGUgdG8gcGFyc2Ugb2lkOiAlcyIsIGJ1Zik7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoZWJ1Zik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoInVuYWJsZSB0byBwYXJzZSBvaWQ6ICVzIiwgYnVmKTsKICAgICAgICAgLyoKICAgICAgICAgICogWFhYOiBmcmVlIFN0b3JhZ2VOZXcgCiAgICAgICAgICAqLwpAQCAtNTk1LDcgKzY1Nyw3IEBACiAKICAgICBERUJVR01TR1RMKCgibXRlVHJpZ2dlclRhYmxlIiwgImFkZGVkIHNpbXBsZSBtb25pdG9yOiAlc1xuIiwKICAgICAgICAgICAgICAgICBTdG9yYWdlTmV3LT5tdGVUcmlnZ2VyTmFtZSkpOwotfQorfSAvKiBwYXJzZV9zaW1wbGVfbW9uaXRvciAqLwogCiAKIC8qCkBAIC0xMDc4LDkgKzExNDAsNyBAQAogICAgICAgICBtdGVfZW5hYmxlX3RyaWdnZXIoU3RvcmFnZVRtcCk7CiAKICAgICBERUJVR01TR1RMKCgibXRlVHJpZ2dlclRhYmxlIiwgImRvbmUuXG4iKSk7Ci19Ci0KLQorfSAvKiBwYXJzZV9tdGVUcmlnZ2VyVGFibGUgKi8KIAogCiAvKgpAQCAtMTQzMSwxNCArMTQ5MSwyMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJUYWJsZSIsCiAgICAgICAgICAgICAgICAgInZhcl9tdGVUcmlnZ2VyVGFibGU6IEVudGVyaW5nLi4uICBcbiIpKTsKKworCS8qIHNldCBkZWZhdWx0IHZhbHVlICovCisJKndyaXRlX21ldGhvZCA9IE5VTEw7CisKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKICAgICAgKi8KICAgICBpZiAoKFN0b3JhZ2VUbXAgPQogICAgICAgICAgaGVhZGVyX2NvbXBsZXgobXRlVHJpZ2dlclRhYmxlU3RvcmFnZSwgdnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJfbGVuLCB3cml0ZV9tZXRob2QpKSA9PSBOVUxMKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAodnAtPm1hZ2ljID09IE1URVRSSUdHRVJFTlRSWVNUQVRVUykKICAgICAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRW50cnlTdGF0dXM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTE0NTAsNjcgKzE1MTYsOTMgQEAKIAogCiAgICAgY2FzZSBNVEVUUklHR0VSQ09NTUVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQ29tbWVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckNvbW1lbnRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJDb21tZW50OwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEVTVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGVzdDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRlc3RMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUZXN0OwogCiAgICAgY2FzZSBNVEVUUklHR0VSU0FNUExFVFlQRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyU2FtcGxlVHlwZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJTYW1wbGVUeXBlKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyU2FtcGxlVHlwZTsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlZBTFVFSUQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclZhbHVlSUQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJWYWx1ZUlETGVuICogc2l6ZW9mKG9pZCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJWYWx1ZUlEOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVkFMVUVJRFdJTERDQVJEOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJWYWx1ZUlEV2lsZGNhcmQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVmFsdWVJRFdpbGRjYXJkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVmFsdWVJRFdpbGRjYXJkOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEFSR0VUVEFHOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUYXJnZXRUYWc7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUYXJnZXRUYWdMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUYXJnZXRUYWc7CiAKICAgICBjYXNlIE1URVRSSUdHRVJDT05URVhUTkFNRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQ29udGV4dE5hbWU7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJDb250ZXh0TmFtZUxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckNvbnRleHROYW1lOwogCiAgICAgY2FzZSBNVEVUUklHR0VSQ09OVEVYVE5BTUVXSUxEQ0FSRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQ29udGV4dE5hbWVXaWxkY2FyZDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJDb250ZXh0TmFtZVdpbGRjYXJkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQ29udGV4dE5hbWVXaWxkY2FyZDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkZSRVFVRU5DWToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRnJlcXVlbmN5OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckZyZXF1ZW5jeSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckZyZXF1ZW5jeTsKIAogICAgIGNhc2UgTVRFVFJJR0dFUk9CSkVDVFNPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyT2JqZWN0c093bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyT2JqZWN0c093bmVyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyT2JqZWN0c093bmVyOwogCiAgICAgY2FzZSBNVEVUUklHR0VST0JKRUNUUzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyT2JqZWN0czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlck9iamVjdHNMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJPYmplY3RzOwogCiAgICAgY2FzZSBNVEVUUklHR0VSRU5BQkxFRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRW5hYmxlZDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFbmFibGVkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRW5hYmxlZDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkVOVFJZU1RBVFVTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJFbnRyeVN0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFbnRyeVN0YXR1cyk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVudHJ5U3RhdHVzOwogCkBAIC0xNTIzLDcgKzE2MTUsNyBAQAogCiAKIAotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiB3cml0ZV9tdGVUcmlnZ2VyQ29tbWVudChpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTE2MDYsMTAgKzE2OTgsMTEgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlckNvbW1lbnQgKi8KIAogCiAKQEAgLTE2OTIsMTAgKzE3ODUsMTEgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlclRlc3QgKi8KIAogCiAKQEAgLTE3NzQsMTEgKzE4NjgsMTEgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyU2FtcGxlVHlwZSAqLwogCiAKIApAQCAtMTg2OCwxMCArMTk2MiwxMSBAQAogICAgICAgICAgKiBwcmV2aW91cyB2YWx1ZXMsIGFzIHRoZXNlIGFyZSBmcm9tIGEgZGlmZmVyZW50IG9iamVjdD8gIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJWYWx1ZUlEICovCiAKIAogCkBAIC0xOTUxLDExICsyMDQ2LDExIEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlclZhbHVlSURXaWxkY2FyZCAqLwogCiAKIApAQCAtMjA0MCwxMCArMjEzNSwxMSBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyVGFyZ2V0VGFnICovCiAKIAogCkBAIC0yMTI5LDEwICsyMjI1LDExIEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJDb250ZXh0TmFtZSAqLwogCiAKIApAQCAtMjIxMiwxMSArMjMwOSwxMSBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJDb250ZXh0TmFtZVdpbGRjYXJkICovCiAKIAogCkBAIC0yMjk5LDEwICsyMzk2LDExIEBACiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRW50cnlTdGF0dXMgPT0gUlNfQUNUSVZFKQogICAgICAgICAgICAgbXRlX2VuYWJsZV90cmlnZ2VyKFN0b3JhZ2VUbXApOwogCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJGcmVxdWVuY3kgKi8KIAogCiAKQEAgLTIzODgsMTAgKzI0ODYsMTEgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlck9iamVjdHNPd25lciAqLwogCiAKIApAQCAtMjQ3NiwxMCArMjU3NSwxMSBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyT2JqZWN0cyAqLwogCiAKIApAQCAtMjU2NCwxNCArMjY2NCwxMSBAQAogICAgICAgICBlbHNlIGlmIChTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRW5hYmxlZCA9PSBNVEVUUklHR0VSRU5BQkxFRF9GQUxTRSkKICAgICAgICAgICAgIG10ZV9kaXNhYmxlX3RyaWdnZXIoU3RvcmFnZVRtcCk7CiAKLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQotCi0KLQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyRW5hYmxlZCAqLwogCiAKIApAQCAtMjg5NSwxMCArMjk5MiwxNSBAQAogICAgICAgICAgICAgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVuYWJsZWQgPT0gTVRFVFJJR0dFUkVOQUJMRURfVFJVRSAmJgogICAgICAgICAgICAgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVudHJ5U3RhdHVzID09IFJTX0FDVElWRSkKICAgICAgICAgICAgIG10ZV9lbmFibGVfdHJpZ2dlcihTdG9yYWdlVG1wKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlckVudHJ5U3RhdHVzICovCisKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKwogCiAvKgogICogc2VuZCB0cmFwIApAQCAtMjk5Myw3ICszMDk1LDggQEAKIAogICAgIHNlbmRfdjJ0cmFwKHZhcl9saXN0KTsKICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJfbGlzdCk7Ci19Cit9IC8qIHNlbmRfbXRlX3RyYXAgKi8KKwogCiB2b2lkCiBsYXN0X3N0YXRlX2NsZWFuKHZvaWQgKmRhdGEpCkBAIC0zMDAzLDYgKzMxMDYsNyBAQAogICAgIFNOTVBfRlJFRShjbGVhbm1lKTsKIH0KIAorCiAvKgogICogcmV0cmlldmVzIHJlcXVlc3RlZCBpbmZvIGluIHBkdSBmcm9tIHRoZSBjdXJyZW50IHRhcmdldCAKICAqLwpAQCAtMzA5NCw3ICszMTk4LDcgQEAKICAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcMCc7CiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJUYWJsZSIsICJnb3QgYSB2YXJpYWJsZXM6ICVzXG4iLCBidWYpKTsKICAgICByZXR1cm4gcmVzcG9uc2U7Ci19Cit9IC8qIG10ZV9nZXRfcmVzcG9uc2UgKi8KIAogCiAvKgpAQCAtMzEyNSw3ICszMjI5LDYgQEAKIH0KIAogCi0KIC8qCiAgKiBSZXR1cm4gMCBpZiB0aGUgZGlzY29udGludWl0eSBvYmplY3Qgd2FzIGNoZWNrZWQgYW5kIG5vIGRpc2NvbnRpbnVpdHkgaGFzCiAgKiBvY2N1cnJlZCwgMSBpZiB0aGUgZGlzY29udGludWl0eSBvYmplY3Qgd2FzIGNoZWNrZWQgYW5kIGEgZGlzY29udGludWl0eQpAQCAtMzI1Niw3ICszMzU5LDcgQEAKICAgICAgKi8KICAgICBERUJVR01TR1RMKCgibXRlX2Rpc2NvIiwgIm5vIGRpc2NvbnRpbnVpdHlcbiIpKTsKICAgICByZXR1cm4gMDsKLX0KK30gLyogbXRlX2Rpc2NvbnRpbnVpdHlfb2NjdXJyZWQgKi8KIAogCiB2b2lkCkBAIC0zNjYzLDcgKzM3NjYsOCBAQAogICAgIH0KIAogICAgIGl0ZW0tPnN0YXJ0ZWQgPSBNVEVfU1RBUlRFRDsKLX0KK30gLyogbXRlX3J1bl90cmlnZ2VyICovCisKIAogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCmluZGV4IDE4OTE0ZGQuLmM0Mjc2MDIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKQEAgLTIyOSw3ICsyMjksNyBAQAogICAgICBuZXRzbm1wX3BkdSAgICAqbXRlX2dldF9yZXNwb25zZShzdHJ1Y3QgbXRlVHJpZ2dlclRhYmxlX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKik7CiAKLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJDb21tZW50OwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlclRlc3Q7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyU2FtcGxlVHlwZTsKQEAgLTI0Myw4ICsyNDMsNyBAQAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlck9iamVjdHM7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRW5hYmxlZDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFbnRyeVN0YXR1czsKLQotICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckVudHJ5U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICB2b2lkICAgICAgICAgICAgbXRlX2VuYWJsZV90cmlnZ2VyKHN0cnVjdCBtdGVUcmlnZ2VyVGFibGVfZGF0YSAqaXRlbSk7CiAgICAgIHZvaWQgICAgICAgICAgICBtdGVfZGlzYWJsZV90cmlnZ2VyKHN0cnVjdCBtdGVUcmlnZ2VyVGFibGVfZGF0YQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCmluZGV4IDAzOGEyZmIuLmJlOTYzYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKQEAgLTQ4LDYyICs0OCwxMTUgQEAKICAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFNUQVJUVVAgIDMKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFNUQVJUVVAsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERTVEFSVFVQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkcgIDQKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lORywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORyAgNQotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HICA2Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lORywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkcgIDcKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElORywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDV9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUU09XTkVSICA4Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRE9CSkVDVFNPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgNn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTICA5Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA3fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5UT1dORVIgIDEwCi0gICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA4fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5UICAxMQotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA5fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVE9XTkVSICAxMgotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxMH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQgIDEzCi0gICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTF9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSICAxNAotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDEyfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlQgIDE1Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxM319LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVE9XTkVSICAxNgotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTR9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlQgIDE3Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDE1fX0sCi0KIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZV92YXJpYWJsZXNbXSA9IHsKKyAgICAvKgorICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCisgICAgICovCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFNUQVJUVVAgIDMKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFNUQVJUVVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDF9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HICA0CisgICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDJ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORyAgNQorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgM319LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lORyAgNgorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDR9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HICA3CisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDV9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUU09XTkVSICA4CisgICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgNn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTICA5CisgICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDd9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlRPV05FUiAgMTAKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgOH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVCAgMTEKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDl9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UT1dORVIgIDEyCisgICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxMH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQgIDEzCisgICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTF9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSICAxNAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDEyfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlQgIDE1CisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDEzfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UT1dORVIgIDE2CisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDE0fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UICAxNworICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTV9fSwKK307CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwogCi0KIC8qCiAgKiBnbG9iYWwgc3RvcmFnZSBvZiBvdXIgZGF0YSwgc2F2ZWQgaW4gYW5kIGNvbmZpZ3VyZWQgYnkgaGVhZGVyX2NvbXBsZXgoKSAKICAqLwpAQCAtMTUxLDYgKzIwNCwxMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSIsCiAgICAgICAgICAgICAgICAgInZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGU6IEVudGVyaW5nLi4uICBcbiIpKTsKKworCS8qIHNldCBkZWZhdWx0IHZhbHVlICovCisJKndyaXRlX21ldGhvZCA9IE5VTEw7CisKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKICAgICAgKi8KQEAgLTE3MCw4MCArMjI3LDExMCBAQAogCiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERTVEFSVFVQOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRTdGFydHVwOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFN0YXJ0dXApOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRTdGFydHVwOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmc7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZzsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZzsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZzsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZyk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmc7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUU09XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzT3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzT3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzT3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkT2JqZWN0c0xlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZE9iamVjdHM7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVE9XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmdFdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nRXZlbnRPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZ0V2ZW50T3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmdFdmVudExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZ0V2ZW50OwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UT1dORVI6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmdFdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50T3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nRXZlbnRPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50OwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50T3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50T3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPgogICAgICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nRXZlbnRPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UT1dORVI6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50T3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9CiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnRPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+CiAgICAgICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnRPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmdFdmVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnQ7CiAKQEAgLTI1Niw3ICszNDMsNyBAQAogCiAKIAotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKIGludAogd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZFN0YXJ0dXAoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC0xNjA3LDMgKzE2OTQsNSBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaAppbmRleCA3YWE2Y2VjLi44ZjMzMDExIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSh2b2lkKTsKICAgICAgRmluZFZhck1ldGhvZCAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGU7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkU3RhcnR1cDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmc7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZzsKQEAgLTQyLDUgKzQzLDYgQEAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50OwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50T3duZXI7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9NVEVUUklHR0VSVEhSRVNIT0xEVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYwppbmRleCBiY2VkZDA3Li4wZjcxZGE2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYwpAQCAtNiw3ICs2LDYgQEAKICAqRmlsZSBOYW1lOmxvb2t1cEN0bFRhYmxlLmMKICAqRmlsZSBEZXNjcmlwdGlvbjpSb3dzIG9mIHRoZSBsb29rdXBDdGxUYWJsZSBNSUIgYWRkICwgZGVsZXRlIGFuZCByZWFkLlJvd3Mgb2YgbG9va3VwUmVzdWx0c1RhYmxlCiAgKiAgICAgICAgICAgICAgTUlCIGFkZCBhbmQgZGVsZXRlLgotIAogICoKICAqQ3VycmVudCBWZXJzaW9uOjEuMAogICpBdXRob3I6Q2hlbkppbmcKQEAgLTE2LDMzICsxNSwzNCBAQAogLyoKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9MSU1JVFNfSAotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVhZGVyX2NvbXBsZXhfZmluZF9lbnRyeSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKICNpbmNsdWRlICJsb29rdXBDdGxUYWJsZS5oIgogI2luY2x1ZGUgImxvb2t1cFJlc3VsdHNUYWJsZS5oIgogI2luY2x1ZGUgImhlYWRlcl9jb21wbGV4LmgiCiAKKyNpZm5kZWYgSU5FVEFERFJFU1NUWVBFX0VOVU1TCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9FTlVNUworCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9VTktOT1dOICAwCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY0ICAgICAxCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY2ICAgICAyCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY0WiAgICAzCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY2WiAgICA0CisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9ETlMgICAgIDE2CisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU5FVEFERFJFU1NUWVBFX0VOVU1TICovCisKIC8qCiAgKkZvciBkaXNjb250aW51aXR5IGNoZWNraW5nLgogICovCkBAIC01MSwyNCArNTEsNDkgQEAKICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgyLCAxLCAzIH07CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCB2YXJpYWJsZTIgbG9va3VwQ3RsVGFibGVfdmFyaWFibGVzW10gPSB7CiAgICAgLyoKLSAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAorICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXgKICAgICAgKi8KLSAgICB7Q09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNH19LAotICAgIHtDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0NPTFVNTl9MT09LVVBDVExUSU1FLCAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDZ9fSwKLSAgICB7Q09MVU1OX0xPT0tVUENUTFJDLCAgICAgICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgN319LAotICAgIHtDT0xVTU5fTE9PS1VQQ1RMUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA4fX0KKyAgICB7Q09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9MT09LVVBDVExUSU1FLCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTFJDLCAgICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA4fX0KIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIGxvb2t1cEN0bFRhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeAorICAgICAqLworICAgIHtDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9MT09LVVBDVExUSU1FLCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTFJDLCAgICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDh9fQorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogLyoKICAqIGdsb2JhbCBzdG9yYWdlIG9mIG91ciBkYXRhLCBzYXZlZCBpbiBhbmQgY29uZmlndXJlZCBieSBoZWFkZXJfY29tcGxleCgpIAogICovCiAKLQogc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpsb29rdXBDdGxUYWJsZVN0b3JhZ2UgPSBOVUxMOwogc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpsb29rdXBSZXN1bHRzVGFibGVTdG9yYWdlID0gTlVMTDsKIApAQCAtNzYsNyArMTAxLDYgQEAKIGludCBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqdGhlZGF0YSwgbG9uZyB2YWwpOwogaW50IG1vZGlmeV9sb29rdXBDdGxSYyhzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqdGhlZGF0YSwgbG9uZyB2YWwpOwogCi0KIHZvaWQKIGluaXRfbG9va3VwQ3RsVGFibGUodm9pZCkKIHsKQEAgLTEwOSwxMSArMTMzLDEyIEBACiAgICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VOZXcgPSBOVUxMOwogICAgIFN0b3JhZ2VOZXcgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwVGFibGVfZGF0YSk7CiAgICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiT3V0IGluIG1lbW9yeSBpbiBuc2xvb2t1cC1taWIvY3JlYXRlX2xvb2t1cFRhYmxlX2RhdGVcbiIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzID0gc3RyZHVwKCIiKTsKICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzTGVuID0gMDsKLSAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxPcGVyU3RhdHVzID0gMmw7CisgICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsT3BlclN0YXR1cyA9IDJMOwogICAgIFN0b3JhZ2VOZXctPmxvb2t1cEN0bFRpbWUgPSAwOwogICAgIFN0b3JhZ2VOZXctPnN0b3JhZ2V0eXBlID0gU1RfTk9OVk9MQVRJTEU7CiAgICAgcmV0dXJuIFN0b3JhZ2VOZXc7CkBAIC0xMjcsMTYgKzE1MiwxNyBAQAogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAKLQogICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJhZGRpbmcgZGF0YS4uLiAgIikpOwogICAgIC8qCiAgICAgICogYWRkIHRoZSBpbmRleCB2YXJpYWJsZXMgdG8gdGhlIHZhcmJpbmQgbGlzdCwgd2hpY2ggaXMgCiAgICAgICogdXNlZCBieSBoZWFkZXJfY29tcGxleCB0byBpbmRleCB0aGUgZGF0YSAKICAgICAgKi8KLQotCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAgLyogbG9va3VwQ3RsT3BlcmF0aW9uTmFtZSAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsCisgICAgICAgIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisgICAgICAgIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOwogCiAKICAgICBpZiAoaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoJmxvb2t1cEN0bFRhYmxlU3RvcmFnZSwgdmFycywgdGhlZGF0YSkgPT0KQEAgLTE1OCwxMCArMTg0LDE1IEBACiAgICAgcCA9IHRoZWRhdGEtPlJlc3VsdHNUYWJsZTsKICAgICBpZiAodGhlZGF0YS0+UmVzdWx0c1RhYmxlICE9IE5VTEwpCiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgcC0+bG9va3VwQ3RsT3duZXJJbmRleCwgcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCi0gICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwgKGNoYXIgKikgJnAtPmxvb2t1cFJlc3VsdHNJbmRleCwgc2l6ZW9mKHAtPmxvb2t1cFJlc3VsdHNJbmRleCkpOyAgICAgICAvKiBsb29rdXBSZXN1bHRzSW5kZXggKi8KLQorICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgIChjaGFyICopIHAtPmxvb2t1cEN0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgKGNoYXIgKikgcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICBwLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsKKyAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX1VOU0lHTkVELAorICAgICAgICAgICAgICAgIChjaGFyICopICZwLT5sb29rdXBSZXN1bHRzSW5kZXgsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHAtPmxvb2t1cFJlc3VsdHNJbmRleCkpOwogCiAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwUmVzdWx0c1RhYmxlIiwgImFkZGluZyBkYXRhLi4uICAiKSk7CiAgICAgICAgICAgICAvKgpAQCAtMTc5LDcgKzIxMCw2IEBACiAgICAgICAgICAgICBwID0gcC0+bmV4dDsKICAgICAgICAgfSB3aGlsZSAocCAhPSBOVUxMKTsKIAotCiAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsICJkb25lLlxuIikpOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CkBAIC0yMTYsOCArMjQ2LDcgQEAKIHBhcnNlX2xvb2t1cEN0bFRhYmxlKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQogewogICAgIHNpemVfdCAgICAgICAgICB0bXBpbnQ7Ci0gICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPQotICAgICAgICBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwVGFibGVfZGF0YSk7CisgICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwVGFibGVfZGF0YSk7CiAKICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLCAicGFyc2luZyBjb25maWcuLi4gICIpKTsKIApAQCAtMzAwLDEwICszMjksOCBAQAogICAgIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlVG1wOwogICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpbmRleDsKIAotCiAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgInN0b3JpbmcgZGF0YS4uLiAgIikpOwogCi0KICAgICBmb3IgKGhjaW5kZXggPSBsb29rdXBDdGxUYWJsZVN0b3JhZ2U7IGhjaW5kZXggIT0gTlVMTDsKICAgICAgICAgIGhjaW5kZXggPSBoY2luZGV4LT5uZXh0KSB7CiAgICAgICAgIFN0b3JhZ2VUbXAgPSAoc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKikgaGNpbmRleC0+ZGF0YTsKQEAgLTMxMyw3ICszNDAsNiBAQAogICAgICAgICAgICAgc3RyY2F0KGxpbmUsICJsb29rdXBDdGxUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0KICAgICAgICAgICAgIGNwdHIgPQogICAgICAgICAgICAgICAgIHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT5sb29rdXBDdGxPd25lckluZGV4LApAQCAtMzUwLDkgKzM3Niw2IEBACiAgICAgICAgICAgICAgICAgcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fSU5URUdFUiwgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT5sb29rdXBDdGxSb3dTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1waW50KTsKLQotCi0KICAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM3NCw5ICszOTcsOCBAQAogICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICp2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCiB7Ci0KLQogICAgIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlVG1wID0gTlVMTDsKKyAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKQEAgLTM5MywzOCArNDE1LDM3IEBACiAgICAgICogdGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgdmFsdWUgYXNzaWdubWVudHMgZm9yIHRoZSBtaWIgcmVzdWx0cy4KICAgICAgKi8KICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotCi0KICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTVFlQRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZTsKIAogICAgIGNhc2UgQ09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1M6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbG9va3VwQ3RsVGFyZ2V0QWRkcmVzczsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gKFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NMZW4pOwotCiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3M7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExPUEVSU1RBVFVTOgogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5sb29rdXBDdGxPcGVyU3RhdHVzKTsKLQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bE9wZXJTdGF0dXM7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExUSU1FOgogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5sb29rdXBDdGxUaW1lKTsKLQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRpbWU7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExSQzoKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bG9va3VwQ3RsUmMpOwotCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bG9va3VwQ3RsUmM7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExST1dTVEFUVVM6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bG9va3VwQ3RsUm93U3RhdHVzKTsKLQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFJvd1N0YXR1czsKIAogICAgIGRlZmF1bHQ6CkBAIC00MzQsMjggKzQ1NSw2NyBAQAogfQogCiAKK3N0YXRpYyBzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgKgorYWRkX3Jlc3VsdChzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqaXRlbSwgaW50IGluZGV4LAorICAgICAgICBpbnQgaWF0eXBlLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pCit7CisgICAgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICp0ZW1wOworICAgIHRlbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwUmVzdWx0c1RhYmxlX2RhdGEpOworICAgIGlmICh0ZW1wID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk91dCBvZiBtZW1vcnkgaW4gbnNsb29rdXAtbWliL3J1bl9sb29rdXBcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdGVtcC0+bG9va3VwUmVzdWx0c0luZGV4ID0gaW5kZXg7CisgICAgdGVtcC0+bmV4dCA9IE5VTEw7CisKKyAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0gbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKKyAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5IGluIG5zbG9va3VwLW1pYi9ydW5fbG9va3VwXG4iKTsKKyAgICAgICAgZnJlZSh0ZW1wKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAorICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAorICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7CisgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9ICdcMCc7CisgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9IGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47CisKKyAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0gbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKKyAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5IGluIG5zbG9va3VwLW1pYi9ydW5fbG9va3VwXG4iKTsKKyAgICAgICAgZnJlZSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4KTsKKyAgICAgICAgZnJlZSh0ZW1wKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAorICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAorICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7CisgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuXSA9ICdcMCc7CisgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiA9IGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW47CisKKyAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1R5cGUgPSBpYXR5cGU7CisgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPSBtYWxsb2MoZGF0YV9sZW4gKyAxKTsKKyAgICBtZW1jcHkodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MsIGRhdGEsIGRhdGFfbGVuKTsKKyAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1tkYXRhX2xlbl0gPSAnXDAnOworICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzTGVuID0gZGF0YV9sZW47CisgICAgaWYgKCFpdGVtLT5SZXN1bHRzVGFibGUpCisgICAgICAgIGl0ZW0tPlJlc3VsdHNUYWJsZSA9IHRlbXA7CisKKyAgICByZXR1cm4gdGVtcDsKK30KKwogdm9pZAogcnVuX2xvb2t1cChzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqaXRlbSkKIHsKLQogICAgIGxvbmcgICAgICAgICAgICBhZGRyZXNzVHlwZTsKICAgICBjaGFyICAgICAgICAgICAqYWRkcmVzcyA9IE5VTEw7CiAgICAgc2l6ZV90ICAgICAgICAgIGFkZHJlc3NsZW47CiAgICAgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICpjdXJyZW50ID0gTlVMTDsKICAgICBzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgKnRlbXAgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBpID0gMCwgbiA9IDEsIHQgPSAwOwotCi0gICAgLyogZm9yIGlwdjQsaXB2NiAqLwotICAgIHVuc2lnbmVkIGludCAgICBhZGRyX2luLCBhZGRyX2luNjsKLSAgICBzdHJ1Y3QgaG9zdGVudCAqbG9va3VwID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgaSA9IDAsIG4gPSAxOwogCiAgICAgc3RydWN0IHRpbWV2YWwgIHRwc3RhcnQsIHRwZW5kOwotICAgIHVuc2lnbmVkIGxvbmcgICB0aW1ldXNlLCB0aW1ldXNlNCwgdGltZXVzZTY7Ci0KLSAgICAvKiBmb3IgZG5zICovCi0KLSAgICBzdHJ1Y3QgaW5fYWRkciAgYTsKLSAgICBzdHJ1Y3QgaW42X2FkZHIgYTY7CisgICAgdW5zaWduZWQgbG9uZyAgIHRpbWV1c2UsIHRpbWV1c2U0ID0gMCwgdGltZXVzZTYgPSAwOwogCiAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDY2LDQ1NCArNTI2LDI3NSBAQAogICAgIG1lbWNweShhZGRyZXNzLCBpdGVtLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzLCBhZGRyZXNzbGVuICsgMSk7CiAgICAgYWRkcmVzc1thZGRyZXNzbGVuXSA9ICdcMCc7CiAKLSAgICBpZiAoYWRkcmVzc1R5cGUgPT0gMSkgewotICAgICAgICBhZGRyX2luID0gaW5ldF9hZGRyKGFkZHJlc3MpOwotICAgICAgICBpZiAoYWRkcl9pbiA9PSAweGZmZmZmZmZmCi0gICAgICAgICAgICAmJiBzdHJjbXAoYWRkcmVzcywgIjI1NS4yNTUuMjU1LjI1NSIpICE9IDApIHsKKyAgICBpZiAoYWRkcmVzc1R5cGUgPT0gSU5FVEFERFJFU1NUWVBFX0lQVjQpIHsKKyAgICAgICAgc3RydWN0IGluX2FkZHIgYWRkcl9pbjsKKyAgICAgICAgc3RydWN0IGhvc3RlbnQgKmxvb2t1cDsKKworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGFkZHJlc3MsICZhZGRyX2luKSAhPSAxKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwUmVzdWx0c1RhYmxlIiwgIkludmFsaWQgYXJndW1lbnQ6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcykpOworICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDk5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHBzdGFydCwgTlVMTCk7Ci0gICAgICAgIGxvb2t1cCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikgJmFkZHJfaW4sIDQsIEFGX0lORVQpOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwZW5kLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cHN0YXJ0KTsKKyAgICAgICAgbG9va3VwID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKCZhZGRyX2luLCBzaXplb2YoYWRkcl9pbiksIEFGX0lORVQpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwZW5kKTsKICAgICAgICAgdGltZXVzZSA9IDEwMDAwMDAgKiAodHBlbmQudHZfc2VjIC0gdHBzdGFydC50dl9zZWMpICsKICAgICAgICAgICAgIHRwZW5kLnR2X3VzZWMgLSB0cHN0YXJ0LnR2X3VzZWM7CiAgICAgICAgIHRpbWV1c2UgLz0gMTAwMDsKICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFRpbWUoaXRlbSwgdGltZXVzZSk7Ci0gICAgICAgIG1vZGlmeV9sb29rdXBDdGxPcGVyU3RhdHVzKGl0ZW0sIDNsKTsKKyAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bE9wZXJTdGF0dXMoaXRlbSwgM0wpOwogCiAgICAgICAgIGlmIChsb29rdXAgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgYSBuZXR3b3JrIGhvc3QgZW50cnkgZm9yIGlwdjQgYWRkcmVzczogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzKSk7Ci0gICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgMWwpOworICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIGhfZXJybm8pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDBsKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAwTCk7CiAgICAgICAgICAgICBpZiAobG9va3VwLT5oX25hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wID0KLSAgICAgICAgICAgICAgICAgICAgU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzVHlwZSA9IDE2OwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKHN0cmxlbihsb29rdXAtPmhfbmFtZSkgKyAxKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MsIGxvb2t1cC0+aF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4obG9va3VwLT5oX25hbWUpICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3Nbc3RybGVuKGxvb2t1cC0+aF9uYW1lKV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzTGVuID0gc3RybGVuKGxvb2t1cC0+aF9uYW1lKTsKLSAgICAgICAgICAgICAgICBpdGVtLT5SZXN1bHRzVGFibGUgPSB0ZW1wOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wID0gYWRkX3Jlc3VsdChpdGVtLCBuLCBJTkVUQUREUkVTU1RZUEVfRE5TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cC0+aF9uYW1lLCBzdHJsZW4obG9va3VwLT5oX25hbWUpKTsKICAgICAgICAgICAgICAgICBuID0gbiArIDE7Ci0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICB3aGlsZSAobG9va3VwLT5oX2FsaWFzZXNbaV0pIHsKLSAgICAgICAgICAgICAgICB0ZW1wID0gU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2MoaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4W2l0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4TGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2MoaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lW2l0ZW0tPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0luZGV4ID0gbjsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1R5cGUgPSAxNjsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pICsgMSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzLCBsb29rdXAtPmhfYWxpYXNlc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzW3N0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSldID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc0xlbiA9Ci0gICAgICAgICAgICAgICAgICAgIHN0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSk7CisgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0ROUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAtPmhfYWxpYXNlc1tpXSwgc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSk7CiAgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgaSA9IGkgKyAxOwogICAgICAgICAgICAgICAgIG4gPSBuICsgMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSBOVUxMOwotCiAgICAgICAgIH0KIAotCiAgICAgICAgIGlmIChpdGVtLT5SZXN1bHRzVGFibGUgIT0gTlVMTCkKICAgICAgICAgICAgIGlmIChsb29rdXBSZXN1bHRzVGFibGVfYWRkKGl0ZW0pICE9IFNOTVBFUlJfU1VDQ0VTUykKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwUmVzdWx0c1RhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVnaXN0ZXJlZCBhbiBlbnRyeSBlcnJvclxuIikpOwotCiAgICAgICAgIFNOTVBfRlJFRShhZGRyZXNzKTsKLSAgICAgICAgYWRkcmVzcyA9IE5VTEw7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbHNlIGlmIChhZGRyZXNzVHlwZSA9PSAxNikgeworICAgIGVsc2UgaWYgKGFkZHJlc3NUeXBlID09IElORVRBRERSRVNTVFlQRV9ETlMpIHsKKyAgICAgICAgc3RydWN0IGhvc3RlbnQgKmxvb2t1cDsKKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgICAgIGludCAgICAgICAgICAgICByZXM7CisgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqYWlzOworICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMgPSB7IDAsIEFGX0lORVQ2LCBTT0NLX0RHUkFNIH07CisjZW5kaWYKIAotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwc3RhcnQsIE5VTEwpOwotICAgICAgICBsb29rdXAgPSBnZXRob3N0YnluYW1lKGFkZHJlc3MpOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwZW5kLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cHN0YXJ0KTsKKyAgICAgICAgbG9va3VwID0gbmV0c25tcF9nZXRob3N0YnluYW1lKGFkZHJlc3MpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwZW5kKTsKICAgICAgICAgdGltZXVzZTQgPSAxMDAwMDAwICogKHRwZW5kLnR2X3NlYyAtIHRwc3RhcnQudHZfc2VjKSArCiAgICAgICAgICAgICB0cGVuZC50dl91c2VjIC0gdHBzdGFydC50dl91c2VjOwotICAgICAgICB0aW1ldXNlNCAvPSAxMDAwOwogICAgICAgICBpZiAobG9va3VwID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IGEgbmV0d29yayBob3N0IGVudHJ5IGZvciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCBoX2Vycm5vKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdoaWxlICgqbG9va3VwLT5oX2FkZHJfbGlzdCkgewotICAgICAgICAgICAgICAgIGJjb3B5KCpsb29rdXAtPmhfYWRkcl9saXN0KyssIChjaGFyICopICZhLCBzaXplb2YoYSkpOworICAgICAgICAgICAgd2hpbGUgKGxvb2t1cC0+aF9hZGRyX2xpc3RbaV0pIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1Zls2NF07CisgICAgICAgICAgICAgICAgaW50IGJ1ZmxlbjsKIAotICAgICAgICAgICAgICAgIHRlbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwUmVzdWx0c1RhYmxlX2RhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICBpbmV0X250b3AobG9va3VwLT5oX2FkZHJ0eXBlLCBsb29rdXAtPmhfYWRkcl9saXN0W2ldLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICBidWZsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvb2t1cC0+aF9hZGRydHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjQsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjYsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5zbG9va3VwLW1pYi9ydW5fbG9va3VwOiBVbmtub3duIGFkZHJlc3MgdHlwZSAlZFxuIiwgbG9va3VwLT5oX2FkZHJ0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX1VOS05PV04sICIiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgIkFkZGluZyAlZCAlc1xuIiwgbiwgYnVmKSk7CiAKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lW2l0ZW0tPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NUeXBlID0gMTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhzdHJsZW4oaW5ldF9udG9hKGEpKSArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcywgaW5ldF9udG9hKGEpLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oaW5ldF9udG9hKGEpKSArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzW3N0cmxlbihpbmV0X250b2EoYSkpXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NMZW4gPSBzdHJsZW4oaW5ldF9udG9hKGEpKTsKICAgICAgICAgICAgICAgICBpZiAobiA9PSAxKQogICAgICAgICAgICAgICAgICAgICBpdGVtLT5SZXN1bHRzVGFibGUgPSB0ZW1wOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCisgICAgICAgICAgICAgICAgaSA9IGkgKyAxOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICB0ID0gbjsKLQogICAgICAgICB9CiAKLSAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhwOwotICAgICAgICBjaGFyICAgICAgICAgICAgcGFbNjRdOwotICAgICAgICBjaGFyICAgICAgICAgICAqaG9zdG5hbWUgPSBOVUxMOwotCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHBzdGFydCwgTlVMTCk7Ci0gICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZTIoYWRkcmVzcywgQUZfSU5FVDYpOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwZW5kLCBOVUxMKTsKKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHBzdGFydCk7CisgICAgICAgIHJlcyA9IG5ldHNubXBfZ2V0YWRkcmluZm8oYWRkcmVzcywgTlVMTCwgJmhpbnRzLCAmYWlzKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cGVuZCk7CiAgICAgICAgIHRpbWV1c2U2ID0gMTAwMDAwMCAqICh0cGVuZC50dl9zZWMgLSB0cHN0YXJ0LnR2X3NlYykgKwogICAgICAgICAgICAgdHBlbmQudHZfdXNlYyAtIHRwc3RhcnQudHZfdXNlYzsKLSAgICAgICAgdGltZXVzZTYgLz0gMTAwMDsKIAotICAgICAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICBpZiAocmVzICE9IDApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IGEgaXB2NiBuZXR3b3JrIGhvc3QgZW50cnkgZm9yICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcykpOworICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIHJlcyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAoKmhwLT5oX2FkZHJfbGlzdCkgewotICAgICAgICAgICAgICAgIG1lbW1vdmUoKGNhZGRyX3QpICYgYTYsICpocC0+aF9hZGRyX2xpc3QrKywgMTYpOwotICAgICAgICAgICAgICAgIGhvc3RuYW1lID0gKGNoYXIgKikgaHAtPmhfbmFtZTsKKyAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqYWlwID0gYWlzOworICAgICAgICAgICAgd2hpbGUgKGFpcCkgeworICAgICAgICAgICAgICAgIGNoYXIgYnVmWzY0XTsKKyAgICAgICAgICAgICAgICBpbnQgYnVmbGVuOwogCi0gICAgICAgICAgICAgICAgdGVtcCA9IFNOTVBfTUFMTE9DX1NUUlVDVChsb29rdXBSZXN1bHRzVGFibGVfZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYWlwLT5haV9mYW1pbHkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChhaXAtPmFpX2ZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhaXAtPmFpX2FkZHIpLT5zaW5fYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgICAgICAgICBidWZsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjQsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKGFpcC0+YWlfZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhaXAtPmFpX2FkZHIpLT5zaW42X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmbGVuID0gc3RybGVuKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9JUFY2LCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuc2xvb2t1cC1taWIvcnVuX2xvb2t1cDogVW5rbm93biBhZGRyZXNzIHR5cGUgJWRcbiIsIGFpcC0+YWlfZmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX1VOS05PV04sICIiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgIkFkZGluZyAlZCAlc1xuIiwgbiwgYnVmKSk7CiAKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzVHlwZSA9IDI7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQotICAgICAgICAgICAgICAgICAgICBtYWxsb2Moc3RybGVuKGluZXRfbnRvcChBRl9JTkVUNiwgJmE2LCBwYSwgNjQpKSArIDEpOwotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYTYsIHBhLCA2NCksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihpbmV0X250b3AoQUZfSU5FVDYsICZhNiwgcGEsIDY0KSkgKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT4KLSAgICAgICAgICAgICAgICAgICAgbG9va3VwUmVzdWx0c0FkZHJlc3Nbc3RybGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmV0X250b3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBRl9JTkVUNiwgJmE2LCBwYSwgNjQpKV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzTGVuID0KLSAgICAgICAgICAgICAgICAgICAgc3RybGVuKGluZXRfbnRvcChBRl9JTkVUNiwgJmE2LCBwYSwgNjQpKTsKICAgICAgICAgICAgICAgICBpZiAobiA9PSAxKQogICAgICAgICAgICAgICAgICAgICBpdGVtLT5SZXN1bHRzVGFibGUgPSB0ZW1wOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCisgICAgICAgICAgICAgICAgYWlwID0gYWlwLT5haV9uZXh0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICBmcmVlYWRkcmluZm8oYWlzKTsKICAgICAgICAgfQorI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FMgorICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwc3RhcnQpOworICAgICAgICBsb29rdXAgPSBnZXRob3N0YnluYW1lMihhZGRyZXNzLCBBRl9JTkVUNik7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHBlbmQpOworICAgICAgICB0aW1ldXNlNiA9IDEwMDAwMDAgKiAodHBlbmQudHZfc2VjIC0gdHBzdGFydC50dl9zZWMpICsKKyAgICAgICAgICAgIHRwZW5kLnR2X3VzZWMgLSB0cHN0YXJ0LnR2X3VzZWM7CisKKyAgICAgICAgaWYgKGxvb2t1cCA9PSBOVUxMKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhIGlwdjYgbmV0d29yayBob3N0IGVudHJ5IGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCBoX2Vycm5vKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgd2hpbGUgKGxvb2t1cC0+aF9hZGRyX2xpc3RbaV0pIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1Zls2NF07CisgICAgICAgICAgICAgICAgaW50IGJ1ZmxlbjsKKworICAgICAgICAgICAgICAgIGluZXRfbnRvcChsb29rdXAtPmhfYWRkcnR5cGUsIGxvb2t1cC0+aF9hZGRyX2xpc3RbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICBidWZsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvb2t1cC0+aF9hZGRydHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjQsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjYsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5zbG9va3VwLW1pYi9ydW5fbG9va3VwOiBVbmtub3duIGFkZHJlc3MgdHlwZSAlZFxuIiwgbG9va3VwLT5oX2FkZHJ0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX1VOS05PV04sICIiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJBZGRpbmcgJWQgJXNcbiIsIG4sIGJ1ZikpOworCisgICAgICAgICAgICAgICAgaWYgKG4gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgaXRlbS0+UmVzdWx0c1RhYmxlID0gdGVtcDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSB0ZW1wOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wOworICAgICAgICAgICAgICAgIG4gPSBuICsgMTsKKyAgICAgICAgICAgICAgICBpID0gaSArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIHRpbWV1c2UgPSB0aW1ldXNlNCArIHRpbWV1c2U2OworICAgICAgICB0aW1ldXNlIC89IDEwMDA7CiAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxUaW1lKGl0ZW0sIHRpbWV1c2UpOwotICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhpdGVtLCAzbCk7CisgICAgICAgIG1vZGlmeV9sb29rdXBDdGxPcGVyU3RhdHVzKGl0ZW0sIDNMKTsKIAogICAgICAgICBpZiAoaXRlbS0+UmVzdWx0c1RhYmxlICE9IE5VTEwpIHsKLQotICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDBsKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAwTCk7CiAgICAgICAgICAgICBpZiAobG9va3VwUmVzdWx0c1RhYmxlX2FkZChpdGVtKSAhPSBTTk1QRVJSX1NVQ0NFU1MpCiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYW4gZW50cnkgZXJyb3JcbiIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAxbCk7CiAgICAgICAgIH0KICAgICAgICAgU05NUF9GUkVFKGFkZHJlc3MpOwotICAgICAgICBhZGRyZXNzID0gTlVMTDsKLQogICAgICAgICByZXR1cm47Ci0KICAgICB9CiAKKyAgICBlbHNlIGlmIChhZGRyZXNzVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfSVBWNikgeworICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkcl9pbjY7CisgICAgICAgIHN0cnVjdCBob3N0ZW50ICpsb29rdXA7CiAKLSAgICBlbHNlIGlmIChhZGRyZXNzVHlwZSA9PSAyKSB7CiAgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFkZHJlc3MsICZhZGRyX2luNikgPT0gMSkKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJzdWNjZXNzISBcbiIpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgImVycm9yISBcbiIpKTsKIAotCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHBzdGFydCwgTlVMTCk7Ci0gICAgICAgIGxvb2t1cCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikgJmFkZHJfaW42LCAxNiwgQUZfSU5FVDYpOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwZW5kLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cHN0YXJ0KTsKKyAgICAgICAgbG9va3VwID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKCZhZGRyX2luNiwgc2l6ZW9mKGFkZHJfaW42KSwgQUZfSU5FVDYpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwZW5kKTsKICAgICAgICAgdGltZXVzZSA9IDEwMDAwMDAgKiAodHBlbmQudHZfc2VjIC0gdHBzdGFydC50dl9zZWMpICsKICAgICAgICAgICAgIHRwZW5kLnR2X3VzZWMgLSB0cHN0YXJ0LnR2X3VzZWM7CiAgICAgICAgIHRpbWV1c2UgLz0gMTAwMDsKICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFRpbWUoaXRlbSwgdGltZXVzZSk7Ci0gICAgICAgIG1vZGlmeV9sb29rdXBDdGxPcGVyU3RhdHVzKGl0ZW0sIDNsKTsKKyAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bE9wZXJTdGF0dXMoaXRlbSwgM0wpOwogCiAgICAgICAgIGlmIChsb29rdXAgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgYSBuZXR3b3JrIGhvc3QgZW50cnkgZm9yICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcykpOwotICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDFsKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCBoX2Vycm5vKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAwbCk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgMEwpOwogICAgICAgICAgICAgaWYgKGxvb2t1cC0+aF9uYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcCA9Ci0gICAgICAgICAgICAgICAgICAgIFNOTVBfTUFMTE9DX1NUUlVDVChsb29rdXBSZXN1bHRzVGFibGVfZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzSW5kZXggPSBuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhbaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVbaXRlbS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1R5cGUgPSAxNjsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhzdHJsZW4obG9va3VwLT5oX25hbWUpICsgMSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzLCBsb29rdXAtPmhfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGxvb2t1cC0+aF9uYW1lKSArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzW3N0cmxlbihsb29rdXAtPmhfbmFtZSldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc0xlbiA9IHN0cmxlbihsb29rdXAtPmhfbmFtZSk7Ci0gICAgICAgICAgICAgICAgaXRlbS0+UmVzdWx0c1RhYmxlID0gdGVtcDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0ROUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAtPmhfbmFtZSwgc3RybGVuKGxvb2t1cC0+aF9uYW1lKSk7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgd2hpbGUgKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSB7Ci0gICAgICAgICAgICAgICAgdGVtcCA9IFNOTVBfTUFMTE9DX1NUUlVDVChsb29rdXBSZXN1bHRzVGFibGVfZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NUeXBlID0gMTY7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcywgbG9va3VwLT5oX2FsaWFzZXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSkgKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1tzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NMZW4gPQotICAgICAgICAgICAgICAgICAgICBzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wID0gYWRkX3Jlc3VsdChpdGVtLCBuLCBJTkVUQUREUkVTU1RZUEVfRE5TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cC0+aF9hbGlhc2VzW2ldLCBzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pKTsKICAgICAgICAgICAgICAgICBjdXJyZW50LT5uZXh0ID0gdGVtcDsKICAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcDsKICAgICAgICAgICAgICAgICBpID0gaSArIDE7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpdGVtLT5SZXN1bHRzVGFibGUgIT0gTlVMTCkKICAgICAgICAgICAgICAgICBjdXJyZW50LT5uZXh0ID0gTlVMTDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjdXJyZW50ID0gTlVMTDsKLQogICAgICAgICB9CiAKLQogICAgICAgICBpZiAoaXRlbS0+UmVzdWx0c1RhYmxlICE9IE5VTEwpCiAgICAgICAgICAgICBpZiAobG9va3VwUmVzdWx0c1RhYmxlX2FkZChpdGVtKSAhPSBTTk1QRVJSX1NVQ0NFU1MpCiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYW4gZW50cnkgZXJyb3JcbiIpKTsKICAgICAgICAgU05NUF9GUkVFKGFkZHJlc3MpOwotICAgICAgICBhZGRyZXNzID0gTlVMTDsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFNOTVBfRlJFRShhZGRyZXNzKTsKLSAgICAgICAgYWRkcmVzcyA9IE5VTEw7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC05MjUsOCArODA2LDExIEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LCB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsgICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7ICAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CiAKIAogICAgIGlmICgoU3RvcmFnZVRtcCA9CkBAIC05NTAsOCArODM0LDExIEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LCB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsgICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7ICAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CiAKIAogICAgIGlmICgoU3RvcmFnZVRtcCA9CkBAIC05NzUsOCArODYyLDExIEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LCB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsgICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7ICAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CiAKIAogICAgIGlmICgoU3RvcmFnZVRtcCA9CkBAIC0xMDAzLDkgKzg5MywxMiBAQAogICAgIG9pZCAgICAgICAgICAgICBuZXdvaWRbTUFYX09JRF9MRU5dOwogICAgIHNpemVfdCAgICAgICAgICBuZXdvaWRfbGVuOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAgLyogbG9va3VwQ3RsT3BlcmF0aW9uTmFtZSAqLwotICAgIGJ6ZXJvKG5ld29pZCwgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CisgICAgbWVtc2V0KG5ld29pZCwgJ1wwJywgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOwogCiAKQEAgLTEwMzIsNiArOTI1LDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiB3cml0ZV9sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZShpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTEwNjksMzIgKzk2MywyOCBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIFJFU0VSVkUyOgogICAgICAgICAvKgogICAgICAgICAgKiBtZW1vcnkgcmVzZXZlcmF0aW9uLCBmaW5hbCBwcmVwYXJhdGlvbi4uLiAKICAgICAgICAgICovCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIEZSRUU6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFJlbGVhc2UgYW55IHJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgCiAgICAgICAgICAqLwogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBBQ1RJT046CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoZSB2YXJpYWJsZSBoYXMgYmVlbiBzdG9yZWQgaW4gb2JqaWQgZm9yCiAgICAgICAgICAqIHlvdSB0byB1c2UsIGFuZCB5b3UgaGF2ZSBqdXN0IGJlZW4gYXNrZWQgdG8gZG8gc29tZXRoaW5nIHdpdGgKLSAgICAgICAgICogaXQuICBOb3RlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIG11c3QgYmUgcmV2ZXJzYWJsZSBpbiB0aGUgVU5ETyBjYXNlIAorICAgICAgICAgKiBpdC4gIE5vdGUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgbXVzdCBiZSByZXZlcnNhYmxlIGluIHRoZSBVTkRPIGNhc2UKICAgICAgICAgICovCiAgICAgICAgIHRtcHZhciA9IFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlOwogICAgICAgICBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZSA9ICooKGxvbmcgKikgdmFyX3ZhbCk7CiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIFVORE86CiAgICAgICAgIC8qCiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIApAQCAtMTEwMiwxMiArOTkyLDE1IEBACiAgICAgICAgIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlID0gdG1wdmFyOwogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBDT01NSVQ6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTE1MCwzNyArMTA0MywzMiBAQAogICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIGxvb2t1cEN0bFRhcmdldEFkZHJlc3Mgbm90IEFTTl9PQ1RFVF9TVFJcbiIpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKICAgICAgICAgfQotCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIFJFU0VSVkUyOgogICAgICAgICAvKgogICAgICAgICAgKiBtZW1vcnkgcmVzZXZlcmF0aW9uLCBmaW5hbCBwcmVwYXJhdGlvbi4uLiAKICAgICAgICAgICovCi0KICAgICAgICAgYnJlYWs7CiAKLQogICAgIGNhc2UgRlJFRToKICAgICAgICAgLyoKICAgICAgICAgICogUmVsZWFzZSBhbnkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCAKICAgICAgICAgICovCi0KICAgICAgICAgYnJlYWs7CiAKLQogICAgIGNhc2UgQUNUSU9OOgogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgdmFyaWFibGUgaGFzIGJlZW4gc3RvcmVkIGluIGxvbmdfcmV0IGZvcgogICAgICAgICAgKiB5b3UgdG8gdXNlLCBhbmQgeW91IGhhdmUganVzdCBiZWVuIGFza2VkIHRvIGRvIHNvbWV0aGluZyB3aXRoCi0gICAgICAgICAqIGl0LiAgTm90ZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBtdXN0IGJlIHJldmVyc2FibGUgaW4gdGhlIFVORE8gY2FzZSAKKyAgICAgICAgICogaXQuICBOb3RlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIG11c3QgYmUgcmV2ZXJzYWJsZSBpbiB0aGUgVU5ETyBjYXNlCiAgICAgICAgICAqLwogICAgICAgICB0bXB2YXIgPSBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzOwogICAgICAgICB0bXBsZW4gPSBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzTGVuOwogCiAgICAgICAgIGlmICgoU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzcyA9CiAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKHZhcl92YWxfbGVuICsgMSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5IGluIG5zbG9va3VwLW1pYi93cml0ZV9sb29rdXBDdGxUYXJnZXRBZGRyZXNzXG4iKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KICAgICAgICAgbWVtY3B5KFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3MsIHZhcl92YWwsIHZhcl92YWxfbGVuKTsKQEAgLTExODksNyArMTA3Nyw2IEBACiAKICAgICAgICAgYnJlYWs7CiAKLQogICAgIGNhc2UgVU5ETzoKICAgICAgICAgLyoKICAgICAgICAgICogQmFjayBvdXQgYW55IGNoYW5nZXMgbWFkZSBpbiB0aGUgQUNUSU9OIGNhc2UgCkBAIC0xMjAxLDcgKzEwODgsNiBAQAogCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIENPTU1JVDoKICAgICAgICAgLyoKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCkBAIC0xMjExLDYgKzEwOTcsOSBAQAogICAgICAgICBmcmVlKHRtcHZhcik7CiAgICAgICAgIHRtcHZhciA9IE5VTEw7CiAKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTIxOCw5ICsxMTA3LDYgQEAKIAogCiAKLQotCi0KIGludAogd3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTEyMjksNyArMTExNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7Ci0gICAgc3RhdGljIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlTmV3LCAqU3RvcmFnZURlbCA9IE5VTEw7CisgICAgc3RhdGljIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlTmV3ID0gTlVMTCwgKlN0b3JhZ2VEZWwgPSBOVUxMOwogICAgIHNpemVfdCAgICAgICAgICBuZXdsZW4gPQogICAgICAgICBuYW1lX2xlbiAtIChzaXplb2YobG9va3VwQ3RsVGFibGVfdmFyaWFibGVzX29pZCkgLyBzaXplb2Yob2lkKSArCiAgICAgICAgICAgICAgICAgICAgIDMgLSAxKTsKQEAgLTEyNzYsNyArMTE2Miw2IEBACiAgICAgICAgICAgICAgKiBkaXRjaCBpbGxlZ2FsIHZhbHVlcyBub3cgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmIChzZXRfdmFsdWUgPT0gUlNfQUNUSVZFIHx8IHNldF92YWx1ZSA9PSBSU19OT1RJTlNFUlZJQ0UpIHsKLQogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKICAgICAgICAgICAgIH0KIApAQCAtMTM3OCw3ICsxMjYzLDcgQEAKICAgICAgICAgICAgICAqIFhYWDogZmlsbCBpbiBkZWZhdWx0IHJvdyB2YWx1ZXMgaGVyZSBpbnRvIFN0b3JhZ2VOZXcgCiAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPSAxOyAvKiBpcHY0ICovCisgICAgICAgICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OwogCiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxSb3dTdGF0dXMgPSBzZXRfdmFsdWU7CiAKQEAgLTEzODksMTMgKzEyNzQsOCBAQAogICAgICAgICAgICAgICogWFhYOiBmcmVlLCB6ZXJvIHZhcnMsIG5vIGxvbmdlciBuZWVkZWQ/IAogICAgICAgICAgICAgICovCiAgICAgICAgIH0KLQotCiAgICAgICAgIGJyZWFrOwogCi0KLQotCiAgICAgY2FzZSBGUkVFOgogICAgICAgICAvKgogICAgICAgICAgKiBYWFg6IGZyZWUsIHplcm8gdmFycyAKQEAgLTE0MDUsOSArMTI4NSw2IEBACiAgICAgICAgICAqLwogICAgICAgICBicmVhazsKIAotCi0KLQogICAgIGNhc2UgQUNUSU9OOgogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgdmFyaWFibGUgaGFzIGJlZW4gc3RvcmVkIGluIHNldF92YWx1ZSBmb3IgeW91IHRvCkBAIC0xNDE1LDggKzEyOTIsNiBAQAogICAgICAgICAgKiBpdC4gIE5vdGUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgbXVzdCBiZSByZXZlcnNhYmxlIGluCiAgICAgICAgICAqIHRoZSBVTkRPIGNhc2UgCiAgICAgICAgICAqLwotCi0KICAgICAgICAgaWYgKFN0b3JhZ2VUbXAgPT0gTlVMTCkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHJvdyBjcmVhdGlvbiwgc28gYWRkIGl0IApAQCAtMTQyNSwxMSArMTMwMCw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldyAhPSBOVUxMKQotI2lmIDEKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZV9sb29rdXBDdGxSb3dTdGF0dXMgZW50ZXJpbmcgbmV3PSVkLi4uICBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKSk7Ci0jZW5kaWYKICAgICAgICAgICAgIGxvb2t1cEN0bFRhYmxlX2FkZChTdG9yYWdlTmV3KTsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBYWFg6IGFjaywgYW5kIGlmIGl0IGlzIE5VTEw/IApAQCAtMTQ2MSw5ICsxMzM0LDYgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAotCi0KLQogICAgIGNhc2UgVU5ETzoKICAgICAgICAgLyoKICAgICAgICAgICogQmFjayBvdXQgYW55IGNoYW5nZXMgbWFkZSBpbiB0aGUgQUNUSU9OIGNhc2UgCkBAIC0xNDk1LDkgKzEzNjUsNiBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0KLQotCiAgICAgY2FzZSBDT01NSVQ6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQpAQCAtMTUxMSwxNSArMTM3OCw5IEBACiAKICAgICAgICAgaWYgKFN0b3JhZ2VEZWwgIT0gTlVMTCkgewogICAgICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VEZWwtPmxvb2t1cEN0bE93bmVySW5kZXgpOwotICAgICAgICAgICAgU3RvcmFnZURlbC0+bG9va3VwQ3RsT3duZXJJbmRleCA9IE5VTEw7CiAgICAgICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgICAgICBTdG9yYWdlRGVsLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0gTlVMTDsKICAgICAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzKTsKLSAgICAgICAgICAgIFN0b3JhZ2VEZWwtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3MgPSBOVUxMOwogICAgICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VEZWwpOwotICAgICAgICAgICAgU3RvcmFnZURlbCA9IE5VTEw7Ci0KLSAgICAgICAgICAgIFN0b3JhZ2VEZWwgPSAwOwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFhYWDogZnJlZSBpdCwgaXRzIGRlYWQgCiAgICAgICAgICAgICAgKi8KQEAgLTE1MzUsMTggKzEzOTYsMjAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoU3RvcmFnZVRtcCAmJiBTdG9yYWdlVG1wLT5sb29rdXBDdGxSb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSB7Ci0jaWYgMQogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZV9sb29rdXBDdGxSb3dTdGF0dXMgZW50ZXJpbmcgcnVuYmVmb3JlPSVsZC4uLiAgXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGUpKTsKIAotI2VuZGlmCi0gICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhTdG9yYWdlVG1wLCAybCk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhTdG9yYWdlVG1wLCAyTCk7CiAgICAgICAgICAgICBydW5fbG9va3VwKChzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqKSBTdG9yYWdlVG1wKTsKIAogICAgICAgICB9CiAKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgKaW5kZXggZjczYjA2Mi4uMDg1YjI1YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgKQEAgLTI0LDkgKzI0LDggQEAKICAgICAvKgogICAgICAqIG91ciBzdG9yYWdlIHN0cnVjdHVyZShzKSAKICAgICAgKi8KKwogc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgewotCi0KICAgICBjaGFyICAgICAgICAgICAqbG9va3VwQ3RsT3duZXJJbmRleDsgICAgICAgIC8qIHN0cmluZyAqLwogICAgIHNpemVfdCAgICAgICAgICBsb29rdXBDdGxPd25lckluZGV4TGVuOwogICAgIGNoYXIgICAgICAgICAgICpsb29rdXBDdGxPcGVyYXRpb25OYW1lOyAgICAgLyogc3RyaW5nICovCkBAIC00MSwxMCArNDAsMTAgQEAKICAgICBpbnQgICAgICAgICAgICAgc3RvcmFnZXR5cGU7CiAKICAgICBzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgKlJlc3VsdHNUYWJsZTsKLQotCiB9OwotdHlwZWRlZiBzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgeworCisKK3N0cnVjdCBsb29rdXBSZXN1bHRzVGFibGVfZGF0YSB7CiAgICAgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICpuZXh0OwogICAgIGNoYXIgICAgICAgICAgICpsb29rdXBDdGxPd25lckluZGV4OyAgICAgICAgLyogc3RyaW5nICovCiAgICAgc2l6ZV90ICAgICAgICAgIGxvb2t1cEN0bE93bmVySW5kZXhMZW47CkBAIC01NSw3ICs1NCw3IEBACiAgICAgY2hhciAgICAgICAgICAgKmxvb2t1cFJlc3VsdHNBZGRyZXNzOwogICAgIHNpemVfdCAgICAgICAgICBsb29rdXBSZXN1bHRzQWRkcmVzc0xlbjsKICAgICBpbnQgICAgICAgICAgICAgc3RvcmFnZXR5cGU7Ci19IHJlc3VsdHNJbnM7Cit9OwogCiAvKgogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIApAQCAtNjUsMjMgKzY0LDI0IEBACiB2b2lkICAgICAgICAgICAgcGFyc2VfbG9va3VwQ3RsVGFibGUoY29uc3QgY2hhciAqLCBjaGFyICopOwogU05NUENhbGxiYWNrICAgIHN0b3JlX2xvb2t1cEN0bFRhYmxlOwogCi0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogV3JpdGVNZXRob2QgICAgIHdyaXRlX2xvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlOwogV3JpdGVNZXRob2QgICAgIHdyaXRlX2xvb2t1cEN0bFRhcmdldEFkZHJlc3M7CiBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzOwogCiBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoKICAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGxvb2t1cEN0bFRhYmxlIAogICovCiAjZGVmaW5lIENPTFVNTl9MT09LVVBDVExPV05FUklOREVYCQkxCiAjZGVmaW5lIENPTFVNTl9MT09LVVBDVExPUEVSQVRJT05OQU1FCQkyCi0jZGVmaW5lIENPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTVFlQRQkJMworI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTU1RZUEUJMwogI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTUwkJNAogI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUwkJNQotI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMVElNRQkJNgotI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMUkMJCTcKKyNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTFRJTUUJCQk2CisjZGVmaW5lIENPTFVNTl9MT09LVVBDVExSQwkJCTcKICNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTFJPV1NUQVRVUwkJOAogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExPT0tVUE1JQl9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmMKaW5kZXggYzVmZDJiNy4uZDZhOTM3YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuYwpAQCAtMTQsMjAgKzE0LDYgQEAKIC8qCiAgKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgaW5jbHVkZWQgZmlyc3QgYmVmb3JlIGFueXRoaW5nIGVsc2UgCiAgKi8KLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTElNSVRTX0gKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbmRpZgotCi0KLQogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KQEAgLTQyLDggKzI4LDEwIEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MiwgMSwgNCB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIGxvb2t1cFJlc3VsdHNUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7Q09MVU1OX0xPT0tVUFJFU1VMVFNBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9va3VwUmVzdWx0c1RhYmxlLCAyLCB7MSwgMn19LAotICAgIHtDT0xVTU5fTE9PS1VQUkVTVUxUU0FERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sb29rdXBSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0KKyAgICB7Q09MVU1OX0xPT0tVUFJFU1VMVFNBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwUmVzdWx0c1RhYmxlLCAyLCB7MSwgMn19LAorICAgIHtDT0xVTU5fTE9PS1VQUkVTVUxUU0FERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0KIH07CiAKIC8qCkBAIC0yMzcsOSArMjI1LDE1IEBACiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzX2xpc3QgPSBOVUxMOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LCB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsgICAgICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLCB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsgICAgICAgIC8qIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwgKGNoYXIgKikgJnRoZWRhdGEtPmxvb2t1cFJlc3VsdHNJbmRleCwgc2l6ZW9mKHRoZWRhdGEtPmxvb2t1cFJlc3VsdHNJbmRleCkpOyAgIC8qIGxvb2t1cFJlc3VsdHNJbmRleCAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAJCShjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsCisJCXRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAJCShjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisJCXRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX1VOU0lHTkVELAorICAgIAkJKGNoYXIgKikgJnRoZWRhdGEtPmxvb2t1cFJlc3VsdHNJbmRleCwKKwkJc2l6ZW9mKHRoZWRhdGEtPmxvb2t1cFJlc3VsdHNJbmRleCkpOwogCiAgICAgLyoKICAgICAgKiBYWFg6IGZpbGwgaW4gZGVmYXVsdCByb3cgdmFsdWVzIGhlcmUgaW50byBTdG9yYWdlTmV3IApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYwppbmRleCAxZTEwMmEwLi44N2IwOWVmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYwpAQCAtNTUsNiArNTUsNyBAQAogc3RhdGljIF9faW5saW5lX18gaW50IGlwdjZfYWRkcl9hbnkoc3RydWN0IGluNl9hZGRyICopOwogc3RhdGljIGNoYXIgICAgKnByX2FkZHIoc3RydWN0IGluNl9hZGRyICosIGludCk7CiBzdGF0aWMgY2hhciAgICAqcHJfYWRkcl9uKHN0cnVjdCBpbjZfYWRkciAqKTsKK3ZvaWQgcGluZ0N0bFRhYmxlX2NsZWFuZXIoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICp0aGVzdHVmZik7CiAKIC8qCiAgKnBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkOgpAQCAtNjQsNiArNjUsNyBAQAogCiBvaWQgICAgICAgICAgICAgcGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWRbXSA9CiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MCwgMSwgMiB9Oworc3RhdGljIGNvbnN0IGludCBwaW5nQ3RsVGFibGVfdmFyaWFibGVzX29pZF9sZW4gPSBzaXplb2YocGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWQpL3NpemVvZihwaW5nQ3RsVGFibGVfdmFyaWFibGVzX29pZFswXSk7CiAKIC8qIHRyYXAgKi8KIG9pZCAgICAgICAgICAgICBwaW5nUHJvYmVGYWlsZWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODAsIDAsIDEgfTsKQEAgLTc1LDI3ICs3Nyw0OCBAQAogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KLSAgICB7Q09MVU1OX1BJTkdDVExUQVJHRVRBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExUQVJHRVRBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDR9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExEQVRBU0laRSwgICAgICAgICBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fUElOR0NUTFRJTUVPVVQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMUFJPQkVDT1VOVCwgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDd9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExBRE1JTlNUQVRVUywgICAgICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDh9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExEQVRBRklMTCwgICAgICAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDl9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExGUkVRVUVOQ1ksICAgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDEwfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMTUFYUk9XUywgICAgICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxMX19LAotICAgIHtDT0xVTU5fUElOR0NUTFNUT1JBR0VUWVBFLCAgICAgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTJ9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExUUkFQR0VORVJBVElPTiwgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDEzfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMVFJBUFBST0JFRkFJTFVSRUZJTFRFUiwgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxNH19LAotICAgIHtDT0xVTU5fUElOR0NUTFRSQVBURVNURkFJTFVSRUZJTFRFUiwgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTV9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExUWVBFLCAgICAgICAgICAgIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE2fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMREVTQ1IsICAgICAgICAgICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxN319LAotICAgIHtDT0xVTU5fUElOR0NUTFNPVVJDRUFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTh9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExTT1VSQ0VBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE5fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMSUZJTkRFWCwgICAgICAgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAyMH19LAotICAgIHtDT0xVTU5fUElOR0NUTEJZUEFTU1JPVVRFVEFCTEUsICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjF9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExEU0ZJRUxELCAgICAgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDIyfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMUk9XU1RBVFVTLCAgICAgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAyM319CisgICAge0NPTFVNTl9QSU5HQ1RMVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9QSU5HQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMREFUQVNJWkUsICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExUSU1FT1VULCAgICAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtDT0xVTU5fUElOR0NUTFBST0JFQ09VTlQsICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA3fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMQURNSU5TVEFUVVMsICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMREFUQUZJTEwsICAgICAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA5fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMRlJFUVVFTkNZLCAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxMH19LAorICAgIHtDT0xVTU5fUElOR0NUTE1BWFJPV1MsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTF9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExTVE9SQUdFVFlQRSwgICAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDEyfX0sCisgICAge0NPTFVNTl9QSU5HQ1RMVFJBUEdFTkVSQVRJT04sICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxM319LAorICAgIHtDT0xVTU5fUElOR0NUTFRSQVBQUk9CRUZBSUxVUkVGSUxURVIsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTR9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExUUkFQVEVTVEZBSUxVUkVGSUxURVIsICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE1fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMVFlQRSwgICAgICAgICAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxNn19LAorICAgIHtDT0xVTU5fUElOR0NUTERFU0NSLCAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTd9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExTT1VSQ0VBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE4fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMU09VUkNFQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxOX19LAorICAgIHtDT0xVTU5fUElOR0NUTElGSU5ERVgsICAgICAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjB9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExCWVBBU1NST1VURVRBQkxFLCAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDIxfX0sCisgICAge0NPTFVNTl9QSU5HQ1RMRFNGSUVMRCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAyMn19LAorICAgIHtDT0xVTU5fUElOR0NUTFJPV1NUQVRVUywgICAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjN9fQogfTsKIAogCkBAIC0xMzYsMTQgKzE1OSwyNCBAQAogICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiZG9uZS5cbiIpKTsKIH0KIAordm9pZCBzaHV0ZG93bl9waW5nQ3RsVGFibGUodm9pZCkKK3sKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlX3BpbmdDdGxUYWJsZSwgTlVMTCwgMSk7CisgICAgc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigicGluZ0N0bFRhYmxlIik7CisgICAgdW5yZWdpc3Rlcl9taWIocGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWQsIHBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkX2xlbik7CisgICAgcGluZ0N0bFRhYmxlX2NsZWFuZXIocGluZ0N0bFRhYmxlU3RvcmFnZSk7CisgICAgcGluZ0N0bFRhYmxlU3RvcmFnZSA9IE5VTEw7Cit9CisKIHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqCiBjcmVhdGVfcGluZ0N0bFRhYmxlX2RhdGEodm9pZCkKIHsKICAgICBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VOZXcgPSBOVUxMOworCiAgICAgU3RvcmFnZU5ldyA9IFNOTVBfTUFMTE9DX1NUUlVDVChwaW5nQ3RsVGFibGVfZGF0YSk7Ci0gICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkgewotICAgICAgICBleGl0KDEpOwotICAgIH0KKyAgICBpZiAoU3RvcmFnZU5ldyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPSAxOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUYXJnZXRBZGRyZXNzID0gc3RyZHVwKCIiKTsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVGFyZ2V0QWRkcmVzc0xlbiA9IDA7CkBAIC0xNTEsMTkgKzE4NCwxNyBAQAogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUaW1lT3V0ID0gMzsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsUHJvYmVDb3VudCA9IDE7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bEFkbWluU3RhdHVzID0gMjsKLSAgICBTdG9yYWdlTmV3LT5waW5nQ3RsRGF0YUZpbGwgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKCIwMCIpICsgMSk7CisgICAgU3RvcmFnZU5ldy0+cGluZ0N0bERhdGFGaWxsID0gc3RyZHVwKCIwMCIpOwogICAgIGlmIChTdG9yYWdlTmV3LT5waW5nQ3RsRGF0YUZpbGwgPT0gTlVMTCkgewotICAgICAgICBleGl0KDEpOworICAgICAgICBmcmVlKFN0b3JhZ2VOZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbWVtY3B5KFN0b3JhZ2VOZXctPnBpbmdDdGxEYXRhRmlsbCwgIjAwIiwgc3RybGVuKCIwMCIpICsgMSk7Ci0gICAgU3RvcmFnZU5ldy0+cGluZ0N0bERhdGFGaWxsW3N0cmxlbigiMDAiKV0gPSAnXDAnOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxEYXRhRmlsbExlbiA9IHN0cmxlbihTdG9yYWdlTmV3LT5waW5nQ3RsRGF0YUZpbGwpOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxGcmVxdWVuY3kgPSAwOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxNYXhSb3dzID0gNTA7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFN0b3JhZ2VUeXBlID0gMTsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVHJhcEdlbmVyYXRpb24gPSBzdHJkdXAoIiIpOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUcmFwR2VuZXJhdGlvbkxlbiA9IDA7Ci0gICAgU3RvcmFnZU5ldy0+cGluZ0N0bFRyYXBHZW5lcmF0aW9uTGVuID0gMDsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVHJhcFByb2JlRmFpbHVyZUZpbHRlciA9IDE7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFRyYXBUZXN0RmFpbHVyZUZpbHRlciA9IDE7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFR5cGUgPSBjYWxsb2MoMSwgc2l6ZW9mKG9pZCkgKiBzaXplb2YoMikpOyAgICAgICAvKiAwLjAgKi8KQEAgLTE4NCw2ICsyMTUsMjAgQEAKICAgICByZXR1cm4gU3RvcmFnZU5ldzsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9waW5nQ3RsVGFibGVfZGF0YShzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VEZWwpCit7CisgICAgbmV0c25tcF9hc3NlcnQoU3RvcmFnZURlbCk7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsT3duZXJJbmRleCk7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsVGVzdE5hbWUpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bFRhcmdldEFkZHJlc3MpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bERhdGFGaWxsKTsKKyAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdDdGxUcmFwR2VuZXJhdGlvbik7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsVHlwZSk7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsRGVzY3IpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bFNvdXJjZUFkZHJlc3MpOworICAgIGZyZWUoU3RvcmFnZURlbCk7Cit9CisKIC8qCiAgKiBwaW5nQ3RsVGFibGVfYWRkKCk6IGFkZHMgYSBzdHJ1Y3R1cmUgbm9kZSB0byBvdXIgZGF0YSBzZXQgCiAgKi8KQEAgLTIwMCwxNSArMjQ1LDE2IEBACiAgICAgICovCiAKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LCB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLCB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAgIC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCi0KLQorICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKICAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YSgmcGluZ0N0bFRhYmxlU3RvcmFnZSwgdmFycywgdGhlZGF0YSk7CiAKICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgInJlZ2lzdGVyZWQgYW4gZW50cnlcbiIpKTsKLSAgICB2YXJzID0gTlVMTDsKLSAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgImRvbmUuXG4iKSk7CisKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCkBAIC0yMTYsMTIgKzI2MiwxNiBAQAogcGluZ1Jlc3VsdHNUYWJsZV9hZGQoc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICp0aGVkYXRhKQogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyc19saXN0ID0gTlVMTDsKLSAgICBzdHJ1Y3QgcGluZ1Jlc3VsdHNUYWJsZV9kYXRhICpwID0gTlVMTDsKKyAgICBzdHJ1Y3QgcGluZ1Jlc3VsdHNUYWJsZV9kYXRhICpwOworCiAgICAgcCA9IHRoZWRhdGEtPnBpbmdSZXN1bHRzOwogICAgIGlmICh0aGVkYXRhLT5waW5nUmVzdWx0cyAhPSBOVUxMKSB7CiAKLSAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBwLT5waW5nQ3RsT3duZXJJbmRleCwgcC0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBwLT5waW5nQ3RsVGVzdE5hbWUsIHAtPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAgICAgLyogcGluZ0N0bE9wZXJhdGlvbk5hbWUgKi8KKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxUZXN0TmFtZSwgcC0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBYWFg6IGZpbGwgaW4gZGVmYXVsdCByb3cgdmFsdWVzIGhlcmUgaW50byBTdG9yYWdlTmV3IApAQCAtMjQxLDggKzI5MSw2IEBACiAKICAgICB9CiAKLSAgICBERUJVR01TR1RMKCgicGluZ1Jlc3VsdHNUYWJsZSIsICJkb25lLlxuIikpOwotICAgIHZhcnNfbGlzdCA9IE5VTEw7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIApAQCAtMjUxLDExICsyOTksMTggQEAKIHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9hZGQoc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICp0aGVkYXRhKQogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyc19saXN0OworCiAgICAgdmFyc19saXN0ID0gTlVMTDsKICAgICBpZiAodGhlZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgIC8qIHBpbmdDdGxUZXN0TmFtZSAqLwotICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwgKGNoYXIgKikgJnRoZWRhdGEtPnBpbmdQcm9iZUhpc3RvcnlJbmRleCwgc2l6ZW9mKHRoZWRhdGEtPnBpbmdQcm9iZUhpc3RvcnlJbmRleCkpOyAvKiBwaW5nUHJvYmVIaXN0b3J5SW5kZXggKi8KKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOworICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhlZGF0YS0+cGluZ1Byb2JlSGlzdG9yeUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0aGVkYXRhLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgpKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBYWFg6IGZpbGwgaW4gZGVmYXVsdCByb3cgdmFsdWVzIGhlcmUgaW50byBTdG9yYWdlTmV3IApAQCAtMjc0LDU2ICszMjksNDMgQEAKICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJvdXQgZmluaXNoZWRcbiIpKTsKICAgICB9CiAgICAgCi0gICAgdmFyc19saXN0ID0gTlVMTDsKLSAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwgImRvbmUuXG4iKSk7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAogaW50CiBwaW5nUHJvYmVIaXN0b3J5VGFibGVfYWRkYWxsKHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqdGhlZGF0YSkKIHsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnNfbGlzdCA9IE5VTEw7Ci0gICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICpwID0gTlVMTDsKLSAgICBwID0gdGhlZGF0YS0+cGluZ1Byb2JlSGlzOwotICAgIGlmICh0aGVkYXRhLT5waW5nUHJvYmVIaXMgIT0gTlVMTCkKLSAgICAgICAgZG8gewotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBwLT5waW5nQ3RsT3duZXJJbmRleCwgcC0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHAtPnBpbmdDdGxUZXN0TmFtZSwgcC0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgIC8qIHBpbmdDdGxUZXN0TmFtZSAqLwotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fVU5TSUdORUQsIChjaGFyICopICZwLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgsIHNpemVvZihwLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgpKTsgLyogcGluZ1Byb2JlSGlzdG9yeUluZGV4ICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzX2xpc3Q7CisgICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICpwOwogCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogWFhYOiBmaWxsIGluIGRlZmF1bHQgcm93IHZhbHVlcyBoZXJlIGludG8gU3RvcmFnZU5ldyAKLSAgICAgICAgICAgICAqIAotICAgICAgICAgICAgICovCisgICAgZm9yIChwID0gdGhlZGF0YS0+cGluZ1Byb2JlSGlzOyBwOyBwID0gcC0+bmV4dCkgeworICAgICAgICB2YXJzX2xpc3QgPSBOVUxMOworICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxUZXN0TmFtZUxlbik7CisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX1VOU0lHTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHAtPnBpbmdQcm9iZUhpc3RvcnlJbmRleCkpOworICAgICAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YSgmcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZSwgdmFyc19saXN0LCBwKTsKKyAgICB9CiAKLQotICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJhZGRpbmcgZGF0YS4uLiAgIikpOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGFkZCB0aGUgaW5kZXggdmFyaWFibGVzIHRvIHRoZSB2YXJiaW5kIGxpc3QsIHdoaWNoIGlzIAotICAgICAgICAgICAgICogdXNlZCBieSBoZWFkZXJfY29tcGxleCB0byBpbmRleCB0aGUgZGF0YSAKLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YSgmcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnNfbGlzdCwgcCk7Ci0KLQotICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJvdXQgZmluaXNoZWRcbiIpKTsKLSAgICAgICAgICAgIHZhcnNfbGlzdCA9IE5VTEw7Ci0gICAgICAgICAgICBwID0gcC0+bmV4dDsKLSAgICAgICAgfSB3aGlsZSAocCAhPSBOVUxMKTsKLQotICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLCAiZG9uZS5cbiIpKTsKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCiB2b2lkCiBwaW5nQ3RsVGFibGVfY2xlYW5lcihzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKnRoZXN0dWZmKQogewotICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyOworICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyLCAqbmV4dDsKKyAgICBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VEZWw7CiAKICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwgImNsZWFuZXJvdXQgICIpKTsKLSAgICBmb3IgKGhjaXB0ciA9IHRoZXN0dWZmOyBoY2lwdHIgIT0gTlVMTDsgaGNpcHRyID0gaGNpcHRyLT5uZXh0KSB7Ci0gICAgICAgIGhlYWRlcl9jb21wbGV4X2V4dHJhY3RfZW50cnkoJnBpbmdDdGxUYWJsZVN0b3JhZ2UsIGhjaXB0cik7CisgICAgZm9yIChoY2lwdHIgPSB0aGVzdHVmZjsgaGNpcHRyOyBoY2lwdHIgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBoY2lwdHItPm5leHQ7CisgICAgICAgIFN0b3JhZ2VEZWwgPSBoZWFkZXJfY29tcGxleF9leHRyYWN0X2VudHJ5KCZwaW5nQ3RsVGFibGVTdG9yYWdlLCBoY2lwdHIpOworICAgICAgICBmcmVlX3BpbmdDdGxUYWJsZV9kYXRhKFN0b3JhZ2VEZWwpOwogICAgICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwgImNsZWFuZXIgICIpKTsKICAgICB9CiB9CkBAIC04MjEsMTAgKzg2MywxNSBAQAogICAgIHNpemVfdCAgICAgICAgICBuZXdvaWRfbGVuOwogICAgIHVuc2lnbmVkIGxvbmcgICBjb3VudCA9IDA7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsT3BlcmF0aW9uTmFtZSAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKIAogICAgIGZvciAoaGNpcHRyMiA9IHBpbmdQcm9iZUhpc3RvcnlUYWJsZVN0b3JhZ2U7IGhjaXB0cjIgIT0gTlVMTDsKICAgICAgICAgIGhjaXB0cjIgPSBoY2lwdHIyLT5uZXh0KSB7CkBAIC04NDIsMTcgKzg4OSwyMSBAQAogewogICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyMiA9IE5VTEw7CiAgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lsYXN0ID0gTlVMTDsKLSAgICBzdHJ1Y3QgcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOworICAgIHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSAqU3RvcmFnZVRtcCwgKlN0b3JhZ2VEZWw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBvaWQgICAgICAgICAgICAgbmV3b2lkW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgbmV3b2lkX2xlbjsKICAgICB0aW1lX3QgICAgICAgICAgbGFzdF90aW1lID0gMjE0NzQ4MzY0NzsKICAgICB0aW1lX3QgICAgICAgICAgdHA7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsT3BlcmF0aW9uTmFtZSAqLwotCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKIAogICAgIGZvciAoaGNpbGFzdCA9IGhjaXB0cjIgPSBwaW5nUHJvYmVIaXN0b3J5VGFibGVTdG9yYWdlOyBoY2lwdHIyICE9IE5VTEw7CiAgICAgICAgICBoY2lwdHIyID0gaGNpcHRyMi0+bmV4dCkgewpAQCAtODcyLDcgKzkyMywyNSBAQAogCiAgICAgICAgIH0KICAgICB9Ci0gICAgaGVhZGVyX2NvbXBsZXhfZXh0cmFjdF9lbnRyeSgmcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZSwgaGNpbGFzdCk7CisgICAgU3RvcmFnZURlbCA9CisgICAgICAgIGhlYWRlcl9jb21wbGV4X2V4dHJhY3RfZW50cnkoJnBpbmdQcm9iZUhpc3RvcnlUYWJsZVN0b3JhZ2UsIGhjaWxhc3QpOworICAgIGZvciAoaGNpcHRyMiA9IHBpbmdDdGxUYWJsZVN0b3JhZ2U7IGhjaXB0cjI7IGhjaXB0cjIgPSBoY2lwdHIyLT5uZXh0KSB7CisgICAgICAgIHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqdG1wOworCisgICAgICAgIHRtcCA9IGhjaXB0cjItPmRhdGE7CisgICAgICAgIGlmICh0bXAtPnBpbmdQcm9iZUhpcyA9PSBTdG9yYWdlRGVsKSB7CisgICAgICAgICAgICB0bXAtPnBpbmdQcm9iZUhpcyA9IHRtcC0+cGluZ1Byb2JlSGlzLT5uZXh0OworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRpbmcgdGhlIGxhc3Qgb25lIHN1Y2NlZWRlZCFcbiIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIAl9CisgICAgfQorICAgIGlmIChTdG9yYWdlRGVsKSB7CisgICAgICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ1Byb2JlSGlzdG9yeVRpbWUpOworICAgICAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdDdGxUZXN0TmFtZSk7CisgICAgICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bE93bmVySW5kZXgpOworICAgICAgICBmcmVlKFN0b3JhZ2VEZWwpOworICAgIH0KICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwKICAgICAgICAgICAgICAgICAiZGVsZXRlIHRoZSBsYXN0IG9uZSBzdWNjZXNzIVxuIikpOwogfQpAQCAtOTQ4LDggKzEwMTcsMTAgQEAKIHsKICAgICBjaGFyICAgICAgICAgICAqcHRyOwogCi0gICAgaWYgKChwdHIgPSBzb2NrX250b3BfaG9zdChzYSwgc2FsZW4pKSA9PSBOVUxMKQotICAgICAgICBwcmludGYoInNvY2tfbnRvcF9ob3N0IGVycm9yIik7IC8qIGluZXRfbnRvcCgpIHNldHMgZXJybm8gKi8KKyAgICBpZiAoKHB0ciA9IHNvY2tfbnRvcF9ob3N0KHNhLCBzYWxlbikpID09IE5VTEwpIHsKKyAgICAgICAgLyogaW5ldF9udG9wKCkgc2V0cyBlcnJubyAqLworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInBpbmdDdGxUYWJsZTogc29ja19udG9wX2hvc3QoKSIpOworICAgIH0KICAgICByZXR1cm4gKHB0cik7CiB9CiAKQEAgLTEwMDIsNyArMTA3Myw3IEBACiAgICAgaGludHMuYWlfZmFtaWx5ID0gZmFtaWx5OyAgIC8qIEFGX1VOU1BFQywgQUZfSU5FVCwgQUZfSU5FVDYsIGV0Yy4gKi8KICAgICBoaW50cy5haV9zb2NrdHlwZSA9IHNvY2t0eXBlOyAgICAgICAvKiAwLCBTT0NLX1NUUkVBTSwgU09DS19ER1JBTSwgZXRjLiAqLwogCi0gICAgaWYgKChuID0gZ2V0YWRkcmluZm8oaG9zdCwgc2VydiwgJmhpbnRzLCAmcmVzKSkgIT0gMCkKKyAgICBpZiAoKG4gPSBuZXRzbm1wX2dldGFkZHJpbmZvKGhvc3QsIHNlcnYsICZoaW50cywgJnJlcykpICE9IDApCiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAKICAgICByZXR1cm4gKHJlcyk7ICAgICAgICAgICAgICAgLyogcmV0dXJuIHBvaW50ZXIgdG8gZmlyc3Qgb24gbGlua2VkIGxpc3QgKi8KQEAgLTEwMzAsMTcgKzExMDEsMTggQEAKICAgICBoaW50cy5haV9mYW1pbHkgPSBmYW1pbHk7ICAgLyogMCwgQUZfSU5FVCwgQUZfSU5FVDYsIGV0Yy4gKi8KICAgICBoaW50cy5haV9zb2NrdHlwZSA9IHNvY2t0eXBlOyAgICAgICAvKiAwLCBTT0NLX1NUUkVBTSwgU09DS19ER1JBTSwgZXRjLiAqLwogCi0gICAgaWYgKChuID0gZ2V0YWRkcmluZm8oaG9zdCwgc2VydiwgJmhpbnRzLCAmcmVzKSkgIT0gMCkKKyAgICBpZiAoKG4gPSBuZXRzbm1wX2dldGFkZHJpbmZvKGhvc3QsIHNlcnYsICZoaW50cywgJnJlcykpICE9IDApIHsKICNpZiBIQVZFX0dBSV9TVFJFUlJPUgotICAgICAgICBwcmludGYoImhvc3Rfc2VydiBlcnJvciBmb3IgJXMsICVzOiAlcyIsCi0gICAgICAgICAgICAgICAoaG9zdCA9PSBOVUxMKSA/ICIobm8gaG9zdG5hbWUpIiA6IGhvc3QsCi0gICAgICAgICAgICAgICAoc2VydiA9PSBOVUxMKSA/ICIobm8gc2VydmljZSBuYW1lKSIgOiBzZXJ2LAotICAgICAgICAgICAgICAgZ2FpX3N0cmVycm9yKG4pKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImhvc3Rfc2VydiBlcnJvciBmb3IgJXMsICVzOiAlcyIsCisgICAgICAgICAgICAgICAgIChob3N0ID09IE5VTEwpID8gIihubyBob3N0bmFtZSkiIDogaG9zdCwKKyAgICAgICAgICAgICAgICAgKHNlcnYgPT0gTlVMTCkgPyAiKG5vIHNlcnZpY2UgbmFtZSkiIDogc2VydiwKKyAgICAgICAgICAgICAgICAgZ2FpX3N0cmVycm9yKG4pKTsKICNlbHNlCi0gICAgICAgIHByaW50ZigiaG9zdF9zZXJ2IGVycm9yIGZvciAlcywgJXMiLAotICAgICAgICAgICAgICAgKGhvc3QgPT0gTlVMTCkgPyAiKG5vIGhvc3RuYW1lKSIgOiBob3N0LAotICAgICAgICAgICAgICAgKHNlcnYgPT0gTlVMTCkgPyAiKG5vIHNlcnZpY2UgbmFtZSkiIDogc2Vydik7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJob3N0X3NlcnYgZXJyb3IgZm9yICVzLCAlcyIsCisgICAgICAgICAgICAgICAgIChob3N0ID09IE5VTEwpID8gIihubyBob3N0bmFtZSkiIDogaG9zdCwKKyAgICAgICAgICAgICAgICAgKHNlcnYgPT0gTlVMTCkgPyAiKG5vIHNlcnZpY2UgbmFtZSkiIDogc2Vydik7CiAjZW5kaWYKKyAgICB9CiAKICAgICByZXR1cm4gKHJlcyk7ICAgICAgICAgICAgICAgLyogcmV0dXJuIHBvaW50ZXIgdG8gZmlyc3Qgb24gbGlua2VkIGxpc3QgKi8KIH0KQEAgLTEwODQsMTMgKzExNTYsMTYgQEAKICAgICBvaWQgICAgICAgICAgICAgcGluZ1Jlc3VsdHNTZW5kUHJvYmVzW10gPQogICAgICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgwLCAxLCAzLCAxLCA4IH07CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7IC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCi0gICAgU3RvcmFnZVRtcCA9IFNOTVBfTUFMTE9DX1NUUlVDVChwaW5nUmVzdWx0c1RhYmxlX2RhdGEpOwotICAgIGlmICgoU3RvcmFnZVRtcCA9Ci0gICAgICAgICAoc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqKQotICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7CisgICAgU3RvcmFnZVRtcCA9IGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycyk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgaWYgKCFTdG9yYWdlVG1wKQorICAgICAgICByZXR1cm47CiAKICAgICAvKgogICAgICAqIHNubXBUcmFwIG9pZCAKQEAgLTEyMTYsMTQgKzEyOTEsMTYgQEAKICAgICAvKiBzdHJ1Y3QgcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2RhdGEgKiBjdXJyZW50PU5VTEw7ICovCiAgICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhIGN1cnJlbnRfdmFyOwogICAgIGludCAgICAgICAgICAgICBzb2NrZmQ7CisgICAgaW50ICAgICAgICAgICAgIHNlbGVjdF9yZXN1bHQ7CiAgICAgaW50ICAgICAgICAgICAgIGN1cnJlbnRfcHJvYmVfdGVtcDsKICAgICBpbnQgICAgICAgICAgICAgc3VjY2Vzc19wcm9iZSA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIGZhaWxfcHJvYmUgPSAwOwogICAgIGludCAgICAgICAgICAgICBmbGFnOwotICAgIHVuc2lnbmVkIGxvbmcgICpzdW1ydHQ7CisgICAgdW5zaWduZWQgbG9uZyAgIHN1bXJ0dDsKICAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7CiAKLSAgICBzdW1ydHQgPSAodW5zaWduZWQgbG9uZyAqKSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKyAgICBtZW1zZXQoc2VuZGJ1ZiwgMCwgc2l6ZW9mKHNlbmRidWYpKTsKKwogICAgIHNvY2tmZCA9IHNvY2tldChwci0+c2FzZW5kLT5zYV9mYW1pbHksIFNPQ0tfUkFXLCBwci0+aWNtcHByb3RvKTsKICAgICBpZiAoc29ja2ZkIDwgMCkgewogCXNubXBfbG9nX3BlcnJvcigicGluZ0N0bFRhYmxlOiBmYWlsZWQgdG8gY3JlYXRlIHNvY2tldCIpOwpAQCAtMTI0MiwyOSArMTMxOSwyOSBAQAogICAgICAgICAoKnByLT5mc2VuZCkgKGRhdGFsZW4sIHBpZCwgbnNlbnQsIHNvY2tmZCwgc2VuZGJ1Zik7CiAgICAgICAgIG5zZW50Kys7CiAgICAgICAgIGxlbiA9IHByLT5zYWxlbjsKLSAgICAgICAgaWYgKHJlYWRhYmxlX3RpbWVvKHNvY2tmZCwgaXRlbS0+cGluZ0N0bFRpbWVPdXQpID09IDApIHsKLSAgICAgICAgICAgIC8qIHByaW50Zigic29ja2V0IHRpbWVvdXQhXG4iKTsgKi8KLSAgICAgICAgICAgIG4gPSAtMTsKLSAgICAgICAgICAgIGZhaWxfcHJvYmUgPSBmYWlsX3Byb2JlICsgMTsKLSAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbiA9IHJlY3Zmcm9tKHNvY2tmZCwgcmVjdmJ1Ziwgc2l6ZW9mKHJlY3ZidWYpLCAwLCBwci0+c2FyZWN2LAotICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4pOwotICAgICAgICAgICAgc3VjY2Vzc19wcm9iZSA9IHN1Y2Nlc3NfcHJvYmUgKyAxOwotICAgICAgICAgICAgZmxhZyA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgc2VsZWN0X3Jlc3VsdCA9IHJlYWRhYmxlX3RpbWVvKHNvY2tmZCwgaXRlbS0+cGluZ0N0bFRpbWVPdXQpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoc2VsZWN0X3Jlc3VsdCA9PSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJzb2NrZXQgdGltZW91dFxuIikpOworICAgICAgICAgICAgICAgIG4gPSAtMTsKKyAgICAgICAgICAgICAgICBmYWlsX3Byb2JlID0gZmFpbF9wcm9iZSArIDE7CisgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG4gPSByZWN2ZnJvbShzb2NrZmQsIHJlY3ZidWYsIHNpemVvZihyZWN2YnVmKSwgMCwgcHItPnNhcmVjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbik7CisgICAgICAgICAgICAgICAgc3VjY2Vzc19wcm9iZSA9IHN1Y2Nlc3NfcHJvYmUgKyAxOworICAgICAgICAgICAgICAgIGZsYWcgPSAwOworICAgICAgICAgICAgfQogCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHZhbCwgTlVMTCk7CisgICAgICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnR2YWwpOwogCi0gICAgICAgIHRpbWUoJnRpbWVwKTsKKyAgICAgICAgICAgIHRpbWUoJnRpbWVwKTsKIAotICAgICAgICAoKnByLT5mcHJvYykgKHJlY3ZidWYsIG4sICZ0dmFsLCB0aW1lcCwgaXRlbSwgYWksIGRhdGFsZW4sIG1pbnJ0dCwKLSAgICAgICAgICAgICAgICAgICAgICBtYXhydHQsIHN1bXJ0dCwgYXZlcmFnZXJ0dCwgY3VycmVudF9wcm9iZV90ZW1wLAotICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NfcHJvYmUsIGZhaWxfcHJvYmUsIGZsYWcsICZjdXJyZW50X3ZhciwgcGlkKTsKLSAgICAgICAgaWYgKGN1cnJlbnRfcHJvYmVfdGVtcCA+PSBpdGVtLT5waW5nQ3RsUHJvYmVDb3VudCkgewotICAgICAgICAgICAgU05NUF9GUkVFKHN1bXJ0dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgICgqcHItPmZwcm9jKSAocmVjdmJ1ZiwgbiwgJnR2YWwsIHRpbWVwLCBpdGVtLCBhaSwgZGF0YWxlbiwgbWlucnR0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhydHQsICZzdW1ydHQsIGF2ZXJhZ2VydHQsIGN1cnJlbnRfcHJvYmVfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc19wcm9iZSwgZmFpbF9wcm9iZSwgZmxhZywgJmN1cnJlbnRfdmFyLCBwaWQpOworICAgICAgICAgICAgc2VsZWN0X3Jlc3VsdCA9IHJlYWRhYmxlX3RpbWVvKHNvY2tmZCwgMCk7CisgICAgICAgIH0gd2hpbGUgKHNlbGVjdF9yZXN1bHQgPiAwKTsKICAgICB9CiAgICAgY2xvc2Uoc29ja2ZkKTsKIH0KQEAgLTEyOTksOSArMTM3NiwxMSBAQAogICAgIHN0YXRpYyBpbnQgICAgICBwcm9iZUZhaWxlZCA9IDA7CiAgICAgc3RhdGljIGludCAgICAgIHRlc3RGYWlsZWQgPSAwOwogICAgIHN0YXRpYyBpbnQgICAgICBzZXJpZXMgPSAwOwotCiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgcGluZ1Jlc3VsdHNUYWJsZV9kYXRhICpTdG9yYWdlTmV3ID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAicHJvY192NChmbGFnID0gJWQpXG4iLCBmbGFnKSk7CisKICAgICBpZiAoZmxhZyA9PSAwKSB7CiAgICAgICAgIHNlcmllcyA9IDA7CiAgICAgICAgIGlwID0gKHN0cnVjdCBpcCAqKSBwdHI7IC8qIHN0YXJ0IG9mIElQIGhlYWRlciAqLwpAQCAtMTMwOSwxNCArMTM4OCwyMCBAQAogCiAgICAgICAgIGljbXAgPSAoc3RydWN0IGljbXAgKikgKHB0ciArIGhsZW4xKTsgICAvKiBzdGFydCBvZiBJQ01QIGhlYWRlciAqLwogICAgICAgICBpZiAoKGljbXBsZW4gPSBsZW4gLSBobGVuMSkgPCA4KQotICAgICAgICAgICAgcHJpbnRmKCJpY21wbGVuICglZCkgPCA4IiwgaWNtcGxlbik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgImljbXBsZW4gKCVkKSA8IDgiLCBpY21wbGVuKSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJJQ01QIHR5cGUgPSAlZCAoJXNhIHJlcGx5KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaWNtcC0+aWNtcF90eXBlLAorICAgICAgICAgICAgICAgICAgICBpY21wLT5pY21wX3R5cGUgPT0gSUNNUF9FQ0hPUkVQTFkgPyAiIiA6ICJub3QgYSAiKSk7CiAKICAgICAgICAgaWYgKGljbXAtPmljbXBfdHlwZSA9PSBJQ01QX0VDSE9SRVBMWSkgewotICAgICAgICAgICAgaWYgKGljbXAtPmljbXBfaWQgIT0gcGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOyAgICAgICAgIC8qIG5vdCBhIHJlc3BvbnNlIHRvIG91ciBFQ0hPX1JFUVVFU1QgKi8KLSAgICAgICAgICAgIGlmIChpY21wbGVuIDwgMTYpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJpY21wbGVuICglZCkgPCAxNiIsIGljbXBsZW4pOworICAgICAgICAgICAgaWYgKGljbXAtPmljbXBfaWQgIT0gcGlkKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJub3QgYSByZXNwb25zZSB0byBvdXIgRUNIT19SRVFVRVNUXG4iKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChpY21wbGVuIDwgMTYpCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJpY21wbGVuICglZCkgPCAxNiIsIGljbXBsZW4pKTsKIAogICAgICAgICAgICAgdHZzZW5kID0gKHN0cnVjdCB0aW1ldmFsICopIGljbXAtPmljbXBfZGF0YTsKIApAQCAtMTMyNCwxNCArMTQwOSwxOSBAQAogICAgICAgICAgICAgICAgIHJvdW5kX2RvdWJsZSgoMTAwMDAwMCAqICh0dnJlY3YtPnR2X3NlYyAtIHR2c2VuZC0+dHZfc2VjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dnJlY3YtPnR2X3VzZWMgLSB0dnNlbmQtPnR2X3VzZWMpIC8gMTAwMCk7CiAKLSAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAvKiBwaW5nQ3RsVGVzdE5hbWUgKi8KKyAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKLQotICAgICAgICAgICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycykpID09IE5VTEwpCisgICAgICAgICAgICBTdG9yYWdlTmV3ID0gaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKTsKKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgICAgICAgICAgaWYgKCFTdG9yYWdlTmV3KSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJTdG9yYWdlTmV3ID09IE5VTExcbiIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9TVUNITkFNRTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRfcHJvYmUgPT0gMSkgewogICAgICAgICAgICAgICAgICphdmVyYWdlcnR0ID0gcnR0OwpAQCAtMTMzOSw3ICsxNDI5LDYgQEAKICAgICAgICAgICAgICAgICAqbWF4cnR0ID0gcnR0OwogICAgICAgICAgICAgICAgICpzdW1ydHQgPSBydHQ7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiZWxzZVxuIik7CiAgICAgICAgICAgICAgICAgaWYgKHJ0dCA8ICptaW5ydHQpCiAgICAgICAgICAgICAgICAgICAgICptaW5ydHQgPSBydHQ7CiAgICAgICAgICAgICAgICAgaWYgKHJ0dCA+ICptYXhydHQpCkBAIC0xMzYzLDYgKzE0NTIsNyBAQAogICAgICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzUnR0U3VtT2ZTcXVhcmVzICsgcnR0ICogcnR0OwogCiAJICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZV90aW1lID0gdGltZXA7CisgICAgICAgICAgICBmcmVlKFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZSk7CiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c0xhc3RHb29kUHJvYmUgPQogICAgICAgICAgICAgICAgIG5ldHNubXBfbWVtZHVwKGRhdGVfbl90aW1lKCZ0aW1lcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZUxlbiksCkBAIC0xNDA3LDUyICsxNDk3LDM5IEBACiAKICAgICAgICAgICAgIGlmIChTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1NlbmRQcm9iZXMgPT0gMSkKICAgICAgICAgICAgICAgICBpdGVtLT5waW5nUHJvYmVIaXMgPSB0ZW1wOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgKGN1cnJlbnRfdGVtcCktPm5leHQgPSB0ZW1wOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjdXJyZW50X3RlbXAgPSB0ZW1wOwogCi0gICAgICAgICAgICBpZiAoU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNTZW5kUHJvYmVzID49Ci0gICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFByb2JlQ291bnQpIHsKKyAgICAgICAgICAgIGlmIChTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1NlbmRQcm9iZXMgPj0gaXRlbS0+cGluZ0N0bFByb2JlQ291bnQpCiAgICAgICAgICAgICAgICAgY3VycmVudF90ZW1wLT5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGl0ZW0tPnBpbmdQcm9iZUhpcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9jb3VudChpdGVtKSA8Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxNYXhSb3dzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwaW5nUHJvYmVIaXN0b3J5VGFibGVfYWRkKGN1cnJlbnRfdGVtcCkgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfU1VDQ0VTUykKLSAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYW4gZW50cnkgZXJyb3JcbiIpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwaW5nUHJvYmVIaXN0b3J5VGFibGVfY291bnQoaXRlbSkgPj0gaXRlbS0+cGluZ0N0bE1heFJvd3MpCiAgICAgICAgICAgICAgICAgICAgIHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kZWxMYXN0KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocGluZ1Byb2JlSGlzdG9yeVRhYmxlX2FkZChjdXJyZW50X3RlbXApICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkIGFuIGVudHJ5IGVycm9yXG4iKSk7Ci0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9hZGQoY3VycmVudF90ZW1wKSAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGFkZCBhIHJvd1xuIikpOwogCSAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmIChmbGFnID09IDEpCi0gICAgewotCi0KKyAgICB9IGVsc2UgaWYgKGZsYWcgPT0gMSkgewogICAgICAgICBpZiAoc2VyaWVzID09IDApCiAgICAgICAgICAgICBwcm9iZUZhaWxlZCA9IDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHByb2JlRmFpbGVkID0gcHJvYmVGYWlsZWQgKyAxOwogICAgICAgICBzZXJpZXMgPSAxOwogICAgICAgICB0ZXN0RmFpbGVkID0gdGVzdEZhaWxlZCArIDE7Ci0gICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7IC8qICBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAgICAvKiBwaW5nQ3RsVGVzdE5hbWUgKi8KKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKLQotICAgICAgICBpZiAoKFN0b3JhZ2VOZXcgPQotICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycykpID09IE5VTEwpCisgICAgICAgIFN0b3JhZ2VOZXcgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICAgICAgaWYgKCFTdG9yYWdlTmV3KQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PU1VDSE5BTUU7CiAKICAgICAgICAgaWYgKGN1cnJlbnRfcHJvYmUgPT0gMSkgewpAQCAtMTU4Miw3ICsxNjU5LDcgQEAKICAgICBpY21wLT5pY21wX2NvZGUgPSAwOwogICAgIGljbXAtPmljbXBfaWQgPSBwaWQ7CiAgICAgaWNtcC0+aWNtcF9zZXEgPSBuc2VudDsKLSAgICBnZXR0aW1lb2ZkYXkoKHN0cnVjdCB0aW1ldmFsICopIGljbXAtPmljbXBfZGF0YSwgTlVMTCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKChzdHJ1Y3QgdGltZXZhbCAqKSBpY21wLT5pY21wX2RhdGEpOwogCiAgICAgbGVuID0gOCArIGRhdGFsZW47ICAgICAgICAgIC8qIGNoZWNrc3VtIElDTVAgaGVhZGVyIGFuZCBkYXRhICovCiAgICAgaWNtcC0+aWNtcF9ja3N1bSA9IDA7CkBAIC0xNjAwLDEyICsxNjc3LDE1IEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgcGluZ1Jlc3VsdHNUYWJsZV9kYXRhICpTdG9yYWdlTmV3ID0gTlVMTDsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAgKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7IC8qIHBpbmdDdGxUZXN0TmFtZSAgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAotCi0gICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycykpID09IE5VTEwpCisgICAgU3RvcmFnZU5ldyA9IGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycyk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgaWYgKCFTdG9yYWdlTmV3KQogICAgICAgICByZXR1cm47CiAKICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1NlbmRQcm9iZXMgPSAwOwpAQCAtMTYzMywzNCArMTcxMyw0MSBAQAogCiAgICAgICAgIGFpID0gaG9zdF9zZXJ2KGhvc3QsIE5VTEwsIDAsIDApOwogCi0gICAgICAgIHByaW50ZigiUElORyAlcyAoJXMpOiAlZCBkYXRhIGJ5dGVzXG4iLCBhaS0+YWlfY2Fub25uYW1lLAotICAgICAgICAgICAgICAgc29ja19udG9wX2hvc3QoYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSwgZGF0YWxlbik7CisgICAgICAgIGlmIChhaSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJQSU5HICVzICglcyk6ICVkIGRhdGEgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBhaS0+YWlfY2Fub25uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc29ja19udG9wX2hvc3QoYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSwgZGF0YWxlbikpOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIDRpbml0aWFsaXplIGFjY29yZGluZyB0byBwcm90b2NvbCAKLSAgICAgICAgICovCi0gICAgICAgIGlmIChhaS0+YWlfZmFtaWx5ID09IEFGX0lORVQpIHsKLSAgICAgICAgICAgIHByID0gJnByb3RvX3Y0OworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIDRpbml0aWFsaXplIGFjY29yZGluZyB0byBwcm90b2NvbCAKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGFpLT5haV9mYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICAgICAgICAgIHByID0gJnByb3RvX3Y0OwogI2lmZGVmCUlQVjYKLSAgICAgICAgfSBlbHNlIGlmIChhaS0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0gICAgICAgICAgICBwciA9ICZwcm90b192NjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYWktPmFpX2ZhbWlseSA9PSBBRl9JTkVUNikgeworICAgICAgICAgICAgICAgIHByID0gJnByb3RvX3Y2OwogCi0gICAgICAgICAgICBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJigoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+YWlfYWRkciktPnNpbjZfYWRkcikpKQotICAgICAgICAgICAgICAgIHByaW50ZigiY2Fubm90IHBpbmcgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzIik7CisgICAgICAgICAgICAgICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCYoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5haV9hZGRyKS0+c2luNl9hZGRyKSkpCisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3QgcGluZyBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3MiKTsKICNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHByaW50ZigidW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCIsIGFpLT5haV9mYW1pbHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCIsIGFpLT5haV9mYW1pbHkpOworICAgICAgICAgICAgfQogCi0gICAgICAgIHByLT5zYXNlbmQgPSBhaS0+YWlfYWRkcjsKLSAgICAgICAgcHItPnNhcmVjdiA9IGNhbGxvYygxLCBhaS0+YWlfYWRkcmxlbik7Ci0gICAgICAgIHByLT5zYWxlbiA9IGFpLT5haV9hZGRybGVuOwotICAgICAgICByZWFkbG9vcChpdGVtLCBhaSwgZGF0YWxlbiwgbWlucnR0LCBtYXhydHQsIGF2ZXJhZ2VydHQsIHBpZCk7CisgICAgICAgICAgICBwci0+c2FzZW5kID0gYWktPmFpX2FkZHI7CisgICAgICAgICAgICBwci0+c2FyZWN2ID0gY2FsbG9jKDEsIGFpLT5haV9hZGRybGVuKTsKKyAgICAgICAgICAgIHByLT5zYWxlbiA9IGFpLT5haV9hZGRybGVuOworICAgICAgICAgICAgcmVhZGxvb3AoaXRlbSwgYWksIGRhdGFsZW4sIG1pbnJ0dCwgbWF4cnR0LCBhdmVyYWdlcnR0LCBwaWQpOworICAgICAgICAgICAgZnJlZShwci0+c2FyZWN2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJQSU5HOiBuYW1lIHJlc29sdXRpb24gZm9yICVzIGZhaWxlZC5cbiIsIGhvc3QpOworICAgICAgICB9CiAKICAgICAgICAgU05NUF9GUkVFKG1pbnJ0dCk7CiAgICAgICAgIFNOTVBfRlJFRShtYXhydHQpOwogICAgICAgICBTTk1QX0ZSRUUoYXZlcmFnZXJ0dCk7Ci0gICAgICAgIFNOTVBfRlJFRShhaSk7CisgICAgICAgIGZyZWVhZGRyaW5mbyhhaSk7CiAgICAgfQogCiAgICAgZWxzZSBpZiAoaXRlbS0+cGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlID09IDIpIHsKQEAgLTE3MzYsMTMgKzE4MjMsMTEgQEAKICAgICAgICAgaG9zdG5hbWUgPSB0YXJnZXQ7CiAKICAgICAgICAgaWYgKGlwdjZfYWRkcl9hbnkoJnNvdXJjZS5zaW42X2FkZHIpKSB7Ci0KICAgICAgICAgICAgIHNvY2tsZW5fdCAgICAgICBhbGVuOwogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHByb2JlX2ZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKIAogICAgICAgICAgICAgaWYgKHByb2JlX2ZkIDwgMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3IhXG4iKTsKLSAgICAgICAgICAgICAgICBwZXJyb3IoInNvY2tldCIpOworICAgICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcigicGluZ0N0bFRhYmxlOiBJUHY2IGRhdGFncmFtIHNvY2tldCBjcmVhdGlvbiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChkZXZpY2UpIHsKQEAgLTE3NjEsNiArMTg0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwocHJvYmVfZmQsIFNJT0NHSUZJTkRFWCwgJmlmcikgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJwaW5nOiB1bmtub3duIGlmYWNlICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZShwcm9iZV9mZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Rob3Auc2luNl9zY29wZV9pZCA9IGlmci5pZnJfaWZpbmRleDsKQEAgLTE3NzMsMTIgKzE4NTksMTQgQEAKICAgICAgICAgICAgICAgICAocHJvYmVfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmZpcnN0aG9wLAogICAgICAgICAgICAgICAgICBzaXplb2YoZmlyc3Rob3ApKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIHBlcnJvcigiY29ubmVjdCIpOworICAgICAgICAgICAgICAgIGNsb3NlKHByb2JlX2ZkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhbGVuID0gc2l6ZW9mKHNvdXJjZSk7CiAgICAgICAgICAgICBpZiAoZ2V0c29ja25hbWUocHJvYmVfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNvdXJjZSwgJmFsZW4pCiAgICAgICAgICAgICAgICAgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBwZXJyb3IoImdldHNvY2tuYW1lIik7CisgICAgICAgICAgICAgICAgY2xvc2UocHJvYmVfZmQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNvdXJjZS5zaW42X3BvcnQgPSAwOwpAQCAtMTg5MSwxNSArMTk3OSwxNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpbnRmKCJQSU5HICVzKCVzKSAiLCBob3N0bmFtZSwKLSAgICAgICAgICAgICAgIHByX2FkZHIoJndoZXJldG8uc2luNl9hZGRyLCBvcHRpb25zKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiUElORyAlcyglcykgIiwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHByX2FkZHIoJndoZXJldG8uc2luNl9hZGRyLCBvcHRpb25zKSkpOwogICAgICAgICBpZiAoZmxvd2xhYmVsKQotICAgICAgICAgICAgcHJpbnRmKCIsIGZsb3cgMHglMDV4LCAiLCAodW5zaWduZWQpIG50b2hsKGZsb3dsYWJlbCkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsIGZsb3cgMHglMDV4LCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBudG9obChmbG93bGFiZWwpKSk7CiAgICAgICAgIGlmIChkZXZpY2UgfHwgKG9wdGlvbnMgJiBGX05VTUVSSUMpKSB7Ci0gICAgICAgICAgICBwcmludGYoImZyb20gJXMgJXM6ICIsCi0gICAgICAgICAgICAgICAgICAgcHJfYWRkcl9uKCZzb3VyY2Uuc2luNl9hZGRyKSwgZGV2aWNlID8gOiAiIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgImZyb20gJXMgJXM6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcl9hZGRyX24oJnNvdXJjZS5zaW42X2FkZHIpLCBkZXZpY2UgPyA6ICIiKSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCIlZCBkYXRhIGJ5dGVzXG4iLCBkYXRhbGVuKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIlZCBkYXRhIGJ5dGVzXG4iLCBkYXRhbGVuKSk7CiAKICAgICAgICAgc2V0dXAoaWNtcF9zb2NrLCBvcHRpb25zLCB1aWQsIHRpbWVvdXQsIHByZWxvYWQsIGludGVydmFsLCBkYXRhbGVuLAogICAgICAgICAgICAgICAoY2hhciAqKSBvdXRwYWNrLCAmaWRlbnQsICZzdGFydF90aW1lLCAmc2NyZWVuX3dpZHRoLApAQCAtMTkyNSwxOCArMjAxNCwyMCBAQAogICAgIGNoYXIgICAgICAgICAgICpob3N0ID0gTlVMTDsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMgPSBOVUxMOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgLyogcGluZ0N0bFRlc3ROYW1lICAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogCi0KLSAgICBpZiAoKFN0b3JhZ2VOZXcgPQotICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKSkgIT0gTlVMTCkgeworICAgIFN0b3JhZ2VOZXcgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgIGlmIChTdG9yYWdlTmV3KSB7CiAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzU2VuZFByb2JlcyA9IDA7CiAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzUHJvYmVSZXNwb25zZXMgPSAwOwogICAgICAgICByZXR1cm47Ci0KICAgICB9Ci0gICAgYWkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOworCiAgICAgaG9zdCA9IGl0ZW0tPnBpbmdDdGxUYXJnZXRBZGRyZXNzOwogICAgIGFpID0gaG9zdF9zZXJ2KGhvc3QsIE5VTEwsIDAsIDApOwogICAgIFN0b3JhZ2VUbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QocGluZ1Jlc3VsdHNUYWJsZV9kYXRhKTsKQEAgLTE5NTksMjYgKzIwNTAsMTQgQEAKIAogICAgIGlmIChpdGVtLT5waW5nQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPT0gMQogICAgICAgICB8fCBpdGVtLT5waW5nQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPT0gMTYpIHsKLSAgICAgICAgaWYgKGFpID09IE5VTEwpIHsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzVHlwZSA9IDA7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cCgiIik7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1R5cGUgPSAxOwotICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3MgPQotICAgICAgICAgICAgICAgIChjaGFyICopCi0gICAgICAgICAgICAgICAgbWFsbG9jKHN0cmxlbihzb2NrX250b3BfaG9zdChhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pKQotICAgICAgICAgICAgICAgICAgICAgICArIDEpOwotICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3MgPQotICAgICAgICAgICAgICAgIHN0cmR1cChzb2NrX250b3BfaG9zdChhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pKTsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPgotICAgICAgICAgICAgICAgIHBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzW3N0cmxlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrX250b3BfaG9zdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWktPmFpX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+YWlfYWRkcmxlbikpXSA9ICdcMCc7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9Ci0gICAgICAgICAgICAgICAgc3RybGVuKHNvY2tfbnRvcF9ob3N0KGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikpOwotICAgICAgICB9CisgICAgICAgIGNvbnN0IGNoYXIqIHN0cjsKKworICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1R5cGUgPSBhaSA/IDEgOiAwOworICAgICAgICBzdHIgPSBhaSA/IHNvY2tfbnRvcF9ob3N0KGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgOiBOVUxMOworICAgICAgICBpZiAoIXN0cikKKyAgICAgICAgICAgIHN0ciA9ICIiOworICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cChzdHIpOworICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9IHN0cmxlbihzdHIpOwogICAgIH0KICAgICBpZiAoaXRlbS0+cGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlID09IDIpIHsKIApAQCAtMTk5MywxMCArMjA3Miw3IEBACiAKICAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgaG9zdCwgJnRvLT5zaW42X2FkZHIpID4gMCkgewogICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NUeXBlID0gMjsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGhvc3QpICsgMSk7CiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cChob3N0KTsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzW3N0cmxlbihob3N0KV0gPSAnXDAnOwogICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NMZW4gPSBzdHJsZW4oaG9zdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBocCA9IGdldGhvc3RieW5hbWUyKGhvc3QsIEFGX0lORVQ2KTsKQEAgLTIwMDUsMTMgKzIwODEsOCBAQAogICAgICAgICAgICAgICAgIG1lbW1vdmUoKGNhZGRyX3QpICYgdG8tPnNpbjZfYWRkciwgaHAtPmhfYWRkciwgMTYpOwogICAgICAgICAgICAgICAgIGhvc3RuYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmdG8tPnNpbjZfYWRkciwgcGEsIDY0KTsKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1R5cGUgPSAyOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKHN0cmxlbihob3N0bmFtZSkgKyAxKTsKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cChob3N0bmFtZSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3Nbc3RybGVuKGhvc3RuYW1lKV0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzTGVuID0KLSAgICAgICAgICAgICAgICAgICAgc3RybGVuKGhvc3RuYW1lKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9IHN0cmxlbihob3N0bmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhY2Vyb3V0ZTogdW5rbm93biBob3N0ICVzXG4iLCBob3N0KTsKQEAgLTIwNDAsOCArMjExMSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgU05NUF9GUkVFKGFpKTsKLQorICAgIGZyZWVhZGRyaW5mbyhhaSk7CiB9CiAKIApAQCAtMjA1MSwxMiArMjEyMSwxNiBAQAogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsVGVzdE5hbWUgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKLQotICAgIGlmICgoU3RvcmFnZVRtcCA9Ci0gICAgICAgICBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpKSA9PSBOVUxMKQorICAgIFN0b3JhZ2VUbXAgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgIGlmICghU3RvcmFnZVRtcCkKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PU1VDSE5BTUU7CiAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNPcGVyU3RhdHVzID0gdmFsOwogCkBAIC0yMDY4LDE5ICsyMTQyLDIzIEBACiBpbnQKIHBpbmdSZXN1bHRzVGFibGVfZGVsKHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqdGhlZGF0YSkKIHsKLSAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cjIgPSBOVUxMOworICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyMiwgKm5leHQ7CiAgICAgc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqU3RvcmFnZURlbCA9IE5VTEw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBvaWQgICAgICAgICAgICAgbmV3b2lkW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgbmV3b2lkX2xlbjsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LCB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLCB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAgIC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCi0KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOwogCi0gICAgZm9yIChoY2lwdHIyID0gcGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2U7IGhjaXB0cjIgIT0gTlVMTDsKLSAgICAgICAgIGhjaXB0cjIgPSBoY2lwdHIyLT5uZXh0KSB7CisgICAgZm9yIChoY2lwdHIyID0gcGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2U7IGhjaXB0cjI7IGhjaXB0cjIgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBoY2lwdHIyLT5uZXh0OwogICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZShuZXdvaWQsIG5ld29pZF9sZW4sIGhjaXB0cjItPm5hbWUsIG5ld29pZF9sZW4pCiAgICAgICAgICAgICA9PSAwKSB7CiAgICAgICAgICAgICBTdG9yYWdlRGVsID0KQEAgLTIxMDQsMTkgKzIxODIsMjMgQEAKIGludAogcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2RlbChzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKnRoZWRhdGEpCiB7Ci0gICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lwdHIyID0gTlVMTDsKKyAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cjIsICpuZXh0OwogICAgIHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSAqU3RvcmFnZURlbCA9IE5VTEw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBvaWQgICAgICAgICAgICAgbmV3b2lkW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgbmV3b2lkX2xlbjsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LCB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLCB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAgIC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCi0KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOwogCi0gICAgZm9yIChoY2lwdHIyID0gcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZTsgaGNpcHRyMiAhPSBOVUxMOwotICAgICAgICAgaGNpcHRyMiA9IGhjaXB0cjItPm5leHQpIHsKKyAgICBmb3IgKGhjaXB0cjIgPSBwaW5nUHJvYmVIaXN0b3J5VGFibGVTdG9yYWdlOyBoY2lwdHIyOyBoY2lwdHIyID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gaGNpcHRyMi0+bmV4dDsKICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUobmV3b2lkLCBuZXdvaWRfbGVuLCBoY2lwdHIyLT5uYW1lLCBuZXdvaWRfbGVuKQogICAgICAgICAgICAgPT0gMCkgewogICAgICAgICAgICAgU3RvcmFnZURlbCA9CkBAIC0yMjE2LDYgKzIyOTgsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjMxMyw2ICsyMzk2LDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI0MDIsNiArMjQ4Niw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNDkyLDYgKzI1NzcsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjU4NCw2ICsyNjcwLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI2ODYsNiArMjc3Myw3IEBACiAgICAgICAgICAgICBtb2RpZnlfUmVzdWx0c09wZXIoU3RvcmFnZVRtcCwgMik7CiAgICAgICAgIH0KIAorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjc4Miw2ICsyODcwLDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI4NjcsNiArMjk1Niw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yOTUyLDYgKzMwNDIsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzAzOSw2ICszMTMwLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTMxMzcsNiArMzIyOSw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zMjI4LDYgKzMzMjEsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzMxOSw2ICszNDEzLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM0MTYsNiArMzUxMSw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNTEyLDYgKzM2MDgsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzU5OCw2ICszNjk1LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM2OTYsNiArMzc5NCw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNzgxLDYgKzM4ODAsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzg2OSw2ICszOTY5LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM5NTcsNiArNDA1OCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zOTcwLDE0ICs0MDcyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJfdmFsX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKLSAgICBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOworICAgIHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqU3RvcmFnZVRtcDsKICAgICBzdGF0aWMgc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICpTdG9yYWdlTmV3LCAqU3RvcmFnZURlbDsKICAgICBzaXplX3QgICAgICAgICAgbmV3bGVuID0KICAgICAgICAgbmFtZV9sZW4gLSAoc2l6ZW9mKHBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkKSAvIHNpemVvZihvaWQpICsKICAgICAgICAgICAgICAgICAgICAgMyAtIDEpOwogICAgIHN0YXRpYyBpbnQgICAgICBvbGRfdmFsdWU7CiAgICAgaW50ICAgICAgICAgICAgIHNldF92YWx1ZTsKLSAgICBzdGF0aWMgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCAqdnA7CiAgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lwdHIgPSBOVUxMOwogCiAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsCkBAIC00MDc2LDYgKzQxNzcsOCBAQAogICAgICAgICAgKiBtZW1vcnkgcmVzZXZlcmF0aW9uLCBmaW5hbCBwcmVwYXJhdGlvbi4uLiAKICAgICAgICAgICovCiAgICAgICAgIGlmIChTdG9yYWdlVG1wID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgKnZwOworCiAgICAgICAgICAgICBpZiAoc2V0X3ZhbHVlID09IFJTX0RFU1RST1kpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgICAgIH0KQEAgLTQwOTUsMTUgKzQxOTgsMTQgQEAKICAgICAgICAgICAgICAgICAgKG5hbWUKICAgICAgICAgICAgICAgICAgIFtzaXplb2YocGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWQpIC8gc2l6ZW9mKG9pZCkgKwogICAgICAgICAgICAgICAgICAgIDJdKSwgbmV3bGVuLCB2YXJzKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIFhYWDogZnJlZSwgemVybyB2YXJzIAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIC8qIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOyAqLworICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdnAgPSB2YXJzOwogCiAgICAgICAgICAgICBTdG9yYWdlTmV3ID0gY3JlYXRlX3BpbmdDdGxUYWJsZV9kYXRhKCk7CisgICAgICAgICAgICBpZiAoIVN0b3JhZ2VOZXcpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgICAgIGlmICh2cC0+dmFsX2xlbiA8PSAzMikgewogICAgICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxPd25lckluZGV4ID0gbWFsbG9jKHZwLT52YWxfbGVuICsgMSk7CiAgICAgICAgICAgICAgICAgbWVtY3B5KFN0b3JhZ2VOZXctPnBpbmdDdGxPd25lckluZGV4LCB2cC0+dmFsLnN0cmluZywKQEAgLTQxNDAsMTAgKzQyNDIsNyBAQAogICAgICAgICAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFJvd1N0YXR1cyA9IHNldF92YWx1ZTsKIAogCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogWFhYOiBmcmVlLCB6ZXJvIHZhcnMsIG5vIGxvbmdlciBuZWVkZWQ/IAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAvKiBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsgKi8KKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOwogICAgICAgICB9CiAKIApAQCAtNDE1NCwxMiArNDI1MywxNyBAQAogCiAgICAgY2FzZSBGUkVFOgogICAgICAgICAvKgotICAgICAgICAgKiBYWFg6IGZyZWUsIHplcm8gdmFycyAKLSAgICAgICAgICovCi0KLSAgICAgICAgLyoKICAgICAgICAgICogUmVsZWFzZSBhbnkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCAKICAgICAgICAgICovCisKKyAgICAgICAgaWYgKHNldF92YWx1ZSA9PSBSU19ERVNUUk9ZICYmIFN0b3JhZ2VOZXcpCisgICAgICAgICAgICBmcmVlX3BpbmdDdGxUYWJsZV9kYXRhKFN0b3JhZ2VOZXcpOworICAgICAgICBTdG9yYWdlTmV3ID0gTlVMTDsKKworICAgICAgICBpZiAoU3RvcmFnZURlbCkgeworICAgICAgICAgICAgZnJlZV9waW5nQ3RsVGFibGVfZGF0YShTdG9yYWdlRGVsKTsKKyAgICAgICAgICAgIFN0b3JhZ2VEZWwgPSBOVUxMOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAKQEAgLTQyMzAsMTAgKzQzMzQsOCBAQAogICAgICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkocGluZ0N0bFRhYmxlU3RvcmFnZSwgU3RvcmFnZU5ldyk7CiAgICAgICAgICAgICBTdG9yYWdlRGVsID0KICAgICAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9leHRyYWN0X2VudHJ5KCZwaW5nQ3RsVGFibGVTdG9yYWdlLCBoY2lwdHIpOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogWFhYOiBmcmVlIGl0IAotICAgICAgICAgICAgICovCisgICAgICAgICAgICBmcmVlX3BpbmdDdGxUYWJsZV9kYXRhKFN0b3JhZ2VEZWwpOworICAgICAgICAgICAgU3RvcmFnZURlbCA9IE5VTEw7CiAgICAgICAgIH0gZWxzZSBpZiAoU3RvcmFnZURlbCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogcm93IGRlbGV0aW9uLCBzbyBhZGQgaXQgYWdhaW4gCkBAIC00MjQxLDYgKzQzNDMsNyBAQAogICAgICAgICAgICAgcGluZ0N0bFRhYmxlX2FkZChTdG9yYWdlRGVsKTsKICAgICAgICAgICAgIHBpbmdSZXN1bHRzVGFibGVfYWRkKFN0b3JhZ2VEZWwpOwogICAgICAgICAgICAgcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2FkZGFsbChTdG9yYWdlRGVsKTsKKyAgICAgICAgICAgIFN0b3JhZ2VEZWwgPSBOVUxMOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ0N0bFJvd1N0YXR1cyA9IG9sZF92YWx1ZTsKICAgICAgICAgfQpAQCAtNDI2MiwzNyArNDM2NSw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoU3RvcmFnZURlbCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogaWYoc3RybGVuKFN0b3JhZ2VEZWwtPnBpbmdDdGxPd25lckluZGV4KSE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsT3duZXJJbmRleCk7Ci0gICAgICAgICAgICAgKiBwcmludGYoIkNPTU1JVDEgXG4iKTsKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsVGVzdE5hbWUpIT0wKQotICAgICAgICAgICAgICogU05NUF9GUkVFKFN0b3JhZ2VEZWwtPnBpbmdDdGxUZXN0TmFtZSk7Ci0gICAgICAgICAgICAgKiBwcmludGYoIkNPTU1JVDIgXG4iKTsKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsVGFyZ2V0QWRkcmVzcykhPTApCi0gICAgICAgICAgICAgKiBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+cGluZ0N0bFRhcmdldEFkZHJlc3MpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQzIFxuIik7Ci0gICAgICAgICAgICAgKiBpZihzdHJsZW4oU3RvcmFnZURlbC0+cGluZ0N0bERhdGFGaWxsKSE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsRGF0YUZpbGwpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQ0IFxuIik7Ci0gICAgICAgICAgICAgKiBpZihzdHJsZW4oU3RvcmFnZURlbC0+cGluZ0N0bFRyYXBHZW5lcmF0aW9uKSE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsVHJhcEdlbmVyYXRpb24pOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQ1IFxuIik7Ci0gICAgICAgICAgICAgKiBpZihTdG9yYWdlRGVsLT5waW5nQ3RsVHlwZUxlbiE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsVHlwZSk7Ci0gICAgICAgICAgICAgKiBwcmludGYoIkNPTU1JVDYgXG4iKTsKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsRGVzY3IpIT0wKQotICAgICAgICAgICAgICogU05NUF9GUkVFKFN0b3JhZ2VEZWwtPnBpbmdDdGxEZXNjcik7Ci0gICAgICAgICAgICAgKiBwcmludGYoIkNPTU1JVDcgXG4iKTsKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsU291cmNlQWRkcmVzcykhPTApCi0gICAgICAgICAgICAgKiBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+cGluZ0N0bFNvdXJjZUFkZHJlc3MpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQ4IFxuIik7Ci0gICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZyZWVfcGluZ0N0bFRhYmxlX2RhdGEoU3RvcmFnZURlbCk7CiAgICAgICAgICAgICBTdG9yYWdlRGVsID0gTlVMTDsKLSAgICAgICAgICAgIC8qIFN0b3JhZ2VEZWwgPSAwOyAqLwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFhYWDogZnJlZSBpdCwgaXRzIGRlYWQgCi0gICAgICAgICAgICAgKi8KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChTdG9yYWdlVG1wCiAgICAgICAgICAgICAgICAgJiYgU3RvcmFnZVRtcC0+cGluZ0N0bFJvd1N0YXR1cyA9PSBSU19DUkVBVEVBTkRHTykgewpAQCAtNDMyNyw2ICs0NDAxLDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogCiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NjQsMTQgKzQ1MzksMTMgQEAKICAgICAgKiBDaGVjayB0aGF0IHBhY2tldHMgPCByYXRlKnRpbWUgKyBwcmVsb2FkIAogICAgICAqLwogICAgIGlmICgoKmN1cl90aW1lKS50dl9zZWMgPT0gMCkgewotCi0gICAgICAgIGdldHRpbWVvZmRheShjdXJfdGltZSwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jayhjdXJfdGltZSk7CiAgICAgICAgIHRva2VucyA9IGludGVydmFsICogKHByZWxvYWQgLSAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBsb25nICAgICAgICAgICAgbnRva2VuczsKICAgICAgICAgc3RydWN0IHRpbWV2YWwgIHR2OwogCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnR2KTsKICAgICAgICAgbnRva2VucyA9ICh0di50dl9zZWMgLSAoKmN1cl90aW1lKS50dl9zZWMpICogMTAwMCArCiAgICAgICAgICAgICAodHYudHZfdXNlYyAtICgqY3VyX3RpbWUpLnR2X3VzZWMpIC8gMTAwMDsKICAgICAgICAgaWYgKCFpbnRlcnZhbCkgewpAQCAtNDY5Niw3ICs0NzcwLDcgQEAKIAogICAgICppZGVudCA9IGdldHBpZCgpICYgMHhGRkZGOwogCi0gICAgZ2V0dGltZW9mZGF5KHN0YXJ0X3RpbWUsIE5VTEwpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jayhzdGFydF90aW1lKTsKIAogI2lmIDAKICAgICBpZiAoKmRlYWRsaW5lKSB7CkBAIC00NzgwLDExICs0ODU0LDExIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobnBhY2tldHMgJiYgbnJlY2VpdmVkID49IG5wYWNrZXRzKSB7Ci0gICAgICAgICAgICBwcmludGYoIm5wYWNrZXRzLG5yZWNlaXZlZD0lbGRcbiIsIG5yZWNlaXZlZCk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIm5wYWNrZXRzLG5yZWNlaXZlZD0lbGRcbiIsIG5yZWNlaXZlZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRlYWRsaW5lICYmIG5lcnJvcnMpIHsKLSAgICAgICAgICAgIHByaW50ZigiZGVhZGxpbmVcbiIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJkZWFkbGluZVxuIikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNDc5OSw3ICs0ODczLDcgQEAKICAgICAgICAgICogU2VuZCBwcm9iZXMgc2NoZWR1bGVkIHRvIHRoaXMgdGltZS4gCiAgICAgICAgICAqLwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwcmludGYoInBpbmdlclxuIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgInBpbmdlclxuIikpOwogICAgICAgICAgICAgbmV4dCA9CiAgICAgICAgICAgICAgICAgcGluZ2VyKGljbXBfc29jaywgcHJlbG9hZCwgY21zZ2xlbiwgY21zZ2J1Ziwgd2hlcmV0bywKICAgICAgICAgICAgICAgICAgICAgICAgJnJ0dF9hZGRlbmQsIHVpZCwgb3B0aW9ucywgaW50ZXJ2YWwsIGRhdGFsZW4sCkBAIC00ODA3LDExICs0ODgxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lLCAmYWNrZWQsICZucGFja2V0cywgJm5yZWNlaXZlZCwKICAgICAgICAgICAgICAgICAgICAgICAgJm50cmFuc21pdHRlZCwgJm5lcnJvcnMsICZjb25maXJtX2ZsYWcsICZjb25maXJtLAogICAgICAgICAgICAgICAgICAgICAgICAmcGlwZXNpemUsICZjdXJfdGltZSk7Ci0gICAgICAgICAgICBwcmludGYoIjE6bmV4dD0lZFxuIiwgbmV4dCk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIjE6bmV4dD0lZFxuIiwgbmV4dCkpOwogICAgICAgICAgICAgbmV4dCA9CiAgICAgICAgICAgICAgICAgc2NoZWR1bGVfZXhpdChuZXh0LCBkZWFkbGluZSwgJm5wYWNrZXRzLCAmbnJlY2VpdmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm50cmFuc21pdHRlZCwgJnRtYXgpOwotICAgICAgICAgICAgcHJpbnRmKCIyOm5leHQ9JWRcbiIsIG5leHQpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIyOm5leHQ9JWRcbiIsIG5leHQpKTsKICAgICAgICAgfSB3aGlsZSAobmV4dCA8PSAwKTsKIAogICAgICAgICAvKgpAQCAtNDkwMCw4ICs0OTc0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICp0ZW1wID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKIAotCi0KICAgICAgICAgICAgICAgICAgICAgaWYgKHNlcmllcyA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmVGYWlsZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICBlbHNlCkBAIC00OTA5LDEzICs0OTgxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlcmllcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQgPSB0ZXN0RmFpbGVkICsgMTsKIAotICAgICAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgLyogIHBpbmdDdGxPd25lckluZGV4ICAqLwotICAgICAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7IC8qICBwaW5nQ3RsVGVzdE5hbWUgICovCisgICAgICAgICAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgICAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBTdG9yYWdlTmV3ID0gaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMpOworICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFTdG9yYWdlTmV3KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzU2VuZFByb2JlcyA9CkBAIC01MDEwLDcgKzUwODYsNyBAQAogICAgICAgICAgICAgICAgICAgICBub3Rfb3VycyA9IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImNjPj0wLGVsc2VcbiIpOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiY2M+PTAsZWxzZVxuIikpOwogI2lmZGVmIFNPX1RJTUVTVEFNUAogICAgICAgICAgICAgICAgIGZvciAoYyA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGM7IGMgPSBDTVNHX05YVEhEUigmbXNnLCBjKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYy0+Y21zZ19sZXZlbCAhPSBTT0xfU09DS0VUIHx8CkBAIC01MDI1LDcgKzUxMDEsNyBAQAogICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucyAmIEZfTEFURU5DWSkgfHwgcmVjdl90aW1lcCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucyAmIEZfTEFURU5DWSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIGlvY3RsKGljbXBfc29jaywgU0lPQ0dTVEFNUCwgJnJlY3ZfdGltZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXR0aW1lb2ZkYXkoJnJlY3ZfdGltZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnJlY3ZfdGltZSk7CiAgICAgICAgICAgICAgICAgICAgIHJlY3ZfdGltZXAgPSAmcmVjdl90aW1lOwogICAgICAgICAgICAgICAgIH0KIApAQCAtNTEyNSwxOSArNTIwMSwxNCBAQAogICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdG1wX3R2OwogICAgICAgICBtZW1jcHkoJnRtcF90diwgcHRyLCBzaXplb2YodG1wX3R2KSk7CiAKLSAgICAgIHJlc3RhbXA6CiAgICAgICAgIHR2c3ViKHR2LCAmdG1wX3R2KTsKICAgICAgICAgdHJpcHRpbWUgPSB0di0+dHZfc2VjICogMTAwMDAwMCArIHR2LT50dl91c2VjOwogICAgICAgICBpZiAodHJpcHRpbWUgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IHRpbWUgb2YgZGF5IGdvZXMgYmFjayAoJWxkdXMpLCB0YWtpbmcgY291bnRlcm1lYXN1cmVzLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgdHJpcHRpbWUpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogaW52YWxpZCB0aW1lc3RhbXAgaW4gSUNNUCByZXNwb25zZS5cbiIpOwogICAgICAgICAgICAgdHJpcHRpbWUgPSAwOwotICAgICAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZfTEFURU5DWSkpIHsKLSAgICAgICAgICAgICAgICBnZXR0aW1lb2ZkYXkodHYsIE5VTEwpOworICAgICAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZfTEFURU5DWSkpCiAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBGX0xBVEVOQ1k7Ci0gICAgICAgICAgICAgICAgZ290byByZXN0YW1wOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghY3NmYWlsZWQpIHsKICAgICAgICAgICAgICgqdHN1bSkgKz0gdHJpcHRpbWU7CkBAIC01MTc5LDMyICs1MjUwLDM0IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50ICAgICAgICAgICAgIGk7CiAgICAgICAgIF9fdTggICAgICAgICAgICpjcCwgKmRwOwotICAgICAgICBwcmludGYoIiVkIGJ5dGVzIGZyb20gJXM6IGljbXBfc2VxPSV1IiwgY2MsIGZyb20sIHNlcSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIlZCBieXRlcyBmcm9tICVzOiBpY21wX3NlcT0ldSIsIGNjLCBmcm9tLAorICAgICAgICAgICAgICAgICAgICBzZXEpKTsKIAogICAgICAgICBpZiAoaG9wcyA+PSAwKQotICAgICAgICAgICAgcHJpbnRmKCIgdHRsPSVkIiwgaG9wcyk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiB0dGw9JWQiLCBob3BzKSk7CiAKICAgICAgICAgaWYgKGNjIDwgZGF0YWxlbiArIDgpIHsKLSAgICAgICAgICAgIHByaW50ZigiICh0cnVuY2F0ZWQpXG4iKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiICh0cnVuY2F0ZWQpXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBpZiAodGltaW5nKSB7CiAgICAgICAgICAgICBpZiAodHJpcHRpbWUgPj0gMTAwMDAwKQotICAgICAgICAgICAgICAgIHByaW50ZigiIHRpbWU9JWxkIG1zIiwgdHJpcHRpbWUgLyAxMDAwKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiB0aW1lPSVsZCBtcyIsIHRyaXB0aW1lIC8gMTAwMCkpOwogICAgICAgICAgICAgZWxzZSBpZiAodHJpcHRpbWUgPj0gMTAwMDApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgdGltZT0lbGQuJTAxbGQgbXMiLCB0cmlwdGltZSAvIDEwMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICh0cmlwdGltZSAlIDEwMDApIC8gMTAwKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiB0aW1lPSVsZC4lMDFsZCBtcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpcHRpbWUgLyAxMDAwLCAodHJpcHRpbWUgJSAxMDAwKSAvIDEwMCkpOwogICAgICAgICAgICAgZWxzZSBpZiAodHJpcHRpbWUgPj0gMTAwMCkKLSAgICAgICAgICAgICAgICBwcmludGYoIiB0aW1lPSVsZC4lMDJsZCBtcyIsIHRyaXB0aW1lIC8gMTAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgKHRyaXB0aW1lICUgMTAwMCkgLyAxMCk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIgdGltZT0lbGQuJTAybGQgbXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaXB0aW1lIC8gMTAwMCwgKHRyaXB0aW1lICUgMTAwMCkgLyAxMCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiIHRpbWU9JWxkLiUwM2xkIG1zIiwgdHJpcHRpbWUgLyAxMDAwLAotICAgICAgICAgICAgICAgICAgICAgICB0cmlwdGltZSAlIDEwMDApOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiIHRpbWU9JWxkLiUwM2xkIG1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlwdGltZSAvIDEwMDAsIHRyaXB0aW1lICUgMTAwMCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChkdXBmbGFnKQotICAgICAgICAgICAgcHJpbnRmKCIgKERVUCEpIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiAoRFVQISkiKSk7CiAgICAgICAgIGlmIChjc2ZhaWxlZCkKLSAgICAgICAgICAgIHByaW50ZigiIChCQUQgQ0hFQ0tTVU0hKSIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIgKEJBRCBDSEVDS1NVTSEpIikpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNoZWNrIHRoZSBkYXRhIApAQCAtNTIxMywxMyArNTI4NiwxNCBAQAogICAgICAgICBkcCA9ICh1X2NoYXIgKikmb3V0cGFja1s4ICsgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKV07CiAgICAgICAgIGZvciAoaSA9IHNpemVvZihzdHJ1Y3QgdGltZXZhbCk7IGkgPCBkYXRhbGVuOyArK2ksICsrY3AsICsrZHApIHsKICAgICAgICAgICAgIGlmICgqY3AgIT0gKmRwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbndyb25nIGRhdGEgYnl0ZSAjJWQgc2hvdWxkIGJlIDB4JXggYnV0IHdhcyAweCV4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgaSwgKmRwLCAqY3ApOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbndyb25nIGRhdGEgYnl0ZSAjJWQgc2hvdWxkIGJlIDB4JXggYnV0IHdhcyAweCV4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCAqZHAsICpjcCkpOwogICAgICAgICAgICAgICAgIGNwID0gKHVfY2hhciAqKSBwdHIgKyBzaXplb2Yoc3RydWN0IHRpbWV2YWwpOwogICAgICAgICAgICAgICAgIGZvciAoaSA9IHNpemVvZihzdHJ1Y3QgdGltZXZhbCk7IGkgPCBkYXRhbGVuOyArK2ksICsrY3ApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChpICUgMzIpID09IHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIyVkXHQiLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIleCAiLCAqY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJcbiMlZFx0IiwgaSkpOworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiV4ICIsICpjcCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTUyMjcsMTIgKzUzMDEsMTYgQEAKICAgICB9CiAKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAvKiAgcGluZ0N0bE93bmVySW5kZXggICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAvKiAgcGluZ0N0bFRlc3ROYW1lICAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAotCi0gICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycykpID09IE5VTEwpCisgICAgU3RvcmFnZU5ldyA9IGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycyk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgaWYgKCFTdG9yYWdlTmV3KQogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9TVUNITkFNRTsKIAogCkBAIC01MjQ3LDYgKzUzMjUsNyBAQAogICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzUnR0U3VtT2ZTcXVhcmVzID0gKnRzdW0yOwogCiAgICAgU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNMYXN0R29vZFByb2JlX3RpbWUgPSB0aW1lcDsKKyAgICBmcmVlKFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZSk7CiAgICAgU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNMYXN0R29vZFByb2JlID0KICAgICAgICAgbmV0c25tcF9tZW1kdXAoZGF0ZV9uX3RpbWUoJnRpbWVwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNMYXN0R29vZFByb2JlTGVuKSwKQEAgLTUzNTcsMjAgKzU0MzYsMjEgQEAKIAogICAgIHB1dGNoYXIoJ1xuJyk7CiAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcHJpbnRmKCItLS0gJXMgcGluZyBzdGF0aXN0aWNzIC0tLVxuIiwgaG9zdG5hbWUpOworICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLS0tICVzIHBpbmcgc3RhdGlzdGljcyAtLS1cbiIsIGhvc3RuYW1lKSk7CiAKICAgICBpZiAoKm5yZXBlYXRzKQotICAgICAgICBwcmludGYoIiwgKyVsZCBkdXBsaWNhdGVzIiwgKm5yZXBlYXRzKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsICslbGQgZHVwbGljYXRlcyIsICpucmVwZWF0cykpOwogICAgIGlmICgqbmNoZWNrc3VtKQotICAgICAgICBwcmludGYoIiwgKyVsZCBjb3JydXB0ZWQiLCAqbmNoZWNrc3VtKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsICslbGQgY29ycnVwdGVkIiwgKm5jaGVja3N1bSkpOwogICAgIGlmICgqbmVycm9ycykKLSAgICAgICAgcHJpbnRmKCIsICslbGQgZXJyb3JzIiwgKm5lcnJvcnMpOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiwgKyVsZCBlcnJvcnMiLCAqbmVycm9ycykpOwogICAgIGlmICgqbnRyYW5zbWl0dGVkKSB7Ci0gICAgICAgIHByaW50ZigiLCAlZCUlIGxvc3MiLAotICAgICAgICAgICAgICAgKGludCkgKCgoKGxvbmcgbG9uZykgKCgqbnRyYW5zbWl0dGVkKSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpucmVjZWl2ZWQpKSkgKiAxMDApIC8KLSAgICAgICAgICAgICAgICAgICAgICAoKm50cmFuc21pdHRlZCkpKTsKLSAgICAgICAgcHJpbnRmKCIsIHRpbWUgJWxkbXMiLCAxMDAwICogdHYudHZfc2VjICsgdHYudHZfdXNlYyAvIDEwMDApOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiwgJWQlJSBsb3NzIiwKKyAgICAgICAgICAgICAgICAgICAgKGludCkgKCgoKGxvbmcgbG9uZykgKCgqbnRyYW5zbWl0dGVkKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKm5yZWNlaXZlZCkpKSAqIDEwMCkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpudHJhbnNtaXR0ZWQpKSkpOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiwgdGltZSAlbGRtcyIsCisgICAgICAgICAgICAgICAgICAgIDEwMDAgKiB0di50dl9zZWMgKyB0di50dl91c2VjIC8gMTAwMCkpOwogICAgIH0KICAgICBwdXRjaGFyKCdcbicpOwogCkBAIC01MzgxLDIxICs1NDYxLDIzIEBACiAgICAgICAgICgqdHN1bTIpIC89ICgqbnJlY2VpdmVkKSArICgqbnJlcGVhdHMpOwogICAgICAgICB0bWRldiA9IGxsc3FydCgoKnRzdW0yKSAtICgqdHN1bSkgKiAoKnRzdW0pKTsKIAotICAgICAgICBwcmludGYKLSAgICAgICAgICAgICgicnR0IG1pbi9hdmcvbWF4L21kZXYgPSAlbGQuJTAzbGQvJWx1LiUwM2xkLyVsZC4lMDNsZC8lbGQuJTAzbGQgbXMiLAotICAgICAgICAgICAgICgqdG1pbikgLyAxMDAwLCAoKnRtaW4pICUgMTAwMCwKLSAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKCgqdHN1bSkgLyAxMDAwKSwgKGxvbmcpICgoKnRzdW0pICUgMTAwMCksCi0gICAgICAgICAgICAgKCp0bWF4KSAvIDEwMDAsICgqdG1heCkgJSAxMDAwLCB0bWRldiAvIDEwMDAsIHRtZGV2ICUgMTAwMCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAicnR0IG1pbi9hdmcvbWF4L21kZXYgPSAlbGQuJTAzbGQvJWx1LiUwM2xkIgorICAgICAgICAgICAgICAgICAgICAiLyVsZC4lMDNsZC8lbGQuJTAzbGQgbXMiLAorICAgICAgICAgICAgICAgICAgICAoKnRtaW4pIC8gMTAwMCwgKCp0bWluKSAlIDEwMDAsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoKCp0c3VtKSAvIDEwMDApLCAobG9uZykgKCgqdHN1bSkgJSAxMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgKCp0bWF4KSAvIDEwMDAsICgqdG1heCkgJSAxMDAwLCB0bWRldiAvIDEwMDAsCisgICAgICAgICAgICAgICAgICAgIHRtZGV2ICUgMTAwMCkpOwogICAgIH0KICAgICBpZiAoKCpwaXBlc2l6ZSkgPiAxKQotICAgICAgICBwcmludGYoIiwgcGlwZSAlZCIsICpwaXBlc2l6ZSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLCBwaXBlICVkIiwgKnBpcGVzaXplKSk7CiAgICAgaWYgKCgqbnRyYW5zbWl0dGVkKSA+IDEKICAgICAgICAgJiYgKCFpbnRlcnZhbCB8fCAob3B0aW9ucyAmIChGX0ZMT09EIHwgRl9BREFQVElWRSkpKSkgewogICAgICAgICBpbnQgICAgICAgICAgICAgaXBnID0KICAgICAgICAgICAgICgxMDAwMDAwICogKGxvbmcgbG9uZykgdHYudHZfc2VjICsKICAgICAgICAgICAgICB0di50dl91c2VjKSAvICgoKm50cmFuc21pdHRlZCkgLSAxKTsKLSAgICAgICAgcHJpbnRmKCIsIGlwZy9ld21hICVkLiUwM2QvJWQuJTAzZCBtcyIsIGlwZyAvIDEwMDAsIGlwZyAlIDEwMDAsCi0gICAgICAgICAgICAgICAoKnJ0dCkgLyA4MDAwLCAoKCpydHQpIC8gOCkgJSAxMDAwKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsIGlwZy9ld21hICVkLiUwM2QvJWQuJTAzZCBtcyIsCisgICAgICAgICAgICAgICAgICAgIGlwZyAvIDEwMDAsIGlwZyAlIDEwMDAsCisgICAgICAgICAgICAgICAgICAgICgqcnR0KSAvIDgwMDAsICgoKnJ0dCkgLyA4KSAlIDEwMDApKTsKICAgICB9CiAgICAgcHV0Y2hhcignXG4nKTsKICAgICByZXR1cm47CkBAIC01NDE4LDE5ICs1NTAwLDE5IEBACiAgICAgICAgICAgICAoKChsb25nIGxvbmcpICgoKm50cmFuc21pdHRlZCkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpucmVjZWl2ZWQpKSkgKiAxMDApIC8gKCpudHJhbnNtaXR0ZWQpOwogCi0gICAgZnByaW50ZihzdGRlcnIsICJcciVsZC8lbGQgcGFja2V0cywgJWQlJSBsb3NzIiwgKm50cmFuc21pdHRlZCwKLSAgICAgICAgICAgICpucmVjZWl2ZWQsIGxvc3MpOworICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiXG4lbGQvJWxkIHBhY2tldHMsICVkJSUgbG9zcyIsICpudHJhbnNtaXR0ZWQsCisgICAgICAgICAgICAgICAgKm5yZWNlaXZlZCwgbG9zcykpOwogCiAgICAgaWYgKCgqbnJlY2VpdmVkKSAmJiB0aW1pbmcpIHsKICAgICAgICAgdGF2ZyA9ICgqdHN1bSkgLyAoKCpucmVjZWl2ZWQpICsgKCpucmVwZWF0cykpOwogCi0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICIsIG1pbi9hdmcvZXdtYS9tYXggPSAlbGQuJTAzbGQvJWx1LiUwM2xkLyVkLiUwM2QvJWxkLiUwM2xkIG1zIiwKLSAgICAgICAgICAgICAgICAoKnRtaW4pIC8gMTAwMCwgKCp0bWluKSAlIDEwMDAsIHRhdmcgLyAxMDAwLCB0YXZnICUgMTAwMCwKLSAgICAgICAgICAgICAgICAoKnJ0dCkgLyA4MDAwLCAoKCpydHQpIC8gOCkgJSAxMDAwLCAoKnRtYXgpIC8gMTAwMCwKLSAgICAgICAgICAgICAgICAoKnRtYXgpICUgMTAwMCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLCBtaW4vYXZnL2V3bWEvbWF4ID0gJWxkLiUwM2xkLyVsdS4lMDNsZCIKKyAgICAgICAgICAgICAgICAgICAgIi8lZC4lMDNkLyVsZC4lMDNsZCBtcyIsCisgICAgICAgICAgICAgICAgICAgICgqdG1pbikgLyAxMDAwLCAoKnRtaW4pICUgMTAwMCwgdGF2ZyAvIDEwMDAsIHRhdmcgJSAxMDAwLAorICAgICAgICAgICAgICAgICAgICAoKnJ0dCkgLyA4MDAwLCAoKCpydHQpIC8gOCkgJSAxMDAwLCAoKnRtYXgpIC8gMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgKCp0bWF4KSAlIDEwMDApKTsKICAgICB9Ci0gICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiXG4iKSk7CiB9CiAKIApAQCAtNTQ4OCwxMiArNTU3MCwxMCBAQAogICAgICAgICBpZiAob3B0aW9ucyAmIEZfRkxPT0QpCiAgICAgICAgICAgICB3cml0ZShTVERPVVRfRklMRU5PLCAiRSIsIDEpOwogICAgICAgICBlbHNlIGlmIChlLT5lZV9lcnJubyAhPSBFTVNHU0laRSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGluZzogbG9jYWwgZXJyb3I6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlLT5lZV9lcnJubykpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInBpbmc6IGxvY2FsIGVycm9yOiAlc1xuIiwgc3RyZXJyb3IoZS0+ZWVfZXJybm8pKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICJwaW5nOiBsb2NhbCBlcnJvcjogTWVzc2FnZSB0b28gbG9uZywgbXR1PSV1XG4iLAotICAgICAgICAgICAgICAgICAgICBlLT5lZV9pbmZvKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJwaW5nOiBsb2NhbCBlcnJvcjogTWVzc2FnZSB0b28gbG9uZywgbXR1PSV1XG4iLAorICAgICAgICAgICAgICAgICAgICAgZS0+ZWVfaW5mbyk7CiAgICAgICAgICgqbmVycm9ycykrKzsKICAgICB9IGVsc2UgaWYgKGUtPmVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fSUNNUDYpIHsKICAgICAgICAgaWYgKHJlcyA8IHNpemVvZihpY21waCkgfHwKQEAgLTU2MTUsNyArNTY5NSw3IEBACiAgICAgaWNtcGggPSAoc3RydWN0IGljbXA2X2hkciAqKSBidWY7CiAgICAgaWYgKGNjIDwgOCkgewogICAgICAgICBpZiAob3B0aW9ucyAmIEZfVkVSQk9TRSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGluZzogcGFja2V0IHRvbyBzaG9ydCAoJWQgYnl0ZXMpXG4iLCBjYyk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicGluZzogcGFja2V0IHRvbyBzaG9ydCAoJWQgYnl0ZXMpXG4iLCBjYyk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBpZiAoaWNtcGgtPmljbXA2X3R5cGUgPT0gSUNNUDZfRUNIT19SRVBMWSkgewpAQCAtNTY2OCwxNiArNTc0OCwxNyBAQAogICAgICAgICAgICAgICAgIHdyaXRlKFNURE9VVF9GSUxFTk8sICJcYkUiLCAyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiRnJvbSAlczogaWNtcF9zZXE9JXUgIiwKLSAgICAgICAgICAgICAgICAgICBwcl9hZGRyKCZmcm9tLT5zaW42X2FkZHIsIG9wdGlvbnMpLAotICAgICAgICAgICAgICAgICAgIGljbXBoMS0+aWNtcDZfc2VxKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiRnJvbSAlczogaWNtcF9zZXE9JXUgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByX2FkZHIoJmZyb20tPnNpbjZfYWRkciwgb3B0aW9ucyksCisgICAgICAgICAgICAgICAgICAgICAgICBpY21waDEtPmljbXA2X3NlcSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFdlJ3ZlIGdvdCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBFQ0hPUkVQTFkgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICghKG9wdGlvbnMgJiBGX1ZFUkJPU0UpIHx8IHVpZCkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIHByaW50ZigiRnJvbSAlczogIiwgcHJfYWRkcigmZnJvbS0+c2luNl9hZGRyLCBvcHRpb25zKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIkZyb20gJXM6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcl9hZGRyKCZmcm9tLT5zaW42X2FkZHIsIG9wdGlvbnMpKSk7CiAgICAgICAgIH0KICAgICAgICAgLyogcHJfaWNtcGgoaWNtcGgtPmljbXA2X3R5cGUsIGljbXBoLT5pY21wNl9jb2RlLCBudG9obChpY21waC0+aWNtcDZfbXR1KSk7ICovCiAgICAgfQpAQCAtNTc0Miw4ICs1ODIzLDggQEAKICAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOwogCiAgICAgaWYgKCEob3B0aW9ucyAmIEZfTlVNRVJJQykpCi0gICAgICAgIGhwID0gZ2V0aG9zdGJ5YWRkcigoX191OCAqKSBhZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0lORVQ2KTsKKyAgICAgICAgaHAgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoKF9fdTggKikgYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0lORVQ2KTsKIAogICAgIHJldHVybiBocCA/IGhwLT5oX25hbWUgOiBwcl9hZGRyX24oYWRkcik7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oCmluZGV4IGVhOGRhMzEuLmNhNjlkMTMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oCkBAIC0yMDYsNiArMjA2LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfcGluZ0N0bFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3BpbmdDdGxUYWJsZSh2b2lkKTsKIEZpbmRWYXJNZXRob2QgICB2YXJfcGluZ0N0bFRhYmxlOwogdm9pZCAgICAgICAgICAgIHBhcnNlX3BpbmdDdGxUYWJsZShjb25zdCBjaGFyICosIGNoYXIgKik7CiBTTk1QQ2FsbGJhY2sgICAgc3RvcmVfcGluZ0N0bFRhYmxlOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYwppbmRleCAzMWZhMGI4Li43OGM3NWJlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYwpAQCAtNTAsMTAgKzUwLDE0IEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MCwgMSwgNCB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIHBpbmdQcm9iZUhpc3RvcnlUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllSRVNQT05TRSwgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllTVEFUVVMsICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllMQVNUUkMsICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDR9fSwKLSAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllUSU1FLCAgICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDV9fQorICAgIHtDT0xVTU5fUElOR1BST0JFSElTVE9SWVJFU1BPTlNFLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Byb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtDT0xVTU5fUElOR1BST0JFSElTVE9SWVNUQVRVUywgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Byb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fUElOR1BST0JFSElTVE9SWUxBU1RSQywgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Byb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fUElOR1BST0JFSElTVE9SWVRJTUUsICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Byb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgNX19CiB9OwogCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYwppbmRleCAxZjcxZmQ1Li4xNDQ1ZDg2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jCkBAIC00OSwxNiArNDksMjYgQEAKICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgwLCAxLCAzIH07CiAKIHN0cnVjdCB2YXJpYWJsZTIgcGluZ1Jlc3VsdHNUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7Q09MVU1OX1BJTkdSRVNVTFRTT1BFUlNUQVRVUywgICAgICAgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDF9fSwKLSAgICB7Q09MVU1OX1BJTkdSRVNVTFRTSVBUQVJHRVRBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7Q09MVU1OX1BJTkdSRVNVTFRTSVBUQVJHRVRBRERSRVNTLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU01JTlJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU01BWFJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU0FWRVJBR0VSVFQsICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU1BST0JFUkVTUE9OU0VTLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU1NFTlRQUk9CRVMsICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA4fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU1JUVFNVTU9GU1FVQVJFUywgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA5fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU0xBU1RHT09EUFJPQkUsICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAxMH19CisgICAge0NPTFVNTl9QSU5HUkVTVUxUU09QRVJTVEFUVVMsICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAxfX0sCisgICAge0NPTFVNTl9QSU5HUkVTVUxUU0lQVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0NPTFVNTl9QSU5HUkVTVUxUU0lQVEFSR0VUQUREUkVTUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNNSU5SVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNNQVhSVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNX19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNBVkVSQUdFUlRULCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNn19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNQUk9CRVJFU1BPTlNFUywgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNTRU5UUFJPQkVTLCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgOH19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNSVFRTVU1PRlNRVUFSRVMsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgOX19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNMQVNUR09PRFBST0JFLCAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgMTB9fQogfTsKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMKaW5kZXggMmU2N2I3My4uMGNiZGJjNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYwpAQCAtNCwxMiArNCwxNiBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgImRpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuaCIKICNpbmNsdWRlICJkaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ190aW1lX3RvX3NlY3MpCisKIHN0YXRpYyBpbnQgc2NoZWRFbnRyaWVzOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjaGVkQ29uZiBtb2R1bGUgKi8KQEAgLTUxLDcgKzU1LDcgQEAKIHsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAgICAqcm93OwogICAgIHN0cnVjdCBzY2hlZFRhYmxlX2VudHJ5ICplbnRyeTsKLSAgICBjaGFyICAgYnVmWzI0XTsKKyAgICBjaGFyICAgYnVmWzI0XSwgdG1wYnVmW1NQUklOVF9NQVhfTEVOXTsKICAgICBsb25nICAgZnJlcXVlbmN5OwogICAgIGxvbmcgICB2YWx1ZTsKICAgICBzaXplX3QgdG1waW50OwpAQCAtNjUsNyArNjksMTMgQEAKICAgICAvKgogICAgICAqICBQYXJzZSB0aGUgY29uZmlndXJlIGRpcmVjdGl2ZSBsaW5lCiAgICAgICovCi0gICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfZGF0YShBU05fSU5URUdFUiwgICBsaW5lLCAmZnJlcXVlbmN5LCAmdG1waW50KTsKKyAgICBsaW5lID0gY29weV9ud29yZChsaW5lLCB0bXBidWYsIHNpemVvZih0bXBidWYpKTsKKyAgICBmcmVxdWVuY3kgPSBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3ModG1wYnVmKTsKKyAgICBpZiAoZnJlcXVlbmN5ID09IC0xKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIklsbGVnYWwgZnJlcXVlbmN5IHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfZGF0YShBU05fT0JKRUNUX0lELCBsaW5lLCAmdmFyX3B0ciwgICAmdmFyX2xlbik7CiAgICAgaWYgKHZhcl9sZW4gPT0gMCkgewogICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIHNwZWNpZmljYXRpb24gZm9yIHNjaGVkVmFyaWFibGUiKTsKQEAgLTc0LDExICs4NCwxMSBAQAogICAgIC8qCiAgICAgICogU2tpcCBvdmVyIG9wdGlvbmFsIGFzc2lnbm1lbnQgaW4gInZhciA9IHZhbHVlIgogICAgICAqLwotICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKmxpbmUpKQorICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpsaW5lKSkpCiAgICAgICAgIGxpbmUrKzsKICAgICBpZiAobGluZSAmJiAqbGluZSA9PSAnPScgKSB7CiAgICAgICAgIGxpbmUrKzsKLSAgICAgICAgd2hpbGUgKGxpbmUgJiYgaXNzcGFjZSgqbGluZSkpIHsKKyAgICAgICAgd2hpbGUgKGxpbmUgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKmxpbmUpKSkgewogICAgICAgICAgICAgbGluZSsrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE5LDcgKzEyOSw3IEBACiBfc2NoZWRfY29udmVydF9iaXRzKCBjaGFyICpjcm9uX3NwZWMsIGNoYXIgKmJpdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgIGJpdF9idWZfbGVuLCBpbnQgbWF4X3ZhbCwgaW50IHN0YXJ0QXQxICkgewogICAgIGNoYXIgKmNwID0gY3Jvbl9zcGVjOwotICAgIGNoYXIgYltdID0gezB4ODAsIDB4NDAsIDB4MjAsIDB4MTAsIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDF9OworICAgIHVfY2hhciBiW10gPSB7MHg4MCwgMHg0MCwgMHgyMCwgMHgxMCwgMHgwOCwgMHgwNCwgMHgwMiwgMHgwMX07CiAgICAgaW50IHZhbCwgbWFqb3IsIG1pbm9yOwogICAgIGludCBvdmVyc2hvb3Q7CiAKQEAgLTIxOSwxMSArMjI5LDExIEBACiAgICAgLyoKICAgICAgKiBTa2lwIG92ZXIgb3B0aW9uYWwgYXNzaWdubWVudCBpbiAidmFyID0gdmFsdWUiCiAgICAgICovCi0gICAgd2hpbGUgKGxpbmUgJiYgaXNzcGFjZSgqbGluZSkpCisgICAgd2hpbGUgKGxpbmUgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKmxpbmUpKSkKICAgICAgICAgbGluZSsrOwogICAgIGlmICggKmxpbmUgPT0gJz0nICkgewogICAgICAgICBsaW5lKys7Ci0gICAgICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKmxpbmUpKSB7CisgICAgICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpsaW5lKSkpIHsKICAgICAgICAgICAgIGxpbmUrKzsKICAgICAgICAgfQogICAgIH0KQEAgLTM1Nyw3ICszNjcsNyBAQAogewogICAgIGNoYXIgICAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwogICAgIGNoYXIgICAgICAgICAgICAgIHRpbWVfYml0c1syMl07ICAvKiBzY2hlZFdlZWtEYXkuLnNjaGVkTWludXRlICovCi0gICAgY2hhciAgICAgICAgICAgICAqY3B0cjsKKyAgICBjaGFyICAgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgICAqdnA7CiAgICAgc2l6ZV90ICAgICAgICAgICAgdGludDsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OwpAQCAtMzg3LDEyICszOTcsMTIgQEAKICAgICAgICAgc3RyY3B5KGxpbmUsICJfc2NoZWRUYWJsZSAiKTsKICAgICAgICAgY3B0ciA9IGxpbmUgKyBzdHJsZW4obGluZSk7CiAKLSAgICAgICAgdnAgICA9IGVudHJ5LT5zY2hlZE93bmVyOyAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5zY2hlZE5hbWU7ICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5zY2hlZERlc2NyOyAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5zY2hlZE93bmVyOyAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5zY2hlZE5hbWU7ICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5zY2hlZERlc2NyOyAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKICAgICAgICAgdGludCA9IGVudHJ5LT5zY2hlZEludGVydmFsOwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwogCkBAIC00MDgsOCArNDE4LDggQEAKICAgICAgICAgdnAgICA9IHRpbWVfYml0czsgICAgdGludCA9IDIyOwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7CiAKLSAgICAgICAgdnAgICA9IGVudHJ5LT5zY2hlZENvbnRleHROYW1lOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPnNjaGVkQ29udGV4dE5hbWU7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIHZwICAgPSBlbnRyeS0+c2NoZWRWYXJpYWJsZTsKICAgICAgICAgdGludCA9IGVudHJ5LT5zY2hlZFZhcmlhYmxlX2xlbjsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09CSkVDVF9JRCwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYwppbmRleCA0MDU1ZDQ2Li5jM2RiMzRmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jCkBAIC00LDEzICs0LDM3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuaCIKICNpbmNsdWRlICJ1dGlsaXRpZXMvaXF1ZXJ5LmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNjaGVkX25leHRyb3d0aW1lLCBuZXRzbm1wX3VudXNlZCkKKwogbmV0c25tcF90ZGF0YSAqc2NoZWR1bGVfdGFibGU7CiAKKworI2lmICFkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpICYmICFkZWZpbmVkKGxvY2FsdGltZV9yKQorLyoKKyAqIGxvY2FsdGltZV9yKCkgcmVwbGFjZW1lbnQgZm9yIG9sZGVyIE1pbkdXIHZlcnNpb25zLgorICogTm90ZTogdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdGhyZWFkLXNhZmUsIHdoaWxlIGl0IHNob3VsZC4KKyAqLworc3RydWN0IHRtICAgICAgKgorbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICogdGltZXIsIHN0cnVjdCB0bSAqcmVzdWx0KQoreworICAgIHN0cnVjdCB0bSAgICAgICpyZXN1bHRfcDsKKworICAgIHJlc3VsdF9wID0gbG9jYWx0aW1lKHRpbWVyKTsKKyAgICBpZiAocmVzdWx0ICYmIHJlc3VsdF9wKQorICAgICAgICAqcmVzdWx0ID0gKnJlc3VsdF9wOworICAgIHJldHVybiByZXN1bHRfcDsKK30KKyNlbmRpZgorCisKICAgICAvKgogICAgICAqIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciBmb3IgdGhlIHNjaGVkdWxlIHRhYmxlLAogICAgICAqIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggaW5pdGlhbGlzYXRpb24gcm91dGluZSBpcyBjYWxsZWQgZmlyc3QuCkBAIC0yMiw3ICs0Niw3IEBACiAgICAgaWYgKCFzY2hlZHVsZV90YWJsZSkgewogICAgICAgICBzY2hlZHVsZV90YWJsZSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJzY2hlZFRhYmxlIiwgMCk7CiAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6aW5pdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlIHNjaGVkdWxlIGNvbnRhaW5lcigleClcbiIsIHNjaGVkdWxlX3RhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlIHNjaGVkdWxlIGNvbnRhaW5lciglcClcbiIsIHNjaGVkdWxlX3RhYmxlKSk7CiAgICAgfQogfQogCkBAIC01MywxMyArNzcsMTMgQEAKICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpzY2hlZHVsZTpjYWxsYmFjayIsICJtaXNzaW5nIGVudHJ5XG4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZW50cnktPnNjaGVkTGFzdFJ1biA9IHRpbWUoMCk7CisgICAgZW50cnktPnNjaGVkTGFzdFJ1biA9IHRpbWUoTlVMTCk7CiAgICAgZW50cnktPnNjaGVkVHJpZ2dlcnMrKzsKIAogICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOnNjaGVkdWxlOmNhbGxiYWNrIiwgImFzc2lnbm1lbnQgIikpOwogICAgIERFQlVHTVNHT0lEKCgiZGlzbWFuOnNjaGVkdWxlOmNhbGxiYWNrIiwgZW50cnktPnNjaGVkVmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2NoZWRWYXJpYWJsZV9sZW4pKTsKLSAgICBERUJVR01TRygoICAgImRpc21hbjpzY2hlZHVsZTpjYWxsYmFjayIsICIgPSAlZFxuIiwgZW50cnktPnNjaGVkVmFsdWUpKTsKKyAgICBERUJVR01TRygoICAgImRpc21hbjpzY2hlZHVsZTpjYWxsYmFjayIsICIgPSAlbGRcbiIsIGVudHJ5LT5zY2hlZFZhbHVlKSk7CiAKICAgICBtZW1zZXQoJmFzc2lnbiwgMCwgc2l6ZW9mKG5ldHNubXBfdmFyaWFibGVfbGlzdCkpOwogICAgIHNubXBfc2V0X3Zhcl9vYmppZCgmYXNzaWduLCBlbnRyeS0+c2NoZWRWYXJpYWJsZSwgZW50cnktPnNjaGVkVmFyaWFibGVfbGVuKTsKQEAgLTg0LDEwICsxMDgsMTAgQEAKICAgICAgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzIHRvIGhlbHAgaW50ZXJwcmV0CiAgICAgICogIGNhbGVuZGFyLWJhc2VkIHNjaGVkdWxlIGJpdCBzdHJpbmdzCiAgICAgICovCi1zdGF0aWMgY2hhciBfbWFza3NbXSA9IHsgLyogMHhmZiwgKi8gMHg3ZiwgMHgzZiwgMHgxZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAweDBmLCAweDA3LCAweDAzLCAweDAxLCAweDAwIH07Ci1zdGF0aWMgY2hhciBfYml0c1tdICA9IHsgMHg4MCwgMHg0MCwgMHgyMCwgMHgxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4LCAweDA0LCAweDAyLCAweDAxIH07CitzdGF0aWMgdV9jaGFyIF9tYXNrc1tdID0geyAvKiAweGZmLCAqLyAweDdmLCAweDNmLCAweDFmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZiwgMHgwNywgMHgwMywgMHgwMSwgMHgwMCB9Oworc3RhdGljIHVfY2hhciBfYml0c1tdICA9IHsgMHg4MCwgMHg0MCwgMHgyMCwgMHgxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDEgfTsKIAogLyoKICAqIEFyZSBhbnkgb2YgdGhlIGJpdHMgc2V0PwpAQCAtMTQ2LDcgKzE3MCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIExvb2sgZm9yIHRoZSBmaXJzdCBiaXQgdGhhdCdzIHNldAogICAgICAgICAgKi8KLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKysgKSB7CisgICAgZm9yICggaT0wOyBpPChpbnQpbGVuOyBpKysgKSB7CiAgICAgICAgIGlmICggYnVmW2ldICE9IDAgKSB7CiAgICAgICAgICAgICBtYWpvciA9IGkqODsKICAgICAgICAgICAgIGZvciAoIGo9MDsgajw4OyBqKysgKSB7CkBAIC0xNjQsOSArMTg4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSwgMzAsIDMxLCAzMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMCwgMzEsIDMwLCAzMSwgMjkgfTsKIAotc3RhdGljIGNoYXIgX3RydW5jYXRlW10gPSB7IDB4ZmUsIDB4ZjAsIDB4ZmUsIDB4ZmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhmYywgMHhmZSwgMHhmZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZjLCAweGZlLCAweGZjLCAweGZlLCAweGY4IH07CitzdGF0aWMgdV9jaGFyIF90cnVuY2F0ZVtdID0geyAweGZlLCAweGYwLCAweGZlLCAweGZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhmYywgMHhmZSwgMHhmZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmMsIDB4ZmUsIDB4ZmMsIDB4ZmUsIDB4ZjggfTsKIAogLyoKICAqIFdoYXQgaXMgdGhlIG5leHQgZGF5IHdpdGggYSByZWxldmFudCBiaXQgc2V0PwpAQCAtMjM5LDIwICsyNjMsNiBAQAogfQogCiAKLSNpZm5kZWYgSEFWRV9MT0NBTFRJTUVfUgotc3RydWN0IHRtICoKLWxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KSB7Ci0gICAgc3RydWN0IHRtICp0bXA7Ci0KLSAgICB0bXAgPSBsb2NhbHRpbWUoIHRpbWVwICk7Ci0gICAgaWYgKCB0bXAgJiYgcmVzdWx0ICkgewotICAgICAgICBtZW1jcHkoIHJlc3VsdCwgdG1wLCBzaXplb2Yoc3RydWN0IHRtKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuICh0bXAgPyByZXN1bHQgOiBOVUxMICk7Ci19Ci0jZW5kaWYKLQogLyoKICAqIGRldGVybWluZSB0aGUgdGltZSBmb3IgdGhlIG5leHQgc2NoZWR1bGVkIGFjdGlvbiBvZiBhIGdpdmVuIGVudHJ5CiAgKi8KQEAgLTI5MSwxNiArMzAxLDE1IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZW50cnktPnNjaGVkTmV4dFJ1biA9IG5vdyArIGVudHJ5LT5zY2hlZEludGVydmFsOwogICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6dGltZSIsICJwZXJpb2RpYzogKCVkKSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNjaGVkTmV4dFJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOworICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAicGVyaW9kaWM6ICglbGQpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGVudHJ5LT5zY2hlZE5leHRSdW4sIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU0NIRURfVFlQRV9PTkVTSE9UOgogICAgICAgICBpZiAoIGVudHJ5LT5zY2hlZExhc3RSdW4gKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAib25lLXNob3Q6IGV4cGlyZWQgKCVkKSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNjaGVkTmV4dFJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpzY2hlZHVsZTp0aW1lIiwgIm9uZS1zaG90OiBleHBpcmVkICglbGQpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBlbnRyeS0+c2NoZWROZXh0UnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY3RpbWUoJmVudHJ5LT5zY2hlZE5leHRSdW4pKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KQEAgLTMzNyw4ICszNDYsOCBAQAogICAgICAgICAgKiAgICB0aGUgZmlyc3Qgc3BlY2lmaWVkIGRheSAoaW4gdGhhdCBtb250aCkKICAgICAgICAgICovCiAKLSAgICAgICAgbG9jYWx0aW1lX3IoICZub3csICZub3dfdG0gKTsKLSAgICAgICAgbG9jYWx0aW1lX3IoICZub3csICZuZXh0X3RtICk7CisgICAgICAgICh2b2lkKSBsb2NhbHRpbWVfciggJm5vdywgJm5vd190bSApOworICAgICAgICAodm9pZCkgbG9jYWx0aW1lX3IoICZub3csICZuZXh0X3RtICk7CiAKICAgICAgICAgbmV4dF90bS50bV9tb249LTE7CiAgICAgICAgIG5leHRfdG0udG1fbWRheT0tMTsKQEAgLTQxNCwxMyArNDIzLDEyIEBACiAgICAgICAgICAqICduZXh0X3RtJyBub3cgY29udGFpbnMgdGhlIHRpbWUgZm9yIHRoZSBuZXh0IHNjaGVkdWxlZCBydW4KICAgICAgICAgICovCiAgICAgICAgIGVudHJ5LT5zY2hlZE5leHRSdW4gPSBta3RpbWUoICZuZXh0X3RtICk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6dGltZSIsICJjYWxlbmRhcjogKCVkKSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNjaGVkTmV4dFJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOworICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAiY2FsZW5kYXI6ICglbGQpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGVudHJ5LT5zY2hlZE5leHRSdW4sIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBkZWZhdWx0OgotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAidW5rbm93biB0eXBlICglZClcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6dGltZSIsICJ1bmtub3duIHR5cGUgKCVsZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2NoZWRUeXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MzAsMTEgKzQzOCwxMyBAQAogICAgIHJldHVybjsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NDSEVEX05FWFRST1dUSU1FCiB2b2lkCiBzY2hlZF9uZXh0Um93VGltZSggbmV0c25tcF90ZGF0YV9yb3cgKnJvdyApCiB7CiAgICAgc2NoZWRfbmV4dFRpbWUoKHN0cnVjdCBzY2hlZFRhYmxlX2VudHJ5ICopIHJvdy0+ZGF0YSApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0NIRURfTkVYVFJPV1RJTUUgKi8KIAogLyoKICAqIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMKaW5kZXggYjhlMzZkNy4uYmJhNDhmZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jCkBAIC03LDEyICs3LDI3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmgiCiAjaW5jbHVkZSAiZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5X3BkdV9zZXNzaW9uKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3VpbnQpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisKIC8qKiBJbml0aWFsaXplcyB0aGUgc2NoZWRUYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfc2NoZWRUYWJsZSh2b2lkKQpAQCAtMjAsNyArMzUsNiBAQAogICAgIHN0YXRpYyBvaWQgICAgICBzY2hlZFRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA2MywgMSwgMiB9OwogICAgIHNpemVfdCAgICAgICAgICBzY2hlZFRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKHNjaGVkVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6aW5pdCIsICJJbml0aWFsaXppbmcgdGFibGVcbiIpKTsKICAgICAvKgpAQCAtNDgsNiArNjIsMTQgQEAKICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgc2NoZWR1bGVfdGFibGUsIHRhYmxlX2luZm8pOwogfQogCit2b2lkCitzaHV0ZG93bl9zY2hlZFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjaGVkVGFibGUgdGFibGUgKi8KIGludApAQCAtMTY1LDcgKzE4Nyw3IEBACiAgICAgICAgICAgICAgICAgICogQ29udmVydCAnc2NoZWRMYXN0RmFpbGVkJyB0aW1lc3RhbXAKICAgICAgICAgICAgICAgICAgKiAgIGludG8gRGF0ZUFuZFRpbWUgc3RyaW5nCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY3AgPSBkYXRlX25fdGltZSggJmVudHJ5LT5zY2hlZExhc3RGYWlsZWQsICZsZW4gKTsKKyAgICAgICAgICAgICAgICBjcCA9IChjaGFyICopIGRhdGVfbl90aW1lKCAmZW50cnktPnNjaGVkTGFzdEZhaWxlZCwgJmxlbiApOwogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwLCBsZW4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgKaW5kZXggZWZkMWYyZS4uNTIwMzNiYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5oCkBAIC04LDYgKzgsNyBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9zY2hlZFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjaGVkVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY2hlZFRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jCmluZGV4IDQyZjI0ZGMuLmI5MjVjNWUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jCkBAIC0xOCwxMCArMTgsMTUgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAjaW5jbHVkZSAidHJhY2VSb3V0ZUN0bFRhYmxlLmgiCiAjaW5jbHVkZSAidHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5oIgogI2luY2x1ZGUgInRyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5oIgpAQCAtNDEsMzEgKzQ2LDU2IEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KIAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgM319LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRBUkdFVEFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgNH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTEJZUEFTU1JPVVRFVEFCTEUsICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTERBVEFTSVpFLCAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVElNRU9VVCwgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDd9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExQUk9CRVNQRVJIT1AsIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgOH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFBPUlQsICAgICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA5fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMTUFYVFRMLCAgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDEwfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMRFNGSUVMRCwgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDExfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMU09VUkNFQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxMn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFNPVVJDRUFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTN9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExJRklOREVYLCAgICAgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTR9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNSVNDT1BUSU9OUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTV9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNQVhGQUlMVVJFUywgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTZ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExET05URlJBR01FTlQsICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTd9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExJTklUSUFMVFRMLCAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTh9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExGUkVRVUVOQ1ksICAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTl9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExTVE9SQUdFVFlQRSwgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjB9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExBRE1JTlNUQVRVUywgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjF9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExERVNDUiwgICAgICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjJ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNQVhST1dTLCAgICAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjN9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExUUkFQR0VORVJBVElPTiwgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMQ1JFQVRFSE9QU0VOVFJJRVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyNX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRZUEUsICAgICAgICBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyNn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFJPV1NUQVRVUywgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyN319CisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMQllQQVNTUk9VVEVUQUJMRSwgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMREFUQVNJWkUsICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExUSU1FT1VULCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFBST0JFU1BFUkhPUCwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMUE9SVCwgICAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDl9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNQVhUVEwsICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTB9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExEU0ZJRUxELCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTF9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExTT1VSQ0VBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDEyfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMU09VUkNFQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxM319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTElGSU5ERVgsICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxNH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTE1JU0NPUFRJT05TLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxNX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTE1BWEZBSUxVUkVTLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxNn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTERPTlRGUkFHTUVOVCwgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxN319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTElOSVRJQUxUVEwsICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxOH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTEZSRVFVRU5DWSwgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxOX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFNUT1JBR0VUWVBFLCAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyMH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTEFETUlOU1RBVFVTLCAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyMX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTERFU0NSLCAgICAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyMn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTE1BWFJPV1MsICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyM319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRSQVBHRU5FUkFUSU9OLCAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjR9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExDUkVBVEVIT1BTRU5UUklFUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI1fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVFlQRSwgICAgICAgIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI2fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMUk9XU1RBVFVTLCAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI3fX0KIAogfTsKIApAQCAtMTI2LDcgKzE1Niw4IEBACiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCi0gICAgYnplcm8oaG9zdCwgc2l6ZW9mKGNoYXIpICogKGl0ZW0tPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzTGVuICsgMSkpOworICAgIG1lbXNldChob3N0LCAnXDAnLAorCSAgIHNpemVvZihjaGFyKSAqIChpdGVtLT50cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzc0xlbiArIDEpKTsKICAgICBzdHJjcHkoaG9zdCwgaXRlbS0+dHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MpOwogICAgIGhvc3RbaXRlbS0+dHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3NMZW5dID0gJ1wwJzsKIApAQCAtMjE5LDcgKzI1MCw3IEBACiAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CiAgICAgICAgIC8qIHN0cnVjdCBob3N0ZW52IGhwOyAqLwogICAgICAgICBjaGFyICAgICAgICAgICAgcGFbNjRdOwotICAgICAgICBiemVybyhwYSwgNjQpOworICAgICAgICBtZW1zZXQocGEsICdcMCcsIDY0KTsKIAogICAgICAgICB0by0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKICAgICAgICAgdG8tPnNpbjZfcG9ydCA9IGh0b25zKDMzNDM0KTsKQEAgLTIzNCw3ICsyNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwogICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBiemVybyhTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwKKyAgICAgICAgICAgIG1lbXNldChTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwgJ1wwJywKICAgICAgICAgICAgICAgICAgIHNpemVvZihjaGFyKSAqIChzdHJsZW4oaG9zdCkgKyAxKSk7CiAgICAgICAgICAgICBtZW1jcHkoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZVJlc3VsdHNJcFRndEFkZHIsIGhvc3QsCiAgICAgICAgICAgICAgICAgICAgc3RybGVuKGhvc3QpICsgMSk7CkBAIC0yNTUsNyArMjg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7CiAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJ6ZXJvKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVSZXN1bHRzSXBUZ3RBZGRyLAorICAgICAgICAgICAgICAgIG1lbXNldChTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwgJ1wwJywKICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2hhcikgKiAoc3RybGVuKGhvc3QpICsgMSkpOwogICAgICAgICAgICAgICAgIG1lbWNweShTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwgaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihob3N0bmFtZSkgKyAxKTsKQEAgLTY5Miw3ICs3MjMsNyBAQAogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4LCB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsT3duZXJJbmRleExlbik7ICAgLyogdHJhY2VSb3V0ZUN0bE93bmVySW5kZXggKi8KICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsVGVzdE5hbWUsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZUxlbik7ICAgICAgIC8qIHRyYWNlUm91dGVDdGxPcGVyYXRpb25OYW1lICovCiAKLSAgICBiemVybyhuZXdvaWQsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOworICAgIG1lbXNldChuZXdvaWQsICdcMCcsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOwogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKIAogICAgIGZvciAoaGNpbGFzdCA9IGhjaXB0cjIgPSB0cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGVTdG9yYWdlOwpAQCAtMTMyNiw3ICsxMzU3LDcgQEAKICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bE93bmVySW5kZXhMZW4pOyAgIC8qIHRyYWNlUm91dGVDdGxPd25lckluZGV4ICovCiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bFRlc3ROYW1lLCB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsVGVzdE5hbWVMZW4pOyAgICAgICAvKiB0cmFjZVJvdXRlQ3RsVGVzdE5hbWUgKi8KIAotICAgIGJ6ZXJvKG5ld29pZCwgc2l6ZW9mKG9pZCkgKiBNQVhfT0lEX0xFTik7CisgICAgbWVtc2V0KG5ld29pZCwgJ1wwJywgc2l6ZW9mKG9pZCkgKiBNQVhfT0lEX0xFTik7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOwogCiAgICAgZm9yIChoY2lwdHIyID0gdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZVN0b3JhZ2U7IGhjaXB0cjIgIT0gTlVMTDsKQEAgLTEzNTcsNyArMTM4OCw3IEBACiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bE93bmVySW5kZXgsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4TGVuKTsgICAvKiB0cmFjZVJvdXRlQ3RsT3duZXJJbmRleCAqLwogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZSwgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bFRlc3ROYW1lTGVuKTsgICAgICAgLyogdHJhY2VSb3V0ZUN0bE9wZXJhdGlvbk5hbWUgKi8KIAotICAgIGJ6ZXJvKG5ld29pZCwgc2l6ZW9mKG9pZCkgKiBNQVhfT0lEX0xFTik7CisgICAgbWVtc2V0KG5ld29pZCwgJ1wwJywgc2l6ZW9mKG9pZCkgKiBNQVhfT0lEX0xFTik7CiAKICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwgTlVMTCwgMCwgdmFycyk7CiAKQEAgLTEzODgsNyArMTQxOSw3IEBACiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bE93bmVySW5kZXgsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4TGVuKTsgICAvKiB0cmFjZVJvdXRlQ3RsT3duZXJJbmRleCAqLwogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZSwgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bFRlc3ROYW1lTGVuKTsgICAgICAgLyogdHJhY2VSb3V0ZUN0bFRlc3ROYW1lICovCiAKLSAgICBiemVybyhuZXdvaWQsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOworICAgIG1lbXNldChuZXdvaWQsICdcMCcsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOwogCiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOwogCkBAIC0xNDQ3LDcgKzE0NzgsNyBAQAogICAgIC8qCiAgICAgICogdHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MgCiAgICAgICovCi0gICAgYnplcm8obmV3b2lkLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKKyAgICBtZW1zZXQobmV3b2lkLCAnXDAnLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzcykgLwpAQCAtMTQ2MSw3ICsxNDkyLDcgQEAKIAogICAgIGZvciAoaGNpcHRyID0gdHJhY2VSb3V0ZUhvcHNUYWJsZVN0b3JhZ2U7IGhjaXB0ciAhPSBOVUxMOwogICAgICAgICAgaGNpcHRyID0gaGNpcHRyLT5uZXh0KSB7Ci0gICAgICAgIGJ6ZXJvKGluZGV4b2lkLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKKwltZW1zZXQoaW5kZXhvaWQsICdcMCcsIE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOwogICAgICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQoaW5kZXhvaWQsICZpbmRleG9pZF9sZW4sIE5VTEwsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzKTsKICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUKQEAgLTE0NzAsMTMgKzE1MDEsMTMgQEAKICAgICAgICAgICAgICAgICAoc3RydWN0IHRyYWNlUm91dGVIb3BzVGFibGVfZGF0YSAqKQogICAgICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldF9mcm9tX29pZCh0cmFjZVJvdXRlSG9wc1RhYmxlU3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGNpcHRyLT5uYW1lLCBoY2lwdHItPm5hbWVsZW4pOwotICAgICAgICAgICAgYnplcm8odGVtcG9pZCwgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBtZW1zZXQodGVtcG9pZCwgJ1wwJywgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CiAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQodGVtcG9pZCwgJnRlbXBvaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlUm91dGVIb3BzSXBUZ0FkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRyYWNlUm91dGVIb3BzSXBUZ0FkZHJlc3MpIC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSwgdmFycyk7CiAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJfaG9wcywgTlVMTCwgMCwgQVNOX1VOU0lHTkVELCAoY2hhciAqKSAmU3RvcmFnZUhvcHMtPnRyYWNlUm91dGVIb3BzSG9wSW5kZXgsIHNpemVvZihTdG9yYWdlSG9wcy0+dHJhY2VSb3V0ZUhvcHNIb3BJbmRleCkpOyAgICAvKiB0cmFjZVJvdXRlQ3RsVGVzdE5hbWUgKi8KLSAgICAgICAgICAgIGJ6ZXJvKG5ld29pZCwgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBtZW1zZXQobmV3b2lkLCAnXDAnLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCB0ZW1wb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvaWRfbGVuLCB2YXJfaG9wcyk7CiAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJfbGlzdCwgbmV3b2lkLCBuZXdvaWRfbGVuLApAQCAtMTU4MCw2ICsxNjExLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE2NjgsOCArMTcwMCw2IEBACiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzKTsKLSAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MgPSBOVUxMOwotCiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzID0gdG1wdmFyOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzc0xlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0xNjgxLDcgKzE3MTEsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTc2Myw2ICsxNzkzLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE4NDcsNiArMTg3OCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xOTM0LDYgKzE5NjYsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjAyMyw2ICsyMDU2LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIxMDIsNyArMjEzNiw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIxODksNiArMjIyMyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yMjcwLDYgKzIzMDUsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjM1MSw2ICsyMzg3LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI0MzUsNyArMjQ3Miw2IEBACiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxTb3VyY2VBZGRyZXNzKTsKLSAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFNvdXJjZUFkZHJlc3MgPSBOVUxMOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsU291cmNlQWRkcmVzcyA9IHRtcHZhcjsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFNvdXJjZUFkZHJlc3NMZW4gPSB0bXBsZW47CiAgICAgICAgIGJyZWFrOwpAQCAtMjQ0Nyw3ICsyNDgzLDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKLSAgICAgICAgdG1wdmFyID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI1MzEsNiArMjU2Nyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNjE2LDcgKzI2NTMsNiBAQAogICAgICAgICAgKiBCYWNrIG91dCBhbnkgY2hhbmdlcyBtYWRlIGluIHRoZSBBQ1RJT04gY2FzZSAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsTWlzY09wdGlvbnMpOwotICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsTWlzY09wdGlvbnMgPSBOVUxMOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsTWlzY09wdGlvbnMgPSB0bXB2YXI7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxNaXNjT3B0aW9uc0xlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0yNjI4LDcgKzI2NjQsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjcxMiw2ICsyNzQ4LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI3OTcsNiArMjgzNCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yODgzLDYgKzI5MjEsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjk2NCw2ICszMDAzLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTMwNTcsNiArMzA5Nyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zMTczLDYgKzMyMTQsNyBAQAogICAgICAgICAgICAgICAgIG1vZGlmeV90clJlc3VsdHNPcGVyKFN0b3JhZ2VUbXAsIDIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zMjYwLDcgKzMzMDIsNiBAQAogICAgICAgICAgKiBCYWNrIG91dCBhbnkgY2hhbmdlcyBtYWRlIGluIHRoZSBBQ1RJT04gY2FzZSAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsRGVzY3IpOwotICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsRGVzY3IgPSBOVUxMOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsRGVzY3IgPSB0bXB2YXI7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxEZXNjckxlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjcyLDcgKzMzMTMsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzM1Nyw2ICszMzk4LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM0NDIsNyArMzQ4NCw2IEBACiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUcmFwR2VuZXJhdGlvbik7Ci0gICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUcmFwR2VuZXJhdGlvbiA9IE5VTEw7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUcmFwR2VuZXJhdGlvbiA9IHRtcHZhcjsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFRyYXBHZW5lcmF0aW9uTGVuID0gdG1wbGVuOwogICAgICAgICBicmVhazsKQEAgLTM0NTQsNyArMzQ5NSw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7Ci0gICAgICAgIHRtcHZhciA9IE5VTEw7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNTM2LDYgKzM1NzcsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzYxNyw3ICszNjU5LDYgQEAKICAgICAgICAgICogQmFjayBvdXQgYW55IGNoYW5nZXMgbWFkZSBpbiB0aGUgQUNUSU9OIGNhc2UgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFR5cGUpOwotICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVHlwZSA9IE5VTEw7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUeXBlID0gdG1wdmFyOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVHlwZUxlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0zNjI5LDcgKzM2NzAsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzk5NCw2ICs0MDM1LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC00MDkzLDExICs0MTM1LDcgQEAKICAgICAgICAgZnJlZWhvc3RpbmZvKGhpKTsKIAogCi0jaWZkZWYgSEFWRV9TRVRMSU5FQlVGCi0gICAgICAgIHNldGxpbmVidWYoc3Rkb3V0KTsKLSNlbHNlCi0gICAgICAgIHNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9MQkYsIDApOwotI2VuZGlmCisgICAgICAgIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKHN0ZG91dCk7CiAKICAgICAgICAgb3V0aXAgPSAoc3RydWN0IGlwICopIG1hbGxvYyhwYWNrbGVuKTsKICAgICAgICAgaWYgKG91dGlwID09IE5VTEwpIHsKQEAgLTQ5MzksNyArNDk3Nyw3IEBACiAKICAgICAgICAgc2V0bGluZWJ1ZihzdGRvdXQpOwogCi0gICAgICAgICh2b2lkKSBiemVybygoY2hhciAqKSAmd2hlcmV0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgbWVtc2V0KCZ3aGVyZXRvLCAnXDAnLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwogCiAgICAgICAgIHRvLT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwogICAgICAgICB0by0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CkBAIC01MDM2LDcgKzUwNzQsNyBAQAogICAgICAgICAgICAgc2FkZHIuc2luNl9wb3J0ID0gMDsKICAgICAgICAgICAgIGNsb3NlKHByb2JlX2ZkKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICh2b2lkKSBiemVybygoY2hhciAqKSAmc2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgICAgICAgICBtZW1zZXQoJnNhZGRyLCAnXDAnLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwogICAgICAgICAgICAgc2FkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKICAgICAgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHNvdXJjZSwgJnNhZGRyLnNpbjZfYWRkcikgPCAwKSB7CiAgICAgICAgICAgICAgICAgUHJpbnRmKCJ0cmFjZXJvdXRlOiB1bmtub3duIGFkZHIgJXNcbiIsIHNvdXJjZSk7CkBAIC01OTQxLDcgKzU5NzksNyBAQAogICAgICAgICByZXR1cm4gKGhpKTsKICAgICB9CiAKLSAgICBocCA9IGdldGhvc3RieW5hbWUoaG9zdG5hbWUpOworICAgIGhwID0gbmV0c25tcF9nZXRob3N0YnluYW1lKGhvc3RuYW1lKTsKICAgICBpZiAoaHAgPT0gTlVMTCkgewogICAgICAgICBGcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIGhvc3QgJXNcbiIsICJ0cmFjZXJvdXRlIiwgaG9zdG5hbWUpOwogICAgICAgICBwcmludGYoImhwPU5VTExcbiIpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaAppbmRleCAwYmU4ZGM0Li4wNzExOTc4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaApAQCAtNTI1LDcgKzUyNSw3IEBACiAjZGVmaW5lIEZEX1NFVChuLCBwKSAgICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gfD0gKDEgPDwgKChuKSAlIE5GREJJVFMpKSkKICNkZWZpbmUgRkRfQ0xSKG4sIHApICAgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmPSB+KDEgPDwgKChuKSAlIE5GREJJVFMpKSkKICNkZWZpbmUgRkRfSVNTRVQobiwgcCkgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmICgxIDw8ICgobikgJSBORkRCSVRTKSkpCi0jZGVmaW5lIEZEX1pFUk8ocCkgICAgICBiemVybygoY2hhciAqKShwKSwgc2l6ZW9mKCoocCkpKQorI2RlZmluZSBGRF9aRVJPKHApICAgICAgbWVtc2V0KChwKSwgJ1wwJywgc2l6ZW9mKCoocCkpKQogI2VuZGlmCiAKICNkZWZpbmUgRnByaW50ZiAodm9pZClmcHJpbnRmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMKaW5kZXggMjk2ZGQ1My4uNzYzNzU3ZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYwpAQCAtNDAsMTUgKzQwLDI0IEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MSwgMSwgNSB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIHRyYWNlUm91dGVIb3BzVGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0lQVEdUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAyfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0lQVEdUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU01JTlJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU01BWFJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0FWRVJBR0VSVFQsICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1JUVFNVTU9GU1FVQVJFUywgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1NFTlRQUk9CRVMsICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA4fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1BST0JFUkVTUE9OU0VTLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA5fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0xBU1RHT09EUFJPQkUsICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAxMH19CisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0lQVEdUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0lQVEdUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU01JTlJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU01BWFJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0FWRVJBR0VSVFQsICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1JUVFNVTU9GU1FVQVJFUywgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA3fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1NFTlRQUk9CRVMsICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1BST0JFUkVTUE9OU0VTLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA5fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0xBU1RHT09EUFJPQkUsICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAxMH19CiB9OwogCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMKaW5kZXggZjNiN2NlNi4uMGI0MTBjNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMKQEAgLTM5LDEyICszOSwxOCBAQAogICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgODEsIDEsIDQgfTsKIAogc3RydWN0IHZhcmlhYmxlMiB0cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZSEFERFJUWVBFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZSEFERFIsICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZUkVTUE9OU0UsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZU1RBVFVTLCAgICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZTEFTVFJDLCAgICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA4fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZVElNRSwgICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA5fX0KKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllIQUREUlRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllIQUREUiwgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllSRVNQT05TRSwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllTVEFUVVMsICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllMQVNUUkMsICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDh9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllUSU1FLCAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDl9fQogfTsKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMKaW5kZXggZDU2MmFkYy4uYWJhNmNmMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYwpAQCAtMTgsNiArMTgsOCBAQAogCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC00MCw2ICs0Miw4IEBACiAjaW5jbHVkZSAidHJhY2VSb3V0ZUhvcHNUYWJsZS5oIgogI2luY2x1ZGUgImhlYWRlcl9jb21wbGV4LmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCisKIC8qCiAgKnRyYWNlUm91dGVSZXN1bHRzVGFibGVfdmFyaWFibGVzX29pZDoKICAqCkBAIC00OCwxNCArNTIsMjIgQEAKICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgxLCAxLCAzIH07CiAKIHN0cnVjdCB2YXJpYWJsZTIgdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTT1BFUlNUQVRVUywgICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCAxfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0NVUkhPUENPVU5ULCAgICAgIEFTTl9HQVVHRSwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgMn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNDVVJQUk9CRUNPVU5ULCAgICBBU05fR0FVR0UsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTSVBUR1RBRERSVFlQRSwgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0lQVEdUQUREUiwgICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNURVNUQVRURU1QVFMsICBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDZ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTVEVTVFNVQ0NFU1NFUywgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0xBU1RHT09EUEFUSCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgOH19CisgICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU09QRVJTVEFUVVMsICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgMX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNDVVJIT1BDT1VOVCwgICAgICBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTQ1VSUFJPQkVDT1VOVCwgICAgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0lQVEdUQUREUlRZUEUsICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNJUFRHVEFERFIsICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTVEVTVEFUVEVNUFRTLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU1RFU1RTVUNDRVNTRVMsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNMQVNUR09PRFBBVEgsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDh9fQogfTsKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0ZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIuaApAQCAtMCwwICsxLDcgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUpCitjb25maWdfYWRkX21pYihFdGhlckxpa2UtTUlCKQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0cy5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJiNDRmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHMuaApAQCAtMCwwICsxLDcgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorY29uZmlnX3JlcXVpcmUoZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYjY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jCkBAIC0wLDAgKzEsOTMwIEBACisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmgiCisjaW5jbHVkZSAiZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorI2luY2x1ZGUgImV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oIgorCisvKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGdldGlmYWRkcnMgZmFpbGVkIAorICogQHJldHZhbCAtMiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworCitzdHJ1Y3QgaWZuYW1lICoKK2RvdDNzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2dldCAoc3RydWN0IGlmbmFtZSAqbGlzdF9oZWFkLCBpbnQgKnJldHZhbCkKK3sKKyAgICBzdHJ1Y3QgaWZhZGRycyAqYWRkcnMgPSBOVUxMLCAqcCA9IE5VTEw7CisgICAgc3RydWN0IGlmbmFtZSAqbmFtZXB0cjE9TlVMTCwgKm5hbWVwdHIyID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoZ2V0aWZhZGRycygmYWRkcnMpKSA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2dldCIsCisgICAgICAgICAgICAgICAgICAgICJnZXRpZmFkZHJzIGZhaWxlZFxuIikpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSxpbnRlcmZhY2VfbmFtZV9saXN0X2dldCwgZ2V0aWZhZGRycyBmYWlsZWRcbiIpOworICAgICAgICAqcmV0dmFsID0gLTE7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvciAocCA9IGFkZHJzOyBwOyBwID0gcC0+aWZhX25leHQpIHsKKworICAgICAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICAgICAgbGlzdF9oZWFkID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgICAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSxpbnRlcmZhY2VfbmFtZV9saXN0X2dldCwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICBmcmVlaWZhZGRycyhhZGRycyk7CisgICAgICAgICAgICAgICAgKnJldHZhbCA9IC0yOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtc2V0KGxpc3RfaGVhZCwgMCwgc2l6ZW9mIChzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgICAgICBzdHJsY3B5KGxpc3RfaGVhZC0+bmFtZSwgcC0+aWZhX25hbWUsIElGX05BTUVTSVpFKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgIGZvciAobmFtZXB0cjEgPSBsaXN0X2hlYWQ7IG5hbWVwdHIxOyBuYW1lcHRyMiA9IG5hbWVwdHIxLCBuYW1lcHRyMSA9IG5hbWVwdHIxLT5pZm5fbmV4dCkKKyAgICAgICAgICAgIGlmICghc3RybmNtcChwLT5pZmFfbmFtZSwgbmFtZXB0cjEtPm5hbWUsIElGX05BTUVTSVpFKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAobmFtZXB0cjEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBuYW1lcHRyMi0+aWZuX25leHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZm5hbWUpKTsKKyAgICAgICAgaWYgKCFuYW1lcHRyMi0+aWZuX25leHQpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIikpOworICAgICAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICBkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIChsaXN0X2hlYWQpOworICAgICAgICAgICAgZnJlZWlmYWRkcnMoYWRkcnMpOworICAgICAgICAgICAgKnJldHZhbCA9IC0yOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbmFtZXB0cjIgPSBuYW1lcHRyMi0+aWZuX25leHQ7CisgICAgICAgIG1lbXNldChuYW1lcHRyMiwgMCwgc2l6ZW9mIChzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgIHN0cmxjcHkobmFtZXB0cjItPm5hbWUsIHAtPmlmYV9uYW1lLCBJRl9OQU1FU0laRSk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgfQorCisgICAgZnJlZWlmYWRkcnMoYWRkcnMpOworICAgIHJldHVybiBsaXN0X2hlYWQ7Cit9CisKKy8qCisgKiBAcmV0dmFsIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBpbnZhbGlkIHBvaW50ZXIKKyAqLworCitpbnQKK2RvdDNzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUgKHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCkKK3sKKyAgICBzdHJ1Y3QgaWZuYW1lICpuYW1lcHRyMSA9IE5VTEwsICpuYW1lcHRyMiA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlOiBpbnZhbGlkIHBvaW50ZXIgbGlzdF9oZWFkIik7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIiwKKyAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcG9pbnRlciBsaXN0X2hlYWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAobmFtZXB0cjEgPSBsaXN0X2hlYWQ7IG5hbWVwdHIxOyBuYW1lcHRyMSA9IG5hbWVwdHIyKSB7CisgICAgICAgICAgICBuYW1lcHRyMiA9IG5hbWVwdHIxLT5pZm5fbmV4dDsKKyAgICAgICAgICAgIGZyZWUgKG5hbWVwdHIxKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEByZXR2YWwgIDAgOiBub3QgZm91bmQKKyAqIEByZXR2YWwgITAgOiBpZkluZGV4CisgKi8KKworaW50IAorZG90M3N0YXRzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCAoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKSB7CisjaWZuZGVmIFNJT0NHSUZJTkRFWAorICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBzdHJ1Y3QgaWZyZXEgICAgaWZycTsKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQiLCAiY2FsbGVkXG4iKSk7CisgICAgICAgICAgICAgICAgIAorICAgIHJjID0gX2RvdDNTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NHSUZJTkRFWCwgJmlmcnEsIG5hbWUpOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAiZXJyb3Igb24gaW50ZXJmYWNlICclcydcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0LCBlcnJvciBvbiBpbnRlcmZhY2UgJyVzJ1xuIiwgbmFtZSk7CisgICAgICAgIHJldHVybiAwOworCisgICAgfQorCisgICAgcmV0dXJuIGlmcnEuaWZyX2lmaW5kZXg7CisjZW5kaWYgLyogU0lPQ0dJRklOREVYICovCit9CisKKyMgaWYgSEFWRV9MSU5VWF9SVE5FVExJTktfSCAvKiB7IE5FVExJTksgKi8KKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgdXBvbiBjb2RlIEkgZ290IGZyb20gU3RlcGhlbiBIZW1taW5nZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK3N0cnVjdCBydG5sX2hhbmRsZSB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZmQ7CisgICAgc3RydWN0IHNvY2thZGRyX25sICAgICAgbG9jYWw7CisgICAgc3RydWN0IHNvY2thZGRyX25sICAgICAgcGVlcjsKKyAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBzZXE7CisgICAgX191MzIgICAgICAgICAgICAgICAgICAgZHVtcDsKK307CisKK3N0cnVjdCBpZnN0YXRfZW50IHsKKyAgICBzdHJ1Y3QgaWZzdGF0X2VudCAqbmV4dDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGludCBpZmluZGV4OworICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHMgc3RhdHM7Cit9OworCit0eXBlZGVmIGludCAoKnJ0bmxfZmlsdGVyX3QpKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9ubCAqLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sIHZvaWQgKik7CisKK3N0cnVjdCBydG5sX2R1bXBfZmlsdGVyX2FyZworeworICAgIHJ0bmxfZmlsdGVyX3QgZmlsdGVyOworICAgIHZvaWQgKmFyZzE7CisgICAgcnRubF9maWx0ZXJfdCBqdW5rOworICAgIHZvaWQgKmFyZzI7Cit9OworCitzdGF0aWMgc3RydWN0IGlmc3RhdF9lbnQgKmtlcm5fZGI7CitzdGF0aWMgY29uc3QgaW50IHJjdmJ1Zl9zaXplID0gMTAyNCAqIDEwMjQ7CisKK3N0YXRpYyBpbnQKK3J0bmxfb3Blbl9ieXByb3RvKHN0cnVjdCBydG5sX2hhbmRsZSAqcnRoLCB1bnNpZ25lZCBzdWJzY3JpcHRpb25zLCBpbnQgcHJvdG9jb2wpCit7CisgICAgc29ja2xlbl90IGFkZHJfbGVuOworICAgIGludCBzbmRidWYgPSAzMjc2ODsKKworICAgIG1lbXNldChydGgsIDAsIHNpemVvZigqcnRoKSk7CisKKyAgICBydGgtPmZkID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXLCBwcm90b2NvbCk7CisgICAgaWYgKHJ0aC0+ZmQgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW5ub3Qgb3BlbiBuZXRsaW5rIHNvY2tldCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNldHNvY2tvcHQocnRoLT5mZCxTT0xfU09DS0VULFNPX1NOREJVRiwmc25kYnVmLHNpemVvZihzbmRidWYpKSA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlNPX1NOREJVRiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNldHNvY2tvcHQocnRoLT5mZCxTT0xfU09DS0VULFNPX1JDVkJVRiwmcmN2YnVmX3NpemUsc2l6ZW9mKHJjdmJ1Zl9zaXplKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTT19SQ1ZCVUYiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1lbXNldCgmcnRoLT5sb2NhbCwgMCwgc2l6ZW9mKHJ0aC0+bG9jYWwpKTsKKyAgICBydGgtPmxvY2FsLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgICAgcnRoLT5sb2NhbC5ubF9ncm91cHMgPSBzdWJzY3JpcHRpb25zOworCisgICAgaWYgKGJpbmQocnRoLT5mZCwgKHN0cnVjdCBzb2NrYWRkciopJnJ0aC0+bG9jYWwsIHNpemVvZihydGgtPmxvY2FsKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW5ub3QgYmluZCBuZXRsaW5rIHNvY2tldCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGFkZHJfbGVuID0gc2l6ZW9mKHJ0aC0+bG9jYWwpOworICAgIGlmIChnZXRzb2NrbmFtZShydGgtPmZkLCAoc3RydWN0IHNvY2thZGRyKikmcnRoLT5sb2NhbCwgJmFkZHJfbGVuKSA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNhbm5vdCBnZXRzb2NrbmFtZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChhZGRyX2xlbiAhPSBzaXplb2YocnRoLT5sb2NhbCkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIldyb25nIGFkZHJlc3MgbGVuZ3RoICVkXG4iLCBhZGRyX2xlbik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHJ0aC0+bG9jYWwubmxfZmFtaWx5ICE9IEFGX05FVExJTkspIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIldyb25nIGFkZHJlc3MgZmFtaWx5ICVkXG4iLCBydGgtPmxvY2FsLm5sX2ZhbWlseSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcnRoLT5zZXEgPSB0aW1lKE5VTEwpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitydG5sX29wZW4oc3RydWN0IHJ0bmxfaGFuZGxlICpydGgsIHVuc2lnbmVkIHN1YnNjcmlwdGlvbnMpCit7CisgICAgcmV0dXJuIHJ0bmxfb3Blbl9ieXByb3RvKHJ0aCwgc3Vic2NyaXB0aW9ucywgTkVUTElOS19ST1VURSk7Cit9CisKK3N0YXRpYyB2b2lkCitydG5sX2Nsb3NlKHN0cnVjdCBydG5sX2hhbmRsZSAqcnRoKQoreworICAgIGlmIChydGgtPmZkICE9IC0xKQorICAgICAgICBjbG9zZShydGgtPmZkKTsKKyAgICBydGgtPmZkID0gLTE7CisKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK3J0bmxfd2lsZGR1bXBfcmVxdWVzdChzdHJ1Y3QgcnRubF9oYW5kbGUgKnJ0aCwgaW50IGZhbWlseSwgaW50IHR5cGUpCit7CisgICAgc3RydWN0IHsKKyAgICAgICAgc3RydWN0IG5sbXNnaGRyIG5saDsKKyAgICAgICAgc3RydWN0IHJ0Z2VubXNnIGc7CisgICAgfSByZXE7CisKKyAgICBtZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworICAgIHJlcS5ubGgubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSk7CisgICAgcmVxLm5saC5ubG1zZ190eXBlID0gdHlwZTsKKyAgICByZXEubmxoLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUk9PVHxOTE1fRl9NQVRDSHxOTE1fRl9SRVFVRVNUOworICAgIHJlcS5ubGgubmxtc2dfcGlkID0gMDsKKyAgICByZXEubmxoLm5sbXNnX3NlcSA9IHJ0aC0+ZHVtcCA9ICsrcnRoLT5zZXE7CisgICAgcmVxLmcucnRnZW5fZmFtaWx5ID0gZmFtaWx5OworCisgICAgcmV0dXJuIHNlbmQocnRoLT5mZCwgKHZvaWQqKSZyZXEsIHNpemVvZihyZXEpLCAwKTsKK30KKworc3RhdGljIGludAorcGFyc2VfcnRhdHRyKHN0cnVjdCBydGF0dHIgKnRiW10sIGludCBtYXgsIHN0cnVjdCBydGF0dHIgKnJ0YSwgaW50IGxlbikKK3sKKyAgICBtZW1zZXQodGIsIDAsIHNpemVvZihzdHJ1Y3QgcnRhdHRyICopICogKG1heCArIDEpKTsKKyAgICB3aGlsZSAoUlRBX09LKHJ0YSwgbGVuKSkKKyAgICB7CisgICAgICAgIGlmIChydGEtPnJ0YV90eXBlIDw9IG1heCkKKyAgICAgICAgICAgIHRiW3J0YS0+cnRhX3R5cGVdID0gcnRhOworICAgICAgICBydGEgPSBSVEFfTkVYVChydGEsbGVuKTsKKyAgICB9CisKKyAgICBpZiAobGVuKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicGFyc2VfcnRhdHRyOiAhISFEZWZpY2l0ICVkLCBydGFfbGVuPSVkXG4iLCBsZW4sIHJ0YS0+cnRhX2xlbik7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0X25sbXNnKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9ubCAqd2hvLCBzdHJ1Y3Qgbmxtc2doZHIgKm0sIHZvaWQgKmFyZykKK3sKKyAgICBzdHJ1Y3QgaWZpbmZvbXNnICppZmkgPSBOTE1TR19EQVRBKG0pOworICAgIHN0cnVjdCBydGF0dHIgKiB0YltJRkxBX01BWCsxXTsKKyAgICBpbnQgbGVuID0gbS0+bmxtc2dfbGVuOworICAgIHN0cnVjdCBpZnN0YXRfZW50ICpuOworCisgICAgaWYgKG0tPm5sbXNnX3R5cGUgIT0gUlRNX05FV0xJTkspCisgICAgICAgIHJldHVybiAwOworCisgICAgbGVuIC09IE5MTVNHX0xFTkdUSChzaXplb2YoKmlmaSkpOworICAgIGlmIChsZW4gPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBwYXJzZV9ydGF0dHIodGIsIElGTEFfTUFYLCBJRkxBX1JUQShpZmkpLCBsZW4pOworICAgIGlmICh0YltJRkxBX0lGTkFNRV0gPT0gTlVMTCB8fCB0YltJRkxBX1NUQVRTXSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG4gPSBtYWxsb2Moc2l6ZW9mKCpuKSk7CisgICAgbWVtc2V0KG4sIDAsIHNpemVvZigqbikpOworCisgICAgbi0+aWZpbmRleCA9IGlmaS0+aWZpX2luZGV4OworICAgIG4tPm5hbWUgPSBzdHJkdXAoUlRBX0RBVEEodGJbSUZMQV9JRk5BTUVdKSk7CisgICAgbWVtY3B5KCZuLT5zdGF0cywgUlRBX0RBVEEodGJbSUZMQV9TVEFUU10pLCBzaXplb2Yobi0+c3RhdHMpKTsKKyAgICBuLT5uZXh0ID0ga2Vybl9kYjsKKyAgICBrZXJuX2RiID0gbjsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcnRubF9kdW1wX2ZpbHRlcl9sKHN0cnVjdCBydG5sX2hhbmRsZSAqcnRoLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBydG5sX2R1bXBfZmlsdGVyX2FyZyAqYXJnKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9ubCBubGFkZHI7CisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKKyAgICAgICAgLm1zZ19uYW1lID0gJm5sYWRkciwKKyAgICAgICAgLm1zZ19uYW1lbGVuID0gc2l6ZW9mKG5sYWRkciksCisgICAgICAgIC5tc2dfaW92ID0gJmlvdiwKKyAgICAgICAgLm1zZ19pb3ZsZW4gPSAxLAorICAgIH07CisgICAgY2hhciBidWZbMTYzODRdOworCisgICAgaW92Lmlvdl9iYXNlID0gYnVmOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGludCBzdGF0dXM7CisgICAgICAgIGNvbnN0IHN0cnVjdCBydG5sX2R1bXBfZmlsdGVyX2FyZyAqYTsKKworICAgICAgICBpb3YuaW92X2xlbiA9IHNpemVvZihidWYpOworICAgICAgICBzdGF0dXMgPSByZWN2bXNnKHJ0aC0+ZmQsICZtc2csIDApOworCisgICAgICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJuZXRsaW5rIHJlY2VpdmUgZXJyb3IgJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0dXMgPT0gMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFT0Ygb24gbmV0bGlua1xuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGEgPSBhcmc7IGEtPmZpbHRlcjsgYSsrKSB7CisgICAgICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKmggPSAoc3RydWN0IG5sbXNnaGRyKilidWY7CisKKyAgICAgICAgICAgIHdoaWxlIChOTE1TR19PSyhoLCBzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgaW50IGVycjsKKworICAgICAgICAgICAgICAgIGlmIChubGFkZHIubmxfcGlkICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIGgtPm5sbXNnX3BpZCAhPSBydGgtPmxvY2FsLm5sX3BpZCB8fAorICAgICAgICAgICAgICAgICAgICAgaC0+bmxtc2dfc2VxICE9IHJ0aC0+ZHVtcCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYS0+anVuaykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gYS0+anVuaygmbmxhZGRyLCBoLCBhLT5hcmcyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBza2lwX2l0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0RPTkUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBubG1zZ2VyciAqZXJyID0gKHN0cnVjdCBubG1zZ2VyciopTkxNU0dfREFUQShoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGgtPm5sbXNnX2xlbiA8IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IG5sbXNnZXJyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgdHJ1bmNhdGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gLWVyci0+ZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoIlJUTkVUTElOSyBhbnN3ZXJzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlcnIgPSBhLT5maWx0ZXIoJm5sYWRkciwgaCwgYS0+YXJnMSk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisKK3NraXBfaXQ6CisgICAgICAgICAgICAgICAgaCA9IE5MTVNHX05FWFQoaCwgc3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoMCk7CisgICAgICAgIGlmIChtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk1lc3NhZ2UgdHJ1bmNhdGVkXG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiISEhUmVtbmFudCBvZiBzaXplICVkXG4iLCBzdGF0dXMpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludAorcnRubF9kdW1wX2ZpbHRlcihzdHJ1Y3QgcnRubF9oYW5kbGUgKnJ0aCwKKyAgICAgICAgICAgICAgICAgcnRubF9maWx0ZXJfdCBmaWx0ZXIsCisgICAgICAgICAgICAgICAgIHZvaWQgKmFyZzEsCisgICAgICAgICAgICAgICAgIHJ0bmxfZmlsdGVyX3QganVuaywKKyAgICAgICAgICAgICAgICAgdm9pZCAqYXJnMikKK3sKKyAgICBjb25zdCBzdHJ1Y3QgcnRubF9kdW1wX2ZpbHRlcl9hcmcgYVsyXSA9IHsKKyAgICAgICAgeyAuZmlsdGVyID0gZmlsdGVyLCAuYXJnMSA9IGFyZzEsIC5qdW5rID0ganVuaywgLmFyZzIgPSBhcmcyIH0sCisgICAgICAgIHsgLmZpbHRlciA9IE5VTEwsICAgLmFyZzEgPSBOVUxMLCAuanVuayA9IE5VTEwsIC5hcmcyID0gTlVMTCB9CisgICAgfTsKKworICAgIHJldHVybiBydG5sX2R1bXBfZmlsdGVyX2wocnRoLCBhKTsKK30KKworaW50CitfZG90M1N0YXRzX25ldGxpbmtfZ2V0X2Vycm9yY250cnMoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzdHJ1Y3QgcnRubF9oYW5kbGUgcnRoOworICAgIHN0cnVjdCBpZnN0YXRfZW50ICprZTsKKyAgICBpbnQgZG9uZTsKKworICAgIGlmIChydG5sX29wZW4oJnJ0aCwgMCkgPCAwKQorICAgIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIl9kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRyczogcnRubF9vcGVuKCkgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYgKHJ0bmxfd2lsZGR1bXBfcmVxdWVzdCgmcnRoLCBBRl9JTkVULCBSVE1fR0VUTElOSykgPCAwKQorICAgIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIl9kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRyczogQ2Fubm90IHNlbmQgZHVtcCByZXF1ZXN0Iik7CisgICAgICAgIHJ0bmxfY2xvc2UoJnJ0aCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChydG5sX2R1bXBfZmlsdGVyKCZydGgsIGdldF9ubG1zZywgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKQorICAgIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIl9kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRyczogRHVtcCB0ZXJtaW5hdGVkXG4iKTsKKyAgICAgICAgcnRubF9jbG9zZSgmcnRoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcnRubF9jbG9zZSgmcnRoKTsKKworICAgIC8qCisgICAgICogTm93IHNjYW4ga2Vybl9kYiBmb3IgdGhpcyBpZidzIGRhdGEKKyAgICAgKiBXaGlsZSBkb2luZyBzbywgd2UnbGwgdGhyb3cgYXdheSB0aGUga2VybiBkYi4KKyAgICAgKi8KKyAgICBkb25lID0gMDsKKworICAgIHdoaWxlICgoa2UgPSBrZXJuX2RiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChrZS0+bmFtZSwgbmFtZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfZGF0YSAqZGF0YSA9ICZyb3dyZXFfY3R4LT5kYXRhOworCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlIiwgIklGTEFfU1RBVFMgZm9yICVzXG4iLCBuYW1lKSk7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ZDU0Vycm9ycyA9IGtlLT5zdGF0cy5yeF9jcmNfZXJyb3JzOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUc7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyA9IGtlLT5zdGF0cy50eF9kcm9wcGVkOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUc7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgPSBrZS0+c3RhdHMudHhfZmlmb19lcnJvcnM7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1RSQU5TTUlURVJST1JTX0ZMQUc7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyA9IGtlLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9yczsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHOworCisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNGcmFtZVRvb0xvbmdzID0ga2UtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9yczsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRzsKKworICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzID0ga2UtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTX0ZMQUc7CisKKyAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICB9CisgICAgICAgIGtlcm5fZGIgPSBrZS0+bmV4dDsKKyAgICAgICAgZnJlZShrZSk7CisgICAgfQorCisgICAgcmV0dXJuICFkb25lOworfQorIyBlbHNlIC8qIH17ICovCitpbnQKK19kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRycyhkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHJldHVybiAxOworfQorIyBlbmRpZiAvKiB9ICovCisKKworLyoKKyAqIE5BTUU6IGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcworICogUFVSUE9TRTogVG8gZ2V0IGEgc2luZ2xlIHN0YXRpc3RpY3MgdmFsdWUgZnJvbSAvc3lzL2NsYXNzL25ldC88aWZuYW1lPi9zdGF0aXN0aWNzLzxjdHJuYW1lPgorICogQVJHVU1FTlRTOiBpZm5hbWU6IGludGVyZmFjZSBuYW1lCisgKiAgICAgIGN0cm5hbWU6IGNvdW50ZXIgbmFtZQorICogICAgICB2YWx1ZXA6IHdoZXJlIHRvIHN0b3JlIHZhbHVlCisgKiBSRVRVUk5TOiAwIGlmIHZhbHVlIG5vdCBhdmFpbGFibGUKKyAqICAgICAgbm9uLTAgaWYgdmFsdWUgYXZhaWxhYmxlCisgKi8KK3N0YXRpYyBpbnQKK2dldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhjb25zdCBjaGFyICppZm5hbWUsIGNvbnN0IGNoYXIgKmN0cm5hbWUsIHVfbG9uZyAqdmFsdWVwKQoreworICAgIGNoYXIgcGF0aFsyNTZdOworICAgIEZJTEUgKmZwOworICAgIGludCBydjsKKworICAgIGlmIChpZm5hbWUgPT0gTlVMTCB8fCBjdHJuYW1lID09IE5VTEwgfHwgdmFsdWVwID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL3N5cy9jbGFzcy9uZXQvJXMvc3RhdGlzdGljcy8lcyIsIGlmbmFtZSwgY3RybmFtZSk7CisgICAgZnAgPSBmb3BlbihwYXRoLCAicnQiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBydiA9IDE7CisgICAgaWYgKGZzY2FuZihmcCwgIiVsdSIsIHZhbHVlcCkgIT0gMSkKKyAgICAgICAgcnYgPSAwOworCisgICAgZmNsb3NlKGZwKTsKKworICAgIHJldHVybiBydjsKK30KKworLyoKKyAqIE5BTUU6IGludGVyZmFjZV9kb3Qzc3RhdHNfZ2V0X2Vycm9yY291bnRlcnMKKyAqIFBVUlBPU0U6IFRvIGdldCBldGhlcm5ldCBlcnJvciBzdGF0aXN0aWNzCisgKiBBUkdVTUVOVFM6IHJvd3JlcV9jdHg6IHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1ZShzKQorICogICAgICBuYW1lOiBpbnRlcmZhY2UgbmFtZQorICogUkVUVVJOUzogbm90aGluZy4gZmllbGRzIG5vdCBzZXQgaWYgZGF0YSBub3QgYXZhaWxhYmxlCisgKi8KK3ZvaWQKK2ludGVyZmFjZV9kb3Qzc3RhdHNfZ2V0X2Vycm9yY291bnRlcnMgKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgdV9sb25nIHZhbHVlOworICAgIGRvdDNTdGF0c1RhYmxlX2RhdGEgKmRhdGEgPSAmcm93cmVxX2N0eC0+ZGF0YTsKKyAgICBGSUxFICpkZXY7CisgICAgY29uc3QgY2hhciBORVRERVZfRklMRVtdID0gIi9wcm9jL25ldC9kZXYiOworCisgICAgaWYgKF9kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRycyhyb3dyZXFfY3R4LCBuYW1lKSA9PSAwKQorICAgIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJpbnRlcmZhY2VfZG90M3N0YXRzX2dldF9lcnJvcmNvdW50ZXJzOiBnb3QgZGF0YSBmcm9tIElGTEFfU1RBVFNcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgoZGV2ID0gZm9wZW4oTkVUREVWX0ZJTEUsICJyIikpICE9IE5VTEwpCisgICAgeworICAgICAgICBjaGFyIGxpbmVbMjU2XSwgKmxwLCAqbmV4dDsKKyAgICAgICAgc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisgICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvbHVtbjsKKworICAgICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBkZXYpICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qICAgIGJyMDo2ODM5NTYzNSAxMDM4MjE0ICAgIDAgICAgMCAgICAwICAgICAwICAgICAgICAgIDAgICAgOTM5NDExIDI1NjI2NjA2ICAgOTA3MDggICAgMCAgICAwICAgIDAgICAgIDAgICAgICAgMCAgICAgICAgICAwICovCisgICAgICAgICAgICBscCA9IGxpbmU7CisgICAgICAgICAgICB3aGlsZSAoKmxwID09ICcgJyB8fCAqbHAgPT0gJ1x0JykKKyAgICAgICAgICAgICAgICBscCsrOworICAgICAgICAgICAgaWYgKHN0cm5jbXAobHAsIG5hbWUsIG5hbWVsZW4pICE9IDAgfHwgbHBbbmFtZWxlbl0gIT0gJzonKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbHAgKz0gbmFtZWxlbiArIDE7ICAgICAgICAgLyogU2tpcCBuYW1lIGFuZCBjb2xvbiAqLworCisgICAgICAgICAgICBjb2x1bW4gPSAxOworICAgICAgICAgICAgd2hpbGUgKDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b3VsKGxwLCAmbmV4dCwgMTApOworICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IGxwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgLyogbm8gbW9yZSBkYXRhICovCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb2x1bW4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMzogCisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ZDU0Vycm9ycyA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNGQ1NFUlJPUlNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OU19GTEFHOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRlJBTUVUT09MT05HU19GTEFHOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycyA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FU19GTEFHOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29sdW1uKys7CisgICAgICAgICAgICAgICAgbHAgPSBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmY2xvc2UoZGV2KTsKKyAgICB9CisKKyAgICBpZiAoIShyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzICYgQ09MVU1OX0RPVDNTVEFUU0ZDU0VSUk9SU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZXJyb3JzIiwgJnZhbHVlKSkgeworICAgICAgICBkYXRhLT5kb3QzU3RhdHNGQ1NFcnJvcnMgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUc7CisgICAgfQorICAgIGlmICghKHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgJiBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUcpICYmCisgICAgICAgICAgZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJ0eF9kcm9wcGVkIiwgJnZhbHVlKSkgeworICAgICAgICBkYXRhLT5kb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUc7CisgICAgfQorICAgIGlmICghKHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgJiBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNUUkFOU01JVEVSUk9SU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAidHhfZmlmb19lcnJvcnMiLCAmdmFsdWUpKSB7CisgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNUUkFOU01JVEVSUk9SU19GTEFHOworICAgIH0KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzICYgQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAidHhfY2Fycmllcl9lcnJvcnMiLCAmdmFsdWUpKSB7CisgICAgICAgIGRhdGEtPmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyA9IHZhbHVlOworICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRzsKKyAgICB9CisgICAgaWYgKCEocm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyAmIENPTFVNTl9ET1QzU1RBVFNGUkFNRVRPT0xPTkdTX0ZMQUcpICYmCisgICAgICAgICAgZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJyeF9mcmFtZV9lcnJvcnMiLCAmdmFsdWUpKSB7CisgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRlJBTUVUT09MT05HU19GTEFHOworICAgIH0KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzICYgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDUkVDRUlWRUVSUk9SU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZmlmb19lcnJvcnMiLCAmdmFsdWUpKSB7CisgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycyA9IHZhbHVlOworICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRzsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKy8qCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgY2Fubm90IGdldCBFVEhUT09MX0RSVklORk8gZmFpbGVkIAorICogQHJldHZhbCAtMiBuc3RhdHMgemVybyAtIG5vIHN0YXRpc3RjcyBhdmFpbGFibGUKKyAqIEByZXR2YWwgLTMgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGhvbGRpbmcgdGhlIHN0YXRpc3RpY3MgZmFpbGVkCisgKiBAcmV0dmFsIC00IGNhbm5vdCBnZXQgRVRIVE9PTF9HU1RSSU5HUyBpbmZvcm1hdGlvbgorICogQHJldHZhbCAtNSBjYW5ub3QgZ2V0IEVUSFRPT0xfR1NUQVRTIGluZm9ybWF0aW9uCisgKiBAcmV0dmFsIC02IGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgaWYgSEFWRV9MSU5VWF9FVEhUT09MX0ggbm90IGRlZmluZWQKKyAqLworCisKK2ludCAKK2ludGVyZmFjZV9pb2N0bF9kb3Qzc3RhdHNfZ2V0IChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKworI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICisgICAgZG90M1N0YXRzVGFibGVfZGF0YSAqZGF0YSA9ICZyb3dyZXFfY3R4LT5kYXRhOworICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gZHJpdmVyX2luZm87CisgICAgc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MgKmV0aF9zdHJpbmdzOworICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpldGhfc3RhdHM7CisgICAgc3RydWN0IGlmcmVxIGlmcjsgCisgICAgdW5zaWduZWQgaW50IG5zdGF0cywgc2l6ZV9zdHIsIGk7CisgICAgaW50IGVycjsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisgICAgc3RybGNweShpZnIuaWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKKworICAgIG1lbXNldCgmZHJpdmVyX2luZm8sIDAsIHNpemVvZiAoZHJpdmVyX2luZm8pKTsKKyAgICBkcml2ZXJfaW5mby5jbWQgPSBFVEhUT09MX0dEUlZJTkZPOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopJmRyaXZlcl9pbmZvOworCisgICAgZXJyID0gX2RvdDNTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NFVEhUT09MLCAmaWZyLCBuYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIkVUSFRPT0xfR0VURFJWSU5GTyBmYWlsZWQgZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbnN0YXRzID0gZHJpdmVyX2luZm8ubl9zdGF0czsKKyAgICBpZiAobnN0YXRzIDwgMSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIm5vIHN0YXRzIGF2YWlsYWJsZSBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICBzaXplX3N0ciA9IG5zdGF0cyAqIEVUSF9HU1RSSU5HX0xFTjsKKworICAgIGV0aF9zdHJpbmdzID0gbWFsbG9jKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncykpOworICAgIGlmICghZXRoX3N0cmluZ3MpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJubyBtZW1vcnkgYXZhaWxhYmxlXG4iKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0LCBubyBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKKworICAgICAgICByZXR1cm4gLTM7CisgICAgfQorICAgIG1lbXNldCAoZXRoX3N0cmluZ3MsIDAsIChzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MpKSk7CisKKyAgICBldGhfc3RhdHMgPSBtYWxsb2MgKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9zdGF0cykpOworICAgIGlmICghZXRoX3N0YXRzKSB7CisgICAgICAgIGZyZWUgKGV0aF9zdHJpbmdzKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJubyBtZW1vcnkgYXZhaWxhYmxlXG4iKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0LCBubyBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKKworICAgICAgICByZXR1cm4gLTM7CisgICAgfQorICAgICBtZW1zZXQgKGV0aF9zdGF0cywgMCwgKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9zdGF0cykpKTsKKworICAgIGV0aF9zdHJpbmdzLT5jbWQgPSBFVEhUT09MX0dTVFJJTkdTOworICAgIGV0aF9zdHJpbmdzLT5zdHJpbmdfc2V0ID0gRVRIX1NTX1NUQVRTOworICAgIGV0aF9zdHJpbmdzLT5sZW4gPSBuc3RhdHM7CisgICAgaWZyLmlmcl9kYXRhID0gKGNoYXIgKikgZXRoX3N0cmluZ3M7CisgICAgZXJyID0gX2RvdDNTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NFVEhUT09MLCAmaWZyLCBuYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBnZXQgc3RhdHMgc3RyaW5ncyBpbmZvcm1hdGlvbiBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0LCBjYW5ub3QgZ2V0IHN0YXRzIHN0cmluZ3MgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSk7CisKKyAgICAgICAgZnJlZShldGhfc3RyaW5ncyk7CisgICAgICAgIGZyZWUoZXRoX3N0YXRzKTsKKyAgICAgICAgcmV0dXJuIC00OworICAgIH0KKworICAgIGV0aF9zdGF0cy0+Y21kID0gRVRIVE9PTF9HU1RBVFM7CisgICAgZXRoX3N0YXRzLT5uX3N0YXRzID0gbnN0YXRzOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopIGV0aF9zdGF0czsKKyAgICBlcnIgPSBfZG90M1N0YXRzX2lvY3RsX2dldChmZCwgU0lPQ0VUSFRPT0wsICZpZnIsIG5hbWUpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGdldCBzdGF0cyBzdHJpbmdzIGluZm9ybWF0aW9uIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsaW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19nZXQsIGNhbm5vdCBnZXQgc3RhdHMgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSk7CisKKyAgICAgICAgZnJlZShldGhfc3RyaW5ncyk7CisgICAgICAgIGZyZWUoZXRoX3N0YXRzKTsKKyAgICAgICAgcmV0dXJuIC01OworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBuc3RhdHM7IGkrKykgeworICAgICAgICBjaGFyIHNbRVRIX0dTVFJJTkdfTEVOXTsKKworICAgICAgICBzdHJsY3B5KHMsIChjb25zdCBjaGFyICopICZldGhfc3RyaW5ncy0+ZGF0YVtpICogRVRIX0dTVFJJTkdfTEVOXSwKKyAgICAgICAgICAgICAgICBzaXplb2YocykpOworICAgIAorICAgICAgICBpZiAoRE9UM1NUQVRTQUxJR05NRU5URVJST1JTKHMpKSB7CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0FMSUdOTUVOVEVSUk9SU19GTEFHOworICAgICAgICB9CisKKyAgICAgICAgaWYgKERPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTKHMpKSB7CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9ICh1X2xvbmcpZXRoX3N0YXRzLT5kYXRhW2ldOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTTVVMVElQTEVDT0xMSVNJT05GUkFNRVNfRkxBRzsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChET1QzU1RBVFNMQVRFQ09MTElTSU9OUyhzKSkgeworICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0xBVEVDT0xMSVNJT05TX0ZMQUc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRE9UM1NUQVRTU0lOR0xFQ09MTElTSU9ORlJBTUVTKHMpKSB7CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FU19GTEFHOworICAgICAgICB9CisKKyAgICAgICAgaWYgKERPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlMocykpIHsKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlNfRkxBRzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyZWUoZXRoX3N0cmluZ3MpOworICAgIGZyZWUoZXRoX3N0YXRzKTsKKworICAgIHJldHVybiAwOworI2Vsc2UKKyAgICByZXR1cm4gLTY7CisjZW5kaWYKK30KKworCisvKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIEVUSFRPT0xfR1NFVCBmYWlsZWQKKyAqIEByZXR2YWwgLTIgZnVuY3Rpb24gbm90IHN1cHBvcnRlZCBpZiBIQVZFX0xJTlVYX0VUSFRPT0xfSCBub3QgZGVmaW5lZAorICovCisKK2ludAoraW50ZXJmYWNlX2lvY3RsX2RvdDNzdGF0c19kdXBsZXhfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsIGludCBmZCwgY29uc3QgY2hhciogbmFtZSkgeworCisjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKKyAgICBkb3QzU3RhdHNUYWJsZV9kYXRhICpkYXRhID0gJnJvd3JlcV9jdHgtPmRhdGE7CisgICAgc3RydWN0IGV0aHRvb2xfY21kIGVkYXRhOworICAgIHN0cnVjdCBpZnJlcSBpZnI7CisgICAgaW50IGVycjsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19kdXBsZXhfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBtZW1zZXQoJmVkYXRhLCAwLCBzaXplb2YgKGVkYXRhKSk7CisgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZiAoaWZyKSk7CisgICAgZWRhdGEuY21kID0gRVRIVE9PTF9HU0VUOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopJmVkYXRhOworCisgICAgZXJyID0gX2RvdDNTdGF0c19pb2N0bF9nZXQgKGZkLCBTSU9DRVRIVE9PTCwgJmlmciwgbmFtZSk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2R1cGxleF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAiRVRIVE9PTF9HU0VUIGZhaWxlZFxuIikpOworCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgaWYgKGVyciA9PSAwKSB7CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0RVUExFWFNUQVRVU19GTEFHOworICAgICAgICBzd2l0Y2ggKGVkYXRhLmR1cGxleCkgeworICAgICAgICBjYXNlIERVUExFWF9IQUxGOgorICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzRHVwbGV4U3RhdHVzID0gKHVfbG9uZykgRE9UM1NUQVRTRFVQTEVYU1RBVFVTX0hBTEZEVVBMRVg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVVBMRVhfRlVMTDoKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0R1cGxleFN0YXR1cyA9ICh1X2xvbmcpIERPVDNTVEFUU0RVUExFWFNUQVRVU19GVUxMRFVQTEVYOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNEdXBsZXhTdGF0dXMgPSAodV9sb25nKSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfVU5LTk9XTjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19kdXBsZXhfZ2V0IiwKKyAgICAgICAgICAgICAgICAiRVRIVE9PTF9HU0VUIHByb2Nlc3NlZFxuIikpOworICAgIHJldHVybiBlcnI7CisjZWxzZQorICAgIHJldHVybiAtMjsKKyNlbmRpZgorfQorCisKKy8qCisgKiBOQU1FOiBpbnRlcmZhY2Vfc3lzY2xhc3NuZXRfZG90M3N0YXRzX2dldAorICogUFVSUE9TRTogVG8gZ2V0IGV0aGVybmV0IHN0YXRpc3RpY3MgZnJvbSAvc3lzL2NsYXNzL25ldC8uLi4KKyAqIEFSR1VNRU5UUzogcm93cmVxX2N0eDogd2hlcmUgdG8gc3RvcmUgdGhlIHZhbHVlKHMpCisgKgluYW1lOiBpbnRlcmZhY2UgbmFtZQorICogUkVUVVJOUzogbm90aGluZy4gZmllbGRzIG5vdCBzZXQgaWYgZGF0YSBub3QgYXZhaWxhYmxlCisgKi8KK3ZvaWQKK2ludGVyZmFjZV9zeXNjbGFzc25ldF9kb3Qzc3RhdHNfZ2V0IChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHVfbG9uZyB2YWx1ZTsKKyAgICBkb3QzU3RhdHNUYWJsZV9kYXRhICpkYXRhID0gJnJvd3JlcV9jdHgtPmRhdGE7CisKKyAgICBpZiAoZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJyeF9lcnJvcnMiLCAmdmFsdWUpKSB7CisJZGF0YS0+ZG90M1N0YXRzRkNTRXJyb3JzID0gdmFsdWU7CisJcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUc7CisgICAgfQorICAgIGlmIChnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInR4X2Ryb3BwZWQiLCAmdmFsdWUpKSB7CisJZGF0YS0+ZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zID0gdmFsdWU7CisJcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUc7CisgICAgfQorICAgIGlmIChnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInR4X2ZpZm9fZXJyb3JzIiwgJnZhbHVlKSkgeworCWRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgPSB2YWx1ZTsKKwlyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1RSQU5TTUlURVJST1JTX0ZMQUc7CisgICAgfQorICAgIGlmIChnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInR4X2NhcnJpZXJfZXJyb3JzIiwgJnZhbHVlKSkgeworCWRhdGEtPmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyA9IHZhbHVlOworCXJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHOworICAgIH0KKyAgICBpZiAoZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJyeF9mcmFtZV9lcnJvcnMiLCAmdmFsdWUpKSB7CisJZGF0YS0+ZG90M1N0YXRzRnJhbWVUb29Mb25ncyA9IHZhbHVlOworCXJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRzsKKyAgICB9CisgICAgaWYgKGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZmlmb19lcnJvcnMiLCAmdmFsdWUpKSB7CisJZGF0YS0+ZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzID0gdmFsdWU7CisJcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTX0ZMQUc7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisKKworLyogaW9jdGwgd3JhcHBlcgorICoKKyAqIEBwYXJhbSAgICAgIGZkIDogc29ja2V0IGZkIHRvIHVzZSB3L2lvY3RsLCBvciAtMSB0byBvcGVuL2Nsb3NlIG9uZQorICogQHBhcmFtICB3aGljaAorICogQHBhcmFtIGlmcnEKKyAqIHBhcmFtIGlmZW50cnkgOiBpZmVudHJ5IHRvIHVwZGF0ZQorICogQHBhcmFtIG5hbWUKKyAqCisgKiBAcmV0dmFsICAwIDogc3VjY2VzcworICogQHJldHZhbCAtMSA6IGludmFsaWQgcGFyYW1ldGVycworICogQHJldHZhbCAtMiA6IGNvdWxkbid0IGNyZWF0ZSBzb2NrZXQKKyAqIEByZXR2YWwgLTMgOiBpb2N0bCBjYWxsIGZhaWxlZAorICovCitpbnQKK19kb3QzU3RhdHNfaW9jdGxfZ2V0KGludCBmZCwgaW50IHdoaWNoLCBzdHJ1Y3QgaWZyZXEgKmlmcnEsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IG91cmZkID0gLTEsIHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW9jdGwiLCAiX2RvdDNTdGF0c19pb2N0bF9nZXRcbiIpKTsKKworICAgIC8qCisgICAgICogc2FuaXR5IGNoZWNrcworICAgICAqLworICAgIGlmKE5VTEwgPT0gbmFtZSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmlvY3RsIiwKKyAgICAgICAgICAgICAgICAgICAgIl9kb3QzU3RhdHNfaW9jdGxfZ2V0IGludmFsaWQgaWZuYW1lICclcydcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW9jdGwsIF9kb3QzU3RhdHNfaW9jdGxfZ2V0IGVycm9yIG9uIGludGVyZmFjZSAnJXMnXG4iLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogY3JlYXRlIHNvY2tldCBmb3IgaW9jdGxzCisgICAgICovCisgICAgaWYoZmQgPCAwKSB7CisgICAgICAgIGZkID0gb3VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICAgICAgIGlmKG91cmZkIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppb2N0bCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZG90M1N0YXRzX2lvY3RsX2dldCBjb3VsZG4ndCBjcmVhdGUgYSBzb2NrZXRcbiIpKTsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmlvY3RsLCBfZG90M1N0YXRzX2lvY3RsX2dldCBlcnJvciBvbiBpbnRlcmZhY2UgJyVzJ1xuIiwgbmFtZSk7CisKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmxjcHkoaWZycS0+aWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnJxLT5pZnJfbmFtZSkpOworICAgIHJjID0gaW9jdGwoZmQsIHdoaWNoLCBpZnJxKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW9jdGwiLAorICAgICAgICAgICAgICAgICAgICAiZG90M1N0YXRzX2lvY3RsX2dldCBpb2N0bCAlZCByZXR1cm5lZCAlZFxuIiwgd2hpY2gsIHJjKSk7CisgICAgICAgIHJjID0gLTM7CisgICAgfQorCisgICAgaWYob3VyZmQgPj0gMCkKKyAgICAgICAgY2xvc2Uob3VyZmQpOworCisgICAgcmV0dXJuIHJjOworfQorCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRmN2JmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzKQorY29uZmlnX3JlcXVpcmUoZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZSkKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQpCitjb25maWdfcmVxdWlyZShldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0KQorY29uZmlnX3JlcXVpcmUoZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2VzcykKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlKQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2MzgwYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuYwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qKiBccGFnZSBNRkQgaGVscGVyIGZvciBkb3QzU3RhdHNUYWJsZQorICoKKyAqIFxzZWN0aW9uIGludHJvIEludHJvZHVjdGlvbgorICogSW50cm9kdWN0b3J5IHRleHQuCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CisKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKworb2lkICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX29pZFtdID0geyBET1QzU1RBVFNUQUJMRV9PSUQgfTsKK2ludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoZG90M1N0YXRzVGFibGVfb2lkKTsKKworZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uIGRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dDsKK3N0YXRpYyBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKmRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wOworCit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9kb3QzU3RhdHNUYWJsZSh2b2lkKTsKKworCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBkb3QzU3RhdHNUYWJsZSBtb2R1bGUKKyAqLwordm9pZAoraW5pdF9kb3QzU3RhdHNUYWJsZSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmluaXRfZG90M1N0YXRzVGFibGUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAwOm86IFBlcmZvcm0gZG90M1N0YXRzVGFibGUgb25lLXRpbWUgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZworICAgICAqLworICAgIGlmIChzaG91bGRfaW5pdCgiZG90M1N0YXRzVGFibGUiKSkKKyAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSgpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRfZG90M1N0YXRzVGFibGUgKi8KKworLyoqCisgKiBTaHV0LWRvd24gdGhlIGRvdDNTdGF0c1RhYmxlIG1vZHVsZSAoYWdlbnQgaXMgZXhpdGluZykKKyAqLwordm9pZAorc2h1dGRvd25fZG90M1N0YXRzVGFibGUodm9pZCkKK3sKKyAgICBpZiAoc2hvdWxkX2luaXQoImRvdDNTdGF0c1RhYmxlIikpCisgICAgICAgIHNodXRkb3duX3RhYmxlX2RvdDNTdGF0c1RhYmxlKCk7CisKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBkb3QzU3RhdHNUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2RvdDNTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6aW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMTpvOiBQZXJmb3JtIGRvdDNTdGF0c1RhYmxlIG9uZS10aW1lIHRhYmxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMjpvOiB8LT5Jbml0aWFsaXplIGRvdDNTdGF0c1RhYmxlIHVzZXIgY29udGV4dAorICAgICAqIGlmIHlvdSdkIGxpa2UgdG8gcGFzcyBpbiBhIHBvaW50ZXIgdG8gc29tZSBkYXRhIGZvciB0aGlzCisgICAgICogdGFibGUsIGFsbG9jYXRlIG9yIHNldCBpdCB1cCBoZXJlLgorICAgICAqLworICAgIC8qCisgICAgICogYSBuZXRzbm1wX2RhdGFfbGlzdCBpcyBhIHNpbXBsZSB3YXkgdG8gc3RvcmUgdm9pZCBwb2ludGVycy4gQSBzaW1wbGUKKyAgICAgKiBzdHJpbmcgdG9rZW4gaXMgdXNlZCB0byBhZGQsIGZpbmQgb3IgcmVtb3ZlIHBvaW50ZXJzLgorICAgICAqLworICAgIGRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wCisJPSBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoImRvdDNTdGF0c1RhYmxlIiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIE5vIHN1cHBvcnQgZm9yIGFueSBmbGFncyB5ZXQsIGJ1dCBpbiB0aGUgZnV0dXJlIHlvdSB3b3VsZAorICAgICAqIHNldCBhbnkgZmxhZ3MgaGVyZS4KKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBfZG90M1N0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UoZG90M1N0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AsIGZsYWdzKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSAqLworCisvKioKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBkb3QzU3RhdHNUYWJsZSAKKyAqLwordm9pZAorc2h1dGRvd25fdGFibGVfZG90M1N0YXRzVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIHNodXRkb3duIGNvZGUKKyAgICAgKi8KKyAgICBfZG90M1N0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShkb3QzU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgZG90M1N0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AgPSBOVUxMOworfQorCisvKioKKyAqIGV4dHJhIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gKGVnIGRlZmF1bHQgdmFsdWVzKQorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4ICAgIDogcm93IHJlcXVlc3QgY29udGV4dAorICogQHBhcmFtIHVzZXJfaW5pdF9jdHggOiB2b2lkIHBvaW50ZXIgZm9yIHVzZXIgKHBhcmFtZXRlciB0byByb3dyZXFfY3R4X2FsbG9jYXRlKQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgIDogbm8gZXJyb3JzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICA6IGVycm9yIChjb250ZXh0IGFsbG9jYXRlIHdpbGwgZmFpbCkKKyAqLworaW50Citkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjEwOm86IHwtPiBQZXJmb3JtIGV4dHJhIGRvdDNTdGF0c1RhYmxlIHJvd3JlcSBpbml0aWFsaXphdGlvbi4gKGVnIERFRlZBTFMpCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdCAqLworCisvKioKKyAqIGV4dHJhIGNvbnRleHQgY2xlYW51cAorICoKKyAqLwordm9pZAorZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgZG90M1N0YXRzVGFibGUgcm93cmVxIGNsZWFudXAuCisgICAgICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCAqLworCisvKioKKyAqIHByZS1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2NvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTA6bzogUGVyZm9ybSBkb3QzU3RhdHNUYWJsZSBwcmUtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIHBvc3QtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqIE5vdGU6CisgKiAgIE5ldyByb3dzIGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIsIGFuZAorICogICBkZWxldGVkIHJvd3MgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyIGFuZAorICogICByZWxlYXNlZC4KKyAqCisgKiBAcGFyYW0gdXNlcl9jb250ZXh0CisgKiBAcGFyYW0gcmMgOiBNRkRfU1VDQ0VTUyBpZiBhbGwgcmVxdWVzdHMgc3VjY2VlZGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogb3RoZXIgZXJyb3IgKGlnbm9yZWQpCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTExOm86IFBlcmZvcm0gZG90M1N0YXRzVGFibGUgcG9zdC1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisKKy8qKiBAeyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzEzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmgKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRE9UM1NUQVRTVEFCTEVfSAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgbWlzYyBtaXNjOiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzCisgKgorICogQHsKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorCisgICAgLyoKKyAgICAgKiBPSUQgYW5kIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIGRvdDNTdGF0c1RhYmxlIAorICAgICAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX29pZHMuaCIKKworICAgIC8qCisgICAgICogZW51bSBkZWZpbmlvbnMgCisgICAgICovCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGVfZW51bXMuaCIKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0X2RvdDNTdGF0c1RhYmxlKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9kb3QzU3RhdHNUYWJsZSh2b2lkKTsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNUYWJsZSBpcyBzdWJpZCAyIG9mIGRvdDMuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMiwgbGVuZ3RoOiA5CisgICAgICovCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogV2hlbiB5b3UgcmVnaXN0ZXIgeW91ciBtaWIsIHlvdSBnZXQgdG8gcHJvdmlkZSBhIGdlbmVyaWMKKyAgICAgKiBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgYmFjayB0byB5b3UgZm9yIG1vc3Qgb2YgdGhlCisgICAgICogZnVuY3Rpb25zIGNhbGxzLgorICAgICAqCisgICAgICogVE9ETzoxMDA6cjogUmV2aWV3IGFsbCBjb250ZXh0IHN0cnVjdHVyZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFRPRE86MTAxOm86IHwtPiBSZXZpZXcgZG90M1N0YXRzVGFibGUgcmVnaXN0cmF0aW9uIGNvbnRleHQuCisgICAgICovCisgICAgdHlwZWRlZiBuZXRzbm1wX2RhdGFfbGlzdCBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogVE9ETzoxMTA6cjogfC0+IFJldmlldyBkb3QzU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQgc3RydWN0dXJlLgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBkYXRhIGZvciBkb3QzU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHN0b3JhZ2UgZm9yIGFsbCB0aGUgY29sdW1ucyBkZWZpbmVkIGluIHRoZQorICAgICAqIGRvdDNTdGF0c1RhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGRvdDNTdGF0c1RhYmxlX2RhdGFfcyB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzKDIpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRkNTRXJyb3JzKDMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNGQ1NFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzKDQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMoNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnMoNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zKDcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMoOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycygxMCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzKDExKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MoMTMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycygxNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yczsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNFdGhlckNoaXBTZXQoMTcpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIG9pZCAgICAgICAgICAgICBkb3QzU3RhdHNFdGhlckNoaXBTZXRbMTI4XTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGRvdDNTdGF0c0V0aGVyQ2hpcFNldF9sZW47ICAgICAgLyogIyBvZiBvaWQgZWxlbWVudHMsIG5vdCBieXRlcyAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1N5bWJvbEVycm9ycygxOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c1N5bWJvbEVycm9yczsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNEdXBsZXhTdGF0dXMoMTkpL0lOVEVHRVIvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzRHVwbGV4U3RhdHVzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSgyMCkvVHJ1dGhWYWx1ZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS93L0Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXMoMjEpL0lOVEVHRVIvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXM7CisKKyAgICB9IGRvdDNTdGF0c1RhYmxlX2RhdGE7CisKKworICAgIC8qCisgICAgICogVE9ETzoxMjA6cjogfC0+IFJldmlldyBkb3QzU3RhdHNUYWJsZSBtaWIgaW5kZXguCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGluZGV4IGZvciBkb3QzU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXhfcyB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvSAorICAgICAgICAgKi8KKyAgICAgICAgbG9uZyAgICAgICAgICAgIGRvdDNTdGF0c0luZGV4OworCisKKyAgICB9IGRvdDNTdGF0c1RhYmxlX21pYl9pbmRleDsKKworICAgIC8qCisgICAgICogVE9ETzoxMjE6cjogfCAgIHwtPiBSZXZpZXcgZG90M1N0YXRzVGFibGUgbWF4IGluZGV4IGxlbmd0aC4KKyAgICAgKiBJZiB5b3UgS05PVyB0aGF0IHlvdXIgaW5kZXhlcyB3aWxsIG5ldmVyIGV4Y2VlZCBhIGNlcnRhaW4KKyAgICAgKiBsZW5ndGgsIHVwZGF0ZSB0aGlzIG1hY3JvIHRvIHRoYXQgbGVuZ3RoLgorICAgICAqLworI2RlZmluZSBNQVhfZG90M1N0YXRzVGFibGVfSURYX0xFTiAgICAgMjU1CisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTMwOm86IHwtPiBSZXZpZXcgZG90M1N0YXRzVGFibGUgUm93IHJlcXVlc3QgKHJvd3JlcSkgY29udGV4dC4KKyAgICAgKiBXaGVuIHlvdXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHlvdSB3aWxsIGJlIHBhc3NlZCBhCisgICAgICogZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCBwb2ludGVyLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfcyB7CisKKyAgICAvKiogdGhpcyBtdXN0IGJlIGZpcnN0IGZvciBjb250YWluZXIgY29tcGFyZSB0byB3b3JrICovCisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgICAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfZG90M1N0YXRzVGFibGVfSURYX0xFTl07CisKKyAgICAgICAgZG90M1N0YXRzVGFibGVfbWliX2luZGV4IHRibF9pZHg7CisKKyAgICAgICAgZG90M1N0YXRzVGFibGVfZGF0YSBkYXRhOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgY29sdW1uX2V4aXN0c19mbGFnczsgICAgLyogZmxhZ3MgZm9yIGV4aXN0ZW5jZSAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIGZsYWdzIHBlciByb3cuIEN1cnJlbnRseSwgdGhlIGZpcnN0IChsb3dlcikgOCBiaXRzIGFyZSByZXNlcnZlZAorICAgICAgICAgKiBmb3IgdGhlIHVzZXIuIFNlZSBtZmQuaCBmb3Igb3RoZXIgZmxhZ3MuCisgICAgICAgICAqLworICAgICAgICB1X2ludCAgICAgICAgICAgcm93cmVxX2ZsYWdzOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MTMxOm86IHwgICB8LT4gQWRkIHVzZWZ1bCBkYXRhIHRvIGRvdDNTdGF0c1RhYmxlIHJvd3JlcSBjb250ZXh0LgorICAgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBzdG9yYWdlIGZvciBmdXR1cmUgZXhwYW5zaW9uCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqZG90M1N0YXRzVGFibGVfZGF0YV9saXN0OworCisgICAgfSBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4OworCisgICAgdHlwZWRlZiBzdHJ1Y3QgZG90M1N0YXRzVGFibGVfcmVmX3Jvd3JlcV9jdHhfcyB7CisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgfSBkb3QzU3RhdHNUYWJsZV9yZWZfcm93cmVxX2N0eDsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QoZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXNlcl9jb250ZXh0KTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VyX2NvbnRleHQsIGludCByYyk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgdm9pZCAqdXNlcl9pbml0X2N0eCk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICpkb3QzU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KTsKKworICAgIGV4dGVybiBvaWQgICAgICBkb3QzU3RhdHNUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gaW50ICAgICAgZG90M1N0YXRzVGFibGVfb2lkX3NpemU7CisKKworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgiCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuaCIKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9kYXRhX3NldC5oIgorCisgICAgLyoKKyAgICAgKiBEVU1NWSBtYXJrZXJzLCBpZ25vcmUKKyAgICAgKgorICAgICAqIFRPRE86MDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjE5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoyOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mzk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjQ5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZjMzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZS5oIgorI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgiCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorI2luY2x1ZGUgImlvY3RsX2ltcF9jb21tb24uaCIKKyNlbmRpZgorCisvKiogQGluZ3JvdXAgaW50ZXJmYWNlCisgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBsb2NhdGUgdGhlIGRhdGEgdXNlZCB0byBzYXRpc2Z5CisgKiByZXF1ZXN0cy4KKyAqIAorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzVGFibGUgaXMgc3ViaWQgMiBvZiBkb3QzLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLCBsZW5ndGg6IDkKKyAqLworCisvKioKKyAqIGluaXRpYWxpemF0aW9uIGZvciBkb3QzU3RhdHNUYWJsZSBkYXRhIGFjY2VzcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwIHRvIGFsbG93IHlvdSB0bworICogYWxsb2NhdGUgYW55IHJlc291cmNlcyB5b3UgbmVlZCBmb3IgdGhlIGRhdGEgdGFibGUuCisgKgorICogQHBhcmFtIGRvdDNTdGF0c1RhYmxlX3JlZworICogICAgICAgIFBvaW50ZXIgdG8gZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogdW5yZWNvdmVyYWJsZSBlcnJvci4KKyAqLworaW50Citkb3QzU3RhdHNUYWJsZV9pbml0X2RhdGEoZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogZG90M1N0YXRzVGFibGVfcmVnKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2luaXRfZGF0YSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMzpvOiBJbml0aWFsaXplIGRvdDNTdGF0c1RhYmxlIGRhdGEuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2luaXRfZGF0YSAqLworCisvKioKKyAqIGNvbnRhaW5lciBvdmVydmlldworICoKKyAqLworCisvKioKKyAqIGNvbnRhaW5lciBpbml0aWFsaXphdGlvbgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyX3B0ciBBIHBvaW50ZXIgdG8gYSBjb250YWluZXIgcG9pbnRlci4gSWYgeW91CisgKiAgICAgICAgY3JlYXRlIGEgY3VzdG9tIGNvbnRhaW5lciwgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHJldHVybiBpdAorICogICAgICAgIHRvIHRoZSBNRkQgaGVscGVyLiBJZiBzZXQgdG8gTlVMTCwgdGhlIE1GRCBoZWxwZXIgd2lsbAorICogICAgICAgIGFsbG9jYXRlIGEgY29udGFpbmVyIGZvciB5b3UuCisgKiBAcGFyYW0gIGNhY2hlIEEgcG9pbnRlciB0byBhIGNhY2hlIHN0cnVjdHVyZS4gWW91IGNhbiBzZXQgdGhlIHRpbWVvdXQKKyAqICAgICAgICAgYW5kIG90aGVyIGNhY2hlIGZsYWdzIHVzaW5nIHRoaXMgcG9pbnRlci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuIElmIG5vIGN1c3RvbQorICogIGNvbnRhaW5lciBpcyBhbGxvY2F0ZWQsIHRoZSBNRkQgY29kZSB3aWxsIGNyZWF0ZSBvbmUgZm9yIHlvdXIuCisgKgorICogIFRoaXMgaXMgYWxzbyB0aGUgcGxhY2UgdG8gc2V0IHVwIGNhY2hlIGJlaGF2aW9yLiBUaGUgZGVmYXVsdCwgdG8KKyAqICBzaW1wbHkgc2V0IHRoZSBjYWNoZSB0aW1lb3V0LCB3aWxsIHdvcmsgd2VsbCB3aXRoIHRoZSBkZWZhdWx0CisgKiAgY29udGFpbmVyLiBJZiB5b3UgYXJlIHVzaW5nIGEgY3VzdG9tIGNvbnRhaW5lciwgeW91IG1heSB3YW50IHRvCisgKiAgbG9vayBhdCB0aGUgY2FjaGUgaGVscGVyIGRvY3VtZW50YXRpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkKKyAqICBmbGFncyB5b3Ugd2FudCB0byBzZXQuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGluaXRpYWxpemF0aW9uIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBvcGVuaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHdpbGwgc3VwcGx5IHRoZSBkYXRhLCBvcGVuaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKiogY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlICogY2FjaGUpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY29udGFpbmVyIHBhcmFtIHRvIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogRm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBjb250YWluZXIuIElmIHlvdQorICAgICAqIGRvIG5vdCBjcmVhdGUgb25lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UuCisgICAgICovCisgICAgKmNvbnRhaW5lcl9wdHJfcHRyID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY2FjaGUgcGFyYW0gdG8gZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgZG90M1N0YXRzVGFibGUgY2FjaGUgcHJvcGVydGllcy4KKyAgICAgKgorICAgICAqIEFsc28gZm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUKKyAgICAgKiBjYWNoZS4gRG8gbm90IGNoYW5nZSB0aGUgbWFnaWMgcG9pbnRlciwgYXMgaXQgaXMgdXNlZAorICAgICAqIGJ5IHRoZSBNRkQgaGVscGVyLiBUbyBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgc2V0CisgICAgICogY2FjaGUtPmVuYWJsZWQgdG8gMC4KKyAgICAgKi8KKyAgICBjYWNoZS0+dGltZW91dCA9IERPVDNTVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQ7ICAgICAgLyogc2Vjb25kcyAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIGNvbnRhaW5lciBzaHV0ZG93bgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyIEEgcG9pbnRlciB0byB0aGUgY29udGFpbmVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzaHV0ZG93biB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSgpLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBjbGVhbnVwIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBjbG9zaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHN1cHBsaWVkIHRoZSBkYXRhLCBjbG9zaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyX3B0cikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBwYXJhbXMgdG8gZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworLyoqCisgKiBsb2FkIGluaXRpYWwgZGF0YQorICoKKyAqIFRPRE86MzUwOk06IEltcGxlbWVudCBkb3QzU3RhdHNUYWJsZSBkYXRhIGxvYWQKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgY2FjaGUgaGVscGVyIHRvIGxvYWQKKyAqIHRoZSBjb250YWluZXIgYWdhaW4gKGFmdGVyIHRoZSBjb250YWluZXIgZnJlZSBmdW5jdGlvbiBoYXMgYmVlbgorICogY2FsbGVkIHRvIGZyZWUgdGhlIHByZXZpb3VzIGNvbnRlbnRzKS4KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5lciB0byB3aGljaCBpdGVtcyBzaG91bGQgYmUgaW5zZXJ0ZWQKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRSA6IENhbid0IGFjY2VzcyBkYXRhIHNvdXJjZQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbG9hZCB0aGUgaW5kZXgoZXMpIChhbmQgZGF0YSwgb3B0aW9uYWxseSkKKyAqICBmb3IgdGhlIGV2ZXJ5IHJvdyBpbiB0aGUgZGF0YSBzZXQuCisgKgorICogQHJlbWFyaworICogIFdoaWxlIGxvYWRpbmcgdGhlIGRhdGEsIHRoZSBvbmx5IGltcG9ydGFudCB0aGluZyBpcyB0aGUgaW5kZXhlcy4KKyAqICBJZiBhY2Nlc3MgdG8geW91ciBkYXRhIGlzIGNoZWFwL2Zhc3QgKGUuZy4geW91IGhhdmUgYSBwb2ludGVyIHRvIGEKKyAqICBzdHJ1Y3R1cmUgaW4gbWVtb3J5KSwgaXQgd291bGQgbWFrZSBzZW5zZSB0byB1cGRhdGUgdGhlIGRhdGEgaGVyZS4KKyAqICBJZiwgaG93ZXZlciwgdGhlIGFjY2Vzc2luZyB0aGUgZGF0YSBpbnZvdmxlcyBtb3JlIHdvcmsgKGUuZy4gcGFyc2luZworICogIHNvbWUgb3RoZXIgZXhpc3RpbmcgZGF0YSwgb3IgcGVmb3JtaW5nIGNhbGN1bGF0aW9ucyB0byBkZXJpdmUgdGhlIGRhdGEpLAorICogIHRoZW4geW91IGNhbiBsaW1pdCB5b3Vyc2VsZiB0byBzZXR0aW5nIHRoZSBpbmRleGVzIGFuZCBzYXZpbmcgYW55CisgKiAgaW5mb3JtYXRpb24geW91IHdpbGwgbmVlZCBsYXRlci4gVGhlbiB1c2UgdGhlIHNhdmVkIGluZm9ybWF0aW9uIGluCisgKiAgZG90M1N0YXRzVGFibGVfcm93X3ByZXAoKSBmb3IgcG9wdWxhdGluZyBkYXRhLgorICoKKyAqIEBub3RlCisgKiAgSWYgeW91IG5lZWQgY29uc2lzdGVuY3kgYmV0d2VlbiByb3dzIChsaWtlIHlvdSB3YW50IHN0YXRpc3RpY3MKKyAqICBmb3IgZWFjaCByb3cgdG8gYmUgZnJvbSB0aGUgc2FtZSB0aW1lIGZyYW1lKSwgeW91IHNob3VsZCBzZXQgYWxsCisgKiAgZGF0YSBoZXJlLgorICoKKyAqLworCisvKgorICoKKyAqIEByZXR2YWwgIE1GRF9TVUNDRVNTIHN1Y2Nlc3MKKyAqIEByZXR2YWwgIE1GRF9FUlJPUiBjb3VsZCBub3QgZ2V0IHRoZSBpbnRlcmZhY2UgbmFtZXMgCisgKiBAcmV0dmFsICBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeQorICogQHJldHZhbCAgLTIgY291bGQgbm90IG9wZW4gYSBzb2NrZXQKKyAqLworCisKK2ludAorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgc2l6ZV90ICAgICAgICAgIGNvdW50ID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgZmQ7CisjaWYgZGVmaW5lZChsaW51eCkKKyAgICBsb25nICAgICAgICAgICAgZG90M1N0YXRzSW5kZXg7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gMCwgcmV0dmFsID0gMDsKKyAgICBzdHJ1Y3QgaWZuYW1lICpsaXN0X2hlYWQgPSBOVUxMLCAqcCA9IE5VTEw7CisjZW5kaWYKKyAgICAKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworICAgICAgCisgICAgLyoKKyAgICAgKiBUT0RPOjM1MjpNOiB8ICAgfC0+IHNldCBpbmRleGVzIGluIG5ldyBkb3QzU3RhdHNUYWJsZSByb3dyZXEgY29udGV4dC4KKyAgICAgKiBkYXRhIGNvbnRleHQgd2lsbCBiZSBzZXQgZnJvbSB0aGUgcGFyYW0gKHVubGVzcyBOVUxMLAorICAgICAqIGluIHdoaWNoIGNhc2UgYSBuZXcgZGF0YSBjb250ZXh0IHdpbGwgYmUgYWxsb2NhdGVkKQorICAgICAqLworICAgIAorICAgIC8qCisgICAgICogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGluZGV4IHZhbHVlcworICAgICAqLworCisgICAgLyoKKyAgICAgKiBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9ICisgICAgICovCisKKworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgc29ja2V0IGZvciBpb2N0bHMKKyAgICAgKi8KKyAgICAKKyAgICBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZihmZCA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgc29ja2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qCisgICAgICogZ2V0IHRoZSBpbnRlcmZhY2UgbmFtZXMgb2YgdGhlIGRldmljZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtLCBpbiBjYXNlIG9mIGZhaWx1cmUgcmV0dmFsIHN1Z2dlc3RzIHRoZSByZXNvbiBmb3IgZmFpbHVyZQorICAgICAqIGFuZCBsaXN0X2hlYWQgY29udGFpbnMgbnVsbAorICAgICAqLworCisjaWYgZGVmaW5lZChsaW51eCkKKyAgICBsaXN0X2hlYWQgPSBkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQgKGxpc3RfaGVhZCwgJnJldHZhbCk7CisKKyAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSwgZXJyb3IgZ2V0dGluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbVxuIik7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGUiLCAiZXJyb3IgZ2V0dGluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSIpKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIFdhbGsgb3ZlciB0aGUgbGlzdCBvZiBpbnRlcmZhY2UgbmFtZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGFuZCByZXRyZWl2ZSB0aGUgc3RhdGlzdGljcyAKKyAgICAgKi8KKworICAgIGZvciAocCA9IGxpc3RfaGVhZDsgcDsgcCA9IHAtPmlmbl9uZXh0KSB7CisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJwcm9jZXNzaW5nICclcydcbiIsIHAtPm5hbWUpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgaW5kZXggdmlhIGlvY3RsLgorICAgICAgICAgKi8KKworICAgICAgICBkb3QzU3RhdHNJbmRleCA9IChsb25nKSBkb3Qzc3RhdHNfaW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0KC0xLCBwLT5uYW1lKTsKKworICAgICAgICAvKiAKKyAgICAgICAgICogICAgZ2V0IHRoZSBkb3Qzc3RhdHMgY29udGVudHMgcG9wdWxhdGVkLCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBhbiBldGhlcm5ldCBkZXZpY2UKKyAgICAgICAgICogICAgdGhlIG9wZXJhdGlvbiB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYW5kIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBsb2dnZWQKKyAgICAgICAgICovCisgICAgICAgIAorICAgICAgICByb3dyZXFfY3R4ID0gZG90M1N0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChOVUxMKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1lbW9yeSBhbGxvY2F0aW9uIGZvciBkb3QzU3RhdHNUYWJsZSBmYWlsZWRcbiIpOworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKE1GRF9TVUNDRVNTICE9CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LCBkb3QzU3RhdHNJbmRleCkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJkb3QzU3RhdHNUYWJsZSBkYXRhLlxuIik7CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MzUyOnI6IHwgICB8LT4gcG9wdWxhdGUgZG90M1N0YXRzVGFibGUgZGF0YSBjb250ZXh0LgorICAgICAgICAgKiBQb3B1bGF0ZSBkYXRhIGNvbnRleHQgaGVyZS4gKG9wdGlvbmFsbHksIGRlbGF5IHVudGlsIHJvdyBwcmVwKQorICAgICAgICAgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogbm9uLVRSQU5TSUVOVCBkYXRhOiBubyBuZWVkIHRvIGNvcHkuIHNldCBwb2ludGVyIHRvIGRhdGEgCisgICAgICAgICAqLworCisgICAgICAgIG1lbXNldCAoJnJvd3JlcV9jdHgtPmRhdGEsIDAsIHNpemVvZiAocm93cmVxX2N0eC0+ZGF0YSkpOworICAgICAgICByYyA9IGludGVyZmFjZV9pb2N0bF9kb3Qzc3RhdHNfZ2V0IChyb3dyZXFfY3R4LCBmZCwgcC0+bmFtZSk7CisKKyAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJlcnJvciBnZXR0aW5nIHRoZSBzdGF0aXN0aWNzIGZvciBpbnRlcmZhY2UgfCVzfCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZG90M1N0YXRzVGFibGUgZGF0YSwgb3BlcmF0aW9uIG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWRcbiIsIHAtPm5hbWUpKTsKKyAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBpbnRlcmZhY2VfaW9jdGxfZG90M3N0YXRzX2R1cGxleF9nZXQocm93cmVxX2N0eCwgZmQsIHAtPm5hbWUpOworICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlIiwgImVycm9yIGdldHRpbmcgdGhlIGR1cGxleCBzdGF0dXMgZm9yIHwlc3wgIgorICAgICAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlIGRhdGEsIG9wZXJhdGlvbiBtaWdodCBub3QgYmUgc3VwcG9ydGVkXG4iLCBwLT5uYW1lKSk7CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisJaW50ZXJmYWNlX3N5c2NsYXNzbmV0X2RvdDNzdGF0c19nZXQocm93cmVxX2N0eCwgcC0+bmFtZSk7CisKKwlpbnRlcmZhY2VfZG90M3N0YXRzX2dldF9lcnJvcmNvdW50ZXJzKHJvd3JlcV9jdHgsIHAtPm5hbWUpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGluc2VydCBpbnRvIHRhYmxlIGNvbnRhaW5lcgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGUiLCAiZXJyb3IgaW5zZXJ0aW5nIHwlc3wiLCBwLT5uYW1lKSk7CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgY2xvc2UoZmQpOworCisgICAgLyoKKyAgICAgKiBmcmVlIHRoZSBpbnRlcmZhY2UgbmFtZXMgbGlzdCAKKyAgICAgKi8KKworICAgIGlmICggKGRvdDNzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUobGlzdF9oZWFkKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsIGVycm9yIGZyZWVpbmcgdGhlIGludGVyZmFjZSBuYW1lIGxpc3QgXG4iKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJlcnJvciBmcmVlaW5nIHRoZSBpbnRlcmZhY2UgbmFtZSBsaXN0XG4iKSk7CisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgfQorI2VuZGlmCisKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICJpbnNlcnRlZCAlIiBORVRTTk1QX1BSSXogImQgcmVjb3Jkc1xuIiwgY291bnQpKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2xvYWQgKi8KKworLyoqCisgKiBjb250YWluZXIgY2xlYW4gdXAKKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5lciB3aXRoIGFsbCBjdXJyZW50IGl0ZW1zCisgKgorICogIFRoaXMgb3B0aW9uYWwgY2FsbGJhY2sgaXMgY2FsbGVkIHByaW9yIHRvIGFsbAorICogIGl0ZW0ncyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lci4gSWYgeW91CisgKiAgbmVlZCB0byBkbyBhbnkgcHJvY2Vzc2luZyBiZWZvcmUgdGhhdCwgZG8gaXQgaGVyZS4KKyAqCisgKiBAbm90ZQorICogIFRoZSBNRkQgaGVscGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlbGVhc2luZyBhbGwgdGhlIHJvdyBjb250ZXh0cy4KKyAqCisgKi8KK3ZvaWQKK2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzgwOk06IEZyZWUgZG90M1N0YXRzVGFibGUgY29udGFpbmVyIGRhdGEuCisgICAgICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogcHJlcGFyZSByb3cgZm9yIHByb2Nlc3NpbmcuCisgKgorICogIFdoZW4gdGhlIGFnZW50IGhhcyBsb2NhdGVkIHRoZSByb3cgZm9yIGEgcmVxdWVzdCwgdGhpcyBmdW5jdGlvbiBpcworICogIGNhbGxlZCB0byBwcmVwYXJlIHRoZSByb3cgZm9yIHByb2Nlc3NpbmcuIElmIHlvdSBmdWxseSBwb3B1bGF0ZWQKKyAqICB0aGUgZGF0YSBjb250ZXh0IGR1cmluZyB0aGUgaW5kZXggc2V0dXAgcGhhc2UsIHlvdSBtYXkgbm90IG5lZWQgdG8KKyAqICBkbyBhbnl0aGluZy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCBwb2ludGVyIHRvIGEgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICovCitpbnQKK2RvdDNTdGF0c1RhYmxlX3Jvd19wcmVwKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX3Jvd19wcmVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM5MDpvOiBQcmVwYXJlIHJvdyBmb3IgcmVxdWVzdC4KKyAgICAgKiBJZiBwb3B1bGF0aW5nIHJvdyBkYXRhIHdhcyBkZWxheWVkLCB0aGlzIGlzIHRoZSBwbGFjZSB0bworICAgICAqIGZpbGwgaW4gdGhlIHJvdyBmb3IgdGhpcyByZXF1ZXN0LgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9yb3dfcHJlcCAqLworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGIzOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRE9UM1NUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9EQVRBX0FDQ0VTU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBkb3QzU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzVGFibGUgaXMgc3ViaWQgMiBvZiBkb3QzLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIsIGxlbmd0aDogOQorICAgICAqLworCisKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfaW5pdF9kYXRhKGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWcpOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTgwOm86IFJldmlldyBkb3QzU3RhdHNUYWJsZSBjYWNoZSB0aW1lb3V0LgorICAgICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlIGNhY2hlIHRpbWVzIG91dAorICAgICAqLworI2RlZmluZSBET1QzU1RBVFNUQUJMRV9DQUNIRV9USU1FT1VUICAgNjAKKworICAgIHZvaWQgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKTsKKyAgICB2b2lkICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHIpOworCisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NhY2hlX2xvYWQobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NhY2hlX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisKKyNkZWZpbmUgTUFYX0xJTkVfU0laRSAyNTYKKworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yb3dfcHJlcChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICB2b2lkICAgICAgICAgICAgaW50ZXJmYWNlX3N5c2NsYXNzbmV0X2RvdDNzdGF0c19nZXQKKyAgICAgICAgKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LCBjb25zdCBjaGFyICpuYW1lKTsKKyAgICB2b2lkICAgICAgICAgICAgaW50ZXJmYWNlX2RvdDNzdGF0c19nZXRfZXJyb3Jjb3VudGVycworICAgICAgICAoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsIGNvbnN0IGNoYXIgKm5hbWUpOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5jIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNjQ2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmMKQEAgLTAsMCArMSwxNDUwIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlLmgiCisKKworLyoqIEBkZWZncm91cCBkYXRhX2dldCBkYXRhX2dldDogUm91dGluZXMgdG8gZ2V0IGRhdGEKKyAqCisgKiBUT0RPOjIzMDpNOiBJbXBsZW1lbnQgZG90M1N0YXRzVGFibGUgZ2V0IHJvdXRpbmVzLgorICogVE9ETzoyNDA6TTogSW1wbGVtZW50IGRvdDNTdGF0c1RhYmxlIG1hcHBpbmcgcm91dGluZXMgKGlmIGFueSkuCisgKgorICogVGhlc2Ugcm91dGluZSBhcmUgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMuIFRoZQorICogcm93IGNvbnRleHQgaXMgcGFzc2VkLCBhbG9uZyB3aXRoIGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHdoZXJlIHRoZQorICogdmFsdWUgc2hvdWxkIGJlIGNvcGllZC4KKyAqCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZG90M1N0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNUYWJsZSBpcyBzdWJpZCAyIG9mIGRvdDMuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIsIGxlbmd0aDogOQorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICogVE9ETzoyMDA6cjogSW1wbGVtZW50IGRvdDNTdGF0c1RhYmxlIGRhdGEgY29udGV4dCBmdW5jdGlvbnMuCisgKi8KKworCisvKioKKyAqIHNldCBtaWIgaW5kZXgoZXMpCisgKgorICogQHBhcmFtIHRibF9pZHggbWliIGluZGV4IHN0cnVjdHVyZQorICogQHBhcmFtIGRvdDNTdGF0c0luZGV4X3ZhbAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgY29udmVuaWVuY2UgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBzZXR0aW5nIGFsbCB0aGUgTUlCIGluZGV4CisgKiAgY29tcG9uZW50cyB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIEl0IGlzIGFzc3VtZSB0aGF0IHRoZSBDIHZhbHVlcworICogIGhhdmUgYWxyZWFkeSBiZWVuIG1hcHBlZCBmcm9tIHRoZWlyIG5hdGl2ZS9yYXdmb3JtYXQgdG8gdGhlIE1JQiBmb3JtYXQuCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvdDNTdGF0c0luZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9IIAorICAgICAqLworICAgIHRibF9pZHgtPmRvdDNTdGF0c0luZGV4ID0gZG90M1N0YXRzSW5kZXhfdmFsOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNldCByb3cgY29udGV4dCBpbmRleGVzCisgKgorICogQHBhcmFtIHJlcXJlcV9jdHggdGhlIHJvdyBjb250ZXh0IHRoYXQgbmVlZHMgdXBkYXRlZCBpbmRleGVzCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtaWIgaW5kZXhzLCB0aGVuIHVwZGF0ZXMgdGhlIG9pZCBpbmRleHMKKyAqICBmcm9tIHRoZSBtaWIgaW5kZXguCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvdDNTdGF0c0luZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE1GRF9TVUNDRVNTICE9CisgICAgICAgIGRvdDNTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoJnJvd3JlcV9jdHgtPnRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzSW5kZXhfdmFsKSkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKworICAgIC8qCisgICAgICogY29udmVydCBtaWIgaW5kZXggdG8gb2lkIGluZGV4CisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBzaXplb2Yocm93cmVxX2N0eC0+b2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKyAgICBpZiAoMCAhPSBkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQoJnJvd3JlcV9jdHgtPm9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT50YmxfaWR4KSkgeworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXQgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzCisgKiBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgaXMgc3ViaWQgMiBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4yCisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIHJlY2VpdmVkIG9uIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBhcmUgbm90IGFuIGludGVncmFsIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICBvY3RldHMgaW4gbGVuZ3RoIGFuZCBkbyBub3QgcGFzcyB0aGUgRkNTIGNoZWNrLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBpbmNyZW1lbnRlZCB3aGVuIHRoZSBhbGlnbm1lbnRFcnJvcgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgaXMgcmV0dXJuZWQgYnkgdGhlIE1BQyBzZXJ2aWNlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBMTEMgKG9yIG90aGVyIE1BQyB1c2VyKS4gUmVjZWl2ZWQgZnJhbWVzIGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCBtdWx0aXBsZSBlcnJvciBjb25kaXRpb25zIHBlcnRhaW4gYXJlLAorICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlbnRpb25zIG9mIElFRUUgODAyLjMKKyAgICAgICAgICAgICAgICAgICAgTGF5ZXIgTWFuYWdlbWVudCwgY291bnRlZCBleGNsdXNpdmVseSBhY2NvcmRpbmcKKworICAgICAgICAgICAgICAgICAgICB0byB0aGUgZXJyb3Igc3RhdHVzIHByZXNlbnRlZCB0byB0aGUgTExDLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgZm9yIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nIHNjaGVtZXMgZ3JlYXRlciB0aGFuIDQgYml0cyBwZXIgZ3JvdXAuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzQWxpZ25tZW50RXJyb3JzIG9iamVjdCBmb3IgMTAgR2IvcworICAgICAgICAgICAgICAgICAgICBvciBmYXN0ZXIgaW50ZXJmYWNlcy4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0FsaWdubWVudEVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0FsaWdubWVudEVycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0FsaWdubWVudEVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0FsaWdubWVudEVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0FsaWdubWVudEVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzRkNTRXJyb3JzCisgKiBkb3QzU3RhdHNGQ1NFcnJvcnMgaXMgc3ViaWQgMyBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4zCisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIHJlY2VpdmVkIG9uIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBhcmUgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIG9jdGV0cworICAgICAgICAgICAgICAgICAgICBpbiBsZW5ndGggYnV0IGRvIG5vdCBwYXNzIHRoZSBGQ1MgY2hlY2suICBUaGlzCisgICAgICAgICAgICAgICAgICAgIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgZnJhbWVzIHJlY2VpdmVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtdG9vLWxvbmcgb3IgZnJhbWUtdG9vLXNob3J0IGVycm9yLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBpbmNyZW1lbnRlZCB3aGVuIHRoZSBmcmFtZUNoZWNrRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzIGlzIHJldHVybmVkIGJ5IHRoZSBNQUMgc2VydmljZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgTExDIChvciBvdGhlciBNQUMgdXNlcikuIFJlY2VpdmVkIGZyYW1lcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVsdGlwbGUgZXJyb3IgY29uZGl0aW9ucyBwZXJ0YWluIGFyZSwKKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBvZiBJRUVFIDgwMi4zCisgICAgICAgICAgICAgICAgICAgIExheWVyIE1hbmFnZW1lbnQsIGNvdW50ZWQgZXhjbHVzaXZlbHkgYWNjb3JkaW5nCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBlcnJvciBzdGF0dXMgcHJlc2VudGVkIHRvIHRoZSBMTEMuCisKKyAgICAgICAgICAgICAgICAgICAgTm90ZTogIENvZGluZyBlcnJvcnMgZGV0ZWN0ZWQgYnkgdGhlIHBoeXNpY2FsCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGZvciBzcGVlZHMgYWJvdmUgMTAgTWIvcyB3aWxsIGNhdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBmcmFtZSB0byBmYWlsIHRoZSBGQ1MgY2hlY2suCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKworICAgICAgICAgICAgICAgICAgICBpdCBpcyBpbmNyZW1lbnRpbmcgYXQgaXRzIG1heGltdW0gcmF0ZS4gIFNpbmNlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYW1vdW50IG9mIHRpbWUgY291bGQgYmUgbGVzcyB0aGFuIGEKKyAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzdGF0aW9uJ3MgcG9sbCBjeWNsZSB0aW1lLCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBhIGxvc3Mgb2YgaW5mb3JtYXRpb24sIGEgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIGlzIGFkdmlzZWQgdG8gcG9sbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M0hDU3RhdHNGQ1NFcnJvcnMgb2JqZWN0IGZvciAxMCBHYi9zIG9yCisgICAgICAgICAgICAgICAgICAgIGZhc3RlciBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRkNTRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzRkNTRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNGQ1NFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBkb3QzU3RhdHNGQ1NFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0ZDU0Vycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzRkNTRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ZDU0Vycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzRkNTRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0ZDU0Vycm9yc192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRkNTRXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNGQ1NFcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMKKyAqIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyBpcyBzdWJpZCA0IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjQKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiBmcmFtZXMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gYSBzaW5nbGUKKyAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uLCBhbmQgYXJlIHN1YnNlcXVlbnRseSB0cmFuc21pdHRlZAorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgQSBmcmFtZSB0aGF0IGlzIGNvdW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgaXMgYWxzbyBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIGVpdGhlciB0aGUgaWZPdXRVY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgIGlmT3V0TXVsdGljYXN0UGt0cywgb3IgaWZPdXRCcm9hZGNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbm90IGNvdW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC4KKworICAgICAgICAgICAgICAgICAgICBUaGlzIGNvdW50ZXIgZG9lcyBub3QgaW5jcmVtZW50IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpcyBvcGVyYXRpbmcgaW4gZnVsbC1kdXBsZXggbW9kZS4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc19nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzCisgKiBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyBpcyBzdWJpZCA1IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjUKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiBmcmFtZXMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gbW9yZQorCisgICAgICAgICAgICAgICAgICAgIHRoYW4gb25lIGNvbGxpc2lvbiBhbmQgYXJlIHN1YnNlcXVlbnRseQorICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZCBzdWNjZXNzZnVsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgQSBmcmFtZSB0aGF0IGlzIGNvdW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgaXMgYWxzbyBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIGVpdGhlciB0aGUgaWZPdXRVY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgIGlmT3V0TXVsdGljYXN0UGt0cywgb3IgaWZPdXRCcm9hZGNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbm90IGNvdW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcworICAgICAgICAgICAgICAgICAgICBvYmplY3QuCisKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VudGVyIGRvZXMgbm90IGluY3JlbWVudCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIGZ1bGwtZHVwbGV4IG1vZGUuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzU1FFVGVzdEVycm9ycworICogZG90M1N0YXRzU1FFVGVzdEVycm9ycyBpcyBzdWJpZCA2IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjYKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiB0aW1lcyB0aGF0IHRoZSBTUUUgVEVTVCBFUlJPUgorICAgICAgICAgICAgICAgICAgICBpcyByZWNlaXZlZCBvbiBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgU1FFIFRFU1QgRVJST1IgaXMgc2V0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcnVsZXMgZm9yIHZlcmlmaWNhdGlvbiBvZiB0aGUgU1FFIGRldGVjdGlvbgorICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gaW4gdGhlIFBMUyBDYXJyaWVyIFNlbnNlIEZ1bmN0aW9uIGFzCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiBJRUVFIFN0ZC4gODAyLjMsIDIwMDAgRWRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiA3LjIuNC42LgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgb24gaW50ZXJmYWNlcworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgYXQgc3BlZWRzIGdyZWF0ZXIgdGhhbiAxMCBNYi9zLCBvciBvbgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzU1FFVGVzdEVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c1NRRVRlc3RFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzU1FFVGVzdEVycm9yc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzU1FFVGVzdEVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzU1FFVGVzdEVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c1NRRVRlc3RFcnJvcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMKKyAqIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyBpcyBzdWJpZCA3IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjcKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiBmcmFtZXMgZm9yIHdoaWNoIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb24gYXR0ZW1wdCBvbiBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIGlzIGRlbGF5ZWQgYmVjYXVzZSB0aGUgbWVkaXVtIGlzIGJ1c3kuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvdW50IHJlcHJlc2VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGRvZXMgbm90IGluY2x1ZGUgZnJhbWVzIGludm9sdmVkIGluCisgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VudGVyIGRvZXMgbm90IGluY3JlbWVudCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIGZ1bGwtZHVwbGV4IG1vZGUuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNMYXRlQ29sbGlzaW9ucworICogZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgaXMgc3ViaWQgOCBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS44CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBhIGNvbGxpc2lvbiBpcworICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCBvbiBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlIGxhdGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgb25lIHNsb3RUaW1lIGludG8gdGhlIHRyYW5zbWlzc2lvbiBvZiBhIHBhY2tldC4KKworICAgICAgICAgICAgICAgICAgICBBIChsYXRlKSBjb2xsaXNpb24gaW5jbHVkZWQgaW4gYSBjb3VudAorICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCBpcworICAgICAgICAgICAgICAgICAgICBhbHNvIGNvbnNpZGVyZWQgYXMgYSAoZ2VuZXJpYykgY29sbGlzaW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBwdXJwb3NlcyBvZiBvdGhlciBjb2xsaXNpb24tcmVsYXRlZAorICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNMYXRlQ29sbGlzaW9uczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zCisgKiBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zIGlzIHN1YmlkIDkgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuOQorICogRGVzY3JpcHRpb246CitBIGNvdW50IG9mIGZyYW1lcyBmb3Igd2hpY2ggdHJhbnNtaXNzaW9uIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBpbnRlcmZhY2UgZmFpbHMgZHVlIHRvIGV4Y2Vzc2l2ZQorICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25zLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycworICogZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyBpcyBzdWJpZCAxMCBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4xMAorICogRGVzY3JpcHRpb246CitBIGNvdW50IG9mIGZyYW1lcyBmb3Igd2hpY2ggdHJhbnNtaXNzaW9uIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBpbnRlcmZhY2UgZmFpbHMgZHVlIHRvIGFuIGludGVybmFsCisgICAgICAgICAgICAgICAgICAgIE1BQyBzdWJsYXllciB0cmFuc21pdCBlcnJvci4gQSBmcmFtZSBpcyBvbmx5CisgICAgICAgICAgICAgICAgICAgIGNvdW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcyBvYmplY3QgaWYgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgbm90IGNvdW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRoZSBkb3QzU3RhdHNMYXRlQ29sbGlzaW9ucyBvYmplY3QsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zIG9iamVjdCwgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyBvYmplY3QuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZWNpc2UgbWVhbmluZyBvZiB0aGUgY291bnQgcmVwcmVzZW50ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhpcyBvYmplY3QgaXMgaW1wbGVtZW50YXRpb24tCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljLiAgSW4gcGFydGljdWxhciwgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgbWF5IHJlcHJlc2VudCBhIGNvdW50IG9mIHRyYW5zbWlzc2lvbgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgb24gYSBwYXJ0aWN1bGFyIGludGVyZmFjZSB0aGF0IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGNvdW50ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyBvYmplY3QgZm9yCisgICAgICAgICAgICAgICAgICAgIDEwIEdiL3Mgb3IgZmFzdGVyIGludGVyZmFjZXMuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisKKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc19nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzCisgKiBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgaXMgc3ViaWQgMTEgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMTEKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBjYXJyaWVyIHNlbnNlCisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiB3YXMgbG9zdCBvciBuZXZlciBhc3NlcnRlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRpbmcgdG8gdHJhbnNtaXQgYSBmcmFtZSBvbiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBhdCBtb3N0IG9uY2UgcGVyCisgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBhdHRlbXB0LCBldmVuIGlmIHRoZSBjYXJyaWVyIHNlbnNlCisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiBmbHVjdHVhdGVzIGR1cmluZyBhIHRyYW5zbWlzc2lvbgorICAgICAgICAgICAgICAgICAgICBhdHRlbXB0LgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNGcmFtZVRvb0xvbmdzCisgKiBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzIGlzIHN1YmlkIDEzIG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjEzCisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIHJlY2VpdmVkIG9uIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBleGNlZWQgdGhlIG1heGltdW0gcGVybWl0dGVkCisgICAgICAgICAgICAgICAgICAgIGZyYW1lIHNpemUuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvdW50IHJlcHJlc2VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIGluY3JlbWVudGVkIHdoZW4gdGhlIGZyYW1lVG9vTG9uZworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgaXMgcmV0dXJuZWQgYnkgdGhlIE1BQyBzZXJ2aWNlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBMTEMgKG9yIG90aGVyIE1BQyB1c2VyKS4gUmVjZWl2ZWQgZnJhbWVzIGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCBtdWx0aXBsZSBlcnJvciBjb25kaXRpb25zIHBlcnRhaW4gYXJlLAorICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlbnRpb25zIG9mIElFRUUgODAyLjMKKyAgICAgICAgICAgICAgICAgICAgTGF5ZXIgTWFuYWdlbWVudCwgY291bnRlZCBleGNsdXNpdmVseSBhY2NvcmRpbmcKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGVycm9yIHN0YXR1cyBwcmVzZW50ZWQgdG8gdGhlIExMQy4KKworICAgICAgICAgICAgICAgICAgICBGb3IgaW50ZXJmYWNlcyBvcGVyYXRpbmcgYXQgMTAgR2IvcywgdGhpcworICAgICAgICAgICAgICAgICAgICBjb3VudGVyIGNhbiByb2xsIG92ZXIgaW4gbGVzcyB0aGFuIDgwIG1pbnV0ZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzRnJhbWVUb29Mb25ncyBvYmplY3QgZm9yIDEwIEdiL3MKKyAgICAgICAgICAgICAgICAgICAgb3IgZmFzdGVyIGludGVyZmFjZXMuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzRnJhbWVUb29Mb25nc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzRnJhbWVUb29Mb25nc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzRnJhbWVUb29Mb25nc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRnJhbWVUb29Mb25nczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRnJhbWVUb29Mb25nc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycworICogZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzIGlzIHN1YmlkIDE2IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjE2CisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIGZvciB3aGljaCByZWNlcHRpb24gb24gYQorICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIGludGVyZmFjZSBmYWlscyBkdWUgdG8gYW4gaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgTUFDIHN1YmxheWVyIHJlY2VpdmUgZXJyb3IuIEEgZnJhbWUgaXMgb25seQorICAgICAgICAgICAgICAgICAgICBjb3VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMgb2JqZWN0IGlmIGl0IGlzCisgICAgICAgICAgICAgICAgICAgIG5vdCBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0aGUgZG90M1N0YXRzRnJhbWVUb29Mb25ncyBvYmplY3QsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgb2JqZWN0LCBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzRkNTRXJyb3JzIG9iamVjdC4KKworICAgICAgICAgICAgICAgICAgICBUaGUgcHJlY2lzZSBtZWFuaW5nIG9mIHRoZSBjb3VudCByZXByZXNlbnRlZCBieQorICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCBpcyBpbXBsZW1lbnRhdGlvbi0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMuICBJbiBwYXJ0aWN1bGFyLCBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBtYXkgcmVwcmVzZW50IGEgY291bnQgb2YgcmVjZWl2ZSBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgb24gYSBwYXJ0aWN1bGFyIGludGVyZmFjZSB0aGF0IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGNvdW50ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKworICAgICAgICAgICAgICAgICAgICBpdCBpcyBpbmNyZW1lbnRpbmcgYXQgaXRzIG1heGltdW0gcmF0ZS4gIFNpbmNlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYW1vdW50IG9mIHRpbWUgY291bGQgYmUgbGVzcyB0aGFuIGEKKyAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzdGF0aW9uJ3MgcG9sbCBjeWNsZSB0aW1lLCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBhIGxvc3Mgb2YgaW5mb3JtYXRpb24sIGEgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIGlzIGFkdmlzZWQgdG8gcG9sbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M0hDU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMgb2JqZWN0IGZvcgorICAgICAgICAgICAgICAgICAgICAxMCBHYi9zIG9yIGZhc3RlciBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzRXRoZXJDaGlwU2V0CisgKiBkb3QzU3RhdHNFdGhlckNoaXBTZXQgaXMgc3ViaWQgMTcgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIERlcHJlY2F0ZWQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMTcKKyAqIERlc2NyaXB0aW9uOgorKioqKioqKiogVEhJUyBPQkpFQ1QgSVMgREVQUkVDQVRFRCAqKioqKioqKgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGFuIE9CSkVDVCBJREVOVElGSUVSCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlkZW50aWZpZXMgdGhlIGNoaXBzZXQgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICByZWFsaXplIHRoZSBpbnRlcmZhY2UuIEV0aGVybmV0LWxpa2UKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcyBhcmUgdHlwaWNhbGx5IGJ1aWx0IG91dCBvZgorICAgICAgICAgICAgICAgICAgICBzZXZlcmFsIGRpZmZlcmVudCBjaGlwcy4gVGhlIE1JQiBpbXBsZW1lbnRvcgorICAgICAgICAgICAgICAgICAgICBpcyBwcmVzZW50ZWQgd2l0aCBhIGRlY2lzaW9uIG9mIHdoaWNoIGNoaXAKKyAgICAgICAgICAgICAgICAgICAgdG8gaWRlbnRpZnkgdmlhIHRoaXMgb2JqZWN0LiBUaGUgaW1wbGVtZW50b3IKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGlkZW50aWZ5IHRoZSBjaGlwIHdoaWNoIGlzIHVzdWFsbHkKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVkIHRoZSBNZWRpdW0gQWNjZXNzIENvbnRyb2wgY2hpcC4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm8gc3VjaCBjaGlwIGlzIGVhc2lseSBpZGVudGlmaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbXBsZW1lbnRvciBzaG91bGQgaWRlbnRpZnkgdGhlIGNoaXAKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggYWN0dWFsbHkgZ2F0aGVycyB0aGUgdHJhbnNtaXQKKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlY2VpdmUgc3RhdGlzdGljcyBhbmQgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGlvbnMuIFRoaXMgd291bGQgYWxsb3cgYQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyIHN0YXRpb24gdG8gY29ycmVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzIGFuZCB0aGUgY2hpcCBnZW5lcmF0aW5nCisgICAgICAgICAgICAgICAgICAgIHRoZW0sIGdpdmluZyBpdCB0aGUgYWJpbGl0eSB0byB0YWtlCisgICAgICAgICAgICAgICAgICAgIGludG8gYWNjb3VudCBhbnkga25vd24gYW5vbWFsaWVzCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjaGlwLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgb2JqZWN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBJbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICBmZWVkYmFjayBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBvZiBsaW1pdGVkIHVzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIG5ldHdvcmsgcHJvYmxlbXMgaW4gdGhlIGZpZWxkLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aXZlIG92ZXJoZWFkIGludm9sdmVkIGluCisgICAgICAgICAgICAgICAgICAgIG1haW50YWluaW5nIGEgcmVnaXN0cnkgb2YgY2hpcHNldCBPSURzIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBqdXN0aWZpZWQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBPQkpFQ1RJRCAoYmFzZWQgb24gcGVybHR5cGUgT0JKRUNUSUQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fT0JKRUNUX0lELiBUaGUgQyB0eXBlIGRlY2wgaXMgb2lkIChvaWQpCisgKiBUaGlzIGRhdGEgdHlwZSByZXF1aXJlcyBhIGxlbmd0aC4KKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNFdGhlckNoaXBTZXQgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgb2lkIHZhcmlhYmxlCisgKiBAcGFyYW0gZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfbGVuX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gYSBzaXplX3QuIE9uIGVudHJ5LCBpdCB3aWxsIGNvbnRhaW4gdGhlIHNpemUgKGluIGJ5dGVzKQorICogICAgICAgIHBvaW50ZWQgdG8gYnkgZG90M1N0YXRzRXRoZXJDaGlwU2V0LgorICogICAgICAgIE9uIGV4aXQsIHRoaXMgdmFsdWUgc2hvdWxkIGNvbnRhaW4gdGhlIGRhdGEgc2l6ZSAoaW4gYnl0ZXMpLgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisqCisgKiBAbm90ZSBJZiB5b3UgbmVlZCBtb3JlIHRoYW4gKCpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9sZW5fcHRyKSBieXRlcyBvZiBtZW1vcnksCisgKiAgICAgICBhbGxvY2F0ZSBpdCB1c2luZyBtYWxsb2MoKSBhbmQgdXBkYXRlIGRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX3B0ci4KKyAqICAgICAgIDxiPkRPIE5PVDwvYj4gZnJlZSB0aGUgcHJldmlvdXMgcG9pbnRlci4KKyAqICAgICAgIFRoZSBNRkQgaGVscGVyIHdpbGwgcmVsZWFzZSB0aGUgbWVtb3J5IHlvdSBhbGxvY2F0ZS4KKyAqCisgKiBAcmVtYXJrIElmIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24geW91cnNlbGYsIHlvdSBhcmUgcmVzcG9uc2libGUKKyAqICAgICAgICAgZm9yIGNoZWNraW5nIGlmIHRoZSBwb2ludGVyIGNoYW5nZWQsIGFuZCBmcmVlaW5nIGFueQorICogICAgICAgICBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkuIChOb3QgbmVjZXNzYXJ5IGlmIHlvdSBwYXNzCisgKiAgICAgICAgIGluIGEgcG9pbnRlciB0byBzdGF0aWMgbWVtb3J5LCBvYnZpb3VzbHkuKQorICovCitpbnQKK2RvdDNTdGF0c0V0aGVyQ2hpcFNldF9nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqKiBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfbGVuX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCisgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyKQorICAgICAgICAgICAgICAgICAgICYmIChOVUxMICE9ICpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNFdGhlckNoaXBTZXRfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRXRoZXJDaGlwU2V0IGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIgKSBkYXRhIGFuZCAoKiBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9sZW5fcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciBkb3QzU3RhdHNFdGhlckNoaXBTZXQgZGF0YQorICAgICAqLworICAgIGlmICgoTlVMTCA9PSAoKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX3B0cikpIHx8CisgICAgICAgICgoKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIpIDwKKyAgICAgICAgIChyb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldF9sZW4gKgorICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldFswXSkpKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgZG90M1N0YXRzRXRoZXJDaGlwU2V0IGRhdGEKKyAgICAgICAgICovCisgICAgICAgICgqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyKSA9CisgICAgICAgICAgICBtYWxsb2Mocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRfbGVuICoKKyAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRbMF0pKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gKCpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgICAgICB9CisgICAgfQorICAgICgqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfbGVuX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldF9sZW4gKgorICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRbMF0pOworICAgIG1lbWNweSgoKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX3B0ciksCisgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRXRoZXJDaGlwU2V0LAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldF9sZW4gKgorICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRbMF0pKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRXRoZXJDaGlwU2V0X2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzU3ltYm9sRXJyb3JzCisgKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnMgaXMgc3ViaWQgMTggb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMTgKKyAqIERlc2NyaXB0aW9uOgorRm9yIGFuIGludGVyZmFjZSBvcGVyYXRpbmcgYXQgMTAwIE1iL3MsIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGltZXMgdGhlcmUgd2FzIGFuIGludmFsaWQgZGF0YSBzeW1ib2wKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBhIHZhbGlkIGNhcnJpZXIgd2FzIHByZXNlbnQuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGludGVyZmFjZSBvcGVyYXRpbmcgaW4gaGFsZi1kdXBsZXggbW9kZQorICAgICAgICAgICAgICAgICAgICBhdCAxMDAwIE1iL3MsIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJlY2VpdmluZworICAgICAgICAgICAgICAgICAgICBtZWRpYSBpcyBub24taWRsZSAoYSBjYXJyaWVyIGV2ZW50KSBmb3IgYSBwZXJpb2QKKyAgICAgICAgICAgICAgICAgICAgb2YgdGltZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gc2xvdFRpbWUsIGFuZAorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgd2hpY2ggdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBvY2N1cnJlbmNlCisgICAgICAgICAgICAgICAgICAgIG9mIGFuIGV2ZW50IHRoYXQgY2F1c2VzIHRoZSBQSFkgdG8gaW5kaWNhdGUKKyAgICAgICAgICAgICAgICAgICAgJ0RhdGEgcmVjZXB0aW9uIGVycm9yJyBvciAnY2FycmllciBleHRlbmQgZXJyb3InCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBHTUlJLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbnRlcmZhY2Ugb3BlcmF0aW5nIGluIGZ1bGwtZHVwbGV4IG1vZGUKKyAgICAgICAgICAgICAgICAgICAgYXQgMTAwMCBNYi9zLCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByZWNlaXZpbmcKKyAgICAgICAgICAgICAgICAgICAgbWVkaWEgaXMgbm9uLWlkbGUgKGEgY2FycmllciBldmVudCkgZm9yIGEgcGVyaW9kCisgICAgICAgICAgICAgICAgICAgIG9mIHRpbWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIG1pbkZyYW1lU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGR1cmluZyB3aGljaCB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lCisgICAgICAgICAgICAgICAgICAgIG9jY3VycmVuY2Ugb2YgYW4gZXZlbnQgdGhhdCBjYXVzZXMgdGhlIFBIWSB0bworICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZSAnRGF0YSByZWNlcHRpb24gZXJyb3InIG9uIHRoZSBHTUlJLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbnRlcmZhY2Ugb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGltZXMgdGhlIHJlY2VpdmluZyBtZWRpYSBpcyBub24taWRsZQorICAgICAgICAgICAgICAgICAgICAoYSBjYXJyaWVyIGV2ZW50KSBmb3IgYSBwZXJpb2Qgb2YgdGltZSBlcXVhbCB0bworICAgICAgICAgICAgICAgICAgICBvciBncmVhdGVyIHRoYW4gbWluRnJhbWVTaXplLCBhbmQgZHVyaW5nIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgb2NjdXJyZW5jZSBvZiBhbiBldmVudAorICAgICAgICAgICAgICAgICAgICB0aGF0IGNhdXNlcyB0aGUgUEhZIHRvIGluZGljYXRlICdSZWNlaXZlIEVycm9yJworICAgICAgICAgICAgICAgICAgICBvbiB0aGUgWEdNSUkuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvdW50IHJlcHJlc2VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIGluY3JlbWVudGVkIGF0IG1vc3Qgb25jZSBwZXIgY2FycmllcgorICAgICAgICAgICAgICAgICAgICBldmVudCwgZXZlbiBpZiBtdWx0aXBsZSBzeW1ib2wgZXJyb3JzIG9jY3VyCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgY2FycmllciBldmVudC4gIFRoaXMgY291bnQgZG9lcworICAgICAgICAgICAgICAgICAgICBub3QgaW5jcmVtZW50IGlmIGEgY29sbGlzaW9uIGlzIHByZXNlbnQuCisKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VudGVyIGRvZXMgbm90IGluY3JlbWVudCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGF0IDEwIE1iL3MuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisKKyAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzdGF0aW9uJ3MgcG9sbCBjeWNsZSB0aW1lLCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBhIGxvc3Mgb2YgaW5mb3JtYXRpb24sIGEgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIGlzIGFkdmlzZWQgdG8gcG9sbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M0hDU3RhdHNTeW1ib2xFcnJvcnMgb2JqZWN0IGZvciAxMCBHYi9zCisgICAgICAgICAgICAgICAgICAgIG9yIGZhc3RlciBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzU3ltYm9sRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzU3ltYm9sRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNTeW1ib2xFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c1N5bWJvbEVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzU3ltYm9sRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1N5bWJvbEVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzU3ltYm9sRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c1N5bWJvbEVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzU3ltYm9sRXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNEdXBsZXhTdGF0dXMKKyAqIGRvdDNTdGF0c0R1cGxleFN0YXR1cyBpcyBzdWJpZCAxOSBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4xOQorICogRGVzY3JpcHRpb246CitUaGUgY3VycmVudCBtb2RlIG9mIG9wZXJhdGlvbiBvZiB0aGUgTUFDCisgICAgICAgICAgICAgICAgICAgIGVudGl0eS4gICd1bmtub3duJyBpbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICBkdXBsZXggbW9kZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KKworICAgICAgICAgICAgICAgICAgICBNYW5hZ2VtZW50IGNvbnRyb2wgb2YgdGhlIGR1cGxleCBtb2RlIGlzCisgICAgICAgICAgICAgICAgICAgIGFjY29tcGxpc2hlZCB0aHJvdWdoIHRoZSBNQVUgTUlCLiAgV2hlbgorICAgICAgICAgICAgICAgICAgICBhbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBhdXRvbmVnb3RpYXRpb24sCisgICAgICAgICAgICAgICAgICAgIG9yIHdoZW4gYXV0b25lZ290aWF0aW9uIGlzIG5vdCBlbmFibGVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZHVwbGV4IG1vZGUgaXMgY29udHJvbGxlZCB1c2luZworICAgICAgICAgICAgICAgICAgICBpZk1hdURlZmF1bHRUeXBlLiAgV2hlbiBhdXRvbmVnb3RpYXRpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGFuZCBlbmFibGVkLCBkdXBsZXggbW9kZSBpcyBjb250cm9sbGVkCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIGlmTWF1QXV0b05lZ0FkdmVydGlzZWRCaXRzLiAgSW4gZWl0aGVyCisgICAgICAgICAgICAgICAgICAgIGNhc2UsIHRoZSBjdXJyZW50bHkgb3BlcmF0aW5nIGR1cGxleCBtb2RlIGlzCisgICAgICAgICAgICAgICAgICAgIHJlZmxlY3RlZCBib3RoIGluIHRoaXMgb2JqZWN0IGFuZCBpbiBpZk1hdVR5cGUuCisKKyAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgb2JqZWN0IHByb3ZpZGVzIHJlZHVuZGFudAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB3aXRoIGlmTWF1VHlwZS4gIE5vcm1hbGx5LCByZWR1bmRhbnQKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBhcmUgZGlzY291cmFnZWQuICBIb3dldmVyLCBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLCBpdCBhbGxvd3MgYSBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSB0aGUgZHVwbGV4IHN0YXR1cyBvZiBhbiBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8ga25vdyBldmVyeSBwb3NzaWJsZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICBpZk1hdVR5cGUuICBUaGlzIHdhcyBmZWx0IHRvIGJlIHN1ZmZpY2llbnRseQorICAgICAgICAgICAgICAgICAgICB2YWx1YWJsZSB0byBqdXN0aWZ5IHRoZSByZWR1bmRhbmN5LgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDEgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogRW51bSByYW5nZTogMy84LiBWYWx1ZXM6ICB1bmtub3duKDEpLCBoYWxmRHVwbGV4KDIpLCBmdWxsRHVwbGV4KDMpCisgKgorICogSXRzIHN5bnRheCBpcyBJTlRFR0VSIChiYXNlZCBvbiBwZXJsdHlwZSBJTlRFR0VSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0lOVEVHRVIuIFRoZSBDIHR5cGUgZGVjbCBpcyBsb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRHVwbGV4U3RhdHVzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzRHVwbGV4U3RhdHVzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzRHVwbGV4U3RhdHVzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzRHVwbGV4U3RhdHVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNEdXBsZXhTdGF0dXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0R1cGxleFN0YXR1c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNEdXBsZXhTdGF0dXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0R1cGxleFN0YXR1c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNEdXBsZXhTdGF0dXNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0R1cGxleFN0YXR1czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRHVwbGV4U3RhdHVzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5CisgKiBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHkgaXMgc3ViaWQgMjAgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMjAKKyAqIERlc2NyaXB0aW9uOgorJ3RydWUnIGZvciBpbnRlcmZhY2VzIG9wZXJhdGluZyBhdCBzcGVlZHMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgMTAwMCBNYi9zIHRoYXQgc3VwcG9ydCBSYXRlIENvbnRyb2wgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICBsb3dlcmluZyB0aGUgYXZlcmFnZSBkYXRhIHJhdGUgb2YgdGhlIE1BQworICAgICAgICAgICAgICAgICAgICBzdWJsYXllciwgd2l0aCBmcmFtZSBncmFudWxhcml0eSwgYW5kICdmYWxzZScKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDEgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogRW51bSByYW5nZTogMi84LiBWYWx1ZXM6ICB0cnVlKDEpLCBmYWxzZSgyKQorICoKKyAqIEl0cyBzeW50YXggaXMgVHJ1dGhWYWx1ZSAoYmFzZWQgb24gcGVybHR5cGUgSU5URUdFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9JTlRFR0VSLiBUaGUgQyB0eXBlIGRlY2wgaXMgbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIGxvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV9nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5IGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzCisgKiBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1cyBpcyBzdWJpZCAyMSBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4yMQorICogRGVzY3JpcHRpb246CitUaGUgY3VycmVudCBSYXRlIENvbnRyb2wgbW9kZSBvZiBvcGVyYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIE1BQyBzdWJsYXllciBvZiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAxICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqIEVudW0gcmFuZ2U6IDMvOC4gVmFsdWVzOiAgcmF0ZUNvbnRyb2xPZmYoMSksIHJhdGVDb250cm9sT24oMiksIHVua25vd24oMykKKyAqCisgKiBJdHMgc3ludGF4IGlzIElOVEVHRVIgKGJhc2VkIG9uIHBlcmx0eXBlIElOVEVHRVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fSU5URUdFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGxvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfZ2V0ICovCisKKworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTQzY2QzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICoKKyAqIEBmaWxlIGRvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKKyAqCisgKiBAYWRkdG9ncm91cCBnZXQKKyAqCisgKiBQcm90b3R5cGVzIGZvciBnZXQgZnVuY3Rpb25zCisgKgorICogQHsKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9EQVRBX0dFVF9ICisjZGVmaW5lIERPVDNTVEFUU1RBQkxFX0RBVEFfR0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNUYWJsZSBpcyBzdWJpZCAyIG9mIGRvdDMuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMiwgbGVuZ3RoOiA5CisgICAgICovCisgICAgLyoKKyAgICAgKiBpbmRleGVzCisgICAgICovCisKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNGQ1NFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNGQ1NFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzU1FFVGVzdEVycm9yc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c0V0aGVyQ2hpcFNldF9nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c0R1cGxleFN0YXR1c19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0R1cGxleFN0YXR1c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIpOworCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3QzU3RhdHNJbmRleF92YWwpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3QzU3RhdHNJbmRleF92YWwpOworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBET1QzU1RBVFNUQUJMRV9EQVRBX0dFVF9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuYyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMyZGEyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldC5jCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDc3ICQgb2YgJAorICoKKyAqICRJZDokCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGUuaCIKKworCisvKiogQGRlZmdyb3VwIGRhdGFfc2V0IGRhdGFfc2V0OiBSb3V0aW5lcyB0byBzZXQgZGF0YQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIHNldCB0aGUgdmFsdWUgZm9yIGluZGl2aWR1YWwgb2JqZWN0cy4gVGhlCisgKiByb3cgY29udGV4dCBpcyBwYXNzZWQsIGFsb25nIHdpdGggdGhlIG5ldyB2YWx1ZS4KKyAqIAorICogQHsKKyAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwMzM1NgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA3NyAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9EQVRBX1NFVF9ICisjZGVmaW5lIERPVDNTVEFUU1RBQkxFX0RBVEFfU0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX0RBVEFfU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZW51bXMuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGE3MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9lbnVtcy5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMgMTI1MjYgMjAwNS0wNy0xNSAyMjo0MToxNlogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIERPVDNTVEFUU1RBQkxFX0VOVU1TX0gKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfRU5VTVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE5PVEVTIG9uIGVudW1zCisgICAgICogPT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFZhbHVlIE1hcHBpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tCisgICAgICogSWYgdGhlIHZhbHVlcyBmb3IgeW91ciBkYXRhIHR5cGUgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGUKKyAgICAgKiBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgbWliLCB5b3Ugc2hvdWxkIG1hcCB0aGVtCisgICAgICogYmVsb3cuIEZvciBleGFtcGxlLCBhIGJvb2xlYW4gZmxhZyAoMS8wKSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkCisgICAgICogYXMgYSBUcnV0aFZhbHVlIGluIGEgTUlCLCB3aGljaCBtYXBzIHRvIHRoZSB2YWx1ZXMgKDEvMikuCisgICAgICoKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGVudW0gZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBkb3QzU3RhdHNEdXBsZXhTdGF0dXMgKElOVEVHRVIgLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIERPVDNTVEFUU0RVUExFWFNUQVRVU19FTlVNUworI2RlZmluZSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfRU5VTVMKKworI2RlZmluZSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfVU5LTk9XTiAgMQorI2RlZmluZSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfSEFMRkRVUExFWCAgMgorI2RlZmluZSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfRlVMTERVUExFWCAgMworCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU0RVUExFWFNUQVRVU19FTlVNUyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSAoVHJ1dGhWYWx1ZSAvIEFTTl9JTlRFR0VSKQorICoKKyAqIHNpbmNlIGEgVGV4dHVhbCBDb252ZW50aW9uIG1heSBiZSByZWZlcmVuY2VkIG1vcmUgdGhhbiBvbmNlIGluIGEKKyAqIE1JQiwgcHJvdGVjdCBhZ2FpbnQgcmVkZWZpbml0aW9ucyBvZiB0aGUgZW51bSB2YWx1ZXMuCisgKi8KKyNpZm5kZWYgVFJVVEhWQUxVRV9FTlVNUworI2RlZmluZSBUUlVUSFZBTFVFX0VOVU1TCisKKyNkZWZpbmUgVFJVVEhWQUxVRV9UUlVFICAxCisjZGVmaW5lIFRSVVRIVkFMVUVfRkFMU0UgIDIKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUUlVUSFZBTFVFX0VOVU1TICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQorICogZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXMgKElOVEVHRVIgLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIERPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX0VOVU1TCisjZGVmaW5lIERPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX0VOVU1TCisKKyNkZWZpbmUgRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfUkFURUNPTlRST0xPRkYgIDEKKyNkZWZpbmUgRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfUkFURUNPTlRST0xPTiAgMgorI2RlZmluZSBET1QzU1RBVFNSQVRFQ09OVFJPTFNUQVRVU19VTktOT1dOICAzCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfRU5VTVMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTVEFCTEVfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3NDFmMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwxMTg3IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRISVMgRklMRSBET0VTIE5PVCBDT05UQUlOIEFOWSBVU0VSIEVESVRBQkxFIENPREUuICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRIRSBHRU5FUkFURUQgQ09ERSBJUyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiwgQU5EICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgIElTIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgV0FSTklORyBJTiBGVVRVUkUgUkVMRUFTRVMuICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlLmgiCisKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBkb3QzU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c1RhYmxlIGlzIHN1YmlkIDIgb2YgZG90My4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMiwgbGVuZ3RoOiA5CisgKi8KK3R5cGVkZWYgc3RydWN0IGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqdXNlcl9jdHg7CisKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIHRibF9pbmZvOworCisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzIGFjY2Vzc19tdWx0aXBsZXhlcjsKKworfSBkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4OworCitzdGF0aWMgZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCBkb3QzU3RhdHNUYWJsZV9pZl9jdHg7CisKK3N0YXRpYyB2b2lkICAgICBfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQoZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmX2N0eCk7CitzdGF0aWMgdm9pZCAgICAKK19kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCk7CisKKworbmV0c25tcF9jb250YWluZXIgKgorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQoreworICAgIHJldHVybiBkb3QzU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyOworfQorCitkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQoreworICAgIHJldHVybiBkb3QzU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHg7Cit9CisKK2RvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCitkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKm9sZCA9IGRvdDNTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eDsKKyAgICBkb3QzU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CisgICAgcmV0dXJuIG9sZDsKK30KKworaW50Citkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQoreworICAgIHJldHVybiBDT05UQUlORVJfU0laRShkb3QzU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKK30KKworLyoKKyAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcworICovCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2RvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2RvdDNTdGF0c1RhYmxlX29iamVjdF9sb29rdXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzOworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGRvdDNTdGF0c1RhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK19kb3QzU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZShkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBmbGFncykKK3sKKyAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX21ldGhvZHMgKmFjY2Vzc19tdWx0aXBsZXhlciA9CisgICAgICAgICZkb3QzU3RhdHNUYWJsZV9pZl9jdHguYWNjZXNzX211bHRpcGxleGVyOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRibF9pbmZvID0KKyAgICAgICAgJmRvdDNTdGF0c1RhYmxlX2lmX2N0eC50YmxfaW5mbzsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXI7CisgICAgaW50ICAgICAgICAgICAgIG1mZF9tb2RlcyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X2RvdDNTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlIiwgImNhbGxlZFxuIikpOworCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogc2F2ZSBpbnRlcmZhY2UgY29udGV4dCBmb3IgZG90M1N0YXRzVGFibGUKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFNldHRpbmcgdXAgdGhlIHRhYmxlJ3MgZGVmaW5pdGlvbgorICAgICAqLworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRibF9pbmZvLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGluZGV4OiBkb3QzU3RhdHNJbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgLyoKKyAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcworICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAorICAgICAqLworICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gRE9UM1NUQVRTVEFCTEVfTUlOX0NPTDsKKyAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IERPVDNTVEFUU1RBQkxFX01BWF9DT0w7CisKKyAgICAvKgorICAgICAqIHNhdmUgdXNlcnMgY29udGV4dAorICAgICAqLworICAgIGRvdDNTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCA9IHJlZ19wdHI7CisKKyAgICAvKgorICAgICAqIGNhbGwgZGF0YSBhY2Nlc3MgaW5pdGlhbGl6YXRpb24gY29kZQorICAgICAqLworICAgIGRvdDNTdGF0c1RhYmxlX2luaXRfZGF0YShyZWdfcHRyKTsKKworICAgIC8qCisgICAgICogc2V0IHVwIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQoJmRvdDNTdGF0c1RhYmxlX2lmX2N0eCk7CisgICAgaWYgKE5VTEwgPT0gZG90M1N0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGluaXRpYWxpemUgY29udGFpbmVyIGZvciBkb3QzU3RhdHNUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFjY2Vzc19tdWx0aXBsZXhlcjogUkVRVUlSRUQgd3JhcHBlciBmb3IgZ2V0IHJlcXVlc3QgaGFuZGxpbmcKKyAgICAgKi8KKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXAgPSBfbWZkX2RvdDNTdGF0c1RhYmxlX29iamVjdF9sb29rdXA7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5nZXRfdmFsdWVzID0gX21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzOworCisgICAgLyoKKyAgICAgKiBubyB3cmFwcGVycyB5ZXQKKyAgICAgKi8KKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0ID0gX21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCA9IF9tZmRfZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0OworCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogQ3JlYXRlIGEgcmVnaXN0cmF0aW9uLCBzYXZlIG91ciByZWcgZGF0YSwgcmVnaXN0ZXIgdGFibGUuCisgICAgICovCisgICAgREVCVUdNU0dUTCgoImRvdDNTdGF0c1RhYmxlOmluaXRfZG90M1N0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyBkb3QzU3RhdHNUYWJsZSBhcyBhIG1pYnMtZm9yLWR1bW1pZXMgdGFibGUuXG4iKSk7CisgICAgaGFuZGxlciA9CisgICAgICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbXVsdGlwbGV4ZXJfZ2V0KGFjY2Vzc19tdWx0aXBsZXhlcik7CisgICAgcmVnaW5mbyA9CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKCJkb3QzU3RhdHNUYWJsZSIsIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfb2lkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX0JBQllfU1RFUCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSByZWdpbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBkb3QzU3RhdHNUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVnaW5mby0+bXlfcmVnX3ZvaWQgPSAmZG90M1N0YXRzVGFibGVfaWZfY3R4OworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNldCB1cCBiYWJ5IHN0ZXBzIGhhbmRsZXIsIGNyZWF0ZSBpdCBhbmQgaW5qZWN0IGl0CisgICAgICovCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X2xvb2t1cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9PQkpFQ1RfTE9PS1VQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X3N5bnRheF9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfT0JKRUNUOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cHJlX3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUFJFX1JFUVVFU1Q7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fc2V0dXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRVUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NsZWFudXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DTEVBTlVQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fc2V0cykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX1NFVFM7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5yb3dfY3JlYXRpb24pCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUk9XX0NSRUFURTsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfQ09OU0lTVEVOQ1k7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCByb3dfbWVyZ2UgaGVscGVyIHdpdGggcHJlZml4IHJvb3RvaWRfbGVuICsgMiAoZW50cnkuY29sKQorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlcihyZWdpbmZvLT5yb290b2lkX2xlbiArIDIpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGJsX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGlmIChOVUxMICE9IGRvdDNTdGF0c1RhYmxlX2lmX2N0eC5jYWNoZSkgeworICAgICAgICBoYW5kbGVyID0gbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChkb3QzU3RhdHNUYWJsZV9pZl9jdHguY2FjaGUpOworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworICAgIH0KKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgdGFibGUKKyAgICAgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRibF9pbmZvKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZG90M1N0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBkb3QzU3RhdHNUYWJsZQorICovCit2b2lkCitfZG90M1N0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHJlZ19wdHIpCit7CisgICAgLyoKKyAgICAgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bigmZG90M1N0YXRzVGFibGVfaWZfY3R4KTsKK30KKwordm9pZAorZG90M1N0YXRzVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbyAqdmMpCit7CisgICAgZG90M1N0YXRzVGFibGVfaWZfY3R4LnRibF9pbmZvLnZhbGlkX2NvbHVtbnMgPSB2YzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfdmFsaWRfY29sdW1uc19zZXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGNvbnZlcnQgdGhlIGluZGV4IGNvbXBvbmVudCBzdG9yZWQgaW4gdGhlIGNvbnRleHQgdG8gYW4gb2lkCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9kb3QzU3RhdHNJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfZG90M1N0YXRzSW5kZXgsIDB4MDAsIHNpemVvZih2YXJfZG90M1N0YXRzSW5kZXgpKTsKKyAgICB2YXJfZG90M1N0YXRzSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2RvdDNTdGF0c0luZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZG90M1N0YXRzSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvSCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9kb3QzU3RhdHNJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmRvdDNTdGF0c0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+ZG90M1N0YXRzSW5kZXgpKTsKKworCisgICAgZXJyID0gYnVpbGRfb2lkX25vYWxsb2Mob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLCAmb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsICZ2YXJfZG90M1N0YXRzSW5kZXgpOworICAgIGlmIChlcnIpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciAlZCBjb252ZXJ0aW5nIGluZGV4IHRvIG9pZFxuIiwgZXJyKTsKKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9kb3QzU3RhdHNJbmRleCk7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQgKi8KKworLyoqCisgKiBleHRyYWN0IGRvdDNTdGF0c1RhYmxlIGluZGV4ZXMgZnJvbSBhIG5ldHNubXBfaW5kZXgKKyAqCisgKiBAcmV0dmFsIFNOTVBfRVJSX05PRVJST1IgIDogbm8gZXJyb3IKKyAqIEByZXR2YWwgU05NUF9FUlJfR0VORVJSICAgOiBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGRvdDNTdGF0c0luZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL0gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2RvdDNTdGF0c0luZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9kb3QzU3RhdHNJbmRleCwgMHgwMCwgc2l6ZW9mKHZhcl9kb3QzU3RhdHNJbmRleCkpOworICAgIHZhcl9kb3QzU3RhdHNJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfZG90M1N0YXRzSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHBhcnNlIHRoZSBvaWQgaW50byB0aGUgaW5kaXZpZHVhbCBpbmRleCBjb21wb25lbnRzCisgICAgICovCisgICAgZXJyID0gcGFyc2Vfb2lkX2luZGV4ZXMob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXJfZG90M1N0YXRzSW5kZXgpOworICAgIGlmIChlcnIgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAvKgorICAgICAgICAgKiBjb3B5IG91dCB2YWx1ZXMKKyAgICAgICAgICovCisgICAgICAgIG1pYl9pZHgtPmRvdDNTdGF0c0luZGV4ID0KKyAgICAgICAgICAgICooKGxvbmcgKikgdmFyX2RvdDNTdGF0c0luZGV4LnZhbC5zdHJpbmcpOworCisKKyAgICB9CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfZG90M1N0YXRzSW5kZXgpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQgKi8KKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGludGVybmFsCisgKiBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGEgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eAorICovCitkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKK2RvdDNTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgodm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhICIKKyAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHguXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzID0gcm93cmVxX2N0eC0+b2lkX3RtcDsKKworICAgIHJvd3JlcV9jdHgtPmRvdDNTdGF0c1RhYmxlX2RhdGFfbGlzdCA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIGlmIHdlIGFsbG9jYXRlZCBkYXRhLCBjYWxsIGluaXQgcm91dGluZQorICAgICAqLworICAgIGlmICghKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREFUQV9GUk9NX1VTRVIpKSB7CisgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0KKyAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdChyb3dyZXFfY3R4LCB1c2VyX2luaXRfY3R4KSkgeworICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcm93cmVxX2N0eCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCAqLworCisvKgorICogQGludGVybmFsCisgKiByZWxlYXNlIHJlc291cmNlcyBmb3IgYSBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKi8KK3ZvaWQKK2RvdDNTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChyb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogZnJlZSBpbmRleCBvaWQgcG9pbnRlcgorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgIT0gcm93cmVxX2N0eC0+b2lkX3RtcCkKKyAgICAgICAgZnJlZShyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMpOworCisgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2ZpcnN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAic2tpcHBpbmcgYWRkaXRpb25hbCBwcmVfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICByYyA9IGRvdDNTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGRvdDNTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJkb3QzU3RhdHNUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2RvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHJlbGVhc2Ugcm93IGNvbnRleHQsIGlmIGRlbGV0ZWQKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eCAmJiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ERUxFVEVEKSkKKyAgICAgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiB3YWl0IGZvciBsYXN0IGNhbGwgYmVmb3JlIGNhbGxpbmcgdXNlcgorICAgICAqLworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19sYXN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAid2FpdGluZyBmb3IgbGFzdCBwb3N0X3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcGFja2V0X3JjID0gbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfZXJyb3IoYWd0cmVxX2luZm8tPmFzcCwgMCk7CisgICAgcmMgPSBkb3QzU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoZG90M1N0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF9yYyk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJkb3QzU3RhdHNUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdFxuIiwgcmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9kb3QzU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9kb3QzU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBvdXIgY29udGV4dCBmcm9tIG1mZAorICAgICAqIGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKmlmX2N0eCA9CisgICAgICogICAgICAgICAgICAgKGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKilyZWdpbmZvLT5teV9yZWdfdm9pZDsKKyAgICAgKi8KKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0NSRUFUSU9OOworICAgIH0KKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIHJjKTsKKyAgICBlbHNlCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd19wcmVwKHJvd3JlcV9jdHgpOworCisgICAgcmV0dXJuIFNOTVBfVkFMSURBVEVfRVJSKHJjKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9kb3QzU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEBpbnRlcm5hbAorICogUmV0cmlldmUgdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLAorICAgICAgICAgICAgICAgICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogKElOREVYKSBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNJTkRFWDoKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihsb25nKTsKKyAgICAgICAgKCp2YXItPnZhbC5pbnRlZ2VyKSA9IHJvd3JlcV9jdHgtPnRibF9pZHguZG90M1N0YXRzSW5kZXg7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0FsaWdubWVudEVycm9ycygyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNBTElHTk1FTlRFUlJPUlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0FMSUdOTUVOVEVSUk9SU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c0FsaWdubWVudEVycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRkNTRXJyb3JzKDMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0ZDU0VSUk9SUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0ZDU0Vycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzRkNTRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMoNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTU0lOR0xFQ09MTElTSU9ORlJBTUVTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNTSU5HTEVDT0xMSVNJT05GUkFNRVNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMoNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTTVVMVElQTEVDT0xMSVNJT05GUkFNRVM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzU1FFVGVzdEVycm9ycyg2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNTUUVURVNURVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNTUUVURVNURVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c1NRRVRlc3RFcnJvcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMoNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNERUZFUlJFRFRSQU5TTUlTU0lPTlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTTEFURUNPTExJU0lPTlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0xBVEVDT0xMSVNJT05TX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zKDkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMoMTApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycygxMSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTQ0FSUklFUlNFTlNFRVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MoMTMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1M6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzRnJhbWVUb29Mb25ncykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzRnJhbWVUb29Mb25nc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycygxNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRXRoZXJDaGlwU2V0KDE3KS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNFVEhFUkNISVBTRVQ6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0VUSEVSQ0hJUFNFVF9GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNFdGhlckNoaXBTZXQpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX09CSkVDVF9JRDsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNFdGhlckNoaXBTZXRfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2lkICoqKSAmIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbF9sZW4pOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnMoMTgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU1NZTUJPTEVSUk9SUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTU1lNQk9MRVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c1N5bWJvbEVycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzU3ltYm9sRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNEdXBsZXhTdGF0dXMoMTkpL0lOVEVHRVIvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNEVVBMRVhTVEFUVVM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0RVUExFWFNUQVRVU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNEdXBsZXhTdGF0dXMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9JTlRFR0VSOworICAgICAgICByYyA9IGRvdDNTdGF0c0R1cGxleFN0YXR1c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5KDIwKS9UcnV0aFZhbHVlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL3cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xBQklMSVRZOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNSQVRFQ09OVFJPTEFCSUxJVFlfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5KSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzKDIxKS9JTlRFR0VSL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL3cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChET1QzU1RBVFNUQUJMRV9NSU5fQ09MIDw9IGNvbHVtbgorICAgICAgICAgICAgJiYgY29sdW1uIDw9IERPVDNTVEFUU1RBQkxFX01BWF9DT0wpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiYXNzdW1lIGNvbHVtbiAlZCBpcyByZXNlcnZlZFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByYyA9IE1GRF9TS0lQOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfZG90M1N0YXRzVGFibGVfZ2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CisgICAgdm9pZCAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAodm9pZCAqKTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgREVCVUdNU0dUTCgoIjk6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzIiwKKyAgICAgICAgICAgICAgICAiZXhpc3RzICV1XG4iLCByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzKSk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIGlmIChNRkRfU0tJUCA9PSByYykgeworICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJOVUxMIHZhcmJpbmQgZGF0YSBwb2ludGVyIVxuIik7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSBidWZmZXIgd2Fzbid0IHVzZWQgcHJldmlvdXNseSBmb3IgdGhlIG9sZCBkYXRhIChpLmUuIGl0CisgICAgICAgICAqIHdhcyBhbGxjb2F0ZWQgbWVtb3J5KSAgYW5kIHRoZSBnZXQgcm91dGluZSByZXBsYWNlZCB0aGUgcG9pbnRlciwKKyAgICAgICAgICogd2UgbmVlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG9sZF9zdHJpbmcgJiYgKG9sZF9zdHJpbmcgIT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSAmJgorICAgICAgICAgICAgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgIT0gb2xkX3N0cmluZykpIHsKKyAgICAgICAgICAgIGlmIChkYXRhRnJlZUhvb2spCisgICAgICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spIChvbGRfc3RyaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcmVlKG9sZF9zdHJpbmcpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTRVQgUFJPQ0VTU0lORyBOT1QgQVBQTElDQUJMRSAocGVyIE1JQiBvciB1c2VyIHNldHRpbmcpCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERBVEEgQUNDRVNTCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgICAgIF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcik7CisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBmb3IgZG90M1N0YXRzVGFibGVfY2FjaGVfbG9hZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgcmV0dXJuIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2xvYWQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfY2FjaGVfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBpbiBkb3QzU3RhdHNUYWJsZV9jYWNoZV9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWM7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfaXRlbV9mcmVlKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LCB2b2lkICpjb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfY29udGFpbmVyX2l0ZW1fZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2l0ZW1fZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfY29udGFpbmVyX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGluIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBmcmVlIGFsbCBpdGVtcy4gaW5lZmZpY2llbnQsIGJ1dCBlYXN5LgorICAgICAqLworICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfY29udGFpbmVyX2l0ZW1fZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogY2FjaGUgaW5pdAorICAgICAqLworICAgIGlmX2N0eC0+Y2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgICAgLyogdGltZW91dCBpbiBzZWNvbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCBfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9vaWRfc2l6ZSk7CisKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgZG90M1N0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCgmaWZfY3R4LT5jb250YWluZXIsIGlmX2N0eC0+Y2FjaGUpOworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CisgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJkb3QzU3RhdHNUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKKyAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChOVUxMICE9IGlmX2N0eC0+Y2FjaGUpCisgICAgICAgIGlmX2N0eC0+Y2FjaGUtPm1hZ2ljID0gKHZvaWQgKikgaWZfY3R4LT5jb250YWluZXI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2h1dGRvd24gdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CisKKyAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaWZfY3R4LT5jb250YWluZXIpOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGlmX2N0eC0+Y29udGFpbmVyKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKworZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCitkb3QzU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9PSURfTEVOXTsKKyAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICAvKgorICAgICAqIHNldCB1cCBzdG9yYWdlIGZvciBPSUQKKyAgICAgKi8KKyAgICBvaWRfaWR4Lm9pZHMgPSBvaWRfdG1wOworICAgIG9pZF9pZHgubGVuID0gc2l6ZW9mKG9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQKKyAgICAgKi8KKyAgICByYyA9IGRvdDNTdGF0c1RhYmxlX2luZGV4X3RvX29pZCgmb2lkX2lkeCwgbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChkb3QzU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMmI1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKy8qKiBAaW5ncm91cCBpbnRlcmZhY2U6IFJvdXRpbmVzIHRvIGludGVyZmFjZSB0byBOZXQtU05NUAorICoKKyAqIFx3YXJuaW5nIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBjYWxsZWQgZGlyZWN0bHksCisgKiAgICAgICAgICBvciB1c2VkIHRvIGludGVycHJldCBmdW5jdGlvbmFsaXR5LiBJdCBpcyBzdWJqZWN0IHRvCisgKiAgICAgICAgICBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAKKyAqIEB7CisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlLmgiCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqIFBVQkxJQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZSAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2RvdDNTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgdV9sb25nIGZsYWdzKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2RvdDNTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4KTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAqZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldChkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpOworCisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqZG90M1N0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCh2b2lkICopOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKworICAgIC8qCisgICAgICogYWNjZXNzIHRvIGNlcnRhaW4gaW50ZXJuYWxzLiB1c2Ugd2l0aCBjYXV0aW9uIQorICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2Yyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTVEFCTEVfSU5URVJGQUNFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9vaWRzLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX29pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWIxNmNlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9vaWRzLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLW9pZHMubTJjIDEyODU1IDIwMDUtMDktMjcgMTU6NTY6MDhaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9PSURTX0gKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfT0lEU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBkb3QzU3RhdHNUYWJsZSAKKyAgICAgKi8KKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfT0lEICAgICAgICAgICAgICAxLDMsNiwxLDIsMSwxMCw3LDIKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTSU5ERVggICAgICAgICAxCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNJTkRFWF9GTEFHICAgICgweDEgPDwgMCkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTQUxJR05NRU5URVJST1JTICAgICAgICAgMgorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTQUxJR05NRU5URVJST1JTX0ZMQUcgICAgKDB4MSA8PCAxKQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNGQ1NFUlJPUlMgICAgICAgICAzCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNGQ1NFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDIpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FUyAgICAgICAgIDQKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FU19GTEFHICAgICgweDEgPDwgMykKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTTVVMVElQTEVDT0xMSVNJT05GUkFNRVMgICAgICAgICA1CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNNVUxUSVBMRUNPTExJU0lPTkZSQU1FU19GTEFHICAgICgweDEgPDwgNCkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTU1FFVEVTVEVSUk9SUyAgICAgICAgIDYKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NRRVRFU1RFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDUpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OUyAgICAgICAgIDcKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OU19GTEFHICAgICgweDEgPDwgNikKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTTEFURUNPTExJU0lPTlMgICAgICAgICA4CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNMQVRFQ09MTElTSU9OU19GTEFHICAgICgweDEgPDwgNykKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRVhDRVNTSVZFQ09MTElTSU9OUyAgICAgICAgIDkKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlNfRkxBRyAgICAoMHgxIDw8IDgpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlMgICAgICAgICAxMAorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNUUkFOU01JVEVSUk9SU19GTEFHICAgICgweDEgPDwgOSkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTQ0FSUklFUlNFTlNFRVJST1JTICAgICAgICAgMTEKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHICAgICgweDEgPDwgMTApCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1MgICAgICAgICAxMworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRlJBTUVUT09MT05HU19GTEFHICAgICgweDEgPDwgMTIpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDUkVDRUlWRUVSUk9SUyAgICAgICAgIDE2CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDE1KQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNFVEhFUkNISVBTRVQgICAgICAgICAxNworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRVRIRVJDSElQU0VUX0ZMQUcgICAgKDB4MSA8PCAxNikKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTU1lNQk9MRVJST1JTICAgICAgICAgMTgKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NZTUJPTEVSUk9SU19GTEFHICAgICgweDEgPDwgMTcpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0RVUExFWFNUQVRVUyAgICAgICAgIDE5CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNEVVBMRVhTVEFUVVNfRkxBRyAgICAoMHgxIDw8IDE4KQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNSQVRFQ09OVFJPTEFCSUxJVFkgICAgICAgICAyMAorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xBQklMSVRZX0ZMQUcgICAgKDB4MSA8PCAxOSkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVMgICAgICAgICAyMQorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfRkxBRyAgICAoMHgxIDw8IDIwKQorCisKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfTUlOX0NPTCAgIENPTFVNTl9ET1QzU1RBVFNJTkRFWAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9NQVhfQ09MICAgQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTCisKKwkKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX09JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjkyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmgKQEAgLTAsMCArMSw2NSBAQAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8aWZhZGRycy5oPgorCisvKiB1c2Uga2VybmVsJ3MgZXRodG9vbC5oICAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgX191NjQgdTY0OwordHlwZWRlZiBfX3UzMiB1MzI7Cit0eXBlZGVmIF9fdTE2IHUxNjsKK3R5cGVkZWYgX191OCB1ODsKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKy8qIHN0cnVjdHVyZSBmb3Igc3RvcmluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIGluIHRoZSBzeXN0ZW0gKi8KKworc3RydWN0IGlmbmFtZSB7CisgICAgc3RydWN0IGlmbmFtZSAqaWZuX25leHQ7CisgICAgY2hhciBuYW1lIFtJRl9OQU1FU0laRV07Cit9OworCitzdHJ1Y3QgaWZuYW1lICpkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQgKHN0cnVjdCBpZm5hbWUgKiwgaW50ICopOworaW50IGRvdDNzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUgKHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCk7CitpbnQgZG90M3N0YXRzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCAoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBfZG90M1N0YXRzX2lvY3RsX2dldChpbnQgZmQsIGludCB3aGljaCwgc3RydWN0IGlmcmVxICppZnJxLCBjb25zdCBjaGFyKiBuYW1lKTsKK2ludCBpbnRlcmZhY2VfaW9jdGxfZG90M3N0YXRzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBpbnQgZmQsIGNvbnN0IGNoYXIqIG5hbWUpOworaW50IGludGVyZmFjZV9pb2N0bF9kb3Qzc3RhdHNfZHVwbGV4X2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBpbnQgZmQsIGNvbnN0IGNoYXIqIG5hbWUpOworCisKKy8qIGZvciBtYWludGFpbmFiaWxpdHkgKi8KKworI2RlZmluZSBJTlRFTF9SRUNFSVZFX0FMSUdOX0VSUk9SUyAgICAgICAgICAgICAgICAgICAgICAicnhfYWxpZ25fZXJyb3JzIgorI2RlZmluZSBCUk9BRENPTV9SRUNFSVZFX0FMSUdOX0VSUk9SUyAgICAgICAgICAgICAgICAgICBJTlRFTF9SRUNFSVZFX0FMSUdOX0VSUk9SUworCisjZGVmaW5lIElOVEVMX1RSQU5TTUlUX01VTFRJUExFX0NPTExJU0lPTlMgICAgICAgICAgICAgICJ0eF9tdWx0aV9jb2xsX29rIgorI2RlZmluZSBCUk9BRENPTV9UUkFOU01JVF9NVUxUSVBMRV9DT0xMSVNJT05TX0JOWDIgICAgICAidHhfbXVsdGlfY29sbGlzaW9ucyIKKyNkZWZpbmUgQlJPQURDT01fVFJBTlNNSVRfTVVMVElQTEVfQ09MTElTSU9OU19URzMgICAgICAgInR4X211bHRfY29sbGlzaW9ucyIKKworI2RlZmluZSBJTlRFTF9UUkFOU01JVF9MQVRFX0NPTExJU0lPTlMgICAgICAgICAgICAgICAgICAidHhfYWJvcnRfbGF0ZV9jb2xsIgorI2RlZmluZSBCUk9BRENPTV9UUkFOU01JVF9MQVRFX0NPTExJU0lPTlMgICAgICAgICAgICAgICAidHhfbGF0ZV9jb2xsaXNpb25zIgorCisjZGVmaW5lIElOVEVMX1RSQU5TTUlUX1NJTkdMRV9DT0xMSVNJT05TICAgICAgICAgICAgICAgICJ0eF9zaW5nbGVfY29sbF9vayIKKyNkZWZpbmUgQlJPQURDT01fVFJBTlNNSVRfU0lOR0xFX0NPTExJU0lPTlMgICAgICAgICAgICAgInR4X3NpbmdsZV9jb2xsaXNpb25zIgorCisjZGVmaW5lIEJST0FEQ09NX1RSQU5TTUlUX0VYQ0VTU19DT0xMSVNJT05TX0JOWDIgICAgICAgICJ0eF9leGNlc3NfY29sbGlzaW9ucyIKKyNkZWZpbmUgQlJPQURDT01fVFJBTlNNSVRfRVhDRVNTX0NPTExJU0lPTlNfVEczICAgICAgICAgInR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25zIgorCisKKyNkZWZpbmUgRE9UM1NUQVRTQUxJR05NRU5URVJST1JTKHgpICAgICAgICAgICAgc3Ryc3RyKHgsIElOVEVMX1JFQ0VJVkVfQUxJR05fRVJST1JTKQorCisjZGVmaW5lIERPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTKHgpICAgIChzdHJzdHIoeCwgSU5URUxfVFJBTlNNSVRfTVVMVElQTEVfQ09MTElTSU9OUykpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnN0cih4LCBCUk9BRENPTV9UUkFOU01JVF9NVUxUSVBMRV9DT0xMSVNJT05TX0JOWDIpKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJzdHIoeCwgQlJPQURDT01fVFJBTlNNSVRfTVVMVElQTEVfQ09MTElTSU9OU19URzMpKQorCisjZGVmaW5lIERPVDNTVEFUU0xBVEVDT0xMSVNJT05TKHgpICAgICAgICAgICAgIChzdHJzdHIoeCwgSU5URUxfVFJBTlNNSVRfTEFURV9DT0xMSVNJT05TKSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Ryc3RyKHgsIEJST0FEQ09NX1RSQU5TTUlUX0xBVEVfQ09MTElTSU9OUykpCisKKyNkZWZpbmUgRE9UM1NUQVRTU0lOR0xFQ09MTElTSU9ORlJBTUVTKHgpICAgICAgKHN0cnN0cih4LCBJTlRFTF9UUkFOU01JVF9TSU5HTEVfQ09MTElTSU9OUykpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnN0cih4LCBCUk9BRENPTV9UUkFOU01JVF9TSU5HTEVfQ09MTElTSU9OUykpCisKKyNkZWZpbmUgRE9UM1NUQVRTRVhDRVNTSVZFQ09MTElTSU9OUyh4KSAgICAgICAgKHN0cnN0cih4LCBCUk9BRENPTV9UUkFOU01JVF9FWENFU1NfQ09MTElTSU9OU19CTlgyKSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Ryc3RyKHgsIEJST0FEQ09NX1RSQU5TTUlUX0VYQ0VTU19DT0xMSVNJT05TX1RHMykpCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jCmluZGV4IGRhZWQ4ZjMuLmNjNmEwNGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYwpAQCAtNjUsOCArNjUsMTggQEAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkZWxldGVfdGFibGVfZGF0YV9zZXQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXRfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUpCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQ7CisKIC8qCiAgKiBvdXIgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYXV0b21hdGljYWxseSBjYWxsZWQgYnkgdGhlIGFnZW50IAogICovCkBAIC03Niw3ICs4Niw2IEBACiB2b2lkCiBpbml0X2RhdGFfc2V0KHZvaWQpCiB7Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0OwogICAgIG5ldHNubXBfdGFibGVfcm93ICpyb3c7CiAKICAgICAvKgpAQCAtMjA0LDMgKzIxMywxMSBAQAogCiAgICAgREVCVUdNU0dUTCgoImV4YW1wbGVfZGF0YV9zZXQiLCAiRG9uZSBpbml0aWFsaXppbmcuXG4iKSk7CiB9CisKK3ZvaWQKK3NodXRkb3duX2RhdGFfc2V0KHZvaWQpCit7CisgICAgbmV0c25tcF91bnJlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZSh0YWJsZV9zZXQsIE5VTEwpOworICAgIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KHRhYmxlX3NldCk7CisgICAgdGFibGVfc2V0ID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmggYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oCmluZGV4IGU1NmY2MDAuLmM5Y2Y4YjIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaApAQCAtNiw2ICs2LDcgQEAKICNlbmRpZgogCiB2b2lkICAgICAgICAgICAgaW5pdF9kYXRhX3NldCh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9kYXRhX3NldCh2b2lkKTsKIAogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYwppbmRleCA0ODk1MzkwLi41ZDU0NTY5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5jCkBAIC0xNzIsNiArMTcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkZWxheV90aW1lKSk7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIC8qCiAgICAgICAgICAqIGNoZWNrIHR5cGUgCkBAIC0yMjMsNyArMjI0LDcgQEAKICAgICAgICAgICogdXBkYXRlIGN1cnJlbnQgdmFsdWUgCiAgICAgICAgICAqLwogICAgICAgICBkZWxheV90aW1lID0gKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcik7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIGRlbGF5X3RpbWUgLT4gJWRcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIGRlbGF5X3RpbWUgLT4gJWxkXG4iLAogICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lKSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yNDYsNiArMjQ3LDcgQEAKICAgICAgICAgICogd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBhY3R1YWxseSBkbyBoZXJlIAogICAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYwppbmRleCAwY2U4MTdiLi5kZDk3ZGFmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jCkBAIC0xNiwzOCArMTYsMTMgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotLyoKLSAqIG5lZWRlZCBieSB1dGlsX2Z1bmNzLmggCi0gKi8KLSNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NZU19USU1FX0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4KLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAvKgogICogaGVhZGVyX2dlbmVyaWMoKSBjb21lcyBmcm9tIGhlcmUgCiAgKi8KLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiAvKgogICogaW5jbHVkZSBvdXIgLmggZmlsZSAKQEAgLTEwNiw3ICs4MSw3IEBACiAgICAgICogICAgICAyOiBBU05fT0NURVRfU1RSOgogICAgICAqICAgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCiAgICAgICogICAgICAgICAgVmFsaWQgdHlwZXMgYXJlIGxpc3RlZCBpbiA8c25tcF9pbXBsLmg+Ci0gICAgICogICAgICAzOiBST05MWSAob3IgUldSSVRFKToKKyAgICAgKiAgICAgIDM6IE5FVFNOTVBfT0xEQVBJX1JPTkxZIChvciBORVRTTk1QX09MREFQSV9SV1JJVEUpOgogICAgICAqICAgICAgICAgIFdoZXRoZXIgdGhpcyBvYmplY3QgY2FuIGJlIFNFVCBvciBub3QuCiAgICAgICogICAgICA0OiB2YXJfZXhhbXBsZToKICAgICAgKiAgICAgICAgICBUaGUgY2FsbGJhY2sgcm91dGluZSwgdXNlZCB3aGVuIHRoZSBvYmplY3QgaXMgcXVlcmllZC4KQEAgLTEyMiwxNSArOTcsMjQgQEAKICAgICAgKiAgICAgICAgICAgIHRvIG9idGFpbiB0aGUgZnVsbCBPSUQgb2YgZWFjaCBlbnRyeS4KICAgICAgKi8KIHN0cnVjdCB2YXJpYWJsZTIgZXhhbXBsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7RVhBTVBMRVNUUklORywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leGFtcGxlLCAxLCB7MX19LAotICAgIHtFWEFNUExFSU5URUdFUiwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4YW1wbGUsIDIsIHsyLCAxfX0sCi0gICAge0VYQU1QTEVPQkpFQ1RJRCwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9leGFtcGxlLCAyLCB7MiwgMn19LAotICAgIHtFWEFNUExFVElNRVRJQ0tTLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHszfX0sCi0gICAge0VYQU1QTEVJUEFERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfZXhhbXBsZSwgMSwgezR9fSwKLSAgICB7RVhBTVBMRUNPVU5URVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHs1fX0sCi0gICAge0VYQU1QTEVHQVVHRSwgQVNOX0dBVUdFLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHs2fX0sCi0gICAge0VYQU1QTEVUUklHR0VSVFJBUCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4YW1wbGUsIDEsIHs3fX0sCi0gICAge0VYQU1QTEVUUklHR0VSVFJBUDIsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leGFtcGxlLCAxLCB7OH19CisgICAge0VYQU1QTEVTVFJJTkcsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhhbXBsZSwgMSwgezF9fSwKKyAgICB7RVhBTVBMRUlOVEVHRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leGFtcGxlLCAyLCB7MiwgMX19LAorICAgIHtFWEFNUExFT0JKRUNUSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhhbXBsZSwgMiwgezIsIDJ9fSwKKyAgICB7RVhBTVBMRVRJTUVUSUNLUywgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leGFtcGxlLCAxLCB7M319LAorICAgIHtFWEFNUExFSVBBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4YW1wbGUsIDEsIHs0fX0sCisgICAge0VYQU1QTEVDT1VOVEVSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leGFtcGxlLCAxLCB7NX19LAorICAgIHtFWEFNUExFR0FVR0UsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leGFtcGxlLCAxLCB7Nn19LAorICAgIHtFWEFNUExFVFJJR0dFUlRSQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leGFtcGxlLCAxLCB7N319LAorICAgIHtFWEFNUExFVFJJR0dFUlRSQVAyLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhhbXBsZSwgMSwgezh9fQogfTsKIAogICAgIC8qCkBAIC0zMzksNyArMzIzLDcgQEAKICAgICAgKi8KICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgRVhBTVBMRVNUUklORzoKLSAgICAgICAgc3ByaW50ZihzdHJpbmcsIGV4YW1wbGVfc3RyKTsKKyAgICAgICAgc3RyY3B5KHN0cmluZywgZXhhbXBsZV9zdHIpOwogICAgICAgICAvKgogICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgYW5zd2VyIHdpbGwgYmUgYW4KICAgICAgICAgICogIGludGVnZXIgZG9lcyBub3QgaG9sZCB0cnVlIGluIHRoaXMgY2FzZSwgc28gdGhlIGxlbmd0aApAQCAtNDY4LDEzICs0NTIsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhcl92YWxfbGVuID4gc2l6ZW9mKGxvbmcpKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyBsZW5ndGggJXgiLCB2YXJfdmFsX2xlbikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgbGVuZ3RoICUiIE5FVFNOTVBfUFJJeiAidSIsCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJfdmFsX2xlbikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOwogICAgICAgICB9CiAKICAgICAgICAgaW50dmFsID0gKigobG9uZyAqKSB2YXJfdmFsKTsKICAgICAgICAgaWYgKGludHZhbCA+IE1BWF9FWEFNUExFX0lOVCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgdmFsdWUgJXgiLCBpbnR2YWwpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIHZhbHVlICVseCIsIGludHZhbCkpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC01NTMsMTMgKzUzOCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPiBzaXplb2YobG9uZykpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIGxlbmd0aCAleCIsIHZhcl92YWxfbGVuKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyBsZW5ndGggJSIgTkVUU05NUF9QUkl6ICJ1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcl92YWxfbGVuKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CiAgICAgICAgIH0KIAogICAgICAgICBpbnR2YWwgPSAqKChsb25nICopIHZhcl92YWwpOwogICAgICAgICBpZiAoaW50dmFsICE9IDEpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIHZhbHVlICV4IiwgaW50dmFsKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyB2YWx1ZSAlbHgiLCBpbnR2YWwpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNjIwLDEwICs2MDYsMTAgQEAKICAqIHNlY29uZCBzaW5jZSB0aGUgbmV0d29rIG1hbmFnZW1lbnQgcG9ydGlvbiBvZiBzeXN0ZW0gd2FzIGxhc3QKICAqIHJlaW5pdGlhbGl6ZWQuICAtIHNubXBUcmFwT0lELjAgd2hpY2ggaXMgcGFydCBvZiB0aGUgdHJhcCBncm91cCBTTk1QdjIKICAqIE1JQiB3aG9zZSB2YWx1ZSBpcyB0aGUgb2JqZWN0LWlkIG9mIHRoZSBzcGVjaWZpYyB0cmFwIHlvdSBoYXZlIGRlZmluZWQKLSAqIGluIHlvdXIgb3duIE1JQi4gIE90aGVyIHZhcmlhYmxlcyBjYW4gYmUgYWRkZWQgdG8gY2FyYWN0ZXJpemUgdGhlCisgKiBpbiB5b3VyIG93biBNSUIuICBPdGhlciB2YXJpYWJsZXMgY2FuIGJlIGFkZGVkIHRvIGNoYXJhY3Rlcml6ZSB0aGUKICAqIHRyYXAuCiAgKiAKLSAqIFRoZSBmdW5jdGlvbiBzZW5kX3YydHJhcCBhZGRzIGF1dG9tYXRpY2FsbHlzIHRoZSB0d28gb2JqZWN0cyBidXQgdGhlCisgKiBUaGUgZnVuY3Rpb24gc2VuZF92MnRyYXAgYWRkcyBhdXRvbWF0aWNhbGx5IHRoZSB0d28gb2JqZWN0cyBidXQgdGhlCiAgKiB2YWx1ZSBvZiBzbm1wVHJhcE9JRC4wIGlzIDAuMCBieSBkZWZhdWx0LiBJZiB5b3Ugd2FudCB0byBhZGQgeW91ciB0cmFwCiAgKiBuYW1lLCB5b3UgaGF2ZSB0byByZWNvbnN0cnVjdCB0aGlzIG9iamVjdCBhbmQgdG8gYWRkIHlvdXIgb3duCiAgKiB2YXJpYWJsZS4KQEAgLTY2MywxMyArNjQ5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YXJfdmFsX2xlbiA+IHNpemVvZihsb25nKSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgbGVuZ3RoICV4IiwgdmFyX3ZhbF9sZW4pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIGxlbmd0aCAlIiBORVRTTk1QX1BSSXogInUiLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyX3ZhbF9sZW4pKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKICAgICAgICAgfQogCiAgICAgICAgIGludHZhbCA9ICooKGxvbmcgKikgdmFyX3ZhbCk7CiAgICAgICAgIGlmIChpbnR2YWwgIT0gMSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgdmFsdWUgJXgiLCBpbnR2YWwpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIHZhbHVlICVseCIsIGludHZhbCkpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03MzIsNyArNzE5LDcgQEAKICAgICAgICAgdmFyX29iai5uYW1lID0gZXhhbXBsZV9zdHJpbmdfb2lkOwogICAgICAgICB2YXJfb2JqLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKGV4YW1wbGVfc3RyaW5nX29pZCkgLyBzaXplb2Yob2lkKTsgLyogbnVtYmVyIG9mIHN1Yi1pZHMgKi8KICAgICAgICAgdmFyX29iai50eXBlID0gQVNOX09DVEVUX1NUUjsgICAvKiB0eXBlIG9mIHZhcmlhYmxlICovCi0gICAgICAgIHZhcl9vYmoudmFsLnN0cmluZyA9IGV4YW1wbGVfc3RyOyAgICAgICAvKiB2YWx1ZSAqLworICAgICAgICB2YXJfb2JqLnZhbC5zdHJpbmcgPSAodW5zaWduZWQgY2hhciAqKSBleGFtcGxlX3N0cjsgICAgICAgLyogdmFsdWUgKi8KICAgICAgICAgdmFyX29iai52YWxfbGVuID0gc3RybGVuKGV4YW1wbGVfc3RyKTsKICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JpdGVfZXhhbXBsZXRyYXAyIHNlbmRpbmcgdGhlIHYyIHRyYXBcbiIpKTsKICAgICAgICAgc2VuZF92MnRyYXAoJnZhcl90cmFwKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaAppbmRleCA5ZGU1NzQ4Li4wNGI3M2UwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5oCkBAIC0xNCwxMCArMTQsMTAgQEAKICNlbmRpZgogCiAgICAgLyoKLSAgICAgKiBXZSB1c2UgJ2hlYWRlcl9nZW5lcmljJyBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSwKKyAgICAgKiBXZSB1c2UgJ2hlYWRlcl9nZW5lcmljJyBmcm9tIHRoZSB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljIG1vZHVsZSwKICAgICAgKiAgc28gbWFrZSBzdXJlIHRoaXMgbW9kdWxlIGlzIGluY2x1ZGVkIGluIHRoZSBhZ2VudC4KICAgICAgKi8KLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMKaW5kZXggMzZhYjdlMy4uOGVhMmQwMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jCkBAIC00LDEyICs0LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm5ldFNubXBIb3N0c1RhYmxlLmgiCiAjaW5jbHVkZSAibmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuaCIKICNpbmNsdWRlICJuZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2dldF9kYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2FkZF9kYXRhKQorCiBzdGF0aWMgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqdW5kb1N0b3JhZ2UgPSBOVUxMOwogc3RhdGljIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKmNvbW1pdFN0b3JhZ2UgPSBOVUxMOwogCkBAIC03MSw3ICs3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAKICAgICAvKiogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgICAgb3B0aW1pemVzIHJldHJpdmFsLiAqLworICAgICAgICBvcHRpbWl6ZXMgcmV0cmlldmFsLiAqLwogICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSAyOwogICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSA1OwogCkBAIC05Miw3ICs5Nyw3IEBACiAgICAgICovCiAgICAgREVCVUdNU0dUTCgoImluaXRpYWxpemVfdGFibGVfbmV0U25tcEhvc3RzVGFibGUiLAogICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyB0YWJsZSBuZXRTbm1wSG9zdHNUYWJsZSBhcyBhIHRhYmxlIGl0ZXJhdG9yXG4iKSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihteV9oYW5kbGVyLCBpaW5mbyk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIobXlfaGFuZGxlciwgaWluZm8pOwogfQogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG5ldFNubXBIb3N0c1RhYmxlIG1vZHVsZSAqLwpAQCAtMTE0LDE5ICsxMTksMTUgQEAKIAogICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOwotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyOwogICAgIHN0cnVjdCBjb21taXRJbmZvICpjaSA9IE5VTEw7CiAKICAgICB2b2lkICAgICAgICAgICAqZGF0YV9jb250ZXh0ID0gTlVMTDsKIAotICAgIG9pZCAgICAgICAgICAgICpzdWZmaXg7Ci0gICAgc2l6ZV90ICAgICAgICAgIHN1ZmZpeF9sZW47Ci0KICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgLyogY29sdW1uIGFuZCByb3cgaW5kZXggZW5jb2RlZCBwb3J0aW9uICovCi0gICAgICAgIHZhciA9IHJlcXVlc3QtPnJlcXVlc3R2YjsKLSAgICAgICAgc3VmZml4ICAgICA9IHZhci0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMTsKLSAgICAgICAgc3VmZml4X2xlbiA9IHZhci0+bmFtZV9sZW5ndGggLSAocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAxKTsKKyAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIgPSByZXF1ZXN0LT5yZXF1ZXN0dmI7CisgICAgICAgIGNvbnN0IG9pZCAqIGNvbnN0IHN1ZmZpeCA9IHZhci0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN1ZmZpeF9sZW4gPSB2YXItPm5hbWVfbGVuZ3RoIC0gKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMSk7CiAKICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCAhPSAwKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jCmluZGV4IGU1NmNkMWQuLjNkMmU1ZmIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogLyoqIENyZWF0ZSBhIGRhdGFfY29udGV4dCBmb3Igbm9uLWV4aXN0ZW50IHJvd3MgdGhhdCBTRVRzIGFyZSBwZXJmb3JtZWQgb24uCiAgKiAgcmV0dXJuIGEgdm9pZCAqIHBvaW50ZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gc3Vic2VxdWVudCBnZXRfWFhYCi0gKiAgYW5kIHNldF9YWFggZnVuY3Rpb25zIGZvciBkYXRhIHJldHJpdmFsIGFuZCBtb2RpZmljYXRpb24gZHVyaW5nCisgKiAgYW5kIHNldF9YWFggZnVuY3Rpb25zIGZvciBkYXRhIHJldHJpZXZhbCBhbmQgbW9kaWZpY2F0aW9uIGR1cmluZwogICogIHRoaXMgU0VUIHJlcXVlc3QuCiAgKgogICogIFRoZSBpbmRleHMgYXJlIGVuY29kZWQgKGluIG9yZGVyKSBpbnRvIHRoZSBpbmRleF9kYXRhIHBvaW50ZXIgaWYgaXQKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5jCmluZGV4IDRjYjkzMzkuLjI1YTczMzAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuYwpAQCAtMTQsMTEgKzE0LDE0IEBACiAgKiBzdGFuZGFyZCBoZWFkZXJzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm5ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmgiCiAjaW5jbHVkZSAibmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwuaCIKICNpbmNsdWRlICJuZXRTbm1wSG9zdHNUYWJsZV9lbnVtcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19zdG9yYWdlX3RyYW5zaXRpb24pCisKIC8qKiBEZWNpZGVzIGlmIGFuIGluY29taW5nIHZhbHVlIGZvciB0aGUgbmV0U25tcEhvc3RBZGRyZXNzVHlwZSBtaWIgbm9kZSBpcyBsZWdhbC4KICAqICBAcGFyYW0gdHlwZSAgICBUaGUgaW5jb21pbmcgZGF0YSB0eXBlLgogICogIEBwYXJhbSB2YWwgICAgIFRoZSB2YWx1ZSB0byBiZSBjaGVja2VkLgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jCmluZGV4IDUwM2JkZDQuLmRiNGQyOTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuYworKysgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmMKQEAgLTIzLDEwICsyMywxNyBAQAogICogc3RhcnQgYmUgaW5jbHVkaW5nIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogLyoKKyAqIGlmIC0tZW5hYmxlLW1pbmltYWxpc3QgaGFzIGJlZW4gdHVybmVkIG9uLCB3ZSBuZWVkIHRvIHJlZ2lzdGVyCisgKiB0aGUgc3VwcG9ydCB3ZSBuZWVkIHNvIHRoZSBuZWVkZWQgZnVuY3Rpb25zIGFyZW4ndCByZW1vdmVkIGF0IGNvbXBpbGUgdGltZQorICovCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShsb25nX2luc3RhbmNlKQorCisvKgogICogVGhlbiwgd2UgZGVjbGFyZSB0aGUgdmFyaWFibGVzIHdlIHdhbnQgdG8gYmUgYWNjZXNzZWQgCiAgKi8KIHN0YXRpYyBsb25nICAgICBleGFtcGxlMSA9IDQyOyAgLyogZGVmYXVsdCB2YWx1ZSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jCmluZGV4IDk3YThmNDcuLjhlOWU2NmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYworKysgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMKQEAgLTEzLDExICsxMyw3IEBACiAjZW5kaWYKIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMjcsMTUgKzIzLDExIEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ1Y2REZW1vUHVibGljLmgiCiAKICNkZWZpbmUgTVlNQVggMTAyNApAQCAtNzMsMTEgKzY1LDE0IEBACiAgKi8KIAogc3RydWN0IHZhcmlhYmxlMiB1Y2REZW1vUHVibGljX3ZhcmlhYmxlc1tdID0gewotICAgIHtVQ0RERU1PUkVTRVRLRVlTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdWNkRGVtb1B1YmxpYywgMSwgezF9fSwKLSAgICB7VUNEREVNT1BVQkxJQ1NUUklORywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdWNkRGVtb1B1YmxpYywgMSwKLSAgICAgezJ9fSwKLSAgICB7VUNEREVNT1VTRVJMSVNULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl91Y2REZW1vUHVibGljLCAxLCB7M319LAotICAgIHtVQ0RERU1PUEFTU1BIUkFTRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdWNkRGVtb1B1YmxpYywgMSwgezR9fSwKKyAgICB7VUNEREVNT1JFU0VUS0VZUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHsxfX0sCisgICAge1VDRERFTU9QVUJMSUNTVFJJTkcsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHsyfX0sCisgICAge1VDRERFTU9VU0VSTElTVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdWNkRGVtb1B1YmxpYywgMSwgezN9fSwKKyAgICB7VUNEREVNT1BBU1NQSFJBU0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHs0fX0sCiAKIH07CiAKQEAgLTEzMCw3ICsxMjUsNyBAQAogCiAgICAgY2FzZSBVQ0RERU1PUFVCTElDU1RSSU5HOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdWNkRGVtb1B1YmxpY1N0cmluZzsKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4ocHVibGljU3RyaW5nKTsKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIqKXB1YmxpY1N0cmluZyk7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBwdWJsaWNTdHJpbmc7CiAKICAgICBjYXNlIFVDRERFTU9VU0VSTElTVDoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaCBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaAppbmRleCBmZDlmMTJmLi4yNTNmNGZmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5oCkBAIC02LDEwICs2LDEwIEBACiAjZGVmaW5lIF9NSUJHUk9VUF9VQ0RERU1PUFVCTElDX0gKIAogLyoKLSAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBhbmQgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCisgKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUKICAqLwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuYwppbmRleCA1ODEyMmM0Li5iNDg2YmFjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy93YXRjaGVkLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5jCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICogdmFyaWFibGVzIG5lZWRlZCBmb3IgcmVnaXN0cmF0aW9uCiAgICAgICovCiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKLSAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2F0Y2hlcl9pbmZvOworICAgIHN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyB3YXRjaGVyX2luZm87CiAgICAgaW50IHdhdGNoZXJfZmxhZ3M7CiAKICAgICAvKgpAQCAtNTcsOCArNTcsNiBAQAogICAgICAgICAgICAgICAgIG15X3N0cmluZykpOwogCiAgICAgLyoKLSAgICAgKiBjcmVhdGUgdGhlIHJlZ2lzdHJhdGlvbiBpbmZvIGZvciBvdXIgc3RyaW5nLiBJZiB5b3Ugd2FudCB0bwotICAgICAqCiAgICAgICogSWYgd2Ugd2FudGVkIGEgY2FsbGJhY2sgd2hlbiB0aGUgdmFsdWUgd2FzIHJldHJpZXZlZCBvciBzZXQKICAgICAgKiAoZXZlbiB0aG91Z2ggdGhlIGRldGFpbHMgb2YgZG9pbmcgdGhpcyBhcmUgaGFuZGxlZCBmb3IgeW91KSwKICAgICAgKiB5b3UgY291bGQgY2hhbmdlIHRoZSBOVUxMIHBvaW50ZXIgYmVsb3cgdG8gYSB2YWxpZCBoYW5kbGVyCkBAIC03MiwzMiArNzAsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgLyoKLSAgICAgKiB0aGUgdHdvIG9wdGlvbnMgZm9yIGEgc3RyaW5nIHdhdGNoZXIgYXJlOgorICAgICAqIHRoZSB0aHJlZSBvcHRpb25zIGZvciBhIHN0cmluZyB3YXRjaGVyIGFyZToKICAgICAgKiAgIGZpeGVkIHNpemUgc3RyaW5nIChsZW5ndGggbmV2ZXIgY2hhbmdlcykKICAgICAgKiAgIHZhcmlhYmxlIHNpemUgKGxlbmd0aCBjYW4gYmUgMCAtIE1BWCwgZm9yIHNvbWUgTUFYKQorICAgICAqICAgYyBzdHJpbmcgKGxlbmd0aCBjYW4gYmUgMCAtIE1BWC0xIGZvciBzb21lIG1heCwgXDAgaXMgbm90IGEgdmFsaWQKKyAgICAgKiAgICAgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcsIHRoZSBsZW5ndGggaXMgcHJvdmlkZWQgYnkgc3RybGVuKQogICAgICAqCiAgICAgICogd2UnbGwgdXNlIGEgdmFyaWFibGUgbGVuZ3RoIHN0cmluZy4KICAgICAgKi8KICAgICB3YXRjaGVyX2ZsYWdzID0gV0FUQ0hFUl9NQVhfU0laRTsKIAogICAgIC8qCi0gICAgICogY3JlYXRlIHRoZSB3YXRjaGVyIGluZm8gZm9yIG91ciBzdHJpbmcsIGFuZCBzZXQgdGhlIG1heCBzaXplLgorICAgICAqIGNyZWF0ZSB0aGUgd2F0Y2hlciBpbmZvIGZvciBvdXIgc3RyaW5nLgogICAgICAqLwotICAgIHdhdGNoZXJfaW5mbyA9Ci0gICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyhteV9zdHJpbmcsIHN0cmxlbihteV9zdHJpbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgd2F0Y2hlcl9mbGFncyk7Ci0gICAgd2F0Y2hlcl9pbmZvLT5tYXhfc2l6ZSA9IHNpemVvZihteV9zdHJpbmcpOworICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm82KCZ3YXRjaGVyX2luZm8sIG15X3N0cmluZywgc3RybGVuKG15X3N0cmluZyksCisJCQkgICAgICAgQVNOX09DVEVUX1NUUiwgd2F0Y2hlcl9mbGFncywKKwkJCSAgICAgICBzaXplb2YobXlfc3RyaW5nKSwgTlVMTCk7CiAKICAgICAvKgogICAgICAqIHRoZSBsaW5lIGJlbG93IHJlZ2lzdGVycyBvdXIgIm15X3N0cmluZyIgdmFyaWFibGUgYWJvdmUgYXMKICAgICAgKiBhY2Nlc3NpYmxlIGFuZCBtYWtlcyBpdCB3cml0YWJsZS4gCi0gICAgICogCi0gICAgICogSWYgd2Ugd2FudGVkIGEgY2FsbGJhY2sgd2hlbiB0aGUgdmFsdWUgd2FzIHJldHJpZXZlZCBvciBzZXQKLSAgICAgKiAoZXZlbiB0aG91Z2ggdGhlIGRldGFpbHMgb2YgZG9pbmcgdGhpcyBhcmUgaGFuZGxlZCBmb3IgeW91KSwKLSAgICAgKiB5b3UgY291bGQgY2hhbmdlIHRoZSBOVUxMIHBvaW50ZXIgYmVsb3cgdG8gYSB2YWxpZCBoYW5kbGVyCi0gICAgICogZnVuY3Rpb24uIAogICAgICAqLwotICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZShyZWdpbmZvLCB3YXRjaGVyX2luZm8pOworICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZShyZWdpbmZvLCAmd2F0Y2hlcl9pbmZvKTsKIAogICAgIERFQlVHTVNHVEwoKCJleGFtcGxlX3N0cmluZ19pbnN0YW5jZSIsCiAgICAgICAgICAgICAgICAgIkRvbmUgaW5pdGFsaXppbmcgZXhhbXBsZSBzdHJpbmcgaW5zdGFuY2VcbiIpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgKaW5kZXggZWRkMzM4Ny4uMzk1NjY3OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgKQEAgLTE1LDEzICsxNSwxMyBAQAogI2VsaWYgZGVmaW5lZChkcmFnb25mbHkpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9jcHUvY3B1X2tpbmZvKQogCi0jZWxpZiAoZGVmaW5lZChuZXRic2QpIHx8IGRlZmluZWQobmV0YnNkMSkgfHwgZGVmaW5lZChuZXRic2RlbGYpIHx8IGRlZmluZWQobmV0YnNkZWxmMil8fCBkZWZpbmVkKG5ldGJzZGVsZjMpIHx8IGRlZmluZWQob3BlbmJzZCkgfHwgZGVmaW5lZChmcmVlYnNkNCkgIHx8IGRlZmluZWQoZnJlZWJzZDUpIHx8IGRlZmluZWQoZnJlZWJzZDYpKQorI2VsaWYgKGRlZmluZWQobmV0YnNkKSB8fCBkZWZpbmVkKG5ldGJzZDEpIHx8IGRlZmluZWQobmV0YnNkZWxmKSB8fCBkZWZpbmVkKG5ldGJzZGVsZjIpfHwgZGVmaW5lZChuZXRic2RlbGYzKSB8fCBkZWZpbmVkKG9wZW5ic2QpIHx8IGRlZmluZWQoZnJlZWJzZDQpIHx8IGRlZmluZWQoZnJlZWJzZDUpIHx8IGRlZmluZWQoZnJlZWJzZDYpKQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwpCiAKICNlbGlmIChkZWZpbmVkKGZyZWVic2QyKSB8fCBkZWZpbmVkKGZyZWVic2QzKSkKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2NwdS9jcHVfbmxpc3QpCiAKLSNlbGlmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkKKyNlbGlmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdCkKIAogI2VsaWYgKGRlZmluZWQoc29sYXJpczIpKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jCmluZGV4IDRiMjlkYmMuLjI3NzIwMDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMKQEAgLTEsOCArMSwxNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGFyZHdhcmVfY3B1LCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhhcmR3YXJlX2NwdV9jb3B5X3N0YXRzLCBoYXJkd2FyZV9jcHUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGFyZHdhcmVfY3B1X2xvYWQsIGhhcmR3YXJlX2NwdSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoYXJkd2FyZV9jcHVfZ2V0X2NhY2hlLCBoYXJkd2FyZV9jcHUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGFyZHdhcmVfY3B1X2dldF9ieU5hbWUsIGhhcmR3YXJlX2NwdSkKKwogZXh0ZXJuIE5ldHNubXBDYWNoZUxvYWQgbmV0c25tcF9jcHVfYXJjaF9sb2FkOwogc3RhdGljIHZvaWQgX2NwdV91cGRhdGVfc3RhdHMoIHVuc2lnbmVkIGludCwgdm9pZCogKTsKIApAQCAtODQsOCArOTIsOCBAQAogICAgICAgICAgKi8KICAgICBjcHUgPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX2NwdV9pbmZvICk7CiAgICAgaWYgKCFjcHUpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIERFQlVHTVNHKCgiY3B1IiwgIihmYWlsZWQpXG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBERUJVR01TRygoImNwdSIsICIoY3JlYXRlZClcbiIpKTsKICAgICBjcHUtPmlkeCA9IGlkeDsKQEAgLTEwNywxNCArMTE1LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gY3B1OwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChjcHUpCi0gICAgICAgIFNOTVBfRlJFRShjcHUpOyAvKiBqdXN0IGluIGNhc2UgKi8KKyAgICBTTk1QX0ZSRUUoY3B1KTsgLyoganVzdCBpbiBjYXNlICovCiAgICAgcmV0dXJuIE5VTEw7ICAvKiBTaG91bGRuJ3QgaGFwcGVuISAqLwogfQogCiAgICAgLyoKICAgICAgKiBXb3JrIHdpdGggYSBsaXN0IG9mIENQVSBlbnRyaWVzLCBpbmRleGVkIGJ5IG5hbWUKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQVJEV0FSRV9DUFVfR0VUX0JZTkFNRQogbmV0c25tcF9jcHVfaW5mbyAqbmV0c25tcF9jcHVfZ2V0X2J5TmFtZSggY2hhciAqbmFtZSwgaW50IGNyZWF0ZSApIHsKICAgICBuZXRzbm1wX2NwdV9pbmZvICpjcHU7CiAKQEAgLTE1MiwxMSArMTYwLDE1IEBACiAgICAgfQogICAgIHJldHVybiBjcHU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQVJEV0FSRV9DUFVfR0VUX0JZTkFNRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0dFVF9DQUNIRQogbmV0c25tcF9jYWNoZSAqbmV0c25tcF9jcHVfZ2V0X2NhY2hlKCB2b2lkICkgewogICAgIHJldHVybiBfY3B1X2NhY2hlOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0dFVF9DQUNIRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0xPQUQKIGludCBuZXRzbm1wX2NwdV9sb2FkKCB2b2lkICkgewogICAgICAgICAvKgogICAgICAgICAgKiBJZiB3ZSdyZSBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nIHRoZSBzdGF0cyByZWd1bGFybHksCkBAIC0xNjUsNiArMTc3LDcgQEAKICAgICByZXR1cm4gKCBfY3B1QXV0b1VwZGF0ZSA/IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggX2NwdV9jYWNoZSApKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hBUkRXQVJFX0NQVV9MT0FEICovCiAKICAgICAvKgogICAgICAqIENhbGwgdGhlIHN5c3RlbS1zcGVjaWZpYyBsb2FkIHJvdXRpbmUgcmVndWxhcmx5LApAQCAtMTgxLDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgKiBGaXJzdCB0aW1lIHRocm91Z2gsIHdlIG5lZWQgdG8gY3JlYXRlIGJ1ZmZlcnMKICAgICAgICAgICAgICAqIGZvciB0aGUgaGlzdG9yaWNhbCBzdGF0cwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjcHUtPmhpc3RvcnkgID0gY2FsbG9jKCBfY3B1SGlzdG9yeUxlbiwgc2l6ZW9mKHN0cnVjdCBuZXRzbm1wX2NwdV9oaXN0b3J5KSk7CisgICAgICAgICAgICBjcHUtPmhpc3RvcnkgID0gKHN0cnVjdCBuZXRzbm1wX2NwdV9oaXN0b3J5ICopY2FsbG9jKCBfY3B1SGlzdG9yeUxlbiwgc2l6ZW9mKHN0cnVjdCBuZXRzbm1wX2NwdV9oaXN0b3J5KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogT3RoZXJ3aXNlLCByb3RhdGUgdGhlc2UgdmFsdWVzIC0gaW4gZGVzY2VuZGluZyBvcmRlcgpAQCAtMjIwLDEwICsyMzMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+d2FpdF90aWNrcyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmtlcm5fdGlja3MgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5pbnRycHRfdGlja3MgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5zaXJxX3RpY2tzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5zaXJxX3RpY2tzICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+c3RlYWxfdGlja3MgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5ndWVzdF90aWNrcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmd1ZXN0bmljZV90aWNrczsKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQVJEV0FSRV9DUFVfQ09QWV9TVEFUUwogdm9pZCBfY3B1X2NvcHlfc3RhdHMoIG5ldHNubXBfY3B1X2luZm8gKmNwdSApCiB7CiAgICAgbmV0c25tcF9jcHVfaW5mbyAqY3B1MjsKQEAgLTI0Myw2ICsyNjAsOSBAQAogICAgIGNwdTItPmtlcm5fdGlja3MgPSBjcHUtPmtlcm5fdGlja3M7CiAgICAgY3B1Mi0+aW50cnB0X3RpY2tzID0gY3B1LT5pbnRycHRfdGlja3M7CiAgICAgY3B1Mi0+c2lycV90aWNrcyA9IGNwdS0+c2lycV90aWNrczsKKyAgICBjcHUyLT5zdGVhbF90aWNrcyA9IGNwdS0+c3RlYWxfdGlja3M7CisgICAgY3B1Mi0+Z3Vlc3RfdGlja3MgPSBjcHUtPmd1ZXN0X3RpY2tzOworICAgIGNwdTItPmd1ZXN0bmljZV90aWNrcyA9IGNwdS0+Z3Vlc3RuaWNlX3RpY2tzOwogCiAgICAgY3B1Mi0+bkludGVycnVwdHMgID0gY3B1LT5uSW50ZXJydXB0czsKICAgICBjcHUyLT5uQ3R4U3dpdGNoZXMgPSBjcHUtPm5DdHhTd2l0Y2hlczsKQEAgLTI1MSwzICsyNzEsNCBAQAogICAgIGNwdTItPnBhZ2VJbiAgICAgPSBjcHUtPnBhZ2VJbjsKICAgICBjcHUyLT5wYWdlT3V0ICAgID0gY3B1LT5wYWdlT3V0OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0NPUFlfU1RBVFMgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uYwppbmRleCBmYWNiYzdiLi4zN2NmODQ3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tpbmZvLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9raW5mby5jCkBAIC0yLDYgKzIsNyBAQAogICogIERyYWdvbkZseSBraW5mbyBpbnRlcmZhY2UKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oPgpAQCAtMTMsNiArMTQsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGFyZHdhcmVfY3B1X2NvcHlfc3RhdHMpCiB2b2lkIF9jcHVfY29weV9zdGF0cyggbmV0c25tcF9jcHVfaW5mbyAqY3B1ICk7CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5jCmluZGV4IGUxNmFmYjcuLjMzZjE4OGUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa3N0YXQuYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tzdGF0LmMKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgKiAgIChpbmNsdWRpbmcgZGVzY3JpcHRpb25zKQogICAgICAqLwogdm9pZCBpbml0X2NwdV9rc3RhdCggdm9pZCApIHsKLSAgICBpbnQgICAgICAgICAgICAgICBpLCBuPTAsIGNsb2NrLCBzdGF0ZV9iZWdpbjsKKyAgICBpbnQgICAgICAgICAgICAgICBpID0gMCwgbiA9IDAsIGNsb2NrLCBzdGF0ZV9iZWdpbjsKICAgICBjaGFyICAgICAgICAgICAgICBjdHlwZVsxNV0sIGZ0eXBlWzE1XSwgc3RhdGVbMTBdOwogICAgIGtzdGF0X3QgICAgICAgICAgKmtzcDsKICAgICBrc3RhdF9uYW1lZF90ICAgICprc19kYXRhOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICBpICAgID0ga3NwLT5rc19pbnN0YW5jZTsKICAgICAgICAgICAgIGNwdTIgPSBuZXRzbm1wX2NwdV9nZXRfYnlJZHgoIGksIDAgKTsKICAgICAgICAgICAgIGlmICggIWNwdTIgKSAgCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgLyogb3IgY29udGludWUgPyAqLyAgICAvKiBTa2lwIG5ldyBDUFVzICovCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgLyogb3IgY29udGludWUgPyAqLyAgLyogU2tpcCBuZXcgQ1BVcyAqLwogICAgICAgICAgICAgaWYgKChrc3AtPmtzX3R5cGUgIT0gS1NUQVRfVFlQRV9SQVcpIHx8CiAgICAgICAgICAgICAgICAgKGtzcC0+a3NfZGF0YV9zaXplICE9IHNpemVvZihjcykpfHwKICAgICAgICAgICAgICAgICAoa3N0YXRfcmVhZChrc3RhdF9mZCwga3NwLCAmY3MpID09IC0xKSkgewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jCmluZGV4IGUyN2UxMmUuLmIxZGMzMDggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMKQEAgLTU3LDcgKzU3LDcgQEAKICNlbmRpZgogICAgICAgICB9CiAjaWYgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCi0JLyogczM5MCBtYXkgZGlmZmVyZW50IGZvcm1hdCBvZiBDUFVfRklMRSAqLworCS8qIHMzOTAgbWF5IGhhdmUgZGlmZmVyZW50IGZvcm1hdCBvZiBDUFVfRklMRSAqLwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChzc2NhbmYoIGJ1ZiwgInByb2Nlc3NvciAlZDoiLCAmaSApID09IDEpICB7CiAgICAgICAgICAgICAgICAgbisrOwpAQCAtOTksMTEgKzk5LDEyIEBACiAgICAgc3RhdGljIGNoYXIgKmJ1ZmYgID0gTlVMTDsKICAgICBzdGF0aWMgaW50ICAgYnNpemUgPSAwOwogICAgIHN0YXRpYyBpbnQgICBmaXJzdCA9IDE7Ci0gICAgc3RhdGljIGludCAgIGhhc19jcHVfMjYgPSAxOworICAgIHN0YXRpYyBpbnQgICBudW1fY3B1bGluZV9lbGVtID0gMDsKICAgICBpbnQgICAgICAgICAgYnl0ZXNfcmVhZCwgc3RhdGZkLCBpOwogICAgIGNoYXIgICAgICAgICpiMSwgKmIyOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXNlbGwgPSAwLCBjaWNlbGwgPSAwLCBjc3lzbGwgPSAwLCBjaWRlbGwgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICBjaW93bGwgPSAwLCBjaXJxbGwgPSAwLCBjc29mdGxsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgY2lvd2xsID0gMCwgY2lycWxsID0gMCwgY3NvZnRsbCA9IDAsIGNzdGVhbGxsID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgY2d1ZXN0bGwgPSAwLCBjZ3Vlc3RfbmljZWxsID0gMDsKICAgICBuZXRzbm1wX2NwdV9pbmZvKiBjcHU7CiAKICAgICBpZiAoKHN0YXRmZCA9IG9wZW4oU1RBVF9GSUxFLCBPX1JET05MWSwgMCkpID09IC0xKSB7CkBAIC0xMTIsMTEgKzExMywxMSBAQAogICAgIH0KICAgICBpZiAoYnNpemUgPT0gMCkgewogICAgICAgICBic2l6ZSA9IGdldHBhZ2VzaXplKCktMTsKLSAgICAgICAgYnVmZiA9IG1hbGxvYyhic2l6ZSsxKTsKKyAgICAgICAgYnVmZiA9IChjaGFyKiltYWxsb2MoYnNpemUrMSk7CiAgICAgfQogICAgIHdoaWxlICgoYnl0ZXNfcmVhZCA9IHJlYWQoc3RhdGZkLCBidWZmLCBic2l6ZSkpID09IGJzaXplKSB7CiAgICAgICAgIGJzaXplICs9IEJVRlNJWjsKLSAgICAgICAgYnVmZiA9IHJlYWxsb2MoYnVmZiwgYnNpemUrMSk7CisgICAgICAgIGJ1ZmYgPSAoY2hhciopcmVhbGxvYyhidWZmLCBic2l6ZSsxKTsKICAgICAgICAgREVCVUdNU0dUTCgoImNwdSIsICIvcHJvYy9zdGF0IGJ1ZmZlciBpbmNyZWFzZWQgdG8gJWRcbiIsIGJzaXplKSk7CiAgICAgICAgIGNsb3NlKHN0YXRmZCk7CiAgICAgICAgIHN0YXRmZCA9IG9wZW4oU1RBVF9GSUxFLCBPX1JET05MWSwgMCk7CkBAIC0xNTgsMjIgKzE1OSwzMyBAQAogICAgICAgICAgICAgYjErKzsKICAgICAgICAgfQogCi0JaWYgKCFoYXNfY3B1XzI2IHx8Ci0gICAgICAgICAgICBzc2NhbmYoYjEsICIlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1IiwgJmN1c2VsbCwKLSAgICAgICAgICAgICAgICAgICAmY2ljZWxsLCAmY3N5c2xsLCAmY2lkZWxsLCAmY2lvd2xsLCAmY2lycWxsLCAmY3NvZnRsbCkgIT0gNykgewotCSAgICBoYXNfY3B1XzI2ID0gMDsKLQkgICAgc3NjYW5mKGIxLCAiJWxsdSAlbGx1ICVsbHUgJWxsdSIsICZjdXNlbGwsICZjaWNlbGwsICZjc3lzbGwsCi0gICAgICAgICAgICAgICAgICAgJmNpZGVsbCk7CisgICAgICAgIG51bV9jcHVsaW5lX2VsZW0gPSBzc2NhbmYoYjEsICIlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1IiwKKyAgICAgICAgICZjdXNlbGwsICZjaWNlbGwsICZjc3lzbGwsICZjaWRlbGwsICZjaW93bGwsICZjaXJxbGwsICZjc29mdGxsLCAmY3N0ZWFsbGwsICZjZ3Vlc3RsbCwgJmNndWVzdF9uaWNlbGwpOworICAgICAgICBERUJVR01TR1RMKCgiY3B1IiwgIi9wcm9jL3N0YXQgY3B1IGxpbmUgbnVtYmVyIG9mIGVsZW1lbnRzOiAlaVxuIiwgbnVtX2NwdWxpbmVfZWxlbSkpOwogCi0JfSBlbHNlIHsKLSAgICAgICAgICAgIGNwdS0+d2FpdF90aWNrcyAgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljaW93bGw7Ci0gICAgICAgICAgICBjcHUtPmludHJwdF90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2lycWxsOwotICAgICAgICAgICAgY3B1LT5zaXJxX3RpY2tzICAgPSAodW5zaWduZWQgbG9uZyBsb25nKWNzb2Z0bGw7Ci0gCX0KLSAgICAgICAgY3B1LT51c2VyX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljdXNlbGw7Ci0gICAgICAgIGNwdS0+bmljZV90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2ljZWxsOwotICAgICAgICBjcHUtPnN5c190aWNrcyAgPSAodW5zaWduZWQgbG9uZyBsb25nKWNzeXNsbDsKLSAgICAgICAgY3B1LT5pZGxlX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljaWRlbGw7CisgICAgICAgIC8qIGtlcm5lbCAyLjYuMzMgYW5kIGFib3ZlICovCisgICAgICAgIGlmIChudW1fY3B1bGluZV9lbGVtID09IDEwKSB7CisgICAgICAgICAgICBjcHUtPmd1ZXN0bmljZV90aWNrcyA9IGNndWVzdF9uaWNlbGw7CisgICAgICAgIH0KKyAgICAgICAgLyoga2VybmVsIDIuNi4yNCBhbmQgYWJvdmUgKi8KKyAgICAgICAgaWYgKG51bV9jcHVsaW5lX2VsZW0gPj0gOSkgeworICAgICAgICAgICAgY3B1LT5ndWVzdF90aWNrcyA9IGNndWVzdGxsOworICAgICAgICB9CisgICAgICAgIC8qIGtlcm5lbCAyLjYuMTEgYW5kIGFib3ZlICovCisgICAgICAgIGlmIChudW1fY3B1bGluZV9lbGVtID49IDgpIHsKKyAgICAgICAgICAgIGNwdS0+c3RlYWxfdGlja3MgPSBjc3RlYWxsbDsKKyAgICAgICAgfQorICAgICAgICAvKiBrZXJuZWwgMi42ICovCisgICAgICAgIGlmIChudW1fY3B1bGluZV9lbGVtID49IDUpIHsKKyAgICAgICAgICAgIGNwdS0+d2FpdF90aWNrcyAgID0gY2lvd2xsOworICAgICAgICAgICAgY3B1LT5pbnRycHRfdGlja3MgPSBjaXJxbGw7CisgICAgICAgICAgICBjcHUtPnNpcnFfdGlja3MgICA9IGNzb2Z0bGw7CisgICAgICAgIH0KKyAgICAgICAgLyogcmVzdCAqLworICAgICAgICBjcHUtPnVzZXJfdGlja3MgPSBjdXNlbGw7CisgICAgICAgIGNwdS0+bmljZV90aWNrcyA9IGNpY2VsbDsKKyAgICAgICAgY3B1LT5zeXNfdGlja3MgID0gY3N5c2xsOworICAgICAgICBjcHUtPmlkbGVfdGlja3MgPSBjaWRlbGw7CiAgICAgfQogICAgIGlmICggYjEgPT0gYnVmZiApIHsKIAlpZiAoZmlyc3QpCkBAIC0yMTksMTEgKzIzMSwxMSBAQAogICAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHZtYnNpemUgPT0gMCkgewogCSAgICB2bWJzaXplID0gZ2V0cGFnZXNpemUoKS0xOwotCSAgICB2bWJ1ZmYgPSBtYWxsb2Modm1ic2l6ZSsxKTsKKwkgICAgdm1idWZmID0gKGNoYXIqKW1hbGxvYyh2bWJzaXplKzEpOwogICAgICAgICB9CiAgICAgICAgIHdoaWxlICgoYnl0ZXNfcmVhZCA9IHJlYWQodm1zdGF0ZmQsIHZtYnVmZiwgdm1ic2l6ZSkpID09IHZtYnNpemUpIHsKIAkgICAgdm1ic2l6ZSArPSBCVUZTSVo7Ci0JICAgIHZtYnVmZiA9IHJlYWxsb2Modm1idWZmLCB2bWJzaXplKzEpOworCSAgICB2bWJ1ZmYgPSAoY2hhciopcmVhbGxvYyh2bWJ1ZmYsIHZtYnNpemUrMSk7CiAJICAgIGNsb3NlKHZtc3RhdGZkKTsKIAkgICAgdm1zdGF0ZmQgPSBvcGVuKFZNU1RBVF9GSUxFLCBPX1JET05MWSwgMCk7CiAJICAgIGlmICh2bXN0YXRmZCA9PSAtMSkgewpAQCAtMjMyLDcgKzI0NCw2IEBACiAJICAgIH0KICAgICAgICAgfQogICAgICAgICBjbG9zZSh2bXN0YXRmZCk7Ci0KICAgICAgICAgaWYgKCBieXRlc19yZWFkIDwgMCApIHsKICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcihWTVNUQVRfRklMRSAicmVhZCBlcnJvciIpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guYwppbmRleCBkNTI3YjNkLi43ZjA5MGM5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guYwpAQCAtMTA4LDYgKzEwOCw3IEBACiAgICAgY3B1MC0+cGFnZUluID0gdm1zdGF0LnBhZ2VpbnM7CiAgICAgY3B1MC0+cGFnZU91dCA9IHZtc3RhdC5wYWdlb3V0czsKIAkvKiBub3QgaW1wbGVtZW50ZWQ6IHN3YXBJbiwgc3dhcE91dCwgbkludGVycnVwdHMsIG5DdHhTd2l0Y2hlcyAqLworICAgIHJldHVybiAxOwogfQogCiAgCSAgCSAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYwppbmRleCBhOWViMWUyLi45NzQwMjhhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9ubGlzdC5jCkBAIC0zLDYgKzMsNyBAQAogICogICAgIGUuZy4gRnJlZUJTRAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1Lmg+CkBAIC0zMSw2ICszMiw3IEBACiAjZGVmaW5lIENQVV9TWU1CT0wgICJjcF90aW1lIgogI2RlZmluZSBNRU1fU1lNQk9MICAiY250IgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYXJkd2FyZV9jcHVfY29weV9zdGF0cykKIHZvaWQgX2NwdV9jb3B5X3N0YXRzKCBuZXRzbm1wX2NwdV9pbmZvICpjcHUgKTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMKaW5kZXggZjQ0ZjI5NS4uNWZkZDUzMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYwpAQCAtMyw2ICszLDcgQEAKICAqICAgICBlLmcuIEFJWAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1Lmg+CkBAIC0xMSw4ICsxMiwxMCBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYXJkd2FyZV9jcHVfY29weV9zdGF0cykKIHZvaWQgX2NwdV9jb3B5X3N0YXRzKCBuZXRzbm1wX2NwdV9pbmZvICpjcHUgKTsKIAogICAgIC8qCkBAIC0yNyw3ICszMCw3IEBACiAgICAgc3RyY3B5KGNwdS0+bmFtZSwgIk92ZXJhbGwgQ1BVIHN0YXRpc3RpY3MiKTsKIAogICAgIGNwdV9udW0gPSBwZXJmc3RhdF9jcHUoIE5VTEwsIE5VTEwsIHNpemVvZihwZXJmc3RhdF9jcHVfdCksIDAgKTsKLSAgICBjczIgPSBtYWxsb2MoIGNwdV9udW0qc2l6ZW9mKHBlcmZzdGF0X2NwdV90KSk7CisgICAgY3MyID0gKHBlcmZzdGF0X2NwdV90KiltYWxsb2MoIGNwdV9udW0qc2l6ZW9mKHBlcmZzdGF0X2NwdV90KSk7CiAgCiAgICAgc3RyY3B5KCBuYW1lLm5hbWUsICIiKTsKICAgICBpZiAocGVyZnN0YXRfY3B1KCZuYW1lLCBjczIsIHNpemVvZihwZXJmc3RhdF9jcHVfdCksIGNwdV9udW0pID4gMCkgewpAQCAtODMsNyArODYsNyBAQAogICAgICAqIFBlci1DUFUgc3RhdGlzdGljcwogICAgICAqLwogICAgIG4gICA9IGNzLm5jcHVzOyAgIC8qIFhYWCAtIENvbXBhcmUgYWdhaW5zdCBjcHVfbnVtICovCi0gICAgY3MyID0gbWFsbG9jKCBuKnNpemVvZihwZXJmc3RhdF9jcHVfdCkpOworICAgIGNzMiA9IChwZXJmc3RhdF9jcHVfdCopbWFsbG9jKCBuKnNpemVvZihwZXJmc3RhdF9jcHVfdCkpOwogICAgIHN0cmNweSggbmFtZS5uYW1lLCAiIik7CiAgICAgaWYgKHBlcmZzdGF0X2NwdSgmbmFtZSwgY3MyLCBzaXplb2YocGVyZnN0YXRfY3B1X3QpLCBuKSA+IDApIHsKICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBuOyBpKysgKSB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYwppbmRleCBjNjEwMjY5Li41ZWNiNjhlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMKQEAgLTMsNiArMyw3IEBACiAgKiAgICAgZS5nLiBCU0QvT1MsIE5ldEJTRCwgT3BlbkJTRCwgbGF0ZXIgRGFyd2luIHJlbGVhc2VzCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaD4KQEAgLTMwLDYgKzMxLDggQEAKICNpbmNsdWRlIDx2bS92bV9leHRlcm4uaD4KICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYXJkd2FyZV9jcHVfY29weV9zdGF0cykKKwogdm9pZCBfY3B1X2NvcHlfc3RhdHMoIG5ldHNubXBfY3B1X2luZm8gKmNwdSApOwogCiAgICAgLyoKQEAgLTc1LDEzICs3OCwyMCBAQAogCiAjaWYgZGVmaW5lZChfX05ldEJTRF9fKQogI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICBLRVJOX0NQX1RJTUUKKyNkZWZpbmUgTkVUU05NUF9LRVJOX01DUFUKKyNkZWZpbmUgTkVUU05NUF9LRVJOX01DUFVfVFlQRSBORVRTTk1QX0NQVV9TVEFUUwogI2VsaWYgZGVmaW5lZChLRVJOX0NQVVNUQVRTKSAgICAgICAgICAgICAgLyogQlNEaSAqLwogI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICBLRVJOX0NQVVNUQVRTCisjZWxpZiBkZWZpbmVkKEtFUk5fQ1BUSU1FMikgICAgICAgICAgICAgICAgLyogT3BlbkJTRCAqLworI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICBLRVJOX0NQVElNRQorI2RlZmluZSBORVRTTk1QX0tFUk5fTUNQVQorI2RlZmluZSBORVRTTk1QX0tFUk5fTUNQVV9UWVBFIHVfaW50NjRfdAogI2VsaWYgZGVmaW5lZChLRVJOX0NQVElNRSkgICAgICAgICAgICAgICAgLyogT3BlbkJTRCAqLwogI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICBLRVJOX0NQVElNRQogCiAjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICAwICAgIC8qIGR1bW15IHZhbHVlIC0gc3lzY3RsbmFtZXRvbWliKDIpIHNob3VsZCBiZSB1c2VkICovCisjZGVmaW5lIE5FVFNOTVBfS0VSTl9NQ1BVIDEgICAgLyogRW5hYmxlIHN1cHBvcnQgZm9yIG11bHRpLWNwdSBzdGF0cy4gVmFsaWQgZm9yIEZyZWVCU0QgPj02LjQsID49Ny4xLCA+PTguMCBhbmQgYmV5b25kICovCisjZGVmaW5lIE5FVFNOTVBfS0VSTl9NQ1BVX1RZUEUgTkVUU05NUF9DUFVfU1RBVFMKIAogI2Vsc2UKICNlcnJvciAiTm8gQ1BVIHN0YXRpc3RpY3Mgc3lzY3RsIHRva2VuIgpAQCAtMTAzLDggKzExMywxMyBAQAogICAgICNkZWZpbmUgTlNfVk1fU1dUQ0gJCXN3dGNoCiAgICAgI2RlZmluZSBOU19WTV9QQUdFSU4JcGFnZWlucwogICAgICNkZWZpbmUgTlNfVk1fUEFHRU9VVAlwZHBhZ2VvdXRzCisjaWZkZWYgSEFWRV9TVFJVQ1RfVVZNRVhQX1BHU1dBUElOCisgICAgI2RlZmluZSBOU19WTV9TV0FQSU4JcGdzd2FwaW4KKyAgICAjZGVmaW5lIE5TX1ZNX1NXQVBPVVQJcGdzd2Fwb3V0CisjZWxzZQogICAgICNkZWZpbmUgTlNfVk1fU1dBUElOCXN3YXBpbnMKICAgICAjZGVmaW5lIE5TX1ZNX1NXQVBPVVQJc3dhcG91dHMKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChWTV9VVk1FWFAyKSAgICAgICAgICAgICAgICAgICAvKiBOZXRCU0QgMS42KyAqLwogI2RlZmluZSBORVRTTk1QX1ZNX1NUQVRTICAgICAgIFZNX1VWTUVYUDIKQEAgLTE0NCw3ICsxNTksNiBAQAogICAgICAqIExvYWQgdGhlIGxhdGVzdCBDUFUgdXNhZ2Ugc3RhdGlzdGljcwogICAgICAqLwogaW50IG5ldHNubXBfY3B1X2FyY2hfbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKm1hZ2ljICkgewotICAgIGludCAgICAgICAgICAgICAgICAgICAgIGk7CiAKICAgICAvKgogICAgICAqIFN0cmljdGx5IHNwZWFraW5nLCBCU0RpIG91Z2h0IHRvIHVzZQpAQCAtMTU0LDExICsxNjgsMjAgQEAKICAgICAgKiBEb24ndCBmaWdodCBpdCwgRGF2ZSAtIGdvIHdpdGggdGhlIGZsb3cuLi4uCiAgICAgICovCiAgICAgTkVUU05NUF9DUFVfU1RBVFMgY3B1X3N0YXRzW0NQVVNUQVRFU107Ci0gICAgaW50ICAgICAgICAgICAgY3B1X21pYltdID0geyBDVExfS0VSTiwgTkVUU05NUF9LRVJOX0NQVSB9OwogICAgIHNpemVfdCAgICAgICAgIGNwdV9zaXplICA9IHNpemVvZihjcHVfc3RhdHMpOworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQorICAgIGludCAgICAgICAgICAgIGNwdV9taWJbXSA9IHsgQ1RMX0tFUk4sIE5FVFNOTVBfS0VSTl9DUFUgfTsKKyNlbmRpZgorI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgc3RhdGljIGludCAgICAgY3BfdGltZXMgPSAtMTsKKyNlbmRpZgorI2lmZGVmIEtFUk5fQ1BUSU1FMgorICAgIGludCAgICAgICAgICAgIG1jcHVfbWliW10gPSB7IENUTF9LRVJOLCBLRVJOX0NQVElNRTIsIDAgfTsKKyNlbmRpZgogI2lmZGVmIE5FVFNOTVBfS0VSTl9NQ1BVIAorICAgIGludCAgICAgICAgICAgIGk7CisgICAgaW50ICAgICAgICAgICAgYWN0X2NwdSA9IGNwdV9udW07CiAgICAgTkVUU05NUF9LRVJOX01DUFVfVFlQRSAqbWNwdV9zdGF0czsKLSAgICBpbnQgICAgICAgICAgICBtY3B1X21pYltdID0geyBDVExfS0VSTiwgTkVUU05NUF9LRVJOX01DUFUgfTsKICAgICBzaXplX3QgICAgICAgICBtY3B1X3NpemU7CiAjZW5kaWYKICAgICBORVRTTk1QX1ZNX1NUQVRTX1RZUEUgbWVtX3N0YXRzOwpAQCAtMTY2LDE3ICsxODksMTcgQEAKICAgICBzaXplX3QgICAgICAgICBtZW1fc2l6ZSAgPSBzaXplb2YoTkVUU05NUF9WTV9TVEFUU19UWVBFKTsKICAgICBuZXRzbm1wX2NwdV9pbmZvICpjcHUgPSBuZXRzbm1wX2NwdV9nZXRfYnlJZHgoIC0xLCAwICk7CiAKLSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSkKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCiAgICAgc3lzY3RsYnluYW1lKCJrZXJuLmNwX3RpbWUiLCBjcHVfc3RhdHMsICZjcHVfc2l6ZSwgTlVMTCwgMCk7CiAjZWxzZQogICAgIHN5c2N0bChjcHVfbWliLCAyLCAgY3B1X3N0YXRzLCAmY3B1X3NpemUsIE5VTEwsIDApOwogI2VuZGlmCi0gICAgY3B1LT51c2VyX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfVVNFUl07Ci0gICAgY3B1LT5uaWNlX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfTklDRV07Ci0gICAgY3B1LT5zeXMyX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfU1lTXStjcHVfc3RhdHNbQ1BfSU5UUl07Ci0gICAgY3B1LT5rZXJuX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfU1lTXTsKLSAgICBjcHUtPmlkbGVfdGlja3MgPSAodW5zaWduZWQgbG9uZyBsb25nKWNwdV9zdGF0c1tDUF9JRExFXTsKLSAgICBjcHUtPmludHJwdF90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY3B1X3N0YXRzW0NQX0lOVFJdOworICAgIGNwdS0+dXNlcl90aWNrcyA9IGNwdV9zdGF0c1tDUF9VU0VSXTsKKyAgICBjcHUtPm5pY2VfdGlja3MgPSBjcHVfc3RhdHNbQ1BfTklDRV07CisgICAgY3B1LT5zeXMyX3RpY2tzID0gY3B1X3N0YXRzW0NQX1NZU10rY3B1X3N0YXRzW0NQX0lOVFJdOworICAgIGNwdS0+a2Vybl90aWNrcyA9IGNwdV9zdGF0c1tDUF9TWVNdOworICAgIGNwdS0+aWRsZV90aWNrcyA9IGNwdV9zdGF0c1tDUF9JRExFXTsKKyAgICBjcHUtPmludHJwdF90aWNrcyA9IGNwdV9zdGF0c1tDUF9JTlRSXTsKICAgICAgICAgLyogd2FpdF90aWNrcywgc2lycV90aWNrcyB1bnVzZWQgKi8KICAgICAKICAgICAgICAgLyoKQEAgLTE4NCwzMCArMjA3LDgzIEBACiAgICAgICAgICAqICAgWFhYIC0gRG8gdGhlc2UgcmVhbGx5IGJlbG9uZyBoZXJlID8KICAgICAgICAgICovCiAgICAgc3lzY3RsKG1lbV9taWIsIDIsICZtZW1fc3RhdHMsICZtZW1fc2l6ZSwgTlVMTCwgMCk7Ci0gICAgY3B1LT5uSW50ZXJydXB0cyAgPSAodW5zaWduZWQgbG9uZyBsb25nKW1lbV9zdGF0cy5OU19WTV9JTlRSOwotICAgIGNwdS0+bkN0eFN3aXRjaGVzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltZW1fc3RhdHMuTlNfVk1fU1dUQ0g7Ci0gICAgY3B1LT5zd2FwSW4gICAgICAgPSAodW5zaWduZWQgbG9uZyBsb25nKW1lbV9zdGF0cy5OU19WTV9TV0FQSU47Ci0gICAgY3B1LT5zd2FwT3V0ICAgICAgPSAodW5zaWduZWQgbG9uZyBsb25nKW1lbV9zdGF0cy5OU19WTV9TV0FQT1VUOworICAgIGNwdS0+bkludGVycnVwdHMgID0gbWVtX3N0YXRzLk5TX1ZNX0lOVFI7CisgICAgY3B1LT5uQ3R4U3dpdGNoZXMgPSBtZW1fc3RhdHMuTlNfVk1fU1dUQ0g7CisgICAgY3B1LT5zd2FwSW4gICAgICAgPSBtZW1fc3RhdHMuTlNfVk1fU1dBUElOOworICAgIGNwdS0+c3dhcE91dCAgICAgID0gbWVtX3N0YXRzLk5TX1ZNX1NXQVBPVVQ7CiAjaWZkZWYgTlNfVk1fUEFHRUlOCi0gICAgY3B1LT5wYWdlSW4gICAgICAgPSAodW5zaWduZWQgbG9uZyBsb25nKW1lbV9zdGF0cy5OU19WTV9QQUdFSU47CisgICAgY3B1LT5wYWdlSW4gICAgICAgPSBtZW1fc3RhdHMuTlNfVk1fUEFHRUlOOwogI2VuZGlmCiAjaWZkZWYgTlNfVk1fUEFHRU9VVAotICAgIGNwdS0+cGFnZU91dCAgICAgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltZW1fc3RhdHMuTlNfVk1fUEFHRU9VVDsKKyAgICBjcHUtPnBhZ2VPdXQgICAgICA9IG1lbV9zdGF0cy5OU19WTV9QQUdFT1VUOwogI2VuZGlmCiAKICNpZmRlZiBORVRTTk1QX0tFUk5fTUNQVQotICAgIG1jcHVfc2l6ZSAgPSBjcHVfbnVtKnNpemVvZihORVRTTk1QX0tFUk5fTUNQVV9UWVBFKTsKKyNpZiBkZWZpbmVkKEtFUk5fQ1BUSU1FMikKKyAgICBtY3B1X3NpemUgID0gY3B1X251bSpzaXplb2YoY3B1X3N0YXRzKTsKICAgICBtY3B1X3N0YXRzID0gbWFsbG9jKG1jcHVfc2l6ZSk7Ci0gICAgc3lzY3RsKG1jcHVfbWliLCAyLCBtY3B1X3N0YXRzLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IGNwdV9udW07IGkrKyApIHsKKyNlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKKyAgICBtY3B1X3NpemUgID0gY3B1X251bSpzaXplb2YoY3B1X3N0YXRzKTsKKyAgICBtY3B1X3N0YXRzID0gbWFsbG9jKG1jcHVfc2l6ZSk7CisgICAgc3lzY3RsYnluYW1lKCJrZXJuLmNwX3RpbWUiLCBtY3B1X3N0YXRzLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgaWYgKGNwX3RpbWVzID09IC0xKSB7CisJaW50IHJldCA9IHN5c2N0bGJ5bmFtZSgia2Vybi5jcF90aW1lcyIsIE5VTEwsICZtY3B1X3NpemUsIE5VTEwsIDApOworCWNwX3RpbWVzID0gcmV0ID09IC0xID8gMCA6IDE7CisgICAgfQorICAgIGlmIChjcF90aW1lcykgeworCXN5c2N0bGJ5bmFtZSgia2Vybi5jcF90aW1lcyIsIE5VTEwsICZtY3B1X3NpemUsIE5VTEwsIDApOworCW1jcHVfc3RhdHMgPSBtYWxsb2MobWNwdV9zaXplKTsKKwlzeXNjdGxieW5hbWUoImtlcm4uY3BfdGltZXMiLCBtY3B1X3N0YXRzLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKKyAgICB9CisgICAgZWxzZSB7CisJbWNwdV9zaXplICA9IHNpemVvZihjcHVfc3RhdHMpOworCW1jcHVfc3RhdHMgPSBtYWxsb2MobWNwdV9zaXplKTsKKwlzeXNjdGxieW5hbWUoImtlcm4uY3BfdGltZSIsIG1jcHVfc3RhdHMsICZtY3B1X3NpemUsIE5VTEwsIDApOworCWFjdF9jcHUgPSAxOworICAgIH0KKyNlbmRpZgorICAgIGZvciAoIGkgPSAwOyBpIDwgYWN0X2NwdTsgaSsrICkgewogICAgICAgICBjcHUgPSBuZXRzbm1wX2NwdV9nZXRfYnlJZHgoIGksIDAgKTsKICAgICAgICAgLyogWFhYIC0gcGVyLUNQVSBzdGF0aXN0aWNzIC0gbWNwdV9taWJbaV0uPz8/ICovCisjaWZkZWYgS0VSTl9DUFRJTUUyCisJbWNwdV9taWJbMl0gPSBpOworCXN5c2N0bChtY3B1X21pYiwgMywgbWNwdV9zdGF0cytpKkNQVVNUQVRFUywgJm1jcHVfc2l6ZSwgTlVMTCwgMCk7CisjZW5kaWYKKwkvKiBBbG1vc3QgY29weSAmIHBhc3RlIG9mIHByZXZpb3VzIGNwdSBzdGF0cyBzdHVmZiA6KSAqLworCWNwdS0+dXNlcl90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9VU0VSXTsKKwljcHUtPm5pY2VfdGlja3MgPSBtY3B1X3N0YXRzWyhpKkNQVVNUQVRFUykrQ1BfTklDRV07CisJY3B1LT5zeXMyX3RpY2tzID0gbWNwdV9zdGF0c1soaSpDUFVTVEFURVMpK0NQX1NZU10rbWNwdV9zdGF0c1soaSpDUFVTVEFURVMpK0NQX0lOVFJdOworCWNwdS0+a2Vybl90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9TWVNdOworCWNwdS0+aWRsZV90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9JRExFXTsKKwljcHUtPmludHJwdF90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9JTlRSXTsKKwkgICAgLyogd2FpdF90aWNrcywgc2lycV90aWNrcyB1bnVzZWQgKi8KKworCSAgICAvKgorCSAgICAgKiBJbnRlcnJ1cHQvQ29udGV4dCBTd2l0Y2ggc3RhdGlzdGljcworCSAgICAgKiAgIFhYWCAtIERvIHRoZXNlIHJlYWxseSBiZWxvbmcgaGVyZSA/CisJICAgICAqLworCisJLyogVGhlcmUncyBubyByZWFsIG5lZWQgdG8gZXhlY3V0ZSBhbm90aGVyIHN5c2N0bCgpCisJICoKKwkgKiBzeXNjdGwobWVtX21pYiwgMiwgJm1lbV9zdGF0cywgJm1lbV9zaXplLCBOVUxMLCAwKTsKKwkgKi8KKwljcHUtPm5JbnRlcnJ1cHRzICA9IG1lbV9zdGF0cy5OU19WTV9JTlRSOworCWNwdS0+bkN0eFN3aXRjaGVzID0gbWVtX3N0YXRzLk5TX1ZNX1NXVENIOworCWNwdS0+c3dhcEluICAgICAgID0gbWVtX3N0YXRzLk5TX1ZNX1NXQVBJTjsKKwljcHUtPnN3YXBPdXQgICAgICA9IG1lbV9zdGF0cy5OU19WTV9TV0FQT1VUOworI2lmZGVmIE5TX1ZNX1BBR0VJTgorCWNwdS0+cGFnZUluICAgICAgID0gbWVtX3N0YXRzLk5TX1ZNX1BBR0VJTjsKKyNlbmRpZgorI2lmZGVmIE5TX1ZNX1BBR0VPVVQKKwljcHUtPnBhZ2VPdXQgICAgICA9IG1lbV9zdGF0cy5OU19WTV9QQUdFT1VUOworI2VuZGlmCiAgICAgfQogICAgIGZyZWUobWNwdV9zdGF0cyk7Ci0jZWxzZQorI2Vsc2UJLyogTkVUU05NUF9LRVJOX01DUFUgKi8KICAgICAgICAgLyogQ29weSAib3ZlcmFsbCIgZmlndXJlcyB0byBjcHUwIGVudHJ5ICovCiAgICAgX2NwdV9jb3B5X3N0YXRzKCBjcHUgKTsKLSNlbmRpZgorI2VuZGlmICAvKiBORVRTTk1QX0tFUk5fTUNQVSAqLwogCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNiZjQzOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaApAQCAtMCwwICsxLDEwIEBACitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9mc3lzL2h3X2ZzeXMpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bCkKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRWRlNTVEFUKSB8fCBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMpCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUTU5URU5UKSAmJiAhZGVmaW5lZChpcml4NikKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQpCisjZWxzZQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cy9mc3lzX3ZvaWQpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDI3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jCkBAIC0wLDAgKzEsMTY4IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaD4KKyNpbmNsdWRlICJoYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaCIKKworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiBIYW5kbGUgbWlub3IgbmFtaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gc3RhdGZzL3N0YXR2ZnMKKyAgICAgKi8KKyNpZiBkZWZpbmVkKF9WRlNfTkFNRUxFTikKKyNkZWZpbmUgTlNGU19OQU1FTEVOICBfVkZTX05BTUVMRU4KKyNlbHNlCisjZGVmaW5lIE5TRlNfTkFNRUxFTiAgTU5BTUVMRU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0dFVFZGU1NUQVQpICYmIGRlZmluZWQoX19OZXRCU0RfXykKKyNkZWZpbmUgTlNGU19HRVRGU1NUQVQgIGdldHZmc3N0YXQKKyNkZWZpbmUgTlNGU19TVEFURlMgICAgIHN0YXR2ZnMKKyNkZWZpbmUgTlNGU19GTEFHUyAgICAgIGZfZmxhZworI2Vsc2UKKyNkZWZpbmUgTlNGU19HRVRGU1NUQVQgIGdldGZzc3RhdAorI2RlZmluZSBOU0ZTX1NUQVRGUyAgICAgc3RhdGZzCisjZGVmaW5lIE5TRlNfRkxBR1MgICAgICBmX2ZsYWdzCisjZW5kaWYKKworaW50CitfZnNfdHlwZSggY2hhciAqdHlwZW5hbWUgKQoreworICAgIERFQlVHTVNHVEwoKCJmc3lzOnR5cGUiLCAiQ2xhc3NpZnlpbmcgJXNcbiIsIHR5cGVuYW1lKSk7CisKKyAgICBpZiAoICF0eXBlbmFtZSB8fCAqdHlwZW5hbWU9PSdcMCcgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfVU5LTk9XTjsKKworI2luY2x1ZGUgIm1vdW50cy5oIgorCisgICAgICAgLyoKKyAgICAgICAgKiBMaXN0IG9mIG1vdW50IHR5cGVzIGZyb20gPHN5cy9tb3VudC5oPgorICAgICAgICAqLworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9GRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX1VGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfQkVSS0VMRVk7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX05GUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTkZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9NRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX01GUzsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfTVNET1MpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX01TRE9TRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0ZBVDsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfQUZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9BRlM7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX0NEOTY2MCkgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfSVNPOTY2MDsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfRVhUMkZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9FWFQyOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9OVEZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9OVEZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9aRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX09USEVSOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9BQ0ZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9PVEhFUjsKKworICAgICAgIC8qCisgICAgICAgICogTmV0QlNEIGFsc28gcmVjb2duaXNlcyB0aGUgZm9sbG93aW5nIGZpbGVzeXN0ZW0gdHlwZXM6CisgICAgICAgICogICAgIE1PVU5UX05VTEwKKyAgICAgICAgKiAgICAgTU9VTlRfT1ZFUkxBWQorICAgICAgICAqICAgICBNT1VOVF9VTUFQCisgICAgICAgICogICAgIE1PVU5UX1VOSU9OCisgICAgICAgICogICAgIE1PVU5UX0NGUy9DT0RBCisgICAgICAgICogICAgIE1PVU5UX0ZJTEVDT1JFCisgICAgICAgICogICAgIE1PVU5UX1NNQkZTCisgICAgICAgICogICAgIE1PVU5UX1BUWUZTCisgICAgICAgICogT3BlbkJTRCBhbHNvIHJlY29nbmlzZXMgdGhlIGZvbGxvd2luZyBmaWxlc3lzdGVtIHR5cGVzOgorICAgICAgICAqICAgICBNT1VOVF9MT0ZTCisgICAgICAgICogICAgIE1PVU5UX05DUEZTCisgICAgICAgICogICAgIE1PVU5UX1hGUworICAgICAgICAqICAgICBNT1VOVF9VREYKKyAgICAgICAgKiBCb3RoIG9mIHRoZW0gcmVjb2duaXNlIHRoZSBmb2xsb3dpbmcgZmlsZXN5c3RlbSB0eXBlczoKKyAgICAgICAgKiAgICAgTU9VTlRfTEZTCisgICAgICAgICogICAgIE1PVU5UX0ZERVNDCisgICAgICAgICogICAgIE1PVU5UX1BPUlRBTAorICAgICAgICAqICAgICBNT1VOVF9LRVJORlMKKyAgICAgICAgKiAgICAgTU9VTlRfUFJPQ0ZTCisgICAgICAgICogICAgIE1PVU5UX0FET1NGUworICAgICAgICAqCisgICAgICAgICogQWxsIG9mIHRoZXNlIGZpbGVzeXN0ZW1zIGFyZSBtYXBwZWQgdG8gTkVUU05NUF9GU19UWVBFX09USEVSCisgICAgICAgICogICBzbyB3aWxsIGJlIHBpY2tlZCB1cCBieSB0aGUgZm9sbG93aW5nIGRlZmF1bHQgYnJhbmNoLgorICAgICAgICAqLworICAgIGVsc2UKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX09USEVSOworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9pbml0KCB2b2lkICkKK3sKKyAgICByZXR1cm47Cit9CisKK3ZvaWQKK25ldHNubXBfZnN5c19hcmNoX2xvYWQoIHZvaWQgKQoreworICAgIGludCBuLCBpOworICAgIHN0cnVjdCBOU0ZTX1NUQVRGUyAqc3RhdHM7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworCisgICAgLyoKKyAgICAgKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudGx5IG1vdW50ZWQgZmlsZXN5c3RlbXMuLi4KKyAgICAgKi8KKyAgICBuID0gTlNGU19HRVRGU1NUQVQoIE5VTEwsIDAsIDAgKTsKKyAgICBpZiAoIG49PTAgKQorICAgICAgICByZXR1cm47CisgICAgc3RhdHMgPSAoc3RydWN0IE5TRlNfU1RBVEZTICopbWFsbG9jKCBuICogc2l6ZW9mKCBzdHJ1Y3QgTlNGU19TVEFURlMgKSk7CisgICAgbiA9IE5TRlNfR0VURlNTVEFUKCBzdGF0cywgbiAqIHNpemVvZiggc3RydWN0IE5TRlNfU1RBVEZTICksIE1OVF9OT1dBSVQgKTsKKworICAgIC8qCisgICAgICogLi4uIGFuZCBpbnNlcnQgdGhpcyBpbnRvIHRoZSBmaWxlc3lzdGVtIGNvbnRhaW5lci4KKyAgICAgKi8KKyAgICBmb3IgKCBpPTA7IGk8bjsgaSsrICkgeworICAgICAgICBlbnRyeSA9IG5ldHNubXBfZnN5c19ieV9wYXRoKCBzdGF0c1tpXS5mX21udG9ubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GU19GSU5EX0NSRUFURSApOworICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3RybGNweSggZW50cnktPnBhdGgsICAgc3RhdHNbaV0uZl9tbnRvbm5hbWUsICAgc2l6ZW9mKGVudHJ5LT5wYXRoKSk7CisgICAgICAgIGVudHJ5LT5wYXRoW3NpemVvZihlbnRyeS0+cGF0aCktMV0gPSAnXDAnOworICAgICAgICBzdHJsY3B5KCBlbnRyeS0+ZGV2aWNlLCBzdGF0c1tpXS5mX21udGZyb21uYW1lLCBzaXplb2YoZW50cnktPmRldmljZSkpOworICAgICAgICBlbnRyeS0+ZGV2aWNlW3NpemVvZihlbnRyeS0+ZGV2aWNlKS0xXSA9ICdcMCc7CisgICAgICAgIGVudHJ5LT51bml0cyA9IHN0YXRzW2ldLmZfYnNpemU7ICAgIC8qIG9yIGZfZnJzaXplICovCisgICAgICAgIGVudHJ5LT5zaXplICA9IHN0YXRzW2ldLmZfYmxvY2tzOworICAgICAgICBlbnRyeS0+dXNlZCAgPSAoc3RhdHNbaV0uZl9ibG9ja3MgLSBzdGF0c1tpXS5mX2JmcmVlKTsKKyAgICAgICAgLyogZW50cnktPmF2YWlsIGlzIGN1cnJlbnRseSB1bnNpZ25lZCwgc28gcHJvdGVjdCBhZ2FpbnN0IG5lZ2F0aXZlCisgICAgICAgICAqIHZhbHVlcyEKKyAgICAgICAgICogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byBhIHNpZ25lZCBmaWVsZC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChzdGF0c1tpXS5mX2JhdmFpbCA8IDApCisgICAgICAgICAgICBlbnRyeS0+YXZhaWwgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS0+YXZhaWwgPSBzdGF0c1tpXS5mX2JhdmFpbDsKKyAgICAgICAgZW50cnktPmludW1zX3RvdGFsID0gc3RhdHNbaV0uZl9maWxlczsKKyAgICAgICAgZW50cnktPmludW1zX2F2YWlsID0gc3RhdHNbaV0uZl9mZnJlZTsKKworICAgICAgICBlbnRyeS0+dHlwZSA9IF9mc190eXBlKCBzdGF0c1tpXS5mX2ZzdHlwZW5hbWUgKTsKKyAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19BQ1RJVkU7CisKKyAgICAgICAgaWYgKCEgKHN0YXRzW2ldLk5TRlNfRkxBR1MgJiBNTlRfTE9DQUwgKSkgeworICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19SRU1PVEU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAgc3RhdHNbaV0uTlNGU19GTEFHUyAmIE1OVF9SRE9OTFkgKSB7CisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX1JPTkxZOworICAgICAgICB9CisgICAgICAgIGlmICggIHN0YXRzW2ldLk5TRlNfRkxBR1MgJiBNTlRfUk9PVEZTICkgeworICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19CT09UQUJMRTsKKyAgICAgICAgfQorICAgICAgICBuZXRzbm1wX2ZzeXNfY2FsY3VsYXRlMzIoZW50cnkpOworICAgIH0KKworICAgIGZyZWUoc3RhdHMpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYmIwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmMKQEAgLTAsMCArMSwxODIgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NZU19NTlRDVExfSAorI2luY2x1ZGUgPHN5cy9tbnRjdGwuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1ZNT1VOVF9ICisjaW5jbHVkZSA8c3lzL3Ztb3VudC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisKKworaW50CitfZnN5c19yZW1vdGUoIGNoYXIgKmRldmljZSwgaW50IHR5cGUsIGNoYXIgKmhvc3QgKQoreworICAgIGlmICgoIHR5cGUgPT0gTkVUU05NUF9GU19UWVBFX05GUykgfHwKKyAgICAgICAgKCB0eXBlID09IE5FVFNOTVBfRlNfVFlQRV9BRlMpKQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitpbnQKK19mc3lzX3R5cGUoIGludCB0eXBlKQoreworICAgIERFQlVHTVNHVEwoKCJmc3lzOnR5cGUiLCAiQ2xhc3NpZnlpbmcgJWRcbiIsIHR5cGUpKTsKKworICAgIHN3aXRjaCAoIHR5cGUgKSB7CisgICAgICAgIGNhc2UgIE1OVF9BSVg6CisgICAgICAgIGNhc2UgIE1OVF9KRlM6CisgICAgICAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0JFUktFTEVZOworCisgICAgICAgIGNhc2UgIE1OVF9DRFJPTToKKyAgICAgICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfSVNPOTY2MDsKKworICAgICAgICBjYXNlICBNTlRfTkZTOgorICAgICAgICBjYXNlICBNTlRfTkZTMzoKKyAgICAgICAgY2FzZSAgTU5UX0FVVE9GUzoKKyAgICAgICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTkZTOworCisgICAgLyoKKyAgICAgKiAgVGhlIGZvbGxvd2luZyBjb2RlIGNvdmVycyBzZWxlY3RlZCBmaWxlc3lzdGVtcworICAgICAqICAgIHdoaWNoIGFyZSBub3QgY292ZXJlZCBieSB0aGUgSFItVFlQRVMgZW51bWVyYXRpb25zLAorICAgICAqICAgIGJ1dCBzaG91bGQgc3RpbGwgYmUgbW9uaXRvcmVkLgorICAgICAqICBUaGVzZSBhcmUgYWxsIG1hcHBlZCBpbnRvIHR5cGUgIm90aGVyIgorICAgICAqCisgICAgICovICAgIAorI2lmZGVmIE1OVF9OQU1FRlMKKyAgICAgICAgY2FzZSBNTlRfTkFNRUZTOgorI2VuZGlmCisjaWZkZWYgTU5UX1BST0NGUworICAgICAgICBjYXNlIE1OVF9QUk9DRlM6CisjZW5kaWYKKyNpZmRlZiBNTlRfQUNGUworICAgICAgICBjYXNlIE1OVF9BQ0ZTOgorI2VuZGlmCisgICAgICAgIGNhc2UgTU5UX1NGUzoKKyAgICAgICAgY2FzZSBNTlRfQ0FDSEVGUzoKKyAgICAgICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfT1RIRVI7CisKKyAgICAvKiAgICAKKyAgICAgKiAgQWxsIG90aGVyIHR5cGVzIGFyZSBzaWxlbnRseSBza2lwcGVkCisgICAgICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0lHTk9SRTsKKyAgICB9CisgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9JR05PUkU7ICAvKiBOb3QgcmVhY2hlZCAqLworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9pbml0KCB2b2lkICkKK3sKKyAgICByZXR1cm47Cit9CisKK3ZvaWQKK25ldHNubXBfZnN5c19hcmNoX2xvYWQoIHZvaWQgKQoreworICAgIGludCAgcmV0ICA9IDAsIGkgPSAwOworICAgIHVpbnQgc2l6ZSA9IDA7CisKKyAgICBzdHJ1Y3Qgdm1vdW50ICphaXhtbnQsICphaXhjdXJyOworICAgIGNoYXIgICAgICAgICAgKnBhdGg7CisgICAgc3RydWN0IHN0YXRmcyAgc3RhdF9idWY7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworICAgIGNoYXIgICAgICAgICAgICAgICB0bXBidWZbMTAyNF07CisKKyAgICAvKgorICAgICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgbW91bnRlZCBmaWxlc3lzdGVtcy4uLgorICAgICAqLworICAgIHJldCA9IG1udGN0bChNQ1RMX1FVRVJZLCBzaXplb2YodWludCksICh2b2lkICopICZzaXplKTsKKyAgICBpZiAoIHJldCAhPSAwIHx8IHNpemU8PTAgKSB7CisgICAgICAgIHNubXBfbG9nX3BlcnJvciggImluaXRpYWwgbW50Y3RsIGZhaWxlZCIgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFpeG1udCA9IChzdHJ1Y3Qgdm1vdW50ICopbWFsbG9jKCBzaXplICk7CisgICAgaWYgKCBhaXhtbnQgPT0gTlVMTCApIHsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCAiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbW50Y3RsIGRhdGEiICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXQgPSBtbnRjdGwoTUNUTF9RVUVSWSwgc2l6ZSwgKHZvaWQgKikgYWl4bW50KTsKKyAgICBpZiAoIHJldCA8PSAwICkgeworICAgICAgICBmcmVlKGFpeG1udCk7CisgICAgICAgIHNubXBfbG9nX3BlcnJvciggIm1haW4gbW50Y3RsIGZhaWxlZCIgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhaXhjdXJyID0gYWl4bW50OworCisKKyAgICAvKgorICAgICAqIC4uLiBhbmQgaW5zZXJ0IHRoaXMgaW50byB0aGUgZmlsZXN5c3RlbSBjb250YWluZXIuCisgICAgICovCisKKyAgICBmb3IgKGkgPSAwOworICAgICAgICAgaSA8IHJldDsKKyAgICAgICAgIGkrKywgYWl4Y3VyciA9IChzdHJ1Y3Qgdm1vdW50ICopICgoY2hhciopYWl4Y3VyciArIGFpeGN1cnItPnZtdF9sZW5ndGgpICkgeworCisgICAgICAgIHBhdGggPSB2bXQyZGF0YXB0ciggYWl4Y3VyciwgVk1UX1NUVUIgKTsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2ZzeXNfYnlfcGF0aCggcGF0aCwgTkVUU05NUF9GU19GSU5EX0NSRUFURSApOworICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmxjcHkoZW50cnktPnBhdGgsIHBhdGgsIHNpemVvZihlbnRyeS0+cGF0aCkpOworICAgICAgICBzdHJsY3B5KGVudHJ5LT5kZXZpY2UsIHZtdDJkYXRhcHRyKGFpeGN1cnIsIFZNVF9PQkpFQ1QpLAorICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+ZGV2aWNlKSk7CisgICAgICAgIGVudHJ5LT50eXBlICAgPSBfZnN5c190eXBlKCBhaXhjdXJyLT52bXRfZ2ZzdHlwZSApOworCisgICAgICAgIGlmICghKGVudHJ5LT50eXBlICYgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVCkpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX0FDVElWRTsKKworICAgICAgICBpZiAoIF9mc3lzX3JlbW90ZSggZW50cnktPmRldmljZSwgZW50cnktPnR5cGUsIHZtdDJkYXRhcHRyKCBhaXhjdXJyLCBWTVRfSE9TVCkgKSkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFOworICAgICAgICBpZiAoIGFpeGN1cnItPnZtdF9mbGFncyAmIE1OVF9SRUFET05MWSApCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX1JPTkxZOworICAgICAgICAvKgorICAgICAgICAgKiAgVGhlIHJvb3QgZGV2aWNlIGlzIHByZXN1bWFibHkgYm9vdGFibGUuCisgICAgICAgICAqICBPdGhlciBwYXJ0aXRpb25zIHByb2JhYmx5IGFyZW4ndCEKKyAgICAgICAgICovCisgICAgICAgIGlmICgoZW50cnktPnBhdGhbMF0gPT0gJy8nKSAmJiAoZW50cnktPnBhdGhbMV0gPT0gJ1wwJykpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX0JPT1RBQkxFOworCisgICAgICAgIC8qCisgICAgICAgICAqICBYWFggLSBpZGVudGlmeSByZW1vdmVhYmxlIGRpc2tzCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqICBPcHRpb25hbGx5IHNraXAgcmV0cmlldmluZyBzdGF0aXN0aWNzIGZvciByZW1vdGUgbW91bnRzCisgICAgICAgICAqLworICAgICAgICBpZiAoIChlbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFKSAmJgorICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCBzdGF0ZnMoIGVudHJ5LT5wYXRoLCAmc3RhdF9idWYgKSA8IDAgKSB7CisgICAgICAgICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbm5vdCBzdGF0ZnMgJXMiLCBlbnRyeS0+cGF0aCApOworICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCB0bXBidWYgKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVudHJ5LT51bml0cyA9ICBzdGF0X2J1Zi5mX2JzaXplOworICAgICAgICBlbnRyeS0+c2l6ZSAgPSAgc3RhdF9idWYuZl9ibG9ja3M7CisgICAgICAgIGVudHJ5LT51c2VkICA9IChzdGF0X2J1Zi5mX2Jsb2NrcyAtIHN0YXRfYnVmLmZfYmZyZWUpOworICAgICAgICBlbnRyeS0+YXZhaWwgPSAgc3RhdF9idWYuZl9iYXZhaWw7CisgICAgICAgIGVudHJ5LT5pbnVtc190b3RhbCA9IHN0YXRfYnVmLmZfZmlsZXM7CisgICAgICAgIGVudHJ5LT5pbnVtc19hdmFpbCA9IHN0YXRfYnVmLmZfZmZyZWU7CisgICAgICAgIG5ldHNubXBfZnN5c19jYWxjdWxhdGUzMihlbnRyeSk7CisgICAgfQorICAgIGZyZWUoYWl4bW50KTsKKyAgICBhaXhtbnQgID0gTlVMTDsKKyAgICBhaXhjdXJyID0gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDIzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMKQEAgLTAsMCArMSwyNjIgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX01OVEVOVF9ICisjaW5jbHVkZSA8bW50ZW50Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NTlRUQUJfSAorI2luY2x1ZGUgPHN5cy9tbnR0YWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1ZGU19ICisjaW5jbHVkZSA8c3lzL3Zmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisKKyNpZmRlZiBzb2xhcmlzMgorI2RlZmluZSBfTkVUU05NUF9HRVRNTlRFTlRfVFdPX0FSR1MgMQorI2Vsc2UKKyN1bmRlZiAgX05FVFNOTVBfR0VUTU5URU5UX1RXT19BUkdTIAorI2VuZGlmCisKKyAgICAvKgorICAgICAqIEhhbmRsZSBuYW1pbmcgZGlmZmVyZW5jZXMgYmV0d2VlbiBnZXRtbnRlbnQoKSBBUElzCisgICAgICovCisjaWZkZWYgX05FVFNOTVBfR0VUTU5URU5UX1RXT19BUkdTCisgICAgLyogVHdvLWFyZ3VtZW50IGZvcm0gKFNvbGFyaXMpICovCisjZGVmaW5lIE5TRlNfTU5URU5UICAgc3RydWN0IG1udHRhYgorI2RlZmluZSBOU0ZTX1BBVEggICAgIG1udF9tb3VudHAKKyNkZWZpbmUgTlNGU19ERVYgICAgICBtbnRfc3BlY2lhbAorI2RlZmluZSBOU0ZTX1RZUEUgICAgIG1udF9mc3R5cGUKKworI2RlZmluZSBOU0ZTX1NUQVRGUyAgIHN0YXR2ZnMKKyNkZWZpbmUgTlNGU19TSVpFICAgICBmX2Zyc2l6ZQorCisjZWxzZQorICAgIC8qIE9uZS1hcmd1bWVudCBmb3JtIChldmVyeXRoaW5nIGVsc2U/KSAqLworI2RlZmluZSBOU0ZTX01OVEVOVCAgIHN0cnVjdCBtbnRlbnQKKyNkZWZpbmUgTlNGU19QQVRIICAgICBtbnRfZGlyCisjZGVmaW5lIE5TRlNfREVWICAgICAgbW50X2ZzbmFtZQorI2RlZmluZSBOU0ZTX1RZUEUgICAgIG1udF90eXBlCisKKyNkZWZpbmUgTlNGU19TVEFURlMgICBzdGF0ZnMKKyNkZWZpbmUgTlNGU19TSVpFICAgICBmX2JzaXplCisKKyNlbmRpZgorCitpbnQKK19mc3lzX3JlbW90ZSggY2hhciAqZGV2aWNlLCBpbnQgdHlwZSApCit7CisgICAgaWYgKCggdHlwZSA9PSBORVRTTk1QX0ZTX1RZUEVfTkZTKSB8fAorICAgICAgICAoIHR5cGUgPT0gTkVUU05NUF9GU19UWVBFX0FGUykpCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX2ZzeXNfdHlwZSggY2hhciAqdHlwZW5hbWUgKQoreworICAgIERFQlVHTVNHVEwoKCJmc3lzOnR5cGUiLCAiQ2xhc3NpZnlpbmcgJXNcbiIsIHR5cGVuYW1lKSk7CisKKyAgICBpZiAoICF0eXBlbmFtZSB8fCAqdHlwZW5hbWU9PSdcMCcgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfVU5LTk9XTjsKKworI2luY2x1ZGUgIm1udHR5cGVzLmgiCisKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9GRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0JFUktFTEVZOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1VGUykgKQorICAgICAgIHJldHVybiBfTkVUU05NUF9GU19UWVBFX1VGUzsgICAvKiBlaXRoZXIgTl9GU19UWVBFX0JFUktFTEVZIG9yIE5fRlNfVFlQRV9TWVNWICovCisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfU1lTVikgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfU1lTVjsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9QQykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9NU0RPUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfRkFUOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0hGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfSEZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX01GUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTUZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX05URlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX05URlM7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfSVNPOTY2MCkgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9DRDk2NjApICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0lTTzk2NjA7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfQ0RGUykgKQorICAgICAgIHJldHVybiBfTkVUU05NUF9GU19UWVBFX0NERlM7ICAgLyogZWl0aGVyIE5fRlNfVFlQRV9JU085NjYwIG9yIE5fRlNfVFlQRV9ST0NLUklER0UgKi8KKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9IU0ZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9ST0NLUklER0U7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfTkZTKSAgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9ORlMzKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX05GUzQpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfQ0lGUykgfHwgIC8qIGkuZS4gU01CIC0gPz8gKi8KKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9TTUJGUykgICAgLyogPz8gKi8gKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTkZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX05DUEZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9ORVRXQVJFOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0FGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfQUZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0VYVDIpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfRVhUMykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9FWFQ0KSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0VYVDJGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9FWFQzRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfRVhUNEZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9FWFQyOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0ZBVDMyKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1ZGQVQpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0ZBVDMyOworCisgICAgLyoKKyAgICAgKiAgVGhlIGZvbGxvd2luZyBjb2RlIGNvdmVycyBzZWxlY3RlZCBmaWxlc3lzdGVtcworICAgICAqICAgIHdoaWNoIGFyZSBub3QgY292ZXJlZCBieSB0aGUgSFItVFlQRVMgZW51bWVyYXRpb25zLAorICAgICAqICAgIGJ1dCBzaG91bGQgc3RpbGwgYmUgbW9uaXRvcmVkLgorICAgICAqICBUaGVzZSBhcmUgYWxsIG1hcHBlZCBpbnRvIHR5cGUgIm90aGVyIgorICAgICAqCisgICAgICogICAgKFRoZSBzeXN0ZW1zIGxpc3RlZCBhcmUgbm90IGZpeGVkIGluIHN0b25lLAorICAgICAqICAgICBidXQgYXJlIHNpbXBseSBoZXJlIHRvIGlsbHVzdHJhdGUgdGhlIHByaW5jaXBsZSEpCisgICAgICovICAgIAorICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX01WRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfVE1QRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfR0ZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0dGUzIpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfWEZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0pGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9WWEZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1JFSVNFUkZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX09DRlMyKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0NWRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfU0lNRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfQlRSRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfWkZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0FDRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfTE9GUykpCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9PVEhFUjsKKworICAgIC8qICAgIAorICAgICAqICBBbGwgb3RoZXIgdHlwZXMgYXJlIHNpbGVudGx5IHNraXBwZWQKKyAgICAgKi8KKyAgICBlbHNlCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9JR05PUkU7Cit9CisKK3ZvaWQKK25ldHNubXBfZnN5c19hcmNoX2luaXQoIHZvaWQgKQoreworICAgIHJldHVybjsKK30KKwordm9pZAorbmV0c25tcF9mc3lzX2FyY2hfbG9hZCggdm9pZCApCit7CisgICAgRklMRSAgICAgICAgICAgICAgKmZwPU5VTEw7CisjaWZkZWYgX05FVFNOTVBfR0VUTU5URU5UX1RXT19BUkdTCisgICAgc3RydWN0IG1udHRhYiAgICAgIG10bXA7CisgICAgc3RydWN0IG1udHRhYiAgICAgKm0gPSAmbXRtcDsKKyNlbHNlCisgICAgc3RydWN0IG1udGVudCAgICAgKm07CisjZW5kaWYKKyAgICBzdHJ1Y3QgTlNGU19TVEFURlMgc3RhdF9idWY7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworICAgIGNoYXIgICAgICAgICAgICAgICB0bXBidWZbMTAyNF07CisKKyAgICAvKgorICAgICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgbW91bnRlZCBmaWxlc3lzdGVtcy4uLgorICAgICAqLworICAgIGZwID0gZm9wZW4oIEVUQ19NTlRUQUIsICJyIiApOyAgIC8qIE9SIHNldG1udGVudCgpPz8gKi8KKyAgICBpZiAoICFmcCApIHsKKyAgICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDYW5ub3Qgb3BlbiAlcyIsIEVUQ19NTlRUQUIgKTsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCB0bXBidWYgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogLi4uIGFuZCBpbnNlcnQgdGhpcyBpbnRvIHRoZSBmaWxlc3lzdGVtIGNvbnRhaW5lci4KKyAgICAgKi8KKyAgICB3aGlsZSAKKyNpZmRlZiBfTkVUU05NUF9HRVRNTlRFTlRfVFdPX0FSR1MKKyAgICAgICAgICAoKGdldG1udGVudChmcCwgbSkpID09IDAgKQorI2Vsc2UKKyAgICAgICAgICAoKG0gPSBnZXRtbnRlbnQoZnApKSAhPSBOVUxMICkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2ZzeXNfYnlfcGF0aCggbS0+TlNGU19QQVRILCBORVRTTk1QX0ZTX0ZJTkRfQ1JFQVRFICk7CisgICAgICAgIGlmICghZW50cnkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc3RybGNweShlbnRyeS0+cGF0aCwgbS0+TlNGU19QQVRILCBzaXplb2YoZW50cnktPnBhdGgpKTsKKyAgICAgICAgc3RybGNweShlbnRyeS0+ZGV2aWNlLCBtLT5OU0ZTX0RFViwgc2l6ZW9mKGVudHJ5LT5kZXZpY2UpKTsKKyAgICAgICAgZW50cnktPnR5cGUgPSBfZnN5c190eXBlKG0tPk5TRlNfVFlQRSk7CisgICAgICAgIGlmICghKGVudHJ5LT50eXBlICYgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVCkpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX0FDVElWRTsKKworICAgICAgICBpZiAoIF9mc3lzX3JlbW90ZSggZW50cnktPmRldmljZSwgZW50cnktPnR5cGUgKSkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFOworI2lmIEhBVkVfSEFTTU5UT1BUCisgICAgICAgIGlmIChoYXNtbnRvcHQoIG0sICJybyIgKSkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfUk9OTFk7CisjZW5kaWYKKyAgICAgICAgLyoKKyAgICAgICAgICogIFRoZSByb290IGRldmljZSBpcyBwcmVzdW1hYmx5IGJvb3RhYmxlLgorICAgICAgICAgKiAgT3RoZXIgcGFydGl0aW9ucyBwcm9iYWJseSBhcmVuJ3QhCisgICAgICAgICAqCisgICAgICAgICAqICBYWFggLSB3aGF0IGFib3V0IC9ib290ID8/CisgICAgICAgICAqLworICAgICAgICBpZiAoKGVudHJ5LT5wYXRoWzBdID09ICcvJykgJiYKKyAgICAgICAgICAgIChlbnRyeS0+cGF0aFsxXSA9PSAnXDAnKSkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfQk9PVEFCTEU7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIFhYWCAtIGlkZW50aWZ5IHJlbW92ZWFibGUgZGlza3MKKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogIE9wdGlvbmFsbHkgc2tpcCByZXRyaWV2aW5nIHN0YXRpc3RpY3MgZm9yIHJlbW90ZSBtb3VudHMKKyAgICAgICAgICovCisgICAgICAgIGlmICggKGVudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19SRU1PVEUpICYmCisgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfU0tJUE5GU0lOSE9TVFJFU09VUkNFUykpCisgICAgICAgICAgICBjb250aW51ZTsKKworI2lmZGVmIGlyaXg2CisgICAgICAgIGlmICggTlNGU19TVEFURlMoIGVudHJ5LT5wYXRoLCAmc3RhdF9idWYsIHNpemVvZihzdHJ1Y3Qgc3RhdGZzKSwgMCkgPCAwICkKKyNlbHNlCisgICAgICAgIGlmICggTlNGU19TVEFURlMoIGVudHJ5LT5wYXRoLCAmc3RhdF9idWYgKSA8IDAgKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiQ2Fubm90IHN0YXRmcyAlcyIsIGVudHJ5LT5wYXRoICk7CisgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIHRtcGJ1ZiApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZW50cnktPnVuaXRzID0gIHN0YXRfYnVmLk5TRlNfU0laRTsKKyAgICAgICAgZW50cnktPnNpemUgID0gIHN0YXRfYnVmLmZfYmxvY2tzOworICAgICAgICBlbnRyeS0+dXNlZCAgPSAoc3RhdF9idWYuZl9ibG9ja3MgLSBzdGF0X2J1Zi5mX2JmcmVlKTsKKyAgICAgICAgLyogZW50cnktPmF2YWlsIGlzIGN1cnJlbnRseSB1bnNpZ25lZCwgc28gcHJvdGVjdCBhZ2FpbnN0IG5lZ2F0aXZlCisgICAgICAgICAqIHZhbHVlcyEKKyAgICAgICAgICogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byBhIHNpZ25lZCBmaWVsZC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChzdGF0X2J1Zi5mX2JhdmFpbCA8IDApCisgICAgICAgICAgICBlbnRyeS0+YXZhaWwgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS0+YXZhaWwgPSAgc3RhdF9idWYuZl9iYXZhaWw7CisgICAgICAgIGVudHJ5LT5pbnVtc190b3RhbCA9IHN0YXRfYnVmLmZfZmlsZXM7CisgICAgICAgIGVudHJ5LT5pbnVtc19hdmFpbCA9IHN0YXRfYnVmLmZfZmZyZWU7CisgICAgICAgIG5ldHNubXBfZnN5c19jYWxjdWxhdGUzMihlbnRyeSk7CisgICAgfQorICAgIGZjbG9zZSggZnAgKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX3ZvaWQuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c192b2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkYzM0NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c192b2lkLmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisKK2ludAorX2ZzeXNfcmVtb3RlKCBjaGFyICpkZXZpY2UsIGludCB0eXBlICkKK3sKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfZnN5c190eXBlKCBjaGFyICp0eXBlbmFtZSApCit7CisgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9VTktOT1dOOworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9pbml0KCB2b2lkICkKK3sgfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9sb2FkKCB2b2lkICkKK3sgfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmNkOTRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMKQEAgLTAsMCArMSwzNDkgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaHdfZnN5c19nZXRfY29udGFpbmVyLCBuZXRzbm1wX3VudXNlZCkKKworZXh0ZXJuIHZvaWQgICAgICAgICAgICAgbmV0c25tcF9mc3lzX2FyY2hfbG9hZCggdm9pZCApOworZXh0ZXJuIHZvaWQgICAgICAgICAgICAgbmV0c25tcF9mc3lzX2FyY2hfaW5pdCggdm9pZCApOworc3RhdGljIGludCAgX2ZzeXNfbG9hZCggdm9pZCApOworc3RhdGljIHZvaWQgX2ZzeXNfZnJlZSggdm9pZCApOworCitzdGF0aWMgaW50IF9mc3lzQXV0b1VwZGF0ZSA9IDA7ICAgLyogMCBtZWFucyBvbi1kZW1hbmQgY2FjaGluZyAqLworc3RhdGljIHZvaWQgX2ZzeXNfdXBkYXRlX3N0YXRzKCB1bnNpZ25lZCBpbnQsIHZvaWQqICk7CisKK25ldHNubXBfY2FjaGUgICAgICpfZnN5c19jYWNoZSAgICAgPSBOVUxMOworbmV0c25tcF9jb250YWluZXIgKl9mc3lzX2NvbnRhaW5lciA9IE5VTEw7CitzdGF0aWMgaW50ICAgICAgICAgX2ZzeXNfaWR4ICAgICAgID0gMDsKK3N0YXRpYyBuZXRzbm1wX2ZzeXNfaW5mbyAqIF9mc3lzX2NyZWF0ZV9lbnRyeSggdm9pZCApOworCit2b2lkIGluaXRfaHdfZnN5cyggdm9pZCApIHsKKworICAgIGlmICggX2ZzeXNfY29udGFpbmVyICkKKyAgICAgICAgcmV0dXJuOyAgIC8qIEFscmVhZHkgaW5pdGlhbGlzZWQgKi8KKworICAgIERFQlVHTVNHVEwoKCJmc3lzIiwgIkluaXRpYWxpc2UgSGFyZHdhcmUgRmlsZVN5c3RlbSBtb2R1bGVcbiIpKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIGEgY29udGFpbmVyIHRvIGhvbGQgdGhlIGxpc3Qgb2YgZmlsZXN5c3RlbXMKKyAgICAgKi8KKyAgICBfZnN5c19jb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJmc3lzVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKCBOVUxMID09IF9mc3lzX2NvbnRhaW5lciApIHsKKyAgICAgICAgc25tcF9sb2coIExPR19FUlIsICJmYWlsZWQgdG8gY3JlYXRlIGNvbnRhaW5lciBmb3IgZnN5c1RhYmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbmV0c25tcF9mc3lzX2FyY2hfaW5pdCggKTsKKworICAgIC8qCisgICAgICogSWYgd2UncmUgc2FtcGxpbmcgdGhlIGZpbGUgc3lzdGVtIGluZm9ybWF0aW9uIGF1dG9tYXRpY2FsbHksCisgICAgICogICB0aGVuIGFycmFuZ2UgZm9yIHRoaXMgdG8gYmUgdHJpZ2dlcmVkIHJlZ3VsYXJseS4KKyAgICAgKgorICAgICAqIElmIHdlJ3JlIG5vdCBzYW1wbGluZyB0aGVzZSB2YWx1ZXMgcmVndWxhcmx5LAorICAgICAqICAgY3JlYXRlIGEgc3VpdGFibGUgY2FjaGUgaGFuZGxlciBpbnN0ZWFkLgorICAgICAqLworICAgIGlmICggX2ZzeXNBdXRvVXBkYXRlICkgeworICAgICAgICBERUJVR01TR1RMKCgiZnN5cyIsICJSZWxvYWRpbmcgSGFyZHdhcmUgRmlsZVN5c3RlbXMgYXV0b21hdGljYWxseSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mc3lzQXV0b1VwZGF0ZSkpOworICAgICAgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKCBfZnN5c0F1dG9VcGRhdGUsIFNBX1JFUEVBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZzeXNfdXBkYXRlX3N0YXRzLCBOVUxMICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBfZnN5c19jYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKCA1LCBuZXRzbm1wX2ZzeXNfbG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mc3lzX2ZyZWUsIE5VTEwsIDAgKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImZzeXMiLCAiUmVsb2FkaW5nIEhhcmR3YXJlIEZpbGVTeXN0ZW1zIG9uLWRlbWFuZCAoJXApXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mc3lzX2NhY2hlKSk7CisgICAgfQorfQorCit2b2lkIHNodXRkb3duX2h3X2ZzeXMoIHZvaWQgKSB7CisgICAgX2ZzeXNfZnJlZSgpOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSFdfRlNZU19HRVRfQ09OVEFJTkVSCisvKgorICogIFJldHVybiB0aGUgbWFpbiBmc3lzIGNvbnRhaW5lcgorICovCituZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9mc3lzX2dldF9jb250YWluZXIoIHZvaWQgKSB7IHJldHVybiBfZnN5c19jb250YWluZXI7IH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hXX0ZTWVNfR0VUX0NPTlRBSU5FUiAqLworCisvKgorICogIFJldHVybiB0aGUgbWFpbiBmc3lzIGNhY2hlIGNvbnRyb2wgc3RydWN0dXJlIChpZiBkZWZpbmVkKQorICovCituZXRzbm1wX2NhY2hlICpuZXRzbm1wX2ZzeXNfZ2V0X2NhY2hlKCB2b2lkICkgeyByZXR1cm4gX2ZzeXNfY2FjaGU7IH0KKworCisvKgorICogV3JhcHBlciByb3V0aW5lIGZvciBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nIGZzeXMgaW5mb3JtYXRpb24KKyAqLwordm9pZAorX2ZzeXNfdXBkYXRlX3N0YXRzKCB1bnNpZ25lZCBpbnQgY2xpZW50cmVnLCB2b2lkICpkYXRhICkKK3sKKyAgICBfZnN5c19mcmVlKCk7CisgICAgX2ZzeXNfbG9hZCgpOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIGZvciByZS1sb2FkaW5nIGZpbGVzeXN0ZW0gc3RhdGlzdGljcyBvbiBkZW1hbmQKKyAqLworaW50CituZXRzbm1wX2ZzeXNfbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKmRhdGEgKQoreworICAgIC8qIFhYWCAtIGNoZWNrIGNhY2hlIHRpbWVsaW5lc3MgKi8KKyAgICByZXR1cm4gX2ZzeXNfbG9hZCgpOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIGZvciByZWxlYXNpbmcgZXhwaXJlZCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKKyAqLwordm9pZAorbmV0c25tcF9mc3lzX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICpkYXRhICkKK3sKKyAgICBfZnN5c19mcmVlKCk7Cit9CisKKworLyoKKyAqIEFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBwcm9jZXNzaW5nIG9mIGxvYWRpbmcgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCisgKi8KK3N0YXRpYyBpbnQKK19mc3lzX2xvYWQoIHZvaWQgKQoreworICAgIG5ldHNubXBfZnN5c19hcmNoX2xvYWQoKTsKKyAgICAvKiBYWFggLSB1cGRhdGUgY2FjaGUgdGltZXN0YW1wICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcmVsZWFzZSBvZiBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKKyAqLworc3RhdGljIHZvaWQKK19mc3lzX2ZyZWUoIHZvaWQgKQoreworICAgIG5ldHNubXBfZnN5c19pbmZvICpzcDsKKworICAgIGZvciAoc3AgPSBDT05UQUlORVJfRklSU1QoIF9mc3lzX2NvbnRhaW5lciApOworICAgICAgICAgc3A7CisgICAgICAgICBzcCA9IENPTlRBSU5FUl9ORVhUKCAgX2ZzeXNfY29udGFpbmVyLCBzcCApKSB7CisKKyAgICAgICAgIHNwLT5mbGFncyAmPSB+TkVUU05NUF9GU19GTEFHX0FDVElWRTsKKyAgICB9Cit9CisKKworbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19nZXRfZmlyc3QoIHZvaWQgKSB7CisgICAgcmV0dXJuIENPTlRBSU5FUl9GSVJTVCggX2ZzeXNfY29udGFpbmVyICk7Cit9CituZXRzbm1wX2ZzeXNfaW5mbyAqbmV0c25tcF9mc3lzX2dldF9uZXh0KCBuZXRzbm1wX2ZzeXNfaW5mbyAqdGhpc19wdHIgKSB7CisgICAgcmV0dXJuIENPTlRBSU5FUl9ORVhUKCBfZnN5c19jb250YWluZXIsIHRoaXNfcHRyICk7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBhIGZpbGVzeXN0ZW0gZW50cnkgYmFzZWQgb24gdGhlIHBhdGggd2hlcmUgaXQgaXMgbW91bnRlZCwKKyAqICBvciAob3B0aW9uYWxseSkgaW5zZXJ0IGEgbmV3IG9uZSBpbnRvIHRoZSBjb250YWluZXIKKyAqLworbmV0c25tcF9mc3lzX2luZm8gKgorbmV0c25tcF9mc3lzX2J5X3BhdGgoIGNoYXIgKnBhdGgsIGludCBjcmVhdGVfdHlwZSApCit7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKnNwOworCisgICAgREVCVUdNU0dUTCgoImZzeXM6cGF0aCIsICJHZXQgZmlsZXN5c3RlbSBlbnRyeSAoJXMpXG4iLCBwYXRoKSk7CisKKyAgICAvKgorICAgICAqICBMb29rIHRocm91Z2ggdGhlIGxpc3QgZm9yIGEgbWF0Y2hpbmcgZW50cnkKKyAgICAgKi8KKyAgICAgICAgLyogLi4gb3IgdXNlIGEgc2Vjb25kYXJ5IGluZGV4IGNvbnRhaW5lciA/PyAqLworICAgIGZvciAoc3AgPSBDT05UQUlORVJfRklSU1QoIF9mc3lzX2NvbnRhaW5lciApOworICAgICAgICAgc3A7CisgICAgICAgICBzcCA9IENPTlRBSU5FUl9ORVhUKCAgX2ZzeXNfY29udGFpbmVyLCBzcCApKSB7CisKKyAgICAgICAgaWYgKCAhc3RyY21wKCBwYXRoLCBzcC0+cGF0aCApKQorICAgICAgICAgICAgcmV0dXJuIHNwOworICAgIH0KKworICAgIC8qCisgICAgICogTm90IGZvdW5kLi4uCisgICAgICovCisgICAgaWYgKCBjcmVhdGVfdHlwZSA9PSBORVRTTk1QX0ZTX0ZJTkRfRVhJU1QgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJmc3lzOnBhdGgiLCAiTm8gc3VjaCBmaWxlc3lzdGVtIGVudHJ5XG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogLi4uIHNvIGxldCdzIGNyZWF0ZSBhIG5ldyBvbmUKKyAgICAgKi8KKyAgICBzcCA9IF9mc3lzX2NyZWF0ZV9lbnRyeSgpOworICAgIGlmIChzcCkKKyAgICAgICAgc3RybGNweShzcC0+cGF0aCwgcGF0aCwgc2l6ZW9mKHNwLT5wYXRoKSk7CisgICAgcmV0dXJuIHNwOworfQorCisKKy8qCisgKiBSZXRyaWV2ZSBhIGZpbGVzeXN0ZW0gZW50cnkgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGRldmljZSwKKyAqICAgKG9yIGV4cG9ydGVkIHBhdGggZm9yIHJlbW90ZSBtb3VudHMpLgorICogKE9wdGlvbmFsbHkpIGluc2VydCBhIG5ldyBvbmUgaW50byB0aGUgY29udGFpbmVyLgorICovCituZXRzbm1wX2ZzeXNfaW5mbyAqCituZXRzbm1wX2ZzeXNfYnlfZGV2aWNlKCBjaGFyICpkZXZpY2UsIGludCBjcmVhdGVfdHlwZSApCit7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKnNwOworCisgICAgREVCVUdNU0dUTCgoImZzeXM6ZGV2aWNlIiwgIkdldCBmaWxlc3lzdGVtIGVudHJ5ICglcylcbiIsIGRldmljZSkpOworCisgICAgLyoKKyAgICAgKiAgTG9vayB0aHJvdWdoIHRoZSBsaXN0IGZvciBhIG1hdGNoaW5nIGVudHJ5CisgICAgICovCisgICAgICAgIC8qIC4uIG9yIHVzZSBhIHNlY29uZGFyeSBpbmRleCBjb250YWluZXIgPz8gKi8KKyAgICBmb3IgKHNwID0gQ09OVEFJTkVSX0ZJUlNUKCBfZnN5c19jb250YWluZXIgKTsKKyAgICAgICAgIHNwOworICAgICAgICAgc3AgPSBDT05UQUlORVJfTkVYVCggIF9mc3lzX2NvbnRhaW5lciwgc3AgKSkgeworCisgICAgICAgIGlmICggIXN0cmNtcCggZGV2aWNlLCBzcC0+ZGV2aWNlICkpCisgICAgICAgICAgICByZXR1cm4gc3A7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3QgZm91bmQuLi4KKyAgICAgKi8KKyAgICBpZiAoIGNyZWF0ZV90eXBlID09IE5FVFNOTVBfRlNfRklORF9FWElTVCApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImZzeXM6ZGV2aWNlIiwgIk5vIHN1Y2ggZmlsZXN5c3RlbSBlbnRyeVxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIC4uLiBzbyBsZXQncyBjcmVhdGUgYSBuZXcgb25lCisgICAgICovCisgICAgc3AgPSBfZnN5c19jcmVhdGVfZW50cnkoKTsKKyAgICBpZiAoc3ApCisgICAgICAgIHN0cmxjcHkoc3AtPmRldmljZSwgZGV2aWNlLCBzaXplb2Yoc3AtPmRldmljZSkpOworICAgIHJldHVybiBzcDsKK30KKworCituZXRzbm1wX2ZzeXNfaW5mbyAqCitfZnN5c19jcmVhdGVfZW50cnkoIHZvaWQgKQoreworICAgIG5ldHNubXBfZnN5c19pbmZvICpzcDsKKworICAgIHNwID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF9mc3lzX2luZm8gKTsKKyAgICBpZiAoIHNwICkgeworICAgICAgICAvKgorICAgICAgICAgKiBTZXQgdXAgdGhlIGluZGV4IHZhbHVlLgorICAgICAgICAgKiAgCisgICAgICAgICAqIEFsbCB0aGlzIHRyb3VibGUsIGp1c3QgZm9yIGEgc2ltcGxlIGludGVnZXIuCisgICAgICAgICAqIFN1cmVseSB0aGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheT8KKyAgICAgICAgICovCisgICAgICAgIHNwLT5pZHgubGVuICA9IDE7CisgICAgICAgIHNwLT5pZHgub2lkcyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG9pZCApOworICAgICAgICBzcC0+aWR4Lm9pZHNbMF0gPSArK19mc3lzX2lkeDsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiZnN5czpuZXciLCAiQ3JlYXRlIGZpbGVzeXN0ZW0gZW50cnkgKGluZGV4ID0gJWQpXG4iLCBfZnN5c19pZHgpKTsKKyAgICBDT05UQUlORVJfSU5TRVJUKCBfZnN5c19jb250YWluZXIsIHNwICk7CisgICAgcmV0dXJuIHNwOworfQorCisKKy8qCisgKiAgQ29udmVydCBmc3lzIHNpemUgaW5mb3JtYXRpb24gdG8gMUsgdW5pdHMKKyAqICAgIChhdHRlbXB0aW5nIHRvIGF2b2lkIDMyLWJpdCBvdmVyZmxvdyEpCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZworX2ZzeXNfdG9fSyggdW5zaWduZWQgbG9uZyBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyB1bml0cyApCit7CisgICAgaW50IGZhY3RvciA9IDE7CisKKyAgICBpZiAoIHVuaXRzID09IDAgKSB7CisgICAgICAgIHJldHVybiAwOyAgICAvKiBYWFggKi8KKyAgICB9IGVsc2UgaWYgKCB1bml0cyA9PSAxMDI0ICkgeworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9IGVsc2UgaWYgKCB1bml0cyA9PSA1MTIgKSB7ICAgICAgLyogVG8gYXZvaWQgdW5uZWNlc3NhcnkgZGl2aXNpb24gKi8KKyAgICAgICAgcmV0dXJuIHNpemUvMjsKKyAgICB9IGVsc2UgaWYgKCB1bml0cyA8IDEwMjQgKSB7CisgICAgICAgIGZhY3RvciA9IDEwMjQgLyB1bml0czsgICAvKiBBc3N1bWluZyBwb3dlciBvZiB0d28gKi8KKyAgICAgICAgcmV0dXJuIChzaXplIC8gZmFjdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWN0b3IgPSB1bml0cyAvIDEwMjQ7ICAgLyogQXNzdW1pbmcgbXVsdGlwbGUgb2YgMUsgKi8KKyAgICAgICAgcmV0dXJuIChzaXplICogZmFjdG9yKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZworbmV0c25tcF9mc3lzX3NpemVfdWxsKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZikgeworICAgIGlmICggIWYgKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gX2ZzeXNfdG9fSyggZi0+c2l6ZSwgZi0+dW5pdHMgKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nCituZXRzbm1wX2ZzeXNfdXNlZF91bGwoIG5ldHNubXBfZnN5c19pbmZvICpmKSB7CisgICAgaWYgKCAhZiApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBfZnN5c190b19LKCBmLT51c2VkLCBmLT51bml0cyApOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcKK25ldHNubXBfZnN5c19hdmFpbF91bGwoIG5ldHNubXBfZnN5c19pbmZvICpmKSB7CisgICAgaWYgKCAhZiApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBfZnN5c190b19LKCBmLT5hdmFpbCwgZi0+dW5pdHMgKTsKK30KKworCitpbnQKK25ldHNubXBfZnN5c19zaXplKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZikgeworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gbmV0c25tcF9mc3lzX3NpemVfdWxsKGYpOworICAgIHJldHVybiAoaW50KXY7Cit9CisKK2ludAorbmV0c25tcF9mc3lzX3VzZWQoIG5ldHNubXBfZnN5c19pbmZvICpmKSB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHYgPSBuZXRzbm1wX2ZzeXNfdXNlZF91bGwoZik7CisgICAgcmV0dXJuIChpbnQpdjsKK30KKworaW50CituZXRzbm1wX2ZzeXNfYXZhaWwoIG5ldHNubXBfZnN5c19pbmZvICpmKSB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHYgPSBuZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKGYpOworICAgIHJldHVybiAoaW50KXY7Cit9CisKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAweDdmZmZmZmZmCisjZW5kaWYKKworI2lmbmRlZiBQUkl1NjQKKyNkZWZpbmUgUFJJdTY0ICJsbHUiCisjZW5kaWYKKworLyogcmVjYWxjdWxhdGUgZi0+c2l6ZV8zMiwgdXNlZF8zMiwgYXZhaWxfMzIgYW5kIHVuaXRzXzMyIGZyb20gZi0+c2l6ZSAmIGNvbXAuKi8KK3ZvaWQKK25ldHNubXBfZnN5c19jYWxjdWxhdGUzMihuZXRzbm1wX2ZzeXNfaW5mbyAqZikKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgcyA9IGYtPnNpemU7CisgICAgdW5zaWduZWQgc2hpZnQgPSAwOworCisgICAgd2hpbGUgKHMgPiBJTlQzMl9NQVgpIHsKKyAgICAgICAgcyA9IHMgPj4gMTsKKyAgICAgICAgc2hpZnQrKzsKKyAgICB9CisKKyAgICBmLT5zaXplXzMyID0gczsKKyAgICBmLT51bml0c18zMiA9IGYtPnVuaXRzIDw8IHNoaWZ0OworICAgIGYtPmF2YWlsXzMyID0gZi0+YXZhaWwgPj4gc2hpZnQ7CisgICAgZi0+dXNlZF8zMiA9IGYtPnVzZWQgPj4gc2hpZnQ7CisKKyAgICBERUJVR01TR1RMKCgiZnN5cyIsICJSZXN1bHRzIG9mIDMyLWJpdCBjb252ZXJzaW9uOiBzaXplICUiIFBSSXU2NCAiIC0+ICVsdTsiCisJCSIgdW5pdHMgJSIgUFJJdTY0ICIgLT4gJWx1OyBhdmFpbCAlIiBQUkl1NjQgIiAtPiAlbHU7IgorICAgICAgICAgICAgICAgICIgdXNlZCAlIiBQUkl1NjQgIiAtPiAlbHVcbiIsCisJCSh1aW50NjRfdClmLT5zaXplLCBmLT5zaXplXzMyLCAodWludDY0X3QpZi0+dW5pdHMsIGYtPnVuaXRzXzMyLAorCQkodWludDY0X3QpZi0+YXZhaWwsIGYtPmF2YWlsXzMyLCAodWludDY0X3QpZi0+dXNlZCwgZi0+dXNlZF8zMikpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWY5MGVmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgKQEAgLTAsMCArMSwyIEBACit2b2lkIGluaXRfaHdfZnN5cyh2b2lkKTsKK3ZvaWQgc2h1dGRvd25faHdfZnN5cyggdm9pZCApOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZWQ0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmgKQEAgLTAsMCArMSwxODcgQEAKKyNpZm5kZWYgX05FVFNOTVBfRlNZU19NTlRUWVBFU19ICisjZGVmaW5lIF9ORVRTTk1QX0ZTWVNfTU5UVFlQRVNfSAorLyoKKyAqICBTb21lIG1vdW50cyBjYW4gbWFwIHRvIG9uZSBvZiB0d28gaHJGUyB0eXBlcworICogICAgKGRlcGVuZGluZyBvbiBvdGhlciBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHN5c3RlbSkKKyAqICBOb3RlIHdoaWNoIHNob3VsZCBiZSB1c2VkICpiZWZvcmUqIGRlZmluaW5nIGFueQorICogICAgdHlwZSB0b2tlbnMgd2hpY2ggbWF5IGJlIG1pc3NpbmcuCisgKi8KKworI2lmIChkZWZpbmVkKEJlcmtlbHlGUykgJiYgIWRlZmluZWQoTU5UVFlQRV9IRlMpKSB8fCBkZWZpbmVkKHNvbGFyaXMyKQorI2RlZmluZSAgX05FVFNOTVBfRlNfVFlQRV9VRlMgIE5FVFNOTVBfRlNfVFlQRV9CRVJLRUxFWQorI2Vsc2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfVUZTICBORVRTTk1QX0ZTX1RZUEVfU1lTVgorI2VuZGlmCisKKyNpZmRlZiBSb2NrUmlkZ2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfQ0RGUyAgTkVUU05NUF9GU19UWVBFX1JPQ0tSSURHRQorI2Vsc2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfQ0RGUyAgTkVUU05NUF9GU19UWVBFX0lTTzk2NjAKKyNlbmRpZgorCisKKy8qCisgKiAgRW5zdXJlIGFsbCByZWNvZ25pc2VkIGZpbGVzeXN0ZW0gbW91bnQgdHlwZSB0b2tlbnMgYXJlCisgKiAgICBhdmFpbGFibGUgKGV2ZW4gb24gc3lzdGVtcyB3aGVyZSB0aGV5J3JlIG5vdCB1c2VkKQorICovCisjaWZuZGVmIE1OVFRZUEVfQUZTCisjZGVmaW5lIE1OVFRZUEVfQUZTICAgICAgImFmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0NERlMKKyNkZWZpbmUgTU5UVFlQRV9DREZTICAgICAiY2RmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0NEOTY2MAorI2RlZmluZSBNTlRUWVBFX0NEOTY2MCAgICJjZDk2NjAiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQyCisjZGVmaW5lIE1OVFRZUEVfRVhUMiAgICAgImV4dDIiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQzCisjZGVmaW5lIE1OVFRZUEVfRVhUMyAgICAgImV4dDMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQ0CisjZGVmaW5lIE1OVFRZUEVfRVhUNCAgICAgImV4dDQiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQyRlMKKyNkZWZpbmUgTU5UVFlQRV9FWFQyRlMgICAiZXh0MmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUM0ZTCisjZGVmaW5lIE1OVFRZUEVfRVhUM0ZTICAgImV4dDNmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0VYVDRGUworI2RlZmluZSBNTlRUWVBFX0VYVDRGUyAgICJleHQ0ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9GQVQzMgorI2RlZmluZSBNTlRUWVBFX0ZBVDMyICAgICJmYXQzMiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0ZGUworI2RlZmluZSBNTlRUWVBFX0ZGUyAgICAgICJmZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9IRlMKKyNkZWZpbmUgTU5UVFlQRV9IRlMgICAgICAiaGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSFNGUworI2RlZmluZSBNTlRUWVBFX0hTRlMgICAgICJoc2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSVNPOTY2MAorI2RlZmluZSBNTlRUWVBFX0lTTzk2NjAgICJpc285NjYwIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTUZTCisjZGVmaW5lIE1OVFRZUEVfTUZTICAgICAgIm1mcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX01TRE9TCisjZGVmaW5lIE1OVFRZUEVfTVNET1MgICAgIm1zZG9zIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkNQRlMKKyNkZWZpbmUgTU5UVFlQRV9OQ1BGUyAgICAibmNwZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9ORlMKKyNkZWZpbmUgTU5UVFlQRV9ORlMgICAgICAibmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkZTMworI2RlZmluZSBNTlRUWVBFX05GUzMgICAgICJuZnMzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkZTNAorI2RlZmluZSBNTlRUWVBFX05GUzQgICAgICJuZnM0IgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTlRGUworI2RlZmluZSBNTlRUWVBFX05URlMgICAgICJudGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUEMKKyNkZWZpbmUgTU5UVFlQRV9QQyAgICAgICAicGMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9TTUJGUworI2RlZmluZSBNTlRUWVBFX1NNQkZTICAgICJzbWJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0NJRlMKKyNkZWZpbmUgTU5UVFlQRV9DSUZTICAgICAiY2lmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NZU1YKKyNkZWZpbmUgTU5UVFlQRV9TWVNWICAgICAic3lzdiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1VGUworI2RlZmluZSBNTlRUWVBFX1VGUyAgICAgICJ1ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9WRkFUCisjZGVmaW5lIE1OVFRZUEVfVkZBVCAgICAgInZmYXQiCisjZW5kaWYKKworLyoKKyAqICBGaWxlIHN5c3RlbXMgdG8gbW9uaXRvciwgYnV0IG5vdCBjb3ZlcmVkIGJ5IEhSLVRZUEVTIGVudW1lcmF0aW9ucworICovCisjaWZuZGVmIE1OVFRZUEVfTVZGUworI2RlZmluZSBNTlRUWVBFX01WRlMgICAgICJtdmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVE1QRlMKKyNkZWZpbmUgTU5UVFlQRV9UTVBGUyAgICAidG1wZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9HRlMKKyNkZWZpbmUgTU5UVFlQRV9HRlMgICAgICAiZ2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfR0ZTMgorI2RlZmluZSBNTlRUWVBFX0dGUzIgICAgICJnZnMyIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfWEZTCisjZGVmaW5lIE1OVFRZUEVfWEZTICAgICAgInhmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0pGUworI2RlZmluZSBNTlRUWVBFX0pGUyAgICAgICJqZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9WWEZTCisjZGVmaW5lIE1OVFRZUEVfVlhGUyAgICAgICJ2eGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUkVJU0VSRlMKKyNkZWZpbmUgTU5UVFlQRV9SRUlTRVJGUyAicmVpc2VyZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9MT0ZTCisjZGVmaW5lIE1OVFRZUEVfTE9GUyAgICAgImxvZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9PQ0ZTMgorI2RlZmluZSBNTlRUWVBFX09DRlMyICAgICJvY2ZzMiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0NWRlMKKyNkZWZpbmUgTU5UVFlQRV9DVkZTICAgICAiY3ZmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NJTUZTCisjZGVmaW5lIE1OVFRZUEVfU0lNRlMgICAgICJzaW1mcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0JUUkZTCisjZGVmaW5lIE1OVFRZUEVfQlRSRlMgICAgICJidHJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1pGUworI2RlZmluZSBNTlRUWVBFX1pGUyAgICAgICAiemZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfQUNGUworI2RlZmluZSBNTlRUWVBFX0FDRlMgICAgICAiYWNmcyIKKyNlbmRpZgorCisvKgorICogIEZpbGUgc3lzdGVtcyB0byBza2lwCisgKiAgICAoUHJvYmFibHkgbm90IHN0cmljdGx5IG5lZWRlZCkKKyAqLworI2lmbmRlZiBNTlRUWVBFX0FQUAorI2RlZmluZSBNTlRUWVBFX0FQUCAgICAgICJhcHAiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9ERVZQVFMKKyNkZWZpbmUgTU5UVFlQRV9ERVZQVFMgICAiZGV2cHRzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSUdOT1JFCisjZGVmaW5lIE1OVFRZUEVfSUdOT1JFICAgImlnbm9yZSIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1BST0MKKyNkZWZpbmUgTU5UVFlQRV9QUk9DICAgICAicHJvYyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NZU0ZTCisjZGVmaW5lIE1OVFRZUEVfU1lTRlMgICAgInN5c2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVVNCRlMKKyNkZWZpbmUgTU5UVFlQRV9VU0JGUyAgICAidXNiZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9CSU5GTVQKKyNkZWZpbmUgTU5UVFlQRV9CSU5GTVQgICAiYmluZm10X21pc2MiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9SUENQSVBFCisjZGVmaW5lIE1OVFRZUEVfUlBDUElQRSAgInJwY19waXBlZnMiCisjZW5kaWYKKworI2VuZGlmIC8qIF9ORVRTTk1QX0ZTWVNfTU5UVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tb3VudHMuaCBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW91bnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiNjVkYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW91bnRzLmgKQEAgLTAsMCArMSwxNjUgQEAKKyNpZm5kZWYgX05FVFNOTVBfRlNZU19NT1VOVFNfSAorI2RlZmluZSBfTkVUU05NUF9GU1lTX01PVU5UU19ICisvKgorICogIFNvbWUgbW91bnRzIGNhbiBtYXAgdG8gb25lIG9mIHR3byBockZTIHR5cGVzCisgKiAgICAoZGVwZW5kaW5nIG9uIG90aGVyIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgc3lzdGVtKQorICogIE5vdGUgd2hpY2ggc2hvdWxkIGJlIHVzZWQgKmJlZm9yZSogZGVmaW5pbmcgYW55CisgKiAgICB0eXBlIHRva2VucyB3aGljaCBtYXkgYmUgbWlzc2luZy4KKyAqLworCisvKgorI2lmIChkZWZpbmVkKEJlcmtlbHlGUykgJiYgIWRlZmluZWQoTU5UVFlQRV9IRlMpKSB8fCBkZWZpbmVkKHNvbGFyaXMyKQorI2RlZmluZSAgX05FVFNOTVBfRlNfVFlQRV9VRlMgIE5FVFNOTVBfRlNfVFlQRV9CRVJLRUxFWQorI2Vsc2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfVUZTICBORVRTTk1QX0ZTX1RZUEVfU1lTVgorI2VuZGlmCisKKyNpZmRlZiBSb2NrUmlkZ2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfQ0RGUyAgTkVUU05NUF9GU19UWVBFX1JPQ0tSSURHRQorI2Vsc2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfQ0RGUyAgTkVUU05NUF9GU19UWVBFX0lTTzk2NjAKKyNlbmRpZgorICovCisKKworLyoKKyAqICBFbnN1cmUgYWxsIHJlY29nbmlzZWQgZmlsZXN5c3RlbSBtb3VudCB0eXBlIHRva2VucyBhcmUKKyAqICAgIGF2YWlsYWJsZSAoZXZlbiBvbiBzeXN0ZW1zIHdoZXJlIHRoZXkncmUgbm90IHVzZWQpCisgKi8KKyNpZm5kZWYgTU9VTlRfRkZTCisjZGVmaW5lIE1PVU5UX0ZGUyAgICAiZmZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX05GUworI2RlZmluZSBNT1VOVF9ORlMgICAgIm5mcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9NRlMKKyNkZWZpbmUgTU9VTlRfTUZTICAgICJtZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfTVNET1MKKyNkZWZpbmUgTU9VTlRfTVNET1MgICJtc2RvcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9NU0RPU0ZTCisjZGVmaW5lIE1PVU5UX01TRE9TRlMgIm1zZG9zZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfQUZTCisjZGVmaW5lIE1PVU5UX0FGUyAgICAiYWZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX0NEOTY2MAorI2RlZmluZSBNT1VOVF9DRDk2NjAgImNkOTY2MCIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9FWFQyRlMKKyNkZWZpbmUgTU9VTlRfRVhUMkZTICJleHQyZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfTlRGUworI2RlZmluZSBNT1VOVF9OVEZTICAgIm50ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfVUZTCisjZGVmaW5lIE1PVU5UX1VGUyAgICAidWZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX1pGUworI2RlZmluZSBNT1VOVF9aRlMgICAgInpmcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9BQ0ZTCisjZGVmaW5lIE1PVU5UX0FDRlMgICAiYWNmcyIKKyNlbmRpZgorCisvKgorI2lmbmRlZiBNTlRUWVBFX0FGUworI2RlZmluZSBNTlRUWVBFX0FGUyAgICAgICJhZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9DREZTCisjZGVmaW5lIE1OVFRZUEVfQ0RGUyAgICAgImNkZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9DRDk2NjAKKyNkZWZpbmUgTU5UVFlQRV9DRDk2NjAgICAiY2Q5NjYwIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMgorI2RlZmluZSBNTlRUWVBFX0VYVDIgICAgICJleHQyIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMworI2RlZmluZSBNTlRUWVBFX0VYVDMgICAgICJleHQzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMkZTCisjZGVmaW5lIE1OVFRZUEVfRVhUMkZTICAgImV4dDJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0VYVDNGUworI2RlZmluZSBNTlRUWVBFX0VYVDNGUyAgICJleHQzZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9GQVQzMgorI2RlZmluZSBNTlRUWVBFX0ZBVDMyICAgICJmYXQzMiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0ZGUworI2RlZmluZSBNTlRUWVBFX0ZGUyAgICAgICJmZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9IRlMKKyNkZWZpbmUgTU5UVFlQRV9IRlMgICAgICAiaGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSFNGUworI2RlZmluZSBNTlRUWVBFX0hTRlMgICAgICJoc2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSVNPOTY2MAorI2RlZmluZSBNTlRUWVBFX0lTTzk2NjAgICJpc285NjYwIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTUZTCisjZGVmaW5lIE1OVFRZUEVfTUZTICAgICAgIm1mcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX01TRE9TCisjZGVmaW5lIE1OVFRZUEVfTVNET1MgICAgIm1zZG9zIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkNQRlMKKyNkZWZpbmUgTU5UVFlQRV9OQ1BGUyAgICAibmNwZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9ORlMKKyNkZWZpbmUgTU5UVFlQRV9ORlMgICAgICAibmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkZTMworI2RlZmluZSBNTlRUWVBFX05GUzMgICAgICJuZnMzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTlRGUworI2RlZmluZSBNTlRUWVBFX05URlMgICAgICJudGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUEMKKyNkZWZpbmUgTU5UVFlQRV9QQyAgICAgICAicGMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9SRUlTRVJGUworI2RlZmluZSBNTlRUWVBFX1JFSVNFUkZTICJyZWlzZXJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NNQkZTCisjZGVmaW5lIE1OVFRZUEVfU01CRlMgICAgInNtYmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfU1lTVgorI2RlZmluZSBNTlRUWVBFX1NZU1YgICAgICJzeXN2IgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVUZTCisjZGVmaW5lIE1OVFRZUEVfVUZTICAgICAgInVmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1ZGQVQKKyNkZWZpbmUgTU5UVFlQRV9WRkFUICAgICAidmZhdCIKKyNlbmRpZgorKi8KKworLyoKKyAqICBGaWxlIHN5c3RlbXMgdG8gc2tpcAorICovCisvKgorI2lmbmRlZiBNTlRUWVBFX0RFVlBUUworI2RlZmluZSBNTlRUWVBFX0RFVlBUUyAgICJkZXZwdHMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9JR05PUkUKKyNkZWZpbmUgTU5UVFlQRV9JR05PUkUgICAiaWdub3JlIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUFJPQworI2RlZmluZSBNTlRUWVBFX1BST0MgICAgICJwcm9jIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfU1lTRlMKKyNkZWZpbmUgTU5UVFlQRV9TWVNGUyAgICAic3lzZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9UTVBGUworI2RlZmluZSBNTlRUWVBFX1RNUEZTICAgICJ0bXBmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1VTQkZTCisjZGVmaW5lIE1OVFRZUEVfVVNCRlMgICAgInVzYmZzIgorI2VuZGlmCisqLworCisjZW5kaWYgLyogX05FVFNOTVBfRlNZU19NT1VOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaAppbmRleCBjMDY3MGU0Li43ZTRlODhlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaApAQCAtMyw3ICszLDcgQEAKICNpZiBkZWZpbmVkKGxpbnV4KQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eCkKIAotI2VsaWYgKGRlZmluZWQoZGFyd2luNykgfHwgZGVmaW5lZChkYXJ3aW44KSB8fCBkZWZpbmVkKGRhcndpbjkpKQorI2VsaWYgKGRlZmluZWQoZGFyd2luKSkKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL21lbW9yeS9tZW1vcnlfZGFyd2luKQogCiAjZWxpZiAoZGVmaW5lZChmcmVlYnNkMikgfHwgZGVmaW5lZChmcmVlYnNkMykgfHwgZGVmaW5lZChmcmVlYnNkNCkgIHx8IGRlZmluZWQoZnJlZWJzZDUpfHwgZGVmaW5lZChmcmVlYnNkNikpCkBAIC0xMiw3ICsxMiw3IEBACiAjZWxpZiAoZGVmaW5lZChuZXRic2QpIHx8IGRlZmluZWQobmV0YnNkMSkgfHwgZGVmaW5lZChuZXRic2RlbGYpIHx8IGRlZmluZWQobmV0YnNkZWxmMil8fCBkZWZpbmVkKG5ldGJzZGVsZjMpIHx8IGRlZmluZWQob3BlbmJzZCkpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9tZW1vcnkvbWVtb3J5X25ldGJzZCkKIAotI2VsaWYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpKQorI2VsaWYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeCkKIAogI2VsaWYgKGRlZmluZWQoc29sYXJpczIpKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jCmluZGV4IGIxOGE5YjguLjFmNDQ3NGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMKQEAgLTMsMTQgKzMsMjcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhhcmR3YXJlX21lbW9yeSwgbmV0c25tcF91bnVzZWQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtZW1vcnlfZ2V0X2NhY2hlLCBoYXJkd2FyZV9tZW1vcnkpCisKIGV4dGVybiBOZXRzbm1wQ2FjaGVMb2FkIG5ldHNubXBfbWVtX2FyY2hfbG9hZDsKIAogbmV0c25tcF9tZW1vcnlfaW5mbyAqX21lbV9oZWFkICA9IE5VTEw7CiBuZXRzbm1wX2NhY2hlICAgICAgICpfbWVtX2NhY2hlID0gTlVMTDsKIAorI2lmZGVmIGRhcndpbgorLyogdGhlIGNvZGUgaW4gbWVtb3J5X2Rhcndpbi5jIGlzICp2ZXJ5KiBleHBlbnNpdmUgKi8KKyNkZWZpbmUJTUVNT1JZX0NBQ0hFX1NFQ09ORFMJMzAwCisjZWxzZQorI2RlZmluZQlNRU1PUllfQ0FDSEVfU0VDT05EUwk1CisjZW5kaWYKKwogdm9pZCBpbml0X2h3X21lbSggdm9pZCApIHsKICAgICBvaWQgbnNNZW1vcnlbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgMzEgfTsKLSAgICBfbWVtX2NhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoIDUsIG5ldHNubXBfbWVtX2FyY2hfbG9hZCwgTlVMTCwKKyAgICBfbWVtX2NhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoIE1FTU9SWV9DQUNIRV9TRUNPTkRTLCBuZXRzbm1wX21lbV9hcmNoX2xvYWQsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc01lbW9yeSwgT0lEX0xFTkdUSChuc01lbW9yeSkpOwogfQogCkBAIC04Nyw5ICsxMDAsMTEgQEAKIAogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfR0VUX0NBQ0hFCiBuZXRzbm1wX2NhY2hlICpuZXRzbm1wX21lbW9yeV9nZXRfY2FjaGUoIHZvaWQgKSB7CiAgICAgcmV0dXJuIF9tZW1fY2FjaGU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfR0VUX0NBQ0hFICovCiAKIGludCBuZXRzbm1wX21lbW9yeV9sb2FkKCB2b2lkICkgewogICAgICByZXR1cm4gbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkKCBfbWVtX2NhY2hlICk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9haXguYwppbmRleCAyNTE5ZGQ5Li5hZDI0NTI2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfYWl4LmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5Lmg+CiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9kYXJ3aW4uYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZGFyd2luLmMKaW5kZXggNDkxNGYwYy4uNDQ2MmM0NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9kYXJ3aW4uYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2Rhcndpbi5jCkBAIC01LDEwICs1LDE0IEBACiAKICNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfaG9zdC5oPgorCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8SU9LaXQvcHMvSU9Qb3dlclNvdXJjZXMuaD4KIAogLyoKICAqIFJldGFpbmVkIGZyb20gVUNEIGltcGxlbWVudGF0aW9uCkBAIC00NCw4ICs0OCw3IEBACiAgICAgIG1hY2hfcG9ydCA9IG1hY2hfaG9zdF9zZWxmKCk7CiAgICAgIGVycm9yID0gaG9zdF9wcm9jZXNzb3Jfc2V0cyhtYWNoX3BvcnQsICZwc2V0cywgJnBjbnQpOwogICAgICBpZiAoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksICJFcnJvciBpbiBob3N0X3Byb2Nlc3Nvcl9zZXRzKCk6ICVzXG4iLCBtYWNoX2Vycm9yX3N0cmluZyhlcnJvcikpOwotICAgICAgICBzbm1wX2xvZ19wZXJyb3IoZXJybXNnKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkVycm9yIGluIGhvc3RfcHJvY2Vzc29yX3NldHMoKTogJXNcbiIsIG1hY2hfZXJyb3Jfc3RyaW5nKGVycm9yKSk7CiAgICAgICAgIHJldHVybigwKTsKICAgICAgfQogCkBAIC03NSw3ICs3OCwxMSBAQAogICAgICAgICAgICAgZm9yIChhZGRyZXNzID0gMDs7IGFkZHJlc3MgKz0gc2l6ZSkgewogICAgICAgICAgICAgICAgIC8qIEdldCBtZW1vcnkgcmVnaW9uLiAqLwogICAgICAgICAgICAgICAgIGNvdW50ID0gVk1fUkVHSU9OX0VYVEVOREVEX0lORk9fQ09VTlQ7IAotICAgICAgICAgICAgICAgIGlmICh2bV9yZWdpb24odGFza3Nbal0sICZhZGRyZXNzLCAmc2l6ZSwgVk1fUkVHSU9OX0VYVEVOREVEX0lORk8sICh2bV9yZWdpb25fZXh0ZW5kZWRfaW5mb190KSZpbmZvLCAmY291bnQsICZvYmplY3RfbmFtZSkgIT0gS0VSTl9TVUNDRVNTKSB7CisjaWYgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyAgICAgICAgICAgICAgICBpZiAodm1fcmVnaW9uXzY0KHRhc2tzW2pdLCAmYWRkcmVzcywgJnNpemUsIFZNX1JFR0lPTl9FWFRFTkRFRF9JTkZPLCAmaW5mbywgJmNvdW50LCAmb2JqZWN0X25hbWUpICE9IEtFUk5fU1VDQ0VTUykgeworI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAodm1fcmVnaW9uKHRhc2tzW2pdLCAmYWRkcmVzcywgJnNpemUsIFZNX1JFR0lPTl9FWFRFTkRFRF9JTkZPLCAmaW5mbywgJmNvdW50LCAmb2JqZWN0X25hbWUpICE9IEtFUk5fU1VDQ0VTUykgeworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUgbWVtb3J5IHJlZ2lvbnMuICovCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMKaW5kZXggMDJlOGJlMi4uOGQxODY5OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMKQEAgLTI0LDcgKzI0LDcgQEAKIHF1YWRfdCAgICBzd2FwVXNlZDsKIHF1YWRfdCAgICBzd2FwRnJlZTsKIAotaW50IHN3YXBtb2RlKGxvbmcpOworc3RhdGljIGludCBzd2FwbW9kZShsb25nKTsKIAogCiAgICAgLyoKQEAgLTM2LDEwICszNiwxNSBAQAogICAgIGxvbmcgICAgICAgICAgIHBhZ2VzaXplOwogICAgIGludCAgICAgICAgICAgIG5zd2FwOwogCi0gICAgc3RydWN0IHZtbWV0ZXIgdm1lbTsKKyNpZiAhZGVmaW5lZChWTV9UT1RBTCkKKyAgICB1bnNpZ25lZCBpbnQgICBmcmVlX21lbTsKKyAgICBzaXplX3QgICAgICAgICBmcmVlX3NpemUgPSBzaXplb2YoZnJlZV9tZW0pOworICAgIHVuc2lnbmVkIGludCAgIG1lbV9wYWdlczsKKyNlbHNlCiAgICAgc3RydWN0IHZtdG90YWwgdG90YWw7CiAgICAgc2l6ZV90ICAgICAgICAgdG90YWxfc2l6ZSAgPSBzaXplb2YodG90YWwpOwotICAgIGludCAgICAgICAgICAgIHRvdGFsX21pYltdID0geyBDVExfVk0sIFZNX01FVEVSIH07CisgICAgaW50ICAgICAgICAgICAgdG90YWxfbWliW10gPSB7IENUTF9WTSwgVk1fVE9UQUwgfTsKKyNlbmRpZgogCiAgICAgdV9sb25nICAgICAgICAgcGh5c19tZW07CiAgICAgdV9sb25nICAgICAgICAgdXNlcl9tZW07CkBAIC01OCw3ICs2MywxMiBAQAogICAgIC8qCiAgICAgICogUmV0cmlldmUgdGhlIG1lbW9yeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1bmRlcmx5aW5nIE8vUy4uLgogICAgICAqLworI2lmICFkZWZpbmVkKFZNX1RPVEFMKQorICAgIHN5c2N0bGJ5bmFtZSgidm0uc3RhdHMudm0udl9mcmVlX2NvdW50IiwgJmZyZWVfbWVtLCAgICAmZnJlZV9zaXplLCAgICBOVUxMLCAwKTsKKyAgICBzeXNjdGxieW5hbWUoInZtLnN0YXRzLnZtLnZfcGFnZV9jb3VudCIsICZtZW1fcGFnZXMsICAgICZmcmVlX3NpemUsICAgIE5VTEwsIDApOworI2Vsc2UKICAgICBzeXNjdGwodG90YWxfbWliLCAgICAyLCAmdG90YWwsICAgICZ0b3RhbF9zaXplLCAgICBOVUxMLCAwKTsKKyNlbmRpZgogICAgIHN5c2N0bChwaHlzX21lbV9taWIsIDIsICZwaHlzX21lbSwgJm1lbV9zaXplLCAgICAgIE5VTEwsIDApOwogICAgIHN5c2N0bCh1c2VyX21lbV9taWIsIDIsICZ1c2VyX21lbSwgJm1lbV9zaXplLCAgICAgIE5VTEwsIDApOwogICAgIHN5c2N0bGJ5bmFtZSgidm0uc3RhdHMudm0udl9jYWNoZV9jb3VudCIsICAgICZjYWNoZV9jb3VudCwgJmNhY2hlX3NpemUsIE5VTEwsIDApOwpAQCAtODMsNyArOTMsMTEgQEAKICAgICAgICAgICAgICBtZW0tPmRlc2NyID0gc3RyZHVwKCJQaHlzaWNhbCBtZW1vcnkiKTsKICAgICAgICAgbWVtLT51bml0cyA9IHBhZ2VzaXplOwogICAgICAgICBtZW0tPnNpemUgID0gcGh5c19tZW0vcGFnZXNpemU7CisjaWYgIWRlZmluZWQoVk1fVE9UQUwpCisJbWVtLT5mcmVlICA9IGZyZWVfbWVtOworI2Vsc2UKICAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfZnJlZTsKKyNlbmRpZgogICAgIH0KIAogICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9VU0VSTUVNLCAxICk7CkBAIC05Myw4ICsxMDcsMTMgQEAKICAgICAgICAgaWYgKCFtZW0tPmRlc2NyKQogICAgICAgICAgICAgIG1lbS0+ZGVzY3IgPSBzdHJkdXAoIlJlYWwgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKKyNpZiAhZGVmaW5lZChWTV9UT1RBTCkKKwltZW0tPnNpemUgID0gdXNlcl9tZW0vcGFnZXNpemU7CisJbWVtLT5mcmVlICA9IGZyZWVfbWVtOworI2Vsc2UKICAgICAgICAgbWVtLT5zaXplICA9IHRvdGFsLnRfcm07Ci0gICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X2FybTsKKyAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfcm0gLSB0b3RhbC50X2FybTsKKyNlbmRpZgogICAgIH0KIAogICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9WSVJUTUVNLCAxICk7CkBAIC0xMDQsMTAgKzEyMywxNiBAQAogICAgICAgICBpZiAoIW1lbS0+ZGVzY3IpCiAgICAgICAgICAgICAgbWVtLT5kZXNjciA9IHN0cmR1cCgiVmlydHVhbCBtZW1vcnkiKTsKICAgICAgICAgbWVtLT51bml0cyA9IHBhZ2VzaXplOworI2lmICFkZWZpbmVkKFZNX1RPVEFMKQorCW1lbS0+c2l6ZSAgPSBtZW1fcGFnZXMrc3dhcFRvdGFsOworCW1lbS0+ZnJlZSAgPSBmcmVlX21lbStzd2FwRnJlZTsKKyNlbHNlCiAgICAgICAgIG1lbS0+c2l6ZSAgPSB0b3RhbC50X3ZtOwotICAgICAgICBtZW0tPmZyZWUgID0gdG90YWwudF9hdm07CisgICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X3ZtIC0gdG90YWwudF9hdm07CisjZW5kaWYKICAgICB9CiAKKyNpZiBkZWZpbmVkKFZNX1RPVEFMKQogICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9TSEFSRUQsIDEgKTsKICAgICBpZiAoIW1lbSkgewogICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIk5vIFNoYXJlZCBNZW1vcnkgaW5mbyBlbnRyeSIpOwpAQCAtMTE2LDcgKzE0MSw3IEBACiAgICAgICAgICAgICAgbWVtLT5kZXNjciA9IHN0cmR1cCgiU2hhcmVkIHZpcnR1YWwgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKICAgICAgICAgbWVtLT5zaXplICA9IHRvdGFsLnRfdm1zaHI7Ci0gICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X2F2bXNocjsKKyAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfdm1zaHIgLSB0b3RhbC50X2F2bXNocjsKICAgICB9CiAKICAgICBtZW0gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfU0hBUkVEMiwgMSApOwpAQCAtMTI3LDggKzE1Miw5IEBACiAgICAgICAgICAgICAgbWVtLT5kZXNjciA9IHN0cmR1cCgiU2hhcmVkIHJlYWwgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKICAgICAgICAgbWVtLT5zaXplICA9IHRvdGFsLnRfcm1zaHI7Ci0gICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X2FybXNocjsKKyAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfcm1zaHIgLSB0b3RhbC50X2FybXNocjsKICAgICB9CisjZW5kaWYKIAogICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9DQUNIRUQsIDEgKTsKICAgICBpZiAoIW1lbSkgewpAQCAtMTM3LDggKzE2Myw4IEBACiAgICAgICAgIGlmICghbWVtLT5kZXNjcikKICAgICAgICAgICAgICBtZW0tPmRlc2NyID0gc3RyZHVwKCJDYWNoZWQgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKLSAgICAgICAgbWVtLT5zaXplICA9IGNhY2hlX21heCArIGluYWN0X2NvdW50OwotICAgICAgICBtZW0tPmZyZWUgID0gY2FjaGVfbWF4IC0gY2FjaGVfY291bnQ7CisgICAgICAgIG1lbS0+c2l6ZSAgPSBjYWNoZV9jb3VudDsKKyAgICAgICAgbWVtLT5mcmVlICA9IDA7CiAgICAgfQogCiAgICAgbnN3YXAgPSBzd2FwbW9kZShwYWdlc2l6ZSk7CkBAIC0xODEsNyArMjA3LDcgQEAKICAqIFRoaXMgaXMganVzdCB3YXkgdG9vIHVnbHkgOykgCiAgKi8KIAotaW50CitzdGF0aWMgaW50CiBzd2FwbW9kZShsb25nIHBhZ2VzaXplKQogewogICAgIHN0cnVjdCBleHRlbnNpYmxlIGV4dDsKQEAgLTIxMiwyMiArMjM4LDIxIEBACiAKICNpbmNsdWRlIDxzeXMvY29uZi5oPgogCi1pbnQKK2V4dGVybiBrdm1fdCAqa2Q7CisKK3N0YXRpYyBpbnQKIHN3YXBtb2RlKGxvbmcgcGFnZXNpemUpCiB7CiAgICAgaW50ICAgICAgICAgICAgIGksIG47Ci0gICAgc3RhdGljIGt2bV90ICAgKmtkID0gTlVMTDsKICAgICBzdHJ1Y3Qga3ZtX3N3YXAga3N3YXBbMTZdOwogICAgIG5ldHNubXBfbWVtb3J5X2luZm8gKm1lbTsKICAgICBjaGFyIGJ1ZlsxMDI0XTsKIAotICAgIGlmIChrZCA9PSBOVUxMKQotICAgICAgICBrZCA9IGt2bV9vcGVuZmlsZXMoTlVMTCwgTlVMTCwgTlVMTCwgT19SRE9OTFksIE5VTEwpOwogICAgIG4gPSBrdm1fZ2V0c3dhcGluZm8oa2QsIGtzd2FwLCBzaXplb2Yoa3N3YXApIC8gc2l6ZW9mKGtzd2FwWzBdKSwgMCk7CiAKICAgICBzd2FwVXNlZCA9IHN3YXBUb3RhbCA9IHN3YXBGcmVlID0gMDsKIAotICAgIGlmICggbiA+IDEgKSB7CisgICAgaWYgKCBuID4gMCApIHsKICAgICAgICAgLyoKICAgICAgICAgICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN3YXAgZGV2aWNlcywgdGhlbiByZWNvcmQKICAgICAgICAgICogICB0aGUgc3RhdGlzdGljcyBmb3IgZWFjaCBvbmUgc2VwYXJhdGVseS4uLgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jCmluZGV4IDM2ZDQzMWUuLjhjMTg5YzUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmMKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB9CiAgICAgaWYgKGJzaXplID09IDApIHsKICAgICAgICAgYnNpemUgPSBNRU1JTkZPX0lOSVRfU0laRTsKLSAgICAgICAgYnVmZiA9IG1hbGxvYyhic2l6ZSsxKTsKKyAgICAgICAgYnVmZiA9IChjaGFyKiltYWxsb2MoYnNpemUrMSk7CiAgICAgICAgIGlmIChOVUxMID09IGJ1ZmYpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJtYWxsb2MgZmFpbGVkXG4iKTsKICAgICAgICAgICAgIGNsb3NlKHN0YXRmZCk7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKChieXRlc19yZWFkID0gcmVhZChzdGF0ZmQsIGJ1ZmYsIGJzaXplKSkgPT0gYnNpemUpIHsKLSAgICAgICAgYiA9IHJlYWxsb2MoYnVmZiwgYnNpemUgKyBNRU1JTkZPX1NURVBfU0laRSArIDEpOworICAgICAgICBiID0gKGNoYXIqKXJlYWxsb2MoYnVmZiwgYnNpemUgKyBNRU1JTkZPX1NURVBfU0laRSArIDEpOwogICAgICAgICBpZiAoTlVMTCA9PSBiKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibWFsbG9jIGZhaWxlZFxuIik7CiAgICAgICAgICAgICBjbG9zZShzdGF0ZmQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYwppbmRleCAzZGZmZjhiLi40MmYyMDNlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgY2hhciBidWZbMTAyNF07CiAKICAgICBudW0gPSBzd2FwY3RsKFNDX0dFVE5TV1AsIDApOwotICAgIHMgPSBtYWxsb2MobnVtICogc2l6ZW9mKHN3YXBlbnRfdCkgKyBzaXplb2Yoc3RydWN0IHN3YXB0YWJsZSkpOworICAgIHMgPSAoc3dhcHRibF90KiltYWxsb2MobnVtICogc2l6ZW9mKHN3YXBlbnRfdCkgKyBzaXplb2Yoc3RydWN0IHN3YXB0YWJsZSkpOwogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4ZDkxNQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaApAQCAtMCwwICsxLDE3IEBACitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMpCisKKyNpZiBkZWZpbmVkKHNvbGFyaXMyKQorIyBpZiBkZWZpbmVkKEhBVkVfUElDTF9IKQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzKQorIyBlbHNlCitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMpCisjIGVuZGlmCisjZWxzZQorIyAgaWYgZGVmaW5lZChORVRTTk1QX1VTRV9TRU5TT1JTX1YzKQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMpCisjICBlbHNlCitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192MikKKyMgIGVuZGlmCisjZW5kaWYKKworLyogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzKSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2R1bW15X3NlbnNvcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI1NTVkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmMKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg+CisKKwordm9pZCBuZXRzbm1wX3NlbnNvcl9hcmNoX2luaXQoIHZvaWQgKSB7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW5pdGlhbGlzZSBEdW1teSBTZW5zb3JzIG1vZHVsZVxuIikpOworfQorCitpbnQKK25ldHNubXBfc2Vuc29yX2FyY2hfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdnApIHsKKyAgICB0aW1lX3Qgbm93OworICAgIHN0cnVjdCB0bSAgICAgICAgICAgICAgICAgICp0bTsKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisKKyAgICB0aW1lKCZub3cpOworICAgIHRtID0gbG9jYWx0aW1lKCZub3cpOworCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJSZWxvYWQgRHVtbXkgU2Vuc29ycyBtb2R1bGVcbiIpKTsKKworICAgIC8qIEZpcnN0IHBzZXVkby1zZW5zb3IgLSBzbG93bHktcmlzaW5nIHRlbXBlcmF0dXJlICovCisgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggIm1pbnV0ZSIsIE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgKTsKKyAgICBzcC0+dmFsdWUgPSB0bS0+dG1fbWluOworICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NiwgIk1pbnV0ZS1iYXNlZCBwc2V1ZG8tc2Vuc29yIC0gc2xvd2x5LXJpc2luZyB0ZW1wZXJhdHVyZSIgKTsKKyAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKworICAgIC8qIFNlY29uZCBwc2V1ZG8tc2Vuc29yIC0gcXVpY2tseS1yaXNpbmcgdGVtcGVyYXR1cmUgKi8KKyAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAic2Vjb25kIiwgTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV9zZWM7CisgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU2LCAiU2Vjb25kLWJhc2VkIHBzZXVkby1zZW5zb3IgLSBxdWlja2x5LXJpc2luZyB0ZW1wZXJhdHVyZSIgKTsKKyAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKworICAgIC8qIFRoaXJkIHBzZXVkby1zZW5zb3IgLSBhbm51YWwgZmFuIHNwZWVkICovCisgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggInllYXIiLCBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV95ZWFyICsgMTkwMDsKKyAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTYsICJSUE0gcHNldWRvLXNlbnNvciAtIGFubnVhbCBmYW4gc3BlZWQiICk7CisgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisKKyAgICAvKiBGb3VydGggcHNldWRvLXNlbnNvciAtIGRhaWx5IHZvbHRhZ2UgKi8KKyAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAiZGF5IiwgTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDICk7CisgICAgc3AtPnZhbHVlID0gdG0tPnRtX21kYXktMjA7CisgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU2LCAiRGF5LWJhc2VkIHBzZXVkby1zZW5zb3IgLSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSB2b2x0YWdlIiApOworICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworCisgICAgLyogRmlmdGggcHNldWRvLXNlbnNvciAtIG1vbnRobHkgdm9sdGFnZSAqLworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJtb250aCIsIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV9tb247CisgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU2LCAiTW9udGgtYmFzZWQgcHNldWRvLXNlbnNvciAtIHBvc2l0aXZlIHZvbHRhZ2UiICk7CisgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisKKyAgICAvKiBTaXh0aCBwc2V1ZG8tc2Vuc29yIC0gYW5udWFsIGRhaWx5IHNvbWV0aGluZyAqLworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJ5ZGF5IiwgTkVUU05NUF9TRU5TT1JfVFlQRV9PVEhFUiApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV95ZGF5OworICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NiwgIkRheS1iYXNlZCBwc2V1ZG8tc2Vuc29yIC0gYW5udWFsIHNvbWV0aGluZyIgKTsKKyAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2R1bW15X3NlbnNvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmgKQEAgLTAsMCArMSBAQAorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTAxNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmMKQEAgLTAsMCArMSwxODkgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oPgorCisKK2V4dGVybiBOZXRzbm1wQ2FjaGVMb2FkIG5ldHNubXBfc2Vuc29yX2FyY2hfbG9hZDsKK2V4dGVybiB2b2lkICAgICAgICAgICAgIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggdm9pZCApOworc3RhdGljIGludCAgX3NlbnNvcl9sb2FkKCB2b2lkICk7CitzdGF0aWMgdm9pZCBfc2Vuc29yX2ZyZWUoIHZvaWQgKTsKKworc3RhdGljIGludCBfc2Vuc29yQXV0b1VwZGF0ZSA9IDA7ICAgLyogMCBtZWFucyBvbi1kZW1hbmQgY2FjaGluZyAqLworc3RhdGljIHZvaWQgX3NlbnNvcl91cGRhdGVfc3RhdHMoIHVuc2lnbmVkIGludCwgdm9pZCogKTsKKworbmV0c25tcF9jYWNoZSAgICAgKl9zZW5zb3JfY2FjaGUgICAgID0gTlVMTDsKK25ldHNubXBfY29udGFpbmVyICpfc2Vuc29yX2NvbnRhaW5lciA9IE5VTEw7CitzdGF0aWMgaW50ICAgICAgICAgX3NlbnNvcl9pZHggICAgICAgPSAwOworCit2b2lkIGluaXRfaHdfc2Vuc29ycyggdm9pZCApIHsKKworICAgIGlmICggX3NlbnNvcl9jb250YWluZXIgKQorICAgICAgICByZXR1cm47ICAgLyogQWxyZWFkeSBpbml0aWFsaXNlZCAqLworCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnMiLCAiSW5pdGlhbGlzZSBIYXJkd2FyZSBTZW5zb3JzIG1vZHVsZVxuIikpOworCisgICAgLyoKKyAgICAgKiBEZWZpbmUgYSBjb250YWluZXIgdG8gaG9sZCB0aGUgYmFzaWMgbGlzdCBvZiBzZW5zb3JzCisgICAgICogVGhlIGZvdXIgTE0tU0VOU09SLU1JQiBjb250YWluZXJzIHdpbGwgYmUgY3JlYXRlZCBpbgorICAgICAqICB0aGUgcmVsZXZhbnQgaW5pdGlhbGlzYXRpb24gcm91dGluZShzKQorICAgICAqLworICAgIF9zZW5zb3JfY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgic2Vuc29yVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKCBOVUxMID09IF9zZW5zb3JfY29udGFpbmVyICkgeworICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgImZhaWxlZCB0byBjcmVhdGUgY29udGFpbmVyIGZvciBzZW5zb3JUYWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggKTsKKworICAgIC8qCisgICAgICogSWYgd2UncmUgc2FtcGxpbmcgdGhlIHNlbnNvciBpbmZvcm1hdGlvbiBhdXRvbWF0aWNhbGx5LAorICAgICAqICAgdGhlbiBhcnJhbmdlIGZvciB0aGlzIHRvIGJlIHRyaWdnZXJlZCByZWd1bGFybHkuCisgICAgICoKKyAgICAgKiBJZiB3ZSdyZSBub3Qgc2FtcGxpbmcgdGhlc2UgdmFsdWVzIHJlZ3VsYXJseSwKKyAgICAgKiAgIGNyZWF0ZSBhIHN1aXRhYmxlIGNhY2hlIGhhbmRsZXIgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBpZiAoIF9zZW5zb3JBdXRvVXBkYXRlICkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29ycyIsICJSZWxvYWRpbmcgSGFyZHdhcmUgU2Vuc29ycyBhdXRvbWF0aWNhbGx5ICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbnNvckF1dG9VcGRhdGUpKTsKKyAgICAgICAgc25tcF9hbGFybV9yZWdpc3RlciggX3NlbnNvckF1dG9VcGRhdGUsIFNBX1JFUEVBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbnNvcl91cGRhdGVfc3RhdHMsIE5VTEwgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIF9zZW5zb3JfY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSggNSwgbmV0c25tcF9zZW5zb3JfbG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NlbnNvcl9mcmVlLCBOVUxMLCAwICk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzIiwgIlJlbG9hZGluZyBIYXJkd2FyZSBTZW5zb3JzIG9uLWRlbWFuZCAoJXApXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZW5zb3JfY2FjaGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgc2h1dGRvd25faHdfc2Vuc29ycyggdm9pZCApIHsKKyAgICBfc2Vuc29yX2ZyZWUoKTsKK30KKworLyoKKyAqICBSZXR1cm4gdGhlIG1haW4gc2Vuc29yIGNvbnRhaW5lcgorICovCituZXRzbm1wX2NvbnRhaW5lciAqZ2V0X3NlbnNvcl9jb250YWluZXIoIHZvaWQgKSB7IHJldHVybiBfc2Vuc29yX2NvbnRhaW5lcjsgfQorCisvKgorICogIFJldHVybiB0aGUgbWFpbiBzZW5zb3IgY2FjaGUgY29udHJvbCBzdHJ1Y3R1cmUgKGlmIGRlZmluZWQpCisgKi8KK25ldHNubXBfY2FjaGUgKmdldF9zZW5zb3JfY2FjaGUoIHZvaWQgKSB7IHJldHVybiBfc2Vuc29yX2NhY2hlOyB9CisKKworLyoKKyAqIFdyYXBwZXIgcm91dGluZSBmb3IgYXV0b21hdGljYWxseSB1cGRhdGluZyBzZW5zb3Igc3RhdGlzdGljcworICovCit2b2lkCitfc2Vuc29yX3VwZGF0ZV9zdGF0cyggdW5zaWduZWQgaW50IGNsaWVudHJlZywgdm9pZCAqZGF0YSApCit7CisgICAgX3NlbnNvcl9mcmVlKCk7CisgICAgX3NlbnNvcl9sb2FkKCk7Cit9CisKKy8qCisgKiBXcmFwcGVyIHJvdXRpbmUgZm9yIHJlLWxvYWRpbmcgc2Vuc29yIHN0YXRpc3RpY3Mgb24gZGVtYW5kCisgKi8KK2ludAorbmV0c25tcF9zZW5zb3JfbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKmRhdGEgKQoreworICAgIHJldHVybiBfc2Vuc29yX2xvYWQoKTsKK30KKworLyoKKyAqIFdyYXBwZXIgcm91dGluZSBmb3IgcmVsZWFzaW5nIGV4cGlyZWQgc2Vuc29yIHN0YXRpc3RpY3MKKyAqLwordm9pZAorbmV0c25tcF9zZW5zb3JfZnJlZSggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKmRhdGEgKQoreworICAgIF9zZW5zb3JfZnJlZSgpOworfQorCisKKy8qCisgKiBBcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcHJvY2Vzc2luZyBvZiBsb2FkaW5nIHNlbnNvciBzdGF0aXN0aWNzCisgKi8KK3N0YXRpYyBpbnQKK19zZW5zb3JfbG9hZCggdm9pZCApCit7CisgICAgbmV0c25tcF9zZW5zb3JfYXJjaF9sb2FkKCBOVUxMLCBOVUxMICk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcmVsZWFzZSBvZiBzZW5zb3Igc3RhdGlzdGljcworICovCitzdGF0aWMgdm9pZAorX3NlbnNvcl9mcmVlKCB2b2lkICkKK3sKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICpzcDsKKworICAgIGZvciAoc3AgPSBDT05UQUlORVJfRklSU1QoIF9zZW5zb3JfY29udGFpbmVyICk7CisgICAgICAgICBzcDsKKyAgICAgICAgIHNwID0gQ09OVEFJTkVSX05FWFQoICBfc2Vuc29yX2NvbnRhaW5lciwgc3AgKSkgeworCisgICAgICAgICBzcC0+ZmxhZ3MgJj0gfiBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICB9Cit9CisKKworLyoKKyAqIFJldHJpZXZlIGEgc2Vuc29yIGVudHJ5IGJ5IG5hbWUsCisgKiAgb3IgKG9wdGlvbmFsbHkpIGluc2VydCBhIG5ldyBvbmUgaW50byB0aGUgY29udGFpbmVyCisgKi8KK25ldHNubXBfc2Vuc29yX2luZm8gKgorc2Vuc29yX2J5X25hbWUoIGNvbnN0IGNoYXIgKm5hbWUsIGludCBjcmVhdGVfdHlwZSApCit7CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAqc3A7CisKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczpuYW1lIiwgIkdldCBzZW5zb3IgZW50cnkgKCVzKVxuIiwgbmFtZSkpOworCisgICAgLyoKKyAgICAgKiAgTG9vayB0aHJvdWdoIHRoZSBsaXN0IGZvciBhIG1hdGNoaW5nIGVudHJ5CisgICAgICovCisgICAgICAgIC8qIC4uIG9yIHVzZSBhIHNlY29uZGFyeSBpbmRleCBjb250YWluZXIgPz8gKi8KKyAgICBmb3IgKHNwID0gQ09OVEFJTkVSX0ZJUlNUKCBfc2Vuc29yX2NvbnRhaW5lciApOworICAgICAgICAgc3A7CisgICAgICAgICBzcCA9IENPTlRBSU5FUl9ORVhUKCAgX3NlbnNvcl9jb250YWluZXIsIHNwICkpIHsKKworICAgICAgICBpZiAoICFzdHJjbXAoIG5hbWUsIHNwLT5uYW1lICkpCisgICAgICAgICAgICByZXR1cm4gc3A7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3QgZm91bmQuLi4KKyAgICAgKi8KKyAgICBpZiAoIGNyZWF0ZV90eXBlID09IE5FVFNOTVBfU0VOU09SX0ZJTkRfRVhJU1QgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOm5hbWUiLCAiTm8gc3VjaCBzZW5zb3IgZW50cnlcbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAuLi4gc28gbGV0J3MgY3JlYXRlIGEgbmV3IG9uZSwgdXNpbmcgdGhlIHR5cGUgc3VwcGxpZWQKKyAgICAgKi8KKyAgICBzcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfc2Vuc29yX2luZm8gKTsKKyAgICBpZiAoIHNwICkgeworICAgICAgICBpZiAoc3RybGVuKG5hbWUpID49IHNpemVvZihzcC0+bmFtZSkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTZW5zb3IgbmFtZSBpcyB0b28gbGFyZ2U6ICVzXG4iLCBuYW1lKTsKKyAgICAgICAgICAgIGZyZWUoc3ApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RyY3B5KCBzcC0+bmFtZSwgbmFtZSApOworICAgICAgICBzcC0+dHlwZSA9IGNyZWF0ZV90eXBlOworICAgICAgICAvKgorICAgICAgICAgKiBTZXQgdXAgdGhlIGluZGV4IHZhbHVlLgorICAgICAgICAgKiAgCisgICAgICAgICAqIEFsbCB0aGlzIHRyb3VibGUsIGp1c3QgZm9yIGEgc2ltcGxlIGludGVnZXIuCisgICAgICAgICAqIFN1cmVseSB0aGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheT8KKyAgICAgICAgICovCisgICAgICAgIHNwLT5pZHgubGVuICA9IDE7CisgICAgICAgIHNwLT5pZHgub2lkcyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG9pZCApOworICAgICAgICBzcC0+aWR4Lm9pZHNbMF0gPSArK19zZW5zb3JfaWR4OworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOm5hbWUiLCAiQ3JlYXRlIHNlbnNvciBlbnRyeSAodHlwZSA9ICVkLCBpbmRleCA9ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX3R5cGUsIF9zZW5zb3JfaWR4KSk7CisgICAgQ09OVEFJTkVSX0lOU0VSVCggX3NlbnNvcl9jb250YWluZXIsIHNwICk7CisgICAgcmV0dXJuIHNwOworfQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaCBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWNjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaApAQCAtMCwwICsxLDIgQEAKK3ZvaWQgaW5pdF9od19zZW5zb3JzKCB2b2lkICk7Cit2b2lkIHNodXRkb3duX2h3X3NlbnNvcnMoIHZvaWQgKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiYmIxMAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jCkBAIC0wLDAgKzEsMTYxIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgPGtzdGF0Lmg+CisjaW5jbHVkZSA8L3Vzci9wbGF0Zm9ybS9zdW40dS9pbmNsdWRlL3N5cy9lbnZjdHJsLmg+CisKK3ZvaWQgbmV0c25tcF9zZW5zb3JfYXJjaF9pbml0KCB2b2lkICkgeworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW5pdGlhbGlzZSBLU3RhdCBTZW5zb3JzIG1vZHVsZVxuIikpOworfQorCisKK2ludAorbmV0c25tcF9zZW5zb3JfYXJjaF9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2cCkgeworICAgIG5ldHNubXBfc2Vuc29yX2luZm8gICAgICAgICpzcDsKKworICAgIGludCAgICAgICAgIGk7CisgICAgY29uc3QgY2hhciAqZmFudHlwZXNbXT17IkNQVSIsIlBXUiIsIkFGQiJ9OworICAgIGNoYXIgICAgICAgIG5hbWVbIDI1NiBdOworCisgICAga3N0YXRfY3RsX3QgICAgKmtjOworICAgIGtzdGF0X3QgICAgICAgICprcDsKKyAgICBlbnZjdHJsX2Zhbl90ICAqZmFuX2luZm87CisgICAgZW52Y3RybF9wc190ICAgKnBvd2VyX2luZm87CisgICAgZW52Y3RybF9lbmNsX3QgKmVuY19pbmZvOworCisKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIlJlbG9hZCBLU3RhdCBTZW5zb3JzIG1vZHVsZVxuIikpOworCisgICAga2MgPSBrc3RhdF9vcGVuKCk7CisgICAgaWYgKCBrYyA9PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiQ291bGRuJ3Qgb3BlbiBrc3RhdFxuIikpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgCisKKyAgICAvKgorICAgICAqIFJldHJpZXZlIGZhbiBpbmZvcm1hdGlvbgorICAgICAqLworICAgIGtwID0ga3N0YXRfbG9va3VwKCBrYywgRU5WQ1RSTF9NT0RVTEVfTkFNRSwgMCwgRU5WQ1RSTF9LU1RBVF9GQU5TVEFUKTsKKyAgICBpZiAoKCBrcCA9PSAwICkgfHwgKGtzdGF0X3JlYWQoIGtjLCBrcCwgMCApID09IC0xICkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJObyBmYW4gaW5mb3JtYXRpb25cbiIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYW5faW5mbyA9IChlbnZjdHJsX2Zhbl90ICopa3AtPmtzX2RhdGE7ICAgICAgICAKKyAgICAgICAgZm9yIChpPTA7IGk8a3AtPmtzX25kYXRhOyBpKyspIHsKKyAgICAgICAgICAgIG1lbXNldCggbmFtZSwgMCwgMjU2ICk7CisgICAgICAgICAgICBzbnByaW50ZiggbmFtZSwgMjU1LCAiJXMlZCIsIGZhbnR5cGVzW2Zhbl9pbmZvLT50eXBlXSwgZmFuX2luZm8tPmluc3RhbmNlICk7CisKKyAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNICk7CisgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IGZhbl9pbmZvLT5mYW5zcGVlZDsKKyAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTUsICJmYW4gdHlwZSAlcyBudW1iZXIgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmYW50eXBlc1tmYW5faW5mby0+dHlwZV0sIGZhbl9pbmZvLT5pbnN0YW5jZSApOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgZmFuX2luZm8rKzsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoKKyAgICAgKiBSZXRyaWV2ZSBQb3dlciBTdXBwbHkgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBrcCA9IGtzdGF0X2xvb2t1cCgga2MsIEVOVkNUUkxfTU9EVUxFX05BTUUsIDAsIEVOVkNUUkxfS1NUQVRfUFNOQU1FKTsKKyAgICBpZiAoKCBrcCA9PSAwICkgfHwgKGtzdGF0X3JlYWQoIGtjLCBrcCwgMCApID09IC0xICkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJObyBQU1UgaW5mb3JtYXRpb25cbiIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3dlcl9pbmZvID0gKGVudmN0cmxfcHNfdCAqKWtwLT5rc19kYXRhOyAgICAgICAgCisgICAgICAgIGZvciAoaT0wOyBpPGtwLT5rc19uZGF0YTsgaSsrKSB7CisgICAgICAgICAgICBtZW1zZXQoIG5hbWUsIDAsIDI1NiApOworICAgICAgICAgICAgc25wcmludGYoIG5hbWUsIDI1NSwgIlBTVSVkIiwgcG93ZXJfaW5mby0+aW5zdGFuY2UgKTsKKworICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggbmFtZSwgTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSk7CisgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IHBvd2VyX2luZm8tPnBzX3RlbXByOworICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NSwgInBvd2VyIHN1cHBseSAlZCIsIHBvd2VyX2luZm8tPmluc3RhbmNlICk7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBwb3dlcl9pbmZvKys7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qCisgICAgICogUmV0cmlldmUgRW5jbG9zdXJlIGluZm9ybWF0aW9uCisgICAgICovCisgICAga3AgPSBrc3RhdF9sb29rdXAoIGtjLCBFTlZDVFJMX01PRFVMRV9OQU1FLCAwLCBFTlZDVFJMX0tTVEFUX0VOQ0wpOworICAgIGlmICgoIGtwID09IDAgKSB8fCAoa3N0YXRfcmVhZCgga2MsIGtwLCAwICkgPT0gLTEgKSkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIk5vIGVuY2xvc3VyZSBpbmZvcm1hdGlvblxuIikpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY19pbmZvID0gKGVudmN0cmxfZW5jbF90ICopa3AtPmtzX2RhdGE7ICAgICAgICAKKyAgICAgICAgZm9yIChpPTA7IGk8a3AtPmtzX25kYXRhOyBpKyspIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGUgZW5jbG9zdXJlIGluZm9ybWF0aW9uIGNvdmVycyBzZXZlcmFsIGRpZmZlcmVudCB0eXBlcyBvZiBzZW5zb3IKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3dpdGNoICggZW5jX2luZm8tPnR5cGUgKSB7CisgICAgICAgICAgICBjYXNlIEVOVkNUUkxfRU5DTF9GU1A6CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRW5jbG9zdXJlIEZyb250IFBhbmVsXG4iKSk7CisgICAgICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggIkZTUCIsIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIpOworICAgICAgICAgICAgICAgIGlmICggc3AgKSB7CisgICAgICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IGVuY19pbmZvLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBFTlZDVFJMX0VOQ0xfQU1CVEVNUFI6CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRW5jbG9zdXJlIEFtYmllbnQgVGVtcGVyYXR1cmVcbiIpKTsKKyAgICAgICAgICAgICAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAiQW1iaWVudCIsIE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUpOworICAgICAgICAgICAgICAgIGlmICggc3AgKSB7CisgICAgICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IGVuY19pbmZvLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVOVkNUUkxfRU5DTF9DUFVURU1QUjoKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJFbmNsb3N1cmUgQ1BVIFRlbXBlcmF0dXJlXG4iKSk7CisgICAgICAgICAgICAgICAgbWVtc2V0KCBuYW1lLCAwLCAyNTYgKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZiggbmFtZSwgMjU1LCAiQ1BVJWQiLCBlbmNfaW5mby0+aW5zdGFuY2UgKTsKKyAgICAgICAgICAgICAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCBuYW1lLCBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSBlbmNfaW5mby0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgICAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTUsICJDUFUlZCB0ZW1wZXJhdHVyZSIsIGVuY19pbmZvLT5pbnN0YW5jZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFTlZDVFJMX0VOQ0xfQkFDS1BMQU5FNDoKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJFbmNsb3N1cmUgQmFja3BsYW5lNFxuIikpOworICAgICAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJCYWNrcGxhbmU0IiwgTkVUU05NUF9TRU5TT1JfVFlQRV9PVEhFUik7CisgICAgICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3AtPnZhbHVlID0gZW5jX2luZm8tPnZhbHVlOworICAgICAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEVOVkNUUkxfRU5DTF9CQUNLUExBTkU4OgorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkVuY2xvc3VyZSBCYWNrcGxhbmU0XG4iKSk7CisgICAgICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggIkJhY2twbGFuZTQiLCBORVRTTk1QX1NFTlNPUl9UWVBFX09USEVSKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSBlbmNfaW5mby0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDogICAgCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiVW5yZWNvZ25pc2VkIEVuY2xvc3VyZSBlbnRyeSAoJWQpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX2luZm8tPnR5cGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jX2luZm8rKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGtzdGF0X2Nsb3NlKGtjKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmZmI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5oCkBAIC0wLDAgKzEgQEAKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2YxNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5jCkBAIC0wLDAgKzEsNzQgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oPgorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHNlbnNvcnMvc2Vuc29ycy5oPgorCit2b2lkIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggdm9pZCApIHsKKyAgICBGSUxFICpmcCA9IGZvcGVuKCIvZXRjL3NlbnNvcnMuY29uZiIsICJyIik7CisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJJbml0aWFsaXNlIExNIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisgICAgc2Vuc29yc19pbml0KCBmcCApOworfQorCitpbnQKK25ldHNubXBfc2Vuc29yX2FyY2hfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdnApIHsKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisgICAgY29uc3Qgc2Vuc29yc19jaGlwX25hbWUgICAgKmNoaXA7CisgICAgY29uc3Qgc2Vuc29yc19mZWF0dXJlX2RhdGEgKmRhdGE7CisgICAgaW50ICAgICAgICAgICAgIGNoaXBfbnIgPSAwOworCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJSZWxvYWQgTE0gU2Vuc29ycyBtb2R1bGVcbiIpKTsKKyAgICB3aGlsZSAoKGNoaXAgPSBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcygmY2hpcF9ucikpKSB7CisJaW50ICAgICAgICAgICAgIGEgPSAwOworCWludCAgICAgICAgICAgICBiID0gMDsKKworICAgICAgICB3aGlsZSAoKGRhdGEgPSBzZW5zb3JzX2dldF9hbGxfZmVhdHVyZXMoKmNoaXAsICZhLCAmYikpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJnZXRfYWxsX2ZlYXR1cmVzICglZCwgJWQpXG4iLCBhLCBiKSk7CisgICAgICAgICAgICBjaGFyICAgICAgICAgICAqbGFiZWwgPSBOVUxMOworICAgICAgICAgICAgZG91YmxlICAgICAgICAgIHZhbDsKKyAgICAgICAgICAgIGludCAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9PVEhFUjsKKworICAgICAgICAgICAgaWYgKChkYXRhLT5tb2RlICYgU0VOU09SU19NT0RFX1IpICYmCisgICAgICAgICAgICAgICAgKGRhdGEtPm1hcHBpbmcgPT0gU0VOU09SU19OT19NQVBQSU5HKSAmJgorICAgICAgICAgICAgICAgICFzZW5zb3JzX2dldF9sYWJlbCgqY2hpcCwgZGF0YS0+bnVtYmVyLCAmbGFiZWwpICYmCisgICAgICAgICAgICAgICAgIXNlbnNvcnNfZ2V0X2ZlYXR1cmUoKmNoaXAsIGRhdGEtPm51bWJlciwgJnZhbCkpIHsKKworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIiVzID0gJWZcbiIsIGxhYmVsLCB2YWwpKTsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIERldGVybWluZSB0aGUgdHlwZSBvZiBzZW5zb3IgZnJvbSB0aGUgZGVzY3JpcHRpb24uCisgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgKiBJZiB0aGUgdGV4dCBiZWluZyBsb29rZWQgZm9yIGJlbG93IGlzIG5vdCBpbiB0aGUgbGFiZWwgb2YgYQorICAgICAgICAgICAgICAgICAqIGdpdmVuIHNlbnNvciAoZS5nLiwgdGhlIHRlbXAxIHNlbnNvciBoYXMgYmVlbiBsYWJlbGVkICdDUFUnCisgICAgICAgICAgICAgICAgICogcmF0aGVyIHRoYW4gJ0NQVSB0ZW1wJykgaXQgd2lsbCBiZSBjYXRlZ29yaXNlZCBhcyBPVEhFUi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKGxhYmVsLCAiViIpKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHJzdHIobGFiZWwsICJmYW4iKSB8fCBzdHJzdHIobGFiZWwsICJGYW4iKSkgeworICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9SUE07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHJzdHIobGFiZWwsICJ0ZW1wIikgfHwgc3Ryc3RyKGxhYmVsLCAiVGVtcCIpKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogVXNlIHRoaXMgdHlwZSB0byBjcmVhdGUgYSBuZXcgc2Vuc29yIGVudHJ5CisgICAgICAgICAgICAgICAgICogIChpbnNlcnRpbmcgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIHN1Yi1jb250YWluZXJzKQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIGxhYmVsLCB0eXBlICk7CisgICAgICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3AtPnZhbHVlID0gdmFsOworICAgICAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisJICAgIGlmIChsYWJlbCkgeworCQlmcmVlKGxhYmVsKTsKKwkJbGFiZWwgPSBOVUxMOworCSAgICB9CisgICAgICAgIH0gLyogZW5kIHdoaWxlIGRhdGEgKi8KKyAgICB9IC8qIGVuZCB3aGlsZSBjaGlwICovCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZmZiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5oCkBAIC0wLDAgKzEgQEAKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGRhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jCkBAIC0wLDAgKzEsMTAyIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzZW5zb3JzL3NlbnNvcnMuaD4KKworCit2b2lkIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggdm9pZCApIHsKKyAgICBGSUxFICpmcCA9IGZvcGVuKCIvZXRjL3NlbnNvcnMuY29uZiIsICJyIik7CisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJJbml0aWFsaXNlIHYzIExNIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisgICAgc2Vuc29yc19pbml0KCBmcCApOworfQorCitpbnQKK25ldHNubXBfc2Vuc29yX2FyY2hfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdnApIHsKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisgICAgY29uc3Qgc2Vuc29yc19jaGlwX25hbWUgICAgKmNoaXA7CisgICAgY29uc3Qgc2Vuc29yc19mZWF0dXJlICAgICAgKmRhdGE7CisgICAgY29uc3Qgc2Vuc29yc19zdWJmZWF0dXJlICAgKmRhdGEyOworICAgIGludCAgICAgICAgICAgICBjaGlwX25yID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiUmVsb2FkIHYzIExNIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisgICAgd2hpbGUgKChjaGlwID0gc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMoIE5VTEwsICZjaGlwX25yKSkpIHsKKwlpbnQgICAgICAgICAgICAgYSA9IDA7CisKKyAgICAgICAgd2hpbGUgKChkYXRhID0gc2Vuc29yc19nZXRfZmVhdHVyZXMoIGNoaXAsICZhKSkpIHsKKwkgICAgaW50ICAgICAgICAgICAgIGIgPSAwOworCisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJnZXRfZmVhdHVyZXMgKCVzLCAlZClcbiIsIGRhdGEtPm5hbWUsIGRhdGEtPm51bWJlcikpOworCisgICAgICAgICAgICB3aGlsZSAoKGRhdGEyID0gc2Vuc29yc19nZXRfYWxsX3N1YmZlYXR1cmVzKCBjaGlwLCBkYXRhLCAmYikpKSB7CisgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgKmxhYmVsID0gTlVMTDsKKyAgICAgICAgICAgICAgICBkb3VibGUgICAgICAgICAgdmFsID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgdHlwZSA9IE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVI7CisKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICIgIGdldF9zdWJmZWF0dXJlcyAoJXMsICVkKVxuIiwgZGF0YTItPm5hbWUsIGRhdGEyLT5udW1iZXIpKTsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIENoZWNrIHRoZSB0eXBlIG9mIHRoaXMgc3ViZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgKiAgIGNvbmNlbnRyYXRpbmcgb24gdGhlIG1haW4gImlucHV0IiBtZWFzdXJlbWVudHMuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc3dpdGNoICggZGF0YTItPnR5cGUgKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTRU5TT1JTX1NVQkZFQVRVUkVfSU5fSU5QVVQ6CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU0VOU09SU19TVUJGRUFUVVJFX0ZBTl9JTlBVVDoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNFTlNPUlNfU1VCRkVBVFVSRV9URU1QX0lOUFVUOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTRU5TT1JTX1NVQkZFQVRVUkVfVklEOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIGV2ZXJ5dGhpbmcgb3RoZXIgdGhhbiB0aGVzZSBiYXNpYyBzZW5zb3IgZmVhdHVyZXMgLSA/Pz8gKi8KKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiICBTa2lwIHR5cGUgJXhcbiIsIGRhdGEyLT50eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogR2V0IHRoZSBuYW1lIGFuZCB2YWx1ZSBvZiB0aGlzIHN1YmZlYXR1cmUKKyAgICAgICAgICAgICAgICAgKi8KKy8qCisgICAgICAgICAgICAgICAgaWYgKCEobGFiZWwgPSBzZW5zb3JzX2dldF9sYWJlbChjaGlwLCBkYXRhKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiICBDYW4ndCBnZXQgbmFtZSAoJXMpXG4iLCBsYWJlbCkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNlbnNvcnNfZ2V0X3ZhbHVlKGNoaXAsIGRhdGEyLT5udW1iZXIsICZ2YWwpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICIgIENhbid0IGdldCB2YWx1ZSAoJWYpXG4iLCB2YWwpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorKi8KKyAgICAgICAgICAgICAgICBpZiAoIShsYWJlbCA9IHNlbnNvcnNfZ2V0X2xhYmVsKGNoaXAsIGRhdGEpKSB8fAorICAgICAgICAgICAgICAgICAgICAgKHNlbnNvcnNfZ2V0X3ZhbHVlKGNoaXAsIGRhdGEyLT5udW1iZXIsICZ2YWwpIDwgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiICBDYW4ndCBnZXQgbmFtZS92YWx1ZSAoJXMsICVmKVxuIiwgbGFiZWwsIHZhbCkpOworICAgICAgICAgICAgICAgICAgICBmcmVlKGxhYmVsKTsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiJXMgPSAlZlxuIiwgbGFiZWwsIHZhbCkpOworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBVc2UgdGhpcyB0eXBlIHRvIGNyZWF0ZSBhIG5ldyBzZW5zb3IgZW50cnkKKyAgICAgICAgICAgICAgICAgKiAgKGluc2VydGluZyBpdCBpbiB0aGUgYXBwcm9wcmlhdGUgc3ViLWNvbnRhaW5lcnMpCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggbGFiZWwsIHR5cGUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSB2YWw7CisgICAgICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgIH0KKwkgICAgICAgIGlmIChsYWJlbCkgeworCQkgICAgZnJlZShsYWJlbCk7CisJCSAgICBsYWJlbCA9IE5VTEw7CisJICAgICAgICB9CisgICAgICAgICAgICB9IC8qIGVuZCB3aGlsZSBkYXRhMiAqLworICAgICAgICB9IC8qIGVuZCB3aGlsZSBkYXRhICovCisgICAgfSAvKiBlbmQgd2hpbGUgY2hpcCAqLworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuaApAQCAtMCwwICsxIEBACitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NjE3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYwpAQCAtMCwwICsxLDMzNCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxwaWNsLmg+CisKK3ZvaWQgbmV0c25tcF9zZW5zb3JfYXJjaF9pbml0KCB2b2lkICkgeworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW5pdGlhbGlzZSBQSUNMZCBTZW5zb3JzIG1vZHVsZVxuIikpOworICAgIHBpY2xfaW5pdGlhbGl6ZSgpOworfQorCisKKy8qCisgKiBIYW5kbGUgYSBudW1lcmljLXZhbHVlZCBzZW5zb3IKKyAqLworc3RhdGljIGludAorcmVhZF9udW1fc2Vuc29yKCBwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNvbnN0IGNoYXIgKnByb3B2YWwsIGZsb2F0ICp2YWx1ZSApCit7CisgICAgcGljbF9ub2RlaGRsX3QgIHNlbnNvcmg7CisgICAgcGljbF9wcm9waW5mb190IHNlbnNvcl9pbmZvOworICAgIHBpY2xfZXJybm9fdCAgICBlcnJvcl9jb2RlOworCisgICAgdW5pb24gdmFsdSB7CisgICAgICAgIGNoYXIgYnVmW1BJQ0xfUFJPUFNJWkVfTUFYXTsKKyAgICAgICAgdWludDMyX3QgdXM0OworICAgICAgICB1aW50MTZfdCB1czI7CisgICAgICAgIGludDMyX3QgaXM0OworICAgICAgICBpbnQxNl90IGlzMjsKKyAgICAgICAgZmxvYXQgZjsKKyAgICB9IHZhbDsKKworICAgIC8qCisgICAgICogIFJldHJpZXZlIHRoZSBzcGVjaWZpZWQgc2Vuc29yIGluZm9ybWF0aW9uIGFuZCB2YWx1ZQorICAgICAqLworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9waW5mb19ieV9uYW1lKGNoaWxkaCwgcHJvcHZhbCwgJnNlbnNvcl9pbmZvLCAmc2Vuc29yaCk7CisgICAgaWYgKCBlcnJvcl9jb2RlICE9IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAic2Vuc29yIGluZm8gbG9va3VwIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsKHNlbnNvcmgsICZ2YWwuYnVmLCBzZW5zb3JfaW5mby5zaXplKTsKKyAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJzZW5zb3IgdmFsdWUgbG9va3VwIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIC8qCisgICAgICogIENoZWNrIHRoZSB2YWxpZGl0eSAodHlwZSBhbmQgc2l6ZSkgb2YgdGhpcyB2YWx1ZQorICAgICAqLworICAgIGlmICggc2Vuc29yX2luZm8udHlwZSA9PSBQSUNMX1BUWVBFX0ZMT0FUICkgeworICAgICAgICAqdmFsdWUgPSB2YWwuZjsKKyAgICB9IGVsc2UgaWYgKCBzZW5zb3JfaW5mby50eXBlID09IFBJQ0xfUFRZUEVfVU5TSUdORURfSU5UICkgeworICAgICAgICAvKiAxNi1iaXQgb3IgMzItYml0IHVuc2lnbmVkIGludGVnZXJzICovCisgICAgICAgIGlmICggc2Vuc29yX2luZm8uc2l6ZSA9PSAyICkgeworICAgICAgICAgICAgKnZhbHVlID0gdmFsLnVzMjsKKyAgICAgICAgfSBlbHNlIGlmICggc2Vuc29yX2luZm8uc2l6ZSA9PSA0ICkgeyAKKyAgICAgICAgICAgICp2YWx1ZSA9IHZhbC51czQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJ1bnNpZ25lZCBpbnRlZ2VyICglZCBiaXQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yX2luZm8uc2l6ZSAqIDgpKTsKKyAgICAgICAgICAgIHJldHVybiBQSUNMX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCBzZW5zb3JfaW5mby50eXBlID09IFBJQ0xfUFRZUEVfSU5UICkgeworICAgICAgICAvKiAxNi1iaXQgb3IgMzItYml0IHNpZ25lZCBpbnRlZ2VycyAqLworICAgICAgICBpZiAoIHNlbnNvcl9pbmZvLnNpemUgPT0gMiApIHsKKyAgICAgICAgICAgICp2YWx1ZSA9IHZhbC5pczI7CisgICAgICAgIH0gZWxzZSBpZiAoIHNlbnNvcl9pbmZvLnNpemUgPT0gNCApIHsgCisgICAgICAgICAgICAqdmFsdWUgPSB2YWwuaXM0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAic2lnbmVkIGludGVnZXIgKCVkIGJpdClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JfaW5mby5zaXplICogOCkpOworICAgICAgICAgICAgcmV0dXJuIFBJQ0xfRkFJTFVSRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgInVucmVjb2duaXNlZCB0eXBlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNvcl9pbmZvLnR5cGUpKTsKKyAgICAgICAgcmV0dXJuIFBJQ0xfRkFJTFVSRTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3JfY29kZTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19udW1fc2Vuc29yKCBwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNvbnN0IGNoYXIgKnByb3BuYW1lLCBjb25zdCBjaGFyICpwcm9wdmFsLCBpbnQgdHlwICkKK3sKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisgICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOworICAgIHBpY2xfZXJybm9fdCAgICBlcnJvcl9jb2RlOworCisgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggcHJvcG5hbWUsIHR5cCApOworICAgIGlmICggIXNwICkgeworICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGVycm9yX2NvZGUgPSByZWFkX251bV9zZW5zb3IoIGNoaWxkaCwgcHJvcHZhbCwgJnZhbHVlICk7CisgICAgaWYgKCBlcnJvcl9jb2RlID09IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgc3AtPnZhbHVlID0gdmFsdWU7CisgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkZhaWxlZCB0byByZWFkICVzIHNlbnNvciB2YWx1ZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wbmFtZSwgZXJyb3JfY29kZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKworLyoKKyAqICAgIEhhbmRsZSBhbiBlbnVtZXJhdGlvbi12YWx1ZWQgc2Vuc29yCisgKi8KK2NvbnN0IGNoYXIgKnN3aXRjaF9zZXR0aW5nc1tdID0geyAiT0ZGIiwiT04iLCJOT1JNQUwiLCJMT0NLRUQiLAorCQkJCSAgIlVOS05PV04iLCJESUFHIiwiU0VDVVJFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIH07Citjb25zdCBjaGFyICpsZWRfc2V0dGluZ3NbXSAgICA9IHsgIk9GRiIsIk9OIiwiQkxJTksiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgfTsKK2NvbnN0IGNoYXIgKmkyY19zZXR0aW5nc1tdICAgID0geyAiT0siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgfTsKKworc3RhdGljIGludAorcmVhZF9lbnVtX3NlbnNvciggcGljbF9ub2RlaGRsX3QgY2hpbGRoLCBmbG9hdCAqdmFsdWUsIGNvbnN0IGNoYXIgKipvcHRpb25zICkKK3sKKyAgICBwaWNsX25vZGVoZGxfdCAgc2Vuc29yaDsKKyAgICBwaWNsX3Byb3BpbmZvX3Qgc2Vuc29yX2luZm87CisgICAgcGljbF9lcnJub190ICAgIGVycm9yX2NvZGU7CisgICAgY2hhciAgICAgICAgICAgIHN0YXRlW1BJQ0xfUFJPUFNJWkVfTUFYXTsKKyAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgIC8qCisgICAgICogIFJldHJpZXZlIHRoZSBzcGVjaWZpZWQgc2Vuc29yIGluZm9ybWF0aW9uIGFuZCB2YWx1ZQorICAgICAqLworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9waW5mb19ieV9uYW1lKGNoaWxkaCwgIlN0YXRlIiwgJnNlbnNvcl9pbmZvLCAmc2Vuc29yaCk7CisgICAgaWYgKCBlcnJvcl9jb2RlICE9IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAic2Vuc29yIGluZm8gbG9va3VwIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsKHNlbnNvcmgsIHN0YXRlLCBzZW5zb3JfaW5mby5zaXplKTsKKyAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJzZW5zb3IgdmFsdWUgbG9va3VwIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIC8qCisgICAgICogVHJ5IHRvIGZpbmQgYSBtYXRjaGluZyBlbnRyeSBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLgorICAgICAqIE5vdGUgdGhhdCBzb21lIHBsYXRmb3JtcyBtYXkgdXNlIHVwcGVyIG9yIGxvd2VyIGNhc2UKKyAgICAgKiAgIHZlcnNpb25zIG9mIHRoZXNlIGVudW1lcmF0aW9uIHZhbHVlcworICAgICAqICAoc28gdGhlIGNoZWNrcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSkKKyAgICAgKi8KKyAgICAqdmFsdWUgPSA5OTsgICAgLyogRHVtbXkgdmFsdWUgKi8KKyAgICBmb3IgKCBpPTA7ICBvcHRpb25zW2ldICE9IE5VTEw7IGkrKyApIHsKKyAgICAgICAgaWYgKHN0cm5jYXNlY21wKHN0YXRlLCBvcHRpb25zW2ldLCBzdHJsZW4ob3B0aW9uc1tpXSkpID09IDApIHsKKyAgICAgICAgICAgICp2YWx1ZSA9IGk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJFbnVtZXJhdGlvbiBzdGF0ZSAlcyBub3QgbWF0Y2hlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSkpOworICAgIHJldHVybiAwOyAgLyogT3IgYW4gZXJyb3IgPyAqLworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX2VudW1fc2Vuc29yKCBwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNvbnN0IGNoYXIgKnByb3BuYW1lLCBpbnQgdHlwLCBjb25zdCBjaGFyICoqb3B0aW9ucyApCit7CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAgICAgICAgKnNwOworICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTsKKyAgICBwaWNsX2Vycm5vX3QgICAgZXJyb3JfY29kZTsKKworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIHByb3BuYW1lLCB0eXAgKTsKKyAgICBpZiAoICFzcCApIHsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBlcnJvcl9jb2RlID0gcmVhZF9lbnVtX3NlbnNvciggY2hpbGRoLCAmdmFsdWUsIG9wdGlvbnMgKTsKKyAgICBpZiAoIGVycm9yX2NvZGUgPT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICBzcC0+dmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRmFpbGVkIHRvIHJlYWQgJXMgc2Vuc29yIHZhbHVlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BuYW1lLCBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworCisvKgorICogIFJlY3Vyc2l2ZWx5IHdhbGsgdGhyb3VnaCB0aGUgdHJlZSBvZiBzZW5zb3JzCisgKi8KK3N0YXRpYyBpbnQKK3Byb2Nlc3Nfc2Vuc29ycyggaW50IGxldmVsLCBwaWNsX25vZGVoZGxfdCBub2RlaCApIHsKKyAgICBwaWNsX25vZGVoZGxfdCBjaGlsZGgsIG5leHRoOworICAgIGNoYXIgICAgICAgICAgIHByb3BuYW1lWyAgUElDTF9QUk9QTkFNRUxFTl9NQVggIF07CisgICAgY2hhciAgICAgICAgICAgcHJvcGNsYXNzWyBQSUNMX0NMQVNTTkFNRUxFTl9NQVggXTsKKyAgICBwaWNsX2Vycm5vX3QgICBlcnJvcl9jb2RlOworCisgICAgbGV2ZWwrKzsKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJwcm9jZXNzX3NlbnNvcnMgLSBsZXZlbCAlZFxuIiwgbGV2ZWwpKTsKKworICAgIC8qIExvb2sgdXAgdGhlIGZpcnN0IGNoaWxkIG5vZGUgYXQgdGhpcyBsZXZlbCAqLworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsX2J5X25hbWUoIG5vZGVoLCBQSUNMX1BST1BfQ0hJTEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoaWxkaCwgc2l6ZW9mKGNoaWxkaCkpOworICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkZhaWxlZCB0byBnZXQgZmlyc3QgY2hpbGQgbm9kZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIC8qIFN0ZXAgdGhyb3VnaCB0aGUgY2hpbGQgbm9kZXMsIHJldHJpZXZpbmcgdGhlIG5hbWUgYW5kIGNsYXNzIG9mIGVhY2ggb25lICovCisgICAgd2hpbGUgKCBlcnJvcl9jb2RlID09IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgZXJyb3JfY29kZSA9IHBpY2xfZ2V0X3Byb3B2YWxfYnlfbmFtZSggY2hpbGRoLCBQSUNMX1BST1BfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcG5hbWUsIHNpemVvZihwcm9wbmFtZSktMSk7CisgICAgICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgICAgICAvKiBUaGUgTm9kZSBXaXRoIE5vIE5hbWUgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgImdldCBwcm9wZXJ0eSBuYW1lIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSkpOworICAgICAgICAgICAgcmV0dXJuKCBlcnJvcl9jb2RlICk7CisgICAgICAgIH0KKworICAgICAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcHJvcHZhbF9ieV9uYW1lKCBjaGlsZGgsIFBJQ0xfUFJPUF9DTEFTU05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BjbGFzcywgc2l6ZW9mKHByb3BjbGFzcyktMSk7CisgICAgICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgICAgICAvKiBUaGUgQ2xhc3NsZXNzIFNvY2lldHkgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgImdldCBwcm9wZXJ0eSBjbGFzcyBmYWlsZWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUpKTsKKyAgICAgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiTmFtZTogJXMsIENsYXNzICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wbmFtZSwgcHJvcGNsYXNzICkpOworCisKKyAgICAgICAgLyoKKyAgICAgICAgICogIFRocmVlIGNsYXNzZXMgcmVwcmVzZW50IGZ1cnRoZXIgZ3JvdXBzIG9mIHNlbnNvcnMsIGV0Yy4KKyAgICAgICAgICogIENhbGwgJ3Byb2Nlc3Nfc2Vuc29ycycgcmVjdXJzaXZlbHkgdG8gaGFuZGxlIHRoaXMgbmV4dCBsZXZlbAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCggc3Ryc3RyKCBwcm9wY2xhc3MsICJwaWNsIiAgICApKSB8fAorICAgICAgICAgICAgKCBzdHJzdHIoIHByb3BjbGFzcywgImZydXRyZWUiICkpIHx8CisgICAgICAgICAgICAoIHN0cnN0ciggcHJvcGNsYXNzLCAib2JwIiAgICAgKSkpIHsKKyAgICAgICAgICAgIHByb2Nlc3Nfc2Vuc29ycyggbGV2ZWwsIGNoaWxkaCApOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqICBPdGhlcndpc2UgcmV0cmlldmUgdGhlIHZhbHVlIGFwcHJvcHJpYXRlbHkgYmFzZWQgb24gdGhlCisgICAgICAgICAqICAgICBjbGFzcyBvZiB0aGUgc2Vuc29yLgorICAgICAgICAgKgorICAgICAgICAgKiAgV2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBQSUNMIHByb3BlcnR5IHRvIHJldHJpZXZlCisgICAgICAgICAqICAgICBmb3IgdGhpcyBjbGFzcyBvZiBzZW5zb3IsIGFuZCB0aGUgTmV0LVNOTVAgc2Vuc29yIHR5cGUuCisgICAgICAgICAqLworICAgICAgICBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJmYW4tdGFjaG9tZXRlciIgKSkgeworICAgICAgICAgICAgcHJvY2Vzc19udW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCAiQXRvRFNlbnNvclZhbHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNICk7CisgICAgICAgIH0gZWxzZSBpZiAoIHN0cnN0ciggcHJvcGNsYXNzLCAiZmFuIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX251bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsICJTcGVlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSApOworICAgICAgICB9IGVsc2UgaWYgKCBzdHJzdHIoIHByb3BjbGFzcywgInRlbXBlcmF0dXJlLXNlbnNvciIgKSkgeworICAgICAgICAgICAgcHJvY2Vzc19udW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCAiVGVtcGVyYXR1cmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSApOworICAgICAgICB9IGVsc2UgaWYgKCBzdHJzdHIoIHByb3BjbGFzcywgInZvbHRhZ2Utc2Vuc29yIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX251bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsICJWb2x0YWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qID8/ICovIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyApOworICAgICAgICB9IGVsc2UgaWYgKCBzdHJzdHIoIHByb3BjbGFzcywgImRpZ2l0YWwtc2Vuc29yIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX251bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsICJBdG9EU2Vuc29yVmFsdWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPz8gKi8gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDICk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRW51bWVyYXRpb24tdmFsdWVkIHNlbnNvcnMgdXNlIGEgZml4ZWQgUElDTCBwcm9wZXJ0eSAoIlN0YXRlIiksCisgICAgICAgICAgICAgKiAgIGJ1dCB0YWtlIGEgbGlzdCBvZiB0aGUgdmFsdWVzIGFwcHJvcHJpYXRlIGZvciB0aGF0IHNlbnNvciwKKyAgICAgICAgICAgICAqICAgYXMgd2VsbCBhcyB0aGUgTmV0LVNOTVAgc2Vuc29yIHR5cGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJzd2l0Y2giICkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NfZW51bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hfc2V0dGluZ3MgKTsKKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJsZWQiICkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NfZW51bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWRfc2V0dGluZ3MgKTsKKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJpMmMiICkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NfZW51bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfQk9PTEVBTiwgLyogPz8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zZXR0aW5ncyApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogU2tpcCBvdGhlciBjbGFzc2VzIG9mIHNlbnNvciAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiU2tpcHBpbmcgY2xhc3MgJXNcbiIsIHByb3BjbGFzcyApKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqICBNb3ZlIG9uIHRvIHRoZSBuZXh0IGNoaWxkIG5vZGUgYXQgdGhlIGN1cnJlbnQgbGV2ZWwgKGlmIGFueSkKKyAgICAgICAgICovCisgICAgICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsX2J5X25hbWUoIGNoaWxkaCwgUElDTF9QUk9QX1BFRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXh0aCwgc2l6ZW9mKG5leHRoKSk7CisgICAgICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgICAgICAvKiBUaGF0J3MgQWxsIEZvbGtzISAqLworICAgICAgICAgICAgcmV0dXJuICgoIGVycm9yX2NvZGUgPT0gUElDTF9QUk9QTk9URk9VTkQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBJQ0xfU1VDQ0VTUyA6IGVycm9yX2NvZGUgKTsKKyAgICAgICAgfQorICAgICAgICBjaGlsZGggPSBuZXh0aDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGVycm9yX2NvZGU7Cit9CisKKworaW50CituZXRzbm1wX3NlbnNvcl9hcmNoX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZwKSB7CisgICAgaW50ICAgICAgICAgICAgICAgZXJyb3JfY29kZTsKKyAgICBwaWNsX25vZGVoZGxfdCAgICByb290aDsKKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiUmVsb2FkIFBJQ0xkIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisKKyAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcm9vdCgmcm9vdGgpOworICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJDb3VsZG4ndCBnZXQgcm9vdCBub2RlIChlcnJvciAlZClcbiIsIGVycm9yX2NvZGUpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZXJyb3JfY29kZSA9IHByb2Nlc3Nfc2Vuc29ycygwLCByb290aCk7CisgICAgaWYgKCBlcnJvcl9jb2RlICE9IDI1NSApCisgICAgICAgIGlmICggZXJyb3JfY29kZSAhPSA3ICkgIC8qIGlnbm9yZSBQSUNMX1BST1BOT1RGT1VORCBlcnJvciAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJJbnRlcm5hbCBQSUNMZCBwcm9ibGVtIChlcnJvciAlZClcbiIsIGVycm9yX2NvZGUpKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIG5ldHNubXBfc2Vuc29yX2FyY2hfc2h1dGRvd24oIHZvaWQgKSB7CisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJTaHV0ZG93biBQaWNMRCBTZW5zb3JzIG1vZHVsZVxuIikpOworICAgIHBpY2xfc2h1dGRvd24oKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmgKQEAgLTAsMCArMSBAQAorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYyBiL2FnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMKaW5kZXggYzM4NWVkZS4uZDM0ZDkwNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYworKysgYi9hZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jCkBAIC01LDkgKzUsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTIxLDYgKzE4LDEzIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJoZWFkZXJfY29tcGxleC5oIgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhlYWRlcl9jb21wbGV4X2FsbCwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoZWFkZXJfY29tcGxleF9mcmVlX2FsbCwgaGVhZGVyX2NvbXBsZXhfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnksIGhlYWRlcl9jb21wbGV4X2FsbCkKKwogaW50CiBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV92YXJvaWQobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKQogewpAQCAtOTQsNyArOTgsNyBAQAogICAgIGlmICh2YXItPm5hbWVfbGVuZ3RoID4gTUFYX09JRF9MRU4pIHsKICAgICAgICAgREVCVUdNU0dUTCgoImhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX3Zhcm9pZCIsCiAgICAgICAgICAgICAgICAgICAgICJTb21ldGhpbmcgdGVycmlibHkgd3JvbmcsIG5hbWVsZW4gPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lX2xlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICAoaW50KXZhci0+bmFtZV9sZW5ndGgpKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KIApAQCAtMTMwLDcgKzEzNCw3IEBACiAgICAgICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YobG9uZyk7CiAgICAgICAgICAgICBvaWRMZW4tLTsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWFkZXJfY29tcGxleF9wYXJzZV9vaWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIlBhcnNlZCBpbnQoJWQpOiAlZFxuIiwgdmFyLT50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIlBhcnNlZCBpbnQoJWQpOiAlbGRcbiIsIHZhci0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICp2YXItPnZhbC5pbnRlZ2VyKSk7CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMzQwLDggKzM0NCw5IEBACiB9CiAKIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqCi1oZWFkZXJfY29tcGxleF9hZGRfZGF0YShzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKip0aGVkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCB2b2lkICpkYXRhKQoraGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGEoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb250X2FsbG93X2R1cGxpY2F0ZXMpCiB7CiAgICAgb2lkICAgICAgICAgICAgIG5ld29pZFtNQVhfT0lEX0xFTl07CiAgICAgc2l6ZV90ICAgICAgICAgIG5ld29pZF9sZW47CkBAIC0zNTIsNyArMzU3LDggQEAKIAogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXIpOwogICAgIHJldCA9Ci0gICAgICAgIGhlYWRlcl9jb21wbGV4X2FkZF9kYXRhX2J5X29pZCh0aGVkYXRhLCBuZXdvaWQsIG5ld29pZF9sZW4sIGRhdGEpOworICAgICAgICBoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YV9ieV9vaWQodGhlZGF0YSwgbmV3b2lkLCBuZXdvaWRfbGVuLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9hbGxvd19kdXBsaWNhdGVzKTsKICAgICAvKgogICAgICAqIGZyZWUgdGhlIHZhcmlhYmxlIGxpc3QsIGJ1dCBub3QgdGhlIGVuY2xvc2VkIGRhdGEhICBpdCdzIG5vdCBvdXJzISAKICAgICAgKi8KQEAgLTM2MSwzNCArMzY3LDIxIEBACiB9CiAKIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqCi1oZWFkZXJfY29tcGxleF9hZGRfZGF0YV9ieV9vaWQoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBuZXdvaWQsIHNpemVfdCBuZXdvaWRfbGVuLCB2b2lkICpkYXRhKQoraGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgdm9pZCAqZGF0YSkKIHsKLSAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cm4sICpoY2lwdHJwLCAqb3Vyc2VsZjsKLSAgICBpbnQgcmM7CisgICAgcmV0dXJuCisgICAgICAgIGhlYWRlcl9jb21wbGV4X21heWJlX2FkZF9kYXRhKHRoZWRhdGEsIHZhciwgZGF0YSwgMCk7Cit9CiAKLSAgICBpZiAodGhlZGF0YSA9PSBOVUxMIHx8IG5ld29pZCA9PSBOVUxMIHx8IGRhdGEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmb3IgKGhjaXB0cm4gPSAqdGhlZGF0YSwgaGNpcHRycCA9IE5VTEw7Ci0gICAgICAgICBoY2lwdHJuICE9IE5VTEw7IGhjaXB0cnAgPSBoY2lwdHJuLCBoY2lwdHJuID0gaGNpcHRybi0+bmV4dCkgewotICAgICAgICAvKgotICAgICAgICAgKiBYWFg6IGNoZWNrIGZvciA9PSBhbmQgZXJyb3IgKG92ZXJsYXBwaW5nIHRhYmxlIGVudHJpZXMpIAotICAgICAgICAgKiA4LzIwMDUgcmtzIE9rLCBJIGFkZGVkIGR1cGxpY2F0ZSBlbnRyeSBjaGVjaywgYnV0IG9ubHkgbG9nCi0gICAgICAgICAqICAgICAgICAgICAgd2FybmluZyBhbmQgY29udGludWUsIGJlY2F1c2UgaXQgc2VlbXMgdGhhdCBub2JvZHkKLSAgICAgICAgICogICAgICAgICAgICB0aGF0IGNhbGxzIHRoaXMgZnVjbnRpb24gZG9lcyBlcnJvciBjaGVja2luZyEuCi0gICAgICAgICAqLwotICAgICAgICByYyA9IHNubXBfb2lkX2NvbXBhcmUoaGNpcHRybi0+bmFtZSwgaGNpcHRybi0+bmFtZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld29pZCwgbmV3b2lkX2xlbik7Ci0gICAgICAgIGlmIChyYyA+IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoMCA9PSByYykgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJoZWFkZXJfY29tcGxleF9hZGRfZGF0YV9ieV9vaWQgd2l0aCAiCi0gICAgICAgICAgICAgICAgICAgICAiZHVwbGljYXRlIGluZGV4LlxuIik7Ci0gICAgICAgICAgICAvKiogdW5jb21tZW50IG51bGwgcmV0dXJuIHdoZW4gY2FsbGVycyBkbyBlcnJvciBjaGVja2luZyAqLwotICAgICAgICAgICAgLyoqIHJldHVybiBOVUxMOyAqLwotICAgICAgICB9Ci0gICAgfQorc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoKK19oZWFkZXJfY29tcGxleF9hZGRfYmV0d2VlbihzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKip0aGVkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbmV3b2lkLCBzaXplX3QgbmV3b2lkX2xlbiwgdm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKm91cnNlbGY7CiAKICAgICAvKgogICAgICAqIG5wdHIgc2hvdWxkIG5vdyBwb2ludCB0byB0aGUgc3BvdCB0aGF0IHdlIG5lZWQgdG8gYWRkIG91cnNlbHZlcwpAQCAtNDAwLDYgKzM5Myw4IEBACiAgICAgICovCiAgICAgb3Vyc2VsZiA9IChzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKikKICAgICAgICAgU05NUF9NQUxMT0NfU1RSVUNUKGhlYWRlcl9jb21wbGV4X2luZGV4KTsKKyAgICBpZiAob3Vyc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCiAgICAgICogY2hhbmdlIG91ciBwb2ludGVycyAKQEAgLTQzMCw2ICs0MjUsNTAgQEAKICAgICByZXR1cm4gaGNpcHRycDsKIH0KIAorCitzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKgoraGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGFfYnlfb2lkKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbmV3b2lkLCBzaXplX3QgbmV3b2lkX2xlbiwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZG9udF9hbGxvd19kdXBsaWNhdGVzKQoreworICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRybiwgKmhjaXB0cnA7CisgICAgaW50IHJjOworCisgICAgaWYgKHRoZWRhdGEgPT0gTlVMTCB8fCBuZXdvaWQgPT0gTlVMTCB8fCBkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChoY2lwdHJuID0gKnRoZWRhdGEsIGhjaXB0cnAgPSBOVUxMOworICAgICAgICAgaGNpcHRybiAhPSBOVUxMOyBoY2lwdHJwID0gaGNpcHRybiwgaGNpcHRybiA9IGhjaXB0cm4tPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYOiBjaGVjayBmb3IgPT0gYW5kIGVycm9yIChvdmVybGFwcGluZyB0YWJsZSBlbnRyaWVzKSAKKyAgICAgICAgICogOC8yMDA1IHJrcyBPaywgSSBhZGRlZCBkdXBsaWNhdGUgZW50cnkgY2hlY2ssIGJ1dCBvbmx5IGxvZworICAgICAgICAgKiAgICAgICAgICAgIHdhcm5pbmcgYW5kIGNvbnRpbnVlLCBiZWNhdXNlIGl0IHNlZW1zIHRoYXQgbm9ib2R5CisgICAgICAgICAqICAgICAgICAgICAgdGhhdCBjYWxscyB0aGlzIGZ1Y250aW9uIGRvZXMgZXJyb3IgY2hlY2tpbmchLgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBzbm1wX29pZF9jb21wYXJlKGhjaXB0cm4tPm5hbWUsIGhjaXB0cm4tPm5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdvaWQsIG5ld29pZF9sZW4pOworICAgICAgICBpZiAocmMgPiAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKDAgPT0gcmMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGFfYnlfb2lkIHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgImR1cGxpY2F0ZSBpbmRleC5cbiIpOworICAgICAgICAgICAgaWYgKGRvbnRfYWxsb3dfZHVwbGljYXRlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBfaGVhZGVyX2NvbXBsZXhfYWRkX2JldHdlZW4odGhlZGF0YSwgaGNpcHRycCwgaGNpcHRybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld29pZCwgbmV3b2lkX2xlbiwgZGF0YSk7Cit9CisKK3N0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqCitoZWFkZXJfY29tcGxleF9hZGRfZGF0YV9ieV9vaWQoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBuZXdvaWQsIHNpemVfdCBuZXdvaWRfbGVuLCB2b2lkICpkYXRhKQoreworICAgIHJldHVybiBoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YV9ieV9vaWQodGhlZGF0YSwgbmV3b2lkLCBuZXdvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgMCk7Cit9CisKIC8qCiAgKiBleHRyYWN0cyBhbiBlbnRyeSBmcm9tIHRoZSBzdG9yYWdlIHNwYWNlIChyZW1vdmluZyBpdCBmcm9tIGZ1dHVyZQogICogYWNjZXNzZXMpIGFuZCByZXR1cm5zIHRoZSBkYXRhIHN0b3JlZCB0aGVyZQpAQCAtNDg2LDYgKzUyNSw3IEBACiAvKgogICogY29tcGxldGVseSB3aXBlIG91dCBhbGwgZW50cmllcyBpbiBvdXIgZGF0YSBzdG9yZSAKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hFQURFUl9DT01QTEVYX0ZSRUVfQUxMCiB2b2lkCiBoZWFkZXJfY29tcGxleF9mcmVlX2FsbChzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKnRoZXN0dWZmLAogICAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVyQ29tcGxleENsZWFuZXIgKiBjbGVhbmVyKQpAQCAtNDk3LDcgKzUzNyw5IEBACiAgICAgICAgIGhlYWRlcl9jb21wbGV4X2ZyZWVfZW50cnkoaGNpcHRyLCBjbGVhbmVyKTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IRUFERVJfQ09NUExFWF9GUkVFX0FMTCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEVBREVSX0NPTVBMRVhfRklORF9FTlRSWQogc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoKIGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICp0aGVzdHVmZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdGhlZW50cnkpCkBAIC01MDgsNiArNTUwLDcgQEAKICAgICAgICAgIGhjaXB0ciA9IGhjaXB0ci0+bmV4dCk7CiAgICAgcmV0dXJuIGhjaXB0cjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hFQURFUl9DT01QTEVYX0ZJTkRfRU5UUlkgKi8KIAogI2lmZGVmIFRFU1RJTkcKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguaCBiL2FnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmgKaW5kZXggMjAyOGNlZS4uMmExNzI4YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguaAorKysgYi9hZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5oCkBAIC01Nyw2ICs1NywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnRoZWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhciwgdm9pZCAqZGF0YSk7CitzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhlYWRlcl9jb21wbGV4X21heWJlX2FkZF9kYXRhKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRvbnRfYWxsb3dfZHVwbGljYXRlcyk7CiAKIC8qCiAgKiBOb3RlOiBuZXdvaWQgaXMgY29waWVkL2Nsb25lZCBmb3IgeW91IApAQCAtNjgsNSArNzIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3b2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOworc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YV9ieV9vaWQoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5ld29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb250X2FsbG93X2R1cGxpY2F0ZXMpOwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9IRUFERVJfQ09NUExFWF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0LmggYi9hZ2VudC9taWJncm91cC9ob3N0LmgKaW5kZXggNGI3ODcwNi4uZThlNjU1OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QuaApAQCAtMiw5ICsyLDE4IEBACiAgKiAgSG9zdCBSZXNvdXJjZXMgJ3dyYXBwZXInIGludGVyZmFjZQogICoJY2FsbHMgdGhlIHBlci1ncm91cCBpbnRlcmZhY2VzIGZyb20gJ2hyXyouaCcKICAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAKIAljb25maWdfcmVxdWlyZShob3N0L2hyX3N5c3RlbSkKLQljb25maWdfcmVxdWlyZShob3N0L2hyX3N0b3JhZ2UpCiAJY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9kZXZpY2UpCiAJY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9vdGhlcikKIAljb25maWdfcmVxdWlyZShob3N0L2hyX3Byb2MpCkBAIC0xMiw5ICsyMSwxMiBAQAogCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfcHJpbnQpCiAJY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9kaXNrKQogCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfcGFydGl0aW9uKQotCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfZmlsZXN5cykKLQljb25maWdfcmVxdWlyZShob3N0L2hyX3N3cnVuKQotCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfc3dpbnN0KQorCisJY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgoaG9zdC9ocl9zdG9yYWdlLCA1LjcsIGhvc3QvaHJoX3N0b3JhZ2UpKQorCWNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKGhvc3QvaHJfZmlsZXN5cywgNS43LCBob3N0L2hyaF9maWxlc3lzKSkKKworCWNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKGhvc3QvaHJfc3dpbnN0LCAgNS42LCBob3N0L2hyU1dJbnN0YWxsZWRUYWJsZSkpCisJY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgoaG9zdC9ocl9zd3J1biwgICA1LjYsIGhvc3QvaHJTV1J1blRhYmxlKSkKIAogLyogYWRkIHRoZSBob3N0IHJlc291cmNlcyBtaWIgdG8gdGhlIGRlZmF1bHQgbWlicyB0byBsb2FkICovCiBjb25maWdfYWRkX21pYihIT1NULVJFU09VUkNFUy1NSUIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWYwNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIHN3aW5zdC5jIDogaHJTV0luc3RhbGxlZFRhYmxlIGRhdGEgYWNjZXNzCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc29mdHdhcmVfaW5zdGFsbGVkLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN3aW5zdF9lbnRyeV9yZW1vdmUsIG5ldHNubXBfdW51c2VkKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgdm9pZCBuZXRzbm1wX3N3aW5zdF9lbnRyeV9mcmVlX2NiKG5ldHNubXBfc3dpbnN0X2VudHJ5ICosIHZvaWQgKik7CisKK2V4dGVybiB2b2lkIG5ldHNubXBfc3dpbnN0X2FyY2hfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG5ldHNubXBfc3dpbnN0X2FyY2hfc2h1dGRvd24odm9pZCk7CitleHRlcm4gaW50IG5ldHNubXBfc3dpbnN0X2FyY2hfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqLCB1X2ludCk7CisKK3ZvaWQgaW5pdF9zd2luc3QoIHZvaWQgKQoreworICAgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCisgICAgREVCVUdNU0dUTCgoInN3aW5zdCIsICJpbml0IGNhbGxlZFxuIikpOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47IC8qIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKworCisgICAgLyoKKyAgICAgKiBjYWxsIGFyY2ggaW5pdCBjb2RlCisgICAgICovCisgICAgbmV0c25tcF9zd2luc3RfYXJjaF9pbml0KCk7Cit9CisKK3ZvaWQgc2h1dGRvd25fc3dpbnN0KCB2b2lkICkKK3sKKyAgICBERUJVR01TR1RMKCgic3dpbnN0IiwgInNodXRkb3duIGNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9zd2luc3RfYXJjaF9zaHV0ZG93bigpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogbG9hZCBhIGNvbnRhaW5lciB3aXRoIGluc3RhbGxlZCBzb2Z0d2FyZS4gSWYgdXNlcl9jb250YWluZXIgaXMgTlVMTCwKKyAqIGEgbmV3IGNvbnRhaW5lciB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgcmV0dXJuZWQsIGFuZCB0aGUgY2FsbGVyCisgKiBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHdoZW4gZG9uZS4KKyAqCisgKiBpZiBmbGFncyBjb250YWlucyBORVRTTk1QX1NXSU5TVF9BTExfT1JfTk9ORSBhbmQgYW55IGVycm9yIG9jY3VycywKKyAqIHRoZSBjb250YWluZXIgd2lsbCBiZSBjb21wbGV0ZWx5IGNsZWFyZWQuCisgKi8KK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqdXNlcl9jb250YWluZXIsIGludCBmbGFncyApCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IHVzZXJfY29udGFpbmVyOworICAgIGludCBhcmNoX3JjOworCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpjb250YWluZXIiLCAibG9hZFxuIikpOworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgdGhlIGNvbnRhaW5lciwgaWYgbmVlZGVkCisgICAgICovCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInN3aW5zdDp0YWJsZV9jb250YWluZXIiKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChOVUxMID09IGNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUpCisgICAgICAgIGNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInN3aW5zdCBjb250YWluZXIiKTsKKworICAgIC8qCisgICAgICogY2FsbCB0aGUgYXJjaCBzcGVjaWZpYyBjb2RlIHRvIGxvYWQgdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIGFyY2hfcmMgPSBuZXRzbm1wX3N3aW5zdF9hcmNoX2xvYWQoIGNvbnRhaW5lciwgZmxhZ3MgKTsKKyAgICBpZiAoYXJjaF9yYyAmJiAoZmxhZ3MgJiBORVRTTk1QX1NXSU5TVF9BTExfT1JfTk9ORSkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY2FsbGVyIGRvZXMgbm90IHdhbnQgYSBwYXJ0aWFsIGxvYWQsIHNvIGVtcHR5IHRoZSBjb250YWluZXIuCisgICAgICAgICAqIGlmIHdlIGNyZWF0ZWQgdGhlIGNvbnRhaW5lciwgZGVzdHJveSBpdC4KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlX2l0ZW1zKGNvbnRhaW5lcik7CisgICAgICAgIGlmIChjb250YWluZXIgIT0gdXNlcl9jb250YWluZXIpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgZmxhZ3MpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK3ZvaWQKK25ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZyZWVfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpjb250YWluZXIiLCAiZnJlZVxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbnRhaW5lciBmb3IgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoISAoZnJlZV9mbGFncyAmIE5FVFNOTVBfU1dJTlNUX0RPTlRfRlJFRV9JVEVNUykpCisgICAgICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlX2l0ZW1zKGNvbnRhaW5lcik7CisKKyAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOworfQorCisvKgorICogZnJlZSBhIHN3aW5zdCBjb250YWluZXIKKyAqLwordm9pZCBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZV9pdGVtcyhuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6Y29udGFpbmVyIiwgImZyZWVfaXRlbXNcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlX2l0ZW1zXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogZnJlZSBhbGwgaXRlbXMuCisgICAgICovCisgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKiluZXRzbm1wX3N3aW5zdF9lbnRyeV9mcmVlX2NiLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgCisgKi8KK25ldHNubXBfc3dpbnN0X2VudHJ5ICoKK25ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZShpbnQzMl90IHN3SW5kZXgpCit7CisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5OworCisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3dpbnN0X2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT5zd0luZGV4ID0gc3dJbmRleDsKKyAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDE7CisgICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gJmVudHJ5LT5zd0luZGV4OworCisgICAgZW50cnktPnN3VHlwZSA9IEhSU1dJTlNUQUxMRURUWVBFX0FQUExJQ0FUSU9OOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCisvKgorICogZnJlZSBhIHJvdworICovCit2b2lkCituZXRzbm1wX3N3aW5zdF9lbnRyeV9mcmVlKG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeSkKK3sKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmVudHJ5OmZyZWUiLCAiaW5kZXggJSIgTkVUU05NUF9QUklvICJ1XG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zd0luZGV4KSk7CisKKyAgICBmcmVlKGVudHJ5KTsKK30KKworLyoKKyAqIGZyZWUgYSByb3cKKyAqLworc3RhdGljIHZvaWQKK25ldHNubXBfc3dpbnN0X2VudHJ5X2ZyZWVfY2IobmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5LCB2b2lkICpjb250ZXh0KQoreworICAgIGZyZWUoZW50cnkpOworfQorCisvKgorICogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlIAorICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1dJTlNUX0VOVFJZX1JFTU9WRQordm9pZAorbmV0c25tcF9zd2luc3RfZW50cnlfcmVtb3ZlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeSkKK3sKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmNvbnRhaW5lciIsICJyZW1vdmVcbiIpKTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLworICAgIENPTlRBSU5FUl9SRU1PVkUoY29udGFpbmVyLCBlbnRyeSk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TV0lOU1RfRU5UUllfUkVNT1ZFICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZmRlZiBURVNUCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNvbnN0IGNoYXIgKnRva2VucyA9IGdldGVudigiU05NUF9ERUJVRyIpOworCisgICAgbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0KCk7CisKKyAgICAvKiogc3dpbnN0LHZlcmJvc2U6c3dpbnN0ICovCisgICAgaWYgKHRva2VucykKKyAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKHRva2Vucyk7CisgICAgZWxzZQorICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoInN3aW5zdCIpOworICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZygxKTsKKworICAgIGluaXRfc3dpbnN0KCk7CisgICAgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2xvYWQoTlVMTCwgMCk7CisgICAgc2h1dGRvd25fc3dpbnN0KCk7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhM2U0NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIHN3aW5zdCBkYXRhIGFjY2VzcyBoZWFkZXIKKyAqCisgKiAkSWQ6IHN3aW5zdC5oIDE1MzQ2IDIwMDYtMDktMjYgMjM6MzQ6NTBaIHJzdG9yeSAkCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9BQ0NFU1NfU1dJTlNUX0NPTkZJR19ICisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NXSU5TVF9DT05GSUdfSAorCisvKgorICogYWxsIHBsYXRmb3JtcyB1c2UgdGhpcyBnZW5lcmljIGNvZGUKKyAqLworY29uZmlnX2V4Y2x1ZGUoaG9zdC9ocl9zd2luc3QpCisKKy8qCisgKiBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbnRlcmZhY2UgY29kZQorICovCisjaWYgICBkZWZpbmVkKCBkYXJ3aW4gKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2RhcndpbikKKyNlbGlmIGRlZmluZWQoIEhBVkVfRFBLR19RVUVSWSApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfYXB0KQorI2VsaWYgZGVmaW5lZCggSEFWRV9MSUJSUE0gKSAmJiBkZWZpbmVkKCBsaW51eCApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtKQorI2VsaWYgZGVmaW5lZCggSEFWRV9QS0dMT0NTX0ggKSB8fCBkZWZpbmVkKCBocHV4OSApIHx8IGRlZmluZWQoIGhwdXgxMCApIHx8IGRlZmluZWQoIGhwdXgxMSApIHx8IGRlZmluZWQoIGZyZWVic2QyICkgfHwgZGVmaW5lZCggbGludXggKSB8fCBkZWZpbmVkKCBvcGVuYnNkICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvKQorI2Vsc2UKKyAgICBjb25maWdfd2FybmluZyhUaGlzIHBsYXRmb3JtIGRvZXMgbm90IHlldCBzdXBwb3J0IGhyU1dJbnN0YWxsZWRUYWJsZSByZXdyaXRlcykKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9udWxsKQorI2VuZGlmCisKK3ZvaWQgaW5pdF9zd2luc3QoIHZvaWQgKTsKK3ZvaWQgc2h1dGRvd25fc3dpbnN0KCB2b2lkICk7CisKKyNlbmRpZiAvKiBORVRTTk1QX0FDQ0VTU19TV0lOU1RfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2FwdC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfYXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2MDZkMgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2FwdC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogc3dpbnN0X3JwbS5jOgorICogICAgIGhyU1dJbnN0YWxsZWRUYWJsZSBkYXRhIGFjY2VzczoKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oPgorCitjaGFyIHBrZ19kaXJlY3RvcnlbU05NUF9NQVhCVUZdOworc3RhdGljIGNoYXIgYXB0X2ZtdFtTTk1QX01BWEJVRl07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX2luaXQodm9pZCkKK3sKKyAgICBzdHJsY3B5KHBrZ19kaXJlY3RvcnksICIvdmFyL2xpYi9kcGtnL2luZm8iLCBzaXplb2YocGtnX2RpcmVjdG9yeSkpOworICAgIHNucHJpbnRmKGFwdF9mbXQsIFNOTVBfTUFYQlVGLCAiJSUlZFteI10jJSUlZFteI10jJSUlZFteI10jJSUlZFteI10jJSUlZFteI10jJSUlZHMiLAorCVNOTVBfTUFYQlVGLTEsIFNOTVBfTUFYQlVGLTEsIFNOTVBfTUFYQlVGLTEsCisJU05NUF9NQVhCVUYtMSwgU05NUF9NQVhCVUYtMSwgU05NUF9NQVhCVUYtMSk7Cit9CisKK3ZvaWQKK25ldHNubXBfc3dpbnN0X2FyY2hfc2h1dGRvd24odm9pZCkKK3sKKyAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfc3dpbnN0X2FyY2hfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgRklMRSAqcCA9IHBvcGVuKCJkcGtnLXF1ZXJ5IC0tc2hvdyAtLXNob3dmb3JtYXQgJyR7UGFja2FnZX0jJHtWZXJzaW9ufSMke1NlY3Rpb259IyR7UHJpb3JpdHl9IyR7RXNzZW50aWFsfSMke1N0YXR1c31cbiciLCAiciIpOworICAgIGNoYXIgcGFja2FnZVtTTk1QX01BWEJVRl07CisgICAgY2hhciB2ZXJzaW9uW1NOTVBfTUFYQlVGXTsKKyAgICBjaGFyIHNlY3Rpb25bU05NUF9NQVhCVUZdOworICAgIGNoYXIgcHJpb3JpdHlbU05NUF9NQVhCVUZdOworICAgIGNoYXIgZXNzZW50aWFsW1NOTVBfTUFYQlVGXTsKKyAgICBjaGFyIHN0YXR1c1tTTk1QX01BWEJVRl07CisgICAgY2hhciBidWZbQlVGU0laXTsKKyAgICBuZXRzbm1wX3N3aW5zdF9lbnRyeSAqZW50cnk7CisgICAgaW50IGkgPSAwOworCisgICAgaWYgKHAgPT0gTlVMTCkgeworCXNubXBfcGVycm9yKCJkcGtnLWxpc3QiKTsKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgICB3aGlsZSAoZmdldHMoYnVmLCBCVUZTSVosIHApKSB7CisJREVCVUdNU0coKCJzd2luc3RfYXB0IiwgImVudHJ5OiAlc1xuIiwgYnVmKSk7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd2luc3RfZW50cnlfY3JlYXRlKCBpKysgKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisJc3NjYW5mKGJ1ZiwgYXB0X2ZtdCwgcGFja2FnZSwgdmVyc2lvbiwgc2VjdGlvbiwgcHJpb3JpdHksIGVzc2VudGlhbCwgc3RhdHVzKTsKKwlpZiAoc3Ryc3RyKHN0YXR1cywgIm5vdC1pbnN0YWxsZWQiKSkKKwkgICAgY29udGludWU7CisKKyAgICAgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzbnByaW50ZiggZW50cnktPnN3TmFtZSwgc2l6ZW9mKGVudHJ5LT5zd05hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMtJXMiLCBwYWNrYWdlLCB2ZXJzaW9uKTsKKwlpZiAoZW50cnktPnN3TmFtZV9sZW4gPj0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpKQorCSAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNpemVvZihlbnRyeS0+c3dOYW1lKS0xOworICAgICAgICBlbnRyeS0+c3dUeXBlID0gKHN0cmNtcChlc3NlbnRpYWwsICJ5ZXMiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAgICAgLyogb3BlcmF0aW5nU3lzdGVtICovCisgICAgICAgICAgICAgICAgICAgICAgICA6IDQ7ICAgICAvKiAgYXBwbGljYXRpb24gICAgKi8KKworICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IDg7CisJbWVtY3B5KGVudHJ5LT5zd0RhdGUsICJcMFwwXDFcMVwwXDBcMFwwIiwgOCk7CisgICAgfQorICAgIHBjbG9zZShwKTsKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICAoaW50KSBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfZGFyd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0NzM3MgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogc3dpbnN0LmMgOiBoclNXSW5zdGFsbGVkVGFibGUgZGF0YSBhY2Nlc3MKKyAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNkZWZpbmUgX19BUFBMRV9BUElfRVZPTFZJTkcgMQorI2luY2x1ZGUgPHN5cy9hY2wuaD4gLyogb3IgZWxzZSBDb3JlRm91bmRhdGlvbi5oIGJhcmZzICovCisjdW5kZWYgX19BUFBMRV9BUElfRVZPTFZJTkcgCisKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZGlyZWN0b3J5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGF0ZV9uX3RpbWUpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW50IF9hZGRfYXBwbGljYXRpb25zX2luX2RpcihuZXRzbm1wX2NvbnRhaW5lciAqLCBjb25zdCBjaGFyKiBwYXRoKTsKK3N0YXRpYyBpbnQzMl90IF9pbmRleDsKK3N0YXRpYyBpbnQgX2NoZWNrX2J1bmRsZWRfYXBwKENGVVJMUmVmIGN1cnJlbnRVUkwsIENGU3RyaW5nUmVmICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgKmluZm8sIGNvbnN0IGNoYXIqIHBhdGgpOworc3RhdGljIGludCBfY2hlY2tfY2xhc3NpY19hcHAoQ0ZVUkxSZWYgY3VycmVudFVSTCwgQ0ZTdHJpbmdSZWYgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiAqaW5mbywgY29uc3QgY2hhciogcGF0aCk7CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKmRpcnMgPSBOVUxMOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9pbml0KCB2b2lkICkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsKKyAgICBjb25zdCBjaGFyICpkZWZhdWx0X2RpcnNbXSA9IHsKKyAgICAgICAgIi9BcHBsaWNhdGlvbnMiLAorICAgICAgICAiL0FwcGxpY2F0aW9ucyAoTWFjIE9TIDkpIiwKKyAgICAgICAgIi9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMiLAorICAgICAgICAiL1N5c3RlbS9MaWJyYXJ5L0V4dGVuc2lvbnMiLAorICAgICAgICAiL1N5c3RlbS9MaWJyYXJ5L1NlcnZpY2VzIgorI2lmZGVmIFRFU1QKKyAgICAgICAgLCAiL0RldmVsb3Blci9BcHBsaWNhdGlvbnMiCisgICAgICAgICwgIi9Wb2x1bWVzL2F1ZFgvQXBwbGljYXRpb25zIChNYWMgT1MgOSkiCisjZW5kaWYKKyAgICB9OworICAgIGludCBpLCBjb3VudCA9IHNpemVvZihkZWZhdWx0X2RpcnMpL3NpemVvZihkZWZhdWx0X2RpcnNbMF0pOworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgdGhlIGNvbnRhaW5lciwgaWYgbmVlZGVkCisgICAgICovCisgICAgaWYgKE5VTEwgPT0gZGlycykgeworICAgICAgICBkaXJzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZGlyZWN0b3J5X2NvbnRhaW5lcjpjc3RyaW5nIik7CisgICAgICAgIGlmIChOVUxMID09IGRpcnMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBhbGxvY2F0ZSBjb250YWluZXIgZm9yIGRpciBsaXN0XG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkaXJzLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiZGlyZWN0b3J5IHNlYXJjaCBsaXN0Iik7CisgICAgICAgIG5ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0KGRpcnMsIDEsIENPTlRBSU5FUl9LRVlfVU5TT1JURUQpOworICAgIH0KKworICAgIC8qCisgICAgICogYWRkIGRpcnMKKyAgICAgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGNoYXIgKiAgICAgIHRtcDsKKyAgICAgICAgLyoqIHh4eDogZ2V0L3NhdmUgdGhlIGxhc3QgbW9kIGRhdGU/ICovCisgICAgICAgIGlmKC0xID09IHN0YXQoZGVmYXVsdF9kaXJzW2ldLCAmc3RhdF9idWYpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgInNraXBwaW5nIGRpciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfZGlyc1tpXSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJhZGRpbmcgZGlyICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9kaXJzW2ldKSk7CisgICAgICAgIHRtcCA9IHN0cmR1cChkZWZhdWx0X2RpcnNbaV0pOworICAgICAgICBpZiAoTlVMTCA9PSB0bXApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsInN0cmR1cCBmYWlsZWRcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChkaXJzLCB0bXApOworICAgIH0KK30KKwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9zaHV0ZG93biggdm9pZCApCit7CisgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoZGlycyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK2ludAorbmV0c25tcF9zd2luc3RfYXJjaF9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyApCit7CisgICAgbmV0c25tcF9pdGVyYXRvciAgICppdDsKKyAgICBjb25zdCBjaGFyICAgICAgICAgKmRpcjsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJsb2FkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBkaXJzKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAibm8gZGlycyB0byBzY2FuIVxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgX2luZGV4ID0gMDsKKyAgICAKKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihkaXJzKTsKKyAgICBmb3IgKGRpciA9IElURVJBVE9SX0ZJUlNUKGl0KTsgZGlyOyBkaXIgPSBJVEVSQVRPUl9ORVhUKGl0KSkgeworICAgICAgICByYyA9IF9hZGRfYXBwbGljYXRpb25zX2luX2Rpcihjb250YWluZXIsIGRpcik7CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAibG9hZGVkICVkIGFwcHNcbiIsX2luZGV4KSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK19kdW1wX2ZsYWdzKHVfbG9uZyBmbGFncykKK3sKKyAgICBzdGF0aWMgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhcipuYW1lOworICAgICAgICB1X2xvbmcgYml0czsKKyAgICB9IG5hbWVzW10gPSB7CisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNQbGFpbkZpbGUiLCAweDAwMDAwMDAxIH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNQYWNrYWdlIiwgMHgwMDAwMDAwMiB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzQXBwbGljYXRpb24iLCAweDAwMDAwMDA0IH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNDb250YWluZXIiLCAweDAwMDAwMDA4IH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNBbGlhc0ZpbGUiLCAweDAwMDAwMDEwIH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNTeW1saW5rIiwgMHgwMDAwMDAyMCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzSW52aXNpYmxlIiwgMHgwMDAwMDA0MCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzTmF0aXZlQXBwIiwgMHgwMDAwMDA4MCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzQ2xhc3NpY0FwcCIsIDB4MDAwMDAxMDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9BcHBQcmVmZXJzTmF0aXZlIiwgMHgwMDAwMDIwMCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0FwcFByZWZlcnNDbGFzc2ljIiwgMHgwMDAwMDQwMCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0FwcElzU2NyaXB0YWJsZSIsIDB4MDAwMDA4MDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9Jc1ZvbHVtZSIsIDB4MDAwMDEwMDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9FeHRlbnNpb25Jc0hpZGRlbiIsIDB4MDAxMDAwMDAgfQorICAgIH07CisgICAgaW50IGksIGNvdW50ID0gc2l6ZW9mKG5hbWVzKS9zaXplb2YobmFtZXNbMF0pOworCisgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAoZmxhZ3MgJiBuYW1lc1tpXS5iaXRzKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luOmZsYWdzIiwgIlx0JXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzW2ldLm5hbWUpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludAorX2FkZF9hcHBsaWNhdGlvbnNfaW5fZGlyKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgICpmaWxlczsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgKml0OworICAgIGNvbnN0IGNoYXIgICAgICAgICAqZmlsZTsKKyAgICBuZXRzbm1wX3N3aW5zdF9lbnRyeSAqZW50cnkgPSBOVUxMOworICAgIHN0cnVjdCBzdGF0CSAgICAgICAgc3RhdF9idWY7CisgICAgc2l6ZV90ICAgICAgICAgICAgICBkYXRlX2xlbjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgKmRhdGVfYnVmOworICAgIGludCAgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgQ0ZTdHJpbmdSZWYgICAgICAgICBjdXJyZW50UGF0aCA9IE5VTEw7CisgICAgQ0ZVUkxSZWYgICAgICAgICAgICBjdXJyZW50VVJMID0gTlVMTDsKKyAgICBMU0l0ZW1JbmZvUmVjb3JkICAgIGl0ZW1JbmZvUmVjb3JkOworICAgIENGU3RyaW5nUmVmICAgICAgICAgcHJvZE5hbWUgPSBOVUxMOworICAgIENGU3RyaW5nUmVmICAgICAgICAgdmVyc2lvbiA9IE5VTEw7CisgICAgCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICIgYWRkaW5nIGZpbGVzIGZyb20gJXNcbiIsIHBhdGgpKTsKKyAgICBmaWxlcyA9IG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkKE5VTEwsIHBhdGgsIDApOworICAgIGlmIChOVUxMID09IGZpbGVzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzd2luc3Q6IGNvdWxkIG5vdCByZWFkIGRpcmVjdG9yeSAlc1xuIiwgcGF0aCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihmaWxlcyk7CisgICAgaWYgKE5VTEwgPT0gaXQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaXRlcmF0b3JcbiIpOworICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfZnJlZShmaWxlcyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yIChmaWxlID0gSVRFUkFUT1JfRklSU1QoaXQpOworICAgICAgICAgZmlsZTsKKyAgICAgICAgIGZpbGUgPSBJVEVSQVRPUl9ORVhUKGl0KSwKKyAgICAgICAgICAgICBDRlJlbGVhc2UoY3VycmVudFBhdGgpLAorICAgICAgICAgICAgIENGUmVsZWFzZShjdXJyZW50VVJMKSkgeworCisgICAgICAgIGludCAgICAgICAgICAgICAgICAgcmMyID0gMDsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRQYXRoID0KKyAgICAgICAgICAgIENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmdOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGU3RyaW5nRW5jb2RpbmdVVEY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0ZBbGxvY2F0b3JOdWxsKTsKKyAgICAgICAgY3VycmVudFVSTCA9CisgICAgICAgICAgICBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjdXJyZW50UGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCB0cnVlKTsgCisgICAgICAgIExTQ29weUl0ZW1JbmZvRm9yVVJMKGN1cnJlbnRVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMU1JlcXVlc3RCYXNpY0ZsYWdzT25seXxrTFNSZXF1ZXN0QXBwVHlwZUZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlbUluZm9SZWNvcmQpOyAKKyAgICAgICAgaWYoKDAgPT0gaXRlbUluZm9SZWNvcmQuZmxhZ3MpIHx8CisgICAgICAgICAgIChrTFNJdGVtSW5mb0lzUGxhaW5GaWxlID09IGl0ZW1JbmZvUmVjb3JkLmZsYWdzKSB8fAorICAgICAgICAgICAoaXRlbUluZm9SZWNvcmQuZmxhZ3MgJiBrTFNJdGVtSW5mb0lzSW52aXNpYmxlKSB8fAorICAgICAgICAgICAoaXRlbUluZm9SZWNvcmQuZmxhZ3MgJiBrTFNJdGVtSW5mb0lzQWxpYXNGaWxlKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyoqIHJlY3Vyc2Ugb24gbm9uLWFwcGxpY2F0aW9uIGNvbnRhaW5lcnMgKGkuZS4gZGlyZWN0b3J5KSAqLworICAgICAgICBpZiAoKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0NvbnRhaW5lcikgJiYKKyAgICAgICAgICAgICghKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0FwcGxpY2F0aW9uKSkpIHsKKyAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkKGZpbGVzLCBmaWxlLCAwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgIH0KKworICAgICAgICAvKiogc2tpcCBhbnkgb3RoZXIgbm9uLWFwcGxpY2F0aW9uIGZpbGVzICovCisgICAgICAgIGlmICghKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0FwcGxpY2F0aW9uKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgfQorCisgICAgICAgIGlmICgoaXRlbUluZm9SZWNvcmQuZmxhZ3MgJiBrTFNJdGVtSW5mb0lzUGFja2FnZSkgfHwgICAgICAgICAgIAorICAgICAgICAgICAgKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0NvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIHJjMiA9IF9jaGVja19idW5kbGVkX2FwcChjdXJyZW50VVJMLCAmcHJvZE5hbWUsICZ2ZXJzaW9uLCBmaWxlKTsKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSBpZiAoKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0NsYXNzaWNBcHApIHx8CisgICAgICAgICAgICAgICAgIChpdGVtSW5mb1JlY29yZC5mbGFncyAmIGtMU0l0ZW1JbmZvSXNQbGFpbkZpbGUpKSB7CisgICAgICAgICAgICByYzIgPSBfY2hlY2tfY2xhc3NpY19hcHAoY3VycmVudFVSTCwgJnByb2ROYW1lLCAmdmVyc2lvbiwgZmlsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJzd2luc3Qgc2hvdWxkbid0IGdldCBoZXJlOiAlc1xuIiwgZmlsZSk7CisgICAgICAgICAgICBfZHVtcF9mbGFncyhpdGVtSW5mb1JlY29yZC5mbGFncyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMyKSB7IC8qIG5vdCBhbiBhcHAuIGlmIGRpcmVjdG9yeSwgcmVjdXJzZTsgZWxzZSBjb250aW51ZSAqLworICAgICAgICAgICAgX2R1bXBfZmxhZ3MoaXRlbUluZm9SZWNvcmQuZmxhZ3MpOworICAgICAgICAgICAgaWYgKDEgPT0gcmMyKQorICAgICAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkKGZpbGVzLCBmaWxlLCAwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBhbGxvY2F0ZSBlbnRyeQorICAgICAgICAgKi8KKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3aW5zdF9lbnRyeV9jcmVhdGUoKytfaW5kZXgpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIHN3aW5zdCBlbnRyeVxuIik7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgU05NUF9DRlJlbGVhc2UocHJvZE5hbWUpOworICAgICAgICAgICAgU05NUF9DRlJlbGVhc2UodmVyc2lvbik7CisgICAgICAgICAgICBDRlJlbGVhc2UoY3VycmVudFBhdGgpOworICAgICAgICAgICAgQ0ZSZWxlYXNlKGN1cnJlbnRVUkwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+c3dOYW1lX2xlbiA9CisgICAgICAgICAgICBzbnByaW50ZihlbnRyeS0+c3dOYW1lLCBzaXplb2YoZW50cnktPnN3TmFtZSksCisgICAgICAgICAgICAgICAgICAgICAiJXMgJXMiLCBDRlN0cmluZ0dldENTdHJpbmdQdHIocHJvZE5hbWUsMCksCisgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ0dldENTdHJpbmdQdHIodmVyc2lvbiwwKSk7CisJaWYgKGVudHJ5LT5zd05hbWVfbGVuID49IHNpemVvZihlbnRyeS0+c3dOYW1lKSkKKwkgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzaXplb2YoZW50cnktPnN3TmFtZSktMTsKKworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIlx0JXMgJXNcbiIsIGZpbGUsIGVudHJ5LT5zd05hbWUpKTsKKworICAgICAgICAvKiogZ2V0IHRoZSBsYXN0IG1vZCBkYXRlICovCisgICAgICAgIGlmKHN0YXQoZmlsZSwgJnN0YXRfYnVmKSAhPSAtMSkgeworICAgICAgICAgICAgZGF0ZV9idWYgPSBkYXRlX25fdGltZSgmc3RhdF9idWYuc3RfbXRpbWUsICZkYXRlX2xlbik7CisgICAgICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IGRhdGVfbGVuOworICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5zd0RhdGUsIGRhdGVfYnVmLCBlbnRyeS0+c3dEYXRlX2xlbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgICAgIGVudHJ5ID0gTlVMTDsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UocHJvZE5hbWUpOworICAgICAgICBTTk1QX0NGUmVsZWFzZSh2ZXJzaW9uKTsKKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdCk7CisgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoZmlsZXMpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitfY2hlY2tfYnVuZGxlZF9hcHAoQ0ZVUkxSZWYgY3VycmVudFVSTCwgQ0ZTdHJpbmdSZWYgKnByb2ROYW1lLAorICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmICp2ZXJzaW9uLCBjb25zdCBjaGFyKiBmaWxlKQoreworICAgIENGQnVuZGxlUmVmICAgICAgICAgdGhlQnVuZGxlID0gTlVMTDsKKyAgICBDRkRpY3Rpb25hcnlSZWYgICAgIGluZm9EaWN0ID0gTlVMTDsKKyAgICAgICAgICAgIAorICAgIGlmICgoTlVMTCA9PSBwcm9kTmFtZSkgfHwgKE5VTEwgPT0gdmVyc2lvbikpCisgICAgICAgcmV0dXJuIC0xOworCisgICAgdGhlQnVuZGxlID0gQ0ZCdW5kbGVDcmVhdGUgKGtDRkFsbG9jYXRvckRlZmF1bHQsIGN1cnJlbnRVUkwpOworICAgIGlmKHRoZUJ1bmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7IC8qIG5vdCBhIGJ1bmRsZSAqLworCisgICAgaW5mb0RpY3QgPSBDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5KHRoZUJ1bmRsZSk7CisgICAgaWYoMCA9PSBDRkRpY3Rpb25hcnlHZXRDb3VudChpbmZvRGljdCkpIHsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UodGhlQnVuZGxlKTsKKyAgICAgICAgcmV0dXJuIDE7IC8qIGRpcmVjdG9yeSAqLworICAgIH0KKworICAgICpwcm9kTmFtZSA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUgKGluZm9EaWN0LCBDRlNUUigiQ0ZCdW5kbGVOYW1lIikpOworICAgIGlmIChOVUxMID09ICpwcm9kTmFtZSkgeworICAgICAgICAqcHJvZE5hbWUgPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgICAgICBDRkRpY3Rpb25hcnlHZXRWYWx1ZSAoaW5mb0RpY3QsIENGU1RSKCJDRkJ1bmRsZURpc3BsYXlOYW1lIikpOworICAgICAgICBpZiAoTlVMTCA9PSAqcHJvZE5hbWUpIHsKKyAgICAgICAgICAgICpwcm9kTmFtZSA9IChDRlN0cmluZ1JlZikgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUgKGluZm9EaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlNUUigiQ0ZCdW5kbGVFeGVjdXRhYmxlIikpOworICAgICAgICB9CisgICAgfQorICAgIGlmKE5VTEwgPT0gKnByb2ROYW1lKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAiXHRtaXNzaW5nIG5hbWU6ICVzXG4iLGZpbGUpKTsKKyAgICAgICAgLypDRlNob3coaW5mb0RpY3QpOyovCisgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKHRoZUJ1bmRsZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAqdmVyc2lvbiA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUgKGluZm9EaWN0LCBDRlNUUigiQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmciKSk7CisgICAgaWYoTlVMTCA9PSAqdmVyc2lvbikgeworICAgICAgICAqdmVyc2lvbiA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlIChpbmZvRGljdCwgQ0ZTVFIoIkNGQnVuZGxlVmVyc2lvbiIpKTsKKyAgICAgICAgaWYgKCp2ZXJzaW9uID09IE5VTEwpIAorICAgICAgICAgICAgKnZlcnNpb24gPSAoQ0ZTdHJpbmdSZWYpIENGRGljdGlvbmFyeUdldFZhbHVlIChpbmZvRGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTVFIoIkNGQnVuZGxlR2V0SW5mb1N0cmluZyIpKTsKKyAgICB9CisgICAgaWYoTlVMTCA9PSAqdmVyc2lvbikgeworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIlx0bWlzc2luZyB2ZXJzaW9uOiAlc1xuIixmaWxlKSk7CisgICAgICAgIC8qQ0ZTaG93KGluZm9EaWN0KTsqLworICAgICAgICBTTk1QX0NGUmVsZWFzZSh0aGVCdW5kbGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIGlmKHRoZUJ1bmRsZSAhPSBOVUxMKSB7CisgICAgICAgIENGUmV0YWluKCpwcm9kTmFtZSk7CisgICAgICAgIENGUmV0YWluKCp2ZXJzaW9uKTsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UodGhlQnVuZGxlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19jaGVja19jbGFzc2ljX2FwcChDRlVSTFJlZiBjdXJyZW50VVJMLCBDRlN0cmluZ1JlZiAqcHJvZE5hbWUsCisgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgKnZlcnNpb24sIGNvbnN0IGNoYXIqIGZpbGUpCit7CisgICAgLyoKKyAgICAgKiBnZXQgaW5mbyBmb3IgY2xhc3NpYyBvciBzaW5nbGUtZmlsZSBhcHBzCisgICAgICovCisgICAgRlNSZWYgdGhlRlNSZWY7CisgICAgaW50IHRoZVJlc0ZpbGU7CisKKyAgICBpZiAoKE5VTEwgPT0gcHJvZE5hbWUpIHx8IChOVUxMID09IHZlcnNpb24pKQorICAgICAgIHJldHVybiAtMTsKKworICAgICpwcm9kTmFtZSA9IENGVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KGN1cnJlbnRVUkwpOworICAgIGlmICghIENGVVJMR2V0RlNSZWYoY3VycmVudFVSTCwgJnRoZUZTUmVmKSkgeworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIkdldEZTUmVmIGZhaWxlZDogJXNcbiIsIGZpbGUpKTsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UoKnByb2ROYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB0aGVSZXNGaWxlID0gRlNPcGVuUmVzRmlsZSgmdGhlRlNSZWYsIGZzUmRQZXJtKTsKKyAgICBpZiAoUmVzRXJyb3IoKSAhPSBub0VycikgeworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIkZTT3BlblJlc0ZpbGUgZmFpbGVkOiAlc1xuIiwgZmlsZSkpOworICAgICAgICBTTk1QX0NGUmVsZWFzZSgqcHJvZE5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFZlcnNSZWNIbmRsIHZlcnNIYW5kbGUgPSAoVmVyc1JlY0huZGwpR2V0MUluZFJlc291cmNlKCd2ZXJzJywgMSk7CisgICAgaWYgKHZlcnNIYW5kbGUgIT0gTlVMTCkgeworICAgICAgICAqdmVyc2lvbiA9IENGU3RyaW5nQ3JlYXRlV2l0aFBhc2NhbFN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAoKip2ZXJzSGFuZGxlKS5zaG9ydFZlcnNpb24sIGtDRlN0cmluZ0VuY29kaW5nTWFjUm9tYW4pOworICAgICAgICBpZiAoKnZlcnNpb24gPT0gTlVMTCkgeworICAgICAgICAgICAgU3RyaW5nUHRyIGxvbmdWZXJzaW9uUHRyID0gKCoqdmVyc0hhbmRsZSkuc2hvcnRWZXJzaW9uOworICAgICAgICAgICAgbG9uZ1ZlcnNpb25QdHIgPSAoU3RyaW5nUHRyKSgoKFB0cikgbG9uZ1ZlcnNpb25QdHIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKyAoKHVuc2lnbmVkIGNoYXIpICpsb25nVmVyc2lvblB0cikpOworICAgICAgICAgICAgKnZlcnNpb24gPSBDRlN0cmluZ0NyZWF0ZVdpdGhQYXNjYWxTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ1ZlcnNpb25QdHIsICBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuKTsKKyAgICAgICAgfQorICAgICAgICBSZWxlYXNlUmVzb3VyY2UoKEhhbmRsZSl2ZXJzSGFuZGxlKTsKKyAgICB9CisgICAgQ2xvc2VSZXNGaWxlKHRoZVJlc0ZpbGUpOworICAgIGlmKCp2ZXJzaW9uID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsCisgICAgICAgICAgICAgICAgICAgICJcdG1pc3NpbmcgY2xhc3NpYy9maWxlIHZlcnNpb246ICVzXG4iLCBmaWxlKSk7CisgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKCpwcm9kTmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGY5MTU4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfbnVsbC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBzd2luc3RfbnVsbC5jOgorICogICAgIGhyU1dJbnN0YWxsZWRUYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBkdW1teSBpbnRlcmZhY2UgZm9yIG5vbi1zdXBwb3J0ZWQgc3lzdGVtcworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX2luaXQodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuOworfQorCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX3NodXRkb3duKHZvaWQpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9zd2luc3RfYXJjaF9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpsb2FkOmFyY2giLCIgbG9hZGVkICUiIE5FVFNOTVBfUFJJeiAiZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjJjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBzd2luc3RfcGtnaW5mby5jOgorICogICAgIGhyU1dJbnN0YWxsZWRUYWJsZSBkYXRhIGFjY2VzczoKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUEtHTE9DU19ICisjaW5jbHVkZSA8cGtnbG9jcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9QS0dJTkZPX0gKKyNpbmNsdWRlIDxwa2dpbmZvLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUEtHX0gKKyNkZWZpbmUgcmVzdHJpY3QKKyNpbmNsdWRlIDxwa2cuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRhdGVfbl90aW1lKQorCisgICAvKgorICAgICogTG9jYXRpb24gb2YgcGFja2FnZSBkaXJlY3RvcnkuCisgICAgKiBVc2VkIGZvcjoKKyAgICAqICAgIC0gcmVwb3J0aW5nIGhyU1dJbnN0YWxsZWRMYXN0KiBvYmplY3RzCisgICAgKiAgICAtIGRldGVjdGluZyB3aGVuIHRoZSBjYWNoZWQgY29udGVudHMgYXJlIG91dCBvZiBkYXRlLgorICAgICovCitjaGFyIHBrZ19kaXJlY3RvcnlbU05NUF9NQVhQQVRIXTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfc3dpbnN0X2FyY2hfaW5pdCh2b2lkKQoreworI2lmIGRlZmluZWQoUEtHTE9DKQorICAgIHNucHJpbnRmKCBwa2dfZGlyZWN0b3J5LCBTTk1QX01BWFBBVEgsICIlcyIsIFBLR0xPQyApOworI2VsaWYgZGVmaW5lZChocHV4OSkKKyAgICBzbnByaW50ZiggcGtnX2RpcmVjdG9yeSwgU05NUF9NQVhQQVRILCAiL3N5c3RlbSIgKTsKKyNlbGlmIGRlZmluZWQoaHB1eDEwKSB8fCAgZGVmaW5lZChocHV4MTEpIAorICAgIHNucHJpbnRmKCBwa2dfZGlyZWN0b3J5LCBTTk1QX01BWFBBVEgsICIvdmFyL2FkbS9zdy9wcm9kdWN0cyIgKTsKKyNlbGlmIGRlZmluZWQoZnJlZWJzZDIpIHx8IGRlZmluZWQob3BlbmJzZCkKKyAgICBzbnByaW50ZiggcGtnX2RpcmVjdG9yeSwgU05NUF9NQVhQQVRILCAiL3Zhci9kYi9wa2ciICk7CisjZWxpZiBkZWZpbmVkKGxpbnV4KQorICAgIHNucHJpbnRmKCBwa2dfZGlyZWN0b3J5LCBTTk1QX01BWFBBVEgsICIvdmFyL2NhY2hlL2hybWliIiApOworI2Vsc2UKKyAgICBwa2dfZGlyZWN0b3J5WzBdID0gJ1wwJzsKKyAgICBzbm1wX2xvZyggTE9HX0VSUiwgIlNXSW5zdDogTm8gcGFja2FnZSBkaXJlY3RvcnlcbiIgKTsKKyNlbmRpZgorCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDppbml0OmFyY2giLCIgcGFja2FnZSBkaXJlY3RvcnkgPSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnX2RpcmVjdG9yeSkpOworICAgIHJldHVybjsKK30KKwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9zaHV0ZG93bih2b2lkKQoreworICAgIHBrZ19kaXJlY3RvcnlbMF0gPSAnXDAnOworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9zd2luc3RfYXJjaF9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAgICAqZDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAgICAqZHA7CisgICAgc3RydWN0IHN0YXQgICAgICAgICAgIHN0YXRfYnVmOworI2lmZGVmIEhBVkVfUEtHSU5GTworICAgIGNoYXIgICAgICAgICAgICAgICAgICp2LCAqYzsKKyNlbmRpZgorICAgIGNoYXIgICAgICAgICAgICAgICAgICBidWZbIEJVRlNJWiBdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICpjcDsKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgaW5zdGFsbF90aW1lOworICAgIHNpemVfdCAgICAgICAgICAgICAgICBkYXRlX2xlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgaSA9IDE7CisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5OworI2lmZGVmIEhBVkVfTElCUEtHCisgICAgc3RydWN0IHBrZ2RiICpkYiA9IE5VTEw7CisgICAgc3RydWN0IHBrZ2RiX2l0ICppdCA9IE5VTEw7CisgICAgc3RydWN0IHBrZyAqcGtnID0gTlVMTDsKKyAgICBjaGFyIHBrZ25hbWVbIFNOTVBfTUFYUEFUSCBdOworICAgIGNoYXIgcGtnZGF0ZVsgQlVGU0laIF07CisgICAgaW50IHBrZ25nID0gMDsKKworICAgIGlmIChwa2dfaW5pdChOVUxMLCBOVUxMKSkgeworICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgIlNXSW5zdDogZXJyb3IgaW5pdGlhbGl6aW5nIHBrZ25nIGRiXG4iICk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChwa2dkYl9vcGVuKCZkYiwgUEtHREJfREVGQVVMVCkgIT0gRVBLR19PSykgeworCXNubXBfbG9nKCBMT0dfRVJSLCAiU1dJbnN0OiBlcnJvciBvcGVuaW5nIHBrZ25nIGRiXG4iICk7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYgKHBrZ19zdGF0dXMoTlVMTCkgPT0gUEtHX1NUQVRVU19BQ1RJVkUpIHsKKwlwa2duZyA9IDE7CisgICAgfSBlbHNlIHsKKwlzbm1wX2xvZyggTE9HX0lORk8sICJTV0luc3Q6IG5vdCBhIHBrZ25nIHN5c3RlbVxuIiApOworICAgIH0KKworICAgIC8qIGlmIHdlIGFyZSB1c2luZyBGcmVlQlNEJ3MgcGtnbmcgKi8KKyAgICBpZiAocGtnbmcpIHsKKyAgICAgICAgaWYgKChpdCA9IHBrZ2RiX3F1ZXJ5KGRiLCBOVUxMLCBNQVRDSF9BTEwpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgIlNXSW5zdDogZXJyb3IgcXVlcnlpbmcgcGtnbmcgZGJcbiIgKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKHBrZ2RiX2l0X25leHQoaXQsICZwa2csIFBLR19MT0FEX0JBU0lDKSA9PSBFUEtHX09LKSB7CisgICAgICAgICAgICBwa2dfc25wcmludGYocGtnbmFtZSwgc2l6ZW9mKHBrZ25hbWUpLCAiJW4tJXYiLCBwa2csIHBrZyk7CisgICAgICAgICAgICBwa2dfc25wcmludGYocGtnZGF0ZSwgc2l6ZW9mKHBrZ2RhdGUpLCAiJXQiLCBwa2cpOworCisgICAgICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZSggaSsrICk7CisKKyAgICAgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgICAgIGVudHJ5LT5zd05hbWVfbGVuID0gc25wcmludGYoIGVudHJ5LT5zd05hbWUsIHNpemVvZihlbnRyeS0+c3dOYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHBrZ25hbWUgKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+c3dOYW1lX2xlbiA+PSBzaXplb2YoZW50cnktPnN3TmFtZSkpCisgICAgICAgICAgICAgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzaXplb2YoZW50cnktPnN3TmFtZSktMTsKKworICAgICAgICAgICAgaW5zdGFsbF90aW1lID0gYXRvaShwa2dkYXRlKTsKKyAgICAgICAgICAgIGNwID0gZGF0ZV9uX3RpbWUoICZpbnN0YWxsX3RpbWUsICZkYXRlX2xlbiApOworICAgICAgICAgICAgbWVtY3B5KCBlbnRyeS0+c3dEYXRlLCBjcCwgZGF0ZV9sZW4gKTsKKyAgICAgICAgICAgIGVudHJ5LT5zd0RhdGVfbGVuID0gZGF0ZV9sZW47CisgICAgICAgIH0KKworICAgICAgICBwa2dkYl9pdF9mcmVlKGl0KTsKKyAgICAgICAgcGtnZGJfY2xvc2UoZGIpOworICAgICAgICBwa2dfc2h1dGRvd24oKTsKKyAgICB9IGVsc2UgeworI2VuZGlmIC8qIEhBVkVfTElCUEtHICovCisgICAgICAgIGlmICggIXBrZ19kaXJlY3RvcnlbMF0gKSB7CisgICAgICAgICAgICByZXR1cm4gMTsgICAgLyogQ2FuJ3QgcmVwb3J0IGluc3RhbGxlZCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZXJlIGlzbid0IGEgbGlzdCBvZiB0aGVtISAqLworICAgICAgICB9CisKKyAgICAgICAgZCA9IG9wZW5kaXIoIHBrZ19kaXJlY3RvcnkgKTsKKyAgICAgICAgaWYgKCFkKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICggJy4nID09IGRwLT5kX25hbWVbMF0gKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc25wcmludGYoIGJ1ZiwgQlVGU0laLCAiJXMvJXMiLCBwa2dfZGlyZWN0b3J5LCBkcC0+ZF9uYW1lICk7CisgICAgICAgICAgICBpZiAoc3RhdCggYnVmLCAmc3RhdF9idWYgKSA8IDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZSggaSsrICk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworI2lmZGVmIEhBVkVfUEtHSU5GTworCSAgICB2ID0gcGtncGFyYW0oIGRwLT5kX25hbWUsICJWRVJTSU9OIiApOworCSAgICBjID0gcGtncGFyYW0oIGRwLT5kX25hbWUsICJDQVRFR09SWSIgKTsKKworCSAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNucHJpbnRmKCBlbnRyeS0+c3dOYW1lLCBzaXplb2YoZW50cnktPnN3TmFtZSksCisJCQkJCSAgIiVzLSVzIiwgZHAtPmRfbmFtZSwgdiApOworCSAgICBpZiAoZW50cnktPnN3TmFtZV9sZW4gPj0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpKQorCQllbnRyeS0+c3dOYW1lX2xlbiA9IHNpemVvZihlbnRyeS0+c3dOYW1lKS0xOworCSAgICBlbnRyeS0+c3dUeXBlID0gKE5VTEwgIT0gc3Ryc3RyKCBjLCAic3lzdGVtIikpCisJCQkgICAgPyAyICAgICAgLyogb3BlcmF0aW5nU3lzdGVtICovCisJCQkgICAgOiA0OyAgICAgLyogIGFwcGxpY2F0aW9uICAgICovCisKKwkgICAgLyogRG8gd2UgbmVlZCB0byBmcmVlICd2JyAmICdjJyA/Pz8gKi8KKyNlbHNlCisJICAgIGVudHJ5LT5zd05hbWVfbGVuID0gc25wcmludGYoIGVudHJ5LT5zd05hbWUsIHNpemVvZihlbnRyeS0+c3dOYW1lKSwKKwkJCQkJICAiJXMiLCBkcC0+ZF9uYW1lICk7CisJICAgIGlmIChlbnRyeS0+c3dOYW1lX2xlbiA+PSBzaXplb2YoZW50cnktPnN3TmFtZSkpCisJCWVudHJ5LT5zd05hbWVfbGVuID0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpLTE7CisKKwkgICAgLyogbm8gaW5mb3JtYXRpb24gYWJvdXQgTy9TIHZzIGFwcGxpY2F0aW9uIHBhY2thZ2VzID8/PyAqLworI2VuZGlmCisKKwkgICAgaW5zdGFsbF90aW1lID0gc3RhdF9idWYuc3RfbXRpbWU7CisJICAgIGNwID0gZGF0ZV9uX3RpbWUoICZpbnN0YWxsX3RpbWUsICZkYXRlX2xlbiApOworCSAgICBtZW1jcHkoIGVudHJ5LT5zd0RhdGUsIGNwLCBkYXRlX2xlbiApOworCSAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IGRhdGVfbGVuOworCX0KKwljbG9zZWRpciggZCApOworI2lmZGVmIEhBVkVfTElCUEtHCisgICAgfQorI2VuZGlmCisKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU5NWJlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBzd2luc3RfcnBtLmM6CisgKiAgICAgaHJTV0luc3RhbGxlZFRhYmxlIGRhdGEgYWNjZXNzOgorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1JQTV9SUE1MSUJfSAorI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUlBNX1JQTUxJQl9ICisjaW5jbHVkZSA8cnBtL2hlYWRlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9SUE1HRVRQQVRICQkvKiBIQVZFX1JQTV9SUE1NQUNST19IICovCisjaW5jbHVkZSA8cnBtL3JwbW1hY3JvLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1JQTV9SUE1UU19ICisjaW5jbHVkZSA8cnBtL3JwbXRzLmg+CisjaW5jbHVkZSA8cnBtL3JwbWRiLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKKworICAgLyoKKyAgICAqIExvY2F0aW9uIG9mIFJQTSBwYWNrYWdlIGRpcmVjdG9yeS4KKyAgICAqIFVzZWQgZm9yOgorICAgICogICAgLSByZXBvcnRpbmcgaHJTV0luc3RhbGxlZExhc3QqIG9iamVjdHMKKyAgICAqICAgIC0gZGV0ZWN0aW5nIHdoZW4gdGhlIGNhY2hlZCBjb250ZW50cyBhcmUgb3V0IG9mIGRhdGUuCisgICAgKi8KK2NoYXIgcGtnX2RpcmVjdG9yeVtTTk1QX01BWFBBVEhdOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9pbml0KHZvaWQpCit7CisgICAgY2hhciAgICAgICAgKnJwbWRicGF0aCA9IE5VTEw7CisgICAgY29uc3QgY2hhciAgKmRicGF0aDsKKyAgICBzdHJ1Y3Qgc3RhdCAgc3RhdF9idWY7CisKKyNpZmRlZiBIQVZFX1JQTUdFVFBBVEgKKyAgICBycG1SZWFkQ29uZmlnRmlsZXMoIE5VTEwsIE5VTEwgKTsKKyAgICBycG1kYnBhdGggPSBycG1HZXRQYXRoKCAiJXtfZGJwYXRofSIsIE5VTEwgKTsKKyAgICBkYnBhdGggPSBycG1kYnBhdGg7CisjZWxzZQorICAgIGRicGF0aCA9ICIvdmFyL2xpYi9ycG0iOyAgIC8qIE1vc3QgbGlrZWx5ICovCisjZW5kaWYKKworICAgIHNucHJpbnRmKCBwa2dfZGlyZWN0b3J5LCBTTk1QX01BWFBBVEgsICIlcy9QYWNrYWdlcyIsIGRicGF0aCApOworICAgIFNOTVBfRlJFRShycG1kYnBhdGgpOworICAgIGRicGF0aCA9IE5VTEw7CisgICAgaWYgKC0xID09IHN0YXQoIHBrZ19kaXJlY3RvcnksICZzdGF0X2J1ZiApKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW4ndCBmaW5kIGRpcmVjdG9yeSBvZiBSUE0gcGFja2FnZXMiKTsKKyAgICAgICAgcGtnX2RpcmVjdG9yeVswXSA9ICdcMCc7CisgICAgfQorfQorCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX3NodXRkb3duKHZvaWQpCit7CisgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX3N3aW5zdF9hcmNoX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHJwbXRzICAgICAgICAgICAgICAgICB0czsKKworICAgIHJwbWRiTWF0Y2hJdGVyYXRvciAgICBtaTsKKyAgICBIZWFkZXIgICAgICAgICAgICAgICAgaDsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAqbiwgKnYsICpyLCAqZzsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAqdDsKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgaW5zdGFsbF90aW1lOworICAgIHNpemVfdCAgICAgICAgICAgICAgICBkYXRlX2xlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgaSA9IDE7CisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5OworCisgICAgdHMgPSBycG10c0NyZWF0ZSgpOworICAgIHJwbXRzU2V0VlNGbGFncyggdHMsIChfUlBNVlNGX05PU0lHTkFUVVJFU3xfUlBNVlNGX05PRElHRVNUUykpOworCisgICAgbWkgPSBycG10c0luaXRJdGVyYXRvciggdHMsIFJQTURCSV9QQUNLQUdFUywgTlVMTCwgMCk7CisgICAgaWYgKG1pID09IE5VTEwpCisJTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAicnBtZGJPcGVuKCkgZmFpbGVkXG4iKSk7CisKKyAgICB3aGlsZSAoTlVMTCAhPSAoaCA9IHJwbWRiTmV4dEl0ZXJhdG9yKCBtaSApKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHVfY2hhciAqZHQ7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd2luc3RfZW50cnlfY3JlYXRlKCBpKysgKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIGggPSBoZWFkZXJMaW5rKCBoICk7CisgICAgICAgIGhlYWRlckdldEVudHJ5KCBoLCBSUE1UQUdfTkFNRSwgICAgICAgIE5VTEwsICh2b2lkKiopJm4sIE5VTEwpOworICAgICAgICBoZWFkZXJHZXRFbnRyeSggaCwgUlBNVEFHX1ZFUlNJT04sICAgICBOVUxMLCAodm9pZCoqKSZ2LCBOVUxMKTsKKyAgICAgICAgaGVhZGVyR2V0RW50cnkoIGgsIFJQTVRBR19SRUxFQVNFLCAgICAgTlVMTCwgKHZvaWQqKikmciwgTlVMTCk7CisgICAgICAgIGhlYWRlckdldEVudHJ5KCBoLCBSUE1UQUdfR1JPVVAsICAgICAgIE5VTEwsICh2b2lkKiopJmcsIE5VTEwpOworICAgICAgICBoZWFkZXJHZXRFbnRyeSggaCwgUlBNVEFHX0lOU1RBTExUSU1FLCBOVUxMLCAodm9pZCoqKSZ0LCBOVUxMKTsKKworICAgICAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNucHJpbnRmKCBlbnRyeS0+c3dOYW1lLCBzaXplb2YoZW50cnktPnN3TmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy0lcy0lcyIsIG4sIHYsIHIpOworICAgICAgICBpZiAoZW50cnktPnN3TmFtZV9sZW4gPiBzaXplb2YoZW50cnktPnN3TmFtZSkpCisgICAgICAgICAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNpemVvZihlbnRyeS0+c3dOYW1lKTsKKyAgICAgICAgZW50cnktPnN3VHlwZSA9IChOVUxMICE9IHN0cnN0ciggZywgIlN5c3RlbSBFbnZpcm9ubWVudCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAgICAgLyogb3BlcmF0aW5nU3lzdGVtICovCisgICAgICAgICAgICAgICAgICAgICAgICA6IDQ7ICAgICAvKiAgYXBwbGljYXRpb24gICAgKi8KKworICAgICAgICBpbnN0YWxsX3RpbWUgPSAqdDsKKyAgICAgICAgZHQgPSBkYXRlX25fdGltZSggJmluc3RhbGxfdGltZSwgJmRhdGVfbGVuICk7CisgICAgICAgIGlmIChkYXRlX2xlbiAhPSA4ICYmIGRhdGVfbGVuICE9IDExKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQm9ndXMgbGVuZ3RoIGZyb20gZGF0ZV9uX3RpbWUgZm9yICVzIiwgZW50cnktPnN3TmFtZSk7CisgICAgICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IGRhdGVfbGVuOworICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5zd0RhdGUsIGR0LCBlbnRyeS0+c3dEYXRlX2xlbik7CisgICAgICAgIH0KKworICAgICAgICBoZWFkZXJGcmVlKCBoICk7CisgICAgfQorICAgIHJwbWRiRnJlZUl0ZXJhdG9yKCBtaSApOworICAgIHJwbXRzRnJlZSggdHMgKTsKKworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6bG9hZDphcmNoIiwgImxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIChpbnQpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4ZWE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYwpAQCAtMCwwICsxLDM1MyBAQAorLyoKKyAqICBTd3J1biBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQ6IHN3cnVuLmMgMTU3NjggMjAwNy0wMS0yMiAxNjoxODoyOVogcnN0b3J5ICQKKyAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNvZnR3YXJlX3J1bm5pbmcsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3dydW5fbWF4X3Byb2Nlc3Nlcywgc29mdHdhcmVfcnVubmluZykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzd3J1bl9jb3VudF9wcm9jZXNzZXNfYnlfbmFtZSwgc29mdHdhcmVfcnVubmluZykKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBsb2NhbCBzdGF0aWMgdmFycworICovCitzdGF0aWMgaW50IF9zd3J1bl9pbml0ID0gMDsKKyAgICAgICBpbnQgX3N3cnVuX21heCAgPSAwOworc3RhdGljIG5ldHNubXBfY2FjaGUgICAgICpzd3J1bl9jYWNoZSAgICAgPSBOVUxMOworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzd3J1bl9jb250YWluZXIgPSBOVUxMOworCituZXRzbm1wX2NvbnRhaW5lciAqIG5ldHNubXBfc3dydW5fY29udGFpbmVyKHZvaWQpOworbmV0c25tcF9jYWNoZSAgICAgKiBuZXRzbm1wX3N3cnVuX2NhY2hlICAgICh2b2lkKTsKKworLyoKKyAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyB2b2lkIF9zd3J1bl9lbnRyeV9yZWxlYXNlKG5ldHNubXBfc3dydW5fZW50cnkgKiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdW51c2VkKTsKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBleHRlcm5hbCBwZXItYXJjaGl0ZWN0dXJlIGZ1bmN0aW9ucyBwcm90b3R5cGVzCisgKgorICogVGhlc2Ugc2hvdWxkbid0IGJlIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBwdWJsaWMsIHNvIHRoZXkgYXJlbid0IGluCisgKiB0aGUgaGVhZGVyIGZpbGUuCisgKi8KK2V4dGVybiB2b2lkIG5ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpOworZXh0ZXJuIGludCBuZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOworCisvKioKKyAqIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2luaXRfc3dydW4odm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic3dydW46YWNjZXNzIiwgImluaXRcbiIpKTsKKworICAgIGlmICgxID09IF9zd3J1bl9pbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBfc3dydW5faW5pdCA9IDE7CisKKyAgICAodm9pZCluZXRzbm1wX3N3cnVuX2NvbnRhaW5lcigpOworICAgIG5ldHNubXBfYXJjaF9zd3J1bl9pbml0KCk7CisgICAgKHZvaWQpIG5ldHNubXBfc3dydW5fY2FjaGUoKTsKK30KKwordm9pZAorc2h1dGRvd25fc3dydW4odm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic3dydW46YWNjZXNzIiwgInNodXRkb3duXG4iKSk7CisKK30KKworaW50Citzd3J1bl9jb3VudF9wcm9jZXNzZXMoIHZvaWQgKQoreworICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZChzd3J1bl9jYWNoZSk7CisgICAgcmV0dXJuICggc3dydW5fY29udGFpbmVyID8gQ09OVEFJTkVSX1NJWkUoc3dydW5fY29udGFpbmVyKSA6IDAgKTsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NXUlVOX01BWF9QUk9DRVNTRVMKK2ludAorc3dydW5fbWF4X3Byb2Nlc3Nlcyggdm9pZCApCit7CisgICAgcmV0dXJuIF9zd3J1bl9tYXg7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TV1JVTl9NQVhfUFJPQ0VTU0VTICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TV1JVTl9DT1VOVF9QUk9DRVNTRVNfQllfTkFNRQoraW50Citzd3J1bl9jb3VudF9wcm9jZXNzZXNfYnlfbmFtZSggY2hhciAqbmFtZSApCit7CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnk7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKml0OworICAgIGludCBpID0gMDsKKworICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZChzd3J1bl9jYWNoZSk7CisgICAgaWYgKCAhc3dydW5fY29udGFpbmVyIHx8ICFuYW1lICkKKyAgICAgICAgcmV0dXJuIDA7ICAgIC8qIG9yIC0xICovCisKKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUiggc3dydW5fY29udGFpbmVyICk7CisgICAgd2hpbGUgKChlbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5KilJVEVSQVRPUl9ORVhUKCBpdCApKSAhPSBOVUxMKSB7CisgICAgICAgIGlmICgwID09IHN0cmNtcCggZW50cnktPmhyU1dSdW5OYW1lLCBuYW1lICkpCisgICAgICAgICAgICBpKys7CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoIGl0ICk7CisKKyAgICByZXR1cm4gaTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NXUlVOX0NPVU5UX1BST0NFU1NFU19CWV9OQU1FICovCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogY2FjaGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludAorX2NhY2hlX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCAgdm9pZCAqbWFnaWMgKQoreworICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2xvYWQoIHN3cnVuX2NvbnRhaW5lciwgMCApOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCAgdm9pZCAqbWFnaWMgKQoreworICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXMoIHN3cnVuX2NvbnRhaW5lciApOworICAgIHJldHVybjsKK30KKworLyoqCisgKiBjcmVhdGUgc3dydW4gY2FjaGUKKyAqLworbmV0c25tcF9jYWNoZSAqCituZXRzbm1wX3N3cnVuX2NhY2hlKHZvaWQpCit7CisgICAgb2lkICAgIGhyU1dSdW5UYWJsZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNCwgMiB9OworICAgIHNpemVfdCBoclNXUnVuVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgoaHJTV1J1blRhYmxlX29pZCk7CisKKyAgICBpZiAoICFzd3J1bl9jYWNoZSApIHsKKyAgICAgICAgc3dydW5fY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgICAvKiB0aW1lb3V0IGluIHNlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCAgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuVGFibGVfb2lkLCBoclNXUnVuVGFibGVfb2lkX2xlbik7CisgICAgICAgIGlmIChzd3J1bl9jYWNoZSkKKyAgICAgICAgICAgIHN3cnVuX2NhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKyAgICB9CisgICAgcmV0dXJuIHN3cnVuX2NhY2hlOworfQorCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogY29udGFpbmVyIGZ1bmN0aW9ucworICovCisvKioKKyAqIGNyZWF0ZSBzd3J1biBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9zd3J1bl9jb250YWluZXIodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic3dydW46Y29udGFpbmVyIiwgImluaXRcbiIpKTsKKworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBjb250YWluZXIuCisgICAgICovCisgIGlmICghc3dydW5fY29udGFpbmVyKSB7CisgICAgc3dydW5fY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgic3dydW46dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgPT0gc3dydW5fY29udGFpbmVyKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN3cnVuX2NvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInN3cnVuIGNvbnRhaW5lciIpOworICB9CisKKyAgICByZXR1cm4gc3dydW5fY29udGFpbmVyOworfQorCisvKioKKyAqIGxvYWQgc3dydW4gaW5mb3JtYXRpb24gaW4gc3BlY2lmaWVkIGNvbnRhaW5lcgorICoKKyAqIEBwYXJhbSBjb250YWluZXIgZW1wdHkgY29udGFpbmVyIHRvIGJlIGZpbGxlZC4KKyAqICAgICAgICAgICAgICAgICAgcGFzcyBOVUxMIHRvIGhhdmUgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBvbmUuCisgKiBAcGFyYW0gbG9hZF9mbGFncyBmbGFncyB0byBtb2RpZnkgYmVoYXZpb3VyLiBFeGFtcGxlczoKKyAqICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU1dSVU5fQUxMX09SX05PTkUKKyAqCisgKiBAcmV0dmFsIE5VTEwgIGVycm9yCisgKiBAcmV0dmFsICFOVUxMIHBvaW50ZXIgdG8gY29udGFpbmVyCisgKi8KK25ldHNubXBfY29udGFpbmVyKgorbmV0c25tcF9zd3J1bl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogdXNlcl9jb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgbmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciA9IHVzZXJfY29udGFpbmVyOworICAgIGludCByYzsKKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpjb250YWluZXI6bG9hZCIsICJsb2FkXG4iKSk7CisgICAgbmV0c25tcF9hc3NlcnQoMSA9PSBfc3dydW5faW5pdCk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpCisgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfc3dydW5fY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBzd3J1blxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJjID0gIG5ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworICAgIGlmICgwICE9IHJjKSB7CisgICAgICAgIGlmIChOVUxMID09IHVzZXJfY29udGFpbmVyKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgTkVUU05NUF9TV1JVTl9OT0ZMQUdTKTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfU1dSVU5fQUxMX09SX05PTkUpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpjb250YWluZXI6bG9hZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiIGRpc2NhcmRpbmcgcGFydGlhbCByZXN1bHRzXG4iKSk7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlX2l0ZW1zKGNvbnRhaW5lcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCit2b2lkCituZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZyZWVfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmNvbnRhaW5lciIsICJmcmVlXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKCEgKGZyZWVfZmxhZ3MgJiBORVRTTk1QX1NXUlVOX0RPTlRfRlJFRV9JVEVNUykpCisgICAgICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXMoY29udGFpbmVyKTsKKworICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7Cit9CisKK3ZvaWQKK25ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXMobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgic3dydW46Y29udGFpbmVyIiwgImZyZWVfaXRlbXNcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXNcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBmcmVlIGFsbCBpdGVtcy4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9zd3J1bl9lbnRyeV9yZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30KKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBzd3J1bl9lbnRyeSBmdW5jdGlvbnMKKyAqLworLyoqCisgKi8KK25ldHNubXBfc3dydW5fZW50cnkgKgorbmV0c25tcF9zd3J1bl9lbnRyeV9nZXRfYnlfaW5kZXgobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgb2lkIGluZGV4KQoreworICAgIG5ldHNubXBfaW5kZXggICB0bXA7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46ZW50cnkiLCAiYnlfaW5kZXhcbiIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgxID09IF9zd3J1bl9pbml0KTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfc3dydW5fZW50cnlfZ2V0X2J5X2luZGV4XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdG1wLmxlbiA9IDE7CisgICAgdG1wLm9pZHMgPSAmaW5kZXg7CisKKyAgICByZXR1cm4gKG5ldHNubXBfc3dydW5fZW50cnkgKikgQ09OVEFJTkVSX0ZJTkQoY29udGFpbmVyLCAmdG1wKTsKK30KKworLyoqCisgKi8KK25ldHNubXBfc3dydW5fZW50cnkgKgorbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUoaW50MzJfdCBpbmRleCkKK3sKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeSA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9zd3J1bl9lbnRyeSk7CisKKyAgICBpZihOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT5oclNXUnVuSW5kZXggPSBpbmRleDsKKyAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSAxOyAvKiB1bmtub3duICovCisgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSAyOyAvKiBydW5uYWJsZSAqLworCisgICAgZW50cnktPm9pZF9pbmRleC5sZW4gPSAxOworICAgIGVudHJ5LT5vaWRfaW5kZXgub2lkcyA9IChvaWQgKikgJiBlbnRyeS0+aHJTV1J1bkluZGV4OworCisgICAgcmV0dXJuIGVudHJ5OworfQorCisvKioKKyAqLworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9zd3J1bl9lbnRyeV9mcmVlKG5ldHNubXBfc3dydW5fZW50cnkgKiBlbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBTTk1QX0ZSRUUgbm90IG5lZWRlZCwgZm9yIGFueSBvZiB0aGVzZSwgCisgICAgICogc2luY2UgdGhlIHdob2xlIGVudHJ5IGlzIGFib3V0IHRvIGJlIGZyZWVkCisgICAgICovCisgICAgZnJlZShlbnRyeSk7Cit9CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogVXRpbGl0eSByb3V0aW5lcworICovCisKKy8qKgorICovCitzdGF0aWMgdm9pZAorX3N3cnVuX2VudHJ5X3JlbGVhc2UobmV0c25tcF9zd3J1bl9lbnRyeSAqIGVudHJ5LCB2b2lkICpjb250ZXh0KQoreworICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7Cit9CisKKworI2lmZGVmIFRFU1QKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgY29uc3QgY2hhciAqdG9rZW5zID0gZ2V0ZW52KCJTTk1QX0RFQlVHIik7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3QoKTsKKworICAgIC8qKiBzd3J1bix2ZXJib3NlOnN3cnVuLDk6c3dydW4sODpzd3J1biw1OnN3cnVuICovCisgICAgaWYgKHRva2VucykKKyAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKHRva2Vucyk7CisgICAgZWxzZQorICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoInN3cnVuIik7CisgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKDEpOworCisgICAgaW5pdF9zd3J1bigpOworICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2xvYWQoTlVMTCwgMCk7CisgICAgc2h1dGRvd25fc3dydW4oKTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlNTNmNQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogc3dydW4gZGF0YSBhY2Nlc3MgaGVhZGVyCisgKgorICogJElkOiBzd3J1bi5oIDE1MzQ2IDIwMDYtMDktMjYgMjM6MzQ6NTBaIHJzdG9yeSAkCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9BQ0NFU1NfU1dSVU5fQ09ORklHX0gKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU1dSVU5fQ09ORklHX0gKKworLyoKKyAqIGFsbCBwbGF0Zm9ybXMgdXNlIHRoaXMgZ2VuZXJpYyBjb2RlCisgKi8KK2NvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW4pCitjb25maWdfZXhjbHVkZShob3N0L2hyX3N3cnVuKQorCisvKgorICogc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW50ZXJmYWNlIGNvZGUKKyAqLworI2lmICAgZGVmaW5lZCggZGFyd2luICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2RhcndpbikKKyNlbGlmIGRlZmluZWQoIEhBVkVfU1lTX1BTVEFUX0ggKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQpCisjZWxpZiBkZWZpbmVkKCBkeW5peCApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mbykKKyNlbGlmIGRlZmluZWQoIHNvbGFyaXMyICkKKyMgaWYgX1NMQVNIX1BST0NfTUVUSE9EXworICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mbykKKyMgZWxzZQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MpCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKCBhaXg0ICkgfHwgZGVmaW5lZCggYWl4NSApIHx8IGRlZmluZWQoIGFpeDYgKSB8fCBkZWZpbmVkKCBhaXg3ICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvKQorI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvKQorI2VsaWYgZGVmaW5lZCggbGludXggKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cykKKyNlbGlmIGRlZmluZWQoIGN5Z3dpbiApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4pCisjZWxzZQorICAgIGNvbmZpZ193YXJuaW5nKFRoaXMgcGxhdGZvcm0gZG9lcyBub3QgeWV0IHN1cHBvcnQgaHJTV1J1blRhYmxlIHJld3JpdGVzKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbnVsbCkKKyNlbmRpZgorCit2b2lkIGluaXRfc3dydW4odm9pZCk7Cit2b2lkIHNodXRkb3duX3N3cnVuKHZvaWQpOworCituZXRzbm1wX2NhY2hlICAgICAqbmV0c25tcF9zd3J1bl9jYWNoZSh2b2lkKTsKK25ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcih2b2lkKTsKKworI2VuZGlmIC8qIE5FVFNOTVBfQUNDRVNTX1NXUlVOX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2N5Z3dpbi5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWUxNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4uYwpAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIHN3cnVuX2N5Z3dpbi5jOgorICogICAgIGhyU1dSdW5UYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBDeWd3aW4gaW50ZXJmYWNlIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN5cy9jeWd3aW4uaD4KKyNpbmNsdWRlIDx0bGhlbHAzMi5oPgorI2luY2x1ZGUgPHBzYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qCisgKiBhIGxvdCBvZiB0aGlzIGlzICJzdG9sZW4iIGZyb20gY3lnd2luIHBzLmNjCisgKi8KKwordHlwZWRlZiAgICAgICAgIEJPT0woV0lOQVBJICogRU5VTVBST0NFU1NNT0RVTEVTKSAoSEFORExFIGhQcm9jZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE1PRFVMRSAqIGxwaE1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCBscGNiTmVlZGVkKTsKKwordHlwZWRlZiAgICAgICAgIERXT1JEKFdJTkFQSSAqIEdFVE1PRFVMRUZJTEVOQU1FKSAoSEFORExFIGhQcm9jZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE1PRFVMRSBoTW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBUU1RSIGxwc3RyRklsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBuU2l6ZSk7CisKK3R5cGVkZWYgICAgICAgICBEV09SRChXSU5BUEkgKiBHRVRQUk9DRVNTTUVNT1JZSU5GTykgKEhBTkRMRSBoUHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQUk9DRVNTX01FTU9SWV9DT1VOVEVSUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1jLCBEV09SRCBuU2l6ZSk7CisKK3R5cGVkZWYgICAgICAgICBIQU5ETEUoV0lOQVBJICogQ1JFQVRFU05BUFNIT1QpIChEV09SRCBkd0ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHRoMzJQcm9jZXNzSUQpOworCit0eXBlZGVmICAgICAgICAgQk9PTChXSU5BUEkgKiBQUk9DRVNTV0FMSykgKEhBTkRMRSBoU25hcHNob3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQUFJPQ0VTU0VOVFJZMzIgbHBwZSk7CisKK0VOVU1QUk9DRVNTTU9EVUxFUyBteUVudW1Qcm9jZXNzTW9kdWxlczsKK0dFVE1PRFVMRUZJTEVOQU1FIG15R2V0TW9kdWxlRmlsZU5hbWVFeDsKK0NSRUFURVNOQVBTSE9UICBteUNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdDsKK1BST0NFU1NXQUxLICAgICBteVByb2Nlc3MzMkZpcnN0OworUFJPQ0VTU1dBTEsgICAgIG15UHJvY2VzczMyTmV4dDsKK0dFVFBST0NFU1NNRU1PUllJTkZPIG15R2V0UHJvY2Vzc01lbW9yeUluZm8gPSBOVUxMOworY3lnd2luX2dldGluZm9fdHlwZXMgcXVlcnkgPSBDV19HRVRQSU5GTzsKKworc3RhdGljIEJPT0wgV0lOQVBJCitkdW1teXByb2Nlc3Ntb2R1bGVzKEhBTkRMRSBoUHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgSE1PRFVMRSAqIGxwaE1vZHVsZSwgRFdPUkQgY2IsIExQRFdPUkQgbHBjYk5lZWRlZCkKK3sKKyAgICBscGhNb2R1bGVbMF0gPSAoSE1PRFVMRSkgKiBscGNiTmVlZGVkOworICAgICpscGNiTmVlZGVkID0gMTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIERXT1JEIFdJTkFQSQorR2V0TW9kdWxlRmlsZU5hbWVFeDk1KEhBTkRMRSBoUHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICBITU9EVUxFIGhNb2R1bGUsIExQVFNUUiBscHN0ckZpbGVOYW1lLCBEV09SRCBuKQoreworICAgIEhBTkRMRSAgICAgICAgICBoOworICAgIERXT1JEICAgICAgICAgICBwaWQgPSAoRFdPUkQpIGhNb2R1bGU7CisgICAgUFJPQ0VTU0VOVFJZMzIgIHByb2M7CisKKyAgICBoID0gbXlDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBQUk9DRVNTLCAwKTsKKyAgICBpZiAoIWgpCisgICAgICAgIHJldHVybiAwOworICAgIHByb2MuZHdTaXplID0gc2l6ZW9mKHByb2MpOworICAgIGlmIChteVByb2Nlc3MzMkZpcnN0KGgsICZwcm9jKSkKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGlmIChwcm9jLnRoMzJQcm9jZXNzSUQgPT0gcGlkKSB7CisgICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaCk7CisgICAgICAgICAgICAgICAgc3RyY3B5KGxwc3RyRmlsZU5hbWUsIHByb2Muc3pFeGVGaWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG15UHJvY2VzczMyTmV4dChoLCAmcHJvYykpOworICAgIENsb3NlSGFuZGxlKGgpOworICAgIHJldHVybiAwOworfQorCisjZGVmaW5lIEZBQ1RPUiAoMHgxOWRiMWRlZDUzZWE3MTBMTCkKKyNkZWZpbmUgTlNQRVJTRUMgMTAwMDAwMDBMTAorI2RlZmluZSBOU1BFUk1TRUMgMTAwMDBMTAorCitzdGF0aWMgdGltZV90ICAgX19zdGRjYWxsCit0b190aW1lX3QoUEZJTEVUSU1FIHB0cikKK3sKKyAgICBsb25nICAgICAgICAgICAgcmVtOworICAgIGxvbmcgbG9uZyAgICAgICB4ID0KKyAgICAgICAgKChsb25nIGxvbmcpIHB0ci0+ZHdIaWdoRGF0ZVRpbWUgPDwgMzIpICsKKyAgICAgICAgKCh1bnNpZ25lZCkgcHRyLT5kd0xvd0RhdGVUaW1lKTsKKyAgICB4IC09IEZBQ1RPUjsKKyAgICByZW0gPSB4ICUgTlNQRVJTRUM7CisgICAgcmVtICs9IE5TUEVSU0VDIC8gMjsKKyAgICB4IC89IE5TUEVSU0VDOworICAgIHggKz0gcmVtIC8gTlNQRVJTRUM7CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBsb25nCit0b19tc2VjKFBGSUxFVElNRSBwdHIpCit7CisgICAgbG9uZyBsb25nICAgICAgIHggPQorICAgICAgICAoKGxvbmcgbG9uZykgcHRyLT5kd0hpZ2hEYXRlVGltZSA8PCAzMikgKworICAgICAgICAodW5zaWduZWQpIHB0ci0+ZHdMb3dEYXRlVGltZTsKKyAgICB4IC89IE5TUEVSTVNFQzsKKyAgICByZXR1cm4geDsKK30KKworT1NWRVJTSU9OSU5GTyAgIHZlcjsKK0hNT0RVTEUgICAgICAgICBoOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICBtZW1zZXQoJnZlciwgMCwgc2l6ZW9mIHZlcik7CisgICAgdmVyLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YgdmVyOworICAgIEdldFZlcnNpb25FeCgmdmVyKTsKKworICAgIGlmICh2ZXIuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVCkgeworICAgICAgICBoID0gTG9hZExpYnJhcnkoInBzYXBpLmRsbCIpOworICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgbXlFbnVtUHJvY2Vzc01vZHVsZXMgICA9IChFTlVNUFJPQ0VTU01PRFVMRVMpCisgICAgICAgICAgICAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGgsICJFbnVtUHJvY2Vzc01vZHVsZXMiKTsKKyAgICAgICAgICAgIG15R2V0TW9kdWxlRmlsZU5hbWVFeCAgPSAoR0VUTU9EVUxFRklMRU5BTUUpCisgICAgICAgICAgICAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGgsICJHZXRNb2R1bGVGaWxlTmFtZUV4QSIpOworICAgICAgICAgICAgbXlHZXRQcm9jZXNzTWVtb3J5SW5mbyA9IChHRVRQUk9DRVNTTUVNT1JZSU5GTykKKyAgICAgICAgICAgICAgICAgICAgICAgR2V0UHJvY0FkZHJlc3MoaCwgIkdldFByb2Nlc3NNZW1vcnlJbmZvIik7CisgICAgICAgICAgICBpZiAobXlFbnVtUHJvY2Vzc01vZHVsZXMgJiYgbXlHZXRNb2R1bGVGaWxlTmFtZUV4KQorICAgICAgICAgICAgICAgIHF1ZXJ5ID0gQ1dfR0VUUElORk9fRlVMTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaHJfc3dydW4gZmFpbGVkIE5UIGluaXRcbiIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJocl9zd3J1biBmYWlsZWQgdG8gbG9hZCBwc2FwaS5kbGxcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGggPSBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTDMyLkRMTCIpOworICAgICAgICBteUNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdCA9IChDUkVBVEVTTkFQU0hPVCkKKyAgICAgICAgICAgICAgICAgICAgICAgR2V0UHJvY0FkZHJlc3MoaCwgIkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdCIpOworICAgICAgICBteVByb2Nlc3MzMkZpcnN0ID0gKFBST0NFU1NXQUxLKSBHZXRQcm9jQWRkcmVzcyhoLCAiUHJvY2VzczMyRmlyc3QiKTsKKyAgICAgICAgbXlQcm9jZXNzMzJOZXh0ICA9IChQUk9DRVNTV0FMSykgR2V0UHJvY0FkZHJlc3MoaCwgIlByb2Nlc3MzMk5leHQiKTsKKyAgICAgICAgbXlFbnVtUHJvY2Vzc01vZHVsZXMgID0gZHVtbXlwcm9jZXNzbW9kdWxlczsKKyAgICAgICAgbXlHZXRNb2R1bGVGaWxlTmFtZUV4ID0gR2V0TW9kdWxlRmlsZU5hbWVFeDk1OworICAgICAgICBpZiAobXlDcmVhdGVUb29saGVscDMyU25hcHNob3QgJiYgbXlQcm9jZXNzMzJGaXJzdAorICAgICAgICAgICAgJiYgbXlQcm9jZXNzMzJOZXh0KQorI2lmIDAKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIGRvZXNuJ3Qgd29yayBhZnRlciBhbGwgb24gV2luOTggU0UgCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHF1ZXJ5ID0gQ1dfR0VUUElORk9fRlVMTDsKKyNlbHNlCisgICAgICAgICAgICBxdWVyeSA9IENXX0dFVFBJTkZPOworI2VuZGlmCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJocl9zd3J1biBmYWlsZWQgbm9uLU5UIGluaXRcbiIpOworICAgIH0KKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgc3RydWN0IGV4dGVybmFsX3BpbmZvICAqY3VycHJvYzsKKyAgICBwaWRfdCAgICAgICAgICAgICAgICAgICBjdXJwaWQgPSAwOworICAgIERXT1JEICAgICAgICAgICAgICAgICAgIG47CisgICAgSEFORExFICAgICAgICAgICAgICAgICAgaDsKKyAgICBGSUxFVElNRSAgICAgICAgICAgICAgICBjdCwgZXQsIGt0LCB1dDsKKyAgICBQUk9DRVNTX01FTU9SWV9DT1VOVEVSUyBwbWM7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAqY3AxLCAqY3AyOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgICAgKmVudHJ5OworCisgICAgY3lnd2luX2ludGVybmFsKENXX0xPQ0tfUElORk8sIDEwMDApOworICAgIHdoaWxlIChjdXJwcm9jID0gKHN0cnVjdCBleHRlcm5hbF9waW5mbyAqKQorICAgICAgICAgICAgICAgY3lnd2luX2ludGVybmFsKHF1ZXJ5LCBjdXJwaWQgfCBDV19ORVhUUElEKSkgeworCisgICAgICAgIGN1cnBpZCA9IGN1cnByb2MtPnBpZDsKKyAgICAgICAgaWYgKCggUElEX0VYSVRFRCAmIGN1cnByb2MucHJvY2Vzc19zdGF0ZSApIHx8CisgICAgICAgICAgICAgICAoIH4weGZmZmYgJiBjdXJwcm9jLmV4aXRjb2RlICkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShjdXJwaWQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworCisgICAgICAgIG4gPSBsb3dwcm9jLmR3UHJvY2Vzc0lkICYgMHhmZmZmOworICAgICAgICBoID0gT3BlblByb2Nlc3MoUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiB8IFBST0NFU1NfVk1fUkVBRCwgRkFMU0UsIG4pOworCisgICAgICAgIGlmIChjdXJwcm9jLnBwaWQpIHsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPQorICAgICAgICAgICAgICAgIHNwcmludGYoZW50cnktPmhyU1dSdW5QYXRoLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN5Z3dpbl9jb252X3RvX3Bvc2l4X3BhdGgoY3VycHJvYy5wcm9nbmFtZSkpOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5ID09IENXX0dFVFBJTkZPX0ZVTEwpIHsKKworICAgICAgICAgICAgaWYgKGgpIHsKKyAgICAgICAgICAgICAgICBITU9EVUxFICAgICAgICAgaG1bMTAwMF07CisgICAgICAgICAgICAgICAgaWYgKCFteUVudW1Qcm9jZXNzTW9kdWxlcyhoLCBobSwgc2l6ZW9mIGhtLCAmbikpCisgICAgICAgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICAgICAgICAgIGlmIChuICYmIG15R2V0TW9kdWxlRmlsZU5hbWVFeChoLCBobVswXSwgc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Ygc3RyaW5nKSkgeworICAgICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCkgLSAxLCBzdHJpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAgKiBTZXQgaHJTV1J1bk5hbWUgdG8gYmUgdGhlIGxhc3QgY29tcG9uZW50IG9mIGhyU1dSdW5QYXRoLAorICAgICAgICAgKiAgICBidXQgd2l0aG91dCBhbnkgZmlsZSBleHRlbnNpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggZW50cnktPmhyU1dSdW5QYXRoX2xlbiApIHsKKyAgICAgICAgICAgIGNwMSA9IHN0cnJjaHIoIGVudHJ5LT5oclNXUnVuUGF0aCwgJy4nICk7CisgICAgICAgICAgICBpZiAoIGNwMSApCisgICAgICAgICAgICAgICAgKmNwMSA9ICdcMCc7ICAgIC8qIE1hc2sgdGhlIGZpbGUgZXh0ZW5zaW9uICovCisKKyAgICAgICAgICAgIGNwMiAgPSBzdHJyY2hyKCBlbnRyeS0+aHJTV1J1blBhdGgsICcvJyApOworICAgICAgICAgICAgaWYgKGNwMikgCisgICAgICAgICAgICAgICAgY3AyKys7ICAgICAgICAgICAvKiBGaW5kIHRoZSBmaW5hbCBjb21wb25lbnQgLi4uICovCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3AyID0gZW50cnktPmhyU1dSdW5QYXRoOyAgICAgICAgICAvKiAuLi4gaWYgYW55ICovCisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0KKyAgICAgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSAtIDEsIGNwMik7CisKKyAgICAgICAgICAgIGlmICggY3AxICkKKyAgICAgICAgICAgICAgICAqY3AxID0gJy4nOyAgICAgLyogUmVzdG9yZSB0aGUgZmlsZSBleHRlbnNpb24gKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFhYWCAtIE5vIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBwcm9jZXNzIGFyZ3VtZW50cworICAgICAgICAgKiBYWFggLSBObyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgc3lzdGVtIHByb2Nlc3NlcyB2cyBhcHBsaWNhdGlvbnMKKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKFBJRF9TVE9QUEVEICYgY3VycHJvYy5wcm9jZXNzX3N0YXRlICkgeworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICB9CisgICAgICAvKiAgZWxzZSBpZiAoUElEX1pPTUJJRSAmIGN1cnByb2MucHJvY2Vzc19zdGF0ZSApICAqLworICAgICAgICAgIGVsc2UgaWYgKCAgIH4weGZmZmYgJiBjdXJwcm9jLmV4aXRjb2RlICkKKyAgICAgICAgeworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7ICA/PyAqLworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgaWYgKEdldFByb2Nlc3NUaW1lcyhoLCAmY3QsICZldCwgJmt0LCAmdXQpKQorICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSA9ICh0b19tc2VjKCZrdCkgKyB0b19tc2VjKCZ1dCkpIC8gMTA7CisgICAgICAgICAgICBpZiAobXlHZXRQcm9jZXNzTWVtb3J5SW5mbworICAgICAgICAgICAgICAgICYmIG15R2V0UHJvY2Vzc01lbW9yeUluZm8oaCwgJnBtYywgc2l6ZW9mIHBtYykpCisgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtID0gcG1jLldvcmtpbmdTZXRTaXplIC8gMTAyNDsKKworICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY3lnd2luX2ludGVybmFsKENXX1VOTE9DS19QSU5GTyk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9kYXJ3aW4uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fZGFyd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwMGZlMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fZGFyd2luLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBzd3J1bl9kYXJ3aW4uYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgRGFyd2luCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxsaWJwcm9jLmg+CisjaW5jbHVkZSA8c3lzL3Byb2NfaW5mby5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4JLyogZm9yIHN5c2N0bCgpIGFuZCBzdHJ1Y3Qga2luZm9fcHJvYyAqLworCisjZGVmaW5lIF9fQVBQTEVfQVBJX0VWT0xWSU5HIDEKKyNpbmNsdWRlIDxzeXMvYWNsLmg+IC8qIG9yIGVsc2UgQ29yZUZvdW5kYXRpb24uaCBiYXJmcyAqLworI3VuZGVmIF9fQVBQTEVfQVBJX0VWT0xWSU5HIAorCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZCYXNlLmg+CisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZOdW1iZXIuaD4KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkJ1bmRsZS5oPgorI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxJT0tpdC9JT0NGQnVuZGxlLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKworLyoqIHNpZ2guLi4gY2FuJ3QgZmluZCBQcm9jZXNzZXMuaCAqLworI2lmbmRlZiBrUHJvY2Vzc0RpY3Rpb25hcnlJbmNsdWRlQWxsSW5mb3JtYXRpb25NYXNrIAorI2RlZmluZSBrUHJvY2Vzc0RpY3Rpb25hcnlJbmNsdWRlQWxsSW5mb3JtYXRpb25NYXNrIChsb25nKTB4RkZGRkZGRkYKKyNlbmRpZgorI2lmbmRlZiBwcm9jTm90Rm91bmQKKyNkZWZpbmUgcHJvY05vdEZvdW5kIC02MDAKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGludCBfa2Vybl9hcmdtYXg7CitzdGF0aWMgaW50IF9zZXRfY29tbWFuZF9uYW1lKG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5KTsKKworLyoqIGF2b2lkIGtlcm5lbCBidWcgaW4gMTAuMi4gODE5MiBvdWdodGEgYmUgZW5vdWdoIGFueXdheXMsIHJpZ2h0PyAqLworI2RlZmluZSBNQVhfS0VSTl9BUkdNQVggODE5MgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICBpbnQgICAgbWliWzJdID0geyBDVExfS0VSTiwgS0VSTl9BUkdNQVggfTsKKyAgICBzaXplX3Qgc2l6ZSwgbWliX3NpemUgPSBzaXplb2YobWliKS9zaXplb2YobWliWzBdKTsKKyAgICAKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiaW5pdFxuIikpOworCisgICAgc2l6ZSA9IHNpemVvZihfa2Vybl9hcmdtYXgpOworICAgIGlmIChzeXNjdGwobWliLCBtaWJfc2l6ZSwgJl9rZXJuX2FyZ21heCwgJnNpemUsIE5VTEwsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciBpbiBBUkdNQVggc3lzY3RsKCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgX2tlcm5fYXJnbWF4ID0gTUFYX0tFUk5fQVJHTUFYOworICAgIH0KKyAgICBlbHNlIGlmIChfa2Vybl9hcmdtYXggPiBNQVhfS0VSTl9BUkdNQVgpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICJhcnRpZmljaWFsbHkgbGltaXRpbmcgQVJHTUFYIHRvICVkIChmcm9tICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgTUFYX0tFUk5fQVJHTUFYLCBfa2Vybl9hcmdtYXgpKTsKKyAgICAgICAgX2tlcm5fYXJnbWF4ID0gTUFYX0tFUk5fQVJHTUFYOworICAgIH0KKworCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIFNXUlVOSU5ERU5UICIgICAgICAgICAgICIKK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBpbnQJICAgICAgICAgICAgICAgICBtaWJbNF0gPSB7Q1RMX0tFUk4sIEtFUk5fUFJPQywgS0VSTl9QUk9DX0FMTH07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgYnVmX3NpemUsIG1pYl9zaXplID0gc2l6ZW9mKG1pYikvc2l6ZW9mKG1pYlswXSk7CisgICAgc3RydWN0IGtpbmZvX3Byb2MgICAqcHJvY2Vzc2VzID0gTlVMTDsKKyAgICBzdHJ1Y3QgcHJvY190YXNrYWxsaW5mbyB0YXNraW5mbzsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICByYywgbnVtX2VudHJpZXMsIGk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRcbiIpKTsKKworICAgIC8qCisgICAgICogZ2V0IHNpemUgdG8gYWxsb2NhdGUuIFRoaXMgaW50cm9kdWNlcyBhIGJpdCBvZiBhIHJhY2UgY29uZGl0aW9uLAorICAgICAqIGFzIHRoZSBzaXplIGNvdWxkIGNoYW5nZSBiZXR3ZWVuIHRoaXMgY2FsbCBhbmQgdGhlIG5leHQuLi4KKyAgICAgKi8KKyAgICByYyA9IHN5c2N0bChtaWIsIG1pYl9zaXplLCBOVUxMLCAmYnVmX3NpemUsIE5VTEwsIDApOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIktFUk5fUFJPQ19BTEwgc2l6ZSBzeXNjdGwgZmFpbGVkOiAlZFxuIiwgcmMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcHJvY2Vzc2VzID0gKHN0cnVjdCBraW5mb19wcm9jKikgbWFsbG9jKGJ1Zl9zaXplKTsKKyAgICBpZiAoTlVMTCA9PSBwcm9jZXNzZXMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBzeXNjdGwobWliLCBtaWJfc2l6ZSwgcHJvY2Vzc2VzLCAmYnVmX3NpemUsIE5VTEwsIDApOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIktFUk5fUFJPQ19BTEwgc3lzY3RsIGZhaWxlZDogJWRcbiIsIHJjKTsKKyAgICAgICAgZnJlZShwcm9jZXNzZXMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIG51bV9lbnRyaWVzID0gYnVmX3NpemUgLyBzaXplb2Yoc3RydWN0IGtpbmZvX3Byb2MpOworICAgIAorICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNraXAgZW1wdHkgbmFtZXMuCisgICAgICAgICAqIHBfc3RhdCA9IChTSURMfFNSVU58U1NMRUVQfFNTVE9QfFNaT01CKQorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCgnXDAnID09IHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfY29tbVswXSkgfHwKKyAgICAgICAgICAgICgwID09IHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfcGlkKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiIHNraXBwaW5nIHBfY29tbSAnJXMnLCBwaWQgJTVkLCBwX3BzdGF0ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzW2ldLmtwX3Byb2MucF9jb21tID8gCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX2NvbW0gOiAiTlVMTCIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX3BpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfc3RhdCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiICVzIHBpZCAlNWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfY29tbSwKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzW2ldLmtwX3Byb2MucF9waWQpKTsKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfcGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHBfY29tbSBpcyBhIHBhcnRpYWwgbmFtZSwgYnV0IGl0IGlzIGFsbCB3ZSBoYXZlIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfY29tbSk7CisKKyAgICAgICAgLyoqIHN5c2N0bCBmb3IgbmFtZSwgcGF0aCwgcGFyYW1zICovCisgICAgICAgIHJjID0gX3NldF9jb21tYW5kX25hbWUoZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIG1hcCBwX3N0YXQgdG8gUnVuU3RhdHVzLiBPZGQgdGhhdCB0aGVyZSBpcyBubyAncnVubmluZycgc3RhdHVzLgorICAgICAgICAgKi8KKyAgICAgICAgc3dpdGNoKHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfc3RhdCkgeworICAgICAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1NMRUVQOgorICAgICAgICAgICAgY2FzZSBTU1RPUDoKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNJREw6CisgICAgICAgICAgICBjYXNlIFNaT01COgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAKKworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBmb3Igc3lzdGVtIHByb2Nlc3NlcworICAgICAgICAgKi8KKyAgICAgICAgaWYgKFBfU1lTVEVNICYgcHJvY2Vzc2VzW2ldLmtwX3Byb2MucF9mbGFnKSB7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSBIUlNXUlVOVFlQRV9PUEVSQVRJTkdTWVNURU07CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwgU1dSVU5JTkRFTlQgIlNZU1RFTVxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UgZW50cnktPmhyU1dSdW5UeXBlID0gSFJTV1JVTlRZUEVfQVBQTElDQVRJT047CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZ2V0IG1lbSBzaXplLCBydW4gdGltZQorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBwcm9jX3BpZGluZm8oIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfcGlkLCBQUk9DX1BJRFRBU0tBTExJTkZPLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhc2tpbmZvLCBzaXplb2YodGFza2luZm8pKTsKKyAgICAgICAgaWYgKHNpemVvZih0YXNraW5mbykgIT0gcmMpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCAiIHByb2NfcGlkaW5mbyByZXR1cm5lZCAlZFxuIiwgcmMpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHRhc2tfbWVtID0gdGFza2luZm8ucHRpbmZvLnB0aV9yZXNpZGVudF9zaXplIC8gMTAyNDsKKyAgICAgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICB1X3F1YWRfdCAgICAgdXE7IC8qIHVfaW50NjRfdCAqLworICAgICAgICAgICAgICAgIFVuc2lnbmVkV2lkZSB1dzsgLyogc3RydWN0IHVfaW50MzJfdCBoaS9sbyAqLworICAgICAgICAgICAgfSBhdCwgbnM7CisgICAgICAgICAgICBhdC51cSA9IHRhc2tpbmZvLnB0aW5mby5wdGlfdG90YWxfdXNlciArCisgICAgICAgICAgICAgICAgICAgIHRhc2tpbmZvLnB0aW5mby5wdGlfdG90YWxfc3lzdGVtOworICAgICAgICAgICAgbnMgPSBhdDsKKyAgICAgICAgICAgIG5zLnVxID0gbnMudXEgLyAxMDAwMDAwMExMOyAvKiBuYW5vIHRvIGRlY2kgKi8KKyAgICAgICAgICAgIGlmICh0YXNrX21lbSA+IElOVDMyX01BWCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCBTV1JVTklOREVOVCAibWVtIG92ZXJmbG93XG4iKSk7CisgICAgICAgICAgICAgICAgdGFza19tZW0gPSBJTlQzMl9NQVg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnMudXEgPiBJTlQzMl9NQVgpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwgU1dSVU5JTkRFTlQgInRpbWUgb3ZlcmZsb3dcbiIpKTsKKyAgICAgICAgICAgICAgICBucy51cSA9IElOVDMyX01BWDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSA9IHRhc2tfbWVtOworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVID0gbnMudXE7CisgICAgICAgIH0KKyAgICB9CisgICAgZnJlZShwcm9jZXNzZXMpOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgc25hZ2dlZCBmcm9tIERhcndpbiBjb2RlLCBhbmQgdGhlIG9yaWdpbmFsCisgKiBmaWxlIGhhZCB0aGUgZm9sbG93aW5nIGxpY2VuY2VzOgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBAQVBQTEVfTElDRU5TRV9IRUFERVJfU1RBUlRACisgKiAKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgY29uc3RpdHV0ZSBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kCisgKiBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUKKyAqICJMaWNlbnNlIikuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgKiBMaWNlbnNlLiAgUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZSBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcgdGhpcyBmaWxlLgorICogCisgKiBUaGlzIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUKKyAqIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorICogRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVC4gIFBsZWFzZSBzZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICogCisgKiBAQVBQTEVfTElDRU5TRV9IRUFERVJfRU5EQAorICovCisjaWZkZWYgSkFHVUFSIC8qIHh4eCBjb25maWd1cmUgdGVzdD8gKi8KK3N0YXRpYyBpbnQKK19zZXRfY29tbWFuZF9uYW1lX2phZ3VhcihuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpbnQJICAgICAgICBtaWJbM10gPSB7Q1RMX0tFUk4sIEtFUk5fUFJPQ0FSR1MsIDB9OworICAgIHNpemVfdCAgICAgIHByb2Nhcmdzc2l6ZSwgbWliX3NpemUgPSBzaXplb2YobWliKS9zaXplb2YobWliWzBdKTsKKyAgICBjaGFyICAgICAgICphcmdfZW5kLCAqZXhlY19wYXRoOworICAgIGludCAgICAgICAgKmlwOworICAgIGludCAgICAgICAgIGxlbjsKKyAgICBjaGFyICAgICAgICpjb21tYW5kX2JlZywgKmNvbW1hbmQsICpjb21tYW5kX2VuZDsKKyAgICBjaGFyICAgICAgICBhcmdfYnVmW01BWF9LRVJOX0FSR01BWF07IC8qIG1heCB0byBhdm9pZCBrZXJuZWwgYnVnICovCisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiBwaWQgJWRcbiIsIGVudHJ5LT5oclNXUnVuSW5kZXgpKTsKKworICAgIG1pYlsyXSA9IGVudHJ5LT5oclNXUnVuSW5kZXg7CisKKyAgICBtZW1zZXQoYXJnX2J1ZiwgMHgwLCBzaXplb2YoYXJnX2J1ZikpOworICAgIHByb2Nhcmdzc2l6ZSA9IF9rZXJuX2FyZ21heDsKKyAgICBpZiAoc3lzY3RsKG1pYiwgbWliX3NpemUsIGFyZ19idWYsICZwcm9jYXJnc3NpemUsIE5VTEwsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciBpbiBQUk9DQVJHUyBzeXNjdGwoKSBmb3IgJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogU2V0IGlwIGp1c3QgYWJvdmUgdGhlIGVuZCBvZiBhcmdfYnVmLiAqLworICAgIGFyZ19lbmQgPSAmYXJnX2J1Zltwcm9jYXJnc3NpemVdOworICAgIGlwID0gKGludCAqKWFyZ19lbmQ7CisgICAgCisgICAgLyoKKyAgICAgKiBTa2lwIHRoZSBsYXN0IDIgd29yZHMsIHNpbmNlIHRoZSBsYXN0IGlzIGEgMCB3b3JkLCBhbmQKKyAgICAgKiB0aGUgc2Vjb25kIHRvIGxhc3QgbWF5IGJlIGFzIHdlbGwsIGlmIHRoZXJlIGFyZSBubworICAgICAqIGFyZ3VtZW50cy4KKyAgICAgKi8KKyAgICBpcCAtPSAzOworICAgIAorICAgIC8qIEl0ZXJhdGUgZG93biB0aGUgYXJndW1lbnRzIHVudGlsIGEgMCB3b3JkIGlzIGZvdW5kLiAqLworICAgIGZvciAoOyAqaXAgIT0gMDsgaXAtLSkgeworICAgICAgICBpZiAoaXAgPT0gKGludCAqKWFyZ19idWYpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHVuZXhwZWN0ZWQgdG9wYXJnXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogVGhlIHNhdmVkIGV4ZWNfcGF0aCBpcyBqdXN0IGFib3ZlIHRoZSAwIHdvcmQuICovCisgICAgaXArKzsKKyAgICBleGVjX3BhdGggPSAoY2hhciAqKWlwOworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIGV4ZWNfcGF0aCAlc1xuIiwgZXhlY19wYXRoKSk7CisgICAgbGVuID0gc3RybGVuKGV4ZWNfcGF0aCk7CisgICAgc3RybGNweShlbnRyeS0+aHJTV1J1blBhdGgsIGV4ZWNfcGF0aCwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCkpOworICAgIGlmIChsZW4gPiBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHRydW5jYXRpbmcgbG9uZyBydW4gcGF0aFxuIikpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhbc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMl0gPSAnJCc7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xOworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiBleGVjX3BhdGggJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aCkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBsZW47CisgICAgCisgICAgLyoKKyAgICAgKiBHZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgYXJndW1lbnQuICBJdCBpcyB3b3JkLWFsaWduZWQsCisgICAgICogc28gc2tpcCBwYWRkaW5nICdcMCcgYnl0ZXMuCisgICAgICovCisgICAgY29tbWFuZF9iZWcgPSBleGVjX3BhdGggKyBzdHJsZW4oZXhlY19wYXRoKTsKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiBjb21tYW5kX2JlZyAnJXMnXG4iLCBjb21tYW5kX2JlZykpOworICAgIGZvciAoOyAqY29tbWFuZF9iZWcgPT0gJ1wwJzsgY29tbWFuZF9iZWcrKykgeworICAgICAgICBpZiAoY29tbWFuZF9iZWcgPj0gYXJnX2VuZCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCIgY29tbWFuZF9iZWcgJyVzJ1xuIiwgY29tbWFuZF9iZWcpKTsKKyAgICAKKyAgICAvKiBHZXQgdGhlIGJhc2VuYW1lIG9mIGNvbW1hbmQuICovCisgICAgY29tbWFuZCA9IGNvbW1hbmRfZW5kID0gY29tbWFuZF9iZWcgKyBzdHJsZW4oY29tbWFuZF9iZWcpICsgMTsKKyAgICBmb3IgKGNvbW1hbmQtLTsgY29tbWFuZCA+PSBjb21tYW5kX2JlZzsgY29tbWFuZC0tKSB7CisgICAgICAgIGlmICgqY29tbWFuZCA9PSAnLycpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgY29tbWFuZCsrOworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIGNvbW1hbmQgJyVzJ1xuIiwgY29tbWFuZCkpOworICAgIAorICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgY29tbWFuZCBhbmQgY29weS4gKi8KKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsCisgICAgICAgICAgICAgICAgU1dSVU5JTkRFTlQgImtlcm5lbCBuYW1lICVzXG4iLCBjb21tYW5kKSk7CisgICAgaWYgKHN0cm5jbXAoY29tbWFuZCwgZW50cnktPmhyU1dSdW5OYW1lLCBzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKS0xKSkgeworICAgICAgICBzdHJsY3B5KGVudHJ5LT5oclNXUnVuTmFtZSwgY29tbWFuZCwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSkpOworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc3RybGVuKGVudHJ5LT5oclNXUnVuTmFtZSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwgIioqIgorICAgICAgICAgICAgICAgICAgICBTV1JVTklOREVOVCAidXBkYXRlZCBuYW1lIHRvICVzXG4iLCBlbnRyeS0+aHJTV1J1bk5hbWUpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoqIG5vIGVycm9yLCBubyBjaGFuZ2UgKi8KKyAgICByZXR1cm4gMTsKK30KKyNlbHNlCitzdGF0aWMgaW50Citfc2V0X2NvbW1hbmRfbmFtZShuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpbnQJICAgICAgICBtaWJbM10gPSB7Q1RMX0tFUk4sIDAsIDB9OworICAgIHNpemVfdCAgICAgIHByb2Nhcmdzc2l6ZSwgbWliX3NpemUgPSBzaXplb2YobWliKS9zaXplb2YobWliWzBdKTsKKyAgICBjaGFyICAgICAgICpjcDsKKyAgICBpbnQgICAgICAgICBsZW4sIG5hcmdzOworICAgIGNoYXIgICAgICAgKmNvbW1hbmRfYmVnLCAqY29tbWFuZCwgKmNvbW1hbmRfZW5kLCAqZXhlY19wYXRoLCAqYXJnTjsKKyAgICBjaGFyICAgICAgICBhcmdfYnVmW01BWF9LRVJOX0FSR01BWF07IC8qIG1heCB0byBhdm9pZCBrZXJuZWwgYnVnICovCisKKyAgICAvKgorICAgICAqIGFyZ3VtZW50cworICAgICAqLworICAgIG1pYlsxXSA9IEtFUk5fUFJPQ0FSR1MyOworICAgIG1pYlsyXSA9IGVudHJ5LT5oclNXUnVuSW5kZXg7CisKKyAgICBtZW1zZXQoYXJnX2J1ZiwgMHgwLCBzaXplb2YoYXJnX2J1ZikpOworICAgIHByb2Nhcmdzc2l6ZSA9IF9rZXJuX2FyZ21heDsKKyAgICBpZiAoc3lzY3RsKG1pYiwgbWliX3NpemUsIGFyZ19idWYsICZwcm9jYXJnc3NpemUsIE5VTEwsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciBpbiBQUk9DQVJHUzIgc3lzY3RsKCkgZm9yICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gMDsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9IDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1lbWNweSgmbmFyZ3MsYXJnX2J1Ziwgc2l6ZW9mKG5hcmdzKSk7CisgICAgfQorCisgICAgZXhlY19wYXRoID0gYXJnX2J1ZiArIHNpemVvZihuYXJncyk7CisgICAgbGVuID0gc3RybGVuKGV4ZWNfcGF0aCk7CisgICAgc3RybGNweShlbnRyeS0+aHJTV1J1blBhdGgsIGV4ZWNfcGF0aCwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCkpOworICAgIGlmIChsZW4gPiBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHRydW5jYXRpbmcgbG9uZyBydW4gcGF0aFxuIikpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhbc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMl0gPSAnJCc7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBsZW47CisKKyAgICAvKiogU2tpcCB0aGUgc2F2ZWQgZXhlY19wYXRoLiAqLworI2lmIDAKKyAgICBjcCA9IGV4ZWNfcGF0aCArIGxlbjsKKyNlbHNlCisgICAgZm9yIChjcCA9IGV4ZWNfcGF0aDsgY3AgPCAmYXJnX2J1Zltwcm9jYXJnc3NpemVdOyBjcCsrKSB7CisgICAgICAgIGlmICgqY3AgPT0gJ1wwJykgCisgICAgICAgICAgICBicmVhazsgLyogRW5kIG9mIGV4ZWNfcGF0aCByZWFjaGVkLiAqLworICAgIH0KKyAgICBpZiAoY3AgIT0gZXhlY19wYXRoICsgbGVuKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwgIiBPRkYgQlkgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIChpbnQpKChleGVjX3BhdGggKyBsZW4pIC0gY3ApKSk7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KCBjcCA9PSBleGVjX3BhdGggKyBsZW4gKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoY3AgPT0gJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkgeworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiB1bmV4cGVjdGVkIGVuZCBvZiBidWZmZXJcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBTa2lwIHRyYWlsaW5nICdcMCcgY2hhcmFjdGVycy4gKi8KKyAgICBmb3IgKDsgY3AgPCAmYXJnX2J1Zltwcm9jYXJnc3NpemVdOyBjcCsrKSB7CisgICAgICAgIGlmICgqY3AgIT0gJ1wwJykKKyAgICAgICAgICAgIGJyZWFrOyAvKiBCZWdpbm5pbmcgb2YgZmlyc3QgYXJndW1lbnQgcmVhY2hlZC4gKi8KKyAgICB9CisgICAgaWYgKGNwID09ICZhcmdfYnVmW3Byb2Nhcmdzc2l6ZV0pIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCIgdW5leHBlY3RlZCBlbmQgb2YgYnVmZmVyXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY29tbWFuZF9iZWcgPSBjcDsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIHRoYXQgdGhlIGNvbW1hbmQgaXMgJ1wwJy10ZXJtaW5hdGVkLiAgVGhpcyBwcm90ZWN0cworICAgICAqIGFnYWluc3QgbWFsaWNpb3VzIHByb2dyYW1zOyB1bmRlciBub3JtYWwgb3BlcmF0aW9uIHRoaXMgbmV2ZXIKKyAgICAgKiBlbmRzIHVwIGJlaW5nIGEgcHJvYmxlbS4uCisgICAgICovCisgICAgZm9yICg7IGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXTsgY3ArKykgeworICAgICAgICBpZiAoKmNwID09ICdcMCcpCisgICAgICAgICAgICBicmVhazsgLyogRW5kIG9mIGZpcnN0IGFyZ3VtZW50IHJlYWNoZWQuICovCisgICAgfQorICAgIGlmIChjcCA9PSAmYXJnX2J1Zltwcm9jYXJnc3NpemVdKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHVuZXhwZWN0ZWQgZW5kIG9mIGJ1ZmZlclxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGNvbW1hbmRfZW5kID0gY29tbWFuZCA9IGNwOworICAgIC0tbmFyZ3M7CisKKyAgICAvKgorICAgICAqIHNhdmUgYXJndW1lbnRzCisgICAgICovCisgICAgd2hpbGUoIG5hcmdzICYmIGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXSApIHsKKyAgICAgICAgLyoqIFNraXAgdHJhaWxpbmcgJ1wwJyBjaGFyYWN0ZXJzIGZyb20gcHJldiBhcmcuICovCisgICAgICAgIGZvciAoOyAoY3AgPCAmYXJnX2J1Zltwcm9jYXJnc3NpemVdKSAmJiAoKmNwID09IDApOyBjcCsrKSAKKyAgICAgICAgICAgIDsgLyogbm9vcCAqLworICAgICAgICBpZiAoY3AgPT0gJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBlZmZlY3RpdmVseSBhIGJyZWFrICovCisgICAgCisgICAgICAgIC8qKiBzYXZlIGFyZ04gc3RhcnQgKi8KKyAgICAgICAgYXJnTiA9IGNwOworICAgICAgICAtLW5hcmdzOworICAgICAgICBpZiAoMCA9PSBuYXJncykKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBlZmZlY3RpdmVseSBhIGJyZWFrICovCisKKyAgICAgICAgLyoqIFNraXAgdG8gZW5kIG9mIGFyZyAqLworICAgICAgICBmb3IgKDsgKGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkgJiYgKCpjcCAhPSAwKTsgY3ArKykgCisgICAgICAgICAgICA7ICAvKiBub29wICovCisgICAgICAgIGlmIChjcCA9PSAmYXJnX2J1Zltwcm9jYXJnc3NpemVdKQorICAgICAgICAgICAgY29udGludWU7IC8qIGVmZmVjdGl2ZWx5IGEgYnJlYWsgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBmb3Igb3ZlcnJ1biBpbnRvIGVudgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCgqYXJnTiAhPSAnLScpICYmIHN0cmNocihhcmdOLCc9JykpICB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsICIgKioqIE9WRVJSVU4gSU5UTyBFTlYgJWRcbiIsbmFyZ3MpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBhcmcKKyAgICAgICAgICovCisgICAgICAgIGlmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPCBzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKS0xKSB7CisgICAgICAgICAgICBzdHJsY2F0KCZlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNbZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbl0sCisgICAgICAgICAgICAgICAgICAgIGFyZ04sIHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLWVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4tMSk7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuID0gc3RybGVuKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycyk7CisgICAgICAgICAgICBpZiAoKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4rMiA8IHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLTEpICYmICgwICE9IG5hcmdzKSkgeworICAgICAgICAgICAgICAgIC8qIGFkZCBzcGFjZSBiZXR3ZWVuIHBhcmFtcyAqLworICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuKytdID0gJyAnOworICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuXSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHRydW5jYXRpbmcgbG9uZyBhcmcgbGlzdFxuIikpOworICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuKytdID0gJyQnOworICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuXSA9ICcwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoJyAnID09IGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuXSkKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzW2VudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4tLV0gPSAwOworCisgICAgCisgICAgLyogR2V0IHRoZSBiYXNlbmFtZSBvZiBjb21tYW5kLiAqLworICAgIGZvciAoY29tbWFuZC0tOyBjb21tYW5kID49IGNvbW1hbmRfYmVnOyBjb21tYW5kLS0pIHsKKyAgICAgICAgaWYgKCpjb21tYW5kID09ICcvJykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjb21tYW5kKys7CisgICAgCisgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBjb21tYW5kIGFuZCBjb3B5LiAqLworICAgIGlmIChzdHJuY21wKGNvbW1hbmQsIGVudHJ5LT5oclNXUnVuTmFtZSwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSkpIHsKKyAgICAgICAgc3RybGNweShlbnRyeS0+aHJTV1J1bk5hbWUsIGNvbW1hbmQsIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHN0cmxlbihlbnRyeS0+aHJTV1J1bk5hbWUpOworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsCisgICAgICAgICAgICAgICAgICAgICIgKip1cGRhdGVkIG5hbWUgdG8gJXNcbiIsIGVudHJ5LT5oclNXUnVuTmFtZSkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjZTZlNwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIHN3cnVuX2tpbmZvLmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIGt2bV9nZXRwcm9jcygpIGludGVyZmFjZSAtIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRAorICoKKyAqIE5COiBsYXRlciBGcmVlQlNEIGFuZCBPcGVuQlNEIHVzZSBkaWZmZXJlbnQga2luZm9fcHJvYyBzdHJ1Y3R1cmVzCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfS1ZNX0gKKyNpbmNsdWRlIDxrdm0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NZU0NUTF9ICisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUFJPQ19ICisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1VTRVJfSAorI2luY2x1ZGUgPHN5cy91c2VyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VWTV9VVk1fRVhURVJOQUxfSAorI2luY2x1ZGUgPHV2bS91dm1fZXh0ZXJuYWwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworZXh0ZXJuIGt2bV90ICprZDsKKworCisjaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDE0CisgICAgLyoKKyAgICAgKiBsYXRlciBGcmVlQlNEIGtpbmZvX3Byb2MgZmllbGQgbmFtZXMKKyAgICAgKi8KKyNkZWZpbmUgU1dSVU5fVEFCTEUJa2luZm9fcHJvYworI2RlZmluZSBTV1JVTl9LX1NUQVQJa2lfc3RhdAorI2RlZmluZSBTV1JVTl9LX1BJRAlraV9waWQKKyNkZWZpbmUgU1dSVU5fS19QUElECWtpX3BwaWQKKyNkZWZpbmUgU1dSVU5fS19USUQJa2lfdGlkCisjZGVmaW5lIFNXUlVOX0tfQ09NTQlraV9jb21tCisjZGVmaW5lIFNXUlVOX0tfRkxBRwlraV9mbGFnCisjZGVmaW5lIFNXUlVOX0tfQ0xBU1MJa2lfcHJpLnByaV9jbGFzcworCisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMiB8fCBkZWZpbmVkKG9wZW5ic2Q1KQorICAgIC8qCisgICAgICogbmV3ZXIgTmV0QlNELCBPcGVuQlNEIGtpbmZvX3Byb2MyIGZpZWxkIG5hbWVzCisgICAgICovCisjaWYgZGVmaW5lZChvcGVuYnNkNSkKKyNkZWZpbmUgU1dSVU5fVEFCTEUJa2luZm9fcHJvYworI2Vsc2UKKyNkZWZpbmUgU1dSVU5fVEFCTEUJa2luZm9fcHJvYzIKKyNlbmRpZgorI2RlZmluZSBTV1JVTl9LX1NUQVQJcF9zdGF0CisjZGVmaW5lIFNXUlVOX0tfUElECXBfcGlkCisjZGVmaW5lIFNXUlVOX0tfQ09NTQlwX2NvbW0KKyNkZWZpbmUgU1dSVU5fS19GTEFHCXBfZmxhZworLyogICAgICBTV1JVTl9LX0NMQVNTCW5vdCBkZWZpbmVkICAgICAqLworCisjZWxpZiBkZWZpbmVkKGRyYWdvbmZseSkKKyAgICAvKgorICAgICAqIERyYWdvbkZseSBpcyBkaWZmZXJlbnQgLi4uCisgICAgICovCisjZGVmaW5lIFNXUlVOX1RBQkxFCWtpbmZvX3Byb2MKKyNkZWZpbmUgU1dSVU5fS19TVEFUCWtwX3N0YXQKKyNkZWZpbmUgU1dSVU5fS19QSUQgCWtwX3BpZAorI2RlZmluZSBTV1JVTl9LX0NPTU0Ja3BfY29tbQorI2RlZmluZSBTV1JVTl9LX0ZMQUcJa3BfZmxhZ3MKKy8qICAgICAgU1dSVU5fS19DTEFTUwlub3QgZGVmaW5lZCAgICAgKi8KKworI2Vsc2UKKyAgICAvKgorICAgICAqIGVhcmx5IEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCBraW5mb19wcm9jIGZpZWxkIG5hbWVzCisgICAgICovCisjZGVmaW5lIFNXUlVOX1RBQkxFCWtpbmZvX3Byb2MKKyNkZWZpbmUgU1dSVU5fS19TVEFUCWtwX3Byb2MucF9zdGF0CisjZGVmaW5lIFNXUlVOX0tfUElECWtwX3Byb2MucF9waWQKKyNkZWZpbmUgU1dSVU5fS19DT01NCWtwX3Byb2MucF9jb21tCisjZGVmaW5lIFNXUlVOX0tfRkxBRwlrcF9wcm9jLnBfZmxhZworLyogICAgICBTV1JVTl9LX0NMQVNTCW5vdCBkZWZpbmVkICAgICAqLworI2VuZGlmCisKKy8qCisgKiAgRGVmaW5lIGR1bW15IHZhbHVlcyBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCBieSB0aGUgc3lzdGVtCisgKi8KKworI2lmZGVmIGRyYWdvbmZseQorCisvKgorICogRHJhZ29uRmx5IGlzIHNwZWNpYWwuIHBfc3RhdCBpcyBhbiBlbnVtIQorICovCisKKyNkZWZpbmUgU1JVTgkyMDAKKyNkZWZpbmUgU1NMRUVQCTIwMgorI2RlZmluZSBTV0FJVAkyMDMKKyNkZWZpbmUgU0xPQ0sJMjA1CisjZGVmaW5lIFNERUFECTIwOAorI2RlZmluZSBTT05QUk9DCTIwOQorCisKKyNlbHNlCisKKyNpZm5kZWYgU1JVTgorI2RlZmluZSBTUlVOCTIwMAkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QvT3BlbkJTRCwgbWlzc2luZyBpbiAgTmV0QlNEICovCisjZW5kaWYKKyNpZm5kZWYgU0FDVElWRQorI2RlZmluZSBTQUNUSVZFCTIwMQkvKiBEZWZpbmVkIGJ5ICBOZXRCU0QsIG1pc3NpbmcgaW4gRnJlZUJTRC9PcGVuQlNEICovCisjZW5kaWYKKyNpZm5kZWYgU1NMRUVQCisjZGVmaW5lIFNTTEVFUAkyMDIJLyogRGVmaW5lZCBieSBGcmVlQlNEL09wZW5CU0QsIG1pc3NpbmcgaW4gIE5ldEJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNXQUlUCisjZGVmaW5lIFNXQUlUCTIwMwkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QsIG1pc3NpbmcgaW4gIE5ldEJTRC9PcGVuQlNEICovCisjZW5kaWYKKyNpZm5kZWYgU1NUT1AKKyNkZWZpbmUgU1NUT1AJMjA0CS8qIERlZmluZWQgYnkgRnJlZUJTRC9OZXRCU0QvT3BlbkJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNMT0NLCisjZGVmaW5lIFNMT0NLCTIwNQkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QsIG1pc3NpbmcgaW4gTmV0QlNEL09wZW5CU0QgKi8KKyNlbmRpZgorI2lmbmRlZiBTSURMCisjZGVmaW5lIFNJREwJMjA2CS8qIERlZmluZWQgYnkgRnJlZUJTRC9OZXRCU0QvT3BlbkJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNaT01CCisjZGVmaW5lIFNaT01CCTIwNwkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QvTmV0QlNEL09wZW5CU0QgKi8KKyNlbmRpZgorI2lmbmRlZiBTREVBRAorI2RlZmluZSBTREVBRAkyMDgJLyogRGVmaW5lZCBieSBPcGVuQlNELCBtaXNzaW5nIGluIEZyZWVCU0QvTmV0QlNEICovCisjZW5kaWYKKyNpZm5kZWYgU09OUFJPQworI2RlZmluZSBTT05QUk9DCTIwOQkvKiBEZWZpbmVkIGJ5IE9wZW5CU0QsIG1pc3NpbmcgaW4gRnJlZUJTRC9OZXRCU0QgKi8KKyNlbmRpZgorCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpCit7CisjaWYgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAmJiBkZWZpbmVkKENUTF9LRVJOKSAmJiBkZWZpbmVkKEtFUk5fTUFYUFJPQykKKyAgICBleHRlcm4gaW50IF9zd3J1bl9tYXg7CisgICAgc2l6ZV90IG1heF9zaXplID0gc2l6ZW9mKF9zd3J1bl9tYXgpOworICAgIGludCBtYXhwcm9jX21pYltdID0geyBDVExfS0VSTiwgS0VSTl9NQVhQUk9DIH07CisgICAgc3lzY3RsKG1heHByb2NfbWliLCAyLCAmX3N3cnVuX21heCwgJm1heF9zaXplLCBOVUxMLCAwKTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBzdHJ1Y3QgU1dSVU5fVEFCTEUgICpwcm9jX3RhYmxlOworICAgIGludCAgICAgICAgICAgICAgICAgIG5wcm9jcywgaSwgcmM7CisgICAgY2hhciAgICAgICAgICAgICAgICAgYnVmW0JVRlNJWisxXSwgKiphcmd2OworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgaWYgKCAwID09IGtkICkgeworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIENhbid0IHF1ZXJ5IGt2bSBpbmZvXG4iKSk7CisgICAgICAgIHJldHVybiAxOyAgICAgLyogTm8gaGFuZGxlIGZvciByZXRyaWV2aW5nIHByb2Nlc3MgdGFibGUgKi8KKyAgICB9CisjaWYgZGVmaW5lZChvcGVuYnNkNSkKKyAgICBwcm9jX3RhYmxlID0ga3ZtX2dldHByb2NzKGtkLCBLRVJOX1BST0NfS1RIUkVBRCwgMCwgc2l6ZW9mKHN0cnVjdCBraW5mb19wcm9jKSwgJm5wcm9jcyApOworI2VsaWYgZGVmaW5lZChIQVZFX0tWTV9HRVRQUk9DMikKKyAgICBwcm9jX3RhYmxlID0ga3ZtX2dldHByb2MyKGtkLCBLRVJOX1BST0NfQUxMLCAwLCBzaXplb2Yoc3RydWN0IGtpbmZvX3Byb2MyKSwgJm5wcm9jcyApOworI2Vsc2UKKyAgICBwcm9jX3RhYmxlID0ga3ZtX2dldHByb2NzKGtkLCBLRVJOX1BST0NfQUxMLCAwLCAmbnByb2NzICk7CisjZW5kaWYKKyAgICBmb3IgKCBpPTAgOyBpPG5wcm9jczsgaSsrICkgeworICAgICAgICBpZiAoIDAgPT0gcHJvY190YWJsZVtpXS5TV1JVTl9LX1NUQVQgKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICggLTEgPT0gcHJvY190YWJsZVtpXS5TV1JVTl9LX1BJRCApCisgICAgICAgICAgICBjb250aW51ZTsKKyNpZmRlZiBTV1JVTl9LX1RJRAorCWlmICggMCA9PSBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfUFBJRCApCisJICAgIHByb2NfdGFibGVbaV0uU1dSVU5fS19QSUQgPSBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfVElEOworI2VuZGlmCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocHJvY190YWJsZVtpXS5TV1JVTl9LX1BJRCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZXJlIGFyZSB0d28gcG9zc2libGUgc291cmNlcyBmb3IgdGhlIGNvbW1hbmQgYmVpbmcgcnVuOgorICAgICAgICAgKiAgIC0gU1dSVU5fS19DT01NICAoZnJvbSB0aGUgcHJvY190YWJsZSBlbnRyeSBkaXJlY3RseSkKKyAgICAgICAgICogICAtIHJ1bm5pbmcga3ZtX2dldGFyZ3Ygb24gdGhlIHByb2Nlc3MgZW50cnkuCisgICAgICAgICAqCisgICAgICAgICAqIFdlJ2xsIHVzZSBhcmd2WzBdIChpZiBzZXQpIGZvciBoclNXUnVuUGF0aCwKKyAgICAgICAgICogICBzaW5jZSB0aGF0IG1pZ2h0IHBvdGVudGlhbGx5IGNvbnRhaW4gdGhlCisgICAgICAgICAqICAgYWJzb2x1dGUgcGF0aCB0byB0aGUgcnVubmluZyBiaW5hcnkuCisgICAgICAgICAqIFdlJ2xsIHVzZSBTV1JVTl9LX0NPTU0gZm9yIGhyU1dSdW5OYW1lLAorICAgICAgICAgKiAgIGFuZCBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgaHJTV1J1blBhdGgKKyAgICAgICAgICovCisjaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgYXJndiA9IGt2bV9nZXRhcmd2Migga2QsICYocHJvY190YWJsZVtpXSksIDApOworI2Vsc2UKKyAgICAgICAgYXJndiA9IGt2bV9nZXRhcmd2KCAga2QsICYocHJvY190YWJsZVtpXSksIEJVRlNJWik7CisjZW5kaWYKKworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc3ByaW50ZihlbnRyeS0+aHJTV1J1bk5hbWUsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfdGFibGVbaV0uU1dSVU5fS19DT01NKTsKKworICAgICAgICBpZiAoYXJndiAmJiAqYXJndikgeworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNwcmludGYoZW50cnktPmhyU1dSdW5QYXRoLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1lbWNweSggZW50cnktPmhyU1dSdW5QYXRoLCBlbnRyeS0+aHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiApOworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IGVudHJ5LT5oclNXUnVuTmFtZV9sZW47CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTdGl0Y2ggdG9nZXRoZXIgdGhlIHJlc3Qgb2YgYXJndltdIHRvIGJ1aWxkIGhyU1dSdW5QYXJhbWV0ZXJzCisgICAgICAgICAqCisgICAgICAgICAqIE5vdGU6CisgICAgICAgICAqICAgV2UgYWRkIGEgc2VwYXJhdGluZyBzcGFjZSBiZWZvcmUgZWFjaCBhcmd2W10gcGFyYW1ldGVyLAorICAgICAgICAgKiAgICppbmNsdWRpbmcqIHRoZSBmaXJzdCBvbmUuICBTbyB3ZSBuZWVkIHRvIHNraXAgdGhpcworICAgICAgICAgKiAgIGxlYWRpbmcgc3BhY2UgKGJ1ZlswXSkgd2hlbiBzZXR0aW5nIGhyU1dSdW5QYXJhbWV0ZXJzLgorICAgICAgICAgKiBUaGlzIGlzIGFsc28gd2h5IHdlIGNsZWFyZWQgdGhlIGZpcnN0ICp0d28qIGNoYXJhY3RlcnMKKyAgICAgICAgICogICBpbiB0aGUgYnVmZmVyIGluaXRpYWxseS4gSWYgdGhlcmUgd2VyZSBubyBjb21tYW5kLWxpbmUKKyAgICAgICAgICogICBhcmd1bWVudHMsIHRoZW4gYnVmWzFdIHdvdWxkIHN0aWxsIGJlIGEgbnVsbCBzdHJpbmcuCisgICAgICAgICAqLworICAgICAgICBidWZbMF0gPSAnXDAnOworICAgICAgICBidWZbMV0gPSAnXDAnOworICAgICAgICBpZiAoYXJndikKKyAgICAgICAgICAgIGFyZ3YrKzsgICAgLyogU2tpcCBhcmd2WzBdICovCisgICAgICAgIHdoaWxlICggYXJndiAmJiAqYXJndiApIHsKKyAgICAgICAgICAgIHN0cmxjYXQoYnVmLCAiICIsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgIHN0cmxjYXQoYnVmLCAqYXJndiwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgYXJndisrOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJsZW4oYnVmKSA+PSBCVUZTSVotMTApCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicGFyYW1zICVsdS8lZCAlc1xuIiwgc3RybGVuKGJ1ZiksIEJVRlNJWiwgYnVmKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9CisgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycywgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpIC0gMSwgYnVmKzEpOworCisgICAgICAgIGVudHJ5LT5oclNXUnVuVHlwZSA9IChQX1NZU1RFTSAmIHByb2NfdGFibGVbaV0uU1dSVU5fS19GTEFHKSAKKyNpZmRlZiBTV1JVTl9LX0NMQVNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKChQUklfSVRIRCA9PSBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfQ0xBU1MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMyAgLyogZGV2aWNlIGRyaXZlciAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDIgIC8qIG9wZXJhdGluZyBzeXN0ZW0gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNCAgLyogIGFwcGxpY2F0aW9uICAgICAqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNCAgLyogIGFwcGxpY2F0aW9uICAgICAqLworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworI2lmZGVmIG5ldGJzZDUKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW2ldLlNXUlVOX0tfU1RBVCkgeworCWNhc2UgTFNPTlBST0M6CisgICAgICAgIGNhc2UgTFNSVU46ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFNTTEVFUDogZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExTSURMOgorCWNhc2UgTFNTVVNQRU5ERUQ6CisgICAgICAgIGNhc2UgTFNTVE9QOiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTFNERUFEOgorICAgICAgICBjYXNlIExTWk9NQjogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworCQkgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAKKwkJICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisJCSAgICAgIHNubXBfbG9nKExPR19FUlIsICJCYWQgcHJvY2VzcyBzdGF0dXMgJWMgKDB4JXgpXG4iLCBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfU1RBVCwgcHJvY190YWJsZVtpXS5TV1JVTl9LX1NUQVQpOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZWxzZQorICAgICAgICBzd2l0Y2ggKHByb2NfdGFibGVbaV0uU1dSVU5fS19TVEFUICYgMHhGRikgeworICAgICAgICBjYXNlIFNPTlBST0M6CisgICAgICAgIGNhc2UgU1JVTjogICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NMRUVQOgorCWNhc2UgU0FDVElWRToKKyAgICAgICAgY2FzZSBTV0FJVDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0lETDoKKyAgICAgICAgY2FzZSBTU1RPUDoKKyAgICAgICAgY2FzZSBTTE9DSzogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTREVBRDoKKyAgICAgICAgY2FzZSBTWk9NQjogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsgICAvKiBpLmUuICJub3QgbG9hZGVkIiAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7ICAgLyogQWN0dWFsbHkgaW52YWxpZCAgKi8KKwkJICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkJhZCBwcm9jZXNzIHN0YXR1cyAlYyAoMHgleClcbiIsIHByb2NfdGFibGVbaV0uU1dSVU5fS19TVEFULCBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfU1RBVCk7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAKKyNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKKyAgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSAocHJvY190YWJsZVtpXS5raV9ydXNhZ2UucnVfdXRpbWUudHZfc2VjKjEwMDAwMDAgKyBwcm9jX3RhYmxlW2ldLmtpX3J1c2FnZS5ydV91dGltZS50dl91c2VjKSAvIDEwMDAwOworCSBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ua2lfcnVzYWdlLnJ1X3N0aW1lLnR2X3NlYyoxMDAwMDAwICsgcHJvY190YWJsZVtpXS5raV9ydXNhZ2UucnVfc3RpbWUudHZfdXNlYykgLyAxMDAwMDsKKwkgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLmtpX3J1c2FnZV9jaC5ydV91dGltZS50dl9zZWMqMTAwMDAwMCArIHByb2NfdGFibGVbaV0ua2lfcnVzYWdlX2NoLnJ1X3V0aW1lLnR2X3VzZWMpIC8gMTAwMDA7CisJIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY190YWJsZVtpXS5raV9ydXNhZ2VfY2gucnVfc3RpbWUudHZfc2VjKjEwMDAwMDAgKyBwcm9jX3RhYmxlW2ldLmtpX3J1c2FnZV9jaC5ydV9zdGltZS50dl91c2VjKSAvIDEwMDAwOworCSBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gcHJvY190YWJsZVtpXS5raV9yc3NpemUgKiAoZ2V0cGFnZXNpemUoKS8xMDI0KTsgIC8qIGluIGtCICovCisjZWxpZiBkZWZpbmVkKEhBVkVfS1ZNX0dFVFBST0MyKSB8fCBkZWZpbmVkKG9wZW5ic2Q1KQorICAgICAgICAvKgorICAgICAgICAgKiBuZXdlciBOZXRCU0QsIE9wZW5CU0QKKyAgICAgICAgICovCisJZW50cnktPmhyU1dSdW5QZXJmQ1BVID0gcHJvY190YWJsZVtpXS5wX3J0aW1lX3NlYyoxMDA7CisJZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IHByb2NfdGFibGVbaV0ucF9ydGltZV91c2VjIC8gMTAwMDA7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9IHByb2NfdGFibGVbaV0ucF92bV9yc3NpemU7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAoZ2V0cGFnZXNpemUoKSAvIDEwMjQpOworI2VsaWYgZGVmaW5lZChkcmFnb25mbHkpICYmIF9fRHJhZ29uRmx5X3ZlcnNpb24gPj0gMTkwMDAwCisJZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IHByb2NfdGFibGVbaV0ua3BfbHdwLmtsX3V0aWNrczsKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9sd3Aua2xfc3RpY2tzOworCWVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSBwcm9jX3RhYmxlW2ldLmtwX2x3cC5rbF9pdGlja3M7CisJZW50cnktPmhyU1dSdW5QZXJmQ1BVID0gZW50cnktPmhyU1dSdW5QZXJmQ1BVIC8gMTAwMDA7CisKKwllbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gcHJvY190YWJsZVtpXS5rcF92bV9tYXBfc2l6ZSAvIDEwMjQ7CisjZWxpZiBkZWZpbmVkKGRyYWdvbmZseSkKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gcHJvY190YWJsZVtpXS5rcF9lcHJvYy5lX3V0aWNrczsKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9lcHJvYy5lX3N0aWNrczsKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9lcHJvYy5lX2l0aWNrczsKKworCWVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSBwcm9jX3RhYmxlW2ldLmtwX3ZtX21hcF9zaXplIC8gMTAyNDsKKworI2Vsc2UKKyAgICAgICAgLyoKKyAgICAgICAgICogZWFybHkgRnJlZUJTRCwgTmV0QlNELCBPcGVuQlNECisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gcHJvY190YWJsZVtpXS5rcF9wcm9jLnBfdXRpY2tzOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9wcm9jLnBfc3RpY2tzOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9wcm9jLnBfaXRpY2tzOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gcHJvY190YWJsZVtpXS5rcF9lcHJvYy5lX3ZtLnZtX3Jzc2l6ZTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICo9IChnZXRwYWdlc2l6ZSgpIC8gMTAyNCk7CisjZW5kaWYKKyAgICB9CisgICAgLyoKKyAgICAgKiAncHJvY190YWJsZScgaXMgb3duZWQgYnkgdGhlIGt2bSBsaWJyYXJ5LAorICAgICAqICAgc28gc2hvdWxkbid0IGJlIGZyZWVkIGhlcmUuCisgICAgICovCisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwibG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU2Y2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9rdm1fcHJvYy5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogc3dydW5fa3ZtX3Byb2MuYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAga3ZtX2dldHByb2MoKSBpbnRlcmZhY2UgLSBTb2xhcmlzCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1VTRVJfSAorI2RlZmluZSBfS01FTVVTRVIKKyNpbmNsdWRlIDxzeXMvdXNlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUFJPQ19ICisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZgorICAgIC8qIFhYWCAtIHNob3VsZCByZWFsbHkgYmUgcHJvdGVjdGVkICovCisjaW5jbHVkZSA8c3lzL3Zhci5oPgorCisjaWZkZWYgSEFWRV9ESVJFTlRfSAorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9LVk1fSAorI2luY2x1ZGUgPGt2bS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9LU1RBVF9ICisjaW5jbHVkZSA8a3N0YXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKyNpbmNsdWRlICJrZXJuZWwuaCIKKyNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIGV4dGVybiBpbnQgX3N3cnVuX21heDsKKyAgICBrc3RhdF9jdGxfdCAqa3NjOworICAgIGtzdGF0X3QgICAgICprczsKKyAgICBzdHJ1Y3QgdmFyICAgdjsKKworICAgIGlmIChOVUxMICE9IChrc2MgPSBrc3RhdF9vcGVuKCkpKSB7CisgICAgICAgIGlmICgoTlVMTCAhPSAoa3MgID0ga3N0YXRfbG9va3VwKGtzYywgInVuaXgiLCAwLCAidmFyIikpKSAmJgorICAgICAgICAgICAgKCAtMSAgIT0ga3N0YXRfcmVhZChrc2MsIGtzLCAmdiApKSkgeworICAgICAgICAgICAgX3N3cnVuX21heCA9IHYudl9wcm9jOworICAgICAgICB9CisgICAgICAgIGtzdGF0X2Nsb3NlKGtzYyk7CisgICAgfQorICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAgICpwcm9jZGlyID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAgICpwcm9jZW50cnlfcDsKKyAgICBzdHJ1Y3QgcHJvYyAgICAgICAgICpwcm9jX2J1ZjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBwaWQsIHJjLCBpOworICAgIGNoYXIgICAgICAgICAgICAgICAgKmNwOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworICAgIAorICAgIC8qCisgICAgICogRXZlbiBpZiB3ZSdyZSB1c2luZyBrdm1fcHJvYygpIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCisgICAgICogICBhYm91dCBhIHBhcnRpY3VsYXIgcHJvY2Vzcywgd2Ugc2VlbSB0byB1c2UgL3Byb2MgdG8gZ2V0CisgICAgICogICB0aGUgaW5pdGlhbCBsaXN0IG9mIHByb2Nlc3NlcyB0byByZXBvcnQgb24uCisgICAgICovCisgICAgcHJvY2RpciA9IG9wZW5kaXIoIi9wcm9jIik7CisgICAgaWYgKCBOVUxMID09IHByb2NkaXIgKSB7CisgICAgICAgIHNubXBfbG9nKCBMT0dfRVJSLCAiRmFpbGVkIHRvIG9wZW4gL3Byb2MiICk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdhbGsgdGhyb3VnaCB0aGUgbGlzdCBvZiBwcm9jZXNzZXMgaW4gdGhlIC9wcm9jIHRyZWUKKyAgICAgKi8KKyAgICB3aGlsZSAoIE5VTEwgIT0gKHByb2NlbnRyeV9wID0gcmVhZGRpciggcHJvY2RpciApKSkgeworICAgICAgICBwaWQgPSBhdG9pKCBwcm9jZW50cnlfcC0+ZF9uYW1lICk7CisgICAgICAgIGlmICggMCA9PSBwaWQgKQorICAgICAgICAgICAgY29udGludWU7ICAgLyogUHJlc3VtYWJseSAnLicgb3IgJy4uJyAqLworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICBpZiAoTlVMTCA9PSAocHJvY19idWYgPSBrdm1fZ2V0cHJvYygga2QsIHBpZCkpKSB7CisgICAgICAgICAgICAvKiByZWxlYXNlIGVudHJ5ICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNwcmludGYoZW50cnktPmhyU1dSdW5OYW1lLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19idWYtPnBfdXNlci51X2NvbW0pOworICAgICAgICAvKgorICAgICAgICAgKiAgU3BsaXQgdV9wc2FyZ3MgaW50byB0d286CisgICAgICAgICAqICAgICBhcmd2WzBdICAgaXMgaHJTV1J1blBhdGgKKyAgICAgICAgICogICAgIGFyZ3ZbMS4uXSBpcyBoclNXUnVuUGFyYW1ldGVycworICAgICAgICAgKi8KKyAgICAgICAgZm9yICggY3AgPSBwcm9jX2J1Zi0+cF91c2VyLnVfcHNhcmdzOyAnICcgPT0gKmNwOyBjcCsrICkKKyAgICAgICAgICAgIDsKKyAgICAgICAgKmNwID0gJ1wwJzsgICAgLyogRW5kIG9mIGFyZ3ZbMF0gKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNwcmludGYoZW50cnktPmhyU1dSdW5QYXRoLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2J1Zi0+cF91c2VyLnVfcHNhcmdzKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9CisgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycywgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpIC0gMSwgY3AgKyAxKTsKKyAgICAgICAgKmNwID0gJyAnOyAgICAgLyogUmVzdG9yZSB1X3BzYXJncyB2YWx1ZSAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIGNoZWNrIGZvciBzeXN0ZW0gcHJvY2Vzc2VzCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSAoU1NZUyAmIHByb2NfYnVmLT5wX2ZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgICAvKiBrZXJuZWwgcHJvY2VzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA0ICAgLyogIGFwcGxpY2F0aW9uICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworICAgICAgICBzd2l0Y2ggKHByb2NfYnVmLT5wX3N0YXQpIHsKKyAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICBjYXNlIFNPTlBST0M6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTTEVFUDogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU1RPUDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0lETDoKKyAgICAgICAgY2FzZSBTWk9NQjoKKyAgICAgICAgZGVmYXVsdDogICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IChwcm9jX2J1Zi0+cF91dGltZSAqIDEwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY19idWYtPnBfc3RpbWUgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gIHByb2NfYnVmLT5wX3N3cnNzOworCQkvKiBYWFggLSBpcyB0aGlzIHJlcG9ydGVkIGluIGtCPyAqLworICAgIH0KKyAgICBjbG9zZWRpciggcHJvY2RpciApOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbmxpc3QuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbmxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGI2YzljCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9ubGlzdC5jCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogc3dydW5fbmxpc3QuYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgbmxpc3QoKSBpbnRlcmZhY2UKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIGV4dGVybiBpbnQgX3N3cnVuX21heDsKKworICAgIGF1dG9fbmxpc3QoICBQUk9DX1NZTUJPTCwgMCwgMCk7CisgICAgYXV0b19ubGlzdCggTlBST0NfU1lNQk9MLCAoY2hhciAqKSZfc3dydW5fbWF4LCBzaXplb2YoaW50KSk7CisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHN0cnVjdCBwcm9jICAgICAgICAgKnByb2NfdGFibGU7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcHJvY190eXBlX2Jhc2U7CisgICAgaW50ICAgICAgICAgICAgICAgICAgbnByb2MsIGksIHJjOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgYXV0b19ubGlzdCggTlBST0NfU1lNQk9MLCAoY2hhciAqKSZucHJvYywgc2l6ZW9mKGludCkpOworICAgIHByb2NfdGFibGUgPSAoc3RydWN0IHByb2MgKikgbWFsbG9jKG5wcm9jKihzaXplb2Yoc3RydWN0IHByb2MpKSk7CisKKyAgICBhdXRvX25saXN0KCAgUFJPQ19TWU1CT0wsIChjaGFyICopJnByb2NfdGFibGVfYmFzZSwgc2l6ZW9mKGludCkpOworICAgIE5FVFNOTVBfS0xPT0tVUChwcm9jX3RhYmxlX2Jhc2UsIChjaGFyICopcHJvY190YWJsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnByb2MqKHNpemVvZihzdHJ1Y3QgcHJvYykpKTsKKworICAgIGZvciAoIGk9MCA7IGk8bnByb2M7IGkrKyApIHsKKyAgICAgICAgaWYgKDAgPT0gcHJvY190YWJsZVtpXS5wX3N0YXQpCisgICAgICAgICAgICBjb250aW51ZTsJLyogU2tpcCB1bnVzZWQgZW50cmllcyAqLworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHByb2NfdGFibGVbaV0ucF9waWQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBYWFggLSBXaGF0IGluZm9ybWF0aW9uIGRvZXMgJ3N0cnVjdCBwcm9jJyBjb250YWluPworICAgICAgICAgKi8KKyAgICAgICAgCisvKgorIEFwcGFyZW50bHkgbm8gcHJvY2VzcyBuYW1lL2FyZ3VtZW50IGluZm9ybWF0aW9uCisgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBwcm9jX3RhYmxlW2ldLj8/Pyk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBwcm9jX3RhYmxlW2ldLj8/Pyk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCA/Pz8pOworICovCisKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW2ldLnBfc3RhdCkgeworLyogWFhYIC0gd2hpY2ggbmFtZXMgdG8gdXNlID8/ICovCisgICAgICAgIGNhc2UgU0FDVElWRToKKyAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICBjYXNlIFNPTlBST0M6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTV0FQOgorICAgICAgICBjYXNlIFNTTEVFUDoKKyAgICAgICAgY2FzZSBTV0FJVDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NUT1A6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1pPTUI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSAocHJvY190YWJsZVtpXS5wX3V0aW1lLnR2X3NlYyAgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ucF91dGltZS50dl91c2VjIC8gMTAwMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ucF9zdGltZS50dl9zZWMgICogMTAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLnBfc3RpbWUudHZfdXNlYyAvIDEwMDAwKTsKKyAgICAvKgorICAgICBvciBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gcHJvY190YWJsZVtpXS5wX3RpbWU7CisgICAgICovCisgICAgfQorICAgIGZyZWUocHJvY190YWJsZSk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9udWxsLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX251bGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNkNDBlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9udWxsLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIHN3cnVuX251bGwuYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgZHVtbXkgaW50ZXJmYWNlIGZvciBub24tc3VwcG9ydGVkIHN5c3RlbXMKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTYxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIHN3cnVuX3Byb2Nmc19wc2luZm8uYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgL3Byb2Mve3BpZH0vcHNpbmZvIGludGVyZmFjZSAtIFNvbGFyaXMKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2RlZmluZSBIQVZFX1NZU19QUk9DRlNfSCAgICAvKiBYWFggLSBOZWVkcyBhIGNvbmZpZ3VyZSBjaGVjayEgKi8KKyNpZmRlZiBIQVZFX1NZU19QUk9DRlNfSAorI2RlZmluZSBfS0VSTkVMICAgICAgICAgICAgICAvKiBGb3IgcHNpbmZvX3QgKi8KKyNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+CisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUFJPQ19ICisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAgICpwcm9jZGlyID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAgICpwcm9jZW50cnlfcDsKKyAgICBwc2luZm9fdCAgICAgICAgICAgICBwc2luZm87CisgICAgaW50ICAgICAgICAgICAgICAgICAgcGlkLCByYywgZmQ7CisgICAgY2hhciAgICAgICAgICAgICAgICAqY3AsIGJ1Zls1MTJdOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgcHJvY2RpciA9IG9wZW5kaXIoIi9wcm9jIik7CisgICAgaWYgKCBOVUxMID09IHByb2NkaXIgKSB7CisgICAgICAgIHNubXBfbG9nKCBMT0dfRVJSLCAiRmFpbGVkIHRvIG9wZW4gL3Byb2MiICk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdhbGsgdGhyb3VnaCB0aGUgbGlzdCBvZiBwcm9jZXNzZXMgaW4gdGhlIC9wcm9jIHRyZWUKKyAgICAgKi8KKyAgICB3aGlsZSAoIE5VTEwgIT0gKHByb2NlbnRyeV9wID0gcmVhZGRpciggcHJvY2RpciApKSkgeworICAgICAgICBwaWQgPSBhdG9pKCBwcm9jZW50cnlfcC0+ZF9uYW1lICk7CisgICAgICAgIGlmICggMCA9PSBwaWQgKQorICAgICAgICAgICAgY29udGludWU7ICAgLyogUHJlc3VtYWJseSAnLicgb3IgJy4uJyAqLworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IGV4dHJhY3QgdGhlIGludGVyZXN0aW5nIGluZm9ybWF0aW9uCisgICAgICAgICAqICAgZnJvbSB0aGUgdmFyaW91cyAvcHJvY3tQSUR9LyBpbnRlcmZhY2UgZmlsZXMKKyAgICAgICAgICovCisKKyAgICAgICAgc25wcmludGYoIGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvcHJvYy8lZC9wc2luZm8iLCBwaWQgKTsKKyAgICAgICAgZmQgPSBvcGVuKCBidWYsIE9fUkRPTkxZICk7CisgICAgICAgIHJlYWQoIGZkLCAmcHNpbmZvLCBzaXplb2YocHNpbmZvKSk7CisgICAgICAgIGNsb3NlKGZkKTsKKworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuCisgICAgICAgICAgICA9IHNwcmludGYoZW50cnktPmhyU1dSdW5OYW1lLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgcHNpbmZvLnByX2ZuYW1lKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIFNwbGl0IHByX3BzYXJncyBpbnRvIHR3bzoKKyAgICAgICAgICogICAgIGFyZ3ZbMF0gICBpcyBoclNXUnVuUGF0aAorICAgICAgICAgKiAgICAgYXJndlsxLi5dIGlzIGhyU1dSdW5QYXJhbWV0ZXJzCisgICAgICAgICAqLworICAgICAgICBmb3IgKCBjcCA9IHBzaW5mby5wcl9wc2FyZ3M7ICcgJyA9PSAqY3A7IGNwKysgKQorICAgICAgICAgICAgOworICAgICAgICAqY3AgPSAnXDAnOyAgICAvKiBFbmQgb2YgYXJndlswXSAqLworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuCisgICAgICAgICAgICA9IHNwcmludGYoZW50cnktPmhyU1dSdW5QYXRoLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgcHNpbmZvLnByX3BzYXJncyk7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbgorICAgICAgICAgICAgPSBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycywgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycykgLSAxLCBjcCsxKTsKKyAgICAgICAgKmNwID0gJyAnOyAgICAgLyogUmVzdG9yZSBwcl9wc2FyZ3MgdmFsdWUgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBmb3Igc3lzdGVtIHByb2Nlc3NlcworICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5UeXBlID0gKFBSX0lTU1lTICYgcHNpbmZvLnByX2ZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgICAvKiBrZXJuZWwgcHJvY2VzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA0ICAgLyogIGFwcGxpY2F0aW9uICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworICAgICAgICBzd2l0Y2ggKHBzaW5mby5wcl9sd3AucHJfc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICBjYXNlIFNPTlBST0M6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTTEVFUDogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU1RPUDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0lETDoKKyAgICAgICAgY2FzZSBTWk9NQjoKKyAgICAgICAgZGVmYXVsdDogICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IChwc2luZm8ucHJfdGltZS50dl9zZWMgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHBzaW5mby5wcl90aW1lLnR2X25zZWMgLyAxMDAwMDAwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSAgcHNpbmZvLnByX3Jzc2l6ZTsKKwkJLyogWFhYIC0gaXMgdGhpcyByZXBvcnRlZCBpbiBrQj8gKi8KKyAgICB9CisgICAgY2xvc2VkaXIoIHByb2NkaXIgKTsKKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5ZTI2OQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogc3dydW5fcHJvY2ZzX2xpbnV4LmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIC9wcm9jL3twaWR9L3N0YXR1cyBpbnRlcmZhY2UgLSBMaW51eAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJTlVYX1RBU0tTX0gKKyNpbmNsdWRlIDxsaW51eC90YXNrcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCitzdGF0aWMgbG9uZyBwYWdlc2l6ZTsKK3N0YXRpYyBsb25nIHNjX2Nsa190Y2s7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworI2lmZGVmIEhBVkVfTElOVVhfVEFTS1NfSAorICAgIGV4dGVybiBpbnQgX3N3cnVuX21heCA9IE5SX1RBU0tTOyAgIC8qIGZyb20gPGxpbnV4L3Rhc2tzLmg+ICovCisjZW5kaWYKKyAgICAKKyAgICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgICAgc2NfY2xrX3RjayA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAgICpwcm9jZGlyID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAgICpwcm9jZW50cnlfcDsKKyAgICBGSUxFICAgICAgICAgICAgICAgICpmcDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBwaWQsIGk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgY3B1OworICAgIGNoYXIgICAgICAgICAgICAgICAgIGJ1ZltCVUZTSVpdLCBidWYyW0JVRlNJWl0sICpjcCwgKmNwMTsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKyAgICAKKyAgICBwcm9jZGlyID0gb3BlbmRpcigiL3Byb2MiKTsKKyAgICBpZiAoIE5VTEwgPT0gcHJvY2RpciApIHsKKyAgICAgICAgc25tcF9sb2coIExPR19FUlIsICJGYWlsZWQgdG8gb3BlbiAvcHJvYyIgKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogV2FsayB0aHJvdWdoIHRoZSBsaXN0IG9mIHByb2Nlc3NlcyBpbiB0aGUgL3Byb2MgdHJlZQorICAgICAqLworICAgIHdoaWxlICggTlVMTCAhPSAocHJvY2VudHJ5X3AgPSByZWFkZGlyKCBwcm9jZGlyICkpKSB7CisgICAgICAgIHBpZCA9IGF0b2koIHByb2NlbnRyeV9wLT5kX25hbWUgKTsKKyAgICAgICAgaWYgKCAwID09IHBpZCApCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBQcmVzdW1hYmx5ICcuJyBvciAnLi4nICovCisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShwaWQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IGV4dHJhY3QgdGhlIGludGVyZXN0aW5nIGluZm9ybWF0aW9uCisgICAgICAgICAqICAgZnJvbSB0aGUgdmFyaW91cyAvcHJvY3tQSUR9LyBpbnRlcmZhY2UgZmlsZXMKKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogICBOYW1lOiAgcHJvY2VzcyBuYW1lCisgICAgICAgICAqLworICAgICAgICBzbnByaW50ZiggYnVmMiwgQlVGU0laLCAiL3Byb2MvJWQvc3RhdHVzIiwgcGlkICk7CisgICAgICAgIGZwID0gZm9wZW4oIGJ1ZjIsICJyIiApOworICAgICAgICBpZiAoIWZwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7IC8qIGZpbGUgKHByb2Nlc3MpIHByb2JhYmx5IHdlbnQgYXdheSAqLworCX0KKyAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBpZiAoZmdldHMoIGJ1ZiwgQlVGU0laLTEsIGZwICkgPT0gTlVMTCkgeworICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZnApOworCisgICAgICAgIGZvciAoIGNwID0gYnVmOyAqY3AgIT0gJzonOyBjcCsrICkKKyAgICAgICAgICAgIDsKKyAgICAgICAgd2hpbGUgKGlzc3BhY2UoKigrK2NwKSkpCS8qIFNraXAgJzonIGFuZCBmb2xsb3dpbmcgc3BhY2VzICovCisgICAgICAgICAgICA7CisgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLTEsICIlcyIsIGNwKTsKKyAgICAgICAgaWYgKCAnXG4nID09IGVudHJ5LT5oclNXUnVuTmFtZVsgZW50cnktPmhyU1dSdW5OYW1lX2xlbi0xIF0pIHsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZVsgZW50cnktPmhyU1dSdW5OYW1lX2xlbi0xIF0gPSAnXDAnOworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbi0tOyAgICAgICAgICAgLyogU3RhbXAgb24gdHJhaWxpbmcgbmV3bGluZSAqLworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIENvbW1hbmQgTGluZToKKyAgICAgICAgICogICAgIGFyZ3ZbMF0gJ1wwJyBhcmd2WzFdICdcMCcgLi4uLgorICAgICAgICAgKi8KKyAgICAgICAgc25wcmludGYoIGJ1ZjIsIEJVRlNJWiwgIi9wcm9jLyVkL2NtZGxpbmUiLCBwaWQgKTsKKyAgICAgICAgZnAgPSBmb3BlbiggYnVmMiwgInIiICk7CisgICAgICAgIGlmICghZnApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsgLyogZmlsZSAocHJvY2VzcykgcHJvYmFibHkgd2VudCBhd2F5ICovCisgICAgICAgIH0KKyAgICAgICAgZW50cnktPmhyU1dSdW5UeXBlID0gSFJTV1JVTlRZUEVfQVBQTElDQVRJT047CisgICAgICAgIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKyAgICAgICAgY3AgPSBmZ2V0cyggYnVmLCBCVUZTSVotMSwgZnAgKTsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiAgICAgYXJndlswXSAgIGlzIGhyU1dSdW5QYXRoCisgICAgICAgICAgICAgKi8gCisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5QYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMSwgIiVzIiwgYnVmKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBTdGl0Y2ggdG9nZXRoZXIgYXJndlsxLi5dIHRvIGNvbnN0cnVjdCBoclNXUnVuUGFyYW1ldGVycworICAgICAgICAgICAgICovCisgICAgICAgICAgICBjcCA9IGJ1ZiArIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4rMTsKKyAgICAgICAgICAgIHdoaWxlICggMSApIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKmNwKQorICAgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgIGlmICggJ1wwJyA9PSAqKGNwKzEpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAvKiAnXDAnJ1wwJyA9PiBFbmQgb2YgY29tbWFuZCBsaW5lICovCisgICAgICAgICAgICAgICAgKmNwID0gJyAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbgorICAgICAgICAgICAgICAgID0gc3ByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gKyAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIGVtcHR5IC9wcm9jL1BJRC9jbWRsaW5lLCBpdCdzIHByb2JhYmx5IGEga2VybmVsIHRocmVhZCAqLworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IDA7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuID0gMDsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuVHlwZSA9IEhSU1dSVU5UWVBFX09QRVJBVElOR1NZU1RFTTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqICAge3h4eH0ge3h4eH0gU1RBVFVTICB7eHh4fSoxMCAgVVRJTUUgU1RJTUUgIHt4eHh9KjggUlNTCisgICAgICAgICAqLworICAgICAgICBzbnByaW50ZiggYnVmLCBCVUZTSVosICIvcHJvYy8lZC9zdGF0IiwgcGlkICk7CisgICAgICAgIGZwID0gZm9wZW4oIGJ1ZiwgInIiICk7CisgICAgICAgIGlmICghZnApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsgLyogZmlsZSAocHJvY2VzcykgcHJvYmFibHkgd2VudCBhd2F5ICovCisJfQorICAgICAgICBpZiAoZmdldHMoIGJ1ZiwgQlVGU0laLTEsIGZwICkgPT0gTlVMTCkgeworICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZnApOworCisgICAgICAgIGNwID0gYnVmOworICAgICAgICB3aGlsZSAoICcgJyAhPSAqKGNwKyspKSAgICAvKiBTa2lwIGZpcnN0IGZpZWxkICovCisgICAgICAgICAgICA7CisgICAgICAgIGNwMSA9IGNwOyAgICAgICAgICAgICAgICAgIC8qIFNraXAgc2Vjb25kIGZpZWxkICovCisgICAgICAgIHdoaWxlICgqY3AxKSB7CisgICAgICAgICAgICBpZiAoKmNwMSA9PSAnKScpIGNwID0gY3AxOworICAgICAgICAgICAgY3AxKys7CisgICAgICAgIH0KKyAgICAgICAgY3AgKz0gMjsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoKmNwKSB7CisgICAgICAgIGNhc2UgJ1InOiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1MnOiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOworICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgY2FzZSAnVCc6ICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1onOgorICAgICAgICBkZWZhdWx0OiAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvciAoaT0xMTsgaTsgaS0tKSB7ICAgLyogU2tpcCBTVEFUVVMgKyAxMCBmaWVsZHMgKi8KKyAgICAgICAgICAgIHdoaWxlICgnICcgIT0gKigrK2NwKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBjcCsrOworICAgICAgICB9CisgICAgICAgIGNwdSAgPSBhdG9sKCBjcCApOyAgICAgICAgICAgICAgICAgICAgIC8qICB1dGltZSAqLworICAgICAgICB3aGlsZSAoICcgJyAhPSAqKCsrY3ApKQorICAgICAgICAgICAgOworICAgICAgICBjcHUgKz0gYXRvbCggY3AgKTsgICAgICAgICAgICAgICAgICAgICAvKiArc3RpbWUgKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IGNwdSAqIDEwMCAvIHNjX2Nsa190Y2s7CisKKyAgICAgICAgZm9yIChpPTk7IGk7IGktLSkgeyAgIC8qIFNraXAgc3RpbWUgKyA4IGZpZWxkcyAqLworICAgICAgICAgICAgd2hpbGUgKCcgJyAhPSAqKCsrY3ApKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGNwKys7CisgICAgICAgIH0KKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9IGF0b2woIGNwICk7ICAgICAgIC8qIHJzcyAgICovCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAocGFnZXNpemUvMTAyNCk7ICAvKiBpbiBrQiAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgIH0KKyAgICBjbG9zZWRpciggcHJvY2RpciApOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJSIgTkVUU05NUF9QUkl6ICJkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2NDBlMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2luZm8uYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIHN3cnVuX3Byb2NpbmZvLmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIGdldHByb2NzKCkgaW50ZXJmYWNlIC0gQUlYCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxwcm9jaW5mby5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworaW50IGF2YWlsID0gMTAyNDsgICAgLyogU2l6ZSBvZiB0YWJsZSB0byBhbGxvY2F0ZSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHN0cnVjdCBwcm9jc2luZm8gICAgKnByb2NfdGFibGU7CisgICAgcGlkX3QgICAgICAgICAgICAgICAgcHJvY19pbmRleCA9IDA7CisgICAgaW50ICAgICAgICAgICAgICAgICAgbnByb2NzLCBpOworICAgIGNoYXIgICAgICAgICAgICAgICAgIHBlbnRyeVsxMjhdLCAqcHBlbnRyeSwgZnVsbHBhdGhbMTI4XTsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKworICAgIC8qCisgICAgICogQ3JlYXRlIGEgYnVmZmVyIGZvciB0aGUgcHJvY2VzcyB0YWJsZSwgYmFzZWQgb24gdGhlIHNpemUgb2YKKyAgICAgKiAgIHRoZSB0YWJsZSB0aGUgbGFzdCB0aW1lIHdlIGxvYWRlZCB0aGlzIGluZm9ybWF0aW9uLgorICAgICAqIElmIHRoaXMgaXNuJ3QgYmlnIGVub3VnaCwga2VlcCBpbmNyZWFzaW5nIHRoZSBzaXplIG9mIHRoZQorICAgICAqICAgdGFibGUgdW50aWwgd2UgY2FuIHJldHJpZXZlIHRoZSB3aG9sZSB0aGluZy4KKyAgICAgKi8KKyAgICBwcm9jX3RhYmxlID0gKHN0cnVjdCBwcm9jc2luZm8gKikgbWFsbG9jKGF2YWlsKihzaXplb2Yoc3RydWN0IHByb2NzaW5mbykpKTsKKyAgICB3aGlsZSAoIGF2YWlsID09IChucHJvY3MgPSBnZXRwcm9jcyhwcm9jX3RhYmxlLCBzaXplb2Yoc3RydWN0IHByb2NzaW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHN0cnVjdCBmZHNpbmZvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvY19pbmRleCwgYXZhaWwpKSkgeworICAgICAgICBhdmFpbCArPSAxMDI0OworICAgICAgICBmcmVlKCBwcm9jX3RhYmxlICk7CisgICAgICAgIHByb2NfdGFibGUgPSAoc3RydWN0IHByb2NzaW5mbyAqKSBtYWxsb2MoYXZhaWwqKHNpemVvZihzdHJ1Y3QgcHJvY3NpbmZvKSkpOworICAgIH0KKworICAgIGZvciAoIGk9MCA7IGk8bnByb2NzOyBpKysgKSB7CisgICAgICAgIGlmICgwID09IHByb2NfdGFibGVbaV0ucGlfc3RhdGUpCisgICAgICAgICAgICBjb250aW51ZTsJLyogU2tpcCB1bnVzZWQgZW50cmllcyAqLworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHByb2NfdGFibGVbaV0ucGlfcGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisJbWVtc2V0KHBlbnRyeSwgMCwgc2l6ZW9mKHBlbnRyeSkpOwkJCQkJCQkJLyogRW1wdHkgZWFjaCB0aW1lICovCisJaWYoIShTS1BST0MgJiBwcm9jX3RhYmxlW2ldLnBpX2ZsYWdzKSkgewkJCQkJCQkvKiBSZW1vdmUga2VybmVsIHByb2Nlc3NlcyAqLworCQlnZXRhcmdzKCZwcm9jX3RhYmxlW2ldLCBzaXplb2Yoc3RydWN0IHByb2NzaW5mbyksIHBlbnRyeSwgc2l6ZW9mKHBlbnRyeSkpOyAgICAgICAgICAgICAgLyogQ2FsbCBnZXRhcmdzKCkgKi8KKwkJZm9yKHBwZW50cnkgPSBwZW50cnk7ICEoKCpwcGVudHJ5ID09ICdcMCcpICYmICgqKHBwZW50cnkrMSkgPT0gJ1wwJykpOyBwcGVudHJ5KyspIHsgICAgIC8qIFByb2Nlc3MgdW50aWwgMHgwMCAweDAwICovCisJCQlpZigoKnBwZW50cnkgPT0gJ1wwJykgJiYgKCEoKihwcGVudHJ5KzEpID09ICdcMCcpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIDB4MDAgITB4MDAgKi8KKwkJCQkqcHBlbnRyeSA9ICcgJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFuZ2UgdG8gMHgyMCAhMHgwMCAqLworCQl9CisJCXNucHJpbnRmKGZ1bGxwYXRoLCBzaXplb2YoZnVsbHBhdGgpLTEsICIlLipzIiwgKGludCkoc3RyY2hyKHBlbnRyeSwgJyAnKS1wZW50cnkpLCBwZW50cnkpOworCisJCWVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhdGgsCisJCQlzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKSwgIiVzIiwgZnVsbHBhdGgpOworCQlwcGVudHJ5ID0gc3RycmNocihmdWxscGF0aCwgJy8nKTsKKwkJaWYocHBlbnRyeSA9PSBOVUxMKSB7CisJCQllbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorCQkJCXNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLCAiJXMiLCBmdWxscGF0aCk7CisJCX0KKwkJZWxzZSB7CisJCQllbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorCQkJCXNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLCAiJXMiLCBwcGVudHJ5ICsgMSk7CisJCX0KKworCQlwcGVudHJ5ID0gc3RyY2hyKHBlbnRyeSwgJyAnKTsKKwkJZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycywKKwkJCXNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLCAiJS4qcyIsIChpbnQpKHBlbnRyeSAtIHBwZW50cnkpLCBwcGVudHJ5ICsgMSk7CisJfQorCisgICAgICAgIGVudHJ5LT5oclNXUnVuVHlwZSA9IChTS1BST0MgJiBwcm9jX3RhYmxlW2ldLnBpX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAgLyoga2VybmVsIHByb2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNCAgIC8qICBhcHBsaWNhdGlvbiAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW2ldLnBpX3N0YXRlKSB7CisgICAgICAgIGNhc2UgU0FDVElWRToKKyAgICAgICAgY2FzZSBTUlVOOiAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0xFRVA6ICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NUT1A6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1pPTUI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gKHByb2NfdGFibGVbaV0ucGlfcnUucnVfdXRpbWUudHZfc2VjICogMTAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLnBpX3J1LnJ1X3V0aW1lLnR2X3VzZWMgLyAxMDAwMDAwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY190YWJsZVtpXS5waV9ydS5ydV9zdGltZS50dl9zZWMgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ucGlfcnUucnVfc3RpbWUudHZfdXNlYyAvIDEwMDAwMDAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9ICBwcm9jX3RhYmxlW2ldLnBpX3NpemU7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAoZ2V0cGFnZXNpemUoKS8xMDI0KTsgIC8qIGluIGtCICovCisgICAgfQorICAgIGZyZWUocHJvY190YWJsZSk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIChpbnQpIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYmJiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BycHNpbmZvLmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBzd3J1bl9wcnBzaW5mby5jOgorICogICAgIGhyU1dSdW5UYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBnZXRwcnBzaW5mbygpIGludGVyZmFjZSAtIER5bml4CisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFXz8/Pz8/X0gKKyNpbmNsdWRlIDw/Pz8/Py5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHBpZF90ICAgICAgICAgICAgICAgIG5leHRwcm9jID0gMDsKKyAgICBnZXRwcnBzaW5mb190ICAgICAgICpzZWxlY3QgICA9IDA7CisgICAgcHJwc2luZm9fdCAgICAgICAgICAgbXlwc2luZm87CisgICAgaW50ICAgICAgICAgICAgICAgICAgcmM7CisgICAgY2hhciAgICAgICAgICAgICAgICAqY3A7CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnk7CisKKyAgICB3aGlsZSAoIDAgPD0gKCBuZXh0cHJvYyA9IGdldHBycHNpbmZvKCBuZXh0cHJvYywgc2VsZWN0LCAmbXlwc2luZm8gKSkpIHsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShteXBzaW5mby5wcl9waWQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgbXlwc2luZm8ucHJfZm5hbWUpOworICAgICAgICAvKgorICAgICAgICAgKiAgU3BsaXQgcHJfcHNhcmdzIGludG8gdHdvOgorICAgICAgICAgKiAgICAgYXJndlswXSAgIGlzIGhyU1dSdW5QYXRoCisgICAgICAgICAqICAgICBhcmd2WzEuLl0gaXMgaHJTV1J1blBhcmFtZXRlcnMKKyAgICAgICAgICovCisgICAgICAgIGZvciAoIGNwID0gbXlwc2luZm8ucHJfcHNhcmdzOyAnICcgPT0gKmNwOyBjcCsrICkKKyAgICAgICAgICAgIDsKKyAgICAgICAgKmNwID0gJ1wwJzsgICAgLyogRW5kIG9mIGFyZ3ZbMF0gKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIG15cHNpbmZvLnByX3BzYXJncyk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBjcCsxKTsKKyAgICAgICAgKmNwID0gJyAnOyAgICAgLyogUmVzdG9yZSBwcl9wc2FyZ3MgdmFsdWUgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBYWFggLSBObyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgc3lzdGVtIHByb2Nlc3NlcyB2cyBhcHBsaWNhdGlvbnMKKyAgICAgICAgICovCisKKyAgICAgICAgc3dpdGNoIChteXBzaW5mby5wcl9zdGF0ZSkgeworLyogWFhYIC0gd2hpY2ggbmFtZXMgdG8gdXNlID8/ICovCisgICAgICAgIGNhc2UgU0FDVElWRToKKyAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICBjYXNlIFNPTlBST0M6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTV0FQOgorICAgICAgICBjYXNlIFNTTEVFUDoKKyAgICAgICAgY2FzZSBTV0FJVDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NUT1A6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1pPTUI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gKG15cHNpbmZvLnByX3RpbWUudHZfc2VjICAqIDEwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAobXlwc2luZm8ucHJfdGltZS50dl9uc2VjIC8gMTAwMDAwMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gKG15cHNpbmZvLnByX3Jzc2l6ZSk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAoTVVfUEFHRVNJWkUvMTAyNCk7ICAvKiBpbiBrQiAqLworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1Y2U3NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIHN3cnVuX3BzdGF0LmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIHBzdGF0X2dldGR5bmFtaWMoKSBpbnRlcmZhY2UgLSBIUFVYCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QU1RBVF9ICisjZGVmaW5lIF9QU1RBVDY0CisjaW5jbHVkZSA8c3lzL3BzdGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIGV4dGVybiBpbnQgX3N3cnVuX21heDsKKyAgICBzdHJ1Y3QgcHN0X3N0YXRpYyBwc3RfYnVmOworCisgICAgcHN0YXRfZ2V0c3RhdGljKCAmcHN0X2J1Ziwgc2l6ZW9mKHN0cnVjdCBwc3Rfc3RhdGljKSwgMSwgMCk7CisgICAgX3N3cnVuX21heCA9IHBzdF9idWYubWF4X3Byb2M7CisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHN0cnVjdCBwc3Rfc3RhdHVzICAgKnByb2NfdGFibGU7CisgICAgc3RydWN0IHBzdF9keW5hbWljICAgcHN0X2R5bjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBucHJvYywgaSwgcmM7CisgICAgY2hhciAgICAgICAgICAgICAgICAqY3AxLCAqY3AyOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgcHN0YXRfZ2V0ZHluYW1pYyggJnBzdF9keW4sIHNpemVvZihzdHJ1Y3QgcHN0X2R5bmFtaWMpLCAxLCAwKTsKKyAgICBucHJvYyA9IHBzdF9keW4ucHNkX2FjdGl2ZXByb2NzOworICAgIHByb2NfdGFibGUgPSAoc3RydWN0IHBzdF9zdGF0dXMgKikgbWFsbG9jKG5wcm9jKihzaXplb2Yoc3RydWN0IHBzdF9zdGF0dXMpKSk7CisgICAgcHN0YXRfZ2V0cHJvYyhwcm9jX3RhYmxlLCBzaXplb2Yoc3RydWN0IHBzdF9zdGF0dXMpLCBucHJvYywgMCk7CisKKyAgICBmb3IgKCBpPTAgOyBpPG5wcm9jOyBpKysgKSB7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocHJvY190YWJsZVtpXS5wc3RfcGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHByb2NfdGFibGVbaV0ucHN0X3Vjb21tKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIFNwbGl0IHBzdF9jbWQgaW50byB0d286CisgICAgICAgICAqICAgICBhcmd2WzBdICAgaXMgaHJTV1J1blBhdGgKKyAgICAgICAgICogICAgIGFyZ3ZbMS4uXSBpcyBoclNXUnVuUGFyYW1ldGVycworICAgICAgICAgKi8KKyAgICAgICAgZm9yICggY3AxID0gcHJvY190YWJsZVtpXS5wc3RfY21kOyAnICcgPT0gKmNwMTsgY3AxKysgKQorICAgICAgICAgICAgOworICAgICAgICAqY3AxID0gJ1wwJzsgICAgLyogRW5kIG9mIGFyZ3ZbMF0gKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHByb2NfdGFibGVbaV0ucHN0X2NtZCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBjcDErMSk7CisgICAgICAgICpjcDEgPSAnICc7ICAgICAvKiBSZXN0b3JlIHBzdF9jbWQgdmFsdWUgKi8KKworICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSAoUFNfU1lTICYgcHJvY190YWJsZVtpXS5wc3RfZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMiAgIC8qIGtlcm5lbCBwcm9jZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDQgICAvKiAgYXBwbGljYXRpb24gICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisgICAgICAgIHN3aXRjaCAocHJvY190YWJsZVtpXS5wc3Rfc3RhdCkgeworICAgICAgICBjYXNlIFBTX1JVTjogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNfU0xFRVA6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNfU1RPUDogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19OT1RSVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNfSURMRToKKyAgICAgICAgY2FzZSBQU19aT01CSUU6CisgICAgICAgIGNhc2UgUFNfT1RIRVI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSBwcm9jX3RhYmxlW2ldLnBzdF9jcHRpY2tzdG90YWw7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSBwcm9jX3RhYmxlW2ldLnBzdF9yc3NpemU7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSBnZXRwYWdlc2l6ZSgpIC8gMTAyNDsgIC8qIGluIGtCICovCisJCS8qIFhYWCAtIENoZWNrIHRoaXMgbGFzdCBjYWxjdWxhdGlvbiAqLworICAgIH0KKyAgICBmcmVlKHByb2NfdGFibGUpOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOGFlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IG1pYjJjLmNvbnRhaW5lci5jb25mLHYgMS44IDIwMDYvMDcvMjYgMTU6NTg6MjYgZHRzMTIgRXhwICQKKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oPgorI2luY2x1ZGUgImhyU1dJbnN0YWxsZWRUYWJsZS5oIgorCisjZGVmaW5lIE1ZVEFCTEUgImhyU1dJbnN0YWxsZWRUYWJsZSIKKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisKK3N0YXRpYyB2b2lkIF9jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpOworc3RhdGljIGludCBfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKTsKKworLyoqIEluaXRpYWxpemVzIHRoZSBoclNXSW5zdGFsbGVkVGFibGUgbW9kdWxlICovCit2b2lkCitpbml0X2hyU1dJbnN0YWxsZWRUYWJsZSh2b2lkKQoreworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcgCisgICAgICovCisgICAgaW5pdGlhbGl6ZV90YWJsZV9oclNXSW5zdGFsbGVkVGFibGUoKTsKK30KKwordm9pZAorc2h1dGRvd25faHJTV0luc3RhbGxlZFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQorCisvKiogSW5pdGlhbGl6ZSB0aGUgaHJTV0luc3RhbGxlZFRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwordm9pZAoraW5pdGlhbGl6ZV90YWJsZV9oclNXSW5zdGFsbGVkVGFibGUodm9pZCkKK3sKKyAgICBzdGF0aWMgb2lkICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZFtdID0KKyAgICAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNiwgMyB9OworICAgIHNpemVfdCAgICAgICAgICBoclNXSW5zdGFsbGVkVGFibGVfb2lkX2xlbiA9CisgICAgICAgIE9JRF9MRU5HVEgoaHJTV0luc3RhbGxlZFRhYmxlX29pZCk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOworICAgIG5ldHNubXBfY2FjaGUgKmNhY2hlID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJoclNXSW5zdGFsbGVkIiwgImluaXRpYWxpemVcbiIpKTsKKworICAgIHJlZyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJoclNXSW5zdGFsbGVkVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXSW5zdGFsbGVkVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgaGFuZGxlciByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImhyU1dJbnN0YWxsZWRUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgICAvKiBpbmRleDogaHJTV0luc3RhbGxlZEluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl9IUlNXSU5TVEFMTEVESU5ERVg7CisgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9IUlNXSU5TVEFMTEVEREFURTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YWJsZV9pbmZvLCBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjb250YWluZXJfdGFibGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0LCB3aWxsIHJldXNlIGJlbG93ICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlX2xvYWQsIF9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dJbnN0YWxsZWRUYWJsZV9vaWRfbGVuKTsKKworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGNhY2hlLT5tYWdpYyA9IGNvbnRhaW5lcjsKKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNhY2hlIGhhbmRsZXIgZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBoYW5kbGVyID0gTlVMTDsgLyogcmVnIGhhcyBpdCovCisKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgcmV0dXJuOyAvKiBvayAqLworCisKKyAgYmFpbDogLyogbm90IG9rICovCisgICAgCisgICAgaWYgKGhhbmRsZXIpCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOworCisgICAgaWYgKGNhY2hlKQorICAgICAgICBuZXRzbm1wX2NhY2hlX2ZyZWUoY2FjaGUpOworCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKworICAgIGlmIChjb250YWluZXIpCisgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CisKKyAgICBpZiAocmVnKSAKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CisKK30KKworLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBoclNXSW5zdGFsbGVkVGFibGUgdGFibGUgKi8KK2ludAoraHJTV0luc3RhbGxlZFRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICp0YWJsZV9lbnRyeTsKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgICAgICAvKgorICAgICAgICAgKiBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAobmV0c25tcF9zd2luc3RfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV0lOU1RBTExFRElOREVYOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnN3SW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV0lOU1RBTExFRE5BTUU6IHsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT5zd05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zd05hbWVfbGVuKTsKKyAgICAgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV0lOU1RBTExFRElEOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQkpFQ1RfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJm51bGxPaWQsIG51bGxPaWRMZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV0lOU1RBTExFRFRZUEU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c3dUeXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dJTlNUQUxMRUREQVRFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPnN3RGF0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zd0RhdGVfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBBbiB1bnN1cHBvcnRlZC91bnJlYWRhYmxlIGNvbHVtbiAoaWYgYXBwbGljYWJsZSkgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QsIE5VTEwsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEQVRBIEFDQ0VTUworICoKKyAqIFRoZSBkYXRhIGFjY2VzcyBtZWNoYW5pc20gaGVyZSBpcyByYXRoZXIgc2ltcGxlOiBsZXQgbmV3c25tcF9zd2luc3RfKgorICogdGFrZSBjYXJlIG9mIGl0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgREVCVUdNU0dUTCgoImhyU1dJbnN0YWxsZWRUYWJsZTpjYWNoZSIsICJsb2FkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgZm9yIGhyU1dJbnN0YWxsZWRUYWJsZV9jYWNoZV9sb2FkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGFuIGludmFsaWQgb3IgZXhwaXJlZCBjYWNoZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KCgwID09IGNhY2hlLT52YWxpZCkgfHwgKDEgPT0gY2FjaGUtPmV4cGlyZWQpKTsKKworICAgIGNhY2hlLT5tYWdpYyA9CisgICAgICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWMsIDApOworCisgICAgcmV0dXJuIDA7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBpbiBoclNXSW5zdGFsbGVkVGFibGVfY2FjaGVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoImhyU1dJbnN0YWxsZWRUYWJsZTpjYWNoZSIsICJmcmVlXG4iKSk7CisKKyAgICBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZV9pdGVtcygobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjE3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMuY29udGFpbmVyLmNvbmYsdiAxLjggMjAwNi8wNy8yNiAxNTo1ODoyNiBkdHMxMiBFeHAgJAorICovCisjaWZuZGVmIEhSU1dJTlNUQUxMRURUQUJMRV9ICisjZGVmaW5lIEhSU1dJTlNUQUxMRURUQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0KQorCisvKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAorICovCit2b2lkICAgICAgICAgICAgaW5pdF9oclNXSW5zdGFsbGVkVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25faHJTV0luc3RhbGxlZFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaHJTV0luc3RhbGxlZFRhYmxlKHZvaWQpOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgaHJTV0luc3RhbGxlZFRhYmxlX2hhbmRsZXI7CisKKy8qCisgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBoclNXSW5zdGFsbGVkVGFibGUgCisgKi8KKyNkZWZpbmUgQ09MVU1OX0hSU1dJTlNUQUxMRURJTkRFWAkJMQorI2RlZmluZSBDT0xVTU5fSFJTV0lOU1RBTExFRE5BTUUJCTIKKyNkZWZpbmUgQ09MVU1OX0hSU1dJTlNUQUxMRURJRAkJMworI2RlZmluZSBDT0xVTU5fSFJTV0lOU1RBTExFRFRZUEUJCTQKKyNkZWZpbmUgQ09MVU1OX0hSU1dJTlNUQUxMRUREQVRFCQk1CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhSU1dJTlNUQUxMRURUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjQ0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYwpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy5jb250YWluZXIuY29uZix2IDEuOCAyMDA2LzA3LzI2IDE1OjU4OjI2IGR0czEyIEV4cCAkCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisjaW5jbHVkZSAiaHJTV1J1blBlcmZUYWJsZS5oIgorI2luY2x1ZGUgImRhdGFfYWNjZXNzL3N3cnVuLmgiCisKKyNkZWZpbmUgTVlUQUJMRSAiaHJTV1J1blBlcmZUYWJsZSIKKworLyoqIEluaXRpYWxpemVzIHRoZSBoclNXUnVuUGVyZlRhYmxlIG1vZHVsZSAqLwordm9pZAoraW5pdF9oclNXUnVuUGVyZlRhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZyAKKyAgICAgKi8KKyAgICBpbml0aWFsaXplX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUoKTsKK30KKwordm9pZAorc2h1dGRvd25faHJTV1J1blBlcmZUYWJsZSh2b2lkKQoreworICAgIHNodXRkb3duX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUoKTsKK30KKworZXh0ZXJuIG9pZCAgICAgIGhyU1dSdW5UYWJsZV9vaWRbXTsKK2V4dGVybiBzaXplX3QgICBoclNXUnVuVGFibGVfb2lkX2xlbjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworCisvKiogSW5pdGlhbGl6ZSB0aGUgaHJTV1J1blBlcmZUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfaHJTV1J1blBlcmZUYWJsZSh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgICAgICBoclNXUnVuUGVyZlRhYmxlX29pZFtdID0KKyAgICAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNSwgMSB9OworICAgIHNpemVfdCAgICAgICAgICBoclNXUnVuUGVyZlRhYmxlX29pZF9sZW4gPQorICAgICAgICBPSURfTEVOR1RIKGhyU1dSdW5QZXJmVGFibGVfb2lkKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWc7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CisKKyAgICByZWcgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaHJTV1J1blBlcmZUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5QZXJmVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1blBlcmZUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5QZXJmVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IHJlZykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKE5VTEwgPT0gdGFibGVfaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sIEFTTl9JTlRFR0VSLCAgIC8qIGluZGV4OiBoclNXUnVuSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gQ09MVU1OX0hSU1dSVU5QRVJGQ1BVOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fSFJTV1JVTlBFUkZNRU07CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0gbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGFibGVfaW5mbywgbmV0c25tcF9zd3J1bl9jb250YWluZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNvbnRhaW5lcl90YWJsZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQsIHdpbGwgcmV1c2UgYmVsb3cgKi8KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisKKyAgICBoYW5kbGVyID0gbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChuZXRzbm1wX3N3cnVuX2NhY2hlKCkpOworICAgIGlmIChOVUxMID09IGhhbmRsZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNhY2hlIGhhbmRsZXIgZm9yICIgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjYWNoZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQqLworCisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHJldHVybjsgLyogb2sgKi8KKworCisgIGJhaWw6IC8qIG5vdCBvayAqLworICAgIAorICAgIGlmIChoYW5kbGVyKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKKworICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisKKyAgICBpZiAocmVnKSAKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7Cit9CisKK3ZvaWQKK3NodXRkb3duX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgaHJTV1J1blBlcmZUYWJsZSB0YWJsZSAqLworaW50CitoclNXUnVuUGVyZlRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKnRhYmxlX2VudHJ5OworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5QRVJGQ1BVOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5QZXJmQ1BVKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5QRVJGTUVNOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5QZXJmTWVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBBbiB1bnN1cHBvcnRlZC91bnJlYWRhYmxlIGNvbHVtbiAoaWYgYXBwbGljYWJsZSkgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QsIE5VTEwsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTNmZGEzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy5jb250YWluZXIuY29uZix2IDEuOCAyMDA2LzA3LzI2IDE1OjU4OjI2IGR0czEyIEV4cCAkCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2lmbmRlZiBIUlNXUlVOUEVSRlRBQkxFX0gKKyNkZWZpbmUgSFJTV1JVTlBFUkZUQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKGhvc3QvaHJTV1J1blRhYmxlKQorCisvKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAorICovCit2b2lkICAgICAgICAgICAgaW5pdF9oclNXUnVuUGVyZlRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX2hyU1dSdW5QZXJmVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9oclNXUnVuUGVyZlRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUodm9pZCk7CitOZXRzbm1wX05vZGVfSGFuZGxlciBoclNXUnVuUGVyZlRhYmxlX2hhbmRsZXI7CisKKy8qCisgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBoclNXUnVuUGVyZlRhYmxlIAorICovCisjZGVmaW5lIENPTFVNTl9IUlNXUlVOUEVSRkNQVQkJMQorI2RlZmluZSBDT0xVTU5fSFJTV1JVTlBFUkZNRU0JCTIKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFJTV1JVTlBFUkZUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2FkMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYwpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy5jb250YWluZXIuY29uZix2IDEuOCAyMDA2LzA3LzI2IDE1OjU4OjI2IGR0czEyIEV4cCAkCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oPgorI2luY2x1ZGUgImRhdGFfYWNjZXNzL3N3cnVuLmgiCisjaW5jbHVkZSAiaHJTV1J1blRhYmxlLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2RlZmluZSBNWVRBQkxFICJoclNXUnVuVGFibGUiCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworCisvKiogSW5pdGlhbGl6ZXMgdGhlIGhyU1dSdW5UYWJsZSBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfaHJTV1J1blRhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZyAKKyAgICAgKi8KKyAgICBpbml0aWFsaXplX3RhYmxlX2hyU1dSdW5UYWJsZSgpOworfQorCit2b2lkCitzaHV0ZG93bl9oclNXUnVuVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKK29pZCAgICAgIGhyU1dSdW5UYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDQsIDIgfTsKK3NpemVfdCAgIGhyU1dSdW5UYWJsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChoclNXUnVuVGFibGVfb2lkKTsKKworLyoqIEluaXRpYWxpemUgdGhlIGhyU1dSdW5UYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfaHJTV1J1blRhYmxlKHZvaWQpCit7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyNpZmRlZiBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9XUklURV9TVVBQT1JUCisjICBkZWZpbmUgU1dSVU5fQUNDRVNTX0xFVkVMIEhBTkRMRVJfQ0FOX1JXUklURQorI2Vsc2UKKyMgIGRlZmluZSBTV1JVTl9BQ0NFU1NfTEVWRUwgSEFORExFUl9DQU5fUk9OTFkKKyNlbmRpZgorI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKKyMgIGRlZmluZSBTV1JVTl9BQ0NFU1NfTEVWRUwgSEFORExFUl9DQU5fUk9OTFkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oTVlUQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1blRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5UYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5UYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1JVTl9BQ0NFU1NfTEVWRUwpOworICAgIGlmIChOVUxMID09IHJlZykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIHJlZy0+bW9kZXMgfD0gSEFORExFUl9DQU5fTk9UX0NSRUFURTsKKworICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgYWxsb2NhdGluZyB0YWJsZSByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sIEFTTl9JTlRFR0VSLCAgIC8qIGluZGV4OiBoclNXUnVuSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gQ09MVU1OX0hSU1dSVU5JTkRFWDsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OX0hSU1dSVU5TVEFUVVM7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0gbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGFibGVfaW5mbywgbmV0c25tcF9zd3J1bl9jb250YWluZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNvbnRhaW5lcl90YWJsZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQsIHdpbGwgcmV1c2UgYmVsb3cgKi8KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQobmV0c25tcF9zd3J1bl9jYWNoZSgpKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBoYW5kbGVyIGZvciAiIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBoYW5kbGVyKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBpbmplY3RpbmcgY2FjaGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0Ki8KKworICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICByZXR1cm47IC8qIG9rICovCisKKworICBiYWlsOiAvKiBub3Qgb2sgKi8KKyAgICAKKyAgICBpZiAoaGFuZGxlcikKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CisKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCisgICAgaWYgKHJlZykgCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOworCit9CisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgaHJTV1J1blRhYmxlIHRhYmxlICovCitpbnQKK2hyU1dSdW5UYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqdGFibGVfZW50cnk7CisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQorICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKG5ldHNubXBfc3dydW5fZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTklOREVYOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5JbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9IUlNXUlVOTkFNRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oclNXUnVuTmFtZV9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTklEOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQkpFQ1RfSUQsCisjaWZkZWYgTkVUU05NUF9TV1JVTl9IQVZFX0lECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPmhyU1dSdW5JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5JRF9sZW4KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJm51bGxPaWQsIG51bGxPaWRMZW4KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlBBVEg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5QYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blBhdGhfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5QQVJBTUVURVJTOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuUGFyYW1ldGVyc19sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlRZUEU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlNUQVRVUzoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oclNXUnVuU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBBbiB1bnN1cHBvcnRlZC91bnJlYWRhYmxlIGNvbHVtbiAoaWYgYXBwbGljYWJsZSkgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QsIE5VTEwsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorI2lmZGVmIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgLyoKKyAgICAgICAgICogV3JpdGUtc3VwcG9ydAorICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGludCBwaWQ7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5TVEFUVVM6CisgICAgICAgICAgICAgICAgaWYgKCpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyICE9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRCkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfV1JPTkdWQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaWQgPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVbcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aC0xXTsKKyAgICAgICAgICAgICAgICBpZiAoMSA9PSBwaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsInJlZnVzaW5nIHRvIGtpbGwgcGlkIDFcbiIpOworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9BQ0NFU1MpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKG5ldHNubXBfc3dydW5fZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlNUQVRVUzoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2hyU1dSdW5TdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blN0YXR1czsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blN0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKG5ldHNubXBfc3dydW5fZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlNUQVRVUzoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blN0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfaHJTV1J1blN0YXR1czsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2hyU1dSdW5TdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaW50IHBpZDsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHBpZCA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZVtyZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoLTFdOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImhyU1dSdW5UYWJsZTpjb21taXQiLCAia2lsbCglZCxURVJNKVxuIiwgcGlkKSk7CisgICAgICAgICAgICBraWxsKHBpZCwgU0lHVEVSTSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fV1JJVEVfU1VQUE9SVCAqLworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODBmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMuY29udGFpbmVyLmNvbmYsdiAxLjggMjAwNi8wNy8yNiAxNTo1ODoyNiBkdHMxMiBFeHAgJAorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgSFJTV1JVTlRBQkxFX0gKKyNkZWZpbmUgSFJTV1JVTlRBQkxFX0gKKworY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bikKK2NvbmZpZ19yZXF1aXJlKGhvc3QvaHJTV1J1blBlcmZUYWJsZSkKKworLyoKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKKyAqLwordm9pZCAgICAgICAgICAgIGluaXRfaHJTV1J1blRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX2hyU1dSdW5UYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2hyU1dSdW5UYWJsZSh2b2lkKTsKK05ldHNubXBfTm9kZV9IYW5kbGVyIGhyU1dSdW5UYWJsZV9oYW5kbGVyOworCisvKgorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgaHJTV1J1blRhYmxlIAorICovCisjZGVmaW5lIENPTFVNTl9IUlNXUlVOSU5ERVgJCTEKKyNkZWZpbmUgQ09MVU1OX0hSU1dSVU5OQU1FCQkyCisjZGVmaW5lIENPTFVNTl9IUlNXUlVOSUQJCTMKKyNkZWZpbmUgQ09MVU1OX0hSU1dSVU5QQVRICQk0CisjZGVmaW5lIENPTFVNTl9IUlNXUlVOUEFSQU1FVEVSUwkJNQorI2RlZmluZSBDT0xVTU5fSFJTV1JVTlRZUEUJCTYKKyNkZWZpbmUgQ09MVU1OX0hSU1dSVU5TVEFUVVMJCTcKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFJTV1JVTlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5jCmluZGV4IDdiMTM2NGQuLjI0MDMxYmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuYwpAQCAtNjMsMTIgKzYzLDE4IEBACiAjZGVmaW5lCUhSREVWX0VSUk9SUwkJNgogCiBzdHJ1Y3QgdmFyaWFibGU0IGhyZGV2aWNlX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUkRFVl9JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJkZXZpY2UsIDIsIHsxLCAxfX0sCi0gICAge0hSREVWX1RZUEUsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfaHJkZXZpY2UsIDIsIHsxLCAyfX0sCi0gICAge0hSREVWX0RFU0NSLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyZGV2aWNlLCAyLCB7MSwgM319LAotICAgIHtIUkRFVl9JRCwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9ocmRldmljZSwgMiwgezEsIDR9fSwKLSAgICB7SFJERVZfU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmRldmljZSwgMiwgezEsIDV9fSwKLSAgICB7SFJERVZfRVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ocmRldmljZSwgMiwgezEsIDZ9fQorICAgIHtIUkRFVl9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkZXZpY2UsIDIsIHsxLCAxfX0sCisgICAge0hSREVWX1RZUEUsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkZXZpY2UsIDIsIHsxLCAyfX0sCisgICAge0hSREVWX0RFU0NSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZGV2aWNlLCAyLCB7MSwgM319LAorICAgIHtIUkRFVl9JRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRldmljZSwgMiwgezEsIDR9fSwKKyAgICB7SFJERVZfU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRldmljZSwgMiwgezEsIDV9fSwKKyAgICB7SFJERVZfRVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRldmljZSwgMiwgezEsIDZ9fQogfTsKIG9pZCAgICAgICAgICAgICBocmRldmljZV92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCAyIH07CiAKQEAgLTE5MSw3ICsxOTcsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2RldmljZSIsICIuLi4gZ2V0IGRldmljZSBzdGF0cyAiKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jCmluZGV4IGYzNjc5YjUuLmM0YWM1MmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jCkBAIC0yLDYgKzIsMTYgQEAKICAqICBIb3N0IFJlc291cmNlcyBNSUIgLSBkaXNrIGRldmljZSBncm91cCBpbXBsZW1lbnRhdGlvbiAtIGhyX2Rpc2suYwogICoKICAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlICJob3N0X3Jlcy5oIgpAQCAtNjEsMTAgKzcxLDIzIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoSEFWRV9SRUdFWF9IKSAmJiBkZWZpbmVkKEhBVkVfUkVHQ09NUCkKKyNpbmNsdWRlIDxyZWdleC5oPgorI2VuZGlmCisKICNpZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKIAorI2lmZGVmIGRhcndpbgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8SU9LaXQvSU9LaXRMaWIuaD4KKyNpbmNsdWRlIDxJT0tpdC9zdG9yYWdlL0lPQmxvY2tTdG9yYWdlRHJpdmVyLmg+CisjaW5jbHVkZSA8SU9LaXQvc3RvcmFnZS9JT01lZGlhLmg+CisjaW5jbHVkZSA8SU9LaXQvSU9CU0QuaD4KKyNpbmNsdWRlIDxEaXNrQXJiaXRyYXRpb24vREFEaXNrLmg+CisjZW5kaWYKKwogI2lmZGVmIGxpbnV4CiAvKgogICogZGVmaW5lIEJMS0dFVFNJWkUgZnJvbSA8bGludXgvZnMuaD46CkBAIC03OSw2ICsxMDIsMjcgQEAKIAogI2RlZmluZSBIUkRfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGhyRGlza1N0b3JhZ2VBY2Nlc3MgKElOVEVHRVIgLyBBU05fSU5URUdFUikKKyAqLworI2RlZmluZSBIUkRJU0tTVE9SQUdFQUNDRVNTX1JFQURXUklURSAgMQorI2RlZmluZSBIUkRJU0tTVE9SQUdFQUNDRVNTX1JFQURPTkxZICAyCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQorICogaHJEaXNrU3RvcmFnZU1lZGlhIChJTlRFR0VSIC8gQVNOX0lOVEVHRVIpCisgKi8KKyNkZWZpbmUgSFJESVNLU1RPUkFHRU1FRElBX09USEVSICAxCisjZGVmaW5lIEhSRElTS1NUT1JBR0VNRURJQV9VTktOT1dOICAyCisjZGVmaW5lIEhSRElTS1NUT1JBR0VNRURJQV9IQVJERElTSyAgMworI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfRkxPUFBZRElTSyAgNAorI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfT1BUSUNBTERJU0tST00gIDUKKyNkZWZpbmUgSFJESVNLU1RPUkFHRU1FRElBX09QVElDQUxESVNLV09STSAgNgorI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfT1BUSUNBTERJU0tSVyAgNworI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfUkFNRElTSyAgOAorCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgogCSAqICBLZXJuZWwgJiBpbnRlcmZhY2UgaW5mb3JtYXRpb24sCkBAIC04OSw4ICsxMzMsMTAgQEAKIHZvaWQgICAgICAgICAgICBJbml0X0hSX0Rpc2sodm9pZCk7CiBpbnQgICAgICAgICAgICAgR2V0X05leHRfSFJfRGlzayh2b2lkKTsKIGludCAgICAgICAgICAgICBHZXRfTmV4dF9IUl9EaXNrX1BhcnRpdGlvbihjaGFyICosIHNpemVfdCwgaW50KTsKKyNpZiAhKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCiBzdGF0aWMgdm9pZCAgICAgQWRkX0hSX0Rpc2tfZW50cnkoY29uc3QgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQsIGludCk7CisjZW5kaWYKIHN0YXRpYyB2b2lkICAgICBTYXZlX0hSX0Rpc2tfR2VuZXJhbCh2b2lkKTsKIHN0YXRpYyB2b2lkICAgICBTYXZlX0hSX0Rpc2tfU3BlY2lmaWModm9pZCk7CiBzdGF0aWMgaW50ICAgICAgUXVlcnlfRGlzayhpbnQsIGNvbnN0IGNoYXIgKik7CkBAIC0xMDYsNyArMTUyLDkgQEAKIHN0YXRpYyBpbnQgICAgICBIUkRfaW5kZXg7CiBzdGF0aWMgY2hhciAgICAgSFJEX3NhdmVkTW9kZWxbNDBdOwogc3RhdGljIGxvbmcgICAgIEhSRF9zYXZlZENhcGFjaXR5ID0gMTA0NDsKKyNpZiBkZWZpbmVkKERJT0NfREVTQ1JJQkUpIHx8IGRlZmluZWQoREtJT0NJTkZPKSB8fCBkZWZpbmVkKEhBVkVfTElOVVhfSERSRUdfSCkKIHN0YXRpYyBpbnQgICAgICBIUkRfc2F2ZWRGbGFnczsKKyNlbmRpZgogc3RhdGljIHRpbWVfdCAgIEhSRF9oaXN0b3J5W0hSREVWX1RZUEVfTUFTSyArIDFdOwogCiAjaWZkZWYgRElPQ19ERVNDUklCRQpAQCAtMTMyLDkgKzE4MCwyNyBAQAogc3RhdGljIHN0cnVjdCBkaXNrbGFiZWwgSFJEX2luZm87CiAjZW5kaWYKIAorI2lmZGVmIGRhcndpbgorc3RhdGljIGludDY0X3QgIEhSRF9jYXA7CitzdGF0aWMgaW50ICAgICAgSFJEX2FjY2VzczsKK3N0YXRpYyBpbnQgICAgICBIUkRfdHlwZTsKK3N0YXRpYyBpbnQgICAgICBIUkRfcmVtb3ZlYmxlOworc3RhdGljIGNoYXIgICAgIEhSRF9tb2RlbFs0MF07CitzdGF0aWMgaW50ICAgICAgSFJEX3NhdmVkX2FjY2VzczsKK3N0YXRpYyBpbnQgICAgICBIUkRfc2F2ZWRfdHlwZTsKK3N0YXRpYyBpbnQgICAgICBIUkRfc2F2ZWRfcmVtb3ZlYmxlOworc3RhdGljIGludCBfZ2V0X3R5cGVfZnJvbV9wcm90b2NvbCggY29uc3QgY2hhciAqcHJvdCApOworc3RhdGljIGludCBfZ2V0X3R5cGVfdmFsdWUoIGNvbnN0IGNoYXIgKnN0cl90eXBlICk7CisjZW5kaWYKKwogc3RhdGljIHZvaWQgICAgIHBhcnNlX2Rpc2tfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIHN0YXRpYyB2b2lkICAgICBmcmVlX2Rpc2tfY29uZmlnKHZvaWQpOwogCisjaWZkZWYgbGludXgKK3N0YXRpYyB2b2lkICAgICBBZGRfTFZNX0Rpc2tzKHZvaWQpOworc3RhdGljIHZvaWQgICAgIFJlbW92ZV9MVk1fRGlza3Modm9pZCk7CisjZW5kaWYKKwogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgSW5pdGlhbGlzYXRpb24gJiBjb21tb24gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCkBAIC0xNDcsMTAgKzIxMywxNCBAQAogI2RlZmluZQlIUkRJU0tfQ0FQQUNJVFkJCTQKIAogc3RydWN0IHZhcmlhYmxlNCBocmRpc2tfdmFyaWFibGVzW10gPSB7Ci0gICAge0hSRElTS19BQ0NFU1MsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZGlzaywgMiwgezEsIDF9fSwKLSAgICB7SFJESVNLX01FRElBLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmRpc2ssIDIsIHsxLCAyfX0sCi0gICAge0hSRElTS19SRU1PVkVBQkxFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmRpc2ssIDIsIHsxLCAzfX0sCi0gICAge0hSRElTS19DQVBBQ0lUWSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJkaXNrLCAyLCB7MSwgNH19CisgICAge0hSRElTS19BQ0NFU1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZGlzaywgMiwgezEsIDF9fSwKKyAgICB7SFJESVNLX01FRElBLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRpc2ssIDIsIHsxLCAyfX0sCisgICAge0hSRElTS19SRU1PVkVBQkxFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRpc2ssIDIsIHsxLCAzfX0sCisgICAge0hSRElTS19DQVBBQ0lUWSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkaXNrLCAyLCB7MSwgNH19CiB9Owogb2lkICAgICAgICAgICAgIGhyZGlza192YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA2IH07CiAKQEAgLTE3Miw2ICsyNDIsOSBAQAogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L3NkJWMlZCIsIC0xLCAtMSwgJ2EnLCAncCcsICIvZGV2L3NkJWMiLCAxLCAxNSk7CiAgICAgQWRkX0hSX0Rpc2tfZW50cnkoIi9kZXYvbWQlZCIsIC0xLCAtMSwgMCwgMywgIi9kZXYvbWQlZCIsIDAsIDApOwogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L2ZkJWQiLCAtMSwgLTEsIDAsIDEsICIvZGV2L2ZkJWQiLCAwLCAwKTsKKworICAgIEFkZF9MVk1fRGlza3MoKTsKKwogI2VsaWYgZGVmaW5lZChocHV4KQogI2lmIGRlZmluZWQoaHB1eDEwKSB8fCBkZWZpbmVkKGhwdXgxMSkKICAgICBBZGRfSFJfRGlza19lbnRyeSgiL2Rldi9yZHNrL2MlZHQleGQlZCIsIDAsIDEsIDAsIDE1LApAQCAtMTg1LDYgKzI1OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvcmRzay9jJWR0JWRkMHMwIiwgMCwgNyk7CiAgICAgQWRkX0hSX0Rpc2tfZW50cnkoIi9kZXYvcmRzay9jJWRkJWRzJWQiLCAwLCA3LCAwLCAxNSwKICAgICAgICAgICAgICAgICAgICAgICAiL2Rldi9yZHNrL2MlZGQlZHMwIiwgMCwgNyk7CisjZWxpZiBkZWZpbmVkKGRhcndpbikKKyAgICBBZGRfSFJfRGlza19lbnRyeSgiL2Rldi9kaXNrJWRzJWQiLCAtMSwgLTEsIDAsIDMyLCAiL2Rldi9kaXNrJWQiLCAxLCAzMik7CiAjZWxpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGZyZWVic2Q1KQogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L2FkJWRzJWQlYyIsIDAsIDEsIDEsIDQsICIvZGV2L2FkJWRzJWQiLCAnYScsICdoJyk7CiAgICAgQWRkX0hSX0Rpc2tfZW50cnkoIi9kZXYvZGElZHMlZCVjIiwgMCwgMSwgMSwgNCwgIi9kZXYvZGElZHMlZCIsICdhJywgJ2gnKTsKQEAgLTIxNSw2ICsyOTAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX2Rpc2tfY29uZmlnLCAibmFtZSIpOwogfQogCit2b2lkCitzaHV0ZG93bl9ocl9kaXNrKHZvaWQpCit7CisjaWZkZWYgbGludXgKKyAgICBSZW1vdmVfTFZNX0Rpc2tzKCk7CisjZW5kaWYKK30KKwogI2RlZmluZSBJVEVNX1NUUklORwkxCiAjZGVmaW5lIElURU1fU0VUCTIKICNkZWZpbmUgSVRFTV9TVEFSCTMKQEAgLTI0MCwxMiArMzIzLDEyIEBACiBzdGF0aWMgdm9pZAogcGFyc2VfZGlza19jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY29uZl9kaXNrX2xpc3QgKmRfbmV3ID0gMDsKLSAgICBjb25mX2Rpc2tfaXRlbSAqZGlfY3VyciA9IDA7Ci0gICAgZGV0YWlsc19zZXQgICAgKmRfc2V0ID0gMDsKLSAgICBjaGFyICAgICAgICAgICAqbmFtZSA9IDAsICpwID0gMCwgKmRfc3RyID0gMCwgYzsKKyAgICBjb25mX2Rpc2tfbGlzdCAqZF9uZXcgPSBOVUxMOworICAgIGNvbmZfZGlza19pdGVtICpkaV9jdXJyID0gTlVMTDsKKyAgICBkZXRhaWxzX3NldCAgICAqZF9zZXQgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICpuYW1lID0gTlVMTCwgKnAgPSBOVUxMLCAqZF9zdHIgPSBOVUxMLCBjOwogICAgIHVuc2lnbmVkIGludCAgICBpLCBuZWcsIGMxLCBjMjsKLSAgICBjaGFyICAgICAgICAgICAqc3QgPSAwOworICAgIGNoYXIgICAgICAgICAgICpzdCA9IE5VTEw7CiAKICAgICBuYW1lID0gc3RydG9rX3IoY3B0ciwgIiBcdCIsICZzdCk7CiAgICAgaWYgKCFuYW1lKSB7CkBAIC00ODIsNiArNTY1LDcgQEAKICAgICBJbml0X0hSX0Rpc2soKTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGRpc2tfaWR4ID0gR2V0X05leHRfSFJfRGlzaygpOworICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwgIi4uLiBpbmRleCAlZFxuIiwgZGlza19pZHgpKTsKICAgICAgICAgaWYgKGRpc2tfaWR4ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5ld25hbWVbSFJESVNLX0VOVFJZX05BTUVfTEVOR1RIXSA9IGRpc2tfaWR4OwpAQCAtNTEyLDcgKzU5Niw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCiAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogCiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsICIuLi4gZ2V0IGRpc2sgc3RhdHMgIikpOwpAQCAtNTg4LDYgKzY3Miw3IEBACiBzdGF0aWMgSFJEX2Rpc2tfdCBkaXNrX2RldmljZXNbTUFYX05VTUJFUl9ESVNLX1RZUEVTXTsKIHN0YXRpYyBpbnQgICAgICBIUl9udW1iZXJfZGlza190eXBlcyA9IDA7CiAKKyNpZiAhKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCiBzdGF0aWMgdm9pZAogQWRkX0hSX0Rpc2tfZW50cnkoY29uc3QgY2hhciAqZGV2cGFydF9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICBpbnQgZmlyc3RfY3RsLApAQCAtNjAxLDcgKzY4Niw3IEBACiAKICAgICB3aGlsZSAoZmlyc3RfY3RsIDw9IGxhc3RfY3RsKSB7CiAgICAgICBmb3IgKGxvZGV2ID0gZmlyc3RfZGV2OwotICAgICAgICAgICBsb2RldiA8IGxhc3RfZGV2ICYmIE1BWF9OVU1CRVJfRElTS19UWVBFUyA+IEhSX251bWJlcl9kaXNrX3R5cGVzOworICAgICAgICAgICBsb2RldiA8PSBsYXN0X2RldiAmJiBNQVhfTlVNQkVSX0RJU0tfVFlQRVMgPiBIUl9udW1iZXJfZGlza190eXBlczsKICAgICAgICAgICAgbG9kZXYgKz0gKDErTUFYX0RJU0tTX1BFUl9UWVBFKSwgSFJfbnVtYmVyX2Rpc2tfdHlwZXMrKykKICAgICAgIHsKICAgICAgICAgbmJyX2NyZWF0ZWQrKzsKQEAgLTY0NCw2ICs3MjksNyBAQAogICAgICAgICAgICAgICAgICAgICBkZXZwYXJ0X3N0cmluZywgbmJyX2NyZWF0ZWQpKTsKICNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQKIEluaXRfSFJfRGlzayh2b2lkKQpAQCAtNjU2LDE0ICs3NDIsMTQgQEAKIGludAogR2V0X05leHRfSFJfRGlzayh2b2lkKQogewotICAgIGNoYXIgICAgICAgICAgICBzdHJpbmdbMTAyNF07CisgICAgY2hhciAgICAgICAgICAgIHN0cmluZ1tQQVRIX01BWCsxXTsKICAgICBpbnQgICAgICAgICAgICAgZmQsIHJlc3VsdDsKICAgICBpbnQgICAgICAgICAgICAgaWluZGV4OwogICAgIGludCAgICAgICAgICAgICBtYXhfZGlza3M7CiAgICAgdGltZV90ICAgICAgICAgIG5vdzsKIAogICAgIEhSRF9pbmRleCsrOwotICAgICh2b2lkICopIHRpbWUoJm5vdyk7CisgICAgdGltZSgmbm93KTsKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwgIk5leHRfRGlzayB0eXBlICVkIG9mICVkXG4iLAogICAgICAgICAgICAgICAgIEhSRF90eXBlX2luZGV4LCBIUl9udW1iZXJfZGlza190eXBlcykpOwogICAgIHdoaWxlIChIUkRfdHlwZV9pbmRleCA8IEhSX251bWJlcl9kaXNrX3R5cGVzKSB7CkBAIC02OTcsNiArNzgzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfZGV2aWNlc1tIUkRfdHlwZV9pbmRleF0uZGlza19jb250cm9sbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgZGlza19kZXZpY2VzW0hSRF90eXBlX2luZGV4XS5kaXNrX2RldmljZV9maXJzdCArCiAgICAgICAgICAgICAgICAgICAgICAgICBIUkRfaW5kZXgpOworCSAgICB9IGVsc2UgaWYgKGRpc2tfZGV2aWNlc1tIUkRfdHlwZV9pbmRleF0uZGlza19kZXZpY2VfZmlyc3QgPT0gZGlza19kZXZpY2VzW0hSRF90eXBlX2luZGV4XS5kaXNrX2RldmljZV9sYXN0KSB7CisJCS8qIGV4YWN0IGRldmljZSBuYW1lICovCisJCXNucHJpbnRmKHN0cmluZywgc2l6ZW9mKHN0cmluZyktMSwgIiVzIiwgZGlza19kZXZpY2VzW0hSRF90eXBlX2luZGV4XS5kaXNrX2RldmZ1bGxfc3RyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc25wcmludGYoc3RyaW5nLCBzaXplb2Yoc3RyaW5nKS0xLAogICAgICAgICAgICAgICAgICAgICAgICAgZGlza19kZXZpY2VzW0hSRF90eXBlX2luZGV4XS5kaXNrX2RldmZ1bGxfc3RyaW5nLApAQCAtNzQ3LDYgKzgzNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICBIUkRfaGlzdG9yeVtpaW5kZXhdID0gMDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoSFJERVZfRElTSyA8PCBIUkRFVl9UWVBFX1NISUZUKSArIGlpbmRleCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2Rpc2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRfTmV4dF9IUl9EaXNrOiBjYW4ndCBxdWVyeSAlc1xuIiwgc3RyaW5nKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2V0X05leHRfSFJfRGlzazogY2FuJ3Qgb3BlbiAlc1xuIiwgc3RyaW5nKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBIUkRfaGlzdG9yeVtpaW5kZXhdID0gbm93OwogICAgICAgICAgICAgSFJEX2luZGV4Kys7CkBAIC03OTksNiArODk0LDYyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBkYXJ3aW4KK2ludAorR2V0X0hSX0Rpc2tfTGFiZWwoY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RyX2xlbiwgY29uc3QgY2hhciAqZGV2ZnVsbCkKK3sKKyAgICBEQVNlc3Npb25SZWYgICAgICAgIHNlc3NfcmVmOworICAgIERBRGlza1JlZiAgICAgICAgICAgZGlzazsKKyAgICBDRkRpY3Rpb25hcnlSZWYgICAgIGRlc2M7CisgICAgQ0ZTdHJpbmdSZWYgICAgICAgICBzdHJfcmVmOworICAgIENGU3RyaW5nRW5jb2RpbmcgICAgc3lzX2VuY29kaW5nID0gQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpOworCisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsICJEaXNrIExhYmVsIHR5cGUgJXNcbiIsIGRldmZ1bGwpKTsKKworICAgIHNlc3NfcmVmID0gREFTZXNzaW9uQ3JlYXRlKCBOVUxMICk7CisgICAgaWYgKE5VTEwgPT0gc2Vzc19yZWYpIHsKKyAgICAgICAgc3RybGNweShzdHJpbmcsIGRldmZ1bGwsIHN0cl9sZW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZGlzayA9IERBRGlza0NyZWF0ZUZyb21CU0ROYW1lKCBOVUxMLCBzZXNzX3JlZiwgZGV2ZnVsbCApOworICAgIGlmIChOVUxMID09IGRpc2spIHsKKyAgICAgICAgQ0ZSZWxlYXNlKHNlc3NfcmVmKTsKKyAgICAgICAgc3RybGNweShzdHJpbmcsIGRldmZ1bGwsIHN0cl9sZW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZGVzYyA9IERBRGlza0NvcHlEZXNjcmlwdGlvbiggZGlzayApOworICAgIGlmIChOVUxMID09IGRlc2MpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImRpc2ttZ3I6IGNvdWxkbid0IGdldCBkaXNrIGRlc2NyaXB0aW9uIGZvciAlcywgc2tpcHBpbmdcbiIsCisgICAgICAgICAgICAgICAgIGRldmZ1bGwpOworICAgICAgICBDRlJlbGVhc2UoZGlzayk7CisgICAgICAgIENGUmVsZWFzZShzZXNzX3JlZik7CisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBkZXZmdWxsLCBzdHJfbGVuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBtb2RlbCAqLworICAgIHN0cl9yZWYgPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlKGRlc2MsIGtEQURpc2tEZXNjcmlwdGlvbk1lZGlhTmFtZUtleSk7CisgICAgaWYgKHN0cl9yZWYpIHsKKyAgICAgICAgc3RybGNweShzdHJpbmcsIENGU3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJfcmVmLCBzeXNfZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgIHN0cl9sZW4pOworICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkaXNrbWdyOmRhcndpbiIsICIgbmFtZSAlc1xuIiwgc3RyaW5nKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdHJsY3B5KHN0cmluZywgZGV2ZnVsbCwgc3RyX2xlbik7CisgICAgfQorICAgIAorICAgIENGUmVsZWFzZShkaXNrKTsKKyAgICBDRlJlbGVhc2UoZGVzYyk7CisgICAgQ0ZSZWxlYXNlKHNlc3NfcmVmKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZAogU2F2ZV9IUl9EaXNrX1NwZWNpZmljKHZvaWQpCiB7CkBAIC04MjAsNiArOTcxLDEzIEBACiAjaWZkZWYgRElPQ0dESU5GTwogICAgIEhSRF9zYXZlZENhcGFjaXR5ID0gSFJEX2luZm8uZF9zZWNwZXJ1bml0IC8gMjsKICNlbmRpZgorI2lmZGVmIGRhcndpbgorICAgIEhSRF9zYXZlZENhcGFjaXR5ID0gSFJEX2NhcCAvIDEwMjQ7CisgICAgSFJEX3NhdmVkX2FjY2VzcyA9IEhSRF9hY2Nlc3M7CisgICAgSFJEX3NhdmVkX3R5cGUgPSBIUkRfdHlwZTsKKyAgICBIUkRfc2F2ZWRfcmVtb3ZlYmxlID0gSFJEX3JlbW92ZWJsZTsKKyNlbmRpZgorCiB9CiAKIHN0YXRpYyB2b2lkCkBAIC04MzksNiArOTk3LDkgQEAKICAgICBzdHJsY3B5KEhSRF9zYXZlZE1vZGVsLCBka3R5cGVuYW1lc1tIUkRfaW5mby5kX3R5cGVdLAogICAgICAgICAgICAgc2l6ZW9mKEhSRF9zYXZlZE1vZGVsKSk7CiAjZW5kaWYKKyNpZmRlZiBkYXJ3aW4KKyAgICBzdHJsY3B5KEhSRF9zYXZlZE1vZGVsLCBIUkRfbW9kZWwsIHNpemVvZihIUkRfc2F2ZWRNb2RlbCkpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICoKQEAgLTg3MSw3ICsxMDMyLDcgQEAKICNpZmRlZiBIQVZFX0xJTlVYX0hEUkVHX0gKICAgICBpZiAoSFJEX3R5cGVfaW5kZXggPT0gMCkgICAgLyogSURFIGhhcmQgZGlzayAqLwogICAgICAgICByZXN1bHQgPSBpb2N0bChmZCwgSERJT19HRVRfSURFTlRJVFksICZIUkRfaW5mbyk7Ci0gICAgZWxzZSBpZiAoSFJEX3R5cGVfaW5kZXggPD0gMikgeyAgICAgLyogU0NTSSBoYXJkIGRpc2sgYW5kIG1kIGRldmljZXMgKi8KKyAgICBlbHNlIGlmIChIUkRfdHlwZV9pbmRleCAhPSAzKSB7ICAgICAvKiBTQ1NJIGhhcmQgZGlzaywgbWQgYW5kIExWTSBkZXZpY2VzICovCiAgICAgICAgIGxvbmcgICAgICAgICAgICBoOwogICAgICAgICByZXN1bHQgPSBpb2N0bChmZCwgQkxLR0VUU0laRSwgJmgpOwogICAgICAgICBpZiAocmVzdWx0ICE9IC0xICYmIEhSRF90eXBlX2luZGV4ID09IDIgJiYgaCA9PSAwTCkKQEAgLTg3OSwxMCArMTA0MCwxMyBAQAogICAgICAgICBpZiAocmVzdWx0ICE9IC0xKSB7CiAgICAgICAgICAgICBIUkRfaW5mby5sYmFfY2FwYWNpdHkgPSBoOwogICAgICAgICAgICAgaWYgKEhSRF90eXBlX2luZGV4ID09IDEpCi0gICAgICAgICAgICAgICAgc25wcmludGYoIEhSRF9pbmZvLm1vZGVsLCBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEsCisgICAgICAgICAgICAgICAgc25wcmludGYoIChjaGFyICopIEhSRF9pbmZvLm1vZGVsLCBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlNDU0kgZGlzayAoJXMpIiwgZGV2ZnVsbCk7CisJICAgIGVsc2UgaWYgKEhSRF90eXBlX2luZGV4ID49IDQpCisJCXNucHJpbnRmKCAoY2hhciAqKSBIUkRfaW5mby5tb2RlbCwgc2l6ZW9mKEhSRF9pbmZvLm1vZGVsKS0xLAorCQkJICJMVk0gdm9sdW1lICglcykiLCBkZXZmdWxsICsgc3RybGVuKCIvZGV2L21hcHBlci8iKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc25wcmludGYoIEhSRF9pbmZvLm1vZGVsLCBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEsCisgICAgICAgICAgICAgICAgc25wcmludGYoIChjaGFyICopIEhSRF9pbmZvLm1vZGVsLCBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUkFJRCBkaXNrICglcykiLCBkZXZmdWxsKTsKICAgICAgICAgICAgIEhSRF9pbmZvLm1vZGVsWyBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEgXSA9IDA7CiAgICAgICAgICAgICBIUkRfaW5mby5jb25maWcgPSAwOwpAQCAtODk0LDYgKzEwNTgsMTAzIEBACiAgICAgcmVzdWx0ID0gaW9jdGwoZmQsIERJT0NHRElORk8sICZIUkRfaW5mbyk7CiAjZW5kaWYKIAorI2lmZGVmIGRhcndpbgorICAgIERBU2Vzc2lvblJlZiAgICAgICAgc2Vzc19yZWY7CisgICAgREFEaXNrUmVmICAgICAgICAgICBkaXNrOworICAgIENGRGljdGlvbmFyeVJlZiAgICAgZGVzYzsKKyAgICBDRlN0cmluZ1JlZiAgICAgICAgIHN0cl9yZWY7CisgICAgQ0ZOdW1iZXJSZWYgICAgICAgICBudW1iZXJfcmVmOworICAgIENGQm9vbGVhblJlZiAgICAgICAgYm9vbF9yZWY7CisgICAgQ0ZTdHJpbmdFbmNvZGluZyAgICBzeXNfZW5jb2RpbmcgPSBDRlN0cmluZ0dldFN5c3RlbUVuY29kaW5nKCk7CisKKyAgICBzZXNzX3JlZiA9IERBU2Vzc2lvbkNyZWF0ZSggTlVMTCApOworICAgIGlmIChOVUxMID09IHNlc3NfcmVmKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBkaXNrID0gREFEaXNrQ3JlYXRlRnJvbUJTRE5hbWUoIE5VTEwsIHNlc3NfcmVmLCBkZXZmdWxsICk7CisgICAgaWYgKE5VTEwgPT0gZGlzaykgeworICAgICAgICBDRlJlbGVhc2Uoc2Vzc19yZWYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZGVzYyA9IERBRGlza0NvcHlEZXNjcmlwdGlvbiggZGlzayApOworICAgIGlmIChOVUxMID09IGRlc2MpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKGRpc2spOworICAgICAgICBDRlJlbGVhc2Uoc2Vzc19yZWYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbnVtYmVyX3JlZiA9IChDRk51bWJlclJlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uTWVkaWFTaXplS2V5KTsKKyAgICBpZiAobnVtYmVyX3JlZikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXJfcmVmLCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmSFJEX2NhcCk7CisgICAgZWxzZQorICAgICAgICBIUkRfY2FwID0gMDsKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkaXNrbWdyOmRhcndpbiIsICIgc2l6ZSAlbGxkXG4iLCBIUkRfY2FwKSk7CisKKyAgICAvKiogd3JpdGFibGU/ICAqLworICAgIGJvb2xfcmVmID0gKENGQm9vbGVhblJlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uTWVkaWFXcml0YWJsZUtleSk7CisgICAgaWYgKGJvb2xfcmVmKSB7CisgICAgICAgIEhSRF9hY2Nlc3MgPSBDRkJvb2xlYW5HZXRWYWx1ZShib29sX3JlZik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgSFJEX2FjY2VzcyA9IDA7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZGlza21ncjpkYXJ3aW4iLCAiIHdyaXRhYmxlICVkXG4iLAorICAgICAgICAgICAgICAgIEhSRF9hY2Nlc3MpKTsKKworICAgIC8qKiByZW1vdmFibGU/ICAqLworICAgIGJvb2xfcmVmID0gKENGQm9vbGVhblJlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uTWVkaWFSZW1vdmFibGVLZXkpOworICAgIGlmIChib29sX3JlZikgeworICAgICAgICBIUkRfcmVtb3ZlYmxlID0gQ0ZCb29sZWFuR2V0VmFsdWUoYm9vbF9yZWYpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIEhSRF9yZW1vdmVibGUgPSAwOworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRpc2ttZ3I6ZGFyd2luIiwgIiByZW1vdmFibGUgJWRcbiIsCisgICAgICAgICAgICAgICAgSFJEX3JlbW92ZWJsZSkpOworCisgICAgLyoqIGdldCB0eXBlICovCisgICAgc3RyX3JlZiA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uTWVkaWFUeXBlS2V5KTsKKyAgICBpZiAoc3RyX3JlZikgeworICAgICAgICBIUkRfdHlwZSA9IF9nZXRfdHlwZV92YWx1ZShDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19lbmNvZGluZykpOworICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkaXNrbWdyOmRhcndpbiIsICIgdHlwZSAlcyAvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwgc3lzX2VuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgSFJEX3R5cGUpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0cl9yZWYgPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgICAgICBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXNjLCBrREFEaXNrRGVzY3JpcHRpb25EZXZpY2VQcm90b2NvbEtleSk7CisgICAgICAgIGlmIChzdHJfcmVmKSB7CisgICAgICAgICAgICBIUkRfdHlwZSA9IAorICAgICAgICAgICAgICAgIF9nZXRfdHlwZV9mcm9tX3Byb3RvY29sKENGU3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJfcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfZW5jb2RpbmcpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRpc2ttZ3I6ZGFyd2luIiwgIiB0eXBlICVzIC8gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwgc3lzX2VuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhSRF90eXBlKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSFJEX3R5cGUgPSBIUkRJU0tTVE9SQUdFTUVESUFfVU5LTk9XTjsKKyAgICB9CisKKyAgICAvKiogbW9kZWwgKi8KKyAgICBzdHJfcmVmID0gKENGU3RyaW5nUmVmKQorICAgICAgICBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXNjLCBrREFEaXNrRGVzY3JpcHRpb25EZXZpY2VNb2RlbEtleSk7CisgICAgaWYgKHN0cl9yZWYpIHsKKyAgICAgICAgc3RybGNweShIUkRfbW9kZWwsIENGU3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJfcmVmLCBzeXNfZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgIHNpemVvZihIUkRfbW9kZWwpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZGlza21ncjpkYXJ3aW4iLCAiIG1vZGVsICVzXG4iLCBIUkRfbW9kZWwpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBIUkRfbW9kZWxbMF0gPSAwOworICAgIENGUmVsZWFzZShkaXNrKTsKKyAgICBDRlJlbGVhc2UoZGVzYyk7CisgICAgQ0ZSZWxlYXNlKHNlc3NfcmVmKTsKKyAgICByZXN1bHQgPSAwOworI2VuZGlmCisKICAgICByZXR1cm4gKHJlc3VsdCk7CiB9CiAKQEAgLTkxMiw2ICsxMTczLDExIEBACiAgICAgICAgIHJldHVybiAoMik7ICAgICAgICAgICAgIC8qIHJlYWQgb25seSAqLwogI2VuZGlmCiAKKyNpZmRlZiBkYXJ3aW4KKyAgICBpZiAoIUhSRF9hY2Nlc3MpCisgICAgICAgIHJldHVybiAoMik7CisjZW5kaWYKKwogICAgIHJldHVybiAoMSk7ICAgICAgICAgICAgICAgICAvKiByZWFkLXdyaXRlICovCiB9CiAKQEAgLTk4NCw2ICsxMjUwLDkgQEAKICAgICB9CiAjZW5kaWYKIAorI2lmZGVmIGRhcndpbgorICAgIHJldHVybiBIUkRfdHlwZTsKKyNlbmRpZgogCiAgICAgcmV0dXJuICgyKTsgICAgICAgICAgICAgICAgIC8qIFVua25vd24gKi8KIH0KQEAgLTEwMTQsNSArMTI4MywxNTAgQEAKICAgICAgICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgLyogdHJ1ZSAqLwogI2VuZGlmCiAKKyNpZmRlZiBkYXJ3aW4KKyAgICBpZiAoSFJEX3JlbW92ZWJsZSkKKyAgICAgICAgcmV0dXJuICgxKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuICgyKTsgICAgICAgICAgICAgICAgIC8qIGZhbHNlICovCiB9CisKKyNpZmRlZiBkYXJ3aW4KK3R5cGVkZWYgc3RydWN0IHR5cGVfdmFsdWVfbWFwX3MgeworICAgICBjb25zdCBjaGFyICp0eXBlOworICAgICB1aW50MzJfdCAgICB2YWx1ZTsKK30gdHlwZV92YWx1ZV9tYXA7CisKK3N0YXRpYyB0eXBlX3ZhbHVlX21hcCBtZWRpYV90eXBlX21hcFtdID0geworICAgIHsgIkNELVJPTSIsIEhSRElTS1NUT1JBR0VNRURJQV9PUFRJQ0FMRElTS1JPTX0sCisgICAgeyAiRFZELVIiLCBIUkRJU0tTVE9SQUdFTUVESUFfT1BUSUNBTERJU0tXT1JNfSwKKyAgICB7ICJEVkQrUiIsIEhSRElTS1NUT1JBR0VNRURJQV9PUFRJQ0FMRElTS1dPUk19LAorfTsgIAorc3RhdGljIGludCBtZWRpYV90eXBlcyA9IHNpemVvZihtZWRpYV90eXBlX21hcCkvc2l6ZW9mKG1lZGlhX3R5cGVfbWFwWzBdKTsKKworc3RhdGljIGludAorX2dldF90eXBlX3ZhbHVlKCBjb25zdCBjaGFyICpzdHJfdHlwZSApCit7CisgICAgaW50ICAgICAgICAgICBpLCBsZW47CisgICAgCisgICAgaWYgKE5VTEwgPT0gc3RyX3R5cGUpCisgICAgICAgIHJldHVybiBIUkRJU0tTVE9SQUdFTUVESUFfVU5LTk9XTjsKKworICAgIGxlbiA9IHN0cmxlbihzdHJfdHlwZSk7CisgICAgZm9yKGk9MDsgaSA8IG1lZGlhX3R5cGVzOyArK2kpIHsKKyAgICAgICAgaWYgKDAgPT0gc3RyY21wKG1lZGlhX3R5cGVfbWFwW2ldLnR5cGUsIHN0cl90eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBtZWRpYV90eXBlX21hcFtpXS52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gSFJESVNLU1RPUkFHRU1FRElBX1VOS05PV047Cit9CisKK3N0YXRpYyB0eXBlX3ZhbHVlX21hcCBwcm90b19tYXBbXSA9IHsKKyAgICB7ICJBVEEiLCBIUkRJU0tTVE9SQUdFTUVESUFfSEFSRERJU0t9LAorICAgIHsgIkFUQVBJIiwgSFJESVNLU1RPUkFHRU1FRElBX09QVElDQUxESVNLUk9NfQorfTsKK3N0YXRpYyBpbnQgcHJvdG9fbWFwcyA9IHNpemVvZihwcm90b19tYXApL3NpemVvZihwcm90b19tYXBbMF0pOworCitzdGF0aWMgaW50IF9nZXRfdHlwZV9mcm9tX3Byb3RvY29sKCBjb25zdCBjaGFyICpwcm90ICkKK3sgICAKKyAgICBpbnQgICAgICAgICAgIGksIGxlbjsKKworICAgIGlmIChOVUxMID09IHByb3QpCisgICAgICAgIHJldHVybiBUVl9GQUxTRTsKKworICAgIGxlbiA9IHN0cmxlbihwcm90KTsKKyAgICBmb3IoaT0wOyBpIDwgcHJvdG9fbWFwczsgKytpKSB7CisgICAgICAgIGlmICgwID09IHN0cmNtcChwcm90b19tYXBbaV0udHlwZSwgcHJvdCkpCisgICAgICAgICAgICByZXR1cm4gcHJvdG9fbWFwW2ldLnZhbHVlOworICAgIH0KKworICAgIHJldHVybiBIUkRJU0tTVE9SQUdFTUVESUFfVU5LTk9XTjsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBsaW51eAorI2lmIGRlZmluZWQoSEFWRV9SRUdFWF9IKSAmJiBkZWZpbmVkKEhBVkVfUkVHQ09NUCkKK3N0YXRpYyBjaGFyICAgICpsdm1fZGV2aWNlX25hbWVzW01BWF9OVU1CRVJfRElTS19UWVBFU107CitzdGF0aWMgaW50ICAgICAgbHZtX2RldmljZV9jb3VudDsKKyNlbmRpZgorCitzdGF0aWMgdm9pZAorQWRkX0xWTV9EaXNrcyh2b2lkKQoreworI2lmIGRlZmluZWQoSEFWRV9SRUdFWF9IKSAmJiBkZWZpbmVkKEhBVkVfUkVHQ09NUCkKKyAgICAvKgorICAgICAqIExWTSBkZXZpY2VzIGFyZSBoYXJkZXIgYmVjYXVzZSB0aGVpciBuYW1lIGNhbiBiZSBhbG1vc3QgYW55dGhpbmcgKHNlZSAKKyAgICAgKiByZWdleHAgYmVsb3cpLiBFYWNoIGxvZ2ljYWwgdm9sdW1lIGlzIGludGVycHJldGVkIGFzIGl0cyBvd24gZGV2aWNlIHdpdGgKKyAgICAgKiBvbmUgcGFydGl0aW9uLCBldmVuIGlmIHR3byBsb2dpY2FsIHZvbHVtZXMgc2hhcmUgY29tbW9uIHZvbHVtZSBncm91cC4gCisgICAgICovCisgICAgcmVnZXhfdCAgICAgICAgIGx2b2w7CisgICAgaW50ICAgICAgICAgICAgIHJlczsKKyAgICBESVIgICAgICAgICAgICAqZGlyOworICAgIHN0cnVjdCBkaXJlbnQgICpkOworCisgICAgcmVzID0KKyAgICAgICAgcmVnY29tcCgmbHZvbCwgIlswLTlhLXpBLVorX1xcLi1dKy1bMC05YS16QS1aK19cXC4tXSsiLAorICAgICAgICAgICAgICAgIFJFR19FWFRFTkRFRCB8IFJFR19OT1NVQik7CisgICAgaWYgKHJlcyAhPSAwKSB7CisgICAgICAgIGNoYXIgICAgICAgICAgICBlcnJvclsyMDBdOworICAgICAgICByZWdlcnJvcihyZXMsICZsdm9sLCBlcnJvciwgc2l6ZW9mKGVycm9yKS0xKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsCisgICAgICAgICAgICAgICAgICAgICJBZGRfTFZNX0Rpc2tzOiBjYW5ub3QgY29tcGlsZSByZWdleHA6ICVzIiwgZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpciA9IG9wZW5kaXIoIi9kZXYvbWFwcGVyLyIpOworICAgIGlmIChkaXIgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwKKyAgICAgICAgICAgICAgICAgICAgIkFkZF9MVk1fRGlza3M6IGNhbm5vdCBvcGVuIC9kZXYvbWFwcGVyIikpOworICAgICAgICByZWdmcmVlKCZsdm9sKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlICgoZCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworICAgICAgICByZXMgPSByZWdleGVjKCZsdm9sLCBkLT5kX25hbWUsIDAsIE5VTEwsIDApOworICAgICAgICBpZiAocmVzID09IDApIHsKKyAgICAgICAgICAgIGNoYXIgKnBhdGggPSAoY2hhciopbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICAgICAgICBpZiAocGF0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZF9MVk1fRGlza3M6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+ZF9uYW1lKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzbnByaW50ZihwYXRoLCBQQVRIX01BWC0xLCAiL2Rldi9tYXBwZXIvJXMiLCBkLT5kX25hbWUpOworICAgICAgICAgICAgQWRkX0hSX0Rpc2tfZW50cnkocGF0aCwgLTEsIC0xLCAwLCAwLCBwYXRoLCAwLCAwKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHN0b3JlIHRoZSBkZXZpY2UgbmFtZSBzbyB3ZSBjYW4gZnJlZSBpdCBpbiBSZW1vdmVfTFZNX0Rpc2tzIAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBsdm1fZGV2aWNlX25hbWVzW2x2bV9kZXZpY2VfY291bnRdID0gcGF0aDsKKyAgICAgICAgICAgICsrbHZtX2RldmljZV9jb3VudDsKKyAgICAgICAgICAgIGlmIChsdm1fZGV2aWNlX2NvdW50ID49IE1BWF9OVU1CRVJfRElTS19UWVBFUykgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2Rpc2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZGRfTFZNX0Rpc2tzOiBtYXhpbXVtIGNvdW50IG9mIExWTSBkZXZpY2VzIHJlYWNoZWQiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKKyAgICByZWdmcmVlKCZsdm9sKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorUmVtb3ZlX0xWTV9EaXNrcyh2b2lkKQoreworI2lmIGRlZmluZWQoSEFWRV9SRUdFWF9IKSAmJiBkZWZpbmVkKEhBVkVfUkVHQ09NUCkKKyAgICAvKgorICAgICAqIGp1c3QgZnJlZSB0aGUgZGV2aWNlIG5hbWVzIGFsbG9jYXRlZCBpbiBhZGRfbHZtX2Rpc2tzIAorICAgICAqLworICAgIGludCAgICAgICAgICAgICBpOworICAgIGZvciAoaSA9IDA7IGkgPCBsdm1fZGV2aWNlX2NvdW50OyBpKyspIHsKKyAgICAgICAgZnJlZShsdm1fZGV2aWNlX25hbWVzW2ldKTsKKyAgICAgICAgbHZtX2RldmljZV9uYW1lc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGx2bV9kZXZpY2VfY291bnQgPSAwOworI2VuZGlmCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKaW5kZXggZWZmMmE2Ny4uYjNjNDM5YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKQEAgLTgsNiArOCw4IEBACiBjb25maWdfcmVxdWlyZShob3N0L2hyX2RldmljZSkKIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfaHJfZGlzayh2b2lkKTsKK2V4dGVybiB2b2lkICAgICBzaHV0ZG93bl9ocl9kaXNrKHZvaWQpOworCiBleHRlcm4gdm9pZCAgICAgSW5pdF9IUl9EaXNrKHZvaWQpOwogZXh0ZXJuIGludCAgICAgIEdldF9OZXh0X0hSX0Rpc2sodm9pZCk7CiBleHRlcm4gaW50ICAgICAgR2V0X05leHRfSFJfRGlza19QYXJ0aXRpb24oY2hhciAqLCBzaXplX3QsIGludCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jCmluZGV4IDdmYTIwNTguLmIyM2QzMjIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jCkBAIC0yLDE0ICsyLDI2IEBACiAgKiAgSG9zdCBSZXNvdXJjZXMgTUlCIC0gRmlsZSBTeXN0ZW0gZGV2aWNlIGdyb3VwIGltcGxlbWVudGF0aW9uIC0gaHJfZmlsZXN5cy5jCiAgKgogICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oPgogI2luY2x1ZGUgImhvc3RfcmVzLmgiCiAjaW5jbHVkZSAiaHJfZmlsZXN5cy5oIgogI2luY2x1ZGUgImhyX3N0b3JhZ2UuaCIKKyNpbmNsdWRlICJocl9kaXNrLmgiCiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAKICNpZiBIQVZFX01OVEVOVF9ICkBAIC00MiwxMiArNTQsMjAgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICNpbmNsdWRlIDxzeXMvbW50Y3RsLmg+CiAjaW5jbHVkZSA8c3lzL3Ztb3VudC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzZV9maW5kX2ZyZWVfdmFsdWVfaW5fc2xpc3QpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGN0aW1lX3RvX3RpbWV0KQorCiAjaWYgZGVmaW5lZChic2RpNCkgfHwgZGVmaW5lZChmcmVlYnNkMykgfHwgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChmcmVlYnNkNSkgfHwgZGVmaW5lZChkYXJ3aW4pCiAjaWYgSEFWRV9HRVRGU1NUQVQgJiYgZGVmaW5lZChNRlNOQU1FTEVOKQogI2RlZmluZSBNT1VOVF9ORlMJIm5mcyIKQEAgLTEwOSw2ICsxMjksMTYgQEAKICNkZWZpbmUJSFJGU19uYW1lCWZfbW50ZnJvbW5hbWUKICNkZWZpbmUgSFJGU19zdGF0ZnMJc3RhdHZmcwogI2RlZmluZQlIUkZTX3R5cGUJZl9mc3R5cGVuYW1lCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKSAmJiAhZGVmaW5lZChIQVZFX1NUQVRGUykgJiYgZGVmaW5lZChIQVZFX1NUQVRWRlMpCisKK3N0YXRpYyBzdHJ1Y3Qgc3RhdGZzCSpmc3N0YXRzID0gTlVMTDsKK3N0cnVjdCBzdGF0ZnMJCSpIUkZTX2VudHJ5Oworc3RhdGljIGludAkJZnNjb3VudDsKKyNkZWZpbmUgSFJGU19tb3VudAlmX21udG9ubmFtZQorI2RlZmluZSBIUkZTX25hbWUJZl9tbnRmcm9tbmFtZQorI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCisjZGVmaW5lIEhSRlNfdHlwZQlmX2ZzdHlwZW5hbWUKKwogI2VsaWYgZGVmaW5lZChIQVZFX0dFVEZTU1RBVCkKIHN0YXRpYyBzdHJ1Y3Qgc3RhdGZzICpmc3N0YXRzID0gMDsKIHN0YXRpYyBpbnQgICAgICBmc2NvdW50OwpAQCAtMTM3LDcgKzE2Nyw3IEBACiAjZGVmaW5lIEhSRlNfc3RhdGZzCXdpbl9zdGF0ZnMKICNkZWZpbmUJSFJGU190eXBlCWZfdHlwZQogCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogCiBzdHJ1Y3Qgdm1vdW50ICphaXhtbnQsICphaXhjdXJyOwogc3RydWN0IEhSRlNfZW50cnkgewpAQCAtMTk1LDE1ICsyMjUsMjQgQEAKICNkZWZpbmUgSFJGU1lTX1BBUlREVU1QCQk5CiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJmc3lzX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUkZTWVNfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDF9fSwKLSAgICB7SFJGU1lTX01PVU5ULCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDJ9fSwKLSAgICB7SFJGU1lTX1JNT1VOVCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCAzfX0sCi0gICAge0hSRlNZU19UWVBFLCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDR9fSwKLSAgICB7SFJGU1lTX0FDQ0VTUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgNX19LAotICAgIHtIUkZTWVNfQk9PVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgNn19LAotICAgIHtIUkZTWVNfU1RPUkVJRFgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDd9fSwKLSAgICB7SFJGU1lTX0ZVTExEVU1QLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDh9fSwKLSAgICB7SFJGU1lTX1BBUlREVU1QLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDl9fSwKKyAgICB7SFJGU1lTX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCAxfX0sCisgICAge0hSRlNZU19NT1VOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCAyfX0sCisgICAge0hSRlNZU19STU9VTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgM319LAorICAgIHtIUkZTWVNfVFlQRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA0fX0sCisgICAge0hSRlNZU19BQ0NFU1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZmlsZXN5cywgMiwgezEsIDV9fSwKKyAgICB7SFJGU1lTX0JPT1QsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZmlsZXN5cywgMiwgezEsIDZ9fSwKKyAgICB7SFJGU1lTX1NUT1JFSURYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA3fX0sCisgICAge0hSRlNZU19GVUxMRFVNUCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA4fX0sCisgICAge0hSRlNZU19QQVJURFVNUCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA5fX0sCiB9Owogb2lkICAgICAgICAgICAgIGhyZnN5c192YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA4IH07CiAKQEAgLTIxMiw3ICsyNTEsNyBAQAogewogICAgIFJFR0lTVEVSX01JQigiaG9zdC9ocl9maWxlc3lzIiwgaHJmc3lzX3ZhcmlhYmxlcywgdmFyaWFibGU0LAogICAgICAgICAgICAgICAgICBocmZzeXNfdmFyaWFibGVzX29pZCk7Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgIC8qIHNvbWV0aGluZyBsZWFrcywgbWFrZSBpdCBpZGlvdC1zYWZlICovCiAgICAgYWl4bW50ID0gTlVMTDsKICAgICBhaXhjdXJyID0gTlVMTDsKQEAgLTI3OSw3ICszMTgsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2ZpbGVzeXMiLCAiLi4uIGdldCBmaWxlc3lzIHN0YXRzICIpKTsKQEAgLTQwNSw3ICs0NDQsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgfQotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgc3dpdGNoIChIUkZTX2VudHJ5LT5IUkZTX3R5cGUpIHsKICAgICAgICAgY2FzZSBNTlRfQUlYOgogICAgICAgICBjYXNlIE1OVF9KRlM6CkBAIC01MjYsMTAgKzU2NSwxNCBAQAogI2lmIGRlZmluZWQoSEFWRV9TVEFUVkZTKSAmJiBkZWZpbmVkKF9fTmV0QlNEX18pCiAJbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT5mX2ZsYWcgJiBNTlRfUkRPTkxZID8gMiA6IDE7CiAjZWxpZiBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKQorI2lmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZMQUdTCiAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+Zl9mbGFncyAmIE1OVF9SRE9OTFkgPyAyIDogMTsKKyNlbHNlCisgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+Zl9mbGFnICYgTU5UX1JET05MWSA/IDIgOiAxOworI2VuZGlmCiAjZWxpZiBkZWZpbmVkKGN5Z3dpbikKICAgICAgICAgbG9uZ19yZXR1cm4gPSAxOwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAoSFJGU19lbnRyeS0+SFJGU19mbGFncyAmIE1OVF9SRUFET05MWSkgPT0gMCA/IDEgOiAyOwogI2Vsc2UKICNpZiBIQVZFX0hBU01OVE9QVApAQCAtNTkyLDcgKzYzNSw3IEBACiAgICAgZ2V0ZnNzdGF0KGZzc3RhdHMsIGZzY291bnQgKiBzaXplb2YoKmZzc3RhdHMpLCBNTlRfTk9XQUlUKTsKICNlbmRpZgogICAgIEhSRlNfaW5kZXggPSAwOwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBpbnQgcmV0OwogICAgIHVpbnQgc2l6ZTsKICAgICByZXQgPSAwOwpAQCAtNjIxLDkgKzY2NCw3IEBACiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgZnAgPSBmb3BlbihFVENfTU5UVEFCLCAiciIpOwogICAgIGlmICghZnApIHsKLSAgICAgIGNoYXIgdG1wYnVmW1NUUklOR01BWF07Ci0gICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbid0IG9wZW4gbW50dGFiICVzXG4iLCBFVENfTU5UVEFCICk7Ci0gICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQ2FuJ3Qgb3BlbiBtbnR0YWIgJXNcbiIsIEVUQ19NTlRUQUIpOwogICAgIH0KICNlbmRpZgogfQpAQCAtNjc4LDcgKzcxOSw3IEBACiAgICAgInByb2MiLAogICAgICJmZCIsCiAjZW5kaWYKLSAgICAwCisgICAgTlVMTAogfTsKIAogaW50CkBAIC02ODksNyArNzMwLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIEhSRlNfZW50cnkgPSBmc3N0YXRzICsgSFJGU19pbmRleDsKICAgICByZXR1cm4gKytIUkZTX2luZGV4OwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBpZihhaXhjdXJyID09IE5VTEwpIHsKICAgICAgICAgaWYoYWl4bW50ICE9IE5VTEwpIGZyZWUoYWl4bW50KTsKICAgICAgICAgYWl4bW50ID0gTlVMTDsKQEAgLTcyOSwxMyArNzcwLDkgQEAKICAgICAgICAgcmV0dXJuIC0xOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2xhcmlzMiAqLwogCi0gICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZmlsZXN5cyIsICJHZXRfTmV4dF9IUkZTICVzXG4iLCBIUkZTX2VudHJ5LT5IUkZTX25hbWUpKTsKLQogICAgIGZvciAoY3BwID0gSFJGU19pZ25vcmVzOyAqY3BwICE9IE5VTEw7ICsrY3BwKQotICAgICAgICBpZiAoIXN0cmNtcChIUkZTX2VudHJ5LT5IUkZTX3R5cGUsICpjcHApKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9maWxlc3lzIiwgIkdldF9OZXh0X0hSRlM6IHNraXBwaW5nICVzICglcylcbiIsIEhSRlNfZW50cnktPkhSRlNfdHlwZSwgKmNwcCkpOworICAgICAgICBpZiAoIXN0cmNtcChIUkZTX2VudHJ5LT5IUkZTX3R5cGUsICpjcHApKQogICAgICAgICAgICAgcmV0dXJuIEdldF9OZXh0X0hSX0ZpbGVTeXMoKTsKLSAgICAgICAgfQogCiAgICAgLyoKICAgICAgKiBUcnkgYW5kIGVuc3VyZSB0aGF0IGluZGV4IHZhbHVlcyBhcmUgcGVyc2lzdGVudApAQCAtNzY1LDcgKzgwMiw3IEBACiAjaWYgSEFWRV9HRVRGU1NUQVQgJiYgIWRlZmluZWQoTUZTTkFNRUxFTikKICAgICBpZiAoKEhSRlNfZW50cnktPkhSRlNfdHlwZSA9PSBNT1VOVF9ORlMpIHx8CiAgICAgICAgIChIUkZTX2VudHJ5LT5IUkZTX3R5cGUgPT0gTU9VTlRfQUZTKSkKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgaWYoSFJGU19lbnRyeS0+SFJGU190eXBlID09IE1OVF9ORlMgfHwgSFJGU19lbnRyeS0+SFJGU190eXBlID09IE1OVF9ORlMzKQogI2Vsc2UgLyogSEFWRV9HRVRGU1NUQVQgKi8KICAgICBpZiAoIEhSRlNfZW50cnktPkhSRlNfdHlwZSAhPSBOVUxMICYmICgKQEAgLTgwOSw3ICs4NDYsNyBAQAogICAgIGlmIChmc3N0YXRzKQogICAgICAgICBmcmVlKChjaGFyICopIGZzc3RhdHMpOwogICAgIGZzc3RhdHMgPSBOVUxMOwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBpZihhaXhtbnQgIT0gTlVMTCkgewogICAgICAgICBmcmVlKGFpeG1udCk7CiAgICAgICAgIGFpeG1udCA9IE5VTEw7CkBAIC04NjYsMTMgKzkwMywxMyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICArK2NwMjsKLSAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIpKQorICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwMiAmIDB4RkYpKQogICAgICAgICAgICAgICAgICsrY3AyOyAgICAgICAgICAvKiBOb3cgZmluZCB0aGUgZHVtcCBsZXZlbCAqLwogCiAgICAgICAgICAgICBpZiAobGV2ZWwgPT0gRlVMTF9EVU1QKSB7CiAgICAgICAgICAgICAgICAgaWYgKCooY3AyKyspICE9ICcwJykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogTm90IGludGVyZXN0ZWQgaW4gcGFydGlhbCBkdW1wcyAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIpKQorICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIgJiAweEZGKSkKICAgICAgICAgICAgICAgICAgICAgKytjcDI7CiAKICAgICAgICAgICAgICAgICBkdW1wZGF0ZSA9IGN0aW1lX3RvX3RpbWV0KGNwMik7CkBAIC04ODEsNyArOTE4LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyogUGFydGlhbCBEdW1wICovCiAgICAgICAgICAgICAgICAgaWYgKCooY3AyKyspID09ICcwJykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogTm90IGludGVyZXN0ZWQgaW4gZnVsbCBkdW1wcyAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIpKQorICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIgJiAweEZGKSkKICAgICAgICAgICAgICAgICAgICAgKytjcDI7CiAKICAgICAgICAgICAgICAgICB0bXAgPSBjdGltZV90b190aW1ldChjcDIpOwpAQCAtOTU1LDcgKzk5Miw3IEBACiAgIAkJICogaW4gY2FzZSBvZiA1MTIgKGZfYmxvY2tzLzIpIGlzIHJldHVybmVkCiAgIAkJICogb3RoZXJ3aXNlIChmX2Jsb2NrcyooZl9ic2l6ZS8xMDI0KSkgaXMgcmV0dXJuZWQKICAgCQkgKi8KLSNpZiBkZWZpbmVkKHNvbGFyaXMyKSAmJiBkZWZpbmVkKFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRSkKKyNpZiBkZWZpbmVkKHNvbGFyaXMyKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0ZnNfYnVmLmZfYmxvY2tzKihzdGF0ZnNfYnVmLmZfZnJzaXplLzEwMjQpKTsKICNlbHNlCiAgIAkJaWYgKHN0YXRmc19idWYuZl9ic2l6ZSA9PSA1MTIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jCmluZGV4IDRmODVmOTYuLjZjY2U1OGMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KQEAgLTIyLDYgKzIzLDkgQEAKICNpbmNsdWRlICJtaWJJSS9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiaHJfbmV0d29yay5oIgogCisjaWYgIWRlZmluZWQoIHNvbGFyaXMyICkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9sZWdhY3kpCisjZW5kaWYgLyogIXNvbGFyaXMyICovCiAKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCkBAIC01MSw3ICs1NSw4IEBACiAjZGVmaW5lCUhSTkVUX0lGSU5ERVgJCTEKIAogc3RydWN0IHZhcmlhYmxlNCBocm5ldF92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJORVRfSUZJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJuZXQsIDIsIHsxLCAxfX0KKyAgICB7SFJORVRfSUZJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJuZXQsIDIsIHsxLCAxfX0KIH07CiBvaWQgICAgICAgICAgICAgaHJuZXRfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMywgNCB9OwogCkBAIC0xMzYsNyArMTQxLDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKICAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9uZXR3b3JrIiwgIi4uLiBnZXQgbmV0IHN0YXRzICIpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5jCmluZGV4IGFlMGJkOGUuLjNiOWFiZDYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uYwpAQCAtMSw4ICsxLDE3IEBACi0KIC8qCiAgKiAgSG9zdCBSZXNvdXJjZXMgTUlCIC0gcGFydGl0aW9uIGRldmljZSBncm91cCBpbXBsZW1lbnRhdGlvbiAtIGhyX3BhcnRpdGlvbi5jCiAgKgogICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CkBAIC0zNSw2ICs0NCwxMyBAQAogc3RhdGljIGludCAgICAgIEhSUF9zYXZlZERpc2tJbmRleDsKIHN0YXRpYyBpbnQgICAgICBIUlBfc2F2ZWRQYXJ0SW5kZXg7CiBzdGF0aWMgY2hhciAgICAgSFJQX3NhdmVkTmFtZVsxMDI0XTsKKyNpZmRlZiBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTAorc3RhdGljIGNoYXIgICAgIEhSUF9zYXZlZExhYmVsWzEwMjRdOworI2VuZGlmCisjaWZkZWYgZGFyd2luCitleHRlcm4gaW50CitHZXRfSFJfRGlza19MYWJlbChjaGFyICpzdHJpbmcsIHNpemVfdCBzdHJfbGVuLCBjb25zdCBjaGFyICpkZXZmdWxsKTsKKyNlbmRpZgogCiBzdGF0aWMgaW50ICAgICAgSFJQX0Rpc2tJbmRleDsKIApAQCAtNjAsMTEgKzc2LDE2IEBACiAjZGVmaW5lCUhSUEFSVF9GU0lEWAkJNQogCiBzdHJ1Y3QgdmFyaWFibGU0IGhycGFydGl0aW9uX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlBBUlRfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgMX19LAotICAgIHtIUlBBUlRfTEFCRUwsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCAyfX0sCi0gICAge0hSUEFSVF9JRCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnBhcnRpdGlvbiwgMiwgezEsIDN9fSwKLSAgICB7SFJQQVJUX1NJWkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgNH19LAotICAgIHtIUlBBUlRfRlNJRFgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgNX19CisgICAge0hSUEFSVF9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCAxfX0sCisgICAge0hSUEFSVF9MQUJFTCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnBhcnRpdGlvbiwgMiwgezEsIDJ9fSwKKyAgICB7SFJQQVJUX0lELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgM319LAorICAgIHtIUlBBUlRfU0laRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCA0fX0sCisgICAge0hSUEFSVF9GU0lEWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCA1fX0KIH07CiBvaWQgICAgICAgICAgICAgaHJwYXJ0aXRpb25fdmFyaWFibGVzX29pZFtdID0KICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA3IH07CkBAIC0xMzUsNiArMTU2LDcgQEAKICAgICAgICAgICAgIChuYW1lW0hSUEFSVF9ESVNLX05BTUVfTEVOR1RIXSAmCiAgICAgICAgICAgICAgKCgxIDw8IEhSREVWX1RZUEVfU0hJRlQpIC0gMSkpOwogCisgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3BhcnRpdGlvbiIsICIuLi4gbG93IGluZGV4ICVkXG4iLCBMb3dEaXNrSW5kZXgpKTsKICAgICAgICAgd2hpbGUgKEhSUF9EaXNrSW5kZXggPCBMb3dEaXNrSW5kZXgpIHsKICAgICAgICAgICAgIEluaXRfSFJfUGFydGl0aW9uKCk7ICAgICAgICAvKiBtb3ZlcyB0byBuZXh0IGRpc2sgKi8KICAgICAgICAgICAgIGlmIChIUlBfRGlza0luZGV4ID09IC0xKQpAQCAtMTQ0LDYgKzE2Niw3IEBACiAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIHBhcnRfaWR4ID0gR2V0X05leHRfSFJfUGFydGl0aW9uKCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3BhcnRpdGlvbiIsICIuLi4gcGFydCBpbmRleCAlZFxuIiwgcGFydF9pZHgpKTsKICAgICAgICAgaWYgKHBhcnRfaWR4ID09IDApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbmV3bmFtZVtIUlBBUlRfRElTS19OQU1FX0xFTkdUSF0gPQpAQCAtMTg1LDcgKzIwOCw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCiAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDIpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDI7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogCiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfcGFydGl0aW9uIiwgIi4uLiBnZXQgcGFydGl0aW9uIHN0YXRzICIpKTsKQEAgLTIyNSw4ICsyNDgsMTMgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSBwYXJ0X2lkeDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICBjYXNlIEhSUEFSVF9MQUJFTDoKKyNpZmRlZiBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTAorICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihIUlBfc2F2ZWRMYWJlbCk7CisgICAgICAgIHJldHVybiAodV9jaGFyICopIEhSUF9zYXZlZExhYmVsOworI2Vsc2UKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oSFJQX3NhdmVkTmFtZSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIEhSUF9zYXZlZE5hbWU7CisjZW5kaWYKICAgICBjYXNlIEhSUEFSVF9JRDogICAgICAgICAgICAvKiBVc2UgdGhlIGRldmljZSBudW1iZXIgKi8KICAgICAgICAgc3ByaW50ZihzdHJpbmcsICIweCV4IiwgKGludCkgc3RhdF9idWYuc3RfcmRldik7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0cmluZyk7CkBAIC0yNTksOSArMjg3LDExIEBACiBzdGF0aWMgdm9pZAogSW5pdF9IUl9QYXJ0aXRpb24odm9pZCkKIHsKKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wYXJ0aXRpb24iLCAiSW5pdF9IUl9QYXJ0aXRpb25cbiIpKTsKICAgICBIUlBfRGlza0luZGV4ID0gR2V0X05leHRfSFJfRGlzaygpOwogICAgIGlmIChIUlBfRGlza0luZGV4ICE9IC0xKQogICAgICAgICBIUlBfRGlza0luZGV4ICY9ICgoMSA8PCBIUkRFVl9UWVBFX1NISUZUKSAtIDEpOworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3BhcnRpdGlvbiIsICIuLi4gICVkXG4iLEhSUF9EaXNrSW5kZXgpKTsKIAogICAgIEhSUF9pbmRleCA9IC0xOwogfQpAQCAtMjcyLDYgKzMwMiw3IEBACiAgICAgY2hhciAgICAgICAgICAgIHN0cmluZ1sxMDI0XTsKICAgICBpbnQgICAgICAgICAgICAgZmQ7CiAKKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wYXJ0aXRpb24iLCAiR2V0X05leHRfSFJfUGFydGl0aW9uICVkXG4iLEhSUF9EaXNrSW5kZXgpKTsKICAgICBpZiAoSFJQX0Rpc2tJbmRleCA9PSAtMSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0zMDksNCArMzQwLDcgQEAKICAgICBIUlBfc2F2ZWREaXNrSW5kZXggPSBkaXNrX2lkeDsKICAgICBIUlBfc2F2ZWRQYXJ0SW5kZXggPSBwYXJ0X2lkeDsKICAgICAodm9pZCkgR2V0X05leHRfSFJfRGlza19QYXJ0aXRpb24oSFJQX3NhdmVkTmFtZSwgc2l6ZW9mKEhSUF9zYXZlZE5hbWUpLCBIUlBfaW5kZXgpOworI2lmZGVmIE5FVFNOTVBfQ0FOX0dFVF9ESVNLX0xBQkVMCisgICAgKHZvaWQpIEdldF9IUl9EaXNrX0xhYmVsKEhSUF9zYXZlZExhYmVsLCBzaXplb2YoSFJQX3NhdmVkTGFiZWwpLCBIUlBfc2F2ZWROYW1lKTsKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jCmluZGV4IDFkMWYyZWYuLjRjZmEyNWIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmMKQEAgLTQ4LDggKzQ4LDEwIEBACiAjZGVmaW5lCUhSUFJJTlRfRVJST1IJCTIKIAogc3RydWN0IHZhcmlhYmxlNCBocnByaW50X3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlBSSU5UX1NUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJwcmludCwgMiwgezEsIDF9fSwKLSAgICB7SFJQUklOVF9FUlJPUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnByaW50LCAyLCB7MSwgMn19CisgICAge0hSUFJJTlRfU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnByaW50LCAyLCB7MSwgMX19LAorICAgIHtIUlBSSU5UX0VSUk9SLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hycHJpbnQsIDIsIHsxLCAyfX0KIH07CiBvaWQgICAgICAgICAgICAgaHJwcmludF92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA1IH07CiAKQEAgLTEzOSw3ICsxNDEsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3ByaW50IiwgIi4uLiBnZXQgcHJpbnQgc3RhdHMgIikpOwpAQCAtMTc3LDkgKzE3OSwxMCBAQAogICAgIGNhc2UgSFJQUklOVF9FUlJPUjoKICNpZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUwogICAgICAgICByZXR1cm4gTlVMTDsKLSNlbmRpZgorI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOyAgICAgICAgLyogTnVsbCBzdHJpbmcgKi8KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3ByaW50IiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9ocnByaW50XG4iLAogICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaCBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaAppbmRleCAyM2NhMTQzLi43YWNlZThkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oCkBAIC02LDYgKzYsNyBAQAogI2RlZmluZSBfTUlCR1JPVVBfSFJQUklOVF9ICiAKIGNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfZGV2aWNlKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfaHJfcHJpbnQodm9pZCk7CiBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfaHJwcmludDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMKaW5kZXggZWNlMzM4ZC4uNmY5MzA3OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMKQEAgLTUxLDggKzUxLDEwIEBACiAjZGVmaW5lCUhSUFJPQ19MT0FECQkyCiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJwcm9jX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlBST0NfSUQsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfaHJwcm9jLCAyLCB7MSwgMX19LAotICAgIHtIUlBST0NfTE9BRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJwcm9jLCAyLCB7MSwgMn19CisgICAge0hSUFJPQ19JRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnByb2MsIDIsIHsxLCAxfX0sCisgICAge0hSUFJPQ19MT0FELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnByb2MsIDIsIHsxLCAyfX0KIH07CiBvaWQgICAgICAgICAgICAgaHJwcm9jX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDMsIDMgfTsKIApAQCAtMTM4LDcgKzE0MCw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCiAgICAgICAgICAgICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogCiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfcHJvYyIsICIuLi4gZ2V0IHByb2Mgc3RhdHMgIikpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYwppbmRleCAyNWZmM2RiLi4yNjRmZWNjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYwpAQCAtOCw3ICs4LDcgQEAKICNpZiBkZWZpbmVkKGZyZWVic2Q1KQogLyogdW5kZWZpbmUgdGhlc2UgaW4gb3JkZXIgdG8gdXNlIGdldGZzc3RhdCAqLwogI3VuZGVmIEhBVkVfU1RBVFZGUwotI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRQorI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUKICNlbmRpZgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0xOSwxMyArMTksNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jICBpbmNsdWRlIDxlcnJuby5oPgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTEyLDcgKzEwNiwxMCBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBIQVZFX1NZU19TWVNDVExfSCAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZm5kZWYgZHluaXggKi8KIAotI2lmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkgJiYgSEFWRV9MSUJQRVJGU1RBVF9ICisjaWYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpICYmIEhBVkVfTElCUEVSRlNUQVRfSAorI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2VuZGlmCiAKQEAgLTE2MCw2ICsxNTcsOSBAQAogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKKyNpZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KQEAgLTE4OSw3ICsxODksNyBAQAogZXh0ZXJuIHN0cnVjdCBtbnR0YWIgKkhSRlNfZW50cnk7CiAjZGVmaW5lIEhSRlNfbW91bnQJbW50X21vdW50cAogI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCi0jZGVmaW5lIEhSRlNfSEFTX0ZSU0laRSBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUKKyNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUKIAogI2VsaWYgZGVmaW5lZChXSU4zMikKIC8qIGZha2UgYmxvY2sgc2l6ZSAqLwpAQCAtMjA1LDE0ICsyMDUsMjIgQEAKIGV4dGVybiBpbnQgICAgICBmc2NvdW50OwogI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCiAjZGVmaW5lIEhSRlNfbW91bnQJZl9tbnRvbm5hbWUKLSNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRQorI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRQogCi0jZWxpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgICYmIGRlZmluZWQoU1RSVUNUX1NUQVRWRlNfSEFTX01OVF9ESVIpCisjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU1RBVFZGU19NTlRfRElSKQogCiBleHRlcm4gc3RydWN0IG1udGVudCAqSFJGU19lbnRyeTsKIGV4dGVybiBpbnQgICAgICBmc2NvdW50OwogI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCiAjZGVmaW5lIEhSRlNfbW91bnQJbW50X2RpcgorI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRQorCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKSAmJiAhZGVmaW5lZChIQVZFX1NUQVRGUykgJiYgZGVmaW5lZChIQVZFX1NUQVRWRlMpCisKK2V4dGVybiBzdHJ1Y3Qgc3RhdGZzICpIUkZTX2VudHJ5OworZXh0ZXJuIGludCAgICAgIGZzY291bnQ7CisjZGVmaW5lIEhSRlNfc3RhdGZzCXN0YXR2ZnMKKyNkZWZpbmUgSFJGU19tb3VudAlmX21udG9ubmFtZQogI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFCiAKICNlbGlmIGRlZmluZWQoSEFWRV9HRVRGU1NUQVQpCkBAIC0yMjEsMTQgKzIyOSwxNCBAQAogZXh0ZXJuIGludCAgICAgIGZzY291bnQ7CiAjZGVmaW5lIEhSRlNfc3RhdGZzCXN0YXRmcwogI2RlZmluZSBIUkZTX21vdW50CWZfbW50b25uYW1lCi0jZGVmaW5lIEhSRlNfSEFTX0ZSU0laRSBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZSU0laRQorI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRlJTSVpFCiAKICNlbHNlCiAKIGV4dGVybiBzdHJ1Y3QgbW50ZW50ICpIUkZTX2VudHJ5OwogI2RlZmluZSBIUkZTX21vdW50CW1udF9kaXIKICNkZWZpbmUgSFJGU19zdGF0ZnMJc3RhdGZzCi0jZGVmaW5lIEhSRlNfSEFTX0ZSU0laRSBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZSU0laRQorI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRlJTSVpFCiAKICNlbmRpZgogCQpAQCAtMjQ5LDYgKzI1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICosIFdyaXRlTWV0aG9kICoqKTsKIHZvaWQqICAgICAgICAgICBoZWFkZXJfaHJzdG9yZUVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7CitOZXRzbm1wX05vZGVfSGFuZGxlciBoYW5kbGVfbWVtc2l6ZTsKIAogI2lmZGVmIHNvbGFyaXMyCiB2b2lkICAgICAgICAgICAgc29sX2dldF9zd2FwaW5mbyhpbnQgKiwgaW50ICopOwpAQCAtMjYzLDE3ICsyNzIsMjUgQEAKICNkZWZpbmUJSFJTVE9SRV9VU0VECQk3CiAjZGVmaW5lCUhSU1RPUkVfRkFJTFMJCTgKIAotc3RydWN0IHZhcmlhYmxlNCBocnN0b3JlX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlNUT1JFX01FTVNJWkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3RvcmUsIDEsIHsyfX0sCi0gICAge0hSU1RPUkVfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3RvcmUsIDMsIHszLCAxLCAxfX0sCi0gICAge0hSU1RPUkVfVFlQRSwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgMn19LAotICAgIHtIUlNUT1JFX0RFU0NSLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyc3RvcmUsIDMsIHszLCAxLCAzfX0sCi0gICAge0hSU1RPUkVfVU5JVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3RvcmUsIDMsIHszLCAxLCA0fX0sCi0gICAge0hSU1RPUkVfU0laRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzdG9yZSwgMywgezMsIDEsIDV9fSwKLSAgICB7SFJTVE9SRV9VU0VELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgNn19LAotICAgIHtIUlNUT1JFX0ZBSUxTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgN319CitzdHJ1Y3QgdmFyaWFibGUyIGhyc3RvcmVfdmFyaWFibGVzW10gPSB7CisgICAge0hSU1RPUkVfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHsxfX0sCisgICAge0hSU1RPUkVfVFlQRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7Mn19LAorICAgIHtIUlNUT1JFX0RFU0NSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHszfX0sCisgICAge0hSU1RPUkVfVU5JVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHs0fX0sCisgICAge0hSU1RPUkVfU0laRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezV9fSwKKyAgICB7SFJTVE9SRV9VU0VELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7Nn19LAorICAgIHtIUlNUT1JFX0ZBSUxTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7N319CiB9Owogb2lkICAgICAgICAgICAgIGhyc3RvcmVfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiB9Oworb2lkICAgICAgICAgICAgIGhyTWVtb3J5U2l6ZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMiB9Oworb2lkICAgICAgICAgICAgIGhyU3RvcmFnZVRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMywgMSB9OwogCiAKIHZvaWQKQEAgLTI4MSw4ICsyOTgsMTIgQEAKIHsKICAgICBjaGFyICphcHBuYW1lOwogCi0gICAgUkVHSVNURVJfTUlCKCJob3N0L2hyX3N0b3JhZ2UiLCBocnN0b3JlX3ZhcmlhYmxlcywgdmFyaWFibGU0LAotICAgICAgICAgICAgICAgICBocnN0b3JlX3ZhcmlhYmxlc19vaWQpOworICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKAorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaG9zdC9ock1lbW9yeVNpemUiLCBoYW5kbGVfbWVtc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyTWVtb3J5U2l6ZV9vaWQsIE9JRF9MRU5HVEgoaHJNZW1vcnlTaXplX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSkpOworICAgIFJFR0lTVEVSX01JQigiaG9zdC9ocl9zdG9yYWdlIiwgaHJzdG9yZV92YXJpYWJsZXMsIHZhcmlhYmxlMiwKKyAgICAgICAgICAgICAgICAgaHJTdG9yYWdlVGFibGVfb2lkKTsKIAogICAgIGFwcG5hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CkBAIC0zMTcsNyArMzM4LDcgQEAKIH0KIAogLyoKLSAqIGhlYWRlcl9ocnN0b3JlKC4uLgorICogaGVhZGVyX2hyc3RvcmVFbnRyeSguLi4KICAqIEFyZ3VtZW50czoKICAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCiAgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKQEAgLTMyOCwzNCArMzQ5LDYgQEAKICAqIAogICovCiAKLWludAotaGVhZGVyX2hyc3RvcmUoc3RydWN0IHZhcmlhYmxlICp2cCwKLSAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKLSNkZWZpbmUgSFJTVE9SRV9OQU1FX0xFTkdUSAk5Ci0gICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOwotICAgIGludCAgICAgICAgICAgICByZXN1bHQ7Ci0KLSAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9zdG9yYWdlIiwgInZhcl9ocnN0b3JlOiAiKSk7Ci0gICAgREVCVUdNU0dPSUQoKCJob3N0L2hyX3N0b3JhZ2UiLCBuYW1lLCAqbGVuZ3RoKSk7Ci0gICAgREVCVUdNU0coKCJob3N0L2hyX3N0b3JhZ2UiLCAiICVkXG4iLCBleGFjdCkpOwotCi0gICAgbWVtY3B5KChjaGFyICopIG5ld25hbWUsIChjaGFyICopIHZwLT5uYW1lLCB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKLSAgICBuZXduYW1lW0hSU1RPUkVfTkFNRV9MRU5HVEhdID0gMDsKLSAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7Ci0gICAgaWYgKChleGFjdCAmJiAocmVzdWx0ICE9IDApKSB8fCAoIWV4YWN0ICYmIChyZXN1bHQgPj0gMCkpKQotICAgICAgICByZXR1cm4gKE1BVENIX0ZBSUxFRCk7Ci0gICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCi0gICAgICAgICAgICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwotICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0KLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKLSAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwotICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKLX0KLQogdm9pZCAqCiBoZWFkZXJfaHJzdG9yZUVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqdnAsCiAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCkBAIC00NjcsNyArNDYwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIC8qCkBAIC00NzUsNyArNDY4LDcgQEAKICAgICAgKi8KICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9zdG9yYWdlIiwgInZhcl9ocnN0b3JlRW50cnk6IHByb2Nlc3MgIikpOwogICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9zdG9yYWdlIiwgbmFtZSwgKmxlbmd0aCkpOwotICAgIERFQlVHTVNHKCgiaG9zdC9ocl9zdG9yYWdlIiwgIiAoJXgpXG4iLCBtZW0pKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIgKCVwKVxuIiwgbWVtKSk7CiAgICAgcmV0dXJuICh2b2lkKiltZW07CiB9CiAKQEAgLTQ4OSwxMyArNDgyLDQ3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqaHJzX2Rlc2NyW10gPSB7Ci0gICAgTlVMTCwKLSAgICAiTWVtb3J5IEJ1ZmZlcnMiLCAgICAgICAgICAgLyogSFJTX1RZUEVfTUJVRiAqLwotICAgICJSZWFsIE1lbW9yeSIsICAgICAgICAgICAgICAvKiBIUlNfVFlQRV9NRU0gKi8KLSAgICAiU3dhcCBTcGFjZSIgICAgICAgICAgICAgICAgLyogSFJTX1RZUEVfU1dBUCAqLwotfTsKK2ludAoraGFuZGxlX21lbXNpemUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBuZXRzbm1wX21lbW9yeV9pbmZvICptZW1faW5mbzsKKyAgICBpbnQgdmFsOwogCisgICAgLyoKKyAgICAgKiBXZSBqdXN0IG5lZWQgdG8gaGFuZGxlIHZhbGlkIEdFVCByZXF1ZXN0cywgYXMgaW52YWxpZCBpbnN0YW5jZXMKKyAgICAgKiAgIGFyZSByZWplY3RlZCBhdXRvbWF0aWNhbGx5LCBhbmQgKHZhbGlkKSBHRVRORVhUIHJlcXVlc3RzIGFyZQorICAgICAqICAgY29udmVydGVkIGludG8gdGhlIGFwcHJvcHJpYXRlIEdFVCByZXF1ZXN0LgorICAgICAqCisgICAgICogV2UgYWxzbyBvbmx5IGV2ZXIgcmVjZWl2ZSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUuCisgICAgICovCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgbmV0c25tcF9tZW1vcnlfbG9hZCgpOworICAgICAgICBtZW1faW5mbyA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9QSFlTTUVNLCAwICk7CisgICAgICAgIGlmICggIW1lbV9pbmZvIHx8IG1lbV9pbmZvLT5zaXplID09IC0xIHx8IG1lbV9pbmZvLT51bml0cyA9PSAtMSApCisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0cywgU05NUF9OT1NVQ0hPQkpFQ1QgKTsKKwllbHNlIHsKKyAgICAgICAgICAgIHZhbCAgPSAgbWVtX2luZm8tPnNpemU7ICAgICAvKiBtZW10b3RhbCAqLworICAgICAgICAgICAgdmFsICo9IChtZW1faW5mby0+dW5pdHMvMTAyNCk7CisgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSZ2YWwsIHNpemVvZih2YWwpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qCisgICAgICAgICAqIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgc28gdGhpcyBpcyBhIHJlYWxseSBiYWQgZXJyb3IgCisgICAgICAgICAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBtb2RlICglZCkgaW4gaGFuZGxlX21lbXNpemVcbiIsCisgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQogCiAKIHVfY2hhciAgICAgICAgICoKQEAgLTUxMCwxMiArNTM3LDYgQEAKICAgICB2b2lkICAgICAgICAgICAgICAgICpwdHI7CiAgICAgbmV0c25tcF9tZW1vcnlfaW5mbyAqbWVtID0gTlVMTDsKIAotICAgIGlmICh2cC0+bWFnaWMgPT0gSFJTVE9SRV9NRU1TSVpFKSB7Ci0gICAgICAgIGlmIChoZWFkZXJfaHJzdG9yZSh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKQotICAgICAgICAgICAgPT0gTUFUQ0hfRkFJTEVEKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIHsKLQogcmVhbGx5X3RyeV9uZXh0OgogCXB0ciA9IGhlYWRlcl9ocnN0b3JlRW50cnkodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sCiAJCQkJCXdyaXRlX21ldGhvZCk7CkBAIC01MzUsMTkgKzU1NiwxMCBAQAogCX0gZWxzZSB7CiAJICAgIG1lbSA9IChuZXRzbm1wX21lbW9yeV9pbmZvKilwdHI7CiAgICAgICAgIH0KLSAgICB9CiAKIAogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIEhSU1RPUkVfTUVNU0laRToKLSAgICAgICAgbmV0c25tcF9tZW1vcnlfbG9hZCgpOwotICAgICAgICBtZW0gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfUEhZU01FTSwgMCApOwotICAgICAgICBpZiAoICFtZW0gfHwgbWVtLT5zaXplID09IC0xIHx8IG1lbS0+dW5pdHMgPT0gLTEgKQotCSAgICByZXR1cm4gTlVMTDsKLQlsb25nX3JldHVybiA9IG1lbS0+c2l6ZSAqIChtZW0tPnVuaXRzIC8gMTAyNCk7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0KICAgICBjYXNlIEhSU1RPUkVfSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gc3RvcmVfaWR4OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwpAQCAtNTU1LDcgKzU2Nyw3IEBACiAgICAgICAgIGlmIChzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCkKICAgICAgICAgICAgIGlmIChzdG9yYWdlVXNlTkZTICYmIENoZWNrX0hSX0ZpbGVTeXNfTkZTKCkpCiAgICAgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2lkW3N0b3JhZ2VfdHlwZV9sZW4gLSAxXSA9IDEwOyAgICAgLyogTmV0d29yayBEaXNrICovCi0jaWYgSEFWRV9IQVNNTlRPUFQgJiYgIShkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkKKyNpZiBIQVZFX0hBU01OVE9QVCAmJiAhKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCiAgICAgICAgICAgICAvKiAKICAgICAgICAgICAgICAqIGhhc21udG9wdCB0YWtlcyAiY29uc3Qgc3RydWN0IG1udGVudCoiLCBidXQgSFJGU19lbnRyeSBoYXMgYmVlbgogICAgICAgICAgICAgICogZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgQUlYLCBzbyBza2lwIHRoaXMgZm9yIEFJWApAQCAtNjU2LDcgKzY2OCw2IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50ICAgICAgRlNfc3RvcmFnZTsKIHN0YXRpYyBpbnQgICAgICBIUlNfaW5kZXg7CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgKaW5kZXggZmZhMWY1Mi4uMjAwN2MzMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCi0gKiAgSG9zdCBSZXNvdXJjZXMgTUlCIC0gc3RvcmFnZSBncm91cCBpbnRlcmZhY2UgLSBocl9zeXN0ZW0uaAorICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIHN0b3JhZ2UgZ3JvdXAgaW50ZXJmYWNlIC0gaHJfc3RvcmFnZS5oCiAgKgogICovCiAjaWZuZGVmIF9NSUJHUk9VUF9IUlNUT1JBR0VfSAogI2RlZmluZSBfTUlCR1JPVVBfSFJTVE9SQUdFX0gKIAogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvbWVtb3J5KQotY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9maWxlc3lzKQorLyogY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9maWxlc3lzKSAqLwogCiBleHRlcm4gdm9pZCAgICAgaW5pdF9ocl9zdG9yYWdlKHZvaWQpOwogZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2hyc3RvcmU7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYwppbmRleCBjZjkwZGYyLi4yNTU4MmJkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX1NZU19QQVJBTV9ICiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CkBAIC00NSw2ICs0NiwxMCBAQAogI2luY2x1ZGUgPHJwbS9oZWFkZXIuaD4KICNpbmNsdWRlIDxmY250bC5oPgogCisjaWZkZWYgSEFWRV9SUE1fUlBNRklMRVVUSUxfSAorI2luY2x1ZGUgPHJwbS9ycG1maWxldXRpbC5oPgorI2VuZGlmCisKICNpZmRlZiBIQVZFX1JQTUdFVFBBVEgKICNpbmNsdWRlIDxycG0vcnBtbWFjcm8uaD4KICNlbmRpZgpAQCAtNjcsNiArNzIsOCBAQAogCiAjZGVmaW5lIEhSU1dJTlNUX01PTk9UT05JQ0FMTFlfSU5DUkVBU0lORwogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKKwogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgS2VybmVsICYgaW50ZXJmYWNlIGluZm9ybWF0aW9uLApAQCAtMTI3LDcgKzEzNCw3IEBACiBpbnQgICAgICAgICAgICAgaGVhZGVyX2hyc3dJbnN0RW50cnkoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7CiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7CisjZGVmaW5lIHN0YXJ0dGltZSAoKihjb25zdCBzdHJ1Y3QgdGltZXZhbCopbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCkpCiAKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCkBAIC0xNTcsMTMgKzE2NCwyMCBAQAogI2RlZmluZQlIUlNXSU5TVF9EQVRFCQk3CiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJzd2luc3RfdmFyaWFibGVzW10gPSB7Ci0gICAge0hSU1dJTlNUX0NIQU5HRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9ocnN3aW5zdCwgMSwgezF9fSwKLSAgICB7SFJTV0lOU1RfVVBEQVRFLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2hyc3dpbnN0LCAxLCB7Mn19LAotICAgIHtIUlNXSU5TVF9JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCAxfX0sCi0gICAge0hSU1dJTlNUX05BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCAyfX0sCi0gICAge0hSU1dJTlNUX0lELCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgM319LAotICAgIHtIUlNXSU5TVF9UWVBFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDR9fSwKLSAgICB7SFJTV0lOU1RfREFURSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDV9fQorICAgIHtIUlNXSU5TVF9DSEFOR0UsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd2luc3QsIDEsIHsxfX0sCisgICAge0hSU1dJTlNUX1VQREFURSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3aW5zdCwgMSwgezJ9fSwKKyAgICB7SFJTV0lOU1RfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgMX19LAorICAgIHtIUlNXSU5TVF9OQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgMn19LAorICAgIHtIUlNXSU5TVF9JRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDN9fSwKKyAgICB7SFJTV0lOU1RfVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCA0fX0sCisgICAge0hSU1dJTlNUX0RBVEUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCA1fX0KIH07CiBvaWQgICAgICAgICAgICAgaHJzd2luc3RfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNiB9OwogCkBAIC0xODYsOSArMjAwLDYgQEAKICNpZiBkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChIQVZFX0xJQlJQTSkKICNkZWZpbmUJX1BBVEhfSFJTV19kaXJlY3RvcnkJIi92YXIvY2FjaGUvaHJtaWIiCiAjZW5kaWYKLSNpZiBkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChIQVZFX0xJQlJQTSkKLSNkZWZpbmUJX1BBVEhfSFJTV19kaXJlY3RvcnkJIi92YXIvY2FjaGUvaHJtaWIiCi0jZW5kaWYKIAogdm9pZAogaW5pdF9ocl9zd2luc3Qodm9pZCkKQEAgLTI3OCw3ICsyODksNyBAQAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwogCi0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKIH0KQEAgLTM0OCw3ICszNTksNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2luc3QiLCAiLi4uIGdldCBpbnN0YWxsZWQgUy9XIHN0YXRzICIpKTsKQEAgLTQzMSw3ICs0NDIsNyBAQAogI2lmZGVmIEhBVkVfUEtHSU5GTwogICAgICAgICAgICAgcHZlciA9IHBrZ3BhcmFtKHN3aS0+c3dpX25hbWUsICJWRVJTSU9OIik7CiAgICAgICAgICAgICAvKiAxIHNwb3QgZm9yIHRoZSB0ZXJtaW5hdGluZyBudWxsIGFuZCBvbmUgZm9yIHRoZSBkYXNoICovCi0gICAgICAgICAgICBpZiAocHZlciAmJgorICAgICAgICAgICAgaWYgKHB2ZXIgJiYgCiAgICAgICAgICAgICAgICAoc3RybGVuKHB2ZXIpICsgMiArIHN0cmxlbihzdHJpbmcpIDw9IHNpemVvZihzdHJpbmcpKSkgewogICAgICAgICAgICAgICAgIHN0cmNhdChzdHJpbmcsICItIik7CiAgICAgICAgICAgICAgICAgc3RyY2F0KHN0cmluZywgcHZlcik7CkBAIC00OTIsMjcgKzUwMywzMSBAQAogICAgIGNhc2UgSFJTV0lOU1RfREFURToKICAgICAgICAgewogI2lmZGVmIEhBVkVfTElCUlBNCi0gICAgICAgICAgICBpbnQgICAgICAgICAqcnBtX2RhdGE7CisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgKnJwbV9kYXRhOwogICAgICAgICAgICAgaWYgKCBoZWFkZXJHZXRFbnRyeShzd2ktPnN3aV9oLCBSUE1UQUdfSU5TVEFMTFRJTUUsIE5VTEwsICh2b2lkICoqKSAmcnBtX2RhdGEsIE5VTEwpICkgewogICAgICAgICAgICAgICAgIHRpbWVfdCAgICAgICAgICBpbnN0YWxsVGltZSA9ICpycG1fZGF0YTsKICAgICAgICAgICAgICAgICByZXQgPSBkYXRlX25fdGltZSgmaW5zdGFsbFRpbWUsIHZhcl9sZW4pOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSBkYXRlX25fdGltZSgwLCB2YXJfbGVuKTsKKyAgICAgICAgICAgICAgICByZXQgPSBkYXRlX25fdGltZShOVUxMLCB2YXJfbGVuKTsKICAgICAgICAgICAgIH0KICNlbHNlCiAgICAgICAgICAgICBpZiAoc3dpLT5zd2lfZGlyZWN0b3J5ICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBzbnByaW50ZihzdHJpbmcsIHNpemVvZihzdHJpbmcpLCAiJXMvJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN3aS0+c3dpX2RpcmVjdG9yeSwgc3dpLT5zd2lfbmFtZSk7CiAgICAgICAgICAgICAgICAgc3RyaW5nWyBzaXplb2Yoc3RyaW5nKS0xIF0gPSAwOwotICAgICAgICAgICAgICAgIHN0YXQoc3RyaW5nLCAmc3RhdF9idWYpOwotICAgICAgICAgICAgICAgIHJldCA9IGRhdGVfbl90aW1lKCZzdGF0X2J1Zi5zdF9tdGltZSwgdmFyX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKHN0YXQoc3RyaW5nLCAmc3RhdF9idWYpID49IDApCisgICAgICAgICAgICAgICAgICAgIHJldCA9IGRhdGVfbl90aW1lKCZzdGF0X2J1Zi5zdF9tdGltZSwgdmFyX2xlbik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKICAgICAgICAgICAgIH0gZWxzZSB7CitlcnI6CiAjaWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSNlbmRpZgorICAgICAgICAgICAgICAgIHJldCA9IE5VTEw7CisjZWxzZQogICAgICAgICAgICAgICAgIHNwcmludGYoc3RyaW5nLCAiYmFjayBpbiB0aGUgbWlzdHMgb2YgdGltZSIpOwogICAgICAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0ID0gKHVfY2hhciAqKSBzdHJpbmc7CisjZW5kaWYKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CkBAIC02ODQsNyArNjk5LDcgQEAKICAgICAgICAgc3dpLT5zd2lfbmFtZVsgc2l6ZW9mKHN3aS0+c3dpX25hbWUpLTEgXSA9IDA7CiAgICAgfQogI2Vsc2UKLSAgICBzbnByaW50Zihzd2ktPnN3aV9uYW1lLCBzaXplb2Yoc3dpLT5zd2lfbmFtZSksIHN3aS0+c3dpX2RlcC0+ZF9uYW1lKTsKKyAgICBzbnByaW50Zihzd2ktPnN3aV9uYW1lLCBzaXplb2Yoc3dpLT5zd2lfbmFtZSksICIlcyIsIHN3aS0+c3dpX2RlcC0+ZF9uYW1lKTsKICAgICBzd2ktPnN3aV9uYW1lWyBzaXplb2Yoc3dpLT5zd2lfbmFtZSktMSBdID0gMDsKICNlbmRpZgogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jCmluZGV4IDEzNGIyN2YuLmY0MGU5OTcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAogI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKICNlbmRpZgotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogI2luY2x1ZGUgPHByb2NpbmZvLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKQEAgLTEyMiwxMSArMTIyLDEzIEBACiAjaWYgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKQogc3RydWN0IHBzdF9zdGF0dXMgKnByb2NfdGFibGU7CiBzdHJ1Y3QgcHN0X2R5bmFtaWMgcHN0X2R5bjsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCitzdHJ1Y3Qga2luZm9fcHJvYzIgKnByb2NfdGFibGU7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogc3RydWN0IGtpbmZvX3Byb2MgKnByb2NfdGFibGU7CiAjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQogaW50ICAgICAgICAgICAgKnByb2NfdGFibGU7Ci0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogc3RydWN0IHByb2NzaW5mbyAqcHJvY190YWJsZTsKICNlbHNlCiBzdHJ1Y3QgcHJvYyAgICAqcHJvY190YWJsZTsKQEAgLTE1MCwxOSArMTUyLDI5IEBACiAjZGVmaW5lCUhSU1dSVU5QRVJGX01FTQkJMTAKIAogc3RydWN0IHZhcmlhYmxlNCBocnN3cnVuX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlNXUlVOX09TSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3dydW4sIDEsIHsxfX0sCi0gICAge0hSU1dSVU5fSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCAxfX0sCi0gICAge0hSU1dSVU5fTkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgMn19LAotICAgIHtIUlNXUlVOX0lELCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCAzfX0sCi0gICAge0hSU1dSVU5fUEFUSCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgNH19LAotICAgIHtIUlNXUlVOX1BBUkFNUywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgNX19LAotICAgIHtIUlNXUlVOX1RZUEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA2fX0sCi0gICAge0hSU1dSVU5fU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgN319CisgICAge0hSU1dSVU5fT1NJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMSwgezF9fSwKKyAgICB7SFJTV1JVTl9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezIsIDEsIDF9fSwKKyAgICB7SFJTV1JVTl9OQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCAyfX0sCisgICAge0hSU1dSVU5fSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezIsIDEsIDN9fSwKKyAgICB7SFJTV1JVTl9QQVRILCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA0fX0sCisgICAge0hSU1dSVU5fUEFSQU1TLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA1fX0sCisgICAge0hSU1dSVU5fVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezIsIDEsIDZ9fSwKKyAgICB7SFJTV1JVTl9TVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA3fX0KIH07CiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJzd3J1bnBlcmZfdmFyaWFibGVzW10gPSB7Ci0gICAge0hSU1dSVU5QRVJGX0NQVSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzd3J1biwgMywgezEsIDEsIDF9fSwKLSAgICB7SFJTV1JVTlBFUkZfTUVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MSwgMSwgMn19CisgICAge0hSU1dSVU5QRVJGX0NQVSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezEsIDEsIDF9fSwKKyAgICB7SFJTV1JVTlBFUkZfTUVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3cnVuLCAzLCB7MSwgMSwgMn19CiB9OwogCiBvaWQgICAgICAgICAgICAgaHJzd3J1bl92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCA0IH07CkBAIC0zMjYsNyArMzM4LDcgQEAKICAgICBhdXRvX25saXN0KE5QUk9DX1NZTUJPTCwgMCwgMCk7CiAjZW5kaWYKIAotICAgIHByb2NfdGFibGUgPSAwOworICAgIHByb2NfdGFibGUgPSBOVUxMOwogCiAgICAgUkVHSVNURVJfTUlCKCJob3N0L2hyX3N3cnVuIiwgaHJzd3J1bl92YXJpYWJsZXMsIHZhcmlhYmxlNCwKICAgICAgICAgICAgICAgICAgaHJzd3J1bl92YXJpYWJsZXNfb2lkKTsKQEAgLTM2OSw3ICszODEsNyBAQAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwogCi0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKIH0KQEAgLTQ1Myw3ICs0NjUsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3N3cnVuIiwgIi4uLiBnZXQgcHJvY2VzcyBzdGF0cyAiKSk7CkBAIC01MTIsNiArNTI0LDEyIEBACiAgICAgaWYgKChjcCA9IGdldF9wcm9jX2ZpbGVfbGluZSgiL3Byb2MvJWQvc3RhdCIsIHBpZCwgYnVmLCBidWZsZW4pKSA9PSBOVUxMICkKIAlyZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyAqY3AgJiYgaSA8IHNraXA7ICsraSkgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgc2Vjb25kIGZpZWxkIGlzICdjb21tJyBhbmQgY2FuIGNvbnRhaW4gc3BhY2VzLiBIZW5jZSBza2lwIHRvCisgICAgICAgICAqIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGkgPT0gMSAmJiAqY3AgPT0gJygnKQorICAgICAgICAgICAgY3AgPSBzdHJyY2hyKGNwLCAnKScpOwogCWNwID0gc2tpcF90b19uZXh0X2ZpZWxkKGNwKTsKICAgICB9CiAgICAgcmV0dXJuIGNwOwpAQCAtNTcwLDcgKzU4OCw3IEBACiAgICAgdGltZV90ICAgICAgICAgIG5vdzsKICAgICBzdGF0aWMgaW50ICAgICAgb2xkcGlkID0gLTE7CiAjZW5kaWYKLSNpZiBIQVZFX0tWTV9HRVRQUk9DUworI2lmIChkZWZpbmVkKEhBVkVfS1ZNX0dFVFBST0NTKSB8fCBkZWZpbmVkKEhBVkVfS1ZNX0dFVFBST0MyKSkKICAgICBjaGFyICAgICAgICAgICoqYXJndjsKICNlbmRpZgogI2lmZGVmIGxpbnV4CkBAIC02NjcsMTEgKzY4NSwxNyBAQAogI2Vsc2UKICAgICAgICAgc3RybGNweShzdHJpbmcsIHByb2NfYnVmLT5wX3VzZXIudV9jb21tLCBzaXplb2Yoc3RyaW5nKSk7CiAjZW5kaWYKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucGlfY29tbSwgc2l6ZW9mKHN0cmluZykpOwogICAgICAgICBjcCA9IHN0cmNocihzdHJpbmcsICcgJyk7CiAgICAgICAgIGlmIChjcCAhPSBOVUxMKQogICAgICAgICAgICAgKmNwID0gJ1wwJzsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9jb21tLCBzaXplb2Yoc3RyaW5nKSk7CisgICAgICAgIC8qIHByb2Nlc3MgbmFtZTogdHJ1bmNhdGUgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgc3BhY2UgKi8KKyAgICAgICAgY3AgPSBzdHJjaHIoc3RyaW5nLCAnICcpOworICAgICAgICBpZiAoY3AgIT0gTlVMTCkKKyAgICAgICAgICAgICpjcCA9ICdcMCc7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgc3RyY3B5KHN0cmluZywgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLmtpX2NvbW0pOwpAQCAtNzg0LDExICs4MDgsMTcgQEAKICAgICAgICAgICAgICpjcDErKyA9ICpjcCsrOwogICAgICAgICAqY3AxID0gMDsKICNlbmRpZgotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgc3RybGNweShzdHJpbmcsIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9jb21tLCBzaXplb2Yoc3RyaW5nKSk7CiAgICAgICAgIGNwID0gc3RyY2hyKHN0cmluZywgJyAnKTsKICAgICAgICAgaWYgKGNwICE9IE5VTEwpCiAgICAgICAgICAgICAqY3AgPSAnXDAnOworI2VsaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgLyogU2hvdWxkIGJlIHBhdGgsIGJ1dCB0aGlzIGlzIG5vdCBhdmFpbGFibGUsIGp1c3QgdXNlIGFyZ3ZbMF0gYWdhaW4gKi8KKyAgICAgICAgc3RybGNweShzdHJpbmcsIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5wX2NvbW0sIHNpemVvZihzdHJpbmcpKTsKKyAgICAgICAgY3AgPSBzdHJjaHIoc3RyaW5nLCAnICcpOworICAgICAgICBpZiAoY3AgIT0gTlVMTCkKKyAgICAgICAgICAgICpjcCA9ICdcMCc7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgc3RyY3B5KHN0cmluZywgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLmtpX2NvbW0pOwpAQCAtODgzLDEzICs5MTMsMjQgQEAKICAgICAgICAgICAgIGNwKys7CiAgICAgICAgIHN0cmNweShzdHJpbmcsIGNwKTsKICNlbmRpZgotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgY3AgPSBzdHJjaHIocHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBpX2NvbW0sICcgJyk7CiAgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBjcCsrOwogICAgICAgICAgICAgc3ByaW50ZihzdHJpbmcsICIlcyIsIGNwKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdHJpbmdbMF0gPSAnXDAnOworI2VsaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgc3RyaW5nWzBdID0gMDsKKyAgICAgICAgYXJndiA9IGt2bV9nZXRhcmd2MihrZCwgcHJvY190YWJsZSArIExvd1Byb2NJbmRleCwgc2l6ZW9mKHN0cmluZykpOworICAgICAgICBpZiAoYXJndikKKyAgICAgICAgICAgIGFyZ3YrKzsKKyAgICAgICAgd2hpbGUgKGFyZ3YgJiYgKmFyZ3YpIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmdbMF0gIT0gMCkKKyAgICAgICAgICAgICAgICBzdHJjYXQoc3RyaW5nLCAiICIpOworICAgICAgICAgICAgc3RyY2F0KHN0cmluZywgKmFyZ3YpOworICAgICAgICAgICAgYXJndisrOworICAgICAgICB9CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICAgICBzdHJpbmdbMF0gPSAwOwogICAgICAgICBhcmd2ID0ga3ZtX2dldGFyZ3Yoa2QsIHByb2NfdGFibGUgKyBMb3dQcm9jSW5kZXgsIHNpemVvZihzdHJpbmcpKTsKQEAgLTkwMyw3ICs5NDQsNyBAQAogICAgICAgICB9CiAjZWxpZiBkZWZpbmVkKGxpbnV4KQogICAgICAgICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgIGlmKCAoY3A9Z2V0X3Byb2NfbmFtZV9mcm9tX2NtZGxpbmUocGlkLGJ1ZixzaXplb2YoYnVmKS0yKSkgPT0gTlVMTCApIHsKKwlpZiggKGNwPWdldF9wcm9jX25hbWVfZnJvbV9jbWRsaW5lKHBpZCxidWYsc2l6ZW9mKGJ1ZiktMikpID09IE5VTEwgKSB7CiAgICAgICAgICAgICBzdHJjcHkoc3RyaW5nLCAiIik7CiAgICAgICAgICAgICAqdmFyX2xlbiA9IDA7CiAgICAgICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzdHJpbmc7CkBAIC05NTIsMTEgKzk5MywxNiBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAyOyAgICAvKiBvcGVyYXRpbmdTeXN0ZW0gKi8KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSA0OyAgICAvKiBhcHBsaWNhdGlvbiAqLwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKIAkJaWYgKHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9mbGFncyAmIFNLUFJPQykgewogCQkJbG9uZ19yZXR1cm4gPSAyOwkvKiBrZXJuZWwgcHJvY2VzcyAqLwogCQl9IGVsc2UKIAkJCWxvbmdfcmV0dXJuID0gNDsJLyogYXBwbGljYXRpb24gKi8KKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIGlmIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9mbGFnICYgUF9TWVNURU0pCisJICAgIGxvbmdfcmV0dXJuID0gMjsJLyogb3BlcmF0aW5nU3lzdGVtICovCisJZWxzZQorCSAgICBsb25nX3JldHVybiA9IDQ7CS8qIGFwcGxpY2F0aW9uICovCiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKIAlpZiAocHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLmtpX2ZsYWcgJiBQX1NZU1RFTSkgewpAQCAtMTAxNCw3ICsxMDYwLDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZWxzZQotI2lmIEhBVkVfS1ZNX0dFVFBST0NTCisjaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9zdGF0KSB7CisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ua2lfc3RhdCkgewogICAgICNlbGlmIGRlZmluZWQoZHJhZ29uZmx5KSAmJiBfX0RyYWdvbkZseV92ZXJzaW9uID49IDE5MDAwMApAQCAtMTAzMiw3ICsxMDgwLDcgQEAKICNlbHNlCiAgICAgICAgIHN3aXRjaCAocHJvY19idWYtPnBfc3RhdCkgewogI2VuZGlmCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBzd2l0Y2ggKHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9zdGF0ZSkgewogI2Vsc2UKICAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9zdGF0KSB7CkBAIC0xMTA5LDYgKzExNTcsMTAgQEAKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY19idWYtPnBfdXRpbWUgKiAxMDAgKyBwcm9jX2J1Zi0+cF9zdGltZSAqIDEwMDsKICNlbmRpZgorI2VsaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgbG9uZ19yZXR1cm4gPSBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF91dGlja3MgKworICAgICAgICAgICAgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfc3RpY2tzICsKKyAgICAgICAgICAgIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5wX2l0aWNrczsKICNlbGlmIEhBVkVfS1ZNX0dFVFBST0NTCiAgICAgI2lmIGRlZmluZWQoTk9UX0RFRklORUQpICYmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAxNAogICAgICAgICAvKiBYWFg6IEFjY2Vzc2luZyBraV9wYWRkciBjYXVzZXMgc2lnMTAgLi4uCkBAIC0xMTcxLDcgKzEyMjMsNyBAQAogICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucGlfcnUucnVfdXRpbWUudHZfc2VjICogMTAwICsKICAgICAgICAgICAgIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9ydS5ydV91dGltZS50dl91c2VjIC8gMTAwMDAwMDAgKyAvKiBuYW5vc2Vjb25kcyAqLwogICAgICAgICAgICAgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBpX3J1LnJ1X3N0aW1lLnR2X3NlYyAqIDEwMCArCkBAIC0xMjIzLDggKzEyNzUsMTMgQEAKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY19idWYtPnBfc3dyc3M7CiAjZW5kaWYKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBpX3NpemUgKiBnZXRwYWdlc2l6ZSgpIC8gMTAyNDsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfdm1fdHNpemUgKworICAgICAgICAgICAgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfdm1fc3NpemUgKworICAgICAgICAgICAgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfdm1fZHNpemU7CisgICAgICAgIGxvbmdfcmV0dXJuID0gbG9uZ19yZXR1cm4gKiAoZ2V0cGFnZXNpemUoKSAvIDEwMjQpOwogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MgJiYgIWRlZmluZWQoZGFyd2luOCkKICAgI2lmIGRlZmluZWQoTk9UX0RFRklORUQpICYmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAxNAogCSAgICAvKiBYWFgKQEAgLTE0NjgsNyArMTUyNSw3IEBACiAgICAgICAgICAgICBucHJvYyA9IGN1cnJlbnRfcHJvY19lbnRyeTsKICAgICAgICAgY2xvc2VkaXIoZik7CiAgICAgfQotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICB7CiAJCXBpZF90IHByb2NfaW5kZXggPSAwOwogCQlpbnQgYXZhaWwgPSAxMDI0OwpAQCAtMTQ5NSw2ICsxNTUyLDE0IEBACiAJCQlwcm9jX3RhYmxlID0gcmVhbGxvYyhwcm9jX3RhYmxlLCBhdmFpbCAqIHNpemVvZihwcm9jX3RhYmxlWzBdKSk7CiAJCX0KICAgICB9CisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMgorICAgIHsKKyAgICAgICAgaWYgKGtkID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5wcm9jID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwcm9jX3RhYmxlID0ga3ZtX2dldHByb2MyKGtkLCBLRVJOX1BST0NfQUxMLCAwLCBzaXplb2YgKHN0cnVjdCBraW5mb19wcm9jMiksICZucHJvYyk7CisgICAgfQogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKICAgICB7CiAgICAgICAgIGlmIChrZCA9PSBOVUxMKSB7CkBAIC0xNTU1LDYgKzE2MjAsOSBAQAogICAgICAgICByZXR1cm4gcHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnkrK10ucHN0X3BpZDsKICNlbGlmIGRlZmluZWQoc29sYXJpczIpCiAgICAgICAgIHJldHVybiBwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeSsrXTsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIGlmIChwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeV0ucF9zdGF0ICE9IDApCisgICAgICAgICAgICByZXR1cm4gcHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnkrK10ucF9waWQ7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgaWYgKHByb2NfdGFibGVbY3VycmVudF9wcm9jX2VudHJ5XS5raV9zdGF0ICE9IDApCkBAIC0xNTY5LDcgKzE2MzcsNyBAQAogICAgICAgICBpZiAocHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnldLmtwX3Byb2MucF9zdGF0ICE9IDApCiAgICAgICAgICAgICByZXR1cm4gcHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnkrK10ua3BfcHJvYy5wX3BpZDsKICAgICAjZW5kaWYKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGlmIChwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeV0ucGlfc3RhdGUgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeSsrXS5waV9waWQ7CiAgICAgICAgIGVsc2UKQEAgLTE1OTUsMTYgKzE2NjMsMTYgQEAKIGludAogY291bnRfcHJvY2Vzc2VzKHZvaWQpCiB7Ci0jaWYgIShkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKGN5Z3dpbikgfHwgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKSB8fCBkZWZpbmVkKHNvbGFyaXMyKSB8fCBIQVZFX0tWTV9HRVRQUk9DUyB8fCBkZWZpbmVkKGR5bml4KSkKKyNpZiAhKGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoY3lnd2luKSB8fCBkZWZpbmVkKGhwdXgxMCkgfHwgZGVmaW5lZChocHV4MTEpIHx8IGRlZmluZWQoc29sYXJpczIpIHx8IEhBVkVfS1ZNX0dFVFBST0NTIHx8IEhBVkVfS1ZNX0dFVFBST0MyIHx8IGRlZmluZWQoZHluaXgpKQogICAgIGludCAgICAgICAgICAgICBpOwogI2VuZGlmCiAgICAgaW50ICAgICAgICAgICAgIHRvdGFsID0gMDsKIAogICAgIEluaXRfSFJfU1dSdW4oKTsKLSNpZiBkZWZpbmVkKGhwdXgxMCkgfHwgZGVmaW5lZChocHV4MTEpIHx8IEhBVkVfS1ZNX0dFVFBST0NTIHx8IGRlZmluZWQoc29sYXJpczIpCisjaWYgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKSB8fCBIQVZFX0tWTV9HRVRQUk9DUyB8fCBIQVZFX0tWTV9HRVRQUk9DMiB8fCBkZWZpbmVkKHNvbGFyaXMyKQogICAgIHRvdGFsID0gbnByb2M7CiAjZWxzZQotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgIGZvciAoaSA9IDA7IGkgPCBucHJvYzsgKytpKSB7CiAgICAgICAgIGlmIChwcm9jX3RhYmxlW2ldLnBpX3N0YXRlICE9IDApCiAjZWxpZiAhZGVmaW5lZChsaW51eCkgJiYgIWRlZmluZWQoY3lnd2luKSAmJiAhZGVmaW5lZChkeW5peCkKQEAgLTE2MTUsNyArMTY4Myw3IEBACiAjZW5kaWYKICAgICAgICAgKyt0b3RhbDsKICAgICB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFocHV4MTAgJiYgIWhwdXgxMSAmJiAhSEFWRV9LVk1fR0VUUFJPQ1MgJiYgIXNvbGFyaXMyICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFocHV4MTAgJiYgIWhwdXgxMSAmJiAhSEFWRV9LVk1fR0VUUFJPQ1MgJiYgIUhBVkVfS1ZNX0dFVFBST0MyICYmICFzb2xhcmlzMiAqLwogICAgIEVuZF9IUl9TV1J1bigpOwogICAgIHJldHVybiB0b3RhbDsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jCmluZGV4IGNiYzhmYzguLmQ5OWNjN2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYwpAQCAtMTUsNiArMTUsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCkBAIC03Nyw2ICs3OCw4IEBACiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRhdGVfbl90aW1lKQorCiAjaWYgIWRlZmluZWQoVVRNUF9GSUxFKSAmJiBkZWZpbmVkKF9QQVRIX1VUTVApCiAjZGVmaW5lIFVUTVBfRklMRSBfUEFUSF9VVE1QCiAjZW5kaWYKQEAgLTk4LDE1ICsxMDEsMjAgQEAKICNpZiBkZWZpbmVkKHNvbGFyaXMyKQogc3RhdGljIHN0cnVjdCBvcGVucHJvbWlvICogb3BfbWFsbG9jKHNpemVfdCBzaXplKTsKIHN0YXRpYyB2b2lkIG9wX2ZyZWUoc3RydWN0IG9wZW5wcm9taW8gKm9wKTsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0YXRpYyBpbnQgc2V0X3NvbGFyaXNfYm9vdGNvbW1hbmRfcGFyYW1ldGVyKGludCBhY3Rpb24sIHVfY2hhciAqIHZhcl92YWwsIHVfY2hhciB2YXJfdmFsX3R5cGUsIHNpemVfdCB2YXJfdmFsX2xlbiwgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbik7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiBzdGF0aWMgaW50IHNldF9zb2xhcmlzX2VlcHJvbV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbik7CiBzdGF0aWMgaW50IGdldF9zb2xhcmlzX2VlcHJvbV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqcGFyYW1ldGVyLCBjaGFyICpvdXRwdXQpOwogc3RhdGljIGxvbmcgICAgIGdldF9tYXhfc29sYXJpc19wcm9jZXNzZXModm9pZCk7CiAjZW5kaWYKKwogc3RhdGljIGludCAgICAgIGdldF9sb2FkX2Rldih2b2lkKTsKIHN0YXRpYyBpbnQgICAgICBjb3VudF91c2Vycyh2b2lkKTsKIGV4dGVybiBpbnQgICAgICBjb3VudF9wcm9jZXNzZXModm9pZCk7Ci0KK2V4dGVybiBpbnQgICAgICBzd3J1bl9jb3VudF9wcm9jZXNzZXModm9pZCk7CiAKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCkBAIC0xMjMsMjYgKzEzMSw2MCBAQAogI2RlZmluZQlIUlNZU19NQVhQUk9DUwkJNwogCiAjaWYgZGVmaW5lZChzb2xhcmlzMikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIGhyc3lzdGVtX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlNZU19VUFRJTUUsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHsxfX0sCi0gICAge0hSU1lTX0RBVEUsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2hyc3lzLCAxLCB7Mn19LAotICAgIHtIUlNZU19MT0FEX0RFViwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHszfX0sCi0gICAge0hSU1lTX0xPQURfUEFSQU0sIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2hyc3lzLCAxLCB7NH19LAotICAgIHtIUlNZU19VU0VSUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7NX19LAotICAgIHtIUlNZU19QUk9DUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7Nn19LAotICAgIHtIUlNZU19NQVhQUk9DUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs3fX0KKyAgICB7SFJTWVNfVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7MX19LAorICAgIHtIUlNZU19EQVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ocnN5cywgMSwgezJ9fSwKKyAgICB7SFJTWVNfTE9BRF9ERVYsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7M319LAorICAgIHtIUlNZU19MT0FEX1BBUkFNLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ocnN5cywgMSwgezR9fSwKKyAgICB7SFJTWVNfVVNFUlMsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezV9fSwKKyAgICB7SFJTWVNfUFJPQ1MsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezZ9fSwKKyAgICB7SFJTWVNfTUFYUFJPQ1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7N319CiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBocnN5c3RlbV92YXJpYWJsZXNbXSA9IHsKKyAgICB7SFJTWVNfVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7MX19LAorICAgIHtIUlNZU19EQVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7Mn19LAorICAgIHtIUlNZU19MT0FEX0RFViwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHszfX0sCisgICAge0hSU1lTX0xPQURfUEFSQU0sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs0fX0sCisgICAge0hSU1lTX1VTRVJTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs1fX0sCisgICAge0hSU1lTX1BST0NTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs2fX0sCisgICAge0hSU1lTX01BWFBST0NTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezd9fQorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZWxzZQogc3RydWN0IHZhcmlhYmxlMiBocnN5c3RlbV92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJTWVNfVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7MX19LAotICAgIHtIUlNZU19EQVRFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7Mn19LAotICAgIHtIUlNZU19MT0FEX0RFViwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHszfX0sCi0gICAge0hSU1lTX0xPQURfUEFSQU0sIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs0fX0sCi0gICAge0hSU1lTX1VTRVJTLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs1fX0sCi0gICAge0hSU1lTX1BST0NTLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs2fX0sCi0gICAge0hSU1lTX01BWFBST0NTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN5cywgMSwgezd9fQorICAgIHtIUlNZU19VUFRJTUUsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHsxfX0sCisgICAge0hSU1lTX0RBVEUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHsyfX0sCisgICAge0hSU1lTX0xPQURfREVWLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezN9fSwKKyAgICB7SFJTWVNfTE9BRF9QQVJBTSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezR9fSwKKyAgICB7SFJTWVNfVVNFUlMsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezV9fSwKKyAgICB7SFJTWVNfUFJPQ1MsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezZ9fSwKKyAgICB7SFJTWVNfTUFYUFJPQ1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7N319CiB9OwogI2VuZGlmCisKIG9pZCAgICAgICAgICAgICBocnN5c3RlbV92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAxIH07CiAKIApAQCAtMTkxLDcgKzIzMyw3IEBACiAgICAgICAgICAgICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CiAKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAgICAgcmV0dXJuIChNQVRDSF9TVUNDRUVERUQpOwogfSAvKiBlbmQgaGVhZGVyX2hyc3lzICovCkBAIC0yMzYsOSArMjc4LDExIEBACiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgY2FzZSBIUlNZU19EQVRFOgogI2lmIGRlZmluZWQoSEFWRV9NS1RJTUUpICYmIGRlZmluZWQoSEFWRV9TVElNRSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgICAgICAqd3JpdGVfbWV0aG9kPW5zX3NldF90aW1lOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNlbmRpZgotICAgICAgICAodm9pZCAqKSB0aW1lKCZub3cpOworICAgICAgICB0aW1lKCZub3cpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBkYXRlX25fdGltZSgmbm93LCB2YXJfbGVuKTsKICAgICBjYXNlIEhSU1lTX0xPQURfREVWOgogICAgICAgICBsb25nX3JldHVybiA9IGdldF9sb2FkX2RldigpOwpAQCAtMjUyLDcgKzI5Niw5IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2Q9c2V0X3NvbGFyaXNfYm9vdGNvbW1hbmRfcGFyYW1ldGVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgaWYgKCBnZXRfc29sYXJpc19lZXByb21fcGFyYW1ldGVyKCJib290LWNvbW1hbmQiLGJvb3RwYXJhbSkgKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJ1bmFibGUgdG8gbG9va3VwIGJvb3QtY29tbWFuZCBmcm9tIGVlcHJvbVxuIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI3MCw3ICszMTYsOSBAQAogICAgICAgICBsb25nX3JldHVybiA9IGNvdW50X3VzZXJzKCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgY2FzZSBIUlNZU19QUk9DUzoKLSNpZiBVU0lOR19IT1NUX0hSX1NXUlVOX01PRFVMRQorI2lmIFVTSU5HX0hPU1RfREFUQV9BQ0NFU1NfU1dSVU5fTU9EVUxFCisgICAgICAgIGxvbmdfcmV0dXJuID0gc3dydW5fY291bnRfcHJvY2Vzc2VzKCk7CisjZWxpZiBVU0lOR19IT1NUX0hSX1NXUlVOX01PRFVMRQogICAgICAgICBsb25nX3JldHVybiA9IGNvdW50X3Byb2Nlc3NlcygpOwogI2Vsc2UKICNpZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUwpAQCAtMzQ5LDYgKzM5Nyw3IEBACiAgICAgZnJlZShvcCk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdGF0aWMgaW50CiBzZXRfc29sYXJpc19ib290Y29tbWFuZF9wYXJhbWV0ZXIoaW50IGFjdGlvbiwKICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC00MTMsNiArNDYyLDcgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiBzdGF0aWMgaW50IHNldF9zb2xhcmlzX2VlcHJvbV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyX3ZhbF9sZW4pIHsKQEAgLTQ5Miw2ICs1NDIsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfTUtUSU1FKSAmJiBkZWZpbmVkKEhBVkVfU1RJTUUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiBuc19zZXRfdGltZShpbnQgYWN0aW9uLAogICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTU4NSw2ICs2MzYsNyBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaAppbmRleCA1ZTEyYzBkLi5mZWZmYTYwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmgKQEAgLTksNyArOSw5IEBACiBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfaHJzeXM7CiAKICNpZiBkZWZpbmVkKEhBVkVfTUtUSU1FKSAmJiBkZWZpbmVkKEhBVkVfU1RJTUUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50IG5zX3NldF90aW1lKGludCBhY3Rpb24sIHVfY2hhciAqIHZhcl92YWwsIHVfY2hhciB2YXJfdmFsX3R5cGUsIHNpemVfdCB2YXJfdmFsX2xlbiwgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbik7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogI2VuZGlmCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0hSU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFiNmEwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIEZpbGUgU3lzdGVtIGRldmljZSBncm91cCBpbXBsZW1lbnRhdGlvbiAoSEFMIHJld3JpdGUpIC0gaHJoX2ZpbGVzeXMuYworICoKKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisjaW5jbHVkZSAiaG9zdF9yZXMuaCIKKyNpbmNsdWRlICJocmhfZmlsZXN5cy5oIgorI2luY2x1ZGUgImhyaF9zdG9yYWdlLmgiCisjaW5jbHVkZSAiaHJfZGlzay5oIgorI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgorCisjaWYgSEFWRV9NTlRFTlRfSAorI2luY2x1ZGUgPG1udGVudC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTU5URU5UX0gKKyNpbmNsdWRlIDxzeXMvbW50ZW50Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NTlRUQUJfSAorI2luY2x1ZGUgPHN5cy9tbnR0YWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19WRlNfSAorI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKKyNpbmNsdWRlIDxzeXMvbW50Y3RsLmg+CisjaW5jbHVkZSA8c3lzL3Ztb3VudC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGN0aW1lX3RvX3RpbWV0KQorCisjZGVmaW5lIEhSRlNfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEtlcm5lbCAmIGludGVyZmFjZSBpbmZvcm1hdGlvbiwKKwkgKiAgIGFuZCBpbnRlcm5hbCBmb3J3YXJkIGRlY2xhcmF0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KK25ldHNubXBfZnN5c19pbmZvICpIUkZTX2VudHJ5OworCisjZGVmaW5lCUZVTExfRFVNUAkwCisjZGVmaW5lCVBBUlRfRFVNUAkxCisKK2V4dGVybiB2b2lkICAgICBJbml0X0hSX0ZpbGVTeXModm9pZCk7CitleHRlcm4gaW50ICAgICAgR2V0X05leHRfSFJfRmlsZVN5cyh2b2lkKTsKK2NoYXIgICAgICAgICAgICpjb29rX2RldmljZShjaGFyICopOworc3RhdGljIHVfY2hhciAgKndoZW5fZHVtcGVkKGNoYXIgKmZpbGVzeXMsIGludCBsZXZlbCwgc2l6ZV90ICogbGVuZ3RoKTsKK2ludCAgICAgICAgICAgICBoZWFkZXJfaHJoZmlsZXN5cyhzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBJbml0aWFsaXNhdGlvbiAmIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKwkgKgorCSAqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSFJGU1lTX0lOREVYCQkxCisjZGVmaW5lIEhSRlNZU19NT1VOVAkJMgorI2RlZmluZSBIUkZTWVNfUk1PVU5UCQkzCisjZGVmaW5lIEhSRlNZU19UWVBFCQk0CisjZGVmaW5lIEhSRlNZU19BQ0NFU1MJCTUKKyNkZWZpbmUgSFJGU1lTX0JPT1QJCTYKKyNkZWZpbmUgSFJGU1lTX1NUT1JFSURYCQk3CisjZGVmaW5lIEhSRlNZU19GVUxMRFVNUAkJOAorI2RlZmluZSBIUkZTWVNfUEFSVERVTVAJCTkKKworc3RydWN0IHZhcmlhYmxlNCBocmZzeXNfdmFyaWFibGVzW10gPSB7CisgICAge0hSRlNZU19JTkRFWCwgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgMX19LAorICAgIHtIUkZTWVNfTU9VTlQsICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDJ9fSwKKyAgICB7SFJGU1lTX1JNT1VOVCwgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCAzfX0sCisgICAge0hSRlNZU19UWVBFLCAgICAgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgNH19LAorICAgIHtIUkZTWVNfQUNDRVNTLCAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDV9fSwKKyAgICB7SFJGU1lTX0JPT1QsICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCA2fX0sCisgICAge0hSRlNZU19TVE9SRUlEWCwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgN319LAorICAgIHtIUkZTWVNfRlVMTERVTVAsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDh9fSwKKyAgICB7SFJGU1lTX1BBUlREVU1QLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCA5fX0sCit9Oworb2lkICAgICAgICAgICAgIGhyZnN5c192YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA4IH07CisKK3ZvaWQKK2luaXRfaHJoX2ZpbGVzeXModm9pZCkKK3sKKyAgICBSRUdJU1RFUl9NSUIoImhvc3QvaHJfZmlsZXN5cyIsIGhyZnN5c192YXJpYWJsZXMsIHZhcmlhYmxlNCwKKyAgICAgICAgICAgICAgICAgaHJmc3lzX3ZhcmlhYmxlc19vaWQpOworfQorCisvKgorICogaGVhZGVyX2hyaGZpbGVzeXMoLi4uCisgKiBBcmd1bWVudHM6CisgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQorICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCisgKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAorICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCisgKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAorICogd3JpdGVfbWV0aG9kCisgKiAKKyAqLworCitpbnQKK2hlYWRlcl9ocmhmaWxlc3lzKHN0cnVjdCB2YXJpYWJsZSAqdnAsCisgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisjZGVmaW5lIEhSRlNZU19FTlRSWV9OQU1FX0xFTkdUSAkxMQorICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKKyAgICBpbnQgICAgICAgICAgICAgZnN5c19pZHgsIExvd0luZGV4ID0gLTE7CisgICAgaW50ICAgICAgICAgICAgIHJlc3VsdDsKKworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2ZpbGVzeXMiLCAidmFyX2hyaGZpbGVzeXM6ICIpKTsKKyAgICBERUJVR01TR09JRCgoImhvc3QvaHJfZmlsZXN5cyIsIG5hbWUsICpsZW5ndGgpKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfZmlsZXN5cyIsICIgJWRcbiIsIGV4YWN0KSk7CisKKyAgICBtZW1jcHkoKGNoYXIgKikgbmV3bmFtZSwgKGNoYXIgKikgdnAtPm5hbWUsIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOworICAgIC8qCisgICAgICogRmluZCAibmV4dCIgZmlsZSBzeXN0ZW0gZW50cnkgCisgICAgICovCisKKyAgICBJbml0X0hSX0ZpbGVTeXMoKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGZzeXNfaWR4ID0gR2V0X05leHRfSFJfRmlsZVN5cygpOworICAgICAgICBpZiAoZnN5c19pZHggPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbmV3bmFtZVtIUkZTWVNfRU5UUllfTkFNRV9MRU5HVEhdID0gZnN5c19pZHg7CisgICAgICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgbmV3bmFtZSwgdnAtPm5hbWVsZW4gKyAxKTsKKyAgICAgICAgaWYgKGV4YWN0ICYmIChyZXN1bHQgPT0gMCkpIHsKKyAgICAgICAgICAgIExvd0luZGV4ID0gZnN5c19pZHg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCFleGFjdCAmJiAocmVzdWx0IDwgMCkpICYmCisgICAgICAgICAgICAoTG93SW5kZXggPT0gLTEgfHwgZnN5c19pZHggPCBMb3dJbmRleCkpIHsKKyAgICAgICAgICAgIExvd0luZGV4ID0gZnN5c19pZHg7CisjaWZkZWYgSFJGU19NT05PVE9OSUNBTExZX0lOQ1JFQVNJTkcKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoTG93SW5kZXggPT0gLTEpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZmlsZXN5cyIsICIuLi4gaW5kZXggb3V0IG9mIHJhbmdlXG4iKSk7CisgICAgICAgIHJldHVybiAoTUFUQ0hfRkFJTEVEKTsKKyAgICB9CisKKyAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKKyAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CisgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKyAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLworCisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZmlsZXN5cyIsICIuLi4gZ2V0IGZpbGVzeXMgc3RhdHMgIikpOworICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9maWxlc3lzIiwgbmFtZSwgKmxlbmd0aCkpOworICAgIERFQlVHTVNHKCgiaG9zdC9ocl9maWxlc3lzIiwgIlxuIikpOworCisgICAgcmV0dXJuIExvd0luZGV4OworfQorCisKK29pZCAgICAgICAgICAgICBmc3lzX3R5cGVfaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDMsIDksIDEgfTsgICAgIC8qIGhyRlNPdGhlciAqLworaW50ICAgICAgICAgICAgIGZzeXNfdHlwZV9sZW4gPQorICAgIHNpemVvZihmc3lzX3R5cGVfaWQpIC8gc2l6ZW9mKGZzeXNfdHlwZV9pZFswXSk7CisKKworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBTeXN0ZW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisJICoKKwkgKioqKioqKioqKioqKioqKioqKioqLworCisKK3VfY2hhciAgICAgICAgICoKK3Zhcl9ocmhmaWxlc3lzKHN0cnVjdCB2YXJpYWJsZSAqdnAsCisgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisgICAgaW50ICAgICAgICAgICAgIGZzeXNfaWR4OworICAgIHN0YXRpYyBjaGFyICAgICBzdHJpbmdbMTAyNF07CisKKyAgICBmc3lzX2lkeCA9CisgICAgICAgIGhlYWRlcl9ocmhmaWxlc3lzKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpOworICAgIGlmIChmc3lzX2lkeCA9PSBNQVRDSF9GQUlMRUQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyAgICBjYXNlIEhSRlNZU19JTkRFWDoKKyAgICAgICAgbG9uZ19yZXR1cm4gPSBmc3lzX2lkeDsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBjYXNlIEhSRlNZU19NT1VOVDoKKyAgICAgICAgc25wcmludGYoc3RyaW5nLCBzaXplb2Yoc3RyaW5nKSwgIiVzIiwgSFJGU19lbnRyeS0+cGF0aCk7CisgICAgICAgIHN0cmluZ1sgc2l6ZW9mKHN0cmluZyktMSBdID0gMDsKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3RyaW5nOworICAgIGNhc2UgSFJGU1lTX1JNT1VOVDoKKyAgICAgICAgaWYgKEhSRlNfZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX1JFTU9URSkgeworICAgICAgICAgICAgc25wcmludGYoc3RyaW5nLCBzaXplb2Yoc3RyaW5nKSwgIiVzIiwgSFJGU19lbnRyeS0+ZGV2aWNlKTsKKyAgICAgICAgICAgIHN0cmluZ1sgc2l6ZW9mKHN0cmluZyktMSBdID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJpbmdbMF0gPSAnXDAnOworICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzdHJpbmc7CisKKyAgICBjYXNlIEhSRlNZU19UWVBFOgorICAgICAgICBmc3lzX3R5cGVfaWRbZnN5c190eXBlX2xlbiAtIDFdID0gCisgICAgICAgICAgICAoSFJGU19lbnRyeS0+dHlwZSA+IF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GU19UWVBFX09USEVSIDogSFJGU19lbnRyeS0+dHlwZSk7CisgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKGZzeXNfdHlwZV9pZCk7CisgICAgICAgIHJldHVybiAodV9jaGFyICopIGZzeXNfdHlwZV9pZDsKKworICAgIGNhc2UgSFJGU1lTX0FDQ0VTUzoKKwlsb25nX3JldHVybiA9IEhSRlNfZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX1JPTkxZID8gMiA6IDE7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUkZTWVNfQk9PVDoKKwlsb25nX3JldHVybiA9IEhSRlNfZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX0JPT1RBQkxFID8gMSA6IDI7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUkZTWVNfU1RPUkVJRFg6CisgICAgICAgIGxvbmdfcmV0dXJuID0gZnN5c19pZHggKyBORVRTTk1QX01FTV9UWVBFX01BWDsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBjYXNlIEhSRlNZU19GVUxMRFVNUDoKKyAgICAgICAgcmV0dXJuIHdoZW5fZHVtcGVkKEhSRlNfZW50cnktPnBhdGgsIEZVTExfRFVNUCwgdmFyX2xlbik7CisgICAgY2FzZSBIUkZTWVNfUEFSVERVTVA6CisgICAgICAgIHJldHVybiB3aGVuX2R1bXBlZChIUkZTX2VudHJ5LT5wYXRoLCBQQVJUX0RVTVAsIHZhcl9sZW4pOworICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfaHJoZmlsZXN5c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgICAgICBIUkZTX2luZGV4OworCit2b2lkCitJbml0X0hSX0ZpbGVTeXModm9pZCkKK3sKKyAgICBuZXRzbm1wX2NhY2hlICpjID0gbmV0c25tcF9mc3lzX2dldF9jYWNoZSgpOworICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggYyApOworCisgICAgSFJGU19lbnRyeSA9IE5VTEw7CisgICAgSFJGU19pbmRleCA9IDA7Cit9CisKK2ludAorR2V0X05leHRfSFJfRmlsZVN5cyh2b2lkKQoreworICAgIGlmICggSFJGU19lbnRyeSApIHsKKyAgICAgICAgSFJGU19lbnRyeSA9IG5ldHNubXBfZnN5c19nZXRfbmV4dCggSFJGU19lbnRyeSApOworICAgIH0gZWxzZSB7ICAgICAKKyAgICAgICAgSFJGU19lbnRyeSA9IG5ldHNubXBfZnN5c19nZXRfZmlyc3QoKTsKKyAgICB9CisgICAgLyogU2tpcCAiaW5hY3RpdmUiIGVudHJpZXMgKi8KKyAgICB3aGlsZSAoIEhSRlNfZW50cnkgJiYgIShIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19BQ1RJVkUpKQorICAgICAgICBIUkZTX2VudHJ5ID0gbmV0c25tcF9mc3lzX2dldF9uZXh0KCBIUkZTX2VudHJ5ICk7CisKKyAgICBIUkZTX2luZGV4ID0gKEhSRlNfZW50cnkgPyBIUkZTX2VudHJ5LT5pZHgub2lkc1swXSA6IC0xICk7CisgICAgcmV0dXJuIEhSRlNfaW5kZXg7Cit9CisKKworCitzdGF0aWMgdV9jaGFyICAqCit3aGVuX2R1bXBlZChjaGFyICpmaWxlc3lzLCBpbnQgbGV2ZWwsIHNpemVfdCAqIGxlbmd0aCkKK3sKKyAgICB0aW1lX3QgICAgICAgICAgZHVtcGRhdGUgPSAwLCB0bXA7CisgICAgRklMRSAgICAgICAgICAgKmR1bXBfZnA7CisgICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF07CisgICAgY2hhciAgICAgICAgICAgKmNwMSwgKmNwMiwgKmNwMzsKKworICAgIC8qCisgICAgICogTG9vayBmb3IgdGhlIHJlbGV2ZW50IGVudHJpZXMgaW4gL2V0Yy9kdW1wZGF0ZXMKKyAgICAgKgorICAgICAqIFRoaXMgaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCBkaXNrcyBhcmUKKyAgICAgKiAgIG1vdW50ZWQgdXNpbmcgYmxvY2sgZGV2aWNlcywgYnV0IGR1bXBzIGFyZQorICAgICAqICAgZG9uZSB2aWEgdGhlIHJhdyBjaGFyYWN0ZXIgZGV2aWNlcy4KKyAgICAgKiBUaHVzIHRoZSBkZXZpY2UgbmFtZXMgaW4gL2V0Yy9kdW1wZGF0ZXMgYW5kCisgICAgICogICAvZXRjL21udHRhYiBkb24ndCBtYXRjaC4KKyAgICAgKiAgIFRoZXNlIGNvbXBhcmlzb25zIGFyZSB0aGVyZWZvcmUgbWFkZSB1c2luZyB0aGUKKyAgICAgKiAgIGZpbmFsIHBvcnRpb24gb2YgdGhlIGRldmljZSBuYW1lIG9ubHkuCisgICAgICovCisKKyAgICBpZiAoKmZpbGVzeXMgPT0gJ1wwJykgICAgICAgLyogTm8gZmlsZXN5c3RlbSBuYW1lPyAqLworICAgICAgICByZXR1cm4gZGF0ZV9uX3RpbWUoTlVMTCwgbGVuZ3RoKTsKKyAgICBjcDEgPSBzdHJyY2hyKGZpbGVzeXMsICcvJyk7ICAgICAgICAvKiBGaW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGN1cnJlbnQgRlMgKi8KKworICAgIGlmIChjcDEgPT0gTlVMTCkKKyAgICAgICAgY3AxID0gZmlsZXN5czsKKworICAgIGlmICgoZHVtcF9mcCA9IGZvcGVuKCIvZXRjL2R1bXBkYXRlcyIsICJyIikpID09IE5VTEwpCisgICAgICAgIHJldHVybiBkYXRlX25fdGltZShOVUxMLCBsZW5ndGgpOworCisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZHVtcF9mcCkgIT0gTlVMTCkgeworICAgICAgICBjcDIgPSBzdHJjaHIobGluZSwgJyAnKTsgICAgICAgIC8qIFN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGRldmljZSBuYW1lIG9ubHkgKi8KKyAgICAgICAgaWYgKGNwMiAhPSBOVUxMKSB7CisgICAgICAgICAgICAqY3AyID0gJ1wwJzsKKyAgICAgICAgICAgIGNwMyA9IHN0cnJjaHIobGluZSwgJy8nKTsgICAvKiBhbmQgZmluZCB0aGUgbGFzdCBlbGVtZW50ICovCisgICAgICAgICAgICBpZiAoY3AzID09IE5VTEwpCisgICAgICAgICAgICAgICAgY3AzID0gbGluZTsKKworICAgICAgICAgICAgaWYgKHN0cmNtcChjcDEsIGNwMykgIT0gMCkgIC8qIFdyb25nIEZTICovCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICsrY3AyOworICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoMHhGRiAmICpjcDIpKQorICAgICAgICAgICAgICAgICsrY3AyOyAgICAgICAgICAvKiBOb3cgZmluZCB0aGUgZHVtcCBsZXZlbCAqLworCisgICAgICAgICAgICBpZiAobGV2ZWwgPT0gRlVMTF9EVU1QKSB7CisgICAgICAgICAgICAgICAgaWYgKCooY3AyKyspICE9ICcwJykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogTm90IGludGVyZXN0ZWQgaW4gcGFydGlhbCBkdW1wcyAqLworICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKDB4RkYgJiAqY3AyKSkKKyAgICAgICAgICAgICAgICAgICAgKytjcDI7CisKKyAgICAgICAgICAgICAgICBkdW1wZGF0ZSA9IGN0aW1lX3RvX3RpbWV0KGNwMik7CisgICAgICAgICAgICAgICAgZmNsb3NlKGR1bXBfZnApOworICAgICAgICAgICAgICAgIHJldHVybiBkYXRlX25fdGltZSgmZHVtcGRhdGUsIGxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIC8qIFBhcnRpYWwgRHVtcCAqLworICAgICAgICAgICAgICAgIGlmICgqKGNwMisrKSA9PSAnMCcpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIE5vdCBpbnRlcmVzdGVkIGluIGZ1bGwgZHVtcHMgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgweEZGICYgKmNwMikpCisgICAgICAgICAgICAgICAgICAgICsrY3AyOworCisgICAgICAgICAgICAgICAgdG1wID0gY3RpbWVfdG9fdGltZXQoY3AyKTsKKyAgICAgICAgICAgICAgICBpZiAodG1wID4gZHVtcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGR1bXBkYXRlID0gdG1wOyAgICAgLyogUmVtZW1iZXIgdGhlICdsYXRlc3QnIHBhcnRpYWwgZHVtcCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZmNsb3NlKGR1bXBfZnApOworCisgICAgcmV0dXJuIGRhdGVfbl90aW1lKCZkdW1wZGF0ZSwgbGVuZ3RoKTsKK30KKworCisjZGVmaW5lIFJBV19ERVZJQ0VfUFJFRklYCSIvZGV2L3Jkc2siCisjZGVmaW5lIENPT0tFRF9ERVZJQ0VfUFJFRklYCSIvZGV2L2RzayIKKworY2hhciAgICAgICAgICAgKgorY29va19kZXZpY2UoY2hhciAqZGV2KQoreworICAgIHN0YXRpYyBjaGFyICAgICBjb29rZWRfZGV2W1NOTVBfTUFYUEFUSCsxXTsKKworICAgIGlmICghc3RybmNtcChkZXYsIFJBV19ERVZJQ0VfUFJFRklYLCBzdHJsZW4oUkFXX0RFVklDRV9QUkVGSVgpKSkgeworICAgICAgICBzdHJsY3B5KGNvb2tlZF9kZXYsIENPT0tFRF9ERVZJQ0VfUFJFRklYLCBzaXplb2YoY29va2VkX2RldikpOworICAgICAgICBzdHJsY2F0KGNvb2tlZF9kZXYsIGRldiArIHN0cmxlbihSQVdfREVWSUNFX1BSRUZJWCksCisgICAgICAgICAgICAgICAgc2l6ZW9mKGNvb2tlZF9kZXYpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJsY3B5KGNvb2tlZF9kZXYsIGRldiwgc2l6ZW9mKGNvb2tlZF9kZXYpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29va2VkX2RldjsKK30KKworCitpbnQKK0dldF9GU0luZGV4KGNoYXIgKmRldikKK3sKKyAgICBuZXRzbm1wX2ZzeXNfaW5mbyAqZnN5czsKKworICAgIGZzeXMgPSBuZXRzbm1wX2ZzeXNfYnlfZGV2aWNlKCBkZXYsIE5FVFNOTVBfRlNfRklORF9FWElTVCApOworICAgIHJldHVybiAoZnN5cyA/IGZzeXMtPmlkeC5vaWRzWzBdIDogLTEgKTsKK30KKworbG9uZworR2V0X0ZTU2l6ZShjaGFyICpkZXYpCit7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmZzeXM7CisKKyAgICBmc3lzID0gbmV0c25tcF9mc3lzX2J5X2RldmljZSggZGV2LCBORVRTTk1QX0ZTX0ZJTkRfRVhJU1QgKTsKKyAgICBpZiAoIGZzeXMgKSAgICAgICAKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfZnN5c19zaXplKCBmc3lzICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gLTE7Cit9CisKK2ludAorQ2hlY2tfSFJfRmlsZVN5c19ORlMgKHZvaWQpCit7CisgICAgcmV0dXJuIChIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19SRU1PVEUpID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4OTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIGZpbGUgc3lzdGVtIGRldmljZSBncm91cCBpbnRlcmZhY2UgKEhBTCByZXdyaXRlKSAtIGhyaF9maWxlc3lzLmgKKyAqCisgKi8KKyNpZm5kZWYgX01JQkdST1VQX0hSRlNZU19ICisjZGVmaW5lIF9NSUJHUk9VUF9IUkZTWVNfSAorCitleHRlcm4gdm9pZCAgICAgaW5pdF9ocmhfZmlsZXN5cyh2b2lkKTsKK2V4dGVybiB2b2lkICAgICBJbml0X0hSX0ZpbGVTeXModm9pZCk7CitleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfaHJoZmlsZXN5czsKK2V4dGVybiBpbnQgICAgICBHZXRfTmV4dF9IUl9GaWxlU3lzKHZvaWQpOworZXh0ZXJuIGludCAgICAgIENoZWNrX0hSX0ZpbGVTeXNfTkZTKHZvaWQpOworCitleHRlcm4gaW50ICAgICAgR2V0X0ZTSW5kZXgoY2hhciAqKTsKK2V4dGVybiBsb25nICAgICBHZXRfRlNTaXplKGNoYXIgKik7ICAgICAvKiBUZW1wb3JhcnkgKi8KKworY29uZmlnX2V4Y2x1ZGUoIGhvc3QvaHJfZmlsZXN5cyApCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0hSRlNZU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyZjg1NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuYwpAQCAtMCwwICsxLDUyMCBAQAorLyoKKyAqICBIb3N0IFJlc291cmNlcyBNSUIgLSBzdG9yYWdlIGdyb3VwIGltcGxlbWVudGF0aW9uIC0gaHJoX3N0b3JhZ2UuYworICoKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaD4KKyNpbmNsdWRlICJob3N0X3Jlcy5oIgorI2luY2x1ZGUgImhyaF9maWxlc3lzLmgiCisjaW5jbHVkZSAiaHJoX3N0b3JhZ2UuaCIKKyNpbmNsdWRlICJocl9kaXNrLmgiCisjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpZmRlZiBXSU4zMgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaW5jbHVkZSA8ZXJybm8uaD4KKyMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgorIyBlbHNlCisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oPgorCisjZGVmaW5lIEhSU1RPUkVfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEtlcm5lbCAmIGludGVyZmFjZSBpbmZvcm1hdGlvbiwKKwkgKiAgIGFuZCBpbnRlcm5hbCBmb3J3YXJkIGRlY2xhcmF0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KKworCitleHRlcm4gbmV0c25tcF9mc3lzX2luZm8gKkhSRlNfZW50cnk7CisKK3N0YXRpYyB2b2lkIHBhcnNlX3N0b3JhZ2VfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCisJICoKKwkgKiAgSW5pdGlhbGlzYXRpb24gJiBjb21tb24gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisJICoKKwkgKioqKioqKioqKioqKioqKioqKioqLworaW50ICAgICAgICAgICAgIEdldF9OZXh0X0hSX1N0b3JlKHZvaWQpOwordm9pZCAgICAgICAgICAgIEluaXRfSFJfU3RvcmUodm9pZCk7CitpbnQgICAgICAgICAgICAgaGVhZGVyX2hyc3RvcmUoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7Cit2b2lkKiAgICAgICAgICAgaGVhZGVyX2hyc3RvcmVFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgaGFuZGxlX21lbXNpemU7CisKKworI2RlZmluZQlIUlNUT1JFX01FTVNJWkUJCTEKKyNkZWZpbmUJSFJTVE9SRV9JTkRFWAkJMgorI2RlZmluZQlIUlNUT1JFX1RZUEUJCTMKKyNkZWZpbmUJSFJTVE9SRV9ERVNDUgkJNAorI2RlZmluZQlIUlNUT1JFX1VOSVRTCQk1CisjZGVmaW5lCUhSU1RPUkVfU0laRQkJNgorI2RlZmluZQlIUlNUT1JFX1VTRUQJCTcKKyNkZWZpbmUJSFJTVE9SRV9GQUlMUwkJOAorCitzdHJ1Y3QgdmFyaWFibGUyIGhyc3RvcmVfdmFyaWFibGVzW10gPSB7CisgICAge0hSU1RPUkVfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHsxfX0sCisgICAge0hSU1RPUkVfVFlQRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7Mn19LAorICAgIHtIUlNUT1JFX0RFU0NSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHszfX0sCisgICAge0hSU1RPUkVfVU5JVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHs0fX0sCisgICAge0hSU1RPUkVfU0laRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezV9fSwKKyAgICB7SFJTVE9SRV9VU0VELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7Nn19LAorICAgIHtIUlNUT1JFX0ZBSUxTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7N319Cit9Oworb2lkICAgICAgICAgICAgIGhyc3RvcmVfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiB9Oworb2lkICAgICAgICAgICAgIGhyTWVtb3J5U2l6ZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMiB9Oworb2lkICAgICAgICAgICAgIGhyU3RvcmFnZVRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMywgMSB9OworCisKK3ZvaWQKK2luaXRfaHJoX3N0b3JhZ2Uodm9pZCkKK3sKKyAgICBjaGFyICphcHBuYW1lOworCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIoCisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJob3N0L2hyTWVtb3J5U2l6ZSIsIGhhbmRsZV9tZW1zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJNZW1vcnlTaXplX29pZCwgT0lEX0xFTkdUSChock1lbW9yeVNpemVfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSk7CisgICAgUkVHSVNURVJfTUlCKCJob3N0L2hyX3N0b3JhZ2UiLCBocnN0b3JlX3ZhcmlhYmxlcywgdmFyaWFibGUyLAorICAgICAgICAgICAgICAgICBoclN0b3JhZ2VUYWJsZV9vaWQpOworCisgICAgYXBwbmFtZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgYXBwbmFtZSwgInNraXBORlNJbkhvc3RSZXNvdXJjZXMiLCAKKwkJCSAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfU0tJUE5GU0lOSE9TVFJFU09VUkNFUyk7CisKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgYXBwbmFtZSwgInJlYWxTdG9yYWdlVW5pdHMiLAorICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9SRUFMU1RPUkFHRVVOSVRTKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzdG9yYWdlVXNlTkZTIiwgcGFyc2Vfc3RvcmFnZV9jb25maWcsIE5VTEwsCisJIjEgfCAyXHRcdCgxID0gZW5hYmxlLCAyID0gZGlzYWJsZSkiKTsKK30KKworc3RhdGljIGludCBzdG9yYWdlVXNlTkZTID0gMTsJLyogRGVmYXVsdCB0byByZXBvcnRpbmcgTkZTIG1vdW50cyBhcyBOZXR3b3JrRGlzayAqLworCitzdGF0aWMgdm9pZAorcGFyc2Vfc3RvcmFnZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCit7CisgICAgY2hhciAqdmFsOworICAgIGludCBpdmFsOworICAgIGNoYXIgKnN0OworCisgICAgdmFsID0gc3RydG9rX3IoY3B0ciwgIiBcdCIsICZzdCk7CisgICAgaWYgKCF2YWwpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiTWlzc2luZyBGTEFHIHBhcmFtZXRlciBpbiBzdG9yYWdlVXNlTkZTIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaXZhbCA9IGF0b2kodmFsKTsKKyAgICBpZiAoaXZhbCA8IDEgfHwgaXZhbCA+IDIpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigic3RvcmFnZVVzZU5GUyBtdXN0IGJlIDEgb3IgMiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN0b3JhZ2VVc2VORlMgPSAoaXZhbCA9PSAxKSA/IDEgOiAwOworfQorCisvKgorICogaGVhZGVyX2hyc3RvcmVFbnRyeSguLi4KKyAqIEFyZ3VtZW50czoKKyAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCisgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKKyAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCisgKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKKyAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCisgKiB3cml0ZV9tZXRob2QKKyAqIAorICovCisKK3ZvaWQgKgoraGVhZGVyX2hyc3RvcmVFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworI2RlZmluZSBIUlNUT1JFX0VOVFJZX05BTUVfTEVOR1RICTExCisgICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOworICAgIGludCAgICAgICAgICAgICBzdG9yYWdlX2lkeCwgTG93SW5kZXggPSAtMTsKKyAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OworICAgIGludCAgICAgICAgICAgICAgICAgIGlkeCA9IC0xOworICAgIG5ldHNubXBfbWVtb3J5X2luZm8gKm1lbSAgPSBOVUxMOworCisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfc3RvcmFnZSIsICJ2YXJfaHJzdG9yZUVudHJ5OiByZXF1ZXN0ICIpKTsKKyAgICBERUJVR01TR09JRCgoImhvc3QvaHJfc3RvcmFnZSIsIG5hbWUsICpsZW5ndGgpKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIgZXhhY3Q9JWRcbiIsIGV4YWN0KSk7CisKKyAgICBtZW1jcHkoKGNoYXIgKikgbmV3bmFtZSwgKGNoYXIgKikgdnAtPm5hbWUsCisgICAgICAgICAgIChpbnQpIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOworICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgdnAtPm5hbWUsIHZwLT5uYW1lbGVuKTsKKworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3N0b3JhZ2UiLCAidmFyX2hyc3RvcmVFbnRyeTogY29tcGFyZSAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJob3N0L2hyX3N0b3JhZ2UiLCB2cC0+bmFtZSwgdnAtPm5hbWVsZW4pKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIgPT4gJWRcbiIsIHJlc3VsdCkpOworCisKKyAgICBpZiAocmVzdWx0IDwgMCB8fAorICAgICAgICAqbGVuZ3RoIDw9IEhSU1RPUkVfRU5UUllfTkFNRV9MRU5HVEggKSB7CisgICAgICAgLyoKKyAgICAgICAgKiBSZXF1ZXN0ZWQgT0lEIHRvbyBlYXJseSBvciB0b28gc2hvcnQgdG8gcmVmZXIKKyAgICAgICAgKiAgIHRvIGEgdmFsaWQgcm93IChmb3IgdGhlIGN1cnJlbnQgY29sdW1uIG9iamVjdCkuCisgICAgICAgICogR0VUIHJlcXVlc3RzIHNob3VsZCBmYWlsLCBHRVRORVhUIHJlcXVlc3RzCisgICAgICAgICogICBzaG91bGQgdXNlIHRoZSBmaXJzdCByb3cuCisgICAgICAgICovCisgICAgICAgIGlmICggZXhhY3QgKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG5ldHNubXBfbWVtb3J5X2xvYWQoKTsKKyAgICAgICAgbWVtID0gbmV0c25tcF9tZW1vcnlfZ2V0X2ZpcnN0KCAwICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBPdGhlcndpc2UsIHJldHJpZXZlIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgICogIChvciBmb2xsb3dpbmcpIHJvdyBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggZXhhY3QgJiYgKmxlbmd0aCA+IEhSU1RPUkVfRU5UUllfTkFNRV9MRU5HVEgrMSApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAvKiBUb28gbG9uZyBmb3IgYSB2YWxpZCBpbnN0YW5jZSAqLworICAgICAgICBpZHggPSBuYW1lWyBIUlNUT1JFX0VOVFJZX05BTUVfTEVOR1RIIF07CisgICAgICAgIGlmICggaWR4IDwgTkVUU05NUF9NRU1fVFlQRV9NQVggKSB7CisgICAgICAgICAgICBuZXRzbm1wX21lbW9yeV9sb2FkKCk7CisgICAgICAgICAgICBtZW0gPSAoIGV4YWN0ID8gbmV0c25tcF9tZW1vcnlfZ2V0X2J5SWR4KCBpZHgsIDAgKSA6CisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWVtb3J5X2dldF9uZXh0X2J5SWR4KCBpZHgsIDAgKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoaXMgbWF0Y2hlZCBhIG1lbW9yeS1iYXNlZCBlbnRyeSwgdGhlbgorICAgICAqICAgIHVwZGF0ZSB0aGUgT0lEIHBhcmFtZXRlcihzKSBmb3IgR0VUTkVYVCByZXF1ZXN0cy4KKyAgICAgKi8KKyAgICBpZiAoIG1lbSApIHsKKyAgICAgICAgaWYgKCAhZXhhY3QgKSB7CisgICAgICAgICAgICBuZXduYW1lWyBIUlNUT1JFX0VOVFJZX05BTUVfTEVOR1RIIF0gPSBtZW0tPmlkeDsKKyAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAorICAgICAgICAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKgorICAgICAqIElmIHRoaXMgZGlkbid0IG1hdGNoIGEgbWVtb3J5LWJhc2VkIGVudHJ5LAorICAgICAqICAgdGhlbiBjb25zaWRlciB0aGUgZGlzay1iYXNlZCBzdG9yYWdlLgorICAgICAqLworICAgIGVsc2UgeworICAgICAgICBJbml0X0hSX1N0b3JlKCk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHN0b3JhZ2VfaWR4ID0gR2V0X05leHRfSFJfU3RvcmUoKTsKKyAgICAgICAgICAgIERFQlVHTVNHKCgiaG9zdC9ocl9zdG9yYWdlIiwgIihpbmRleCAlZCAuLi4uIiwgc3RvcmFnZV9pZHgpKTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlX2lkeCA9PSAtMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG5ld25hbWVbSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSF0gPSBzdG9yYWdlX2lkeDsKKyAgICAgICAgICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9zdG9yYWdlIiwgbmV3bmFtZSwgKmxlbmd0aCkpOworICAgICAgICAgICAgREVCVUdNU0coKCJob3N0L2hyX3N0b3JhZ2UiLCAiXG4iKSk7CisgICAgICAgICAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7CisgICAgICAgICAgICBpZiAoZXhhY3QgJiYgKHJlc3VsdCA9PSAwKSkgeworICAgICAgICAgICAgICAgIExvd0luZGV4ID0gc3RvcmFnZV9pZHg7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBTYXZlIHN0b3JhZ2Ugc3RhdHVzIGluZm9ybWF0aW9uIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCghZXhhY3QgJiYgKHJlc3VsdCA8IDApKSAmJgorICAgICAgICAgICAgICAgIChMb3dJbmRleCA9PSAtMSB8fCBzdG9yYWdlX2lkeCA8IExvd0luZGV4KSkgeworICAgICAgICAgICAgICAgIExvd0luZGV4ID0gc3RvcmFnZV9pZHg7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBTYXZlIHN0b3JhZ2Ugc3RhdHVzIGluZm9ybWF0aW9uIAorICAgICAgICAgICAgICAgICAqLworI2lmZGVmIEhSU1RPUkVfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIExvd0luZGV4ICE9IC0xICkgeworICAgICAgICAgICAgaWYgKCAhZXhhY3QgKSB7CisgICAgICAgICAgICAgICAgbmV3bmFtZVsgSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSCBdID0gTG93SW5kZXg7CisgICAgICAgICAgICAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW0gPSAobmV0c25tcF9tZW1vcnlfaW5mbyopMHhmZmZmZmZmZjsgICAvKiBUbyBpbmRpY2F0ZSAnc3VjY2VzcycgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CisgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KKworICAgIC8qCisgICAgICogIC4uLiBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSByb3cKKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9zdG9yYWdlIiwgInZhcl9ocnN0b3JlRW50cnk6IHByb2Nlc3MgIikpOworICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9zdG9yYWdlIiwgbmFtZSwgKmxlbmd0aCkpOworICAgIERFQlVHTVNHKCgiaG9zdC9ocl9zdG9yYWdlIiwgIiAoJXApXG4iLCBtZW0pKTsKKyAgICByZXR1cm4gKHZvaWQqKW1lbTsKK30KKworb2lkICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMSwgMSB9OyAgLyogaHJTdG9yYWdlT3RoZXIgKi8KK2ludCAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfbGVuID0KKyAgICBzaXplb2Yoc3RvcmFnZV90eXBlX2lkKSAvIHNpemVvZihzdG9yYWdlX3R5cGVfaWRbMF0pOworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBTeXN0ZW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisJICoKKwkgKioqKioqKioqKioqKioqKioqKioqLworCitpbnQKK2hhbmRsZV9tZW1zaXplKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgbmV0c25tcF9tZW1vcnlfaW5mbyAqbWVtX2luZm87CisgICAgaW50IHZhbDsKKworICAgIC8qCisgICAgICogV2UganVzdCBuZWVkIHRvIGhhbmRsZSB2YWxpZCBHRVQgcmVxdWVzdHMsIGFzIGludmFsaWQgaW5zdGFuY2VzCisgICAgICogICBhcmUgcmVqZWN0ZWQgYXV0b21hdGljYWxseSwgYW5kICh2YWxpZCkgR0VUTkVYVCByZXF1ZXN0cyBhcmUKKyAgICAgKiAgIGNvbnZlcnRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBHRVQgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIFdlIGFsc28gb25seSBldmVyIHJlY2VpdmUgb25lIHJlcXVlc3QgYXQgYSB0aW1lLgorICAgICAqLworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIG5ldHNubXBfbWVtb3J5X2xvYWQoKTsKKyAgICAgICAgbWVtX2luZm8gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfUEhZU01FTSwgMCApOworICAgICAgICBpZiAoICFtZW1faW5mbyB8fCBtZW1faW5mby0+c2l6ZSA9PSAtMSB8fCBtZW1faW5mby0+dW5pdHMgPT0gLTEgKQorICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfTk9TVUNIT0JKRUNUICk7CisJZWxzZSB7CisgICAgICAgICAgICB2YWwgID0gIG1lbV9pbmZvLT5zaXplOyAgICAgLyogbWVtdG90YWwgKi8KKyAgICAgICAgICAgIHZhbCAqPSAobWVtX2luZm8tPnVuaXRzLzEwMjQpOworICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmdmFsLCBzaXplb2YodmFsKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKgorICAgICAgICAgKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIHNvIHRoaXMgaXMgYSByZWFsbHkgYmFkIGVycm9yIAorICAgICAgICAgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9tZW1zaXplXG4iLAorICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworCit1X2NoYXIgICAgICAgICAqCit2YXJfaHJzdG9yZShzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIGludCAgICAgICAgICAgICBzdG9yZV9pZHggPSAwOworICAgIHN0YXRpYyBjaGFyICAgICBzdHJpbmdbMTAyNF07CisgICAgdm9pZCAgICAgICAgICAgICAgICAqcHRyOworICAgIG5ldHNubXBfbWVtb3J5X2luZm8gKm1lbSA9IE5VTEw7CisKK3JlYWxseV90cnlfbmV4dDoKKwlwdHIgPSBoZWFkZXJfaHJzdG9yZUVudHJ5KHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLAorCQkJCQl3cml0ZV9tZXRob2QpOworCWlmIChwdHIgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgc3RvcmVfaWR4ID0gbmFtZVsgSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSCBdOworICAgICAgICBpZiAoSFJGU19lbnRyeSAmJgorCSAgICBzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCAmJgorICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMpICYmCisgICAgICAgICAgICBDaGVja19IUl9GaWxlU3lzX05GUygpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChzdG9yZV9pZHggPD0gTkVUU05NUF9NRU1fVFlQRV9NQVggKSB7CisJICAgIG1lbSA9IChuZXRzbm1wX21lbW9yeV9pbmZvKilwdHI7CisgICAgICAgIH0KKworCisKKyAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworICAgIGNhc2UgSFJTVE9SRV9JTkRFWDoKKyAgICAgICAgbG9uZ19yZXR1cm4gPSBzdG9yZV9pZHg7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUlNUT1JFX1RZUEU6CisgICAgICAgIGlmIChzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCkKKyAgICAgICAgICAgIGlmIChIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19SRU1PVEUgKQorICAgICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtzdG9yYWdlX3R5cGVfbGVuIC0gMV0gPSAxMDsgICAgIC8qIE5ldHdvcmsgRGlzayAqLworICAgICAgICAgICAgZWxzZSBpZiAoSFJGU19lbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfUkVNT1ZFICkKKyAgICAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfaWRbc3RvcmFnZV90eXBlX2xlbiAtIDFdID0gNTsgICAgICAvKiBSZW1vdmFibGUgRGlzayAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtzdG9yYWdlX3R5cGVfbGVuIC0gMV0gPSA0OyAgICAgIC8qIEFzc3VtZSBmaXhlZCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2l0Y2ggKHN0b3JlX2lkeCkgeworICAgICAgICAgICAgY2FzZSBORVRTTk1QX01FTV9UWVBFX1BIWVNNRU06CisgICAgICAgICAgICBjYXNlIE5FVFNOTVBfTUVNX1RZUEVfVVNFUk1FTToKKyAgICAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfaWRbc3RvcmFnZV90eXBlX2xlbiAtIDFdID0gMjsgICAgICAvKiBSQU0gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTkVUU05NUF9NRU1fVFlQRV9WSVJUTUVNOgorICAgICAgICAgICAgY2FzZSBORVRTTk1QX01FTV9UWVBFX1NXQVA6CisgICAgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2lkW3N0b3JhZ2VfdHlwZV9sZW4gLSAxXSA9IDM7ICAgICAgLyogVmlydHVhbCBNZW0gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2lkW3N0b3JhZ2VfdHlwZV9sZW4gLSAxXSA9IDE7ICAgICAgLyogT3RoZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKnZhcl9sZW4gPSBzaXplb2Yoc3RvcmFnZV90eXBlX2lkKTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3RvcmFnZV90eXBlX2lkOworICAgIGNhc2UgSFJTVE9SRV9ERVNDUjoKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKSB7CisgICAgICAgICAgICBzdHJsY3B5KHN0cmluZywgSFJGU19lbnRyeS0+cGF0aCwgc2l6ZW9mKHN0cmluZykpOworICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopIHN0cmluZzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICggIW1lbSB8fCAhbWVtLT5kZXNjciApCisgICAgICAgICAgICAgICAgZ290byB0cnlfbmV4dDsKKyAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKG1lbS0+ZGVzY3IpOworICAgICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgbWVtLT5kZXNjcjsKKyAgICAgICAgfQorICAgIGNhc2UgSFJTVE9SRV9VTklUUzoKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKSB7CisgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JFQUxTVE9SQUdFVU5JVFMpKQorICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+dW5pdHMgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+dW5pdHNfMzI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoICFtZW0gfHwgbWVtLT51bml0cyA9PSAtMSApCisgICAgICAgICAgICAgICAgZ290byB0cnlfbmV4dDsKKyAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gbWVtLT51bml0czsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOworICAgIGNhc2UgSFJTVE9SRV9TSVpFOgorICAgICAgICBpZiAoc3RvcmVfaWR4ID4gTkVUU05NUF9NRU1fVFlQRV9NQVgpIHsKKyAgICAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUkVBTFNUT1JBR0VVTklUUykpCisgICAgICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT5zaXplICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb25nX3JldHVybiA9IEhSRlNfZW50cnktPnNpemVfMzI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoICFtZW0gfHwgbWVtLT5zaXplID09IC0xICkKKyAgICAgICAgICAgICAgICBnb3RvIHRyeV9uZXh0OworICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBtZW0tPnNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBjYXNlIEhSU1RPUkVfVVNFRDoKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKSB7CisgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JFQUxTVE9SQUdFVU5JVFMpKQorICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+dXNlZCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT51c2VkXzMyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCAhbWVtIHx8IG1lbS0+c2l6ZSA9PSAtMSB8fCBtZW0tPmZyZWUgPT0gLTEgKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ5X25leHQ7CisgICAgICAgICAgICBsb25nX3JldHVybiA9IG1lbS0+c2l6ZSAtIG1lbS0+ZnJlZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOworICAgIGNhc2UgSFJTVE9SRV9GQUlMUzoKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKQorI2lmIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTCisJICAgIGdvdG8gdHJ5X25leHQ7CisjZWxzZQorICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOworI2VuZGlmCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCAhbWVtIHx8IG1lbS0+b3RoZXIgPT0gLTEgKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ5X25leHQ7CisgICAgICAgICAgICBsb25nX3JldHVybiA9IG1lbS0+b3RoZXI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgic25tcGQiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX2hyc3RvcmVcbiIsCisgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKKworICB0cnlfbmV4dDoKKyAgICBpZiAoIWV4YWN0KQorICAgICAgICBnb3RvIHJlYWxseV90cnlfbmV4dDsKKworICAgIHJldHVybiBOVUxMOworfQorCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCAgICAgIEhSU19pbmRleDsKKwordm9pZAorSW5pdF9IUl9TdG9yZSh2b2lkKQoreworICAgIEhSU19pbmRleCA9IDA7CisgICAgSW5pdF9IUl9GaWxlU3lzKCk7Cit9CisKK2ludAorR2V0X05leHRfSFJfU3RvcmUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIEZpbGUtYmFzZWQgc3RvcmFnZSAKKyAgICAgKi8KKwlmb3IgKDs7KSB7CisgICAgCUhSU19pbmRleCA9IEdldF9OZXh0X0hSX0ZpbGVTeXMoKTsKKwkJaWYgKEhSU19pbmRleCA+PSAwKSB7CisJCQlpZiAoIShuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorCQkJCQkJCU5FVFNOTVBfRFNfQUdFTlRfU0tJUE5GU0lOSE9TVFJFU09VUkNFUykgJiYgCisJCQkJCQlDaGVja19IUl9GaWxlU3lzX05GUygpKSkgeworCQkJCXJldHVybiBIUlNfaW5kZXggKyBORVRTTk1QX01FTV9UWVBFX01BWDsJCisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLTE7CisJCX0JCisJfQorfQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3MjM0NQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIHN0b3JhZ2UgZ3JvdXAgaW50ZXJmYWNlIChIQUwgcmV3cml0ZSkgLSBocmhfc3RvcmFnZS5oCisgKgorICovCisjaWZuZGVmIF9NSUJHUk9VUF9IUlNUT1JBR0VfSAorI2RlZmluZSBfTUlCR1JPVVBfSFJTVE9SQUdFX0gKKworY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvbWVtb3J5KQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cykKK2NvbmZpZ19yZXF1aXJlKGhvc3QvaHJoX2ZpbGVzeXMpCisKK2NvbmZpZ19leGNsdWRlKCBob3N0L2hyX3N0b3JhZ2UgKQorCitleHRlcm4gdm9pZCAgICAgaW5pdF9ocmhfc3RvcmFnZSh2b2lkKTsKK2V4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9ocnN0b3JlOworCisKKyNkZWZpbmUJSFJTX1RZUEVfTUJVRgkJMQorI2RlZmluZQlIUlNfVFlQRV9NRU0JCTIKKyNkZWZpbmUJSFJTX1RZUEVfU1dBUAkJMworI2RlZmluZQlIUlNfVFlQRV9GSVhFRF9NQVgJMyAgICAgLyogdGhlIGxhcmdlc3QgZml4ZWQgdHlwZSAqLworCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9IUlNUT1JBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaCBiL2FnZW50L21pYmdyb3VwL2hvc3RfcmVzLmgKaW5kZXggOGM5NTA5MC4uMWRiYTM4OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0X3Jlcy5oCkBAIC0xNywxNiArMTcsMTYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC92YXJfc3RydWN0Lmg+CiAKLSNpZiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQogI2RlZmluZSBfS0VSTkVMIDEKICNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKICNlbmRpZgotI2lmIGRlZmluZWQgKFdJTjMyKSAmJiAhZGVmaW5lZCAoY3lnd2luKQotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbHNlIC8qIFdJTjMyICovCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICiAjaW5jbHVkZSA8bmV0L2lmLmg+Ci0jZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZgogI2lmZGVmIF9JX0RFRklORURfS0VSTkVMCiAjdW5kZWYgX0tFUk5FTAogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMKaW5kZXggZDY1ZmFkMC4uMjZlMzFmYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYwpAQCAtNCwxNSArNCwyNSBAQAogICogJElkJAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgotI2luY2x1ZGUgImlmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgogCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisjaW5jbHVkZSAiaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oIgorI2luY2x1ZGUgImlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCIKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZV9hbGwsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZSwgaW50ZXJmYWNlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnRlcmZhY2VfYWNjZXNzX2VudHJ5X3NldF9hZG1pbl9zdGF0dXMsIGludGVyZmFjZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2xlZ2FjeSwgaW50ZXJmYWNlX2FsbCkKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0lOVEVSRkFDRV9BQ0NFU1NfRU5UUllfU0VUX0FETUlOX1NUQVRVUworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cykKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JTlRFUkZBQ0VfQUNDRVNTX0VOVFJZX1NFVF9BRE1JTl9TVEFUVVMgKi8KIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC0yNTAsOCArMjYwLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdG1wLm5hbWUgPSAoY2hhciAqKW5hbWU7Ci0gICAgcmV0dXJuIENPTlRBSU5FUl9GSU5EKGNvbnRhaW5lci0+bmV4dCwgJnRtcCk7CisgICAgdG1wLm5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIG5hbWUpOworICAgIHJldHVybiAobmV0c25tcF9pbnRlcmZhY2VfZW50cnkqKUNPTlRBSU5FUl9GSU5EKGNvbnRhaW5lci0+bmV4dCwgJnRtcCk7CiB9CiAKIC8qKgpAQCAtMzM3LDYgKzM0Nyw3IEBACiAgICAgZnJlZShlbnRyeSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfTEVHQUNZCiAvKgogICogQmxlY2ggLSBiYWNrd2FyZHMgY29tcGF0aWJsZSBtaWJJSS9pbnRlcmZhY2VzIHN0eWxlIGludGVyZmFjZQogICogZnVuY3Rpb25zLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHVwZGF0ZSBvbGRlciBtb2R1bGVzIHRvIHVzZQpAQCAtMzQ2LDMzICszNTcsMzMgQEAKICAgICAhIGRlZmluZWQoIE5FVFNOTVBfTk9fQkFDS1dBUkRTX0NPTVBBVEFCSUxJVFkgKQogCiBzdGF0aWMgbmV0c25tcF9pdGVyYXRvciAqaXQgPSBOVUxMOwotc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpjID0gTlVMTDsKLXN0YXRpYyBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqZSA9IE5VTEw7CitzdGF0aWMgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3cgPSBOVUxMOwogCiAvKioKLSAqIAorICogU2V0dXAgYW4gaXRlcmF0b3IgZm9yIHNjYW5uaW5nIHRoZSBpbnRlcmZhY2VzIHVzaW5nIHRoZSBjYWNoZWQgZW50cnkKKyAqIGZyb20gaWYtbWliL2lmVGFibGUuCiAgKi8KIHZvaWQKIEludGVyZmFjZV9TY2FuX0luaXQodm9pZCkKIHsKLSAgICAvKgotICAgICAqIGlmVGFibGUgY29udGFpbmVyIHNob3VsZG4ndCBjaGFuZ2UsIHNvIHdlIHNob3VsZG4nIGhhdmUgdG8KLSAgICAgKiByZS1mZXRjaCBpdCBldmVyeSB0aW1lLgotICAgICAqLwotICAgIGlmIChOVUxMICE9IGMpCi0gICAgICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9jb250YWluZXJfZnJlZShjLCAwKTsKLQotICAgIGMgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfY29udGFpbmVyX2xvYWQoTlVMTCwgMCk7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnQgPSBOVUxMOworICAgIG5ldHNubXBfY2FjaGUgKmNhY2hlICAgID0gTlVMTDsgCiAgICAgCi0gICAgaWYgKE5VTEwgIT0gYykgeworICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9maW5kX2J5X29pZChpZlRhYmxlX29pZCwgaWZUYWJsZV9vaWRfc2l6ZSk7CisgICAgaWYgKE5VTEwgIT0gY2FjaGUpIHsKKyAgICAgICAgbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkKGNhY2hlKTsKKyAgICAgICAgY29udCA9IChuZXRzbm1wX2NvbnRhaW5lciopIGNhY2hlLT5tYWdpYzsKKyAgICB9CisgICAgCisgICAgaWYgKE5VTEwgIT0gY29udCkgewogICAgICAgICBpZiAoTlVMTCAhPSBpdCkKICAgICAgICAgICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOwogICAgIAotICAgICAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihjKTsKKyAgICAgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1IoY29udCk7CiAgICAgfQogICAgCiAgICAgaWYgKE5VTEwgIT0gaXQpCi0gICAgICAgIGUgPSBJVEVSQVRPUl9GSVJTVChpdCk7CisgICAgICAgIHJvdyA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKUlURVJBVE9SX0ZJUlNUKGl0KTsKIH0KIAogaW50CkBAIC0zOTQsOSArNDA1LDEyIEBACiBJbnRlcmZhY2VfU2Nhbl9OZXh0SW50KGludCAqaW5kZXgsIGNoYXIgKm5hbWUsIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICoqZW50cnksCiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRjKQogewotICAgIGlmIChOVUxMID09IGUpCi0gICAgICAgIHJldHVybiAwOworICAgIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5KiBlID0gTlVMTDsKIAorICAgIGlmIChOVUxMID09IHJvdykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZSA9IHJvdy0+ZGF0YS5pZmVudHJ5OwogICAgIGlmKGluZGV4KQogICAgICAgICAqaW5kZXggPSBlLT5pbmRleDsKIApAQCAtNDA2LDEzICs0MjAsMTQgQEAKICAgICBpZiAoZW50cnkpCiAgICAgICAgICplbnRyeSA9IGU7CiAKLSAgICBlID0gSVRFUkFUT1JfTkVYVChpdCk7CisgICAgcm93ID0gKGlmVGFibGVfcm93cmVxX2N0eCopIElURVJBVE9SX05FWFQoaXQpOwogCiAgICAgcmV0dXJuIDE7CiB9CiAjZW5kaWYgLyogTkVUU05NUF9OT19CQUNLV0FSRFNfQ09NUEFUQUJJTElUWSAqLworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0xFR0FDWSAqLwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQUNDRVNTX0VOVFJZX1NFVF9BRE1JTl9TVEFUVVMKIC8qKgogICoKICAqIEByZXR2YWwgMCAgIDogc3VjY2VzcwpAQCAtNDQxLDYgKzQ1Niw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQUNDRVNTX0VOVFJZX1NFVF9BRE1JTl9TVEFUVVMgKi8KIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC00NTYsNiArNDcyLDcgQEAKICAgICAgICAgICAgICAgICAgICgoY29uc3QgbmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKikgcmhzKS0+bmFtZSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9BQ0NFU1NfSU5URVJGQUNFX05PQVJDSAogLyoqCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC00NjMsMTMgKzQ4MCwxNCBAQAogewogICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9mcmVlKGVudHJ5KTsKIH0KKyNlbmRpZgogCiAvKioKICAqLwogc3RhdGljIHZvaWQKIF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X3NhdmVfbmFtZShjb25zdCBjaGFyICpuYW1lLCBvaWQgaW5kZXgpCiB7Ci0gICAgb2lkIHRtcDsKKyAgICBpbnQgdG1wOwogCiAgICAgaWYoTlVMTCA9PSBuYW1lKQogICAgICAgICByZXR1cm47CkBAIC00NzcsMTkgKzQ5NSwxNyBAQAogICAgIHRtcCA9IHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoImludGVyZmFjZXMiLCBuYW1lKTsKICAgICBpZiAodG1wID09IFNFX0RORSkgewogICAgICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiaW50ZXJmYWNlcyIsIHN0cmR1cChuYW1lKSwgaW5kZXgpOwotICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTppZkluZGV4IiwgInNhdmVkIGlmSW5kZXggJWQgZm9yICVzXG4iLAorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTppZkluZGV4IiwKKyAgICAgICAgICAgICAgICAgICAgInNhdmVkIGlmSW5kZXggJSIgTkVUU05NUF9QUklvICJ1IGZvciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG5hbWUpKTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICBpZiAoaW5kZXggIT0gdG1wKSB7Ci0gICAgICAgICAgICBzdGF0aWMgaW50IGxvZ2dlZCA9IDA7Ci0gICAgICAgICAgICBpZiAoIWxvZ2dlZCkgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJJZkluZGV4IG9mIGFuIGludGVyZmFjZSBjaGFuZ2VkLiBTdWNoICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2VzIHdpbGwgYXBwZWFyIG11bHRpcGxlIHRpbWVzIGluIElGLU1JQi5cbiIpOwotICAgICAgICAgICAgICAgIGxvZ2dlZCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTppZkluZGV4IiwgImluZGV4ICVkICE9IHRtcCBmb3IgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG5hbWUpKTsKKyAgICAgICAgaWYgKGluZGV4ICE9IChvaWQpdG1wKSB7CisgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJJZkluZGV4IG9mIGFuIGludGVyZmFjZSBjaGFuZ2VkLiBTdWNoICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2VzIHdpbGwgYXBwZWFyIG11bHRpcGxlIHRpbWVzIGluIElGLU1JQi5cbiIpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmlmSW5kZXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4ICUiIE5FVFNOTVBfUFJJbyAidSAhPSB0bXAgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG5hbWUpKTsKICAgICAgICAgfQogfQogCkBAIC01MzIsMzkgKzU0OCw3OCBAQAogICAgICAgICBtZW1jcHkocHJldl92YWxzLT5vbGRfc3RhdHMsICZwcmV2X3ZhbHMtPnN0YXRzLCBzaXplb2YocHJldl92YWxzLT5zdGF0cykpOwogICAgIH0KIAotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWJ5dGVzLAorICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5pYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPmlieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaXVjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ0luT2N0ZXRzIHRvIDY0Yml0c1xuIikpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+bnNfZmxhZ3MgJiBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19DQUxDVUxBVEVfVUNBU1QpIHsKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5pYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaWFsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPmlhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBwYWNrZXQgY291bnQgdG8gNjRiaXRzXG4iKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaXVjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaXVjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+aXVjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ0luVWNhc3RQa3RzIHRvIDY0Yml0c1xuIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLml1Y2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaXVjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5pdWNhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLmltY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENJblVjYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaW1jYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5pbWNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPmltY2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWJjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ0luTXVsdGljYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWJjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5pYmNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPmliY2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ0luQnJvYWRjYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5vYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPm9ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub3VjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ091dE9jdGV0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub3VjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5vdWNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPm91Y2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub21jYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ091dFVjYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub21jYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5vbWNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPm9tY2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub2JjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ091dE11bHRpY2FzdFBrdHMgdG8gNjRiaXRzXG4iKSk7CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm9iY2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMub2JjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5vYmNhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENPdXRCcm9hZGNhc3RQa3RzIHRvIDY0Yml0c1xuIikpOworCiAgICAgLyoKICAgICAgKiBDb3B5IDMyIGJpdCBjb3VudGVycwogICAgICAqLwpAQCAtNTk2LDYgKzY1MSwyMyBAQAogfQogCiAvKioKKyAqIENhbGN1bGF0ZSBzdGF0cworICoKKyAqIEByZXR2YWwgIDAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfY2FsY3VsYXRlX3N0YXRzKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsICJjYWxjdWxhdGVfc3RhdHNcbiIpKTsKKyAgICBpZiAoZW50cnktPm5zX2ZsYWdzICYgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfQ0FMQ1VMQVRFX1VDQVNUKSB7CisgICAgICAgIHU2NFN1YnRyYWN0KCZlbnRyeS0+c3RhdHMuaWFsbCwgJmVudHJ5LT5zdGF0cy5pbWNhc3QsCisgICAgICAgICAgICAgICAgJmVudHJ5LT5zdGF0cy5pdWNhc3QpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoqCiAgKiBjb3B5IGludGVyZmFjZSBlbnRyeSBkYXRhIChhZnRlciBjaGVja2luZyBmb3IgY291bnRlciB3cmFwcykKICAqCiAgKiBAcmV0dmFsIC0yIDogbWFsbG9jIGZhaWxlZApAQCAtNjE3LDYgKzY4OSw3IEBACiAgICAgICogdXBkYXRlIHN0YXRzCiAgICAgICovCiAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X3VwZGF0ZV9zdGF0cyhsaHMsIHJocyk7CisgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X2NhbGN1bGF0ZV9zdGF0cyhsaHMpOwogCiAgICAgLyoKICAgICAgKiB1cGRhdGUgZGF0YQpAQCAtNjI2LDggKzY5OSw3IEBACiAgICAgICAgKDAgPT0gc3RyY21wKGxocy0+ZGVzY3IsIHJocy0+ZGVzY3IpKSkKICAgICAgICAgOwogICAgIGVsc2UgewotICAgICAgICBpZiAoTlVMTCAhPSBsaHMtPmRlc2NyKQotICAgICAgICAgICAgU05NUF9GUkVFKGxocy0+ZGVzY3IpOworICAgICAgICBTTk1QX0ZSRUUobGhzLT5kZXNjcik7CiAgICAgICAgIGlmIChyaHMtPmRlc2NyKSB7CiAgICAgICAgICAgICBsaHMtPmRlc2NyID0gc3RyZHVwKHJocy0+ZGVzY3IpOwogICAgICAgICAgICAgaWYoTlVMTCA9PSBsaHMtPmRlc2NyKQpAQCAtNjU1LDEwICs3MjcsOSBAQAogICAgICAgICBpZihyaHMtPnBhZGRyX2xlbikKICAgICAgICAgICAgIG1lbWNweShsaHMtPnBhZGRyLHJocy0+cGFkZHIscmhzLT5wYWRkcl9sZW4pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChOVUxMICE9IGxocy0+cGFkZHIpCi0gICAgICAgICAgICBTTk1QX0ZSRUUobGhzLT5wYWRkcik7CisgICAgICAgIFNOTVBfRlJFRShsaHMtPnBhZGRyKTsKICAgICAgICAgaWYgKHJocy0+cGFkZHIpIHsKLSAgICAgICAgICAgIGxocy0+cGFkZHIgPSBtYWxsb2MocmhzLT5wYWRkcl9sZW4pOworICAgICAgICAgICAgbGhzLT5wYWRkciA9IChjaGFyKiltYWxsb2MocmhzLT5wYWRkcl9sZW4pOwogICAgICAgICAgICAgaWYoTlVMTCA9PSBsaHMtPnBhZGRyKQogICAgICAgICAgICAgICAgIHJldHVybiAtMjsKICAgICAgICAgICAgIG1lbWNweShsaHMtPnBhZGRyLHJocy0+cGFkZHIscmhzLT5wYWRkcl9sZW4pOwpAQCAtNzk2LDcgKzg2Nyw3IEBACiAgICAgbmV0c25tcF9jb25mX2lmX2xpc3QgICAqaWZfcHRyID0gY29uZl9saXN0LCAqaWZfbmV4dDsKICAgICB3aGlsZSAoaWZfcHRyKSB7CiAgICAgICAgIGlmX25leHQgPSBpZl9wdHItPm5leHQ7Ci0gICAgICAgIGZyZWUoaWZfcHRyLT5uYW1lKTsKKyAgICAgICAgZnJlZShORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIGlmX3B0ci0+bmFtZSkpOwogICAgICAgICBmcmVlKGlmX3B0cik7CiAgICAgICAgIGlmX3B0ciA9IGlmX25leHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCmluZGV4IDI1NmQwNDcuLjM1M2IyNTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAorKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKQEAgLTMyLDEyICszMiwxMyBAQAogCiAjICAgaWYgZGVmaW5lZCggbGludXggKQogCisgICAgY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKICAgICBjb25maWdfcmVxdWlyZShpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4KQogICAgIGNvbmZpZ19yZXF1aXJlKGlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwpCiAKICMgICBlbGlmIGRlZmluZWQoIG9wZW5ic2QzICkgfHwgXAogICAgICAgICAgZGVmaW5lZCggZnJlZWJzZDQgKSB8fCBkZWZpbmVkKCBmcmVlYnNkNSApIHx8IGRlZmluZWQoIGZyZWVic2Q2ICkgfHwgXAotICAgICAgICAgZGVmaW5lZCAoZGFyd2luKSAgICB8fCBkZWZpbmVkKCBkcmFnb25mbHkgKQorICAgICAgICAgZGVmaW5lZCggZGFyd2luICkgICB8fCBkZWZpbmVkKCBkcmFnb25mbHkgKSB8fCBkZWZpbmVkKCBuZXRic2QxICkKIAogICAgIGNvbmZpZ19yZXF1aXJlKGlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsKQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMKaW5kZXggNTcwOGM2NC4uZGIyYzI0NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYwpAQCAtNCw2ICs0LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKICNpbmNsdWRlICJpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oIgpAQCAtMTMsNiArMTQsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgogI2luY2x1ZGUgImlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZV9pb2N0bF9mbGFnc19zZXQsIGludGVyZmFjZV9hbGwpCisKICNpZmRlZiBIQVZFX05FVF9JRl9ICiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjZW5kaWYKQEAgLTEwNyw3ICsxMTAsNyBAQAogICAgICAgICBTTk1QX0ZSRUUoaWZlbnRyeS0+cGFkZHIpOwogICAgIH0KICAgICBpZihOVUxMID09IGlmZW50cnktPnBhZGRyKSAKLSAgICAgICAgaWZlbnRyeS0+cGFkZHIgPSBtYWxsb2MoSUZIV0FERFJMRU4pOworICAgICAgICBpZmVudHJ5LT5wYWRkciA9IChjaGFyKiltYWxsb2MoSUZIV0FERFJMRU4pOwogCiAgICAgaWYoTlVMTCA9PSBpZmVudHJ5LT5wYWRkcikgewogICAgICAgICAgICAgcmMgPSAtNDsKQEAgLTI4Miw2ICsyODUsNyBAQAogICAgIHJldHVybiByYzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9JT0NUTF9GTEFHU19TRVQKIC8qKgogICogaW50ZXJmYWNlIGVudHJ5IGZsYWdzIGlvY3RsIHdyYXBwZXIKICAqCkBAIC0zNDksNiArMzUzLDcgQEAKIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0lPQ1RMX0ZMQUdTX1NFVCAqLwogI2VuZGlmIC8qIFNJT0NHSUZGTEFHUyAqLwogCiAjaWZkZWYgU0lPQ0dJRk1UVQpAQCAtNDc5LDggKzQ4NCw3IEBACiAgICAgICAgICAgICBpZiAoTlVMTCAhPSBwdHIpCiAgICAgICAgICAgICAgICAgKnB0ciA9IDA7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpZl9pbmRleCAhPQotICAgICAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldChzZCwgaWZycC0+aWZyX25hbWUpKQorICAgICAgICAgICAgaWYgKGlmX2luZGV4ICE9IChpbnQpbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0KHNkLCBpZnJwLT5pZnJfbmFtZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jCmluZGV4IDk0YmQ5ODMuLmYxOTZmYzggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMKQEAgLTQsMTQgKzQsNTYgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZmRfZXZlbnRfbWFuYWdlcikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRlbGV0ZV9wcmVmaXhfaW5mbykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNyZWF0ZV9wcmVmaXhfaW5mbykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnRlcmZhY2VfYXJjaF9zZXRfYWRtaW5fc3RhdHVzLCBpbnRlcmZhY2VfYWxsKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW50ZXJmYWNlX2lvY3RsX2ZsYWdzX3NldCkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTICovCisKKyNpZmRlZiBIQVZFX1BDSV9MT09LVVBfTkFNRQorI2luY2x1ZGUgPHBjaS9wY2kuaD4KKyNpbmNsdWRlIDxzZXRqbXAuaD4KK3N0YXRpYyBzdHJ1Y3QgcGNpX2FjY2VzcyAqcGNpX2FjY2VzczsKKworLyogQXZvaWQgbGV0dGluZyBsaWJwY2kgY2FsbCBleGl0KDEpIHdoZW4gbm8gUENJIGJ1cyBpcyBhdmFpbGFibGUuICovCitzdGF0aWMgaW50IGRvX2xvbmdqbXAgPTA7CitzdGF0aWMgam1wX2J1ZiBlcnJfYnVmOworc3RhdGljIHZvaWQKK25ldHNubXBfcGNpX2Vycm9yKGNoYXIgKm1zZywgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICBjaGFyICpidWY7CisgICAgaW50IGJ1ZmxlbjsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIG1zZyk7CisgICAgYnVmbGVuID0gc3RybGVuKCJwY2lsaWI6ICIpK3N0cmxlbihtc2cpKzI7CisgICAgYnVmID0gbWFsbG9jKGJ1Zmxlbik7CisgICAgc25wcmludGYoYnVmLCBidWZsZW4sICJwY2lsaWI6ICVzXG4iLCBtc2cpOworICAgIHNubXBfdmxvZyhMT0dfRVJSLCBidWYsIGFyZ3MpOworICAgIGZyZWUoYnVmKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgaWYgKGRvX2xvbmdqbXApCisJbG9uZ2ptcChlcnJfYnVmLCAxKTsKKyAgICBlbHNlCisJZXhpdCgxKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2lmbmRlZiBIQVZFX1BDSV9MT09LVVBfTkFNRQogdHlwZWRlZiBfX3U2NCB1NjQ7ICAgICAgICAgLyogaGFjaywgc28gd2UgbWF5IGluY2x1ZGUga2VybmVsJ3MgZXRodG9vbC5oICovCiB0eXBlZGVmIF9fdTMyIHUzMjsgICAgICAgICAvKiBkaXR0byAqLwogdHlwZWRlZiBfX3UxNiB1MTY7ICAgICAgICAgLyogZGl0dG8gKi8KIHR5cGVkZWYgX191OCB1ODsgICAgICAgICAgIC8qIGRpdHRvICovCisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNlbmRpZiAvKiBIQVZFX0xJTlVYX0VUSFRPT0xfSCAqLwogCkBAIC0yOSwxOCArNzEsMzcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KICNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgImludGVyZmFjZV9pb2N0bC5oIgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogCiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKICNpZm5kZWYgSUZfTkFNRVNJWkUKICNkZWZpbmUgSUZfTkFNRVNJWkUgMTYKICNlbmRpZgogCisjaWZuZGVmIFNJT0NHTUlJUEhZCisjZGVmaW5lIFNJT0NHTUlJUEhZIDB4ODk0NworI2VuZGlmCisKKyNpZm5kZWYgU0lPQ0dNSUlSRUcKKyNkZWZpbmUgU0lPQ0dNSUlSRUcgMHg4OTQ4CisjZW5kaWYKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfUlRORVRMSU5LX0gpCisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaWZkZWYgUlRNR1JQX0lQVjZfUFJFRklYCisjZGVmaW5lIFNVUFBPUlRfUFJFRklYX0ZMQUdTIDEKKyNlbmRpZiAgLyogUlRNR1JQX0lQVjZfUFJFRklYICovCisjZW5kaWYgIC8qIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggKi8KKyNlbmRpZiAgLyogTkVUU05NUF9FTkFCTEVfSVBWNiAqLwogdW5zaWduZWQgbG9uZyBsb25nCiBuZXRzbm1wX2xpbnV4X2ludGVyZmFjZV9nZXRfaWZfc3BlZWQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVsdHNwZWVkKTsKQEAgLTYwLDYgKzEyMSwxNiBAQAogI2RlZmluZSBQUk9DX1NZU19ORVRfSVBWeF9CQVNFX1JFQUNIQUJMRV9USU1FICIvcHJvYy9zeXMvbmV0L2lwdiVkL25laWdoLyVzL2Jhc2VfcmVhY2hhYmxlX3RpbWUiCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvY19zeXNfYmFzZXJlYWNoYWJsZV90aW1lOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGJhc2VyZWFjaGFibGVfdGltZV9tcyA9IDA7CisjaWZkZWYgU1VQUE9SVF9QUkVGSVhfRkxBR1MKK3ByZWZpeF9jYnggKnByZWZpeF9oZWFkX2xpc3QgPSBOVUxMOworbmV0c25tcF9wcmVmaXhfbGlzdGVuX2luZm8gbGlzdF9pbmZvOworI2RlZmluZSBJRl9QUkVGSVhfT05MSU5LICAgICAgICAweDAxCisjZGVmaW5lIElGX1BSRUZJWF9BVVRPQ09ORiAgICAgIDB4MDIKKyAKK2ludCBuZXRzbm1wX3ByZWZpeF9saXN0ZW4odm9pZCk7CisjZW5kaWYKKworCiB2b2lkCiBuZXRzbm1wX2FyY2hfaW50ZXJmYWNlX2luaXQodm9pZCkKIHsKQEAgLTkyLDYgKzE2MywzMSBAQAogICAgIGVsc2UgewogICAgICAgICBwcm9jX3N5c19iYXNlcmVhY2hhYmxlX3RpbWUgPSBQUk9DX1NZU19ORVRfSVBWeF9CQVNFX1JFQUNIQUJMRV9USU1FOwogICAgIH0KKworI2lmZGVmIFNVUFBPUlRfUFJFRklYX0ZMQUdTCisgICAgbGlzdF9pbmZvLmxpc3RfaGVhZCA9ICZwcmVmaXhfaGVhZF9saXN0OworICAgIG5ldHNubXBfcHJlZml4X2xpc3RlbigpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BDSV9MT09LVVBfTkFNRQorICAgIHBjaV9hY2Nlc3MgPSBwY2lfYWxsb2MoKTsKKyAgICBpZiAoIXBjaV9hY2Nlc3MpIHsKKwlzbm1wX2xvZyhMT0dfRVJSLCAicGNpbGliOiBwY2lfYWxsb2MgZmFpbGVkXG4iKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgcGNpX2FjY2Vzcy0+ZXJyb3IgPSBuZXRzbm1wX3BjaV9lcnJvcjsKKworICAgIGRvX2xvbmdqbXAgPSAxOworICAgIGlmIChzZXRqbXAoZXJyX2J1ZikpIHsKKyAgICAgICAgcGNpX2NsZWFudXAocGNpX2FjY2Vzcyk7CisJc25tcF9sb2coTE9HX0VSUiwgInBjaWxpYjogcGNpX2luaXQgZmFpbGVkXG4iKTsKKyAgICAgICAgcGNpX2FjY2VzcyA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHBjaV9hY2Nlc3MpCisJcGNpX2luaXQocGNpX2FjY2Vzcyk7CisgICAgZG9fbG9uZ2ptcCA9IDA7CisjZW5kaWYKIH0KIAogLyoKQEAgLTEyOCwxNCArMjI0LDYgQEAKIAogICAgICpmbGFncyAmPSB+TkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0lQVjY7CiAKLSNpZm5kZWYgU0lPQ0dNSUlQSFkKLSNkZWZpbmUgU0lPQ0dNSUlQSFkgMHg4OTQ3Ci0jZW5kaWYKLQotI2lmbmRlZiBTSU9DR01JSVJFRwotI2RlZmluZSBTSU9DR01JSVJFRyAweDg5NDgKLSNlbmRpZgotCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgogICAgIC8qCiAgICAgICogZ2V0IGlwdjYgYWRkcmVzc2VzCkBAIC0yMjksNiArMzE3LDY5IEBACiAgICAgfQogfQogCisjaWZkZWYgSEFWRV9QQ0lfTE9PS1VQX05BTUUKKworLyogR2V0IHZhbHVlIGZyb20gc3lzZnMgZmlsZSAqLworc3RhdGljIGludCBzeXNmc19nZXRfaWQoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgKmlkKQoreworICAgIEZJTEUgKmZpbjsKKyAgICBpbnQgbjsKKworICAgIGlmICghKGZpbiA9IGZvcGVuKHBhdGgsICJyIikpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBvcGVuICVzXG4iLCBwYXRoKSk7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgbiA9IGZzY2FuZihmaW4sICIlaHgiLCBpZCk7CisgICAgZmNsb3NlKGZpbik7CisKKyAgICByZXR1cm4gbiA9PSAxOworfQorCisvKiBHZXQgaW50ZXJmYWNlIGRlc2NyaXB0aW9uIGZvciBQQ0kgZGV2aWNlCisgKiBieSB1c2luZyBzeXNmcyB0byBmaW5kIHZlbmRvciBhbmQgZGV2aWNlCisgKiB0aGVuIGxvb2t1cCBuYW1lICgtbHBjaSkKKyAqCisgKiBGb3Igc29mdHdhcmUgaW50ZXJmYWNlcyB0aGVyZSBpcyBubyBQQ0kgaW5mb3JtYXRpb24KKyAqIHNvIGRlc2NyaXB0aW9uIHdpbGwgbm90IGJlIHNldC4KKyAqLworc3RhdGljIHZvaWQKK19hcmNoX2ludGVyZmFjZV9kZXNjcmlwdGlvbl9nZXQobmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKmVudHJ5KQoreworICAgIGNvbnN0IGNoYXIgKmRlc2NyOworICAgIGNoYXIgYnVmWzI1Nl07CisgICAgdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLCBkZXZpY2VfaWQ7CisKKyAgICBpZiAoIXBjaV9hY2Nlc3MpCisJcmV0dXJuOworCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKwkgICAgICIvc3lzL2NsYXNzL25ldC8lcy9kZXZpY2UvdmVuZG9yIiwgZW50cnktPm5hbWUpOworCisgICAgaWYgKCFzeXNmc19nZXRfaWQoYnVmLCAmdmVuZG9yX2lkKSkKKwlyZXR1cm47CisKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorCSAgICAgIi9zeXMvY2xhc3MvbmV0LyVzL2RldmljZS9kZXZpY2UiLCBlbnRyeS0+bmFtZSk7CisKKyAgICBpZiAoIXN5c2ZzX2dldF9pZChidWYsICZkZXZpY2VfaWQpKQorCXJldHVybjsKKworICAgIGRlc2NyID0gcGNpX2xvb2t1cF9uYW1lKHBjaV9hY2Nlc3MsIGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQkgICAgUENJX0xPT0tVUF9WRU5ET1IgfCBQQ0lfTE9PS1VQX0RFVklDRSwKKwkJCSAgICB2ZW5kb3JfaWQsIGRldmljZV9pZCwgMCwgMCk7CisgICAgaWYgKGRlc2NyKSB7CisJZnJlZShlbnRyeS0+ZGVzY3IpOworCWVudHJ5LT5kZXNjciA9IHN0cmR1cChkZXNjcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHBjaV9sb29rdXBfbmFtZSB2ZW5kb3I9JSNoeCBkZXZpY2U9JSNoeFxuIiwKKwkJICAgIHZlbmRvcl9pZCwgZGV2aWNlX2lkKSk7CisgICAgfQorfQorI2VuZGlmCisKIAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKIC8qKgpAQCAtNDAyLDE2ICs1NTMsMTUgQEAKICAgICAgKiBzdWJ0cmFjdCBvdXQgbXVsdGljYXN0IHBhY2tldHMgZnJvbSByZWNfcGt0IGJlZm9yZQogICAgICAqIHdlIHN0b3JlIGl0IGFzIHVuaWNhc3QgY291bnRlci4KICAgICAgKi8KLSAgICByZWNfcGt0IC09IHJlY19tY2FzdDsKLQorICAgIGVudHJ5LT5uc19mbGFncyB8PSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19DQUxDVUxBVEVfVUNBU1Q7CiAgICAgZW50cnktPnN0YXRzLmlieXRlcy5sb3cgPSByZWNfb2N0ICYgMHhmZmZmZmZmZjsKLSAgICBlbnRyeS0+c3RhdHMuaXVjYXN0LmxvdyA9IHJlY19wa3QgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5pYWxsLmxvdyA9IHJlY19wa3QgJiAweGZmZmZmZmZmOwogICAgIGVudHJ5LT5zdGF0cy5pbWNhc3QubG93ID0gcmVjX21jYXN0ICYgMHhmZmZmZmZmZjsKICAgICBlbnRyeS0+c3RhdHMub2J5dGVzLmxvdyA9IHNuZF9vY3QgJiAweGZmZmZmZmZmOwogICAgIGVudHJ5LT5zdGF0cy5vdWNhc3QubG93ID0gc25kX3BrdCAmIDB4ZmZmZmZmZmY7CiAjaWZkZWYgU0NOdU1BWCAgIC8qIFhYWCAtIHNob3VsZCBiZSBmbGFnIGZvciA2NC1iaXQgdmFyaWFibGVzICovCiAgICAgZW50cnktPnN0YXRzLmlieXRlcy5oaWdoID0gcmVjX29jdCA+PiAzMjsKLSAgICBlbnRyeS0+c3RhdHMuaXVjYXN0LmhpZ2ggPSByZWNfcGt0ID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5pYWxsLmhpZ2ggPSByZWNfcGt0ID4+IDMyOwogICAgIGVudHJ5LT5zdGF0cy5pbWNhc3QuaGlnaCA9IHJlY19tY2FzdCA+PiAzMjsKICAgICBlbnRyeS0+c3RhdHMub2J5dGVzLmhpZ2ggPSBzbmRfb2N0ID4+IDMyOwogICAgIGVudHJ5LT5zdGF0cy5vdWNhc3QuaGlnaCA9IHNuZF9wa3QgPj4gMzI7CkBAIC00NTUsNyArNjA1LDcgQEAKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWRkcl9jb250YWluZXI7CiAjZW5kaWYKIAotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwgImxvYWQgKGZsYWdzICVwKVxuIiwKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsICJsb2FkIChmbGFncyAleClcbiIsCiAgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOwogCiAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CkBAIC00NjYsNyArNjE2LDcgQEAKICAgICBpZiAoIShkZXZpbiA9IGZvcGVuKCIvcHJvYy9uZXQvZGV2IiwgInIiKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAogICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGxvYWQgSW50ZXJmYWNlIFRhYmxlIChsaW51eDEpXG4iKSk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvZGV2IC4uLlxuIik7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9kZXYgLi4uXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKQEAgLTU4Nyw5ICs3MzcsOSBAQAogICAgICAgICB9CiAgICAgICAgIGVudHJ5LT5uc19mbGFncyA9IGZsYWdzOyAvKiBpbml0aWFsIGZsYWdzOyB3ZSdsbCBzZXQgbW9yZSBsYXRlciAqLwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIHh4eC1ya3M6IGdldCBkZXNjciBieSBsaW5raW5nIG1lbSBmcm9tIC9wcm9jL3BjaSBhbmQgL3Byb2MvaW9tZW0KLSAgICAgICAgICovCisjaWZkZWYgSEFWRV9QQ0lfTE9PS1VQX05BTUUKKwlfYXJjaF9pbnRlcmZhY2VfZGVzY3JpcHRpb25fZ2V0KGVudHJ5KTsKKyNlbmRpZgogCiAKICAgICAgICAgLyoKQEAgLTYyMiw3ICs3NzIsNyBAQAogICAgICAgICAgICAgICAgIHtJQU5BSUZUWVBFX0JBU0lDSVNETiwgImlwcHAifSwKICAgICAgICAgICAgICAgICB7SUFOQUlGVFlQRV9QUk9QVklSVFVBTCwgImJvbmQifSwgLyogQm9uZGluZyBkcml2ZXIgZmluZCBmYXN0ZXN0IHNsYXZlICovCiAgICAgICAgICAgICAgICAge0lBTkFJRlRZUEVfUFJPUFZJUlRVQUwsICJ2YWQifSwgIC8qIEFOUyBkcml2ZXIgLSA/c3BlZWQ/ICovCi0gICAgICAgICAgICAgICAgezAsIDB9ICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIGxpc3QgKi8KKyAgICAgICAgICAgICAgICB7MCwgTlVMTH0gICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgbGlzdCAqLwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGxlbjsKQEAgLTYzOSw2ICs3ODksMzYgQEAKICAgICAgICAgICAgICAgICBlbnRyeS0+dHlwZSA9IElBTkFJRlRZUEVfT1RIRVI7CiAgICAgICAgIH0KIAorICAgICAgICAvKgorICAgICAgICAgKiBpbnRlcmZhY2UgaWRlbnRpZmllciBpcyBzcGVjaWZpZWQgYmFzZWQgb24gcGh5c2FkZHIgYW5kIHR5cGUKKyAgICAgICAgICovCisgICAgICAgIHN3aXRjaCAoZW50cnktPnR5cGUpIHsKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0VUSEVSTkVUQ1NNQUNEOgorICAgICAgICBjYXNlIElBTkFJRlRZUEVfRVRIRVJORVQzTUJJVDoKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0ZBU1RFVEhFUjoKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0ZBU1RFVEhFUkZYOgorICAgICAgICBjYXNlIElBTkFJRlRZUEVfR0lHQUJJVEVUSEVSTkVUOgorICAgICAgICBjYXNlIElBTkFJRlRZUEVfRkRESToKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0lTTzg4MDI1VE9LRU5SSU5HOgorICAgICAgICAgICAgaWYgKE5VTEwgIT0gZW50cnktPnBhZGRyICYmIEVUSF9BTEVOICE9IGVudHJ5LT5wYWRkcl9sZW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGVudHJ5LT52Nl9pZl9pZF9sZW4gPSBlbnRyeS0+cGFkZHJfbGVuICsgMjsKKyAgICAgICAgICAgIG1lbWNweShlbnRyeS0+djZfaWZfaWQsIGVudHJ5LT5wYWRkciwgMyk7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPnY2X2lmX2lkICsgNSwgZW50cnktPnBhZGRyICsgMywgMyk7CisgICAgICAgICAgICBlbnRyeS0+djZfaWZfaWRbMF0gXj0gMjsKKyAgICAgICAgICAgIGVudHJ5LT52Nl9pZl9pZFszXSA9IDB4RkY7CisgICAgICAgICAgICBlbnRyeS0+djZfaWZfaWRbNF0gPSAweEZFOworCisgICAgICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX1Y2X0lGSUQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElBTkFJRlRZUEVfU09GVFdBUkVMT09QQkFDSzoKKyAgICAgICAgICAgIGVudHJ5LT52Nl9pZl9pZF9sZW4gPSAwOworICAgICAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19WNl9JRklEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoSUFOQUlGVFlQRV9FVEhFUk5FVENTTUFDRCA9PSBlbnRyeS0+dHlwZSkgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNwZWVkOwogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRzcGVlZCA9IE5PTUlOQUxfTElOS19TUEVFRDsKQEAgLTcyMyw2ICs5MDMsNyBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUwogaW50CiBuZXRzbm1wX2FyY2hfc2V0X2FkbWluX3N0YXR1cyhuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqIGVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlmQWRtaW5TdGF0dXNfdmFsKQpAQCAtNzM5LDYgKzkyMCw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pb2N0bF9mbGFnc19zZXQoLTEsIGVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElGRl9VUCwgYW5kX2NvbXBsZW1lbnQpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUyAqLwogCiAjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKIC8qKgpAQCAtODc4LDMgKzEwNjAsMTkwIEBACiAgICAgfQogICAgIHJldHVybiByZXRzcGVlZDsKIH0KKyNpZmRlZiBTVVBQT1JUX1BSRUZJWF9GTEFHUwordm9pZCBuZXRzbm1wX3ByZWZpeF9wcm9jZXNzKGludCBmZCwgdm9pZCAqZGF0YSk7CisKKy8qIE9wZW4gbmV0bGluayBzb2NrZXQgdG8gd2F0Y2ggbmV3IGlwdjYgYWRkcmVzc2VzIGFuZCBwcmVmaXhlcy4gKi8KK2ludCBuZXRzbm1wX3ByZWZpeF9saXN0ZW4oKQoreworICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgc3RydWN0IG5sbXNnaGRyIG47CisgICAgICAgICAgICAgICAgc3RydWN0IGlmaW5mb21zZyByOworICAgICAgICAgICAgICAgIGNoYXIgICBidWZbMTAyNF07CisgICAgfSByZXE7CisKKyAgICBzdHJ1Y3QgcnRhdHRyICAgICAgKnJ0YTsKKyAgICBpbnQgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIHN0cnVjdCBzb2NrYWRkcl9ubCBsb2NhbGFkZHJpbmZvOworICAgIHVuc2lnbmVkICAgICAgICAgICBncm91cHMgPSAwOworCisgICAgaW50IGZkID0gc29ja2V0KFBGX05FVExJTkssIFNPQ0tfREdSQU0sIE5FVExJTktfUk9VVEUpOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5ldHNubXBfcHJlZml4X2xpc3RlbjogQ2Fubm90IGNyZWF0ZSBzb2NrZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1lbXNldCgmbG9jYWxhZGRyaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9ubCkpOworCisgICAgZ3JvdXBzIHw9IFJUTUdSUF9JUFY2X0lGQUREUjsKKyAgICBncm91cHMgfD0gUlRNR1JQX0lQVjZfUFJFRklYOworICAgIGxvY2FsYWRkcmluZm8ubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKKyAgICBsb2NhbGFkZHJpbmZvLm5sX2dyb3VwcyA9IGdyb3VwczsKKworICAgIGlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyKikmbG9jYWxhZGRyaW5mbywgc2l6ZW9mKGxvY2FsYWRkcmluZm8pKSA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibmV0c25tcF9wcmVmaXhfbGlzdGVuOiBCaW5kIGZhaWxlZC5cbiIpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworICAgIHJlcS5uLm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHJ0Z2VubXNnKSk7CisgICAgcmVxLm4ubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfUk9PVDsKKyAgICByZXEubi5ubG1zZ190eXBlID0gUlRNX0dFVExJTks7CisgICAgcmVxLnIuaWZpX2ZhbWlseSA9IEFGX0lORVQ2OworICAgIHJ0YSA9IChzdHJ1Y3QgcnRhdHRyICopKCgoY2hhciAqKSZyZXEpICsgTkxNU0dfQUxJR04ocmVxLm4ubmxtc2dfbGVuKSk7CisgICAgcnRhLT5ydGFfbGVuID0gUlRBX0xFTkdUSCgxNik7CisKKyAgICBzdGF0dXMgPSBzZW5kKGZkLCAmcmVxLCByZXEubi5ubG1zZ19sZW4sIDApOworICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfcHJlZml4X2xpc3Rlbjogc2VuZCBmYWlsZWRcbiIpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAocmVnaXN0ZXJfcmVhZGZkKGZkLCBuZXRzbm1wX3ByZWZpeF9wcm9jZXNzLCBOVUxMKSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfcHJlZml4X2xpc3RlbjogZXJyb3IgcmVnaXN0ZXJpbmcgbmV0bGluayBzb2NrZXRcbiIpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFByb2Nlc3Mgb25lIGluY29taW5nIG5ldGxpbmsgcGFja2V0cy4KKyAqIFJUTV9ORVdBRERSIGFuZCBSVE1fTkVXUFJFRklYIHVzdWFsbHkgYXJyaXZlIGluIHNlcGFyYXRlIHBhY2tldHMKKyAqIC0+IGluZm9ybWF0aW9uIGZyb20gdGhlc2UgcGFja2V0cyBtdXN0IGJlIHN0b3JlZCBsb2NhbGx5IGFuZAorICogbmV3IHByZWZpeCBpcyBhZGRlZCB3aGVuIGluZm9ybWF0aW9uIGZyb20gYm90aCBwYWNrZXRzIGlzIGNvbXBsZXRlLgorICovCit2b2lkIG5ldHNubXBfcHJlZml4X3Byb2Nlc3MoaW50IGZkLCB2b2lkICpkYXRhKQoreworICAgIGludCAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgY2hhciAgICAgICAgICAgICAgIGJ1ZlsxNjM4NF07CisgICAgc3RydWN0IG5sbXNnaGRyICAgICpubG1wOworICAgIHN0cnVjdCBydGF0dHIgICAgICAqcnRhdHA7CisgICAgc3RydWN0IGlmYWRkcm1zZyAgICppZmE7CisgICAgc3RydWN0IHByZWZpeG1zZyAgICpwcmVmaXg7CisgICAgc3RydWN0IGluNl9hZGRyICAgICppbjZwOworCisgICAgLyogdGhlc2UgdmFsdWVzIG11c3QgcGVyc2lzdCBiZXR3ZWVuIGNhbGxzICovCisgICAgc3RhdGljIGNoYXIgICAgICAgICAgICAgICBpbjZwQWRkcls0MF07CisgICAgc3RhdGljIGludCAgICAgICAgICAgICAgICBoYXZlX2FkZHIgPSAwLGhhdmVfcHJlZml4ID0gMDsKKyAgICBzdGF0aWMgaW50ICAgICAgICAgICAgICAgIG9ubGluayA9IDIsYXV0b25vbW91cyA9IDI7IC8qQXNzdW1lIGFzIGZhbHNlKi8KKworICAgIGludCAgICAgICAgICAgICAgICBpcmV0OworICAgIHByZWZpeF9jYnggICAgICAgICAqbmV3OworICAgIGludCAgICAgICAgICAgICAgICBsZW4sIHJlcV9sZW4sIGxlbmd0aDsgCisKKyAgICBzdGF0dXMgPSByZWN2KGZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfcHJlZml4X2xpc3RlbjogUmVjZWl2ZSBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKHN0YXR1cyA9PSAwKXsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIkVuZCBvZiBGaWxlXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IobmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7IHN0YXR1cyA+IHNpemVvZigqbmxtcCk7KXsKKyAgICAgICAgbGVuID0gbmxtcC0+bmxtc2dfbGVuOworICAgICAgICByZXFfbGVuID0gbGVuIC0gc2l6ZW9mKCpubG1wKTsKKworICAgICAgICBpZiAocmVxX2xlbiA8IDAgfHwgbGVuID4gc3RhdHVzKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX3ByZWZpeF9saXN0ZW46IEVycm9yIGluIGxlbmd0aC5cbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFOTE1TR19PSyhubG1wLCBzdGF0dXMpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpwcmVmaXgiLCAiTkxNU0cgbm90IE9LXG4iKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChubG1wLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSIHx8IG5sbXAtPm5sbXNnX3R5cGUgPT0gUlRNX0RFTEFERFIpIHsKKyAgICAgICAgICAgIGlmYSA9IE5MTVNHX0RBVEEobmxtcCk7CisgICAgICAgICAgICBsZW5ndGggPSBubG1wLT5ubG1zZ19sZW47CisgICAgICAgICAgICBsZW5ndGggLT0gTkxNU0dfTEVOR1RIKHNpemVvZigqaWZhKSk7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIndyb25nIG5sbXNnIGxlbmd0aCAlZFxuIiwgbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCFpZmEtPmlmYV9mbGFncykgeworICAgICAgICAgICAgICAgIHJ0YXRwID0gSUZBX1JUQShpZmEpOworICAgICAgICAgICAgICAgIHdoaWxlIChSVEFfT0socnRhdHAsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ0YXRwLT5ydGFfdHlwZSA9PSBJRkFfQUREUkVTUyl7CisgICAgICAgICAgICAgICAgICAgICAgICBpbjZwID0gKHN0cnVjdCBpbjZfYWRkciAqKSBSVEFfREFUQShydGF0cCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihubG1wLT5ubG1zZ190eXBlID09IFJUTV9ERUxBRERSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25wcmludGYoaW42cEFkZHIsIHNpemVvZihpbjZwQWRkciksICIlMDR4JTA0eCUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCIsIE5JUDYoKmluNnApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlX2FkZHIgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25wcmludGYoaW42cEFkZHIsIHNpemVvZihpbjZwQWRkciksICIlMDR4JTA0eCUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCIsIE5JUDYoKmluNnApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlX2FkZHIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJ0YXRwID0gUlRBX05FWFQocnRhdHAsbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihubG1wLT5ubG1zZ190eXBlID09IFJUTV9ORVdQUkVGSVgpIHsKKyAgICAgICAgICAgIHByZWZpeCA9IE5MTVNHX0RBVEEobmxtcCk7CisgICAgICAgICAgICBsZW5ndGggPSBubG1wLT5ubG1zZ19sZW47CisgICAgICAgICAgICBsZW5ndGggLT0gTkxNU0dfTEVOR1RIKHNpemVvZigqcHJlZml4KSk7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIndyb25nIG5sbXNnIGxlbmd0aCAlZFxuIiwgbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYXZlX3ByZWZpeCA9IDE7CisgICAgICAgICAgICBpZiAocHJlZml4LT5wcmVmaXhfZmxhZ3MgJiBJRl9QUkVGSVhfT05MSU5LKSB7CisgICAgICAgICAgICAgICAgb25saW5rID0gMTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJlZml4LT5wcmVmaXhfZmxhZ3MgJiBJRl9QUkVGSVhfQVVUT0NPTkYpIHsKKyAgICAgICAgICAgICAgICBhdXRvbm9tb3VzID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgLT0gTkxNU0dfQUxJR04obGVuKTsKKyAgICAgICAgbmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIqKSgoY2hhciopbmxtcCArIE5MTVNHX0FMSUdOKGxlbikpOworICAgIH0KKworICAgIGlmKChoYXZlX2FkZHIgPT0gMSkgJiYgKGhhdmVfcHJlZml4ID09IDEpKXsKKyAgICAgICAgaWYoIShuZXcgPSBuZXRfc25tcF9jcmVhdGVfcHJlZml4X2luZm8gKG9ubGluaywgYXV0b25vbW91cywgaW42cEFkZHIpKSkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJVbmFibGUgdG8gY3JlYXRlIHByZWZpeCBpbmZvXG4iKSk7CisgICAgICAgIGVsc2UgeworCisgICAgICAgICAgICBpcmV0ID0gbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyAobGlzdF9pbmZvLmxpc3RfaGVhZCwgbmV3LCAwKTsKKyAgICAgICAgICAgIGlmKGlyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIlVuYWJsZSB0byBhZGQvdXBkYXRlIHByZWZpeCBpbmZvXG4iKSk7CisgICAgICAgICAgICAgICAgZnJlZShuZXcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoaXJldCA9PSAyKSAvKk9ubHkgd2hlbiBlbnJ0eSBhbHJlYWR5IGV4aXN0cyBhbmQgd2UgYXJlIG9ubHkgdXBkYXRpbmcqLworICAgICAgICAgICAgICAgIGZyZWUobmV3KTsKKyAgICAgICAgfQorICAgICAgICBoYXZlX2FkZHIgPSBoYXZlX3ByZWZpeCA9IDA7CisgICAgICAgIG9ubGluayA9IGF1dG9ub21vdXMgPSAyOyAvKlNldCB0byBkZWZhdWx0cyBhZ2FpbiovCisgICAgfSBlbHNlIGlmIChoYXZlX2FkZHIgPT0gLTEpIHsKKyAgICAgICAgaXJldCA9IG5ldF9zbm1wX2RlbGV0ZV9wcmVmaXhfaW5mbyAobGlzdF9pbmZvLmxpc3RfaGVhZCwgaW42cEFkZHIpOworICAgICAgICBpZihpcmV0IDwgMCkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJVbmFibGUgdG8gZGVsZXRlIHRoZSBwcmVmaXggaW5mb1xuIikpOworICAgICAgICAgICAgaWYoIWlyZXQpCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIlVuYWJsZSB0byBmaW5kIHRoZSBub2RlIHRvIGRlbGV0ZVxuIikpOworICAgICAgICAgICAgaGF2ZV9hZGRyID0gMDsKKyAgICB9Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQwZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMKQEAgLTAsMCArMSw0MDcgQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZCQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKyNpbmNsdWRlICJpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oIgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cywgaW50ZXJmYWNlX2FsbCkKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZWxzZQorI2Vycm9yICJsaW51eCBzaG91bGQgaGF2ZSBzeXMvaW9jdGwgaGVhZGVyIgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgorI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPgorCisjZGVmaW5lIHN0YXJ0dGltZSAoKihjb25zdCBzdHJ1Y3QgdGltZXZhbCopbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCkpCisKK2ludAorbmV0c25tcF9vcGVuYnNkX2ludGVyZmFjZV9nZXRfaWZfc3BlZWQoY2hhciAqbmFtZSwgdV9pbnQgKnNwZWVkLCB1X2ludCAqc3BlZWRfaGlnaCk7CisKK3ZvaWQKK25ldHNubXBfYXJjaF9pbnRlcmZhY2VfaW5pdCh2b2lkKQoreworICAgIC8qCisgICAgICogbm90aGluZyB0byBkbworICAgICAqLworfQorCisvKgorICogZmluZCB0aGUgaWZJbmRleCBmb3IgYW4gaW50ZXJmYWNlIG5hbWUKKyAqCisgKiBAcmV0dmFsIDAgOiBubyBpbmRleCBmb3VuZAorICogQHJldHZhbCA+MDogaWZJbmRleCBmb3IgaW50ZXJmYWNlCisgKi8KK29pZAorbmV0c25tcF9hcmNoX2ludGVyZmFjZV9pbmRleF9maW5kKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgcmV0dXJuIGlmX25hbWV0b2luZGV4KG5hbWUpOworfQorCisvKiBzYV9sZW4gcm91bmR1cCBtYWNyby4gKi8KKyNkZWZpbmUgUk9VTkRVUChhKSBcCisgICgoYSkgPiAwID8gKDEgKyAoKChhKSAtIDEpIHwgKHNpemVvZihsb25nKSAtIDEpKSkgOiBzaXplb2YobG9uZykpCisKKy8qCisgKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQKKyAqIEByZXR2YWwgLTIgY291bGQgbm90IGdldCBpbnRlcmZhY2UgaW5mbworICogQHJldHZhbCAtMyBjb3VsZCBub3QgY3JlYXRlIGVudHJ5IChwcm9iYWJseSBtYWxsb2MpCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2ludGVyZmFjZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgdV9jaGFyICppZl9saXN0ID0gTlVMTCwgKmNwOworICAgIHNpemVfdCBpZl9saXN0X3NpemUgPSAwOworICAgIHN0cnVjdCBpZl9tc2doZHIgKmlmcDsKKyAgICBpbnQgc3lzY3RsX29pZFtdID0geyBDVExfTkVULCBQRl9ST1VURSwgMCwgMCwgTkVUX1JUX0lGTElTVCwgMCB9OworICAgIHN0cnVjdCBpZmFfbXNnaGRyICppZmE7CisgICAgc3RydWN0IHNvY2thZGRyICphOworICAgIHN0cnVjdCBzb2NrYWRkcl9kbCAqYWRsOworICAgIGludCBhbWFzazsKKyAgICBjaGFyICppZl9uYW1lOworICAgIGludCBmbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAibG9hZCAoZmxhZ3MgJXApXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGludGVyZmFjZVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKHN5c2N0bF9vaWQsIHNpemVvZihzeXNjdGxfb2lkKSAvIHNpemVvZihpbnQpLCAwLCAmaWZfbGlzdF9zaXplLCAwLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpbnRlcmZhY2UgaW5mbyAoc2l6ZSlcbiIpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgaWZfbGlzdCA9ICh1X2NoYXIqKW1hbGxvYyhpZl9saXN0X3NpemUpOworICAgIGlmIChpZl9saXN0ID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVyZmFjZSBpbmZvICgldSBieXRlcylcbiIsIGlmX2xpc3Rfc2l6ZSk7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0ZWQgJXUgYnl0ZXMgZm9yIGlmX2xpc3RcbiIsIGlmX2xpc3Rfc2l6ZSkpOworICAgIH0KKworICAgIGlmIChzeXNjdGwoc3lzY3RsX29pZCwgc2l6ZW9mKHN5c2N0bF9vaWQpIC8gc2l6ZW9mKGludCksIGlmX2xpc3QsICZpZl9saXN0X3NpemUsIDAsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGludGVyZmFjZSBpbmZvXG4iKTsKKyAgICAgICAgZnJlZShpZl9saXN0KTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qIDFzdCBwYXNzOiBjcmVhdGUgaW50ZXJmYWNlIGVudHJpZXMgKi8KKyAgICBmb3IgKGNwID0gaWZfbGlzdDsgY3AgPCBpZl9saXN0ICsgaWZfbGlzdF9zaXplOyBjcCArPSBpZnAtPmlmbV9tc2dsZW4pIHsKKworICAgICAgICBpZnAgPSAoc3RydWN0IGlmX21zZ2hkciAqKSBjcDsKKyAgICAgICAgaWZfbmFtZSA9IE5VTEw7CisgICAgICAgIGZsYWdzID0gMDsKKyAgICAgICAgYWRsID0gTlVMTDsKKworICAgICAgICBpZiAoaWZwLT5pZm1fdHlwZSAhPSBSVE1fSUZJTkZPKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGlmcC0+aWZtX2FkZHJzICYgUlRBX0lGUCkgeworICAgICAgICAgICAgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKGlmcCArIDEpOworICAgICAgICAgICAgLyogaWZfbXNnaGRyIGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHNvY2thZGRycywgb2Ygd2hpY2ggd2UgbmVlZCBvbmx5IFJUQV9JRlAgKi8KKyAgICAgICAgICAgIC8qIG1vc3Qgb2YgdGhlIHRpbWUgUlRBX0lGUCBpcyB0aGUgZmlyc3QgYWRkcmVzcyB3ZSBnZXQsIGhlbmNlIHRoZSBzaG9ydGN1dCAqLworICAgICAgICAgICAgaWYgKChpZnAtPmlmbV9hZGRycyAmICh+UlRBX0lGUCAtIDEpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgLyogc2tpcCBhbGwgYWRkcmVzc2VzIHVwIHRvIFJUQV9JRlAuICovCisgICAgICAgICAgICAgICAgZm9yIChhbWFzayA9IChSVEFfSUZQID4+IDEpOyBhbWFzayAhPSAwOyBhbWFzayA+Pj0gMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaWZwLT5pZm1fYWRkcnMgJiBhbWFzaykgeyBhID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoICgoY2hhciAqKSBhKSArIFJPVU5EVVAoYS0+c2FfbGVuKSApOyB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRsID0gKHN0cnVjdCBzb2NrYWRkcl9kbCAqKSBhOworICAgICAgICAgICAgaWZfbmFtZSA9IChjaGFyICopIGFkbC0+c2RsX2RhdGE7CisgICAgICAgICAgICBpZl9uYW1lW2FkbC0+c2RsX25sZW5dID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShpZnAtPmlmbV9hZGRycyAmIFJUQV9JRlApIHx8IGlmX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImlmbV9pbmRleCAldTogbm8gaW50ZXJmYWNlIG5hbWUgaW4gbWVzc2FnZSwgc2tpcHBpbmdcbiIsIGlmcC0+aWZtX2luZGV4KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfY3JlYXRlKGlmX25hbWUsIGlmcC0+aWZtX2luZGV4KTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19JTlRFUkZBQ0VfRlJFRV9OT0ZMQUdTKTsKKyAgICAgICAgICAgIGZyZWUoaWZfbGlzdCk7CisgICAgICAgICAgICByZXR1cm4gLTM7CisgICAgICAgIH0KKworICAgICAgICAvKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyAqLworICAgICAgICBpZiAoYWRsICE9IE5VTEwgJiYgYWRsLT5zZGxfYWxlbiA+IDApIHsKKyAgICAgICAgICAgIGVudHJ5LT5wYWRkcl9sZW4gPSBhZGwtPnNkbF9hbGVuOworICAgICAgICAgICAgZW50cnktPnBhZGRyID0gKGNoYXIqKW1hbGxvYyhlbnRyeS0+cGFkZHJfbGVuKTsKKyAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cGFkZHIsIGFkbC0+c2RsX2RhdGEgKyBhZGwtPnNkbF9ubGVuLCBhZGwtPnNkbF9hbGVuKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlczogcGFkZHJfbGVuPSVkLCBlbnRyeS0+cGFkZHI9JXg6JXg6JXg6JXg6JXg6JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpZl9uYW1lLCBlbnRyeS0+cGFkZHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnBhZGRyWzBdLCBlbnRyeS0+cGFkZHJbMV0sIGVudHJ5LT5wYWRkclsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wYWRkclszXSwgZW50cnktPnBhZGRyWzRdLCBlbnRyeS0+cGFkZHJbNV0pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LT5wYWRkciA9IChjaGFyKiltYWxsb2MoNik7CisgICAgICAgICAgICBlbnRyeS0+cGFkZHJfbGVuID0gNjsKKyAgICAgICAgICAgIG1lbXNldChlbnRyeS0+cGFkZHIsIDAsIDYpOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPm10dSA9IGlmcC0+aWZtX2RhdGEuaWZpX210dTsKKyAgICAgICAgZW50cnktPnR5cGUgPSBpZnAtPmlmbV9kYXRhLmlmaV90eXBlOworCisKKyAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19JRl9GTEFHUzsKKyAgICAgICAgZW50cnktPm9zX2ZsYWdzID0gaWZwLT5pZm1fZmxhZ3M7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChpZnAtPmlmbV9mbGFncyAmIElGRl9VUCkgeworICAgICAgICAgICAgZW50cnktPmFkbWluX3N0YXR1cyA9IElGQURNSU5TVEFUVVNfVVA7CisjaWYgZGVmaW5lZCggTElOS19TVEFURV9VUCApICYmIGRlZmluZWQoIExJTktfU1RBVEVfRE9XTiApCisgICAgICAgICAgICBpZiAoaWZwLT5pZm1fZGF0YS5pZmlfbGlua19zdGF0ZSA9PSBMSU5LX1NUQVRFX1VQKSB7CisgICAgICAgICAgICAgICAgZW50cnktPm9wZXJfc3RhdHVzID0gSUZPUEVSU1RBVFVTX1VQOworICAgICAgICAgICAgfSBlbHNlIGlmIChpZnAtPmlmbV9kYXRhLmlmaV9saW5rX3N0YXRlID09IExJTktfU1RBVEVfRE9XTikgeworICAgICAgICAgICAgICAgIGVudHJ5LT5vcGVyX3N0YXR1cyA9IElGT1BFUlNUQVRVU19ET1dOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+b3Blcl9zdGF0dXMgPSBJRk9QRVJTVEFUVVNfVU5LTk9XTjsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBlbnRyeS0+b3Blcl9zdGF0dXMgPSBJRk9QRVJTVEFUVVNfVVA7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LT5hZG1pbl9zdGF0dXMgPSBJRkFETUlOU1RBVFVTX0RPV047CisgICAgICAgICAgICAvKiBJRi1NSUIgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBpZk9wZXJTdGF0dXMgc2hvdWxkIGJlIGRvd24gaW4gdGhpcyBjYXNlICovIAorICAgICAgICAgICAgZW50cnktPm9wZXJfc3RhdHVzID0gSUZPUEVSU1RBVFVTX0RPV047CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX1Y0X1JFQVNNTUFYOworICAgICAgICBlbnRyeS0+cmVhc21fbWF4ID0gSVBfTUFYUEFDS0VUOworCisgICAgICAgIC8qIGdldCBjb3VudGVycyAqLworICAgICAgICBlbnRyeS0+c3RhdHMuaWJ5dGVzLmxvdyA9IGlmcC0+aWZtX2RhdGEuaWZpX2lieXRlczsgZW50cnktPnN0YXRzLmlieXRlcy5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLml1Y2FzdC5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9pcGFja2V0czsgZW50cnktPnN0YXRzLml1Y2FzdC5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLmltY2FzdC5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9pbWNhc3RzOyBlbnRyeS0+c3RhdHMuaW1jYXN0LmhpZ2ggPSAwOworICAgICAgICBlbnRyeS0+c3RhdHMuaWVycm9ycyA9IGlmcC0+aWZtX2RhdGEuaWZpX2llcnJvcnM7CisgICAgICAgIGVudHJ5LT5zdGF0cy5pZGlzY2FyZHMgPSBpZnAtPmlmbV9kYXRhLmlmaV9pcWRyb3BzOworICAgICAgICBlbnRyeS0+c3RhdHMuaXVua25vd25fcHJvdG9zID0gaWZwLT5pZm1fZGF0YS5pZmlfbm9wcm90bzsKKworICAgICAgICBlbnRyeS0+c3RhdHMub2J5dGVzLmxvdyA9IGlmcC0+aWZtX2RhdGEuaWZpX29ieXRlczsgZW50cnktPnN0YXRzLm9ieXRlcy5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLm91Y2FzdC5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9vcGFja2V0czsgZW50cnktPnN0YXRzLm91Y2FzdC5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLm9tY2FzdC5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9vbWNhc3RzOyBlbnRyeS0+c3RhdHMub21jYXN0LmhpZ2ggPSAwOworICAgICAgICBlbnRyeS0+c3RhdHMub2Vycm9ycyA9IGlmcC0+aWZtX2RhdGEuaWZpX29lcnJvcnM7CisgICAgICAgIGVudHJ5LT5uc19mbGFncyB8PSAgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0JZVEVTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfRFJPUFMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19NQ0FTVF9QS1RTOworCisgICAgICAgIGlmICh0aW1lcmNtcCgmaWZwLT5pZm1fZGF0YS5pZmlfbGFzdGNoYW5nZSwgJnN0YXJ0dGltZSwgPikpIHsKKyAgICAgICAgICAgIGVudHJ5LT5sYXN0Y2hhbmdlID0gKGlmcC0+aWZtX2RhdGEuaWZpX2xhc3RjaGFuZ2UudHZfc2VjIC0gc3RhcnR0aW1lLnR2X3NlYykgKiAxMDA7CisgICAgICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0xBU1RDSEFOR0U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbnRyeS0+bGFzdGNoYW5nZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWZwLT5pZm1fZmxhZ3MgJiBJRkZfUFJPTUlTQykgZW50cnktPnByb21pc2N1b3VzID0gMTsKKworICAgICAgICAvKiB0cnkgdG8gZ3Vlc3MgdGhlIHNwZWVkIGZyb20gbWVkaWEgdHlwZSAqLworICAgICAgICBuZXRzbm1wX29wZW5ic2RfaW50ZXJmYWNlX2dldF9pZl9zcGVlZChlbnRyeS0+bmFtZSwgJmVudHJ5LT5zcGVlZCwgJmVudHJ5LT5zcGVlZF9oaWdoKTsKKyAgICAgICAgaWYgKGVudHJ5LT5zcGVlZF9oaWdoICE9IDApIHsKKyAgICAgICAgICAgIGVudHJ5LT5uc19mbGFncyB8PSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfSElHSF9TUEVFRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIG9yIHJlc29ydCB0byBpZmlfYmF1ZHJhdGUgKi8KKyAgICAgICAgICAgIGVudHJ5LT5zcGVlZCA9IGlmcC0+aWZtX2RhdGEuaWZpX2JhdWRyYXRlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfb3ZlcnJpZGVzKGVudHJ5KTsKKworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICJjcmVhdGVkIGVudHJ5ICV1IGZvciAlc1xuIiwgZW50cnktPmluZGV4LCBlbnRyeS0+bmFtZSkpOworICAgIH0gLyogZm9yIChlYWNoIGludGVyZmFjZSBlbnRyeSkgKi8KKworICAgIC8qIHBhc3MgMjogd2FsayBhZGRyZXNzZXMgKi8KKyAgICBmb3IgKGNwID0gaWZfbGlzdDsgY3AgPCBpZl9saXN0ICsgaWZfbGlzdF9zaXplOyBjcCArPSBpZmEtPmlmYW1fbXNnbGVuKSB7CisKKyAgICAgICAgaWZhID0gKHN0cnVjdCBpZmFfbXNnaGRyICopIGNwOworCisgICAgICAgIGlmIChpZmEtPmlmYW1fdHlwZSAhPSBSVE1fTkVXQUREUikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAgICAgInJlY2VpdmVkIDB4JXggaW4gUlRNX05FV0FERFIgZm9yIGlmaW5kZXggJXVcbiIsCisgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZhbV9hZGRycywgaWZhLT5pZmFtX2luZGV4KSk7CisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfZ2V0X2J5X2luZGV4KGNvbnRhaW5lciwgaWZhLT5pZmFtX2luZGV4KTsKKyAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJhZGRyZXNzIGZvciBhIG5vbmV4aXN0ZW50IGludGVyZmFjZT8gaW5kZXg9JWQiLCBpZmEtPmlmYW1faW5kZXgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiB3YWxrIHRoZSBsaXN0IG9mIGFkZHJlc3NlcyByZWNlaXZlZC4KKyAgICAgICAgICAgd2UgZG8gbm90IHVzZSBhY3R1YWwgYWRkcmVzc2VzLCB0aGUgc29sZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gc2V0IGZsYWdzICovCisgICAgICAgIGEgPSAoc3RydWN0IHNvY2thZGRyICopIChpZmEgKyAxKTsKKyAgICAgICAgZm9yIChhbWFzayA9IGlmYS0+aWZhbV9hZGRyczsgYW1hc2sgIT0gMDsgYW1hc2sgPj49IDEpIHsKKyAgICAgICAgICAgIGlmICgoYW1hc2sgJiAxKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6Y29udGFpbmVyOmFyY2giLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogYT0lcCwgc2FfbGVuPSVkLCBzYV9mYW1pbHk9MHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bmFtZSwgYSwgYS0+c2FfbGVuLCBhLT5zYV9mYW1pbHkpKTsKKworICAgICAgICAgICAgICAgIGlmIChhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19JUFY0OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGEtPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19JUFY2OworCisgICAgICAgICAgICAgICAgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCAoKGNoYXIgKikgYSkgKyBST1VORFVQKGEtPnNhX2xlbikgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICIlczogZmxhZ3M9MHgleFxuIiwgZW50cnktPm5hbWUsIGVudHJ5LT5uc19mbGFncykpOworICAgIH0KKworICAgIGlmIChpZl9saXN0ICE9IE5VTEwpCisgICAgICAgIGZyZWUoaWZfbGlzdCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIHN1YnJvdXRpbmUgdG8gdHJhbnNsYXRlIGtub3duIG1lZGlhIHR5cGVkIHRvIHNwZWVkLgorICogc2VlIC91c3IvaW5jbHVkZS9uZXQvaWZfbWVkaWEuaCBmb3IgZGVmaW5pdGlvbnMKKyAqLworCit2b2lkCitfb3BlbmJzZF9pbnRlcmZhY2VfaWZtZWRpYV90b19zcGVlZChpbnQgbWVkaWEsIHVfaW50ICpzcGVlZCwgdV9pbnQgKnNwZWVkX2hpZ2gpCit7CisgICAgKnNwZWVkID0gMDsgKnNwZWVkX2hpZ2ggPSAwOworCisgICAgc3dpdGNoIChJRk1fVFlQRShtZWRpYSkpIHsKKyAgICAgICAgY2FzZSBJRk1fRVRIRVI6CisgICAgICAgICAgICBzd2l0Y2ggKElGTV9TVUJUWVBFKG1lZGlhKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwX1Q6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTBfMjoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMF81OgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwX1NUUDoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMF9GTDoKKyAgICAgICAgICAgICAgICAgICAgKnNwZWVkID0gMTAwMDAwMDA7ICpzcGVlZF9oaWdoID0gMTA7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMF9UWDoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMDBfRlg6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTAwX1Q0OgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMF9WRzoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMDBfVDI6CisgICAgICAgICAgICAgICAgICAgICpzcGVlZCA9IDEwMDAwMDAwMDsgKnNwZWVkX2hpZ2ggPSAxMDA7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMDBfTFg6CisJCWNhc2UgSUZNXzEwMDBfU1g6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTAwMF9DWDoKKyNpZmRlZiBJRk1fMTAwMF9UCisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTAwMF9UOgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICpzcGVlZCA9IDEwMDAwMDAwMDA7ICpzcGVlZF9oaWdoID0gMTAwMDsgYnJlYWs7CisjaWZkZWYgSUZNXzEwR0JBU0VfU1IKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMEdCQVNFX1NSOgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwR0JBU0VfTFI6CisgICAgICAgICAgICAgICAgICAgICpzcGVlZCA9ICh1X2ludCkgLTE7IC8qIDQyOTQ5NjcyOTU7ICovICpzcGVlZF9oaWdoID0gMTAwMDA7IGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuOworfQorCisvKgorICogQHJldHZhbCAgMCBzcGVlZCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCAoZXJyb3IsIHVua25vd24gbWVkaWEpCisgKiBAcmV0dmFsID4wIHNwZWVkLCBlcXVhbCB0byAqc3BlZWQuCisgKiAgICAgICAgICAgIHNldHMgKnNwZWVkPTJeMzEgYW5kIHJldHVybnMgKnNwZWVkX2hpZ2g9c3BlZWQvMTBeNiBhcyByZXF1aXJlZCBieSBpZlNwZWVkL2lmSGlnaFNwZWVkLgorICovCisKK2ludAorbmV0c25tcF9vcGVuYnNkX2ludGVyZmFjZV9nZXRfaWZfc3BlZWQoY2hhciAqbmFtZSwgdV9pbnQgKnNwZWVkLCB1X2ludCAqc3BlZWRfaGlnaCkKK3sKKyAgICBpbnQgczsKKyAgICBzdHJ1Y3QgaWZtZWRpYXJlcSBpZm1yOworICAgIGludCAqbWVkaWFfbGlzdCwgaTsKKyAgICB1X2ludCB0X3NwZWVkLCB0X3NwZWVkX2hpZ2g7IAorICAgIHVfaW50IG1fc3BlZWQsIG1fc3BlZWRfaGlnaDsKKworICAgICpzcGVlZCA9IDA7ICpzcGVlZF9oaWdoID0gMDsKKworICAgIGlmICgocyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG1lbXNldCgmaWZtciwgMCwgc2l6ZW9mKGlmbXIpKTsKKyAgICBzdHJsY3B5KGlmbXIuaWZtX25hbWUsIG5hbWUsIHNpemVvZihpZm1yLmlmbV9uYW1lKSk7CisKKyAgICBpZiAoaW9jdGwocywgU0lPQ0dJRk1FRElBLCAoY2FkZHJfdCkmaWZtcikgPCAwIHx8IGlmbXIuaWZtX2NvdW50ID09IDApIHsKKyAgICAgICAgY2xvc2Uocyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qCisgICAgICogdHJ5IHRvIGdldCBzcGVlZCBmcm9tIGN1cnJlbnQgbWVkaWEuCisgICAgICogaWYgdW5zdWNjZXNzZnVsIChlLmcuLCBpbnRlcmZhY2UgaXMgZG93biksIGdldCBhIGxpc3Qgb2YgY2FwYWJpbGl0aWVzLAorICAgICAqIHRyeSBlYWNoIGFuZCByZXR1cm4gbWF4aW11bSBzcGVlZCB0aGUgaW50ZXJmYWNlIGlzIGNhcGFibGUgb2YuCisgICAgICovCisKKyAgICBfb3BlbmJzZF9pbnRlcmZhY2VfaWZtZWRpYV90b19zcGVlZChpZm1yLmlmbV9jdXJyZW50LCBzcGVlZCwgc3BlZWRfaGlnaCk7CisKKyAgICBpZiAoKnNwZWVkID09IDAgJiYKKyAgICAgICAgKG1lZGlhX2xpc3QgPSAoaW50ICopIG1hbGxvYyhpZm1yLmlmbV9jb3VudCAqIHNpemVvZihpbnQpKSkgIT0gTlVMTCApIHsKKworICAgICAgICBpZm1yLmlmbV91bGlzdCA9IG1lZGlhX2xpc3Q7CisKKyAgICAgICAgaWYgKGlvY3RsKHMsIFNJT0NHSUZNRURJQSwgKGNhZGRyX3QpJmlmbXIpID09IDApIHsKKyAgICAgICAgICAgIG1fc3BlZWQgPSAwOyBtX3NwZWVkX2hpZ2ggPSAwOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlmbXIuaWZtX2NvdW50OyBpKyspIHsKKworICAgICAgICAgICAgICAgIF9vcGVuYnNkX2ludGVyZmFjZV9pZm1lZGlhX3RvX3NwZWVkKG1lZGlhX2xpc3RbaV0sICZ0X3NwZWVkLCAmdF9zcGVlZF9oaWdoKTsKKworICAgICAgICAgICAgICAgIGlmICh0X3NwZWVkX2hpZ2ggPiBtX3NwZWVkX2hpZ2ggfHwKKyAgICAgICAgICAgICAgICAgICAgKHRfc3BlZWRfaGlnaCA9PSBtX3NwZWVkX2hpZ2ggJiYgdF9zcGVlZCA+IHRfc3BlZWQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3BlZWRfaGlnaCA9IHRfc3BlZWRfaGlnaDsgbV9zcGVlZCA9IHRfc3BlZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgKnNwZWVkID0gbV9zcGVlZDsgKnNwZWVkX2hpZ2ggPSBtX3NwZWVkX2hpZ2g7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShtZWRpYV9saXN0KTsKKyAgICB9CisKKyAgICBjbG9zZShzKTsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAiJXM6IHNwZWVkOiAldSwgc3BlZWRfaGlnaDogJXVcbiIsCisgICAgICAgICAgICAgICAgbmFtZSwgKnNwZWVkLCAqc3BlZWRfaGlnaCkpOworCisgICAgcmV0dXJuICpzcGVlZDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMKK2ludAorbmV0c25tcF9hcmNoX3NldF9hZG1pbl9zdGF0dXMobmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZkFkbWluU3RhdHVzX3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTphcmNoIiwgInNldF9hZG1pbl9zdGF0dXNcbiIpKTsKKworICAgIC8qIFRPRE86IGltcGxlbWVudCB0aGlzIGNhbGwgKi8KKworICAgIC8qIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHNubXBfbG9nKExPR19FUlIsICJuZXRzbm1wX2FyY2hfc2V0X2FkbWluX3N0YXR1cyBpcyBub3QgKHlldCkgaW1wbGVtZW50ZWQgZm9yIEZyZWVCU0QuXG4iKTsKKworICAgIHJldHVybiAtNDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMgKi8KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jCmluZGV4IDY2ZmIyMmYuLjhhYTQ3ZjggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMKQEAgLTIsMTAgKzIsMTEgQEAKICAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBTb2xhcmlzCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCiAjaW5jbHVkZSAiaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaCIKICNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0xNiw2ICsxNyw4IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cywgaW50ZXJmYWNlX2FsbCkKKwogc3RhdGljIGludCBfc2V0X2lwX2ZsYWdzX3Y0KG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICosIG1pYjJfaWZFbnRyeV90ICopOwogc3RhdGljIGludCBfbWF0Y2hfaWZuYW1lX3Y0YWRkcih2b2lkICppZm5hbWUsIHZvaWQgKmlwYWRkcik7CiBzdGF0aWMgaW50IF9nZXRfdjRhZGRyKG1pYjJfaWZFbnRyeV90ICppZmUsIG1pYjJfaXBBZGRyRW50cnlfdCAqZSk7CkBAIC02Myw3ICs2Niw3IEBACiAgICAgcmVxX2UgICAgICAgICAgICAgICAgICAgcmVxID0gR0VUX0ZJUlNUOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gMDsKIAotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwgImxvYWQgKGZsYWdzICVwKVxuIiwKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsICJsb2FkIChmbGFncyAldSlcbiIsCiAgICAgICAgICAgICAgICAgbF9mbGFncykpOwogCiAgICAgaWYgKGNvbnRhaW5lciA9PSBOVUxMKSB7CkBAIC0xMDQsNyArMTA3LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogY29sbGVjdCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGJ5IElGLU1JQgogICAgICAgICAgKi8KLSAgICAgICAgZW50cnktPnBhZGRyID0gbWFsbG9jKGlmZS5pZlBoeXNBZGRyZXNzLm9fbGVuZ3RoKTsKKyAgICAgICAgZW50cnktPnBhZGRyID0gKGNoYXIqKW1hbGxvYyhpZmUuaWZQaHlzQWRkcmVzcy5vX2xlbmd0aCk7CiAgICAgICAgIGlmIChlbnRyeS0+cGFkZHIgPT0gTlVMTCkgewogICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X2ZyZWUoZW50cnkpOwogICAgICAgICAgICAgZXJyb3IgPSAxOwpAQCAtMzA2LDcgKzMwOSw3IEBACiAgICAgaWYgKChyYyA9IGdldE1pYnN0YXQoTUlCX0lQX0FERFIsIGlwdjRlLCBzaXplb2YoKmlwdjRlKSwgR0VUX0VYQUNULCAKICAgICAgICAgJl9tYXRjaF9pZm5hbWVfdjRhZGRyLCAmaWZlLT5pZkRlc2NyLm9fYnl0ZXMpKSA9PSAwKQogICAgICAgICByZXR1cm4gKDEpOwotICAgIGJ6ZXJvKCh2b2lkICopaXB2NGUsIHNpemVvZigqaXB2NGUpKTsKKyAgICBtZW1zZXQoaXB2NGUsICdcMCcsIHNpemVvZigqaXB2NGUpKTsKICAgICByZXR1cm4gKDApOwogfQogCkBAIC0zNDAsMTEgKzM0MywxMiBAQAogICAgICAgICAmX21hdGNoX2lmbmFtZV92NmFkZHIsICZpZmUtPmlmRGVzY3Iub19ieXRlcykpID09IDApIHsKICAgICAgICAgcmV0dXJuICgxKTsKICAgICB9IAotICAgIGJ6ZXJvKCh2b2lkICopaXB2NmUsIHNpemVvZigqaXB2NmUpKTsKKyAgICBtZW1zZXQoaXB2NmUsICdcMCcsIHNpemVvZigqaXB2NmUpKTsKICAgICByZXR1cm4gKDApOwogfQogI2VuZGlmIC8qIFNPTEFSSVNfSEFWRV9JUFY2X01JQl9TVVBQT1JUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTCiBpbnQKIG5ldHNubXBfYXJjaF9zZXRfYWRtaW5fc3RhdHVzKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICogZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWZBZG1pblN0YXR1c192YWwpCkBAIC0zNTYsMyArMzYwLDQgQEAKICAgICAgKi8KICAgICByZXR1cm4gKC0xKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jCmluZGV4IDA2Y2ZlZmUuLjYwNzZkMTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYwpAQCAtNiw2ICs2LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKICNpbmNsdWRlICJpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oIgpAQCAtMjksNiArMzAsOCBAQAogI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cywgaW50ZXJmYWNlX2FsbCkKKwogLyoKICAqIGFjY291bnQgZm9yIG1pbm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gRnJlZUJTRCBhbmQgT3BlbkJTRC4KICAqIElmIHRoaXMgZ2V0cyB1bnJ1bHksIHNwbGl0IHN0dWZmIG91dCBpbnRvIHRoZSByZXNwZWN0aXZlCkBAIC00OSw3ICs1Miw3IEBACiAjICAgZGVmaW5lIEFSQ0hfUFJPTUlTQ19GTEFHIElGRl9QUk9NSVNDCiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKKyNkZWZpbmUgc3RhcnR0aW1lICgqKGNvbnN0IHN0cnVjdCB0aW1ldmFsKiluZXRzbm1wX2dldF9hZ2VudF9zdGFydHRpbWUoKSkKIAogLyogc2FfbGVuIHJvdW5kdXAgbWFjcm8uICovCiAjZGVmaW5lIFJPVU5EVVAoYSkgXApAQCAtMjgxLDcgKzI4NCw3IEBACiAgICAgICAgICAgICAgICAgbmV0c25tcF9zeXNjdGxfaWZtZWRpYV90b19zcGVlZChtZWRpYV9saXN0W2ldLCAmdF9zcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0X3NwZWVkX2hpZ2gpOwogICAgICAgICAgICAgICAgIGlmICh0X3NwZWVkX2hpZ2ggPiBtX3NwZWVkX2hpZ2ggfHwKLSAgICAgICAgICAgICAgICAgICAgKHRfc3BlZWRfaGlnaCA9PSBtX3NwZWVkX2hpZ2ggJiYgdF9zcGVlZCA+IHRfc3BlZWQpKSB7CisgICAgICAgICAgICAgICAgICAgICh0X3NwZWVkX2hpZ2ggPT0gbV9zcGVlZF9oaWdoICYmIHRfc3BlZWQgPiBtX3NwZWVkKSkgewogICAgICAgICAgICAgICAgICAgICBtX3NwZWVkX2hpZ2ggPSB0X3NwZWVkX2hpZ2g7CiAgICAgICAgICAgICAgICAgICAgIG1fc3BlZWQgPSB0X3NwZWVkOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OSw3ICszNTIsNyBAQAogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQogCi0gICAgaWZfbGlzdCA9IG1hbGxvYyhpZl9saXN0X3NpemUpOworICAgIGlmX2xpc3QgPSAodV9jaGFyKiltYWxsb2MoaWZfbGlzdF9zaXplKTsKICAgICBpZiAoaWZfbGlzdCA9PSBOVUxMKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpbnRlcmZhY2UgaW5mbyAiCiAgICAgICAgICAgICAgICAgICIoJXUgYnl0ZXMpXG4iLCAodW5zaWduZWQpIGlmX2xpc3Rfc2l6ZSk7CkBAIC00MTQsNyArNDE3LDcgQEAKICAgICAgICAgLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3MgKi8KICAgICAgICAgaWYgKGFkbCAhPSBOVUxMICYmIGFkbC0+c2RsX2FsZW4gPiAwKSB7CiAgICAgICAgICAgICBlbnRyeS0+cGFkZHJfbGVuID0gYWRsLT5zZGxfYWxlbjsKLSAgICAgICAgICAgIGVudHJ5LT5wYWRkciA9IG1hbGxvYyhlbnRyeS0+cGFkZHJfbGVuKTsKKyAgICAgICAgICAgIGVudHJ5LT5wYWRkciA9IChjaGFyKiltYWxsb2MoZW50cnktPnBhZGRyX2xlbik7CiAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnBhZGRyLCBhZGwtPnNkbF9kYXRhICsgYWRsLT5zZGxfbmxlbiwgYWRsLT5zZGxfYWxlbik7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6c3lzY3RsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICIlczogcGFkZHJfbGVuPSVkLCBlbnRyeS0+cGFkZHI9JXg6JXg6JXg6JXg6JXg6JXhcbiIsCkBAIC00MjIsNyArNDI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wYWRkclswXSwgZW50cnktPnBhZGRyWzFdLCBlbnRyeS0+cGFkZHJbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cGFkZHJbM10sIGVudHJ5LT5wYWRkcls0XSwgZW50cnktPnBhZGRyWzVdKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlbnRyeS0+cGFkZHIgPSBtYWxsb2MoNik7CisgICAgICAgICAgICBlbnRyeS0+cGFkZHIgPSAoY2hhciopbWFsbG9jKDYpOwogICAgICAgICAgICAgZW50cnktPnBhZGRyX2xlbiA9IDY7CiAgICAgICAgICAgICBtZW1zZXQoZW50cnktPnBhZGRyLCAwLCA2KTsKICAgICAgICAgfQpAQCAtNTYxLDYgKzU2NCw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTCiBpbnQKIG5ldHNubXBfYXJjaF9zZXRfYWRtaW5fc3RhdHVzKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICogZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWZBZG1pblN0YXR1c192YWwpCkBAIC01NzUsMyArNTc5LDQgQEAKIAogICAgIHJldHVybiAtNDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYwppbmRleCA2OTQwMGZjLi5kOWI3MjUyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jCkBAIC0xNCw5ICsxNCwxNCBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9hY2Nlc3NfZW50cnlfc2V0X2FkbWluX3N0YXR1cykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoKICAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCiAgKi8KQEAgLTMxLDE0ICszNiwxNCBAQAogIyAgIGluY2x1ZGUgImlwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmgiCiAjZW5kaWYKICNpZmRlZiBVU0lOR19JUF9NSUJfSVBWNklOVEVSRkFDRVRBQkxFX0lQVjZJTlRFUkZBQ0VUQUJMRV9NT0RVTEUKLSMgICBpbmNsdWRlICJpcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oIgorIyAgIGluY2x1ZGUgImlwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmgiCiAjZW5kaWYKICNpZmRlZiBVU0lOR19JRl9NSUJfSUZYVEFCTEVfSUZYVEFCTEVfTU9EVUxFCiAjICAgaW5jbHVkZSAiaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgiCiAjZW5kaWYKIAotb2lkICAgICAgICAgICAgIGlmVGFibGVfb2lkW10gPSB7IElGVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaWZUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaWZUYWJsZV9vaWQpOworY29uc3Qgb2lkICAgICAgIGlmVGFibGVfb2lkW10gPSB7IElGVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaWZUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaWZUYWJsZV9vaWQpOwogCiBpZlRhYmxlX3JlZ2lzdHJhdGlvbiBpZlRhYmxlX3VzZXJfY29udGV4dDsKIHN0YXRpYyBpZlRhYmxlX3JlZ2lzdHJhdGlvbiAqaWZUYWJsZV91c2VyX2NvbnRleHRfcDsKQEAgLTE0Nyw4ICsxNTIsNyBAQAogICAgICAqIHJlZ2lzdGVyIHNjYWxhciBmb3IgaWZOdW1iZXIKICAgICAgKi8KICAgICB7Ci0gICAgICAgIG9pZCAgICAgICAgICAgICByZWdfb2lkW10gPQotICAgICAgICAgICAgeyBJRlRBQkxFX05VTUJFUiB9OworICAgICAgICBjb25zdCBvaWQgICAgICAgcmVnX29pZFtdID0geyBJRlRBQkxFX05VTUJFUiB9OwogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKIAogICAgICAgICBteXJlZyA9CkBAIC0yNzksOSArMjgzLDkgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgewogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHNhdmUgY2hhbmdlZCByb3dzLCBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5CisgICAgICAgICAgICAgKiBub3RpZnkgbGlicmFyeSB0byBzYXZlIGNoYW5nZWQgcm93cwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX3N0b3JlKG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOwogICAgICAgICB9CiAKQEAgLTQ3NCw3ICs0NzgsNyBAQAogICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgaWZEZXNjciBkYXRhCiAgICAgICAgICAqLwogICAgICAgICAoKmlmRGVzY3JfdmFsX3B0cl9wdHIpID0KLSAgICAgICAgICAgIG1hbGxvYyh0bXBfbGVuICogc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuaWZEZXNjclswXSkpOworICAgICAgICAgICAgKGNoYXIqKW1hbGxvYyh0bXBfbGVuICogc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuaWZEZXNjclswXSkpOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlmRGVzY3JfdmFsX3B0cl9wdHIpKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CiAgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwpAQCAtNzUyLDcgKzc1Niw3IEBACiAgICAgICAgICAqIGFsbG9jYXRlIHNwYWNlIGZvciBpZlBoeXNBZGRyZXNzIGRhdGEKICAgICAgICAgICovCiAgICAgICAgICgqaWZQaHlzQWRkcmVzc192YWxfcHRyX3B0cikgPQotICAgICAgICAgICAgbWFsbG9jKHJvd3JlcV9jdHgtPmRhdGEuaWZQaHlzQWRkcmVzc19sZW4gKgorICAgICAgICAgICAgKGNoYXIqKW1hbGxvYyhyb3dyZXFfY3R4LT5kYXRhLmlmUGh5c0FkZHJlc3NfbGVuICoKICAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5pZlBoeXNBZGRyZXNzWzBdKSk7CiAgICAgICAgIGlmIChOVUxMID09ICgqaWZQaHlzQWRkcmVzc192YWxfcHRyX3B0cikpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKQEAgLTE3NzMsOSArMTc3Nyw5IEBACiAgICAgLyoKICAgICAgKiBoYXJkIGNvZGVkCiAgICAgICovCi0gICAgbmV0c25tcF9hc3NlcnQoKCppZlNwZWNpZmljX3ZhbF9wdHJfbGVuX3B0cikgPiBudWxsT2lkTGVuKTsKLSAgICAoKmlmU3BlY2lmaWNfdmFsX3B0cl9sZW5fcHRyKSA9IG51bGxPaWRMZW47Ci0gICAgbWVtY3B5KCppZlNwZWNpZmljX3ZhbF9wdHJfcHRyLCAmbnVsbE9pZCwgbnVsbE9pZExlbik7CisgICAgbmV0c25tcF9hc3NlcnQoKCppZlNwZWNpZmljX3ZhbF9wdHJfbGVuX3B0cikgPiAoc2l6ZV90KW51bGxPaWRMZW4pOworICAgICgqaWZTcGVjaWZpY192YWxfcHRyX2xlbl9wdHIpID0gKHNpemVfdCludWxsT2lkTGVuOworICAgIG1lbWNweSgqaWZTcGVjaWZpY192YWxfcHRyX3B0ciwgJm51bGxPaWQsIChzaXplX3QpbnVsbE9pZExlbik7CiAjZW5kaWYKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKQEAgLTE3ODQsNiArMTc4OCw5IEBACiAKIAogLyoqIEB9ICovCisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtMjMzMCw2ICsyMzM3LDggQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWZUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMgKi8KIAogCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiBzdGF0aWMgaW50CiBfaWZfbnVtYmVyX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCmluZGV4IDZhNmYwZTUuLmU5MDYzNGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKQEAgLTM0Myw2ICszNDMsOSBAQAogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzCiAgICAgICovCisgICAgCQorICAgIGludCAgICAgICAgICAgICBfbWZkX2lmVGFibGVfdW5kb19zZXR1cF9hbGxvY2F0ZShpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgpOworICAgIHZvaWQgICAgICAgICAgICBfbWZkX2lmVGFibGVfdW5kb19zZXR1cF9yZWxlYXNlKGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCk7CiAgICAgaW50ICAgICAgICAgICAgIGlmVGFibGVfcHJlX3JlcXVlc3QoaWZUYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCk7CiAgICAgaW50ICAgICAgICAgICAgIGlmVGFibGVfcG9zdF9yZXF1ZXN0KGlmVGFibGVfcmVnaXN0cmF0aW9uICoKQEAgLTM2MSw4ICszNjQsOCBAQAogICAgIGlmVGFibGVfcm93cmVxX2N0eCAqaWZUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaWZUYWJsZV9taWJfaW5kZXggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaWZUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaWZUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkIGlmVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCBpZlRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpZlRhYmxlX2ludGVyZmFjZS5oIgpAQCAtNDQ4LDYgKzQ1MSw3IEBACiAKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIC8qCiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqIFNFVCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKQEAgLTY2Myw3ICs2NjcsNyBAQAogCiAKICAgICBpbnQgICAgICAgICAgICAgaWZUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMoaWZUYWJsZV9yb3dyZXFfY3R4ICogY3R4KTsKLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggMDUxOTFlNy4uZmI4MzhlZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtOCw5ICs4LDEyIEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfbGlua2VkX2xpc3QpCisKIC8qCiAgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAogICovCkBAIC0yMywxMiArMjYsMzQgQEAKICMgICBpbmNsdWRlICJtaWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oIgogI2VuZGlmCiAKKyNpZmRlZiBVU0lOR19JUF9NSUJfSVBWNklOVEVSRkFDRVRBQkxFX0lQVjZJTlRFUkZBQ0VUQUJMRV9NT0RVTEUKKyMgICBpbmNsdWRlICJtaWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oIgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGNkX2NvbnRhaW5lcl9zIHsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY3VycmVudDsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqZGVsZXRlZDsKK30gY2RfY29udGFpbmVyOworCiAvKgogICogZmxhZyBzbyB3ZSBrbm93IG5vdCB0byBzZXQgcm93L3RhYmxlIGxhc3QgY2hhbmdlIHRpbWVzCiAgKiBkdXJpbmcgc3RhcnR1cC4KICAqLwogc3RhdGljIGludCAgICAgIF9maXJzdF9sb2FkID0gMTsKIAorLyoKKyAqIFZhbHVlIG9mIGludGVyZmFjZV9mYWRlb3V0IGNvbmZpZyBvcHRpb24KKyAqLworc3RhdGljIGludCBmYWRlb3V0ID0gSUZUQUJMRV9SRU1PVkVfTUlTU0lOR19BRlRFUjsKKy8qCisgKiBWYWx1ZSBvZiBpbnRlcmZhY2VfcmVwbGFjZV9vbGQgY29uZmlnIG9wdGlvbgorICovCitzdGF0aWMgaW50IHJlcGxhY2Vfb2xkID0gMDsKKworc3RhdGljIHZvaWQKK19kZWxldGVfbWlzc2luZ19pbnRlcmZhY2UoaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKTsKKwogLyoqIEBpbmdyb3VwIGludGVyZmFjZSAKICAqIEBkZWZncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKICAqCkBAIC01MCw2ICs3NSwzMiBAQAogICogT0lEOiAuMS4zLjYuMS4yLjEuMi4yLCBsZW5ndGg6IDgKICAqLwogCitzdGF0aWMgdm9pZAorcGFyc2VfaW50ZXJmYWNlX2ZhZGVvdXQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit7CisgICAgZmFkZW91dCA9IGF0b2kobGluZSk7Cit9CitzdGF0aWMgdm9pZAorcGFyc2VfaW50ZXJmYWNlX3JlcGxhY2Vfb2xkKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIGlmIChzdHJjbXAobGluZSwgInllcyIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAieSIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAidHJ1ZSIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAiMSIpID09IDApIHsKKyAgICAgICAgcmVwbGFjZV9vbGQgPSAxOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJjbXAobGluZSwgIm5vIikgPT0gMAorICAgICAgICAgICAgfHwgc3RyY21wKGxpbmUsICJuIikgPT0gMAorICAgICAgICAgICAgfHwgc3RyY21wKGxpbmUsICJmYWxzZSIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAiMCIpID09IDApIHsKKyAgICAgICAgcmVwbGFjZV9vbGQgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNubXBfbG9nKExPR19FUlIsICJJbnZhbGlkIHZhbHVlIG9mIGludGVyZmFjZV9yZXBsYWNlX29sZCBwYXJhbWV0ZXI6ICclcydcbiIsCisgICAgICAgICAgICBsaW5lKTsKK30KKwogLyoqCiAgKiBpbml0aWFsaXphdGlvbiBmb3IgaWZUYWJsZSBkYXRhIGFjY2VzcwogICoKQEAgLTcwLDYgKzEyMSwxMCBAQAogICAgIC8qCiAgICAgICogVE9ETzozMDM6bzogSW5pdGlhbGl6ZSBpZlRhYmxlIGRhdGEuCiAgICAgICovCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImludGVyZmFjZV9mYWRlb3V0IiwgcGFyc2VfaW50ZXJmYWNlX2ZhZGVvdXQsIE5VTEwsCisgICAgICAgICAgICAiaW50ZXJmYWNlX2ZhZGVvdXQgc2Vjb25kcyIpOworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJpbnRlcmZhY2VfcmVwbGFjZV9vbGQiLAorICAgICAgICAgICAgcGFyc2VfaW50ZXJmYWNlX3JlcGxhY2Vfb2xkLCBOVUxMLCAiaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIHllc3xubyIpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZlRhYmxlX2luaXRfZGF0YSAqLwpAQCAtMTUyLDIzICsyMDcsMTIyIEBACiAgICAgICAgICBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEIHwgTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUKTsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWZUYWJsZV9jb250YWluZXJfaW5pdCAqLwogCit2b2lkCitzZW5kX2xpbmtVcERvd25Ob3RpZmljYXRpb25zKG9pZCAqbm90aWZpY2F0aW9uX29pZCwgc2l6ZV90IG5vdGlmaWNhdGlvbl9vaWRfbGVuLCBpbnQgaWZfaW5kZXgsIGludCBpZl9hZG1pbl9zdGF0dXMsIGludCBpZl9vcGVyX3N0YXR1cykKK3sKKyAgICAvKgorICAgICAqIEluIHRoZSBub3RpZmljYXRpb24sIHdlIGhhdmUgdG8gYXNzaWduIG91ciBub3RpZmljYXRpb24gT0lEIHRvCisgICAgICogdGhlIHNubXBUcmFwT0lELjAgb2JqZWN0LiBIZXJlIGlzIGl0J3MgZGVmaW5pdGlvbi4gCisgICAgICovCisgICAgb2lkICAgICAgICAgICAgIG9iamlkX3NubXB0cmFwW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDQsIDEsIDAgfTsKKyAgICBzaXplX3QgICAgICAgICAgb2JqaWRfc25tcHRyYXBfbGVuID0gT0lEX0xFTkdUSChvYmppZF9zbm1wdHJhcCk7CisKKyAgICAvKgorICAgICAqIGRlZmluZSB0aGUgT0lEcyBmb3IgdGhlIHZhcmJpbmRzIHdlJ3JlIGdvaW5nIHRvIGluY2x1ZGUKKyAgICAgKiAgd2l0aCB0aGUgbm90aWZpY2F0aW9uIC0KKyAgICAgKiBJRi1NSUI6OmlmSW5kZXgsCisgICAgICogSUYtTUlCOjppZkFkbWluU3RhdHVzLCBhbmQKKyAgICAgKiBJRi1NSUI6OmlmT3BlclN0YXR1cworICAgICAqLworICAgIG9pZCAgICAgIGlmX2luZGV4X29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDEsIDAgfTsKKyAgICBzaXplX3QgICBpZl9pbmRleF9vaWRfbGVuID0gT0lEX0xFTkdUSChpZl9pbmRleF9vaWQpOworICAgIG9pZCAgICAgIGlmX2FkbWluX3N0YXR1c19vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCA3LCAwIH07CisgICAgc2l6ZV90ICAgaWZfYWRtaW5fc3RhdHVzX29pZF9sZW4gPSBPSURfTEVOR1RIKGlmX2FkbWluX3N0YXR1c19vaWQpOworICAgIG9pZCAgICAgIGlmX29wZXJfc3RhdHVzX29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDgsIDAgfTsKKyAgICBzaXplX3QgICBpZl9vcGVyX3N0YXR1c19vaWRfbGVuID0gT0lEX0xFTkdUSChpZl9vcGVyX3N0YXR1c19vaWQpOworCisgICAgLyoKKyAgICAgKiBoZXJlIGlzIHdoZXJlIHdlIHN0b3JlIHRoZSB2YXJpYWJsZXMgdG8gYmUgc2VudCBpbiB0aGUgdHJhcCAKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKm5vdGlmaWNhdGlvbl92YXJzID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJyc3lzOmxpbmtVcERvd25Ob3RpZmljYXRpb25zIiwgImRlZmluaW5nIHRoZSB0cmFwXG4iKSk7CisKKyAgICAvKgorICAgICAqIHVwZGF0ZSB0aGUgaW5zdGFuY2UgZm9yIGVhY2ggdmFyaWFibGUgdG8gYmUgc2VudCBpbiB0aGUgdHJhcAorICAgICAqLworICAgIGlmX2luZGV4X29pZFsxMF0gPSBpZl9pbmRleDsKKyAgICBpZl9hZG1pbl9zdGF0dXNfb2lkWzEwXSA9IGlmX2luZGV4OworICAgIGlmX29wZXJfc3RhdHVzX29pZFsxMF0gPSBpZl9pbmRleDsKKworICAgIC8qCisgICAgICogYWRkIGluIHRoZSB0cmFwIGRlZmluaXRpb24gb2JqZWN0IAorICAgICAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJm5vdGlmaWNhdGlvbl92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBzbm1wVHJhcE9JRC4wIHZhcmlhYmxlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmppZF9zbm1wdHJhcCwgb2JqaWRfc25tcHRyYXBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbHVlIHR5cGUgaXMgYW4gT0lEIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbHVlIGNvbnRlbnRzIGlzIG91ciBub3RpZmljYXRpb24gT0lEIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIG5vdGlmaWNhdGlvbl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZSBpbiBieXRlcyA9IG9pZCBsZW5ndGggKiBzaXplb2Yob2lkKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uX29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisKKyAgICAvKgorICAgICAqIGFkZCBpbiB0aGUgYWRkaXRpb25hbCBvYmplY3RzIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgdHJhcAorICAgICAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJm5vdGlmaWNhdGlvbl92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2luZGV4X29pZCwgaWZfaW5kZXhfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmaWZfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlmX2luZGV4KSk7CisKKyAgICAvKgorICAgICAqIGlmIHdlIHdhbnQgdG8gaW5zZXJ0IGFkZGl0aW9uYWwgb2JqZWN0cywgd2UgZG8gaXQgaGVyZSAKKyAgICAgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZub3RpZmljYXRpb25fdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9hZG1pbl9zdGF0dXNfb2lkLCBpZl9hZG1pbl9zdGF0dXNfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmaWZfYWRtaW5fc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpZl9hZG1pbl9zdGF0dXMpKTsKKworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJm5vdGlmaWNhdGlvbl92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX29wZXJfc3RhdHVzX29pZCwgaWZfb3Blcl9zdGF0dXNfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmaWZfb3Blcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlmX29wZXJfc3RhdHVzKSk7CisKKyAgICAvKgorICAgICAqIHNlbmQgdGhlIHRyYXAgb3V0LiAgVGhpcyB3aWxsIHNlbmQgaXQgdG8gYWxsIHJlZ2lzdGVyZWQKKyAgICAgKiByZWNlaXZlcnMgKHNlZSB0aGUgIlNFVFRJTkcgVVAgVFJBUCBBTkQvT1IgSU5GT1JNIERFU1RJTkFUSU9OUyIKKyAgICAgKiBzZWN0aW9uIG9mIHRoZSBzbm1wZC5jb25mIG1hbnVhbCBwYWdlLiAKKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgicnN5czpsaW5rVXBEb3duTm90aWZpY2F0aW9ucyIsICJzZW5kaW5nIHRoZSB0cmFwXG4iKSk7CisgICAgc2VuZF92MnRyYXAobm90aWZpY2F0aW9uX3ZhcnMpOworCisgICAgLyoKKyAgICAgKiBmcmVlIHRoZSBjcmVhdGVkIG5vdGlmaWNhdGlvbiB2YXJpYWJsZSBsaXN0IAorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJyc3lzOmxpbmtVcERvd25Ob3RpZmljYXRpb25zIiwgImNsZWFuaW5nIHVwXG4iKSk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQobm90aWZpY2F0aW9uX3ZhcnMpOworfQorCiAvKioKICAqIGNoZWNrIGVudHJ5IGZvciB1cGRhdGUKICAqCiAgKi8KIHN0YXRpYyB2b2lkCiBfY2hlY2tfaW50ZXJmYWNlX2VudHJ5X2Zvcl91cGRhdGVzKGlmVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICppZmNvbnRhaW5lcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RfY29udGFpbmVyICpjZGMpCiB7CiAgICAgY2hhciAgICAgICAgICAgIG9wZXJfY2hhbmdlZCA9IDA7Ci0gICAgdV9sb25nIGxhc3RjaGFuZ2UgPSByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZTsKKyAgICBpbnQgbGFzdGNoYW5nZWQgPSByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqaWZjb250YWluZXIgPSBjZGMtPmN1cnJlbnQ7CiAKICAgICAvKgogICAgICAqIGNoZWNrIGZvciBtYXRjaGluZyBlbnRyeS4gV2UgY2FuIGRvIHRoaXMgZGlyZWN0bHksIHNpbmNlCiAgICAgICogYm90aCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBpbmRleC4KICAgICAgKi8KICAgICBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqaWZlbnRyeSA9Ci0gICAgICAgIENPTlRBSU5FUl9GSU5EKGlmY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICAgICAgKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5KilDT05UQUlORVJfRklORChpZmNvbnRhaW5lciwgcm93cmVxX2N0eCk7CiAKICNpZmRlZiBVU0lOR19JUF9NSUJfSVBWNElOVEVSRkFDRVRBQkxFX0lQVjRJTlRFUkZBQ0VUQUJMRV9NT0RVTEUKICAgICAvKgpAQCAtMTkzLDI4ICszNDcsNDAgQEAKICAgICAgICAgICogZGVsZXRlZCAoYW5kIHRodXMgbmVlZCB0byB1cGRhdGUgaWZUYWJsZUxhc3RDaGFuZ2VkKT8KICAgICAgICAgICovCiAgICAgICAgIGlmICghcm93cmVxX2N0eC0+a25vd25fbWlzc2luZykgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgInVwZGF0aW5nIG1pc3NpbmcgZW50cnlcbiIpKTsKICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcgPSAxOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgInVwZGF0aW5nIG1pc3NpbmcgZW50cnkgJXNcbiIscm93cmVxX2N0eC0+ZGF0YS5pZk5hbWUpKTsKICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZBZG1pblN0YXR1cyA9IElGQURNSU5TVEFUVVNfRE9XTjsKLSAgICAgICAgICAgIGlmICgoIShyb3dyZXFfY3R4LT5kYXRhLmlmZW50cnktPm5zX2ZsYWdzICYgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0xBU1RDSEFOR0UpKQotICAgICAgICAgICAgICAgICYmIChyb3dyZXFfY3R4LT5kYXRhLmlmT3BlclN0YXR1cyAhPSBJRk9QRVJTVEFUVVNfRE9XTikpCi0gICAgICAgICAgICAgICAgb3Blcl9jaGFuZ2VkID0gMTsKICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZPcGVyU3RhdHVzID0gSUZPUEVSU1RBVFVTX0RPV047CisgICAgICAgICAgICBvcGVyX2NoYW5nZWQgPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChyb3dyZXFfY3R4LT5rbm93bl9taXNzaW5nKSB7CisgICAgICAgICAgICB0aW1lX3Qgbm93ID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisgICAgICAgICAgICB1X2xvbmcgZGlmZiA9IChub3cgLSByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZSkgLyAxMDA7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTppZlRhYmxlOmFjY2VzcyIsICJtaXNzaW5nIGVudHJ5IGZvciAlbGQgc2Vjb25kc1xuIiwgZGlmZikpOworICAgICAgICAgICAgaWYgKGRpZmYgPj0gZmFkZW91dCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpZlRhYmxlOmFjY2VzcyIsICJtYXJraW5nIG1pc3NpbmcgZW50cnkgJXMgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZhbCBhZnRlciAlZCBzZWNvbmRzXG4iLCByb3dyZXFfY3R4LT5kYXRhLmlmTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWRlb3V0KSk7CisgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gY2RjLT5kZWxldGVkKQorICAgICAgICAgICAgICAgICAgIGNkYy0+ZGVsZXRlZCA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImlmVGFibGVfZGVsZXRlZDpsaW5rZWRfbGlzdCIpOworICAgICAgICAgICAgICAgIGlmIChOVUxMID09IGNkYy0+ZGVsZXRlZCkKKyAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3QgY3JlYXRlIGNvbnRhaW5lciBmb3IgZGVsZXRlZCBpbnRlcmZhY2VcbiIpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY2RjLT5kZWxldGVkLCByb3dyZXFfY3R4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLCAidXBkYXRpbmcgZXhpc3RpbmcgZW50cnlcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgInVwZGF0aW5nIGV4aXN0aW5nIGVudHJ5ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmTmFtZSkpOwogCiAjaWZkZWYgVVNJTkdfSUZfTUlCX0lGWFRBQkxFX0lGWFRBQkxFX01PRFVMRQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgcmMgPSBzdHJjbXAocm93cmVxX2N0eC0+ZGF0YS5pZk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbnRyeS0+bmFtZSk7CiAgICAgICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgICAgIHN0YXRpYyBpbnQgbG9nZ2VkID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWxvZ2dlZCkgewotICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTmFtZSBvZiBhbiBpbnRlcmZhY2UgY2hhbmdlZC4gU3VjaCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2VzIHdpbGwga2VlcCBpdHMgb2xkIG5hbWUgaW4gSUYtTUlCLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgIk5hbWUgb2YgYW4gaW50ZXJmYWNlIGNoYW5nZWQuIFN1Y2ggIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJmYWNlcyB3aWxsIGtlZXAgaXRzIG9sZCBuYW1lIGluIElGLU1JQi5cbiIpKTsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLCAiaW50ZXJmYWNlICVzIGNoYW5nZWQgbmFtZSB0byAlcywgaWdub3JpbmdcbiIsCiAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZOYW1lLCBpZmVudHJ5LT5uYW1lKSk7CiAgICAgICAgICAgICB9CkBAIC0yNTMsMTAgKzQxOSw2MyBAQAogICAgIC8qCiAgICAgICogaWYgaWZPcGVyU3RhdHVzIGNoYW5nZWQsIHVwZGF0ZSBpZkxhc3RDaGFuZ2UKICAgICAgKi8KLSAgICBpZiAob3Blcl9jaGFuZ2VkKQorICAgIGlmIChvcGVyX2NoYW5nZWQpIHsKICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZkxhc3RDaGFuZ2UgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKyNpZmRlZiBVU0lOR19JRl9NSUJfSUZYVEFCTEVfSUZYVEFCTEVfTU9EVUxFCisgICAgICAgIGlmIChyb3dyZXFfY3R4LT5kYXRhLmlmTGlua1VwRG93blRyYXBFbmFibGUgPT0gMSkgeworICAgICAgICAgICAgaWYgKHJvd3JlcV9jdHgtPmRhdGEuaWZPcGVyU3RhdHVzID09IElGT1BFUlNUQVRVU19VUCkgeworICAgICAgICAgICAgICAgIG9pZCBub3RpZmljYXRpb25fb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDUsIDQgfTsKKyAgICAgICAgICAgICAgICBzZW5kX2xpbmtVcERvd25Ob3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbl9vaWQsIE9JRF9MRU5HVEgobm90aWZpY2F0aW9uX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT50YmxfaWR4LmlmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmQWRtaW5TdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmT3BlclN0YXR1cyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd3JlcV9jdHgtPmRhdGEuaWZPcGVyU3RhdHVzID09IElGT1BFUlNUQVRVU19ET1dOKSB7CisgICAgICAgICAgICAgICAgb2lkIG5vdGlmaWNhdGlvbl9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNSwgMyB9OworICAgICAgICAgICAgICAgIHNlbmRfbGlua1VwRG93bk5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uX29pZCwgT0lEX0xFTkdUSChub3RpZmljYXRpb25fb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaWZJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZBZG1pblN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZPcGVyU3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCiAgICAgZWxzZQotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZSA9IGxhc3RjaGFuZ2U7CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZMYXN0Q2hhbmdlID0gbGFzdGNoYW5nZWQ7Cit9CisKKy8qKgorICogUmVtb3ZlIGFsbCBvbGQgaW50ZXJmYWNlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG5ld2x5IGFkZGVkIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK19jaGVja19hbmRfcmVwbGFjZV9vbGQobmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKmlmZW50cnksCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICppdDsKKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4OworICAgIG5ldHNubXBfY29udGFpbmVyICp0b19kZWxldGU7CisKKyAgICB0b19kZWxldGUgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpZlRhYmxlX2RlbGV0ZWQ6bGlua2VkX2xpc3QiKTsKKyAgICBpZiAoTlVMTCA9PSB0b19kZWxldGUpIHsKKyAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3QgY3JlYXRlIGNvbnRhaW5lciBmb3IgZGVsZXRlZCBpbnRlcmZhY2VcbiIpOworICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihjb250YWluZXIpOworICAgIGZvciAocm93cmVxX2N0eCA9IElURVJBVE9SX0ZJUlNUKGl0KTsgcm93cmVxX2N0eDsgcm93cmVxX2N0eCA9IElURVJBVE9SX05FWFQoaXQpKSB7CisgICAgICAgIGlmIChzdHJjbXAoaWZlbnRyeS0+bmFtZSwgcm93cmVxX2N0eC0+ZGF0YS5pZmVudHJ5LT5uYW1lKSA9PSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAicmVtb3ZpbmcgaW50ZXJmYWNlICVsZCBkdWUgdG8gbmV3ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAobG9uZykgcm93cmVxX2N0eC0+ZGF0YS5pZmVudHJ5LT5pbmRleCwgaWZlbnRyeS0+bmFtZSkpOworICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVCh0b19kZWxldGUsIHJvd3JlcV9jdHgpOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworCisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKHRvX2RlbGV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9kZWxldGVfbWlzc2luZ19pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgQ09OVEFJTkVSX0ZSRUUodG9fZGVsZXRlKTsKIH0KIAogLyoqCkBAIC0yNzcsNiArNDk2LDkgQEAKICAgICByb3dyZXFfY3R4ID0gaWZUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGlmZW50cnkpOwogICAgIGlmICgoTlVMTCAhPSByb3dyZXFfY3R4KSAmJgogICAgICAgICAoTUZEX1NVQ0NFU1MgPT0gaWZUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LCBpZmVudHJ5LT5pbmRleCkpKSB7CisgICAgICAgIGlmIChyZXBsYWNlX29sZCkKKyAgICAgICAgICAgICAgICBfY2hlY2tfYW5kX3JlcGxhY2Vfb2xkKGlmZW50cnksIGNvbnRhaW5lcik7CisKICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOwogICAgICAgICBpZiAoMCA9PSBfZmlyc3RfbG9hZCkgewogICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZkxhc3RDaGFuZ2UgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKQEAgLTMwOCw2ICs1MzAsMjEgQEAKIH0KIAogLyoqCisgKiBhZGQgbmV3IGVudHJ5CisgKi8KK3N0YXRpYyB2b2lkCitfZGVsZXRlX21pc3NpbmdfaW50ZXJmYWNlKGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLCAicmVtb3ZpbmcgbWlzc2luZyBlbnRyeSAlc1xuIiwKKyAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmTmFtZSkpOworCisgICAgQ09OVEFJTkVSX1JFTU9WRShjb250YWluZXIsIHJvd3JlcV9jdHgpOworCisgICAgaWZUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7Cit9CisKKy8qKgogICogY29udGFpbmVyIHNodXRkb3duCiAgKgogICogQHBhcmFtIGNvbnRhaW5lcl9wdHIgQSBwb2ludGVyIHRvIHRoZSBjb250YWluZXIuCkBAIC0zNzEsNyArNjA4LDcgQEAKIGludAogaWZUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQogewotICAgIG5ldHNubXBfY29udGFpbmVyICppZmNvbnRhaW5lcjsKKyAgICBjZF9jb250YWluZXIgY2RjOwogCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aWZUYWJsZTppZlRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImNhbGxlZFxuIikpOwogCkBAIC0zODQsMjMgKzYyMSwzNSBAQAogICAgIC8qCiAgICAgICogaWZUYWJsZSBnZXRzIGl0cyBkYXRhIGZyb20gdGhlIG5ldHNubXBfaW50ZXJmYWNlIEFQSS4KICAgICAgKi8KLSAgICBpZmNvbnRhaW5lciA9CisgICAgY2RjLmN1cnJlbnQgPQogICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfY29udGFpbmVyX2xvYWQoTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0lOVEVSRkFDRV9JTklUX05PRkxBR1MpOwotICAgIGlmIChOVUxMID09IGlmY29udGFpbmVyKQorICAgIGlmIChOVUxMID09IGNkYy5jdXJyZW50KQogICAgICAgICByZXR1cm4gTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFOyAgICAgICAgLyogbXNnIGFscmVhZHkgbG9nZ2VkICovCiAKKyAgICBjZGMuZGVsZXRlZCA9IE5VTEw7IC8qIGNyZWF0ZWQgYXMgbmVlZGVkICovCisKICAgICAvKgogICAgICAqIHdlIGp1c3QgZ290IGEgZnJlc2ggY29weSBvZiBpbnRlcmZhY2UgZGF0YS4gY29tcGFyZSBpdCB0bwogICAgICAqIHdoYXQgd2UndmUgYWxyZWFkeSBnb3QsIGFuZCBtYWtlIGFueSBhZGp1c3RlbWVudHMuLi4KICAgICAgKi8KICAgICBDT05UQUlORVJfRk9SX0VBQ0goY29udGFpbmVyLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikKLSAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrX2ludGVyZmFjZV9lbnRyeV9mb3JfdXBkYXRlcywgaWZjb250YWluZXIpOworICAgICAgICAgICAgICAgICAgICAgICBfY2hlY2tfaW50ZXJmYWNlX2VudHJ5X2Zvcl91cGRhdGVzLCAmY2RjKTsKKworICAgIC8qCisgICAgICogbm93IHJlbW92ZSBhbnkgbWlzc2luZyBpbnRlcmZhY2VzCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gY2RjLmRlbGV0ZWQpIHsKKyAgICAgICBDT05UQUlORVJfRk9SX0VBQ0goY2RjLmRlbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfZGVsZXRlX21pc3NpbmdfaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgICAgIENPTlRBSU5FUl9GUkVFKGNkYy5kZWxldGVkKTsKKyAgICB9CiAKICAgICAvKgogICAgICAqIG5vdyBhZGQgYW55IG5ldyBpbnRlcmZhY2VzCiAgICAgICovCi0gICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGlmY29udGFpbmVyLAorICAgIENPTlRBSU5FUl9GT1JfRUFDSChjZGMuY3VycmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9hZGRfbmV3X2ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKIApAQCAtNDA4LDExICs2NTcsMTEgQEAKICAgICAgKiBmcmVlIHRoZSBjb250YWluZXIuIHdlJ3ZlIGVpdGhlciBjbGFpbWVkIGVhY2ggaWZlbnRyeSwgb3IgcmVsZWFzZWQgaXQsCiAgICAgICogc28gdGhlIGRhbCBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gY2xlYXIgdGhlIGNvbnRhaW5lci4KICAgICAgKi8KLSAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfY29udGFpbmVyX2ZyZWUoaWZjb250YWluZXIsCisgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2NvbnRhaW5lcl9mcmVlKGNkYy5jdXJyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19JTlRFUkZBQ0VfRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aWZUYWJsZTppZlRhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlbHUgcmVjb3Jkc1xuIiwgKHVuc2lnbmVkIGxvbmcpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgaWYgKF9maXJzdF9sb2FkKQogICAgICAgICBfZmlyc3RfbG9hZCA9IDA7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmgKaW5kZXggOWFhYTQyZS4uNDQ1OTI5YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtNDYsNyArNDYsOSBAQAogICAgICAqIEEgMTAgTWJwcyBzdHJlYW0gY2FuIHdyYXAgaWYqT2N0ZXRzIGluIH41NyBtaW51dGVzLgogICAgICAqIEF0IDEwMCBNYnBzIGl0IGlzIH41IG1pbnV0ZXMsIGFuZCBhdCAxIEdicHMsIH4zNCBzZWNvbmRzLgogICAgICAqLwotI2RlZmluZSBJRlRBQkxFX0NBQ0hFX1RJTUVPVVQgICAxNQorI2RlZmluZSBJRlRBQkxFX0NBQ0hFX1RJTUVPVVQgICAzCisKKyNkZWZpbmUgSUZUQUJMRV9SRU1PVkVfTUlTU0lOR19BRlRFUiAgICAgKDUgKiA2MCkgLyogc2Vjb25kcyAqLwogCiAgICAgdm9pZCAgICAgICAgICAgIGlmVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmNvbnRhaW5lcl9wdHJfcHRyLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggMjU3NDllMy4uNDFkMzhlZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Nyw2ICs0OCwyMSBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZnRhYmxlX2NvbnRhaW5lcl9nZXQsIGlmVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmeHRhYmxlX3NodXRkb3duX2ludGVyZmFjZSwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZYVGFibGVfY29udGFpbmVyX3NpemUsIGlmWFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZlhUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpZlhUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZYVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaWZYVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmWFRhYmxlX2NvbnRhaW5lcl9nZXQsIGlmWFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZnRhYmxlX2NvbnRhaW5lcl9zaXplLCBpZlRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZnRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlmVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmdGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaWZUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtODIsMTkgKzk4LDIzIEBACiBzdGF0aWMgdm9pZCAgICAgX2lmVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlmVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogaWZUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlmVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpZlRhYmxlX3JlZ2lzdHJhdGlvbiAqCiBpZlRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gaWZUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogaWZUYWJsZV9yZWdpc3RyYXRpb24gKgogaWZUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGlmVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQogewpAQCAtMTAyLDEyICsxMjIsMTUgQEAKICAgICBpZlRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGlmVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaWZUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGlmVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xNDUsNyArMTY4LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNjAsNyArMTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogaWZUYWJsZV9kYXRhICAgKmlmVGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKTsKIApAQCAtMjIyLDcgKzI0NSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElGVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElGVEFCTEVfTUFYX0NPTDsKQEAgLTI1MCw3ICsyNzMsNyBAQAogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0gX21mZF9pZlRhYmxlX3Bvc3RfcmVxdWVzdDsKIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjczLDcgKzI5Niw3IEBACiAgICAgICovCiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MgPQogICAgICAgICBfbWZkX2lmVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjg2LDExICszMDksMTQgQEAKICAgICByZWdpbmZvID0KICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoImlmVGFibGUiLCBoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZlRhYmxlX29pZCwgaWZUYWJsZV9vaWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIQU5ETEVSX0NBTl9SV1JJVEUKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQIHwKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCisgICAgICAgICAgICApOworCiAgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaWZUYWJsZVxuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTMwOCw3ICszMzQsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzMxLDcgKzM1Nyw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC0zNzIsOCArMzk4LDggQEAKICAgICAgKiByZWdpc3RlciBpZlRhYmxlTGFzdENoYW5nZWQKICAgICAgKi8KICAgICB7Ci0gICAgICAgIG9pZCAgICAgICAgICAgICBpZnRsY19vaWRbXSA9IHsgSUZUQUJMRV9MQVNUX0NIQU5HRSB9OwotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgIGNvbnN0IG9pZCAgICAgICBpZnRsY19vaWRbXSA9IHsgSUZUQUJMRV9MQVNUX0NIQU5HRSB9OworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaWZUYWJsZUxhc3RDaGFuZ2VkIiwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ0bGNfb2lkLCBPSURfTEVOR1RIKGlmdGxjX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKQEAgLTY1Niw3ICs2ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTcxMCw3ICs3MzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmVGFibGU6X21mZF9pZlRhYmxlX29iamVjdF9sb29rdXAiLApAQCAtOTcwLDcgKzk5Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC0xMDM5LDggKzEwNjUsOCBAQAogCiAKIAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xMjY1LDcgKzEyOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYzsKQEAgLTEzMTIsNyArMTMzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlRhYmxlOl9tZmRfaWZUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMiLAogICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKQEAgLTE0MjMsNyArMTQ0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlRhYmxlOl9tZmRfaWZUYWJsZV91bmRvX3NldHVwIiwgImNhbGxlZFxuIikpOwpAQCAtMTQ5Nyw3ICsxNTIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYzsKIApAQCAtMTU3Niw3ICsxNjAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTYyMyw3ICsxNjQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZUYWJsZTpfbWZkX2lmVGFibGVfY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTY2NSw3ICsxNjkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlRhYmxlOl9tZmRfaWZUYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE3NDMsNyArMTc2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTc5Niw3ICsxODIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZUYWJsZTpfbWZkX2lmVGFibGVfaXJyZXZlcnNpYmxlOmNvbW1pdCIsCkBAIC0xODE4LDcgKzE4NDQsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaWZUYWJsZV9pcnJldmVyc2libGVfY29tbWl0ICovCi0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE5NjQsNiArMTk5MCw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pZlRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaWZUYWJsZV9yb3dyZXFfY3R4ICoKIGlmVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlmVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKIHsKQEAgLTE5ODUsNyArMjAxMiw4IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChpZlRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKKyAgICByb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJTkQoaWZUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jCmluZGV4IDhiOWI3Y2UuLmJiM2U3MzYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0yOSw2ICszMCw5IEBACiAKICNpbmNsdWRlICJpZlhUYWJsZV9pbnRlcmZhY2UuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaWZUYWJsZV9jb250YWluZXJfZ2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaWZUYWJsZV9jb250YWluZXJfc2l6ZSkKKwogLyoKICAqIG5vdCBzdXJlIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCBzZXQgZm9yIHByb21pc2N1b3VzIG1vZGUsIGJlY2F1c2UKICAqIDEpIGNhcmVmdWwgdGhvdWdodCBzaG91bGQgZ28gaW50byBhbnkgc2V0dGFibGUgb2JqZWN0IHRoYXQgcGVyZm9ybXMKQEAgLTM4LDkgKzQyLDggQEAKICAqLwogI3VuZGVmIE5FVFNOTVBfRU5BQkxFX1BST01JU0NVT1VTTU9ERV9TRVQKIAotb2lkICAgICAgICAgICAgIGlmWFRhYmxlX29pZFtdID0geyBJRlhUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpZlhUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaWZYVGFibGVfb2lkKTsKLWNvbnN0IGNoYXIgICAgICpyb3dfdG9rZW4gPSAiaWZYVGFibGUiOworY29uc3Qgb2lkICAgICAgIGlmWFRhYmxlX29pZFtdID0geyBJRlhUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpZlhUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaWZYVGFibGVfb2lkKTsKIAogaWZYVGFibGVfcmVnaXN0cmF0aW9uIGlmWFRhYmxlX3VzZXJfY29udGV4dDsKIHN0YXRpYyBpZlhUYWJsZV9yZWdpc3RyYXRpb24gKmlmWFRhYmxlX3VzZXJfY29udGV4dF9wOwpAQCAtMjM2LDkgKzIzOSw5IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBzYXZlIGNoYW5nZWQgcm93cywgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICogbm90aWZ5IGxpYnJhcnkgdG8gc2F2ZSBjaGFuZ2VkIHJvd3MKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9zdG9yZShuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKICAgICAgICAgfQogCkBAIC00MDAsNyArNDAzLDcgQEAKIGlmTmFtZV9nZXQoaWZYVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsIGNoYXIgKippZk5hbWVfdmFsX3B0cl9wdHIsCiAgICAgICAgICAgIHNpemVfdCAqIGlmTmFtZV92YWxfcHRyX2xlbl9wdHIpCiB7Ci0gICAgaW50ICAgICAgICAgICAgIHRtcF9sZW47CisgICAgc2l6ZV90IHRtcF9sZW47CiAKICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCiAgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gaWZOYW1lX3ZhbF9wdHJfcHRyKQpAQCAtNDI1LDcgKzQyOCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGFsbG9jYXRlIHNwYWNlIGZvciBpZk5hbWUgZGF0YQogICAgICAgICAgKi8KLSAgICAgICAgKCppZk5hbWVfdmFsX3B0cl9wdHIpID0gbWFsbG9jKHRtcF9sZW4pOworICAgICAgICAoKmlmTmFtZV92YWxfcHRyX3B0cikgPSAoY2hhciopbWFsbG9jKHRtcF9sZW4pOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlmTmFtZV92YWxfcHRyX3B0cikpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKICAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CkBAIC0xNDkzLDcgKzE0OTYsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgaWZBbGlhcyBkYXRhCiAgICAgICAgICAqLwotICAgICAgICAoKmlmQWxpYXNfdmFsX3B0cl9wdHIpID0KKyAgICAgICAgKCppZkFsaWFzX3ZhbF9wdHJfcHRyKSA9IChjaGFyKikKICAgICAgICAgICAgIG1hbGxvYyhyb3dyZXFfY3R4LT5kYXRhLmlmQWxpYXNfbGVuICoKICAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5pZkFsaWFzWzBdKSk7CiAgICAgICAgIGlmIChOVUxMID09ICgqaWZBbGlhc192YWxfcHRyX3B0cikpIHsKQEAgLTE1NzMsNiArMTU3Niw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lX2dldCAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAKIC8qKiBAfSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1MzEsNSArMjUzNSw3IEBACiAgICAgcmV0dXJuIHJjOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZlhUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMgKi8KIAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoqIEB9ICovCiAvKiogQHsgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgKaW5kZXggZTMyYWNjOC4uYmEyMmY5NyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgKQEAgLTk0LDggKzk0LDggQEAKICAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICppZlhUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaWZYVGFibGVfbWliX2luZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaWZYVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIGlmWFRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpZlhUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaWZYVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgImlmWFRhYmxlX2ludGVyZmFjZS5oIgpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuMzEuMS4xLCBsZW5ndGg6IDkKICAgICAgKi8KIAotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGludCAgICAgICAgICAgICBpZlhUYWJsZV91bmRvX3NldHVwKGlmWFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsKICAgICBpbnQgICAgICAgICAgICAgaWZYVGFibGVfdW5kb19jbGVhbnVwKGlmWFRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CkBAIC00MzgsNyArNDM4LDcgQEAKIAogCiAgICAgaW50ICAgICAgICAgICAgIGlmWFRhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyhpZlhUYWJsZV9yb3dyZXFfY3R4ICogY3R4KTsKLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmggYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmgKaW5kZXggNzI4ZWY1Ny4uNjdlMTk5NiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2NvbnN0YW50cy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9jb25zdGFudHMuaApAQCAtNjcsNyArNjcsMTEgQEAKICAgICAgKiBUT0RPOjQwNTpyOiBSZXZpZXcgSUZYVEFCTEVfU0VUVEFCTEVfQ09MUyBtYWNyby4KICAgICAgKiBPUiB0b2dldGhlciBhbGwgdGhlIHdyaXRhYmxlIGNvbHMuCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBJRlhUQUJMRV9TRVRUQUJMRV9DT0xTIChDT0xVTU5fSUZMSU5LVVBET1dOVFJBUEVOQUJMRV9GTEFHIHwgQ09MVU1OX0lGQUxJQVNfRkxBRykKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyNkZWZpbmUgSUZYVEFCTEVfU0VUVEFCTEVfQ09MUyAwCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICAgICAvKgogICAgICAqIE5PVEVTIG9uIGVudW1zCiAgICAgICogPT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYwppbmRleCBkOWIxODQ3Li4yM2I1MGQwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw4IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ4LDYgKzUwLDE2IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZYVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2FjaGVfZmluZF9ieV9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgxLDE5ICs5MywyMyBAQAogc3RhdGljIHZvaWQgICAgIF9pZlhUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaWZYVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpZlhUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlmWFRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpZlhUYWJsZV9yZWdpc3RyYXRpb24gKgogaWZYVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpZlhUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpZlhUYWJsZV9yZWdpc3RyYXRpb24gKgogaWZYVGFibGVfcmVnaXN0cmF0aW9uX3NldChpZlhUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCiB7CkBAIC0xMDEsMTIgKzExNywxNSBAQAogICAgIGlmWFRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaWZYVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaWZYVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiB1X2ludAogaWZYVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMzAsNyArMTQ5LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmWFRhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmWFRhYmxlX29iamVjdF9sb29rdXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlhUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlhUYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZYVGFibGVfdW5kb19zZXR1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmWFRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDUsNyArMTY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLCBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogaWZYVGFibGVfZGF0YSAgKmlmWFRhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCk7CiAKQEAgLTE4OCw3ICsyMDcsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJRlhUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSUZYVEFCTEVfTUFYX0NPTDsKQEAgLTIyMyw3ICsyNDIsNyBAQAogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0gX21mZF9pZlhUYWJsZV9wb3N0X3JlcXVlc3Q7CiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgLyoKICAgICAgKiBSRVFVSVJFRCB3cmFwcGVycyBmb3Igc2V0IHJlcXVlc3QgaGFuZGxpbmcKICAgICAgKi8KQEAgLTI0Niw3ICsyNjUsNyBAQAogICAgICAqLwogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzID0KICAgICAgICAgX21mZF9pZlhUYWJsZV9jaGVja19kZXBlbmRlbmNpZXM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqCkBAIC0yNjAsMTEgKzI3OSwxNCBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiaWZYVGFibGUiLCBoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZlhUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmWFRhYmxlX29pZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhBTkRMRVJfQ0FOX1JXUklURQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWQorI2VuZGlmICAgICAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLworICAgICAgICAgICAgKTsKKwogICAgIGlmIChOVUxMID09IHJlZ2luZm8pIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGlmWFRhYmxlXG4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgyLDcgKzMwNCw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMDUsNyArMzI3LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTM1Miw2ICszNzQsNyBAQAogICogQGludGVybmFsCiAgKiBTaHV0ZG93biB0aGUgdGFibGUgaWZYVGFibGUKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGWFRBQkxFX1NIVVRET1dOX0lOVEVSRkFDRQogdm9pZAogX2lmWFRhYmxlX3NodXRkb3duX2ludGVyZmFjZShpZlhUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyKQogewpAQCAtMzYwLDYgKzM4Myw3IEBACiAgICAgICovCiAgICAgX2lmWFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bigmaWZYVGFibGVfaWZfY3R4KTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGWFRBQkxFX1NIVVRET1dOX0lOVEVSRkFDRSAqLwogCiB2b2lkCiBpZlhUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2YykKQEAgLTU1Miw3ICs1NzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtNjA3LDcgKzYzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmWFRhYmxlOl9tZmRfaWZYVGFibGVfb2JqZWN0X2xvb2t1cCIsCkBAIC04NDUsNyArODY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtOTEyLDcgKzkzNiw3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaWZYVGFibGVfZ2V0X3ZhbHVlcyAqLwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xMTYyLDcgKzExODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtMTE5Myw3ICsxMjE3LDYgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pZlhUYWJsZV9jaGVja19vYmplY3RzICovCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogU0VUOiBjaGVjayBkZXBlbmRlbmNpZXMKQEAgLTEyMTAsNyArMTIzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZYVGFibGU6X21mZF9pZlhUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMiLAogICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKQEAgLTEyOTQsNyArMTMxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZYVGFibGU6X21mZF9pZlhUYWJsZV91bmRvX3NldHVwIiwgImNhbGxlZFxuIikpOwpAQCAtMTM1Nyw3ICsxMzgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xNDU5LDcgKzE0ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE1MDYsNyArMTUyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlhUYWJsZTpfbWZkX2lmWFRhYmxlX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE1MzksNyArMTU2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmWFRhYmxlOl9tZmRfaWZYVGFibGVfdW5kb19jb21taXQiLApAQCAtMTYzMiw3ICsxNjU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTY4Nyw3ICsxNzEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlhUYWJsZTpfbWZkX2lmWFRhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLApAQCAtMTcwOSw3ICsxNzMyLDggQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lmWFRhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNzg0LDcgKzE4MDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgdV9pbnQgY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmKTsKIAotc3RhdGljIGNoYXIgICAgIHJvd190b2tlbltdID0gImlmWFRhYmxlIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJvd190b2tlbltdID0gImlmWFRhYmxlIjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKl9pbml0X3BlcnNpc3RlbmNlIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0YWJsZQpAQCAtMTc5OCwxMyArMTgyMiwxNyBAQAogdm9pZAogaWZYVGFibGVfY29udGFpbmVyX2luaXRfcGVyc2lzdGVuY2UobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKIHsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqKmNvbnRhaW5lcl9wOwogICAgIGludCAgICAgICAgICAgICByYzsKIAogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIHJvd190b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaWZYVGFibGVfY29udGFpbmVyX3Jvd19yZXN0b3JlLCBOVUxMLCBOVUxMKTsKKyAgICBuZXRzbm1wX2Fzc2VydChjb250YWluZXIpOworICAgIGNvbnRhaW5lcl9wID0gbmV0c25tcF9tZW1kdXAoJmNvbnRhaW5lciwgc2l6ZW9mKGNvbnRhaW5lcikpOworICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lcl9wKTsKICAgICByYyA9IHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pZlhUYWJsZV9jb250YWluZXJfc2F2ZV9yb3dzLCBjb250YWluZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaWZYVGFibGVfY29udGFpbmVyX3NhdmVfcm93cywgY29udGFpbmVyX3ApOwogCiAgICAgaWYgKHJjICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyBmb3IgU1RPUkVfREFUQSBjYWxsYmFjayAiCkBAIC0xODI3LDcgKzE4NTUsNyBAQAogICAgIC8qCiAgICAgICogc2F2ZSBhbGwgcm93cwogICAgICAqLwotICAgIENPTlRBSU5FUl9GT1JfRUFDSCgobmV0c25tcF9jb250YWluZXIgKikgY2xpZW50YXJnLAorICAgIENPTlRBSU5FUl9GT1JfRUFDSCgqKG5ldHNubXBfY29udGFpbmVyICoqKWNsaWVudGFyZywKICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopCiAgICAgICAgICAgICAgICAgICAgICAgIF9pZlhUYWJsZV9jb250YWluZXJfcm93X3NhdmUsIHR5cGUpOwogCkBAIC0xODcwLDcgKzE4OTgsNyBAQAogICAgICAqIGJlIHRyZWF0ZWQgYSBsaXR0bGUgZGlmZmVyZW50bHkuIFNwZWNpZmljYWxseSwgeW91IHdpbGwgbmVlZAogICAgICAqICg0ICogbGVuKSArIDQgWzMgQVNDSUkgY2hhcnMgcGVyIGJ5dGUgKyAxIGZvciAuLCArIDQgZm9yIGxlbl0uCiAgICAgICoKLSAgICAgKiAzKSBBbHNvLCByZW1lYmVyIHRvIGFkZCBzcGFjZSBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIHNlcGVyYXRvcgorICAgICAqIDMpIEFsc28sIHJlbWVtYmVyIHRvIGFkZCBzcGFjZSBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIHNlcGFyYXRvcgogICAgICAqIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCBlYWNoIGNvbHVtbiBpcyBwcmVmaXhlZCBieSB0aGUKICAgICAgKiBjb2x1bW4gbnVtYmVyIGFuZCBhIHNlbWljb2xvbi4gVG8gYWxsb3cgZm9yIHRoZSBtYXhpbXVtCiAgICAgICogY29sdW1uIHZhbHVlcywgMTIgYnl0ZXMgWzExIGZvciBvaWQgKyAxIGZvciAnOiddIHBlcgpAQCAtMTk5MSw3ICsyMDE5LDcgQEAKICAgICAgICAgICAgICAgICAgIl9pZlhUYWJsZV9jb250YWluZXJfcm93X3Jlc3RvcmVcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChjb250YWluZXIsICZpbmRleCk7CisgICAgcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklORChjb250YWluZXIsICZpbmRleCk7CiAgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgewogICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICJlcnJvciBmaW5kaW5nIHJvdyBpbmRleCBpbiAiCiAgICAgICAgICAgICAgICAgICJfaWZYVGFibGVfY29udGFpbmVyX3Jvd19yZXN0b3JlXG4iKTsKQEAgLTIwMDIsNyArMjAzMCw3IEBACiAgICAgICogbG9vcCB0aHJvdWdoIGFuZCBnZXQgZWFjaCBjb2x1bW4KICAgICAgKi8KICAgICBidWYgPSBza2lwX3doaXRlKGJ1Zik7Ci0gICAgd2hpbGUgKChOVUxMICE9IGJ1ZikgJiYgaXNkaWdpdCgqYnVmKSkgeworICAgIHdoaWxlICgoTlVMTCAhPSBidWYpICYmIGlzZGlnaXQoKmJ1ZiAmIDB4RkYpKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGV4dHJhY3QgY29sdW1uLCBza2lwICc6JwogICAgICAgICAgKi8KQEAgLTIwODEsNyArMjEwOSw4IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDT0xVTU5fSUZBTElBUzogICAvKiogRGlzcGxheVN0cmluZyA9IEFTTl9PQ1RFVF9TVFIgKi8KLSAgICAgICAgYnVmID0gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoYnVmLCByb3dyZXFfY3R4LT5kYXRhLmlmQWxpYXMsCisgICAgICAgIGJ1ZiA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSByb3dyZXFfY3R4LT5kYXRhLmlmQWxpYXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZBbGlhc19sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtMjE0Myw2ICsyMTcyLDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfRVhURVJOQUxfQUNDRVNTCiBpZlhUYWJsZV9yb3dyZXFfY3R4ICoKIGlmWFRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpZlhUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQogewpAQCAtMjE2NCw3ICsyMTk0LDggQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9IENPTlRBSU5FUl9GSU5EKGlmWFRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKKyAgICByb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKUNPTlRBSU5FUl9GSU5EKGlmWFRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGUuaAppbmRleCBkYWM3MGNlLi4yYzczMWE2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlLmgKQEAgLTIyLDggKzIyLDEyIEBACiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXgpCiBjb25maWdfcmVxdWlyZShpcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bCkKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q3ICkgfHwgZGVmaW5lZCggbmV0YnNkNSApIHx8IGRlZmluZWQoIG9wZW5ic2Q0ICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bCkKKyNlbGlmIGRlZmluZWQoc29sYXJpczIpICYmIGRlZmluZWQoIEhBVkVfTUlCMl9JUElGU1RBVFNFTlRSWV9UICkKK2NvbmZpZ19yZXF1aXJlKGlwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3NvbGFyaXMpCiAjZWxzZQotI2Vycm9yICJ0aGUgcm91dGUgZGF0YSBhY2Nlc3MgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtLiIKK2NvbmZpZ19lcnJvcih0aGUgcm91dGUgZGF0YSBhY2Nlc3MgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuKQogI2VuZGlmCiAKIC8qKiBuZWVkIGludGVyZmFjZSBmb3IgaWZJbmRleCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYwppbmRleCA5OWIzZGU0Li44NGMxODEwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYwpAQCAtNTUsNiArNTUsOCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgY29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiX3JvdXRlIik7CisKICAgICByYyA9ICBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CiAgICAgaWYgKDAgIT0gcmMpIHsKICAgICAgICAgbmV0c25tcF9hY2Nlc3Nfcm91dGVfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBORVRTTk1QX0FDQ0VTU19ST1VURV9GUkVFX05PRkxBR1MpOwpAQCAtMjQwLDggKzI0Miw3IEBACiAgICAgbGhzLT5ydF9wcm90byA9IHJocy0+cnRfcHJvdG87CiAKICNpZmRlZiBVU0lOR19JUF9GT1JXQVJEX01JQl9JUENJRFJST1VURVRBQkxFX0lQQ0lEUlJPVVRFVEFCTEVfTU9EVUxFCi0gICAgaWYgKE5VTEwgIT0gbGhzLT5ydF9pbmZvKQotICAgICAgICBTTk1QX0ZSRUUobGhzLT5ydF9pbmZvKTsKKyAgICBTTk1QX0ZSRUUobGhzLT5ydF9pbmZvKTsKICAgICBpZiAoTlVMTCAhPSByaHMtPnJ0X2luZm8pCiAgICAgICAgIHNubXBfY2xvbmVfbWVtKCh2b2lkICoqKSAmbGhzLT5ydF9pbmZvLCByaHMtPnJ0X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgIHJocy0+cnRfaW5mb19sZW4gKiBzaXplb2Yob2lkKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuYwppbmRleCBkZTQyOTIwLi5mZjg5MTYxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmMKQEAgLTU0LDEyICs1NCw5IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaD4KIAogI2luY2x1ZGUgImlwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaCIKQEAgLTY5LDEwICs2NiwxMCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgogCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKICMgICBkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKICNlbmRpZgotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfSEFTSAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0hBU0gKICMgICBkZWZpbmUgcnRfaGFzaCBydF9wYWQxCiAjZW5kaWYKIApAQCAtMTAxLDcgKzk4LDcgQEAKIAogICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIE5FVFNOTVBfUk9VVEVfV1JJVEVfUFJPVE9DT0wpOwogICAgIGlmIChzIDwgMCkgewotICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInNvY2tldCIpOworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIm5ldHNubXBfaW9jdGxfcm91dGVfc2V0X3Y0OiBzb2NrZXQiKTsKICAgICAgICAgcmV0dXJuIC0zOwogICAgIH0KIApAQCAtMTEwLDcgKzEwNyw3IEBACiAgICAgZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogICAgIG1lbWNweSgmZHN0LnNpbl9hZGRyLnNfYWRkciwgZW50cnktPnJ0X2Rlc3QsIDQpOwogICAgIERFQlVHU1RSID0gaW5ldF9udG9hKGRzdC5zaW5fYWRkcik7Ci0gICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZSIsIioqKiByb3V0ZSB0byAlc1xuIiwgREVCVUdTVFIpKTsKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlIiwiYWRkIHJvdXRlIHRvICVzXG4iLCBERUJVR1NUUikpOwogCiAgICAgZ2F0ZXdheS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgICBtZW1jcHkoJmdhdGV3YXkuc2luX2FkZHIuc19hZGRyLCBlbnRyeS0+cnRfbmV4dGhvcCwgNCk7CkBAIC0xMTgsNyArMTE1LDEwIEBACiAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZSIsIiAgICB2aWEgJXNcbiIsIERFQlVHU1RSKSk7CiAKICAgICBtYXNrLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgIG1hc2suc2luX2FkZHIuc19hZGRyID0gaHRvbmwoMCk7CisgICAgaWYgKGVudHJ5LT5ydF9wZnhfbGVuICE9IDApCisJbWFzay5zaW5fYWRkci5zX2FkZHIgPSBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X21hc2soZW50cnktPnJ0X3BmeF9sZW4pOworICAgIGVsc2UKKwltYXNrLnNpbl9hZGRyLnNfYWRkciA9IGVudHJ5LT5ydF9tYXNrOwogICAgIERFQlVHU1RSID0gaW5ldF9udG9hKG1hc2suc2luX2FkZHIpOwogICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGUiLCIgICAgbWFzayAlc1xuIiwgREVCVUdTVFIpKTsKIApAQCAtMTM3LDMwICsxMzcsMzEgQEAKICNlbmRpZgogCiAgICAgcmMgPSBpb2N0bChzLCBTSU9DQUREUlQsIChjYWRkcl90KSAmIHJvdXRlKTsKLSAgICBjbG9zZShzKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIHNubXBfbG9nX3BlcnJvcigiaW9jdGwiKTsKLSAgICAgICAgcmV0dXJuIC00OworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIm5ldHNubXBfaW9jdGxfcm91dGVfc2V0X3Y0OiBpb2N0bCIpOworICAgICAgICByYyA9IC00OwogICAgIH0KKyAgICBjbG9zZShzKTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiByYzsKIH0KICNlbmRpZgogCiAjaWYgZGVmaW5lZCBTSU9DREVMUlQgJiYgIWRlZmluZWQoaXJpeDYpCiBpbnQgX25ldHNubXBfaW9jdGxfcm91dGVfZGVsZXRlX3Y0KG5ldHNubXBfcm91dGVfZW50cnkgKiBlbnRyeSkKIHsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBkc3QsIG1hc2s7CiAgICAgc3RydWN0IHNvY2thZGRyX2luIGdhdGV3YXk7CiAgICAgaW50ICAgICAgICAgICAgIHMsIHJjOwogICAgIFJURU5UUlkgICAgICAgICByb3V0ZTsKKyAgICBjaGFyICAgICAgICAgICAqREVCVUdTVFI7CiAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGVudHJ5KTsgLyogY2hlY2tlZCBpbiBuZXRzbm1wX2FyY2hfcm91dGVfZGVsZXRlICovCiAgICAgbmV0c25tcF9hc3NlcnQoKDQgPT0gZW50cnktPnJ0X2Rlc3RfbGVuKSAmJiAoNCA9PSBlbnRyeS0+cnRfbmV4dGhvcF9sZW4pKTsKIAogICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIE5FVFNOTVBfUk9VVEVfV1JJVEVfUFJPVE9DT0wpOwogICAgIGlmIChzIDwgMCkgewotICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInNvY2tldCIpOworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIm5ldHNubXBfaW9jdGxfcm91dGVfZGVsZXRlX3Y0OiBzb2NrZXQiKTsKICAgICAgICAgcmV0dXJuIC0zOwogICAgIH0KIApAQCAtMTY4LDExICsxNjksMjAgQEAKIAogICAgIGRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgICBtZW1jcHkoJmRzdC5zaW5fYWRkci5zX2FkZHIsIGVudHJ5LT5ydF9kZXN0LCA0KTsKKyAgICBERUJVR1NUUiA9IGluZXRfbnRvYShkc3Quc2luX2FkZHIpOworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGUiLCJkZWwgcm91dGUgdG8gJXNcbiIsIERFQlVHU1RSKSk7CisKKyAgICBtYXNrLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIGlmIChlbnRyeS0+cnRfcGZ4X2xlbiAhPSAwKQorCW1hc2suc2luX2FkZHIuc19hZGRyID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9tYXNrKGVudHJ5LT5ydF9wZnhfbGVuKTsKKyAgICBlbHNlCisJbWFzay5zaW5fYWRkci5zX2FkZHIgPSBlbnRyeS0+cnRfbWFzazsKIAogICAgIGdhdGV3YXkuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAgbWVtY3B5KCZnYXRld2F5LnNpbl9hZGRyLnNfYWRkciwgZW50cnktPnJ0X25leHRob3AsIDQpOwogCiAgICAgbWVtY3B5KCZyb3V0ZS5ydF9kc3QsICZkc3QsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICBtZW1jcHkoJnJvdXRlLnJ0X2dlbm1hc2ssICZtYXNrLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CiAgICAgbWVtY3B5KCZyb3V0ZS5ydF9nYXRld2F5LCAmZ2F0ZXdheSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwogCiAgICAgaWYgKDMyID09IGVudHJ5LT5ydF9wZnhfbGVuKQpAQCAtMTg2LDExICsxOTYsMTEgQEAKICNlbmRpZgogCiAgICAgcmMgPSBpb2N0bChzLCBTSU9DREVMUlQsIChjYWRkcl90KSAmIHJvdXRlKTsKLSAgICBjbG9zZShzKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIHNubXBfbG9nX3BlcnJvcigiaW9jdGwiKTsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCJuZXRzbm1wX2lvY3RsX3JvdXRlX2RlbGV0ZV92NDogaW9jdGwiKTsKICAgICAgICAgcmMgPSAtNDsKICAgICB9CisgICAgY2xvc2Uocyk7CiAKICAgICByZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYwppbmRleCA2YmY2YjA0Li4wZjgwZmU4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgKiBmZXRjaCByb3V0ZXMgZnJvbSB0aGUgcHJvYyBmaWxlLXN5c3RlbToKICAgICAgKi8KICAgICBpZiAoIShpbiA9IGZvcGVuKCIvcHJvYy9uZXQvcm91dGUiLCAiciIpKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L3JvdXRlXG4iKTsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L3JvdXRlXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKQEAgLTcxLDkgKzcxLDkgQEAKIAogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBjaGFyICAgICAgICAgICAgcnRlbnRfbmFtZVszMl07Ci0gICAgICAgIGludCAgICAgICAgICAgICByZWZjbnQsIGZsYWdzLCByYzsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlZmNudCwgcmM7CiAgICAgICAgIHVpbnQzMl90ICAgICAgICBkZXN0LCBuZXh0aG9wLCBtYXNrOwotICAgICAgICB1bnNpZ25lZCAgICAgICAgdXNlOworICAgICAgICB1bnNpZ25lZCAgICAgICAgZmxhZ3MsIHVzZTsKIAogICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2NyZWF0ZSgpOwogCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAqIEJFIGV0aDAgIDAwMDAwMDAwIEMwQTgwMTAxIDAwMDMgIDAgICAgICAwICAgMCAgIEZGRkZGRkZGIDE1MDAgMCAgIDAgCiAgICAgICAgICAqIExFIGV0aDAgIDAwMDAwMDAwIDAxMDFBOEMwIDAwMDMgIDAgICAgICAwICAgMCAgIDAwRkZGRkZGICAgIDAgMCAgIDAgIAogICAgICAgICAgKi8KLSAgICAgICAgcmMgPSBzc2NhbmYobGluZSwgIiVzICV4ICV4ICV4ICV1ICVkICVkICV4ICUqZCAlKmQgJSpkXG4iLAorICAgICAgICByYyA9IHNzY2FuZihsaW5lLCAiJXMgJXggJXggJXggJWQgJXUgJWQgJXggJSpkICUqZCAlKmRcbiIsCiAgICAgICAgICAgICAgICAgICAgIHJ0ZW50X25hbWUsICZkZXN0LCAmbmV4dGhvcCwKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogWFhYOiBmaXggdHlwZSBvZiB0aGUgYXJncyAKQEAgLTE2MSwxMiArMTYxLDEyIEBACiAgICAgICAgICAqIGFzIHRoZSBwb2xpY3ksIHRvIGRpc3Rpbmd1aXNlIGJldHdlZW4gdGhlbS4gSG9wZWZ1bGx5IHRoaXMgaXMKICAgICAgICAgICogdW5pcXVlLgogICAgICAgICAgKiB4eHgtcmtzOiBJdCBzaG91bGQgcmVhbGx5IG9ubHkgYmUgZm9yIHRoZSBkdXBsaWNhdGUgY2FzZSwgYnV0IHRoYXQKLSAgICAgICAgICogICAgIHdvdWxkIGJlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbkkgd2FudCB0byBnZXQgaW50byBub3cuIEZpeCBsYXRlci4KKyAgICAgICAgICogICAgIHdvdWxkIGJlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBJIHdhbnQgdG8gZ2V0IGludG8gbm93LiBGaXggbGF0ZXIuCiAgICAgICAgICAqLwogICAgICAgICBpZiAoMCA9PSBuZXh0aG9wKSB7Ci0gICAgICAgICAgICBlbnRyeS0+cnRfcG9saWN5ID0gJmVudHJ5LT5pZl9pbmRleDsKLSAgICAgICAgICAgIGVudHJ5LT5ydF9wb2xpY3lfbGVuID0gMTsKLSAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0FDQ0VTU19ST1VURV9QT0xJQ1lfU1RBVElDOworICAgICAgICAgICAgZW50cnktPnJ0X3BvbGljeSA9IGNhbGxvYygzLCBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBlbnRyeS0+cnRfcG9saWN5WzJdID0gZW50cnktPmlmX2luZGV4OworICAgICAgICAgICAgZW50cnktPnJ0X3BvbGljeV9sZW4gPSBzaXplb2Yob2lkKSozOwogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMjAxLDcgKzIwMSw2IEBACiAgICAgRklMRSAgICAgICAgICAgKmluOwogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzI1Nl07CiAgICAgbmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkgPSBOVUxMOwotICAgIHN0YXRpYyBpbnQgICAgICBsb2dfb3Blbl9lcnIgPSAxOwogCiAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZTpjb250YWluZXIiLAogICAgICAgICAgICAgICAgICJyb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkIGlwdjZcbiIpKTsKQEAgLTIxMiwxOCArMjExLDEwIEBACiAgICAgICogZmV0Y2ggcm91dGVzIGZyb20gdGhlIHByb2MgZmlsZS1zeXN0ZW06CiAgICAgICovCiAgICAgaWYgKCEoaW4gPSBmb3BlbigiL3Byb2MvbmV0L2lwdjZfcm91dGUiLCAiciIpKSkgewotICAgICAgICBpZiAoMSA9PSBsb2dfb3Blbl9lcnIpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvaXB2Nl9yb3V0ZVxuIik7Ci0gICAgICAgICAgICBsb2dfb3Blbl9lcnIgPSAwOwotICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCI5OmFjY2Vzczpyb3V0ZTpjb250YWluZXIiLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L2lwdjZfcm91dGVcbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KLSAgICAvKgotICAgICAqIGlmIHdlIHR1cm5lZCBvZmYgbG9nZ2luZyBvZiBvcGVuIGVycm9ycywgdHVybiBpdCBiYWNrIG9uIG5vdyB0aGF0Ci0gICAgICogd2UgaGF2ZSBiZWVuIGFibGUgdG8gb3BlbiB0aGUgZmlsZS4KLSAgICAgKi8KLSAgICBpZiAoMCA9PSBsb2dfb3Blbl9lcnIpCi0gICAgICAgIGxvZ19vcGVuX2VyciA9IDE7CisgICAgCiAgICAgZmdldHMobGluZSxzaXplb2YobGluZSksaW4pOyAvKiBza2lwIGhlYWRlciAqLwogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBjaGFyICAgICAgICAgICAgY19uYW1lW0lGTkFNU0laKzFdOwpAQCAtMzIwLDExICszMTEsMTEgQEAKICAgICAgICAgLyoKICAgICAgICAgICogb24gbGludXgsIGRlZmF1bHQgcm91dGVzIGFsbCBsb29rIGFsaWtlLCBhbmQgd291bGQgaGF2ZSB0aGUgc2FtZQogICAgICAgICAgKiBpbmRleGVkIGJhc2VkIG9uIGRlc3QgYW5kIG5leHQgaG9wLiBTbyB3ZSB1c2Ugb3VyIGFyYml0cmFyeSBpbmRleAotICAgICAgICAgKiBhcyB0aGUgcG9saWN5LCB0byBkaXN0aW5ndWlzZSBiZXR3ZWVuIHRoZW0uCisgICAgICAgICAqIGFzIHRoZSBwb2xpY3ksIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbS4KICAgICAgICAgICovCi0gICAgICAgIGVudHJ5LT5ydF9wb2xpY3kgPSAmZW50cnktPm5zX3J0X2luZGV4OwotICAgICAgICBlbnRyeS0+cnRfcG9saWN5X2xlbiA9IDE7Ci0gICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0FDQ0VTU19ST1VURV9QT0xJQ1lfU1RBVElDOworICAgICAgICBlbnRyeS0+cnRfcG9saWN5ID0gY2FsbG9jKDMsIHNpemVvZihvaWQpKTsKKyAgICAgICAgZW50cnktPnJ0X3BvbGljeVsyXSA9IGVudHJ5LT5uc19ydF9pbmRleDsKKyAgICAgICAgZW50cnktPnJ0X3BvbGljeV9sZW4gPSBzaXplb2Yob2lkKSozOwogI2VuZGlmCiAKICAgICAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3NvbGFyaXMuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3NvbGFyaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhhZDIyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc29sYXJpcy5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorCisjaW5jbHVkZSA8aW5ldC9pcC5oPgorI2luY2x1ZGUgPGluZXQvbWliMi5oPgorCisjaW5jbHVkZSAiaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuaCIKKyNpbmNsdWRlICJpcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuaCIKKworc3RhdGljIGludCBfbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2xvbmcgKmNvdW50KTsKK3N0YXRpYyBpbnQgX2xvYWRfdjYobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9sb25nICpjb3VudCk7CisKKy8qKiBhcmNoIHNwZWNpZmljIGxvYWQKKyAqIEBpbnRlcm5hbAorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBubyBjb250YWluZXIgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBvcGVuIGRhdGEgZmlsZQorICovCitpbnQKK25ldHNubXBfYWNjZXNzX3JvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICB1X2xvbmcgICAgICAgICAgY291bnQgPSAwOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19yb3V0ZVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYyA9IF9sb2FkX3Y0KGNvbnRhaW5lciwgJmNvdW50KTsKKyAgICAKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgaWYoKDAgIT0gcmMpIHx8IChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfUk9VVEVfTE9BRF9JUFY0X09OTFkpKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKgorICAgICAqIGxvYWQgaXB2Ni4gaXB2NiBtb2R1bGUgbWlnaHQgbm90IGJlIGxvYWRlZCwKKyAgICAgKiBzbyBpZ25vcmUgLTIgZXJyIChmaWxlIG5vdCBmb3VuZCkKKyAgICAgKi8KKyAgICByYyA9IF9sb2FkX3Y2KGNvbnRhaW5lciwgJmNvdW50KTsKKyAgICBpZiAoLTIgPT0gcmMpCisgICAgICAgIHJjID0gMDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogY3JlYXRlIGEgbmV3IGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3JvdXRlX2NyZWF0ZShuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKDQgIT0gZW50cnktPnJ0X2Rlc3RfbGVuKSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2Vzczpyb3V0ZTpjcmVhdGUiLCAib25seSBpcHY0IHN1cHBvcnRlZFxuIikpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgLyogcmV0dXJuIF9uZXRzbm1wX2lvY3RsX3JvdXRlX3NldF92NChlbnRyeSk7ICovCisgICAgcmV0dXJuIC0yOworfQorCisvKgorICogY3JlYXRlIGEgbmV3IGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3JvdXRlX2RlbGV0ZShuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKDQgIT0gZW50cnktPnJ0X2Rlc3RfbGVuKSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2Vzczpyb3V0ZTpjcmVhdGUiLCAib25seSBpcHY0IHN1cHBvcnRlZFxuIikpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgLyogcmV0dXJuIF9uZXRzbm1wX2lvY3RsX3JvdXRlX2RlbGV0ZV92NChlbnRyeSk7ICovCisgICAgcmV0dXJuIC0yOworfQorCisKK3N0YXRpYyBpbnQKK0lQX0NtcF9Sb3V0ZSh2b2lkICphZGRyLCB2b2lkICplcCkKK3sKKyAgICBtaWIyX2lwUm91dGVFbnRyeV90ICpFcCA9IGVwLCAqQWRkciA9IGFkZHI7CisKKyAgICBpZiAoKEVwLT5pcFJvdXRlRGVzdCA9PSBBZGRyLT5pcFJvdXRlRGVzdCkgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlTmV4dEhvcCA9PSBBZGRyLT5pcFJvdXRlTmV4dEhvcCkgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlVHlwZSA9PSBBZGRyLT5pcFJvdXRlVHlwZSkgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlUHJvdG8gPT0gQWRkci0+aXBSb3V0ZVByb3RvKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVNYXNrID09IEFkZHItPmlwUm91dGVNYXNrKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX21heF9mcmFnID09IEFkZHItPmlwUm91dGVJbmZvLnJlX21heF9mcmFnKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX3J0dCA9PSBBZGRyLT5pcFJvdXRlSW5mby5yZV9ydHQpICYmCisgICAgICAgIChFcC0+aXBSb3V0ZUluZm8ucmVfcmVmID09IEFkZHItPmlwUm91dGVJbmZvLnJlX3JlZikgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlSW5mby5yZV9mcmFnX2ZsYWcgPT0gQWRkci0+aXBSb3V0ZUluZm8ucmVfZnJhZ19mbGFnKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX3NyY19hZGRyID09IEFkZHItPmlwUm91dGVJbmZvLnJlX3NyY19hZGRyKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX2lyZV90eXBlID09IEFkZHItPmlwUm91dGVJbmZvLnJlX2lyZV90eXBlKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX29icGt0ID09IEFkZHItPmlwUm91dGVJbmZvLnJlX29icGt0KSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX2licGt0ID09IEFkZHItPmlwUm91dGVJbmZvLnJlX2licGt0KQorICAgICAgICApCisgICAgICAgIHJldHVybiAoMCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gKDEpOyAgICAgICAgICAgICAvKiBOb3QgZm91bmQgKi8KK30KKworCitzdGF0aWMgaW50CitJUDZfQ21wX1JvdXRlKHZvaWQgKmFkZHIsIHZvaWQgKmVwKQoreworICAgIG1pYjJfaXB2NlJvdXRlRW50cnlfdCAqRXAgPSBlcCwgKkFkZHIgPSBhZGRyOworCisgICAgaWYgKChtZW1jbXAoJkVwLT5pcHY2Um91dGVEZXN0LCAmQWRkci0+aXB2NlJvdXRlRGVzdCwgMTYpID09IDApICYmCisgICAgICAgIChtZW1jbXAoJkVwLT5pcHY2Um91dGVOZXh0SG9wLCAmQWRkci0+aXB2NlJvdXRlTmV4dEhvcCwgMTYpID09IDApICYmCisgICAgICAgIChFcC0+aXB2NlJvdXRlVHlwZSA9PSBBZGRyLT5pcHY2Um91dGVUeXBlKSAmJgorICAgICAgICAoRXAtPmlwdjZSb3V0ZUluZm8ucmVfbWF4X2ZyYWcgPT0gQWRkci0+aXB2NlJvdXRlSW5mby5yZV9tYXhfZnJhZykgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX3J0dCA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX3J0dCkgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX3JlZiA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX3JlZikgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX2ZyYWdfZmxhZyA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX2ZyYWdfZmxhZykgJiYKKyAgICAgICAgKG1lbWNtcCgmRXAtPmlwdjZSb3V0ZUluZm8ucmVfc3JjX2FkZHIsICZBZGRyLT5pcHY2Um91dGVJbmZvLnJlX3NyY19hZGRyLCAxNikgPT0gMCkgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX2lyZV90eXBlID09IEFkZHItPmlwdjZSb3V0ZUluZm8ucmVfaXJlX3R5cGUpICYmCisgICAgICAgIChFcC0+aXB2NlJvdXRlSW5mby5yZV9vYnBrdCA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX29icGt0KSAmJgorICAgICAgICAoRXAtPmlwdjZSb3V0ZUluZm8ucmVfaWJwa3QgPT0gQWRkci0+aXB2NlJvdXRlSW5mby5yZV9pYnBrdCkKKyAgICAgICAgKQorICAgICAgICByZXR1cm4gKDApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgLyogTm90IGZvdW5kICovCit9CisKKworc3RhdGljIGludCBfbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2xvbmcgKmNvdW50KQoreworICAgIG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5OworICAgIG1pYjJfaXBSb3V0ZUVudHJ5X3QgQ3VyZW50cnksIE5leHRlbnRyeTsKKyAgICBpbnQgcmVxX3R5cGU7CisKKyAgICBmb3IgKE5leHRlbnRyeS5pcFJvdXRlRGVzdCA9ICh1X2xvbmcpIC0yLCByZXFfdHlwZSA9IEdFVF9GSVJTVDs7CisgICAgICAgICAgICAgTmV4dGVudHJ5ID0gQ3VyZW50cnksIHJlcV90eXBlID0gR0VUX05FWFQpIHsKKwlpZiAoZ2V0TWlic3RhdChNSUJfSVBfUk9VVEUsICZDdXJlbnRyeSwgc2l6ZW9mKG1pYjJfaXBSb3V0ZUVudHJ5X3QpLAorCQkgICAgICAgcmVxX3R5cGUsICZJUF9DbXBfUm91dGUsICZOZXh0ZW50cnkpICE9IDApCisJICAgIGJyZWFrOworI2lmZGVmIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUKKwlpZiAoQ3VyZW50cnkuaXBSb3V0ZUluZm8ucmVfaXJlX3R5cGUgJiBJUkVfQ0FDSEUpCisJICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUgKi8KKwlpZiAoQ3VyZW50cnkuaXBSb3V0ZUluZm8ucmVfaXJlX3R5cGUgJiBJUkVfQlJPQURDQVNUKQorCSAgICBjb250aW51ZTsKKwllbnRyeSA9IG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2NyZWF0ZSgpOworCUN1cmVudHJ5LmlwUm91dGVJZkluZGV4Lm9fYnl0ZXNbQ3VyZW50cnkuaXBSb3V0ZUlmSW5kZXgub19sZW5ndGhdID0gJ1wwJzsKKwllbnRyeS0+aWZfaW5kZXggPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW5kZXhfZmluZCgKKyAgICAgICAgICAgICAgICBDdXJlbnRyeS5pcFJvdXRlSWZJbmRleC5vX2J5dGVzKTsKKwllbnRyeS0+bnNfcnRfaW5kZXggPSBlbnRyeS0+aWZfaW5kZXg7CisKKwllbnRyeS0+cnRfZGVzdF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisJZW50cnktPnJ0X2Rlc3RfbGVuID0gNDsKKwltZW1jcHkoZW50cnktPnJ0X2Rlc3QsICZDdXJlbnRyeS5pcFJvdXRlRGVzdCwgNCk7CisJbWVtY3B5KCZlbnRyeS0+cnRfbWFzaywgJkN1cmVudHJ5LmlwUm91dGVNYXNrLCA0KTsKKworCWVudHJ5LT5ydF9uZXh0aG9wX3R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNDsKKwllbnRyeS0+cnRfbmV4dGhvcF9sZW4gPSA0OworCW1lbWNweShlbnRyeS0+cnRfbmV4dGhvcCwgJkN1cmVudHJ5LmlwUm91dGVOZXh0SG9wLCA0KTsKKworCWVudHJ5LT5ydF9wZnhfbGVuID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuKEN1cmVudHJ5LmlwUm91dGVNYXNrKTsKKwllbnRyeS0+cnRfdHlwZSA9IEN1cmVudHJ5LmlwUm91dGVUeXBlOworCWVudHJ5LT5ydF9wcm90byA9IEN1cmVudHJ5LmlwUm91dGVQcm90bzsKKwllbnRyeS0+cnRfYWdlID0gQ3VyZW50cnkuaXBSb3V0ZUFnZTsKKwllbnRyeS0+cnRfbWV0cmljMSA9IEN1cmVudHJ5LmlwUm91dGVNZXRyaWMxOworCWVudHJ5LT5ydF9tZXRyaWMyID0gQ3VyZW50cnkuaXBSb3V0ZU1ldHJpYzI7CisJZW50cnktPnJ0X21ldHJpYzMgPSBDdXJlbnRyeS5pcFJvdXRlTWV0cmljMzsKKwllbnRyeS0+cnRfbWV0cmljNCA9IEN1cmVudHJ5LmlwUm91dGVNZXRyaWM0OworCisJLyoKKwkgKiBpbnNlcnQgaW50byBjb250YWluZXIKKwkgKi8KKwlpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKwkgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZTpjb250YWluZXIiLCAiZXJyb3Igd2l0aCByb3V0ZV9lbnRyeTogaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKwkgICAgbmV0c25tcF9hY2Nlc3Nfcm91dGVfZW50cnlfZnJlZShlbnRyeSk7CisJICAgIGNvbnRpbnVlOworCX0KKwkqY291bnQrKzsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfbG9hZF92NihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2xvbmcgKmNvdW50KQoreworICAgIG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5OworICAgIG1pYjJfaXB2NlJvdXRlRW50cnlfdCBDdXJlbnRyeSwgTmV4dGVudHJ5OworICAgIGludCByZXFfdHlwZTsKKworICAgIG1lbXNldCgmTmV4dGVudHJ5LCAwLCBzaXplb2YoTmV4dGVudHJ5KSk7CisgICAgZm9yIChyZXFfdHlwZSA9IEdFVF9GSVJTVDs7CisgICAgICAgICAgICAgTmV4dGVudHJ5ID0gQ3VyZW50cnksIHJlcV90eXBlID0gR0VUX05FWFQpIHsKKwlpZiAoZ2V0TWlic3RhdChNSUJfSVA2X1JPVVRFLCAmQ3VyZW50cnksIHNpemVvZihtaWIyX2lwdjZSb3V0ZUVudHJ5X3QpLAorCQkgICAgICAgcmVxX3R5cGUsICZJUDZfQ21wX1JvdXRlLCAmTmV4dGVudHJ5KSAhPSAwKQorCSAgICBicmVhazsKKyNpZmRlZiBIQVZFX0RFRklORURfSVJFX0NBQ0hFCisJaWYgKEN1cmVudHJ5LmlwdjZSb3V0ZUluZm8ucmVfaXJlX3R5cGUgJiBJUkVfQ0FDSEUpCisJICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUgKi8KKwlpZiAoQ3VyZW50cnkuaXB2NlJvdXRlSW5mby5yZV9pcmVfdHlwZSAmIElSRV9CUk9BRENBU1QpCisJICAgIGNvbnRpbnVlOworCWVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfcm91dGVfZW50cnlfY3JlYXRlKCk7CisJQ3VyZW50cnkuaXB2NlJvdXRlSWZJbmRleC5vX2J5dGVzW0N1cmVudHJ5LmlwdjZSb3V0ZUlmSW5kZXgub19sZW5ndGhdID0gJ1wwJzsKKwllbnRyeS0+aWZfaW5kZXggPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW5kZXhfZmluZCgKKyAgICAgICAgICAgICAgICBDdXJlbnRyeS5pcHY2Um91dGVJZkluZGV4Lm9fYnl0ZXMpOworCWVudHJ5LT5uc19ydF9pbmRleCA9IGVudHJ5LT5pZl9pbmRleDsKKworCWVudHJ5LT5ydF9kZXN0X3R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNjsKKwllbnRyeS0+cnRfZGVzdF9sZW4gPSAxNjsKKwltZW1jcHkoZW50cnktPnJ0X2Rlc3QsICZDdXJlbnRyeS5pcHY2Um91dGVEZXN0LCAxNik7CisKKwllbnRyeS0+cnRfbmV4dGhvcF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjY7CisJZW50cnktPnJ0X25leHRob3BfbGVuID0gMTY7CisJbWVtY3B5KGVudHJ5LT5ydF9uZXh0aG9wLCAmQ3VyZW50cnkuaXB2NlJvdXRlTmV4dEhvcCwgMTYpOworCisJZW50cnktPnJ0X3BmeF9sZW4gPSBDdXJlbnRyeS5pcHY2Um91dGVQZnhMZW5ndGg7CisJZW50cnktPnJ0X3R5cGUgPSBDdXJlbnRyeS5pcHY2Um91dGVUeXBlOworCWVudHJ5LT5ydF9wcm90byA9IEN1cmVudHJ5LmlwdjZSb3V0ZVByb3RvY29sOworCWVudHJ5LT5ydF9hZ2UgPSBDdXJlbnRyeS5pcHY2Um91dGVBZ2U7CisJZW50cnktPnJ0X3BvbGljeSA9IGNhbGxvYygzLCBzaXplb2Yob2lkKSk7CisJZW50cnktPnJ0X3BvbGljeV9sZW4gPSAzOworCWVudHJ5LT5ydF9wb2xpY3lbMl0gPSBDdXJlbnRyeS5pcHY2Um91dGVQb2xpY3k7CisJZW50cnktPnJ0X21ldHJpYzEgPSBDdXJlbnRyeS5pcHY2Um91dGVNZXRyaWM7CisJZW50cnktPnJ0X21ldHJpYzIgPSBDdXJlbnRyeS5pcHY2Um91dGVXZWlnaHQ7CisKKwkvKgorCSAqIGluc2VydCBpbnRvIGNvbnRhaW5lcgorCSAqLworCWlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgeworCSAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsICJlcnJvciB3aXRoIHJvdXRlX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworCSAgICBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9lbnRyeV9mcmVlKGVudHJ5KTsKKwkgICAgY29udGludWU7CisJfQorCSpjb3VudCsrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmOTI2YgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bC5jCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgorCisjaW5jbHVkZSAiaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmgiCisjaW5jbHVkZSAiaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmgiCisKK3N0YXRpYyBpbnQgX2xvYWRfaXB2NChuZXRzbm1wX2NvbnRhaW5lciosIGludCopOworc3RhdGljIGludCBfbG9hZF9pcHY2KG5ldHNubXBfY29udGFpbmVyKiwgaW50Kik7CitzdGF0aWMgaW50IF9jcmVhdGVfaXB2NChuZXRzbm1wX3JvdXRlX2VudHJ5ICopOworc3RhdGljIGludCBfY3JlYXRlX2lwdjYobmV0c25tcF9yb3V0ZV9lbnRyeSAqKTsKK3N0YXRpYyBpbnQgX2RlbGV0ZV9pcHY0KG5ldHNubXBfcm91dGVfZW50cnkgKik7CitzdGF0aWMgaW50IF9kZWxldGVfaXB2NihuZXRzbm1wX3JvdXRlX2VudHJ5ICopOworCisjaWYgIWRlZmluZWQoU0FfU0laRSkgJiYgIWRlZmluZWQoUlRfUk9VTkRVUCkKKyNkZWZpbmUgUlRfUk9VTkRVUChhKSAgXAorICAgICAgICAoKGEpID4gMCA/ICgxICsgKCgoYSkgLSAxKSB8IChzaXplb2YobG9uZykgLSAxKSkpIDogc2l6ZW9mKGxvbmcpKQorI2VuZGlmCisjaWZuZGVmIFNBX1NJWkUKKyNkZWZpbmUgU0FfU0laRSh4KSBSVF9ST1VORFVQKCgoc3RydWN0IHNvY2thZGRyICopKHgpKS0+c2FfbGVuKQorI2VuZGlmCisKKy8qKiBhcmNoIHNwZWNpZmljIGxvYWQKKyAqIEBpbnRlcm5hbAorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBubyBjb250YWluZXIgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19yb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisJCQkJCSB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCBjb3VudCwgZXJyOworCisgICAgZXJyID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwgInJvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWRcbiIpKTsKKworICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3JvdXRlXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGVyciA9IF9sb2FkX2lwdjQoY29udGFpbmVyLCAmY291bnQpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJfbG9hZF9pcHY0IGZhaWxlZCAlZFxuIiwgZXJyKSk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChlcnIgIT0gMCB8fCBsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfUk9VVEVfTE9BRF9JUFY0X09OTFkpCisJcmV0dXJuIGVycjsKKworICAgIGVyciA9IF9sb2FkX2lwdjYoY29udGFpbmVyLCAmY291bnQpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJfbG9hZF9pcHY2IGZhaWxlZCAlZFxuIiwgZXJyKSk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworb3V0OgorICAgIHJldHVybiAoZXJyID09IDAgPyAwIDogLTMpOworfQorCisvKiogYXJjaCBzcGVjaWZpYyBuZXcgcm91dGUgZW50cnkgY3JlYXRpb24KKyAqIEBpbnRlcm5hbAorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBpbnZhbGlkIGVudHJ5IHNwZWNpZmllZAorICogQHJldHZhbCAtMiBjb3VsZCBub3QgY3JlYXRlIHJvdXRlIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3JvdXRlX2NyZWF0ZShuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpbnQgZXJyOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAoZW50cnktPnJ0X2Rlc3RfdHlwZSkgeworICAgIGNhc2UgSU5FVEFERFJFU1NUWVBFX0lQVjQ6CisgICAgICAgIGVyciA9IF9jcmVhdGVfaXB2NChlbnRyeSk7CisgICAgICAgIGJyZWFrOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBjYXNlIElORVRBRERSRVNTVFlQRV9JUFY2OgorICAgICAgICBlcnIgPSBfY3JlYXRlX2lwdjYoZW50cnkpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGVyciA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIChlcnIgPT0gMCA/IDAgOiAtMik7Cit9CisKKy8qKiBhcmNoIHNwZWNpZmljIG5ldyByb3V0ZSBlbnRyeSBkZWxldGlvbgorICogQGludGVybmFsCisgKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGludmFsaWQgZW50cnkgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBkZWxldGUgcm91dGUgZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfcm91dGVfZGVsZXRlKG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5KQoreworICAgIGludCBlcnI7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInJvdXRlX2NvbnRhaW5lcl9hcmNoX2RlbGV0ZVxuIikpOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAoZW50cnktPnJ0X2Rlc3RfdHlwZSkgeworICAgIGNhc2UgSU5FVEFERFJFU1NUWVBFX0lQVjQ6CisgICAgICAgIGVyciA9IF9kZWxldGVfaXB2NChlbnRyeSk7CisgICAgICAgIGJyZWFrOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBjYXNlIElORVRBRERSRVNTVFlQRV9JUFY2OgorICAgICAgICBlcnIgPSBfZGVsZXRlX2lwdjYoZW50cnkpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGVyciA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIChlcnIgPT0gMCA/IDAgOiAtMik7Cit9CisKKyNpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKG5ldGJzZDQpIHx8IGRlZmluZWQob3BlbmJzZCkgfHwgZGVmaW5lZChkYXJ3aW4pCitzdGF0aWMgaW50CitfdHlwZV9mcm9tX2ZsYWdzKGludCBmbGFncykKK3sKKyAgICBpZiAoZmxhZ3MgJiBSVEZfVVApIHsKKyAgICAgICAgaWYgKGZsYWdzICYgUlRGX0JMQUNLSE9MRSkKKyAgICAgICAgICAgIHJldHVybiBJTkVUQ0lEUlJPVVRFVFlQRV9SRUpFQ1Q7CisjaWZkZWYgUlRGX0xPQ0FMCisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgUlRGX0xPQ0FMKQorICAgICAgICAgICAgcmV0dXJuIElORVRDSURSUk9VVEVUWVBFX0xPQ0FMOworI2VuZGlmCisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgUlRGX0dBVEVXQVkpCisgICAgICAgICAgICByZXR1cm4gSU5FVENJRFJST1VURVRZUEVfUkVNT1RFOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gSU5FVENJRFJST1VURVRZUEVfT1RIRVI7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK19sb2FkX3JvdXRpbmdfdGFibGVfZnJvbV9zeXNjdGwobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgaW50ICppbmRleCwKKyAgICBpbnQgZmFtaWx5KQoreworICAgIGNoYXIgKmJ1ZiwgKmxpbSwgKm5leHQ7CisgICAgaW50IG1pYls2XTsKKyAgICBzaXplX3QgbmVlZGVkOworICAgIGludCBlcnI7CisgICAgdV9jaGFyIGRlc3RfbGVuLCBkZXN0X3R5cGU7CisgICAgc3RydWN0IHJ0X21zZ2hkciAqcnRtOworCisgICAgYnVmID0gTlVMTDsKKyAgICBlcnIgPSAwOworCisgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgIGRlc3RfbGVuID0gNDsKKyAgICAgICAgZGVzdF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisgICAgfSBlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgZGVzdF9sZW4gPSAxNjsKKyAgICAgICAgZGVzdF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjY7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0gRUlOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBtaWJbMF0gPSBDVExfTkVUOworICAgIG1pYlsxXSA9IFBGX1JPVVRFOworICAgIG1pYlsyXSA9IDA7CisgICAgbWliWzNdID0gZmFtaWx5OworICAgIG1pYls0XSA9IE5FVF9SVF9EVU1QOworICAgIG1pYls1XSA9IDA7CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgKHNpemVvZihtaWIpIC8gc2l6ZW9mKG1pYlswXSkpLCBOVUxMLCAmbmVlZGVkLCBOVUxMLAorICAgICAgICAwKSA9PSAtMSkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKChidWYgPSBtYWxsb2MobmVlZGVkKSkgPT0gTlVMTCkgeworICAgICAgICBlcnIgPSBFTk9NRU07CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChzeXNjdGwobWliLCAoc2l6ZW9mKG1pYikgLyBzaXplb2YobWliWzBdKSksIGJ1ZiwgJm5lZWRlZCwgTlVMTCwKKyAgICAgICAgMCkgPT0gLTEpIHsKKyAgICAgICAgZXJyID0gZXJybm87CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGxpbSA9IGJ1ZiArIG5lZWRlZDsKKworICAgIGZvciAobmV4dCA9IGJ1ZjsgbmV4dCA8IGxpbTsgbmV4dCArPSBydG0tPnJ0bV9tc2dsZW4pIHsgICAgCisJc3RydWN0IHNvY2thZGRyICppZl9uYW1lID0gTlVMTCwgKmlmX2FkZHIgPSBOVUxMOworCXN0cnVjdCBzb2NrYWRkciAqZGVzdF9zYSA9IE5VTEwsICpnYXRld2F5X3NhID0gTlVMTCwgKm5ldG1hc2tfc2EgPSBOVUxMOworCW5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5OworCWNoYXIgKmFkZHJfcHRyOworCisgICAgICAgIHJ0bSA9IChzdHJ1Y3QgcnRfbXNnaGRyKiluZXh0OworCisgICAgICAgIC8qIAorICAgICAgICAgKiBTb21lIGNvZGUgaW4gbmV0c3RhdCBjaGVja3MgZm9yIHRoaXMgKCJuZXRtYXNrcyBkb25lIiBjYXNlKS4KKyAgICAgICAgICogRmlsdGVyIHRoaXMgb3V0IChJIGRvbid0IGtub3cgd2h5IGl0IHNob3VsZCBleGlzdCkuCisgICAgICAgICAqLworICAgICAgICBpZiAocnRtLT5ydG1fYWRkcnMgPT0gUlRBX0RTVCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfcm91dGVfZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICBtZW1zZXQoZW50cnktPnJ0X2Rlc3QsIDAsIGRlc3RfbGVuKTsKKyAgICAgICAgZW50cnktPnJ0X21hc2sgPSAwOworICAgICAgICBtZW1zZXQoZW50cnktPnJ0X25leHRob3AsIDAsIGRlc3RfbGVuKTsKKworICAgICAgICBhZGRyX3B0ciA9IChjaGFyICopKHJ0bSArIDEpOworCisJaWYgKHJ0bS0+cnRtX2FkZHJzICYgIFJUQV9EU1QpIHsKKwkgICAgZGVzdF9zYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyX3B0cjsKKwkgICAgYWRkcl9wdHIgKz0gU0FfU0laRShkZXN0X3NhKTsKKwl9CisJaWYgKHJ0bS0+cnRtX2FkZHJzICYgIFJUQV9HQVRFV0FZKSB7CisJICAgIGdhdGV3YXlfc2EgPSAoc3RydWN0IHNvY2thZGRyICopYWRkcl9wdHI7CisJICAgIGFkZHJfcHRyICs9IFNBX1NJWkUoZ2F0ZXdheV9zYSk7CisJfQorCWlmIChydG0tPnJ0bV9hZGRycyAmICBSVEFfTkVUTUFTSykgeworCSAgICBuZXRtYXNrX3NhID0gKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJfcHRyOworCSAgICBhZGRyX3B0ciArPSBTQV9TSVpFKG5ldG1hc2tfc2EpOworCX0KKwlpZiAocnRtLT5ydG1fYWRkcnMgJiAgUlRBX0lGUCkgeworCSAgICBpZl9uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJfcHRyOworCSAgICBhZGRyX3B0ciArPSBTQV9TSVpFKGlmX25hbWUpOworCX0KKwlpZiAocnRtLT5ydG1fYWRkcnMgJiAgUlRBX0lGQSkgeworCSAgICBpZl9hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJfcHRyOworCSAgICBhZGRyX3B0ciArPSBTQV9TSVpFKGlmX2FkZHIpOworCX0KKworICAgICAgICBlbnRyeS0+aWZfaW5kZXggPSBydG0tPnJ0bV9pbmRleDsKKworICAgICAgICAvKiBhcmJpdHJhcnkgaW5kZXggKi8KKyAgICAgICAgZW50cnktPm5zX3J0X2luZGV4ID0gKysoKmluZGV4KTsKKworICAgICAgICAvKiBjb3B5IGRlc3QgJiBuZXh0IGhvcCAqLworICAgICAgICBlbnRyeS0+cnRfZGVzdF90eXBlID0gZGVzdF90eXBlOworICAgICAgICBlbnRyeS0+cnRfZGVzdF9sZW4gPSBkZXN0X2xlbjsKKyAgICAgICAgaWYgKHJ0bS0+cnRtX2FkZHJzICYgUlRBX0RTVCkgeworICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cnRfZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luKilkZXN0X3NhKS0+c2luX2FkZHIsIGRlc3RfbGVuKTsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KQorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cnRfZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiopZGVzdF9zYSktPnNpbjZfYWRkciwgZGVzdF9sZW4pOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+cnRfbmV4dGhvcF90eXBlID0gZGVzdF90eXBlOworICAgICAgICBlbnRyeS0+cnRfbmV4dGhvcF9sZW4gPSBkZXN0X2xlbjsKKyAgICAgICAgaWYgKHJ0bS0+cnRtX2FkZHJzICYgUlRBX0dBVEVXQVkpIHsKKyAgICAgICAgICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnJ0X25leHRob3AsCisgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiopZ2F0ZXdheV9zYSktPnNpbl9hZGRyLCBkZXN0X2xlbik7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnJ0X25leHRob3AsCisgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYqKWdhdGV3YXlfc2EpLT5zaW42X2FkZHIsIGRlc3RfbGVuKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cnRfbmV4dGhvcCwKKyAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luKilpZl9hZGRyKS0+c2luX2FkZHIsIGRlc3RfbGVuKTsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KQorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cnRfbmV4dGhvcCwKKyAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiopaWZfYWRkciktPnNpbjZfYWRkciwgZGVzdF9sZW4pOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpIHsKKwkgICAgaWYgKG5ldG1hc2tfc2EpIHsKKyAgICAgICAgICAgIC8qIGNvdW50IGJpdHMgaW4gbWFzayAqLworCQllbnRyeS0+cnRfcGZ4X2xlbiA9IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbigKKwkJCSgoc3RydWN0IHNvY2thZGRyX2luICopbmV0bWFza19zYSktPnNpbl9hZGRyLnNfYWRkcik7CisJCW1lbWNweSgmZW50cnktPnJ0X21hc2ssICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5ldG1hc2tfc2EpLT5zaW5fYWRkciwgNCk7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWVudHJ5LT5ydF9wZnhfbGVuID0gMzI7CisJICAgIH0KKyAgICAgICAgfQorI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikgeworCSAgICBpZiAobmV0bWFza19zYSkgeworICAgICAgICAgICAgLyogY291bnQgYml0cyBpbiBtYXNrICovCisJCWVudHJ5LT5ydF9wZnhfbGVuID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2Nl9wcmVmaXhfbGVuKAorCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopbmV0bWFza19zYSktPnNpbjZfYWRkcik7CisJCW1lbWNweSgmZW50cnktPnJ0X21hc2ssICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiluZXRtYXNrX3NhKS0+c2luNl9hZGRyLCAxNik7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWVudHJ5LT5ydF9wZnhfbGVuID0gMTI4OworCSAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCisjaWZkZWYgVVNJTkdfSVBfRk9SV0FSRF9NSUJfSU5FVENJRFJST1VURVRBQkxFX0lORVRDSURSUk9VVEVUQUJMRV9NT0RVTEUKKyAgICAgICAgLyoKKyAgICBpbmV0Q2lkclJvdXRlUG9saWN5IE9CSkVDVC1UWVBFIAorICAgICAgICBTWU5UQVggICAgIE9CSkVDVCBJREVOVElGSUVSIAorICAgICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBTVEFUVVMgICAgIGN1cnJlbnQgCisgICAgICAgIERFU0NSSVBUSU9OIAorICAgICAgICAgICAgICAgIlRoaXMgb2JqZWN0IGlzIGFuIG9wYXF1ZSBvYmplY3Qgd2l0aG91dCBhbnkgZGVmaW5lZCAKKyAgICAgICAgICAgICAgICBzZW1hbnRpY3MuICBJdHMgcHVycG9zZSBpcyB0byBzZXJ2ZSBhcyBhbiBhZGRpdGlvbmFsIAorICAgICAgICAgICAgICAgIGluZGV4IHdoaWNoIG1heSBkZWxpbmVhdGUgYmV0d2VlbiBtdWx0aXBsZSBlbnRyaWVzIHRvIAorICAgICAgICAgICAgICAgIHRoZSBzYW1lIGRlc3RpbmF0aW9uLiAgVGhlIHZhbHVlIHsgMCAwIH0gc2hhbGwgYmUgdXNlZCAKKyAgICAgICAgICAgICAgICBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuIgorICAgICAgICAqLworCWVudHJ5LT5ydF9wb2xpY3kgPSBjYWxsb2MoMywgc2l6ZW9mKG9pZCkpOworCWVudHJ5LT5ydF9wb2xpY3lbMl0gPSBlbnRyeS0+aWZfaW5kZXg7CisJZW50cnktPnJ0X3BvbGljeV9sZW4gPSBzaXplb2Yob2lkKSozOworI2VuZGlmCisKKyAgICAgICAgZW50cnktPnJ0X3R5cGUgPSBfdHlwZV9mcm9tX2ZsYWdzKHJ0bS0+cnRtX2ZsYWdzKTsKKwllbnRyeS0+cnRfYWdlID0gcnRtLT5ydG1fcm14LnJteF9leHBpcmU7CisJZW50cnktPnJ0X25leHRob3BfYXMgPSAwOworCS8qIGVudHJ5LT5ydF9tZXRyaWMxID0gcnRtLT5ydG1fcm14LnJteF9ob3Bjb3VudDsgKi8KKworICAgICAgICBpZiAocnRtLT5ydG1fZmxhZ3MgJiBSVEZfRFlOQU1JQykKKyAgICAgICAgICAgIGVudHJ5LT5ydF9wcm90byA9IElBTkFJUFJPVVRFUFJPVE9DT0xfSUNNUDsKKyAgICAgICAgZWxzZSBpZiAocnRtLT5ydG1fZmxhZ3MgJiBSVEZfU1RBVElDKQorICAgICAgICAgICAgZW50cnktPnJ0X3Byb3RvID0gSUFOQUlQUk9VVEVQUk9UT0NPTF9ORVRNR01UOworI2lmZGVmIFJURl9MT0NBTAorICAgICAgICBlbHNlIGlmIChydG0tPnJ0bV9mbGFncyAmIFJURl9MT0NBTCkKKyAgICAgICAgICAgIGVudHJ5LT5ydF9wcm90byA9IElBTkFJUFJPVVRFUFJPVE9DT0xfTE9DQUw7CisjZW5kaWYKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnktPnJ0X3Byb3RvID0gSUFOQUlQUk9VVEVQUk9UT0NPTF9PVEhFUjsKKworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAiZXJyb3Igd2l0aCByb3V0ZV9lbnRyeTogaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisKK291dDoKKyAgICBmcmVlKGJ1Zik7CisKKyAgICByZXR1cm4gZXJyOworfQorCisvKioKKyAqIG5ldHNubXBfYWNjZXNzX3JvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWQqIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGludAorX2xvYWRfaXB2NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCBpbnQgKmluZGV4KQoreworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZTpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJyb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkIGlwdjRcbiIpKTsKKyAgICByZXR1cm4gX2xvYWRfcm91dGluZ190YWJsZV9mcm9tX3N5c2N0bChjb250YWluZXIsIGluZGV4LCBBRl9JTkVUKTsKK30KKworc3RhdGljIGludAorX2xvYWRfaXB2NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCBpbnQgKmluZGV4KQoreworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCBpcHY2XG4iKSk7CisgICAgcmV0dXJuIF9sb2FkX3JvdXRpbmdfdGFibGVfZnJvbV9zeXNjdGwoY29udGFpbmVyLCBpbmRleCwgQUZfSU5FVDYpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIG5ldHNubXBfYWNjZXNzX3JvdXRlX2NyZWF0ZSogZnVuY3Rpb25zLgorICoKKyAqIFRPRE86IGFkZCBsb2dpYyBzaW1pbGFyIHRvIG5ld3JvdXRlKC4uKSBpbiBzYmluL3JvdXRlL3JvdXRlLmMgLgorICovCitzdGF0aWMgaW50CitfY3JlYXRlX2lwdjQobmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkpCit7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX2NyZWF0ZV9pcHY2KG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5KQoreworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmV0c25tcF9hY2Nlc3Nfcm91dGVfZGVsZXRlKiBmdW5jdGlvbnMuCisgKgorICogVE9ETzogYWRkIGxvZ2ljIHNpbWlsYXIgdG8gbmV3cm91dGUoLi4pIGluIHNiaW4vcm91dGUvcm91dGUuYyAuCisgKi8KK3N0YXRpYyBpbnQKK19kZWxldGVfaXB2NChuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfZGVsZXRlX2lwdjYobmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkpCit7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorCisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKGZyZWVic2Q3KSB8fCBkZWZpbmVkKG5ldGJzZCkgfHwgZGVmaW5lZChvcGVuYnNkKSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmggYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9zeXNjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWVjY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmgKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGlmYWRkcnMuaD4KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYwppbmRleCA0MWI1Yzk1Li4wZjAxM2VhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0yNiw4ICsyNywxMSBAQAogCiAjaW5jbHVkZSAiaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZFtdID0geyBJTkVUQ0lEUlJPVVRFVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZF9zaXplID0KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplKQorCitjb25zdCBvaWQgICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZFtdID0geyBJTkVUQ0lEUlJPVVRFVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgoaW5ldENpZHJSb3V0ZVRhYmxlX29pZCk7CiAKIGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb24gaW5ldENpZHJSb3V0ZVRhYmxlX3VzZXJfY29udGV4dDsKQEAgLTQxMCwyNSArNDE0LDI3IEBACiAgICAgLyoKICAgICAgKiBpbmV0Q2lkclJvdXRlUG9saWN5KDQpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvYS93L2Uvci9kL2ggCiAgICAgICovCi0gICAgdGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeV9sZW4gPSBzaXplb2YodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeSkgLyBzaXplb2YodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeVswXSk7ICAvKiBtYXggbGVuZ3RoICovCisgICAgdGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeV9sZW4gPSBzaXplb2YodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeSkgLyBzaXplb2YodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeVswXSk7CiAgICAgLyoqIFdBUk5JTkc6IHRoaXMgY29kZSBtaWdodCBub3Qgd29yayBmb3IgbmV0c25tcF9yb3V0ZV9lbnRyeSAqLwogICAgIC8qCiAgICAgICogbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgaW5ldENpZHJSb3V0ZVBvbGljeSBkYXRhCiAgICAgICovCiAgICAgaWYgKChOVUxMID09IHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3kpIHx8CiAgICAgICAgICh0YmxfaWR4LT5pbmV0Q2lkclJvdXRlUG9saWN5X2xlbiA8Ci0gICAgICAgICAoaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbikpKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJub3QgZW5vdWdoIHNwYWNlIGZvciB2YWx1ZVxuIik7CisgICAgICAgICAoaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJbMF0pKSkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKwkgICAgImluZXRDaWRyUm91dGVQb2xpY3k6IE5vdCBlbm91Z2ggc3BhY2UgZm9yIHZhbHVlICglZCA8ICVkKVxuIiwKKwkgICAgKGludCl0YmxfaWR4LT5pbmV0Q2lkclJvdXRlUG9saWN5X2xlbiwKKwkgICAgKGludCkoaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJbMF0pKSk7CiAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CiAgICAgfQogICAgIGlmICgwID09IGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4pIHsKLSAgICAgICAgaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiA9IG51bGxPaWRMZW4gLyBzaXplb2Yob2lkKTsKKyAgICAgICAgaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiA9IG51bGxPaWRMZW47CiAgICAgICAgIGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0ciA9IG51bGxPaWQ7CiAgICAgfQotICAgIHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3lfbGVuID0gaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbjsKKyAgICB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlUG9saWN5X2xlbiA9IGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4gLyBzaXplb2Yob2lkKTsKICAgICBtZW1jcHkodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeSwgaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyLAotICAgICAgICAgICBpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJfbGVuICoKLSAgICAgICAgICAgc2l6ZW9mKGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0clswXSkpOworICAgICAgICAgICBpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJfbGVuKTsKIAogICAgIC8qCiAgICAgICogaW5ldENpZHJSb3V0ZU5leHRIb3BUeXBlKDUpL0luZXRBZGRyZXNzVHlwZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2ggCkBAIC00NDYsMTEgKzQ1MiwxNCBAQAogICAgICAqLwogICAgIGlmICgoTlVMTCA9PSB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlTmV4dEhvcCkgfHwKICAgICAgICAgKHRibF9pZHgtPmluZXRDaWRyUm91dGVOZXh0SG9wX2xlbiA8Ci0gICAgICAgICAoaW5ldENpZHJSb3V0ZU5leHRIb3BfdmFsX3B0cl9sZW4pKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm90IGVub3VnaCBzcGFjZSBmb3IgdmFsdWVcbiIpOworICAgICAgICAgKGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJfbGVuIC8gc2l6ZW9mKGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJbMF0pKSkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKwkgICAgImluZXRDaWRyUm91dGVOZXh0aG9wOiBOb3QgZW5vdWdoIHNwYWNlIGZvciB2YWx1ZSAoJWQgPCAlZClcbiIsCisJICAgIChpbnQpdGJsX2lkeC0+aW5ldENpZHJSb3V0ZU5leHRIb3BfbGVuLAorCSAgICAoaW50KShpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyWzBdKSkpOwogICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwogICAgIH0KLSAgICB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlTmV4dEhvcF9sZW4gPSBpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyX2xlbjsKKyAgICB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlTmV4dEhvcF9sZW4gPSBpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyWzBdKTsKICAgICBtZW1jcHkodGJsX2lkeC0+aW5ldENpZHJSb3V0ZU5leHRIb3AsIGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHIsCiAgICAgICAgICAgIGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJfbGVuICoKICAgICAgICAgICAgc2l6ZW9mKGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJbMF0pKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaAppbmRleCA4ZDkwNDg1Li5iODEzMmUxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5oCkBAIC0yMTcsOCArMjE3LDggQEAKICAgICAgICAgKiBpbmV0Q2lkclJvdXRlVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpbmV0Q2lkclJvdXRlVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpbmV0Q2lkclJvdXRlVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGluZXRDaWRyUm91dGVUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggOTQ2MmJlNy4uYmVlYmIyYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAgICAgICAgIG5ldHNubXBfYWNjZXNzX3JvdXRlX2NvbnRhaW5lcl9sb2FkKE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1JPVVRFX0xPQURfTk9GTEFHUyk7CiAgICAgREVCVUdNU0dUKCgidmVyYm9zZTppbmV0Q2lkclJvdXRlVGFibGU6aW5ldENpZHJSb3V0ZVRhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKHJvdXRlX2NvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCAoaW50KUNPTlRBSU5FUl9TSVpFKHJvdXRlX2NvbnRhaW5lcikpKTsKIAogICAgIGlmIChOVUxMID09IHJvdXRlX2NvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLwpAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfUk9VVEVfRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aW5ldENpZHJSb3V0ZVRhYmxlOmluZXRDaWRyUm91dGVUYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfbG9hZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggZjQ4NTM2MC4uNWRmNDZiNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxNiBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplLCBpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0LCBpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MiwxOSArOTMsMjMgQEAKICAgICAgICAgICAgICAgICBfaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGluZXRDaWRyUm91dGVUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpbmV0Q2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uICoKIGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGluZXRDaWRyUm91dGVUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb24gKgogaW5ldENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaW5ldENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCkBAIC0xMDQsMTIgKzExOSwxNSBAQAogICAgIGluZXRDaWRyUm91dGVUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGluZXRDaWRyUm91dGVUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiB1X2ludAogaW5ldENpZHJSb3V0ZVRhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMTQwLDcgKzE1OCw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX29iamVjdF9sb29rdXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfZ2V0X3ZhbHVlczsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfdW5kb19zZXR1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9zZXRfdmFsdWVzOwpAQCAtMTUwLDEyICsxNjgsMTAgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV91bmRvX2NvbW1pdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9pcnJldmVyc2libGVfY29tbWl0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAotICAgICAgICAgICAgICAgIF9pbmV0Q2lkclJvdXRlVGFibGVfY2hlY2tfaW5kZXhlcyhpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwotCisgICAgICAgICAgICAgICAgX2luZXRDaWRyUm91dGVUYWJsZV9jaGVja19pbmRleGVzKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CiAvKioKICAqIEBpbnRlcm5hbAogICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgaW5ldENpZHJSb3V0ZVRhYmxlIApAQCAtMTk5LDcgKzIxNSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElORVRDSURSUk9VVEVUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSU5FVENJRFJST1VURVRBQkxFX01BWF9DT0w7CkBAIC0yMzksNyArMjU1LDcgQEAKICAgICAgICAgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfcG9zdF9yZXF1ZXN0OwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yNjQsNyArMjgwLDcgQEAKICAgICAgKi8KICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcyA9CiAgICAgICAgIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTMwMCw3ICszMTYsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzIzLDcgKzMzOSw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC03OTMsNyArODA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtOTExLDcgKzkyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTExMDUsNyArMTEyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTIxMiw2ICsxMjI4LDggQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOwogCisgICAgLyogTU9SRSBDSEVDS0lORyBSRVFVSVJFRCAqLworCiAgICAgLyoKICAgICAgKiAoSU5ERVgpIGluZXRDaWRyUm91dGVEZXN0KDIpL0luZXRBZGRyZXNzL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9hL3cvZS9SL2QvaCAKICAgICAgKi8KQEAgLTEzMTAsNyArMTMyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgcm93cmVxX2N0eCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pbmV0Q2lkclJvdXRlVGFibGVfY2hlY2tfaW5kZXhlcyAqLwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xNjE1LDcgKzE2MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CkBAIC0xNjYzLDcgKzE2ODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzIiwgImNhbGxlZFxuIikpOwogCkBAIC0xNzg1LDcgKzE4MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfdW5kb19zZXR1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTE4NTAsNyArMTg2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0yMDA1LDcgKzIwMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjA1Myw3ICsyMDcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMjA4Nyw3ICsyMTA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXRDaWRyUm91dGVUYWJsZTpfbWZkX2luZXRDaWRyUm91dGVUYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTIxMzMsNyArMjE1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfdW5kb192YWx1ZXMiLCAiY2FsbGVkXG4iKSk7CkBAIC0yMTY3LDcgKzIxODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldENpZHJSb3V0ZVRhYmxlOl9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0yMTk0LDcgKzIyMTIsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjMyOCw5ICsyMzQ2LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBzZXQgYWxsb3cgZHVwbGljYXRlcyB0aGlzIG1ha2VzIGluc2VydCBPKDEpICovCi0gICAgbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQoaWZfY3R4LT5jb250YWluZXIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTKTsKKyAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImluZXRDaWRyUm91dGVUYWJsZSIpOworCisgICAvKiBzZXQgYWxsb3cgZHVwbGljYXRlcyB0aGlzIG1ha2VzIGluc2VydCBPKDEpICovCisgICBuZXRzbm1wX2JpbmFyeV9hcnJheV9vcHRpb25zX3NldChpZl9jdHgtPmNvbnRhaW5lciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUyk7CiAKICAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQogICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOwpAQCAtMjM1Myw2ICsyMzczLDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2luZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKgogaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpbmV0Q2lkclJvdXRlVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTIzNzUsOCArMjM5Niw5IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPQorICAgIHJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORChpbmV0Q2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jCmluZGV4IDc1ZmRlODguLjBmZjAwYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJpcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaXBDaWRyUm91dGVUYWJsZV9vaWRbXSA9IHsgSVBDSURSUk9VVEVUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZFtdID0geyBJUENJRFJST1VURVRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlwQ2lkclJvdXRlVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChpcENpZHJSb3V0ZVRhYmxlX29pZCk7CiAKIGlwQ2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uIGlwQ2lkclJvdXRlVGFibGVfdXNlcl9jb250ZXh0OwpAQCAtNzA2LDEzICs3MDYsMTMgQEAKICAgICAgKiBjb3B5ICgqIGlwQ2lkclJvdXRlSW5mb192YWxfcHRyX3B0ciApIGRhdGEgYW5kICgqIGlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KICAgICAvKiogbnVsbE9pZExlbiBpcyBpbiBieXRlcywgc28gbm90IHNpemVvZihvaWQpIG5lZWRlZCAqLwotICAgIGlmICgoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIpIDwgbnVsbE9pZExlbikgewotICAgICAgICAoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX3B0cikgPSBtYWxsb2MobnVsbE9pZExlbik7CisgICAgaWYgKCgqaXBDaWRyUm91dGVJbmZvX3ZhbF9wdHJfbGVuX3B0cikgPCAoc2l6ZV90KW51bGxPaWRMZW4pIHsKKyAgICAgICAgKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9wdHIpID0gKG9pZCopbWFsbG9jKG51bGxPaWRMZW4pOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX3B0cikpCiAgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwogICAgIH0KLSAgICAoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIpID0gbnVsbE9pZExlbjsKLSAgICBtZW1jcHkoKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9wdHIpLCBudWxsT2lkLCBudWxsT2lkTGVuKTsKKyAgICAoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIpID0gKHNpemVfdCludWxsT2lkTGVuOworICAgIG1lbWNweSgoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX3B0ciksIG51bGxPaWQsIChzaXplX3QpbnVsbE9pZExlbik7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwQ2lkclJvdXRlSW5mb19nZXQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKaW5kZXggNDk2OTQ4MC4uMmNlMzBiZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKQEAgLTE5NCw4ICsxOTQsOCBAQAogICAgICAgICAqIGlwQ2lkclJvdXRlVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwQ2lkclJvdXRlVGFibGVfbWliX2luZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBjMjdkMGFhLi5iYjI3Njc1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfUk9VVEVfRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aXBDaWRyUm91dGVUYWJsZTppcENpZHJSb3V0ZVRhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBDaWRyUm91dGVUYWJsZV9jb250YWluZXJfbG9hZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCmluZGV4IGQwNTFjMjUuLjQ1Zjg0ODMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBDaWRyUm91dGVUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplLCBpcENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwQ2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQ2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaXBDaWRyUm91dGVUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0LCBpcENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtODEsMTkgKzkzLDIzIEBACiAgICAgICAgICAgICAgICAgX2lwQ2lkclJvdXRlVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogaXBDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwQ2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbiAqCiBpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gaXBDaWRyUm91dGVUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogaXBDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGlwQ2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQogewpAQCAtMTAxLDEyICsxMTcsMTUgQEAKICAgICBpcENpZHJSb3V0ZVRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGlwQ2lkclJvdXRlVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBDaWRyUm91dGVUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGlwQ2lkclJvdXRlVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMzAsNyArMTQ5LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQ2lkclJvdXRlVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBDaWRyUm91dGVUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBDaWRyUm91dGVUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcENpZHJSb3V0ZVRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcENpZHJSb3V0ZVRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDQsNyArMTYzLDcgQEAKICAgICAgICAgICAgICAgICBfaXBDaWRyUm91dGVUYWJsZV91bmRvX2NvbHVtbihpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAogICAgICAgICAgICAgICAgIF9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrX2luZGV4ZXMoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CkBAIC0xODgsNyArMjA3LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBDSURSUk9VVEVUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBDSURSUk9VVEVUQUJMRV9NQVhfQ09MOwpAQCAtMjI3LDcgKzI0Niw3IEBACiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPSBfbWZkX2lwQ2lkclJvdXRlVGFibGVfcG9zdF9yZXF1ZXN0OwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yNDUsNyArMjY0LDcgQEAKICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0ID0gX21mZF9pcENpZHJSb3V0ZVRhYmxlX3VuZG9fY29tbWl0OwogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCA9CiAgICAgICAgIF9tZmRfaXBDaWRyUm91dGVUYWJsZV9pcnJldmVyc2libGVfY29tbWl0OwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjc4LDcgKzI5Nyw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMDEsNyArMzIwLDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTY3Miw3ICs2OTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTc5MSw3ICs4MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQ2lkclJvdXRlVGFibGU6X21mZF9pcENpZHJSb3V0ZVRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xMDIyLDcgKzEwNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTE1MSw3ICsxMTcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgcm93cmVxX2N0eCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrX2luZGV4ZXMgKi8KIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTQ1Niw3ICsxNDc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xNjExLDcgKzE2MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBDaWRyUm91dGVUYWJsZTpfbWZkX2lwQ2lkclJvdXRlVGFibGVfdW5kb19zZXR1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTE2NzUsNyArMTY5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKQEAgLTE4NDAsNyArMTg1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE4ODgsNyArMTkwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQ2lkclJvdXRlVGFibGU6X21mZF9pcENpZHJSb3V0ZVRhYmxlX2NvbW1pdCIsCkBAIC0xOTIyLDcgKzE5NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQ2lkclJvdXRlVGFibGU6X21mZF9pcENpZHJSb3V0ZVRhYmxlX3VuZG9fY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMjA2NCw3ICsyMDgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogCkBAIC0yMTE4LDcgKzIxMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcENpZHJSb3V0ZVRhYmxlOl9tZmRfaXBDaWRyUm91dGVUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMjE0NSw3ICsyMTY0LDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwQ2lkclJvdXRlVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yMjc3LDYgKzIyOTYsOCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpcENpZHJSb3V0ZVRhYmxlIik7CisKICAgICAvKiBzZXQgYWxsb3cgZHVwbGljYXRlcyB0aGlzIG1ha2VzIGluc2VydCBPKDEpICovCiAgICAgbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQoaWZfY3R4LT5jb250YWluZXIsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTKTsKQEAgLTIzMDIsNiArMjMyMyw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICoKIGlwQ2lkclJvdXRlVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwQ2lkclJvdXRlVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0yMzI0LDggKzIzNDYsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKGlwQ2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIuaAppbmRleCBiNDVjYmI0Li40ZTgzMTdmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIuaApAQCAtMyw3ICszLDEzIEBACiAgKi8KIAogY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwQWRkcmVzc1RhYmxlKTsKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZSk7Citjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUpOwogY29uZmlnX3JlcXVpcmUoaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUpOwogY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZSk7CiBjb25maWdfcmVxdWlyZShpcC1taWIvaXBfc2NhbGFycyk7CisjaWZkZWYgbGludXgKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSk7Citjb25maWdfcmVxdWlyZShpcC1taWIvaXBJZlN0YXRzVGFibGUpOworI2VuZGlmCiBjb25maWdfYWRkX21pYihJUC1NSUIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmgKaW5kZXggNzBhNDczYy4uNjQ4Y2IyOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnAuaApAQCAtMTgsMTMgKzE4LDE2IEBACiAgKiAgICBiZSBoYW5kbGVkIGluIHRoZSAqX2hwdXguaCBoZWFkZXIgZmlsZS4KICAqLwogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24pCi0jaWYgZGVmaW5lZCggbGludXggKQorI2lmIGRlZmluZWQoIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rKQorI2VsaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eCkKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q3ICkgfHwgZGVmaW5lZCAoIG5ldGJzZDUgKSB8fCBkZWZpbmVkKCBvcGVuYnNkNCApIHx8IGRlZmluZWQoIGRyYWdvbmZseSApIHx8IGRlZmluZWQoIGRhcndpbiApCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvYXJwX3N5c2N0bCkKICNlbHNlCiAvKgogICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCi0gKiByZXF1aXJlIGEgYm9ndXMgZmlsZSB0byBnZW5lcmF0ZSBhbiBlcnJvci4KICAqLwotY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycC11bmtub3duLWFyY2gpCitjb25maWdfZXJyb3IodGhlIGFycCBkYXRhIGFjY2VzcyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC4pCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMKaW5kZXggYzBjYzY4MC4uMjk1ODcxOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jCkBAIC0xMSw5OSArMTEsNiBAQAogCiAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKLSAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCi0gKi8KLXN0YXRpYyB2b2lkIF9hY2Nlc3NfYXJwX2VudHJ5X3JlbGVhc2UobmV0c25tcF9hcnBfZW50cnkgKiBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdW51c2VkKTsKLQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBleHRlcm5hbCBwZXItYXJjaGl0ZWN0dXJlIGZ1bmN0aW9ucyBwcm90b3R5cGVzCi0gKgotICogVGhlc2Ugc2hvdWxkbid0IGJlIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBwdWJsaWMsIHNvIHRoZXkgYXJlbid0IGluCi0gKiB0aGUgaGVhZGVyIGZpbGUuCi0gKi8KLWV4dGVybiBpbnQKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKLQotCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIGNvbnRhaW5lciBmdW5jdGlvbnMKLSAqLwotLyoqCi0gKi8KLW5ldHNubXBfY29udGFpbmVyICoKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfaW5pdCh1X2ludCBmbGFncykKLXsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyMTsKLQotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsICJpbml0XG4iKSk7Ci0KLSAgICAvKgotICAgICAqIGNyZWF0ZSB0aGUgY29udGFpbmVycy4gb25lIGluZGV4ZWQgYnkgaWZJbmRleCwgdGhlIG90aGVyCi0gICAgICogaW5kZXhlZCBieSBpZk5hbWUuCi0gICAgICovCi0gICAgY29udGFpbmVyMSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImFjY2Vzc19hcnA6dGFibGVfY29udGFpbmVyIik7Ci0gICAgaWYgKE5VTEwgPT0gY29udGFpbmVyMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIGNvbnRhaW5lcjE7Ci19Ci0KLS8qKgotICogQHJldHZhbCBOVUxMICBlcnJvcgotICogQHJldHZhbCAhTlVMTCBwb2ludGVyIHRvIGNvbnRhaW5lcgotICovCi1uZXRzbm1wX2NvbnRhaW5lcioKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQotewotICAgIGludCByYzsKLQotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsICJsb2FkXG4iKSk7Ci0KLSAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpCi0gICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImFjY2VzczphcnA6dGFibGVfY29udGFpbmVyIik7Ci0gICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfYXJwXG4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmMgPSAgbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9hcmNoX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKLSAgICBpZiAoMCAhPSByYykgewotICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfTk9GTEFHUyk7Ci0gICAgICAgIGNvbnRhaW5lciA9IE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbnRhaW5lcjsKLX0KLQotdm9pZAotbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZyZWVfZmxhZ3MpCi17Ci0gICAgREVCVUdNU0dUTCgoImFjY2VzczphcnA6Y29udGFpbmVyIiwgImZyZWVcbiIpKTsKLQotICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfYWNjZXNzX2FycF9mcmVlXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmKCEgKGZyZWVfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19BUlBfRlJFRV9ET05UX0NMRUFSKSkgewotICAgICAgICAvKgotICAgICAgICAgKiBmcmVlIGFsbCBpdGVtcy4KLSAgICAgICAgICovCi0gICAgICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9hY2Nlc3NfYXJwX2VudHJ5X3JlbGVhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICB9Ci0KLSAgICBpZighIChmcmVlX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfS0VFUF9DT05UQUlORVIpKQotICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwotfQotCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKICAqIGFycF9lbnRyeSBmdW5jdGlvbnMKICAqLwogLyoqCkBAIC0xMzcsOSArNDQsNDAgQEAKICAqLwogCiAvKioKKyAqIFVwZGF0ZSBnaXZlbiBlbnRyeSB3aXRoIG5ldyBkYXRhLiBDYWxjdWxhdGUgbmV3IGFycF9sYXN0X3VwZGF0ZWQsIGlmIGFueQorICogZmllbGQgaXMgY2hhbmdlZC4KICAqLwotdm9pZAotX2FjY2Vzc19hcnBfZW50cnlfcmVsZWFzZShuZXRzbm1wX2FycF9lbnRyeSAqIGVudHJ5LCB2b2lkICpjb250ZXh0KQordm9pZCBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfdXBkYXRlKG5ldHNubXBfYXJwX2VudHJ5ICplbnRyeSwKKyAgICAgICAgbmV0c25tcF9hcnBfZW50cnkgKm5ld19kYXRhKQogewotICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICBpbnQgbW9kaWZpZWQgPSAwOworCisgICAgZW50cnktPmdlbmVyYXRpb24gPSBuZXdfZGF0YS0+Z2VuZXJhdGlvbjsKKyAgICBpZiAoZW50cnktPmFycF9pcGFkZHJlc3NfbGVuICE9IG5ld19kYXRhLT5hcnBfaXBhZGRyZXNzX2xlbgorICAgICAgICAgICAgfHwgbWVtY21wKGVudHJ5LT5hcnBfaXBhZGRyZXNzLCBuZXdfZGF0YS0+YXJwX2lwYWRkcmVzcywgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKSAhPSAwICkgeworICAgICAgICBtb2RpZmllZCA9IDE7CisgICAgICAgIGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbiA9IG5ld19kYXRhLT5hcnBfaXBhZGRyZXNzX2xlbjsKKyAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfaXBhZGRyZXNzLCBuZXdfZGF0YS0+YXJwX2lwYWRkcmVzcywgc2l6ZW9mKGVudHJ5LT5hcnBfaXBhZGRyZXNzKSk7CisgICAgfQorICAgIGlmIChlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbiAhPSBuZXdfZGF0YS0+YXJwX3BoeXNhZGRyZXNzX2xlbiB8fAorICAgICAgICAgICAgbWVtY21wKGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MsIG5ld19kYXRhLT5hcnBfcGh5c2FkZHJlc3MsIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuKSAhPSAwKSB7CisgICAgICAgICBtb2RpZmllZCA9IDE7CisgICAgICAgICBlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbiA9IG5ld19kYXRhLT5hcnBfcGh5c2FkZHJlc3NfbGVuOworICAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MsIG5ld19kYXRhLT5hcnBfcGh5c2FkZHJlc3MsIHNpemVvZihlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbikpOworICAgICB9CisgICAgaWYgKGVudHJ5LT5hcnBfc3RhdGUgIT0gbmV3X2RhdGEtPmFycF9zdGF0ZSkgeworICAgICAgICAgbW9kaWZpZWQgPSAxOworICAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IG5ld19kYXRhLT5hcnBfc3RhdGU7CisgICAgIH0KKyAgICBpZiAoZW50cnktPmFycF90eXBlICE9IG5ld19kYXRhLT5hcnBfdHlwZSkgeworICAgICAgICAgbW9kaWZpZWQgPSAxOworICAgICAgICAgZW50cnktPmFycF90eXBlID0gbmV3X2RhdGEtPmFycF90eXBlOworICAgICB9CisgICAgaWYgKGVudHJ5LT5mbGFncyAhPSBuZXdfZGF0YS0+ZmxhZ3MpIHsKKyAgICAgICAgIG1vZGlmaWVkID0gMTsKKyAgICAgICAgIGVudHJ5LT5mbGFncyA9IG5ld19kYXRhLT5mbGFnczsKKyAgICAgfQorCisgICAgaWYgKG1vZGlmaWVkKQorICAgICAgICBlbnRyeS0+YXJwX2xhc3RfdXBkYXRlZCA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jCmluZGV4IDc1ZDk0YzAuLmEyZmE0OWEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMKQEAgLTEsNyArMSw1IEBACiAvKgogICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKLSAqCi0gKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgpAQCAtMTQsNDYgKzEyLDc2IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi1pbnQgX2xvYWRfdjQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGlkeF9vZmZzZXQpOworc3RhdGljIGludCBfbG9hZF92NChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2Vzcyk7CiAKLS8qKgotICovCi1pbnQKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCituZXRzbm1wX2FycF9hY2Nlc3MgKgorbmV0c25tcF9hY2Nlc3NfYXJwX2NyZWF0ZSh1X2ludCBpbml0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQWNjZXNzQXJwVXBkYXRlICp1cGRhdGVfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycEdDICpnY19ob29rLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNhY2hlX3RpbWVvdXQsIGludCAqY2FjaGVfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNhY2hlX2V4cGlyZWQpCiB7Ci0gICAgaW50IHJjID0gMCwgaWR4X29mZnNldCA9IDA7CisgICAgbmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3M7CiAKLSAgICByYyA9IF9sb2FkX3Y0KGNvbnRhaW5lciwgaWR4X29mZnNldCk7Ci0gICAgaWYocmMgPCAwKSB7Ci0gICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfS0VFUF9DT05UQUlORVI7Ci0gICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKLSAgICAgICAgcmV0dXJuIHJjOworICAgIGFjY2VzcyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9hcnBfYWNjZXNzKTsKKyAgICBpZiAoTlVMTCA9PSBhY2Nlc3MpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibWFsbG9jIGVycm9yIGluIG5ldHNubXBfYWNjZXNzX2FycF9jcmVhdGVcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KSAmJiAwIC8qIHh4LXJrczogYXJwIGZvciB2Nj8gKi8KLSAgICBpZHhfb2Zmc2V0ID0gcmM7CisgICAgYWNjZXNzLT5hcmNoX21hZ2ljID0gTlVMTDsKKyAgICBhY2Nlc3MtPm1hZ2ljID0gTlVMTDsKKyAgICBhY2Nlc3MtPnVwZGF0ZV9ob29rID0gdXBkYXRlX2hvb2s7CisgICAgYWNjZXNzLT5nY19ob29rID0gZ2NfaG9vazsKKyAgICBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IDA7CiAKLSAgICByYyA9IF9sb2FkX3Y2KGNvbnRhaW5lciwgaWR4X29mZnNldCk7Ci0gICAgaWYocmMgPCAwKSB7Ci0gICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfS0VFUF9DT05UQUlORVI7Ci0gICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBpZiAoY2FjaGVfdGltZW91dCAhPSBOVUxMKQorICAgICAgICAqY2FjaGVfdGltZW91dCA9IDU7CisgICAgaWYgKGNhY2hlX2ZsYWdzICE9IE5VTEwpCisgICAgICAgICpjYWNoZV9mbGFncyB8PSBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9CRUZPUkVfTE9BRAorICAgICAgICAgICAgICAgICAgICAgICAgfCBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEOworICAgIGFjY2Vzcy0+Y2FjaGVfZXhwaXJlZCA9IGNhY2hlX2V4cGlyZWQ7CiAKLSAgICAvKgotICAgICAqIHJldHVybiBubyBlcnJvcnMgKDApIGlmIHdlIGZvdW5kIGFueSBpbnRlcmZhY2VzCi0gICAgICovCi0gICAgaWYocmMgPiAwKQotICAgICAgICByYyA9IDA7CisgICAgcmV0dXJuIGFjY2VzczsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF9kZWxldGUobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgaWYgKE5VTEwgPT0gYWNjZXNzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQoYWNjZXNzKTsKKyAgICBmcmVlKGFjY2Vzcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF9sb2FkKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGludCByYyA9IDA7CisKKyAgICBhY2Nlc3MtPmdlbmVyYXRpb24rKzsKKyAgICByYyA9X2xvYWRfdjQoYWNjZXNzKTsKKyAgICBhY2Nlc3MtPmdjX2hvb2soYWNjZXNzKTsKKyAgICBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IChyYyA9PSAwKTsKIAogICAgIHJldHVybiByYzsKIH0KIAoraW50IG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOworCisgICAgcmV0dXJuIDA7Cit9CisKIC8qKgogICovCi1pbnQKLV9sb2FkX3Y0KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KQorc3RhdGljIGludAorX2xvYWRfdjQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCiB7CiAgICAgRklMRSAgICAgICAgICAgKmluOwogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEyOF07CkBAIC02MywxMSArOTEsMTEgQEAKICAgICBjaGFyICAgICAgICAgICAqYXJwX3Rva2VuOwogICAgIGludCAgICAgICAgICAgICBpOwogCi0gICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBjb250YWluZXIpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gYWNjZXNzKTsKIAogI2RlZmluZSBQUk9DRklMRSAiL3Byb2MvbmV0L2FycCIKICAgICBpZiAoIShpbiA9IGZvcGVuKFBST0NGSUxFLCAiciIpKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZCBub3Qgb3BlbiAiIFBST0NGSUxFICJcbiIpOworICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIik7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKQEAgLTgzLDcgKzExMSw3IEBACiAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CiAgICAgICAgIAogICAgICAgICBpbnQgICAgICAgICAgICAgemEsIHpiLCB6YywgemQ7Ci0gICAgICAgIGludCAgICAgICAgICAgICB0bXBfZmxhZ3M7CisgICAgICAgIHVuc2lnbmVkIGludCAgICB0bXBfZmxhZ3M7CiAgICAgICAgIGNoYXIgICAgICAgICAgICBpZm5hbWVbMjFdOwogCiAgICAgICAgIHJjID0gc3NjYW5mKGxpbmUsCkBAIC0xMTAsNiArMTM4LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogbG9vayB1cCBpZkluZGV4CiAgICAgICAgICAqLworICAgICAgICBlbnRyeS0+Z2VuZXJhdGlvbiA9IGFjY2Vzcy0+Z2VuZXJhdGlvbjsKICAgICAgICAgZW50cnktPmlmX2luZGV4ID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2luZGV4X2ZpbmQoaWZuYW1lKTsKICAgICAgICAgaWYoMCA9PSBlbnRyeS0+aWZfaW5kZXgpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImNvdWxkbid0IGZpbmQgaWZJbmRleCBmb3IgJyVzJywgc2tpcHBpbmdcbiIsCkBAIC0xMjIsNyArMTUxLDcgQEAKICAgICAgICAgICogbm93IHRoYXQgd2UndmUgcGFzc2VkIGFsbCB0aGUgcG9zc2libGUgJ2NvbnRpbnVlJywgYXNzaWduCiAgICAgICAgICAqIGluZGV4IG9mZnNldC4KICAgICAgICAgICovCi0gICAgICAgIGVudHJ5LT5uc19hcnBfaW5kZXggPSArK2lkeF9vZmZzZXQ7CisgICAgICAgIC8qIGVudHJ5LT5uc19hcnBfaW5kZXggPSArK2lkeF9vZmZzZXQ7ICovCiAKICAgICAgICAgLyoKICAgICAgICAgICogcGFyc2UgaXAgYWRkcgpAQCAtMTc3LDE3ICsyMDYsOSBAQAogICAgICAgICAvKgogICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCiAgICAgICAgICAqLwotICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsImVycm9yIHdpdGggYXJwX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOwotICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2ZyZWUoZW50cnkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgYWNjZXNzLT51cGRhdGVfaG9vayhhY2Nlc3MsIGVudHJ5KTsKICAgICB9CiAKICAgICBmY2xvc2UoaW4pOwotICAgIGlmKCByYyA8IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICByZXR1cm4gaWR4X29mZnNldDsKKyAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1OWMyMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorCisKK3N0YXRpYyBpbnQgZmlsbHVwX2VudHJ5X2luZm8obmV0c25tcF9hcnBfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgbmxtc2doZHIgKmgpOworc3RhdGljIHZvaWQgbmV0c25tcF9hY2Nlc3NfYXJwX3JlYWRfbmV0bGluayhpbnQgZmQsIHZvaWQgKmRhdGEpOworCisvKioKKyAqLworbmV0c25tcF9hcnBfYWNjZXNzICoKK25ldHNubXBfYWNjZXNzX2FycF9jcmVhdGUodV9pbnQgaW5pdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycFVwZGF0ZSAqdXBkYXRlX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBHQyAqZ2NfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjYWNoZV90aW1lb3V0LCBpbnQgKmNhY2hlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjYWNoZV9leHBpcmVkKQoreworICAgIG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzOworCisgICAgYWNjZXNzID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2FycF9hY2Nlc3MpOworICAgIGlmIChOVUxMID09IGFjY2VzcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJtYWxsb2MgZXJyb3IgaW4gbmV0c25tcF9hY2Nlc3NfYXJwX2NyZWF0ZVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGFjY2Vzcy0+YXJjaF9tYWdpYyA9IE5VTEw7CisgICAgYWNjZXNzLT5tYWdpYyA9IE5VTEw7CisgICAgYWNjZXNzLT51cGRhdGVfaG9vayA9IHVwZGF0ZV9ob29rOworICAgIGFjY2Vzcy0+Z2NfaG9vayA9IGdjX2hvb2s7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOworCisgICAgaWYgKGNhY2hlX3RpbWVvdXQgIT0gTlVMTCkKKyAgICAgICAgKmNhY2hlX3RpbWVvdXQgPSA1OworICAgIGlmIChjYWNoZV9mbGFncyAhPSBOVUxMKQorICAgICAgICAqY2FjaGVfZmxhZ3MgfD0gTkVUU05NUF9DQUNIRV9SRVNFVF9USU1FUl9PTl9VU0UgfCBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9CRUZPUkVfTE9BRDsKKyAgICBhY2Nlc3MtPmNhY2hlX2V4cGlyZWQgPSBjYWNoZV9leHBpcmVkOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpuZXRsaW5rOmFycCIsICJjcmVhdGUgYXJwIGNhY2hlXG4iKSk7CisKKyAgICByZXR1cm4gYWNjZXNzOworfQorCitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX2RlbGV0ZShuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyAgICBpZiAoTlVMTCA9PSBhY2Nlc3MpCisgICAgICAgIHJldHVybiAwOworCisgICAgbmV0c25tcF9hY2Nlc3NfYXJwX3VubG9hZChhY2Nlc3MpOworICAgIGZyZWUoYWNjZXNzKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX2xvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgaW50IHIsIGZkID0gKHVpbnRwdHJfdCkgYWNjZXNzLT5hcmNoX21hZ2ljOworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciBuOworICAgICAgICBzdHJ1Y3QgbmRtc2cgcjsKKyAgICB9IHJlcTsKKworICAgIGlmIChhY2Nlc3MtPnN5bmNocm9uaXplZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZmQgPT0gMCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfbmwgc2E7CisKKyAgICAgICAgZmQgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSk7CisgICAgICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfYWNjZXNzX2FycF9sb2FkOiBuZXRsaW5rIHNvY2tldCBjcmVhdGUgZXJyb3JcbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFjY2Vzcy0+YXJjaF9tYWdpYyA9ICh2b2lkICopKHVpbnRwdHJfdClmZDsKKworICAgICAgICBtZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKKyAgICAgICAgc2EubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKKyAgICAgICAgc2EubmxfZ3JvdXBzID0gUlRNR1JQX05FSUdIOworICAgICAgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciopICZzYSwgc2l6ZW9mKHNhKSkgPCAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX2FjY2Vzc19hcnBfbG9hZDogbmV0bGluayBiaW5kIGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVnaXN0ZXJfcmVhZGZkKGZkLCBuZXRzbm1wX2FjY2Vzc19hcnBfcmVhZF9uZXRsaW5rLCBhY2Nlc3MpICE9IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfYWNjZXNzX2FycF9sb2FkOiBlcnJvciByZWdpc3RlcmluZyBuZXRsaW5rIHNvY2tldFxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOm5ldGxpbms6YXJwIiwgInN5bmNocm9uaXppbmcgYXJwIHRhYmxlXG4iKSk7CisKKyAgICBhY2Nlc3MtPmdlbmVyYXRpb24rKzsKKworICAgIG1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisgICAgcmVxLm4ubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSk7CisgICAgcmVxLm4ubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfUk9PVDsKKyAgICByZXEubi5ubG1zZ190eXBlID0gUlRNX0dFVE5FSUdIOworICAgIHJlcS5yLm5kbV9mYW1pbHkgPSBBRl9VTlNQRUM7CisKKyAgICByID0gc2VuZChmZCwgJnJlcSwgcmVxLm4ubmxtc2dfbGVuLCAwKTsKKyAgICBpZiAociA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibmV0c25tcF9hY2Nlc3NfYXJwX3JlZnJlc2g6IHNlbmQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHdoaWxlICghYWNjZXNzLT5zeW5jaHJvbml6ZWQpCisgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9yZWFkX25ldGxpbmsoZmQsIGFjY2Vzcyk7CisgICAgYWNjZXNzLT5nY19ob29rKGFjY2Vzcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgaW50IGZkOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpuZXRsaW5rOmFycCIsICJ1bmxvYWQgYXJwIGNhY2hlXG4iKSk7CisKKyAgICBmZCA9ICh1aW50cHRyX3QpIGFjY2Vzcy0+YXJjaF9tYWdpYzsKKyAgICBpZiAoZmQgPiAwKSB7CisgICAgICAgICB1bnJlZ2lzdGVyX3JlYWRmZChmZCk7CisgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICBhY2Nlc3MtPmFyY2hfbWFnaWMgPSBOVUxMOworCSBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IDA7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuZXRzbm1wX2FjY2Vzc19hcnBfcmVhZF9uZXRsaW5rKGludCBmZCwgdm9pZCAqZGF0YSkKK3sKKyAgICBuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcyA9IChuZXRzbm1wX2FycF9hY2Nlc3MgKikgZGF0YTsKKyAgICBuZXRzbm1wX2FycF9lbnRyeSAqZW50cnk7CisgICAgY2hhciBidWZbMTYzODRdOworICAgIHN0cnVjdCBubG1zZ2hkciAqaDsKKyAgICBpbnQgciwgbGVuOworCisgICAgZG8geworICAgICAgICByID0gcmVjdihmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTsKKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibmV0bGluayBidWZmZXIgb3ZlcnJ1blxuIik7CisgICAgICAgICAgICBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IDA7CisgICAgICAgICAgICBpZiAoYWNjZXNzLT5jYWNoZV9leHBpcmVkICE9IE5VTEwpCisJCSphY2Nlc3MtPmNhY2hlX2V4cGlyZWQgPSAxOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSB3aGlsZSAoMCk7CisgICAgbGVuID0gcjsKKworICAgIGZvciAoaCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgYnVmOyBOTE1TR19PSyhoLCBsZW4pOyBoID0gTkxNU0dfTkVYVChoLCBsZW4pKSB7CisgICAgICAgICBpZiAoaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKSB7CisgICAgICAgICAgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAxOworICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgfQorCisgICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOm5ldGxpbms6YXJwIiwgImFycCBuZXRsaW5rIG5vdGlmaWNhdGlvblxuIikpOworICAgIAorICAgICAgICAgZW50cnktPmdlbmVyYXRpb24gPSBhY2Nlc3MtPmdlbmVyYXRpb247CisgICAgICAgICByID0gZmlsbHVwX2VudHJ5X2luZm8gKGVudHJ5LCBoKTsKKyAgICAgICAgIGlmIChyID4gMCkgeworICAgICAgICAgICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2soYWNjZXNzLCBlbnRyeSk7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJmaWxsaW5nIGVudHJ5IGluZm8gZmFpbGVkXG4iKSk7CisgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6bmV0bGluazphcnAiLCAiZmlsbGluZyBlbnRyeSBpbmZvIGZhaWxlZFxuIikpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50CitmaWxsdXBfZW50cnlfaW5mbyhuZXRzbm1wX2FycF9lbnRyeSAqZW50cnksIHN0cnVjdCBubG1zZ2hkciAqbmxtcCkKK3sKKyAgICBzdHJ1Y3QgbmRtc2cgICAqcnRtcDsKKyAgICBzdHJ1Y3QgcnRhdHRyICAqdGJbTkRBX01BWCArIDFdLCAqcnRhOworICAgIGludCAgICAgICAgICAgICBsZW5ndGg7CisKKyAgICBydG1wID0gKHN0cnVjdCBuZG1zZyAqKSBOTE1TR19EQVRBKG5sbXApOworICAgIHN3aXRjaCAobmxtcC0+bmxtc2dfdHlwZSkgeworICAgIGNhc2UgUlRNX05FV05FSUdIOgorICAgICAgICBpZiAocnRtcC0+bmRtX3N0YXRlID09IE5VRF9GQUlMRUQpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19BUlBfRU5UUllfRkxBR19ERUxFVEU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRNX0RFTE5FSUdIOgorICAgICAgICBlbnRyeS0+ZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19BUlBfRU5UUllfRkxBR19ERUxFVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRNX0dFVE5FSUdIOgorICAgICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOm5ldGxpbms6YXJwIiwKKyAgICAgICAgICAgICAgICAgICAgIldyb25nIE5ldGxpbmsgbWVzc2FnZSB0eXBlICVkXG4iLCBubG1wLT5ubG1zZ190eXBlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAocnRtcC0+bmRtX3N0YXRlID09IE5VRF9OT0FSUCkgeworICAgICAgICAvKiBOVURfTk9BUlAgaXMgZm9yIGJyb2FkY2FzdCBhZGRyZXNzZXMgYW5kIHNpbWlsYXIsCisgICAgICAgICAqIGRyb3AgdGhlbSBzaWxlbnRseSAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtZW1zZXQodGIsIDAsIHNpemVvZihzdHJ1Y3QgcnRhdHRyICopICogKE5EQV9NQVggKyAxKSk7CisgICAgbGVuZ3RoID0gbmxtcC0+bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqcnRtcCkpOworICAgIHJ0YSA9ICgoc3RydWN0IHJ0YXR0ciAqKSAoKChjaGFyICopIChydG1wKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IG5kbXNnKSkpKTsKKyAgICB3aGlsZSAoUlRBX09LKHJ0YSwgbGVuZ3RoKSkgeworICAgICAgICBpZiAocnRhLT5ydGFfdHlwZSA8PSBOREFfTUFYKQorICAgICAgICAgICAgdGJbcnRhLT5ydGFfdHlwZV0gPSBydGE7CisgICAgICAgIHJ0YSA9IFJUQV9ORVhUKHJ0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbGwgdXAgdGhlIGluZGV4IGFuZCBhZGRyZXNzZXMKKyAgICAgKi8KKyAgICBlbnRyeS0+aWZfaW5kZXggPSBydG1wLT5uZG1faWZpbmRleDsKKyAgICBpZiAodGJbTkRBX0RTVF0pIHsKKyAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuID0gUlRBX1BBWUxPQUQodGJbTkRBX0RTVF0pOworICAgICAgICBpZiAoZW50cnktPmFycF9pcGFkZHJlc3NfbGVuID4gc2l6ZW9mKGVudHJ5LT5hcnBfaXBhZGRyZXNzKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5ldGxpbmsgaXAgYWRkcmVzcyBsZW5ndGggJWQgaXMgdG9vIGxvbmdcbiIsCisgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbWNweShlbnRyeS0+YXJwX2lwYWRkcmVzcywgUlRBX0RBVEEodGJbTkRBX0RTVF0pLAorICAgICAgIGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbik7CisgICAgfQorICAgIGlmICh0YltOREFfTExBRERSXSkgeworICAgICAgICBlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbiA9IFJUQV9QQVlMT0FEKHRiW05EQV9MTEFERFJdKTsKKyAgICAgICAgaWYgKGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuID4gc2l6ZW9mKGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibmV0bGluayBodyBhZGRyZXNzIGxlbmd0aCAlZCBpcyB0b28gbG9uZ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoZW50cnktPmFycF9waHlzYWRkcmVzcywgUlRBX0RBVEEodGJbTkRBX0xMQUREUl0pLAorICAgICAgICAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4pOworICAgIH0KKworICAgIHN3aXRjaCAocnRtcC0+bmRtX3N0YXRlKSB7CisgICAgY2FzZSBOVURfSU5DT01QTEVURToKKyAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfSU5DT01QTEVURTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfUkVBQ0hBQkxFOgorICAgIGNhc2UgTlVEX1BFUk1BTkVOVDoKKyAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfUkVBQ0hBQkxFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5VRF9TVEFMRToKKyAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfU1RBTEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVEX0RFTEFZOgorICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9ERUxBWTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfUFJPQkU6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX1BST0JFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5VRF9GQUlMRUQ6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX0lOVkFMSUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVEX05PTkU6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX1VOS05PV047CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJVbnJlY29nbml6ZWQgQVJQIGVudHJ5IHN0YXRlICVkIiwgcnRtcC0+bmRtX3N0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChydG1wLT5uZG1fc3RhdGUpIHsKKyAgICBjYXNlIE5VRF9JTkNPTVBMRVRFOgorICAgIGNhc2UgTlVEX0ZBSUxFRDoKKyAgICBjYXNlIE5VRF9OT05FOgorICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfSU5WQUxJRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfUkVBQ0hBQkxFOgorICAgIGNhc2UgTlVEX1NUQUxFOgorICAgIGNhc2UgTlVEX0RFTEFZOgorICAgIGNhc2UgTlVEX1BST0JFOgorICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfRFlOQU1JQzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfUEVSTUFORU5UOgorICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfU1RBVElDOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfTE9DQUw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9zeXNjdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlOWNkYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfc3lzY3RsLmMKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgorI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmICFkZWZpbmVkKFNBX1NJWkUpICYmICFkZWZpbmVkKFJUX1JPVU5EVVApCisjZGVmaW5lIFJUX1JPVU5EVVAoYSkgIFwKKwkoKGEpID4gMCA/ICgxICsgKCgoYSkgLSAxKSB8IChzaXplb2YobG9uZykgLSAxKSkpIDogc2l6ZW9mKGxvbmcpKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xvYWRfYXJwX3RhYmxlX2Zyb21fc3lzY3RsKG5ldHNubXBfYXJwX2FjY2VzcyAqKTsKK3N0YXRpYyBpbnQgX2xvYWRfbmRwX3RhYmxlX2Zyb21fc3lzY3RsKG5ldHNubXBfYXJwX2FjY2VzcyAqKTsKKworbmV0c25tcF9hcnBfYWNjZXNzICoKK25ldHNubXBfYWNjZXNzX2FycF9jcmVhdGUodV9pbnQgaW5pdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycFVwZGF0ZSAqdXBkYXRlX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBHQyAqZ2NfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjYWNoZV90aW1lb3V0LCBpbnQgKmNhY2hlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjYWNoZV9leHBpcmVkKQoreworICAgIG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzOworCisgICAgYWNjZXNzID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2FycF9hY2Nlc3MpOworICAgIGlmIChOVUxMID09IGFjY2VzcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibWFsbG9jIGVycm9yIGluIG5ldHNubXBfYWNjZXNzX2FycF9jcmVhdGVcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBhY2Nlc3MtPmFyY2hfbWFnaWMgPSBOVUxMOworICAgIGFjY2Vzcy0+bWFnaWMgPSBOVUxMOworICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2sgPSB1cGRhdGVfaG9vazsKKyAgICBhY2Nlc3MtPmdjX2hvb2sgPSBnY19ob29rOworICAgIGFjY2Vzcy0+c3luY2hyb25pemVkID0gMDsKKworICAgIGlmIChjYWNoZV90aW1lb3V0ICE9IE5VTEwpCisgICAgICAgICpjYWNoZV90aW1lb3V0ID0gNTsKKyAgICBpZiAoY2FjaGVfZmxhZ3MgIT0gTlVMTCkKKyAgICAgICAgKmNhY2hlX2ZsYWdzIHw9IE5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0JFRk9SRV9MT0FECisgICAgICAgICAgICAgICAgICAgICAgICB8IE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQ7CisgICAgYWNjZXNzLT5jYWNoZV9leHBpcmVkID0gY2FjaGVfZXhwaXJlZDsKKworICAgIHJldHVybiBhY2Nlc3M7Cit9CisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfZGVsZXRlKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGlmIChOVUxMID09IGFjY2VzcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKGFjY2Vzcyk7CisgICAgZnJlZShhY2Nlc3MpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfbG9hZChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyAgICBpbnQgZXJyID0gMDsKKworICAgIGFjY2Vzcy0+Z2VuZXJhdGlvbisrOworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCBpcHY0XG4iKSk7CisgICAgZXJyID0gX2xvYWRfYXJwX3RhYmxlX2Zyb21fc3lzY3RsKGFjY2Vzcyk7CisgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICJuZXRzbm1wX2FjY2Vzc19hcnBfaXB2NCBmYWlsZWQgJWRcbiIsIGVycikpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgYWNjZXNzLT5nY19ob29rKGFjY2Vzcyk7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAoZXJyID09IDApOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCBpcHY2XG4iKSk7CisgICAgZXJyID0gX2xvYWRfbmRwX3RhYmxlX2Zyb21fc3lzY3RsKGFjY2Vzcyk7CisgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICJuZXRzbm1wX2FjY2Vzc19hcnBfaXB2NiBmYWlsZWQgJWRcbiIsIGVycikpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgYWNjZXNzLT5nY19ob29rKGFjY2Vzcyk7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAoZXJyID09IDApOworI2VuZGlmCisKK291dDoKKyAgICByZXR1cm4gKGVyciA9PSAwID8gMCA6IC0xKTsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19sb2FkX2FycF90YWJsZV9mcm9tX3N5c2N0bChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyAgICBuZXRzbm1wX2FycF9lbnRyeSAqZW50cnk7CisgICAgc3RydWN0IHJ0X21zZ2hkciAqcnRtOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbmFycCAqc2luMjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfZGwgKnNkbDsKKyAgICBjaGFyICpidWYsICpsaW0sICpuZXdidWYsICpuZXh0OworICAgIGludCBtaWJbNl07CisgICAgc2l6ZV90IG5lZWRlZDsKKyAgICBpbnQgZXJyLCBzdDsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gYWNjZXNzKTsKKworICAgIG1pYlswXSA9IENUTF9ORVQ7CisgICAgbWliWzFdID0gUEZfUk9VVEU7CisgICAgbWliWzJdID0gMDsKKyAgICBtaWJbM10gPSBBRl9JTkVUOworICAgIG1pYls0XSA9IE5FVF9SVF9GTEFHUzsKKyAgICBtaWJbNV0gPSBSVEZfTExJTkZPOworCisgICAgZXJyID0gMDsKKyAgICBidWYgPSBuZXdidWYgPSBOVUxMOworCisgICAgLyogVGhlIGZvbGxvd2luZyBsb2dpYyB3YXMgYWRhcHRlZCBmcm9tIHNlYXJjaCguLikgaW4gdXNyLnNiaW4vYXJwL2FycC5jICovCisKKyAgICBpZiAoc3lzY3RsKG1pYiwgNiwgTlVMTCwgJm5lZWRlZCwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBFbXB0eSBhcnAgdGFibGUuICovCisgICAgaWYgKG5lZWRlZCA9PSAwKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgbmV3YnVmID0gcmVhbGxvYyhidWYsIG5lZWRlZCk7CisgICAgICAgIGlmIChuZXdidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gbmV3YnVmOworICAgICAgICBzdCA9IHN5c2N0bChtaWIsIDYsIGJ1ZiwgJm5lZWRlZCwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdCA9PSAwIHx8IGVycm5vICE9IEVOT01FTSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkZWQgKz0gbmVlZGVkIC8gODsgLyogWFhYOiB3aHkgOD8gKi8KKyAgICB9CisgICAgaWYgKHN0ID09IC0xKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBsaW0gPSBidWYgKyBuZWVkZWQ7CisgICAgZm9yIChuZXh0ID0gYnVmOyBuZXh0IDwgbGltOyBuZXh0ICs9IHJ0bS0+cnRtX21zZ2xlbikgeworCisgICAgICAgIHJ0bSA9IChzdHJ1Y3QgcnRfbXNnaGRyICopbmV4dDsKKyAgICAgICAgc2luMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW5hcnAqKShydG0gKyAxKTsKKyNpZmRlZiBTQV9TSVpFCisgICAgICAgIHNkbCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwqKSgoY2hhciAqKXNpbjIgKyBTQV9TSVpFKHNpbjIpKTsKKyNlbHNlCisJc2RsID0gKHN0cnVjdCBzb2NrYWRkcl9kbCopKHZvaWQgKikoUlRfUk9VTkRVUChzaW4yLT5zaW5fbGVuKSArIChjaGFyICopKHZvaWQgKilzaW4yKTsKKyNlbmRpZgorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+Z2VuZXJhdGlvbiA9IGFjY2Vzcy0+Z2VuZXJhdGlvbjsKKyAgICAgICAgZW50cnktPmlmX2luZGV4ID0gcnRtLT5ydG1faW5kZXg7CisKKyAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuID0gNDsKKworICAgICAgICBtZW1jcHkoZW50cnktPmFycF9pcGFkZHJlc3MsICZzaW4yLT5zaW5fYWRkci5zX2FkZHIsCisgICAgICAgICAgICBlbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pOworCisgICAgICAgIC8qIEhXIEFkZHJlc3MgKi8KKyAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4gPSA2OworICAgICAgICBpZiAoMCA8IHNkbC0+c2RsX2FsZW4gJiYKKyAgICAgICAgICAgIHNkbC0+c2RsX2FsZW4gPD0gTkVUU05NUF9BQ0NFU1NfQVJQX1BIWVNBRERSX0JVRl9TSVpFKSB7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPmFycF9waHlzYWRkcmVzcywgTExBRERSKHNkbCksIHNkbC0+c2RsX2FsZW4pOworICAgICAgICAgICAgLyogUHJvY2VzcyBzdGF0dXMgKi8KKyAgICAgICAgICAgIC8qIFhYWDogc2V0dGluZyB0aGlzIHZhbHVlIGZvciBhbGwgc3RhdGVzIGlzIHdyb25nLiAqLworICAgICAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfUkVBQ0hBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc1swXSA9ICdcMCc7CisgICAgICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9JTkNPTVBMRVRFOworICAgICAgICB9CisKKyAgICAgICAgLyogUHJvY2VzcyB0eXBlICovCisgICAgICAgIC8qIFhYWDogbW9yZSBzdGF0ZXMgc2hvdWxkIGJlIGhhbmRsZWQgaGVyZSwgcHJvYmFibHkuLiAqLworICAgICAgICBpZiAocnRtLT5ydG1fcm14LnJteF9leHBpcmUgPT0gMCkKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IElORVRORVRUT01FRElBVFlQRV9TVEFUSUM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IElORVRORVRUT01FRElBVFlQRV9EWU5BTUlDOworCisgICAgICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2soYWNjZXNzLCBlbnRyeSk7CisKKyAgICB9CisKK291dDoKKyAgICBmcmVlKGJ1Zik7CisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorX2xvYWRfbmRwX3RhYmxlX2Zyb21fc3lzY3RsKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworI2lmIDEKKyAgICBuZXRzbm1wX2FycF9lbnRyeSAqZW50cnk7CisgICAgc3RydWN0IHJ0X21zZ2hkciAqcnRtOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjI7CisgICAgc3RydWN0IHNvY2thZGRyX2RsICpzZGw7CisgICAgc2l6ZV90IG5lZWRlZDsKKyAgICBpbnQgZXJyLCBtaWJbNl0sIHN0OworICAgIGNoYXIgKmJ1ZiwgKmxpbSwgKm5ld2J1ZiwgKm5leHQ7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGFjY2Vzcyk7CisKKyAgICBtaWJbMF0gPSBDVExfTkVUOworICAgIG1pYlsxXSA9IFBGX1JPVVRFOworICAgIG1pYlsyXSA9IDA7CisgICAgbWliWzNdID0gQUZfSU5FVDY7CisgICAgbWliWzRdID0gTkVUX1JUX0ZMQUdTOworICAgIG1pYls1XSA9IFJURl9MTElORk87CisKKyAgICBlcnIgPSAwOworICAgIGJ1ZiA9IG5ld2J1ZiA9IE5VTEw7CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgNiwgTlVMTCwgJm5lZWRlZCwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBFbXB0eSBhcnAgdGFibGUuICovCisgICAgaWYgKG5lZWRlZCA9PSAwKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgbmV3YnVmID0gcmVhbGxvYyhidWYsIG5lZWRlZCk7CisgICAgICAgIGlmIChuZXdidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gbmV3YnVmOworICAgICAgICBzdCA9IHN5c2N0bChtaWIsIDYsIGJ1ZiwgJm5lZWRlZCwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdCA9PSAwIHx8IGVycm5vICE9IEVOT01FTSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkZWQgKz0gbmVlZGVkIC8gODsgLyogWFhYOiB3aHkgOD8gKi8KKyAgICB9CisgICAgaWYgKHN0ID09IC0xKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBsaW0gPSBidWYgKyBuZWVkZWQ7CisgICAgZm9yIChuZXh0ID0gYnVmOyBuZXh0IDwgbGltOyBuZXh0ICs9IHJ0bS0+cnRtX21zZ2xlbikgeworCisgICAgICAgIHJ0bSA9IChzdHJ1Y3QgcnRfbXNnaGRyICopbmV4dDsKKyAgICAgICAgc2luMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42KikocnRtICsgMSk7CisjaWZkZWYgU0FfU0laRQorICAgICAgICBzZGwgPSAoc3RydWN0IHNvY2thZGRyX2RsKikoKGNoYXIgKilzaW4yICsgU0FfU0laRShzaW4yKSk7CisjZWxzZQorCXNkbCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwqKSh2b2lkICopKFJUX1JPVU5EVVAoc2luMi0+c2luNl9sZW4pICsgKGNoYXIgKikodm9pZCAqKXNpbjIpOworI2VuZGlmCisKKyAgICAgICAgaWYgKCEocnRtLT5ydG1fZmxhZ3MgJiBSVEZfSE9TVCkgfHwKKyAgICAgICAgICAgIElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luMi0+c2luNl9hZGRyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+Z2VuZXJhdGlvbiA9IGFjY2Vzcy0+Z2VuZXJhdGlvbjsKKyAgICAgICAgZW50cnktPmlmX2luZGV4ID0gcnRtLT5ydG1faW5kZXg7CisKKyAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuID0gMTY7CisKKyAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfaXBhZGRyZXNzLCAmc2luMi0+c2luNl9hZGRyLnM2X2FkZHIsCisgICAgICAgICAgICBlbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pOworCisgICAgICAgIC8qIEhXIEFkZHJlc3MgKi8KKyAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4gPSBzZGwtPnNkbF9hbGVuOworICAgICAgICBpZiAoMCA8IHNkbC0+c2RsX2FsZW4gJiYKKyAgICAgICAgICAgIHNkbC0+c2RsX2FsZW4gPD0gTkVUU05NUF9BQ0NFU1NfQVJQX1BIWVNBRERSX0JVRl9TSVpFKSB7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPmFycF9waHlzYWRkcmVzcywgTExBRERSKHNkbCksIHNkbC0+c2RsX2FsZW4pOworICAgICAgICAgICAgLyogUHJvY2VzcyBzdGF0dXMgKi8KKyAgICAgICAgICAgIC8qIFhYWDogc2V0dGluZyB0aGlzIHZhbHVlIGZvciBhbGwgc3RhdGVzIGlzIHdyb25nLiAqLworICAgICAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfUkVBQ0hBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc1swXSA9ICdcMCc7CisgICAgICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9JTkNPTVBMRVRFOworICAgICAgICB9CisKKyAgICAgICAgLyogUHJvY2VzcyB0eXBlICovCisgICAgICAgIC8qIFhYWDogbW9yZSBzdGF0ZXMgc2hvdWxkIGJlIGhhbmRsZWQgaGVyZSwgcHJvYmFibHkuLiAqLworICAgICAgICBpZiAocnRtLT5ydG1fcm14LnJteF9leHBpcmUgPT0gMCkKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IElORVRORVRUT01FRElBVFlQRV9TVEFUSUM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IElORVRORVRUT01FRElBVFlQRV9EWU5BTUlDOworCisgICAgICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2soYWNjZXNzLCBlbnRyeSk7CisKKyAgICB9CisKK291dDoKKyAgICBmcmVlKGJ1Zik7CisgICAgcmV0dXJuIGVycjsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Yjk5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBkZWZhdWx0cm91dGVyIGRhdGEgYWNjZXNzIGhlYWRlcgorICoKKyAqICRJZDogJAorICovCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGNvbmZpZ3VyZSByZXF1aXJlZCBmaWxlcworICoKKyAqIE5vdGVzOgorICoKKyAqIDEpIHByZWZlciBmdW5jdGlvbmFsaXR5IG92ZXIgcGxhdGZvcm0sIHdoZXJlIHBvc3NpYmxlLiBJZiBhIG1ldGhvZAorICogICAgaXMgYXZhaWxhYmxlIGZvciBtdWx0aXBsZSBwbGF0Zm9ybXMsIHRlc3QgdGhhdCBmaXJzdC4gVGhhdCB3YXkKKyAqICAgIHdoZW4gYSBuZXcgcGxhdGZvcm0gaXMgcG9ydGVkLCBpdCB3b24ndCBuZWVkIGEgbmV3IHRlc3QgaGVyZS4KKyAqCisgKiAyKSBkb24ndCBkbyBkZXRhaWwgcmVxdWlyZW1lbnRzIGhlcmUuIElmLCBmb3IgZXhhbXBsZSwKKyAqICAgIEhQVVgxMSBoYWQgZGlmZmVyZW50IHJldWlyZW1lbnRzIHRoYW4gb3RoZXIgSFBVWCwgdGhhdCBzaG91bGQKKyAqICAgIGJlIGhhbmRsZWQgaW4gdGhlICpfaHB1eC5oIGhlYWRlciBmaWxlLgorICovCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9jb21tb24pCisjaWYgZGVmaW5lZCggbGludXggKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXgpCisjZWxpZiBkZWZpbmVkKCBmcmVlYnNkNCApIHx8IGRlZmluZWQoIG5ldGJzZDUgKSB8fCBkZWZpbmVkKCBvcGVuYnNkICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX3N5c2N0bCkKKyNlbHNlCisvKgorICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCisgKi8KK2NvbmZpZ19lcnJvcih0aGUgZGVmYXVsdHJvdXRlciBkYXRhIGFjY2VzcyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC4pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4NWJmYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogIGRlZmF1bHRyb3V0ZXIgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkOiQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaD4KKworI2luY2x1ZGUgImlwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oIgorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2NvbXBhcmVfYWRkcihjb25zdCB2b2lkICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmhzKTsKK3N0YXRpYyB2b2lkIF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9yZWxlYXNlKG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdW51c2VkKTsKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBleHRlcm5hbCBwZXItYXJjaGl0ZWN0dXJlIGZ1bmN0aW9ucyBwcm90b3R5cGVzCisgKgorICogVGhlc2Ugc2hvdWxkbid0IGJlIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBwdWJsaWMsIHNvIHRoZXkgYXJlbid0IGluCisgKiB0aGUgaGVhZGVyIGZpbGUuCisgKi8KK2V4dGVybiBpbnQKK25ldHNubXBfYXJjaF9kZWZhdWx0cm91dGVyX2VudHJ5X2luaXQobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICplbnRyeSk7CisKK2V4dGVybiBpbnQKK25ldHNubXBfYXJjaF9kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBjb250YWluZXIgZnVuY3Rpb25zCisgKi8KKy8qKgorICovCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9pbml0KHVfaW50IGZsYWdzKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIxOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmNvbnRhaW5lciIsICJpbml0XG4iKSk7CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSB0aGUgY29udGFpbmVycy4gb25lIGluZGV4ZWQgYnkgaWZJbmRleCwgdGhlIG90aGVyCisgICAgICogaW5kZXhlZCBieSBpZk5hbWUuCisgICAgICovCisgICAgY29udGFpbmVyMSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImFjY2Vzc19kZWZhdWx0cm91dGVyOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcjEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImRlZmF1bHRyb3V0ZXIgcHJpbWFyeSBjb250YWluZXIgaXMgbm90IGZvdW5kXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNvbnRhaW5lcjEtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJkcl9pbmRleCIpOworCisgICAgaWYgKGZsYWdzICYgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9JTklUX0FERExfSURYX0JZX0FERFIpIHsKKyAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgiZGVmYXVsdHJvdXRlcl9hZGRyOmFjY2Vzc19kZWZhdWx0cm91dGVyOnRhYmxlX2NvbnRhaW5lciIpOworICAgICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIyKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZGVmYXVsdHJvdXRlciBzZWNvbmRhcnkgY29udGFpbmVyIG5vdCBmb3VuZFxuIik7CisgICAgICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIxKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgY29udGFpbmVyMi0+Y29tcGFyZSA9IF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jb21wYXJlX2FkZHI7CisgICAgICAgIGNvbnRhaW5lcjItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJkcl9hZGRyIik7CisKKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4KGNvbnRhaW5lcjEsIGNvbnRhaW5lcjIpOworICAgIH0KKworICAgIHJldHVybiBjb250YWluZXIxOworfQorCisvKioKKyAqIEByZXR2YWwgTlVMTCAgZXJyb3IKKyAqIEByZXR2YWwgIU5VTEwgcG9pbnRlciB0byBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIqCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgaW50IHJjOworICAgICB1X2ludCBjb250YWluZXJfZmxhZ3MgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmNvbnRhaW5lciIsICJsb2FkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0xPQURfQURETF9JRFhfQllfQUREUikgeworICAgICAgICAgICAgY29udGFpbmVyX2ZsYWdzIHw9CisgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9JTklUX0FERExfSURYX0JZX0FERFI7CisgICAgICAgIH0KKyAgICAgICAgY29udGFpbmVyID0KKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2luaXQoY29udGFpbmVyX2ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19kZWZhdWx0cm91dGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmMgPSAgbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKKyAgICBpZiAoMCAhPSByYykgeworICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9OT0ZMQUdTKTsKKyAgICAgICAgY29udGFpbmVyID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCit2b2lkCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGZyZWVfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmNvbnRhaW5lciIsICJmcmVlXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoISAoZnJlZV9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9ET05UX0NMRUFSKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBmcmVlIGFsbCBpdGVtcy4KKyAgICAgICAgICovCisgICAgICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9yZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgaWYoISAoZnJlZV9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9LRUVQX0NPTlRBSU5FUikpCisgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7Cit9CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogZGVmYXVsdHJvdXRlcl9lbnRyeSBmdW5jdGlvbnMKKyAqLworLyoqCisgKi8KKy8qKgorICovCituZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKgorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jcmVhdGUodm9pZCkKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqZW50cnkgPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSk7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRlZmF1bHRyb3V0ZXI6ZW50cnkiLCAiY3JlYXRlXG4iKSk7CisKKyAgICBpZihOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT5vaWRfaW5kZXgubGVuID0gMTsKKyAgICBlbnRyeS0+b2lkX2luZGV4Lm9pZHMgPSAmZW50cnktPm5zX2RyX2luZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgZGVmYXVsdHMKKyAgICAgKi8KKyAgICBlbnRyeS0+ZHJfbGlmZXRpbWUgICA9IElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX01BWDsKKyAgICBlbnRyeS0+ZHJfcHJlZmVyZW5jZSA9IElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfTUVESVVNOworCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9lbnRyeV9pbml0KGVudHJ5KTsKKyAgICBpZiAoU05NUF9FUlJfTk9FUlJPUiAhPSByYykgeworICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlcjpjcmVhdGUiLCJlcnJvciAlZCBpbiBhcmNoIGluaXRcbiIsIHJjKSk7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgIGVudHJ5ID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKiBlbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJlZShlbnRyeSk7Cit9CisKKy8qKgorICogdXBkYXRlIGFuIG9sZCBkZWZhdWx0cm91dGVyX2VudHJ5IGZyb20gYSBuZXcgb25lCisgKgorICogQG5vdGU6IG9ubHkgbWliIHJlbGF0ZWQgaXRlbXMgYXJlIGNvbXBhcmVkLiBJbnRlcm5hbCBvYmplY3RzCisgKiBzdWNoIGFzIG9pZF9pbmRleCwgbnNfZHJfaW5kZXggYW5kIGZsYWdzIGFyZSBub3QgY29tcGFyZWQuCisgKgorICogQHJldHZhbCAtMSAgOiBlcnJvcgorICogQHJldHZhbCA+PTAgOiBudW1iZXIgb2YgZmllbGRzIHVwZGF0ZWQKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X3VwZGF0ZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICpyaHMpCit7CisgICAgaW50IGNoYW5nZWQgPSAwOworCisgICAgaWYgKGxocy0+ZHJfYWRkcmVzc3R5cGUgIT0gcmhzLT5kcl9hZGRyZXNzdHlwZSkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+ZHJfYWRkcmVzc3R5cGUgPSByaHMtPmRyX2FkZHJlc3N0eXBlOworICAgIH0KKworICAgIGlmIChsaHMtPmRyX2FkZHJlc3NfbGVuICE9IHJocy0+ZHJfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgY2hhbmdlZCArPSAyOworICAgICAgICBsaHMtPmRyX2FkZHJlc3NfbGVuID0gcmhzLT5kcl9hZGRyZXNzX2xlbjsKKyAgICAgICAgbWVtY3B5KGxocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzLCByaHMtPmRyX2FkZHJlc3NfbGVuKTsKKyAgICB9CisgICAgZWxzZSBpZiAobWVtY21wKGxocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzLCByaHMtPmRyX2FkZHJlc3NfbGVuKSAhPSAwKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbWVtY3B5KGxocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzLCByaHMtPmRyX2FkZHJlc3NfbGVuKTsKKyAgICB9CisKKyAgICBpZiAobGhzLT5kcl9pZl9pbmRleCAhPSByaHMtPmRyX2lmX2luZGV4KSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5kcl9pZl9pbmRleCA9IHJocy0+ZHJfaWZfaW5kZXg7CisgICAgfQorCisgICAgaWYgKGxocy0+ZHJfbGlmZXRpbWUgIT0gcmhzLT5kcl9saWZldGltZSkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+ZHJfbGlmZXRpbWUgPSByaHMtPmRyX2xpZmV0aW1lOworICAgIH0KKworICAgIGlmIChsaHMtPmRyX3ByZWZlcmVuY2UgIT0gcmhzLT5kcl9wcmVmZXJlbmNlKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5kcl9wcmVmZXJlbmNlID0gcmhzLT5kcl9wcmVmZXJlbmNlOworICAgIH0KKworICAgIHJldHVybiBjaGFuZ2VkOworfQorCisvKioKKyAqIGNvcHkgYW4gIGRlZmF1bHRyb3V0ZXJfZW50cnkKKyAqCisgKiBAcmV0dmFsIC0xICA6IGVycm9yCisgKiBAcmV0dmFsIDAgICA6IG5vIGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jb3B5KG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICpyaHMpCit7CisgICAgbGhzLT5kcl9hZGRyZXNzdHlwZSA9IHJocy0+ZHJfYWRkcmVzc3R5cGU7CisgICAgbGhzLT5kcl9hZGRyZXNzX2xlbiA9IHJocy0+ZHJfYWRkcmVzc19sZW47CisgICAgbWVtY3B5KGxocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzLCByaHMtPmRyX2FkZHJlc3NfbGVuKTsKKyAgICBsaHMtPmRyX2lmX2luZGV4ICAgID0gcmhzLT5kcl9pZl9pbmRleDsKKyAgICBsaHMtPmRyX2xpZmV0aW1lICAgID0gcmhzLT5kcl9saWZldGltZTsKKyAgICBsaHMtPmRyX3ByZWZlcmVuY2UgID0gcmhzLT5kcl9wcmVmZXJlbmNlOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogVXRpbGl0eSByb3V0aW5lcworICovCisKKy8qKgorICovCit2b2lkCitfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfcmVsZWFzZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKiBlbnRyeSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUoZW50cnkpOworfQorCitzdGF0aWMgaW50IF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jb21wYXJlX2FkZHIoY29uc3Qgdm9pZCAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmhzKQoreworICAgIGNvbnN0IG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqbGggPSAoY29uc3QgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICopbGhzOworICAgIGNvbnN0IG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqcmggPSAoY29uc3QgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICopcmhzOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBsaHMpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcmhzKTsKKworICAgIC8qCisgICAgICogY29tcGFyZSBhZGRyZXNzIGxlbmd0aAorICAgICAqLworICAgIGlmIChsaC0+ZHJfYWRkcmVzc19sZW4gPCByaC0+ZHJfYWRkcmVzc19sZW4pCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChsaC0+ZHJfYWRkcmVzc19sZW4gPiByaC0+ZHJfYWRkcmVzc19sZW4pCisgICAgICAgIHJldHVybiAxOworCisgICAgLyoKKyAgICAgKiBsZW5ndGggZXF1YWwsIGNvbXBhcmUgYWRkcmVzcworICAgICAqLworICAgIHJldHVybiBtZW1jbXAobGgtPmRyX2FkZHJlc3MsIHJoLT5kcl9hZGRyZXNzLCBsaC0+ZHJfYWRkcmVzc19sZW4pOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4MDE2YQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmMKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZDokCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmg+CisKKyNpbmNsdWRlICJpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2lmZGVmIEhBVkVfTElOVVhfUlRORVRMSU5LX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBSQ1ZCVUZfU0laRSAzMjc2OAorI2RlZmluZSBTTkRCVUZfU0laRSA1MTIKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyNkZWZpbmUgRFJfQUREUlNUUkxFTiAgSU5FVDZfQUREUlNUUkxFTgorI2Vsc2UKKyNkZWZpbmUgRFJfQUREUlNUUkxFTiAgSU5FVF9BRERSU1RSTEVOCisjZW5kaWYKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcworICovCitzdGF0aWMgaW50IF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpOworCisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfZW50cnlfaW5pdChuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmVudHJ5OmFyY2giLCAibG9hZCAobGludXgpXG4iKSk7CisKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lcik7CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICB1X2ludCBmbGFncyA9IE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9LRUVQX0NPTlRBSU5FUjsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworI2lmbmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyIiwKKyAgICAgICAgICAgICAgICAiY2Fubm90IGdldCBkZWZhdWx0IHJvdXRlciBpbmZvcm1hdGlvbiIKKyAgICAgICAgICAgICAgICAiYXMgbmV0bGluayBzb2NrZXQgaXMgbm90IGF2YWlsYWJsZVxuIikpOworICAgIHJldHVybiAtMTsKKyNlbHNlCisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgaWR4X29mZnNldCA9IDA7CisgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICplbnRyeTsKKyAgICBpbnQgbmxzazsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsKKyAgICBpbnQgcmN2YnVmX3NpemUgPSBSQ1ZCVUZfU0laRTsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciBoZHI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmN2YnVmW1JDVkJVRl9TSVpFXTsKKyAgICB9IHJjdmJ1Zl91bmlvbjsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciBoZHI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc25kYnVmW1NOREJVRl9TSVpFXTsKKyAgICB9IHNuZGJ1Zl91bmlvbjsKKyAgICB1bnNpZ25lZCBjaGFyICpjb25zdCByY3ZidWYgPSByY3ZidWZfdW5pb24ucmN2YnVmOworICAgIHVuc2lnbmVkIGNoYXIgKmNvbnN0IHNuZGJ1ZiA9IHNuZGJ1Zl91bmlvbi5zbmRidWY7CisgICAgc3RydWN0IG5sbXNnaGRyICpoZHI7CisgICAgc3RydWN0IHJ0bXNnICpydGhkcjsKKyAgICBpbnQgY291bnQ7CisgICAgaW50IGVuZF9vZl9tZXNzYWdlID0gMDsKKyAgICBsb25nIGh6ID0gc3lzY29uZihfU0NfQ0xLX1RDSyk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CisKKyAgICAvKgorICAgICAqIE9wZW4gYSBuZXRsaW5rIHNvY2tldAorICAgICAqLworICAgIG5sc2sgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSk7CisgICAgaWYgKG5sc2sgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3Qgb3BlbiBuZXRsaW5rIHNvY2tldCA6ICVzXG4iLAorICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNldHNvY2tvcHQobmxzaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAorICAgICAgICAgICAgICAgICAgICZyY3ZidWZfc2l6ZSwgc2l6ZW9mKHJjdmJ1Zl9zaXplKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3Qgb3BlbiBuZXRsaW5rIHNvY2tldCA6ICVzXG4iLAorICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICBjbG9zZShubHNrKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICBtZW1zZXQoJmFkZHIsICdcMCcsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpKTsKKyAgICBhZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisKKyAgICBtZW1zZXQoc25kYnVmLCAnXDAnLCBTTkRCVUZfU0laRSk7CisgICAgaGRyID0gJnNuZGJ1Zl91bmlvbi5oZHI7CisgICAgaGRyLT5ubG1zZ190eXBlID0gUlRNX0dFVFJPVVRFOworICAgIGhkci0+bmxtc2dfcGlkID0gZ2V0cGlkKCk7CisgICAgaGRyLT5ubG1zZ19zZXEgPSAwOworICAgIGhkci0+bmxtc2dfZmxhZ3MgPSBOTE1fRl9ST09UIHwgTkxNX0ZfTUFUQ0ggfCBOTE1fRl9SRVFVRVNUOworICAgIGhkci0+bmxtc2dfbGVuID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgcnRtc2cpKTsKKyAgICBydGhkciA9IChzdHJ1Y3QgcnRtc2cgKilOTE1TR19EQVRBKGhkcik7CisgICAgcnRoZHItPnJ0bV90YWJsZSA9IFJUX1RBQkxFX01BSU47CisKKyAgICAvKgorICAgICAqIFNlbmQgYSByZXF1ZXN0IHRvIHRoZSBrZXJuZWwgdG8gZHVtcCB0aGUgcm91dGluZyB0YWJsZSB0byB1cworICAgICAqLworICAgIGNvdW50ID0gc2VuZHRvKG5sc2ssIHNuZGJ1ZiwgaGRyLT5ubG1zZ19sZW4sIDAsCisgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX25sKSk7CisgICAgaWYgKGNvdW50IDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5hYmxlIHRvIHNlbmQgbmV0bGluayBtZXNzYWdlIHRvIGtlcm5lbCA6ICVzXG4iLAorICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICBjbG9zZShubHNrKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qCisgICAgICogTm93IGxpc3RlbiBmb3IgcmVzcG9uc2UKKyAgICAgKi8KKyAgICBkbyB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxtaHA7CisgICAgICAgIHN0cnVjdCBydG1zZyAqcnRtcDsKKyAgICAgICAgc3RydWN0IHJ0YXR0ciAqcnRhcDsKKyAgICAgICAgc3RydWN0IHJ0YV9jYWNoZWluZm8gKnJ0Y2k7CisgICAgICAgIHNvY2tsZW5fdCBzb2NrX2xlbjsKKyAgICAgICAgaW50IHJ0Y291bnQ7CisKKyAgICAgICAgbWVtc2V0KHJjdmJ1ZiwgJ1wwJywgUkNWQlVGX1NJWkUpOworICAgICAgICBzb2NrX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpOworCisgICAgICAgIC8qCisgICAgICAgICAqIEdldCB0aGUgbWVzc2FnZQorICAgICAgICAgKi8KKyAgICAgICAgY291bnQgPSByZWN2ZnJvbShubHNrLCByY3ZidWYsIFJDVkJVRl9TSVpFLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgJnNvY2tfbGVuKTsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVuYWJsZSB0byByZWNlaXZlIG5ldGxpbmsgbWVzc2FnZXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFdhbGsgYWxsIG9mIHRoZSByZXR1cm5lZCBtZXNzYWdlcworICAgICAgICAgKi8KKyAgICAgICAgbmxtaHAgPSAmcmN2YnVmX3VuaW9uLmhkcjsKKyAgICAgICAgd2hpbGUgKE5MTVNHX09LKG5sbWhwLCBjb3VudCkpIHsKKyAgICAgICAgICAgIHVfY2hhciBhZGRyZXNzdHlwZTsKKyAgICAgICAgICAgIGNoYXIgICBhZGRyZXNzW05FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfQlVGX1NJWkUgKyAxXTsKKyAgICAgICAgICAgIHNpemVfdCBhZGRyZXNzX2xlbiA9ICAwOworICAgICAgICAgICAgaW50ICAgIGlmX2luZGV4ICAgID0gLTE7CisgICAgICAgICAgICB1X2xvbmcgbGlmZXRpbWUgICAgPSAgMDsKKyAgICAgICAgICAgIGludCAgICBwcmVmZXJlbmNlICA9IC0zOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTWFrZSBzdXJlIHRoZSBtZXNzYWdlIGlzIG9rCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChubG1ocC0+bmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJrZXJuZWwgcHJvZHVjZWQgbmxtc2cgZXJyXG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRW5kIG9mIG1lc3NhZ2UsIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKG5sbWhwLT5ubG1zZ190eXBlICYgTkxNU0dfRE9ORSkgeworICAgICAgICAgICAgICAgIGVuZF9vZl9tZXNzYWdlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEdldCB0aGUgcG9pbnRlciB0byB0aGUgcnRtc2cgc3RydWN0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJ0bXAgPSBOTE1TR19EQVRBKG5sbWhwKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHplcm8gbGVuZ3RoIGRlc3RpbmF0aW9uIGlzIGEgZGVmYXVsdCByb3V0ZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAocnRtcC0+cnRtX2RzdF9sZW4gIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIG5leHRfbmxtc2doZHI7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBTdGFydCBzY2FubmluZyB0aGUgYXR0cmlidXRlcyBmb3IgbmVlZGVkIGluZm8KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHJ0bXAtPnJ0bV9mYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICAgICAgICAgIGFkZHJlc3N0eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisgICAgICAgICAgICAgICAgbGlmZXRpbWUgPSBJUERFRkFVTFRST1VURVJMSUZFVElNRV9NQVg7ICAgICAvKiBpbmZpbml0eSAqLworICAgICAgICAgICAgfQorI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICAgICAgICAgIGVsc2UgaWYgKHJ0bXAtPnJ0bV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgICAgICAgICBhZGRyZXNzdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworICAgICAgICAgICAgICAgIC8qIHJvdXRlciBsaWZldGltZSBmb3IgSVB2NiBpcyByZXRyaWV2ZWQgYnkgUlRBX0NBQ0hFSU5GTyAqLworICAgICAgICAgICAgICAgIGxpZmV0aW1lID0gMDsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gbmV4dF9ubG1zZ2hkcjsgLyogc2tpcCwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGlzIHJvdXRlICovCisKKyAgICAgICAgICAgIHByZWZlcmVuY2UgPSAwOyAgICAgLyogcHJlZmVyZW5jZSBpcyBtZWRpdW0oMCkgZm9yIG5vdyAqLworCisgICAgICAgICAgICBydGFwID0gUlRNX1JUQShydG1wKTsKKyAgICAgICAgICAgIHJ0Y291bnQgPSBSVE1fUEFZTE9BRChubG1ocCk7CisgICAgICAgICAgICB3aGlsZSAoUlRBX09LKHJ0YXAsIHJ0Y291bnQpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChydGFwLT5ydGFfdHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFJUQV9PSUY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZl9pbmRleCA9ICooaW50ICopKFJUQV9EQVRBKHJ0YXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgUlRBX0dBVEVXQVk6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2xlbiA9IFJUQV9QQVlMT0FEKHJ0YXApOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGFkZHJlc3MsICdcMCcsIHNpemVvZihhZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYWRkcmVzcywgUlRBX0RBVEEocnRhcCksIGFkZHJlc3NfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICAgICAgICAgICAgICBjYXNlIFJUQV9DQUNIRUlORk86CisgICAgICAgICAgICAgICAgICAgICAgICBydGNpID0gUlRBX0RBVEEocnRhcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJ0bXAtPnJ0bV9mbGFncyAmIFJUTV9GX0NMT05FRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnRjaSAmJiBydGNpLT5ydGFfZXhwaXJlcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZSA9IHJ0Y2ktPnJ0YV9leHBpcmVzIC8gaHo7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAgLyogc3dpdGNoICovCisKKyAgICAgICAgICAgICAgICBydGFwID0gUlRBX05FWFQocnRhcCwgcnRjb3VudCk7CisgICAgICAgICAgICB9IC8qIHdoaWxlIFJUQV9PSyhydGFwKSAqLworCisgICAgICAgICAgICBpZiAoYWRkcmVzc19sZW4gIT0gMCAmJiBpZl9pbmRleCAhPSAtMSAmJgorICAgICAgICAgICAgICAgIGxpZmV0aW1lICE9IDAgJiYgcHJlZmVyZW5jZSAhPSAtMyApIHsKKyAgICAgICAgICAgICAgICBERUJVR0lGKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlciIpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBhZGRyX3N0cltEUl9BRERSU1RSTEVOXTsKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGFkZHJfc3RyLCAnXDAnLCBEUl9BRERSU1RSTEVOKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocnRtcC0+cnRtX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQsIGFkZHJlc3MsIGFkZHJfc3RyLCBEUl9BRERSU1RSTEVOKTsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgYWRkcmVzcywgYWRkcl9zdHIsIERSX0FERFJTVFJMRU4pOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3VuZCBkZWZhdWx0IHJvdXRlOiAlcyBpZl9pbmRleCAlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWZldGltZSAlbHUgcHJlZmVyZW5jZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9zdHIsIGlmX2luZGV4LCBsaWZldGltZSwgcHJlZmVyZW5jZSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBlbnRyeS0+bnNfZHJfaW5kZXggICAgPSArK2lkeF9vZmZzZXQ7CisgICAgICAgICAgICAgICAgZW50cnktPmRyX2FkZHJlc3N0eXBlID0gYWRkcmVzc3R5cGU7CisgICAgICAgICAgICAgICAgZW50cnktPmRyX2FkZHJlc3NfbGVuID0gYWRkcmVzc19sZW47CisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5kcl9hZGRyZXNzLCBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0JVRl9TSVpFKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZHJfaWZfaW5kZXggICAgPSBpZl9pbmRleDsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZHJfbGlmZXRpbWUgICAgPSBsaWZldGltZTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZHJfcHJlZmVyZW5jZSAgPSBwcmVmZXJlbmNlOworCisgICAgICAgICAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczphcnA6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHdpdGggZGVmYXVsdHJvdXRlcl9lbnRyeTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKK25leHRfbmxtc2doZHI6CisgICAgICAgICAgICBubG1ocCA9IE5MTVNHX05FWFQobmxtaHAsIGNvdW50KTsKKyAgICAgICAgfSAvKiB3aGlsZSBOTE1TR19PSyhubG1ocCkgKi8KKworICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICB9IHdoaWxlICghZW5kX29mX21lc3NhZ2UpOworCisgICAgY2xvc2Uobmxzayk7CisgICAgcmV0dXJuIHJjOworI2VuZGlmICAvKiBIQVZFX0xJTlVYX1JUTkVUTElOS19IICovCit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9zeXNjdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDZlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9zeXNjdGwuYwpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkOiQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaD4KKworI2luY2x1ZGUgImlwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmICFkZWZpbmVkKFNBX1NJWkUpICYmICFkZWZpbmVkKFJUX1JPVU5EVVApCisjZGVmaW5lIFJUX1JPVU5EVVAoYSkgIFwKKyAgICAgICAgKChhKSA+IDAgPyAoMSArICgoKGEpIC0gMSkgfCAoc2l6ZW9mKGxvbmcpIC0gMSkpKSA6IHNpemVvZihsb25nKSkKKyNlbmRpZgorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgX2xvYWRfZGVmYXVsdHJvdXRlcl9mcm9tX3N5c2N0bChuZXRzbm1wX2NvbnRhaW5lciAqLCBpbnQpOworCitzdGF0aWMgaW50IGlkeF9vZmZzZXQ7CisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfZW50cnlfaW5pdChuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgZXJyOworCisgICAgZXJyID0gMDsKKyAgICBpZHhfb2Zmc2V0ID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlcjplbnRyeTphcmNoIiwgImxvYWRcbiIpKTsKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICJuZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZDogY29udGFpbmVyIGludmFsaWRcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBlcnIgPSBfbG9hZF9kZWZhdWx0cm91dGVyX2Zyb21fc3lzY3RsKGNvbnRhaW5lciwgQUZfSU5FVCk7CisgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9GUkVFX0tFRVBfQ09OVEFJTkVSOworICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgZmxhZ3MpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgZXJyID0gX2xvYWRfZGVmYXVsdHJvdXRlcl9mcm9tX3N5c2N0bChjb250YWluZXIsIEFGX0lORVQ2KTsKKyAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgdV9pbnQgZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfS0VFUF9DT05UQUlORVI7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBmbGFncyk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyNlbmRpZgorCitvdXQ6CisgICAgcmV0dXJuIGVycjsKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkX2RlZmF1bHRyb3V0ZXJfZnJvbV9zeXNjdGwobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGZhbWlseSkKK3sKKyAgICBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmVudHJ5OworICAgIHN0cnVjdCBydF9tc2doZHIgKnJ0bTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9zYSwgKmd3X3NhOworICAgIGNoYXIgKmJ1ZiwgKmxpbSwgKm5ld2J1ZiwgKm5leHQ7CisgICAgY2hhciBhZGRyZXNzW05FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfQlVGX1NJWkVdOworICAgIGludCBtaWJbNl07CisgICAgc2l6ZV90IGFkZHJlc3NfbGVuLCBuZWVkZWQ7CisgICAgaW50IGFkZHJlc3NfdHlwZSwgZXJyLCBwcmVmZXJlbmNlLCBzdDsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIG1pYlswXSA9IENUTF9ORVQ7CisgICAgbWliWzFdID0gUEZfUk9VVEU7CisgICAgbWliWzJdID0gMDsKKyAgICBtaWJbM10gPSBmYW1pbHk7CisgICAgbWliWzRdID0gTkVUX1JUX0RVTVA7CisgICAgbWliWzVdID0gMDsKKworICAgIGVyciA9IDA7CisKKyAgICBidWYgPSBuZXdidWYgPSBOVUxMOworCisgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgIGFkZHJlc3NfbGVuID0gNDsKKyAgICAgICAgYWRkcmVzc190eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIH0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgIGFkZHJlc3NfbGVuID0gMTY7CisgICAgICAgIGFkZHJlc3NfdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0gRUlOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgNiwgTlVMTCwgJm5lZWRlZCwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBFbXB0eSBhcnAgdGFibGUuICovCisgICAgaWYgKG5lZWRlZCA9PSAwKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgbmV3YnVmID0gcmVhbGxvYyhidWYsIG5lZWRlZCk7CisgICAgICAgIGlmIChuZXdidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gbmV3YnVmOworICAgICAgICBzdCA9IHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKG1pYlswXSksIGJ1ZiwgJm5lZWRlZCwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdCA9PSAwIHx8IGVycm5vICE9IEVOT01FTSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkZWQgKz0gbmVlZGVkIC8gODsgLyogWFhYOiB3aHkgOD8gKi8KKyAgICB9CisgICAgaWYgKHN0ID09IC0xKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBsaW0gPSBidWYgKyBuZWVkZWQ7CisgICAgZm9yIChuZXh0ID0gYnVmOyBuZXh0IDwgbGltOyBuZXh0ICs9IHJ0bS0+cnRtX21zZ2xlbikgeworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKwlzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnkgPSBJTjZBRERSX0FOWV9JTklUOworI2VuZGlmCisKKyAgICAgICAgcnRtID0gKHN0cnVjdCBydF9tc2doZHIgKiluZXh0OworCisgICAgICAgIGlmICghKHJ0bS0+cnRtX2FkZHJzICYgUlRBX0dBVEVXQVkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZHN0X3NhID0gKHN0cnVjdCBzb2NrYWRkciopKHJ0bSArIDEpOworI2lmZGVmIFNBX1NJWkUKKyAgICAgICAgZ3dfc2EgPSAoc3RydWN0IHNvY2thZGRyKikoU0FfU0laRShkc3Rfc2EpICsgKGNoYXIqKWRzdF9zYSk7CisjZWxzZQorICAgICAgICBnd19zYSA9IChzdHJ1Y3Qgc29ja2FkZHIqKShSVF9ST1VORFVQKGRzdF9zYS0+c2FfbGVuKSArIChjaGFyKilkc3Rfc2EpOworI2VuZGlmCisKKyAgICAgICAgc3dpdGNoIChmYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgaWYgKCgoc3RydWN0IHNvY2thZGRyX2luKilkc3Rfc2EpLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgbWVtY3B5KGFkZHJlc3MsICYoKHN0cnVjdCBzb2NrYWRkcl9pbiopZ3dfc2EpLT5zaW5fYWRkci5zX2FkZHIsCisJICAgICAgICAgICBhZGRyZXNzX2xlbik7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICBpZiAobWVtY21wKCgoc3RydWN0IHNvY2thZGRyX2luNiopZHN0X3NhKS0+c2luNl9hZGRyLnM2X2FkZHIsCisJCQkmaW42YWRkcl9hbnksIHNpemVvZiBpbjZhZGRyX2FueSkgIT0gMCkKKwkJY29udGludWU7IC8qIFhYWDogbmVlZCB0byBkZXRlcm1pbmUgcXVhbGlmeWluZyBjcml0ZXJpYSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgKiBkZWZhdWx0IGdhdGV3YXlzIGluIElQdjYuICovCisgICAgICAgICAgICBtZW1jcHkoYWRkcmVzcywgJigoc3RydWN0IHNvY2thZGRyX2luNiopZHN0X3NhKS0+c2luNl9hZGRyLnM2X2FkZHIsCisJCSAgIGFkZHJlc3NfbGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIGVyciA9IEVOT01FTTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogWFhYOiB0aGlzIGlzIHdyb25nIChoYXJkY29kaW5nIHRoZSByb3V0ZXIgcHJlZmVyZW5jZSB0byBtZWRpdW0pLiAqLworICAgICAgICBwcmVmZXJlbmNlID0gMDsKKworICAgICAgICBlbnRyeS0+bnNfZHJfaW5kZXggICAgPSArK2lkeF9vZmZzZXQ7CisgICAgICAgIGVudHJ5LT5kcl9hZGRyZXNzdHlwZSA9IGFkZHJlc3NfdHlwZTsKKyAgICAgICAgZW50cnktPmRyX2FkZHJlc3NfbGVuID0gYWRkcmVzc19sZW47CisgICAgICAgIG1lbWNweShlbnRyeS0+ZHJfYWRkcmVzcywgYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKTsKKyAgICAgICAgZW50cnktPmRyX2lmX2luZGV4ID0gcnRtLT5ydG1faW5kZXg7CisgICAgICAgIGVudHJ5LT5kcl9saWZldGltZSAgICA9IHJ0bS0+cnRtX3JteC5ybXhfZXhwaXJlOworICAgICAgICBlbnRyeS0+ZHJfcHJlZmVyZW5jZSAgPSBwcmVmZXJlbmNlOworCisgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczphcnA6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciB3aXRoIGRlZmF1bHRyb3V0ZXJfZW50cnk6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCitvdXQ6CisgICAgZnJlZShidWYpOworICAgIHJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgKaW5kZXggYzY2ZjE2MS4uZDc5YzdjMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaApAQCAtMjAsMTEgKzIwLDExIEBACiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbikKICNpZiBkZWZpbmVkKCBsaW51eCApCiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4KQorI2VsaWYgZGVmaW5lZCggc29sYXJpczIgKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMikKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q3ICkgfHwgZGVmaW5lZCggbmV0YnNkNSApIHx8IGRlZmluZWQoIG9wZW5ic2Q0ICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc3lzY3RsKQogI2Vsc2UKLS8qCi0gKiBjb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgZmlsZSEKLSAqIHJlcXVpcmUgYSBib2d1cyBmaWxlIHRvIGdlbmVyYXRlIGFuIGVycm9yLgotICovCi1jb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLXVua25vd24tYXJjaCkKK2NvbmZpZ19lcnJvcih0aGUgaXBhZGRyZXNzIGRhdGEgYWNjZXNzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LikKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYwppbmRleCAzMTc2NTRlLi5hNjYzOTg1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMKQEAgLTEyLDYgKzEyLDE5IEBACiAKICNpbmNsdWRlICJpcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfY29uc3RhbnRzLmgiCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBhZGRyZXNzX2NvbW1vbiwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NfY29tbW9uX2NvcHlfdXRpbGl0aWVzLCBpcGFkZHJlc3NfY29tbW9uKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19lbnRyeV9jb3B5LCBpcGFkZHJlc3NfY29tbW9uKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19lbnRyeV91cGRhdGUsIGlwYWRkcmVzc19jb21tb24pCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBhZGRyZXNzX3ByZWZpeF9jb3B5LCBpcGFkZHJlc3NfY29tbW9uX2NvcHlfdXRpbGl0aWVzKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0VOVFJZX0NPUFkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwYWRkcmVzc19hcmNoX2VudHJ5X2NvcHkpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0VOVFJZX0NPUFkgKi8KKwogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcwpAQCAtMjExLDcgKzIyNCw4IEBACiAgICAgICogbWFrZSBzdXJlIGludGVyZmFjZSBhbmQgaWZJbmRleCBtYXRjaCB1cAogICAgICAqLwogICAgIGlmIChOVUxMID09IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9uYW1lX2ZpbmQoZW50cnktPmlmX2luZGV4KSkgewotICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsICJjYW50IGZpbmQgbmFtZSBmb3IgaW5kZXggJWRcbiIsCisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6c2V0IiwKKyAgICAgICAgICAgICAgICAgICAiY2FudCBmaW5kIG5hbWUgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwKICAgICAgICAgICAgICAgICAgIGVudHJ5LT5pZl9pbmRleCkpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjQ2LDYgKzI2MCw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0VOVFJZX1VQREFURQogLyoqCiAgKiB1cGRhdGUgYW4gb2xkIGlwYWRkcmVzc19lbnRyeSBmcm9tIGEgbmV3IG9uZQogICoKQEAgLTMwNCwxMCArMzE5LDMzIEBACiAgICAgICAgICsrY2hhbmdlZDsKICAgICAgICAgbGhzLT5pYV9vcmlnaW4gPSByaHMtPmlhX29yaWdpbjsKICAgICB9CisgICAKKyAgICBpZiAobGhzLT5pYV9vbmxpbmtfZmxhZyAhPSByaHMtPmlhX29ubGlua19mbGFnKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5pYV9vbmxpbmtfZmxhZyA9IHJocy0+aWFfb25saW5rX2ZsYWc7CisgICAgfQorCisgICAgaWYgKGxocy0+aWFfYXV0b25vbW91c19mbGFnICE9IHJocy0+aWFfYXV0b25vbW91c19mbGFnKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5pYV9hdXRvbm9tb3VzX2ZsYWcgPSByaHMtPmlhX2F1dG9ub21vdXNfZmxhZzsKKyAgICB9CisKKyAgICBpZiAobGhzLT5pYV9wcmVmZXJlZF9saWZldGltZSAhPSByaHMtPmlhX3ByZWZlcmVkX2xpZmV0aW1lKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5pYV9wcmVmZXJlZF9saWZldGltZSA9IHJocy0+aWFfcHJlZmVyZWRfbGlmZXRpbWU7CisgICAgfQorCisgICAgaWYgKGxocy0+aWFfdmFsaWRfbGlmZXRpbWUgIT0gcmhzLT5pYV92YWxpZF9saWZldGltZSkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+aWFfdmFsaWRfbGlmZXRpbWUgPSByaHMtPmlhX3ZhbGlkX2xpZmV0aW1lOworICAgIH0KKwogCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfRU5UUllfVVBEQVRFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfRU5UUllfQ09QWQogLyoqCiAgKiBjb3B5IGFuICBpcGFkZHJlc3NfZW50cnkKICAqCkBAIC0zMzksMTIgKzM3NywxNCBAQAogICAgIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0VOVFJZX0NPUFkgKi8KIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBVdGlsaXR5IHJvdXRpbmVzCiAgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19QUkVGSVhfQ09QWQogLyoqCiAgKiBjb3B5IHRoZSBwcmVmaXggcG9ydGlvbiBvZiBhbiBpcCBhZGRyZXNzCiAgKi8KQEAgLTM3MCw2ICs0MTAsNyBAQAogCiAgICAgcmV0dXJuIHBmeF9sZW47CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfUFJFRklYX0NPUFkgKi8KIAogCiAvKioKQEAgLTQwMCw2ICs0NDEsNTAgQEAKICAgICByZXR1cm4gbGVuOwogfQogCitpbl9hZGRyX3QgbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9tYXNrKGludCBsZW4pCit7CisgICAgaW50IGkgPSAwLCBtID0gMHg4MDsKKyAgICBpbl9hZGRyX3QgbWFzazsKKyAgICB1bnNpZ25lZCBjaGFyICptcCA9ICh1bnNpZ25lZCBjaGFyICopJm1hc2s7CisKKyAgICBpZiAobGVuIDwgMCB8fCBsZW4gPiAzMikgYWJvcnQoKTsKKworICAgIG1lbXNldChtcCwgMCwgc2l6ZW9mKG1hc2spKTsKKworICAgIHdoaWxlIChsZW4gPj0gOCkgeworICAgICAgICBtcFtpXSA9IDB4RkY7CisJbGVuIC09IDg7CisJaSsrOworICAgIH0KKyAgICB3aGlsZSAobGVuKSB7CisgICAgICAgIG1wW2ldIHw9IG07CisJbSA+Pj0gMTsKKwlsZW4tLTsKKyAgICB9CisgICAgcmV0dXJuIG1hc2s7Cit9CisKK2ludAorbmV0c25tcF9pcGFkZHJlc3NfaXB2Nl9wcmVmaXhfbGVuKHN0cnVjdCBpbjZfYWRkciBtYXNrKQoreworICAgIGludCBpLCBsZW4gPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKm1wID0gKHVuc2lnbmVkIGNoYXIgKikmbWFzay5zNl9hZGRyOworCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJaWYgKG1wW2ldID09IDB4RkYpIGxlbiArPSA4OworCWVsc2UgYnJlYWs7CisKKyAgICBpZiAoaSA9PSAxNikKKwlyZXR1cm4gbGVuOworCisgICAgd2hpbGUoMHg4MCAmIG1wW2ldKSB7CisgICAgICAgICsrbGVuOworICAgICAgICBtcFtpXSA8PD0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuOworfQorCiAKIC8qKgogICovCkBAIC00MzEsMyArNTE2LDUxIEBACiAgICAgICovCiAgICAgcmV0dXJuIG1lbWNtcChsaC0+aWFfYWRkcmVzcywgcmgtPmlhX2FkZHJlc3MsIGxoLT5pYV9hZGRyZXNzX2xlbik7CiB9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQ09NTU9OX0NPUFlfVVRJTElUSUVTCitpbnQKK25ldHNubXBfaXBhZGRyZXNzX2ZsYWdzX2NvcHkodV9sb25nICppcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlhX3ByZWZlcmVkX2xpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlhX3ZhbGlkX2xpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlhX29ubGlua19mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlhX2F1dG9ub21vdXNfZmxhZykKK3sKKworICAgIC8qQ29weSBhbGwgdGhlIGZsYWdzKi8KKyAgICAqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWUgPSAqaWFfcHJlZmVyZWRfbGlmZXRpbWU7CisgICAgKmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWUgPSAqaWFfdmFsaWRfbGlmZXRpbWU7CisgICAgKmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcgPSAqaWFfb25saW5rX2ZsYWc7CisgICAgKmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnID0gKmlhX2F1dG9ub21vdXNfZmxhZzsKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2lwYWRkcmVzc19wcmVmaXhfb3JpZ2luX2NvcHkodV9sb25nICppcEFkZHJlc3NQcmVmaXhPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIGlhX29yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc0FkZHJUeXBlKQoreworICAgIGlmKGlwQWRkcmVzc0FkZHJUeXBlID09IElORVRBRERSRVNTVFlQRV9JUFY0KXsKKyAgICAgICBpZihpYV9vcmlnaW4gPT0gNikgLypSYW5kb20qLworICAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4T3JpZ2luKSA9IDMgLypJUEFERFJFU1NQUkVGSVhPUklHSU5UQ19XRUxMS05PV04qLzsKKyAgICAgICBlbHNlCisgICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW4pID0gaWFfb3JpZ2luOworICAgIH0gZWxzZSB7CisgICAgICAgaWYoaWFfb3JpZ2luID09IDUpIHsgLypMaW5rIExheWVyKi8KKyAgICAgICAgICBpZighZmxhZ3MpIC8qR2xvYmFsIGFkZHJlc3MgYXNzaWduZWQgYnkgcm91dGVyIGFkdiovCisgICAgICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW4pID0gNSAvKklQQUREUkVTU1BSRUZJWE9SSUdJTlRDX1JPVVRFUkFEViovOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeE9yaWdpbikgPSAzIC8qSVBBRERSRVNTUFJFRklYT1JJR0lOVENfV0VMTEtOT1dOKi87CisgICAgICAgfQorICAgICAgIGVsc2UgaWYoaWFfb3JpZ2luID09IDYpIC8qUmFuZG9tKi8KKyAgICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeE9yaWdpbikgPSA1IC8qSVBBRERSRVNTUFJFRklYT1JJR0lOVENfUk9VVEVSQURWKi87CisgICAgICAgZWxzZQorICAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4T3JpZ2luKSA9IGlhX29yaWdpbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQ09NTU9OX0NPUFlfVVRJTElUSUVTICovCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYwppbmRleCBiMTk3ODZkLi42MDI1ZjA1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCkBAIC00LDYgKzQsNyBAQAogICogJElkJAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgogCkBAIC0yMCw2ICsyMSw4IEBACiAKICNpbmNsdWRlICJpcGFkZHJlc3NfaW9jdGwuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRyZXNzX2lvY3RsX2VudHJ5X2NvcHksIGlwYWRkcmVzc19jb21tb24pCisKIHN0YXRpYyB2b2lkIF9wcmludF9mbGFncyhzaG9ydCBmbGFncyk7CiAKICNkZWZpbmUgTElTVF9UT0tFTiAiaW9jdGxfZXh0cmFzIgpAQCAtMzUsNyArMzgsNyBAQAogICAgIGlmICgoTlVMTCA9PSBlbnRyeSkgfHwgKE5VTEwgPT0gZW50cnktPmFyY2hfZGF0YSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIG5ldHNubXBfZ2V0X2xpc3RfZGF0YShlbnRyeS0+YXJjaF9kYXRhLCBMSVNUX1RPS0VOKTsKKyAgICByZXR1cm4gKF9pb2N0bF9leHRyYXMqKW5ldHNubXBfZ2V0X2xpc3RfZGF0YShlbnRyeS0+YXJjaF9kYXRhLCBMSVNUX1RPS0VOKTsKIH0KIAogLyoqCkBAIC04Niw2ICs4OSw3IEBACiAgICAgbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlKCZlbnRyeS0+YXJjaF9kYXRhLCBMSVNUX1RPS0VOKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19JT0NUTF9FTlRSWV9DT1BZCiAvKioKICAqIGNvcHkgaW9jdGwgZXh0cmFzCiAgKgpAQCAtMTIyLDYgKzEyNiw3IEBACiAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfSU9DVExfRU5UUllfQ09QWSAqLwogCiAvKioKICAqIGxvYWQgaXB2NCBhZGRyZXNzIHZpYSBpb2N0bApAQCAtMTM1LDcgKzE0MCw4IEBACiAgICAgc3RydWN0IGlmcmVxICAgKmlmcnA7CiAgICAgc3RydWN0IHNvY2thZGRyIHNhdmVfYWRkcjsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBzaTsKLSAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnk7CisgICAgc3RydWN0IGFkZHJlc3NfZmxhZ19pbmZvIGFkZHJfaW5mbzsKKyAgICBpbl9hZGRyX3QgICAgICAgaXB2YWw7CiAgICAgX2lvY3RsX2V4dHJhcyAgICAgICAgICAgKmV4dHJhczsKIAogICAgIGlmICgoc2QgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpIDwgMCkgewpAQCAtMTU0LDkgKzE2MCwxOCBAQAogCiAgICAgaWZycCA9IGlmYy5pZmNfcmVxOwogICAgIGZvcihpPTA7IGkgPCBpbnRlcmZhY2VzOyArK2ksICsraWZycCkgeworICAgICAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnksICpiY2FzdGVudHJ5ID0gTlVMTDsKIAogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLAogICAgICAgICAgICAgICAgICAgICAiIGludGVyZmFjZSAlZCwgJXNcbiIsIGksIGlmcnAtPmlmcl9uYW1lKSk7CisKKyAgICAgICAgaWYgKEFGX0lORVQgIT0gaWZycC0+aWZyX2FkZHIuc2FfZmFtaWx5KSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBza2lwcGluZyAlczsgbm9uIEFGX0lORVQgZmFtaWx5ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaWZycC0+aWZyX25hbWUsIGlmcnAtPmlmcl9hZGRyLnNhX2ZhbWlseSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAgICAvKgogICAgICAgICAgKi8KICAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfY3JlYXRlKCk7CkBAIC0xODEsOSArMTk2LDkgQEAKICAgICAgICAgLyoKICAgICAgICAgICogc2V0IGluZGV4ZXMKICAgICAgICAgICovCi0gICAgICAgIG5ldHNubXBfYXNzZXJ0KEFGX0lORVQgPT0gaWZycC0+aWZyX2FkZHIuc2FfZmFtaWx5KTsKICAgICAgICAgc2kgPSAoc3RydWN0IHNvY2thZGRyX2luICopICZpZnJwLT5pZnJfYWRkcjsKICAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuID0gc2l6ZW9mKHNpLT5zaW5fYWRkci5zX2FkZHIpOworICAgICAgICBpcHZhbCA9IHNpLT5zaW5fYWRkci5zX2FkZHI7CiAgICAgICAgIG1lbWNweShlbnRyeS0+aWFfYWRkcmVzcywgJnNpLT5zaW5fYWRkci5zX2FkZHIsCiAgICAgICAgICAgICAgICBlbnRyeS0+aWFfYWRkcmVzc19sZW4pOwogCkBAIC0yMjAsNiArMjM1LDI2IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKgorICAgICAgICAgKiBnZXQgYnJvYWRjYXN0CisgICAgICAgICAqLworICAgICAgICBtZW1zZXQoJmFkZHJfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbykpOworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgICAgIGFkZHJfaW5mbyA9IG5ldHNubXBfYWNjZXNzX290aGVyX2luZm9fZ2V0KGVudHJ5LT5pZl9pbmRleCwgQUZfSU5FVCk7CisgICAgICAgIGlmKGFkZHJfaW5mby5iY2FzdGZsZykgeworICAgICAgICAgICBiY2FzdGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICAgICBpZihOVUxMID09IGJjYXN0ZW50cnkpIHsKKyAgICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgYmNhc3RlbnRyeS0+aWZfaW5kZXggPSBlbnRyeS0+aWZfaW5kZXg7CisgICAgICAgICAgIGJjYXN0ZW50cnktPm5zX2lhX2luZGV4ID0gKytpZHhfb2Zmc2V0OworICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IHNpemVvZihhZGRyX2luZm8uYWRkcik7CisgICAgICAgICAgIG1lbWNweShiY2FzdGVudHJ5LT5pYV9hZGRyZXNzLCAmYWRkcl9pbmZvLmFkZHIsCisgICAgICAgICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8qCiAgICAgICAgICAqIGdldCBuZXRtYXNrCiAgICAgICAgICAqLwogICAgICAgICBpZnJwLT5pZnJfYWRkciA9IHNhdmVfYWRkcjsKQEAgLTIzMyw2ICsyNjgsOSBAQAogICAgICAgICBzaSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlmcnAtPmlmcl9hZGRyOwogICAgICAgICBlbnRyeS0+aWFfcHJlZml4X2xlbiA9CiAgICAgICAgICAgICBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4oc2ktPnNpbl9hZGRyLnNfYWRkcik7CisgICAgICAgIGlmKGJjYXN0ZW50cnkpCisgICAgICAgICAgIGJjYXN0ZW50cnktPmlhX3ByZWZpeF9sZW4gPSBlbnRyeS0+aWFfcHJlZml4X2xlbjsKKwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGdldCBmbGFncwpAQCAtMjQ2LDcgKzI4NCwxMiBAQAogICAgICAgICB9CiAgICAgICAgIGV4dHJhcy0+ZmxhZ3MgPSBpZnJwLT5pZnJfZmxhZ3M7CiAKLSAgICAgICAgZW50cnktPmlhX3R5cGUgPSBJUEFERFJFU1NUWVBFX1VOSUNBU1Q7IC8qIGFzc3VtZSB1bmljYXN0PyAqLworICAgICAgICBpZihiY2FzdGVudHJ5KQorICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV90eXBlID0gSVBBRERSRVNTVFlQRV9CUk9BRENBU1Q7CisgICAgICAgIGlmKGFkZHJfaW5mby5hbnljYXN0ZmxnKQorICAgICAgICAgICBlbnRyeS0+aWFfdHlwZSA9IElQQUREUkVTU1RZUEVfQU5ZQ0FTVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICBlbnRyeS0+aWFfdHlwZSA9IElQQUREUkVTU1RZUEVfVU5JQ0FTVDsKIAogICAgICAgICAvKiogZW50cnktPmlhX3ByZWZpeF9vaWQgPyAqLwogCkBAIC0yNTYsMTYgKzI5OSwyNyBAQAogICAgICAgICAgKiAgIGFsd2F5cyBwcmVmZXJyZWQoMSkuCiAgICAgICAgICAqLwogICAgICAgICBlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfUFJFRkVSUkVEOworICAgICAgICBpZihiY2FzdGVudHJ5KQorICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV9zdGF0dXMgPSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQ7CiAKICAgICAgICAgLyoKICAgICAgICAgICogY2FuIHdlIGZpZ3VyZSBvdXQgaWYgYW4gYWRkcmVzcyBpcyBmcm9tIERIQ1A/CiAgICAgICAgICAqIHVzZSBtYW51YWwgdW50aWwgdGhlbi4uLgogICAgICAgICAgKi8KLSAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKyAgICAgICAgaWYoSVNfQVBJUEEoaXB2YWwpKSB7CisgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19SQU5ET007CisgICAgICAgICAgIGlmKGJjYXN0ZW50cnkpCisgICAgICAgICAgICAgIGJjYXN0ZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX1JBTkRPTTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKyAgICAgICAgICAgaWYoYmNhc3RlbnRyeSkKKyAgICAgICAgICAgICAgYmNhc3RlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfTUFOVUFMOworICAgICAgICB9CiAKICAgICAgICAgREVCVUdJRigiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiKSB7CiAgICAgICAgICAgICBERUJVR01TR1RfTkMoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgaWYgJWQ6IGFkZHIgbGVuICVkLCBpbmRleCAweCVseFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpZiAlZDogYWRkciBsZW4gJWQsIGluZGV4IDB4JSIgTkVUU05NUF9QUklvICJ4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBlbnRyeS0+aWFfYWRkcmVzc19sZW4sIGVudHJ5LT5pZl9pbmRleCkpOwogICAgICAgICAgICAgaWYgKDQgPT0gZW50cnktPmlhX2FkZHJlc3NfbGVuKQogICAgICAgICAgICAgICAgIERFQlVHTVNHVF9OQygoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgIiBhZGRyZXNzICVwXG4iLApAQCAtMjc5LDkgKzMzMywxOSBAQAogICAgICAgICAvKgogICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCiAgICAgICAgICAqLwotICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApCi0gICAgICAgIHsKKyAgICAgICAgaWYoYmNhc3RlbnRyeSl7CisgICAgICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGJjYXN0ZW50cnkpIDwgMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsImVycm9yIHdpdGggaXBhZGRyZXNzX2VudHJ5OiBpbnNlcnQgYnJvYWRjYXN0IGVudHJ5IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfZnJlZShiY2FzdGVudHJ5KTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiY2FzdGVudHJ5ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwiZXJyb3Igd2l0aCBpcGFkZHJlc3NfZW50cnk6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJEdXBsaWNhdGUgSVB2NCBhZGRyZXNzIGRldGVjdGVkLCBzb21lIGludGVyZmFjZXMgbWF5IG5vdCBiZSB2aXNpYmxlIGluIElQLU1JQlxuIikpOwogICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTMzMiw3ICszOTYsNyBAQAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaWZjLmlmY19idWYpOwogICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJwcm9jZXNzaW5nICVkIGludGVyZmFjZXNcbiIsIGludGVyZmFjZXMpKTsKIAotICAgIGFsaWFzX2xpc3QgPSBtYWxsb2MoaW50ZXJmYWNlcyAqIHNpemVvZihpbnQpKTsKKyAgICBhbGlhc19saXN0ID0gKGludCopbWFsbG9jKGludGVyZmFjZXMgKiBzaXplb2YoaW50KSk7CiAgICAgaWYgKE5VTEwgPT0gYWxpYXNfbGlzdCkgewogICAgICAgICBjbG9zZShzZCk7CiAgICAgICAgIHJldHVybiAtMjsKQEAgLTM2OCwxMCArNDMyLDEzIEBACiAgICAgICAgIGZvcihrPTA7azxqOysraykKICAgICAgICAgICAgIGlmIChhbGlhc19saXN0W2tdID09IGkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChrID09IGopCisgICAgICAgIGlmIChrID09IGopIHsKKyAgICAgICAgICAgIGZyZWUoYWxpYXNfbGlzdCk7CiAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQogICAgIH0KIAorICAgIGZyZWUoYWxpYXNfbGlzdCk7CiAgICAgcmV0dXJuIGludGVyZmFjZXMgKyAxOwogfQogCkBAIC00MTIsNyArNDc5LDggQEAKICAgICAgICAgaW50ICAgYWxpYXNfaWR4OwogCiAgICAgICAgIGlmIChOVUxMID09IG5hbWUpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6c2V0IiwgImNhbnQgZmluZCBuYW1lIGZvciBpbmRleCAlbGRcbiIsCisgICAgICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsCisgICAgICAgICAgICAgICAgICAgICAgICJjYW50IGZpbmQgbmFtZSBmb3IgaW5kZXggJSIgTkVUU05NUF9QUklvICJkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+aWZfaW5kZXgpKTsKICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTQ4OSw2ICs1NTcsOTEgQEAKICAgICByZXR1cm4gMDsKIH0KIAorCisvKioKKyAqIEFkZC9yZW1vdmUgSVB2NiBhZGRyZXNzIHVzaW5nIGlvY3RsLgorICogQHJldHZhbCAgMCA6IG5vIGVycm9yCisgKiBAcmV0dmFsIC0xIDogYmFkIHBhcmFtZXRlcgorICogQHJldHZhbCAtMiA6IGNvdWxkbid0IGNyZWF0ZSBzb2NrZXQKKyAqIEByZXR2YWwgLTMgOiBpb2N0bCBmYWlsZWQKKyAqLworaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfdjYobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKiBlbnRyeSwgaW50IG9wZXJhdGlvbikKK3sKKyNpZmRlZiBsaW51eAorICAgIC8qCisgICAgICogRnJvbSBsaW51eC9pcHY2LmguIEl0IGNhbm5vdCBiZSBpbmNsdWRlZCBiZWNhdXNlIGl0IGNvbGxpZGVzCisgICAgICogd2l0aCBuZXRpbmV0L2luLmgKKyAgICAgKi8KKyAgICBzdHJ1Y3QgaW42X2lmcmVxIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpZnI2X2FkZHI7CisgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgaWZyNl9wcmVmaXhsZW47CisgICAgICAgICAgICBpbnQgICAgICAgICAgICAgaWZyNl9pZmluZGV4OworICAgIH07CisKKyAgICBzdHJ1Y3QgaW42X2lmcmVxICAgICAgICAgICAgICAgaWZycTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIGZkID0gLTE7CisKKyAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsICJfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y2IHN0YXJ0ZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBuZXRzbm1wX2Fzc2VydCgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pOworCisgICAgZmQgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOworICAgIGlmKGZkIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZG4ndCBjcmVhdGUgc29ja2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgICBtZW1zZXQoJmlmcnEsIDAsIHNpemVvZihpZnJxKSk7CisgICAgaWZycS5pZnI2X2lmaW5kZXggPSBlbnRyeS0+aWZfaW5kZXg7CisgICAgaWZycS5pZnI2X3ByZWZpeGxlbiA9IDY0OworCisgICAgbWVtY3B5KCZpZnJxLmlmcjZfYWRkciwgZW50cnktPmlhX2FkZHJlc3MsCisgICAgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisKKyAgICByYyA9IGlvY3RsKGZkLCBvcGVyYXRpb24sICZpZnJxKTsKKyAgICBjbG9zZShmZCk7CisgICAgaWYocmMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIHNldHRpbmcgYWRkcmVzczogJXMoJWQpXG4iLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsICJfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y2IGZpbmlzaGVkXG4iKSk7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgaXB2NiBvbiB0aGlzIHBsYXRmb3JtICh5ZXQpICovCisgICAgcmV0dXJuIC0zOworI2VuZGlmCisKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCA6IG5vIGVycm9yCisgKiBAcmV0dmFsIC0xIDogYmFkIHBhcmFtZXRlcgorICogQHJldHZhbCAtMiA6IGNvdWxkbid0IGNyZWF0ZSBzb2NrZXQKKyAqIEByZXR2YWwgLTMgOiBpb2N0bCBmYWlsZWQKKyAqLworaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y2KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICogZW50cnkpCit7CisgICAgcmV0dXJuIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc192NihlbnRyeSwgU0lPQ1NJRkFERFIpOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIDogbm8gZXJyb3IKKyAqIEByZXR2YWwgLTEgOiBiYWQgcGFyYW1ldGVyCisgKiBAcmV0dmFsIC0yIDogY291bGRuJ3QgY3JlYXRlIHNvY2tldAorICogQHJldHZhbCAtMyA6IGlvY3RsIGZhaWxlZAorICovCitpbnQKK19uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19kZWxldGVfdjYobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKiBlbnRyeSkKK3sKKyAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3Y2KGVudHJ5LCBTSU9DRElGQUREUik7Cit9CisKIC8qKgogICogZ2V0IHRoZSBpbnRlcmZhY2UgY291bnQgYW5kIHBvcHVsYXRlIHRoZSBpZmNfYnVmCiAgKgpAQCAtNTE1LDcgKzY2OCw3IEBACiAgICAgICovCiAKICAgICBmb3IgKGkgPSA4OzsgaSAqPSAyKSB7Ci0gICAgICAgIGlmYy0+aWZjX2J1ZiA9IGNhbGxvYyhpLCBzaXplb2Yoc3RydWN0IGlmcmVxKSk7CisgICAgICAgIGlmYy0+aWZjX2J1ZiA9IChjYWRkcl90KWNhbGxvYyhpLCBzaXplb2Yoc3RydWN0IGlmcmVxKSk7CiAgICAgICAgIGlmIChOVUxMID09IGlmYy0+aWZjX2J1ZikgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICVkIGludGVyZmFjZXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICBpKTsKQEAgLTU4MCw3ICs3MzMsNyBAQAogICAgICAgICB7IElGRl9BVVRPTUVESUEsICAgImF1dG8gbWVkaWEgc2VsZWN0IGFjdGl2ZSJ9LAogICAgIH07CiAgICAgc2hvcnQgdW5rbm93biA9IGZsYWdzOwotICAgIGludCBpOworICAgIHNpemVfdCBpOwogCiAgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKG1hcCkvc2l6ZW9mKG1hcFswXSk7ICsraSkKICAgICAgICAgaWYoZmxhZ3MgJiBtYXBbaV0uZmxhZykgewpAQCAtNTkxLDQgKzc0NCwzIEBACiAgICAgaWYodW5rbm93bikKICAgICAgICAgREVCVUdNU0dUX05DKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCIgIHVua25vd24gMHgleFxuIiwgdW5rbm93bikpOwogfQotCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmgKaW5kZXggYTdhMGVhMi4uZjJiNzg0NyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaApAQCAtMiw2ICsyLDE3IEBACiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCisvKgorICogc3RydWN0IGZvciBuZXRsaW5rIGV4dHJhcworICovCitzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8geworICAgIGludCBiY2FzdGZsZzsKKyAgICBpbnQgYW55Y2FzdGZsZzsKKyAgICBpbl9hZGRyX3QgYWRkcjsKK307CisgCisjZGVmaW5lIElTX0FQSVBBKGEpICAoKChpbl9hZGRyX3QpKGEgPDwgMTYpKSA9PSAweEZFQTkwMDAwKQorCiBpbnQKIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19jb250YWluZXJfbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWR4X29mZnNldCk7CkBAIC0xMSw4ICsyMiwxNSBAQAogX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3JlbW92ZV92NChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KTsKIAogaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y2KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICogZW50cnkpOworaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfcmVtb3ZlX3Y2KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICogZW50cnkpOworCitpbnQKIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19pb2N0bF9nZXRfaW50ZXJmYWNlX2NvdW50KGludCBzZCwgc3RydWN0IGlmY29uZiAqIGlmYyk7CiAKK3N0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbworbmV0c25tcF9hY2Nlc3Nfb3RoZXJfaW5mb19nZXQoaW50IGluZGV4LCBpbnQgZmFtaWx5KTsKIAogLyoKICAqIHN0cnVjdCBpb2N0bCBmb3IgYXJjaF9kYXRhCkBAIC0zNyw2ICs1NSw4IEBACiAKIGludAogX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2RlbGV0ZV92NChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KTsKK2ludAorX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2RlbGV0ZV92NihuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMKaW5kZXggZTc4YzhiZC4uZjFjZWYwYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYwpAQCAtNCw2ICs0LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKIApAQCAtMTIsMTkgKzEzLDQ1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJpcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MuaCIKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHByZWZpeF9pbmZvKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZmluZF9wcmVmaXhfaW5mbykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19hcmNoX2VudHJ5X2NvcHksIGlwYWRkcmVzc19jb21tb24pCisKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcGFkZHJlc3NfaW9jdGxfZW50cnlfY29weSkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZICovCisKICNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX1JUTkVUTElOS19IKQorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpZmRlZiBSVE1HUlBfSVBWNl9QUkVGSVgKKyNkZWZpbmUgU1VQUE9SVF9QUkVGSVhfRkxBR1MgMQorI2VuZGlmIC8qIFJUTUdSUF9JUFY2X1BSRUZJWCAqLworI2VuZGlmIC8qIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggKi8KICNlbmRpZgogCiAjaW5jbHVkZSAiaXBhZGRyZXNzX2lvY3RsLmgiCi0KKyNpZmRlZiBTVVBQT1JUX1BSRUZJWF9GTEFHUworZXh0ZXJuIHByZWZpeF9jYnggKnByZWZpeF9oZWFkX2xpc3Q7CisjZW5kaWYKIGludCBfbG9hZF92NihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCk7CisjaWZkZWYgSEFWRV9MSU5VWF9SVE5FVExJTktfSAoraW50CituZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZXh0cmFfcHJlZml4X2luZm8oaW50IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqcHJlZmVyZWRsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZyAqdmFsaWRsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGRyKTsKKyNlbmRpZgogCiAvKgogICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKQEAgLTY2LDYgKzkzLDcgQEAKICAgICAgKi8KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19BUkNIX0VOVFJZX0NPUFkKIC8qCiAgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQogICovCkBAIC04OSw2ICsxMTcsNyBAQAogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWSAqLwogCiAvKgogICogY3JlYXRlIGEgbmV3IGVudHJ5CkBAIC05OSwxMiArMTI4LDE0IEBACiAgICAgaWYgKE5VTEwgPT0gZW50cnkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICg0ICE9IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgewotICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOmNyZWF0ZSIsICJvbmx5IGlwdjQgc3VwcG9ydGVkXG4iKSk7CisgICAgaWYgKDQgPT0gZW50cnktPmlhX2FkZHJlc3NfbGVuKSB7CisgICAgICAgIHJldHVybiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y0KGVudHJ5KTsKKyAgICB9IGVsc2UgaWYgKDE2ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3NldF92NihlbnRyeSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOmlwYWRkcmVzczpjcmVhdGUiLCAid3JvbmcgbGVuZ3RoIG9mIElQIGFkZHJlc3NcbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KLQotICAgIHJldHVybiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y0KGVudHJ5KTsKIH0KIAogLyoKQEAgLTExNiwxMiArMTQ3LDE0IEBACiAgICAgaWYgKE5VTEwgPT0gZW50cnkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICg0ICE9IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgIGlmICg0ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2RlbGV0ZV92NChlbnRyeSk7CisgICAgfSBlbHNlIGlmICgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19kZWxldGVfdjYoZW50cnkpOworICAgIH0gZWxzZSB7CiAgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIm9ubHkgaXB2NCBzdXBwb3J0ZWRcbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KLQotICAgIHJldHVybiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfZGVsZXRlX3Y0KGVudHJ5KTsKIH0KIAogLyoqCkBAIC0xNzksNiArMjEyLDEyIEBACiBpbnQKIF9sb2FkX3Y2KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KQogeworI2lmbmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAiY2Fubm90IGdldCBpcCBhZGRyZXNzIGluZm9ybWF0aW9uIgorICAgICAgICAgICAgICAgICJhcyBuZXRsaW5rIHNvY2tldCBpcyBub3QgYXZhaWxhYmxlXG4iKSk7CisgICAgcmV0dXJuIC0xOworI2Vsc2UKICAgICBGSUxFICAgICAgICAgICAqaW47CiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbODBdLCBhZGRyWzQwXTsKICAgICBjaGFyICAgICAgICAgICAgaWZfbmFtZVtJRk5BTVNJWisxXTsvKiArMSBmb3IgJ1wwJyBiZWNhdXNlIG9mIHRoZSB1Z2x5IHNzY2FuZiBiZWxvdyAqLyAKQEAgLTE4NywyNCArMjI2LDE1IEBACiAgICAgc2l6ZV90ICAgICAgICAgIGluX2xlbiwgb3V0X2xlbjsKICAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnk7CiAgICAgX2lvY3RsX2V4dHJhcyAgICAgICAgICAgKmV4dHJhczsKLSAgICBzdGF0aWMgaW50ICAgICAgbG9nX29wZW5fZXJyID0gMTsKKyAgICBzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8gYWRkcl9pbmZvOwogICAgIAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKIAogI2RlZmluZSBQUk9DRklMRSAiL3Byb2MvbmV0L2lmX2luZXQ2IgogICAgIGlmICghKGluID0gZm9wZW4oUFJPQ0ZJTEUsICJyIikpKSB7Ci0gICAgICAgIGlmICgxID09IGxvZ19vcGVuX2VycikgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGQgbm90IG9wZW4gIiBQUk9DRklMRSAiXG4iKTsKLSAgICAgICAgICAgIGxvZ19vcGVuX2VyciA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwiY291bGQgbm90IG9wZW4gIiBQUk9DRklMRSAiXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9Ci0gICAgLyoKLSAgICAgKiBpZiB3ZSBoYWRuJ3QgYmVlbiBhYmxlIHRvIG9wZW4gZmlsZSBhbmQgdHVybmVkIG9mIGVyciBsb2dnaW5nLAotICAgICAqIHR1cm4gaXQgYmFjayBvbiBub3cgdGhhdCB3ZSBvcGVuZWQgdGhlIGZpbGUuCi0gICAgICovCi0gICAgaWYgKDAgPT0gbG9nX29wZW5fZXJyKQotICAgICAgICBsb2dfb3Blbl9lcnIgPSAxOwogCiAgICAgLyoKICAgICAgKiBhZGRyZXNzIGluZGV4IHByZWZpeF9sZW4gc2NvcGUgc3RhdHVzIGlmX25hbWUKQEAgLTI0MSw2ICsyNzEsNyBAQAogICAgICAgICBpbl9sZW4gPSBlbnRyeS0+aWFfYWRkcmVzc19sZW4gPSBzaXplb2YoZW50cnktPmlhX2FkZHJlc3MpOwogICAgICAgICBuZXRzbm1wX2Fzc2VydCgxNiA9PSBpbl9sZW4pOwogICAgICAgICBvdXRfbGVuID0gMDsKKyAgICAgICAgZW50cnktPmZsYWdzID0gZmxhZ3M7CiAgICAgICAgIGJ1ZiA9IGVudHJ5LT5pYV9hZGRyZXNzOwogICAgICAgICBpZigxICE9IG5ldHNubXBfaGV4X3RvX2JpbmFyeSgmYnVmLCAmaW5fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0X2xlbiwgMCwgYWRkciwgIjoiKSkgewpAQCAtMjY4LDYgKzI5OSw4IEBACiAgICAgICAgICAqIGV2ZXJ5IHRpbWUgaXQgaXMgY2FsbGVkLgogICAgICAgICAgKi8KICAgICAgICAgZW50cnktPmlmX2luZGV4ID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2luZGV4X2ZpbmQoaWZfbmFtZSk7CisgICAgICAgIG1lbXNldCgmYWRkcl9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGFkZHJlc3NfZmxhZ19pbmZvKSk7CisgICAgICAgIGFkZHJfaW5mbyA9IG5ldHNubXBfYWNjZXNzX290aGVyX2luZm9fZ2V0KGVudHJ5LT5pZl9pbmRleCwgQUZfSU5FVDYpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAgI2RlZmluZSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQgIDEKQEAgLTI3OCw4ICszMTEsMTIgQEAKICAgICAgICAgICAjZGVmaW5lIElQQUREUkVTU1NUQVRVU1RDX1RFTlRBVElWRSAgNgogICAgICAgICAgICNkZWZpbmUgSVBBRERSRVNTU1RBVFVTVENfRFVQTElDQVRFICA3CiAgICAgICAgICovCi0gICAgICAgIGlmKGZsYWdzICYgSUZBX0ZfUEVSTUFORU5UKQorICAgICAgICBpZigoZmxhZ3MgJiBJRkFfRl9QRVJNQU5FTlQpIHx8ICghZmxhZ3MpKQogICAgICAgICAgICAgZW50cnktPmlhX3N0YXR1cyA9IElQQUREUkVTU1NUQVRVU1RDX1BSRUZFUlJFRDsgLyogPz8gKi8KKyNpZmRlZiBJRkFfRl9URU1QT1JBUlkKKyAgICAgICAgZWxzZSBpZihmbGFncyAmIElGQV9GX1RFTVBPUkFSWSkKKyAgICAgICAgICAgIGVudHJ5LT5pYV9zdGF0dXMgPSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQ7IC8qID8/ICovCisjZW5kaWYKICAgICAgICAgZWxzZSBpZihmbGFncyAmIElGQV9GX0RFUFJFQ0FURUQpCiAgICAgICAgICAgICBlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfREVQUkVDQVRFRDsKICAgICAgICAgZWxzZSBpZihmbGFncyAmIElGQV9GX1RFTlRBVElWRSkKQEAgLTI5NCw3ICszMzEsNyBAQAogICAgICAgICAgKiBpZiBpdCdzIG5vdCBtdWx0aSwgaXQgbXVzdCBiZSB1bmkuCiAgICAgICAgICAqICAoYW4gaXB2NiBhZGRyZXNzIGlzIG5ldmVyIGJyb2FkY2FzdCkKICAgICAgICAgICovCi0gICAgICAgIGlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoZW50cnktPmlhX2FkZHJlc3MpKQorICAgICAgICBpZihhZGRyX2luZm8uYW55Y2FzdGZsZykKICAgICAgICAgICAgIGVudHJ5LT5pYV90eXBlID0gSVBBRERSRVNTVFlQRV9BTllDQVNUOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbnRyeS0+aWFfdHlwZSA9IElQQUREUkVTU1RZUEVfVU5JQ0FTVDsKQEAgLTMxNCwxMyArMzUxLDQ4IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIGFyZSAnbG9jYWwnIGFkZHJlc3MgYXNzaWduZWQgYnkgbGluayBsYXllcj8/CiAgICAgICAgICAqLwotICAgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGVudHJ5LT5pYV9hZGRyZXNzKSB8fAotICAgICAgICAgICAgSU42X0lTX0FERFJfU0lURUxPQ0FMKGVudHJ5LT5pYV9hZGRyZXNzKSkKLSAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19NQU5VQUw7CisgICAgICAgICBpZiAoIWZsYWdzKQorICAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVI7CisjaWZkZWYgSUZBX0ZfVEVNUE9SQVJZCisgICAgICAgICBlbHNlIGlmIChmbGFncyAmIElGQV9GX1RFTVBPUkFSWSkKKyAgICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfUkFORE9NOworI2VuZGlmCisgICAgICAgICBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoZW50cnktPmlhX2FkZHJlc3MpKQorICAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKworICAgICAgICAgaWYoZW50cnktPmlhX29yaWdpbiA9PSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVIpCisgICAgICAgICAgICBlbnRyeS0+aWFfc3RvcmFnZXR5cGUgPSBTVE9SQUdFVFlQRV9QRVJNQU5FTlQ7CiAKICAgICAgICAgLyogeHh4LXJrczogd2hhdCBjYW4gd2UgZG8gd2l0aCBzY29wZT8gKi8KKyNpZmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisgICAgICAgIGlmKG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19leHRyYV9wcmVmaXhfaW5mbyhlbnRyeS0+aWZfaW5kZXgsICZlbnRyeS0+aWFfcHJlZmVyZWRfbGlmZXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwmZW50cnktPmlhX3ZhbGlkX2xpZmV0aW1lLCBhZGRyKSA8IDApeworICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAidW5hYmxlIHRvIGZldGNoIGV4dHJhIHByZWZpeCBpbmZvXG4iKSk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGVudHJ5LT5pYV9wcmVmZXJlZF9saWZldGltZSA9IDA7CisgICAgICAgIGVudHJ5LT5pYV92YWxpZF9saWZldGltZSA9IDA7CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BSRUZJWF9GTEFHUworICAgICAgICB7CisgICAgICAgIHByZWZpeF9jYnggICAgICBwcmVmaXhfdmFsOworICAgICAgICBtZW1zZXQoJnByZWZpeF92YWwsIDAsIHNpemVvZihwcmVmaXhfY2J4KSk7CisgICAgICAgIGlmKG5ldF9zbm1wX2ZpbmRfcHJlZml4X2luZm8oJnByZWZpeF9oZWFkX2xpc3QsIGFkZHIsICZwcmVmaXhfdmFsKSA8IDApIHsKKyAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgInVuYWJsZSB0byBmaW5kIGluZm9cbiIpKTsKKyAgICAgICAgICAgZW50cnktPmlhX29ubGlua19mbGFnID0gMTsgIC8qU2V0IGJ5IGRlZmF1bHQgYXMgdHJ1ZSovCisgICAgICAgICAgIGVudHJ5LT5pYV9hdXRvbm9tb3VzX2ZsYWcgPSAyOyAvKlNldCBieSBkZWZhdWx0IGFzIGZhbHNlKi8KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBlbnRyeS0+aWFfb25saW5rX2ZsYWcgPSBwcmVmaXhfdmFsLmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWc7IAorICAgICAgICAgICBlbnRyeS0+aWFfYXV0b25vbW91c19mbGFnID0gcHJlZml4X3ZhbC5pcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZzsKKyAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBlbnRyeS0+aWFfb25saW5rX2ZsYWcgPSAxOyAgLypTZXQgYnkgZGVmYXVsdCBhcyB0cnVlKi8KKyAgICAgICAgZW50cnktPmlhX2F1dG9ub21vdXNfZmxhZyA9IDI7IC8qU2V0IGJ5IGRlZmF1bHQgYXMgZmFsc2UqLworI2VuZGlmCiAKICAgICAgICAgLyoKICAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgpAQCAtMzM5LDQgKzQxMSwxOTAgQEAKIAogICAgIHJldHVybiBpZHhfb2Zmc2V0OwogfQorCitzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8KK25ldHNubXBfYWNjZXNzX290aGVyX2luZm9fZ2V0KGludCBpbmRleCwgaW50IGZhbWlseSkKK3sKKyAgIHN0cnVjdCB7CisgICAgICAgICAgIHN0cnVjdCBubG1zZ2hkciBuOworICAgICAgICAgICBzdHJ1Y3QgaWZhZGRybXNnIHI7CisgICAgICAgICAgIGNoYXIgICBidWZbMTAyNF07CisgICB9IHJlcTsKKyAgIHN0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbyBhZGRyOworICAgc3RydWN0IHJ0YXR0ciAgICAqcnRhOworICAgaW50ICAgIHN0YXR1czsKKyAgIGNoYXIgICBidWZbMTYzODRdOworICAgc3RydWN0IG5sbXNnaGRyICAqbmxtcDsKKyAgIHN0cnVjdCBpZmFkZHJtc2cgKnJ0bXA7CisgICBzdHJ1Y3QgcnRhdHRyICAgICpydGF0cDsKKyAgIGludCAgICBydGF0dHJsZW47CisgICBpbnQgICAgc2Q7CisKKyAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbykpOworICAgc2QgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSk7CisgICBpZihzZCA8IDApIHsKKyAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3Qgb3BlbiBuZXRsaW5rIHNvY2tldFxuIik7CisgICAgICByZXR1cm4gYWRkcjsKKyAgIH0KKworICAgbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKyAgIHJlcS5uLm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpOworICAgcmVxLm4ubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfUk9PVDsKKyAgIHJlcS5uLm5sbXNnX3R5cGUgPSBSVE1fR0VUQUREUjsKKyAgIHJlcS5yLmlmYV9mYW1pbHkgPSBmYW1pbHk7CisgICBydGEgPSAoc3RydWN0IHJ0YXR0ciAqKSgoKGNoYXIgKikmcmVxKSArIE5MTVNHX0FMSUdOKHJlcS5uLm5sbXNnX2xlbikpOworICAgaWYoZmFtaWx5ID09IEFGX0lORVQpCisgICAgICBydGEtPnJ0YV9sZW4gPSBSVEFfTEVOR1RIKDQpOworICAgZWxzZQorICAgICAgcnRhLT5ydGFfbGVuID0gUlRBX0xFTkdUSCgxNik7CisKKyAgICBzdGF0dXMgPSBzZW5kKHNkLCAmcmVxLCByZXEubi5ubG1zZ19sZW4sIDApOworICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3Qgc2VuZCBuZXRsaW5rIHJlcXVlc3RcbiIpOworICAgICAgICByZXR1cm4gYWRkcjsKKyAgICB9CisKKyAgICBzdGF0dXMgPSByZWN2KHNkLCBidWYsIHNpemVvZihidWYpLCAwKTsKKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImNvdWxkIG5vdCByZWNpZXZlIG5ldGxpbmsgcmVxdWVzdFxuIik7CisgICAgICAgIHJldHVybiBhZGRyOworICAgIH0KKworICAgIGlmKHN0YXR1cyA9PSAwKSB7CisgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJub3RoaW5nIHRvIHJlYWRcbiIpOworICAgICAgIHJldHVybiBhZGRyOworICAgIH0KKworICAgIGZvcihubG1wID0gKHN0cnVjdCBubG1zZ2hkciAqKWJ1Zjsgc3RhdHVzID4gc2l6ZW9mKCpubG1wKTspIHsKKyAgICAgICAgaW50IGxlbiA9IG5sbXAtPm5sbXNnX2xlbjsKKyAgICAgICAgaW50IHJlcV9sZW4gPSBsZW4gLSBzaXplb2YoKm5sbXApOworCisgICAgICAgIGlmIChyZXFfbGVuIDwgMCB8fCBsZW4gPiBzdGF0dXMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiaW52YWxpZCBuZXRsaW5rIG1lc3NhZ2VcbiIpOworICAgICAgICAgICAgcmV0dXJuIGFkZHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIU5MTVNHX09LKG5sbXAsIHN0YXR1cykpIHsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiaW52YWxpZCBOTE1TRyBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyOworICAgICAgICB9CisgICAgICAgIHJ0bXAgPSAoc3RydWN0IGlmYWRkcm1zZyAqKU5MTVNHX0RBVEEobmxtcCk7CisgICAgICAgIHJ0YXRwID0gKHN0cnVjdCBydGF0dHIgKilJRkFfUlRBKHJ0bXApOworICAgICAgICBydGF0dHJsZW4gPSBJRkFfUEFZTE9BRChubG1wKTsKKyAgICAgICAgaWYoaW5kZXggPT0gcnRtcC0+aWZhX2luZGV4KXsKKyAgICAgICAgICAgZm9yICg7IFJUQV9PSyhydGF0cCwgcnRhdHRybGVuKTsgcnRhdHAgPSBSVEFfTkVYVChydGF0cCwgcnRhdHRybGVuKSkgeworICAgICAgICAgICAgICAgIGlmKHJ0YXRwLT5ydGFfdHlwZSA9PSBJRkFfQlJPQURDQVNUKXsKKyAgICAgICAgICAgICAgICAgICBhZGRyLmFkZHIgPSAoKHN0cnVjdCBpbl9hZGRyICopUlRBX0RBVEEocnRhdHApKS0+c19hZGRyOworICAgICAgICAgICAgICAgICAgIGFkZHIuYmNhc3RmbGcgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihydGF0cC0+cnRhX3R5cGUgPT0gSUZBX0FOWUNBU1QpeworICAgICAgICAgICAgICAgICAgIGFkZHIuYWRkciA9ICgoc3RydWN0IGluX2FkZHIgKilSVEFfREFUQShydGF0cCkpLT5zX2FkZHI7CisgICAgICAgICAgICAgICAgICAgYWRkci5hbnljYXN0ZmxnID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgLT0gTkxNU0dfQUxJR04obGVuKTsKKyAgICAgICAgbmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIqKSgoY2hhciopbmxtcCArIE5MTVNHX0FMSUdOKGxlbikpOworICAgIH0KKyAgICBjbG9zZShzZCk7CisgICAgcmV0dXJuIGFkZHI7CiAjZW5kaWYKK30KKworI2lmZGVmIEhBVkVfTElOVVhfUlRORVRMSU5LX0gKK2ludAorbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2V4dHJhX3ByZWZpeF9pbmZvKGludCBpbmRleCwgdV9sb25nICpwcmVmZXJlZGx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nICp2YWxpZGx0LCBjaGFyICphZGRyKQoreworCisgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCBubG1zZ2hkciBubGhkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpZmFkZHJtc2cgaWZhY2VpbmZvOworICAgICAgICAgICAgY2hhciAgIGJ1ZlsxMDI0XTsKKyAgICB9IHJlcTsKKworICAgIHN0cnVjdCBydGF0dHIgICAgICAgICpydGE7CisgICAgaW50ICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIGNoYXIgICAgICAgICAgICAgICAgIGJ1ZlsxNjM4NF07CisgICAgY2hhciAgICAgICAgICAgICAgICAgdG1wYWRkcls0MF07CisgICAgc3RydWN0IG5sbXNnaGRyICAgICAgKm5sbXA7CisgICAgc3RydWN0IGlmYWRkcm1zZyAgICAgKnJ0bXA7CisgICAgc3RydWN0IHJ0YXR0ciAgICAgICAgKnJ0YXRwOworICAgIHN0cnVjdCBpZmFfY2FjaGVpbmZvICpjYWNoZV9pbmZvOworICAgIHN0cnVjdCBpbjZfYWRkciAgICAgICppbjZwOworICAgIGludCAgICAgICAgICAgICAgICAgIHJ0YXR0cmxlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBzZDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICByZXFhZGRyID0gMDsKKyAgICBzZCA9IHNvY2tldChQRl9ORVRMSU5LLCBTT0NLX0RHUkFNLCBORVRMSU5LX1JPVVRFKTsKKyAgICBpZihzZCA8IDApIHsKKyAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IG9wZW4gbmV0bGluayBzb2NrZXRcbiIpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKyAgICByZXEubmxoZHIubmxtc2dfbGVuID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSk7CisgICAgcmVxLm5saGRyLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX1JPT1Q7CisgICAgcmVxLm5saGRyLm5sbXNnX3R5cGUgPSBSVE1fR0VUQUREUjsKKyAgICByZXEuaWZhY2VpbmZvLmlmYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICBydGEgPSAoc3RydWN0IHJ0YXR0ciAqKSgoKGNoYXIgKikmcmVxKSArIE5MTVNHX0FMSUdOKHJlcS5ubGhkci5ubG1zZ19sZW4pKTsKKyAgICBydGEtPnJ0YV9sZW4gPSBSVEFfTEVOR1RIKDE2KTsgLypGb3IgaXB2NiovCisKKyAgICBzdGF0dXMgPSBzZW5kIChzZCwgJnJlcSwgcmVxLm5saGRyLm5sbXNnX2xlbiwgMCk7CisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBzZW5kIG5ldGxpbmsgcmVxdWVzdFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc3RhdHVzID0gcmVjdiAoc2QsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiY291bGQgbm90IHJlY2lldmUgbmV0bGluayByZXF1ZXN0XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoc3RhdHVzID09IDApIHsKKyAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgIm5vdGhpbmcgdG8gcmVhZFxuIik7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmb3IgKG5sbXAgPSAoc3RydWN0IG5sbXNnaGRyICopYnVmOyBzdGF0dXMgPiBzaXplb2YoKm5sbXApOyApeworCisgICAgICAgIGludCBsZW4gPSBubG1wLT5ubG1zZ19sZW47CisgICAgICAgIGludCByZXFfbGVuID0gbGVuIC0gc2l6ZW9mKCpubG1wKTsKKworICAgICAgICBpZiAocmVxX2xlbiA8IDAgfHwgbGVuID4gc3RhdHVzKSB7CisgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImludmFsaWQgbmV0bGluayBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghTkxNU0dfT0sgKG5sbXAsIHN0YXR1cykpIHsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiaW52YWxpZCBOTE1TRyBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBydG1wID0gKHN0cnVjdCBpZmFkZHJtc2cgKilOTE1TR19EQVRBKG5sbXApOworICAgICAgICBydGF0cCA9IChzdHJ1Y3QgcnRhdHRyICopSUZBX1JUQShydG1wKTsKKyAgICAgICAgcnRhdHRybGVuID0gSUZBX1BBWUxPQUQobmxtcCk7CisgICAgICAgIGlmKGluZGV4ID09IHJ0bXAtPmlmYV9pbmRleCkgeworICAgICAgICAgICBmb3IgKDsgUlRBX09LKHJ0YXRwLCBydGF0dHJsZW4pOyBydGF0cCA9IFJUQV9ORVhUKHJ0YXRwLCBydGF0dHJsZW4pKSB7CisgICAgICAgICAgICAgICAgaWYocnRhdHAtPnJ0YV90eXBlID09IElGQV9BRERSRVNTKSB7CisgICAgICAgICAgICAgICAgICAgaW42cCA9IChzdHJ1Y3QgaW42X2FkZHIgKilSVEFfREFUQShydGF0cCk7CisgICAgICAgICAgICAgICAgICAgc3ByaW50Zih0bXBhZGRyLCAiJTA0eCUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCUwNHgiLCBOSVA2KCppbjZwKSk7CisgICAgICAgICAgICAgICAgICAgaWYoIXN0cmNtcCh0bXBhZGRyICxhZGRyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxYWRkciA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKHJ0YXRwLT5ydGFfdHlwZSA9PSBJRkFfQ0FDSEVJTkZPKSB7CisgICAgICAgICAgICAgICAgICAgY2FjaGVfaW5mbyA9IChzdHJ1Y3QgaWZhX2NhY2hlaW5mbyAqKVJUQV9EQVRBKHJ0YXRwKTsKKyAgICAgICAgICAgICAgICAgICBpZihyZXFhZGRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmVxYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgKnZhbGlkbHQgPSBjYWNoZV9pbmZvLT5pZmFfdmFsaWQ7CisgICAgICAgICAgICAgICAgICAgICAgKnByZWZlcmVkbHQgPSBjYWNoZV9pbmZvLT5pZmFfcHJlZmVyZWQ7CisgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgLT0gTkxNU0dfQUxJR04obGVuKTsKKyAgICAgICAgbmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIqKSgoY2hhciopbmxtcCArIE5MTVNHX0FMSUdOKGxlbikpOworICAgIH0KKyAgICBjbG9zZShzZCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmgKaW5kZXggMWNhZTI3OS4uNjAwY2VhZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguaApAQCAtMTcsNiArMTcsNSBAQAogICogICAgSFBVWDExIGhhZCBkaWZmZXJlbnQgcmV1aXJlbWVudHMgdGhhbiBvdGhlciBIUFVYLCB0aGF0IHNob3VsZAogICogICAgYmUgaGFuZGxlZCBpbiB0aGUgKl9ocHV4LmggaGVhZGVyIGZpbGUuCiAgKi8KLWNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXgpCiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsKQotCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNDg1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiAgSVAtTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgImlwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9jb25zdGFudHMuaCIKKworI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19hcmNoX2VudHJ5X2NvcHksIGlwYWRkcmVzc19jb21tb24pCisKK3N0YXRpYyBpbnQgX2xvYWRfdjQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGlkeF9vZmZzZXQpOworI2lmIGRlZmluZWQoIE5FVFNOTVBfRU5BQkxFX0lQVjYgKQorc3RhdGljIGludCBfbG9hZF92NihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCk7CisjZW5kaWYKKworLyoKKyAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKgorICogQHJldHZhbCAgMDogc3VjY2VzcworICogQHJldHZhbCA8MDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2VudHJ5X2luaXQobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5KQoreworICAgIGluaXRfa2VybmVsX3N1bm9zNSgpOworICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9jbGVhbnVwKG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIE5vdGhpbmcgdG8gZG8uCisgICAgICovCit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZCisvKgorICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2VudHJ5X2NvcHkobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqcmhzKQoreworICAgIC8qCisgICAgICogTm90aGluZyB0byBkby4gCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZICovCisKKy8qCisgKiBjcmVhdGUgYSBuZXcgZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2NyZWF0ZShuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIm5vdCBhcHBsaWNhYmxlXG4iKSk7CisgICAgICAgIHJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19kZWxldGUobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOmNyZWF0ZSIsICJub3QgYXBwbGljYWJsZVxuIikpOworICAgIHJldHVybiAwOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgaW50IHJjID0gMCwgaWR4X29mZnNldCA9IDA7CisKKyAgICBpZiAoIShsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0xPQURfSVBWNl9PTkxZKSkgeworICAgICAgICByYyA9IF9sb2FkX3Y0KGNvbnRhaW5lciwgaWR4X29mZnNldCk7CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgICAgdV9pbnQgZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19JUEFERFJFU1NfRlJFRV9LRUVQX0NPTlRBSU5FUjsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoIE5FVFNOTVBfRU5BQkxFX0lQVjYgKQorCisgICAgaWYgKCEobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0lQQUREUkVTU19MT0FEX0lQVjRfT05MWSkpIHsKKyAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIHJjID0gMDsKKworICAgICAgICBpZHhfb2Zmc2V0ID0gcmM7CisKKyAgICAgICAgcmMgPSBfbG9hZF92Nihjb250YWluZXIsIGlkeF9vZmZzZXQpOworICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0ZSRUVfS0VFUF9DT05UQUlORVI7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBmbGFncyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogcmV0dXJuIG5vIGVycm9ycyAoMCkgaWYgd2UgZm91bmQgYW55IGludGVyZmFjZXMKKyAgICAgKi8KKyAgICBpZihyYyA+IDApCisgICAgICAgIHJjID0gMDsKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBAcmV0dmFsID49aWR4X29mZnNldCBvaworICogQHJldHZhbCAtMSBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorICogQHJldHZhbCAtMiBpbnRlcmZhY2UgbG9va3VwIGVycm9yCisgKiBAcmV0dmFsIC0zIGNvbnRhaW5lciBlcnJvcgorICovCitzdGF0aWMgaW50CitfbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCkKK3sKKyAgICBtaWIyX2lwQWRkckVudHJ5X3QgICAgICBpcGFlOworICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeTsKKyAgICByZXFfZSAgICAgICAgICAgICAgICAgICByZXEgPSBHRVRfRklSU1Q7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgImxvYWRpbmcgdjRcbiIpKTsKKyAgICB3aGlsZSAoKHJjID0gZ2V0TWlic3RhdChNSUJfSVBfQUREUiwgJmlwYWUsIHNpemVvZihpcGFlKSwgcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHZXRfZXZlcnl0aGluZywgTlVMTCkpID09IDApIHsKKyAgICAgICAgcmVxID0gR0VUX05FWFQ7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAoLTEpOyAgICAKKyAgICAgICAgaWYgKGlwYWUuaXBBZEVudEFkZHIgPT0gSU5BRERSX0FOWSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlwYWUuaXBBZEVudElmSW5kZXgub19ieXRlc1tpcGFlLmlwQWRFbnRJZkluZGV4Lm9fbGVuZ3RoXSA9ICdcMCc7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJmb3VuZCBpZiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBhZS5pcEFkRW50SWZJbmRleC5vX2J5dGVzKSk7CisgICAgICAgIC8qIE9idGFpbiBpbnRlcmZhY2UgaW5kZXggKi8KKyAgICAgICAgZW50cnktPmlmX2luZGV4ID0gCisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW5kZXhfZmluZChpcGFlLmlwQWRFbnRJZkluZGV4Lm9fYnl0ZXMpOworICAgICAgICBpZiAoZW50cnktPmlmX2luZGV4ID09IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJjYW5ub3QgZmluZCBpZiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwYWUuaXBBZEVudElmSW5kZXgub19ieXRlcykpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICgtMik7ICAgIAorICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cmNocigoY29uc3QgY2hhciAqKSZpcGFlLmlwQWRFbnRJZkluZGV4Lm9fYnl0ZXMsICc6JykgIT0gMCkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0FDQ0VTU19JUEFERFJFU1NfSVNBTElBUzsKKworICAgICAgICAvKiBHZXQgdGhlIGFkZHJlc3MgKi8KKyAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuID0gc2l6ZW9mKGlwYWUuaXBBZEVudEFkZHIpOworICAgICAgICBuZXRzbm1wX2Fzc2VydChlbnRyeS0+aWFfYWRkcmVzc19sZW4gPT0gNCAmJgorICAgICAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuIDw9IHNpemVvZihlbnRyeS0+aWFfYWRkcmVzcykpOworICAgICAgICBtZW1jcHkoJmVudHJ5LT5pYV9hZGRyZXNzLCAmaXBhZS5pcEFkRW50QWRkciwgZW50cnktPmlhX2FkZHJlc3NfbGVuKTsKKworICAgICAgICAvKiBwcmVmaXggKi8KKyAgICAgICAgZW50cnktPmlhX3ByZWZpeF9sZW4gPSBpcGFlLmlwQWRFbnRJbmZvLmFlX3N1Ym5ldF9sZW47CisKKyAgICAgICAgLyogc2V0IHRoZSBPcmlnaW4gKi8KKyAgICAgICAgaWYgKGlwYWUuaXBBZEVudEluZm8uYWVfZmxhZ3MgJiBJRkZfREhDUFJVTk5JTkcpCisgICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfREhDUDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKworICAgICAgICAvKiBzZXQgaXB2NCBjb25zdGFudHMgKi8KKyAgICAgICAgZW50cnktPmlhX3R5cGUgPSBJUEFERFJFU1NUWVBFX1VOSUNBU1Q7CisgICAgICAgIGVudHJ5LT5pYV9zdGF0dXMgPSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQ7CisKKyAgICAgICAgZW50cnktPm5zX2lhX2luZGV4ID0gKytpZHhfb2Zmc2V0OworCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJpbnNlcnQgaWYgJSIgTkVUU05NUF9QUklvICJ1LCBhZGRybGVuICVkXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPmlmX2luZGV4LCBlbnRyeS0+aWFfYWRkcmVzc19sZW4pKTsKKworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJ1bmFibGUgdG8gaW5zZXJ0ICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwYWUuaXBBZEVudElmSW5kZXgub19ieXRlcykpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICgtMyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChpZHhfb2Zmc2V0KTsKK30KKworLyoKKyAqIEByZXR2YWwgPj1pZHhfb2Zmc2V0IG9rCisgKiBAcmV0dmFsIC0xIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisgKiBAcmV0dmFsIC0yIGludGVyZmFjZSBsb29rdXAgZXJyb3IKKyAqIEByZXR2YWwgLTMgY29udGFpbmVyIGVycm9yCisgKi8KKyNpZiBkZWZpbmVkKCBORVRTTk1QX0VOQUJMRV9JUFY2ICkKK3N0YXRpYyBpbnQKK19sb2FkX3Y2KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KQoreworICAgIG1pYjJfaXB2NkFkZHJFbnRyeV90ICAgIGlwNmFlOworICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeTsKKyAgICByZXFfZSAgICAgICAgICAgICAgICAgICByZXEgPSBHRVRfRklSU1Q7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgImxvYWRpbmcgdjYuLi4gY2FjaGUgJWRcbiIsCisgICAgICAgICAgICAgICAgTUlCX0lQNl9BRERSKSk7CisgICAgd2hpbGUgKChyYyA9IGdldE1pYnN0YXQoTUlCX0lQNl9BRERSLCAmaXA2YWUsIHNpemVvZihpcDZhZSksIHJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR2V0X2V2ZXJ5dGhpbmcsIE5VTEwpKSA9PSAwKSB7CisgICAgICAgIHJlcSA9IEdFVF9ORVhUOworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gKC0xKTsgICAgCisgICAgICAgIGlmIChtZW1jbXAoKGNvbnN0IHZvaWQgKikmaXA2YWUuaXB2NkFkZHJBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopJmluNmFkZHJfYW55LAorICAgICAgICAgICAgICAgICAgIHNpemVvZiAoaXA2YWUuaXB2NkFkZHJBZGRyZXNzKSkgPT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlwNmFlLmlwdjZBZGRySWZJbmRleC5vX2J5dGVzW2lwNmFlLmlwdjZBZGRySWZJbmRleC5vX2xlbmd0aF0gPSAnXDAnOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAiZm91bmQgaWYgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwNmFlLmlwdjZBZGRySWZJbmRleC5vX2J5dGVzKSk7CisKKyAgICAgICAgLyogT2J0YWluIGludGVyZmFjZSBpbmRleCAqLworICAgICAgICBlbnRyeS0+aWZfaW5kZXggPSAKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pbmRleF9maW5kKAorICAgICAgICAgICAgaXA2YWUuaXB2NkFkZHJJZkluZGV4Lm9fYnl0ZXMpOworICAgICAgICBpZiAoZW50cnktPmlmX2luZGV4ID09IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJjYW5ub3QgZmluZCBpZiAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZS5pcHY2QWRkcklmSW5kZXgub19ieXRlcykpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICgtMik7ICAgIAorICAgICAgICB9CisKKyAgICAgICAgLyogR2V0IHRoZSBhZGRyZXNzICovCisgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IHNpemVvZihpcDZhZS5pcHY2QWRkckFkZHJlc3MpOworICAgICAgICBuZXRzbm1wX2Fzc2VydChlbnRyeS0+aWFfYWRkcmVzc19sZW4gPT0gMTYgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuIDw9IHNpemVvZihlbnRyeS0+aWFfYWRkcmVzcykpOworICAgICAgICBtZW1jcHkoJmVudHJ5LT5pYV9hZGRyZXNzLCAmaXA2YWUuaXB2NkFkZHJBZGRyZXNzLCAKKyAgICAgICAgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisgICAgICAgICAgICAgICAKKyAgICAgICAgLyogcHJlZml4ICovCisgICAgICAgIGVudHJ5LT5pYV9wcmVmaXhfbGVuID0gaXA2YWUuaXB2NkFkZHJQZnhMZW5ndGg7CisKKyAgICAgICAgLyogdHlwZSBpcyBhbnljYXN0PyAobWliMi5oOiAxID0geWVzLCAyID0gbm8pICovCisgICAgICAgIGVudHJ5LT5pYV90eXBlID0gKGlwNmFlLmlwdjZBZGRyQW55Y2FzdEZsYWcgPT0gMSkgPyAKKyAgICAgICAgICAgIElQQUREUkVTU1RZUEVfQU5ZQ0FTVCA6IElQQUREUkVTU1RZUEVfVU5JQ0FTVDsKKworICAgICAgICAvKiBvcmlnaW4gKG1pYjIuaDogMSA9IHN0YXRlbGVzcywgMiA9IHN0YXRlZnVsLCAzID0gdW5rbm93bikgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgIm9yaWdpbiAlZFxuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZS5pcHY2QWRkclR5cGUpKTsKKyAgICAgICAgaWYgKGlwNmFlLmlwdjZBZGRyVHlwZSA9PSAxKQorICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX0xJTktMQVlFUjsKKyAgICAgICAgZWxzZSBpZiAoaXA2YWUuaXB2NkFkZHJJbmZvLmFlX2ZsYWdzICYgSUZGX0RIQ1BSVU5OSU5HKQorICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX0RIQ1A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19NQU5VQUw7CisgICAgICAgIAorICAgICAgICAvKiBzdGF0dXMgKi8KKyAgICAgICAgZW50cnktPmlhX3N0YXR1cyA9IGlwNmFlLmlwdjZBZGRyU3RhdHVzOworCisgICAgICAgIGVudHJ5LT5uc19pYV9pbmRleCA9ICsraWR4X29mZnNldDsKKyAgICAgICAgCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJpbnNlcnQgaWYgJSIgTkVUU05NUF9QUklvICJ1LCBhZGRybGVuICVkXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPmlmX2luZGV4LCBlbnRyeS0+aWFfYWRkcmVzc19sZW4pKTsKKworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJ1bmFibGUgdG8gaW5zZXJ0ICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwNmFlLmlwdjZBZGRySWZJbmRleC5vX2J5dGVzKSk7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICByZXR1cm4gKC0zKTsKKyAgICAgICAgfQorICAgIH0gICAgCisgICAgcmV0dXJuIChpZHhfb2Zmc2V0KTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKCBORVRTTk1QX0VOQUJMRV9JUFY2ICkgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjIyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3N5c2N0bC5jCkBAIC0wLDAgKzEsMjcyIEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImlwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShwcmVmaXhfaW5mbykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZpbmRfcHJlZml4X2luZm8pCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NfYXJjaF9lbnRyeV9jb3B5LCBpcGFkZHJlc3NfY29tbW9uKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX2lvY3RsX2VudHJ5X2NvcHkpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWSAqLworCisjaW5jbHVkZSAiaXBhZGRyZXNzX2lvY3RsLmgiCisjaWZkZWYgU1VQUE9SVF9QUkVGSVhfRkxBR1MKK2V4dGVybiBwcmVmaXhfY2J4ICpwcmVmaXhfaGVhZF9saXN0OworI2VuZGlmCisKKyNkZWZpbmUgUk9VTkRVUChhKSBcCisgICgoYSkgPiAwID8gKDEgKyAoKChhKSAtIDEpIHwgKHNpemVvZihsb25nKSAtIDEpKSkgOiBzaXplb2YobG9uZykpCisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9pbml0KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQgaXB2NCBzdHVmZgorICAgICAqLworICAgIC8qIGlmIChOVUxMID09IG5ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2VudHJ5X2luaXQoZW50cnkpKSAqLworICAgIC8qICAgICByZXR1cm4gLTE7ICovCisKKyAgICAvKgorICAgICAqIGluaXQgaXB2NiBzdHVmZgorICAgICAqICAgc28gZmFyLCB3ZSBjYW4ganVzdCBzaGFyZSB0aGUgaXB2NCBzdHVmZiwgc28gbm90aGluZyB0byBkbworICAgICAqLworICAgIAorICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9jbGVhbnVwKG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGNsZWFudXAgaXB2NCBzdHVmZgorICAgICAqLworICAgIC8qbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfZW50cnlfY2xlYW51cChlbnRyeSk7ICovCisKKyAgICAvKgorICAgICAqIGNsZWFudXAgaXB2NiBzdHVmZgorICAgICAqICAgc28gZmFyLCB3ZSBjYW4ganVzdCBzaGFyZSB0aGUgaXB2NCBzdHVmZiwgc28gbm90aGluZyB0byBkbworICAgICAqLworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWQorLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9jb3B5KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKnJocykKK3sKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IDA7CisKKyAgICAvKgorICAgICAqIGNvcHkgaXB2NCBzdHVmZgorICAgICAqLworICAgIC8qcmMgPSBuZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19lbnRyeV9jb3B5KGxocywgcmhzKTsgKi8KKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKworICAgIC8qCisgICAgICogY29weSBpcHY2IHN0dWZmCisgICAgICogICBzbyBmYXIsIHdlIGNhbiBqdXN0IHNoYXJlIHRoZSBpcHY0IHN0dWZmLCBzbyBub3RoaW5nIHRvIGRvCisgICAgICovCisKKyAgICByZXR1cm4gcmM7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZICovCisKKy8qCisgKiBjcmVhdGUgYSBuZXcgZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2NyZWF0ZShuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICg0ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmICgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIndyb25nIGxlbmd0aCBvZiBJUCBhZGRyZXNzXG4iKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9Cit9CisKKy8qCisgKiBjcmVhdGUgYSBuZXcgZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2RlbGV0ZShuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICg0ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gLTI7CisgICAgfSBlbHNlIGlmICgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIm9ubHkgaXB2NCBzdXBwb3J0ZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgdV9jaGFyICppZl9saXN0ID0gTlVMTCwgKmNwOworICAgIHNpemVfdCBpZl9saXN0X3NpemUgPSAwOworICAgIGludCBzeXNjdGxfb2lkW10gPSB7IENUTF9ORVQsIFBGX1JPVVRFLCAwLCAwLCBORVRfUlRfSUZMSVNULCAwIH07CisgICAgc3RydWN0IGlmYV9tc2doZHIgKmlmYTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmE7CisgICAgaW50IGFtYXNrOworICAgIGludCByYyA9IDA7CisgICAgaW50IGlkeF9vZmZzZXQgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisgICAgICAgICAgICAgICAgImxvYWQgKGZsYWdzICV1KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBpbnRlcmZhY2VcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHN5c2N0bChzeXNjdGxfb2lkLCBzaXplb2Yoc3lzY3RsX29pZCkvc2l6ZW9mKGludCksIDAsCisgICAgICAgICAgICAgICAmaWZfbGlzdF9zaXplLCAwLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpbnRlcmZhY2UgaW5mbyAoc2l6ZSlcbiIpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgaWZfbGlzdCA9ICh1X2NoYXIqKW1hbGxvYyhpZl9saXN0X3NpemUpOworICAgIGlmIChpZl9saXN0ID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVyZmFjZSBpbmZvICIKKyAgICAgICAgICAgICAgICAgIiglenUgYnl0ZXMpXG4iLCBpZl9saXN0X3NpemUpOworICAgICAgICByZXR1cm4gLTM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0ZWQgJXp1IGJ5dGVzIGZvciBpZl9saXN0XG4iLCBpZl9saXN0X3NpemUpKTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKHN5c2N0bF9vaWQsIHNpemVvZihzeXNjdGxfb2lkKS9zaXplb2YoaW50KSwgaWZfbGlzdCwKKyAgICAgICAgICAgICAgICZpZl9saXN0X3NpemUsIDAsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGludGVyZmFjZSBpbmZvXG4iKTsKKyAgICAgICAgZnJlZShpZl9saXN0KTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qIHBhc3MgMjogd2FsayBhZGRyZXNzZXMgKi8KKyAgICBmb3IgKGNwID0gaWZfbGlzdDsgY3AgPCBpZl9saXN0ICsgaWZfbGlzdF9zaXplOyBjcCArPSBpZmEtPmlmYW1fbXNnbGVuKSB7CisgICAgICAgIGlmYSA9IChzdHJ1Y3QgaWZhX21zZ2hkciAqKSBjcDsKKyAgICAgICAgaW50IHJ0YXg7CisKKyAgICAgICAgaWYgKGlmYS0+aWZhbV90eXBlICE9IFJUTV9ORVdBRERSKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlZCAweCV4IGluIFJUTV9ORVdBRERSIGZvciBpZmluZGV4ICV1XG4iLAorICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYW1fYWRkcnMsIGlmYS0+aWZhbV9pbmRleCkpOworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKGlmYSArIDEpOworICAgICAgICBlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfVU5LTk9XTjsKKyAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX09USEVSOworCWVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IDA7CisgICAgICAgIGZvciAoYW1hc2sgPSBpZmEtPmlmYW1fYWRkcnMsIHJ0YXggPSAwOyBhbWFzayAhPSAwOyBhbWFzayA+Pj0gMSwgcnRheCsrKSB7CisgICAgICAgICAgICBpZiAoKGFtYXNrICYgMSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5uc19pYV9pbmRleCA9ICsraWR4X29mZnNldDsKKyAgICAgICAgICAgICAgICBlbnRyeS0+aWZfaW5kZXggPSBpZmEtPmlmYW1faW5kZXg7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkOiBhPSVwLCBzYV9sZW49JWQsIHNhX2ZhbWlseT0weCV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZW50cnktPmlmX2luZGV4LCBhLCBhLT5zYV9sZW4sIGEtPnNhX2ZhbWlseSkpOworCisgICAgICAgICAgICAgICAgaWYgKGEtPnNhX2ZhbWlseSA9PSBBRl9JTkVUIHx8IGEtPnNhX2ZhbWlseSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqYTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopYTsKKwkJICAgIGNoYXIgc3RyWzEyOF07CisJCSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXI6c3lzY3RsIiwKKwkJICAgICAgICAgICAgICAgICJJUHY0IGFkZHIgJXNcbiIsIGluZXRfbnRvcChBRl9JTkVULCAmYTQtPnNpbl9hZGRyLnNfYWRkciwgc3RyLCAxMjgpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChydGF4ID09IFJUQVhfSUZBKSB7CisJCQllbnRyeS0+aWFfYWRkcmVzc19sZW4gPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5pYV9hZGRyZXNzLCAmYTQtPnNpbl9hZGRyLnNfYWRkciwgZW50cnktPmlhX2FkZHJlc3NfbGVuKTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocnRheCA9PSBSVEFYX05FVE1BU0spCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+aWFfcHJlZml4X2xlbiA9IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbihhNC0+c2luX2FkZHIuc19hZGRyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmE2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhOworCQkgICAgY2hhciBzdHJbMTI4XTsKKwkJICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lcjpzeXNjdGwiLAorCQkgICAgICAgICAgICAgICAgIklQdjYgYWRkciAlc1xuIiwgaW5ldF9udG9wKEFGX0lORVQ2LCAmYTYtPnNpbjZfYWRkci5zNl9hZGRyLCBzdHIsIDEyOCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ0YXggPT0gUlRBWF9JRkEpIHsKKwkJCWVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5pYV9hZGRyZXNzLCAmYTYtPnNpbjZfYWRkciwgZW50cnktPmlhX2FkZHJlc3NfbGVuKTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocnRheCA9PSBSVEFYX05FVE1BU0spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5pYV9wcmVmaXhfbGVuID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2Nl9wcmVmaXhfbGVuKGE2LT5zaW42X2FkZHIpOworCQkJREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisJCQkgICAgICAgICAgICAicHJlZml4X2xlbj0lZFxuIiwgZW50cnktPmlhX3ByZWZpeF9sZW4pKTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCAoKGNoYXIgKikgYSkgKyBST1VORFVQKGEtPnNhX2xlbikgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCWlmIChlbnRyeS0+aWFfYWRkcmVzc19sZW4gPT0gMCkgeworCSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXI6c3lzY3RsIiwKKwkgICAgICAgICAgICAgICAgImVudHJ5IHNraXBwZWRcbiIpKTsKKwkgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworCX0KKwllbHNlIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwiZXJyb3Igd2l0aCBpcGFkZHJlc3NfZW50cnk6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpZl9saXN0ICE9IE5VTEwpCisgICAgICAgIGZyZWUoaWZfbGlzdCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODFiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBzY29wZXpvbmUgZGF0YSBhY2Nlc3MgaGVhZGVyCisgKgorICogJElkOiBpcHY2c2NvcGV6b25lLmggMTQxNzAgMjAwNy0wNC0yOSAwMjoyMjoxMlogdmFydW5fYyAkCisgKi8KKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogY29uZmlndXJlIHJlcXVpcmVkIGZpbGVzCisgKgorICogTm90ZXM6CisgKgorICogMSkgcHJlZmVyIGZ1bmN0aW9uYWxpdHkgb3ZlciBwbGF0Zm9ybSwgd2hlcmUgcG9zc2libGUuIElmIGEgbWV0aG9kCisgKiAgICBpcyBhdmFpbGFibGUgZm9yIG11bHRpcGxlIHBsYXRmb3JtcywgdGVzdCB0aGF0IGZpcnN0LiBUaGF0IHdheQorICogICAgd2hlbiBhIG5ldyBwbGF0Zm9ybSBpcyBwb3J0ZWQsIGl0IHdvbid0IG5lZWQgYSBuZXcgdGVzdCBoZXJlLgorICoKKyAqIDIpIGRvbid0IGRvIGRldGFpbCByZXF1aXJlbWVudHMgaGVyZS4gSWYsIGZvciBleGFtcGxlLAorICogICAgSFBVWDExIGhhZCBkaWZmZXJlbnQgcmV1aXJlbWVudHMgdGhhbiBvdGhlciBIUFVYLCB0aGF0IHNob3VsZAorICogICAgYmUgaGFuZGxlZCBpbiB0aGUgKl9ocHV4LmggaGVhZGVyIGZpbGUuCisgKi8KK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2NvbW1vbikKKyNpZiBkZWZpbmVkKCBsaW51eCApCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eCkKKyNlbHNlCisvKgorICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCisgKiByZXF1aXJlIGEgYm9ndXMgZmlsZSB0byBnZW5lcmF0ZSBhbiBlcnJvci4KKyAqLworY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmUtdW5rbm93bi1hcmNoKTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NjJlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqICBpcHY2U2NvcGVJbmRleFRhYmxlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZDogaXB2NnNjb3Blem9uZV9jb21tb24uYyAxNDE3MCAyMDA3LTA0LTI5IDAyOjIyOjEyWiB2YXJ1bl9jICQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oPgorLyoKKyAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyB2b2lkIF9lbnRyeV9yZWxlYXNlKG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgKiBlbnRyeSwgdm9pZCAqdW51c2VkKTsKKworCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGV4dGVybmFsIHBlci1hcmNoaXRlY3R1cmUgZnVuY3Rpb25zIHByb3RvdHlwZXMKKyAqCisgKiBUaGVzZSBzaG91bGRuJ3QgYmUgY2FsbGVkIGJ5IHRoZSBnZW5lcmFsIHB1YmxpYywgc28gdGhleSBhcmVuJ3QgaW4KKyAqIHRoZSBoZWFkZXIgZmlsZS4KKyAqLworZXh0ZXJuIGludAorbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9hcmNoX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOworZXh0ZXJuIHZvaWQKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9hcmNoX2luaXQodm9pZCk7CisKKy8qKgorICogaW5pdGlhbGl6ZSBzeXN0ZW1zdGF0cyBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9pbml0KHVfaW50IGZsYWdzKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTpjb250YWluZXIiLCAiaW5pdFxuIikpOworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBjb250YWluZXJzLiBvbmUgaW5kZXhlZCBieSBpZkluZGV4LCB0aGUgb3RoZXIKKyAgICAgKiBpbmRleGVkIGJ5IGlmTmFtZS4KKyAgICAgKi8KKyAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJhY2Nlc3Nfc2NvcGV6b25lOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCisvKioKKyAqIGxvYWQgc2NvcGV6b25lIGluZm9ybWF0aW9uIGluIHNwZWNpZmllZCBjb250YWluZXIKKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGVtcHR5IGNvbnRhaW5lciwgb3IgTlVMTCB0byBoYXZlIG9uZSBjcmVhdGVkIGZvciB5b3UKKyAqIEBwYXJhbSBsb2FkX2ZsYWdzIGZsYWdzIHRvIG1vZGlmeSBiZWhhdmlvdXIuCisgKgorICogQHJldHZhbCBOVUxMICBlcnJvcgorICogQHJldHZhbCAhTlVMTCBwb2ludGVyIHRvIGNvbnRhaW5lcgorICovCituZXRzbm1wX2NvbnRhaW5lcioKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsICJsb2FkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgY29udGFpbmVyID0gbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9pbml0KGxvYWRfZmxhZ3MpOworICAgICAgICBpZiAoY29udGFpbmVyKQorICAgICAgICAgICAgY29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgic2NvcGV6b25lIik7CisgICAgfQorICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3Njb3Blem9uZVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJjID0gIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfYXJjaF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgaWYgKDAgIT0gcmMpIHsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9GUkVFX05PRkxBR1MpOworICAgICAgICBjb250YWluZXIgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmcmVlX2ZsYWdzKQoreworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsICJmcmVlXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZighIChmcmVlX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfU0NPUEVaT05FX0ZSRUVfRE9OVF9DTEVBUikpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogZnJlZSBhbGwgaXRlbXMuCisgICAgICAgICAqLworICAgICAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfZW50cnlfcmVsZWFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7Cit9CisKKy8qKgorICovCituZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICoKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9jcmVhdGUodm9pZCkKK3sKKyAgICBuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICplbnRyeSA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSk7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTplbnRyeSIsICJjcmVhdGVcbiIpKTsKKworICAgIGlmKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisKKyAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDE7CisgICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gICZlbnRyeS0+bnNfc2NvcGV6b25lX2luZGV4OworCisgICAgcmV0dXJuIGVudHJ5OworfQorCisvKioKKyAqLwordm9pZAorbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2VudHJ5X2ZyZWUobmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqIGVudHJ5KQoreworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmVudHJ5IiwgImZyZWVcbiIpKTsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKworICAgIGZyZWUoZW50cnkpOworfQorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFV0aWxpdHkgcm91dGluZXMKKyAqLworCisvKioKKyAqIFxpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2VudHJ5X3JlbGVhc2UobmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqIGVudHJ5LCB2b2lkICpjb250ZXh0KQoreworICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9mcmVlKGVudHJ5KTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2MDY0MQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZDogaXB2NnNjb3Blem9uZV9saW51eC5jIDE0MTcwIDIwMDctMDQtMjkgMDI6MjI6MTJaIHZhcnVuX2MgJAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmg+CisKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorc3RhdGljIGludCBfc2NvcGV6b25lX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KTsKKyNlbmRpZgorCisvKgorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBubyBjb250YWluZXIgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBvcGVuIGZpbGUKKyAqIEByZXR2YWwgLTMgY291bGQgbm90IGNyZWF0ZSBlbnRyeSAocHJvYmFibHkgbWFsbG9jKQorICogQHJldHZhbCAtNCBmaWxlIGZvcm1hdCBlcnJvcgorICovCitpbnQKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzEgPSAwOworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgaW50IGlkeF9vZmZzZXQgPSAwOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3Nfc2NvcGV6b25lX1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYzEgPSBfc2NvcGV6b25lX3Y2KGNvbnRhaW5lciwgaWR4X29mZnNldCk7CisjZW5kaWYKKyAgICBpZihyYzEgPiAwKQorICAgICAgICByYzEgPSAwOworICAgIHJldHVybiByYzE7Cit9CisKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorCisvKiBzY29wZSBpZGVudGlmaWVycywgZnJvbSBrZXJuZWwgLSBpbmNsdWRlL25ldC9pcHY2LmggKi8KKyNkZWZpbmUgSVBWNl9BRERSX0xPT1BCQUNLICAgICAgMHgwMDEwVQorI2RlZmluZSBJUFY2X0FERFJfTElOS0xPQ0FMICAgICAweDAwMjBVCisjZGVmaW5lIElQVjZfQUREUl9TSVRFTE9DQUwgICAgIDB4MDA0MFUKKworc3RhdGljIGludAorX3Njb3Blem9uZV92NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCkKK3sKKworICAgIC8qCisgICAgICogT24gTGludXgsIHdlIHN1cHBvcnQgb25seSBsaW5rLWxvY2FsIHNjb3BlIHpvbmVzLgorICAgICAqIEVhY2ggaW50ZXJmYWNlLCB3aGljaCBoYXMgbGluay1sb2NhbCBhZGRyZXNzLCBnZXRzIHVuaXF1ZSBzY29wZQorICAgICAqIHpvbmUgaW5kZXguCisgICAgICovCisgICAgRklMRSAgICAgICAgICAgKmluOworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzgwXSwgYWRkcls0MF07CisgICAgaW50ICAgICAgICAgICAgIGlmX2luZGV4LCBwZnhfbGVuLCBzY29wZSwgZmxhZ3MsIHJjID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgbGFzdF9pZl9pbmRleCA9IC0xOworICAgIG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgKmVudHJ5OworICAgIAorICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworI2RlZmluZSBQUk9DRklMRSAiL3Byb2MvbmV0L2lmX2luZXQ2IgorICAgIGlmICghKGluID0gZm9wZW4oUFJPQ0ZJTEUsICJyIikpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIikpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorICAgIAorICAgIC8qCisgICAgICogYWRkcmVzcyBpbmRleCBwcmVmaXhfbGVuIHNjb3BlIHN0YXR1cyBpZl9uYW1lCisgICAgICovCisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGZlODAwMDAwMDAwMDAwMDAwMjAwZThmZmZlNWI1YzkzIDA1IDQwIDIwIDgwIGV0aDAKKyAgICAgICAgICogICAgICAgICAgICAgQSAgICAgICAgICAgICAgICAgICAgRCAgUCAgUyAgRiAgSQorICAgICAgICAgKiBBOiBhZGRyZXNzCisgICAgICAgICAqIEQ6IGRldmljZSBudW1iZXIKKyAgICAgICAgICogUDogcHJlZml4IGxlbgorICAgICAgICAgKiBTOiBzY29wZSAoc2VlIGluY2x1ZGUvbmV0L2lwdjYuaCwgbmV0L2lwdjYvYWRkcmNvbmYuYykKKyAgICAgICAgICogRjogZmxhZ3MgKHNlZSBpbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oLCBuZXQvaXB2Ni9hZGRyY29uZi5jKQorICAgICAgICAgKiBJOiBpbnRlcmZhY2UKKyAgICAgICAgICovCisgICAgICAgIHJjID0gc3NjYW5mKGxpbmUsICIlMzlzICUwNHggJTAyeCAlMDJ4ICUwMnhcbiIsCisgICAgICAgICAgICAgICAgICAgIGFkZHIsICZpZl9pbmRleCwgJnBmeF9sZW4sICZzY29wZSwgJmZsYWdzKTsKKyAgICAgICAgaWYoIDUgIT0gcmMgKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCBQUk9DRklMRSAiIGRhdGEgZm9ybWF0IGVycm9yICglZCE9NSksIGxpbmUgPT18JXN8XG4iLAorICAgICAgICAgICAgICAgICAgICAgcmMsIGxpbmUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzY29wZXpvbmU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHIgJXMsIGluZGV4ICVkLCBwZnggJWQsIHNjb3BlICVkLCBmbGFncyAweCVYXG4iLAorICAgICAgICAgICAgICAgICAgICBhZGRyLCBpZl9pbmRleCwgcGZ4X2xlbiwgc2NvcGUsIGZsYWdzKSk7CisKKyAgICAgICAgaWYgKCEgKHNjb3BlICYgSVBWNl9BRERSX0xJTktMT0NBTCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBhZGRyZXNzIGlzIG5vdCBsaW5rLWxvY2FsLCBza2lwcGluZ1xuIikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyogCisgICAgICAgICAqIENoZWNrIHRoYXQgdGhlIGludGVyZmFjZSB3YXMgbm90IGluc2VydGVkIGJlZm9yZSwganVzdCBpbiBjYXNlCisgICAgICAgICAqIG9uZSBpbnRlcmZhY2UgaGFzIHR3byBvciBtb3JlIGxpbmstbG9jYWwgYWRkcmVzc2VzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGxhc3RfaWZfaW5kZXggPT0gaWZfaW5kZXgpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgaW5zZXJ0ZWQsIHNraXBwaW5nXG4iKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxhc3RfaWZfaW5kZXggPSBpZl9pbmRleDsgCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZW50cnktPm5zX3Njb3Blem9uZV9pbmRleCA9ICsraWR4X29mZnNldDsKKyAgICAgICAgZW50cnktPmluZGV4ID0gaWZfaW5kZXg7CisgICAgICAgIGVudHJ5LT5zY29wZXpvbmVfbGlua2xvY2FsID0gaWZfaW5kZXg7CisgCisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgfQorICAgIGZjbG9zZShpbik7CisgICAgaWYocmM8MCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIGlkeF9vZmZzZXQ7Cit9CisjZW5kaWYgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19jb21tb24uaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2NvbW1vbi5oCmluZGV4IDJmMGE2M2EuLmViZWEyMWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2NvbW1vbi5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2NvbW1vbi5oCkBAIC0xOSw2ICsxOSw4IEBACiAgKi8KICNpZiBkZWZpbmVkKCBsaW51eCApCiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eCkKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q0ICkgfHwgZGVmaW5lZCggbmV0YnNkNSApIHx8IGRlZmluZWQoIG9wZW5ic2Q0ICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX3N5c2N0bCkKICNlbHNlCiAvKgogICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCkBAIC0yNiw0ICsyOCwzIEBACiAgKi8KIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzLXVua25vd24tYXJjaCkKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYwppbmRleCBkOWMzOTE0Li44NWU5MTJhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMKQEAgLTUsMTAgKzUsMTQ4IEBACiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyIGlwZndfbmFtZVtdID0gIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL2FsbC9mb3J3YXJkaW5nIjsKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlKQorCitzdGF0aWMgY29uc3QgY2hhciBpcGZ3X25hbWVbXSA9ICIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvZm9yd2FyZGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBpcHR0bF9uYW1lW10gPSAiL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2RlZmF1bHRfdHRsIjsKK3N0YXRpYyBjb25zdCBjaGFyIGlwZnc2X25hbWVbXSA9ICIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9hbGwvZm9yd2FyZGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBpcGhvcDZfbmFtZVtdID0gIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL2FsbC9ob3BfbGltaXQiOworCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICBmaWxlcCA9IGZvcGVuKGlwZndfbmFtZSwgInIiKTsKKyAgICBpZiAoTlVMTCA9PSBmaWxlcCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBmd19uYW1lKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICByYyA9IGZzY2FuZihmaWxlcCwgIiVsdSIsIHZhbHVlKTsKKyAgICBmY2xvc2UoZmlsZXApOworICAgIGlmICgxICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwgImNvdWxkIG5vdCByZWFkICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcGZ3X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKworICAgIGlmICgoMCAhPSAqdmFsdWUpICYmICgxICE9ICp2YWx1ZSkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAidW5leHBlY3RlZCB2YWx1ZSAlbGQgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgaXBmd19uYW1lKSk7CisgICAgICAgIHJldHVybiAtNDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiYmFkIHZhbHVlICVsZCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBpcGZ3X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgZmlsZXAgPSBmb3BlbihpcGZ3X25hbWUsICJ3Iik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICB9CisKKyAgICByYyA9IGZwcmludGYoZmlsZXAsICIlbGQiLCB2YWx1ZSk7CisgICAgZmNsb3NlKGZpbGVwKTsKKyAgICBpZiAoMSAhPSByYykgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgd3JpdGUgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICBmaWxlcCA9IGZvcGVuKGlwdHRsX25hbWUsICJyIik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIHJjID0gZnNjYW5mKGZpbGVwLCAiJWx1IiwgdmFsdWUpOworICAgIGZjbG9zZShmaWxlcCk7CisgICAgaWYgKDEgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiY291bGQgbm90IHJlYWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKworICAgIGlmICgoMCA9PSAqdmFsdWUpIHx8ICgyNTUgPCAqdmFsdWUpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwgInVuZXhwZWN0ZWQgdmFsdWUgJWxkIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAqdmFsdWUsIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC00OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9zZXQodV9sb25nIHZhbHVlKQoreworICAgIEZJTEUgKmZpbGVwOworICAgIGludCByYzsKKworICAgIGlmICh2YWx1ZSA9PSAwIHx8IHZhbHVlID4gMjU1KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwgImJhZCB2YWx1ZSAlbGQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgaXB0dGxfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9CisKKyAgICBmaWxlcCA9IGZvcGVuKGlwdHRsX25hbWUsICJ3Iik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgfQorCisgICAgcmMgPSBmcHJpbnRmKGZpbGVwLCAiJWxkIiwgdmFsdWUpOworICAgIGZjbG9zZShmaWxlcCk7CisgICAgaWYgKDEgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiY291bGQgbm90IHdyaXRlICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcHR0bF9uYW1lKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CiAKIGludAogbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSkKQEAgLTIwLDI0ICsxNTgsMjQgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAKLSAgICBmaWxlcCA9IGZvcGVuKGlwZndfbmFtZSwgInIiKTsKKyAgICBmaWxlcCA9IGZvcGVuKGlwZnc2X25hbWUsICJyIik7CiAgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcHY2SXBGb3J3YXJkaW5nIiwgImNvdWxkIG5vdCBvcGVuICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBpcGZ3X25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgaXBmdzZfbmFtZSkpOwogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQogCi0gICAgcmMgPSBmc2NhbmYoZmlsZXAsICIlbGQiLCB2YWx1ZSk7CisgICAgcmMgPSBmc2NhbmYoZmlsZXAsICIlbHUiLCB2YWx1ZSk7CiAgICAgZmNsb3NlKGZpbGVwKTsKICAgICBpZiAoMSAhPSByYykgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwdjZJcEZvcndhcmRpbmciLCAiY291bGQgbm90IHJlYWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBpcGZ3Nl9uYW1lKSk7CiAgICAgICAgIHJldHVybiAtMzsKICAgICB9CiAKICAgICBpZiAoKDAgIT0gKnZhbHVlKSAmJiAoMSAhPSAqdmFsdWUpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXB2NklwRm9yd2FyZGluZyIsICJ1bmV4cGVjdGVkIHZhbHVlICVsZCBpbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgKnZhbHVlLCBpcGZ3X25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgKnZhbHVlLCBpcGZ3Nl9uYW1lKSk7CiAgICAgICAgIHJldHVybiAtNDsKICAgICB9CiAKQEAgLTYwLDEwICsxOTgsMTAgQEAKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CiAgICAgfQogCi0gICAgZmlsZXAgPSBmb3BlbihpcGZ3X25hbWUsICJ3Iik7CisgICAgZmlsZXAgPSBmb3BlbihpcGZ3Nl9uYW1lLCAidyIpOwogICAgIGlmIChOVUxMID09IGZpbGVwKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXB2NklwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgaXBmd19uYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIGlwZnc2X25hbWUpKTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CiAgICAgfQogCkBAIC03MSw5ICsyMDksODYgQEAKICAgICBmY2xvc2UoZmlsZXApOwogICAgIGlmICgxICE9IHJjKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXB2NklwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgd3JpdGUgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBpcGZ3Nl9uYW1lKSk7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CisKK2ludAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRGVmYXVsdEhvcExpbWl0X2dldCh1X2xvbmcgKnZhbHVlKQoreworICAgIEZJTEUgKmZpbGVwOworICAgIGludCByYzsKKworICAgIGlmIChOVUxMID09IHZhbHVlKQorICAgICAgICByZXR1cm4gLTE7CisKKworICAgIGZpbGVwID0gZm9wZW4oaXBob3A2X25hbWUsICJyIik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRIb3BMaW1pdCIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBob3A2X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIHJjID0gZnNjYW5mKGZpbGVwLCAiJWx1IiwgdmFsdWUpOworICAgIGZjbG9zZShmaWxlcCk7CisgICAgaWYgKDEgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRIb3BMaW1pdCIsICJjb3VsZCBub3QgcmVhZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBob3A2X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKworICAgIGlmICgoMCA9PSAqdmFsdWUpIHx8ICgyNTUgPCAqdmFsdWUpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAidW5leHBlY3RlZCB2YWx1ZSAlbGQgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgaXBob3A2X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC00OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcERlZmF1bHRIb3BMaW1pdF9zZXQodV9sb25nIHZhbHVlKQoreworICAgIEZJTEUgKmZpbGVwOworICAgIGludCByYzsKKworICAgIGlmICh2YWx1ZSA9PSAwIHx8IHZhbHVlID4gMjU1KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAiYmFkIHZhbHVlICVsZCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBpcGhvcDZfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9CisKKyAgICBmaWxlcCA9IGZvcGVuKGlwaG9wNl9uYW1lLCAidyIpOworICAgIGlmIChOVUxMID09IGZpbGVwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwaG9wNl9uYW1lKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgIH0KKworICAgIHJjID0gZnByaW50ZihmaWxlcCwgIiVsZCIsIHZhbHVlKTsKKyAgICBmY2xvc2UoZmlsZXApOworICAgIGlmICgxICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAiY291bGQgbm90IHdyaXRlICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcGhvcDZfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkCituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgaXBSZWFzbVRpbWVvdXRfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDEzLCAwIH07CisKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlCisgICAgICAgICgiaXBSZWFzbVRpbWVvdXQiLAorICAgICAgICAgaXBSZWFzbVRpbWVvdXRfb2lkLCBPSURfTEVOR1RIKGlwUmVhc21UaW1lb3V0X29pZCksCisgICAgICAgICAiL3Byb2Mvc3lzL25ldC9pcHY0L2lwZnJhZ190aW1lIiwgQVNOX0lOVEVHRVIsCisgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgTlVMTCwgTlVMTCk7CisKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5Yzc0MwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX3N5c2N0bC5jCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogIElQLU1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZCQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogWFhYOiB0aGUgdmFsdWVzIHBhc3NlZCB0byBuZXRzbm1wX2FyY2hfaXBfc2NhbGFycyguLikgbWF5IG9yIG1heSBub3QgYmUKKyAqIHBvcnRhYmxlIHRvIHRoZSBvdGhlciBCU0RzIC0tIGl0IHNlZW1zIHRvIGJlIHBvcnRhYmxlIGJhY2sgdG8gRnJlZUJTRCA0LngKKyAqIChEYXJ3aW4gMTAuOC4wKSBhdCBsZWFzdC4KKyAqLworCitzdGF0aWMgaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoY29uc3QgY2hhciAqYWNjZXNzX21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWliW10sIHNpemVfdCBtaWJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqb2xkX3ZhbHVlLCB1X2xvbmcgKm5ld192YWx1ZSkKK3sKKyAgICBpbnQgbmV3aW50LCBvbGRpbnQ7CisgICAgc2l6ZV90IG5lZWRlZDsKKyAgICBpbnQgcmM7CisKKyAgICBuZWVkZWQgPSBzaXplb2Yob2xkaW50KTsKKyAgICBpZiAobmV3X3ZhbHVlKQorICAgICAgICBuZXdpbnQgPSAqbmV3X3ZhbHVlOworCisgICAgcmMgPSBzeXNjdGwobWliLCBtaWJfbGVuLCAmb2xkaW50LCAmbmVlZGVkLAorICAgICAgICAgICAgICAgIG5ld192YWx1ZSA/ICZuZXdpbnQgOiBOVUxMLCAobmV3X3ZhbHVlID8gc2l6ZW9mKG5ld2ludCkgOiAwKSk7CisgICAgaWYgKHJjID09IC0xKSB7CisgICAgICAgIERFQlVHTVNHVEwoKGFjY2Vzc19tb2R1bGUsICJzeXNjdGwgJXMgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIChuZXdfdmFsdWUgPT0gTlVMTCA/ICJnZXQiIDogInNldCIpLAorICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKKyAgICB9CisgICAgKm9sZF92YWx1ZSA9IG9sZGludDsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBpcERlZmF1bHRUVExfbWliW10gPSB7CisgICAgQ1RMX05FVCwKKyAgICBQRl9JTkVULAorICAgIElQUFJPVE9fSVAsCisgICAgSVBDVExfREVGVFRMCit9OworCitpbnQgaXBGb3J3YXJkaW5nX21pYltdID0geworICAgIENUTF9ORVQsCisgICAgUEZfSU5FVCwKKyAgICBJUFBST1RPX0lQLAorICAgIElQQ1RMX0ZPUldBUkRJTkcKK307CisKK2ludCBpcHY2SXBEZWZhdWx0SG9wTGltaXRfbWliW10gPSB7CisgICAgQ1RMX05FVCwKKyAgICBQRl9JTkVUNiwKKyAgICBJUFBST1RPX0lQLAorICAgIElQVjZDVExfREVGSExJTQorfTsKKworaW50IGlwdjZJcEZvcndhcmRpbmdfbWliW10gPSB7CisgICAgQ1RMX05FVCwKKyAgICBQRl9JTkVUNiwKKyAgICBJUFBST1RPX0lQLAorICAgIElQVjZDVExfRk9SV0FSRElORworfTsKKworI2RlZmluZSBNSUJfTEVOKGEpCQkoc2l6ZW9mKGEpIC8gc2l6ZW9mKCphKSkKKworI2RlZmluZSBJUERFRkFVTFRUVExfTEVOCU1JQl9MRU4oaXBEZWZhdWx0VFRMX21pYikKKyNkZWZpbmUgSVBGT1JXQVJESU5HX0xFTglNSUJfTEVOKGlwRm9yd2FyZGluZ19taWIpCisjZGVmaW5lIElQVjZJUERFRkFVTFRIT1BMSU1JVF9MRU4JTUlCX0xFTihpcHY2SXBEZWZhdWx0SG9wTGltaXRfbWliKQorI2RlZmluZSBJUFY2SVBGT1JXQVJESU5HX0xFTglNSUJfTEVOKGlwdjZJcEZvcndhcmRpbmdfbWliKQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcERlZmF1bHRUVEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFRUTF9taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBERUZBVUxUVFRMX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgTlVMTCk7CisgICAgaWYgKHJjICE9IDApCisgICAgICAgIHJldHVybiAtMjsKKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9zZXQodV9sb25nIHZhbHVlKQoreworICAgIGludCByYzsKKworICAgIGlmICgxID09IHZhbHVlKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoMiA9PSB2YWx1ZSkKKyAgICAgICAgdmFsdWUgPSAwOworICAgIGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRGVmYXVsdFRUTCIsICJiYWQgdmFsdWUgJWxkXG4iLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9CisKKyAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX3N5c2N0bCgiYWNjZXNzOmlwRm9yd2FyZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBGb3J3YXJkaW5nX21pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUEZPUldBUkRJTkdfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZ2YWx1ZSk7CisgICAgaWYgKHJjICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRm9yd2FyZGluZ19taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBGT1JXQVJESU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgTlVMTCk7CisgICAgaWYgKHJjICE9IDApCisgICAgICAgIHJldHVybiAtMjsKKworICAgIC8qIE9uIEZyZWVCU0QgNy4yIGF0IGxlYXN0LCB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSBzeXNjdGwgY2FuIGJlIGNvZXJjZWQKKyAgICAgKiBpbnRvIGEgbm9uLXplcm8gdmFsdWU7IGNvbnZlcnQgaXQgaW50byBhIHZhbHVlIHRoYXQncyBzYW5lIHBlciB0aGUKKyAgICAgKiBJUC1NSUIgZGVmaW5pdGlvbi4KKyAgICAgKi8KKyAgICBpZiAoKnZhbHVlICE9IDApCisgICAgICAgICp2YWx1ZSA9IDE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiYmFkIHZhbHVlICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRm9yd2FyZGluZ19taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBGT1JXQVJESU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdmFsdWUpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBEZWZhdWx0SG9wTGltaXRfZ2V0KHVfbG9uZyAqdmFsdWUpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKE5VTEwgPT0gdmFsdWUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfc3lzY3RsKCJhY2Nlc3M6aXB2NklwRGVmYXVsdEhvcExpbWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBEZWZhdWx0SG9wTGltaXRfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZJUERFRkFVTFRIT1BMSU1JVF9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIE5VTEwpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTI7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBEZWZhdWx0SG9wTGltaXRfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcHY2SXBEZWZhdWx0SG9wTGltaXQiLCAiYmFkIHZhbHVlICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJcERlZmF1bHRIb3BMaW1pdF9taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBWNklQREVGQVVMVEhPUExJTUlUX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdmFsdWUpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBGb3J3YXJkaW5nX2dldCh1X2xvbmcgKnZhbHVlKQoreworICAgIGludCByYzsKKworICAgIGlmIChOVUxMID09IHZhbHVlKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX3N5c2N0bCgiYWNjZXNzOmlwdjZJcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJcEZvcndhcmRpbmdfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZJUEZPUldBUkRJTkdfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBOVUxMKTsKKyAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0yOworCisgICAgLyogT24gRnJlZUJTRCA3LjIgYXQgbGVhc3QsIHRoZSB2YWx1ZSBwYXNzZWQgdG8gdGhlIHN5c2N0bCBjYW4gYmUgY29lcmNlZAorICAgICAqIGludG8gYSBub24temVybyB2YWx1ZTsgY29udmVydCBpdCBpbnRvIGEgdmFsdWUgdGhhdCdzIHNhbmUgcGVyIHRoZQorICAgICAqIElQLU1JQiBkZWZpbml0aW9uLgorICAgICAqLworICAgIGlmICgqdmFsdWUgIT0gMCkKKyAgICAgICAgKnZhbHVlID0gMTsKKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcEZvcndhcmRpbmdfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiYmFkIHZhbHVlICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcHY2SXBGb3J3YXJkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBGb3J3YXJkaW5nX21pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2SVBGT1JXQVJESU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdmFsdWUpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgaXBSZWFzbVRpbWVvdXRfdmFsOworCit2b2lkCituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgaXBSZWFzbVRpbWVvdXRfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDEzLCAwIH07CisKKyAgICAvKiAKKyAgICAgKiBUaGlzIHZhbHVlIGlzIHN0YXRpYyBhdCBjb21waWxlIHRpbWUgb24gRnJlZUJTRDsgaXQgcmVhbGx5IHNob3VsZCBiZSBhCisgICAgICogcHJvYmVkIHZpYSBlaXRoZXIgc3lzY3RsIG9yIHN5c2NvbmYgYXQgcnVudGltZSBhcyB0aGUgY29tcGlsZWQgdmFsdWUgYW5kCisgICAgICogdGhlIHJ1bnRpbWUgdmFsdWUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGNhbiB2YXJ5LgorICAgICAqCisgICAgICogUGxlYXNlIHJlZmVyIHRvIHN5cy9wcm90b3N3LmggZm9yIG1vcmUgZGV0YWlscyBvbiB3aGF0IHRoaXMgdmFsdWUgaXMgKGluCisgICAgICogcGFydGljdWxhciBQUl9TTE9XSFopLgorICAgICAqLworICAgIGlwUmVhc21UaW1lb3V0X3ZhbCA9IElQRlJBR1RUTCAvIFBSX1NMT1dIWjsKKworICAgIG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZSgiaXBSZWFzbVRpbWVvdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcFJlYXNtVGltZW91dF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXBSZWFzbVRpbWVvdXRfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwUmVhc21UaW1lb3V0X3ZhbCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCmluZGV4IDZiYmE2ZDkuLjUxNDgwN2EgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCkBAIC0yMCwxMSArMjAsMTAgQEAKIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24pCiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4KQorI2VsaWYgZGVmaW5lZCggc29sYXJpczIgKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyKQorI2VsaWYgZGVmaW5lZCggZnJlZWJzZDcgKSB8fCBkZWZpbmVkKCBuZXRic2Q1ICkgfHwgZGVmaW5lZCggb3BlbmJzZDQgKSB8fCBkZWZpbmVkKCBkcmFnb25mbHkgKSB8fCBkZWZpbmVkKCBkYXJ3aW4gKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3N5c2N0bCkKICNlbHNlCi0vKgotICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCi0gKiByZXF1aXJlIGEgYm9ndXMgZmlsZSB0byBnZW5lcmF0ZSBhbiBlcnJvci4KLSAqLwotY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLXVua25vd24tYXJjaCk7Citjb25maWdfZXJyb3IodGhlIHN5c3RlbXN0YXRzIGRhdGEgYWNjZXNzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LikKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMKaW5kZXggZjI3ZTBlYS4uMjkxMDliZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgU3lzdGVtc3RhdHMgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKiAgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZCBpcElmU3RhdHNUYWJsZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKICAqCiAgKiAkSWQkCiAgKi8KQEAgLTk2LDggKzk2LDExIEBACiAKICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmNvbnRhaW5lciIsICJsb2FkXG4iKSk7CiAKLSAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CiAgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9pbml0KGxvYWRfZmxhZ3MpOworICAgICAgICBpZiAoTlVMTCAhPSBjb250YWluZXIpCisgICAgICAgICAgICBjb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJzeXN0ZW1zdGF0c19hdXRvY3JlYXRlIik7CisgICAgfQogICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3N5c3RlbXN0YXRzXG4iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNjMsNyArMTY2LDggQEAKIC8qKgogICovCiBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICoKLW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZShpbnQgdmVyc2lvbikKK25ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZShpbnQgdmVyc2lvbiwgaW50IGlmX2luZGV4LAorICAgICAgICBjb25zdCBjaGFyICp0YWJsZU5hbWUpCiB7CiAgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnkgPQogICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkpOwpAQCAtMTczLDExICsxNzcsMTEgQEAKICAgICBpZihOVUxMID09IGVudHJ5KQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGVudHJ5LT5uc19pcF92ZXJzaW9uID0gdmVyc2lvbjsKLQotICAgIGVudHJ5LT5vaWRfaW5kZXgubGVuID0gMTsKLSAgICBlbnRyeS0+b2lkX2luZGV4Lm9pZHMgPSAob2lkICopICYgZW50cnktPm5zX2lwX3ZlcnNpb247Ci0KKyAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDI7CisgICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gZW50cnktPmluZGV4OworICAgIGVudHJ5LT5pbmRleFswXSA9IHZlcnNpb247CisgICAgZW50cnktPmluZGV4WzFdID0gaWZfaW5kZXg7CisgICAgZW50cnktPnRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKICAgICByZXR1cm4gZW50cnk7CiB9CiAKQEAgLTIxNyw2ICsyMjEsNjIgQEAKICAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKGVudHJ5KTsKIH0KIAorLyoKKyAqIENhbGN1bGF0ZXMgdGhlIGVudHJpZXMsIHdoaWNoIGFyZSBub3QgcHJvdmlkZWQgYnkgT1MsIGJ1dCBjYW4gYmUgCisgKiBjb21wdXRlZCBmcm9tIHRoZSBvdGhlcnMuCisgKi8KK3N0YXRpYyB2b2lkCitfY2FsY3VsYXRlX2VudHJpZXMobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqIGVudHJ5KQoreworICAgIC8qCisgICAgICogSENJbkZvcndEYXRhZ3JhbXMgPSBIQ0luTm9Sb3V0ZXMgKyBIQ091dEZvcndEYXRhZ3JhbXMKKyAgICAgKi8KKyAgICBpZiAoIWVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkZPUldEQVRBR1JBTVNdCisgICAgICAgICYmIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXQorICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5OT1JPVVRFU10pIHsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcyA9IGVudHJ5LT5zdGF0cy5IQ0luTm9Sb3V0ZXM7CisgICAgICAgIHU2NEluY3IoJmVudHJ5LT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcywgJmVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMpOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSA9IDE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBIQ091dEZyYWdSZXFkcyA9IEhDT3V0RnJhZ09LcyArIEhDT3V0RnJhZ0ZhaWxzCisgICAgICovCisgICAgaWYgKCFlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXQorICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10KKyAgICAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdGQUlMU10pIHsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdSZXFkcyA9IGVudHJ5LT5zdGF0cy5IQ091dEZyYWdPS3M7CisgICAgICAgIHU2NEluY3IoJmVudHJ5LT5zdGF0cy5IQ091dEZyYWdSZXFkcywgJmVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscyk7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHUkVRRFNdID0gMTsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBIQ091dFRyYW5zbWl0cyA9IEhDT3V0UmVxdWVzdHMgICsgSENPdXRGb3J3RGF0YWdyYW1zICsgSENPdXRGcmFnQ3JlYXRlcyAgCisgICAgICogICAgICAgICAgICAgICAgICAtIEhDT3V0RnJhZ1JlcWRzIC0gSENPdXROb1JvdXRlcyAgLSBIQ091dERpc2NhcmRzCisgICAgICovCisgICAgaWYgKCFlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXQorICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdCisgICAgICAgICYmIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXQorICAgICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXQorICAgICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdCisgICAgICAgICAgICYmIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFU10KKyAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTXSkgeworCisgICAgICAgIFU2NCB0bXAsIHRtcDIsIHRtcDM7CisgICAgICAgIHRtcCA9IGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzOworICAgICAgICB1NjRJbmNyKCZ0bXAsICZlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zKTsKKyAgICAgICAgdTY0SW5jcigmdG1wLCAmZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMpOworICAgICAgICAKKyAgICAgICAgdTY0U3VidHJhY3QoJnRtcCwgJmVudHJ5LT5zdGF0cy5IQ091dEZyYWdSZXFkcywgJnRtcDIpOworICAgICAgICB1NjRTdWJ0cmFjdCgmdG1wMiwgJmVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLCAmdG1wMyk7CisgICAgICAgIHU2NFN1YnRyYWN0KCZ0bXAzLCAmZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMsICZlbnRyeS0+c3RhdHMuSENPdXRUcmFuc21pdHMpOworICAgICAgICAgICAgICAgIAorICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXSA9IDE7CisgICAgfQorfQorCiAvKioKICAqIHVwZGF0ZSBlbnRyeSBzdGF0cyAoY2hlY2tpbmcgZm9yIGNvdW50ZXIgd3JhcCkKICAqCkBAIC0yMzMsNyArMjkzLDggQEAKICAgICAgKiBzYW5pdHkgY2hlY2tzCiAgICAgICovCiAgICAgaWYgKChOVUxMID09IHByZXZfdmFscykgfHwgKE5VTEwgPT0gbmV3X3ZhbHMpIHx8Ci0gICAgICAgIChwcmV2X3ZhbHMtPm5zX2lwX3ZlcnNpb24gIT0gbmV3X3ZhbHMtPm5zX2lwX3ZlcnNpb24pKQorICAgICAgICAocHJldl92YWxzLT5pbmRleFswXSAhPSBuZXdfdmFscy0+aW5kZXhbMF0pCisgICAgICAgIHx8IChwcmV2X3ZhbHMtPmluZGV4WzFdICE9IG5ld192YWxzLT5pbmRleFsxXSkpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qCkBAIC0yNDEsNiArMzAyLDcgQEAKICAgICAgKi8KICAgICBpZiAoMCA9PSBuZWVkX3dyYXBfY2hlY2spIHsKICAgICAgICAgbWVtY3B5KCZwcmV2X3ZhbHMtPnN0YXRzLCAmbmV3X3ZhbHMtPnN0YXRzLCBzaXplb2YobmV3X3ZhbHMtPnN0YXRzKSk7CisgICAgICAgIF9jYWxjdWxhdGVfZW50cmllcyhwcmV2X3ZhbHMpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTI1OCw4ICszMjAsOCBAQAogICAgICAgICAvKgogICAgICAgICAgKiB1cGRhdGUgc3RyYWlnaHQgMzIgYml0IGNvdW50ZXJzCiAgICAgICAgICAqLworICAgICAgICBtZW1jcHkoJnByZXZfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbMF0sICZuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbMF0sIHNpemVvZihuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWwpKTsKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5JbkhkckVycm9ycyA9IG5ld192YWxzLT5zdGF0cy5JbkhkckVycm9yczsKLSAgICAgICAgcHJldl92YWxzLT5zdGF0cy5Jbk5vUm91dGVzID0gbmV3X3ZhbHMtPnN0YXRzLkluTm9Sb3V0ZXM7CiAgICAgICAgIHByZXZfdmFscy0+c3RhdHMuSW5BZGRyRXJyb3JzID0gbmV3X3ZhbHMtPnN0YXRzLkluQWRkckVycm9yczsKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBuZXdfdmFscy0+c3RhdHMuSW5Vbmtub3duUHJvdG9zOwogICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLkluVHJ1bmNhdGVkUGt0cyA9IG5ld192YWxzLT5zdGF0cy5JblRydW5jYXRlZFBrdHM7CkBAIC0yNjcsODcgKzMyOSwyMzYgQEAKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5SZWFzbU9LcyA9IG5ld192YWxzLT5zdGF0cy5SZWFzbU9LczsKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5SZWFzbUZhaWxzID0gbmV3X3ZhbHMtPnN0YXRzLlJlYXNtRmFpbHM7CiAgICAgICAgIHByZXZfdmFscy0+c3RhdHMuSW5EaXNjYXJkcyA9IG5ld192YWxzLT5zdGF0cy5JbkRpc2NhcmRzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dE5vUm91dGVzID0gbmV3X3ZhbHMtPnN0YXRzLk91dE5vUm91dGVzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dERpc2NhcmRzID0gbmV3X3ZhbHMtPnN0YXRzLk91dERpc2NhcmRzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dEZyYWdSZXFkcyA9IG5ld192YWxzLT5zdGF0cy5PdXRGcmFnUmVxZHM7Ci0gICAgICAgIHByZXZfdmFscy0+c3RhdHMuT3V0RnJhZ09LcyA9IG5ld192YWxzLT5zdGF0cy5PdXRGcmFnT0tzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dEZyYWdGYWlscyA9IG5ld192YWxzLT5zdGF0cy5PdXRGcmFnRmFpbHM7Ci0gICAgICAgIHByZXZfdmFscy0+c3RhdHMuT3V0RnJhZ0NyZWF0ZXMgPSBuZXdfdmFscy0+c3RhdHMuT3V0RnJhZ0NyZWF0ZXM7CiAKICAgICAgICAgLyoKICAgICAgICAgICogdXBkYXRlIDY0Yml0IGNvdW50ZXJzCiAgICAgICAgICAqLwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENJblJlY2VpdmVzLAorICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbk5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luTm9Sb3V0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5Ob1JvdXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbk5vUm91dGVzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVROT1JPVVRFU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dE5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dE5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dE5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dE5vUm91dGVzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dERpc2NhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dERpc2NhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dERpc2NhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dERpc2NhcmRzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHUkVRRFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRGcmFnUmVxZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ1JlcWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dEZyYWdSZXFkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRGcmFnUmVxZHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRGcmFnT0tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEZyYWdPS3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0RnJhZ09LcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRGcmFnT0tzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRGcmFnRmFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dEZyYWdGYWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRGcmFnRmFpbHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0RnJhZ0NyZWF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0RnJhZ0NyZWF0ZXMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJblJlY2VpdmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luUmVjZWl2ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5SZWNlaXZlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENJbk9jdGV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJblJlY2VpdmVzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk9DVEVUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ0luT2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luT2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luT2N0ZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbk9jdGV0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENJbkZvcndEYXRhZ3JhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5EZWxpdmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbkZvcndEYXRhZ3JhbXMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbkRlbGl2ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luRGVsaXZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5EZWxpdmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENPdXRSZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbkRlbGl2ZXJzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dFJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dFJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dFJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0UmVxdWVzdHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0Rm9yd0RhdGFncmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENPdXRUcmFuc21pdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0Rm9yd0RhdGFncmFtcyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dFRyYW5zbWl0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRUcmFuc21pdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0T2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dFRyYW5zbWl0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUT0NURVRTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dE9jdGV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRPY3RldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5NY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0T2N0ZXRzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ0luTWNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luTWNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luTWNhc3RQa3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5NY2FzdFBrdHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5NY2FzdE9jdGV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENPdXRNY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5NY2FzdE9jdGV0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dE1jYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRNY2FzdFBrdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0TWNhc3RQa3RzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dE1jYXN0T2N0ZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ0luQmNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dE1jYXN0T2N0ZXRzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkJDQVNUUEtUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ0luQmNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luQmNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luQmNhc3RQa3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ091dEJjYXN0UGt0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbkJjYXN0UGt0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUQkNBU1RQS1RTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEJjYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRCY2FzdFBrdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRCY2FzdFBrdHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIGlmIHdlJ3ZlIGRlY2lkZWQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY2hlY2sgd3JhcHMsIGZyZWUgb2xkIHN0YXRzCiAgICAgICovCiAgICAgaWYgKDAgPT0gbmVlZF93cmFwX2NoZWNrKSB7CiAgICAgICAgIFNOTVBfRlJFRShwcmV2X3ZhbHMtPm9sZF9zdGF0cyk7Ci0gICAgfQotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIHVwZGF0ZSBvbGQgc3RhdHMgZnJvbSBuZXcgc3RhdHMuCiAgICAgICAgICAqIGNhcmVmdWwgLSBvbGRfc3RhdHMgaXMgYSBwb2ludGVyIHRvIHN0YXRzLi4uCiAgICAgICAgICAqLwogICAgICAgICBtZW1jcHkocHJldl92YWxzLT5vbGRfc3RhdHMsICZuZXdfdmFscy0+c3RhdHMsIHNpemVvZihuZXdfdmFscy0+c3RhdHMpKTsKICAgICB9CisKKyAgICBfY2FsY3VsYXRlX2VudHJpZXMocHJldl92YWxzKTsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0zNjgsNyArNTc5LDggQEAKICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwgImNvcHlcbiIpKTsKICAgICAKICAgICBpZiAoKE5VTEwgPT0gbGhzKSB8fCAoTlVMTCA9PSByaHMpIHx8Ci0gICAgICAgIChsaHMtPm5zX2lwX3ZlcnNpb24gIT0gcmhzLT5uc19pcF92ZXJzaW9uKSkKKyAgICAgICAgKGxocy0+aW5kZXhbMF0gIT0gcmhzLT5pbmRleFswXSkKKyAgICAgICAgfHwgKGxocy0+aW5kZXhbMV0gIT0gcmhzLT5pbmRleFsxXSkpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCmluZGV4IDNlMGZkODcuLjRhMjZlNDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKiAgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZCBpcElmU3RhdHNUYWJsZSBpbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CiAgKgogICogJElkJAogICovCkBAIC0xMCwxMiArMTAsMjAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaD4KIAorI2luY2x1ZGUgIi4uL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKIHN0YXRpYyBpbnQgX3N5c3RlbXN0YXRzX3Y0KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpOworc3RhdGljIGludCBfYWRkaXRpb25hbF9zeXN0ZW1zdGF0c192NChuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5KiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyk7CisKICNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQogc3RhdGljIGludCBfc3lzdGVtc3RhdHNfdjYobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncyk7CiAjZW5kaWYKIAotCiB2b2lkCiBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19hcmNoX2luaXQodm9pZCkKIHsKQEAgLTYyLDcgKzcwLDcgQEAKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19zeXN0ZW1zdGF0c19cbiIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotCisgICAgCiAgICAgLyoKICAgICAgKiBsb2FkIHY0IGFuZCB2NiBzdGF0cy4gRXZlbiBpZiBvbmUgZmFpbHMsIHRyeSB0aGUgb3RoZXIuCiAgICAgICogSWYgdGhleSBoYXZlIHRoZSBzYW1lIHJjLCByZXR1cm4gaXQuIGlmIHRoZSBkaWZmZXIsIHJldHVybgpAQCAtODEsNiArODksOSBAQAogI2VuZGlmCiB9CiAKKy8qCisgKiBCYXNlZCBvbiBsb2FkX2ZsYWdzLCBsb2FkIGlwU3lzdGVtU3RhdHNUYWJsZSBvciBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NCBlbnRyaWVzLiAKKyAqLwogc3RhdGljIGludAogX3N5c3RlbXN0YXRzX3Y0KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCiB7CkBAIC05MiwxNSArMTAzLDIwIEBACiAgICAgaW50ICAgICAgICAgICAgIGxlbjsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2Nhbl92YWxzWzE5XTsKIAotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NCAoZmxhZ3MgJXApXG4iLAorICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NCAoZmxhZ3MgJXgpXG4iLAogICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MpKTsKIAogICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLwogCisgICAgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX0lGVEFCTEUpIHsKKyAgICAgICAgLyogd2UgZG8gbm90IHN1cHBvcnQgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKCEoZGV2aW4gPSBmb3BlbigiL3Byb2MvbmV0L3NubXAiLCAiciIpKSkgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwKICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBsb2FkIFN5c3RlbXN0YXRzIFRhYmxlIChsaW51eDEpXG4iKSk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvc25tcCAuLi5cbiIpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvc25tcCAuLi5cbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KIApAQCAtMTQ0LDcgKzE2MCw4IEBACiAgICAgICAgIHdoaWxlICgqc3RhdHMgPT0gJyAnKSAvKiBza2lwIHNwYWNlcyBiZWZvcmUgc3RhdHMgKi8KICAgICAgICAgICAgIHN0YXRzKys7CiAKLSAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMSk7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDEsIDAsCisgICAgICAgICAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUuaXB2NCIpOwogICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CiAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShjb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19GUkVFX05PRkxBR1MpOwpAQCAtMTg1LDIzICsyMDIsNTQgQEAKICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoID0gc2Nhbl92YWxzWzJdID4+IDMyOwogICAgICAgICBlbnRyeS0+c3RhdHMuSW5IZHJFcnJvcnMgPSBzY2FuX3ZhbHNbM107CiAgICAgICAgIGVudHJ5LT5zdGF0cy5JbkFkZHJFcnJvcnMgPSBzY2FuX3ZhbHNbNF07Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5sb3cgPSBzY2FuX3ZhbHNbNV0gJiAweGZmZmZmZmZmOwotICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMuaGlnaCA9IHNjYW5fdmFsc1s1XSA+PiAzMjsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3cgPSBzY2FuX3ZhbHNbNV0gJiAweGZmZmZmZmZmOworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSBzY2FuX3ZhbHNbNV0gPj4gMzI7CiAgICAgICAgIGVudHJ5LT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBzY2FuX3ZhbHNbNl07CiAgICAgICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gc2Nhbl92YWxzWzddOwogICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdyA9IHNjYW5fdmFsc1s4XSAmIDB4ZmZmZmZmZmY7CiAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaCA9IHNjYW5fdmFsc1s4XSA+PiAzMjsKICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gc2Nhbl92YWxzWzldICYgMHhmZmZmZmZmZjsKICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaCA9IHNjYW5fdmFsc1s5XSA+PiAzMjsKLSAgICAgICAgZW50cnktPnN0YXRzLk91dERpc2NhcmRzID0gc2Nhbl92YWxzWzEwXTsKLSAgICAgICAgZW50cnktPnN0YXRzLk91dE5vUm91dGVzID0gc2Nhbl92YWxzWzExXTsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gc2Nhbl92YWxzWzEwXSAmIDB4ZmZmZmZmZmY7OworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5oaWdoID0gc2Nhbl92YWxzWzEwXSA+PiAzMjsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gc2Nhbl92YWxzWzExXSAmIDB4ZmZmZmZmZmY7OworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5oaWdoID0gc2Nhbl92YWxzWzExXSA+PiAzMjsKICAgICAgICAgLyogZW50cnktPnN0YXRzLiA9IHNjYW5fdmFsc1sxMl07IC8gKiBSZWFzbVRpbWVvdXQgKi8KICAgICAgICAgZW50cnktPnN0YXRzLlJlYXNtUmVxZHMgPSBzY2FuX3ZhbHNbMTNdOwogICAgICAgICBlbnRyeS0+c3RhdHMuUmVhc21PS3MgPSBzY2FuX3ZhbHNbMTRdOwogICAgICAgICBlbnRyeS0+c3RhdHMuUmVhc21GYWlscyA9IHNjYW5fdmFsc1sxNV07Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5PdXRGcmFnT0tzID0gc2Nhbl92YWxzWzE2XTsKLSAgICAgICAgZW50cnktPnN0YXRzLk91dEZyYWdGYWlscyA9IHNjYW5fdmFsc1sxN107Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5PdXRGcmFnQ3JlYXRlcyA9IHNjYW5fdmFsc1sxOF07CisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdPS3MubG93ID0gc2Nhbl92YWxzWzE2XSAmIDB4ZmZmZmZmZmY7OworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBzY2FuX3ZhbHNbMTZdID4+IDMyOworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gc2Nhbl92YWxzWzE3XSAmIDB4ZmZmZmZmZmY7OworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMuaGlnaCA9IHNjYW5fdmFsc1sxN10gPj4gMzI7CisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdyA9IHNjYW5fdmFsc1sxOF0gJiAweGZmZmZmZmZmOzsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IHNjYW5fdmFsc1sxOF0gPj4gMzI7CisKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHT0tTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfRElTQ09OVElOVUlUWVRJTUVdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURV0gPSAxOworCisgICAgICAgIC8qCisgICAgICAgICAqIGxvYWQgYWRkdGlvbmFsIHN0YXRpc3RpY3MgZGVmaW5lZCBieSBSRkMgNDI5MworICAgICAgICAgKiBBcyB0aGVzZSBhcmUgc3VwcG9ydGVkIGxpbnV4IDIuNi4yMiBvciBsYXRlciwgaXQgaXMgbm8gcHJvYmxlbQorICAgICAgICAgKiBpZiBsb2FkaW5nIHRoZW0gYXJlIGZhaWxlZC4KKyAgICAgICAgICovCisgICAgICAgIF9hZGRpdGlvbmFsX3N5c3RlbXN0YXRzX3Y0KGVudHJ5LCBsb2FkX2ZsYWdzKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBhZGQgdG8gY29udGFpbmVyCkBAIC0yMTYsNDggKzI2NCwxMjIgQEAKICAgICByZXR1cm4gMDsKIH0KICAgICAKLSNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorI2RlZmluZSBJUF9FWFRfSEVBRCAiSXBFeHQ6Igogc3RhdGljIGludAotX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCitfYWRkaXRpb25hbF9zeXN0ZW1zdGF0c192NChuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5KiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCiB7CiAgICAgRklMRSAgICAgICAgICAgKmRldmluOwogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOwotICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAqc3RhdHMsICpzdGFydCA9IGxpbmU7Ci0gICAgaW50ICAgICAgICAgICAgIGxlbiwgcmM7Ci0gICAgdWludG1heF90ICAgICAgIHNjYW5fdmFsOwotICAgIGNvbnN0IGNoYXIgICAgICpmaWxlbmFtZSA9ICIvcHJvYy9uZXQvc25tcDYiOwotICAgIHN0YXRpYyBpbnQgICAgICB3YXJuZWRfb3BlbiA9IDA7CisgICAgaW50ICAgICAgICAgICAgIHNjYW5fY291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNjYW5fdmFsc1sxMl07CisgICAgaW50ICAgICAgICAgICAgIHJldHZhbCA9IDA7CiAKLSAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmNvbnRhaW5lcjphcmNoIiwgImxvYWQgdjYgKGZsYWdzICV1KVxuIiwKLSAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzKSk7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgImxvYWQgYWRkdGlvbmFsIHY0IChmbGFncyAldSlcbiIsIGxvYWRfZmxhZ3MpKTsKIAotICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLwotCi0gICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMik7Ci0gICAgaWYoTlVMTCA9PSBlbnRyeSkKLSAgICAgICAgcmV0dXJuIC0zOwotICAgIAotICAgIC8qCi0gICAgICogdHJ5IHRvIG9wZW4gZmlsZS4gSWYgd2UgY2FuJ3QsIHRoYXQncyBvayAtIG1heWJlIHRoZSBtb2R1bGUgaGFzbid0Ci0gICAgICogYmVlbiBsb2FkZWQgeWV0LgotICAgICAqLwotICAgIGlmICghKGRldmluID0gZm9wZW4oZmlsZW5hbWUsICJyIikpKSB7CisgICAgaWYgKCEoZGV2aW4gPSBmb3BlbigiL3Byb2MvbmV0L25ldHN0YXQiLCAiciIpKSkgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwKLSAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBsb2FkIFN5c3RlbXN0YXRzIFRhYmxlIChsaW51eDEpXG4iKSk7Ci0gICAgICAgIGlmKCF3YXJuZWRfb3BlbikgewotICAgICAgICAgICAgKyt3YXJuZWRfb3BlbjsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAlcyAuLi5cbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBmcmVlKGVudHJ5KTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvbmV0c3RhdFxuIikpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsImNhbm5vdCBvcGVuIC9wcm9jL25ldC9uZXRzdGF0XG4iKSk7CisgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKICAgICAvKgotICAgICAqIFRoaXMgZmlsZSBwcm92aWRlcyB0aGUgc3RhdGlzdGljcyBmb3IgZWFjaCBzeXN0ZW1zdGF0cy4KKyAgICAgKiBHZXQgaGVhZGVyIGFuZCBzdGF0IGxpbmVzCisgICAgICovCisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZGV2aW4pKSB7CisgICAgICAgIGlmIChzdHJuY21wKElQX0VYVF9IRUFELCBsaW5lLCBzaXplb2YoSVBfRVhUX0hFQUQpIC0gMSkgPT0gMCkgeworICAgICAgICAgICAgLyogbmV4dCBsaW5lIHNob3VsZCBpbmNsdWRlcyBJUHY0IGFkZHRpb25hbCBzdGF0aXN0aWNzICovCisgICAgICAgICAgICBpZiAoKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZGV2aW4pKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gLTQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RybmNtcChJUF9FWFRfSEVBRCwgbGluZSwgc2l6ZW9mKElQX0VYVF9IRUFEKSAtIDEpICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSAtNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWVtc2V0KHNjYW5fdmFscywgMHgwLCBzaXplb2Yoc2Nhbl92YWxzKSk7CisgICAgICAgICAgICBzY2FuX2NvdW50ID0gc3NjYW5mKGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlKnMiICAgLyogaWdub3JlIGBJcEV4dDonICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX3ZhbHNbMF0sICZzY2FuX3ZhbHNbMV0sICZzY2FuX3ZhbHNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX3ZhbHNbM10sICZzY2FuX3ZhbHNbNF0sICZzY2FuX3ZhbHNbNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX3ZhbHNbNl0sICZzY2FuX3ZhbHNbN10sICZzY2FuX3ZhbHNbOF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX3ZhbHNbOV0sICZzY2FuX3ZhbHNbMTBdLCAmc2Nhbl92YWxzWzExXSk7CisgICAgICAgICAgICBpZiAoc2Nhbl9jb3VudCA8IDYpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHNjYW5uaW5nIGFkZHRpb25hbCBzeXN0ZW1zdGF0cyBkYXRhIgorICAgICAgICAgICAgICAgICAgICAgICAgIihtaW5pbXVtIGV4cGVjdGVkICVkLCBnb3QgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgNiwgc2Nhbl9jb3VudCk7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gLTQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTm9Sb3V0ZXMubG93ICAgID0gc2Nhbl92YWxzWzBdICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTm9Sb3V0ZXMuaGlnaCAgID0gc2Nhbl92YWxzWzBdID4+IDMyOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkluVHJ1bmNhdGVkUGt0cyAgICAgPSBzY2FuX3ZhbHNbMV07CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3cgICA9IHNjYW5fdmFsc1syXSAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0UGt0cy5oaWdoICA9IHNjYW5fdmFsc1syXSA+PiAzMjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgID0gc2Nhbl92YWxzWzNdICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5oaWdoID0gc2Nhbl92YWxzWzNdID4+IDMyOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93ICAgPSBzY2FuX3ZhbHNbNF0gJiAweGZmZmZmZmZmOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5CY2FzdFBrdHMuaGlnaCAgPSBzY2FuX3ZhbHNbNF0gPj4gMzI7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRCY2FzdFBrdHMubG93ICA9IHNjYW5fdmFsc1s1XSAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRCY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsc1s1XSA+PiAzMjsKKworICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdID0gMTsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5UUlVOQ0FURURQS1RTXSA9IDE7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkJDQVNUUEtUU10gPSAxOworICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10gPSAxOworCSAgICBpZiAoc2Nhbl9jb3VudCA+PSAxMikgeworCQllbnRyeS0+c3RhdHMuSENJbk9jdGV0cy5sb3cgICAgICAgID0gc2Nhbl92YWxzWzZdICYgMHhmZmZmZmZmZjsKKwkJZW50cnktPnN0YXRzLkhDSW5PY3RldHMuaGlnaCAgICAgICA9IHNjYW5fdmFsc1s2XSA+PiAzMjsKKwkJZW50cnktPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdyAgICAgICA9IHNjYW5fdmFsc1s3XSAmIDB4ZmZmZmZmZmY7CisJCWVudHJ5LT5zdGF0cy5IQ091dE9jdGV0cy5oaWdoICAgICAgPSBzY2FuX3ZhbHNbN10gPj4gMzI7CisJCWVudHJ5LT5zdGF0cy5IQ0luTWNhc3RPY3RldHMubG93ICAgPSBzY2FuX3ZhbHNbOF0gJiAweGZmZmZmZmZmOworCQllbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmhpZ2ggID0gc2Nhbl92YWxzWzhdID4+IDMyOworCQllbnRyeS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3cgID0gc2Nhbl92YWxzWzldICYgMHhmZmZmZmZmZjsKKwkJZW50cnktPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMuaGlnaCA9IHNjYW5fdmFsc1s5XSA+PiAzMjsKKwkJLyogMTAgYW5kIDExIGFyZSBJbi9PdXRCY2FzdE9jdGV0cyAqLworCQllbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdID0gMTsKKwkJZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10gPSAxOworCQllbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVE9DVEVUU10gPSAxOworCQllbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RPQ1RFVFNdID0gMTsKKwkgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZmNsb3NlKGRldmluKTsKKworICAgIGlmIChyZXR2YWwgPCAwKQorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgIi9wcm9jL25ldC9uZXRzdGF0IGRvZXMgbm90IGluY2x1ZGUgYWRkdGlvbmFsIHN0YXRzXG4iKSk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorICAgCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKworLyoKKyAqIExvYWQgb25lIC9wcm9jL25ldC9zbm1wNiAtIGxpa2UgZmlsZSAoZS5nLiAvcHJvYy9uZXQvZGV2X3NubXA2KQorICovIAorc3RhdGljIGludCAKK19zeXN0ZW1zdGF0c192Nl9sb2FkX2ZpbGUobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnksIEZJTEUgKmRldmluKQoreworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIGNoYXIgICAgICAgICAgICpzdGF0cywgKnN0YXJ0ID0gbGluZTsKKyAgICBpbnQgICAgICAgICAgICAgbGVuLCByYzsKKyAgICB1aW50bWF4X3QgICAgICAgc2Nhbl92YWw7CisKKyAgICAvKgogICAgICAqIFJlYWQgaW4gZWFjaCBsaW5lIGluIHR1cm4sIGlzb2xhdGUgdGhlIHN5c3RlbXN0YXRzIG5hbWUKICAgICAgKiAgIGFuZCByZXRyaWV2ZSAob3IgY3JlYXRlKSB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHN0cnVjdHVyZS4KICAgICAgKi8KKyAgICByYyA9IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgc3RhcnQgPSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGRldmluKTsKICAgICAgICAgaWYgKE5VTEwgPT0gc3RhcnQpCkBAIC0yODcsNzcgKzQwOSwxMjMgQEAKICAgICAgICAgICogICAgICBkYXRhIHN0cnVjdHVyZSBhY2NvcmRpbmdseS4KICAgICAgICAgICovCiAgICAgICAgIHNjYW5fdmFsID0gYXRvbGwoc3RhdHMpOwotICAgICAgICBpZiAoMCA9PSBzY2FuX3ZhbCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHJjID0gMDsKICAgICAgICAgaWYgKCdJJyA9PSBsaW5lWzNdKSB7IC8qIEluICovCiAgICAgICAgICAgICBpZiAoJ0EnID09IGxpbmVbNV0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSW5BZGRyRXJyb3JzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ0QnID09IGxpbmVbNV0pIHsKICAgICAgICAgICAgICAgICBpZiAoJ2UnID09IGxpbmVbNl0pIHsKICAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5sb3cgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdpJyA9PSBsaW5lWzZdKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10gPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2knID09IGxpbmVbNl0pIHsKICAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkluRGlzY2FyZHMgPSBzY2FuX3ZhbDsKLSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEU10gPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdIJyA9PSBsaW5lWzVdKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkluSGRyRXJyb3JzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnTScgPT0gbGluZVs1XSkgewotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgIGlmICgnUCcgPT0gbGluZVsxMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMubG93ID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzEwXSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RPY3RldHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVE9DVEVUU10gPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdOJyA9PSBsaW5lWzVdKSB7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkluTm9Sb3V0ZXMgPSBzY2FuX3ZhbDsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5OT1JPVVRFU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnUicgPT0gbGluZVs1XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdUJyA9PSBsaW5lWzVdKSB7CiAgICAgICAgICAgICAgICAgaWYgKCdyJyA9PSBsaW5lWzZdKSB7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5JblRydW5jYXRlZFBrdHMgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVFJVTkNBVEVEUEtUU10gPSAxOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ28nID09IGxpbmVbNl0pCiAgICAgICAgICAgICAgICAgICAgIDsgLyogVG9vQmlnIGlzbid0IGluIHRoZSBNSUIsIHNvIGlnbm9yZSBpdCAqLwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnVScgPT0gbGluZVs1XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBzY2FuX3ZhbDsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10gPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICgnTycgPT0gbGluZVs1XSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luT2N0ZXRzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk9jdGV0cy5oaWdoID0gc2Nhbl92YWwgID4+IDMyOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk9DVEVUU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzNdKSB7IC8qIE91dCAqLwogICAgICAgICAgICAgaWYgKCdEJyA9PSBsaW5lWzZdKSB7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dERpc2NhcmRzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ0YnID09IGxpbmVbNl0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnTScgPT0gbGluZVs2XSkgewotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBpZiAoJ1AnID09IGxpbmVbMTFdKSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzExXSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdOJyA9PSBsaW5lWzZdKSB7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dE5vUm91dGVzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ1InID09IGxpbmVbNl0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10gPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICgnTycgPT0gbGluZVs2XSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUT0NURVRTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoJ1InID09IGxpbmVbM10pIHsgLyogUmVhc20gKi8KICAgICAgICAgICAgIGlmICgnRicgPT0gbGluZVs4XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5SZWFzbUZhaWxzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzhdKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLlJlYXNtT0tzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnUicgPT0gbGluZVs4XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdUJyA9PSBsaW5lWzhdKSB7CiAgICAgICAgICAgICAgICAgOyAvKiBubyBtaWIgZW50cnkgZm9yIHJlYXNtIHRpbWVvdXQgKi8KICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJjID0gMTsKICAgICAgICAgfSBlbHNlIGlmICgnRicgPT0gbGluZVszXSkgeyAvKiBGcmFnICovCi0gICAgICAgICAgICBpZiAoJ0MnID09IGxpbmVbN10pCi0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dEZyYWdDcmVhdGVzID0gc2Nhbl92YWw7Ci0gICAgICAgICAgICBlbHNlIGlmICgnTycgPT0gbGluZVs3XSkKLSAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuT3V0RnJhZ09LcyA9IHNjYW5fdmFsOwotICAgICAgICAgICAgZWxzZSBpZiAoJ0YnID09IGxpbmVbN10pCi0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dEZyYWdGYWlscyA9IHNjYW5fdmFsOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCdDJyA9PSBsaW5lWzddKSB7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJ08nID09IGxpbmVbN10pIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICgnRicgPT0gbGluZVs3XSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSA9IDE7CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmMgPSAxOwpAQCAtMzY1LDYgKzUzMyw0MyBAQAogICAgICAgICBpZiAocmMpCiAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwgInVua25vd24gc3RhdCAlc1xuIiwgbGluZSkpOwogICAgIH0KKyAgICAvKgorICAgICAqIExldCBEaXNjb250aW51aXR5VGltZSBhbmQgUmVmcmVzaFJhdGUgYWN0aXZlCisgICAgICovCisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdID0gMTsKKworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIGxvYWQgaXBTeXN0ZW1TdGF0c1RhYmxlIGZvciBpcHY2IGVudHJpZXMKKyAqLworc3RhdGljIGludCAKK19zeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgRklMRSAqZGV2aW47CisgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnkgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgICAgICpmaWxlbmFtZSA9ICIvcHJvYy9uZXQvc25tcDYiOworICAgIGludCByYyA9IDA7CisgICAgCisgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMiwgMCwKKyAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUuaXB2NiIpOworICAgIGlmKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMzsKKyAgICAKKyAgICAvKgorICAgICAqIHRyeSB0byBvcGVuIGZpbGUuIElmIHdlIGNhbid0LCB0aGF0J3Mgb2sgLSBtYXliZSB0aGUgbW9kdWxlIGhhc24ndAorICAgICAqIGJlZW4gbG9hZGVkIHlldC4KKyAgICAgKi8KKyAgICBpZiAoIShkZXZpbiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwKKyAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGxvYWQgU3lzdGVtc3RhdHMgVGFibGUgKGxpbnV4MSksIGNhbm5vdCBvcGVuICVzXG4iLAorICAgICAgICAgICAgICAgIGZpbGVuYW1lKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByYyA9IF9zeXN0ZW1zdGF0c192Nl9sb2FkX2ZpbGUoZW50cnksIGRldmluKTsKIAogICAgIGZjbG9zZShkZXZpbik7CiAKQEAgLTM4MCw0ICs1ODUsMTE4IEBACiAKICAgICByZXR1cm4gcmM7CiB9CisKKyNkZWZpbmUgREVWX1NOTVA2X0RJUk5BTUUgICAiL3Byb2MvbmV0L2Rldl9zbm1wNiIKKyNkZWZpbmUgSUZJTkRFWF9MSU5FICAgICAgICAiaWZJbmRleCIKKyNkZWZpbmUgREVWX0ZJTEVOQU1FX0xFTiAgICA2NAorCisvKgorICogbG9hZCBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NiBlbnRyaWVzCisgKi8KK3N0YXRpYyBpbnQgCitfc3lzdGVtc3RhdHNfdjZfbG9hZF9pZnN0YXRzKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgRElSICAgICAgICAgICAgKmRldl9zbm1wNl9kaXI7CisgICAgc3RydWN0IGRpcmVudCAgKmRldl9zbm1wNl9lbnRyeTsKKyAgICBjaGFyICAgICAgICAgICBkZXZfZmlsZW5hbWVbREVWX0ZJTEVOQU1FX0xFTl07CisgICAgRklMRSAgICAgICAgICAgKmRldmluOworICAgIGNoYXIgICAgICAgICAgIGxpbmVbMTAyNF07CisgICAgY2hhciAgICAgICAgICAgKnN0YXJ0ID0gbGluZTsKKyAgICBjaGFyICAgICAgICAgICAqc2Nhbl9zdHI7CisgICAgdWludG1heF90ICAgICAgIHNjYW5fdmFsOworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICAgICAgICAgIAorICAgIC8qCisgICAgICogdHJ5IHRvIG9wZW4gL3Byb2MvbmV0L2Rldl9zbm1wNiBkaXJlY3RvcnkuIElmIHdlIGNhbid0LCB0aGF0JyBvayAtCisgICAgICogbWF5YmUgaXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBydW5uaW5nIGtlcm5lbC4KKyAgICAgKi8KKyAgICBpZiAoKGRldl9zbm1wNl9kaXIgPSBvcGVuZGlyKERFVl9TTk1QNl9ESVJOQU1FKSkgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlmc3RhdHMiLAorICAgICAgICAiRmFpbGVkIHRvIGxvYWQgSVB2NiBJZlN0YXRzIFRhYmxlIChsaW51eClcbiIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIC8qCisgICAgICogUmVhZCBlYWNoIHBlciBpbnRlcmZhY2Ugc3RhdGlzdGljcyBwcm9jIGZpbGUKKyAgICAgKi8KKyAgICB3aGlsZSAoKGRldl9zbm1wNl9lbnRyeSA9IHJlYWRkaXIoZGV2X3NubXA2X2RpcikpICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lWzBdID09ICcuJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICBpZiAoc25wcmludGYoZGV2X2ZpbGVuYW1lLCBERVZfRklMRU5BTUVfTEVOLCAiJXMvJXMiLCBERVZfU05NUDZfRElSTkFNRSwKKyAgICAgICAgICAgICAgICBkZXZfc25tcDZfZW50cnktPmRfbmFtZSkgPiBERVZfRklMRU5BTUVfTEVOKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiSW50ZXJmYWNlIG5hbWUgJXMgaXMgdG9vIGxvbmdcbiIsCisgICAgICAgICAgICAgICAgICAgIGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChOVUxMID09IChkZXZpbiA9IGZvcGVuKGRldl9maWxlbmFtZSwgInIiKSkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJGYWlsZWQgdG8gb3BlbiAlc1xuIiwgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIElmIGEgc3RhdCBmaWxlIG5hbWUgaXMgbWFkZSBvZiBkaWdpdHMsIHRoZSBuYW1lIGlzIGludGVyZmFjZSBpbmRleC4KKyAgICAgICAgICogSWYgaXQgaXMgYW4gaW50ZXJmYWNlIG5hbWUsIHRoZSBmaWxlIGluY2x1ZGVzIGEgbGluZSBsYWJlbGVkIGlmSW5kZXguCisgICAgICAgICAqLworICAgICAgICBpZiAoaXNkaWdpdChkZXZfc25tcDZfZW50cnktPmRfbmFtZVswXSkpIHsKKyAgICAgICAgICAgIHNjYW5fdmFsID0gc3RydG91bGwoZGV2X3NubXA2X2VudHJ5LT5kX25hbWUsIE5VTEwsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKE5VTEwgPT0gKHN0YXJ0ID0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBkZXZpbikpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGRvZXNuJ3QgaW5jbHVkZSBhbnkgbGluZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBpZiAoMCAhPSBzdHJuY21wKHN0YXJ0LCBJRklOREVYX0xJTkUsIDcpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGRvZXNuJ3QgaW5jbHVkZSBpZkluZGV4IGxpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzY2FuX3N0ciA9IHN0cnJjaHIobGluZSwgJyAnKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHNjYW5fc3RyKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGlzIHdyb25nIGZvcm1hdCIsIGRldl9maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjYW5fdmFsID0gc3RydG91bGwoc2Nhbl9zdHIsIE5VTEwsIDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZSgyLCBzY2FuX3ZhbCwKKyAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGUuaXB2NiIpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgY2xvc2VkaXIoZGV2X3NubXA2X2Rpcik7CisgICAgICAgICAgICByZXR1cm4gLTM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIF9zeXN0ZW1zdGF0c192Nl9sb2FkX2ZpbGUoZW50cnksIGRldmluKTsKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGV2X3NubXA2X2Rpcik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBCYXNlZCBvbiBsb2FkX2ZsYWdzLCBsb2FkIGlwU3lzdGVtU3RhdHNUYWJsZSBvciBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NiBlbnRyaWVzLiAKKyAqLworc3RhdGljIGludAorX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY2IChmbGFncyAldSlcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkgeworICAgICAgICAvKiBsb2FkIGlwSWZTdGF0c1RhYmxlICovCisgICAgICAgIHJldHVybiBfc3lzdGVtc3RhdHNfdjZfbG9hZF9pZnN0YXRzKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgKi8KKyAgICAgICAgcmV0dXJuIF9zeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgfQorfQogI2VuZGlmIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlYzQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jCkBAIC0wLDAgKzEsMjEzIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg+CisKKyNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisKK3N0YXRpYyBpbnQgX3N5c3RlbXN0YXRzKG1pYmdyb3VwX2UsIG5ldHNubXBfY29udGFpbmVyICosIHVfaW50KTsKK3N0YXRpYyB2b2lkIF9hZGRfaXBzdGF0cyhtaWIyX2lwSWZTdGF0c0VudHJ5X3QgKiwgbWliMl9pcElmU3RhdHNFbnRyeV90ICopOworc3RhdGljIGludCBfaW5zZXJ0X2VudHJ5KG5ldHNubXBfY29udGFpbmVyICosIG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqKTsKKwordm9pZAorbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfYXJjaF9pbml0KHZvaWQpCit7CisgICAgaW5pdF9rZXJuZWxfc3Vub3M1KCk7Cit9CisKKy8qCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgY29udGFpbmVyIGVycm9yCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBjcmVhdGUgZW50cnkgKHByb2JhYmx5IG1hbGxvYykKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzsgCisgICAgCisgICAgaWYgKGNvbnRhaW5lciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKC0xKTsKKworICAgIGlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfTE9BRF9JRlRBQkxFKQorCXJldHVybiAwOyAvKiB3ZSBkbyBub3Qgc3VwcG9ydCBpcElmU3RhdHNUYWJsZSB5ZXQgKi8KKworICAgIGlmICgocmMgPSBfc3lzdGVtc3RhdHMoTUlCX0lQX1RSQUZGSUNfU1RBVFMsIGNvbnRhaW5lciwgbG9hZF9mbGFncykpIDwgMCkKKyAgICAgICAgcmV0dXJuIChyYyk7CisjaWYgZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgIGlmICgocmMgPSBfc3lzdGVtc3RhdHMoTUlCX0lQNiwgY29udGFpbmVyLCBsb2FkX2ZsYWdzKSkgPCAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShjb250YWluZXIsCisgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9OT0ZMQUdTKTsKKyAgICAgICAgcmV0dXJuIChyYyk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEByZXR2YWwgMCBzdWNjZXNzIAorICogQHJldHZhbCA8MCBlcnJvcgorICovCitzdGF0aWMgaW50Citfc3lzdGVtc3RhdHMobWliZ3JvdXBfZSBtaWIsIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgbWliMl9pcElmU3RhdHNFbnRyeV90IGlwZSwgaXB0b3Q7CisgICAgcmVxX2UgcmVxID0gR0VUX0ZJUlNUOworICAgIGludCBpcHZlcnNpb24gPSAobWliID09IE1JQl9JUDYpID8gTUlCMl9JTkVUQUREUkVTU1RZUEVfaXB2NiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSUIyX0lORVRBRERSRVNTVFlQRV9pcHY0OworICAgIG1lbXNldCgmaXB0b3QsICdcMCcsIHNpemVvZihpcHRvdCkpOworCisgICAgd2hpbGUgKGdldE1pYnN0YXQobWliLCAmaXBlLCBzaXplb2YoaXBlKSwgcmVxLCAKKyAgICAgICAgICAgICAgICAgICAgICAmR2V0X2V2ZXJ5dGhpbmcsIE5VTEwpID09IDApIHsgCisgICAgICAgIHJlcSA9IEdFVF9ORVhUOworICAgICAgICBuZXRzbm1wX2Fzc2VydChpcGUuaXBJZlN0YXRzSVBWZXJzaW9uID09IGlwdmVyc2lvbik7CisgICAgICAgIF9hZGRfaXBzdGF0cygmaXB0b3QsICZpcGUpOworICAgIH0KKyAgICBpcHRvdC5pcElmU3RhdHNJUFZlcnNpb24gPSBpcHZlcnNpb247CisgICAgcmV0dXJuIF9pbnNlcnRfZW50cnkoY29udGFpbmVyLCAmaXB0b3QpOworfQorCitzdGF0aWMgdm9pZAorX2FkZF9pcHN0YXRzKG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqbzEsIG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqbzIpCit7CisgICAgbzEtPmlwSWZTdGF0c0luSGRyRXJyb3JzICs9IG8yLT5pcElmU3RhdHNJbkhkckVycm9yczsKKyAgICBvMS0+aXBJZlN0YXRzSW5Ub29CaWdFcnJvcnMgKz0gbzItPmlwSWZTdGF0c0luVG9vQmlnRXJyb3JzOworICAgIG8xLT5pcElmU3RhdHNJbk5vUm91dGVzICs9IG8yLT5pcElmU3RhdHNJbk5vUm91dGVzOworICAgIG8xLT5pcElmU3RhdHNJbkFkZHJFcnJvcnMgKz0gbzItPmlwSWZTdGF0c0luQWRkckVycm9yczsKKyAgICBvMS0+aXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zICs9IG8yLT5pcElmU3RhdHNJblVua25vd25Qcm90b3M7CisgICAgbzEtPmlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0cyArPSBvMi0+aXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzOworICAgIG8xLT5pcElmU3RhdHNJbkRpc2NhcmRzICs9IG8yLT5pcElmU3RhdHNJbkRpc2NhcmRzOworICAgIG8xLT5pcElmU3RhdHNPdXREaXNjYXJkcyArPSBvMi0+aXBJZlN0YXRzT3V0RGlzY2FyZHM7CisgICAgbzEtPmlwSWZTdGF0c091dEZyYWdPS3MgKz0gbzItPmlwSWZTdGF0c091dEZyYWdPS3M7CisgICAgbzEtPmlwSWZTdGF0c091dEZyYWdGYWlscyArPSBvMi0+aXBJZlN0YXRzT3V0RnJhZ0ZhaWxzOworICAgIG8xLT5pcElmU3RhdHNPdXRGcmFnQ3JlYXRlcyArPSBvMi0+aXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXM7CisgICAgbzEtPmlwSWZTdGF0c1JlYXNtUmVxZHMgKz0gbzItPmlwSWZTdGF0c1JlYXNtUmVxZHM7CisgICAgbzEtPmlwSWZTdGF0c1JlYXNtT0tzICs9IG8yLT5pcElmU3RhdHNSZWFzbU9LczsKKyAgICBvMS0+aXBJZlN0YXRzUmVhc21GYWlscyArPSBvMi0+aXBJZlN0YXRzUmVhc21GYWlsczsKKyAgICBvMS0+aXBJZlN0YXRzT3V0Tm9Sb3V0ZXMgKz0gbzItPmlwSWZTdGF0c091dE5vUm91dGVzOworICAgIG8xLT5pcElmU3RhdHNSZWFzbUR1cGxpY2F0ZXMgKz0gbzItPmlwSWZTdGF0c1JlYXNtRHVwbGljYXRlczsKKyAgICBvMS0+aXBJZlN0YXRzUmVhc21QYXJ0RHVwcyArPSBvMi0+aXBJZlN0YXRzUmVhc21QYXJ0RHVwczsKKyAgICBvMS0+aXBJZlN0YXRzRm9yd1Byb2hpYml0cyArPSBvMi0+aXBJZlN0YXRzRm9yd1Byb2hpYml0czsKKyAgICBvMS0+dWRwSW5Da3N1bUVycnMgKz0gbzItPnVkcEluQ2tzdW1FcnJzOworICAgIG8xLT51ZHBJbk92ZXJmbG93cyArPSBvMi0+dWRwSW5PdmVyZmxvd3M7CisgICAgbzEtPnJhd2lwSW5PdmVyZmxvd3MgKz0gbzItPnJhd2lwSW5PdmVyZmxvd3M7CisgICAgbzEtPmlwSWZTdGF0c0luV3JvbmdJUFZlcnNpb24gKz0gbzItPmlwSWZTdGF0c0luV3JvbmdJUFZlcnNpb247CisgICAgbzEtPmlwSWZTdGF0c091dFdyb25nSVBWZXJzaW9uICs9IG8yLT5pcElmU3RhdHNPdXRXcm9uZ0lQVmVyc2lvbjsKKyAgICBvMS0+aXBJZlN0YXRzT3V0U3dpdGNoSVBWZXJzaW9uICs9IG8yLT5pcElmU3RhdHNPdXRTd2l0Y2hJUFZlcnNpb247CisgICAgbzEtPmlwSWZTdGF0c0hDSW5SZWNlaXZlcyArPSBvMi0+aXBJZlN0YXRzSENJblJlY2VpdmVzOworICAgIG8xLT5pcElmU3RhdHNIQ0luT2N0ZXRzICs9IG8yLT5pcElmU3RhdHNIQ0luT2N0ZXRzOworICAgIG8xLT5pcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyArPSBvMi0+aXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXM7CisgICAgbzEtPmlwSWZTdGF0c0hDSW5EZWxpdmVycyArPSBvMi0+aXBJZlN0YXRzSENJbkRlbGl2ZXJzOworICAgIG8xLT5pcElmU3RhdHNIQ091dFJlcXVlc3RzICs9IG8yLT5pcElmU3RhdHNIQ091dFJlcXVlc3RzOworICAgIG8xLT5pcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXMgKz0gbzItPmlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtczsKKyAgICBvMS0+aXBJZlN0YXRzT3V0RnJhZ1JlcWRzICs9IG8yLT5pcElmU3RhdHNPdXRGcmFnUmVxZHM7CisgICAgbzEtPmlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzICs9IG8yLT5pcElmU3RhdHNIQ091dFRyYW5zbWl0czsKKyAgICBvMS0+aXBJZlN0YXRzSENPdXRPY3RldHMgKz0gbzItPmlwSWZTdGF0c0hDT3V0T2N0ZXRzOworICAgIG8xLT5pcElmU3RhdHNIQ0luTWNhc3RQa3RzICs9IG8yLT5pcElmU3RhdHNIQ0luTWNhc3RQa3RzOworICAgIG8xLT5pcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgKz0gbzItPmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0czsKKyAgICBvMS0+aXBJZlN0YXRzSENPdXRNY2FzdFBrdHMgKz0gbzItPmlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzOworICAgIG8xLT5pcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzICs9IG8yLT5pcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzOworICAgIG8xLT5pcElmU3RhdHNIQ0luQmNhc3RQa3RzICs9IG8yLT5pcElmU3RhdHNIQ0luQmNhc3RQa3RzOworICAgIG8xLT5pcElmU3RhdHNIQ091dEJjYXN0UGt0cyArPSBvMi0+aXBJZlN0YXRzSENPdXRCY2FzdFBrdHM7CisgICAgbzEtPmlwc2VjSW5TdWNjZWVkZWQgKz0gbzItPmlwc2VjSW5TdWNjZWVkZWQ7CisgICAgbzEtPmlwc2VjSW5GYWlsZWQgKz0gbzItPmlwc2VjSW5GYWlsZWQ7CisgICAgbzEtPmlwSW5Da3N1bUVycnMgKz0gbzItPmlwSW5Da3N1bUVycnM7CisgICAgbzEtPnRjcEluRXJycyArPSBvMi0+dGNwSW5FcnJzOworICAgIG8xLT51ZHBOb1BvcnRzICs9IG8yLT51ZHBOb1BvcnRzOworfQorCisvKgorICogQHJldHZhbCAwIGVudHJ5IHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgaW4gdGhlIGNvbnRhaW5lciAKKyAqIEByZXR2YWwgLTEgY29udGFpbmVyIGVycm9yCisgKiBAcmV0dmFsIC0yIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgCitfaW5zZXJ0X2VudHJ5KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqaXBlKQoreworICAgIGludCBpOworICAgIAorICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVwID0KKyAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKGlwZS0+aXBJZlN0YXRzSVBWZXJzaW9uLCAwLAorICAgICAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUiKTsgCisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmFyY2giLCAiaW5zZXJ0IGVudHJ5IGZvciB2JWRcbiIsCisgICAgICAgICAgICAgICAgaXBlLT5pcElmU3RhdHNJUFZlcnNpb24pKTsgCisgICAgaWYgKGVwID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmFyY2giLCAiaW5zZXJ0IGZhaWxlZCAoYWxsb2MpIikpOworICAgICAgICByZXR1cm4gKC0yKTsKKyAgICB9CisKKyAgICBlcC0+c3RhdHMuSENJblJlY2VpdmVzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDSW5SZWNlaXZlcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoID0gaXBlLT5pcElmU3RhdHNIQ0luUmVjZWl2ZXMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDSW5PY3RldHMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENJbk9jdGV0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5PY3RldHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENJbk9jdGV0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSW5IZHJFcnJvcnMgPSBpcGUtPmlwSWZTdGF0c0luSGRyRXJyb3JzOworICAgIGVwLT5zdGF0cy5JbkFkZHJFcnJvcnMgPSBpcGUtPmlwSWZTdGF0c0luQWRkckVycm9yczsKKyAgICBlcC0+c3RhdHMuSW5Vbmtub3duUHJvdG9zID0gaXBlLT5pcElmU3RhdHNJblVua25vd25Qcm90b3M7CisgICAgZXAtPnN0YXRzLkluVHJ1bmNhdGVkUGt0cyA9IGlwZS0+aXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzOworICAgIGVwLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5sb3cgPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmhpZ2ggPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuUmVhc21SZXFkcyA9IGlwZS0+aXBJZlN0YXRzUmVhc21SZXFkczsgCisgICAgZXAtPnN0YXRzLlJlYXNtT0tzID0gaXBlLT5pcElmU3RhdHNSZWFzbU9LczsgCisgICAgZXAtPnN0YXRzLlJlYXNtRmFpbHMgPSBpcGUtPmlwSWZTdGF0c1JlYXNtRmFpbHM7IAorICAgIGVwLT5zdGF0cy5JbkRpc2NhcmRzID0gaXBlLT5pcElmU3RhdHNJbkRpc2NhcmRzOworICAgIGVwLT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENJbkRlbGl2ZXJzICYgMHhmZmZmZmZmZjsgCisgICAgZXAtPnN0YXRzLkhDSW5EZWxpdmVycy5oaWdoID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENJbkRlbGl2ZXJzID4+IDMyOyAKKyAgICBlcC0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ091dFJlcXVlc3RzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRSZXF1ZXN0cy5oaWdoID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRSZXF1ZXN0cyA+PiAzMjsgCisgICAgZXAtPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gaXBlLT5pcElmU3RhdHNPdXROb1JvdXRlcyAmIDB4ZmZmZmZmZmY7IAorICAgIGVwLT5zdGF0cy5IQ091dE5vUm91dGVzLmhpZ2ggPSAwOworICAgIGVwLT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gaXBlLT5pcElmU3RhdHNPdXREaXNjYXJkcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0RGlzY2FyZHMuaGlnaCA9IDA7IAorICAgIGVwLT5zdGF0cy5IQ091dEZyYWdPS3MubG93ID0gaXBlLT5pcElmU3RhdHNPdXRGcmFnT0tzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSAwOworICAgIGVwLT5zdGF0cy5IQ091dEZyYWdGYWlscy5sb3cgPSBpcGUtPmlwSWZTdGF0c091dEZyYWdGYWlscyAmIDB4ZmZmZmZmZmY7IAorICAgIGVwLT5zdGF0cy5IQ091dEZyYWdGYWlscy5oaWdoID0gMDsKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3cgPSBpcGUtPmlwSWZTdGF0c091dEZyYWdDcmVhdGVzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5oaWdoID0gMDsKKyAgICBlcC0+c3RhdHMuSENPdXRUcmFuc21pdHMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRUcmFuc21pdHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ091dFRyYW5zbWl0cy5oaWdoID0gaXBlLT5pcElmU3RhdHNIQ091dFRyYW5zbWl0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSENPdXRPY3RldHMubG93ID0gaXBlLT5pcElmU3RhdHNIQ091dE9jdGV0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0T2N0ZXRzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDT3V0T2N0ZXRzID4+IDMyOworICAgIGVwLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdyA9IGlwZS0+aXBJZlN0YXRzSENJbk1jYXN0UGt0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENJbk1jYXN0UGt0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5oaWdoID0gaXBlLT5pcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRNY2FzdFBrdHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENPdXRNY2FzdFBrdHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSENJbkJjYXN0UGt0cy5sb3cgPSBpcGUtPmlwSWZTdGF0c0hDSW5CY2FzdFBrdHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ0luQmNhc3RQa3RzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDSW5CY2FzdFBrdHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRCY2FzdFBrdHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENPdXRCY2FzdFBrdHMgPj4gMzI7CisKKyAgICBmb3IgKGk9MDsgaTw9SVBTWVNURU1TVEFUU1RBQkxFX0xBU1Q7IGkrKykKKyAgICAgICAgZXAtPnN0YXRzLmNvbHVtbkF2YWlsW2ldID0gMTsKKyAgICAKKyAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVwKSA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmFyY2giLCAidW5hYmxlIHRvIGluc2VydCBlbnRyeSIpKTsgCisgICAgICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoZXApOyAKKyAgICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICAgIHJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjYTE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zeXNjdGwuYwpAQCAtMCwwICsxLDc5MSBAQAorLyoKKyAqICBpcFN5c3RlbVN0YXRzVGFibGUgYW5kIGlwSWZTdGF0c1RhYmxlIGludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaD4KKworI2luY2x1ZGUgIi4uL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaCIKKworI2lmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCisjZGVmaW5lIF9LRVJORUwgMQorI2RlZmluZSBfSV9ERUZJTkVEX0tFUk5FTAorI2VuZGlmCisjaWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorCisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNpZiBIQVZFX05FVElORVQ2X0lQNl9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4KKyNlbmRpZgorI2lmbmRlZiBmcmVlYnNkNworI2luY2x1ZGUgPG5ldGluZXQ2L2luNl92YXIuaD4KKyNlbmRpZgorCisjaWZkZWYgZGFyd2luCisKKy8qIFRoaXMgc3RydWN0IGlzIGluIG5ldGluZXQ2L2lwNl92YXIuaCB3aGljaCBBcHBsZSBmb3Igb2JzY3VyZSByZWFzb25zCisgKiBkbyBub3QgZGlzdHJpYnV0ZSBhcyBwYXJ0IG9mIC91c3IvaW5jbHVkZSA6LSgKKyAqLworCitzdHJ1Y3QJaXA2c3RhdCB7CisJdV9xdWFkX3QgaXA2c190b3RhbDsJCS8qIHRvdGFsIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1X3F1YWRfdCBpcDZzX3Rvb3Nob3J0OwkJLyogcGFja2V0IHRvbyBzaG9ydCAqLworCXVfcXVhZF90IGlwNnNfdG9vc21hbGw7CQkvKiBub3QgZW5vdWdoIGRhdGEgKi8KKwl1X3F1YWRfdCBpcDZzX2ZyYWdtZW50czsJLyogZnJhZ21lbnRzIHJlY2VpdmVkICovCisJdV9xdWFkX3QgaXA2c19mcmFnZHJvcHBlZDsJLyogZnJhZ3MgZHJvcHBlZChkdXBzLCBvdXQgb2Ygc3BhY2UpICovCisJdV9xdWFkX3QgaXA2c19mcmFndGltZW91dDsJLyogZnJhZ21lbnRzIHRpbWVkIG91dCAqLworCXVfcXVhZF90IGlwNnNfZnJhZ292ZXJmbG93OwkvKiBmcmFnbWVudHMgdGhhdCBleGNlZWRlZCBsaW1pdCAqLworCXVfcXVhZF90IGlwNnNfZm9yd2FyZDsJCS8qIHBhY2tldHMgZm9yd2FyZGVkICovCisJdV9xdWFkX3QgaXA2c19jYW50Zm9yd2FyZDsJLyogcGFja2V0cyByY3ZkIGZvciB1bnJlYWNoYWJsZSBkZXN0ICovCisJdV9xdWFkX3QgaXA2c19yZWRpcmVjdHNlbnQ7CS8qIHBhY2tldHMgZm9yd2FyZGVkIG9uIHNhbWUgbmV0ICovCisJdV9xdWFkX3QgaXA2c19kZWxpdmVyZWQ7CS8qIGRhdGFncmFtcyBkZWxpdmVyZWQgdG8gdXBwZXIgbGV2ZWwqLworCXVfcXVhZF90IGlwNnNfbG9jYWxvdXQ7CQkvKiB0b3RhbCBpcCBwYWNrZXRzIGdlbmVyYXRlZCBoZXJlICovCisJdV9xdWFkX3QgaXA2c19vZHJvcHBlZDsJCS8qIGxvc3QgcGFja2V0cyBkdWUgdG8gbm9idWZzLCBldGMuICovCisJdV9xdWFkX3QgaXA2c19yZWFzc2VtYmxlZDsJLyogdG90YWwgcGFja2V0cyByZWFzc2VtYmxlZCBvayAqLworCXVfcXVhZF90IGlwNnNfZnJhZ21lbnRlZDsJLyogZGF0YWdyYW1zIHN1Y2Vzc2Z1bGx5IGZyYWdtZW50ZWQgKi8KKwl1X3F1YWRfdCBpcDZzX29mcmFnbWVudHM7CS8qIG91dHB1dCBmcmFnbWVudHMgY3JlYXRlZCAqLworCXVfcXVhZF90IGlwNnNfY2FudGZyYWc7CQkvKiBkb24ndCBmcmFnbWVudCBmbGFnIHdhcyBzZXQsIGV0Yy4gKi8KKwl1X3F1YWRfdCBpcDZzX2JhZG9wdGlvbnM7CS8qIGVycm9yIGluIG9wdGlvbiBwcm9jZXNzaW5nICovCisJdV9xdWFkX3QgaXA2c19ub3JvdXRlOwkJLyogcGFja2V0cyBkaXNjYXJkZWQgZHVlIHRvIG5vIHJvdXRlICovCisJdV9xdWFkX3QgaXA2c19iYWR2ZXJzOwkJLyogaXA2IHZlcnNpb24gIT0gNiAqLworCXVfcXVhZF90IGlwNnNfcmF3b3V0OwkJLyogdG90YWwgcmF3IGlwIHBhY2tldHMgZ2VuZXJhdGVkICovCisJdV9xdWFkX3QgaXA2c19iYWRzY29wZTsJCS8qIHNjb3BlIGVycm9yICovCisJdV9xdWFkX3QgaXA2c19ub3RtZW1iZXI7CS8qIGRvbid0IGpvaW4gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgKi8KKwl1X3F1YWRfdCBpcDZzX254dGhpc3RbMjU2XTsJLyogbmV4dCBoZWFkZXIgaGlzdG9yeSAqLworCXVfcXVhZF90IGlwNnNfbTE7CQkvKiBvbmUgbWJ1ZiAqLworCXVfcXVhZF90IGlwNnNfbTJtWzMyXTsJCS8qIHR3byBvciBtb3JlIG1idWYgKi8KKwl1X3F1YWRfdCBpcDZzX21leHQxOwkJLyogb25lIGV4dCBtYnVmICovCisJdV9xdWFkX3QgaXA2c19tZXh0Mm07CQkvKiB0d28gb3IgbW9yZSBleHQgbWJ1ZiAqLworCXVfcXVhZF90IGlwNnNfZXh0aGRydG9vbG9uZzsJLyogZXh0IGhkciBhcmUgbm90IGNvbnRpbnVvdXMgKi8KKwl1X3F1YWRfdCBpcDZzX25vZ2lmOwkJLyogbm8gbWF0Y2ggZ2lmIGZvdW5kICovCisJdV9xdWFkX3QgaXA2c190b29tYW55aGRyOwkvKiBkaXNjYXJkZWQgZHVlIHRvIHRvbyBtYW55IGhlYWRlcnMgKi8KKworCS8qCisJICogc3RhdGlzdGljcyBmb3IgaW1wcm92ZW1lbnQgb2YgdGhlIHNvdXJjZSBhZGRyZXNzIHNlbGVjdGlvbgorCSAqIGFsZ29yaXRobToKKwkgKiBYWFg6IGhhcmRjb2RlZCAxNiA9ICMgb2YgaXA2IG11bHRpY2FzdCBzY29wZSB0eXBlcyArIDEKKwkgKi8KKwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBhZGRyZXNzIHNlbGVjdGlvbiBmYWlscyAqLworCXVfcXVhZF90IGlwNnNfc291cmNlc19ub25lOworCS8qIG51bWJlciBvZiB0aW1lcyB0aGF0IGFuIGFkZHJlc3Mgb24gdGhlIG91dGdvaW5nIEkvRiBpcyBjaG9zZW4gKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfc2FtZWlmWzE2XTsKKwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBhbiBhZGRyZXNzIG9uIGEgbm9uLW91dGdvaW5nIEkvRiBpcyBjaG9zZW4gKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfb3RoZXJpZlsxNl07CisJLyoKKwkgKiBudW1iZXIgb2YgdGltZXMgdGhhdCBhbiBhZGRyZXNzIHRoYXQgaGFzIHRoZSBzYW1lIHNjb3BlCisJICogZnJvbSB0aGUgZGVzdGluYXRpb24gaXMgY2hvc2VuLgorCSAqLworCXVfcXVhZF90IGlwNnNfc291cmNlc19zYW1lc2NvcGVbMTZdOworCS8qCisJICogbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gYWRkcmVzcyB0aGF0IGhhcyBhIGRpZmZlcmVudCBzY29wZQorCSAqIGZyb20gdGhlIGRlc3RpbmF0aW9uIGlzIGNob3Nlbi4KKwkgKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfb3RoZXJzY29wZVsxNl07CisJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gZGVwcmVjYXRlZCBhZGRyZXNzIGlzIGNob3NlbiAqLworCXVfcXVhZF90IGlwNnNfc291cmNlc19kZXByZWNhdGVkWzE2XTsKKworCXVfcXVhZF90IGlwNnNfZm9yd2FyZF9jYWNoZWhpdDsKKwl1X3F1YWRfdCBpcDZzX2ZvcndhcmRfY2FjaGVtaXNzOworfTsKKworI2VuZGlmIC8qIGRhcndpbiovCisKK3N0YXRpYyBpbnQgX3N5c3RlbXN0YXRzX3Y0KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpOworCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKK3N0YXRpYyBpbnQgX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgbmNwdXM7CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2FyY2hfaW5pdCh2b2lkKQoreworICAgIGludCAgICBuY3B1X21pYltdICA9IHsgQ1RMX0hXLCBIV19OQ1BVIH07CisgICAgc2l6ZV90IHNpeiA9IHNpemVvZihuY3B1cyk7CisgICAgaWYgKHN5c2N0bChuY3B1X21pYiwgMiwgJm5jcHVzLCAmc2l6LCBOVUxMLCAwKSA8IDApIHsKKwlzbm1wX2xvZ19wZXJyb3IoImh3Lm5jcHUiKTsKKyAgICAgICAgbmNwdXMgPSAxOworICAgIH0KK30KKworLyoKKyAqCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgbm8gY29udGFpbmVyIHNwZWNpZmllZAorICogQHJldHZhbCAtMiBjb3VsZCBub3Qgb3BlbiBmaWxlCisgKiBAcmV0dmFsIC0zIGNvdWxkIG5vdCBjcmVhdGUgZW50cnkgKHByb2JhYmx5IG1hbGxvYykKKyAqIEByZXR2YWwgLTQgZmlsZSBmb3JtYXQgZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzE7CisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICBpbnQgcmMyOworI2VuZGlmCisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19zeXN0ZW1zdGF0c19cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIC8qCisgICAgICogbG9hZCB2NCBhbmQgdjYgc3RhdHMuIEV2ZW4gaWYgb25lIGZhaWxzLCB0cnkgdGhlIG90aGVyLgorICAgICAqIElmIHRoZXkgaGF2ZSB0aGUgc2FtZSByYywgcmV0dXJuIGl0LiBpZiB0aGUgZGlmZmVyLCByZXR1cm4KKyAgICAgKiB0aGUgc21hbGxlciBvbmUuIE5vIGxvZyBtZXNzYWdlcywgc2luY2UgZWFjaCBpbmRpdmlkdWFsIGZ1bmN0aW9uCisgICAgICogd291bGQgaGF2ZSBsb2dnZWQgaXRzIG93biBtZXNzYWdlLgorICAgICAqLworICAgIHJjMSA9IF9zeXN0ZW1zdGF0c192NChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgcmMyID0gX3N5c3RlbXN0YXRzX3Y2KGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgaWYgKChyYzEgPT0gcmMyKSB8fCAocmMxIDwgcmMyKSkKKyAgICAgICAgcmV0dXJuIHJjMTsKKyAgICAgICAgCisgICAgcmV0dXJuIHJjMjsKKyNlbHNlCisgICAgcmV0dXJuIHJjMTsKKyNlbmRpZgorfQorCisvKgorICogQmFzZWQgb24gbG9hZF9mbGFncywgbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgb3IgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjQgZW50cmllcy4gCisgKi8KKyNpZmRlZiBfX05ldEJTRF9fCisKK3N0YXRpYyBpbnQKK19zeXN0ZW1zdGF0c192NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICB1aW50NjRfdCBpcHN0YXRbSVBfTlNUQVRTXTsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKGlwc3RhdCk7CisKKyAgICBpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5pcC5zdGF0cyIsICZpcHN0YXQsICZsZW4sIE5VTEwsIDApIDwgMCkgeworCU5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgIkNhbm5vdCBzeXNjdGxieW5hbWUgbmV0LmluZXQuaXAuc3RhdHNcbiIpKTsKKwlyZXR1cm4gLTI7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY0IChmbGFncyAleClcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkgeworICAgICAgICAvKiB3ZSBkbyBub3Qgc3VwcG9ydCBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NCAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZSgxLCAwLAorCQkiaXBTeXN0ZW1TdGF0c1RhYmxlLmlwdjQiKTsKKyAgICBpZihOVUxMID09IGVudHJ5KSB7CisJc25tcF9sb2coTE9HX0VSUiwgInN5c3RlbXN0YXRzX3Y0OiBjYW5ub3QgY3JlYXRlIGVudHJ5XG4iKTsKKwluZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShjb250YWluZXIsCisJCQkJCQkgIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0ZSRUVfTk9GTEFHUyk7CisJcmV0dXJuIC0zOworICAgIH0KKworICAgIC8qCisgICAgICogT0sgLSB3ZSd2ZSBub3cgZ290IChvciBjcmVhdGVkKSB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yCisgICAgICogICAgICB0aGlzIHN5c3RlbXN0YXRzLCBpbmNsdWRpbmcgYW55ICJzdGF0aWMiIGluZm9ybWF0aW9uLgorICAgICAqIE5vdyBwYXJzZSB0aGUgcmVzdCBvZiB0aGUgbGluZSAoaS5lLiBzdGFydGluZyBmcm9tICdzdGF0cycpCisgICAgICogICAgICB0byBleHRyYWN0IHRoZSByZWxldmFudCBzdGF0aXN0aWNzLCBhbmQgcG9wdWxhdGUKKyAgICAgKiAgICAgIGRhdGEgc3RydWN0dXJlIGFjY29yZGluZ2x5LgorICAgICAqLworCisgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9UT1RBTF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX1RPVEFMXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSW5IZHJFcnJvcnMgPSBpcHN0YXRbSVBfU1RBVF9CQURTVU1dCisJCSAgICArIGlwc3RhdFtJUF9TVEFUX1RPT1NIT1JUXSArIGlwc3RhdFtJUF9TVEFUX1RPT1NNQUxMXQorCSAgICAgICAgICAgICsgaXBzdGF0W0lQX1NUQVRfQkFESExFTl0gKyBpcHN0YXRbSVBfU1RBVF9CQURMRU5dOworICAgIGVudHJ5LT5zdGF0cy5JbkFkZHJFcnJvcnMgPSBpcHN0YXRbSVBfU1RBVF9DQU5URk9SV0FSRF07CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9GT1JXQVJEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfRk9SV0FSRF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkluVW5rbm93blByb3RvcyA9IGlwc3RhdFtJUF9TVEFUX05PUFJPVE9dOworICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gaXBzdGF0W0lQX1NUQVRfRlJBR0RST1BQRURdOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gaXBzdGF0W0lQX1NUQVRfREVMSVZFUkVEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfREVMSVZFUkVEXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9MT0NBTE9VVF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzLmhpZ2ggPSBpcHN0YXRbSVBfU1RBVF9MT0NBTE9VVF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gaXBzdGF0W0lQX1NUQVRfT0RST1BQRURdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfT0RST1BQRURdID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdyA9IGlwc3RhdFtJUF9TVEFUX05PR0lGXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX05PR0lGXSA+PiAzMjsKKyAgICAvKiBlbnRyeS0+c3RhdHMuID0gc2Nhbl92YWxzWzEyXTsgLyAqIFJlYXNtVGltZW91dCAqLworICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gaXBzdGF0W0lQX1NUQVRfRlJBR01FTlRTXTsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21PS3MgPSBpcHN0YXRbSVBfU1RBVF9SRUFTU0VNQkxFRF07CisgICAgZW50cnktPnN0YXRzLlJlYXNtRmFpbHMgPSBpcHN0YXRbSVBfU1RBVF9GUkFHRFJPUFBFRF0KKwkJICAgICsgaXBzdGF0W0lQX1NUQVRfRlJBR1RJTUVPVVRdOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdPS3MubG93ID0gaXBzdGF0W0lQX1NUQVRfRlJBR01FTlRTXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfRlJBR01FTlRTXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gaXBzdGF0W0lQX1NUQVRfQ0FOVEZSQUddICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX0NBTlRGUkFHXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9PRlJBR01FTlRTXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX09GUkFHTUVOVFNdID4+IDMyOworCisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOSERSRVJST1JTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5VTktOT1dOUFJPVE9TXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkRJU0NBUkRTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNUkVRRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNT0tTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdID0gMTsKKworICAgIC8qCisgICAgICogYWRkIHRvIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkKKyAgICB7CisJc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHdpdGggc3lzdGVtc3RhdHNfdjQ6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKTsKKwluZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKworc3RhdGljIGludAorX3N5c3RlbXN0YXRzX3Y2X2xvYWRfc3lzdGVtc3RhdHMobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgdWludDY0X3QgaXBzdGF0W0lQNl9OU1RBVFNdOworICAgIHNpemVfdCBsZW4gPSBzaXplb2YoaXBzdGF0KTsKKworICAgIGlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0Ni5pcDYuc3RhdHMiLCAmaXBzdGF0LCAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwlORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJDYW5ub3Qgc3lzY3RsYnluYW1lIG5ldC5pbmV0Ni5pcDYuc3RhdHNcbiIpKTsKKwlyZXR1cm4gLTI7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY2IChmbGFncyAleClcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZSgyLCAwLAorCQkiaXBTeXN0ZW1TdGF0c1RhYmxlLmlwdjYiKTsKKyAgICBpZihOVUxMID09IGVudHJ5KSB7CisJc25tcF9sb2coTE9HX0VSUiwgInN5c3RlbXN0YXRzX3Y2X2xvYWRfc3lzdGVtc3RhdHM6IGNhbm5vdCBjcmVhdGUgZW50cnlcbiIpOworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKwkJCQkJCSAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9OT0ZMQUdTKTsKKwlyZXR1cm4gLTM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBPSyAtIHdlJ3ZlIG5vdyBnb3QgKG9yIGNyZWF0ZWQpIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3IKKyAgICAgKiAgICAgIHRoaXMgc3lzdGVtc3RhdHMsIGluY2x1ZGluZyBhbnkgInN0YXRpYyIgaW5mb3JtYXRpb24uCisgICAgICovCisKKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9UT1RBTF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IGlwc3RhdFtJUDZfU1RBVF9UT1RBTF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkluSGRyRXJyb3JzID0gaXBzdGF0W0lQNl9TVEFUX0JBRE9QVElPTlNdCisJCSAgICArIGlwc3RhdFtJUDZfU1RBVF9UT09TSE9SVF0gKyBpcHN0YXRbSVA2X1NUQVRfVE9PU01BTExdCisJCSAgICArIGlwc3RhdFtJUDZfU1RBVF9UT09NQU5ZSERSXSArIGlwc3RhdFtJUDZfU1RBVF9FWFRIRFJUT09MT05HXTsKKyAgICBlbnRyeS0+c3RhdHMuSW5BZGRyRXJyb3JzID0gaXBzdGF0W0lQNl9TVEFUX0NBTlRGT1JXQVJEXTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9GT1JXQVJEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX0ZPUldBUkRdID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gaXBzdGF0W0lQNl9TVEFUX0ZSQUdEUk9QUEVEXTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9ERUxJVkVSRURdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmhpZ2ggPSBpcHN0YXRbSVA2X1NUQVRfREVMSVZFUkVEXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfTE9DQUxPVVRdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX0xPQ0FMT1VUXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfT0RST1BQRURdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX09EUk9QUEVEXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfTk9HSUZdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX05PR0lGXSA+PiAzMjsKKyAgICAvKiBlbnRyeS0+c3RhdHMuID0gc2Nhbl92YWxzWzEyXTsgLyAqIFJlYXNtVGltZW91dCAqLworICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gaXBzdGF0W0lQNl9TVEFUX0ZSQUdNRU5UU107CisgICAgZW50cnktPnN0YXRzLlJlYXNtT0tzID0gaXBzdGF0W0lQNl9TVEFUX1JFQVNTRU1CTEVEXTsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21GYWlscyA9IGlwc3RhdFtJUDZfU1RBVF9GUkFHRFJPUFBFRF0KKwkJICAgICsgaXBzdGF0W0lQNl9TVEFUX0ZSQUdUSU1FT1VUXTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9GUkFHTUVOVFNdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBpcHN0YXRbSVA2X1NUQVRfRlJBR01FTlRTXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gaXBzdGF0W0lQNl9TVEFUX0NBTlRGUkFHXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmhpZ2ggPSBpcHN0YXRbSVA2X1NUQVRfQ0FOVEZSQUddID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9PRlJBR01FTlRTXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IGlwc3RhdFtJUDZfU1RBVF9PRlJBR01FTlRTXSA+PiAzMjsKKworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5BRERSRVJST1JTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVROT1JPVVRFU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0RJU0NPTlRJTlVJVFlUSU1FXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURV0gPSAxOworCisgICAgLyoKKyAgICAgKiBhZGQgdG8gY29udGFpbmVyCisgICAgICovCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKQorICAgIHsKKwlzbm1wX2xvZyhMT0dfRVJSLCAic3lzdGVtc3RhdHNfdjZfbG9hZF9zeXN0ZW1zdGF0czogY2Fubm90IGluc2VydCBlbnRyeVxuIik7CisJREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXIiLCJlcnJvciB3aXRoIHN5c3RlbXN0YXRzX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisKKy8qCisgKiBsb2FkIGlwSWZTdGF0c1RhYmxlIGZvciBpcHY2IGVudHJpZXMKKyAqLworc3RhdGljIGludCAKK19zeXN0ZW1zdGF0c192Nl9sb2FkX2lmc3RhdHMobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBzdHJ1Y3QgaWZfbmFtZWluZGV4ICppZnMgPSBpZl9uYW1laW5kZXgoKTsKKyAgICBpbnQgaXg7CisgICAgaW50IHJjID0gMDsKKworICAgIGZvciAoaXggPSAwOyBpZnNbaXhdLmlmX2luZGV4OyBpeCsrKSB7CisJc3RydWN0IGluNl9pZnN0YXQgKmlmczY7CisJc3RydWN0IGluNl9pZnJlcSBpZnI7CisJaW50IHM7CisKKwltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBpZnNbaXhdLmlmX25hbWUsIHNpemVvZihpZnIuaWZyX25hbWUpLTEpOworCWlmICgocyA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCkpIDwgMCkgeworCSAgICByYyA9IC0xOworCSAgICBicmVhazsKKwl9CisJaWYgKGlvY3RsKHMsIFNJT0NHSUZTVEFUX0lONiwgKGNhZGRyX3QpJmlmcikgPCAwKSB7CisJICAgIHJjID0gLTI7CisJICAgIGNsb3NlKHMpOworCSAgICBicmVhazsKKwl9CisJY2xvc2Uocyk7CisJaWZzNiA9ICZpZnIuaWZyX2lmcnUuaWZydV9zdGF0OworICAgIH0KKyAgICBpZl9mcmVlbmFtZWluZGV4KGlmcyk7CisgICAgcmV0dXJuIHJjOworfQorI2VuZGlmCisKKyNlbHNlCisKK3N0YXRpYyBpbnQKK19zeXN0ZW1zdGF0c192NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyNpZmRlZiBfX0RyYWdvbkZseV9fCisgICAgc2l6ZV90IGxlbiA9IG5jcHVzKnNpemVvZihzdHJ1Y3QgaXBfc3RhdHMpOworICAgIHN0cnVjdCBpcF9zdGF0cyAqaXBzdGF0ID0gbWFsbG9jKGxlbik7CisgICAgaW50IGM7CisjZWxzZQorICAgIHNpemVfdCBsZW4gPSBzaXplb2Yoc3RydWN0IGlwc3RhdCk7CisgICAgc3RydWN0IGlwc3RhdCAqaXBzdGF0ID0gbWFsbG9jKGxlbik7CisjZW5kaWYKKyAgICBpbnQgbWliW10gPSB7IENUTF9ORVQsIFBGX0lORVQsIElQUFJPVE9fSVAsIElQQ1RMX1NUQVRTIH07CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgc2l6ZW9mKG1pYikgLyBzaXplb2YobWliWzBdKSwgaXBzdGF0LCAmbGVuLCBOVUxMLCAwKSA9PSAtMSkgeworCXNubXBfbG9nX3BlcnJvcigiQ2Fubm90IHN5c2N0bGJ5bmFtZSBuZXQuaW5ldC5pcC5zdGF0cyIpOworCWZyZWUoaXBzdGF0KTsKKwlyZXR1cm4gLTI7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY0IChmbGFncyAleClcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkgeworICAgICAgICAvKiB3ZSBkbyBub3Qgc3VwcG9ydCBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NCAqLworCWZyZWUoaXBzdGF0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMSwgMCwKKwkJImlwU3lzdGVtU3RhdHNUYWJsZS5pcHY0Iik7CisgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKwkJCQkJCSAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9OT0ZMQUdTKTsKKwlmcmVlKGlwc3RhdCk7CisJcmV0dXJuIC0zOworICAgIH0KKworICAgIC8qCisgICAgICogT0sgLSB3ZSd2ZSBub3cgZ290IChvciBjcmVhdGVkKSB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yCisgICAgICogICAgICB0aGlzIHN5c3RlbXN0YXRzLCBpbmNsdWRpbmcgYW55ICJzdGF0aWMiIGluZm9ybWF0aW9uLgorICAgICAqIE5vdyBwYXJzZSB0aGUgcmVzdCBvZiB0aGUgbGluZSAoaS5lLiBzdGFydGluZyBmcm9tICdzdGF0cycpCisgICAgICogICAgICB0byBleHRyYWN0IHRoZSByZWxldmFudCBzdGF0aXN0aWNzLCBhbmQgcG9wdWxhdGUKKyAgICAgKiAgICAgIGRhdGEgc3RydWN0dXJlIGFjY29yZGluZ2x5LgorICAgICAqLworCisjaWZkZWYgZHJhZ29uZmx5CisgICAgZm9yIChjID0gMTsgYyA8IG5jcHVzOyBjKyspIHsKKwlpbnQgaSwgbiA9IHNpemVvZihzdHJ1Y3QgaXBfc3RhdHMpL3NpemVvZih1X2xvbmcpOworCXVfbG9uZyAqdXAgPSAodV9sb25nICopaXBzdGF0OworCXVfbG9uZyAqY3AgPSAodV9sb25nICopKGlwc3RhdCtjKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgICp1cCArPSAqY3A7CisJICAgIHVwKys7CisJICAgIGNwKys7CisJfQorICAgIH0KKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93ID0gaXBzdGF0LT5pcHNfdG90YWwgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmhpZ2ggPSBpcHN0YXQtPmlwc190b3RhbCA+PiAzMjsKKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5JbkhkckVycm9ycyA9IGlwc3RhdC0+aXBzX2JhZHN1bSArIGlwc3RhdC0+aXBzX3Rvb3Nob3J0CisJCSAgICAgICAgICAgICsgaXBzdGF0LT5pcHNfdG9vc21hbGwgKyBpcHN0YXQtPmlwc19iYWRobGVuCisJCQkgICAgKyBpcHN0YXQtPmlwc19iYWRsZW47CisgICAgZW50cnktPnN0YXRzLkluQWRkckVycm9ycyA9IGlwc3RhdC0+aXBzX2NhbnRmb3J3YXJkOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMubG93ID0gaXBzdGF0LT5pcHNfZm9yd2FyZCAmIDB4ZmZmZmZmZmY7CisjaWZuZGVmIGRhcndpbgorICAgIGVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMuaGlnaCA9IGlwc3RhdC0+aXBzX2ZvcndhcmQgPj4gMzI7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSW5Vbmtub3duUHJvdG9zID0gaXBzdGF0LT5pcHNfbm9wcm90bzsKKyAgICBlbnRyeS0+c3RhdHMuSW5EaXNjYXJkcyA9IGlwc3RhdC0+aXBzX2ZyYWdkcm9wcGVkOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gaXBzdGF0LT5pcHNfZGVsaXZlcmVkICYgMHhmZmZmZmZmZjsKKyNpZm5kZWYgZGFyd2luCisgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5oaWdoID0gaXBzdGF0LT5pcHNfZGVsaXZlcmVkID4+IDMyOworI2VuZGlmCisgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gaXBzdGF0LT5pcHNfbG9jYWxvdXQgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5oaWdoID0gaXBzdGF0LT5pcHNfbG9jYWxvdXQgPj4gMzI7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5sb3cgPSBpcHN0YXQtPmlwc19vZHJvcHBlZCAmIDB4ZmZmZmZmZmY7CisjaWZuZGVmIGRhcndpbgorICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmhpZ2ggPSBpcHN0YXQtPmlwc19vZHJvcHBlZCA+PiAzMjsKKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdyA9IGlwc3RhdC0+aXBzX25vZ2lmICYgMHhmZmZmZmZmZjsKKyNpZm5kZWYgZGFyd2luCisgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMuaGlnaCA9IGlwc3RhdC0+aXBzX25vZ2lmID4+IDMyOworI2VuZGlmCisgICAgLyogZW50cnktPnN0YXRzLiA9IHNjYW5fdmFsc1sxMl07IC8gKiBSZWFzbVRpbWVvdXQgKi8KKyAgICBlbnRyeS0+c3RhdHMuUmVhc21SZXFkcyA9IGlwc3RhdC0+aXBzX2ZyYWdtZW50czsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21PS3MgPSBpcHN0YXQtPmlwc19yZWFzc2VtYmxlZDsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21GYWlscyA9IGlwc3RhdC0+aXBzX2ZyYWdkcm9wcGVkICsgaXBzdGF0LT5pcHNfZnJhZ3RpbWVvdXQ7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5sb3cgPSBpcHN0YXQtPmlwc19mcmFnbWVudHMgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBpcHN0YXQtPmlwc19mcmFnbWVudHMgPj4gMzI7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gaXBzdGF0LT5pcHNfY2FudGZyYWcgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMuaGlnaCA9IGlwc3RhdC0+aXBzX2NhbnRmcmFnID4+IDMyOworI2VuZGlmCisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93ID0gaXBzdGF0LT5pcHNfb2ZyYWdtZW50cyAmIDB4ZmZmZmZmZmY7CisjaWZuZGVmIGRhcndpbgorICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmhpZ2ggPSBpcHN0YXQtPmlwc19vZnJhZ21lbnRzID4+IDMyOworI2VuZGlmCisKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTlVOS05PV05QUk9UT1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVROT1JPVVRFU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0RJU0NPTlRJTlVJVFlUSU1FXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURV0gPSAxOworCisgICAgLyoKKyAgICAgKiBhZGQgdG8gY29udGFpbmVyCisgICAgICovCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKQorICAgIHsKKwlERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmNvbnRhaW5lciIsImVycm9yIHdpdGggc3lzdGVtc3RhdHNfZW50cnk6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisJbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShlbnRyeSk7CisgICAgfQorCisgICAgZnJlZShpcHN0YXQpOworICAgIHJldHVybiAwOworfQorCisKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorCisvKgorICogbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgZm9yIGlwdjYgZW50cmllcworICovCitzdGF0aWMgaW50IAorX3N5c3RlbXN0YXRzX3Y2X2xvYWRfc3lzdGVtc3RhdHMobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBzdHJ1Y3QgaXA2c3RhdCBpcDZzdGF0OworICAgIGludCBtaWJbXSA9IHsgQ1RMX05FVCwgQUZfSU5FVDYsIElQUFJPVE9fSVBWNiwgSVBWNkNUTF9TVEFUUyB9OworICAgIHNpemVfdCBsZW4gPSBzaXplb2YoaXA2c3RhdCk7CisgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnkgPSBOVUxMOworCisgICAgaWYgKHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKG1pYlswXSksICZpcDZzdGF0LCAmbGVuLCBOVUxMLCAwKSA9PSAtMSkgeworICAJTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiQ2Fubm90IHN5c2N0bChDVExfTkVULCBBRl9JTkVUNiwgSVBQUk9UT19JUFY2LCBJUFY2Q1RMX1NUQVRTKVxuIikpOworCXJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMiwgMCwKKyAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUuaXB2NiIpOworICAgIGlmKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMzsKKyAgICAKKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdyA9IGlwNnN0YXQuaXA2c190b3RhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoID0gaXA2c3RhdC5pcDZzX3RvdGFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSA9IDE7CisgICAgLyoKKyAgICBlbnRyeS0+c3RhdHMuSENJbk9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5PY3RldHMuaGlnaCA9IHNjYW5fdmFsICA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdID0gMTsKKyAgICAqLworICAgIGVudHJ5LT5zdGF0cy5JbkhkckVycm9ycyA9IGlwNnN0YXQuaXA2c19iYWRvcHRpb25zICsgaXA2c3RhdC5pcDZzX3Rvb3Nob3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaXA2c3RhdC5pcDZzX3Rvb3NtYWxsICsgaXA2c3RhdC5pcDZzX2JhZHZlcnMKKwkJCSAgICAgKyBpcDZzdGF0LmlwNnNfdG9vbWFueWhkcjsKKyNpZiBIQVZFX1NUUlVDVF9JUDZTVEFUX0lQNlNfRVhUSERSVE9PTE9ORworICAgIGVudHJ5LT5zdGF0cy5JbkhkckVycm9ycyArPSBpcDZzdGF0LmlwNnNfZXh0aGRydG9vbG9uZzsKKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzLmxvdyA9IGlwNnN0YXQuaXA2c19jYW50Zm9yd2FyZCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5Ob1JvdXRlcy5oaWdoID0gaXA2c3RhdC5pcDZzX2NhbnRmb3J3YXJkID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk5PUk9VVEVTXSA9IDE7CisgICAgLyoKKyAgICBlbnRyeS0+c3RhdHMuaW5BZGRyRXJyb3JzID0gMDsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBzY2FuX3ZhbDsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5JblRydW5jYXRlZFBrdHMgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5UUlVOQ0FURURQS1RTXSA9IDE7CisgICAgKi8KKyAgICBlbnRyeS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93ID0gaXA2c3RhdC5pcDZzX2ZvcndhcmQgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5oaWdoID0gaXA2c3RhdC5pcDZzX2ZvcndhcmQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gaXA2c3RhdC5pcDZzX2ZyYWdtZW50czsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNUkVRRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21PS3MgPSBpcDZzdGF0LmlwNnNfcmVhc3NlbWJsZWQ7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5SZWFzbUZhaWxzID0gaXA2c3RhdC5pcDZzX2ZyYWdkcm9wcGVkICsgaXA2c3RhdC5pcDZzX2ZyYWd0aW1lb3V0OworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01GQUlMU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gaXA2c3RhdC5pcDZzX2ZyYWdkcm9wcGVkOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gaXA2c3RhdC5pcDZzX2RlbGl2ZXJlZCAgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaCA9IGlwNnN0YXQuaXA2c19kZWxpdmVyZWQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSBpcDZzdGF0LmlwNnNfbG9jYWxvdXQgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfbG9jYWxvdXQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gaXA2c3RhdC5pcDZzX25vcm91dGUgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfbm9yb3V0ZSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdyA9IGlwNnN0YXQuaXA2c19mb3J3YXJkICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSBpcDZzdGF0LmlwNnNfZm9yd2FyZCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdyA9IGlwNnN0YXQuaXA2c19vZHJvcHBlZCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMuaGlnaCA9IGlwNnN0YXQuaXA2c19vZHJvcHBlZCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnUmVxZHMubG93ID0gKGlwNnN0YXQuaXA2c19mcmFnbWVudGVkICsgaXA2c3RhdC5pcDZzX2NhbnRmcmFnKSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ1JlcWRzLmhpZ2ggPSAoaXA2c3RhdC5pcDZzX2ZyYWdtZW50ZWQgKyBpcDZzdGF0LmlwNnNfY2FudGZyYWcpID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHUkVRRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IGlwNnN0YXQuaXA2c19mcmFnbWVudGVkICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfZnJhZ21lbnRlZCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscy5sb3cgPSBpcDZzdGF0LmlwNnNfY2FudGZyYWcgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscy5oaWdoID0gaXA2c3RhdC5pcDZzX2NhbnRmcmFnID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3cgPSBpcDZzdGF0LmlwNnNfb2ZyYWdtZW50cyAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IGlwNnN0YXQuaXA2c19vZnJhZ21lbnRzID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFU10gPSAxOworICAgIC8qCisgICAgZW50cnktPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRUcmFuc21pdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RPY3RldHMubG93ID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVE9DVEVUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRPY3RldHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkJjYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luQmNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRCY2FzdFBrdHMubG93ID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRCY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFNdID0gMTsKKyAgICAqLworCisgICAgLyoKKyAgICAgKiBhZGQgdG8gY29udGFpbmVyCisgICAgICovCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKSB7CisJREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXIiLCJlcnJvciB3aXRoIHN5c3RlbXN0YXRzX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCisjZGVmaW5lIERFVl9TTk1QNl9ESVJOQU1FICAgIi9wcm9jL25ldC9kZXZfc25tcDYiCisjZGVmaW5lIElGSU5ERVhfTElORSAgICAgICAgImlmSW5kZXgiCisjZGVmaW5lIERFVl9GSUxFTkFNRV9MRU4gICAgNjQKKworLyoKKyAqIGxvYWQgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjYgZW50cmllcworICovCitzdGF0aWMgaW50IAorX3N5c3RlbXN0YXRzX3Y2X2xvYWRfaWZzdGF0cyhuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIERJUiAgICAgICAgICAgICpkZXZfc25tcDZfZGlyOworICAgIHN0cnVjdCBkaXJlbnQgICpkZXZfc25tcDZfZW50cnk7CisgICAgY2hhciAgICAgICAgICAgZGV2X2ZpbGVuYW1lW0RFVl9GSUxFTkFNRV9MRU5dOworICAgIEZJTEUgICAgICAgICAgICpkZXZpbjsKKyAgICBjaGFyICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIGNoYXIgICAgICAgICAgICpzdGFydCA9IGxpbmU7CisgICAgaW50ICAgICAgICAgICAgcmM7CisgICAgY2hhciAgICAgICAgICAgKnNjYW5fc3RyOworICAgIHVpbnRtYXhfdCAgICAgICBzY2FuX3ZhbDsKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgICAgICAgICAKKyAgICAvKgorICAgICAqIHRyeSB0byBvcGVuIC9wcm9jL25ldC9kZXZfc25tcDYgZGlyZWN0b3J5LiBJZiB3ZSBjYW4ndCwgdGhhdCcgb2sgLQorICAgICAqIG1heWJlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgcnVubmluZyBrZXJuZWwuCisgICAgICovCisgICAgaWYgKChkZXZfc25tcDZfZGlyID0gb3BlbmRpcihERVZfU05NUDZfRElSTkFNRSkpID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppZnN0YXRzIiwKKyAgICAgICAgIkZhaWxlZCB0byBsb2FkIElQdjYgSWZTdGF0cyBUYWJsZSAobGludXgpXG4iKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIFJlYWQgZWFjaCBwZXIgaW50ZXJmYWNlIHN0YXRpc3RpY3MgcHJvYyBmaWxlCisgICAgICovCisgICAgcmMgPSAwOworICAgIHdoaWxlICgoZGV2X3NubXA2X2VudHJ5ID0gcmVhZGRpcihkZXZfc25tcDZfZGlyKSkgIT0gTlVMTCkgeworICAgICAgICBpZiAoZGV2X3NubXA2X2VudHJ5LT5kX25hbWVbMF0gPT0gJy4nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgCisgICAgICAgIGlmIChzbnByaW50ZihkZXZfZmlsZW5hbWUsIERFVl9GSUxFTkFNRV9MRU4sICIlcy8lcyIsIERFVl9TTk1QNl9ESVJOQU1FLAorICAgICAgICAgICAgICAgIGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lKSA+IERFVl9GSUxFTkFNRV9MRU4pIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJJbnRlcmZhY2UgbmFtZSAlcyBpcyB0b28gbG9uZ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgZGV2X3NubXA2X2VudHJ5LT5kX25hbWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5VTEwgPT0gKGRldmluID0gZm9wZW4oZGV2X2ZpbGVuYW1lLCAiciIpKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBvcGVuICVzXG4iLCBkZXZfZmlsZW5hbWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgYSBzdGF0IGZpbGUgbmFtZSBpcyBtYWRlIG9mIGRpZ2l0cywgdGhlIG5hbWUgaXMgaW50ZXJmYWNlIGluZGV4LgorICAgICAgICAgKiBJZiBpdCBpcyBhbiBpbnRlcmZhY2UgbmFtZSwgdGhlIGZpbGUgaW5jbHVkZXMgYSBsaW5lIGxhYmVsZWQgaWZJbmRleC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChpc2RpZ2l0KGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lWzBdKSkgeworICAgICAgICAgICAgc2Nhbl92YWwgPSBzdHJ0b3VsbChkZXZfc25tcDZfZW50cnktPmRfbmFtZSwgTlVMTCwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSAoc3RhcnQgPSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGRldmluKSkpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMgZG9lc24ndCBpbmNsdWRlIGFueSBsaW5lc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGlmICgwICE9IHN0cm5jbXAoc3RhcnQsIElGSU5ERVhfTElORSwgNykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMgZG9lc24ndCBpbmNsdWRlIGlmSW5kZXggbGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNjYW5fc3RyID0gc3RycmNocihsaW5lLCAnICcpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gc2Nhbl9zdHIpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMgaXMgd3JvbmcgZm9ybWF0IiwgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2Nhbl92YWwgPSBzdHJ0b3VsbChzY2FuX3N0ciwgTlVMTCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDIsIHNjYW5fdmFsLAorICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZS5pcHY2Iik7CisgICAgICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgICAgICAgICBjbG9zZWRpcihkZXZfc25tcDZfZGlyKTsKKyAgICAgICAgICAgIHJldHVybiAtMzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyogX3N5c3RlbXN0YXRzX3Y2X2xvYWRfZmlsZShlbnRyeSwgZGV2aW4pOyAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgIH0KKyAgICBjbG9zZWRpcihkZXZfc25tcDZfZGlyKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisjZW5kaWYKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKy8qCisgKiBCYXNlZCBvbiBsb2FkX2ZsYWdzLCBsb2FkIGlwU3lzdGVtU3RhdHNUYWJsZSBvciBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NiBlbnRyaWVzLiAKKyAqLworc3RhdGljIGludAorX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY2IChmbGFncyAldSlcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkgeworICAgICAgICAvKiBsb2FkIGlwSWZTdGF0c1RhYmxlICovCisgICAgICAgIHJldHVybiBfc3lzdGVtc3RhdHNfdjZfbG9hZF9pZnN0YXRzKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgKi8KKyAgICAgICAgcmV0dXJuIF9zeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgfQorfQorI2VuZGlmIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYwppbmRleCA2NWFhOGUzLi5hYWFlMmUzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJpbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9vaWRbXSA9IHsgSU5FVE5FVFRPTUVESUFUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZFtdID0geyBJTkVUTkVUVE9NRURJQVRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChpbmV0TmV0VG9NZWRpYVRhYmxlX29pZCk7CiAKIGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uIGluZXROZXRUb01lZGlhVGFibGVfdXNlcl9jb250ZXh0OwpAQCAtMTU5LDEwICsxNTksMTAgQEAKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTppbmV0TmV0VG9NZWRpYVRhYmxlOmluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwIiwgImNhbGxlZFxuIikpOwogCiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKLQogICAgIC8qCiAgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgaW5ldE5ldFRvTWVkaWFUYWJsZSByb3dyZXEgY2xlYW51cC4KICAgICAgKi8KKyAgICBTTk1QX0ZSRUUocm93cmVxX2N0eC0+ZGF0YSk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCiAKIC8qKgpAQCAtNTM2LDExICs1MzYsNyBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpbmV0TmV0VG9NZWRpYUxhc3RVcGRhdGVkIGRhdGEuCiAgICAgICogY29weSAoKiBpbmV0TmV0VG9NZWRpYUxhc3RVcGRhdGVkX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KLSAgICAvKgotICAgICAqIHh4eC1ya3M6IGdldCB0aGlzIHZhbHVlPwotICAgICAqLwotICAgIHJldHVybiBNRkRfU0tJUDsKLQorICAgICppbmV0TmV0VG9NZWRpYUxhc3RVcGRhdGVkX3ZhbF9wdHIgPSByb3dyZXFfY3R4LT5kYXRhLT5hcnBfbGFzdF91cGRhdGVkOwogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5ldE5ldFRvTWVkaWFMYXN0VXBkYXRlZF9nZXQgKi8KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oCmluZGV4IDdmM2ZjZTIuLjczYWZhZTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKQEAgLTIwMCw4ICsyMDAsOCBAQAogICAgICAgICAqIGluZXROZXRUb01lZGlhVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpbmV0TmV0VG9NZWRpYVRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgImluZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmgiCkBAIC0yNTAsMTIgKzI1MCwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXROZXRUb01lZGlhU3RhdGVfdmFsX3B0cik7CisKICAgICBpbnQKICAgICAgICAgaW5ldE5ldFRvTWVkaWFSb3dTdGF0dXNfZ2V0KGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXROZXRUb01lZGlhUm93U3RhdHVzX3ZhbF9wdHIpOwogCisgICAgaW50CisgICAgICAgIGluZXROZXRUb01lZGlhUm93U3RhdHVzX3NldChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFSb3dTdGF0dXNfdmFsKTsKKwogCiAgICAgaW50CiAgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDgxOTQ1MzQuLjFlYzhjYzYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0xOSw2ICsyMCw5IEBACiAKICNpbmNsdWRlICJpbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9saWZvKQorc3RhdGljIG5ldHNubXBfYXJwX2FjY2VzcyAqIGFycF9hY2Nlc3MgPSBOVUxMOworCiAvKiogQGluZ3JvdXAgaW50ZXJmYWNlIAogICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCiAgKgpAQCAtNzEsNiArNzUsMTIzIEBACiAgKi8KIAogLyoqCisgKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCisgKi8KK3N0YXRpYyB2b2lkCitfYWRkX29yX3VwZGF0ZV9hcnBfZW50cnkobmV0c25tcF9hcnBfZW50cnkgKmFycF9lbnRyeSwKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsICpvbGQ7CisgICAgaW50ICAgICAgICAgICAgIGluZXRBZGRyZXNzVHlwZTsKKworICAgIERFQlVHVFJBQ0U7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGFycF9lbnRyeSk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0IHRoZSBhZGRyIGxlbiB0byBhbiBpbmV0QWRkcmVzc1R5cGUKKyAgICAgKi8KKyAgICBzd2l0Y2ggKGFycF9lbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pIHsKKyAgICBjYXNlIDQ6CisgICAgICAgIGluZXRBZGRyZXNzVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMTY6CisgICAgICAgIGluZXRBZGRyZXNzVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpbmV0TmV0VG9NZWRpYVRhYmxlOl9hZGRfb3JfdXBkYXRlX2FycGVudHJ5OiB1bnN1cHBvcnRlZCBhZGRyZXNzIHR5cGUsIGxlbiA9ICVkXG4iLCBhcnBfZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKTsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2ZyZWUoYXJwX2VudHJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogYWxsb2NhdGUgYW4gcm93IGNvbnRleHQgYW5kIHNldCB0aGUgaW5kZXgoZXMpLCB0aGVuIHRyeSB0byBmaW5kIGl0IGluCisgICAgICogdGhlIGNhY2hlLgorICAgICAqLworICAgIHJvd3JlcV9jdHggPSBpbmV0TmV0VG9NZWRpYVRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoYXJwX2VudHJ5LCBOVUxMKTsKKyAgICBpZiAoKE5VTEwgIT0gcm93cmVxX2N0eCkgJiYKKyAgICAgICAgKE1GRF9TVUNDRVNTID09IGluZXROZXRUb01lZGlhVGFibGVfaW5kZXhlc19zZXQKKyAgICAgICAgIChyb3dyZXFfY3R4LCByb3dyZXFfY3R4LT5kYXRhLT5pZl9pbmRleCwgaW5ldEFkZHJlc3NUeXBlLAorICAgICAgICAgIChjaGFyICopIHJvd3JlcV9jdHgtPmRhdGEtPmFycF9pcGFkZHJlc3MsCisgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+YXJwX2lwYWRkcmVzc19sZW4pKSkgeworCisgICAgICAgIC8qIHRyeSB0byBmaW5kIG9sZCBlbnRyeSAqLworICAgICAgICBvbGQgPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklORChjb250YWluZXIsIHJvd3JlcV9jdHgpOworICAgICAgICBpZiAoYXJwX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0FSUF9FTlRSWV9GTEFHX0RFTEVURSkgeworICAgICAgICAgICAgLyogZGVsZXRlIGV4aXN0aW5nIGVudHJ5ICovCisgICAgICAgICAgICBpZiAob2xkICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGNvbnRhaW5lciwgb2xkKTsKKyAgICAgICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChvbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgIH0gZWxzZSBpZiAob2xkICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIHRoZSBlbnRyeSBpcyBhbHJlYWR5IHRoZXJlLCB1cGRhdGUgaXQgKi8KKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV91cGRhdGUob2xkLT5kYXRhLCBhcnBfZW50cnkpOworICAgICAgICAgICAgLyogZGVsZXRlIHRoZSBhdXhpbGlhcnkgY29udGV4dCB3ZSB1c2VkIHRvIGZpbmQgdGhlIGVudHJ5CisgICAgICAgICAgICAgKiAodGhpcyBkZWxldGVzIGFsc28gYXJwX2VudHJ5KSAqLworICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBjcmVhdGUgbmV3IGVudHJ5IGFuZCBhZGQgaXQgdG8gdGhlIGNhY2hlKi8KKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmluZXROZXRUb01lZGlhUm93U3RhdHVzID0gUk9XU1RBVFVTX0FDVElWRTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmFycF9sYXN0X3VwZGF0ZWQgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyb3dyZXFfY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJpbmV0TmV0VG9NZWRpYVRhYmxlIGNhY2hlLlxuIik7CisgICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfZnJlZShhcnBfZW50cnkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgIF9hcnBfaG9va191cGRhdGUobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MsIG5ldHNubXBfYXJwX2VudHJ5ICplbnRyeSkKK3sKKyAgICBfYWRkX29yX3VwZGF0ZV9hcnBfZW50cnkoZW50cnksIGFjY2Vzcy0+bWFnaWMpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgZ2VuZXJhdGlvbjsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG9fZGVsZXRlOworfSBfY29sbGVjdF9jdHg7CisKKy8qKgorICogUHV0IGFsbCBlbnRyaWVzIHdpdGggb3V0ZGF0ZWQgZ2VuZXJhdGlvbiB0byBkZWxldGlvbiBsaXN0LgorICovCitzdGF0aWMgdm9pZAorX2NvbGxlY3RfaW52YWxpZF9hcnBfY3R4KGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xsZWN0X2N0eCAqY2N0eCkKK3sKKyAgICBpZiAoY3R4LT5kYXRhLT5nZW5lcmF0aW9uICE9IGNjdHgtPmdlbmVyYXRpb24pCisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY2N0eC0+dG9fZGVsZXRlLCBjdHgpOworfQorCitzdGF0aWMgdm9pZCBfYXJwX2hvb2tfZ2MobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IGFjY2Vzcy0+bWFnaWM7CisgICAgX2NvbGxlY3RfY3R4IGNjdHg7CisKKyAgICBjY3R4LnRvX2RlbGV0ZSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImxpZm8iKTsKKyAgICBjY3R4LmdlbmVyYXRpb24gPSBhY2Nlc3MtPmdlbmVyYXRpb247CisKKyAgICBDT05UQUlORVJfRk9SX0VBQ0goY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NvbGxlY3RfaW52YWxpZF9hcnBfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAmY2N0eCk7CisKKyAgICB3aGlsZSAoQ09OVEFJTkVSX1NJWkUoY2N0eC50b19kZWxldGUpKSB7CisgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJUlNUKGNjdHgudG9fZGVsZXRlKTsKKyAgICAgICAgQ09OVEFJTkVSX1JFTU9WRShjb250YWluZXIsIGN0eCk7CisgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KGN0eCk7CisgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoY2N0eC50b19kZWxldGUsIE5VTEwpOworICAgIH0KKyAgICBDT05UQUlORVJfRlJFRShjY3R4LnRvX2RlbGV0ZSk7Cit9CisKKy8qKgogICogY29udGFpbmVyIGluaXRpYWxpemF0aW9uCiAgKgogICogQHBhcmFtIGNvbnRhaW5lcl9wdHJfcHRyIEEgcG9pbnRlciB0byBhIGNvbnRhaW5lciBwb2ludGVyLiBJZiB5b3UKQEAgLTEyMCw3MiArMjQxLDE5IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvKgotICAgICAqIFRPRE86MzQ1OkE6IFNldCB1cCBpbmV0TmV0VG9NZWRpYVRhYmxlIGNhY2hlIHByb3BlcnRpZXMuCi0gICAgICoKLSAgICAgKiBBbHNvIGZvciBhZHZhbmNlZCB1c2VycywgeW91IGNhbiBzZXQgcGFyYW1ldGVycyBmb3IgdGhlCi0gICAgICogY2FjaGUuIERvIG5vdCBjaGFuZ2UgdGhlIG1hZ2ljIHBvaW50ZXIsIGFzIGl0IGlzIHVzZWQKLSAgICAgKiBieSB0aGUgTUZEIGhlbHBlci4gVG8gY29tcGxldGVseSBkaXNhYmxlIGNhY2hpbmcsIHNldAotICAgICAqIGNhY2hlLT5lbmFibGVkIHRvIDAuCi0gICAgICovCi0gICAgY2FjaGUtPnRpbWVvdXQgPSBJTkVUTkVUVE9NRURJQVRBQkxFX0NBQ0hFX1RJTUVPVVQ7IC8qIHNlY29uZHMgKi8KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfaW5pdCAqLwotCi0vKioKLSAqIGNoZWNrIGVudHJ5IGZvciB1cGRhdGUKLSAqCi0gKi8KLXN0YXRpYyB2b2lkCi1fc25hcmZfYXJwX2VudHJ5KG5ldHNubXBfYXJwX2VudHJ5ICphcnBfZW50cnksCi0gICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCi17Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OwotICAgIGludCAgICAgICAgICAgICBpbmV0QWRkcmVzc1R5cGU7Ci0KLSAgICBERUJVR1RSQUNFOwotCi0gICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBhcnBfZW50cnkpOwotICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKLQotICAgIC8qCi0gICAgICogY29udmVydCB0aGUgYWRkciBsZW4gdG8gYW4gaW5ldEFkZHJlc3NUeXBlCi0gICAgICovCi0gICAgc3dpdGNoIChhcnBfZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBpbmV0QWRkcmVzc1R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDY6Ci0gICAgICAgIGluZXRBZGRyZXNzVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKGFycF9lbnRyeSk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bnN1cHBvcnRlZCBhZGRyZXNzIHR5cGVcbiIpOworICAgIGFycF9hY2Nlc3MgPSBuZXRzbm1wX2FjY2Vzc19hcnBfY3JlYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfQVJQX0NSRUFURV9OT0ZMQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FycF9ob29rX3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hcnBfaG9va19nYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZS0+dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZS0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FjaGUtPmV4cGlyZWQpOworICAgIGlmIChhcnBfYWNjZXNzID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBjcmVhdGUgYXJwIGFjY2VzcyBpbiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIC8qCi0gICAgICogYWxsb2NhdGUgYW4gcm93IGNvbnRleHQgYW5kIHNldCB0aGUgaW5kZXgoZXMpLCB0aGVuIGFkZCBpdCB0bwotICAgICAqIHRoZSBjb250YWluZXIKLSAgICAgKi8KLSAgICByb3dyZXFfY3R4ID0gaW5ldE5ldFRvTWVkaWFUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGFycF9lbnRyeSwgTlVMTCk7Ci0gICAgaWYgKChOVUxMICE9IHJvd3JlcV9jdHgpICYmCi0gICAgICAgIChNRkRfU1VDQ0VTUyA9PSBpbmV0TmV0VG9NZWRpYVRhYmxlX2luZGV4ZXNfc2V0Ci0gICAgICAgICAocm93cmVxX2N0eCwgcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXgsIGluZXRBZGRyZXNzVHlwZSwKLSAgICAgICAgICAoY2hhciAqKSByb3dyZXFfY3R4LT5kYXRhLT5hcnBfaXBhZGRyZXNzLAotICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmFycF9pcGFkZHJlc3NfbGVuKSkpIHsKLSAgICAgICAgcm93cmVxX2N0eC0+aW5ldE5ldFRvTWVkaWFSb3dTdGF0dXMgPSBST1dTVEFUVVNfQUNUSVZFOwotICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJvd3JlcV9jdHgpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBzZXR0aW5nIGluZGV4IHdoaWxlIGxvYWRpbmcgIgotICAgICAgICAgICAgICAgICAgICAgImluZXROZXRUb01lZGlhVGFibGUgY2FjaGUuXG4iKTsKLSAgICAgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKGFycF9lbnRyeSk7Ci0gICAgfQotfQorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9pbml0ICovCiAKIC8qKgogICogY29udGFpbmVyIHNodXRkb3duCkBAIC0yMDgsMTIgKzI3NiwxNiBAQAogewogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmluZXROZXRUb01lZGlhVGFibGU6aW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CiAKKyAgICBpZiAoTlVMTCAhPSBhcnBfYWNjZXNzKSB7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9kZWxldGUoYXJwX2FjY2Vzcyk7CisgICAgICAgIGFycF9hY2Nlc3MgPSBOVUxMOworICAgIH0KKwogICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHIpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImJhZCBwYXJhbXMgdG8gaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfc2h1dGRvd25cbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIC8qKgpAQCAtMjUyLDM3ICszMjQsMTEgQEAKIGludAogaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQogewotICAgIG5ldHNubXBfY29udGFpbmVyICphcnBfY29udGFpbmVyOwotCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aW5ldE5ldFRvTWVkaWFUYWJsZTppbmV0TmV0VG9NZWRpYVRhYmxlX2NhY2hlX2xvYWQiLCAiY2FsbGVkXG4iKSk7CiAKLSAgICAvKgotICAgICAqIFRPRE86MzUxOk06IHwtPiBMb2FkL3VwZGF0ZSBkYXRhIGluIHRoZSBpbmV0TmV0VG9NZWRpYVRhYmxlIGNvbnRhaW5lci4KLSAgICAgKiBsb29wIG92ZXIgeW91ciBpbmV0TmV0VG9NZWRpYVRhYmxlIGRhdGEsIGFsbG9jYXRlIGEgcm93cmVxIGNvbnRleHQsCi0gICAgICogc2V0IHRoZSBpbmRleChlcykgW2FuZCBkYXRhLCBvcHRpb25hbGx5XSBhbmQgaW5zZXJ0IGludG8KLSAgICAgKiB0aGUgY29udGFpbmVyLgotICAgICAqLwotICAgIGFycF9jb250YWluZXIgPQotICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2xvYWQoTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0FSUF9MT0FEX05PRkxBR1MpOwotICAgIGlmIChOVUxMID09IGFycF9jb250YWluZXIpCi0gICAgICAgIHJldHVybiBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEU7ICAgICAgICAvKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KLQotICAgIC8qCi0gICAgICogd2UganVzdCBnb3QgYSBmcmVzaCBjb3B5IG9mIGRhdGEuIHNuYXJmIGRhdGEKLSAgICAgKi8KLSAgICBDT05UQUlORVJfRk9SX0VBQ0goYXJwX2NvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9zbmFyZl9hcnBfZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7Ci0KLSAgICAvKgotICAgICAqIGZyZWUgdGhlIGNvbnRhaW5lci4gd2UndmUgZWl0aGVyIGNsYWltZWQgZWFjaCBlbnRyeSwgb3IgcmVsZWFzZWQgaXQsCi0gICAgICogc28gdGhlIGFjY2VzcyBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gY2xlYXIgdGhlIGNvbnRhaW5lci4KLSAgICAgKi8KLSAgICBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2ZyZWUoYXJwX2NvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfRE9OVF9DTEVBUik7Ci0KLSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmluZXROZXRUb01lZGlhVGFibGU6aW5ldE5ldFRvTWVkaWFUYWJsZV9jYWNoZV9sb2FkIiwgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICBhcnBfYWNjZXNzLT5tYWdpYyA9IGNvbnRhaW5lcjsKKyAgICBpZiAobmV0c25tcF9hY2Nlc3NfYXJwX2xvYWQoYXJwX2FjY2VzcykgPCAwKQorICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9sb2FkICovCkBAIC0zMDUsNiArMzUxLDExIEBACiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aW5ldE5ldFRvTWVkaWFUYWJsZTppbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9mcmVlIiwgImNhbGxlZFxuIikpOwogCisgICAgaWYgKE5VTEwgIT0gYXJwX2FjY2VzcykgeworICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKGFycF9hY2Nlc3MpOworICAgICAgICBhcnBfYWNjZXNzLT5tYWdpYyA9IE5VTEw7CisgICAgfQorCiAgICAgLyoKICAgICAgKiBUT0RPOjM4MDpNOiBGcmVlIGluZXROZXRUb01lZGlhVGFibGUgY29udGFpbmVyIGRhdGEuCiAgICAgICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYwppbmRleCA0MmViY2MwLi5jMTg2ODlhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE5IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5ldE5ldFRvTWVkaWFUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfY29udGFpbmVyX3Jvd19pbnNlcnQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX3NpemUsIGluZXROZXRUb01lZGlhVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgaW5ldE5ldFRvTWVkaWFUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpbmV0TmV0VG9NZWRpYVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9nZXQsIGluZXROZXRUb01lZGlhVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgyLDE5ICs5NiwyMyBAQAogICAgICAgICAgICAgICAgIF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpbmV0TmV0VG9NZWRpYVRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRORVRUT01FRElBVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWdpc3RyYXRpb24gKgogaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGluZXROZXRUb01lZGlhVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uICoKIGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uX3NldChpbmV0TmV0VG9NZWRpYVRhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKQpAQCAtMTA0LDEyICsxMjIsMTUgQEAKICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaW5ldE5ldFRvTWVkaWFUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRORVRUT01FRElBVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGluZXROZXRUb01lZGlhVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMzMsNyArMTU0LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDksNyArMTcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLCBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAogICAgICAgICAgICAgICAgIF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NoZWNrX2luZGV4ZXMoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICoKQEAgLTE5Miw3ICsyMTMsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJTkVUTkVUVE9NRURJQVRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJTkVUTkVUVE9NRURJQVRBQkxFX01BWF9DT0w7CkBAIC0yMzIsNyArMjUzLDcgQEAKICAgICAgICAgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3Bvc3RfcmVxdWVzdDsKIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjU3LDcgKzI3OCw3IEBACiAgICAgICovCiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MgPQogICAgICAgICBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjkzLDcgKzMxNCw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMTYsNyArMzM3LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTY5MCw3ICs3MTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTczNSw2ICs3NTYsNyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfcG9zdF9yZXF1ZXN0ICovCiAKKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIHdyYXBwZXIKQEAgLTgwOCw3ICs4MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXROZXRUb01lZGlhVGFibGU6X21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC05NDYsNyArOTY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTEwOTYsNyArMTExOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgsIHJvd3JlcV9jdHgpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaW5ldE5ldFRvTWVkaWFUYWJsZV9jaGVja19pbmRleGVzICovCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTEyNTcsNyArMTI3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtMTMwNSw3ICsxMzI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXROZXRUb01lZGlhVGFibGU6X21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyIsICJjYWxsZWRcbiIpKTsKIApAQCAtMTM5MSw3ICsxNDEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXROZXRUb01lZGlhVGFibGU6X21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3VuZG9fc2V0dXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNDU2LDcgKzE0NzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xNTYyLDcgKzE1ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNjEwLDcgKzE2MzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0TmV0VG9NZWRpYVRhYmxlOl9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNjQ0LDcgKzE2NjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXROZXRUb01lZGlhVGFibGU6X21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3VuZG9fY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTczOCw3ICsxNzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogCkBAIC0xNzkzLDcgKzE4MTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLCBuZXRzbm1wX3JlcXVlc3RfaW5mbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3RzKQogewotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0TmV0VG9NZWRpYVRhYmxlOl9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTgyMCw3ICsxODQyLDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xOTQ2LDkgKzE5NjgsMTIgQEAKICAgICBpZl9jdHgtPmNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKIAogICAgIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKLSAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgewogICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CiAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpbmV0TmV0VG9NZWRpYVRhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgICAgICBpZiAoaWZfY3R4LT5jb250YWluZXIpCisgICAgICAgICAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImluZXROZXRUb01lZGlhVGFibGUiKTsKKyAgICB9CiAgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCiAgICAgICAgICAgICAgICAgICJpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKQEAgLTE5NzYsNiArMjAwMSw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICoKIGluZXROZXRUb01lZGlhVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGluZXROZXRUb01lZGlhVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0xOTk4LDggKzIwMjQsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKGluZXROZXRUb01lZGlhVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYwppbmRleCAxNmUyMjAwLi5mNGJiMDg1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRbXSA9IHsgSVBBRERSRVNTUFJFRklYVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZFtdID0geyBJUEFERFJFU1NQUkVGSVhUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZCk7CiAKIGlwQWRkcmVzc1ByZWZpeFRhYmxlX3JlZ2lzdHJhdGlvbiBpcEFkZHJlc3NQcmVmaXhUYWJsZV91c2VyX2NvbnRleHQ7CkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX2lkeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcEFkZHJlc3NQcmVmaXhJZkluZGV4X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc1ByZWZpeFR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaXBBZGRyZXNzUHJlZml4UHJlZml4X3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0cl9sZW4sCkBAIC0zMTgsNyArMzE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwQWRkcmVzc1ByZWZpeElmSW5kZXhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc1ByZWZpeFR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaXBBZGRyZXNzUHJlZml4UHJlZml4X3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NQcmVmaXhMZW5ndGhfdmFsKQogewpAQCAtMzk1LDEwICszOTUsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcEFkZHJlc3NQcmVmaXhPcmlnaW4gZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwQWRkcmVzc1ByZWZpeE9yaWdpbl92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCi0gICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW5fdmFsX3B0cikgPQotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlwQWRkcmVzc1ByZWZpeE9yaWdpbjsKLQotICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKKyAgICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeE9yaWdpbl92YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuaXBBZGRyZXNzUHJlZml4T3JpZ2luOworICAgIAorICAgICAgICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwQWRkcmVzc1ByZWZpeE9yaWdpbl9nZXQgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU5NCw3ICs1OTMsNyBAQAogICAgICAqIGNvcHkgKCogaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWVfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLwogICAgIGlmIChJTkVUQUREUkVTU1RZUEVfSVBWNCA9PSByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc1ByZWZpeFR5cGUpCi0gICAgICAgICgqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWVfdmFsX3B0cikgPSA0Mjk0OTY3Mjk1OyAgICAvKiBwZXIgTUlCICovCisgICAgICAgICgqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWVfdmFsX3B0cikgPSA0Mjk0OTY3Mjk1VTsgICAgLyogcGVyIE1JQiAqLwogICAgIGVsc2UKICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZV92YWxfcHRyKSA9CiAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlwQWRkcmVzc1ByZWZpeEFkdlByZWZlcnJlZExpZmV0aW1lOwpAQCAtNjYxLDcgKzY2MCw3IEBACiAgICAgICogY29weSAoKiBpcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KICAgICBpZiAoSU5FVEFERFJFU1NUWVBFX0lQVjQgPT0gcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NQcmVmaXhUeXBlKQotICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWVfdmFsX3B0cikgPSA0Mjk0OTY3Mjk1OyAgICAgICAgLyogcGVyIE1JQiAqLworICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWVfdmFsX3B0cikgPSA0Mjk0OTY3Mjk1VTsgICAgICAgIC8qIHBlciBNSUIgKi8KICAgICBlbHNlCiAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4QWR2VmFsaWRMaWZldGltZV92YWxfcHRyKSA9CiAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWU7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCmluZGV4IGRmZTk3M2UuLjI0YjIyYTIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCkBAIC0yMTEsOCArMjExLDggQEAKICAgICAgICAgKiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgKICAgICAgICAgKGlwQWRkcmVzc1ByZWZpeFRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuaCIKQEAgLTI3MSw3ICsyNzEsNyBAQAogICAgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4CiAgICAgICAgIChpcEFkZHJlc3NQcmVmaXhUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAogICAgICAgICAgbG9uZyBpcEFkZHJlc3NQcmVmaXhJZkluZGV4X3ZhbCwgdV9sb25nIGlwQWRkcmVzc1ByZWZpeFR5cGVfdmFsLAotICAgICAgICAgY2hhciAqaXBBZGRyZXNzUHJlZml4UHJlZml4X3ZhbF9wdHIsCisgICAgICAgICB1X2NoYXIgKmlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyLAogICAgICAgICAgc2l6ZV90IGlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyX2xlbiwKICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NQcmVmaXhMZW5ndGhfdmFsKTsKICAgICBpbnQKQEAgLTI3OSw3ICsyNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwQWRkcmVzc1ByZWZpeElmSW5kZXhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBBZGRyZXNzUHJlZml4VHlwZV92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICppcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyX2xlbiwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaAppbmRleCA2NmYyMTA5Li41ZWNhZGU0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uc3RhbnRzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oCkBAIC0xMzcsMyArMTM3LDE3IEBACiB9CiAjZW5kaWYKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBBRERSRVNTUFJFRklYVEFCTEVfT0lEU19IICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBBZGRpdGlvbmFsIGNvbnN0YW50cyBhbmQgZGVmaW5pdGlvbnMgZm9yIGNvbW1vbiBpbXBsZW1lbnRhdGlvbgorKi8KKyNkZWZpbmUgSU5GSU5JVFlfTElGRV9USU1FICAgICAgMHhGRkZGRkZGRlUKKyNkZWZpbmUgTklQNihhZGRyKSBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMF0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMV0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMl0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbM10pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNF0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNV0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNl0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbN10pCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggMmY2NGNiZS4uNDQzNzgyOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0yMSw2ICsyMiwxMCBAQAogCiAjaW5jbHVkZSAiaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwQWRkcmVzc1RhYmxlX2NvbnRhaW5lcl9nZXQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcGFkZHJlc3NfY29tbW9uX2NvcHlfdXRpbGl0aWVzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX3ByZWZpeF9jb3B5KQorCiAvKiogQGluZ3JvdXAgaW50ZXJmYWNlIAogICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCiAgKgpAQCAtMjAyLDcgKzIwNyw3IEBACiAgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqYWRkcl9yb3dyZXFfY3R4OwogICAgIG5ldHNubXBfY29udGFpbmVyICphZGRyX2NvbnRhaW5lcjsKICAgICBuZXRzbm1wX2l0ZXJhdG9yICphZGRyX2l0OwotICAgIHNpemVfdCAgICAgICAgICBjb3VudCA9IDA7CisgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMDsKICAgICB1X2NoYXIgICAgICAgICAgdG1wX3BmeFtORVRTTk1QX0FDQ0VTU19JUEFERFJFU1NfQlVGX1NJWkVdOwogCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBBZGRyZXNzUHJlZml4VGFibGU6aXBBZGRyZXNzUHJlZml4VGFibGVfY29udGFpbmVyX2xvYWQiLCAiY2FsbGVkXG4iKSk7CkBAIC0yNTEsNiArMjU2LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhX2FkZHJlc3NfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3Jvd3JlcV9jdHgtPmRhdGEtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9wcmVmaXhfbGVuKTsKKyAgICAgICAgbmV0c25tcF9pcGFkZHJlc3NfZmxhZ3NfY29weSgmcm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT5kYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvd3JlcV9jdHgtPmRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9wcmVmZXJlZF9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV92YWxpZF9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9vbmxpbmtfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9hdXRvbm9tb3VzX2ZsYWcpOworCiAgICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPQogICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfaW5kZXhlc19zZXQocm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+CkBAIC0yNzgsOCArMzAwLDE0IEBACiAgICAgICAgICAqIFRPRE86MzUyOnI6IHwgICB8LT4gcG9wdWxhdGUgaXBBZGRyZXNzUHJlZml4VGFibGUgZGF0YSBjb250ZXh0LgogICAgICAgICAgKiBQb3B1bGF0ZSBkYXRhIGNvbnRleHQgaGVyZS4gKG9wdGlvbmFsbHksIGRlbGF5IHVudGlsIHJvdyBwcmVwKQogICAgICAgICAgKi8KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pcEFkZHJlc3NQcmVmaXhPcmlnaW4gPQotICAgICAgICAgICAgYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT5pYV9vcmlnaW47CisgICAgICAgICAgIG5ldHNubXBfaXBhZGRyZXNzX3ByZWZpeF9vcmlnaW5fY29weSgmcm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3Jvd3JlcV9jdHgtPmRhdGEtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3Jvd3JlcV9jdHgtPnRibF9pZHguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZSk7CiAKICAgICAgICAgLyoqIGRlZmVyIHRoZSByZXN0IHRpbCByb3cgcHJlcCAqLwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMKaW5kZXggMTkwOWE0Yi4uZTE0YTMzNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDYsNiArNDcsMTYgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NwcmVmaXh0YWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgsIGlwYWRkcmVzc3ByZWZpeHRhYmxlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NwcmVmaXh0YWJsZV9jb250YWluZXJfZ2V0LCBpcGFkZHJlc3NwcmVmaXh0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaXBhZGRyZXNzcHJlZml4dGFibGVfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQWRkcmVzc1ByZWZpeFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwYWRkcmVzc3ByZWZpeHRhYmxlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcEFkZHJlc3NQcmVmaXhUYWJsZV9jb250YWluZXJfc2l6ZSwgaXBhZGRyZXNzcHJlZml4dGFibGVfYWxsKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgxLDE4ICs5MiwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZl9jdHgpOwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwQWRkcmVzc1ByZWZpeFRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uX3NldChpcEFkZHJlc3NQcmVmaXhUYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCkBAIC0xMDIsMTIgKzExOCwxNSBAQAogICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaXBBZGRyZXNzUHJlZml4VGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBBZGRyZXNzUHJlZml4VGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiAvKgogICogbWZkIG11bHRpcGxleGVyIG1vZGVzCkBAIC0xNTUsNyArMTc0LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBBRERSRVNTUFJFRklYVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQQUREUkVTU1BSRUZJWFRBQkxFX01BWF9DT0w7CkBAIC0yMjksNyArMjQ4LDggQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAvKiBYWFggLSBhcmUgdGhlc2UgYWN0dWFsbHkgbmVjZXNzYXJ5PyAqLwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMjUyLDcgKzI3Miw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC04NDksNyArODY5LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcEFkZHJlc3NQcmVmaXhUYWJsZV9nZXRfdmFsdWVzICovCiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTAxNCw2ICsxMDM0LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9ST1dfRklORF9CWV9NSUJfSU5ERVgKIGlwQWRkcmVzc1ByZWZpeFRhYmxlX3Jvd3JlcV9jdHggKgogaXBBZGRyZXNzUHJlZml4VGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwQWRkcmVzc1ByZWZpeFRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTEwNDEsMyArMTA2Miw0IEBACiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1BSRUZJWFRBQkxFX1JPV19GSU5EX0JZX01JQl9JTkRFWCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYwppbmRleCA4NDhjNjNkLi5kZWZmNGU5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYwpAQCAtMTQsNiArMTQsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMjgsOCArMjksMTIgQEAKIAogI2luY2x1ZGUgImlwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaXBBZGRyZXNzVGFibGVfb2lkW10gPSB7IElQQUREUkVTU1RBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIGlwQWRkcmVzc1RhYmxlX29pZF9zaXplID0gT0lEX0xFTkdUSChpcEFkZHJlc3NUYWJsZV9vaWQpOworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX2VudHJ5X2NvcHkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcGFkZHJlc3NfcHJlZml4X2NvcHkpCisKK2NvbnN0IG9pZCAgICAgICBpcEFkZHJlc3NUYWJsZV9vaWRbXSA9IHsgSVBBRERSRVNTVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaXBBZGRyZXNzVGFibGVfb2lkX3NpemUgPSBPSURfTEVOR1RIKGlwQWRkcmVzc1RhYmxlX29pZCk7CiAKIGlwQWRkcmVzc1RhYmxlX3JlZ2lzdHJhdGlvbiBpcEFkZHJlc3NUYWJsZV91c2VyX2NvbnRleHQ7CiBzdGF0aWMgaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uICppcEFkZHJlc3NUYWJsZV91c2VyX2NvbnRleHRfcDsKQEAgLTMzMyw4ICszMzgsOCBAQAogICogIE90aGVyd2lzZSwganVzdCBkbyBhIGRpcmVjdCBjb3B5LgogICovCiBpbnQKLWlwQWRkcmVzc0FkZHJUeXBlX21hcCh1X2xvbmcgKiBtaWJfaXBBZGRyZXNzQWRkclR5cGVfdmFsX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgcmF3X2lwQWRkcmVzc0FkZHJUeXBlX3ZhbCkKK2lwQWRkcmVzc0FkZHJUeXBlX21hcChsb25nICogbWliX2lwQWRkcmVzc0FkZHJUeXBlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgbG9uZyByYXdfaXBBZGRyZXNzQWRkclR5cGVfdmFsKQogewogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gbWliX2lwQWRkcmVzc0FkZHJUeXBlX3ZhbF9wdHIpOwogCkBAIC0zODIsOCArMzg3LDggQEAKICAqLwogaW50CiBpcEFkZHJlc3NUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGlwQWRkcmVzc1RhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NBZGRyVHlwZV92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcEFkZHJlc3NBZGRyVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqaXBBZGRyZXNzQWRkcl92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXBBZGRyZXNzQWRkcl92YWxfcHRyX2xlbikKIHsKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcEFkZHJlc3NUYWJsZTppcEFkZHJlc3NUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4IiwgImNhbGxlZFxuIikpOwpAQCAtNDMxLDcgKzQzNiw3IEBACiBpbnQKIGlwQWRkcmVzc1RhYmxlX2luZGV4ZXNfc2V0KGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc0FkZHJUeXBlX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqaXBBZGRyZXNzQWRkcl92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlwQWRkcmVzc0FkZHJfdmFsX3B0cl9sZW4pCiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBBZGRyZXNzVGFibGU6aXBBZGRyZXNzVGFibGVfaW5kZXhlc19zZXQiLApAQCAtNjI2LDcgKzYzMSw3IEBACiAgICAgb2lkICAgICAgICAgICAgKmRzdCwgdG1wX29pZFtNQVhfT0lEX0xFTl0gPQogICAgICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1IH07CiAgICAgdV9jaGFyICAgICAgICAgIHRtcF9idWZbTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0JVRl9TSVpFXTsKLSAgICBpbnQgICAgICAgICAgICAgbGVuOworICAgIHNpemVfdCAgICAgICAgICBsZW47CiAKICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCiAgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfcHRyKQpAQCAtNjU3LDcgKzY2Miw3IEBACiAKICAgICBsZW4gKj0gc2l6ZW9mKCgqaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfcHRyKVswXSk7CiAgICAgaWYgKCgqaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfbGVuX3B0cikgPCBsZW4pIHsKLSAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhfdmFsX3B0cl9wdHIpID0gbWFsbG9jKGxlbik7CisgICAgICAgICgqaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfcHRyKSA9IChvaWQqKW1hbGxvYyhsZW4pOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlwQWRkcmVzc1ByZWZpeF92YWxfcHRyX3B0cikpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKICAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CkBAIC05NDQsNyArOTQ5LDEwIEBACiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcEFkZHJlc3NSb3dTdGF0dXNfdmFsX3B0cik7CiAKICAgICAvKiogV0FSTklORzogdGhpcyBjb2RlIG1pZ2h0IG5vdCB3b3JrIGZvciBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqLwotICAgICgqaXBBZGRyZXNzUm93U3RhdHVzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+aXBBZGRyZXNzUm93U3RhdHVzOworICAgIGlmKHJvd3JlcV9jdHgtPmRhdGEtPmlmX2luZGV4KQorICAgICAgICgqaXBBZGRyZXNzUm93U3RhdHVzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+aXBBZGRyZXNzUm93U3RhdHVzOworICAgIGVsc2UKKyAgICAgICAoKmlwQWRkcmVzc1Jvd1N0YXR1c192YWxfcHRyKSA9IFJPV1NUQVRVU19OT1RSRUFEWTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBBZGRyZXNzUm93U3RhdHVzX2dldCAqLwpAQCAtMTQ2OSw3ICsxNDc3LDcgQEAKICAgICAvKgogICAgICAqIGlmIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCwgYWNjZXB0IGl0LgogICAgICAqLwotICAgIGlmIChpcEFkZHJlc3NJZkluZGV4X3ZhbCA9PSByb3dyZXFfY3R4LT5kYXRhLT5pZl9pbmRleCkKKyAgICBpZiAoaXBBZGRyZXNzSWZJbmRleF92YWwgPT0gKGxvbmcpcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXgpCiAgICAgICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIAogICAgIC8qCkBAIC0xNDg2LDcgKzE0OTQsNyBAQAogICAgICAqIGZpbmQgbmFtZSBmb3IgaWZJbmRleAogICAgICAqLwogICAgIGlmIChOVUxMID09IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9uYW1lX2ZpbmQoaXBBZGRyZXNzSWZJbmRleF92YWwpKSB7Ci0gICAgICAgIERFQlVHTVNHVCgoImlwQWRkcmVzc1RhYmxlIiwgImNhbnQgZmluZCBuYW1lIGZvciBpbmRleCAlZFxuIiwKKyAgICAgICAgREVCVUdNU0dUKCgiaXBBZGRyZXNzVGFibGUiLCAiY2FudCBmaW5kIG5hbWUgZm9yIGluZGV4ICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NJZkluZGV4X3ZhbCkpOwogICAgICAgICByZXR1cm4gTUZEX05PVF9WQUxJRF9OT1c7CiAgICAgfQpAQCAtMTU1Niw4ICsxNTY0LDggQEAKICAgICAgKiBUT0RPOjQ2MTpNOiB8LT4gU2V0IGlwQWRkcmVzc0lmSW5kZXggdmFsdWUuCiAgICAgICogc2V0IGlwQWRkcmVzc0lmSW5kZXggdmFsdWUgaW4gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLwotICAgIGlmIChyb3dyZXFfY3R4LT5kYXRhLT5pZl9pbmRleCAhPSBpcEFkZHJlc3NJZkluZGV4X3ZhbCkKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXggPSBpcEFkZHJlc3NJZkluZGV4X3ZhbDsKKyAgICBpZiAocm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXggIT0gKG9pZClpcEFkZHJlc3NJZkluZGV4X3ZhbCkKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXggID0gKG9pZClpcEFkZHJlc3NJZkluZGV4X3ZhbDsKICAgICBlbHNlCiAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgJj0gfkNPTFVNTl9JUEFERFJFU1NJRklOREVYX0ZMQUc7CiAKQEAgLTIwMzIsNyArMjA0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NSb3dTdGF0dXNfdmFsKTsKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImlwQWRkcmVzc1RhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgInJvdyBzdGF0dXMgdHJhbnNpdGlvbiBmcm9tICVkIHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAicm93IHN0YXR1cyB0cmFuc2l0aW9uIGZyb20gJWQgdG8gJWx1XG4iLAogICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5pcEFkZHJlc3NSb3dTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1Jvd1N0YXR1c192YWwpKTsKICAgICAgICAgcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaAppbmRleCA1MGFkMTg4Li5mZThmMDRhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaApAQCAtOTYsMTMgKzk2LDEzIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGlwQWRkcmVzc0FkZHJUeXBlKDEpL0luZXRBZGRyZXNzVHlwZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2gKICAgICAgICAgICovCi0gICAgICAgIHVfbG9uZyAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZTsKKyAgICAgICAgbG9uZyAgICAgICAgICAgIGlwQWRkcmVzc0FkZHJUeXBlOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGlwQWRkcmVzc0FkZHIoMikvSW5ldEFkZHJlc3MvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML2Evdy9lL1IvZC9oCiAgICAgICAgICAqLwogICAgICAgICAvKiogMTI4IC0gMShvdGhlciBpbmRleGVzKSAtIG9pZCBsZW5ndGgoMTApID0gMTE2ICovCi0gICAgICAgIGNoYXIgICAgICAgICAgICBpcEFkZHJlc3NBZGRyWzExNl07CisgICAgICAgIHVfY2hhciAgICAgICAgICBpcEFkZHJlc3NBZGRyWzExNl07CiAgICAgICAgIHNpemVfdCAgICAgICAgICBpcEFkZHJlc3NBZGRyX2xlbjsKIAogCkBAIC0xOTcsOCArMTk3LDggQEAKICAgICAgICAgKiBpcEFkZHJlc3NUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaXBBZGRyZXNzVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaXBBZGRyZXNzVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIGlwQWRkcmVzc1RhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcEFkZHJlc3NUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXBBZGRyZXNzVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgImlwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5oIgpAQCAtMjI3LDkgKzIyNyw5IEBACiAgICAgLyoKICAgICAgKiBpbmRleGVzCiAgICAgICovCi0gICAgaW50ICAgICAgICAgICAgIGlwQWRkcmVzc0FkZHJUeXBlX21hcCh1X2xvbmcgKgorICAgIGludCAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZV9tYXAobG9uZyAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaXBBZGRyZXNzQWRkclR5cGVfdmFsX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3X2lwQWRkcmVzc0FkZHJUeXBlX3ZhbCk7CiAKICAgICBpbnQgICAgICAgICAgICAgaXBBZGRyZXNzSWZJbmRleF9nZXQoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqCkBAIC0yNzAsMTUgKzI3MCwxNSBAQAogICAgIGludAogICAgICAgICBpcEFkZHJlc3NUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGlwQWRkcmVzc1RhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX2lkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBBZGRyZXNzQWRkclR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwQWRkcmVzc0FkZHJUeXBlX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAgaXBBZGRyZXNzVGFibGVfaW5kZXhlc19zZXQoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZV92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICppcEFkZHJlc3NBZGRyX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyX3ZhbF9wdHJfbGVuKTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBhMGQ4YzRhLi5kODBiM2U3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtOCw2ICs4LDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTIyLDYgKzIzLDggQEAKICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfbGlmbykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwYWRkcmVzc19lbnRyeV91cGRhdGUpCiAKIC8qKiBAaW5ncm91cCBpbnRlcmZhY2UgCiAgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKQEAgLTEzNCw2ICsxMzcsNyBAQAogICAgICpjb250YWluZXJfcHRyX3B0ciA9CiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImlwQWRkcmVzc1RhYmxlOnRhYmxlX2NvbnRhaW5lciIpOwogICAgIGlmIChOVUxMICE9ICpjb250YWluZXJfcHRyX3B0cikgeworICAgICAgICAoKmNvbnRhaW5lcl9wdHJfcHRyKS0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImlwQWRkcmVzc1RhYmxlIik7CiAgICAgICAgIGlwQWRkcmVzc1RhYmxlX2NvbnRhaW5lcl9sb2FkKCpjb250YWluZXJfcHRyX3B0cik7CiAgICAgICAgIENPTlRBSU5FUl9GT1JfRUFDSCgqY29udGFpbmVyX3B0cl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NsZWFyX3RpbWVzLApAQCAtMjAxLDEzICsyMDUsMTMgQEAKIF9jaGVja19lbnRyeV9mb3JfdXBkYXRlcyhpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqbWFnaWMpCiB7Ci0gICAgbmV0c25tcF9jb250YWluZXIgKmlwYWRkcmVzc19jb250YWluZXIgPSBtYWdpY1swXTsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG9fZGVsZXRlID0gKG5ldHNubXBfY29udGFpbmVyICopIG1hZ2ljWzFdOworICAgIG5ldHNubXBfY29udGFpbmVyICppcGFkZHJlc3NfY29udGFpbmVyID0gKG5ldHNubXBfY29udGFpbmVyKiltYWdpY1swXTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG9fZGVsZXRlICAgICAgICAgICA9IChuZXRzbm1wX2NvbnRhaW5lciopbWFnaWNbMV07CiAKICAgICAvKgogICAgICAqIGNoZWNrIGZvciBtYXRjaGluZyBlbnRyeSB1c2luZyBzZWNvbmRhcnkgaW5kZXguCiAgICAgICovCi0gICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmlwYWRkcmVzc19lbnRyeSA9CisgICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmlwYWRkcmVzc19lbnRyeSA9IChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKGlwYWRkcmVzc19jb250YWluZXIsIHJvd3JlcV9jdHgtPmRhdGEpOwogICAgIGlmIChOVUxMID09IGlwYWRkcmVzc19lbnRyeSkgewogICAgICAgICBERUJVR01TR1RMKCgiaXBBZGRyZXNzVGFibGU6YWNjZXNzIiwgInJlbW92aW5nIG1pc3NpbmcgZW50cnlcbiIpKTsKQEAgLTI1OSw3ICsyNjMsNyBAQAogICAgICAgICAoTUZEX1NVQ0NFU1MgPT0KICAgICAgICAgIGlwQWRkcmVzc1RhYmxlX2luZGV4ZXNfc2V0KHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3NfZW50cnktPmlhX2FkZHJlc3NfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgaXBhZGRyZXNzX2VudHJ5LT5pYV9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzX2VudHJ5LT5pYV9hZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzX2VudHJ5LT5pYV9hZGRyZXNzX2xlbikpKSB7CiAgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCkgPCAwKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMICgoImlwQWRkcmVzc1RhYmxlOmFjY2VzcyIsImNvbnRhaW5lciBpbnNlcnQgZmFpbGVkIGZvciBuZXcgZW50cnlcbiIpKTsKQEAgLTM3OSw3ICszODMsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIGdldCBmcm9tIGRlbGV0ZSBsaXN0CiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRtcF9jdHggPSBDT05UQUlORVJfRklSU1QodG1wX2NvbnRhaW5lcik7CisgICAgICAgICAgICB0bXBfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKUNPTlRBSU5FUl9GSVJTVCh0bXBfY29udGFpbmVyKTsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHJlbGVhc2UgY29udGV4dCwgZGVsZXRlIGZyb20gdGFibGUgY29udGFpbmVyCkBAIC0zOTUsNyArMzk5LDcgQEAKICAgICB9CiAKICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwQWRkcmVzc1RhYmxlOmlwQWRkcmVzc1RhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlbHUgcmVjb3Jkc1xuIiwgKHVuc2lnbmVkIGxvbmcpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfQpAQCAtNjcyLDkgKzY3Niw5IEBACiAgICAgICogVE9ETzo0MzA6TTogfC0+IFZhbGlkYXRlIHBvdGVudGlhbCBpcEFkZHJlc3NUYWJsZSBpbmRleC4KICAgICAgKgogICAgICAqCi0gICAgICogeHh4LXJrczogd2Ugb25seSBwbGFuIGlwdjQgc3VwcG9ydCBpbml0aWFsbHkKICAgICAgKi8KLSAgICBpZiAoKDQgIT0gcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyX2xlbikpIHsKKyAgICBpZiAoKDQgIT0gcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyX2xlbikKKyAgICAgICAgICAgICYmICgxNiAhPSByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc0FkZHJfbGVuKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgImludmFsaWQgaW5kZXggZm9yIGEgbmV3IHJvdyBpbiB0aGUgIgogICAgICAgICAgICAgICAgICAiaXBBZGRyZXNzVGFibGUgdGFibGUuXG4iKTsKICAgICAgICAgLyoKQEAgLTY5MSwxNSArNjk1LDkgQEAKICAgICAgICAgICAgIHJldHVybiBNRkRfQ0FOTk9UX0NSRUFURV9OT1c7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5pYV9hZGRyZXNzWzBdID0KLSAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkclswXTsKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzc1sxXSA9Ci0gICAgICAgICAgICByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc0FkZHJbMV07Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmlhX2FkZHJlc3NbMl0gPQotICAgICAgICAgICAgcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyWzJdOwotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5pYV9hZGRyZXNzWzNdID0KLSAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkclszXTsKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzc19sZW4gPSA0OworICAgICAgICBtZW1jcHkocm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzcywgcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyLAorICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkcl9sZW4pOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5pYV9hZGRyZXNzX2xlbiA9IHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkcl9sZW47CiAgICAgfQogCiAgICAgcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jCmluZGV4IDBjODUwNzMuLjQ4NzcwYjAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE5IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcEFkZHJlc3NUYWJsZV9jb250YWluZXJfc2l6ZSwgaXBBZGRyZXNzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQWRkcmVzc1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwQWRkcmVzc1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpcEFkZHJlc3NUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX2dldCwgaXBBZGRyZXNzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgwLDE5ICs5NCwyMyBAQAogc3RhdGljIHZvaWQKICAgICAgICAgICAgICAgICBfaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwQWRkcmVzc1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpcEFkZHJlc3NUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwQWRkcmVzc1RhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcEFkZHJlc3NUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uX3NldChpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCiB7CkBAIC0xMDAsMTIgKzExOCwxNSBAQAogICAgIGlwQWRkcmVzc1RhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBBZGRyZXNzVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiB1X2ludAogaXBBZGRyZXNzVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMjksNyArMTUwLDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQWRkcmVzc1RhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQWRkcmVzc1RhYmxlX29iamVjdF9sb29rdXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcEFkZHJlc3NUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcEFkZHJlc3NUYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBBZGRyZXNzVGFibGVfdW5kb19zZXR1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQWRkcmVzc1RhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDQsNyArMTY1LDcgQEAKICAgICAgICAgICAgICAgICBfaXBBZGRyZXNzVGFibGVfdW5kb19jb2x1bW4oaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbik7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIE5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKICAgICAgICAgICAgICAgICBfaXBBZGRyZXNzVGFibGVfY2hlY2tfaW5kZXhlcyhpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CkBAIC0xODQsNyArMjA1LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBBRERSRVNTVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQQUREUkVTU1RBQkxFX01BWF9DT0w7CkBAIC0yMjIsNyArMjQzLDcgQEAKICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCA9IF9tZmRfaXBBZGRyZXNzVGFibGVfcG9zdF9yZXF1ZXN0OwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yNDYsNyArMjY3LDcgQEAKICAgICAgKi8KICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcyA9CiAgICAgICAgIF9tZmRfaXBBZGRyZXNzVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjgyLDcgKzMwMyw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMDUsNyArMzI2LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTY0MCw3ICs2NjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtNjg2LDYgKzcwNyw3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBBZGRyZXNzVGFibGVfcG9zdF9yZXF1ZXN0ICovCiAKKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIHdyYXBwZXIKQEAgLTc1OCw3ICs3ODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcEFkZHJlc3NUYWJsZTpfbWZkX2lwQWRkcmVzc1RhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC05MzMsNyArOTU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTA2MCw3ICsxMDgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcEFkZHJlc3NUYWJsZV9jaGVja19pbmRleGVzICovCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTEyOTEsNyArMTMxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CkBAIC0xMzM4LDcgKzEzNjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQWRkcmVzc1RhYmxlOl9tZmRfaXBBZGRyZXNzVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzIiwgImNhbGxlZFxuIikpOwogCkBAIC0xNDM3LDcgKzE0NTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQWRkcmVzc1RhYmxlOl9tZmRfaXBBZGRyZXNzVGFibGVfdW5kb19zZXR1cCIsCkBAIC0xNTAyLDcgKzE1MjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKQEAgLTE2MjEsNyArMTY0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTY2OSw3ICsxNjkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQWRkcmVzc1RhYmxlOl9tZmRfaXBBZGRyZXNzVGFibGVfY29tbWl0IiwKQEAgLTE3MDMsNyArMTcyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQWRkcmVzc1RhYmxlOl9tZmRfaXBBZGRyZXNzVGFibGVfdW5kb19jb21taXQiLApAQCAtMTgxMSw3ICsxODMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTg2Niw3ICsxODg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcEFkZHJlc3NUYWJsZTpfbWZkX2lwQWRkcmVzc1RhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xODkyLDcgKzE5MTQsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBBZGRyZXNzVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yMDQxLDYgKzIwNjMsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqCiBpcEFkZHJlc3NUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaXBBZGRyZXNzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKIHsKQEAgLTIwNjIsNyArMjA4NSw4IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChpcEFkZHJlc3NUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisgICAgcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklORChpcEFkZHJlc3NUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGVkODRiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgKQEAgLTAsMCArMSw1IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGUzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qKiBccGFnZSBNRkQgaGVscGVyIGZvciBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICoKKyAqIFxzZWN0aW9uIGludHJvIEludHJvZHVjdGlvbgorICogSW50cm9kdWN0b3J5IHRleHQuCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CisKKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaCIKKworY29uc3Qgb2lkICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZFtdID0geyBJUERFRkFVTFRST1VURVJUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRfc2l6ZSA9CitPSURfTEVOR1RIKGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZCk7CisKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiBpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHQ7CitzdGF0aWMgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICppcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcDsKKwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCk7CisKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgaXBEZWZhdWx0Um91dGVyVGFibGUgbW9kdWxlCisgKi8KK3ZvaWQKK2luaXRfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppbml0X2lwRGVmYXVsdFJvdXRlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAwOm86IFBlcmZvcm0gaXBEZWZhdWx0Um91dGVyVGFibGUgb25lLXRpbWUgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZworICAgICAqLworICAgIGlmIChzaG91bGRfaW5pdCgiaXBEZWZhdWx0Um91dGVyVGFibGUiKSkKKyAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSgpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRfaXBEZWZhdWx0Um91dGVyVGFibGUgKi8KKworLyoqCisgKiBTaHV0LWRvd24gdGhlIGlwRGVmYXVsdFJvdXRlclRhYmxlIG1vZHVsZSAoYWdlbnQgaXMgZXhpdGluZykKKyAqLwordm9pZAorc2h1dGRvd25faXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCkKK3sKKyAgICBpZiAoc2hvdWxkX2luaXQoImlwRGVmYXVsdFJvdXRlclRhYmxlIikpCisgICAgICAgIHNodXRkb3duX3RhYmxlX2lwRGVmYXVsdFJvdXRlclRhYmxlKCk7CisKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpCit7CisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aW5pdGlhbGl6ZV90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDE6bzogUGVyZm9ybSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBvbmUtdGltZSB0YWJsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogVE9ETzozMDI6bzogfC0+SW5pdGlhbGl6ZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSB1c2VyIGNvbnRleHQKKyAgICAgKiBpZiB5b3UnZCBsaWtlIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIHNvbWUgZGF0YSBmb3IgdGhpcworICAgICAqIHRhYmxlLCBhbGxvY2F0ZSBvciBzZXQgaXQgdXAgaGVyZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGEgbmV0c25tcF9kYXRhX2xpc3QgaXMgYSBzaW1wbGUgd2F5IHRvIHN0b3JlIHZvaWQgcG9pbnRlcnMuIEEgc2ltcGxlCisgICAgICogc3RyaW5nIHRva2VuIGlzIHVzZWQgdG8gYWRkLCBmaW5kIG9yIHJlbW92ZSBwb2ludGVycy4KKyAgICAgKi8KKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcCA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdCgiaXBEZWZhdWx0Um91dGVyVGFibGUiLCBOVUxMLCBOVUxMKTsKKworICAgIC8qCisgICAgICogTm8gc3VwcG9ydCBmb3IgYW55IGZsYWdzIHlldCwgYnV0IGluIHRoZSBmdXR1cmUgeW91IHdvdWxkCisgICAgICogc2V0IGFueSBmbGFncyBoZXJlLgorICAgICAqLworICAgIGZsYWdzID0gMDsKKworICAgIC8qCisgICAgICogY2FsbCBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gY29kZQorICAgICAqLworICAgIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZQorCShpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcCwgZmxhZ3MpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0aWFsaXplX3RhYmxlX2lwRGVmYXVsdFJvdXRlclRhYmxlICovCisKKy8qKgorICogU2h1dGRvd24gdGhlIHRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlIAorICovCit2b2lkCitzaHV0ZG93bl90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSh2b2lkKQoreworICAgIC8qCisgICAgICogY2FsbCBpbnRlcmZhY2Ugc2h1dGRvd24gY29kZQorICAgICAqLworICAgIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UKKyAgICAgICAgKGlwRGVmYXVsdFJvdXRlclRhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfdXNlcl9jb250ZXh0X3AgPSBOVUxMOworfQorCisvKioKKyAqIGV4dHJhIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gKGVnIGRlZmF1bHQgdmFsdWVzKQorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4ICAgIDogcm93IHJlcXVlc3QgY29udGV4dAorICogQHBhcmFtIHVzZXJfaW5pdF9jdHggOiB2b2lkIHBvaW50ZXIgZm9yIHVzZXIgKHBhcmFtZXRlciB0byByb3dyZXFfY3R4X2FsbG9jYXRlKQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgIDogbm8gZXJyb3JzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICA6IGVycm9yIChjb250ZXh0IGFsbG9jYXRlIHdpbGwgZmFpbCkKKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIxMDpvOiB8LT4gUGVyZm9ybSBleHRyYSBpcERlZmF1bHRSb3V0ZXJUYWJsZSByb3dyZXEgaW5pdGlhbGl6YXRpb24uIChlZyBERUZWQUxTKQorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQgKi8KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGNsZWFudXAKKyAqCisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwRGVmYXVsdFJvdXRlclRhYmxlIHJvd3JlcSBjbGVhbnVwLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShyb3dyZXFfY3R4LT5kYXRhKTsKKyAgICByb3dyZXFfY3R4LT5kYXRhID0gTlVMTDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCisKKy8qKgorICogcHJlLXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvcgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2NvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTEwOm86IFBlcmZvcm0gaXBEZWZhdWx0Um91dGVyVGFibGUgcHJlLXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBwb3N0LXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBOb3RlOgorICogICBOZXcgcm93cyBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyLCBhbmQKKyAqICAgZGVsZXRlZCByb3dzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lciBhbmQKKyAqICAgcmVsZWFzZWQuCisgKgorICogQHBhcmFtIHVzZXJfY29udGV4dAorICogQHBhcmFtIHJjIDogTUZEX1NVQ0NFU1MgaWYgYWxsIHJlcXVlc3RzIHN1Y2NlZWRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IG90aGVyIGVycm9yIChpZ25vcmVkKQorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCwgaW50IHJjKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTE6bzogUGVyZm9ybSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBwb3N0LXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKworLyoqIEB7ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZWYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9ICisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBtaXNjIG1pc2M6IE1pc2NlbGxhbmVvdXMgcm91dGluZXMKKyAqCisgKiBAeworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oPgorCisgICAgLyoKKyAgICAgKiBvdGhlciByZXF1aXJlZCBtb2R1bGUgY29tcG9uZW50cyAKKyAgICAgKi8KKyAgICAvKiAqSU5ERU5ULU9GRiogICovCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcikKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQpCisgICAgLyogKklOREVOVC1PTiogICovCisKKyAgICAvKgorICAgICAqIE9JRCBhbmQgY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGUgCisgICAgICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkcy5oIgorCisgICAgLyoKKyAgICAgKiBlbnVtIGRlZmluaW9ucyAKKyAgICAgKi8KKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oIgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGluaXRfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpOworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUgaXMgc3ViaWQgMzcgb2YgaXAuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcsIGxlbmd0aDogOAorICAgICAqLworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFdoZW4geW91IHJlZ2lzdGVyIHlvdXIgbWliLCB5b3UgZ2V0IHRvIHByb3ZpZGUgYSBnZW5lcmljCisgICAgICogcG9pbnRlciB0aGF0IHdpbGwgYmUgcGFzc2VkIGJhY2sgdG8geW91IGZvciBtb3N0IG9mIHRoZQorICAgICAqIGZ1bmN0aW9ucyBjYWxscy4KKyAgICAgKgorICAgICAqIFRPRE86MTAwOnI6IFJldmlldyBhbGwgY29udGV4dCBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBUT0RPOjEwMTpvOiB8LT4gUmV2aWV3IGlwRGVmYXVsdFJvdXRlclRhYmxlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF9kYXRhX2xpc3QgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFRPRE86MTEwOnI6IHwtPiBSZXZpZXcgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBjb250ZXh0IHN0cnVjdHVyZS4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YTsKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMDpyOiB8LT4gUmV2aWV3IGlwRGVmYXVsdFJvdXRlclRhYmxlIG1pYiBpbmRleC4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW5kZXggZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleF9zIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSgxKS9JbmV0QWRkcmVzc1R5cGUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGU7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzcygyKS9JbmV0QWRkcmVzcy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvYS93L2UvUi9kL2gKKyAgICAgICAgICovCisgICAgICAgIC8qKiAxMjggLSAyKG90aGVyIGluZGV4ZXMpIC0gb2lkIGxlbmd0aCgxMCkgPSAxMTUgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NbMTE1XTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfbGVuOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwRGVmYXVsdFJvdXRlcklmSW5kZXgoMykvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAgICAgKi8KKyAgICAgICAgbG9uZyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlcklmSW5kZXg7CisKKworICAgIH0gaXBEZWZhdWx0Um91dGVyVGFibGVfbWliX2luZGV4OworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMTpyOiB8ICAgfC0+IFJldmlldyBpcERlZmF1bHRSb3V0ZXJUYWJsZSBtYXggaW5kZXggbGVuZ3RoLgorICAgICAqIElmIHlvdSBLTk9XIHRoYXQgeW91ciBpbmRleGVzIHdpbGwgbmV2ZXIgZXhjZWVkIGEgY2VydGFpbgorICAgICAqIGxlbmd0aCwgdXBkYXRlIHRoaXMgbWFjcm8gdG8gdGhhdCBsZW5ndGguCisgICAgICoKKyAgICAgKiBCRSBWRVJZIENBUkVGVUwgVE8gVEFLRSBJTlRPIEFDQ09VTlQgVEhFIE1BWElNVU0KKyAgICAgKiBQT1NTSUJMRSBMRU5HSFQgRk9SIEVWRVJZIFZBUklBQkxFIExFTkdUSCBJTkRFWCEKKyAgICAgKiBHdWVzc2luZyAxMjggLSBjb2wvZW50cnkoMikgIC0gb2lkIGxlbig4KQorICAgICAqLworI2RlZmluZSBNQVhfaXBEZWZhdWx0Um91dGVyVGFibGVfSURYX0xFTiAgICAgMTE4CisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTMwOm86IHwtPiBSZXZpZXcgaXBEZWZhdWx0Um91dGVyVGFibGUgUm93IHJlcXVlc3QgKHJvd3JlcSkgY29udGV4dC4KKyAgICAgKiBXaGVuIHlvdXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHlvdSB3aWxsIGJlIHBhc3NlZCBhCisgICAgICogaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCBwb2ludGVyLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfcyB7CisKKyAgICAvKiogdGhpcyBtdXN0IGJlIGZpcnN0IGZvciBjb250YWluZXIgY29tcGFyZSB0byB3b3JrICovCisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgICAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfaXBEZWZhdWx0Um91dGVyVGFibGVfSURYX0xFTl07CisKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfbWliX2luZGV4IHRibF9pZHg7CisKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqZGF0YTsKKworICAgICAgICAvKgorICAgICAgICAgKiBmbGFncyBwZXIgcm93LiBDdXJyZW50bHksIHRoZSBmaXJzdCAobG93ZXIpIDggYml0cyBhcmUgcmVzZXJ2ZWQKKyAgICAgICAgICogZm9yIHRoZSB1c2VyLiBTZWUgbWZkLmggZm9yIG90aGVyIGZsYWdzLgorICAgICAgICAgKi8KKyAgICAgICAgdV9pbnQgICAgICAgICAgIHJvd3JlcV9mbGFnczsKKworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjEzMTpvOiB8ICAgfC0+IEFkZCB1c2VmdWwgZGF0YSB0byBpcERlZmF1bHRSb3V0ZXJUYWJsZSByb3dyZXEgY29udGV4dC4KKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogc3RvcmFnZSBmb3IgZnV0dXJlIGV4cGFuc2lvbgorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKmlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfbGlzdDsKKworICAgIH0gaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eDsKKworICAgIHR5cGVkZWYgc3RydWN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZl9yb3dyZXFfY3R4X3MgeworICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIH0gaXBEZWZhdWx0Um91dGVyVGFibGVfcmVmX3Jvd3JlcV9jdHg7CisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgICovCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZXJfY29udGV4dCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXNlcl9jb250ZXh0LCBpbnQgcmMpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfaW5pdAorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICB2b2lkICp1c2VyX2luaXRfY3R4KTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwCisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CisKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhICppcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEoaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKKworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXBEZWZhdWx0Um91dGVyVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKKworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkX3NpemU7CisKKworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgiCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaCIKKworICAgIC8qCisgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCisgICAgICoKKyAgICAgKiBUT0RPOjA5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mjk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjM5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzo0OTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJUQUJMRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3ZGNmZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0wLDAgKzEsNDIzIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuaCIKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2xpZm8pCisKKy8qKiBAaW5ncm91cCBpbnRlcmZhY2UKKyAqIEBhZGR0b2dyb3VwIGRhdGFfYWNjZXNzIGRhdGFfYWNjZXNzOiBSb3V0aW5lcyB0byBhY2Nlc3MgZGF0YQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGxvY2F0ZSB0aGUgZGF0YSB1c2VkIHRvIHNhdGlzZnkKKyAqIHJlcXVlc3RzLgorICogCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlIGlzIHN1YmlkIDM3IG9mIGlwLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNywgbGVuZ3RoOiA4CisgKi8KKworLyoqCisgKiBpbml0aWFsaXphdGlvbiBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBhY2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8KKyAqIGFsbG9jYXRlIGFueSByZXNvdXJjZXMgeW91IG5lZWQgZm9yIHRoZSBkYXRhIHRhYmxlLgorICoKKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWcKKyAqICAgICAgICBQb2ludGVyIHRvIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IHVucmVjb3ZlcmFibGUgZXJyb3IuCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdF9kYXRhKGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2luaXRfZGF0YSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDM6bzogSW5pdGlhbGl6ZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBkYXRhLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0X2RhdGEgKi8KKworLyoqCisgKiBjb250YWluZXIgb3ZlcnZpZXcKKyAqCisgKi8KKworLyoqCisgKiBjb250YWluZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0cl9wdHIgQSBwb2ludGVyIHRvIGEgY29udGFpbmVyIHBvaW50ZXIuIElmIHlvdQorICogICAgICAgIGNyZWF0ZSBhIGN1c3RvbSBjb250YWluZXIsIHVzZSB0aGlzIHBhcmFtZXRlciB0byByZXR1cm4gaXQKKyAqICAgICAgICB0byB0aGUgTUZEIGhlbHBlci4gSWYgc2V0IHRvIE5VTEwsIHRoZSBNRkQgaGVscGVyIHdpbGwKKyAqICAgICAgICBhbGxvY2F0ZSBhIGNvbnRhaW5lciBmb3IgeW91LgorICogQHBhcmFtICBjYWNoZSBBIHBvaW50ZXIgdG8gYSBjYWNoZSBzdHJ1Y3R1cmUuIFlvdSBjYW4gc2V0IHRoZSB0aW1lb3V0CisgKiAgICAgICAgIGFuZCBvdGhlciBjYWNoZSBmbGFncyB1c2luZyB0aGlzIHBvaW50ZXIuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHN0YXJ0dXAgdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLiBJZiBubyBjdXN0b20KKyAqICBjb250YWluZXIgaXMgYWxsb2NhdGVkLCB0aGUgTUZEIGNvZGUgd2lsbCBjcmVhdGUgb25lIGZvciB5b3VyLgorICoKKyAqICBUaGlzIGlzIGFsc28gdGhlIHBsYWNlIHRvIHNldCB1cCBjYWNoZSBiZWhhdmlvci4gVGhlIGRlZmF1bHQsIHRvCisgKiAgc2ltcGx5IHNldCB0aGUgY2FjaGUgdGltZW91dCwgd2lsbCB3b3JrIHdlbGwgd2l0aCB0aGUgZGVmYXVsdAorICogIGNvbnRhaW5lci4gSWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBjb250YWluZXIsIHlvdSBtYXkgd2FudCB0bworICogIGxvb2sgYXQgdGhlIGNhY2hlIGhlbHBlciBkb2N1bWVudGF0aW9uIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55CisgKiAgZmxhZ3MgeW91IHdhbnQgdG8gc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBpbml0aWFsaXphdGlvbiBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgb3BlbmluZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCB3aWxsIHN1cHBseSB0aGUgZGF0YSwgb3BlbmluZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyICoqIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjb250YWluZXIgcGFyYW0gdG8gaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CisgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KKyAgICAgKi8KKyAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjYWNoZSBwYXJhbSB0byBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRPRE86MzQ1OkE6IFNldCB1cCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBjYWNoZSBwcm9wZXJ0aWVzLgorICAgICAqCisgICAgICogQWxzbyBmb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gc2V0IHBhcmFtZXRlcnMgZm9yIHRoZQorICAgICAqIGNhY2hlLiBEbyBub3QgY2hhbmdlIHRoZSBtYWdpYyBwb2ludGVyLCBhcyBpdCBpcyB1c2VkCisgICAgICogYnkgdGhlIE1GRCBoZWxwZXIuIFRvIGNvbXBsZXRlbHkgZGlzYWJsZSBjYWNoaW5nLCBzZXQKKyAgICAgKiBjYWNoZS0+ZW5hYmxlZCB0byAwLgorICAgICAqLworICAgIGNhY2hlLT50aW1lb3V0ID0gSVBERUZBVUxUUk9VVEVSVEFCTEVfQ0FDSEVfVElNRU9VVDsgICAgICAgIC8qIHNlY29uZHMgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBjb250YWluZXIgc2h1dGRvd24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0ciBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5lci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc2h1dGRvd24gdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUoKS4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgY2xlYW51cCBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgY2xvc2luZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCBzdXBwbGllZCB0aGUgZGF0YSwgY2xvc2luZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcl9wdHIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIHBhcmFtcyB0byBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd25cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisvKioKKyAqIGNoZWNrIGVudHJ5IGZvciB1cGRhdGUKKyAqLworc3RhdGljIHZvaWQKK19jaGVja19lbnRyeV9mb3JfdXBkYXRlcyhpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmRlZmF1bHRyb3V0ZXJfY29udGFpbmVyID0gbWFnaWNbMF07CisgICAgbmV0c25tcF9jb250YWluZXIgKnRvX2RlbGV0ZSA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBtYWdpY1sxXTsKKworICAgIC8qCisgICAgICogY2hlY2sgZm9yIG1hdGNoaW5nIGVudHJ5IHVzaW5nIHNlY29uZGFyeSBpbmRleC4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmRlZmF1bHRyb3V0ZXJfZW50cnkgPQorICAgICAgICBDT05UQUlORVJfRklORChkZWZhdWx0cm91dGVyX2NvbnRhaW5lciwgcm93cmVxX2N0eC0+ZGF0YSk7CisgICAgaWYgKE5VTEwgPT0gZGVmYXVsdHJvdXRlcl9lbnRyeSkgeworICAgICAgICBERUJVR01TR1RMKCgiaXBEZWZhdWx0Um91dGVyVGFibGU6YWNjZXNzIiwgInJlbW92aW5nIG1pc3NpbmcgZW50cnlcbiIpKTsKKworICAgICAgICBpZiAoTlVMTCA9PSB0b19kZWxldGUpIHsKKyAgICAgICAgICAgIG1hZ2ljWzFdID0gdG9fZGVsZXRlID0gbmV0c25tcF9jb250YWluZXJfZmluZCgibGlmbyIpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gdG9fZGVsZXRlKQorICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBjcmVhdGUgZGVsZXRlIGNvbnRhaW5lclxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5VTEwgIT0gdG9fZGVsZXRlKQorICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVCh0b19kZWxldGUsIHJvd3JlcV9jdHgpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpcERlZmF1bHRSb3V0ZXJUYWJsZTphY2Nlc3MiLCAidXBkYXRpbmcgZXhpc3RpbmcgZW50cnlcbiIpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBmb3IgY2hhbmdlcyAmIHVwZGF0ZQorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV91cGRhdGUocm93cmVxX2N0eC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHJvdXRlcl9lbnRyeSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtb3ZlIGVudHJ5IGZyb20gaWZjb250YWluZXIKKyAgICAgICAgICovCisgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoZGVmYXVsdHJvdXRlcl9jb250YWluZXIsIGRlZmF1bHRyb3V0ZXJfZW50cnkpOworICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUoZGVmYXVsdHJvdXRlcl9lbnRyeSk7CisgICAgfQorfQorCisvKioKKyAqIGFkZCBuZXcgZW50cnkKKyAqLworc3RhdGljIHZvaWQKK19hZGRfbmV3X2VudHJ5KG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqZGVmYXVsdHJvdXRlcl9lbnRyeSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKworICAgIERFQlVHTVNHVEwoKCJpcERlZmF1bHRSb3V0ZXJUYWJsZTphY2Nlc3MiLCAiY3JlYXRpbmcgbmV3IGVudHJ5XG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRlZmF1bHRyb3V0ZXJfZW50cnkpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogYWxsb2NhdGUgYW4gcm93IGNvbnRleHQgYW5kIHNldCB0aGUgaW5kZXgoZXMpCisgICAgICovCisgICAgcm93cmVxX2N0eCA9IGlwRGVmYXVsdFJvdXRlclRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoZGVmYXVsdHJvdXRlcl9lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAoKE5VTEwgIT0gcm93cmVxX2N0eCkgJiYKKyAgICAgICAgICAgIChNRkRfU1VDQ0VTUyA9PQorICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgIGRlZmF1bHRyb3V0ZXJfZW50cnktPmRyX2FkZHJlc3N0eXBlLAorICAgICAgICAgICAgICAgICBkZWZhdWx0cm91dGVyX2VudHJ5LT5kcl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICBkZWZhdWx0cm91dGVyX2VudHJ5LT5kcl9hZGRyZXNzX2xlbiwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdHJvdXRlcl9lbnRyeS0+ZHJfaWZfaW5kZXgpKSkgeworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwQWRkcmVzc1RhYmxlOmFjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRhaW5lciBpbnNlcnQgZmFpbGVkIGZvciBuZXcgZW50cnlcbiIpKTsKKyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChOVUxMICE9IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBzZXR0aW5nIGluZGV4IHdoaWxlIGxvYWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAiaXBEZWZhdWx0Um91dGVyVGFibGUgY2FjaGUuXG4iKTsKKyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgd2hpbGUgbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiaXBEZWZhdWx0Um91dGVyVGFibGUgY2FjaGUuXG4iKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShkZWZhdWx0cm91dGVyX2VudHJ5KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy8qKgorICogbG9hZCBpbml0aWFsIGRhdGEKKyAqCisgKiBUT0RPOjM1MDpNOiBJbXBsZW1lbnQgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBsb2FkCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIGNhY2hlIGhlbHBlciB0byBsb2FkCisgKiB0aGUgY29udGFpbmVyIGFnYWluIChhZnRlciB0aGUgY29udGFpbmVyIGZyZWUgZnVuY3Rpb24gaGFzIGJlZW4KKyAqIGNhbGxlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBjb250ZW50cykuCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgdG8gd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGluc2VydGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgOiBDYW4ndCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGluZGV4KGVzKSAoYW5kIGRhdGEsIG9wdGlvbmFsbHkpCisgKiAgZm9yIHRoZSBldmVyeSByb3cgaW4gdGhlIGRhdGEgc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBXaGlsZSBsb2FkaW5nIHRoZSBkYXRhLCB0aGUgb25seSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIGluZGV4ZXMuCisgKiAgSWYgYWNjZXNzIHRvIHlvdXIgZGF0YSBpcyBjaGVhcC9mYXN0IChlLmcuIHlvdSBoYXZlIGEgcG9pbnRlciB0byBhCisgKiAgc3RydWN0dXJlIGluIG1lbW9yeSksIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXBkYXRlIHRoZSBkYXRhIGhlcmUuCisgKiAgSWYsIGhvd2V2ZXIsIHRoZSBhY2Nlc3NpbmcgdGhlIGRhdGEgaW52b3ZsZXMgbW9yZSB3b3JrIChlLmcuIHBhcnNpbmcKKyAqICBzb21lIG90aGVyIGV4aXN0aW5nIGRhdGEsIG9yIHBlZm9ybWluZyBjYWxjdWxhdGlvbnMgdG8gZGVyaXZlIHRoZSBkYXRhKSwKKyAqICB0aGVuIHlvdSBjYW4gbGltaXQgeW91cnNlbGYgdG8gc2V0dGluZyB0aGUgaW5kZXhlcyBhbmQgc2F2aW5nIGFueQorICogIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgbGF0ZXIuIFRoZW4gdXNlIHRoZSBzYXZlZCBpbmZvcm1hdGlvbiBpbgorICogIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd19wcmVwKCkgZm9yIHBvcHVsYXRpbmcgZGF0YS4KKyAqCisgKiBAbm90ZQorICogIElmIHlvdSBuZWVkIGNvbnNpc3RlbmN5IGJldHdlZW4gcm93cyAobGlrZSB5b3Ugd2FudCBzdGF0aXN0aWNzCisgKiAgZm9yIGVhY2ggcm93IHRvIGJlIGZyb20gdGhlIHNhbWUgdGltZSBmcmFtZSksIHlvdSBzaG91bGQgc2V0IGFsbAorICogIGRhdGEgaGVyZS4KKyAqCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmRlZmF1bHRyb3V0ZXJfY29udGFpbmVyOworICAgIHZvaWQgICAgICAgICAgICAgICp0bXBfcHRyWzJdOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzUxOk06IHwtPiBMb2FkL3VwZGF0ZSBkYXRhIGluIHRoZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBjb250YWluZXIuCisgICAgICogbG9vcCBvdmVyIHlvdXIgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSwgYWxsb2NhdGUgYSByb3dyZXEgY29udGV4dCwKKyAgICAgKiBzZXQgdGhlIGluZGV4KGVzKSBbYW5kIGRhdGEsIG9wdGlvbmFsbHldIGFuZCBpbnNlcnQgaW50bworICAgICAqIHRoZSBjb250YWluZXIuCisgICAgICovCisgICAgZGVmYXVsdHJvdXRlcl9jb250YWluZXIgPQorICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9sb2FkKE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0xPQURfQURETF9JRFhfQllfQUREUik7CisKKyAgICBpZiAoTlVMTCA9PSBkZWZhdWx0cm91dGVyX2NvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworCisgICAgLyoKKyAgICAgKiB3ZSBqdXN0IGdvdCBhIGZyZXNoIGNvcHkgb2YgaW50ZXJmYWNlIGRhdGEuIGNvbXBhcmUgaXQgdG8KKyAgICAgKiB3aGF0IHdlJ3ZlIGFscmVhZHkgZ290LCBhbmQgbWFrZSBhbnkgYWRqdXN0bWVudHMsIHNhdmluZworICAgICAqIG1pc3NpbmcgYWRkcmVzc2VzIHRvIGJlIGRlbGV0ZWQuCisgICAgICovCisgICAgdG1wX3B0clswXSA9IGRlZmF1bHRyb3V0ZXJfY29udGFpbmVyLT5uZXh0OworICAgIHRtcF9wdHJbMV0gPSBOVUxMOworICAgIENPTlRBSU5FUl9GT1JfRUFDSChjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfY2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIHRtcF9wdHIpOworCisgICAgLyoKKyAgICAgKiBub3cgYWRkIGFueSBuZXcgaW50ZXJmYWNlcworICAgICAqLworICAgIENPTlRBSU5FUl9GT1JfRUFDSChkZWZhdWx0cm91dGVyX2NvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9hZGRfbmV3X2VudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBmcmVlIHRoZSBjb250YWluZXIuIHdlJ3ZlIGVpdGhlciBjbGFpbWVkIGVhY2ggZW50cnksIG9yIHJlbGVhc2VkIGl0LAorICAgICAqIHNvIHRoZSBhY2Nlc3MgZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIGNsZWFyIHRoZSBjb250YWluZXIuCisgICAgICovCisgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfZnJlZShkZWZhdWx0cm91dGVyX2NvbnRhaW5lciwKKyAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfRE9OVF9DTEVBUik7CisKKyAgICAvKgorICAgICAqIHJlbW92ZSBkZWxldGVkIGFkZHJlc3NlcyBmcm9tIHRhYmxlIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChOVUxMICE9IHRtcF9wdHJbMV0pIHsKKyAgICAgICAgbmV0c25tcF9jb250YWluZXIgKnRtcF9jb250YWluZXIgPQorICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyICopIHRtcF9wdHJbMV07CisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKnRtcF9jdHg7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdGhpcyB3b3JrcyBiZWNhdXNlIHRoZSB0bXBfY29udGFpbmVyIGlzIGEgbGlua2VkIGxpc3QsCisgICAgICAgICAqIHdoaWNoIGNhbiBiZSB1c2VkIGxpa2UgYSBzdGFjay4uLgorICAgICAgICAgKi8KKyAgICAgICAgd2hpbGUgKENPTlRBSU5FUl9TSVpFKHRtcF9jb250YWluZXIpKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogZ2V0IGZyb20gZGVsZXRlIGxpc3QKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdG1wX2N0eCA9IENPTlRBSU5FUl9GSVJTVCh0bXBfY29udGFpbmVyKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHJlbGVhc2UgY29udGV4dCwgZGVsZXRlIGZyb20gdGFibGUgY29udGFpbmVyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoY29udGFpbmVyLCB0bXBfY3R4KTsKKyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCh0bXBfY3R4KTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHBvcCBvZmYgZGVsZXRlIGxpc3QKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgQ09OVEFJTkVSX1JFTU9WRSh0bXBfY29udGFpbmVyLCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgIiUiIE5FVFNOTVBfUFJJeiAiZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9CisKKy8qKgorICogY29udGFpbmVyIGNsZWFuIHVwCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgd2l0aCBhbGwgY3VycmVudCBpdGVtcworICoKKyAqICBUaGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGNhbGxlZCBwcmlvciB0byBhbGwKKyAqICBpdGVtJ3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIuIElmIHlvdQorICogIG5lZWQgdG8gZG8gYW55IHByb2Nlc3NpbmcgYmVmb3JlIHRoYXQsIGRvIGl0IGhlcmUuCisgKgorICogQG5vdGUKKyAqICBUaGUgTUZEIGhlbHBlciB3aWxsIHRha2UgY2FyZSBvZiByZWxlYXNpbmcgYWxsIHRoZSByb3cgY29udGV4dHMuCisgKgorICovCit2b2lkCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozODA6TTogRnJlZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBjb250YWluZXIgZGF0YS4KKyAgICAgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBwcmVwYXJlIHJvdyBmb3IgcHJvY2Vzc2luZy4KKyAqCisgKiAgV2hlbiB0aGUgYWdlbnQgaGFzIGxvY2F0ZWQgdGhlIHJvdyBmb3IgYSByZXF1ZXN0LCB0aGlzIGZ1bmN0aW9uIGlzCisgKiAgY2FsbGVkIHRvIHByZXBhcmUgdGhlIHJvdyBmb3IgcHJvY2Vzc2luZy4gSWYgeW91IGZ1bGx5IHBvcHVsYXRlZAorICogIHRoZSBkYXRhIGNvbnRleHQgZHVyaW5nIHRoZSBpbmRleCBzZXR1cCBwaGFzZSwgeW91IG1heSBub3QgbmVlZCB0bworICogIGRvIGFueXRoaW5nLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4IHBvaW50ZXIgdG8gYSBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM5MDpvOiBQcmVwYXJlIHJvdyBmb3IgcmVxdWVzdC4KKyAgICAgKiBJZiBwb3B1bGF0aW5nIHJvdyBkYXRhIHdhcyBkZWxheWVkLCB0aGlzIGlzIHRoZSBwbGFjZSB0bworICAgICAqIGZpbGwgaW4gdGhlIHJvdyBmb3IgdGhpcyByZXF1ZXN0LgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dfcHJlcCAqLworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwMzNmMAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgSVBERUZBVUxUUk9VVEVSVEFCTEVfREFUQV9BQ0NFU1NfSAorI2RlZmluZSBJUERFRkFVTFRST1VURVJUQUJMRV9EQVRBX0FDQ0VTU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZSBpcyBzdWJpZCAzNyBvZiBpcC4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNywgbGVuZ3RoOiA4CisgICAgICovCisKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0X2RhdGEoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZyk7CisKKworICAgIC8qCisgICAgICogVE9ETzoxODA6bzogUmV2aWV3IGlwRGVmYXVsdFJvdXRlclRhYmxlIGNhY2hlIHRpbWVvdXQuCisgICAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUgY2FjaGUgdGltZXMgb3V0CisgICAgICovCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX0NBQ0hFX1RJTUVPVVQgICA2MAorCisgICAgdm9pZCAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24obmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cik7CisKKyAgICBpbnQgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIHZvaWQgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisKKyAgICBpbnQgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY2FjaGVfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY2FjaGVfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSVEFCTEVfREFUQV9BQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc3ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDg4ICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworCisvKiogQGRlZmdyb3VwIGRhdGFfZ2V0IGRhdGFfZ2V0OiBSb3V0aW5lcyB0byBnZXQgZGF0YQorICoKKyAqIFRPRE86MjMwOk06IEltcGxlbWVudCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBnZXQgcm91dGluZXMuCisgKiBUT0RPOjI0MDpNOiBJbXBsZW1lbnQgaXBEZWZhdWx0Um91dGVyVGFibGUgbWFwcGluZyByb3V0aW5lcyAoaWYgYW55KS4KKyAqCisgKiBUaGVzZSByb3V0aW5lIGFyZSB1c2VkIHRvIGdldCB0aGUgdmFsdWUgZm9yIGluZGl2aWR1YWwgb2JqZWN0cy4gVGhlCisgKiByb3cgY29udGV4dCBpcyBwYXNzZWQsIGFsb25nIHdpdGggYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgd2hlcmUgdGhlCisgKiB2YWx1ZSBzaG91bGQgYmUgY29waWVkLgorICoKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUgaXMgc3ViaWQgMzcgb2YgaXAuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM3LCBsZW5ndGg6IDgKKyAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAqIFRPRE86MjAwOnI6IEltcGxlbWVudCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBkYXRhIGNvbnRleHQgZnVuY3Rpb25zLgorICovCisvKgorICogaXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfZGF0YQorICoKKyAqIFB1cnBvc2U6IGNyZWF0ZSBuZXcgaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YS4KKyAqLworaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBUT0RPOjIwMTpyOiB8LT4gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBjb250ZXh0LgorICAgICAqLworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGEgKnJ0biA9CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY3JlYXRlKCk7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcnRuKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmFibGUgdG8gbWFsbG9jIG1lbW9yeSBmb3IgbmV3ICIKKyAgICAgICAgICAgICAgICAgImlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGEuXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnRuOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhICovCisKKy8qCisgKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiByZWxlYXNlIGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEuCisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2VfZGF0YShpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhICogZGF0YSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjAyOnI6IHwtPiByZWxlYXNlIG1lbW9yeSBmb3IgdGhlIGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUoZGF0YSk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2VfZGF0YSAqLworCisKKworLyoqCisgKiBzZXQgbWliIGluZGV4KGVzKQorICoKKyAqIEBwYXJhbSB0YmxfaWR4IG1pYiBpbmRleCBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwKKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3B0cgorICogQHBhcmFtIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfcHRyX2xlbgorICogQHBhcmFtIGlwRGVmYXVsdFJvdXRlcklmSW5kZXhfdmFsCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHNldHRpbmcgYWxsIHRoZSBNSUIgaW5kZXgKKyAqICBjb21wb25lbnRzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gSXQgaXMgYXNzdW1lIHRoYXQgdGhlIEMgdmFsdWVzCisgKiAgaGF2ZSBhbHJlYWR5IGJlZW4gbWFwcGVkIGZyb20gdGhlaXIgbmF0aXZlL3Jhd2Zvcm1hdCB0byB0aGUgTUlCIGZvcm1hdC4KKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUoMSkvSW5ldEFkZHJlc3NUeXBlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaCAKKyAgICAgKi8KKyAgICAvKiogV0FSTklORzogdGhpcyBjb2RlIG1pZ2h0IG5vdCB3b3JrIGZvciBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKi8KKyAgICB0YmxfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSA9IGlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlX3ZhbDsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzcygyKS9JbmV0QWRkcmVzcy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvYS93L2UvUi9kL2ggCisgICAgICovCisgICAgdGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gPSBzaXplb2YodGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzcykgLyBzaXplb2YodGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1swXSk7IC8qIG1heCBsZW5ndGggKi8KKyAgICAvKiogV0FSTklORzogdGhpcyBjb2RlIG1pZ2h0IG5vdCB3b3JrIGZvciBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKi8KKyAgICAvKgorICAgICAqIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGlwRGVmYXVsdFJvdXRlckFkZHJlc3MgZGF0YQorICAgICAqLworICAgIGlmICgoTlVMTCA9PSB0YmxfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzKSB8fAorICAgICAgICAodGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gPAorICAgICAgICAgKGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4pKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm90IGVub3VnaCBzcGFjZSBmb3IgdmFsdWVcbiIpOworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKyAgICB0YmxfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzX2xlbiA9CisgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW47CisgICAgbWVtY3B5KHRibF9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3MsIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0ciwKKyAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyX2xlbiAqCisgICAgICAgICAgIHNpemVvZihpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHJbMF0pKTsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVySWZJbmRleCgzKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9IIAorICAgICAqLworICAgIC8qKiBXQVJOSU5HOiB0aGlzIGNvZGUgbWlnaHQgbm90IHdvcmsgZm9yIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqLworICAgIHRibF9pZHgtPmlwRGVmYXVsdFJvdXRlcklmSW5kZXggPSBpcERlZmF1bHRSb3V0ZXJJZkluZGV4X3ZhbDsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzZXQgcm93IGNvbnRleHQgaW5kZXhlcworICoKKyAqIEBwYXJhbSByZXFyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcworICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWliIGluZGV4cywgdGhlbiB1cGRhdGVzIHRoZSBvaWQgaW5kZXhzCisgKiAgZnJvbSB0aGUgbWliIGluZGV4LgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0KKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCgmcm93cmVxX2N0eC0+dGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWwpKQorICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0IG1pYiBpbmRleCB0byBvaWQgaW5kZXgKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT5vaWRfaWR4LmxlbiA9IHNpemVvZihyb3dyZXFfY3R4LT5vaWRfdG1wKSAvIHNpemVvZihvaWQpOworICAgIGlmICgwICE9IGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZCgmcm93cmVxX2N0eC0+b2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvd3JlcV9jdHgtPnRibF9pZHgpKSB7CisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlckVudHJ5LmlwRGVmYXVsdFJvdXRlckxpZmV0aW1lCisgKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSBpcyBzdWJpZCA0IG9mIGlwRGVmYXVsdFJvdXRlckVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcuMS40CisgKiBEZXNjcmlwdGlvbjoKK1RoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhpcyByb3V0ZXIKKyAgICAgICAgICAgIHdpbGwgY29udGludWUgdG8gYmUgdXNlZnVsIGFzIGEgZGVmYXVsdCByb3V0ZXIuICBBIHZhbHVlIG9mCisgICAgICAgICAgICB6ZXJvIGluZGljYXRlcyB0aGF0IGl0IGlzIG5vIGxvbmdlciB1c2VmdWwgYXMgYSBkZWZhdWx0CisgICAgICAgICAgICByb3V0ZXIuICBJdCBpcyBsZWZ0IHRvIHRoZSBpbXBsZW1lbnRlciBvZiB0aGUgTUlCIGFzIHRvCisgICAgICAgICAgICB3aGV0aGVyIGEgcm91dGVyIHdpdGggYSBsaWZldGltZSBvZiB6ZXJvIGlzIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgIGxpc3QuCisKKyAgICAgICAgICAgIEZvciBJUHY2LCB0aGlzIHZhbHVlIHNob3VsZCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgcm91dGVyCisgICAgICAgICAgICBhZHZlcnRpc2VtZW50IG1lc3NhZ2VzLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAxICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogUmFuZ2VzOiAgMCAtIDY1NTM1OworICoKKyAqIEl0cyBzeW50YXggaXMgVU5TSUdORUQzMiAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlckxpZmV0aW1lX2dldChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlckxpZmV0aW1lX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lIGRhdGEuCisgICAgICogY29weSAoKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcERlZmF1bHRSb3V0ZXJMaWZldGltZV92YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEtPmRyX2xpZmV0aW1lOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyRW50cnkuaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZQorICogaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZSBpcyBzdWJpZCA1IG9mIGlwRGVmYXVsdFJvdXRlckVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcuMS41CisgKiBEZXNjcmlwdGlvbjoKK0FuIGluZGljYXRpb24gb2YgcHJlZmVyZW5jZSBnaXZlbiB0byB0aGlzIHJvdXRlciBhcyBhCisgICAgICAgICAgICBkZWZhdWx0IHJvdXRlciBhcyBkZXNjcmliZWQgaW4gaGUgRGVmYXVsdCBSb3V0ZXIKKyAgICAgICAgICAgIFByZWZlcmVuY2VzIGRvY3VtZW50LiAgVHJlYXRpbmcgdGhlIHZhbHVlIGFzIGEKKyAgICAgICAgICAgIDIgYml0IHNpZ25lZCBpbnRlZ2VyIGFsbG93cyBmb3Igc2ltcGxlIGFyaXRobWV0aWMKKyAgICAgICAgICAgIGNvbXBhcmlzb25zLgorCisgICAgICAgICAgICBGb3IgSVB2NCByb3V0ZXJzIG9yIElQdjYgcm91dGVycyB0aGF0IGFyZSBub3QgdXNpbmcgdGhlCisgICAgICAgICAgICB1cGRhdGVkIHJvdXRlciBhZHZlcnRpc2VtZW50IGZvcm1hdCwgdGhpcyBvYmplY3QgaXMgc2V0IHRvCisgICAgICAgICAgICBtZWRpdW0gKDApLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDEgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogRW51bSByYW5nZTogMy84LiBWYWx1ZXM6ICByZXNlcnZlZCgtMiksIGxvdygtMSksIG1lZGl1bSgwKSwgaGlnaCgxKQorICoKKyAqIEl0cyBzeW50YXggaXMgSU5URUdFUiAoYmFzZWQgb24gcGVybHR5cGUgSU5URUdFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9JTlRFR0VSLiBUaGUgQyB0eXBlIGRlY2wgaXMgbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2UgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV9nZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlIGRhdGEuCisgICAgICogY29weSAoKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2VfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLT5kcl9wcmVmZXJlbmNlOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX2dldCAqLworCisKKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTg2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICoKKyAqIEBmaWxlIGlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmgKKyAqCisgKiBAYWRkdG9ncm91cCBnZXQKKyAqCisgKiBQcm90b3R5cGVzIGZvciBnZXQgZnVuY3Rpb25zCisgKgorICogQHsKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9EQVRBX0dFVF9ICisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX0RBVEFfR0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlIGlzIHN1YmlkIDM3IG9mIGlwLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM3LCBsZW5ndGg6IDgKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGluZGV4ZXMKKyAgICAgKi8KKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV9nZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX2dldChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV92YWxfcHRyKTsKKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgKKyAgICAgICAgKGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCisgICAgICAgICB1X2xvbmcgaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGVfdmFsLAorICAgICAgICAgY2hhciAqaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyLAorICAgICAgICAgc2l6ZV90IGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICBsb25nIGlwRGVmYXVsdFJvdXRlcklmSW5kZXhfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWwpOworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJUQUJMRV9EQVRBX0dFVF9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0NmQxMAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMgMTI1MjYgMjAwNS0wNy0xNSAyMjo0MToxNlogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIElQREVGQVVMVFJPVVRFUlRBQkxFX0VOVU1TX0gKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfRU5VTVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE5PVEVTIG9uIGVudW1zCisgICAgICogPT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFZhbHVlIE1hcHBpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tCisgICAgICogSWYgdGhlIHZhbHVlcyBmb3IgeW91ciBkYXRhIHR5cGUgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGUKKyAgICAgKiBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgbWliLCB5b3Ugc2hvdWxkIG1hcCB0aGVtCisgICAgICogYmVsb3cuIEZvciBleGFtcGxlLCBhIGJvb2xlYW4gZmxhZyAoMS8wKSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkCisgICAgICogYXMgYSBUcnV0aFZhbHVlIGluIGEgTUlCLCB3aGljaCBtYXBzIHRvIHRoZSB2YWx1ZXMgKDEvMikuCisgICAgICoKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGVudW0gZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSAoVU5TSUdORUQzMiAvIEFTTl9VTlNJR05FRCkKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX0VOVU1TCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX0VOVU1TCisKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSTElGRVRJTUVfTUlOICAwCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX01BWCAgMHhGRkZGRkZGRlVMCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSTElGRVRJTUVfRU5VTVMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSAoSW5ldEFkZHJlc3NUeXBlIC8gQVNOX0lOVEVHRVIpCisgKgorICogc2luY2UgYSBUZXh0dWFsIENvbnZlbnRpb24gbWF5IGJlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaW4gYQorICogTUlCLCBwcm90ZWN0IGFnYWludCByZWRlZmluaXRpb25zIG9mIHRoZSBlbnVtIHZhbHVlcy4KKyAqLworI2lmbmRlZiBJTkVUQUREUkVTU1RZUEVfRU5VTVMKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0VOVU1TCisKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX1VOS05PV04gIDAKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0lQVjQgIDEKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0lQVjYgIDIKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0lQVjRaICAzCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY2WiAgNAorI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfRE5TICAxNgorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElORVRBRERSRVNTVFlQRV9FTlVNUyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2UgKElOVEVHRVIgLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfRU5VTVMKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRV9FTlVNUworCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfUkVTRVJWRUQgIC0yCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfTE9XICAtMQorI2RlZmluZSBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX01FRElVTSAgMAorI2RlZmluZSBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX0hJR0ggIDEKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX0VOVU1TICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQREVGQVVMVFJPVVRFUlRBQkxFX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGFkNzJiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMTAyNiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTU4OTkgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZS5oIgorCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlIGlzIHN1YmlkIDM3IG9mIGlwLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNywgbGVuZ3RoOiA4CisgKi8KK3R5cGVkZWYgc3RydWN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqdXNlcl9jdHg7CisKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIHRibF9pbmZvOworCisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzIGFjY2Vzc19tdWx0aXBsZXhlcjsKKworfSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2VfY3R4OworCitzdGF0aWMgaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eCBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHg7CisKK3N0YXRpYyB2b2lkICAgIAorX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CitzdGF0aWMgdm9pZCAgICAKK19pcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmX2N0eCk7CisKKworbmV0c25tcF9jb250YWluZXIgKgoraXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQoreworICAgIHJldHVybiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyOworfQorCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgoraXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQoreworICAgIHJldHVybiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHg7Cit9CisKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JlZykKK3sKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKm9sZCA9CisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC51c2VyX2N0eDsKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CisgICAgcmV0dXJuIG9sZDsKK30KKworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQoreworICAgIHJldHVybiBDT05UQUlORVJfU0laRShpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKK30KKworLyoKKyAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcworICovCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX29iamVjdF9sb29rdXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfdmFsdWVzOworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK19pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZQorICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyLCB1X2xvbmcgZmxhZ3MpCit7CisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzICphY2Nlc3NfbXVsdGlwbGV4ZXIgPQorICAgICAgICAmaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LmFjY2Vzc19tdWx0aXBsZXhlcjsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YmxfaW5mbyA9CisgICAgICAgICZpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudGJsX2luZm87CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyOworICAgIGludCAgICAgICAgICAgICBtZmRfbW9kZXMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSIsICJjYWxsZWRcbiIpKTsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNhdmUgaW50ZXJmYWNlIGNvbnRleHQgZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgICAgICovCisgICAgLyoKKyAgICAgKiBTZXR0aW5nIHVwIHRoZSB0YWJsZSdzIGRlZmluaXRpb24KKyAgICAgKi8KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YmxfaW5mbywgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBpbmRleDogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBpbmRleDogaXBEZWZhdWx0Um91dGVyQWRkcmVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwRGVmYXVsdFJvdXRlcklmSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKKyAgICAgKi8KKyAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQREVGQVVMVFJPVVRFUlRBQkxFX01JTl9DT0w7CisgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUERFRkFVTFRST1VURVJUQUJMRV9NQVhfQ09MOworCisgICAgLyoKKyAgICAgKiBzYXZlIHVzZXJzIGNvbnRleHQKKyAgICAgKi8KKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHggPSByZWdfcHRyOworCisgICAgLyoKKyAgICAgKiBjYWxsIGRhdGEgYWNjZXNzIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0X2RhdGEocmVnX3B0cik7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KCZpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgpOworICAgIGlmIChOVUxMID09IGlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbnRhaW5lciBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhY2Nlc3NfbXVsdGlwbGV4ZXI6IFJFUVVJUkVEIHdyYXBwZXIgZm9yIGdldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwID0KKyAgICAgICAgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vYmplY3RfbG9va3VwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Z2V0X3ZhbHVlcyA9IF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCA9CisgICAgICAgIF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3Q7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPQorICAgICAgICBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdDsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIENyZWF0ZSBhIHJlZ2lzdHJhdGlvbiwgc2F2ZSBvdXIgcmVnIGRhdGEsIHJlZ2lzdGVyIHRhYmxlLgorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJpcERlZmF1bHRSb3V0ZXJUYWJsZTppbml0X2lwRGVmYXVsdFJvdXRlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgaXBEZWZhdWx0Um91dGVyVGFibGUgYXMgYSBtaWJzLWZvci1kdW1taWVzIHRhYmxlLlxuIikpOworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyX2dldChhY2Nlc3NfbXVsdGlwbGV4ZXIpOworICAgIHJlZ2luZm8gPQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiaXBEZWZhdWx0Um91dGVyVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlZ2luZm8tPm15X3JlZ192b2lkID0gJmlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzZXQgdXAgYmFieSBzdGVwcyBoYW5kbGVyLCBjcmVhdGUgaXQgYW5kIGluamVjdCBpdAorICAgICAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QUkVfUkVRVUVTVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOworCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQorICAgIC8qIFhYWCAtIGFyZSB0aGVzZSBhY3R1YWxseSBuZWNlc3Nhcnk/ICovCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3Rfc3ludGF4X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19PQkpFQ1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ0xFQU5VUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRTOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cm93X2NyZWF0aW9uKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1JPV19DUkVBVEU7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX0NPTlNJU1RFTkNZOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLworCisgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IHJvd19tZXJnZSBoZWxwZXIgd2l0aCBwcmVmaXggcm9vdG9pZF9sZW4gKyAyIChlbnRyeS5jb2wpCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YmxfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LmNhY2hlKSB7CisgICAgICAgIGhhbmRsZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY2FjaGUpOworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworICAgIH0KKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgdGFibGUKKyAgICAgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRibF9pbmZvKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICovCit2b2lkCitfaXBEZWZhdWx0Um91dGVyVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlZ19wdHIpCit7CisgICAgLyoKKyAgICAgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bigmaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4KTsKK30KKwordm9pZAoraXBEZWZhdWx0Um91dGVyVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbyAqdmMpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LnRibF9pbmZvLnZhbGlkX2NvbHVtbnMgPSB2YzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfdmFsaWRfY29sdW1uc19zZXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGNvbnZlcnQgdGhlIGluZGV4IGNvbXBvbmVudCBzdG9yZWQgaW4gdGhlIGNvbnRleHQgdG8gYW4gb2lkCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSgxKS9JbmV0QWRkcmVzc1R5cGUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZTsKKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlckFkZHJlc3MoMikvSW5ldEFkZHJlc3MvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML2Evdy9lL1IvZC9oCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzOworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVySWZJbmRleCgzKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSwgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSkpOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZS50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgbWVtc2V0KCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcywgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzKSk7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MudHlwZSA9IEFTTl9PQ1RFVF9TVFI7CisgICAgbWVtc2V0KCZ2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleCwgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4KSk7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLm5leHRfdmFyaWFibGUgPQorICAgICAgICAmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3M7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MubmV4dF92YXJpYWJsZSA9ICZ2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleDsKKyAgICB2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleC5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhfdG9fb2lkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSgxKS9JbmV0QWRkcmVzc1R5cGUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oIAorICAgICAqLworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSkpOworCisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzKDIpL0luZXRBZGRyZXNzL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9hL3cvZS9SL2QvaCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gKgorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1swXSkpOworCisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJJZkluZGV4KDMpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0ggCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmlwRGVmYXVsdFJvdXRlcklmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJJZkluZGV4KSk7CisKKworICAgIGVyciA9IGJ1aWxkX29pZF9ub2FsbG9jKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwgJm9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlKTsKKyAgICBpZiAoZXJyKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgJWQgY29udmVydGluZyBpbmRleCB0byBvaWRcbiIsIGVycik7CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhfdG9fb2lkICovCisKKy8qKgorICogZXh0cmFjdCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbmRleGVzIGZyb20gYSBuZXRzbm1wX2luZGV4CisgKgorICogQHJldHZhbCBTTk1QX0VSUl9OT0VSUk9SICA6IG5vIGVycm9yCisgKiBAcmV0dmFsIFNOTVBfRVJSX0dFTkVSUiAgIDogZXJyb3IKKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUoMSkvSW5ldEFkZHJlc3NUeXBlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGU7CisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzKDIpL0luZXRBZGRyZXNzL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9hL3cvZS9SL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzczsKKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlcklmSW5kZXgoMykvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUpKTsKKyAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUudHlwZSA9IEFTTl9JTlRFR0VSOworICAgIG1lbXNldCgmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcykpOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLnR5cGUgPSBBU05fT0NURVRfU1RSOworICAgIG1lbXNldCgmdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleCkpOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4LnR5cGUgPSBBU05fSU5URUdFUjsKKworICAgIC8qCisgICAgICogY2hhaW4gdGVtcCBpbmRleCB2YXJiaW5kcyB0b2dldGhlcgorICAgICAqLworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZS5uZXh0X3ZhcmlhYmxlID0KKyAgICAgICAgJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLm5leHRfdmFyaWFibGUgPSAmdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXg7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X2Zyb21fb2lkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBwYXJzZSB0aGUgb2lkIGludG8gdGhlIGluZGl2aWR1YWwgaW5kZXggY29tcG9uZW50cworICAgICAqLworICAgIGVyciA9IHBhcnNlX29pZF9pbmRleGVzKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlKTsKKyAgICBpZiAoZXJyID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBvdXQgdmFsdWVzCisgICAgICAgICAqLworICAgICAgICBtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSA9CisgICAgICAgICAgICAqKCh1X2xvbmcgKikgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLnZhbC5zdHJpbmcpOworICAgICAgICAvKgorICAgICAgICAgKiBOT1RFOiB2YWxfbGVuIGlzIGluIGJ5dGVzLCBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX2xlbiBtaWdodCBub3QgYmUKKyAgICAgICAgICovCisgICAgICAgIGlmICh2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcy52YWxfbGVuID4KKyAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzKSkKKyAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkobWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcy52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLnZhbF9sZW4pOworICAgICAgICAgICAgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gPQorICAgICAgICAgICAgICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLnZhbF9sZW4gLworICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzWzBdKTsKKyAgICAgICAgfQorICAgICAgICBtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJJZkluZGV4ID0KKyAgICAgICAgICAgICooKGxvbmcgKikgdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgudmFsLnN0cmluZyk7CisKKworICAgIH0KKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSk7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF9mcm9tX29pZCAqLworCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAaW50ZXJuYWwKKyAqIGFsbG9jYXRlIHJlc291cmNlcyBmb3IgYSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4CisgKi8KK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgoraXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhICIKKyAgICAgICAgICAgICAgICAgImlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHguXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gZGF0YSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHRyYWNrIGlmIHdlIGdvdCBkYXRhIGZyb20gdXNlcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgfD0gTUZEX1JPV19EQVRBX0ZST01fVVNFUjsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEgPSBkYXRhOworICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0KKyAgICAgICAgICAgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YSA9CisgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2FsbG9jYXRlX2RhdGEoKSkpIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1bmRvIGNvbnRleHQgd2lsbCBiZSBhbGxvY2F0ZWQgd2hlbiBuZWVkZWQgKGluICpfdW5kb19zZXR1cCkKKyAgICAgKi8KKworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyA9IHJvd3JlcV9jdHgtPm9pZF90bXA7CisKKyAgICByb3dyZXFfY3R4LT5pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2xpc3QgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhbGxvY2F0ZWQgZGF0YSwgY2FsbCBpbml0IHJvdXRpbmUKKyAgICAgKi8KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2luaXRfY3R4KSkgeworICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcm93cmVxX2N0eCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCAqLworCisvKgorICogQGludGVybmFsCisgKiByZWxlYXNlIHJlc291cmNlcyBmb3IgYSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4CisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBmb3Igbm9uLXRyYW5zaWVudCBkYXRhLCBkb24ndCBmcmVlIGRhdGEgd2UgZ290IGZyb20gdGhlIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoKHJvd3JlcV9jdHgtPmRhdGEpICYmCisgICAgICAgICEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19EQVRBX0ZST01fVVNFUikpCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2VfZGF0YShyb3dyZXFfY3R4LT5kYXRhKTsKKworICAgIC8qCisgICAgICogZnJlZSBpbmRleCBvaWQgcG9pbnRlcgorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgIT0gcm93cmVxX2N0eC0+b2lkX3RtcCkKKyAgICAgICAgZnJlZShyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMpOworCisgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19maXJzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgInNraXBwaW5nIGFkZGl0aW9uYWwgcHJlX3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcmMgPSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJpcERlZmF1bHRSb3V0ZXJUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImlwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHJlbGVhc2Ugcm93IGNvbnRleHQsIGlmIGRlbGV0ZWQKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eCAmJiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ERUxFVEVEKSkKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiB3YWl0IGZvciBsYXN0IGNhbGwgYmVmb3JlIGNhbGxpbmcgdXNlcgorICAgICAqLworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19sYXN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAid2FpdGluZyBmb3IgbGFzdCBwb3N0X3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcGFja2V0X3JjID0gbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfZXJyb3IoYWd0cmVxX2luZm8tPmFzcCwgMCk7CisgICAgcmMgPSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3QoaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4LCBwYWNrZXRfcmMpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiaXBEZWZhdWx0Um91dGVyVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3RcbiIsIHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfb2JqZWN0X2xvb2t1cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZ2V0IG91ciBjb250ZXh0IGZyb20gbWZkCisgICAgICogaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eCAqaWZfY3R4ID0KKyAgICAgKiAgICAgICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eCAqKXJlZ2luZm8tPm15X3JlZ192b2lkOworICAgICAqLworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICByYyA9IFNOTVBfRVJSX05PQ1JFQVRJT047CisgICAgfQorCisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgcmMpOworICAgIGVsc2UKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAocm93cmVxX2N0eCk7CisKKyAgICByZXR1cm4gU05NUF9WQUxJREFURV9FUlIocmMpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX29iamVjdF9sb29rdXAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQGludGVybmFsCisgKiBSZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIGEgcGFydGljdWxhciBjb2x1bW4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF9jb2x1bW4oaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF9jb2x1bW4iLCAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lKDQpL1VOU0lHTkVEMzIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUERFRkFVTFRST1VURVJMSUZFVElNRToKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlKDUpL0lOVEVHRVIvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUERFRkFVTFRST1VURVJQUkVGRVJFTkNFOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgICAgIHJjID0gaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKElQREVGQVVMVFJPVVRFUlRBQkxFX01JTl9DT0wgPD0gY29sdW1uCisgICAgICAgICAgICAmJiBjb2x1bW4gPD0gSVBERUZBVUxUUk9VVEVSVEFCTEVfTUFYX0NPTCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X2NvbHVtbiIsICJhc3N1bWUgY29sdW1uICVkIGlzIHJlc2VydmVkXG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJjID0gTUZEX1NLSVA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgInVua25vd24gY29sdW1uICVkIGluIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfY29sdW1uXG4iLAorICAgICAgICAgICAgICAgICAgICAgY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfY29sdW1uICovCisKK2ludAorX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfdmFsdWVzKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOworICAgIHZvaWQgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKHZvaWQgKik7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X3ZhbHVlcyIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktPmNvbG51bSk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgaWYgKE1GRF9TS0lQID09IHJjKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9IFNOTVBfTk9TVUNISU5TVEFOQ0U7CisgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5VTEwgdmFyYmluZCBkYXRhIHBvaW50ZXIhXG4iKTsKKyAgICAgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgdGhlIGJ1ZmZlciB3YXNuJ3QgdXNlZCBwcmV2aW91c2x5IGZvciB0aGUgb2xkIGRhdGEgKGkuZS4gaXQKKyAgICAgICAgICogd2FzIGFsbGNvYXRlZCBtZW1vcnkpICBhbmQgdGhlIGdldCByb3V0aW5lIHJlcGxhY2VkIHRoZSBwb2ludGVyLAorICAgICAgICAgKiB3ZSBuZWVkIHRvIGZyZWUgdGhlIHByZXZpb3VzIHBvaW50ZXIuCisgICAgICAgICAqLworICAgICAgICBpZiAob2xkX3N0cmluZyAmJiAob2xkX3N0cmluZyAhPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpICYmCisgICAgICAgICAgICAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZyAhPSBvbGRfc3RyaW5nKSkgeworICAgICAgICAgICAgaWYgKGRhdGFGcmVlSG9vaykKKyAgICAgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKG9sZF9zdHJpbmcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyZWUob2xkX3N0cmluZyk7CisgICAgICAgIH0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF92YWx1ZXMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNFVCBQUk9DRVNTSU5HIE5PVCBBUFBMSUNBQkxFIChwZXIgTUlCIG9yIHVzZXIgc2V0dGluZykKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogREFUQSBBQ0NFU1MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAgICAgX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKTsKKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9jYWNoZV9sb2FkIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNhY2hlIGZvciBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jYWNoZV9sb2FkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGFuIGludmFsaWQgb3IgZXhwaXJlZCBjYWNoZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KCgwID09IGNhY2hlLT52YWxpZCkgfHwgKDEgPT0gY2FjaGUtPmV4cGlyZWQpKTsKKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICByZXR1cm4gaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQoKG5ldHNubXBfY29udGFpbmVyICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5tYWdpYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X2NhY2hlX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY2FjaGUgaW4gaXBEZWZhdWx0Um91dGVyVGFibGVfY2FjaGVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250YWluZXIgPSAobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY29udGFpbmVyX2l0ZW1fZnJlZShpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9jb250YWluZXJfaXRlbV9mcmVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KQorICAgICAgICByZXR1cm47CisKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfaXRlbV9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9jb250YWluZXJfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbnRhaW5lciBpbiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogZnJlZSBhbGwgaXRlbXMuIGluZWZmaWNpZW50LCBidXQgZWFzeS4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NvbnRhaW5lcl9pdGVtX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQoaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGNhY2hlIGluaXQKKyAgICAgKi8KKyAgICBpZl9jdHgtPmNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkX3NpemUpOworCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmX2N0eC0+Y2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgiaXBEZWZhdWx0Um91dGVyVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCisgICAgICAgICAgICAgICAgICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQorICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNodXRkb3duIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2VfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlmX2N0eC0+Y29udGFpbmVyKTsKKworICAgIF9jb250YWluZXJfZnJlZShpZl9jdHgtPmNvbnRhaW5lcik7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgoraXBEZWZhdWx0Um91dGVyVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKK3sKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9PSURfTEVOXTsKKyAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICAvKgorICAgICAqIHNldCB1cCBzdG9yYWdlIGZvciBPSUQKKyAgICAgKi8KKyAgICBvaWRfaWR4Lm9pZHMgPSBvaWRfdG1wOworICAgIG9pZF9pZHgubGVuID0gc2l6ZW9mKG9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQKKyAgICAgKi8KKyAgICByYyA9IGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZCgmb2lkX2lkeCwgbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvd3JlcV9jdHggPQorICAgICAgICBDT05UQUlORVJfRklORChpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzgwNDkxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKy8qKiBAaW5ncm91cCBpbnRlcmZhY2U6IFJvdXRpbmVzIHRvIGludGVyZmFjZSB0byBOZXQtU05NUAorICoKKyAqIFx3YXJuaW5nIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBjYWxsZWQgZGlyZWN0bHksCisgKiAgICAgICAgICBvciB1c2VkIHRvIGludGVycHJldCBmdW5jdGlvbmFsaXR5LiBJdCBpcyBzdWJqZWN0IHRvCisgKiAgICAgICAgICBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAKKyAqIEB7CisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9JTlRFUkZBQ0VfSAorI2RlZmluZSBJUERFRkFVTFRST1VURVJUQUJMRV9JTlRFUkZBQ0VfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlLmgiCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqIFBVQkxJQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZSAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwRGVmYXVsdFJvdXRlclRhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlCisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2N0eCwgdV9sb25nIGZsYWdzKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwRGVmYXVsdFJvdXRlclRhYmxlX3NodXRkb3duX2ludGVyZmFjZQorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jdHgpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICppcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICppcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb25fc2V0CisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHZvaWQgKik7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eAorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CisgICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKworICAgIC8qCisgICAgICogYWNjZXNzIHRvIGNlcnRhaW4gaW50ZXJuYWxzLiB1c2Ugd2l0aCBjYXV0aW9uIQorICAgICAqLworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2Yyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSVEFCTEVfSU5URVJGQUNFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX29pZHMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxNGU3MQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRzLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLW9pZHMubTJjIDEyODU1IDIwMDUtMDktMjcgMTU6NTY6MDhaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9PSURTX0gKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfT0lEU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSAKKyAgICAgKi8KKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfT0lEICAgICAgICAgICAgICAxLDMsNiwxLDIsMSw0LDM3CisKKyNkZWZpbmUgQ09MVU1OX0lQREVGQVVMVFJPVVRFUkFERFJFU1NUWVBFICAgICAgICAgMQorCisjZGVmaW5lIENPTFVNTl9JUERFRkFVTFRST1VURVJBRERSRVNTICAgICAgICAgMgorCisjZGVmaW5lIENPTFVNTl9JUERFRkFVTFRST1VURVJJRklOREVYICAgICAgICAgMworCisjZGVmaW5lIENPTFVNTl9JUERFRkFVTFRST1VURVJMSUZFVElNRSAgICAgICAgIDQKKworI2RlZmluZSBDT0xVTU5fSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRSAgICAgICAgIDUKKworCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX01JTl9DT0wgICBDT0xVTU5fSVBERUZBVUxUUk9VVEVSTElGRVRJTUUKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfTUFYX0NPTCAgIENPTFVNTl9JUERFRkFVTFRST1VURVJQUkVGRVJFTkNFCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJUQUJMRV9PSURTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExZDg1YwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS5oCkBAIC0wLDAgKzEsOCBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KKworY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZSkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2VzcykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkODA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoqIFxwYWdlIE1GRCBoZWxwZXIgZm9yIGlwSWZTdGF0c1RhYmxlCisgKgorICogXHNlY3Rpb24gaW50cm8gSW50cm9kdWN0aW9uCisgKiBJbnRyb2R1Y3RvcnkgdGV4dC4KKyAqCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZS5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaD4KKworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorCitjb25zdCBvaWQgICAgICAgaXBJZlN0YXRzVGFibGVfb2lkW10gPSB7IElQSUZTVEFUU1RBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlwSWZTdGF0c1RhYmxlX29pZF9zaXplID0gT0lEX0xFTkdUSChpcElmU3RhdHNUYWJsZV9vaWQpOworCitpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0Oworc3RhdGljIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3A7CisKK3ZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwSWZTdGF0c1RhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX2lwSWZTdGF0c1RhYmxlKHZvaWQpOworCisKKy8qKgorICogSW5pdGlhbGl6ZXMgdGhlIGlwSWZTdGF0c1RhYmxlIG1vZHVsZQorICovCit2b2lkCitpbml0X2lwSWZTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aW5pdF9pcElmU3RhdHNUYWJsZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDA6bzogUGVyZm9ybSBpcElmU3RhdHNUYWJsZSBvbmUtdGltZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCisgICAgICovCisKKyAgICAvKgorICAgICAqIGhlcmUgd2UgaW5pdGlhbGl6ZSBhbGwgdGhlIHRhYmxlcyB3ZSdyZSBwbGFubmluZyBvbiBzdXBwb3J0aW5nCisgICAgICovCisgICAgaWYgKHNob3VsZF9pbml0KCJpcElmU3RhdHNUYWJsZSIpKQorICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwSWZTdGF0c1RhYmxlKCk7CisKKyAgICAvKgorICAgICAqIGxhc3QgY2hhbmdlZCBzaG91bGQgYmUgMCBhdCBzdGFydHVwCisgICAgICovCisgICAgaXBJZlN0YXRzVGFibGVfbGFzdENoYW5nZV9zZXQoMCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRfaXBJZlN0YXRzVGFibGUgKi8KKworLyoqCisgKiBTaHV0LWRvd24gdGhlIGlwSWZTdGF0c1RhYmxlIG1vZHVsZSAoYWdlbnQgaXMgZXhpdGluZykKKyAqLwordm9pZAorc2h1dGRvd25faXBJZlN0YXRzVGFibGUodm9pZCkKK3sKKyAgICBpZiAoc2hvdWxkX2luaXQoImlwSWZTdGF0c1RhYmxlIikpCisgICAgICAgIHNodXRkb3duX3RhYmxlX2lwSWZTdGF0c1RhYmxlKCk7CisKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBpcElmU3RhdHNUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2lwSWZTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aW5pdGlhbGl6ZV90YWJsZV9pcElmU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMTpvOiBQZXJmb3JtIGlwSWZTdGF0c1RhYmxlIG9uZS10aW1lIHRhYmxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMjpvOiB8LT5Jbml0aWFsaXplIGlwSWZTdGF0c1RhYmxlIHVzZXIgY29udGV4dAorICAgICAqIGlmIHlvdSdkIGxpa2UgdG8gcGFzcyBpbiBhIHBvaW50ZXIgdG8gc29tZSBkYXRhIGZvciB0aGlzCisgICAgICogdGFibGUsIGFsbG9jYXRlIG9yIHNldCBpdCB1cCBoZXJlLgorICAgICAqLworICAgIC8qCisgICAgICogYSBuZXRzbm1wX2RhdGFfbGlzdCBpcyBhIHNpbXBsZSB3YXkgdG8gc3RvcmUgdm9pZCBwb2ludGVycy4gQSBzaW1wbGUKKyAgICAgKiBzdHJpbmcgdG9rZW4gaXMgdXNlZCB0byBhZGQsIGZpbmQgb3IgcmVtb3ZlIHBvaW50ZXJzLgorICAgICAqLworICAgIGlwSWZTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wCisJPSBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoImlwSWZTdGF0c1RhYmxlIiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIE5vIHN1cHBvcnQgZm9yIGFueSBmbGFncyB5ZXQsIGJ1dCBpbiB0aGUgZnV0dXJlIHlvdSB3b3VsZAorICAgICAqIHNldCBhbnkgZmxhZ3MgaGVyZS4KKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBfaXBJZlN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKwkoaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AsIGZsYWdzKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6ZV90YWJsZV9pcElmU3RhdHNUYWJsZSAqLworCisvKioKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBpcElmU3RhdHNUYWJsZSAKKyAqLwordm9pZAorc2h1dGRvd25fdGFibGVfaXBJZlN0YXRzVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIHNodXRkb3duIGNvZGUKKyAgICAgKi8KKyAgICBfaXBJZlN0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGlwSWZTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShpcElmU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AgPSBOVUxMOworfQorCisvKioKKyAqIGV4dHJhIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gKGVnIGRlZmF1bHQgdmFsdWVzKQorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4ICAgIDogcm93IHJlcXVlc3QgY29udGV4dAorICogQHBhcmFtIHVzZXJfaW5pdF9jdHggOiB2b2lkIHBvaW50ZXIgZm9yIHVzZXIgKHBhcmFtZXRlciB0byByb3dyZXFfY3R4X2FsbG9jYXRlKQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgIDogbm8gZXJyb3JzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICA6IGVycm9yIChjb250ZXh0IGFsbG9jYXRlIHdpbGwgZmFpbCkKKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjEwOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwSWZTdGF0c1RhYmxlIHJvd3JlcSBpbml0aWFsaXphdGlvbi4gKGVnIERFRlZBTFMpCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdCAqLworCisvKioKKyAqIGV4dHJhIGNvbnRleHQgY2xlYW51cAorICoKKyAqLwordm9pZAoraXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgaXBJZlN0YXRzVGFibGUgcm93cmVxIGNsZWFudXAuCisgICAgICovCisgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShyb3dyZXFfY3R4LT5kYXRhKTsKKyAgICByb3dyZXFfY3R4LT5kYXRhID0gTlVMTDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCisKKy8qKgorICogcHJlLXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjUxMDpvOiBQZXJmb3JtIGlwSWZTdGF0c1RhYmxlIHByZS1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0ICovCisKKy8qKgorICogcG9zdC1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICogTm90ZToKKyAqICAgTmV3IHJvd3MgaGF2ZSBiZWVuIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciwgYW5kCisgKiAgIGRlbGV0ZWQgcm93cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIgYW5kCisgKiAgIHJlbGVhc2VkLgorICoKKyAqIEBwYXJhbSB1c2VyX2NvbnRleHQKKyAqIEBwYXJhbSByYyA6IE1GRF9TVUNDRVNTIGlmIGFsbCByZXF1ZXN0cyBzdWNjZWVkZWQKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBvdGhlciBlcnJvciAoaWdub3JlZCkKKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTE6bzogUGVyZm9ybSBpcElmU3RhdHNUYWJsZSBwb3N0LXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKworLyoqIEB7ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYTk1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaApAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUElGU1RBVFNUQUJMRV9ICisjZGVmaW5lIElQSUZTVEFUU1RBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBtaXNjIG1pc2M6IE1pc2NlbGxhbmVvdXMgcm91dGluZXMKKyAqCisgKiBAeworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg+CisKKyAgICAvKgorICAgICAqIG90aGVyIHJlcXVpcmVkIG1vZHVsZSBjb21wb25lbnRzIAorICAgICAqLworICAgIC8qICpJTkRFTlQtT0ZGKiAgKi8KK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQpCisgICAgLyogKklOREVOVC1PTiogICovCisKKyAgICAvKgorICAgICAqIE9JRCBhbmQgY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgaXBJZlN0YXRzVGFibGUgCisgICAgICovCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGVfb2lkcy5oIgorCisgICAgLyoKKyAgICAgKiBlbnVtIGRlZmluaW9ucyAKKyAgICAgKi8KKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9lbnVtcy5oIgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGluaXRfaXBJZlN0YXRzVGFibGUodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2lwSWZTdGF0c1RhYmxlKHZvaWQpOworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLCBsZW5ndGg6IDkKKyAgICAgKi8KKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBXaGVuIHlvdSByZWdpc3RlciB5b3VyIG1pYiwgeW91IGdldCB0byBwcm92aWRlIGEgZ2VuZXJpYworICAgICAqIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBiYWNrIHRvIHlvdSBmb3IgbW9zdCBvZiB0aGUKKyAgICAgKiBmdW5jdGlvbnMgY2FsbHMuCisgICAgICoKKyAgICAgKiBUT0RPOjEwMDpyOiBSZXZpZXcgYWxsIGNvbnRleHQgc3RydWN0dXJlcworICAgICAqLworICAgIC8qCisgICAgICogVE9ETzoxMDE6bzogfC0+IFJldmlldyBpcElmU3RhdHNUYWJsZSByZWdpc3RyYXRpb24gY29udGV4dC4KKyAgICAgKi8KKyAgICB0eXBlZGVmIG5ldHNubXBfZGF0YV9saXN0IGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBUT0RPOjExMDpyOiB8LT4gUmV2aWV3IGlwSWZTdGF0c1RhYmxlIGRhdGEgY29udGV4dCBzdHJ1Y3R1cmUuCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGRhdGEgZm9yIGlwSWZTdGF0c1RhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSBpcElmU3RhdHNUYWJsZV9kYXRhOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTIwOnI6IHwtPiBSZXZpZXcgaXBJZlN0YXRzVGFibGUgbWliIGluZGV4LgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbmRleCBmb3IgaXBJZlN0YXRzVGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXBJZlN0YXRzVGFibGVfbWliX2luZGV4X3MgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0lQVmVyc2lvbigxKS9JbmV0VmVyc2lvbi9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBpcElmU3RhdHNJUFZlcnNpb247CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICAgICAqLworICAgICAgICBsb25nICAgICAgICAgICAgaXBJZlN0YXRzSWZJbmRleDsKKworCisgICAgfSBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXg7CisKKyAgICAvKgorICAgICAqIFRPRE86MTIxOnI6IHwgICB8LT4gUmV2aWV3IGlwSWZTdGF0c1RhYmxlIG1heCBpbmRleCBsZW5ndGguCisgICAgICogSWYgeW91IEtOT1cgdGhhdCB5b3VyIGluZGV4ZXMgd2lsbCBuZXZlciBleGNlZWQgYSBjZXJ0YWluCisgICAgICogbGVuZ3RoLCB1cGRhdGUgdGhpcyBtYWNybyB0byB0aGF0IGxlbmd0aC4KKyAgICAgKi8KKyNkZWZpbmUgTUFYX2lwSWZTdGF0c1RhYmxlX0lEWF9MRU4gICAgIDIKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxMzA6bzogfC0+IFJldmlldyBpcElmU3RhdHNUYWJsZSBSb3cgcmVxdWVzdCAocm93cmVxKSBjb250ZXh0LgorICAgICAqIFdoZW4geW91ciBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgeW91IHdpbGwgYmUgcGFzc2VkIGEKKyAgICAgKiBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4IHBvaW50ZXIuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9zIHsKKworICAgIC8qKiB0aGlzIG11c3QgYmUgZmlyc3QgZm9yIGNvbnRhaW5lciBjb21wYXJlIHRvIHdvcmsgKi8KKyAgICAgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisgICAgICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9pcElmU3RhdHNUYWJsZV9JRFhfTEVOXTsKKworICAgICAgICBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggdGJsX2lkeDsKKworICAgICAgICBpcElmU3RhdHNUYWJsZV9kYXRhICpkYXRhOworCisgICAgICAgIC8qCisgICAgICAgICAqIGZsYWdzIHBlciByb3cuIEN1cnJlbnRseSwgdGhlIGZpcnN0IChsb3dlcikgOCBiaXRzIGFyZSByZXNlcnZlZAorICAgICAgICAgKiBmb3IgdGhlIHVzZXIuIFNlZSBtZmQuaCBmb3Igb3RoZXIgZmxhZ3MuCisgICAgICAgICAqLworICAgICAgICB1X2ludCAgICAgICAgICAgcm93cmVxX2ZsYWdzOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MTMxOm86IHwgICB8LT4gQWRkIHVzZWZ1bCBkYXRhIHRvIGlwSWZTdGF0c1RhYmxlIHJvd3JlcSBjb250ZXh0LgorICAgICAgICAgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGtub3duX21pc3Npbmc7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGlwSWZTdGF0c1JlZnJlc2hSYXRlOworCisgICAgICAgIC8qCisgICAgICAgICAqIHN0b3JhZ2UgZm9yIGZ1dHVyZSBleHBhbnNpb24KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICppcElmU3RhdHNUYWJsZV9kYXRhX2xpc3Q7CisKKyAgICB9IGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHg7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBpcElmU3RhdHNUYWJsZV9yZWZfcm93cmVxX2N0eF9zIHsKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICB9IGlwSWZTdGF0c1RhYmxlX3JlZl9yb3dyZXFfY3R4OworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAqLworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VyX2NvbnRleHQpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZXJfY29udGV4dCwgaW50IHJjKTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCB2b2lkICp1c2VyX2luaXRfY3R4KTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpcElmU3RhdHNUYWJsZV9kYXRhICppcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEoaXBJZlN0YXRzVGFibGVfZGF0YSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKKworCisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXBJZlN0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CisKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXBJZlN0YXRzVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwSWZTdGF0c1RhYmxlX29pZF9zaXplOworCisKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgiCisKKyAgICAvKgorICAgICAqIERVTU1ZIG1hcmtlcnMsIGlnbm9yZQorICAgICAqCisgICAgICogVE9ETzowOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjI5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzozOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86NDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBJRlNUQVRTVEFCTEVfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MTlkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZS5oIgorCisKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorCitzdGF0aWMgaW50ICAgICAgaXBpc19jYWNoZV9yZWZyZXNoID0gSVBJRlNUQVRTVEFCTEVfQ0FDSEVfVElNRU9VVDsKKworLyoqIEBpbmdyb3VwIGludGVyZmFjZQorICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCisgKgorICogVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gbG9jYXRlIHRoZSBkYXRhIHVzZWQgdG8gc2F0aXNmeQorICogcmVxdWVzdHMuCisgKiAKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcElmU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMywgbGVuZ3RoOiA5CisgKi8KKworLyoqCisgKiBpbml0aWFsaXphdGlvbiBmb3IgaXBJZlN0YXRzVGFibGUgZGF0YSBhY2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8KKyAqIGFsbG9jYXRlIGFueSByZXNvdXJjZXMgeW91IG5lZWQgZm9yIHRoZSBkYXRhIHRhYmxlLgorICoKKyAqIEBwYXJhbSBpcElmU3RhdHNUYWJsZV9yZWcKKyAqICAgICAgICBQb2ludGVyIHRvIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IHVucmVjb3ZlcmFibGUgZXJyb3IuCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfaW5pdF9kYXRhKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIGlwSWZTdGF0c1RhYmxlX3JlZykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9pbml0X2RhdGEiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDM6bzogSW5pdGlhbGl6ZSBpcElmU3RhdHNUYWJsZSBkYXRhLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2luaXQoKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfaW5pdF9kYXRhICovCisKKy8qKgorICogY29udGFpbmVyIG92ZXJ2aWV3CisgKgorICovCisKKy8qKgorICogY29udGFpbmVyIGluaXRpYWxpemF0aW9uCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHJfcHRyIEEgcG9pbnRlciB0byBhIGNvbnRhaW5lciBwb2ludGVyLiBJZiB5b3UKKyAqICAgICAgICBjcmVhdGUgYSBjdXN0b20gY29udGFpbmVyLCB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcmV0dXJuIGl0CisgKiAgICAgICAgdG8gdGhlIE1GRCBoZWxwZXIuIElmIHNldCB0byBOVUxMLCB0aGUgTUZEIGhlbHBlciB3aWxsCisgKiAgICAgICAgYWxsb2NhdGUgYSBjb250YWluZXIgZm9yIHlvdS4KKyAqIEBwYXJhbSAgY2FjaGUgQSBwb2ludGVyIHRvIGEgY2FjaGUgc3RydWN0dXJlLiBZb3UgY2FuIHNldCB0aGUgdGltZW91dAorICogICAgICAgICBhbmQgb3RoZXIgY2FjaGUgZmxhZ3MgdXNpbmcgdGhpcyBwb2ludGVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzdGFydHVwIHRvIGFsbG93IHlvdSB0byBjdXN0b21pemUgY2VydGFpbgorICogIGFzcGVjdHMgb2YgdGhlIGFjY2VzcyBtZXRob2QuIEZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyBmb3IgYWR2YW5jZWQKKyAqICB1c2Vycy4gVGhlIGRlZmF1bHQgY29kZSBzaG91bGQgc3VmZmljZSBmb3IgbW9zdCBjYXNlcy4gSWYgbm8gY3VzdG9tCisgKiAgY29udGFpbmVyIGlzIGFsbG9jYXRlZCwgdGhlIE1GRCBjb2RlIHdpbGwgY3JlYXRlIG9uZSBmb3IgeW91ci4KKyAqCisgKiAgVGhpcyBpcyBhbHNvIHRoZSBwbGFjZSB0byBzZXQgdXAgY2FjaGUgYmVoYXZpb3IuIFRoZSBkZWZhdWx0LCB0bworICogIHNpbXBseSBzZXQgdGhlIGNhY2hlIHRpbWVvdXQsIHdpbGwgd29yayB3ZWxsIHdpdGggdGhlIGRlZmF1bHQKKyAqICBjb250YWluZXIuIElmIHlvdSBhcmUgdXNpbmcgYSBjdXN0b20gY29udGFpbmVyLCB5b3UgbWF5IHdhbnQgdG8KKyAqICBsb29rIGF0IHRoZSBjYWNoZSBoZWxwZXIgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueQorICogIGZsYWdzIHlvdSB3YW50IHRvIHNldC4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgaW5pdGlhbGl6YXRpb24gbmVlZGVkCisgKiAgZm9yIHlvdSBkYXRhIHNvdXJjZS4gRm9yIGV4YW1wbGUsIG9wZW5pbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIKKyAqICBwcm9jZXNzIHRoYXQgd2lsbCBzdXBwbHkgdGhlIGRhdGEsIG9wZW5pbmcgYSBkYXRhYmFzZSwgZXRjLgorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKiBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjb250YWluZXIgcGFyYW0gdG8gaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CisgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIFdlIGNyZWF0ZSBhIGN1c3RvbSBjb250YWluZXIgaGVyZSBzbyB3ZSBjYW4gcHJlLWxvYWQgaXQsIHdoaWNoCisgICAgICogd2lsbCByZXN1bHQgaW4gYWxsIG5ldyBlbnRyaWVzIHdpdGggbGFzdCBjaGFuZ2VkIHZhbHVlcy4gd2UgbmVlZAorICAgICAqIHRvIGNsZWFyIHRob3NlLi4uICBXZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIGlmSW5kZXhlcyBoYXZlIGJlZW4KKyAgICAgKiBhc3NpZ25lZC4uLgorICAgICAqLworICAgICpjb250YWluZXJfcHRyX3B0ciA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImlwSWZTdGF0c1RhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMICE9ICpjb250YWluZXJfcHRyX3B0cikgeworICAgICAgICAoKmNvbnRhaW5lcl9wdHJfcHRyKS0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImlwSWZTdGF0c1RhYmxlIik7CisgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKCpjb250YWluZXJfcHRyX3B0cik7CisgICAgfQorICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY2FjaGUgcGFyYW0gdG8gaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgaXBJZlN0YXRzVGFibGUgY2FjaGUgcHJvcGVydGllcy4KKyAgICAgKgorICAgICAqIEFsc28gZm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUKKyAgICAgKiBjYWNoZS4gRG8gbm90IGNoYW5nZSB0aGUgbWFnaWMgcG9pbnRlciwgYXMgaXQgaXMgdXNlZAorICAgICAqIGJ5IHRoZSBNRkQgaGVscGVyLiBUbyBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgc2V0CisgICAgICogY2FjaGUtPmVuYWJsZWQgdG8gMC4KKyAgICAgKi8KKyAgICBjYWNoZS0+dGltZW91dCA9IElQSUZTVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQ7ICAgICAgLyogc2Vjb25kcyAqLworCisgICAgY2FjaGUtPmZsYWdzIHw9CisgICAgICAgIChORVRTTk1QX0NBQ0hFX0RPTlRfQVVUT19SRUxFQVNFIHwgTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfRVhQSVJFRAorICAgICAgICAgfCBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9CRUZPUkVfTE9BRCB8CisgICAgICAgICBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCisgKi8KK3N0YXRpYyB2b2lkCitfY2hlY2tfZm9yX3VwZGF0ZXMoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKnN0YXRzKQoreworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmlmc3RhdHNfZW50cnk7CisKKyAgICAvKgorICAgICAqIGNoZWNrIGZvciBtYXRjaGluZyBlbnRyeS4gd29ya3MgYmVjYXVzZSBpbmRleGVzIGFyZSB0aGUgc2FtZS4KKyAgICAgKi8KKyAgICBpZnN0YXRzX2VudHJ5ID0gKG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkqKUNPTlRBSU5FUl9GSU5EKHN0YXRzLCByb3dyZXFfY3R4LT5kYXRhKTsKKyAgICBpZiAoTlVMTCA9PSBpZnN0YXRzX2VudHJ5KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTphY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAidXBkYXRpbmcgbWlzc2luZyBlbnRyeVxuIikpOworCisgICAgICAgIC8qCisgICAgICAgICAqIG1hcmsgcm93IGFzIG1pc3NpbmcsIHNvIHdlIGNhbiBzZXQgZGlzY29udGludWl0eQorICAgICAgICAgKiB3aGVuIGl0IGNvbWVzIGJhY2suCisgICAgICAgICAqCisgICAgICAgICAqIHdoYXQgZWxzZSBzaG91bGQgd2UgZG8/IHNldCByZWZyZXNoIHRvIDA/IHRoYXQncyBub3QgcXVpdGUgcmlnaHQuLi4KKyAgICAgICAgICovCisgICAgICAgIHJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTphY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAidXBkYXRpbmcgZXhpc3RpbmcgZW50cnlcbiIpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBmb3IgY2hhbmdlcyAmIHVwZGF0ZQorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfdXBkYXRlKHJvd3JlcV9jdHgtPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmc3RhdHNfZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHNldCBkaXNjb250aW51aXR5IGlmIHByZXZpb3VzbHkgbWlzc2luZy4KKyAgICAgICAgICovCisgICAgICAgIGlmICgxID09IHJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcpIHsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcgPSAwOworICAgICAgICAgICAgcm93cmVxX2N0eC0+aXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOworICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfbGFzdENoYW5nZV9zZXQobmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtb3ZlIGVudHJ5IGZyb20gY29udGFpbmVyCisgICAgICAgICAqLworICAgICAgICBDT05UQUlORVJfUkVNT1ZFKHN0YXRzLCBpZnN0YXRzX2VudHJ5KTsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShpZnN0YXRzX2VudHJ5KTsKKyAgICB9Cit9CisKKy8qKgorICogYWRkIG5ldyBlbnRyeQorICovCitzdGF0aWMgdm9pZAorX2FkZF9uZXcobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqaWZzdGF0c19lbnRyeSwKKyAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKworICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTphY2Nlc3MiLCAiY3JlYXRpbmcgbmV3IGVudHJ5XG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlmc3RhdHNfZW50cnkpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogYWxsb2NhdGUgYW4gcm93IGNvbnRleHQgYW5kIHNldCB0aGUgaW5kZXgoZXMpCisgICAgICovCisgICAgcm93cmVxX2N0eCA9CisgICAgICAgIGlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoaWZzdGF0c19lbnRyeSwgTlVMTCk7CisgICAgaWYgKChOVUxMICE9IHJvd3JlcV9jdHgpCisgICAgICAgICYmIChNRkRfU1VDQ0VTUyA9PQorICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmc3RhdHNfZW50cnktPmluZGV4WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZzdGF0c19lbnRyeS0+aW5kZXhbMV0pKSkgeworICAgICAgICByb3dyZXFfY3R4LT5pcElmU3RhdHNSZWZyZXNoUmF0ZSA9IGlwaXNfY2FjaGVfcmVmcmVzaCAqIDEwMDA7ICAgLyogbWlsbGktc2Vjb25kcyAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgIGlwSWZTdGF0c1RhYmxlX2xhc3RDaGFuZ2Vfc2V0KG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoTlVMTCAhPSByb3dyZXFfY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZSBjYWNoZS5cbiIpOworICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZSBjYWNoZS5cbiIpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShpZnN0YXRzX2VudHJ5KTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBjb250YWluZXIgc2h1dGRvd24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0ciBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5lci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc2h1dGRvd24gdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUoKS4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgY2xlYW51cCBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgY2xvc2luZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCBzdXBwbGllZCB0aGUgZGF0YSwgY2xvc2luZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcl9wdHIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgcGFyYW1zIHRvIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93blxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKy8qKgorICogbG9hZCBpbml0aWFsIGRhdGEKKyAqCisgKiBUT0RPOjM1MDpNOiBJbXBsZW1lbnQgaXBJZlN0YXRzVGFibGUgZGF0YSBsb2FkCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIGNhY2hlIGhlbHBlciB0byBsb2FkCisgKiB0aGUgY29udGFpbmVyIGFnYWluIChhZnRlciB0aGUgY29udGFpbmVyIGZyZWUgZnVuY3Rpb24gaGFzIGJlZW4KKyAqIGNhbGxlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBjb250ZW50cykuCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgdG8gd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGluc2VydGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgOiBDYW4ndCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGluZGV4KGVzKSAoYW5kIGRhdGEsIG9wdGlvbmFsbHkpCisgKiAgZm9yIHRoZSBldmVyeSByb3cgaW4gdGhlIGRhdGEgc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBXaGlsZSBsb2FkaW5nIHRoZSBkYXRhLCB0aGUgb25seSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIGluZGV4ZXMuCisgKiAgSWYgYWNjZXNzIHRvIHlvdXIgZGF0YSBpcyBjaGVhcC9mYXN0IChlLmcuIHlvdSBoYXZlIGEgcG9pbnRlciB0byBhCisgKiAgc3RydWN0dXJlIGluIG1lbW9yeSksIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXBkYXRlIHRoZSBkYXRhIGhlcmUuCisgKiAgSWYsIGhvd2V2ZXIsIHRoZSBhY2Nlc3NpbmcgdGhlIGRhdGEgaW52b3ZsZXMgbW9yZSB3b3JrIChlLmcuIHBhcnNpbmcKKyAqICBzb21lIG90aGVyIGV4aXN0aW5nIGRhdGEsIG9yIHBlZm9ybWluZyBjYWxjdWxhdGlvbnMgdG8gZGVyaXZlIHRoZSBkYXRhKSwKKyAqICB0aGVuIHlvdSBjYW4gbGltaXQgeW91cnNlbGYgdG8gc2V0dGluZyB0aGUgaW5kZXhlcyBhbmQgc2F2aW5nIGFueQorICogIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgbGF0ZXIuIFRoZW4gdXNlIHRoZSBzYXZlZCBpbmZvcm1hdGlvbiBpbgorICogIGlwSWZTdGF0c1RhYmxlX3Jvd19wcmVwKCkgZm9yIHBvcHVsYXRpbmcgZGF0YS4KKyAqCisgKiBAbm90ZQorICogIElmIHlvdSBuZWVkIGNvbnNpc3RlbmN5IGJldHdlZW4gcm93cyAobGlrZSB5b3Ugd2FudCBzdGF0aXN0aWNzCisgKiAgZm9yIGVhY2ggcm93IHRvIGJlIGZyb20gdGhlIHNhbWUgdGltZSBmcmFtZSksIHlvdSBzaG91bGQgc2V0IGFsbAorICogIGRhdGEgaGVyZS4KKyAqCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKnN0YXRzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIHN0YXRzID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2xvYWQoTlVMTCwgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfTE9BRF9JRlRBQkxFKTsKKyAgICBpZiAoTlVMTCA9PSBzdGF0cykKKyAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworCisgICAgLyoKKyAgICAgKiBUT0RPOjM1MTpNOiB8LT4gTG9hZC91cGRhdGUgZGF0YSBpbiB0aGUgaXBJZlN0YXRzVGFibGUgY29udGFpbmVyLgorICAgICAqIGxvb3Agb3ZlciB5b3VyIGlwSWZTdGF0c1RhYmxlIGRhdGEsIGFsbG9jYXRlIGEgcm93cmVxIGNvbnRleHQsCisgICAgICogc2V0IHRoZSBpbmRleChlcykgW2FuZCBkYXRhLCBvcHRpb25hbGx5XSBhbmQgaW5zZXJ0IGludG8KKyAgICAgKiB0aGUgY29udGFpbmVyLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiB3ZSBqdXN0IGdvdCBhIGZyZXNoIGNvcHkgb2YgZGF0YS4gY29tcGFyZSBpdCB0bworICAgICAqIHdoYXQgd2UndmUgYWxyZWFkeSBnb3QsIGFuZCBtYWtlIGFueSBhZGp1c3RlbWVudHMuLi4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfRk9SX0VBQ0goY29udGFpbmVyLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikKKyAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrX2Zvcl91cGRhdGVzLCBzdGF0cyk7CisKKyAgICAvKgorICAgICAqIG5vdyBhZGQgYW55IG5ldyBlbnRyaWVzCisgICAgICovCisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKHN0YXRzLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikKKyAgICAgICAgICAgICAgICAgICAgICAgX2FkZF9uZXcsIGNvbnRhaW5lcik7CisKKworICAgIC8qCisgICAgICAqIGZyZWUgdGhlIGNvbnRhaW5lci4gd2UndmUgZWl0aGVyIGNsYWltZWQgZWFjaCBpZmVudHJ5LCBvciByZWxlYXNlZCBpdCwKKyAgICAgKiBzbyB0aGUgZGFsIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBjbGVhciB0aGUgY29udGFpbmVyLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9mcmVlKHN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9ET05UX0NMRUFSKTsKKworICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgIiVsdSByZWNvcmRzXG4iLCAodW5zaWduZWQgbG9uZylDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkICovCisKKy8qKgorICogY29udGFpbmVyIGNsZWFuIHVwCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgd2l0aCBhbGwgY3VycmVudCBpdGVtcworICoKKyAqICBUaGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGNhbGxlZCBwcmlvciB0byBhbGwKKyAqICBpdGVtJ3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIuIElmIHlvdQorICogIG5lZWQgdG8gZG8gYW55IHByb2Nlc3NpbmcgYmVmb3JlIHRoYXQsIGRvIGl0IGhlcmUuCisgKgorICogQG5vdGUKKyAqICBUaGUgTUZEIGhlbHBlciB3aWxsIHRha2UgY2FyZSBvZiByZWxlYXNpbmcgYWxsIHRoZSByb3cgY29udGV4dHMuCisgKgorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM4MDpNOiBGcmVlIGlwSWZTdGF0c1RhYmxlIGNvbnRhaW5lciBkYXRhLgorICAgICAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIHByZXBhcmUgcm93IGZvciBwcm9jZXNzaW5nLgorICoKKyAqICBXaGVuIHRoZSBhZ2VudCBoYXMgbG9jYXRlZCB0aGUgcm93IGZvciBhIHJlcXVlc3QsIHRoaXMgZnVuY3Rpb24gaXMKKyAqICBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgcm93IGZvciBwcm9jZXNzaW5nLiBJZiB5b3UgZnVsbHkgcG9wdWxhdGVkCisgKiAgdGhlIGRhdGEgY29udGV4dCBkdXJpbmcgdGhlIGluZGV4IHNldHVwIHBoYXNlLCB5b3UgbWF5IG5vdCBuZWVkIHRvCisgKiAgZG8gYW55dGhpbmcuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHggcG9pbnRlciB0byBhIGNvbnRleHQuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9yb3dfcHJlcChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9yb3dfcHJlcCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzozOTA6bzogUHJlcGFyZSByb3cgZm9yIHJlcXVlc3QuCisgICAgICogSWYgcG9wdWxhdGluZyByb3cgZGF0YSB3YXMgZGVsYXllZCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8KKyAgICAgKiBmaWxsIGluIHRoZSByb3cgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfcm93X3ByZXAgKi8KKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZjc2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIElQSUZTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0gKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLCBsZW5ndGg6IDkKKyAgICAgKi8KKworCisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luaXRfZGF0YShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfcmVnKTsKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjE4MDpvOiBSZXZpZXcgaXBJZlN0YXRzVGFibGUgY2FjaGUgdGltZW91dC4KKyAgICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBjYWNoZSB0aW1lcyBvdXQKKyAgICAgKi8KKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfQ0FDSEVfVElNRU9VVCAgIDYwCisKKyAgICB2b2lkICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSk7CisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyKTsKKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jYWNoZV9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIHZvaWQgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jYWNoZV9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX3Jvd19wcmVwKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBJRlNUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjY3M2RjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmMKQEAgLTAsMCArMSwzMDE1IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlLmgiCisKKworLyoqIEBkZWZncm91cCBkYXRhX2dldCBkYXRhX2dldDogUm91dGluZXMgdG8gZ2V0IGRhdGEKKyAqCisgKiBUT0RPOjIzMDpNOiBJbXBsZW1lbnQgaXBJZlN0YXRzVGFibGUgZ2V0IHJvdXRpbmVzLgorICogVE9ETzoyNDA6TTogSW1wbGVtZW50IGlwSWZTdGF0c1RhYmxlIG1hcHBpbmcgcm91dGluZXMgKGlmIGFueSkuCisgKgorICogVGhlc2Ugcm91dGluZSBhcmUgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMuIFRoZQorICogcm93IGNvbnRleHQgaXMgcGFzc2VkLCBhbG9uZyB3aXRoIGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHdoZXJlIHRoZQorICogdmFsdWUgc2hvdWxkIGJlIGNvcGllZC4KKyAqCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwSWZTdGF0c1RhYmxlIGlzIHN1YmlkIDMgb2YgaXBUcmFmZmljU3RhdHMuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMsIGxlbmd0aDogOQorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICogVE9ETzoyMDA6cjogSW1wbGVtZW50IGlwSWZTdGF0c1RhYmxlIGRhdGEgY29udGV4dCBmdW5jdGlvbnMuCisgKi8KKy8qCisgKiBpcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhCisgKgorICogUHVycG9zZTogY3JlYXRlIG5ldyBpcElmU3RhdHNUYWJsZV9kYXRhLgorICovCitpcElmU3RhdHNUYWJsZV9kYXRhICoKK2lwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCkKK3sKKyAgICAvKgorICAgICAqIFRPRE86MjAxOnI6IHwtPiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpcElmU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQuCisgICAgICovCisgICAgaXBJZlN0YXRzVGFibGVfZGF0YSAqcnRuID0gU05NUF9NQUxMT0NfVFlQRURFRihpcElmU3RhdHNUYWJsZV9kYXRhKTsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJ0bikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5hYmxlIHRvIG1hbGxvYyBtZW1vcnkgZm9yIG5ldyAiCisgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZV9kYXRhLlxuIik7CisgICAgfQorCisgICAgcmV0dXJuIHJ0bjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSAqLworCisvKgorICogaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhCisgKgorICogUHVycG9zZTogcmVsZWFzZSBpcElmU3RhdHNUYWJsZSBkYXRhLgorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEoaXBJZlN0YXRzVGFibGVfZGF0YSAqIGRhdGEpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjAyOnI6IHwtPiByZWxlYXNlIG1lbW9yeSBmb3IgdGhlIGlwSWZTdGF0c1RhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBmcmVlKGRhdGEpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEgKi8KKworCisKKy8qKgorICogc2V0IG1pYiBpbmRleChlcykKKyAqCisgKiBAcGFyYW0gdGJsX2lkeCBtaWIgaW5kZXggc3RydWN0dXJlCisgKiBAcGFyYW0gaXBJZlN0YXRzSVBWZXJzaW9uX3ZhbAorICogQHBhcmFtIGlwSWZTdGF0c0lmSW5kZXhfdmFsCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHNldHRpbmcgYWxsIHRoZSBNSUIgaW5kZXgKKyAqICBjb21wb25lbnRzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gSXQgaXMgYXNzdW1lIHRoYXQgdGhlIEMgdmFsdWVzCisgKiAgaGF2ZSBhbHJlYWR5IGJlZW4gbWFwcGVkIGZyb20gdGhlaXIgbmF0aXZlL3Jhd2Zvcm1hdCB0byB0aGUgTUlCIGZvcm1hdC4KKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcElmU3RhdHNJUFZlcnNpb25fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwSWZTdGF0c0lmSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGlwSWZTdGF0c0lQVmVyc2lvbigxKS9JbmV0VmVyc2lvbi9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2ggCisgICAgICovCisgICAgLyoqIFdBUk5JTkc6IHRoaXMgY29kZSBtaWdodCBub3Qgd29yayBmb3IgbmV0c25tcF9pZnN0YXRzX2VudHJ5ICovCisgICAgdGJsX2lkeC0+aXBJZlN0YXRzSVBWZXJzaW9uID0gaXBJZlN0YXRzSVBWZXJzaW9uX3ZhbDsKKworICAgIC8qCisgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9IIAorICAgICAqLworICAgIC8qKiBXQVJOSU5HOiB0aGlzIGNvZGUgbWlnaHQgbm90IHdvcmsgZm9yIG5ldHNubXBfaWZzdGF0c19lbnRyeSAqLworICAgIHRibF9pZHgtPmlwSWZTdGF0c0lmSW5kZXggPSBpcElmU3RhdHNJZkluZGV4X3ZhbDsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzZXQgcm93IGNvbnRleHQgaW5kZXhlcworICoKKyAqIEBwYXJhbSByZXFyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcworICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWliIGluZGV4cywgdGhlbiB1cGRhdGVzIHRoZSBvaWQgaW5kZXhzCisgKiAgZnJvbSB0aGUgbWliIGluZGV4LgorICovCitpbnQKK2lwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwSWZTdGF0c0lQVmVyc2lvbl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwSWZTdGF0c0lmSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0KKyAgICAgICAgaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCgmcm93cmVxX2N0eC0+dGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJUFZlcnNpb25fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0lmSW5kZXhfdmFsKSkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKworICAgIC8qCisgICAgICogY29udmVydCBtaWIgaW5kZXggdG8gb2lkIGluZGV4CisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBzaXplb2Yocm93cmVxX2N0eC0+b2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKyAgICBpZiAoMCAhPSBpcElmU3RhdHNUYWJsZV9pbmRleF90b19vaWQoJnJvd3JlcV9jdHgtPm9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT50YmxfaWR4KSkgeworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXQgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJblJlY2VpdmVzCisgKiBpcElmU3RhdHNJblJlY2VpdmVzIGlzIHN1YmlkIDMgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMworICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyByZWNlaXZlZCwgaW5jbHVkaW5nCisgICAgICAgICAgICB0aG9zZSByZWNlaXZlZCBpbiBlcnJvci4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJblJlY2VpdmVzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5SZWNlaXZlc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5SZWNlaXZlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJblJlY2VpdmVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJblJlY2VpdmVzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJblJlY2VpdmVzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luUmVjZWl2ZXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luUmVjZWl2ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5SZWNlaXZlc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luUmVjZWl2ZXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5SZWNlaXZlcworICogaXBJZlN0YXRzSENJblJlY2VpdmVzIGlzIHN1YmlkIDQgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyByZWNlaXZlZCwgaW5jbHVkaW5nCisgICAgICAgICAgICB0aG9zZSByZWNlaXZlZCBpbiBlcnJvci4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUgc2FtZQorICAgICAgICAgICAgZGF0YWdyYW1zIGFzIGlwSWZTdGF0c0luUmVjZWl2ZXMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlcgorICAgICAgICAgICAgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDSW5SZWNlaXZlcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDSW5SZWNlaXZlc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENJblJlY2VpdmVzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDSW5SZWNlaXZlcyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3c7CisgICAgKCppcElmU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luT2N0ZXRzCisgKiBpcElmU3RhdHNJbk9jdGV0cyBpcyBzdWJpZCA1IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjUKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgaW4gaW5wdXQgSVAgZGF0YWdyYW1zLAorICAgICAgICAgICAgaW5jbHVkaW5nIHRob3NlIHJlY2VpdmVkIGluIGVycm9yLiAgT2N0ZXRzIGZyb20gZGF0YWdyYW1zCisgICAgICAgICAgICBjb3VudGVkIGluIGlwSWZTdGF0c0luUmVjZWl2ZXMgTVVTVCBiZSBjb3VudGVkIGhlcmUuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5PY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbk9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5PY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luT2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbk9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5PY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5PY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luT2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbk9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5PY3RldHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJbk9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENJbk9jdGV0cworICogaXBJZlN0YXRzSENJbk9jdGV0cyBpcyBzdWJpZCA2IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgaW4gaW5wdXQgSVAgZGF0YWdyYW1zLAorICAgICAgICAgICAgaW5jbHVkaW5nIHRob3NlIHJlY2VpdmVkIGluIGVycm9yLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZQorICAgICAgICAgICAgc2FtZSBvY3RldHMgYXMgaXBJZlN0YXRzSW5PY3RldHMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlcgorICAgICAgICAgICAgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDSW5PY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luT2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5PY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5PY3RldHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDSW5PY3RldHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbk9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5PY3RldHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk9jdGV0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luT2N0ZXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5PY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luSGRyRXJyb3JzCisgKiBpcElmU3RhdHNJbkhkckVycm9ycyBpcyBzdWJpZCA3IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjcKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgZGlzY2FyZGVkIGR1ZSB0byBlcnJvcnMgaW4KKyAgICAgICAgICAgIHRoZWlyIElQIGhlYWRlcnMsIGluY2x1ZGluZyB2ZXJzaW9uIG51bWJlciBtaXNtYXRjaCwgb3RoZXIKKyAgICAgICAgICAgIGZvcm1hdCBlcnJvcnMsIGhvcCBjb3VudCBleGNlZWRlZCwgZXJyb3JzIGRpc2NvdmVyZWQgaW4KKyAgICAgICAgICAgIHByb2Nlc3NpbmcgdGhlaXIgSVAgb3B0aW9ucywgZXRjLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luSGRyRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5IZHJFcnJvcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luSGRyRXJyb3JzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbkhkckVycm9yc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5IZHJFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luSGRyRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luSGRyRXJyb3JzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbkhkckVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luSGRyRXJyb3JzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5IZHJFcnJvcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luSGRyRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbk5vUm91dGVzCisgKiBpcElmU3RhdHNJbk5vUm91dGVzIGlzIHN1YmlkIDggb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuOAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyBkaXNjYXJkZWQgYmVjYXVzZSBubyByb3V0ZQorICAgICAgICAgICAgY291bGQgYmUgZm91bmQgdG8gdHJhbnNtaXQgdGhlbSB0byB0aGVpciBkZXN0aW5hdGlvbi4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbk5vUm91dGVzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5Ob1JvdXRlc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5Ob1JvdXRlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJbk5vUm91dGVzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luTm9Sb3V0ZXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luTm9Sb3V0ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5OT1JPVVRFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5Ob1JvdXRlc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Ob1JvdXRlcy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luTm9Sb3V0ZXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luQWRkckVycm9ycworICogaXBJZlN0YXRzSW5BZGRyRXJyb3JzIGlzIHN1YmlkIDkgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuOQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyBkaXNjYXJkZWQgYmVjYXVzZSB0aGUgSVAKKyAgICAgICAgICAgIGFkZHJlc3MgaW4gdGhlaXIgSVAgaGVhZGVyJ3MgZGVzdGluYXRpb24gZmllbGQgd2FzIG5vdCBhCisgICAgICAgICAgICB2YWxpZCBhZGRyZXNzIHRvIGJlIHJlY2VpdmVkIGF0IHRoaXMgZW50aXR5LiAgVGhpcyBjb3VudAorICAgICAgICAgICAgaW5jbHVkZXMgaW52YWxpZCBhZGRyZXNzZXMgKGUuZy4sIDo6MCkuICBGb3IgZW50aXRpZXMgdGhhdAorICAgICAgICAgICAgYXJlIG5vdCBJUCByb3V0ZXJzIGFuZCB0aGVyZWZvcmUgZG8gbm90IGZvcndhcmQgZGF0YWdyYW1zLAorICAgICAgICAgICAgdGhpcyBjb3VudGVyIGluY2x1ZGVzIGRhdGFncmFtcyBkaXNjYXJkZWQgYmVjYXVzZSB0aGUKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2FzIG5vdCBhIGxvY2FsIGFkZHJlc3MuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5BZGRyRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5BZGRyRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbkFkZHJFcnJvcnNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbkFkZHJFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luQWRkckVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5BZGRyRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luQWRkckVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5BZGRyRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luQWRkckVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluQWRkckVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5BZGRyRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJblVua25vd25Qcm90b3MKKyAqIGlwSWZTdGF0c0luVW5rbm93blByb3RvcyBpcyBzdWJpZCAxMCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xMAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGxvY2FsbHktYWRkcmVzc2VkIElQIGRhdGFncmFtcyByZWNlaXZlZAorICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGJ1dCBkaXNjYXJkZWQgYmVjYXVzZSBvZiBhbiB1bmtub3duIG9yCisgICAgICAgICAgICB1bnN1cHBvcnRlZCBwcm90b2NvbC4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlc2UgZGF0YWdyYW1zIHdlcmUgYWRkcmVzc2VkIGlzCisgICAgICAgICAgICBpbmNyZW1lbnRlZC4gIFRoaXMgaW50ZXJmYWNlIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgIGlucHV0IGludGVyZmFjZSBmb3Igc29tZSBvZiB0aGUgZGF0YWdyYW1zLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisKKworCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luVW5rbm93blByb3RvcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJblVua25vd25Qcm90b3NfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luVW5rbm93blByb3Rvc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJblVua25vd25Qcm90b3MgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5VTktOT1dOUFJPVE9TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJblVua25vd25Qcm90b3NfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5JblVua25vd25Qcm90b3M7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzCisgKiBpcElmU3RhdHNJblRydW5jYXRlZFBrdHMgaXMgc3ViaWQgMTEgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTEKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgZGlzY2FyZGVkIGJlY2F1c2UgdGhlCisgICAgICAgICAgICBkYXRhZ3JhbSBmcmFtZSBkaWRuJ3QgY2FycnkgZW5vdWdoIGRhdGEuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTlRSVU5DQVRFRFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluVHJ1bmNhdGVkUGt0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMKKyAqIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcyBpcyBzdWJpZCAxMiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xMgorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGlucHV0IGRhdGFncmFtcyBmb3Igd2hpY2ggdGhpcyBlbnRpdHkgd2FzIG5vdAorICAgICAgICAgICAgdGhlaXIgZmluYWwgSVAgZGVzdGluYXRpb24gYW5kIGZvciB3aGljaCB0aGlzIGVudGl0eQorICAgICAgICAgICAgYXR0ZW1wdGVkIHRvIGZpbmQgYSByb3V0ZSB0byBmb3J3YXJkIHRoZW0gdG8gdGhhdCBmaW5hbAorICAgICAgICAgICAgZGVzdGluYXRpb24uICBJbiBlbnRpdGllcyB0aGF0IGRvIG5vdCBhY3QgYXMgSVAgcm91dGVycywKKyAgICAgICAgICAgIHRoaXMgY291bnRlciB3aWxsIGluY2x1ZGUgb25seSB0aG9zZSBkYXRhZ3JhbXMgdGhhdCB3ZXJlCisgICAgICAgICAgICBTb3VyY2UtUm91dGVkIHZpYSB0aGlzIGVudGl0eSwgYW5kIHRoZSBTb3VyY2UtUm91dGUKKyAgICAgICAgICAgIHByb2Nlc3Npbmcgd2FzIHN1Y2Nlc3NmdWwuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgaW5jb21pbmcgaW50ZXJmYWNlIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIGRhdGFncmFtLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luRm9yd0RhdGFncmFtc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkZPUldEQVRBR1JBTVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcworICogaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMgaXMgc3ViaWQgMTMgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTMKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBkYXRhZ3JhbXMgZm9yIHdoaWNoIHRoaXMgZW50aXR5IHdhcyBub3QKKyAgICAgICAgICAgIHRoZWlyIGZpbmFsIElQIGRlc3RpbmF0aW9uIGFuZCBmb3Igd2hpY2ggdGhpcyBlbnRpdHkKKyAgICAgICAgICAgIGF0dGVtcHRlZCB0byBmaW5kIGEgcm91dGUgdG8gZm9yd2FyZCB0aGVtIHRvIHRoYXQgZmluYWwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZSBzYW1lIHBhY2tldHMgYXMKKworCisKKyAgICAgICAgICAgIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93OworICAgICgqaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNSZWFzbVJlcWRzCisgKiBpcElmU3RhdHNSZWFzbVJlcWRzIGlzIHN1YmlkIDE0IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjE0CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgSVAgZnJhZ21lbnRzIHJlY2VpdmVkIHRoYXQgbmVlZGVkIHRvIGJlCisgICAgICAgICAgICByZWFzc2VtYmxlZCBhdCB0aGlzIGludGVyZmFjZS4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlc2UgZnJhZ21lbnRzIHdlcmUgYWRkcmVzc2VkIGlzCisgICAgICAgICAgICBpbmNyZW1lbnRlZC4gIFRoaXMgaW50ZXJmYWNlIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgIGlucHV0IGludGVyZmFjZSBmb3Igc29tZSBvZiB0aGUgZnJhZ21lbnRzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c1JlYXNtUmVxZHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNSZWFzbVJlcWRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNSZWFzbVJlcWRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c1JlYXNtUmVxZHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c1JlYXNtUmVxZHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1JlYXNtUmVxZHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVhc21SZXFkcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzUmVhc21SZXFkc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzUmVhc21SZXFkc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtUmVxZHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1JlYXNtUmVxZHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c1JlYXNtT0tzCisgKiBpcElmU3RhdHNSZWFzbU9LcyBpcyBzdWJpZCAxNSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xNQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGRhdGFncmFtcyBzdWNjZXNzZnVsbHkgcmVhc3NlbWJsZWQuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHdoaWNoIHRoZXNlIGRhdGFncmFtcyB3ZXJlIGFkZHJlc3NlZCBpcworICAgICAgICAgICAgaW5jcmVtZW50ZWQuICBUaGlzIGludGVyZmFjZSBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICBpbnB1dCBpbnRlcmZhY2UgZm9yIHNvbWUgb2YgdGhlIGRhdGFncmFtcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWFzbU9LcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c1JlYXNtT0tzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNSZWFzbU9Lc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzUmVhc21PS3NfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c1JlYXNtT0tzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNSZWFzbU9Lc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWFzbU9LcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzUmVhc21PS3NfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNT0tTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNSZWFzbU9Lc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtT0tzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNSZWFzbU9Lc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzUmVhc21GYWlscworICogaXBJZlN0YXRzUmVhc21GYWlscyBpcyBzdWJpZCAxNiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xNgorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGZhaWx1cmVzIGRldGVjdGVkIGJ5IHRoZSBJUCByZS1hc3NlbWJseQorICAgICAgICAgICAgYWxnb3JpdGhtIChmb3Igd2hhdGV2ZXIgcmVhc29uOiB0aW1lZCBvdXQsIGVycm9ycywgZXRjLikuCisgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYSBjb3VudCBvZiBkaXNjYXJkZWQgSVAKKyAgICAgICAgICAgIGZyYWdtZW50cyBzaW5jZSBzb21lIGFsZ29yaXRobXMgKG5vdGFibHkgdGhlIGFsZ29yaXRobSBpbgorICAgICAgICAgICAgUkZDIDgxNSkgY2FuIGxvc2UgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBmcmFnbWVudHMgYnkKKyAgICAgICAgICAgIGNvbWJpbmluZyB0aGVtIGFzIHRoZXkgYXJlIHJlY2VpdmVkLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIGludGVyZmFjZSB0byB3aGljaCB0aGVzZSBmcmFnbWVudHMgd2VyZSBhZGRyZXNzZWQgaXMKKyAgICAgICAgICAgIGluY3JlbWVudGVkLiAgVGhpcyBpbnRlcmZhY2UgbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgaW5wdXQgaW50ZXJmYWNlIGZvciBzb21lIG9mIHRoZSBmcmFnbWVudHMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVhc21GYWlscyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c1JlYXNtRmFpbHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c1JlYXNtRmFpbHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzUmVhc21GYWlsc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzUmVhc21GYWlsc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzUmVhc21GYWlsc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWFzbUZhaWxzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuUmVhc21GYWlsczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzUmVhc21GYWlsc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5EaXNjYXJkcworICogaXBJZlN0YXRzSW5EaXNjYXJkcyBpcyBzdWJpZCAxNyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xNworICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyBmb3Igd2hpY2ggbm8gcHJvYmxlbXMgd2VyZQorICAgICAgICAgICAgZW5jb3VudGVyZWQgdG8gcHJldmVudCB0aGVpciBjb250aW51ZWQgcHJvY2Vzc2luZywgYnV0CisgICAgICAgICAgICB3ZXJlIGRpc2NhcmRlZCAoZS5nLiwgZm9yIGxhY2sgb2YgYnVmZmVyIHNwYWNlKS4gIE5vdGUgdGhhdAorICAgICAgICAgICAgdGhpcyBjb3VudGVyIGRvZXMgbm90IGluY2x1ZGUgYW55IGRhdGFncmFtcyBkaXNjYXJkZWQgd2hpbGUKKyAgICAgICAgICAgIGF3YWl0aW5nIHJlLWFzc2VtYmx5LgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luRGlzY2FyZHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbkRpc2NhcmRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbkRpc2NhcmRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luRGlzY2FyZHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luRGlzY2FyZHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luRGlzY2FyZHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5EaXNjYXJkcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5EaXNjYXJkc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5EaXNjYXJkc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluRGlzY2FyZHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luRGlzY2FyZHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luRGVsaXZlcnMKKyAqIGlwSWZTdGF0c0luRGVsaXZlcnMgaXMgc3ViaWQgMTggb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTgKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBkYXRhZ3JhbXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZCB0byBJUAorICAgICAgICAgICAgdXNlci1wcm90b2NvbHMgKGluY2x1ZGluZyBJQ01QKS4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlc2UgZGF0YWdyYW1zIHdlcmUgYWRkcmVzc2VkIGlzCisgICAgICAgICAgICBpbmNyZW1lbnRlZC4gIFRoaXMgaW50ZXJmYWNlIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKKworCisKKyAgICAgICAgICAgIGlucHV0IGludGVyZmFjZSBmb3Igc29tZSBvZiB0aGUgZGF0YWdyYW1zLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luRGVsaXZlcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbkRlbGl2ZXJzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbkRlbGl2ZXJzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luRGVsaXZlcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luRGVsaXZlcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luRGVsaXZlcnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5EZWxpdmVycyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5EZWxpdmVyc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbkRlbGl2ZXJzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5EZWxpdmVyc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENJbkRlbGl2ZXJzCisgKiBpcElmU3RhdHNIQ0luRGVsaXZlcnMgaXMgc3ViaWQgMTkgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTkKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBkYXRhZ3JhbXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZCB0byBJUAorICAgICAgICAgICAgdXNlci1wcm90b2NvbHMgKGluY2x1ZGluZyBJQ01QKS4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUKKyAgICAgICAgICAgIHNhbWUgcGFja2V0cyBhcyBpcElmU3RhdHNJbkRlbGl2ZXJzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIKKyAgICAgICAgICAgIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luRGVsaXZlcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luRGVsaXZlcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDSW5EZWxpdmVyc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luRGVsaXZlcnMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luRGVsaXZlcnMubG93OworICAgICgqaXBJZlN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENJbkRlbGl2ZXJzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRSZXF1ZXN0cworICogaXBJZlN0YXRzT3V0UmVxdWVzdHMgaXMgc3ViaWQgMjAgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjAKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCBsb2NhbCBJUCB1c2VyLQorICAgICAgICAgICAgcHJvdG9jb2xzIChpbmNsdWRpbmcgSUNNUCkgc3VwcGxpZWQgdG8gSVAgaW4gcmVxdWVzdHMgZm9yCisgICAgICAgICAgICB0cmFuc21pc3Npb24uICBOb3RlIHRoYXQgdGhpcyBjb3VudGVyIGRvZXMgbm90IGluY2x1ZGUgYW55CisgICAgICAgICAgICBkYXRhZ3JhbXMgY291bnRlZCBpbiBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dFJlcXVlc3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dFJlcXVlc3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRSZXF1ZXN0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dFJlcXVlc3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dFJlcXVlc3RzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRSZXF1ZXN0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFJlcXVlc3RzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0UmVxdWVzdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDT3V0UmVxdWVzdHMKKyAqIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHMgaXMgc3ViaWQgMjEgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCBsb2NhbCBJUCB1c2VyLQorICAgICAgICAgICAgcHJvdG9jb2xzIChpbmNsdWRpbmcgSUNNUCkgc3VwcGxpZWQgdG8gSVAgaW4gcmVxdWVzdHMgZm9yCisgICAgICAgICAgICB0cmFuc21pc3Npb24uICBUaGlzIG9iamVjdCBjb3VudHMgdGhlIHNhbWUgcGFja2V0cyBhcworCisKKworICAgICAgICAgICAgaXBJZlN0YXRzT3V0UmVxdWVzdHMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENPdXRSZXF1ZXN0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDT3V0UmVxdWVzdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENPdXRSZXF1ZXN0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFJlcXVlc3RzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENPdXRSZXF1ZXN0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtcworICogaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtcyBpcyBzdWJpZCAyMyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4yMworICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGRhdGFncmFtcyBmb3Igd2hpY2ggdGhpcyBlbnRpdHkgd2FzIG5vdCB0aGVpcgorICAgICAgICAgICAgZmluYWwgSVAgZGVzdGluYXRpb24gYW5kIGZvciB3aGljaCBpdCB3YXMgc3VjY2Vzc2Z1bCBpbgorICAgICAgICAgICAgZmluZGluZyBhIHBhdGggdG8gdGhlaXIgZmluYWwgZGVzdGluYXRpb24uICBJbiBlbnRpdGllcworICAgICAgICAgICAgdGhhdCBkbyBub3QgYWN0IGFzIElQIHJvdXRlcnMsIHRoaXMgY291bnRlciB3aWxsIGluY2x1ZGUKKyAgICAgICAgICAgIG9ubHkgdGhvc2UgZGF0YWdyYW1zIHRoYXQgd2VyZSBTb3VyY2UtUm91dGVkIHZpYSB0aGlzCisgICAgICAgICAgICBlbnRpdHksIGFuZCB0aGUgU291cmNlLVJvdXRlIHByb2Nlc3Npbmcgd2FzIHN1Y2Nlc3NmdWwuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgb3V0Z29pbmcgaW50ZXJmYWNlIGlzIGluY3JlbWVudGVkIGZvciBhIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgZm9yd2FyZGVkIGRhdGFncmFtLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zCisgKiBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXMgaXMgc3ViaWQgMjQgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjQKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBkYXRhZ3JhbXMgZm9yIHdoaWNoIHRoaXMgZW50aXR5IHdhcyBub3QgdGhlaXIKKyAgICAgICAgICAgIGZpbmFsIElQIGRlc3RpbmF0aW9uIGFuZCBmb3Igd2hpY2ggaXQgd2FzIHN1Y2Nlc3NmdWwgaW4KKyAgICAgICAgICAgIGZpbmRpbmcgYSBwYXRoIHRvIHRoZWlyIGZpbmFsIGRlc3RpbmF0aW9uLiAgVGhpcyBvYmplY3QKKyAgICAgICAgICAgIGNvdW50cyB0aGUgc2FtZSBwYWNrZXRzIGFzIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMsIGJ1dAorICAgICAgICAgICAgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisKKworCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtcyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3c7CisgICAgKCppcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dERpc2NhcmRzCisgKiBpcElmU3RhdHNPdXREaXNjYXJkcyBpcyBzdWJpZCAyNSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4yNQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIG91dHB1dCBJUCBkYXRhZ3JhbXMgZm9yIHdoaWNoIG5vIHByb2JsZW0gd2FzCisgICAgICAgICAgICBlbmNvdW50ZXJlZCB0byBwcmV2ZW50IHRoZWlyIHRyYW5zbWlzc2lvbiB0byB0aGVpcgorICAgICAgICAgICAgZGVzdGluYXRpb24sIGJ1dCB3ZXJlIGRpc2NhcmRlZCAoZS5nLiwgZm9yIGxhY2sgb2YKKyAgICAgICAgICAgIGJ1ZmZlciBzcGFjZSkuICBOb3RlIHRoYXQgdGhpcyBjb3VudGVyIHdvdWxkIGluY2x1ZGUKKyAgICAgICAgICAgIGRhdGFncmFtcyBjb3VudGVkIGluIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMgaWYgYW55IHN1Y2gKKyAgICAgICAgICAgIGRhdGFncmFtcyBtZXQgdGhpcyAoZGlzY3JldGlvbmFyeSkgZGlzY2FyZCBjcml0ZXJpb24uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RGlzY2FyZHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXREaXNjYXJkc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0RGlzY2FyZHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dERpc2NhcmRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXREaXNjYXJkc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RGlzY2FyZHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RGlzY2FyZHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dERpc2NhcmRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXREaXNjYXJkc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXREaXNjYXJkc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0RnJhZ1JlcWRzCisgKiBpcElmU3RhdHNPdXRGcmFnUmVxZHMgaXMgc3ViaWQgMjYgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjYKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCB3b3VsZCByZXF1aXJlIGZyYWdtZW50YXRpb24KKyAgICAgICAgICAgIGluIG9yZGVyIHRvIGJlIHRyYW5zbWl0dGVkLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYSBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ1JlcWRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRGcmFnUmVxZHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRGcmFnUmVxZHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dEZyYWdSZXFkc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RnJhZ1JlcWRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdSZXFkcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdSRVFEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGcmFnUmVxZHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRGcmFnUmVxZHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dEZyYWdPS3MKKyAqIGlwSWZTdGF0c091dEZyYWdPS3MgaXMgc3ViaWQgMjcgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjcKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICBmcmFnbWVudGVkLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKworCisKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYSBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ09LcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dEZyYWdPS3NfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dEZyYWdPS3NfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0RnJhZ09Lc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0RnJhZ09Lc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RnJhZ09Lc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRGcmFnT0tzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRGcmFnT0tzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dEZyYWdPS3NfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdPS3MubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRGcmFnT0tzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRGcmFnRmFpbHMKKyAqIGlwSWZTdGF0c091dEZyYWdGYWlscyBpcyBzdWJpZCAyOCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4yOAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGRhdGFncmFtcyB0aGF0IGhhdmUgYmVlbiBkaXNjYXJkZWQgYmVjYXVzZQorICAgICAgICAgICAgdGhleSBuZWVkZWQgdG8gYmUgZnJhZ21lbnRlZCBidXQgY291bGQgbm90IGJlLiAgVGhpcworICAgICAgICAgICAgaW5jbHVkZXMgSVB2NCBwYWNrZXRzIHRoYXQgaGF2ZSB0aGUgREYgYml0IHNldCBhbmQgSVB2NgorICAgICAgICAgICAgcGFja2V0cyB0aGF0IGFyZSBiZWluZyBmb3J3YXJkZWQgYW5kIGV4Y2VlZCB0aGUgb3V0Z29pbmcKKyAgICAgICAgICAgIGxpbmsgTVRVLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYW4gdW5zdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRGcmFnRmFpbHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRGcmFnRmFpbHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dEZyYWdGYWlsc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdGYWlscyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdGQUlMU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRGcmFnRmFpbHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dEZyYWdDcmVhdGVzCisgKiBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlcyBpcyBzdWJpZCAyOSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4yOQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIG91dHB1dCBkYXRhZ3JhbSBmcmFnbWVudHMgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgICAgIGdlbmVyYXRlZCBhcyBhIHJlc3VsdCBvZiBJUCBmcmFnbWVudGF0aW9uLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYSBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dEZyYWdDcmVhdGVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dEZyYWdDcmVhdGVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0VHJhbnNtaXRzCisgKiBpcElmU3RhdHNPdXRUcmFuc21pdHMgaXMgc3ViaWQgMzAgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzAKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCB0aGlzIGVudGl0eSBzdXBwbGllZAorICAgICAgICAgICAgdG8gdGhlIGxvd2VyIGxheWVycyBmb3IgdHJhbnNtaXNzaW9uLiAgVGhpcyBpbmNsdWRlcworICAgICAgICAgICAgZGF0YWdyYW1zIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCB0aG9zZSBmb3J3YXJkZWQgYnkgdGhpcworICAgICAgICAgICAgZW50aXR5LgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dFRyYW5zbWl0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dFRyYW5zbWl0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0VHJhbnNtaXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0VHJhbnNtaXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRUcmFuc21pdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dFRyYW5zbWl0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRUcmFuc21pdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dFRyYW5zbWl0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dFRyYW5zbWl0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0VHJhbnNtaXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ091dFRyYW5zbWl0cworICogaXBJZlN0YXRzSENPdXRUcmFuc21pdHMgaXMgc3ViaWQgMzEgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCB0aGlzIGVudGl0eSBzdXBwbGllZAorICAgICAgICAgICAgdG8gdGhlIGxvd2VyIGxheWVycyBmb3IgdHJhbnNtaXNzaW9uLiAgVGhpcyBvYmplY3QgY291bnRzCisgICAgICAgICAgICB0aGUgc2FtZSBkYXRhZ3JhbXMgYXMgaXBJZlN0YXRzT3V0VHJhbnNtaXRzLCBidXQgYWxsb3dzIGZvcgorICAgICAgICAgICAgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dFRyYW5zbWl0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dFRyYW5zbWl0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dFRyYW5zbWl0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFRSQU5TTUlUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRUcmFuc21pdHMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRPY3RldHMKKyAqIGlwSWZTdGF0c091dE9jdGV0cyBpcyBzdWJpZCAzMiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4zMgorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyBpbiBJUCBkYXRhZ3JhbXMgZGVsaXZlcmVkIHRvIHRoZQorICAgICAgICAgICAgbG93ZXIgbGF5ZXJzIGZvciB0cmFuc21pc3Npb24uICBPY3RldHMgZnJvbSBkYXRhZ3JhbXMKKyAgICAgICAgICAgIGNvdW50ZWQgaW4gaXBJZlN0YXRzT3V0VHJhbnNtaXRzIE1VU1QgYmUgY291bnRlZCBoZXJlLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dE9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dE9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dE9jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dE9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ091dE9jdGV0cworICogaXBJZlN0YXRzSENPdXRPY3RldHMgaXMgc3ViaWQgMzMgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzMKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgaW4gSVAgZGF0YWdyYW1zIGRlbGl2ZXJlZCB0byB0aGUKKyAgICAgICAgICAgIGxvd2VyIGxheWVycyBmb3IgdHJhbnNtaXNzaW9uLiAgVGhpcyBvYmplY3RzIGNvdW50cyB0aGUgc2FtZQorICAgICAgICAgICAgb2N0ZXRzIGFzIGlwSWZTdGF0c091dE9jdGV0cywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dE9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dE9jdGV0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dE9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRPY3RldHMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbk1jYXN0UGt0cworICogaXBJZlN0YXRzSW5NY2FzdFBrdHMgaXMgc3ViaWQgMzQgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzQKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBtdWx0aWNhc3QgZGF0YWdyYW1zIHJlY2VpdmVkLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luTWNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luTWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbk1jYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luTWNhc3RQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luTWNhc3RQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbk1jYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5NY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5NY2FzdFBrdHMKKyAqIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHMgaXMgc3ViaWQgMzUgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzUKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBtdWx0aWNhc3QgZGF0YWdyYW1zIHJlY2VpdmVkLiAgVGhpcyBvYmplY3QKKyAgICAgICAgICAgIGNvdW50cyB0aGUgc2FtZSBkYXRhZ3JhbXMgYXMgaXBJZlN0YXRzSW5NY2FzdFBrdHMsIGJ1dAorICAgICAgICAgICAgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luTWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDSW5NY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luTWNhc3RPY3RldHMKKyAqIGlwSWZTdGF0c0luTWNhc3RPY3RldHMgaXMgc3ViaWQgMzYgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgaW4gSVAgbXVsdGljYXN0CisKKworCisgICAgICAgICAgICBkYXRhZ3JhbXMuICBPY3RldHMgZnJvbSBkYXRhZ3JhbXMgY291bnRlZCBpbgorICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdFBrdHMgTVVTVCBiZSBjb3VudGVkIGhlcmUuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5NY2FzdE9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luTWNhc3RPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luTWNhc3RPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5NY2FzdE9jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luTWNhc3RPY3RldHNfdmFsX3B0cikgPQorICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luTWNhc3RPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0cworICogaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzIGlzIHN1YmlkIDM3IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjM3CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkIGluIElQIG11bHRpY2FzdAorICAgICAgICAgICAgZGF0YWdyYW1zLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZSBzYW1lIG9jdGV0cyBhcworICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdE9jdGV0cywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMubG93OworICAgICgqaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRNY2FzdFBrdHMKKyAqIGlwSWZTdGF0c091dE1jYXN0UGt0cyBpcyBzdWJpZCAzOCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4zOAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIG11bHRpY2FzdCBkYXRhZ3JhbXMgdHJhbnNtaXR0ZWQuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0TWNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRNY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRNY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dE1jYXN0UGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0TWNhc3RQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dE1jYXN0UGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdFBrdHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRNY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzCisgKiBpcElmU3RhdHNIQ091dE1jYXN0UGt0cyBpcyBzdWJpZCAzOSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4zOQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIG11bHRpY2FzdCBkYXRhZ3JhbXMgdHJhbnNtaXR0ZWQuICBUaGlzCisgICAgICAgICAgICBvYmplY3QgY291bnRzIHRoZSBzYW1lIGRhdGFncmFtcyBhcyBpcElmU3RhdHNPdXRNY2FzdFBrdHMsCisgICAgICAgICAgICBidXQgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisKKworCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKiBpcElmU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzIGRhdGEuCisgICAgICogZ2V0ICgqIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKS5oaWdoID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdFBrdHMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dE1jYXN0T2N0ZXRzCisgKiBpcElmU3RhdHNPdXRNY2FzdE9jdGV0cyBpcyBzdWJpZCA0MCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40MAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyB0cmFuc21pdHRlZCBpbiBJUCBtdWx0aWNhc3QKKyAgICAgICAgICAgIGRhdGFncmFtcy4gIE9jdGV0cyBmcm9tIGRhdGFncmFtcyBjb3VudGVkIGluCisgICAgICAgICAgICBpcElmU3RhdHNPdXRNY2FzdFBrdHMgTVVTVCBiZSBjb3VudGVkIGhlcmUuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0TWNhc3RPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0TWNhc3RPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cworICogaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cyBpcyBzdWJpZCA0MSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40MQorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyB0cmFuc21pdHRlZCBpbiBJUCBtdWx0aWNhc3QKKyAgICAgICAgICAgIGRhdGFncmFtcy4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBvY3RldHMgYXMKKyAgICAgICAgICAgIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luQmNhc3RQa3RzCisgKiBpcElmU3RhdHNJbkJjYXN0UGt0cyBpcyBzdWJpZCA0MiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40MgorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGJyb2FkY2FzdCBkYXRhZ3JhbXMgcmVjZWl2ZWQuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5CY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5CY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luQmNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5CY2FzdFBrdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5CY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luQmNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOQkNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJbkJjYXN0UGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENJbkJjYXN0UGt0cworICogaXBJZlN0YXRzSENJbkJjYXN0UGt0cyBpcyBzdWJpZCA0MyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40MworICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGJyb2FkY2FzdCBkYXRhZ3JhbXMgcmVjZWl2ZWQuICBUaGlzIG9iamVjdAorICAgICAgICAgICAgY291bnRzIHRoZSBzYW1lIGRhdGFncmFtcyBhcyBpcElmU3RhdHNJbkJjYXN0UGt0cywgYnV0CisgICAgICAgICAgICBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENJbkJjYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDSW5CY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENJbkJjYXN0UGt0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luQmNhc3RQa3RzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5CY2FzdFBrdHMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENJbkJjYXN0UGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0QmNhc3RQa3RzCisgKiBpcElmU3RhdHNPdXRCY2FzdFBrdHMgaXMgc3ViaWQgNDQgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDQKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBicm9hZGNhc3QgZGF0YWdyYW1zIHRyYW5zbWl0dGVkLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEJjYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dEJjYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0QmNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0QmNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRCY2FzdFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dEJjYXN0UGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRCY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dEJjYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dEJjYXN0UGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0QmNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ091dEJjYXN0UGt0cworICogaXBJZlN0YXRzSENPdXRCY2FzdFBrdHMgaXMgc3ViaWQgNDUgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDUKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBicm9hZGNhc3QgZGF0YWdyYW1zIHRyYW5zbWl0dGVkLiAgVGhpcworICAgICAgICAgICAgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBkYXRhZ3JhbXMgYXMgaXBJZlN0YXRzT3V0QmNhc3RQa3RzLAorICAgICAgICAgICAgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dEJjYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dEJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dEJjYXN0UGt0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRCY2FzdFBrdHMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNEaXNjb250aW51aXR5VGltZQorICogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUgaXMgc3ViaWQgNDYgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHZhbHVlIG9mIHN5c1VwVGltZSBvbiB0aGUgbW9zdCByZWNlbnQgb2NjYXNpb24gYXQgd2hpY2gKKworCisKKyAgICAgICAgICAgIGFueSBvbmUgb3IgbW9yZSBvZiB0aGlzIGVudHJ5J3MgY291bnRlcnMgc3VmZmVyZWQgYQorICAgICAgICAgICAgZGlzY29udGludWl0eS4KKworICAgICAgICAgICAgSWYgbm8gc3VjaCBkaXNjb250aW51aXRpZXMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB0aGUgbGFzdCByZS0KKyAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRoZSBsb2NhbCBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdGhlbiB0aGlzCisgICAgICAgICAgICBvYmplY3QgY29udGFpbnMgYSB6ZXJvIHZhbHVlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgVGltZVN0YW1wIChiYXNlZCBvbiBwZXJsdHlwZSBUSUNLUykKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9USU1FVElDS1MuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV9nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNEaXNjb250aW51aXR5VGltZV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZSBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0RJU0NPTlRJTlVJVFlUSU1FXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNEaXNjb250aW51aXR5VGltZV92YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzUmVmcmVzaFJhdGUKKyAqIGlwSWZTdGF0c1JlZnJlc2hSYXRlIGlzIHN1YmlkIDQ3IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjQ3CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBtaW5pbXVtIHJlYXNvbmFibGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgdGhpcyBlbnRyeS4KKyAgICAgICAgICAgIFRoaXMgb2JqZWN0IHByb3ZpZGVzIGFuIGluZGljYXRpb24gb2YgdGhlIG1pbmltdW0gYW1vdW50IG9mCisgICAgICAgICAgICB0aW1lIHJlcXVpcmVkIHRvIHVwZGF0ZSB0aGUgY291bnRlcnMgaW4gdGhpcyBlbnRyeS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIFVOU0lHTkVEMzIgKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWZyZXNoUmF0ZSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c1JlZnJlc2hSYXRlX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzUmVmcmVzaFJhdGVfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c1JlZnJlc2hSYXRlX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWZyZXNoUmF0ZSBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzUmVmcmVzaFJhdGVfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFRlJFU0hSQVRFXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmlwSWZTdGF0c1JlZnJlc2hSYXRlOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQgKi8KKworCisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M3ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDg4ICQgb2YgJAorICoKKyAqICRJZDokCisgKgorICogQGZpbGUgaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaAorICoKKyAqIEBhZGR0b2dyb3VwIGdldAorICoKKyAqIFByb3RvdHlwZXMgZm9yIGdldCBmdW5jdGlvbnMKKyAqCisgKiBAeworICovCisjaWZuZGVmIElQSUZTVEFUU1RBQkxFX0RBVEFfR0VUX0gKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfREFUQV9HRVRfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBHRVQgZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBHRVQgVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLCBsZW5ndGg6IDkKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGluZGV4ZXMKKyAgICAgKi8KKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJblJlY2VpdmVzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5SZWNlaXZlc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENJblJlY2VpdmVzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbk9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luT2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ0luT2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJbk9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5IZHJFcnJvcnNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJbkhkckVycm9yc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5Ob1JvdXRlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luTm9Sb3V0ZXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luQWRkckVycm9yc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luQWRkckVycm9yc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzUmVhc21SZXFkc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1JlYXNtUmVxZHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1JlYXNtT0tzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzUmVhc21PS3NfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1JlYXNtRmFpbHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbkRpc2NhcmRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5EaXNjYXJkc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5EZWxpdmVyc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luRGVsaXZlcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5EZWxpdmVyc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0UmVxdWVzdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRSZXF1ZXN0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRSZXF1ZXN0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dERpc2NhcmRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0RGlzY2FyZHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdSZXFkc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdSZXFkc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0RnJhZ09Lc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdPS3NfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdGYWlsc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdGYWlsc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0VHJhbnNtaXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0VHJhbnNtaXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ091dFRyYW5zbWl0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXRPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luTWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXRNY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRNY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbkJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luQmNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ0luQmNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0QmNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0QmNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ091dEJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV9nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1JlZnJlc2hSYXRlX3ZhbF9wdHIpOworCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwSWZTdGF0c0lQVmVyc2lvbl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcElmU3RhdHNJZkluZGV4X3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSVBWZXJzaW9uX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcElmU3RhdHNJZkluZGV4X3ZhbCk7CisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQSUZTVEFUU1RBQkxFX0RBVEFfR0VUX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzY1N2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLWVudW1zLm0yYyAxMjUyNiAyMDA1LTA3LTE1IDIyOjQxOjE2WiByc3RvcnkgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgSVBJRlNUQVRTVEFCTEVfRU5VTVNfSAorI2RlZmluZSBJUElGU1RBVFNUQUJMRV9FTlVNU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICogTk9URVMgb24gZW51bXMKKyAgICAgKiA9PT09PT09PT09PT09PQorICAgICAqCisgICAgICogVmFsdWUgTWFwcGluZworICAgICAqIC0tLS0tLS0tLS0tLS0KKyAgICAgKiBJZiB0aGUgdmFsdWVzIGZvciB5b3VyIGRhdGEgdHlwZSBkb24ndCBleGFjdGx5IG1hdGNoIHRoZQorICAgICAqIHBvc3NpYmxlIHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBtaWIsIHlvdSBzaG91bGQgbWFwIHRoZW0KKyAgICAgKiBiZWxvdy4gRm9yIGV4YW1wbGUsIGEgYm9vbGVhbiBmbGFnICgxLzApIGlzIHVzdWFsbHkgcmVwcmVzZW50ZWQKKyAgICAgKiBhcyBhIFRydXRoVmFsdWUgaW4gYSBNSUIsIHdoaWNoIG1hcHMgdG8gdGhlIHZhbHVlcyAoMS8yKS4KKyAgICAgKgorICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZW51bSBkZWZpbml0aW9ucyBmb3IgdGFibGUgaXBJZlN0YXRzVGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGlwSWZTdGF0c0lQVmVyc2lvbiAoSW5ldFZlcnNpb24gLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIElORVRWRVJTSU9OX0VOVU1TCisjZGVmaW5lIElORVRWRVJTSU9OX0VOVU1TCisKKyNkZWZpbmUgSU5FVFZFUlNJT05fVU5LTk9XTiAgMAorI2RlZmluZSBJTkVUVkVSU0lPTl9JUFY0ICAxCisjZGVmaW5lIElORVRWRVJTSU9OX0lQVjYgIDIKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTkVUVkVSU0lPTl9FTlVNUyAqLworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUElGU1RBVFNUQUJMRV9FTlVNU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5ZDFjMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMCwwICsxLDE0MjAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGUuaCIKKworCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwSWZTdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplLCBpcElmU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgaXBJZlN0YXRzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIGlwSWZTdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZ2V0LCBpcElmU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcElmU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMywgbGVuZ3RoOiA5CisgKi8KK3R5cGVkZWYgc3RydWN0IGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKworICAgIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqdXNlcl9jdHg7CisKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIHRibF9pbmZvOworCisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzIGFjY2Vzc19tdWx0aXBsZXhlcjsKKworICAgIHVfbG9uZyBsYXN0X2NoYW5nZWQ7CisKK30gaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eDsKKworc3RhdGljIGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggaXBJZlN0YXRzVGFibGVfaWZfY3R4OworCitzdGF0aWMgdm9pZCAgICAgX2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZl9jdHgpOworc3RhdGljIHZvaWQgICAgCitfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpOworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfQ09OVEFJTkVSX0dFVAorbmV0c25tcF9jb250YWluZXIgKgoraXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQoreworICAgIHJldHVybiBpcElmU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfQ09OVEFJTkVSX0dFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAoraXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKK2lwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gaXBJZlN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4OworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAoraXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKK2lwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQoreworICAgIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqb2xkID0gaXBJZlN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4OworICAgIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKKyAgICByZXR1cm4gb2xkOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfQ09OVEFJTkVSX1NJWkUKK2ludAoraXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKK3sKKyAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBJZlN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUElGU1RBVFNUQUJMRV9DT05UQUlORVJfU0laRSAqLworCisvKgorICogaXBJZlN0YXRzVGFibGVMYXN0Q2hhbmdlZCwgd2hpY2ggaXMgdGhlIGxhc3QgdGltZSB0aGF0IGEgcm93IGluCisgKiB0aGUgdGFibGUgd2FzIGNoYW5nZWQgb3IgdGhlIGxhc3QgdGltZSBhIHJvdyB3YXMgYWRkZWQvZGVsZXRlZCBmcm9tIHRoZQorICogdGFibGUuCisgKi8KK3ZvaWQKK2lwSWZTdGF0c1RhYmxlX2xhc3RDaGFuZ2Vfc2V0KHVfbG9uZyB0YWJsZV9jaGFuZ2VkKQoreworICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTpsYXN0Q2hhbmdlZF9zZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWQuIHdhcyAlbGQsIG5vdyAlbGRcbiIsCisgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfaWZfY3R4Lmxhc3RfY2hhbmdlZCwgdGFibGVfY2hhbmdlZCkpOworICAgIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5sYXN0X2NoYW5nZWQgPSB0YWJsZV9jaGFuZ2VkOworfQorCisvKgorICogbWZkIG11bHRpcGxleGVyIG1vZGVzCisgKi8KK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0Oworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0Oworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBJZlN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF92YWx1ZXM7CisvKioKKyAqIEBpbnRlcm5hbAorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgaXBJZlN0YXRzVGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAorX2lwSWZTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHJlZ19wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGZsYWdzKQoreworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyAqYWNjZXNzX211bHRpcGxleGVyID0KKyAgICAgICAgJmlwSWZTdGF0c1RhYmxlX2lmX2N0eC5hY2Nlc3NfbXVsdGlwbGV4ZXI7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGJsX2luZm8gPQorICAgICAgICAmaXBJZlN0YXRzVGFibGVfaWZfY3R4LnRibF9pbmZvOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcjsKKyAgICBpbnQgICAgICAgICAgICAgbWZkX21vZGVzID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfaXBJZlN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UiLCAiY2FsbGVkXG4iKSk7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzYXZlIGludGVyZmFjZSBjb250ZXh0IGZvciBpcElmU3RhdHNUYWJsZQorICAgICAqLworICAgIC8qCisgICAgICogU2V0dGluZyB1cCB0aGUgdGFibGUncyBkZWZpbml0aW9uCisgICAgICovCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGJsX2luZm8sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwSWZTdGF0c0lQVmVyc2lvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwSWZTdGF0c0lmSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKKyAgICAgKi8KKyAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQSUZTVEFUU1RBQkxFX01JTl9DT0w7CisgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUElGU1RBVFNUQUJMRV9NQVhfQ09MOworCisgICAgLyoKKyAgICAgKiBzYXZlIHVzZXJzIGNvbnRleHQKKyAgICAgKi8KKyAgICBpcElmU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSByZWdfcHRyOworCisgICAgLyoKKyAgICAgKiBjYWxsIGRhdGEgYWNjZXNzIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBpcElmU3RhdHNUYWJsZV9pbml0X2RhdGEocmVnX3B0cik7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KCZpcElmU3RhdHNUYWJsZV9pZl9jdHgpOworICAgIGlmIChOVUxMID09IGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbnRhaW5lciBmb3IgaXBJZlN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhY2Nlc3NfbXVsdGlwbGV4ZXI6IFJFUVVJUkVEIHdyYXBwZXIgZm9yIGdldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwID0gX21mZF9pcElmU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Z2V0X3ZhbHVlcyA9IF9tZmRfaXBJZlN0YXRzVGFibGVfZ2V0X3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCA9IF9tZmRfaXBJZlN0YXRzVGFibGVfcHJlX3JlcXVlc3Q7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPSBfbWZkX2lwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdDsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIENyZWF0ZSBhIHJlZ2lzdHJhdGlvbiwgc2F2ZSBvdXIgcmVnIGRhdGEsIHJlZ2lzdGVyIHRhYmxlLgorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTppbml0X2lwSWZTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgaXBJZlN0YXRzVGFibGUgYXMgYSBtaWJzLWZvci1kdW1taWVzIHRhYmxlLlxuIikpOworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyX2dldChhY2Nlc3NfbXVsdGlwbGV4ZXIpOworICAgIHJlZ2luZm8gPQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiaXBJZlN0YXRzVGFibGUiLCBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX29pZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaXBJZlN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlZ2luZm8tPm15X3JlZ192b2lkID0gJmlwSWZTdGF0c1RhYmxlX2lmX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzZXQgdXAgYmFieSBzdGVwcyBoYW5kbGVyLCBjcmVhdGUgaXQgYW5kIGluamVjdCBpdAorICAgICAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BSRV9SRVFVRVNUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3Rfc3ludGF4X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19PQkpFQ1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ0xFQU5VUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRTOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cm93X2NyZWF0aW9uKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1JPV19DUkVBVEU7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX0NPTlNJU1RFTkNZOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IHJvd19tZXJnZSBoZWxwZXIgd2l0aCBwcmVmaXggcm9vdG9pZF9sZW4gKyAyIChlbnRyeS5jb2wpCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YmxfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gaXBJZlN0YXRzVGFibGVfaWZfY3R4LmNhY2hlKSB7CisgICAgICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5jYWNoZSk7CisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiByZWdpc3RlciB0YWJsZQorICAgICAqLworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnaW5mbywgdGJsX2luZm8pOworICAgIAorICAgIC8qCisgICAgICogcmVnaXN0ZXIgTGFzdENoYW5nZWQKKyAgICAgKi8KKyAgICB7CisgICAgICAgIG9pZCAgICAgbGNfb2lkW10gPSB7IElQSUZTVEFUU1RBQkxFTEFTVENIQU5HRV9PSUQgfTsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAoImlwSWZTdGF0c1RhYmxlTGFzdENoYW5nZWQiLCBOVUxMLAorICAgICAgICAgICAgICAgICBsY19vaWQsIE9JRF9MRU5HVEgobGNfb2lkKSwKKyAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAorICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygodm9pZAorICAgICAgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgJmlwSWZTdGF0c1RhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgbGFzdF9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YKKyAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyksCisgICAgICAgICAgICAgICAgICAgIEFTTl9USU1FVElDS1MsCisgICAgICAgICAgICAgICAgICAgIFdBVENIRVJfRklYRURfU0laRSkpOworICAgIH0KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwSWZTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBTaHV0ZG93biB0aGUgdGFibGUgaXBJZlN0YXRzVGFibGUKKyAqLwordm9pZAorX2lwSWZTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyKQoreworICAgIC8qCisgICAgICogc2h1dGRvd24gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9pcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oJmlwSWZTdGF0c1RhYmxlX2lmX2N0eCk7Cit9CisKK3ZvaWQKK2lwSWZTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8gKnZjKQoreworICAgIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC50YmxfaW5mby52YWxpZF9jb2x1bW5zID0gdmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBjb252ZXJ0IHRoZSBpbmRleCBjb21wb25lbnQgc3RvcmVkIGluIHRoZSBjb250ZXh0IHRvIGFuIG9pZAorICovCitpbnQKK2lwSWZTdGF0c1RhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogaXBJZlN0YXRzSVBWZXJzaW9uKDEpL0luZXRWZXJzaW9uL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBJZlN0YXRzSVBWZXJzaW9uOworICAgIC8qCisgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcElmU3RhdHNJZkluZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9pcElmU3RhdHNJUFZlcnNpb24sIDB4MDAsIHNpemVvZih2YXJfaXBJZlN0YXRzSVBWZXJzaW9uKSk7CisgICAgdmFyX2lwSWZTdGF0c0lQVmVyc2lvbi50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgbWVtc2V0KCZ2YXJfaXBJZlN0YXRzSWZJbmRleCwgMHgwMCwgc2l6ZW9mKHZhcl9pcElmU3RhdHNJZkluZGV4KSk7CisgICAgdmFyX2lwSWZTdGF0c0lmSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2lwSWZTdGF0c0lQVmVyc2lvbi5uZXh0X3ZhcmlhYmxlID0gJnZhcl9pcElmU3RhdHNJZkluZGV4OworICAgIHZhcl9pcElmU3RhdHNJZkluZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9pbmRleF90b19vaWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogaXBJZlN0YXRzSVBWZXJzaW9uKDEpL0luZXRWZXJzaW9uL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9pcElmU3RhdHNJUFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBtaWJfaWR4LT5pcElmU3RhdHNJUFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcElmU3RhdHNJUFZlcnNpb24pKTsKKworICAgIC8qCisgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9IIAorICAgICAqLworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyX2lwSWZTdGF0c0lmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBtaWJfaWR4LT5pcElmU3RhdHNJZkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBJZlN0YXRzSWZJbmRleCkpOworCisKKyAgICBlcnIgPSBidWlsZF9vaWRfbm9hbGxvYyhvaWRfaWR4LT5vaWRzLCBvaWRfaWR4LT5sZW4sICZvaWRfaWR4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgJnZhcl9pcElmU3RhdHNJUFZlcnNpb24pOworICAgIGlmIChlcnIpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciAlZCBjb252ZXJ0aW5nIGluZGV4IHRvIG9pZFxuIiwgZXJyKTsKKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9pcElmU3RhdHNJUFZlcnNpb24pOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfaW5kZXhfdG9fb2lkICovCisKKy8qKgorICogZXh0cmFjdCBpcElmU3RhdHNUYWJsZSBpbmRleGVzIGZyb20gYSBuZXRzbm1wX2luZGV4CisgKgorICogQHJldHZhbCBTTk1QX0VSUl9OT0VSUk9SICA6IG5vIGVycm9yCisgKiBAcmV0dmFsIFNOTVBfRVJSX0dFTkVSUiAgIDogZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBpcElmU3RhdHNJUFZlcnNpb24oMSkvSW5ldFZlcnNpb24vQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcElmU3RhdHNJUFZlcnNpb247CisgICAgLyoKKyAgICAgKiBpcElmU3RhdHNJZkluZGV4KDIpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2lwSWZTdGF0c0lmSW5kZXg7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB2YXJiaW5kcworICAgICAqLworICAgIG1lbXNldCgmdmFyX2lwSWZTdGF0c0lQVmVyc2lvbiwgMHgwMCwgc2l6ZW9mKHZhcl9pcElmU3RhdHNJUFZlcnNpb24pKTsKKyAgICB2YXJfaXBJZlN0YXRzSVBWZXJzaW9uLnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICBtZW1zZXQoJnZhcl9pcElmU3RhdHNJZkluZGV4LCAweDAwLCBzaXplb2YodmFyX2lwSWZTdGF0c0lmSW5kZXgpKTsKKyAgICB2YXJfaXBJZlN0YXRzSWZJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfaXBJZlN0YXRzSVBWZXJzaW9uLm5leHRfdmFyaWFibGUgPSAmdmFyX2lwSWZTdGF0c0lmSW5kZXg7CisgICAgdmFyX2lwSWZTdGF0c0lmSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHBhcnNlIHRoZSBvaWQgaW50byB0aGUgaW5kaXZpZHVhbCBpbmRleCBjb21wb25lbnRzCisgICAgICovCisgICAgZXJyID0gcGFyc2Vfb2lkX2luZGV4ZXMob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXJfaXBJZlN0YXRzSVBWZXJzaW9uKTsKKyAgICBpZiAoZXJyID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBvdXQgdmFsdWVzCisgICAgICAgICAqLworICAgICAgICBtaWJfaWR4LT5pcElmU3RhdHNJUFZlcnNpb24gPQorICAgICAgICAgICAgKigodV9sb25nICopIHZhcl9pcElmU3RhdHNJUFZlcnNpb24udmFsLnN0cmluZyk7CisgICAgICAgIG1pYl9pZHgtPmlwSWZTdGF0c0lmSW5kZXggPQorICAgICAgICAgICAgKigobG9uZyAqKSB2YXJfaXBJZlN0YXRzSWZJbmRleC52YWwuc3RyaW5nKTsKKworCisgICAgfQorCisgICAgLyoKKyAgICAgKiBwYXJzaW5nIG1heSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkuIGZyZWUgaXQuCisgICAgICovCisgICAgc25tcF9yZXNldF92YXJfYnVmZmVycygmdmFyX2lwSWZTdGF0c0lQVmVyc2lvbik7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZCAqLworCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAaW50ZXJuYWwKKyAqIGFsbG9jYXRlIHJlc291cmNlcyBmb3IgYSBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKi8KK2lwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgoraXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcElmU3RhdHNUYWJsZV9kYXRhICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhICIKKyAgICAgICAgICAgICAgICAgImlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHguXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gZGF0YSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHRyYWNrIGlmIHdlIGdvdCBkYXRhIGZyb20gdXNlcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgfD0gTUZEX1JPV19EQVRBX0ZST01fVVNFUjsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEgPSBkYXRhOworICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0KKyAgICAgICAgICAgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YSA9IGlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEoKSkpIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1bmRvIGNvbnRleHQgd2lsbCBiZSBhbGxvY2F0ZWQgd2hlbiBuZWVkZWQgKGluICpfdW5kb19zZXR1cCkKKyAgICAgKi8KKworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyA9IHJvd3JlcV9jdHgtPm9pZF90bXA7CisKKyAgICByb3dyZXFfY3R4LT5pcElmU3RhdHNUYWJsZV9kYXRhX2xpc3QgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhbGxvY2F0ZWQgZGF0YSwgY2FsbCBpbml0IHJvdXRpbmUKKyAgICAgKi8KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQocm93cmVxX2N0eCwgdXNlcl9pbml0X2N0eCkpIHsKKyAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHggPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHggKi8KKworLyoKKyAqIEBpbnRlcm5hbAorICogcmVsZWFzZSByZXNvdXJjZXMgZm9yIGEgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAocm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIGZvciBub24tdHJhbnNpZW50IGRhdGEsIGRvbid0IGZyZWUgZGF0YSB3ZSBnb3QgZnJvbSB0aGUgdXNlcgorICAgICAqLworICAgIGlmICgocm93cmVxX2N0eC0+ZGF0YSkgJiYKKyAgICAgICAgIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhKHJvd3JlcV9jdHgtPmRhdGEpOworCisgICAgLyoKKyAgICAgKiBmcmVlIGluZGV4IG9pZCBwb2ludGVyCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyAhPSByb3dyZXFfY3R4LT5vaWRfdG1wKQorICAgICAgICBmcmVlKHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyk7CisKKyAgICBTTk1QX0ZSRUUocm93cmVxX2N0eCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZmlyc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJza2lwcGluZyBhZGRpdGlvbmFsIHByZV9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHJjID0gaXBJZlN0YXRzVGFibGVfcHJlX3JlcXVlc3QoaXBJZlN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImlwSWZTdGF0c1RhYmxlIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGVfcHJlX3JlcXVlc3RcbiIsIHJjKSk7CisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiByZWxlYXNlIHJvdyBjb250ZXh0LCBpZiBkZWxldGVkCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHggJiYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREVMRVRFRCkpCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogd2FpdCBmb3IgbGFzdCBjYWxsIGJlZm9yZSBjYWxsaW5nIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfbGFzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwSWZTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgIndhaXRpbmcgZm9yIGxhc3QgcG9zdF9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHBhY2tldF9yYyA9IG5ldHNubXBfY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKGFndHJlcV9pbmZvLT5hc3AsIDApOworICAgIHJjID0gaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGlwSWZTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfcmMpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiaXBJZlN0YXRzVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3RcbiIsIHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXBJZlN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBvdXIgY29udGV4dCBmcm9tIG1mZAorICAgICAqIGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKmlmX2N0eCA9CisgICAgICogICAgICAgICAgICAgKGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKilyZWdpbmZvLT5teV9yZWdfdm9pZDsKKyAgICAgKi8KKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0NSRUFUSU9OOworICAgIH0KKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIHJjKTsKKyAgICBlbHNlCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3Jvd19wcmVwKHJvd3JlcV9jdHgpOworCisgICAgcmV0dXJuIFNOTVBfVkFMSURBVEVfRVJSKHJjKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcElmU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEBpbnRlcm5hbAorICogUmV0cmlldmUgdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19pcElmU3RhdHNUYWJsZV9nZXRfY29sdW1uKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF9jb2x1bW4iLAorICAgICAgICAgICAgICAgICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5SZWNlaXZlcygzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTlJFQ0VJVkVTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5SZWNlaXZlc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDSW5SZWNlaXZlcyg0KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENJTlJFQ0VJVkVTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luT2N0ZXRzKDUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOT0NURVRTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5PY3RldHNfZ2V0KHJvd3JlcV9jdHgsICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENJbk9jdGV0cyg2KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENJTk9DVEVUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENJbk9jdGV0c19nZXQocm93cmVxX2N0eCwgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbkhkckVycm9ycyg3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTkhEUkVSUk9SUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luSGRyRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luTm9Sb3V0ZXMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5OT1JPVVRFUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luTm9Sb3V0ZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbkFkZHJFcnJvcnMoOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5BRERSRVJST1JTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5BZGRyRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJblVua25vd25Qcm90b3MoMTApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOVU5LTk9XTlBST1RPUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luVW5rbm93blByb3Rvc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzKDExKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTlRSVU5DQVRFRFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcygxMikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5GT1JXREFUQUdSQU1TOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcygxMykvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDSU5GT1JXREFUQUdSQU1TOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNSZWFzbVJlcWRzKDE0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNSRUFTTVJFUURTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzUmVhc21SZXFkc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c1JlYXNtT0tzKDE1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNSRUFTTU9LUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c1JlYXNtT0tzX2dldChyb3dyZXFfY3R4LCAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c1JlYXNtRmFpbHMoMTYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU1JFQVNNRkFJTFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNSZWFzbUZhaWxzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5EaXNjYXJkcygxNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5ESVNDQVJEUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luRGlzY2FyZHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbkRlbGl2ZXJzKDE4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTkRFTElWRVJTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5EZWxpdmVyc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDSW5EZWxpdmVycygxOSkvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDSU5ERUxJVkVSUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENJbkRlbGl2ZXJzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRSZXF1ZXN0cygyMCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VUUkVRVUVTVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRSZXF1ZXN0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ091dFJlcXVlc3RzKDIxKS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRSRVFVRVNUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENPdXRSZXF1ZXN0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMoMjMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVEZPUldEQVRBR1JBTVM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zKDI0KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRGT1JXREFUQUdSQU1TOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dERpc2NhcmRzKDI1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRESVNDQVJEUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dERpc2NhcmRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dEZyYWdSZXFkcygyNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR1JFUURTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRGcmFnT0tzKDI3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRGUkFHT0tTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0RnJhZ09Lc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dEZyYWdGYWlscygyOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR0ZBSUxTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlcygyOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR0NSRUFURVM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRUcmFuc21pdHMoMzApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVFRSQU5TTUlUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dFRyYW5zbWl0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENPdXRUcmFuc21pdHMoMzEpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ09VVFRSQU5TTUlUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0T2N0ZXRzKDMyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRPQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0T2N0ZXRzKDMzKS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRPQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDT3V0T2N0ZXRzX2dldChyb3dyZXFfY3R4LCAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luTWNhc3RQa3RzKDM0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTk1DQVNUUEtUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luTWNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHMoMzUpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ0lOTUNBU1RQS1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5NY2FzdE9jdGV0cygzNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5NQ0FTVE9DVEVUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luTWNhc3RPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHMoMzcpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ0lOTUNBU1RPQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0TWNhc3RQa3RzKDM4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRNQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRNY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzKDM5KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRNQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzKDQwKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRNQ0FTVE9DVEVUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMoNDEpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ09VVE1DQVNUT0NURVRTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5CY2FzdFBrdHMoNDIpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOQkNBU1RQS1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5CY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENJbkJjYXN0UGt0cyg0MykvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDSU5CQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRCY2FzdFBrdHMoNDQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVEJDQVNUUEtUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dEJjYXN0UGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENPdXRCY2FzdFBrdHMoNDUpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ09VVEJDQVNUUEtUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUoNDYpL1RpbWVTdGFtcC9BU05fVElNRVRJQ0tTL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNESVNDT05USU5VSVRZVElNRToKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9USU1FVElDS1M7CisgICAgICAgIHJjID0gaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzUmVmcmVzaFJhdGUoNDcpL1VOU0lHTkVEMzIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNSRUZSRVNIUkFURToKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChJUElGU1RBVFNUQUJMRV9NSU5fQ09MIDw9IGNvbHVtbgorICAgICAgICAgICAgJiYgY29sdW1uIDw9IElQSUZTVEFUU1RBQkxFX01BWF9DT0wpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiYXNzdW1lIGNvbHVtbiAlZCBpcyByZXNlcnZlZFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByYyA9IE1GRF9TS0lQOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfaXBJZlN0YXRzVGFibGVfZ2V0X2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBJZlN0YXRzVGFibGVfZ2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfaXBJZlN0YXRzVGFibGVfZ2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgqKQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKKyAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKKyAgICB2b2lkICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spICh2b2lkICopOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF92YWx1ZXMiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9pcElmU3RhdHNUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIGlmIChNRkRfU0tJUCA9PSByYykgeworICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJOVUxMIHZhcmJpbmQgZGF0YSBwb2ludGVyIVxuIik7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSBidWZmZXIgd2Fzbid0IHVzZWQgcHJldmlvdXNseSBmb3IgdGhlIG9sZCBkYXRhIChpLmUuIGl0CisgICAgICAgICAqIHdhcyBhbGxjb2F0ZWQgbWVtb3J5KSAgYW5kIHRoZSBnZXQgcm91dGluZSByZXBsYWNlZCB0aGUgcG9pbnRlciwKKyAgICAgICAgICogd2UgbmVlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG9sZF9zdHJpbmcgJiYgKG9sZF9zdHJpbmcgIT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSAmJgorICAgICAgICAgICAgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgIT0gb2xkX3N0cmluZykpIHsKKyAgICAgICAgICAgIGlmIChkYXRhRnJlZUhvb2spCisgICAgICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spIChvbGRfc3RyaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcmVlKG9sZF9zdHJpbmcpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcElmU3RhdHNUYWJsZV9nZXRfdmFsdWVzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTRVQgUFJPQ0VTU0lORyBOT1QgQVBQTElDQUJMRSAocGVyIE1JQiBvciB1c2VyIHNldHRpbmcpCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERBVEEgQUNDRVNTCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgICAgIF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcik7CisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBmb3IgaXBJZlN0YXRzVGFibGVfY2FjaGVfbG9hZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgcmV0dXJuIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2xvYWQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfY2FjaGVfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBpbiBpcElmU3RhdHNUYWJsZV9jYWNoZV9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWM7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfaXRlbV9mcmVlKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LCB2b2lkICpjb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfY29udGFpbmVyX2l0ZW1fZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2l0ZW1fZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfY29udGFpbmVyX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGluIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBmcmVlIGFsbCBpdGVtcy4gaW5lZmZpY2llbnQsIGJ1dCBlYXN5LgorICAgICAqLworICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfY29udGFpbmVyX2l0ZW1fZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19pcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogY2FjaGUgaW5pdAorICAgICAqLworICAgIGlmX2N0eC0+Y2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgICAgLyogdGltZW91dCBpbiBzZWNvbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCBfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9vaWRfc2l6ZSk7CisKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgaXBJZlN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCgmaWZfY3R4LT5jb250YWluZXIsIGlmX2N0eC0+Y2FjaGUpOworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CisgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpcElmU3RhdHNUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKKyAgICAgICAgICAgICAgICAgImlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChOVUxMICE9IGlmX2N0eC0+Y2FjaGUpCisgICAgICAgIGlmX2N0eC0+Y2FjaGUtPm1hZ2ljID0gKHZvaWQgKikgaWZfY3R4LT5jb250YWluZXI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2h1dGRvd24gdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwSWZTdGF0c1RhYmxlOl9pcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaWZfY3R4LT5jb250YWluZXIpOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGlmX2N0eC0+Y29udGFpbmVyKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUworaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCitpcElmU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaXBJZlN0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9PSURfTEVOXTsKKyAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICAvKgorICAgICAqIHNldCB1cCBzdG9yYWdlIGZvciBPSUQKKyAgICAgKi8KKyAgICBvaWRfaWR4Lm9pZHMgPSBvaWRfdG1wOworICAgIG9pZF9pZHgubGVuID0gc2l6ZW9mKG9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQKKyAgICAgKi8KKyAgICByYyA9IGlwSWZTdGF0c1RhYmxlX2luZGV4X3RvX29pZCgmb2lkX2lkeCwgbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvd3JlcV9jdHggPSAoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJTkQoaXBJZlN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUElGU1RBVFNUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDNkZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKy8qKiBAaW5ncm91cCBpbnRlcmZhY2U6IFJvdXRpbmVzIHRvIGludGVyZmFjZSB0byBOZXQtU05NUAorICoKKyAqIFx3YXJuaW5nIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBjYWxsZWQgZGlyZWN0bHksCisgKiAgICAgICAgICBvciB1c2VkIHRvIGludGVycHJldCBmdW5jdGlvbmFsaXR5LiBJdCBpcyBzdWJqZWN0IHRvCisgKiAgICAgICAgICBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAKKyAqIEB7CisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBJUElGU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorI2RlZmluZSBJUElGU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlLmgiCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqIFBVQkxJQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZSAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwSWZTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgdV9sb25nIGZsYWdzKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwSWZTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4KTsKKworICAgIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKTsKKworICAgIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAqaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldChpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpOworCisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcElmU3RhdHNUYWJsZV9kYXRhICosIHZvaWQgKik7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOworCisgICAgLyoKKyAgICAgKiBhY2Nlc3MgdG8gY2VydGFpbiBpbnRlcm5hbHMuIHVzZSB3aXRoIGNhdXRpb24hCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZjKTsKKworICAgIC8qCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2xhc3RDaGFuZ2Vfc2V0KHVfbG9uZyB1cHRpbWUpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQSUZTVEFUU1RBQkxFX0lOVEVSRkFDRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9vaWRzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfb2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjA3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfb2lkcy5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtb2lkcy5tMmMgMTI4NTUgMjAwNS0wOS0yNyAxNTo1NjowOFogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIElQSUZTVEFUU1RBQkxFX09JRFNfSAorI2RlZmluZSBJUElGU1RBVFNUQUJMRV9PSURTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGlwSWZTdGF0c1RhYmxlIAorICAgICAqLworI2RlZmluZSBJUElGU1RBVFNUQUJMRV9PSUQgICAgICAgICAgICAgIDEsMyw2LDEsMiwxLDQsMzEsMworI2RlZmluZSBJUElGU1RBVFNUQUJMRUxBU1RDSEFOR0VfT0lEICAgIDEsMyw2LDEsMiwxLDQsMzEsMgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJUFZFUlNJT04gICAgICAgICAxCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lGSU5ERVggICAgICAgICAyCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOUkVDRUlWRVMgICAgICAgICAzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5SRUNFSVZFUyAgICAgICAgIDQKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSU5PQ1RFVFMgICAgICAgICA1CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5PQ1RFVFMgICAgICAgICA2CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOSERSRVJST1JTICAgICAgICAgNworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTk5PUk9VVEVTICAgICAgICAgOAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTkFERFJFUlJPUlMgICAgICAgICA5CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOVU5LTk9XTlBST1RPUyAgICAgICAgIDEwCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOVFJVTkNBVEVEUEtUUyAgICAgICAgIDExCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lORk9SV0RBVEFHUkFNUyAgICAgICAgIDEyCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5GT1JXREFUQUdSQU1TICAgICAgICAgMTMKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTUkVBU01SRVFEUyAgICAgICAgIDE0CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU1JFQVNNT0tTICAgICAgICAgMTUKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTUkVBU01GQUlMUyAgICAgICAgIDE2CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lORElTQ0FSRFMgICAgICAgICAxNworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTkRFTElWRVJTICAgICAgICAgMTgKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENJTkRFTElWRVJTICAgICAgICAgMTkKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VUUkVRVUVTVFMgICAgICAgICAyMAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ09VVFJFUVVFU1RTICAgICAgICAgMjEKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VURk9SV0RBVEFHUkFNUyAgICAgICAgIDIzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDT1VURk9SV0RBVEFHUkFNUyAgICAgICAgIDI0CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVERJU0NBUkRTICAgICAgICAgMjUKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR1JFUURTICAgICAgICAgMjYKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR09LUyAgICAgICAgIDI3CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdGQUlMUyAgICAgICAgIDI4CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdDUkVBVEVTICAgICAgICAgMjkKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VUVFJBTlNNSVRTICAgICAgICAgMzAKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRUUkFOU01JVFMgICAgICAgICAzMQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRPQ1RFVFMgICAgICAgICAzMgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ09VVE9DVEVUUyAgICAgICAgIDMzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOTUNBU1RQS1RTICAgICAgICAgMzQKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENJTk1DQVNUUEtUUyAgICAgICAgIDM1CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOTUNBU1RPQ1RFVFMgICAgICAgICAzNgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ0lOTUNBU1RPQ1RFVFMgICAgICAgICAzNworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRNQ0FTVFBLVFMgICAgICAgICAzOAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ09VVE1DQVNUUEtUUyAgICAgICAgIDM5CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVE1DQVNUT0NURVRTICAgICAgICAgNDAKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRNQ0FTVE9DVEVUUyAgICAgICAgIDQxCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOQkNBU1RQS1RTICAgICAgICAgNDIKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENJTkJDQVNUUEtUUyAgICAgICAgIDQzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEJDQVNUUEtUUyAgICAgICAgIDQ0CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDT1VUQkNBU1RQS1RTICAgICAgICAgNDUKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTRElTQ09OVElOVUlUWVRJTUUgICAgICAgICA0NgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNSRUZSRVNIUkFURSAgICAgICAgIDQ3CisKKworI2RlZmluZSBJUElGU1RBVFNUQUJMRV9NSU5fQ09MICAgQ09MVU1OX0lQSUZTVEFUU0lOUkVDRUlWRVMKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfTUFYX0NPTCAgIENPTFVNTl9JUElGU1RBVFNSRUZSRVNIUkFURQorCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBJRlNUQVRTVEFCTEVfT0lEU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYwppbmRleCBjODY1NjA3Li4xMDU4N2UyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgImlwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRbXSA9IHsgSVBTWVNURU1TVEFUU1RBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZFtdID0geyBJUFNZU1RFTVNUQVRTVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgoaXBTeXN0ZW1TdGF0c1RhYmxlX29pZCk7CiAKIGlwU3lzdGVtU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gaXBTeXN0ZW1TdGF0c1RhYmxlX3VzZXJfY29udGV4dDsKQEAgLTE2Myw2ICsxNjMsOCBAQAogICAgIC8qCiAgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgaXBTeXN0ZW1TdGF0c1RhYmxlIHJvd3JlcSBjbGVhbnVwLgogICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUocm93cmVxX2N0eC0+ZGF0YSk7CisgICAgcm93cmVxX2N0eC0+ZGF0YSA9IE5VTEw7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAgKi8KIAogLyoqCkBAIC0zOTAsMTEgKzM5MiwxNCBAQAogICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKIAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7Ci0KKyAgICAKICAgICAvKgogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzSW5SZWNlaXZlcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luUmVjZWl2ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luUmVjZWl2ZXNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93OwogCkBAIC00NTYsNiArNDYxLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJblJlY2VpdmVzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDSW5SZWNlaXZlc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cikuaGlnaCA9CkBAIC01MjAsNiArNTI4LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luT2N0ZXRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5PY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbk9jdGV0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5PY3RldHMubG93OwogCkBAIC01NzcsNiArNTg4LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJbk9jdGV0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbk9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENJbk9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbk9jdGV0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luT2N0ZXRzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtNjQ0LDYgKzY1OCw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkhkckVycm9ycyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luSGRyRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luSGRyRXJyb3JzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5IZHJFcnJvcnM7CiAKQEAgLTcwNSw4ICs3MjIsMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luTm9Sb3V0ZXMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIpID0KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5Ob1JvdXRlczsKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk5vUm91dGVzLmxvdzsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c0luTm9Sb3V0ZXNfZ2V0ICovCkBAIC03NzIsNiArNzkyLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luQWRkckVycm9ycyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luQWRkckVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5BRERSRVJST1JTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5BZGRyRXJyb3JzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5BZGRyRXJyb3JzOwogCkBAIC04NDMsNiArODY2LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luVW5rbm93blByb3RvcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5VTktOT1dOUFJPVE9TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5Vbmtub3duUHJvdG9zX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5Vbmtub3duUHJvdG9zOwogCkBAIC05MDUsNiArOTMxLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luVHJ1bmNhdGVkUGt0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5UUlVOQ0FURURQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5UcnVuY2F0ZWRQa3RzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5UcnVuY2F0ZWRQa3RzOwogCkBAIC05NzYsNiArMTAwNSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkZvcndEYXRhZ3JhbXMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbkZvcndEYXRhZ3JhbXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93OwogCkBAIC0xMDM2LDYgKzEwNjgsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwU3lzdGVtU3RhdHNIQ0luRm9yd0RhdGFncmFtcyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93OwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMTEwNSw2ICsxMTQwLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c1JlYXNtUmVxZHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNSZWFzbVJlcWRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzUmVhc21SZXFkc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtUmVxZHM7CiAKQEAgLTExNzUsNiArMTIxMyw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNSZWFzbU9LcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c1JlYXNtT0tzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c1JlYXNtT0tzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuUmVhc21PS3M7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CkBAIC0xMjQ1LDYgKzEyODYsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzUmVhc21GYWlscyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c1JlYXNtRmFpbHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNRkFJTFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuUmVhc21GYWlsczsKIApAQCAtMTMwOSw2ICsxMzUzLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luRGlzY2FyZHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbkRpc2NhcmRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkRJU0NBUkRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5EaXNjYXJkc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluRGlzY2FyZHM7CiAKQEAgLTEzNzYsNiArMTQyMyw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkRlbGl2ZXJzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5EZWxpdmVyc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5EZWxpdmVyc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5EZWxpdmVycy5sb3c7CiAKQEAgLTE0MzMsNiArMTQ4Myw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDSW5EZWxpdmVycyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ0luRGVsaXZlcnNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5EZWxpdmVycy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMTQ5OCw2ICsxNTUxLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dFJlcXVlc3RzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRSZXF1ZXN0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93OwogCkBAIC0xNTU1LDYgKzE2MTEsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93OwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cikuaGlnaCA9CkBAIC0xNjE5LDggKzE2NzgsMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dE5vUm91dGVzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0Tm9Sb3V0ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXROb1JvdXRlc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLk91dE5vUm91dGVzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdzsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c091dE5vUm91dGVzX2dldCAqLwpAQCAtMTY5NCw2ICsxNzU2LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dEZvcndEYXRhZ3JhbXMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdzsKIApAQCAtMTc1NCw2ICsxODE5LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRGb3J3RGF0YWdyYW1zIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cikuaGlnaCA9CkBAIC0xODIxLDggKzE4ODksMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dERpc2NhcmRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0RGlzY2FyZHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXREaXNjYXJkc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLk91dERpc2NhcmRzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdzsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c091dERpc2NhcmRzX2dldCAqLwpAQCAtMTg5MCw4ICsxOTYxLDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRGcmFnUmVxZHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRGcmFnUmVxZHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIpID0KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuT3V0RnJhZ1JlcWRzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdSZXFkcy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXRGcmFnUmVxZHNfZ2V0ICovCkBAIC0xOTU2LDkgKzIwMzAsMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dEZyYWdPS3MgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRGcmFnT0tzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KLSAgICBzbm1wX2xvZyhMT0dfRVJSLAotICAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUgbm9kZSBpcFN5c3RlbVN0YXRzT3V0RnJhZ09LcyBub3QgaW1wbGVtZW50ZWQ6IHNraXBwaW5nXG4iKTsKLSAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHT0tTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcFN5c3RlbVN0YXRzT3V0RnJhZ09Lc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0RnJhZ09Lcy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXRGcmFnT0tzX2dldCAqLwpAQCAtMjAyNiw4ICsyMTAyLDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRGcmFnRmFpbHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRGcmFnRmFpbHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIpID0KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuT3V0RnJhZ0ZhaWxzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdGYWlscy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXRGcmFnRmFpbHNfZ2V0ICovCkBAIC0yMDkyLDggKzIxNzEsMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dEZyYWdDcmVhdGVzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0RnJhZ0NyZWF0ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLk91dEZyYWdDcmVhdGVzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdzsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c091dEZyYWdDcmVhdGVzX2dldCAqLwpAQCAtMjE1NSw2ICsyMjM3LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dFRyYW5zbWl0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dFRyYW5zbWl0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRUcmFuc21pdHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFRyYW5zbWl0cy5sb3c7CiAKQEAgLTIyMTIsNiArMjI5Nyw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDT3V0VHJhbnNtaXRzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFRyYW5zbWl0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikuaGlnaCA9CkBAIC0yMjc2LDYgKzIzNjQsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0T2N0ZXRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dE9jdGV0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdzsKIApAQCAtMjMzMyw2ICsyNDI0LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRPY3RldHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dE9jdGV0c192YWxfcHRyKS5oaWdoID0KQEAgLTIzOTUsNiArMjQ4OSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbk1jYXN0UGt0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luTWNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdzsKIApAQCAtMjQ1MSw2ICsyNTQ4LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMjUxNCw2ICsyNjE0LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luTWNhc3RPY3RldHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdzsKIApAQCAtMjU3Miw2ICsyNjc1LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJbk1jYXN0T2N0ZXRzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0cikuaGlnaCA9CkBAIC0yNjM0LDYgKzI3NDAsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0TWNhc3RQa3RzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dE1jYXN0UGt0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmxvdzsKIApAQCAtMjY5MCw2ICsyNzk5LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdFBrdHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKS5oaWdoID0KQEAgLTI3NTQsNiArMjg2Niw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRNY2FzdE9jdGV0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0TWNhc3RPY3RldHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmxvdzsKIApAQCAtMjgxNiw2ICsyOTMxLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMjg3OCw2ICsyOTk2LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luQmNhc3RQa3RzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5CY2FzdFBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93OwogCkBAIC0yOTM0LDYgKzMwNTUsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93OwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CkBAIC0yOTk2LDYgKzMxMjAsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0QmNhc3RQa3RzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0QmNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dEJjYXN0UGt0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdzsKIApAQCAtMzA1Miw2ICszMTc5LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRCY2FzdFBrdHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyKS5oaWdoID0KQEAgLTMxMTYsNiArMzI0Niw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZSBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+aXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lOwogCkBAIC0zMTcyLDYgKzMzMDUsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzUmVmcmVzaFJhdGUgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgKaW5kZXggOWFhMDE2ZC4uY2ExZTFmMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCkBAIC0yMzQsOCArMjM0LDggQEAKICAgICAgICAgKiBpcFN5c3RlbVN0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpcFN5c3RlbVN0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcFN5c3RlbVN0YXRzVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBiNjMzMjliLi4zMDBlZDdhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2luY2x1ZGUgImlwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgogCi1zdGF0aWMgaW50ICAgICAgaXBzc19jYWNoZV9yZWZyZXNoID0gMzA7CitzdGF0aWMgaW50ICAgICAgaXBzc19jYWNoZV9yZWZyZXNoID0gSVBTWVNURU1TVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQ7CiAKIC8qKiBAaW5ncm91cCBpbnRlcmZhY2UgCiAgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKQEAgLTU4LDYxICs1OCwxMCBAQAogaXBTeXN0ZW1TdGF0c1RhYmxlX2luaXRfZGF0YShpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZykKIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG15X2NvbHVtbnNbXSA9IHsKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTlJFQ0VJVkVTLCBDT0xVTU5fSVBTWVNURU1TVEFUU0hDSU5SRUNFSVZFUywKLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5PQ1RFVFMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSENJTk9DVEVUUywKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkhEUkVSUk9SUywKLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5OT1JPVVRFUywgKi8KLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkFERFJFUlJPUlMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5VTktOT1dOUFJPVE9TLAotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNJTlRSVU5DQVRFRFBLVFMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5GT1JXREFUQUdSQU1TLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0hDSU5GT1JXREFUQUdSQU1TLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU1JFQVNNUkVRRFMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTUkVBU01PS1MsIENPTFVNTl9JUFNZU1RFTVNUQVRTUkVBU01GQUlMUywKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkRJU0NBUkRTLCBDT0xVTU5fSVBTWVNURU1TVEFUU0lOREVMSVZFUlMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSENJTkRFTElWRVJTLCBDT0xVTU5fSVBTWVNURU1TVEFUU09VVFJFUVVFU1RTLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0hDT1VUUkVRVUVTVFMsIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VUTk9ST1VURVMsCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVEZPUldEQVRBR1JBTVMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRGT1JXREFUQUdSQU1TLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU09VVERJU0NBUkRTLAotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRGUkFHUkVRRFMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VURlJBR09LUywgQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRGUkFHRkFJTFMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VURlJBR0NSRUFURVMsCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVFRSQU5TTUlUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRUUkFOU01JVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVE9DVEVUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRPQ1RFVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU0lOTUNBU1RQS1RTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ0lOTUNBU1RQS1RTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNJTk1DQVNUT0NURVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ0lOTUNBU1RPQ1RFVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVE1DQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRNQ0FTVFBLVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVE1DQVNUT0NURVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ09VVE1DQVNUT0NURVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkJDQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENJTkJDQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VUQkNBU1RQS1RTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ09VVEJDQVNUUEtUUywgKi8KLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNESVNDT05USU5VSVRZVElNRSwKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNSRUZSRVNIUkFURQotICAgIH07Ci0gICAgc3RhdGljIG5ldHNubXBfY29sdW1uX2luZm8gdmFsaWRfY29sdW1uczsKLQotICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwU3lzdGVtU3RhdHNUYWJsZTppcFN5c3RlbVN0YXRzVGFibGVfaW5pdF9kYXRhIiwKKyAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwU3lzdGVtU3RhdHNUYWJsZTppcFN5c3RlbVN0YXRzVGFibGVfaW5pdF9kYXRhIiwKICAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CiAKICAgICAvKgotICAgICAqIHdlIG9ubHkgd2FudCB0byBwcm9jZXNzIGNlcnRhaW4gY29sdW1ucywgYW5kIGlnbm9yZQotICAgICAqIGFueXRoaW5nIGVsc2UuCi0gICAgICovCi0gICAgdmFsaWRfY29sdW1ucy5pc1JhbmdlID0gMDsKLSAgICB2YWxpZF9jb2x1bW5zLmRldGFpbHMubGlzdCA9IG15X2NvbHVtbnM7Ci0gICAgdmFsaWRfY29sdW1ucy5saXN0X2NvdW50ID0gc2l6ZW9mKG15X2NvbHVtbnMpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0gICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KCZ2YWxpZF9jb2x1bW5zKTsKLSAgICAvKgogICAgICAqIFRPRE86MzAzOm86IEluaXRpYWxpemUgaXBTeXN0ZW1TdGF0c1RhYmxlIGRhdGEuCiAgICAgICovCiAKQEAgLTE2Nyw3ICsxMTYsMTEgQEAKICAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CiAgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KICAgICAgKi8KLSAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBOVUxMOworCisKKyAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpcFN5c3RlbVN0YXRzVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgIT0gKmNvbnRhaW5lcl9wdHJfcHRyKQorICAgICAgICAoKmNvbnRhaW5lcl9wdHJfcHRyKS0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImlwU3lzdGVtU3RhdHNUYWJsZSIpOwogCiAgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKQEAgLTE5Miw2ICsxNDUsNyBAQAogICAgICAgICAoTkVUU05NUF9DQUNIRV9ET05UX0FVVE9fUkVMRUFTRSB8IE5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0VYUElSRUQKICAgICAgICAgIHwgTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfQkVGT1JFX0xPQUQgfAogICAgICAgICAgTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRCk7CisgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKCpjb250YWluZXJfcHRyX3B0cik7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLwogCiAvKioKQEAgLTIwNCw3ICsxNTgsNyBAQAogICAgIC8qCiAgICAgICogY2hlY2sgZm9yIG1hdGNoaW5nIGVudHJ5LiB3b3JrcyBiZWNhdXNlIGluZGV4ZXMgYXJlIHRoZSBzYW1lLgogICAgICAqLwotICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKnN5c3RlbXN0YXRzX2VudHJ5ID0KKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICpzeXN0ZW1zdGF0c19lbnRyeSA9IChuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5KikKICAgICAgICAgQ09OVEFJTkVSX0ZJTkQoc3RhdHMsIHJvd3JlcV9jdHgtPmRhdGEpOwogICAgIGlmIChOVUxMID09IHN5c3RlbXN0YXRzX2VudHJ5KSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJpcFN5c3RlbVN0YXRzVGFibGU6YWNjZXNzIiwKQEAgLTI2Nyw3ICsyMjEsNyBAQAogICAgICAgICAmJiAoTUZEX1NVQ0NFU1MgPT0KICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbXN0YXRzX2VudHJ5LT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc19pcF92ZXJzaW9uKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFswXSkpKSB7CiAgICAgICAgIHJvd3JlcV9jdHgtPmlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZSA9IGlwc3NfY2FjaGVfcmVmcmVzaCAqIDEwMDA7ICAgICAgIC8qIG1pbGxpLXNlY29uZHMgKi8KICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOwogICAgIH0gZWxzZSB7CkBAIC0zODYsNyArMzQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19GUkVFX0RPTlRfQ0xFQVIpOwogCiAgICAgREVCVUdNU0dUKCgidmVyYm9zZTppcFN5c3RlbVN0YXRzVGFibGU6aXBTeXN0ZW1TdGF0c1RhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlIiBORVRTTk1QX1BSSXogInUgcmVjb3Jkc1xuIiwgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcFN5c3RlbVN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggMDg5ODEyYy4uZTFjYTJjYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE4IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSwgaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcFN5c3RlbVN0YXRzVGFibGVfY29udGFpbmVyX2dldCwgaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MCwxOSArOTMsMjMgQEAKICAgICAgICAgICAgICAgICBfaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIGlwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwU3lzdGVtU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKIGlwU3lzdGVtU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwU3lzdGVtU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX1JFR0lTVFJBVElPTl9TRVQKIGlwU3lzdGVtU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCkBAIC0xMDIsMTIgKzExOSwxNSBAQAogICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlwU3lzdGVtU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiAvKgogICogbWZkIG11bHRpcGxleGVyIG1vZGVzCkBAIC0xNDksNyArMTY5LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBTWVNURU1TVEFUU1RBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUFNZU1RFTVNUQVRTVEFCTEVfTUFYX0NPTDsKQEAgLTIyMCw3ICsyNDAsOCBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQorICAgIC8qIFhYWCAtIGFyZSB0aGVzZSBhY3R1YWxseSBuZWNlc3Nhcnk/ICovCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0yNDMsNyArMjY0LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTU0OCw3ICs1NjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC01OTQsNyArNjE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwU3lzdGVtU3RhdHNUYWJsZTpfbWZkX2lwU3lzdGVtU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtMTEwNiw3ICsxMTI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC0xMTc1LDcgKzExOTYsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwU3lzdGVtU3RhdHNUYWJsZV9nZXRfdmFsdWVzICovCiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTMzOSw2ICsxMzYwLDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgogaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpcFN5c3RlbVN0YXRzVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTEzNjEsOCArMTM4Myw5IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPQorICAgIHJvd3JlcV9jdHggPSAoaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORChpcFN5c3RlbVN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYwppbmRleCA4YWY5NjEzLi45MDk2MjY5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0xMSw0NCArMTIsMjg1IEBACiAKICNpbmNsdWRlICJpcF9zY2FsYXJzLmgiCiAKLWludAorc3RhdGljIGludAoraGFuZGxlX2lwRm9yd2FyZGluZyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKTsKKworc3RhdGljIGludAoraGFuZGxlX2lwRGVmYXVsdFRUTChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKTsKKworc3RhdGljIGludAogaGFuZGxlX2lwdjZJcEZvcndhcmRpbmcobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CiAKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcHY2SXBEZWZhdWx0SG9wTGltaXQobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CisKK3N0YXRpYyBpbnQgaXBBZGRyZXNzU3BpbkxvY2tWYWx1ZTsKKworc3RhdGljIGludAoraGFuZGxlX2lwQWRkcmVzc1NwaW5Mb2NrKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpOworCiAvKiogSW5pdGlhbGl6ZXMgdGhlIGlwIG1vZHVsZSAqLwogdm9pZAogaW5pdF9pcF9zY2FsYXJzKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAgICAgIGlwUmVhc21UaW1lb3V0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAxMywgMCB9OworICAgIHN0YXRpYyBvaWQgCSAgICBpcEZvcndhcmRpbmdfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDEgfTsKKyAgICBzdGF0aWMgb2lkIAkgICAgaXBEZWZhdWx0VFRMX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAyIH07CiAgICAgc3RhdGljIG9pZCAgICAgIGlwdjZJcEZvcndhcmRpbmdfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDI1IH07Ci0gICAgc3RhdGljIG9pZCAgICAgIGlwdjZJcERlZmF1bHRIb3BMaW1pdF9vaWRbXSA9Ci0gICAgICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMjYsIDAgfTsKKyAgICBzdGF0aWMgb2lkICAgICAgaXB2NklwRGVmYXVsdEhvcExpbWl0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAyNiB9OworICAgIHN0YXRpYyBvaWQgICAgICBpcEFkZHJlc3NTcGluTG9ja19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzMgfTsKIAogICAgIERFQlVHTVNHVEwoKCJpcF9zY2FsYXIiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CiAKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlCi0gICAgICAgICgiaXBSZWFzbVRpbWVvdXQiLAotICAgICAgICAgaXBSZWFzbVRpbWVvdXRfb2lkLCBPSURfTEVOR1RIKGlwUmVhc21UaW1lb3V0X29pZCksCi0gICAgICAgICAiL3Byb2Mvc3lzL25ldC9pcHY0L2lwZnJhZ190aW1lIiwgQVNOX0lOVEVHRVIsCi0gICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgTlVMTCwgTlVMTCk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpcEZvcndhcmRpbmciLCBoYW5kbGVfaXBGb3J3YXJkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBGb3J3YXJkaW5nX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXBGb3J3YXJkaW5nX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXBEZWZhdWx0VFRMIiwgaGFuZGxlX2lwRGVmYXVsdFRUTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFRUTF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKGlwRGVmYXVsdFRUTF9vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKSk7CisKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXB2NklwRm9yd2FyZGluZyIsIGhhbmRsZV9pcHY2SXBGb3J3YXJkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBGb3J3YXJkaW5nX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChpcHY2SXBGb3J3YXJkaW5nX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSkpOwogCi0gICAgbmV0c25tcF9yZWdpc3Rlcl9udW1fZmlsZV9pbnN0YW5jZQotICAgICAgICAoImlwdjZJcERlZmF1bHRIb3BMaW1pdCIsCi0gICAgICAgICBpcHY2SXBEZWZhdWx0SG9wTGltaXRfb2lkLCBPSURfTEVOR1RIKGlwdjZJcERlZmF1bHRIb3BMaW1pdF9vaWQpLAotICAgICAgICAgIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL2RlZmF1bHQvaG9wX2xpbWl0IiwgQVNOX0lOVEVHRVIsCi0gICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwdjZJcERlZmF1bHRIb3BMaW1pdCIsIGhhbmRsZV9pcHY2SXBEZWZhdWx0SG9wTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJcERlZmF1bHRIb3BMaW1pdF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXB2NklwRGVmYXVsdEhvcExpbWl0X29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSkpOworCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwQWRkcmVzc1NwaW5Mb2NrIiwgaGFuZGxlX2lwQWRkcmVzc1NwaW5Mb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NTcGluTG9ja19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXBBZGRyZXNzU3BpbkxvY2tfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKSk7CisKKyAgICAvKiBJbml0aWFsaXplIHNwaW4gbG9jayB3aXRoIHJhbmRvbSB2YWx1ZSAqLworICAgIGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUgPSAoaW50KSByYW5kb20oKTsKKwogfQogCi1pbnQKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcEZvcndhcmRpbmcobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgcmM7CisgICAgdV9sb25nICAgdmFsdWU7CisKKyAgICAvKiBXZSBhcmUgbmV2ZXIgY2FsbGVkIGZvciBhIEdFVE5FWFQgaWYgaXQncyByZWdpc3RlcmVkIGFzIGEKKyAgICAgICAiaW5zdGFuY2UiLCBhcyBpdCdzICJtYWdpY2FsbHkiIGhhbmRsZWQgZm9yIHVzLiAgKi8KKworICAgIC8qIGEgaW5zdGFuY2UgaGFuZGxlciBhbHNvIG9ubHkgaGFuZHMgdXMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLCBzbworICAgICAgIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIGEgbGlzdCBvZiByZXF1ZXN0czsgd2UnbGwgb25seSBnZXQgb25lLiAqLworCisgICAgc3dpdGNoKHJlcWluZm8tPm1vZGUpIHsKKworICAgICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfZ2V0KCZ2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IDEgOiAyOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICAvKgorICAgICAgICAgKiBTRVQgUkVRVUVTVAorICAgICAgICAgKgorICAgICAgICAgKiBtdWx0aXBsZSBzdGF0ZXMgaW4gdGhlIHRyYW5zYWN0aW9uLiAgU2VlOgorICAgICAgICAgKiBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L3Rvb2xraXQvbWliX21vZHVsZS9zZXQtYWN0aW9ucy5qcGcKKyAgICAgICAgICovCisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX2dldCgmdmFsdWUpOworICAgICAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT0NSRUFUSU9OKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdV9sb25nICp2YWx1ZV9zYXZlOworICAgICAgICAgICAgICAgIHZhbHVlX3NhdmUgPSBuZXRzbm1wX21lbWR1cCgmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworICAgICAgICAgICAgICAgIGlmICggTlVMTCA9PSB2YWx1ZV9zYXZlICkKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXBmdyIsIHZhbHVlX3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKKwkgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAgICAgLyogWFhYOiBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gUkVTRVJWRTEgYW5kL29yCisgICAgICAgICAgICAgICBSRVNFUlZFMi4gIFNvbWV0aGluZyBmYWlsZWQgc29tZXdoZXJlLCBhbmQgdGhlIHN0YXRlcworICAgICAgICAgICAgICAgYmVsb3cgd29uJ3QgYmUgY2FsbGVkLiAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgICAgICAvKiBYWFg6IHBlcmZvcm0gdGhlIHZhbHVlIGNoYW5nZSBoZXJlICovCisgICAgICAgICAgICB2YWx1ZSA9ICAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKKyAgICAgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX3NldCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIDAgIT0gcmMgKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgcmMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgICAgICAgdmFsdWUgPQorICAgICAgICAgICAgICAgICAqKCh1X2xvbmcgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXBmdyIpKTsKKyAgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19zZXQodmFsdWUpOworICAgICAgICAgICAgIGlmICggMCAhPSByYyApIHsKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfVU5ET0ZBSUxFRCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9pcEZvcndhcmRpbmdcbiIsIHJlcWluZm8tPm1vZGUgKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKworc3RhdGljIGludAoraGFuZGxlX2lwRGVmYXVsdFRUTChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICByYzsKKyAgICB1X2xvbmcgICB2YWx1ZTsKKworICAgIC8qIFdlIGFyZSBuZXZlciBjYWxsZWQgZm9yIGEgR0VUTkVYVCBpZiBpdCdzIHJlZ2lzdGVyZWQgYXMgYQorICAgICAgICJpbnN0YW5jZSIsIGFzIGl0J3MgIm1hZ2ljYWxseSIgaGFuZGxlZCBmb3IgdXMuICAqLworCisgICAgLyogYSBpbnN0YW5jZSBoYW5kbGVyIGFsc28gb25seSBoYW5kcyB1cyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUsIHNvCisgICAgICAgd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgYSBsaXN0IG9mIHJlcXVlc3RzOyB3ZSdsbCBvbmx5IGdldCBvbmUuICovCisKKyAgICBzd2l0Y2gocmVxaW5mby0+bW9kZSkgeworCisgICAgICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQoJnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgLyoKKyAgICAgICAgICogU0VUIFJFUVVFU1QKKyAgICAgICAgICoKKyAgICAgICAgICogbXVsdGlwbGUgc3RhdGVzIGluIHRoZSB0cmFuc2FjdGlvbi4gIFNlZToKKyAgICAgICAgICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0L21pYl9tb2R1bGUvc2V0LWFjdGlvbnMuanBnCisgICAgICAgICAqLworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzdG9yZSBvbGQgaW5mbyBmb3IgdW5kbyBsYXRlcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQoJnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9DUkVBVElPTik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVfbG9uZyAqdmFsdWVfc2F2ZTsKKyAgICAgICAgICAgICAgICB2YWx1ZV9zYXZlID0gbmV0c25tcF9tZW1kdXAoJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAoIE5VTEwgPT0gdmFsdWVfc2F2ZSApCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwdHRsIiwgdmFsdWVfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOworCSAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgICAgICAvKiBYWFg6IGZyZWUgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiBSRVNFUlZFMSBhbmQvb3IKKyAgICAgICAgICAgICAgIFJFU0VSVkUyLiAgU29tZXRoaW5nIGZhaWxlZCBzb21ld2hlcmUsIGFuZCB0aGUgc3RhdGVzCisgICAgICAgICAgICAgICBiZWxvdyB3b24ndCBiZSBjYWxsZWQuICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgICAgIC8qIFhYWDogcGVyZm9ybSB0aGUgdmFsdWUgY2hhbmdlIGhlcmUgKi8KKyAgICAgICAgICAgIHZhbHVlID0gICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOworICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfc2V0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICggMCAhPSByYyApIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCByYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgICAgICB2YWx1ZSA9CisgICAgICAgICAgICAgICAgICooKHVfbG9uZyAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcHR0bCIpKTsKKyAgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9zZXQodmFsdWUpOworICAgICAgICAgICAgIGlmICggMCAhPSByYyApIHsKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfVU5ET0ZBSUxFRCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9pcERlZmF1bHRUVExcbiIsIHJlcWluZm8tPm1vZGUgKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKworc3RhdGljIGludAogaGFuZGxlX2lwdjZJcEZvcndhcmRpbmcobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKQEAgLTgxLDYgKzMyMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFNFVCBSRVFVRVNUCiAgICAgICAgICAqCkBAIC0xMTAsNyArMzUzLDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXBmdyIsIHZhbHVlX3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpcDZmdyIsIHZhbHVlX3NhdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTMzLDEyICszNzYsMTMgQEAKICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgIHZhbHVlID0KICAgICAgICAgICAgICooKHVfbG9uZyAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXBmdyIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXA2ZnciKSk7CiAgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRm9yd2FyZGluZ19zZXQodmFsdWUpOwogICAgICAgICBpZiAoIDAgIT0gcmMgKSB7CiAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9VTkRPRkFJTEVEKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICAvKgpAQCAtMTUxLDMgKzM5NSwxOTMgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorCisKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcEFkZHJlc3NTcGluTG9jayhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICpyZXF1ZXN0cykKK3sKKyAgICBsb25nICAgdmFsdWU7CisKKyAgICAvKiBXZSBhcmUgbmV2ZXIgY2FsbGVkIGZvciBhIEdFVE5FWFQgaWYgaXQncyByZWdpc3RlcmVkIGFzIGEKKyAgICAgICAiaW5zdGFuY2UiLCBhcyBpdCdzICJtYWdpY2FsbHkiIGhhbmRsZWQgZm9yIHVzLiAgKi8KKworICAgIC8qIGEgaW5zdGFuY2UgaGFuZGxlciBhbHNvIG9ubHkgaGFuZHMgdXMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLCBzbworICAgICAgIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIGEgbGlzdCBvZiByZXF1ZXN0czsgd2UnbGwgb25seSBnZXQgb25lLiAqLworCisgICAgc3dpdGNoKHJlcWluZm8tPm1vZGUpIHsKKworICAgICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmaXBBZGRyZXNzU3BpbkxvY2tWYWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICAvKgorICAgICAgICAgKiBTRVQgUkVRVUVTVAorICAgICAgICAgKgorICAgICAgICAgKiBtdWx0aXBsZSBzdGF0ZXMgaW4gdGhlIHRyYW5zYWN0aW9uLiAgU2VlOgorICAgICAgICAgKiBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L3Rvb2xraXQvbWliX21vZHVsZS9zZXQtYWN0aW9ucy5qcGcKKyAgICAgICAgICovCisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgICAgICAvKiBqdXN0IGNoZWNrIHRoZSB2YWx1ZSAqLworICAgICAgICAgICAgdmFsdWUgPSAgKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcik7CisgICAgICAgICAgICBpZiAodmFsdWUgIT0gaXBBZGRyZXNzU3BpbkxvY2tWYWx1ZSkKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgICAgIC8qIHBlcmZvcm0gdGhlIGZpbmFsIHNwaW5sb2NrIGNoZWNrIGFuZCBpbmNyZWFzZSBpdHMgdmFsdWUgKi8KKyAgICAgICAgICAgIHZhbHVlID0gICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOworICAgICAgICAgICAgaWYgKHZhbHVlICE9IGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUrKzsKKyAgICAgICAgICAgICAgICAvKiBhbmQgY2hlY2sgaXQgZm9yIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgaWYgKGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUgPiAyMTQ3NDgzNjQ3IHx8IGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUgPCAwKQorICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NTcGluTG9ja1ZhbHVlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9pcEFkZHJlc3NTcGluTG9ja1xuIiwgcmVxaW5mby0+bW9kZSApOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworCitzdGF0aWMgaW50CitoYW5kbGVfaXB2NklwRGVmYXVsdEhvcExpbWl0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgdV9sb25nICAgICAgICAgIHZhbHVlOworICAgIGludCAgICAgICAgICAgICByYzsKKyAgICAvKgorICAgICAqIFdlIGFyZSBuZXZlciBjYWxsZWQgZm9yIGEgR0VUTkVYVCBpZiBpdCdzIHJlZ2lzdGVyZWQgYXMgYQorICAgICAqICJpbnN0YW5jZSIsIGFzIGl0J3MgIm1hZ2ljYWxseSIgaGFuZGxlZCBmb3IgdXMuICAKKyAgICAgKi8KKworICAgIC8qCisgICAgICogYSBpbnN0YW5jZSBoYW5kbGVyIGFsc28gb25seSBoYW5kcyB1cyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUsIHNvCisgICAgICogd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgYSBsaXN0IG9mIHJlcXVlc3RzOyB3ZSdsbCBvbmx5IGdldCBvbmUuIAorICAgICAqLworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisKKyAgICBjYXNlIE1PREVfR0VUOgorCisgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRGVmYXVsdEhvcExpbWl0X2dldCgmdmFsdWUpOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSElOU1RBTkNFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBOT1RZRVQKKyAgICAgICAgLyoKKyAgICAgICAgICogU0VUIFJFUVVFU1QKKyAgICAgICAgICoKKyAgICAgICAgICogbXVsdGlwbGUgc3RhdGVzIGluIHRoZSB0cmFuc2FjdGlvbi4gIFNlZToKKyAgICAgICAgICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0L21pYl9tb2R1bGUvc2V0LWFjdGlvbnMuanBnCisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIC8qCisgICAgICAgICAqIG9yIHlvdSBjb3VsZCB1c2UgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplIGluc3RlYWQgCisgICAgICAgICAqLworICAgICAgICByYyA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUik7CisgICAgICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCByYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICAvKgorICAgICAgICAgKiBYWFggbWFsbG9jICJ1bmRvIiBzdG9yYWdlIGJ1ZmZlciAKKyAgICAgICAgICovCisgICAgICAgIGlmICggLyogWFhYIGlmIG1hbGxvYywgb3Igd2hhdGV2ZXIsIGZhaWxlZDogKi8gKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYOiBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gUkVTRVJWRTEgYW5kL29yCisgICAgICAgICAqIFJFU0VSVkUyLiAgU29tZXRoaW5nIGZhaWxlZCBzb21ld2hlcmUsIGFuZCB0aGUgc3RhdGVzCisgICAgICAgICAqIGJlbG93IHdvbid0IGJlIGNhbGxlZC4gCisgICAgICAgICAqLworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICAvKgorICAgICAgICAgKiBYWFg6IHBlcmZvcm0gdGhlIHZhbHVlIGNoYW5nZSBoZXJlIAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAvKiBYWFg6IGVycm9yPyAqLyApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIC8qIHNvbWUgZXJyb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICAvKgorICAgICAgICAgKiBYWFg6IGRlbGV0ZSB0ZW1wb3Jhcnkgc3RvcmFnZSAKKyAgICAgICAgICovCisgICAgICAgIGlmICggLyogWFhYOiBlcnJvcj8gKi8gKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdHJ5IF9yZWFsbHlfcmVhbGx5XyBoYXJkIHRvIG5ldmVyIGdldCB0byB0aGlzIHBvaW50IAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9DT01NSVRGQUlMRUQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICAvKgorICAgICAgICAgKiBYWFg6IFVORE8gYW5kIHJldHVybiB0byBwcmV2aW91cyB2YWx1ZSBmb3IgdGhlIG9iamVjdCAKKyAgICAgICAgICovCisgICAgICAgIGlmICggLyogWFhYOiBlcnJvcj8gKi8gKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdHJ5IF9yZWFsbHlfcmVhbGx5XyBoYXJkIHRvIG5ldmVyIGdldCB0byB0aGlzIHBvaW50IAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9VTkRPRkFJTEVEKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyoKKyAgICAgICAgICogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAKKyAgICAgICAgICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmtub3duIG1vZGUgKCVkKSBpbiBoYW5kbGVfaXB2NklwRGVmYXVsdEhvcExpbWl0XG4iLAorICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5jCmluZGV4IGJkMjdiNzguLjM1MWRkZDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZFtdID0geyBJUFY0SU5URVJGQUNFVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICBpcHY0SW50ZXJmYWNlVGFibGVfb2lkW10gPSB7IElQVjRJTlRFUkZBQ0VUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcHY0SW50ZXJmYWNlVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChpcHY0SW50ZXJmYWNlVGFibGVfb2lkKTsKIAogaXB2NEludGVyZmFjZVRhYmxlX3JlZ2lzdHJhdGlvbiBpcHY0SW50ZXJmYWNlVGFibGVfdXNlcl9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmgKaW5kZXggYWQ1YTY3OC4uODEyMzkwOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oCkBAIC0zOSw2ICszOSw3IEBACiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwogICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwdjRJbnRlcmZhY2VUYWJsZSh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgaW5pdF9pcHY0SW50ZXJmYWNlVGFibGUodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2lwdjRJbnRlcmZhY2VUYWJsZSh2b2lkKTsKIApAQCAtMTA3LDggKzEwOCw4IEBACiAgICAgICAgICogaXB2NEludGVyZmFjZVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAoaXB2NEludGVyZmFjZVRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlwdjRJbnRlcmZhY2VUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcHY0SW50ZXJmYWNlVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwdjRJbnRlcmZhY2VUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAiaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggODRhOThmZi4uYzllMTRmZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgICAgICAqIHllcy4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwdjRJbnRlcmZhY2VUYWJsZTpjaGVja19lbnRyeV9mb3JfdXBkYXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgcm93IGZvciAlZFxuIiwgZW50cnktPmluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgcm93IGZvciAlIiBORVRTTk1QX1BSSW8gImRcbiIsIGVudHJ5LT5pbmRleCkpOwogICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjLCBpZnRfcnJjKTsKICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwogICAgICAgICB9CkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICAgICAgICAgICAqIG5vCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcHY0SW50ZXJmYWNlVGFibGU6Y2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZWQgIHJvdyBmb3IgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlZCAgcm93IGZvciAlIiBORVRTTk1QX1BSSW8gImRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpZnRfcnJjLT5kYXRhLmlmZW50cnktPmluZGV4KSk7CiAgICAgICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGMsIGlmdF9ycmMpOwogICAgICAgICAgICAgY2hhbmdlZCA9IDE7CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICAgICAgICAgICAgICAgaWZ0X3JyYy0+ZGF0YS5pZmVudHJ5LT5yZXRyYW5zbWl0X3Y0KSB8fAogICAgICAgICAgICAgICAgIChlbnRyeS0+cmVhc21fbWF4X3Y0ICE9IGlmdF9ycmMtPmRhdGEuaWZlbnRyeS0+cmVhc21fbWF4X3Y0KSkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcHY0SW50ZXJmYWNlVGFibGU6Y2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgY2hhbmdlZCBmb3IgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvdyBjaGFuZ2VkIGZvciAlIiBORVRTTk1QX1BSSW8gImRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ0X3JyYy0+ZGF0YS5pZmVudHJ5LT5pbmRleCkpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwppbmRleCA2ZjFhYTQ5Li5hODUxYTMwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDQsOCArNDUsMTQgQEAKIAogI2luY2x1ZGUgImlwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuaCIKIAorI2luY2x1ZGUgImlmLW1pYi9pZlRhYmxlL2lmVGFibGUuaCIKKwogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtMTk0LDcgKzIwMSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQVjRJTlRFUkZBQ0VUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBWNElOVEVSRkFDRVRBQkxFX01BWF9DT0w7CkBAIC0zNDUsNyArMzUyLDcgQEAKICAgICAgKi8KICAgICB7CiAgICAgICAgIG9pZCAgICAgICAgICAgICBsY19vaWRbXSA9IHsgSVBWNElOVEVSRkFDRVRBQkxFTEFTVENIQU5HRV9PSUQgfTsKLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXB2NFRhYmxlTGFzdENoYW5nZWQiLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsY19vaWQsIE9JRF9MRU5HVEgobGNfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLApAQCAtNDQ3LDggKzQ1NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcHY0SW50ZXJmYWNlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9Ci0gICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY0SW50ZXJmYWNlVGFibGU6X21mZF9pcHY0SW50ZXJmYWNlVGFibGVfcG9zdF9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOwpAQCAtMTI3MCw2ICsxMjc1LDcgQEAKICAgICAgICAgICAgICAgICAgImlwdjRJbnRlcmZhY2VUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpcHY0SW50ZXJmYWNlVGFibGUiKTsKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXB2NEludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9pbml0ICovCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VudC5jCmluZGV4IDNjODVhNTQuLjM1YjJlOTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbnQuYwpAQCAtNiw5ICs2LDE0IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShhZ2VudHhfZW5hYmxlX3N1YmFnZW50KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShlbmFibGVfc3RkZXJybG9nKQorCiAvKgogICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmMKaW5kZXggZjljYWFlZi4uOTJmMGE1YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJpcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkW10gPSB7IElQVjZJTlRFUkZBQ0VUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9vaWRbXSA9IHsgSVBWNklOVEVSRkFDRVRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKGlwdjZJbnRlcmZhY2VUYWJsZV9vaWQpOwogCiBpcHY2SW50ZXJmYWNlVGFibGVfcmVnaXN0cmF0aW9uIGlwdjZJbnRlcmZhY2VUYWJsZV91c2VyX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuaAppbmRleCA4MjkyZWMwLi5lMmE4N2ExIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmgKQEAgLTM5LDYgKzM5LDcgQEAKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCiAgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXB2NkludGVyZmFjZVRhYmxlKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBpbml0X2lwdjZJbnRlcmZhY2VUYWJsZSh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25faXB2NkludGVyZmFjZVRhYmxlKHZvaWQpOwogCkBAIC0xOTEsOCArMTkyLDggQEAKICAgICAgICAgKiBpcHY2SW50ZXJmYWNlVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpcHY2SW50ZXJmYWNlVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaXB2NkludGVyZmFjZVRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXB2NkludGVyZmFjZVRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBiMTQwOGZkLi4zM2M2NWE5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgICAgICAgICAgICogeWVzLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBERUJVR01TR1RMKCgiaXB2NkludGVyZmFjZVRhYmxlOmNoZWNrX2VudHJ5X2Zvcl91cGRhdGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnNlcnRlZCByb3cgZm9yIGluZGV4ICVkXG4iLCBlbnRyeS0+aW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnNlcnRlZCByb3cgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwgZW50cnktPmluZGV4KSk7CiAgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKGMsIGlmdF9ycmMpOwogICAgICAgICAgICAgY2hhbmdlZCA9IDE7CiAgICAgICAgIH0KQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAgICogbm8KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwdjZJbnRlcmZhY2VUYWJsZTpjaGVja19lbnRyeV9mb3JfdXBkYXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlZCAgcm93IGZvciBpbmRleCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVkICByb3cgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmdF9ycmMtPmRhdGEuaWZlbnRyeS0+aW5kZXgpKTsKICAgICAgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoYywgaWZ0X3JyYyk7CiAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAmJiAoZW50cnktPmZvcndhcmRpbmdfdjYgIT0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmdF9ycmMtPmRhdGEuaWZlbnRyeS0+Zm9yd2FyZGluZ192NikpKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwdjZJbnRlcmZhY2VUYWJsZTpjaGVja19lbnRyeV9mb3JfdXBkYXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvdyBjaGFuZ2VkIGZvciBpbmRleCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicm93IGNoYW5nZWQgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnRfcnJjLT5kYXRhLmlmZW50cnktPmluZGV4KSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CiAgICAgICAgICAgICB9CkBAIC0zMjksNyArMzI5LDcgQEAKICAgICAgICAgKytjb3VudDsKICAgICB9CiAKLSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwdjZJbnRlcmZhY2VUYWJsZTppcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2xvYWQiLCAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgY291bnQpKTsKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwdjZJbnRlcmZhY2VUYWJsZTppcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2xvYWQiLCAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgKGludCljb3VudCkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5oCmluZGV4IDQxZDcxNTcuLjY2NGMzZDcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtMzUsMjYgKzM1LDE0IEBACiAgICAgICovCiAKIAotICAgIGludAotICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfaW5pdF9kYXRhKGlwdjZJbnRlcmZhY2VUYWJsZV9yZWdpc3RyYXRpb24gKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9yZWcpOworICAgIGludCAgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfaW5pdF9kYXRhKGlwdjZJbnRlcmZhY2VUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9yZWcpOwogCiAKKyAgICB2b2lkICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX2NoZWNrX2VudHJ5X2Zvcl91cGRhdGVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlmVGFibGVfcm93cmVxX2N0eCAqIGlmdF9ycmMsCisJCQkgICAgbmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKmVudHJ5KTsKKwogICAgIHZvaWQgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqY29udGFpbmVyX3B0cl9wdHIpOwogICAgIHZvaWQgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyCkBAIC02NSwyNCArNTMsOCBAQAogICAgIHZvaWQgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250YWluZXIpOwogCi0gICAgaW50Ci0gICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9yb3dfcHJlcChpcHY2SW50ZXJmYWNlVGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX3Jvd19wcmVwKGlwdjZJbnRlcmZhY2VUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwogCiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwppbmRleCA0MjAyNjE2Li5jYmQ1MzNjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDgsNiArNDksMTAgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtMTk0LDcgKzE5OSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQVjZJTlRFUkZBQ0VUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBWNklOVEVSRkFDRVRBQkxFX01BWF9DT0w7CkBAIC0zNDUsNyArMzUwLDcgQEAKICAgICAgKi8KICAgICB7CiAgICAgICAgIG9pZCAgICAgICAgICAgICBsY19vaWRbXSA9IHsgSVBWNklOVEVSRkFDRVRBQkxFTEFTVENIQU5HRV9PSUQgfTsKLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXB2NlRhYmxlTGFzdENoYW5nZWQiLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsY19vaWQsIE9JRF9MRU5HVEgobGNfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLApAQCAtMTM1Miw3ICsxMzU3LDcgQEAKICAgICAgICAgICAgICAgICAgImlwdjZJbnRlcmZhY2VUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImlwdjZJbnRlcmZhY2VUYWJsZSIpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXB2NkludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9pbml0ICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzliZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKQEAgLTAsMCArMSw1IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCitjb25maWdfcmVxdWlyZShpcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTQwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYwpAQCAtMCwwICsxLDEwMDkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYyAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisvKiogXHBhZ2UgTUZEIGhlbHBlciBmb3IgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqCisgKiBcc2VjdGlvbiBpbnRybyBJbnRyb2R1Y3Rpb24KKyAqIEludHJvZHVjdG9yeSB0ZXh0LgorICoKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgorCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgiCisKK2NvbnN0IG9pZCAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRbXSA9CisgICAgeyBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRfc2l6ZSA9CitPSURfTEVOR1RIKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZCk7CisKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV91c2VyX2NvbnRleHQ7CitzdGF0aWMgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICppcHY2U2NvcGVab25lSW5kZXhUYWJsZV91c2VyX2NvbnRleHRfcDsKKwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCk7CisKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgbW9kdWxlCisgKi8KK3ZvaWQKK2luaXRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMDpvOiBQZXJmb3JtIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIG9uZS10aW1lIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcKKyAgICAgKi8KKyAgICBpZiAoc2hvdWxkX2luaXQoImlwdjZTY29wZVpvbmVJbmRleFRhYmxlIikpCisgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUoKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlICovCisKKy8qKgorICogU2h1dC1kb3duIHRoZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBtb2R1bGUgKGFnZW50IGlzIGV4aXRpbmcpCisgKi8KK3ZvaWQKK3NodXRkb3duX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHNob3VsZF9pbml0KCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIpKQorICAgICAgICBzaHV0ZG93bl90YWJsZV9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSgpOworCit9CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAoraW5pdGlhbGl6ZV90YWJsZV9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSh2b2lkKQoreworICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmluaXRpYWxpemVfdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAxOm86IFBlcmZvcm0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgb25lLXRpbWUgdGFibGUgaW5pdGlhbGl6YXRpb24uCisgICAgICovCisKKyAgICAvKgorICAgICAqIFRPRE86MzAyOm86IHwtPkluaXRpYWxpemUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgdXNlciBjb250ZXh0CisgICAgICogaWYgeW91J2QgbGlrZSB0byBwYXNzIGluIGEgcG9pbnRlciB0byBzb21lIGRhdGEgZm9yIHRoaXMKKyAgICAgKiB0YWJsZSwgYWxsb2NhdGUgb3Igc2V0IGl0IHVwIGhlcmUuCisgICAgICovCisgICAgLyoKKyAgICAgKiBhIG5ldHNubXBfZGF0YV9saXN0IGlzIGEgc2ltcGxlIHdheSB0byBzdG9yZSB2b2lkIHBvaW50ZXJzLiBBIHNpbXBsZQorICAgICAqIHN0cmluZyB0b2tlbiBpcyB1c2VkIHRvIGFkZCwgZmluZCBvciByZW1vdmUgcG9pbnRlcnMuCisgICAgICovCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0X3AgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoImlwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIE5vIHN1cHBvcnQgZm9yIGFueSBmbGFncyB5ZXQsIGJ1dCBpbiB0aGUgZnV0dXJlIHlvdSB3b3VsZAorICAgICAqIHNldCBhbnkgZmxhZ3MgaGVyZS4KKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKwkoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0X3AsIGZsYWdzKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6ZV90YWJsZV9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSAqLworCisvKioKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSAKKyAqLwordm9pZAorc2h1dGRvd25fdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIHNodXRkb3duIGNvZGUKKyAgICAgKi8KKyAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfc2h1dGRvd25faW50ZXJmYWNlCisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0X3ApOworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3VzZXJfY29udGV4dF9wID0gTlVMTDsKK30KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGluaXRpYWxpemF0aW9uIChlZyBkZWZhdWx0IHZhbHVlcykKKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCAgICA6IHJvdyByZXF1ZXN0IGNvbnRleHQKKyAqIEBwYXJhbSB1c2VyX2luaXRfY3R4IDogdm9pZCBwb2ludGVyIGZvciB1c2VyIChwYXJhbWV0ZXIgdG8gcm93cmVxX2N0eF9hbGxvY2F0ZSkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICA6IG5vIGVycm9ycworICogQHJldHZhbCBNRkRfRVJST1IgICAgOiBlcnJvciAoY29udGV4dCBhbGxvY2F0ZSB3aWxsIGZhaWwpCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9pbml0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9pbml0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTA6bzogfC0+IFBlcmZvcm0gZXh0cmEgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgcm93cmVxIGluaXRpYWxpemF0aW9uLiAoZWcgREVGVkFMUykKKyAgICAgKi8KKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfaW5pdCAqLworCisvKioKKyAqIGV4dHJhIGNvbnRleHQgY2xlYW51cAorICoKKyAqLwordm9pZAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9jbGVhbnVwCisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIHJvd3JlcSBjbGVhbnVwLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9mcmVlKHJvd3JlcV9jdHgtPmRhdGEpOworICAgIHJvd3JlcV9jdHgtPmRhdGEgPSBOVUxMOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAgKi8KKworLyoqCisgKiBwcmUtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgICAgICA6IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTA6bzogUGVyZm9ybSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBwcmUtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIHBvc3QtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqIE5vdGU6CisgKiAgIE5ldyByb3dzIGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIsIGFuZAorICogICBkZWxldGVkIHJvd3MgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyIGFuZAorICogICByZWxlYXNlZC4KKyAqCisgKiBAcGFyYW0gdXNlcl9jb250ZXh0CisgKiBAcGFyYW0gcmMgOiBNRkRfU1VDQ0VTUyBpZiBhbGwgcmVxdWVzdHMgc3VjY2VlZGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogb3RoZXIgZXJyb3IgKGlnbm9yZWQpCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb250ZXh0LCBpbnQgcmMpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjUxMTpvOiBQZXJmb3JtIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIHBvc3QtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3QgKi8KKworLyoKKyAqIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiBjcmVhdGUgbmV3IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEuCisgKi8KK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKgoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKQoreworICAgIC8qCisgICAgICogVE9ETzoyMDE6cjogfC0+IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICpydG4gPSBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfY3JlYXRlKCk7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9kYXRhIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcnRuKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmFibGUgdG8gbWFsbG9jIG1lbW9yeSBmb3IgbmV3ICIKKyAgICAgICAgICAgICAgICAgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEuXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnRuOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9kYXRhICovCisKKy8qCisgKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWxlYXNlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiByZWxlYXNlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEuCisgKi8KK3ZvaWQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2VfZGF0YShpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICogZGF0YSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWxlYXNlX2RhdGEiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjAyOnI6IHwtPiByZWxlYXNlIG1lbW9yeSBmb3IgdGhlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfZnJlZShkYXRhKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9kYXRhICovCisKKy8qKiBAZGVmZ3JvdXAgZGF0YV9nZXQgZGF0YV9nZXQ6IFJvdXRpbmVzIHRvIGdldCBkYXRhCisgKgorICogVE9ETzoyMzA6TTogSW1wbGVtZW50IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGdldCByb3V0aW5lcy4KKyAqIFRPRE86MjQwOk06IEltcGxlbWVudCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBtYXBwaW5nIHJvdXRpbmVzIChpZiBhbnkpLgorICoKKyAqIFRoZXNlIHJvdXRpbmUgYXJlIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzLiBUaGUKKyAqIHJvdyBjb250ZXh0IGlzIHBhc3NlZCwgYWxvbmcgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSB3aGVyZSB0aGUKKyAqIHZhbHVlIHNob3VsZCBiZSBjb3BpZWQuCisgKgorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhUYWJsZSBpcyBzdWJpZCAzNiBvZiBpcC4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYsIGxlbmd0aDogOAorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICogVE9ETzoyMDA6cjogSW1wbGVtZW50IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEgY29udGV4dCBmdW5jdGlvbnMuCisgKi8KKworCisvKioKKyAqIHNldCBtaWIgaW5kZXgoZXMpCisgKgorICogQHBhcmFtIHRibF9pZHggbWliIGluZGV4IHN0cnVjdHVyZQorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXhfdmFsCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHNldHRpbmcgYWxsIHRoZSBNSUIgaW5kZXgKKyAqICBjb21wb25lbnRzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gSXQgaXMgYXNzdW1lIHRoYXQgdGhlIEMgdmFsdWVzCisgKiAgaGF2ZSBhbHJlYWR5IGJlZW4gbWFwcGVkIGZyb20gdGhlaXIgbmF0aXZlL3Jhd2Zvcm1hdCB0byB0aGUgTUlCIGZvcm1hdC4KKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4CisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCisgICAgIGxvbmcgaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgdGJsX2lkeC0+aXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCA9IGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXhfdmFsOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNldCByb3cgY29udGV4dCBpbmRleGVzCisgKgorICogQHBhcmFtIHJlcXJlcV9jdHggdGhlIHJvdyBjb250ZXh0IHRoYXQgbmVlZHMgdXBkYXRlZCBpbmRleGVzCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtaWIgaW5kZXhzLCB0aGVuIHVwZGF0ZXMgdGhlIG9pZCBpbmRleHMKKyAqICBmcm9tIHRoZSBtaWIgaW5kZXguCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPQorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KCZyb3dyZXFfY3R4LT50YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXhfdmFsKSkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKworICAgIC8qCisgICAgICogY29udmVydCBtaWIgaW5kZXggdG8gb2lkIGluZGV4CisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBzaXplb2Yocm93cmVxX2N0eC0+b2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKyAgICBpZiAoMCAhPSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleF90b19vaWQoJnJvd3JlcV9jdHgtPm9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT50YmxfaWR4KSkgeworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXQgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWwKKyAqIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbCBpcyBzdWJpZCAyIG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS4yCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciB0aGUgbGluay1sb2NhbCBzY29wZSBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbCBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF9nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c2NvcGV6b25lX2xpbmtsb2NhbDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXgzCisgKiBpcHY2U2NvcGVab25lSW5kZXgzIGlzIHN1YmlkIDMgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjMKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIDMgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXgzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4M192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4M19nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXgzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXgzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXgzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleDMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleDNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4M192YWxfcHRyKSA9IDA7CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4M19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbAorICogaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbCBpcyBzdWJpZCA0IG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS40CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciB0aGUgYWRtaW4tbG9jYWwgc2NvcGUgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbF92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWwgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbF92YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbAorICogaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsIGlzIHN1YmlkIDUgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjUKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHRoZSBzaXRlLWxvY2FsIHNjb3BlIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbF92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWwgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbF92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleDYKKyAqIGlwdjZTY29wZVpvbmVJbmRleDYgaXMgc3ViaWQgNiBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuNgorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgNiBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleDYgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXg2X3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXg2X2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleDZfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleDZfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleDZfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4NiBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4Nl92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXg2X3ZhbF9wdHIpID0gMDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4Nl9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4NworICogaXB2NlNjb3BlWm9uZUluZGV4NyBpcyBzdWJpZCA3IG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS43CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSA3IG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4NyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleDdfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleDdfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4N192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4N192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4N19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXg3IGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXg3X3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleDdfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXg3X2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbAorICogaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWwgaXMgc3ViaWQgOCBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuOAorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3IgdGhlIG9yZ2FuaXphdGlvbi1sb2NhbCBzY29wZSBvbiB0aGlzCisgICAgICAgICAgICBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbCBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXg5CisgKiBpcHY2U2NvcGVab25lSW5kZXg5IGlzIHN1YmlkIDkgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjkKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIDkgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXg5IGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4OV92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4OV9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXg5X3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXg5X3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXg5X2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleDkgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleDlfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4OV92YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleDlfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleEEKKyAqIGlwdjZTY29wZVpvbmVJbmRleEEgaXMgc3ViaWQgMTAgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjEwCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSBBIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4QSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleEFfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleEFfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4QV92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4QV92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4QV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhBIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhBX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleEFfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhBX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhCCisgKiBpcHY2U2NvcGVab25lSW5kZXhCIGlzIHN1YmlkIDExIG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS4xMQorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgQiBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEIgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXhCX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhCX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleEJfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleEJfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleEJfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4QiBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4Ql92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXhCX3ZhbF9wdHIpID0gMDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4Ql9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4QworICogaXB2NlNjb3BlWm9uZUluZGV4QyBpcyBzdWJpZCAxMiBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuMTIKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIEMgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhDIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4Q192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4Q19nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXhDX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhDX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhDX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleENfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4Q192YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleENfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleEQKKyAqIGlwdjZTY29wZVpvbmVJbmRleEQgaXMgc3ViaWQgMTMgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjEzCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSBEIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4RCBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleERfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleERfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4RF92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4RF92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4RF9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhEIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhEX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleERfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhEX2dldCAqLworCisKKy8qKiBAeyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTc0ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDppcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oIDE0MTcwIDIwMDctMDQtMjkgMDA6MTI6MzJaIHZhcnVuX2MkCisgKi8KKyNpZm5kZWYgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfSAorI2RlZmluZSBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgbWlzYyBtaXNjOiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzCisgKgorICogQHsKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oPgorICAgIC8qCisgICAgICogb3RoZXIgcmVxdWlyZWQgbW9kdWxlIGNvbXBvbmVudHMgCisgICAgICovCisgICAgLyogKklOREVOVC1PRkYqICAqLworY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmUpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzKQorICAgIC8qICpJTkRFTlQtT04qICAqLworCisgICAgLyoKKyAgICAgKiBPSUQgYW5kIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIAorICAgICAqLworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaCIKKworICAgIC8qCisgICAgICogZW51bSBkZWZpbmlvbnMgCisgICAgICovCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZW51bXMuaCIKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSh2b2lkKTsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGlzIHN1YmlkIDM2IG9mIGlwLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LCBsZW5ndGg6IDgKKyAgICAgKi8KKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBXaGVuIHlvdSByZWdpc3RlciB5b3VyIG1pYiwgeW91IGdldCB0byBwcm92aWRlIGEgZ2VuZXJpYworICAgICAqIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBiYWNrIHRvIHlvdSBmb3IgbW9zdCBvZiB0aGUKKyAgICAgKiBmdW5jdGlvbnMgY2FsbHMuCisgICAgICoKKyAgICAgKiBUT0RPOjEwMDpyOiBSZXZpZXcgYWxsIGNvbnRleHQgc3RydWN0dXJlcworICAgICAqLworICAgIC8qCisgICAgICogVE9ETzoxMDE6bzogfC0+IFJldmlldyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSByZWdpc3RyYXRpb24gY29udGV4dC4KKyAgICAgKi8KKyAgICB0eXBlZGVmIG5ldHNubXBfZGF0YV9saXN0IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogVE9ETzoxMTA6cjogfC0+IFJldmlldyBpcHY2U2NvcGVab25lVGFibGUgZGF0YSBjb250ZXh0IHN0cnVjdHVyZS4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBmb3IgaXB2NlNjb3BlWm9uZVRhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTIwOnI6IHwtPiBSZXZpZXcgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgbWliIGluZGV4LgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbmRleCBmb3IgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4X3MgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAgICAgKi8KKyAgICAgICAgbG9uZyAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXg7CisKKworICAgIH0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4OworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMTpyOiB8ICAgfC0+IFJldmlldyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBtYXggaW5kZXggbGVuZ3RoLgorICAgICAqIElmIHlvdSBLTk9XIHRoYXQgeW91ciBpbmRleGVzIHdpbGwgbmV2ZXIgZXhjZWVkIGEgY2VydGFpbgorICAgICAqIGxlbmd0aCwgdXBkYXRlIHRoaXMgbWFjcm8gdG8gdGhhdCBsZW5ndGguCisgICAgICovCisjZGVmaW5lIE1BWF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9JRFhfTEVOICAgICAxCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjEzMDpvOiB8LT4gUmV2aWV3IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIFJvdyByZXF1ZXN0IChyb3dyZXEpIGNvbnRleHQuCisgICAgICogV2hlbiB5b3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB5b3Ugd2lsbCBiZSBwYXNzZWQgYQorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggcG9pbnRlci4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X3MgeworCisgICAgLyoqIHRoaXMgbXVzdCBiZSBmaXJzdCBmb3IgY29udGFpbmVyIGNvbXBhcmUgdG8gd29yayAqLworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICAgICAgb2lkICAgICAgICAgICAgIG9pZF90bXBbTUFYX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX0lEWF9MRU5dOworCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleCB0YmxfaWR4OworCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKmRhdGE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZmxhZ3MgcGVyIHJvdy4gQ3VycmVudGx5LCB0aGUgZmlyc3QgKGxvd2VyKSA4IGJpdHMgYXJlIHJlc2VydmVkCisgICAgICAgICAqIGZvciB0aGUgdXNlci4gU2VlIG1mZC5oIGZvciBvdGhlciBmbGFncy4KKyAgICAgICAgICovCisgICAgICAgIHVfaW50ICAgICAgICAgICByb3dyZXFfZmxhZ3M7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzoxMzE6bzogfCAgIHwtPiBBZGQgdXNlZnVsIGRhdGEgdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgcm93cmVxIGNvbnRleHQuCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIHN0b3JhZ2UgZm9yIGZ1dHVyZSBleHBhbnNpb24KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2xpc3Q7CisKKyAgICB9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHg7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWZfcm93cmVxX2N0eF9zIHsKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICB9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZl9yb3dyZXFfY3R4OworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAqLworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jb250ZXh0KTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2NvbnRleHQsIGludCByYyk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9pbml0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsKKworCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKgorICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCk7CisKKyAgICB2b2lkCisgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9kYXRhKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKiBkYXRhKTsKKworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkX3NpemU7CisKKworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmgiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUgaXMgc3ViaWQgMzYgb2YgaXAuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYsIGxlbmd0aDogOAorICAgICAqLworICAgIC8qCisgICAgICogaW5kZXhlcworICAgICAqLworCisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF92YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4M19nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleDNfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleDZfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXg2X3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXg3X2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4N192YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfZ2V0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXg5X2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4OV92YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4QV9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleEFfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleEJfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXhCX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhDX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4Q192YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4RF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleERfdmFsX3B0cik7CisKKworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAorICAgICAgICAgbG9uZyBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4X3ZhbCk7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4ZXNfc2V0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgIGxvbmcgaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleF92YWwpOworCisgICAgLyoKKyAgICAgKiBEVU1NWSBtYXJrZXJzLCBpZ25vcmUKKyAgICAgKgorICAgICAqIFRPRE86MDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjE5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoyOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mzk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjQ5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI1ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuYyAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCIKKworCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuaCIKKworLyoqIEBpbmdyb3VwIGludGVyZmFjZQorICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCisgKgorICogVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gbG9jYXRlIHRoZSBkYXRhIHVzZWQgdG8gc2F0aXNmeQorICogcmVxdWVzdHMuCisgKiAKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUgaXMgc3ViaWQgMzYgb2YgaXAuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LCBsZW5ndGg6IDgKKyAqLworCisvKioKKyAqIGluaXRpYWxpemF0aW9uIGZvciBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBkYXRhIGFjY2VzcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwIHRvIGFsbG93IHlvdSB0bworICogYWxsb2NhdGUgYW55IHJlc291cmNlcyB5b3UgbmVlZCBmb3IgdGhlIGRhdGEgdGFibGUuCisgKgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZworICogICAgICAgIFBvaW50ZXIgdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogdW5yZWNvdmVyYWJsZSBlcnJvci4KKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0X2RhdGEoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWcpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdF9kYXRhIiwgImNhbGxlZFxuIikpOworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdF9kYXRhICovCisKKy8qKgorICogY29udGFpbmVyIG92ZXJ2aWV3CisgKgorICovCisKKy8qKgorICogY29udGFpbmVyIGluaXRpYWxpemF0aW9uCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHJfcHRyIEEgcG9pbnRlciB0byBhIGNvbnRhaW5lciBwb2ludGVyLiBJZiB5b3UKKyAqICAgICAgICBjcmVhdGUgYSBjdXN0b20gY29udGFpbmVyLCB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcmV0dXJuIGl0CisgKiAgICAgICAgdG8gdGhlIE1GRCBoZWxwZXIuIElmIHNldCB0byBOVUxMLCB0aGUgTUZEIGhlbHBlciB3aWxsCisgKiAgICAgICAgYWxsb2NhdGUgYSBjb250YWluZXIgZm9yIHlvdS4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuIElmIG5vIGN1c3RvbQorICogIGNvbnRhaW5lciBpcyBhbGxvY2F0ZWQsIHRoZSBNRkQgY29kZSB3aWxsIGNyZWF0ZSBvbmUgZm9yIHlvdXIuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGluaXRpYWxpemF0aW9uIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBvcGVuaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHdpbGwgc3VwcGx5IHRoZSBkYXRhLCBvcGVuaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjb250YWluZXIgcGFyYW0gdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CisgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KKyAgICAgKi8KKyAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBOVUxMOworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY2FjaGUgcGFyYW0gdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgY2FjaGUgcHJvcGVydGllcy4KKyAgICAgKgorICAgICAqIEFsc28gZm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUKKyAgICAgKiBjYWNoZS4gRG8gbm90IGNoYW5nZSB0aGUgbWFnaWMgcG9pbnRlciwgYXMgaXQgaXMgdXNlZAorICAgICAqIGJ5IHRoZSBNRkQgaGVscGVyLiBUbyBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgc2V0CisgICAgICogY2FjaGUtPmVuYWJsZWQgdG8gMC4KKyAgICAgKi8KKyAgICBjYWNoZS0+dGltZW91dCA9IDYwOyAvKiBzZWNvbmRzICovCisKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIGNvbnRhaW5lciBzaHV0ZG93bgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyIEEgcG9pbnRlciB0byB0aGUgY29udGFpbmVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzaHV0ZG93biB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfZnJlZSgpLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBjbGVhbnVwIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBjbG9zaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHN1cHBsaWVkIHRoZSBkYXRhLCBjbG9zaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXJfcHRyKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBwYXJhbXMgdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworLyoqCisgKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCisgKgorICovCitzdGF0aWMgdm9pZAorX3NuYXJmX3pvbmVpbmRleF9lbnRyeShuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICpzY29wZXpvbmVfZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKworICAgIERFQlVHVFJBQ0U7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBzY29wZXpvbmVfZW50cnkpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKyAgICByb3dyZXFfY3R4ID0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChzY29wZXpvbmVfZW50cnksTlVMTCk7CisgICAgaWYgKChOVUxMICE9IHJvd3JlcV9jdHgpICYmCisgICAgICAgICAoTUZEX1NVQ0NFU1MgPT0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXQKKyAgICAgICAgIChyb3dyZXFfY3R4LCByb3dyZXFfY3R4LT5kYXRhLT5pbmRleCkpKSB7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICB9IGVsc2UgeworICAgICAgIGlmIChyb3dyZXFfY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBjYWNoZS5cbiIpOworICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9mcmVlKHNjb3Blem9uZV9lbnRyeSk7CisgICAgfQorICAgICAgCit9CisKKy8qKgorICogbG9hZCBpbml0aWFsIGRhdGEKKyAqCisgKiBUT0RPOjM1MDpNOiBJbXBsZW1lbnQgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgZGF0YSBsb2FkCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgdG8gd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGluc2VydGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgOiBDYW4ndCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGluZGV4KGVzKSAoYW5kIGRhdGEsIG9wdGlvbmFsbHkpCisgKiAgZm9yIHRoZSBldmVyeSByb3cgaW4gdGhlIGRhdGEgc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBXaGlsZSBsb2FkaW5nIHRoZSBkYXRhLCB0aGUgb25seSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIGluZGV4ZXMuCisgKiAgSWYgYWNjZXNzIHRvIHlvdXIgZGF0YSBpcyBjaGVhcC9mYXN0IChlLmcuIHlvdSBoYXZlIGEgcG9pbnRlciB0byBhCisgKiAgc3RydWN0dXJlIGluIG1lbW9yeSksIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXBkYXRlIHRoZSBkYXRhIGhlcmUuCisgKiAgSWYsIGhvd2V2ZXIsIHRoZSBhY2Nlc3NpbmcgdGhlIGRhdGEgaW52b3ZsZXMgbW9yZSB3b3JrIChlLmcuIHBhcnNpbmcKKyAqICBzb21lIG90aGVyIGV4aXN0aW5nIGRhdGEsIG9yIHBlZm9ybWluZyBjYWxjdWxhdGlvbnMgdG8gZGVyaXZlIHRoZSBkYXRhKSwKKyAqICB0aGVuIHlvdSBjYW4gbGltaXQgeW91cnNlbGYgdG8gc2V0dGluZyB0aGUgaW5kZXhlcyBhbmQgc2F2aW5nIGFueQorICogIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgbGF0ZXIuIFRoZW4gdXNlIHRoZSBzYXZlZCBpbmZvcm1hdGlvbiBpbgorICogIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19wcmVwKCkgZm9yIHBvcHVsYXRpbmcgZGF0YS4KKyAqCisgKiBAbm90ZQorICogIElmIHlvdSBuZWVkIGNvbnNpc3RlbmN5IGJldHdlZW4gcm93cyAobGlrZSB5b3Ugd2FudCBzdGF0aXN0aWNzCisgKiAgZm9yIGVhY2ggcm93IHRvIGJlIGZyb20gdGhlIHNhbWUgdGltZSBmcmFtZSksIHlvdSBzaG91bGQgc2V0IGFsbAorICogIGRhdGEgaGVyZS4KKyAqCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisKKyAgICAvKgorICAgICAqIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBpbmRleCB2YWx1ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfY29udGFpbmVyICp6b25laW5kZXggPSBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2xvYWQoTlVMTCwgMCk7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHpvbmVpbmRleCkgeworICAgICAgICBERUJVR01TR1RMKCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGU6Y29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgZ2V0IHNjb3Blem9uZSBpdGVyYXRvclxuIikpOworICAgICAgICByZXR1cm4gTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFOworICAgIH0KKyAgICAvKgorICAgICAqIFRPRE86MzUxOk06IHwtPiBMb2FkL3VwZGF0ZSBkYXRhIGluIHRoZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBjb250YWluZXIuCisgICAgICogbG9vcCBvdmVyIHlvdXIgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgZGF0YSwgYWxsb2NhdGUgYSByb3dyZXEgY29udGV4dCwKKyAgICAgKiBzZXQgdGhlIGluZGV4KGVzKSBbYW5kIGRhdGEsIG9wdGlvbmFsbHldIGFuZCBpbnNlcnQgaW50bworICAgICAqIHRoZSBjb250YWluZXIuCisgICAgICovCisKKyAgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKHpvbmVpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9zbmFyZl96b25laW5kZXhfZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIC8qCisgICAgICogZnJlZSB0aGUgY29udGFpbmVyLiB3ZSd2ZSBlaXRoZXIgY2xhaW1lZCBlYWNoIGVudHJ5LCBvciByZWxlYXNlZCBpdCwKKyAgICAgKiBzbyB0aGUgYWNjZXNzIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBjbGVhciB0aGUgY29udGFpbmVyLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfZnJlZSh6b25laW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSk7CisKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImluc2VydGVkICVsdSByZWNvcmRzXG4iLCAodW5zaWduZWQgbG9uZylDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9sb2FkICovCisKKy8qKgorICogY29udGFpbmVyIGNsZWFuIHVwCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgd2l0aCBhbGwgY3VycmVudCBpdGVtcworICoKKyAqICBUaGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGNhbGxlZCBwcmlvciB0byBhbGwKKyAqICBpdGVtJ3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIuIElmIHlvdQorICogIG5lZWQgdG8gZG8gYW55IHByb2Nlc3NpbmcgYmVmb3JlIHRoYXQsIGRvIGl0IGhlcmUuCisgKgorICogQG5vdGUKKyAqICBUaGUgTUZEIGhlbHBlciB3aWxsIHRha2UgY2FyZSBvZiByZWxlYXNpbmcgYWxsIHRoZSByb3cgY29udGV4dHMuCisgKgorICovCit2b2lkCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozODA6TTogRnJlZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBjb250YWluZXIgZGF0YS4KKyAgICAgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBwcmVwYXJlIHJvdyBmb3IgcHJvY2Vzc2luZy4KKyAqCisgKiAgV2hlbiB0aGUgYWdlbnQgaGFzIGxvY2F0ZWQgdGhlIHJvdyBmb3IgYSByZXF1ZXN0LCB0aGlzIGZ1bmN0aW9uIGlzCisgKiAgY2FsbGVkIHRvIHByZXBhcmUgdGhlIHJvdyBmb3IgcHJvY2Vzc2luZy4gSWYgeW91IGZ1bGx5IHBvcHVsYXRlZAorICogIHRoZSBkYXRhIGNvbnRleHQgZHVyaW5nIHRoZSBpbmRleCBzZXR1cCBwaGFzZSwgeW91IG1heSBub3QgbmVlZCB0bworICogIGRvIGFueXRoaW5nLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4IHBvaW50ZXIgdG8gYSBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93X3ByZXAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19wcmVwIiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzozOTA6bzogUHJlcGFyZSByb3cgZm9yIHJlcXVlc3QuCisgICAgICogSWYgcG9wdWxhdGluZyByb3cgZGF0YSB3YXMgZGVsYXllZCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8KKyAgICAgKiBmaWxsIGluIHRoZSByb3cgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93X3ByZXAgKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjk4ZTkxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmggMTQxNzAgMjAwNy0wNC0yOSAwMDoxMjozMlogdmFydW5fYyQKKyAqLworI2lmbmRlZiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9EQVRBX0FDQ0VTU19ICisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0RBVEFfQUNDRVNTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGlzIHN1YmlkIDM2IG9mIGlwLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LCBsZW5ndGg6IDgKKyAgICAgKi8KKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRfZGF0YQorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZyk7CisKKworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHIpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisjZGVmaW5lIE1BWF9MSU5FX1NJWkUgMjU2CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19wcmVwKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0RBVEFfQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9lbnVtcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5ZWM4OAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9lbnVtcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMgMTI1MjYgMjAwNS0wNy0xNSAyMjo0MToxNlogcnN0b3J5ICQKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZW51bXMuaCAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisjaWZuZGVmIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0VOVU1TX0gKKyNkZWZpbmUgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfRU5VTVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE5PVEVTIG9uIGVudW1zCisgICAgICogPT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFZhbHVlIE1hcHBpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tCisgICAgICogSWYgdGhlIHZhbHVlcyBmb3IgeW91ciBkYXRhIHR5cGUgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGUKKyAgICAgKiBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgbWliLCB5b3Ugc2hvdWxkIG1hcCB0aGVtCisgICAgICogYmVsb3cuIEZvciBleGFtcGxlLCBhIGJvb2xlYW4gZmxhZyAoMS8wKSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkCisgICAgICogYXMgYSBUcnV0aFZhbHVlIGluIGEgTUlCLCB3aGljaCBtYXBzIHRvIHRoZSB2YWx1ZXMgKDEvMikuCisgICAgICoKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGVudW0gZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjA4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwxMTU0IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQgCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jIDE0MTcwIDIwMDctMDQtMjkgMDA6MTI6MzJaIHZhcnVuX2MkCisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oIgorCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2l6ZSwgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2dldCwgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGlzIHN1YmlkIDM2IG9mIGlwLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNiwgbGVuZ3RoOiA4CisgKi8KK3R5cGVkZWYgc3RydWN0IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKnVzZXJfY3R4OworCisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyB0YmxfaW5mbzsKKworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyBhY2Nlc3NfbXVsdGlwbGV4ZXI7CisKK30gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlX2N0eDsKKworc3RhdGljIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHgKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHg7CisKK3N0YXRpYyB2b2lkICAgIAorX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0CisoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCk7CitzdGF0aWMgdm9pZCAgICAKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24KKyhpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KTsKK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKTsKK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKTsKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0NPTlRBSU5FUl9HRVQKK25ldHNubXBfY29udGFpbmVyICoKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX1JFR0lTVFJBVElPTl9HRVQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX1JFR0lTVFJBVElPTl9TRVQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fc2V0CisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKK3sKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKm9sZCA9CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eDsKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CisgICAgcmV0dXJuIG9sZDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0NPTlRBSU5FUl9TSVpFCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCit7CisgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jb250YWluZXIpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KKworLyoKKyAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcworICovCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29iamVjdF9sb29rdXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfdmFsdWVzOworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZQorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyLCB1X2xvbmcgZmxhZ3MpCit7CisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzICphY2Nlc3NfbXVsdGlwbGV4ZXIgPQorICAgICAgICAmaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LmFjY2Vzc19tdWx0aXBsZXhlcjsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YmxfaW5mbyA9CisgICAgICAgICZpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudGJsX2luZm87CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyOworICAgIGludCAgICAgICAgICAgICBtZmRfbW9kZXMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSIsICJjYWxsZWRcbiIpKTsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNhdmUgaW50ZXJmYWNlIGNvbnRleHQgZm9yIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgICAgICovCisgICAgLyoKKyAgICAgKiBTZXR0aW5nIHVwIHRoZSB0YWJsZSdzIGRlZmluaXRpb24KKyAgICAgKi8KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YmxfaW5mbywgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBpbmRleDogaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgLyoKKyAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcworICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAorICAgICAqLworICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfTUlOX0NPTDsKKyAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX01BWF9DT0w7CisKKyAgICAvKgorICAgICAqIHNhdmUgdXNlcnMgY29udGV4dAorICAgICAqLworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IHJlZ19wdHI7CisKKyAgICAvKgorICAgICAqIGNhbGwgZGF0YSBhY2Nlc3MgaW5pdGlhbGl6YXRpb24gY29kZQorICAgICAqLworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRfZGF0YShyZWdfcHRyKTsKKworICAgIC8qCisgICAgICogc2V0IHVwIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXQKKyAgICAgICAgKCZpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgpOworICAgIGlmIChOVUxMID09IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbnRhaW5lciBmb3IgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhY2Nlc3NfbXVsdGlwbGV4ZXI6IFJFUVVJUkVEIHdyYXBwZXIgZm9yIGdldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwID0KKyAgICAgICAgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vYmplY3RfbG9va3VwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Z2V0X3ZhbHVlcyA9CisgICAgICAgIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCA9CisgICAgICAgIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3Q7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPQorICAgICAgICBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdDsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIENyZWF0ZSBhIHJlZ2lzdHJhdGlvbiwgc2F2ZSBvdXIgcmVnIGRhdGEsIHJlZ2lzdGVyIHRhYmxlLgorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZTppbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwKKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgYXMgYSBtaWJzLWZvci1kdW1taWVzIHRhYmxlLlxuIikpOworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyX2dldChhY2Nlc3NfbXVsdGlwbGV4ZXIpOworICAgIHJlZ2luZm8gPQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlZ2luZm8tPm15X3JlZ192b2lkID0gJmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzZXQgdXAgYmFieSBzdGVwcyBoYW5kbGVyLCBjcmVhdGUgaXQgYW5kIGluamVjdCBpdAorICAgICAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BSRV9SRVFVRVNUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3Rfc3ludGF4X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19PQkpFQ1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ0xFQU5VUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRTOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cm93X2NyZWF0aW9uKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1JPV19DUkVBVEU7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX0NPTlNJU1RFTkNZOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IHJvd19tZXJnZSBoZWxwZXIgd2l0aCBwcmVmaXggcm9vdG9pZF9sZW4gKyAyIChlbnRyeS5jb2wpCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YmxfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKyAgIAorICAgIGlmIChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jYWNoZSkgeworICAgICAgICBoYW5kbGVyID0KKyAgICAgICAgICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LmNhY2hlKTsKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHRhYmxlCisgICAgICovCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWdpbmZvLCB0YmxfaW5mbyk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBTaHV0ZG93biB0aGUgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqLwordm9pZAorX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3NodXRkb3duX2ludGVyZmFjZQorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyKQoreworICAgIC8qCisgICAgICogc2h1dGRvd24gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24KKyAgICAgICAgKCZpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgpOworfQorCit2b2lkCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2YykKK3sKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudGJsX2luZm8udmFsaWRfY29sdW1ucyA9IHZjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV92YWxpZF9jb2x1bW5zX3NldCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogY29udmVydCB0aGUgaW5kZXggY29tcG9uZW50IHN0b3JlZCBpbiB0aGUgY29udGV4dCB0byBhbiBvaWQKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4LCAweDAwLAorICAgICAgICAgICBzaXplb2YodmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgpKTsKKyAgICB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleC5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfdG9fb2lkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0ggCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KSk7CisKKworICAgIGVyciA9IGJ1aWxkX29pZF9ub2FsbG9jKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwgJm9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgpOworICAgIGlmIChlcnIpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciAlZCBjb252ZXJ0aW5nIGluZGV4IHRvIG9pZFxuIiwgZXJyKTsKKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KTsKKworICAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X3RvX29pZCAqLworCisvKioKKyAqIGV4dHJhY3QgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgaW5kZXhlcyBmcm9tIGEgbmV0c25tcF9pbmRleAorICoKKyAqIEByZXR2YWwgU05NUF9FUlJfTk9FUlJPUiAgOiBubyBlcnJvcgorICogQHJldHZhbCBTTk1QX0VSUl9HRU5FUlIgICA6IGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCwgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KSk7CisgICAgdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X2Zyb21fb2lkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBwYXJzZSB0aGUgb2lkIGludG8gdGhlIGluZGl2aWR1YWwgaW5kZXggY29tcG9uZW50cworICAgICAqLworICAgIGVyciA9IHBhcnNlX29pZF9pbmRleGVzKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgpOworICAgIGlmIChlcnIgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAvKgorICAgICAgICAgKiBjb3B5IG91dCB2YWx1ZXMKKyAgICAgICAgICovCisgICAgICAgIG1pYl9pZHgtPmlwdjZTY29wZVpvbmVJbmRleElmSW5kZXggPQorICAgICAgICAgICAgKigobG9uZyAqKSB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleC52YWwuc3RyaW5nKTsKKworCisgICAgfQorCisgICAgLyoKKyAgICAgKiBwYXJzaW5nIG1heSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkuIGZyZWUgaXQuCisgICAgICovCisgICAgc25tcF9yZXNldF92YXJfYnVmZmVycygmdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfZnJvbV9vaWQgKi8KKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGludGVybmFsCisgKiBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGEgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICovCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCk7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgIgorICAgICAgICAgICAgICAgICAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eC5cbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoTlVMTCAhPSBkYXRhKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdHJhY2sgaWYgd2UgZ290IGRhdGEgZnJvbSB1c2VyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyB8PSBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSOworICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YSA9IGRhdGE7CisgICAgICAgIH0gZWxzZSBpZiAoTlVMTCA9PQorICAgICAgICAgICAgICAgICAgIChyb3dyZXFfY3R4LT5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfZGF0YSgpKSkgeworICAgICAgICAgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyA9IHJvd3JlcV9jdHgtPm9pZF90bXA7CisKKyAgICByb3dyZXFfY3R4LT5pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2xpc3QgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhbGxvY2F0ZWQgZGF0YSwgY2FsbCBpbml0IHJvdXRpbmUKKyAgICAgKi8KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2luaXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2luaXRfY3R4KSkgeworICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcm93cmVxX2N0eCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCAqLworCisvKgorICogQGludGVybmFsCisgKiByZWxlYXNlIHJlc291cmNlcyBmb3IgYSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4CisgKi8KK3ZvaWQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eAorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChyb3dyZXFfY3R4KTsKKyAgICAvKgorICAgICAqIGZvciBub24tdHJhbnNpZW50IGRhdGEsIGRvbid0IGZyZWUgZGF0YSB3ZSBnb3QgZnJvbSB0aGUgdXNlcgorICAgICAqLworICAgIGlmICgocm93cmVxX2N0eC0+ZGF0YSkgJiYKKyAgICAgICAgIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9kYXRhKHJvd3JlcV9jdHgtPmRhdGEpOworCisKKyAgICAvKgorICAgICAqIGZyZWUgaW5kZXggb2lkIHBvaW50ZXIKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzICE9IHJvd3JlcV9jdHgtPm9pZF90bXApCisgICAgICAgIGZyZWUocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzKTsKKworICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZmlyc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJza2lwcGluZyBhZGRpdGlvbmFsIHByZV9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ByZV9yZXF1ZXN0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogcmVsZWFzZSByb3cgY29udGV4dCwgaWYgZGVsZXRlZAorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4ICYmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RFTEVURUQpKQorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIHdhaXQgZm9yIGxhc3QgY2FsbCBiZWZvcmUgY2FsbGluZyB1c2VyCisgICAgICovCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2xhc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJ3YWl0aW5nIGZvciBsYXN0IHBvc3RfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICBwYWNrZXRfcmMgPSBuZXRzbm1wX2NoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcihhZ3RyZXFfaW5mby0+YXNwLCAwKTsKKyAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LnVzZXJfY3R4LCBwYWNrZXRfcmMpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3RcbiIsIHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKK19tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2Zyb21faW5kZXgobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyY19wdHIpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggbWliX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfZnJvbV9pbmRleCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJjX3B0cikKKyAgICAgICAgcmNfcHRyID0gJnJjOworICAgICpyY19wdHIgPSBNRkRfU1VDQ0VTUzsKKworICAgIG1lbXNldCgmbWliX2lkeCwgMHgwLCBzaXplb2YobWliX2lkeCkpOworCisgICAgLyoKKyAgICAgKiB0cnkgdG8gcGFyc2Ugb2lkCisgICAgICovCisgICAgKnJjX3B0ciA9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X2Zyb21fb2lkKG9pZF9pZHgsICZtaWJfaWR4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gKnJjX3B0cikgeworICAgICAgICBERUJVR01TR1QoKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsICJlcnJvciBwYXJzaW5nIGluZGV4XG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogYWxsb2NhdGUgbmV3IGNvbnRleHQKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4ID0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChOVUxMLCBOVUxMKTsKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgICpyY19wdHIgPSBNRkRfRVJST1I7CisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworICAgIH0KKworICAgIG1lbWNweSgmcm93cmVxX2N0eC0+dGJsX2lkeCwgJm1pYl9pZHgsIHNpemVvZihtaWJfaWR4KSk7CisKKworICAgIC8qCisgICAgICogY29weSBpbmRleGVzCisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBvaWRfaWR4LT5sZW47CisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcywgb2lkX2lkeC0+b2lkcywKKyAgICAgICAgICAgb2lkX2lkeC0+bGVuICogc2l6ZW9mKG9pZCkpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2Zyb21faW5kZXggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vYmplY3RfbG9va3VwKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBvdXIgY29udGV4dCBmcm9tIG1mZAorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHggKmlmX2N0eCA9CisgICAgICogICAgICAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHggKilyZWdpbmZvLT5teV9yZWdfdm9pZDsKKyAgICAgKi8KKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRibHJlcV9pbmZvOworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKworICAgICAgICB0YmxyZXFfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdGJscmVxX2luZm8pIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJyZXF1ZXN0IGhhZCBubyB0YWJsZSBpbmZvXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiB0cnkgY3JlYXRlIHJvd3JlcQorICAgICAgICAgKi8KKyAgICAgICAgb2lkX2lkeC5vaWRzID0gdGJscmVxX2luZm8tPmluZGV4X29pZDsKKyAgICAgICAgb2lkX2lkeC5sZW4gPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkX2xlbjsKKworICAgICAgICByb3dyZXFfY3R4ID0KKyAgICAgICAgICAgIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2Zyb21faW5kZXgoJm9pZF9pZHgsICZyYyk7CisgICAgICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgeworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyB8PSBNRkRfUk9XX0NSRUFURUQ7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogYWRkIHJvd3JlcV9jdHggdG8gcmVxdWVzdCBkYXRhIGxpc3RzCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19pbnNlcnQocmVxdWVzdHMsIChuZXRzbm1wX2luZGV4ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCByYyk7CisgICAgZWxzZQorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dfcHJlcChyb3dyZXFfY3R4KTsKKworICAgIHJldHVybiBTTk1QX1ZBTElEQVRFX0VSUihyYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2JqZWN0X2xvb2t1cCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBAaW50ZXJuYWwKKyAqIFJldHJpZXZlIHRoZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X2NvbHVtbihpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF9jb2x1bW4iLCAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbCgyKS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYTElOS0xPQ0FMOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4MygzKS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYMzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXgzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbCg0KS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYQURNSU5MT0NBTDoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsKDUpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhTSVRFTE9DQUw6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXg2KDYpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVg2OgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleDZfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXg3KDcpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVg3OgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleDdfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbCg4KS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYT1JHQU5JWkFUSU9OTE9DQUw6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleDkoOSkvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDk6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4OV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleEEoMTApL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhBOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleEFfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhCKDExKS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYQjoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXhCX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4QygxMikvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4Q19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleEQoMTMpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhEOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleERfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9NSU5fQ09MIDw9IGNvbHVtbgorICAgICAgICAgICAgJiYgY29sdW1uIDw9IElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX01BWF9DT0wpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF9jb2x1bW4iLCAiYXNzdW1lIGNvbHVtbiAlZCBpcyByZXNlcnZlZFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByYyA9IE1GRF9TS0lQOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4KikKKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CisgICAgdm9pZCAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAodm9pZCAqKTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfdmFsdWVzIiwgImNhbGxlZFxuIikpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktPmNvbG51bSk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgaWYgKE1GRF9TS0lQID09IHJjKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9IFNOTVBfTk9TVUNISU5TVEFOQ0U7CisgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5VTEwgdmFyYmluZCBkYXRhIHBvaW50ZXIhXG4iKTsKKyAgICAgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgdGhlIGJ1ZmZlciB3YXNuJ3QgdXNlZCBwcmV2aW91c2x5IGZvciB0aGUgb2xkIGRhdGEgKGkuZS4gaXQKKyAgICAgICAgICogd2FzIGFsbGNvYXRlZCBtZW1vcnkpICBhbmQgdGhlIGdldCByb3V0aW5lIHJlcGxhY2VkIHRoZSBwb2ludGVyLAorICAgICAgICAgKiB3ZSBuZWVkIHRvIGZyZWUgdGhlIHByZXZpb3VzIHBvaW50ZXIuCisgICAgICAgICAqLworICAgICAgICBpZiAob2xkX3N0cmluZyAmJiAob2xkX3N0cmluZyAhPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpICYmCisgICAgICAgICAgICAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZyAhPSBvbGRfc3RyaW5nKSkgeworICAgICAgICAgICAgaWYgKGRhdGFGcmVlSG9vaykKKyAgICAgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKG9sZF9zdHJpbmcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyZWUob2xkX3N0cmluZyk7CisgICAgICAgIH0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF92YWx1ZXMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNFVCBQUk9DRVNTSU5HIE5PVCBBUFBMSUNBQkxFIChwZXIgTUlCIG9yIHVzZXIgc2V0dGluZykKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogREFUQSBBQ0NFU1MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9pdGVtX2ZyZWUoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfY29udGFpbmVyX2l0ZW1fZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2l0ZW1fZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfY29udGFpbmVyX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgaW4gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjYWxsIHVzZXIgY29kZQorICAgICAqLworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7CisKKyAgICAvKgorICAgICAqIGZyZWUgYWxsIGl0ZW1zLiBpbmVmZmljaWVudCwgYnV0IGVhc3kuCisgICAgICovCisgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9jb250YWluZXJfaXRlbV9mcmVlLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBpbml0aWFsaXplIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0CisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogY29udGFpbmVyIGluaXQKKyAgICAgKi8KKyAgICBpZl9jdHgtPmNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkX3NpemUpOworCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIGlwU2NvcGVab25lSW5kZXhUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZl9jdHgtPmNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0KCZpZl9jdHgtPmNvbnRhaW5lciwgaWZfY3R4LT5jYWNoZSk7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKKyAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZAorICAgICAgICAgICAgKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICAgICAgaWYgKGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICAgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0KKyAgICAgICAgICAgICAgICAgc3RyZHVwKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIpOworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKKyAgICAgICAgICAgICAgICAgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQorICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOworCisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24KKyAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsICJjYWxsZWRcbiIpKTsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpZl9jdHgtPmNvbnRhaW5lcik7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoaWZfY3R4LT5jb250YWluZXIpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfRVhURVJOQUxfQUNDRVNTCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgb2lkICAgICAgICAgICAgIG9pZF90bXBbTUFYX09JRF9MRU5dOworICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIC8qCisgICAgICogc2V0IHVwIHN0b3JhZ2UgZm9yIE9JRAorICAgICAqLworICAgIG9pZF9pZHgub2lkcyA9IG9pZF90bXA7CisgICAgb2lkX2lkeC5sZW4gPSBzaXplb2Yob2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKworICAgIC8qCisgICAgICogY29udmVydAorICAgICAqLworICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfdG9fb2lkKCZvaWRfaWR4LCBtaWJfaWR4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcm93cmVxX2N0eCA9IChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4KikKKyAgICAgICAgQ09OVEFJTkVSX0ZJTkQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KKworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwU2NvcGVab25lSW5kZXhUYWJsZTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjYWNoZSBmb3IgaXBTY29wZVpvbmVJbmRleFRhYmxlX2NhY2hlX2xvYWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGFuIGludmFsaWQgb3IgZXhwaXJlZCBjYWNoZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KCgwID09IGNhY2hlLT52YWxpZCkgfHwgKDEgPT0gY2FjaGUtPmV4cGlyZWQpKTsKKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICByZXR1cm4gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2xvYWQoKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2xvYWQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcFNjb3BlWm9uZUluZGV4VGFibGU6X2NhY2hlX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY2FjaGUgaW4gaXBTY29wZVpvbmVJbmRleFRhYmxlX2NhY2hlX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29udGFpbmVyID0gKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT5tYWdpYzsKKworICAgIF9jb250YWluZXJfZnJlZShjb250YWluZXIpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfZnJlZSAqLworCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjMzEwOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmggMTQxNzAgMjAwNy0wNC0yOSAwMDoxMjozMlogdmFydW5fYyQKKyAqLworLyoqIEBpbmdyb3VwIGludGVyZmFjZTogUm91dGluZXMgdG8gaW50ZXJmYWNlIHRvIE5ldC1TTk1QCisgKgorICogXHdhcm5pbmcgVGhpcyBjb2RlIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIGNhbGxlZCBkaXJlY3RseSwKKyAqICAgICAgICAgIG9yIHVzZWQgdG8gaW50ZXJwcmV0IGZ1bmN0aW9uYWxpdHkuIEl0IGlzIHN1YmplY3QgdG8KKyAqICAgICAgICAgIGNoYW5nZSBhdCBhbnkgdGltZS4KKyAqIAorICogQHsKKyAqLworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRISVMgRklMRSBET0VTIE5PVCBDT05UQUlOIEFOWSBVU0VSIEVESVRBQkxFIENPREUuICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRIRSBHRU5FUkFURUQgQ09ERSBJUyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiwgQU5EICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgIElTIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgV0FSTklORyBJTiBGVVRVUkUgUkVMRUFTRVMuICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaWZuZGVmIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0lOVEVSRkFDRV9ICisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0lOVEVSRkFDRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCIKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICogUFVCTElDIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIAorICAgICAqLworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY3R4LCB1X2xvbmcgZmxhZ3MpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfc2h1dGRvd25faW50ZXJmYWNlCisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2N0eCk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgKmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgKmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZyk7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2dldCh2b2lkKTsKKyAgICBpbnQgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NpemUodm9pZCk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKiwgdm9pZCAqKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKyAgICBpbnQgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOworCisgICAgLyoKKyAgICAgKiBhY2Nlc3MgdG8gY2VydGFpbiBpbnRlcm5hbHMuIHVzZSB3aXRoIGNhdXRpb24hCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8gKnZjKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9JTlRFUkZBQ0VfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRkYWEyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtb2lkcy5tMmMgMTI4NTUgMjAwNS0wOS0yNyAxNTo1NjowOFogcnN0b3J5ICQKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkcy5oIDE0MTcwIDIwMDctMDQtMjkgMDA6MTI6MzJaIHZhcnVuX2MkCisgKi8KKyNpZm5kZWYgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfT0lEU19ICisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX09JRFNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgCisgICAgICovCisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX09JRCAgICAgICAgICAgICAgMSwzLDYsMSwyLDEsNCwzNgorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhJRklOREVYICAgICAgICAgMQorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhMSU5LTE9DQUwgICAgICAgICAyCisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDMgICAgICAgICAzCisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEFETUlOTE9DQUwgICAgICAgICA0CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWFNJVEVMT0NBTCAgICAgICAgIDUKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYNiAgICAgICAgIDYKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYNyAgICAgICAgIDcKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYT1JHQU5JWkFUSU9OTE9DQUwgICAgICAgICA4CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDkgICAgICAgICA5CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEEgICAgICAgICAxMAorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhCICAgICAgICAgMTEKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYQyAgICAgICAgIDEyCisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEQgICAgICAgICAxMworCisKKyNkZWZpbmUgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfTUlOX0NPTCAgIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhMSU5LTE9DQUwKKyNkZWZpbmUgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfTUFYX0NPTCAgIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhECisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9PSURTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYyBiL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYwppbmRleCA2YTNiODEyLi4zMzFlZTZkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8a3N0YXQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgogCiAjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KQEAgLTEwMywxMiArMTA0LDI5IEBACiAgICAge01JQl9UUkFOU01JU1NJT04sIDAsICh2b2lkICopIC0xLCAwLCAwLCAwLCAwfSwKICAgICB7TUlCX1NOTVAsIDAsICh2b2lkICopIC0xLCAwLCAwLCAwLCAwfSwKICNpZmRlZiBTT0xBUklTX0hBVkVfSVBWNl9NSUJfU1VQUE9SVAorI2lmZGVmIFNPTEFSSVNfSEFWRV9SRkM0MjkzX1NVUFBPUlQKKyAgICB7TUlCX0lQX1RSQUZGSUNfU1RBVFMsIDIwICogc2l6ZW9mKG1pYjJfaXBJZlN0YXRzRW50cnlfdCksICh2b2lkICopLTEsIDAsCisgICAgIDMwLCAwLCAwfSwKKyAgICB7TUlCX0lQNiwgMjAgKiBzaXplb2YobWliMl9pcElmU3RhdHNFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwgMzAsIDAsIDB9LAorI2Vsc2UKKyAgICB7TUlCX0lQNiwgMjAgKiBzaXplb2YobWliMl9pcHY2SWZTdGF0c0VudHJ5X3QpLCAodm9pZCAqKS0xLCAwLCAzMCwgMCwgMH0sCisjZW5kaWYKICAgICB7TUlCX0lQNl9BRERSLCAyMCAqIHNpemVvZihtaWIyX2lwdjZBZGRyRW50cnlfdCksICh2b2lkICopLTEsIDAsIDMwLCAwLCAwfSwKKyAgICB7TUlCX0lQNl9ST1VURSwgMjAwICogc2l6ZW9mKG1pYjJfaXB2NkFkZHJFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwgMzAsIDAsIDB9LAorICAgIHtNSUJfSUNNUDYsIDIwICogc2l6ZW9mKG1pYjJfaXB2NklmSWNtcEVudHJ5X3QpLCAodm9pZCAqKS0xLCAwLCAzMCwgMCwgMH0sCiAgICAge01JQl9UQ1A2X0NPTk4sIDEwMDAgKiBzaXplb2YobWliMl90Y3A2Q29ubkVudHJ5X3QpLCAodm9pZCAqKSAtMSwgMCwgMzAsCiAgICAgIDAsIDB9LAogICAgIHtNSUJfVURQNl9FTkRQT0lOVCwgMTAwMCAqIHNpemVvZihtaWIyX3VkcDZFbnRyeV90KSwgKHZvaWQgKikgLTEsIDAsIDMwLAogICAgICAwLCAwfSwKICNlbmRpZgorI2lmZGVmIE1JQjJfU0NUUAorICAgIHtNSUJfU0NUUCwgc2l6ZW9mKG1pYjJfc2N0cF90KSwgKHZvaWQgKiktMSwgMCwgNjAsIDAsIDB9LAorICAgIHtNSUJfU0NUUF9DT05OLCBzaXplb2YobWliMl9zY3RwQ29ubkVudHJ5X3QpLCAodm9pZCAqKS0xLCAwLCA2MCwgMCwgMH0sCisgICAge01JQl9TQ1RQX0NPTk5fTE9DQUwsIHNpemVvZihtaWIyX3NjdHBDb25uTG9jYWxFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwKKyAgICAgNjAsIDAsIDB9LAorICAgIHtNSUJfU0NUUF9DT05OX1JFTU9URSwgc2l6ZW9mKG1pYjJfc2N0cENvbm5SZW1vdGVFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwKKyAgICAgNjAsIDAsIDB9LAorI2VuZGlmCiAgICAgezB9LAogfTsKIApAQCAtMTMxLDEwICsxNDksMjIgQEAKICAgICB7TUlCMl9UUkFOU01JU1NJT04sIDAsfSwKICAgICB7TUlCMl9TTk1QLCAwLH0sCiAjaWZkZWYgU09MQVJJU19IQVZFX0lQVjZfTUlCX1NVUFBPUlQKKyNpZmRlZiBTT0xBUklTX0hBVkVfUkZDNDI5M19TVVBQT1JUCisgICAge01JQjJfSVAsIE1JQjJfSVBfVFJBRkZJQ19TVEFUU30sCisjZW5kaWYKKyAgICB7TUlCMl9JUDYsIDB9LAogICAgIHtNSUIyX0lQNiwgTUlCMl9JUDZfQUREUn0sCisgICAge01JQjJfSVA2LCBNSUIyX0lQNl9ST1VURX0sCisgICAge01JQjJfSUNNUDYsIDB9LAogICAgIHtNSUIyX1RDUDYsIE1JQjJfVENQNl9DT05OfSwKICAgICB7TUlCMl9VRFA2LCBNSUIyX1VEUDZfRU5UUll9LAogI2VuZGlmCisjaWZkZWYgTUlCMl9TQ1RQCisgICAge01JQjJfU0NUUCwgMH0sCisgICAge01JQjJfU0NUUCwgTUlCMl9TQ1RQX0NPTk59LAorICAgIHtNSUIyX1NDVFAsIE1JQjJfU0NUUF9DT05OX0xPQ0FMfSwKKyAgICB7TUlCMl9TQ1RQLCBNSUIyX1NDVFBfQ09OTl9SRU1PVEV9LAorI2VuZGlmCiAgICAgezB9LAogfTsKIApAQCAtMTQ5LDcgKzE3OSw3IEBACiAgICAgICAgICB2b2lkICpyZXNwLCBpbnQgKCpjb21wKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKIHN0YXRpYyBpbnQKLWdldG1pYihpbnQgZ3JvdXBuYW1lLCBpbnQgc3ViZ3JvdXBuYW1lLCB2b2lkICpzdGF0YnVmLCBzaXplX3Qgc2l6ZSwKK2dldG1pYihpbnQgZ3JvdXBuYW1lLCBpbnQgc3ViZ3JvdXBuYW1lLCB2b2lkICoqc3RhdGJ1Ziwgc2l6ZV90ICpzaXplLAogICAgICAgIHNpemVfdCBlbnRyeXNpemUsIHJlcV9lIHJlcV90eXBlLCB2b2lkICpyZXNwLCBzaXplX3QgKmxlbmd0aCwKICAgICAgICBpbnQgKCpjb21wKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKQEAgLTIxNCw3ICsyNDQsNyBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IE1JQkNBQ0hFX1NJWkU7IGkrKykgewogCURFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgImNhY2hlWyVkXSB0aW1lICVsZCB0dGwgJWRcbiIsIGksCi0JCSAgICBNaWJjYWNoZVtpXS5jYWNoZV90aW1lLCBNaWJjYWNoZVtpXS5jYWNoZV90dGwpKTsKKwkJICAgIE1pYmNhY2hlW2ldLmNhY2hlX3RpbWUsIChpbnQpTWliY2FjaGVbaV0uY2FjaGVfdHRsKSk7CiAJaWYgKE1pYmNhY2hlW2ldLmNhY2hlX3RpbWUgPCBwZXJpb2QpIHsKIAkgICAgTWliY2FjaGVbaV0uY2FjaGVfdGltZSA9IDA7CiAJfSBlbHNlIHsKQEAgLTM0OCw3ICszNzgsOCBAQAogICAgIGtzdGF0X2N0bF90ICAgICprc2M7CiAgICAga3N0YXRfdCAgICAgICAgKmtzLCAqa3N0YXRfZGF0YTsKICAgICBrc3RhdF9uYW1lZF90ICAqZDsKLSAgICBzaXplX3QgICAgICAgICAgaSwgaW5zdGFuY2U7CisgICAgdWludF90ICAgICAgICAgIGk7CisgICAgaW50ICAgICAgICAgICAgIGluc3RhbmNlID0gMDsKICAgICBjaGFyICAgICAgICAgICAgbW9kdWxlX25hbWVbNjRdOwogICAgIGludCAgICAgICAgICAgICByZXQ7CiAgICAgdV9sb25nbG9uZ190ICAgIHZhbDsgICAgLyogVGhlIGxhcmdlc3QgdmFsdWUgKi8KQEAgLTQ1NSwxMSArNDg2LDExIEBACiAJCWJyZWFrOwogCSAgICBjYXNlIEtTVEFUX0RBVEFfSU5UNjQ6CiAJCSooaW50NjRfdCAqKXYgPSBkLT52YWx1ZS5pNjQ7Ci0JCURFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgInZhbHVlOiAlbGRcbiIsIGQtPnZhbHVlLmk2NCkpOworCQlERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICJ2YWx1ZTogJWxkXG4iLCAobG9uZylkLT52YWx1ZS5pNjQpKTsKIAkJYnJlYWs7CiAJICAgIGNhc2UgS1NUQVRfREFUQV9VSU5UNjQ6CiAJCSoodWludDY0X3QgKil2ID0gZC0+dmFsdWUudWk2NDsKLQkJREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAidmFsdWU6ICVsdVxuIiwgZC0+dmFsdWUudWk2NCkpOworCQlERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICJ2YWx1ZTogJWx1XG4iLCAodW5zaWduZWQgbG9uZylkLT52YWx1ZS51aTY0KSk7CiAJCWJyZWFrOwogI2Vsc2UKIAkgICAgY2FzZSBLU1RBVF9EQVRBX0xPTkc6CkBAIC01MTIsNyArNTQzLDcgQEAKICAgICBrc3RhdF9jdGxfdCAgICAqa3NjOwogICAgIGtzdGF0X3QgICAgICAgICprcywgKmtzdGF0X2RhdGE7CiAgICAga3N0YXRfbmFtZWRfdCAgKmQ7Ci0gICAgc2l6ZV90ICAgICAgICAgIGksIGluc3RhbmNlOworICAgIHNpemVfdCAgICAgICAgICBpLCBpbnN0YW5jZSA9IDA7CiAgICAgY2hhciAgICAgICAgICAgIG1vZHVsZV9uYW1lWzY0XTsKICAgICBpbnQgICAgICAgICAgICAgcmV0OwogCkBAIC02MzcsNyArNjY4LDcgQEAKICAgICAgKi8KIAogICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgImdldE1pYnN0YXQgKCVkLCAqLCAlZCwgJWQsICosICopXG4iLAotCQlncmlkLCBlbnRyeXNpemUsIHJlcV90eXBlKSk7CisJCWdyaWQsIChpbnQpZW50cnlzaXplLCByZXFfdHlwZSkpOwogICAgIGNhY2hlcCA9ICZNaWJjYWNoZVtncmlkXTsKICAgICBtaWJnciA9IE1pYm1hcFtncmlkXS5ncm91cDsKICAgICBtaWJ0YiA9IE1pYm1hcFtncmlkXS50YWJsZTsKQEAgLTY1NSw3ICs2ODYsNyBAQAogICAgIGNhY2hlX3ZhbGlkID0gKGNhY2hlcC0+Y2FjaGVfdGltZSA+IDApOwogCiAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCIuLi4gY2FjaGVfdmFsaWQgJWQgdGltZSAlbGQgdHRsICVkIG5vdyAlbGRcbiIsCi0JCWNhY2hlX3ZhbGlkLCBjYWNoZXAtPmNhY2hlX3RpbWUsIGNhY2hlcC0+Y2FjaGVfdHRsLAorCQljYWNoZV92YWxpZCwgY2FjaGVwLT5jYWNoZV90aW1lLCAoaW50KWNhY2hlcC0+Y2FjaGVfdHRsLAogCQl0aW1lKE5VTEwpKSk7CiAgICAgaWYgKGNhY2hlX3ZhbGlkKSB7CiAJLyoKQEAgLTY5OCw4ICs3MjksOCBAQAogCQkgICAgICAgY2FjaGVwLT5jYWNoZV9zaXplLCByZXFfdHlwZSwKIAkJICAgICAgIChtaWIyX2lmRW50cnlfdCAqKSAmIGVwLCAmbGVuZ3RoLCBjb21wLCBhcmcpOwogCX0gZWxzZSB7Ci0JICAgIHJjID0gZ2V0bWliKG1pYmdyLCBtaWJ0YiwgY2FjaGVwLT5jYWNoZV9hZGRyLAotCQkJY2FjaGVwLT5jYWNoZV9zaXplLCBlbnRyeXNpemUsIHJlcV90eXBlLCAmZXAsCisJICAgIHJjID0gZ2V0bWliKG1pYmdyLCBtaWJ0YiwgJihjYWNoZXAtPmNhY2hlX2FkZHIpLAorCQkJJihjYWNoZXAtPmNhY2hlX3NpemUpLCBlbnRyeXNpemUsIHJlcV90eXBlLCAmZXAsCiAJCQkmbGVuZ3RoLCBjb21wLCBhcmcpOwogCX0KIApAQCAtNzYyLDcgKzc5Myw3IEBACiAgICAgICAgICAqLwogICAgICAgICBERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsIAogICAgICAgICAgICAgImJhZCBjYWNoZSBsZW5ndGggJWQgLSBub3QgbXVsdGlwbGUgb2YgZW50cnkgc2l6ZSAlZFxuIiwgCi0gICAgICAgICAgICBsZW4sIGVudHJ5c2l6ZSkpOworICAgICAgICAgICAgKGludClsZW4sIChpbnQpZW50cnlzaXplKSk7CiAgICAgICAgIHJldHVybiBOT1RfRk9VTkQ7CiAgICAgfQogCkBAIC04NDEsNyArODcyLDcgQEAKICAqLwogCiBzdGF0aWMgaW50Ci1nZXRtaWIoaW50IGdyb3VwbmFtZSwgaW50IHN1Ymdyb3VwbmFtZSwgdm9pZCAqc3RhdGJ1Ziwgc2l6ZV90IHNpemUsCitnZXRtaWIoaW50IGdyb3VwbmFtZSwgaW50IHN1Ymdyb3VwbmFtZSwgdm9pZCAqKnN0YXRidWYsIHNpemVfdCAqc2l6ZSwKICAgICAgICBzaXplX3QgZW50cnlzaXplLCByZXFfZSByZXFfdHlwZSwgdm9pZCAqcmVzcCwKICAgICAgICBzaXplX3QgKmxlbmd0aCwgaW50ICgqY29tcCkodm9pZCAqLCB2b2lkICopLCB2b2lkICphcmcpCiB7CkBAIC04NTMsNiArODg0LDcgQEAKICAgICBzdHJ1Y3QgVF9lcnJvcl9hY2sgKnRlYSA9IChzdHJ1Y3QgVF9lcnJvcl9hY2sgKikgYnVmOwogICAgIHN0cnVjdCBvcHRoZHIgICpyZXE7CiAgICAgZm91bmRfZSAgICAgICAgIHJlc3VsdCA9IEZPVU5EOworICAgIHNpemVfdCBvbGRzaXplOwogCiAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAiLi4uLi4uIGdldG1pYiAoJWQsICVkLCAuLi4pXG4iLAogCQlncm91cG5hbWUsIHN1Ymdyb3VwbmFtZSkpOwpAQCAtOTY2LDIzICs5OTgsNDIgQEAKIAkgKiByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGdldG1zZyBjYWxscwogCSAqLwogCi0Jc3RyYnVmLmJ1ZiA9IHN0YXRidWY7Ci0Jc3RyYnVmLm1heGxlbiA9IHNpemU7CisJc3RyYnVmLmJ1ZiA9ICpzdGF0YnVmOworCXN0cmJ1Zi5tYXhsZW4gPSAqc2l6ZTsKIAlzdHJidWYubGVuID0gMDsKIAlmbGFncyA9IDA7CiAJZG8gewogCSAgICByYyA9IGdldG1zZyhzZCwgTlVMTCwgJnN0cmJ1ZiwgJmZsYWdzKTsKIAkgICAgc3dpdGNoIChyYykgewogCSAgICBjYXNlIC0xOgotCQlyYyA9IC1FTk9TUjsKKwkJcmV0ID0gLUVOT1NSOworCQlzbm1wX3BlcnJvcigiZ2V0bXNnIik7CiAJCWdvdG8gUmV0dXJuOwogCiAJICAgIGRlZmF1bHQ6Ci0JCXJjID0gLUVOT0RBVEE7CisJCXNubXBfbG9nKExPR19FUlIsICJrZXJuZWxfc3Vub3M1L2dldG1pYjogZ2V0bXNnIHJldHVybmVkICVkXG4iLCByYyk7CisJCXJldCA9IC1FTk9EQVRBOwogCQlnb3RvIFJldHVybjsKIAogCSAgICBjYXNlIE1PUkVEQVRBOgorCQlERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICIuLi4uLi4gZ2V0bWliIGluY3JlYXNlZCBidWZmZXIgc2l6ZVxuIikpOworCQlvbGRzaXplID0gKCBzdHJidWYuYnVmIC0gKGNoYXIgKikqc3RhdGJ1ZikgKyBzdHJidWYubGVuOworCQlzdHJidWYuYnVmID0gKGNoYXIgKilyZWFsbG9jKCpzdGF0YnVmLCBvbGRzaXplKzQwOTYpOworCQlpZihzdHJidWYuYnVmICE9IE5VTEwpIHsKKwkJICAgICpzdGF0YnVmID0gc3RyYnVmLmJ1ZjsKKwkJICAgICpzaXplID0gb2xkc2l6ZSArIDQwOTY7CisJCSAgICBzdHJidWYuYnVmID0gKGNoYXIgKikqc3RhdGJ1ZiArIG9sZHNpemU7CisJCSAgICBzdHJidWYubWF4bGVuID0gNDA5NjsKKwkJICAgIHJlc3VsdCA9IE5PVF9GT1VORDsKKwkJICAgIGJyZWFrOworCQl9CisJCXN0cmJ1Zi5idWYgPSAoY2hhciAqKSpzdGF0YnVmICsgKG9sZHNpemUgLSBzdHJidWYubGVuKTsKIAkgICAgY2FzZSAwOgorCQkvKiBmaXggYnVmZmVyIHRvIHJlYWwgc2l6ZSAmIHBvc2l0aW9uICovCisJCXN0cmJ1Zi5sZW4gKz0gc3RyYnVmLmJ1ZiAtIChjaGFyKikqc3RhdGJ1ZjsKKwkJc3RyYnVmLmJ1ZiA9ICpzdGF0YnVmOworCQlzdHJidWYubWF4bGVuID0gKnNpemU7CisKIAkJaWYgKHJlcV90eXBlID09IEdFVF9ORVhUICYmIHJlc3VsdCA9PSBORUVEX05FWFQpCiAJCSAgICAvKgogCQkgICAgICogRW5kIG9mIGJ1ZmZlciwgc28gIm5leHQiIGlzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBuZXh0CkBAIC05OTYsNiArMTA0Nyw4IEBACiAJICAgIH0KIAl9IHdoaWxlIChyYyA9PSBNT1JFREFUQSAmJiByZXN1bHQgIT0gRk9VTkQpOwogCisJREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAiLi4uLi4uIGdldG1pYiBidWZmZXIgc2l6ZSBpcyAlZFxuIiwgKGludCkqc2l6ZSkpOworCiAJaWYgKHJlc3VsdCA9PSBGT1VORCkgeyAgICAgIC8qIFNlYXJjaCBpcyBzdWNjZXNzZnVsICovCiAJICAgIGlmIChyYyAhPSBNT1JFREFUQSkgewogCQlyZXQgPSAwOyAgICAvKiBGb3VuZCBhbmQgbm8gbW9yZSBkYXRhICovCkBAIC0xMTM1LDcgKzExODgsNyBAQAogICAgICAgICByZXR1cm4gKGVycnAtPmRsX2Vycm5vKTsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczU6ZGxwaSIsICJnb3QgdHlwZTogJXhcbiIsIGRscC0+ZGxfcHJpbWl0aXZlKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1OmRscGkiLCAiZ290IHR5cGU6ICV4XG4iLCAodW5zaWduZWQpZGxwLT5kbF9wcmltaXRpdmUpKTsKICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgfQogfQpAQCAtMTE4MSw3ICsxMjM0LDcgQEAKICAgICAgICAgICAgIHJldHVybiAoLTEpOyAKIAogICAgICAgICBERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNTpkbHBpIiwgImRsX21hY190eXBlOiAleFxuIiwKLQkgICAgICAgICAgIGluZm8tPmRsX21hY190eXBlKSk7CisJICAgICAgICAgICAodW5zaWduZWQpaW5mby0+ZGxfbWFjX3R5cGUpKTsKIAlzd2l0Y2ggKGluZm8tPmRsX21hY190eXBlKSB7CiAJY2FzZSBETF9DU01BQ0Q6CiAJY2FzZSBETF9FVEhFUjoKQEAgLTEyNDYsMTUgKzEyOTksMTUgQEAKICAgICAgICAgZGxfZXJyb3JfYWNrX3QgKmVycnAgPSAoZGxfZXJyb3JfYWNrX3QgKilidWY7CiAKICAgICAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczU6ZGxwaSIsCi0gICAgICAgICAgICAgICAgICAgICJnb3QgRExfRVJST1JfQUNLOiBkbHBpICVkLCBlcnJvciAlZFxuIiwgZXJycC0+ZGxfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgIGVycnAtPmRsX3VuaXhfZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgICAgImdvdCBETF9FUlJPUl9BQ0s6IGRscGkgJWxkLCBlcnJvciAlbGRcbiIsCisJCSAgICAobG9uZyllcnJwLT5kbF9lcnJubywgKGxvbmcpZXJycC0+ZGxfdW5peF9lcnJubykpOwogCiAgICAgICAgIGlmIChjdGxidWYubGVuIDwgRExfRVJST1JfQUNLX1NJWkUpCiAgICAgICAgICAgICByZXR1cm4gKC0xKTsKICAgICAgICAgcmV0dXJuIChlcnJwLT5kbF9lcnJubyk7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1OmRscGkiLCAiZ290IHR5cGUgJXhcbiIsIGRscC0+ZGxfcHJpbWl0aXZlKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1OmRscGkiLCAiZ290IHR5cGUgJXhcbiIsICh1bnNpZ25lZClkbHAtPmRsX3ByaW1pdGl2ZSkpOwogICAgICAgICByZXR1cm4gKC0xKTsKICAgICB9CiB9CkBAIC0xMjk3LDcgKzEzNTAsNyBAQAogICAgIGludCBtID0gMTsKICAgICBpbnQgaSA9IHN0cmxlbihkZXZuYW1lKSAtIDE7CiAKLSAgICB3aGlsZSAoaSA+PSAwICYmIGlzZGlnaXQoZGV2bmFtZVtpXSkpIHsKKyAgICB3aGlsZSAoaSA+PSAwICYmIGlzZGlnaXQoZGV2bmFtZVtpXSAmIDB4RkYpKSB7CiAgICAgICAgIHBwYSArPSBtICogKGRldm5hbWVbaV0gLSAnMCcpOyAKICAgICAgICAgbSAqPSAxMDsKICAgICAgICAgaS0tOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oIGIvYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oCmluZGV4IGNkZDIzNzUuLmJmMzM3YWUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaAorKysgYi9hZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgKQEAgLTcxLDEwICs3MSwyMiBAQAogICAgIE1JQl9UUkFOU01JU1NJT04gPSAxNCwKICAgICBNSUJfU05NUCA9IDE1LAogI2lmZGVmIFNPTEFSSVNfSEFWRV9JUFY2X01JQl9TVVBQT1JUCi0gICAgTUlCX0lQNl9BRERSID0gMTYsCisjaWZkZWYgU09MQVJJU19IQVZFX1JGQzQyOTNfU1VQUE9SVAorICAgIE1JQl9JUF9UUkFGRklDX1NUQVRTLAorI2VuZGlmCisgICAgTUlCX0lQNiwKKyAgICBNSUJfSVA2X0FERFIsCisgICAgTUlCX0lQNl9ST1VURSwKKyAgICBNSUJfSUNNUDYsCiAgICAgTUlCX1RDUDZfQ09OTiwKICAgICBNSUJfVURQNl9FTkRQT0lOVCwKICNlbmRpZgorI2lmZGVmIE1JQjJfU0NUUAorICAgIE1JQl9TQ1RQLAorICAgIE1JQl9TQ1RQX0NPTk4sCisgICAgTUlCX1NDVFBfQ09OTl9MT0NBTCwKKyAgICBNSUJfU0NUUF9DT05OX1JFTU9URSwKKyNlbmRpZgogICAgIE1JQkNBQ0hFX1NJWkUJCiB9IG1pYmdyb3VwX2U7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJLmggYi9hZ2VudC9taWJncm91cC9taWJJSS5oCmluZGV4IGJiMGEyZDMuLjM1Y2I1NDQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkuaApAQCAtNCw3ICs0LDcgQEAKIAogY29uZmlnX3JlcXVpcmUobWliSUkvc3lzdGVtX21pYikKIGNvbmZpZ19yZXF1aXJlKG1pYklJL3N5c09SVGFibGUpCi1jb25maWdfcmVxdWlyZShtaWJJSS9zbm1wX21pYikKK2NvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKG1pYklJL3NubXBfbWliLCA1LjUsIG1pYklJL3NubXBfbWliXzVfNSkpCiBjb25maWdfcmVxdWlyZShtaWJJSS92YWNtX3ZhcnMpCiBjb25maWdfcmVxdWlyZShtaWJJSS9zZXRTZXJpYWxObykKICNpZiAhZGVmaW5lZChjeWd3aW4pIHx8IGRlZmluZWQoSEFWRV9JUEhMUEFQSV9IKQpAQCAtMTcsNyArMTcsNyBAQAogI2VuZGlmCiAKIC8qIG1pYklJL2lwdjYgaXMgYWN0aXZhdGVkIHZpYSAtLWVuYWJsZS1pcHY2IGFuZCBvbmx5IGJ1aWxkcyBvbiBMaW51eCsqQlNEICovCi0jaWYgZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KSAmJiAoZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChmcmVlYnNkMykgfHwgZGVmaW5lZChuZXRic2QxKSB8fCBkZWZpbmVkKG9wZW5ic2QpKQorI2lmIGRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikgJiYgKGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoZnJlZWJzZDMpIHx8IGRlZmluZWQobmV0YnNkMSkgfHwgZGVmaW5lZChvcGVuYnNkNCkpIAogY29uZmlnX3JlcXVpcmUobWliSUkvaXB2NikKICNlbmRpZgogCkBAIC0yNyw4ICsyNywyNSBAQAogCiAvKgogICogdGhlc2UgbmV3IG1vZHVsZSByZS1yZXdyaXRlcyBoYXZlIG9ubHkgYmVlbiBpbXBsZW1lbnRlZCBmb3IKLSAqIGxpbnV4LgorICogTGludXggYW5kICpCU0QuCiAgKi8KLSNpZiBkZWZpbmVkKCBsaW51eCApCisjaWYgZGVmaW5lZChsaW51eCkKIGNvbmZpZ19yZXF1aXJlKGlwLW1pYiBpcC1mb3J3YXJkLW1pYiB0Y3AtbWliIHVkcC1taWIpCisjZWxpZiBkZWZpbmVkKGRyYWdvbmZseSkgfHwgZGVmaW5lZChmcmVlYnNkNykgfHwgXAorICAgIGRlZmluZWQobmV0YnNkNSkgfHwgZGVmaW5lZChvcGVuYnNkNCkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYiBpcC1mb3J3YXJkLW1pYiB0Y3AtbWliIHVkcC1taWIpCisjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQorY29uZmlnX3JlcXVpcmUodGNwLW1pYiB1ZHAtbWliKQorI2VsaWYgZGVmaW5lZChmcmVlYnNkNCkKK2NvbmZpZ19yZXF1aXJlKHRjcC1taWIgdWRwLW1pYikKKyNlbGlmIGRlZmluZWQobmV0YnNkMSkKK2NvbmZpZ19yZXF1aXJlKHRjcC1taWIgdWRwLW1pYikKKyNlbmRpZgorCisvKgorICogRm9yIFNvbGFyaXMsIGVuYWJsZSBhZGRpdGlvbmFsIHRhYmxlcyB3aGVuIGl0IGhhcyBleHRlbmRlZCBNSUIgc3VwcG9ydC4KKyAqLworI2lmIGRlZmluZWQoIHNvbGFyaXMyICkgJiYgZGVmaW5lZCggSEFWRV9NSUIyX0lQSUZTVEFUU0VOVFJZX1QgKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZSBpcC1taWIvaXBBZGRyZXNzVGFibGUpCitjb25maWdfcmVxdWlyZShpcC1mb3J3YXJkLW1pYikKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2F0LmMKaW5kZXggNDVhYjUxNi4uZjU3YmEyYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9hdC5jCkBAIC0yNSwxNyArMjUsMTMgQEAKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKLSNpZiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQogI2RlZmluZSBfS0VSTkVMIDEKICNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC04OSw5ICs4NSw2IEBACiAjaWZkZWYgc29sYXJpczIKICNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaWZkZWYgaHB1eDExCiAjaW5jbHVkZSA8c3lzL21pYi5oPgpAQCAtMTQ2LDkgKzEzOSwxMiBAQAogICogaW5mb3JtYXRpb24gYXQgCiAgKi8KIHN0cnVjdCB2YXJpYWJsZTEgYXRfdmFyaWFibGVzW10gPSB7Ci0gICAge0FUSUZJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYXRFbnRyeSwgMSwgezF9fSwKLSAgICB7QVRQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9hdEVudHJ5LCAxLCB7Mn19LAotICAgIHtBVE5FVEFERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfYXRFbnRyeSwgMSwgezN9fQorICAgIHtBVElGSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHsxfX0sCisgICAge0FUUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezJ9fSwKKyAgICB7QVRORVRBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHszfX0KIH07CiAKIC8qCkBAIC0zMDQsNyArMzAwLDcgQEAKIAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBsb3dlc3QsIG9pZF9sZW5ndGggKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IG9pZF9sZW5ndGg7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgSVBNRURJQUlGSU5ERVg6ICAgICAgIC8qIGFsc28gQVRJRklOREVYICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mIGxvbmdfcmV0dXJuOwpAQCAtMzU3LDcgKzM1Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcC0+aXBOZXRUb01lZGlhSWZJbmRleC5vX2xlbmd0aCk7CiAjZW5kaWYKICAgICBERUJVR01TR1RMKCgibWliSUkvYXQiLCAiLi4uLi4uLi4uIEFUX0NtcCAlbHg8PiVseCAlZDw+JWQgKCUuNXMpXG4iLAotICAgICAgICAgICAgICAgIG1wLT5pcE5ldFRvTWVkaWFOZXRBZGRyZXNzLCAoKGlmX2lwX3QgKikgYWRkciktPmlwQWRkciwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyltcC0+aXBOZXRUb01lZGlhTmV0QWRkcmVzcywKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykoKGlmX2lwX3QgKikgYWRkciktPmlwQWRkciwKICAgICAgICAgICAgICAgICAoKGlmX2lwX3QgKikgYWRkciktPmlmSWR4LCBpbmRleCwKICAgICAgICAgICAgICAgICBtcC0+aXBOZXRUb01lZGlhSWZJbmRleC5vX2J5dGVzKSk7CiAgICAgaWYgKG1wLT5pcE5ldFRvTWVkaWFOZXRBZGRyZXNzICE9ICgoaWZfaXBfdCAqKSBhZGRyKS0+aXBBZGRyKQpAQCAtMzkzLDcgKzM5MCw3IEBACiAgICAgc3RhdGljIG1pYjJfaXBOZXRUb01lZGlhRW50cnlfdCBMb3dlbnRyeTsKICAgICBpbnQgICAgICAgICAgICAgRm91bmQgPSAwOwogICAgIHJlcV9lICAgICAgICAgICByZXFfdHlwZTsKLSAgICBpbnQgICAgICAgICAgICAgb2Zmc2V0LCBvbGVuZ3RoOworICAgIGludCAgICAgICAgICAgICBvZmZzZXQsIG9sZW5ndGggPSAwOwogICAgIHN0YXRpYyBpbl9hZGRyX3QgICAgICBhZGRyX3JldDsKIAogICAgIC8qCkBAIC01MTAsNyArNTA3LDcgQEAKIHN0YXRpYyBjaGFyICAgICpsaW0sICpydG5leHQ7CiBzdGF0aWMgY2hhciAgICAqYXQgPSAwOwogI2Vsc2UKLSNpZmRlZiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQKKyNpZmRlZiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUCiBzdGF0aWMgc3RydWN0IGFycGhkICphdCA9IDA7CiBzdGF0aWMgc3RydWN0IGFycHRhYiAqYXRfcHRyLCBhdF9lbnRyeTsKIHN0YXRpYyBzdHJ1Y3QgYXJwY29tIGF0X2NvbTsKQEAgLTUyOCw3ICs1MjUsNiBAQAogICovCiAjZGVmaW5lIEFSUF9DQUNIRV9JTkNSIDEwMjQKIHN0YXRpYyBzdHJ1Y3QgYXJwdGFiICphdCA9IE5VTEw7Ci1zdGF0aWMgaW50ICAgICAgYXJwdGFiX2N1cnJfbWF4X3NpemUgPSAwOwogCiAjZW5kaWYKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAqLwpAQCAtNTgzLDcgKzU3OSw3IEBACiAjaWZkZWYgQVJQVEFCX1NJWkVfU1lNQk9MCiAgICAgICAgIGF1dG9fbmxpc3QoQVJQVEFCX1NJWkVfU1lNQk9MLCAoY2hhciAqKSAmYXJwdGFiX3NpemUsCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIGFycHRhYl9zaXplKTsKLSNpZmRlZiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQKKyNpZmRlZiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUCiAgICAgICAgIGF0ID0gKHN0cnVjdCBhcnBoZCAqKSBtYWxsb2MoYXJwdGFiX3NpemUgKiBzaXplb2Yoc3RydWN0IGFycGhkKSk7CiAjZWxzZQogICAgICAgICBhdCA9IChzdHJ1Y3QgYXJwdGFiICopIG1hbGxvYyhhcnB0YWJfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYXJwdGFiKSk7CkBAIC01OTIsNyArNTg4LDcgQEAKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgfQotI2lmZGVmIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVAorI2lmZGVmIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQKICAgICBhdXRvX25saXN0KEFSUFRBQl9TWU1CT0wsIChjaGFyICopIGF0LAogICAgICAgICAgICAgICAgYXJwdGFiX3NpemUgKiBzaXplb2Yoc3RydWN0IGFycGhkKSk7CiAgICAgYXRfcHRyID0gYXRbMF0uYXRfbmV4dDsKQEAgLTYzNCw4ICs2MzAsMTAgQEAKIAogICAgIGkgPSAwOwogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgeworICAgICAgICBzdGF0aWMgaW50ICAgICAgYXJwdGFiX2N1cnJfbWF4X3NpemU7CiAgICAgICAgIHVfbG9uZyAgICAgICAgICB0bXBfYTsKLSAgICAgICAgaW50ICAgICAgICAgICAgIHRtcF9mbGFnczsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHRtcF9mbGFnczsKKwogICAgICAgICBpZiAoaSA+PSBhcnB0YWJfY3Vycl9tYXhfc2l6ZSkgewogICAgICAgICAgICAgc3RydWN0IGFycHRhYiAgKm5ld3RhYiA9IChzdHJ1Y3QgYXJwdGFiICopCiAgICAgICAgICAgICAgICAgcmVhbGxvYyhhdCwgKHNpemVvZihzdHJ1Y3QgYXJwdGFiKSAqCkBAIC03NzksNyArNzc3LDcgQEAKICAgICByZWdpc3RlciBzdHJ1Y3QgYXJwdGFiICphdGFiOwogCiAgICAgd2hpbGUgKGFycHRhYl9jdXJyZW50IDwgYXJwdGFiX3NpemUpIHsKLSNpZmRlZiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQKKyNpZmRlZiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoZSBhcnAgdGFibGUgaXMgYW4gYXJyYXkgb2YgbGlua2VkIGxpc3RzIG9mIGFycHRhYiBlbnRyaWVzLgogICAgICAgICAgKiBVbnVzZWQgc2xvdHMgaGF2ZSBwb2ludGVycyBiYWNrIHRvIHRoZSBhcnJheSBlbnRyeSBpdHNlbGYgCkBAIC04MDgsOSArODA2LDkgQEAKICAgICAgICAgYXRfcHRyID0gYXRfZW50cnkuYXRfbmV4dDsKICAgICAgICAgYXRhYiA9ICZhdF9lbnRyeTsKICAgICAgICAgKmlmSW5kZXggPSBhdF9jb20uYWNfaWYuaWZfaW5kZXg7ICAgICAgIC8qIG5vdCBzdHJpY3RseSBBUlBIRCAqLwotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQgKi8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVCAqLwogICAgICAgICBhdGFiID0gJmF0W2FycHRhYl9jdXJyZW50KytdOwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVCAqLwogICAgICAgICBpZiAoIShhdGFiLT5hdF9mbGFncyAmIEFURl9DT00pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICppZlR5cGUgPSAoYXRhYi0+YXRfZmxhZ3MgJiBBVEZfUEVSTSkgPyA0IDogMzsKQEAgLTg1OSw3ICs4NTcsNyBAQAogfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2xhcmlzMiAqLwogCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyIGN5Z3dpbiAqLworI2VsaWYgZGVmaW5lZChIQVZFX0lQSExQQVBJX0gpICAvKiBXSU4zMiBjeWd3aW4gKi8KICNpbmNsdWRlIDxpcGhscGFwaS5oPgogCiBleHRlcm4gV3JpdGVNZXRob2Qgd3JpdGVfYXJwOwpAQCAtODkzLDYgKzg5MSw3IEBACiAgICAgRFdPUkQgICAgICAgICAgIHN0YXR1cyA9IE5PX0VSUk9SOwogICAgIERXT1JEICAgICAgICAgICBkd0FjdHVhbFNpemUgPSAwOwogICAgIFVJTlQgICAgICAgICAgICBpOworICAgIGludCAgICAgICAgICAgICBqOwogICAgIHVfY2hhciAgICAgICAgICBkZXN0X2FkZHJbNF07CiAgICAgdm9pZCAgICAgICAgICAgKnJlc3VsdCA9IE5VTEw7CiAgICAgc3RhdGljIGluX2FkZHJfdAlhZGRyX3JldDsKQEAgLTkxNiw2ICs5MTUsNyBAQAogICAgICAgICAgICAgc3RhdHVzID0gR2V0SXBOZXRUYWJsZShwSXBOZXRUYWJsZSwgJmR3QWN0dWFsU2l6ZSwgVFJVRSk7CiAgICAgfQogCisgICAgaSA9IC0xOwogCiAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcElwTmV0VGFibGUtPmR3TnVtRW50cmllczsgKytpKSB7CkBAIC05NzAsMTYgKzk3MCwxNiBAQAogICAgICAgICAgICAgYXJwX3Jvdy0+ZHdJbmRleCA9IG5hbWVbMTBdOwogCiAgICAgICAgICAgICBpZiAoKmxlbmd0aCA9PSAxNSkgeyAgICAgICAgLyogaXBOZXRUb01lZGlhVGFibGUgKi8KLSAgICAgICAgICAgICAgICBpID0gMTE7CisgICAgICAgICAgICAgICAgaiA9IDExOwogICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAvKiBhdCBUYWJsZSAqLwogCi0gICAgICAgICAgICAgICAgaSA9IDEyOworICAgICAgICAgICAgICAgIGogPSAxMjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZGVzdF9hZGRyWzBdID0gKHVfY2hhcikgbmFtZVtpXTsKLSAgICAgICAgICAgIGRlc3RfYWRkclsxXSA9ICh1X2NoYXIpIG5hbWVbaSArIDFdOwotICAgICAgICAgICAgZGVzdF9hZGRyWzJdID0gKHVfY2hhcikgbmFtZVtpICsgMl07Ci0gICAgICAgICAgICBkZXN0X2FkZHJbM10gPSAodV9jaGFyKSBuYW1lW2kgKyAzXTsKKyAgICAgICAgICAgIGRlc3RfYWRkclswXSA9ICh1X2NoYXIpIG5hbWVbal07CisgICAgICAgICAgICBkZXN0X2FkZHJbMV0gPSAodV9jaGFyKSBuYW1lW2ogKyAxXTsKKyAgICAgICAgICAgIGRlc3RfYWRkclsyXSA9ICh1X2NoYXIpIG5hbWVbaiArIDJdOworICAgICAgICAgICAgZGVzdF9hZGRyWzNdID0gKHVfY2hhcikgbmFtZVtqICsgM107CiAgICAgICAgICAgICBhcnBfcm93LT5kd0FkZHIgPSAqKChEV09SRCAqKSBkZXN0X2FkZHIpOwogCiAgICAgICAgICAgICBhcnBfcm93LT5kd1R5cGUgPSA0OyAgICAgICAgLyogU3RhdGljICovCkBAIC05OTIsNiArOTkyLDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbG93ZXN0LCBvaWRfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSBvaWRfbGVuZ3RoOwogICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9hcnA7CisgICAgbmV0c25tcF9hc3NlcnQoMCA8PSBpICYmIGkgPCBwSXBOZXRUYWJsZS0+ZHdOdW1FbnRyaWVzKTsKICAgICAqYXJwX3JvdyA9IHBJcE5ldFRhYmxlLT50YWJsZVtpXTsKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMKaW5kZXggYzgwZjBlZS4uYmU4MDNlZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiAgSUNNUCBNSUIgZ3JvdXAgaW1wbGVtZW50YXRpb24gLSBpY21wLmMKLSAqCiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgpAQCAtOSw2ICs4LDEzIEBACiAjaWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSAogI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgogI2VuZGlmCisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisjaWYgSEFWRV9ORVRJTkVUX0lDTVA2X0gKKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+CisjZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisKICNpZiBIQVZFX05FVElORVRfSUNNUF9WQVJfSAogI2luY2x1ZGUgPG5ldGluZXQvaWNtcF92YXIuaD4KICNlbmRpZgpAQCAtMTksMTAgKzI1LDEwIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCIKICNpbmNsdWRlICJpY21wLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgogCiAjaWZuZGVmIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUCiAjZGVmaW5lIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUCTUKQEAgLTMxLDcgKzM3LDE4IEBACiAjZGVmaW5lIElDTVBfU1RBVFNfQ0FDSEVfVElNRU9VVAlNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfTElCUEVSRlNUQVRfSCkgJiYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpKSAmJiAhZGVmaW5lZChGSVJTVF9QUk9UT0NPTCkKKy8qIHJlZGVmaW5lIElDTVA2IG1lc3NhZ2UgdHlwZXMgZnJvbSBnbGliYyA8IDIuNCB0byBuZXdlciBuYW1lcyAqLworI2lmbmRlZiBNTERfTElTVEVORVJfUVVFUlkKKyNkZWZpbmUgTUxEX0xJU1RFTkVSX1FVRVJZIElDTVA2X01FTUJFUlNISVBfUVVFUlkKKyNkZWZpbmUgTUxEX0xJU1RFTkVSX1JFUE9SVCBJQ01QNl9NRU1CRVJTSElQX1JFUE9SVAorI2RlZmluZSBNTERfTElTVEVORVJfUkVEVUNUSU9OIElDTVA2X01FTUJFUlNISVBfUkVEVUNUSU9OCisjZW5kaWYgLyogSUNNUDZfTUVNQkVSU0hJUF9RVUVSWSAqLworCisKKyNpZiBkZWZpbmVkKEhBVkVfTElCUEVSRlNUQVRfSCkgJiYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpICYmICFkZWZpbmVkKEZJUlNUX1BST1RPQ09MKQorI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2lmZGVmIEZJUlNUX1BST1RPQ09MCiBwZXJmc3RhdF9wcm90b2NvbF90IHBzX3Byb3RvOwpAQCAtNTQsNDAgKzcxLDY2NSBAQAogCSAqKioqKioqKioqKioqKioqKioqKiovCiAKIAorI2lmZGVmIGhwdXgxMQorI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCWludAorI2VuZGlmCisKKyNpZmRlZiBsaW51eAorI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCXN0cnVjdCBpY21wX21pYgorI2RlZmluZSBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKKyN1bmRlZiBJQ01QU1RBVF9TWU1CT0wKKyNlbmRpZgorCisjaWZkZWYgc29sYXJpczIKKyNkZWZpbmUgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCisjZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJbWliMl9pY21wX3QKKyNpbmNsdWRlICJrZXJuZWxfbWliLmgiCitzdGF0aWMgaW50Citzb2xhcmlzX3JlYWRfaWNtcF9zdGF0KElDTVBfU1RBVF9TVFJVQ1RVUkUgKik7CitzdGF0aWMgaW50Citzb2xhcmlzX3JlYWRfaWNtcF9tc2dfc3RhdChJQ01QX1NUQVRfU1RSVUNUVVJFICosIHN0cnVjdCBpY21wNF9tc2dfbWliICosIGludCAqKTsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CitzdGF0aWMgaW50Citzb2xhcmlzX3JlYWRfaWNtcDZfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICopOworc3RhdGljIGludAorc29sYXJpc19yZWFkX2ljbXA2X21zZ19zdGF0KHN0cnVjdCBpY21wNl9taWIgKiwgc3RydWN0IGljbXA2X21zZ19taWIgKiwgaW50ICopOworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMCisjZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUgICAgIHN0cnVjdCBpY21wX21pYgorI2RlZmluZSBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKKyN1bmRlZiBJQ01QX05TVEFUUworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0lQSExQQVBJX0gKKyNpbmNsdWRlIDxpcGhscGFwaS5oPgorI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFIE1JQl9JQ01QCisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpICYmIGRlZmluZWQoSUNNUENUTF9TVEFUUykpCisjZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJc3RydWN0IGljbXBfbWliCisjZGVmaW5lIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAorI3VuZGVmIElDTVBTVEFUX1NZTUJPTAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19JQ01QSVBTVEFUU19ICisvKiBvciAjaWZkZWYJCUhBVkVfU1lTX1RDUElQU1RBVFNfSCAgPz8/ICovCisjZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJc3RydWN0IGtuYQorI2RlZmluZSBVU0VTX1RSQURJVElPTkFMX0lDTVBTVEFUCisjZW5kaWYKKworI2lmICFkZWZpbmVkKElDTVBfU1RBVF9TVFJVQ1RVUkUpCisjZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJc3RydWN0IGljbXBzdGF0CisjZGVmaW5lIFVTRVNfVFJBRElUSU9OQUxfSUNNUFNUQVQKKyNlbmRpZgorCitJQ01QX1NUQVRfU1RSVUNUVVJFIGljbXBzdGF0OworI2lmIGRlZmluZWQoc29sYXJpczIpICYmIGRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKK3N0YXRpYyBzdHJ1Y3QgaWNtcDZfbWliIGljbXA2c3RhdDsKKyNlbmRpZgorCisvKiBJZiB0aGV5IGp1c3QgYWxsIGFncmVlZCAuLi4gKi8KKworI2lmbmRlZiBJQ01QX0RFU1RfVU5SRUFDSAorI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCBJQ01QX1VOUkVBQ0gKKyNlbmRpZgorI2lmbmRlZiBJQ01QX1NPVVJDRV9RVUVOQ0gKKyNkZWZpbmUgSUNNUF9TT1VSQ0VfUVVFTkNIIElDTVBfU09VUkNFUVVFTkNICisjZW5kaWYKKyNpZm5kZWYgSUNNUF9USU1FX0VYQ0VFREVECisjZGVmaW5lIElDTVBfVElNRV9FWENFRURFRCBJQ01QX1RJTVhDRUVECisjZW5kaWYKKyNpZm5kZWYgSUNNUF9QQVJBTUVURVJQUk9CCisjZGVmaW5lIElDTVBfUEFSQU1FVEVSUFJPQiBJQ01QX1BBUkFNUFJPQgorI2VuZGlmCisjaWZuZGVmIElDTVBfVElNRVNUQU1QCisjZGVmaW5lIElDTVBfVElNRVNUQU1QIElDTVBfVFNUQU1QCisjZW5kaWYKKyNpZm5kZWYgSUNNUF9USU1FU1RBTVBSRVBMWQorI2RlZmluZSBJQ01QX1RJTUVTVEFNUFJFUExZIElDTVBfVFNUQU1QUkVQTFkKKyNlbmRpZgorI2lmbmRlZiBJQ01QX0FERFJFU1MKKyNkZWZpbmUgSUNNUF9BRERSRVNTIElDTVBfTUFTS1JFUQorI2VuZGlmCisjaWZuZGVmIElDTVBfQUREUkVTU1JFUExZCisjZGVmaW5lIElDTVBfQUREUkVTU1JFUExZIElDTVBfTUFTS1JFUExZCisjZW5kaWYKKyNpZm5kZWYgTUxEX0xJU1RFTkVSX1JFRFVDVElPTgorI2RlZmluZSBNTERfTElTVEVORVJfUkVEVUNUSU9OIE1MRF9MSVNURU5FUl9ET05FCisjZW5kaWYKIAogLyoKICAqIERlZmluZSB0aGUgT0lEIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbWliIHRyZWUgdGhhdCB3ZSdyZQogICogcmVnaXN0ZXJpbmcgdW5kZXJuZWF0aCAKICAqLwotb2lkICAgICAgICAgICAgIGljbXBfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDUgfTsKK3N0YXRpYyBjb25zdCBvaWQgaWNtcF9vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgNSB9Oworc3RhdGljIGNvbnN0IG9pZCBpY21wX3N0YXRzX3RibF9vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgNSwgMjkgfTsKK3N0YXRpYyBjb25zdCBvaWQgaWNtcF9tc2dfc3RhdHNfdGJsX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCA1LCAzMCB9OwogI2lmZGVmIFVTSU5HX01JQklJX0lQX01PRFVMRQogZXh0ZXJuIG9pZCAgICAgIGlwX21vZHVsZV9vaWRbXTsKIGV4dGVybiBpbnQgICAgICBpcF9tb2R1bGVfb2lkX2xlbjsKIGV4dGVybiBpbnQgICAgICBpcF9tb2R1bGVfY291bnQ7CiAjZW5kaWYKIAorI2lmZGVmIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAorc3RydWN0IGljbXBfc3RhdHNfdGFibGVfZW50cnkgeworCXVpbnQzMl90IGlwVmVyOworICAgICAgICB1aW50MzJfdCBpY21wU3RhdHNJbk1zZ3M7CisgICAgICAgIHVpbnQzMl90IGljbXBTdGF0c0luRXJyb3JzOworICAgICAgICB1aW50MzJfdCBpY21wU3RhdHNPdXRNc2dzOworICAgICAgICB1aW50MzJfdCBpY21wU3RhdHNPdXRFcnJvcnM7Cit9OworCitzdHJ1Y3QgaWNtcF9zdGF0c190YWJsZV9lbnRyeSBpY21wX3N0YXRzX3RhYmxlWzJdOworIAorI2RlZmluZSBJQ01QX01TR19TVEFUU19IQVNfSU4gMQorI2RlZmluZSBJQ01QX01TR19TVEFUU19IQVNfT1VUIDIKKworc3RydWN0IGljbXBfbXNnX3N0YXRzX3RhYmxlX2VudHJ5IHsKKyAgICAgICAgdWludDMyX3QgaXBWZXI7CisgICAgICAgIHVpbnQzMl90IGljbXBNc2dTdGF0c1R5cGU7CisgICAgICAgIHVpbnQzMl90IGljbXBNc2dTdGF0c0luUGt0czsKKyAgICAgICAgdWludDMyX3QgaWNtcE1zZ1N0YXRzT3V0UGt0czsKKyAgICAgICAgaW50IGZsYWdzOworfTsKKworI2lmZGVmIGxpbnV4CisvKiBMaW51eCBrZWVwcyB0cmFjayBvZiBhbGwgcG9zc2libGUgbWVzc2FnZSB0eXBlcyAqLworI2RlZmluZSBJQ01QX01TR19TVEFUU19JUFY0X0NPVU5UIDI1NgorI2Vsc2UKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfSVBWNF9DT1VOVCAxMQorI2VuZGlmCisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisjaWZkZWYgbGludXgKKy8qIExpbnV4IGtlZXBzIHRyYWNrIG9mIGFsbCBwb3NzaWJsZSBtZXNzYWdlIHR5cGVzICovCisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX0lQVjZfQ09VTlQgMjU2CisjZWxzZQorI2RlZmluZSBJQ01QX01TR19TVEFUU19JUFY2X0NPVU5UIDE0CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX0lQVjZfQ09VTlQgMAorI2VuZGlmIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KKworc3RydWN0IGljbXBfbXNnX3N0YXRzX3RhYmxlX2VudHJ5IGljbXBfbXNnX3N0YXRzX3RhYmxlW0lDTVBfTVNHX1NUQVRTX0lQVjRfQ09VTlQgKyBJQ01QX01TR19TVEFUU19JUFY2X0NPVU5UXTsKKworaW50CitpY21wX3N0YXRzX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYykKK3sKKworICAgIC8qCisgICAgICogbm90ZSBkb24ndCBib3RoZXIgdXNpbmcgdGhlIHBhc3NlZCBpbiBjYWNoZQorICAgICAqIGFuZCB2bWFnaWMgcG9pbnRlcnMuICBUaGV5IGFyZSB1c2VsZXNzIGFzIHRoZXkgCisgICAgICogY3VycmVudGx5IHBvaW50IHRvIHRoZSBpY21wIHN5c3RlbSBzdGF0cyBjYWNoZQkKKyAgICAgKiBzaW5jZSBJIHNlZSBsaXR0bGUgcG9pbnQgaW4gcmVnaXN0ZXJpbmcgYW5vdGhlcgorICAgICAqIGNhY2hlIGZvciB0aGlzIHRhYmxlLiAgSXRzIG5vdCByZWFsbHkgbmVlZGVkCisgICAgICovCisKKyAgICBpbnQgaTsKKyAgICBJQ01QX1NUQVRfU1RSVUNUVVJFIHY0aWNtcDsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgc3RydWN0IGljbXA2X21pYiB2NmljbXA7CisjZW5kaWYKKyAgICBmb3IoaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgc3dpdGNoKGkpIHsKKyAgICAgICAgY2FzZSAwOgorI2lmZGVmIGxpbnV4CisgICAgICAgICAgICBsaW51eF9yZWFkX2ljbXBfc3RhdCgmdjRpY21wKTsKKyNlbGlmIGRlZmluZWQoTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwpCisJICAgIG5ldGJzZF9yZWFkX2ljbXBfc3RhdCgmdjRpY21wKTsKKyNlbGlmIChkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpICYmIGRlZmluZWQoSUNNUENUTF9TVEFUUykpCisJICAgIHN5c2N0bF9yZWFkX2ljbXBfc3RhdCgmdjRpY21wKTsKKyNlbGlmIGRlZmluZWQoc29sYXJpczIpCisJICAgIHNvbGFyaXNfcmVhZF9pY21wX3N0YXQoJnY0aWNtcCk7CisjZWxzZQorCSAgICByZXR1cm4gLTE7CisjZW5kaWYKKyAgICAgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaWNtcFN0YXRzSW5Nc2dzID0gdjRpY21wLmljbXBJbk1zZ3M7CisgICAgICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmljbXBTdGF0c0luRXJyb3JzID0gdjRpY21wLmljbXBJbkVycm9yczsKKyAgICAgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaWNtcFN0YXRzT3V0TXNncyA9IHY0aWNtcC5pY21wT3V0TXNnczsKKyAgICAgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaWNtcFN0YXRzT3V0RXJyb3JzID0gdjRpY21wLmljbXBPdXRFcnJvcnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICAgICAgICAgIG1lbXNldCgmaWNtcF9zdGF0c190YWJsZVtpXSwwLAorICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGljbXBfc3RhdHNfdGFibGVfZW50cnkpKTsKKyNpZmRlZiBsaW51eAorICAgICAgICAgICAgbGludXhfcmVhZF9pY21wNl9zdGF0KCZ2NmljbXApOworI2VsaWYgZGVmaW5lZChORVRCU0RfU1RBVFNfVklBX1NZU0NUTCkKKwkgICAgbmV0YnNkX3JlYWRfaWNtcDZfc3RhdCgmdjZpY21wKTsKKyNlbGlmIChkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpICYmIGRlZmluZWQoSUNNUENUTF9TVEFUUykpCisJICAgIHN5c2N0bF9yZWFkX2ljbXA2X3N0YXQoJnY2aWNtcCk7CisjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQorCSAgICBzb2xhcmlzX3JlYWRfaWNtcDZfc3RhdCgmdjZpY21wKTsKKyNlbHNlCisJICAgIHJldHVybiAtMTsKKyNlbmRpZgorICAgICAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pY21wU3RhdHNJbk1zZ3MgPSB2NmljbXAuaWNtcDZJbk1zZ3M7CisgICAgICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmljbXBTdGF0c0luRXJyb3JzID0gdjZpY21wLmljbXA2SW5FcnJvcnM7CisgICAgICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmljbXBTdGF0c091dE1zZ3MgPSB2NmljbXAuaWNtcDZPdXRNc2dzOworICAgICAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pY21wU3RhdHNPdXRFcnJvcnMgPQorICAgICAgICAgICAgICAgICAgICAgICAgdjZpY21wLmljbXA2T3V0RGVzdFVucmVhY2hzICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHY2aWNtcC5pY21wNk91dFBrdFRvb0JpZ3MgKyAgdjZpY21wLmljbXA2T3V0VGltZUV4Y2RzICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHY2aWNtcC5pY21wNk91dFBhcm1Qcm9ibGVtczsKKyNlbmRpZgkvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gaSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAoraWNtcF9tc2dfc3RhdHNfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIElDTVBfU1RBVF9TVFJVQ1RVUkUgdjRpY21wOworICAgIHN0cnVjdCBpY21wNF9tc2dfbWliIHY0aWNtcG1zZzsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgc3RydWN0IGljbXA2X21pYiB2NmljbXA7CisgICAgc3RydWN0IGljbXA2X21zZ19taWIgdjZpY21wbXNnOworI2VuZGlmCisgICAgaW50IGksIGssIGZsYWcsIGluYzsKKworICAgIG1lbXNldCgmaWNtcF9tc2dfc3RhdHNfdGFibGUsIDAsIHNpemVvZihpY21wX21zZ19zdGF0c190YWJsZSkpOworCisgICAgaSA9IDA7CisgICAgZmxhZyA9IDA7CisgICAgayA9IDA7CisgICAgaW5jID0gMDsKKyNpZmRlZiBsaW51eAorICAgIGxpbnV4X3JlYWRfaWNtcF9tc2dfc3RhdCgmdjRpY21wLCAmdjRpY21wbXNnLCAmZmxhZyk7CisjZWxpZiBkZWZpbmVkKE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMKQorICAgIG5ldGJzZF9yZWFkX2ljbXBfbXNnX3N0YXQoJnY0aWNtcCwgJnY0aWNtcG1zZywgJmZsYWcpOworI2VsaWYgKGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkgJiYgZGVmaW5lZChJQ01QQ1RMX1NUQVRTKSkKKyAgICBzeXNjdGxfcmVhZF9pY21wX21zZ19zdGF0KCZ2NGljbXAsICZ2NGljbXBtc2csICZmbGFnKTsKKyNlbGlmIGRlZmluZWQoc29sYXJpczIpCisgICAgc29sYXJpc19yZWFkX2ljbXBfbXNnX3N0YXQoJnY0aWNtcCwgJnY0aWNtcG1zZywgJmZsYWcpOworI2Vsc2UKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKKyAgICBpZiAoZmxhZykgeworICAgICAgICB3aGlsZSAoMjU1ID49IGspIHsKKyAgICAgICAgICAgIGlmICh2NGljbXBtc2cudmFsc1trXS5JblR5cGUpIHsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IGs7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wbXNnLnZhbHNba10uSW5UeXBlOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgfCBJQ01QX01TR19TVEFUU19IQVNfSU47CisgICAgICAgICAgICAgICAgaW5jID0gMTsgLyogU2V0IHRoaXMgaWYgd2UgZm91bmQgYSB2YWxpZCBlbnRyeSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHY0aWNtcG1zZy52YWxzW2tdLk91dFR5cGUpIHsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IGs7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcG1zZy52YWxzW2tdLk91dFR5cGU7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgICAgICAgICAgaW5jID0gMTsgLyogU2V0IHRoaXMgaWYgd2UgZm91bmQgYSB2YWxpZCBlbnRyeSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluYykgeworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBpbmMgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaysrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfRUNIT1JFUExZOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluRWNob1JlcHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dEVjaG9SZXBzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX0RFU1RfVU5SRUFDSDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJbkRlc3RVbnJlYWNoczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0RGVzdFVucmVhY2hzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX1NPVVJDRV9RVUVOQ0g7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5TcmNRdWVuY2hzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRTcmNRdWVuY2hzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX1JFRElSRUNUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluUmVkaXJlY3RzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRSZWRpcmVjdHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfRUNITzsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJbkVjaG9zOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRFY2hvczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9USU1FX0VYQ0VFREVEOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluVGltZUV4Y2RzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRUaW1lRXhjZHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfUEFSQU1FVEVSUFJPQjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJblBhcm1Qcm9iczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0UGFybVByb2JzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX1RJTUVTVEFNUDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJblRpbWVzdGFtcHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dFRpbWVzdGFtcHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfVElNRVNUQU1QUkVQTFk7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5UaW1lc3RhbXBSZXBzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRUaW1lc3RhbXBSZXBzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX0FERFJFU1M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5BZGRyTWFza3M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dEFkZHJNYXNrczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9BRERSRVNTUkVQTFk7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5BZGRyTWFza1JlcHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dEFkZHJNYXNrUmVwczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKyAgICB9CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgZmxhZyA9IDA7CisgICAgayA9IDA7CisgICAgaW5jID0gMDsKKyNpZmRlZiBsaW51eAorICAgIGxpbnV4X3JlYWRfaWNtcDZfbXNnX3N0YXQoJnY2aWNtcCwgJnY2aWNtcG1zZywgJmZsYWcpOworI2VsaWYgZGVmaW5lZChORVRCU0RfU1RBVFNfVklBX1NZU0NUTCkKKyAgICBuZXRic2RfcmVhZF9pY21wNl9tc2dfc3RhdCgmdjZpY21wLCAmdjZpY21wbXNnLCAmZmxhZyk7CisjZWxpZiAoZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKSAmJiBkZWZpbmVkKElDTVBDVExfU1RBVFMpKQorICAgIHN5c2N0bF9yZWFkX2ljbXA2X21zZ19zdGF0KCZ2NmljbXAsICZ2NmljbXBtc2csICZmbGFnKTsKKyNlbGlmIGRlZmluZWQoc29sYXJpczIpCisgICAgc29sYXJpc19yZWFkX2ljbXA2X21zZ19zdGF0KCZ2NmljbXAsICZ2NmljbXBtc2csICZmbGFnKTsKKyNlbHNlCisgICAgcmV0dXJuIC0xOworI2VuZGlmCisgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgd2hpbGUgKDI1NSA+PSBrKSB7CisgICAgICAgICAgICBpZiAodjZpY21wbXNnLnZhbHNba10uSW5UeXBlKSB7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBrOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcG1zZy52YWxzW2tdLkluVHlwZTsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzIHwgSUNNUF9NU0dfU1RBVFNfSEFTX0lOOworICAgICAgICAgICAgICAgIGluYyA9IDE7IC8qIFNldCB0aGlzIGlmIHdlIGZvdW5kIGEgdmFsaWQgZW50cnkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2NmljbXBtc2cudmFsc1trXS5PdXRUeXBlKSB7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBrOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXBtc2cudmFsc1trXS5PdXRUeXBlOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICAgICAgICAgIGluYyA9IDE7IC8qIFNldCB0aGlzIGlmIHdlIGZvdW5kIGEgdmFsaWQgZW50cnkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmMpIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgaW5jID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGsrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QNl9EU1RfVU5SRUFDSDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5EZXN0VW5yZWFjaHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXREZXN0VW5yZWFjaHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVA2X1BBQ0tFVF9UT09fQklHOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJblBrdFRvb0JpZ3M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRQa3RUb29CaWdzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QNl9USU1FX0VYQ0VFREVEOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJblRpbWVFeGNkczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dFRpbWVFeGNkczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUDZfUEFSQU1fUFJPQjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5QYXJtUHJvYmxlbXM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRQYXJtUHJvYmxlbXM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVA2X0VDSE9fUkVRVUVTVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5FY2hvczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dEVjaG9zOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QNl9FQ0hPX1JFUExZOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJbkVjaG9SZXBsaWVzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0RWNob1JlcGxpZXM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyNpZmRlZiBNTERfTElTVEVORVJfUVVFUlkKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IE1MRF9MSVNURU5FUl9RVUVSWTsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5Hcm91cE1lbWJRdWVyaWVzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gMDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTjsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBNTERfTElTVEVORVJfUkVQT1JUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJbkdyb3VwTWVtYlJlc3BvbnNlczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dEdyb3VwTWVtYlJlc3BvbnNlczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gTUxEX0xJU1RFTkVSX1JFRFVDVElPTjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5Hcm91cE1lbWJSZWR1Y3Rpb25zOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0R3JvdXBNZW1iUmVkdWN0aW9uczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gTkRfUk9VVEVSX1NPTElDSVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluUm91dGVyU29saWNpdHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRSb3V0ZXJTb2xpY2l0czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gTkRfUk9VVEVSX0FEVkVSVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5Sb3V0ZXJBZHZlcnRpc2VtZW50czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IDA7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU47CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gTkRfTkVJR0hCT1JfU09MSUNJVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5OZWlnaGJvclNvbGljaXRzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0TmVpZ2hib3JTb2xpY2l0czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gTkRfTkVJR0hCT1JfQURWRVJUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJbk5laWdoYm9yQWR2ZXJ0aXNlbWVudHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXROZWlnaGJvckFkdmVydGlzZW1lbnRzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBORF9SRURJUkVDVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5SZWRpcmVjdHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRSZWRpcmVjdHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworI2VuZGlmCisgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KKyAgICByZXR1cm4gMDsKK30KKworbmV0c25tcF92YXJpYWJsZV9saXN0ICoKK2ljbXBfc3RhdHNfbmV4dF9lbnRyeSggdm9pZCAqKmxvb3BfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkYXRhX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICpkYXRhKQoreworICAgIGludCBpID0gKGludCkoaW50cHRyX3QpKCpsb29wX2NvbnRleHQpOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaWR4ID0gaW5kZXg7CisKKyAgICBpZihpID4gMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKworICAgIC8qCisgICAgICpzZXQgSVAgdmVyc2lvbgorICAgICAqLworICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShpZHgsIEFTTl9JTlRFR0VSLCAodV9jaGFyICopJmljbXBfc3RhdHNfdGFibGVbaV0uaXBWZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgaWR4ID0gaWR4LT5uZXh0X3ZhcmlhYmxlOworCisgICAgKmRhdGFfY29udGV4dCA9ICZpY21wX3N0YXRzX3RhYmxlW2ldOworCisgICAgKmxvb3BfY29udGV4dCA9ICh2b2lkICopKGludHB0cl90KSgrK2kpOworICAgIAorICAgIHJldHVybiBpbmRleDsKK30KKworCituZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgoraWNtcF9zdGF0c19maXJzdF9lbnRyeSggdm9pZCAqKmxvb3BfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkYXRhX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICpkYXRhKQoreworICAgICpsb29wX2NvbnRleHQgPSBOVUxMOworICAgICpkYXRhX2NvbnRleHQgPSBOVUxMOworICAgIHJldHVybiBpY21wX3N0YXRzX25leHRfZW50cnkobG9vcF9jb250ZXh0LCBkYXRhX2NvbnRleHQsIGluZGV4LCBkYXRhKTsKK30KKworbmV0c25tcF92YXJpYWJsZV9saXN0ICoKK2ljbXBfbXNnX3N0YXRzX25leHRfZW50cnkodm9pZCAqKmxvb3BfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmRhdGFfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICppbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICpkYXRhKQoreworICAgIGludCBpID0gKGludCkoaW50cHRyX3QpKCpsb29wX2NvbnRleHQpOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaWR4ID0gaW5kZXg7CisKKyAgICBpZihpID49IElDTVBfTVNHX1NUQVRTX0lQVjRfQ09VTlQgKyBJQ01QX01TR19TVEFUU19JUFY2X0NPVU5UKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIHNldCBJUCB2ZXJzaW9uICovCisgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKGlkeCwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAodV9jaGFyICopJmljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyLAorICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAvKiBzZXQgcGFja2V0IHR5cGUgKi8KKyAgICBpZHggPSBpZHgtPm5leHRfdmFyaWFibGU7CisgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKGlkeCwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAodV9jaGFyICopJmljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUsCisgICAgICAgICAgICBzaXplb2YodWludDMyX3QpKTsKKworICAgICpkYXRhX2NvbnRleHQgPSAmaWNtcF9tc2dfc3RhdHNfdGFibGVbaV07CisgICAgKmxvb3BfY29udGV4dCA9ICh2b2lkICopKGludHB0cl90KSgrK2kpOworCisgICAgcmV0dXJuIGluZGV4OworfQorCisKK25ldHNubXBfdmFyaWFibGVfbGlzdCAqCitpY21wX21zZ19zdGF0c19maXJzdF9lbnRyeSh2b2lkICoqbG9vcF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmRhdGFfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmRhdGEpCit7CisgICAgKmxvb3BfY29udGV4dCA9IE5VTEw7CisgICAgKmRhdGFfY29udGV4dCA9IE5VTEw7CisgICAgcmV0dXJuIGljbXBfbXNnX3N0YXRzX25leHRfZW50cnkobG9vcF9jb250ZXh0LCBkYXRhX2NvbnRleHQsIGluZGV4LCBkYXRhKTsKK30KKyNlbmRpZgorCiB2b2lkCiBpbml0X2ljbXAodm9pZCkKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvOworI2lmZGVmIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAorICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm1zZ19zdGF0c19yZWdpbmZvID0gTlVMTDsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICp0YWJsZV9yZWdpbmZvID0gTlVMTDsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvOworICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqbXNnX3N0YXRzX2lpbmZvOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqbXNnX3N0YXRzX3RhYmxlX2luZm87CisjZW5kaWYKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpzY2FsYXJfcmVnaW5mbyA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKIAogICAgIC8qCiAgICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IGFzIGEgZ3JvdXAgb2Ygc2NhbGFycy4uLgogICAgICAqLwogICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkluaXRpYWxpc2luZyBJQ01QIGdyb3VwXG4iKSk7Ci0gICAgcmVnaW5mbyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJpY21wIiwgaWNtcF9oYW5kbGVyLAorICAgIHNjYWxhcl9yZWdpbmZvID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImljbXAiLCBpY21wX2hhbmRsZXIsCiAJCSAgICBpY21wX29pZCwgT0lEX0xFTkdUSChpY21wX29pZCksIEhBTkRMRVJfQ0FOX1JPTkxZKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChyZWdpbmZvLCBJQ01QSU5NU0dTLCBJQ01QT1VUQUREUk1BU0tSRVBTKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHNjYWxhcl9yZWdpbmZvLCBJQ01QSU5NU0dTLCBJQ01QT1VUQUREUk1BU0tSRVBTKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47CiAgICAgLyoKICAgICAgKiAuLi4uIHdpdGggYSBsb2NhbCBjYWNoZQogICAgICAqICAgIChleGNlcHQgZm9yIEhQLVVYIDExLCB3aGljaCBleHRyYWN0cyBvYmplY3RzIGluZGl2aWR1YWxseSkKICAgICAgKi8KICNpZm5kZWYgaHB1eDExCi0gICAgbmV0c25tcF9pbmplY3RfaGFuZGxlciggcmVnaW5mbywKKyAgICByYyA9IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIoIHNjYWxhcl9yZWdpbmZvLAogCQkgICAgbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcihJQ01QX1NUQVRTX0NBQ0hFX1RJTUVPVVQsCiAJCQkgICAJCWljbXBfbG9hZCwgaWNtcF9mcmVlLAogCQkJCQlpY21wX29pZCwgT0lEX0xFTkdUSChpY21wX29pZCkpKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorCWdvdG8gYmFpbDsKICNlbmRpZgorI2lmZGVmIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAorCisgICAgLyogcmVnaXN0ZXIgaWNtcFN0YXRzVGFibGUgKi8KKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAoIXRhYmxlX2luZm8pCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgMCk7CisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IElDTVBfU1RBVF9JTk1TRzsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gSUNNUF9TVEFUX09VVEVSUjsKKworCisgICAgaWluZm8gICAgICA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9pdGVyYXRvcl9pbmZvKTsKKyAgICBpZiAoIWlpbmZvKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgaWluZm8tPmdldF9maXJzdF9kYXRhX3BvaW50ID0gaWNtcF9zdGF0c19maXJzdF9lbnRyeTsKKyAgICBpaW5mby0+Z2V0X25leHRfZGF0YV9wb2ludCAgPSBpY21wX3N0YXRzX25leHRfZW50cnk7CisgICAgaWluZm8tPnRhYmxlX3JlZ2luZm8gICAgICAgID0gdGFibGVfaW5mbzsKKworICAgIHRhYmxlX3JlZ2luZm8gPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaWNtcFN0YXRzVGFibGUiLAorCQlpY21wX3N0YXRzX3RhYmxlX2hhbmRsZXIsIGljbXBfc3RhdHNfdGJsX29pZCwKKwkJT0lEX0xFTkdUSChpY21wX3N0YXRzX3RibF9vaWQpLCBIQU5ETEVSX0NBTl9ST05MWSk7CisKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKHRhYmxlX3JlZ2luZm8sIGlpbmZvKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIHRhYmxlX3JlZ2luZm8gPSBOVUxMOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIoIHRhYmxlX3JlZ2luZm8sCisgICAgICAgICAgICBuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyKElDTVBfU1RBVFNfQ0FDSEVfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGljbXBfbG9hZCwgaWNtcF9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaWNtcF9zdGF0c190Ymxfb2lkLCBPSURfTEVOR1RIKGljbXBfc3RhdHNfdGJsX29pZCkpKTsKKworICAgIC8qIHJlZ2lzdGVyIGljbXBNc2dTdGF0c1RhYmxlICovCisgICAgbXNnX3N0YXRzX3RhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmICghbXNnX3N0YXRzX3RhYmxlX2luZm8pCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyhtc2dfc3RhdHNfdGFibGVfaW5mbywgQVNOX0lOVEVHRVIsIEFTTl9JTlRFR0VSLCAwKTsKKyAgICBtc2dfc3RhdHNfdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IElDTVBfTVNHX1NUQVRfSU5fUEtUUzsKKyAgICBtc2dfc3RhdHNfdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IElDTVBfTVNHX1NUQVRfT1VUX1BLVFM7CisKKyAgICBtc2dfc3RhdHNfaWluZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfaXRlcmF0b3JfaW5mbyk7CisgICAgaWYgKCFtc2dfc3RhdHNfaWluZm8pCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBtc2dfc3RhdHNfaWluZm8tPmdldF9maXJzdF9kYXRhX3BvaW50ID0gaWNtcF9tc2dfc3RhdHNfZmlyc3RfZW50cnk7CisgICAgbXNnX3N0YXRzX2lpbmZvLT5nZXRfbmV4dF9kYXRhX3BvaW50ICA9IGljbXBfbXNnX3N0YXRzX25leHRfZW50cnk7CisgICAgbXNnX3N0YXRzX2lpbmZvLT50YWJsZV9yZWdpbmZvICAgICAgICA9IG1zZ19zdGF0c190YWJsZV9pbmZvOworCisgICAgbXNnX3N0YXRzX3JlZ2luZm8gPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaWNtcE1zZ1N0YXRzVGFibGUiLAorICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVfaGFuZGxlciwgaWNtcF9tc2dfc3RhdHNfdGJsX29pZCwKKyAgICAgICAgICAgIE9JRF9MRU5HVEgoaWNtcF9tc2dfc3RhdHNfdGJsX29pZCksIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKworICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIobXNnX3N0YXRzX3JlZ2luZm8sIG1zZ19zdGF0c19paW5mbyk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICBtc2dfc3RhdHNfcmVnaW5mbyA9IE5VTEw7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKCBtc2dfc3RhdHNfcmVnaW5mbywKKyAgICAgICAgICAgIG5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIoSUNNUF9TVEFUU19DQUNIRV9USU1FT1VULAorICAgICAgICAgICAgICAgIGljbXBfbG9hZCwgaWNtcF9mcmVlLAorICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RibF9vaWQsIE9JRF9MRU5HVEgoaWNtcF9tc2dfc3RhdHNfdGJsX29pZCkpKTsKKyNlbmRpZiAvKiBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQgKi8KIAogI2lmZGVmIFVTSU5HX01JQklJX0lQX01PRFVMRQogICAgIGlmICgrK2lwX21vZHVsZV9jb3VudCA9PSAyKQpAQCAtMTAzLDYgKzc0NSwxOSBAQAogICAgIGluaXRfa2VybmVsX3N1bm9zNSgpOwogI2VuZGlmCiAjZW5kaWYKKyAgICByZXR1cm47CisKKyNpZm5kZWYgaHB1eDExCitiYWlsOgorI2VuZGlmCisjaWZkZWYgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCisgICAgaWYgKG1zZ19zdGF0c19yZWdpbmZvKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUobXNnX3N0YXRzX3JlZ2luZm8pOworICAgIGlmICh0YWJsZV9yZWdpbmZvKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUodGFibGVfcmVnaW5mbyk7CisjZW5kaWYKKyAgICBpZiAoc2NhbGFyX3JlZ2luZm8pCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShzY2FsYXJfcmVnaW5mbyk7CiB9CiAKIApAQCAtMTEyLDQ4ICs3NjcsNiBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmZGVmIGhwdXgxMQotI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCWludAotI2VuZGlmCi0KLSNpZmRlZiBsaW51eAotI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCXN0cnVjdCBpY21wX21pYgotI2RlZmluZSBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKLSN1bmRlZiBJQ01QU1RBVF9TWU1CT0wKLSNlbmRpZgotCi0jaWZkZWYgc29sYXJpczIKLSNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQltaWIyX2ljbXBfdAotI2RlZmluZSBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKLSNlbmRpZgotCi0jaWZkZWYgTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwKLSNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRSAgICAgc3RydWN0IGljbXBfbWliCi0jZGVmaW5lIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAotI3VuZGVmIElDTVBfTlNUQVRTCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0jaW5jbHVkZSA8aXBobHBhcGkuaD4KLSNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRSBNSUJfSUNNUAotI2VuZGlmCi0KLS8qID8/ICNpZiAoZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKSAmJiBkZWZpbmVkKElDTVBDVExfU1RBVFMpKSA/PyAqLwotCi0jaWZkZWYgSEFWRV9TWVNfSUNNUElQU1RBVFNfSAotLyogb3IgI2lmZGVmCQlIQVZFX1NZU19UQ1BJUFNUQVRTX0ggID8/PyAqLwotI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCXN0cnVjdCBrbmEKLSNkZWZpbmUgVVNFU19UUkFESVRJT05BTF9JQ01QU1RBVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChJQ01QX1NUQVRfU1RSVUNUVVJFKQotI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCXN0cnVjdCBpY21wc3RhdAotI2RlZmluZSBVU0VTX1RSQURJVElPTkFMX0lDTVBTVEFUCi0jZW5kaWYKLQotSUNNUF9TVEFUX1NUUlVDVFVSRSBpY21wc3RhdDsKLQotCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgogCSAqICBTeXN0ZW0gaW5kZXBlbmRlbnQgaGFuZGxlcgpAQCAtMTcxLDkgKzc4NCw2IEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpyZXF1ZXN0dmI7CiAgICAgbG9uZyAgICAgcmV0X3ZhbHVlOwogICAgIG9pZCAgICAgIHN1YmlkOwotI2lmZGVmIFVTRVNfVFJBRElUSU9OQUxfSUNNUFNUQVQKLSAgICBpbnQgICAgICBpOwotI2VuZGlmCiAKICAgICAvKgogICAgICAqIFRoZSBjYWNoZWQgZGF0YSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gbG9hZGVkIGJ5IHRoZQpAQCAtMjgxLDEzICs4OTEsMTYgQEAKICAgICAgICAgcmV0X3ZhbHVlID0gaWNtcHN0YXQuaWNtcE91dEFkZHJNYXNrUmVwczsKICAgICAgICAgYnJlYWs7CiAjZWxpZiBkZWZpbmVkKFVTRVNfVFJBRElUSU9OQUxfSUNNUFNUQVQpICYmICFkZWZpbmVkKF9VU0VfUEVSRlNUQVRfUFJPVE9DT0wpCi0gICAgY2FzZSBJQ01QSU5NU0dTOgorICAgIGNhc2UgSUNNUElOTVNHUzogeworICAgICAgICBpbnQgaTsKKwogICAgICAgICByZXRfdmFsdWUgPSBpY21wc3RhdC5pY3BzX2JhZGNvZGUgKwogICAgICAgICAgICAgaWNtcHN0YXQuaWNwc190b29zaG9ydCArCiAgICAgICAgICAgICBpY21wc3RhdC5pY3BzX2NoZWNrc3VtICsgaWNtcHN0YXQuaWNwc19iYWRsZW47CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gSUNNUF9NQVhUWVBFOyBpKyspCiAgICAgICAgICAgICByZXRfdmFsdWUgKz0gaWNtcHN0YXQuaWNwc19pbmhpc3RbaV07CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIElDTVBJTkVSUk9SUzoKICAgICAgICAgcmV0X3ZhbHVlID0gaWNtcHN0YXQuaWNwc19iYWRjb2RlICsKICAgICAgICAgICAgIGljbXBzdGF0LmljcHNfdG9vc2hvcnQgKwpAQCAtMzI2LDExICs5MzksMTQgQEAKICAgICBjYXNlIElDTVBJTkFERFJNQVNLUkVQUzoKICAgICAgICAgcmV0X3ZhbHVlID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9NQVNLUkVQTFldOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIElDTVBPVVRNU0dTOgorICAgIGNhc2UgSUNNUE9VVE1TR1M6IHsKKyAgICAgICAgaW50IGk7CisKICAgICAgICAgcmV0X3ZhbHVlID0gaWNtcHN0YXQuaWNwc19vbGRzaG9ydCArIGljbXBzdGF0LmljcHNfb2xkaWNtcDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBJQ01QX01BWFRZUEU7IGkrKykKICAgICAgICAgICAgIHJldF92YWx1ZSArPSBpY21wc3RhdC5pY3BzX291dGhpc3RbaV07CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIElDTVBPVVRFUlJPUlM6CiAgICAgICAgIHJldF92YWx1ZSA9IGljbXBzdGF0LmljcHNfb2xkc2hvcnQgKyBpY21wc3RhdC5pY3BzX29sZGljbXA7CiAgICAgICAgIGJyZWFrOwpAQCAtNTMyLDYgKzExNDgsNyBAQAogCiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgY2FzZSBNT0RFX0dFVEJVTEs6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTU0MSw2ICsxMTU4LDcgQEAKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pY21wOiBVbnN1cHBvcnRlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2ljbXA6IFVucmVjb2duaXNlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CkBAIC01NTEsNiArMTE2OSwxNTMgQEAKIH0KIAogCisjaWZkZWYgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCitpbnQKK2ljbXBfc3RhdHNfdGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAqcmVxdWVzdHMpCit7CisJbmV0c25tcF9yZXF1ZXN0X2luZm8gICpyZXF1ZXN0OworCW5ldHNubXBfdmFyaWFibGVfbGlzdCAqcmVxdWVzdHZiOworCW5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworCXN0cnVjdCBpY21wX3N0YXRzX3RhYmxlX2VudHJ5ICAgKmVudHJ5OworCW9pZCAgICAgIHN1YmlkOworCisJc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisJCWNhc2UgTU9ERV9HRVQ6CisJCQlmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworCQkJCXJlcXVlc3R2YiA9IHJlcXVlc3QtPnJlcXVlc3R2YjsKKwkJCQllbnRyeSA9IChzdHJ1Y3QgaWNtcF9zdGF0c190YWJsZV9lbnRyeSAqKW5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0KHJlcXVlc3QpOworCQkJCWlmICghZW50cnkpCisJCQkJCWNvbnRpbnVlOworCQkJCXRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKwkJCQlzdWJpZCAgICAgID0gdGFibGVfaW5mby0+Y29sbnVtOworCQkJCURFQlVHTVNHVEwoKCAibWliSUkvaWNtcFN0YXRzVGFibGUiLCAib2lkOiAiICkpOworCQkJCURFQlVHTVNHT0lEKCggIm1pYklJL2ljbXBTdGF0c1RhYmxlIiwgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lLAorCQkJCQkJIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggKSk7CisJCQkJREVCVUdNU0coKCAibWliSUkvaWNtcFN0YXRzVGFibGUiLCAiIEluICVkIEluRXJyICVkIE91dCAlZCBPdXRFcnIgJWRcbiIsCisJCQkJCSAgICAgIGVudHJ5LT5pY21wU3RhdHNJbk1zZ3MsIGVudHJ5LT5pY21wU3RhdHNJbkVycm9ycywKKwkJCQkJICAgICAgZW50cnktPmljbXBTdGF0c091dE1zZ3MsIGVudHJ5LT5pY21wU3RhdHNPdXRFcnJvcnMgKSk7CisKKwkJCQlzd2l0Y2ggKHN1YmlkKSB7CisJCQkJCWNhc2UgSUNNUF9TVEFUX0lOTVNHOgorCQkJCQkJc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisJCQkJCQkJKHVfY2hhciAqKSZlbnRyeS0+aWNtcFN0YXRzSW5Nc2dzLCBzaXplb2YodWludDMyX3QpKTsKKwkJCQkJCWJyZWFrOwkKKwkJCQkJY2FzZSBJQ01QX1NUQVRfSU5FUlI6CisJCQkJCQlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKwkJCQkJCQkodV9jaGFyICopJmVudHJ5LT5pY21wU3RhdHNJbkVycm9ycywgc2l6ZW9mKHVpbnQzMl90KSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBJQ01QX1NUQVRfT1VUTVNHOgorCQkJCQkJc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisJCQkJCQkJKHVfY2hhciAqKSZlbnRyeS0+aWNtcFN0YXRzT3V0TXNncywgc2l6ZW9mKHVpbnQzMl90KSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBJQ01QX1NUQVRfT1VURVJSOgorCQkJCQkJc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisJCQkJCQkJKHVfY2hhciAqKSZlbnRyeS0+aWNtcFN0YXRzT3V0RXJyb3JzLCBzaXplb2YodWludDMyX3QpKTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pY21wU3RhdHNUYWJsZTogVW5yZWNvZ25pc2VkIGNvbHVtbiAoJWQpXG4iLChpbnQpc3ViaWQpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE1PREVfR0VUTkVYVDoKKwkJY2FzZSBNT0RFX0dFVEJVTEs6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorCQljYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorCQljYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorCQljYXNlIE1PREVfU0VUX0FDVElPTjoKKwkJY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisJCWNhc2UgTU9ERV9TRVRfRlJFRToKKwkJY2FzZSBNT0RFX1NFVF9VTkRPOgorCQkJc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pY21wU3RhdHNUYWJsZTogVW5zdXBwb3J0ZWQgbW9kZSAoJWQpXG4iLAorCQkJCXJlcWluZm8tPm1vZGUpOworCQkJYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCQlkZWZhdWx0OgorCQkJc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pY21wU3RhdHNUYWJsZTogVW5yZWNvZ25pc2VkIG1vZGUgKCVkKVxuIiwKKwkJCQlyZXFpbmZvLT5tb2RlKTsKKwkJCWJyZWFrOworCisJfQorCisJcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK2ludAoraWNtcF9tc2dfc3RhdHNfdGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICAgICAgICAgICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICpyZXF1ZXN0cykKK3sKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnJlcXVlc3R2YjsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKyAgICBzdHJ1Y3QgaWNtcF9tc2dfc3RhdHNfdGFibGVfZW50cnkgKmVudHJ5OworICAgIG9pZCBzdWJpZDsKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdHZiID0gcmVxdWVzdC0+cmVxdWVzdHZiOworICAgICAgICAgICAgICAgIGVudHJ5ID0gKHN0cnVjdCBpY21wX21zZ19zdGF0c190YWJsZV9lbnRyeSAqKW5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBzdWJpZCA9IHRhYmxlX2luZm8tPmNvbG51bTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggIm1pYklJL2ljbXBNc2dTdGF0c1RhYmxlIiwgIm9pZDogIiApKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR09JRCgoICJtaWJJSS9pY21wTXNnU3RhdHNUYWJsZSIsIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCAibWliSUkvaWNtcE1zZ1N0YXRzVGFibGUiLCAiIEluICVkIE91dCAlZCBGbGFncyAweCV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmljbXBNc2dTdGF0c0luUGt0cywgZW50cnktPmljbXBNc2dTdGF0c091dFBrdHMsIGVudHJ5LT5mbGFncyApKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ViaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJQ01QX01TR19TVEFUX0lOX1BLVFM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmZsYWdzICYgSUNNUF9NU0dfU1RBVFNfSEFTX0lOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJmVudHJ5LT5pY21wTXNnU3RhdHNJblBrdHMsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSUNNUF9NU0dfU1RBVF9PVVRfUEtUUzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+ZmxhZ3MgJiBJQ01QX01TR19TVEFUU19IQVNfT1VUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJmVudHJ5LT5pY21wTXNnU3RhdHNPdXRQa3RzLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHZiLT50eXBlID0gU05NUF9OT1NVQ0hJTlNUQU5DRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pY21wTXNnU3RhdHNUYWJsZTogVW5yZWNvZ25pc2VkIGNvbHVtbiAoJWQpXG4iLChpbnQpc3ViaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PREVfR0VUTkVYVDoKKyAgICAgICAgY2FzZSBNT0RFX0dFVEJVTEs6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pY21wU3RhdHNUYWJsZTogVW5zdXBwb3J0ZWQgbW9kZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaWNtcFN0YXRzVGFibGU6IFVucmVjb2duaXNlZCBtb2RlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKyNlbmRpZgkJLyogVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUICovCisKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCiAJICogIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwpAQCAtNjgwLDEzICsxNDQ1LDE5IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiTG9hZGVkIElDTVAgR3JvdXAgKGxpbnV4KVxuIikpOwogICAgIH0KKyAgICBpY21wX3N0YXRzX2xvYWQoY2FjaGUsIHZtYWdpYyk7CisgICAgaWNtcF9tc2dfc3RhdHNfbG9hZChjYWNoZSwgdm1hZ2ljKTsKICAgICByZXR1cm4gcmV0X3ZhbHVlOwogfQogI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKIGludAogaWNtcF9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMpCiB7Ci0gICAgbG9uZyAgICAgICAgICAgIHJldF92YWx1ZSA9IC0xOworICAgIGludCByZXRfdmFsdWUgPSAtMTsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgbWliMl9pcHY2SWZJY21wRW50cnlfdCBpZnN0YXQ7CisgICAgaW50IHJlcSA9IEdFVF9GSVJTVDsKKyNlbmRpZgogCiAgICAgcmV0X3ZhbHVlID0KICAgICAgICAgZ2V0TWlic3RhdChNSUJfSUNNUCwgJmljbXBzdGF0LCBzaXplb2YobWliMl9pY21wX3QpLCBHRVRfRklSU1QsCkBAIC02OTcsOCArMTQ2OCw4NSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkxvYWRlZCBJQ01QIEdyb3VwIChzb2xhcmlzKVxuIikpOwogICAgIH0KKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBtZW1zZXQoJmljbXA2c3RhdCwgMCwgc2l6ZW9mKGljbXA2c3RhdCkpOworICAgIHdoaWxlICgocmV0X3ZhbHVlID0gZ2V0TWlic3RhdChNSUJfSUNNUDYsICZpZnN0YXQsIHNpemVvZihpZnN0YXQpLCByZXEsCisgICAgICAgICAgICAgICAgICAgJkdldF9ldmVyeXRoaW5nLCBOVUxMKSkgPT0gMCkgeworCWlmICggcmV0X3ZhbHVlIDwgMCApIHsKKwkgICAgREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiRmFpbGVkIHRvIGxvYWQgSUNNUDYgR3JvdXAgKHNvbGFyaXMpXG4iKSk7CisJfSBlbHNlIHsKKwkgICAgREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiTG9hZGVkIElDTVA2IEdyb3VwIChzb2xhcmlzKVxuIikpOworCX0KKwlpY21wNnN0YXQuaWNtcDZPdXRNc2dzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0TXNnczsKKwlpY21wNnN0YXQuaWNtcDZJbk1zZ3MgKz0gaWZzdGF0LmlwdjZJZkljbXBJbk1zZ3M7CisJaWNtcDZzdGF0LmljbXA2SW5FcnJvcnMgKz0gaWZzdGF0LmlwdjZJZkljbXBJbkVycm9yczsKKwlpY21wNnN0YXQuaWNtcDZPdXREZXN0VW5yZWFjaHMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXREZXN0VW5yZWFjaHM7CisJaWNtcDZzdGF0LmljbXA2SW5EZXN0VW5yZWFjaHMgKz0gaWZzdGF0LmlwdjZJZkljbXBJbkRlc3RVbnJlYWNoczsKKwlpY21wNnN0YXQuaWNtcDZPdXRQa3RUb29CaWdzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0UGt0VG9vQmlnczsKKwlpY21wNnN0YXQuaWNtcDZJblBrdFRvb0JpZ3MgKz0gaWZzdGF0LmlwdjZJZkljbXBJblBrdFRvb0JpZ3M7CisJaWNtcDZzdGF0LmljbXA2T3V0VGltZUV4Y2RzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0VGltZUV4Y2RzOworCWljbXA2c3RhdC5pY21wNkluVGltZUV4Y2RzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5UaW1lRXhjZHM7CisJaWNtcDZzdGF0LmljbXA2T3V0UGFybVByb2JsZW1zICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0UGFybVByb2JsZW1zOworCWljbXA2c3RhdC5pY21wNkluUGFybVByb2JsZW1zICs9IGlmc3RhdC5pcHY2SWZJY21wSW5QYXJtUHJvYmxlbXM7CisJaWNtcDZzdGF0LmljbXA2T3V0RWNob3MgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRFY2hvczsKKwlpY21wNnN0YXQuaWNtcDZJbkVjaG9zICs9IGlmc3RhdC5pcHY2SWZJY21wSW5FY2hvczsKKwlpY21wNnN0YXQuaWNtcDZPdXRFY2hvUmVwbGllcyArPSBpZnN0YXQuaXB2NklmSWNtcE91dEVjaG9SZXBsaWVzOworCWljbXA2c3RhdC5pY21wNkluRWNob1JlcGxpZXMgKz0gaWZzdGF0LmlwdjZJZkljbXBJbkVjaG9SZXBsaWVzOworCWljbXA2c3RhdC5pY21wNk91dFJvdXRlclNvbGljaXRzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0Um91dGVyU29saWNpdHM7CisJaWNtcDZzdGF0LmljbXA2SW5Sb3V0ZXJTb2xpY2l0cyArPSBpZnN0YXQuaXB2NklmSWNtcEluUm91dGVyU29saWNpdHM7CisJaWNtcDZzdGF0LmljbXA2T3V0TmVpZ2hib3JBZHZlcnRpc2VtZW50cyArPSBpZnN0YXQuaXB2NklmSWNtcE91dE5laWdoYm9yQWR2ZXJ0aXNlbWVudHM7CisJaWNtcDZzdGF0LmljbXA2SW5OZWlnaGJvckFkdmVydGlzZW1lbnRzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5OZWlnaGJvckFkdmVydGlzZW1lbnRzOworCWljbXA2c3RhdC5pY21wNk91dE5laWdoYm9yU29saWNpdHMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXROZWlnaGJvclNvbGljaXRzOworCWljbXA2c3RhdC5pY21wNkluTmVpZ2hib3JTb2xpY2l0cyArPSBpZnN0YXQuaXB2NklmSWNtcEluTmVpZ2hib3JTb2xpY2l0czsKKwlpY21wNnN0YXQuaWNtcDZPdXRSZWRpcmVjdHMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRSZWRpcmVjdHM7CisJaWNtcDZzdGF0LmljbXA2SW5SZWRpcmVjdHMgKz0gaWZzdGF0LmlwdjZJZkljbXBJblJlZGlyZWN0czsKKwlpY21wNnN0YXQuaWNtcDZJbkdyb3VwTWVtYlF1ZXJpZXMgKz0gaWZzdGF0LmlwdjZJZkljbXBJbkdyb3VwTWVtYlF1ZXJpZXM7CisJaWNtcDZzdGF0LmljbXA2T3V0R3JvdXBNZW1iUmVzcG9uc2VzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0R3JvdXBNZW1iUmVzcG9uc2VzOworCWljbXA2c3RhdC5pY21wNkluR3JvdXBNZW1iUmVzcG9uc2VzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5Hcm91cE1lbWJSZXNwb25zZXM7CisJaWNtcDZzdGF0LmljbXA2T3V0R3JvdXBNZW1iUmVkdWN0aW9ucyArPSBpZnN0YXQuaXB2NklmSWNtcE91dEdyb3VwTWVtYlJlZHVjdGlvbnM7CisJaWNtcDZzdGF0LmljbXA2SW5Hcm91cE1lbWJSZWR1Y3Rpb25zICs9IGlmc3RhdC5pcHY2SWZJY21wSW5Hcm91cE1lbWJSZWR1Y3Rpb25zOworCXJlcSA9IEdFVF9ORVhUOworICAgIH0KKyNlbmRpZgorCisgICAgaWNtcF9zdGF0c19sb2FkKGNhY2hlLCB2bWFnaWMpOworICAgIGljbXBfbXNnX3N0YXRzX2xvYWQoY2FjaGUsIHZtYWdpYyk7CiAgICAgcmV0dXJuIHJldF92YWx1ZTsKIH0KKworc3RhdGljIGludAorc29sYXJpc19yZWFkX2ljbXBfc3RhdChJQ01QX1NUQVRfU1RSVUNUVVJFICptaWIpCit7CisgICAgKm1pYiA9IGljbXBzdGF0OworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citzb2xhcmlzX3JlYWRfaWNtcF9tc2dfc3RhdChJQ01QX1NUQVRfU1RSVUNUVVJFICptaWIsIHN0cnVjdCBpY21wNF9tc2dfbWliICptc2dfbWliLCBpbnQgKmZsYWcpCit7CisgICAgKm1pYiA9IGljbXBzdGF0OworICAgICpmbGFnID0gMDsKKyAgICByZXR1cm4gMDsKK30KKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKK3N0YXRpYyBpbnQKK3NvbGFyaXNfcmVhZF9pY21wNl9zdGF0KHN0cnVjdCBpY21wNl9taWIgKm1pYikKK3sKKyAgICAqbWliID0gaWNtcDZzdGF0OworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citzb2xhcmlzX3JlYWRfaWNtcDZfbXNnX3N0YXQoc3RydWN0IGljbXA2X21pYiAqbWliLCBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqbXNnX21pYiwgaW50ICpmbGFnKQoreworICAgICptaWIgPSBpY21wNnN0YXQ7CisgICAgKmZsYWcgPSAwOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKICNlbGlmIGRlZmluZWQoTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwpCiBpbnQKIGljbXBfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljKQpAQCAtNzEyLDkgKzE1NjAsMTAgQEAKICAgICB9IGVsc2UgewogCURFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkxvYWRlZCBJQ01QIEdyb3VwIChuZXRic2QpXG4iKSk7CiAgICAgfQorICAgIGljbXBfc3RhdHNfbG9hZChjYWNoZSwgdm1hZ2ljKTsKKyAgICBpY21wX21zZ19zdGF0c19sb2FkKGNhY2hlLCB2bWFnaWMpOwogICAgIHJldHVybiByZXRfdmFsdWU7CiB9Ci0KICNlbGlmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCiBpbnQKIGljbXBfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljKQpAQCAtNzUyLDE3ICsxNjAxLDE2IEBACiBpY21wX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYykKIHsKICAgICBsb25nICAgICAgICAgICAgcmV0X3ZhbHVlID0gLTE7Ci0gICAgc3RhdGljIGludCAgICAgIHNuYW1lWzRdID0KLSAgICAgICAgeyBDVExfTkVULCBQRl9JTkVULCBJUFBST1RPX0lDTVAsIElDTVBDVExfU1RBVFMgfTsKLSAgICBzaXplX3QgICAgICAgICAgbGVuID0gc2l6ZW9mKGljbXBzdGF0KTsKIAotICAgIHJldF92YWx1ZSA9IHN5c2N0bChzbmFtZSwgNCwgJmljbXBzdGF0LCAmbGVuLCAwLCAwKTsKKyAgICByZXRfdmFsdWUgPSBzeXNjdGxfcmVhZF9pY21wX3N0YXQoJmljbXBzdGF0KTsKIAogICAgIGlmICggcmV0X3ZhbHVlIDwgMCApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiRmFpbGVkIHRvIGxvYWQgSUNNUCBHcm91cCAoc3lzY3RsKVxuIikpOworCURFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkZhaWxlZCB0byBsb2FkIElDTVAgR3JvdXAgKG5ldGJzZClcbiIpKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJMb2FkZWQgSUNNUCBHcm91cCAoc3lzY3RsKVxuIikpOworCURFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkxvYWRlZCBJQ01QIEdyb3VwIChuZXRic2QpXG4iKSk7CiAgICAgfQorICAgIGljbXBfc3RhdHNfbG9hZChjYWNoZSwgdm1hZ2ljKTsKKyAgICBpY21wX21zZ19zdGF0c19sb2FkKGNhY2hlLCB2bWFnaWMpOwogICAgIHJldHVybiByZXRfdmFsdWU7CiB9CiAjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1RDUElQU1RBVFNfSCkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2ljbXAuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL2ljbXAuaAppbmRleCBjZGFhYzVkLi5kMDc4NDFhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pY21wLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5oCkBAIC01LDE1ICs1LDMyIEBACiAjaWZuZGVmIF9NSUJHUk9VUF9JQ01QX0gKICNkZWZpbmUgX01JQkdST1VQX0lDTVBfSAogCi1jb25maWdfYXJjaF9yZXF1aXJlKHNvbGFyaXMyLCAgICAgICAga2VybmVsX3N1bm9zNSkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoc29sYXJpczIsICBrZXJuZWxfc3Vub3M1KQogY29uZmlnX2FyY2hfcmVxdWlyZShsaW51eCwgICAgIG1pYklJL2tlcm5lbF9saW51eCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZnJlZWJzZDQsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShmcmVlYnNkNSwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGZyZWVic2Q2LCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZnJlZWJzZDcsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShmcmVlYnNkOCwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGZyZWVic2Q5LCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZnJlZWJzZDEwLCBtaWJJSS9rZXJuZWxfc3lzY3RsKQogY29uZmlnX2FyY2hfcmVxdWlyZShuZXRic2QsICAgIG1pYklJL2tlcm5lbF9uZXRic2QpCiBjb25maWdfYXJjaF9yZXF1aXJlKG5ldGJzZGVsZiwgbWliSUkva2VybmVsX25ldGJzZCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUob3BlbmJzZDQsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShvcGVuYnNkNSwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGRyYWdvbmZseTIsIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGRyYWdvbmZseTMsIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGRhcndpbjEwLCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZGFyd2luMTEsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShkYXJ3aW4xMiwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGRhcndpbjEzLCAgbWliSUkva2VybmVsX3N5c2N0bCkKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaD4KIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfaWNtcCh2b2lkKTsKIGV4dGVybiBOZXRzbm1wX05vZGVfSGFuZGxlciBpY21wX2hhbmRsZXI7CitleHRlcm4gTmV0c25tcF9Ob2RlX0hhbmRsZXIgaWNtcF9zdGF0c190YWJsZV9oYW5kbGVyOworZXh0ZXJuIE5ldHNubXBfTm9kZV9IYW5kbGVyIGljbXBfbXNnX3N0YXRzX3RhYmxlX2hhbmRsZXI7CiBleHRlcm4gTmV0c25tcENhY2hlTG9hZCBpY21wX2xvYWQ7CiBleHRlcm4gTmV0c25tcENhY2hlRnJlZSBpY21wX2ZyZWU7CiAKQEAgLTQ0LDQgKzYxLDE3IEBACiAjZGVmaW5lIElDTVBPVVRBRERSTUFTS1MgICAgIDI1CiAjZGVmaW5lIElDTVBPVVRBRERSTUFTS1JFUFMgIDI2CiAKKyNkZWZpbmUgSUNNUFNUQVRTVEFCTEUgICAgICAgMjkKKyNkZWZpbmUgSUNNUF9TVEFUX0lQVkVSICAgICAgIDEKKyNkZWZpbmUgSUNNUF9TVEFUX0lOTVNHICAgICAgIDIgCisjZGVmaW5lIElDTVBfU1RBVF9JTkVSUiAgICAgICAzIAorI2RlZmluZSBJQ01QX1NUQVRfT1VUTVNHICAgICAgNCAKKyNkZWZpbmUgSUNNUF9TVEFUX09VVEVSUiAgICAgIDUgCisKKyNkZWZpbmUgSUNNUE1TR1NUQVRTVEFCTEUgICAgIDMwCisjZGVmaW5lIElDTVBfTVNHX1NUQVRfSVBWRVIgICAgMQorI2RlZmluZSBJQ01QX01TR19TVEFUX1RZUEUgICAgIDIKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVF9JTl9QS1RTICAzCisjZGVmaW5lIElDTVBfTVNHX1NUQVRfT1VUX1BLVFMgNAorCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9JQ01QX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYwppbmRleCBjODk2ZmYyLi4yNmZmZWJiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jCkBAIC0xNSw4ICsxNSwxMSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCi0jaWYgZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTF9MQVRFKQorbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoaW50ZXJmYWNlX2xlZ2FjeSkKKworI2lmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX0xBVEUpCiAjZGVmaW5lIF9LRVJORUwgMQogI2RlZmluZSBfSV9ERUZJTkVEX0tFUk5FTAogI2VuZGlmCkBAIC0zNywxMCArNDAsNyBAQAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkgJiYgZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUxfTEFURSkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAmJiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX0xBVEUpCiAjZGVmaW5lIF9LRVJORUwgMQogI2RlZmluZSBfSV9ERUZJTkVEX0tFUk5FTAogI2VuZGlmCkBAIC01NywxMSArNTcsNyBAQAogI2VuZGlmCiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCiAjIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTk3LDQ5ICsxOTMsNzkgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImludGVyZmFjZXMuaCIKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAotLyogaWYgeW91IHdhbnQgY2FjaGluZyBlbmFibGVkIGZvciBzcGVlZCByZXRyaXZhbCBwdXJwb3Nlcywgc2V0IHRoaXMgdG8gNT8qLworLyogaWYgeW91IHdhbnQgY2FjaGluZyBlbmFibGVkIGZvciBzcGVlZCByZXRyaWV2YWwgcHVycG9zZXMsIHNldCB0aGlzIHRvIDU/Ki8KICNkZWZpbmUgTUlOTE9BREZSRVEgMCAgICAgICAgICAgICAgICAgICAgIC8qIG1pbiByZWxvYWQgZnJlcXVlbmN5IGluIHNlY29uZHMgKi8KICNpZmRlZiBsaW51eAogc3RhdGljIHVuc2lnbmVkIGxvbmcgTGFzdExvYWQgPSAwOyAgICAgICAgLyogRVQgaW4gc2VjcyBhdCBsYXN0IHRhYmxlIGxvYWQgKi8KICNlbmRpZgogCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgc3RhcnR0aW1lOworI2RlZmluZSBzdGFydHRpbWUgKCooY29uc3Qgc3RydWN0IHRpbWV2YWwqKW5ldHNubXBfZ2V0X2FnZW50X3N0YXJ0dGltZSgpKQogCiBzdHJ1Y3QgdmFyaWFibGUzIGludGVyZmFjZXNfdmFyaWFibGVzW10gPSB7Ci0gICAge0lGTlVNQkVSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pbnRlcmZhY2VzLCAxLCB7MX19LAotICAgIHtJRklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMX19LAotICAgIHtJRkRFU0NSLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAyfX0sCi0gICAge05FVFNOTVBfSUZUWVBFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgM319LAotICAgIHtJRk1UVSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDR9fSwKLSAgICB7SUZTUEVFRCwgQVNOX0dBVUdFLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA1fX0sCi0gICAge0lGUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDZ9fSwKKyAgICB7TkVUU05NUF9JRk5VTUJFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaW50ZXJmYWNlcywgMSwgezF9fSwKKyAgICB7TkVUU05NUF9JRklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMX19LAorICAgIHtORVRTTk1QX0lGREVTQ1IsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDJ9fSwKKyAgICB7TkVUU05NUF9JRlRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAzfX0sCisgICAge05FVFNOTVBfSUZNVFUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA0fX0sCisgICAge05FVFNOTVBfSUZTUEVFRCwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA1fX0sCisgICAge05FVFNOTVBfSUZQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgNn19LAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQotICAgIHtJRkFETUlOU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDd9fSwKKyAgICB7TkVUU05NUF9JRkFETUlOU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDd9fSwKICNlbHNlCi0gICAge0lGQURNSU5TVEFUVVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA3fX0sCisgICAge05FVFNOTVBfSUZBRE1JTlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDd9fSwKICNlbmRpZgotICAgIHtJRk9QRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA4fX0sCi0gICAge0lGTEFTVENIQU5HRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgOX19LAotICAgIHtJRklOT0NURVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTB9fSwKLSAgICB7SUZJTlVDQVNUUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDExfX0sCi0gICAge0lGSU5OVUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTJ9fSwKLSAgICB7SUZJTkRJU0NBUkRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTN9fSwKLSAgICB7SUZJTkVSUk9SUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE0fX0sCi0gICAge0lGSU5VTktOT1dOUFJPVE9TLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTV9fSwKLSAgICB7SUZPVVRPQ1RFVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxNn19LAotICAgIHtJRk9VVFVDQVNUUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE3fX0sCi0gICAge0lGT1VUTlVDQVNUUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE4fX0sCi0gICAge0lGT1VURElTQ0FSRFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxOX19LAotICAgIHtJRk9VVEVSUk9SUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDIwfX0sCi0gICAge0lGT1VUUUxFTiwgQVNOX0dBVUdFLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAyMX19LAotICAgIHtJRlNQRUNJRklDLCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAyMn19CisjZWxzZSAgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHtORVRTTk1QX0lGQURNSU5TVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA3fX0sCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHtORVRTTk1QX0lGT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDh9fSwKKyAgICB7TkVUU05NUF9JRkxBU1RDSEFOR0UsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDl9fSwKKyAgICB7TkVUU05NUF9JRklOT0NURVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTB9fSwKKyAgICB7TkVUU05NUF9JRklOVUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTF9fSwKKyAgICB7TkVUU05NUF9JRklOTlVDQVNUUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDEyfX0sCisgICAge05FVFNOTVBfSUZJTkRJU0NBUkRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTN9fSwKKyAgICB7TkVUU05NUF9JRklORVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTR9fSwKKyAgICB7TkVUU05NUF9JRklOVU5LTk9XTlBST1RPUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE1fX0sCisgICAge05FVFNOTVBfSUZPVVRPQ1RFVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxNn19LAorICAgIHtORVRTTk1QX0lGT1VUVUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTd9fSwKKyAgICB7TkVUU05NUF9JRk9VVE5VQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxOH19LAorICAgIHtORVRTTk1QX0lGT1VURElTQ0FSRFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxOX19LAorICAgIHtORVRTTk1QX0lGT1VURVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMjB9fSwKKyAgICB7TkVUU05NUF9JRk9VVFFMRU4sIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMjF9fSwKKyAgICB7TkVUU05NUF9JRlNQRUNJRklDLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAyMn19CiB9OwogCiAvKgpAQCAtMzg1LDcgKzQxMSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIElGTlVNQkVSOgorICAgIGNhc2UgTkVUU05NUF9JRk5VTUJFUjoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBJbnRlcmZhY2VfU2Nhbl9HZXRfQ291bnQoKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICBkZWZhdWx0OgpAQCAtNTcyLDEwICs1OTgsMTAgQEAKICAgICBpZl9wdHIgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfb3ZlcnJpZGVzX2dldChpZl9uYW1lKTsKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBJRklOREVYOgorICAgIGNhc2UgTkVUU05NUF9JRklOREVYOgogICAgICAgICBsb25nX3JldHVybiA9IGludGVyZmFjZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGREVTQ1I6CisgICAgY2FzZSBORVRTTk1QX0lGREVTQ1I6CiAgICAgICAgIGNwID0gaWZfbmFtZTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oaWZfbmFtZSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIGNwOwpAQCAtNTg1LDE0ICs2MTEsMTQgQEAKICAgICAgICAgZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IChsb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX3R5cGU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk1UVToKKyAgICBjYXNlIE5FVFNOTVBfSUZNVFU6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKGxvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfbXR1OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVFRDoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVFRDoKICAgICAgICAgaWYgKGlmX3B0cikKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfcHRyLT5zcGVlZDsKICAgICAgICAgZWxzZSB7Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURV9JRlNfVkFMVUUKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURV9JRlNfVkFMVUUKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX2JhdWRyYXRlLmlmc192YWx1ZSA8PAogICAgICAgICAgICAgaWZfbXNnLmlmbV9kYXRhLmlmaV9iYXVkcmF0ZS5pZnNfbG9nMjsKICNlbHNlCkBAIC02MDAsNTIgKzYyNiw1MiBAQAogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGUEhZU0FERFJFU1M6CisgICAgY2FzZSBORVRTTk1QX0lGUEhZU0FERFJFU1M6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFhYWCAKICAgICAgICAgICovCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGNhc2UgSUZBRE1JTlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZBRE1JTlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9tc2cuaWZtX2ZsYWdzICYgSUZGX1VQID8gMSA6IDI7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9QRVJTVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGT1BFUlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9tc2cuaWZtX2ZsYWdzICYgSUZGX1JVTk5JTkcgPyAxIDogMjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICAgICAgLyoKICAgICAgICAgICogaWZMYXN0Q2hhbmdlIAogICAgICAgICAgKi8KLSAgICBjYXNlIElGSU5PQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5PQ1RFVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9pYnl0ZXM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9CiAgICAgICAgICAgICAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX2lwYWNrZXRzIC0KICAgICAgICAgICAgIGlmX21zZy5pZm1fZGF0YS5pZmlfaW1jYXN0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5OVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX2ltY2FzdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ESVNDQVJEUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX2lxZHJvcHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRklORVJST1JTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfaWVycm9yczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VTktOT1dOUFJPVE9TOgorICAgIGNhc2UgTkVUU05NUF9JRklOVU5LTk9XTlBST1RPUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX25vcHJvdG87CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRPQ1RFVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9vYnl0ZXM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRVQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0KICAgICAgICAgICAgICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfb3BhY2tldHMgLQogICAgICAgICAgICAgaWZfbXNnLmlmbV9kYXRhLmlmaV9vbWNhc3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVROVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9vbWNhc3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRESVNDQVJEUzoKICNpZmRlZiBpZl9vZHJvcHMKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX29kcm9wczsKICNlbHNlCkBAIC02NTUsMTAgKzY4MSwxMCBAQAogICAgICAgICBsb25nX3JldHVybiA9IDA7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVEVSUk9SUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX29lcnJvcnM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkxBU1RDSEFOR0U6CisgICAgY2FzZSBORVRTTk1QX0lGTEFTVENIQU5HRToKICNpZmRlZiBpcml4NgogICAgICAgICBsb25nX3JldHVybiA9IDA7CiAjZWxzZQpAQCAtNzUyLDkgKzc3OCw2IEBACiAgICAgc3RhdGljIGNoYXIgICAgIE5hbWVbMTZdOwogICAgIGNoYXIgICAgICAgICAgICpjcDsKICAgICBjb25mX2lmX2xpc3QgICAqaWZfcHRyOwotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwotI2VuZGlmCiAKICAgICBpbnRlcmZhY2UgPQogICAgICAgICBoZWFkZXJfaWZFbnRyeSh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKTsKQEAgLTc2NSwxMCArNzg4LDEwIEBACiAgICAgaWZfcHRyID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X292ZXJyaWRlc19nZXQoTmFtZSk7CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgSUZJTkRFWDoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRFWDoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpbnRlcmZhY2U7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkRFU0NSOgorICAgIGNhc2UgTkVUU05NUF9JRkRFU0NSOgogICAgICAgICBjcCA9IE5hbWU7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGNwKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgY3A7CkBAIC03NzYsMjYgKzc5OSwyNiBAQAogICAgICAgICBpZiAoaWZfcHRyKQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9wdHItPnR5cGU7CiAgICAgICAgIGVsc2UgewotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfVFlQRQorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1RZUEUKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfdHlwZTsKICNlbHNlCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IDE7ICAgIC8qIE9USEVSICovCiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZNVFU6eworICAgIGNhc2UgTkVUU05NUF9JRk1UVTp7CiAgICAgICAgICAgICBsb25nX3JldHVybiA9IChsb25nKSBpZm5ldC5pZl9tdHU7CiAgICAgICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgICAgICB9Ci0gICAgY2FzZSBJRlNQRUVEOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUVEOgogICAgICAgICBpZiAoaWZfcHRyKQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9wdHItPnNwZWVkOwogICAgICAgICBlbHNlIHsKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFCisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEUKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfYmF1ZHJhdGU7Ci0jZWxpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1NQRUVECisjZWxpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9TUEVFRAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9zcGVlZDsKLSNlbGlmIFNUUlVDVF9JRk5FVF9IQVNfSUZfVFlQRSAmJiBkZWZpbmVkKElGVF9FVEhFUikKKyNlbGlmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1RZUEUgJiYgZGVmaW5lZChJRlRfRVRIRVIpCiAgICAgICAgICAgICBpZiAoaWZuZXQuaWZfdHlwZSA9PSBJRlRfRVRIRVIpCiAgICAgICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAxMDAwMDAwMDsKICAgICAgICAgICAgIGlmIChpZm5ldC5pZl90eXBlID09IElGVF9QMTApCkBAIC04MTQsOSArODM3LDkgQEAKICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlBIWVNBRERSRVNTOgorICAgIGNhc2UgTkVUU05NUF9JRlBIWVNBRERSRVNTOgogICAgICAgICBJbnRlcmZhY2VfR2V0X0V0aGVyX0J5X0luZGV4KGludGVyZmFjZSwgcmV0dXJuX2J1Zik7Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAJKnZhcl9sZW4gPSAwOwogI2Vsc2UKICAgICAgICAgaWYgKChyZXR1cm5fYnVmWzBdID09IDApICYmIChyZXR1cm5fYnVmWzFdID09IDApICYmCkBAIC04MjcsMTQgKzg1MCwxNCBAQAogICAgICAgICAgICAgKnZhcl9sZW4gPSA2OwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopIHJldHVybl9idWY7Ci0gICAgY2FzZSBJRkFETUlOU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRkFETUlOU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2ZsYWdzICYgSUZGX1VQID8gMSA6IDI7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9QRVJTVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGT1BFUlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9mbGFncyAmIElGRl9SVU5OSU5HID8gMSA6IDI7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkxBU1RDSEFOR0U6Ci0jaWYgZGVmaW5lZChTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfU0VDKSAmJiAhKGRlZmluZWQoZnJlZWJzZDIpICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTk5NjA3KQorICAgIGNhc2UgTkVUU05NUF9JRkxBU1RDSEFOR0U6CisjaWYgZGVmaW5lZChIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX1NFQykgJiYgIShkZWZpbmVkKGZyZWVic2QyKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDE5OTYwNykKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIC0gU05NUCdzIGlmTGFzdGNoYW5nZSBpcyB0aW1lIHdoZW4gb3AuIHN0YXR1cyBjaGFuZ2VkCiAgICAgICAgICAqICogRnJlZUJTRCdzIGlmX2xhc3RjaGFuZ2UgaXMgdGltZSB3aGVuIHBhY2tldCB3YXMgaW5wdXQgb3Igb3V0cHV0CkBAIC04NjMsOSArODg2LDkgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOyAgICAgICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5PQ1RFVFM6Ci0jaWZkZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JQllURVMKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRklOT0NURVRTOgorI2lmZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lCWVRFUworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pYnl0ZXMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pYnl0ZXM7CkBAIC04NzcsMTUgKzkwMCwxNSBAQAogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lwYWNrZXRzICogMzA4OyAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVDQVNUUEtUUzoKICAgICAgICAgewotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pcGFja2V0cyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pcGFja2V0czsKICNlbmRpZgotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSU1DQVNUUwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSU1DQVNUUworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgICAgIGxvbmdfcmV0dXJuIC09ICh1X2xvbmcpIGlmbmV0LmlmX2ltY2FzdHMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgICAgIGxvbmdfcmV0dXJuIC09ICh1X2xvbmcpIGlmbmV0LmlmX2ltY2FzdHM7CkBAIC04OTMsOSArOTE2LDkgQEAKICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOTlVDQVNUUEtUUzoKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lNQ0FTVFMKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRklOTlVDQVNUUEtUUzoKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JTUNBU1RTCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2ltY2FzdHMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pbWNhc3RzOwpAQCAtOTA3LDkgKzkzMCw5IEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgMDsgICAgICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5ESVNDQVJEUzoKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lRRFJPUFMKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRklORElTQ0FSRFM6CisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSVFEUk9QUworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pcWRyb3BzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaXFkcm9wczsKQEAgLTkyMSwxNiArOTQ0LDE2IEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgMDsgICAgICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5FUlJPUlM6Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkVSUk9SUzoKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaWVycm9ycyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2llcnJvcnM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VTktOT1dOUFJPVE9TOgotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTk9QUk9UTwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGSU5VTktOT1dOUFJPVE9TOgorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX05PUFJPVE8KKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfbm9wcm90byAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX25vcHJvdG87CkBAIC05NDIsOSArOTY1LDkgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSAwOyAgICAgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRPQ1RFVFM6Ci0jaWZkZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PQllURVMKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRk9VVE9DVEVUUzoKKyNpZmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PQllURVMKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb2J5dGVzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb2J5dGVzOwpAQCAtOTU2LDE1ICs5NzksMTUgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vcGFja2V0cyAqIDMwODsgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFVDQVNUUEtUUzoKICAgICAgICAgewotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vcGFja2V0cyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vcGFja2V0czsKICNlbmRpZgotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT01DQVNUUwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT01DQVNUUworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgICAgIGxvbmdfcmV0dXJuIC09ICh1X2xvbmcpIGlmbmV0LmlmX29tY2FzdHMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgICAgIGxvbmdfcmV0dXJuIC09ICh1X2xvbmcpIGlmbmV0LmlmX29tY2FzdHM7CkBAIC05NzIsOSArOTk1LDkgQEAKICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE5VQ0FTVFBLVFM6Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PTUNBU1RTCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVROVUNBU1RQS1RTOgorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09NQ0FTVFMKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb21jYXN0cyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29tY2FzdHM7CkBAIC05ODYsMjggKzEwMDksMjggQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSAwOyAgICAgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRESVNDQVJEUzoKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRk9VVERJU0NBUkRTOgorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9zbmQuaWZxX2Ryb3BzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfc25kLmlmcV9kcm9wczsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRFUlJPUlM6Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRFUlJPUlM6CisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX29lcnJvcnMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9vZXJyb3JzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFFMRU46Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRRTEVOOgorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9zbmQuaWZxX2xlbiAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX3NuZC5pZnFfbGVuOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUNJRklDOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUNJRklDOgogICAgICAgICAqdmFyX2xlbiA9IG51bGxPaWRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIG51bGxPaWQ7CiAgICAgZGVmYXVsdDoKQEAgLTEwNDAsNyArMTA2Myw3IEBACiAgICAgc3RhdGljIGNoYXIgICAgIE5hbWVbMTZdOwogI2VuZGlmCiAgICAgcmVnaXN0ZXIgY2hhciAgKmNwOwotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX1NFQwogICAgIHN0cnVjdCB0aW1ldmFsICBub3c7CiAjZW5kaWYKICNpZiAhZGVmaW5lZChocHV4MTEpCkBAIC0xMDgzLDEwICsxMTA2LDEwIEBACiAgICAgaWZfcHRyID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X292ZXJyaWRlc19nZXQoTmFtZSk7CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgSUZJTkRFWDoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRFWDoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpbnRlcmZhY2U7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkRFU0NSOgorICAgIGNhc2UgTkVUU05NUF9JRkRFU0NSOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBjcCA9IGlmbmV0LmlmX2VudHJ5LmlmRGVzY3I7CiAjZWxzZQpAQCAtMTExMSw3ICsxMTM0LDcgQEAKICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk1UVTp7CisgICAgY2FzZSBORVRTTk1QX0lGTVRVOnsKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKGxvbmcpIGlmbmV0LmlmX2VudHJ5LmlmTXR1OwogI2Vsc2UKQEAgLTExMTksNyArMTE0Miw3IEBACiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgICAgIH0KLSAgICBjYXNlIElGU1BFRUQ6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFRUQ6CiAgICAgICAgIGlmIChpZl9wdHIpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmX3B0ci0+c3BlZWQ7CiAgICAgICAgIGVsc2UgewpAQCAtMTEzMyw3ICsxMTU2LDcgQEAKICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlBIWVNBRERSRVNTOgorICAgIGNhc2UgTkVUU05NUF9JRlBIWVNBRERSRVNTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICAqdmFyX2xlbiA9IGlmbmV0LmlmX2VudHJ5LmlmUGh5c0FkZHJlc3Mub19sZW5ndGg7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIGlmbmV0LmlmX2VudHJ5LmlmUGh5c0FkZHJlc3Mub19ieXRlczsKQEAgLTExNDcsMjEgKzExNzAsMjEgQEAKICAgICAgICAgICAgICp2YXJfbGVuID0gNjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgcmV0dXJuX2J1ZjsKICNlbmRpZgotICAgIGNhc2UgSUZBRE1JTlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZBRE1JTlNUQVRVUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZkFkbWluOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9mbGFncyAmIElGRl9VUCA/IDEgOiAyOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9QRVJTVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGT1BFUlNUQVRVUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZk9wZXI7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2ZsYWdzICYgSUZGX1JVTk5JTkcgPyAxIDogMjsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZMQVNUQ0hBTkdFOgorICAgIGNhc2UgTkVUU05NUF9JRkxBU1RDSEFOR0U6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZMYXN0Q2hhbmdlOwogI2Vsc2UKQEAgLTExNzEsNyArMTE5NCw3IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9IDA7ICAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRklOT0NURVRTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmSW5PY3RldHM7CiAjZWxzZQpAQCAtMTE4MSw3ICsxMjA0LDcgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaXBhY2tldHMgKiAzMDg7ICAgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVDQVNUUEtUUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZkluVWNhc3RQa3RzOwogI2Vsc2UKQEAgLTExOTEsNyArMTIxNCw3IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lwYWNrZXRzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk5VQ0FTVFBLVFM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZJbk5VY2FzdFBrdHM7CiAjZWxzZQpAQCAtMTIwMSw3ICsxMjI0LDcgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgMDsgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkRJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRklORElTQ0FSRFM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZJbkRpc2NhcmRzOwogI2Vsc2UKQEAgLTEyMTEsMTQgKzEyMzQsMTQgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgMDsgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkVSUk9SUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZkluRXJyb3JzOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9pZXJyb3JzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVU5LTk9XTlBST1RPUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVOS05PV05QUk9UT1M6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZJblVua25vd25Qcm90b3M7CiAjZWxzZQpAQCAtMTIyOCw3ICsxMjUxLDcgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgMDsgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRPQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUT0NURVRTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmT3V0T2N0ZXRzOwogI2Vsc2UKQEAgLTEyMzgsNyArMTI2MSw3IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29wYWNrZXRzICogMzA4OyAgICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFVDQVNUUEtUUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZk91dFVjYXN0UGt0czsKICNlbHNlCkBAIC0xMjQ4LDcgKzEyNzEsNyBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vcGFja2V0czsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVROVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE5VQ0FTVFBLVFM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZPdXROVWNhc3RQa3RzOwogI2Vsc2UKQEAgLTEyNTgsMjggKzEyODEsMjggQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgMDsgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRESVNDQVJEUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZk91dERpc2NhcmRzOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9zbmQuaWZxX2Ryb3BzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVEVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRFUlJPUlM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZPdXRFcnJvcnM7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX29lcnJvcnM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUUUxFTjoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRRTEVOOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmT3V0UWxlbjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfc25kLmlmcV9sZW47CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFQ0lGSUM6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFQ0lGSUM6CiAgICAgICAgICp2YXJfbGVuID0gbnVsbE9pZExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgbnVsbE9pZDsKICAgICBkZWZhdWx0OgpAQCAtMTMzMSwxMCArMTM1NCwxMCBAQAogICAgICAqIGlmX3B0ciA9IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9vdmVycmlkZXNfZ2V0KE5hbWUpOwogICAgICAqLwogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBJRklOREVYOgorICAgIGNhc2UgTkVUU05NUF9JRklOREVYOgogICAgICAgICBsb25nX3JldHVybiA9IGlmc3RhdC5pZkluZGV4OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZERVNDUjoKKyAgICBjYXNlIE5FVFNOTVBfSUZERVNDUjoKICAgICAgICAgKnZhcl9sZW4gPSBpZnN0YXQuaWZEZXNjci5vX2xlbmd0aDsKICAgICAgICAgKHZvaWQpIG1lbWNweShyZXR1cm5fYnVmLCBpZnN0YXQuaWZEZXNjci5vX2J5dGVzLCAqdmFyX2xlbik7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIHJldHVybl9idWY7CkBAIC0xMzQ0LDY1ICsxMzY3LDY1IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZUeXBlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZNVFU6CisgICAgY2FzZSBORVRTTk1QX0lGTVRVOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZk10dTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFRUQ6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFRUQ6CiAgICAgICAgIGlmIChpZl9wdHIpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmX3B0ci0+c3BlZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZTcGVlZDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGUEhZU0FERFJFU1M6CisgICAgY2FzZSBORVRTTk1QX0lGUEhZU0FERFJFU1M6CiAgICAgICAgICp2YXJfbGVuID0gaWZzdGF0LmlmUGh5c0FkZHJlc3Mub19sZW5ndGg7CiAgICAgICAgICh2b2lkKSBtZW1jcHkocmV0dXJuX2J1ZiwgaWZzdGF0LmlmUGh5c0FkZHJlc3Mub19ieXRlcywgKnZhcl9sZW4pOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSByZXR1cm5fYnVmOwotICAgIGNhc2UgSUZBRE1JTlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZBRE1JTlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZBZG1pblN0YXR1czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1BFUlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPUEVSU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZk9wZXJTdGF0dXM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkxBU1RDSEFOR0U6CisgICAgY2FzZSBORVRTTk1QX0lGTEFTVENIQU5HRToKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZMYXN0Q2hhbmdlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk9DVEVUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZJbk9jdGV0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmSW5VY2FzdFBrdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmSW5OVWNhc3RQa3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkRJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRklORElTQ0FSRFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmSW5EaXNjYXJkczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5FUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5FUlJPUlM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmSW5FcnJvcnM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVU5LTk9XTlBST1RPUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVOS05PV05QUk9UT1M6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmSW5Vbmtub3duUHJvdG9zOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRPQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUT0NURVRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZk91dE9jdGV0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZPdXRVY2FzdFBrdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZPdXROVWNhc3RQa3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRESVNDQVJEUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZPdXREaXNjYXJkczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVEVSUk9SUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZPdXRFcnJvcnM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFFMRU46CisgICAgY2FzZSBORVRTTk1QX0lGT1VUUUxFTjoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZPdXRRTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVDSUZJQzoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVDSUZJQzoKIAlsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZlNwZWNpZmljOwogCXJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgZGVmYXVsdDoKQEAgLTE1MDIsNyArMTUyNSw3IEBACiAKICNpZmRlZiBsaW51eAogICAgIC8qICBkaXNhbGxvdyByZWxvYWRpbmcgb2Ygc3RydWN0dXJlcyB0b28gb2Z0ZW4gKi8KLSAgICBnZXR0aW1lb2ZkYXkgKCAmZXQsICggc3RydWN0IHRpbWV6b25lICogKSAwICk7ICAvKiAgZ2V0IHRpbWUtb2YtZGF5ICovCisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZldCk7CiAgICAgaWYgKCBldC50dl9zZWMgPCBMYXN0TG9hZCArIE1JTkxPQURGUkVRICkgeyAgICAgLyogIG9ubHkgcmVsb2FkIHNvIG9mdGVuICovCiAgICAgICBpZm5ldGFkZHIgPSBpZm5ldGFkZHJfbGlzdDsgICAgICAgICAgICAgICAgICAgLyogIGluaXRpYWxpemUgcG9pbnRlciAqLwogICAgICAgcmV0dXJuOwpAQCAtMTUzOCw3ICsxNTYxLDcgQEAKICAgICAgKi8KICAgICBpZiAoIShkZXZpbiA9IGZvcGVuKCIvcHJvYy9uZXQvZGV2IiwgInIiKSkpIHsKICAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L2RldiAtIGNvbnRpbnVpbmcuLi5cbiIpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvZGV2LlxuIikpOwogICAgICAgICByZXR1cm47IC8qKiBleGl0ICgxKTsgKiovCiAgICAgfQogCkBAIC0xODc5LDYgKzE5MDIsMTAgQEAKICNpZmRlZiBsaW51eAogICAgICAgICBzdHJsY2F0KHNhdmVOYW1lLCBpZm5ldC5pZl91bml0LCBzaXplb2Yoc2F2ZU5hbWUpKTsKICNlbHNlCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU4KKyAgICAgICAgLyogdGhpcyBleGlzdHMgaGVyZSBqdXN0IHNvIHdlIGRvbid0IGNvcHkgaWZkZWYgbG9naWMgZWxzZXdoZXJlICovCisgICAgICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ19hcHBlbmRfaW50KTsKKyNlbmRpZgogICAgICAgICBzdHJpbmdfYXBwZW5kX2ludChjcCwgaWZuZXQuaWZfdW5pdCk7CiAjZW5kaWYKICAgICAgICAgaWYgKDEgfHwgc3RyY21wKHNhdmVOYW1lLCAibG8wIikgIT0gMCkgeyAgICAgICAgLyogWFhYICovCkBAIC0xOTQ3LDEwICsxOTc0LDEzIEBACiAgICAgaW50ICAgICAgICAgICAgIHJldDsKIAogICAgIGlmICghaWZfcHRyKSB7Ci0gICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgaWYgKGNvdW50KSB7CiAgICAgICAgICAgICBpZl9wdHIgPQogICAgICAgICAgICAgICAgIChubWFwaV9waHlzdGF0ICopIG1hbGxvYyhzaXplb2Yobm1hcGlfcGh5c3RhdCkgKiBjb3VudCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIChpZl9wdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKDApOworCisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuICgwKTsgICAgICAgICAvKiBFT0YgKi8KICAgICB9CiAKQEAgLTE5OTcsNyArMjAyNyw3IEBACiAgICAgc3RydWN0IGlmbmV0ICAgIGlmbmV0OwogICAgIHN0cnVjdCBpbl9pZmFkZHIgKmlhLCBpbl9pZmFkZHI7CiAgICAgc2hvcnQgICAgICAgICAgIGhhc19pcGFkZHIgPSAwOwotI2lmICFTVFJVQ1RfSUZORVRfSEFTX0lGX1hOQU1FCisjaWYgIUhBVkVfU1RSVUNUX0lGTkVUX0lGX1hOQU1FCiAgICAgcmVnaXN0ZXIgY2hhciAgKmNwOwogI2VuZGlmCiAKQEAgLTIwMDksNyArMjAzOSw3IEBACiAgICAgICAgICAgICBERUJVR01TR1RMKCgibWliSUkvaW50ZXJmYWNlczpJbnRlcmZhY2VfU2Nhbl9OZXh0IiwgImtsb29rdXAgZmFpbGVkXG4iKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9YTkFNRQogI2lmIGRlZmluZWQobmV0YnNkMSkgfHwgZGVmaW5lZChvcGVuYnNkMikKICAgICAgICAgc3RybGNweShzYXZlTmFtZSwgaWZuZXQuaWZfeG5hbWUsIHNpemVvZihzYXZlTmFtZSkpOwogI2Vsc2UKQEAgLTIwMjcsNiArMjA1NywxMCBAQAogCiAgICAgICAgIHNhdmVOYW1lW3NpemVvZihzYXZlTmFtZSkgLSAxXSA9ICdcMCc7CiAgICAgICAgIGNwID0gc3RyY2hyKHNhdmVOYW1lLCAnXDAnKTsKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTgorICAgICAgICAvKiB0aGlzIGV4aXN0cyBoZXJlIGp1c3Qgc28gd2UgZG9uJ3QgY29weSBpZmRlZiBsb2dpYyBlbHNld2hlcmUgKi8KKyAgICAgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3RyaW5nX2FwcGVuZF9pbnQpOworI2VuZGlmCiAgICAgICAgIHN0cmluZ19hcHBlbmRfaW50KGNwLCBpZm5ldC5pZl91bml0KTsKICNlbmRpZgogICAgICAgICBpZiAoMSB8fCBzdHJjbXAoc2F2ZU5hbWUsICJsbzAiKSAhPSAwKSB7ICAgICAgICAvKiBYWFggKi8KQEAgLTIwNjgsNyArMjEwMiw3IEBACiAjZW5kaWYKICAgICAgICAgICAgIH0KIAotI2lmICFkZWZpbmVkKG5ldGJzZDEpICYmICFkZWZpbmVkKGZyZWVic2QyKSAmJiAhZGVmaW5lZChvcGVuYnNkMikgJiYgIWRlZmluZWQoU1RSVUNUX0lGTkVUX0hBU19JRl9BRERSTElTVCkKKyNpZiAhZGVmaW5lZChuZXRic2QxKSAmJiAhZGVmaW5lZChmcmVlYnNkMikgJiYgIWRlZmluZWQob3BlbmJzZDIpICYmICFkZWZpbmVkKEhBVkVfU1RSVUNUX0lGTkVUX0lGX0FERFJMSVNUKQogICAgICAgICAgICAgaWZuZXQuaWZfYWRkcmxpc3QgPSAoc3RydWN0IGlmYWRkciAqKSBpYTsgICAvKiBXUk9ORyBEQVRBIFRZUEU7IE9OTFkgQSBGTEFHICovCiAjZW5kaWYKICAgICAgICAgICAgIC8qCkBAIC0yNTI5LDEwICsyNTYzLDEwIEBACiAgICAgICovCiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgSUZJTkRFWDoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRFWDoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpbnRlcmZhY2U7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkRFU0NSOgorICAgIGNhc2UgTkVUU05NUF9JRkRFU0NSOgogICAgICAgICBjcCA9IGlmbWQuaWZtZF9uYW1lOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihjcCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIGNwOwpAQCAtMjU0MiwxNiArMjU3NiwxNiBAQAogICAgICAgICBlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZtZC5pZm1kX2RhdGEuaWZpX3R5cGU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk1UVToKKyAgICBjYXNlIE5FVFNOTVBfSUZNVFU6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKGxvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9tdHU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUVEOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUVEOgogICAgICAgICBpZiAoaWZfcHRyKQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9wdHItPnNwZWVkOwogICAgICAgICBlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZtZC5pZm1kX2RhdGEuaWZpX2JhdWRyYXRlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZQSFlTQUREUkVTUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZQSFlTQUREUkVTUzoKICAgICAgICAgewogICAgICAgICAgICAgY2hhciAgICAgICAgICAgKmNwOwogICAgICAgICAgICAgaWYgKGdldF9waHlzX2FkZHJlc3MoaW50ZXJmYWNlLCAmY3AsIHZhcl9sZW4pKQpAQCAtMjU1OSwxMyArMjU5MywxMyBAQAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBjcDsKICAgICAgICAgfQotICAgIGNhc2UgSUZBRE1JTlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZBRE1JTlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm1kLmlmbWRfZmxhZ3MgJiBJRkZfVVAgPyAxIDogMjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1BFUlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPUEVSU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmbWQuaWZtZF9mbGFncyAmIElGRl9SVU5OSU5HID8gMSA6IDI7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkxBU1RDSEFOR0U6CisgICAgY2FzZSBORVRTTk1QX0lGTEFTVENIQU5HRToKICAgICAgICAgaWYgKGlmbWQuaWZtZF9kYXRhLmlmaV9sYXN0Y2hhbmdlLnR2X3NlYyA9PSAwICYmCiAgICAgICAgICAgICBpZm1kLmlmbWRfZGF0YS5pZmlfbGFzdGNoYW5nZS50dl91c2VjID09IDApIHsKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsKQEAgLTI1NzksNDUgKzI2MTMsNDUgQEAKICAgICAgICAgICAgICAgICAgICBzdGFydHRpbWUudHZfdXNlYykgLyAxMDAwMCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRklOT0NURVRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9pYnl0ZXM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9pcGFja2V0czsKICAgICAgICAgbG9uZ19yZXR1cm4gLT0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX2ltY2FzdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX2ltY2FzdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ESVNDQVJEUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfaXFkcm9wczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5FUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5FUlJPUlM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZtZC5pZm1kX2RhdGEuaWZpX2llcnJvcnM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVU5LTk9XTlBST1RPUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVOS05PV05QUk9UT1M6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX25vcHJvdG87CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVE9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRPQ1RFVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX29ieXRlczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfb3BhY2tldHM7CiAgICAgICAgIGxvbmdfcmV0dXJuIC09ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9vbWNhc3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVROVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX29tY2FzdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVERJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVERJU0NBUkRTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmbWQuaWZtZF9zbmRfZHJvcHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVEVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRFUlJPUlM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZtZC5pZm1kX2RhdGEuaWZpX29lcnJvcnM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFFMRU46CisgICAgY2FzZSBORVRTTk1QX0lGT1VUUUxFTjoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm1kLmlmbWRfc25kX2xlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFQ0lGSUM6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFQ0lGSUM6CiAgICAgICAgICp2YXJfbGVuID0gbnVsbE9pZExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgbnVsbE9pZDsKICAgICBkZWZhdWx0OgpAQCAtMjYzMCwxMCArMjY2NCwxMiBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIQVZFX05FVF9JRl9NSUJfSCAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhVVNFX1NZU0NUTF9JRkxJU1QgKi8KIAotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU4zMiBjeWd3aW4gKi8KKyNlbGlmIGRlZmluZWQoSEFWRV9JUEhMUEFQSV9IKSAgLyogV0lOMzIgY3lnd2luICovCiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIFdyaXRlTWV0aG9kICAgICB3cml0ZUlmRW50cnk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogbG9uZyAgICAgICAgICAgIGFkbWluX3N0YXR1cyA9IDA7CiBsb25nICAgICAgICAgICAgb2xkYWRtaW5fc3RhdHVzID0gMDsKIApAQCAtMjcxMiw3ICsyNzQ4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgSUZOVU1CRVI6CisgICAgY2FzZSBORVRTTk1QX0lGTlVNQkVSOgogICAgICAgICBuZXRzbm1wX2Fzc2VydChzaXplb2YoRFdPUkQpID09IHNpemVvZihsb25nX3JldHVybikpOwogICAgICAgICBHZXROdW1iZXJPZkludGVyZmFjZXMoKERXT1JEICopICZsb25nX3JldHVybik7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CkBAIC0yNzUwLDEwICsyNzg2LDEwIEBACiAgICAgaWYgKEdldElmRW50cnkoJmlmUm93KSAhPSBOT19FUlJPUikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIElGSU5ERVg6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZJbmRleDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGREVTQ1I6CisgICAgY2FzZSBORVRTTk1QX0lGREVTQ1I6CiAgICAgICAgICp2YXJfbGVuID0gaWZSb3cuZHdEZXNjckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgaWZSb3cuYkRlc2NyOwogICAgIGNhc2UgTkVUU05NUF9JRlRZUEU6CkBAIC0yNzYyLDY4ICsyNzk4LDcwIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd1R5cGU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk1UVToKKyAgICBjYXNlIE5FVFNOTVBfSUZNVFU6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKGxvbmcpIGlmUm93LmR3TXR1OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVFRDoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVFRDoKICAgICAgICAgaWYgKGlmX3B0cikKLSAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfcHRyLT5zcGVlZDsKKyAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKGxvbmcpIGlmX3B0ci0+c3BlZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAobG9uZykgaWZSb3cuZHdTcGVlZDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGUEhZU0FERFJFU1M6CisgICAgY2FzZSBORVRTTk1QX0lGUEhZU0FERFJFU1M6CiAgICAgICAgICp2YXJfbGVuID0gaWZSb3cuZHdQaHlzQWRkckxlbjsKICAgICAgICAgbWVtY3B5KHJldHVybl9idWYsIGlmUm93LmJQaHlzQWRkciwgKnZhcl9sZW4pOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSByZXR1cm5fYnVmOwotICAgIGNhc2UgSUZBRE1JTlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZBRE1JTlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd0FkbWluU3RhdHVzOwogICAgICAgICBhZG1pbl9zdGF0dXMgPSBsb25nX3JldHVybjsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZUlmRW50cnk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPUEVSU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRk9QRVJTVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0KICAgICAgICAgICAgKE1JQl9JRl9PUEVSX1NUQVRVU19PUEVSQVRJT05BTCA9PSBpZlJvdy5kd09wZXJTdGF0dXMpID8gMSA6IDI7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkxBU1RDSEFOR0U6CisgICAgY2FzZSBORVRTTk1QX0lGTEFTVENIQU5HRToKICAgICAgICAgbG9uZ19yZXR1cm4gPSAwIC8qIFhYWCBub3QgYSBVTklYIGVwb2NoYWwgdGltZSBpZlJvdy5kd0xhc3RDaGFuZ2UgKi8gOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk9DVEVUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd0luT2N0ZXRzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd0luVWNhc3RQa3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5OVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3SW5OVWNhc3RQa3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkRJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRklORElTQ0FSRFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdJbkRpc2NhcmRzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkVSUk9SUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd0luRXJyb3JzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVOS05PV05QUk9UT1M6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VTktOT1dOUFJPVE9TOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3SW5Vbmtub3duUHJvdG9zOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRPQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUT0NURVRTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3T3V0T2N0ZXRzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRVQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3T3V0VWNhc3RQa3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVROVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdPdXROVWNhc3RQa3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRESVNDQVJEUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd091dERpc2NhcmRzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRFUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURVJST1JTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3T3V0RXJyb3JzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRRTEVOOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFFMRU46CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdPdXRRTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVDSUZJQzoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVDSUZJQzoKICAgICAgICAgKnZhcl9sZW4gPSBudWxsT2lkTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBudWxsT2lkOwogICAgIGRlZmF1bHQ6CkBAIC0yODM0LDYgKzI4NzIsNyBAQAogfQogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBpbnQKIHdyaXRlSWZFbnRyeShpbnQgYWN0aW9uLAogICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC0yODQyLDcgKzI4ODEsNyBAQAogICAgICAgICAgICAgIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCiB7CiAgICAgTUlCX0lGUk9XICAgICAgIGlmRW50cnlSb3c7Ci0gICAgaWYgKChjaGFyKSBuYW1lWzldICE9IElGQURNSU5TVEFUVVMpIHsKKyAgICBpZiAoKGNoYXIpIG5hbWVbOV0gIT0gTkVUU05NUF9JRkFETUlOU1RBVFVTKSB7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKICAgICB9CiAKQEAgLTI5MDUsNCArMjk0NCw1IEBACiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2Ygd3JpdGVJZkVudHJ5ICovCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgY3lnd2luICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmgKaW5kZXggNTFkNGIxZC4uYzE5YjdhNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuaApAQCAtOCw3ICs4LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogY29uZmlndXJlIG1hY3JvcwogICovCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogLyoKICAqIGNvbmZsaWN0cyB3aXRoIHRoZSBuZXcgTUZEIHJld3JpdGUKQEAgLTYxLDI5ICs2MSwyOSBAQAogCiAjZW5kaWYgLyogVVNJTkdfSUZfTUlCX0lGVEFCTEVfTU9EVUxFICovCiAKLSNkZWZpbmUgSUZOVU1CRVIgICAgICAgIDAKLSNkZWZpbmUgSUZJTkRFWCAgICAgICAgIDEKLSNkZWZpbmUgSUZERVNDUiAgICAgICAgIDIKKyNkZWZpbmUgTkVUU05NUF9JRk5VTUJFUiAgICAgICAgMAorI2RlZmluZSBORVRTTk1QX0lGSU5ERVggICAgICAgICAxCisjZGVmaW5lIE5FVFNOTVBfSUZERVNDUiAgICAgICAgIDIKICNkZWZpbmUgTkVUU05NUF9JRlRZUEUgICAgICAgICAgMwotI2RlZmluZSBJRk1UVSAgICAgICAgICAgNAotI2RlZmluZSBJRlNQRUVEICAgICAgICAgNQotI2RlZmluZSBJRlBIWVNBRERSRVNTICAgNgotI2RlZmluZSBJRkFETUlOU1RBVFVTICAgNwotI2RlZmluZSBJRk9QRVJTVEFUVVMgICAgOAotI2RlZmluZSBJRkxBU1RDSEFOR0UgICAgOQotI2RlZmluZSBJRklOT0NURVRTICAgICAgMTAKLSNkZWZpbmUgSUZJTlVDQVNUUEtUUyAgIDExCi0jZGVmaW5lIElGSU5OVUNBU1RQS1RTICAxMgotI2RlZmluZSBJRklORElTQ0FSRFMgICAgMTMKLSNkZWZpbmUgSUZJTkVSUk9SUyAgICAgIDE0Ci0jZGVmaW5lIElGSU5VTktOT1dOUFJPVE9TIDE1Ci0jZGVmaW5lIElGT1VUT0NURVRTICAgICAxNgotI2RlZmluZSBJRk9VVFVDQVNUUEtUUyAgMTcKLSNkZWZpbmUgSUZPVVROVUNBU1RQS1RTIDE4Ci0jZGVmaW5lIElGT1VURElTQ0FSRFMgICAxOQotI2RlZmluZSBJRk9VVEVSUk9SUyAgICAgMjAKLSNkZWZpbmUgSUZPVVRRTEVOICAgICAgIDIxCi0jZGVmaW5lIElGU1BFQ0lGSUMgICAgICAyMgorI2RlZmluZSBORVRTTk1QX0lGTVRVICAgICAgICAgICA0CisjZGVmaW5lIE5FVFNOTVBfSUZTUEVFRCAgICAgICAgIDUKKyNkZWZpbmUgTkVUU05NUF9JRlBIWVNBRERSRVNTICAgNgorI2RlZmluZSBORVRTTk1QX0lGQURNSU5TVEFUVVMgICA3CisjZGVmaW5lIE5FVFNOTVBfSUZPUEVSU1RBVFVTICAgIDgKKyNkZWZpbmUgTkVUU05NUF9JRkxBU1RDSEFOR0UgICAgOQorI2RlZmluZSBORVRTTk1QX0lGSU5PQ1RFVFMgICAgICAxMAorI2RlZmluZSBORVRTTk1QX0lGSU5VQ0FTVFBLVFMgICAxMQorI2RlZmluZSBORVRTTk1QX0lGSU5OVUNBU1RQS1RTICAxMgorI2RlZmluZSBORVRTTk1QX0lGSU5ESVNDQVJEUyAgICAxMworI2RlZmluZSBORVRTTk1QX0lGSU5FUlJPUlMgICAgICAxNAorI2RlZmluZSBORVRTTk1QX0lGSU5VTktOT1dOUFJPVE9TIDE1CisjZGVmaW5lIE5FVFNOTVBfSUZPVVRPQ1RFVFMgICAgIDE2CisjZGVmaW5lIE5FVFNOTVBfSUZPVVRVQ0FTVFBLVFMgIDE3CisjZGVmaW5lIE5FVFNOTVBfSUZPVVROVUNBU1RQS1RTIDE4CisjZGVmaW5lIE5FVFNOTVBfSUZPVVRESVNDQVJEUyAgIDE5CisjZGVmaW5lIE5FVFNOTVBfSUZPVVRFUlJPUlMgICAgIDIwCisjZGVmaW5lIE5FVFNOTVBfSUZPVVRRTEVOICAgICAgIDIxCisjZGVmaW5lIE5FVFNOTVBfSUZTUEVDSUZJQyAgICAgIDIyCiAKICNpZmRlZiBsaW51eAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcC5jCmluZGV4IDY3MTdlMmUuLmYzOWQzMjIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYwpAQCAtMTksMTIgKzE5LDEyIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIgogI2luY2x1ZGUgImlwLmgiCiAjaW5jbHVkZSAiaXBBZGRyLmgiCiAjaW5jbHVkZSAiaW50ZXJmYWNlcy5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKIAogI2lmbmRlZiBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAogI2RlZmluZSBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAk1CkBAIC0zMyw3ICszMywxMCBAQAogI2RlZmluZSBJUF9TVEFUU19DQUNIRV9USU1FT1VUCU1JQl9TVEFUU19DQUNIRV9USU1FT1VUCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9MSUJQRVJGU1RBVF9IKSAmJiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikpICYmICFkZWZpbmVkKEZJUlNUX1BST1RPQ09MKQorI2lmIGRlZmluZWQoSEFWRV9MSUJQRVJGU1RBVF9IKSAmJiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KSkgJiYgIWRlZmluZWQoRklSU1RfUFJPVE9DT0wpCisjaWZkZWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAjaWZkZWYgRklSU1RfUFJPVE9DT0wKIHBlcmZzdGF0X3Byb3RvY29sX3QgcHNfcHJvdG87CkBAIC02NCw0MyArNjcsNjkgQEAKICAqIGluZm9ybWF0aW9uIGF0IAogICovCiBzdHJ1Y3QgdmFyaWFibGUxIGlwYWRkcl92YXJpYWJsZXNbXSA9IHsKLSAgICB7SVBBREFERFIsICAgICAgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9pcEFkZHJFbnRyeSwgMSwgezF9fSwKLSAgICB7SVBBRElGSU5ERVgsICAgQVNOX0lOVEVHRVIsICAgUk9OTFksIHZhcl9pcEFkZHJFbnRyeSwgMSwgezJ9fSwKKyAgICB7SVBBREFERFIsICAgICAgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcEFkZHJFbnRyeSwgMSwgezF9fSwKKyAgICB7SVBBRElGSU5ERVgsICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcEFkZHJFbnRyeSwgMSwgezJ9fSwKICNpZm5kZWYgc3VuVjMKLSAgICB7SVBBRE5FVE1BU0ssICAgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9pcEFkZHJFbnRyeSwgMSwgezN9fSwKKyAgICB7SVBBRE5FVE1BU0ssICAgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcEFkZHJFbnRyeSwgMSwgezN9fSwKICNlbmRpZgotICAgIHtJUEFEQkNBU1RBRERSLCBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2lwQWRkckVudHJ5LCAxLCB7NH19LAotICAgIHtJUEFEUkVBU01NQVgsICBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2lwQWRkckVudHJ5LCAxLCB7NX19CisgICAge0lQQURCQ0FTVEFERFIsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBBZGRyRW50cnksIDEsIHs0fX0sCisgICAge0lQQURSRUFTTU1BWCwgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBBZGRyRW50cnksIDEsIHs1fX0KIH07CiAKIHN0cnVjdCB2YXJpYWJsZTEgaXByb3V0ZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7SVBST1VURURFU1QsICAgIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezF9fSwKLSAgICB7SVBST1VURUlGSU5ERVgsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezJ9fSwKLSAgICB7SVBST1VURU1FVFJJQzEsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezN9fSwKLSAgICB7SVBST1VURU1FVFJJQzIsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezR9fSwKLSAgICB7SVBST1VURU1FVFJJQzMsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezV9fSwKLSAgICB7SVBST1VURU1FVFJJQzQsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezZ9fSwKLSAgICB7SVBST1VURU5FWFRIT1AsIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezd9fSwKLSAgICB7SVBST1VURVRZUEUsICAgIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezh9fSwKLSAgICB7SVBST1VURVBST1RPLCAgIEFTTl9JTlRFR0VSLCAgIFJPTkxZLCAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezl9fSwKLSAgICB7SVBST1VURUFHRSwgICAgIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezEwfX0sCi0gICAge0lQUk9VVEVNQVNLLCAgICBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxMX19LAotICAgIHtJUFJPVVRFTUVUUklDNSwgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MTJ9fSwKLSAgICB7SVBST1VURUlORk8sICAgIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezEzfX0KKyAgICB7SVBST1VURURFU1QsICAgIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezF9fSwKKyAgICB7SVBST1VURUlGSU5ERVgsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezJ9fSwKKyAgICB7SVBST1VURU1FVFJJQzEsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezN9fSwKKyAgICB7SVBST1VURU1FVFJJQzIsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezR9fSwKKyAgICB7SVBST1VURU1FVFJJQzMsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezV9fSwKKyAgICB7SVBST1VURU1FVFJJQzQsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezZ9fSwKKyAgICB7SVBST1VURU5FWFRIT1AsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezd9fSwKKyAgICB7SVBST1VURVRZUEUsICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezh9fSwKKyAgICB7SVBST1VURVBST1RPLCAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7OX19LAorICAgIHtJUFJPVVRFQUdFLCAgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MTB9fSwKKyAgICB7SVBST1VURU1BU0ssICAgIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezExfX0sCisgICAge0lQUk9VVEVNRVRSSUM1LCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxMn19LAorICAgIHtJUFJPVVRFSU5GTywgICAgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxM319CiB9OwogCiBzdHJ1Y3QgdmFyaWFibGUxIGlwbWVkaWFfdmFyaWFibGVzW10gPSB7CiAjaWZkZWYgVVNJTkdfTUlCSUlfQVRfTU9EVUxFCiAjaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKLSAgICB7SVBNRURJQUlGSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9hdEVudHJ5LCAxLCB7MX19LAotICAgIHtJUE1FRElBUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2F0RW50cnksIDEsIHsyfX0sCi0gICAge0lQTUVESUFORVRBRERSRVNTLCAgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfYXRFbnRyeSwgMSwgezN9fSwKLSAgICB7SVBNRURJQVRZUEUsICAgICAgICBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9hdEVudHJ5LCAxLCB7NH19CisgICAge0lQTUVESUFJRklOREVYLCAgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezF9fSwKKyAgICB7SVBNRURJQVBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7Mn19LAorICAgIHtJUE1FRElBTkVUQUREUkVTUywgIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHszfX0sCisgICAge0lQTUVESUFUWVBFLCAgICAgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezR9fQogI2Vsc2UKLSAgICB7SVBNRURJQUlGSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2F0RW50cnksIDEsIHsxfX0sCi0gICAge0lQTUVESUFQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9hdEVudHJ5LCAxLCB7Mn19LAotICAgIHtJUE1FRElBTkVUQUREUkVTUywgIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfYXRFbnRyeSwgMSwgezN9fSwKLSAgICB7SVBNRURJQVRZUEUsICAgICAgICBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2F0RW50cnksIDEsIHs0fX0KKyAgICB7SVBNRURJQUlGSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHsxfX0sCisgICAge0lQTUVESUFQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7Mn19LAorICAgIHtJUE1FRElBTkVUQUREUkVTUywgIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezN9fSwKKyAgICB7SVBNRURJQVRZUEUsICAgICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHs0fX0KICNlbmRpZgogI2VuZGlmCiB9OwpAQCAtMTIyLDYgKzE1MSw3IEBACiBpbml0X2lwKHZvaWQpCiB7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKKyAgICBpbnQgcmM7CiAKICAgICAvKgogICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCBhcyBhIGdyb3VwIG9mIHNjYWxhcnMuLi4KQEAgLTEyOSw3ICsxNTksOSBAQAogICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pcCIsICJJbml0aWFsaXNpbmcgSVAgZ3JvdXBcbiIpKTsKICAgICByZWdpbmZvID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImlwIiwgaXBfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcF9vaWQsIE9JRF9MRU5HVEgoaXBfb2lkKSwgSEFORExFUl9DQU5fUk9OTFkpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm8sIElQRk9SV0FSRElORywgSVBST1VURURJU0NBUkRTKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm8sIElQRk9SV0FSRElORywgSVBST1VURURJU0NBUkRTKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47CiAKICAgICAvKgogICAgICAqIC4uLi4gd2l0aCBhIGxvY2FsIGNhY2hlCkBAIC0yMDAsMTIgKzIzMiwxMiBAQAogI2VuZGlmCiAKICNpZmRlZiBORVRCU0RfU1RBVFNfVklBX1NZU0NUTAotI2RlZmluZSBJUF9TVEFUX1NUUlVDVFVSRSAgICAgIHN0cnVjdCBpcF9taWIKKyNkZWZpbmUgSVBfU1RBVF9TVFJVQ1RVUkUJc3RydWN0IGlwX21pYgogI2RlZmluZSBVU0VTX1NOTVBfREVTSUdORURfSVBTVEFUCiAjdW5kZWYgSVBfTlNUQVRTCiAjZW5kaWYKIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCisjaWZkZWYgSEFWRV9JUEhMUEFQSV9ICiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KICNkZWZpbmUgSVBfU1RBVF9TVFJVQ1RVUkUgTUlCX0lQU1RBVFMKIGxvbmcgICAgICAgICAgICBpcEZvcndhcmRpbmc7CkBAIC0zNzgsNyArNDEwLDcgQEAKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19mb3J3YXJkOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElQSU5VTktOT1dOUFJPVE9TOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1BST1RPCisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1BST1RPCiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfbm9wcm90bzsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtMzg2LDcgKzQxOCw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgY2FzZSBJUElORElTQ0FSRFM6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0ZSQUdEUk9QUEVECisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHRFJPUFBFRAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX2ZyYWdkcm9wcGVkOyAgIC8qID8/ICovCiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTM5NCw3ICs0MjYsNyBAQAogICAgICAgICBjb250aW51ZTsKICNlbmRpZgogICAgIGNhc2UgSVBJTkRFTElWRVJTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19ERUxJVkVSRUQKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0RFTElWRVJFRAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX2RlbGl2ZXJlZCAmIDB4ZmZmZmZmZmY7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTQwMiw3ICs0MzQsNyBAQAogICAgICAgICBjb250aW51ZTsKICNlbmRpZgogICAgIGNhc2UgSVBPVVRSRVFVRVNUUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTE9DQUxPVVQKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0xPQ0FMT1VUCiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfbG9jYWxvdXQgJiAweGZmZmZmZmZmOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC00MTAsNyArNDQyLDcgQEAKICAgICAgICAgY29udGludWU7CiAjZW5kaWYKICAgICBjYXNlIElQT1VURElTQ0FSRFM6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09EUk9QUEVECisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRFJPUFBFRAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX29kcm9wcGVkOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC00MzMsNyArNDY1LDcgQEAKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19mcmFnbWVudHM7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSVBSRUFTTU9LUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfUkVBU1NFTUJMRUQKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX1JFQVNTRU1CTEVECiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfcmVhc3NlbWJsZWQ7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTQ0NCw3ICs0NzYsNyBAQAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX2ZyYWdkcm9wcGVkICsgaXBzdGF0Lmlwc19mcmFndGltZW91dDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJUEZSQUdPS1M6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0ZSQUdNRU5URUQKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdNRU5URUQKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19mcmFnbWVudHM7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UgICAgICAgICAgICAvKiBYWFggKi8KQEAgLTQ1Myw3ICs0ODUsNyBAQAogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSVBGUkFHRkFJTFM6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGUkFHCisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URlJBRwogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX2NhbnRmcmFnOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC00NjEsNyArNDkzLDcgQEAKICAgICAgICAgY29udGludWU7CiAjZW5kaWYKICAgICBjYXNlIElQRlJBR0NSRUFURVM6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09GUkFHTUVOVFMKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09GUkFHTUVOVFMKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19vZnJhZ21lbnRzOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC00NjksNyArNTAxLDcgQEAKICAgICAgICAgY29udGludWU7CiAjZW5kaWYKICAgICBjYXNlIElQUk9VVEVESVNDQVJEUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9ST1VURQorI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9ST1VURQogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX25vcm91dGU7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTY0NSw2ICs2NzcsNyBAQAogCiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgY2FzZSBNT0RFX0dFVEJVTEs6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAJCS8qIFhYWCAtIFdpbmRvd3MgY3VycmVudGx5IHN1cHBvcnRzIHNldHRpbmcgdGhpcyAqLwogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CkBAIC02NTUsNiArNjg4LDcgQEAKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pcDogVW5zdXBwb3J0ZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pcDogVW5yZWNvZ25pc2VkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKQEAgLTgwNiw5ICs4NDAsOSBAQAogICAgIHJldF92YWx1ZSA9IG5ldGJzZF9yZWFkX2lwX3N0YXQoJmlwc3RhdCk7CiAKICAgICBpZiAoIHJldF92YWx1ZSA8IDApIHsKLSAgICAgICBERUJVR01TR1RMKCgibWliSUkvaXAiLCAiRmFpbGVkIHRvIGxvYWQgSVAgR3JvdXAgKG5ldGJzZClcbiIpKTsKKwlERUJVR01TR1RMKCgibWliSUkvaXAiLCAiRmFpbGVkIHRvIGxvYWQgSVAgR3JvdXAgKG5ldGJzZClcbiIpKTsKICAgICB9IGVsc2UgewotICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pcCIsICJMb2FkZWQgSVAgR3JvdXAgKG5ldGJzZClcbiIpKTsKKwlERUJVR01TR1RMKCgibWliSUkvaXAiLCAiTG9hZGVkIElQIEdyb3VwIChuZXRic2QpXG4iKSk7CiAgICAgfQogICAgIHJldHVybiByZXRfdmFsdWU7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jCmluZGV4IGY1OWE2M2EuLmE0ZDU3N2UgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jCkBAIC0xNSw4ICsxNSw5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKLSNpZiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQogI2RlZmluZSBfS0VSTkVMIDEKICNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKICNlbmRpZgpAQCAtMzksOSArNDAsNiBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU1lTQ1RMX0gKICNpZmRlZiBfSV9ERUZJTkVEX0tFUk5FTAogI3VuZGVmIF9LRVJORUwKQEAgLTExOCwxMiArMTE2LDEzIEBACiAKICNpbmNsdWRlICJpcC5oIgogI2luY2x1ZGUgImludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCiAKICNpZmRlZiBjeWd3aW4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW50ZXJmYWNlX2xlZ2FjeSkKKwogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgS2VybmVsICYgaW50ZXJmYWNlIGluZm9ybWF0aW9uLApAQCAtMjIxLDcgKzIyMCw3IEBACiAjaWYgIWRlZmluZWQoZnJlZWJzZDIpICYmICFkZWZpbmVkKGhwdXgxMSkgJiYgIWRlZmluZWQobGludXgpCiAgICAgICAgIGlmIChJbnRlcmZhY2VfU2Nhbl9OZXh0KCZpbnRlcmZhY2UsIE5VTEwsICZpZm5ldCwgJmluX2lmYWRkcikgPT0gMCkKICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQUREUkxJU1QKKyNpZmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9BRERSTElTVAogICAgICAgICBpZiAoaWZuZXQuaWZfYWRkcmxpc3QgPT0gMCkKICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgLyogTm8gYWRkcmVzcyBmb3VuZCBmb3IgaW50ZXJmYWNlICovCiAjZW5kaWYKQEAgLTI5MCw3ICsyODksNyBAQAogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBsb3dlc3QsIDE0ICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSAxNDsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0dXJuKTsKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgSVBBREFERFI6CkBAIC05NjAsNyArOTU5LDcgQEAKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMICYmIElQQ1RMX1NUQVRTICovCiAKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgY3lnd2luICovCisjZWxpZiBkZWZpbmVkKEhBVkVfSVBITFBBUElfSCkgIC8qIFdJTjMyIGN5Z3dpbiAqLwogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiB1X2NoYXIgICAgICAgICAqCiB2YXJfaXBBZGRyRW50cnkoc3RydWN0IHZhcmlhYmxlICp2cCwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmgKaW5kZXggNTI2YTA2MC4uZWM2OWNmMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmgKQEAgLTUsNyArNSw2IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9JUEFERFJfSAogI2RlZmluZSBfTUlCR1JPVVBfSVBBRERSX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKICNpZiAhZGVmaW5lZChORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMpCiBjb25maWdfcmVxdWlyZShtaWJJSS9pcCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jCmluZGV4IDAwZDdkMTcuLjg2MDliYjAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSAicm91dGVfaGVhZGVycy5oIgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTEzLDYgKzE0LDExIEBACiAKICNpbmNsdWRlICJ2YXJfcm91dGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZ2V0X3JvdXRlcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaF9nZXRfZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaF9hZGRfZGF0YSkKKwogc3RhdGljIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKnVuZG9TdG9yYWdlOwogCiBzdHJ1Y3QgdW5kb0luZm8gewpAQCAtNzMsNyArNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogCiAgICAgLyoqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICAgIG9wdGltaXplcyByZXRyaXZhbC4gKi8KKyAgICAgICAgb3B0aW1pemVzIHJldHJpZXZhbC4gKi8KICAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gMTsKICAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gMTY7CiAKQEAgLTk5LDcgKzEwNSw3IEBACiAgICAgICovCiAgICAgREVCVUdNU0dUTCgoImluaXRpYWxpemVfdGFibGVfaXBDaWRyUm91dGVUYWJsZSIsCiAgICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5nIHRhYmxlIGlwQ2lkclJvdXRlVGFibGUgYXMgYSB0YWJsZSBpdGVyYXRvclxuIikpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IobXlfaGFuZGxlciwgaWluZm8pOworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKG15X2hhbmRsZXIsIGlpbmZvKTsKIH0KIAogLyoqIEluaXRpYWxpemVzIHRoZSBpcENpZHJSb3V0ZVRhYmxlIG1vZHVsZSAqLwpAQCAtMjYwLDEyICsyNjYsMTAgQEAKIAogICAgIHZvaWQgICAgICAgICAgICpkYXRhX2NvbnRleHQ7CiAKLSAgICBvaWQgICAgICAgICAgICAqc3VmZml4OwotICAgIHNpemVfdCAgICAgICAgICBzdWZmaXhfbGVuOwotCiAgICAgLyoqIGNvbHVtbiBhbmQgcm93IGluZGV4IGVuY29kZWQgcG9ydGlvbiAqLwotICAgIHN1ZmZpeCA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDE7Ci0gICAgc3VmZml4X2xlbiA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoIC0KKyAgICBjb25zdCBvaWQgKiBjb25zdCBzdWZmaXggPQorICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lICsgcmVnaW5mby0+cm9vdG9pZF9sZW4gKyAxOworICAgIGNvbnN0IHNpemVfdCBzdWZmaXhfbGVuID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggLQogICAgICAgICAocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAxKTsKIAogICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jCmluZGV4IDRlMTg2OGIuLjk5ZDUwZTggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMKQEAgLTQsMTAgKzQsMTQgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0jaWYgZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQogI2RlZmluZSBfS0VSTkVMIDEKICNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKICNlbmRpZgorI2lmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTCisjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CkBAIC0xMzcsMTAgKzE0MSwxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAogI2luY2x1ZGUgImtlcm5lbC5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJpcHY2LmgiCiAjaW5jbHVkZSAiaW50ZXJmYWNlcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShsaW51eF9yZWFkX2lwNl9zdGF0KQorCiAjaWYgZGVmaW5lZChuZXRic2QxKSAmJiAhZGVmaW5lZChvcGVuYnNkNCkKICNkZWZpbmUgaW5wX2xwb3J0IGluNnBfbHBvcnQKICNkZWZpbmUgaW5wX2Zwb3J0IGluNnBfZnBvcnQKQEAgLTE2MSwxMDEgKzE2NiwxMzAgQEAKICNlbmRpZgogCiBzdHJ1Y3QgdmFyaWFibGUzIGlwdjZfdmFyaWFibGVzW10gPSB7Ci0gICAge0lQVjZGT1JXQVJESU5HLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2LCAxLCB7MX19LAotICAgIHtJUFY2REVGQVVMVEhPUExJTUlULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2LCAxLCB7Mn19LAotICAgIHtJUFY2SU5URVJGQUNFUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX2lwdjYsIDEsIHszfX0sCi0gICAge0lQVjZJRlRCTExBU1RDSEcsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfaXB2NiwgMSwgezR9fSwKKyAgICB7SVBWNkZPUldBUkRJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjYsIDEsIHsxfX0sCisgICAge0lQVjZERUZBVUxUSE9QTElNSVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjYsIDEsIHsyfX0sCisgICAge0lQVjZJTlRFUkZBQ0VTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NiwgMSwgezN9fSwKKyAgICB7SVBWNklGVEJMTEFTVENIRywgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2LCAxLCB7NH19LAogCi0gICAge0lQVjZJRkRFU0NSLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDJ9fSwKLSAgICB7SVBWNklGTE9XTEFZRVIsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgM319LAotICAgIHtJUFY2SUZFRkZFQ1RNVFUsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA0fX0sCi0gICAge0lQVjZJRlJFQVNNTUFYU0laRSwgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDV9fSwKKyAgICB7SVBWNklGREVTQ1IsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgMn19LAorICAgIHtJUFY2SUZMT1dMQVlFUiwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCAzfX0sCisgICAge0lQVjZJRkVGRkVDVE1UVSwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDR9fSwKKyAgICB7SVBWNklGUkVBU01NQVhTSVpFLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgNX19LAogCi0gICAge0lQVjZJRlRPS0VOLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDZ9fSwKLSAgICB7SVBWNklGVE9LRU5MRU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDd9fSwKLSAgICB7SVBWNklGUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgOH19LAotICAgIHtJUFY2SUZBRE1TVEFUVVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDl9fSwKLSAgICB7SVBWNklGT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgMTB9fSwKLSAgICB7SVBWNklGTEFTVENIQU5HRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCAxMX19LAorICAgIHtJUFY2SUZUT0tFTiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA2fX0sCisgICAge0lQVjZJRlRPS0VOTEVOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA3fX0sCisgICAge0lQVjZJRlBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDh9fSwKKyAgICB7SVBWNklGQURNU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA5fX0sCisgICAge0lQVjZJRk9QRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDEwfX0sCisgICAge0lQVjZJRkxBU1RDSEFOR0UsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgMTF9fSwKIAotICAgIHtJUFY2SUZTVEFUU0lOUkNWUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMX19LAotICAgIHtJUFY2SUZTVEFUU0lOSERSRVJSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMn19LAotICAgIHtJUFY2SUZTVEFUU1RPT0JJR0VSUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDN9fSwKLSAgICB7SVBWNklGU1RBVFNJTk5PUk9VVEVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCA0fX0sCi0gICAge0lQVjZJRlNUQVRTSU5BRERSRVJSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgNX19LAotICAgIHtJUFY2SUZTVEFUU0lOVU5LTk9XUFJPVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDZ9fSwKLSAgICB7SVBWNklGU1RBVFNJTlRSVU5DQVRQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCA3fX0sCi0gICAge0lQVjZJRlNUQVRTSU5ESVNDQVJEUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgOH19LAotICAgIHtJUFY2SUZTVEFUU0lOREVMSVZFUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDl9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRGT1JXREFUQVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDEwfX0sCi0gICAge0lQVjZJRlNUQVRTT1VUUkVRUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTF9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRESVNDQVJEUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTJ9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRGUkFHT0tTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxM319LAotICAgIHtJUFY2SUZTVEFUU09VVEZSQUdGQUlMUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTR9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRGUkFHQ1JFQVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxNX19LAotICAgIHtJUFY2SUZTVEFUU09VVFJFQVNNUkVRUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTZ9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRSRUFTTU9LUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTd9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRSRUFTTUZBSUxTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxOH19LAotICAgIHtJUFY2SUZTVEFUU0lOTUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxOX19LAotICAgIHtJUFY2SUZTVEFUU09VVE1DQVNUUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMjB9fSwKKyAgICB7SVBWNklGU1RBVFNJTlJDVlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDF9fSwKKyAgICB7SVBWNklGU1RBVFNJTkhEUkVSUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDJ9fSwKKyAgICB7SVBWNklGU1RBVFNUT09CSUdFUlJTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAzfX0sCisgICAge0lQVjZJRlNUQVRTSU5OT1JPVVRFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgNH19LAorICAgIHtJUFY2SUZTVEFUU0lOQUREUkVSUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDV9fSwKKyAgICB7SVBWNklGU1RBVFNJTlVOS05PV1BST1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCA2fX0sCisgICAge0lQVjZJRlNUQVRTSU5UUlVOQ0FUUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgN319LAorICAgIHtJUFY2SUZTVEFUU0lORElTQ0FSRFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDh9fSwKKyAgICB7SVBWNklGU1RBVFNJTkRFTElWRVJTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCA5fX0sCisgICAge0lQVjZJRlNUQVRTT1VURk9SV0RBVEFTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxMH19LAorICAgIHtJUFY2SUZTVEFUU09VVFJFUVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDExfX0sCisgICAge0lQVjZJRlNUQVRTT1VURElTQ0FSRFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDEyfX0sCisgICAge0lQVjZJRlNUQVRTT1VURlJBR09LUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTN9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRGUkFHRkFJTFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDE0fX0sCisgICAge0lQVjZJRlNUQVRTT1VURlJBR0NSRUFUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTV9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRSRUFTTVJFUVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDE2fX0sCisgICAge0lQVjZJRlNUQVRTT1VUUkVBU01PS1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDE3fX0sCisgICAge0lQVjZJRlNUQVRTT1VUUkVBU01GQUlMUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTh9fSwKKyAgICB7SVBWNklGU1RBVFNJTk1DQVNUUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTl9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRNQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDIwfX0sCiAKICNpZiAwCi0gICAge0lQVjZBRERSUFJFRklYT05MSU5LRkxHLCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZBZGRyRW50cnksIDMsCi0gICAgIHs3LCAxLCAzfX0sCi0gICAge0lQVjZBRERSUFJFRklYQVVUT05PTU9VU0ZMQUcsIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NkFkZHJFbnRyeSwgMywKLSAgICAgezcsIDEsIDR9fSwKLSAgICB7SVBWNkFERFJQUkVGSVhBRFZQUkVGRVJMSUZFLCBVTlNJR05FRDMyLCBST05MWSwgdmFyX2lwdjZBZGRyRW50cnksIDMsCi0gICAgIHs3LCAxLCA1fX0sCi0gICAge0lQVjZBRERSUFJFRklYVkFMSURMSUZFLCBVTlNJR05FRDMyLCBST05MWSwgdmFyX2lwdjZBZGRyRW50cnksIDMsCi0gICAgIHs3LCAxLCA2fX0sCisgICAge0lQVjZBRERSUFJFRklYT05MSU5LRkxHLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs3LCAxLCAzfX0sCisgICAge0lQVjZBRERSUFJFRklYQVVUT05PTU9VU0ZMQUcsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezcsIDEsIDR9fSwKKyAgICB7SVBWNkFERFJQUkVGSVhBRFZQUkVGRVJMSUZFLCBVTlNJR05FRDMyLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs3LCAxLCA1fX0sCisgICAge0lQVjZBRERSUFJFRklYVkFMSURMSUZFLCBVTlNJR05FRDMyLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs3LCAxLCA2fX0sCiAKLSAgICB7SVBWNkFERFJQRlhMRU4sIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezgsIDEsIDJ9fSwKLSAgICB7SVBWNkFERFJUWVBFLCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs4LCAxLCAzfX0sCi0gICAge0lQVjZBRERSQU5ZQ0FTVEZMQUcsIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezgsIDEsIDR9fSwKLSAgICB7SVBWNkFERFJTVEFUVVMsIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezgsIDEsIDV9fSwKKyAgICB7SVBWNkFERFJQRlhMRU4sIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezgsIDEsIDJ9fSwKKyAgICB7SVBWNkFERFJUWVBFLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs4LCAxLCAzfX0sCisgICAge0lQVjZBRERSQU5ZQ0FTVEZMQUcsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezgsIDEsIDR9fSwKKyAgICB7SVBWNkFERFJTVEFUVVMsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NkFkZHJFbnRyeSwgMywgezgsIDEsIDV9fSwKIAotICAgIHtJUFY2Uk9VVEVJRklOREVYLCBJcFY2SUZJTkRFWCwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywKLSAgICAgezExLCAxLCA0fX0sCi0gICAge0lQVjZST1VURU5FWFRIT1AsIElwVjZBRERSRVNTLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLAotICAgICB7MTEsIDEsIDV9fSwKLSAgICB7SVBWNlJPVVRFVFlQRSwgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA2fX0sCi0gICAge0lQVjZST1VURVBST1RPQ09MLCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDd9fSwKLSAgICB7SVBWNlJPVVRFUE9MSUNZLCBVTlNJR05FRDMyLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLAotICAgICB7MTEsIDEsIDh9fSwKLSAgICB7SVBWNlJPVVRFQUdFLCBVTlNJR05FRDMyLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDl9fSwKLSAgICB7SVBWNlJPVVRFTkVYVEhPUFJESSwgVU5TSUdORUQzMiwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywKLSAgICAgezExLCAxLCAxMH19LAotICAgIHtJUFY2Uk9VVEVNRVRSSUMsIFVOU0lHTkVEMzIsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsCi0gICAgIHsxMSwgMSwgMTF9fSwKLSAgICB7SVBWNlJPVVRFV0VJR0hULCBVTlNJR05FRDMyLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLAotICAgICB7MTEsIDEsIDEyfX0sCi0gICAge0lQVjZST1VURUlORk8sIE9CSklELCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDEzfX0sCi0gICAge0lQVjZST1VURVZBTElELCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDE0fX0sCisgICAge0lQVjZST1VURUlGSU5ERVgsIElwVjZJRklOREVYLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDR9fSwKKyAgICB7SVBWNlJPVVRFTkVYVEhPUCwgSXBWNkFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgNX19LAorICAgIHtJUFY2Uk9VVEVUWVBFLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDZ9fSwKKyAgICB7SVBWNlJPVVRFUFJPVE9DT0wsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgN319LAorICAgIHtJUFY2Uk9VVEVQT0xJQ1ksIFVOU0lHTkVEMzIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgOH19LAorICAgIHtJUFY2Uk9VVEVBR0UsIFVOU0lHTkVEMzIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgOX19LAorICAgIHtJUFY2Uk9VVEVORVhUSE9QUkRJLCBVTlNJR05FRDMyLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDEwfX0sCisgICAge0lQVjZST1VURU1FVFJJQywgVU5TSUdORUQzMiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCAxMX19LAorICAgIHtJUFY2Uk9VVEVXRUlHSFQsIFVOU0lHTkVEMzIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgMTJ9fSwKKyAgICB7SVBWNlJPVVRFSU5GTywgT0JKSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgMTN9fSwKKyAgICB7SVBWNlJPVVRFVkFMSUQsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgMTR9fSwKIAotICAgIHtJUFY2TkVUVE9NRURJQVBIWUFERFIsIFNUUklORywgUk9OTFksIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCAyfX0sCi0gICAge0lQVjZORVRUT01FRElBVFlQRSwgSU5URUdFUiwgUk9OTFksIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCAzfX0sCi0gICAge0lQVjZORVRUT01FRElBU1RBVEUsIElOVEVHRVIsIFJPTkxZLCB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgNH19LAotICAgIHtJUFY2TkVUVE9NRURJQUxBU1RVUERBVEUsIFRJTUVUSUNLUywgUk9OTFksIHZhcl9uZHBFbnRyeSwgMywKLSAgICAgezEyLCAxLCA1fX0sCi0gICAge0lQVjZORVRUT01FRElBVkFMSUQsIElOVEVHRVIsIFJPTkxZLCB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgNn19LAorICAgIHtJUFY2TkVUVE9NRURJQVBIWUFERFIsIFNUUklORywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCAyfX0sCisgICAge0lQVjZORVRUT01FRElBVFlQRSwgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCAzfX0sCisgICAge0lQVjZORVRUT01FRElBU1RBVEUsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgNH19LAorICAgIHtJUFY2TkVUVE9NRURJQUxBU1RVUERBVEUsIFRJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9uZHBFbnRyeSwgMywgezEyLCAxLCA1fX0sCisgICAge0lQVjZORVRUT01FRElBVkFMSUQsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgNn19LAogI2VuZGlmCiB9Owogb2lkICAgICAgICAgICAgIGlwdjZfdmFyaWFibGVzX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCA1NSwgMSB9OwpAQCAtMjY1LDc0ICsyOTksNzQgQEAKICAgICBjb25maWdfYWRkX21pYihJUFY2IC0gTUlCKQogI2VuZGlmCiAgICAgIHN0cnVjdCB2YXJpYWJsZTMgaXB2NmljbXBfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgICB7SVBWNklGSUNNUElOTVNHLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMX19LAotICAgICAgICAge0lQVjZJRklDTVBJTkVSUk9SUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDJ9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5EU1RVTlJDSFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAzfX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOQURNUFJPSFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCA0fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOVElNRVhDRFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCA1fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOUEFSTVBST0JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgNn19LAotICAgICAgICAge0lQVjZJRklDTVBJTlBLVFRPT0JJR1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCA3fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElORUNIT1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCA4fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElORUNIT1JFUFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCA5fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOUlRSU0xJQ0lUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDEwfX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOUlRSQURWUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDExfX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOTkJSU0xJQ0lUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDEyfX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOTkJSQURWUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDEzfX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOUkVESVJFQ1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTR9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5HUlBNRVFFUllTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTV9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5HUlBNRVJTUFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxNn19LAotICAgICAgICAge0lQVjZJRklDTVBJTkdSUE1FUkVEQ1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxN319LAotICAgICAgICAge0lQVjZJRklDTVBPVVRNU0csIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxOH19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRFUlJPUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxOX19LAotICAgICAgICAge0lQVjZJRklDTVBPVVREU1RVTlJDSFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyMH19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRBRE1QUk9IUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDIxfX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVFRJTUVYQ0RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjJ9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUUEFSTVBST0JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjN9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUUEtUVE9PQklHUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDI0fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVEVDSE9TLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjV9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VURUNIT1JFUFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyNn19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRSVFJTTElDSVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjd9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUUlRSQURWUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDI4fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVE5CUlNMSUNJVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyOX19LAotICAgICAgICAge0lQVjZJRklDTVBPVVROQlJBRFZTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMzB9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUUkVESVJFQ1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMzF9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUR1JQTUVRRVJZUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDMyfX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVEdSUE1FUlNQUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDMzfX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVEdSUE1FUkVEQ1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAzNH19CisgICAgICAgICB7SVBWNklGSUNNUElOTVNHLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMX19LAorICAgICAgICAge0lQVjZJRklDTVBJTkVSUk9SUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDJ9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5EU1RVTlJDSFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAzfX0sCisgICAgICAgICB7SVBWNklGSUNNUElOQURNUFJPSFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCA0fX0sCisgICAgICAgICB7SVBWNklGSUNNUElOVElNRVhDRFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCA1fX0sCisgICAgICAgICB7SVBWNklGSUNNUElOUEFSTVBST0JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgNn19LAorICAgICAgICAge0lQVjZJRklDTVBJTlBLVFRPT0JJR1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCA3fX0sCisgICAgICAgICB7SVBWNklGSUNNUElORUNIT1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCA4fX0sCisgICAgICAgICB7SVBWNklGSUNNUElORUNIT1JFUFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCA5fX0sCisgICAgICAgICB7SVBWNklGSUNNUElOUlRSU0xJQ0lUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDEwfX0sCisgICAgICAgICB7SVBWNklGSUNNUElOUlRSQURWUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDExfX0sCisgICAgICAgICB7SVBWNklGSUNNUElOTkJSU0xJQ0lUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDEyfX0sCisgICAgICAgICB7SVBWNklGSUNNUElOTkJSQURWUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDEzfX0sCisgICAgICAgICB7SVBWNklGSUNNUElOUkVESVJFQ1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTR9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5HUlBNRVFFUllTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTV9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5HUlBNRVJTUFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxNn19LAorICAgICAgICAge0lQVjZJRklDTVBJTkdSUE1FUkVEQ1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxN319LAorICAgICAgICAge0lQVjZJRklDTVBPVVRNU0csIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxOH19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRFUlJPUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxOX19LAorICAgICAgICAge0lQVjZJRklDTVBPVVREU1RVTlJDSFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyMH19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRBRE1QUk9IUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDIxfX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVFRJTUVYQ0RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjJ9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUUEFSTVBST0JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjN9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUUEtUVE9PQklHUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDI0fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVEVDSE9TLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjV9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VURUNIT1JFUFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyNn19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRSVFJTTElDSVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjd9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUUlRSQURWUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDI4fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVE5CUlNMSUNJVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyOX19LAorICAgICAgICAge0lQVjZJRklDTVBPVVROQlJBRFZTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMzB9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUUkVESVJFQ1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMzF9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUR1JQTUVRRVJZUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDMyfX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVEdSUE1FUlNQUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDMzfX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVEdSUE1FUkVEQ1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAzNH19CiAgICAgIH07CiBvaWQgICAgICAgICAgICAgaXB2NmljbXBfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA1NiwgMSB9OwogI2lmIDAKQEAgLTM0MCw3ICszNzQsOCBAQAogICAgIGNvbmZpZ19hZGRfbWliKElQVjYgLSBJQ01QIC0gTUlCKQogI2VuZGlmCiAgICAgIHN0cnVjdCB2YXJpYWJsZTIgaXB2NnVkcF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAgIHtJUFY2VURQSUZJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfdWRwNiwgMiwgezEsIDN9fQorICAgICAgICAge0lQVjZVRFBJRklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX3VkcDYsIDIsIHsxLCAzfX0KICAgICAgfTsKIG9pZCAgICAgICAgICAgICBpcHY2dWRwX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNywgNiB9OwogI2lmIDAKQEAgLTM0OCwxNSArMzgzLDE3IEBACiAgICAgY29uZmlnX2FkZF9taWIoSVBWNiAtIFVEUCAtIE1JQikKICNlbmRpZgogICAgICBzdHJ1Y3QgdmFyaWFibGUyIGlwdjZ0Y3BfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgICB7SVBWNlRDUENPTk5TVEFURSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfdGNwNiwgMiwgezEsIDZ9fSwKKyAgICAgICAgIHtJUFY2VENQQ09OTlNUQVRFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX3RjcDYsIDIsIHsxLCA2fX0sCiAgICAgIH07CiBvaWQgICAgICAgICAgICAgaXB2NnRjcF92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDYsIDE2IH07CiAjaWYgMAogY29uZmlnX2xvYWRfbWliKDEuMyAuNiAuMSAuMyAuODYgLjEsIDcsIGlwdjZ0Y3BfdmFyaWFibGVzKQogICAgIGNvbmZpZ19hZGRfbWliKElQVjYgLSBUQ1AgLSBNSUIpCiAjZW5kaWYKLSAgICAgdm9pZAotICAgICAgICAgICAgICAgICAgICAgaW5pdF9pcHY2KCkKKwordm9pZAoraW5pdF9pcHY2KHZvaWQpCiB7CiAgICAgLyoKICAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgdG8gaGFuZGxlIG91ciBtaWIgdHJlZSAKQEAgLTQwMCw3ICs0MzcsNyBAQAogICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwogCi0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKIH0KQEAgLTQ0MCw3ICs0NzcsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KICAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7CiB9CkBAIC05MzEsNyArOTY4LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSNpZmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfU0VDCisjaWZkZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9TRUMKICAgICAgICAgICAgIGlmICghZ290YW5zd2VyKSB7CiAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0ICAgIGlmbmV0OwogCkBAIC0xOTYwLDcgKzE5OTcsNyBAQAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGxpbnV4X3JlYWRfaXA2X3N0YXQoc3RydWN0IGlwNl9taWIgKmlwNnN0YXQpCiB7CiAgICAgaWYgKCFpcDZzdGF0KQpAQCAtMjA0OCw3ICsyMDg1LDcgQEAKICAgICAgICAgcCA9IGlmX2dldG5hbWUoaW50ZXJmYWNlKTsKICAgICAgICAgaWYgKHApIHsKICAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHApOwotICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBwOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSVBWNklGTE9XTEFZRVI6CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jCmluZGV4IGJiNmY4NjcuLjk5MzE0ZGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jCkBAIC00LDExICs0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCkBAIC0xNiw0MyArMTUsMTEzIEBACiAjaWYgSEFWRV9TWVNfUEFSQU1fSAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KIAogI2luY2x1ZGUgImtlcm5lbF9saW51eC5oIgogCiBzdHJ1Y3QgaXBfbWliICAgY2FjaGVkX2lwX21pYjsKK3N0cnVjdCBpcDZfbWliICAgY2FjaGVkX2lwNl9taWI7CiBzdHJ1Y3QgaWNtcF9taWIgY2FjaGVkX2ljbXBfbWliOworc3RydWN0IGljbXA2X21pYiBjYWNoZWRfaWNtcDZfbWliOworc3RydWN0IGljbXA0X21zZ19taWIgY2FjaGVkX2ljbXA0X21zZ19taWI7CiBzdHJ1Y3QgdGNwX21pYiAgY2FjaGVkX3RjcF9taWI7CiBzdHJ1Y3QgdWRwX21pYiAgY2FjaGVkX3VkcF9taWI7CitzdHJ1Y3QgdWRwNl9taWIgIGNhY2hlZF91ZHA2X21pYjsKIAogI2RlZmluZSBJUF9TVEFUU19MSU5FCSJJcDogJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1IgogI2RlZmluZSBJQ01QX1NUQVRTX0xJTkUJIkljbXA6ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUiCisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX0xJTkUgIkljbXBNc2c6ICIKICNkZWZpbmUgVENQX1NUQVRTX0xJTkUJIlRjcDogJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSIKICNkZWZpbmUgVURQX1NUQVRTX0xJTkUJIlVkcDogJWx1ICVsdSAlbHUgJWx1IgorI2RlZmluZSBJUDZfU1RBVFNfTElORSAgICJJcDYiCisjZGVmaW5lIElDTVA2X1NUQVRTX0xJTkUgIkljbXA2IgogI2RlZmluZSBVRFA2X1NUQVRTX0xJTkUgIlVkcDYiCiAKICNkZWZpbmUgSVBfU1RBVFNfUFJFRklYX0xFTgk0CiAjZGVmaW5lIElDTVBfU1RBVFNfUFJFRklYX0xFTgk2CisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX1BSRUZJWF9MRU4gOQogI2RlZmluZSBUQ1BfU1RBVFNfUFJFRklYX0xFTgk1CiAjZGVmaW5lIFVEUF9TVEFUU19QUkVGSVhfTEVOCTUKKyNkZWZpbmUgSVA2X1NUQVRTX1BSRUZJWF9MRU4JMworI2RlZmluZSBJQ01QNl9TVEFUU19QUkVGSVhfTEVOCTUKICNkZWZpbmUgVURQNl9TVEFUU19QUkVGSVhfTEVOICAgNAogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobGludXhfaXA2X3N0YXRfYWxsLCBsaWJuZXRzbm1wbWlicykKIAotaW50CituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobGludXhfcmVhZF9pcDZfc3RhdCwgbGludXhfaXA2X3N0YXRfYWxsKQorCitzdGF0aWMgaW50CitkZWNvZGVfaWNtcF9tc2coY2hhciAqbGluZSwgY2hhciAqZGF0YSwgc3RydWN0IGljbXA0X21zZ19taWIgKm1zZykKK3sKKyAgICBjaGFyICp0b2tlbiwgKnNhdmVwdHIsICpsaW5lcHRyLCAqc2F2ZXB0cjEsICpkYXRhcHRyLCAqZGVsaW0gPSBOVUxMOworICAgIGNoYXIgbGluZV9jcHlbMTAyNF07CisgICAgY2hhciBkYXRhX2NweVsxMDI0XTsKKyAgICBsb25nIGluZGV4OworCisgICAgaWYoZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKgorICAgICAqIFNpbmNlIHdlIGFyZSB1c2luZyBzdHJ0b2ssIHRoZXJlIGlzIGEgcG9zc2libGl0eSBvZiB0aGUgb3JnaW5hbCBkYXRhCisgICAgICogZ2V0dGluZyBtb2RpZmllZC4gU28gd2UgdGFrZSBhIGxvY2FsIGNvcHkgZm9yIHRoaXMgcHVycG9zZSBldmVuIHRob3VnaAorICAgICAqIGl0cyBleHBlbnNpdmUuCisgICAgICovCisgICAgc3RybGNweShsaW5lX2NweSwgbGluZSwgc2l6ZW9mKGxpbmVfY3B5KSk7CisgICAgc3RybGNweShkYXRhX2NweSwgZGF0YSwgc2l6ZW9mKGRhdGFfY3B5KSk7CisKKyAgICBsaW5lcHRyID0gbGluZV9jcHk7CisgICAgZGF0YXB0ciA9IGRhdGFfY3B5OworICAgIHNhdmVwdHIxID0gTlVMTDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZihOVUxMID09ICh0b2tlbiA9IHN0cnRva19yKGxpbmVwdHIsICIgIiwgJnNhdmVwdHIpKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBsaW5lcHRyID0gTlVMTDsKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBpZiAoMCA9PSBzdHJuY21wKHN0cnNlcCgmdG9rZW4sICJlIiksICJPdXRUeXAiLCA2KSkgeworICAgICAgICAgICAgaW5kZXggPSBzdHJ0b2wodG9rZW4sICZkZWxpbSwgMCk7CisgICAgICAgICAgICBpZiAoRVJBTkdFID09IGVycm5vKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMjU1KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4IDwgMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5VTEwgPT0gKHRva2VuID0gc3RydG9rX3IoZGF0YXB0ciwgIiAiLCAmc2F2ZXB0cjEpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRhdGFwdHIgPSBOVUxMOworICAgICAgICAgICAgbXNnLT52YWxzW2luZGV4XS5PdXRUeXBlID0gYXRvaSh0b2tlbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbmRleCA9IHN0cnRvbCh0b2tlbiwgJmRlbGltLCAwKTsKKyAgICAgICAgICAgIGlmIChFUkFOR0UgPT0gZXJybm8pIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiAyNTUpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihOVUxMID09ICh0b2tlbiA9IHN0cnRva19yKGRhdGFwdHIsICIgIiwgJnNhdmVwdHIxKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkYXRhcHRyID0gTlVMTDsKKyAgICAgICAgICAgIG1zZy0+dmFsc1tpbmRleF0uSW5UeXBlID0gYXRvaSh0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxpbnV4X3JlYWRfbWliSUlfc3RhdHModm9pZCkKIHsKICAgICBGSUxFICAgICAgICAgICAqaW4gPSBmb3BlbigiL3Byb2MvbmV0L3NubXAiLCAiciIpOwotI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKLSAgICBGSUxFICAgICAgICAgICAqaW42OwotICAgIHVuc2lnbmVkIGxvbmcgICB2YWx1ZTsKLSNlbmRpZgotICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOwotCisgICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF0sIGRhdGFbMTAyNF07CisgICAgaW50IHJldCA9IDA7CiAgICAgaWYgKCFpbikgewogICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4IiwiVW5hYmxlIHRvIG9wZW4gL3Byb2MvbmV0L3NubXAiKSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKIAorICAgIG1lbXNldChsaW5lLCAnXDAnLCBzaXplb2YobGluZSkpOworICAgIG1lbXNldChkYXRhLCAnXDAnLCBzaXplb2YoZGF0YSkpOwogICAgIHdoaWxlIChsaW5lID09IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CiAgICAgICAgIGlmICghc3RybmNtcChsaW5lLCBJUF9TVEFUU19MSU5FLCBJUF9TVEFUU19QUkVGSVhfTEVOKSkgewogICAgICAgICAgICAgc3NjYW5mKGxpbmUsIElQX1NUQVRTX0xJTkUsCkBAIC0xMDQsNiArMTczLDE5IEBACiAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9pY21wX21pYi5pY21wT3V0VGltZXN0YW1wUmVwcywKICAgICAgICAgICAgICAgICAgICAmY2FjaGVkX2ljbXBfbWliLmljbXBPdXRBZGRyTWFza3MsCiAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9pY21wX21pYi5pY21wT3V0QWRkck1hc2tSZXBzKTsKKyAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcChsaW5lLCBJQ01QX01TR19TVEFUU19MSU5FLCBJQ01QX01TR19TVEFUU19QUkVGSVhfTEVOKSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIE5vdGU6IFdlIGhhdmUgdG8gZG8gdGhpcyBkaWZmZXJlbnRseSBmcm9tIG90aGVyIHN0YXRzIGFzIHRoZQorICAgICAgICAgICAgICogY291bnRlcnMgdG8gdGhpcyBzdGF0cyBhcmUgZHluYW1pYy4gU28gd2Ugd2lsbCBub3Qga25vdyB0aGUKKyAgICAgICAgICAgICAqIG51bWJlciBvZiBjb3VudGVycyBhdCBhIGdpdmVuIHRpbWUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZnZXRzKGRhdGEsIHNpemVvZihkYXRhKSwgaW4pOworICAgICAgICAgICAgaWYoZGVjb2RlX2ljbXBfbXNnKGxpbmUgKyBJQ01QX01TR19TVEFUU19QUkVGSVhfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIElDTVBfTVNHX1NUQVRTX1BSRUZJWF9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAmY2FjaGVkX2ljbXA0X21zZ19taWIpIDwgMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gMTsKICAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcChsaW5lLCBUQ1BfU1RBVFNfTElORSwgVENQX1NUQVRTX1BSRUZJWF9MRU4pKSB7CiAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgcmV0ID0gc3NjYW5mKGxpbmUsIFRDUF9TVEFUU19MSU5FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FjaGVkX3RjcF9taWIudGNwUnRvQWxnb3JpdGhtLApAQCAtMTMyLDM1ICsyMTQsNiBAQAogICAgIH0KICAgICBmY2xvc2UoaW4pOwogCi0jaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgotICAgIGluNiA9IGZvcGVuKCIvcHJvYy9uZXQvc25tcDYiLCAiciIpOwotICAgIGlmIChpbjYpIHsKLSAgICAgIAotICAgICAgICB3aGlsZSAobGluZSA9PSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluNikpIHsKLQotICAgICAgICAgICAgaWYgKCgnVScgIT0gbGluZVswXSkgfHwKLSAgICAgICAgICAgICAgICAoMCAhPSBzdHJuY21wKGxpbmUsIFVEUDZfU1RBVFNfTElORSwgVURQNl9TVEFUU19QUkVGSVhfTEVOKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHNzY2FuZihsaW5lLCAiJSpzICVsdSIgLCAmdmFsdWUpOwotICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgnTycgPT0gbGluZVs0XSkgLyogVWRwNk91dERhdGFncmFtcyAqLwotICAgICAgICAgICAgICAgIGNhY2hlZF91ZHBfbWliLnVkcE91dERhdGFncmFtcyArPSB2YWx1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCdOJyA9PSBsaW5lWzRdKSAvKiBVZHA2Tm9Qb3J0cyAqLwotICAgICAgICAgICAgICAgIGNhY2hlZF91ZHBfbWliLnVkcE5vUG9ydHMgKz0gdmFsdWU7Ci0gICAgICAgICAgICBlbHNlIGlmICgnRCcgPT0gbGluZVs2XSkgLyogVWRwNkluRGF0YWdyYW1zICovCi0gICAgICAgICAgICAgICAgY2FjaGVkX3VkcF9taWIudWRwSW5EYXRhZ3JhbXMgKz0gdmFsdWU7Ci0gICAgICAgICAgICBlbHNlIGlmICgnRScgPT0gbGluZVs2XSkgLyogVWRwNkluRXJyb3JzICovCi0gICAgICAgICAgICAgICAgY2FjaGVkX3VkcF9taWIudWRwSW5FcnJvcnMgKz0gdmFsdWU7Ci0KLSAgICAgICAgfQotICAgICAgICBmY2xvc2UoaW42KTsKLSAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4IiwiVW5hYmxlIHRvIG9wZW4gL3Byb2MvbmV0L3NubXA2IikpOwotICAgIH0KLQotI2VuZGlmCi0KICAgICAvKgogICAgICAqIFR3ZWFrIGlsbGVnYWwgdmFsdWVzOgogICAgICAqCkBAIC0xNzYsNyArMjI5LDggQEAKICAgICAgKi8KICAgICBpZiAoIWNhY2hlZF90Y3BfbWliLnRjcFJ0b0FsZ29yaXRobSkKICAgICAgICAgY2FjaGVkX3RjcF9taWIudGNwUnRvQWxnb3JpdGhtID0gMTsKLSAgICByZXR1cm4gMDsKKworICAgIHJldHVybiByZXQ7CiB9CiAKIGludApAQCAtMTg5LDYgKzI0MywxMzggQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xJTlVYX1JFQURfSVA2X1NUQVQKK2ludCBsaW51eF9yZWFkX2lwNl9zdGF0KCBzdHJ1Y3QgaXA2X21pYiAqaXA2c3RhdCkKK3sKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgRklMRSAgICAgICAgICAgKmluOworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIHVuc2lnbmVkIGxvbmcgICBzdGF0czsKKyAgICBjaGFyICAgICAgICAgICAqZW5kcDsKKyAgICBpbnQgICAgICAgICAgICAgbWF0Y2g7CisjZW5kaWYKKworICAgIG1lbXNldCgoY2hhciAqKSBpcDZzdGF0LCAoMCksIHNpemVvZigqaXA2c3RhdCkpOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvaXA2c3RhdHMiLAorICAgICAgICAgICAgICAgICJSZWFkaW5nIC9wcm9jL25ldC9zbm1wNiBzdGF0c1xuIikpOworICAgIGlmIChOVUxMID09IChpbiA9IGZvcGVuKCIvcHJvYy9uZXQvc25tcDYiLCAiciIpKSkgeworICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L2lwNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBvcGVuIC9wcm9jL25ldC9zbm1wNlxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKE5VTEwgIT0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKKyAgICAgICAgaWYgKDAgIT0gc3RybmNtcChsaW5lLCBJUDZfU1RBVFNfTElORSwgSVA2X1NUQVRTX1BSRUZJWF9MRU4pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKDEgIT0gc3NjYW5mKGxpbmUsICIlKnMgJWx1IiwgJnN0YXRzKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVuZHAgPSBzdHJjaHIobGluZSwgJyAnKTsKKyAgICAgICAgKmVuZHAgPSAnXDAnOworICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L2lwNnN0YXRzIiwgIkZpbmQgdGFnOiAlc1xuIiwgbGluZSkpOworCisgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgaWYgKDAgPT0gc3RybmNtcChsaW5lICsgMywgIkluIiwgMikpIHsgIC8qIEluICovCisgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJBZGRyRXJyb3JzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJbkFkZHJFcnJvcnMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJEZWxpdmVycyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5EZWxpdmVycyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIkRpc2NhcmRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJbkRpc2NhcmRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiSGRyRXJyb3JzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJbkhkckVycm9ycyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIk1jYXN0UGt0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5NY2FzdFBrdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJOb1JvdXRlcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5Ob1JvdXRlcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIlJlY2VpdmVzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJblJlY2VpdmVzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiVHJ1bmNhdGVkUGt0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5UcnVuY2F0ZWRQa3RzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiVG9vQmlnRXJyb3JzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJblRvb0JpZ0Vycm9ycyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIlVua25vd25Qcm90b3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluVW5rbm93blByb3RvcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJuY21wKGxpbmUgKyAzLCAiT3V0IiwgMykpIHsgIC8qIE91dCAqLworICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA2LCAiRGlzY2FyZHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNk91dERpc2NhcmRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA2LCAiRm9yd0RhdGFncmFtcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2T3V0Rm9yd0RhdGFncmFtcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNiwgIk1jYXN0UGt0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2T3V0TWNhc3RQa3RzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA2LCAiTm9Sb3V0ZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNk91dE5vUm91dGVzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA2LCAiUmVxdWVzdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNk91dFJlcXVlc3RzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hdGNoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cm5jbXAobGluZSArIDMsICJSZWFzbSIsIDUpKSB7ICAvKiBSZWFzbSAqLworICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiRmFpbHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNlJlYXNtRmFpbHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJPS3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNlJlYXNtT0tzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiUmVxZHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNlJlYXNtUmVxZHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJUaW1lb3V0IikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZSZWFzbVRpbWVvdXQgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RybmNtcChsaW5lICsgMywgIkZyYWciLCA0KSkgeyAgLyogRnJhZyAqLworICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiQ3JlYXRlcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2RnJhZ0NyZWF0ZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJGYWlscyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2RnJhZ0ZhaWxzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiT0tzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZGcmFnT0tzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hdGNoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hdGNoID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCFtYXRjaCkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvaXA2c3RhdHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIGFuIHVua25vd24gdGFnXG4iLCBsaW5lKSk7CisgICAgfQorCisgICAgZmNsb3NlKGluKTsKKyNlbmRpZgorCisgICAgbWVtY3B5KChjaGFyICopIGlwNnN0YXQsIChjaGFyICopICZjYWNoZWRfaXA2X21pYiwgc2l6ZW9mKCppcDZzdGF0KSk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MSU5VWF9SRUFEX0lQNl9TVEFUICovCisKK2ludAorbGludXhfcmVhZF9pY21wX21zZ19zdGF0KHN0cnVjdCBpY21wX21pYiAqaWNtcHN0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA0X21zZ19taWIgKmljbXBtc2dzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZmxhZykKK3sKKyAgICBpbnQgcmV0OworCisgICAgbWVtc2V0KGljbXBzdGF0LCAwLCBzaXplb2YoKmljbXBzdGF0KSk7CisgICAgbWVtc2V0KGljbXBtc2dzdGF0LCAwLCBzaXplb2YoKmljbXBtc2dzdGF0KSk7CisKKyAgICBpZiAoKHJldCA9IGxpbnV4X3JlYWRfbWliSUlfc3RhdHMoKSkgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAocmV0KSB7CisgICAgICAgbWVtY3B5KGljbXBtc2dzdGF0LCAmY2FjaGVkX2ljbXA0X21zZ19taWIsIHNpemVvZigqaWNtcG1zZ3N0YXQpKTsKKyAgICAgICAqZmxhZyA9IDE7IC8qIFdlIGhhdmUgYSB2YWxpZCBpY21wbXNnICovCisgICAgfQorCisgICAgbWVtY3B5KGljbXBzdGF0LCAmY2FjaGVkX2ljbXBfbWliLCBzaXplb2YoKmljbXBzdGF0KSk7CisgICAgcmV0dXJuIDA7Cit9CisKIGludAogbGludXhfcmVhZF9pY21wX3N0YXQoc3RydWN0IGljbXBfbWliICppY21wc3RhdCkKIHsKQEAgLTIwMCw2ICszODYsMTY5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2xpbnV4X3JlYWRfaWNtcDZfcGFyc2Uoc3RydWN0IGljbXA2X21pYiAqaWNtcDZzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqaWNtcDZtc2dzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnN1cHBvcnQpCit7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIEZJTEUgICAgICAgICAgICppbjsKKyAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XTsKKyAgICBjaGFyICAgICAgICAgICAgbmFtZVsyNTVdOworICAgIHVuc2lnbmVkIGxvbmcgICBzdGF0czsKKyAgICBjaGFyICAgICAgICAgICAqZW5kcCwgKnZhbHM7CisgICAgaW50ICAgICAgICAgICAgIG1hdGNoOworI2VuZGlmCisKKyAgICBtZW1zZXQoaWNtcDZzdGF0LCAwLCBzaXplb2YoKmljbXA2c3RhdCkpOworICAgIGlmIChOVUxMICE9IGljbXA2bXNnc3RhdCkKKyAgICAgICAgbWVtc2V0KGljbXA2bXNnc3RhdCwgMCwgc2l6ZW9mKCppY21wNm1zZ3N0YXQpKTsKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L2ljbXA2c3RhdHMiLAorICAgICAgICAgICAgICAgICJSZWFkaW5nIC9wcm9jL25ldC9zbm1wNiBzdGF0c1xuIikpOworICAgIGlmIChOVUxMID09IChpbiA9IGZvcGVuKCIvcHJvYy9uZXQvc25tcDYiLCAiciIpKSkgeworICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L2ljbXA2c3RhdHMiLAorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIG9wZW4gL3Byb2MvbmV0L3NubXA2XG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB3aGlsZSAoTlVMTCAhPSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgeworICAgICAgICBpZiAoMCAhPSBzdHJuY21wKGxpbmUsIElDTVA2X1NUQVRTX0xJTkUsIElDTVA2X1NUQVRTX1BSRUZJWF9MRU4pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKDIgIT0gc3NjYW5mKGxpbmUsICIlcyAlbHUiLCBuYW1lLCAmc3RhdHMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZW5kcCA9IHN0cmNocihsaW5lLCAnICcpOworICAgICAgICAqZW5kcCA9ICdcMCc7CisgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvaWNtcDZzdGF0cyIsICJGaW5kIHRhZzogJXNcbiIsIGxpbmUpKTsKKworICAgICAgICB2YWxzID0gbmFtZTsKKyAgICAgICAgaWYgKE5VTEwgIT0gaWNtcDZtc2dzdGF0KSB7CisgICAgICAgICAgICBpbnQgdHlwZTsKKyAgICAgICAgICAgIGlmICgwID09IHN0cm5jbXAobmFtZSwgIkljbXA2T3V0VHlwZSIsIDEyKSkgeworICAgICAgICAgICAgICAgIHN0cnNlcCgmdmFscywgImUiKTsKKyAgICAgICAgICAgICAgICB0eXBlID0gYXRvaSh2YWxzKTsKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPCAwIHx8IHR5cGUgPiAyNTUgKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpY21wNm1zZ3N0YXQtPnZhbHNbdHlwZV0uT3V0VHlwZSA9IHN0YXRzOworICAgICAgICAgICAgICAgICpzdXBwb3J0ID0gMTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJuY21wKG5hbWUsICJJY21wNkluVHlwZSIsIDExKSkgeworICAgICAgICAgICAgICAgIHN0cnNlcCgmdmFscywgImUiKTsKKyAgICAgICAgICAgICAgICB0eXBlID0gYXRvaSh2YWxzKTsKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPCAwIHx8IHR5cGUgPiAyNTUgKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpY21wNm1zZ3N0YXQtPnZhbHNbdHlwZV0uSW5UeXBlID0gc3RhdHM7CisgICAgICAgICAgICAgICAgKnN1cHBvcnQgPSAxOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWF0Y2ggPSAxOworICAgICAgICBpZiAoMCA9PSBzdHJuY21wKGxpbmUgKyA1LCAiSW4iLCAyKSkgeyAgLyogSW4gKi8KKyAgICAgICAgICAgIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkRlc3RVbnJlYWNocyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluRGVzdFVucmVhY2hzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiRWNob3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbkVjaG9zID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiRWNob1JlcGxpZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbkVjaG9SZXBsaWVzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiRXJyb3JzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5FcnJvcnMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJHcm91cE1lbWJRdWVyaWVzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5Hcm91cE1lbWJRdWVyaWVzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiR3JvdXBNZW1iUmVkdWN0aW9ucyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluR3JvdXBNZW1iUmVkdWN0aW9ucyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkdyb3VwTWVtYlJlc3BvbnNlcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluR3JvdXBNZW1iUmVzcG9uc2VzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiTXNncyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluTXNncyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIk5laWdoYm9yQWR2ZXJ0aXNlbWVudHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbk5laWdoYm9yQWR2ZXJ0aXNlbWVudHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJOZWlnaGJvclNvbGljaXRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5OZWlnaGJvclNvbGljaXRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiUGt0VG9vQmlncyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluUGt0VG9vQmlncyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIlBhcm1Qcm9ibGVtcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluUGFybVByb2JsZW1zID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiUmVkaXJlY3RzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5SZWRpcmVjdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJSb3V0ZXJBZHZlcnRpc2VtZW50cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluUm91dGVyQWR2ZXJ0aXNlbWVudHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJSb3V0ZXJTb2xpY2l0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluUm91dGVyU29saWNpdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJUaW1lRXhjZHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJblRpbWVFeGNkcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJuY21wKGxpbmUgKyA1LCAiT3V0IiwgMykpIHsgIC8qIE91dCAqLworICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiRGVzdFVucmVhY2hzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0RGVzdFVucmVhY2hzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiRWNob3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRFY2hvcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIkVjaG9SZXBsaWVzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0RWNob1JlcGxpZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJHcm91cE1lbWJSZWR1Y3Rpb25zIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0R3JvdXBNZW1iUmVkdWN0aW9ucyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIkdyb3VwTWVtYlJlc3BvbnNlcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dEdyb3VwTWVtYlJlc3BvbnNlcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIk1zZ3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRNc2dzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiTmVpZ2hib3JBZHZlcnRpc2VtZW50cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dE5laWdoYm9yQWR2ZXJ0aXNlbWVudHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJOZWlnaGJvclNvbGljaXRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0TmVpZ2hib3JTb2xpY2l0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIlBrdFRvb0JpZ3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRQa3RUb29CaWdzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiUGFybVByb2JsZW1zIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0UGFybVByb2JsZW1zID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiUmVkaXJlY3RzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0UmVkaXJlY3RzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiUm91dGVyU29saWNpdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRSb3V0ZXJTb2xpY2l0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIlRpbWVFeGNkcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dFRpbWVFeGNkcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYXRjaCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYoIW1hdGNoKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC9pY21wNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBhbiB1bmtub3duIHRhZ1xuIiwgbGluZSkpOworICAgIH0KKworICAgIGZjbG9zZShpbik7CisjZW5kaWYKKworICAgIG1lbWNweSgoY2hhciAqKSBpY21wNnN0YXQsIChjaGFyICopICZjYWNoZWRfaWNtcDZfbWliLAorICAgICAgICAgICBzaXplb2YoKmljbXA2c3RhdCkpOworICAgIHJldHVybiAwOworfQorCitpbnQKK2xpbnV4X3JlYWRfaWNtcDZfbXNnX3N0YXQoc3RydWN0IGljbXA2X21pYiAqaWNtcDZzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqaWNtcDZtc2dzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnN1cHBvcnQpCit7CisgICAgIGlmIChsaW51eF9yZWFkX2ljbXA2X3BhcnNlKGljbXA2c3RhdCwgaWNtcDZtc2dzdGF0LCBzdXBwb3J0KSA8IDApCisgICAgICAgICByZXR1cm4gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAwOworfQorCitpbnQKK2xpbnV4X3JlYWRfaWNtcDZfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICppY21wNnN0YXQpCit7CisgICBpZiAobGludXhfcmVhZF9pY21wNl9wYXJzZShpY21wNnN0YXQsIE5VTEwsIE5VTEwpIDwgMCkKKyAgICAgICByZXR1cm4gLTE7CisgICBlbHNlCisgICAgICAgcmV0dXJuIDA7Cit9CisKIGludAogbGludXhfcmVhZF90Y3Bfc3RhdChzdHJ1Y3QgdGNwX21pYiAqdGNwc3RhdCkKIHsKQEAgLTIxNiw2ICs1NjUsNzMgQEAKICAgICBtZW1zZXQoKGNoYXIgKikgdWRwc3RhdCwgKDApLCBzaXplb2YoKnVkcHN0YXQpKTsKICAgICBpZiAobGludXhfcmVhZF9taWJJSV9zdGF0cygpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgeworICAgICAgICBzdHJ1Y3QgdWRwNl9taWIgdWRwNnN0YXQ7CisgICAgICAgIG1lbXNldCgmdWRwNnN0YXQsIDAsIHNpemVvZih1ZHA2c3RhdCkpOworCisgICAgICAgIGlmIChsaW51eF9yZWFkX3VkcDZfc3RhdCgmdWRwNnN0YXQpID09IDApIHsKKyAgICAgICAgICAgIGNhY2hlZF91ZHBfbWliLnVkcE91dERhdGFncmFtcyArPSB1ZHA2c3RhdC51ZHA2T3V0RGF0YWdyYW1zOworICAgICAgICAgICAgY2FjaGVkX3VkcF9taWIudWRwTm9Qb3J0cyAgICAgICs9IHVkcDZzdGF0LnVkcDZOb1BvcnRzOworICAgICAgICAgICAgY2FjaGVkX3VkcF9taWIudWRwSW5EYXRhZ3JhbXMgICs9IHVkcDZzdGF0LnVkcDZJbkRhdGFncmFtczsKKyAgICAgICAgICAgIGNhY2hlZF91ZHBfbWliLnVkcEluRXJyb3JzICAgICArPSB1ZHA2c3RhdC51ZHA2SW5FcnJvcnM7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKICAgICBtZW1jcHkoKGNoYXIgKikgdWRwc3RhdCwgKGNoYXIgKikgJmNhY2hlZF91ZHBfbWliLCBzaXplb2YoKnVkcHN0YXQpKTsKICAgICByZXR1cm4gMDsKIH0KKworaW50CitsaW51eF9yZWFkX3VkcDZfc3RhdChzdHJ1Y3QgdWRwNl9taWIgKnVkcDZzdGF0KQoreworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBGSUxFICAgICAgICAgICAqaW47CisgICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF07CisgICAgdW5zaWduZWQgbG9uZyAgIHN0YXRzOworICAgIGNoYXIgICAgICAgICAgICplbmRwOworI2VuZGlmCisKKyAgICBtZW1zZXQodWRwNnN0YXQsIDAsIHNpemVvZigqdWRwNnN0YXQpKTsKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L3VkcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgIlJlYWRpbmcgL3Byb2MvbmV0L3NubXA2IHN0YXRzXG4iKSk7CisgICAgaWYgKE5VTEwgPT0gKGluID0gZm9wZW4oIi9wcm9jL25ldC9zbm1wNiIsICJyIikpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvdWRwNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBvcGVuIC9wcm9jL25ldC9zbm1wNlxuIikpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB3aGlsZSAoTlVMTCAhPSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgeworICAgICAgICBpZiAoMCAhPSBzdHJuY21wKGxpbmUsIFVEUDZfU1RBVFNfTElORSwgVURQNl9TVEFUU19QUkVGSVhfTEVOKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgxICE9IHNzY2FuZihsaW5lLCAiJSpzICVsdSIsICZzdGF0cykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbmRwID0gc3RyY2hyKGxpbmUsICcgJyk7CisgICAgICAgICplbmRwID0gJ1wwJzsKKyAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC91ZHA2c3RhdHMiLCAiRmluZCB0YWc6ICVzXG4iLCBsaW5lKSk7CisKKyAgICAgICAgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA0LCAiT3V0RGF0YWdyYW1zIikpIHsKKyAgICAgICAgICAgIGNhY2hlZF91ZHA2X21pYi51ZHA2T3V0RGF0YWdyYW1zID0gc3RhdHM7CisgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDQsICJOb1BvcnRzIikpIHsKKyAgICAgICAgICAgIGNhY2hlZF91ZHA2X21pYi51ZHA2Tm9Qb3J0cyA9IHN0YXRzOworICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA0LCAiSW5EYXRhZ3JhbXMiKSkgeworICAgICAgICAgICAgY2FjaGVkX3VkcDZfbWliLnVkcDZJbkRhdGFncmFtcyA9IHN0YXRzOworICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA0LCAiSW5FcnJvcnMiKSkgeworICAgICAgICAgICAgY2FjaGVkX3VkcDZfbWliLnVkcDZJbkVycm9ycyA9IHN0YXRzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC91ZHA2c3RhdHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIGFuIHVua25vd24gdGFnXG4iLCBsaW5lKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmY2xvc2UoaW4pOworI2VuZGlmCisKKyAgICBtZW1jcHkoKGNoYXIgKikgdWRwNnN0YXQsIChjaGFyICopICZjYWNoZWRfdWRwNl9taWIsIHNpemVvZigqdWRwNnN0YXQpKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmgKaW5kZXggZmI3ZGI5Ni4uYjNjNThkMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmgKQEAgLTYsODggKzYsMjAgQEAKICNpZm5kZWYgX01JQkdST1VQX0tFUk5FTF9MSU5VWF9ICiAjZGVmaW5lIF9NSUJHUk9VUF9LRVJORUxfTElOVVhfSAogCi1zdHJ1Y3QgaXBfbWliIHsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGb3J3YXJkaW5nOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcERlZmF1bHRUVEw7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5SZWNlaXZlczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJbkhkckVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJbkFkZHJFcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRm9yd0RhdGFncmFtczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJblVua25vd25Qcm90b3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5EaXNjYXJkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJbkRlbGl2ZXJzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dFJlcXVlc3RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dERpc2NhcmRzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dE5vUm91dGVzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtVGltZW91dDsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbVJlcWRzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtT0tzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtRmFpbHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ09LczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnRmFpbHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ0NyZWF0ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUm91dGluZ0Rpc2NhcmRzOwotfTsKLQotc3RydWN0IGljbXBfbWliIHsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluTXNnczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5EZXN0VW5yZWFjaHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVFeGNkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluUGFybVByb2JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5TcmNRdWVuY2hzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5SZWRpcmVjdHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVjaG9zOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FY2hvUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZXN0YW1wczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZXN0YW1wUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluQWRkck1hc2tzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5BZGRyTWFza1JlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRNc2dzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RGVzdFVucmVhY2hzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZUV4Y2RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0UGFybVByb2JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0U3JjUXVlbmNoczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFJlZGlyZWN0czsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVjaG9zOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RWNob1JlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lc3RhbXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZXN0YW1wUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEFkZHJNYXNrczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEFkZHJNYXNrUmVwczsKLX07Ci0KLXN0cnVjdCB1ZHBfbWliIHsKLSAgICB1bnNpZ25lZCBsb25nICAgdWRwSW5EYXRhZ3JhbXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHVkcE5vUG9ydHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHVkcEluRXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBPdXREYXRhZ3JhbXM7Ci19OwotCi1zdHJ1Y3QgdGNwX21pYiB7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b0FsZ29yaXRobTsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvTWluOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9NYXg7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcE1heENvbm47Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEFjdGl2ZU9wZW5zOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BQYXNzaXZlT3BlbnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEF0dGVtcHRGYWlsczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwRXN0YWJSZXNldHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEN1cnJFc3RhYjsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwSW5TZWdzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BPdXRTZWdzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSZXRyYW5zU2VnczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwSW5FcnJzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BPdXRSc3RzOwotICAgIHNob3J0ICAgICAgICAgICB0Y3BJbkVycnNWYWxpZDsKLSAgICBzaG9ydCAgICAgICAgICAgdGNwT3V0UnN0c1ZhbGlkOwotfTsKLQorI2luY2x1ZGUgImtlcm5lbF9taWIuaCIKIAogaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfaXBfc3RhdChzdHJ1Y3QgaXBfbWliICopOworaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfaXA2X3N0YXQoc3RydWN0IGlwNl9taWIgKik7CiBpbnQgICAgICAgICAgICAgbGludXhfcmVhZF9pY21wX3N0YXQoc3RydWN0IGljbXBfbWliICopOworaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfaWNtcDZfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICopOwogaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfdWRwX3N0YXQoc3RydWN0IHVkcF9taWIgKik7CitpbnQgICAgICAgICAgICAgbGludXhfcmVhZF91ZHA2X3N0YXQoc3RydWN0IHVkcDZfbWliICopOwogaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfdGNwX3N0YXQoc3RydWN0IHRjcF9taWIgKik7CitpbnQgICAgICAgICAgICAgbGludXhfcmVhZF9pY21wX21zZ19zdGF0KHN0cnVjdCBpY21wX21pYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmZsYWcpOworaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfaWNtcDZfbXNnX3N0YXQoc3RydWN0IGljbXA2X21pYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA2X21zZ19taWIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3VwcG9ydCk7CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0tFUk5FTF9MSU5VWF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbWliLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4NjM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9taWIuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqICBNSUIgc3RhdGlzdGljcyBnYXRoZXJpbmcgc3RydWN0dXJlcworICovCisKKyNpZm5kZWYgX01JQkdST1VQX0tFUk5FTF9NSUJfSAorI2RlZmluZSBfTUlCR1JPVVBfS0VSTkVMX01JQl9ICisKK3N0cnVjdCBpcF9taWIgeworICAgIHVuc2lnbmVkIGxvbmcgICBpcEZvcndhcmRpbmc7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwRGVmYXVsdFRUTDsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBJblJlY2VpdmVzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEluSGRyRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEluQWRkckVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBGb3J3RGF0YWdyYW1zOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEluVW5rbm93blByb3RvczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBJbkRpc2NhcmRzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEluRGVsaXZlcnM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0UmVxdWVzdHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0RGlzY2FyZHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0Tm9Sb3V0ZXM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21UaW1lb3V0OworICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtUmVxZHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21PS3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21GYWlsczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnT0tzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdGYWlsczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnQ3JlYXRlczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBSb3V0aW5nRGlzY2FyZHM7Cit9OworCitzdHJ1Y3QgaXA2X21pYiB7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJblJlY2VpdmVzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5IZHJFcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJblRvb0JpZ0Vycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluTm9Sb3V0ZXM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJbkFkZHJFcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJblVua25vd25Qcm90b3M7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJblRydW5jYXRlZFBrdHM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJbkRpc2NhcmRzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5EZWxpdmVyczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNk91dEZvcndEYXRhZ3JhbXM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZPdXRSZXF1ZXN0czsKKyAgICB1bnNpZ25lZCBsb25nIGlwNk91dERpc2NhcmRzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2T3V0Tm9Sb3V0ZXM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZSZWFzbVRpbWVvdXQ7CisgICAgdW5zaWduZWQgbG9uZyBpcDZSZWFzbVJlcWRzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2UmVhc21PS3M7CisgICAgdW5zaWduZWQgbG9uZyBpcDZSZWFzbUZhaWxzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2RnJhZ09LczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkZyYWdGYWlsczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkZyYWdDcmVhdGVzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5NY2FzdFBrdHM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZPdXRNY2FzdFBrdHM7Cit9OworCitzdHJ1Y3QgaWNtcF9taWIgeworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5Nc2dzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkRlc3RVbnJlYWNoczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZUV4Y2RzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5QYXJtUHJvYnM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblNyY1F1ZW5jaHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblJlZGlyZWN0czsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRWNob3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVjaG9SZXBzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lc3RhbXBzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lc3RhbXBSZXBzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5BZGRyTWFza3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkFkZHJNYXNrUmVwczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dE1zZ3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXREZXN0VW5yZWFjaHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lRXhjZHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRQYXJtUHJvYnM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRTcmNRdWVuY2hzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0UmVkaXJlY3RzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RWNob3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFY2hvUmVwczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVzdGFtcHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lc3RhbXBSZXBzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0QWRkck1hc2tzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0QWRkck1hc2tSZXBzOworfTsKKworc3RydWN0IGljbXA2X21pYiB7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluTXNnczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5FcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluRGVzdFVucmVhY2hzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJblBrdFRvb0JpZ3M7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluVGltZUV4Y2RzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJblBhcm1Qcm9ibGVtczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5FY2hvczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5FY2hvUmVwbGllczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5Hcm91cE1lbWJRdWVyaWVzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbkdyb3VwTWVtYlJlc3BvbnNlczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5Hcm91cE1lbWJSZWR1Y3Rpb25zOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJblJvdXRlclNvbGljaXRzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJblJvdXRlckFkdmVydGlzZW1lbnRzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbk5laWdoYm9yU29saWNpdHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluTmVpZ2hib3JBZHZlcnRpc2VtZW50czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5SZWRpcmVjdHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dE1zZ3M7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dERlc3RVbnJlYWNoczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0UGt0VG9vQmlnczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0VGltZUV4Y2RzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRQYXJtUHJvYmxlbXM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dEVjaG9zOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRFY2hvUmVwbGllczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0Um91dGVyU29saWNpdHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dE5laWdoYm9yU29saWNpdHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dE5laWdoYm9yQWR2ZXJ0aXNlbWVudHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dFJlZGlyZWN0czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0R3JvdXBNZW1iUmVzcG9uc2VzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRHcm91cE1lbWJSZWR1Y3Rpb25zOworfTsKKworc3RydWN0IGljbXBfbXNnX21pYiB7CisgICAgdW5zaWduZWQgbG9uZyBJblR5cGU7CisgICAgdW5zaWduZWQgbG9uZyBPdXRUeXBlOworfTsKKworLyogTGV0cyB1c2Ugd3JhcHBlciBzdHJ1Y3R1cmVzIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCitzdHJ1Y3QgaWNtcDRfbXNnX21pYiB7CisgICAgc3RydWN0IGljbXBfbXNnX21pYiB2YWxzWzI1Nl07Cit9OworCitzdHJ1Y3QgaWNtcDZfbXNnX21pYiB7CisgICAgc3RydWN0IGljbXBfbXNnX21pYiB2YWxzWzI1Nl07Cit9OworCitzdHJ1Y3QgdWRwX21pYiB7CisgICAgdW5zaWduZWQgbG9uZyAgIHVkcEluRGF0YWdyYW1zOworICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBOb1BvcnRzOworICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBJbkVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nICAgdWRwT3V0RGF0YWdyYW1zOworfTsKKworc3RydWN0IHVkcDZfbWliIHsKKyAgICB1bnNpZ25lZCBsb25nIHVkcDZJbkRhdGFncmFtczsKKyAgICB1bnNpZ25lZCBsb25nIHVkcDZOb1BvcnRzOworICAgIHVuc2lnbmVkIGxvbmcgdWRwNkluRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgdWRwNk91dERhdGFncmFtczsKK307CisKK3N0cnVjdCB0Y3BfbWliIHsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvQWxnb3JpdGhtOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9NaW47CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b01heDsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwTWF4Q29ubjsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwQWN0aXZlT3BlbnM7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcFBhc3NpdmVPcGVuczsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwQXR0ZW1wdEZhaWxzOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BFc3RhYlJlc2V0czsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwQ3VyckVzdGFiOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BJblNlZ3M7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcE91dFNlZ3M7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcFJldHJhbnNTZWdzOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BJbkVycnM7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcE91dFJzdHM7CisgICAgc2hvcnQgICAgICAgICAgIHRjcEluRXJyc1ZhbGlkOworICAgIHNob3J0ICAgICAgICAgICB0Y3BPdXRSc3RzVmFsaWQ7Cit9OworCisjZW5kaWYgIC8qIF9NSUJHUk9VUF9LRVJORUxfTUlCX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuYwppbmRleCA5M2YzOGI3Li4wODA2MTgwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2ljbXBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgogI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KICNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KQEAgLTM4LDggKzM5LDEwIEBACiAKICAgICAodm9pZCltZW1zZXQobWliLCAwLCBzaXplb2YoKm1pYikpOwogCi0gICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuaWNtcC5zdGF0cyIsIGljbXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpCisgICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuaWNtcC5zdGF0cyIsIGljbXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigibmV0YnNkX3JlYWRfaWNtcF9zdGF0OiBuZXQuaW5ldC5pY21wLnN0YXRzIik7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBtaWItPmljbXBJbk1zZ3MgPSBpY21wc3RhdFtJQ01QX1NUQVRfQkFEQ09ERV0KICAgICAgICAgKyBpY21wc3RhdFtJQ01QX1NUQVRfVE9PU0hPUlRdCkBAIC04Niw2ICs4OSwxMDQgQEAKICAgICByZXR1cm4gMDsKIH0KIAorCitpbnQKK25ldGJzZF9yZWFkX2ljbXA2X3N0YXQoc3RydWN0IGljbXA2X21pYiAqbWliKQoreworICAgIHVpbnQ2NF90IGljbXBzdGF0W0lDTVA2X05TVEFUU107CisgICAgc2l6ZV90ICAgc2l6ZSA9IHNpemVvZihpY21wc3RhdCk7CisgICAgaW50ICAgICAgaTsKKworICAgICh2b2lkKW1lbXNldChtaWIsIDAsIHNpemVvZigqbWliKSk7CisKKyAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldDYuaWNtcDYuc3RhdHMiLCBpY21wc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoIm5ldGJzZF9yZWFkX2ljbXA2X3N0YXQ6IG5ldC5pbmV0Ni5pY21wNi5zdGF0cyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbWliLT5pY21wNkluTXNncyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfQkFEQ09ERV0KKyAgICAgICAgICAgICsgaWNtcHN0YXRbSUNNUF9TVEFUX1RPT1NIT1JUXQorCSAgICArIGljbXBzdGF0W0lDTVBfU1RBVF9DSEVDS1NVTV0KKyAgICAgICAgICAgICsgaWNtcHN0YXRbSUNNUF9TVEFUX0JBRExFTl07CisgICAgZm9yIChpID0gMDsgaSA8PSBJQ01QNl9NQVhUWVBFOyBpKyspCisgICAgICAgIG1pYi0+aWNtcDZJbk1zZ3MgICs9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgaV07CisgICAgbWliLT5pY21wNkluRXJyb3JzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9CQURDT0RFXQorICAgICAgICArIGljbXBzdGF0W0lDTVA2X1NUQVRfVE9PU0hPUlRdCisgICAgICAgICsgaWNtcHN0YXRbSUNNUDZfU1RBVF9DSEVDS1NVTV0KKyAgICAgICAgKyBpY21wc3RhdFtJQ01QNl9TVEFUX0JBRExFTl07CisgICAgbWliLT5pY21wNkluRGVzdFVucmVhY2hzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBJQ01QNl9EU1RfVU5SRUFDSF07CisgICAgbWliLT5pY21wNkluUGt0VG9vQmlncyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgSUNNUDZfUEFDS0VUX1RPT19CSUddOworICAgIG1pYi0+aWNtcDZJblRpbWVFeGNkcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgSUNNUDZfVElNRV9FWENFRURFRF07CisgICAgbWliLT5pY21wNkluUGFybVByb2JsZW1zID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBJQ01QNl9QQVJBTV9QUk9CXTsKKyAgICBtaWItPmljbXA2SW5FY2hvcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgSUNNUDZfRUNIT19SRVFVRVNUXTsKKyAgICBtaWItPmljbXA2SW5FY2hvUmVwbGllcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgSUNNUDZfRUNIT19SRVBMWV07CisgICAgbWliLT5pY21wNkluR3JvdXBNZW1iUXVlcmllcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgTUxEX0xJU1RFTkVSX1FVRVJZXTsKKyAgICBtaWItPmljbXA2SW5Hcm91cE1lbWJSZXNwb25zZXMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIE1MRF9MSVNURU5FUl9SRVBPUlRdOworICAgIG1pYi0+aWNtcDZJblJvdXRlclNvbGljaXRzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBORF9ST1VURVJfU09MSUNJVF07CisgICAgbWliLT5pY21wNkluUm91dGVyQWR2ZXJ0aXNlbWVudHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIE5EX1JPVVRFUl9BRFZFUlRdOworICAgIG1pYi0+aWNtcDZJbk5laWdoYm9yU29saWNpdHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIE5EX05FSUdIQk9SX1NPTElDSVRdOworICAgIG1pYi0+aWNtcDZJbk5laWdoYm9yQWR2ZXJ0aXNlbWVudHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIE5EX05FSUdIQk9SX0FEVkVSVF07CisgICAgbWliLT5pY21wNkluUmVkaXJlY3RzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBORF9SRURJUkVDVF07CisKKyAgICBtaWItPmljbXA2T3V0TXNncyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfQkFEQ09ERV0KKyAgICAgICAgKyBpY21wc3RhdFtJQ01QNl9TVEFUX1RPT1NIT1JUXQorICAgICAgICArIGljbXBzdGF0W0lDTVA2X1NUQVRfQ0hFQ0tTVU1dCisgICAgICAgICsgaWNtcHN0YXRbSUNNUDZfU1RBVF9CQURMRU5dOworICAgIGZvciAoaSA9IDA7IGkgPD0gSUNNUDZfTUFYVFlQRTsgaSsrKQorICAgICAgICBtaWItPmljbXA2T3V0TXNncyArPSBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBpXTsKKyAgICBtaWItPmljbXA2T3V0RGVzdFVucmVhY2hzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgSUNNUDZfRFNUX1VOUkVBQ0hdOworICAgIG1pYi0+aWNtcDZPdXRQa3RUb29CaWdzID0gIGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIElDTVA2X1BBQ0tFVF9UT09fQklHXTsKKyAgICBtaWItPmljbXA2T3V0VGltZUV4Y2RzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgSUNNUDZfVElNRV9FWENFRURFRF07CisgICAgbWliLT5pY21wNk91dFBhcm1Qcm9ibGVtcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIElDTVA2X1BBUkFNX1BST0JdOworICAgIG1pYi0+aWNtcDZPdXRFY2hvcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIElDTVA2X0VDSE9fUkVRVUVTVF07CisgICAgbWliLT5pY21wNk91dEVjaG9SZXBsaWVzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgSUNNUDZfRUNIT19SRVBMWV07CisgICAgbWliLT5pY21wNk91dFJvdXRlclNvbGljaXRzID0gIGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIE5EX1JPVVRFUl9TT0xJQ0lUXTsKKyAgICBtaWItPmljbXA2T3V0TmVpZ2hib3JTb2xpY2l0cyA9ICBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBORF9ORUlHSEJPUl9TT0xJQ0lUXTsKKyAgICBtaWItPmljbXA2T3V0TmVpZ2hib3JBZHZlcnRpc2VtZW50cyA9ICBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBORF9ORUlHSEJPUl9BRFZFUlRdOworICAgIG1pYi0+aWNtcDZPdXRSZWRpcmVjdHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBORF9SRURJUkVDVF07CisgICAgbWliLT5pY21wNk91dEdyb3VwTWVtYlJlc3BvbnNlcyA9ICBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBNTERfTElTVEVORVJfUkVQT1JUXTsKKyAgICBtaWItPmljbXA2T3V0R3JvdXBNZW1iUmVkdWN0aW9ucyA9ICBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBNTERfTElTVEVORVJfRE9ORV07CisKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK25ldGJzZF9yZWFkX2ljbXBfbXNnX3N0YXQoc3RydWN0IGljbXBfbWliICptaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNF9tc2dfbWliICptc2dtaWIsCisJCQkgIGludCAqZmxhZykKK3sKKyAgICBuZXRic2RfcmVhZF9pY21wX3N0YXQobWliKTsKKyAgICAqZmxhZyA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKKworaW50CituZXRic2RfcmVhZF9pY21wNl9tc2dfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICptaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqbXNnbWliLAorCQkJICAgaW50ICpzdXBwb3J0KQoreworICAgIHVpbnQ2NF90IGljbXBzdGF0W0lDTVA2X05TVEFUU107CisgICAgc2l6ZV90ICAgc2l6ZSA9IHNpemVvZihpY21wc3RhdCk7CisgICAgaW50ICAgICAgaTsKKworICAgIG5ldGJzZF9yZWFkX2ljbXA2X3N0YXQobWliKTsKKworICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0Ni5pY21wNi5zdGF0cyIsIGljbXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigibmV0YnNkX3JlYWRfaWNtcDZfc3RhdDogbmV0LmluZXQ2LmljbXA2LnN0YXRzIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwltc2dtaWItPnZhbHNbaV0uSW5UeXBlID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QraV07CisJbXNnbWliLT52YWxzW2ldLk91dFR5cGUgPSBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QraV07CisgICAgfQorICAgICpzdXBwb3J0ID0gMTsKKyAgICByZXR1cm4gMDsKK30KKworCiBpbnQKIG5ldGJzZF9yZWFkX2lwX3N0YXQoc3RydWN0IGlwX21pYiAqbWliKQogewpAQCAtOTcsOCArMTk4LDEwIEBACiAKICAgICAodm9pZCltZW1zZXQobWliLCAwLCBzaXplb2YoKm1pYikpOwogCi0gICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuaXAuc3RhdHMiLCBpcHN0YXQsICZzaXplLCBOVUxMLCAwKSkKKyAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5pcC5zdGF0cyIsIGlwc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoIm5ldGJzZF9yZWFkX2lwX3N0YXQ6IG5ldC5pbmV0LmlwLnN0YXRzIik7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBtaWItPmlwRm9yd2FyZGluZyA9IDA7CiAgICAgbGVuID0gc2l6ZW9mIGk7CkBAIC0xMzgsNiArMjQxLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorCiBpbnQKIG5ldGJzZF9yZWFkX3RjcF9zdGF0KHN0cnVjdCB0Y3BfbWliICptaWIpCiB7CkBAIC0xNDYsOCArMjUwLDEwIEBACiAKICAgICAodm9pZCltZW1zZXQobWliLCAwLCBzaXplb2YoKm1pYikpOwogCi0gICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQudGNwLnN0YXRzIiwgdGNwc3RhdCwgJnNpemUsIE5VTEwsIDApKQorICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnRjcC5zdGF0cyIsIHRjcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJuZXRic2RfcmVhZF90Y3Bfc3RhdDogbmV0LmluZXQudGNwLnN0YXRzIik7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBtaWItPnRjcFJ0b0FsZ29yaXRobSA9IDQ7IC8qIEFzc3VtZSBWYW4gSmFjb2JzZW4ncyBhbGdvcml0aG0gKi8KICAgICBtaWItPnRjcFJ0b01pbiA9IFRDUFRWX01JTjsKQEAgLTE3NCw2ICsyODAsNyBAQAogICAgIHJldHVybiAwOwogfQogCisKIGludAogbmV0YnNkX3JlYWRfdWRwX3N0YXQoc3RydWN0IHVkcF9taWIgKm1pYikKIHsKQEAgLTE4MiwxNCArMjg5LDE2IEBACiAKICAgICAodm9pZCltZW1zZXQobWliLCAwLCBzaXplb2YoKm1pYikpOwogCi0gICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQudWRwLnN0YXRzIiwgdWRwc3RhdCwgJnNpemUsIE5VTEwsIDApKQorICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnVkcC5zdGF0cyIsIHVkcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJuZXRic2RfcmVhZF91ZHBfc3RhdDogbmV0LmluZXQudWRwLnN0YXRzIik7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBtaWItPnVkcEluRGF0YWdyYW1zID0gdWRwc3RhdFtVRFBfU1RBVF9JUEFDS0VUU107CiAgICAgbWliLT51ZHBOb1BvcnRzID0gdWRwc3RhdFtVRFBfU1RBVF9OT1BPUlRdOwogICAgIG1pYi0+dWRwT3V0RGF0YWdyYW1zID0gdWRwc3RhdFtVRFBfU1RBVF9PUEFDS0VUU107CiAgICAgbWliLT51ZHBJbkVycm9ycyA9IHVkcHN0YXRbVURQX1NUQVRfSERST1BTXQotICAgICAgICArIHVkcHN0YXRbVURQX1NUQVRfQkFEU1VNXSAvKiArIHVkcHN0YXRbVURQX1NUQVRfRElTQ0FSRF0gLyogRklYTUUgKi8KKyAgICAgICAgKyB1ZHBzdGF0W1VEUF9TVEFUX0JBRFNVTV0gLyogKyB1ZHBzdGF0W1VEUF9TVEFUX0RJU0NBUkRdICovIC8qIEZJWE1FICovCiAgICAgICAgICsgdWRwc3RhdFtVRFBfU1RBVF9GVUxMU09DS10gKyB1ZHBzdGF0W1VEUF9TVEFUX0JBRExFTl07CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuaAppbmRleCA5MDAwNjgyLi5hY2NiOWE3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5oCkBAIC0zLDg1ICszLDE2IEBACiAKICNpZiBkZWZpbmVkKE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMKQogCi1zdHJ1Y3QgaWNtcF9taWIgewotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5Nc2dzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkRlc3RVbnJlYWNoczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZUV4Y2RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5QYXJtUHJvYnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblNyY1F1ZW5jaHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblJlZGlyZWN0czsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRWNob3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVjaG9SZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lc3RhbXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lc3RhbXBSZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5BZGRyTWFza3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkFkZHJNYXNrUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dE1zZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXREZXN0VW5yZWFjaHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lRXhjZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRQYXJtUHJvYnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRTcmNRdWVuY2hzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0UmVkaXJlY3RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RWNob3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFY2hvUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVzdGFtcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lc3RhbXBSZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0QWRkck1hc2tzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0QWRkck1hc2tSZXBzOwotfTsKLQotc3RydWN0IGlwX21pYiB7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRm9yd2FyZGluZzsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBEZWZhdWx0VFRMOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluUmVjZWl2ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5IZHJFcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5BZGRyRXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZvcndEYXRhZ3JhbXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5Vbmtub3duUHJvdG9zOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluRGlzY2FyZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5EZWxpdmVyczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBPdXRSZXF1ZXN0czsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBPdXREaXNjYXJkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBPdXROb1JvdXRlczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbVRpbWVvdXQ7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21SZXFkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbU9LczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbUZhaWxzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdPS3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ0ZhaWxzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdDcmVhdGVzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJvdXRpbmdEaXNjYXJkczsKLX07Ci0KLXN0cnVjdCB0Y3BfbWliIHsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvQWxnb3JpdGhtOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9NaW47Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b01heDsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwTWF4Q29ubjsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwQWN0aXZlT3BlbnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFBhc3NpdmVPcGVuczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwQXR0ZW1wdEZhaWxzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BFc3RhYlJlc2V0czsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwQ3VyckVzdGFiOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BJblNlZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcE91dFNlZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFJldHJhbnNTZWdzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BJbkVycnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcE91dFJzdHM7Ci0gICAgc2hvcnQgICAgICAgICAgIHRjcEluRXJyc1ZhbGlkOwotICAgIHNob3J0ICAgICAgICAgICB0Y3BPdXRSc3RzVmFsaWQ7Ci19OwotCi1zdHJ1Y3QgdWRwX21pYiB7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHVkcEluRGF0YWdyYW1zOwotICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBOb1BvcnRzOwotICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBJbkVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgdWRwT3V0RGF0YWdyYW1zOwotfTsKKyNpbmNsdWRlICJrZXJuZWxfbWliLmgiCiAKIGludCAgICAgIG5ldGJzZF9yZWFkX2ljbXBfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKik7CitpbnQgICAgICBuZXRic2RfcmVhZF9pY21wNl9zdGF0KHN0cnVjdCBpY21wNl9taWIgKik7CitpbnQgICAgICBuZXRic2RfcmVhZF9pY21wX21zZ19zdGF0KHN0cnVjdCBpY21wX21pYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqLAorCQkgCQkgIGludCAqZmxhZyk7CitpbnQgICAgICBuZXRic2RfcmVhZF9pY21wNl9tc2dfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqLAorCQkJCSAgICBpbnQgKnN1cHBvcnQpOwogaW50ICAgICAgbmV0YnNkX3JlYWRfaXBfc3RhdChzdHJ1Y3QgaXBfbWliICopOwogaW50ICAgICAgbmV0YnNkX3JlYWRfdGNwX3N0YXQoc3RydWN0IHRjcF9taWIgKik7CiBpbnQgICAgICBuZXRic2RfcmVhZF91ZHBfc3RhdChzdHJ1Y3QgdWRwX21pYiAqKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9zeXNjdGwuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjZmNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX3N5c2N0bC5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogc3lzY3RsIGludGVyZmFjZSBmb3IgaWNtcCBzdGF0cyBmb3Igb3RoZXJzIHRoYW4gTmV0QlNECisgKi8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAia2VybmVsX3N5c2N0bC5oIgorCisjaWYgZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKQorCitpbnQKK3N5c2N0bF9yZWFkX2ljbXBfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKm1pYikKK3sKKyAgICBzdHJ1Y3QgaWNtcHN0YXQgaWNtcHN0YXQ7CisgICAgc2l6ZV90ICAgc2l6ZSA9IHNpemVvZihpY21wc3RhdCk7CisgICAgaW50ICAgICAgaTsKKyAgICBzdGF0aWMgaW50ICAgICAgc25hbWVbNF0gPQorICAgICAgICB7IENUTF9ORVQsIFBGX0lORVQsIElQUFJPVE9fSUNNUCwgSUNNUENUTF9TVEFUUyB9OworCisgICAgKHZvaWQpbWVtc2V0KG1pYiwgMCwgc2l6ZW9mKCptaWIpKTsKKworICAgIGlmICgtMSA9PSBzeXNjdGwoc25hbWUsIDQsICZpY21wc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoInN5c2N0bF9yZWFkX2ljbXBfc3RhdDogbmV0LmluZXQuaWNtcC5zdGF0cyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbWliLT5pY21wSW5Nc2dzID0gaWNtcHN0YXQuaWNwc19iYWRjb2RlCisgICAgICAgICsgaWNtcHN0YXQuaWNwc190b29zaG9ydAorICAgICAgICArIGljbXBzdGF0LmljcHNfY2hlY2tzdW0KKyAgICAgICAgKyBpY21wc3RhdC5pY3BzX2JhZGxlbjsKKyAgICBtaWItPmljbXBJbkVycm9ycyA9IG1pYi0+aWNtcEluTXNnczsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IElDTVBfTUFYVFlQRTsgaSsrKQorICAgICAgICBtaWItPmljbXBJbk1zZ3MgICs9IGljbXBzdGF0LmljcHNfaW5oaXN0W2ldOworICAgIG1pYi0+aWNtcEluRGVzdFVucmVhY2hzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9VTlJFQUNIXTsKKyAgICBtaWItPmljbXBJblRpbWVFeGNkcyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfVElNWENFRURdOworICAgIG1pYi0+aWNtcEluUGFybVByb2JzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9QQVJBTVBST0JdOworICAgIG1pYi0+aWNtcEluU3JjUXVlbmNocyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfU09VUkNFUVVFTkNIXTsKKyAgICBtaWItPmljbXBJblJlZGlyZWN0cyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfUkVESVJFQ1RdOworICAgIG1pYi0+aWNtcEluRWNob3MgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX0VDSE9dOworICAgIG1pYi0+aWNtcEluRWNob1JlcHMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX0VDSE9SRVBMWV07CisgICAgbWliLT5pY21wSW5UaW1lc3RhbXBzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9UU1RBTVBdOworICAgIG1pYi0+aWNtcEluVGltZXN0YW1wUmVwcyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfVFNUQU1QUkVQTFldOworICAgIG1pYi0+aWNtcEluQWRkck1hc2tzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9NQVNLUkVRXTsKKyAgICBtaWItPmljbXBJbkFkZHJNYXNrUmVwcyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfTUFTS1JFUExZXTsKKyAgICBtaWItPmljbXBPdXRNc2dzID0gaWNtcHN0YXQuaWNwc19vbGRzaG9ydCArIGljbXBzdGF0LmljcHNfb2xkaWNtcDsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IElDTVBfTUFYVFlQRTsgaSsrKQorICAgICAgICBtaWItPmljbXBPdXRNc2dzICs9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtpXTsKKyAgICBtaWItPmljbXBPdXRFcnJvcnMgPSBpY21wc3RhdC5pY3BzX29sZHNob3J0ICsgaWNtcHN0YXQuaWNwc19vbGRpY21wOworICAgIG1pYi0+aWNtcE91dERlc3RVbnJlYWNocyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX1VOUkVBQ0hdOworICAgIG1pYi0+aWNtcE91dFRpbWVFeGNkcyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX1RJTVhDRUVEXTsKKyAgICBtaWItPmljbXBPdXRQYXJtUHJvYnMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9QQVJBTVBST0JdOworICAgIG1pYi0+aWNtcE91dFNyY1F1ZW5jaHMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9TT1VSQ0VRVUVOQ0hdOworICAgIG1pYi0+aWNtcE91dFJlZGlyZWN0cyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX1JFRElSRUNUXTsKKyAgICBtaWItPmljbXBPdXRFY2hvcyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX0VDSE9dOworICAgIG1pYi0+aWNtcE91dEVjaG9SZXBzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfRUNIT1JFUExZXTsKKyAgICBtaWItPmljbXBPdXRUaW1lc3RhbXBzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfVFNUQU1QXTsKKyAgICBtaWItPmljbXBPdXRUaW1lc3RhbXBSZXBzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfVFNUQU1QUkVQTFldOworICAgIG1pYi0+aWNtcE91dEFkZHJNYXNrcyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX01BU0tSRVFdOworICAgIG1pYi0+aWNtcE91dEFkZHJNYXNrUmVwcyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX01BU0tSRVBMWV07CisKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK3N5c2N0bF9yZWFkX2ljbXA2X3N0YXQoc3RydWN0IGljbXA2X21pYiAqbWliKQoreworICAgIHN0cnVjdCBpY21wNnN0YXQgaWNtcHN0YXQ7CisgICAgc2l6ZV90ICAgc2l6ZSA9IHNpemVvZihpY21wc3RhdCk7CisgICAgaW50ICAgICAgaTsKKyAgICBzdGF0aWMgaW50ICAgICAgc25hbWVbNF0gPQorICAgICAgICB7IENUTF9ORVQsIFBGX0lORVQ2LCBJUFBST1RPX0lDTVBWNiwgSUNNUFY2Q1RMX1NUQVRTIH07CisKKyAgICAodm9pZCltZW1zZXQobWliLCAwLCBzaXplb2YoKm1pYikpOworCisgICAgaWYgKC0xID09IHN5c2N0bChzbmFtZSwgNCwgJmljbXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigic3lzY3RsX3JlYWRfaWNtcDZfc3RhdDogbmV0LmluZXQ2LmljbXA2LnN0YXRzIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtaWItPmljbXA2SW5Nc2dzID0gaWNtcHN0YXQuaWNwNnNfYmFkY29kZQorICAgICAgICAgICAgKyBpY21wc3RhdC5pY3A2c190b29zaG9ydAorCSAgICArIGljbXBzdGF0LmljcDZzX2NoZWNrc3VtCisgICAgICAgICAgICArIGljbXBzdGF0LmljcDZzX2JhZGxlbjsKKyAgICBtaWItPmljbXA2SW5FcnJvcnMgPSBtaWItPmljbXA2SW5Nc2dzOworICAgIGZvciAoaSA9IDA7IGkgPD0gSUNNUDZfTUFYVFlQRTsgaSsrKQorICAgICAgICBtaWItPmljbXA2SW5Nc2dzICArPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbaV07CisgICAgbWliLT5pY21wNkluRGVzdFVucmVhY2hzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W0lDTVA2X0RTVF9VTlJFQUNIXTsKKyAgICBtaWItPmljbXA2SW5Qa3RUb29CaWdzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W0lDTVA2X1BBQ0tFVF9UT09fQklHXTsKKyAgICBtaWItPmljbXA2SW5UaW1lRXhjZHMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbSUNNUDZfVElNRV9FWENFRURFRF07CisgICAgbWliLT5pY21wNkluUGFybVByb2JsZW1zID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W0lDTVA2X1BBUkFNX1BST0JdOworICAgIG1pYi0+aWNtcDZJbkVjaG9zID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W0lDTVA2X0VDSE9fUkVRVUVTVF07CisgICAgbWliLT5pY21wNkluRWNob1JlcGxpZXMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbSUNNUDZfRUNIT19SRVBMWV07CisgICAgbWliLT5pY21wNkluR3JvdXBNZW1iUXVlcmllcyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtNTERfTElTVEVORVJfUVVFUlldOworICAgIG1pYi0+aWNtcDZJbkdyb3VwTWVtYlJlc3BvbnNlcyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtNTERfTElTVEVORVJfUkVQT1JUXTsKKyAgICBtaWItPmljbXA2SW5Sb3V0ZXJTb2xpY2l0cyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtORF9ST1VURVJfU09MSUNJVF07CisgICAgbWliLT5pY21wNkluUm91dGVyQWR2ZXJ0aXNlbWVudHMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbTkRfUk9VVEVSX0FEVkVSVF07CisgICAgbWliLT5pY21wNkluTmVpZ2hib3JTb2xpY2l0cyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtORF9ORUlHSEJPUl9TT0xJQ0lUXTsKKyAgICBtaWItPmljbXA2SW5OZWlnaGJvckFkdmVydGlzZW1lbnRzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W05EX05FSUdIQk9SX0FEVkVSVF07CisgICAgbWliLT5pY21wNkluUmVkaXJlY3RzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W05EX1JFRElSRUNUXTsKKworICAgIG1pYi0+aWNtcDZPdXRNc2dzID0gaWNtcHN0YXQuaWNwNnNfY2FudGVycm9yCisgICAgICAgICsgaWNtcHN0YXQuaWNwNnNfdG9vZnJlcTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IElDTVA2X01BWFRZUEU7IGkrKykKKyAgICAgICAgbWliLT5pY21wNk91dE1zZ3MgKz0gaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtpXTsKKyAgICBtaWItPmljbXA2T3V0RGVzdFVucmVhY2hzID0gaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtJQ01QNl9EU1RfVU5SRUFDSF07CisgICAgbWliLT5pY21wNk91dFBrdFRvb0JpZ3MgPSAgaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtJQ01QNl9QQUNLRVRfVE9PX0JJR107CisgICAgbWliLT5pY21wNk91dFRpbWVFeGNkcyA9IGljbXBzdGF0LmljcDZzX291dGhpc3RbSUNNUDZfVElNRV9FWENFRURFRF07CisgICAgbWliLT5pY21wNk91dFBhcm1Qcm9ibGVtcyA9IGljbXBzdGF0LmljcDZzX291dGhpc3RbSUNNUDZfUEFSQU1fUFJPQl07CisgICAgbWliLT5pY21wNk91dEVjaG9zID0gaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtJQ01QNl9FQ0hPX1JFUVVFU1RdOworICAgIG1pYi0+aWNtcDZPdXRFY2hvUmVwbGllcyA9IGljbXBzdGF0LmljcDZzX291dGhpc3RbSUNNUDZfRUNIT19SRVBMWV07CisgICAgbWliLT5pY21wNk91dFJvdXRlclNvbGljaXRzID0gIGljbXBzdGF0LmljcDZzX291dGhpc3RbTkRfUk9VVEVSX1NPTElDSVRdOworICAgIG1pYi0+aWNtcDZPdXROZWlnaGJvclNvbGljaXRzID0gIGljbXBzdGF0LmljcDZzX291dGhpc3RbTkRfTkVJR0hCT1JfU09MSUNJVF07CisgICAgbWliLT5pY21wNk91dE5laWdoYm9yQWR2ZXJ0aXNlbWVudHMgPSAgaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtORF9ORUlHSEJPUl9BRFZFUlRdOworICAgIG1pYi0+aWNtcDZPdXRSZWRpcmVjdHMgPSBpY21wc3RhdC5pY3A2c19vdXRoaXN0W05EX1JFRElSRUNUXTsKKyAgICBtaWItPmljbXA2T3V0R3JvdXBNZW1iUmVzcG9uc2VzID0gIGljbXBzdGF0LmljcDZzX291dGhpc3RbTUxEX0xJU1RFTkVSX1JFUE9SVF07CisgICAgbWliLT5pY21wNk91dEdyb3VwTWVtYlJlZHVjdGlvbnMgPSAgaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtNTERfTElTVEVORVJfRE9ORV07CisKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK3N5c2N0bF9yZWFkX2ljbXBfbXNnX3N0YXQoc3RydWN0IGljbXBfbWliICptaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNF9tc2dfbWliICptc2dtaWIsCisJCQkgIGludCAqZmxhZykKK3sKKyAgICBzeXNjdGxfcmVhZF9pY21wX3N0YXQobWliKTsKKyAgICAqZmxhZyA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKKworaW50CitzeXNjdGxfcmVhZF9pY21wNl9tc2dfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICptaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDZfbXNnX21pYiAqbXNnbWliLAorCQkJICAgaW50ICpzdXBwb3J0KQoreworICAgIHN0cnVjdCBpY21wNnN0YXQgaWNtcHN0YXQ7CisgICAgc2l6ZV90ICAgc2l6ZSA9IHNpemVvZihpY21wc3RhdCk7CisgICAgaW50ICAgICAgaTsKKyAgICBzdGF0aWMgaW50ICAgICAgc25hbWVbNF0gPQorICAgICAgICB7IENUTF9ORVQsIFBGX0lORVQ2LCBJUFBST1RPX0lDTVBWNiwgSUNNUFY2Q1RMX1NUQVRTIH07CisKKyAgICBzeXNjdGxfcmVhZF9pY21wNl9zdGF0KG1pYik7CisKKyAgICBpZiAoLTEgPT0gc3lzY3RsKHNuYW1lLCA0LCAmaWNtcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJzeXNjdGxfcmVhZF9pY21wNl9zdGF0OiBuZXQuaW5ldDYuaWNtcDYuc3RhdHMiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCW1zZ21pYi0+dmFsc1tpXS5JblR5cGUgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbaV07CisJbXNnbWliLT52YWxzW2ldLk91dFR5cGUgPSBpY21wc3RhdC5pY3A2c19vdXRoaXN0W2ldOworICAgIH0KKyAgICAqc3VwcG9ydCA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfc3lzY3RsLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfc3lzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4NDk3MwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9zeXNjdGwuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9NSUJHUk9VUF9LRVJORUxfU1lTQ1RMX0gKKyNkZWZpbmUgX01JQkdST1VQX0tFUk5FTF9TWVNDVExfSAorCisjaWYgZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKQorCisjaW5jbHVkZSAia2VybmVsX21pYi5oIgorCitpbnQgICAgICBzeXNjdGxfcmVhZF9pY21wX3N0YXQoc3RydWN0IGljbXBfbWliICopOworaW50ICAgICAgc3lzY3RsX3JlYWRfaWNtcDZfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICopOworaW50ICAgICAgc3lzY3RsX3JlYWRfaWNtcF9tc2dfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA0X21zZ19taWIgKiwKKwkJIAkJICBpbnQgKmZsYWcpOworaW50ICAgICAgc3lzY3RsX3JlYWRfaWNtcDZfbXNnX3N0YXQoc3RydWN0IGljbXA2X21pYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA2X21zZ19taWIgKiwKKwkJCQkgICAgaW50ICpzdXBwb3J0KTsKKworI2VuZGlmIC8qIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgKi8KKworI2VuZGlmIC8qIF9NSUJHUk9VUF9LRVJORUxfU1lTQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmgKaW5kZXggNDBhOGM5My4uODdlZjlkMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmgKQEAgLTExLDkgKzExLDYgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaWYgSEFWRV9TWVNfUEFSQU1fSAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgpAQCAtMjgsNyArMjUsNyBAQAogI2lmIEhBVkVfU1lTX1RDUElQU1RBVFNfSAogI2luY2x1ZGUgPHN5cy90Y3BpcHN0YXRzLmg+CiAjZW5kaWYKLSNpZiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQogI2RlZmluZSBfS0VSTkVMIDEKICNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKICNlbmRpZgpAQCAtOTEsNyArODgsNiBAQAogI2luY2x1ZGUgPGRtYWxsb2MuaD4KICNlbmRpZgogCi0KICNpZmRlZiBzb2xhcmlzMgogI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKICNlbHNlCkBAIC0xMDMsNiArOTksMTAgQEAKICNpZmRlZiBORVRCU0RfU1RBVFNfVklBX1NZU0NUTAogI2luY2x1ZGUgImtlcm5lbF9uZXRic2QuaCIKICNlbmRpZgorI2lmIGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkgLyogJiYgZGVmaW5lZChJQ01QQ1RMX1NUQVRTKSAqLworI2luY2x1ZGUgImtlcm5lbF9zeXNjdGwuaCIKKyNlbmRpZgorCiAJLyogb3IgTUlCX3h4eENPVU5URVJfU1lNQk9MIHx8IGhwdXgxMSAqLwogI2lmZGVmIGhwdXgKICNpbmNsdWRlIDxzeXMvbWliLmg+CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jCmluZGV4IDU5MjFkNjguLmMxZWRkMDcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jCkBAIC0xMDEsMTMgKzEwMSw4IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2lmIEhBVkVfU1REQVJHX0gKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dmFyYXJncy5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiAgLyoqLwogLyoqICJtYWNyb3MgYW5kIHZhcmlhYmxlcyBmb3IgcmVnaXN0ZXJpbmcgdGhlIE9JRCB0cmVlIiAqLwpAQCAtMTUyLDMxICsxNDcsMzcgQEAKICAqIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSBhZ2VudCwgd2hpY2ggZnVuY3Rpb24gcmV0dXJucyB3aGF0IHZhbHVlcyAKICAqLwogc3RhdGljIHN0cnVjdCB2YXJpYWJsZTMgbXRhX3ZhcmlhYmxlc1tdID0gewotICAgIHtNVEFSRUNFSVZFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDF9fSwKLSAgICB7TVRBU1RPUkVETUVTU0FHRVMsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDJ9fSwKLSAgICB7TVRBVFJBTlNNSVRURURNRVNTQUdFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhRW50cnksIDMsCi0gICAgIHsxLCAxLCAzfX0sCi0gICAge01UQVJFQ0VJVkVEVk9MVU1FLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDR9fSwKLSAgICB7TVRBU1RPUkVEVk9MVU1FLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCA1fX0sCi0gICAge01UQVRSQU5TTUlUVEVEVk9MVU1FLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDZ9fSwKKyAgICB7TVRBUkVDRUlWRURNRVNTQUdFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCAxfX0sCisgICAge01UQVNUT1JFRE1FU1NBR0VTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCAyfX0sCisgICAge01UQVRSQU5TTUlUVEVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgM319LAorICAgIHtNVEFSRUNFSVZFRFZPTFVNRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCA0fX0sCisgICAge01UQVNUT1JFRFZPTFVNRSwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgNX19LAorICAgIHtNVEFUUkFOU01JVFRFRFZPTFVNRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCA2fX0sCiAKLSAgICB7TVRBR1JPVVBSRUNFSVZFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLAotICAgICB7MiwgMSwgMn19LAotICAgIHtNVEFHUk9VUFJFSkVDVEVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsCi0gICAgIHsyLCAxLCAzfX0sCi0gICAge01UQUdST1VQU1RPUkVETUVTU0FHRVMsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLAotICAgICB7MiwgMSwgNH19LAotICAgIHtNVEFHUk9VUFRSQU5TTUlUVEVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsCi0gICAgIHsyLCAxLCA1fX0sCi0gICAge01UQUdST1VQUkVDRUlWRURWT0xVTUUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsCi0gICAgIHsyLCAxLCA2fX0sCi0gICAge01UQUdST1VQU1RPUkVEVk9MVU1FLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywKLSAgICAgezIsIDEsIDd9fSwKLSAgICB7TVRBR1JPVVBUUkFOU01JVFRFRFZPTFVNRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywKLSAgICAgezIsIDEsIDh9fSwKLSAgICB7TVRBR1JPVVBOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCAyNX19LAotICAgIHtNVEFHUk9VUEhJRVJBUkNIWSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywKLSAgICAgezIsIDEsIDMxfX0KKyAgICB7TVRBR1JPVVBSRUNFSVZFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgMn19LAorICAgIHtNVEFHUk9VUFJFSkVDVEVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCAzfX0sCisgICAge01UQUdST1VQU1RPUkVETUVTU0FHRVMsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgNH19LAorICAgIHtNVEFHUk9VUFRSQU5TTUlUVEVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCA1fX0sCisgICAge01UQUdST1VQUkVDRUlWRURWT0xVTUUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCA2fX0sCisgICAge01UQUdST1VQU1RPUkVEVk9MVU1FLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDd9fSwKKyAgICB7TVRBR1JPVVBUUkFOU01JVFRFRFZPTFVNRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDh9fSwKKyAgICB7TVRBR1JPVVBOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCAyNX19LAorICAgIHtNVEFHUk9VUEhJRVJBUkNIWSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDMxfX0KIH07CiAgLyoqLwogLyoqICJvdGhlciBtYWNyb3MgYW5kIHN0cnVjdHVyZXMiICovCkBAIC0zNDIsMzcgKzM0MywxNSBAQAogICogICAgLi4uOiAgICAgICAgIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBpbnNlcnQgaW50byB0aGUgZXJyb3IgbWVzc2FnZSBzdHJpbmcKICAqCiAgKi8KLSNpZiBIQVZFX1NUREFSR19ICi0gICAgc3RhdGljIHZvaWQKK3N0YXRpYyB2b2lkCiBwcmludF9lcnJvcihpbnQgcHJpb3JpdHksIEJPT0wgY29uZmlnLCBCT09MIGNvbmZpZ19vbmx5LAogICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotI2Vsc2UKLSAgICBzdGF0aWMgdm9pZAotcHJpbnRfZXJyb3IodmFfYWxpc3QpCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7CiAgICAgdmFfbGlzdCAgICAgICAgIGFwOwogICAgIGNoYXIgICAgICAgICAgICBidWZmZXJbMiAqIEZJTEVOQU1FTEVOICsgMjAwXTsgICAgICAvKiBJIGtub3csIHRoYXQncyBub3QgcGVyZmVjdGx5IHNhZmUsIGJ1dCBzaW5jZSBJIGRvbid0IHVzZSBtb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoYW4gdHdvIGZpbGVuYW1lcyBpbiBvbmUgZXJyb3IgbWVzc2FnZSwgdGhhdCBzaG91bGQgYmUgZW5vdWdoICovCiAKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0jZWxzZQotICAgIGludCAgICAgICAgICAgICBwcmlvcml0eTsKLSAgICBCT09MICAgICAgICAgICAgY29uZmlnOwotICAgIEJPT0wgICAgICAgICAgICBjb25maWdfb25seTsKLSAgICBjb25zdCBjaGFyICAgICAqZnVuY3Rpb247Ci0gICAgY29uc3QgY2hhciAgICAgKmZvcm1hdDsKLQotICAgIHZhX3N0YXJ0KGFwKTsKLSAgICBwcmlvcml0eSA9IHZhX2FyZyhhcCwgaW50KTsKLSAgICBjb25maWcgPSB2YV9hcmcoYXAsIEJPT0wpOwotICAgIGNvbmZpZ19vbmx5ID0gdmFfYXJnKGFwLCBCT09MKTsKLSAgICBmdW5jdGlvbiA9IHZhX2FyZyhhcCwgY2hhciAqKTsKLSAgICBmb3JtYXQgPSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0jZW5kaWYKLQogICAgIHZzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCBmb3JtYXQsIGFwKTsKIAogICAgIGlmIChjb25maWcpIHsKQEAgLTEwNTQsOSArMTAzMyw3IEBACiAgICAgICAgIG9wZW5fc2VuZG1haWxzdChUUlVFKTsKIAogICAgICAgICBpZiAoc2VuZG1haWxzdF9maCA9PSAtMSkgewotICAgICAgICAgICAgY2hhciAgICAgICAgICAgIHN0cltGSUxFTkFNRUxFTiArIDUwXTsKLSAgICAgICAgICAgIHNwcmludGYoc3RyLCAiY291bGRuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIsIHNlbmRtYWlsc3RfZm4pOwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcihzdHIpOworCSAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiY291bGRuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIsIHNlbmRtYWlsc3RfZm4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaAppbmRleCAzNDgzMGYyLi5lYWNlMmUyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oCkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSAiaXAuaCIKICNpbmNsdWRlICJrZXJuZWwuaCIKICNpbmNsdWRlICJpbnRlcmZhY2VzLmgiCi0jaW5jbHVkZSAic3RydWN0LmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogCiAjZWxzZSAvKiAhTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAqLwogCkBAIC00MiwxMSArNDAsNyBAQAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC05NCwyOCArODgsMjggQEAKICNlbmRpZgogI3VuZGVmCUtFUk5FTAogI2lmZGVmIFJURU5UUllfNF80Ci0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VTklUCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVU5JVAogI2RlZmluZSBydF91bml0IHJ0X3JlZmNudCAgICAgICAvKiBSZXVzZSB0aGlzIGZpZWxkIGZvciBkZXZpY2UgIyAqLwogI2VuZGlmCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKICNkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKICNlbmRpZgogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSVEVOVFJZXzRfMyAqLwotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUCiAjZGVmaW5lIHJ0X2RzdCBydF9ub2Rlcy0+cm5fa2V5CiAjZW5kaWYKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0hBU0gKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9IQVNICiAjZGVmaW5lIHJ0X2hhc2ggcnRfcGFkMQogI2VuZGlmCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9SRUZDTlQKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9SRUZDTlQKICNpZm5kZWYgaHB1eDEwCiAjZGVmaW5lIHJ0X3JlZmNudCBydF9wYWQyCiAjZW5kaWYKICNlbmRpZgotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVVNFCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVVNFCiAjZGVmaW5lIHJ0X3VzZSBydF9wYWQzCiAjZW5kaWYKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VOSVQKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VTklUCiAjZGVmaW5lIHJ0X3VuaXQgcnRfcmVmY250ICAgICAgIC8qIFJldXNlIHRoaXMgZmllbGQgZm9yIGRldmljZSAjICovCiAjZW5kaWYKICNlbmRpZgpAQCAtMTUxLDE2ICsxNDUsMjMgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaWYgSEFWRV9OTElTVF9ICiAjaW5jbHVkZSA8bmxpc3QuaD4KICNlbmRpZgogCiAjaWZkZWYgc29sYXJpczIKICNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisvKiBTb2xhcmlzIDIuNi83IG5lZWQgc3lzL3N0cmVhbS5oIChtYmxrX3QpIHRvIGluY2x1ZGUgaW5ldC9pcC5oICovCisjaWZkZWYgSEFWRV9TWVNfU1RSRUFNX0gKKyNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+CisjZW5kaWYKKy8qIFNvbGFyaXMgMi42IG5lZWRzIGluZXQvY29tbW9uLmggKHUxNikgdG8gaW5jbHVkZSBpbmV0L2lwLmggKi8KKyNpZmRlZiBIQVZFX0lORVRfQ09NTU9OX0gKKyNpbmNsdWRlIDxpbmV0L2NvbW1vbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTkVUX0lQX0gKKyNpbmNsdWRlIDxpbmV0L2lwLmg+CisjZW5kaWYgLyogSEFWRV9JTkVUX0lQX0ggKi8KICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TWVNfU1lTQ1RMX0gKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jCmluZGV4IGY2YTRmM2UuLjU4MjBlZTEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYwpAQCAtNjAsMTAgKzYwLDYgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNzYsMTAgKzcyLDEwIEBACiAKICNpZiAhZGVmaW5lZCAoV0lOMzIpICYmICFkZWZpbmVkIChjeWd3aW4pCiAKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVAogI2RlZmluZSBydF9kc3QgcnRfbm9kZXMtPnJuX2tleQogI2VuZGlmCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9IQVNICisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfSEFTSAogI2RlZmluZSBydF9oYXNoIHJ0X3BhZDEKICNlbmRpZgogCkBAIC0yNjksNyArMjY1LDcgQEAKIH0KIAogCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKICN1bmRlZiBydF9kc3QKICNlbmRpZgogCkBAIC0zMTMsNyArMzA5LDcgQEAKICAgICAgICAgICAgIHJldHVybiAoJnJ0Y2FjaGVbaV0pOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdHJ1Y3QgcnRlbnQgICAqCkBAIC0zMjksNyArMzI1LDcgQEAKICAgICAgICAgICAgIHJldHVybiAoJnJ0Y2FjaGVbaV0pOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBOVUxMOwogCiB9CiAKQEAgLTM1MSw3ICszNDcsNyBAQAogc3RydWN0IHJ0ZW50ICAgKgogY2FjaGVLZXJuZWxSVEUodV9sb25nIGRzdCkKIHsKLSAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogZm9yIG5vdyAqLworICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBmb3Igbm93ICovCiAgICAgLyoKICAgICAgKiAuLi4uLi4gCiAgICAgICovCkBAIC01OTcsNyArNTkzLDcgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU4zMiBjeWd3aW4gKi8KKyNlbGlmIGRlZmluZWQoSEFWRV9JUEhMUEFQSV9IKSAgLyogV0lOMzIgY3lnd2luICovCiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KIAogZXh0ZXJuIFBNSUJfSVBGT1JXQVJEUk9XIHJvdXRlX3JvdzsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jCmluZGV4IDkwYTBhYmEuLjg1YTQwOTggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYwpAQCAtMiw5ICsyLDEzIEBACiAgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHNubXBTZXRTZXJpYWxObyBUZXN0QW5kSW5jciBjb3VudGVyCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUod2F0Y2hlcl9zcGlubG9jaykKKworCiAjaW5jbHVkZSAic2V0U2VyaWFsTm8uaCIKIAogLyoKQEAgLTYwLDEzICs2NCwyMSBAQAogICAgIC8qCiAgICAgICogUmVnaXN0ZXIgJ3NldHNlcmlhbG5vJyBhcyBhIHdhdGNoZWQgc3BpbmxvY2sgb2JqZWN0CiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zcGlubG9jaygKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNubXBTZXRTZXJpYWxObyIsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9zZXJpYWxfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNldF9zZXJpYWxfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXRzZXJpYWxubyApOwotCisjZWxzZSAgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zcGlubG9jaygKKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNubXBTZXRTZXJpYWxObyIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9zZXJpYWxfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNldF9zZXJpYWxfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNldHNlcmlhbG5vICk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIERFQlVHTVNHVEwoKCJzY2FsYXJfaW50IiwgIkRvbmUgaW5pdGFsaXppbmcgZXhhbXBsZSBzY2FsYXIgaW50XG4iKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jCmluZGV4IGIxNDNiZjcuLjFlYmU2NGMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYwpAQCAtMSw5NyArMSwyMCBAQAotLyoKLSAqICBTTk1QdjEgTUlCIGdyb3VwIGltcGxlbWVudGF0aW9uIC0gc25tcC5jCi0gKgotICovCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgInNubXBfbWliLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgorI2luY2x1ZGUgInVwZGF0ZXMuaCIKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3RydXRodmFsdWUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKLSAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgotCSAqCi0JICogIEtlcm5lbCAmIGludGVyZmFjZSBpbmZvcm1hdGlvbiwKLQkgKiAgIGFuZCBpbnRlcm5hbCBmb3J3YXJkIGRlY2xhcmF0aW9ucwotCSAqCi0JICoqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCBvaWQgc25tcF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMTEgfTsKIAotZXh0ZXJuIGxvbmcgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHM7Ci1leHRlcm4gaW50ICAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwc3NldDsKLWludCAgICAgICAgICAgICBvbGRfc25tcF9lbmFibGVhdXRoZW50cmFwczsKLQotLyoqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICBJbml0aWFsaXNhdGlvbiAmIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogZGVmaW5lIHRoZSBzdHJ1Y3R1cmUgd2UncmUgZ29pbmcgdG8gYXNrIHRoZSBhZ2VudCB0byByZWdpc3RlciBvdXIKLSAqIGluZm9ybWF0aW9uIGF0IAotICovCi1zdHJ1Y3QgdmFyaWFibGUxIHNubXBfdmFyaWFibGVzW10gPSB7Ci0gICAge1NOTVBJTlBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxfX0sCi0gICAge1NOTVBPVVRQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7Mn19LAotICAgIHtTTk1QSU5CQURWRVJTSU9OUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezN9fSwKLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLSAgICB7U05NUElOQkFEQ09NTVVOSVRZTkFNRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHs0fX0sCi0gICAge1NOTVBJTkJBRENPTU1VTklUWVVTRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHs1fX0sCi0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLSAgICB7U05NUElOQVNOUEFSU0VFUlJPUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHs2fX0sCi0gICAge1NOTVBJTlRPT0JJR1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHs4fX0sCi0gICAge1NOTVBJTk5PU1VDSE5BTUVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7OX19LAotICAgIHtTTk1QSU5CQURWQUxVRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxMH19LAotICAgIHtTTk1QSU5SRUFET05MWVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxMX19LAotICAgIHtTTk1QSU5HRU5FUlJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTJ9fSwKLSAgICB7U05NUElOVE9UQUxSRVFWQVJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTN9fSwKLSAgICB7U05NUElOVE9UQUxTRVRWQVJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTR9fSwKLSAgICB7U05NUElOR0VUUkVRVUVTVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxNX19LAotICAgIHtTTk1QSU5HRVRORVhUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezE2fX0sCi0gICAge1NOTVBJTlNFVFJFUVVFU1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTd9fSwKLSAgICB7U05NUElOR0VUUkVTUE9OU0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTh9fSwKLSAgICB7U05NUElOVFJBUFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxOX19LAotICAgIHtTTk1QT1VUVE9PQklHUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezIwfX0sCi0gICAge1NOTVBPVVROT1NVQ0hOQU1FUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezIxfX0sCi0gICAge1NOTVBPVVRCQURWQUxVRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyMn19LAotICAgIHtTTk1QT1VUR0VORVJSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezI0fX0sCi0gICAge1NOTVBPVVRHRVRSRVFVRVNUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezI1fX0sCi0gICAge1NOTVBPVVRHRVRORVhUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezI2fX0sCi0gICAge1NOTVBPVVRTRVRSRVFVRVNUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezI3fX0sCi0gICAge1NOTVBPVVRHRVRSRVNQT05TRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyOH19LAotICAgIHtTTk1QT1VUVFJBUFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyOX19LAotICAgIHtTTk1QRU5BQkxFQVVUSEVOVFJBUFMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9zbm1wLCAxLCB7MzB9fSwKLSAgICB7U05NUFNJTEVOVERST1BTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MzF9fSwKLSAgICB7U05NUFBST1hZRFJPUFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHszMn19Ci19OwotCi0vKgotICogRGVmaW5lIHRoZSBPSUQgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBtaWIgdHJlZSB0aGF0IHdlJ3JlCi0gKiByZWdpc3RlcmluZyB1bmRlcm5lYXRoIAotICovCi1vaWQgICAgICAgICAgICAgc25tcF92YXJpYWJsZXNfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDExIH07Ci0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLWV4dGVybiBvaWQgICAgICBzeXN0ZW1fbW9kdWxlX29pZFtdOwotZXh0ZXJuIGludCAgICAgIHN5c3RlbV9tb2R1bGVfb2lkX2xlbjsKLWV4dGVybiBpbnQgICAgICBzeXN0ZW1fbW9kdWxlX2NvdW50OwotI2VuZGlmCitleHRlcm4gbG9uZyBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzOworZXh0ZXJuIGludCBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0OwogCiBzdGF0aWMgaW50CiBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzX3N0b3JlKGludCBhLCBpbnQgYiwgdm9pZCAqYywgdm9pZCAqZCkKQEAgLTEwNiwxNCArMjksMTAzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2hhbmRsZV90cnV0aHZhbHVlKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxKSB7CisgICAgICAgIGludCByZXMgPSBuZXRzbm1wX2NoZWNrX3ZiX3RydXRodmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2Yik7CisgICAgICAgIGlmIChyZXMgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIHJlcyk7CisgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgbmV0c25tcF9taWJfaGFuZGxlcioKK25ldHNubXBfZ2V0X3RydXRodmFsdWUodm9pZCkKK3sKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyKiBobmQgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJ0cnV0aHZhbHVlIiwgaGFuZGxlX3RydXRodmFsdWUpOworICAgIGlmIChobmQpCisgICAgICAgIGhuZC0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUOworICAgIHJldHVybiBobmQ7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9zbm1wKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisJICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisJICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorCSAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgY2FzZSBNT0RFX0dFVDoKKwl7CisJICAgIG9pZCBpZHggPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lW09JRF9MRU5HVEgoc25tcF9vaWQpXTsKKwkgICAgc3dpdGNoKGlkeCkgeworCSAgICBjYXNlIDc6CisJICAgIGNhc2UgMjM6CisgICAgICAgICAgICBjYXNlIDMwOgorCQluZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorCQkJCQkgIFNOTVBfTk9TVUNIT0JKRUNUKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCXsKKwkJICAgIHVfaW50IHZhbHVlID0KKwkJCXNubXBfZ2V0X3N0YXRpc3RpYyhpZHggLSAxICsgU1RBVF9TTk1QSU5QS1RTKTsKKwkJICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKwkJCQkJICAgICAodV9jaGFyICopJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKwlicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmtub3duIG1vZGUgKCVkKSBpbiBoYW5kbGVfc25tcFxuIiwgcmVxaW5mby0+bW9kZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKyNpZmRlZiBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorZXh0ZXJuIG9pZCAgICAgIHN5c3RlbV9tb2R1bGVfb2lkW107CitleHRlcm4gaW50ICAgICAgc3lzdGVtX21vZHVsZV9vaWRfbGVuOworZXh0ZXJuIGludCAgICAgIHN5c3RlbV9tb2R1bGVfY291bnQ7CisjZW5kaWYKKworLyoqIEluaXRpYWxpemVzIHRoZSBzbm1wIG1vZHVsZSAqLwogdm9pZAogaW5pdF9zbm1wX21pYih2b2lkKQogewotICAgIC8qCi0gICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IHRvIGhhbmRsZSBvdXIgbWliIHRyZWUgCi0gICAgICovCi0gICAgUkVHSVNURVJfTUlCKCJtaWJJSS9zbm1wIiwgc25tcF92YXJpYWJsZXMsIHZhcmlhYmxlMSwKLSAgICAgICAgICAgICAgICAgc25tcF92YXJpYWJsZXNfb2lkKTsKKyAgICBERUJVR01TR1RMKCgic25tcCIsICJJbml0aWFsaXppbmdcbiIpKTsKKworICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKAorICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisJIm1pYklJL3NubXAiLCBoYW5kbGVfc25tcCwgc25tcF9vaWQsIE9JRF9MRU5HVEgoc25tcF9vaWQpLAorCUhBTkRMRVJfQ0FOX1JPTkxZKSwgMSwgMzIpOworICAgIHsKKyAgICAgICAgY29uc3Qgb2lkIHNubXBFbmFibGVBdXRoZW5UcmFwc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMTEsIDMwLCAwIH07CisJc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvIGVuYWJsZWF1dGhlbl9pbmZvOworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPQorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zbm1wRW5hYmxlQXV0aGVuVHJhcHMiLAorICAgICAgICAgICAgICAgIHNubXBFbmFibGVBdXRoZW5UcmFwc19vaWQsCisgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzbm1wRW5hYmxlQXV0aGVuVHJhcHNfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsICZzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0KTsKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIG5ldHNubXBfZ2V0X3RydXRodmFsdWUoKSk7CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZSgKKyAgICAgICAgICAgIHJlZywKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisJCSZlbmFibGVhdXRoZW5faW5mbywKKyAgICAgICAgICAgICAgICAmc25tcF9lbmFibGVhdXRoZW50cmFwcywgc2l6ZW9mKHNubXBfZW5hYmxlYXV0aGVudHJhcHMpLAorICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKKyAgICB9CiAKICNpZmRlZiBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQogICAgIGlmICgrK3N5c3RlbV9tb2R1bGVfY291bnQgPT0gMykKQEAgLTEyMywxMzEgKzEzNSwzIEBACiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHNfc3RvcmUsIE5VTEwpOwogfQotCi0vKgotICogaGVhZGVyX3NubXAoLi4uCi0gKiBBcmd1bWVudHM6Ci0gKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQotICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCi0gKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAotICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCi0gKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAotICogd3JpdGVfbWV0aG9kCi0gKiAKLSAqLwotCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKLQkgKgotCSAqICBTeXN0ZW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCi0JICoJKGFjdHVhbGx5IGNvbW1vbiEpCi0JICoKLQkgKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXVfY2hhciAgICAgICAgICoKLXZhcl9zbm1wKHN0cnVjdCB2YXJpYWJsZSAqdnAsCi0gICAgICAgICBvaWQgKiBuYW1lLAotICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCi17Ci0gICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OwotCi0gICAgKndyaXRlX21ldGhvZCA9IDA7ICAgICAgICAgIC8qIGFzc3VtZSBpdCBpc250IHdyaXRhYmxlIGZvciB0aGUgdGltZSBiZWluZyAqLwotICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsgICAgICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIgaWYgbm90ICovCi0KLSAgICBpZiAoaGVhZGVyX2dlbmVyaWModnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCkKLSAgICAgICAgPT0gTUFUQ0hfRkFJTEVEKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qCi0gICAgICogdGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgdmFsdWUgYXNzaWdubWVudHMgZm9yIHRoZSBtaWIgcmVzdWx0cy4gCi0gICAgICovCi0gICAgaWYgKHZwLT5tYWdpYyA9PSBTTk1QRU5BQkxFQVVUSEVOVFJBUFMpIHsKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXA7Ci0gICAgICAgIGxvbmdfcmV0dXJuID0gc25tcF9lbmFibGVhdXRoZW50cmFwczsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICB9IGVsc2UgaWYgKCh2cC0+bWFnaWMgPj0gMSkKLSAgICAgICAgICAgICAgICYmICh2cC0+bWFnaWMgPD0KLSAgICAgICAgICAgICAgICAgICAoU1RBVF9TTk1QX1NUQVRTX0VORCAtIFNUQVRfU05NUF9TVEFUU19TVEFSVCArIDEpKSkgewotICAgICAgICBsb25nX3JldCA9Ci0gICAgICAgICAgICBzbm1wX2dldF9zdGF0aXN0aWModnAtPm1hZ2ljICsgU1RBVF9TTk1QX1NUQVRTX1NUQVJUIC0gMSk7Ci0gICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQ7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0vKgotICogb25seSBmb3Igc25tcEVuYWJsZUF1dGhlblRyYXBzOgotICovCi0KLWludAotd3JpdGVfc25tcChpbnQgYWN0aW9uLAotICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLAotICAgICAgICAgICB1X2NoYXIgdmFyX3ZhbF90eXBlLAotICAgICAgICAgICBzaXplX3QgdmFyX3ZhbF9sZW4sIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCi17Ci0gICAgbG9uZyAgICAgICAgICAgIGludHZhbCA9IDA7Ci0KLSAgICBzd2l0Y2ggKGFjdGlvbikgewotICAgIGNhc2UgUkVTRVJWRTE6ICAgICAgICAgICAgIC8qIENoZWNrIHZhbHVlcyBmb3IgYWNjZXB0YWJpbGl0eSAqLwotICAgICAgICBpZiAodmFyX3ZhbF90eXBlICE9IEFTTl9JTlRFR0VSKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibWliSUkvc25tcF9taWIiLCAiJXggbm90IGludGVnZXIgdHlwZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJfdmFsX3R5cGUpKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnR2YWwgPSAqKChsb25nICopIHZhcl92YWwpOwotICAgICAgICBpZiAoaW50dmFsICE9IDEgJiYgaW50dmFsICE9IDIpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zbm1wX21pYiIsICJub3QgdmFsaWQgJXhcbiIsIGludHZhbCkpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQgPCAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhlIG9iamVjdCBpcyBzZXQgaW4gYSByZWFkLW9ubHkgY29uZmlndXJhdGlvbiBmaWxlLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUkVTRVJWRTI6ICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBhbmQgc2ltaWxhciByZXNvdXJjZXMgKi8KLQotICAgICAgICAvKgotICAgICAgICAgKiBVc2luZyBzdGF0aWMgdmFyaWFibGVzLCBzbyBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgCi0gICAgICAgICAqLwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUNUSU9OOiAgICAgICAgICAgICAgIC8qIFBlcmZvcm0gdGhlIFNFVCBhY3Rpb24gKGlmIHJldmVyc2libGUpICovCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2F2ZSB0aGUgb2xkIHZhbHVlLCBpbiBjYXNlIG9mIFVORE8gCi0gICAgICAgICAqLwotICAgICAgICBpbnR2YWwgPSAqKChsb25nICopIHZhcl92YWwpOwotICAgICAgICBvbGRfc25tcF9lbmFibGVhdXRoZW50cmFwcyA9IHNubXBfZW5hYmxlYXV0aGVudHJhcHM7Ci0gICAgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgPSBpbnR2YWw7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBVTkRPOiAgICAgICAgICAgICAgICAgLyogUmV2ZXJzZSB0aGUgU0VUIGFjdGlvbiBhbmQgZnJlZSByZXNvdXJjZXMgKi8KLQotICAgICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzID0gb2xkX3NubXBfZW5hYmxlYXV0aGVudHJhcHM7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDT01NSVQ6Ci0gICAgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQgPSAxOwotICAgICAgICBzbm1wX3NhdmVfcGVyc2lzdGVudChuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKSk7Ci0gICAgICAgICh2b2lkKSBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLCBOVUxMKTsKLSAgICAgICAgc25tcF9jbGVhbl9wZXJzaXN0ZW50KG5ldHNubXBfZHNfZ2V0X3N0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRlJFRTogICAgICAgICAgICAgICAgIC8qIEZyZWUgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaAppbmRleCA2NDFmMTFlLi4zOWUwYTNjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmgKQEAgLTEsODMgKzEsOSBAQAotLyoKLSAqICBTTk1QIE1JQiBncm91cCBpbnRlcmZhY2UgLSBzbm1wLmgKLSAqCi0gKi8KICNpZm5kZWYgX01JQkdST1VQX1NOTVBfSAogI2RlZmluZSBfTUlCR1JPVVBfU05NUF9ICiAKLXN0cnVjdCB2YXJpYWJsZTsKLQotZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX3NubXA7Ci1leHRlcm4gV3JpdGVNZXRob2Qgd3JpdGVfc25tcDsKK2NvbmZpZ19yZXF1aXJlKG1pYklJL3VwZGF0ZXMpCitjb25maWdfZXhjbHVkZShtaWJJSS9zbm1wX21pYl81XzUpCiAKIHZvaWQgICAgICAgICAgICBpbml0X3NubXBfbWliKHZvaWQpOwogCi1leHRlcm4gaW50ICAgICAgc25tcF9pbnBrdHM7ICAgIC8qICAxIC0gY3VycmVudCAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0cGt0czsgICAvKiAgMiAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmJhZHZlcnNpb25zOyAgICAgLyogIDMgLSBjdXJyZW50ICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmJhZGNvbW11bml0eW5hbWVzOyAgICAgICAvKiAgNCAtIGN1cnJlbnQgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luYmFkY29tbXVuaXR5dXNlczsgICAgICAgIC8qICA1IC0gY3VycmVudCAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5hc25wYXJzZWVycm9yczsgIC8qICA2IC0gY3VycmVudCAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW50b29iaWdzOyAvKiAgOCAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbm5vc3VjaG5hbWVzOyAgICAgLyogIDkgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5iYWR2YWx1ZXM7ICAgICAgIC8qIDEwIC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2lucmVhZG9ubHlzOyAgICAgICAvKiAxMSAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmdlbmVycnM7IC8qIDEyIC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2ludG90YWxyZXF2YXJzOyAgICAvKiAxMyAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbnRvdGFsc2V0dmFyczsgICAgLyogMTQgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5nZXRyZXF1ZXN0czsgICAgIC8qIDE1IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luZ2V0bmV4dHM7ICAgICAgICAvKiAxNiAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbnNldHJlcXVlc3RzOyAgICAgLyogMTcgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5nZXRyZXNwb25zZXM7ICAgIC8qIDE4IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2ludHJhcHM7ICAgLyogMTkgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0dG9vYmlnczsgICAgICAgIC8qIDIwIC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dG5vc3VjaG5hbWVzOyAgICAvKiAyMSAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXRiYWR2YWx1ZXM7ICAgICAgLyogMjIgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0Z2VuZXJyczsgICAgICAgIC8qIDI0IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dGdldHJlcXVlc3RzOyAgICAvKiAyNSAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXRnZXRuZXh0czsgICAgICAgLyogMjYgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0c2V0cmVxdWVzdHM7ICAgIC8qIDI3IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dGdldHJlc3BvbnNlczsgICAvKiAyOCAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXR0cmFwczsgIC8qIDI5IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBsb25nICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzOyAvKiAzMCAtIGN1cnJlbnQgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX3NpbGVudGRyb3BzOyAgICAgICAvKiAzMSAtIGN1cnJlbnQgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX3Byb3h5ZHJvcHM7ICAgICAgICAvKiAzMiAtIGN1cnJlbnQgKi8KLQotZXh0ZXJuIGNoYXIgICAgKnNubXBfdHJhcHNpbms7Ci1leHRlcm4gY2hhciAgICAqc25tcF90cmFwY29tbXVuaXR5OwotCi0KLSNkZWZpbmUgU05NUElOUEtUUwkJMQotI2RlZmluZSBTTk1QT1VUUEtUUwkJMgotI2RlZmluZSBTTk1QSU5CQURWRVJTSU9OUwkzCi0jZGVmaW5lIFNOTVBJTkJBRENPTU1VTklUWU5BTUVTCTQKLSNkZWZpbmUgU05NUElOQkFEQ09NTVVOSVRZVVNFUwk1Ci0jZGVmaW5lIFNOTVBJTkFTTlBBUlNFRVJST1JTCTYKLSNkZWZpbmUgU05NUElOQkFEVFlQRVMJCTcKLSNkZWZpbmUgU05NUElOVE9PQklHUwkJOAotI2RlZmluZSBTTk1QSU5OT1NVQ0hOQU1FUwk5Ci0jZGVmaW5lIFNOTVBJTkJBRFZBTFVFUwkJMTAKLSNkZWZpbmUgU05NUElOUkVBRE9OTFlTCQkxMQotI2RlZmluZSBTTk1QSU5HRU5FUlJTCQkxMgotI2RlZmluZSBTTk1QSU5UT1RBTFJFUVZBUlMJMTMKLSNkZWZpbmUgU05NUElOVE9UQUxTRVRWQVJTCTE0Ci0jZGVmaW5lIFNOTVBJTkdFVFJFUVVFU1RTCTE1Ci0jZGVmaW5lIFNOTVBJTkdFVE5FWFRTCQkxNgotI2RlZmluZSBTTk1QSU5TRVRSRVFVRVNUUwkxNwotI2RlZmluZSBTTk1QSU5HRVRSRVNQT05TRVMJMTgKLSNkZWZpbmUgU05NUElOVFJBUFMJCTE5Ci0jZGVmaW5lIFNOTVBPVVRUT09CSUdTCQkyMAotI2RlZmluZSBTTk1QT1VUTk9TVUNITkFNRVMJMjEKLSNkZWZpbmUgU05NUE9VVEJBRFZBTFVFUwkyMgotI2RlZmluZSBTTk1QT1VUUkVBRE9OTFlTCTIzCi0jZGVmaW5lIFNOTVBPVVRHRU5FUlJTCQkyNAotI2RlZmluZSBTTk1QT1VUR0VUUkVRVUVTVFMJMjUKLSNkZWZpbmUgU05NUE9VVEdFVE5FWFRTCQkyNgotI2RlZmluZSBTTk1QT1VUU0VUUkVRVUVTVFMJMjcKLSNkZWZpbmUgU05NUE9VVEdFVFJFU1BPTlNFUwkyOAotI2RlZmluZSBTTk1QT1VUVFJBUFMJCTI5Ci0jZGVmaW5lIFNOTVBFTkFCTEVBVVRIRU5UUkFQUwkzMAotI2RlZmluZSBTTk1QU0lMRU5URFJPUFMJCTMxCi0jZGVmaW5lIFNOTVBQUk9YWURST1BTCQkzMgotCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9TTk1QX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzZWZiNgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jCkBAIC0wLDAgKzEsMTMyIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmg+CisKKyNpbmNsdWRlICJzbm1wX21pYl81XzUuaCIKKyNpbmNsdWRlICJ1cGRhdGVzLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlbHBlcl9zdGF0aXN0aWNzKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3RydXRodmFsdWUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyNkZWZpbmUgU05NUF9PSUQgMSwgMywgNiwgMSwgMiwgMSwgMTEKKworc3RhdGljIG9pZCBzbm1wX29pZFtdID0geyBTTk1QX09JRCB9OworCitleHRlcm4gbG9uZyBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzOworZXh0ZXJuIGludCBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0OworCitzdGF0aWMgaW50Citzbm1wX2VuYWJsZWF1dGhlbnRyYXBzX3N0b3JlKGludCBhLCBpbnQgYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgICBjaGFyICAgICAgICAgICAgbGluZVtTTk1QX01BWEJVRl9TTUFMTF07CisKKyAgICBpZiAoc25tcF9lbmFibGVhdXRoZW50cmFwc3NldCA+IDApIHsKKyAgICAgICAgc25wcmludGYobGluZSwgU05NUF9NQVhCVUZfU01BTEwsICJwYXV0aHRyYXBlbmFibGUgJWxkIiwKKyAgICAgICAgICAgICAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwcyk7CisgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZV90cnV0aHZhbHVlKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxKSB7CisgICAgICAgIGludCByZXMgPSBuZXRzbm1wX2NoZWNrX3ZiX3RydXRodmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2Yik7CisgICAgICAgIGlmIChyZXMgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIHJlcyk7CisgICAgfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIG5ldHNubXBfbWliX2hhbmRsZXIqCituZXRzbm1wX2dldF90cnV0aHZhbHVlKHZvaWQpCit7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciogaG5kID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcigidHJ1dGh2YWx1ZSIsIGhhbmRsZV90cnV0aHZhbHVlKTsKKyAgICBpZiAoaG5kKQorICAgICAgICBobmQtPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVDsKKyAgICByZXR1cm4gaG5kOworfQorCitzdGF0aWMgaW50CitoYW5kbGVfc25tcChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorCSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorCSAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKwkgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIHN3aXRjaChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lW09JRF9MRU5HVEgoc25tcF9vaWQpXSkgeworICAgIGNhc2UgNzoKKyAgICBjYXNlIDIzOgorICAgIGNhc2UgMzA6CisgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfTk9TVUNIT0JKRUNUKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKyNpZmRlZiBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorZXh0ZXJuIG9pZCAgICAgIHN5c3RlbV9tb2R1bGVfb2lkW107CitleHRlcm4gaW50ICAgICAgc3lzdGVtX21vZHVsZV9vaWRfbGVuOworZXh0ZXJuIGludCAgICAgIHN5c3RlbV9tb2R1bGVfY291bnQ7CisjZW5kaWYKKworLyoqIEluaXRpYWxpemVzIHRoZSBzbm1wIG1vZHVsZSAqLwordm9pZAoraW5pdF9zbm1wX21pYl81XzUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic25tcCIsICJJbml0aWFsaXppbmdcbiIpKTsKKworICAgIE5FVFNOTVBfUkVHSVNURVJfU1RBVElTVElDX0hBTkRMRVIoCisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgIm1pYklJL3NubXAiLCBoYW5kbGVfc25tcCwgc25tcF9vaWQsIE9JRF9MRU5HVEgoc25tcF9vaWQpLAorICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAorICAgICAgICAxLCBTTk1QKTsKKyAgICB7CisgICAgICAgIG9pZCBzbm1wRW5hYmxlQXV0aGVuVHJhcHNfb2lkW10gPSB7IFNOTVBfT0lELCAzMCwgMCB9OworCXN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyBlbmFibGVhdXRoZW5faW5mbzsKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3NubXBFbmFibGVBdXRoZW5UcmFwcyIsCisgICAgICAgICAgICAgICAgc25tcEVuYWJsZUF1dGhlblRyYXBzX29pZCwKKyAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNubXBFbmFibGVBdXRoZW5UcmFwc19vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSwgJnNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQpOworI2Vsc2UgIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc25tcEVuYWJsZUF1dGhlblRyYXBzIiwKKyAgICAgICAgICAgICAgICBzbm1wRW5hYmxlQXV0aGVuVHJhcHNfb2lkLAorICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc25tcEVuYWJsZUF1dGhlblRyYXBzX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksICZzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0KTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIG5ldHNubXBfZ2V0X3RydXRodmFsdWUoKSk7CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZSgKKyAgICAgICAgICAgIHJlZywKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisJCSZlbmFibGVhdXRoZW5faW5mbywKKyAgICAgICAgICAgICAgICAmc25tcF9lbmFibGVhdXRoZW50cmFwcywgc2l6ZW9mKHNubXBfZW5hYmxlYXV0aGVudHJhcHMpLAorICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKKyAgICB9CisKKyNpZmRlZiBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorICAgIGlmICgrK3N5c3RlbV9tb2R1bGVfY291bnQgPT0gMykKKyAgICAgICAgUkVHSVNURVJfU1lTT1JfVEFCTEUoc3lzdGVtX21vZHVsZV9vaWQsIHN5c3RlbV9tb2R1bGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBNSUIgbW9kdWxlIGZvciBTTk1QdjIgZW50aXRpZXMiKTsKKyNlbmRpZgorICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzX3N0b3JlLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1NjEwMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5oCkBAIC0wLDAgKzEsNCBAQAorY29uZmlnX3JlcXVpcmUobWliSUkvdXBkYXRlcykKK2NvbmZpZ19leGNsdWRlKG1pYklJL3NubXBfbWliKQorCit2b2lkICAgICAgICAgICAgaW5pdF9zbm1wX21pYl81XzUodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMKaW5kZXggZjhmZmE1MC4uZWQyNjkxOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYwpAQCAtMSwzNDQgKzEsMjk1IEBACi0vKgotICogIFRlbXBsYXRlIE1JQiBncm91cCBpbXBsZW1lbnRhdGlvbiAtIHN5c09SVGFibGUuYwotICoKLSAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCi0jIGluY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1lTX1RJTUVfSAotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8dGltZS5oPgotIyBlbmRpZgotI2VuZGlmCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJzdHJ1Y3QuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAic3lzT1JUYWJsZS5oIgotI2luY2x1ZGUgInNubXBkLmgiCiAKLSNpZmRlZiBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi0jaW5jbHVkZSAiYWdlbnR4L3N1YmFnZW50LmgiCi0jaW5jbHVkZSAiYWdlbnR4L2NsaWVudC5oIgotI2VuZGlmCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfY29udGFpbmVyKQogCiAKLXN0YXRpYyBpbnQKLV9yZWdpc3Rlcl9zeXNPUl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpOwotc3RhdGljIGludAotX3VucmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKTsKLXN0YXRpYyBpbnQKLV91bnJlZ2lzdGVyX3N5c09SX2J5X3Nlc3Npb25fY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZyk7Ci0KLXN0cnVjdCB0aW1ldmFsICBzeXNPUl9sYXN0Y2hhbmdlOwotc3RhdGljIHN0cnVjdCBzeXNPUlRhYmxlICp0YWJsZSA9IE5VTEw7Ci1zdGF0aWMgaW50ICAgICAgbnVtRW50cmllcyA9IDA7CisvKiogVHlwaWNhbCBkYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkgKi8KK3R5cGVkZWYgc3RydWN0IHN5c09SVGFibGVfZW50cnlfcyB7CisgICAgbmV0c25tcF9pbmRleCAgICAgICAgICAgIG9pZF9pbmRleDsKKyAgICBvaWQgICAgICAgICAgICAgICAgICAgICAgc3lzT1JJbmRleDsKKyAgICBjb25zdCBzdHJ1Y3Qgc3lzT1JUYWJsZSogZGF0YTsKK30gc3lzT1JUYWJsZV9lbnRyeTsKIAogLyoKLSAqIGRlZmluZSB0aGUgc3RydWN0dXJlIHdlJ3JlIGdvaW5nIHRvIGFzayB0aGUgYWdlbnQgdG8gcmVnaXN0ZXIgb3VyCi0gKiBpbmZvcm1hdGlvbiBhdCAKKyAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIHN5c09SVGFibGUKICAqLwotc3RydWN0IHZhcmlhYmxlMSBzeXNPUlRhYmxlX3ZhcmlhYmxlc1tdID0gewotICAgIHtTWVNPUlRBQkxFSUQsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfc3lzT1JUYWJsZSwgMSwgezJ9fSwKLSAgICB7U1lTT1JUQUJMRURFU0NSLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3N5c09SVGFibGUsIDEsIHszfX0sCi0gICAge1NZU09SVEFCTEVVUFRJTUUsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfc3lzT1JUYWJsZSwgMSwgezR9fQotfTsKKyNkZWZpbmUgQ09MVU1OX1NZU09SSU5ERVgJMQorI2RlZmluZSBDT0xVTU5fU1lTT1JJRAkJMgorI2RlZmluZSBDT0xVTU5fU1lTT1JERVNDUgkzCisjZGVmaW5lIENPTFVNTl9TWVNPUlVQVElNRQk0CiAKLS8qCi0gKiBEZWZpbmUgdGhlIE9JRCBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIG1pYiB0cmVlIHRoYXQgd2UncmUKLSAqIHJlZ2lzdGVyaW5nIHVuZGVybmVhdGggCi0gKi8KLW9pZCAgICAgICAgICAgICBzeXNPUlRhYmxlX3ZhcmlhYmxlc19vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgMSwgOSwgMSB9Oworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICp0YWJsZSA9IE5VTEw7CitzdGF0aWMgdV9sb25nICAgICAgICAgICAgIHN5c09STGFzdENoYW5nZTsKK3N0YXRpYyBvaWQgICAgICAgICAgICAgICAgc3lzT1JOZXh0SW5kZXggPSAxOworCisvKiogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgKi8KK3N0YXRpYyB2b2lkCityZWdpc3Rlcl9mb3JlYWNoKGNvbnN0IHN0cnVjdCBzeXNPUlRhYmxlKiBkYXRhLCB2b2lkKiBkdW1teSkKK3sKKyAgICBzeXNPUlRhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIHN5c09STGFzdENoYW5nZSA9IGRhdGEtPk9SX3VwdGltZTsKKworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihzeXNPUlRhYmxlX2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KSB7CisJc25tcF9sb2coTE9HX0VSUiwKKwkJICJjb3VsZCBub3QgYWxsb2NhdGUgc3RvcmFnZSwgc3lzT1JUYWJsZSBpcyBpbmNvbnNpc3RlbnRcbiIpOworICAgIH0gZWxzZSB7CisJY29uc3Qgb2lkIGZpcnN0TmV4dCA9IHN5c09STmV4dEluZGV4OworCW5ldHNubXBfaXRlcmF0b3IqIGl0ID0gQ09OVEFJTkVSX0lURVJBVE9SKHRhYmxlKTsKKworCWRvIHsKKwkgICAgY29uc3Qgc3lzT1JUYWJsZV9lbnRyeSogdmFsdWU7CisJICAgIGNvbnN0IG9pZCBjdXIgPSBzeXNPUk5leHRJbmRleDsKKworCSAgICBpZiAoc3lzT1JOZXh0SW5kZXggPT0gU05NUF9NSU4oTUFYX1NVQklELCAyMTQ3NDgzNjQ3VUwpKQorCQlzeXNPUk5leHRJbmRleCA9IDE7CisJICAgIGVsc2UKKwkJKytzeXNPUk5leHRJbmRleDsKKworCSAgICBmb3IgKHZhbHVlID0gKHN5c09SVGFibGVfZW50cnkqKWl0LT5jdXJyKGl0KTsKKwkJIHZhbHVlICYmIHZhbHVlLT5zeXNPUkluZGV4IDwgY3VyOworCQkgdmFsdWUgPSAoc3lzT1JUYWJsZV9lbnRyeSopSVRFUkFUT1JfTkVYVChpdCkpIHsKKwkgICAgfQorCisJICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+c3lzT1JJbmRleCA9PSBjdXIpIHsKKwkJaWYgKHN5c09STmV4dEluZGV4IDwgY3VyKQorCQkgICAgaXQtPnJlc2V0KGl0KTsKKwkgICAgfSBlbHNlIHsKKwkJZW50cnktPnN5c09SSW5kZXggPSBjdXI7CisJCWJyZWFrOworCSAgICB9CisJfSB3aGlsZSAoZmlyc3ROZXh0ICE9IHN5c09STmV4dEluZGV4KTsKKworCUlURVJBVE9SX1JFTEVBU0UoaXQpOworCisJaWYoZmlyc3ROZXh0ID09IHN5c09STmV4dEluZGV4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGxvY2F0ZSBhIGZyZWUgaW5kZXggaW4gc3lzT1JUYWJsZVxuIik7CisgICAgICAgICAgICBmcmVlKGVudHJ5KTsKKwl9IGVsc2UgeworCSAgICBlbnRyeS0+ZGF0YSA9IGRhdGE7CisJICAgIGVudHJ5LT5vaWRfaW5kZXgubGVuID0gMTsKKwkgICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gJmVudHJ5LT5zeXNPUkluZGV4OworCisJICAgIENPTlRBSU5FUl9JTlNFUlQodGFibGUsIGVudHJ5KTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50CityZWdpc3Rlcl9jYihpbnQgbWFqb3IsIGludCBtaW5vciwgdm9pZCogc2Vydiwgdm9pZCogY2xpZW50KQoreworICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zeXNPUlRhYmxlL3JlZ2lzdGVyX2NiIiwKKyAgICAgICAgICAgICAgICAicmVnaXN0ZXJfY2IoJWQsICVkLCAlcCwgJXApXG4iLCBtYWpvciwgbWlub3IsIHNlcnYsIGNsaWVudCkpOworICAgIHJlZ2lzdGVyX2ZvcmVhY2goKHN0cnVjdCBzeXNPUlRhYmxlKilzZXJ2LCBOVUxMKTsKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworLyoqIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAqLworc3RhdGljIGludAordW5yZWdpc3Rlcl9jYihpbnQgbWFqb3IsIGludCBtaW5vciwgdm9pZCogc2Vydiwgdm9pZCogY2xpZW50KQoreworICAgIHN5c09SVGFibGVfZW50cnkgKnZhbHVlOworICAgIG5ldHNubXBfaXRlcmF0b3IqIGl0ID0gQ09OVEFJTkVSX0lURVJBVE9SKHRhYmxlKTsKKworICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zeXNPUlRhYmxlL3VucmVnaXN0ZXJfY2IiLAorICAgICAgICAgICAgICAgICJ1bnJlZ2lzdGVyX2NiKCVkLCAlZCwgJXAsICVwKVxuIiwgbWFqb3IsIG1pbm9yLCBzZXJ2LCBjbGllbnQpKTsKKyAgICBzeXNPUkxhc3RDaGFuZ2UgPSAoKHN0cnVjdCBzeXNPUlRhYmxlKikoc2VydikpLT5PUl91cHRpbWU7CisKKyAgICB3aGlsZSAoKHZhbHVlID0gKHN5c09SVGFibGVfZW50cnkqKUlURVJBVE9SX05FWFQoaXQpKSAmJiB2YWx1ZS0+ZGF0YSAhPSBzZXJ2KTsKKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0KTsKKyAgICBpZih2YWx1ZSkgeworCUNPTlRBSU5FUl9SRU1PVkUodGFibGUsIHZhbHVlKTsKKwlmcmVlKHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc3lzT1JUYWJsZSB0YWJsZSAqLworc3RhdGljIGludAorc3lzT1JUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisKKyAgICBERUJVR01TR1RMKCgibWliSUkvc3lzT1JUYWJsZS9zeXNPUlRhYmxlX2hhbmRsZXIiLAorICAgICAgICAgICAgICAgICJzeXNPUlRhYmxlX2hhbmRsZXIgY2FsbGVkXG4iKSk7CisKKyAgICBpZiAocmVxaW5mby0+bW9kZSAhPSBNT0RFX0dFVCkgeworCXNubXBfbG9nKExPR19FUlIsCisJCSAiR290IHVuZXhwZWN0ZWQgb3BlcmF0aW9uIGZvciBzeXNPUlRhYmxlXG4iKTsKKwlyZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIC8qCisgICAgICogUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQorICAgICAqLworICAgIHJlcXVlc3QgPSByZXF1ZXN0czsKKyAgICB3aGlsZShyZXF1ZXN0ICYmIHJlcXVlc3QtPnByb2Nlc3NlZCkKKwlyZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dDsKKyAgICB3aGlsZShyZXF1ZXN0KSB7CisJc3lzT1JUYWJsZV9lbnRyeSAqdGFibGVfZW50cnk7CisJbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisKKwlpZiAoTlVMTCA9PSAodGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpKSkgeworCSAgICBzbm1wX2xvZyhMT0dfRVJSLAorCQkgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBpbmZvIGZvciBzeXNPUlRhYmxlXG4iKTsKKwkgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKAorCQkgICAgcmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworCX0gZWxzZSBpZihOVUxMID09ICh0YWJsZV9lbnRyeSA9IChzeXNPUlRhYmxlX2VudHJ5ICopCisJCQkgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCkpKSB7CisJICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisJICAgIGNhc2UgQ09MVU1OX1NZU09SSUQ6CisJICAgIGNhc2UgQ09MVU1OX1NZU09SREVTQ1I6CisJICAgIGNhc2UgQ09MVU1OX1NZU09SVVBUSU1FOgorCQluZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisJCQkJCSAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQluZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNIT0JKRUNUKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworCSAgICBjYXNlIENPTFVNTl9TWVNPUklEOgorCQlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoCisJCQlyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQkpFQ1RfSUQsCisJCQkoY29uc3QgdV9jaGFyKil0YWJsZV9lbnRyeS0+ZGF0YS0+T1Jfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmRhdGEtPk9SX29pZGxlbiAqIHNpemVvZihvaWQpKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgQ09MVU1OX1NZU09SREVTQ1I6CisJCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSgKKwkJCXJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKwkJCShjb25zdCB1X2NoYXIqKXRhYmxlX2VudHJ5LT5kYXRhLT5PUl9kZXNjciwKKwkJCXN0cmxlbih0YWJsZV9lbnRyeS0+ZGF0YS0+T1JfZGVzY3IpKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgQ09MVU1OX1NZU09SVVBUSU1FOgorCQlzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcigKKwkJCXJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX1RJTUVUSUNLUywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5kYXRhLT5PUl91cHRpbWUpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSE9CSkVDVCk7CisJCWJyZWFrOworCSAgICB9CisJfQorCWRvIHsKKwkgICAgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQ7CisJfSB3aGlsZShyZXF1ZXN0ICYmIHJlcXVlc3QtPnByb2Nlc3NlZCk7CisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCiAjaWZkZWYgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKIGV4dGVybiBvaWQgICAgICBzeXN0ZW1fbW9kdWxlX29pZFtdOwogZXh0ZXJuIGludCAgICAgIHN5c3RlbV9tb2R1bGVfb2lkX2xlbjsKIGV4dGVybiBpbnQgICAgICBzeXN0ZW1fbW9kdWxlX2NvdW50OwogI2VuZGlmCiAKK3N0YXRpYyBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpzeXNPUkxhc3RDaGFuZ2VfcmVnOworc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvIHN5c09STGFzdENoYW5nZV93aW5mbzsKK3N0YXRpYyBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpzeXNPUlRhYmxlX3JlZzsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICpzeXNPUlRhYmxlX3RhYmxlX2luZm87CisKKy8qKiBJbml0aWFsaXplcyB0aGUgc3lzT1JUYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfc3lzT1JUYWJsZSh2b2lkKQogeworICAgIGNvbnN0IG9pZCBzeXNPUkxhc3RDaGFuZ2Vfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDggfTsKKyAgICBjb25zdCBvaWQgc3lzT1JUYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgOSB9OworCisgICAgc3lzT1JUYWJsZV90YWJsZV9pbmZvID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKworICAgIHRhYmxlID0gbmV0c25tcF9jb250YWluZXJfZmluZCgic3lzT1JUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKworICAgIGlmIChzeXNPUlRhYmxlX3RhYmxlX2luZm8gPT0gTlVMTCB8fCB0YWJsZSA9PSBOVUxMKSB7CisgICAgICAgIFNOTVBfRlJFRShzeXNPUlRhYmxlX3RhYmxlX2luZm8pOworICAgICAgICBDT05UQUlORVJfRlJFRSh0YWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGFibGUtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJzeXNPUlRhYmxlIik7CisKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyhzeXNPUlRhYmxlX3RhYmxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsIC8qKiBpbmRleDogc3lzT1JJbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIHN5c09SVGFibGVfdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl9TWVNPUklEOworICAgIHN5c09SVGFibGVfdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9TWVNPUlVQVElNRTsKKworICAgIHN5c09STGFzdENoYW5nZV9yZWcgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICJtaWJJSS9zeXNPUkxhc3RDaGFuZ2UiLCBOVUxMLAorICAgICAgICAgICAgc3lzT1JMYXN0Q2hhbmdlX29pZCwgT0lEX0xFTkdUSChzeXNPUkxhc3RDaGFuZ2Vfb2lkKSwKKyAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorCSAgICAmc3lzT1JMYXN0Q2hhbmdlX3dpbmZvLAorICAgICAgICAgICAgJnN5c09STGFzdENoYW5nZSwgc2l6ZW9mKHVfbG9uZyksCisgICAgICAgICAgICBBU05fVElNRVRJQ0tTLCBXQVRDSEVSX0ZJWEVEX1NJWkUpOworICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoc3lzT1JMYXN0Q2hhbmdlX3JlZywKKwkJCQkgICAgJnN5c09STGFzdENoYW5nZV93aW5mbyk7CisKKyAgICBzeXNPUlRhYmxlX3JlZyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgIm1pYklJL3N5c09SVGFibGUiLCBzeXNPUlRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICBzeXNPUlRhYmxlX29pZCwgT0lEX0xFTkdUSChzeXNPUlRhYmxlX29pZCksIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yZWdpc3RlcihzeXNPUlRhYmxlX3JlZywgc3lzT1JUYWJsZV90YWJsZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLCBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworCisgICAgc3lzT1JMYXN0Q2hhbmdlID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisKICAgICAvKgotICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCB0byBoYW5kbGUgb3VyIG1pYiB0cmVlIAorICAgICAqIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlCiAgICAgICovCisgICAgbmV0c25tcF9zeXNPUlRhYmxlX2ZvcmVhY2goJnJlZ2lzdGVyX2ZvcmVhY2gsIE5VTEwpOwogCi0jaWZkZWYgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIE5FVFNOTVBfRFNfQUdFTlRfUk9MRSkgPT0gTUFTVEVSX0FHRU5UKQotICAgICAgICAodm9pZCkgcmVnaXN0ZXJfbWliX3ByaW9yaXR5KCJtaWJJSS9zeXNPUlRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHZhcmlhYmxlICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzT1JUYWJsZV92YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzeXNPUlRhYmxlX3ZhcmlhYmxlcykgLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNPUlRhYmxlX3ZhcmlhYmxlc19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN5c09SVGFibGVfdmFyaWFibGVzX29pZCkgLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvaWQpLCAxKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgUkVHSVNURVJfTUlCKCJtaWJJSS9zeXNPUlRhYmxlIiwgc3lzT1JUYWJsZV92YXJpYWJsZXMsIHZhcmlhYmxlMSwKLSAgICAgICAgICAgICAgICAgICAgIHN5c09SVGFibGVfdmFyaWFibGVzX29pZCk7Ci0KKyAgICAvKgorICAgICAqIFJlZ2lzdGVyIGNhbGxiYWNrcworICAgICAqLwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9SRUdfU1lTT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2ssIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVHX1NZU09SLCByZWdpc3Rlcl9jYiwgTlVMTCk7CiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1VOUkVHX1NZU09SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgX3VucmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2ssIE5VTEwpOwotICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUl9TRVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgX3VucmVnaXN0ZXJfc3lzT1JfYnlfc2Vzc2lvbl9jYWxsYmFjaywgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19VTlJFR19TWVNPUiwgdW5yZWdpc3Rlcl9jYiwgTlVMTCk7CiAKICNpZmRlZiBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQogICAgIGlmICgrK3N5c3RlbV9tb2R1bGVfY291bnQgPT0gMykKICAgICAgICAgUkVHSVNURVJfU1lTT1JfVEFCTEUoc3lzdGVtX21vZHVsZV9vaWQsIHN5c3RlbV9tb2R1bGVfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBNSUIgbW9kdWxlIGZvciBTTk1QdjIgZW50aXRpZXMiKTsKICNlbmRpZgotCi0gICAgZ2V0dGltZW9mZGF5KCZzeXNPUl9sYXN0Y2hhbmdlLCBOVUxMKTsKLX0KLQotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCi0JICoKLQkgKiAgU3lzdGVtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwotCSAqCi0JICoqKioqKioqKioqKioqKioqKioqKi8KLQotdV9jaGFyICAgICAgICAgKgotdmFyX3N5c09SVGFibGUoc3RydWN0IHZhcmlhYmxlICp2cCwKLSAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKLSAgICB1bnNpZ25lZCBsb25nICAgaSA9IDA7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcmV0OwotICAgIHN0cnVjdCBzeXNPUlRhYmxlICpwdHIgPSB0YWJsZTsKLQotICAgIGlmIChoZWFkZXJfc2ltcGxlX3RhYmxlCi0gICAgICAgICh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kLCBudW1FbnRyaWVzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBmb3IgKGkgPSAxOyBwdHIgIT0gTlVMTCAmJiBpIDwgbmFtZVsqbGVuZ3RoIC0gMV07IHB0ciA9IHB0ci0+bmV4dCwgaSsrKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zeXNPUlRhYmxlIiwgInN5c09SVGFibGUgLS0gJWx1ICE9ICVsdVxuIiwKLSAgICAgICAgICAgICAgICAgICAgaSwgbmFtZVsqbGVuZ3RoIC0gMV0pKTsKLSAgICB9Ci0gICAgaWYgKHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zeXNPUlRhYmxlIiwgInN5c09SVGFibGUgLS0gbm8gbWF0Y2g6ICVsdVxuIiwKLSAgICAgICAgICAgICAgICAgICAgaSkpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgREVCVUdNU0dUTCgoIm1pYklJL3N5c09SVGFibGUiLCAic3lzT1JUYWJsZSAtLSBtYXRjaDogJWx1XG4iLCBpKSk7Ci0KLSAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgU1lTT1JUQUJMRUlEOgotICAgICAgICAqdmFyX2xlbiA9IHB0ci0+T1Jfb2lkbGVuICogc2l6ZW9mKHB0ci0+T1Jfb2lkWzBdKTsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgcHRyLT5PUl9vaWQ7Ci0KLSAgICBjYXNlIFNZU09SVEFCTEVERVNDUjoKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4ocHRyLT5PUl9kZXNjcik7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopIHB0ci0+T1JfZGVzY3I7Ci0KLSAgICBjYXNlIFNZU09SVEFCTEVVUFRJTUU6Ci0gICAgICAgIHJldCA9IG5ldHNubXBfdGltZXZhbF91cHRpbWUoJnB0ci0+T1JfdXB0aW1lKTsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiByZXQ7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBERUJVR01TR1RMKCgic25tcGQiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX3N5c09SVGFibGVcbiIsCi0gICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi1pbnQKLXJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWQgKiBvaWRpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2lkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyLCBuZXRzbm1wX3Nlc3Npb24gKiBzcykKLXsKLSAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcHRyLCAqKm5wdHI7Ci0gICAgc3RydWN0IHJlZ2lzdGVyX3N5c09SX3BhcmFtZXRlcnMgcmVnX3N5c09SX3Bhcm1zOwotCi0gICAgREVCVUdNU0dUTCgoIm1pYklJL3N5c09SVGFibGUiLCAic3lzT1JUYWJsZSByZWdpc3RlcmluZzogIikpOwotICAgIERFQlVHTVNHT0lEKCgibWliSUkvc3lzT1JUYWJsZSIsIG9pZGluLCBvaWRsZW4pKTsKLSAgICBERUJVR01TRygoIm1pYklJL3N5c09SVGFibGUiLCAiXG4iKSk7Ci0KLSAgICBwdHIgPSAoc3RydWN0IHN5c09SVGFibGUgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3lzT1JUYWJsZSkpOwotICAgIGlmIChwdHIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gU1lTX09SVEFCTEVfUkVHSVNUUkFUSU9OX0ZBSUxFRDsKLSAgICB9Ci0gICAgcHRyLT5PUl9kZXNjciA9IChjaGFyICopIHN0cmR1cChkZXNjcik7Ci0gICAgaWYgKHB0ci0+T1JfZGVzY3IgPT0gTlVMTCkgewotICAgICAgICBmcmVlKHB0cik7Ci0gICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEOwotICAgIH0KLSAgICBwdHItPk9SX29pZGxlbiA9IG9pZGxlbjsKLSAgICBwdHItPk9SX29pZCA9IChvaWQgKikgbWFsbG9jKHNpemVvZihvaWQpICogb2lkbGVuKTsKLSAgICBpZiAocHRyLT5PUl9vaWQgPT0gTlVMTCkgewotICAgICAgICBmcmVlKHB0ci0+T1JfZGVzY3IpOwotICAgICAgICBmcmVlKHB0cik7Ci0gICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEOwotICAgIH0KLSAgICBtZW1jcHkocHRyLT5PUl9vaWQsIG9pZGluLCBzaXplb2Yob2lkKSAqIG9pZGxlbik7Ci0gICAgZ2V0dGltZW9mZGF5KCYocHRyLT5PUl91cHRpbWUpLCBOVUxMKTsKLSAgICBnZXR0aW1lb2ZkYXkoJihzeXNPUl9sYXN0Y2hhbmdlKSwgTlVMTCk7Ci0gICAgcHRyLT5PUl9zZXNzID0gc3M7Ci0gICAgcHRyLT5uZXh0ID0gTlVMTDsKLSAgICBudW1FbnRyaWVzKys7Ci0KLSAgICAvKiBhZGQgdGhpcyBlbnRyeSB0byB0aGUgZW5kIG9mIHRoZSBjaGFpbmVkIGxpc3QgKi8KLSAgICBucHRyID0gJnRhYmxlOwotICAgIHdoaWxlICgqbnB0ciAhPSBOVUxMKQotICAgICAgICBucHRyID0gJigoKm5wdHIpLT5uZXh0KTsKLSAgICAqbnB0ciA9IHB0cjsKLQotICAgIHJlZ19zeXNPUl9wYXJtcy5uYW1lID0gb2lkaW47Ci0gICAgcmVnX3N5c09SX3Bhcm1zLm5hbWVsZW4gPSBvaWRsZW47Ci0gICAgcmVnX3N5c09SX3Bhcm1zLmRlc2NyID0gZGVzY3I7Ci0gICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVHX1NZU09SLCAmcmVnX3N5c09SX3Bhcm1zKTsKLQotICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RFUkVEX09LOwotfQotCi1pbnQKLXJlZ2lzdGVyX3N5c09SVGFibGUob2lkICogb2lkaW4sIHNpemVfdCBvaWRsZW4sIGNvbnN0IGNoYXIgKmRlc2NyKQotewotICAgIHJldHVybiByZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkaW4sIG9pZGxlbiwgZGVzY3IsIE5VTEwpOwotfQotCi0KLQotaW50Ci11bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWQgKiBvaWRpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvaWRsZW4sIG5ldHNubXBfc2Vzc2lvbiAqIHNzKQotewotICAgIHN0cnVjdCBzeXNPUlRhYmxlICpwdHIsICpwcmV2ID0gTlVMTCwgKm5leHQ7Ci0gICAgaW50ICAgICAgICAgICAgIGZvdW5kID0gU1lTX09SVEFCTEVfTk9fU1VDSF9SRUdJU1RSQVRJT047Ci0gICAgc3RydWN0IHJlZ2lzdGVyX3N5c09SX3BhcmFtZXRlcnMgcmVnX3N5c09SX3Bhcm1zOwotCi0gICAgREVCVUdNU0dUTCgoIm1pYklJL3N5c09SVGFibGUiLCAic3lzT1JUYWJsZSB1bnJlZ2lzdGVyaW5nOiAiKSk7Ci0gICAgREVCVUdNU0dPSUQoKCJtaWJJSS9zeXNPUlRhYmxlIiwgb2lkaW4sIG9pZGxlbikpOwotICAgIERFQlVHTVNHKCgibWliSUkvc3lzT1JUYWJsZSIsICJcbiIpKTsKLQotICAgIGZvciAocHRyID0gdGFibGU7IHB0cjsgcHRyID0gbmV4dCkKLSAgICB7Ci0gICAgICAgIG5leHQgPSBwdHItPm5leHQ7Ci0gICAgICAgIGlmIChwdHItPk9SX3Nlc3MgPT0gc3MgJiYKLSAgICAgICAgICAoc25tcF9vaWRfY29tcGFyZShvaWRpbiwgb2lkbGVuLCBwdHItPk9SX29pZCwgcHRyLT5PUl9vaWRsZW4pID09IDApKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJldiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHRhYmxlID0gcHRyLT5uZXh0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByZXYtPm5leHQgPSBwdHItPm5leHQ7Ci0KLSAgICAgICAgICAgIGZyZWUocHRyLT5PUl9vaWQpOwotICAgICAgICAgICAgZnJlZShwdHItPk9SX2Rlc2NyKTsKLSAgICAgICAgICAgIGZyZWUocHRyKTsKLSAgICAgICAgICAgIG51bUVudHJpZXMtLTsKLSAgICAgICAgICAgIGdldHRpbWVvZmRheSgmKHN5c09SX2xhc3RjaGFuZ2UpLCBOVUxMKTsKLSAgICAgICAgICAgIGZvdW5kID0gU1lTX09SVEFCTEVfVU5SRUdJU1RFUkVEX09LOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJldiA9IHB0cjsKLSAgICB9Ci0KLSAgICByZWdfc3lzT1JfcGFybXMubmFtZSA9IG9pZGluOwotICAgIHJlZ19zeXNPUl9wYXJtcy5uYW1lbGVuID0gb2lkbGVuOwotICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1VOUkVHX1NZU09SLCAmcmVnX3N5c09SX3Bhcm1zKTsKLQotICAgIHJldHVybiBmb3VuZDsKLX0KLQotCi1pbnQKLXVucmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiBvaWRpbiwgc2l6ZV90IG9pZGxlbikKLXsKLSAgICByZXR1cm4gdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkaW4sIG9pZGxlbiwgTlVMTCk7CiB9CiAKIHZvaWQKLXVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNzKQorc2h1dGRvd25fc3lzT1JUYWJsZSh2b2lkKQogewotICAgIHN0cnVjdCBzeXNPUlRhYmxlICpwdHIsICpwcmV2ID0gTlVMTCwgKm5leHQ7CisjaWZkZWYgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKyAgICBpZiAoc3lzdGVtX21vZHVsZV9jb3VudC0tID09IDMpCisgICAgICAgIFVOUkVHSVNURVJfU1lTT1JfVEFCTEUoc3lzdGVtX21vZHVsZV9vaWQsIHN5c3RlbV9tb2R1bGVfb2lkX2xlbik7CisjZW5kaWYKIAotICAgIGZvciAocHRyID0gdGFibGU7IHB0cjsgcHRyID0gbmV4dCkKLSAgICB7Ci0gICAgICAgIG5leHQgPSBwdHItPm5leHQ7Ci0gICAgICAgIGlmICgoKHNzLT5mbGFncyAmIFNOTVBfRkxBR1NfU1VCU0VTU0lPTikgJiYgcHRyLT5PUl9zZXNzID09IHNzKSB8fAotICAgICAgICAgICAgKCEoc3MtPmZsYWdzICYgU05NUF9GTEFHU19TVUJTRVNTSU9OKSAmJiBwdHItPk9SX3Nlc3MgJiYKLSAgICAgICAgICAgICBwdHItPk9SX3Nlc3MtPnN1YnNlc3Npb24gPT0gc3MpKSB7Ci0gICAgICAgICAgICBpZiAocHJldiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHRhYmxlID0gbmV4dDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmV2LT5uZXh0ID0gbmV4dDsKLSAgICAgICAgICAgIGZyZWUocHRyLT5PUl9vaWQpOwotICAgICAgICAgICAgZnJlZShwdHItPk9SX2Rlc2NyKTsKLSAgICAgICAgICAgIGZyZWUocHRyKTsKLSAgICAgICAgICAgIG51bUVudHJpZXMtLTsKLSAgICAgICAgICAgIGdldHRpbWVvZmRheSgmKHN5c09SX2xhc3RjaGFuZ2UpLCBOVUxMKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwcmV2ID0gcHRyOwotICAgIH0KKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdfU1lTT1IsIHVucmVnaXN0ZXJfY2IsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdfU1lTT1IsIHJlZ2lzdGVyX2NiLCBOVUxMLCAxKTsKKworICAgIGlmICh0YWJsZSkKKyAgICAgICAgQ09OVEFJTkVSX0NMRUFSKHRhYmxlLCBuZXRzbm1wX2NvbnRhaW5lcl9zaW1wbGVfZnJlZSwgTlVMTCk7CisgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfdW5yZWdpc3RlcihzeXNPUlRhYmxlX3JlZyk7CisgICAgc3lzT1JUYWJsZV9yZWcgPSBOVUxMOworICAgIHRhYmxlID0gTlVMTDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUoc3lzT1JUYWJsZV90YWJsZV9pbmZvKTsKKyAgICBzeXNPUlRhYmxlX3RhYmxlX2luZm8gPSBOVUxMOworICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKHN5c09STGFzdENoYW5nZV9yZWcpOworICAgIHN5c09STGFzdENoYW5nZV9yZWcgPSBOVUxMOwogfQotCi1zdGF0aWMgaW50Ci1fcmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKQotewotICAgIHN0cnVjdCBzeXNPUlRhYmxlICpwYXJtcyA9IChzdHJ1Y3Qgc3lzT1JUYWJsZSAqKSBzZXJ2ZXJhcmc7Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKHBhcm1zLT5PUl9vaWQsIHBhcm1zLT5PUl9vaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJtcy0+T1JfZGVzY3IsIHBhcm1zLT5PUl9zZXNzKTsKLX0KLQotc3RhdGljIGludAotX3VucmVnaXN0ZXJfc3lzT1JfYnlfc2Vzc2lvbl9jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQotewotICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiA9IChuZXRzbm1wX3Nlc3Npb24gKikgc2VydmVyYXJnOwotCi0gICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX2J5X3Nlc3Npb24oc2Vzc2lvbik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotX3VucmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKLXsKLSAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcGFybXMgPSAoc3RydWN0IHN5c09SVGFibGUgKikgc2VydmVyYXJnOwotCi0gICAgcmV0dXJuIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKHBhcm1zLT5PUl9vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm1zLT5PUl9vaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm1zLT5PUl9zZXNzKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oCmluZGV4IDU5ZmI3ZTAuLmU5ODhmZGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKQEAgLTEsNTcgKzEsMTUgQEAKLS8qCi0gKiAgVGVtcGxhdGUgTUlCIGdyb3VwIGludGVyZmFjZSAtIHN5c09SVGFibGUuaAotICoKLSAqLwotI2lmbmRlZiBfTUlCR1JPVVBfU1lTT1JUQUJMRV9ICi0jZGVmaW5lIF9NSUJHUk9VUF9TWVNPUlRBQkxFX0gKKyNpZm5kZWYgTUlCR1JPVVBfU1lTT1JUQUJMRV9ICisjZGVmaW5lIE1JQkdST1VQX1NZU09SVEFCTEVfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQotY29uZmlnX3JlcXVpcmUobWliSUkvc3lzdGVtX21pYikKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKIAotICAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSB7Ci0gICAgICAgICBjaGFyICAgICAgICAgICAqT1JfZGVzY3I7Ci0gICAgICAgICBvaWQgICAgICAgICAgICAqT1Jfb2lkOwotICAgICAgICAgc2l6ZV90ICAgICAgICAgIE9SX29pZGxlbjsKLSAgICAgICAgIHN0cnVjdCB0aW1ldmFsICBPUl91cHRpbWU7Ci0gICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKk9SX3Nlc3M7Ci0gICAgICAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqbmV4dDsKLSAgICAgfTsKK2V4dGVybiB2b2lkICAgICBpbml0X3N5c09SVGFibGUodm9pZCk7CitleHRlcm4gdm9pZCAgICAgc2h1dGRvd25fc3lzT1JUYWJsZSh2b2lkKTsKIAotICAgICBzdHJ1Y3QgcmVnaXN0ZXJfc3lzT1JfcGFyYW1ldGVycyB7Ci0gICAgICAgICBvaWQgICAgICAgICAgICAqbmFtZTsKLSAgICAgICAgIGludCAgICAgICAgICAgICBuYW1lbGVuOwotICAgICAgICAgY29uc3QgY2hhciAgICAgKmRlc2NyOwotICAgICB9OworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKIAotICAgICBleHRlcm4gdm9pZCAgICAgaW5pdF9zeXNPUlRhYmxlKHZvaWQpOwotICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfc3lzT1JUYWJsZTsKLSAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX3N5c09STGFzdENoYW5nZTsKLSAgICAgZXh0ZXJuIGludCAgICAgIHJlZ2lzdGVyX3N5c09SVGFibGUob2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqKTsKLSAgICAgZXh0ZXJuIGludCAgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiwgc2l6ZV90KTsKLSAgICAgZXh0ZXJuIGludCAgICAgIHJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWQgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICopOwotICAgICBleHRlcm4gaW50ICAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkICosIHNpemVfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqKTsKLSAgICAgZXh0ZXJuIHZvaWQgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqKTsKLQotI2RlZmluZQlTWVNPUlRBQkxFSU5ERVgJCSAgICAgICAgMQotI2RlZmluZQlTWVNPUlRBQkxFSUQJCSAgICAgICAgMgotI2RlZmluZQlTWVNPUlRBQkxFREVTQ1IJCSAgICAgICAgMwotI2RlZmluZQlTWVNPUlRBQkxFVVBUSU1FCSAgICAgICAgNAotCi0jZGVmaW5lIFNZU19PUlRBQkxFX1JFR0lTVEVSRURfT0sgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1lTX09SVEFCTEVfUkVHSVNUUkFUSU9OX0ZBSUxFRCAgICAgICAtMQotI2RlZmluZSBTWVNfT1JUQUJMRV9VTlJFR0lTVEVSRURfT0sgICAgICAgICAgICAwCi0jZGVmaW5lIFNZU19PUlRBQkxFX05PX1NVQ0hfUkVHSVNUUkFUSU9OICAgICAgLTEKLQotI2lmZGVmICBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotI2RlZmluZSBSRUdJU1RFUl9TWVNPUl9FTlRSWSh0aGVvaWQsIGRlc2NyKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICh2b2lkKXJlZ2lzdGVyX3N5c09SVGFibGUodGhlb2lkLCBzaXplb2YodGhlb2lkKS9zaXplb2Yob2lkKSwgZGVzY3IpOwotI2RlZmluZSBSRUdJU1RFUl9TWVNPUl9UQUJMRSh0aGVvaWQsIGxlbiwgZGVzY3IpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKHZvaWQpcmVnaXN0ZXJfc3lzT1JUYWJsZSh0aGVvaWQsIGxlbiwgZGVzY3IpOwotCi0jZWxzZQotI2RlZmluZSBSRUdJU1RFUl9TWVNPUl9FTlRSWSh4LHkpCi0jZGVmaW5lIFJFR0lTVEVSX1NZU09SX1RBQkxFKHgseSx6KQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRSAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfU1lTT1JUQUJMRV9IICovCisjZW5kaWYgLyogTUlCR1JPVVBfU1lTT1JUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMKaW5kZXggZWQ5N2FmMy4uNjViMGI3YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjcsMTUgKzI4LDcgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCi0jaWYgIWRlZmluZWQobWluZ3czMikgJiYgZGVmaW5lZChIQVZFX1NZU19USU1FX0gpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBIQVZFX1VUU05BTUVfSAogI2luY2x1ZGUgPHV0c25hbWUuaD4KICNlbHNlCkBAIC00MywxOCArMzYsMTYgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAogI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJzeXN0ZW1fbWliLmgiCi0jaW5jbHVkZSAic3RydWN0LmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgorI2luY2x1ZGUgInVwZGF0ZXMuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUod2F0Y2hlcl9yZWFkX29ubHlfaW50X3NjYWxhcikKIAogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKQEAgLTY0LDMzICs1NSwyNCBAQAogCSAqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgU1lTX1NUUklOR19MRU4JMjU2Ci1jaGFyICAgICAgICAgICAgdmVyc2lvbl9kZXNjcltTWVNfU1RSSU5HX0xFTl0gPSBORVRTTk1QX1ZFUlNfREVTQzsKLWNoYXIgICAgICAgICAgICBzeXNDb250YWN0W1NZU19TVFJJTkdfTEVOXSA9IE5FVFNOTVBfU1lTX0NPTlRBQ1Q7Ci1jaGFyICAgICAgICAgICAgc3lzTmFtZVtTWVNfU1RSSU5HX0xFTl0gPSBORVRTTk1QX1NZU19OQU1FOwotY2hhciAgICAgICAgICAgIHN5c0xvY2F0aW9uW1NZU19TVFJJTkdfTEVOXSA9IE5FVFNOTVBfU1lTX0xPQzsKLW9pZCAgICAgICAgICAgICBzeXNPYmplY3RJRFtNQVhfT0lEX0xFTl07Ci1zaXplX3QgICAgICAgICAgc3lzT2JqZWN0SURMZW5ndGg7CitzdGF0aWMgY2hhciAgICAgdmVyc2lvbl9kZXNjcltTWVNfU1RSSU5HX0xFTl0gPSBORVRTTk1QX1ZFUlNfREVTQzsKK3N0YXRpYyBjaGFyICAgICBzeXNDb250YWN0W1NZU19TVFJJTkdfTEVOXSA9IE5FVFNOTVBfU1lTX0NPTlRBQ1Q7CitzdGF0aWMgY2hhciAgICAgc3lzTmFtZVtTWVNfU1RSSU5HX0xFTl0gPSBORVRTTk1QX1NZU19OQU1FOworc3RhdGljIGNoYXIgICAgIHN5c0xvY2F0aW9uW1NZU19TVFJJTkdfTEVOXSA9IE5FVFNOTVBfU1lTX0xPQzsKK3N0YXRpYyBvaWQgICAgICBzeXNPYmplY3RJRFtNQVhfT0lEX0xFTl07CitzdGF0aWMgc2l6ZV90IHN5c09iamVjdElEQnl0ZUxlbmd0aDsKIAogZXh0ZXJuIG9pZCAgICAgIHZlcnNpb25fc3lzb2lkW107CiBleHRlcm4gaW50ICAgICAgdmVyc2lvbl9zeXNvaWRfbGVuOwogCi1jaGFyICAgICAgICAgICAgb2xkdmVyc2lvbl9kZXNjcltTWVNfU1RSSU5HX0xFTl07Ci1jaGFyICAgICAgICAgICAgb2xkc3lzQ29udGFjdFtTWVNfU1RSSU5HX0xFTl07Ci1jaGFyICAgICAgICAgICAgb2xkc3lzTmFtZVtTWVNfU1RSSU5HX0xFTl07Ci1jaGFyICAgICAgICAgICAgb2xkc3lzTG9jYXRpb25bU1lTX1NUUklOR19MRU5dOwotCi1pbnQgICAgICAgICAgICAgc3lzU2VydmljZXMgPSA3MjsKLWludCAgICAgICAgICAgICBzeXNTZXJ2aWNlc0NvbmZpZ2VkID0gMDsKK3N0YXRpYyBpbnQgICAgICBzeXNTZXJ2aWNlcyA9IDcyOworc3RhdGljIGludCAgICAgIHN5c1NlcnZpY2VzQ29uZmlnZWQgPSAwOwogCiBleHRlcm4gb2lkICAgICAgdmVyc2lvbl9pZFtdOwogZXh0ZXJuIGludCAgICAgIHZlcnNpb25faWRfbGVuOwogCiBzdGF0aWMgaW50ICAgICAgc3lzQ29udGFjdFNldCA9IDAsIHN5c0xvY2F0aW9uU2V0ID0gMCwgc3lzTmFtZVNldCA9IDA7CiAKLVdyaXRlTWV0aG9kICAgICB3cml0ZVN5c3RlbTsKLWludCAgICAgICAgICAgICBoZWFkZXJfc3lzdGVtKHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7Ci0KICNpZiAoZGVmaW5lZCAoV0lOMzIpICYmIGRlZmluZWQgKEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLKSkgfHwgZGVmaW5lZCAobWluZ3czMikKIHN0YXRpYyB2b2lkICAgICB3aW5kb3dzT1NWZXJzaW9uU3RyaW5nKGNoYXIgW10sIHNpemVfdCk7CiAjZW5kaWYKQEAgLTEwMSwxODcgKzgzLDEwMCBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZAorc3RhdGljIHZvaWQKK3N5c3RlbV9wYXJzZV9jb25maWdfc3RyaW5nMihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKHN0cmxlbihjcHRyKSA8IHNpemUpIHsKKyAgICAgICAgc3RyY3B5KHZhbHVlLCBjcHRyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiJXMgdG9rZW4gdG9vIGxvbmcgKG11c3QgYmUgPCAlbHUpOlxuXHQlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCAodW5zaWduZWQgbG9uZylzaXplLCBjcHRyKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitzeXN0ZW1fcGFyc2VfY29uZmlnX3N0cmluZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZ3VhcmQpCit7CisgICAgaWYgKCp0b2tlbiA9PSAncCcpIHsKKyAgICAgICAgaWYgKCpndWFyZCA8IDApIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIGlzIGJvZ3VzIChhbmQgc2hvdWxkbid0IGhhcHBlbiBhbnl3YXkpIC0tIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgICogYWxyZWFkeSBjb25maWd1cmVkIHJlYWQtb25seS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSAlcy4wXG4iLCBuYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpndWFyZCA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoKmd1YXJkID4gMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoaXMgaXMgYm9ndXMgKGFuZCBzaG91bGRuJ3QgaGFwcGVuIGFueXdheSkgLS0gd2UgYWxyZWFkeSByZWFkIGEKKyAgICAgICAgICAgICAqIHBlcnNpc3RlbnQgdmFsdWUgd2hpY2ggd2Ugc2hvdWxkIGlnbm9yZSBpbiBmYXZvdXIgb2YgdGhpcyBvbmUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgJXMuMFxuIiwgbmFtZSk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRmFsbCB0aHJvdWdoIGFuZCBjb3B5IGluIHRoaXMgdmFsdWUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgfQorICAgICAgICAqZ3VhcmQgPSAtMTsKKyAgICB9CisKKyAgICBzeXN0ZW1fcGFyc2VfY29uZmlnX3N0cmluZzIodG9rZW4sIGNwdHIsIHZhbHVlLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzZGVzY3IoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKLQotICAgIGlmIChzdHJsZW4oY3B0cikgPj0gc2l6ZW9mKHZlcnNpb25fZGVzY3IpKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1ZiwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICJzeXNkZXNjciB0b2tlbiB0b28gbG9uZyAobXVzdCBiZSA8ICVsdSk6XG5cdCVzIiwKLSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKHZlcnNpb25fZGVzY3IpLAotICAgICAgICAgICAgICAgICBjcHRyKTsKLSAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwdHIsICJcIlwiIikgPT0gMCkgewotICAgICAgICB2ZXJzaW9uX2Rlc2NyWzBdID0gJ1wwJzsKLSAgICB9IGVsc2UgewotICAgICAgICBzdHJjcHkodmVyc2lvbl9kZXNjciwgY3B0cik7Ci0gICAgfQorICAgIHN5c3RlbV9wYXJzZV9jb25maWdfc3RyaW5nMih0b2tlbiwgY3B0ciwgdmVyc2lvbl9kZXNjciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZlcnNpb25fZGVzY3IpKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzbG9jKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07Ci0KLSAgICBpZiAoc3RybGVuKGNwdHIpID49IHNpemVvZihzeXNMb2NhdGlvbikpIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCAxMDI0LAotICAgICAgICAgICAgICAgICAic3lzbG9jYXRpb24gdG9rZW4gdG9vIGxvbmcgKG11c3QgYmUgPCAlbHUpOlxuXHQlcyIsCi0gICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNpemVvZihzeXNMb2NhdGlvbiksIGNwdHIpOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcCh0b2tlbiwgInBzeXNsb2NhdGlvbiIpID09IDApIHsKLSAgICAgICAgaWYgKHN5c0xvY2F0aW9uU2V0IDwgMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgaXMgYm9ndXMgKGFuZCBzaG91bGRuJ3QgaGFwcGVuIGFueXdheSkgLS0gdGhlIHN5c0xvY2F0aW9uCi0gICAgICAgICAgICAgKiBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgcmVhZC1vbmx5LiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgc3lzTG9jYXRpb24uMFxuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeXNMb2NhdGlvblNldCsrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN5c0xvY2F0aW9uU2V0ID4gMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgaXMgYm9ndXMgKGFuZCBzaG91bGRuJ3QgaGFwcGVuIGFueXdheSkgLS0gd2UgYWxyZWFkeSByZWFkIGEKLSAgICAgICAgICAgICAqIHBlcnNpc3RlbnQgdmFsdWUgb2Ygc3lzTG9jYXRpb24sIHdoaWNoIHdlIHNob3VsZCBpZ25vcmUgaW4KLSAgICAgICAgICAgICAqIGZhdm91ciBvZiB0aGlzIG9uZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5IHN5c0xvY2F0aW9uLjBcbiIpOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEZhbGwgdGhyb3VnaCBhbmQgY29weSBpbiB0aGlzIHZhbHVlLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgfQotICAgICAgICBzeXNMb2NhdGlvblNldCA9IC0xOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAoY3B0ciwgIlwiXCIiKSA9PSAwKSB7Ci0gICAgICAgIHN5c0xvY2F0aW9uWzBdID0gJ1wwJzsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihjcHRyKSA8IHNpemVvZihzeXNMb2NhdGlvbikpIHsKLSAgICAgICAgc3RyY3B5KHN5c0xvY2F0aW9uLCBjcHRyKTsKLSAgICB9CisgICAgc3lzdGVtX3BhcnNlX2NvbmZpZ19zdHJpbmcodG9rZW4sIGNwdHIsICJzeXNMb2NhdGlvbiIsIHN5c0xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzeXNMb2NhdGlvbiksICZzeXNMb2NhdGlvblNldCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c2Nvbihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOwotCi0gICAgaWYgKHN0cmxlbihjcHRyKSA+PSBzaXplb2Yoc3lzQ29udGFjdCkpIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCAxMDI0LAotICAgICAgICAgICAgICAgICAic3lzY29udGFjdCB0b2tlbiB0b28gbG9uZyAobXVzdCBiZSA8ICVsdSk6XG5cdCVzIiwKLSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKHN5c0NvbnRhY3QpLCBjcHRyKTsKLSAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAodG9rZW4sICJwc3lzY29udGFjdCIpID09IDApIHsKLSAgICAgICAgaWYgKHN5c0NvbnRhY3RTZXQgPCAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBib2d1cyAoYW5kIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KSAtLSB0aGUgc3lzQ29udGFjdAotICAgICAgICAgICAgICogaXMgYWxyZWFkeSBjb25maWd1cmVkIHJlYWQtb25seS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5IHN5c0NvbnRhY3QuMFxuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeXNDb250YWN0U2V0Kys7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3lzQ29udGFjdFNldCA+IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIGlzIGJvZ3VzIChhbmQgc2hvdWxkbid0IGhhcHBlbiBhbnl3YXkpIC0tIHdlIGFscmVhZHkgcmVhZCBhCi0gICAgICAgICAgICAgKiBwZXJzaXN0ZW50IHZhbHVlIG9mIHN5c0NvbnRhY3QsIHdoaWNoIHdlIHNob3VsZCBpZ25vcmUgaW4gZmF2b3VyCi0gICAgICAgICAgICAgKiBvZiB0aGlzIG9uZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5IHN5c0NvbnRhY3QuMFxuIik7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogRmFsbCB0aHJvdWdoIGFuZCBjb3B5IGluIHRoaXMgdmFsdWUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgICAgIHN5c0NvbnRhY3RTZXQgPSAtMTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKGNwdHIsICJcIlwiIikgPT0gMCkgewotICAgICAgICBzeXNDb250YWN0WzBdID0gJ1wwJzsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihjcHRyKSA8IHNpemVvZihzeXNDb250YWN0KSkgewotICAgICAgICBzdHJjcHkoc3lzQ29udGFjdCwgY3B0cik7Ci0gICAgfQorICAgIHN5c3RlbV9wYXJzZV9jb25maWdfc3RyaW5nKHRva2VuLCBjcHRyLCAic3lzQ29udGFjdCIsIHN5c0NvbnRhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN5c0NvbnRhY3QpLCAmc3lzQ29udGFjdFNldCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c25hbWUoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKLQotICAgIGlmIChzdHJsZW4oY3B0cikgPj0gc2l6ZW9mKHN5c05hbWUpKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1ZiwgMTAyNCwKLSAgICAgICAgICAgICAgICAgInN5c25hbWUgdG9rZW4gdG9vIGxvbmcgKG11c3QgYmUgPCAlbHUpOlxuXHQlcyIsCi0gICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNpemVvZihzeXNOYW1lKSwgY3B0cik7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKHRva2VuLCAicHN5c25hbWUiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChzeXNOYW1lU2V0IDwgMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgaXMgYm9ndXMgKGFuZCBzaG91bGRuJ3QgaGFwcGVuIGFueXdheSkgLS0gdGhlIHN5c05hbWUKLSAgICAgICAgICAgICAqIGlzIGFscmVhZHkgY29uZmlndXJlZCByZWFkLW9ubHkuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSBzeXNOYW1lLjBcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3lzTmFtZVNldCsrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN5c05hbWVTZXQgPiAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBib2d1cyAoYW5kIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KSAtLSB3ZSBhbHJlYWR5IHJlYWQgYQotICAgICAgICAgICAgICogcGVyc2lzdGVudCB2YWx1ZSBvZiBzeXNOYW1lLCB3aGljaCB3ZSBzaG91bGQgaWdub3JlIGluIGZhdm91cgotICAgICAgICAgICAgICogb2YgdGhpcyBvbmUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSBzeXNOYW1lLjBcbiIpOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEZhbGwgdGhyb3VnaCBhbmQgY29weSBpbiB0aGlzIHZhbHVlLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgfQotICAgICAgICBzeXNOYW1lU2V0ID0gLTE7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChjcHRyLCAiXCJcIiIpID09IDApIHsKLSAgICAgICAgc3lzTmFtZVswXSA9ICdcMCc7Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oY3B0cikgPCBzaXplb2Yoc3lzTmFtZSkpIHsKLSAgICAgICAgc3RyY3B5KHN5c05hbWUsIGNwdHIpOwotICAgIH0KKyAgICBzeXN0ZW1fcGFyc2VfY29uZmlnX3N0cmluZyh0b2tlbiwgY3B0ciwgInN5c05hbWUiLCBzeXNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzeXNOYW1lKSwgJnN5c05hbWVTZXQpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNTZXJ2aWNlcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKICAgICBzeXNTZXJ2aWNlcyA9IGF0b2koY3B0cik7CiAgICAgc3lzU2VydmljZXNDb25maWdlZCA9IDE7CiB9CiAKLXZvaWQgc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNPYmplY3RJRChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKK3N0YXRpYyB2b2lkCitzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c09iamVjdElEKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgdG1wYnVmWzEwMjRdOwotCi0gICAgc3lzT2JqZWN0SURMZW5ndGggPSBNQVhfT0lEX0xFTjsKKyAgICBzaXplX3Qgc3lzT2JqZWN0SURMZW5ndGggPSBNQVhfT0lEX0xFTjsKICAgICBpZiAoIXJlYWRfb2JqaWQoY3B0ciwgc3lzT2JqZWN0SUQsICZzeXNPYmplY3RJRExlbmd0aCkpIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLAotICAgICAgICAgICAgICAgICBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgInN5c29iamVjdGlkIHRva2VuIG5vdCBhIHBhcnNhYmxlIE9JRDpcblx0JXMiLAotICAgICAgICAgICAgICAgICBjcHRyKTsKLSAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOwotICAgICAgICBtZW1jcHkoc3lzT2JqZWN0SUQsIHZlcnNpb25fc3lzb2lkLCB2ZXJzaW9uX3N5c29pZF9sZW4gKiBzaXplb2Yob2lkKSk7Ci0gICAgICAgIHN5c09iamVjdElETGVuZ3RoID0gdmVyc2lvbl9zeXNvaWRfbGVuOwotICAgIH0KKwluZXRzbm1wX2NvbmZpZ19lcnJvcigic3lzb2JqZWN0aWQgdG9rZW4gbm90IGEgcGFyc2FibGUgT0lEOlxuXHQlcyIsCisJCQkgICAgIGNwdHIpOworICAgICAgICBzeXNPYmplY3RJREJ5dGVMZW5ndGggPSB2ZXJzaW9uX3N5c29pZF9sZW4gICogc2l6ZW9mKG9pZCk7CisgICAgICAgIG1lbWNweShzeXNPYmplY3RJRCwgdmVyc2lvbl9zeXNvaWQsIHN5c09iamVjdElEQnl0ZUxlbmd0aCk7CisgICAgfSBlbHNlCisKKwkJc3lzT2JqZWN0SURCeXRlTGVuZ3RoID0gc3lzT2JqZWN0SURMZW5ndGggKiBzaXplb2Yob2lkKTsKIH0KIAogCkBAIC0yOTEsMjggKzE4Niw4IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCi0vKgotICogZGVmaW5lIHRoZSBzdHJ1Y3R1cmUgd2UncmUgZ29pbmcgdG8gYXNrIHRoZSBhZ2VudCB0byByZWdpc3RlciBvdXIKLSAqIGluZm9ybWF0aW9uIGF0IAotICovCi1zdHJ1Y3QgdmFyaWFibGUxIHN5c3RlbV92YXJpYWJsZXNbXSA9IHsKLSAgICB7VkVSU0lPTl9ERVNDUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9zeXN0ZW0sIDEsIHsxfX0sCi0gICAge1ZFUlNJT05JRCwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9zeXN0ZW0sIDEsIHsyfX0sCi0gICAge1VQVElNRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9zeXN0ZW0sIDEsIHszfX0sCi0gICAge1NZU0NPTlRBQ1QsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3N5c3RlbSwgMSwgezR9fSwKLSAgICB7U1lTVEVNTkFNRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfc3lzdGVtLCAxLCB7NX19LAotICAgIHtTWVNMT0NBVElPTiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfc3lzdGVtLCAxLCB7Nn19LAotICAgIHtTWVNTRVJWSUNFUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfc3lzdGVtLCAxLCB7N319LAotICAgIHtTWVNPUkxBU1RDSEFOR0UsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfc3lzdGVtLCAxLCB7OH19Ci19OwotLyoKLSAqIERlZmluZSB0aGUgT0lEIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbWliIHRyZWUgdGhhdCB3ZSdyZQotICogcmVnaXN0ZXJpbmcgdW5kZXJuZWF0aCAKLSAqLwotb2lkICAgICAgICAgICAgIHN5c3RlbV92YXJpYWJsZXNfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDEgfTsKIG9pZCAgICAgICAgICAgICBzeXN0ZW1fbW9kdWxlX29pZFtdID0geyBTTk1QX09JRF9TTk1QTU9EVUxFUywgMSB9OwotaW50ICAgICAgICAgICAgIHN5c3RlbV9tb2R1bGVfb2lkX2xlbiA9Ci0gICAgc2l6ZW9mKHN5c3RlbV9tb2R1bGVfb2lkKSAvIHNpemVvZihvaWQpOworaW50ICAgICAgICAgICAgIHN5c3RlbV9tb2R1bGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc3lzdGVtX21vZHVsZV9vaWQpOwogaW50ICAgICAgICAgICAgIHN5c3RlbV9tb2R1bGVfY291bnQgPSAwOwogCiBzdGF0aWMgaW50CkBAIC0zMzYsNiArMjExLDMwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2hhbmRsZV9zeXNTZXJ2aWNlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworI2lmIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTCisgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQgJiYgIXN5c1NlcnZpY2VzQ29uZmlnZWQpCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworI2VuZGlmCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9zeXNVcFRpbWUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fVElNRVRJQ0tTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpKTsKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKwogdm9pZAogaW5pdF9zeXN0ZW1fbWliKHZvaWQpCiB7CkBAIC0zOTksMzAgKzI5OCwxMzAgQEAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9HRVRIT1NUTkFNRSAqLwogCiAjaWYgKGRlZmluZWQgKFdJTjMyKSAmJiBkZWZpbmVkIChIQVZFX1dJTjMyX1BMQVRGT1JNX1NESykpIHx8IGRlZmluZWQgKG1pbmd3MzIpCi0gIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgLyogRGVmYXVsdCBzeXNDb250YWN0IGlzIHRoZSByZWdpc3RlcmVkIHdpbmRvd3MgdXNlciAqLwotICAgIGlmIChSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCAiU09GVFdBUkVcXE1pY3Jvc29mdFxcV2luZG93cyBOVFxcQ3VycmVudFZlcnNpb24iLCAwLCBLRVlfUVVFUllfVkFMVUUsICZoS2V5KSA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgY2hhciByZWdpc3RlcmVkT3duZXJbMjU2XSA9ICIiOwotICAgICAgIERXT1JEIHJlZ2lzdGVyZWRPd25lclN6ID0gMjU2OwotICAgICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaEtleSwgIlJlZ2lzdGVyZWRPd25lciIsIE5VTEwsIE5VTEwsIChMUEJZVEUpcmVnaXN0ZXJlZE93bmVyLCAmcmVnaXN0ZXJlZE93bmVyU3opID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICBzdHJjcHkoc3lzQ29udGFjdCwgcmVnaXN0ZXJlZE93bmVyKTsKLSAgICAgICB9Ci0gICAgICAgUmVnQ2xvc2VLZXkoaEtleSk7CisgICAgeworICAgICAgSEtFWSBoS2V5OworICAgICAgLyogRGVmYXVsdCBzeXNDb250YWN0IGlzIHRoZSByZWdpc3RlcmVkIHdpbmRvd3MgdXNlciAqLworICAgICAgaWYgKFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICJTT0ZUV0FSRVxcTWljcm9zb2Z0XFxXaW5kb3dzIE5UXFxDdXJyZW50VmVyc2lvbiIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIEtFWV9RVUVSWV9WQUxVRSwgJmhLZXkpID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICBjaGFyIHJlZ2lzdGVyZWRPd25lclsyNTZdID0gIiI7CisgICAgICAgICAgRFdPUkQgcmVnaXN0ZXJlZE93bmVyU3ogPSAyNTY7CisgICAgICAgICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChoS2V5LCAiUmVnaXN0ZXJlZE93bmVyIiwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUEJZVEUpcmVnaXN0ZXJlZE93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlZ2lzdGVyZWRPd25lclN6KSA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgIHN0cmNweShzeXNDb250YWN0LCByZWdpc3RlcmVkT3duZXIpOworICAgICAgICAgIH0KKyAgICAgICAgICBSZWdDbG9zZUtleShoS2V5KTsKKyAgICAgIH0KICAgICB9Ci0gIH0KICNlbmRpZgogCiAgICAgLyogZGVmYXVsdCBzeXNPYmplY3RJRCAqLwogICAgIG1lbWNweShzeXNPYmplY3RJRCwgdmVyc2lvbl9zeXNvaWQsIHZlcnNpb25fc3lzb2lkX2xlbiAqIHNpemVvZihvaWQpKTsKLSAgICBzeXNPYmplY3RJRExlbmd0aCA9IHZlcnNpb25fc3lzb2lkX2xlbjsKKyAgICBzeXNPYmplY3RJREJ5dGVMZW5ndGggPSB2ZXJzaW9uX3N5c29pZF9sZW4gKiBzaXplb2Yob2lkKTsKIAotICAgIC8qCi0gICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IHRvIGhhbmRsZSBvdXIgbWliIHRyZWUgCi0gICAgICovCi0gICAgUkVHSVNURVJfTUlCKCJtaWJJSS9zeXN0ZW0iLCBzeXN0ZW1fdmFyaWFibGVzLCB2YXJpYWJsZTEsCi0gICAgICAgICAgICAgICAgIHN5c3RlbV92YXJpYWJsZXNfb2lkKTsKLQorICAgIHsKKyAgICAgICAgY29uc3Qgb2lkIHN5c0Rlc2NyX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCAxIH07CisgICAgICAgIHN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyBzeXNEZXNjcl93aW5mbzsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNEZXNjciIsIE5VTEwsIHN5c0Rlc2NyX29pZCwgT0lEX0xFTkdUSChzeXNEZXNjcl9vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oJnN5c0Rlc2NyX3dpbmZvLCB2ZXJzaW9uX2Rlc2NyLCAwLAorCQkJCSAgICAgIEFTTl9PQ1RFVF9TVFIsIFdBVENIRVJfU0laRV9TVFJMRU4pKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBvaWQgc3lzT2JqZWN0SURfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDIgfTsKKyAgICAgICAgc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvIHN5c09iamVjdElEX3dpbmZvOworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c09iamVjdElEIiwgTlVMTCwKKyAgICAgICAgICAgICAgICBzeXNPYmplY3RJRF9vaWQsIE9JRF9MRU5HVEgoc3lzT2JqZWN0SURfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvNigKKwkJJnN5c09iamVjdElEX3dpbmZvLCBzeXNPYmplY3RJRCwgMCwgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICBXQVRDSEVSX01BWF9TSVpFIHwgV0FUQ0hFUl9TSVpFX0lTX1BUUiwKKyAgICAgICAgICAgICAgICBNQVhfT0lEX0xFTiwgJnN5c09iamVjdElEQnl0ZUxlbmd0aCkpOworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IG9pZCBzeXNVcFRpbWVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDMgfTsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzVXBUaW1lIiwgaGFuZGxlX3N5c1VwVGltZSwKKyAgICAgICAgICAgICAgICBzeXNVcFRpbWVfb2lkLCBPSURfTEVOR1RIKHN5c1VwVGltZV9vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3Qgb2lkIHN5c0NvbnRhY3Rfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDQgfTsKKyAgICAgICAgc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvIHN5c0NvbnRhY3Rfd2luZm87CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNDb250YWN0Iiwgc3lzQ29udGFjdF9vaWQsIE9JRF9MRU5HVEgoc3lzQ29udGFjdF9vaWQpLCAKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsICZzeXNDb250YWN0U2V0KSwKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgJnN5c0NvbnRhY3Rfd2luZm8sIHN5c0NvbnRhY3QsIFNZU19TVFJJTkdfTEVOIC0gMSwKKyAgICAgICAgICAgICAgICBBU05fT0NURVRfU1RSLCBXQVRDSEVSX01BWF9TSVpFIHwgV0FUQ0hFUl9TSVpFX1NUUkxFTikpOworI2Vsc2UgIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzQ29udGFjdCIsIHN5c0NvbnRhY3Rfb2lkLCBPSURfTEVOR1RIKHN5c0NvbnRhY3Rfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgJnN5c0NvbnRhY3RTZXQpLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAmc3lzQ29udGFjdF93aW5mbywgc3lzQ29udGFjdCwgU1lTX1NUUklOR19MRU4gLSAxLAorICAgICAgICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIFdBVENIRVJfTUFYX1NJWkUgfCBXQVRDSEVSX1NJWkVfU1RSTEVOKSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IG9pZCBzeXNOYW1lX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCA1IH07CisgICAgICAgIHN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyBzeXNOYW1lX3dpbmZvOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzTmFtZSIsIHN5c05hbWVfb2lkLCBPSURfTEVOR1RIKHN5c05hbWVfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsICZzeXNOYW1lU2V0KSwKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgJnN5c05hbWVfd2luZm8sIHN5c05hbWUsIFNZU19TVFJJTkdfTEVOIC0gMSwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICBXQVRDSEVSX01BWF9TSVpFIHwgV0FUQ0hFUl9TSVpFX1NUUkxFTikpOworI2Vsc2UgIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzTmFtZSIsIHN5c05hbWVfb2lkLCBPSURfTEVOR1RIKHN5c05hbWVfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgJnN5c05hbWVTZXQpLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAmc3lzTmFtZV93aW5mbywgc3lzTmFtZSwgU1lTX1NUUklOR19MRU4gLSAxLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgIFdBVENIRVJfTUFYX1NJWkUgfCBXQVRDSEVSX1NJWkVfU1RSTEVOKSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IG9pZCBzeXNMb2NhdGlvbl9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgNiB9OworICAgICAgICBzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gc3lzTG9jYXRpb25fd2luZm87CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNMb2NhdGlvbiIsIHN5c0xvY2F0aW9uX29pZCwKKyAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHN5c0xvY2F0aW9uX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCAmc3lzTG9jYXRpb25TZXQpLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKwkJJnN5c0xvY2F0aW9uX3dpbmZvLCBzeXNMb2NhdGlvbiwgU1lTX1NUUklOR19MRU4gLSAxLAorCQlBU05fT0NURVRfU1RSLCBXQVRDSEVSX01BWF9TSVpFIHwgV0FUQ0hFUl9TSVpFX1NUUkxFTikpOworI2Vsc2UgIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzTG9jYXRpb24iLCBzeXNMb2NhdGlvbl9vaWQsCisgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzeXNMb2NhdGlvbl9vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCAmc3lzTG9jYXRpb25TZXQpLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKwkJJnN5c0xvY2F0aW9uX3dpbmZvLCBzeXNMb2NhdGlvbiwgU1lTX1NUUklOR19MRU4gLSAxLAorCQlBU05fT0NURVRfU1RSLCBXQVRDSEVSX01BWF9TSVpFIHwgV0FUQ0hFUl9TSVpFX1NUUkxFTikpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBvaWQgc3lzU2VydmljZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDcgfTsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X3NjYWxhcigKKyAgICAgICAgICAgICJtaWJJSS9zeXNTZXJ2aWNlcyIsIHN5c1NlcnZpY2VzX29pZCwgT0lEX0xFTkdUSChzeXNTZXJ2aWNlc19vaWQpLAorICAgICAgICAgICAgJnN5c1NlcnZpY2VzLCBoYW5kbGVfc3lzU2VydmljZXMpOworICAgIH0KICAgICBpZiAoKytzeXN0ZW1fbW9kdWxlX2NvdW50ID09IDMpCiAgICAgICAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKHN5c3RlbV9tb2R1bGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE1JQiBtb2R1bGUgZm9yIFNOTVB2MiBlbnRpdGllcyIpOwpAQCAtNDU2LDE4NyArNDU1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0lEIik7CiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9zdG9yZSwgTlVMTCk7Ci0KIH0KIAotCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKLQkgKgotCSAqICBTeXN0ZW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCi0JICoKLQkgKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzeXNPUl9sYXN0Y2hhbmdlOwotI2VuZGlmCi0KLXVfY2hhciAgICAgICAgICoKLXZhcl9zeXN0ZW0oc3RydWN0IHZhcmlhYmxlICp2cCwKLSAgICAgICAgICAgb2lkICogbmFtZSwKLSAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKLSAgICBzdGF0aWMgdV9sb25nICAgdWxyZXQ7Ci0KLSAgICBpZiAoaGVhZGVyX2dlbmVyaWModnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCkgPT0KLSAgICAgICAgTUFUQ0hfRkFJTEVEKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBWRVJTSU9OX0RFU0NSOgotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbih2ZXJzaW9uX2Rlc2NyKTsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgdmVyc2lvbl9kZXNjcjsKLSAgICBjYXNlIFZFUlNJT05JRDoKLSAgICAgICAgKnZhcl9sZW4gPSBzeXNPYmplY3RJRExlbmd0aCAqIHNpemVvZihzeXNPYmplY3RJRFswXSk7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopc3lzT2JqZWN0SUQ7Ci0gICAgY2FzZSBVUFRJTUU6Ci0gICAgICAgIHVscmV0ID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7Ci0gICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAmIHVscmV0KTsKLSAgICBjYXNlIFNZU0NPTlRBQ1Q6Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN5c0NvbnRhY3QpOwotICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVTeXN0ZW07Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopIHN5c0NvbnRhY3Q7Ci0gICAgY2FzZSBTWVNURU1OQU1FOgotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzeXNOYW1lKTsKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlU3lzdGVtOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzeXNOYW1lOwotICAgIGNhc2UgU1lTTE9DQVRJT046Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN5c0xvY2F0aW9uKTsKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlU3lzdGVtOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzeXNMb2NhdGlvbjsKLSAgICBjYXNlIFNZU1NFUlZJQ0VTOgotI2lmIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTCi0gICAgICAgIGlmICghc3lzU2VydmljZXNDb25maWdlZCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCi0gICAgICAgIGxvbmdfcmV0dXJuID0gc3lzU2VydmljZXM7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0KLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotICAgIGNhc2UgU1lTT1JMQVNUQ0hBTkdFOgotICAgICAgICB1bHJldCA9IG5ldHNubXBfdGltZXZhbF91cHRpbWUoJnN5c09SX2xhc3RjaGFuZ2UpOwotICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgJiB1bHJldCk7Ci0jZW5kaWYKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfc3lzdGVtXG4iLAotICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotCi1pbnQKLXdyaXRlU3lzdGVtKGludCBhY3Rpb24sCi0gICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLAotICAgICAgICAgICAgdV9jaGFyIHZhcl92YWxfdHlwZSwKLSAgICAgICAgICAgIHNpemVfdCB2YXJfdmFsX2xlbiwKLSAgICAgICAgICAgIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCi17Ci0gICAgdV9jaGFyICAgICAgICAgKmNwOwotICAgIGNoYXIgICAgICAgICAgICpidWYgPSBOVUxMLCAqb2xkYnVmID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgY291bnQsICpzZXR2YXIgPSBOVUxMOwotCi0gICAgc3dpdGNoICgoY2hhcikgbmFtZVs3XSkgewotICAgIGNhc2UgVkVSU0lPTl9ERVNDUjoKLSAgICBjYXNlIFZFUlNJT05JRDoKLSAgICBjYXNlIFVQVElNRToKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkF0dGVtcHQgdG8gd3JpdGUgdG8gUi9PIE9JRFxuIik7Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKLSAgICBjYXNlIFNZU0NPTlRBQ1Q6Ci0gICAgICAgIGJ1ZiA9IHN5c0NvbnRhY3Q7Ci0gICAgICAgIG9sZGJ1ZiA9IG9sZHN5c0NvbnRhY3Q7Ci0gICAgICAgIHNldHZhciA9ICZzeXNDb250YWN0U2V0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNZU1RFTU5BTUU6Ci0gICAgICAgIGJ1ZiA9IHN5c05hbWU7Ci0gICAgICAgIG9sZGJ1ZiA9IG9sZHN5c05hbWU7Ci0gICAgICAgIHNldHZhciA9ICZzeXNOYW1lU2V0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNZU0xPQ0FUSU9OOgotICAgICAgICBidWYgPSBzeXNMb2NhdGlvbjsKLSAgICAgICAgb2xkYnVmID0gb2xkc3lzTG9jYXRpb247Ci0gICAgICAgIHNldHZhciA9ICZzeXNMb2NhdGlvblNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTWVNTRVJWSUNFUzoKLSAgICBjYXNlIFNZU09STEFTVENIQU5HRToKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkF0dGVtcHQgdG8gd3JpdGUgdG8gUi9PIE9JRFxuIik7Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOyAvKiA/Pz8gKi8KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGFjdGlvbikgewotICAgIGNhc2UgUkVTRVJWRTE6ICAgICAgICAgICAgIC8qIENoZWNrIHZhbHVlcyBmb3IgYWNjZXB0YWJpbGl0eSAqLwotICAgICAgICBpZiAodmFyX3ZhbF90eXBlICE9IEFTTl9PQ1RFVF9TVFIpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJub3Qgc3RyaW5nXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhcl92YWxfbGVuID4gc2l6ZW9mKHN5c0xvY2F0aW9uKSAtIDEpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJiYWQgbGVuZ3RoXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoY3AgPSB2YXJfdmFsLCBjb3VudCA9IDA7IGNvdW50IDwgKGludCkgdmFyX3ZhbF9sZW47Ci0gICAgICAgICAgICAgY291bnQrKywgY3ArKykgewotICAgICAgICAgICAgaWYgKCFpc3ByaW50KCpjcCkpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm90IHByaW50ICV4XG4iLCAqY3ApOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzZXR2YXIgIT0gTlVMTCAmJiAqc2V0dmFyIDwgMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoZSBvYmplY3QgaXMgc2V0IGluIGEgcmVhZC1vbmx5IGNvbmZpZ3VyYXRpb24gZmlsZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJFU0VSVkUyOiAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgYW5kIHNpbWlsYXIgcmVzb3VyY2VzICovCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogVXNpbmcgc3RhdGljIHN0cmluZ3MsIHNvIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSAKLSAgICAgICAgICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQ1RJT046ICAgICAgICAgICAgICAgLyogUGVyZm9ybSB0aGUgU0VUIGFjdGlvbiAoaWYgcmV2ZXJzaWJsZSkgKi8KLQotICAgICAgICAvKgotICAgICAgICAgKiBTYXZlIHRoZSBvbGQgdmFsdWUsIGluIGNhc2Ugb2YgVU5ETyAKLSAgICAgICAgICovCi0gICAgICAgIHN0cmNweShvbGRidWYsIGJ1Zik7Ci0gICAgICAgIG1lbWNweShidWYsIHZhcl92YWwsIHZhcl92YWxfbGVuKTsKLSAgICAgICAgYnVmW3Zhcl92YWxfbGVuXSA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBVTkRPOiAgICAgICAgICAgICAgICAgLyogUmV2ZXJzZSB0aGUgU0VUIGFjdGlvbiBhbmQgZnJlZSByZXNvdXJjZXMgKi8KLQotICAgICAgICBzdHJjcHkoYnVmLCBvbGRidWYpOwotICAgICAgICBvbGRidWZbMF0gPSAwOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ09NTUlUOgotICAgICAgICBpZiAoc2V0dmFyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpzZXR2YXIgPSAxOwotICAgICAgICB9Ci0gICAgICAgIHNubXBfc2F2ZV9wZXJzaXN0ZW50KG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKLSAgICAgICAgKHZvaWQpIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19MSUJSQVJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsIE5VTEwpOwotICAgICAgICBzbm1wX2NsZWFuX3BlcnNpc3RlbnQobmV0c25tcF9kc19nZXRfc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKSk7Ci0KLSAgICBjYXNlIEZSRUU6ICAgICAgICAgICAgICAgICAvKiBGcmVlIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkICovCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogTm8gcmVzb3VyY2VzIGhhdmUgYmVlbiBhbGxvY2F0ZWQsIGJ1dCAiZW1wdHkiIHRoZSAnb2xkYnVmJyAKLSAgICAgICAgICovCi0gICAgICAgIG9sZGJ1ZlswXSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIHdyaXRlU3lzdGVtICovCi0KICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCiAJICogIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucyAtIE5vbmUKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaAppbmRleCBlYzMzMTJkLi5kZDE2ZjA4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oCkBAIC0xLDMxICsxLDE2IEBACi0vKgotICogIFN5c3RlbSBNSUIgZ3JvdXAgaW50ZXJmYWNlIC0gc3lzdGVtLmgKLSAqCi0gKi8KICNpZm5kZWYgX01JQkdST1VQX1NZU1RFTV9NSUJfSAogI2RlZmluZSBfTUlCR1JPVVBfU1lTVEVNX01JQl9ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCiAKLSAgICAgZXh0ZXJuIGNoYXIgICAgIHZlcnNpb25fZGVzY3JbXTsKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MgbWliSUkvdXBkYXRlcykKIAotICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zeXN0ZW1fbWliKHZvaWQpOwotICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfc3lzdGVtOwordm9pZCBpbml0X3N5c3RlbV9taWIodm9pZCk7CiAKLS8qCi0gKiBjb25maWcgZmlsZSBwYXJzaW5nIHJvdXRpbmVzIAotICovCi0gICAgIHZvaWQgICAgICAgICAgICBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c2xvYyhjb25zdCBjaGFyICosIGNoYXIgKik7Ci0gICAgIHZvaWQgICAgICAgICAgICBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c2Nvbihjb25zdCBjaGFyICosIGNoYXIgKik7Ci0gICAgIHZvaWQgICAgICAgICAgICBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c25hbWUoY29uc3QgY2hhciAqLCBjaGFyICopOwotCi0jZGVmaW5lCVZFUlNJT05fREVTQ1IJCTEKLSNkZWZpbmUJVkVSU0lPTklECQkyCi0jZGVmaW5lCVVQVElNRQkJCTMKLSNkZWZpbmUgU1lTQ09OVEFDVAkJNAotI2RlZmluZSBTWVNURU1OQU1FCQk1Ci0jZGVmaW5lIFNZU0xPQ0FUSU9OCQk2Ci0jZGVmaW5lIFNZU1NFUlZJQ0VTCQk3Ci0jZGVmaW5lIFNZU09STEFTVENIQU5HRQkJOAorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfU1lTVEVNX01JQl9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS90Y3AuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3RjcC5jCmluZGV4IGJjMmUyZDAuLjNjNzlmYWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3RjcC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3RjcC5jCkBAIC01LDYgKzUsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgIm1pYklJX2NvbW1vbi5oIgogCiAjaWYgSEFWRV9TVERMSUJfSApAQCAtNDksMTEgKzUwLDExIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIgogI2luY2x1ZGUgInRjcC5oIgogI2luY2x1ZGUgInRjcFRhYmxlLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgogCiAjaWZuZGVmIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUCiAjZGVmaW5lIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUCTUKQEAgLTYyLDcgKzYzLDEwIEBACiAjZGVmaW5lIFRDUF9TVEFUU19DQUNIRV9USU1FT1VUCU1JQl9TVEFUU19DQUNIRV9USU1FT1VUCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9MSUJQRVJGU1RBVF9IKSAmJiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikpICYmICFkZWZpbmVkKEZJUlNUX1BST1RPQ09MKQorI2lmIGRlZmluZWQoSEFWRV9MSUJQRVJGU1RBVF9IKSAmJiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KSkgJiYgIWRlZmluZWQoRklSU1RfUFJPVE9DT0wpCisjaWZkZWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAjaWZkZWYgRklSU1RfUFJPVE9DT0wKIHBlcmZzdGF0X3Byb3RvY29sX3QgcHNfcHJvdG87CkBAIC04OCw3ICs5Miw5IEBACiBpbnQgIGh6ID0gMTAwMDsKICNlbmRpZgogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQX0NPVU5UX0NPTk5FQ1RJT05TCiBleHRlcm4gaW50IFRDUF9Db3VudF9Db25uZWN0aW9ucyggdm9pZCApOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQX0NPVU5UX0NPTk5FQ1RJT05TICovCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgogCSAqICBJbml0aWFsaXNhdGlvbiAmIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKQEAgLTE3Niw3ICsxODIsNyBAQAogI3VuZGVmIFRDUF9OU1RBVFMKICNlbmRpZgogCi0jaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKKyNpZmRlZiBIQVZFX0lQSExQQVBJX0gKICNpbmNsdWRlIDxpcGhscGFwaS5oPgogI2RlZmluZSBUQ1BfU1RBVF9TVFJVQ1RVUkUgICAgIE1JQl9UQ1BTVEFUUwogI2VuZGlmCkBAIC0zNjcsMTEgKzM3MywxNCBAQAogICAgICAgICByZXRfdmFsdWUgPSB0Y3BzdGF0LnRjcHNfZHJvcHM7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVENQQ1VSUkVTVEFCOgotI2lmZGVmIFVTSU5HX01JQklJX1RDUFRBQkxFX01PRFVMRQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORworICAgICAgICBuZXRzbm1wX2ZlYXR1cmVfd2FudCh0Y3BfY291bnRfY29ubmVjdGlvbnMpCisjZW5kaWYKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BfQ09VTlRfQ09OTkVDVElPTlMKICAgICAgICAgcmV0X3ZhbHVlID0gVENQX0NvdW50X0Nvbm5lY3Rpb25zKCk7CiAjZWxzZQogICAgICAgICByZXRfdmFsdWUgPSAwOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BfQ09VTlRfQ09OTkVDVElPTlMgKi8KICAgICAgICAgdHlwZSA9IEFTTl9HQVVHRTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUQ1BJTlNFR1M6CkBAIC0zODksNyArMzk4LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUQ1BJTkVSUlM6CiAgICAgICAgIHJldF92YWx1ZSA9IHRjcHN0YXQudGNwc19yY3ZiYWRzdW0gKyB0Y3BzdGF0LnRjcHNfcmN2YmFkb2ZmCi0jaWZkZWYgU1RSVUNUX1RDUFNUQVRfSEFTX1RDUFNfUkNWTUVNRFJPUAorI2lmZGVmIEhBVkVfU1RSVUNUX1RDUFNUQVRfVENQU19SQ1ZNRU1EUk9QCiAgICAgICAgICAgICArIHRjcHN0YXQudGNwc19yY3ZtZW1kcm9wCiAjZW5kaWYKICAgICAgICAgICAgICsgdGNwc3RhdC50Y3BzX3JjdnNob3J0OwpAQCAtNTQ2LDYgKzU1NSw3IEBACiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgpAQCAtNTU1LDYgKzU2NSw3IEBACiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvdGNwOiBVbnN1cHBvcnRlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL3RjcDogVW5yZWNvZ25pc2VkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3RjcC5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmgKaW5kZXggOTI2ZGY0OS4uMDQ5ZGRkMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmgKQEAgLTYsNyArNiw3IEBACiAjZGVmaW5lIF9NSUJHUk9VUF9UQ1BfSAogCiAKLWNvbmZpZ19yZXF1aXJlKG1pYklJL3RjcFRhYmxlIHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZShtaWJJSS90Y3BUYWJsZSkKIAogY29uZmlnX2FyY2hfcmVxdWlyZShzb2xhcmlzMiwgICAgICAgIGtlcm5lbF9zdW5vczUpCiBjb25maWdfYXJjaF9yZXF1aXJlKGxpbnV4LCAgICAgbWliSUkva2VybmVsX2xpbnV4KQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMKaW5kZXggMmIxYzJjNi4uMDNjODVlNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSAibWliSUlfY29tbW9uLmgiCiAKICNpZiBIQVZFX05FVElORVRfVENQX0gKQEAgLTI5LDYgKzMwLDExIEBACiAjaWYgSEFWRV9ORVRJTkVUX1RDUF9WQVJfSAogI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgogI2VuZGlmCisjaWYgSEFWRV9ORVRMSU5LX05FVExJTktfSAorI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldGxpbmsvbXNnLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldF9kaWFnLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTM2LDcgKzQyLDEwIEBACiAKICNpbmNsdWRlICJ0Y3AuaCIKICNpbmNsdWRlICJ0Y3BUYWJsZS5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcHRhYmxlX2FsbCwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BfY291bnRfY29ubmVjdGlvbnMsIHRjcHRhYmxlX2FsbCkKIAogI2lmZGVmIGhwdXgxMQogI2RlZmluZQlUQ1BUQUJMRV9FTlRSWV9UWVBFCW1pYl90Y3BDb25uRW50IApAQCAtNjMsNyArNzIsNyBAQAogI2RlZmluZQlUQ1BUQUJMRV9JU19MSU5LRURfTElTVAogI2Vsc2UKIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCisjaWZkZWYgSEFWRV9JUEhMUEFQSV9ICiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KICNkZWZpbmUJVENQVEFCTEVfRU5UUllfVFlQRQlNSUJfVENQUk9XCiAjZGVmaW5lCVRDUFRBQkxFX1NUQVRFCQlkd1N0YXRlIApAQCAtOTEsNiArMTAwLDcgQEAKICAgICBpbnQgICAgICAgICAgICAgc3RhdGU7CiAgICAgbmV0c25tcF9pbnBjYiAgKmlucF9uZXh0OwogfTsKKyN1bmRlZiBJTlBfTkVYVF9TWU1CT0wKICNkZWZpbmUgSU5QX05FWFRfU1lNQk9MCQlpbnBfbmV4dAogI2RlZmluZQlUQ1BUQUJMRV9FTlRSWV9UWVBFCW5ldHNubXBfaW5wY2IgCiAjZGVmaW5lCVRDUFRBQkxFX1NUQVRFCQlzdGF0ZSAKQEAgLTEyOSwxNSArMTM5LDE1IEBACiAjZGVmaW5lIFRDUF9QT1JUX1RPX0hPU1RfT1JERVIoeCkgbnRvaHMoeCkKICNlbmRpZgogCi1vaWQgICAgICAgICAgICAgdGNwVGFibGVfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDYsIDEzIH07Ci0KIHZvaWQKIGluaXRfdGNwVGFibGUodm9pZCkKIHsKKyAgICBjb25zdCBvaWQgdGNwVGFibGVfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDYsIDEzIH07CisKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAgICAgICAgICAgKmlpbmZvOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZ2luZm87Ci0gICAgaW50IHJjOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjOwogCiAgICAgREVCVUdNU0dUTCgoIm1pYklJL3RjcFRhYmxlIiwgIkluaXRpYWxpc2luZyBUQ1AgVGFibGVcbiIpKTsKICAgICAvKgpAQCAtMTc3LDcgKzE4Nyw3IEBACiAgICAgICAgICAgICB0Y3BUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgdGNwVGFibGVfb2lkLCBPSURfTEVOR1RIKHRjcFRhYmxlX29pZCksCiAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCi0gICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKHJlZ2luZm8sIGlpbmZvKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKHJlZ2luZm8sIGlpbmZvKTsKICAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQogICAgICAgICByZXR1cm47CiAKQEAgLTI2OCwxMiArMjc4LDE0IEBACiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKICAgICBjYXNlIE1PREVfU0VUX1VORE86CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL3RjcFRhYmxlOiBVbnN1cHBvcnRlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjg2LDExICsyOTgsMTMgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUF9DT1VOVF9DT05ORUNUSU9OUwogaW50CiBUQ1BfQ291bnRfQ29ubmVjdGlvbnMoIHZvaWQgKSB7CiAgICAgdGNwVGFibGVfbG9hZChOVUxMLCBOVUxMKTsKICAgICByZXR1cm4gdGNwX2VzdGFiOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQX0NPVU5UX0NPTk5FQ1RJT05TICovCiAKIAkvKgogCSAqIFR3byBmb3JtcyBvZiBpdGVyYXRpb24gaG9vayByb3V0aW5lczoKQEAgLTQwNCw3ICs0MTgsNyBAQAogICAgICAqIFhYWCAtIEhvdyBjYW4gd2UgdGVsbCBpZiB0aGUgY2FjaGUgaXMgdmFsaWQ/CiAgICAgICogICAgICAgTm8gYWNjZXNzIHRvICdyZXFpbmZvJwogICAgICAqLwotICAgIGlmICh0Y3BfaGVhZCA9PSAwKQorICAgIGlmICh0Y3BfaGVhZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCkBAIC01NDcsNiArNTYxLDE0NCBAQAogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBocHV4MTEgKi8KIAogI2lmZGVmIGxpbnV4CisKKy8qICBzZWUgPG5ldGluZXQvdGNwLmg+ICovCisjZGVmaW5lIFRDUF9BTEwgKCgxIDw8IChUQ1BfQ0xPU0lORyArIDEpKSAtIDEpCisKK2NvbnN0IHN0YXRpYyBpbnQgbGludXhfc3RhdGVzWzEyXSA9IHsgMSwgNSwgMywgNCwgNiwgNywgMTEsIDEsIDgsIDksIDIsIDEwIH07CisKKyNpZiBIQVZFX05FVExJTktfTkVUTElOS19ICisKKyNpZiAhZGVmaW5lZChIQVZFX0xJQk5MMykKKy8qIGxpYm5sMyBBUEkgaW1wbGVtZW50ZWQgb24gdG9wIG9mIHRoZSBsaWJubDEgQVBJICovCisKKyNkZWZpbmUgbmxfc29jayBubF9oYW5kbGUKKworc3RhdGljIGNvbnN0IGNoYXIgKm5sX2dldGVycm9yX2NvbXBhdChpbnQgZSkKK3sKKyAgICByZXR1cm4gbmxfZ2V0ZXJyb3IoKTsKK30KKworI2RlZmluZSBubF9nZXRlcnJvcihlKSBubF9nZXRlcnJvcl9jb21wYXQoZSkKKworc3RhdGljIHN0cnVjdCBubF9oYW5kbGUgKm5sX3NvY2tldF9hbGxvYyh2b2lkKQoreworICAgIHJldHVybiBubF9oYW5kbGVfYWxsb2MoKTsKK30KKworc3RhdGljIHZvaWQgbmxfc29ja2V0X2ZyZWUoc3RydWN0IG5sX2hhbmRsZSAqbnMpCit7CisgICAgbmxfaGFuZGxlX2Rlc3Ryb3kobnMpOworfQorI2VuZGlmIC8qIEhBVkVfTElCTkwzICovCisKK3N0YXRpYyBpbnQKK3RjcFRhYmxlX2xvYWRfbmV0bGluayh2b2lkKQoreworCS8qIFRPRE86IHBlcmhhcHMgdXNlIHBlcm1hbmVudCBubCBzb2NrZXQgPyAqLworCXN0cnVjdCBubF9zb2NrICpubCA9IG5sX3NvY2tldF9hbGxvYygpOworCXN0cnVjdCBpbmV0X2RpYWdfcmVxIHJlcSA9IHsKKwkJLmlkaWFnX2ZhbWlseSA9IEFGX0lORVQsCisJCS5pZGlhZ19zdGF0ZXMgPSBUQ1BfQUxMLAorCX07CisKKwlzdHJ1Y3QgbmxfbXNnICpubTsKKworCXN0cnVjdCBzb2NrYWRkcl9ubCBwZWVyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisJaW50IHJ1bm5pbmcgPSAxLCBsZW4sIGVycjsKKworCWlmIChubCA9PSBOVUxMKSB7CisJCURFQlVHTVNHVEwoKCJtaWJJSS90Y3BUYWJsZSIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbmV0bGluayBoYW5kbGVcbiIpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgInNubXBkOiBGYWlsZWQgdG8gYWxsb2NhdGUgbmV0bGluayBoYW5kbGVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZXJyID0gbmxfY29ubmVjdChubCwgTkVUTElOS19JTkVUX0RJQUcpOworCWlmIChlcnIgPCAwKSB7CisJCURFQlVHTVNHVEwoKCJtaWJJSS90Y3BUYWJsZSIsICJGYWlsZWQgdG8gY29ubmVjdCB0byBuZXRsaW5rOiAlc1xuIiwgbmxfZ2V0ZXJyb3IoZXJyKSkpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAic25tcGQ6IENvdWxkbid0IGNvbm5lY3QgdG8gbmV0bGluazogJXNcbiIsIG5sX2dldGVycm9yKGVycikpOworCQlubF9zb2NrZXRfZnJlZShubCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlubSA9IG5sbXNnX2FsbG9jX3NpbXBsZShUQ1BESUFHX0dFVFNPQ0ssIE5MTV9GX1JPT1R8TkxNX0ZfTUFUQ0h8TkxNX0ZfUkVRVUVTVCk7CisJbmxtc2dfYXBwZW5kKG5tLCAmcmVxLCBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19yZXEpLCAwKTsKKworCWVyciA9IG5sX3NlbmRfYXV0b19jb21wbGV0ZShubCwgbm0pOworCWlmIChlcnIgPCAwKSB7CisJCURFQlVHTVNHVEwoKCJtaWJJSS90Y3BUYWJsZSIsICJubF9zZW5kX2F1dG9jb21wbGV0ZSgpOiAlc1xuIiwgbmxfZ2V0ZXJyb3IoZXJyKSkpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAic25tcGQ6IG5sX3NlbmRfYXV0b2NvbXBsZXRlKCk6ICVzXG4iLCBubF9nZXRlcnJvcihlcnIpKTsKKwkJbmxfc29ja2V0X2ZyZWUobmwpOworCQlyZXR1cm4gLTE7CisJfQorCW5sbXNnX2ZyZWUobm0pOworCisJd2hpbGUgKHJ1bm5pbmcpIHsKKwkJc3RydWN0IG5sbXNnaGRyICpoOworCQlpZiAoKGxlbiA9IG5sX3JlY3YobmwsICZwZWVyLCAmYnVmLCBOVUxMKSkgPD0gMCkgeworCQkJREVCVUdNU0dUTCgoIm1pYklJL3RjcFRhYmxlIiwgIm5sX3JlY3YoKTogJXNcbiIsIG5sX2dldGVycm9yKGxlbikpKTsKKwkJCXNubXBfbG9nKExPR19FUlIsICJzbm1wZDogbmxfcmVjdigpOiAlc1xuIiwgbmxfZ2V0ZXJyb3IobGVuKSk7CisJCQlubF9zb2NrZXRfZnJlZShubCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQloID0gKHN0cnVjdCBubG1zZ2hkciopYnVmOworCisJCXdoaWxlIChubG1zZ19vayhoLCBsZW4pKSB7CisJCQlzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqciA9IG5sbXNnX2RhdGEoaCk7CisJCQlzdHJ1Y3QgaW5wY2IgICAgcGNiLCAqbm5ldzsKKworCQkJaWYgKGgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkgeworCQkJCXJ1bm5pbmcgPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCQlyID0gbmxtc2dfZGF0YShoKTsKKworCQkJaWYgKHItPmlkaWFnX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCQkJaCA9IG5sbXNnX25leHQoaCwgJmxlbik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCW1lbWNweSgmcGNiLmlucF9sYWRkci5zX2FkZHIsIHItPmlkLmlkaWFnX3NyYywgci0+aWRpYWdfZmFtaWx5ID09IEFGX0lORVQgPyA0IDogNik7CisJCQltZW1jcHkoJnBjYi5pbnBfZmFkZHIuc19hZGRyLCByLT5pZC5pZGlhZ19kc3QsIHItPmlkaWFnX2ZhbWlseSA9PSBBRl9JTkVUID8gNCA6IDYpOworCisJCQlwY2IuaW5wX2xwb3J0ID0gci0+aWQuaWRpYWdfc3BvcnQ7CisJCQlwY2IuaW5wX2Zwb3J0ID0gci0+aWQuaWRpYWdfZHBvcnQ7CisKKwkJCXBjYi5pbnBfc3RhdGUgPSAoci0+aWRpYWdfc3RhdGUgJiAweGYpIDwgMTIgPyBsaW51eF9zdGF0ZXNbci0+aWRpYWdfc3RhdGUgJiAweGZdIDogMjsKKwkJCWlmIChwY2IuaW5wX3N0YXRlID09IDUgLyogZXN0YWJsaXNoZWQgKi8gfHwKKwkJCQlwY2IuaW5wX3N0YXRlID09IDggLyogIGNsb3NlV2FpdCAgKi8gKQorCQkJCXRjcF9lc3RhYisrOworCQkJcGNiLnVpZCA9IHItPmlkaWFnX3VpZDsKKworCQkJbm5ldyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3RydWN0IGlucGNiKTsKKwkJCWlmIChubmV3ID09IE5VTEwpIHsKKwkJCQlydW5uaW5nID0gMDsKKwkJCQkvKiAgWFhYIHJlcG9ydCBtYWxsb2MgZXJyb3IgYW5kIHJldHVybiAtMT8gKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCW1lbWNweShubmV3LCAmcGNiLCBzaXplb2Yoc3RydWN0IGlucGNiKSk7CisJCQlubmV3LT5pbnBfbmV4dCA9IHRjcF9oZWFkOworCQkJdGNwX2hlYWQgICAgICAgPSBubmV3OworCisJCQloID0gbmxtc2dfbmV4dChoLCAmbGVuKTsKKwkJfQorCQlmcmVlKGJ1Zik7CisJfQorCisJbmxfc29ja2V0X2ZyZWUobmwpOworCisJaWYgKHRjcF9oZWFkKSB7CisJCURFQlVHTVNHVEwoKCJtaWJJSS90Y3BUYWJsZSIsICJMb2FkZWQgVENQIFRhYmxlIHVzaW5nIG5ldGxpbmtcbiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCURFQlVHTVNHVEwoKCJtaWJJSS90Y3BUYWJsZSIsICJGYWlsZWQgdG8gbG9hZCBUQ1AgVGFibGUgKG5ldGxpbmspXG4iKSk7CisJcmV0dXJuIC0xOworfQorI2VuZGlmCisKIGludAogdGNwVGFibGVfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljKQogewpAQCAtNTU1LDkgKzcwNywxNSBAQAogCiAgICAgdGNwVGFibGVfZnJlZShjYWNoZSwgTlVMTCk7CiAKKyNpZiBIQVZFX05FVExJTktfTkVUTElOS19ICisJaWYgKHRjcFRhYmxlX2xvYWRfbmV0bGluaygpID09IDApIHsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisKICAgICBpZiAoIShpbiA9IGZvcGVuKCIvcHJvYy9uZXQvdGNwIiwgInIiKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL3RjcFRhYmxlIiwgIkZhaWxlZCB0byBsb2FkIFRDUCBUYWJsZSAobGludXgxKVxuIikpOwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic25tcGQ6IGNhbm5vdCBvcGVuIC9wcm9jL25ldC90Y3AgLi4uXG4iKTsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAic25tcGQ6IGNhbm5vdCBvcGVuIC9wcm9jL25ldC90Y3AgLi4uXG4iKSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTU2OCw5ICs3MjYsOCBAQAogICAgICAqLwogICAgIHdoaWxlIChsaW5lID09IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CiAgICAgICAgIHN0cnVjdCBpbnBjYiAgICBwY2IsICpubmV3OwotICAgICAgICBzdGF0aWMgaW50ICAgICAgbGludXhfc3RhdGVzWzEyXSA9Ci0gICAgICAgICAgICB7IDEsIDUsIDMsIDQsIDYsIDcsIDExLCAxLCA4LCA5LCAyLCAxMCB9OwotICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdGUsIGxwLCBmcCwgdWlkOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgbHAsIGZwOworICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdGUsIHVpZDsKIAogICAgICAgICBpZiAoNiAhPSBzc2NhbmYobGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICIlKmQ6ICV4OiV4ICV4OiV4ICV4ICUqWDolKlggJSpYOiUqWCAlKlggJWQiLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmgKaW5kZXggYTVhNmY3Ni4uNTVmZTk3YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5oCkBAIC02LDcgKzYsNiBAQAogI2RlZmluZSBfTUlCR1JPVVBfVENQVEFCTEVfSAogCiBjb25maWdfYXJjaF9yZXF1aXJlKHNvbGFyaXMyLCBrZXJuZWxfc3Vub3M1KQotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKICNpZiAhZGVmaW5lZChORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMpCiBjb25maWdfcmVxdWlyZShtaWJJSS9pcCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS91ZHAuYwppbmRleCBlMTVhMmRlLi4xZGRjYmM1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS91ZHAuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS91ZHAuYwpAQCAtMTYsMTUgKzE2LDE1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIgogCiAjaWZkZWYgbGludXgKICNpbmNsdWRlICJ0Y3AuaCIKICNlbmRpZgogI2luY2x1ZGUgInVkcC5oIgogI2luY2x1ZGUgInVkcFRhYmxlLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgogCiAjaWZkZWYgTkVUU05NUF9DQU5fVVNFX1NZU0NUTAogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KQEAgLTM3LDcgKzM3LDEwIEBACiAjZGVmaW5lIFVEUF9TVEFUU19DQUNIRV9USU1FT1VUCU1JQl9TVEFUU19DQUNIRV9USU1FT1VUCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9MSUJQRVJGU1RBVF9IKSAmJiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikpICYmICFkZWZpbmVkKEZJUlNUX1BST1RPQ09MKQorI2lmIGRlZmluZWQoSEFWRV9MSUJQRVJGU1RBVF9IKSAmJiAoZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KSkgJiYgIWRlZmluZWQoRklSU1RfUFJPVE9DT0wpCisjaWZkZWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAjaWZkZWYgRklSU1RfUFJPVE9DT0wKIHBlcmZzdGF0X3Byb3RvY29sX3QgcHNfcHJvdG87CkBAIC0xMzgsNyArMTQxLDcgQEAKICN1bmRlZiBVRFBfTlNUQVRTCiAjZW5kaWYKIAotI2lmZGVmIFdJTjMyCisjaWZkZWYgSEFWRV9JUEhMUEFQSV9ICiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KICNkZWZpbmUgVURQX1NUQVRfU1RSVUNUVVJFIE1JQl9VRFBTVEFUUwogI2VuZGlmCkBAIC0yMzUsNyArMjM4LDcgQEAKICNkZWZpbmUgdWRwc3RhdCAgICAgICAgICB1ZHBzdGF0LnVkcHN0YXQKICNlbmRpZgogICAgIGNhc2UgVURQSU5EQVRBR1JBTVM6Ci0jaWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfSVBBQ0tFVFMKKyNpZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfSVBBQ0tFVFMKICAgICAgICAgcmV0X3ZhbHVlID0gdWRwc3RhdC51ZHBzX2lwYWNrZXRzOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC0yNDQsNyArMjQ3LDcgQEAKICNlbmRpZgogCiAgICAgY2FzZSBVRFBOT1BPUlRTOgotI2lmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVAorI2lmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlQKICAgICAgICAgcmV0X3ZhbHVlID0gdWRwc3RhdC51ZHBzX25vcG9ydDsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtMjUzLDcgKzI1Niw3IEBACiAjZW5kaWYKIAogICAgIGNhc2UgVURQT1VUREFUQUdSQU1TOgotI2lmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX09QQUNLRVRTCisjaWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX09QQUNLRVRTCiAgICAgICAgIHJldF92YWx1ZSA9IHVkcHN0YXQudWRwc19vcGFja2V0czsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtMjYzLDEwICsyNjYsMTAgQEAKIAogICAgIGNhc2UgVURQSU5FUlJPUlM6CiAgICAgICAgIHJldF92YWx1ZSA9IHVkcHN0YXQudWRwc19oZHJvcHMgKyB1ZHBzdGF0LnVkcHNfYmFkc3VtICsKLSNpZmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19ESVNDQVJECisjaWZkZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0RJU0NBUkQKICAgICAgICAgICAgIHVkcHN0YXQudWRwc19kaXNjYXJkICsKICNlbmRpZgotI2lmZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0ZVTExTT0NLCisjaWZkZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0ZVTExTT0NLCiAgICAgICAgICAgICB1ZHBzdGF0LnVkcHNfZnVsbHNvY2sgKwogI2VuZGlmCiAgICAgICAgICAgICB1ZHBzdGF0LnVkcHNfYmFkbGVuOwpAQCAtMzI2LDYgKzMyOSw3IEBACiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgpAQCAtMzM1LDYgKzMzOSw3IEBACiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvdWRwOiBVbnN1cHBvcnRlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL3VkcDogVW5yZWNvZ25pc2VkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3VkcC5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmgKaW5kZXggMDgxNmYwMS4uOWQ0NjcxYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmgKQEAgLTYsNyArNiw3IEBACiAjZGVmaW5lIF9NSUJHUk9VUF9VRFBfSAogCiAKLWNvbmZpZ19yZXF1aXJlKG1pYklJL3VkcFRhYmxlIHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZShtaWJJSS91ZHBUYWJsZSkKIAogY29uZmlnX2FyY2hfcmVxdWlyZShzb2xhcmlzMiwgICAgICAgIGtlcm5lbF9zdW5vczUpCiBjb25maWdfYXJjaF9yZXF1aXJlKGxpbnV4LCAgICAgbWliSUkva2VybmVsX2xpbnV4KQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMKaW5kZXggNTdlOTY3Yy4uMmM4ODc0OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jCkBAIC0zMyw3ICszMyw2IEBACiAjZW5kaWYKICNpbmNsdWRlICJ1ZHAuaCIKICNpbmNsdWRlICJ1ZHBUYWJsZS5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKIAogI2lmZGVmIGhwdXgxMQogI2RlZmluZQlVRFBUQUJMRV9FTlRSWV9UWVBFCW1pYl91ZHBMc25FbnQgCkBAIC01NCw3ICs1Myw3IEBACiAjZGVmaW5lCVVEUFRBQkxFX0lTX0xJTktFRF9MSVNUCiAjZWxzZQogCi0jaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKKyNpZmRlZiBIQVZFX0lQSExQQVBJX0gKICNpbmNsdWRlIDxpcGhscGFwaS5oPgogI2RlZmluZQlVRFBUQUJMRV9FTlRSWV9UWVBFCU1JQl9VRFBST1cJCS8qID8/PyAqLwogI2RlZmluZQlVRFBUQUJMRV9MT0NBTEFERFJFU1MJZHdMb2NhbEFkZHIKQEAgLTEzMCw3ICsxMjksNyBAQAogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICAgICAgICAgICAqaWluZm87CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbzsKLSAgICBpbnQgcmM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmM7CiAKICAgICBERUJVR01TR1RMKCgibWliSUkvdWRwVGFibGUiLCAiSW5pdGlhbGlzaW5nIFVEUCBUYWJsZVxuIikpOwogICAgIC8qCkBAIC0xNTEsNiArMTUwLDcgQEAKICAgICAgKi8KICAgICBpaW5mbyAgICAgID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2l0ZXJhdG9yX2luZm8pOwogICAgIGlmICghaWluZm8pIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlpbmZvLT5nZXRfZmlyc3RfZGF0YV9wb2ludCA9IHVkcFRhYmxlX2ZpcnN0X2VudHJ5OwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAgICAgICAgICB1ZHBUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgdWRwVGFibGVfb2lkLCBPSURfTEVOR1RIKHVkcFRhYmxlX29pZCksCiAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCi0gICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKHJlZ2luZm8sIGlpbmZvKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKHJlZ2luZm8sIGlpbmZvKTsKICAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzOSwxMiArMjM5LDE0IEBACiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKICAgICBjYXNlIE1PREVfU0VUX1VORE86CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL3VkcFRhYmxlOiBVbnN1cHBvcnRlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzQ5LDcgKzM1MSw3IEBACiAgICAgICogWFhYIC0gSG93IGNhbiB3ZSB0ZWxsIGlmIHRoZSBjYWNoZSBpcyB2YWxpZD8KICAgICAgKiAgICAgICBObyBhY2Nlc3MgdG8gJ3JlcWluZm8nCiAgICAgICovCi0gICAgaWYgKHVkcF9oZWFkID09IDApCisgICAgaWYgKHVkcF9oZWFkID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyoKQEAgLTQ3OCw3ICs0ODAsNyBAQAogCiAgICAgaWYgKCEoaW4gPSBmb3BlbigiL3Byb2MvbmV0L3VkcCIsICJyIikpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS91ZHBUYWJsZSIsICJGYWlsZWQgdG8gbG9hZCBVRFAgVGFibGUgKGxpbnV4KVxuIikpOwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic25tcGQ6IGNhbm5vdCBvcGVuIC9wcm9jL25ldC91ZHAgLi4uXG4iKTsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAic25tcGQ6IGNhbm5vdCBvcGVuIC9wcm9jL25ldC91ZHAgLi4uXG4iKSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5oCmluZGV4IDJjNjFjZGEuLmY5YWZkNWEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuaApAQCAtNiw3ICs2LDcgQEAKICNkZWZpbmUgX01JQkdST1VQX1VEUFRBQkxFX0gKIAogY29uZmlnX2FyY2hfcmVxdWlyZShzb2xhcmlzMiwga2VybmVsX3N1bm9zNSkKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MgbWliSUkvaXApCitjb25maWdfcmVxdWlyZShtaWJJSS9pcCkKIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfdWRwVGFibGUodm9pZCk7CiBleHRlcm4gTmV0c25tcF9Ob2RlX0hhbmRsZXIgdWRwVGFibGVfaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzhlYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5jCkBAIC0wLDAgKzEsNDUgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKK3N0YXRpYyBpbnQKK2hhbmRsZV91cGRhdGVzKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGludCAqc2V0ID0gKGludCopaGFuZGxlci0+bXl2b2lkOworCisgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEgJiYgKnNldCA8IDApCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKKyAgICBlbHNlIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX0NPTU1JVCkgeworICAgICAgICAqc2V0ID0gMTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQocmVnaW5mby0+aGFuZGxlck5hbWUpOworICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbioKK25ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBvaWQqIGlkLCBzaXplX3QgaWRsZW4sIGludCBtb2RlLCBpbnQqIHNldCkKK3sKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZXM7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaG5kOworCisgICAgaG5kID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcigidXBkYXRlIiwgaGFuZGxlX3VwZGF0ZXMpOworICAgIGlmIChobmQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBobmQtPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVDsKKyAgICBobmQtPm15dm9pZCA9IHNldDsKKworICAgIHJlcyA9IG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKG5hbWUsIGhuZCwgaWQsIGlkbGVuLCBtb2RlKTsKKyAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaG5kKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDE0ZTMzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgVVBEQVRFU19ICisjZGVmaW5lIFVQREFURVNfSAorCisvKioKKyAqIENyZWF0ZSBhIGhhbmRsZXJfcmVnaXN0cmF0aW9uIHRoYXQgY2hlY2tzICpzZXQgdG8gZGV0ZXJtaW5lIGhvdyB0byBwcm9jZWVkZSwKKyAqIGlmICpzZXQgaXMgbGVzcyB0aGFuIDAgdGhlbiB0aGUgb2JqZWN0IGlzIG5vbndyaXRlYWJsZSwgb3RoZXJ3aXNlLCAqc2V0IGlzCisgKiBzZXQgdG8gMSBpbiB0aGUgY29tbWl0IHBoYXNlLiBBbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgYXMgaW4KKyAqIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uLgorICovCisKK2V4dGVybiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKgorbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkKiBpZCwgc2l6ZV90IGlkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBpbnQqIHNldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYwppbmRleCA3ZDc4YTFmLi5mMmZhZjg2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYwpAQCAtNDAsMzQgKzQwLDEyIEBACiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KICNpbmNsdWRlICJ2YWNtX2NvbmYuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0KLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCi0jIGluY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1lTX1RJTUVfSAotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8dGltZS5oPgotIyBlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgotI2VuZGlmCiAKICNpbmNsdWRlICJzbm1wZC5oIgogCkBAIC04OCwxNCArNjYsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSBjb250ZXh0IG1vZGVsIGxldmVsIHByZWZpeCB2aWV3bmFtZSB2aWV3dmFsIik7CiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInZpZXciLCB2YWNtX3BhcnNlX3ZpZXcsIHZhY21fZnJlZV92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIHR5cGUgc3VidHJlZSBbbWFza10iKTsKLSAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigidmFjbVZpZXciLCB2YWNtX3BhcnNlX2NvbmZpZ192aWV3LCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJ2YWNtR3JvdXAiLCB2YWNtX3BhcnNlX2NvbmZpZ19ncm91cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKLSAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigidmFjbUFjY2VzcyIsIHZhY21fcGFyc2VfY29uZmlnX2FjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKLSAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigidmFjbUF1dGhBY2Nlc3MiLCB2YWNtX3BhcnNlX2NvbmZpZ19hdXRoX2FjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigidmFjbVZpZXciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX3ZpZXcsIE5VTEwsIE5VTEwpOworICAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCJ2YWNtR3JvdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX2dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCJ2YWNtQWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ19hY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoInZhY21BdXRoQWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ19hdXRoX2FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKIAogICAgIC8qIGVhc3kgY29tbXVuaXR5IGF1dGggaGFuZGxlciAqLwogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJhdXRoY29tbXVuaXR5IiwKQEAgLTExOSw3ICsxMDAsNyBAQAogICAgICAqIERlZmluZSBzdGFuZGFyZCB2aWV3cyAiX2FsbF8iIGFuZCAiX25vbmVfIgogICAgICAqLwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19QT1NUX1BSRU1JQl9SRUFEX0NPTkZJRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfUFJFX1JFQURfQ09ORklHLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFjbV9zdGFuZGFyZF92aWV3cywgTlVMTCk7CiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1BPU1RfUkVBRF9DT05GSUcsCkBAIC0xNzQsMjQgKzE1NSwyNCBAQAogdm9pZAogdmFjbV9wYXJzZV9ncm91cChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqcGFyYW0pCiB7Ci0gICAgY2hhciAgICAgICAgICAgKmdyb3VwLCAqbW9kZWwsICpzZWN1cml0eTsKKyAgICBjaGFyICAgICAgICAgICAgZ3JvdXBbVkFDTVNUUklOR0xFTl0sIG1vZGVsW1ZBQ01TVFJJTkdMRU5dLCBzZWN1cml0eVtWQUNNU1RSSU5HTEVOXTsKICAgICBpbnQgICAgICAgICAgICAgaW1vZGVsOwogICAgIHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgKmdwID0gTlVMTDsKICAgICBjaGFyICAgICAgICAgICAqc3Q7CiAKLSAgICBncm91cCA9IHN0cnRva19yKHBhcmFtLCAiIFx0XG4iLCAmc3QpOwotICAgIG1vZGVsID0gc3RydG9rX3IoTlVMTCwgIiBcdFxuIiwgJnN0KTsKLSAgICBzZWN1cml0eSA9IHN0cnRva19yKE5VTEwsICIgXHRcbiIsICZzdCk7CisgICAgc3QgPSBjb3B5X253b3JkKHBhcmFtLCBncm91cCwgc2l6ZW9mKGdyb3VwKS0xKTsKKyAgICBzdCA9IGNvcHlfbndvcmQoc3QsIG1vZGVsLCBzaXplb2YobW9kZWwpLTEpOworICAgIHN0ID0gY29weV9ud29yZChzdCwgc2VjdXJpdHksIHNpemVvZihzZWN1cml0eSktMSk7CiAKLSAgICBpZiAoZ3JvdXAgPT0gTlVMTCB8fCAqZ3JvdXAgPT0gMCkgeworICAgIGlmIChncm91cFswXSA9PSAwKSB7CiAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgR1JPVVAgcGFyYW1ldGVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1vZGVsID09IE5VTEwgfHwgKm1vZGVsID09IDApIHsKKyAgICBpZiAobW9kZWxbMF0gPT0gMCkgewogICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIE1PREVMIHBhcmFtZXRlciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChzZWN1cml0eSA9PSBOVUxMIHx8ICpzZWN1cml0eSA9PSAwKSB7CisgICAgaWYgKHNlY3VyaXR5WzBdID09IDApIHsKICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBTRUNVUklUWSBwYXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI3MCw3ICsyNTEsNyBAQAogICAgICAgICByZXR1cm4gUEFSU0VfRkFJTDsKICAgICB9CiAKLSAgICBpZiAoc3RyY21wKCpjb250ZXh0LCAiXCJcIiIpID09IDApCisgICAgaWYgKHN0cmNtcCgqY29udGV4dCwgIlwiXCIiKSA9PSAwIHx8IHN0cmNtcCgqY29udGV4dCwgIlwnXCciKSA9PSAwKQogICAgICAgICAqKmNvbnRleHQgPSAwOwogICAgIGlmIChzdHJjYXNlY21wKG1vZGVsLCAiYW55IikgPT0gMCkKICAgICAgICAgKmltb2RlbCA9IFNOTVBfU0VDX01PREVMX0FOWTsKQEAgLTY0Myw3ICs2MjQsNyBAQAogICAgIHNpemVfdCAgICAgICAgICBzdWJvaWRfbGVuID0gMDsKICAgICBzaXplX3QgICAgICAgICAgbWFza19sZW4gPSAwOwogICAgIHVfY2hhciAgICAgICAgICB2aWV3TWFza1tWQUNNU1RSSU5HTEVOXTsKLSAgICBpbnQgICAgICAgICAgICAgaTsKKyAgICBzaXplX3QgICAgICAgICAgaTsKICAgICBjaGFyICAgICAgICAgICAgKnN0OwogCiAgICAgbmFtZSA9IHN0cnRva19yKHBhcmFtLCAiIFx0XG4iLCAmc3QpOwpAQCAtNjgwLDcgKzY2MSw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgaW50ICAgICAgICAgICAgIHZhbDsKKyAgICAgICAgdW5zaWduZWQgaW50IHZhbDsKICAgICAgICAgaSA9IDA7CiAgICAgICAgIGZvciAobWFzayA9IHN0cnRva19yKG1hc2ssICIgLjoiLCAmc3QpOyBtYXNrOyBtYXNrID0gc3RydG9rX3IoTlVMTCwgIiAuOiIsICZzdCkpIHsKICAgICAgICAgICAgIGlmIChpID49IHNpemVvZih2aWV3TWFzaykpIHsKQEAgLTk2Miw2ICs5NDMsNyBAQAogICAgIGNvbW1jb3VudCsrOwogCiAjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQX0RPTUFJTgogICAgIGlmIChwYXJzZXR5cGUgPT0gVkFDTV9DUkVBVEVfU0lNUExFX0NPTUlQVjQgfHwKICAgICAgICAgcGFyc2V0eXBlID09IFZBQ01fQ1JFQVRFX1NJTVBMRV9DT00pIHsKICAgICAgICAgdmFjbV9nZW5fY29tMnNlYyhjb21tY291bnQsIGNvbW11bml0eSwgYWRkcmVzc25hbWUsCkBAIC05NjksMTMgKzk1MSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlY25hbWUsIHNpemVvZihzZWNuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3X3B0ciwgc2l6ZW9mKHZpZXduYW1lKSwgY29tbXZlcnNpb24sIGNvbnRleHQpOwogICAgIH0KLSAgICAKKyNlbmRpZgorCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KICAgICBpZiAocGFyc2V0eXBlID09IFZBQ01fQ1JFQVRFX1NJTVBMRV9DT01VTklYIHx8CiAgICAgICAgIHBhcnNldHlwZSA9PSBWQUNNX0NSRUFURV9TSU1QTEVfQ09NKSB7Ci0gICAgICAgIGlmIChjb250ZXh0ICYmICpjb250ZXh0KQotICAgICAgICAgICAgc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAiLUNuICVzICVzICVzICclcyciLAotICAgICAgICAgICAgICAgICBjb250ZXh0LCBzZWNuYW1lLCBhZGRyZXNzbmFtZSwgY29tbXVuaXR5KTsKKyAgICAgICAgaWYgKCAqY29udGV4dCApCisgICAgICAgICAgIHNucHJpbnRmKGxpbmUsIHNpemVvZihsaW5lKSwgIi1DbiAlcyAlcyAlcyAnJXMnIiwKKyAgICAgICAgICAgICBjb250ZXh0LCBzZWNuYW1lLCBhZGRyZXNzbmFtZSwgY29tbXVuaXR5KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAiJXMgJXMgJyVzJyIsCiAgICAgICAgICAgICAgICAgIHNlY25hbWUsIGFkZHJlc3NuYW1lLCBjb21tdW5pdHkpOwpAQCAtMTAxNCwxMCArOTk3LDEwIEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHNucHJpbnRmKGdycG5hbWUsIHNpemVvZihncnBuYW1lKSwgImdycCUuMjhzIiwgc2VjbmFtZSk7CiAgICAgICAgICAgICBmb3IgKHRtcD1ncnBuYW1lOyAqdG1wOyB0bXArKykKLSAgICAgICAgICAgICAgICBpZiAoIWlzYWxudW0oKnRtcCkpCisgICAgICAgICAgICAgICAgaWYgKCFpc2FsbnVtKCh1bnNpZ25lZCBjaGFyKSgqdG1wKSkpCiAgICAgICAgICAgICAgICAgICAgICp0bXAgPSAnXyc7CiAgICAgICAgICAgICBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksCi0gICAgICAgICAgICAgICAgICAgICAiJXMgJXMgJXMiLCBncnBuYW1lLCBtb2RlbCwgc2VjbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiJXMgJXMgXCIlc1wiIiwgZ3JwbmFtZSwgbW9kZWwsIHNlY25hbWUpOwogICAgICAgICAgICAgbGluZVsgc2l6ZW9mKGxpbmUpLTEgXSA9IDA7CiAgICAgICAgICAgICBERUJVR01TR1RMKCh0b2tlbiwgInBhc3Npbmc6ICVzICVzXG4iLCAiZ3JvdXAiLCBsaW5lKSk7CiAgICAgICAgICAgICB2YWNtX3BhcnNlX2dyb3VwKCJncm91cCIsIGxpbmUpOwpAQCAtMTAyNSw3ICsxMDA4LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBzbnByaW50ZihncnBuYW1lLCBzaXplb2YoZ3JwbmFtZSksICJncnAlLjI4cyIsIHNlY25hbWUpOwogICAgICAgICBmb3IgKHRtcD1ncnBuYW1lOyAqdG1wOyB0bXArKykKLSAgICAgICAgICAgIGlmICghaXNhbG51bSgqdG1wKSkKKyAgICAgICAgICAgIGlmICghaXNhbG51bSgodW5zaWduZWQgY2hhcikoKnRtcCkpKQogICAgICAgICAgICAgICAgICp0bXAgPSAnXyc7CiAgICAgfQogCkBAIC0xMjE4LDkgKzEyMDEsMTEgQEAKICAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6CiAgICAgICAgIHZpZXd0eXBlID0gVkFDTV9WSUVXX1JFQUQ7CiAgICAgICAgIGJyZWFrOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKICAgICAgICAgdmlld3R5cGUgPSBWQUNNX1ZJRVdfV1JJVEU7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBjYXNlIFNOTVBfTVNHX1RSQVA6CiAgICAgY2FzZSBTTk1QX01TR19UUkFQMjoKICAgICBjYXNlIFNOTVBfTVNHX0lORk9STToKQEAgLTEyNjIsMTIgKzEyNDcsMjAgQEAKIHZhY21fY2hlY2tfdmlldyhuZXRzbm1wX3BkdSAqcGR1LCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZWxlbiwKICAgICAgICAgICAgICAgICBpbnQgY2hlY2tfc3VidHJlZSwgaW50IHZpZXd0eXBlKQogeworICAgIHJldHVybiB2YWNtX2NoZWNrX3ZpZXdfY29udGVudHMocGR1LCBuYW1lLCBuYW1lbGVuLCBjaGVja19zdWJ0cmVlLCB2aWV3dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBQ01fQ0hFQ0tfVklFV19DT05URU5UU19OT19GTEFHUyk7Cit9CisKK2ludAordmFjbV9jaGVja192aWV3X2NvbnRlbnRzKG5ldHNubXBfcGR1ICpwZHUsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGVja19zdWJ0cmVlLCBpbnQgdmlld3R5cGUsIGludCBmbGFncykKK3sKICAgICBzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqYXA7CiAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqZ3A7CiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICp2cDsKICAgICBjaGFyICAgICAgICAgICAgdmFjbV9kZWZhdWx0X2NvbnRleHRbMV0gPSAiIjsKLSAgICBjaGFyICAgICAgICAgICAqY29udGV4dE5hbWUgPSB2YWNtX2RlZmF1bHRfY29udGV4dDsKLSAgICBjaGFyICAgICAgICAgICAqc24gPSBOVUxMOworICAgIGNvbnN0IGNoYXIgICAgICpjb250ZXh0TmFtZSA9IHZhY21fZGVmYXVsdF9jb250ZXh0OworICAgIGNvbnN0IGNoYXIgICAgICpzbiA9IE5VTEw7CiAgICAgY2hhciAgICAgICAgICAgKnZuOwogICAgIGNvbnN0IGNoYXIgICAgICpwZHVfY29tbXVuaXR5OwogCkBAIC0xMzE0LDcgKzEzMDcsOSBAQAogICAgICAgICAgKiBjb21tdW5pdHkgc3RyaW5nIHRvIGEgc2VjdXJpdHkgbmFtZSBmb3IgdXMuICAKICAgICAgICAgICovCiAKLSAgICAgICAgaWYgKHBkdS0+dERvbWFpbiA9PSBuZXRzbm1wVURQRG9tYWluCisgICAgICAgIGlmICgwKSB7CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQX0RPTUFJTgorICAgICAgICB9IGVsc2UgaWYgKHBkdS0+dERvbWFpbiA9PSBuZXRzbm1wVURQRG9tYWluCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQX0RPTUFJTgogICAgICAgICAgICAgfHwgcGR1LT50RG9tYWluID09IG5ldHNubXBfc25tcFRDUERvbWFpbgogI2VuZGlmCkBAIC0xMzMzLDYgKzEzMjgsNyBAQAogICAgICAgICAgICAgU05NUF9GUkVFKHBkdS0+Y29udGV4dE5hbWUpOwogICAgICAgICAgICAgcGR1LT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CiAgICAgICAgICAgICBwZHUtPmNvbnRleHROYW1lTGVuID0gc3RybGVuKGNvbnRleHROYW1lKTsKKyNlbmRpZgogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCiAgICAgICAgIH0gZWxzZSBpZiAocGR1LT50RG9tYWluID09IG5ldHNubXBfVURQSVB2NkRvbWFpbgogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCkBAIC0xNDIxLDcgKzE0MTcsOCBAQAogICAgICAgICBjb250ZXh0TmFtZUluZGV4WzBdID0gJ1wwJzsKIAogICAgIGNvbnRleHROYW1lSW5kZXhbcGR1LT5jb250ZXh0TmFtZUxlbl0gPSAnXDAnOwotICAgIGlmICghbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dE5hbWVJbmRleCkpIHsKKyAgICBpZiAoIShmbGFncyAmIFZBQ01fQ0hFQ0tfVklFV19DT05URU5UU19ETkVfQ09OVEVYVF9PSykgJiYKKyAgICAgICAgIW5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHROYW1lSW5kZXgpKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIHJmYyAzNDE1IHNlY3Rpb24gMy4yLCBzdGVwIDEKICAgICAgICAgICogbm8gc3VjaCBjb250ZXh0IGhlcmU7IHJldHVybiBubyBzdWNoIGNvbnRleHQgZXJyb3IgCkBAIC0xNDQ3LDcgKzE0NDQsNyBAQAogICAgICAgICByZXR1cm4gVkFDTV9OT0FDQ0VTUzsKICAgICB9CiAKLSAgICBpZiAobmFtZSA9PSAwKSB7ICAgICAgICAgICAgLyogb25seSBjaGVjayB0aGUgc2V0dXAgb2YgdGhlIHZhY20gZm9yIHRoZSByZXF1ZXN0ICovCisgICAgaWYgKG5hbWUgPT0gTlVMTCkgeyAvKiBvbmx5IGNoZWNrIHRoZSBzZXR1cCBvZiB0aGUgdmFjbSBmb3IgdGhlIHJlcXVlc3QgKi8KICAgICAgICAgREVCVUdNU0coKCJtaWJJSS92YWNtX3ZhcnMiLCAiLCBEb25lIGNoZWNraW5nIHNldHVwXG4iKSk7CiAgICAgICAgIHJldHVybiBWQUNNX1NVQ0NFU1M7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmggYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaAppbmRleCA4ZTE1OTc4Li43ODY0Y2UxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaApAQCAtNyw3ICs3LDYgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdmFjbS5oPgogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQogY29uZmlnX2JlbG9uZ3NfaW4oYWdlbnRfbW9kdWxlKQogCiAjZGVmaW5lIFZBQ01fQ1JFQVRFX1NJTVBMRV9WMyAgICAgICAxCkBAIC00Myw1ICs0MiwxMCBAQAogCiAgICAgIGludCAgICAgICAgICAgICB2YWNtX2luX3ZpZXcobmV0c25tcF9wZHUgKiwgb2lkICosIHNpemVfdCwgaW50KTsKICAgICAgaW50ICAgICAgICAgICAgIHZhY21fY2hlY2tfdmlldyhuZXRzbm1wX3BkdSAqLCBvaWQgKiwgc2l6ZV90LCBpbnQsIGludCk7CisgICAgIGludCAgICAgICAgICAgICB2YWNtX2NoZWNrX3ZpZXdfY29udGVudHMobmV0c25tcF9wZHUgKiwgb2lkICosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50KTsKKworI2RlZmluZSBWQUNNX0NIRUNLX1ZJRVdfQ09OVEVOVFNfTk9fRkxBR1MgICAgICAgIDAKKyNkZWZpbmUgVkFDTV9DSEVDS19WSUVXX0NPTlRFTlRTX0RORV9DT05URVhUX09LICAxCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1ZBQ01fQ09ORl9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5jCmluZGV4IGM0NzQxODAuLjhmNDNjZDMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICBpaW5mby0+Z2V0X2ZpcnN0X2RhdGFfcG9pbnQgPSBnZXRfZmlyc3RfY29udGV4dDsKICAgICBpaW5mby0+Z2V0X25leHRfZGF0YV9wb2ludCA9IGdldF9uZXh0X2NvbnRleHQ7CiAgICAgaWluZm8tPnRhYmxlX3JlZ2luZm8gPSB0YWJsZV9pbmZvOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IobXlfaGFuZGxlciwgaWluZm8pOworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKG15X2hhbmRsZXIsIGlpbmZvKTsKIH0KIAogLyoKQEAgLTE0OSw3ICsxNDksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihjb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lKSk7CiAKICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBnZXRuZXh0IGFscmVhZHkgaGF2ZSBiZWVuCkBAIC0xNTksOCArMTU4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICJ2YWNtX2NvbnRleHQgdGFibGUgYWNjZXNzZWQgYXMgbW9kZT0lZC4gIFdlJ3JlIGltcHJvcGVybHkgcmVnaXN0ZXJlZCEiLAogICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CiAgICAgICAgICAgICBicmVhazsKLQotCiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMKaW5kZXggMDkzN2ZjNS4uODVjZWY5NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMKQEAgLTQwLDI0ICs0MCwxNyBAQAogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogI2luY2x1ZGUgInZhY21fdmFycy5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNjYsNDEgKzU5LDUyIEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCi0jZW5kaWYKKwogc3RhdGljIHVuc2lnbmVkIGludCB2YWNtVmlld1NwaW5Mb2NrID0gMDsKIAogdm9pZAogaW5pdF92YWNtX3ZhcnModm9pZCkKIHsKIAotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCi0gICAgc3RhdGljIG9pZCAgICAgIHJlZ1tdID0geyBTTk1QX09JRF9TTk1QTU9EVUxFUywgMTYsIDIsIDIsIDEgfTsKLSNlbmRpZgorICAgIG9pZCAgICAgIHJlZ1tdID0geyBTTk1QX09JRF9TTk1QTU9EVUxFUywgMTYsIDIsIDIsIDEgfTsKIAogI2RlZmluZSBQUklWUlcJKE5FVFNOTVBfU05NUFYyQU5ZIHwgMHg1MDAwKQogCiAgICAgc3RydWN0IHZhcmlhYmxlMSB2YWNtX3NlYzJncm91cFtdID0gewotICAgICAgICB7U0VDVVJJVFlHUk9VUCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdmFjbV9zZWMyZ3JvdXAsIDEsIHszfX0sCi0gICAgICAgIHtTRUNVUklUWVNUT1JBR0UsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX3NlYzJncm91cCwgMSwgezR9fSwKLSAgICAgICAge1NFQ1VSSVRZU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV9zZWMyZ3JvdXAsIDEsIHs1fX0sCisgICAgICAgIHtTRUNVUklUWUdST1VQLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9zZWMyZ3JvdXAsIDEsIHszfX0sCisgICAgICAgIHtTRUNVUklUWVNUT1JBR0UsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9zZWMyZ3JvdXAsIDEsIHs0fX0sCisgICAgICAgIHtTRUNVUklUWVNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX3NlYzJncm91cCwgMSwgezV9fSwKICAgICB9OwogCiAgICAgc3RydWN0IHZhcmlhYmxlMSB2YWNtX2FjY2Vzc1tdID0gewotICAgICAgICB7QUNDRVNTTUFUQ0gsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX2FjY2VzcywgMSwgezR9fSwKLSAgICAgICAge0FDQ0VTU1JFQUQsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3ZhY21fYWNjZXNzLCAxLCB7NX19LAotICAgICAgICB7QUNDRVNTV1JJVEUsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3ZhY21fYWNjZXNzLCAxLCB7Nn19LAotICAgICAgICB7QUNDRVNTTk9USUZZLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl92YWNtX2FjY2VzcywgMSwgezd9fSwKLSAgICAgICAge0FDQ0VTU1NUT1JBR0UsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX2FjY2VzcywgMSwgezh9fSwKLSAgICAgICAge0FDQ0VTU1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fYWNjZXNzLCAxLCB7OX19LAorICAgICAgICB7QUNDRVNTTUFUQ0gsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs0fX0sCisgICAgICAgIHtBQ0NFU1NSRUFELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs1fX0sCisgICAgICAgIHtBQ0NFU1NXUklURSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fYWNjZXNzLCAxLCB7Nn19LAorICAgICAgICB7QUNDRVNTTk9USUZZLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs3fX0sCisgICAgICAgIHtBQ0NFU1NTVE9SQUdFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fYWNjZXNzLCAxLCB7OH19LAorICAgICAgICB7QUNDRVNTU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fYWNjZXNzLCAxLCB7OX19LAogICAgIH07CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUzIHZhY21fdmlld1tdID0gewotICAgICAgICB7VkFDTVZJRVdTUElOTE9DSywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fdmlldywgMSwgezF9fSwKLSAgICAgICAge1ZJRVdNQVNLLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl92YWNtX3ZpZXcsIDMsIHsyLCAxLCAzfX0sCi0gICAgICAgIHtWSUVXVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fdmlldywgMywgezIsIDEsIDR9fSwKLSAgICAgICAge1ZJRVdTVE9SQUdFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV92aWV3LCAzLCB7MiwgMSwgNX19LAotICAgICAgICB7VklFV1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fdmlldywgMywgezIsIDEsIDZ9fSwKKyAgICAgICAge1ZBQ01WSUVXU1BJTkxPQ0ssIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV92aWV3LCAxLCB7MX19LAorICAgICAgICB7VklFV01BU0ssIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX3ZpZXcsIDMsIHsyLCAxLCAzfX0sCisgICAgICAgIHtWSUVXVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX3ZpZXcsIDMsIHsyLCAxLCA0fX0sCisgICAgICAgIHtWSUVXU1RPUkFHRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX3ZpZXcsIDMsIHsyLCAxLCA1fX0sCisgICAgICAgIHtWSUVXU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fdmlldywgMywgezIsIDEsIDZ9fSwKICAgICB9OwogCiAgICAgLyoKQEAgLTEyNiwxMSArMTMwLDcgQEAKICAgICAgICAgICAgICAgICAgdmFjbV9hY2Nlc3Nfb2lkKTsKICAgICBSRUdJU1RFUl9NSUIoIm1pYklJL3ZhY206dmlldyIsIHZhY21fdmlldywgdmFyaWFibGUzLCB2YWNtX3ZpZXdfb2lkKTsKIAotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCi0gICAgcmVnaXN0ZXJfc3lzT1JUYWJsZShyZWcsIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgIlZpZXctYmFzZWQgQWNjZXNzIENvbnRyb2wgTW9kZWwgZm9yIFNOTVAuIik7Ci0jZW5kaWYKLQorICAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKHJlZywgIlZpZXctYmFzZWQgQWNjZXNzIENvbnRyb2wgTW9kZWwgZm9yIFNOTVAuIik7CiB9CiAKIApAQCAtMTQ0LDcgKzE0NCw3IEBACiB7CiAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqZ3A7CiAgICAgb2lkICAgICAgICAgICAgKmdyb3VwU3VidHJlZTsKLSAgICBpbnQgICAgICAgICAgICAgZ3JvdXBTdWJ0cmVlTGVuOworICAgIHNzaXplX3QgICAgICAgICBncm91cFN1YnRyZWVMZW47CiAgICAgaW50ICAgICAgICAgICAgIHNlY21vZGVsOwogICAgIGNoYXIgICAgICAgICAgICBzZWNuYW1lW1ZBQ01TVFJJTkdMRU5dLCAqY3A7CiAKQEAgLTE1Niw2ICsxNTYsNyBAQAogICAgICAqLwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgIGNhc2UgU0VDVVJJVFlHUk9VUDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3ZhY21Hcm91cE5hbWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTY1LDEwICsxNjYsMTMgQEAKICAgICBjYXNlIFNFQ1VSSVRZU1RBVFVTOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdmFjbVNlY3VyaXR5VG9Hcm91cFN0YXR1czsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICAgICBkZWZhdWx0OgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gTlVMTDsKICAgICB9CiAKKwkqdmFyX2xlbiA9IDA7IC8qIGFzc3VtZSAwIGxlbmd0aCB1bnRpbCBmb3VuZCAqLworCiAgICAgaWYgKG1lbWNtcChuYW1lLCB2cC0+bmFtZSwgc2l6ZW9mKG9pZCkgKiB2cC0+bmFtZWxlbikgIT0gMCkgewogICAgICAgICBtZW1jcHkobmFtZSwgdnAtPm5hbWUsIHNpemVvZihvaWQpICogdnAtPm5hbWVsZW4pOwogICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW47CkBAIC0xODEsMTMgKzE4NSwxMyBAQAogICAgICAgICBncm91cFN1YnRyZWUgPSBuYW1lICsgMTM7CiAgICAgICAgIGdyb3VwU3VidHJlZUxlbiA9ICpsZW5ndGggLSAxMzsKICAgICAgICAgaWYgKCBuYW1lWzEyXSAhPSBncm91cFN1YnRyZWVMZW4gKQotICAgICAgICAgICAgcmV0dXJuIDA7CQkvKiBFaXRoZXIgZXh0cmEgc3ViaWRzLCBvciBhbiBpbmNvbXBsZXRlIHN0cmluZyAqLworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CS8qIEVpdGhlciBleHRyYSBzdWJpZHMsIG9yIGFuIGluY29tcGxldGUgc3RyaW5nICovCiAgICAgICAgIGNwID0gc2VjbmFtZTsKICAgICAgICAgd2hpbGUgKGdyb3VwU3VidHJlZUxlbi0tID4gMCkgewogICAgICAgICAgICAgaWYgKCpncm91cFN1YnRyZWUgPiAyNTUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgLyogaWxsZWdhbCB2YWx1ZSAqLwogICAgICAgICAgICAgaWYgKGNwIC0gc2VjbmFtZSA+IFZBQ01fTUFYX1NUUklORykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICpjcCsrID0gKGNoYXIpICpncm91cFN1YnRyZWUrKzsKICAgICAgICAgfQogICAgICAgICAqY3AgPSAwOwpAQCAtMjAwLDkgKzIwNCw5IEBACiAgICAgICAgIGNwID0gc2VjbmFtZTsKICAgICAgICAgd2hpbGUgKGdyb3VwU3VidHJlZUxlbi0tID4gMCkgewogICAgICAgICAgICAgaWYgKCpncm91cFN1YnRyZWUgPiAyNTUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgLyogaWxsZWdhbCB2YWx1ZSAqLwogICAgICAgICAgICAgaWYgKGNwIC0gc2VjbmFtZSA+IFZBQ01fTUFYX1NUUklORykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICpjcCsrID0gKGNoYXIpICpncm91cFN1YnRyZWUrKzsKICAgICAgICAgfQogICAgICAgICAqY3AgPSAwOwpAQCAtMjUyLDYgKzI1Niw3IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI3OCw2ICsyODMsNyBAQAogICAgICAqLwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgIGNhc2UgQUNDRVNTTUFUQ0g6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV92YWNtQWNjZXNzQ29udGV4dE1hdGNoOwogICAgICAgICBicmVhazsKQEAgLTI5NiwxMCArMzAyLDEzIEBACiAgICAgY2FzZSBBQ0NFU1NTVEFUVVM6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV92YWNtQWNjZXNzU3RhdHVzOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogICAgIGRlZmF1bHQ6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwogICAgIH0KIAorCSp2YXJfbGVuID0gMDsgLyogYXNzdW1lIDAgbGVuZ3RoIHVudGlsIGZvdW5kICovCisKICAgICBpZiAobWVtY21wKG5hbWUsIHZwLT5uYW1lLCBzaXplb2Yob2lkKSAqIHZwLT5uYW1lbGVuKSAhPSAwKSB7CiAgICAgICAgIG1lbWNweShuYW1lLCB2cC0+bmFtZSwgc2l6ZW9mKG9pZCkgKiB2cC0+bmFtZWxlbik7CiAgICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbjsKQEAgLTMxNSwxMSArMzI0LDExIEBACiAgICAgICAgIG9wID0gbmFtZSArIDExOwogICAgICAgICBsZW4gPSAqb3ArKzsKICAgICAgICAgaWYgKGxlbiA+IFZBQ01fTUFYX1NUUklORykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGNwID0gZ3JvdXBOYW1lOwogICAgICAgICB3aGlsZSAobGVuLS0gPiAwKSB7CiAgICAgICAgICAgICBpZiAoKm9wID4gMjU1KQotICAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAvKiBpbGxlZ2FsIHZhbHVlICovCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KICAgICAgICAgICAgICpjcCsrID0gKGNoYXIpICpvcCsrOwogICAgICAgICB9CiAgICAgICAgICpjcCA9IDA7CkBAIC0zMjksMTEgKzMzOCwxMSBAQAogICAgICAgICAgKi8KICAgICAgICAgbGVuID0gKm9wKys7CiAgICAgICAgIGlmIChsZW4gPiBWQUNNX01BWF9TVFJJTkcpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBjcCA9IGNvbnRleHRQcmVmaXg7CiAgICAgICAgIHdoaWxlIChsZW4tLSA+IDApIHsKICAgICAgICAgICAgIGlmICgqb3AgPiAyNTUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgLyogaWxsZWdhbCB2YWx1ZSAqLwogICAgICAgICAgICAgKmNwKysgPSAoY2hhcikgKm9wKys7CiAgICAgICAgIH0KICAgICAgICAgKmNwID0gMDsKQEAgLTM2MSwxMSArMzcwLDExIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBsZW4gPSAqb3A7CiAgICAgICAgICAgICBpZiAobGVuID4gVkFDTV9NQVhfU1RSSU5HKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgY3AgPSBncm91cE5hbWU7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCpvcCA+IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAvKiBpbGxlZ2FsIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKmNwKysgPSAoY2hhcikgKm9wKys7CiAgICAgICAgICAgICB9CkBAIC0zNzUsMTEgKzM4NCwxMSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbGVuID0gKm9wOwogICAgICAgICAgICAgaWYgKGxlbiA+IFZBQ01fTUFYX1NUUklORykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGNwID0gY29udGV4dFByZWZpeDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoKm9wID4gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgLyogaWxsZWdhbCB2YWx1ZSAqLwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAqY3ArKyA9IChjaGFyKSAqb3ArKzsKICAgICAgICAgICAgIH0KQEAgLTQ2OSw2ICs0NzgsNyBAQAogICAgICAgICBsb25nX3JldHVybiA9IGdwLT5zdGF0dXM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgfQorCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ5NSw2ICs1MDUsNyBAQAogICAgICAqLwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgIGNhc2UgVklFV01BU0s6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV92YWNtVmlld01hc2s7CiAgICAgICAgIGJyZWFrOwpAQCAtNTA3LDExICs1MTgsMTMgQEAKICAgICBjYXNlIFZJRVdTVEFUVVM6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV92YWNtVmlld1N0YXR1czsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICAgICBkZWZhdWx0OgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gTlVMTDsKICAgICB9CiAKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldHVybik7CisKICAgICBpZiAodnAtPm1hZ2ljICE9IFZBQ01WSUVXU1BJTkxPQ0spIHsKICAgICAgICAgaWYgKG1lbWNtcChuYW1lLCB2cC0+bmFtZSwgc2l6ZW9mKG9pZCkgKiB2cC0+bmFtZWxlbikgIT0gMCkgewogICAgICAgICAgICAgbWVtY3B5KG5hbWUsIHZwLT5uYW1lLCBzaXplb2Yob2lkKSAqIHZwLT5uYW1lbGVuKTsKQEAgLTUyOCwxMSArNTQxLDExIEBACiAgICAgICAgICAgICBvcCA9IG5hbWUgKyAxMjsKICAgICAgICAgICAgIGxlbiA9ICpvcCsrOwogICAgICAgICAgICAgaWYgKGxlbiA+IFZBQ01fTUFYX1NUUklORykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGNwID0gdmlld05hbWU7CiAgICAgICAgICAgICB3aGlsZSAobGVuLS0gPiAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKCpvcCA+IDI1NSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICpjcCsrID0gKGNoYXIpICpvcCsrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKmNwID0gMDsKQEAgLTU0Myw3ICs1NTYsNyBAQAogICAgICAgICAgICAgc3VidHJlZVswXSA9IGxlbiA9ICpvcCsrOwogICAgICAgICAgICAgc3VidHJlZUxlbiA9IDE7CiAgICAgICAgICAgICBpZiAobGVuID4gTUFYX09JRF9MRU4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBpZiAoIChvcCtsZW4pICE9IChuYW1lICsgKmxlbmd0aCkgKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgLyogRGVjbGFyZWQgbGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBhY3R1YWxseSBnb3QgKi8KICAgICAgICAgICAgIG9wMSA9ICYoc3VidHJlZVsxXSk7CkBAIC01NjYsMTEgKzU3OSwxMSBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBsZW4gPSAqb3A7CiAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IFZBQ01fTUFYX1NUUklORykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGNwID0gdmlld05hbWU7CiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBsZW4gJiYgb3AgPCBuYW1lICsgKmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgqb3AgPiAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgKmNwKysgPSAoY2hhcikgKm9wKys7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjIzLDcgKzYzNiw5IEBACiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgVkFDTVZJRVdTUElOTE9DSzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV92YWNtVmlld1NwaW5Mb2NrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgbG9uZ19yZXR1cm4gPSB2YWNtVmlld1NwaW5Mb2NrOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogCkBAIC02NTEsMzQgKzY2NiwxMSBAQAogICAgICAgICBsb25nX3JldHVybiA9IGdwLT52aWV3U3RhdHVzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgIH0KKwogICAgIHJldHVybiBOVUxMOwogfQogCi1vaWQgICAgICAgICAgICAqCi1zZWMyZ3JvdXBfZ2VuZXJhdGVfT0lEKG9pZCAqIHByZWZpeCwgc2l6ZV90IHByZWZpeExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqIGdlcHRyLCBzaXplX3QgKiBsZW5ndGgpCi17Ci0gICAgb2lkICAgICAgICAgICAgKmluZGV4T2lkOwotICAgIGludCAgICAgICAgICAgICBpLCBzZWN1cml0eU5hbWVMZW47Ci0KLSAgICBzZWN1cml0eU5hbWVMZW4gPSBzdHJsZW4oZ2VwdHItPnNlY3VyaXR5TmFtZSk7Ci0KLSAgICAqbGVuZ3RoID0gMiArIHNlY3VyaXR5TmFtZUxlbiArIHByZWZpeExlbjsKLSAgICBpbmRleE9pZCA9IChvaWQgKikgbWFsbG9jKCpsZW5ndGggKiBzaXplb2Yob2lkKSk7Ci0gICAgaWYgKGluZGV4T2lkKSB7Ci0gICAgICAgIG1lbW1vdmUoaW5kZXhPaWQsIHByZWZpeCwgcHJlZml4TGVuICogc2l6ZW9mKG9pZCkpOwotCi0gICAgICAgIGluZGV4T2lkW3ByZWZpeExlbl0gPSBnZXB0ci0+c2VjdXJpdHlNb2RlbDsKLQotICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW4gKyAxXSA9IHNlY3VyaXR5TmFtZUxlbjsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlY3VyaXR5TmFtZUxlbjsgaSsrKQotICAgICAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuICsgMiArIGldID0gKG9pZCkgZ2VwdHItPnNlY3VyaXR5TmFtZVtpXTsKLQotICAgIH0KLSAgICByZXR1cm4gaW5kZXhPaWQ7Ci0KLX0KLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiBpbnQKIHNlYzJncm91cF9wYXJzZV9vaWQob2lkICogb2lkSW5kZXgsIHNpemVfdCBvaWRMZW4sCiAgICAgICAgICAgICAgICAgICAgIGludCAqbW9kZWwsIHVuc2lnbmVkIGNoYXIgKipuYW1lLCBzaXplX3QgKiBuYW1lTGVuKQpAQCAtOTgxLDQwICs5NzMsNiBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCi1vaWQgICAgICAgICAgICAqCi1hY2Nlc3NfZ2VuZXJhdGVfT0lEKG9pZCAqIHByZWZpeCwgc2l6ZV90IHByZWZpeExlbiwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKiBhcHRyLCBzaXplX3QgKiBsZW5ndGgpCi17Ci0gICAgb2lkICAgICAgICAgICAgKmluZGV4T2lkOwotICAgIGludCAgICAgICAgICAgICBpLCBncm91cE5hbWVMZW4sIGNvbnRleHRQcmVmaXhMZW47Ci0KLSAgICBncm91cE5hbWVMZW4gPSBzdHJsZW4oYXB0ci0+Z3JvdXBOYW1lKTsKLSAgICBjb250ZXh0UHJlZml4TGVuID0gc3RybGVuKGFwdHItPmNvbnRleHRQcmVmaXgpOwotCi0gICAgKmxlbmd0aCA9IDQgKyBncm91cE5hbWVMZW4gKyBjb250ZXh0UHJlZml4TGVuICsgcHJlZml4TGVuOwotICAgIGluZGV4T2lkID0gKG9pZCAqKSBtYWxsb2MoKmxlbmd0aCAqIHNpemVvZihvaWQpKTsKLSAgICBpZiAoaW5kZXhPaWQpIHsKLSAgICAgICAgbWVtbW92ZShpbmRleE9pZCwgcHJlZml4LCBwcmVmaXhMZW4gKiBzaXplb2Yob2lkKSk7Ci0KLSAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuXSA9IGdyb3VwTmFtZUxlbjsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3VwTmFtZUxlbjsgaSsrKQotICAgICAgICAgICAgaW5kZXhPaWRbZ3JvdXBOYW1lTGVuICsgMSArIGldID0gKG9pZCkgYXB0ci0+Z3JvdXBOYW1lW2ldOwotCi0gICAgICAgIGluZGV4T2lkW3ByZWZpeExlbiArIGdyb3VwTmFtZUxlbiArIDFdID0gY29udGV4dFByZWZpeExlbjsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbnRleHRQcmVmaXhMZW47IGkrKykKLSAgICAgICAgICAgIGluZGV4T2lkW3ByZWZpeExlbiArIGdyb3VwTmFtZUxlbiArIDIgKyBpXSA9Ci0gICAgICAgICAgICAgICAgKG9pZCkgYXB0ci0+Y29udGV4dFByZWZpeFtpXTsKLQotICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW4gKyBncm91cE5hbWVMZW4gKyBjb250ZXh0UHJlZml4TGVuICsgM10gPQotICAgICAgICAgICAgYXB0ci0+c2VjdXJpdHlNb2RlbDsKLSAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuICsgZ3JvdXBOYW1lTGVuICsgY29udGV4dFByZWZpeExlbiArIDRdID0KLSAgICAgICAgICAgIGFwdHItPnNlY3VyaXR5TGV2ZWw7Ci0KLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4T2lkOwotCi19Ci0KIGludAogYWNjZXNzX3BhcnNlX29pZChvaWQgKiBvaWRJbmRleCwgc2l6ZV90IG9pZExlbiwKICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKmdyb3VwTmFtZSwgc2l6ZV90ICogZ3JvdXBOYW1lTGVuLApAQCAtMTU1MCwzNSArMTUwOCw2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLW9pZCAgICAgICAgICAgICoKLXZpZXdfZ2VuZXJhdGVfT0lEKG9pZCAqIHByZWZpeCwgc2l6ZV90IHByZWZpeExlbiwKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqIHZwdHIsIHNpemVfdCAqIGxlbmd0aCkKLXsKLSAgICBvaWQgICAgICAgICAgICAqaW5kZXhPaWQ7Ci0gICAgaW50ICAgICAgICAgICAgIGksIHZpZXdOYW1lTGVuLCB2aWV3U3VidHJlZUxlbjsKLQotICAgIHZpZXdOYW1lTGVuID0gc3RybGVuKHZwdHItPnZpZXdOYW1lKTsKLSAgICB2aWV3U3VidHJlZUxlbiA9IHZwdHItPnZpZXdTdWJ0cmVlTGVuOwotCi0gICAgKmxlbmd0aCA9IDIgKyB2aWV3TmFtZUxlbiArIHZpZXdTdWJ0cmVlTGVuICsgcHJlZml4TGVuOwotICAgIGluZGV4T2lkID0gKG9pZCAqKSBtYWxsb2MoKmxlbmd0aCAqIHNpemVvZihvaWQpKTsKLSAgICBpZiAoaW5kZXhPaWQpIHsKLSAgICAgICAgbWVtbW92ZShpbmRleE9pZCwgcHJlZml4LCBwcmVmaXhMZW4gKiBzaXplb2Yob2lkKSk7Ci0KLSAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuXSA9IHZpZXdOYW1lTGVuOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmlld05hbWVMZW47IGkrKykKLSAgICAgICAgICAgIGluZGV4T2lkW3ZpZXdOYW1lTGVuICsgMSArIGldID0gKG9pZCkgdnB0ci0+dmlld05hbWVbaV07Ci0KLSAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuICsgdmlld05hbWVMZW4gKyAxXSA9IHZpZXdTdWJ0cmVlTGVuOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmlld1N1YnRyZWVMZW47IGkrKykKLSAgICAgICAgICAgIGluZGV4T2lkW3ByZWZpeExlbiArIHZpZXdOYW1lTGVuICsgMiArIGldID0KLSAgICAgICAgICAgICAgICAob2lkKSB2cHRyLT52aWV3U3VidHJlZVtpXTsKLQotICAgIH0KLSAgICByZXR1cm4gaW5kZXhPaWQ7Ci0KLX0KLQogc3RydWN0IHZhY21fdmlld0VudHJ5ICoKIHZpZXdfcGFyc2Vfdmlld0VudHJ5KG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKQEAgLTE5MTEsMyArMTg0MCw0IEBACiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oCmluZGV4IDgwOTMxNTcuLjQ3MWY3NTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oCkBAIC03LDcgKzcsNyBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS92YWNtLmg+CiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogY29uZmlnX3JlcXVpcmUobWliSUkvdmFjbV9jb250ZXh0KQogY29uZmlnX3JlcXVpcmUobWliSUkvdmFjbV9jb25mKQogY29uZmlnX2FkZF9taWIoU05NUC1WSUVXLUJBU0VELUFDTS1NSUIpCkBAIC0xOSw2ICsxOSw3IEBACiAgICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl92YWNtX2FjY2VzczsKICAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX3ZhY21fdmlldzsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV92YWNtR3JvdXBOYW1lOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdmFjbVNlY3VyaXR5VG9Hcm91cFN0YXR1czsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3ZhY21TZWN1cml0eVRvR3JvdXBTdG9yYWdlVHlwZTsKQEAgLTM2LDcgKzM3LDYgQEAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3ZhY21WaWV3U3RvcmFnZVR5cGU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV92YWNtVmlld1R5cGU7CiAKLQogICAgICBvaWQgICAgICAgICAgICAqYWNjZXNzX2dlbmVyYXRlX09JRChvaWQgKiBwcmVmaXgsIHNpemVfdCBwcmVmaXhMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YWNtX2FjY2Vzc0VudHJ5ICphcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgpOwpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogc3VidHJlZUxlbik7CiAgICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqdmlld19wYXJzZV92aWV3RW50cnkob2lkICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmFtZV9sZW4pOwotCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKIAogCiAjZGVmaW5lIE9JRF9TTk1QVkFDTU1JQgkJU05NUF9PSURfU05NUE1PRFVMRVMsIDE2CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jCmluZGV4IDVjZWYxY2YuLjcyYTUwM2YgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jCkBAIC00Niw2ICs0Niw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlICJyb3V0ZV9oZWFkZXJzLmgiCiAjZGVmaW5lIENBQ0hFX1RJTUUgKDEyMCkgICAgICAgIC8qIFNlY29uZHMgKi8KQEAgLTYzLDYgKzY0LDggQEAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihnZXRfcm91dGVzLCBsaWJuZXRzbm1wbWlicykKKwogI2lmbmRlZiAgTUlOCiAjZGVmaW5lICBNSU4oYSxiKSAgICAgICAgICAgICAgICAgICAgICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKICNlbmRpZgpAQCAtMzEzLDE3ICszMTYsMTkgQEAKIHN0YXRpYyBtaWJfaXBSb3V0ZUVudCAqcnQgPSAobWliX2lwUm91dGVFbnQgKikgMDsKIHN0YXRpYyB2b2lkICAgICBSb3V0ZV9TY2FuX1JlbG9hZCh2b2lkKTsKICNlbGlmICFkZWZpbmVkKHNvbGFyaXMyKQotc3RhdGljIFJURU5UUlkgKipydGhlYWQgPSAwOworc3RhdGljIFJURU5UUlkgKipydGhlYWQgPSBOVUxMOwogc3RhdGljIGludCAgICAgIHJ0c2l6ZSA9IDAsIHJ0YWxsb2NhdGUgPSAwOwogCiBzdGF0aWMgdm9pZCAgICAgUm91dGVfU2Nhbl9SZWxvYWQodm9pZCk7CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfUk9VVEVTCiBSVEVOVFJZICoqbmV0c25tcF9nZXRfcm91dGVzKHNpemVfdCAqc2l6ZSkgewogICAgIFJvdXRlX1NjYW5fUmVsb2FkKCk7CiAgICAgaWYgKHNpemUpCiAgICAgICAgICpzaXplID0gcnRzaXplOwogICAgIHJldHVybiBydGhlYWQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfUk9VVEVTICovCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhwdXgxMSAqLwogCiAjaWYgIShkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKHNvbGFyaXMyKSB8fCBkZWZpbmVkKGhwdXgxMSkpICYmIGRlZmluZWQoUlRIT1NUX1NZTUJPTCkgJiYgZGVmaW5lZChSVE5FVF9TWU1CT0wpCkBAIC00MzIsNyArNDM3LDggQEAKICAgICAgKiBJUEFERFIgc3RhcnRzIGF0IG9mZnNldCAxMC4KICAgICAgKi8KICAgICByZWdpc3RlciBpbnQgICAgU2F2ZV9WYWxpZCwgcmVzdWx0LCBSdEluZGV4OwotICAgIHN0YXRpYyBpbnQgICAgICBzYXZlTmFtZUxlbiA9IDAsIHNhdmVFeGFjdCA9IDAsIHNhdmVSdEluZGV4ID0gMDsKKyAgICBzdGF0aWMgc2l6ZV90ICAgc2F2ZU5hbWVMZW4gPSAwOworICAgIHN0YXRpYyBpbnQgICAgICBzYXZlRXhhY3QgPSAwLCBzYXZlUnRJbmRleCA9IDA7CiAgICAgc3RhdGljIG9pZCAgICAgIHNhdmVOYW1lW01BWF9PSURfTEVOXSwgQ3VycmVudFtNQVhfT0lEX0xFTl07CiAgICAgdV9jaGFyICAgICAgICAgKmNwOwogICAgIG9pZCAgICAgICAgICAgICpvcDsKQEAgLTc2Miw2ICs3NjgsMTAgQEAKICAgICAgICAgaWYgKGdldE1pYnN0YXQoTUlCX0lQX1JPVVRFLCAmZW50cnksIHNpemVvZihtaWIyX2lwUm91dGVFbnRyeV90KSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3R5cGUsICZJUF9DbXBfUm91dGUsICZOZXh0ZW50cnkpICE9IDApCiAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBIQVZFX0RFRklORURfSVJFX0NBQ0hFCisgICAgICAgIGlmKGVudHJ5LmlwUm91dGVJbmZvLnJlX2lyZV90eXBlJklSRV9DQUNIRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUgKi8KICAgICAgICAgQ09QWV9JUEFERFIoY3AsICh1X2NoYXIgKikgJiBlbnRyeS5pcFJvdXRlRGVzdCwgb3AsCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgKyBJUF9ST1VURUFERFJfT0ZGKTsKICAgICAgICAgaWYgKGV4YWN0KSB7CkBAIC04NjUsNyArODc1LDcgQEAKIHN0YXRpYyBpbnQgICAgICBxc29ydF9jb21wYXJlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChSVEVOVFJZXzRfNCkgfHwgZGVmaW5lZChSVEVOVFJZX1JUX05FWFQpIHx8IGRlZmluZWQoaHB1eDExKQorI2lmIGRlZmluZWQoUlRFTlRSWV80XzQpIHx8IGRlZmluZWQoUlRFTlRSWV9SVF9ORVhUKSB8fCBkZWZpbmVkIChocHV4MTEpCiAKICNpZiBkZWZpbmVkKFJURU5UUllfNF80KSAmJiAhZGVmaW5lZChocHV4MTEpCiB2b2lkCkBAIC04NzUsNyArODg1LDcgQEAKICAgICBSVEVOVFJZICAgICAgICAgcnQ7CiAgICAgc3RydWN0IGlmbmV0ICAgIGlmbmV0OwogICAgIGNoYXIgICAgICAgICAgICBuYW1lWzE2XSwgdGVtcFsxNl07Ci0jaWYgIVNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUKKyNpZiAhSEFWRV9TVFJVQ1RfSUZORVRfSUZfWE5BTUUKICAgICByZWdpc3RlciBjaGFyICAqY3A7CiAjZW5kaWYKIApAQCAtOTA4LDcgKzkxOCw3IEBACiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL3Zhcl9yb3V0ZSIsICJrbG9va3VwIGZhaWxlZFxuIikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1hOQU1FCisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfWE5BTUUKICNpZiBkZWZpbmVkKG5ldGJzZDEpIHx8IGRlZmluZWQob3BlbmJzZDIpCiAgICAgICAgICAgICBzdHJsY3B5KG5hbWUsIGlmbmV0LmlmX3huYW1lLCBzaXplb2YobmFtZSkpOwogI2Vsc2UKQEAgLTkxOSw2ICs5MjksMTAgQEAKICNlbmRpZgogICAgICAgICAgICAgbmFtZVtzaXplb2YobmFtZSkgLSAxXSA9ICdcMCc7CiAjZWxzZQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lOCisgICAgICAgICAgICAvKiB0aGlzIGV4aXN0cyBoZXJlIGp1c3Qgc28gd2UgZG9uJ3QgY29weSBpZmRlZiBsb2dpYyBlbHNld2hlcmUgKi8KKyAgICAgICAgICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ19hcHBlbmRfaW50KTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKCFORVRTTk1QX0tMT09LVVAoaWZuZXQuaWZfbmFtZSwgbmFtZSwgc2l6ZW9mIG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL3Zhcl9yb3V0ZSIsICJrbG9va3VwIGZhaWxlZFxuIikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTkyNyw2ICs5NDEsOSBAQAogICAgICAgICAgICAgY3AgPSAoY2hhciAqKSBzdHJjaHIobmFtZSwgJ1wwJyk7CiAgICAgICAgICAgICBzdHJpbmdfYXBwZW5kX2ludChjcCwgaWZuZXQuaWZfdW5pdCk7CiAjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTgorICAgICAgICAgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW50ZXJmYWNlX2xlZ2FjeSkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTiAqLwogICAgICAgICAgICAgSW50ZXJmYWNlX1NjYW5fSW5pdCgpOwogICAgICAgICAgICAgcnQucnRfdW5pdCA9IDA7CiAgICAgICAgICAgICB3aGlsZSAoSW50ZXJmYWNlX1NjYW5fTmV4dApAQCAtMTAzMSwxMCArMTA0OCwxMCBAQAogICAgIGNoYXIgICAgICAgICAgICBuYW1lWzE2XSwgdGVtcFsxNl07CiAgICAgaW50ICAgICAgICAgICAgIGhhc2hzaXplOwogI2VuZGlmCi0gICAgc3RhdGljIGludCAgICAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQgPSAwOworICAgIHN0YXRpYyB0aW1lX3QgICBUaW1lX09mX0xhc3RfUmVsb2FkOwogICAgIHN0cnVjdCB0aW1ldmFsICBub3c7CiAKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CiAgICAgaWYgKFRpbWVfT2ZfTGFzdF9SZWxvYWQgKyBDQUNIRV9USU1FID4gbm93LnR2X3NlYykKICAgICAgICAgcmV0dXJuOwogICAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQgPSBub3cudHZfc2VjOwpAQCAtMTA3Niw2ICsxMDkzLDExIEBACiAgICAgfQogCiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJ0ZW50cnkgaXMgYSBCU0QgNC4zIGNvbXBhdCAqLworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lOCisgICAgLyogdGhpcyBleGlzdHMgaGVyZSBqdXN0IHNvIHdlIGRvbid0IGNvcHkgaWZkZWYgbG9naWMgZWxzZXdoZXJlICovCisgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3RyaW5nX2FwcGVuZF9pbnQpOworICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9sZWdhY3kpCisjZW5kaWYKICAgICBmb3IgKHRhYmxlID0gMDsgdGFibGUgPCBOVU1fUk9VVEVfU1lNQk9MUzsgdGFibGUrKykgewogICAgICAgICBhdXRvX25saXN0KFJUSEFTSFNJWkVfU1lNQk9MLCAoY2hhciAqKSAmaGFzaHNpemUsCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGhhc2hzaXplKSk7CkBAIC0xMTYwLDYgKzExODIsOCBAQAogI2Vsc2UKIAogI2lmIEhBVkVfU1lTX01CVUZfSAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3RyaW5nX2FwcGVuZF9pbnQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpbnRlcmZhY2VfbGVnYWN5KQogc3RhdGljIHZvaWQKIFJvdXRlX1NjYW5fUmVsb2FkKHZvaWQpCiB7CkBAIC0xMTcwLDExICsxMTk0LDExIEBACiAgICAgaW50ICAgICAgICAgICAgIGksIHRhYmxlOwogICAgIHJlZ2lzdGVyIGNoYXIgICpjcDsKICAgICBjaGFyICAgICAgICAgICAgbmFtZVsxNl0sIHRlbXBbMTZdOwotICAgIHN0YXRpYyBpbnQgICAgICBUaW1lX09mX0xhc3RfUmVsb2FkID0gMDsKKyAgICBzdGF0aWMgdGltZV90ICAgVGltZV9PZl9MYXN0X1JlbG9hZDsKICAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwogICAgIGludCAgICAgICAgICAgICBoYXNoc2l6ZTsKIAotICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKICAgICBpZiAoVGltZV9PZl9MYXN0X1JlbG9hZCArIENBQ0hFX1RJTUUgPiBub3cudHZfc2VjKQogICAgICAgICByZXR1cm47CiAgICAgVGltZV9PZl9MYXN0X1JlbG9hZCA9IG5vdy50dl9zZWM7CkBAIC0xMjg2LDEwICsxMzEwLDEwIEBACiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbMjU2XTsKICAgICBzdHJ1Y3QgcnRlbnRyeSAqcnQ7CiAgICAgY2hhciAgICAgICAgICAgIG5hbWVbMTZdOwotICAgIHN0YXRpYyBpbnQgICAgICBUaW1lX09mX0xhc3RfUmVsb2FkID0gMDsKKyAgICBzdGF0aWMgdGltZV90ICAgVGltZV9PZl9MYXN0X1JlbG9hZDsKICAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwogCi0gICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOwogICAgIGlmIChUaW1lX09mX0xhc3RfUmVsb2FkICsgQ0FDSEVfVElNRSA+IG5vdy50dl9zZWMpCiAgICAgICAgIHJldHVybjsKICAgICBUaW1lX09mX0xhc3RfUmVsb2FkID0gbm93LnR2X3NlYzsKQEAgLTEzMTMsMTUgKzEzMzcsMTUgQEAKICAgICBydHNpemUgPSAwOwogCiAgICAgaWYgKCEoaW4gPSBmb3BlbigiL3Byb2MvbmV0L3JvdXRlIiwgInIiKSkpIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9yb3V0ZSAtIGJ1cnBzXG4iKTsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L3JvdXRlIC0gYnVycHNcbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBzdHJ1Y3QgcnRlbnRyeSAgcnRlbnQ7CiAgICAgICAgIGNoYXIgICAgICAgICAgICBydGVudF9uYW1lWzMyXTsKLSAgICAgICAgaW50ICAgICAgICAgICAgIHJlZmNudCwgZmxhZ3MsIG1ldHJpYzsKLSAgICAgICAgdW5zaWduZWQgICAgICAgIHVzZTsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlZmNudCwgbWV0cmljOworICAgICAgICB1bnNpZ25lZCAgICAgICAgZmxhZ3MsIHVzZTsKIAogICAgICAgICBydCA9ICZydGVudDsKICAgICAgICAgbWVtc2V0KChjaGFyICopIHJ0LCAoMCksIHNpemVvZigqcnQpKTsKQEAgLTEzMzIsMTggKzEzNTYsMTUgQEAKICAgICAgICAgICogSWZhY2UgRGVzdCBHVyBGbGFncyBSZWZDbnQgVXNlIE1ldHJpYyBNYXNrIE1UVSBXaW4gSVJUVAogICAgICAgICAgKiBldGgwIDBBMEEwQTBBIDAwMDAwMDAwIDA1IDAgMCAwIEZGRkZGRkZGIDE1MDAgMCAwIAogICAgICAgICAgKi8KLSAgICAgICAgaWYgKDggIT0gc3NjYW5mKGxpbmUsICIlcyAleCAleCAleCAldSAlZCAlZCAleCAlKmQgJSpkICUqZFxuIiwKKyAgICAgICAgaWYgKDggIT0gc3NjYW5mKGxpbmUsICIlcyAleCAleCAleCAlZCAldSAlZCAleCAlKmQgJSpkICUqZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHJ0LT5ydF9kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAmKCgoc3RydWN0IHNvY2thZGRyX2luICopICYocnRlbnQucnRfZHN0KSktPgotICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5fYWRkci5zX2FkZHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKHJ0ZW50LnJ0X2dhdGV3YXkpKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbl9hZGRyLnNfYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAmKCgoc3RydWN0IHNvY2thZGRyX2luICopICYocnRlbnQucnRfZHN0KSktPnNpbl9hZGRyLnNfYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAmKCgoc3RydWN0IHNvY2thZGRyX2luICopICYocnRlbnQucnRfZ2F0ZXdheSkpLT5zaW5fYWRkci5zX2FkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAqIFhYWDogZml4IHR5cGUgb2YgdGhlIGFyZ3MgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFncywgJnJlZmNudCwgJnVzZSwgJm1ldHJpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihydGVudC5ydF9nZW5tYXNrKSktPgotICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5fYWRkci5zX2FkZHIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihydGVudC5ydF9nZW5tYXNrKSktPnNpbl9hZGRyLnNfYWRkcikpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgc3RybGNweShuYW1lLCBydC0+cnRfZGV2LCBzaXplb2YobmFtZSkpOwpAQCAtMTQ0Miw3ICsxNDYzLDcgQEAKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2xhcmlzMiAqLwogCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyIGN5Z3dpbiAqLworI2VsaWYgZGVmaW5lZChIQVZFX0lQSExQQVBJX0gpICAvKiBXSU4zMiBjeWd3aW4gKi8KICNpbmNsdWRlIDxpcGhscGFwaS5oPgogI2lmbmRlZiBNSUJfSVBQUk9UT19ORVRNR01UCiAjZGVmaW5lIE1JQl9JUFBST1RPX05FVE1HTVQgMwpAQCAtMTQ2Niw3ICsxNDg3LDcgQEAKICAgICAgKiAxLjMuNi4xLjIuMS40LjIxLjEuPy5BLkIuQy5ELCAgd2hlcmUgQS5CLkMuRCBpcyBJUCBhZGRyZXNzLgogICAgICAqIElQQUREUiBzdGFydHMgYXQgb2Zmc2V0IDEwLgogICAgICAqLwotICAgIHJlZ2lzdGVyIGludCAgICBTYXZlX1ZhbGlkLCByZXN1bHQsIFJ0SW5kZXg7CisgICAgcmVnaXN0ZXIgaW50ICAgIFNhdmVfVmFsaWQsIHJlc3VsdCwgUnRJbmRleCA9IDA7CiAgICAgc3RhdGljIGludCAgICAgIHNhdmVOYW1lTGVuID0gMCwgc2F2ZUV4YWN0ID0gMCwgc2F2ZVJ0SW5kZXggPQogICAgICAgICAwLCBydHNpemUgPSAwOwogICAgIHN0YXRpYyBvaWQgICAgICBzYXZlTmFtZVtNQVhfT0lEX0xFTl0sIEN1cnJlbnRbTUFYX09JRF9MRU5dOwpAQCAtMTQ3Niw5ICsxNDk3LDcgQEAKICAgICBEV09SRCAgICAgICAgICAgZHdBY3R1YWxTaXplID0gMDsKICAgICBzdGF0aWMgUE1JQl9JUEZPUldBUkRUQUJMRSBwSXBSdHJUYWJsZSA9IE5VTEw7CiAgICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKLSAgICBzdGF0aWMgbG9uZyAgICAgVGltZV9PZl9MYXN0X1JlbG9hZCA9IDA7Ci0gICAgdV9jaGFyICAgICAgICAgIGRlc3RfYWRkcls0XTsKLSAgICBNSUJfSVBGT1JXQVJEUk9XIHRlbXBfcm93OworICAgIHN0YXRpYyB0aW1lX3QgICAgVGltZV9PZl9MYXN0X1JlbG9hZDsKICAgICBzdGF0aWMgaW5fYWRkcl90IGFkZHJfcmV0OwogCiAKQEAgLTE0OTUsNyArMTUxNCw3IEBACiAgICAgICAgICAqLwogICAgICAgICByb3V0ZV9yb3cgPSAoUE1JQl9JUEZPUldBUkRST1cpIG1hbGxvYyhzaXplb2YoTUlCX0lQRk9SV0FSRFJPVykpOwogICAgIH0KLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CiAgICAgaWYgKChydHNpemUgPD0gMSkgfHwgKFRpbWVfT2ZfTGFzdF9SZWxvYWQgKyA1IDw9IG5vdy50dl9zZWMpKQogICAgICAgICBTYXZlX1ZhbGlkID0gMDsKICAgICBlbHNlCkBAIC0xNTczLDEyICsxNTkyLDE2IEBACiAgICAgICAgICAgICAgKiBmb3IgY3JlYXRpb24gb2YgbmV3IHJvdywgb25seSBpcE5ldFRvTWVkaWFUYWJsZSBjYXNlIGlzIGNvbnNpZGVyZWQgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICgqbGVuZ3RoID09IDE0KSB7CisgICAgICAgICAgICAgICAgdV9jaGFyICAgICAgICAgICBkZXN0X2FkZHJbNF07CisgICAgICAgICAgICAgICAgTUlCX0lQRk9SV0FSRFJPVyB0ZW1wX3JvdzsKKwogICAgICAgICAgICAgICAgIGNyZWF0ZV9mbGFnID0gMTsKICAgICAgICAgICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfcnRlOwogICAgICAgICAgICAgICAgIGRlc3RfYWRkclswXSA9ICh1X2NoYXIpIG5hbWVbMTBdOwogICAgICAgICAgICAgICAgIGRlc3RfYWRkclsxXSA9ICh1X2NoYXIpIG5hbWVbMTFdOwogICAgICAgICAgICAgICAgIGRlc3RfYWRkclsyXSA9ICh1X2NoYXIpIG5hbWVbMTJdOwogICAgICAgICAgICAgICAgIGRlc3RfYWRkclszXSA9ICh1X2NoYXIpIG5hbWVbMTNdOworICAgICAgICAgICAgICAgIG1lbXNldCgmdGVtcF9yb3csIDAsIHNpemVvZih0ZW1wX3JvdykpOwogICAgICAgICAgICAgICAgIHRlbXBfcm93LmR3Rm9yd2FyZERlc3QgPSAqKChEV09SRCAqKSBkZXN0X2FkZHIpOwogICAgICAgICAgICAgICAgIHRlbXBfcm93LmR3Rm9yd2FyZFBvbGljeSA9IDA7CiAgICAgICAgICAgICAgICAgdGVtcF9yb3cuZHdGb3J3YXJkUHJvdG8gPSBNSUJfSVBQUk9UT19ORVRNR01UOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmggYi9hZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuaAppbmRleCA5MWVjZWU4Li43ODYyYzQzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuaApAQCAtNSw3ICs1LDcgQEAKICNpZm5kZWYgX01JQkdST1VQX1ZBUl9ST1VURV9ICiAjZGVmaW5lIF9NSUJHUk9VUF9WQVJfUk9VVEVfSAogCi1jb25maWdfcmVxdWlyZShtaWJJSS9pcCB1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUobWliSUkvaXApCiBjb25maWdfYXJjaF9yZXF1aXJlKHNvbGFyaXMyLCBrZXJuZWxfc3Vub3M1KQogCiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X3Zhcl9yb3V0ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYmluY2wuaCBiL2FnZW50L21pYmdyb3VwL21pYmluY2wuaAppbmRleCAyOGVkNTk5Li4zZDQ4NzY4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJpbmNsLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliaW5jbC5oCkBAIC0xMiwxMSArMTIsNyBAQAogI2luY2x1ZGUgPG1hbGxvYy5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYyBiL2FnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jCmluZGV4IDY2M2E1ZTUuLmNjYTk4NzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogI2luY2x1ZGUgImlwZndhY2MuaCIKIAogLyoKQEAgLTE4NSw0MCArMTg1LDU4IEBACiAgKi8KIAogc3RydWN0IHZhcmlhYmxlMiBpcGZ3YWNjX3ZhcmlhYmxlc1tdID0gewotICAgIHtJUEZXQUNDSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDSU5ERVh9fSwKLSAgICB7SVBGV0FDQ1NSQ0FERFIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwKLSAgICAge0lQRldBQ0NTUkNBRERSfX0sCi0gICAge0lQRldBQ0NTUkNOTSwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1NSQ05NfX0sCi0gICAge0lQRldBQ0NEU1RBRERSLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2lwZndhY2MsIDEsCi0gICAgIHtJUEZXQUNDRFNUQUREUn19LAotICAgIHtJUEZXQUNDRFNUTk0sIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NEU1ROTX19LAotICAgIHtJUEZXQUNDVklBTkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLAotICAgICB7SVBGV0FDQ1ZJQU5BTUV9fSwKLSAgICB7SVBGV0FDQ1ZJQUFERFIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwKLSAgICAge0lQRldBQ0NWSUFBRERSfX0sCi0gICAge0lQRldBQ0NQUk9UTywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQUk9UT319LAotICAgIHtJUEZXQUNDQklESVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDQklESVJ9fSwKLSAgICB7SVBGV0FDQ0RJUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NESVJ9fSwKLSAgICB7SVBGV0FDQ0JZVEVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0JZVEVTfX0sCi0gICAge0lQRldBQ0NQQUNLRVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BBQ0tFVFN9fSwKLSAgICB7SVBGV0FDQ05TUkNQUlRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLAotICAgICB7SVBGV0FDQ05TUkNQUlRTfX0sCi0gICAge0lQRldBQ0NORFNUUFJUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwKLSAgICAge0lQRldBQ0NORFNUUFJUU319LAotICAgIHtJUEZXQUNDU1JDSVNSTkcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsCi0gICAgIHtJUEZXQUNDU1JDSVNSTkd9fSwKLSAgICB7SVBGV0FDQ0RTVElTUk5HLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLAotICAgICB7SVBGV0FDQ0RTVElTUk5HfX0sCi0gICAge0lQRldBQ0NQT1JUMSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUMX19LAotICAgIHtJUEZXQUNDUE9SVDIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDJ9fSwKLSAgICB7SVBGV0FDQ1BPUlQzLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQzfX0sCi0gICAge0lQRldBQ0NQT1JUNCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUNH19LAotICAgIHtJUEZXQUNDUE9SVDUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDV9fSwKLSAgICB7SVBGV0FDQ1BPUlQ2LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ2fX0sCi0gICAge0lQRldBQ0NQT1JUNywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUN319LAotICAgIHtJUEZXQUNDUE9SVDgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDh9fSwKLSAgICB7SVBGV0FDQ1BPUlQ5LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ5fX0sCi0gICAge0lQRldBQ0NQT1JUMTAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDEwfX0KKyAgICB7SVBGV0FDQ0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0lOREVYfX0sCisgICAge0lQRldBQ0NTUkNBRERSLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDU1JDQUREUn19LAorICAgIHtJUEZXQUNDU1JDTk0sIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NTUkNOTX19LAorICAgIHtJUEZXQUNDRFNUQUREUiwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0RTVEFERFJ9fSwKKyAgICB7SVBGV0FDQ0RTVE5NLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDRFNUTk19fSwKKyAgICB7SVBGV0FDQ1ZJQU5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NWSUFOQU1FfX0sCisgICAge0lQRldBQ0NWSUFBRERSLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDVklBQUREUn19LAorICAgIHtJUEZXQUNDUFJPVE8sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUFJPVE99fSwKKyAgICB7SVBGV0FDQ0JJRElSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0JJRElSfX0sCisgICAge0lQRldBQ0NESVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDRElSfX0sCisgICAge0lQRldBQ0NCWVRFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NCWVRFU319LAorICAgIHtJUEZXQUNDUEFDS0VUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQQUNLRVRTfX0sCisgICAge0lQRldBQ0NOU1JDUFJUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NOU1JDUFJUU319LAorICAgIHtJUEZXQUNDTkRTVFBSVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDTkRTVFBSVFN9fSwKKyAgICB7SVBGV0FDQ1NSQ0lTUk5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1NSQ0lTUk5HfX0sCisgICAge0lQRldBQ0NEU1RJU1JORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NEU1RJU1JOR319LAorICAgIHtJUEZXQUNDUE9SVDEsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDF9fSwKKyAgICB7SVBGV0FDQ1BPUlQyLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQyfX0sCisgICAge0lQRldBQ0NQT1JUMywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUM319LAorICAgIHtJUEZXQUNDUE9SVDQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDR9fSwKKyAgICB7SVBGV0FDQ1BPUlQ1LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ1fX0sCisgICAge0lQRldBQ0NQT1JUNiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUNn19LAorICAgIHtJUEZXQUNDUE9SVDcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDd9fSwKKyAgICB7SVBGV0FDQ1BPUlQ4LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ4fX0sCisgICAge0lQRldBQ0NQT1JUOSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUOX19LAorICAgIHtJUEZXQUNDUE9SVDEwLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQxMH19CiB9OwogCiBvaWQgICAgICAgICAgICAgaXBmd2FjY192YXJpYWJsZXNfb2lkW10gPQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmggYi9hZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuaAppbmRleCBkOWI2ZTYxLi42MzljNzM5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuaAorKysgYi9hZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuaApAQCAtNiwxMCArNiwxMCBAQAogI2RlZmluZSBfTUlCR1JPVVBfSVBGV0FDQ19ICiAKIC8qCi0gKiB3ZSB1c2UgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCisgKiB3ZSB1c2UgaGVhZGVyX3NpbXBsZV90YWJsZSBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZQogICovCiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCiAKICAgICAvKgogICAgICAqIGFkZCB0aGUgbWliIHdlIGltcGxlbWVudCB0byB0aGUgbGlzdCBvZiBkZWZhdWx0IG1pYnMgdG8gbG9hZCAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYyBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYwppbmRleCA5YjFmZjUxLi5hMTJhMzM4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSApAQCAtMTYsOSArMTcsMTUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0Lmg+Ci0jaW5jbHVkZSAibWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oIgorI2luY2x1ZGUgIm5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaCIKICNpbmNsdWRlICJub3RpZmljYXRpb25fbG9nLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlZ2lzdGVyX3Vsb25nX2luc3RhbmNlX2NvbnRleHQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlX2NvbnRleHQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkZWxldGVfdGFibGVfZGF0YV9zZXQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGF0ZV9uX3RpbWUpCisKIC8qCiAgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBubG1Mb2dUYWJsZQogICovCkBAIC0xNDMsMTEgKzE1MCwxMSBAQAogICAgICAqLwogICAgIGNvdW50ID0gbmV0c25tcF90YWJsZV9zZXRfbnVtX3Jvd3MobmxtTG9nVGFibGUpOwogICAgIERFQlVHTVNHVEwoKCJub3RpZmljYXRpb25fbG9nIiwKLSAgICAgICAgICAgICAgICAibG9nZ2VkIG5vdGlmaWNhdGlvbnMgJWQ7IG1heCAlZFxuIiwKKyAgICAgICAgICAgICAgICAibG9nZ2VkIG5vdGlmaWNhdGlvbnMgJWx1OyBtYXggJWx1XG4iLAogICAgICAgICAgICAgICAgICAgICBjb3VudCwgbWF4X2xvZ2dlZCkpOwogICAgIGlmIChjb3VudCA+IG1heF9sb2dnZWQpIHsKICAgICAgICAgY291bnQgPSBjb3VudCAtIG1heF9sb2dnZWQ7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJub3RpZmljYXRpb25fbG9nIiwgInJlbW92aW5nICVkIGV4dHJhIG5vdGlmaWNhdGlvbnNcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJub3RpZmljYXRpb25fbG9nIiwgInJlbW92aW5nICVsdSBleHRyYSBub3RpZmljYXRpb25zXG4iLAogICAgICAgICAgICAgICAgICAgICBjb3VudCkpOwogICAgICAgICBuZXRzbm1wX25vdGlmX2xvZ19yZW1vdmVfb2xkZXN0KGNvdW50KTsKICAgICB9CkBAIC0xNjUsMTMgKzE3MiwxMyBAQAogICAgICAgICBkYXRhID0gKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqKSByb3ctPmRhdGE7CiAgICAgICAgIGRhdGEgPSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2ZpbmRfY29sdW1uKGRhdGEsIENPTFVNTl9OTE1MT0dUSU1FKTsKIAotICAgICAgICBpZiAodXB0aW1lIDwgKChsb25nKSgqKGRhdGEtPmRhdGEuaW50ZWdlcikgKyBtYXhfYWdlICogMTAwICogNjApKSkKKyAgICAgICAgaWYgKHVwdGltZSA8ICgodV9sb25nKSgqKGRhdGEtPmRhdGEuaW50ZWdlcikgKyBtYXhfYWdlICogMTAwICogNjApKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK2NvdW50OwogICAgIH0KIAogICAgIGlmIChjb3VudCkgewotICAgICAgICBERUJVR01TR1RMKCgibm90aWZpY2F0aW9uX2xvZyIsICJyZW1vdmluZyAlZCBleHBpcmVkIG5vdGlmaWNhdGlvbnNcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJub3RpZmljYXRpb25fbG9nIiwgInJlbW92aW5nICVsdSBleHBpcmVkIG5vdGlmaWNhdGlvbnNcbiIsCiAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CiAgICAgICAgIG5ldHNubXBfbm90aWZfbG9nX3JlbW92ZV9vbGRlc3QoY291bnQpOwogICAgIH0KQEAgLTQ2Nyw4ICs0NzQsMTAgQEAKICAgICAgKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBnZXQgc2V0IHRvIGEgdmFsdWUgYW5kIHRodXMKICAgICAgKiBub3RpZmljYXRpb25zIG11c3QgYmUgcG9zc2libHkgZGVsZXRlZCBmcm9tIG91ciBhcmNoaXZlcy4KICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfQ09NTUlUKQogICAgICAgICBjaGVja19sb2dfc2l6ZSgwLCBOVUxMKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKQEAgLTU2Miw3ICs1NzEsNyBAQAogICAgIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KG5sbUxvZ1RhYmxlKTsKICAgICBubG1Mb2dUYWJsZSA9IE5VTEw7CiAKLSAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGUobmxtX21vZHVsZV9vaWQsIE9JRF9MRU5HVEgobmxtX21vZHVsZV9vaWQpKTsKKyAgICBVTlJFR0lTVEVSX1NZU09SX0VOVFJZKG5sbV9tb2R1bGVfb2lkKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMKaW5kZXggODk3MzU0Ni4uZTliMTFkMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jCkBAIC0xMCw5ICsxMCw2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgpAQCAtMjYsMTIgKzIzLDE2IEBACiAvKgogICogbWluaW1hbCBpbmNsdWRlIGRpcmVjdGl2ZXMgCiAgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgImhlYWRlcl9jb21wbGV4LmgiCiAjaW5jbHVkZSAic25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oIgogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVhZGVyX2NvbXBsZXhfZmluZF9lbnRyeSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoKICAqIHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGVfdmFyaWFibGVzX29pZDoKQEAgLTU3LDEzICs1OCwxMyBAQAogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgU05NUE5PVElGWUZJTFRFUlBST0ZJTEVOQU1FICAzCi0gICAge1NOTVBOT1RJRllGSUxURVJQUk9GSUxFTkFNRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtTTk1QTk9USUZZRklMVEVSUFJPRklMRU5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUsIDIsIHsxLCAxfX0sCiAjZGVmaW5lICAgU05NUE5PVElGWUZJTFRFUlBST0ZJTEVTVE9SVFlQRSAgNAotICAgIHtTTk1QTk9USUZZRklMVEVSUFJPRklMRVNUT1JUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QTk9USUZZRklMVEVSUFJPRklMRVNUT1JUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUgICBTTk1QTk9USUZZRklMVEVSUFJPRklMRVJPV1NUQVRVUyAgNQotICAgIHtTTk1QTk9USUZZRklMVEVSUFJPRklMRVJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUE5PVElGWUZJTFRFUlBST0ZJTEVST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLCAyLCB7MSwgM319LAogCiB9OwpAQCAtMTM0LDcgKzEzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGhlZGF0YSkKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMgPSBOVUxMOwotCisgICAgaW50IHJldFZhbDsKIAogICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlIiwgImFkZGluZyBkYXRhLi4uICAiKSk7CiAgICAgLyoKQEAgLTE0NiwxMyArMTQ3LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRoZWRhdGEtPnNubXBUYXJnZXRQYXJhbXNOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+c25tcFRhcmdldFBhcmFtc05hbWVMZW4pOwogCi0gICAgaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoJnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGVTdG9yYWdlLCB2YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEpOwotICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlIiwgInJlZ2lzdGVyZWQgYW4gZW50cnlcbiIpKTsKKyAgICBpZiAoaGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGEoJnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGVTdG9yYWdlLCB2YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLCAxKSAhPSBOVUxMKXsKKyAgICAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSIsICJyZWdpc3RlcmVkIGFuIGVudHJ5XG4iKSk7CisgICAgICAgcmV0VmFsID0gU05NUEVSUl9TVUNDRVNTOworICAgIH1lbHNleworICAgICAgIHJldFZhbCA9IFNOTVBFUlJfR0VORVJSOyAgCQorICAgIH0KIAogCiAgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUiLCAiZG9uZS5cbiIpKTsKLSAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgIHJldHVybiByZXRWYWw7CiB9CiAKIApAQCAtMjAzLDcgKzIwOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0b3JhZ2VUbXAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcE5vdGlmeUZpbHRlclByb2ZpbGVSb3dTdGF0dXMsICZ0bXBpbnQpOwogCi0gICAgc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZV9hZGQoU3RvcmFnZVRtcCk7CisgICAgaWYgKHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGVfYWRkKFN0b3JhZ2VUbXApICE9IFNOTVBFUlJfU1VDQ0VTUyl7CisgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSk7CisgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT5zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWUpOworICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcCk7CisgICAgfQogCiAgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUiLCAiZG9uZS5cbiIpKTsKIH0KQEAgLTIyMSw3ICsyMzAsNiBAQAogewogICAgIGNoYXIgICAgICAgICAgICBsaW5lW1NOTVBfTUFYQlVGXTsKICAgICBjaGFyICAgICAgICAgICAqY3B0cjsKLSAgICBzaXplX3QgICAgICAgICAgdG1waW50OwogICAgIHN0cnVjdCBzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlX2RhdGEgKlN0b3JhZ2VUbXA7CiAgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2luZGV4OwogCkBAIC0yNTUsMTIgKzI2MywxMiBAQAogICAgICAgICAgICAgICAgIHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX0lOVEVHRVIsIGNwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZVRtcC0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVN0b3JUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcGludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgICAgIGNwdHIgPQogICAgICAgICAgICAgICAgIHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX0lOVEVHRVIsIGNwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZVRtcC0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVJvd1N0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKICAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKICAgICAgICAgfQpAQCAtMzA0LDYgKzMxMiw3IEBACiAgICAgfQogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QTk9USUZZRklMVEVSUFJPRklMRU5BTUU6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMzE1LDcgKzMyNCw3IEBACiAgICAgY2FzZSBTTk1QTk9USUZZRklMVEVSUFJPRklMRVJPV1NUQVRVUzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlUm93U3RhdHVzOwogICAgICAgICBicmVhazsKLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gTlVMTDsKICAgICB9CkBAIC0zNDUsNiArMzU0LDcgQEAKICAgICBkZWZhdWx0OgogICAgICAgICBFUlJPUl9NU0coIiIpOwogICAgIH0KKwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0zNTIsNiArMzYyLDggQEAKIAogc3RhdGljIHN0cnVjdCBzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlX2RhdGEgKlN0b3JhZ2VOZXc7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAorCiBpbnQKIHdyaXRlX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZShpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC00MDIsNyArNDE0LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIHRtcHZhciA9IFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZTsKICAgICAgICAgdG1wbGVuID0gU3RvcmFnZVRtcC0+c25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lTGVuOwotICAgICAgICBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWUgPSBjYWxsb2MoMSwgdmFyX3ZhbF9sZW4gKyAxKTsKKyAgICAgICAgU3RvcmFnZVRtcC0+c25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lID0gKGNoYXIqKWNhbGxvYygxLCB2YXJfdmFsX2xlbiArIDEpOwogICAgICAgICBpZiAoTlVMTCA9PSBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWUpCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKICAgICAgICAgYnJlYWs7CkBAIC00NDIsNiArNDU0LDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTUzNCw3ICs1NDcsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC02NDksNiArNjYyLDggQEAKIAogICAgICAgICAgICAgU3RvcmFnZU5ldyA9CiAgICAgICAgICAgICAgICAgU05NUF9NQUxMT0NfU1RSVUNUKHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGVfZGF0YSk7CisgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSA9CiAgICAgICAgICAgICAgICAgbmV0c25tcF9tZW1kdXAodmFycy0+dmFsLnN0cmluZywgdmFycy0+dmFsX2xlbik7CiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZUxlbiA9IHZhcnMtPnZhbF9sZW47CkBAIC03ODUsMTIgKzgwMCwxNSBAQAogICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlUm93U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOwogICAgICAgICAgICAgU3RvcmFnZU5ldyA9IE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAogCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKKwogCiBjaGFyICAgICAgICAgICAqCiBnZXRfRmlsdGVyUHJvZmlsZU5hbWUoY29uc3QgY2hhciAqcGFyYW1OYW1lLCBzaXplX3QgcGFyYW1OYW1lX2xlbiwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oCmluZGV4IDk3MzRjYmUuLjYxNmJjZGMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaApAQCAtNTUsOSArNTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKTsKICAgICAgU05NUENhbGxiYWNrICAgIHN0b3JlX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGU7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVTdG9yVHlwZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlUm93U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICBjaGFyICAgICAgICAgICAqZ2V0X0ZpbHRlclByb2ZpbGVOYW1lKGNvbnN0IGNoYXIgKnBhcmFtTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFyYW1OYW1lX2xlbiwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYwppbmRleCAzZDNlNDAxLi45MWFkYjJmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jCkBAIC04LDExICs4LDkgQEAKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgpAQCAtMzgsMTIgKzM2LDE2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg+Ci0jaW5jbHVkZSAibWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oIgorI2luY2x1ZGUgIm5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaCIKIAogI2lmZGVmIFVTSU5HX05PVElGSUNBVElPTl9MT0dfTUlCX05PVElGSUNBVElPTl9MT0dfTU9EVUxFCiAjICAgaW5jbHVkZSAibm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oIgogI2VuZGlmCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiBTTk1QQ2FsbGJhY2sgICAgc3RvcmVfc25tcE5vdGlmeVRhYmxlOwogCiAvKgpAQCAtNjAsMTEgKzYyLDYgQEAKIHN0YXRpYyBvaWQgc25tcE5vdGlmeUZ1bGxDb21wbGlhbmNlW10gPQogICAgIHsgU05NUF9PSURfU05NUE1PRFVMRVMsIDEzLCAzLCAxLCAzIH07IC8qIFNOTVAtTk9USUZJQ0FUSU9OLU1JQjo6c25tcE5vdGlmeUZ1bGxDb21wbGlhbmNlICovCiAKLXZvaWQgc2h1dGRvd25fc25tcE5vdGlmeVRhYmxlKHZvaWQpCi17Ci0gICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlKHNubXBOb3RpZnlGdWxsQ29tcGxpYW5jZSwgT0lEX0xFTkdUSChzbm1wTm90aWZ5RnVsbENvbXBsaWFuY2UpKTsKLX0KLQogCiAvKgogICogdmFyaWFibGUyIHNubXBOb3RpZnlUYWJsZV92YXJpYWJsZXM6CkBAIC03OCwxNSArNzUsMTcgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIFNOTVBOT1RJRllUQUcgICAgICAgICA0Ci0gICAge1NOTVBOT1RJRllUQUcsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3NubXBOb3RpZnlUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7U05NUE5PVElGWVRBRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfc25tcE5vdGlmeVRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZSAgIFNOTVBOT1RJRllUWVBFICAgICAgICA1Ci0gICAge1NOTVBOT1RJRllUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfc25tcE5vdGlmeVRhYmxlLCAyLCB7MSwgM319LAorICAgIHtTTk1QTk9USUZZVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3NubXBOb3RpZnlUYWJsZSwgMiwgezEsIDN9fSwKICNkZWZpbmUgICBTTk1QTk9USUZZU1RPUkFHRVRZUEUgIDYKLSAgICB7U05NUE5PVElGWVNUT1JBR0VUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfc25tcE5vdGlmeVRhYmxlLCAyLAotICAgICB7MSwgNH19LAorICAgIHtTTk1QTk9USUZZU1RPUkFHRVRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9zbm1wTm90aWZ5VGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lICAgU05NUE5PVElGWVJPV1NUQVRVUyAgIDcKLSAgICB7U05NUE5PVElGWVJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3NubXBOb3RpZnlUYWJsZSwgMiwKLSAgICAgezEsIDV9fSwKKyAgICB7U05NUE5PVElGWVJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3NubXBOb3RpZnlUYWJsZSwgMiwgezEsIDV9fSwKIAogfTsKIC8qCkBAIC0xMTAsOCArMTA5LDggQEAKICAgICBzaXplX3QgICAgICAgICAgICAgICAgIHByb2ZpbGVOYW1lTGVuOwogICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqdnAsICpoZWFkOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgdmJfb2lkX2V4Y2x1ZGVkID0gMDsKLSAgICBleHRlcm4gb2lkICAgICAgICAgICAgIHNubXB0cmFwX29pZFtdOwotICAgIGV4dGVybiBzaXplX3QgICAgICAgICAgc25tcHRyYXBfb2lkX2xlbjsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgIHNubXB0cmFwX29pZFtdOworICAgIGV4dGVybiBjb25zdCBzaXplX3QgICAgc25tcHRyYXBfb2lkX2xlbjsKIAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcGFyYW1OYW1lKTsKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHBkdSk7CkBAIC0yMTksNyArMjE4LDcgQEAKICAgICBuZXRzbm1wX3BkdSAgICAqdGVtcGxhdGVfcGR1ID0gKG5ldHNubXBfcGR1ICopIHNlcnZlcmFyZzsKICAgICBpbnQgICAgICAgICAgICAgY291bnQgPSAwLCBzZW5kID0gMDsKIAotICAgIERFQlVHTVNHVEwoKCJzZW5kX25vdGlmaWNhdGlvbnMiLCAic3RhcnRpbmc6IHBkdT0leCwgdmFycz0leFxuIiwKKyAgICBERUJVR01TR1RMKCgic2VuZF9ub3RpZmljYXRpb25zIiwgInN0YXJ0aW5nOiBwZHU9JXAsIHZhcnM9JXBcbiIsCiAgICAgICAgICAgICAgICAgdGVtcGxhdGVfcGR1LCB0ZW1wbGF0ZV9wZHUtPnZhcmlhYmxlcykpOwogCiAgICAgZm9yIChocHRyID0gc25tcE5vdGlmeVRhYmxlU3RvcmFnZTsgaHB0cjsgaHB0ciA9IGhwdHItPm5leHQpIHsKQEAgLTI4Niw3ICsyODUsNyBAQAogICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpwdHI7CiAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICpwcHRyOwogICAgIHN0cnVjdCBzbm1wTm90aWZ5VGFibGVfZGF0YSAqbnB0cjsKLSAgICBpbnQgICAgICAgICAgICAgY29uZmlybSwgaTsKKyAgICBpbnQgICAgICAgICAgICAgY29uZmlybSwgaSwgYnVmTGVuOwogICAgIGNoYXIgICAgICAgICAgICBidWZbU05NUF9NQVhCVUZfU01BTExdOwogICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKICAgICBzdHJ1Y3QgYWdlbnRfYWRkX3RyYXBfYXJncyAqYXJncyA9CkBAIC0zMDMsOCArMzAyLDkgQEAKICAgICAgKiBYWFg6IFNUQVJUIG1vdmUgdGFyZ2V0IGNyZWF0aW9uIHRvIHRhcmdldCBjb2RlIAogICAgICAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfRU5UUklFUzsgaSsrKSB7Ci0gICAgICAgIHNwcmludGYoYnVmLCAiaW50ZXJuYWwlZCIsIGkpOwotICAgICAgICBpZiAoZ2V0X2FkZHJGb3JOYW1lKGJ1ZikgPT0gTlVMTCAmJiBnZXRfcGFyYW1FbnRyeShidWYpID09IE5VTEwpCisgICAgICAgIGJ1ZkxlbiA9IHNwcmludGYoYnVmLCAiaW50ZXJuYWwlZCIsIGkpOworICAgICAgICBpZiAoZ2V0X2FkZHJGb3JOYW1lMihidWYsIGJ1ZkxlbikgPT0gTlVMTCAmJgorICAgICAgICAgICAgZ2V0X3BhcmFtRW50cnkoYnVmKSA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChpID09IE1BWF9FTlRSSUVTKSB7CkBAIC0zMjYsNyArMzI2LDggQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHB0ciA9IHNubXBUYXJnZXRBZGRyVGFibGVfY3JlYXRlKCk7Ci0gICAgcHRyLT5uYW1lID0gc3RyZHVwKGJ1Zik7CisgICAgcHRyLT5uYW1lRGF0YSA9IG5ldHNubXBfbWVtZHVwKGJ1ZiwgYnVmTGVuKTsKKyAgICBwdHItPm5hbWVMZW4gPSBidWZMZW47CiAgICAgbWVtY3B5KHB0ci0+dERvbWFpbiwgdC0+ZG9tYWluLCB0LT5kb21haW5fbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwogICAgIHB0ci0+dERvbWFpbkxlbiA9IHQtPmRvbWFpbl9sZW5ndGg7CiAgICAgcHRyLT50QWRkcmVzc0xlbiA9IHQtPnJlbW90ZV9sZW5ndGg7CkBAIC0zMzUsOCArMzM2LDggQEAKICAgICBwdHItPnRpbWVvdXQgPSBzcy0+dGltZW91dCAvIDEwMDAwOwogICAgIHB0ci0+cmV0cnlDb3VudCA9IHNzLT5yZXRyaWVzOwogICAgIFNOTVBfRlJFRShwdHItPnRhZ0xpc3QpOwotICAgIHB0ci0+dGFnTGlzdCA9IHN0cmR1cChwdHItPm5hbWUpOwotICAgIHB0ci0+cGFyYW1zID0gc3RyZHVwKHB0ci0+bmFtZSk7CisgICAgcHRyLT50YWdMaXN0ID0gc3RyZHVwKGJ1Zik7IC8qIHN0cmR1cCBvayBzaW5jZSBidWYgY29udGFpbnMgJ2ludGVybmFsJWQnICovCisgICAgcHRyLT5wYXJhbXMgPSBzdHJkdXAoYnVmKTsKICAgICBwdHItPnN0b3JhZ2VUeXBlID0gU1RfUkVBRE9OTFk7CiAgICAgcHRyLT5yb3dTdGF0dXMgPSBSU19BQ1RJVkU7CiAgICAgcHRyLT5zZXNzID0gc3M7CkBAIC0zNTMsNiArMzU0LDEwIEBACiAgICAgICAgIHBwdHItPnNlY01vZGVsID0gc3MtPnNlY3VyaXR5TW9kZWw7CiAgICAgICAgIHBwdHItPnNlY0xldmVsID0gc3MtPnNlY3VyaXR5TGV2ZWw7CiAgICAgICAgIHBwdHItPnNlY05hbWUgPSAoY2hhciAqKSBtYWxsb2Moc3MtPnNlY3VyaXR5TmFtZUxlbiArIDEpOworICAgICAgICBpZiAocHB0ci0+c2VjTmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKHBwdHIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgbWVtY3B5KCh2b2lkICopIHBwdHItPnNlY05hbWUsICh2b2lkICopIHNzLT5zZWN1cml0eU5hbWUsCiAgICAgICAgICAgICAgICBzcy0+c2VjdXJpdHlOYW1lTGVuKTsKICAgICAgICAgcHB0ci0+c2VjTmFtZVtzcy0+c2VjdXJpdHlOYW1lTGVuXSA9IDA7CkBAIC0zNjgsNiArMzczLDEwIEBACiAgICAgICAgIHBwdHItPnNlY05hbWUgPSBOVUxMOwogICAgICAgICBpZiAoc3MtPmNvbW11bml0eSAmJiAoc3MtPmNvbW11bml0eV9sZW4gPiAwKSkgewogICAgICAgICAgICAgcHB0ci0+c2VjTmFtZSA9IChjaGFyICopIG1hbGxvYyhzcy0+Y29tbXVuaXR5X2xlbiArIDEpOworICAgICAgICAgICAgaWYgKHBwdHItPnNlY05hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbVRhYmxlX2Rpc3Bvc2UocHB0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkoKHZvaWQgKikgcHB0ci0+c2VjTmFtZSwgKHZvaWQgKikgc3MtPmNvbW11bml0eSwKICAgICAgICAgICAgICAgICAgICBzcy0+Y29tbXVuaXR5X2xlbik7CiAgICAgICAgICAgICBwcHRyLT5zZWNOYW1lW3NzLT5jb21tdW5pdHlfbGVuXSA9IDA7CkBAIC0zODUsNiArMzk0LDggQEAKICAgICAgKiBub3RpZnkgdGFibGUgCiAgICAgICovCiAgICAgbnB0ciA9IFNOTVBfTUFMTE9DX1NUUlVDVChzbm1wTm90aWZ5VGFibGVfZGF0YSk7CisgICAgaWYgKG5wdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgbnB0ci0+c25tcE5vdGlmeU5hbWUgPSBzdHJkdXAoYnVmKTsKICAgICBucHRyLT5zbm1wTm90aWZ5TmFtZUxlbiA9IHN0cmxlbihidWYpOwogICAgIG5wdHItPnNubXBOb3RpZnlUYWcgPSBzdHJkdXAoYnVmKTsKQEAgLTQxMSwxOCArNDIyLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CiAgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpocHRyLCAqbmhwdHI7Ci0gICAgc3RydWN0IHNubXBOb3RpZnlUYWJsZV9kYXRhICpucHRyOwogCiAgICAgZm9yIChocHRyID0gc25tcE5vdGlmeVRhYmxlU3RvcmFnZTsgaHB0cjsgaHB0ciA9IG5ocHRyKSB7Ci0gICAgICAgIG5wdHIgPSAoc3RydWN0IHNubXBOb3RpZnlUYWJsZV9kYXRhICopIGhwdHItPmRhdGE7CisgICAgICAgIHN0cnVjdCBzbm1wTm90aWZ5VGFibGVfZGF0YSAqbnB0ciA9IGhwdHItPmRhdGE7CiAgICAgICAgIG5ocHRyID0gaHB0ci0+bmV4dDsKICAgICAgICAgaWYgKG5wdHItPnNubXBOb3RpZnlTdG9yYWdlVHlwZSA9PSBTVF9SRUFET05MWSkgewogICAgICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZXh0cmFjdF9lbnRyeSgmc25tcE5vdGlmeVRhYmxlU3RvcmFnZSwgaHB0cik7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUobnB0ci0+c25tcE5vdGlmeU5hbWUpOwotICAgICAgICAgICAgU05NUF9GUkVFKG5wdHItPnNubXBOb3RpZnlUYWcpOwotICAgICAgICAgICAgU05NUF9GUkVFKG5wdHIpOworICAgICAgICAgICAgZnJlZShucHRyLT5zbm1wTm90aWZ5TmFtZSk7CisgICAgICAgICAgICBmcmVlKG5wdHItPnNubXBOb3RpZnlUYWcpOworICAgICAgICAgICAgZnJlZShucHRyKTsKICAgICAgICAgfQogICAgIH0KKyAgICBzbm1wTm90aWZ5VGFibGVTdG9yYWdlID0gTlVMTDsKICAgICByZXR1cm4gKDApOwogfQogCkBAIC00ODIsNiArNDkzLDM3IEBACiAgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlUYWJsZSIsICJkb25lLlxuIikpOwogfQogCit2b2lkCitzaHV0ZG93bl9zbm1wTm90aWZ5VGFibGUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeVRhYmxlIiwgInNodXR0aW5nIGRvd24gLi4uICIpKTsKKworICAgIG5vdGlmeVRhYmxlX3VucmVnaXN0ZXJfbm90aWZpY2F0aW9ucyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19QUkVfVVBEQVRFX0NPTkZJRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUFJFX1VQREFURV9DT05GSUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVRhYmxlX3VucmVnaXN0ZXJfbm90aWZpY2F0aW9ucywgTlVMTCwgRkFMU0UpOworICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRUdJU1RFUl9OT1RJRklDQVRJT05TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlUYWJsZV9yZWdpc3Rlcl9ub3RpZmljYXRpb25zLCBOVUxMLCBGQUxTRSk7CisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1NFTkRfVFJBUDIsIHNlbmRfbm90aWZpY2F0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgRkFMU0UpOworI2lmbmRlZiBESVNBQkxFX1NOTVBWMQorICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19TRU5EX1RSQVAxLCBzZW5kX25vdGlmaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIEZBTFNFKTsKKyNlbmRpZgorICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVfc25tcE5vdGlmeVRhYmxlLCBOVUxMLCBGQUxTRSk7CisKKyAgICBVTlJFR0lTVEVSX1NZU09SX0VOVFJZKHNubXBOb3RpZnlGdWxsQ29tcGxpYW5jZSk7CisKKyAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeVRhYmxlIiwgImRvbmUuXG4iKSk7Cit9CiAKIC8qCiAgKiBzbm1wTm90aWZ5VGFibGVfYWRkKCk6IGFkZHMgYSBzdHJ1Y3R1cmUgbm9kZSB0byBvdXIgZGF0YSBzZXQgCkBAIC00OTAsNyArNTMyLDcgQEAKIHNubXBOb3RpZnlUYWJsZV9hZGQoc3RydWN0IHNubXBOb3RpZnlUYWJsZV9kYXRhICp0aGVkYXRhKQogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7Ci0KKyAgICBpbnQgcmV0VmFsOwkKIAogICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5VGFibGUiLCAiYWRkaW5nIGRhdGEuLi4gICIpKTsKICAgICAvKgpAQCAtNTAzLDEyICs1NDUsMTcgQEAKIAogCiAKLSAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YSgmc25tcE5vdGlmeVRhYmxlU3RvcmFnZSwgdmFycywgdGhlZGF0YSk7Ci0gICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlUYWJsZSIsICJyZWdpc3RlcmVkIGFuIGVudHJ5XG4iKSk7CisgICAgaWYgKGhlYWRlcl9jb21wbGV4X21heWJlX2FkZF9kYXRhKCZzbm1wTm90aWZ5VGFibGVTdG9yYWdlLCB2YXJzLCB0aGVkYXRhLCAxKQorICAgICAgICAhPSBOVUxMKXsKKyAgICAJREVCVUdNU0dUTCgoInNubXBOb3RpZnlUYWJsZSIsICJyZWdpc3RlcmVkIGFuIGVudHJ5XG4iKSk7CisJcmV0VmFsID0gU05NUEVSUl9TVUNDRVNTOworICAgIH1lbHNleworICAgICAgICByZXRWYWwgPSBTTk1QRVJSX0dFTkVSUjsgCisgICAgfQkKIAogCiAgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlUYWJsZSIsICJkb25lLlxuIikpOwotICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgcmV0dXJuIHJldFZhbDsKIH0KIAogCkBAIC01NTksMTUgKzYwNiwyMSBAQAogICAgIGxpbmUgPQogICAgICAgICByZWFkX2NvbmZpZ19yZWFkX2RhdGEoQVNOX0lOVEVHRVIsIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZVRtcC0+c25tcE5vdGlmeVN0b3JhZ2VUeXBlLCAmdG1waW50KTsKKyAgICBpZiAoIVN0b3JhZ2VUbXAtPnNubXBOb3RpZnlTdG9yYWdlVHlwZSkKKyAgICAgICAgU3RvcmFnZVRtcC0+c25tcE5vdGlmeVN0b3JhZ2VUeXBlID0gU1RfUkVBRE9OTFk7CiAKICAgICBsaW5lID0KICAgICAgICAgcmVhZF9jb25maWdfcmVhZF9kYXRhKEFTTl9JTlRFR0VSLCBsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0b3JhZ2VUbXAtPnNubXBOb3RpZnlSb3dTdGF0dXMsICZ0bXBpbnQpOworICAgIGlmICghU3RvcmFnZVRtcC0+c25tcE5vdGlmeVJvd1N0YXR1cykKKyAgICAgICAgU3RvcmFnZVRtcC0+c25tcE5vdGlmeVJvd1N0YXR1cyA9IFJTX0FDVElWRTsKIAogCi0KLQotICAgIHNubXBOb3RpZnlUYWJsZV9hZGQoU3RvcmFnZVRtcCk7CisgICAgaWYgKHNubXBOb3RpZnlUYWJsZV9hZGQoU3RvcmFnZVRtcCkgIT0gU05NUEVSUl9TVUNDRVNTKXsKKyAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlOYW1lKTsKKyAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlUYWcpOworICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcCk7CisgICAgfQogCiAKICAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeVRhYmxlIiwgImRvbmUuXG4iKSk7CkBAIC02NjgsNiArNzIxLDcgQEAKICAgICB9CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBOT1RJRllUQUc6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wTm90aWZ5VGFnOwogICAgICAgICBicmVhazsKQEAgLTY4MCw2ICs3MzQsNyBAQAogICAgIGNhc2UgU05NUE5PVElGWVJPV1NUQVRVUzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXBOb3RpZnlSb3dTdGF0dXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gTlVMTDsKICAgICB9CkBAIC02ODgsNiArNzQzLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fUkVBRF9TVVBQT1JUCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIFNOTVBOT1RJRllUQUc6CiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+c25tcE5vdGlmeVRhZ0xlbjsKQEAgLTcwOCw2ICs3NjQsNyBAQAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEVSUk9SX01TRygiIik7CiAgICAgfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1JFQURfU1VQUE9SVCAqLyAKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNzM2LDYgKzc5Myw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25tcE5vdGlmeVRhYmxlX2RhdGEgKlN0b3JhZ2VOZXc7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAorCiBpbnQKIHdyaXRlX3NubXBOb3RpZnlUYWcoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTc3MCwxMCArODI5LDEwIEBACiAgICAgICAgIGlmICh2YXJfdmFsX3R5cGUgIT0gQVNOX09DVEVUX1NUUikgewogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKICAgICAgICAgfQotICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPCAwIHx8IHZhcl92YWxfbGVuID4gMjU1KSB7CisgICAgICAgIGlmICh2YXJfdmFsX2xlbiA+IDI1NSkgewogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOwogICAgICAgICB9Ci0gICAgICAgIGlmICghc25tcFRhZ1ZhbGlkKHZhcl92YWwsIHZhcl92YWxfbGVuKSkgeworICAgICAgICBpZiAoIXNubXBUYWdWYWxpZCgoY2hhciAqKSB2YXJfdmFsLCB2YXJfdmFsX2xlbikpIHsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNzg1LDcgKzg0NCw3IEBACiAgICAgICAgICAqLwogICAgICAgICB0bXB2YXIgPSBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5VGFnOwogICAgICAgICB0bXBsZW4gPSBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5VGFnTGVuOwotICAgICAgICBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5VGFnID0gY2FsbG9jKDEsIHZhcl92YWxfbGVuICsgMSk7CisgICAgICAgIFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlUYWcgPSAoY2hhciopY2FsbG9jKDEsIHZhcl92YWxfbGVuICsgMSk7CiAgICAgICAgIGlmIChOVUxMID09IFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlUYWcpCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKICAgICAgICAgYnJlYWs7CkBAIC04MjEsNiArODgwLDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTA0MSw3ICsxMTAxLDcgQEAKICAgICAgICAgICAgIGlmIChTdG9yYWdlTmV3ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0b3JhZ2VOZXctPnNubXBOb3RpZnlOYW1lID0gY2FsbG9jKCAxLCB2cC0+dmFsX2xlbiArIDEgKTsKKyAgICAgICAgICAgIFN0b3JhZ2VOZXctPnNubXBOb3RpZnlOYW1lID0gKGNoYXIqKWNhbGxvYyggMSwgdnAtPnZhbF9sZW4gKyAxICk7CiAgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldy0+c25tcE5vdGlmeU5hbWUgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOwogICAgICAgICAgICAgfQpAQCAtMTE1Niw3ICsxMjE2LDkgQEAKICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlSb3dTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CiAgICAgICAgICAgICBTdG9yYWdlTmV3ID0gTlVMTDsKICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAppbmRleCA5YTkzNjQ1Li4xOGJmMWJkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oCkBAIC02NCwxMCArNjQsMTIgQEAKICAgICAgaW50ICAgICAgICAgICAgIHNubXBOb3RpZnlUYWJsZV9hZGQoc3RydWN0IHNubXBOb3RpZnlUYWJsZV9kYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGVkYXRhKTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBOb3RpZnlUYWc7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wTm90aWZ5VHlwZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBOb3RpZnlTdG9yYWdlVHlwZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBOb3RpZnlSb3dTdGF0dXM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwOWRmNwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliLmgKQEAgLTAsMCArMSw4IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCitjb25maWdfcmVxdWlyZShybW9uLW1pYi9ldGhlclN0YXRzVGFibGUpCitjb25maWdfYWRkX21pYihSTU9OLU1JQikKKworCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1ZGQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHMuaApAQCAtMCwwICsxLDcgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorY29uZmlnX3JlcXVpcmUocm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTQyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMKQEAgLTAsMCArMSwzMTcgQEAKKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmgiCisjaW5jbHVkZSAicm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorI2luY2x1ZGUgInJtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmgiCisKKy8qCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgZ2V0aWZhZGRycyBmYWlsZWQgCisgKiBAcmV0dmFsIC0yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCisKK3N0cnVjdCBpZm5hbWUgKgorZXRoZXJzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2dldCAoc3RydWN0IGlmbmFtZSAqbGlzdF9oZWFkLCBpbnQgKnJldHZhbCkKK3sKKyAgICBzdHJ1Y3QgaWZhZGRycyAqYWRkcnMgPSBOVUxMLCAqcCA9IE5VTEw7CisgICAgc3RydWN0IGlmbmFtZSAqbmFtZXB0cjE9TlVMTCwgKm5hbWVwdHIyID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKGdldGlmYWRkcnMoJmFkZHJzKSkgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImdldGlmYWRkcnMgZmFpbGVkXG4iKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSxpbnRlcmZhY2VfbmFtZV9saXN0X2dldCwgZ2V0aWZhZGRycyBmYWlsZWRcbiIpOworICAgICAgICAqcmV0dmFsID0gLTE7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvciAocCA9IGFkZHJzOyBwOyBwID0gcC0+aWZhX25leHQpIHsKKworICAgICAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICAgICAgbGlzdF9oZWFkID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgICAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKSk7CisgICAgICAgICAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLGludGVyZmFjZV9uYW1lX2xpc3RfZ2V0LCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgIGZyZWVpZmFkZHJzKGFkZHJzKTsKKyAgICAgICAgICAgICAgICAqcmV0dmFsID0gLTI7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1zZXQobGlzdF9oZWFkLCAwLCBzaXplb2Yoc3RydWN0IGlmbmFtZSkpOworICAgICAgICAgICAgc3RybGNweShsaXN0X2hlYWQtPm5hbWUsIHAtPmlmYV9uYW1lLCBJRl9OQU1FU0laRSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAgZm9yIChuYW1lcHRyMSA9IGxpc3RfaGVhZDsgbmFtZXB0cjE7IG5hbWVwdHIyID0gbmFtZXB0cjEsIG5hbWVwdHIxID0gbmFtZXB0cjEtPmlmbl9uZXh0KQorICAgICAgICAgICAgaWYgKCFzdHJuY21wKHAtPmlmYV9uYW1lLCBuYW1lcHRyMS0+bmFtZSwgSUZfTkFNRVNJWkUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChuYW1lcHRyMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5hbWVwdHIyLT5pZm5fbmV4dCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGlmbmFtZSkpOworICAgICAgICBpZiAoIW5hbWVwdHIyLT5pZm5fbmV4dCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIikpOworICAgICAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLGludGVyZmFjZV9uYW1lX2xpc3RfZ2V0LCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgZXRoZXJzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUgKGxpc3RfaGVhZCk7CisgICAgICAgICAgICBmcmVlaWZhZGRycyhhZGRycyk7CisgICAgICAgICAgICAqcmV0dmFsID0gLTI7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBuYW1lcHRyMiA9IG5hbWVwdHIyLT5pZm5fbmV4dDsKKyAgICAgICAgbWVtc2V0KG5hbWVwdHIyLCAwLCBzaXplb2Yoc3RydWN0IGlmbmFtZSkpOworICAgICAgICBzdHJsY3B5KG5hbWVwdHIyLT5uYW1lLCBwLT5pZmFfbmFtZSwgSUZfTkFNRVNJWkUpOworICAgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBmcmVlaWZhZGRycyhhZGRycyk7CisgICAgKnJldHZhbCA9IDA7CisgICAgcmV0dXJuIGxpc3RfaGVhZDsKK30KKworCisvKgorICogQHJldHZhbCAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgaW52YWxpZCBwb2ludGVyCisgKi8KKworaW50CitldGhlcnN0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSAoc3RydWN0IGlmbmFtZSAqbGlzdF9oZWFkKQoreworICAgIHN0cnVjdCBpZm5hbWUgKm5hbWVwdHIxID0gTlVMTCwgKm5hbWVwdHIyID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZnJlZTogaW52YWxpZCBwb2ludGVyIGxpc3RfaGVhZCIpOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUiLAorICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBwb2ludGVyIGxpc3RfaGVhZFxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZm9yIChuYW1lcHRyMSA9IGxpc3RfaGVhZDsgbmFtZXB0cjE7IG5hbWVwdHIxID0gbmFtZXB0cjIpIHsKKyAgICAgICAgICAgIG5hbWVwdHIyID0gbmFtZXB0cjEtPmlmbl9uZXh0OworICAgICAgICAgICAgZnJlZSAobmFtZXB0cjEpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogQHJldHZhbCAgMCA6IG5vdCBmb3VuZAorICogQHJldHZhbCAhMCA6IGlmSW5kZXgKKyAqLworCitpbnQKK2V0aGVyc3RhdHNfaW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0IChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKyNpZm5kZWYgU0lPQ0dJRklOREVYCisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIHN0cnVjdCBpZnJlcSAgICBpZnJxOworICAgIGludCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppb2N0bCIsICJpZmluZGV4X2dldFxuIikpOworCisgICAgcmMgPSBfZXRoZXJTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NHSUZJTkRFWCwgJmlmcnEsIG5hbWUpOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzOmlvY3RsIiwKKyAgICAgICAgICAgICAgICAgICAgImlmaW5kZXhfZ2V0IGVycm9yIG9uIGluZXJmYWNlICclcydcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmlvY3RsLCBpZmluZGV4X2dldCBlcnJvciBvbiBpbmVyZmFjZSAnJXMnXG4iLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB9CisKKyAgICByZXR1cm4gaWZycS5pZnJfaWZpbmRleDsKKyNlbmRpZiAvKiBTSU9DR0lGSU5ERVggKi8KK30KKworLyoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBjYW5ub3QgZ2V0IEVUSFRPT0xfRFJWSU5GTyBmYWlsZWQgCisgKiBAcmV0dmFsIC0yIG5fc3RhdHMgemVybyAtIG5vIHN0YXRpc3RjcyBhdmFpbGFibGUKKyAqIEByZXR2YWwgLTMgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGhvbGRpbmcgdGhlIHN0YXRpc3RpY3MgZmFpbGVkCisgKiBAcmV0dmFsIC00IGNhbm5vdCBnZXQgRVRIVE9PTF9HU1RSSU5HUyBpbmZvcm1hdGlvbgorICogQHJldHZhbCAtNSBjYW5ub3QgZ2V0IEVUSFRPT0xfR1NUQVRTIGluZm9ybWF0aW9uCisgKiBAcmV0dmFsIC02IGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgaWYgSEFWRV9MSU5VWF9FVEhUT09MX0ggbm90IGRlZmluZWQKKyAqLworCitpbnQKK2ludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKworI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICisKKyAgICBldGhlclN0YXRzVGFibGVfZGF0YSAqZGF0YSA9ICZyb3dyZXFfY3R4LT5kYXRhOworICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gZHJpdmVyX2luZm87CisgICAgc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MgKmV0aF9zdHJpbmdzOworICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpldGhfc3RhdHM7CisgICAgc3RydWN0IGlmcmVxIGlmcjsKKyAgICB1bnNpZ25lZCBpbnQgbnN0YXRzLCBzaXplX3N0ciwgaTsKKyAgICBpbnQgZXJyOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBtZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOworICAgIHN0cmxjcHkoaWZyLmlmcl9uYW1lLCBuYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisKKyAgICBtZW1zZXQoJmRyaXZlcl9pbmZvLCAwLCBzaXplb2YoZHJpdmVyX2luZm8pKTsKKyAgICBkcml2ZXJfaW5mby5jbWQgPSBFVEhUT09MX0dEUlZJTkZPOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopJmRyaXZlcl9pbmZvOworCisgICAgZXJyID0gX2V0aGVyU3RhdHNfaW9jdGxfZ2V0KGZkLCBTSU9DRVRIVE9PTCwgJmlmciwgbmFtZSk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIkVUSFRPT0xfR0VURFJWSU5GTyBmYWlsZWQgb24gaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBuc3RhdHMgPSBkcml2ZXJfaW5mby5uX3N0YXRzOworICAgIGlmIChuc3RhdHMgPCAxKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJubyBzdGF0cyBhdmFpbGFibGUgZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSkpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgc2l6ZV9zdHIgPSBuc3RhdHMgKiBFVEhfR1NUUklOR19MRU47CisKKyAgICBldGhfc3RyaW5ncyA9IG1hbGxvYyhzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MpKTsKKyAgICBpZiAoIWV0aF9zdHJpbmdzKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJubyBtZW1vcnkgYXZhaWxhYmxlXG4iKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSxpbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQsIG5vIG1lbW9yeSBhdmFpbGFibGVcbiIpOworCisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisgICAgbWVtc2V0IChldGhfc3RyaW5ncywgMCwgKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncykpKTsKKworICAgIGV0aF9zdGF0cyA9IG1hbGxvYyAoc2l6ZV9zdHIgKyBzaXplb2YgKHN0cnVjdCBldGh0b29sX3N0YXRzKSk7CisgICAgaWYgKCFldGhfc3RhdHMpIHsKKyAgICAgICAgZnJlZSAoZXRoX3N0cmluZ3MpOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAibm8gbWVtb3J5IGF2YWlsYWJsZVxuIikpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsaW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0LCBubyBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKKworICAgICAgICByZXR1cm4gLTM7CisgICAgfQorICAgIG1lbXNldCAoZXRoX3N0YXRzLCAwLCAoc2l6ZV9zdHIgKyBzaXplb2YgKHN0cnVjdCBldGh0b29sX3N0YXRzKSkpOworCisgICAgZXRoX3N0cmluZ3MtPmNtZCA9IEVUSFRPT0xfR1NUUklOR1M7CisgICAgZXRoX3N0cmluZ3MtPnN0cmluZ19zZXQgPSBFVEhfU1NfU1RBVFM7CisgICAgZXRoX3N0cmluZ3MtPmxlbiA9IG5zdGF0czsKKyAgICBpZnIuaWZyX2RhdGEgPSAoY2hhciAqKSBldGhfc3RyaW5nczsKKworICAgIGVyciA9IF9ldGhlclN0YXRzX2lvY3RsX2dldChmZCwgU0lPQ0VUSFRPT0wsICZpZnIsIG5hbWUpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZ2V0IHN0YXRzIHN0cmluZ3MgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSkpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsaW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0LCBjYW5ub3QgZ2V0IHN0YXRzIHN0cmluZ3MgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSk7CisKKyAgICAgICAgZnJlZShldGhfc3RyaW5ncyk7CisgICAgICAgIGZyZWUoZXRoX3N0YXRzKTsKKyAgICAgICAgcmV0dXJuIC00OworICAgIH0KKworICAgIGV0aF9zdGF0cy0+Y21kID0gRVRIVE9PTF9HU1RBVFM7CisgICAgZXRoX3N0YXRzLT5uX3N0YXRzID0gbnN0YXRzOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopIGV0aF9zdGF0czsKKyAgICBlcnIgPSBfZXRoZXJTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NFVEhUT09MLCAmaWZyLCBuYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGdldCBzdGF0cyBzdHJpbmdzIGluZm9ybWF0aW9uIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCwgY2Fubm90IGdldCBzdGF0cyBpbmZvcm1hdGlvbiBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKTsKKworICAgICAgICBmcmVlKGV0aF9zdHJpbmdzKTsKKyAgICAgICAgZnJlZShldGhfc3RhdHMpOworICAgICAgICByZXR1cm4gLTU7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IG5zdGF0czsgaSsrKSB7CisgICAgICAgIGNoYXIgc1tFVEhfR1NUUklOR19MRU5dOworCisgICAgICAgIHN0cmxjcHkocywgKGNvbnN0IGNoYXIgKikgJmV0aF9zdHJpbmdzLT5kYXRhW2kgKiBFVEhfR1NUUklOR19MRU5dLAorICAgICAgICAgICAgICAgIHNpemVvZihzKSk7CisgICAgICAgIAorICAgICAgICBpZiAoRVRIRVJTVEFUU0pBQkJFUlMocykpIHsKKyAgICAgICAgICAgIGRhdGEtPmV0aGVyU3RhdHNKYWJiZXJzID0gKHVfbG9uZylldGhfc3RhdHMtPmRhdGFbaV07CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTSkFCQkVSU19GTEFHOworICAgICAgICB9CisgICAgfQorICAgIGZyZWUoZXRoX3N0cmluZ3MpOworICAgIGZyZWUoZXRoX3N0YXRzKTsKKworICAgIHJldHVybiAwOworI2Vsc2UKKyAgICByZXR1cm4gLTY7CisjZW5kaWYKKworfQorCisKKy8qIGlvY3RsIHdyYXBwZXIKKyAqCisgKiBAcGFyYW0gZmQgOiBzb2NrZXQgZmQgdG8gdXNlIHcvaW9jdGwsIG9yIC0xIHRvIG9wZW4vY2xvc2Ugb25lCisgKiBAcGFyYW0gd2hpY2gKKyAqIEBwYXJhbSBpZnJxCisgKiBwYXJhbSBpZmVudHJ5IDogaWZlbnRyeSB0byB1cGRhdGUKKyAqIEBwYXJhbSBuYW1lCisgKgorICogQHJldHZhbCAgMCA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgOiBpbnZhbGlkIHBhcmFtZXRlcnMKKyAqIEByZXR2YWwgLTIgOiBjb3VsZG4ndCBjcmVhdGUgc29ja2V0CisgKiBAcmV0dmFsIC0zIDogaW9jdGwgY2FsbCBmYWlsZWQKKyAqLworaW50CitfZXRoZXJTdGF0c19pb2N0bF9nZXQoaW50IGZkLCBpbnQgd2hpY2gsIHN0cnVjdCBpZnJlcSAqaWZycSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBpbnQgb3VyZmQgPSAtMSwgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW9jdGwiLCAiX2V0aGVyU3RhdHNfaW9jdGxfZ2V0XG4iKSk7CisgICAgLyoKKyAgICAgKiBzYW5pdHkgY2hlY2tzCisgICAgICovCisgICAgaWYoTlVMTCA9PSBuYW1lKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmlvY3RsIiwKKyAgICAgICAgICAgICAgICAgICAgIl9ldGhlclN0YXRzX2lvY3RsX2dldCBpbnZhbGlkIGlmbmFtZSAnJXMnXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppb2N0bCwgX2V0aGVyU3RhdHNfaW9jdGxfZ2V0IGVycm9yIG9uIGluZXJmYWNlICclcydcbiIsIG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjcmVhdGUgc29ja2V0IGZvciBpb2N0bHMKKyAgICAgKi8KKyAgICBpZihmZCA8IDApIHsKKyAgICAgICAgZmQgPSBvdXJmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKyAgICAgICAgaWYob3VyZmQgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppb2N0bCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiX2V0aGVyU3RhdHNfaW9jdGxfZ2V0IGNvdWxkbid0IGNyZWF0ZSBhIHNvY2tldFxuIikpOworICAgICAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmlvY3RsLCBfZXRoZXJTdGF0c19pb2N0bF9nZXQgZXJyb3Igb24gaW5lcmZhY2UgJyVzJ1xuIiwgbmFtZSk7CisKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmxjcHkoaWZycS0+aWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnJxLT5pZnJfbmFtZSkpOworICAgIHJjID0gaW9jdGwoZmQsIHdoaWNoLCBpZnJxKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmlvY3RsIiwKKyAgICAgICAgICAgICAgICAgICAgIl9ldGhlclN0YXRzX2lvY3RsX2dldCBpb2N0bCAlZCByZXR1cm5lZCAlZFxuIiwgd2hpY2gsIHJjKSk7CisgICAgICAgIHJjID0gLTM7CisgICAgfQorCisgICAgaWYob3VyZmQgPj0gMCkKKyAgICAgICAgY2xvc2Uob3VyZmQpOworCisgICAgcmV0dXJuIHJjOworfQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Mjg0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUuaApAQCAtMCwwICsxLDExIEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCitjb25maWdfcmVxdWlyZShybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzKQorY29uZmlnX3JlcXVpcmUocm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZSkKK2NvbmZpZ19yZXF1aXJlKHJtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQpCitjb25maWdfcmVxdWlyZShybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0KQorY29uZmlnX3JlcXVpcmUocm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2VzcykgCitjb25maWdfcmVxdWlyZShybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZSkKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTZlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmMKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKiogXHBhZ2UgTUZEIGhlbHBlciBmb3IgZXRoZXJTdGF0c1RhYmxlCisgKgorICogXHNlY3Rpb24gaW50cm8gSW50cm9kdWN0aW9uCisgKiBJbnRyb2R1Y3RvcnkgdGV4dC4KKyAqCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CisKKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmgiCisKK29pZCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfb2lkW10gPSB7IEVUSEVSU1RBVFNUQUJMRV9PSUQgfTsKK2ludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfb2lkX3NpemUgPSBPSURfTEVOR1RIKGV0aGVyU3RhdHNUYWJsZV9vaWQpOworCitldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uIGV0aGVyU3RhdHNUYWJsZV91c2VyX2NvbnRleHQ7CitzdGF0aWMgZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqZXRoZXJTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wOworCit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9ldGhlclN0YXRzVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfZXRoZXJTdGF0c1RhYmxlKHZvaWQpOworCisKKy8qKgorICogSW5pdGlhbGl6ZXMgdGhlIGV0aGVyU3RhdHNUYWJsZSBtb2R1bGUKKyAqLwordm9pZAoraW5pdF9ldGhlclN0YXRzVGFibGUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6aW5pdF9ldGhlclN0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDA6bzogUGVyZm9ybSBldGhlclN0YXRzVGFibGUgb25lLXRpbWUgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZworICAgICAqLworICAgIGlmIChzaG91bGRfaW5pdCgiZXRoZXJTdGF0c1RhYmxlIikpCisgICAgICAgIGluaXRpYWxpemVfdGFibGVfZXRoZXJTdGF0c1RhYmxlKCk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdF9ldGhlclN0YXRzVGFibGUgKi8KKworLyoqCisgKiBTaHV0LWRvd24gdGhlIGV0aGVyU3RhdHNUYWJsZSBtb2R1bGUgKGFnZW50IGlzIGV4aXRpbmcpCisgKi8KK3ZvaWQKK3NodXRkb3duX2V0aGVyU3RhdHNUYWJsZSh2b2lkKQoreworICAgIGlmIChzaG91bGRfaW5pdCgiZXRoZXJTdGF0c1RhYmxlIikpCisgICAgICAgIHNodXRkb3duX3RhYmxlX2V0aGVyU3RhdHNUYWJsZSgpOworCit9CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgZXRoZXJTdGF0c1RhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfZXRoZXJTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmluaXRpYWxpemVfdGFibGVfZXRoZXJTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAxOm86IFBlcmZvcm0gZXRoZXJTdGF0c1RhYmxlIG9uZS10aW1lIHRhYmxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMjpvOiB8LT5Jbml0aWFsaXplIGV0aGVyU3RhdHNUYWJsZSB1c2VyIGNvbnRleHQKKyAgICAgKiBpZiB5b3UnZCBsaWtlIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIHNvbWUgZGF0YSBmb3IgdGhpcworICAgICAqIHRhYmxlLCBhbGxvY2F0ZSBvciBzZXQgaXQgdXAgaGVyZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGEgbmV0c25tcF9kYXRhX2xpc3QgaXMgYSBzaW1wbGUgd2F5IHRvIHN0b3JlIHZvaWQgcG9pbnRlcnMuIEEgc2ltcGxlCisgICAgICogc3RyaW5nIHRva2VuIGlzIHVzZWQgdG8gYWRkLCBmaW5kIG9yIHJlbW92ZSBwb2ludGVycy4KKyAgICAgKi8KKyAgICBldGhlclN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AKKwk9IG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdCgiZXRoZXJTdGF0c1RhYmxlIiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIE5vIHN1cHBvcnQgZm9yIGFueSBmbGFncyB5ZXQsIGJ1dCBpbiB0aGUgZnV0dXJlIHlvdSB3b3VsZAorICAgICAqIHNldCBhbnkgZmxhZ3MgaGVyZS4KKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBfZXRoZXJTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlCisJKGV0aGVyU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCwgZmxhZ3MpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0aWFsaXplX3RhYmxlX2V0aGVyU3RhdHNUYWJsZSAqLworCisvKioKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBldGhlclN0YXRzVGFibGUgCisgKi8KK3ZvaWQKK3NodXRkb3duX3RhYmxlX2V0aGVyU3RhdHNUYWJsZSh2b2lkKQoreworICAgIC8qCisgICAgICogY2FsbCBpbnRlcmZhY2Ugc2h1dGRvd24gY29kZQorICAgICAqLworICAgIF9ldGhlclN0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGV0aGVyU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoZXRoZXJTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBldGhlclN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AgPSBOVUxMOworfQorCisvKioKKyAqIGV4dHJhIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gKGVnIGRlZmF1bHQgdmFsdWVzKQorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4ICAgIDogcm93IHJlcXVlc3QgY29udGV4dAorICogQHBhcmFtIHVzZXJfaW5pdF9jdHggOiB2b2lkIHBvaW50ZXIgZm9yIHVzZXIgKHBhcmFtZXRlciB0byByb3dyZXFfY3R4X2FsbG9jYXRlKQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgIDogbm8gZXJyb3JzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICA6IGVycm9yIChjb250ZXh0IGFsbG9jYXRlIHdpbGwgZmFpbCkKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTA6bzogfC0+IFBlcmZvcm0gZXh0cmEgZXRoZXJTdGF0c1RhYmxlIHJvd3JlcSBpbml0aWFsaXphdGlvbi4gKGVnIERFRlZBTFMpCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQgKi8KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGNsZWFudXAKKyAqCisgKi8KK3ZvaWQKK2V0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwIiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgZXRoZXJTdGF0c1RhYmxlIHJvd3JlcSBjbGVhbnVwLgorICAgICAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCisKKy8qKgorICogcHJlLXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTA6bzogUGVyZm9ybSBldGhlclN0YXRzVGFibGUgcHJlLXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0ICovCisKKy8qKgorICogcG9zdC1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICogTm90ZToKKyAqICAgTmV3IHJvd3MgaGF2ZSBiZWVuIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciwgYW5kCisgKiAgIGRlbGV0ZWQgcm93cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIgYW5kCisgKiAgIHJlbGVhc2VkLgorICoKKyAqIEBwYXJhbSB1c2VyX2NvbnRleHQKKyAqIEBwYXJhbSByYyA6IE1GRF9TVUNDRVNTIGlmIGFsbCByZXF1ZXN0cyBzdWNjZWVkZWQKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBvdGhlciBlcnJvciAoaWdub3JlZCkKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjUxMTpvOiBQZXJmb3JtIGV0aGVyU3RhdHNUYWJsZSBwb3N0LXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogY2hlY2sgdG8gc2V0IGlmIGFueSByb3dzIHdlcmUgY2hhbmdlZC4KKyAgICAgKi8KKyAgICBpZiAoZXRoZXJTdGF0c1RhYmxlX2RpcnR5X2dldCgpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNoZWNrIGlmIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwuIElmIHNvLCB0aGlzIHdvdWxkIGJlCisgICAgICAgICAqIGEgZ29vZCBwbGFjZSB0byBzYXZlIGRhdGEgdG8gaXRzIHBlcnNpc3RlbnQgc3RvcmUuCisgICAgICAgICAqLworICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzYXZlIGNoYW5nZWQgcm93cywgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICovCisgICAgICAgIH0KKworICAgICAgICBldGhlclN0YXRzVGFibGVfZGlydHlfc2V0KDApOyAgIC8qIGNsZWFyIHRhYmxlIGRpcnR5IGZsYWcgKi8KKyAgICB9CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QgKi8KKworCisvKiogQHsgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjdmMDNjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5oCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIEVUSEVSU1RBVFNUQUJMRV9ICisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgbWlzYyBtaXNjOiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzCisgKgorICogQHsKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorCisgICAgLyoKKyAgICAgKiBPSUQgYW5kIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIGV0aGVyU3RhdHNUYWJsZSAKKyAgICAgKi8KKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfb2lkcy5oIgorCisgICAgLyoKKyAgICAgKiBlbnVtIGRlZmluaW9ucyAKKyAgICAgKi8KKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfZW51bXMuaCIKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0X2V0aGVyU3RhdHNUYWJsZSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fZXRoZXJTdGF0c1RhYmxlKHZvaWQpOworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c1RhYmxlIGlzIHN1YmlkIDEgb2Ygc3RhdGlzdGljcy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLCBsZW5ndGg6IDkKKyAgICAgKi8KKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBXaGVuIHlvdSByZWdpc3RlciB5b3VyIG1pYiwgeW91IGdldCB0byBwcm92aWRlIGEgZ2VuZXJpYworICAgICAqIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBiYWNrIHRvIHlvdSBmb3IgbW9zdCBvZiB0aGUKKyAgICAgKiBmdW5jdGlvbnMgY2FsbHMuCisgICAgICoKKyAgICAgKiBUT0RPOjEwMDpyOiBSZXZpZXcgYWxsIGNvbnRleHQgc3RydWN0dXJlcworICAgICAqLworICAgIC8qCisgICAgICogVE9ETzoxMDE6bzogfC0+IFJldmlldyBldGhlclN0YXRzVGFibGUgcmVnaXN0cmF0aW9uIGNvbnRleHQuCisgICAgICovCisgICAgdHlwZWRlZiBuZXRzbm1wX2RhdGFfbGlzdCBldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFRPRE86MTEwOnI6IHwtPiBSZXZpZXcgZXRoZXJTdGF0c1RhYmxlIGRhdGEgY29udGV4dCBzdHJ1Y3R1cmUuCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGRhdGEgZm9yIGV0aGVyU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHN0b3JhZ2UgZm9yIGFsbCB0aGUgY29sdW1ucyBkZWZpbmVkIGluIHRoZQorICAgICAqIGV0aGVyU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBldGhlclN0YXRzVGFibGVfZGF0YV9zIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRGF0YVNvdXJjZSgyKS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0EvVy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICBvaWQgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VbMTI4XTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX2xlbjsgICAgICAgLyogIyBvZiBvaWQgZWxlbWVudHMsIG5vdCBieXRlcyAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEcm9wRXZlbnRzKDMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzRHJvcEV2ZW50czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT2N0ZXRzKDQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzT2N0ZXRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzKDUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzUGt0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQnJvYWRjYXN0UGt0cyg2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c011bHRpY2FzdFBrdHMoNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycyg4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzKDkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3ZlcnNpemVQa3RzKDEwKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRnJhZ21lbnRzKDExKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c0ZyYWdtZW50czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzSmFiYmVycygxMikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNKYWJiZXJzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNDb2xsaXNpb25zKDEzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM2NE9jdGV0cygxNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzKDE1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMoMTYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMoMTcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzKDE4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzKDE5KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPd25lcigyMCkvT3duZXJTdHJpbmcvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML0EvVy9lL1IvZC9oCisgICAgICAgICAqLworICAgICAgICBjaGFyICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyWzEyN107CisgICAgICAgIHNpemVfdCAgICAgICAgICBldGhlclN0YXRzT3duZXJfbGVuOyAgICAvKiAjIG9mIGNoYXIgZWxlbWVudHMsIG5vdCBieXRlcyAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNTdGF0dXMoMjEpL0VudHJ5U3RhdHVzL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL1cvRS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXM7CisKKyAgICB9IGV0aGVyU3RhdHNUYWJsZV9kYXRhOworCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjExNTpvOiB8LT4gUmV2aWV3IGV0aGVyU3RhdHNUYWJsZSB1bmRvIGNvbnRleHQuCisgICAgICogV2UncmUganVzdCBnb2luZyB0byB1c2UgdGhlIHNhbWUgZGF0YSBzdHJ1Y3R1cmUgZm9yIG91cgorICAgICAqIHVuZG9fY29udGV4dC4gSWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIG1vcmUgZWZmaWNlbnQsCisgICAgICogZGVmaW5lIHlvdXIgdHlwZWRlZiBoZXJlLgorICAgICAqLworICAgIHR5cGVkZWYgZXRoZXJTdGF0c1RhYmxlX2RhdGEgZXRoZXJTdGF0c1RhYmxlX3VuZG9fZGF0YTsKKworICAgIC8qCisgICAgICogVE9ETzoxMjA6cjogfC0+IFJldmlldyBldGhlclN0YXRzVGFibGUgbWliIGluZGV4LgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbmRleCBmb3IgZXRoZXJTdGF0c1RhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXhfcyB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oCisgICAgICAgICAqLworICAgICAgICBsb25nICAgICAgICAgICAgZXRoZXJTdGF0c0luZGV4OworCisKKyAgICB9IGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXg7CisKKyAgICAvKgorICAgICAqIFRPRE86MTIxOnI6IHwgICB8LT4gUmV2aWV3IGV0aGVyU3RhdHNUYWJsZSBtYXggaW5kZXggbGVuZ3RoLgorICAgICAqIElmIHlvdSBLTk9XIHRoYXQgeW91ciBpbmRleGVzIHdpbGwgbmV2ZXIgZXhjZWVkIGEgY2VydGFpbgorICAgICAqIGxlbmd0aCwgdXBkYXRlIHRoaXMgbWFjcm8gdG8gdGhhdCBsZW5ndGguCisgICAgICovCisjZGVmaW5lIE1BWF9ldGhlclN0YXRzVGFibGVfSURYX0xFTiAgICAgMQorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjEzMDpvOiB8LT4gUmV2aWV3IGV0aGVyU3RhdHNUYWJsZSBSb3cgcmVxdWVzdCAocm93cmVxKSBjb250ZXh0LgorICAgICAqIFdoZW4geW91ciBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgeW91IHdpbGwgYmUgcGFzc2VkIGEKKyAgICAgKiBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCBwb2ludGVyLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X3MgeworCisgICAgLyoqIHRoaXMgbXVzdCBiZSBmaXJzdCBmb3IgY29udGFpbmVyIGNvbXBhcmUgdG8gd29yayAqLworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICAgICAgb2lkICAgICAgICAgICAgIG9pZF90bXBbTUFYX2V0aGVyU3RhdHNUYWJsZV9JRFhfTEVOXTsKKworICAgICAgICBldGhlclN0YXRzVGFibGVfbWliX2luZGV4IHRibF9pZHg7CisKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2RhdGEgZGF0YTsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIGNvbHVtbl9leGlzdHNfZmxhZ3M7ICAgIC8qIGZsYWdzIGZvciBleGlzdGVuY2UgKi8KKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3VuZG9fZGF0YSAqdW5kbzsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIGNvbHVtbl9zZXRfZmxhZ3M7ICAgICAgIC8qIGZsYWdzIGZvciBzZXQgY29sdW1ucyAqLworCisKKyAgICAgICAgLyoKKyAgICAgICAgICogZmxhZ3MgcGVyIHJvdy4gQ3VycmVudGx5LCB0aGUgZmlyc3QgKGxvd2VyKSA4IGJpdHMgYXJlIHJlc2VydmVkCisgICAgICAgICAqIGZvciB0aGUgdXNlci4gU2VlIG1mZC5oIGZvciBvdGhlciBmbGFncy4KKyAgICAgICAgICovCisgICAgICAgIHVfaW50ICAgICAgICAgICByb3dyZXFfZmxhZ3M7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzoxMzE6bzogfCAgIHwtPiBBZGQgdXNlZnVsIGRhdGEgdG8gZXRoZXJTdGF0c1RhYmxlIHJvd3JlcSBjb250ZXh0LgorICAgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBzdG9yYWdlIGZvciBmdXR1cmUgZXhwYW5zaW9uCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqZXRoZXJTdGF0c1RhYmxlX2RhdGFfbGlzdDsKKworICAgIH0gZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHg7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBldGhlclN0YXRzVGFibGVfcmVmX3Jvd3JlcV9jdHhfcyB7CisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIH0gZXRoZXJTdGF0c1RhYmxlX3JlZl9yb3dyZXFfY3R4OworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAqLworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3QoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2NvbnRleHQpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCwgaW50IHJjKTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCB2b2lkICp1c2VyX2luaXRfY3R4KTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NvbW1pdChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqZXRoZXJTdGF0c1RhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChldGhlclN0YXRzVGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CisKKyAgICBleHRlcm4gb2lkICAgICAgZXRoZXJTdGF0c1RhYmxlX29pZFtdOworICAgIGV4dGVybiBpbnQgICAgICBldGhlclN0YXRzVGFibGVfb2lkX3NpemU7CisKKworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCIKKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuaCIKKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuaCIKKworICAgIC8qCisgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCisgICAgICoKKyAgICAgKiBUT0RPOjA5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mjk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjM5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzo0OTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFVEhFUlNUQVRTVEFCTEVfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkNGFjYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMCwwICsxLDUzMyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGUuaCIKKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCIKKworI2lmIGRlZmluZWQobGludXgpCisjaW5jbHVkZSAiaW9jdGxfaW1wX2NvbW1vbi5oIgorI2VuZGlmCisKKy8qKiBAaW5ncm91cCBpbnRlcmZhY2UKKyAqIEBhZGR0b2dyb3VwIGRhdGFfYWNjZXNzIGRhdGFfYWNjZXNzOiBSb3V0aW5lcyB0byBhY2Nlc3MgZGF0YQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGxvY2F0ZSB0aGUgZGF0YSB1c2VkIHRvIHNhdGlzZnkKKyAqIHJlcXVlc3RzLgorICogCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNUYWJsZSBpcyBzdWJpZCAxIG9mIHN0YXRpc3RpY3MuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEsIGxlbmd0aDogOQorICovCisKKy8qKgorICogaW5pdGlhbGl6YXRpb24gZm9yIGV0aGVyU3RhdHNUYWJsZSBkYXRhIGFjY2VzcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwIHRvIGFsbG93IHlvdSB0bworICogYWxsb2NhdGUgYW55IHJlc291cmNlcyB5b3UgbmVlZCBmb3IgdGhlIGRhdGEgdGFibGUuCisgKgorICogQHBhcmFtIGV0aGVyU3RhdHNUYWJsZV9yZWcKKyAqICAgICAgICBQb2ludGVyIHRvIGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiB1bnJlY292ZXJhYmxlIGVycm9yLgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9pbml0X2RhdGEoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWcpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9pbml0X2RhdGEiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDM6bzogSW5pdGlhbGl6ZSBldGhlclN0YXRzVGFibGUgZGF0YS4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2luaXRfZGF0YSAqLworCisvKioKKyAqIGNvbnRhaW5lciBvdmVydmlldworICoKKyAqLworCisvKioKKyAqIGNvbnRhaW5lciBpbml0aWFsaXphdGlvbgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyX3B0ciBBIHBvaW50ZXIgdG8gYSBjb250YWluZXIgcG9pbnRlci4gSWYgeW91CisgKiAgICAgICAgY3JlYXRlIGEgY3VzdG9tIGNvbnRhaW5lciwgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHJldHVybiBpdAorICogICAgICAgIHRvIHRoZSBNRkQgaGVscGVyLiBJZiBzZXQgdG8gTlVMTCwgdGhlIE1GRCBoZWxwZXIgd2lsbAorICogICAgICAgIGFsbG9jYXRlIGEgY29udGFpbmVyIGZvciB5b3UuCisgKiBAcGFyYW0gIGNhY2hlIEEgcG9pbnRlciB0byBhIGNhY2hlIHN0cnVjdHVyZS4gWW91IGNhbiBzZXQgdGhlIHRpbWVvdXQKKyAqICAgICAgICAgYW5kIG90aGVyIGNhY2hlIGZsYWdzIHVzaW5nIHRoaXMgcG9pbnRlci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuIElmIG5vIGN1c3RvbQorICogIGNvbnRhaW5lciBpcyBhbGxvY2F0ZWQsIHRoZSBNRkQgY29kZSB3aWxsIGNyZWF0ZSBvbmUgZm9yIHlvdXIuCisgKgorICogIFRoaXMgaXMgYWxzbyB0aGUgcGxhY2UgdG8gc2V0IHVwIGNhY2hlIGJlaGF2aW9yLiBUaGUgZGVmYXVsdCwgdG8KKyAqICBzaW1wbHkgc2V0IHRoZSBjYWNoZSB0aW1lb3V0LCB3aWxsIHdvcmsgd2VsbCB3aXRoIHRoZSBkZWZhdWx0CisgKiAgY29udGFpbmVyLiBJZiB5b3UgYXJlIHVzaW5nIGEgY3VzdG9tIGNvbnRhaW5lciwgeW91IG1heSB3YW50IHRvCisgKiAgbG9vayBhdCB0aGUgY2FjaGUgaGVscGVyIGRvY3VtZW50YXRpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkKKyAqICBmbGFncyB5b3Ugd2FudCB0byBzZXQuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGluaXRpYWxpemF0aW9uIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBvcGVuaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHdpbGwgc3VwcGx5IHRoZSBkYXRhLCBvcGVuaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAorZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyICoqIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXJfcHRyX3B0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIGNvbnRhaW5lciBwYXJhbSB0byBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CisgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KKyAgICAgKi8KKyAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjYWNoZSBwYXJhbSB0byBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgZXRoZXJTdGF0c1RhYmxlIGNhY2hlIHByb3BlcnRpZXMuCisgICAgICoKKyAgICAgKiBBbHNvIGZvciBhZHZhbmNlZCB1c2VycywgeW91IGNhbiBzZXQgcGFyYW1ldGVycyBmb3IgdGhlCisgICAgICogY2FjaGUuIERvIG5vdCBjaGFuZ2UgdGhlIG1hZ2ljIHBvaW50ZXIsIGFzIGl0IGlzIHVzZWQKKyAgICAgKiBieSB0aGUgTUZEIGhlbHBlci4gVG8gY29tcGxldGVseSBkaXNhYmxlIGNhY2hpbmcsIHNldAorICAgICAqIGNhY2hlLT5lbmFibGVkIHRvIDAuCisgICAgICovCisgICAgY2FjaGUtPnRpbWVvdXQgPSBFVEhFUlNUQVRTVEFCTEVfQ0FDSEVfVElNRU9VVDsgICAgIC8qIHNlY29uZHMgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0ICovCisKKy8qKgorICogY29udGFpbmVyIHNodXRkb3duCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHIgQSBwb2ludGVyIHRvIHRoZSBjb250YWluZXIuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHNodXRkb3duIHRvIGFsbG93IHlvdSB0byBjdXN0b21pemUgY2VydGFpbgorICogIGFzcGVjdHMgb2YgdGhlIGFjY2VzcyBtZXRob2QuIEZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyBmb3IgYWR2YW5jZWQKKyAqICB1c2Vycy4gVGhlIGRlZmF1bHQgY29kZSBzaG91bGQgc3VmZmljZSBmb3IgbW9zdCBjYXNlcy4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSgpLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBjbGVhbnVwIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBjbG9zaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHN1cHBsaWVkIHRoZSBkYXRhLCBjbG9zaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAorZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcl9wdHIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgcGFyYW1zIHRvIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd25cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworLyoqCisgKiBsb2FkIGluaXRpYWwgZGF0YQorICoKKyAqIFRPRE86MzUwOk06IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgZGF0YSBsb2FkCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIGNhY2hlIGhlbHBlciB0byBsb2FkCisgKiB0aGUgY29udGFpbmVyIGFnYWluIChhZnRlciB0aGUgY29udGFpbmVyIGZyZWUgZnVuY3Rpb24gaGFzIGJlZW4KKyAqIGNhbGxlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBjb250ZW50cykuCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgdG8gd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGluc2VydGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgOiBDYW4ndCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGluZGV4KGVzKSAoYW5kIGRhdGEsIG9wdGlvbmFsbHkpCisgKiAgZm9yIHRoZSBldmVyeSByb3cgaW4gdGhlIGRhdGEgc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBXaGlsZSBsb2FkaW5nIHRoZSBkYXRhLCB0aGUgb25seSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIGluZGV4ZXMuCisgKiAgSWYgYWNjZXNzIHRvIHlvdXIgZGF0YSBpcyBjaGVhcC9mYXN0IChlLmcuIHlvdSBoYXZlIGEgcG9pbnRlciB0byBhCisgKiAgc3RydWN0dXJlIGluIG1lbW9yeSksIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXBkYXRlIHRoZSBkYXRhIGhlcmUuCisgKiAgSWYsIGhvd2V2ZXIsIHRoZSBhY2Nlc3NpbmcgdGhlIGRhdGEgaW52b3ZsZXMgbW9yZSB3b3JrIChlLmcuIHBhcnNpbmcKKyAqICBzb21lIG90aGVyIGV4aXN0aW5nIGRhdGEsIG9yIHBlZm9ybWluZyBjYWxjdWxhdGlvbnMgdG8gZGVyaXZlIHRoZSBkYXRhKSwKKyAqICB0aGVuIHlvdSBjYW4gbGltaXQgeW91cnNlbGYgdG8gc2V0dGluZyB0aGUgaW5kZXhlcyBhbmQgc2F2aW5nIGFueQorICogIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgbGF0ZXIuIFRoZW4gdXNlIHRoZSBzYXZlZCBpbmZvcm1hdGlvbiBpbgorICogIGV0aGVyU3RhdHNUYWJsZV9yb3dfcHJlcCgpIGZvciBwb3B1bGF0aW5nIGRhdGEuCisgKgorICogQG5vdGUKKyAqICBJZiB5b3UgbmVlZCBjb25zaXN0ZW5jeSBiZXR3ZWVuIHJvd3MgKGxpa2UgeW91IHdhbnQgc3RhdGlzdGljcworICogIGZvciBlYWNoIHJvdyB0byBiZSBmcm9tIHRoZSBzYW1lIHRpbWUgZnJhbWUpLCB5b3Ugc2hvdWxkIHNldCBhbGwKKyAqICBkYXRhIGhlcmUuCisgKgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBzaXplX3QgICAgICAgICAgY291bnQgPSAwOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM1MjpNOiB8ICAgfC0+IHNldCBpbmRleGVzIGluIG5ldyBldGhlclN0YXRzVGFibGUgcm93cmVxIGNvbnRleHQuCisgICAgICogZGF0YSBjb250ZXh0IHdpbGwgYmUgc2V0IGZyb20gdGhlIHBhcmFtICh1bmxlc3MgTlVMTCwKKyAgICAgKiAgICAgIGluIHdoaWNoIGNhc2UgYSBuZXcgZGF0YSBjb250ZXh0IHdpbGwgYmUgYWxsb2NhdGVkKQorICAgICAqLworCisgICAgLyoKKyAgICAgKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgaW5kZXggdmFsdWVzCisgICAgICovCisgICAgCisgICAgLyoKKyAgICAgKiBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2gKKyAgICAgKi8KKworICAgIGludCAgICAgICAgICAgICBmZDsKKworI2lmIGRlZmluZWQobGludXgpCisgICAgc3RydWN0IGlmbmFtZSAqbGlzdF9oZWFkID0gTlVMTCwgKnAgPSBOVUxMOworI2VuZGlmCisgICAgCisgICAgLyoKKyAgICAgKiBjcmVhdGUgc29ja2V0IGZvciBpb2N0bHMKKyAgICAgKi8KKworICAgIGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOworICAgIGlmKGZkIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGNyZWF0ZSBzb2NrZXRcbiIpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBnZXQgdGhlIGludGVyZmFjZSBuYW1lcyBvZiB0aGUgZGV2aWNlcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0sIGluIGNhc2Ugb2YgZmFpbHVyZSByZXR2YWwgc3VnZ2VzdHMgdGhlIHJlc29uIGZvciBmYWlsdXJlCisgICAgICogYW5kIGxpc3RfaGVhZCBjb250YWlucyBudWxsCisgICAgICovCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorICAgIHsKKyAgICAgICAgaW50IHJldHZhbDsKKworICAgICAgICBsaXN0X2hlYWQgPSBldGhlcnN0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZ2V0KGxpc3RfaGVhZCwgJnJldHZhbCk7CisgICAgfQorCisgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLCBlcnJvciBnZXR0aW5nIHRoZSBpbnRlcmZhY2UgbmFtZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtXG4iKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGUiLCAiZXJyb3IgZ2V0dGluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSIpKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIC8qCisgICAgICogV2FsayBvdmVyIHRoZSBsaXN0IG9mIGludGVyZmFjZSBuYW1lcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0gYW5kIHJldHJlaXZlIHRoZSBzdGF0aXN0aWNzIAorICAgICAqLworCisgICAgZm9yIChwID0gbGlzdF9oZWFkOyBwOyBwID0gcC0+aWZuX25leHQpIHsKKyAgICAgICAgbG9uZyAgICAgICAgICAgIGV0aGVyU3RhdHNJbmRleDsKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGUiLCAicHJvY2Vzc2luZyAnJXMnXG4iLCBwLT5uYW1lKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZ2V0IGluZGV4IHZpYSBpb2N0bC4KKyAgICAgICAgICovCisKKyAgICAgICAgZXRoZXJTdGF0c0luZGV4ID0gKGxvbmcpIGV0aGVyc3RhdHNfaW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0KC0xLCBwLT5uYW1lKTsKKworICAgICAgICAvKiAKKyAgICAgICAgICogIGdldCB0aGUgZXRoZXJzdGF0cyBjb250ZW50cyBwb3B1bGF0ZWQsIGlmIHRoZSBkZXZpY2UgaXMgbm90IGFuIGV0aGVybmV0IGRldmljZQorICAgICAgICAgKiAgdGhlIG9wZXJhdGlvbiB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYW5kIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBsb2dnZWQKKyAgICAgICAgICovCisgICAgICAgIAorICAgICAgICByb3dyZXFfY3R4ID0gZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoTlVMTCk7CisgICAgICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPQorICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KHJvd3JlcV9jdHgsIGV0aGVyU3RhdHNJbmRleCkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGUgZGF0YS5cbiIpOworICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzozNTI6cjogfCAgIHwtPiBwb3B1bGF0ZSBldGhlclN0YXRzVGFibGUgZGF0YSBjb250ZXh0LgorICAgICAgICAgKiBQb3B1bGF0ZSBkYXRhIGNvbnRleHQgaGVyZS4gKG9wdGlvbmFsbHksIGRlbGF5IHVudGlsIHJvdyBwcmVwKQorICAgICAgICAgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogbm9uLVRSQU5TSUVOVCBkYXRhOiBubyBuZWVkIHRvIGNvcHkuIHNldCBwb2ludGVyIHRvIGRhdGEgCisgICAgICAgICAqLworCisgICAgICAgIG1lbXNldCAoJnJvd3JlcV9jdHgtPmRhdGEsIDAsIHNpemVvZiAocm93cmVxX2N0eC0+ZGF0YSkpOworICAgICAgICB7CisgICAgICAgICAgICBpbnQgcmM7CisKKyAgICAgICAgICAgIHJjID0gaW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IChyb3dyZXFfY3R4LCBmZCwgcC0+bmFtZSk7CisKKyAgICAgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSIsICJlcnJvciBnZXR0aW5nIHRoZSBzdGF0aXN0aWNzIGZvciBpbnRlcmZhY2UgfCVzfCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZSBkYXRhLCBvcGVyYXRpb24gbWlnaHQgbm90IGJlIHN1cHBvcnRlZFxuIiwgcC0+bmFtZSkpOworICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBpbnNlcnQgaW50byB0YWJsZSBjb250YWluZXIKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGUiLCAiZXJyb3IgaW5zZXJ0aW5nIHwlc3wgIiwgcC0+bmFtZSkpOworICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICArK2NvdW50OworICAgIH0KKworICAgIGNsb3NlKGZkKTsKKworICAgIC8qCisgICAgICogZnJlZSB0aGUgaW50ZXJmYWNlIG5hbWVzIGxpc3QgCisgICAgICovCisKKyAgICBpZiAoIChldGhlcnN0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZnJlZShsaXN0X2hlYWQpKSA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsIGVycm9yIGZyZWVpbmcgdGhlIGludGVyZmFjZSBuYW1lIGxpc3QgXG4iKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGUiLCAiZXJyb3IgZnJlZWluZyB0aGUgaW50ZXJmYWNlIG5hbWUgbGlzdFxuIikpOworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIERFQlVHTVNHVCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCIsCisgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgJSIgTkVUU05NUF9QUkl6ICJkIHJlY29yZHNcbiIsIGNvdW50KSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkICovCisKKworLyoqCisgKiBjb250YWluZXIgY2xlYW4gdXAKKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5lciB3aXRoIGFsbCBjdXJyZW50IGl0ZW1zCisgKgorICogIFRoaXMgb3B0aW9uYWwgY2FsbGJhY2sgaXMgY2FsbGVkIHByaW9yIHRvIGFsbAorICogIGl0ZW0ncyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lci4gSWYgeW91CisgKiAgbmVlZCB0byBkbyBhbnkgcHJvY2Vzc2luZyBiZWZvcmUgdGhhdCwgZG8gaXQgaGVyZS4KKyAqCisgKiBAbm90ZQorICogIFRoZSBNRkQgaGVscGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlbGVhc2luZyBhbGwgdGhlIHJvdyBjb250ZXh0cy4KKyAqCisgKi8KK3ZvaWQKK2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzgwOk06IEZyZWUgZXRoZXJTdGF0c1RhYmxlIGNvbnRhaW5lciBkYXRhLgorICAgICAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBwcmVwYXJlIHJvdyBmb3IgcHJvY2Vzc2luZy4KKyAqCisgKiAgV2hlbiB0aGUgYWdlbnQgaGFzIGxvY2F0ZWQgdGhlIHJvdyBmb3IgYSByZXF1ZXN0LCB0aGlzIGZ1bmN0aW9uIGlzCisgKiAgY2FsbGVkIHRvIHByZXBhcmUgdGhlIHJvdyBmb3IgcHJvY2Vzc2luZy4gSWYgeW91IGZ1bGx5IHBvcHVsYXRlZAorICogIHRoZSBkYXRhIGNvbnRleHQgZHVyaW5nIHRoZSBpbmRleCBzZXR1cCBwaGFzZSwgeW91IG1heSBub3QgbmVlZCB0bworICogIGRvIGFueXRoaW5nLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4IHBvaW50ZXIgdG8gYSBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3Jvd19wcmVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3Jvd19wcmVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM5MDpvOiBQcmVwYXJlIHJvdyBmb3IgcmVxdWVzdC4KKyAgICAgKiBJZiBwb3B1bGF0aW5nIHJvdyBkYXRhIHdhcyBkZWxheWVkLCB0aGlzIGlzIHRoZSBwbGFjZSB0bworICAgICAqIGZpbGwgaW4gdGhlIHJvdyBmb3IgdGhpcyByZXF1ZXN0LgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfcm93X3ByZXAgKi8KKworLyoKKyAqIFRPRE86NDIwOnI6IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgaW5kZXggdmFsaWRhdGlvbi4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0luZGV4CisgKiBldGhlclN0YXRzSW5kZXggaXMgc3ViaWQgMSBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMQorICogRGVzY3JpcHRpb246CitUaGUgdmFsdWUgb2YgdGhpcyBvYmplY3QgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzCisgICAgICAgIGV0aGVyU3RhdHMgZW50cnkuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDEgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKiBSYW5nZXM6ICAxIC0gNjU1MzU7CisgKgorICogSXRzIHN5bnRheCBpcyBJTlRFR0VSMzIgKGJhc2VkIG9uIHBlcmx0eXBlIElOVEVHRVIzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9JTlRFR0VSLiBUaGUgQyB0eXBlIGRlY2wgaXMgbG9uZyAobG9uZykKKyAqLworLyoqCisgKiBjaGVjayB2YWxpZGl0eSBvZiBldGhlclN0YXRzSW5kZXggaW5kZXggcG9ydGlvbgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICA6IHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBsZWdhbAorICogQHJldHZhbCBNRkRfRVJST1IgICAgIDogdGhlIGluY29taW5nIHZhbHVlIGlzIE5PVCBsZWdhbAorICoKKyAqIEBub3RlIHRoaXMgaXMgbm90IHRoZSBwbGFjZSB0byBkbyBhbnkgY2hlY2tzIGZvciB0aGUgc2FuaXR5CisgKiAgICAgICBvZiBtdWx0aXBsZSBpbmRleGVzLiBUaG9zZSB0eXBlcyBvZiBjaGVja3Mgc2hvdWxkIGJlIGRvbmUgaW4gdGhlCisgKiAgICAgICBldGhlclN0YXRzVGFibGVfdmFsaWRhdGVfaW5kZXgoKSBmdW5jdGlvbi4KKyAqCisgKiBAbm90ZSBBbHNvIGtlZXAgaW4gbWluZCB0aGF0IGlmIHRoZSBpbmRleCByZWZlcnMgdG8gYSByb3cgaW4gdGhpcyBvcgorICogICAgICAgc29tZSBvdGhlciB0YWJsZSwgeW91IGNhbid0IGNoZWNrIGZvciB0aGF0IHJvdyBoZXJlIHRvIG1ha2UKKyAqICAgICAgIGRlY2lzaW9ucywgc2luY2UgdGhhdCByb3cgbWlnaHQgbm90IGJlIGNyZWF0ZWQgeWV0LCBidXQgbWF5CisgKiAgICAgICBiZSBjcmVhdGVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QuIElmIHlvdSBoYXZlCisgKiAgICAgICBzdWNoIGNoZWNrcywgdGhleSBzaG91bGQgYmUgZG9uZSBpbiB0aGUgY2hlY2tfZGVwZW5kZW5jaWVzCisgKiAgICAgICBmdW5jdGlvbiwgYmVjYXVzZSBhbnkgbmV3L2RlbGV0ZWQvY2hhbmdlZCByb3dzIHNob3VsZCBiZQorICogICAgICAgYXZhaWxhYmxlIHRoZW4uCisgKgorICogVGhlIGZvbGxvd2luZyBjaGVja3MgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSBmb3IgeW91OgorICogICAgVGhlIHZhbHVlIGlzIGluIChvbmUgb2YpIHRoZSByYW5nZSBzZXQocyk6ICAxIC0gNjU1MzUKKyAqCisgKiBJZiB0aGVyZSBhIG5vIG90aGVyIGNoZWNrcyB5b3UgbmVlZCB0byBkbywgc2ltcGx5IHJldHVybiBNRkRfU1VDQ0VTUy4KKyAqLworaW50CitldGhlclN0YXRzSW5kZXhfY2hlY2tfaW5kZXgoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzSW5kZXhfY2hlY2tfaW5kZXgiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDI2Ok06IHwtPiBDaGVjayBldGhlclN0YXRzVGFibGUgaW5kZXggZXRoZXJTdGF0c0luZGV4LgorICAgICAqIGNoZWNrIHRoYXQgaW5kZXggdmFsdWUgaW4gdGhlIHRhYmxlIGNvbnRleHQgaXMgbGVnYWwuCisgICAgICogKHJvd3JlcV9jdHgtPnRibF9pbmRleC5ldGhlclN0YXRzSW5kZXgpCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7ICAgICAgICAgLyogZXRoZXJTdGF0c0luZGV4IGluZGV4IG9rICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNJbmRleF9jaGVja19pbmRleCAqLworCisvKioKKyAqIHZlcmlmeSBzcGVjaWZpZWQgaW5kZXggaXMgdmFsaWQuCisgKgorICogVGhpcyBjaGVjayBpcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWVzIHNwZWNpZmllZCBmb3IKKyAqIHRoZSBjb2x1bW5zIG9mIHRoZSBuZXcgcm93IGFyZSB2YWxpZC4gQ29sdW1uIHZhbHVlcyBhbmQgcm93IGNvbnNpc3RlbmN5CisgKiB3aWxsIGJlIGNoZWNrZWQgbGF0ZXIuIEF0IHRoaXMgcG9pbnQsIG9ubHkgdGhlIGluZGV4IHZhbHVlcyBzaG91bGQgYmUKKyAqIGNoZWNrZWQuCisgKgorICogQWxsIG9mIHRoZSBpbmRpdmlkdWFsIGluZGV4IHZhbGlkYXRpb24gZnVuY3Rpb25zIGhhdmUgYmVlbiBjYWxsZWQsIHNvIHRoaXMKKyAqIGlzIHRoZSBwbGFjZSB0byBtYWtlIHN1cmUgdGhleSBhcmUgdmFsaWQgYXMgYSB3aG9sZSB3aGVuIGNvbWJpbmVkLiBJZgorICogeW91IG9ubHkgaGF2ZSBvbmUgaW5kZXgsIHRoZW4geW91IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZWxzZQorICogaGVyZS4KKyAqIAorICogQG5vdGUgS2VlcCBpbiBtaW5kIHRoYXQgaWYgdGhlIGluZGV4ZXMgcmVmZXIgdG8gYSByb3cgaW4gdGhpcyBvcgorICogICAgICAgc29tZSBvdGhlciB0YWJsZSwgeW91IGNhbid0IGNoZWNrIGZvciB0aGF0IHJvdyBoZXJlIHRvIG1ha2UKKyAqICAgICAgIGRlY2lzaW9ucywgc2luY2UgdGhhdCByb3cgbWlnaHQgbm90IGJlIGNyZWF0ZWQgeWV0LCBidXQgbWF5CisgKiAgICAgICBiZSBjcmVhdGVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QuIElmIHlvdSBoYXZlCisgKiAgICAgICBzdWNoIGNoZWNrcywgdGhleSBzaG91bGQgYmUgZG9uZSBpbiB0aGUgY2hlY2tfZGVwZW5kZW5jaWVzCisgKiAgICAgICBmdW5jdGlvbiwgYmVjYXVzZSBhbnkgbmV3L2RlbGV0ZWQvY2hhbmdlZCByb3dzIHNob3VsZCBiZQorICogICAgICAgYXZhaWxhYmxlIHRoZW4uCisgKgorICoKKyAqIEBwYXJhbSBldGhlclN0YXRzVGFibGVfcmVnCisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlciByZWdpc3RyYXRpb24gZGF0YQorICogQHBhcmFtIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4KKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0NBTk5PVF9DUkVBVEVfTk9XICA6IGluZGV4IG5vdCB2YWxpZCByaWdodCBub3cKKyAqIEByZXR2YWwgTUZEX0NBTk5PVF9DUkVBVEVfRVZFUiA6IGluZGV4IG5ldmVyIHZhbGlkCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3ZhbGlkYXRlX2luZGV4KGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIGludCAgICAgICAgICAgICByYyA9IE1GRF9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV92YWxpZGF0ZV9pbmRleCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDMwOk06IHwtPiBWYWxpZGF0ZSBwb3RlbnRpYWwgZXRoZXJTdGF0c1RhYmxlIGluZGV4LgorICAgICAqLworICAgIGlmICgxKSB7CisgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiaW52YWxpZCBpbmRleCBmb3IgYSBuZXcgcm93IGluIHRoZSAiCisgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGUgdGFibGUuXG4iKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogZGV0ZXJtaW5lIGZhaWx1cmUgdHlwZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSWYgdGhlIGluZGV4IGNvdWxkIG5vdCBldmVyIGJlIGNyZWF0ZWQsIHJldHVybiBNRkRfTk9UX0VWRVIKKyAgICAgICAgICogSWYgdGhlIGluZGV4IGNhbiBub3QgYmUgY3JlYXRlZCB1bmRlciB0aGUgcHJlc2VudCBjaXJjdW1zdGFuY2VzCisgICAgICAgICAqIChldmVuIHRob3VnaCBpdCBjb3VsZCBiZSBjcmVhdGVkIHVuZGVyIG90aGVyIGNpcmN1bXN0YW5jZXMpLAorICAgICAgICAgKiByZXR1cm4gTUZEX05PVF9OT1cuCisgICAgICAgICAqLworICAgICAgICBpZiAoMCkgeworICAgICAgICAgICAgcmV0dXJuIE1GRF9DQU5OT1RfQ1JFQVRFX0VWRVI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gTUZEX0NBTk5PVF9DUkVBVEVfTk9XOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfdmFsaWRhdGVfaW5kZXggKi8KKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3MDBmNAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIEVUSEVSU1RBVFNUQUJMRV9EQVRBX0FDQ0VTU19ICisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9EQVRBX0FDQ0VTU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBldGhlclN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFJNT04tTUlCOjpldGhlclN0YXRzVGFibGUgaXMgc3ViaWQgMSBvZiBzdGF0aXN0aWNzLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEsIGxlbmd0aDogOQorICAgICAqLworCisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2luaXRfZGF0YShldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBldGhlclN0YXRzVGFibGVfcmVnKTsKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjE4MDpvOiBSZXZpZXcgZXRoZXJTdGF0c1RhYmxlIGNhY2hlIHRpbWVvdXQuCisgICAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUgY2FjaGUgdGltZXMgb3V0CisgICAgICovCisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9DQUNIRV9USU1FT1VUICAgNjAKKworICAgIHZvaWQgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKTsKKyAgICB2b2lkICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cik7CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jYWNoZV9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NhY2hlX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisjZGVmaW5lIE1BWF9MSU5FX1NJWkUgMjU2CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd19wcmVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV92YWxpZGF0ZV9pbmRleChldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0luZGV4X2NoZWNrX2luZGV4KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7ICAgICAgIC8qIGludGVybmFsICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVRIRVJTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuYyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmE1MWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5jCkBAIC0wLDAgKzEsMTQxMSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwODggJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGUuaCIKKworCisvKiogQGRlZmdyb3VwIGRhdGFfZ2V0IGRhdGFfZ2V0OiBSb3V0aW5lcyB0byBnZXQgZGF0YQorICoKKyAqIFRPRE86MjMwOk06IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgZ2V0IHJvdXRpbmVzLgorICogVE9ETzoyNDA6TTogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSBtYXBwaW5nIHJvdXRpbmVzIChpZiBhbnkpLgorICoKKyAqIFRoZXNlIHJvdXRpbmUgYXJlIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzLiBUaGUKKyAqIHJvdyBjb250ZXh0IGlzIHBhc3NlZCwgYWxvbmcgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSB3aGVyZSB0aGUKKyAqIHZhbHVlIHNob3VsZCBiZSBjb3BpZWQuCisgKgorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJNT04tTUlCOjpldGhlclN0YXRzVGFibGUgaXMgc3ViaWQgMSBvZiBzdGF0aXN0aWNzLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLCBsZW5ndGg6IDkKKyAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAqIFRPRE86MjAwOnI6IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgZGF0YSBjb250ZXh0IGZ1bmN0aW9ucy4KKyAqLworCisKKy8qKgorICogc2V0IG1pYiBpbmRleChlcykKKyAqCisgKiBAcGFyYW0gdGJsX2lkeCBtaWIgaW5kZXggc3RydWN0dXJlCisgKiBAcGFyYW0gZXRoZXJTdGF0c0luZGV4X3ZhbAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgY29udmVuaWVuY2UgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBzZXR0aW5nIGFsbCB0aGUgTUlCIGluZGV4CisgKiAgY29tcG9uZW50cyB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIEl0IGlzIGFzc3VtZSB0aGF0IHRoZSBDIHZhbHVlcworICogIGhhdmUgYWxyZWFkeSBiZWVuIG1hcHBlZCBmcm9tIHRoZWlyIG5hdGl2ZS9yYXdmb3JtYXQgdG8gdGhlIE1JQiBmb3JtYXQuCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGV0aGVyU3RhdHNJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2ggCisgICAgICovCisgICAgdGJsX2lkeC0+ZXRoZXJTdGF0c0luZGV4ID0gZXRoZXJTdGF0c0luZGV4X3ZhbDsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2V0IHJvdyBjb250ZXh0IGluZGV4ZXMKKyAqCisgKiBAcGFyYW0gcmVxcmVxX2N0eCB0aGUgcm93IGNvbnRleHQgdGhhdCBuZWVkcyB1cGRhdGVkIGluZGV4ZXMKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG1pYiBpbmRleHMsIHRoZW4gdXBkYXRlcyB0aGUgb2lkIGluZGV4cworICogIGZyb20gdGhlIG1pYiBpbmRleC4KKyAqLworaW50CitldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXRoZXJTdGF0c0luZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0KKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoJnJvd3JlcV9jdHgtPnRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNJbmRleF92YWwpKQorICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0IG1pYiBpbmRleCB0byBvaWQgaW5kZXgKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT5vaWRfaWR4LmxlbiA9IHNpemVvZihyb3dyZXFfY3R4LT5vaWRfdG1wKSAvIHNpemVvZihvaWQpOworICAgIGlmICgwICE9IGV0aGVyU3RhdHNUYWJsZV9pbmRleF90b19vaWQoJnJvd3JlcV9jdHgtPm9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93cmVxX2N0eC0+dGJsX2lkeCkpIHsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNEYXRhU291cmNlCisgKiBldGhlclN0YXRzRGF0YVNvdXJjZSBpcyBzdWJpZCAyIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgQ3JlYXRlLgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMgorICogRGVzY3JpcHRpb246CitUaGlzIG9iamVjdCBpZGVudGlmaWVzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEgdGhhdAorICAgICAgICB0aGlzIGV0aGVyU3RhdHMgZW50cnkgaXMgY29uZmlndXJlZCB0byBhbmFseXplLiAgVGhpcworICAgICAgICBzb3VyY2UgY2FuIGJlIGFueSBldGhlcm5ldCBpbnRlcmZhY2Ugb24gdGhpcyBkZXZpY2UuCisgICAgICAgIEluIG9yZGVyIHRvIGlkZW50aWZ5IGEgcGFydGljdWxhciBpbnRlcmZhY2UsIHRoaXMgb2JqZWN0CisgICAgICAgIHNoYWxsIGlkZW50aWZ5IHRoZSBpbnN0YW5jZSBvZiB0aGUgaWZJbmRleCBvYmplY3QsCisgICAgICAgIGRlZmluZWQgaW4gUkZDIDIyMzMgWzE3XSwgZm9yIHRoZSBkZXNpcmVkIGludGVyZmFjZS4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGFuIGVudHJ5IHdlcmUgdG8gcmVjZWl2ZSBkYXRhIGZyb20KKyAgICAgICAgaW50ZXJmYWNlICMxLCB0aGlzIG9iamVjdCB3b3VsZCBiZSBzZXQgdG8gaWZJbmRleC4xLgorCisgICAgICAgIFRoZSBzdGF0aXN0aWNzIGluIHRoaXMgZ3JvdXAgcmVmbGVjdCBhbGwgcGFja2V0cworICAgICAgICBvbiB0aGUgbG9jYWwgbmV0d29yayBzZWdtZW50IGF0dGFjaGVkIHRvIHRoZSBpZGVudGlmaWVkCisgICAgICAgIGludGVyZmFjZS4KKworICAgICAgICBBbiBhZ2VudCBtYXkgb3IgbWF5IG5vdCBiZSBhYmxlIHRvIHRlbGwgaWYgZnVuZGFtZW50YWwKKyAgICAgICAgY2hhbmdlcyB0byB0aGUgbWVkaWEgb2YgdGhlIGludGVyZmFjZSBoYXZlIG9jY3VycmVkIGFuZAorICAgICAgICBuZWNlc3NpdGF0ZSBhbiBpbnZhbGlkYXRpb24gb2YgdGhpcyBlbnRyeS4gIEZvciBleGFtcGxlLCBhCisgICAgICAgIGhvdC1wbHVnZ2FibGUgZXRoZXJuZXQgY2FyZCBjb3VsZCBiZSBwdWxsZWQgb3V0IGFuZCByZXBsYWNlZAorICAgICAgICBieSBhIHRva2VuLXJpbmcgY2FyZC4gIEluIHN1Y2ggYSBjYXNlLCBpZiB0aGUgYWdlbnQgaGFzIHN1Y2gKKyAgICAgICAga25vd2xlZGdlIG9mIHRoZSBjaGFuZ2UsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaXQKKyAgICAgICAgaW52YWxpZGF0ZSB0aGlzIGVudHJ5LgorCisgICAgICAgIFRoaXMgb2JqZWN0IG1heSBub3QgYmUgbW9kaWZpZWQgaWYgdGhlIGFzc29jaWF0ZWQKKyAgICAgICAgZXRoZXJTdGF0c1N0YXR1cyBvYmplY3QgaXMgZXF1YWwgdG8gdmFsaWQoMSkuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDEKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBPQkpFQ1RJRCAoYmFzZWQgb24gcGVybHR5cGUgT0JKRUNUSUQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fT0JKRUNUX0lELiBUaGUgQyB0eXBlIGRlY2wgaXMgb2lkIChvaWQpCisgKiBUaGlzIGRhdGEgdHlwZSByZXF1aXJlcyBhIGxlbmd0aC4KKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzRGF0YVNvdXJjZSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIG9pZCB2YXJpYWJsZQorICogQHBhcmFtIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gYSBzaXplX3QuIE9uIGVudHJ5LCBpdCB3aWxsIGNvbnRhaW4gdGhlIHNpemUgKGluIGJ5dGVzKQorICogICAgICAgIHBvaW50ZWQgdG8gYnkgZXRoZXJTdGF0c0RhdGFTb3VyY2UuCisgKiAgICAgICAgT24gZXhpdCwgdGhpcyB2YWx1ZSBzaG91bGQgY29udGFpbiB0aGUgZGF0YSBzaXplIChpbiBieXRlcykuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyoKKyAqIEBub3RlIElmIHlvdSBuZWVkIG1vcmUgdGhhbiAoKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuX3B0cikgYnl0ZXMgb2YgbWVtb3J5LAorICogICAgICAgYWxsb2NhdGUgaXQgdXNpbmcgbWFsbG9jKCkgYW5kIHVwZGF0ZSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0ci4KKyAqICAgICAgIDxiPkRPIE5PVDwvYj4gZnJlZSB0aGUgcHJldmlvdXMgcG9pbnRlci4KKyAqICAgICAgIFRoZSBNRkQgaGVscGVyIHdpbGwgcmVsZWFzZSB0aGUgbWVtb3J5IHlvdSBhbGxvY2F0ZS4KKyAqCisgKiBAcmVtYXJrIElmIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24geW91cnNlbGYsIHlvdSBhcmUgcmVzcG9uc2libGUKKyAqICAgICAgICAgZm9yIGNoZWNraW5nIGlmIHRoZSBwb2ludGVyIGNoYW5nZWQsIGFuZCBmcmVlaW5nIGFueQorICogICAgICAgICBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkuIChOb3QgbmVjZXNzYXJ5IGlmIHlvdSBwYXNzCisgKiAgICAgICAgIGluIGEgcG9pbnRlciB0byBzdGF0aWMgbWVtb3J5LCBvYnZpb3VzbHkuKQorICovCitpbnQKK2V0aGVyU3RhdHNEYXRhU291cmNlX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICoqIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW5fcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciBhbmQgZW5vdWdoIHN0b3JhZ2UgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoTlVMTCAhPSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0cikKKyAgICAgICAgICAgICAgICAgICAmJiAoTlVMTCAhPSAqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzRGF0YVNvdXJjZV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzRGF0YVNvdXJjZSBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIgKSBkYXRhIGFuZCAoKiBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbl9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAvKgorICAgICAqIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGV0aGVyU3RhdHNEYXRhU291cmNlIGRhdGEKKyAgICAgKi8KKyAgICBpZiAoKE5VTEwgPT0gKCpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0cikpIHx8CisgICAgICAgICgoKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuX3B0cikgPAorICAgICAgICAgKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuICoKKyAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZVswXSkpKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgZXRoZXJTdGF0c0RhdGFTb3VyY2UgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgKCpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0cikgPQorICAgICAgICAgICAgbWFsbG9jKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuICoKKyAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZVswXSkpOworICAgICAgICBpZiAoTlVMTCA9PSAoKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICAoKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiAqCisgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlWzBdKTsKKyAgICBtZW1jcHkoKCpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0ciksCisgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2UsCisgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuICoKKyAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VbMF0pKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0RhdGFTb3VyY2VfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNEcm9wRXZlbnRzCisgKiBldGhlclN0YXRzRHJvcEV2ZW50cyBpcyBzdWJpZCAzIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4zCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgZXZlbnRzIGluIHdoaWNoIHBhY2tldHMKKyAgICAgICAgd2VyZSBkcm9wcGVkIGJ5IHRoZSBwcm9iZSBkdWUgdG8gbGFjayBvZiByZXNvdXJjZXMuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIG51bWJlciBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIG51bWJlciBvZgorICAgICAgICBwYWNrZXRzIGRyb3BwZWQ7IGl0IGlzIGp1c3QgdGhlIG51bWJlciBvZiB0aW1lcyB0aGlzCisgICAgICAgIGNvbmRpdGlvbiBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNEcm9wRXZlbnRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0Ryb3BFdmVudHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNEcm9wRXZlbnRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c0Ryb3BFdmVudHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNEcm9wRXZlbnRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0Ryb3BFdmVudHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0Ryb3BFdmVudHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNEcm9wRXZlbnRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRHJvcEV2ZW50czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0Ryb3BFdmVudHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNPY3RldHMKKyAqIGV0aGVyU3RhdHNPY3RldHMgaXMgc3ViaWQgNCBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuNAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyBvZiBkYXRhIChpbmNsdWRpbmcKKyAgICAgICAgdGhvc2UgaW4gYmFkIHBhY2tldHMpIHJlY2VpdmVkIG9uIHRoZQorICAgICAgICBuZXR3b3JrIChleGNsdWRpbmcgZnJhbWluZyBiaXRzIGJ1dCBpbmNsdWRpbmcKKyAgICAgICAgRkNTIG9jdGV0cykuCisKKyAgICAgICAgVGhpcyBvYmplY3QgY2FuIGJlIHVzZWQgYXMgYSByZWFzb25hYmxlIGVzdGltYXRlIG9mCisgICAgICAgIDEwLU1lZ2FiaXQgZXRoZXJuZXQgdXRpbGl6YXRpb24uICBJZiBncmVhdGVyIHByZWNpc2lvbiBpcworICAgICAgICBkZXNpcmVkLCB0aGUgZXRoZXJTdGF0c1BrdHMgYW5kIGV0aGVyU3RhdHNPY3RldHMgb2JqZWN0cworICAgICAgICBzaG91bGQgYmUgc2FtcGxlZCBiZWZvcmUgYW5kIGFmdGVyIGEgY29tbW9uIGludGVydmFsLiAgVGhlCisgICAgICAgIGRpZmZlcmVuY2VzIGluIHRoZSBzYW1wbGVkIHZhbHVlcyBhcmUgUGt0cyBhbmQgT2N0ZXRzLAorICAgICAgICByZXNwZWN0aXZlbHksIGFuZCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gdGhlIGludGVydmFsIGlzCisgICAgICAgIEludGVydmFsLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgVXRpbGl6YXRpb24KKyAgICAgICAgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICAgICAgICAgICAgIFBrdHMgKiAoOS42ICsgNi40KSArIChPY3RldHMgKiAuOCkKKyAgICAgICAgIFV0aWxpemF0aW9uID0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJ2YWwgKiAxMCwwMDAKKworICAgICAgICBUaGUgcmVzdWx0IG9mIHRoaXMgZXF1YXRpb24gaXMgdGhlIHZhbHVlIFV0aWxpemF0aW9uIHdoaWNoCisgICAgICAgIGlzIHRoZSBwZXJjZW50IHV0aWxpemF0aW9uIG9mIHRoZSBldGhlcm5ldCBzZWdtZW50IG9uIGEKKyAgICAgICAgc2NhbGUgb2YgMCB0byAxMDAgcGVyY2VudC4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzT2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzT2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzT2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzT2N0ZXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c09jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzT2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzT2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNPY3RldHNfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPY3RldHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNQa3RzCisgKiBldGhlclN0YXRzUGt0cyBpcyBzdWJpZCA1IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS41CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyAoaW5jbHVkaW5nIGJhZCBwYWNrZXRzLAorICAgICAgICBicm9hZGNhc3QgcGFja2V0cywgYW5kIG11bHRpY2FzdCBwYWNrZXRzKSByZWNlaXZlZC4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1BrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c1BrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNQa3RzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1BrdHNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzUGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzUGt0c192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1BrdHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzQnJvYWRjYXN0UGt0cworICogZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMgaXMgc3ViaWQgNiBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuNgorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIGdvb2QgcGFja2V0cyByZWNlaXZlZCB0aGF0IHdlcmUKKyAgICAgICAgZGlyZWN0ZWQgdG8gdGhlIGJyb2FkY2FzdCBhZGRyZXNzLiAgTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgZG9lcyBub3QgaW5jbHVkZSBtdWx0aWNhc3QgcGFja2V0cy4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzQnJvYWRjYXN0UGt0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzCisgKiBldGhlclN0YXRzTXVsdGljYXN0UGt0cyBpcyBzdWJpZCA3IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS43CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgZ29vZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgd2VyZQorICAgICAgICBkaXJlY3RlZCB0byBhIG11bHRpY2FzdCBhZGRyZXNzLiAgTm90ZSB0aGF0IHRoaXMgbnVtYmVyCisgICAgICAgIGRvZXMgbm90IGluY2x1ZGUgcGFja2V0cyBkaXJlY3RlZCB0byB0aGUgYnJvYWRjYXN0CisKKyAgICAgICAgYWRkcmVzcy4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c011bHRpY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzTXVsdGljYXN0UGt0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycworICogZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzIGlzIHN1YmlkIDggb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjgKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQKKyAgICAgICAgaGFkIGEgbGVuZ3RoIChleGNsdWRpbmcgZnJhbWluZyBiaXRzLCBidXQKKyAgICAgICAgaW5jbHVkaW5nIEZDUyBvY3RldHMpIG9mIGJldHdlZW4gNjQgYW5kIDE1MTgKKyAgICAgICAgb2N0ZXRzLCBpbmNsdXNpdmUsIGJ1dCBoYWQgZWl0aGVyIGEgYmFkCisgICAgICAgIEZyYW1lIENoZWNrIFNlcXVlbmNlIChGQ1MpIHdpdGggYW4gaW50ZWdyYWwKKyAgICAgICAgbnVtYmVyIG9mIG9jdGV0cyAoRkNTIEVycm9yKSBvciBhIGJhZCBGQ1Mgd2l0aAorICAgICAgICBhIG5vbi1pbnRlZ3JhbCBudW1iZXIgb2Ygb2N0ZXRzIChBbGlnbm1lbnQgRXJyb3IpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMKKyAqIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzIGlzIHN1YmlkIDkgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjkKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgd2VyZQorICAgICAgICBsZXNzIHRoYW4gNjQgb2N0ZXRzIGxvbmcgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMsCisgICAgICAgIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cykgYW5kIHdlcmUgb3RoZXJ3aXNlIHdlbGwKKyAgICAgICAgZm9ybWVkLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzVW5kZXJzaXplUGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzVW5kZXJzaXplUGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVW5kZXJzaXplUGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzVW5kZXJzaXplUGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNVbmRlcnNpemVQa3RzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVW5kZXJzaXplUGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c092ZXJzaXplUGt0cworICogZXRoZXJTdGF0c092ZXJzaXplUGt0cyBpcyBzdWJpZCAxMCBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTAKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgd2VyZQorICAgICAgICBsb25nZXIgdGhhbiAxNTE4IG9jdGV0cyAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cywKKyAgICAgICAgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKSBhbmQgd2VyZSBvdGhlcndpc2UKKyAgICAgICAgd2VsbCBmb3JtZWQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzT3ZlcnNpemVQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c092ZXJzaXplUGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c092ZXJzaXplUGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c092ZXJzaXplUGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c092ZXJzaXplUGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c092ZXJzaXplUGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c092ZXJzaXplUGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzT3ZlcnNpemVQa3RzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3ZlcnNpemVQa3RzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzT3ZlcnNpemVQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzRnJhZ21lbnRzCisgKiBldGhlclN0YXRzRnJhZ21lbnRzIGlzIHN1YmlkIDExIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xMQorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCB3ZXJlIGxlc3MgdGhhbgorICAgICAgICA2NCBvY3RldHMgaW4gbGVuZ3RoIChleGNsdWRpbmcgZnJhbWluZyBiaXRzIGJ1dCBpbmNsdWRpbmcKKyAgICAgICAgRkNTIG9jdGV0cykgYW5kIGhhZCBlaXRoZXIgYSBiYWQgRnJhbWUgQ2hlY2sgU2VxdWVuY2UKKyAgICAgICAgKEZDUykgd2l0aCBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygb2N0ZXRzIChGQ1MgRXJyb3IpIG9yIGEKKyAgICAgICAgYmFkIEZDUyB3aXRoIGEgbm9uLWludGVncmFsIG51bWJlciBvZiBvY3RldHMgKEFsaWdubWVudAorICAgICAgICBFcnJvcikuCisKKyAgICAgICAgTm90ZSB0aGF0IGl0IGlzIGVudGlyZWx5IG5vcm1hbCBmb3IgZXRoZXJTdGF0c0ZyYWdtZW50cyB0bworICAgICAgICBpbmNyZW1lbnQuICBUaGlzIGlzIGJlY2F1c2UgaXQgY291bnRzIGJvdGggcnVudHMgKHdoaWNoIGFyZQorICAgICAgICBub3JtYWwgb2NjdXJyZW5jZXMgZHVlIHRvIGNvbGxpc2lvbnMpIGFuZCBub2lzZSBoaXRzLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0ZyYWdtZW50cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNGcmFnbWVudHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNGcmFnbWVudHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNGcmFnbWVudHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNGcmFnbWVudHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzRnJhZ21lbnRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNGcmFnbWVudHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNGcmFnbWVudHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c0ZyYWdtZW50c192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0ZyYWdtZW50czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0ZyYWdtZW50c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0phYmJlcnMKKyAqIGV0aGVyU3RhdHNKYWJiZXJzIGlzIHN1YmlkIDEyIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xMgorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCB3ZXJlCisgICAgICAgIGxvbmdlciB0aGFuIDE1MTggb2N0ZXRzIChleGNsdWRpbmcgZnJhbWluZyBiaXRzLAorICAgICAgICBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpLCBhbmQgaGFkIGVpdGhlciBhIGJhZAorICAgICAgICBGcmFtZSBDaGVjayBTZXF1ZW5jZSAoRkNTKSB3aXRoIGFuIGludGVncmFsIG51bWJlcgorICAgICAgICBvZiBvY3RldHMgKEZDUyBFcnJvcikgb3IgYSBiYWQgRkNTIHdpdGggYSBub24taW50ZWdyYWwKKyAgICAgICAgbnVtYmVyIG9mIG9jdGV0cyAoQWxpZ25tZW50IEVycm9yKS4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyBkZWZpbml0aW9uIG9mIGphYmJlciBpcyBkaWZmZXJlbnQKKyAgICAgICAgdGhhbiB0aGUgZGVmaW5pdGlvbiBpbiBJRUVFLTgwMi4zIHNlY3Rpb24gOC4yLjEuNQorICAgICAgICAoMTBCQVNFNSkgYW5kIHNlY3Rpb24gMTAuMy4xLjQgKDEwQkFTRTIpLiAgVGhlc2UKKyAgICAgICAgZG9jdW1lbnRzIGRlZmluZSBqYWJiZXIgYXMgdGhlIGNvbmRpdGlvbiB3aGVyZSBhbnkKKyAgICAgICAgcGFja2V0IGV4Y2VlZHMgMjAgbXMuICBUaGUgYWxsb3dlZCByYW5nZSB0byBkZXRlY3QKKyAgICAgICAgamFiYmVyIGlzIGJldHdlZW4gMjAgbXMgYW5kIDE1MCBtcy4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNKYWJiZXJzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0phYmJlcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNKYWJiZXJzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c0phYmJlcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNKYWJiZXJzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0phYmJlcnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNKYWJiZXJzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzSmFiYmVyc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzSmFiYmVyc192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0phYmJlcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNKYWJiZXJzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzQ29sbGlzaW9ucworICogZXRoZXJTdGF0c0NvbGxpc2lvbnMgaXMgc3ViaWQgMTMgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjEzCisgKiBEZXNjcmlwdGlvbjoKK1RoZSBiZXN0IGVzdGltYXRlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sbGlzaW9ucworICAgICAgICBvbiB0aGlzIEV0aGVybmV0IHNlZ21lbnQuCisKKyAgICAgICAgVGhlIHZhbHVlIHJldHVybmVkIHdpbGwgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgICAgICAgUk1PTiBwcm9iZS4gU2VjdGlvbiA4LjIuMS4zICgxMEJBU0UtNSkgYW5kIHNlY3Rpb24KKyAgICAgICAgMTAuMy4xLjMgKDEwQkFTRS0yKSBvZiBJRUVFIHN0YW5kYXJkIDgwMi4zIHN0YXRlcyB0aGF0IGEKKyAgICAgICAgc3RhdGlvbiBtdXN0IGRldGVjdCBhIGNvbGxpc2lvbiwgaW4gdGhlIHJlY2VpdmUgbW9kZSwgaWYKKyAgICAgICAgdGhyZWUgb3IgbW9yZSBzdGF0aW9ucyBhcmUgdHJhbnNtaXR0aW5nIHNpbXVsdGFuZW91c2x5LiAgQQorICAgICAgICByZXBlYXRlciBwb3J0IG11c3QgZGV0ZWN0IGEgY29sbGlzaW9uIHdoZW4gdHdvIG9yIG1vcmUKKworICAgICAgICBzdGF0aW9ucyBhcmUgdHJhbnNtaXR0aW5nIHNpbXVsdGFuZW91c2x5LiAgVGh1cyBhIHByb2JlCisgICAgICAgIHBsYWNlZCBvbiBhIHJlcGVhdGVyIHBvcnQgY291bGQgcmVjb3JkIG1vcmUgY29sbGlzaW9ucworICAgICAgICB0aGFuIGEgcHJvYmUgY29ubmVjdGVkIHRvIGEgc3RhdGlvbiBvbiB0aGUgc2FtZSBzZWdtZW50CisgICAgICAgIHdvdWxkLgorCisgICAgICAgIFByb2JlIGxvY2F0aW9uIHBsYXlzIGEgbXVjaCBzbWFsbGVyIHJvbGUgd2hlbiBjb25zaWRlcmluZworICAgICAgICAxMEJBU0UtVC4gIDE0LjIuMS40ICgxMEJBU0UtVCkgb2YgSUVFRSBzdGFuZGFyZCA4MDIuMworICAgICAgICBkZWZpbmVzIGEgY29sbGlzaW9uIGFzIHRoZSBzaW11bHRhbmVvdXMgcHJlc2VuY2Ugb2Ygc2lnbmFscworICAgICAgICBvbiB0aGUgRE8gYW5kIFJEIGNpcmN1aXRzICh0cmFuc21pdHRpbmcgYW5kIHJlY2VpdmluZworICAgICAgICBhdCB0aGUgc2FtZSB0aW1lKS4gIEEgMTBCQVNFLVQgc3RhdGlvbiBjYW4gb25seSBkZXRlY3QKKyAgICAgICAgY29sbGlzaW9ucyB3aGVuIGl0IGlzIHRyYW5zbWl0dGluZy4gIFRodXMgcHJvYmVzIHBsYWNlZCBvbgorICAgICAgICBhIHN0YXRpb24gYW5kIGEgcmVwZWF0ZXIsIHNob3VsZCByZXBvcnQgdGhlIHNhbWUgbnVtYmVyIG9mCisgICAgICAgIGNvbGxpc2lvbnMuCisKKyAgICAgICAgTm90ZSBhbHNvIHRoYXQgYW4gUk1PTiBwcm9iZSBpbnNpZGUgYSByZXBlYXRlciBzaG91bGQKKyAgICAgICAgaWRlYWxseSByZXBvcnQgY29sbGlzaW9ucyBiZXR3ZWVuIHRoZSByZXBlYXRlciBhbmQgb25lIG9yCisgICAgICAgIG1vcmUgb3RoZXIgaG9zdHMgKHRyYW5zbWl0IGNvbGxpc2lvbnMgYXMgZGVmaW5lZCBieSBJRUVFCisgICAgICAgIDgwMi4zaykgcGx1cyByZWNlaXZlciBjb2xsaXNpb25zIG9ic2VydmVkIG9uIGFueSBjb2F4CisgICAgICAgIHNlZ21lbnRzIHRvIHdoaWNoIHRoZSByZXBlYXRlciBpcyBjb25uZWN0ZWQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzQ29sbGlzaW9ucyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNDb2xsaXNpb25zX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzQ29sbGlzaW9uc19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNDb2xsaXNpb25zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzQ29sbGlzaW9uc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNDb2xsaXNpb25zX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNDb2xsaXNpb25zIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzQ29sbGlzaW9uc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzQ29sbGlzaW9uc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0NvbGxpc2lvbnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNDb2xsaXNpb25zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzUGt0czY0T2N0ZXRzCisgKiBldGhlclN0YXRzUGt0czY0T2N0ZXRzIGlzIHN1YmlkIDE0IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xNAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgKGluY2x1ZGluZyBiYWQKKyAgICAgICAgcGFja2V0cykgcmVjZWl2ZWQgdGhhdCB3ZXJlIDY0IG9jdGV0cyBpbiBsZW5ndGgKKyAgICAgICAgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzNjRPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzUGt0czY0T2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1BrdHM2NE9jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czY0T2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNQa3RzNjRPY3RldHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cworICogZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzIGlzIHN1YmlkIDE1IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xNQorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgKGluY2x1ZGluZyBiYWQKKyAgICAgICAgcGFja2V0cykgcmVjZWl2ZWQgdGhhdCB3ZXJlIGJldHdlZW4KKyAgICAgICAgNjUgYW5kIDEyNyBvY3RldHMgaW4gbGVuZ3RoIGluY2x1c2l2ZQorICAgICAgICAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cyBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cworICogZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cyBpcyBzdWJpZCAxNiBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIChpbmNsdWRpbmcgYmFkCisgICAgICAgIHBhY2tldHMpIHJlY2VpdmVkIHRoYXQgd2VyZSBiZXR3ZWVuCisgICAgICAgIDEyOCBhbmQgMjU1IG9jdGV0cyBpbiBsZW5ndGggaW5jbHVzaXZlCisgICAgICAgIChleGNsdWRpbmcgZnJhbWluZyBiaXRzIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cykuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cworICogZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cyBpcyBzdWJpZCAxNyBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTcKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIChpbmNsdWRpbmcgYmFkCisgICAgICAgIHBhY2tldHMpIHJlY2VpdmVkIHRoYXQgd2VyZSBiZXR3ZWVuCisgICAgICAgIDI1NiBhbmQgNTExIG9jdGV0cyBpbiBsZW5ndGggaW5jbHVzaXZlCisgICAgICAgIChleGNsdWRpbmcgZnJhbWluZyBiaXRzIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cykuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMKKyAqIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzIGlzIHN1YmlkIDE4IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xOAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgKGluY2x1ZGluZyBiYWQKKyAgICAgICAgcGFja2V0cykgcmVjZWl2ZWQgdGhhdCB3ZXJlIGJldHdlZW4KKyAgICAgICAgNTEyIGFuZCAxMDIzIG9jdGV0cyBpbiBsZW5ndGggaW5jbHVzaXZlCisgICAgICAgIChleGNsdWRpbmcgZnJhbWluZyBiaXRzIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cykuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMKKyAqIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cyBpcyBzdWJpZCAxOSBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTkKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIChpbmNsdWRpbmcgYmFkCisgICAgICAgIHBhY2tldHMpIHJlY2VpdmVkIHRoYXQgd2VyZSBiZXR3ZWVuCisgICAgICAgIDEwMjQgYW5kIDE1MTggb2N0ZXRzIGluIGxlbmd0aCBpbmNsdXNpdmUKKyAgICAgICAgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzT3duZXIKKyAqIGV0aGVyU3RhdHNPd25lciBpcyBzdWJpZCAyMCBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIENyZWF0ZS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjIwCisgKiBEZXNjcmlwdGlvbjoKK1RoZSBlbnRpdHkgdGhhdCBjb25maWd1cmVkIHRoaXMgZW50cnkgYW5kIGlzIHRoZXJlZm9yZQorICAgICAgICB1c2luZyB0aGUgcmVzb3VyY2VzIGFzc2lnbmVkIHRvIGl0LgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAxICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAxCisgKgorICogUmFuZ2VzOiAgMCAtIDEyNzsKKyAqCisgKiBJdHMgc3ludGF4IGlzIE93bmVyU3RyaW5nIChiYXNlZCBvbiBwZXJsdHlwZSBPQ1RFVFNUUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9PQ1RFVF9TVFIuIFRoZSBDIHR5cGUgZGVjbCBpcyBjaGFyIChjaGFyKQorICogVGhpcyBkYXRhIHR5cGUgcmVxdWlyZXMgYSBsZW5ndGguICAoTWF4IDEyNykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzT3duZXIgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgY2hhciB2YXJpYWJsZQorICogQHBhcmFtIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbl9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIGEgc2l6ZV90LiBPbiBlbnRyeSwgaXQgd2lsbCBjb250YWluIHRoZSBzaXplIChpbiBieXRlcykKKyAqICAgICAgICBwb2ludGVkIHRvIGJ5IGV0aGVyU3RhdHNPd25lci4KKyAqICAgICAgICBPbiBleGl0LCB0aGlzIHZhbHVlIHNob3VsZCBjb250YWluIHRoZSBkYXRhIHNpemUgKGluIGJ5dGVzKS4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorKgorICogQG5vdGUgSWYgeW91IG5lZWQgbW9yZSB0aGFuICgqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuX3B0cikgYnl0ZXMgb2YgbWVtb3J5LAorICogICAgICAgYWxsb2NhdGUgaXQgdXNpbmcgbWFsbG9jKCkgYW5kIHVwZGF0ZSBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIuCisgKiAgICAgICA8Yj5ETyBOT1Q8L2I+IGZyZWUgdGhlIHByZXZpb3VzIHBvaW50ZXIuCisgKiAgICAgICBUaGUgTUZEIGhlbHBlciB3aWxsIHJlbGVhc2UgdGhlIG1lbW9yeSB5b3UgYWxsb2NhdGUuCisgKgorICogQHJlbWFyayBJZiB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uIHlvdXJzZWxmLCB5b3UgYXJlIHJlc3BvbnNpYmxlCisgKiAgICAgICAgIGZvciBjaGVja2luZyBpZiB0aGUgcG9pbnRlciBjaGFuZ2VkLCBhbmQgZnJlZWluZyBhbnkKKyAqICAgICAgICAgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5LiAoTm90IG5lY2Vzc2FyeSBpZiB5b3UgcGFzcworICogICAgICAgICBpbiBhIHBvaW50ZXIgdG8gc3RhdGljIG1lbW9yeSwgb2J2aW91c2x5LikKKyAqLworaW50CitldGhlclN0YXRzT3duZXJfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW5fcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciBhbmQgZW5vdWdoIHN0b3JhZ2UgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoTlVMTCAhPSBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIpCisgICAgICAgICAgICAgICAgICAgJiYgKE5VTEwgIT0gKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0cikpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzT3duZXJfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c093bmVyIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIgKSBkYXRhIGFuZCAoKiBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW5fcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciBldGhlclN0YXRzT3duZXIgZGF0YQorICAgICAqLworICAgIGlmICgoTlVMTCA9PSAoKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0cikpIHx8CisgICAgICAgICgoKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbl9wdHIpIDwKKyAgICAgICAgIChyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcl9sZW4gKgorICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lclswXSkpKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgZXRoZXJTdGF0c093bmVyIGRhdGEKKyAgICAgICAgICovCisgICAgICAgICgqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyKSA9CisgICAgICAgICAgICBtYWxsb2Mocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJfbGVuICoKKyAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJbMF0pKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gKCpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgICAgICB9CisgICAgfQorICAgICgqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcl9sZW4gKgorICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJbMF0pOworICAgIG1lbWNweSgoKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0ciksCisgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyLAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcl9sZW4gKgorICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJbMF0pKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c093bmVyX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzU3RhdHVzCisgKiBldGhlclN0YXRzU3RhdHVzIGlzIHN1YmlkIDIxIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgQ3JlYXRlLgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMjEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHN0YXR1cyBvZiB0aGlzIGV0aGVyU3RhdHMgZW50cnkuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMSAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDEKKyAqCisgKiBFbnVtIHJhbmdlOiAyLzguIFZhbHVlczogIHZhbGlkKDEpLCBjcmVhdGVSZXF1ZXN0KDIpLCB1bmRlckNyZWF0aW9uKDMpLCBpbnZhbGlkKDQpCisgKgorICogSXRzIHN5bnRheCBpcyBFbnRyeVN0YXR1cyAoYmFzZWQgb24gcGVybHR5cGUgSU5URUdFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9JTlRFR0VSLiBUaGUgQyB0eXBlIGRlY2wgaXMgbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNTdGF0dXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1N0YXR1c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNTdGF0dXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1N0YXR1cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzU3RhdHVzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzU3RhdHVzX2dldCAqLworCisKKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NTIxMgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwODggJCBvZiAkCisgKgorICogJElkOiQKKyAqCisgKiBAZmlsZSBldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuaAorICoKKyAqIEBhZGR0b2dyb3VwIGdldAorICoKKyAqIFByb3RvdHlwZXMgZm9yIGdldCBmdW5jdGlvbnMKKyAqCisgKiBAeworICovCisjaWZuZGVmIEVUSEVSU1RBVFNUQUJMRV9EQVRBX0dFVF9ICisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9EQVRBX0dFVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIEdFVCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIEdFVCBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBldGhlclN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFJNT04tTUlCOjpldGhlclN0YXRzVGFibGUgaXMgc3ViaWQgMSBvZiBzdGF0aXN0aWNzLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEsIGxlbmd0aDogOQorICAgICAqLworICAgIC8qCisgICAgICogaW5kZXhlcworICAgICAqLworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c1BrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0ZyYWdtZW50c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzSmFiYmVyc19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzSmFiYmVyc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT3duZXJfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbl9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzU3RhdHVzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0cik7CisKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChldGhlclN0YXRzVGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBldGhlclN0YXRzSW5kZXhfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGV0aGVyU3RhdHNJbmRleF92YWwpOworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFVEhFUlNUQVRTVEFCTEVfREFUQV9HRVRfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmMgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmM2EyNgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuYwpAQCAtMCwwICsxLDk3NyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwNzcgJCBvZiAkCisgKgorICogJElkOiQKKyAqCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGUuaCIKKworCisvKiogQGRlZmdyb3VwIGRhdGFfc2V0IGRhdGFfc2V0OiBSb3V0aW5lcyB0byBzZXQgZGF0YQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIHNldCB0aGUgdmFsdWUgZm9yIGluZGl2aWR1YWwgb2JqZWN0cy4gVGhlCisgKiByb3cgY29udGV4dCBpcyBwYXNzZWQsIGFsb25nIHdpdGggdGhlIG5ldyB2YWx1ZS4KKyAqIAorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJNT04tTUlCOjpldGhlclN0YXRzVGFibGUgaXMgc3ViaWQgMSBvZiBzdGF0aXN0aWNzLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLCBsZW5ndGg6IDkKKyAqLworICAgIC8qCisgICAgICogTk9URTogaWYgeW91IHVwZGF0ZSB0aGlzIGNoYXJ0LCBwbGVhc2UgdXBkYXRlIHRoZSB2ZXJzaW9ucyBpbgorICAgICAqICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9wYXJlbnQtc2V0Lm0yaQorICAgICAqICAgICAgIGFnZW50L21pYmdyb3VwL2hlbHBlcnMvYmFieV9zdGVwcy5jCisgICAgICogd2hpbGUgeW91J3JlIGF0IGl0LgorICAgICAqLworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogQmFieSBTdGVwcyBGbG93IENoYXJ0ICgyMDA0LjA2LjA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICAgICogKy0tLS0tLS0tLS0tLS0tKyAgICArPT09PT09PT09PT09PT09PSsgICAgVSA9IHVuY29uZGl0aW9uYWwgcGF0aCAgICAqCisgICAgICogfG9wdGlvbmFsIHN0YXRlfCAgICB8fHJlcXVpcmVkIHN0YXRlfHwgICAgUyA9IHBhdGggZm9yIHN1Y2Nlc3MgICAgICAqCisgICAgICogKy0tLS0tLS0tLS0tLS0tKyAgICArPT09PT09PT09PT09PT09PSsgICAgRSA9IHBhdGggZm9yIGVycm9yICAgICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHByZSAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICByZXF1ZXN0ICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFUKKyAgICAgKiArLS0tLS0tLS0tLS0tLSsgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiB8ICAgIHJvdyAgICB8Znw8LS0tLS0tLXx8ICBvYmplY3QgICAgfHwKKyAgICAgKiB8ICBjcmVhdGUgICB8MXwgICAgICBFIHx8ICBsb29rdXAgICAgfHwKKyAgICAgKiArLS0tLS0tLS0tLS0tLSsgICAgICAgICs9PT09PT09PT09PT09PSsKKyAgICAgKiAgICAgRSB8ICAgfCBTICAgICAgICAgICAgICAgICB8IFMKKyAgICAgKiAgICAgICB8ICAgKy0tLS0tLS0tLS0tLS0tLS0tLT58CisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgfCAgICAgICAgICAgICAgRSB8fCAgIGNoZWNrICAgIHx8CisgICAgICogICAgICAgfDwtLS0tLS0tLS0tLS0tLS18fCAgIHZhbHVlcyAgIHx8CisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCBTCisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgfCAgICAgICArPC0tLS0tLS18fCAgIHVuZG8gICAgIHx8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgRSB8fCAgIHNldHVwICAgIHx8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgfCBTCisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICB8fCAgICBzZXQgICAgIHx8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+KworICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgfHwgICB2YWx1ZSAgICB8fCBFICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICs9PT09PT09PT09PT09PSsgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgfCBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgIHwgICAgY2hlY2sgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICB8ICBjb25zaXN0ZW5jeSB8IEUgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgICB8IFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArPT09PT09PT09PT09PT0rICAgICAgICAgKz09PT09PT09PT09PT09KyAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgfHwgICBjb21taXQgICB8fC0tLS0tLS0tPnx8ICAgICB1bmRvICAgfHwgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgIHx8ICAgICAgICAgICAgfHwgRSAgICAgICB8fCAgICBjb21taXQgIHx8ICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArPT09PT09PT09PT09PT0rICAgICAgICAgKz09PT09PT09PT09PT09KyAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgUyAgICAgICAgICAgICAgICAgICAgIFUgfDwtLS0tLS0tLSsKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICB8IGlycmV2ZXJzaWJsZSB8ICAgICAgICAgfHwgICAgdW5kbyAgICB8fAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgfCAgICBjb21taXQgICAgfCAgICAgICAgIHx8ICAgICBzZXQgICAgfHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgfCBVICAgICAgICAgICAgICAgICAgICAgVSB8CisgICAgICogICAgICAgfCAgICAgICArLS0tLS0tLS0tLS0tLS0+fDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICB8fCAgIHVuZG8gICAgIHx8CisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICB8fCAgY2xlYW51cCAgIHx8CisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCBVCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyICYmIGYxKS0tLS0tLS0tLS0tLS0tLS0tLS0+KworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgcG9zdCAgICAgIHw8LS0tLS0tLS18ICAgICAgcm93ICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgcmVxdWVzdCAgICB8ICAgICAgIFUgfCAgICByZWxlYXNlICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgKgorICAgICAqLworCisvKioKKyAqIFNldHVwIHVwIGNvbnRleHQgd2l0aCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gdW5kbyBhIHNldCByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBpbmRpdmlkdWFsIG5vZGUgdW5kbyBzZXR1cAorICogZnVuY3Rpb25zIGFyZSBjYWxsZWQuIElmIHlvdSBuZWVkIHRvIGRvIGFueSB1bmRvIHNldHVwIHRoYXQgaXMgbm90CisgKiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgY29sdW1uLCB5b3UgY2FuIGRvIGl0IGhlcmUuCisgKgorICogTm90ZSB0aGF0IHRoZSB1bmRvIGNvbnRleHQgaGFzIGJlZW4gYWxsb2NhdGVkIHdpdGgKKyAqIGV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhKCksIGJ1dCBtYXkgbmVlZCBleHRyYQorICogaW5pdGlhbGl6YXRpb24gc2ltaWxhciB0byB3aGF0IHlvdSBtYXkgaGF2ZSBkb25lIGluCisgKiBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KCkuCisgKiBOb3RlIHRoYXQgYW4gaW5kaXZpZHVhbCBub2RlJ3MgdW5kb19zZXR1cCBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkCisgKiBpZiB0aGF0IG5vZGUgaXMgYmVpbmcgc2V0IHRvIGEgbmV3IHZhbHVlLgorICoKKyAqIElmIHRoZXJlIGlzIGFueSBzZXR1cCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgY29sdW1uIChlLmcuIGFsbG9jYXRpbmcKKyAqIG1lbW9yeSBmb3IgYSBzdHJpbmcpLCB5b3Ugc2hvdWxkIGRvIHRoYXQgc2V0dXAgaW4gdGhlIG5vZGUncyB1bmRvX3NldHVwCisgKiBmdW5jdGlvbiwgc28gaXQgd29uJ3QgYmUgZG9uZSB1bmxlc3MgaXQgaXMgbmVjZXNzYXJ5LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdGFibGUgY29udGV4dCAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgpCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBlcnJvci4gc2V0IHdpbGwgZmFpbC4KKyAqLworaW50CitldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gTUZEX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1MTpNOiB8LT4gU2V0dXAgZXRoZXJTdGF0c1RhYmxlIHVuZG8uCisgICAgICogc2V0IHVwIGV0aGVyU3RhdHNUYWJsZSB1bmRvIGluZm9ybWF0aW9uLCBpbiBwcmVwYXJhdGlvbiBmb3IgYSBzZXQuCisgICAgICogVW5kbyBzdG9yYWdlIGlzIGluICgqIGV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0ciApKgorICAgICAqLworCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cCAqLworCisvKioKKyAqIFVuZG8gYSBzZXQgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgaW5kaXZpZHVhbCBub2RlIHVuZG8KKyAqIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBJZiB5b3UgbmVlZCB0byBkbyBhbnkgdW5kbyB0aGF0IGlzIG5vdAorICogcmVsYXRlZCB0byBhIHNwZWNpZmljIGNvbHVtbiwgeW91IGNhbiBkbyBpdCBoZXJlLgorICoKKyAqIE5vdGUgdGhhdCBhbiBpbmRpdmlkdWFsIG5vZGUncyB1bmRvIGZ1bmN0aW9uIHdpbGwgb25seSBiZSBjYWxsZWQKKyAqIGlmIHRoYXQgbm9kZSBpcyBiZWluZyBzZXQgdG8gYSBuZXcgdmFsdWUuCisgKgorICogSWYgdGhlcmUgaXMgYW55dGhpbmcgIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBjb2x1bW4gKGUuZy4gcmVsZWFzaW5nCisgKiBtZW1vcnkgZm9yIGEgc3RyaW5nKSwgeW91IHNob3VsZCBkbyB0aGF0IHNldHVwIGluIHRoZSBub2RlJ3MgdW5kbworICogZnVuY3Rpb24sIHNvIGl0IHdvbid0IGJlIGRvbmUgdW5sZXNzIGl0IGlzIG5lY2Vzc2FyeS4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGNvbnRleHQgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4KQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogZXJyb3IuIHNldCB3aWxsIGZhaWwuCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIGludCAgICAgICAgICAgICByYyA9IE1GRF9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV91bmRvIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTE6TTogfC0+IGV0aGVyU3RhdHNUYWJsZSB1bmRvLgorICAgICAqIGV0aGVyU3RhdHNUYWJsZSB1bmRvIGluZm9ybWF0aW9uLCBpbiByZXNwb25zZSB0byBhIGZhaWxlZCBzZXQuCisgICAgICogVW5kbyBzdG9yYWdlIGlzIGluICgqIGV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0ciApKgorICAgICAqLworCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cCAqLworCisvKioKKyAqIENsZWFudXAgdXAgY29udGV4dCB1bmRvIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgc2V0L2NvbW1pdCBwcm9jZXNzaW5nLiBJZiB5b3UKKyAqIGFsbG9jYXRlZCBhbnkgcmVzb3VyY2VzIGluIHVuZG9fc2V0dXAsIHRoaXMgaXMgdGhlIHBsYWNlIHRvIHJlbGVhc2UKKyAqIHRob3NlIHJlc291cmNlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWdhcmRsZXNzIG9mIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHNldAorICogcmVxdWVzdC4gSWYgeW91IG5lZWQgdG8gcGVyZm9ybSBkaWZmZXJlbnQgc3RlcHMgZm9yIGNsZWFudXAgZGVwZW5kaW5nCisgKiBvbiBzdWNjZXNzIG9yIGZhaWx1cmUsIHlvdSBjYW4gYWRkIGEgZmxhZyB0byB0aGUgcm93cmVxX2N0eC4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGNvbnRleHQgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4KQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBNRkRfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTI6TTogfC0+IENsZWFudXAgZXRoZXJTdGF0c1RhYmxlIHVuZG8uCisgICAgICogVW5kbyBzdG9yYWdlIGlzIGluICgqIGV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0ciApKgorICAgICAqLworCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwICovCisKKy8qKgorICogY29tbWl0IG5ldyB2YWx1ZXMuCisgKgorICogQXQgdGhpcyBwb2ludCwgeW91IHNob3VsZCBoYXZlIGRvbmUgZXZlcnl0aGluZyB5b3UgY2FuIHRvIGVuc3VyZSB0aGF0CisgKiB0aGlzIGNvbW1pdCB3aWxsIG5vdCBmYWlsLgorICoKKyAqIFNob3VsZCB5b3UgbmVlZCBkaWZmZXJlbnQgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIHdoaWNoIGNvbHVtbnMgd2VyZQorICogc2V0LCByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHdpbGwgaW5kaWNhdGUgd2hpY2ggd3JpdGVhYmxlIGNvbHVtbnMgd2VyZQorICogc2V0LiBUaGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBDT0xVTU5fKl9GTEFHIGJpdHMgY2FuIGJlIGZvdW5kIGluCisgKiBldGhlclN0YXRzVGFibGVfb2lkcy5oLgorICogQSBuZXcgcm93IHdpbGwgaGF2ZSB0aGUgTUZEX1JPV19DUkVBVEVEIGJpdCBzZXQgaW4gcm93cmVxX2ZsYWdzLgorICoKKyAqIEBwYXJhbSBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9jb21taXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIGludCAgICAgICAgICAgICByYyA9IE1GRF9TVUNDRVNTOworICAgIGludCAgICAgICAgICAgICBzYXZlX2ZsYWdzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9jb21taXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBzYXZlIGZsYWdzLCB0aGVuIGNsZWFyIHVudGlsIHdlIGFjdHVhbGx5IGRvIHNvbWV0aGluZworICAgICAqLworICAgIHNhdmVfZmxhZ3MgPSByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzOworICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgPSAwOworCisgICAgLyoKKyAgICAgKiBjb21taXQgZXRoZXJTdGF0c1RhYmxlIGRhdGEKKyAgICAgKiAxKSBjaGVjayB0aGUgY29sdW1uJ3MgZmxhZyBpbiBzYXZlX2ZsYWdzIHRvIHNlZSBpZiBpdCB3YXMgc2V0LgorICAgICAqIDIpIGNsZWFyIHRoZSBmbGFnIHdoZW4geW91IGhhbmRsZSB0aGF0IGNvbHVtbgorICAgICAqIDMpIHNldCB0aGUgY29sdW1uJ3MgZmxhZyBpbiBjb2x1bW5fc2V0X2ZsYWdzIGlmIGl0IG5lZWRzIHVuZG8KKyAgICAgKiAgICBwcm9jZXNzaW5nIGluIGNhc2Ugb2YgYSBmYWlsdXJlLgorICAgICAqLworICAgIGlmIChzYXZlX2ZsYWdzICYgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUcpIHsKKyAgICAgICAgc2F2ZV9mbGFncyAmPSB+Q09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUc7ICAgICAgICAvKiBjbGVhciBldGhlclN0YXRzRGF0YVNvdXJjZSAqLworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjQ4MjpvOiB8LT4gY29tbWl0IGNvbHVtbiBldGhlclN0YXRzRGF0YVNvdXJjZS4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gLTE7CisgICAgICAgIGlmICgtMSA9PSByYykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGUgY29sdW1uIGV0aGVyU3RhdHNEYXRhU291cmNlIGNvbW1pdCBmYWlsZWRcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNldCBmbGFnLCBpbiBjYXNlIHdlIG5lZWQgdG8gdW5kbyBldGhlclN0YXRzRGF0YVNvdXJjZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9CisgICAgICAgICAgICAgICAgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2F2ZV9mbGFncyAmIENPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRykgeworICAgICAgICBzYXZlX2ZsYWdzICY9IH5DT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUc7ICAgICAvKiBjbGVhciBldGhlclN0YXRzT3duZXIgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzo0ODI6bzogfC0+IGNvbW1pdCBjb2x1bW4gZXRoZXJTdGF0c093bmVyLgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgaWYgKC0xID09IHJjKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZSBjb2x1bW4gZXRoZXJTdGF0c093bmVyIGNvbW1pdCBmYWlsZWRcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNldCBmbGFnLCBpbiBjYXNlIHdlIG5lZWQgdG8gdW5kbyBldGhlclN0YXRzT3duZXIKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2F2ZV9mbGFncyAmIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUcpIHsKKyAgICAgICAgc2F2ZV9mbGFncyAmPSB+Q09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRzsgICAgLyogY2xlYXIgZXRoZXJTdGF0c1N0YXR1cyAqLworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjQ4MjpvOiB8LT4gY29tbWl0IGNvbHVtbiBldGhlclN0YXRzU3RhdHVzLgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgaWYgKC0xID09IHJjKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZSBjb2x1bW4gZXRoZXJTdGF0c1N0YXR1cyBjb21taXQgZmFpbGVkXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzZXQgZmxhZywgaW4gY2FzZSB3ZSBuZWVkIHRvIHVuZG8gZXRoZXJTdGF0c1N0YXR1cworICAgICAgICAgICAgICovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIGlmIHdlIHN1Y2Nlc3NmdWxseSBjb21taXRlZCB0aGlzIHJvdywgc2V0IHRoZSBkaXJ0eSBmbGFnLgorICAgICAqLworICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgeworICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgfD0gTUZEX1JPV19ESVJUWTsKKyAgICB9CisKKyAgICBpZiAoc2F2ZV9mbGFncykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5oYW5kbGVkIGNvbHVtbnMgKDB4JXgpIGluIGNvbW1pdFxuIiwKKyAgICAgICAgICAgICAgICAgc2F2ZV9mbGFncyk7CisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfY29tbWl0ICovCisKKy8qKgorICogdW5kbyBjb21taXQgbmV3IHZhbHVlcy4KKyAqCisgKiBTaG91bGQgeW91IG5lZWQgZGlmZmVyZW50IGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3aGljaCBjb2x1bW5zIHdlcmUKKyAqIHNldCwgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB3aWxsIGluZGljYXRlIHdoaWNoIHdyaXRlYWJsZSBjb2x1bW5zIHdlcmUKKyAqIHNldC4gVGhlIGRlZmluaXRpb25zIGZvciB0aGUgQ09MVU1OXypfRkxBRyBiaXRzIGNhbiBiZSBmb3VuZCBpbgorICogZXRoZXJTdGF0c1RhYmxlX29pZHMuaC4KKyAqIEEgbmV3IHJvdyB3aWxsIGhhdmUgdGhlIE1GRF9ST1dfQ1JFQVRFRCBiaXQgc2V0IGluIHJvd3JlcV9mbGFncy4KKyAqCisgKiBAcGFyYW0gZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIGludCAgICAgICAgICAgICByYyA9IE1GRF9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDg1Ok06IHwtPiBVbmRvIGV0aGVyU3RhdHNUYWJsZSBjb21taXQuCisgICAgICogY2hlY2sgdGhlIGNvbHVtbidzIGZsYWcgaW4gcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB0byBzZWUKKyAgICAgKiBpZiBpdCB3YXMgc2V0IGR1cmluZyBjb21taXQsIHRoZW4gdW5kbyBpdC4KKyAgICAgKgorICAgICAqIGVnOiBpZiAocm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyAmIENPTFVNTl9fRkxBRykge30KKyAgICAgKi8KKworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBzdWNjZXNzZnVsbHkgdW4tY29tbWl0ZWQgdGhpcyByb3csIGNsZWFyIHRoZSBkaXJ0eSBmbGFnLgorICAgICAqLworICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgeworICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJj0gfk1GRF9ST1dfRElSVFk7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQgKi8KKworLyoKKyAqIFRPRE86NDQwOk06IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgbm9kZSB2YWx1ZSBjaGVja3MuCisgKiBUT0RPOjQ1MDpNOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIHVuZG8gZnVuY3Rpb25zLgorICogVE9ETzo0NjA6TTogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSBzZXQgZnVuY3Rpb25zLgorICogVE9ETzo0ODA6TTogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSBjb21taXQgZnVuY3Rpb25zLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzRGF0YVNvdXJjZQorICogZXRoZXJTdGF0c0RhdGFTb3VyY2UgaXMgc3ViaWQgMiBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIENyZWF0ZS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjIKKyAqIERlc2NyaXB0aW9uOgorVGhpcyBvYmplY3QgaWRlbnRpZmllcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhIHRoYXQKKyAgICAgICAgdGhpcyBldGhlclN0YXRzIGVudHJ5IGlzIGNvbmZpZ3VyZWQgdG8gYW5hbHl6ZS4gIFRoaXMKKyAgICAgICAgc291cmNlIGNhbiBiZSBhbnkgZXRoZXJuZXQgaW50ZXJmYWNlIG9uIHRoaXMgZGV2aWNlLgorICAgICAgICBJbiBvcmRlciB0byBpZGVudGlmeSBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLCB0aGlzIG9iamVjdAorICAgICAgICBzaGFsbCBpZGVudGlmeSB0aGUgaW5zdGFuY2Ugb2YgdGhlIGlmSW5kZXggb2JqZWN0LAorICAgICAgICBkZWZpbmVkIGluIFJGQyAyMjMzIFsxN10sIGZvciB0aGUgZGVzaXJlZCBpbnRlcmZhY2UuCisgICAgICAgIEZvciBleGFtcGxlLCBpZiBhbiBlbnRyeSB3ZXJlIHRvIHJlY2VpdmUgZGF0YSBmcm9tCisgICAgICAgIGludGVyZmFjZSAjMSwgdGhpcyBvYmplY3Qgd291bGQgYmUgc2V0IHRvIGlmSW5kZXguMS4KKworICAgICAgICBUaGUgc3RhdGlzdGljcyBpbiB0aGlzIGdyb3VwIHJlZmxlY3QgYWxsIHBhY2tldHMKKyAgICAgICAgb24gdGhlIGxvY2FsIG5ldHdvcmsgc2VnbWVudCBhdHRhY2hlZCB0byB0aGUgaWRlbnRpZmllZAorICAgICAgICBpbnRlcmZhY2UuCisKKyAgICAgICAgQW4gYWdlbnQgbWF5IG9yIG1heSBub3QgYmUgYWJsZSB0byB0ZWxsIGlmIGZ1bmRhbWVudGFsCisgICAgICAgIGNoYW5nZXMgdG8gdGhlIG1lZGlhIG9mIHRoZSBpbnRlcmZhY2UgaGF2ZSBvY2N1cnJlZCBhbmQKKyAgICAgICAgbmVjZXNzaXRhdGUgYW4gaW52YWxpZGF0aW9uIG9mIHRoaXMgZW50cnkuICBGb3IgZXhhbXBsZSwgYQorICAgICAgICBob3QtcGx1Z2dhYmxlIGV0aGVybmV0IGNhcmQgY291bGQgYmUgcHVsbGVkIG91dCBhbmQgcmVwbGFjZWQKKyAgICAgICAgYnkgYSB0b2tlbi1yaW5nIGNhcmQuICBJbiBzdWNoIGEgY2FzZSwgaWYgdGhlIGFnZW50IGhhcyBzdWNoCisgICAgICAgIGtub3dsZWRnZSBvZiB0aGUgY2hhbmdlLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGl0CisgICAgICAgIGludmFsaWRhdGUgdGhpcyBlbnRyeS4KKworICAgICAgICBUaGlzIG9iamVjdCBtYXkgbm90IGJlIG1vZGlmaWVkIGlmIHRoZSBhc3NvY2lhdGVkCisgICAgICAgIGV0aGVyU3RhdHNTdGF0dXMgb2JqZWN0IGlzIGVxdWFsIHRvIHZhbGlkKDEpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAxCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgT0JKRUNUSUQgKGJhc2VkIG9uIHBlcmx0eXBlIE9CSkVDVElEKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX09CSkVDVF9JRC4gVGhlIEMgdHlwZSBkZWNsIGlzIG9pZCAob2lkKQorICogVGhpcyBkYXRhIHR5cGUgcmVxdWlyZXMgYSBsZW5ndGguCisgKi8KKy8qKgorICogQ2hlY2sgdGhhdCB0aGUgcHJvcG9zZWQgbmV3IHZhbHVlIGlzIHBvdGVudGlhbGx5IHZhbGlkLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyCisgKiAgICAgICAgQSBvaWQgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlLgorICogQHBhcmFtIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuCisgKiAgICAgICAgVGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICA6IGluY29taW5nIHZhbHVlIGlzIGxlZ2FsCisgKiBAcmV0dmFsIE1GRF9OT1RfVkFMSURfTk9XICA6IGluY29taW5nIHZhbHVlIGlzIG5vdCB2YWxpZCBub3cKKyAqIEByZXR2YWwgTUZEX05PVF9WQUxJRF9FVkVSIDogaW5jb21pbmcgdmFsdWUgaXMgbmV2ZXIgdmFsaWQKKyAqCisgKiBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGVjayBmb3IgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIG5vdAorICogZXhwcmVzc2VkIGluIHRoZSBtaWIgc3ludGF4IChmb3IgZXhhbXBsZSwgYSByZXF1aXJlbWVudCB0aGF0CisgKiBpcyBkZXRhaWxlZCBpbiB0aGUgZGVzY3JpcHRpb24gZm9yIGFuIG9iamVjdCkuCisgKgorICogWW91IHNob3VsZCBjaGVjayB0aGF0IHRoZSByZXF1ZXN0ZWQgY2hhbmdlIGJldHdlZW4gdGhlIHVuZG8gdmFsdWUgYW5kIHRoZQorICogbmV3IHZhbHVlIGlzIGxlZ2FsIChpZSwgdGhlIHRyYW5zaXN0aW9uIGZyb20gb25lIHZhbHVlIHRvIGFub3RoZXIKKyAqIGlzIGxlZ2FsKS4KKyAqICAgICAgCisgKkBub3RlCisgKiBUaGlzIGNoZWNrIGlzIG9ubHkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBuZXcgdmFsdWUKKyAqIGlzIFxiIHBvdGVudGlhbGx5IHZhbGlkLiBUaGlzIGlzIHRoZSBmaXJzdCBjaGVjayBvZiBtYW55LCBhbmQKKyAqIGlzIG9uZSBvZiB0aGUgc2ltcGxlc3Qgb25lcy4KKyAqIAorICpAbm90ZQorICogdGhpcyBpcyBub3QgdGhlIHBsYWNlIHRvIGRvIGFueSBjaGVja3MgZm9yIHZhbHVlcworICogd2hpY2ggZGVwZW5kIG9uIHNvbWUgb3RoZXIgdmFsdWUgaW4gdGhlIG1pYi4gVGhvc2UKKyAqIHR5cGVzIG9mIGNoZWNrcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUKKyAqIGV0aGVyU3RhdHNUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMoKSBmdW5jdGlvbi4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGNoZWNrcyBoYXZlIGFscmVhZHkgYmVlbiBkb25lIGZvciB5b3U6CisgKiAgICBUaGUgc3ludGF4IGlzIEFTTl9PQkpFQ1RfSUQKKyAqICAgIFRoZSBsZW5ndGggaXMgPCBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZSkuCisgKgorICogSWYgdGhlcmUgYSBubyBvdGhlciBjaGVja3MgeW91IG5lZWQgdG8gZG8sIHNpbXBseSByZXR1cm4gTUZEX1NVQ0NFU1MuCisgKgorICovCitpbnQKK2V0aGVyU3RhdHNEYXRhU291cmNlX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW4pCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNEYXRhU291cmNlX2NoZWNrX3ZhbHVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzo0NDE6bzogfC0+IENoZWNrIGZvciB2YWxpZCBldGhlclN0YXRzRGF0YVNvdXJjZSB2YWx1ZS4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsgICAgICAgICAvKiBldGhlclN0YXRzRGF0YVNvdXJjZSB2YWx1ZSBub3QgaWxsZWdhbCAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzRGF0YVNvdXJjZV9jaGVja192YWx1ZSAqLworCisvKioKKyAqIFNhdmUgb2xkIHZhbHVlIGluZm9ybWF0aW9uCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB0YWJsZSBjb250ZXh0IChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfRVJST1IgICA6IGVycm9yLiBzZXQgd2lsbCBmYWlsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRhYmxlIGxldmVsIHVuZG8gc2V0dXAgZnVuY3Rpb24KKyAqIGV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwIGhhcyBiZWVuIGNhbGxlZC4KKyAqCisgKkBub3RlCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgYSBuZXcgdmFsdWUgaXMgc2V0IGZvciB0aGlzIGNvbHVtbi4KKyAqCisgKiBJZiB0aGVyZSBpcyBhbnkgc2V0dXAgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGNvbHVtbiAoZS5nLiBhbGxvY2F0aW5nCisgKiBtZW1vcnkgZm9yIGEgc3RyaW5nKSwgeW91IHNob3VsZCBkbyB0aGF0IHNldHVwIGluIHRoaXMgZnVuY3Rpb24sIHNvIGl0CisgKiB3b24ndCBiZSBkb25lIHVubGVzcyBpdCBpcyBuZWNlc3NhcnkuCisgKi8KK2ludAorZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNEYXRhU291cmNlX3VuZG9fc2V0dXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTU6bzogfC0+IFNldHVwIGV0aGVyU3RhdHNEYXRhU291cmNlIHVuZG8uCisgICAgICovCisgICAgLyoKKyAgICAgKiBjb3B5IGV0aGVyU3RhdHNEYXRhU291cmNlIGFuZCBldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gZGF0YQorICAgICAqIHNldCByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzRGF0YVNvdXJjZSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2UKKyAgICAgKi8KKyAgICBtZW1jcHkocm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c0RhdGFTb3VyY2UsCisgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2UsCisgICAgICAgICAgIChyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiAqCisgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c0RhdGFTb3VyY2VbMF0pKSk7CisgICAgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW47CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kb19zZXR1cCAqLworCisvKioKKyAqIFNldCB0aGUgbmV3IHZhbHVlLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4gWW91IHNob3VsZCBrbm93IGhvdyB0bworICogICAgICAgIG1hbmlwdWxhdGUgdGhlIHZhbHVlIGZyb20gdGhpcyBvYmplY3QuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cgorICogICAgICAgIEEgb2lkIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZS4KKyAqIEBwYXJhbSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbgorICogICAgICAgIFRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyCisgKi8KK2ludAorZXRoZXJTdGF0c0RhdGFTb3VyY2Vfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbikKK3sKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzRGF0YVNvdXJjZV9zZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ2MTpNOiB8LT4gU2V0IGV0aGVyU3RhdHNEYXRhU291cmNlIHZhbHVlLgorICAgICAqIHNldCBldGhlclN0YXRzRGF0YVNvdXJjZSB2YWx1ZSBpbiByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2UsCisgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIsIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuKTsKKyAgICAvKiogY29udmVydCBieXRlcyB0byBudW1iZXIgb2Ygb2lkICovCisgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gPQorICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbiAvCisgICAgICAgIHNpemVvZihldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyWzBdKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0RhdGFTb3VyY2Vfc2V0ICovCisKKy8qKgorICogdW5kbyB0aGUgcHJldmlvdXMgc2V0LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4KKyAqLworaW50CitldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1NjpvOiB8LT4gQ2xlYW4gdXAgZXRoZXJTdGF0c0RhdGFTb3VyY2UgdW5kby4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGNvcHkgZXRoZXJTdGF0c0RhdGFTb3VyY2UgYW5kIGV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiBkYXRhCisgICAgICogc2V0IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2UgZnJvbSByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzRGF0YVNvdXJjZQorICAgICAqLworICAgIG1lbWNweShyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlLAorICAgICAgICAgICByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzRGF0YVNvdXJjZSwKKyAgICAgICAgICAgKHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiAqCisgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZVswXSkpKTsKKyAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiA9CisgICAgICAgIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbjsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNPd25lcgorICogZXRoZXJTdGF0c093bmVyIGlzIHN1YmlkIDIwIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgQ3JlYXRlLgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMjAKKyAqIERlc2NyaXB0aW9uOgorVGhlIGVudGl0eSB0aGF0IGNvbmZpZ3VyZWQgdGhpcyBlbnRyeSBhbmQgaXMgdGhlcmVmb3JlCisgICAgICAgIHVzaW5nIHRoZSByZXNvdXJjZXMgYXNzaWduZWQgdG8gaXQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDEgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDEKKyAqCisgKiBSYW5nZXM6ICAwIC0gMTI3OworICoKKyAqIEl0cyBzeW50YXggaXMgT3duZXJTdHJpbmcgKGJhc2VkIG9uIHBlcmx0eXBlIE9DVEVUU1RSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX09DVEVUX1NUUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGNoYXIgKGNoYXIpCisgKiBUaGlzIGRhdGEgdHlwZSByZXF1aXJlcyBhIGxlbmd0aC4gIChNYXggMTI3KQorICovCisvKioKKyAqIENoZWNrIHRoYXQgdGhlIHByb3Bvc2VkIG5ldyB2YWx1ZSBpcyBwb3RlbnRpYWxseSB2YWxpZC4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIKKyAqICAgICAgICBBIGNoYXIgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlLgorICogQHBhcmFtIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbgorICogICAgICAgIFRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBldGhlclN0YXRzT3duZXJfdmFsX3B0cgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgIDogaW5jb21pbmcgdmFsdWUgaXMgbGVnYWwKKyAqIEByZXR2YWwgTUZEX05PVF9WQUxJRF9OT1cgIDogaW5jb21pbmcgdmFsdWUgaXMgbm90IHZhbGlkIG5vdworICogQHJldHZhbCBNRkRfTk9UX1ZBTElEX0VWRVIgOiBpbmNvbWluZyB2YWx1ZSBpcyBuZXZlciB2YWxpZAorICoKKyAqIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNoZWNrIGZvciByZXF1aXJlbWVudHMgdGhhdCBhcmUgbm90CisgKiBleHByZXNzZWQgaW4gdGhlIG1pYiBzeW50YXggKGZvciBleGFtcGxlLCBhIHJlcXVpcmVtZW50IHRoYXQKKyAqIGlzIGRldGFpbGVkIGluIHRoZSBkZXNjcmlwdGlvbiBmb3IgYW4gb2JqZWN0KS4KKyAqCisgKiBZb3Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHJlcXVlc3RlZCBjaGFuZ2UgYmV0d2VlbiB0aGUgdW5kbyB2YWx1ZSBhbmQgdGhlCisgKiBuZXcgdmFsdWUgaXMgbGVnYWwgKGllLCB0aGUgdHJhbnNpc3Rpb24gZnJvbSBvbmUgdmFsdWUgdG8gYW5vdGhlcgorICogaXMgbGVnYWwpLgorICogICAgICAKKyAqQG5vdGUKKyAqIFRoaXMgY2hlY2sgaXMgb25seSB0byBkZXRlcm1pbmUgaWYgdGhlIG5ldyB2YWx1ZQorICogaXMgXGIgcG90ZW50aWFsbHkgdmFsaWQuIFRoaXMgaXMgdGhlIGZpcnN0IGNoZWNrIG9mIG1hbnksIGFuZAorICogaXMgb25lIG9mIHRoZSBzaW1wbGVzdCBvbmVzLgorICogCisgKkBub3RlCisgKiB0aGlzIGlzIG5vdCB0aGUgcGxhY2UgdG8gZG8gYW55IGNoZWNrcyBmb3IgdmFsdWVzCisgKiB3aGljaCBkZXBlbmQgb24gc29tZSBvdGhlciB2YWx1ZSBpbiB0aGUgbWliLiBUaG9zZQorICogdHlwZXMgb2YgY2hlY2tzIHNob3VsZCBiZSBkb25lIGluIHRoZQorICogZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2RlcGVuZGVuY2llcygpIGZ1bmN0aW9uLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY2hlY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUgZm9yIHlvdToKKyAqICAgIFRoZSBzeW50YXggaXMgQVNOX09DVEVUX1NUUgorICogICAgVGhlIGxlbmd0aCBpcyA8IHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcikuCisgKiAgICBUaGUgbGVuZ3RoIGlzIGluIChvbmUgb2YpIHRoZSByYW5nZSBzZXQocyk6ICAwIC0gMTI3CisgKgorICogSWYgdGhlcmUgYSBubyBvdGhlciBjaGVja3MgeW91IG5lZWQgdG8gZG8sIHNpbXBseSByZXR1cm4gTUZEX1NVQ0NFU1MuCisgKgorICovCitpbnQKK2V0aGVyU3RhdHNPd25lcl9jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c093bmVyX2NoZWNrX3ZhbHVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzT3duZXJfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86NDQxOm86IHwtPiBDaGVjayBmb3IgdmFsaWQgZXRoZXJTdGF0c093bmVyIHZhbHVlLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOyAgICAgICAgIC8qIGV0aGVyU3RhdHNPd25lciB2YWx1ZSBub3QgaWxsZWdhbCAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzT3duZXJfY2hlY2tfdmFsdWUgKi8KKworLyoqCisgKiBTYXZlIG9sZCB2YWx1ZSBpbmZvcm1hdGlvbgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdGFibGUgY29udGV4dCAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgpCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBlcnJvci4gc2V0IHdpbGwgZmFpbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSB0YWJsZSBsZXZlbCB1bmRvIHNldHVwIGZ1bmN0aW9uCisgKiBldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cCBoYXMgYmVlbiBjYWxsZWQuCisgKgorICpAbm90ZQorICogdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIGEgbmV3IHZhbHVlIGlzIHNldCBmb3IgdGhpcyBjb2x1bW4uCisgKgorICogSWYgdGhlcmUgaXMgYW55IHNldHVwIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBjb2x1bW4gKGUuZy4gYWxsb2NhdGluZworICogbWVtb3J5IGZvciBhIHN0cmluZyksIHlvdSBzaG91bGQgZG8gdGhhdCBzZXR1cCBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBpdAorICogd29uJ3QgYmUgZG9uZSB1bmxlc3MgaXQgaXMgbmVjZXNzYXJ5LgorICovCitpbnQKK2V0aGVyU3RhdHNPd25lcl91bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c093bmVyX3VuZG9fc2V0dXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTU6bzogfC0+IFNldHVwIGV0aGVyU3RhdHNPd25lciB1bmRvLgorICAgICAqLworICAgIC8qCisgICAgICogY29weSBldGhlclN0YXRzT3duZXIgYW5kIGV0aGVyU3RhdHNPd25lcl9sZW4gZGF0YQorICAgICAqIHNldCByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzT3duZXIgZnJvbSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcgorICAgICAqLworICAgIG1lbWNweShyb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzT3duZXIsCisgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyLAorICAgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJfbGVuICoKKyAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzT3duZXJbMF0pKSk7CisgICAgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c093bmVyX2xlbiA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyX2xlbjsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzT3duZXJfdW5kb19zZXR1cCAqLworCisvKioKKyAqIFNldCB0aGUgbmV3IHZhbHVlLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4gWW91IHNob3VsZCBrbm93IGhvdyB0bworICogICAgICAgIG1hbmlwdWxhdGUgdGhlIHZhbHVlIGZyb20gdGhpcyBvYmplY3QuCisgKiBAcGFyYW0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIKKyAqICAgICAgICBBIGNoYXIgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlLgorICogQHBhcmFtIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbgorICogICAgICAgIFRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBldGhlclN0YXRzT3duZXJfdmFsX3B0cgorICovCitpbnQKK2V0aGVyU3RhdHNPd25lcl9zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICBjaGFyICpldGhlclN0YXRzT3duZXJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbikKK3sKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzT3duZXJfc2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzT3duZXJfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86NDYxOk06IHwtPiBTZXQgZXRoZXJTdGF0c093bmVyIHZhbHVlLgorICAgICAqIHNldCBldGhlclN0YXRzT3duZXIgdmFsdWUgaW4gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIG1lbWNweShyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lciwgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIsCisgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbik7CisgICAgLyoqIGNvbnZlcnQgYnl0ZXMgdG8gbnVtYmVyIG9mIGNoYXIgKi8KKyAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcl9sZW4gPQorICAgICAgICBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW4gLyBzaXplb2YoZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJbMF0pOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzT3duZXJfc2V0ICovCisKKy8qKgorICogdW5kbyB0aGUgcHJldmlvdXMgc2V0LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4KKyAqLworaW50CitldGhlclN0YXRzT3duZXJfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c093bmVyX3VuZG8iLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDU2Om86IHwtPiBDbGVhbiB1cCBldGhlclN0YXRzT3duZXIgdW5kby4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGNvcHkgZXRoZXJTdGF0c093bmVyIGFuZCBldGhlclN0YXRzT3duZXJfbGVuIGRhdGEKKyAgICAgKiBzZXQgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXIgZnJvbSByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzT3duZXIKKyAgICAgKi8KKyAgICBtZW1jcHkocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXIsCisgICAgICAgICAgIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNPd25lciwKKyAgICAgICAgICAgKHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNPd25lcl9sZW4gKgorICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyWzBdKSkpOworICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyX2xlbiA9CisgICAgICAgIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNPd25lcl9sZW47CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c093bmVyX3VuZG8gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1N0YXR1cworICogZXRoZXJTdGF0c1N0YXR1cyBpcyBzdWJpZCAyMSBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIENyZWF0ZS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjIxCisgKiBEZXNjcmlwdGlvbjoKK1RoZSBzdGF0dXMgb2YgdGhpcyBldGhlclN0YXRzIGVudHJ5LgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDEgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAxCisgKgorICogRW51bSByYW5nZTogMi84LiBWYWx1ZXM6ICB2YWxpZCgxKSwgY3JlYXRlUmVxdWVzdCgyKSwgdW5kZXJDcmVhdGlvbigzKSwgaW52YWxpZCg0KQorICoKKyAqIEl0cyBzeW50YXggaXMgRW50cnlTdGF0dXMgKGJhc2VkIG9uIHBlcmx0eXBlIElOVEVHRVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fSU5URUdFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGxvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBDaGVjayB0aGF0IHRoZSBwcm9wb3NlZCBuZXcgdmFsdWUgaXMgcG90ZW50aWFsbHkgdmFsaWQuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNTdGF0dXNfdmFsCisgKiAgICAgICAgQSBsb25nIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZS4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICA6IGluY29taW5nIHZhbHVlIGlzIGxlZ2FsCisgKiBAcmV0dmFsIE1GRF9OT1RfVkFMSURfTk9XICA6IGluY29taW5nIHZhbHVlIGlzIG5vdCB2YWxpZCBub3cKKyAqIEByZXR2YWwgTUZEX05PVF9WQUxJRF9FVkVSIDogaW5jb21pbmcgdmFsdWUgaXMgbmV2ZXIgdmFsaWQKKyAqCisgKiBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGVjayBmb3IgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIG5vdAorICogZXhwcmVzc2VkIGluIHRoZSBtaWIgc3ludGF4IChmb3IgZXhhbXBsZSwgYSByZXF1aXJlbWVudCB0aGF0CisgKiBpcyBkZXRhaWxlZCBpbiB0aGUgZGVzY3JpcHRpb24gZm9yIGFuIG9iamVjdCkuCisgKgorICogWW91IHNob3VsZCBjaGVjayB0aGF0IHRoZSByZXF1ZXN0ZWQgY2hhbmdlIGJldHdlZW4gdGhlIHVuZG8gdmFsdWUgYW5kIHRoZQorICogbmV3IHZhbHVlIGlzIGxlZ2FsIChpZSwgdGhlIHRyYW5zaXN0aW9uIGZyb20gb25lIHZhbHVlIHRvIGFub3RoZXIKKyAqIGlzIGxlZ2FsKS4KKyAqICAgICAgCisgKkBub3RlCisgKiBUaGlzIGNoZWNrIGlzIG9ubHkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBuZXcgdmFsdWUKKyAqIGlzIFxiIHBvdGVudGlhbGx5IHZhbGlkLiBUaGlzIGlzIHRoZSBmaXJzdCBjaGVjayBvZiBtYW55LCBhbmQKKyAqIGlzIG9uZSBvZiB0aGUgc2ltcGxlc3Qgb25lcy4KKyAqIAorICpAbm90ZQorICogdGhpcyBpcyBub3QgdGhlIHBsYWNlIHRvIGRvIGFueSBjaGVja3MgZm9yIHZhbHVlcworICogd2hpY2ggZGVwZW5kIG9uIHNvbWUgb3RoZXIgdmFsdWUgaW4gdGhlIG1pYi4gVGhvc2UKKyAqIHR5cGVzIG9mIGNoZWNrcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUKKyAqIGV0aGVyU3RhdHNUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMoKSBmdW5jdGlvbi4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGNoZWNrcyBoYXZlIGFscmVhZHkgYmVlbiBkb25lIGZvciB5b3U6CisgKiAgICBUaGUgc3ludGF4IGlzIEFTTl9JTlRFR0VSCisgKiAgICBUaGUgdmFsdWUgaXMgb25lIG9mICB2YWxpZCgxKSwgY3JlYXRlUmVxdWVzdCgyKSwgdW5kZXJDcmVhdGlvbigzKSwgaW52YWxpZCg0KQorICoKKyAqIElmIHRoZXJlIGEgbm8gb3RoZXIgY2hlY2tzIHlvdSBuZWVkIHRvIGRvLCBzaW1wbHkgcmV0dXJuIE1GRF9TVUNDRVNTLgorICoKKyAqLworaW50CitldGhlclN0YXRzU3RhdHVzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNTdGF0dXNfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzU3RhdHVzX2NoZWNrX3ZhbHVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDQxOm86IHwtPiBDaGVjayBmb3IgdmFsaWQgZXRoZXJTdGF0c1N0YXR1cyB2YWx1ZS4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsgICAgICAgICAvKiBldGhlclN0YXRzU3RhdHVzIHZhbHVlIG5vdCBpbGxlZ2FsICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNTdGF0dXNfY2hlY2tfdmFsdWUgKi8KKworLyoqCisgKiBTYXZlIG9sZCB2YWx1ZSBpbmZvcm1hdGlvbgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdGFibGUgY29udGV4dCAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgpCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBlcnJvci4gc2V0IHdpbGwgZmFpbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSB0YWJsZSBsZXZlbCB1bmRvIHNldHVwIGZ1bmN0aW9uCisgKiBldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cCBoYXMgYmVlbiBjYWxsZWQuCisgKgorICpAbm90ZQorICogdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIGEgbmV3IHZhbHVlIGlzIHNldCBmb3IgdGhpcyBjb2x1bW4uCisgKgorICogSWYgdGhlcmUgaXMgYW55IHNldHVwIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBjb2x1bW4gKGUuZy4gYWxsb2NhdGluZworICogbWVtb3J5IGZvciBhIHN0cmluZyksIHlvdSBzaG91bGQgZG8gdGhhdCBzZXR1cCBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBpdAorICogd29uJ3QgYmUgZG9uZSB1bmxlc3MgaXQgaXMgbmVjZXNzYXJ5LgorICovCitpbnQKK2V0aGVyU3RhdHNTdGF0dXNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNTdGF0dXNfdW5kb19zZXR1cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1NTpvOiB8LT4gU2V0dXAgZXRoZXJTdGF0c1N0YXR1cyB1bmRvLgorICAgICAqLworICAgIC8qCisgICAgICogY29weSBldGhlclN0YXRzU3RhdHVzIGRhdGEKKyAgICAgKiBzZXQgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c1N0YXR1cyBmcm9tIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1N0YXR1cworICAgICAqLworICAgIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNTdGF0dXMgPSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNTdGF0dXM7CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1N0YXR1c191bmRvX3NldHVwICovCisKKy8qKgorICogU2V0IHRoZSBuZXcgdmFsdWUuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LiBZb3Ugc2hvdWxkIGtub3cgaG93IHRvCisgKiAgICAgICAgbWFuaXB1bGF0ZSB0aGUgdmFsdWUgZnJvbSB0aGlzIG9iamVjdC4KKyAqIEBwYXJhbSBldGhlclN0YXRzU3RhdHVzX3ZhbAorICogICAgICAgIEEgbG9uZyBjb250YWluaW5nIHRoZSBuZXcgdmFsdWUuCisgKi8KK2ludAorZXRoZXJTdGF0c1N0YXR1c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNTdGF0dXNfdmFsKQoreworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNTdGF0dXNfc2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDYxOk06IHwtPiBTZXQgZXRoZXJTdGF0c1N0YXR1cyB2YWx1ZS4KKyAgICAgKiBzZXQgZXRoZXJTdGF0c1N0YXR1cyB2YWx1ZSBpbiByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzU3RhdHVzID0gZXRoZXJTdGF0c1N0YXR1c192YWw7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNTdGF0dXNfc2V0ICovCisKKy8qKgorICogdW5kbyB0aGUgcHJldmlvdXMgc2V0LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4KKyAqLworaW50CitldGhlclN0YXRzU3RhdHVzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNTdGF0dXNfdW5kbyIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTY6bzogfC0+IENsZWFuIHVwIGV0aGVyU3RhdHNTdGF0dXMgdW5kby4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGNvcHkgZXRoZXJTdGF0c1N0YXR1cyBkYXRhCisgICAgICogc2V0IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1N0YXR1cyBmcm9tIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNTdGF0dXMKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNTdGF0dXMgPSByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzU3RhdHVzOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNTdGF0dXNfdW5kbyAqLworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNThlMDg3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5oCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA3NyAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBFVEhFUlNUQVRTVEFCTEVfREFUQV9TRVRfSAorI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfREFUQV9TRVRfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBTRVQgZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBTRVQgVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c1RhYmxlIGlzIHN1YmlkIDEgb2Ygc3RhdGlzdGljcy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLCBsZW5ndGg6IDkKKyAgICAgKi8KKworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY29tbWl0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW4pOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2Vfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW4pOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzRHJvcEV2ZW50c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzRHJvcEV2ZW50c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzRHJvcEV2ZW50c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPY3RldHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c09jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT2N0ZXRzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPY3RldHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c09jdGV0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzUGt0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzUGt0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzUGt0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0ZyYWdtZW50c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c0ZyYWdtZW50c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNGcmFnbWVudHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNGcmFnbWVudHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0ZyYWdtZW50c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNKYWJiZXJzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNKYWJiZXJzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNKYWJiZXJzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzSmFiYmVyc19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzSmFiYmVyc192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzSmFiYmVyc191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzQ29sbGlzaW9uc19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzQ29sbGlzaW9uc192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzQ29sbGlzaW9uc191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c19jaGVja192YWx1ZQorICAgICAgICAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX2NoZWNrX3ZhbHVlCisgICAgICAgIChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c191bmRvX3NldHVwCisgICAgICAgIChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl9jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW4pOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT3duZXJfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT3duZXJfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcl91bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzU3RhdHVzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c1N0YXR1c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzU3RhdHVzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVUSEVSU1RBVFNUQUJMRV9EQVRBX1NFVF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2VudW1zLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEzYzBiNwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZW51bXMuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtZW51bXMubTJjIDEyNTI2IDIwMDUtMDctMTUgMjI6NDE6MTZaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBFVEhFUlNUQVRTVEFCTEVfRU5VTVNfSAorI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfRU5VTVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE5PVEVTIG9uIGVudW1zCisgICAgICogPT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFZhbHVlIE1hcHBpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tCisgICAgICogSWYgdGhlIHZhbHVlcyBmb3IgeW91ciBkYXRhIHR5cGUgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGUKKyAgICAgKiBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgbWliLCB5b3Ugc2hvdWxkIG1hcCB0aGVtCisgICAgICogYmVsb3cuIEZvciBleGFtcGxlLCBhIGJvb2xlYW4gZmxhZyAoMS8wKSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkCisgICAgICogYXMgYSBUcnV0aFZhbHVlIGluIGEgTUlCLCB3aGljaCBtYXBzIHRvIHRoZSB2YWx1ZXMgKDEvMikuCisgICAgICoKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGVudW0gZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQorICogZXRoZXJTdGF0c1N0YXR1cyAoRW50cnlTdGF0dXMgLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIEVOVFJZU1RBVFVTX0VOVU1TCisjZGVmaW5lIEVOVFJZU1RBVFVTX0VOVU1TCisKKyNkZWZpbmUgRU5UUllTVEFUVVNfVkFMSUQgIDEKKyNkZWZpbmUgRU5UUllTVEFUVVNfQ1JFQVRFUkVRVUVTVCAgMgorI2RlZmluZSBFTlRSWVNUQVRVU19VTkRFUkNSRUFUSU9OICAzCisjZGVmaW5lIEVOVFJZU1RBVFVTX0lOVkFMSUQgIDQKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFTlRSWVNUQVRVU19FTlVNUyAqLworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFVEhFUlNUQVRTVEFCTEVfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxYzYwOAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwyMjMyIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRISVMgRklMRSBET0VTIE5PVCBDT05UQUlOIEFOWSBVU0VSIEVESVRBQkxFIENPREUuICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRIRSBHRU5FUkFURUQgQ09ERSBJUyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiwgQU5EICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgIElTIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgV0FSTklORyBJTiBGVVRVUkUgUkVMRUFTRVMuICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZS5oIgorCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNUYWJsZSBpcyBzdWJpZCAxIG9mIHN0YXRpc3RpY3MuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEsIGxlbmd0aDogOQorICovCit0eXBlZGVmIHN0cnVjdCBldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eF9zIHsKKworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisgICAgbmV0c25tcF9jYWNoZSAgKmNhY2hlOworCisgICAgZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqdXNlcl9jdHg7CisKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIHRibF9pbmZvOworCisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzIGFjY2Vzc19tdWx0aXBsZXhlcjsKKworICAgIHVfaW50ICAgICAgICAgICB0YWJsZV9kaXJ0eTsKKworfSBldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eDsKKworc3RhdGljIGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4IGV0aGVyU3RhdHNUYWJsZV9pZl9jdHg7CisKK3N0YXRpYyB2b2lkICAgIAorX2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCk7CitzdGF0aWMgdm9pZCAgICAKK19ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CisKKworbmV0c25tcF9jb250YWluZXIgKgorZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXI7Cit9CisKK2V0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eDsKK30KKworZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCitldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldChldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKm9sZCA9IGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHg7CisgICAgZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKKyAgICByZXR1cm4gb2xkOworfQorCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQoreworICAgIHJldHVybiBDT05UQUlORVJfU0laRShldGhlclN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7Cit9CisKK3VfaW50CitldGhlclN0YXRzVGFibGVfZGlydHlfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudGFibGVfZGlydHk7Cit9CisKK3ZvaWQKK2V0aGVyU3RhdHNUYWJsZV9kaXJ0eV9zZXQodV9pbnQgc3RhdHVzKQoreworICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2RpcnR5X3NldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZC4gd2FzICVkLCBub3cgJWRcbiIsCisgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC50YWJsZV9kaXJ0eSwgc3RhdHVzKSk7CisgICAgZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC50YWJsZV9kaXJ0eSA9IHN0YXR1czsKK30KKworLyoKKyAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcworICovCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3Q7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0Oworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX29iamVjdF9sb29rdXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X3ZhbHVlczsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV9jaGVja19vYmplY3RzOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfc2V0X3ZhbHVlczsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb192YWx1ZXM7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfY29tbWl0Oworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0Oworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQ7CisKK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19ldGhlclN0YXRzVGFibGVfdW5kb19jb2x1bW4oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsIGludCBjb2x1bW4pOworCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2luZGV4ZXMoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsKKworZXRoZXJTdGF0c1RhYmxlX2RhdGEgKmV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpOworCisvKioKKyAqIEBpbnRlcm5hbAorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgZXRoZXJTdGF0c1RhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK19ldGhlclN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19wdHIsIHVfbG9uZyBmbGFncykKK3sKKyAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX21ldGhvZHMgKmFjY2Vzc19tdWx0aXBsZXhlciA9CisgICAgICAgICZldGhlclN0YXRzVGFibGVfaWZfY3R4LmFjY2Vzc19tdWx0aXBsZXhlcjsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YmxfaW5mbyA9CisgICAgICAgICZldGhlclN0YXRzVGFibGVfaWZfY3R4LnRibF9pbmZvOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcjsKKyAgICBpbnQgICAgICAgICAgICAgbWZkX21vZGVzID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSIsICJjYWxsZWRcbiIpKTsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNhdmUgaW50ZXJmYWNlIGNvbnRleHQgZm9yIGV0aGVyU3RhdHNUYWJsZQorICAgICAqLworICAgIC8qCisgICAgICogU2V0dGluZyB1cCB0aGUgdGFibGUncyBkZWZpbml0aW9uCisgICAgICovCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGJsX2luZm8sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGV0aGVyU3RhdHNJbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgLyoKKyAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcworICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAorICAgICAqLworICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gRVRIRVJTVEFUU1RBQkxFX01JTl9DT0w7CisgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBFVEhFUlNUQVRTVEFCTEVfTUFYX0NPTDsKKworICAgIC8qCisgICAgICogc2F2ZSB1c2VycyBjb250ZXh0CisgICAgICovCisgICAgZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCA9IHJlZ19wdHI7CisKKyAgICAvKgorICAgICAqIGNhbGwgZGF0YSBhY2Nlc3MgaW5pdGlhbGl6YXRpb24gY29kZQorICAgICAqLworICAgIGV0aGVyU3RhdHNUYWJsZV9pbml0X2RhdGEocmVnX3B0cik7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCgmZXRoZXJTdGF0c1RhYmxlX2lmX2N0eCk7CisgICAgaWYgKE5VTEwgPT0gZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbnRhaW5lciBmb3IgZXRoZXJTdGF0c1RhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogYWNjZXNzX211bHRpcGxleGVyOiBSRVFVSVJFRCB3cmFwcGVyIGZvciBnZXQgcmVxdWVzdCBoYW5kbGluZworICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X2xvb2t1cCA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX29iamVjdF9sb29rdXA7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5nZXRfdmFsdWVzID0gX21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0OworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0gX21mZF9ldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0OworCisKKyAgICAvKgorICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZworICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X3N5bnRheF9jaGVja3MgPQorICAgICAgICBfbWZkX2V0aGVyU3RhdHNUYWJsZV9jaGVja19vYmplY3RzOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXR1cCA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXA7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NsZWFudXAgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXA7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzID0gX21mZF9ldGhlclN0YXRzVGFibGVfc2V0X3ZhbHVlczsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fc2V0cyA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fdmFsdWVzOworCisgICAgLyoKKyAgICAgKiBubyB3cmFwcGVycyB5ZXQKKyAgICAgKi8KKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX2NvbW1pdDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0ID0gX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQ7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0ID0KKyAgICAgICAgX21mZF9ldGhlclN0YXRzVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBDcmVhdGUgYSByZWdpc3RyYXRpb24sIHNhdmUgb3VyIHJlZyBkYXRhLCByZWdpc3RlciB0YWJsZS4KKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOmluaXRfZXRoZXJTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgZXRoZXJTdGF0c1RhYmxlIGFzIGEgbWlicy1mb3ItZHVtbWllcyB0YWJsZS5cbiIpKTsKKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tdWx0aXBsZXhlcl9nZXQoYWNjZXNzX211bHRpcGxleGVyKTsKKyAgICByZWdpbmZvID0KKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoImV0aGVyU3RhdHNUYWJsZSIsIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9vaWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKKyAgICBpZiAoTlVMTCA9PSByZWdpbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBldGhlclN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlZ2luZm8tPm15X3JlZ192b2lkID0gJmV0aGVyU3RhdHNUYWJsZV9pZl9jdHg7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogc2V0IHVwIGJhYnkgc3RlcHMgaGFuZGxlciwgY3JlYXRlIGl0IGFuZCBpbmplY3QgaXQKKyAgICAgKi8KKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX09CSkVDVF9MT09LVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3Rfc3ludGF4X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19PQkpFQ1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QUkVfUkVRVUVTVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXR1cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX1NFVFVQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY2xlYW51cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NMRUFOVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19zZXRzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUUzsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnJvd19jcmVhdGlvbikKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9ST1dfQ1JFQVRFOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19DT05TSVNURU5DWTsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOworCisgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IHJvd19tZXJnZSBoZWxwZXIgd2l0aCBwcmVmaXggcm9vdG9pZF9sZW4gKyAyIChlbnRyeS5jb2wpCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YmxfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGlmIChOVUxMICE9IGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguY2FjaGUpIHsKKyAgICAgICAgaGFuZGxlciA9IG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5jYWNoZSk7CisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiByZWdpc3RlciB0YWJsZQorICAgICAqLworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnaW5mbywgdGJsX2luZm8pOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBldGhlclN0YXRzVGFibGUKKyAqLwordm9pZAorX2V0aGVyU3RhdHNUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHJlZ19wdHIpCit7CisgICAgLyoKKyAgICAgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oJmV0aGVyU3RhdHNUYWJsZV9pZl9jdHgpOworfQorCit2b2lkCitldGhlclN0YXRzVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbyAqdmMpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC50YmxfaW5mby52YWxpZF9jb2x1bW5zID0gdmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogY29udmVydCB0aGUgaW5kZXggY29tcG9uZW50IHN0b3JlZCBpbiB0aGUgY29udGV4dCB0byBhbiBvaWQKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfZXRoZXJTdGF0c0luZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9ldGhlclN0YXRzSW5kZXgsIDB4MDAsIHNpemVvZih2YXJfZXRoZXJTdGF0c0luZGV4KSk7CisgICAgdmFyX2V0aGVyU3RhdHNJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfZXRoZXJTdGF0c0luZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2luZGV4X3RvX29pZCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2ggCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfZXRoZXJTdGF0c0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbWliX2lkeC0+ZXRoZXJTdGF0c0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+ZXRoZXJTdGF0c0luZGV4KSk7CisKKworICAgIGVyciA9IGJ1aWxkX29pZF9ub2FsbG9jKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwgJm9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmdmFyX2V0aGVyU3RhdHNJbmRleCk7CisgICAgaWYgKGVycikKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yICVkIGNvbnZlcnRpbmcgaW5kZXggdG8gb2lkXG4iLCBlcnIpOworCisgICAgLyoKKyAgICAgKiBwYXJzaW5nIG1heSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkuIGZyZWUgaXQuCisgICAgICovCisgICAgc25tcF9yZXNldF92YXJfYnVmZmVycygmdmFyX2V0aGVyU3RhdHNJbmRleCk7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfaW5kZXhfdG9fb2lkICovCisKKy8qKgorICogZXh0cmFjdCBldGhlclN0YXRzVGFibGUgaW5kZXhlcyBmcm9tIGEgbmV0c25tcF9pbmRleAorICoKKyAqIEByZXR2YWwgU05NUF9FUlJfTk9FUlJPUiAgOiBubyBlcnJvcgorICogQHJldHZhbCBTTk1QX0VSUl9HRU5FUlIgICA6IGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9ldGhlclN0YXRzSW5kZXg7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB2YXJiaW5kcworICAgICAqLworICAgIG1lbXNldCgmdmFyX2V0aGVyU3RhdHNJbmRleCwgMHgwMCwgc2l6ZW9mKHZhcl9ldGhlclN0YXRzSW5kZXgpKTsKKyAgICB2YXJfZXRoZXJTdGF0c0luZGV4LnR5cGUgPSBBU05fSU5URUdFUjsKKworICAgIC8qCisgICAgICogY2hhaW4gdGVtcCBpbmRleCB2YXJiaW5kcyB0b2dldGhlcgorICAgICAqLworICAgIHZhcl9ldGhlclN0YXRzSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogcGFyc2UgdGhlIG9pZCBpbnRvIHRoZSBpbmRpdmlkdWFsIGluZGV4IGNvbXBvbmVudHMKKyAgICAgKi8KKyAgICBlcnIgPSBwYXJzZV9vaWRfaW5kZXhlcyhvaWRfaWR4LT5vaWRzLCBvaWRfaWR4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhcl9ldGhlclN0YXRzSW5kZXgpOworICAgIGlmIChlcnIgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAvKgorICAgICAgICAgKiBjb3B5IG91dCB2YWx1ZXMKKyAgICAgICAgICovCisgICAgICAgIG1pYl9pZHgtPmV0aGVyU3RhdHNJbmRleCA9CisgICAgICAgICAgICAqKChsb25nICopIHZhcl9ldGhlclN0YXRzSW5kZXgudmFsLnN0cmluZyk7CisKKworICAgIH0KKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9ldGhlclN0YXRzSW5kZXgpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkICovCisKKworLyoKKyAqIGV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhCisgKgorICogUHVycG9zZTogY3JlYXRlIG5ldyBldGhlclN0YXRzVGFibGVfZGF0YS4KKyAqLworZXRoZXJTdGF0c1RhYmxlX2RhdGEgKgorZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCkKK3sKKyAgICBldGhlclN0YXRzVGFibGVfZGF0YSAqcnRuID0gU05NUF9NQUxMT0NfVFlQRURFRihldGhlclN0YXRzVGFibGVfZGF0YSk7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJ0bikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5hYmxlIHRvIG1hbGxvYyBtZW1vcnkgZm9yIG5ldyAiCisgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfZGF0YS5cbiIpOworICAgIH0KKworICAgIHJldHVybiBydG47Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhICovCisKKy8qCisgKiBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9kYXRhCisgKgorICogUHVycG9zZTogcmVsZWFzZSBldGhlclN0YXRzVGFibGUgZGF0YS4KKyAqLwordm9pZAorZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YShldGhlclN0YXRzVGFibGVfZGF0YSAqIGRhdGEpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGZyZWUoZGF0YSk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEgKi8KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBpbnRlcm5hbAorICogYWxsb2NhdGUgcmVzb3VyY2VzIGZvciBhIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKi8KK2V0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKK2V0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgIgorICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHguXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzID0gcm93cmVxX2N0eC0+b2lkX3RtcDsKKworICAgIHJvd3JlcV9jdHgtPmV0aGVyU3RhdHNUYWJsZV9kYXRhX2xpc3QgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhbGxvY2F0ZWQgZGF0YSwgY2FsbCBpbml0IHJvdXRpbmUKKyAgICAgKi8KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KHJvd3JlcV9jdHgsIHVzZXJfaW5pdF9jdHgpKSB7CisgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcm93cmVxX2N0eCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHggKi8KKworLyoKKyAqIEBpbnRlcm5hbAorICogcmVsZWFzZSByZXNvdXJjZXMgZm9yIGEgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAqLwordm9pZAorZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAocm93cmVxX2N0eCk7CisKKyAgICBpZiAocm93cmVxX2N0eC0+dW5kbykKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YShyb3dyZXFfY3R4LT51bmRvKTsKKworICAgIC8qCisgICAgICogZnJlZSBpbmRleCBvaWQgcG9pbnRlcgorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgIT0gcm93cmVxX2N0eC0+b2lkX3RtcCkKKyAgICAgICAgZnJlZShyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMpOworCisgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZmlyc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAic2tpcHBpbmcgYWRkaXRpb25hbCBwcmVfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICByYyA9IGV0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChldGhlclN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdFxuIiwgcmMpKTsKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiByZWxlYXNlIHJvdyBjb250ZXh0LCBpZiBkZWxldGVkCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHggJiYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREVMRVRFRCkpCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIHdhaXQgZm9yIGxhc3QgY2FsbCBiZWZvcmUgY2FsbGluZyB1c2VyCisgICAgICovCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2xhc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAid2FpdGluZyBmb3IgbGFzdCBwb3N0X3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcGFja2V0X3JjID0gbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfZXJyb3IoYWd0cmVxX2luZm8tPmFzcCwgMCk7CisgICAgaWYgKChNRkRfU1VDQ0VTUyAhPSBwYWNrZXRfcmMpICYmIGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9nZXQoKSkgeworICAgICAgICAvKgorICAgICAgICAgKiB3ZSBzaG91bGRuJ3QgZ2V0IGhlcmUuIHRoZSB1bmRvIHN0ZXBzIHNob3VsZCBhbHNvIGNsZWFyCisgICAgICAgICAqIHRoZSBkaXJ0eSBmbGFncy4KKyAgICAgICAgICovCisgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlIGRpcnR5IGZsYWcgc2V0IGluIHBvc3RfcmVxdWVzdCAiCisgICAgICAgICAgICAgICAgICJidXQgc3RhdHVzICE9IFNVQ0NFU1MuXG4iKTsKKyAgICB9CisKKyAgICByYyA9IGV0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X3JjKTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3RcbiIsIHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorX21mZF9ldGhlclN0YXRzVGFibGVfcm93cmVxX2Zyb21faW5kZXgobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJjX3B0cikKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICBldGhlclN0YXRzVGFibGVfbWliX2luZGV4IG1pYl9pZHg7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9yb3dyZXFfZnJvbV9pbmRleCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJjX3B0cikKKyAgICAgICAgcmNfcHRyID0gJnJjOworICAgICpyY19wdHIgPSBNRkRfU1VDQ0VTUzsKKworICAgIG1lbXNldCgmbWliX2lkeCwgMHgwLCBzaXplb2YobWliX2lkeCkpOworCisgICAgLyoKKyAgICAgKiB0cnkgdG8gcGFyc2Ugb2lkCisgICAgICovCisgICAgKnJjX3B0ciA9IGV0aGVyU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZChvaWRfaWR4LCAmbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9ICpyY19wdHIpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiZXRoZXJTdGF0c1RhYmxlIiwgImVycm9yIHBhcnNpbmcgaW5kZXhcbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhbGxvY2F0ZSBuZXcgY29udGV4dAorICAgICAqLworICAgIHJvd3JlcV9jdHggPSBldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChOVUxMKTsKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgICpyY19wdHIgPSBNRkRfRVJST1I7CisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworICAgIH0KKworICAgIG1lbWNweSgmcm93cmVxX2N0eC0+dGJsX2lkeCwgJm1pYl9pZHgsIHNpemVvZihtaWJfaWR4KSk7CisKKyAgICAvKgorICAgICAqIGNoZWNrIGluZGV4ZXMKKyAgICAgKi8KKyAgICAqcmNfcHRyID0gX2V0aGVyU3RhdHNUYWJsZV9jaGVja19pbmRleGVzKHJvd3JlcV9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSAqcmNfcHRyKSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KCgqcmNfcHRyID09IFNOTVBfRVJSX05PQ1JFQVRJT04pIHx8CisgICAgICAgICAgICAgICAgICAgICAgICgqcmNfcHRyID09IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUUpKTsKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjb3B5IGluZGV4ZXMKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT5vaWRfaWR4LmxlbiA9IG9pZF9pZHgtPmxlbjsKKyAgICBtZW1jcHkocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzLCBvaWRfaWR4LT5vaWRzLAorICAgICAgICAgICBvaWRfaWR4LT5sZW4gKiBzaXplb2Yob2lkKSk7CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfcm93cmVxX2Zyb21faW5kZXggKi8KKworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBvdXIgY29udGV4dCBmcm9tIG1mZAorICAgICAqIGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICppZl9jdHggPQorICAgICAqICAgICAgICAgICAgIChldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqKXJlZ2luZm8tPm15X3JlZ192b2lkOworICAgICAqLworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGJscmVxX2luZm87CisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworCisgICAgICAgIHRibHJlcV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0YmxyZXFfaW5mbykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInJlcXVlc3QgaGFkIG5vIHRhYmxlIGluZm9cbiIpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIHRyeSBjcmVhdGUgcm93cmVxCisgICAgICAgICAqLworICAgICAgICBvaWRfaWR4Lm9pZHMgPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkOworICAgICAgICBvaWRfaWR4LmxlbiA9IHRibHJlcV9pbmZvLT5pbmRleF9vaWRfbGVuOworCisgICAgICAgIHJvd3JlcV9jdHggPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV9yb3dyZXFfZnJvbV9pbmRleCgmb2lkX2lkeCwgJnJjKTsKKyAgICAgICAgaWYgKE1GRF9TVUNDRVNTID09IHJjKSB7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzIHw9IE1GRF9ST1dfQ1JFQVRFRDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBhZGQgcm93cmVxX2N0eCB0byByZXF1ZXN0IGRhdGEgbGlzdHMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2luc2VydChyZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfaW5kZXggKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCByYyk7CisgICAgZWxzZQorICAgICAgICBldGhlclN0YXRzVGFibGVfcm93X3ByZXAocm93cmVxX2N0eCk7CisKKyAgICByZXR1cm4gU05NUF9WQUxJREFURV9FUlIocmMpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEBpbnRlcm5hbAorICogUmV0cmlldmUgdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbihldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsCisgICAgICAgICAgICAgICAgImNhbGxlZCBmb3IgJWRcbiIsIGNvbHVtbikpOworCisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgc3dpdGNoIChjb2x1bW4pIHsKKworICAgICAgICAvKgorICAgICAgICAgKiAoSU5ERVgpIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0lOREVYOgorICAgICAgICB2YXItPnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKGxvbmcpOworICAgICAgICAoKnZhci0+dmFsLmludGVnZXIpID0gcm93cmVxX2N0eC0+dGJsX2lkeC5ldGhlclN0YXRzSW5kZXg7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEYXRhU291cmNlKDIpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvQS9XL2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNEYXRhU291cmNlKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9PQkpFQ1RfSUQ7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvaWQgKiopICYgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWxfbGVuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0Ryb3BFdmVudHMoMykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0RST1BFVkVOVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNEUk9QRVZFTlRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c0Ryb3BFdmVudHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNEcm9wRXZlbnRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPY3RldHMoNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09DVEVUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU09DVEVUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNPY3RldHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNPY3RldHNfZ2V0KHJvd3JlcV9jdHgsICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMoNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNQS1RTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1BrdHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNQa3RzX2dldChyb3dyZXFfY3R4LCAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzKDYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNCUk9BRENBU1RQS1RTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTQlJPQURDQVNUUEtUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzQnJvYWRjYXN0UGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzTXVsdGljYXN0UGt0cyg3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTTVVMVElDQVNUUEtUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU01VTFRJQ0FTVFBLVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzTXVsdGljYXN0UGt0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzKDgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNDUkNBTElHTkVSUk9SUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU0NSQ0FMSUdORVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzKDkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNVTkRFUlNJWkVQS1RTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTVU5ERVJTSVpFUEtUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzVW5kZXJzaXplUGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3ZlcnNpemVQa3RzKDEwKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT1ZFUlNJWkVQS1RTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTT1ZFUlNJWkVQS1RTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c092ZXJzaXplUGt0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c092ZXJzaXplUGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNGcmFnbWVudHMoMTEpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNGUkFHTUVOVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNGUkFHTUVOVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzRnJhZ21lbnRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzRnJhZ21lbnRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0phYmJlcnMoMTIpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNKQUJCRVJTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTSkFCQkVSU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNKYWJiZXJzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzSmFiYmVyc19nZXQocm93cmVxX2N0eCwgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQ29sbGlzaW9ucygxMykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0NPTExJU0lPTlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNDT0xMSVNJT05TX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c0NvbGxpc2lvbnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNDb2xsaXNpb25zX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNjRPY3RldHMoMTQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjRPQ1RFVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjRPQ1RFVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzUGt0czY0T2N0ZXRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzUGt0czY0T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzKDE1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzY1VE8xMjdPQ1RFVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjVUTzEyN09DVEVUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzKDE2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzEyOFRPMjU1T0NURVRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTUEtUUzEyOFRPMjU1T0NURVRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMoMTcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMjU2VE81MTFPQ1RFVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNQS1RTMjU2VE81MTFPQ1RFVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMoMTgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNTEyVE8xMDIzT0NURVRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTUEtUUzUxMlRPMTAyM09DVEVUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMoMTkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTAyNFRPMTUxOE9DVEVUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMDI0VE8xNTE4T0NURVRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c093bmVyKDIwKS9Pd25lclN0cmluZy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvQS9XL2UvUi9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPV05FUjoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c093bmVyKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9PQ1RFVF9TVFI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c093bmVyX2dldChyb3dyZXFfY3R4LCAoY2hhciAqKikgJnZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbF9sZW4pOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzU3RhdHVzKDIxKS9FbnRyeVN0YXR1cy9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS9XL0Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzU3RhdHVzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzU3RhdHVzX2dldChyb3dyZXFfY3R4LCAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKEVUSEVSU1RBVFNUQUJMRV9NSU5fQ09MIDw9IGNvbHVtbgorICAgICAgICAgICAgJiYgY29sdW1uIDw9IEVUSEVSU1RBVFNUQUJMRV9NQVhfQ09MKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiYXNzdW1lIGNvbHVtbiAlZCBpcyByZXNlcnZlZFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByYyA9IE1GRF9TS0lQOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4uXG4iLAorICAgICAgICAgICAgICAgICAgICAgY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF92YWx1ZXMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKKyAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKKyAgICB2b2lkICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spICh2b2lkICopOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X3ZhbHVlcyIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCI5OmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfdmFsdWVzIiwKKyAgICAgICAgICAgICAgICAiZXhpc3RzICV1XG4iLCByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzKSk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbihyb3dyZXFfY3R4LCByZXF1ZXN0cy0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktPmNvbG51bSk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgaWYgKE1GRF9TS0lQID09IHJjKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9IFNOTVBfTk9TVUNISU5TVEFOQ0U7CisgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5VTEwgdmFyYmluZCBkYXRhIHBvaW50ZXIhXG4iKTsKKyAgICAgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgdGhlIGJ1ZmZlciB3YXNuJ3QgdXNlZCBwcmV2aW91c2x5IGZvciB0aGUgb2xkIGRhdGEgKGkuZS4gaXQKKyAgICAgICAgICogd2FzIGFsbGNvYXRlZCBtZW1vcnkpICBhbmQgdGhlIGdldCByb3V0aW5lIHJlcGxhY2VkIHRoZSBwb2ludGVyLAorICAgICAgICAgKiB3ZSBuZWVkIHRvIGZyZWUgdGhlIHByZXZpb3VzIHBvaW50ZXIuCisgICAgICAgICAqLworICAgICAgICBpZiAob2xkX3N0cmluZyAmJiAob2xkX3N0cmluZyAhPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpICYmCisgICAgICAgICAgICAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZyAhPSBvbGRfc3RyaW5nKSkgeworICAgICAgICAgICAgaWYgKGRhdGFGcmVlSG9vaykKKyAgICAgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKG9sZF9zdHJpbmcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyZWUob2xkX3N0cmluZyk7CisgICAgICAgIH0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfdmFsdWVzICovCisKK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19ldGhlclN0YXRzVGFibGVfY2hlY2tfaW5kZXhlcyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2luZGV4ZXMiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKworICAgIC8qCisgICAgICogKElOREVYKSBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2ggCisgICAgICovCisgICAgLyoKKyAgICAgKiBjaGVjayBkZWZpbmVkIHJhbmdlKHMpLiAKKyAgICAgKi8KKyAgICBpZiAoKFNOTVBFUlJfU1VDQ0VTUyA9PSByYykKKyAgICAgICAgJiYgKChyb3dyZXFfY3R4LT50YmxfaWR4LmV0aGVyU3RhdHNJbmRleCA8IDEpCisgICAgICAgICAgICB8fCAocm93cmVxX2N0eC0+dGJsX2lkeC5ldGhlclN0YXRzSW5kZXggPiA2NTUzNSkpCisgICAgICAgICkgeworICAgICAgICByYyA9IFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIHJjOworICAgIHJjID0gZXRoZXJTdGF0c0luZGV4X2NoZWNrX2luZGV4KHJvd3JlcV9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQ1JFQVRJT047CisKKyAgICAvKgorICAgICAqIGlmIGluZGl2aWR1YWwgcGFydHMgbG9vayBvaywgY2hlY2sgdGhlbSBhcyBhIHdob2xlCisgICAgICovCisgICAgcmV0dXJuIGV0aGVyU3RhdHNUYWJsZV92YWxpZGF0ZV9pbmRleChldGhlclN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfY2hlY2tfaW5kZXhlcyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU0VUOiBTeW50YXggY2hlY2tzCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIEBpbnRlcm5hbAorICogQ2hlY2sgdGhlIHN5bnRheCBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2NvbHVtbihldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsIGludCBjb2x1bW4pCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2NvbHVtbiIsCisgICAgICAgICAgICAgICAgImNhbGxlZCBmb3IgJWRcbiIsIGNvbHVtbikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIChJTkRFWCkgZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTSU5ERVg6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7ICAgICAgLyogY2FuIG5vdCBjaGFuZ2UgaW5kZXggb2YgYWN0aXZlIHJvdyAqLworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRGF0YVNvdXJjZSgyKS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0EvVy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRToKKyAgICAgICAgcmMgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKHZhciwgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlKSk7CisgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9jaGVja19jb2x1bW46ZXRoZXJTdGF0c0RhdGFTb3VyY2UiLCAidmFyYmluZCB2YWxpZGF0aW9uIGZhaWxlZCAoZWcgYmFkIHR5cGUgb3Igc2l6ZSlcbiIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJjID0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfY2hlY2tfdmFsdWUocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9pZCAqKSB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoKE1GRF9TVUNDRVNTICE9IHJjKSAmJiAoTUZEX05PVF9WQUxJRF9FVkVSICE9IHJjKQorICAgICAgICAgICAgICAgICYmIChNRkRfTk9UX1ZBTElEX05PVyAhPSByYykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmMgJWQgZnJvbSBldGhlclN0YXRzRGF0YVNvdXJjZV9jaGVja192YWx1ZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByYyk7CisgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0Ryb3BFdmVudHMoMykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0RST1BFVkVOVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPY3RldHMoNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09DVEVUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMoNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzKDYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNCUk9BRENBU1RQS1RTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzTXVsdGljYXN0UGt0cyg3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTTVVMVElDQVNUUEtUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzKDgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNDUkNBTElHTkVSUk9SUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMoOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1VOREVSU0laRVBLVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMoMTApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPVkVSU0laRVBLVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNGcmFnbWVudHMoMTEpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNGUkFHTUVOVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNKYWJiZXJzKDEyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTSkFCQkVSUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0NvbGxpc2lvbnMoMTMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNDT0xMSVNJT05TOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czY0T2N0ZXRzKDE0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzY0T0NURVRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMoMTUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjVUTzEyN09DVEVUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cygxNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMjhUTzI1NU9DVEVUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cygxNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMyNTZUTzUxMU9DVEVUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMoMTgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNTEyVE8xMDIzT0NURVRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMoMTkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTAyNFRPMTUxOE9DVEVUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c093bmVyKDIwKS9Pd25lclN0cmluZy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvQS9XL2UvUi9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPV05FUjoKKyAgICAgICAgcmMgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKHZhciwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lcikpOworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBkZWZpbmVkIHJhbmdlKHMpLiAKKyAgICAgICAgICovCisgICAgICAgIGlmICgoU05NUEVSUl9TVUNDRVNTID09IHJjKQorICAgICAgICAgICAgJiYgKCh2YXItPnZhbF9sZW4gPCAwKSB8fCAodmFyLT52YWxfbGVuID4gMTI3KSkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKKyAgICAgICAgfQorICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfY2hlY2tfY29sdW1uOmV0aGVyU3RhdHNPd25lciIsICJ2YXJiaW5kIHZhbGlkYXRpb24gZmFpbGVkIChlZyBiYWQgdHlwZSBvciBzaXplKVxuIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmMgPSBldGhlclN0YXRzT3duZXJfY2hlY2tfdmFsdWUocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoKE1GRF9TVUNDRVNTICE9IHJjKSAmJiAoTUZEX05PVF9WQUxJRF9FVkVSICE9IHJjKQorICAgICAgICAgICAgICAgICYmIChNRkRfTk9UX1ZBTElEX05PVyAhPSByYykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmMgJWQgZnJvbSBldGhlclN0YXRzT3duZXJfY2hlY2tfdmFsdWVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmMpOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNTdGF0dXMoMjEpL0VudHJ5U3RhdHVzL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL1cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVUzoKKyAgICAgICAgcmMgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUodmFyLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzU3RhdHVzKSk7CisgICAgICAgIC8qCisgICAgICAgICAqIGNoZWNrIHRoYXQgdGhlIHZhbHVlIGlzIG9uZSBvZiBkZWZpbmVkIGVudW1zIAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKChTTk1QRVJSX1NVQ0NFU1MgPT0gcmMpCisgICAgICAgICAgICAmJiAoKnZhci0+dmFsLmludGVnZXIgIT0gRU5UUllTVEFUVVNfVkFMSUQpCisgICAgICAgICAgICAmJiAoKnZhci0+dmFsLmludGVnZXIgIT0gRU5UUllTVEFUVVNfQ1JFQVRFUkVRVUVTVCkKKyAgICAgICAgICAgICYmICgqdmFyLT52YWwuaW50ZWdlciAhPSBFTlRSWVNUQVRVU19VTkRFUkNSRUFUSU9OKQorICAgICAgICAgICAgJiYgKCp2YXItPnZhbC5pbnRlZ2VyICE9IEVOVFJZU1RBVFVTX0lOVkFMSUQpCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIHJjID0gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfY2hlY2tfY29sdW1uOmV0aGVyU3RhdHNTdGF0dXMiLCAidmFyYmluZCB2YWxpZGF0aW9uIGZhaWxlZCAoZWcgYmFkIHR5cGUgb3Igc2l6ZSlcbiIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJjID0gZXRoZXJTdGF0c1N0YXR1c19jaGVja192YWx1ZShyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVfbG9uZyAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZykpOworICAgICAgICAgICAgaWYgKChNRkRfU1VDQ0VTUyAhPSByYykgJiYgKE1GRF9OT1RfVkFMSURfRVZFUiAhPSByYykKKyAgICAgICAgICAgICAgICAmJiAoTUZEX05PVF9WQUxJRF9OT1cgIT0gcmMpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJjICVkIGZyb20gZXRoZXJTdGF0c1N0YXR1c19jaGVja192YWx1ZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByYyk7CisgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiAgICAvKiogV2Ugc2hvdWxkbid0IGdldCBoZXJlICovCisgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAidW5rbm93biBjb2x1bW4gJWQgaW4gX2V0aGVyU3RhdHNUYWJsZV9jaGVja19jb2x1bW5cbiIsCisgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2NvbHVtbiAqLworCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX29iamVjdHMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX29iamVjdHMiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZ2V0IGNvbHVtbiBudW1iZXIgZnJvbSB0YWJsZSByZXF1ZXN0IGluZm8sIGFuZCBjaGVjayB0aGF0IGNvbHVtbgorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9ldGhlclN0YXRzVGFibGVfY2hlY2tfY29sdW1uKHJvd3JlcV9jdHgsIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfY2hlY2tfb2JqZWN0cyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNFVDogVW5kbyBzZXR1cAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBAaW50ZXJuYWwKKyAqIFNldCB0aGUgdmFsdWUgZm9yIGEgcGFydGljdWxhciBjb2x1bW4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwX2NvbHVtbihldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW4pCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXBfY29sdW1uIiwgImNhbGxlZCBmb3IgJWRcbiIsIGNvbHVtbikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0RhdGFTb3VyY2UoMikvT0JKRUNUSUQvQVNOX09CSkVDVF9JRC9vaWQob2lkKS8vTC9BL1cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0U6CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUc7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kb19zZXR1cChyb3dyZXFfY3R4KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c093bmVyKDIwKS9Pd25lclN0cmluZy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvQS9XL2UvUi9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPV05FUjoKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUc7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c093bmVyX3VuZG9fc2V0dXAocm93cmVxX2N0eCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNTdGF0dXMoMjEpL0VudHJ5U3RhdHVzL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL1cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVUzoKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHOworICAgICAgICByYyA9IGV0aGVyU3RhdHNTdGF0dXNfdW5kb19zZXR1cChyb3dyZXFfY3R4KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAidW5rbm93biBjb2x1bW4gJWQgaW4gX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwX2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXBfY29sdW1uICovCisKKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHVuZG8gc2V0dXAKKyAqLworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogYWxsb2NhdGUgdW5kbyBjb250ZXh0CisgICAgICovCisgICAgcm93cmVxX2N0eC0+dW5kbyA9IGV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhKCk7CisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eC0+dW5kbykgeworICAgICAgICAvKiogbXNnIGFscmVhZHkgbG9nZ2VkICovCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgLyoKKyAgICAgKiByb3cgdW5kbyBzZXR1cAorICAgICAqLworICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgPSAwOworICAgIHJjID0gZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAocm93cmVxX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6bWZkIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXBcbiIsIHJjKSk7CisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNvbHVtbiB1bmRvIHNldHVwCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworICAgICAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICByYyA9IF9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cF9jb2x1bW4ocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktPmNvbG51bSk7CisgICAgICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOm1mZCIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXBfY29sdW1uXG4iLCByYykpOworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoYWd0cmVxX2luZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogdW5kbyBzZXR1cAorICovCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZmFpbGVkIHJvdyBjcmVhdGUgaW4gZWFybHkgc3RhZ2VzIGhhcyBubyByb3dyZXFfY3R4CisgICAgICovCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworCisgICAgLyoKKyAgICAgKiBjYWxsIHVzZXIgY2xlYW51cAorICAgICAqLworICAgIHJjID0gZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cChyb3dyZXFfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTptZmQiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwXG4iLCByYykpOworICAgIH0KKworICAgIC8qCisgICAgICogcmVsZWFzZSB1bmRvIGNvbnRleHQsIGlmIG5lZWRlZAorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4LT51bmRvKSB7CisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEocm93cmVxX2N0eC0+dW5kbyk7CisgICAgICAgIHJvd3JlcV9jdHgtPnVuZG8gPSBOVUxMOworICAgIH0KKworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTRVQ6IFNldCB2YWx1ZXMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogQGludGVybmFsCisgKiBTZXQgdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19ldGhlclN0YXRzVGFibGVfc2V0X2NvbHVtbihldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9zZXRfY29sdW1uIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgc3dpdGNoIChjb2x1bW4pIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRGF0YVNvdXJjZSgyKS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0EvVy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRToKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRzsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzRGF0YVNvdXJjZV9zZXQocm93cmVxX2N0eCwgKG9pZCAqKSB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPd25lcigyMCkvT3duZXJTdHJpbmcvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML0EvVy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT1dORVI6CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHOworICAgICAgICByYyA9IGV0aGVyU3RhdHNPd25lcl9zZXQocm93cmVxX2N0eCwgKGNoYXIgKikgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1N0YXR1cygyMSkvRW50cnlTdGF0dXMvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0EvVy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTOgorICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUc7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1N0YXR1c19zZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInVua25vd24gY29sdW1uICVkIGluIF9ldGhlclN0YXRzVGFibGVfc2V0X2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgY29sdW1uKTsKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV9zZXRfY29sdW1uICovCisKK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfc2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX3NldF92YWx1ZXMiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzID0gMDsKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2V0IGNvbHVtbiBkYXRhCisgICAgICAgICAqLworICAgICAgICB0cmkgPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cyk7CisgICAgICAgIGlmIChOVUxMID09IHRyaSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJjID0gX2V0aGVyU3RhdHNUYWJsZV9zZXRfY29sdW1uKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmIsIHRyaS0+Y29sbnVtKTsKKyAgICAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOm1mZCIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfc2V0X2NvbHVtblxuIiwgcmMpKTsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoYWd0cmVxX2luZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfc2V0X3ZhbHVlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTRVQ6IGNvbW1pdAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICogQGludGVybmFsCisgKiBjb21taXQgdGhlIHZhbHVlcworICovCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX2NvbW1pdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2NvbW1pdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHJjID0gZXRoZXJTdGF0c1RhYmxlX2NvbW1pdChyb3dyZXFfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTptZmQiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfY29tbWl0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICBpZiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ESVJUWSkgeworICAgICAgICAvKgorICAgICAgICAgKiBpZiB3ZSBzdWNjZXNzZnVsbHkgY29tbWl0ZWQgdGhpcyByb3csIHNldCB0aGUgZGlydHkgZmxhZy4gVXNlIHRoZQorICAgICAgICAgKiBjdXJyZW50IHZhbHVlICsgMSAoaS5lLiBkaXJ0eSA9ICMgcm93cyBjaGFuZ2VkKS4KKyAgICAgICAgICogdGhpcyBpcyBjaGVja2VkIGluIHBvc3RfcmVxdWVzdC4uLgorICAgICAgICAgKi8KKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2RpcnR5X3NldChldGhlclN0YXRzVGFibGVfZGlydHlfZ2V0KCkgKyAxKTsgICAgIC8qIHNldCB0YWJsZSBkaXJ0eSBmbGFnICovCisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBpZiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ESVJUWSkgeworICAgICAgICB1X2ludCAgICAgICAgICAgZCA9IGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9nZXQoKTsKKworICAgICAgICBuZXRzbm1wX2Fzc2VydChkICE9IDApOworICAgICAgICBpZiAoZCkKKyAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9zZXQoZCAtIDEpOworICAgIH0KKworICAgIHJjID0gZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0KHJvd3JlcV9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOm1mZCIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdFxuIiwgcmMpKTsKKyAgICB9CisKKyAgICBpZiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ESVJUWSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZSByb3cgZGlydHkgZmxhZyBzdGlsbCBzZXQgYWZ0ZXIgdW5kb19jb21taXRcbiIpOworICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJj0gfk1GRF9ST1dfRElSVFk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2NvbW1pdCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTRVQ6IFVuZG8KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAqIEBpbnRlcm5hbAorICogdW5kbyB0aGUgdmFsdWUgZm9yIGEgcGFydGljdWxhciBjb2x1bW4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbHVtbihldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfdW5kb19jb2x1bW4iLAorICAgICAgICAgICAgICAgICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEYXRhU291cmNlKDIpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvQS9XL2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFOgorICAgICAgICByYyA9IGV0aGVyU3RhdHNEYXRhU291cmNlX3VuZG8ocm93cmVxX2N0eCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPd25lcigyMCkvT3duZXJTdHJpbmcvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML0EvVy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT1dORVI6CisgICAgICAgIHJjID0gZXRoZXJTdGF0c093bmVyX3VuZG8ocm93cmVxX2N0eCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNTdGF0dXMoMjEpL0VudHJ5U3RhdHVzL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL1cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVUzoKKyAgICAgICAgcmMgPSBldGhlclN0YXRzU3RhdHVzX3VuZG8ocm93cmVxX2N0eCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInVua25vd24gY29sdW1uICVkIGluIF9ldGhlclN0YXRzVGFibGVfdW5kb19jb2x1bW5cbiIsCisgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbHVtbiAqLworCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fdmFsdWVzKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3ZhbHVlcyIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICByYyA9IGV0aGVyU3RhdHNUYWJsZV91bmRvKHJvd3JlcV9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOm1mZCIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV91bmRvXG4iLCByYykpOworICAgIH0KKworICAgIGZvciAoOyByZXF1ZXN0czsgcmVxdWVzdHMgPSByZXF1ZXN0cy0+bmV4dCkgeworICAgICAgICAvKgorICAgICAgICAgKiBzZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29sdW1uKHJvd3JlcV9jdHgsIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktPmNvbG51bSk7CisgICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTptZmQiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29sdW1uXG4iLCByYykpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb192YWx1ZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU0VUOiBpcnJldmVyc2libGUgY29tbWl0CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGNvbW1pdCBpcnJldmVyc2libGUgYWN0aW9ucworICovCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBjaGVjayBmb3IgYW5kIGhhbmRsZSByb3cgY3JlYXRpb24vZGVsZXRpb24KKyAgICAgKiBhbmQgdXBkYXRlIGNvbHVtbiBleGlzdCBmbGFncy4uLgorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RFTEVURUQpIHsKKyAgICAgICAgaWYgKCEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19DUkVBVEVEKSkKKyAgICAgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIsIHJvd3JlcV9jdHgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfaXJyZXZlcnNpYmxlX2NvbW1pdCIsICJ1cGRhdGluZyBleGlzdHMgKCUjeCkgdy9zZXQgKCUjeCkgPSAlI3hcbiIsIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MsIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MsIChyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHwgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncykpKTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0KKyAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfQ1JFQVRFRCkgeworICAgICAgICAgICAgcm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICY9IH5NRkRfUk9XX0NSRUFURUQ7CisgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9pcnJldmVyc2libGVfY29tbWl0ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERBVEEgQUNDRVNTCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgICAgIF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcik7CisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2NhY2hlX2xvYWQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY2FjaGUgZm9yIGV0aGVyU3RhdHNUYWJsZV9jYWNoZV9sb2FkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGFuIGludmFsaWQgb3IgZXhwaXJlZCBjYWNoZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KCgwID09IGNhY2hlLT52YWxpZCkgfHwgKDEgPT0gY2FjaGUtPmV4cGlyZWQpKTsKKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICByZXR1cm4gZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9jYWNoZV9mcmVlIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpbnZhbGlkIGNhY2hlIGluIGV0aGVyU3RhdHNUYWJsZV9jYWNoZV9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWM7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfaXRlbV9mcmVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfY29udGFpbmVyX2l0ZW1fZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NvbnRhaW5lcl9pdGVtX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9jb250YWluZXJfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgaW4gZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogZnJlZSBhbGwgaXRlbXMuIGluZWZmaWNpZW50LCBidXQgZWFzeS4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NvbnRhaW5lcl9pdGVtX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KGV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBjYWNoZSBpbml0CisgICAgICovCisgICAgaWZfY3R4LT5jYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKDMwLCAgICAvKiB0aW1lb3V0IGluIHNlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlX2xvYWQsIF9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfb2lkX3NpemUpOworCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIGV0aGVyU3RhdHNUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZl9jdHgtPmNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCgmaWZfY3R4LT5jb250YWluZXIsIGlmX2N0eC0+Y2FjaGUpOworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CisgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJldGhlclN0YXRzVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCisgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKE5VTEwgIT0gaWZfY3R4LT5jYWNoZSkKKyAgICAgICAgaWZfY3R4LT5jYWNoZS0+bWFnaWMgPSAodm9pZCAqKSBpZl9jdHgtPmNvbnRhaW5lcjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2h1dGRvd24gdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOworCisgICAgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpZl9jdHgtPmNvbnRhaW5lcik7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoaWZfY3R4LT5jb250YWluZXIpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKworZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorZXRoZXJTdGF0c1RhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChldGhlclN0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfT0lEX0xFTl07CisgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgc3RvcmFnZSBmb3IgT0lECisgICAgICovCisgICAgb2lkX2lkeC5vaWRzID0gb2lkX3RtcDsKKyAgICBvaWRfaWR4LmxlbiA9IHNpemVvZihvaWRfdG1wKSAvIHNpemVvZihvaWQpOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0CisgICAgICovCisgICAgcmMgPSBldGhlclN0YXRzVGFibGVfaW5kZXhfdG9fb2lkKCZvaWRfaWR4LCBtaWJfaWR4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcm93cmVxX2N0eCA9CisgICAgICAgIENPTlRBSU5FUl9GSU5EKGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTQ1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKy8qKiBAaW5ncm91cCBpbnRlcmZhY2U6IFJvdXRpbmVzIHRvIGludGVyZmFjZSB0byBOZXQtU05NUAorICoKKyAqIFx3YXJuaW5nIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBjYWxsZWQgZGlyZWN0bHksCisgKiAgICAgICAgICBvciB1c2VkIHRvIGludGVycHJldCBmdW5jdGlvbmFsaXR5LiBJdCBpcyBzdWJqZWN0IHRvCisgKiAgICAgICAgICBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAKKyAqIEB7CisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBFVEhFUlNUQVRTVEFCTEVfSU5URVJGQUNFX0gKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX0lOVEVSRkFDRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlLmgiCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqIFBVQkxJQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZSAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2V0aGVyU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZShldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VyX2N0eCwgdV9sb25nIGZsYWdzKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2V0aGVyU3RhdHNUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4KTsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKmV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpOworCisgICAgZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAqZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NpemUodm9pZCk7CisKKyAgICB1X2ludCAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2RpcnR5X2dldCh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2RpcnR5X3NldCh1X2ludCBzdGF0dXMpOworCisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKmV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KHZvaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKik7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CisKKyAgICAvKgorICAgICAqIGFjY2VzcyB0byBjZXJ0YWluIGludGVybmFscy4gdXNlIHdpdGggY2F1dGlvbiEKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2Yyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVRIRVJTVEFUU1RBQkxFX0lOVEVSRkFDRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfb2lkcy5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9vaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmMWRhMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfb2lkcy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtb2lkcy5tMmMgMTI4NTUgMjAwNS0wOS0yNyAxNTo1NjowOFogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIEVUSEVSU1RBVFNUQUJMRV9PSURTX0gKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX09JRFNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgZXRoZXJTdGF0c1RhYmxlIAorICAgICAqLworI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfT0lEICAgICAgICAgICAgICAxLDMsNiwxLDIsMSwxNiwxLDEKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0lOREVYICAgICAgICAgMQorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0lOREVYX0ZMQUcgICAgKDB4MSA8PCAwKQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRSAgICAgICAgIDIKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUcgICAgKDB4MSA8PCAxKQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTRFJPUEVWRU5UUyAgICAgICAgIDMKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNEUk9QRVZFTlRTX0ZMQUcgICAgKDB4MSA8PCAyKQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTT0NURVRTICAgICAgICAgNAorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU09DVEVUU19GTEFHICAgICgweDEgPDwgMykKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMgICAgICAgICA1CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUU19GTEFHICAgICgweDEgPDwgNCkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0JST0FEQ0FTVFBLVFMgICAgICAgICA2CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTQlJPQURDQVNUUEtUU19GTEFHICAgICgweDEgPDwgNSkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU01VTFRJQ0FTVFBLVFMgICAgICAgICA3CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTTVVMVElDQVNUUEtUU19GTEFHICAgICgweDEgPDwgNikKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0NSQ0FMSUdORVJST1JTICAgICAgICAgOAorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0NSQ0FMSUdORVJST1JTX0ZMQUcgICAgKDB4MSA8PCA3KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTVU5ERVJTSVpFUEtUUyAgICAgICAgIDkKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNVTkRFUlNJWkVQS1RTX0ZMQUcgICAgKDB4MSA8PCA4KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTT1ZFUlNJWkVQS1RTICAgICAgICAgMTAKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNPVkVSU0laRVBLVFNfRkxBRyAgICAoMHgxIDw8IDkpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNGUkFHTUVOVFMgICAgICAgICAxMQorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0ZSQUdNRU5UU19GTEFHICAgICgweDEgPDwgMTApCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNKQUJCRVJTICAgICAgICAgMTIKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNKQUJCRVJTX0ZMQUcgICAgKDB4MSA8PCAxMSkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0NPTExJU0lPTlMgICAgICAgICAxMworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0NPTExJU0lPTlNfRkxBRyAgICAoMHgxIDw8IDEyKQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzY0T0NURVRTICAgICAgICAgMTQKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjRPQ1RFVFNfRkxBRyAgICAoMHgxIDw8IDEzKQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzY1VE8xMjdPQ1RFVFMgICAgICAgICAxNQorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NVRPMTI3T0NURVRTX0ZMQUcgICAgKDB4MSA8PCAxNCkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMjhUTzI1NU9DVEVUUyAgICAgICAgIDE2CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzEyOFRPMjU1T0NURVRTX0ZMQUcgICAgKDB4MSA8PCAxNSkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMyNTZUTzUxMU9DVEVUUyAgICAgICAgIDE3CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzI1NlRPNTExT0NURVRTX0ZMQUcgICAgKDB4MSA8PCAxNikKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM1MTJUTzEwMjNPQ1RFVFMgICAgICAgICAxOAorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM1MTJUTzEwMjNPQ1RFVFNfRkxBRyAgICAoMHgxIDw8IDE3KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzEwMjRUTzE1MThPQ1RFVFMgICAgICAgICAxOQorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMDI0VE8xNTE4T0NURVRTX0ZMQUcgICAgKDB4MSA8PCAxOCkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSICAgICAgICAgMjAKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHICAgICgweDEgPDwgMTkpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVMgICAgICAgICAyMQorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHICAgICgweDEgPDwgMjApCisKKworI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfTUlOX0NPTCAgIENPTFVNTl9FVEhFUlNUQVRTSU5ERVgKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX01BWF9DT0wgICBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVUworCisKKyAgICAvKgorICAgICAqIFRPRE86NDA1OnI6IFJldmlldyBFVEhFUlNUQVRTVEFCTEVfU0VUVEFCTEVfQ09MUyBtYWNyby4KKyAgICAgKiBPUiB0b2dldGhlciBhbGwgdGhlIHdyaXRhYmxlIGNvbHMuCisgICAgICovCisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9TRVRUQUJMRV9DT0xTIChDT0xVTU5fRVRIRVJTVEFUU0lOREVYX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTRFJPUEVWRU5UU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNPQ1RFVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTUEtUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNCUk9BRENBU1RQS1RTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU01VTFRJQ0FTVFBLVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTQ1JDQUxJR05FUlJPUlNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTVU5ERVJTSVpFUEtUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNPVkVSU0laRVBLVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTRlJBR01FTlRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU0pBQkJFUlNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTQ09MTElTSU9OU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjRPQ1RFVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTUEtUUzY1VE8xMjdPQ1RFVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTUEtUUzEyOFRPMjU1T0NURVRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1BLVFMyNTZUTzUxMU9DVEVUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNTEyVE8xMDIzT0NURVRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMDI0VE8xNTE4T0NURVRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHKQorICAgIC8qCisgICAgICogVE9ETzo0MDU6cjogUmV2aWV3IEVUSEVSU1RBVFNUQUJMRV9SRVFVSVJFRF9DT0xTIG1hY3JvLgorICAgICAqIE9SIHRvZ2V0aGVyIGFsbCB0aGUgcmVxdWlyZWQgcm93cyBmb3Igcm93IGNyZWF0aW9uLgorICAgICAqIGRlZmF1bHQgaXMgd3JpdGFibGUgY29scyB3L291dCBkZWZhdWx0cy4KKyAgICAgKi8KKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX1JFUVVJUkVEX0NPTFMgKENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRykKKworI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfVkFMSURfQ09MICAgIENPTFVNTl9FVEhFUlNUQVRTSkFCQkVSU19GTEFHIAorCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVRIRVJTVEFUU1RBQkxFX09JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxOTg5NQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmgKQEAgLTAsMCArMSwzNSBAQAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8aWZhZGRycy5oPgorCisvKiB1c2Uga2VybmVsJ3MgZXRodG9vbC5oICAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgX191NjQgdTY0OwordHlwZWRlZiBfX3UzMiB1MzI7Cit0eXBlZGVmIF9fdTE2IHUxNjsKK3R5cGVkZWYgX191OCB1ODsKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKy8qIHN0cnVjdHVyZSBmb3Igc3RvcmluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIGluIHRoZSBzeXN0ZW0gKi8KKworc3RydWN0IGlmbmFtZSB7CisgICAgc3RydWN0IGlmbmFtZSAqaWZuX25leHQ7CisgICAgY2hhciBuYW1lIFtJRl9OQU1FU0laRV07Cit9OworCitzdHJ1Y3QgaWZuYW1lICpldGhlcnN0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IChzdHJ1Y3QgaWZuYW1lICosIGludCAqKTsKK2ludCBldGhlcnN0YXRzX2ludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSAoc3RydWN0IGlmbmFtZSAqbGlzdF9oZWFkKTsKK2ludCBldGhlcnN0YXRzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCAoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBfZXRoZXJTdGF0c19pb2N0bF9nZXQoaW50IGZkLCBpbnQgd2hpY2gsIHN0cnVjdCBpZnJlcSAqaWZycSwgY29uc3QgY2hhciogbmFtZSk7CitpbnQgaW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBpbnQgZmQsIGNvbnN0IGNoYXIqIG5hbWUpOworCisvKiBmb3IgbWFpbnRhaW5hYmlsaXR5ICovCisKKyNkZWZpbmUgQlJPQURDT01fUkVDRUlWRV9KQUJCRVJTICAgICAgICAgICAgICAgICJyeF9qYWJiZXJzIgorCisjZGVmaW5lIEVUSEVSU1RBVFNKQUJCRVJTKHgpICAgICAgICAgICAgICAgICAgICBzdHJzdHIoeCwgQlJPQURDT01fUkVDRUlWRV9KQUJCRVJTKQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYwppbmRleCA0MzVmNTYwLi5kNjAyM2U1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqIGNvbnRlbnQgb2YgdGhlIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlIAogICovCiBzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2NvbnRhaW5lcjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjcsOCArMjgsNyBAQAogdm9pZAogc2h1dGRvd25fc2N0cEFzc29jTG9jYWxBZGRyVGFibGUodm9pZCkKIHsKLSAgICBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9jb250YWluZXJfY2xlYXIKLSAgICAgICAgKHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2NvbnRhaW5lcik7CisgICAgc2h1dGRvd25fdGFibGVfc2N0cEFzc29jTG9jYWxBZGRyVGFibGUoKTsKIH0KIAogLyoqIEluaXRpYWxpemUgdGhlIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwpAQCAtNDIsNyArNDIsNiBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9IE5VTEw7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CiAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IE5VTEw7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CiAKICAgICByZWcgPQogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic2N0cEFzc29jTG9jYWxBZGRyVGFibGUiLApAQCAtMTAzLDYgKzEwMiw3IEBACiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKQEAgLTEyMSw2ICsxMjEsOSBAQAogICAgIGlmIChoYW5kbGVyKQogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKIAorICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwogCkBAIC0xMjgsNiArMTMxLDE3IEBACiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCit2b2lkCitzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9CisgICAgc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfY29udGFpbmVyX2NsZWFyCisgICAgICAgIChzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9jb250YWluZXIpOworfQorCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlIHRhYmxlICovCiBpbnQKIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTI2MCw4ICsyNzQsNyBAQAogdm9pZAogc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfZW50cnlfZnJlZShzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9lbnRyeSAqIGVudHJ5KQogewotICAgIGlmIChlbnRyeSAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIG5ldHNubXBfY29udGFpbmVyICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oCmluZGV4IGMyY2MwNTUuLmVmZjA4MGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaApAQCAtMTMsNiArMTMsNyBAQAogdm9pZCAgICAgICAgICAgIGluaXRfc2N0cEFzc29jTG9jYWxBZGRyVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2N0cEFzc29jTG9jYWxBZGRyVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jCmluZGV4IDYwMTBkODQuLjM4Y2E4YTMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKiBjb250ZW50IG9mIHRoZSBzY3RwQXNzb2NSZW1BZGRyVGFibGUgCiAgKi8KIHN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc2N0cEFzc29jUmVtQWRkclRhYmxlX2NvbnRhaW5lcjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjdHBBc3NvY1JlbUFkZHJUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTI3LDcgKzI4LDcgQEAKIHZvaWQKIHNodXRkb3duX3NjdHBBc3NvY1JlbUFkZHJUYWJsZSh2b2lkKQogewotICAgIHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9jb250YWluZXJfY2xlYXIoc2N0cEFzc29jUmVtQWRkclRhYmxlX2NvbnRhaW5lcik7CisgICAgc2h1dGRvd25fdGFibGVfc2N0cEFzc29jUmVtQWRkclRhYmxlKCk7CiB9CiAKIC8qKiBJbml0aWFsaXplIHRoZSBzY3RwQXNzb2NSZW1BZGRyVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCkBAIC00MSw3ICs0Miw2IEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0gTlVMTDsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKIAogICAgIHJlZyA9CiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzY3RwQXNzb2NSZW1BZGRyVGFibGUiLApAQCAtMTAxLDYgKzEwMSw3IEBACiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yIHNjdHBBc3NvY1JlbUFkZHJUYWJsZVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCkBAIC0xMTksNiArMTIwLDggQEAKICAgICBpZiAoaGFuZGxlcikKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CiAKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOwogCiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKQEAgLTEyNyw2ICsxMzAsMTYgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3RhYmxlX3NjdHBBc3NvY1JlbUFkZHJUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9CisgICAgc2N0cEFzc29jUmVtQWRkclRhYmxlX2NvbnRhaW5lcl9jbGVhcihzY3RwQXNzb2NSZW1BZGRyVGFibGVfY29udGFpbmVyKTsKK30KKwogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjdHBBc3NvY1JlbUFkZHJUYWJsZSB0YWJsZSAqLwogaW50CkBAIC0zMDYsOCArMzE5LDcgQEAKIHZvaWQKIHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9lbnRyeV9mcmVlKHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9lbnRyeSAqIGVudHJ5KQogewotICAgIGlmIChlbnRyeSAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIG5ldHNubXBfY29udGFpbmVyICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKaW5kZXggY2M2NWM3ZS4uNTA2ODU2MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIHZvaWQgICAgICAgICAgICBpbml0X3NjdHBBc3NvY1JlbUFkZHJUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY3RwQXNzb2NSZW1BZGRyVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9zY3RwQXNzb2NSZW1BZGRyVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfc2N0cEFzc29jUmVtQWRkclRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2N0cEFzc29jUmVtQWRkclRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYwppbmRleCBlNzIwYTM4Li45OTE5MDc1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMKQEAgLTE2LDYgKzE2LDcgQEAKICAqIGNvbnRlbnQgb2YgdGhlIHNjdHBBc3NvY1RhYmxlIAogICovCiBzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnNjdHBBc3NvY1RhYmxlX2NvbnRhaW5lcjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjdHBBc3NvY1RhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMzAsNyArMzEsNyBAQAogdm9pZAogc2h1dGRvd25fc2N0cEFzc29jVGFibGUodm9pZCkKIHsKLSAgICBzY3RwQXNzb2NUYWJsZV9jb250YWluZXJfY2xlYXIoc2N0cEFzc29jVGFibGVfY29udGFpbmVyKTsKKyAgICBzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NUYWJsZSgpOwogfQogCiAvKiogSW5pdGlhbGl6ZSB0aGUgc2N0cEFzc29jVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCkBAIC00Myw3ICs0NCw2IEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0gTlVMTDsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKICAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGUgPSBOVUxMOwogCiAgICAgcmVnID0KQEAgLTEyMCw2ICsxMjAsOCBAQAogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCisgICAgbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUoaGFuZGxlcik7CisKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBoYW5kbGVyKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgaW5qZWN0aW5nIGNhY2hlIGhhbmRsZXIgZm9yIHNjdHBBc3NvY1RhYmxlXG4iKTsKQEAgLTEzMyw2ICsxMzUsNyBAQAogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciBzY3RwQXNzb2NUYWJsZVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCkBAIC0xNTEsNiArMTU0LDEyIEBACiAgICAgaWYgKGhhbmRsZXIpCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOwogCisgICAgaWYgKGNhY2hlKQorICAgICAgICBuZXRzbm1wX2NhY2hlX2ZyZWUoY2FjaGUpOworCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwogICAgIGlmIChjb250YWluZXIpCiAgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CiAKQEAgLTE1OCw2ICsxNjcsMTcgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3RhYmxlX3NjdHBBc3NvY1RhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorICAgIGlmIChzY3RwQXNzb2NUYWJsZV9jb250YWluZXIpCisJc2N0cEFzc29jVGFibGVfY29udGFpbmVyX2NsZWFyKHNjdHBBc3NvY1RhYmxlX2NvbnRhaW5lcik7Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY3RwQXNzb2NUYWJsZSB0YWJsZSAqLwogaW50CkBAIC00ODcsOCArNTA3LDcgQEAKIHZvaWQKIHNjdHBBc3NvY1RhYmxlX2VudHJ5X2ZyZWUoc2N0cEFzc29jVGFibGVfZW50cnkgKiBlbnRyeSkKIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiBuZXRzbm1wX2NvbnRhaW5lciAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaAppbmRleCBhNmE5ZjNjLi5jNjI1N2IwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIHZvaWQgICAgICAgICAgICBpbml0X3NjdHBBc3NvY1RhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjdHBBc3NvY1RhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfc2N0cEFzc29jVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfc2N0cEFzc29jVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY3RwQXNzb2NUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYwppbmRleCBiNzk4YjdlLi4xYTZmZDM1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgInNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oIgogCiBzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZV9jb250YWluZXI7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yNCw4ICsyNSw3IEBACiB2b2lkCiBzaHV0ZG93bl9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUodm9pZCkKIHsKLSAgICBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVfY29udGFpbmVyX2NsZWFyCi0gICAgICAgIChzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVfY29udGFpbmVyKTsKKyAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUoKTsKIH0KIAogLyoqIEluaXRpYWxpemUgdGhlIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KQEAgLTM5LDcgKzM5LDYgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPSBOVUxMOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOwogICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOwogCiAgICAgcmVnID0KICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSIsCkBAIC05OCw2ICs5Nyw3IEBACiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCkBAIC0xMTYsNiArMTE2LDggQEAKICAgICBpZiAoaGFuZGxlcikKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CiAKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOwogCiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKQEAgLTEyNCw2ICsxMjYsMTYgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3RhYmxlX3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KKyAgICBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVfY29udGFpbmVyX2NsZWFyCisgICAgICAgIChzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVfY29udGFpbmVyKTsKK30KIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGUgdGFibGUgKi8KIGludApAQCAtMjQ2LDggKzI1OCw3IEBACiB2b2lkCiBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVfZW50cnlfZnJlZShzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVfZW50cnkgKiBlbnRyeSkKIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiBuZXRzbm1wX2NvbnRhaW5lciAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oCmluZGV4IDlkYTZjZDkuLjIyNmMxNjggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oCkBAIC0xMyw2ICsxMyw3IEBACiB2b2lkICAgICAgICAgICAgaW5pdF9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMKaW5kZXggZWQxYjg0OS4uYWUyZWM5MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAic2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaCIKIAogc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9jb250YWluZXI7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTI0LDggKzI1LDcgQEAKIHZvaWQKIHNodXRkb3duX3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlKHZvaWQpCiB7Ci0gICAgc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfY29udGFpbmVyX2NsZWFyCi0gICAgICAgIChzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9jb250YWluZXIpOworICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlKCk7CiB9CiAKIC8qKiBJbml0aWFsaXplIHRoZSBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KQEAgLTM5LDcgKzM5LDYgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPSBOVUxMOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOwogICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOwogCiAgICAgcmVnID0KICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlIiwKQEAgLTEwMCw2ICs5OSw3IEBACiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKQEAgLTExOCw2ICsxMTgsOSBAQAogICAgIGlmIChoYW5kbGVyKQogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKIAorICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwogCkBAIC0xMjUsNiArMTI4LDE3IEBACiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCit2b2lkCitzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9CisgICAgc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfY29udGFpbmVyX2NsZWFyCisgICAgICAgIChzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9jb250YWluZXIpOworfQorCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlIHRhYmxlICovCiBpbnQKIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTI0OSw4ICsyNjMsNyBAQAogc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfZW50cnlfZnJlZShzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9lbnRyeSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5KQogewotICAgIGlmIChlbnRyeSAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIG5ldHNubXBfY29udGFpbmVyICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oCmluZGV4IDQ4NGNiNTguLjViZDNjNDggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaApAQCAtMTMsNiArMTMsNyBAQAogdm9pZCAgICAgICAgICAgIGluaXRfc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jCmluZGV4IGZiN2ZmNGIuLjM2OGRkNTEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAic2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgiCiAKIHN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2NvbnRhaW5lcjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTI0LDggKzI1LDcgQEAKIHZvaWQKIHNodXRkb3duX3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSh2b2lkKQogewotICAgIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9jb250YWluZXJfY2xlYXIKLSAgICAgICAgKHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9jb250YWluZXIpOworICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSgpOwogfQogCiAvKiogSW5pdGlhbGl6ZSB0aGUgc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwpAQCAtMzksNyArMzksNiBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9IE5VTEw7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CiAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IE5VTEw7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CiAKICAgICByZWcgPQogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic2N0cExvb2t1cFJlbUlQQWRkclRhYmxlIiwKQEAgLTk5LDYgKzk4LDcgQEAKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3Igc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKQEAgLTExMiw2ICsxMTIsOCBAQAogICAgIGlmIChoYW5kbGVyKQogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKIAorICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CiAKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwpAQCAtMTIwLDYgKzEyMiwxNyBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAordm9pZAorc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KKyAgICBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfY29udGFpbmVyX2NsZWFyCisgICAgICAgIChzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfY29udGFpbmVyKTsKK30KKwogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGUgdGFibGUgKi8KIGludAogc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTI1MCw4ICsyNjMsNyBAQAogdm9pZAogc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2VudHJ5X2ZyZWUoc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2VudHJ5ICogZW50cnkpCiB7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KIAogbmV0c25tcF9jb250YWluZXIgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaAppbmRleCBlMzE1ZDZkLi5iNzQ1MTRjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaApAQCAtMTMsNiArMTMsNyBAQAogdm9pZCAgICAgICAgICAgIGluaXRfc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYwppbmRleCBiMDYyMDVjLi5jOGE4ODc0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAic2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oIgogCiBzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnNjdHBMb29rdXBSZW1Qb3J0VGFibGVfY29udGFpbmVyOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgc2N0cExvb2t1cFJlbVBvcnRUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTI0LDggKzI1LDcgQEAKIHZvaWQKIHNodXRkb3duX3NjdHBMb29rdXBSZW1Qb3J0VGFibGUodm9pZCkKIHsKLSAgICBzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2NvbnRhaW5lcl9jbGVhcgotICAgICAgICAoc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9jb250YWluZXIpOworICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1Qb3J0VGFibGUoKTsKIH0KIAogLyoqIEluaXRpYWxpemUgdGhlIHNjdHBMb29rdXBSZW1Qb3J0VGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCkBAIC0zOSw3ICszOSw2IEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0gTlVMTDsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKIAogICAgIHJlZyA9CiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzY3RwTG9va3VwUmVtUG9ydFRhYmxlIiwKQEAgLTk4LDYgKzk3LDcgQEAKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3Igc2N0cExvb2t1cFJlbVBvcnRUYWJsZVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCkBAIC0xMTEsNiArMTExLDggQEAKICAgICBpZiAoaGFuZGxlcikKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CiAKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOwogCiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKQEAgLTExOSw2ICsxMjEsMTcgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1Qb3J0VGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9CisgICAgc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9jb250YWluZXJfY2xlYXIKKyAgICAgICAgKHNjdHBMb29rdXBSZW1Qb3J0VGFibGVfY29udGFpbmVyKTsKK30KKwogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY3RwTG9va3VwUmVtUG9ydFRhYmxlIHRhYmxlICovCiBpbnQKIHNjdHBMb29rdXBSZW1Qb3J0VGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtMjQwLDggKzI1Myw3IEBACiB2b2lkCiBzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2VudHJ5X2ZyZWUoc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9lbnRyeSAqIGVudHJ5KQogewotICAgIGlmIChlbnRyeSAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIG5ldHNubXBfY29udGFpbmVyICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaAppbmRleCA5NmQ0OWNlLi5iMmFjODExIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oCkBAIC0xMyw2ICsxMyw3IEBACiB2b2lkICAgICAgICAgICAgaW5pdF9zY3RwTG9va3VwUmVtUG9ydFRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjdHBMb29rdXBSZW1Qb3J0VGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9zY3RwTG9va3VwUmVtUG9ydFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1Qb3J0VGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMKaW5kZXggNDQyZTIwNy4uZDk5NjZmYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgInNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaCIKIAogc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2NvbnRhaW5lcjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yNCw4ICsyNSw3IEBACiB2b2lkCiBzaHV0ZG93bl9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlKHZvaWQpCiB7Ci0gICAgc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9jb250YWluZXJfY2xlYXIKLSAgICAgICAgKHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfY29udGFpbmVyKTsKKyAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlKCk7CiB9CiAKIC8qKiBJbml0aWFsaXplIHRoZSBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwpAQCAtMzksNyArMzksNiBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9IE5VTEw7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CiAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IE5VTEw7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CiAKICAgICByZWcgPQogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSIsCkBAIC0xMDAsNiArOTksNyBAQAogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAKQEAgLTExMyw2ICsxMTMsOCBAQAogICAgIGlmIChoYW5kbGVyKQogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKIAorICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CiAKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwpAQCAtMTIxLDYgKzEyMywxNyBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAordm9pZAorc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9CisgICAgc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9jb250YWluZXJfY2xlYXIKKyAgICAgICAgKHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfY29udGFpbmVyKTsKK30KKwogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlIHRhYmxlICovCiBpbnQKIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtMjU1LDggKzI2OCw3IEBACiBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2VudHJ5X2ZyZWUoc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9lbnRyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZW50cnkpCiB7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KIAogbmV0c25tcF9jb250YWluZXIgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oCmluZGV4IGFhYTVhMGIuLmYzYmVjZGMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIHZvaWQgICAgICAgICAgICBpbml0X3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5jCmluZGV4IDAzNmY0MGMuLjgyMTA3OWEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuYwpAQCAtMTgsNiArMTgsNyBAQAogewogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm9fc3RhdHM7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mb19wYXJhbXM7CisgICAgaW50IHJjOwogCiAgICAgREVCVUdNU0dUTCgoInNjdHA6c2NhbGFyczppbml0IiwgIkluaXRpYWxpemluZ1xuIikpOwogCkBAIC0yNyw4ICsyOCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX3N0YXRzX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzY3RwX3N0YXRzX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChyZWdpbmZvX3N0YXRzLCBTQ1RQX0NVUlJFU1RBQiwKKyAgICBpZiAoIXJlZ2luZm9fc3RhdHMpCisgICAgICAgIHJldHVybjsKKworICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAocmVnaW5mb19zdGF0cywgU0NUUF9DVVJSRVNUQUIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ESVNDT05USU5VSVRZVElNRSk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvX3N0YXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNDVFBfU1RBVFNfQ0FDSEVfVElNRU9VVCwKQEAgLTQzLDggKzUwLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfcGFyYW1zX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzY3RwX3BhcmFtc19vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAocmVnaW5mb19wYXJhbXMsIFNDVFBfUlRPQUxHT1JJVEhNLAorICAgIGlmICghcmVnaW5mb19wYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAocmVnaW5mb19wYXJhbXMsIFNDVFBfUlRPQUxHT1JJVEhNLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTUFYSU5JVFJFVFIpOworICAgIGlmICghcmMpCisgICAgICAgIHJldHVybjsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm9fcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNDVFBfUEFSQU1TX0NBQ0hFX1RJTUVPVVQsCkBAIC02NSw3ICs3Nyw2IEBACiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpyZXF1ZXN0dmI7CiAgICAgaW50ICAgICAgICAgICAgIHN1YmlkOwotICAgIGludCAgICAgICAgICAgICByZXQ7CiAKICAgICBERUJVR01TR1RMKCgic2N0cDpzY2FsYXJzOnN0YXRzIiwgIkhhbmRsZXIgLSBtb2RlICVzXG4iLAogICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSkpOwpAQCAtMjE1LDcgKzIyNiw2IEBACiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpyZXF1ZXN0dmI7CiAgICAgaW50ICAgICAgICAgICAgIHN1YmlkOwotICAgIGludCAgICAgICAgICAgICByZXQ7CiAKICAgICBERUJVR01TR1RMKCgic2N0cDpzY2FsYXJzOnBhcmFtcyIsICJIYW5kbGVyIC0gbW9kZSAlc1xuIiwKICAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSkpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oCmluZGV4IDI1YjE4N2EuLjhkYmI4YjUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaApAQCAtNyw2ICs3LDEwIEBACiBjb25maWdfcmVxdWlyZShzY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24pCiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgpCisjZWxpZiBkZWZpbmVkKCBmcmVlYnNkOCApIHx8IGRlZmluZWQgKCBmcmVlYnNkNyApCitjb25maWdfcmVxdWlyZShzY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkKQkgCisjZWxpZiBkZWZpbmVkKCBzb2xhcmlzMiApCitjb25maWdfcmVxdWlyZShzY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMikJIAogI2Vsc2UKIC8qCiAgKiBjb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgZmlsZSEKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMKaW5kZXggNWE5ZWUzNC4uMmE4OTVhOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmMKQEAgLTgsNyArOCw2IEBACiBzdGF0aWMgbmV0c25tcF9zY3RwX3N0YXRzIHByZXZfc2N0cF9zdGF0czsKIAogbmV0c25tcF9zY3RwX3BhcmFtcyBzY3RwX3BhcmFtczsKLXN0YXRpYyBuZXRzbm1wX3NjdHBfcGFyYW1zIHByZXZfc2N0cF9wYXJhbXM7CiAKIHN0YXRpYyBpbnQgICAgICBuZWVkX3dyYXBfY2hlY2sgPSAxOwogCkBAIC01NSw0NiArNTQsNzUgQEAKICAgICAvKgogICAgICAqIFVwZGF0ZSA2NCBiaXQgY291bnRlcnMKICAgICAgKi8KLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMub3V0X2N0cmxfY2h1bmtzLAorICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5vdXRfY3RybF9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMub3V0X2N0cmxfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLm91dF9jdHJsX2NodW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLm91dF9vcmRlcl9jaHVua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwT3V0Q3RybENodW5rcyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5vdXRfb3JkZXJfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLm91dF9vcmRlcl9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMub3V0X29yZGVyX2NodW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLm91dF91bm9yZGVyX2NodW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBPdXRPcmRlckNodW5rcyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5vdXRfdW5vcmRlcl9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMub3V0X3Vub3JkZXJfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLm91dF91bm9yZGVyX2NodW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmluX2N0cmxfY2h1bmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cE91dFVub3JkZXJDaHVua3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuaW5fY3RybF9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMuaW5fY3RybF9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMuaW5fY3RybF9jaHVua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5pbl9vcmRlcl9jaHVua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwSW5DdHJsQ2h1bmtzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmluX29yZGVyX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5pbl9vcmRlcl9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMuaW5fb3JkZXJfY2h1bmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuaW5fdW5vcmRlcl9jaHVua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwSW5PcmRlckNodW5rcyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5pbl91bm9yZGVyX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5pbl91bm9yZGVyX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5pbl91bm9yZGVyX2NodW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmZyYWdfdXNyX21zZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwSW5Vbm9yZGVyQ2h1bmtzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmZyYWdfdXNyX21zZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMuZnJhZ191c3JfbXNncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5mcmFnX3Vzcl9tc2dzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMucmVhc21fdXNyX21zZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwRnJhZ1Vzck1zZ3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMucmVhc21fdXNyX21zZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMucmVhc21fdXNyX21zZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMucmVhc21fdXNyX21zZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5vdXRfc2N0cF9wYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBSZWFzbVVzck1zZ3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMub3V0X3NjdHBfcGFja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMub3V0X3NjdHBfcGFja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMub3V0X3NjdHBfcGFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5pbl9zY3RwX3BhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cE91dFNDVFBQYWNrcyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5pbl9zY3RwX3BhY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLmluX3NjdHBfcGFja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMuaW5fc2N0cF9wYWNrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwSW5TQ1RQUGFja3MgdG8gNjRiaXRzXG4iKSk7CiAKICAgICAvKgogICAgICAqIFVwZGF0ZSBwcmV2X3N0YXRzIGZvciBuZXh0IGNvbXB1dGF0aW9uLgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzcyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmMKQEAgLTAsMCArMSw5MyBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgInNjdHBTY2FsYXJzX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKwordm9pZAorbmV0c25tcF9hY2Nlc3Nfc2N0cF9zdGF0c19hcmNoX2luaXQoKQoreworfQorCitpbnQKK25ldHNubXBfYWNjZXNzX3NjdHBfc3RhdHNfYXJjaF9sb2FkKG5ldHNubXBfc2N0cF9zdGF0cyAqIHNjdHBfc3RhdHMpCit7CisgIHN0cnVjdCBzY3Rwc3RhdCBzdGF0OworICBzaXplX3QgbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCk7CisKKyAgaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuc2N0cC5zdGF0cyIsICZzdGF0LCAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwlyZXR1cm4oLTEpOworICB9CisgIG1lbXNldChzY3RwX3N0YXRzLCAwLCBzaXplb2YobmV0c25tcF9zY3RwX3N0YXRzKSk7CisgIHNjdHBfc3RhdHMtPmN1cnJfZXN0YWIgPSBzdGF0LnNjdHBzX2N1cnJlc3RhYjsKKyAgc2N0cF9zdGF0cy0+YWN0aXZlX2VzdGFicyA9IHN0YXQuc2N0cHNfYWN0aXZlZXN0YWI7CisgIHNjdHBfc3RhdHMtPnBhc3NpdmVfZXN0YWJzID0gc3RhdC5zY3Rwc19wYXNzaXZlZXN0YWI7CisgIHNjdHBfc3RhdHMtPmFib3J0ZWRzID0gc3RhdC5zY3Rwc19hYm9ydGVkOworICBzY3RwX3N0YXRzLT5zaHV0ZG93bnMgPSBzdGF0LnNjdHBzX3NodXRkb3duOworICBzY3RwX3N0YXRzLT5vdXRfb2ZfYmx1ZXMgPSBzdGF0LnNjdHBzX291dG9mdGhlYmx1ZTsKKyAgc2N0cF9zdGF0cy0+Y2hlY2tzdW1fZXJyb3JzID0gc3RhdC5zY3Rwc19jaGVja3N1bWVycm9yczsKKyAgc2N0cF9zdGF0cy0+b3V0X2N0cmxfY2h1bmtzLmxvdyA9IHN0YXQuc2N0cHNfb3V0Y29udHJvbGNodW5rczsKKyAgc2N0cF9zdGF0cy0+b3V0X29yZGVyX2NodW5rcy5sb3cgPSBzdGF0LnNjdHBzX291dG9yZGVyY2h1bmtzOworICBzY3RwX3N0YXRzLT5vdXRfdW5vcmRlcl9jaHVua3MubG93ID0gc3RhdC5zY3Rwc19vdXR1bm9yZGVyY2h1bmtzOworICBzY3RwX3N0YXRzLT5pbl9jdHJsX2NodW5rcy5sb3cgPSBzdGF0LnNjdHBzX2luY29udHJvbGNodW5rczsKKyAgc2N0cF9zdGF0cy0+aW5fb3JkZXJfY2h1bmtzLmxvdyA9IHN0YXQuc2N0cHNfaW5vcmRlcmNodW5rczsKKyAgc2N0cF9zdGF0cy0+aW5fdW5vcmRlcl9jaHVua3MubG93ID0gc3RhdC5zY3Rwc19pbnVub3JkZXJjaHVua3M7CisgIHNjdHBfc3RhdHMtPmZyYWdfdXNyX21zZ3MubG93ID0gc3RhdC5zY3Rwc19mcmFndXNybXNnczsKKyAgc2N0cF9zdGF0cy0+cmVhc21fdXNyX21zZ3MubG93ID0gc3RhdC5zY3Rwc19yZWFzbXVzcm1zZ3M7CisgIHNjdHBfc3RhdHMtPm91dF9zY3RwX3BhY2tzLmxvdyA9IHN0YXQuc2N0cHNfb3V0cGFja2V0czsKKyAgc2N0cF9zdGF0cy0+aW5fc2N0cF9wYWNrcy5sb3cgPSBzdGF0LnNjdHBzX2lucGFja2V0czsKKyAgc2N0cF9zdGF0cy0+ZGlzY29udGludWl0eV90aW1lID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3NjdHBfcGFyYW1zX2FyY2hfaW5pdCgpCit7Cit9CisKK2ludAorbmV0c25tcF9hY2Nlc3Nfc2N0cF9wYXJhbXNfYXJjaF9sb2FkKG5ldHNubXBfc2N0cF9wYXJhbXMgKiBzY3RwX3BhcmFtcykKK3sKKwlzaXplX3QgbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKKworICAgIHNjdHBfcGFyYW1zLT5ydG9fYWxnb3JpdGhtID0gTkVUU05NUF9TQ1RQX0FMR09SSVRITV9WQU5KOworICAgIHNjdHBfcGFyYW1zLT5tYXhfYXNzb2NzID0gIFNDVFBfTUFYX05VTV9PRl9BU09DOyAKKwlpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5zY3RwLnJ0b19tYXgiLAorCQkJCQkgJnNjdHBfcGFyYW1zLT5ydG9fbWF4LAorCQkJCQkgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJICByZXR1cm4oLTEpOworCX0KKwlpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5zY3RwLnJ0b19taW4iLAorCQkJCQkgJnNjdHBfcGFyYW1zLT5ydG9fbWluLAorCQkJCQkgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJICByZXR1cm4oLTEpOworCX0KKwlpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5zY3RwLnJ0b19pbml0aWFsIiwKKwkJCQkJICZzY3RwX3BhcmFtcy0+cnRvX2luaXRpYWwsCisJCQkJCSAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwkgIHJldHVybigtMSk7CisJfQorCWlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnNjdHAudmFsaWRfY29va2llX2xpZmUiLAorCQkJCQkgJnNjdHBfcGFyYW1zLT52YWxfY29va2llX2xpZmUsCisJCQkJCSAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwkgIHJldHVybigtMSk7CisJfQorCWlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnNjdHAuaW5pdF9ydHhfbWF4IiwKKwkJCQkJICZzY3RwX3BhcmFtcy0+bWF4X2luaXRfcmV0ciwKKwkJCQkJICZsZW4sIE5VTEwsIDApIDwgMCkgeworCSAgcmV0dXJuKC0xKTsKKwl9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXguYwppbmRleCAxMTU3M2MzLi42ZGE1YTZiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmMKQEAgLTE0Myw4ICsxNDMsOCBAQAogICAgICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNjdHA6c2NhbGFyczpzdGF0czphcmNoX2xvYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gZW50cnk6ICVzXG4iLCBsaW5lKSk7Ci0gICAgICAgICAgICAvLyBmY2xvc2UoZik7Ci0gICAgICAgICAgICAvLyByZXR1cm4gcmV0OworICAgICAgICAgICAgLyogZmNsb3NlKGYpOyAqLworICAgICAgICAgICAgLyogcmV0dXJuIHJldDsgKi8KIAkgICAgcmV0ID0gMDsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWI1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5jCkBAIC0wLDAgKzEsOTUgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJzY3RwU2NhbGFyc19jb21tb24uaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8aW5ldC9taWIyLmg+CisKKyNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3NjdHBfc3RhdHNfYXJjaF9pbml0KCkKK3sKK30KKworaW50CituZXRzbm1wX2FjY2Vzc19zY3RwX3N0YXRzX2FyY2hfbG9hZChuZXRzbm1wX3NjdHBfc3RhdHMgKiBzY3RwX3N0YXRzKQoreworICAgIG1pYjJfc2N0cF90IHNjdHBzdGF0OworICAgIHNpemVfdCBsZW4gPSBzaXplb2Yoc2N0cHN0YXQpOworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBnZXRNaWJzdGF0KE1JQl9TQ1RQLCAmc2N0cHN0YXQsIGxlbiwgR0VUX0ZJUlNULCAmR2V0X2V2ZXJ5dGhpbmcsIE5VTEwpOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCJnZXRNaWJzdGF0IE1JQl9TQ1RQIik7CisJcmV0dXJuIC0xOworICAgIH0KKyAgICBtZW1zZXQoc2N0cF9zdGF0cywgMCwgc2l6ZW9mKG5ldHNubXBfc2N0cF9zdGF0cykpOworICAgIHNjdHBfc3RhdHMtPmN1cnJfZXN0YWIgPSBzY3Rwc3RhdC5zY3RwQ3VyckVzdGFiOworICAgIHNjdHBfc3RhdHMtPmFjdGl2ZV9lc3RhYnMgPSBzY3Rwc3RhdC5zY3RwQWN0aXZlRXN0YWI7CisgICAgc2N0cF9zdGF0cy0+cGFzc2l2ZV9lc3RhYnMgPSBzY3Rwc3RhdC5zY3RwUGFzc2l2ZUVzdGFiOworICAgIHNjdHBfc3RhdHMtPmFib3J0ZWRzID0gc2N0cHN0YXQuc2N0cEFib3J0ZWQ7CisgICAgc2N0cF9zdGF0cy0+c2h1dGRvd25zID0gc2N0cHN0YXQuc2N0cFNodXRkb3duczsKKyAgICBzY3RwX3N0YXRzLT5vdXRfb2ZfYmx1ZXMgPSBzY3Rwc3RhdC5zY3RwT3V0T2ZCbHVlOworICAgIHNjdHBfc3RhdHMtPmNoZWNrc3VtX2Vycm9ycyA9IHNjdHBzdGF0LnNjdHBDaGVja3N1bUVycm9yOworICAgIHNjdHBfc3RhdHMtPm91dF9jdHJsX2NodW5rcy5sb3cgPSBzY3Rwc3RhdC5zY3RwT3V0Q3RybENodW5rcyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+b3V0X2N0cmxfY2h1bmtzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwT3V0Q3RybENodW5rcyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5vdXRfb3JkZXJfY2h1bmtzLmxvdyA9IHNjdHBzdGF0LnNjdHBPdXRPcmRlckNodW5rcyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+b3V0X29yZGVyX2NodW5rcy5oaWdoID0gc2N0cHN0YXQuc2N0cE91dE9yZGVyQ2h1bmtzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPm91dF91bm9yZGVyX2NodW5rcy5sb3cgPSBzY3Rwc3RhdC5zY3RwT3V0VW5vcmRlckNodW5rcyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+b3V0X3Vub3JkZXJfY2h1bmtzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwT3V0VW5vcmRlckNodW5rcyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5pbl9jdHJsX2NodW5rcy5sb3cgPSBzY3Rwc3RhdC5zY3RwSW5DdHJsQ2h1bmtzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5pbl9jdHJsX2NodW5rcy5oaWdoID0gc2N0cHN0YXQuc2N0cEluQ3RybENodW5rcyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5pbl9vcmRlcl9jaHVua3MubG93ID0gc2N0cHN0YXQuc2N0cEluT3JkZXJDaHVua3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPmluX29yZGVyX2NodW5rcy5oaWdoID0gc2N0cHN0YXQuc2N0cEluT3JkZXJDaHVua3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+aW5fdW5vcmRlcl9jaHVua3MubG93ID0gc2N0cHN0YXQuc2N0cEluVW5vcmRlckNodW5rcyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+aW5fdW5vcmRlcl9jaHVua3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBJblVub3JkZXJDaHVua3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+aW5fb3JkZXJfY2h1bmtzLmxvdyA9IHNjdHBzdGF0LnNjdHBJbk9yZGVyQ2h1bmtzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5pbl9vcmRlcl9jaHVua3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBJbk9yZGVyQ2h1bmtzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPmZyYWdfdXNyX21zZ3MubG93ID0gc2N0cHN0YXQuc2N0cEZyYWdVc3JNc2dzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5mcmFnX3Vzcl9tc2dzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwRnJhZ1Vzck1zZ3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+cmVhc21fdXNyX21zZ3MubG93ID0gc2N0cHN0YXQuc2N0cFJlYXNtVXNyTXNncyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+cmVhc21fdXNyX21zZ3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBSZWFzbVVzck1zZ3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+b3V0X3NjdHBfcGFja3MubG93ID0gc2N0cHN0YXQuc2N0cE91dFNDVFBQa3RzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5vdXRfc2N0cF9wYWNrcy5oaWdoID0gc2N0cHN0YXQuc2N0cE91dFNDVFBQa3RzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPmluX3NjdHBfcGFja3MubG93ID0gc2N0cHN0YXQuc2N0cEluU0NUUFBrdHMgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPmluX3NjdHBfcGFja3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBJblNDVFBQa3RzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPmRpc2NvbnRpbnVpdHlfdGltZSA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3NjdHBfcGFyYW1zX2FyY2hfaW5pdCgpCit7Cit9CisKK2ludAorbmV0c25tcF9hY2Nlc3Nfc2N0cF9wYXJhbXNfYXJjaF9sb2FkKG5ldHNubXBfc2N0cF9wYXJhbXMgKiBzY3RwX3BhcmFtcykKK3sKKyAgICBtaWIyX3NjdHBfdCBzY3Rwc3RhdDsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKHNjdHBzdGF0KTsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gZ2V0TWlic3RhdChNSUJfU0NUUCwgJnNjdHBzdGF0LCBsZW4sIEdFVF9GSVJTVCwgJkdldF9ldmVyeXRoaW5nLCBOVUxMKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIHNubXBfbG9nX3BlcnJvcigiZ2V0TWlic3RhdCBNSUJfU0NUUCIpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBzY3RwX3BhcmFtcy0+cnRvX2FsZ29yaXRobSA9IHNjdHBzdGF0LnNjdHBSdG9BbGdvcml0aG07CisgICAgc2N0cF9wYXJhbXMtPm1heF9hc3NvY3MgPSAgc2N0cHN0YXQuc2N0cE1heEFzc29jczsgCisgICAgc2N0cF9wYXJhbXMtPnJ0b19tYXggPSBzY3Rwc3RhdC5zY3RwUnRvTWF4OworICAgIHNjdHBfcGFyYW1zLT5ydG9fbWluID0gc2N0cHN0YXQuc2N0cFJ0b01pbjsKKyAgICBzY3RwX3BhcmFtcy0+cnRvX2luaXRpYWwgPSBzY3Rwc3RhdC5zY3RwUnRvSW5pdGlhbDsKKyAgICBzY3RwX3BhcmFtcy0+dmFsX2Nvb2tpZV9saWZlID0gc2N0cHN0YXQuc2N0cFZhbENvb2tpZUxpZmU7CisgICAgc2N0cF9wYXJhbXMtPm1heF9pbml0X3JldHIgPSBzY3Rwc3RhdC5zY3RwTWF4SW5pdFJldHI7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgKaW5kZXggNTQ0MTQ0YS4uZDIyYWVhMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaApAQCAtMTQsMTEgKzE0LDEyIEBACiBjb25maWdfcmVxdWlyZShzY3RwLW1pYi9zY3RwQXNzb2NUYWJsZSkKICNpZiBkZWZpbmVkKCBsaW51eCApCiBjb25maWdfcmVxdWlyZShzY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4KQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUpCisjZWxpZiBkZWZpbmVkKCBmcmVlYnNkNyApIHx8IGRlZmluZWQoIGZyZWVic2Q4ICkKK2NvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZCkKKyNlbGlmIGRlZmluZWQoIHNvbGFyaXMyICkKK2NvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIpCiAjZWxzZQotLyoKLSogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCi0qIHJlcXVpcmUgYSBib2d1cyBmaWxlIHRvIGdlbmVyYXRlIGFuIGVycm9yLgotKi8KLWNvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3RhYmxlcy11bmtub3duLWFyY2gpCitjb25maWdfZXJyb3IoU0NUUC1NSUIgaXMgbm90IGF2YWlsYWJsZSBpbiB0aWhzIGVudmlyb25tZW50KQogI2VuZGlmCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDVFBfVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jCmluZGV4IDIzNzY3OTUuLmIyOGVhMDMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMTIsNiArMTMsOCBAQAogI2luY2x1ZGUgInNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaCIKICNpbmNsdWRlICJzY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2xpZm8pCisKIHN0YXRpYyB2b2lkCiBzY3RwQXNzb2NUYWJsZV9jb2xsZWN0X2ludmFsaWQodm9pZCAqd2hhdCwgdm9pZCAqbWFnaWMpCiB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAppbmRleCBlYjdmOTkwLi5mNDU3NjA1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKQEAgLTEsNiArMSwxMCBAQAogI2lmbmRlZiBTQ1RQX1RBQkxFU19DT01NT05fSAogI2RlZmluZSBTQ1RQX1RBQkxFU19DT01NT05fSAogCisjaWYgZGVmaW5lZChmcmVlYnNkOCkgfHwgZGVmaW5lZChmcmVlYnNkNykKKyNkZWZpbmUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlIFNOTVBfRlJFRQorI2VuZGlmCisKICNkZWZpbmUgU0NUUF9JUEFERFJFU1NfU0laRSAxNgogI2RlZmluZSBTQ1RQX0hPU1ROQU1FX1NJWkUgMjU1CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2ZTlmNQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5jCkBAIC0wLDAgKzEsMjQ0IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAic2N0cEFzc29jVGFibGUuaCIKKyNpbmNsdWRlICJzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oIgorI2luY2x1ZGUgInNjdHBBc3NvY1JlbUFkZHJUYWJsZS5oIgorI2luY2x1ZGUgInNjdHBUYWJsZXNfY29tbW9uLmgiCisKKyNpbmNsdWRlIDx1dGlsX2Z1bmNzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgorCisKK3N0YXRpYyBpbnQKK3BhcnNlX2Fzc29jX2xvY2FsX2FkZHJlc3NlcyhzY3RwVGFibGVzX2NvbnRhaW5lcnMgKiBjb250YWluZXJzLAorCQkJCQkJCXN0cnVjdCB4c2N0cF9sYWRkciAqeGxhZGRyKQoreworICBpbnQgcmV0OworICBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9lbnRyeSAqZW50cnk7CisgIGVudHJ5ID0gc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfZW50cnlfY3JlYXRlKCk7CisgIGlmIChlbnRyeSA9PSBOVUxMKQorCXJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgZW50cnktPnNjdHBBc3NvY0lkID0gMDsKKyAgaWYgKHhsYWRkci0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCWVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJUeXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisJZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkcl9sZW4gPSA0OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyLAorCQkgICAmeGxhZGRyLT5hZGRyZXNzLnNpbi5zaW5fYWRkciwKKwkJICAgZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkcl9sZW4pOworICB9IGVsc2UgaWYgKHhsYWRkci0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwllbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworCWVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJfbGVuID0gMTY7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHIsCisJCSAgICZ4bGFkZHItPmFkZHJlc3Muc2luNi5zaW42X2FkZHIsCisJCSAgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJfbGVuKTsKKyAgfQorICBlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyU3RhcnRUaW1lID0geGxhZGRyLT5zdGFydF90aW1lLnR2X3NlYzsKKyAgcmV0ID0gc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfYWRkX29yX3VwZGF0ZShjb250YWluZXJzLT5zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSwKKwkJCQkJCQkJCQkJICBlbnRyeSk7CisgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKwlyZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgaW50CitwYXJzZV9hc3NvY194c3RjYihzY3RwVGFibGVzX2NvbnRhaW5lcnMgKiBjb250YWluZXJzLCBzdHJ1Y3QgeHNjdHBfdGNiICp4c3RjYikKK3sKKyAgaW50ICAgICAgICAgICAgIHJldDsKKyAgc2N0cEFzc29jVGFibGVfZW50cnkgKmVudHJ5OworCisgIGVudHJ5ID0gc2N0cEFzc29jVGFibGVfZW50cnlfY3JlYXRlKCk7CisgIGlmIChlbnRyeSA9PSBOVUxMKQorCXJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgc3dpdGNoICh4c3RjYi0+c3RhdGUpIHsKKyAgY2FzZSBTQ1RQX1NUQVRFX0lOVVNFOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0RFTEVURVRDQjsKKwlicmVhazsKKyAgY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0NPT0tJRVdBSVQ7CisJYnJlYWs7CisgIGNhc2UgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0NPT0tJRUVDSE9FRDsKKwlicmVhazsKKyAgY2FzZSBTQ1RQX1NUQVRFX09QRU46CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfRVNUQUJMSVNIRUQ7CisJYnJlYWs7CisgIGNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX1NIVVRET1dOU0VOVDsKKwlicmVhazsKKyAgY2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX1NIVVRET1dOUkVDRUlWRUQ7CisJYnJlYWs7CisgIGNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9TSFVURE9XTkFDS1NFTlQ7CisJYnJlYWs7CisgIGRlZmF1bHQ6CisgIGNhc2UgU0NUUF9TVEFURV9FTVBUWToKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9DTE9TRUQ7CisJYnJlYWs7CisgIH07CisgIGVudHJ5LT5zY3RwQXNzb2NIZWFydEJlYXRJbnRlcnZhbCA9IHhzdGNiLT5oZWFydGJlYXRfaW50ZXJ2YWw7CisgIGVudHJ5LT5zY3RwQXNzb2NJZCA9IDA7CisgIGVudHJ5LT5zY3RwQXNzb2NQcmltUHJvY2VzcyA9IHhzdGNiLT5wcmltYXJ5X3Byb2Nlc3M7CisgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbFBvcnQgPSB4c3RjYi0+bG9jYWxfcG9ydDsKKyAgZW50cnktPnNjdHBBc3NvY1JlbVBvcnQgPSB4c3RjYi0+cmVtb3RlX3BvcnQ7CisgIGVudHJ5LT5zY3RwQXNzb2NIZWFydEJlYXRJbnRlcnZhbCA9IHhzdGNiLT5oZWFydGJlYXRfaW50ZXJ2YWw7CisgIGVudHJ5LT5zY3RwQXNzb2NJblN0cmVhbXMgPSB4c3RjYi0+aW5fc3RyZWFtczsKKyAgZW50cnktPnNjdHBBc3NvY091dFN0cmVhbXMgPSB4c3RjYi0+b3V0X3N0cmVhbXM7CisgIGVudHJ5LT5zY3RwQXNzb2NNYXhSZXRyID0geHN0Y2ItPm1heF9ucl9yZXRyYW5zOworICBlbnRyeS0+c2N0cEFzc29jVDFleHBpcmVkcyA9IHhzdGNiLT5UMV9leHBpcmVyaWVzOworICBlbnRyeS0+c2N0cEFzc29jUnR4Q2h1bmtzID0geHN0Y2ItPnJldHJhbnNtaXR0ZWRfdHNuczsKKyAgZW50cnktPnNjdHBBc3NvY1QyZXhwaXJlZHMgPSB4c3RjYi0+VDJfZXhwaXJlcmllczsgCisgIGVudHJ5LT5zY3RwQXNzb2NSZW1Ib3N0TmFtZVswXSA9IDA7CisgIGVudHJ5LT5zY3RwQXNzb2NSZW1Ib3N0TmFtZV9sZW4gPSAwOworICBlbnRyeS0+c2N0cEFzc29jRGlzY29udGludWl0eVRpbWUgPSB4c3RjYi0+ZGlzY29udGludWl0eV90aW1lLnR2X3NlYzsKKyAgZW50cnktPnNjdHBBc3NvY1N0YXJ0VGltZSA9IHhzdGNiLT5zdGFydF90aW1lLnR2X3NlYzsJCisKKyAgcmV0ID0gc2N0cEFzc29jVGFibGVfYWRkX29yX3VwZGF0ZShjb250YWluZXJzLT5zY3RwQXNzb2NUYWJsZSwgZW50cnkpOworICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKwlyZXR1cm4gcmV0OworICB9CisKKyAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKworc3RhdGljIGludAorcGFyc2VfcmVtYWRkcl94cmFkZHIoc2N0cFRhYmxlc19jb250YWluZXJzICogY29udGFpbmVycywKKwkJCQkJIHN0cnVjdCB4c2N0cF9yYWRkciAqeHJhZGRyKQoreworICBpbnQgICAgICAgICAgICAgcmV0OworICBzY3RwQXNzb2NSZW1BZGRyVGFibGVfZW50cnkgKmVudHJ5OworCisgIGVudHJ5ID0gc2N0cEFzc29jUmVtQWRkclRhYmxlX2VudHJ5X2NyZWF0ZSgpOworICBpZiAoZW50cnkgPT0gTlVMTCkKKwlyZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisJCisgIGVudHJ5LT5zY3RwQXNzb2NJZCA9IDA7CisKKyAgaWYoeHJhZGRyLT5hY3RpdmUpIAorICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyQWN0aXZlID0gVFJVVEhWQUxVRV9UUlVFOworICBlbHNlCisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJBY3RpdmUgPSBUUlVUSFZBTFVFX0ZBTFNFOworICAKKyAgaWYgKHhyYWRkci0+aGVhcnRiZWF0X2VuYWJsZWQpIAorCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRySEJBY3RpdmUgPSBUUlVUSFZBTFVFX1RSVUU7CisgIGVsc2UKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkckhCQWN0aXZlID0gVFJVVEhWQUxVRV9GQUxTRTsKKworICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkclJUTyA9IHhyYWRkci0+cnRvOworICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkck1heFBhdGhSdHggPSB4cmFkZHItPm1heF9wYXRoX3J0eDsKKyAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJSdHggPSB4cmFkZHItPnJ0eDsKKyAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJTdGFydFRpbWUgPSB4cmFkZHItPnN0YXJ0X3RpbWUudHZfc2VjOworCisgIGlmICh4cmFkZHItPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkclR5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNDsKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkcl9sZW4gPSA0OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jUmVtQWRkciwKKwkJICAgJnhyYWRkci0+YWRkcmVzcy5zaW4uc2luX2FkZHIsCisJCSAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyX2xlbik7CisgIH0gZWxzZSBpZiAoeHJhZGRyLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyX2xlbiA9IDE2OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jUmVtQWRkciwKKwkJICAgJnhyYWRkci0+YWRkcmVzcy5zaW42LnNpbjZfYWRkciwKKwkJICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJfbGVuKTsKKyAgfQorICByZXQgPQorCXNjdHBBc3NvY1JlbUFkZHJUYWJsZV9hZGRfb3JfdXBkYXRlKGNvbnRhaW5lcnMtPgorCQkJCQkJCQkJCXNjdHBBc3NvY1JlbUFkZHJUYWJsZSwgZW50cnkpOworICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKwlyZXR1cm4gcmV0OworICB9CisgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisKK2ludAorc2N0cFRhYmxlc19hcmNoX2xvYWQoc2N0cFRhYmxlc19jb250YWluZXJzICogY29udGFpbmVycywgdV9sb25nICogZmxhZ3MpCit7CisgIGludCAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT0VSUk9SOworICBzaXplX3QgbGVuOworICBjYWRkcl90IGJ1ZjsKKyAgdW5zaWduZWQgaW50IG9mZnNldDsKKyAgc3RydWN0IHhzY3RwX2lucGNiICp4aW5wOworICBzdHJ1Y3QgeHNjdHBfdGNiICp4c3RjYjsKKyAgc3RydWN0IHhzY3RwX2xhZGRyICp4bGFkZHI7CisgIHN0cnVjdCB4c2N0cF9yYWRkciAqeHJhZGRyOworCisKKyAgKmZsYWdzIHw9IFNDVFBfVEFCTEVTX0xPQURfRkxBR19ERUxFVEVfSU5WQUxJRDsKKyAgKmZsYWdzIHw9IFNDVFBfVEFCTEVTX0xPQURfRkxBR19BVVRPX0xPT0tVUDsKKyAgbGVuID0gMDsKKyAgaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuc2N0cC5hc3NvY2xpc3QiLCAwLCAmbGVuLCAwLCAwKSA8IDApIHsKKwlwcmludGYoIkVycm9yICVkICglcykgY291bGQgbm90IGdldCB0aGUgYXNzb2NsaXN0XG4iLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4oLTEpOworICB9CisgIGlmICgoYnVmID0gKGNhZGRyX3QpbWFsbG9jKGxlbikpID09IDApIHsKKwlwcmludGYoIm1hbGxvYyAlbHUgYnl0ZXMgZmFpbGVkLlxuIiwgKGxvbmcgdW5zaWduZWQpbGVuKTsKKwlyZXR1cm4oLTEpOworICB9CisgIGlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnNjdHAuYXNzb2NsaXN0IiwgYnVmLCAmbGVuLCAwLCAwKSA8IDApIHsKKwlwcmludGYoIkVycm9yICVkICglcykgY291bGQgbm90IGdldCB0aGUgYXNzb2NsaXN0XG4iLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuKC0xKTsKKyAgfQorICBvZmZzZXQgPSAwOworICB4aW5wID0gKHN0cnVjdCB4c2N0cF9pbnBjYiAqKShidWYgKyBvZmZzZXQpOworICB3aGlsZSAoeGlucC0+bGFzdCA9PSAwKSB7CisJLyogZm9yIGVhY2ggSU5QICovCisJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfaW5wY2IpOworCS8qIExvY2FsIGFkZHJlc3NlcyAqLworCXhsYWRkciA9IChzdHJ1Y3QgeHNjdHBfbGFkZHIgKikoYnVmICsgb2Zmc2V0KTsKKwl3aGlsZSAoeGxhZGRyLT5sYXN0ID09IDApIHsKKwkgIG9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKTsKKwkgIHhsYWRkciA9IChzdHJ1Y3QgeHNjdHBfbGFkZHIgKikoYnVmICsgb2Zmc2V0KTsKKwl9CisJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFkZHIpOworCS8qIEFzc29jaWF0aW9ucyAqLworCXhzdGNiID0gKHN0cnVjdCB4c2N0cF90Y2IgKikoYnVmICsgb2Zmc2V0KTsKKwl3aGlsZSAoeHN0Y2ItPmxhc3QgPT0gMCkgeworCSAgeHN0Y2IgPSAoc3RydWN0IHhzY3RwX3RjYiAqKShidWYgKyBvZmZzZXQpOworCSAgb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfdGNiKTsKKwkgIHBhcnNlX2Fzc29jX3hzdGNiKGNvbnRhaW5lcnMsIHhzdGNiKTsKKwkgIC8qIExvY2FsIGFkZHJlc3NlcyAqLworCSAgeGxhZGRyID0gKHN0cnVjdCB4c2N0cF9sYWRkciAqKShidWYgKyBvZmZzZXQpOworCSAgd2hpbGUgKHhsYWRkci0+bGFzdCA9PSAwKSB7CisJCXBhcnNlX2Fzc29jX2xvY2FsX2FkZHJlc3Nlcyhjb250YWluZXJzLCB4bGFkZHIpOworCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcik7CisJCXhsYWRkciA9IChzdHJ1Y3QgeHNjdHBfbGFkZHIgKikoYnVmICsgb2Zmc2V0KTsKKwkgIH0KKwkgIG9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKTsKKworCSAgLyogUmVtb3RlIGFkZHJlc3NlcyAqLworCSAgeHJhZGRyID0gKHN0cnVjdCB4c2N0cF9yYWRkciAqKShidWYgKyBvZmZzZXQpOworCSAgd2hpbGUgKHhyYWRkci0+bGFzdCA9PSAwKSB7CisJCXBhcnNlX3JlbWFkZHJfeHJhZGRyKGNvbnRhaW5lcnMsIHhyYWRkcik7CisJCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX3JhZGRyKTsKKwkJeHJhZGRyID0gKHN0cnVjdCB4c2N0cF9yYWRkciAqKShidWYgKyBvZmZzZXQpOworCSAgfQorCSAgb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfcmFkZHIpOworCSAgeHN0Y2IgPSAoc3RydWN0IHhzY3RwX3RjYiAqKShidWYgKyBvZmZzZXQpOworCX0KKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpOworCXhpbnAgPSAoc3RydWN0IHhzY3RwX2lucGNiICopKGJ1ZiArIG9mZnNldCk7CisgIH0KKyAgZnJlZSgodm9pZCAqKWJ1Zik7CisgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmMKaW5kZXggZDZmZDgxMC4uOGU2Mjg2MCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYwpAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlICJzY3RwQXNzb2NSZW1BZGRyVGFibGUuaCIKICNpbmNsdWRlICJzY3RwVGFibGVzX2NvbW1vbi5oIgogCi0jaW5jbHVkZSA8dXRpbF9mdW5jcy5oPgorI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgiCiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CkBAIC0xNTAsMTMgKzE1MCw3IEBACiAgICAgfQogICAgIGVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IHN0cnRvbCh0b2tlbiwgTlVMTCwgMTApOwogCi0gICAgdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiAiKTsgIC8qIEhCS1QgKi8KLSAgICBpZiAodG9rZW4gPT0gTlVMTCkgewotICAgICAgICByZXQgPSBTTk1QX0VSUl9HRU5FUlI7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIGVudHJ5LT5zY3RwQXNzb2NIZWFydEJlYXRJbnRlcnZhbCA9IHN0cnRvbCh0b2tlbiwgTlVMTCwgMTApOwotCisgICAgdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiAiKTsgIC8qIEhCS1QsIGlnbm9yZSAqLwogICAgIHRva2VuID0gc3RydG9rKE5VTEwsICIgIik7ICAvKiBBU1NPQy1JRCwgc3RvcmUgKi8KICAgICBpZiAodG9rZW4gPT0gTlVMTCkgewogICAgICAgICByZXQgPSBTTk1QX0VSUl9HRU5FUlI7CkBAIC0xNzQsNyArMTY4LDcgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaW5vZGUgPSBzdHJ0b3VsbCh0b2tlbiwgTlVMTCwgMTApOwotICAgIGVudHJ5LT5zY3RwQXNzb2NQcmltUHJvY2VzcyA9IGdldF9waWRfZnJvbV9pbm9kZShpbm9kZSk7CisgICAgZW50cnktPnNjdHBBc3NvY1ByaW1Qcm9jZXNzID0gbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGUoaW5vZGUpOwogCiAgICAgdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiAiKTsgIC8qIExQT1JUICovCiAgICAgaWYgKHRva2VuID09IE5VTEwpIHsKQEAgLTI4Nyw2ICsyODEsOCBAQAogICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KIAorICAgIG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlX2luaXQoKTsKKwogICAgIC8qCiAgICAgICogaWdub3JlIHRoZSBoZWFkZXIuIAogICAgICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTNhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmMKQEAgLTAsMCArMSwxODIgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJzY3RwQXNzb2NUYWJsZS5oIgorI2luY2x1ZGUgInNjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgiCisjaW5jbHVkZSAic2N0cEFzc29jUmVtQWRkclRhYmxlLmgiCisjaW5jbHVkZSAic2N0cFRhYmxlc19jb21tb24uaCIKKworI2luY2x1ZGUgPHV0aWxfZnVuY3MuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8aW5ldC9taWIyLmg+CisKKyNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisKK3N0YXRpYyBpbnQKK3BhcnNlX2Fzc29jX2xvY2FsX2FkZHJlc3Moc2N0cFRhYmxlc19jb250YWluZXJzICogY29udGFpbmVycywKKwkJCSAgICBtaWIyX3NjdHBDb25uTG9jYWxFbnRyeV90ICpsY2UpCit7CisgICAgaW50IHJldDsKKyAgICBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9lbnRyeSAqZW50cnk7CisgICAgZW50cnkgPSBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9lbnRyeV9jcmVhdGUoKTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkKKwlyZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgZW50cnktPnNjdHBBc3NvY0lkID0gMDsKKyAgICBlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyVHlwZSA9IGxjZS0+c2N0cEFzc29jTG9jYWxBZGRyVHlwZTsKKyAgICBpZiAobGNlLT5zY3RwQXNzb2NMb2NhbEFkZHJUeXBlID09IElORVRBRERSRVNTVFlQRV9JUFY0KSB7CisJZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkcl9sZW4gPSA0OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyLAorCQkgICBsY2UtPnNjdHBBc3NvY0xvY2FsQWRkci5zNl9hZGRyKzEyLAorCQkgICBlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyX2xlbik7CisgICAgfSBlbHNlIGlmIChsY2UtPnNjdHBBc3NvY0xvY2FsQWRkclR5cGUgPT0gSU5FVEFERFJFU1NUWVBFX0lQVjYpIHsKKwllbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyX2xlbiA9IDE2OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyLAorCQkgICAmbGNlLT5zY3RwQXNzb2NMb2NhbEFkZHIsCisJCSAgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJfbGVuKTsKKyAgICB9CisgICAgZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkclN0YXJ0VGltZSA9IDA7CisgICAgcmV0ID0gc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfYWRkX29yX3VwZGF0ZShjb250YWluZXJzLT5zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSwKKwkJCQkJICAgICAgZW50cnkpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlX2Fzc29jKHNjdHBUYWJsZXNfY29udGFpbmVycyAqIGNvbnRhaW5lcnMsIG1pYjJfc2N0cENvbm5FbnRyeV90ICpzY2UpCit7CisgICAgaW50ICAgICAgICAgICAgIHJldDsKKyAgICBzY3RwQXNzb2NUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBlbnRyeSA9IHNjdHBBc3NvY1RhYmxlX2VudHJ5X2NyZWF0ZSgpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorCXJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBzd2l0Y2ggKHNjZS0+c2N0cEFzc29jU3RhdGUpIHsKKyAgICBjYXNlIE1JQjJfU0NUUF9jbG9zZWQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfQ0xPU0VEOworCWJyZWFrOworICAgIGNhc2UgTUlCMl9TQ1RQX2Nvb2tpZVdhaXQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfQ09PS0lFV0FJVDsKKwlicmVhazsKKyAgICBjYXNlIE1JQjJfU0NUUF9jb29raWVFY2hvZWQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfQ09PS0lFRUNIT0VEOworCWJyZWFrOworICAgIGNhc2UgTUlCMl9TQ1RQX2VzdGFibGlzaGVkOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0VTVEFCTElTSEVEOworCWJyZWFrOworICAgIGNhc2UgTUlCMl9TQ1RQX3NodXRkb3duUGVuZGluZzoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9TSFVURE9XTlBFTkRJTkc7CisJYnJlYWs7CisgICAgY2FzZSBNSUIyX1NDVFBfc2h1dGRvd25TZW50OgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX1NIVVRET1dOU0VOVDsKKwlicmVhazsKKyAgICBjYXNlIE1JQjJfU0NUUF9zaHV0ZG93blJlY2VpdmVkOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX1NIVVRET1dOUkVDRUlWRUQ7CisJYnJlYWs7CisgICAgY2FzZSBNSUIyX1NDVFBfc2h1dGRvd25BY2tTZW50OgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX1NIVVRET1dOQUNLU0VOVDsKKwlicmVhazsKKyAgICB9CisgICAgZW50cnktPnNjdHBBc3NvY0hlYXJ0QmVhdEludGVydmFsID0gc2NlLT5zY3RwQXNzb2NIZWFydEJlYXRJbnRlcnZhbDsKKyAgICBlbnRyeS0+c2N0cEFzc29jSWQgPSBzY2UtPnNjdHBBc3NvY0lkOworICAgIGVudHJ5LT5zY3RwQXNzb2NQcmltUHJvY2VzcyA9IHNjZS0+c2N0cEFzc29jUHJpbVByb2Nlc3M7CisgICAgZW50cnktPnNjdHBBc3NvY0xvY2FsUG9ydCA9IHNjZS0+c2N0cEFzc29jTG9jYWxQb3J0OworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1QcmltQWRkclR5cGUgPSBzY2UtPnNjdHBBc3NvY1JlbVByaW1BZGRyVHlwZTsKKyAgICBpZiAoZW50cnktPnNjdHBBc3NvY1JlbVByaW1BZGRyVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfSVBWNCkgeworCWVudHJ5LT5zY3RwQXNzb2NSZW1QcmltQWRkcl9sZW4gPSA0OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jUmVtUHJpbUFkZHIsIHNjZS0+c2N0cEFzc29jUmVtUHJpbUFkZHIuczZfYWRkcisxMiwKKwkgICAgZW50cnktPnNjdHBBc3NvY1JlbVByaW1BZGRyX2xlbik7CisgICAgfQorICAgIGVsc2UgeworCWVudHJ5LT5zY3RwQXNzb2NSZW1QcmltQWRkcl9sZW4gPSAxNjsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY1JlbVByaW1BZGRyLCBzY2UtPnNjdHBBc3NvY1JlbVByaW1BZGRyLnM2X2FkZHIsCisJICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1QcmltQWRkcl9sZW4pOworICAgIH0KKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtUG9ydCA9IHNjZS0+c2N0cEFzc29jUmVtUG9ydDsKKyAgICBlbnRyeS0+c2N0cEFzc29jSW5TdHJlYW1zID0gc2NlLT5zY3RwQXNzb2NJblN0cmVhbXM7CisgICAgZW50cnktPnNjdHBBc3NvY091dFN0cmVhbXMgPSBzY2UtPnNjdHBBc3NvY091dFN0cmVhbXM7CisgICAgZW50cnktPnNjdHBBc3NvY01heFJldHIgPSBzY2UtPnNjdHBBc3NvY01heFJldHI7CisgICAgZW50cnktPnNjdHBBc3NvY1QxZXhwaXJlZHMgPSBzY2UtPnNjdHBBc3NvY1QxZXhwaXJlZDsKKyAgICBlbnRyeS0+c2N0cEFzc29jUnR4Q2h1bmtzID0gc2NlLT5zY3RwQXNzb2NSdHhDaHVua3M7CisgICAgZW50cnktPnNjdHBBc3NvY1QyZXhwaXJlZHMgPSBzY2UtPnNjdHBBc3NvY1QyZXhwaXJlZDsgCisgICAgZW50cnktPnNjdHBBc3NvY1JlbUhvc3ROYW1lWzBdID0gMDsKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtSG9zdE5hbWVfbGVuID0gMDsKKyAgICBlbnRyeS0+c2N0cEFzc29jRGlzY29udGludWl0eVRpbWUgPSAwOworICAgIGVudHJ5LT5zY3RwQXNzb2NTdGFydFRpbWUgPSBzY2UtPnNjdHBBc3NvY1N0YXJ0VGltZTsJCisKKyAgICByZXQgPSBzY3RwQXNzb2NUYWJsZV9hZGRfb3JfdXBkYXRlKGNvbnRhaW5lcnMtPnNjdHBBc3NvY1RhYmxlLCBlbnRyeSk7CisgICAgcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50CitwYXJzZV9hc3NvY19yZW1vdGVfYWRkcmVzcyhzY3RwVGFibGVzX2NvbnRhaW5lcnMgKiBjb250YWluZXJzLAorCQkgICAgbWliMl9zY3RwQ29ublJlbW90ZUVudHJ5X3QgKnJjZSkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmV0OworICAgIHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBlbnRyeSA9IHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9lbnRyeV9jcmVhdGUoKTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkKKwlyZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgZW50cnktPnNjdHBBc3NvY0lkID0gcmNlLT5zY3RwQXNzb2NJZDsKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkckFjdGl2ZSA9IHJjZS0+c2N0cEFzc29jUmVtQWRkckFjdGl2ZTsKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkckhCQWN0aXZlID0gcmNlLT5zY3RwQXNzb2NSZW1BZGRySEJBY3RpdmU7CisgICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJSVE8gPSByY2UtPnNjdHBBc3NvY1JlbUFkZHJSVE87CisgICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJNYXhQYXRoUnR4ID0gcmNlLT5zY3RwQXNzb2NSZW1BZGRyTWF4UGF0aFJ0eDsKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkclJ0eCA9IHJjZS0+c2N0cEFzc29jUmVtQWRkclJ0eDsKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkclN0YXJ0VGltZSA9IDA7CisKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkclR5cGUgPSByY2UtPnNjdHBBc3NvY1JlbUFkZHJUeXBlOworICAgIGlmIChyY2UtPnNjdHBBc3NvY1JlbUFkZHJUeXBlID09IElORVRBRERSRVNTVFlQRV9JUFY0KSB7CisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJfbGVuID0gNDsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY1JlbUFkZHIsCisJCSAgIHJjZS0+c2N0cEFzc29jUmVtQWRkci5zNl9hZGRyKzEyLAorCQkgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkcl9sZW4pOworICAgIH0gZWxzZSBpZiAocmNlLT5zY3RwQXNzb2NSZW1BZGRyVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfSVBWNikgeworCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyX2xlbiA9IDE2OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jUmVtQWRkciwKKwkJICAgJnJjZS0+c2N0cEFzc29jUmVtQWRkciwKKwkJICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJfbGVuKTsKKyAgICB9CisgICAgcmV0ID0KKwlzY3RwQXNzb2NSZW1BZGRyVGFibGVfYWRkX29yX3VwZGF0ZShjb250YWluZXJzLT5zY3RwQXNzb2NSZW1BZGRyVGFibGUsCisJCQkJCSAgICBlbnRyeSk7CisgICAgcmV0dXJuIHJldDsKK30KKworCitpbnQKK3NjdHBUYWJsZXNfYXJjaF9sb2FkKHNjdHBUYWJsZXNfY29udGFpbmVycyAqIGNvbnRhaW5lcnMsIHVfbG9uZyAqIGZsYWdzKQoreworICAgIGludCAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgIG1pYjJfc2N0cENvbm5FbnRyeV90IHNjZTsKKyAgICBtaWIyX3NjdHBDb25uTG9jYWxFbnRyeV90IGxjZTsKKyAgICBtaWIyX3NjdHBDb25uUmVtb3RlRW50cnlfdCByY2U7CisgICAgcmVxX2UgICAgICAgICAgICAgIHJlcSA9IEdFVF9GSVJTVDsKKworICAgIHdoaWxlIChnZXRNaWJzdGF0KE1JQl9TQ1RQX0NPTk4sICZzY2UsIHNpemVvZihzY2UpLCByZXEsICZHZXRfZXZlcnl0aGluZywgMCkgPT0gMCkgeworCXJlcSA9IEdFVF9ORVhUOworCXBhcnNlX2Fzc29jKGNvbnRhaW5lcnMsICZzY2UpOworICAgIH0KKyAgICByZXEgPSBHRVRfRklSU1Q7CisgICAgd2hpbGUgKGdldE1pYnN0YXQoTUlCX1NDVFBfQ09OTl9MT0NBTCwgJmxjZSwgc2l6ZW9mKGxjZSksIHJlcSwgJkdldF9ldmVyeXRoaW5nLCAwKSA9PSAwKSB7CisJcmVxID0gR0VUX05FWFQ7CisJcGFyc2VfYXNzb2NfbG9jYWxfYWRkcmVzcyhjb250YWluZXJzLCAmbGNlKTsKKyAgICB9CisgICAgcmVxID0gR0VUX0ZJUlNUOworICAgIHdoaWxlIChnZXRNaWJzdGF0KE1JQl9TQ1RQX0NPTk5fUkVNT1RFLCAmcmNlLCBzaXplb2YocmNlKSwgcmVxLCAmR2V0X2V2ZXJ5dGhpbmcsIDApID09IDApIHsKKwlyZXEgPSBHRVRfTkVYVDsKKwlwYXJzZV9hc3NvY19yZW1vdGVfYWRkcmVzcyhjb250YWluZXJzLCAmcmNlKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NtdXgvc211eC5jIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMKaW5kZXggNDAwNmJmNy4uNDU5OGMyYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIApAQCAtMjYsMTEgKzI3LDcgQEAKICNpbmNsdWRlIDxlcnIuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDcsOCArNDQsNiBAQAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZWxpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KICNlbmRpZgogI2lmIEhBVkVfU1lTX0ZJTElPX0gKICNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KQEAgLTcxLDEwICs2NiwxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KIAogI2luY2x1ZGUgInNtdXguaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAibWliZGVmcy5oIgogI2luY2x1ZGUgInNubXBkLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNucHJpbnRfb2JqaWQpCisKIGxvbmcgICAgICAgICAgICBzbXV4X2xvbmc7CiB1X2xvbmcgICAgICAgICAgc211eF91bG9uZzsKIHN0cnVjdCBzb2NrYWRkcl9pbiBzbXV4X3NhOwpAQCAtMTIyLDcgKzExOCw4IEBACiAgICAgLyoKICAgICAgKiBib2d1cyBlbnRyeSwgYXMgaW4gcGFzcy5jIAogICAgICAqLwotICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3NtdXgsIDAsIHtNSUJJTkRFWH19LAorICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3NtdXgsIDAsIHtNSUJJTkRFWH19LAogfTsKIAogCkBAIC0zNTAsNyArMzQ3LDggQEAKICAgICB1X2NoYXIgICAgICAgICAgYnVmW1NNVVhNQVhQS1RTSVpFXSwgKnB0ciwgc291dFszXSwgdHlwZTsKICAgICBpbnQgICAgICAgICAgICAgcmV0ZXJyOwogICAgIHNpemVfdCAgICAgICAgICB2YXJfbGVuLCBkYXRhbGVuLCBuYW1lX2xlbmd0aCwgcGFja2V0X2xlbjsKLSAgICBzc2l6ZV90ICAgICAgICAgbGVuLCB0bXBfbGVuOworICAgIHNpemVfdCAgICAgICAgICBsZW47CisgICAgc3NpemVfdCAgICAgICAgIHRtcF9sZW47CiAgICAgbG9uZyAgICAgICAgICAgIHJlcWlkLCBlcnJzdHMsIGVycmlkeDsKICAgICB1X2NoYXIgICAgICAgICAgKmRhdGFwdHI7CiAKQEAgLTQxOSw3ICs0MTcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzZW5kdG8ocnB0ci0+c3JfZmQsIGJ1ZiwgbGVuLCAwLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgaWYgKHNlbmR0byhycHRyLT5zcl9mZCwgKHZvaWQgKikgYnVmLCBsZW4sIDAsIE5VTEwsIDApIDwgMCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3Zhcl9zbXV4X3dyaXRlXSBzZW5kIGZhaWxlZFxuIikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgfQpAQCAtNDI4LDggKzQyNiw4IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogcGVlayBhdCB3aGF0J3MgcmVjZWl2ZWQgCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICgobGVuID0gcmVjdmZyb20ocnB0ci0+c3JfZmQsIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTVVYTUFYUEtUU0laRSwgTVNHX1BFRUssIE5VTEwsIDApKSA8PSAwKSB7CisgICAgICAgICAgICBpZiAoKGxlbiA9IHJlY3Zmcm9tKHJwdHItPnNyX2ZkLCAodm9pZCAqKSBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU01VWE1BWFBLVFNJWkUsIE1TR19QRUVLLCBOVUxMLCBOVUxMKSkgPD0gMCkgewogICAgICAgICAgICAgICAgIGlmICgobGVuID09IC0xKSAmJiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDQ0LDggKzQ0Miw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3Zhcl9zbXV4X3dyaXRlXSBQZWVrZWQgYXQgJWQgYnl0ZXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW4pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIlt2YXJfc211eF93cml0ZV0gUGVla2VkIGF0ICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAgICAgImQgYnl0ZXNcbiIsIGxlbikpOwogICAgICAgICAgICAgREVCVUdEVU1QU0VUVVAoInZhcl9zbXV4X3dyaXRlIiwgYnVmLCBsZW4pOwogCiAgICAgICAgICAgICAvKgpAQCAtNDY4LDcgKzQ2Niw3IEBACiAgICAgICAgICAgICBkbwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGVuID0gdG1wX2xlbjsKLSAgICAgICAgICAgICAgIGxlbiA9IHJlY3Zmcm9tKHJwdHItPnNyX2ZkLCBidWYsIGxlbiwgMCwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICBsZW4gPSByZWN2ZnJvbShycHRyLT5zcl9mZCwgKHZvaWQgKikgYnVmLCBsZW4sIDAsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgd2hpbGUoKGxlbiA9PSAtMSkgJiYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpKTsKIApAQCAtNDgwLDggKzQ3OCw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3Zhcl9zbXV4X3dyaXRlXSBSZWNlaXZlZCAlZCBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3Zhcl9zbXV4X3dyaXRlXSBSZWNlaXZlZCAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgICAgICJkIGJ5dGVzXG4iLCBsZW4pKTsKIAogICAgICAgICAgICAgaWYgKGJ1ZlswXSA9PSBTTVVYX1RSQVApIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbdmFyX3NtdXhfd3JpdGVdIFJlY2VpdmVkIHRyYXBcbiIpKTsKQEAgLTU1Miw3ICs1NTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIlt2YXJfc211eF93cml0ZV0gZW50ZXJpbmcgRlJFRSAtIHNlbmRpbmcgQ29tbWl0IFxuIikpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKChzZW5kdG8ocnB0ci0+c3JfZmQsIHNvdXQsIDMsIDAsIE5VTEwsIDApKSA8IDApIHsKKyAgICAgICAgaWYgKChzZW5kdG8ocnB0ci0+c3JfZmQsICh2b2lkICopIHNvdXQsIDMsIDAsIE5VTEwsIDApKSA8IDApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJbdmFyX3NtdXhfd3JpdGVdIHNlbmQgcm9sbGJhY2svY29tbWl0IGZhaWxlZFxuIikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKQEAgLTU3NCw5ICs1NzIsMTAgQEAKICAgICB1X2NoYXIgICAgICAgICAgZGF0YVtTTVVYTUFYUEtUU0laRV0sICpwdHIsIHR5cGU7CiAgICAgc3RydWN0IHNvY2thZGRyX2luIGluX3NvY2tldDsKICAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7Ci0gICAgaW50ICAgICAgICAgICAgIGZhaWwsIGZkLCBhbGVuOworICAgIGludCAgICAgICAgICAgICBmYWlsLCBmZDsKKyAgICBzb2NrbGVuX3QgICAgICAgYWxlbjsKICAgICBpbnQgICAgICAgICAgICAgbGVuZ3RoOwotICAgIHNzaXplX3QgICAgICAgICBsZW47CisgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKIAogICAgIGFsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKICAgICAvKgpAQCAtNjEwLDcgKzYwOSw3IEBACiAgICAgICAgICAqLwogICAgICAgICBkbwogICAgICAgICB7Ci0gICAgICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKGZkLCAoY2hhciAqKSBkYXRhLCBTTVVYTUFYUEtUU0laRSwgMCwgTlVMTCwgMCk7CisgICAgICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKGZkLCAoY2hhciAqKSBkYXRhLCBTTVVYTUFYUEtUU0laRSwgMCwgTlVMTCwgTlVMTCk7CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUoKGxlbmd0aCA9PSAtMSkgJiYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpKTsKIApAQCAtNjg4LDcgKzY4Nyw4IEBACiAKICAgICBkbwogICAgIHsKLSAgICAgICBsZW5ndGggPSByZWN2ZnJvbShmZCwgKGNoYXIgKikgZGF0YSwgU01VWE1BWFBLVFNJWkUsIE1TR19QRUVLLCBOVUxMLCAwKTsKKyAgICAgICBsZW5ndGggPSByZWN2ZnJvbShmZCwgKGNoYXIgKikgZGF0YSwgU01VWE1BWFBLVFNJWkUsIE1TR19QRUVLLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIH0KICAgICB3aGlsZSgobGVuZ3RoID09IC0xKSAmJiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpOwogCkBAIC03MTYsNyArNzE2LDcgQEAKICAgICBkbwogICAgIHsKICAgICAgICBsZW5ndGggPSB0bXBfbGVuZ3RoOwotICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKGZkLCAoY2hhciAqKSBkYXRhLCBsZW5ndGgsIDAsIE5VTEwsIDApOworICAgICAgIGxlbmd0aCA9IHJlY3Zmcm9tKGZkLCAoY2hhciAqKSBkYXRhLCBsZW5ndGgsIDAsIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICB3aGlsZSgobGVuZ3RoID09IC0xKSAmJiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpOwogCkBAIC03NDIsOCArNzQyLDggQEAKICAgICBzaXplX3QgICAgICAgICAgbGVuOwogICAgIHVfY2hhciAgICAgICAgICpwdHIsIHR5cGU7CiAKLSAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9wZHVfcHJvY2Vzc10gUHJvY2Vzc2luZyAlZCBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICBsZW5ndGgpKTsKKyAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9wZHVfcHJvY2Vzc10gUHJvY2Vzc2luZyAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAiZCBieXRlc1xuIiwgbGVuZ3RoKSk7CiAKICAgICBlcnJvciA9IDA7CiAgICAgcHRyID0gZGF0YTsKQEAgLTc4NSw3ICs3ODUsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU01VWF9UUkFQOgogICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sICJHb3QgdHJhcCBmcm9tIHBlZXIgb24gZmQgJWRcbiIsIGZkKTsKLSAgICAgICAgICAgIGlmIChwdHIgIT0gMCkKKyAgICAgICAgICAgIGlmIChwdHIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9wZHVfcHJvY2Vzc10gY2FsbCBzbXV4X3RyYXBfcHJvY2Vzcy5cbiIpKTsKICAgICAgICAgICAgICAgIHB0ciA9IHNtdXhfdHJhcF9wcm9jZXNzKHB0ciwgJmxlbik7CkBAIC04MjksOCArODI5LDggQEAKICAgICAgICAgcmV0dXJuICgocHRyICs9ICpsZW4pKTsKICAgICB9CiAgICAgREVCVUdNU0dUTCgoInNtdXgiLAotICAgICAgICAgICAgICAgICJbc211eF9vcGVuX3Byb2Nlc3NdIHZlcnNpb24gJWQsIGxlbiAlZCwgdHlwZSAlZFxuIiwKLSAgICAgICAgICAgICAgICB2ZXJzaW9uLCAqbGVuLCAoaW50KSB0eXBlKSk7CisgICAgICAgICAgICAgICAgIltzbXV4X29wZW5fcHJvY2Vzc10gdmVyc2lvbiAlbGQsIGxlbiAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAidSwgdHlwZSAlZFxuIiwgdmVyc2lvbiwgKmxlbiwgKGludCkgdHlwZSkpOwogCiAgICAgb2lkX25hbWVfbGVuID0gTUFYX09JRF9MRU47CiAgICAgaWYgKChwdHIgPSBhc25fcGFyc2Vfb2JqaWQocHRyLCBsZW4sICZ0eXBlLCBvaWRfbmFtZSwKQEAgLTg0NCw4ICs4NDQsOCBAQAogICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgewogICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9vcGVuX3Byb2Nlc3NdIHNtdXggcGVlcjogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIG9pZF9wcmludCkpOwotICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9vcGVuX3Byb2Nlc3NdIGxlbiAlZCwgdHlwZSAlZFxuIiwgKmxlbiwKLSAgICAgICAgICAgICAgICAgICAgKGludCkgdHlwZSkpOworICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9vcGVuX3Byb2Nlc3NdIGxlbiAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgInUsIHR5cGUgJWRcbiIsICpsZW4sIChpbnQpIHR5cGUpKTsKICAgICB9CiAKICAgICBzdHJpbmdfbGVuID0gU01VWE1BWFNUUkxFTjsKQEAgLTg2MSw4ICs4NjEsOCBAQAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgc3RyaW5nX2xlbjsgaSsrKQogICAgICAgICAgICAgREVCVUdNU0coKCJzbXV4IiwgIiVjIiwgZGVzY3JbaV0pKTsKICAgICAgICAgREVCVUdNU0coKCJzbXV4IiwgIlxuIikpOwotICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9vcGVuX3Byb2Nlc3NdIGxlbiAlZCwgdHlwZSAlZFxuIiwgKmxlbiwKLSAgICAgICAgICAgICAgICAgICAgKGludCkgdHlwZSkpOworICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9vcGVuX3Byb2Nlc3NdIGxlbiAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgInUsIHR5cGUgJWRcbiIsICpsZW4sIChpbnQpIHR5cGUpKTsKICAgICB9CiAgICAgZGVzY3Jbc3RyaW5nX2xlbl0gPSAwOwogCkBAIC04NzksOCArODc5LDggQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIHN0cmluZ19sZW47IGkrKykKICAgICAgICAgICAgIERFQlVHTVNHKCgic211eCIsICIlYyIsIHBhc3N3ZFtpXSkpOwogICAgICAgICBERUJVR01TRygoInNtdXgiLCAiXG4iKSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X29wZW5fcHJvY2Vzc10gbGVuICVkLCB0eXBlICVkXG4iLCAqbGVuLAotICAgICAgICAgICAgICAgICAgICAoaW50KSB0eXBlKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X29wZW5fcHJvY2Vzc10gbGVuICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAidSwgdHlwZSAlZFxuIiwgKmxlbiwgKGludCkgdHlwZSkpOwogICAgIH0KICAgICBwYXNzd2Rbc3RyaW5nX2xlbl0gPSAnXDAnOwogICAgIGlmICghc211eF9hdXRoX3BlZXIob2lkX25hbWUsIG9pZF9uYW1lX2xlbiwgcGFzc3dkLCBmZCkpIHsKQEAgLTkyNiwxMCArOTI2LDI3IEBACiBzbXV4X2F1dGhfcGVlcihvaWQgKiBuYW1lLCBzaXplX3QgbmFtZWxlbiwgY2hhciAqcGFzc3dkLCBpbnQgZmQpCiB7CiAgICAgaW50ICAgICAgICAgICAgIGk7CisgICAgY2hhciAgICAgICAgICAgIG9pZF9wcmludFtTTVVYTUFYU1RSTEVOXTsKKworICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgeworICAgICAgICBzbnByaW50X29iamlkKG9pZF9wcmludCwgc2l6ZW9mKG9pZF9wcmludCksIG5hbWUsIG5hbWVsZW4pOworICAgICAgICBERUJVR01TR1RMKCgic211eDphdXRoIiwgIltzbXV4X2F1dGhfcGVlcl0gQXV0aG9yaXppbmc6ICVzLCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgb2lkX3ByaW50LCBwYXNzd2QpKTsKKyAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbmF1dGhzOyBpKyspIHsKKyAgICAgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7CisgICAgICAgICAgICBzbnByaW50X29iamlkKG9pZF9wcmludCwgc2l6ZW9mKG9pZF9wcmludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhzW2ldLT5zYV9vaWQsIEF1dGhzW2ldLT5zYV9vaWRfbGVuKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4OmF1dGgiLCAiW3NtdXhfYXV0aF9wZWVyXSBDaGVja2luZyBPSUQ6ICVzICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIG9pZF9wcmludCwgaSkpOworICAgICAgICB9CiAgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKEF1dGhzW2ldLT5zYV9vaWQsIEF1dGhzW2ldLT5zYV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBuYW1lbGVuKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic211eDphdXRoIiwgIltzbXV4X2F1dGhfcGVlcl0gQ2hlY2tpbmcgUC9XOiAlcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgQXV0aHNbaV0tPnNhX3Bhc3N3ZCwgQXV0aHNbaV0tPnNhX2FjdGl2ZV9mZCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCEoc3RyY21wKEF1dGhzW2ldLT5zYV9wYXNzd2QsIHBhc3N3ZCkpICYmCiAgICAgICAgICAgICAgICAgKEF1dGhzW2ldLT5zYV9hY3RpdmVfZmQgPT0gLTEpKSB7CiAgICAgICAgICAgICAgICAgLyoKQEAgLTk2Niw3ICs5ODMsNyBAQAogICAgIH0KIAogICAgIERFQlVHTVNHVEwoKCJzbXV4IiwKLSAgICAgICAgICAgICAgICAiW3NtdXhfY2xvc2VfcHJvY2Vzc10gY2xvc2UgZnJvbSBwZWVyIG9uIGZkICVkIHJlYXNvbiAlZFxuIiwKKyAgICAgICAgICAgICAgICAiW3NtdXhfY2xvc2VfcHJvY2Vzc10gY2xvc2UgZnJvbSBwZWVyIG9uIGZkICVkIHJlYXNvbiAlbGRcbiIsCiAgICAgICAgICAgICAgICAgZmQsIGRvd24pKTsKICAgICBzbXV4X3BlZXJfY2xlYW51cChmZCk7CiAKQEAgLTk5OCw3ICsxMDE1LDcgQEAKICAgICAgICAgc211eF9zZW5kX3Jyc3Aoc2QsIC0xKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3JyZXFfcHJvY2Vzc10gcHJpb3JpdHkgJWRcbiIsIHByaW9yaXR5KSk7CisgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfcnJlcV9wcm9jZXNzXSBwcmlvcml0eSAlbGRcbiIsIHByaW9yaXR5KSk7CiAKICAgICBpZiAoKHB0ciA9IGFzbl9wYXJzZV9pbnQocHRyLCBsZW4sICZ0eXBlLCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob3BlcmF0aW9uKSkpID09IE5VTEwpIHsKQEAgLTEwMDcsNyArMTAyNCw3IEBACiAgICAgICAgIHNtdXhfc2VuZF9ycnNwKHNkLCAtMSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9ycmVxX3Byb2Nlc3NdIG9wZXJhdGlvbiAlZFxuIiwgb3BlcmF0aW9uKSk7CisgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfcnJlcV9wcm9jZXNzXSBvcGVyYXRpb24gJWxkXG4iLCBvcGVyYXRpb24pKTsKIAogICAgIGlmIChvcGVyYXRpb24gPT0gU01VWF9SRUdPUF9ERUxFVEUpIHsKICAgICAgICAgLyoKQEAgLTExNDYsNyArMTE2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIG5ycHRyLT5zcl9uYW1lLCBucnB0ci0+c3JfbmFtZV9sZW4pCiAgICAgICAgICAgICAgICAgICAgICAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKIAkJREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfcnJlcV9wcm9jZXNzXSBGYWlsZWQgdG8gcmVnaXN0ZXIgc3VidHJlZVxuIikpOwotCQlzbXV4X2xpc3RfZGV0YWNoKCZBY3RpdmVSZWdzLCAmbnJwdHIpOworCQlzbXV4X2xpc3RfZGV0YWNoKCZBY3RpdmVSZWdzLCBucnB0cik7CiAJCWZyZWUobnJwdHIpOwogCQlzbXV4X3NlbmRfcnJzcChzZCwgLTEpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTEyNDgsNTAgKzEyNjUsNjEgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHByZXYgPSBOVUxMOwotICAgIGZvciAocnB0ciA9ICpoZWFkOyBycHRyLT5zcl9uZXh0OyBycHRyID0gcnB0ci0+c3JfbmV4dCkgeworICAgIGZvciAocnB0ciA9ICpoZWFkOyBycHRyOyBycHRyID0gcnB0ci0+c3JfbmV4dCkgewogICAgICAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKGFkZC0+c3JfbmFtZSwgYWRkLT5zcl9uYW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycHRyLT5zcl9uYW1lLCBycHRyLT5zcl9uYW1lX2xlbik7Ci0gICAgICAgIGlmICgocmVzdWx0ID09IDApICYmIChhZGQtPnNyX3ByaW9yaXR5ID09IHJwdHItPnNyX3ByaW9yaXR5KSkgeworICAgICAgICBpZiAocmVzdWx0ID09IDApIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBzYW1lIHRyZWUsIHNhbWUgcHJpLCBub3BlIAorICAgICAgICAgICAgICogU2FtZSB0cmVlLi4uCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChhZGQtPnNyX3ByaW9yaXR5ID09IHJwdHItPnNyX3ByaW9yaXR5KSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiAuLi4gc2FtZSBwcmkgOiBub3BlIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRkLT5zcl9wcmlvcml0eSA8IHJwdHItPnNyX3ByaW9yaXR5KSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiAuLi4gbG93ZXIgcHJpIDogaW5zZXJ0IGFuZCByZXR1cm4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBhZGQtPnNyX25leHQgPSBycHRyOworICAgICAgICAgICAgICAgIGlmICggcHJldiApIHsgcHJldi0+c3JfbmV4dCA9IGFkZDsgfQorICAgICAgICAgICAgICAgIGVsc2UgICAgICAgIHsgICAgICAgICAqaGVhZCA9IGFkZDsgfQorICAgICAgICAgICAgICAgIHJldHVybiAwOworI2lmZGVmIFhYWAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIC4uLiBoaWdoZXIgcHJpIDogcHV0IGFmdGVyIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGFkZC0+c3JfbmV4dCAgPSBycHRyLT5zcl9uZXh0OworICAgICAgICAgICAgICAgIHJwdHItPnNyX25leHQgPSBhZGQ7CisjZW5kaWYKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPCAwKSB7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgd2UgZ28gYmVmb3JlIHRoZSBoZWFkIAorICAgICAgICAgICAgICogRWFybGllciB0cmVlIDogaW5zZXJ0IGFuZCByZXR1cm4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWRkLT5zcl9uZXh0ID0gKmhlYWQ7Ci0gICAgICAgICAgICAqaGVhZCA9IGFkZDsKKyAgICAgICAgICAgIGFkZC0+c3JfbmV4dCA9IHJwdHI7CisgICAgICAgICAgICBpZiAoIHByZXYgKSB7IHByZXYtPnNyX25leHQgPSBhZGQ7IH0KKyAgICAgICAgICAgIGVsc2UgICAgICAgIHsgICAgICAgICAqaGVhZCA9IGFkZDsgfQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoKHNubXBfb2lkX2NvbXBhcmUoYWRkLT5zcl9uYW1lLCBhZGQtPnNyX25hbWVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwdHItPnNyX25leHQtPnNyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnB0ci0+c3JfbmV4dC0+c3JfbmFtZV9sZW4pKSA8IDApIHsKKyNpZmRlZiBYWFgKKyAgICAgICAgfSBlbHNlICB7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogaW5zZXJ0IGhlcmUgCisgICAgICAgICAgICAgKiBMYXRlciB0cmVlIDogcHV0IGFmdGVyCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGFkZC0+c3JfbmV4dCA9IHJwdHItPnNyX25leHQ7CiAgICAgICAgICAgICBycHRyLT5zcl9uZXh0ID0gYWRkOwogICAgICAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICBwcmV2ID0gcnB0cjsKICAgICB9CiAgICAgLyoKLSAgICAgKiBjb21wYXJlIHRoZSBsYXN0IG9uZSAKKyAgICAgKiBPdGhlcndpc2UsIHRoaXMgZW50cnkgbXVzdCBjb21lIGxhc3QKICAgICAgKi8KLSAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKGFkZC0+c3JfbmFtZSwgYWRkLT5zcl9uYW1lX2xlbiwgcnB0ci0+c3JfbmFtZSwgcnB0ci0+c3JfbmFtZV9sZW4pOwotICAgIGlmICgocmVzdWx0ID09IDApICYmIGFkZC0+c3JfcHJpb3JpdHkgPT0gcnB0ci0+c3JfcHJpb3JpdHkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlICBpZiAocmVzdWx0IDwgMCApIHsKLSAgICAgICAgYWRkLT5zcl9uZXh0ID0gcnB0cjsKLSAgICAgICAgaWYgKCBwcmV2ICkgewotICAgICAgICAgICAgcHJldi0+c3JfbmV4dCA9IGFkZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpoZWFkID0gYWRkOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcnB0ci0+c3JfbmV4dCA9IGFkZDsKLSAgICAgICAgYWRkLT5zcl9uZXh0ID0gTlVMTDsKLSAgICB9CisgICAgaWYgKCBwcmV2ICkgeyBwcmV2LT5zcl9uZXh0ID0gYWRkOyB9CisgICAgZWxzZSAgICAgICAgeyAgICAgICAgICpoZWFkID0gYWRkOyB9CisgICAgYWRkLT5zcl9uZXh0ID0gTlVMTDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTMzNyw3ICsxMzY1LDcgQEAKICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHJldHVybl9sZW4sIHVfY2hhciAqIHJldHVybl90eXBlLCBpbnQgc2QpCiB7CiAgICAgdV9jaGFyICAgICAgICAgIHBhY2tldFtTTVVYTUFYUEtUU0laRV0sICpwdHIsIHJlc3VsdFtTTVVYTUFYUEtUU0laRV07Ci0gICAgaW50ICAgICAgICAgICAgIGxlbmd0aCA9IFNNVVhNQVhQS1RTSVpFOworICAgIHNzaXplX3QgICAgICAgICBsZW5ndGggPSBTTVVYTUFYUEtUU0laRTsKICAgICBpbnQgICAgICAgICAgICAgdG1wX2xlbmd0aDsKICAgICB1X2NoYXIgICAgICAgICAgdHlwZTsKICAgICBzaXplX3QgICAgICAgICAgcGFja2V0X2xlbjsKQEAgLTEzNTMsNyArMTM4MSw3IEBACiAgICAgICAgIHR5cGUgPSBTTVVYX0dFVE5FWFQ7CiAKICAgICBpZiAoc211eF9idWlsZCh0eXBlLCBzbXV4X3JlcWlkLCBvYmppZCwgbGVuLCAwLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICpsZW4sIHBhY2tldCwgJmxlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgKmxlbiwgcGFja2V0LCAoc2l6ZV90ICopICZsZW5ndGgpIDwgMCkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiW3NtdXhfc25tcF9wcm9jZXNzXTogc211eF9idWlsZCBmYWlsZWRcbiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMzY2LDE0ICsxMzk0LDE1IEBACiAgICAgfQogCiAgICAgREVCVUdNU0dUTCgoInNtdXgiLAotICAgICAgICAgICAgICAgICJbc211eF9zbm1wX3Byb2Nlc3NdIFNlbnQgJWQgcmVxdWVzdCB0byBwZWVyOyAlZCBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAiW3NtdXhfc25tcF9wcm9jZXNzXSBTZW50ICVkIHJlcXVlc3QgdG8gcGVlcjsgJSIgTkVUU05NUF9QUkl6ICJkIGJ5dGVzXG4iLAogICAgICAgICAgICAgICAgIChpbnQpIHR5cGUsIGxlbmd0aCkpOwogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgLyoKICAgICAgICAgICogcGVlayBhdCB3aGF0J3MgcmVjZWl2ZWQgCiAgICAgICAgICAqLwotICAgICAgICBsZW5ndGggPSByZWN2ZnJvbShzZCwgKGNoYXIgKikgcmVzdWx0LCBTTVVYTUFYUEtUU0laRSwgTVNHX1BFRUssIE5VTEwsIDApOworICAgICAgICBsZW5ndGggPSByZWN2ZnJvbShzZCwgKGNoYXIgKikgcmVzdWx0LCBTTVVYTUFYUEtUU0laRSwgTVNHX1BFRUssIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICBpZiAobGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAgIGlmICgobGVuZ3RoID09IC0xKSAmJiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpCiAgICAgICAgICAgICB7CkBAIC0xMzg4LDcgKzE0MTcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfc25tcF9wcm9jZXNzXSBQZWVrZWQgYXQgJWQgYnl0ZXNcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3NubXBfcHJvY2Vzc10gUGVla2VkIGF0ICUiIE5FVFNOTVBfUFJJeiAiZCBieXRlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKSk7CiAgICAgICAgIERFQlVHRFVNUFNFVFVQKCJzbXV4X3NubXBfcHJvY2VzcyIsIHJlc3VsdCwgbGVuZ3RoKTsKIApAQCAtMTQxMiw3ICsxNDQxLDcgQEAKICAgICAgICAgZG8KICAgICAgICAgewogICAgICAgICAgICBsZW5ndGggPSB0bXBfbGVuZ3RoOwotICAgICAgICAgICBsZW5ndGggPSByZWN2ZnJvbShzZCwgKGNoYXIgKikgcmVzdWx0LCBsZW5ndGgsIDAsIE5VTEwsIDApOworICAgICAgICAgICBsZW5ndGggPSByZWN2ZnJvbShzZCwgKGNoYXIgKikgcmVzdWx0LCBsZW5ndGgsIDAsIE5VTEwsIE5VTEwpOwogICAgICAgICB9CiAgICAgICAgIHdoaWxlKChsZW5ndGggPT0gLTEpICYmICgoZXJybm8gPT0gRUlOVFIpIHx8IChlcnJubyA9PSBFQUdBSU4pKSk7CiAKQEAgLTE0MjMsMTQgKzE0NTIsMTQgQEAKICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9zbm1wX3Byb2Nlc3NdIFJlY2VpdmVkICVkIGJ5dGVzXG4iLAorICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9zbm1wX3Byb2Nlc3NdIFJlY2VpdmVkICUiIE5FVFNOTVBfUFJJeiAiZCBieXRlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdFswXSA9PSBTTVVYX1RSQVApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3NubXBfcHJvY2Vzc10gUmVjZWl2ZWQgdHJhcFxuIikpOwogICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sICJHb3QgdHJhcCBmcm9tIHBlZXIgb24gZmQgJWRcbiIsIHNkKTsKLSAgICAgICAgICAgIHB0ciA9IGFzbl9wYXJzZV9oZWFkZXIocmVzdWx0LCAmbGVuZ3RoLCAmdHlwZSk7Ci0gICAgICAgICAgICBzbXV4X3RyYXBfcHJvY2VzcyhwdHIsICZsZW5ndGgpOworICAgICAgICAgICAgcHRyID0gYXNuX3BhcnNlX2hlYWRlcihyZXN1bHQsIChzaXplX3QgKikgJmxlbmd0aCwgJnR5cGUpOworICAgICAgICAgICAgc211eF90cmFwX3Byb2Nlc3MocHRyLCAoc2l6ZV90ICopICZsZW5ndGgpOwogCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogZ28gYW5kIHBlZWsgYXQgcmVjZWl2ZWQgZGF0YSBhZ2FpbiAKQEAgLTE0OTYsNyArMTUyNSw3IEBACiAgICAgICogWFhYIEhvdyB0byBzZW5kIHNvbWV0aGluZyBpbnRlbGxpZ2VudCBiYWNrIGluIGNhc2Ugb2YgYW4gZXJyb3IgCiAgICAgICovCiAgICAgREVCVUdNU0dUTCgoInNtdXgiLAotICAgICAgICAgICAgICAgICJbc211eF9wYXJzZV0gTWVzc2FnZSB0eXBlICVkLCByZXFpZCAlZCwgZXJyc3RhdCAlZCwgXG5cdGVycmluZGV4ICVkXG4iLAorICAgICAgICAgICAgICAgICJbc211eF9wYXJzZV0gTWVzc2FnZSB0eXBlICVkLCByZXFpZCAlbGQsIGVycnN0YXQgJWxkLCBcblx0ZXJyaW5kZXggJWxkXG4iLAogICAgICAgICAgICAgICAgIChpbnQpIHR5cGUsIHJlcWlkLCBlcnJzdGF0LCBlcnJpbmRleCkpOwogICAgIGlmIChwdHIgPT0gTlVMTCB8fCBlcnJzdGF0ICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTU1Niw4ICsxNTg1LDggQEAKICAgICAgKi8KICAgICBsZW4gPSBTTVVYTUFYUEtUU0laRTsKICAgICBERUJVR01TR1RMKCgic211eCIsCi0gICAgICAgICAgICAgICAgIltzbXV4X3BhcnNlX3Zhcl0gQXNuIGNvZGVkIGxlbiBvZiB2YXIgJWQsIHR5cGUgJWRcbiIsCi0gICAgICAgICAgICAgICAgdmFyX3ZhbF9sZW4sIChpbnQpICp2YXJ0eXBlKSk7CisgICAgICAgICAgICAgICAgIltzbXV4X3BhcnNlX3Zhcl0gQXNuIGNvZGVkIGxlbiBvZiB2YXIgJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgInUsIHR5cGUgJWRcbiIsIHZhcl92YWxfbGVuLCAoaW50KSAqdmFydHlwZSkpOwogCiAgICAgc3dpdGNoICgoc2hvcnQpICp2YXJ0eXBlKSB7CiAgICAgY2FzZSBBU05fSU5URUdFUjoKQEAgLTE5NjIsNyArMTk5MSw3IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogWFhYIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAobGVuID09IDApCisgICAgICAgICAgICBpZiAobGVuID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB2YXJfdmFsX2xlbiA9IFNNVVhNQVhTVFJMRU47CiAgICAgICAgICAgICBhc25fcGFyc2Vfc3RyaW5nKHZhcl92YWwsICZtYXhsZW4sICZ2YXJ0eXBlLApAQCAtMTk4Niw3ICsyMDE1LDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBYWFggCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICAgIGlmIChsZW4gPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHZhcl92YWxfbGVuID0gU01VWE1BWFNUUkxFTjsKICAgICAgICAgICAgIGFzbl9wYXJzZV9iaXRzdHJpbmcodmFyX3ZhbCwgJm1heGxlbiwgJnZhcnR5cGUsCkBAIC0yMDcwLDcgKzIwOTksNyBAQAogICAgcmV0dXJuKDApOwogfQogCi1pbnQgc211eF9zbm1wX3NlbGVjdF9saXN0X2dldF9sZW5ndGgoKQoraW50IHNtdXhfc25tcF9zZWxlY3RfbGlzdF9nZXRfbGVuZ3RoKHZvaWQpCiB7CiAgICByZXR1cm4oc2RsZW4pOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmggYi9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguaAppbmRleCBkMTUxZjdkLi44OGI4YTNkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguaAorKysgYi9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguaApAQCAtMiw2ICsyLDExIEBACiAgKiBTbXV4IG1vZHVsZSBhdXRob3JlZCBieSBSb2hpdCBEdWJlLgogICogUmV3cml0dGVuIGJ5IE5pY2sgQW1hdG8gPG5hYW1hdG9AbWVyaXQubmV0Pi4KICAqLworCisjaWZuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0lQVjRCQVNFX0RPTUFJTgorY29uZmlnX2Vycm9yKHNtdXgvc211eCBkZXBlbmRzIG9uIHRoZSBJUHY0QmFzZSB0cmFuc3BvcnQgZG9tYWluKQorI2VuZGlmCisKIGNvbmZpZ19iZWxvbmdzX2luKGFnZW50X21vZHVsZSkKIAogI2RlZmluZSBTTVVYUE9SVCAxOTkKQEAgLTY1LDggKzcwLDYgQEAKIGV4dGVybiBpbnQgICAgICBzbXV4X3Byb2Nlc3MoaW50KTsKIGV4dGVybiB2b2lkICAgICBzbXV4X3BhcnNlX3BlZXJfYXV0aChjb25zdCBjaGFyICosIGNoYXIgKik7CiBleHRlcm4gdm9pZCAgICAgc211eF9mcmVlX3BlZXJfYXV0aCh2b2lkKTsKLWV4dGVybiB2b2lkICAgICBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzKGludCwgaW50LCBvaWQgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICopOwogCiAvKiBBZGQgc29ja2V0LWZkIHRvIGxpc3QgKi8KIGludCBzbXV4X3NubXBfc2VsZWN0X2xpc3RfYWRkKGludCBzZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmMgYi9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmMKaW5kZXggM2U1ZDVjZS4uMTZiMDE4NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuYwpAQCAtNTIsMzIgKzUyLDU1IEBACiAjaW5jbHVkZSAic25tcF9iZ3AuaCIKIAogc3RydWN0IHZhcmlhYmxlMTMgYmdwX3ZhcmlhYmxlc1tdID0gewotICAgIHtCR1BWRVJTSU9OLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2JncCwgMSwgezF9fSwKLSAgICB7QkdQTE9DQUxBUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAxLCB7Mn19LAotICAgIHtCR1BJREVOVElGSUVSLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2JncCwgMSwgezR9fSwKLSAgICB7QkdQUEVFUklERU5USUZJRVIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgMX19LAotICAgIHtCR1BQRUVSU1RBVEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDJ9fSwKLSAgICB7QkdQUEVFUkFETUlOU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCAzfX0sCi0gICAge0JHUFBFRVJORUdPVElBVEVEVkVSU0lPTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgNH19LAotICAgIHtCR1BQRUVSTE9DQUxBRERSLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDV9fSwKLSAgICB7QkdQUEVFUkxPQ0FMUE9SVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgNn19LAotICAgIHtCR1BQRUVSUkVNT1RFQUREUiwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCA3fX0sCi0gICAge0JHUFBFRVJSRU1PVEVQT1JULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCA4fX0sCi0gICAge0JHUFBFRVJSRU1PVEVBUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgOX19LAotICAgIHtCR1BQRUVSSU5VUERBVEVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCAxMH19LAotICAgIHtCR1BQRUVST1VUVVBEQVRFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgMTF9fSwKLSAgICB7QkdQUEVFUklOVE9UQUxNRVNTQUdFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgMTJ9fSwKLSAgICB7QkdQUEVFUk9VVFRPVEFMTUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDEzfX0sCi0gICAge0JHUFBFRVJMQVNURVJST1IsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgMTR9fSwKLSAgICB7QkdQUEFUSEFUVFJQRUVSLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2JncCwgMywgezUsIDEsIDF9fSwKLSAgICB7QkdQUEFUSEFUVFJERVNUTkVUV09SSywgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9iZ3AsIDMsIHs1LCAxLCAyfX0sCi0gICAge0JHUFBBVEhBVFRST1JJR0lOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHs1LCAxLCAzfX0sCi0gICAge0JHUFBBVEhBVFRSQVNQQVRILCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2JncCwgMywgezUsIDEsIDR9fSwKLSAgICB7QkdQUEFUSEFUVFJORVhUSE9QLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHs1LCAxLCA1fX0sCi0gICAge0JHUFBBVEhBVFRSSU5URVJBU01FVFJJQywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHs1LCAxLCA2fX0KKyAgICB7QkdQVkVSU0lPTiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDEsIHsxfX0sCisgICAge0JHUExPQ0FMQVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMSwgezJ9fSwKKyAgICB7QkdQSURFTlRJRklFUiwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDEsIHs0fX0sCisgICAge0JHUFBFRVJJREVOVElGSUVSLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDF9fSwKKyAgICB7QkdQUEVFUlNUQVRFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCAyfX0sCisgICAge0JHUFBFRVJBRE1JTlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgM319LAorICAgIHtCR1BQRUVSTkVHT1RJQVRFRFZFUlNJT04sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDR9fSwKKyAgICB7QkdQUEVFUkxPQ0FMQUREUiwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCA1fX0sCisgICAge0JHUFBFRVJMT0NBTFBPUlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDZ9fSwKKyAgICB7QkdQUEVFUlJFTU9URUFERFIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgN319LAorICAgIHtCR1BQRUVSUkVNT1RFUE9SVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgOH19LAorICAgIHtCR1BQRUVSUkVNT1RFQVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDl9fSwKKyAgICB7QkdQUEVFUklOVVBEQVRFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgMTB9fSwKKyAgICB7QkdQUEVFUk9VVFVQREFURVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDExfX0sCisgICAge0JHUFBFRVJJTlRPVEFMTUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDEyfX0sCisgICAge0JHUFBFRVJPVVRUT1RBTE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCAxM319LAorICAgIHtCR1BQRUVSTEFTVEVSUk9SLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDE0fX0sCisgICAge0JHUFBBVEhBVFRSUEVFUiwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHs1LCAxLCAxfX0sCisgICAge0JHUFBBVEhBVFRSREVTVE5FVFdPUkssIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7NSwgMSwgMn19LAorICAgIHtCR1BQQVRIQVRUUk9SSUdJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7NSwgMSwgM319LAorICAgIHtCR1BQQVRIQVRUUkFTUEFUSCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHs1LCAxLCA0fX0sCisgICAge0JHUFBBVEhBVFRSTkVYVEhPUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7NSwgMSwgNX19LAorICAgIHtCR1BQQVRIQVRUUklOVEVSQVNNRVRSSUMsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7NSwgMSwgNn19CiB9OwogCi1vaWQgICAgICAgICAgICAgYmdwX3ZhcmlhYmxlc19vaWRbXSA9IHsgTUlCLCAxNSB9Oworb2lkICAgICAgICAgICAgIGJncF92YXJpYWJsZXNfb2lkW10gPSB7IE5FVFNOTVBfTUlCMl9PSUQsIDE1IH07CiAKIHZvaWQKIGluaXRfc25tcF9iZHAodm9pZCkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmMgYi9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5jCmluZGV4IDRmNDc1OGMuLjczZjBlNDMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuYwpAQCAtNTcsMTI5ICs1NywyMjUgQEAKIGV4dGVybiB1X2NoYXIgICBzbXV4X3R5cGU7CiAKIHN0cnVjdCB2YXJpYWJsZTEzIG9zcGZfdmFyaWFibGVzW10gPSB7Ci0gICAge29zcGZSb3V0ZXJJZCwgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfb3NwZiwgMywgezEsIDEsIDF9fSwKLSAgICB7b3NwZkFkbWluU3RhdCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxLCAxLCAyfX0sCi0gICAge29zcGZWZXJzaW9uTnVtYmVyLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MSwgMSwgM319LAotICAgIHtvc3BmQXJlYUJkclJ0clN0YXR1cywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEsIDEsIDR9fSwKLSAgICB7b3NwZkFTQmRyUnRyU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezEsIDEsIDV9fSwKLSAgICB7b3NwZkV4dGVybkxzYUNvdW50LCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEsIDEsIDZ9fSwKLSAgICB7b3NwZkV4dGVybkxzYUNrc3VtU3VtLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MSwgMSwgN319LAotICAgIHtvc3BmVE9TU3VwcG9ydCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxLCAxLCA4fX0sCi0gICAge29zcGZPcmlnaW5hdGVOZXdMc2FzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MSwgMSwgOX19LAotICAgIHtvc3BmUnhOZXdMc2FzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MSwgMSwgMTAsIDB9fSwKLSAgICB7b3NwZkV4dExzZGJMaW1pdCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxLCAxLCAxMX19LAotICAgIHtvc3BmTXVsdGljYXN0RXh0ZW5zaW9ucywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsCi0gICAgIHsxLCAxLCAxMn19LAotICAgIHtvc3BmQXJlYUlkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsyLCAxLCAxfX0sCi0gICAge29zcGZBdXRoVHlwZSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsyLCAxLCAyfX0sCi0gICAge29zcGZJbXBvcnRBc0V4dGVybiwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsyLCAxLCAzfX0sCi0gICAge29zcGZTcGZSdW5zLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MiwgMSwgNH19LAotICAgIHtvc3BmQXJlYUJkclJ0ckNvdW50LCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfb3NwZiwgMywgezIsIDEsIDV9fSwKLSAgICB7b3NwZkFzQmRyUnRyQ291bnQsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MiwgMSwgNn19LAotICAgIHtvc3BmQXJlYUxzYUNvdW50LCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfb3NwZiwgMywgezIsIDEsIDd9fSwKLSAgICB7b3NwZkFyZWFMc2FDa3N1bVN1bSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezIsIDEsIDh9fSwKLSAgICB7b3NwZkFyZWFTdW1tYXJ5LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezIsIDEsIDl9fSwKLSAgICB7b3NwZkFyZWFTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MiwgMSwgMTB9fSwKLSAgICB7b3NwZlN0dWJBcmVhSWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezMsIDEsIDF9fSwKLSAgICB7b3NwZlN0dWJUT1MsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHszLCAxLCAyfX0sCi0gICAge29zcGZTdHViTWV0cmljLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezMsIDEsIDN9fSwKLSAgICB7b3NwZlN0dWJTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MywgMSwgNH19LAotICAgIHtvc3BmU3R1Yk1ldHJpY1R5cGUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MywgMSwgNX19LAotICAgIHtvc3BmTHNkYkFyZWFJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7NCwgMSwgMX19LAotICAgIHtvc3BmTHNkYlR5cGUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs0LCAxLCAyfX0sCi0gICAge29zcGZMc2RiTHNpZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7NCwgMSwgM319LAotICAgIHtvc3BmTHNkYlJvdXRlcklkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs0LCAxLCA0fX0sCi0gICAge29zcGZMc2RiU2VxdWVuY2UsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs0LCAxLCA1fX0sCi0gICAge29zcGZMc2RiQWdlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NCwgMSwgNn19LAotICAgIHtvc3BmTHNkYkNoZWNrc3VtLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NCwgMSwgN319LAotICAgIHtvc3BmTHNkYkFkdmVydGlzZW1lbnQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezQsIDEsIDh9fSwKLSAgICB7b3NwZkFyZWFSYW5nZUFyZWFJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7NSwgMSwgMX19LAotICAgIHtvc3BmQXJlYVJhbmdlTmV0LCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs1LCAxLCAyfX0sCi0gICAge29zcGZBcmVhUmFuZ2VNYXNrLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NSwgMSwgM319LAotICAgIHtvc3BmQXJlYVJhbmdlU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezUsIDEsIDR9fSwKLSAgICB7b3NwZkFyZWFSYW5nZUVmZmVjdCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs1LCAxLCA1fX0sCi0gICAge29zcGZIb3N0SXBBZGRyZXNzLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs2LCAxLCAxfX0sCi0gICAge29zcGZIb3N0VE9TLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NiwgMSwgMn19LAotICAgIHtvc3BmSG9zdE1ldHJpYywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs2LCAxLCAzfX0sCi0gICAge29zcGZIb3N0U3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezYsIDEsIDR9fSwKLSAgICB7b3NwZkhvc3RBcmVhSUQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezYsIDEsIDV9fSwKLSAgICB7b3NwZklmSXBBZGRyZXNzLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs3LCAxLCAxfX0sCi0gICAge29zcGZBZGRyZXNzTGVzc0lmLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NywgMSwgMn19LAotICAgIHtvc3BmSWZBcmVhSWQsIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCAzfX0sCi0gICAge29zcGZJZlR5cGUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgNH19LAotICAgIHtvc3BmSWZBZG1pblN0YXQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgNX19LAotICAgIHtvc3BmSWZSdHJQcmlvcml0eSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCA2fX0sCi0gICAge29zcGZJZlRyYW5zaXREZWxheSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCA3fX0sCi0gICAge29zcGZJZlJldHJhbnNJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCA4fX0sCi0gICAge29zcGZJZkhlbGxvSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgOX19LAotICAgIHtvc3BmSWZSdHJEZWFkSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgMTB9fSwKLSAgICB7b3NwZklmUG9sbEludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDExfX0sCi0gICAge29zcGZJZlN0YXRlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NywgMSwgMTJ9fSwKLSAgICB7b3NwZklmRGVzaWduYXRlZFJvdXRlciwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLAotICAgICB7NywgMSwgMTN9fSwKLSAgICB7b3NwZklmQmFja3VwRGVzaWduYXRlZFJvdXRlciwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLAotICAgICB7NywgMSwgMTR9fSwKLSAgICB7b3NwZklmRXZlbnRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NywgMSwgMTV9fSwKLSAgICB7b3NwZklmQXV0aEtleSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDE2fX0sCi0gICAge29zcGZJZlN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCAxN319LAotICAgIHtvc3BmSWZNdWx0aWNhc3RGb3J3YXJkaW5nLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywKLSAgICAgezcsIDEsIDE4fX0sCi0gICAge29zcGZJZk1ldHJpY0lwQWRkcmVzcywgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7OCwgMSwgMX19LAotICAgIHtvc3BmSWZNZXRyaWNBZGRyZXNzTGVzc0lmLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLAotICAgICB7OCwgMSwgMn19LAotICAgIHtvc3BmSWZNZXRyaWNUT1MsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs4LCAxLCAzfX0sCi0gICAge29zcGZJZk1ldHJpY1ZhbHVlLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezgsIDEsIDR9fSwKLSAgICB7b3NwZklmTWV0cmljU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezgsIDEsIDV9fSwKLSAgICB7b3NwZlZpcnRJZkFyZWFJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7OSwgMSwgMX19LAotICAgIHtvc3BmVmlydElmTmVpZ2hib3IsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezksIDEsIDJ9fSwKLSAgICB7b3NwZlZpcnRJZlRyYW5zaXREZWxheSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs5LCAxLCAzfX0sCi0gICAge29zcGZWaXJ0SWZSZXRyYW5zSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLAotICAgICB7OSwgMSwgNH19LAotICAgIHtvc3BmVmlydElmSGVsbG9JbnRlcnZhbCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs5LCAxLCA1fX0sCi0gICAge29zcGZWaXJ0SWZSdHJEZWFkSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLAotICAgICB7OSwgMSwgNn19LAotICAgIHtvc3BmVmlydElmU3RhdGUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHs5LCAxLCA3fX0sCi0gICAge29zcGZWaXJ0SWZFdmVudHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX29zcGYsIDMsIHs5LCAxLCA4fX0sCi0gICAge29zcGZWaXJ0SWZBdXRoS2V5LCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7OSwgMSwgOX19LAotICAgIHtvc3BmVmlydElmU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezksIDEsIDEwfX0sCi0gICAge29zcGZOYnJJcEFkZHIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEwLCAxLCAxfX0sCi0gICAge29zcGZOYnJBZGRyZXNzTGVzc0luZGV4LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDJ9fSwKLSAgICB7b3NwZk5iclJ0cklkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgM319LAotICAgIHtvc3BmTmJyT3B0aW9ucywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEwLCAxLCA0fX0sCi0gICAge29zcGZOYnJQcmlvcml0eSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgNX19LAotICAgIHtvc3BmTmJyU3RhdGUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgNn19LAotICAgIHtvc3BmTmJyRXZlbnRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDd9fSwKLSAgICB7b3NwZk5ickxzUmV0cmFuc1FMZW4sIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDh9fSwKLSAgICB7b3NwZk5ibWFOYnJTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDl9fSwKLSAgICB7b3NwZk5ibWFOYnJQZXJtYW5lbmNlLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezEwLCAxLCAxMH19LAotICAgIHtvc3BmVmlydE5ickFyZWEsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezExLCAxLCAxfX0sCi0gICAge29zcGZWaXJ0TmJyUnRySWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezExLCAxLCAyfX0sCi0gICAge29zcGZWaXJ0TmJySXBBZGRyLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMSwgMSwgM319LAotICAgIHtvc3BmVmlydE5ick9wdGlvbnMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMSwgMSwgNH19LAotICAgIHtvc3BmVmlydE5iclN0YXRlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDV9fSwKLSAgICB7b3NwZlZpcnROYnJFdmVudHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMSwgMSwgNn19LAotICAgIHtvc3BmVmlydE5ickxzUmV0cmFuc1FMZW4sIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDd9fSwKLSAgICB7b3NwZkV4dExzZGJUeXBlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDF9fSwKLSAgICB7b3NwZkV4dExzZGJMc2lkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMiwgMSwgMn19LAotICAgIHtvc3BmRXh0THNkYlJvdXRlcklkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMiwgMSwgM319LAotICAgIHtvc3BmRXh0THNkYlNlcXVlbmNlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDR9fSwKLSAgICB7b3NwZkV4dExzZGJBZ2UsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMiwgMSwgNX19LAotICAgIHtvc3BmRXh0THNkYkNoZWNrc3VtLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDZ9fSwKLSAgICB7b3NwZkV4dExzZGJBZHZlcnRpc2VtZW50LCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX29zcGYsIDMsCi0gICAgIHsxMiwgMSwgN319LAotICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZUFyZWFJRCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLAotICAgICB7MTQsIDEsIDF9fSwKLSAgICB7b3NwZkFyZWFBZ2dyZWdhdGVMc2RiVHlwZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywKLSAgICAgezE0LCAxLCAyfX0sCi0gICAge29zcGZBcmVhQWdncmVnYXRlTmV0LCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsxNCwgMSwgM319LAotICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZU1hc2ssIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX29zcGYsIDMsCi0gICAgIHsxNCwgMSwgNH19LAotICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZVN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsCi0gICAgIHsxNCwgMSwgNX19LAotICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZUVmZmVjdCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxNCwgMSwgNn19CisgICAge29zcGZSb3V0ZXJJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDF9fSwKKyAgICB7b3NwZkFkbWluU3RhdCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCAyfX0sCisgICAge29zcGZWZXJzaW9uTnVtYmVyLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgM319LAorICAgIHtvc3BmQXJlYUJkclJ0clN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDR9fSwKKyAgICB7b3NwZkFTQmRyUnRyU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDV9fSwKKyAgICB7b3NwZkV4dGVybkxzYUNvdW50LCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDZ9fSwKKyAgICB7b3NwZkV4dGVybkxzYUNrc3VtU3VtLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgN319LAorICAgIHtvc3BmVE9TU3VwcG9ydCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCA4fX0sCisgICAge29zcGZPcmlnaW5hdGVOZXdMc2FzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgOX19LAorICAgIHtvc3BmUnhOZXdMc2FzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgMTAsIDB9fSwKKyAgICB7b3NwZkV4dExzZGJMaW1pdCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCAxMX19LAorICAgIHtvc3BmTXVsdGljYXN0RXh0ZW5zaW9ucywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCAxMn19LAorICAgIHtvc3BmQXJlYUlkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCAxfX0sCisgICAge29zcGZBdXRoVHlwZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCAyfX0sCisgICAge29zcGZJbXBvcnRBc0V4dGVybiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCAzfX0sCisgICAge29zcGZTcGZSdW5zLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgNH19LAorICAgIHtvc3BmQXJlYUJkclJ0ckNvdW50LCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDV9fSwKKyAgICB7b3NwZkFzQmRyUnRyQ291bnQsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgNn19LAorICAgIHtvc3BmQXJlYUxzYUNvdW50LCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDd9fSwKKyAgICB7b3NwZkFyZWFMc2FDa3N1bVN1bSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDh9fSwKKyAgICB7b3NwZkFyZWFTdW1tYXJ5LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDl9fSwKKyAgICB7b3NwZkFyZWFTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgMTB9fSwKKyAgICB7b3NwZlN0dWJBcmVhSWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezMsIDEsIDF9fSwKKyAgICB7b3NwZlN0dWJUT1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHszLCAxLCAyfX0sCisgICAge29zcGZTdHViTWV0cmljLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezMsIDEsIDN9fSwKKyAgICB7b3NwZlN0dWJTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MywgMSwgNH19LAorICAgIHtvc3BmU3R1Yk1ldHJpY1R5cGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MywgMSwgNX19LAorICAgIHtvc3BmTHNkYkFyZWFJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NCwgMSwgMX19LAorICAgIHtvc3BmTHNkYlR5cGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs0LCAxLCAyfX0sCisgICAge29zcGZMc2RiTHNpZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NCwgMSwgM319LAorICAgIHtvc3BmTHNkYlJvdXRlcklkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs0LCAxLCA0fX0sCisgICAge29zcGZMc2RiU2VxdWVuY2UsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs0LCAxLCA1fX0sCisgICAge29zcGZMc2RiQWdlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NCwgMSwgNn19LAorICAgIHtvc3BmTHNkYkNoZWNrc3VtLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NCwgMSwgN319LAorICAgIHtvc3BmTHNkYkFkdmVydGlzZW1lbnQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezQsIDEsIDh9fSwKKyAgICB7b3NwZkFyZWFSYW5nZUFyZWFJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NSwgMSwgMX19LAorICAgIHtvc3BmQXJlYVJhbmdlTmV0LCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs1LCAxLCAyfX0sCisgICAge29zcGZBcmVhUmFuZ2VNYXNrLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NSwgMSwgM319LAorICAgIHtvc3BmQXJlYVJhbmdlU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezUsIDEsIDR9fSwKKyAgICB7b3NwZkFyZWFSYW5nZUVmZmVjdCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs1LCAxLCA1fX0sCisgICAge29zcGZIb3N0SXBBZGRyZXNzLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs2LCAxLCAxfX0sCisgICAge29zcGZIb3N0VE9TLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NiwgMSwgMn19LAorICAgIHtvc3BmSG9zdE1ldHJpYywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs2LCAxLCAzfX0sCisgICAge29zcGZIb3N0U3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezYsIDEsIDR9fSwKKyAgICB7b3NwZkhvc3RBcmVhSUQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezYsIDEsIDV9fSwKKyAgICB7b3NwZklmSXBBZGRyZXNzLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxfX0sCisgICAge29zcGZBZGRyZXNzTGVzc0lmLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMn19LAorICAgIHtvc3BmSWZBcmVhSWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAzfX0sCisgICAge29zcGZJZlR5cGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgNH19LAorICAgIHtvc3BmSWZBZG1pblN0YXQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgNX19LAorICAgIHtvc3BmSWZSdHJQcmlvcml0eSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCA2fX0sCisgICAge29zcGZJZlRyYW5zaXREZWxheSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCA3fX0sCisgICAge29zcGZJZlJldHJhbnNJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCA4fX0sCisgICAge29zcGZJZkhlbGxvSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgOX19LAorICAgIHtvc3BmSWZSdHJEZWFkSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTB9fSwKKyAgICB7b3NwZklmUG9sbEludGVydmFsLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDExfX0sCisgICAge29zcGZJZlN0YXRlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTJ9fSwKKyAgICB7b3NwZklmRGVzaWduYXRlZFJvdXRlciwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTN9fSwKKyAgICB7b3NwZklmQmFja3VwRGVzaWduYXRlZFJvdXRlciwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTR9fSwKKyAgICB7b3NwZklmRXZlbnRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTV9fSwKKyAgICB7b3NwZklmQXV0aEtleSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDE2fX0sCisgICAge29zcGZJZlN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxN319LAorICAgIHtvc3BmSWZNdWx0aWNhc3RGb3J3YXJkaW5nLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDE4fX0sCisgICAge29zcGZJZk1ldHJpY0lwQWRkcmVzcywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7OCwgMSwgMX19LAorICAgIHtvc3BmSWZNZXRyaWNBZGRyZXNzTGVzc0lmLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7OCwgMSwgMn19LAorICAgIHtvc3BmSWZNZXRyaWNUT1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs4LCAxLCAzfX0sCisgICAge29zcGZJZk1ldHJpY1ZhbHVlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezgsIDEsIDR9fSwKKyAgICB7b3NwZklmTWV0cmljU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezgsIDEsIDV9fSwKKyAgICB7b3NwZlZpcnRJZkFyZWFJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgMX19LAorICAgIHtvc3BmVmlydElmTmVpZ2hib3IsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDJ9fSwKKyAgICB7b3NwZlZpcnRJZlRyYW5zaXREZWxheSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCAzfX0sCisgICAge29zcGZWaXJ0SWZSZXRyYW5zSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgNH19LAorICAgIHtvc3BmVmlydElmSGVsbG9JbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCA1fX0sCisgICAge29zcGZWaXJ0SWZSdHJEZWFkSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgNn19LAorICAgIHtvc3BmVmlydElmU3RhdGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCA3fX0sCisgICAge29zcGZWaXJ0SWZFdmVudHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCA4fX0sCisgICAge29zcGZWaXJ0SWZBdXRoS2V5LCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgOX19LAorICAgIHtvc3BmVmlydElmU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDEwfX0sCisgICAge29zcGZOYnJJcEFkZHIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCAxfX0sCisgICAge29zcGZOYnJBZGRyZXNzTGVzc0luZGV4LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDJ9fSwKKyAgICB7b3NwZk5iclJ0cklkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgM319LAorICAgIHtvc3BmTmJyT3B0aW9ucywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCA0fX0sCisgICAge29zcGZOYnJQcmlvcml0eSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgNX19LAorICAgIHtvc3BmTmJyU3RhdGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgNn19LAorICAgIHtvc3BmTmJyRXZlbnRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDd9fSwKKyAgICB7b3NwZk5ickxzUmV0cmFuc1FMZW4sIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDh9fSwKKyAgICB7b3NwZk5ibWFOYnJTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDl9fSwKKyAgICB7b3NwZk5ibWFOYnJQZXJtYW5lbmNlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCAxMH19LAorICAgIHtvc3BmVmlydE5ickFyZWEsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezExLCAxLCAxfX0sCisgICAge29zcGZWaXJ0TmJyUnRySWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezExLCAxLCAyfX0sCisgICAge29zcGZWaXJ0TmJySXBBZGRyLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMSwgMSwgM319LAorICAgIHtvc3BmVmlydE5ick9wdGlvbnMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMSwgMSwgNH19LAorICAgIHtvc3BmVmlydE5iclN0YXRlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDV9fSwKKyAgICB7b3NwZlZpcnROYnJFdmVudHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMSwgMSwgNn19LAorICAgIHtvc3BmVmlydE5ickxzUmV0cmFuc1FMZW4sIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDd9fSwKKyAgICB7b3NwZkV4dExzZGJUeXBlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDF9fSwKKyAgICB7b3NwZkV4dExzZGJMc2lkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMiwgMSwgMn19LAorICAgIHtvc3BmRXh0THNkYlJvdXRlcklkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMiwgMSwgM319LAorICAgIHtvc3BmRXh0THNkYlNlcXVlbmNlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDR9fSwKKyAgICB7b3NwZkV4dExzZGJBZ2UsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMiwgMSwgNX19LAorICAgIHtvc3BmRXh0THNkYkNoZWNrc3VtLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDZ9fSwKKyAgICB7b3NwZkV4dExzZGJBZHZlcnRpc2VtZW50LCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMiwgMSwgN319LAorICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZUFyZWFJRCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTQsIDEsIDF9fSwKKyAgICB7b3NwZkFyZWFBZ2dyZWdhdGVMc2RiVHlwZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezE0LCAxLCAyfX0sCisgICAge29zcGZBcmVhQWdncmVnYXRlTmV0LCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxNCwgMSwgM319LAorICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZU1hc2ssIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxNCwgMSwgNH19LAorICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZVN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxNCwgMSwgNX19LAorICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZUVmZmVjdCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxNCwgMSwgNn19CiB9OwogCi1vaWQgICAgICAgICAgICAgb3NwZl92YXJpYWJsZXNfb2lkW10gPSB7IE1JQiwgMTQgfTsKK29pZCAgICAgICAgICAgICBvc3BmX3ZhcmlhYmxlc19vaWRbXSA9IHsgTkVUU05NUF9NSUIyX09JRCwgMTQgfTsKIAogdm9pZAogaW5pdF9zbm1wX29zcGYodm9pZCkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmMgYi9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5jCmluZGV4IGM1YjEzNjQuLmI5ODdhMDkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuYwpAQCAtNTcsMzEgKzU3LDUzIEBACiBleHRlcm4gdV9jaGFyICAgc211eF90eXBlOwogCiBzdHJ1Y3QgdmFyaWFibGUxMyByaXAyX3ZhcmlhYmxlc1tdID0gewotICAgIHtSSVAyR0xPQkFMUk9VVEVDSEFOR0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9yaXAyLCAyLCB7MSwgMX19LAotICAgIHtSSVAyR0xPQkFMUVVFUklFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfcmlwMiwgMiwgezEsIDJ9fSwKLSAgICB7UklQMklGU1RBVEFERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfcmlwMiwgMywgezIsIDEsIDF9fSwKLSAgICB7UklQMklGU1RBVFJDVkJBRFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3JpcDIsIDMsIHsyLCAxLCAyfX0sCi0gICAge1JJUDJJRlNUQVRSQ1ZCQURST1VURVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3JpcDIsIDMsIHsyLCAxLCAzfX0sCi0gICAge1JJUDJJRlNUQVRTRU5UVVBEQVRFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfcmlwMiwgMywgezIsIDEsIDR9fSwKLSAgICB7UklQMklGU1RBVFNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3JpcDIsIDMsIHsyLCAxLCA1fX0sCi0gICAge1JJUDJJRkNPTkZBRERSRVNTLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX3JpcDIsIDMsIHszLCAxLCAxfX0sCi0gICAge1JJUDJJRkNPTkZET01BSU4sIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3JpcDIsIDMsIHszLCAxLCAyfX0sCi0gICAge1JJUDJJRkNPTkZBVVRIVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3JpcDIsIDMsIHszLCAxLCAzfX0sCi0gICAge1JJUDJJRkNPTkZBVVRIS0VZLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MywgMSwgNH19LAotICAgIHtSSVAySUZDT05GU0VORCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3JpcDIsIDMsIHszLCAxLCA1fX0sCi0gICAge1JJUDJJRkNPTkZSRUNFSVZFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcmlwMiwgMywgezMsIDEsIDZ9fSwKLSAgICB7UklQMklGQ09ORkRFRkFVTFRNRVRSSUMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MywgMSwgN319LAotICAgIHtSSVAySUZDT05GU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcmlwMiwgMywgezMsIDEsIDh9fSwKLSAgICB7UklQMklGQ09ORlNSQ0FERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX3JpcDIsIDMsIHszLCAxLCA5fX0sCi0gICAge1JJUDJQRUVSQUREUkVTUywgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9yaXAyLCAzLCB7NCwgMSwgMX19LAotICAgIHtSSVAyUEVFUkRPTUFJTiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9yaXAyLCAzLCB7NCwgMSwgMn19LAotICAgIHtSSVAyUEVFUkxBU1RVUERBVEUsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfcmlwMiwgMywgezQsIDEsIDN9fSwKLSAgICB7UklQMlBFRVJWRVJTSU9OLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9yaXAyLCAzLCB7NCwgMSwgNH19LAotICAgIHtSSVAyUEVFUlJDVkJBRFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3JpcDIsIDMsIHs0LCAxLCA1fX0sCi0gICAge1JJUDJQRUVSUkNWQkFEUk9VVEVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9yaXAyLCAzLCB7NCwgMSwgNn19CisgICAge1JJUDJHTE9CQUxST1VURUNIQU5HRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDIsIHsxLCAxfX0sCisgICAge1JJUDJHTE9CQUxRVUVSSUVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAyLCB7MSwgMn19LAorICAgIHtSSVAySUZTVEFUQUREUkVTUywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7MiwgMSwgMX19LAorICAgIHtSSVAySUZTVEFUUkNWQkFEUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezIsIDEsIDJ9fSwKKyAgICB7UklQMklGU1RBVFJDVkJBRFJPVVRFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezIsIDEsIDN9fSwKKyAgICB7UklQMklGU1RBVFNFTlRVUERBVEVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7MiwgMSwgNH19LAorICAgIHtSSVAySUZTVEFUU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezIsIDEsIDV9fSwKKyAgICB7UklQMklGQ09ORkFERFJFU1MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDF9fSwKKyAgICB7UklQMklGQ09ORkRPTUFJTiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDJ9fSwKKyAgICB7UklQMklGQ09ORkFVVEhUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDN9fSwKKyAgICB7UklQMklGQ09ORkFVVEhLRVksIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCA0fX0sCisgICAge1JJUDJJRkNPTkZTRU5ELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDV9fSwKKyAgICB7UklQMklGQ09ORlJFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgNn19LAorICAgIHtSSVAySUZDT05GREVGQVVMVE1FVFJJQywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCA3fX0sCisgICAge1JJUDJJRkNPTkZTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgOH19LAorICAgIHtSSVAySUZDT05GU1JDQUREUkVTUywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDl9fSwKKyAgICB7UklQMlBFRVJBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHs0LCAxLCAxfX0sCisgICAge1JJUDJQRUVSRE9NQUlOLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHs0LCAxLCAyfX0sCisgICAge1JJUDJQRUVSTEFTVFVQREFURSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7NCwgMSwgM319LAorICAgIHtSSVAyUEVFUlZFUlNJT04sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHs0LCAxLCA0fX0sCisgICAge1JJUDJQRUVSUkNWQkFEUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezQsIDEsIDV9fSwKKyAgICB7UklQMlBFRVJSQ1ZCQURST1VURVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHs0LCAxLCA2fX0KIH07CiAKLW9pZCAgICAgICAgICAgICByaXAyX3ZhcmlhYmxlc19vaWRbXSA9IHsgTUlCLCAyMyB9Oworb2lkICAgICAgICAgICAgIHJpcDJfdmFyaWFibGVzX29pZFtdID0geyBORVRTTk1QX01JQjJfT0lELCAyMyB9OwogCiB2b2lkCiBpbml0X3NubXBfcmlwMih2b2lkKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMKaW5kZXggY2IwMGY2NS4uZDFjNTc1ZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0yNiw5ICsyNywxMSBAQAogCiAjaW5jbHVkZSAic25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZFtdID0KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3N0b3JhZ2VfdHJhbnNpdGlvbikKKworY29uc3Qgb2lkICAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRbXSA9CiAgICAgeyBTTk1QTk9USUZZRklMVEVSVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZF9zaXplID0KK2NvbnN0IGludCAgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkKTsKIAogc25tcE5vdGlmeUZpbHRlclRhYmxlX3JlZ2lzdHJhdGlvbiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfdXNlcl9jb250ZXh0OwpAQCAtMjY3LDkgKzI3MCw5IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBzYXZlIGNoYW5nZWQgcm93cywgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICogbm90aWZ5IGxpYnJhcnkgdG8gc2F2ZSBjaGFuZ2VkIHJvd3MKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9zdG9yZShuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKICAgICAgICAgfQogCkBAIC01NDQsNyArNTQ3LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogYWxsb2NhdGUgc3BhY2UgZm9yIHNubXBOb3RpZnlGaWx0ZXJNYXNrIGRhdGEKICAgICAgICAgICovCi0gICAgICAgICgqc25tcE5vdGlmeUZpbHRlck1hc2tfdmFsX3B0cl9wdHIpID0KKyAgICAgICAgKCpzbm1wTm90aWZ5RmlsdGVyTWFza192YWxfcHRyX3B0cikgPSAoY2hhciopCiAgICAgICAgICAgICBtYWxsb2Mocm93cmVxX2N0eC0+ZGF0YS5zbm1wTm90aWZ5RmlsdGVyTWFza19sZW4gKgogICAgICAgICAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLnNubXBOb3RpZnlGaWx0ZXJNYXNrWzBdKSk7CiAgICAgICAgIGlmIChOVUxMID09ICgqc25tcE5vdGlmeUZpbHRlck1hc2tfdmFsX3B0cl9wdHIpKSB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaAppbmRleCA1YmZlYjdkLi4zZmYyZjk0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKQEAgLTMxMSw4ICszMTEsOCBAQAogICAgICAgICAqIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgKICAgICAgICAgKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgInNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDM0MmUwNjQuLjk0MmE4NjUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtOCw2ICs4LDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS92YWNtLmg+CkBAIC0yMCw2ICsyMSw4IEBACiAKICNpbmNsdWRlICJzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9nZXQpCisKIC8qKiBAaW5ncm91cCBpbnRlcmZhY2UgCiAgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKICAqCkBAIC0yNDMsNyArMjQ2LDggQEAKICAgICAgICAgKytjb3VudDsKICAgICB9CiAKLSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX2xvYWQiLCAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgY291bnQpKTsKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgImluc2VydGVkICUiIE5FVFNOTVBfUFJJeiAidSByZWNvcmRzXG4iLCBjb3VudCkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX2xvYWQgKi8KQEAgLTQ5NSw3ICs0OTksNyBAQAogewogICAgIG9pZCAgICAgICAgICAgICB0bXBfb2lkW01BWF9PSURfTEVOXTsKICAgICBuZXRzbm1wX2luZGV4ICAgdG1wX2lkeDsKLSAgICBpbnQgICAgICAgICAgICAgaSwgajsKKyAgICBzaXplX3QgICAgICAgICAgaSwgajsKICAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgKnM7CiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICp0bXA7CiAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcTsKQEAgLTUyNSw3ICs1MjksNyBAQAogICAgIC8qCiAgICAgICogYWxsb2NhdGUgdGVtcG9yYXJ5IHN0b3JhZ2UKICAgICAgKi8KLSAgICB0bXAgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSksIHMtPnNpemUgKyAxKTsKKyAgICB0bXAgPSAoc3RydWN0IHZhY21fdmlld0VudHJ5KiljYWxsb2Moc2l6ZW9mKHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSksIHMtPnNpemUgKyAxKTsKICAgICBpZiAoTlVMTCA9PSB0bXApIHsKICAgICAgICAgZnJlZShzLT5hcnJheSk7CiAgICAgICAgIGZyZWUocyk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jCmluZGV4IDQ4ZjNlN2UuLjQwNDBlM2YgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywyMiBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfY29udGFpbmVyX3Jvd19pbnNlcnQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfc2l6ZSwgc25tcE5vdGlmeUZpbHRlclRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wTm90aWZ5RmlsdGVyVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgc25tcE5vdGlmeUZpbHRlclRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wTm90aWZ5RmlsdGVyVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgc25tcE5vdGlmeUZpbHRlclRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX2dldCwgc25tcE5vdGlmeUZpbHRlclRhYmxlX2V4dGVybmFsX2FjY2VzcykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC05NiwxOSArMTEzLDIzIEBACiAgICAgX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24KICAgICAoc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gc25tcE5vdGlmeUZpbHRlclRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX1JFR0lTVFJBVElPTl9HRVQKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgogc25tcE5vdGlmeUZpbHRlclRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gc25tcE5vdGlmeUZpbHRlclRhYmxlX2lmX2N0eC51c2VyX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogc25tcE5vdGlmeUZpbHRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcmVnaXN0cmF0aW9uX3NldChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcmVnaXN0cmF0aW9uICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JlZykKQEAgLTExOCwxMiArMTM5LDE1IEBACiAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9DT05UQUlORVJfU0laRQogaW50CiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoc25tcE5vdGlmeUZpbHRlclRhYmxlX2lmX2N0eC5jb250YWluZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX0NPTlRBSU5FUl9TSVpFICovCiAKIHVfaW50CiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0yMjAsNyArMjQ0LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gU05NUE5PVElGWUZJTFRFUlRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBTTk1QTk9USUZZRklMVEVSVEFCTEVfTUFYX0NPTDsKQEAgLTI2MSw3ICsyODUsNyBAQAogICAgICAgICBfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9wb3N0X3JlcXVlc3Q7CiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgLyoKICAgICAgKiBSRVFVSVJFRCB3cmFwcGVycyBmb3Igc2V0IHJlcXVlc3QgaGFuZGxpbmcKICAgICAgKi8KQEAgLTI4Nyw3ICszMTEsNyBAQAogICAgICAqLwogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzID0KICAgICAgICAgX21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMzAzLDggKzMyNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIQU5ETEVSX0NBTl9SV1JJVEUKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEFORExFUl9DQU5fUldSSVRFCiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgewpAQCAtMzI1LDcgKzM0OSw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zNDgsNyArMzcyLDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTcyOSw3ICs3NTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC03NzQsNiArNzk4LDcgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfcG9zdF9yZXF1ZXN0ICovCiAKKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIHdyYXBwZXIKQEAgLTg0Nyw3ICs4NzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6c25tcE5vdGlmeUZpbHRlclRhYmxlOl9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC05NzQsNyArOTk5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC0xMDgyLDcgKzExMDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgsIHJvd3JlcV9jdHgpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NoZWNrX2luZGV4ZXMgKi8KIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTI1Myw3ICsxMjc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtMTMwMSw3ICsxMzI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6c25tcE5vdGlmeUZpbHRlclRhYmxlOl9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyIsICJjYWxsZWRcbiIpKTsKIApAQCAtMTM5NCw3ICsxNDE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6c25tcE5vdGlmeUZpbHRlclRhYmxlOl9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX3VuZG9fc2V0dXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNDU5LDcgKzE0ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYzsKIApAQCAtMTU3Myw3ICsxNTk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE2MjEsNyArMTY0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6c25tcE5vdGlmeUZpbHRlclRhYmxlOl9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE2NTQsNyArMTY3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpzbm1wTm90aWZ5RmlsdGVyVGFibGU6X21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfdW5kb19jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNzU0LDcgKzE3NzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTgxMCw3ICsxODM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLCBuZXRzbm1wX3JlcXVlc3RfaW5mbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdHMpCiB7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTgzOCw3ICsxODYzLDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pcnJldmVyc2libGVfY29tbWl0ICovCi0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIwMTMsMTUgKzIwMzgsMTggQEAKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfaW5pdF9wZXJzaXN0ZW5jZShuZXRzbm1wX2NvbnRhaW5lcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250YWluZXIpCiB7CisgICAgbmV0c25tcF9jb250YWluZXIgKipjb250YWluZXJfcDsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCByb3dfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfcm93X3Jlc3RvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgY29udGFpbmVyX3AgPSBuZXRzbm1wX21lbWR1cCgmY29udGFpbmVyLCBzaXplb2YoY29udGFpbmVyKSk7CisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyX3ApOwogICAgIHJjID0gc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfc2F2ZV9yb3dzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcCk7CiAKICAgICBpZiAocmMgIT0gU05NUF9FUlJfTk9FUlJPUikKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIGZvciBTVE9SRV9EQVRBIGNhbGxiYWNrICIKQEAgLTIwMzksOSArMjA2NywxMSBAQAogICAgICAgICAiI1xuIiAiIyBzbm1wTm90aWZ5RmlsdGVyVGFibGUgcGVyc2lzdGVudCBkYXRhXG4iICIjIjsKICAgICBjaGFyICAgICAgICAgICAqdHlwZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7Ci0gICAgbmV0c25tcF9jb250YWluZXIgKmMgPSAobmV0c25tcF9jb250YWluZXIgKikgY2xpZW50YXJnOworICAgIG5ldHNubXBfY29udGFpbmVyICpjID0gKihuZXRzbm1wX2NvbnRhaW5lciAqKiljbGllbnRhcmc7CiAKLSAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6c25tcE5vdGlmeUZpbHRlclRhYmxlOl9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX3NhdmVfcm93cyIsICJzYXZpbmcgJWQgcm93c1xuIiwgQ09OVEFJTkVSX1NJWkUoYykpKTsKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6c25tcE5vdGlmeUZpbHRlclRhYmxlOiIKKyAgICAgICAgICAgICAgICAiX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfc2F2ZV9yb3dzIiwKKyAgICAgICAgICAgICAgICAic2F2aW5nICUiIE5FVFNOTVBfUFJJeiAidSByb3dzXG4iLCBDT05UQUlORVJfU0laRShjKSkpOwogCiAgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKICAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBidWYpOwpAQCAtMjA5Miw3ICsyMTIyLDcgQEAKICAgICAgKiBiZSB0cmVhdGVkIGEgbGl0dGxlIGRpZmZlcmVudGx5LiBTcGVjaWZpY2FsbHksIHlvdSB3aWxsIG5lZWQKICAgICAgKiAoNCAqIGxlbikgKyA0IFszIEFTQ0lJIGNoYXJzIHBlciBieXRlICsgMSBmb3IgLiwgKyA0IGZvciBsZW5dLgogICAgICAqCi0gICAgICogMykgQWxzbywgcmVtZWJlciB0byBhZGQgc3BhY2UgZm9yIHRoZSBpZGVudGlmaWVyIGFuZCBzZXBlcmF0b3IKKyAgICAgKiAzKSBBbHNvLCByZW1lbWJlciB0byBhZGQgc3BhY2UgZm9yIHRoZSBpZGVudGlmaWVyIGFuZCBzZXBhcmF0b3IKICAgICAgKiBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgZWFjaCBjb2x1bW4gaXMgcHJlZml4ZWQgYnkgdGhlCiAgICAgICogY29sdW1uIG51bWJlciBhbmQgYSBzZW1pY29sb24uIFRvIGFsbG93IGZvciB0aGUgbWF4aW11bQogICAgICAqIGNvbHVtbiB2YWx1ZXMsIDEyIGJ5dGVzIFsxMSBmb3Igb2lkICsgMSBmb3IgJzonXSBwZXIKQEAgLTIyMjAsNyArMjI1MCw3IEBACiAgICAgICogbG9vcCB0aHJvdWdoIGFuZCBnZXQgZWFjaCBjb2x1bW4KICAgICAgKi8KICAgICBidWYgPSBza2lwX3doaXRlKGJ1Zik7Ci0gICAgd2hpbGUgKChOVUxMICE9IGJ1ZikgJiYgaXNkaWdpdCgqYnVmKSkgeworICAgIHdoaWxlICgoTlVMTCAhPSBidWYpICYmIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpidWYpKSkgewogICAgICAgICAvKgogICAgICAgICAgKiBleHRyYWN0IGNvbHVtbiwgc2tpcCAnOicKICAgICAgICAgICovCkBAIC0yNDAzLDYgKzI0MzMsNyBAQAogfQogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfRVhURVJOQUxfQUNDRVNTCiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqCiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9taWJfaW5kZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KQpAQCAtMjQyNSw4ICsyNDU2LDkgQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9CisgICAgcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5jCmluZGV4IDA1ZDgzMTEuLjUwMTAxOTcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAidXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICB1c21ESFVzZXJLZXlUYWJsZV9vaWRbXSA9IHsgVVNNREhVU0VSS0VZVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgdXNtREhVc2VyS2V5VGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIHVzbURIVXNlcktleVRhYmxlX29pZFtdID0geyBVU01ESFVTRVJLRVlUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICB1c21ESFVzZXJLZXlUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKHVzbURIVXNlcktleVRhYmxlX29pZCk7CiAKIHVzbURIVXNlcktleVRhYmxlX3JlZ2lzdHJhdGlvbiB1c21ESFVzZXJLZXlUYWJsZV91c2VyX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuaAppbmRleCBlMjBkNWJjLi5iMzQzZDc4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmgKQEAgLTE5OSw4ICsxOTksOCBAQAogICAgICAgICAqdXNtREhVc2VyS2V5VGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgICh1c21ESFVzZXJLZXlUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICB1c21ESFVzZXJLZXlUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgdXNtREhVc2VyS2V5VGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIHVzbURIVXNlcktleVRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICB1c21ESFVzZXJLZXlUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAidXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCAzNTFjYmQzLi5hMTM5YzlmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgICAgICArK2NvdW50OwogICAgIH0KIAotICAgIERFQlVHTVNHVCgoInZlcmJvc2U6dXNtREhVc2VyS2V5VGFibGU6dXNtREhVc2VyS2V5VGFibGVfY29udGFpbmVyX2xvYWQiLCAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgY291bnQpKTsKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnVzbURIVXNlcktleVRhYmxlOnVzbURIVXNlcktleVRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImluc2VydGVkICVkIHJlY29yZHNcbiIsIChpbnQpY291bnQpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNtREhVc2VyS2V5VGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmMgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5jCmluZGV4IGQ2MDljZTYuLjQyN2QyNmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAjZGVmaW5lIE5FRURfVVNNREhfRlVOQ1RJT05TCiAjaW5jbHVkZSAidXNtREhVc2VyS2V5VGFibGUuaCIKKyNpbmNsdWRlICJzbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFBhcmFtZXRlcnMvdXNtREhQYXJhbWV0ZXJzLmgiCiAKIERIICAgICAgICAgICAgICoKIHVzbURIR2V0VXNlckRIcHRyKHN0cnVjdCB1c21Vc2VyICp1c2VyLCBpbnQgZm9yX2F1dGhfa2V5KQpAQCAtNTcsNyArNTgsNyBAQAogCiBpbnQKIHVzbURIR2V0VXNlcktleUNoYW5nZShzdHJ1Y3QgdXNtVXNlciAqdXNlciwgaW50IGZvcl9hdXRoX2tleSwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqa2V5b2JqLCBzaXplX3QgKmtleW9ial9sZW4pCisgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqa2V5b2JqLCBzaXplX3QgKmtleW9ial9sZW4pCiB7CiAgICAgREggICAgICAgICAgICAgKmRoOwogCkBAIC0xODMsNyArMTg0LDcgQEAKIGludAogdXNtREhVc2VyS2V5VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCh1c21ESFVzZXJLZXlUYWJsZV9taWJfaW5kZXggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21Vc2VyRW5naW5lSURfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21Vc2VyRW5naW5lSURfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbVVzZXJFbmdpbmVJRF92YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtVXNlck5hbWVfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbVVzZXJOYW1lX3ZhbF9wdHJfbGVuKQpAQCAtMjQ1LDcgKzI0Niw3IEBACiAgKi8KIGludAogdXNtREhVc2VyS2V5VGFibGVfaW5kZXhlc19zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21Vc2VyRW5naW5lSURfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtVXNlck5hbWVfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21Vc2VyTmFtZV92YWxfcHRyX2xlbikKQEAgLTMyOCw3ICszMjksNyBAQAogICovCiBpbnQKIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfZ2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKip1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuX3B0cikKIHsKICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCkBAIC00MTEsNyArNDEyLDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX2dldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW5fcHRyKQogewpAQCAtNDk1LDcgKzQ5Niw3IEBACiAgKi8KIGludAogdXNtREhVc2VyUHJpdktleUNoYW5nZV9nZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW5fcHRyKQogewogICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciBhbmQgZW5vdWdoIHN0b3JhZ2UgKi8KQEAgLTU3OCw3ICs1NzksNyBAQAogICovCiBpbnQKIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfZ2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKip1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbl9wdHIpCiB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuaAppbmRleCBiNzI1ZTExLi44M2MwMjhlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmgKQEAgLTI2LDcgKzI2LDggQEAKIAogI2lmZGVmIE5FRURfVVNNREhfRlVOQ1RJT05TCiAgICAgaW50ICAgICAgICAgICAgIHVzbURIR2V0VXNlcktleUNoYW5nZShzdHJ1Y3QgdXNtVXNlciAqdXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JfYXV0aF9rZXksIGNoYXIgKiprZXlvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9yX2F1dGhfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqa2V5b2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICprZXlvYmpfbGVuKTsKICAgICBESCAgICAgICAgICAgICAqdXNtREhHZXRVc2VyREhwdHIoc3RydWN0IHVzbVVzZXIgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JfYXV0aF9rZXkpOwpAQCAtNTQsMjkgKzU1LDM4IEBACiAgICAgICovCiAKICAgICBpbnQgICAgICAgICAgICAgdXNtREhVc2VyQXV0aEtleUNoYW5nZV9nZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW5fcHRyKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9nZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuX3B0cik7CiAgICAgaW50ICAgICAgICAgICAgIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfZ2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuX3B0cik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfZ2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbl9wdHIpOwogCiAKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyS2V5VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCh1c21ESFVzZXJLZXlUYWJsZV9taWJfaW5kZXggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21Vc2VyRW5naW5lSURfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21Vc2VyRW5naW5lSURfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtVXNlck5hbWVfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKQEAgLTg0LDcgKzk0LDcgQEAKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyS2V5VGFibGVfaW5kZXhlc19zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbVVzZXJFbmdpbmVJRF92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbVVzZXJFbmdpbmVJRF92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21Vc2VyTmFtZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtVXNlck5hbWVfdmFsX3B0cl9sZW4pOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuYyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmMKaW5kZXggZWEwOGMxMC4uNTY3ZDIwZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5jCkBAIC0yMiwxMyArMjIsMTMgQEAKIAogaW50CiB1c21ESFVzZXJDaGVja1ZhbHVlKHN0cnVjdCB1c21Vc2VyICp1c2VyLCBpbnQgZm9yX2F1dGhfa2V5LAotICAgICAgICAgICAgICAgICAgICBjaGFyICp2YWwsIHNpemVfdCB2YWxfbGVuKQorICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnZhbCwgc2l6ZV90IHZhbF9sZW4pCiB7CiAgICAgLyoKICAgICAgKiBUaGUgc2V0IHZhbHVlIG11c3QgYmUgY29tcG9zZWQgb2YgMiBwYXJ0cywgdGhlIGZpcnN0IGJlaW5nIHRoZQogICAgICAqIGN1cnJlbnQgdmFsdWUgCiAgICAgICovCi0gICAgY2hhciAgICAgICAgICAgKmN1cnJlbnRfdmFsdWU7CisgICAgdV9jaGFyICAgICAgICAgKmN1cnJlbnRfdmFsdWU7CiAgICAgc2l6ZV90ICAgICAgICAgIGN1cnJlbnRfdmFsdWVfbGVuOwogCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6dXNtREhVc2VyS2V5VGFibGU6dXNtREhVc2VyQ2hlY2tWYWx1ZSIsCkBAIC01MCwxMSArNTAsMTEgQEAKIAogaW50CiB1c21ESFNldEtleShzdHJ1Y3QgdXNtVXNlciAqdXNlciwgaW50IGZvcl9hdXRoX2tleSwKLSAgICAgICAgICAgIGNoYXIgKnZhbCwgc2l6ZV90IHZhbF9sZW4pCisgICAgICAgICAgICB1X2NoYXIgKnZhbCwgc2l6ZV90IHZhbF9sZW4pCiB7CiAgICAgREggICAgICAgICAgICAgKmRoOwogICAgIEJJR05VTSAgICAgICAgICpvdGhlcl9wdWI7Ci0gICAgY2hhciAgICAgICAgICAgKmtleTsKKyAgICB1X2NoYXIgICAgICAgICAqa2V5OwogICAgIHNpemVfdCAgICAgICAgICBrZXlfbGVuOwogCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6dXNtREhVc2VyS2V5VGFibGU6dXNtREhTZXRLZXkiLCAiY2FsbGVkXG4iKSk7CkBAIC0zMzYsNyArMzM2LDYgQEAKIHVzbURIVXNlcktleVRhYmxlX2NvbW1pdCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBNRkRfU1VDQ0VTUzsKLSAgICBpbnQgICAgICAgICAgICAgc2F2ZV9mbGFnczsKIAogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnVzbURIVXNlcktleVRhYmxlOnVzbURIVXNlcktleVRhYmxlX2NvbW1pdCIsCiAgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOwpAQCAtNTI4LDcgKzUyNyw3IEBACiBpbnQKIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfY2hlY2tfdmFsdWUodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKQogewpAQCAtNjA1LDcgKzYwNCw3IEBACiAgKi8KIGludAogdXNtREhVc2VyQXV0aEtleUNoYW5nZV9zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKQogewogCkBAIC03MjgsOCArNzI3LDkgQEAKICAqLwogaW50CiB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pCiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6dXNtREhVc2VyS2V5VGFibGU6dXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9jaGVja192YWx1ZSIsICJjYWxsZWRcbiIpKTsKQEAgLTc5OCw3ICs3OTgsNyBAQAogICovCiBpbnQKIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2Vfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbikKIHsKIApAQCAtOTEyLDcgKzkxMiw3IEBACiBpbnQKIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfY2hlY2tfdmFsdWUodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKQogewpAQCAtOTg5LDcgKzk4OSw3IEBACiAgKi8KIGludAogdXNtREhVc2VyUHJpdktleUNoYW5nZV9zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKQogewogCkBAIC0xMTEzLDggKzExMTMsOSBAQAogICovCiBpbnQKIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfY2hlY2tfdmFsdWUodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbikKIHsKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTp1c21ESFVzZXJLZXlUYWJsZTp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX2NoZWNrX3ZhbHVlIiwgImNhbGxlZFxuIikpOwpAQCAtMTE4Myw3ICsxMTg0LDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pCiB7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmggYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5oCmluZGV4IDA0ZjRlYmUuLmU3YzcwNTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuaApAQCAtNTQsMTUgKzU0LDE5IEBACiAKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyQXV0aEtleUNoYW5nZV9jaGVja192YWx1ZSh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3VuZG9fc2V0dXAodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKICAgICBpbnQgICAgICAgICAgICAgdXNtREhVc2VyQXV0aEtleUNoYW5nZV9zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyQXV0aEtleUNoYW5nZV91bmRvKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgpAQCAtNzAsMTYgKzc0LDIwIEBACiAKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9jaGVja192YWx1ZSh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdW5kb19zZXR1cCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV91bmRvKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgpAQCAtODcsMTUgKzk1LDE5IEBACiAKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyUHJpdktleUNoYW5nZV9jaGVja192YWx1ZSh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3VuZG9fc2V0dXAodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKICAgICBpbnQgICAgICAgICAgICAgdXNtREhVc2VyUHJpdktleUNoYW5nZV9zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyUHJpdktleUNoYW5nZV91bmRvKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgpAQCAtMTAzLDE2ICsxMTUsMjAgQEAKIAogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV91bmRvX3NldHVwKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2Vfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3VuZG8odXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jCmluZGV4IDlhYmFmOWMuLjA0MjMxZjkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxMCBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC0xODQsNyArMTg5LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gVVNNREhVU0VSS0VZVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IFVTTURIVVNFUktFWVRBQkxFX01BWF9DT0w7CkBAIC03NjQsNyArNzY5LDcgQEAKICAgICBjYXNlIENPTFVNTl9VU01ESFVTRVJBVVRIS0VZQ0hBTkdFOgogICAgICAgICB2YXItPnR5cGUgPSBBU05fT0NURVRfU1RSOwogICAgICAgICByYyA9IHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfZ2V0KHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZ2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTc3NCw3ICs3NzksNyBAQAogICAgIGNhc2UgQ09MVU1OX1VTTURIVVNFUk9XTkFVVEhLRVlDSEFOR0U6CiAgICAgICAgIHZhci0+dHlwZSA9IEFTTl9PQ1RFVF9TVFI7CiAgICAgICAgIHJjID0gdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9nZXQocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJnZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbF9sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtNzg0LDcgKzc4OSw3IEBACiAgICAgY2FzZSBDT0xVTU5fVVNNREhVU0VSUFJJVktFWUNIQU5HRToKICAgICAgICAgdmFyLT50eXBlID0gQVNOX09DVEVUX1NUUjsKICAgICAgICAgcmMgPSB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX2dldChyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCkBAIC03OTQsNyArNzk5LDcgQEAKICAgICBjYXNlIENPTFVNTl9VU01ESFVTRVJPV05QUklWS0VZQ0hBTkdFOgogICAgICAgICB2YXItPnR5cGUgPSBBU05fT0NURVRfU1RSOwogICAgICAgICByYyA9IHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfZ2V0KHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZ2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTkxOSw3ICs5MjQsNyBAQAogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbURIVXNlcktleVRhYmxlOl91c21ESFVzZXJLZXlUYWJsZV9jaGVja19jb2x1bW46dXNtREhVc2VyQXV0aEtleUNoYW5nZSIsICJ2YXJiaW5kIHZhbGlkYXRpb24gZmFpbGVkIChlZyBiYWQgdHlwZSBvciBzaXplKVxuIikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmMgPSB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCB2YXItPnZhbF9sZW4pOwogICAgICAgICAgICAgaWYgKChNRkRfU1VDQ0VTUyAhPSByYykgJiYgKE1GRF9OT1RfVkFMSURfRVZFUiAhPSByYykKICAgICAgICAgICAgICAgICAmJiAoTUZEX05PVF9WQUxJRF9OT1cgIT0gcmMpKSB7CkBAIC05NDAsNyArOTQ1LDcgQEAKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c21ESFVzZXJLZXlUYWJsZTpfdXNtREhVc2VyS2V5VGFibGVfY2hlY2tfY29sdW1uOnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2UiLCAidmFyYmluZCB2YWxpZGF0aW9uIGZhaWxlZCAoZWcgYmFkIHR5cGUgb3Igc2l6ZSlcbiIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJjID0gdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9jaGVja192YWx1ZShyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOwogICAgICAgICAgICAgaWYgKChNRkRfU1VDQ0VTUyAhPSByYykgJiYgKE1GRF9OT1RfVkFMSURfRVZFUiAhPSByYykKQEAgLTk2Miw3ICs5NjcsNyBAQAogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbURIVXNlcktleVRhYmxlOl91c21ESFVzZXJLZXlUYWJsZV9jaGVja19jb2x1bW46dXNtREhVc2VyUHJpdktleUNoYW5nZSIsICJ2YXJiaW5kIHZhbGlkYXRpb24gZmFpbGVkIChlZyBiYWQgdHlwZSBvciBzaXplKVxuIikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmMgPSB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCB2YXItPnZhbF9sZW4pOwogICAgICAgICAgICAgaWYgKChNRkRfU1VDQ0VTUyAhPSByYykgJiYgKE1GRF9OT1RfVkFMSURfRVZFUiAhPSByYykKICAgICAgICAgICAgICAgICAmJiAoTUZEX05PVF9WQUxJRF9OT1cgIT0gcmMpKSB7CkBAIC05ODMsNyArOTg4LDcgQEAKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c21ESFVzZXJLZXlUYWJsZTpfdXNtREhVc2VyS2V5VGFibGVfY2hlY2tfY29sdW1uOnVzbURIVXNlck93blByaXZLZXlDaGFuZ2UiLCAidmFyYmluZCB2YWxpZGF0aW9uIGZhaWxlZCAoZWcgYmFkIHR5cGUgb3Igc2l6ZSlcbiIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJjID0gdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9jaGVja192YWx1ZShyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOwogICAgICAgICAgICAgaWYgKChNRkRfU1VDQ0VTUyAhPSByYykgJiYgKE1GRF9OT1RfVkFMSURfRVZFUiAhPSByYykKQEAgLTEyODMsNyArMTI4OCw3IEBACiAgICAgY2FzZSBDT0xVTU5fVVNNREhVU0VSQVVUSEtFWUNIQU5HRToKICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fVVNNREhVU0VSQVVUSEtFWUNIQU5HRV9GTEFHOwogICAgICAgICByYyA9IHVzbURIVXNlckF1dGhLZXlDaGFuZ2Vfc2V0KHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtMTI5NCw3ICsxMjk5LDcgQEAKICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PQogICAgICAgICAgICAgQ09MVU1OX1VTTURIVVNFUk9XTkFVVEhLRVlDSEFOR0VfRkxBRzsKICAgICAgICAgcmMgPSB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3NldChyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTEzMDQsNyArMTMwOSw3IEBACiAgICAgY2FzZSBDT0xVTU5fVVNNREhVU0VSUFJJVktFWUNIQU5HRToKICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fVVNNREhVU0VSUFJJVktFWUNIQU5HRV9GTEFHOwogICAgICAgICByYyA9IHVzbURIVXNlclByaXZLZXlDaGFuZ2Vfc2V0KHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtMTMxNSw3ICsxMzIwLDcgQEAKICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PQogICAgICAgICAgICAgQ09MVU1OX1VTTURIVVNFUk9XTlBSSVZLRVlDSEFOR0VfRkxBRzsKICAgICAgICAgcmMgPSB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3NldChyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jCmluZGV4IDRjYTI5ODcuLmU3NTY3ODggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYwpAQCAtMywyOCArMyw0MSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0jaW5jbHVkZSAibWliSUkvc3lzT1JUYWJsZS5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJzbm1wRW5naW5lLmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wZW5naW5lX2FsbCwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9zbm1wRW5naW5lX3NjYWxhcnNfY29udGV4dCwgc25tcGVuZ2luZV9hbGwpCisKIHN0cnVjdCB2YXJpYWJsZTIgc25tcEVuZ2luZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7U05NUEVOR0lORUlELCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3NubXBFbmdpbmUsIDEsIHsxfX0sCisgICAge1NOTVBFTkdJTkVJRCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wRW5naW5lLCAxLCB7MX19LAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCi0gICAge1NOTVBFTkdJTkVCT09UUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3NubXBFbmdpbmUsIDEsIHsyfX0sCi0gICAge1NOTVBFTkdJTkVUSU1FLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfc25tcEVuZ2luZSwgMSwgezN9fSwKKyAgICB7U05NUEVOR0lORUJPT1RTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfc25tcEVuZ2luZSwgMSwgezJ9fSwKKyAgICB7U05NUEVOR0lORVRJTUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9zbm1wRW5naW5lLCAxLCB7M319LAogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCi0gICAge1NOTVBFTkdJTkVCT09UUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfc25tcEVuZ2luZSwgMSwgezJ9fSwKLSAgICB7U05NUEVOR0lORVRJTUUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3NubXBFbmdpbmUsIDEsIHszfX0sCisgICAge1NOTVBFTkdJTkVCT09UUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcEVuZ2luZSwgMSwgezJ9fSwKKyAgICB7U05NUEVOR0lORVRJTUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBFbmdpbmUsIDEsIHszfX0sCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLwotICAgIHtTTk1QRU5HSU5FTUFYTUVTU0FHRVNJWkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3NubXBFbmdpbmUsIDEsIHs0fX0sCisjZWxzZSAgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKKyAgICB7U05NUEVOR0lORUJPT1RTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wRW5naW5lLCAxLCB7Mn19LAorICAgIHtTTk1QRU5HSU5FVElNRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcEVuZ2luZSwgMSwgezN9fSwKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAorICAgIHtTTk1QRU5HSU5FTUFYTUVTU0FHRVNJWkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBFbmdpbmUsIDEsIHs0fX0sCiB9OwogCiAvKgpAQCAtNDAsNiArNTMsNyBAQAogICAgICAgICAgICAgICAgICBzbm1wRW5naW5lX3ZhcmlhYmxlc19vaWQpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfU05NUEVOR0lORV9TQ0FMQVJTX0NPTlRFWFQKIHZvaWQKIHJlZ2lzdGVyX3NubXBFbmdpbmVfc2NhbGFyc19jb250ZXh0KGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQogewpAQCAtNTIsMjUgKzY2LDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9NSUJfUFJJT1JJVFksIDAsIDAsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUsIC0xLCAwKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1NOTVBFTkdJTkVfU0NBTEFSU19DT05URVhUICovCiAKIHZvaWQKIGluaXRfc25tcEVuZ2luZSh2b2lkKQogewotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCi0gICAgc3RhdGljIG9pZCAgICAgIHJlZ1tdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMCwgMywgMSwgMSB9OwotICAgIHJlZ2lzdGVyX3N5c09SVGFibGUocmVnLCAxMCwgIlRoZSBTTk1QIE1hbmFnZW1lbnQgQXJjaGl0ZWN0dXJlIE1JQi4iKTsKLSNlbmRpZgorICAgIG9pZCAgICAgIHJlZ1tdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMCwgMywgMSwgMSB9OworICAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKHJlZywgIlRoZSBTTk1QIE1hbmFnZW1lbnQgQXJjaGl0ZWN0dXJlIE1JQi4iKTsKICAgICByZWdpc3Rlcl9zbm1wRW5naW5lX3NjYWxhcnMoKTsKIH0KIAotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKIGludCAgICAgICAgICAgICB3cml0ZV9lbmdpbmVCb290cyhpbnQsIHVfY2hhciAqLCB1X2NoYXIsIHNpemVfdCwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICosIHNpemVfdCk7CiBpbnQgICAgICAgICAgICAgd3JpdGVfZW5naW5lVGltZShpbnQsIHVfY2hhciAqLCB1X2NoYXIsIHNpemVfdCwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiwgc2l6ZV90KTsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIHVfY2hhciAgICAgICAgICoKIHZhcl9zbm1wRW5naW5lKHN0cnVjdCB2YXJpYWJsZSAqdnAsCkBAIC04NSwxMSArOTgsMTEgQEAKICAgICBzdGF0aWMgbG9uZyAgICAgbG9uZ19yZXQ7CiAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZW5naW5lSURbU05NUF9NQVhCVUZdOwogCi0gICAgKndyaXRlX21ldGhvZCA9IDA7ICAgICAgICAgIC8qIGFzc3VtZSBpdCBpc250IHdyaXRhYmxlIGZvciB0aGUgdGltZSBiZWluZyAqLworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7ICAgIC8qIGFzc3VtZSBpdCBpc250IHdyaXRhYmxlIGZvciB0aGUgdGltZSBiZWluZyAqLwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsgICAgICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIgaWYgbm90ICovCiAKICAgICBpZiAoaGVhZGVyX2dlbmVyaWModnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCiAgICAgICogdGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgdmFsdWUgYXNzaWdubWVudHMgZm9yIHRoZSBtaWIgcmVzdWx0cy4gCkBAIC0xMDQsMTYgKzExNywyMCBAQAogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgZW5naW5lSUQ7CiAKICAgICBjYXNlIFNOTVBFTkdJTkVCT09UUzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9lbmdpbmVCb290czsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBsb25nX3JldCA9IHNubXB2M19sb2NhbF9zbm1wRW5naW5lQm9vdHMoKTsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldDsKIAogICAgIGNhc2UgU05NUEVOR0lORVRJTUU6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZW5naW5lVGltZTsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBsb25nX3JldCA9IHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSgpOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0OwogCkBAIC0xMjUsOSArMTQyLDExIEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfc25tcEVuZ2luZVxuIiwKICAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBOVUxMOwogfQogCisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCiAvKgogICogd3JpdGVfZW5naW5lQm9vdHMoKToKQEAgLTIyNCwzICsyNDMsNCBAQAogfQogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaCBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmgKaW5kZXggMzQzZWVhYS4uYjYyYTIyMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oCkBAIC0xMCwxMCArMTAsMTAgQEAKICNkZWZpbmUgX01JQkdST1VQX1NOTVBFTkdJTkVfSAogCiAvKgotICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGFuZCBjaGVja21pYiBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKKyAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZQogICovCiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogY29uZmlnX2FkZF9taWIoU05NUC1GUkFNRVdPUkstTUlCKQogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYwppbmRleCBjN2VmYmM4Li5hZTc5MmRmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jCkBAIC0zLDI0ICszLDIxIEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJtaWJJSS9zeXNPUlRhYmxlLmgiCiAjaW5jbHVkZSAic25tcE1QRFN0YXRzLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAogCiBzdHJ1Y3QgdmFyaWFibGUyIHNubXBNUERTdGF0c192YXJpYWJsZXNbXSA9IHsKLSAgICB7U05NUFVOS05PV05TRUNVUklUWU1PREVMUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcE1QRFN0YXRzLCAxLAotICAgICB7MX19LAotICAgIHtTTk1QSU5WQUxJRE1TR1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXBNUERTdGF0cywgMSwgezJ9fSwKLSAgICB7U05NUFVOS05PV05QRFVIQU5ETEVSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcE1QRFN0YXRzLCAxLCB7M319LAorICAgIHtTTk1QVU5LTk9XTlNFQ1VSSVRZTU9ERUxTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wTVBEU3RhdHMsIDEsIHsxfX0sCisgICAge1NOTVBJTlZBTElETVNHUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcE1QRFN0YXRzLCAxLCB7Mn19LAorICAgIHtTTk1QVU5LTk9XTlBEVUhBTkRMRVJTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wTVBEU3RhdHMsIDEsIHszfX0sCiB9OwogCiAvKgpAQCAtMzIsMTIgKzI5LDkgQEAKIHZvaWQKIGluaXRfc25tcE1QRFN0YXRzKHZvaWQpCiB7Ci0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKICAgICBzdGF0aWMgb2lkICAgICAgcmVnW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDExLCAzLCAxLCAxIH07Ci0gICAgcmVnaXN0ZXJfc3lzT1JUYWJsZShyZWcsIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBNSUIgZm9yIE1lc3NhZ2UgUHJvY2Vzc2luZyBhbmQgRGlzcGF0Y2hpbmcuIik7Ci0jZW5kaWYKLQorICAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE1JQiBmb3IgTWVzc2FnZSBQcm9jZXNzaW5nIGFuZCBEaXNwYXRjaGluZy4iKTsKICAgICBSRUdJU1RFUl9NSUIoInNubXB2My9zbm1wTVBEU3RhdHMiLCBzbm1wTVBEU3RhdHNfdmFyaWFibGVzLCB2YXJpYWJsZTIsCiAgICAgICAgICAgICAgICAgIHNubXBNUERTdGF0c192YXJpYWJsZXNfb2lkKTsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaCBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaAppbmRleCBkMTdjMzcxLi40MWVhYjFkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oCkBAIC04LDEwICs4LDExIEBACiAjZGVmaW5lIF9NSUJHUk9VUF9TTk1QTVBEU1RBVFNfSAogCiAvKgotICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGFuZCBjaGVja21pYiBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKKyAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKICAqLwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKK2NvbmZpZ19leGNsdWRlKHNubXB2My9zbm1wTVBEU3RhdHNfNV81KQogY29uZmlnX2FkZF9taWIoU05NUC1NUEQtTUlCKQogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZmMyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBzbm1wTVBEU3RhdHMuYzogdGFsbGllcyBlcnJvcnMgZm9yIFNOTVB2MyBtZXNzYWdlIHByb2Nlc3NpbmcuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CisKKyNpbmNsdWRlICJzbm1wTVBEU3RhdHNfNV81LmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaD4KKworI2RlZmluZSBzbm1wTVBETUlCIDEsIDMsIDYsIDEsIDYsIDMsIDExCisjZGVmaW5lIHNubXBNUERNSUJPYmplY3RzIHNubXBNUERNSUIsIDIKKyNkZWZpbmUgc25tcE1QRE1JQkNvbXBsaWFuY2VzIHNubXBNUERNSUIsIDMsIDEKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVscGVyX3N0YXRpc3RpY3MpCisKK3N0YXRpYyBvaWQgc25tcE1QRFN0YXRzW10gPSB7IHNubXBNUERNSUJPYmplY3RzLCAxIH07CisKK3N0YXRpYyBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKiBzbm1wTVBEU3RhdHNfcmVnID0gTlVMTDsKK3N0YXRpYyBvaWQgc25tcE1QRENvbXBsaWFuY2VbXSA9IHsgc25tcE1QRE1JQkNvbXBsaWFuY2VzLCAxIH07CisKK3ZvaWQKK2luaXRfc25tcE1QRFN0YXRzXzVfNSh2b2lkKQoreworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qIHMgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICJzbm1wTVBEU3RhdHMiLCBOVUxMLCBzbm1wTVBEU3RhdHMsIE9JRF9MRU5HVEgoc25tcE1QRFN0YXRzKSwKKyAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAocyAmJgorCU5FVFNOTVBfUkVHSVNURVJfU1RBVElTVElDX0hBTkRMRVIocywgMSwgTVBEKSA9PSBNSUJfUkVHSVNURVJFRF9PSykgeworICAgICAgICBSRUdJU1RFUl9TWVNPUl9FTlRSWShzbm1wTVBEQ29tcGxpYW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBNSUIgZm9yIE1lc3NhZ2UgUHJvY2Vzc2luZyBhbmQgRGlzcGF0Y2hpbmcuIik7CisgICAgICAgIHNubXBNUERTdGF0c19yZWcgPSBzOworICAgIH0KK30KKwordm9pZAorc2h1dGRvd25fc25tcE1QRFN0YXRzXzVfNSh2b2lkKQoreworICAgIFVOUkVHSVNURVJfU1lTT1JfRU5UUlkoc25tcE1QRENvbXBsaWFuY2UpOworICAgIGlmIChzbm1wTVBEU3RhdHNfcmVnKSB7CisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKHNubXBNUERTdGF0c19yZWcpOworICAgICAgICBzbm1wTVBEU3RhdHNfcmVnID0gTlVMTDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGYzZGZmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9NSUJHUk9VUF9TTk1QTVBEU1RBVFNfSAorI2RlZmluZSBfTUlCR1JPVVBfU05NUE1QRFNUQVRTX0gKKworY29uZmlnX2V4Y2x1ZGUoc25tcHYzL3NubXBNUERTdGF0cykKK2NvbmZpZ19hZGRfbWliKFNOTVAtTVBELU1JQikKKwordm9pZCBpbml0X3NubXBNUERTdGF0c181XzUodm9pZCk7Cit2b2lkIHNodXRkb3duX3NubXBNUERTdGF0c181XzUodm9pZCk7CisKKyNlbmRpZiAvKiBfTUlCR1JPVVBfU05NUE1QRFNUQVRTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMKaW5kZXggZDgxZTEyNy4uNzE4ZTA3MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMKQEAgLTQsMjYgKzQsMjYgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLSNpbmNsdWRlICJtaWJJSS9zeXNPUlRhYmxlLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgInVzbVN0YXRzLmgiCiAKIHN0cnVjdCB2YXJpYWJsZTIgdXNtU3RhdHNfdmFyaWFibGVzW10gPSB7Ci0gICAge1VTTVNUQVRTVU5TVVBQT1JURURTRUNMRVZFTFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3VzbVN0YXRzLCAxLAotICAgICB7MX19LAotICAgIHtVU01TVEFUU05PVElOVElNRVdJTkRPV1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3VzbVN0YXRzLCAxLCB7Mn19LAotICAgIHtVU01TVEFUU1VOS05PV05VU0VSTkFNRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3VzbVN0YXRzLCAxLCB7M319LAotICAgIHtVU01TVEFUU1VOS05PV05FTkdJTkVJRFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3VzbVN0YXRzLCAxLCB7NH19LAotICAgIHtVU01TVEFUU1dST05HRElHRVNUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfdXNtU3RhdHMsIDEsIHs1fX0sCi0gICAge1VTTVNUQVRTREVDUllQVElPTkVSUk9SUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfdXNtU3RhdHMsIDEsIHs2fX0sCisgICAge1VTTVNUQVRTVU5TVVBQT1JURURTRUNMRVZFTFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3VzbVN0YXRzLCAxLCB7MX19LAorICAgIHtVU01TVEFUU05PVElOVElNRVdJTkRPV1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3VzbVN0YXRzLCAxLCB7Mn19LAorICAgIHtVU01TVEFUU1VOS05PV05VU0VSTkFNRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3VzbVN0YXRzLCAxLCB7M319LAorICAgIHtVU01TVEFUU1VOS05PV05FTkdJTkVJRFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3VzbVN0YXRzLCAxLCB7NH19LAorICAgIHtVU01TVEFUU1dST05HRElHRVNUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdXNtU3RhdHMsIDEsIHs1fX0sCisgICAge1VTTVNUQVRTREVDUllQVElPTkVSUk9SUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdXNtU3RhdHMsIDEsIHs2fX0sCiB9OwogCiAvKgpAQCAtMzUsMTIgKzM1LDEwIEBACiB2b2lkCiBpbml0X3VzbVN0YXRzKHZvaWQpCiB7Ci0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKICAgICBzdGF0aWMgb2lkICAgICAgcmVnW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDE1LCAyLCAxLCAxIH07Ci0gICAgcmVnaXN0ZXJfc3lzT1JUYWJsZShyZWcsIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBtYW5hZ2VtZW50IGluZm9ybWF0aW9uIGRlZmluaXRpb25zIGZvciB0aGUgU05NUCBVc2VyLWJhc2VkIFNlY3VyaXR5IE1vZGVsLiIpOwotI2VuZGlmCi0KKyAgICBSRUdJU1RFUl9TWVNPUl9FTlRSWShyZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBtYW5hZ2VtZW50IGluZm9ybWF0aW9uIGRlZmluaXRpb25zIGZvciB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJTTk1QIFVzZXItYmFzZWQgU2VjdXJpdHkgTW9kZWwuIik7CiAgICAgUkVHSVNURVJfTUlCKCJzbm1wdjMvdXNtU3RhdHMiLCB1c21TdGF0c192YXJpYWJsZXMsIHZhcmlhYmxlMiwKICAgICAgICAgICAgICAgICAgdXNtU3RhdHNfdmFyaWFibGVzX29pZCk7CiB9CkBAIC03Myw1ICs3MSw2IEBACiAgICAgICAgIGxvbmdfcmV0ID0gc25tcF9nZXRfc3RhdGlzdGljKHRtYWdpYyArIFNUQVRfVVNNX1NUQVRTX1NUQVJUKTsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldDsKICAgICB9CisKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmgKaW5kZXggNzE4OGUxYS4uNTY4NTM4MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmgKQEAgLTksMTAgKzksMTEgQEAKICNkZWZpbmUgX01JQkdST1VQX1VTTVNUQVRTX0gKIAogLyoKLSAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBhbmQgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCisgKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCiAgKi8KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCitjb25maWdfZXhjbHVkZShzbm1wdjMvdXNtU3RhdHNfNV81KQogY29uZmlnX2FkZF9taWIoU05NUC1VU0VSLUJBU0VELVNNLU1JQikKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkMDRlMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogdXNtU3RhdHMuYzogaW1wbGVtZW50cyB0aGUgdXNtU3RhdHMgcG9ydGlvbiBvZiB0aGUgU05NUC1VU0VSLUJBU0VELVNNLU1JQgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgorCisjaW5jbHVkZSAidXNtU3RhdHNfNV81LmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaD4KKworI2RlZmluZSBzbm1wVXNtTUlCIDEsIDMsIDYsIDEsIDYsIDMsIDE1CisjZGVmaW5lIHVzbU1JQkNvbXBsaWFuY2VzIHNubXBVc21NSUIsIDIsIDEKKworc3RhdGljIG9pZCB1c21TdGF0c1tdID0geyBzbm1wVXNtTUlCLCAxLCAxIH07CisKK3N0YXRpYyBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKiB1c21TdGF0c19yZWcgPSBOVUxMOworc3RhdGljIG9pZCB1c21NSUJDb21wbGlhbmNlW10gPSB7IHVzbU1JQkNvbXBsaWFuY2VzLCAxIH07CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlbHBlcl9zdGF0aXN0aWNzKQorCit2b2lkCitpbml0X3VzbVN0YXRzXzVfNSh2b2lkKQoreworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qIHMgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICJ1c21TdGF0cyIsIE5VTEwsIHVzbVN0YXRzLCBPSURfTEVOR1RIKHVzbVN0YXRzKSwKKyAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAocyAmJgorCU5FVFNOTVBfUkVHSVNURVJfU1RBVElTVElDX0hBTkRMRVIocywgMSwgVVNNKSA9PSBNSUJfUkVHSVNURVJFRF9PSykgeworICAgICAgICBSRUdJU1RFUl9TWVNPUl9FTlRSWSh1c21NSUJDb21wbGlhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gZGVmaW5pdGlvbnMgZm9yIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTTk1QIFVzZXItYmFzZWQgU2VjdXJpdHkgTW9kZWwuIik7CisgICAgICAgIHVzbVN0YXRzX3JlZyA9IHM7CisgICAgfQorfQorCit2b2lkCitzaHV0ZG93bl91c21TdGF0c181XzUodm9pZCkKK3sKKyAgICBVTlJFR0lTVEVSX1NZU09SX0VOVFJZKHVzbU1JQkNvbXBsaWFuY2UpOworICAgIGlmICh1c21TdGF0c19yZWcpIHsKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIodXNtU3RhdHNfcmVnKTsKKyAgICAgICAgdXNtU3RhdHNfcmVnID0gTlVMTDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmggYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwNzE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9NSUJHUk9VUF9VU01TVEFUU19ICisjZGVmaW5lIF9NSUJHUk9VUF9VU01TVEFUU19ICisKK2NvbmZpZ19leGNsdWRlKHNubXB2My91c21TdGF0cykKK2NvbmZpZ19hZGRfbWliKFNOTVAtVVNFUi1CQVNFRC1TTS1NSUIpCisKK3ZvaWQgaW5pdF91c21TdGF0c181XzUodm9pZCk7Cit2b2lkIHNodXRkb3duX3VzbVN0YXRzXzVfNSh2b2lkKTsKKworI2VuZGlmIC8qIF9NSUJHUk9VUF9VU01TVEFUU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYwppbmRleCAwZWIwZGFjLi45ZjA1MDNkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMKQEAgLTMsNiArMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKICNpZiBIQVZFX1NUUklOR19ICkBAIC0xMSwzNyArMTIsNDQgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgInVzbVVzZXIuaCIKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiBpbnQgdXNtU3RhdHVzQ2hlY2soc3RydWN0IHVzbVVzZXIgKnVwdHIpOworI2VuZGlmICAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c211c2VyX2FsbCwgbGlibmV0c25tcG1pYnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5pdF9yZWdpc3Rlcl91c211c2VyX2NvbnRleHQsIHVzbXVzZXJfYWxsKQogCiBzdHJ1Y3QgdmFyaWFibGU0IHVzbVVzZXJfdmFyaWFibGVzW10gPSB7Ci0gICAge1VTTVVTRVJTUElOTE9DSywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3VzbVVzZXIsIDEsIHsxfX0sCi0gICAge1VTTVVTRVJTRUNVUklUWU5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfdXNtVXNlciwgMywgezIsIDEsIDN9fSwKLSAgICB7VVNNVVNFUkNMT05FRlJPTSwgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywgezIsIDEsIDR9fSwKLSAgICB7VVNNVVNFUkFVVEhQUk9UT0NPTCwgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywKLSAgICAgezIsIDEsIDV9fSwKLSAgICB7VVNNVVNFUkFVVEhLRVlDSEFOR0UsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsCi0gICAgIHsyLCAxLCA2fX0sCi0gICAge1VTTVVTRVJPV05BVVRIS0VZQ0hBTkdFLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLAotICAgICB7MiwgMSwgN319LAotICAgIHtVU01VU0VSUFJJVlBST1RPQ09MLCBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLAotICAgICB7MiwgMSwgOH19LAotICAgIHtVU01VU0VSUFJJVktFWUNIQU5HRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywKLSAgICAgezIsIDEsIDl9fSwKLSAgICB7VVNNVVNFUk9XTlBSSVZLRVlDSEFOR0UsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsCi0gICAgIHsyLCAxLCAxMH19LAotICAgIHtVU01VU0VSUFVCTElDLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgMTF9fSwKLSAgICB7VVNNVVNFUlNUT1JBR0VUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywgezIsIDEsIDEyfX0sCi0gICAge1VTTVVTRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgMTN9fSwKKyAgICB7VVNNVVNFUlNQSU5MT0NLLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMSwgezF9fSwKKyAgICB7VVNNVVNFUlNFQ1VSSVRZTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgM319LAorICAgIHtVU01VU0VSQ0xPTkVGUk9NLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgNH19LAorICAgIHtVU01VU0VSQVVUSFBST1RPQ09MLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgNX19LAorICAgIHtVU01VU0VSQVVUSEtFWUNIQU5HRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDZ9fSwKKyAgICB7VVNNVVNFUk9XTkFVVEhLRVlDSEFOR0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCA3fX0sCisgICAge1VTTVVTRVJQUklWUFJPVE9DT0wsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCA4fX0sCisgICAge1VTTVVTRVJQUklWS0VZQ0hBTkdFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgOX19LAorICAgIHtVU01VU0VST1dOUFJJVktFWUNIQU5HRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDEwfX0sCisgICAge1VTTVVTRVJQVUJMSUMsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAxMX19LAorICAgIHtVU01VU0VSU1RPUkFHRVRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgMTJ9fSwKKyAgICB7VVNNVVNFUlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAxM319LAogCiB9OwogCkBAIC02Miw2ICs3MCw3IEBACiAgICAgICAgICAgICAgICAgIHVzbVVzZXJfdmFyaWFibGVzX29pZCk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTklUX1JFR0lTVEVSX1VTTVVTRVJfQ09OVEVYVAogdm9pZAogaW5pdF9yZWdpc3Rlcl91c21Vc2VyX2NvbnRleHQoY29uc3QgY2hhciAqY29udGV4dE5hbWUpIHsKICAgICByZWdpc3Rlcl9taWJfY29udGV4dCgic25tcHYzL3VzbVVzZXIiLApAQCAtNzMsNiArODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfTUlCX1BSSU9SSVRZLCAwLCAwLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1lLCAtMSwgMCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTklUX1JFR0lTVEVSX1VTTVVTRVJfQ09OVEVYVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogdXNtX2dlbmVyYXRlX09JRApAQCAtMzAxLDggKzMxMSwxMSBAQAogICAgIGlmICghdnAgfHwgIW5hbWUgfHwgIWxlbmd0aCB8fCAhdmFyX2xlbikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsgICAgICAgICAgLyogYXNzdW1lIGl0IGlzbnQgd3JpdGFibGUgZm9yIHRoZSB0aW1lIGJlaW5nICovCi0gICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOyAgICAgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlciBpZiBub3QgKi8KKyAgICAvKiBhc3N1bWUgaXQgaXNudCB3cml0YWJsZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOyAgICAKKworICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIgaWYgbm90ICovCisgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOwogCiAgICAgaWYgKHZwLT5tYWdpYyAhPSBVU01VU0VSU1BJTkxPQ0spIHsKICAgICAgICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOwpAQCAtMzE1LDcgKzMyOCw3IEBACiAgICAgICAgICAgICAoZXhhY3QgPT0gMSAmJiBydGVzdCAhPSAwKSkgewogICAgICAgICAgICAgaWYgKHZhcl9sZW4pCiAgICAgICAgICAgICAgICAgKnZhcl9sZW4gPSAwOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBtZW1zZXQobmV3bmFtZSwgMCwgc2l6ZW9mKG5ld25hbWUpKTsKICAgICAgICAgaWYgKCgoaW50KSAqbGVuZ3RoKSA8PSAoaW50KSB2cC0+bmFtZWxlbiB8fCBydGVzdCA9PSAtMSkgewpAQCAtMzcyLDYgKzM4NSw3IEBACiAgICAgICAgICAgICBpbmRleE9pZCA9IHVzbV9nZW5lcmF0ZV9PSUQodnAtPm5hbWUsIHZwLT5uYW1lbGVuLCB1cHRyLCAmbGVuKTsKICAgICAgICAgICAgICpsZW5ndGggPSBsZW47CiAgICAgICAgICAgICBtZW1tb3ZlKG5hbWUsIGluZGV4T2lkLCBsZW4gKiBzaXplb2Yob2lkKSk7CisKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c21Vc2VyIiwgIkZvdW5kIHVzZXI6ICVzIC0gIiwgdXB0ci0+bmFtZSkpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIHVwdHItPmVuZ2luZUlETGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBERUJVR01TRygoInVzbVVzZXIiLCAiICV4IiwgdXB0ci0+ZW5naW5lSURbaV0pKTsKQEAgLTM4NCwxMCArMzk4LDExIEBACiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaGVhZGVyX2dlbmVyaWModnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmRpZiAtLSB2cC0+bWFnaWMgIT0gVVNNVVNFUlNQSU5MT0NLICovCiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiAgICAgY2FzZSBVU01VU0VSU1BJTkxPQ0s6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV91c21Vc2VyU3BpbkxvY2s7CiAgICAgICAgIGxvbmdfcmV0ID0gdXNtVXNlclNwaW5Mb2NrOwpAQCAtNDU4LDcgKzQ3Myw3IEBACiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV91c21Vc2VyUHVibGljOwogICAgICAgICBpZiAodXB0cikgewogICAgICAgICAgICAgaWYgKHVwdHItPnVzZXJQdWJsaWNTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbigoY2hhciAqKSB1cHRyLT51c2VyUHVibGljU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAqdmFyX2xlbiA9IHVwdHItPnVzZXJQdWJsaWNTdHJpbmdMZW47CiAgICAgICAgICAgICAgICAgcmV0dXJuIHVwdHItPnVzZXJQdWJsaWNTdHJpbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqc3RyaW5nID0gMDsKQEAgLTQ4MywxNSArNDk4LDIxIEBACiAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgZGVmYXVsdDoKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBkIiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl91c21Vc2VyXG4iLAogICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBkIiwgIm5vIHdyaXRlIHN1cHBvcnQgZm9yIHZhcl91c21Vc2VyXG4iKSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5VTEw7CiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHZhcl91c21Vc2VyKCkgKi8KIAorCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKKwogLyoKICAqIHdyaXRlX3VzbVVzZXJTcGluTG9jaygpOiBjYWxsZWQgd2hlbiBhIHNldCBpcyBwZXJmb3JtZWQgb24gdGhlCiAgKiB1c21Vc2VyU3BpbkxvY2sgb2JqZWN0IApAQCAtNzQ1LDcgKzc2Niw2IEBACiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKICAgICAgICAgU05NUF9GUkVFKG9wdHIpOwotICAgICAgICBvcHRyID0gTlVMTDsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBGUkVFIHx8IGFjdGlvbiA9PSBVTkRPKSB7CiAgICAgICAgIGlmICgodXB0ciA9IHVzbV9wYXJzZV91c2VyKG5hbWUsIG5hbWVfbGVuKSkgIT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHJlc2V0T25GYWlsKSB7CkBAIC04ODgsNyArOTA4LDYgQEAKICAgICAgICAgdXB0ci0+YXV0aEtleUxlbiA9IGJ1ZmxlbjsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKICAgICAgICAgU05NUF9GUkVFKG9sZGtleSk7Ci0gICAgICAgIG9sZGtleSA9IE5VTEw7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gVU5ETykgewogICAgICAgICBpZiAoKHVwdHIgPSB1c21fcGFyc2VfdXNlcihuYW1lLCBuYW1lX2xlbikpICE9IE5VTEwgJiYgcmVzZXRPbkZhaWwpIHsKICAgICAgICAgICAgIFNOTVBfRlJFRSh1cHRyLT5hdXRoS2V5KTsKQEAgLTEwMTMsNyArMTAzMiw2IEBACiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKICAgICAgICAgU05NUF9GUkVFKG9wdHIpOwotICAgICAgICBvcHRyID0gTlVMTDsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBGUkVFIHx8IGFjdGlvbiA9PSBVTkRPKSB7CiAgICAgICAgIGlmICgodXB0ciA9IHVzbV9wYXJzZV91c2VyKG5hbWUsIG5hbWVfbGVuKSkgIT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHJlc2V0T25GYWlsKSB7CkBAIC0xMTM4LDcgKzExNTYsNiBAQAogICAgICAgICB1cHRyLT5wcml2S2V5TGVuID0gYnVmbGVuOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IENPTU1JVCkgewogICAgICAgICBTTk1QX0ZSRUUob2xka2V5KTsKLSAgICAgICAgb2xka2V5ID0gTlVMTDsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBVTkRPKSB7CiAgICAgICAgIGlmICgodXB0ciA9IHVzbV9wYXJzZV91c2VyKG5hbWUsIG5hbWVfbGVuKSkgIT0gTlVMTCAmJiByZXNldE9uRmFpbCkgewogICAgICAgICAgICAgU05NUF9GUkVFKHVwdHItPnByaXZLZXkpOwpAQCAtMTE2NCw3ICsxMTgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHVzbVVzZXJQdWJsaWMgbm90IEFTTl9PQ1RFVF9TVFJcbiIpKTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKICAgICB9Ci0gICAgaWYgKHZhcl92YWxfbGVuIDwgMCB8fCB2YXJfdmFsX2xlbiA+IDMyKSB7CisgICAgaWYgKHZhcl92YWxfbGVuID4gMzIpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInVzbVVzZXIiLCAid3JpdGUgdG8gdXNtVXNlclB1YmxpYzogYmFkIGxlbmd0aFxuIikpOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CiAgICAgfQpAQCAtMTE3NywxNCArMTE5NCwxNSBAQAogICAgICAgICB9CiAgICAgICAgIGlmICh1cHRyLT51c2VyUHVibGljU3RyaW5nKQogICAgICAgICAgICAgZnJlZSh1cHRyLT51c2VyUHVibGljU3RyaW5nKTsKLSAgICAgICAgdXB0ci0+dXNlclB1YmxpY1N0cmluZyA9ICh1X2NoYXIgKikgbWFsbG9jKHZhcl92YWxfbGVuICsgMSk7CisgICAgICAgIHVwdHItPnVzZXJQdWJsaWNTdHJpbmcgPSAodV9jaGFyICopIG1hbGxvYyh2YXJfdmFsX2xlbik7CiAgICAgICAgIGlmICh1cHRyLT51c2VyUHVibGljU3RyaW5nID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgIH0KICAgICAgICAgbWVtY3B5KHVwdHItPnVzZXJQdWJsaWNTdHJpbmcsIHZhcl92YWwsIHZhcl92YWxfbGVuKTsKLSAgICAgICAgdXB0ci0+dXNlclB1YmxpY1N0cmluZ1t2YXJfdmFsX2xlbl0gPSAwOwotICAgICAgICBERUJVR01TRygoInVzbVVzZXIiLCAic2V0dGluZyBwdWJsaWMgc3RyaW5nOiAlZCAtICVzXG4iLAotICAgICAgICAgICAgICAgICAgdmFyX3ZhbF9sZW4sIHVwdHItPnVzZXJQdWJsaWNTdHJpbmcpKTsKKyAgICAgICAgdXB0ci0+dXNlclB1YmxpY1N0cmluZ0xlbiA9IHZhcl92YWxfbGVuOworICAgICAgICBERUJVR01TRygoInVzbVVzZXIiLCAic2V0dGluZyBwdWJsaWMgc3RyaW5nOiAlZCAtICIsIChpbnQpdmFyX3ZhbF9sZW4pKTsKKyAgICAgICAgREVCVUdNU0dIRVgoKCJ1c21Vc2VyIiwgdXB0ci0+dXNlclB1YmxpY1N0cmluZywgdmFyX3ZhbF9sZW4pKTsKKyAgICAgICAgREVCVUdNU0coKCJ1c21Vc2VyIiwgIlxuIikpOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHdyaXRlX3VzbVVzZXJQdWJsaWMoKSAqLwpAQCAtMTI0MSw3ICsxMjU5LDcgQEAKICAgICAgICAgICAgICAqIENvbnZlbnRpb24gYXBwbHkuICAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbVVzZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgImxvbmdfcmV0ICVkIHVwdHItPnN0ICVkIHVwdHItPnN0YXR1cyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsb25nX3JldCAlbGQgdXB0ci0+c3QgJWQgdXB0ci0+c3RhdHVzICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ19yZXQsIHVwdHItPnVzZXJTdG9yYWdlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVwdHItPnVzZXJTdGF0dXMpKTsKIApAQCAtMTI3Myw2ICsxMjkxLDcgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHdyaXRlX3VzbVVzZXJTdG9yYWdlVHlwZSgpICovCiAKKwogLyoKICAqIFJldHVybiAxIGlmIGVub3VnaCBvYmplY3RzIGhhdmUgYmVlbiBzZXQgdXAgdG8gdHJhbnNpdGlvbiByb3dTdGF0dXMgdG8KICAqIG5vdEluU2VydmljZSgyKSBvciBhY3RpdmUoMSkuICAKQEAgLTE0NzksNyArMTQ5OCw5IEBACiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9ICAvKiB3cml0ZV91c21Vc2VyU3RhdHVzICovCisKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAogCiAjaWYgMAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaAppbmRleCBlOTIwYjIwLi41M2QxNDEyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmgKQEAgLTE1LDEwICsxNSwxMCBAQAogI2RlZmluZSBVU01fTEVOR1RIX09JRF9NQVgJNjYKIAogLyoKLSAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBhbmQgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCisgKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUKICAqLwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIGNvbmZpZ19hZGRfbWliKFNOTVAtVVNFUi1CQVNFRC1TTS1NSUIpCiAKICAgICAvKgpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBlbmdpbmVJRExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKm5hbWUsIHNpemVfdCAqIG5hbWVMZW4pOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3VzbVVzZXJTcGluTG9jazsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3VzbVVzZXJDbG9uZUZyb207CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV91c21Vc2VyQXV0aFByb3RvY29sOwpAQCAtNjMsNSArNjQsNiBAQAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdXNtVXNlclB1YmxpYzsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3VzbVVzZXJTdG9yYWdlVHlwZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3VzbVVzZXJTdGF0dXM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfVVNNVVNFUl9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmggYi9hZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmgKaW5kZXggNjBmNjY2ZC4uMGNjYTlhMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaApAQCAtNyw4ICs3LDEwIEBACiAgKi8KIAogY29uZmlnX3JlcXVpcmUoc25tcHYzL3NubXBFbmdpbmUpCi1jb25maWdfcmVxdWlyZShzbm1wdjMvc25tcE1QRFN0YXRzKQotY29uZmlnX3JlcXVpcmUoc25tcHYzL3VzbVN0YXRzKQorY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgoc25tcHYzL3NubXBNUERTdGF0cywgNS41LCBzbm1wdjMvc25tcE1QRFN0YXRzXzVfNSkpCisjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCitjb25maWdfdmVyc2lvbl9yZXF1aXJlKChzbm1wdjMvdXNtU3RhdHMsIDUuNSwgc25tcHYzL3VzbVN0YXRzXzVfNSkpCiBjb25maWdfcmVxdWlyZShzbm1wdjMvdXNtQ29uZikKIGNvbmZpZ19yZXF1aXJlKHNubXB2My91c21Vc2VyKQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOU01QVjNNSUJTX0ggKi8KKyNlbmRpZiAvKiBORVRTTk1QX1NFQ01PRF9VU00gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFYzTUlCU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zdHJ1Y3QuaCBiL2FnZW50L21pYmdyb3VwL3N0cnVjdC5oCmluZGV4IDEwYjg0M2QuLmQwMjVlZDAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3N0cnVjdC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3N0cnVjdC5oCkBAIC0xNiw5ICsxNiwxMCBAQAogICAgIGludCAgICAgICAgICAgICByZXN1bHQ7CiAgICAgY2hhciAgICAgICAgICAgIG91dHB1dFtTVFJNQVhdOwogICAgIHN0cnVjdCBleHRlbnNpYmxlICpuZXh0OwotICAgIHVuc2lnbmVkIGxvbmcgICBtaWJvaWRbTUlCTUFYXTsKKyAgICBvaWQgICAgICAgICAgICAgbWlib2lkW01JQk1BWF07CiAgICAgc2l6ZV90ICAgICAgICAgIG1pYmxlbjsKLSAgICBpbnQgICAgICAgICAgICAgcGlkOworICAgIGludCAgICAgICAgICAgICBtaWJwcmlvcml0eTsKKyAgICBuZXRzbm1wX3BpZF90ICAgcGlkOwogI2lmIGRlZmluZWQoV0lOMzIpCiAgICAgSEFORExFICAgICAgICAgIHRpZDsgICAgICAgICAgICAgICAgLyogV0lOMzIgdGhyZWFkICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC5oIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0LmgKaW5kZXggMzlmYWRmZS4uNThjNWI0YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0LmgKQEAgLTEsNSArMSw1IEBACiBjb25maWdfcmVxdWlyZSh0YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeSkKIGNvbmZpZ19yZXF1aXJlKHRhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkpCiBjb25maWdfcmVxdWlyZSh0YXJnZXQvdGFyZ2V0KQotY29uZmlnX3JlcXVpcmUodGFyZ2V0L3RhcmdldF9jb3VudGVycykKK2NvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKHRhcmdldC90YXJnZXRfY291bnRlcnMsIDUuNSwgdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUpKQogY29uZmlnX2FkZF9taWIoU05NUC1UQVJHRVQtTUlCKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMKaW5kZXggYmI3MzAyZC4uYjFlYjAwYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYworKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jCkBAIC0xNSwyNiArMTUsMjcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgInNubXBUYXJnZXRBZGRyRW50cnkuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiAjZGVmaW5lIHNubXBUYXJnZXRBZGRyT0lETGVuIDExIC8qVGhpcyBpcyBiYXNlK2NvbHVtbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGkuZS4gZXZlcnl0aGluZyBidXQgaW5kZXggKi8KIAotb2lkICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyT0lEW3NubXBUYXJnZXRBZGRyT0lETGVuXSA9CitzdGF0aWMgb2lkICAgICAgc25tcFRhcmdldEFkZHJPSURbc25tcFRhcmdldEFkZHJPSURMZW5dID0KICAgICB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxLCAyLCAxLCAwIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNubXBUYXJnZXRTcGluTG9jayA9IDA7Ci1zdGF0aWMgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmFBZGRyVGFibGUgPSAwOworc3RhdGljIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICphQWRkclRhYmxlID0gTlVMTDsKIAogCitzdGF0aWMgaW50CitzdG9yZV9zbm1wVGFyZ2V0QWRkckVudHJ5KGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOworCiAvKgogICogVXRpbGl0eSByb3V0aW5lcyAKICAqLwpAQCAtNDUsMTEgKzQ2LDEyIEBACiB9CiAKIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICoKLWdldF9hZGRyRm9yTmFtZShjaGFyICpuYW1lKQorZ2V0X2FkZHJGb3JOYW1lMihjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyIG5hbWVMZW4pCiB7CiAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKnB0cjsKICAgICBmb3IgKHB0ciA9IGFBZGRyVGFibGU7IHB0ciAhPSBOVUxMOyBwdHIgPSBwdHItPm5leHQpIHsKLSAgICAgICAgaWYgKHB0ci0+bmFtZSAmJiBzdHJjbXAocHRyLT5uYW1lLCBuYW1lKSA9PSAwKQorICAgICAgICBpZiAocHRyLT5uYW1lTGVuID09IG5hbWVMZW4gJiYKKyAgICAgICAgICAgIG1lbWNtcChwdHItPm5hbWVEYXRhLCBuYW1lLCBuYW1lTGVuKSA9PSAwKQogICAgICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CkBAIC02NywyMSArNjksMjIgQEAKICAgICBuZXdFbnRyeSA9IG1hbGxvYyhzaXplb2YoKm5ld0VudHJ5KSk7CiAKICAgICBpZiAobmV3RW50cnkpIHsKLSAgICAgICAgbmV3RW50cnktPm5hbWUgPSAwOworICAgICAgICBuZXdFbnRyeS0+bmFtZURhdGEgPSBOVUxMOworICAgICAgICBuZXdFbnRyeS0+bmFtZUxlbiA9IDA7CiAKICAgICAgICAgbmV3RW50cnktPnREb21haW5MZW4gPSAwOwotICAgICAgICBuZXdFbnRyeS0+dEFkZHJlc3MgPSAwOworICAgICAgICBuZXdFbnRyeS0+dEFkZHJlc3MgPSBOVUxMOwogCiAgICAgICAgIG5ld0VudHJ5LT50aW1lb3V0ID0gMTUwMDsKICAgICAgICAgbmV3RW50cnktPnJldHJ5Q291bnQgPSAzOwogCiAgICAgICAgIG5ld0VudHJ5LT50YWdMaXN0ID0gc3RyZHVwKCIiKTsKLSAgICAgICAgbmV3RW50cnktPnBhcmFtcyA9IDA7CisgICAgICAgIG5ld0VudHJ5LT5wYXJhbXMgPSBOVUxMOwogCiAgICAgICAgIG5ld0VudHJ5LT5zdG9yYWdlVHlwZSA9IFNOTVBfU1RPUkFHRV9OT05WT0xBVElMRTsKICAgICAgICAgbmV3RW50cnktPnJvd1N0YXR1cyA9IFNOTVBfUk9XX05PTkVYSVNURU5UOwogICAgICAgICBuZXdFbnRyeS0+c2VzcyA9IE5VTEw7Ci0gICAgICAgIG5ld0VudHJ5LT5uZXh0ID0gMDsKKyAgICAgICAgbmV3RW50cnktPm5leHQgPSBOVUxMOwogICAgIH0KIAogICAgIHJldHVybiBuZXdFbnRyeTsKQEAgLTk1LDExICs5OCwxMSBAQAogdm9pZAogc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpyZWFwZWQpCiB7Ci0gICAgaWYgKHJlYXBlZC0+c2VzcyAhPSBOVUxMKSB7CisgICAgaWYgKHJlYXBlZC0+c2VzcykKICAgICAgICAgc25tcF9jbG9zZShyZWFwZWQtPnNlc3MpOwotICAgIH0KLSAgICBTTk1QX0ZSRUUocmVhcGVkLT5uYW1lKTsKLSAgICBTTk1QX0ZSRUUocmVhcGVkLT50QWRkcmVzcyk7CisgICAgZWxzZQorICAgICAgICBTTk1QX0ZSRUUocmVhcGVkLT50QWRkcmVzcyk7CisgICAgU05NUF9GUkVFKHJlYXBlZC0+bmFtZURhdGEpOwogICAgIFNOTVBfRlJFRShyZWFwZWQtPnRhZ0xpc3QpOwogICAgIFNOTVBfRlJFRShyZWFwZWQtPnBhcmFtcyk7CiAKQEAgLTExOSwzNCArMTIyLDI4IEBACiB7CiAgICAgc3RhdGljIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpjdXJyX3N0cnVjdCwgKnByZXZfc3RydWN0OwogICAgIGludCAgICAgICAgICAgICBpOwotICAgIHNpemVfdCAgICAgICAgICBuZXdPSURMZW4gPSAwLCBjdXJyT0lETGVuID0gMDsKLSAgICBvaWQgICAgICAgICAgICAgbmV3T0lEWzEyOF0sIGN1cnJPSURbMTI4XTsKIAogICAgIC8qCiAgICAgICogaWYgdGhlIGxpc3QgaXMgZW1wdHksIGFkZCB0aGUgbmV3IGVudHJ5IHRvIHRoZSB0b3AgCiAgICAgICovCi0gICAgaWYgKChwcmV2X3N0cnVjdCA9IGN1cnJfc3RydWN0ID0gKmxpc3RQdHIpID09IDApIHsKKyAgICBpZiAoKHByZXZfc3RydWN0ID0gY3Vycl9zdHJ1Y3QgPSAqbGlzdFB0cikgPT0gTlVMTCkgewogICAgICAgICAqbGlzdFB0ciA9IG5ld0VudHJ5OwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyoKLSAgICAgICAgICogZ2V0IHRoZSAnT0lEJyB2YWx1ZSBvZiB0aGUgbmV3IGVudHJ5IAotICAgICAgICAgKi8KLSAgICAgICAgbmV3T0lETGVuID0gc3RybGVuKG5ld0VudHJ5LT5uYW1lKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIG5ld09JRExlbjsgaSsrKSB7Ci0gICAgICAgICAgICBuZXdPSURbaV0gPSBuZXdFbnRyeS0+bmFtZVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCiAgICAgICAgICAqIHNlYXJjaCB0aHJvdWdoIHRoZSBsaXN0IGZvciBhbiBlcXVhbCBvciBncmVhdGVyIE9JRCB2YWx1ZSAKICAgICAgICAgICovCi0gICAgICAgIHdoaWxlIChjdXJyX3N0cnVjdCAhPSAwKSB7Ci0gICAgICAgICAgICBjdXJyT0lETGVuID0gc3RybGVuKGN1cnJfc3RydWN0LT5uYW1lKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBjdXJyT0lETGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjdXJyT0lEW2ldID0gY3Vycl9zdHJ1Y3QtPm5hbWVbaV07CisgICAgICAgIHdoaWxlIChjdXJyX3N0cnVjdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpID0gbWVtY21wKG5ld0VudHJ5LT5uYW1lRGF0YSwgY3Vycl9zdHJ1Y3QtPm5hbWVEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBuZXdFbnRyeS0+bmFtZUxlbiA8IGN1cnJfc3RydWN0LT5uYW1lTGVuID8KKyAgICAgICAgICAgICAgICAgICAgICAgbmV3RW50cnktPm5hbWVMZW4gOiBjdXJyX3N0cnVjdC0+bmFtZUxlbik7CisgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKG5ld0VudHJ5LT5uYW1lTGVuIDwgY3Vycl9zdHJ1Y3QtPm5hbWVMZW4pCisgICAgICAgICAgICAgICAgICAgIGkgPSAtMTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXdFbnRyeS0+bmFtZUxlbiA+IGN1cnJfc3RydWN0LT5uYW1lTGVuKQorICAgICAgICAgICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaSA9IHNubXBfb2lkX2NvbXBhcmUobmV3T0lELCBuZXdPSURMZW4sIGN1cnJPSUQsIGN1cnJPSURMZW4pOwogICAgICAgICAgICAgaWYgKGkgPT0gMCkgeyAgICAgICAvKiBFeGFjdCBtYXRjaCwgb3ZlcndyaXRlIHdpdGggbmV3IHN0cnVjdCAqLwogICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5uZXh0ID0gY3Vycl9zdHJ1Y3QtPm5leHQ7CiAgICAgICAgICAgICAgICAgLyoKQEAgLTE5NywxNCArMTk0LDE0IEBACiB7CiAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKnRwdHI7CiAKLSAgICBpZiAoKHRwdHIgPSAqbGlzdFB0cikgPT0gMCkKKyAgICBpZiAoKHRwdHIgPSAqbGlzdFB0cikgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIGVsc2UgaWYgKHRwdHIgPT0gb2xkRW50cnkpIHsKICAgICAgICAgKmxpc3RQdHIgPSAoKmxpc3RQdHIpLT5uZXh0OwogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UodHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAodHB0ci0+bmV4dCAhPSAwKSB7CisgICAgICAgIHdoaWxlICh0cHRyLT5uZXh0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmICh0cHRyLT5uZXh0ID09IG9sZEVudHJ5KSB7CiAgICAgICAgICAgICAgICAgdHB0ci0+bmV4dCA9IHRwdHItPm5leHQtPm5leHQ7CiAgICAgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG9sZEVudHJ5KTsKQEAgLTIzNCwxMiArMjMxLDEyIEBACiAgICAgICovCiAgICAgbWVtY3B5KG5ld051bSwgYmFzZU5hbWUsIGJhc2VOYW1lTGVuICogc2l6ZW9mKG9pZCkpOwogCi0gICAgZm9yICh0ZW1wX3N0cnVjdCA9IGFBZGRyVGFibGU7IHRlbXBfc3RydWN0ICE9IDA7CisgICAgZm9yICh0ZW1wX3N0cnVjdCA9IGFBZGRyVGFibGU7IHRlbXBfc3RydWN0ICE9IE5VTEw7CiAgICAgICAgICB0ZW1wX3N0cnVjdCA9IHRlbXBfc3RydWN0LT5uZXh0KSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBzdHJsZW4odGVtcF9zdHJ1Y3QtPm5hbWUpOyBpKyspIHsKLSAgICAgICAgICAgIG5ld051bVtiYXNlTmFtZUxlbiArIGldID0gdGVtcF9zdHJ1Y3QtPm5hbWVbaV07CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wX3N0cnVjdC0+bmFtZUxlbjsgaSsrKSB7CisgICAgICAgICAgICBuZXdOdW1bYmFzZU5hbWVMZW4gKyBpXSA9ICh1bnNpZ25lZCBjaGFyKXRlbXBfc3RydWN0LT5uYW1lRGF0YVtpXTsKICAgICAgICAgfQotICAgICAgICBteU9JRExlbiA9IGJhc2VOYW1lTGVuICsgc3RybGVuKHRlbXBfc3RydWN0LT5uYW1lKTsKKyAgICAgICAgbXlPSURMZW4gPSBiYXNlTmFtZUxlbiArIHRlbXBfc3RydWN0LT5uYW1lTGVuOwogICAgICAgICBpID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCAqbGVuZ3RoLCBuZXdOdW0sIG15T0lETGVuKTsKICAgICAgICAgLyoKICAgICAgICAgICogQXNzdW1lcyB0aGF0IHRoZSBsaW5rZWQgbGlzdCBzb3J0ZWQgYnkgT0lELCBsb3cgdG8gaGlnaCAKQEAgLTI1Miw3ICsyNDksNyBAQAogICAgICAgICAgICAgcmV0dXJuIHRlbXBfc3RydWN0OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAoMCk7CisgICAgcmV0dXJuIE5VTEw7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlYXJjaF9zbm1wVGFyZ2V0QWRkclRhYmxlICAqLwogCiAKQEAgLTI3Nyw0MyArMjc0LDQ0IEBACiAgKiBmb3IgdGhlIHNubXBUYXJnZXRBZGRyRW50cnkgbWliIAogICovCiAKLXN0cnVjdCB2YXJpYWJsZTIgc25tcFRhcmdldEFkZHJFbnRyeV92YXJpYWJsZXNbXSA9IHsKLSAgICB7U05NUFRBUkdFVEFERFJURE9NQUlOLCBBU05fT0JKRUNUX0lELCBSV1JJVEUsCitzdGF0aWMgY29uc3Qgc3RydWN0IHZhcmlhYmxlMiBzbm1wVGFyZ2V0QWRkckVudHJ5X3ZhcmlhYmxlc1tdID0geworICAgIHtTTk1QVEFSR0VUQUREUlRET01BSU4sIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnksIDEsIHtTTk1QVEFSR0VUQUREUlRET01BSU5DT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVEFERFJUQUREUkVTUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUQUREUlRBRERSRVNTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5LCAxLCB7U05NUFRBUkdFVEFERFJUQUREUkVTU0NPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUQUREUlRJTUVPVVQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRBRERSVElNRU9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnksIDEsIHtTTk1QVEFSR0VUQUREUlRJTUVPVVRDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVEFERFJSRVRSWUNPVU5ULCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUQUREUlJFVFJZQ09VTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5LCAxLCB7U05NUFRBUkdFVEFERFJSRVRSWUNPVU5UQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRBRERSVEFHTElTVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUQUREUlRBR0xJU1QsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnksIDEsIHtTTk1QVEFSR0VUQUREUlRBR0xJU1RDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVEFERFJQQVJBTVMsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVEFERFJQQVJBTVMsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnksIDEsIHtTTk1QVEFSR0VUQUREUlBBUkFNU0NPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUQUREUlNUT1JBR0VUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUQUREUlNUT1JBR0VUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSwgMSwge1NOTVBUQVJHRVRBRERSU1RPUkFHRVRZUEVDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVEFERFJST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRBRERSUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSwgMSwge1NOTVBUQVJHRVRBRERSUk9XU1RBVFVTQ09MVU1OfX0sCiAKIH07CiAKLXN0cnVjdCB2YXJpYWJsZTIgc25tcFRhcmdldFNwaW5Mb2NrX3ZhcltdID0gewotICAgIHtTTk1QVEFSR0VUU1BJTkxPQ0ssIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90YXJnZXRTcGluTG9jaywgMSwgezF9fQorc3RhdGljIGNvbnN0IHN0cnVjdCB2YXJpYWJsZTIgc25tcFRhcmdldFNwaW5Mb2NrX3ZhcltdID0geworICAgIHtTTk1QVEFSR0VUU1BJTkxPQ0ssIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90YXJnZXRTcGluTG9jaywgMSwgezF9fQogfTsKIAotc3RhdGljIG9pZCAgICAgIHNubXBUYXJnZXRTcGluTG9ja19vaWRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEgfTsKK3N0YXRpYyBjb25zdCBvaWQgc25tcFRhcmdldFNwaW5Mb2NrX29pZFtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSB9OwogCiAvKgogICogbm93IGxvYWQgdGhpcyBtaWIgaW50byB0aGUgYWdlbnRzIG1pYiB0YWJsZSAKICAqLwotb2lkICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyRW50cnlfdmFyaWFibGVzX29pZFtdID0KK3N0YXRpYyBjb25zdCBvaWQgc25tcFRhcmdldEFkZHJFbnRyeV92YXJpYWJsZXNfb2lkW10gPQogICAgIHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEsIDIsIDEgfTsKIAogCiB2b2lkCiBpbml0X3NubXBUYXJnZXRBZGRyRW50cnkodm9pZCkKIHsKLSAgICBhQWRkclRhYmxlID0gMDsKKyAgICBhQWRkclRhYmxlID0gTlVMTDsKICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsICJpbml0XG4iKSk7CiAgICAgUkVHSVNURVJfTUlCKCJ0YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyRW50cnlfdmFyaWFibGVzLCB2YXJpYWJsZTIsCkBAIC0zMjIsNyArMzIwLDggQEAKICAgICAgICAgICAgICAgICAgdmFyaWFibGUyLCBzbm1wVGFyZ2V0U3BpbkxvY2tfb2lkKTsKIAogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJ0YXJnZXRBZGRyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0QWRkciwgMCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKCopKHZvaWQpKTAsIE5VTEwpOwogCiAgICAgLyoKICAgICAgKiB3ZSBuZWVkIHRvIGJlIGNhbGxlZCBiYWNrIGxhdGVyIApAQCAtMzMyLDM3ICszMzEsMjggQEAKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0X3NubXBUYXJnZXRBZGRyRW50cnkgKi8KIAotCi1pbnQKLXNubXBUYXJnZXRBZGRyX2FkZE5hbWUoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LCBjaGFyICpjcHRyKQordm9pZAorc2h1dGRvd25fc25tcFRhcmdldEFkZHJFbnRyeSh2b2lkKQogewotICAgIHNpemVfdCAgICAgICAgICBsZW47Ci0gICAgaWYgKGNwdHIgPT0gMCkgewotICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyBuYW1lIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKLSAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBsZW4gPSBzdHJsZW4oY3B0cik7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHNwZWMgY2hlY2sgZm9yIHN0cmluZyAxLTMyIAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGxlbiA8IDEgfHwgbGVuID4gMzIpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBuYW1lIG91dCBvZiByYW5nZSBpbiBjb25maWcgc3RyaW5nXG4iKSk7Ci0gICAgICAgICAgICByZXR1cm4gKDApOwotICAgICAgICB9Ci0gICAgICAgIGVudHJ5LT5uYW1lID0gc3RyZHVwKGNwdHIpOwotICAgIH0KLSAgICByZXR1cm4gKDEpOwotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGROYW1lICovCisgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKnB0cjsKKyAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqbmV4dDsKIAorICAgIGZvciAocHRyID0gYUFkZHJUYWJsZTsgcHRyOyBwdHIgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBwdHItPm5leHQ7CisgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShwdHIpOworICAgIH0KKyAgICBhQWRkclRhYmxlID0gTlVMTDsKKworICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVfc25tcFRhcmdldEFkZHJFbnRyeSwgTlVMTCwgRkFMU0UpOworfQogCiBpbnQKIHNubXBUYXJnZXRBZGRyX2FkZFREb21haW4oc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LCBjaGFyICpjcHRyKQogewogICAgIHNpemVfdCAgICAgICAgICBsZW4gPSAxMjg7CiAKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyB0RG9tYWluIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTM5Miw3ICszODIsNyBAQAogc25tcFRhcmdldEFkZHJfYWRkVEFkZHJlc3Moc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0ciwgc2l6ZV90IGxlbikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyB0QWRkcmVzcyBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC00MTgsMTEgKzQwOCwxMSBAQAogaW50CiBzbm1wVGFyZ2V0QWRkcl9hZGRUaW1lb3V0KHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwgY2hhciAqY3B0cikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIFRpbWVvdXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdlUGFyYW1zRW50cnk6IFRpbWVvdXQgaXMgbm90IGEgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtNDQzLDExICs0MzMsMTEgQEAKIHNubXBUYXJnZXRBZGRyX2FkZFJldHJ5Q291bnQoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gUmV0cnkgQ291bnQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdlUGFyYW1zRW50cnk6IFJldHJ5IENvdW50IGlzIG5vdCBhIGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTQ3MCwxNyArNDYwLDE2IEBACiBpbnQKIHNubXBUYXJnZXRBZGRyX2FkZFRhZ0xpc3Qoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LCBjaGFyICpjcHRyKQogewotICAgIHNpemVfdCAgICAgICAgICBsZW47Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gdGFnIGxpc3QgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihjcHRyKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihjcHRyKTsKICAgICAgICAgLyoKICAgICAgICAgICogc3BlYyBjaGVjayBmb3Igc3RyaW5nIDAtMjU1IAogICAgICAgICAgKi8KLSAgICAgICAgaWYgKGxlbiA8IDAgfHwgbGVuID4gMjU1KSB7CisgICAgICAgIGlmIChsZW4gPiAyNTUpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiB0YWcgbGlzdCBvdXQgb2YgcmFuZ2UgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTQ5Niw3ICs0ODUsNyBAQAogc25tcFRhcmdldEFkZHJfYWRkUGFyYW1zKHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwgY2hhciAqY3B0cikKIHsKICAgICBzaXplX3QgICAgICAgICAgbGVuOwotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIHBhcmFtcyBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC01MjAsMTUgKzUwOSwxNSBAQAogc25tcFRhcmdldEFkZHJfYWRkU3RvcmFnZVR5cGUoc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAgYnVmZlsxMDI0XTsKLQotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIHN0b3JhZ2UgdHlwZSBpbiBjb25maWcgc3RyaW5nXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyBzdG9yYWdlIHR5cGUgaW4gY29uZmlnICIKKyAgICAgICAgICAgICAgICAgICAgInN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAotICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogc3RvcmFnZSB0eXBlIGlzIG5vdCBhIGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IHN0b3JhZ2UgdHlwZSBpcyBub3QgYSBkaWdpdCAiCisgICAgICAgICAgICAgICAgICAgICJpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CiAgICAgfQogICAgIC8qCkBAIC01NDAsMTQgKzUyOSwxMyBAQAogICAgICAgICAgICAgIChlbnRyeS0+c3RvcmFnZVR5cGUgIT0gU05NUF9TVE9SQUdFX05PTlZPTEFUSUxFKSAmJgogICAgICAgICAgICAgIChlbnRyeS0+c3RvcmFnZVR5cGUgIT0gU05NUF9TVE9SQUdFX1BFUk1BTkVOVCkgJiYKICAgICAgICAgICAgICAoZW50cnktPnN0b3JhZ2VUeXBlICE9IFNOTVBfU1RPUkFHRV9SRUFET05MWSkpIHsKLSAgICAgICAgc25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpLAotICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBzdG9yYWdlIHR5cGUgbm90IGEgdmFsaWQgdmFsdWUgb2Ygb3RoZXIoJWQpLCB2b2xhdGlsZSglZCksIG5vbnZvbGF0aWxlKCVkKSwgcGVybWFuZW50KCVkKSwgb3IgcmVhZG9ubHkoJWQpIGluIGNvbmZpZyBzdHJpbmcuXG4iLAotICAgICAgICAgICAgICAgIFNOTVBfU1RPUkFHRV9PVEhFUiwgU05NUF9TVE9SQUdFX1ZPTEFUSUxFLAotICAgICAgICAgICAgICAgIFNOTVBfU1RPUkFHRV9OT05WT0xBVElMRSwgU05NUF9TVE9SQUdFX1BFUk1BTkVOVCwKLSAgICAgICAgICAgICAgICBTTk1QX1NUT1JBR0VfUkVBRE9OTFkpOwotICAgICAgICBidWZmWyBzaXplb2YoYnVmZiktMSBdID0gMDsKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLCBidWZmKSk7Ci0KKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAorICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogc3RvcmFnZSB0eXBlIG5vdCBhIHZhbGlkICIKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIG9mIG90aGVyKCVkKSwgdm9sYXRpbGUoJWQpLCBub252b2xhdGlsZSglZCksICIKKyAgICAgICAgICAgICAgICAgICAgInBlcm1hbmVudCglZCksIG9yIHJlYWRvbmx5KCVkKSBpbiBjb25maWcgc3RyaW5nLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgU05NUF9TVE9SQUdFX09USEVSLCBTTk1QX1NUT1JBR0VfVk9MQVRJTEUsCisgICAgICAgICAgICAgICAgICAgIFNOTVBfU1RPUkFHRV9OT05WT0xBVElMRSwgU05NUF9TVE9SQUdFX1BFUk1BTkVOVCwKKyAgICAgICAgICAgICAgICAgICAgU05NUF9TVE9SQUdFX1JFQURPTkxZKSk7CiAgICAgICAgIHJldHVybiAoMCk7CiAgICAgfQogICAgIHJldHVybiAoMSk7CkBAIC01NTgsMTUgKzU0NiwxNSBAQAogc25tcFRhcmdldEFkZHJfYWRkUm93U3RhdHVzKHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICBidWZmWzEwMjRdOwotCi0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAotICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gUm93IFN0YXR1cyBpbiBjb25maWcgc3RyaW5nXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyBSb3cgU3RhdHVzIGluIGNvbmZpZyAiCisgICAgICAgICAgICAgICAgICAgICJzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IFJvdyBTdGF0dXMgaXMgbm90IGEgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOworICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogUm93IFN0YXR1cyBpcyBub3QgYSBkaWdpdCBpbiAiCisgICAgICAgICAgICAgICAgICAgICJjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CiAgICAgfQogICAgIC8qCkBAIC01NzYsMTIgKzU2NCwxMSBAQAogICAgICAgICAgICAgICAhPSBTTk1QX1JPV19BQ1RJVkUpICYmCiAgICAgICAgICAgICAgKGVudHJ5LT5yb3dTdGF0dXMgIT0gU05NUF9ST1dfTk9USU5TRVJWSUNFKSAmJgogICAgICAgICAgICAgIChlbnRyeS0+cm93U3RhdHVzICE9IFNOTVBfUk9XX05PVFJFQURZKSkgewotICAgICAgICBzbnByaW50ZihidWZmLCBzaXplb2YoYnVmZiksCi0gICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IFJvdyBTdGF0dXMgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgYWN0aXZlKCVkKSwgbm90aW5zZXJ2aWNlKCVkKSwgb3Igbm90cmVhZHkoJWQpIGluIGNvbmZpZyBzdHJpbmcuXG4iLAotICAgICAgICAgICAgICAgIFNOTVBfUk9XX0FDVElWRSwgU05NUF9ST1dfTk9USU5TRVJWSUNFLCBTTk1QX1JPV19OT1RSRUFEWSk7Ci0gICAgICAgIGJ1ZmZbIHNpemVvZihidWZmKS0xIF0gPSAwOwotICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsIGJ1ZmYpKTsKLQorICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCisgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBSb3cgU3RhdHVzIGlzIG5vdCBhIHZhbGlkICIKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIG9mIGFjdGl2ZSglZCksIG5vdGluc2VydmljZSglZCksIG9yIG5vdHJlYWR5KCVkKSAiCisgICAgICAgICAgICAgICAgICAgICJpbiBjb25maWcgc3RyaW5nLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgU05NUF9ST1dfQUNUSVZFLCBTTk1QX1JPV19OT1RJTlNFUlZJQ0UsIFNOTVBfUk9XX05PVFJFQURZKSk7CiAgICAgICAgIHJldHVybiAoMCk7CiAgICAgfQogICAgIHJldHVybiAoMSk7CkBAIC01OTEsMjQgKzU3OCw0MiBAQAogdm9pZAogc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldEFkZHIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNoYXJfcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICpjcHRyID0gY2hhcl9wdHIsIGJ1ZmZbMTAyNF07CisgICAgY29uc3QgY2hhciAgICAgKmNwdHIgPSBjaGFyX3B0cjsKKyAgICBjaGFyICAgICAgICAgICAgYnVmZlsxMDI0XSwgKmJwdHI7CiAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKm5ld0VudHJ5OwogICAgIGludCAgICAgICAgICAgICBpOworICAgIHNpemVfdCAgICAgICAgICBidWZsOwogCiAgICAgbmV3RW50cnkgPSBzbm1wVGFyZ2V0QWRkclRhYmxlX2NyZWF0ZSgpOwogCi0gICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKLSAgICBpZiAoc25tcFRhcmdldEFkZHJfYWRkTmFtZShuZXdFbnRyeSwgYnVmZikgPT0gMCkgeworICAgIGNwdHIgPSBza2lwX3doaXRlX2NvbnN0KGNwdHIpOworICAgIGlmIChjcHRyID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAorICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gbmFtZSBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKworICAgIGJ1ZmwgPSAwOworICAgIGNwdHIgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdChjcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKiopJm5ld0VudHJ5LT5uYW1lRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmwpOworICAgIGlmIChidWZsIDwgMSB8fCBidWZsID4gMzIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAorICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbmFtZSBvdXQgb2YgcmFuZ2UgaW4gY29uZmlnICIKKyAgICAgICAgICAgICAgICAgICAgInN0cmluZ1xuIikpOworICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5ld0VudHJ5LT5uYW1lTGVuID0gYnVmbDsKKworICAgIGNwdHIgPSBjb3B5X253b3JkX2NvbnN0KGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CiAgICAgaWYgKHNubXBUYXJnZXRBZGRyX2FkZFREb21haW4obmV3RW50cnksIGJ1ZmYpID09IDApIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjcHRyID0KLSAgICAgICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoY3B0ciwKKyAgICAgICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKikgJiBuZXdFbnRyeS0+dEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdFbnRyeS0+dEFkZHJlc3NMZW4pOwogICAgIGlmICghY3B0ciB8fCAhKG5ld0VudHJ5LT50QWRkcmVzcykpIHsKQEAgLTYxNyw1MSArNjIyLDUzIEBACiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgICBjcHRyID0gY29weV9ud29yZF9jb25zdChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOwogICAgIGlmIChzbm1wVGFyZ2V0QWRkcl9hZGRUaW1lb3V0KG5ld0VudHJ5LCBidWZmKSA9PSAwKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgICBjcHRyID0gY29weV9ud29yZF9jb25zdChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOwogICAgIGlmIChzbm1wVGFyZ2V0QWRkcl9hZGRSZXRyeUNvdW50KG5ld0VudHJ5LCBidWZmKSA9PSAwKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgICBjcHRyID0gY29weV9ud29yZF9jb25zdChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOwogICAgIGlmIChzbm1wVGFyZ2V0QWRkcl9hZGRUYWdMaXN0KG5ld0VudHJ5LCBidWZmKSA9PSAwKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgICBjcHRyID0gY29weV9ud29yZF9jb25zdChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOwogICAgIGlmIChzbm1wVGFyZ2V0QWRkcl9hZGRQYXJhbXMobmV3RW50cnksIGJ1ZmYpID09IDApIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOworICAgIGNwdHIgPSBjb3B5X253b3JkX2NvbnN0KGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CiAgICAgaWYgKHNubXBUYXJnZXRBZGRyX2FkZFN0b3JhZ2VUeXBlKG5ld0VudHJ5LCBidWZmKSA9PSAwKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgICBjcHRyID0gY29weV9ud29yZF9jb25zdChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOwogICAgIGlmIChzbm1wVGFyZ2V0QWRkcl9hZGRSb3dTdGF0dXMobmV3RW50cnksIGJ1ZmYpID09IDApIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzbnByaW50ZihidWZmLCBzaXplb2YoYnVmZiksICJzbm1wX3BhcnNlX2NvbmZpZ190YXJnZXRBZGRyLCByZWFkOiAlc1xuIiwKLSAgICAgICAgICAgIG5ld0VudHJ5LT5uYW1lKTsKLSAgICBidWZmWyBzaXplb2YoYnVmZiktMSBdID0gMDsKKyAgICBicHRyID0gYnVmZjsKKyAgICBicHRyICs9IHNwcmludGYoYnB0ciwgInNubXBfcGFyc2VfY29uZmlnX3RhcmdldEFkZHIsIHJlYWQ6ICIpOworICAgIGJwdHIgPSByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZyhicHRyLCAodV9jaGFyKiluZXdFbnRyeS0+bmFtZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5uYW1lTGVuKTsKKyAgICAqYnB0cisrID0gJ1xuJzsKICAgICBmb3IgKGkgPSAwOyBpIDwgbmV3RW50cnktPnREb21haW5MZW47IGkrKykgewotICAgICAgICBzbnByaW50ZigmYnVmZltzdHJsZW4oYnVmZildLCBzaXplb2YoYnVmZiktc3RybGVuKGJ1ZmYpLTEsCi0gICAgICAgICAgICAgICAgICIuJWQiLCAoaW50KSBuZXdFbnRyeS0+dERvbWFpbltpXSk7Ci0gICAgICAgIGJ1ZmZbIHNpemVvZihidWZmKS0xIF0gPSAwOworICAgICAgICBicHRyICs9IHNucHJpbnRmKGJwdHIsIGJ1ZmYgKyBzaXplb2YoYnVmZikgLSBicHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICIuJWQiLCAoaW50KSBuZXdFbnRyeS0+dERvbWFpbltpXSk7CiAgICAgfQotICAgIHNucHJpbnRmKCZidWZmW3N0cmxlbihidWZmKV0sIHNpemVvZihidWZmKS1zdHJsZW4oYnVmZiktMSwKLSAgICAgICAgICAgICIgJXMgJWQgJWQgJXMgJXMgJWQgJWRcbiIsCi0gICAgICAgICAgICBuZXdFbnRyeS0+dEFkZHJlc3MsIG5ld0VudHJ5LT50aW1lb3V0LCBuZXdFbnRyeS0+cmV0cnlDb3VudCwKLSAgICAgICAgICAgIG5ld0VudHJ5LT50YWdMaXN0LCBuZXdFbnRyeS0+cGFyYW1zLCBuZXdFbnRyeS0+c3RvcmFnZVR5cGUsCi0gICAgICAgICAgICBuZXdFbnRyeS0+cm93U3RhdHVzKTsKLSAgICBidWZmWyBzaXplb2YoYnVmZiktMSBdID0gMDsKLSAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsIGJ1ZmYpKTsKKyAgICBicHRyICs9IHNucHJpbnRmKGJwdHIsIGJ1ZmYgKyBzaXplb2YoYnVmZikgLSBicHRyLAorICAgICAgICAgICAgICAgICAgICAgIiAlcyAlZCAlZCAlcyAlcyAlZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIG5ld0VudHJ5LT50QWRkcmVzcywgbmV3RW50cnktPnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICBuZXdFbnRyeS0+cmV0cnlDb3VudCwgbmV3RW50cnktPnRhZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICBuZXdFbnRyeS0+cGFyYW1zLCBuZXdFbnRyeS0+c3RvcmFnZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICBuZXdFbnRyeS0+cm93U3RhdHVzKTsKKyAgICBidWZmWyBzaXplb2YoYnVmZikgLSAxIF0gPSAwOworICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwgIiVzIiwgYnVmZikpOwogCiAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9hZGRUb0xpc3QobmV3RW50cnksICZhQWRkclRhYmxlKTsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldCAqLwpAQCAtNjc3LDUzICs2ODQsNDggQEAKICAqIGZvciB0aGlzIE1JQiB0YWJsZS4gSXQgd3JpdGVzIG91dCBhbGwgdGhlIG5vbi12b2xhdGlsZSByb3dzIAogICogdG8gcGVybWFuZW50IHN0b3JhZ2Ugb24gYSBzaHV0ZG93biAgCiAgKi8KLWludAorc3RhdGljIGludAogc3RvcmVfc25tcFRhcmdldEFkZHJFbnRyeShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKQogewotICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpjdXJyX3N0cnVjdDsKLSAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XTsKKyAgICBjb25zdCBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqY3Vycl9zdHJ1Y3Q7CisgICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF0sICpjdXIsICplcCA9IGxpbmUgKyBzaXplb2YobGluZSk7CiAgICAgaW50ICAgICAgICAgICAgIGk7CiAKLSAgICBpZiAoKGN1cnJfc3RydWN0ID0gYUFkZHJUYWJsZSkgIT0gMCkgewotICAgICAgICB3aGlsZSAoY3Vycl9zdHJ1Y3QgIT0gMCkgewotICAgICAgICAgICAgaWYgKChjdXJyX3N0cnVjdC0+c3RvcmFnZVR5cGUgPT0gU05NUF9TVE9SQUdFX05PTlZPTEFUSUxFIHx8Ci0gICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5zdG9yYWdlVHlwZSA9PSBTTk1QX1NUT1JBR0VfUEVSTUFORU5UKQotICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICAgKGN1cnJfc3RydWN0LT5yb3dTdGF0dXMgPT0gU05NUF9ST1dfQUNUSVZFIHx8Ci0gICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5yb3dTdGF0dXMgPT0gU05NUF9ST1dfTk9USU5TRVJWSUNFKSkgewotICAgICAgICAgICAgICAgIHNucHJpbnRmKGxpbmUsIHNpemVvZihsaW5lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0YXJnZXRBZGRyICVzICIsIGN1cnJfc3RydWN0LT5uYW1lKTsKLSAgICAgICAgICAgICAgICBsaW5lWyBzaXplb2YobGluZSktMSBdID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3Vycl9zdHJ1Y3QtPnREb21haW5MZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBzbnByaW50ZigmbGluZVtzdHJsZW4obGluZSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihsaW5lKS1zdHJsZW4obGluZSktMSwgIi4laSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgY3Vycl9zdHJ1Y3QtPnREb21haW5baV0pOwotICAgICAgICAgICAgICAgICAgICBsaW5lWyBzaXplb2YobGluZSktMSBdID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3RybGNhdChsaW5lLCAiICIsIHNpemVvZihsaW5lKSk7Ci0gICAgICAgICAgICAgICAgcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoJmxpbmVbc3RybGVuKGxpbmUpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+dEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnRBZGRyZXNzTGVuKTsKLQotICAgICAgICAgICAgICAgIHNucHJpbnRmKCZsaW5lW3N0cmxlbihsaW5lKV0sIHNpemVvZihsaW5lKS1zdHJsZW4obGluZSktMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICIgJWkgJWkgXCIlc1wiICVzICVpICVpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT50aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnJldHJ5Q291bnQsIGN1cnJfc3RydWN0LT50YWdMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnBhcmFtcywgY3Vycl9zdHJ1Y3QtPnN0b3JhZ2VUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnJvd1N0YXR1cyk7Ci0gICAgICAgICAgICAgICAgbGluZVsgc2l6ZW9mKGxpbmUpLTEgXSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIHN0b3JlIHRvIGZpbGUgCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOworICAgIGN1cnJfc3RydWN0ID0gYUFkZHJUYWJsZTsKKyAgICB3aGlsZSAoY3Vycl9zdHJ1Y3QgIT0gTlVMTCkgeworICAgICAgICBpZiAoKGN1cnJfc3RydWN0LT5zdG9yYWdlVHlwZSA9PSBTTk1QX1NUT1JBR0VfTk9OVk9MQVRJTEUgfHwKKyAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+c3RvcmFnZVR5cGUgPT0gU05NUF9TVE9SQUdFX1BFUk1BTkVOVCkgJiYKKyAgICAgICAgICAgIChjdXJyX3N0cnVjdC0+cm93U3RhdHVzID09IFNOTVBfUk9XX0FDVElWRSB8fAorICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5yb3dTdGF0dXMgPT0gU05NUF9ST1dfTk9USU5TRVJWSUNFKSkgeworICAgICAgICAgICAgY3VyID0gbGluZSArIHNucHJpbnRmKGxpbmUsIHNpemVvZihsaW5lKSwgInRhcmdldEFkZHIgIik7CisgICAgICAgICAgICBjdXIgPSByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZygKKyAgICAgICAgICAgICAgICBjdXIsICh1X2NoYXIqKWN1cnJfc3RydWN0LT5uYW1lRGF0YSwgY3Vycl9zdHJ1Y3QtPm5hbWVMZW4pOworICAgICAgICAgICAgKmN1cisrID0gJyAnOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnJfc3RydWN0LT50RG9tYWluTGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBjdXIgKz0gc25wcmludGYoY3VyLCBlcCAtIGN1ciwgIi4laSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIGN1cnJfc3RydWN0LT50RG9tYWluW2ldKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJfc3RydWN0ID0gY3Vycl9zdHJ1Y3QtPm5leHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICAgICAgICAgICpjdXIrKyA9ICcgJzsKKyAgICAgICAgICAgIGN1ciA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKAorICAgICAgICAgICAgICAgIGN1ciwgY3Vycl9zdHJ1Y3QtPnRBZGRyZXNzLCBjdXJyX3N0cnVjdC0+dEFkZHJlc3NMZW4pOworICAgICAgICAgICAgY3VyICs9IHNucHJpbnRmKGN1ciwgZXAgLSBjdXIsICIgJWkgJWkgXCIlc1wiICVzICVpICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+cmV0cnlDb3VudCwgY3Vycl9zdHJ1Y3QtPnRhZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnBhcmFtcywgY3Vycl9zdHJ1Y3QtPnN0b3JhZ2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5yb3dTdGF0dXMpOworICAgICAgICAgICAgbGluZVsgc2l6ZW9mKGxpbmUpLTEgXSA9IDA7CiAKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzdG9yZSB0byBmaWxlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1cnJfc3RydWN0ID0gY3Vycl9zdHJ1Y3QtPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHN0b3JlX3NubXBUYXJnZXRBZGRyRW50cnkgICovCiAKIApAQCAtNzU3LDYgKzc1OSw3IEBACiAgICAgICovCiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBUQVJHRVRBRERSVERPTUFJTjoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXBUYXJnZXRBZGRyVERvbWFpbjsKICAgICAgICAgYnJlYWs7CkBAIC03ODEsMTkgKzc4NCwyMSBAQAogICAgIGNhc2UgU05NUFRBUkdFVEFERFJST1dTVEFUVVM6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wVGFyZ2V0QWRkclJvd1N0YXR1czsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gTlVMTDsKICAgICB9CiAKLSAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7ICAgICAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyIGlmIG5vdCAqLworICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIgaWYgbm90ICovCisgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOwogCiAgICAgLyoKICAgICAgKiBsb29rIGZvciBPSUQgaW4gY3VycmVudCB0YWJsZSAKICAgICAgKi8KICAgICBpZiAoKHRlbXBfc3RydWN0ID0gc2VhcmNoX3NubXBUYXJnZXRBZGRyVGFibGUodnAtPm5hbWUsIHZwLT5uYW1lbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0KSkgPT0gMCkgewotICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCkpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyoKQEAgLTgwNSw3ICs4MTAsNyBAQAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CiAgICAgY2FzZSBTTk1QVEFSR0VUQUREUlRET01BSU46CiAgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+dERvbWFpbkxlbiA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcF9zdHJ1Y3QtPnREb21haW5MZW47IGkrKykgewogICAgICAgICAgICAgICAgIG9iamlkW2ldID0gdGVtcF9zdHJ1Y3QtPnREb21haW5baV07CkBAIC04MTUsOCArODIwLDggQEAKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIG9iamlkOwogCiAgICAgY2FzZSBTTk1QVEFSR0VUQUREUlRBRERSRVNTOgotICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnRBZGRyZXNzID09IDApCi0gICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnRBZGRyZXNzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgKnZhcl9sZW4gPSB0ZW1wX3N0cnVjdC0+dEFkZHJlc3NMZW47CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSB0ZW1wX3N0cnVjdC0+dEFkZHJlc3M7CiAKQEAgLTgzMCw3ICs4MzUsNyBAQAogCiAgICAgY2FzZSBTTk1QVEFSR0VUQUREUlRBR0xJU1Q6CiAgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+dGFnTGlzdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzdHJjcHkoc3RyaW5nLCB0ZW1wX3N0cnVjdC0+dGFnTGlzdCk7CisgICAgICAgICAgICBzdHJsY3B5KHN0cmluZywgdGVtcF9zdHJ1Y3QtPnRhZ0xpc3QsIHNpemVvZihzdHJpbmcpKTsKICAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgc3RyaW5nOwogICAgICAgICB9IGVsc2UgewpAQCAtODM4LDkgKzg0Myw5IEBACiAgICAgICAgIH0KIAogICAgIGNhc2UgU05NUFRBUkdFVEFERFJQQVJBTVM6Ci0gICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+cGFyYW1zID09IDApCi0gICAgICAgICAgICByZXR1cm4gKDApOwotICAgICAgICBzdHJjcHkoc3RyaW5nLCB0ZW1wX3N0cnVjdC0+cGFyYW1zKTsKKyAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5wYXJhbXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBzdHJsY3B5KHN0cmluZywgdGVtcF9zdHJ1Y3QtPnBhcmFtcywgc2l6ZW9mKHN0cmluZykpOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzdHJpbmcpOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgc3RyaW5nOwogCkBAIC04NTcsMTAgKzg2MiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX3NubXBUYXJnZXRBZGRyRW50cnlcbiIsCiAgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBOVUxMOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBpbnQKIHdyaXRlX3NubXBUYXJnZXRBZGRyVERvbWFpbihpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC04OTAsNyArODk3LDcgQEAKICAgICAgICAgaWYgKCh0YXJnZXQgPQogICAgICAgICAgICAgIHNlYXJjaF9zbm1wVGFyZ2V0QWRkclRhYmxlKHNubXBUYXJnZXRBZGRyT0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyT0lETGVuLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lX2xlbiwgMSkpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9sZW4sIDEpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gc25tcFRhcmdldEFkZHJURG9tYWluOiBCQUQgT0lEIVxuIikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CkBAIC05MjUsNiArOTMyLDggQEAKICAgICAgICAgICAgICAgICB0YXJnZXQtPnJvd1N0YXR1cyA9IFNOTVBfUk9XX05PVElOU0VSVklDRTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IENPTU1JVCkgeworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBGUkVFIHx8IGFjdGlvbiA9PSBVTkRPKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRyeSB0byB1bmRvIHRoZSBTRVQgaGVyZSAoYWJub3JtYWwgdXNhZ2Ugb2YgRlJFRSBjbGF1c2UpICAKQEAgLTk3Niw3ICs5ODUsNyBAQAogICAgICAgICBpZiAoKHRhcmdldCA9CiAgICAgICAgICAgICAgc2VhcmNoX3NubXBUYXJnZXRBZGRyVGFibGUoc25tcFRhcmdldEFkZHJPSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJPSURMZW4sIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfbGVuLCAxKSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lX2xlbiwgMSkpID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBzbm1wVGFyZ2V0QWRkclRBZGRyZXNzOiBCQUQgT0lEIVxuIikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CkBAIC0xMDEyLDYgKzEwMjEsNyBAQAogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IENPTU1JVCkgewogICAgICAgICBTTk1QX0ZSRUUob2xkX2FkZHIpOwogICAgICAgICBvbGRfYWRkciA9IE5VTEw7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IEZSRUUgfHwgYWN0aW9uID09IFVORE8pIHsKICAgICAgICAgLyoKICAgICAgICAgICogVHJ5IHRvIHVuZG8gdGhlIFNFVCBoZXJlIChhYm5vcm1hbCB1c2FnZSBvZiBGUkVFIGNsYXVzZSkgIApAQCAtMTA4Miw3ICsxMDkyLDcgQEAKICAgICAgICAgaWYgKCh0ZW1wX3N0cnVjdCA9CiAgICAgICAgICAgICAgc2VhcmNoX3NubXBUYXJnZXRBZGRyVGFibGUoc25tcFRhcmdldEFkZHJPSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJPSURMZW4sIG5hbWUsICZuYW1lX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gc25tcFRhcmdldEFkZHJUaW1lb3V0IDogQkFEIE9JRFxuIikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PU1VDSE5BTUU7CkBAIC0xMTA3LDYgKzExMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICB0ZW1wX3N0cnVjdC0+dGltZW91dCA9IGxvbmdfcmV0OwogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTE2NCw2ICsxMTc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkgIT0gTlVMTCkgewogICAgICAgICAgICAgdGFyZ2V0LT5yZXRyeUNvdW50ID0gbG9uZ19yZXQ7CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xMjU0LDYgKzEyNjYsNyBAQAogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IENPTU1JVCkgewogICAgICAgICBTTk1QX0ZSRUUob2xkX3RsaXN0KTsKICAgICAgICAgb2xkX3RsaXN0ID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gRlJFRSB8fCBhY3Rpb24gPT0gVU5ETykgewogICAgICAgICBzbm1wVGFyZ2V0QWRkck9JRFtzbm1wVGFyZ2V0QWRkck9JRExlbiAtIDFdID0KICAgICAgICAgICAgIFNOTVBUQVJHRVRBRERSVEFHTElTVENPTFVNTjsKQEAgLTEyOTYsNyArMTMwOSw3IEBACiAgICAgICAgIGlmICgodGFyZ2V0ID0KICAgICAgICAgICAgICBzZWFyY2hfc25tcFRhcmdldEFkZHJUYWJsZShzbm1wVGFyZ2V0QWRkck9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkck9JRExlbiwgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9sZW4sIDEpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfbGVuLCAxKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHNubXBUYXJnZXRBZGRyUGFyYW1zOiBCQUQgT0lEIVxuIikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CkBAIC0xMzMxLDYgKzEzNDQsNyBAQAogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IENPTU1JVCkgewogICAgICAgICBTTk1QX0ZSRUUob2xkX3BhcmFtcyk7CiAgICAgICAgIG9sZF9wYXJhbXMgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBGUkVFIHx8IGFjdGlvbiA9PSBVTkRPKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRyeSB0byB1bmRvIHRoZSBTRVQgaGVyZSAoYWJub3JtYWwgdXNhZ2Ugb2YgRlJFRSBjbGF1c2UpICAKQEAgLTE0MTcsNiArMTQzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpICE9IE5VTEwpIHsKICAgICAgICAgICAgIHRhcmdldC0+c3RvcmFnZVR5cGUgPSBsb25nX3JldDsKICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE0NDUsMTggKzE0NjAsMTggQEAKICAgICAgICAgdGVtcF9zdHJ1Y3QgPSBzbm1wVGFyZ2V0QWRkclRhYmxlX2NyZWF0ZSgpOwogICAgICAgICBpZiAoIXRlbXBfc3RydWN0KQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKLSAgICAgICAgdGVtcF9zdHJ1Y3QtPm5hbWUgPSAoY2hhciAqKSBtYWxsb2MobmV3TmFtZUxlbiArIDEpOwotICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPm5hbWUgPT0gTlVMTCkgeworICAgICAgICB0ZW1wX3N0cnVjdC0+bmFtZURhdGEgPSAoY2hhciAqKSBtYWxsb2MobmV3TmFtZUxlbik7CisgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+bmFtZURhdGEgPT0gTlVMTCkgewogICAgICAgICAgICAgU05NUF9GUkVFKHRlbXBfc3RydWN0LT50YWdMaXN0KTsKICAgICAgICAgICAgIFNOTVBfRlJFRSh0ZW1wX3N0cnVjdCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCisgICAgICAgIHRlbXBfc3RydWN0LT5uYW1lTGVuID0gbmV3TmFtZUxlbjsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIG5ld05hbWVMZW47IGkrKykgewotICAgICAgICAgICAgdGVtcF9zdHJ1Y3QtPm5hbWVbaV0gPSAoY2hhcikgbmFtZVtpICsgc25tcFRhcmdldEFkZHJPSURMZW5dOworICAgICAgICAgICAgdGVtcF9zdHJ1Y3QtPm5hbWVEYXRhW2ldID0gKGNoYXIpIG5hbWVbaSArIHNubXBUYXJnZXRBZGRyT0lETGVuXTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBfc3RydWN0LT5uYW1lW25ld05hbWVMZW5dID0gJ1wwJzsKICAgICAgICAgdGVtcF9zdHJ1Y3QtPnJvd1N0YXR1cyA9IFNOTVBfUk9XX05PVFJFQURZOwogCiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfYWRkVG9MaXN0KHRlbXBfc3RydWN0LCAmYUFkZHJUYWJsZSk7CkBAIC0xNTA0LDcgKzE1MTksNyBAQAogICAgICAgICBpZiAobmFtZV9sZW4gPCBzbm1wVGFyZ2V0QWRkck9JRExlbiArIDEgfHwKICAgICAgICAgICAgIG5hbWVfbGVuID4gc25tcFRhcmdldEFkZHJPSURMZW4gKyAzMikgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLCAiYmFkIGluZGV4IGxlbmd0aCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuIC0gc25tcFRhcmdldEFkZHJPSURMZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKG5hbWVfbGVuIC0gc25tcFRhcmdldEFkZHJPSURMZW4pKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKICAgICAgICAgfQogCkBAIC0xNjA2LDYgKzE2MjEsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBVTkRPIHx8IGFjdGlvbiA9PSBGUkVFKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyT0lEW3NubXBUYXJnZXRBZGRyT0lETGVuIC0gMV0gPQogICAgICAgICAgICAgU05NUFRBUkdFVEFERFJST1dTVEFUVVNDT0xVTU47CkBAIC0xNjUxLDYgKzE2NjcsNyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAKIHVfY2hhciAgICAgICAgICoKQEAgLTE2NjIsMTIgKzE2NzksMjAgQEAKIHsKICAgICBpZiAoaGVhZGVyX2dlbmVyaWModnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCkgPT0KICAgICAgICAgTUFUQ0hfRkFJTEVEKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdGFyZ2V0U3BpbkxvY2s7CisjZWxzZQorCQkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAodnAtPm1hZ2ljID09IFNOTVBUQVJHRVRTUElOTE9DSykgewotICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdGFyZ2V0U3BpbkxvY2s7CiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3RhcmdldFNwaW5Mb2NrOworI2Vsc2UKKwkJKndyaXRlX21ldGhvZCA9IE5VTEw7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIChzbm1wVGFyZ2V0U3BpbkxvY2spOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmggYi9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCmluZGV4IGIxYjVhZDEuLjBiNzBhZjUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaApAQCAtMTAsMTAgKzEwLDEwIEBACiAjZGVmaW5lIF9NSUJHUk9VUF9TTk1QVEFSR0VUQUREUkVOVFJZX0gKIAogLyoKLSAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBhbmQgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCisgKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUKICAqLwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogCiAgICAgLyoKQEAgLTQ2LDcgKzQ2LDggQEAKICAgICAgKiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgCiAgICAgICovCiAgICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0IHsKLSAgICAgICAgIGNoYXIgICAgICAgICAgICpuYW1lOworICAgICAgICAgY2hhciAgICAgICAgICAgKm5hbWVEYXRhOworICAgICAgICAgdW5zaWduZWQgY2hhciAgIG5hbWVMZW47CiAgICAgICAgICBvaWQgICAgICAgICAgICAgdERvbWFpbltNQVhfT0lEX0xFTl07CiAgICAgICAgICBpbnQgICAgICAgICAgICAgdERvbWFpbkxlbjsKICAgICAgICAgIHVuc2lnbmVkIGNoYXIgICp0QWRkcmVzczsKQEAgLTY3LDE5ICs2OCwxOSBAQAogICovCiAKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcFRhcmdldEFkZHJFbnRyeSh2b2lkKTsKLSAgICAgaW50ICAgICAgICAgICAgIHN0b3JlX3NubXBUYXJnZXRBZGRyRW50cnkoaW50IG1ham9ySUQsIGludCBtaW5vcklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CisgICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zbm1wVGFyZ2V0QWRkckVudHJ5KHZvaWQpOwogICAgICBGaW5kVmFyTWV0aG9kICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnk7CiAKICAgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmdldF9hZGRyVGFibGUodm9pZCk7Ci0gICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpnZXRfYWRkckZvck5hbWUoY2hhciAqbmFtZSk7CisgICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpnZXRfYWRkckZvck5hbWUyKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbmFtZUxlbik7CiAgICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpzbm1wVGFyZ2V0QWRkclRhYmxlX2NyZWF0ZSh2b2lkKTsKICAgICAgdm9pZCAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfYWRkKHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3RW50cnkpOwogCiAgICAgIHZvaWQgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0QWRkcihjb25zdCBjaGFyICosIGNoYXIgKik7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0QWRkclREb21haW47CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0QWRkclRBZGRyZXNzOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldEFkZHJUaW1lb3V0OwpAQCAtODksNyArOTAsOCBAQAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldEFkZHJTdG9yYWdlVHlwZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRBZGRyUm93U3RhdHVzOwogCi0gICAgIEZpbmRWYXJNZXRob2QgICB2YXJfdGFyZ2V0U3BpbkxvY2s7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV90YXJnZXRTcGluTG9jazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgIEZpbmRWYXJNZXRob2QgICB2YXJfdGFyZ2V0U3BpbkxvY2s7CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1NOTVBUQVJHRVRBRERSRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jCmluZGV4IDA2OTM2YjEuLjRlMWY0ZTIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYworKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMKQEAgLTE1LDkgKzE1LDYgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTMwLDcgKzI3LDcgQEAKIG9pZCAgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1zT0lEW3NubXBUYXJnZXRQYXJhbXNPSURMZW5dID0KICAgICB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxLCAzLCAxLCAwIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmFQVGFibGUgPSAwOworc3RhdGljIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqYVBUYWJsZSA9IE5VTEw7CiAKIAogLyoKQEAgLTUxLDE2ICs0OCwxNiBAQAogICAgIG5ld0VudHJ5ID0gKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqKQogICAgICAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCkpOwogCi0gICAgbmV3RW50cnktPnBhcmFtTmFtZSA9IDA7CisgICAgbmV3RW50cnktPnBhcmFtTmFtZSA9IE5VTEw7CiAgICAgbmV3RW50cnktPm1wTW9kZWwgPSAtMTsKIAogICAgIG5ld0VudHJ5LT5zZWNNb2RlbCA9IC0xOwotICAgIG5ld0VudHJ5LT5zZWNOYW1lID0gMDsKKyAgICBuZXdFbnRyeS0+c2VjTmFtZSA9IE5VTEw7CiAgICAgbmV3RW50cnktPnNlY0xldmVsID0gLTE7CiAKICAgICBuZXdFbnRyeS0+c3RvcmFnZVR5cGUgPSBTTk1QX1NUT1JBR0VfTk9OVk9MQVRJTEU7CiAgICAgbmV3RW50cnktPnJvd1N0YXR1cyA9IFNOTVBfUk9XX05PTkVYSVNURU5UOwotICAgIG5ld0VudHJ5LT5uZXh0ID0gMDsKKyAgICBuZXdFbnRyeS0+bmV4dCA9IE5VTEw7CiAgICAgcmV0dXJuIG5ld0VudHJ5OwogfQogCkBAIC05OCw3ICs5NSw3IEBACiAgICAgLyoKICAgICAgKiBpZiB0aGUgbGlzdCBpcyBlbXB0eSwgYWRkIHRoZSBuZXcgZW50cnkgdG8gdGhlIHRvcCAKICAgICAgKi8KLSAgICBpZiAoKHByZXZfc3RydWN0ID0gY3Vycl9zdHJ1Y3QgPSAqbGlzdFB0cikgPT0gMCkgeworICAgIGlmICgocHJldl9zdHJ1Y3QgPSBjdXJyX3N0cnVjdCA9ICpsaXN0UHRyKSA9PSBOVUxMKSB7CiAgICAgICAgICpsaXN0UHRyID0gbmV3RW50cnk7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewpAQCAtMTEzLDcgKzExMCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIHNlYXJjaCB0aHJvdWdoIHRoZSBsaXN0IGZvciBhbiBlcXVhbCBvciBncmVhdGVyIE9JRCB2YWx1ZSAKICAgICAgICAgICovCi0gICAgICAgIHdoaWxlIChjdXJyX3N0cnVjdCAhPSAwKSB7CisgICAgICAgIHdoaWxlIChjdXJyX3N0cnVjdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBjdXJyT0lETGVuID0gc3RybGVuKGN1cnJfc3RydWN0LT5wYXJhbU5hbWUpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIGN1cnJPSURMZW47IGkrKykgewogICAgICAgICAgICAgICAgIGN1cnJPSURbaV0gPSBjdXJyX3N0cnVjdC0+cGFyYW1OYW1lW2ldOwpAQCAtMTY4LDE0ICsxNjUsMTQgQEAKIHsKICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKnRwdHI7CiAKLSAgICBpZiAoKHRwdHIgPSAqbGlzdFB0cikgPT0gMCkKKyAgICBpZiAoKHRwdHIgPSAqbGlzdFB0cikgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIGVsc2UgaWYgKHRwdHIgPT0gb2xkRW50cnkpIHsKICAgICAgICAgKmxpc3RQdHIgPSAoKmxpc3RQdHIpLT5uZXh0OwogICAgICAgICBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKHRwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHRwdHItPm5leHQgIT0gMCkgeworICAgICAgICB3aGlsZSAodHB0ci0+bmV4dCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAodHB0ci0+bmV4dCA9PSBvbGRFbnRyeSkgewogICAgICAgICAgICAgICAgIHRwdHItPm5leHQgPSB0cHRyLT5uZXh0LT5uZXh0OwogICAgICAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbVRhYmxlX2Rpc3Bvc2Uob2xkRW50cnkpOwpAQCAtMjA1LDcgKzIwMiw3IEBACiAgICAgICovCiAgICAgbWVtY3B5KG5ld051bSwgYmFzZU5hbWUsIGJhc2VOYW1lTGVuICogc2l6ZW9mKG9pZCkpOwogCi0gICAgZm9yICh0ZW1wX3N0cnVjdCA9IGFQVGFibGU7IHRlbXBfc3RydWN0ICE9IDA7CisgICAgZm9yICh0ZW1wX3N0cnVjdCA9IGFQVGFibGU7IHRlbXBfc3RydWN0ICE9IE5VTEw7CiAgICAgICAgICB0ZW1wX3N0cnVjdCA9IHRlbXBfc3RydWN0LT5uZXh0KSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBzdHJsZW4odGVtcF9zdHJ1Y3QtPnBhcmFtTmFtZSk7IGkrKykgewogICAgICAgICAgICAgbmV3TnVtW2Jhc2VOYW1lTGVuICsgaV0gPSB0ZW1wX3N0cnVjdC0+cGFyYW1OYW1lW2ldOwpAQCAtMjIzLDcgKzIyMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gdGVtcF9zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuICgwKTsKKyAgICByZXR1cm4gTlVMTDsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VhcmNoX3NubXBUYXJnZXRQYXJhbXNUYWJsZSAqLwogCiAKQEAgLTIzNiw3ICsyMzMsNyBAQAogc25tcFRhcmdldFBhcmFtc19yb3dTdGF0dXNDaGVjayhzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmVudHJ5KQogewogICAgIGlmICgoZW50cnktPm1wTW9kZWwgPCAwKSB8fCAoZW50cnktPnNlY01vZGVsIDwgMCkgfHwKLSAgICAgICAgKGVudHJ5LT5zZWNMZXZlbCA8IDApIHx8IChlbnRyeS0+c2VjTmFtZSA9PSAwKSkKKyAgICAgICAgKGVudHJ5LT5zZWNMZXZlbCA8IDApIHx8IChlbnRyeS0+c2VjTmFtZSA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMTsKQEAgLTI1NCwxNyArMjUxLDE3IEBACiAgKi8KIAogc3RydWN0IHZhcmlhYmxlMiBzbm1wVGFyZ2V0UGFyYW1zRW50cnlfdmFyaWFibGVzW10gPSB7Ci0gICAge1NOTVBUQVJHRVRQQVJBTVNNUE1PREVMLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUUEFSQU1TTVBNT0RFTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeSwgMSwge1NOTVBUQVJHRVRQQVJBTVNNUE1PREVMQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU1PREVMLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlNT0RFTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeSwgMSwge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU1PREVMQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5LCAxLCB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTkFNRUNPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlMRVZFTCwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTEVWRUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnksIDEsIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlMRVZFTENPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUUEFSQU1TU1RPUkFHRVRZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRQQVJBTVNTVE9SQUdFVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeSwgMSwge1NOTVBUQVJHRVRQQVJBTVNTVE9SQUdFVFlQRUNPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5LCAxLCB7U05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVU0NPTFVNTn19CiB9OwogCkBAIC0yNzgsMTUgKzI3NSwxNSBAQAogdm9pZAogaW5pdF9zbm1wVGFyZ2V0UGFyYW1zRW50cnkodm9pZCkKIHsKLSAgICBhUFRhYmxlID0gMDsKKyAgICBhUFRhYmxlID0gTlVMTDsKIAogICAgIFJFR0lTVEVSX01JQigidGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbXNFbnRyeV92YXJpYWJsZXMsIHZhcmlhYmxlMiwKICAgICAgICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtc0VudHJ5X3ZhcmlhYmxlc19vaWQpOwogCiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInRhcmdldFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldFBhcmFtcywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0UGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICgqKSh2b2lkKSkwLCBOVUxMKTsKIAogICAgIC8qCiAgICAgICogd2UgbmVlZCB0byBiZSBjYWxsZWQgYmFjayBsYXRlciAKQEAgLTI5NSwxMyArMjkyLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZV9zbm1wVGFyZ2V0UGFyYW1zRW50cnksIE5VTEwpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgaW5pdF9zbm1wVGFyZ2V0UGFybXNFbnRyeSAgKi8KIAordm9pZAorc2h1dGRvd25fc25tcFRhcmdldFBhcmFtc0VudHJ5KHZvaWQpCit7CisgICAgd2hpbGUgKGFQVGFibGUpCisJc25tcFRhcmdldFBhcmFtVGFibGVfcmVtRnJvbUxpc3QoYVBUYWJsZSwgJmFQVGFibGUpOworfQorCiAKIGludAogc25tcFRhcmdldFBhcmFtc19hZGRQYXJhbU5hbWUoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gcGFyYW0gbmFtZSBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC0zMjUsMTEgKzMyOSwxMSBAQAogc25tcFRhcmdldFBhcmFtc19hZGRNUE1vZGVsKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gbXAgbW9kZWwgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2VQYXJhbXNFbnRyeTogbXAgbW9kZWwgaXMgbm90IGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTM1MCwxMSArMzU0LDExIEBACiBzbm1wVGFyZ2V0UGFyYW1zX2FkZFNlY01vZGVsKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIHNlYyBtb2RlbCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZVBhcmFtc0VudHJ5OiBzZWN1cml0eSBtb2RlbCBpcyBub3QgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtMzc2LDcgKzM4MCw3IEBACiBzbm1wVGFyZ2V0UGFyYW1zX2FkZFNlY05hbWUoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyBzZWN1cml0eSBuYW1lIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTM5MSwxMSArMzk1LDExIEBACiBzbm1wVGFyZ2V0UGFyYW1zX2FkZFNlY0xldmVsKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIHNlY3VyaXR5IGxldmVsIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdlUGFyYW1zRW50cnk6IHNlY3VyaXR5IGxldmVsIGlzIG5vdCBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC00MTcsMTEgKzQyMSwxMSBAQAogc25tcFRhcmdldFBhcmFtc19hZGRTdG9yYWdlVHlwZShzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyBzdG9yYWdlIHR5cGUgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2VQYXJhbXNFbnRyeTogc3RvcmFnZSB0eXBlIGlzIG5vdCBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC00NTUsMTEgKzQ1OSwxMSBAQAogc25tcFRhcmdldFBhcmFtc19hZGRSb3dTdGF0dXMoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIHJvdyBzdGF0dXMgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2VQYXJhbXNFbnRyeTogcm93IHN0YXR1cyBpcyBub3QgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtNTM1LDEzICs1MzksMTEgQEAKICAgICAgICAgc25tcFRhcmdldFBhcmFtVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpLAotICAgICAgICAgICAgInNubXBfcGFyc2VfY29uZmlnX3RhcmdldFBhcmFtcywgcmVhZDogJXMgJWQgJWQgJXMgJWQgJWQgJWRcbiIsCi0gICAgICAgICAgICBuZXdFbnRyeS0+cGFyYW1OYW1lLCBuZXdFbnRyeS0+bXBNb2RlbCwgbmV3RW50cnktPnNlY01vZGVsLAotICAgICAgICAgICAgbmV3RW50cnktPnNlY05hbWUsIG5ld0VudHJ5LT5zZWNMZXZlbCwgbmV3RW50cnktPnN0b3JhZ2VUeXBlLAotICAgICAgICAgICAgbmV3RW50cnktPnJvd1N0YXR1cyk7Ci0gICAgYnVmZlsgc2l6ZW9mKGJ1ZmYpLTEgXSA9IDA7Ci0gICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsIGJ1ZmYpKTsKKyAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKKyAgICAgICAgICAgICAgICAic25tcF9wYXJzZV9jb25maWdfdGFyZ2V0UGFyYW1zLCByZWFkOiAlcyAlZCAlZCAlcyAlZCAlZCAlZFxuIiwKKyAgICAgICAgICAgICAgICBuZXdFbnRyeS0+cGFyYW1OYW1lLCBuZXdFbnRyeS0+bXBNb2RlbCwgbmV3RW50cnktPnNlY01vZGVsLAorICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5zZWNOYW1lLCBuZXdFbnRyeS0+c2VjTGV2ZWwsIG5ld0VudHJ5LT5zdG9yYWdlVHlwZSwKKyAgICAgICAgICAgICAgICBuZXdFbnRyeS0+cm93U3RhdHVzKSk7CiAKICAgICB1cGRhdGVfdGltZXN0YW1wKG5ld0VudHJ5KTsKICAgICBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9hZGRUb0xpc3QobmV3RW50cnksICZhUFRhYmxlKTsKQEAgLTU2Niw4ICs1NjgsOCBAQAogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOwogCiAgICAgc3RyY3B5KGxpbmUsICIiKTsKLSAgICBpZiAoKGN1cnJfc3RydWN0ID0gYVBUYWJsZSkgIT0gMCkgewotICAgICAgICB3aGlsZSAoY3Vycl9zdHJ1Y3QgIT0gMCkgeworICAgIGlmICgoY3Vycl9zdHJ1Y3QgPSBhUFRhYmxlKSAhPSBOVUxMKSB7CisgICAgICAgIHdoaWxlIChjdXJyX3N0cnVjdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoKGN1cnJfc3RydWN0LT5zdG9yYWdlVHlwZSA9PSBTTk1QX1NUT1JBR0VfTk9OVk9MQVRJTEUgfHwKICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnN0b3JhZ2VUeXBlID09IFNOTVBfU1RPUkFHRV9QRVJNQU5FTlQpCiAgICAgICAgICAgICAgICAgJiYKQEAgLTYxMyw2ICs2MTUsNyBAQAogICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqdGVtcF9zdHJ1Y3Q7CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBUQVJHRVRQQVJBTVNNUE1PREVMOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcFRhcmdldFBhcmFtc01QTW9kZWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNjMxLDE5ICs2MzQsMjEgQEAKICAgICBjYXNlIFNOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVM6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wVGFyZ2V0UGFyYW1zUm93U3RhdHVzOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgfQogCi0gICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOyAgICAgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlciBpZiBub3QgKi8KKyAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyIGlmIG5vdCAqLworICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsKIAogICAgIC8qCiAgICAgICogbG9vayBmb3IgT0lEIGluIGN1cnJlbnQgdGFibGUgCiAgICAgICovCiAgICAgaWYgKCh0ZW1wX3N0cnVjdCA9IHNlYXJjaF9zbm1wVGFyZ2V0UGFyYW1zVGFibGUodnAtPm5hbWUsIHZwLT5uYW1lbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCkpID09IDApIHsKLSAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCkpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyoKQEAgLTY1OSw3ICs2NjQsNyBAQAogICAgICAgICAgKiBpZiB1bnNldCB2YWx1ZSwgKGkuZS4gbmV3IHJvdykgCiAgICAgICAgICAqLwogICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPm1wTW9kZWwgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGxvbmdfcmV0ID0gdGVtcF9zdHJ1Y3QtPm1wTW9kZWw7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQ7CiAKQEAgLTY2OCw3ICs2NzMsNyBAQAogICAgICAgICAgKiBpZiB1bnNldCB2YWx1ZSwgKGkuZS4gbmV3IHJvdykgCiAgICAgICAgICAqLwogICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnNlY01vZGVsID09IC0xKQotICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBsb25nX3JldCA9IHRlbXBfc3RydWN0LT5zZWNNb2RlbDsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldDsKIApAQCAtNjc2LDggKzY4MSw4IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGlmIHVuc2V0IHZhbHVlLCAoaS5lLiBuZXcgcm93KSAKICAgICAgICAgICovCi0gICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+c2VjTmFtZSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5zZWNOYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgLyoKICAgICAgICAgICogaW5jbHVkaW5nIG51bGwgY2hhcmFjdGVyLiAKICAgICAgICAgICovCkBAIC02OTEsNyArNjk2LDcgQEAKICAgICAgICAgICogaWYgdW5zZXQgdmFsdWUsIChpLmUuIG5ldyByb3cpIAogICAgICAgICAgKi8KICAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5zZWNMZXZlbCA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbG9uZ19yZXQgPSB0ZW1wX3N0cnVjdC0+c2VjTGV2ZWw7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQ7CiAKQEAgLTcwOCw5ICs3MTMsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnlcbiIsCiAgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBOVUxMOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5ICovCiAKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIC8qCiAgKiBBc3NpZ24gYSB2YWx1ZSB0byB0aGUgbXBNb2RlbCB2YXJpYWJsZS4gIAogICovCkBAIC04NDIsNyArODUwLDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoZmluZF9zZWNfbW9kKGxvbmdfcmV0KSA9PSBOVUxMICYmIGxvbmdfcmV0ID49IDMpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHNubXBUYXJnZXRQYXJhbXNTZWNNb2RlbDogc2VjTW9kZWwgJWQgdW5zdXBwb3J0ZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gc25tcFRhcmdldFBhcmFtc1NlY01vZGVsOiBzZWNNb2RlbCAlbGQgdW5zdXBwb3J0ZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBsb25nX3JldCkpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOwogICAgICAgICB9CkBAIC0xMTE2LDcgKzExMjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHNubXBUYXJnZXRQYXJhbXNTZWNOYW1lOiBub3QgQVNOX09DVEVUX1NUUlxuIikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKICAgICAgICAgfQotICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPiAyNTUgfHwgdmFyX3ZhbF9sZW4gPCAwKSB7CisgICAgICAgIGlmICh2YXJfdmFsX2xlbiA+IDI1NSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gc25tcFRhcmdldFBhcmFtc1NlY05hbWU6IGJhZCBsZW5ndGhcbiIpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKQEAgLTEyNzMsNyArMTI4MSw3IEBACiAgICAgICAgIGlmIChuYW1lX2xlbiA8IHNubXBUYXJnZXRQYXJhbXNPSURMZW4gKyAxIHx8CiAgICAgICAgICAgICBuYW1lX2xlbiA+IHNubXBUYXJnZXRQYXJhbXNPSURMZW4gKyAzMikgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsICJiYWQgaW5kZXggbGVuZ3RoICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW4gLSBzbm1wVGFyZ2V0UGFyYW1zT0lETGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShuYW1lX2xlbiAtIHNubXBUYXJnZXRQYXJhbXNPSURMZW4pKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKICAgICAgICAgfQogCkBAIC0xMzY2LDYgKzEzNzQsNyBAQAogICAgICAgICAgICAgICAgIHVwZGF0ZV90aW1lc3RhbXAocGFyYW1zKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBVTkRPIHx8IGFjdGlvbiA9PSBGUkVFKSB7CiAgICAgICAgIHNubXBUYXJnZXRQYXJhbXNPSURbc25tcFRhcmdldFBhcmFtc09JRExlbiAtIDFdID0KICAgICAgICAgICAgIFNOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVNDT0xVTU47CkBAIC0xMzgyLDYgKzEzOTEsOSBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqCiBnZXRfcGFyYW1FbnRyeShjaGFyICpuYW1lKQogewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oCmluZGV4IDliNWFiODUuLmJkMzA1ODIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaAorKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKQEAgLTEsNzcgKzEsNzUgQEAKIAotLyoKLSAqIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IG1pYjJjIGFuZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgbWliIG1vZHVsZQotICogZm9yIHRoZSB1Y2Qtc25tcCBzbm1wZCBhZ2VudC4gRWRpdGVkIGJ5IE1pY2hhZWwgQmFlcgotICogCi0gKiBsYXN0IGNoYW5nZWQgMi8yLzk5LgotICovCi0KLSNpZm5kZWYgX01JQkdST1VQX1NOTVBUQVJHRVRQQVJBTVNFTlRSWV9ICi0jZGVmaW5lIF9NSUJHUk9VUF9TTk1QVEFSR0VUUEFSQU1TRU5UUllfSAotCi0vKgotICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGFuZCBjaGVja21pYiBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSAKLSAqLwotCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQotCi0gICAgLyoKLSAgICAgKiBNYWdpYyBudW1iZXIgZGVmaW5pdGlvbnM6IAotICAgICAqLwotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNNUE1PREVMICAgICAgICAxCi0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTU9ERUwgIDIKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlOQU1FICAgMwotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWUxFVkVMICA0Ci0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NUT1JBR0VUWVBFICAgIDUKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTICAgICAgNgotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNNUE1PREVMQ09MVU1OICAgICAgICAyCi0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTU9ERUxDT0xVTU4gIDMKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlOQU1FQ09MVU1OICAgNAotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWUxFVkVMQ09MVU1OICA1Ci0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NUT1JBR0VUWVBFQ09MVU1OICAgIDYKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTQ09MVU1OICAgICAgNwotICAgIC8qCi0gICAgICogc3RydWN0dXJlIGRlZmluaXRpb25zIAotICAgICAqLwotICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgewotICAgICAgICAgY2hhciAgICAgICAgICAgKnBhcmFtTmFtZTsKLSAgICAgICAgIGludCAgICAgICAgICAgICBtcE1vZGVsOwotICAgICAgICAgaW50ICAgICAgICAgICAgIHNlY01vZGVsOwotICAgICAgICAgY2hhciAgICAgICAgICAgKnNlY05hbWU7Ci0gICAgICAgICBpbnQgICAgICAgICAgICAgc2VjTGV2ZWw7Ci0gICAgICAgICBpbnQgICAgICAgICAgICAgc3RvcmFnZVR5cGU7Ci0gICAgICAgICBpbnQgICAgICAgICAgICAgcm93U3RhdHVzOwotICAgICAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICpuZXh0OwotICAgICAgICAgdGltZV90ICAgICAgICAgIHVwZGF0ZVRpbWU7Ci0gICAgIH07Ci0KLS8qCi0gKiB1dGlsaXR5IGZ1bmN0aW9ucyAKLSAqLwotICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmdldF9wYXJhbUVudHJ5KGNoYXIgKm5hbWUpOwotICAgICB2b2lkICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtVGFibGVfYWRkKHN0cnVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBhcmFtVGFibGVfc3RydWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ld0VudHJ5KTsKLSAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICpzbm1wVGFyZ2V0UGFyYW1UYWJsZV9jcmVhdGUodm9pZCk7Ci0KLS8qCi0gKiBmdW5jdGlvbiBkZWZpbml0aW9ucyAKLSAqLwotCi0gICAgIHZvaWQgICAgICAgICAgICBpbml0X3NubXBUYXJnZXRQYXJhbXNFbnRyeSh2b2lkKTsKLSAgICAgaW50ICAgICAgICAgICAgIHN0b3JlX3NubXBUYXJnZXRQYXJhbXNFbnRyeShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7Ci0gICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnk7Ci0KLSAgICAgdm9pZCAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXRQYXJhbXMoY29uc3QgY2hhciAqLCBjaGFyICopOwotCisgIC8qCisgICAqIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IG1pYjJjIGFuZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgbWliIG1vZHVsZQorICAgKiBmb3IgdGhlIHVjZC1zbm1wIHNubXBkIGFnZW50LiBFZGl0ZWQgYnkgTWljaGFlbCBCYWVyCisgICAqIAorICAgKiBsYXN0IGNoYW5nZWQgMi8yLzk5LgorICAgKi8KKyAKKyAgI2lmbmRlZiBfTUlCR1JPVVBfU05NUFRBUkdFVFBBUkFNU0VOVFJZX0gKKyAgI2RlZmluZSBfTUlCR1JPVVBfU05NUFRBUkdFVFBBUkFNU0VOVFJZX0gKKyAKKyAgICAgIC8qCisgICAgICAgKiBNYWdpYyBudW1iZXIgZGVmaW5pdGlvbnM6IAorICAgICAgICovCisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TTVBNT0RFTCAgICAgICAgMQorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTU9ERUwgIDIKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU5BTUUgICAzCisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlMRVZFTCAgNAorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NUT1JBR0VUWVBFICAgIDUKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVMgICAgICA2CisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TTVBNT0RFTENPTFVNTiAgICAgICAgMgorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTU9ERUxDT0xVTU4gIDMKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU5BTUVDT0xVTU4gICA0CisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlMRVZFTENPTFVNTiAgNQorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NUT1JBR0VUWVBFQ09MVU1OICAgIDYKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVNDT0xVTU4gICAgICA3CisgICAgICAvKgorICAgICAgICogc3RydWN0dXJlIGRlZmluaXRpb25zIAorICAgICAgICovCisgICAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0IHsKKyAgICAgICAgICAgY2hhciAgICAgICAgICAgKnBhcmFtTmFtZTsKKyAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1wTW9kZWw7CisgICAgICAgICAgIGludCAgICAgICAgICAgICBzZWNNb2RlbDsKKyAgICAgICAgICAgY2hhciAgICAgICAgICAgKnNlY05hbWU7CisgICAgICAgICAgIGludCAgICAgICAgICAgICBzZWNMZXZlbDsKKyAgICAgICAgICAgaW50ICAgICAgICAgICAgIHN0b3JhZ2VUeXBlOworICAgICAgICAgICBpbnQgICAgICAgICAgICAgcm93U3RhdHVzOworICAgICAgICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKm5leHQ7CisgICAgICAgICAgIHRpbWVfdCAgICAgICAgICB1cGRhdGVUaW1lOworICAgICAgIH07CisgCisgIC8qCisgICAqIHV0aWxpdHkgZnVuY3Rpb25zIAorICAgKi8KKyAgICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmdldF9wYXJhbUVudHJ5KGNoYXIgKm5hbWUpOworICAgICAgIHZvaWQgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9hZGQoc3RydWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ld0VudHJ5KTsKKyAgICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKnNubXBUYXJnZXRQYXJhbVRhYmxlX2NyZWF0ZSh2b2lkKTsKKyAgICAgICB2b2lkIHNubXBUYXJnZXRQYXJhbVRhYmxlX2Rpc3Bvc2Uoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICopOworIAorICAvKgorICAgKiBmdW5jdGlvbiBkZWZpbml0aW9ucyAKKyAgICovCisgCisgICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcFRhcmdldFBhcmFtc0VudHJ5KHZvaWQpOworICAgICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zbm1wVGFyZ2V0UGFyYW1zRW50cnkodm9pZCk7CisgICAgICAgaW50ICAgICAgICAgICAgIHN0b3JlX3NubXBUYXJnZXRQYXJhbXNFbnRyeShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOworICAgICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnk7CisgCisgICAgICAgdm9pZCAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXRQYXJhbXMoY29uc3QgY2hhciAqLCBjaGFyICopOworIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRQYXJhbXNNUE1vZGVsOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldFBhcmFtc1NlY01vZGVsOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldFBhcmFtc1NlY05hbWU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0UGFyYW1zU2VjTGV2ZWw7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0UGFyYW1zU3RvcmFnZVR5cGU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0UGFyYW1zUm93U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9TTk1QVEFSR0VUUEFSQU1TRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jCmluZGV4IDNjY2JhMWMuLjU2MTllMzUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYworKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMKQEAgLTEsOCArMSw2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2Vsc2UKQEAgLTEyLDEwICsxMCwyNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorI2lmIGRlZmluZWQoTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4pIHx8IGRlZmluZWQoTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTikKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaD4KKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oPgorI2VuZGlmCisKICNpbmNsdWRlICJzbm1wVGFyZ2V0QWRkckVudHJ5LmgiCiAjaW5jbHVkZSAic25tcFRhcmdldFBhcmFtc0VudHJ5LmgiCiAjaW5jbHVkZSAidGFyZ2V0LmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRkb21haW5fc3VwcG9ydCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRkb21haW5fdHJhbnNwb3J0X29pZCkKK25ldHNubXBfZmVhdHVyZV93YW50KG5ldHNubXBfdGxzdG1BZGRyX2dldF9zZXJ2ZXJJZCkKKwogI2RlZmluZSBNQVhfVEFHUyAxMjgKIAogbmV0c25tcF9zZXNzaW9uICoKQEAgLTI3LDYgKzQxLDkgQEAKICAgICBjaGFyICAgICAgICAgICAgYnVmW1NQUklOVF9NQVhfTEVOXTsKICAgICBjaGFyICAgICAgICAgICAgdGFnc1tNQVhfVEFHU11bU1BSSU5UX01BWF9MRU5dLCAqY3A7CiAgICAgaW50ICAgICAgICAgICAgIG51bXRhZ3MgPSAwLCBpOworI2lmIGRlZmluZWQoTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4pIHx8IGRlZmluZWQoTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTikKKyAgICBpbnQgICAgICAgICAgICAgdGxzID0gMDsKKyNlbmRpZgogICAgIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKnBhcmFtOwogCiAgICAgREVCVUdNU0dUTCgoInRhcmdldF9zZXNzaW9ucyIsICJsb29raW5nIGZvcjogJXNcbiIsIHRhZ2xpc3QpKTsKQEAgLTU0LDcgKzcxLDcgQEAKICAgICAgICAgICAgICh0YXJnYWRkcnMtPnREb21haW4sIHRhcmdhZGRycy0+dERvbWFpbkxlbiwgTlVMTCwgTlVMTCkgPT0gMCkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBkb21haW4gZm9yIHRhcmdldCBhZGRyZXNzIHRhYmxlIGVudHJ5ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+bmFtZURhdGEpOwogICAgICAgICB9CiAKICAgICAgICAgLyoKQEAgLTE1OSwxOSArMTc2LDg3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGRzdF9zdHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgdERvbWFpbiBpcyB0bHMgcmVsYXRlZCwgY2hlY2sgZm9yIHRscyBjb25maWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRscyA9IHNubXBfb2lkX2NvbXBhcmUodGFyZ2FkZHJzLT50RG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT50RG9tYWluTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcERUTFNVRFBEb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wRFRMU1VEUERvbWFpbl9sZW4pOworCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxzID0gc25tcF9vaWRfY29tcGFyZSh0YXJnYWRkcnMtPnREb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT50RG9tYWluTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBUTFNUQ1BEb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcFRMU1RDUERvbWFpbl9sZW4pOworI2VuZGlmCisjaWYgZGVmaW5lZChORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTikgfHwgZGVmaW5lZChORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGxzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydCAqY2VydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICpzZXJ2ZXJfaWQgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCSAgICAgIGJ1ZlszM107CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhcmdldF9zZXNzaW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGxvb2tpbmcgdXAgb3VyIGlkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT5wYXJhbXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX0lERU5USVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNfQ0VSVEtFWV9UQVJHRVRfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPnBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHQtPmZfY29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfc2Vzc2lvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBmb3VuZCBmaW5nZXJwcmludDogJXNcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQtPmZfY29uZmlnKHQsICJsb2NhbENlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+ZmluZ2VycHJpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShidWYsIHRhcmdhZGRycy0+bmFtZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPm5hbWVMZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZbdGFyZ2FkZHJzLT5uYW1lTGVuXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfc2Vzc2lvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBsb29raW5nIHVwIHRoZWlyIGlkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9SRU1PVEVfUEVFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TX0NFUlRLRVlfVEFSR0VUX0FERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VydCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhcmdldF9zZXNzaW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGZvdW5kIGZpbmdlcnByaW50OiAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5maW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+Zl9jb25maWcodCwgInBlZXJDZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmZpbmdlcnByaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNQUREUl9HRVRfU0VSVkVSSUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2lkID0gbmV0c25tcF90bHN0bUFkZHJfZ2V0X3NlcnZlcklkKGJ1Zik7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTUFERFJfR0VUX1NFUlZFUklEICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXJfaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfc2Vzc2lvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBmb3VuZCBzZXJ2ZXJJZDogJXNcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2lkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5mX2NvbmZpZyh0LCAidGhlaXJfaG9zdG5hbWUiLCBzZXJ2ZXJfaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZ0aGlzc2VzcywgMCwgc2l6ZW9mKHRoaXNzZXNzKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc3Nlc3MudGltZW91dCA9ICh0YXJnYWRkcnMtPnRpbWVvdXQpICogMTAwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc3Nlc3MucmV0cmllcyA9IHRhcmdhZGRycy0+cmV0cnlDb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFyZ2V0X3Nlc3Npb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dDogJWQgLT4gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQ6ICVkIC0+ICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc3Nlc3MudGltZW91dCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5tcE1vZGVsID09IFNOTVBfVkVSU0lPTl8zICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT5zZWNNb2RlbCAhPSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT5zZWNNb2RlbCAhPSBTTk1QX1NFQ19NT0RFTF9VU00gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnNlY01vZGVsICE9IFNOTVBfU0VDX01PREVMX1RTTSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgbW9kZWwvc2VjbW9kZWwgY29tYm8gZm9yIHRhcmdldCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIG1wTW9kZWwvc2VjTW9kZWwgY29tYm8gJWQvJWQgZm9yIHRhcmdldCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0tPm1wTW9kZWwsIHBhcmFtLT5zZWNNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT5uYW1lRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFhYWDogbWVtbGVhayAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMgYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMKaW5kZXggMDJlYmI3Mi4uMDEwOTk3NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuYwpAQCAtMTIsMTIgKzEyLDEyIEBACiAjaW5jbHVkZSAidGFyZ2V0X2NvdW50ZXJzLmgiCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaD4KIAotc3RhdGljIG9pZCAgIHVuYXZhaWxhYmxlX2NvbnRleHRfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxLCA0IH07Ci1zdGF0aWMgb2lkICAgdW5rbm93bl9jb250ZXh0X29pZFtdICAgICA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEsIDUgfTsKLQogdm9pZAogaW5pdF90YXJnZXRfY291bnRlcnModm9pZCkKIHsKKyAgICBjb25zdCBvaWQgdW5hdmFpbGFibGVfY29udGV4dF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEsIDQgfTsKKyAgICBjb25zdCBvaWQgdW5rbm93bl9jb250ZXh0X29pZFtdICAgICA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEsIDUgfTsKKwogICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfY291bnRlcnMiLCAiaW5pdGlhbGl6aW5nXG4iKSk7CiAKICAgICAvKgpAQCAtNDQsNiArNDQsNyBAQAogCiB9CiAKKwogaW50CiBnZXRfdW5rbm93bl9jb250ZXh0X2NvdW50KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmggYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgKaW5kZXggYTdkYmYwYS4uMzU1ZjM5MSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaApAQCAtMiw2ICsyLDkgQEAKICAqIHRlc3RoYW5kbGVyLmggCiAgKi8KIAorY29uZmlnX2V4Y2x1ZGUodGFyZ2V0L3RhcmdldF9jb3VudGVycykKKwogdm9pZCAgICAgICAgICAgIGluaXRfdGFyZ2V0X2NvdW50ZXJzKHZvaWQpOworCiBOZXRzbm1wX05vZGVfSGFuZGxlciBnZXRfdW5hdmFpbGFibGVfY29udGV4dF9jb3VudDsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIGdldF91bmtub3duX2NvbnRleHRfY291bnQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzIyMDdiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYwpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgInRhcmdldF9jb3VudGVyc181XzUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWxwZXJfc3RhdGlzdGljcykKKwordm9pZAoraW5pdF90YXJnZXRfY291bnRlcnNfNV81KHZvaWQpCit7CisgICAgb2lkIHRhcmdldF9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEgfTsKKworICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfY291bnRlcnMiLCAiaW5pdGlhbGl6aW5nXG4iKSk7CisKKyAgICBORVRTTk1QX1JFR0lTVEVSX1NUQVRJU1RJQ19IQU5ETEVSKAorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICJ0YXJnZXRfY291bnRlcnMiLCBOVUxMLCB0YXJnZXRfb2lkLCBPSURfTEVOR1RIKHRhcmdldF9vaWQpLAorICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLCA0LCBUQVJHRVQpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaCBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MGJmMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmgKQEAgLTAsMCArMSwzIEBACitjb25maWdfZXhjbHVkZSh0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzKQorCit2b2lkICAgICAgICAgICAgaW5pdF90YXJnZXRfY291bnRlcnNfNV81KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmggYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaAppbmRleCA1MDAzMTU3Li4wYzEzYTBmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaAorKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaApAQCAtMjAsOCArMjAsMTUgQEAKIGNvbmZpZ19yZXF1aXJlKHRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24pCiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUodGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4KQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUpCiAjZWxpZiBkZWZpbmVkKCBzb2xhcmlzMiApCiBjb25maWdfcmVxdWlyZSh0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIpCisjZWxpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGRyYWdvbmZseSkgfHwgZGVmaW5lZChkYXJ3aW4pCitjb25maWdfcmVxdWlyZSh0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQpCisjZWxpZiBkZWZpbmVkKG9wZW5ic2Q0KQorY29uZmlnX3JlcXVpcmUodGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QpCisjZWxpZiBkZWZpbmVkKG5ldGJzZDEpCitjb25maWdfcmVxdWlyZSh0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkKQogI2Vsc2UKIGNvbmZpZ19yZXF1aXJlKHRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl91bnN1cCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jCmluZGV4IDliMGNiNzguLmJiYTAxZmUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMKQEAgLTE2NCw2ICsxNjQsMTMgQEAKICAgICBmcmVlKGVudHJ5KTsKIH0KIAorI2lmZGVmIFRDUENPTk5fREVMRVRFX1NVUFBPUlRFRAorCisvKiBYWFggVE9ETzogdGhlc2UgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBldmVyeXdoZXJlOyB0byBlbmFibGUgdGhlCisgICBmdW5jdGlvbnMgZmlyc3QgaW1wbGVtZW50IG5ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZSBpbiB0aGUKKyAgIHRjcENvbm5fe09TfS5jIGZpbGUgYW5kIHRoZW4gZGVmaW5lIFRDUENPTk5fREVMRVRFX1NVUFBPUlRFRCBpbiB0aGUKKyAgIHRjcENvbm5fe09TfS5oIGZpbGUgKHdoaWNoIG1heSBuZWVkIHRvIGJlIGNyZWF0ZWQgZmlyc3QpLiAqLworCiAvKioKICAqIHVwZGF0ZSB1bmRlcmx5aW5nIGRhdGEgc3RvcmUgKGtlcm5lbCkgZm9yIGVudHJ5CiAgKgpAQCAtMTg5LDEwICsxOTYsMTEgQEAKICAgICBpZiAoISAoZW50cnktPmZsYWdzICYgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9ERUxFVEUpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgcmMgPSBuZXRzbm1wX2FyY2hfdGNwY29ubl9kZWxldGUoZW50cnkpOworICAgIHJjID0gbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlKGVudHJ5KTsKICAgICAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogVENQQ09OTl9ERUxFVEVfU1VQUE9SVEVEICovCiAKIC8qKgogICogdXBkYXRlIGFuIG9sZCB0Y3Bjb25uX2VudHJ5IGZyb20gYSBuZXcgb25lCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9mcmVlYnNkNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDFlODQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqICB0Y3BDb25uVGFibGUgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBGcmVlQlNEL0RyYWdvbkZseUJTRAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oPgorCisjaW5jbHVkZSAidGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUElQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcGlwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CisjZW5kaWYKKworc3RhdGljIGludCBfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyk7CisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfaW5pdChuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfY2xlYW51cChuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogY2xlYW51cAorICAgICAqLworfQorCisvKgorICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9jb3B5KG5ldHNubXBfdGNwY29ubl9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGNwY29ubl9lbnRyeSAqcmhzKQoreworICAgIHJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiogeHh4LXJrczo5IHRjcENvbm4gZGVsZXRlIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHJldHVybiAtMTsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyApCit7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJ0Y3Bjb25uX2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICV4KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfdGNwY29ublxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKyNpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGRhcndpbikKKyAgICAjZGVmaW5lIE5TX0VMRU0gc3RydWN0IHh0Y3BjYgorI2Vsc2UKKyAgICAjZGVmaW5lIE5TX0VMRU0gc3RydWN0IHhpbnBjYgorI2VuZGlmCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIHNpemVfdCAgIGxlbjsKKyAgICBpbnQgICAgICBzbmFtZVtdID0geyBDVExfTkVULCBQRl9JTkVULCBJUFBST1RPX1RDUCwgVENQQ1RMX1BDQkxJU1QgfTsKKyAgICBjaGFyICAgICAqdGNwY2JfYnVmID0gTlVMTDsKKyNpZiBkZWZpbmVkKGRyYWdvbmZseSkKKyAgICBzdHJ1Y3QgeGlucGNiICAqeGlnID0gTlVMTDsKKyAgICBpbnQgICAgICBTdGF0ZU1hcFtdID0geyAxLCAxLCAyLCAzLCA0LCA1LCA4LCA2LCAxMCwgOSwgNywgMTEgfTsKKyNlbHNlCisgICAgc3RydWN0IHhpbnBnZW4gKnhpZyA9IE5VTEw7CisgICAgaW50ICAgICAgU3RhdGVNYXBbXSA9IHsgMSwgMiwgMywgNCwgNSwgOCwgNiwgMTAsIDksIDcsIDExIH07CisjZW5kaWYKKyAgICBuZXRzbm1wX3RjcGNvbm5fZW50cnkgICplbnRyeTsKKyAgICBpbnQgICAgICBzdGF0ZTsKKyAgICBpbnQgICAgICByYyA9IDA7CisKKyAgICAvKgorICAgICAqICBSZWFkIGluIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgVENQIHRhYmxlIGRhdGEKKyAgICAgKi8KKyAgICBsZW4gPSAwOworICAgIGlmIChzeXNjdGwoc25hbWUsIDQsIDAsICZsZW4sIDAsIDApIDwgMCB8fAorICAgICAgICh0Y3BjYl9idWYgPSBtYWxsb2MobGVuKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzeXNjdGwoc25hbWUsIDQsIHRjcGNiX2J1ZiwgJmxlbiwgMCwgMCkgPCAwKSB7CisgICAgICAgIGZyZWUodGNwY2JfYnVmKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogIFVucGljayB0aGlzIGludG8gdGhlIGNvbnN0aXR1ZW50ICd4aW5wZ2VuJyBzdHJ1Y3R1cmVzLCBhbmQgZXh0cmFjdAorICAgICAqICAgICB0aGUgJ2lucGNiJyBlbGVtZW50cyBpbnRvIGEgbGlua2VkIGxpc3QgKGJ1aWx0IGluIHJldmVyc2UpCisgICAgICovCisjaWYgZGVmaW5lZChkcmFnb25mbHkpCisgICAgeGlnID0gKHN0cnVjdCB4aW5wY2IgICopIHRjcGNiX2J1ZjsKKyNlbHNlCisgICAgeGlnID0gKHN0cnVjdCB4aW5wZ2VuICopIHRjcGNiX2J1ZjsKKyAgICB4aWcgPSAoc3RydWN0IHhpbnBnZW4gKikgKChjaGFyICopIHhpZyArIHhpZy0+eGlnX2xlbik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoZHJhZ29uZmx5KQorICAgIHdoaWxlICh4aWcgJiYgKHhpZy0+eGlfbGVuID4gc2l6ZW9mKHN0cnVjdCB4aW5wY2IpKSkKKyNlbHNlCisgICAgd2hpbGUgKHhpZyAmJiAoeGlnLT54aWdfbGVuID4gc2l6ZW9mKHN0cnVjdCB4aW5wZ2VuKSkpCisjZW5kaWYKKyAgICB7CisJTlNfRUxFTSBwY2IgPSAqKChOU19FTEVNICopIHhpZyk7CisjaWYgZGVmaW5lZChkcmFnb25mbHkpCisJeGlnID0gKHN0cnVjdCB4aW5wY2IgICopICgoY2hhciAqKSB4aWcgKyB4aWctPnhpX2xlbik7CisjZWxzZQorCXhpZyA9IChzdHJ1Y3QgeGlucGdlbiAqKSAoKGNoYXIgKikgeGlnICsgeGlnLT54aWdfbGVuKTsKKyNlbmRpZgorCXN0YXRlID0gU3RhdGVNYXBbcGNiLnh0X3RwLnRfc3RhdGVdOworCisJaWYgKGxvYWRfZmxhZ3MpIHsKKwkgICAgaWYgKHN0YXRlID09IFRDUENPTk5FQ1RJT05TVEFURV9MSVNURU4pIHsKKwkJaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0xPQURfTk9MSVNURU4pIHsKKwkJICAgIERFQlVHTVNHVCgoInZlcmJvc2U6YWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKwkJCSAgICAgICAiIHNraXBwaW5nIGxpc3RlblxuIikpOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9MT0FEX09OTFlMSVNURU4pIHsKKwkJREVCVUdNU0dUKCgidmVyYm9zZTphY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorCQkJICAgICIgc2tpcHBpbmcgbm9uLWxpc3RlblxuIikpOworCQljb250aW51ZTsKKwkgICAgfQorCX0KKworI2lmICFkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisJaWYgKHBjYi54dF9pbnAuaW5wX3ZmbGFnICYgSU5QX0lQVjYpCisJICAgIGNvbnRpbnVlOworI2VuZGlmCisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc190Y3Bjb25uX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiogb2RkbHkgZW5vdWdoLCB0aGVzZSBhcHBlYXIgdG8gYWxyZWFkeSBiZSBpbiBuZXR3b3JrIG9yZGVyICovCisgICAgICAgIGVudHJ5LT5sb2NfcG9ydCA9IGh0b25zKHBjYi54dF9pbnAuaW5wX2xwb3J0KTsKKyAgICAgICAgZW50cnktPnJtdF9wb3J0ID0gaHRvbnMocGNiLnh0X2lucC5pbnBfZnBvcnQpOworICAgICAgICBlbnRyeS0+dGNwQ29ublN0YXRlID0gc3RhdGU7CisgICAgICAgIGVudHJ5LT5waWQgPSAwOworICAgICAgICAKKyAgICAgICAgLyoqIHRoZSBhZGRyIHN0cmluZyBtYXkgbmVlZCB3b3JrICovCisJaWYgKHBjYi54dF9pbnAuaW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSAxNjsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJnBjYi54dF9pbnAuaW42cF9sYWRkciwgMTYpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmcGNiLnh0X2lucC5pbjZwX2ZhZGRyLCAxNik7CisJfQorCWVsc2UgeworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDQ7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZwY2IueHRfaW5wLmlucF9sYWRkciwgNCk7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZwY2IueHRfaW5wLmlucF9mYWRkciwgNCk7CisJfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGFkZCBlbnRyeSB0byBjb250YWluZXIKKyAgICAgICAgICovCisgICAgICAgIGVudHJ5LT5hcmJpdHJhcnlfaW5kZXggPSBDT05UQUlORVJfU0laRShjb250YWluZXIpICsgMTsKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICB9CisKKyAgICBpZihyYzwwKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMKaW5kZXggOGVhMDgyYi4uNWY5M2JlMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMKQEAgLTExLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgInRjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9jb25zdGFudHMuaCIKICNpbmNsdWRlICJ0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fcHJpdmF0ZS5oIgotCisjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaCIKIHN0YXRpYyBpbnQKIGxpbnV4X3N0YXRlc1sxMl0gPSB7IDEsIDUsIDMsIDQsIDYsIDcsIDExLCAxLCA4LCA5LCAyLCAxMCB9OwogCkBAIC01NiwxOCArNTYsMTkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmZGVmIFRDUENPTk5fREVMRVRFX1NVUFBPUlRFRAogLyoKICAqIGRlbGV0ZSBhbiBlbnRyeQogICovCiBpbnQKLW5ldHNubXBfYXJjaF90Y3Bjb25uX2RlbGV0ZShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCiB7CiAgICAgaWYgKE5VTEwgPT0gZW50cnkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAvKiogeHh4LXJrczo5IHRjcENvbm4gZGVsZXRlIG5vdCBpbXBsZW1lbnRlZCAqLwogICAgIHJldHVybiAtMTsKIH0KLQorI2VuZGlmIC8qIFRDUENPTk5fREVMRVRFX1NVUFBPUlRFRCAqLwogCiAvKioKICAqCkBAIC04MSw3ICs4MiwxMCBAQAogICAgIGludCByYyA9IDA7CiAKICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKLSAgICAgICAgICAgICAgICAidGNwY29ubl9jb250YWluZXJfYXJjaF9sb2FkIChmbGFncyAlcClcbiIsIGxvYWRfZmxhZ3MpKTsKKyAgICAgICAgICAgICAgICAidGNwY29ubl9jb250YWluZXJfYXJjaF9sb2FkIChmbGFncyAleClcbiIsIGxvYWRfZmxhZ3MpKTsKKworICAgIC8qIFNldHVwIHRoZSBwaWRfZnJvbV9pbm9kZSB0YWJsZSwgYW5kIGZpbGwgaXQuKi8KKyAgICBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZV9pbml0KCk7CiAKICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc190Y3Bjb25uXG4iKTsKQEAgLTEzNCwxNyArMTM4LDIwIEBACiAgICAgICovCiAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CiAgICAgICAgIG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnk7Ci0gICAgICAgIGludCAgICAgICAgICAgICBzdGF0ZSwgcmMsIGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0LCB0bXBfc3RhdGU7CisgICAgICAgIHVuc2lnbmVkIGludCAgICBzdGF0ZSwgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQsIHRtcF9zdGF0ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGlub2RlOwogICAgICAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiwgb2Zmc2V0OwogICAgICAgICBjaGFyICAgICAgICAgICAgbG9jYWxfYWRkclsxMF0sIHJlbW90ZV9hZGRyWzEwXTsKICAgICAgICAgdV9jaGFyICAgICAgICAgKnRtcF9wdHI7CiAKLSAgICAgICAgaWYgKDUgIT0gKHJjID0gc3NjYW5mKGxpbmUsICIlKmQ6ICU4WzAtOUEtWl06JXggJThbMC05QS1aXToleCAleCIsCisgICAgICAgIGlmICg2ICE9IChyYyA9IHNzY2FuZihsaW5lLCAiJSpkOiAlOFswLTlBLVpdOiV4ICU4WzAtOUEtWl06JXggJXggJSp4OiUqeCAlKng6JSp4ICUqeCAlKnggJSp4ICVsbHUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkciwgJmxvY2FsX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfYWRkciwgJnJlbW90ZV9wb3J0LCAmdG1wX3N0YXRlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9hZGRyLCAmcmVtb3RlX3BvcnQsICZ0bXBfc3RhdGUsICZpbm9kZSkpKSB7CiAgICAgICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2luZyBsaW5lICglZCAhPSA1KVxuIiwgcmMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHBhcnNpbmcgbGluZSAoJWQgIT0gNilcbiIsIHJjKSk7CiAgICAgICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLCIgbGluZSAnJXMnXG4iLCBsaW5lKSk7CisJICAgIHNubXBfbG9nKExPR19FUlIsICJ0Y3A6X2xvYWQ0OiBiYWQgbGluZSBpbiAiIFBST0NGSUxFICI6ICVzXG4iLCBsaW5lKTsKKwkgICAgcmMgPSAwOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTphY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLCIgbGluZSAnJXMnXG4iLCBsaW5lKSk7CkBAIC0xODAsNyArMTg3LDggQEAKICAgICAgICAgZW50cnktPmxvY19wb3J0ID0gKHVuc2lnbmVkIHNob3J0KSBsb2NhbF9wb3J0OwogICAgICAgICBlbnRyeS0+cm10X3BvcnQgPSAodW5zaWduZWQgc2hvcnQpIHJlbW90ZV9wb3J0OwogICAgICAgICBlbnRyeS0+dGNwQ29ublN0YXRlID0gc3RhdGU7Ci0gICAgICAgIAorICAgICAgICBlbnRyeS0+cGlkID0gbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGUoaW5vZGUpOworCiAgICAgICAgIC8qKiB0aGUgYWRkciBzdHJpbmcgbWF5IG5lZWQgd29yayAqLwogICAgICAgICBidWZfbGVuID0gc3RybGVuKGxvY2FsX2FkZHIpOwogICAgICAgICBpZiAoKDggIT0gYnVmX2xlbikgfHwKQEAgLTI1MywyOCArMjYxLDE3IEBACiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKICAgICBGSUxFICAgICAgICAgICAqaW47Ci0gICAgY2hhciAgICAgICAgICAgIGxpbmVbMTgwXTsKLSAgICBzdGF0aWMgaW50ICAgICAgbG9nX29wZW5fZXJyID0gMTsKKyAgICBjaGFyICAgICAgICAgICAgbGluZVszNjBdOwogCiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBjb250YWluZXIpOwogCiAjdW5kZWYgUFJPQ0ZJTEUKICNkZWZpbmUgUFJPQ0ZJTEUgIi9wcm9jL25ldC90Y3A2IgogICAgIGlmICghKGluID0gZm9wZW4oUFJPQ0ZJTEUsICJyIikpKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIik7Ci0gICAgICAgIGlmICgxID09IGxvZ19vcGVuX2VycikgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGQgbm90IG9wZW4gIiBQUk9DRklMRSAiXG4iKTsKLSAgICAgICAgICAgIGxvZ19vcGVuX2VyciA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIikpOwogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQotICAgIC8qCi0gICAgICogaWYgd2UgdHVybmVkIG9mZiBsb2dnaW5nIG9mIG9wZW4gZXJyb3JzLCB0dXJuIGl0IGJhY2sgb24gbm93IHRoYXQKLSAgICAgKiB3ZSBoYXZlIGJlZW4gYWJsZSB0byBvcGVuIHRoZSBmaWxlLgotICAgICAqLwotICAgIGlmICgwID09IGxvZ19vcGVuX2VycikKLSAgICAgICAgbG9nX29wZW5fZXJyID0gMTsKLSAgICAKKwogICAgIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pOyAvKiBza2lwIGhlYWRlciAqLwogCiAgICAgLyoKQEAgLTI4NiwxNiArMjgzLDE5IEBACiAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CiAgICAgICAgIG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnk7CiAgICAgICAgIGludCAgICAgICAgICAgICBzdGF0ZSwgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQsIHRtcF9zdGF0ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICBpbm9kZTsKICAgICAgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4sIG9mZnNldDsKICAgICAgICAgY2hhciAgICAgICAgICAgIGxvY2FsX2FkZHJbNDhdLCByZW1vdGVfYWRkcls0OF07CiAgICAgICAgIHVfY2hhciAgICAgICAgICp0bXBfcHRyOwogCi0gICAgICAgIGlmICg1ICE9IChyYyA9IHNzY2FuZihsaW5lLCAiJSpkOiAlNDdbMC05QS1aXToleCAlNDdbMC05QS1aXToleCAleCIsCisgICAgICAgIGlmICg2ICE9IChyYyA9IHNzY2FuZihsaW5lLCAiJSpkOiAlNDdbMC05QS1aXToleCAlNDdbMC05QS1aXToleCAleCAlKng6JSp4ICUqeDolKnggJSp4ICUqeCAlKnggJWxsdSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyLCAmbG9jYWxfcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9hZGRyLCAmcmVtb3RlX3BvcnQsICZ0bXBfc3RhdGUpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2FkZHIsICZyZW1vdGVfcG9ydCwgJnRtcF9zdGF0ZSwgJmlub2RlKSkpIHsKICAgICAgICAgICAgIERFQlVHTVNHVCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCi0gICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBwYXJzaW5nIGxpbmUgKCVkICE9IDUpXG4iLCByYykpOworICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2luZyBsaW5lICglZCAhPSA2KVxuIiwgcmMpKTsKICAgICAgICAgICAgIERFQlVHTVNHVCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsIiBsaW5lICclcydcbiIsIGxpbmUpKTsKKwkgICAgc25tcF9sb2coTE9HX0VSUiwgInRjcDpfbG9hZDY6IGJhZCBsaW5lIGluICIgUFJPQ0ZJTEUgIjogJXNcbiIsIGxpbmUpOworCSAgICByYyA9IDA7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsIiBsaW5lICclcydcbiIsIGxpbmUpKTsKQEAgLTMzMSw2ICszMzEsNyBAQAogICAgICAgICBlbnRyeS0+bG9jX3BvcnQgPSAodW5zaWduZWQgc2hvcnQpIGxvY2FsX3BvcnQ7CiAgICAgICAgIGVudHJ5LT5ybXRfcG9ydCA9ICh1bnNpZ25lZCBzaG9ydCkgcmVtb3RlX3BvcnQ7CiAgICAgICAgIGVudHJ5LT50Y3BDb25uU3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgZW50cnktPnBpZCA9IG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlKGlub2RlKTsKIAogICAgICAgICAvKiogdGhlIGFkZHIgc3RyaW5nIG1heSBuZWVkIHdvcmsgKi8KICAgICAgICAgYnVmX2xlbiA9IHN0cmxlbihsb2NhbF9hZGRyKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDIyOWZmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogIHRjcENvbm5UYWJsZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZm9yIE5ldEJTRAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oPgorCisjaW5jbHVkZSAidGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUElQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcGlwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CisjZW5kaWYKKworc3RhdGljIGludCBfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncywgaW50IHZhcik7CisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfaW5pdChuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfY2xlYW51cChuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogY2xlYW51cAorICAgICAqLworfQorCisvKgorICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9jb3B5KG5ldHNubXBfdGNwY29ubl9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGNwY29ubl9lbnRyeSAqcmhzKQoreworICAgIHJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiogeHh4LXJrczo5IHRjcENvbm4gZGVsZXRlIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHJldHVybiAtMTsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyApCit7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJ0Y3Bjb25uX2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICV4KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfdGNwY29ublxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncywgNCk7CisjaWYgZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgIHJjID0gX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzLCA2KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJjOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzLCBpbnQgdmVyKQoreworICAgIGNvbnN0IGNoYXIgKm1pYm5hbWU7CisgICAgaW50ICAgICAgbWliWzhdOworICAgIHNpemVfdCAgIG1pYl9sZW47CisgICAgc3RydWN0IGtpbmZvX3BjYiAqcGNibGlzdDsKKyAgICBzaXplX3QgICBwY2JfbGVuOworICAgIGludCAgICAgIFN0YXRlTWFwW10gPSB7IDEsIDIsIDMsIDQsIDUsIDgsIDYsIDEwLCA5LCA3LCAxMSB9OworICAgIG5ldHNubXBfdGNwY29ubl9lbnRyeSAgKmVudHJ5OworICAgIGludCAgICAgIHN0YXRlOworICAgIGludCAgICAgIGksIHJjID0gMDsKKworICAgIC8qCisgICAgICogIFJlYWQgaW4gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBUQ1AgdGFibGUgZGF0YQorICAgICAqLworICAgIHN3aXRjaCAodmVyKSB7CisgICAgY2FzZSA0OgorICAgIAltaWJuYW1lID0gIm5ldC5pbmV0LnRjcC5wY2JsaXN0IjsKKyAgICAJYnJlYWs7CisgICAgY2FzZSA2OgorICAgIAltaWJuYW1lID0gIm5ldC5pbmV0Ni50Y3A2LnBjYmxpc3QiOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ0Y3AtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBiYWQgdmVyc2lvbiAlZFxuIiwgdmVyKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHN5c2N0bG5hbWV0b21pYihtaWJuYW1lLCBtaWIsICZtaWJfbGVuKSA9PSAtMSkgeworICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidGNwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogY2FudCByZXNvbHZlIG1pYiAlc1xuIiwgbWlibmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzeXNjdGwobWliLCBzaXplb2YobWliKSAvIHNpemVvZigqbWliKSwgTlVMTCwgJnBjYl9sZW4sIE5VTEwsIDApID09IC0xKSB7CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ0Y3AtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBjYW50IHNpemUgbWliICVzXG4iLCBtaWJuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKChwY2JsaXN0ID0gbWFsbG9jKHBjYl9sZW4pKSA9PSBOVUxMKSB7CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ0Y3AtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBjYW50IGFsbG9jYXRlIG1pYiAlc1xuIiwgbWlibmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KKyAgICBtZW1zZXQocGNibGlzdCwgMCwgcGNiX2xlbik7CisKKyAgICBtaWJbNl0gPSBzaXplb2YoKnBjYmxpc3QpOworICAgIG1pYls3XSA9IHBjYl9sZW4gLyBzaXplb2YoKnBjYmxpc3QpOworCisgICAgaWYgKHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKCptaWIpLAorCQkgICAgcGNibGlzdCwgJnBjYl9sZW4sIE5VTEwsIDApID09IC0xKSB7CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ0Y3AtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBjYW50IHNpemUgbWliICVzXG4iLCBtaWJuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgVW5waWNrIHRoaXMgaW50byB0aGUgY29uc3RpdHVlbnQgc3RydWN0dXJlcywgYW5kIGV4dHJhY3QKKyAgICAgKiAgICAgdGhlICdpbnBjYicgZWxlbWVudHMgaW50byBhIGxpbmtlZCBsaXN0IChidWlsdCBpbiByZXZlcnNlKQorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBwY2JfbGVuIC8gc2l6ZW9mKCpwY2JsaXN0KTsgaSsrKSB7CisJc3RydWN0IGtpbmZvX3BjYiAqcGNiID0gcGNibGlzdCtpOworCXN0YXRlID0gU3RhdGVNYXBbcGNiLT5raV90c3RhdGVdOworCisJaWYgKGxvYWRfZmxhZ3MpIHsKKwkgICAgaWYgKHN0YXRlID09IFRDUENPTk5FQ1RJT05TVEFURV9MSVNURU4pIHsKKwkJaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0xPQURfTk9MSVNURU4pIHsKKwkJICAgIERFQlVHTVNHVCgoInZlcmJvc2U6YWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKwkJCSAgICAgICAiIHNraXBwaW5nIGxpc3RlblxuIikpOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9MT0FEX09OTFlMSVNURU4pIHsKKwkJREVCVUdNU0dUKCgidmVyYm9zZTphY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorCQkJICAgICIgc2tpcHBpbmcgbm9uLWxpc3RlblxuIikpOworCQljb250aW51ZTsKKwkgICAgfQorCX0KKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3RjcGNvbm5fZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5LT50Y3BDb25uU3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgZW50cnktPnBpZCA9IDA7CisgICAgICAgIAorCWlmICh2ZXIgPT0gNikgeworCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYywgZHN0OworCSAgICBtZW1jcHkoJnNyYywgJnBjYi0+a2lfcywgc2l6ZW9mKHNyYykpOworCSAgICBtZW1jcHkoJmRzdCwgJnBjYi0+a2lfZCwgc2l6ZW9mKGRzdCkpOworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDE2OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmc3JjLnNpbjZfYWRkciwgMTYpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmZHN0LnNpbjZfYWRkciwgMTYpOworCSAgICBlbnRyeS0+bG9jX3BvcnQgPSBudG9ocyhzcmMuc2luNl9wb3J0KTsKKwkgICAgZW50cnktPnJtdF9wb3J0ID0gbnRvaHMoZHN0LnNpbjZfcG9ydCk7CisJfQorCWVsc2UgeworCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkc3Q7CisJICAgIG1lbWNweSgmc3JjLCAmcGNiLT5raV9zLCBzaXplb2Yoc3JjKSk7CisJICAgIG1lbWNweSgmZHN0LCAmcGNiLT5raV9kLCBzaXplb2YoZHN0KSk7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gNDsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJnNyYy5zaW5fYWRkciwgNCk7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZkc3Quc2luX2FkZHIsIDQpOworCSAgICBlbnRyeS0+bG9jX3BvcnQgPSBudG9ocyhzcmMuc2luX3BvcnQpOworCSAgICBlbnRyeS0+cm10X3BvcnQgPSBudG9ocyhkc3Quc2luX3BvcnQpOworCX0KKworICAgICAgICAvKgorICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+YXJiaXRyYXJ5X2luZGV4ID0gQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSArIDE7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgfQorCisgICAgaWYocmM8MCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDEwNjRmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYwpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqICB0Y3BDb25uVGFibGUgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBPcGVuQlNECisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy90Y3BDb25uLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgorCisjaW5jbHVkZSAidGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUElQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcGlwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CisjZW5kaWYKKworc3RhdGljIGludCBfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyk7CisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfaW5pdChuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfY2xlYW51cChuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogY2xlYW51cAorICAgICAqLworfQorCisvKgorICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9jb3B5KG5ldHNubXBfdGNwY29ubl9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGNwY29ubl9lbnRyeSAqcmhzKQoreworICAgIHJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiogeHh4LXJrczo5IHRjcENvbm4gZGVsZXRlIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHJldHVybiAtMTsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfdGNwY29ubl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyApCit7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJ0Y3Bjb25uX2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICV4KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfdGNwY29ublxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgc3RydWN0IGlucGNidGFibGUgdGFibGU7CisgICAgc3RydWN0IGlucGNiICAgKmhlYWQsICpuZXh0LCAqcHJldjsKKyAgICBzdHJ1Y3QgaW5wY2IgICBpbnBjYjsKKyAgICBzdHJ1Y3QgdGNwY2IgICB0Y3BjYjsKKyAgICBpbnQgICAgICBTdGF0ZU1hcFtdID0geyAxLCAyLCAzLCA0LCA1LCA4LCA2LCAxMCwgOSwgNywgMTEgfTsKKyAgICBuZXRzbm1wX3RjcGNvbm5fZW50cnkgICplbnRyeTsKKyAgICBpbnQgICAgICBzdGF0ZTsKKyAgICBpbnQgICAgICByYyA9IDA7CisKKyAgICAvKgorICAgICAqICBSZWFkIGluIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgVENQIHRhYmxlIGRhdGEKKyAgICAgKi8KKyAgICBpZiAoIWF1dG9fbmxpc3QoVENQX1NZTUJPTCwgKGNoYXIgKikmdGFibGUsIHNpemVvZih0YWJsZSkpKSB7CisJREVCVUdNU0dUTCgoInRjcC1taWIvdGNwQ29ubl9vcGVuYnNkIiwgIkZhaWxlZCB0byByZWFkIHRjcF9zeW1ib2xcbiIpKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgcHJldiA9IChzdHJ1Y3QgaW5wY2IgKikmQ0lSQ0xFUV9GSVJTVCgmdGFibGUuaW5wdF9xdWV1ZSk7CisgICAgcHJldiA9IE5VTEw7CisgICAgaGVhZCA9IG5leHQgPSBDSVJDTEVRX0ZJUlNUKCZ0YWJsZS5pbnB0X3F1ZXVlKTsKKworICAgIHdoaWxlIChuZXh0KSB7CisJaWYgKCFORVRTTk1QX0tMT09LVVAobmV4dCwgKGNoYXIgKikmaW5wY2IsIHNpemVvZihpbnBjYikpKSB7CisJICAgIERFQlVHTVNHVEwoKCJ0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4iLCAia2xvb2t1cCBpbnBjYiBmYWlsZWRcbiIpKTsKKwkgICAgYnJlYWs7CisJfQorCWlmIChwcmV2ICYmIENJUkNMRVFfUFJFVigmaW5wY2IsIGlucF9xdWV1ZSkgIT0gcHJldikgeworCSAgICBzbm1wX2xvZyhMT0dfRVJSLCJ0Y2J0YWJsZSBsaW5rIGVycm9yXG4iKTsKKwkgICAgYnJlYWs7CisJfQorCXByZXYgPSBuZXh0OworCW5leHQgPSBDSVJDTEVRX05FWFQoJmlucGNiLCBpbnBfcXVldWUpOworCWlmICghTkVUU05NUF9LTE9PS1VQKGlucGNiLmlucF9wcGNiLCAoY2hhciAqKSZ0Y3BjYiwgc2l6ZW9mKHRjcGNiKSkpIHsKKwkgICAgREVCVUdNU0dUTCgoInRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubiIsICJrbG9va3VwIHRjcGNiIGZhaWxlZFxuIikpOworCSAgICBicmVhazsKKwl9CisJc3RhdGUgPSBTdGF0ZU1hcFt0Y3BjYi50X3N0YXRlXTsKKworCWlmIChsb2FkX2ZsYWdzKSB7CisJICAgIGlmIChzdGF0ZSA9PSBUQ1BDT05ORUNUSU9OU1RBVEVfTElTVEVOKSB7CisJCWlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9MT0FEX05PTElTVEVOKSB7CisJCSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisJCQkgICAgICAgIiBza2lwcGluZyBsaXN0ZW5cbiIpKTsKKwkJICAgIGdvdG8gc2tpcDsKKwkJfQorCSAgICB9CisJICAgIGVsc2UgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0xPQURfT05MWUxJU1RFTikgeworCQlERUJVR01TR1QoKCJ2ZXJib3NlOmFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisJCQkgICAgIiBza2lwcGluZyBub24tbGlzdGVuXG4iKSk7CisJCWdvdG8gc2tpcDsKKwkgICAgfQorCX0KKworI2lmICFkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgICAgIGlmIChpbnBjYi5pbnBfZmxhZ3MgJiBJTlBfSVBWNikKKwkgICAgZ290byBza2lwOworI2VuZGlmCisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc190Y3Bjb25uX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiogb2RkbHkgZW5vdWdoLCB0aGVzZSBhcHBlYXIgdG8gYWxyZWFkeSBiZSBpbiBuZXR3b3JrIG9yZGVyICovCisgICAgICAgIGVudHJ5LT5sb2NfcG9ydCA9IG50b2hzKGlucGNiLmlucF9scG9ydCk7CisgICAgICAgIGVudHJ5LT5ybXRfcG9ydCA9IG50b2hzKGlucGNiLmlucF9mcG9ydCk7CisgICAgICAgIGVudHJ5LT50Y3BDb25uU3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgZW50cnktPnBpZCA9IDA7CisgICAgICAgIAorICAgICAgICAvKiogdGhlIGFkZHIgc3RyaW5nIG1heSBuZWVkIHdvcmsgKi8KKwlpZiAoaW5wY2IuaW5wX2ZsYWdzICYgSU5QX0lQVjYpIHsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSAxNjsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJmlucGNiLmlucF9sYWRkcjYsIDE2KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJmlucGNiLmlucF9mYWRkcjYsIDE2KTsKKwl9CisJZWxzZSB7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gNDsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJmlucGNiLmlucF9sYWRkciwgNCk7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZpbnBjYi5pbnBfZmFkZHIsIDQpOworCX0KKwlERUJVR01TR1RMKCgidGNwLW1pYi9kYXRhX2FjY2VzcyIsICJ0Y3AgJWQgJWQgJWRcbiIsCisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4sIGVudHJ5LT5sb2NfcG9ydCwgZW50cnktPnJtdF9wb3J0KSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgorICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmFyYml0cmFyeV9pbmRleCA9IENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikgKyAxOworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworc2tpcDoKKwlpZiAoaGVhZCA9PSBuZXh0KQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICBpZihyYzwwKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmMKaW5kZXggN2MyYzZhZS4uODg5Mjk5YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmMKQEAgLTM5LDE0ICszOSwxNiBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgVENQQ09OTl9ERUxFVEVfU1VQUE9SVEVECiBpbnQgCi1uZXRzbm1wX2FyY2hfdGNwY29ubl9kZWxldGUobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplcCkKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVwKQogewogICAgIC8qCiAgICAgICogTm90IGltcGxlbWVudGVkIAogICAgICAqLwogICAgIHJldHVybiAoLTEpOwogfQorI2VuZGlmIC8qIFRDUENPTk5fREVMRVRFX1NVUFBPUlRFRCAqLwogCiBpbnQgCiBuZXRzbm1wX2FyY2hfdGNwY29ubl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lciwgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jCmluZGV4IGViOTBmNDAuLmM5OTlhMGUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJ0Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkW10gPSB7IFRDUENPTk5FQ1RJT05UQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRbXSA9IHsgVENQQ09OTkVDVElPTlRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKHRjcENvbm5lY3Rpb25UYWJsZV9vaWQpOwogCiB0Y3BDb25uZWN0aW9uVGFibGVfcmVnaXN0cmF0aW9uIHRjcENvbm5lY3Rpb25UYWJsZV91c2VyX2NvbnRleHQ7CkBAIC0zNTUsOCArMzU1LDcgQEAKICAgICAgICAgdGNwQ29ubmVjdGlvbkxvY2FsQWRkcmVzc192YWxfcHRyX2xlbjsKICAgICBtZW1jcHkodGJsX2lkeC0+dGNwQ29ubmVjdGlvbkxvY2FsQWRkcmVzcywKICAgICAgICAgICAgdGNwQ29ubmVjdGlvbkxvY2FsQWRkcmVzc192YWxfcHRyLAotICAgICAgICAgICB0Y3BDb25uZWN0aW9uTG9jYWxBZGRyZXNzX3ZhbF9wdHJfbGVuICoKLSAgICAgICAgICAgc2l6ZW9mKHRjcENvbm5lY3Rpb25Mb2NhbEFkZHJlc3NfdmFsX3B0clswXSkpOworICAgICAgICAgICB0Y3BDb25uZWN0aW9uTG9jYWxBZGRyZXNzX3ZhbF9wdHJfbGVuKTsKIAogICAgIC8qCiAgICAgICogdGNwQ29ubmVjdGlvbkxvY2FsUG9ydCgzKS9JbmV0UG9ydE51bWJlci9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvYS93L2UvUi9kL0ggCkBAIC0zODksOCArMzg4LDcgQEAKICAgICAgICAgdGNwQ29ubmVjdGlvblJlbUFkZHJlc3NfdmFsX3B0cl9sZW47CiAgICAgbWVtY3B5KHRibF9pZHgtPnRjcENvbm5lY3Rpb25SZW1BZGRyZXNzLAogICAgICAgICAgICB0Y3BDb25uZWN0aW9uUmVtQWRkcmVzc192YWxfcHRyLAotICAgICAgICAgICB0Y3BDb25uZWN0aW9uUmVtQWRkcmVzc192YWxfcHRyX2xlbiAqCi0gICAgICAgICAgIHNpemVvZih0Y3BDb25uZWN0aW9uUmVtQWRkcmVzc192YWxfcHRyWzBdKSk7CisgICAgICAgICAgIHRjcENvbm5lY3Rpb25SZW1BZGRyZXNzX3ZhbF9wdHJfbGVuKTsKIAogICAgIC8qCiAgICAgICogdGNwQ29ubmVjdGlvblJlbVBvcnQoNikvSW5ldFBvcnROdW1iZXIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL2Evdy9lL1IvZC9IIApAQCAtNDA2LDcgKzQwNCw3IEBACiAgKiBAaW50ZXJuYWwKICAqIHNldCByb3cgY29udGV4dCBpbmRleGVzCiAgKgotICogQHBhcmFtIHJlcXJlcV9jdHggdGhlIHJvdyBjb250ZXh0IHRoYXQgbmVlZHMgdXBkYXRlZCBpbmRleGVzCisgKiBAcGFyYW0gcm93cmVxX2N0eCB0aGUgcm93IGNvbnRleHQgdGhhdCBuZWVkcyB1cGRhdGVkIGluZGV4ZXMKICAqCiAgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCiAgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmggYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuaAppbmRleCA5YTdiMjliLi4xN2QzMTA1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuaApAQCAtMzAxLDggKzMwMSw4IEBACiAgICAgICAgICogdGNwQ29ubmVjdGlvblRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAodGNwQ29ubmVjdGlvblRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAidGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCA2NmM0MmI1Li5kZmI5NjQ5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMTg3LDcgKzE4NywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5ybXRfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cm10X2FkZHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5ybXRfcG9ydCkpKSB7Ci0gICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KSkgeworICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfREVCVUcsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBpbnNlcnRpbmcgZW50cnkgdG8gdGNwQ29ubmVjdGlvblRhYmxlLCJcCisgICAgICAgICAgICAgICAgICAgICIgZW50cnkgYWxyZWFkeSBleGlzdHMuXG4iKSk7CisgICAgICAgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJvd3JlcV9jdHgpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBzZXR0aW5nIGluZGV4IHdoaWxlIGxvYWRpbmcgIgpAQCAtMjYwLDcgKzI2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0ZSRUVfRE9OVF9DTEVBUik7CiAKICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnRjcENvbm5lY3Rpb25UYWJsZTp0Y3BDb25uZWN0aW9uVGFibGVfY2FjaGVfbG9hZCIsCi0gICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIChpbnQpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYwppbmRleCA1MzQ4NjE0Li5kMGIyN2U1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxOCBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcENvbm5lY3Rpb25UYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX3NpemUsIHRjcENvbm5lY3Rpb25UYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwQ29ubmVjdGlvblRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIHRjcENvbm5lY3Rpb25UYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwQ29ubmVjdGlvblRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIHRjcENvbm5lY3Rpb25UYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9nZXQsIHRjcENvbm5lY3Rpb25UYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtODIsMTkgKzk1LDIzIEBACiAgICAgICAgICAgICAgICAgX3RjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfc2h1dGRvd24odGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiB0Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiB0Y3BDb25uZWN0aW9uVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogdGNwQ29ubmVjdGlvblRhYmxlX3JlZ2lzdHJhdGlvbiAqCiB0Y3BDb25uZWN0aW9uVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiB0Y3BDb25uZWN0aW9uVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9SRUdJU1RSQVRJT05fU0VUCiB0Y3BDb25uZWN0aW9uVGFibGVfcmVnaXN0cmF0aW9uICoKIHRjcENvbm5lY3Rpb25UYWJsZV9yZWdpc3RyYXRpb25fc2V0KHRjcENvbm5lY3Rpb25UYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKQpAQCAtMTA0LDEyICsxMjEsMTUgQEAKICAgICB0Y3BDb25uZWN0aW9uVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOwogICAgIHJldHVybiBvbGQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIHRjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQogewogICAgIHJldHVybiBDT05UQUlORVJfU0laRSh0Y3BDb25uZWN0aW9uVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIHRjcENvbm5lY3Rpb25UYWJsZV9kaXJ0eV9nZXQodm9pZCkKQEAgLTEzMyw3ICsxNTMsNyBAQAogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX2dldF92YWx1ZXM7Ci0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF90Y3BDb25uZWN0aW9uVGFibGVfc2V0X3ZhbHVlczsKQEAgLTE0OCw3ICsxNjgsNyBAQAogICAgICAgICAgICAgICAgIF90Y3BDb25uZWN0aW9uVGFibGVfdW5kb19jb2x1bW4odGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciwgaW50IGNvbHVtbik7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIC8qKgogICogQGludGVybmFsCkBAIC0xOTMsNyArMjEzLDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gVENQQ09OTkVDVElPTlRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBUQ1BDT05ORUNUSU9OVEFCTEVfTUFYX0NPTDsKQEAgLTIzMiw4ICsyNTIsNyBAQAogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0KICAgICAgICAgX21mZF90Y3BDb25uZWN0aW9uVGFibGVfcG9zdF9yZXF1ZXN0OwogCi0KLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yNTgsNyArMjc3LDcgQEAKICAgICAgKi8KICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcyA9CiAgICAgICAgIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTI3Myw3ICsyOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX0JBQllfU1RFUAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhBTkRMRVJfQ0FOX1JXUklURQogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwpAQCAtMjk0LDcgKzMxMyw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMTcsNyArMzM2LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTc4NCw3ICs4MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC04NDAsNyArODU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnRjcENvbm5lY3Rpb25UYWJsZTpfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtOTIxLDcgKzk0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtOTkwLDcgKzEwMDksNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9nZXRfdmFsdWVzICovCiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTExOCw3ICsxMTM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtMTE2Niw3ICsxMTg1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6dGNwQ29ubmVjdGlvblRhYmxlOl9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyIsICJjYWxsZWRcbiIpKTsKIApAQCAtMTIzMyw3ICsxMjUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6dGNwQ29ubmVjdGlvblRhYmxlOl9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX3VuZG9fc2V0dXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xMjk4LDcgKzEzMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYzsKIApAQCAtMTM4MSw3ICsxNDAwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE0MjksNyArMTQ0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6dGNwQ29ubmVjdGlvblRhYmxlOl9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE0NjMsNyArMTQ4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDp0Y3BDb25uZWN0aW9uVGFibGU6X21mZF90Y3BDb25uZWN0aW9uVGFibGVfdW5kb19jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNTQyLDcgKzE1NjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTU5Nyw3ICsxNjE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnRjcENvbm5lY3Rpb25UYWJsZTpfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTYxOCw3ICsxNjM3LDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9pcnJldmVyc2libGVfY29tbWl0ICovCi0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE3NDIsOSArMTc2MSwxMiBAQAogICAgIGlmX2N0eC0+Y2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOwogCiAgICAgdGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9pbml0KCZpZl9jdHgtPmNvbnRhaW5lciwgaWZfY3R4LT5jYWNoZSk7Ci0gICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKICAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQogICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgidGNwQ29ubmVjdGlvblRhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgICAgICBpZiAoaWZfY3R4LT5jb250YWluZXIpCisgICAgICAgIGlmX2N0eC0+Y29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgidGNwQ29ubmVjdGlvblRhYmxlIik7CisgICAgfQogICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjb250YWluZXIgaW4gIgogICAgICAgICAgICAgICAgICAidGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKQEAgLTE3NzIsNiArMTc5NCw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF90Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICoKIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgodGNwQ29ubmVjdGlvblRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0xNzk0LDggKzE4MTcsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgQ09OVEFJTkVSX0ZJTkQodGNwQ29ubmVjdGlvblRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmMKaW5kZXggMmE2ZmU3Yi4uZWJkNjcyYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJ0Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgdGNwTGlzdGVuZXJUYWJsZV9vaWRbXSA9IHsgVENQTElTVEVORVJUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICB0Y3BMaXN0ZW5lclRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICB0Y3BMaXN0ZW5lclRhYmxlX29pZFtdID0geyBUQ1BMSVNURU5FUlRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIHRjcExpc3RlbmVyVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSCh0Y3BMaXN0ZW5lclRhYmxlX29pZCk7CiAKIHRjcExpc3RlbmVyVGFibGVfcmVnaXN0cmF0aW9uIHRjcExpc3RlbmVyVGFibGVfdXNlcl9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmgKaW5kZXggMDg5OGY5Yy4uMDhhNzQxYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oCkBAIC0xODIsOCArMTgyLDggQEAKICAgICAgICAgKiB0Y3BMaXN0ZW5lclRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleCh0Y3BMaXN0ZW5lclRhYmxlX21pYl9pbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgdGNwTGlzdGVuZXJUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgdGNwTGlzdGVuZXJUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgdGNwTGlzdGVuZXJUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgdGNwTGlzdGVuZXJUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAidGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDA1MDNmYjMuLjRhYTE0ZmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19UQ1BDT05OX0ZSRUVfRE9OVF9DTEVBUik7CiAKICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnRjcExpc3RlbmVyVGFibGU6dGNwTGlzdGVuZXJUYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggY2ZhYmRkMS4uMmU0MTM4MCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE4IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwTGlzdGVuZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9zaXplLCB0Y3BMaXN0ZW5lclRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BMaXN0ZW5lclRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIHRjcExpc3RlbmVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcExpc3RlbmVyVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgdGNwTGlzdGVuZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfZ2V0LCB0Y3BMaXN0ZW5lclRhYmxlX2V4dGVybmFsX2FjY2VzcykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC03OSwxOSArOTIsMjMgQEAKICAgICAgICAgICAgICAgICBfdGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24odGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2VfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiB0Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gdGNwTGlzdGVuZXJUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX1JFR0lTVFJBVElPTl9HRVQKIHRjcExpc3RlbmVyVGFibGVfcmVnaXN0cmF0aW9uICoKIHRjcExpc3RlbmVyVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiB0Y3BMaXN0ZW5lclRhYmxlX2lmX2N0eC51c2VyX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiB0Y3BMaXN0ZW5lclRhYmxlX3JlZ2lzdHJhdGlvbiAqCiB0Y3BMaXN0ZW5lclRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQodGNwTGlzdGVuZXJUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCiB7CkBAIC05OSwxMiArMTE2LDE1IEBACiAgICAgdGNwTGlzdGVuZXJUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9DT05UQUlORVJfU0laRQogaW50CiB0Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKHRjcExpc3RlbmVyVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX0NPTlRBSU5FUl9TSVpFICovCiAKIC8qCiAgKiBtZmQgbXVsdGlwbGV4ZXIgbW9kZXMKQEAgLTE1MCw3ICsxNzAsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBUQ1BMSVNURU5FUlRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBUQ1BMSVNURU5FUlRBQkxFX01BWF9DT0w7CkBAIC0yMjAsNyArMjQwLDggQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAvKiBYWFggLSBhcmUgdGhlc2UgYWN0dWFsbHkgbmVjZXNzYXJ5PyAqLwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMjQzLDcgKzI2NCw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC02MDksNyArNjMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC02NTYsNyArNjc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDp0Y3BMaXN0ZW5lclRhYmxlOl9tZmRfdGNwTGlzdGVuZXJUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtNzI3LDcgKzc0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgdGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC05MjQsOSArOTQ1LDEyIEBACiAgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CiAKICAgICB0Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9pbml0KCZpZl9jdHgtPmNvbnRhaW5lciwgaWZfY3R4LT5jYWNoZSk7Ci0gICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKICAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQogICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgidGNwTGlzdGVuZXJUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICAgICAgaWYgKGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICAgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJ0Y3BMaXN0ZW5lclRhYmxlIik7CisgICAgfQogICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjb250YWluZXIgaW4gIgogICAgICAgICAgICAgICAgICAidGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CkBAIC05NTQsNiArOTc4LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX3RjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfRVhURVJOQUxfQUNDRVNTCiB0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHggKgogdGNwTGlzdGVuZXJUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgodGNwTGlzdGVuZXJUYWJsZV9taWJfaW5kZXggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTk3Niw4ICsxMDAxLDkgQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9CisgICAgcm93cmVxX2N0eCA9ICh0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORCh0Y3BMaXN0ZW5lclRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmMgYi9hZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jCmluZGV4IDgwODU5Y2UuLmY3NDY4ZjAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtOSw2ICsxMCwxMSBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh1bG9uZ19pbnN0YW5jZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlZ2lzdGVyX3JlYWRfb25seV90YWJsZV9kYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfYnVpbGRfcmVzdWx0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YXNldCkKKwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNzQsNiArODAsOCBAQAogICAgICAgICByZXR1cm47CiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAodGFibGVfaW5mbyA9PSBOVUxMKQorICAgICAgICByZXR1cm47CiAKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgQVNOX0lOVEVHRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CkBAIC0xMjMsNiArMTMxLDggQEAKICAgICAgKiBhdXRvbWF0aWNhbGx5IHBhcnNlZCBjb2x1bW4gYW5kIGluZGV4IGluZm9ybWF0aW9uIAogICAgICAqLwogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmICh0YWJsZV9pbmZvID09IE5VTEwpCisgICAgICAgIHJldHVybjsKIAogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sIEFTTl9JTlRFR0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIDApOwpAQCAtMzI1LDYgKzMzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgYWNjZXNzZXMsIHNpemVvZihhY2Nlc3NlcykpOwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSAhPSBBU05fVU5TSUdORUQpCiAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLApAQCAtMzY3LDYgKzM3OCw3IEBACiAgICAgICAgICAqIG5vdGhpbmcgdG8gZG8gCiAgICAgICAgICAqLwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlNjk4NQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCitjb25maWdfcmVxdWlyZSh0bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbikKK2NvbmZpZ19yZXF1aXJlKHRsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUpCitjb25maWdfcmVxdWlyZSh0bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUpCitjb25maWdfcmVxdWlyZSh0bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUpCitjb25maWdfYWRkX21pYihTTk1QLVRMUy1UTS1NSUIpCitjb25maWdfYWRkX21pYihTTk1QLVRTTS1NSUIpCisKKyNkZWZpbmUgU05NUF9UTFNfVE1fQkFTRSAgICAgMSwgMywgNiwgMSwgMiwgMSwgMTk4CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxMDkwNQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgU05NUFRMU1RNQUREUlRBQkxFX0gKKyNkZWZpbmUgU05NUFRMU1RNQUREUlRBQkxFX0gKKworY29uZmlnX3JlcXVpcmUodGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUpCisKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVExTVE1BRERSVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ5M2ZmOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMKQEAgLTAsMCArMSwxNDM4IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAkCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNpbmNsdWRlICJ0bHN0bS1taWIuaCIKKyNpbmNsdWRlICJzbm1wVGxzdG1BZGRyVGFibGUuaCIKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0bHN0bWFkZHJfY29udGFpbmVyKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfZGVsZXRlX3RhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfZXh0cmFjdF90YWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX3JlbW92ZV9yb3cpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfc3RvcmFnZXR5cGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2luc2VydF9yb3cpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKy8qKiBYWFggLSBtb3ZlIHRoZXNlIHRvIHRhYmxlX2RhdGEgaGVhZGVyPyAqLworI2RlZmluZSBGQVRFX05FV0xZX0NSRUFURUQgICAgMQorI2RlZmluZSBGQVRFX05PX0NIQU5HRSAgICAgICAgMAorI2RlZmluZSBGQVRFX0RFTEVURV9NRSAgICAgICAgLTEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUEVSU0lTVEVOQ0UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBzdHJ1Y3R1cmUgZm9yIHVuZG8gc3RvcmFnZSBhbmQgb3RoZXIgdmFycyBmb3Igc2V0IHByb2Nlc3NpbmcgCisgICAgICovCit0eXBlZGVmIHN0cnVjdCB0bHN0bUFkZHJUYWJsZV91bmRvX3MgeworICAgIGNoYXIgICAgICAgICAgICBmYXRlOworICAgIGNoYXIgICAgICAgICAgICBjb3BpZWQ7CisgICAgY2hhciAgICAgICAgICAgIGlzX2NvbnNpc3RlbnQ7CisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcVtUTFNUTUFERFJUQUJMRV9NQVhfQ09MVU1OICsgMV07CisgICAgLyoKKyAgICAgKiB1bmRvIENvbHVtbiBzcGFjZSAKKyAgICAgKi8KKyAgICBjaGFyICAgICAgIHRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50W1RMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgdGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuOworICAgIGNoYXIgICAgICAgICAgICB0bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eVtUTFNUTUFERFJTRVJWRVJJREVOVElUWV9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIHRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbjsKKyAgICBjaGFyICAgICAgICAgICAgdGxzdG1BZGRyU3RvcmFnZVR5cGU7CisgICAgY2hhciAgICAgICAgICAgIHRsc3RtQWRkclJvd1N0YXR1czsKKyAgICBjaGFyICAgICAgICAgICAgaGFzaFR5cGU7Cit9IHRsc3RtQWRkclRhYmxlX3VuZG87CisKKyAgICAvKgorICAgICAqIFR5cGljYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgcm93IGVudHJ5IAorICAgICAqLwordHlwZWRlZiBzdHJ1Y3QgdGxzdG1BZGRyVGFibGVfZW50cnlfcyB7CisgICAgLyoKKyAgICAgKiBJbmRleCB2YWx1ZXMgCisgICAgICovCisgICAgY2hhciAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyTmFtZVtTTk1QVEFSR0VUQUREUk5BTUVfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICBzbm1wVGFyZ2V0QWRkck5hbWVfbGVuOworCisgICAgLyoKKyAgICAgKiBDb2x1bW4gdmFsdWVzIAorICAgICAqLworICAgIGNoYXIgICAgICAgIHRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50W1RMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgdGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuOworICAgIGNoYXIgICAgICAgICAgICB0bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eVtUTFNUTUFERFJTRVJWRVJJREVOVElUWV9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIHRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbjsKKyAgICBjaGFyICAgICAgICAgICAgdGxzdG1BZGRyU3RvcmFnZVR5cGU7CisgICAgY2hhciAgICAgICAgICAgIHRsc3RtQWRkclJvd1N0YXR1czsKKyAgICBjaGFyICAgICAgICAgICAgaGFzaFR5cGU7CisKKyAgICAvKgorICAgICAqIHVzZWQgZHVyaW5nIHNldCBwcm9jZXNzaW5nIAorICAgICAqLworICAgIHRsc3RtQWRkclRhYmxlX3VuZG8gKnVuZG87CisKKyAgICAvKgorICAgICAqIHVzZXIgZGF0YQorICAgICAqLworICAgIHN0cnVjdCBuZXRzbm1wX2NlcnRfcyAgICpjZXJ0OworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICBhZGRyX2ZsYWdzOworCit9IHRsc3RtQWRkclRhYmxlX2VudHJ5OworCituZXRzbm1wX3RkYXRhX3JvdyAqdGxzdG1BZGRyVGFibGVfY3JlYXRlRW50cnkobmV0c25tcF90ZGF0YSAqIHRhYmxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc25tcFRhcmdldEFkZHJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzbm1wVGFyZ2V0QWRkck5hbWVfbGVuKTsKK3ZvaWQgdGxzdG1BZGRyVGFibGVfcmVtb3ZlRW50cnkobmV0c25tcF90ZGF0YSAqIHRhYmxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfcm93ICogcm93KTsKKworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIHRsc3RtQWRkclRhYmxlX2hhbmRsZXI7CitzdGF0aWMgaW50IF9jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCBuZXRzbm1wX3RkYXRhICp0YWJsZSk7CitzdGF0aWMgdm9pZCBfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICpjYWNoZSwgbmV0c25tcF90ZGF0YSAqdGFibGUpOworc3RhdGljIHVpbnQzMl90IF9sYXN0X2NoYW5nZWQgPSAwOworc3RhdGljIGludCBfY291bnRfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKTsKKworc3RhdGljIHZvaWQgX3Rsc3RtQWRkcl9pbml0X3BlcnNpc3RlbmNlKHZvaWQpOworc3RhdGljIHZvaWQgX2FkZHJzX2FkZCh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnkpOworc3RhdGljIHZvaWQgX2FkZHJzX3JlbW92ZSh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnkpOworc3RhdGljIHZvaWQgX2FkZHJfdHdlYWtfc3RvcmFnZSh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnkpOworc3RhdGljIG5ldHNubXBfdGRhdGEgICpfdGFibGVfZGF0YSA9IE5VTEw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBFUlNJU1RFTkNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEluaXRpYWxpemVzIHRoZSB0bHN0bUFkZHJUYWJsZSBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfc25tcFRsc3RtQWRkclRhYmxlKHZvaWQpCit7CisgICAgb2lkICAgICAgICAgICAgIHJlZ19vaWRbXSA9IHsgU05NUF9UTFNfVE1fQUREUl9UQUJMRSB9OworICAgIGNvbnN0IHNpemVfdCAgICByZWdfb2lkX2xlbiA9IE9JRF9MRU5HVEgocmVnX29pZCk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF9jYWNoZSAgICAgICAgICAgICAgICAgICAqY2FjaGU7CisgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAgICAqd2F0Y2hlcjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTppbml0IiwKKyAgICAgICAgICAgICAgICAiaW5pdGlhbGl6aW5nIHRhYmxlIHRsc3RtQWRkclRhYmxlXG4iKSk7CisKKyAgICByZWcgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigidGxzdG1BZGRyVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHN0bUFkZHJUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKKworICAgIF90YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGUoInRsc3RtQWRkclRhYmxlIiwgMCk7CisgICAgaWYgKE5VTEwgPT0gX3RhYmxlX2RhdGEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIHRkYXRhIHRhYmxlIGZvciB0bHN0bUFkZHJUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKE5VTEwgPT0gdGFibGVfaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgdGFibGUgaW5mbyBmb3IgdGxzdG1BZGRyVGFibGVcbiIpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZShfdGFibGVfZGF0YSk7CisgICAgICAgIF90YWJsZV9kYXRhID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogY2FjaGUgaW5pdAorICAgICAqLworICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsIChOZXRzbm1wQ2FjaGVMb2FkKilfY2FjaGVfbG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOZXRzbm1wQ2FjaGVGcmVlKilfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgdGxzdG1DZXJ0VG9UU05UYWJsZVxuIik7CisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlKF90YWJsZV9kYXRhKTsKKyAgICAgICAgX3RhYmxlX2RhdGEgPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhY2hlLT5tYWdpYyA9ICh2b2lkICopX3RhYmxlX2RhdGE7CisgICAgY2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworCisgICAgLyoKKyAgICAgKiBwb3B1bGF0ZSBpbmRleCB0eXBlcworICAgICAqLworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kZXg6IHNubXBUYXJnZXRBZGRyTmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9QUklWX0lNUExJRURfT0NURVRfU1RSLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBUTFNUTUFERFJUQUJMRV9NSU5fQ09MVU1OOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBUTFNUTUFERFJUQUJMRV9NQVhfQ09MVU1OOworCisgICAgbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIF90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKKworICAgIGlmIChjYWNoZSkgCisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCByZWcsIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoY2FjaGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhYmxlX2NvbnRhaW5lciIpOworCisgICAgLyoKKyAgICAgKiByZWdpc3RlciBzY2FsYXJzCisgICAgICovCisgICAgcmVnX29pZFsxMF0gPSA3OworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzbm1wVGxzdG1BZGRyQ291bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb3VudF9oYW5kbGVyLCByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgocmVnX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IHJlZykKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgaGFuZGxlciBmb3Igc25tcFRsc3RtQWRkckNvdW50XG4iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnKTsKKyAgICAgICAgaWYgKGNhY2hlKSAKKyAgICAgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKHJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoY2FjaGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNubXBUbHN0bUFkZHJDb3VudCIpOworICAgIH0KKyAgICAKKyAgICByZWdfb2lkWzEwXSA9IDg7CisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICJzbm1wVGxzdG1BZGRyVGFibGVMYXN0Q2hhbmdlZCIsIE5VTEwsIHJlZ19vaWQsCisgICAgICAgIE9JRF9MRU5HVEgocmVnX29pZCksIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICB3YXRjaGVyID0gbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKCh2b2lkKikmX2xhc3RfY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfbGFzdF9jaGFuZ2VkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9USU1FVElDS1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQVRDSEVSX0ZJWEVEX1NJWkUpOworICAgIGlmICgoTlVMTCA9PSByZWcpIHx8IChOVUxMID09IHdhdGNoZXIpKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBoYW5kbGVyIGZvciBzbm1wVGxzdG1BZGRyVGFibGVMYXN0Q2hhbmdlZFxuIik7CisgICAgZWxzZQorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihyZWcsIHdhdGNoZXIpOworCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXNlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgaGVyZSAKKyAgICAgKi8KKyAgICBfdGxzdG1BZGRyX2luaXRfcGVyc2lzdGVuY2UoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUEVSU0lTVEVOQ0UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgCisgKi8KK25ldHNubXBfdGRhdGFfcm93ICoKK3Rsc3RtQWRkclRhYmxlX2NyZWF0ZUVudHJ5KG5ldHNubXBfdGRhdGEgKiB0YWJsZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc25tcFRhcmdldEFkZHJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNubXBUYXJnZXRBZGRyTmFtZV9sZW4pCit7CisgICAgdGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5OworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisKKyAgICBpZiAoc25tcFRhcmdldEFkZHJOYW1lX2xlbiA+IHNpemVvZihlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYodGxzdG1BZGRyVGFibGVfZW50cnkpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcm93ID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfcm93KCk7CisgICAgaWYgKCFyb3cpIHsKKyAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJvdy0+ZGF0YSA9IGVudHJ5OworCisgICAgREVCVUdJRigidGxzdG1BZGRyVGFibGU6ZW50cnk6Y3JlYXRlIikgeworICAgICAgICBjaGFyIG5hbWVbc2l6ZW9mKGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUpKzFdOworICAgICAgICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyIsIHNubXBUYXJnZXRBZGRyTmFtZSk7CisgICAgICAgIERFQlVHTVNHVCgoInRsc3RtQWRkclRhYmxlOmVudHJ5OmNyZWF0ZSIsICJlbnRyeSAlcyAlcCAvIHJvdyAlcFxuIiwKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBlbnRyeSwgcm93KSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBwb3B1bGF0ZSBpbmRleAorICAgICAqLworICAgIG1lbWNweShlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lLCBzbm1wVGFyZ2V0QWRkck5hbWUsCisgICAgICAgICAgIHNubXBUYXJnZXRBZGRyTmFtZV9sZW4pOworICAgIGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWVfbGVuID0gc25tcFRhcmdldEFkZHJOYW1lX2xlbjsKKyAgICBuZXRzbm1wX3RkYXRhX3Jvd19hZGRfaW5kZXgocm93LCBBU05fUFJJVl9JTVBMSUVEX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJOYW1lX2xlbik7CisKKyAgICAvKgorICAgICAqIGRlZmF1bHRzCisgICAgICovCisgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50WzBdID0gJ1wwJzsKKyAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID0gMDsKKyAgICBlbnRyeS0+aGFzaFR5cGUgPSAwOworICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eVswXSA9ICdcMCc7CisgICAgZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbiA9IDA7CisgICAgZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlID0gU1RfTk9OVk9MQVRJTEU7CisgICAgZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9IFJTX05PVFJFQURZOworCisgICAgaWYgKHRhYmxlX2RhdGEpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOnJvdzppbnNlcnQiLCAicm93ICVwXG4iLHJvdykpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2FkZF9yb3codGFibGVfZGF0YSwgcm93KTsKKyAgICB9CisgICAgcmV0dXJuIHJvdzsKK30KKworLyoKKyAqIGFsbG9jYXRlIHVuZG8gcmVzb3VyY2VzIAorICovCitzdGF0aWMgdGxzdG1BZGRyVGFibGVfdW5kbyAqCitfYWxsb2NVbmRvKHRsc3RtQWRkclRhYmxlX2VudHJ5ICogZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeS0+dW5kbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYodGxzdG1BZGRyVGFibGVfdW5kbyk7CisgICAgaWYgKCFlbnRyeS0+dW5kbykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IC0xOyAgICAvKiBkb24ndCBrbm93ICovCisKKyAgICByZXR1cm4gZW50cnktPnVuZG87Cit9CisKKy8qCisgKiBmcmVlIHVuZG8gcmVzb3VyY2VzIAorICovCitzdGF0aWMgdm9pZAorX2ZyZWVVbmRvKHRsc3RtQWRkclRhYmxlX2VudHJ5ICogZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSB8fCAhZW50cnktPnVuZG8pCisgICAgICAgIHJldHVybjsKKworICAgIFNOTVBfRlJFRShlbnRyeS0+dW5kbyk7Cit9CisKKy8qCisgKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgCisgKi8KK3ZvaWQKK3Rsc3RtQWRkclRhYmxlX3JlbW92ZUVudHJ5KG5ldHNubXBfdGRhdGEgKiB0YWJsZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9yb3cgKiByb3cpCit7CisgICAgdGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgaWYgKCFyb3cpCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCisKKyAgICBlbnRyeSA9ICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKSByb3ctPmRhdGE7CisKKyAgICBpZiAodGFibGVfZGF0YSkgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6cm93OnJlbW92ZSIsICJyb3cgJXBcbiIscm93KSk7CisgICAgICAgIG5ldHNubXBfdGRhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93KHRhYmxlX2RhdGEsIHJvdyk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfcm93KHJvdyk7CisKKyAgICBERUJVR0lGKCJ0bHN0bUFkZHJUYWJsZTplbnRyeTpkZWxldGUiKSB7CisgICAgICAgIGNoYXIgbmFtZVtzaXplb2YoZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSkrMV07CisgICAgICAgIHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIiwgZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSk7CisgICAgICAgIERFQlVHTVNHVCgoInRsc3RtQWRkclRhYmxlOmVudHJ5OmRlbGV0ZSIsICJlbnRyeSAlcyAlcCAvIHJvdyAlcFxuIiwKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBlbnRyeSwgcm93KSk7CisgICAgfQorICAgIGlmIChlbnRyeSAmJiBlbnRyeS0+dW5kbykKKyAgICAgICAgX2ZyZWVVbmRvKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBFUlNJU1RFTkNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSB0bHN0bUFkZHJUYWJsZSB0YWJsZSAqLworc3RhdGljIGludAordGxzdG1BZGRyVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworCisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QgPSBOVUxMOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfdGRhdGEgICp0YWJsZV9kYXRhOworICAgIG5ldHNubXBfdGRhdGFfcm93ICp0YWJsZV9yb3c7CisgICAgdGxzdG1BZGRyVGFibGVfZW50cnkgKnRhYmxlX2VudHJ5OworICAgIGludCAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmhhbmRsZXIiLCAiUHJvY2Vzc2luZyBtb2RlICVzICglZCkgcmVxdWVzdFxuIiwKKyAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSksCisgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSkpOworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHRVQgIyMjIyMKKyAgICAgKgorICAgICAqICAgUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQorICAgICAqLworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAodGxzdG1BZGRyVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVfY2hhciBiaW5bNDJdLCAqcHRyID0gYmluOworICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzaXplb2YoYmluKSwgb2Zmc2V0ID0gMTsKKyAgICAgICAgICAgICAgICBpbnQgICAgcmM7CisKKyAgICAgICAgICAgICAgICBpZiAoKHRhYmxlX2VudHJ5LT5oYXNoVHlwZSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9PTApKQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiaW5bMF0gPSB0YWJsZV9lbnRyeS0+aGFzaFR5cGU7CisgICAgICAgICAgICAgICAgICAgIHJjID0gbmV0c25tcF9oZXhfdG9fYmluYXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgJnB0ciwgJmxlbiwgJm9mZnNldCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgxICE9IHJjKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW4sIG9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUyAqLworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNIT0JKRUNUKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX0dFVCAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKKyAgICAgICAgICovCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVTRVJWRTEgIyMjIyMKKyAgICAgKgorICAgICAqICAgSW4gUkVTRVJWRTEgd2UgYXJlIGp1c3QgY2hlY2tpbmcgYmFzaWMgQVNOLjEgc2l6ZS90eXBlIHJlc3RyaWN0aW9ucy4KKyAgICAgKiBZb3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55IG9mIHRoaXMgY29kZS4gRG9uJ3QgY2hhbmdlIGFueQorICAgICAqIG9mIHRoZSBjb2x1bW4gdmFsdWVzIGhlcmUuIFNhdmUgdGhhdCBmb3IgdGhlIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhlIG5leHQgcGhhc2UgaXMgUkVTRVJWRTIgb3IgRlJFRS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoKE5VTEwgIT0gdGFibGVfZW50cnkpICYmCisgICAgICAgICAgICAgICAgKFNUX1JFQURPTkxZID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVDoKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgLyoqIGNoZWNrIGxlbi9hbGdvcml0aG0gTUlCIHJlcXVpcmVtZW50cyAqLworICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jZXJ0X2NoZWNrX3ZiX2ZpbmdlcnByaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9zdG9yYWdldHlwZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8KKyAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgOiBTVF9OT05FKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPworICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgOiBSU19OT05FWElTVEVOVCksCisgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPworICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA6IFNUX05PTkUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUyAqLworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworCisgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX1JFU0VSVkUxICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRVNFUlZFMiAjIyMjIworICAgICAqCisgICAgICogICBSRVNFUlZFMiBpcyBmb3IgY2hlY2tpbmcgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgZnJvbSB0aGUgTUlCLgorICAgICAqIFNpbmNlIHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgb2Z0ZW4gaW4gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBvYmplY3QsCisgICAgICogbWliMmMgY2FuJ3QgZ2VuZXJhdGUgY29kZS4gSXQncyBwb3NzaWJsZSB0aGF0IHlvdSBuZWVkIHRvIGFkZAorICAgICAqIGFkZGl0aW9uYWwgY2hlY2tzIGhlcmUuIEhvd2V2ZXIsIGRvbid0IGNoYW5nZSBhbnkgb2YgdGhlIGNvbHVtbgorICAgICAqIHZhbHVlcyBoZXJlLiBTYXZlIHRoYXQgZm9yIHRoZSBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoZSBuZXh0IHBoYXNlIGlzIEFDVElPTiBvciBGUkVFLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAodGxzdG1BZGRyVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGlmIG5vIHRhYmxlX3JvdywgY3JlYXRlIG9uZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5KSB7CisgICAgICAgICAgICAgICAgdGFibGVfcm93ID0gdGxzdG1BZGRyVGFibGVfY3JlYXRlRW50cnkKKyAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2RhdGEsIChjaGFyKil0YWJsZV9pbmZvLT5pbmRleGVzLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9yb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gdGFibGVfcm93LT5kYXRhOworICAgICAgICAgICAgICAgIF9hbGxvY1VuZG8odGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICAgICAgdGxzdG1BZGRyVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfcm93ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlID0gRkFURV9ORVdMWV9DUkVBVEVEOworICAgICAgICAgICAgICAgIC8qKiBhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2luc2VydF90ZGF0YV9yb3cocmVxdWVzdCwgdGFibGVfcm93KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqIGFsbG9jYXRlIHVuZG8gc3RydWN0dXJlLCBpZiBuZWVkZWQgKi8KKyAgICAgICAgICAgIGlmICghdGFibGVfZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICBfYWxsb2NVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqIGRvbid0IGFsbG93IG11bHRpcGxlIHNldHMgb2Ygc2FtZSBjb2x1bW4gKi8KKyAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+cmVxW3RhYmxlX2luZm8tPmNvbG51bV0pIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJ0bHN0bUFkZHJUYWJsZTpyZXNlcnZlMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgc2V0cyB0byBjb2wgJWQgaW4gcmVxdWVzdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmNvbG51bSkpOworICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW3RhYmxlX2luZm8tPmNvbG51bV0gPSByZXF1ZXN0OworCisgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIC8qKiBtYWtlIHN1cmUgcm93c3RhdHVzIGlzIHVzZWQgdG8gY3JlYXRlIHJvd3MgKi8KKyAgICAgICAgaWYgKHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBpZiAoKHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlICE9IEZBVEVfTkVXTFlfQ1JFQVRFRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVNdKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzIC8gY3JlYXRpb24gKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgbm8gZXJyb3IgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9SRVNFUlZFMiAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZSRUUgIyMjIyMKKyAgICAgKgorICAgICAqICAgRlJFRSBpcyBmb3IgY2xlYW5pbmcgdXAgYWZ0ZXIgYSBmYWlsZWQgcmVxdWVzdCAoZHVyaW5nIGVpdGhlcgorICAgICAqIFJFU0VSVkUxIG9yIFJFU0VSVkUyKS4gU28gYW55IGFsbG9jYXRlZCByZXNvdXJjZXMgbmVlZCB0byBiZQorICAgICAqIHJlbGVhc2VkLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVsZWFzZSB1bmRvIHJlc291cmNlcywgIHJlbW92ZSBhbnkgbmV3bHkgY3JlYXRlZCByb3dzCisgICAgICAgICAqLworICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX3JvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhICA9ICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9CisgICAgICAgICAgICAgICAgKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopIHRhYmxlX3JvdyA/IHRhYmxlX3Jvdy0+CisgICAgICAgICAgICAgICAgZGF0YSA6IE5VTEw7CisKKyAgICAgICAgICAgIGlmICghdGFibGVfZW50cnkgfHwgIXRhYmxlX2VudHJ5LT51bmRvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3cocmVxdWVzdCwgdGFibGVfcm93KTsKKworICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSB0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICB0bHN0bUFkZHJUYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIF9mcmVlVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9GUkVFICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFDVElPTiAjIyMjIworICAgICAqCisgICAgICogICBJbiB0aGUgQUNUSU9OIHBoYXNlLCB3ZSBwZXJmb3JtIGFueSBzZXRzIHRoYXQgY2FuIGJlIHVuZG9uZS4KKyAgICAgKiAoU2F2ZSBhbnl0aGluZyB0aGF0IGNhbid0IGJlIHVuZG9uZSBmb3IgdGhlIENPTU1JVCBwaGFzZS4pCisgICAgICoKKyAgICAgKiAgIEFmdGVyIGluZGl2aWR1YWwgY29sdW1ucyBoYXZlIGJlZW4gZG9uZSwgeW91IHNob3VsZCBjaGVjayB0aGF0IHRoZQorICAgICAqIHJvdyBhcyBhIHdob2xlIGlzIGNvbnNpc3RlbnQuCisgICAgICoKKyAgICAgKiBUaGUgbmV4dCBwaGFzZSBpcyBVTkRPIG9yIENPTU1JVC4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1X2NoYXIgKnRtcCA9ICh1X2NoYXIqKXRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludDsKKworICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5oYXNoVHlwZSA9IHRhYmxlX2VudHJ5LT5oYXNoVHlwZTsKKworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oYXNoVHlwZSA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZ1swXTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCk7CisgICAgICAgICAgICAgICAgbWVtc2V0KHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2JpbmFyeV90b19oZXgoJnRtcCwgJnRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAmcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuc3RyaW5nWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKDAgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbikKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWToKKyAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHkpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbjsKKyAgICAgICAgICAgICAgICBtZW1zZXQodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LCAwLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5KSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4gPQorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW47CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJSb3dTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUyAqLworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCB2YWx1ZXMgZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgaWYgKHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBBbGwgY29sdW1ucyBub3cgaGF2ZSB0aGVpciBmaW5hbCB2YWx1ZXMgc2V0LiBjaGVjayB0aGUKKyAgICAgICAgICAgICAqIGludGVybmFsIGNvbnNpc3RlbmN5IG9mIGVhY2ggcm93LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ICE9IC0xKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAvKiBhbHJlYWR5IGNoZWNrZWQgKi8KKworICAgICAgICAgICAgICAgIC8qKiBhc3N1bWUgY29uc2lzdGVuY3kgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDE7CisKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHBlciBtaWIsIGNhbid0IGhhdmUgZW1wdHkgZmluZ2VycHJpbnQgYW5kIHdpbGRjYXJkIGlkCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCAoMCA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuKSAmJgorICAgICAgICAgICAgICAgICAgICAgKDEgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbikgJiYKKyAgICAgICAgICAgICAgICAgICAgICgnKicgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5WzBdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlIiwgImZpbmdlcnByaW50IG11c3Qgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGVtcHR5IGZvciB3aWxkY2FyZCAoKikgaWRlbnRpdHlcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoKFJTX0lTX0FDVElWRSh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCghdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVU10pIHx8CisgICAgICAgICAgICAgICAgICAgICAoUlNfSVNfQUNUSVZFKHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJSb3dTdGF0dXMpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogY2hlY2sgbWliIHJlc3RyaWN0aW9ucyBvbiBhY3RpdmUgcm93cy4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEVdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOyAvKiBwZXIgbWliICovCisgICAgICAgICAgICAgICAgfSAvKiBhY3RpdmUgcm93ICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoUlNfSVNfR09JTkdfQUNUSVZFCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qKiBpZiBnb2luZyBhY3RpdmUsIGluY29uc2lzdGVuY3kgaXMgZmF0YWwgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSB0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVNdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAvKiBnb2luZyBhY3RpdmUgKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChSU19ERVNUUk9ZID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgLyoqIGNhbid0IGRlbGV0ZSBhY3RpdmUgcm93ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChSU19JU19BQ1RJVkUodGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclJvd1N0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVNdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIC8qIGRlc3Ryb3kgKi8KKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBjb25zaXN0ZW5jeSBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgbm8gZXJyb3IgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9BQ1RJT04gKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBVTkRPICMjIyMjCisgICAgICoKKyAgICAgKiAgIFVORE8gaXMgZm9yIGNsZWFuaW5nIHVwIGFueSBmYWlsZWQgcmVxdWVzdHMgdGhhdCB3ZW50IHRocm91Z2ggdGhlCisgICAgICogQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPQorICAgICAgICAgICAgICAgICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKSB0YWJsZV9yb3cgPyB0YWJsZV9yb3ctPgorICAgICAgICAgICAgICAgIGRhdGEgOiBOVUxMOworICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVDoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHJlc3RvcmUgdGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQgdmFsdWUgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW47CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhhc2hUeXBlID0gdGFibGVfZW50cnktPnVuZG8tPmhhc2hUeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWToKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHJlc3RvcmUgdGxzdG1BZGRyU2VydmVySWRlbnRpdHkgdmFsdWUgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5KSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW47CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogcmVzdG9yZSB0bHN0bUFkZHJTdG9yYWdlVHlwZSB2YWx1ZSAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU3RvcmFnZVR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHJlc3RvcmUgdGxzdG1BZGRyUm93U3RhdHVzIHZhbHVlIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyUm93U3RhdHVzOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTICovCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVsZWFzZSB1bmRvIGRhdGEKKyAgICAgICAgICogb3IgcmVtb3ZlIGFueSBuZXdseSBjcmVhdGVkIHJvd3MKKyAgICAgICAgICovCisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0KKyAgICAgICAgICAgICAgICAodGxzdG1BZGRyVGFibGVfZW50cnkgKikgdGFibGVfcm93ID8gdGFibGVfcm93LT4KKyAgICAgICAgICAgICAgICBkYXRhIDogTlVMTDsKKworICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeSB8fCAhdGFibGVfZW50cnktPnVuZG8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyhyZXF1ZXN0LCB0YWJsZV9yb3cpOworCisgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgIHRsc3RtQWRkclRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfVU5ETyAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDT01NSVQgIyMjIyMKKyAgICAgKgorICAgICAqICAgQ09NTUlUIGlzIHRoZSBmaW5hbCBzdWNjZXNzIHN0YXRlLCB3aGVuIGFsbCBjaGFuZ2VzIGFyZSBmaW5hbGl6ZWQuCisgICAgICogVGhlcmUgaXMgbm90IHJlY292ZXJ5IHN0YXRlIHNob3VsZCBzb21ldGhpbmcgZmFpbGUgaGVyZS4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5IHx8ICF0YWJsZV9lbnRyeS0+dW5kbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKChSU19OT1RSRUFEWSA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKSAmJgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KQorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CisgICAgICAgICAgICBlbHNlIGlmICgoUlNfTk9USU5TRVJWSUNFID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpICYmCisgICAgICAgICAgICAgICAgICAgICAoMCA9PSB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkpCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9IFJTX05PVFJFQURZOworCisgICAgICAgICAgICAvKiogcmVsZWFzZSB1bmRvIGRhdGEgZm9yIHJlcXVlc3RzIHdpdGggbm8gcm93c3RhdHVzICovCisgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8gJiYKKyAgICAgICAgICAgICAgICAhdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVU10gIT0gMCkgeworCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKHRhYmxlX2VudHJ5KTsKKworICAgICAgICAgICAgICAgIC8qKiB1cGRhdGUgYWN0aXZlIGFkZHJzICovCisgICAgICAgICAgICAgICAgaWYgKCgwID09IHRhYmxlX2VudHJ5LT5hZGRyX2ZsYWdzKSAmJgorICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9PSBSU19BQ1RJVkUpKQorICAgICAgICAgICAgICAgICAgICBfYWRkcnNfYWRkKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoMCAhPSB0YWJsZV9lbnRyeS0+YWRkcl9mbGFncykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9PSBSU19ERVNUUk9ZKSkKKyAgICAgICAgICAgICAgICAgICAgX2FkZHJzX3JlbW92ZSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CisgICAgICAgICAgICAgICAgICAgIC8qKiBGYWxsLXRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19BQ1RJVkU6CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0gUlNfQUNUSVZFOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gdGFibGVfZW50cnktPmFkZHJfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FkZHJzX2FkZCh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvKiogRmFsbC10aHJvdWdoICovCisgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNfTk9USU5TRVJWSUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgLyoqIHNpbXBseSBzZXQgc3RhdHVzIGJhc2VkIG9uIGNvbnNpc3RlbmN5ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTX05PVElOU0VSVklDRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPSB0YWJsZV9lbnRyeS0+YWRkcl9mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYWRkcnNfcmVtb3ZlKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNfREVTVFJPWToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwICE9IHRhYmxlX2VudHJ5LT5hZGRyX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRyc19yZW1vdmUodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KHJlcXVlc3QsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bHN0bUFkZHJUYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfcm93ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiogcmVsZWFzZSB1bmRvIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUyAqLworCisgICAgICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgICAgICBpZiAoUlNfQUNUSVZFID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICBfYWRkcl90d2Vha19zdG9yYWdlKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICAvKiogdXBkYXRlIGxhc3QgY2hhbmdlZCAqLworICAgICAgICBfbGFzdF9jaGFuZ2VkID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9DT01NSVQgKi8KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIChyZXFpbmZvLT5tb2RlKSAqLworCisgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUEVSU0lTVEVOQ0UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitfY291bnRfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICAgICB2YWw7CisKKyAgICBpZiAoTU9ERV9HRVQgIT0gcmVxaW5mby0+bW9kZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmFkIG1vZGUgaW4gUk8gaGFuZGxlciIpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIGlmICgoTlVMTCA9PSBfdGFibGVfZGF0YSkgfHwgKE5VTEwgPT0gX3RhYmxlX2RhdGEtPmNvbnRhaW5lcikpCisgICAgICAgIHZhbCA9IDA7CisgICAgZWxzZQorICAgICAgICB2YWwgPSBDT05UQUlORVJfU0laRShfdGFibGVfZGF0YS0+Y29udGFpbmVyKTsKKworICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fR0FVR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJnZhbCwgc2l6ZW9mKHZhbCkpOworICAgCisgICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOworICAgIAorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBoYW5kbGUgY2FjaGUgLyBpbnRlcmFjdGlvbnMgd2l0aCB0bHN0bUFkZHIgY29udGFpbmVyIGluIHNubXBsaWIKKyAqCisgKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkCitfYWRkcnNfYWRkKHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWRkcnM7CisgICAgc25tcFRsc3RtQWRkciAgICAgKmFkZHI7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmFkZHJzOmFkZCIsICJuYW1lICVzLCBmcCAlc1xuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lLCBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpKTsKKworICAgIC8qKiBnZXQgY3VycmVudCBhY3RpdmUgYWRkcnMgKi8KKyAgICBhZGRycyA9IG5ldHNubXBfdGxzdG1BZGRyX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IGFkZHJzKQorICAgICAgICByZXR1cm47CisKKyAgICBhZGRyID0gbmV0c25tcF90bHN0bUFkZHJfY3JlYXRlKGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUpOworICAgIGlmIChOVUxMID09IGFkZHIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuKQorICAgICAgICBhZGRyLT5maW5nZXJwcmludCA9IHN0cmR1cChlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpOworICAgIGlmIChlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuKQorICAgICAgICBhZGRyLT5pZGVudGl0eSA9IHN0cmR1cChlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHkpOworICAgIGFkZHItPmhhc2hUeXBlID0gZW50cnktPmhhc2hUeXBlOworCisgICAgYWRkci0+ZmxhZ3MgPSBUTFNUTV9BRERSX0ZST01fTUlCOworICAgIGlmIChlbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPT0gU1RfTk9OVk9MQVRJTEUpCisgICAgICAgIGFkZHItPmZsYWdzIHw9IFRMU1RNX0FERFJfTk9OVk9MQVRJTEU7CisKKyAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChhZGRycywgYWRkcikgIT0gMCkgeworICAgICAgICBuZXRzbm1wX3Rsc3RtQWRkcl9mcmVlKGFkZHIpOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGluc2VydCBuZXcgdGxzdG0gYWRkciIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK19hZGRyc19yZW1vdmUodGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5KQoreworICAgIG5ldHNubXBfY29udGFpbmVyICphZGRyczsKKyAgICBzbm1wVGxzdG1BZGRyICAgICAgYWRkcjsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6YWRkcjpyZW1vdmUiLCAibmFtZSAlcywgZnAgJXNcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSwgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSk7CisKKyAgICAvKiogZ2V0IGN1cnJlbnQgYWN0aXZlIGFkZHJzICovCisgICAgYWRkcnMgPSBuZXRzbm1wX3Rsc3RtQWRkcl9jb250YWluZXIoKTsKKyAgICBpZiAoTlVMTCA9PSBhZGRycykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWRkci5uYW1lID0gZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZTsKKyAgICBpZiAoQ09OVEFJTkVSX1JFTU9WRShhZGRycywgJmFkZHIpICE9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCByZW1vdmUgdGxzdG0gYWRkciIpOworICAgIH0KKyAgICBlbnRyeS0+YWRkcl9mbGFncyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitfYWRkcl90d2Vha19zdG9yYWdlKHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWRkcnM7CisgICAgc25tcFRsc3RtQWRkciAgICAgKmFkZHIsIGluZGV4OworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTphZGRyOnR3ZWFrIiwgIm5hbWUgJXMsIHN0ICVkXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUsIGVudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSkpOworCisgICAgLyoqIGdldCBjdXJyZW50IGFjdGl2ZSBhZGRycyAqLworICAgIGFkZHJzID0gbmV0c25tcF90bHN0bUFkZHJfY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gYWRkcnMpCisgICAgICAgIHJldHVybjsKKworICAgIGluZGV4Lm5hbWUgPSBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lOworICAgIGFkZHIgPSBDT05UQUlORVJfRklORChhZGRycywgJmluZGV4KTsKKyAgICBpZiAoTlVMTCA9PSBhZGRyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTphZGRyOnR3ZWFrIiwgImNvdWxkbid0IGZpbmQgYWRkciFcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPT0gU1RfTk9OVk9MQVRJTEUpCisgICAgICAgIGFkZHItPmZsYWdzIHw9IFRMU1RNX0FERFJfTk9OVk9MQVRJTEU7CisgICAgZWxzZQorICAgICAgICBhZGRyLT5mbGFncyAmPSB+VExTVE1fQUREUl9OT05WT0xBVElMRTsKK30KKworc3RhdGljIG5ldHNubXBfdGRhdGFfcm93ICoKK19lbnRyeV9mcm9tX2FkZHIoc25tcFRsc3RtQWRkciAgKmFkZHIpCit7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICB0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICByb3cgPSB0bHN0bUFkZHJUYWJsZV9jcmVhdGVFbnRyeShOVUxMLCBhZGRyLT5uYW1lLCBzdHJsZW4oYWRkci0+bmFtZSkpOworICAgIGlmIChOVUxMID09IHJvdykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2FuIGNyZWF0ZSB0bHN0bUFkZHIgcm93IGVudHJ5XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgaWYgKGFkZHItPmZsYWdzICYgVExTVE1fQUREUl9GUk9NX0NPTkZJRykKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlID0gU1RfUEVSTUFORU5UOworICAgIGVsc2UgaWYgKCEgKGFkZHItPmZsYWdzICYgVExTVE1fQUREUl9OT05WT0xBVElMRSkpCisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9IFNUX1ZPTEFUSUxFOworCisgICAgZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9IFJTX0FDVElWRTsKKworICAgIGlmIChhZGRyLT5maW5nZXJwcmludCkgeworICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID0gc3RybGVuKGFkZHItPmZpbmdlcnByaW50KTsKKyAgICAgICAgaWYgKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPgorICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkpCisgICAgICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSAtIDE7CisgICAgICAgIG1lbWNweShlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsIGFkZHItPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbik7CisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludFtzaXplb2YoZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSAtIDFdID0gMDsKKyAgICB9CisKKyAgICBpZiAoYWRkci0+aWRlbnRpdHkpIHsKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbiA9IHN0cmxlbihhZGRyLT5pZGVudGl0eSk7CisgICAgICAgIGlmIChlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuID4KKyAgICAgICAgICAgIHNpemVvZihlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHkpKQorICAgICAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbiA9CisgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSkgLSAxOworICAgICAgICBtZW1jcHkoZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LCBhZGRyLT5pZGVudGl0eSwKKyAgICAgICAgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4pOworICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlbc2l6ZW9mKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSkgLSAxXSA9IDA7CisgICAgfQorCisgICAgZW50cnktPmhhc2hUeXBlID0gYWRkci0+aGFzaFR5cGU7CisgICAgZW50cnktPmFkZHJfZmxhZ3MgPSBhZGRyLT5mbGFnczsKKworICAgIHJldHVybiByb3c7Cit9CisKK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCBuZXRzbm1wX3RkYXRhICp0YWJsZSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWRkcnM7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKml0cjsKKyAgICBzbm1wVGxzdG1BZGRyICAgICAqYWRkcjsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIGludCAgICAgICAgICAgICAgICByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6Y2FjaGU6bG9hZCIsICJjYWxsZWQsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7CisKKyAgICAvKiogZ2V0IGN1cnJlbnQgYWN0aXZlIHJvd3MgKi8KKyAgICBhZGRycyA9IG5ldHNubXBfdGxzdG1BZGRyX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IGFkZHJzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpjYWNoZTpsb2FkIiwgInRsc3RtQWRkciAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShhZGRycykpKTsKKyAgICBpdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoYWRkcnMpOworICAgIGlmIChOVUxMID09IGl0cikgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6Y2FjaGU6bG9hZCIsCisgICAgICAgICAgICAgICAgICAgICJjYW50IGdldCBpdGVyYXRvclxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpbnNlcnQgcm93cyBmb3IgYWN0aXZlIGFkZHJzIGludG8gdGJsIGNvbnRhaW5lcgorICAgICAqLworICAgIGFkZHIgPSBJVEVSQVRPUl9GSVJTVChpdHIpOworICAgIGZvciggOyBhZGRyOyBhZGRyID0gSVRFUkFUT1JfTkVYVChpdHIpKSB7CisKKyAgICAgICAgcm93ID0gX2VudHJ5X2Zyb21fYWRkcihhZGRyKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcm93KSB7CisgICAgICAgICAgICByYyA9LTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXRzbm1wX3RkYXRhX2FkZF9yb3codGFibGUsIHJvdykgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICB0bHN0bUFkZHJUYWJsZV9yZW1vdmVFbnRyeShOVUxMLCByb3cpOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpjYWNoZTpsb2FkIiwgImRvbmUsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICpjYWNoZSwgbmV0c25tcF90ZGF0YSAqdGFibGUpCit7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgKnRibF9pdHI7CisgICAgdGxzdG1BZGRyVGFibGVfZW50cnkgICAqZW50cnk7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6Y2FjaGU6ZnJlZSIsICJjYWxsZWQsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7CisKKyAgICB0YmxfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKHRhYmxlLT5jb250YWluZXIpOworICAgIGlmIChOVUxMID09IHRibF9pdHIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmNhY2hlOmZyZWUiLAorICAgICAgICAgICAgICAgICAgICAiY2FudCBnZXQgZW50cnkgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJvdyA9IElURVJBVE9SX0ZJUlNUKHRibF9pdHIpOworICAgIGZvciggOyByb3c7IHJvdyA9IElURVJBVE9SX05FWFQodGJsX2l0cikpIHsKKyAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtb3ZlIGFsbCBhY3RpdmUgcm93cyAodGhleSBhcmUgaW4gdGhlIGFkZHJzIGNvbnRhaW5lciBrZXB0CisgICAgICAgICAqIGJ5IHRoZSBsaWJyYXJ5KS4gS2VlcCBpbmFjdGl2ZSBvbmVzIGZvciBuZXh0IHRpbWUuCisgICAgICAgICAqLworICAgICAgICBpZiAoZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9PSBSU19BQ1RJVkUpIHsKKyAgICAgICAgICAgIHRsc3RtQWRkclRhYmxlX3JlbW92ZUVudHJ5KE5VTEwsIHJvdyk7CisgICAgICAgICAgICBJVEVSQVRPUl9SRU1PVkUodGJsX2l0cik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKHRibF9pdHIpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmNhY2hlOmZyZWUiLCAiZG9uZSwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUEVSU0lTVEVOQ0UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgIF90bHN0bUFkZHJUYWJsZV9zYXZlX3Jvd3MoaW50IG1ham9ySUQsIGludCBtaW5vcklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKK3N0YXRpYyB2b2lkIF90bHN0bUFkZHJUYWJsZV9yb3dfcmVzdG9yZV9taWIoY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmKTsKK3N0YXRpYyBjb25zdCBjaGFyIG1pYl90b2tlbltdID0gInNubXBUbHN0bUFkZHJFbnRyeSI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICpfaW5pdF9wZXJzaXN0ZW5jZSBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGFibGUKKyAqIGluaXQgcm91dGluZS4KKyAqCisgKiBJZiB5b3VyIHRhYmxlIGRlcGVuZHMgb24gcm93cyBpbiBhbm90aGVyIHRhYmxlLAorICogeW91IHNob3VsZCByZWdpc3RlciB5b3VyIGNhbGxiYWNrIGFmdGVyIHRoZSBvdGhlciB0YWJsZSwKKyAqIHdoaWNoIHNob3VsZCBlbnN1cmUgdGhlIHJvd3Mgb24gd2hpY2ggeW91IGRlcGVuZCBhcmUgc2F2ZWQKKyAqIChhbmQgcmUtY3JlYXRlZCkgYmVmb3JlIHRoZSBkZXBlbmRlbnQgcm93cy4KKyAqLworc3RhdGljIHZvaWQKK190bHN0bUFkZHJfaW5pdF9wZXJzaXN0ZW5jZSh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIGlmIChOVUxMID09IF90YWJsZV9kYXRhKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyB0YWJsZSBkYXRhIGZvciB0bHN0bUFkZHIgcGVyc2lzdGVuY2UhXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIG1pYl90b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGxzdG1BZGRyVGFibGVfcm93X3Jlc3RvcmVfbWliLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIHJjID0gc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Rsc3RtQWRkclRhYmxlX3NhdmVfcm93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RhYmxlX2RhdGEtPmNvbnRhaW5lcik7CisKKyAgICBpZiAocmMgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIGZvciBTVE9SRV9EQVRBIGNhbGxiYWNrICIKKyAgICAgICAgICAgICAgICAgImluIF90bHN0bUFkZHJUYWJsZV9pbml0X3BlcnNpc3RlbmNlXG4iKTsKK30KKworc3RhdGljIGludAorX3NhdmVfZW50cnkodGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5LCB2b2lkICp0eXBlKQoreworICAgIGNoYXIgICBidWZbU05NUF9NQVhCVUZfU01BTExdLCAqaGFzaFR5cGU7CisKKyAgICBoYXNoVHlwZSA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBlbnRyeS0+aGFzaFR5cGUpOworICAgIGlmIChOVUxMID09IGhhc2hUeXBlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJza2lwcGluZyBlbnRyeSB1bmtub3duIGhhc2ggdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgZW50cnktPmhhc2hUeXBlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGJ1aWxkIHRoZSBsaW5lCisgICAgICovCisgICAgbmV0c25tcF9hc3NlcnQoMCA9PSBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lWworICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lX2xlbl0pOworICAgIG5ldHNubXBfYXNzZXJ0KDAgPT0gZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50WworICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuXSk7CisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzICVzIC0tJXMgJXMgJXMgJWQiLCBtaWJfdG9rZW4sCisgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSwgaGFzaFR5cGUsCisgICAgICAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LAorICAgICAgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwKKyAgICAgICAgICAgICBlbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKTsKKyAgICBidWZbc2l6ZW9mKGJ1ZiktMV0gPSAwOworCisgICAgcmVhZF9jb25maWdfc3RvcmUodHlwZSwgYnVmKTsKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6cm93OnNhdmUiLCAic2F2aW5nIGVudHJ5ICclcydcbiIsIGJ1ZikpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK19zYXZlX2FkZHJzKHNubXBUbHN0bUFkZHIgKmFkZHJzLCB2b2lkICphcHBfdHlwZSkKK3sKKyAgICBjaGFyIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF0sICpoYXNoVHlwZTsKKworICAgIGlmIChOVUxMID09IGFkZHJzKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgaGFzaFR5cGUgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgYWRkcnMtPmhhc2hUeXBlKTsKKyAgICBpZiAoTlVMTCA9PSBoYXNoVHlwZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2tpcHBpbmcgZW50cnkgdW5rbm93biBoYXNoIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgIGFkZHJzLT5oYXNoVHlwZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyAlcyAtLSVzICVzICVzICVkIiwgbWliX3Rva2VuLCBhZGRycy0+bmFtZSwKKyAgICAgICAgICAgICBoYXNoVHlwZSwgYWRkcnMtPmZpbmdlcnByaW50LCBhZGRycy0+aWRlbnRpdHksIFJTX0FDVElWRSk7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6YWRkcnM6c2F2ZSIsICJzYXZpbmcgYWRkcnMgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICBidWYpKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZShhcHBfdHlwZSwgYnVmKTsKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgaW50CitfdGxzdG1BZGRyVGFibGVfc2F2ZV9yb3dzKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBjaGFyICAgICAgICAgICAgc2VwW10gPQorICAgICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiOworICAgIGNoYXIgICAgICAgICAgICBidWZbXSA9ICIjXG4iICIjIHRsc3RtQWRkciBwZXJzaXN0ZW50IGRhdGFcbiIgIiMiOworICAgIGNoYXIgICAgICAgICAgICp0eXBlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKworICAgIG5ldHNubXBfY29udGFpbmVyICptaWJfYWRkcnMgPSAobmV0c25tcF9jb250YWluZXIgKikgY2xpZW50YXJnOworICAgIG5ldHNubXBfY29udGFpbmVyICphY3RpdmVfYWRkcnMgPSBuZXRzbm1wX3Rsc3RtQWRkcl9jb250YWluZXIoKTsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqdGJsX2l0ciwgKmFkZHJzX2l0ciA9IE5VTEw7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBzbm1wVGxzdG1BZGRyICAgICAqYWRkcjsKKyAgICB0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBpZiAoKChOVUxMID09IG1pYl9hZGRycykgfHwgKENPTlRBSU5FUl9TSVpFKG1pYl9hZGRycykgPT0gMCkpICYmCisgICAgICAgICgoTlVMTCA9PSBhY3RpdmVfYWRkcnMpIHx8IChDT05UQUlORVJfU0laRShhY3RpdmVfYWRkcnMpID09IDApKSkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgYnVmKTsKKworICAgIC8qCisgICAgICogc2F2ZSBhY3RpdmUgcm93cyBmcm9tIGFkZHIgY29udGFpbmVyCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gYWN0aXZlX2FkZHJzKSB7CisgICAgICAgIGFkZHJzX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihhY3RpdmVfYWRkcnMpOworICAgICAgICBpZiAoTlVMTCA9PSBhZGRyc19pdHIpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpzYXZlIiwgImNhbnQgZ2V0IGFkZHJzIGl0ZXJhdG9yXG4iKSk7CisgICAgICAgICAgICBhZGRyID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRyID0gSVRFUkFUT1JfRklSU1QoYWRkcnNfaXRyKTsKKworICAgICAgICBmb3IoIDsgYWRkcjsgYWRkciA9IElURVJBVE9SX05FWFQoYWRkcnNfaXRyKSkgeworICAgICAgICAgICAgLyoqIGRvbid0IHN0b3JlIGNvbmZpZyByb3dzICovCisgICAgICAgICAgICBpZiAoKGFkZHItPmZsYWdzICYgVExTVE1fQUREUl9GUk9NX0NPTkZJRykgfHwKKyAgICAgICAgICAgICAgICAhIChhZGRyLT5mbGFncyAmIFRMU1RNX0FERFJfTk9OVk9MQVRJTEUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgX3NhdmVfYWRkcnMoYWRkciwgdHlwZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShhZGRyc19pdHIpOworCisgICAgLyoKKyAgICAgKiBzYXZlIGluYWN0aXZlIHJvd3MgZnJvbSBtaWIKKyAgICAgKi8KKyAgICB0YmxfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKG1pYl9hZGRycyk7CisgICAgaWYgKE5VTEwgPT0gdGJsX2l0cikKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOnNhdmUiLCAiY2FudCBnZXQgdGFibGUgaXRlcmF0b3JcbiIpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcm93ID0gSVRFUkFUT1JfRklSU1QodGJsX2l0cik7CisgICAgICAgIGZvciggOyByb3c7IHJvdyA9IElURVJBVE9SX05FWFQodGJsX2l0cikpIHsKKyAgICAgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2tpcCBhbGwgYWN0aXZlIHJvd3MgKHNob3VsZCBiZSBpbiBhY3RpdmVfYWRkcnMgYW5kIHRodXMgc2F2ZWQKKyAgICAgICAgICAgICAqIGFib3ZlKSBhbmQgdm9sYXRpbGUgcm93cy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKChlbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID09IFJTX0FDVElWRSkgfHwKKyAgICAgICAgICAgICAgICAoZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlICE9IFNUX05PTlZPTEFUSUxFKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgX3NhdmVfZW50cnkoZW50cnksIHR5cGUpOworICAgICAgICB9CisgICAgICAgIElURVJBVE9SX1JFTEVBU0UodGJsX2l0cik7CisgICAgfQorCisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCAiXG4iKTsKKworICAgIC8qCisgICAgICogbmV2ZXIgZmFpbHMgCisgICAgICovCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQKK190bHN0bUFkZHJUYWJsZV9yb3dfcmVzdG9yZV9taWIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmJ1ZikKK3sKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgIG5hbWVbU05NUEFETUlOTEVOR1RIICsgMV0sIGlkW1NOTVBBRE1JTkxFTkdUSCArIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnRbU05NUFRMU0ZJTkdFUlBSSU5UX01BWF9MRU4gKyAxXTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgIG5hbWVfbGVuID0gc2l6ZW9mKG5hbWUpLCBpZF9sZW4gPSBzaXplb2YoaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBfbGVuID0gc2l6ZW9mKGZpbmdlcnByaW50KTsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgIGhhc2hUeXBlLCByb3dTdGF0dXM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKKworICAgIC8qKiBuZWVkIHNvbWV3aGVyZSB0byBzYXZlIHJvd3MgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChfdGFibGVfZGF0YSAmJiBfdGFibGVfZGF0YS0+Y29udGFpbmVyKTsgCisKKyAgICByYyA9IG5ldHNubXBfdGxzdG1BZGRyX3Jlc3RvcmVfY29tbW9uKCZidWYsIG5hbWUsICZuYW1lX2xlbiwgaWQsICZpZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwgJmZwX2xlbiwgJmhhc2hUeXBlKTsKKyAgICBpZiAocmMgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTlVMTCA9PSBidWYpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiaW5jb21wbGV0ZSBsaW5lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcm93U3RhdHVzID0gYXRvaShidWYpOworCisgICAgLyoKKyAgICAgKiBpZiByb3cgaXMgYWN0aXZlLCBhZGQgaXQgdG8gdGhlIGFkZHJzIGNvbnRhaW5lciBzbyBpdCBpcyBhdmFpbGFibGUKKyAgICAgKiBmb3IgdXNlLiBEbyBub3QgYWRkIGl0IHRvIHRoZSB0YWJsZSwgc2luY2UgaXQgd2lsbCBiZSBhZGRlZAorICAgICAqIGR1cmluZyBjYWNoZV9sb2FkLgorICAgICAqLworICAgIGlmIChSU19BQ1RJVkUgPT0gcm93U3RhdHVzKSB7CisgICAgICAgIHNubXBUbHN0bUFkZHIgKmFkZHI7CisKKyAgICAgICAgYWRkciA9IG5ldHNubXBfdGxzdG1BZGRyX2NyZWF0ZShuYW1lKTsKKyAgICAgICAgaWYgKCFhZGRyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChmcF9sZW4pCisgICAgICAgICAgICBhZGRyLT5maW5nZXJwcmludCA9IHN0cmR1cChmaW5nZXJwcmludCk7CisgICAgICAgIGlmIChpZF9sZW4pCisgICAgICAgICAgICBhZGRyLT5pZGVudGl0eSA9IHN0cmR1cChpZCk7CisgICAgICAgIGFkZHItPmhhc2hUeXBlID0gaGFzaFR5cGU7CisgICAgICAgIGFkZHItPmZsYWdzID0gVExTVE1fQUREUl9GUk9NX01JQiB8IFRMU1RNX0FERFJfTk9OVk9MQVRJTEU7CisKKyAgICAgICAgbmV0c25tcF90bHN0bUFkZHJfYWRkKGFkZHIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9yb3cgICAgICpyb3c7CisgICAgICAgIHRsc3RtQWRkclRhYmxlX2VudHJ5ICAqZW50cnk7CisKKyAgICAgICAgcm93ID0gdGxzdG1BZGRyVGFibGVfY3JlYXRlRW50cnkoX3RhYmxlX2RhdGEsIG5hbWUsIG5hbWVfbGVuKTsKKyAgICAgICAgaWYgKCFyb3cpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisgICAgICAgIAorICAgICAgICBlbnRyeS0+aGFzaFR5cGUgPSBoYXNoVHlwZTsKKyAgICAgICAgbWVtY3B5KGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCxmaW5nZXJwcmludCwgZnBfbGVuKTsKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9IGZwX2xlbjsKKyAgICAgICAgbWVtY3B5KGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwgaWQsIGlkX2xlbik7CisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4gPSBpZF9sZW47CisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9IFNUX05PTlZPTEFUSUxFOworICAgICAgICBlbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0gcm93U3RhdHVzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMGI4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMudGFibGVfZGF0YS5jb25mIDE1OTk5IDIwMDctMDMtMjUgMjI6MzI6MDJaIGR0czEyICQKKyAqLworI2lmbmRlZiBTTk1QVExTVE1BRERSVEFCTEVfSAorI2RlZmluZSBTTk1QVExTVE1BRERSVEFCTEVfSAorCisjZGVmaW5lIFNOTVBfVExTX1RNX0FERFJfQ09VTlQgICAgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgNworI2RlZmluZSBTTk1QX1RMU19UTV9BRERSX0NIQU5HRUQgIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDgKKyNkZWZpbmUgU05NUF9UTFNfVE1fQUREUl9UQUJMRSAgICBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCA5CisKKy8qCisgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCisgKi8KK3ZvaWQgICAgICAgICAgICBpbml0X3NubXBUbHN0bUFkZHJUYWJsZSh2b2lkKTsKKworLyoKKyAqIGluZGV4IGRlZmluaXRpb25zIGZvciB0YWJsZSB0bHN0bUFkZHJUYWJsZSAKKyAqLworI2RlZmluZSBTTk1QVEFSR0VUQUREUk5BTUVfTUFYX1NJWkUgIDI1NQorCisvKgorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgdGxzdG1BZGRyVGFibGUgCisgKi8KKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVCAgICAgICAxCisjZGVmaW5lIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFkgICAgICAgICAgMgorI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVMgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgVExTVE1BRERSVEFCTEVfTUlOX0NPTFVNTiAgICAgICAgIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQKKyNkZWZpbmUgVExTVE1BRERSVEFCTEVfTUFYX0NPTFVNTiAgICAgICAgIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTCisKKyNkZWZpbmUgVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlRfTUFYX1NJWkUgICAgICAyNTUKKyNkZWZpbmUgVExTVE1BRERSU0VSVkVSSURFTlRJVFlfTUFYX1NJWkUgICAgICAgICAyNTUKKworCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBUTFNUTUFERFJUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZmEwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgU05NUFRMU1RNQ0VSVFRPVFNOVEFCTEVfSAorI2RlZmluZSBTTk1QVExTVE1DRVJUVE9UU05UQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKHRsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSkKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVExTVE1DRVJUVE9UU05UQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDFhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYwpAQCAtMCwwICsxLDEzNzcgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICQKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2luY2x1ZGUgInRsc3RtLW1pYi5oIgorI2luY2x1ZGUgInNubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2VydF9maW5nZXJwcmludHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9kZWxldGVfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9leHRyYWN0X3RhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfcmVtb3ZlX3JvdykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRsc19maW5nZXJwcmludF9idWlsZCkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9zdG9yYWdldHlwZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisvKiogWFhYIC0gbW92ZSB0aGVzZSB0byB0YWJsZV9kYXRhIGhlYWRlcj8gKi8KKyNkZWZpbmUgRkFURV9ORVdMWV9DUkVBVEVEICAgIDEKKyNkZWZpbmUgRkFURV9OT19DSEFOR0UgICAgICAgIDAKKyNkZWZpbmUgRkFURV9ERUxFVEVfTUUgICAgICAgIC0xCisKKyNkZWZpbmUgTUFQX01JQl9DT05GSUdfVE9LRU4gInNubXBUbHN0bUNlcnRUb1RTTkVudHJ5IgorCitleHRlcm4gbmV0c25tcF9jZXJ0X21hcCAqbmV0c25tcF9jZXJ0VG9UU05fcGFyc2VfY29tbW9uKGNoYXIgKipsaW5lKTsKKworCisgICAgLyoKKyAgICAgKiBzdHJ1Y3R1cmUgZm9yIHVuZG8gc3RvcmFnZSBhbmQgb3RoZXIgdmFycyBmb3Igc2V0IHByb2Nlc3NpbmcgCisgICAgICovCit0eXBlZGVmIHN0cnVjdCBjZXJ0VG9UU05fdW5kb19zIHsKKyAgICBjaGFyICAgICAgICAgICAgZmF0ZTsKKyAgICBjaGFyICAgICAgICAgICAgY29waWVkOworICAgIGNoYXIgICAgICAgICAgICBpc19jb25zaXN0ZW50OworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXFbU05NUFRMU1RNQ0VSVFRPVFNOX1RBQkxFX01BWF9DT0wrMV07CisKKyAgICAvKgorICAgICAqIHVuZG8gQ29sdW1uIHNwYWNlIAorICAgICAqLworICAgIGNoYXIgICAgICAgICAgICBmaW5nZXJwcmludFtTTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlRfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICBmaW5nZXJwcmludF9sZW47CisgICAgaW50ICAgICAgICAgICAgIG1hcFR5cGU7CisgICAgY2hhciAgICAgICAgICAgIGRhdGFbU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEFfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICBkYXRhX2xlbjsKKyAgICB1X2NoYXIgICAgICAgICAgaGFzaFR5cGU7CisgICAgY2hhciAgICAgICAgICAgIHN0b3JhZ2VUeXBlOworICAgIGNoYXIgICAgICAgICAgICByb3dTdGF0dXM7Cit9IGNlcnRUb1RTTl91bmRvOworCisgICAgLyoKKyAgICAgKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAKKyAgICAgKi8KK3R5cGVkZWYgc3RydWN0IGNlcnRUb1RTTl9lbnRyeV9zIHsKKyAgICAvKgorICAgICAqIEluZGV4IHZhbHVlcyAKKyAgICAgKi8KKyAgICB1X2xvbmcgICAgICAgICAgdGxzdG1DZXJ0VG9UU05JRDsKKworICAgIC8qCisgICAgICogQ29sdW1uIHZhbHVlcyAKKyAgICAgKi8KKyAgICBjaGFyICAgICAgICAgICAgZmluZ2VycHJpbnRbU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgZmluZ2VycHJpbnRfbGVuOworICAgIGludCAgICAgICAgICAgICBtYXBUeXBlOworICAgIGNoYXIgICAgICAgICAgICBkYXRhW1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgZGF0YV9sZW47CisgICAgY2hhciAgICAgICAgICAgIHN0b3JhZ2VUeXBlOworICAgIGNoYXIgICAgICAgICAgICByb3dTdGF0dXM7CisgICAgdV9jaGFyICAgICAgICAgIGhhc2hUeXBlOworICAgIGNoYXIgICAgICAgICAgICBtYXBfZmxhZ3M7CisKKyAgICAvKgorICAgICAqIHVzZWQgZHVyaW5nIHNldCBwcm9jZXNzaW5nIAorICAgICAqLworICAgIGNlcnRUb1RTTl91bmRvICp1bmRvOworfSBjZXJ0VG9UU05fZW50cnk7CisKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciB0bHN0bUNlcnRUb1RTTlRhYmxlX2hhbmRsZXI7CitzdGF0aWMgb2lkIF9vaWQydHlwZShvaWQgKnZhbCwgaW50IHZhbF9sZW4pOworLyoqIHN0YXRpYyBpbnQgX3R5cGUyb2lkKGludCB0eXBlLCBvaWQgKnZhbCwgaW50ICp2YWxfbGVuKTsgKi8KK3N0YXRpYyBpbnQgX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIG5ldHNubXBfdGRhdGEgKnRhYmxlKTsKK3N0YXRpYyB2b2lkIF9jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKmNhY2hlLCBuZXRzbm1wX3RkYXRhICp0YWJsZSk7CitzdGF0aWMgdm9pZCBfY2VydF9tYXBfYWRkKGNlcnRUb1RTTl9lbnRyeSAqZW50cnkpOworc3RhdGljIHZvaWQgX2NlcnRfbWFwX3JlbW92ZShjZXJ0VG9UU05fZW50cnkgKmVudHJ5KTsKK3N0YXRpYyBpbnQgX2NvdW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CitzdGF0aWMgdm9pZCBfcGFyc2VfbWliX21hcHMoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOworc3RhdGljIGludCBfc2F2ZV9tYXBzKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyLCB2b2lkICpjbGllbnQpOworc3RhdGljIGludCBfc2F2ZV9tYXAobmV0c25tcF9jZXJ0X21hcCAqbWFwLCBpbnQgcm93X3N0YXR1cywgdm9pZCAqdHlwZSk7CitzdGF0aWMgdm9pZCBfY2VydF9tYXBfdHdlYWtfc3RvcmFnZShjZXJ0VG9UU05fZW50cnkgKmVudHJ5KTsKKworc3RhdGljIG5ldHNubXBfdGRhdGEgKl90YWJsZSA9IE5VTEw7CitzdGF0aWMgdWludDMyX3QgX2xhc3RfY2hhbmdlZCA9IDA7CisKKworLyoqIEluaXRpYWxpemVzIHRoZSB0bHN0bUNlcnRUb1RTTlRhYmxlIG1vZHVsZSAqLwordm9pZAoraW5pdF9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSh2b2lkKQoreworICAgIGluaXRfc25tcFRsc3RtQ2VydFRvVFNOVGFibGVfY29udGV4dChOVUxMKTsKK30KKwordm9pZAoraW5pdF9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZV9jb250ZXh0KGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQoreworICAgIG9pZCAgICAgICAgICAgICByZWdfb2lkW10gICA9ICB7IFNOTVBfVExTX1RNX0NFUlRfVEFCTEUgfTsKKyAgICBjb25zdCBzaXplX3QgICAgcmVnX29pZF9sZW4gPSAgT0lEX0xFTkdUSChyZWdfb2lkKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqaW5mbzsKKyAgICBuZXRzbm1wX2NhY2hlICAgICAgICAgICAgICAgICAgICpjYWNoZTsKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICAgICp3YXRjaGVyOworICAgIGNvbnN0IGNoYXIgKm1pYl9tYXBfaGVscCA9IAorICAgICAgICBNQVBfTUlCX0NPTkZJR19UT0tFTiAiIHRhYmxlIHBlcnNpc3RlbmNlIChpbnRlcm5hbCB1c2UpIjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1NOOmluaXQiLAorICAgICAgICAgICAgICAgICJpbml0aWFsaXppbmcgdGFibGUgdGxzdG1DZXJ0VG9UU05UYWJsZVxuIikpOworCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgKCJ0bHN0bUNlcnRUb1RTTlRhYmxlIiwgdGxzdG1DZXJ0VG9UU05UYWJsZV9oYW5kbGVyLAorICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworICAgIGlmIChOVUxMID09IHJlZykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgaGFuZGxlciByZWdpc3RyYXRpb24gZm9yIHRsc3RtQ2VydFRvU05cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKE5VTEwgIT0gY29udGV4dE5hbWUpCisgICAgICAgIHJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworCisgICAgX3RhYmxlID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGUoInRsc3RtQ2VydFRvVFNOVGFibGUiLCAwKTsKKyAgICBpZiAoTlVMTCA9PSBfdGFibGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIHRkYXRhIHRhYmxlIGZvciB0bHN0bUNlcnRUb1RTTlRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAoTlVMTCA9PSBpbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyB0YWJsZSBpbmZvIGZvciB0bHN0bUNlcnRUb1RTTlRhYmxlXG4iKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfdGFibGUoX3RhYmxlKTsKKyAgICAgICAgX3RhYmxlID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyhpbmZvLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRleDogdGxzdG1DZXJ0VG9UU05JRCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwgIDApOworCisgICAgaW5mby0+bWluX2NvbHVtbiA9IFNOTVBUTFNUTUNFUlRUT1RTTl9UQUJMRV9NSU5fQ09MOworICAgIGluZm8tPm1heF9jb2x1bW4gPSBTTk1QVExTVE1DRVJUVE9UU05fVEFCTEVfTUFYX0NPTDsKKworICAgIC8qCisgICAgICogY2FjaGUgaW5pdAorICAgICAqLworICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsIChOZXRzbm1wQ2FjaGVMb2FkKilfY2FjaGVfbG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOZXRzbm1wQ2FjaGVGcmVlKilfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkX2xlbik7CisgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIHRsc3RtQ2VydFRvVFNOVGFibGVcbiIpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZShfdGFibGUpOworICAgICAgICBfdGFibGUgPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhY2hlLT5tYWdpYyA9ICh2b2lkICopX3RhYmxlOworICAgIGNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKworICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBfdGFibGUsIGluZm8pOworCisgICAgaWYgKGNhY2hlKSAKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUoIHJlZywgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChjYWNoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFibGVfY29udGFpbmVyIik7CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHNjYWxhcnMKKyAgICAgKi8KKyAgICByZWdfb2lkWzEwXSA9IDE7CisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNubXBUbHN0bUNlcnRUb1RTTkNvdW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY291bnRfaGFuZGxlciwgcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHJlZ19vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIGhhbmRsZXIgZm9yIHNubXBUbHN0bUNlcnRUb1RTTkNvdW50XG4iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gY29udGV4dE5hbWUpCisgICAgICAgICAgICByZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihyZWcpOworICAgICAgICBpZiAoY2FjaGUpIAorICAgICAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUocmVnLCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YWJsZV9jb250YWluZXIiKTsKKyAgICB9CisgICAgCisgICAgcmVnX29pZFsxMF0gPSAyOworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAic25tcFRsc3RtQ2VydFRvVFNOVGFibGVMYXN0Q2hhbmdlZCIsIE5VTEwsIHJlZ19vaWQsCisgICAgICAgIE9JRF9MRU5HVEgocmVnX29pZCksIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICB3YXRjaGVyID0gbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKCh2b2lkKikmX2xhc3RfY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfbGFzdF9jaGFuZ2VkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9USU1FVElDS1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQVRDSEVSX0ZJWEVEX1NJWkUpOworICAgIGlmICgoTlVMTCA9PSByZWcpIHx8IChOVUxMID09IHdhdGNoZXIpKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBoYW5kbGVyIGZvciBzbm1wVGxzdG1DZXJ0VG9UU05Db3VudFxuIik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChOVUxMICE9IGNvbnRleHROYW1lKQorICAgICAgICAgICAgcmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKHJlZywgd2F0Y2hlcik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBwZXJzaXN0ZW5jZQorICAgICAqLworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIE1BUF9NSUJfQ09ORklHX1RPS0VOLCBfcGFyc2VfbWliX21hcHMsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX21hcF9oZWxwKTsKKyAgICBpZiAoc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2F2ZV9tYXBzLCBOVUxMKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgZm9yIFNUT1JFX0RBVEEgY2FsbGJhY2sgIgorICAgICAgICAgICAgICAgICAiZm9yIGNlcnRUb1RTTlxuIik7CisKK30KKworLyoKKyAqIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlIAorICovCituZXRzbm1wX3RkYXRhX3JvdyAqCit0bHN0bUNlcnRUb1RTTlRhYmxlX2NyZWF0ZUVudHJ5KG5ldHNubXBfdGRhdGEgKiB0YWJsZSwgdV9sb25nIHRsc3RtQ2VydFRvVFNOSUQpCit7CisgICAgY2VydFRvVFNOX2VudHJ5ICplbnRyeTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworCisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKGNlcnRUb1RTTl9lbnRyeSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByb3cgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV9yb3coKTsKKyAgICBpZiAoIXJvdykgeworICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcm93LT5kYXRhID0gZW50cnk7CisKKyAgICBERUJVR01TR1QoKCJ0bHN0bUNlcnRUb1NOOmVudHJ5OmNyZWF0ZSIsICJlbnRyeSAlcCAvIHJvdyAlcFxuIiwKKyAgICAgICAgICAgICAgIGVudHJ5LCByb3cpKTsKKyAgICAvKgorICAgICAqIHBvcHVsYXRlIGluZGV4CisgICAgICovCisgICAgZW50cnktPnRsc3RtQ2VydFRvVFNOSUQgPSB0bHN0bUNlcnRUb1RTTklEOworICAgIG5ldHNubXBfdGRhdGFfcm93X2FkZF9pbmRleChyb3csIEFTTl9VTlNJR05FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRCkpOworICAgLyoKKyAgICAqIGFzc2lnbiBkZWZhdWx0IGNvbHVtbiB2YWx1ZXMKKyAgICAqLworICAgIGVudHJ5LT5tYXBUeXBlID0gVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQ7CisgICAgZW50cnktPnN0b3JhZ2VUeXBlID0gU1RfTk9OVk9MQVRJTEU7CisgICAgZW50cnktPnJvd1N0YXR1cyA9IFJTX05PVFJFQURZOworCisgICAgaWYgKHRhYmxlKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTjpyb3c6aW5zZXJ0IiwgInJvdyAlcFxuIiwgcm93KSk7CisgICAgICAgIG5ldHNubXBfdGRhdGFfYWRkX3Jvdyh0YWJsZSwgcm93KTsKKyAgICB9CisgICAgcmV0dXJuIHJvdzsKK30KKworLyoKKyAqIGFsbG9jYXRlIHVuZG8gcmVzb3VyY2VzIAorICovCitzdGF0aWMgY2VydFRvVFNOX3VuZG8gKgorX2FsbG9jVW5kbyhjZXJ0VG9UU05fZW50cnkgKiBlbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG5ldHNubXBfYXNzZXJ0KCFlbnRyeS0+dW5kbyk7CisKKyAgICBlbnRyeS0+dW5kbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoY2VydFRvVFNOX3VuZG8pOworICAgIGlmICghZW50cnktPnVuZG8pCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAtMTsgICAvKiBkb24ndCBrbm93ICovCisKKyAgICByZXR1cm4gZW50cnktPnVuZG87Cit9CisKKy8qCisgKiBmcmVlIHVuZG8gcmVzb3VyY2VzIAorICovCitzdGF0aWMgdm9pZAorX2ZyZWVVbmRvKGNlcnRUb1RTTl9lbnRyeSAqIGVudHJ5KQoreworICAgIGlmICghZW50cnkgfHwgIWVudHJ5LT51bmRvKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAgICAqIFRPRE86IHJlbGVhc2UgYW55IGFsbG9jYXRlZCByZXNvdXJjZXMgCisgICAgICovCisgICAgU05NUF9GUkVFKGVudHJ5LT51bmRvKTsKK30KKworLyoKKyAqIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAKKyAqLwordm9pZAordGxzdG1DZXJ0VG9UU05UYWJsZV9yZW1vdmVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfcm93ICogcm93KQoreworICAgIGNlcnRUb1RTTl9lbnRyeSAqZW50cnk7CisKKyAgICBpZiAoIXJvdykKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KKworICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSByb3ctPmRhdGE7CisKKyAgICBERUJVR01TR1QoKCJ0bHN0bUNlcnRUb1NOOmVudHJ5OmRlbGV0ZSIsICJlbnRyeSAlcCAvIHJvdyAlcFxuIiwKKyAgICAgICAgICAgICAgIGVudHJ5LCByb3cpKTsKKworICAgIGlmIChlbnRyeSAmJiBlbnRyeS0+dW5kbykKKyAgICAgICAgX2ZyZWVVbmRvKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOworCisgICAgaWYgKHRhYmxlKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1NOOnJvdzpyZW1vdmUiLCAicm93ICVwXG4iLCByb3cpKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3codGFibGUsIHJvdyk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfcm93KHJvdyk7Cit9CisKKworLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSB0bHN0bUNlcnRUb1RTTlRhYmxlIHRhYmxlICovCitzdGF0aWMgaW50Cit0bHN0bUNlcnRUb1RTTlRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBvaWQgdHNubVtdID0geyBTTk1QX1RMU19UTV9CQVNFLCAxLCAxLCAwIH07CisgICAgc3RhdGljIGNvbnN0IGludCB0c25tX3BvcyA9IE9JRF9MRU5HVEgodHNubSkgLSAxOworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0ID0gTlVMTDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqaW5mbzsKKyAgICBuZXRzbm1wX3RkYXRhICAqdGFibGU7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBjZXJ0VG9UU05fZW50cnkgKmVudHJ5OworICAgIGludCAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvU046aGFuZGxlciIsICJQcm9jZXNzaW5nIHJlcXVlc3QgKG1vZGUgJXMgKCVkKSlcbiIsCisgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpLAorICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpKTsKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR0VUICMjIyMjCisgICAgICoKKyAgICAgKiAgIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgKi8KKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICBpbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChlbnRyeSAmJiBpbmZvKTsKKworICAgICAgICAgICAgc3dpdGNoIChpbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGJ1aWxkIFNubXBUTFNGaW5nZXJwcmludAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHVfY2hhciBiaW5bNDJdLCAqcHRyID0gYmluOworICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzaXplb2YoYmluKTsKKyAgICAgICAgICAgICAgICBpbnQgICAgcmM7CisgICAgICAgICAgICAgICAgcmMgPSBuZXRzbm1wX3Rsc19maW5nZXJwcmludF9idWlsZChlbnRyeS0+aGFzaFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHRyLCAmbGVuLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IHJjKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW4sIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEU6CisgICAgICAgICAgICAgICAgdHNubVt0c25tX3Bvc10gPSBlbnRyeS0+bWFwVHlwZTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c25tLCBzaXplb2YodHNubSkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEE6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmRhdGEsIGVudHJ5LT5kYXRhX2xlbik7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RvcmFnZVR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cm93U3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUyAqLworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNIT0JKRUNUKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX0dFVCAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKKyAgICAgICAgICovCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVTRVJWRTEgIyMjIyMKKyAgICAgKgorICAgICAqICAgSW4gUkVTRVJWRTEgd2UgYXJlIGp1c3QgY2hlY2tpbmcgYmFzaWMgQVNOLjEgc2l6ZS90eXBlIHJlc3RyaWN0aW9ucy4KKyAgICAgKiBZb3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55IG9mIHRoaXMgY29kZS4gRG9uJ3QgY2hhbmdlIGFueQorICAgICAqIG9mIHRoZSBjb2x1bW4gdmFsdWVzIGhlcmUuIFNhdmUgdGhhdCBmb3IgdGhlIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhlIG5leHQgcGhhc2UgaXMgUkVTRVJWRTIgb3IgRlJFRS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHJlcXVlc3QtPnByb2Nlc3NlZCA9PSAwKTsKKworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIGluZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKChOVUxMICE9IGVudHJ5KSAmJiAoU1RfUkVBRE9OTFkgPT0gZW50cnktPnN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICAvKiogY2hlY2sgbGVuL2FsZ29yaXRobSBNSUIgcmVxdWlyZW1lbnRzICovCisgICAgICAgICAgICAgICAgaWYgKHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NlcnRfY2hlY2tfdmJfZmluZ2VycHJpbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRToKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQkpFQ1RfSUQsCisgICAgICAgICAgICAgICAgICAgICBTTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRV9NQVhfU0laRSk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfb2lkMnR5cGUocmVxdWVzdC0+cmVxdWVzdHZiLT52YWwub2JqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuKSA+CisgICAgICAgICAgICAgICAgICAgICAgICBUU05NX3Rsc3RtQ2VydF9NQVgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwgc2l6ZW9mKGVudHJ5LT5kYXRhKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9zdG9yYWdldHlwZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLChlbnRyeSA/IGVudHJ5LT5zdG9yYWdlVHlwZSA6IFNUX05PTkUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgIChlbnRyeSA/IGVudHJ5LT5yb3dTdGF0dXMgOlJTX05PTkVYSVNURU5UKSwKKyAgICAgICAgICAgICAgICAgICAgIChlbnRyeSA/IGVudHJ5LT5zdG9yYWdlVHlwZSA6U1RfTk9ORSkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTICovCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisKKyAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTEgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJFU0VSVkUyICMjIyMjCisgICAgICoKKyAgICAgKiAgIFJFU0VSVkUyIGlzIGZvciBjaGVja2luZyBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBmcm9tIHRoZSBNSUIuCisgICAgICogU2luY2UgdGhlc2UgcmVzdHJpY3Rpb25zIGFyZSBvZnRlbiBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIG9iamVjdCwKKyAgICAgKiBtaWIyYyBjYW4ndCBnZW5lcmF0ZSBjb2RlLiBJdCdzIHBvc3NpYmxlIHRoYXQgeW91IG5lZWQgdG8gYWRkCisgICAgICogYWRkaXRpb25hbCBjaGVja3MgaGVyZS4gSG93ZXZlciwgZG9uJ3QgY2hhbmdlIGFueSBvZiB0aGUgY29sdW1uCisgICAgICogdmFsdWVzIGhlcmUuIFNhdmUgdGhhdCBmb3IgdGhlIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhlIG5leHQgcGhhc2UgaXMgQUNUSU9OIG9yIEZSRUUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChyZXF1ZXN0LT5wcm9jZXNzZWQgPT0gMCk7CisKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIGluZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBpZiBubyByb3csIGNyZWF0ZSBvbmUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgICAgIHJvdyA9IHRsc3RtQ2VydFRvVFNOVGFibGVfY3JlYXRlRW50cnkKKyAgICAgICAgICAgICAgICAgICAgKHRhYmxlLCppbmZvLT5pbmRleGVzLT52YWwuaW50ZWdlcik7CisgICAgICAgICAgICAgICAgaWYgKCFyb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworICAgICAgICAgICAgICAgIF9hbGxvY1VuZG8oZW50cnkpOworICAgICAgICAgICAgICAgIGlmICghZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICAgICAgdGxzdG1DZXJ0VG9UU05UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZSwgcm93KTsKKyAgICAgICAgICAgICAgICAgICAgcm93ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5mYXRlID0gRkFURV9ORVdMWV9DUkVBVEVEOworICAgICAgICAgICAgICAgIC8qKiBhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2luc2VydF90ZGF0YV9yb3cocmVxdWVzdCwgcm93KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqIGFsbG9jYXRlIHVuZG8gc3RydWN0dXJlLCBpZiBuZWVkZWQgKi8KKyAgICAgICAgICAgIGlmICghZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICBfYWxsb2NVbmRvKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNhdmUgcmVxdWVzdCBwdHIgZm9yIGNvbHVtbi4gaWYgd2UgYWxyZWFkeQorICAgICAgICAgICAgICogaGF2ZSBhIHZhbHVlLCBiYWlsLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoZW50cnktPnVuZG8tPnJlcVtpbmZvLT5jb2xudW1dKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgidGxzdG1DZXJ0VG9TTjpyZXNlcnZlMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgc2V0cyB0byBjb2wgJWQgaW4gcmVxdWVzdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmNvbG51bSkpOworICAgICAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVudHJ5LT51bmRvLT5yZXFbaW5mby0+Y29sbnVtXSA9IHJlcXVlc3Q7CisgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIGlmIChyZXQgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgLyoqIG1ha2Ugc3VyZSByb3dzdGF0dXMgaXMgdXNlZCB0byBjcmVhdGUgcm93cyAqLworICAgICAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgICAgIGlmICgoZW50cnktPnVuZG8tPmZhdGUgIT0gRkFURV9ORVdMWV9DUkVBVEVEKSB8fAorICAgICAgICAgICAgICAgICAgICAoZW50cnktPnVuZG8tPnJlcVtDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVU10pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvKiBjcmVhdGlvbiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgfSAvKiBubyBlcnJvciAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX1JFU0VSVkUyICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRlJFRSAjIyMjIworICAgICAqCisgICAgICogICBGUkVFIGlzIGZvciBjbGVhbmluZyB1cCBhZnRlciBhIGZhaWxlZCByZXF1ZXN0IChkdXJpbmcgZWl0aGVyCisgICAgICogUkVTRVJWRTEgb3IgUkVTRVJWRTIpLiBTbyBhbnkgYWxsb2NhdGVkIHJlc291cmNlcyBuZWVkIHRvIGJlCisgICAgICogcmVsZWFzZWQuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAvKgorICAgICAgICAgKiByZWxlYXNlIHVuZG8gcmVzb3VyY2VzCisgICAgICAgICAqIHJlbW92ZSBhbnkgbmV3bHkgY3JlYXRlZCByb3dzCisgICAgICAgICAqLworICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICghZW50cnkgfHwgIWVudHJ5LT51bmRvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3cocmVxdWVzdCwgcm93KTsKKworICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSBlbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICB0bHN0bUNlcnRUb1RTTlRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlLCByb3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIF9mcmVlVW5kbyhlbnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9GUkVFICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFDVElPTiAjIyMjIworICAgICAqCisgICAgICogICBJbiB0aGUgQUNUSU9OIHBoYXNlLCB3ZSBwZXJmb3JtIGFueSBzZXRzIHRoYXQgY2FuIGJlIHVuZG9uZS4KKyAgICAgKiAoU2F2ZSBhbnl0aGluZyB0aGF0IGNhbid0IGJlIHVuZG9uZSBmb3IgdGhlIENPTU1JVCBwaGFzZS4pCisgICAgICoKKyAgICAgKiAgIEFmdGVyIGluZGl2aWR1YWwgY29sdW1ucyBoYXZlIGJlZW4gZG9uZSwgeW91IHNob3VsZCBjaGVjayB0aGF0IHRoZQorICAgICAqIHJvdyBhcyBhIHdob2xlIGlzIGNvbnNpc3RlbnQuCisgICAgICoKKyAgICAgKiBUaGUgbmV4dCBwaGFzZSBpcyBVTkRPIG9yIENPTU1JVC4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICAvKiogcmVzZXJ2ZTIgc2hvdWxkIGVuZm9yY2UgdGhpcyAqLworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQocmVxdWVzdCA9PSBlbnRyeS0+dW5kby0+cmVxW2luZm8tPmNvbG51bV0pOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogZm9yIGVhY2ggY29sLCBzYXZlIG9sZCB2YWx1ZSBhbmQgdGhlIHNldCBuZXcgdmFsdWUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3dpdGNoIChpbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1X2NoYXIgKnRtcCA9ICh1X2NoYXIqKWVudHJ5LT5maW5nZXJwcmludDsKKyAgICAgICAgICAgICAgICB1X2ludCBzaXplID0gc2l6ZW9mKGVudHJ5LT5maW5nZXJwcmludCk7CisgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YiA9IHJlcXVlc3QtPnJlcXVlc3R2YjsKKworICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+dW5kby0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5maW5nZXJwcmludCwgc2l6ZW9mKGVudHJ5LT5maW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5maW5nZXJwcmludF9sZW4gPSBlbnRyeS0+ZmluZ2VycHJpbnRfbGVuOworICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5oYXNoVHlwZSA9IGVudHJ5LT5oYXNoVHlwZTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoZW50cnktPmZpbmdlcnByaW50LCAwLCBzaXplb2YoZW50cnktPmZpbmdlcnByaW50KSk7CisKKyAgICAgICAgICAgICAgICAodm9pZCluZXRzbm1wX3Rsc19maW5nZXJwcmludF9wYXJzZSh2Yi0+dmFsLnN0cmluZywgdmItPnZhbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKikmdG1wLCAmc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cnktPmhhc2hUeXBlKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZmluZ2VycHJpbnRfbGVuID0gc2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoMCA9PSBlbnRyeS0+ZmluZ2VycHJpbnRfbGVuKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEU6CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPm1hcFR5cGUgPSBlbnRyeS0+bWFwVHlwZTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+bWFwVHlwZSA9IF9vaWQydHlwZShyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5vYmppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEE6CisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT51bmRvLT5kYXRhLCBlbnRyeS0+ZGF0YSwgc2l6ZW9mKGVudHJ5LT5kYXRhKSk7CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPmRhdGFfbGVuID0gZW50cnktPmRhdGFfbGVuOworICAgICAgICAgICAgICAgIG1lbXNldChlbnRyeS0+ZGF0YSwgMCwgc2l6ZW9mKGVudHJ5LT5kYXRhKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5kYXRhLCByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbik7CisgICAgICAgICAgICAgICAgZW50cnktPmRhdGFfbGVuID0gcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5zdG9yYWdlVHlwZSA9IGVudHJ5LT5zdG9yYWdlVHlwZTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RvcmFnZVR5cGUgPSAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5yb3dTdGF0dXMgPSBlbnRyeS0+cm93U3RhdHVzOworICAgICAgICAgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMgPSAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUyAqLworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCB2YWx1ZXMgZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSAKKyAgICAgICAgICAgIGJyZWFrOyAvKiBza2lwIGNvbnNpc3RlbmN5IGlmIHdlJ3ZlIGFscmVhZHkgZ290IGVycm9yICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogQWxsIGNvbHVtbnMgbm93IGhhdmUgdGhlaXIgZmluYWwgdmFsdWVzIHNldC4gY2hlY2sgdGhlCisgICAgICAgICAqIGludGVybmFsIGNvbnNpc3RlbmN5IG9mIGVhY2ggcm93LgorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgIT0gLTEpCisgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgIC8qIGFscmVhZHkgY2hlY2tlZCAqLworCisgICAgICAgICAgICAvKiogYXNzdW1lIGNvbnNpc3RlbmN5ICovCisgICAgICAgICAgICBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDE7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBwZXIgbWliLCBjYW4ndCBoYXZlIGVtcHR5IGZpbmdlcnByaW50IGFuZCBtdXN0CisgICAgICAgICAgICAgKiBoYXZlIGRhdGEgaWYgaW5kaWNhdGVkIGJ5IG1hcCB0eXBlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoMCA9PSBlbnRyeS0+ZmluZ2VycHJpbnRfbGVuKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6aW5jb25zaXN0ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmluZ2VycHJpbnQgbXVzdCBub3QgYmUgZW1wdHlcbiIpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgoVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQgPT0gZW50cnktPm1hcFR5cGUpICYmCisgICAgICAgICAgICAgICAgICAgICAoMCA9PSBlbnRyeS0+ZGF0YV9sZW4pKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6aW5jb25zaXN0ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBzcGVjaWZ5IERhdGEgZm9yIENlcnRTcGVjaWZpZWQgaWRlbnRpdHlcbiIpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoUlNfSVNfQUNUSVZFKGVudHJ5LT5yb3dTdGF0dXMpKSAmJgorICAgICAgICAgICAgICAgICgoIWVudHJ5LT51bmRvLT5yZXFbQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVNdKSB8fAorICAgICAgICAgICAgICAgICAoUlNfSVNfQUNUSVZFKGVudHJ5LT51bmRvLT5yb3dTdGF0dXMpKSkpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHBlciBtaWIsIGNhbid0IG1vZGlmeSB0aGVzZSB3aGlsZSByb3cgYWN0aXZlCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgY2hhciBfY29sc1szXSA9IHsgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEUsIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQSB9OworICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgMzsgKytpICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LT51bmRvLT5yZXFbaV0pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6aW5jb25zaXN0ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IG1vZGlmeSByb3cgJWQgd2hpbGUgYWN0aXZlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29sc1tpXSkpOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0PSBlbnRyeS0+dW5kby0+cmVxW2ldOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKFJTX0lTX0dPSU5HX0FDVElWRShlbnRyeS0+cm93U3RhdHVzKSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogaWYgZ29pbmcgYWN0aXZlLCBpbmNvbnNpc3RlbmN5IGlzIGZhdGFsCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChlbnRyeS0+dW5kby0+cmVxW0NPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGVudHJ5LT51bmRvLT5yZXFbQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVNdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoUlNfREVTVFJPWSA9PSBlbnRyeS0+cm93U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBjYW4ndCBkZXN0cm95IGFjdGl2ZSByb3cKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoUlNfSVNfQUNUSVZFKGVudHJ5LT51bmRvLT5yb3dTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmluY29uc2lzdGVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBkZXN0cm95IGFjdGl2ZSByb3dcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoZW50cnktPnVuZG8tPnJlcVtDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVU10pOworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGVudHJ5LT51bmRvLT5yZXFbQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVNdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc2lzdGVuY3kgZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfQUNUSU9OICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgVU5ETyAjIyMjIworICAgICAqCisgICAgICogICBVTkRPIGlzIGZvciBjbGVhbmluZyB1cCBhbnkgZmFpbGVkIHJlcXVlc3RzIHRoYXQgd2VudCB0aHJvdWdoIHRoZQorICAgICAqIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICBpbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBza2lwIG5ld2x5IGNyZWF0ZWQgcm93cywgYXMgd2UncmUgZ29pbmcgdG8gZGVsZXRlCisgICAgICAgICAgICAgKiB0aGVtIGJlbG93IGFueXdheXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSBlbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHJlc3RvcmUgdmFsdWVzCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN3aXRjaCAoaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQ6CisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5maW5nZXJwcmludCwgZW50cnktPnVuZG8tPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgZW50cnktPmZpbmdlcnByaW50X2xlbiA9IGVudHJ5LT51bmRvLT5maW5nZXJwcmludF9sZW47CisgICAgICAgICAgICAgICAgZW50cnktPmhhc2hUeXBlID0gZW50cnktPnVuZG8tPmhhc2hUeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFOgorICAgICAgICAgICAgICAgIGVudHJ5LT5tYXBUeXBlID0gZW50cnktPnVuZG8tPm1hcFR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQToKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPmRhdGEsIGVudHJ5LT51bmRvLT5kYXRhLCBzaXplb2YoZW50cnktPmRhdGEpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZGF0YV9sZW4gPSBlbnRyeS0+dW5kby0+ZGF0YV9sZW47CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgZW50cnktPnN0b3JhZ2VUeXBlID0gZW50cnktPnVuZG8tPnN0b3JhZ2VUeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgZW50cnktPnJvd1N0YXR1cyA9IGVudHJ5LT51bmRvLT5yb3dTdGF0dXM7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiByZWxlYXNlIHVuZG8gZGF0YQorICAgICAgICAgKiBvciByZW1vdmUgYW55IG5ld2x5IGNyZWF0ZWQgcm93cworICAgICAgICAgKi8KKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoIWVudHJ5IHx8ICFlbnRyeS0+dW5kbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KHJlcXVlc3QsIHJvdyk7CisKKyAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgdGxzdG1DZXJ0VG9UU05UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZSwgcm93KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8oZW50cnkpOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9VTkRPICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENPTU1JVCAjIyMjIworICAgICAqCisgICAgICogICBDT01NSVQgaXMgdGhlIGZpbmFsIHN1Y2Nlc3Mgc3RhdGUsIHdoZW4gYWxsIGNoYW5nZXMgYXJlIGZpbmFsaXplZC4KKyAgICAgKiBUaGVyZSBpcyBub3QgcmVjb3Zlcnkgc3RhdGUgc2hvdWxkIHNvbWV0aGluZyBmYWlsZSBoZXJlLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIGluZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICgoUlNfTk9UUkVBRFkgPT0gZW50cnktPnJvd1N0YXR1cykgJiYgZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpCisgICAgICAgICAgICAgICAgZW50cnktPnJvd1N0YXR1cyA9IFJTX05PVElOU0VSVklDRTsKKyAgICAgICAgICAgIGVsc2UgaWYgKChSU19OT1RJTlNFUlZJQ0UgPT0gZW50cnktPnJvd1N0YXR1cykgJiYKKyAgICAgICAgICAgICAgICAgICAgICgwID09IGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+cm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisKKyAgICAgICAgICAgIC8qKiByZWxlYXNlIHVuZG8gZGF0YSBmb3IgcmVxdWVzdHMgd2l0aCBubyByb3dzdGF0dXMgKi8KKyAgICAgICAgICAgIGlmIChlbnRyeS0+dW5kbyAmJiAhZW50cnktPnVuZG8tPnJlcVtDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVU10pIHsKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8oZW50cnkpOworICAgICAgICAgICAgICAgIGlmICgoMCA9PSBlbnRyeS0+bWFwX2ZsYWdzKSAmJiAoZW50cnktPnJvd1N0YXR1cyA9PSBSU19BQ1RJVkUpKQorICAgICAgICAgICAgICAgICAgICBfY2VydF9tYXBfYWRkKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoMCAhPSBlbnRyeS0+bWFwX2ZsYWdzKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChlbnRyeS0+cm93U3RhdHVzID09IFJTX0RFU1RST1kpKQorICAgICAgICAgICAgICAgICAgICBfY2VydF9tYXBfcmVtb3ZlKGVudHJ5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChpbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbnRyeS0+cm93U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKKyAgICAgICAgICAgICAgICAgICAgLyoqIEZhbGwtdGhyb3VnaCAqLworICAgICAgICAgICAgICAgIGNhc2UgUlNfQUNUSVZFOgorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBSU19BQ1RJVkU7CisgICAgICAgICAgICAgICAgICAgIGlmICgwID09IGVudHJ5LT5tYXBfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBfY2VydF9tYXBfYWRkKGVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CisgICAgICAgICAgICAgICAgICAgIC8qKiBGYWxsLXRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICBjYXNlIFJTX05PVElOU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgLyoqIHNpbXBseSBzZXQgc3RhdHVzIGJhc2VkIG9uIGNvbnNpc3RlbmN5ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gZW50cnktPm1hcF9mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIF9jZXJ0X21hcF9yZW1vdmUoZW50cnkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUlNfREVTVFJPWToKKyAgICAgICAgICAgICAgICAgICAgLyoqIHJlbW92ZSBmcm9tIGNlcnQgbWFwICovCisgICAgICAgICAgICAgICAgICAgIGlmICgwICE9IGVudHJ5LT5tYXBfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBfY2VydF9tYXBfcmVtb3ZlKGVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3cocmVxdWVzdCwgcm93KTsKKyAgICAgICAgICAgICAgICAgICAgdGxzdG1DZXJ0VG9UU05UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZSwgcm93KTsKKyAgICAgICAgICAgICAgICAgICAgcm93ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiogcmVsZWFzZSB1bmRvIGRhdGEgKi8KKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8oZW50cnkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTICovCisKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICBpZiAoUlNfQUNUSVZFID09IGVudHJ5LT5yb3dTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIF9jZXJ0X21hcF90d2Vha19zdG9yYWdlKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFICovCisKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVDoKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFOgorICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEE6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICAvKiogdXBkYXRlIGxhc3QgY2hhbmdlZCAqLworICAgICAgICBfbGFzdF9jaGFuZ2VkID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9DT01NSVQgKi8KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIChyZXFpbmZvLT5tb2RlKSAqLworCisgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIGludAorX2NvdW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgdmFsOworCisgICAgaWYgKE1PREVfR0VUICE9IHJlcWluZm8tPm1vZGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJhZCBtb2RlIGluIFJPIGhhbmRsZXIiKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBpZiAoTlVMTCA9PSBfdGFibGUtPmNvbnRhaW5lcikKKyAgICAgICAgdmFsID0gMDsKKyAgICBlbHNlCisgICAgICAgIHZhbCA9IENPTlRBSU5FUl9TSVpFKF90YWJsZS0+Y29udGFpbmVyKTsKKworICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fR0FVR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJnZhbCwgc2l6ZW9mKHZhbCkpOworICAgCisgICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOworICAgIAorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgdm9pZAorX2NlcnRfbWFwX2FkZChjZXJ0VG9UU05fZW50cnkgKmVudHJ5KQoreworICAgIG5ldHNubXBfY2VydF9tYXAgKm1hcDsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTptYXA6YWRkIiwgInByaSAlbGQsIGZwICVzXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT50bHN0bUNlcnRUb1RTTklELCBlbnRyeS0+ZmluZ2VycHJpbnQpKTsKKworICAgIG1hcCA9IG5ldHNubXBfY2VydF9tYXBfYWxsb2MoZW50cnktPmZpbmdlcnByaW50LCBOVUxMKTsKKyAgICBpZiAoTlVMTCA9PSBtYXApCisgICAgICAgIHJldHVybjsKKworICAgIG1hcC0+cHJpb3JpdHkgPSBlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRDsKKyAgICBtYXAtPm1hcFR5cGUgPSBlbnRyeS0+bWFwVHlwZTsKKyAgICBpZiAoZW50cnktPmRhdGEpCisgICAgICAgIG1hcC0+ZGF0YSA9IHN0cmR1cChlbnRyeS0+ZGF0YSk7CisgICAgbWFwLT5oYXNoVHlwZSA9IGVudHJ5LT5oYXNoVHlwZTsKKworICAgIG1hcC0+ZmxhZ3MgPSBOU0NNX0ZST01fTUlCOworICAgIGlmIChlbnRyeS0+c3RvcmFnZVR5cGUgPT0gU1RfTk9OVk9MQVRJTEUpCisgICAgICAgIG1hcC0+ZmxhZ3MgfD0gTlNDTV9OT05WT0xBVElMRTsKKworICAgIGlmIChuZXRzbm1wX2NlcnRfbWFwX2FkZChtYXApICE9IDApCisgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShtYXApOworfQorCitzdGF0aWMgdm9pZAorX2NlcnRfbWFwX3R3ZWFrX3N0b3JhZ2UoY2VydFRvVFNOX2VudHJ5ICplbnRyeSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbWFwczsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICptYXAsIGluZGV4OworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOm1hcDp0d2VhayIsICJwcmkgJWxkLCBzdCAlZFxuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRCwgZW50cnktPnN0b3JhZ2VUeXBlKSk7CisKKyAgICAvKiogZ2V0IGN1cnJlbnQgYWN0aXZlIG1hcHMgKi8KKyAgICBtYXBzID0gbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXIoKTsKKyAgICBpZiAoTlVMTCA9PSBtYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBpbmRleC5wcmlvcml0eSA9IGVudHJ5LT50bHN0bUNlcnRUb1RTTklEOworICAgIG1hcCA9IENPTlRBSU5FUl9GSU5EKG1hcHMsICZpbmRleCk7CisgICAgaWYgKE5VTEwgPT0gbWFwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOm1hcDp0d2VhayIsICJjb3VsZG4ndCBmaW5kIG1hcCFcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlbnRyeS0+c3RvcmFnZVR5cGUgPT0gU1RfTk9OVk9MQVRJTEUpCisgICAgICAgIG1hcC0+ZmxhZ3MgfD0gTlNDTV9OT05WT0xBVElMRTsKKyAgICBlbHNlCisgICAgICAgIG1hcC0+ZmxhZ3MgJj0gfk5TQ01fTk9OVk9MQVRJTEU7Cit9CisKK3N0YXRpYyB2b2lkCitfY2VydF9tYXBfcmVtb3ZlKGNlcnRUb1RTTl9lbnRyeSAqZW50cnkpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKm1hcHM7CisgICAgbmV0c25tcF9jZXJ0X21hcCBtYXA7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6bWFwOnJlbW92ZSIsICJwcmkgJWxkLCBmcCAlc1xuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRCwgZW50cnktPmZpbmdlcnByaW50KSk7CisKKyAgICAvKiogZ2V0IGN1cnJlbnQgYWN0aXZlIG1hcHMgKi8KKyAgICBtYXBzID0gbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXIoKTsKKyAgICBpZiAoTlVMTCA9PSBtYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAucHJpb3JpdHkgPSBlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRDsKKyAgICBtYXAuZmluZ2VycHJpbnQgPSBlbnRyeS0+ZmluZ2VycHJpbnQ7CisKKyAgICBpZiAoQ09OVEFJTkVSX1JFTU9WRShtYXBzLCAmbWFwKSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgcmVtb3ZlIGNlcnRpZmljYXRlIG1hcCIpOworICAgIH0KKyAgICBlbnRyeS0+bWFwX2ZsYWdzID0gMDsKK30KKworc3RhdGljIG5ldHNubXBfdGRhdGFfcm93ICoKK19lbnRyeV9mcm9tX21hcChuZXRzbm1wX2NlcnRfbWFwICAqbWFwKQoreworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgY2VydFRvVFNOX2VudHJ5ICAgKmVudHJ5OworCisgICAgcm93ID0gdGxzdG1DZXJ0VG9UU05UYWJsZV9jcmVhdGVFbnRyeShOVUxMLCBtYXAtPnByaW9yaXR5KTsKKyAgICBpZiAoTlVMTCA9PSByb3cpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNhbiBjcmVhdGUgdGxzdG1DZXJ0VG9UU04gcm93IGVudHJ5XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgaWYgKG1hcC0+ZmxhZ3MgJiBOU0NNX0ZST01fQ09ORklHKQorICAgICAgICBlbnRyeS0+c3RvcmFnZVR5cGUgPSBTVF9QRVJNQU5FTlQ7CisgICAgZWxzZSBpZiAoISAobWFwLT5mbGFncyAmIE5TQ01fTk9OVk9MQVRJTEUpKQorICAgICAgICBlbnRyeS0+c3RvcmFnZVR5cGUgPSBTVF9WT0xBVElMRTsKKyAgICBlbnRyeS0+bWFwX2ZsYWdzID0gbWFwLT5mbGFnczsKKworICAgIGVudHJ5LT5maW5nZXJwcmludF9sZW4gPSBzdHJsZW4obWFwLT5maW5nZXJwcmludCk7CisgICAgaWYgKGVudHJ5LT5maW5nZXJwcmludF9sZW4gPiBzaXplb2YoZW50cnktPmZpbmdlcnByaW50KSkKKyAgICAgICAgZW50cnktPmZpbmdlcnByaW50X2xlbiA9IHNpemVvZihlbnRyeS0+ZmluZ2VycHJpbnQpIC0gMTsKKyAgICBtZW1jcHkoZW50cnktPmZpbmdlcnByaW50LCBtYXAtPmZpbmdlcnByaW50LCBlbnRyeS0+ZmluZ2VycHJpbnRfbGVuKTsKKyAgICBlbnRyeS0+ZmluZ2VycHJpbnRbc2l6ZW9mKGVudHJ5LT5maW5nZXJwcmludCkgLSAxXSA9IDA7CisgICAgZW50cnktPmhhc2hUeXBlID0gbWFwLT5oYXNoVHlwZTsKKyAgICAKKyAgICBpZiAobWFwLT5kYXRhKSB7CisgICAgICAgIGVudHJ5LT5kYXRhX2xlbiA9IHN0cmxlbihtYXAtPmRhdGEpOworICAgICAgICBpZiAoZW50cnktPmRhdGFfbGVuKSB7CisgICAgICAgICAgICBpZiAoZW50cnktPmRhdGFfbGVuID4gc2l6ZW9mKGVudHJ5LT5kYXRhKSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZGF0YV9sZW4gPSBzaXplb2YoZW50cnktPmRhdGEpIC0gMTsKKyAgICAgICAgICAgIG1lbWNweShlbnRyeS0+ZGF0YSwgbWFwLT5kYXRhLCBlbnRyeS0+ZGF0YV9sZW4pOworICAgICAgICAgICAgZW50cnktPmRhdGFbc2l6ZW9mKGVudHJ5LT5kYXRhKSAtIDFdID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbnRyeS0+bWFwVHlwZSA9IG1hcC0+bWFwVHlwZTsKKworICAgIHJldHVybiByb3c7Cit9CisKK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCBuZXRzbm1wX3RkYXRhICp0YWJsZSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbWFwczsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqbWFwX2l0cjsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICAqbWFwOworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgY2VydFRvVFNOX2VudHJ5ICAgKmVudHJ5OworICAgIGludCAgICAgICAgICAgICAgICByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpjYWNoZTpsb2FkIiwgImNhbGxlZCwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKKworICAgIC8qKiBnZXQgY3VycmVudCBhY3RpdmUgbWFwcyAqLworICAgIG1hcHMgPSBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IG1hcHMpCisgICAgICAgIHJldHVybiAwOworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmNhY2hlOmxvYWQiLCAibWFwcyAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShtYXBzKSkpOworCisgICAgbWFwX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihtYXBzKTsKKyAgICBpZiAoTlVMTCA9PSBtYXBfaXRyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmNhY2hlOmxvYWQiLAorICAgICAgICAgICAgICAgICAgICAiY2FudCBnZXQgbWFwIGl0ZXJhdG9yXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGluc2VydCByb3dzIGZvciBhY3RpdmUgbWFwcyBpbnRvIHRibCBjb250YWluZXIKKyAgICAgKi8KKyAgICBtYXAgPSBJVEVSQVRPUl9GSVJTVChtYXBfaXRyKTsKKyAgICBmb3IoIDsgbWFwOyBtYXAgPSBJVEVSQVRPUl9ORVhUKG1hcF9pdHIpKSB7CisKKyAgICAgICAgcm93ID0gX2VudHJ5X2Zyb21fbWFwKG1hcCk7CisgICAgICAgIGlmIChOVUxMID09IHJvdykgeworICAgICAgICAgICAgcmMgPS0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5Kilyb3ctPmRhdGE7CisgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBSU19BQ1RJVkU7CisKKyAgICAgICAgaWYgKG5ldHNubXBfdGRhdGFfYWRkX3Jvdyh0YWJsZSwgcm93KSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHRsc3RtQ2VydFRvVFNOVGFibGVfcmVtb3ZlRW50cnkoTlVMTCwgcm93KTsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKG1hcF9pdHIpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6Y2FjaGU6bG9hZCIsICJkb25lLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqY2FjaGUsIG5ldHNubXBfdGRhdGEgKnRhYmxlKQoreworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgbmV0c25tcF9pdGVyYXRvciAgICp0YmxfaXRyOworICAgIGNlcnRUb1RTTl9lbnRyeSAgICplbnRyeTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmNhY2hlOmZyZWUiLCAiY2FsbGVkLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworCisgICAgLyoqIGluc2VydCByb3dzIGZvciBhY3RpdmUgbWFwcyBpbnRvIHRibCBjb250YWluZXIgKi8KKyAgICB0YmxfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKHRhYmxlLT5jb250YWluZXIpOworICAgIGlmIChOVUxMID09IHRibF9pdHIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6Y2FjaGU6ZnJlZSIsCisgICAgICAgICAgICAgICAgICAgICJjYW50IGdldCBtYXAgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJvdyA9IElURVJBVE9SX0ZJUlNUKHRibF9pdHIpOworICAgIGZvciggOyByb3c7IHJvdyA9IElURVJBVE9SX05FWFQodGJsX2l0cikpIHsKKyAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtb3ZlIGFsbCBhY3RpdmUgcm93cyAodGhleSBhcmUgaW4gdGhlIG1hcHMgY29udGFpbmVyIGtlcHQKKyAgICAgICAgICogYnkgdGhlIGxpYnJhcnkpLiBLZWVwIGluYWN0aXZlIG9uZXMgZm9yIG5leHQgdGltZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChlbnRyeS0+cm93U3RhdHVzID09IFJTX0FDVElWRSkgeworICAgICAgICAgICAgdGxzdG1DZXJ0VG9UU05UYWJsZV9yZW1vdmVFbnRyeShOVUxMLCByb3cpOworICAgICAgICAgICAgSVRFUkFUT1JfUkVNT1ZFKHRibF9pdHIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRSh0YmxfaXRyKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmNhY2hlOmZyZWUiLCAiZG9uZSwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKK30KKworc3RhdGljIHZvaWQKK19wYXJzZV9taWJfbWFwcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3sKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIGNlcnRUb1RTTl9lbnRyeSAgICplbnRyeTsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICptYXAgPSBuZXRzbm1wX2NlcnRUb1RTTl9wYXJzZV9jb21tb24oJmxpbmUpOworCisgICAgaWYgKE5VTEwgPT0gbGluZSkgeworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiaW5jb21wbGV0ZSBsaW5lIik7CisgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShtYXApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbWFwLT5mbGFncyA9IE5TQ01fRlJPTV9NSUIgfCBOU0NNX05PTlZPTEFUSUxFOworICAgIHJvdyA9IF9lbnRyeV9mcm9tX21hcChtYXApOworICAgIGlmIChOVUxMID09IHJvdykgeworICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobWFwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkqKXJvdy0+ZGF0YTsKKyAgICBlbnRyeS0+cm93U3RhdHVzID0gYXRvaShsaW5lKTsKKyAgICBlbnRyeS0+c3RvcmFnZVR5cGUgPSBTVF9OT05WT0xBVElMRTsKKworICAgIC8qCisgICAgICogaWYgcm93IGlzIGFjdGl2ZSwgYWRkIGl0IHRvIHRoZSBtYXBzIGNvbnRhaW5lciBzbyBpdCBpcyBhdmFpbGFibGUKKyAgICAgKiBmb3IgdXNlLiBEbyBub3QgYWRkIGl0IHRvIHRoZSB0YWJsZSwgc2luY2UgaXQgd2lsbCBiZSBhZGRlZAorICAgICAqIGR1cmluZyBjYWNoZV9sb2FkLgorICAgICAqLworICAgIGlmIChSU19BQ1RJVkUgPT0gZW50cnktPnJvd1N0YXR1cykgeworICAgICAgICBpZiAobmV0c25tcF9jZXJ0X21hcF9hZGQobWFwKSAhPSAwKQorICAgICAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG1hcCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobWFwKTsKKyAgICAgICAgaWYgKG5ldHNubXBfdGRhdGFfYWRkX3JvdyhfdGFibGUsIHJvdykgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICAgICAgdGxzdG1DZXJ0VG9UU05UYWJsZV9yZW1vdmVFbnRyeShOVUxMLCByb3cpOworICAgIH0KK30KKworc3RhdGljIGludAorX3NhdmVfZW50cnkoY2VydFRvVFNOX2VudHJ5ICplbnRyeSwgdm9pZCAqYXBwX3R5cGUpCit7CisgICAgY2hhciBidWZbU05NUF9NQVhCVUZfU01BTExdLCAqaGFzaFR5cGUsICptYXBUeXBlLCAqZGF0YSA9IE5VTEw7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGhhc2hUeXBlID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9oYXNoX2FsZyIsIGVudHJ5LT5oYXNoVHlwZSk7CisgICAgaWYgKE5VTEwgPT0gaGFzaFR5cGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNraXBwaW5nIGVudHJ5IHVua25vd24gaGFzaCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICBlbnRyeS0+aGFzaFR5cGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKyAgICBtYXBUeXBlID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9tYXBfdHlwZSIsIGVudHJ5LT5tYXBUeXBlKTsKKyAgICBpZiAoVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQgPT0gZW50cnktPm1hcFR5cGUpCisgICAgICAgIGRhdGEgPSBlbnRyeS0+ZGF0YTsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgJWxkIC0tJXMgJXMgLS0lcyAlcyAlZCIsCisgICAgICAgICAgICAgTUFQX01JQl9DT05GSUdfVE9LRU4sIGVudHJ5LT50bHN0bUNlcnRUb1RTTklELCBoYXNoVHlwZSwKKyAgICAgICAgICAgICBlbnRyeS0+ZmluZ2VycHJpbnQsIG1hcFR5cGUsIGRhdGEgPyBkYXRhIDogIiIsIGVudHJ5LT5yb3dTdGF0dXMpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6c2F2ZSIsICJzYXZpbmcgJyVzJ1xuIiwgYnVmKSk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoYXBwX3R5cGUsIGJ1Zik7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIGludAorX3NhdmVfbWFwKG5ldHNubXBfY2VydF9tYXAgKm1hcCwgaW50IHJvd19zdGF0dXMsIHZvaWQgKmFwcF90eXBlKQoreworICAgIGNoYXIgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmhhc2hUeXBlLCAqbWFwVHlwZSwgKmRhdGEgPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gbWFwKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgLyoqIGRvbid0IHN0b3JlIHZhbHVlcyBmcm9tIGNvbmYgZmlsZXMgKi8KKyAgICBpZiAoISAobWFwLT5mbGFncyAmIE5TQ01fTk9OVk9MQVRJTEUpKSB7CisgICAgICAgIERFQlVHTVNHVCgoInRsc3RtQ2VydFRvVFNOVGFibGU6c2F2ZSIsIAorICAgICAgICAgICAgICAgICAgICJza2lwcGluZyBSTy9wZXJtYW5lbnQvdm9sYXRpbGUgcm93XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIGhhc2hUeXBlID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9oYXNoX2FsZyIsIG1hcC0+aGFzaFR5cGUpOworICAgIGlmIChOVUxMID09IGhhc2hUeXBlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJza2lwcGluZyBlbnRyeSB1bmtub3duIGhhc2ggdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgbWFwLT5oYXNoVHlwZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorICAgIG1hcFR5cGUgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X21hcF90eXBlIiwgbWFwLT5tYXBUeXBlKTsKKyAgICBpZiAoVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQgPT0gbWFwLT5tYXBUeXBlKQorICAgICAgICBkYXRhID0gKGNoYXIqKW1hcC0+ZGF0YTsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgJWQgLS0lcyAlcyAtLSVzICVzICVkIiwKKyAgICAgICAgICAgICBNQVBfTUlCX0NPTkZJR19UT0tFTiwgbWFwLT5wcmlvcml0eSwgaGFzaFR5cGUsIG1hcC0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgbWFwVHlwZSwgZGF0YSA/IGRhdGEgOiAiIiwgcm93X3N0YXR1cyk7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpzYXZlIiwgInNhdmluZyAnJXMnXG4iLCBidWYpKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZShhcHBfdHlwZSwgYnVmKTsKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgaW50Citfc2F2ZV9tYXBzKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCit7CisgICAgY2hhciAgICAgICAgICAgIHNlcFtdID0KKyAgICAgICAgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiOworICAgIGNoYXIgICAgICAgICAgICBidWZbXSA9CisgICAgICAgICIjXG4iICIjIGNlcnRpZmljYXRlIHNlY05hbWUgbWFwcGluZyBwZXJzaXN0ZW50IGRhdGFcbiIgIiMiOworICAgIGNoYXIgICAgICAgICAgICp0eXBlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbWFwcyA9IG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyKCk7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqdGJsX2l0ciwgKm1hcF9pdHI7CisgICAgbmV0c25tcF9jZXJ0X21hcCAgKm1hcDsKKyAgICBjZXJ0VG9UU05fZW50cnkgICAqZW50cnk7CisKKyAgICBpZiAoKE5VTEwgPT0gbWFwcykgfHwgKChDT05UQUlORVJfU0laRShtYXBzKSA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKENPTlRBSU5FUl9TSVpFKF90YWJsZS0+Y29udGFpbmVyKSA9PSAwKSkpCisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIGJ1Zik7CisKKyAgICAvKgorICAgICAqIHNhdmUgYWN0aXZlIHJvd3MgZnJvbSBtYXBzCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gbWFwcykgeworICAgICAgICBtYXBfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKG1hcHMpOworICAgICAgICBpZiAoTlVMTCA9PSBtYXBfaXRyKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpzYXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW50IGdldCBtYXAgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgICAgIG1hcCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFwID0gSVRFUkFUT1JfRklSU1QobWFwX2l0cik7CisKKyAgICAgICAgZm9yKCA7IG1hcDsgbWFwID0gSVRFUkFUT1JfTkVYVChtYXBfaXRyKSkgeworICAgICAgICAgICAgLyoqIGRvbid0IHN0b3JlIGNvbmZpZyByb3dzICovCisgICAgICAgICAgICBpZiAobWFwLT5mbGFncyAmIE5TQ01fRlJPTV9DT05GSUcpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBfc2F2ZV9tYXAobWFwLCBSU19BQ1RJVkUsIHR5cGUpOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UobWFwX2l0cik7CisKKyAgICAvKgorICAgICAqIHNhdmUgaW5hY3RpdmUgcm93cyBmcm9tIG1pYgorICAgICAqLworICAgIHRibF9pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoX3RhYmxlLT5jb250YWluZXIpOworICAgIGlmIChOVUxMID09IHRibF9pdHIpCisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOnNhdmUiLCAiY2FudCBnZXQgdGFibGUgaXRlcmF0b3JcbiIpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcm93ID0gSVRFUkFUT1JfRklSU1QodGJsX2l0cik7CisgICAgICAgIGZvciggOyByb3c7IHJvdyA9IElURVJBVE9SX05FWFQodGJsX2l0cikpIHsKKyAgICAgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2tpcCBhbGwgYWN0aXZlIHJvd3MgKHNob3VsZCBiZSBpbiBtYXBzIGFuZCB0aHVzIHNhdmVkCisgICAgICAgICAgICAgKiBhYm92ZSkgYW5kIHZvbGF0aWxlIHJvd3MuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgoZW50cnktPnJvd1N0YXR1cyA9PSBSU19BQ1RJVkUpIHx8CisgICAgICAgICAgICAgICAgKGVudHJ5LT5zdG9yYWdlVHlwZSAhPSBTVF9OT05WT0xBVElMRSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIF9zYXZlX2VudHJ5KGVudHJ5LCB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBJVEVSQVRPUl9SRUxFQVNFKHRibF9pdHIpOworICAgIH0KKworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgIlxuIik7CisKKyAgICAvKgorICAgICAqIG5ldmVyIGZhaWxzIAorICAgICAqLworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKworc3RhdGljIGNvbnN0IG9pZCBfdHNubV9iYXNlW10gPSB7IFNOTVBfVExTX1RNX0JBU0UsIDEsIDEgfTsKK3N0YXRpYyBjb25zdCBpbnQgX3Rzbm1fYmFzZV9sZW4gPSBzaXplb2YoX3Rzbm1fYmFzZSk7CisKK3N0YXRpYyBvaWQKK19vaWQydHlwZShvaWQgKnZhbCwgaW50IHZhbF9sZW4pCit7CisgICAgbmV0c25tcF9hc3NlcnQodmFsKTsKKworICAgIGlmICh2YWxfbGVuICE9IChfdHNubV9iYXNlX2xlbiArIHNpemVvZihvaWQpKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKG1lbWNtcChfdHNubV9iYXNlLHZhbCxfdHNubV9iYXNlX2xlbikgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0yOworCisgICAgaWYgKCh2YWxbT0lEX0xFTkdUSChfdHNubV9iYXNlKV0gPiBUU05NX3Rsc3RtQ2VydF9NQVgpIHx8CisgICAgICAgICgwID09IHZhbFtPSURfTEVOR1RIKF90c25tX2Jhc2UpXSkpCisgICAgICAgIHJldHVybiAtMzsKKworICAgIHJldHVybiB2YWxbT0lEX0xFTkdUSChfdHNubV9iYXNlKV07Cit9CisKKyNpZiAwCitzdGF0aWMgaW50CitfdHlwZTJvaWQoaW50IHR5cGUsIG9pZCAqdmFsLCBpbnQgKnZhbF9sZW4pCit7CisgICAgbmV0c25tcF9hc3NlcnQoIHZhbCAmJiB2YWxfbGVuICk7CisKKyAgICBpZiAoKnZhbF9sZW4gPCBfdHNubV9iYXNlX2xlbiArIHNpemVvZihvaWQpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtZW1jcHkodmFsLCBfdHNubV9iYXNlLCBfdHNubV9iYXNlX2xlbiArIHNpemVvZihvaWQpKTsKKyAgICB2YWxbX3Rzbm1fYmFzZV9sZW4gKyBzaXplb2Yob2lkKV0gPSB0eXBlOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiODA5NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICQKKyAqLworI2lmbmRlZiBTTk1QVExTVE1DRVJUVE9UU05fVEFCTEVfSAorI2RlZmluZSBTTk1QVExTVE1DRVJUVE9UU05fVEFCTEVfSAorCisjZGVmaW5lIFNOTVBfVExTX1RNX0NFUlRfQ09VTlQgICBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCAxCisjZGVmaW5lIFNOTVBfVExTX1RNX0NFUlRfQ0hBTkdFRCBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCAyCisjZGVmaW5lIFNOTVBfVExTX1RNX0NFUlRfVEFCTEUgICBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCAzCisKKy8qCisgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCisgKi8KK3ZvaWQgICAgICAgICAgICBpbml0X3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIGluaXRfc25tcFRsc3RtQ2VydFRvVFNOVGFibGVfY29udGV4dChjb25zdCBjaGFyICopOworCisvKgorICogaW5kZXggZGVmaW5pdGlvbnMgZm9yIHRhYmxlIHRsc3RtQ2VydFRvVFNOVGFibGUgCisgKi8KKworLyoKKyAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIHRsc3RtQ2VydFRvVFNOVGFibGUgCisgKi8KKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9JRCAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UICAgICAgICAgICAgICAyCisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRSAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFICAgICAgICAgICAgICA1CisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTICAgICAgICAgICAgICAgIDYKKworI2RlZmluZSBTTk1QVExTVE1DRVJUVE9UU05fVEFCTEVfTUlOX0NPTCBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UCisjZGVmaW5lIFNOTVBUTFNUTUNFUlRUT1RTTl9UQUJMRV9NQVhfQ09MIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTCisKKyNkZWZpbmUgU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UX01BWF9TSVpFICAgICAgICAgIDI1NQorI2RlZmluZSBTTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRV9NQVhfU0laRSAgICAgICAgICAgICAgMTI4CisjZGVmaW5lIFNOTVBUTFNUTUNFUlRUT1RTTl9EQVRBX01BWF9TSVpFICAgICAgICAgICAgICAgICAxMDI0CisKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTQU5SRkM4MjJOYW1lICAgICAgICAgICAgIDIKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTQU5ETlNOYW1lICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTQU5JcEFkZHJlc3MgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTQU5BbnkgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRDb21tb25OYW1lICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRfTUFYICAgICAgICAgICAgICAgICAgICAgIFRTTk1fdGxzdG1DZXJ0Q29tbW9uTmFtZQorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBUTFNUTUNFUlRUT1RTTl9UQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTRiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgU05NUFRMU1RNUEFSQU1TVEFCTEVfSAorI2RlZmluZSBTTk1QVExTVE1QQVJBTVNUQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKHRsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZSkKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVExTVE1QQVJBTVNUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNTQ0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYwpAQCAtMCwwICsxLDEyODYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICQKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjaW5jbHVkZSAidGxzdG0tbWliLmgiCisKKyNpbmNsdWRlICJzbm1wVGxzdG1QYXJhbXNUYWJsZS5oIgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRsc3RtcGFyYW1zX2ZpbmQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0bHN0bXBhcmFtc19leHRlcm5hbCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNlcnRfZmluZ2VycHJpbnRzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfZGVsZXRlX3RhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfZXh0cmFjdF90YWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX3JlbW92ZV9yb3cpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfc3RvcmFnZXR5cGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworLyoqIFhYWCAtIG1vdmUgdGhlc2UgdG8gdGFibGVfZGF0YSBoZWFkZXI/ICovCisjZGVmaW5lIEZBVEVfTkVXTFlfQ1JFQVRFRCAgICAxCisjZGVmaW5lIEZBVEVfTk9fQ0hBTkdFICAgICAgICAwCisjZGVmaW5lIEZBVEVfREVMRVRFX01FICAgICAgICAtMQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0YWJsZSBzdHJ1Y3R1cmVzCisgKgorICovCisgICAgLyoKKyAgICAgKiBzdHJ1Y3R1cmUgZm9yIHVuZG8gc3RvcmFnZSBhbmQgb3RoZXIgdmFycyBmb3Igc2V0IHByb2Nlc3NpbmcKKyAgICAgKi8KKyB0eXBlZGVmIHN0cnVjdCBzbm1wVGxzdG1QYXJhbXNUYWJsZV91bmRvX3MgeworICAgIGNoYXIgIGZhdGU7CisgICAgY2hhciAgY29waWVkOworICAgIGNoYXIgIGlzX2NvbnNpc3RlbnQ7CisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcVtTTk1QVExTVE1QQVJBTVNUQUJMRV9NQVhfQ09MVU1OICsgMV07CisgICAgLyogdW5kbyBDb2x1bW4gc3BhY2UgKi8KKyAgICBjaGFyIHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50W1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UX01BWF9TSVpFXTsKKyAgICBzaXplX3Qgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuOworICAgIGNoYXIgc25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGU7CisgICAgY2hhciBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXM7CisgfSBzbm1wVGxzdG1QYXJhbXNUYWJsZV91bmRvOworCisgICAgLyoKKyAgICAgKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeQorICAgICAqLwordHlwZWRlZiBzdHJ1Y3Qgc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnlfcyB7CisgICAgLyogSW5kZXggdmFsdWVzICovCisgICAgY2hhciBzbm1wVGFyZ2V0UGFyYW1zTmFtZVtTTk1QVEFSR0VUUEFSQU1TTkFNRV9NQVhfU0laRV07CisgICAgc2l6ZV90IHNubXBUYXJnZXRQYXJhbXNOYW1lX2xlbjsKKworICAgIC8qIENvbHVtbiB2YWx1ZXMgKi8KKyAgICBjaGFyIHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50W1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UX01BWF9TSVpFXTsKKyAgICBzaXplX3Qgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuOworICAgIGNoYXIgc25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGU7CisgICAgY2hhciBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXM7CisKKyAgICBjaGFyICAgICAgICAgICAgaGFzaFR5cGU7CisgICAgY2hhciAgICAgICAgICAgIHBhcmFtc19mbGFnczsKKworICAgIC8qIHVzZWQgZHVyaW5nIHNldCBwcm9jZXNzaW5nICovCisgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX3VuZG8gKnVuZG87Cit9IHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5OworCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgc25tcFRsc3RtUGFyYW1zVGFibGVfaGFuZGxlcjsKK3N0YXRpYyBOZXRzbm1wQ2FjaGVMb2FkIHNubXBUbHN0bVBhcmFtc1RhYmxlX2xvYWQ7CitzdGF0aWMgTmV0c25tcENhY2hlRnJlZSBzbm1wVGxzdG1QYXJhbXNUYWJsZV9mcmVlOworCitzdGF0aWMgaW50IF9jb3VudF9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpOworc3RhdGljIHZvaWQgX3Rsc3RtUGFyYW1zX2luaXRfcGVyc2lzdGVuY2Uodm9pZCk7CitzdGF0aWMgdm9pZCBfcGFyYW1zX2FkZChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnkpOworc3RhdGljIHZvaWQgX3BhcmFtc19yZW1vdmUoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5KTsKK3N0YXRpYyB2b2lkIF9wYXJhbXNfdHdlYWtfc3RvcmFnZShzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnkpOworCitzdGF0aWMgdWludDMyX3QgICAgICAgICAgICAgICAgX2xhc3RfY2hhbmdlZCA9IDA7CitzdGF0aWMgbmV0c25tcF90ZGF0YSAgICAgICAgICAqX3RhYmxlX2RhdGEgPSBOVUxMOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgc25tcFRsc3RtUGFyYW1zVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzCisgKiBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZAorICovCit2b2lkCitpbml0X3NubXBUbHN0bVBhcmFtc1RhYmxlKHZvaWQpCit7CisgICAgb2lkIHJlZ19vaWRbXSA9IHtTTk1QX1RMU19UTV9CQVNFLDIsMiwxLDZ9OworICAgIGNvbnN0IHNpemVfdCByZWdfb2lkX2xlbiAgID0gT0lEX0xFTkdUSChyZWdfb2lkKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX2NhY2hlICAgICAgICAgICAgICAgICAgICpjYWNoZTsKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICAgICp3YXRjaGVyOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6aW5pdCIsICJpbml0aWFsaXppbmcgdGFibGUgc25tcFRsc3RtUGFyYW1zVGFibGVcbiIpKTsKKworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICgic25tcFRsc3RtUGFyYW1zVGFibGUiLCBzbm1wVGxzdG1QYXJhbXNUYWJsZV9oYW5kbGVyLCByZWdfb2lkLAorICAgICAgICAgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JXUklURSk7CisKKyAgICBfdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCAic25tcFRsc3RtUGFyYW1zVGFibGUiLCAwICk7CisgICAgaWYgKE5VTEwgPT0gX3RhYmxlX2RhdGEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgdGRhdGEgdGFibGUgZm9yIHNubXBUbHN0bVBhcmFtc1RhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKFNOTVBUTFNUTVBBUkFNU1RBQkxFX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfbG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4pOworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGNhY2hlIGZvciBzbm1wVGxzdG1QYXJhbXNUYWJsZVxuIik7CisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlKF90YWJsZV9kYXRhKTsKKyAgICAgICAgX3RhYmxlX2RhdGEgPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhY2hlLT5tYWdpYyA9ICh2b2lkICopX3RhYmxlX2RhdGE7CisgICAgY2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworCisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKTsKKyAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIHRhYmxlIGluZm8gZm9yIHNubXBUbHN0bVBhcmFtc1RhYmxlXG4iKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfdGFibGUoX3RhYmxlX2RhdGEpOworICAgICAgICBfdGFibGVfZGF0YSA9IE5VTEw7CisgICAgICAgIG5ldHNubXBfY2FjaGVfZnJlZShjYWNoZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLyoKKyAgICAgKiBwb3B1bGF0ZSBpbmRleCB0eXBlcworICAgICAqLworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kZXg6IHNubXBUYXJnZXRQYXJhbXNOYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1BSSVZfSU1QTElFRF9PQ1RFVF9TVFIsICAwKTsKKworICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBTTk1QVExTVE1QQVJBTVNUQUJMRV9NSU5fQ09MVU1OOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBTTk1QVExTVE1QQVJBTVNUQUJMRV9NQVhfQ09MVU1OOworICAgIAorICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIoIHJlZywgX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8gKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSggcmVnLCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhYmxlX2NvbnRhaW5lciIpOworCisgICAgLyoKKyAgICAgKiByZWdpc3RlciBzY2FsYXJzCisgICAgICovCisgICAgcmVnX29pZFsxMF0gPSA0OworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzbm1wVGxzdG1QYXJhbXNDb3VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvdW50X2hhbmRsZXIsIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChyZWdfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBoYW5kbGVyIGZvciBzbm1wVGxzdG1QYXJhbXNDb3VudFxuIik7CisgICAgZWxzZSB7CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKHJlZyk7CisgICAgICAgIGlmIChjYWNoZSkgCisgICAgICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZShyZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbm1wVGxzdG1QYXJhbXNDb3VudCIpOworICAgIH0KKyAgICAKKyAgICByZWdfb2lkWzEwXSA9IDU7CisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICJzbm1wVGxzdG1QYXJhbXNUYWJsZUxhc3RDaGFuZ2VkIiwgTlVMTCwgcmVnX29pZCwKKyAgICAgICAgT0lEX0xFTkdUSChyZWdfb2lkKSwgSEFORExFUl9DQU5fUk9OTFkpOworICAgIHdhdGNoZXIgPSBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oKHZvaWQqKSZfbGFzdF9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9sYXN0X2NoYW5nZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1RJTUVUSUNLUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBVENIRVJfRklYRURfU0laRSk7CisgICAgaWYgKChOVUxMID09IHJlZykgfHwgKE5VTEwgPT0gd2F0Y2hlcikpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIGhhbmRsZXIgZm9yIHNubXBUbHN0bVBhcmFtc1RhYmxlTGFzdENoYW5nZWRcbiIpOworICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIocmVnLCB3YXRjaGVyKTsKKworICAgIC8qCisgICAgICogSW5pdGlhbGlzZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGhlcmUKKyAgICAgKi8KKyAgICBfdGxzdG1QYXJhbXNfaW5pdF9wZXJzaXN0ZW5jZSgpOworfQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGFibGUgc3RydWN0dXJlcworICoKKyAqLworLyogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgKi8KK25ldHNubXBfdGRhdGFfcm93ICoKK3NubXBUbHN0bVBhcmFtc1RhYmxlX2NyZWF0ZUVudHJ5KG5ldHNubXBfdGRhdGEgKnRhYmxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBzbm1wVGFyZ2V0UGFyYW1zTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzbm1wVGFyZ2V0UGFyYW1zTmFtZV9sZW4gKSB7CisgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5OworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisKKyAgICBpZiAoKE5VTEwgPT0gc25tcFRhcmdldFBhcmFtc05hbWUpIHx8IChzbm1wVGFyZ2V0UGFyYW1zTmFtZV9sZW4gPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcm93ID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfcm93KCk7CisgICAgaWYgKCFyb3cpIHsKKyAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJvdy0+ZGF0YSA9IGVudHJ5OworCisgICAgREVCVUdNU0dUKCgidGxzdG1QYXJhbXNUYWJsZTplbnRyeTpjcmVhdGUiLCAiZW50cnkgJXAgLyByb3cgJXBcbiIsCisgICAgICAgICAgICAgICBlbnRyeSwgcm93KSk7CisKKyAgICBERUJVR0lGKCJzbm1wVGxzdG1QYXJhbVRhYmxlOmVudHJ5OmNyZWF0ZSIpIHsKKyAgICAgICAgY2hhciBuYW1lW3NpemVvZihlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUpKzFdOworICAgICAgICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyIsIHNubXBUYXJnZXRQYXJhbXNOYW1lKTsKKyAgICAgICAgREVCVUdNU0dUKCgidGxzdG1QYXJhbXNUYWJsZTplbnRyeTpjcmVhdGUiLAorICAgICAgICAgICAgICAgICAgICJlbnRyeSAlcyAlcCAvIHJvdyAlcFxuIiwKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBlbnRyeSwgcm93KSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBwb3B1bGF0ZSBpbmRleAorICAgICAqLworICAgIG1lbWNweShlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUsIHNubXBUYXJnZXRQYXJhbXNOYW1lLAorICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1zTmFtZV9sZW4pOworICAgIGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZV9sZW4gPSBzbm1wVGFyZ2V0UGFyYW1zTmFtZV9sZW47CisgICAgbmV0c25tcF90ZGF0YV9yb3dfYWRkX2luZGV4KCByb3csIEFTTl9QUklWX0lNUExJRURfT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtc05hbWVfbGVuKTsKKworICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludFswXSA9ICdcMCc7CisgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA9IDA7CisgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IFJTX05PVFJFQURZOworICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9IFNUX05PTlZPTEFUSUxFOworICAgICAgICAKKyAgICBpZiAodGFibGVfZGF0YSkgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpyb3c6aW5zZXJ0IiwgInJvdyAlcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgcm93KSk7CisgICAgICAgIG5ldHNubXBfdGRhdGFfYWRkX3JvdyggdGFibGVfZGF0YSwgcm93ICk7CisgICAgfQorICAgIHJldHVybiByb3c7Cit9CisKKy8qIGFsbG9jYXRlIHVuZG8gcmVzb3VyY2VzICovCitzdGF0aWMgc25tcFRsc3RtUGFyYW1zVGFibGVfdW5kbyAqCitfYWxsb2NVbmRvKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICBlbnRyeS0+dW5kbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc25tcFRsc3RtUGFyYW1zVGFibGVfdW5kbyk7CisgICAgaWYgKCFlbnRyeS0+dW5kbykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IC0xOyAvKiBkb24ndCBrbm93ICovCisKKyAgICAvKiBUT0RPOiBhbGxvY2F0ZWQgYW55IG90aGVyIHJlc291cmNlcyBuZWVkZWQgKi8KKworICAgIHJldHVybiBlbnRyeS0+dW5kbzsKK30KKworLyogZnJlZSB1bmRvIHJlc291cmNlcyAqLworc3RhdGljIHZvaWQKK19mcmVlVW5kbyhzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSB8fCAhZW50cnktPnVuZG8pCisgICAgICAgIHJldHVybjsKKworICAgIC8qIFRPRE86IHJlbGVhc2UgYW55IGFsbG9jYXRlZCByZXNvdXJjZXMgKi8KKyAgICBTTk1QX0ZSRUUoZW50cnktPnVuZG8pOworfQorCisvKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgKi8KK3ZvaWQKK3NubXBUbHN0bVBhcmFtc1RhYmxlX3JlbW92ZUVudHJ5KG5ldHNubXBfdGRhdGEgICAgICp0YWJsZV9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3cpCit7CisgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgaWYgKCFyb3cpCisgICAgICAgIHJldHVybjsgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KKworICAgIGVudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopcm93LT5kYXRhOworCisgICAgREVCVUdNU0dUKCgidGxzdG1QYXJhbXNUYWJsZTplbnRyeTpkZWxldGUiLCAiZW50cnkgJXAgLyByb3cgJXBcbiIsCisgICAgICAgICAgICAgICBlbnRyeSwgcm93KSk7CisKKyAgICBpZiAodGFibGVfZGF0YSkgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpyb3c6cmVtb3ZlIiwgInJvdyAlcFxuIiwgcm93KSk7CisgICAgICAgIG5ldHNubXBfdGRhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93KCB0YWJsZV9kYXRhLCByb3cgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV9yb3coIHJvdyApOyAgICAKKworICAgIGlmIChlbnRyeSAmJiBlbnRyeS0+dW5kbykKKyAgICAgICAgX2ZyZWVVbmRvKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoIGVudHJ5ICk7IC8qIFRPRE8gLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KK30KKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogaGFuZGxlIGNhY2hlIC8gaW50ZXJhY3Rpb25zIHdpdGggc25tcFRsc3RtUGFyYW1zIGNvbnRhaW5lciBpbiBzbm1wbGliCisgKgorICovCitzdGF0aWMgdm9pZAorX3BhcmFtc19hZGQoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5KQoreworICAgIHNubXBUbHN0bVBhcmFtcyAgICAgKnBhcmFtczsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpwYXJhbXM6YWRkIiwgIm5hbWUgJXMsIGZwICVzXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSwgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSk7CisKKyAgICBwYXJhbXMgPQorICAgICAgICBuZXRzbm1wX3Rsc3RtUGFyYW1zX2NyZWF0ZShlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5oYXNoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSBwYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIHBhcmFtcy0+ZmxhZ3MgPSBUTFNUTV9QQVJBTVNfRlJPTV9NSUI7CisgICAgaWYgKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9PSBTVF9OT05WT0xBVElMRSkKKyAgICAgICAgcGFyYW1zLT5mbGFncyB8PSBUTFNUTV9QQVJBTVNfTk9OVk9MQVRJTEU7CisKKyAgICBpZiAobmV0c25tcF90bHN0bVBhcmFtc19hZGQocGFyYW1zKSAhPSAwKSB7CisgICAgICAgIG5ldHNubXBfdGxzdG1QYXJhbXNfZnJlZShwYXJhbXMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK19wYXJhbXNfcmVtb3ZlKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXMgICAgICBpbmRleCwgKmZvdW5kOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnBhcmFtczpyZW1vdmUiLCAibmFtZSAlc1xuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUpKTsKKworICAgIGluZGV4Lm5hbWUgPSBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWU7CisgICAgZm91bmQgPSBuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZpbmQoJmluZGV4KTsKKyAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgbmV0c25tcF90bHN0bVBhcmFtc19yZW1vdmUoZm91bmQpOworICAgICAgICBuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZyZWUoZm91bmQpOworICAgIH0KKyAgICBlbnRyeS0+cGFyYW1zX2ZsYWdzID0gMDsKK30KKworc3RhdGljIHZvaWQKK19wYXJhbXNfdHdlYWtfc3RvcmFnZShzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnkpCit7CisgICAgc25tcFRsc3RtUGFyYW1zICAgICAqcGFyYW1zLCBpbmRleDsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpwYXJhbXM6dHdlYWsiLCAibmFtZSAlcywgc3QgJWRcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lLCBlbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUpKTsKKworICAgIGluZGV4Lm5hbWUgPSBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWU7CisgICAgcGFyYW1zID0gbmV0c25tcF90bHN0bVBhcmFtc19maW5kKCZpbmRleCk7CisgICAgaWYgKE5VTEwgPT0gcGFyYW1zKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnBhcmFtczp0d2VhayIsCisgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBmaW5kIHBhcmFtcyFcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPT0gU1RfTk9OVk9MQVRJTEUpCisgICAgICAgIHBhcmFtcy0+ZmxhZ3MgfD0gVExTVE1fUEFSQU1TX05PTlZPTEFUSUxFOworICAgIGVsc2UKKyAgICAgICAgcGFyYW1zLT5mbGFncyAmPSB+VExTVE1fUEFSQU1TX05PTlZPTEFUSUxFOworfQorCitzdGF0aWMgbmV0c25tcF90ZGF0YV9yb3cgKgorX2VudHJ5X2Zyb21fcGFyYW1zKHNubXBUbHN0bVBhcmFtcyAgKnBhcmFtcykKK3sKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIHJvdyA9IHNubXBUbHN0bVBhcmFtc1RhYmxlX2NyZWF0ZUVudHJ5KE5VTEwsIHBhcmFtcy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihwYXJhbXMtPm5hbWUpKTsKKyAgICBpZiAoTlVMTCA9PSByb3cpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNhbiBjcmVhdGUgc25tcFRsc3RtUGFyYW1zIHJvdyBlbnRyeVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgIGlmIChwYXJhbXMtPmZsYWdzICYgVExTVE1fUEFSQU1TX0ZST01fQ09ORklHKQorICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPSBTVF9QRVJNQU5FTlQ7CisgICAgZWxzZSBpZiAoISAocGFyYW1zLT5mbGFncyAmIFRMU1RNX1BBUkFNU19OT05WT0xBVElMRSkpCisgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9IFNUX1ZPTEFUSUxFOworCisgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IFJTX0FDVElWRTsKKworICAgIGlmIChwYXJhbXMtPmZpbmdlcnByaW50KSB7CisgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPSAKKyAgICAgICAgICAgIHN0cmxlbihwYXJhbXMtPmZpbmdlcnByaW50KTsKKyAgICAgICAgaWYgKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPgorICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkpCisgICAgICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSAtIDE7CisgICAgICAgIG1lbWNweShlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsIHBhcmFtcy0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuKTsKKyAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50W3NpemVvZihlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpIC0gMV0gPSAwOworICAgIH0KKyAgICBlbnRyeS0+aGFzaFR5cGUgPSBwYXJhbXMtPmhhc2hUeXBlOworICAgIGVudHJ5LT5wYXJhbXNfZmxhZ3MgPSBwYXJhbXMtPmZsYWdzOworCisgICAgcmV0dXJuIHJvdzsKK30KKworc3RhdGljIGludAorc25tcFRsc3RtUGFyYW1zVGFibGVfbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYyApCisgeworICAgIG5ldHNubXBfdGRhdGEgICAgICp0YWJsZSA9IChuZXRzbm1wX3RkYXRhICopdm1hZ2ljOworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgbmV0c25tcF9jb250YWluZXIgKmFjdGl2ZV9wYXJhbXM7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKml0cjsKKyAgICBzbm1wVGxzdG1QYXJhbXMgICAqcGFyYW1zOworICAgIGludCAgICAgICAgICAgICAgICByYyA9IDA7CisKKyAgICBhY3RpdmVfcGFyYW1zID0gbmV0c25tcF90bHN0bVBhcmFtc19jb250YWluZXIoKTsKKyAgICBpZiAoTlVMTCA9PSBhY3RpdmVfcGFyYW1zKQorICAgICAgICByZXR1cm4gMDsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOmNhY2hlOmxvYWQiLCAic25tcFRsc3RtUGFyYW1zICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGFjdGl2ZV9wYXJhbXMpKSk7CisgICAgaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKGFjdGl2ZV9wYXJhbXMpOworICAgIGlmIChOVUxMID09IGl0cikgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpjYWNoZTpsb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgImNhbnQgZ2V0IGl0ZXJhdG9yXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGluc2VydCByb3dzIGZvciBhY3RpdmUgcGFyYW1zIGludG8gdGJsIGNvbnRhaW5lcgorICAgICAqLworICAgIHBhcmFtcyA9IElURVJBVE9SX0ZJUlNUKGl0cik7CisgICAgZm9yKCA7IHBhcmFtczsgcGFyYW1zID0gSVRFUkFUT1JfTkVYVChpdHIpKSB7CisKKyAgICAgICAgcm93ID0gX2VudHJ5X2Zyb21fcGFyYW1zKHBhcmFtcyk7CisgICAgICAgIGlmIChOVUxMID09IHJvdykgeworICAgICAgICAgICAgcmMgPS0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ldHNubXBfdGRhdGFfYWRkX3Jvdyh0YWJsZSwgcm93KSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX3JlbW92ZUVudHJ5KE5VTEwsIHJvdyk7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdHIpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6Y2FjaGU6bG9hZCIsICJkb25lLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorc25tcFRsc3RtUGFyYW1zVGFibGVfZnJlZSggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYyApCit7CisgICAgbmV0c25tcF90ZGF0YSAgICAgICAgICAgICp0YWJsZSA9IChuZXRzbm1wX3RkYXRhICopdm1hZ2ljOworICAgIG5ldHNubXBfdGRhdGFfcm93ICAgICAgICAqcm93OworICAgIG5ldHNubXBfaXRlcmF0b3IgICAgICAgICAqdGJsX2l0cjsKKyAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAgICplbnRyeTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOmNhY2hlOmZyZWUiLCAiY2FsbGVkLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworCisgICAgdGJsX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUih0YWJsZS0+Y29udGFpbmVyKTsKKyAgICBpZiAoTlVMTCA9PSB0YmxfaXRyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOmNhY2hlOmZyZWUiLAorICAgICAgICAgICAgICAgICAgICAiY2FudCBnZXQgZW50cnkgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJvdyA9IElURVJBVE9SX0ZJUlNUKHRibF9pdHIpOworICAgIGZvciggOyByb3c7IHJvdyA9IElURVJBVE9SX05FWFQodGJsX2l0cikpIHsKKyAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtb3ZlIGFsbCBhY3RpdmUgcm93cyAodGhleSBhcmUgaW4gdGhlIHBhcmFtcyBjb250YWluZXIga2VwdAorICAgICAgICAgKiBieSB0aGUgbGlicmFyeSkuIEtlZXAgaW5hY3RpdmUgb25lcyBmb3IgbmV4dCB0aW1lLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSB7CisgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9yZW1vdmVFbnRyeShOVUxMLCByb3cpOworICAgICAgICAgICAgSVRFUkFUT1JfUkVNT1ZFKHRibF9pdHIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRSh0YmxfaXRyKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOmNhY2hlOmZyZWUiLCAiZG9uZSwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKK30KKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNubXBUbHN0bVBhcmFtc1RhYmxlIHRhYmxlCisgKgorICovCitzdGF0aWMgaW50Citzbm1wVGxzdG1QYXJhbXNUYWJsZV9oYW5kbGVyKAorICAgIG5ldHNubXBfbWliX2hhbmRsZXIgICAgICAgICAgICAgICAqaGFuZGxlciwKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICAgKnJlZ2luZm8sCisgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAgICAgICpyZXFpbmZvLAorICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICAgICAgICAqcmVxdWVzdHMpIHsKKworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICpyZXF1ZXN0ID0gTlVMTDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX3RkYXRhICAgICAgICAgICAgICAqdGFibGVfZGF0YTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAgICAgICAqdGFibGVfcm93OworICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICAgICAgICAgICp0YWJsZV9lbnRyeTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpoYW5kbGVyIiwgIlByb2Nlc3NpbmcgJXMgbW9kZSAoJWQpIHJlcXVlc3RcbiIsCisgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpLAorICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpKTsKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR0VUICMjIyMjCisgICAgICoKKyAgICAgKiAgIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgKi8KKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVDogCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdV9jaGFyIGJpbls0Ml0sICpwdHIgPSBiaW47CisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHNpemVvZihiaW4pLCBvZmZzZXQgPSAxOworICAgICAgICAgICAgICAgIGludCAgICByYzsKKyAgICAgICAgICAgICAgICBiaW5bMF0gPSB0YWJsZV9lbnRyeS0+aGFzaFR5cGU7CisgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQodGFibGVfZW50cnktPmhhc2hUeXBlICE9IDApOworICAgICAgICAgICAgICAgIHJjID0gbmV0c25tcF9oZXhfdG9fYmluYXJ5KAorICAgICAgICAgICAgICAgICAgICAmcHRyLCAmbGVuLCAmb2Zmc2V0LCAwLAorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmICgxICE9IHJjKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW4sIG9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUyAqLworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSE9CSkVDVCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAvKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7IC8qIGNhc2UgTU9ERV9HRVQgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CisgICAgICAgICAqLworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJFU0VSVkUxICMjIyMjCisgICAgICoKKyAgICAgKiAgIEluIFJFU0VSVkUxIHdlIGFyZSBqdXN0IGNoZWNraW5nIGJhc2ljIEFTTi4xIHNpemUvdHlwZSByZXN0cmljdGlvbnMuCisgICAgICogWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueSBvZiB0aGlzIGNvZGUuIERvbid0IGNoYW5nZSBhbnkKKyAgICAgKiBvZiB0aGUgY29sdW1uIHZhbHVlcyBoZXJlLiBTYXZlIHRoYXQgZm9yIHRoZSBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoZSBuZXh0IHBoYXNlIGlzIFJFU0VSVkUyIG9yIEZSRUUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICgoTlVMTCAhPSB0YWJsZV9lbnRyeSkgJiYKKyAgICAgICAgICAgICAgICAoU1RfUkVBRE9OTFkgPT0gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogZm9yIGVhY2ggY29sdW1uLCBhbGxvY2F0ZSBhbnkgYWRkaXRpb25hbCByZXNvdXJjZXMgbmVlZGVkCisgICAgICAgICAgICAgKiBiZXlvbmQgd2hhdCBpcyBpbiB0aGUgdW5kbyBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVDoKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsIHNpemVvZih0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICAvKiogY2hlY2sgbGVuL2FsZ29yaXRobSBNSUIgcmVxdWlyZW1lbnRzICovCisgICAgICAgICAgICAgICAgaWYgKFNOTVBfRVJSX05PRVJST1IgPT0gcmV0KQorICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NlcnRfY2hlY2tfdmJfZmluZ2VycHJpbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVCAqLworCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3N0b3JhZ2V0eXBlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPyB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgOiBTVF9OT05FICkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRSAqLworCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA6IFJTX05PTkVYSVNURU5UICksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlIDogU1RfTk9ORSkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgICAgICB9IC8qIHN3aXRjaCBjb2xudW0gKi8KKworICAgICAgICAgICAgaWYgKCByZXQgIT0gU05NUF9FUlJfTk9FUlJPUiApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0vKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7IC8qIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTEgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJFU0VSVkUyICMjIyMjCisgICAgICoKKyAgICAgKiAgIFJFU0VSVkUyIGlzIGZvciBjaGVja2luZyBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBmcm9tIHRoZSBNSUIuCisgICAgICogU2luY2UgdGhlc2UgcmVzdHJpY3Rpb25zIGFyZSBvZnRlbiBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIG9iamVjdCwKKyAgICAgKiBtaWIyYyBjYW4ndCBnZW5lcmF0ZSBjb2RlLiBJdCdzIHBvc3NpYmxlIHRoYXQgeW91IG5lZWQgdG8gYWRkCisgICAgICogYWRkaXRpb25hbCBjaGVja3MgaGVyZS4gSG93ZXZlciwgZG9uJ3QgY2hhbmdlIGFueSBvZiB0aGUgY29sdW1uCisgICAgICogdmFsdWVzIGhlcmUuIFNhdmUgdGhhdCBmb3IgdGhlIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhlIG5leHQgcGhhc2UgaXMgQUNUSU9OIG9yIEZSRUUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogaWYgbm8gdGFibGVfcm93LCBjcmVhdGUgb25lCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5ICkgeworICAgICAgICAgICAgICAgIHRhYmxlX3JvdyA9IHNubXBUbHN0bVBhcmFtc1RhYmxlX2NyZWF0ZUVudHJ5CisgICAgICAgICAgICAgICAgICAgICh0YWJsZV9kYXRhLCAgKGNoYXIqKXRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC5zdHJpbmcsIAorICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9yb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gdGFibGVfcm93LT5kYXRhOworICAgICAgICAgICAgICAgIF9hbGxvY1VuZG8odGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfcm93ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlID0gRkFURV9ORVdMWV9DUkVBVEVEOworICAgICAgICAgICAgICAgIC8qKiBhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2luc2VydF90ZGF0YV9yb3coIHJlcXVlc3QsIHRhYmxlX3JvdyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKiogYWxsb2NhdGUgdW5kbyBzdHJ1Y3R1cmUsIGlmIG5lZWRlZCAqLworICAgICAgICAgICAgaWYoIXRhYmxlX2VudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgX2FsbG9jVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qKiBkb24ndCBhbGxvdyBtdWx0aXBsZSBzZXRzIG9mIHNhbWUgY29sdW1uICovCisgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8tPnJlcVt0YWJsZV9pbmZvLT5jb2xudW1dKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgidGxzdG1QYXJhbXNUYWJsZTpyZXNlcnZlMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgc2V0cyB0byBjb2wgJWQgaW4gcmVxdWVzdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmNvbG51bSkpOworICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW3RhYmxlX2luZm8tPmNvbG51bV0gPSByZXF1ZXN0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICAvKiogbWFrZSBzdXJlIHJvd3N0YXR1cyBpcyB1c2VkIHRvIGNyZWF0ZSByb3dzICovCisgICAgICAgIGlmICggcmV0ID09IFNOTVBfRVJSX05PRVJST1IgKSB7CisgICAgICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBpZiAoKHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlICE9IEZBVEVfTkVXTFlfQ1JFQVRFRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVU10pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IC8qIGZvciByZXF1ZXN0cyAvIGNyZWF0aW9uICovCisgICAgICAgIH0gLyogaWYgbm8gZXJyb3IgKi8KKyAgICAgICAgYnJlYWs7IC8qIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTIgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBGUkVFICMjIyMjCisgICAgICoKKyAgICAgKiAgIEZSRUUgaXMgZm9yIGNsZWFuaW5nIHVwIGFmdGVyIGEgZmFpbGVkIHJlcXVlc3QgKGR1cmluZyBlaXRoZXIKKyAgICAgKiBSRVNFUlZFMSBvciBSRVNFUlZFMikuIFNvIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIG5lZWQgdG8gYmUKKyAgICAgKiByZWxlYXNlZC4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgIC8qCisgICAgICAgICAqIHJlbGVhc2UgdW5kbyByZXNvdXJjZXMKKyAgICAgICAgICogcmVtb3ZlIGFueSBuZXdseSBjcmVhdGVkIHJvd3MKKyAgICAgICAgICovCisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgICA9ICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KCAgcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhICA9ICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSB8fCAhdGFibGVfZW50cnktPnVuZG8gKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3coIHJlcXVlc3QsIHRhYmxlX3JvdyApOworCisgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlICkKKyAgICAgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9yZW1vdmVFbnRyeSggdGFibGVfZGF0YSwgdGFibGVfcm93ICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsgLyogY2FzZSBNT0RFX1NFVF9GUkVFICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFDVElPTiAjIyMjIworICAgICAqCisgICAgICogICBJbiB0aGUgQUNUSU9OIHBoYXNlLCB3ZSBwZXJmb3JtIGFueSBzZXRzIHRoYXQgY2FuIGJlIHVuZG9uZS4KKyAgICAgKiAoU2F2ZSBhbnl0aGluZyB0aGF0IGNhbid0IGJlIHVuZG9uZSBmb3IgdGhlIENPTU1JVCBwaGFzZS4pCisgICAgICoKKyAgICAgKiAgIEFmdGVyIGluZGl2aWR1YWwgY29sdW1ucyBoYXZlIGJlZW4gZG9uZSwgeW91IHNob3VsZCBjaGVjayB0aGF0IHRoZQorICAgICAqIHJvdyBhcyBhIHdob2xlIGlzIGNvbnNpc3RlbnQuCisgICAgICoKKyAgICAgKiBUaGUgbmV4dCBwaGFzZSBpcyBVTkRPIG9yIENPTU1JVC4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1X2NoYXIgKnRtcCA9ICh1X2NoYXIqKXRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludDsKKworICAgICAgICAgICAgICAgIG1lbWNweSggdGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuOworCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhhc2hUeXBlID0gcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuc3RyaW5nWzBdOworICAgICAgICAgICAgICAgIG1lbXNldCggdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9iaW5hcnlfdG9faGV4KCZ0bXAsICZ0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZ1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbiAtIDEpOworICAgICAgICAgICAgICAgIGlmICgwID09IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4pCisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQgKi8KKworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgLyogc2F2ZSBzbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZTsKKyAgICAgICAgICAgICAgICAvKiBnZXQgdmFsdWUgZnJvbSB2YXJiaW5kICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID0gKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFICovCisKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICAvKiBzYXZlIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzOworICAgICAgICAgICAgICAgIC8qIGdldCB2YWx1ZSBmcm9tIHZhcmJpbmQgICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyAgICAgPSAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTICovCisgICAgICAgICAgICB9IC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgICAgIGlmICggcmV0ICE9IFNOTVBfRVJSX05PRVJST1IgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IC8qIHNldCB2YWx1ZXMgZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgaWYgKCByZXQgPT0gU05NUF9FUlJfTk9FUlJPUiApIHsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEFsbCBjb2x1bW5zIG5vdyBoYXZlIHRoZWlyIGZpbmFsIHZhbHVlcyBzZXQuIGNoZWNrIHRoZQorICAgICAgICAgICAgICogaW50ZXJuYWwgY29uc2lzdGVuY3kgb2YgZWFjaCByb3cuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBhbHJlYWR5IGNoZWNrZWQgKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiogYXNzdW1lIGNvbnNpc3RlbmN5ICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAxOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgoUlNfSVNfQUNUSVZFKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpKSAmJgorICAgICAgICAgICAgICAgICAgICAoKCF0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVNdKSB8fAorICAgICAgICAgICAgICAgICAgICAgKFJTX0lTX0FDVElWRSh0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKSkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIGNoZWNrIG1pYiByZXN0cmljdGlvbnMgb24gYWN0aXZlIHJvd3MuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7IC8qIHBlciBtaWIgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gLyogYWN0aXZlIHJvdyAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFJTX0lTX0dPSU5HX0FDVElWRSh0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBjaGVjayByZXN0cmljdGlvbnMgZm9yIGFjdGl2YXRpbmcgYSByb3cKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qKiBpZiBnb2luZyBhY3RpdmUsIGluY29uc2lzdGVuY3kgaXMgZmF0YWwgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSB0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVU107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IC8qIGdvaW5nIGFjdGl2ZSAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFJTX0RFU1RST1kgPT0gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBUT0RPOiBjaGVjayByZXN0cmljdGlvbnMgZm9yIGRlbGV0aW5nIGEgcm93CisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiogY2FuJ3QgZGVsZXRlIGFjdGl2ZSByb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKFJTX0lTX0FDVElWRSh0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gLyogZGVzdHJveSAqLworICAgICAgICAgICAgICAgIGlmICggcmV0ICE9IFNOTVBfRVJSX05PRVJST1IgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLyogY29uc2lzdGVuY3kgZm9yIHJlcXVlc3RzICovCisgICAgICAgIH0gLyogaWYgbm8gZXJyb3IgKi8KKyAgICAgICAgYnJlYWs7IC8qIGNhc2UgTU9ERV9TRVRfQUNUSU9OICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgVU5ETyAjIyMjIworICAgICAqCisgICAgICogICBVTkRPIGlzIGZvciBjbGVhbmluZyB1cCBhbnkgZmFpbGVkIHJlcXVlc3RzIHRoYXQgd2VudCB0aHJvdWdoIHRoZQorICAgICAqIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfcm93ICAgPSAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyggIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSAgPSAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQ6CisgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCB2YWx1ZSAqLworICAgICAgICAgICAgICAgIG1lbWNweSggdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVCAqLworCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICAvKiByZXN0b3JlIHNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlIHZhbHVlICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRSAqLworCisgICAgICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gdGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUyAqLworICAgICAgICAgICAgfSAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVsZWFzZSB1bmRvIGRhdGEKKyAgICAgICAgICogb3IgcmVtb3ZlIGFueSBuZXdseSBjcmVhdGVkIHJvd3MKKyAgICAgICAgICovCisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgICA9ICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KCAgcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSB8fCAhdGFibGVfZW50cnktPnVuZG8gKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3coIHJlcXVlc3QsIHRhYmxlX3JvdyApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IHRhYmxlX2VudHJ5LT51bmRvLT5mYXRlICkKKyAgICAgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9yZW1vdmVFbnRyeSggdGFibGVfZGF0YSwgdGFibGVfcm93ICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgfSAvKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7IC8qIGNhc2UgTU9ERV9TRVRfVU5ETyAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDT01NSVQgIyMjIyMKKyAgICAgKgorICAgICAqICAgQ09NTUlUIGlzIHRoZSBmaW5hbCBzdWNjZXNzIHN0YXRlLCB3aGVuIGFsbCBjaGFuZ2VzIGFyZSBmaW5hbGl6ZWQuCisgICAgICogVGhlcmUgaXMgbm90IHJlY292ZXJ5IHN0YXRlIHNob3VsZCBzb21ldGhpbmcgZmFpbGUgaGVyZS4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX3JvdyAgID0gICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3coICByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgID0gICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCAgICByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICghdGFibGVfZW50cnkgfHwgIXRhYmxlX2VudHJ5LT51bmRvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKFJTX05PVFJFQURZID09IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpICYmCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IFJTX05PVElOU0VSVklDRTsKKyAgICAgICAgICAgIGVsc2UgaWYgKChSU19OT1RJTlNFUlZJQ0UgPT0gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykgJiYKKyAgICAgICAgICAgICAgICAgICAgICgwID09IHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KSkKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisKKyAgICAgICAgICAgIC8qKiByZWxlYXNlIHVuZG8gZGF0YSBmb3IgcmVxdWVzdHMgd2l0aCBubyByb3dzdGF0dXMgKi8KKyAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kbyAmJgorICAgICAgICAgICAgICAgICF0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVNdICE9IDApIHsKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8odGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qKiB1cGRhdGUgYWN0aXZlIGFkZHJzICovCisgICAgICAgICAgICAgICAgaWYgKCgwID09IHRhYmxlX2VudHJ5LT5wYXJhbXNfZmxhZ3MpICYmCisgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID09IFJTX0FDVElWRSkpCisgICAgICAgICAgICAgICAgICAgIF9wYXJhbXNfYWRkKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoMCAhPSB0YWJsZV9lbnRyeS0+cGFyYW1zX2ZsYWdzKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID09IFJTX0RFU1RST1kpKQorICAgICAgICAgICAgICAgICAgICBfcGFyYW1zX3JlbW92ZSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgorICAgICAgICAgICAgICAgICAgICAvKiogRmFsbC10aHJvdWdoICovCisgICAgICAgICAgICAgICAgY2FzZSBSU19BQ1RJVkU6CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSBSU19BQ1RJVkU7CisgICAgICAgICAgICAgICAgICAgIGlmICgwID09IHRhYmxlX2VudHJ5LT5wYXJhbXNfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBfcGFyYW1zX2FkZCh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgorICAgICAgICAgICAgICAgICAgICAvKiogRmFsbC10aHJvdWdoICovCisgICAgICAgICAgICAgICAgY2FzZSBSU19OT1RJTlNFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgIC8qKiBzaW1wbHkgc2V0IHN0YXR1cyBiYXNlZCBvbiBjb25zaXN0ZW5jeSAqLworICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisgICAgICAgICAgICAgICAgICAgIGlmICgwICE9IHRhYmxlX2VudHJ5LT5wYXJhbXNfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBfcGFyYW1zX3JlbW92ZSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBSU19ERVNUUk9ZOgorICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPSB0YWJsZV9lbnRyeS0+cGFyYW1zX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgX3BhcmFtc19yZW1vdmUodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyggcmVxdWVzdCwgdGFibGVfcm93ICk7CisgICAgICAgICAgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3JvdyApOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9yb3cgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qKiByZWxlYXNlIHVuZG8gZGF0YSAqLworICAgICAgICAgICAgICAgIF9mcmVlVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUyAqLworCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKFJTX0FDVElWRSA9PSB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKQorICAgICAgICAgICAgICAgICAgICAgICAgX3BhcmFtc190d2Vha19zdG9yYWdlKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgLyoqIHVwZGF0ZSBsYXN0IGNoYW5nZWQgKi8KKyAgICAgICAgX2xhc3RfY2hhbmdlZCA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOworCisgICAgICAgIC8qKiBzZXQgdXAgdG8gc2F2ZSBwZXJzaXN0ZW50IHN0b3JlICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCisgICAgICAgIGJyZWFrOyAvKiBjYXNlIE1PREVfU0VUX0NPTU1JVCAqLworICAgIH0gIC8qIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgKi8KKyAgICAKKyAgICBpZiAoIHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SICkKKyAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworCitzdGF0aWMgaW50CitfY291bnRfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICAgICB2YWw7CisKKyAgICBpZiAoTU9ERV9HRVQgIT0gcmVxaW5mby0+bW9kZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmFkIG1vZGUgaW4gUk8gaGFuZGxlciIpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIGlmIChOVUxMID09IF90YWJsZV9kYXRhLT5jb250YWluZXIpCisgICAgICAgIHZhbCA9IDA7CisgICAgZWxzZQorICAgICAgICB2YWwgPSBDT05UQUlORVJfU0laRShfdGFibGVfZGF0YS0+Y29udGFpbmVyKTsKKworICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fR0FVR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJnZhbCwgc2l6ZW9mKHZhbCkpOworICAgCisgICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOworICAgIAorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQRVJTSVNURU5DRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBfdGxzdG1QYXJhbXNUYWJsZV9zYXZlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZyk7CitzdGF0aWMgaW50IF9zYXZlX3BhcmFtcyhzbm1wVGxzdG1QYXJhbXMgKnBhcmFtcywgdm9pZCAqYXBwX3R5cGUpOworc3RhdGljIGludCBfc2F2ZV9lbnRyeShzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnksIHZvaWQgKnR5cGUpOworc3RhdGljIHZvaWQgX3Rsc3RtUGFyYW1zVGFibGVfcm93X3Jlc3RvcmVfbWliKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpidWYpOworCitzdGF0aWMgY29uc3QgY2hhciBtaWJfdG9rZW5bXSA9ICJzbm1wVGxzdG1QYXJhbXNFbnRyeSI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICpfaW5pdF9wZXJzaXN0ZW5jZSBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGFibGUKKyAqIGluaXQgcm91dGluZS4KKyAqCisgKiBJZiB5b3VyIHRhYmxlIGRlcGVuZHMgb24gcm93cyBpbiBhbm90aGVyIHRhYmxlLAorICogeW91IHNob3VsZCByZWdpc3RlciB5b3VyIGNhbGxiYWNrIGFmdGVyIHRoZSBvdGhlciB0YWJsZSwKKyAqIHdoaWNoIHNob3VsZCBlbnN1cmUgdGhlIHJvd3Mgb24gd2hpY2ggeW91IGRlcGVuZCBhcmUgc2F2ZWQKKyAqIChhbmQgcmUtY3JlYXRlZCkgYmVmb3JlIHRoZSBkZXBlbmRlbnQgcm93cy4KKyAqLwordm9pZAorX3Rsc3RtUGFyYW1zX2luaXRfcGVyc2lzdGVuY2Uodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCBtaWJfdG9rZW4sIF90bHN0bVBhcmFtc1RhYmxlX3Jvd19yZXN0b3JlX21pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICByYyA9IHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90bHN0bVBhcmFtc1RhYmxlX3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90YWJsZV9kYXRhLT5jb250YWluZXIpOworCisgICAgaWYgKHJjICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyBmb3IgU1RPUkVfREFUQSBjYWxsYmFjayAiCisgICAgICAgICAgICAgICAgICJpbiBfdGxzdG1QYXJhbXNfaW5pdF9wZXJzaXN0ZW5jZVxuIik7Cit9CisKK3N0YXRpYyBpbnQKK190bHN0bVBhcmFtc1RhYmxlX3NhdmUoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBjaGFyICAgICAgICAgICAgc2VwW10gPQorICAgICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiOworICAgIGNoYXIgICAgICAgICAgICBidWZbXSA9ICIjXG4iICIjIHRsc3RtUGFyYW1zIHBlcnNpc3RlbnQgZGF0YVxuIiAiIyI7CisgICAgY2hhciAgICAgICAgICAgKnR5cGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmFjdGl2ZV9wYXJhbXMgPSBuZXRzbm1wX3Rsc3RtUGFyYW1zX2NvbnRhaW5lcigpOworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKnRibF9pdHIsICpwYXJhbXNfaXRyOworICAgIHNubXBUbHN0bVBhcmFtcyAgICpwYXJhbXM7CisgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgaWYgKChDT05UQUlORVJfU0laRShhY3RpdmVfcGFyYW1zKSA9PSAwKSAmJgorICAgICAgICAoQ09OVEFJTkVSX1NJWkUoX3RhYmxlX2RhdGEtPmNvbnRhaW5lcikgPT0gMCkpCisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIGJ1Zik7CisKKyAgICAvKgorICAgICAqIHNhdmUgYWN0aXZlIHJvd3MgZnJvbSBwYXJhbXMgY29udGFpbmVyCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gYWN0aXZlX3BhcmFtcykgeworICAgICAgICBwYXJhbXNfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKGFjdGl2ZV9wYXJhbXMpOworICAgICAgICBpZiAoTlVMTCA9PSBwYXJhbXNfaXRyKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpzYXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW50IGdldCBwYXJhbXMgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgICAgIHBhcmFtcyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyYW1zID0gSVRFUkFUT1JfRklSU1QocGFyYW1zX2l0cik7CisKKyAgICAgICAgZm9yKCA7IHBhcmFtczsgcGFyYW1zID0gSVRFUkFUT1JfTkVYVChwYXJhbXNfaXRyKSkgeworICAgICAgICAgICAgLyoqIGRvbid0IHN0b3JlIGNvbmZpZyByb3dzICovCisgICAgICAgICAgICBpZiAoKHBhcmFtcy0+ZmxhZ3MgJiBUTFNUTV9QQVJBTVNfRlJPTV9DT05GSUcpIHx8CisgICAgICAgICAgICAgICAgISAocGFyYW1zLT5mbGFncyAmIFRMU1RNX1BBUkFNU19OT05WT0xBVElMRSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBfc2F2ZV9wYXJhbXMocGFyYW1zLCB0eXBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKHBhcmFtc19pdHIpOworCisgICAgLyoKKyAgICAgKiBzYXZlIGluYWN0aXZlIHJvd3MgZnJvbSBtaWIKKyAgICAgKi8KKyAgICB0YmxfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKF90YWJsZV9kYXRhLT5jb250YWluZXIpOworICAgIGlmIChOVUxMID09IHRibF9pdHIpCisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnNhdmUiLCAiY2FudCBnZXQgdGFibGUgaXRlcmF0b3JcbiIpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcm93ID0gSVRFUkFUT1JfRklSU1QodGJsX2l0cik7CisgICAgICAgIGZvciggOyByb3c7IHJvdyA9IElURVJBVE9SX05FWFQodGJsX2l0cikpIHsKKyAgICAgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2tpcCBhbGwgYWN0aXZlIHJvd3MgKHNob3VsZCBiZSBpbiBhY3RpdmVfcGFyYW1zIGFuZCB0aHVzIHNhdmVkCisgICAgICAgICAgICAgKiBhYm92ZSkgYW5kIHZvbGF0aWxlIHJvd3MuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgoZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9PSBSU19BQ1RJVkUpIHx8CisgICAgICAgICAgICAgICAgKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSAhPSBTVF9OT05WT0xBVElMRSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIF9zYXZlX2VudHJ5KGVudHJ5LCB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBJVEVSQVRPUl9SRUxFQVNFKHRibF9pdHIpOworICAgIH0KKworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgIlxuIik7CisKKyAgICAvKgorICAgICAqIG5ldmVyIGZhaWxzIAorICAgICAqLworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIF90bHN0bVBhcmFtc1RhYmxlX2NvbnRhaW5lcl9yb3dfc2F2ZQorICovCitzdGF0aWMgaW50Citfc2F2ZV9lbnRyeShzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnksIHZvaWQgKnR5cGUpCit7CisgICAgY2hhciAgIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF0sICpoYXNoVHlwZTsKKworICAgIGhhc2hUeXBlID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9oYXNoX2FsZyIsIGVudHJ5LT5oYXNoVHlwZSk7CisgICAgaWYgKE5VTEwgPT0gaGFzaFR5cGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNraXBwaW5nIGVudHJ5IHVua25vd24gaGFzaCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICBlbnRyeS0+aGFzaFR5cGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIC8qCisgICAgICogYnVpbGQgdGhlIGxpbmUKKyAgICAgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgwID09IGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZVsKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lX2xlbl0pOworICAgIG5ldHNubXBfYXNzZXJ0KDAgPT0gZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50WworICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuXSk7CisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzICVzICVzICVzICVkIiwgbWliX3Rva2VuLAorICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSwgaGFzaFR5cGUsCisgICAgICAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LAorICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpOworICAgIGJ1ZltzaXplb2YoYnVmKS0xXSA9IDA7CisKKyAgICByZWFkX2NvbmZpZ19zdG9yZSh0eXBlLCBidWYpOworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnJvdzpzYXZlIiwgInNhdmluZyBlbnRyeSAnJXMnXG4iLCBidWYpKTsKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgaW50Citfc2F2ZV9wYXJhbXMoc25tcFRsc3RtUGFyYW1zICpwYXJhbXMsIHZvaWQgKmFwcF90eXBlKQoreworICAgIGNoYXIgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmhhc2hUeXBlOworCisgICAgaWYgKE5VTEwgPT0gcGFyYW1zKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgaGFzaFR5cGUgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgcGFyYW1zLT5oYXNoVHlwZSk7CisgICAgaWYgKE5VTEwgPT0gaGFzaFR5cGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNraXBwaW5nIGVudHJ5IHVua25vd24gaGFzaCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICBwYXJhbXMtPmhhc2hUeXBlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzICVzIC0tJXMgJXMgJWQiLCBtaWJfdG9rZW4sIHBhcmFtcy0+bmFtZSwKKyAgICAgICAgICAgICBoYXNoVHlwZSwgcGFyYW1zLT5maW5nZXJwcmludCwgUlNfQUNUSVZFKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOnBhcmFtczpzYXZlIiwgInNhdmluZyBwYXJhbXMgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICBidWYpKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZShhcHBfdHlwZSwgYnVmKTsKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgdm9pZAorX3Rsc3RtUGFyYW1zVGFibGVfcm93X3Jlc3RvcmVfbWliKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpidWYpCit7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICByb3dTdGF0dXM7CisgICAgc25tcFRsc3RtUGFyYW1zICAgICAgICpwYXJhbXM7CisKKyAgICAvKiogbmVlZCBzb21ld2hlcmUgdG8gc2F2ZSByb3dzICovCisgICAgbmV0c25tcF9hc3NlcnQoX3RhYmxlX2RhdGEgJiYgX3RhYmxlX2RhdGEtPmNvbnRhaW5lcik7IAorCisgICAgcGFyYW1zID0gbmV0c25tcF90bHN0bVBhcmFtc19yZXN0b3JlX2NvbW1vbigmYnVmKTsKKyAgICBpZiAoTlVMTCA9PSBwYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOVUxMID09IGJ1ZikgeworICAgICAgICBjb25maWdfcGVycm9yKCJpbmNvbXBsZXRlIGxpbmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByb3dTdGF0dXMgPSBhdG9pKGJ1Zik7CisKKyAgICAvKgorICAgICAqIGlmIHJvdyBpcyBhY3RpdmUsIGFkZCBpdCB0byB0aGUgcGFyYW1zIGNvbnRhaW5lciBzbyBpdCBpcyBhdmFpbGFibGUKKyAgICAgKiBmb3IgdXNlLiBEbyBub3QgYWRkIGl0IHRvIHRoZSB0YWJsZSwgc2luY2UgaXQgd2lsbCBiZSBhZGRlZAorICAgICAqIGR1cmluZyBjYWNoZV9sb2FkLgorICAgICAqLworICAgIGlmIChSU19BQ1RJVkUgPT0gcm93U3RhdHVzKSB7CisgICAgICAgIHBhcmFtcy0+ZmxhZ3MgPSBUTFNUTV9QQVJBTVNfRlJPTV9NSUIgfCBUTFNUTV9QQVJBTVNfTk9OVk9MQVRJTEU7CisKKyAgICAgICAgaWYgKG5ldHNubXBfdGxzdG1QYXJhbXNfYWRkKHBhcmFtcykgIT0gMCkKKyAgICAgICAgICAgIG5ldHNubXBfdGxzdG1QYXJhbXNfZnJlZShwYXJhbXMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9yb3cgICAgICpyb3c7CisgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICAqZW50cnk7CisKKyAgICAgICAgcm93ID0gc25tcFRsc3RtUGFyYW1zVGFibGVfY3JlYXRlRW50cnkoX3RhYmxlX2RhdGEsIHBhcmFtcy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHBhcmFtcy0+bmFtZSkpOworICAgICAgICBpZiAoIXJvdykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5oYXNoVHlwZSA9IHBhcmFtcy0+aGFzaFR5cGU7CisgICAgICAgIHN0cmxjcHkoZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LCBwYXJhbXMtPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpKTsKKyAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICBzdHJsZW4oZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KTsKKyAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID0gU1RfTk9OVk9MQVRJTEU7CisgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSByb3dTdGF0dXM7CisgICAgICAgIG5ldHNubXBfdGxzdG1QYXJhbXNfZnJlZShwYXJhbXMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzM2NhYwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICQKKyAqLworI2lmbmRlZiBTTk1QVExTVE1QQVJBTVNUQUJMRV9ICisjZGVmaW5lIFNOTVBUTFNUTVBBUkFNU1RBQkxFX0gKKworI2RlZmluZSBTTk1QX1RMU19UTV9QQVJBTVNfQ09VTlQgICBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCA0CisjZGVmaW5lIFNOTVBfVExTX1RNX1BBUkFNU19DSEFOR0VEIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDUKKyNkZWZpbmUgU05NUF9UTFNfVE1fUEFSQU1TX1RBQkxFICAgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgNgorCisvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KK3ZvaWQgaW5pdF9zbm1wVGxzdG1QYXJhbXNUYWJsZSh2b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV90YWJsZV9zbm1wVGxzdG1QYXJhbXNUYWJsZSh2b2lkKTsKKyNkZWZpbmUgU05NUFRMU1RNUEFSQU1TVEFCTEVfVElNRU9VVCAgNjAKKworLyogaW5kZXggZGVmaW5pdGlvbnMgZm9yIHRhYmxlIHNubXBUbHN0bVBhcmFtc1RhYmxlICovCisjZGVmaW5lIFNOTVBUQVJHRVRQQVJBTVNOQU1FX01BWF9TSVpFICAzMgorCisvKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBzbm1wVGxzdG1QYXJhbXNUYWJsZSAqLworI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQgICAgMQorI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEUgICAgMgorI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTICAgIDMKKyAgICAKKyNkZWZpbmUgU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlRfTUFYX1NJWkUgICAgMjU1CisgICAgCisjZGVmaW5lIFNOTVBUTFNUTVBBUkFNU1RBQkxFX01JTl9DT0xVTU4gQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UCisjZGVmaW5lIFNOTVBUTFNUTVBBUkFNU1RBQkxFX01BWF9DT0xVTU4gQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUworCisjZW5kaWYgLyogU05NUFRMU1RNUEFSQU1TVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24uaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmNGVmOAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIFNOTVBUTFNUTVNFU1NJT05fSAorI2RlZmluZSBTTk1QVExTVE1TRVNTSU9OX0gKKworY29uZmlnX3JlcXVpcmUodGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbikKKworI2VuZGlmIC8qIFNOTVBUTFNUTVNFU1NJT05fSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5jIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YzdiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIHNubXBUbHN0bVNlc3Npb24KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAidGxzdG0tbWliLmgiCisjaW5jbHVkZSAic25tcFRsc3RtU2Vzc2lvbi5oIgorCitzdGF0aWMgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiogX215cmVnID0gTlVMTDsKKworLyoqIEluaXRpYWxpemVzIHRoZSBzbm1wVGxzdG1TZXNzaW9uIG1vZHVsZSAqLwordm9pZAoraW5pdF9zbm1wVGxzdG1TZXNzaW9uKHZvaWQpCit7CisgICAgc3RhdGljIG9pZCAgICAgIG15b2lkW10gPSB7IFNOTVBfVExTX1RNX0JBU0UsIDIsIDEgfTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1TZXNzaW9uIiwgIkluaXRpYWxpemluZ1xuIikpOworCisgICAgX215cmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNubXBUbHN0bVNlc3Npb24iLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15b2lkLCBPSURfTEVOR1RIKG15b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gX215cmVnKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gY3JlYXRlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgICJzbm1wVGxzdG1TZXNzaW9uXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJjID0gTkVUU05NUF9SRUdJU1RFUl9TVEFUSVNUSUNfSEFORExFUihfbXlyZWcsIDEsIFRMU1RNKTsKKyAgICBpZiAoTUlCX1JFR0lTVEVSRURfT0sgIT0gcmMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byByZWdpc3RlciBzbm1wVGxzdG1TZXNzaW9uIG1kb3VsZVxuIik7CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShfbXlyZWcpOworICAgICAgICBfbXlyZWcgPSBOVUxMOworICAgIH0KKworfQorCisKK3ZvaWQKK3NodXRkb3duX3NubXBUbHN0bVNlc3Npb24odm9pZCkKK3sKKyAgICBpZiAoX215cmVnKSB7CisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKF9teXJlZyk7CisgICAgICAgIF9teXJlZyA9IE5VTEw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmY2MwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIFNOTVBUTFNUTVNFU1NJT05fSAorI2RlZmluZSBTTk1QVExTVE1TRVNTSU9OX0gKKworLyoqIEluaXRpYWxpemVzIHRoZSBzbm1wVGxzdG1TZXNzaW9uIG1vZHVsZSAqLwordm9pZCBpbml0X3NubXBUbHN0bVNlc3Npb24odm9pZCk7Cit2b2lkIHNodXRkb3duX3NubXBUbHN0bVNlc3Npb24odm9pZCk7CisKKyNlbmRpZiAvKiBTTk1QVExTVE1TRVNTSU9OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi5oIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzAxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90c20tbWliLmgKQEAgLTAsMCArMSw2IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworY29uZmlnX3JlcXVpcmUodHNtLW1pYi9zbm1wVHNtU3RhdHMpCitjb25maWdfcmVxdWlyZSh0c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4KQorY29uZmlnX2FkZF9taWIoU05NUC1UU00tTUlCKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5jIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTc2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSAic25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaCIKKworLyoqIEluaXRpYWxpemVzIHRoZSBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgodm9pZCkKK3sKKyAgICBjb25zdCBvaWQgICAgICAgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXhfb2lkW10gPQorICAgICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDE5MCwgMSwgMiwgMSB9OworCisgICAgREVCVUdNU0dUTCgoInNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IiwgIkluaXRpYWxpemluZ1xuIikpOworCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXhfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKSk7Cit9CisKK2ludAoraGFuZGxlX3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJldDsKKyAgICAvKgorICAgICAqIFdlIGFyZSBuZXZlciBjYWxsZWQgZm9yIGEgR0VUTkVYVCBpZiBpdCdzIHJlZ2lzdGVyZWQgYXMgYQorICAgICAqICJpbnN0YW5jZSIsIGFzIGl0J3MgIm1hZ2ljYWxseSIgaGFuZGxlZCBmb3IgdXMuICAKKyAgICAgKi8KKworICAgIC8qCisgICAgICogYSBpbnN0YW5jZSBoYW5kbGVyIGFsc28gb25seSBoYW5kcyB1cyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUsIHNvCisgICAgICogd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgYSBsaXN0IG9mIHJlcXVlc3RzOyB3ZSdsbCBvbmx5IGdldCBvbmUuIAorICAgICAqLworCisgICAgbG9uZyBjdXJyZW50X3ZhbHVlID0gbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UU01fVVNFX1BSRUZJWCk7CisgICAgc3RhdGljIGxvbmcgb3JpZ2luYWxfdmFsdWUgPSAwOworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisKKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBpZiAoY3VycmVudF92YWx1ZSA9PSAwKQorICAgICAgICAgICAgY3VycmVudF92YWx1ZSA9IFRWX0ZBTFNFOworICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VycmVudF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdXJyZW50X3ZhbHVlKSk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIFNFVCBSRVFVRVNUCisgICAgICAgICAqCisgICAgICAgICAqIG11bHRpcGxlIHN0YXRlcyBpbiB0aGUgdHJhbnNhY3Rpb24uICBTZWU6CisgICAgICAgICAqIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvdG9vbGtpdC9taWJfbW9kdWxlL3NldC1hY3Rpb25zLmpwZworICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICAvKgorICAgICAgICAgKiBvciB5b3UgY291bGQgdXNlIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZSBpbnN0ZWFkIAorICAgICAgICAgKi8KKyAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSKTsKKyAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCByZXQpOworICAgICAgICB9CisgICAgICAgIGlmICgqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSAhPSAyICYmCisgICAgICAgICAgICAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSAhPSAxKQorICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfV1JPTkdWQUxVRSk7CisgICAgICAgIG9yaWdpbmFsX3ZhbHVlID0gY3VycmVudF92YWx1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgaWYgKFRWX0ZBTFNFID09ICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpKQorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RTTV9VU0VfUFJFRklYLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RTTV9VU0VfUFJFRklYLCAxKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RTTV9VU0VfUFJFRklYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsX3ZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogd2UgZG9uJ3QgbmVlZCB0aGVzZSAqLworICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qCisgICAgICAgICAqIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgc28gdGhpcyBpcyBhIHJlYWxseSBiYWQgZXJyb3IgCisgICAgICAgICAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAidW5rbm93biBtb2RlICglZCkgaW4gaGFuZGxlX3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4XG4iLAorICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaCBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBjNWIzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgICQKKyAqLworI2lmbmRlZiBTTk1QVFNNQ09ORklHVVJBVElPTlVTRVBSRUZJWF9ICisjZGVmaW5lIFNOTVBUU01DT05GSUdVUkFUSU9OVVNFUFJFRklYX0gKKworLyoKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKKyAqLwordm9pZCAgICAgICAgICAgIGluaXRfc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgodm9pZCk7CitOZXRzbm1wX05vZGVfSGFuZGxlciBoYW5kbGVfc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXg7CisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFRTTUNPTkZJR1VSQVRJT05VU0VQUkVGSVhfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMuaCBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjNDEwMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIFNOTVBUU01TVEFUU19ICisjZGVmaW5lIFNOTVBUU01TVEFUU19ICisKK2NvbmZpZ19yZXF1aXJlKHRzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cykKKworI2VuZGlmIC8qIFNOTVBUU01TVEFUU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYyBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjdkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogc25tcFRzbVN0YXRzCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KKyNpbmNsdWRlICJzbm1wVHNtU3RhdHMuaCIKKworc3RhdGljIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qIF9teXJlZyA9IE5VTEw7CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlbHBlcl9zdGF0aXN0aWNzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc2h1dGRvd25fc25tcHRzbXNlc3Npb24sIG5ldHNubXBfdW51c2VkKQorCisvKiogSW5pdGlhbGl6ZXMgdGhlIHNubXBUc21TdGF0cyBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfc25tcFRzbVN0YXRzKHZvaWQpCit7CisgICAgc3RhdGljIG9pZCAgICAgIHNubXBUc21TdGF0c19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMTkwLCAxLCAxIH07CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoInNubXBUc21TdGF0cyIsICJJbml0aWFsaXppbmdcbiIpKTsKKworICAgIF9teXJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzbm1wVHNtU3RhdHMiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUc21TdGF0c19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzbm1wVHNtU3RhdHNfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gX215cmVnKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gY3JlYXRlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgICJzbm1wVHNtU3RhdHNcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJjID0gTkVUU05NUF9SRUdJU1RFUl9TVEFUSVNUSUNfSEFORExFUihfbXlyZWcsIDEsIFRTTSk7CisgICAgaWYgKE1JQl9SRUdJU1RFUkVEX09LICE9IHJjKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc25tcFRzbVN0YXRzIG1kb3VsZVxuIik7CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShfbXlyZWcpOworICAgICAgICBfbXlyZWcgPSBOVUxMOworICAgIH0KK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NIVVRET1dOX1NOTVBUU01TRVNTSU9OCit2b2lkCitzaHV0ZG93bl9zbm1wVHNtU2Vzc2lvbih2b2lkKQoreworICAgIGlmIChfbXlyZWcpIHsKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoX215cmVnKTsKKyAgICAgICAgX215cmVnID0gTlVMTDsKKyAgICB9Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TSFVURE9XTl9TTk1QVFNNU0VTU0lPTiAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmggYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTAwN2NmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIFNOTVBUU01TVEFUU19ICisjZGVmaW5lIFNOTVBUU01TVEFUU19ICisKKy8qKiBJbml0aWFsaXplcyB0aGUgc25tcFRzbVN0YXRzIG1vZHVsZSAqLwordm9pZCBpbml0X3NubXBUc21TdGF0cyh2b2lkKTsKK3ZvaWQgc2h1dGRvd25fc25tcFRzbVN0YXRzKHZvaWQpOworCisjZW5kaWYgLyogU05NUFRTTVNUQVRTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYyBiL2FnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYwppbmRleCBjZmJlZTQ2Li5mOTY0OWVmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jCkBAIC02Miw4ICs2Miw4IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJ0dW5uZWwuaCIKIAogI2lmbmRlZiBNSU4KQEAgLTEzNywzMiArMTM3LDM1IEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBMT0NBTEFERFJFU1MgICAgICAgICAgMQotICAgIHtMT0NBTEFERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCAxfX0sCisgICAge0xPQ0FMQUREUkVTUywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDF9fSwKICNkZWZpbmUgICBSRU1PVEVBRERSRVNTICAgICAgICAgMgotICAgIHtSRU1PVEVBRERSRVNTLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl90dW5uZWxJZkVudHJ5LCAzLAotICAgICB7MSwgMSwgMn19LAorICAgIHtSRU1PVEVBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgMn19LAogI2RlZmluZSAgIEVOQ0FQU01FVEhPRCAgICAgICAgICAzCi0gICAge0VOQ0FQU01FVEhPRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDN9fSwKKyAgICB7RU5DQVBTTUVUSE9ELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgM319LAogI2RlZmluZSAgIEhPUExJTUlUICAgICAgICAgICAgICA0Ci0gICAge0hPUExJTUlULCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDR9fSwKKyAgICB7SE9QTElNSVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgNH19LAogI2RlZmluZSAgIFNFQ1VSSVRZICAgICAgICAgICAgICA1Ci0gICAge1NFQ1VSSVRZLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgNX19LAorICAgIHtTRUNVUklUWSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDV9fSwKICNkZWZpbmUgICBUT1MgICAgICAgICAgICAgICAgICAgNgotICAgIHtUT1MsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgNn19LAorICAgIHtUT1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgNn19LAogCiAjZGVmaW5lICAgSUZJTkRFWCAgICAgICAgICAgICAgIDcKLSAgICB7SUZJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfdHVubmVsQ29uZmlnRW50cnksIDMsIHsyLCAxLCA1fX0sCisgICAge0lGSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3R1bm5lbENvbmZpZ0VudHJ5LCAzLCB7MiwgMSwgNX19LAogI2RlZmluZSAgIFJPV1NUQVRVUyAgICAgICAgICAgICA4Ci0gICAge1JPV1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3R1bm5lbENvbmZpZ0VudHJ5LCAzLCB7MiwgMSwgNn19LAorICAgIHtST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90dW5uZWxDb25maWdFbnRyeSwgMywgezIsIDEsIDZ9fSwKIH07CiAKIAogCi1leHRlcm4gaW50ICAgICAgcmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiwgc2l6ZV90LCBjb25zdCBjaGFyICopOwotZXh0ZXJuIGludCAgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiwgc2l6ZV90KTsKLQogc3RhdGljIG9pZCAgICAgIHN5c09SVGFibGVfcmVnW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEwLCAxMzEgfTsKLXN0YXRpYyBzaXplX3QgICBzeXNPUlRhYmxlX3JlZ2xlbiA9IDg7CiAKIHN0YXRpYyBzdHJ1Y3QgdHVubmVsICp0dW5uZWxzOwogCkBAIC0xNzEsNyArMTc0LDcgQEAKIHZvaWQKIGRlaW5pdF90dW5uZWwodm9pZCkKIHsKLSAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGUoc3lzT1JUYWJsZV9yZWcsIHN5c09SVGFibGVfcmVnbGVuKTsKKyAgICBVTlJFR0lTVEVSX1NZU09SX0VOVFJZKHN5c09SVGFibGVfcmVnKTsKIH0KIAogCkBAIC0xODgsNyArMTkxLDcgQEAKIHZvaWQKIGluaXRfdHVubmVsKHZvaWQpCiB7Ci0gICAgcmVnaXN0ZXJfc3lzT1JUYWJsZShzeXNPUlRhYmxlX3JlZywgc3lzT1JUYWJsZV9yZWdsZW4sCisgICAgUkVHSVNURVJfU1lTT1JfRU5UUlkoc3lzT1JUYWJsZV9yZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUkZDIDI2NjcgVFVOTkVMLU1JQiBpbXBsZW1lbnRhdGlvbiBmb3IgIgogICAgICAgICAgICAgICAgICAgICAgICAgIkxpbnV4IDIuMi54IGtlcm5lbHMuIik7CiAKQEAgLTIxMyw4ICsyMTYsOCBAQAogICAgIG9pZCAgICAgICAgICAgICBuYW1lW01BWF9PSURfTEVOXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMiwgMiwgMSwgMyB9OwogICAgIHNpemVfdCAgICAgICAgICBsZW5ndGggPSAxMDsKICAgICBzdHJ1Y3QgdmFyaWFibGUgaWZUeXBlX3ZhcmlhYmxlID0KLSAgICAgICAgeyAzLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAxMCwKLSAgICAgICAgezEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDN9CisgICAgICAgIHsgMywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pZkVudHJ5LCAxMCwgezEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDN9CiAgICAgfTsKICAgICB1bnNpZ25lZCBjaGFyICAqcDsKICAgICBzaXplX3QgICAgICAgICAgdmFyX2xlbjsKQEAgLTI0NSwxNSArMjQ4LDE1IEBACiAKIAogCi1zdGF0aWMgY2hhciAgICAqCitzdGF0aWMgY29uc3QgY2hhciAqCiBnZXROYW1lKGludCBpbmRleCkKIHsKICNpZm5kZWYgVVNJTkdfSUZfTUlCX0lGVEFCTEVfSUZUQUJMRV9NT0RVTEUKICAgICBvaWQgICAgICAgICAgICAgbmFtZVtNQVhfT0lEX0xFTl0gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDIgfTsKICAgICBzaXplX3QgICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgc3RydWN0IHZhcmlhYmxlIGlmTmFtZV92YXJpYWJsZSA9Ci0gICAgICAgIHsgMiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMTAsCi0gICAgICAgIHsxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCAyfQorICAgICAgICB7IDIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWZFbnRyeSwgMTAsIHsxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCAyfQogICAgIH07CiAgICAgdW5zaWduZWQgY2hhciAgKnA7CiAgICAgc2l6ZV90ICAgICAgICAgIHZhcl9sZW47CkBAIC00MDcsNyArNDEwLDcgQEAKICAgICBzdGF0aWMgaW50ICAgICAgbWF4X2luZGV4ID0gMTsKICAgICBzdGF0aWMgc3RydWN0IHR1bm5lbCAqbGFzdF90dW5uZWwgPSBOVUxMOwogICAgIHN0cnVjdCB0dW5uZWwgICp0dW5uZWw7Ci0gICAgY2hhciAgICAgICAgICAgKmlmbmFtZTsKKyAgICBjb25zdCBjaGFyICAgICAqaWZuYW1lOwogICAgIGludCAgICAgICAgICAgICB0eXBlOwogCiAgICAgLyoKQEAgLTQxNSw3ICs0MTgsNyBAQAogICAgICAqLwogICAgIGZvciAodHVubmVsID0gdHVubmVsczsgdHVubmVsOyB0dW5uZWwgPSB0dW5uZWwtPm5leHQpIHsKICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLAotICAgICAgICAgICAgICAgICAgInVwZGF0ZVR1bm5lbHMoKTogdXBkYXRpbmcgJXMgKGluZGV4PSVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAidXBkYXRlVHVubmVscygpOiB1cGRhdGluZyAlcyAoaW5kZXg9JSIgTkVUU05NUF9QUklvICJ1KVxuIiwKICAgICAgICAgICAgICAgICAgIHR1bm5lbC0+aWZuYW1lLCB0dW5uZWwtPmlmaW5kZXgpKTsKICAgICAgICAgdXBkYXRlVHVubmVsKHR1bm5lbCk7CiAgICAgfQpAQCAtNDYxLDcgKzQ2NCw4IEBACiAgICAgICAgICAgICBsYXN0X3R1bm5lbCA9IHR1bm5lbDsKIAogICAgICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLAotICAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGVUdW5uZWxzKCk6IGFkZGVkICVzIChpbmRleD0lbHUgc3RhdGU9JWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGVUdW5uZWxzKCk6IGFkZGVkICVzIChpbmRleD0lIiBORVRTTk1QX1BSSW8KKyAgICAgICAgICAgICAgICAgICAgICAidSBzdGF0ZT0lZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgdHVubmVsLT5pZm5hbWUsIHR1bm5lbC0+aWZpbmRleCwgdHVubmVsLT5hY3RpdmUpKTsKICAgICAgICAgfQogICAgICAgICBpZiAodHlwZSA9PSAwKQpAQCAtNDgyLDggKzQ4Niw4IEBACiAgICAgICAgIGlmICh0dW5uZWwtPmlmaW5kZXggPT0gaW5kZXgpIHsKICAgICAgICAgICAgIGlmICghdHVubmVsLT5hY3RpdmUpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBERUJVR01TRygoInR1bm5lbCIsCi0gICAgICAgICAgICAgICAgICAgICAgIiVzIChpbmRleD0lbHUpXG4iLCB0dW5uZWwtPmlmbmFtZSwgdHVubmVsLT5pZmluZGV4KSk7CisgICAgICAgICAgICBERUJVR01TRygoInR1bm5lbCIsICIlcyAoaW5kZXg9JSIgTkVUU05NUF9QUklvICJ1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHR1bm5lbC0+aWZuYW1lLCB0dW5uZWwtPmlmaW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiB0dW5uZWw7CiAgICAgICAgIH0KICAgICB9CkBAIC01MDQsOCArNTA4LDggQEAKICAgICAgICAgaWYgKHR1bm5lbC0+aWZpbmRleCA+IGluZGV4KSB7CiAgICAgICAgICAgICBpZiAoIXR1bm5lbC0+YWN0aXZlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLAotICAgICAgICAgICAgICAgICAgICAgICIlcyAoaW5kZXg9JWx1KVxuIiwgdHVubmVsLT5pZm5hbWUsIHR1bm5lbC0+aWZpbmRleCkpOworICAgICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLCAiJXMgKGluZGV4PSUiIE5FVFNOTVBfUFJJbyAidSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgdHVubmVsLT5pZm5hbWUsIHR1bm5lbC0+aWZpbmRleCkpOwogICAgICAgICAgICAgcmV0dXJuIHR1bm5lbDsKICAgICAgICAgfQogICAgIH0KQEAgLTU0OCw4ICs1NTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpsZW5ndGgpIC0gdHVubmVsX2xlbiAtIDMpKSB7CiAgICAgICAgICAgICBpZiAoIXR1bm5lbC0+YWN0aXZlKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLAotICAgICAgICAgICAgICAgICAgICAgICIlcyAoaW5kZXg9JWx1KVxuIiwgdHVubmVsLT5pZm5hbWUsIHR1bm5lbC0+aWZpbmRleCkpOworICAgICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLCAiJXMgKGluZGV4PSUiIE5FVFNOTVBfUFJJbyAidSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgdHVubmVsLT5pZm5hbWUsIHR1bm5lbC0+aWZpbmRleCkpOwogICAgICAgICAgICAgcmV0dXJuIHR1bm5lbDsKICAgICAgICAgfQogICAgIH0KQEAgLTU5Miw4ICs1OTYsNyBAQAogICAgIH0KIAogICAgIGlmIChsYXN0X3R1bm5lbCkgewotICAgICAgICBERUJVR01TRygoInR1bm5lbCIsCi0gICAgICAgICAgICAgICAgICAiJXMgKGluZGV4PSVsdSlcbiIsCisgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwgIiVzIChpbmRleD0lIiBORVRTTk1QX1BSSW8gInUpXG4iLAogICAgICAgICAgICAgICAgICAgbGFzdF90dW5uZWwtPmlmbmFtZSwgbGFzdF90dW5uZWwtPmlmaW5kZXgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBERUJVR01TRygoInR1bm5lbCIsICJOT05FXG4iKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMKaW5kZXggYmQ3ODRmYy4uMTE0N2VlZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYwpAQCAtNCw2ICs0LDEyIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorLyogd29ya2Fyb3VuZCBmb3IgYnVnIGluIGF1dG9jb25mIDIuNjBiIGFuZCAyLjYxICovCisjaWZkZWYgSEFWRV9HRVRNTlRFTlQKKyN1bmRlZiBIQVZFX0dFVE1OVEVOVAorI2RlZmluZSBIQVZFX0dFVE1OVEVOVCAxIC8qIHByZXZpb3VzbHkgbWlnaHQgYmUgb25seSAiI2RlZmluZSBIQVZFX0dFVE1OVEVOVCIgKi8KKyNlbmRpZgorCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogI2lmIEhBVkVfU1RETElCX0gKQEAgLTExNywxMSArMTIzLDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTEzMCw5ICsxMzIsNiBAQAogIyAgaW5jbHVkZSA8dGltZS5oPgogIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTE0MCw3ICsxMzksNyBAQAogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAiZGlzay5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKICNpZiBVU0lOR19VQ0RfU05NUF9FUlJPUk1JQl9NT0RVTEUKICNpbmNsdWRlICJlcnJvcm1pYi5oIgogI2Vsc2UKQEAgLTE3MCwxMCArMTY5LDggQEAKICAgICBpbnQgICAgICAgICAgICAgbWlucGVyY2VudDsKIH07CiAKLSNpZm5kZWYgIElOVDMyX01BWAotI2RlZmluZSAgSU5UMzJfTUFYICAweDdmZmZmZmZmCi0jZW5kaWYKLQorI2RlZmluZSBNQVhfSU5UXzMyIDB4N2ZmZmZmZmYKKyNkZWZpbmUgTUFYX1VJTlRfMzIgMHhmZmZmZmZmZgogCiB1bnNpZ25lZCBpbnQgICAgbnVtZGlza3M7CiBpbnQgICAgICAgICAgICAgYWxsRGlza3NJbmNsdWRlZCA9IDA7CkBAIC0xODEsMjMgKzE3OCw0MiBAQAogc3RydWN0IGRpc2twYXJ0ICpkaXNrczsKIAogc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX2Rpc2tfdmFyaWFibGVzW10gPSB7Ci0gIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7TUlCSU5ERVh9fSwKLSAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUk5BTUV9fSwKLSAge0RJU0tERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLAotICAge0RJU0tERVZJQ0V9fSwKLSAge0RJU0tNSU5JTVVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsCi0gICB7RElTS01JTklNVU19fSwKLSAge0RJU0tNSU5QRVJDRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsCi0gICB7RElTS01JTlBFUkNFTlR9fSwKLSAge0RJU0tUT1RBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1RPVEFMfX0sCi0gIHtESVNLQVZBSUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tBVkFJTH19LAotICB7RElTS1VTRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tVU0VEfX0sCi0gIHtESVNLUEVSQ0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLAotICAge0RJU0tQRVJDRU5UfX0sCi0gIHtESVNLUEVSQ0VOVE5PREUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwKLSAgIHtESVNLUEVSQ0VOVE5PREV9fSwKLSAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JGTEFHfX0sCi0gIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUk1TR319CisgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge01JQklOREVYfX0sCisgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9STkFNRX19LAorICB7RElTS0RFVklDRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0RFVklDRX19LAorICB7RElTS01JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLTUlOSU1VTX19LAorICB7RElTS01JTlBFUkNFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLTUlOUEVSQ0VOVH19LAorICB7RElTS1RPVEFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1RPVEFMfX0sCisgIHtESVNLQVZBSUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLQVZBSUx9fSwKKyAge0RJU0tVU0VELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1VTRUR9fSwKKyAge0RJU0tQRVJDRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1BFUkNFTlR9fSwKKyAge0RJU0tQRVJDRU5UTk9ERSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tQRVJDRU5UTk9ERX19LAorICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JGTEFHfX0sCisgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JNU0d9fSwKKyAgIHtESVNLVE9UQUxMT1csIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tUT1RBTExPV319LAorICAge0RJU0tUT1RBTEhJR0gsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tUT1RBTEhJR0h9fSwKKyAgIHtESVNLQVZBSUxMT1csIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tBVkFJTExPV319LAorICAge0RJU0tBVkFJTEhJR0gsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tBVkFJTEhJR0h9fSwKKyAgIHtESVNLVVNFRExPVywgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1VTRURMT1d9fSwKKyAgIHtESVNLVVNFREhJR0gsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tVU0VESElHSH19LAogfTsKIAogLyoKQEAgLTI0Myw3ICsyNTksNiBAQAogZGlza19wYXJzZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7CiAjaWYgSEFWRV9GU1RBQl9IIHx8IEhBVkVfR0VUTU5URU5UIHx8IEhBVkVfU1RBVEZTCi0gIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07CiAgIGNoYXIgICAgICAgICAgICBwYXRoW1NUUk1BWF07CiAgIGludCAgICAgICAgICAgICBtaW5wZXJjZW50OwogICBpbnQgICAgICAgICAgICAgbWluc3BhY2U7CkBAIC0yNTEsMjMgKzI2NiwxOSBAQAogICBpZiAobnVtZGlza3MgPT0gbWF4ZGlza3MpIHsKICAgICAgIGlmIChtYXhkaXNrcyA9PSAwKSB7CiAgICAgICAgICAgbWF4ZGlza3MgPSA1MDsKLSAgICAgICAgICBkaXNrcyA9IG1hbGxvYyhtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKKyAgICAgICAgICBkaXNrcyA9IChzdHJ1Y3QgZGlza3BhcnQgKiltYWxsb2MobWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICAgICAgaWYgKCFkaXNrcykgewogICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtYWxsb2MgZmFpbGVkIGZvciBuZXcgZGlzayBhbGxvY2F0aW9uLiIpOwotICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiXHRpZ25vcmluZzogICVzIiwgY3B0cik7Ci0gICAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCSAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiAgJXMiLCBjcHRyKTsKICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KICAgICAgICAgICBtZW1zZXQoZGlza3MsIDAsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgICBtYXhkaXNrcyAqPSAyOwotICAgICAgICAgIGRpc2tzID0gcmVhbGxvYyhkaXNrcywgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CisgICAgICAgICAgZGlza3MgPSAoc3RydWN0IGRpc2twYXJ0ICopcmVhbGxvYyhkaXNrcywgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICAgICAgaWYgKCFkaXNrcykgewogICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtYWxsb2MgZmFpbGVkIGZvciBuZXcgZGlzayBhbGxvY2F0aW9uLiIpOwotICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiXHRpZ25vcmluZzogICVzIiwgY3B0cik7Ci0gICAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCSAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiAgJXMiLCBjcHRyKTsKICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KICAgICAgICAgICBtZW1zZXQoZGlza3MgKyBtYXhkaXNrcy8yLCAwLCBtYXhkaXNrcy8yICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwpAQCAtMjg1LDcgKzI5Niw3IEBACiAgICAqIHJlYWQgb3B0aW9uYWwgbWluaW11bSBkaXNrIHVzYWdlIHNwZWMgCiAgICAqLwogICBpZihjcHRyICE9IE5VTEwpIHsKLSAgICAgIGlmKHN0cmNocihjcHRyLCAnJScpID09IDApIHsKKyAgICAgIGlmKHN0cmNocihjcHRyLCAnJScpID09IE5VTEwpIHsKICAgICAgICAgICBtaW5zcGFjZSA9IGF0b2koY3B0cik7CiAgICAgICAgICAgbWlucGVyY2VudCA9IC0xOwogICAgICAgfQpAQCAtMzEwLDI3ICszMjEsMjQgQEAKIGRpc2tfcGFyc2VfY29uZmlnX2FsbChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKICNpZiBIQVZFX0ZTVEFCX0ggfHwgSEFWRV9HRVRNTlRFTlQgfHwgSEFWRV9TVEFURlMKLSAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKICAgaW50ICAgICAgICAgICAgIG1pbnBlcmNlbnQgPSBESVNLTUlOUEVSQ0VOVDsKICAgICAKICAgaWYgKG51bWRpc2tzID09IG1heGRpc2tzKSB7CiAgICAgICBpZiAobWF4ZGlza3MgPT0gMCkgewogICAgICAgICAgIG1heGRpc2tzID0gNTA7Ci0gICAgICAgICAgZGlza3MgPSBtYWxsb2MobWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CisgICAgICAgICAgZGlza3MgPSAoc3RydWN0IGRpc2twYXJ0ICopbWFsbG9jKG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgICAgIGlmICghZGlza3MpIHsKICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWFsbG9jIGZhaWxlZCBmb3IgbmV3IGRpc2sgYWxsb2NhdGlvbi4iKTsKLSAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlx0aWdub3Jpbmc6ICAlcyIsIGNwdHIpOwotICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6ICAlcyIsIGNwdHIpOwogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQogICAgICAgICAgIG1lbXNldChkaXNrcywgMCwgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgIG1heGRpc2tzICo9IDI7Ci0gICAgICAgICAgZGlza3MgPSByZWFsbG9jKGRpc2tzLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKKyAgICAgICAgICBkaXNrcyA9IChzdHJ1Y3QgZGlza3BhcnQgKilyZWFsbG9jKGRpc2tzLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgICAgICBpZiAoIWRpc2tzKSB7CiAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1hbGxvYyBmYWlsZWQgZm9yIG5ldyBkaXNrIGFsbG9jYXRpb24uIik7Ci0gICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJcdGlnbm9yaW5nOiAgJXMiLCBjcHRyKTsKLSAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCSAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiAgJXMiLCBjcHRyKTsKICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KICAgICAgICAgICBtZW1zZXQoZGlza3MgKyBtYXhkaXNrcy8yLCAwLCBtYXhkaXNrcy8yICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwpAQCAtMzQwLDcgKzM0OCw3IEBACiAgICAqIHJlYWQgdGhlIG1pbmltdW0gZGlzayB1c2FnZSBwZXJjZW50CiAgICAqLwogICBpZihjcHRyICE9IE5VTEwpIHsKLSAgICAgIGlmKHN0cmNocihjcHRyLCAnJScpICE9IDApIHsKKyAgICAgIGlmKHN0cmNocihjcHRyLCAnJScpICE9IE5VTEwpIHsKICAgICAgICAgICBtaW5wZXJjZW50ID0gYXRvaShjcHRyKTsKICAgICAgIH0KICAgfQpAQCAtMzUyLDggKzM2MCw3IEBACiAgICAqLwogICBpZihhbGxEaXNrc0luY2x1ZGVkKSB7CiAgICAgICBjb25maWdfcGVycm9yKCJpbmNsdWRlQWxsRGlza3MgYWxyZWFkeSBzcGVjaWZpZWQuIik7Ci0gICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiXHRpZ25vcmluZzogaW5jbHVkZUFsbERpc2tzICVzIiwgY3B0cik7Ci0gICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogaW5jbHVkZUFsbERpc2tzICVzIiwgY3B0cik7CiAgIH0KICAgZWxzZSB7CiAgICAgICBhbGxEaXNrc0luY2x1ZGVkID0gMTsKQEAgLTM3NiwyNCArMzgzLDE4IEBACiAgIGlmIChudW1kaXNrcyA9PSBtYXhkaXNrcykgewogICAgICAgaWYgKG1heGRpc2tzID09IDApIHsKICAgICAgICAgICBtYXhkaXNrcyA9IDUwOwotICAgICAgICAgIGRpc2tzID0gbWFsbG9jKG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOworICAgICAgICAgIGRpc2tzID0gKHN0cnVjdCBkaXNrcGFydCAqKW1hbGxvYyhtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgICAgICBpZiAoIWRpc2tzKSB7Ci0gICAgICAgICAgICAgIGNoYXIgdG1wYnVmWzEwMjRdOwotICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiXHRpZ25vcmluZzogICVzIiwgZGV2aWNlKTsKLSAgICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6ICAlcyIsIGRldmljZSk7CiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9CiAgICAgICAgICAgbWVtc2V0KGRpc2tzLCAwLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgbWF4ZGlza3MgKj0gMjsKLSAgICAgICAgICBkaXNrcyA9IHJlYWxsb2MoZGlza3MsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOworICAgICAgICAgIGRpc2tzID0gKHN0cnVjdCBkaXNrcGFydCAqKXJlYWxsb2MoZGlza3MsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgICAgIGlmICghZGlza3MpIHsKLSAgICAgICAgICAgICAgY2hhciB0bXBidWZbMTAyNF07CiAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1hbGxvYyBmYWlsZWQgZm9yIG5ldyBkaXNrIGFsbG9jYXRpb24uIik7Ci0gICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJcdGlnbm9yaW5nOiAgJXMiLCBkZXZpY2UpOwotICAgICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogICVzIiwgZGV2aWNlKTsKICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KICAgICAgICAgICBtZW1zZXQoZGlza3MgKyBtYXhkaXNrcy8yLCAwLCBtYXhkaXNrcy8yICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwpAQCAtNDY0LDcgKzQ2NSw3IEBACiAjaWYgZGVmaW5lZChIQVZFX0dFVE1OVEVOVCkgfHwgZGVmaW5lZChIQVZFX0ZTVEFCX0gpCiAgIGludCBkdW1teSA9IDA7CiAjZW5kaWYKLSAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKKwogICAvKiAKICAgICogZmluZCB0aGUgZGV2aWNlIGZvciB0aGUgcGF0aCBhbmQgY29weSB0aGUgZGV2aWNlIGludG8gdGhlCiAgICAqIHN0cmluZyBkZWNsYXJlZCBhYm92ZSBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgcm91dGluZSByZXR1cm4gaXQKQEAgLTQ3NSw4ICs0NzYsNyBAQAogI2lmIEhBVkVfU0VUTU5URU5UCiAgIG1udGZwID0gc2V0bW50ZW50KEVUQ19NTlRUQUIsICJyIik7CiAgIGlmICghbW50ZnApIHsKLSAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiQ2FuJ3Qgb3BlbiAlcyAoc2V0bW50ZW50KVxuIiwgRVRDX01OVFRBQiApOwotICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkNhbid0IG9wZW4gJXMgKHNldG1udGVudClcbiIsIEVUQ19NTlRUQUIpOwogICAgICAgcmV0dXJuOwogICB9CiAgIHdoaWxlIChtbnRmcCAmJiBOVUxMICE9IChtbnRlbnQgPSBnZXRtbnRlbnQobW50ZnApKSkgewpAQCAtNDkzLDggKzQ5Myw3IEBACiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldG1lbnRlbnQgYnV0IG5vdCBzZXRtbnRlbnQgKi8KICAgbW50ZnAgPSBmb3BlbihFVENfTU5UVEFCLCAiciIpOwogICBpZiAoIW1udGZwKSB7Ci0gICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbid0IG9wZW4gJXMgKGZvcGVuKVxuIiwgRVRDX01OVFRBQiApOwotICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkNhbid0IG9wZW4gJXMgKGZvcGVuKVxuIiwgRVRDX01OVFRBQik7CiAgICAgICByZXR1cm47CiAgIH0KICAgd2hpbGUgKChpID0gZ2V0bW50ZW50KG1udGZwLCAmbW50dGFiKSkgPT0gMCkgewpAQCAtNTQ1LDExICs1NDQsOCBAQAogICAgIGlmIChudW1kaXNrcyA9PSBtYXhkaXNrcykgewogICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIGRldmljZSBmb3IgZGlzayAlcyIsCi0gICAgICAgICAgICAgZGlza3NbbnVtZGlza3NdLnBhdGgpOwotICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICBjb25maWdfcHdhcm4odG1wYnVmKTsKKyAgICBuZXRzbm1wX2NvbmZpZ193YXJuKCJDb3VsZG4ndCBmaW5kIGRldmljZSBmb3IgZGlzayAlcyIsCisJCQlkaXNrc1tudW1kaXNrc10ucGF0aCk7CiAgICAgZGlza3NbbnVtZGlza3NdLm1pbmltdW1zcGFjZSA9IC0xOwogICAgIGRpc2tzW251bWRpc2tzXS5taW5wZXJjZW50ID0gLTE7CiAgICAgZGlza3NbbnVtZGlza3NdLnBhdGhbMF0gPSAwOwpAQCAtNTcyLDExICs1NjgsOSBAQAogICBGSUxFICAgICAgICAgICAqbW50ZnA7CiAjZWxpZiBIQVZFX0ZTVEFCX0gKICAgc3RydWN0IGZzdGFiICAgKmZzdGFiOwotICBzdHJ1Y3Qgc3RhdCAgICAgc3RhdDE7CiAjZWxpZiBIQVZFX1NUQVRGUwogICBzdHJ1Y3Qgc3RhdGZzICAgc3RhdGY7CiAjZW5kaWYKLSAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKICAgc3RhdGljIGNoYXIgICAgIGRldmljZVtTVFJNQVhdOwogI2lmIGRlZmluZWQoSEFWRV9HRVRNTlRFTlQpICYmICFkZWZpbmVkKEhBVkVfU0VUTU5URU5UKQogICBpbnQgICAgICAgICAgICAgaTsKQEAgLTU5NCw4ICs1ODgsNyBAQAogI2lmIEhBVkVfU0VUTU5URU5UCiAgIG1udGZwID0gc2V0bW50ZW50KEVUQ19NTlRUQUIsICJyIik7CiAgIGlmICghbW50ZnApIHsKLSAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiQ2FuJ3Qgb3BlbiAlcyAoc2V0bW50ZW50KVxuIiwgRVRDX01OVFRBQiApOwotICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkNhbid0IG9wZW4gJXMgKHNldG1udGVudClcbiIsIEVUQ19NTlRUQUIpOwogICAgICAgcmV0dXJuIE5VTEw7CiAgIH0KICAgd2hpbGUgKG1udGZwICYmIE5VTEwgIT0gKG1udGVudCA9IGdldG1udGVudChtbnRmcCkpKQpAQCAtNjEzLDggKzYwNiw3IEBACiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldG1lbnRlbnQgYnV0IG5vdCBzZXRtbnRlbnQgKi8KICAgbW50ZnAgPSBmb3BlbihFVENfTU5UVEFCLCAiciIpOwogICBpZiAoIW1udGZwKSB7Ci0gICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbid0IG9wZW4gJXMgKGZvcGVuKVxuIiwgRVRDX01OVFRBQiApOwotICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkNhbid0IG9wZW4gJXMgKGZvcGVuKVxuIiwgRVRDX01OVFRBQik7CiAgICAgICByZXR1cm4gTlVMTDsKICAgfQogICB3aGlsZSAoKGkgPSBnZXRtbnRlbnQobW50ZnAsICZtbnR0YWIpKSA9PSAwKQpAQCAtNjI5LDcgKzYyMSw2IEBACiAgICAgc3RybGNweShkZXZpY2UsIG1udHRhYi5tbnRfc3BlY2lhbCwgc2l6ZW9mKGRldmljZSkpOwogI2VuZGlmIC8qIEhBVkVfU0VUTU5URU5UICovCiAjZWxpZiBIQVZFX0ZTVEFCX0gKLSAgc3RhdChwYXRoLCAmc3RhdDEpOwogICBzZXRmc2VudCgpOwogICBpZiAoKGZzdGFiID0gZ2V0ZnNmaWxlKHBhdGgpKSkKICAgICBzdHJsY3B5KGRldmljZSwgZnN0YWItPmZzX3NwZWMsIHNpemVvZihkZXZpY2UpKTsKQEAgLTY0OCw5ICs2MzksNyBAQAogICB9CiAjZW5kaWYKICAgZWxzZSB7Ci0gICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNvdWxkbid0IGZpbmQgZGV2aWNlIGZvciBkaXNrICVzIiwKLQkgICAgcGF0aCk7Ci0gICAgY29uZmlnX3B3YXJuKHRtcGJ1Zik7CisgICAgbmV0c25tcF9jb25maWdfd2FybigiQ291bGRuJ3QgZmluZCBkZXZpY2UgZm9yIGRpc2sgJXMiLCBwYXRoKTsKICAgfQogI2Vsc2UKICAgY29uZmlnX3BlcnJvcigiJ2Rpc2snIGNoZWNrcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiIpOwpAQCAtNjU5LDM5ICs2NDgsMzMgQEAKIH0KICNlbmRpZgogCi0KIC8qCi0gKiB2YXJfZXh0ZW5zaWJsZV9kaXNrKC4uLgotICogQXJndW1lbnRzOgotICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKLSAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAotICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncyAKLSAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAotICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKLSAqIHdyaXRlX21ldGhvZAotICogCisgKiBQYXJ0IG9mIFVDRC1TTk1QLU1JQjo6ZHNrRW50cnksIHdoaWNoIGlzIHNvIGhhcmQgdG8gZmlsbCAKKyAqIChpLmUuIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJ0cykuCiAgKi8KLXVfY2hhciAgICAgICAgICoKLXZhcl9leHRlbnNpYmxlX2Rpc2soc3RydWN0IHZhcmlhYmxlICp2cCwKLSAgICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsCi0gICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKK3N0cnVjdCBkc2tfZW50cnkgeworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgZHNrVG90YWw7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICBkc2tVc2VkOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgZHNrQXZhaWw7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBkc2tQZXJjZW50OworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgZHNrUGVyY2VudElub2RlOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgZHNrRXJyb3JGbGFnOworfTsKIAotICAgIGludCAgICAgICAgICAgICBwZXJjZW50LCBpc2Vycm9yOwotICAgIHVuc2lnbmVkIGludCAgICBkaXNrbnVtID0gMDsKLSNpZiAhZGVmaW5lZChIQVZFX1NZU19TVEFUVkZTX0gpICYmICFkZWZpbmVkKEhBVkVfU1RBVEZTKQotICAgIGRvdWJsZSAgICAgICAgICB0b3RhbGJsa3MsIGZyZWUsIHVzZWQsIGF2YWlsLCBhdmFpbGJsa3M7Ci0jZWxzZQotICAgIHN0YXRpYyBsb25nICAgICBhdmFpbDsKLSNpZiBkZWZpbmVkKFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTKSB8fCBkZWZpbmVkKFNUUlVDVF9TVEFURlNfSEFTX0ZfRklMRVMpCi0gICAgaW50ICAgICAgICAgICAgIHBlcmNlbnRfaW5vZGU7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKLSAgICBzdGF0aWMgY2hhciAgICAgZXJybXNnWzMwMF07CisvKioKKyAqIEZpbGwgaW4gdGhlIHByb3ZpZGVkIGRza19lbnRyeSBzdHJ1Y3R1cmUuCisgKiBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuCisgKi8KKworc3RhdGljIGludAorZmlsbF9kc2tfZW50cnkoaW50IGRpc2tudW0sIHN0cnVjdCBkc2tfZW50cnkgKmVudHJ5KQoreworI2lmIGRlZmluZWQoSEFWRV9TVEFUVkZTKSB8fCBkZWZpbmVkKEhBVkVfU1RBVEZTKQogICAgIGZsb2F0ICAgICAgICAgICBtdWx0aXBsaWVyOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0ZTVEFCX0gpICYmICFkZWZpbmVkKEhBVkVfU1lTX1NUQVRWRlNfSCkgJiYgIWRlZmluZWQoSEFWRV9TVEFURlMpCisgICAgZG91YmxlICAgICAgICAgIHRvdGFsYmxrcywgZnJlZSwgdXNlZCwgYXZhaWwsIGF2YWlsYmxrczsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX1NUQVRWRlMpIHx8IGRlZmluZWQoSEFWRV9TVEFURlMpCiAjaWZkZWYgU1RBVF9TVEFURlNfRlNfREFUQQpAQCAtNzEzLDYgKzY5NiwxMzYgQEAKICNlbmRpZgogI2VuZGlmCiAKKyAgICBlbnRyeS0+ZHNrUGVyY2VudElub2RlID0gLTE7CisKKyNpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgfHwgZGVmaW5lZChIQVZFX1NUQVRGUykKKyNpZmRlZiBTVEFUX1NUQVRGU19GU19EQVRBCisgICAgaWYgKHN0YXR2ZnMoZGlza3NbZGlza251bV0ucGF0aCwgJmZzZCkgPT0gLTEpCisjZWxzZQorICAgIGlmIChzdGF0dmZzKGRpc2tzW2Rpc2tudW1dLnBhdGgsICZ2ZnMpID09IC0xKQorI2VuZGlmCisgICAgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3Qgb3BlbiBkZXZpY2UgJXNcbiIsCisgICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLmRldmljZSk7CisgICAgICAgIHNldFBlcnJvcnN0YXR1cygic3RhdHZmcyBkZXYvZGlzayIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2lmZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKKyAgICB2ZnMuZl9ibG9ja3MgPSBmc2QuZmRfYnRvdDsKKyAgICB2ZnMuZl9iZnJlZSA9IGZzZC5mZF9iZnJlZTsKKyAgICB2ZnMuZl9iYXZhaWwgPSBmc2QuZmRfYmZyZWVuOworICAgIHZmcy5mX2JzaXplID0gMTAyNDsgICAgICAgICAvKiAgVWx0cml4IGZfYnNpemUgaXMgYSBWTSBwYXJhbWV0ZXIgYXBwYXJlbnRseS4gICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfT0RTKQorICAgIHZmcy5mX2Jsb2NrcyA9IHZmcy5mX3NwYXJlWzBdOworICAgIHZmcy5mX2JmcmVlID0gdmZzLmZfc3BhcmVbMV07CisgICAgdmZzLmZfYmF2YWlsID0gdmZzLmZfc3BhcmVbMl07CisjZW5kaWYKKworICAgIG11bHRpcGxpZXIgPSAoZmxvYXQpdmZzLmZfYnNpemUgLyAoZmxvYXQpMTAyNC4wOworI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUKKyAgICBpZiAodmZzLmZfZnJzaXplID4gMjU1KQorICAgICAgICBtdWx0aXBsaWVyID0gKGZsb2F0KXZmcy5mX2Zyc2l6ZSAvIChmbG9hdCkxMDI0LjA7CisjZW5kaWYKKworICAgIGVudHJ5LT5kc2tUb3RhbCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKHZmcy5mX2Jsb2NrcyAqIG11bHRpcGxpZXIpOworICAgIGVudHJ5LT5kc2tBdmFpbCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKHZmcy5mX2JhdmFpbCAqIG11bHRpcGxpZXIpOworICAgIGVudHJ5LT5kc2tVc2VkID0gKHVuc2lnbmVkIGxvbmcgbG9uZykoKHZmcy5mX2Jsb2NrcyAtIHZmcy5mX2JmcmVlKSAqIG11bHRpcGxpZXIpOworCisgICAgZW50cnktPmRza1BlcmNlbnQgPSAKKyAgICAgICAgdmZzLmZfYmxvY2tzID09IDAgPyAwIDoKKyAgICAgICAgdmZzLmZfYmF2YWlsIDw9IDAgPyAxMDAgOgorICAgICAgICAoaW50KSAoKGRvdWJsZSkgKHZmcy5mX2Jsb2NrcyAtIHZmcy5mX2JmcmVlKSAvCisgICAgICAgICAgICAgICAoZG91YmxlKSAodmZzLmZfYmxvY2tzIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAodmZzLmZfYmZyZWUgLSB2ZnMuZl9iYXZhaWwpKSAqIDEwMC4wICsgMC41KTsKKworI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZJTEVTKSB8fCBkZWZpbmVkIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZBVkFJTAorICAgIGVudHJ5LT5kc2tQZXJjZW50SW5vZGUgPSB2ZnMuZl9mYXZhaWwgPD0gMCA/IDEwMCA6CisgICAgICAgIChpbnQpICgoZG91YmxlKSAodmZzLmZfZmlsZXMgLSB2ZnMuZl9mZnJlZSkgLworICAgICAgICAgICAgICAgKGRvdWJsZSkgKHZmcy5mX2ZpbGVzIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAodmZzLmZfZmZyZWUgLSB2ZnMuZl9mYXZhaWwpKSAqIDEwMC4wICsgMC41KTsKKyNlbHNlCisjaWYgZGVmaW5lZChIQVZFX1NUUlVDVF9TVEFURlNfRl9GSUxFUykgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9TVEFURlNfRl9GRlJFRSkKKyAgICBlbnRyeS0+ZHNrUGVyY2VudElub2RlID0gdmZzLmZfZmlsZXMgPT0gMCA/IDEwMC4wIDoKKyAgICAgIChpbnQpICgoZG91YmxlKSAodmZzLmZfZmlsZXMgLSB2ZnMuZl9mZnJlZSkgLworICAgICAgICAgICAgICAoZG91YmxlKSAodmZzLmZfZmlsZXMpICogMTAwLjAgKyAwLjUpOworI2VuZGlmIAorI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZJTEVTKSAqLworCisjZWxpZiBIQVZFX0ZTVEFCX0gKKyAgICAvKgorICAgICAqIHJlYWQgdGhlIGRpc2sgaW5mb3JtYXRpb24gCisgICAgICovCisgICAgaWYgKChmaWxlID0gb3BlbihkaXNrc1tkaXNrbnVtXS5kZXZpY2UsIDApKSA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkbid0IG9wZW4gZGV2aWNlICVzXG4iLAorICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5kZXZpY2UpOworICAgICAgICBzZXRQZXJyb3JzdGF0dXMoIm9wZW4gZGV2L2Rpc2siKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBsc2VlayhmaWxlLCAobG9uZykgKFNCTE9DSyAqIERFVl9CU0laRSksIDApOworICAgIGlmIChyZWFkKGZpbGUsIChjaGFyICopICZmaWxlc3lzLCBTQlNJWkUpICE9IFNCU0laRSkgeworICAgICAgICBzZXRQZXJyb3JzdGF0dXMoIm9wZW4gZGV2L2Rpc2siKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkVycm9yIHJlYWRpbmcgZGV2aWNlICVzXG4iLAorICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5kZXZpY2UpOworICAgICAgICBjbG9zZShmaWxlKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjbG9zZShmaWxlKTsKKworICAgIHRvdGFsYmxrcyA9IGZpbGVzeXMuZnNfZHNpemU7CisgICAgZnJlZSA9IGZpbGVzeXMuZnNfY3N0b3RhbC5jc19uYmZyZWUgKiBmaWxlc3lzLmZzX2ZyYWcgKworICAgICAgICBmaWxlc3lzLmZzX2NzdG90YWwuY3NfbmZmcmVlOworICAgIHVzZWQgPSB0b3RhbGJsa3MgLSBmcmVlOworICAgIGF2YWlsYmxrcyA9IHRvdGFsYmxrcyAqICgxMDAgLSBmaWxlc3lzLmZzX21pbmZyZWUpIC8gMTAwOworICAgIGF2YWlsID0gYXZhaWxibGtzID4gdXNlZCA/IGF2YWlsYmxrcyAtIHVzZWQgOiAwOworICAgIGVudHJ5LT5kc2tQZXJjZW50ID0KKyAgICAgICAgdG90YWxibGtzID09IDAgPyAwIDoKKyAgICAgICAgYXZhaWxibGtzID09IDAgPyAxMDAgOgorICAgICAgICAoaW50KSAoKGRvdWJsZSkgdXNlZCAvIChkb3VibGUpIHRvdGFsYmxrcyAqIDEwMC4wICsgMC41KTsKKyAgICBtdWx0aXBsaWVyID0gKGZsb2F0KWZpbGVzeXMuZnNfZnNpemUgLyAoZmxvYXQpMTAyNC4wOworICAgIGVudHJ5LT5kc2tUb3RhbCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKHRvdGFsYmxrcyAqIG11bHRpcGxpZXIpOworICAgIGVudHJ5LT5kc2tBdmFpbCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKGF2YWlsICogbXVsdGlwbGllcik7CisgICAgZW50cnktPmRza1VzZWQgPSAodW5zaWduZWQgbG9uZyBsb25nKSh1c2VkICogbXVsdGlwbGllcik7CisjZWxzZQorICAgIC8qIE1pbkdXICovCisgICAgZW50cnktPmRza1BlcmNlbnQgPSAwOworICAgIGVudHJ5LT5kc2tUb3RhbCA9IDA7CisgICAgZW50cnktPmRza0F2YWlsID0gMDsKKyAgICBlbnRyeS0+ZHNrVXNlZCA9IDA7CisjZW5kaWYKKworICAgIGVudHJ5LT5kc2tFcnJvckZsYWcgPQorICAgICAgICAoZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlID49IDAKKyAgICAgICAgICAgID8gZW50cnktPmRza0F2YWlsIDwgKHVuc2lnbmVkIGxvbmcgbG9uZylkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UKKyAgICAgICAgICAgIDogMTAwIC0gZW50cnktPmRza1BlcmNlbnQgPD0gKHVuc2lnbmVkIGludClkaXNrc1tkaXNrbnVtXS5taW5wZXJjZW50KSA/IDEgOiAwOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2YXJfZXh0ZW5zaWJsZV9kaXNrKC4uLgorICogQXJndW1lbnRzOgorICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKKyAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAorICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncyAKKyAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAorICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKKyAqIHdyaXRlX21ldGhvZAorICogCisgKi8KK3VfY2hhciAgICAgICAgICoKK3Zhcl9leHRlbnNpYmxlX2Rpc2soc3RydWN0IHZhcmlhYmxlICp2cCwKKyAgICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmV0OworCXVuc2lnbmVkIGludAlkaXNrbnVtID0gMDsKKyAgICBzdHJ1Y3QgZHNrX2VudHJ5IGVudHJ5OworICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKKyAgICBzdGF0aWMgY2hhciAgICAgZXJybXNnWzMwMF07CisKIHRyeUFnYWluOgogICAgIGlmIChoZWFkZXJfc2ltcGxlX3RhYmxlCiAgICAgICAgICh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kLCBudW1kaXNrcykpCkBAIC03MzcsMTg5ICs4NTAsODMgQEAKICAgICAgICAgbG9uZ19yZXQgPSBkaXNrc1tkaXNrbnVtXS5taW5wZXJjZW50OwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwogICAgIH0KLSNpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgfHwgZGVmaW5lZChIQVZFX1NUQVRGUykKLSNpZmRlZiBTVEFUX1NUQVRGU19GU19EQVRBCi0gICAgaWYgKHN0YXR2ZnMoZGlza3NbZGlza251bV0ucGF0aCwgJmZzZCkgPT0gLTEpCi0jZWxzZQotICAgIGlmIChzdGF0dmZzKGRpc2tzW2Rpc2tudW1dLnBhdGgsICZ2ZnMpID09IC0xKQotI2VuZGlmCi0gICAgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3Qgb3BlbiBkZXZpY2UgJXNcbiIsCi0gICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLmRldmljZSk7Ci0gICAgICAgIHNldFBlcnJvcnN0YXR1cygic3RhdHZmcyBkZXYvZGlzayIpOworCisgICAgcmV0ID0gZmlsbF9kc2tfZW50cnkoZGlza251bSwgJmVudHJ5KTsKKyAgICBpZiAocmV0IDwgMCkgewogICAgICAgICBpZiAoIWV4YWN0KQogICAgICAgICAgICAgZ290byB0cnlBZ2FpbjsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotI2lmZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKLSAgICB2ZnMuZl9ibG9ja3MgPSBmc2QuZmRfYnRvdDsKLSAgICB2ZnMuZl9iZnJlZSA9IGZzZC5mZF9iZnJlZTsKLSAgICB2ZnMuZl9iYXZhaWwgPSBmc2QuZmRfYmZyZWVuOwotICAgIHZmcy5mX2JzaXplID0gMTAyNDsgICAgICAgICAvKiAgVWx0cml4IGZfYnNpemUgaXMgYSBWTSBwYXJhbWV0ZXIgYXBwYXJlbnRseS4gICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfT0RTKQotICAgIHZmcy5mX2Jsb2NrcyA9IHZmcy5mX3NwYXJlWzBdOwotICAgIHZmcy5mX2JmcmVlID0gdmZzLmZfc3BhcmVbMV07Ci0gICAgdmZzLmZfYmF2YWlsID0gdmZzLmZfc3BhcmVbMl07Ci0jZW5kaWYKLSAgICBwZXJjZW50ID0KLSAgICAgICAgdmZzLmZfYmxvY2tzID09IDAgPyAwIDoKLSAgICAgICAgdmZzLmZfYmF2YWlsIDw9IDAgPyAxMDAgOgotICAgICAgICAoaW50KSAoKGRvdWJsZSkgKHZmcy5mX2Jsb2NrcyAtIHZmcy5mX2JmcmVlKSAvCi0gICAgICAgICAgICAgICAoZG91YmxlKSAodmZzLmZfYmxvY2tzIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAodmZzLmZfYmZyZWUgLSB2ZnMuZl9iYXZhaWwpKSAqIDEwMC4wICsgMC41KTsKLSAgICBtdWx0aXBsaWVyID0gKGZsb2F0KXZmcy5mX2JzaXplIC8gKGZsb2F0KTEwMjQuMDsKLSNpZmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUKLSAgICBpZiAodmZzLmZfZnJzaXplID4gMjU1KQotICAgICAgICBtdWx0aXBsaWVyID0gKGZsb2F0KXZmcy5mX2Zyc2l6ZSAvIChmbG9hdCkxMDI0LjA7Ci0jZW5kaWYKLSAgICBhdmFpbCA9IChsb25nKSh2ZnMuZl9iYXZhaWwgKiBtdWx0aXBsaWVyKTsKLSAgICBpc2Vycm9yID0gKGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZSA+PSAwID8KLSAgICAgICAgICAgICAgIHZmcy5mX2JhdmFpbCA8IChkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UvbXVsdGlwbGllcikgOgotICAgICAgICAgICAgICAgMTAwIC0gcGVyY2VudCA8PSBkaXNrc1tkaXNrbnVtXS5taW5wZXJjZW50KSA/IDEgOiAwOwotI2lmIGRlZmluZWQoU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRklMRVMpIHx8IGRlZmluZWQgU1RSVUNUX1NUQVRGU19IQVNfRl9GQVZBSUwKLSAgICBwZXJjZW50X2lub2RlID0gdmZzLmZfZmF2YWlsIDw9IDAgPyAxMDAgOgotICAgICAgICAoaW50KSAoKGRvdWJsZSkgKHZmcy5mX2ZpbGVzIC0gdmZzLmZfZmZyZWUpIC8KLSAgICAgICAgICAgICAgIChkb3VibGUpICh2ZnMuZl9maWxlcyAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZmcy5mX2ZmcmVlIC0gdmZzLmZfZmF2YWlsKSkgKiAxMDAuMCArIDAuNSk7Ci0jZWxzZQotI2lmIGRlZmluZWQoU1RSVUNUX1NUQVRGU19IQVNfRl9GSUxFUykgJiYgZGVmaW5lZChTVFJVQ1RfU1RBVEZTX0hBU19GX0ZGUkVFKQotICAgcGVyY2VudF9pbm9kZSA9IHZmcy5mX2ZpbGVzID09IDAgPyAxMDAuMCA6Ci0gICAgICAoaW50KSAoKGRvdWJsZSkgKHZmcy5mX2ZpbGVzIC0gdmZzLmZfZmZyZWUpIC8KLQkgICAgICAgICAgKGRvdWJsZSkgKHZmcy5mX2ZpbGVzKSAqIDEwMC4wICsgMC41KTsKLSNlbmRpZiAKLSNlbmRpZiAvKiBkZWZpbmVkKFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTKSAqLyAKKwogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CiAgICAgY2FzZSBESVNLVE9UQUw6Ci0gICAgICAgIGlmICggdmZzLmZfYmxvY2tzID4gKCBJTlQzMl9NQVggLyBtdWx0aXBsaWVyICkpCi0gICAgICAgICAgICBsb25nX3JldCA9IElOVDMyX01BWDsKKyAgICAgICAgaWYgKGVudHJ5LmRza1RvdGFsID4gTUFYX0lOVF8zMikKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gTUFYX0lOVF8zMjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykodmZzLmZfYmxvY2tzICogbXVsdGlwbGllcik7CisgICAgICAgICAgICBsb25nX3JldCA9IChsb25nKShlbnRyeS5kc2tUb3RhbCk7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLVE9UQUxMT1c6CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrVG90YWwgJiBNQVhfVUlOVF8zMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tUT1RBTEhJR0g6CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrVG90YWwgPj4gMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgICAgIAogICAgIGNhc2UgRElTS0FWQUlMOgotICAgICAgICBpZiAoIHZmcy5mX2JhdmFpbCA+ICggSU5UMzJfTUFYIC8gbXVsdGlwbGllciApKQotICAgICAgICAgICAgbG9uZ19yZXQgPSBJTlQzMl9NQVg7CisgICAgICAgIGlmIChlbnRyeS5kc2tBdmFpbCA+IE1BWF9JTlRfMzIpCisgICAgICAgICAgICBsb25nX3JldCA9IE1BWF9JTlRfMzI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKHZmcy5mX2JhdmFpbCAqIG11bHRpcGxpZXIpOworICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykoZW50cnkuZHNrQXZhaWwpOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS0FWQUlMTE9XOgorICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza0F2YWlsICYgTUFYX1VJTlRfMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLQVZBSUxISUdIOgorICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza0F2YWlsID4+IDMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCiAgICAgY2FzZSBESVNLVVNFRDoKLSAgICAgICAgaWYgKCAodmZzLmZfYmxvY2tzIC0gdmZzLmZfYmZyZWUpID4gKCBJTlQzMl9NQVggLyBtdWx0aXBsaWVyICkpCi0gICAgICAgICAgICBsb25nX3JldCA9IElOVDMyX01BWDsKKyAgICAgICAgaWYgKGVudHJ5LmRza1VzZWQgPiBNQVhfSU5UXzMyKQorICAgICAgICAgICAgbG9uZ19yZXQgPSBNQVhfSU5UXzMyOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb25nX3JldCA9IChsb25nKSgodmZzLmZfYmxvY2tzIC0gdmZzLmZfYmZyZWUpICogbXVsdGlwbGllcik7CisgICAgICAgICAgICBsb25nX3JldCA9IChsb25nKShlbnRyeS5kc2tVc2VkKTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tVU0VETE9XOgorICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza1VzZWQgJiBNQVhfVUlOVF8zMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tVU0VESElHSDoKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tVc2VkID4+IDMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCiAgICAgY2FzZSBESVNLUEVSQ0VOVDoKLSAgICAgICAgbG9uZ19yZXQgPSBwZXJjZW50OworICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza1BlcmNlbnQ7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7Ci0jaWYgZGVmaW5lZChTVFJVQ1RfU1RBVFZGU19IQVNfRl9GSUxFUykgfHwgZGVmaW5lZCAoU1RSVUNUX1NUQVRGU19IQVNfRl9GSUxFUykKKwogICAgIGNhc2UgRElTS1BFUkNFTlROT0RFOgotICAgICAgICBsb25nX3JldCA9IHBlcmNlbnRfaW5vZGU7CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrUGVyY2VudElub2RlOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwotI2VuZGlmCisKICAgICBjYXNlIEVSUk9SRkxBRzoKLSAgICAgICAgbG9uZ19yZXQgPSBpc2Vycm9yOworICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza0Vycm9yRmxhZzsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKwogICAgIGNhc2UgRVJST1JNU0c6Ci0gICAgICAgIGlmIChpc2Vycm9yKSB7CisgICAgICAgIGlmIChlbnRyeS5kc2tFcnJvckZsYWcpIHsKICAgICAgICAgICAgIGlmIChkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UgPj0gMCkKICAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAogICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBsZXNzIHRoYW4gJWQgZnJlZSAoPSAlZCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0ucGF0aCwgZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgYXZhaWwpOworICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgZW50cnkuZHNrQXZhaWwpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGxlc3MgdGhhbiAlZCUlIGZyZWUgKD0gJWQlJSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0ucGF0aCwgZGlza3NbZGlza251bV0ubWlucGVyY2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgKGludCllbnRyeS5kc2tQZXJjZW50KTsKICAgICAgICAgICAgIGVycm1zZ1sgc2l6ZW9mKGVycm1zZyktMSBdID0gMDsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlcnJtc2dbMF0gPSAwOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlcnJtc2cpOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKGVycm1zZykpOwogICAgIH0KLSNlbHNlCi0jaWYgSEFWRV9GU1RBQl9ICi0gICAgLyoKLSAgICAgKiByZWFkIHRoZSBkaXNrIGluZm9ybWF0aW9uIAotICAgICAqLwotICAgIGlmICgoZmlsZSA9IG9wZW4oZGlza3NbZGlza251bV0uZGV2aWNlLCAwKSkgPCAwKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZG4ndCBvcGVuIGRldmljZSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0uZGV2aWNlKTsKLSAgICAgICAgc2V0UGVycm9yc3RhdHVzKCJvcGVuIGRldi9kaXNrIik7Ci0gICAgICAgIGlmICghZXhhY3QpCi0gICAgICAgICAgICBnb3RvIHRyeUFnYWluOwotICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgIH0KLSAgICBsc2VlayhmaWxlLCAobG9uZykgKFNCTE9DSyAqIERFVl9CU0laRSksIDApOwotICAgIGlmIChyZWFkKGZpbGUsIChjaGFyICopICZmaWxlc3lzLCBTQlNJWkUpICE9IFNCU0laRSkgewotICAgICAgICBzZXRQZXJyb3JzdGF0dXMoIm9wZW4gZGV2L2Rpc2siKTsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkVycm9yIHJlYWRpbmcgZGV2aWNlICVzXG4iLAotICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5kZXZpY2UpOwotICAgICAgICBjbG9zZShmaWxlKTsKLSAgICAgICAgaWYgKCFleGFjdCkKLSAgICAgICAgICAgIGdvdG8gdHJ5QWdhaW47Ci0gICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgfQotICAgIGNsb3NlKGZpbGUpOwotICAgIHRvdGFsYmxrcyA9IGZpbGVzeXMuZnNfZHNpemU7Ci0gICAgZnJlZSA9IGZpbGVzeXMuZnNfY3N0b3RhbC5jc19uYmZyZWUgKiBmaWxlc3lzLmZzX2ZyYWcgKwotICAgICAgICBmaWxlc3lzLmZzX2NzdG90YWwuY3NfbmZmcmVlOwotICAgIHVzZWQgPSB0b3RhbGJsa3MgLSBmcmVlOwotICAgIGF2YWlsYmxrcyA9IHRvdGFsYmxrcyAqICgxMDAgLSBmaWxlc3lzLmZzX21pbmZyZWUpIC8gMTAwOwotICAgIGF2YWlsID0gYXZhaWxibGtzID4gdXNlZCA/IGF2YWlsYmxrcyAtIHVzZWQgOiAwOwotICAgIHBlcmNlbnQgPQotICAgICAgICB0b3RhbGJsa3MgPT0gMCA/IDAgOgotICAgICAgICBhdmFpbGJsa3MgPT0gMCA/IDEwMCA6Ci0gICAgICAgIChpbnQpICgoZG91YmxlKSB1c2VkIC8gKGRvdWJsZSkgdG90YWxibGtzICogMTAwLjAgKyAwLjUpOwotICAgIG11bHRpcGxpZXIgPSAoZmxvYXQpZmlsZXN5cy5mc19mc2l6ZSAvIChmbG9hdCkxMDI0LjA7Ci0gICAgaXNlcnJvciA9Ci0gICAgICAgIChkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UgPj0gMAotICAgICAgICAgICAgPyBhdmFpbCAqIG11bHRpcGxpZXIgPCBkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UKLSAgICAgICAgICAgIDogMTAwIC0gcGVyY2VudCA8PSBkaXNrc1tkaXNrbnVtXS5taW5wZXJjZW50KSA/IDEgOiAwOwotICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBESVNLVE9UQUw6Ci0gICAgICAgIGlmICggdG90YWxibGtzID4gKCBJTlQzMl9NQVggLyBtdWx0aXBsaWVyICkpCi0gICAgICAgICAgICBsb25nX3JldCA9IElOVDMyX01BWDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykodG90YWxibGtzICogbXVsdGlwbGllcik7Ci0gICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7Ci0gICAgY2FzZSBESVNLQVZBSUw6Ci0gICAgICAgIGlmICggYXZhaWwgPiAoIElOVDMyX01BWCAvIG11bHRpcGxpZXIgKSkKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gSU5UMzJfTUFYOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb25nX3JldCA9IChsb25nKShhdmFpbCAqIG11bHRpcGxpZXIpOwotICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwotICAgIGNhc2UgRElTS1VTRUQ6Ci0gICAgICAgIGlmICggdXNlZCA+ICggIElOVDMyX01BWCAvIG11bHRpcGxpZXIgKSkKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gSU5UMzJfTUFYOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb25nX3JldCA9IChsb25nKSh1c2VkICogbXVsdGlwbGllcik7Ci0gICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7Ci0gICAgY2FzZSBESVNLUEVSQ0VOVDoKLSAgICAgICAgbG9uZ19yZXQgPSBwZXJjZW50OwotICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwotICAgIGNhc2UgRVJST1JGTEFHOgotICAgICAgICBsb25nX3JldCA9IGlzZXJyb3I7Ci0gICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7Ci0gICAgY2FzZSBFUlJPUk1TRzoKLSAgICAgICAgaWYgKGlzZXJyb3IpIHsKLSAgICAgICAgICAgIGlmIChkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UgPj0gMCkKLSAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAotICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBsZXNzIHRoYW4gJWQgZnJlZSAoPSAlZCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0ucGF0aCwgZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWwgKiBmaWxlc3lzLmZzX2ZzaXplIC8gMTAyNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICIlczogbGVzcyB0aGFuICVkJSUgZnJlZSAoPSAlZCUlKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5wYXRoLCBkaXNrc1tkaXNrbnVtXS5taW5wZXJjZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudCk7Ci0gICAgICAgICAgICBlcnJtc2dbIHNpemVvZihlcnJtc2cpLTEgXSA9IDA7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXJybXNnWzBdID0gMDsKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXJybXNnKTsKLSAgICAgICAgcmV0dXJuICgodV9jaGFyICopIChlcnJtc2cpKTsKLSAgICB9Ci0jZW5kaWYKLSNlbmRpZgogICAgIHJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oCmluZGV4IDZiYzViMTQuLjIwZTkzMzIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmgKQEAgLTcsNyArNyw3IEBACiAKIHZvaWQgICAgICAgICAgICBpbml0X2Rpc2sodm9pZCk7CiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCiAKICAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2V4dGVuc2libGVfZGlzazsKIApAQCAtMjEsNSArMjEsMTEgQEAKICNkZWZpbmUgRElTS1VTRUQgOAogI2RlZmluZSBESVNLUEVSQ0VOVCA5CiAjZGVmaW5lIERJU0tQRVJDRU5UTk9ERSAxMAorI2RlZmluZSBESVNLVE9UQUxMT1cgMTEKKyNkZWZpbmUgRElTS1RPVEFMSElHSCAxMgorI2RlZmluZSBESVNLQVZBSUxMT1cgMTMKKyNkZWZpbmUgRElTS0FWQUlMSElHSCAxNAorI2RlZmluZSBESVNLVVNFRExPVyAxNQorI2RlZmluZSBESVNLVVNFREhJR0ggMTYKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfRElTS19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzNzYxMAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYwpAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAqIGRpc2tfaHcuYworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisKKyNpbmNsdWRlICJzdHJ1Y3QuaCIKKyNpbmNsdWRlICJkaXNrLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCisjaWYgVVNJTkdfVUNEX1NOTVBfRVJST1JNSUJfTU9EVUxFCisjaW5jbHVkZSAiZXJyb3JtaWIuaCIKKyNlbHNlCisjZGVmaW5lIHNldFBlcnJvcnN0YXR1cyh4KSBzbm1wX2xvZ19wZXJyb3IoeCkKKyNlbmRpZgorCisvKgorICogICogY29uZmlnIGZpbGUgcGFyc2luZyByb3V0aW5lcworICogICAqLworc3RhdGljIHZvaWQgICAgICAgZGlza19mcmVlX2NvbmZpZyh2b2lkKTsKK3N0YXRpYyB2b2lkICAgICAgIGRpc2tfcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3N0YXRpYyB2b2lkICAgICAgIGRpc2tfcGFyc2VfY29uZmlnX2FsbChjb25zdCBjaGFyICosIGNoYXIgKik7CisKK3N0YXRpYyBuZXRzbm1wX2ZzeXNfaW5mbyAqKiBfZXhwYW5kX2Rpc2tfYXJyYXkoIGNoYXIgKmNwdHIgKTsKKworI2RlZmluZSBNQVhfSU5UXzMyIDB4N2ZmZmZmZmYKKyNkZWZpbmUgTUFYX1VJTlRfMzIgMHhmZmZmZmZmZgorCitpbnQgICAgICAgICAgICAgbnVtZGlza3M7CitpbnQgICAgICAgICAgICAgYWxsRGlza3NJbmNsdWRlZCA9IDA7CitpbnQgICAgICAgICAgICAgbWF4ZGlza3MgPSAwOworbmV0c25tcF9mc3lzX2luZm8gKipkaXNrcyA9IE5VTEw7CisKK3N0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9kaXNrX3ZhcmlhYmxlc1tdID0geworICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtNSUJJTkRFWH19LAorICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUk5BTUV9fSwKKyAge0RJU0tERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tERVZJQ0V9fSwKKyAge0RJU0tNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS01JTklNVU19fSwKKyAge0RJU0tNSU5QRVJDRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS01JTlBFUkNFTlR9fSwKKyAge0RJU0tUT1RBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tUT1RBTH19LAorICB7RElTS0FWQUlMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0FWQUlMfX0sCisgIHtESVNLVVNFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tVU0VEfX0sCisgIHtESVNLUEVSQ0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tQRVJDRU5UfX0sCisgIHtESVNLUEVSQ0VOVE5PREUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLUEVSQ0VOVE5PREV9fSwKKyAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9SRkxBR319LAorICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9STVNHfX0sCisgICB7RElTS1RPVEFMTE9XLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVE9UQUxMT1d9fSwKKyAgIHtESVNLVE9UQUxISUdILCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVE9UQUxISUdIfX0sCisgICB7RElTS0FWQUlMTE9XLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLQVZBSUxMT1d9fSwKKyAgIHtESVNLQVZBSUxISUdILCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLQVZBSUxISUdIfX0sCisgICB7RElTS1VTRURMT1csIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tVU0VETE9XfX0sCisgICB7RElTS1VTRURISUdILCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVVNFREhJR0h9fSwKK307CisKKy8qCisgKiBEZWZpbmUgdGhlIE9JRCBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIG1pYiB0cmVlIHRoYXQgd2UncmUKKyAqIHJlZ2lzdGVyaW5nIHVuZGVybmVhdGggCisgKi8KK29pZCAgICAgICAgICAgICBkaXNrX3ZhcmlhYmxlc19vaWRbXSA9IHsgTkVUU05NUF9VQ0RBVklTX01JQiwgTkVUU05NUF9ESVNLTUlCTlVNLCAxIH07CisKK3ZvaWQKK2luaXRfZGlza19odyh2b2lkKQoreworICAvKgorICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgdG8gaGFuZGxlIG91ciBtaWIgdHJlZSAKKyAgICovCisgIFJFR0lTVEVSX01JQigidWNkLXNubXAvZGlzayIsIGV4dGVuc2libGVfZGlza192YXJpYWJsZXMsIHZhcmlhYmxlMiwKKwkgICAgICAgZGlza192YXJpYWJsZXNfb2lkKTsKKworICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGlzayIsIGRpc2tfcGFyc2VfY29uZmlnLAorCQkJCWRpc2tfZnJlZV9jb25maWcsCisJCQkJInBhdGggWyBtaW5zcGFjZSB8IG1pbnBlcmNlbnQlIF0iKTsKKyAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImluY2x1ZGVBbGxEaXNrcyIsIGRpc2tfcGFyc2VfY29uZmlnX2FsbCwKKwkJCQlkaXNrX2ZyZWVfY29uZmlnLAorCQkJCSJtaW5wZXJjZW50JSIpOworICBhbGxEaXNrc0luY2x1ZGVkID0gMDsKK30KKworc3RhdGljIHZvaWQKK2Rpc2tfZnJlZV9jb25maWcodm9pZCkKK3sKKyAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworCisgIGZvciAoIGVudHJ5ICA9IG5ldHNubXBfZnN5c19nZXRfZmlyc3QoKTsKKyAgICAgICAgZW50cnkgIT0gTlVMTDsKKyAgICAgICAgZW50cnkgID0gbmV0c25tcF9mc3lzX2dldF9uZXh0KCBlbnRyeSApKSB7CisKKyAgICAgIGVudHJ5LT5taW5zcGFjZSAgID0gLTE7CisgICAgICBlbnRyeS0+bWlucGVyY2VudCA9IC0xOworICAgICAgZW50cnktPmZsYWdzICAgICAmPSB+TkVUU05NUF9GU19GTEFHX1VDRDsKKyAgfQorICBpZiAoZGlza3MpIHsKKyAgICAgZnJlZSggZGlza3MgKTsKKyAgICAgZGlza3MgPSBOVUxMOworICAgICBtYXhkaXNrcyA9IG51bWRpc2tzID0gMDsKKyAgfQorICBhbGxEaXNrc0luY2x1ZGVkID0gMDsKK30KKworc3RhdGljIHZvaWQgCitkaXNrX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKK3sKKyAgY2hhciAgICAgICAgICAgIHBhdGhbU1RSTUFYXTsKKyAgaW50ICAgICAgICAgICAgIG1pbnBlcmNlbnQ7CisgIGludCAgICAgICAgICAgICBtaW5zcGFjZTsKKyAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworCisgIC8qCisgICAqIEVuc3VyZSB0aGVyZSBpcyBzcGFjZSBmb3IgdGhlIG5ldyBlbnRyeQorICAgKi8KKyAgaWYgKG51bWRpc2tzID09IG1heGRpc2tzKSB7CisgICAgICBpZiAoIV9leHBhbmRfZGlza19hcnJheSggY3B0ciApKSAKKyAgICAgICAgICByZXR1cm47CisgIH0KKworICAvKgorICAgKiByZWFkIGRpc2sgcGF0aCAoZWcsIC8xIG9yIC91c3IpIAorICAgKi8KKyAgY29weV9ud29yZChjcHRyLCBwYXRoLCBzaXplb2YocGF0aCkpOworICBjcHRyID0gc2tpcF9ub3Rfd2hpdGUoY3B0cik7CisgIGNwdHIgPSBza2lwX3doaXRlKGNwdHIpOworCQorICAvKgorICAgKiByZWFkIG9wdGlvbmFsIG1pbmltdW0gZGlzayB1c2FnZSBzcGVjIAorICAgKi8KKyAgaWYoY3B0ciAhPSBOVUxMKSB7CisgICAgICBpZihzdHJjaHIoY3B0ciwgJyUnKSA9PSBOVUxMKSB7CisgICAgICAgICAgbWluc3BhY2UgPSBhdG9pKGNwdHIpOworICAgICAgICAgIG1pbnBlcmNlbnQgPSAtMTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAgIG1pbnNwYWNlID0gLTE7CisgICAgICAgICAgbWlucGVyY2VudCA9IGF0b2koY3B0cik7CisgICAgICB9CisgIH0gZWxzZSB7CisgICAgICBtaW5zcGFjZSA9IE5FVFNOTVBfREVGRElTS01JTklNVU1TUEFDRTsKKyAgICAgIG1pbnBlcmNlbnQgPSAtMTsKKyAgfQorCisgIC8qCisgICAqIGNoZWNrIGlmIHRoZSBkaXNrIGFscmVhZHkgZXhpc3RzLCBpZiBzbyB0aGVuIG1vZGlmeSBpdHMKKyAgICogcGFyYW1ldGVycy4gaWYgaXQgZG9lcyBub3QgZXhpc3QgdGhlbiBhZGQgaXQKKyAgICovCisgIGVudHJ5ID0gbmV0c25tcF9mc3lzX2J5X3BhdGgoIHBhdGgsIE5FVFNOTVBfRlNfRklORF9DUkVBVEUgKTsKKyAgaWYgKCBlbnRyeSApIHsKKyAgICAgIGVudHJ5LT5taW5zcGFjZSAgID0gbWluc3BhY2U7CisgICAgICBlbnRyeS0+bWlucGVyY2VudCA9IG1pbnBlcmNlbnQ7CisgICAgICBlbnRyeS0+ZmxhZ3MgICAgIHw9IE5FVFNOTVBfRlNfRkxBR19VQ0Q7CisgICAgICBkaXNrc1tudW1kaXNrcysrXSA9IGVudHJ5OworICB9Cit9CisKK3N0YXRpYyB2b2lkIAorZGlza19wYXJzZV9jb25maWdfYWxsKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQoreworICBpbnQgICAgICAgICAgICAgbWlucGVyY2VudCA9IERJU0tNSU5QRVJDRU5UOworICBuZXRzbm1wX2ZzeXNfaW5mbyAqZW50cnk7CisgICAgCisgIC8qCisgICAqIHJlYWQgdGhlIG1pbmltdW0gZGlzayB1c2FnZSBwZXJjZW50CisgICAqLworICBpZihjcHRyICE9IE5VTEwpIHsKKyAgICAgIGlmKHN0cmNocihjcHRyLCAnJScpICE9IE5VTEwpIHsKKyAgICAgICAgICBtaW5wZXJjZW50ID0gYXRvaShjcHRyKTsKKyAgICAgIH0KKyAgfQorICAvKgorICAgKiBpZiB3ZSBoYXZlIGFscmVhZHkgc2VlbiB0aGUgImluY2x1ZGVBbGxEaXNrcyIgZGlyZWN0aXZlCisgICAqIHRoZW4gc2VhcmNoIGZvciB0aGUgZGlzayBpbiB0aGUgImRpc2tzIiBhcnJheSBhbmQgbW9kaWZ5CisgICAqIHRoZSB2YWx1ZXMuIGlmIHdlIGhhdmVudCBzZWVuIHRoZSAiaW5jbHVkZUFsbERpc2tzIgorICAgKiBkaXJlY3RpdmUgdGhlbiBpbmNsdWRlIHRoaXMgZGlzaworICAgKi8KKyAgaWYoYWxsRGlza3NJbmNsdWRlZCkgeworICAgICAgY29uZmlnX3BlcnJvcigiaW5jbHVkZUFsbERpc2tzIGFscmVhZHkgc3BlY2lmaWVkLiIpOworICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6IGluY2x1ZGVBbGxEaXNrcyAlcyIsIGNwdHIpOworICB9CisgIGVsc2UgeworCisgICAgICBuZXRzbm1wX2ZzeXNfbG9hZCggTlVMTCwgTlVMTCApOyAgLyogUHJpbWUgdGhlIGZzeXMgSC9XIG1vZHVsZSAqLworICAgICAgZm9yICggZW50cnkgID0gbmV0c25tcF9mc3lzX2dldF9maXJzdCgpOworICAgICAgICAgICAgZW50cnkgIT0gTlVMTDsKKyAgICAgICAgICAgIGVudHJ5ICA9IG5ldHNubXBfZnN5c19nZXRfbmV4dCggZW50cnkgKSkgeworCisgICAgICAgICAgaWYgKCAhKGVudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19BQ1RJVkUgKSkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgZW50cnktPm1pbnNwYWNlICAgPSAtMTsKKyAgICAgICAgICBlbnRyeS0+bWlucGVyY2VudCA9IG1pbnBlcmNlbnQ7CisgICAgICAgICAgZW50cnktPmZsYWdzICAgICB8PSBORVRTTk1QX0ZTX0ZMQUdfVUNEOworICAgICAgICAgIC8qCisgICAgICAgICAgICogRW5zdXJlIHRoZXJlIGlzIHNwYWNlIGZvciB0aGUgbmV3IGVudHJ5CisgICAgICAgICAgICovCisgICAgICAgICAgaWYgKG51bWRpc2tzID09IG1heGRpc2tzKSB7CisgICAgICAgICAgICAgIGlmICghX2V4cGFuZF9kaXNrX2FycmF5KCBlbnRyeS0+ZGV2aWNlICkpIAorICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgICBkaXNrc1tudW1kaXNrcysrXSA9IGVudHJ5OworICAgICAgfQorICAgICAgYWxsRGlza3NJbmNsdWRlZCA9IDE7CisgIH0KK30KKworCitzdGF0aWMgaW50IF9wZXJjZW50KCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbCApIHsKKyAgICBmbG9hdCB2PXZhbHVlLCB0PXRvdGFsLCBwY3Q7CisKKyAgICAvKiBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvICovCisgICAgaWYgKHRvdGFsID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgcGN0ICA9ICh2KjEwMCkvdDsgICAvKiBDYWxjdWxhdGUgcGVyY2VudGFnZSB1c2luZyBmbG9hdGluZyBwb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpdGhtZXRpYywgdG8gYXZvaWQgb3ZlcmZsb3cgZXJyb3JzICovCisgICAgcGN0ICs9IDAuNTsgICAgICAgICAvKiByb3VuZGluZyAqLworICAgIHJldHVybiAoaW50KXBjdDsKK30KKworc3RhdGljIG5ldHNubXBfZnN5c19pbmZvICoqCitfZXhwYW5kX2Rpc2tfYXJyYXkoIGNoYXIgKmNwdHIgKSB7CisKKyAgICBpZiAoIG1heGRpc2tzID09IDAgKQorICAgICAgICBtYXhkaXNrcyAgPSA1MDsKKyAgICBlbHNlCisgICAgICAgIG1heGRpc2tzICo9IDI7CisKKyAgICBkaXNrcyA9IHJlYWxsb2MoIGRpc2tzLCBtYXhkaXNrcyAqIHNpemVvZiggbmV0c25tcF9mc3lzX2luZm8qKSk7CisgICAgaWYgKCFkaXNrcykgeworICAgICAgICBjb25maWdfcGVycm9yKCJtYWxsb2MgZmFpbGVkIGZvciBuZXcgZGlzayBhbGxvY2F0aW9uLiIpOworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogJXMiLCBjcHRyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCBtYXhkaXNrcyA9PSA1MCApCisgICAgICAgIG1lbXNldChkaXNrcywgICAgICAgICAgICAgIDAsICBtYXhkaXNrcyAgICogc2l6ZW9mKCBuZXRzbm1wX2ZzeXNfaW5mbyopKTsKKyAgICBlbHNlCisgICAgICAgIG1lbXNldChkaXNrcyArIG1heGRpc2tzLzIsIDAsICBtYXhkaXNrcy8yICogc2l6ZW9mKCBuZXRzbm1wX2ZzeXNfaW5mbyopKTsKKworICAgIHJldHVybiBkaXNrczsKK30KKworCisvKgorICogdmFyX2V4dGVuc2libGVfZGlzayguLi4KKyAqIEFyZ3VtZW50czoKKyAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCisgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKKyAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCisgKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKKyAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCisgKiB3cml0ZV9tZXRob2QKKyAqIAorICovCit1X2NoYXIgICAgICAgICAqCit2YXJfZXh0ZW5zaWJsZV9kaXNrKHN0cnVjdCB2YXJpYWJsZSAqdnAsCisgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGV4YWN0LAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisgICAgaW50ICAgICAgICAgICAgIGRpc2tudW0gPSAwOworICBuZXRzbm1wX2ZzeXNfaW5mbyAqZW50cnk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKyAgICBzdGF0aWMgbG9uZyAgICAgbG9uZ19yZXQ7CisgICAgc3RhdGljIGNoYXIgICAgIGVycm1zZ1szMDBdOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKworICAgIC8qIFVwZGF0ZSB0aGUgZnN5cyBIL1cgbW9kdWxlICovCisgICAgY2FjaGUgPSBuZXRzbm1wX2ZzeXNfZ2V0X2NhY2hlKCk7CisgICAgbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkKGNhY2hlKTsKKwordHJ5QWdhaW46CisgICAgaWYgKGhlYWRlcl9zaW1wbGVfdGFibGUKKyAgICAgICAgKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QsIG51bWRpc2tzKSkKKyAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICBkaXNrbnVtID0gbmFtZVsqbGVuZ3RoIC0gMV0gLSAxOworICAgIGVudHJ5ID0gZGlza3NbZGlza251bV07CisgICAgaWYgKCAhZW50cnkgKSB7CisgICAgICAgIGlmICghZXhhY3QgfHwgIShlbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfVUNEKSkKKyAgICAgICAgICAgIGdvdG8gdHJ5QWdhaW47CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisgICAgY2FzZSBNSUJJTkRFWDoKKyAgICAgICAgbG9uZ19yZXQgPSBkaXNrbnVtICsgMTsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIEVSUk9STkFNRTogICAgICAgICAgICAvKiBESVNLUEFUSCAqLworICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlbnRyeS0+cGF0aCk7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKWVudHJ5LT5wYXRoKTsKKyAgICBjYXNlIERJU0tERVZJQ0U6CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVudHJ5LT5kZXZpY2UpOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKillbnRyeS0+ZGV2aWNlKTsKKyAgICBjYXNlIERJU0tNSU5JTVVNOgorICAgICAgICBsb25nX3JldCA9IGVudHJ5LT5taW5zcGFjZTsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tNSU5QRVJDRU5UOgorICAgICAgICBsb25nX3JldCA9IGVudHJ5LT5taW5wZXJjZW50OworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCisgICAgY2FzZSBESVNLVE9UQUw6CisgICAgICAgIHZhbCA9IG5ldHNubXBfZnN5c19zaXplX3VsbChlbnRyeSk7CisgICAgICAgIGlmICh2YWwgPiBNQVhfSU5UXzMyKQorICAgICAgICAgICAgbG9uZ19yZXQgPSBNQVhfSU5UXzMyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb25nX3JldCA9IChsb25nKXZhbDsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tUT1RBTExPVzoKKyAgICAgICAgbG9uZ19yZXQgPSBuZXRzbm1wX2ZzeXNfc2l6ZV91bGwoZW50cnkpICYgTUFYX1VJTlRfMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLVE9UQUxISUdIOgorICAgICAgICBsb25nX3JldCA9IG5ldHNubXBfZnN5c19zaXplX3VsbChlbnRyeSkgPj4gMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgICAgIAorICAgIGNhc2UgRElTS0FWQUlMOgorICAgICAgICB2YWwgPSBuZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKGVudHJ5KTsKKyAgICAgICAgaWYgKHZhbCA+IE1BWF9JTlRfMzIpCisgICAgICAgICAgICBsb25nX3JldCA9IE1BWF9JTlRfMzI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpdmFsOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS0FWQUlMTE9XOgorICAgICAgICBsb25nX3JldCA9IG5ldHNubXBfZnN5c19hdmFpbF91bGwoZW50cnkpICYgTUFYX1VJTlRfMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLQVZBSUxISUdIOgorICAgICAgICBsb25nX3JldCA9IG5ldHNubXBfZnN5c19hdmFpbF91bGwoZW50cnkpID4+IDMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCisgICAgY2FzZSBESVNLVVNFRDoKKyAgICAgICAgdmFsID0gbmV0c25tcF9mc3lzX3VzZWRfdWxsKGVudHJ5KTsKKyAgICAgICAgaWYgKHZhbCA+IE1BWF9JTlRfMzIpCisgICAgICAgICAgICBsb25nX3JldCA9IE1BWF9JTlRfMzI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpdmFsOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS1VTRURMT1c6CisgICAgICAgIGxvbmdfcmV0ID0gbmV0c25tcF9mc3lzX3VzZWRfdWxsKGVudHJ5KSAmIE1BWF9VSU5UXzMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS1VTRURISUdIOgorICAgICAgICBsb25nX3JldCA9IG5ldHNubXBfZnN5c191c2VkX3VsbChlbnRyeSkgPj4gMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKKyAgICBjYXNlIERJU0tQRVJDRU5UOgorICAgICAgICBsb25nX3JldCA9IF9wZXJjZW50KCBlbnRyeS0+dXNlZCwgZW50cnktPnNpemUgKTsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKworICAgIGNhc2UgRElTS1BFUkNFTlROT0RFOgorICAgICAgICBsb25nX3JldCA9IF9wZXJjZW50KCBlbnRyeS0+aW51bXNfdG90YWwgLSBlbnRyeS0+aW51bXNfYXZhaWwsIGVudHJ5LT5pbnVtc190b3RhbCApOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCisgICAgY2FzZSBFUlJPUkZMQUc6CisgICAgICAgIGxvbmdfcmV0ID0gMDsKKyAgICAgICAgdmFsID0gbmV0c25tcF9mc3lzX2F2YWlsX3VsbChlbnRyeSk7CisgICAgICAgIGlmICgoIGVudHJ5LT5taW5zcGFjZSA+PSAwICkgJiYKKyAgICAgICAgICAgICggdmFsIDwgZW50cnktPm1pbnNwYWNlICkpCisgICAgICAgICAgICBsb25nX3JldCA9IDE7CisgICAgICAgIGVsc2UgaWYgKCggZW50cnktPm1pbnBlcmNlbnQgPj0gMCApICYmCisgICAgICAgICAgICAgICAgIChfcGVyY2VudCggZW50cnktPmF2YWlsLCBlbnRyeS0+c2l6ZSApIDwgZW50cnktPm1pbnBlcmNlbnQgKSkKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gMTsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKworICAgIGNhc2UgRVJST1JNU0c6CisgICAgICAgIGVycm1zZ1swXSA9IDA7CisgICAgICAgIHZhbCA9IG5ldHNubXBfZnN5c19hdmFpbF91bGwoZW50cnkpOworICAgICAgICBpZiAoKCBlbnRyeS0+bWluc3BhY2UgPj0gMCApICYmCisgICAgICAgICAgICAoIHZhbCA8IGVudHJ5LT5taW5zcGFjZSApKQorICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCisgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGxlc3MgdGhhbiAlZCBmcmVlICg9ICVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cGF0aCwgZW50cnktPm1pbnNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgdmFsKTsKKyAgICAgICAgZWxzZSBpZiAoKCBlbnRyeS0+bWlucGVyY2VudCA+PSAwICkgJiYKKyAgICAgICAgICAgICAgICAgKF9wZXJjZW50KCBlbnRyeS0+YXZhaWwsIGVudHJ5LT5zaXplICkgPCBlbnRyeS0+bWlucGVyY2VudCApKQorICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCisgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGxlc3MgdGhhbiAlZCUlIGZyZWUgKD0gJWQlJSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnBhdGgsIGVudHJ5LT5taW5wZXJjZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgX3BlcmNlbnQoIGVudHJ5LT5hdmFpbCwgZW50cnktPnNpemUgKSk7CisgICAgICAgIGVycm1zZ1sgc2l6ZW9mKGVycm1zZyktMSBdID0gMDsKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXJybXNnKTsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopIChlcnJtc2cpKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0MmVkOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogIFRlbXBsYXRlIE1JQiBncm91cCBpbnRlcmZhY2UgLSBkaXNrLmgKKyAqCisgKi8KKyNpZm5kZWYgX01JQkdST1VQX0RJU0tfSFdfSAorI2RlZmluZSBfTUlCR1JPVVBfRElTS19IV19ICisKK3ZvaWQgICAgICAgICAgICBpbml0X2Rpc2tfaHcodm9pZCk7CisKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2ZzeXMpCisKKyAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2V4dGVuc2libGVfZGlzazsKKworI2luY2x1ZGUgIm1pYmRlZnMuaCIKKworI2RlZmluZSBESVNLREVWSUNFIDMKKyNkZWZpbmUgRElTS01JTklNVU0gNAorI2RlZmluZSBESVNLTUlOUEVSQ0VOVCA1CisjZGVmaW5lIERJU0tUT1RBTCA2CisjZGVmaW5lIERJU0tBVkFJTCA3CisjZGVmaW5lIERJU0tVU0VEIDgKKyNkZWZpbmUgRElTS1BFUkNFTlQgOQorI2RlZmluZSBESVNLUEVSQ0VOVE5PREUgMTAKKyNkZWZpbmUgRElTS1RPVEFMTE9XIDExCisjZGVmaW5lIERJU0tUT1RBTEhJR0ggMTIKKyNkZWZpbmUgRElTS0FWQUlMTE9XIDEzCisjZGVmaW5lIERJU0tBVkFJTEhJR0ggMTQKKyNkZWZpbmUgRElTS1VTRURMT1cgMTUKKyNkZWZpbmUgRElTS1VTRURISUdIIDE2CisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0RJU0tfSFdfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYwppbmRleCAwOGVmM2YxLi40ZWE4OTg3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYwpAQCAtMjUsMTMgKzI1LDEzIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2luY2x1ZGUgPG1hdGguaD4KKwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KIAotLyoKLSAqIGhlYWRlcl9nZW5lcmljKCkgY29tZXMgZnJvbSBoZXJlIAotICovCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogCiAvKgogICogaW5jbHVkZSBvdXIgLmggZmlsZSAKQEAgLTUyLDI3ICs1MiwzNCBAQAogc3RhdGljIGludCAgICAgIGNhY2hlX2Rpc2tuciA9IC0xOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2xhcmlzMiAqLwogCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAvKgogICogaGFuZGxlIGRpc2sgc3RhdGlzdGljcyB2aWEgbGlicGVyZnN0YXQKICAqLworI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogc3RhdGljIHBlcmZzdGF0X2Rpc2tfdCAqcHNfZGlzazsJLyogc3RvcmFnZSBmb3IgYWxsIGRpc2sgdmFsdWVzICovCiBzdGF0aWMgaW50IHBzX251bWRpc2tzOwkJCS8qIG51bWJlciBvZiBkaXNrcyBpbiBzeXN0ZW0sIG1heSBjaGFuZ2Ugd2hpbGUgcnVubmluZyAqLwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKGJzZGkzKSB8fCBkZWZpbmVkKGJzZGk0KQorI2lmIGRlZmluZWQoYnNkaTMpIHx8IGRlZmluZWQoYnNkaTQpIHx8IGRlZmluZWQob3BlbmJzZDQpCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2lmZGVmIG9wZW5ic2Q0CisjaW5jbHVkZSA8c3lzL2Rpc2suaD4KKyNlbHNlCiAjaW5jbHVkZSA8c3lzL2Rpc2tzdGF0cy5oPgorI2VuZGlmCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJzZGkgKi8KIAotI2lmIGRlZmluZWQgKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGZyZWVic2Q1KQorI2lmIGRlZmluZWQoSEFWRV9HRVRERVZTKSB8fCBkZWZpbmVkKEhBVkVfREVWU1RBVF9HRVRERVZTKQogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwMQorI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+ICAgICAgIC8qIGZvciBDUFVTVEFURVMgaW4gZGV2c3RhdC5oICovCi0jZWxpZiAhZGVmaW5lZChkcmFnb25mbHkpCisjZWxpZiBIQVZFX1NZU19ES1NUQVRfSAogI2luY2x1ZGUgPHN5cy9ka3N0YXQuaD4KICNlbmRpZgogI2luY2x1ZGUgPGRldnN0YXQuaD4KQEAgLTg0LDEyICs5MSwxNyBAQAogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyZWVic2QgKi8KIAotI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNworI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICNkZWZpbmUgR0VUREVWUyh4KSBkZXZzdGF0X2dldGRldnMoTlVMTCwgKHgpKQogI2Vsc2UKICAgI2RlZmluZSBHRVRERVZTKHgpIGdldGRldnMoKHgpKQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkIChsaW51eCkKKyNkZWZpbmUgRElTS0lPX1NBTVBMRV9JTlRFUlZBTCA1Cit2b2lkIGRldmxhX2dldHN0YXRzKHVuc2lnbmVkIGludCByZWdubywgdm9pZCAqIGR1bW15KTsKKyNlbmRpZiAvKiBsaW51eCAqLworCiAjaWYgZGVmaW5lZCAoZGFyd2luKQogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8SU9LaXQvSU9LaXRMaWIuaD4KQEAgLTEwMCwxNCArMTEyLDIwIEBACiBzdGF0aWMgbWFjaF9wb3J0X3QgbWFzdGVyUG9ydDsJCS8qIHRvIGNvbW11bmljYXRlIHdpdGggSS9PIEtpdAkqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkYXJ3aW4gKi8KIAotdm9pZCAgICAgICAgICAgIGRpc2tpb19wYXJzZV9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOworI2lmICFkZWZpbmVkKHNvbGFyaXMyKSAmJiAhKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCitzdGF0aWMgaW50ICAgICAgZ2V0c3RhdHModm9pZCk7CisjZW5kaWYKIAotI2lmIGRlZmluZWQgKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGZyZWVic2Q1KQorI2lmIGRlZmluZWQgKEhBVkVfR0VUREVWUykgfHwgZGVmaW5lZChIQVZFX0RFVlNUQVRfR0VUREVWUykKIHZvaWQJCWRldmxhX2dldHN0YXRzKHVuc2lnbmVkIGludCByZWdubywgdm9pZCAqZHVtbXkpOwogI2VuZGlmCiAKIEZJTEUgICAgICAgICAgICpmaWxlOwogCisjaWZkZWYgbGludXgKK3N0YXRpYyBpbnQJZGlza2lvX2ZyZWVfY29uZmlnKGludCwgaW50LCB2b2lkICosIHZvaWQgKik7CisjZW5kaWYKKwogICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCiAJICogIEluaXRpYWxpc2F0aW9uICYgY29tbW9uIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwpAQCAtMTQyLDE5ICsxNjAsMzAgQEAKICAgICAgKi8KIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZGlza2lvX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7RElTS0lPX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHsxfX0sCi0gICAgICAgIHtESVNLSU9fREVWSUNFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezJ9fSwKLSAgICAgICAge0RJU0tJT19OUkVBRCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7M319LAotICAgICAgICB7RElTS0lPX05XUklUVEVOLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHs0fX0sCi0gICAgICAgIHtESVNLSU9fUkVBRFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezV9fSwKLSAgICAgICAge0RJU0tJT19XUklURVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezZ9fSwKLSNpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGZyZWVic2Q1KQotICAgICAgICB7RElTS0lPX0xBMSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7OX19LAotICAgICAgICB7RElTS0lPX0xBNSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7MTB9fSwKLSAgICAgICAge0RJU0tJT19MQTE1LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHsxMX19LAorICAgICAgICB7RElTS0lPX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7MX19LAorICAgICAgICB7RElTS0lPX0RFVklDRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7Mn19LAorICAgICAgICB7RElTS0lPX05SRUFELCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7M319LAorICAgICAgICB7RElTS0lPX05XUklUVEVOLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7NH19LAorICAgICAgICB7RElTS0lPX1JFQURTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7NX19LAorICAgICAgICB7RElTS0lPX1dSSVRFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezZ9fSwKKyNpZiBkZWZpbmVkKEhBVkVfR0VUREVWUykgfHwgZGVmaW5lZChIQVZFX0RFVlNUQVRfR0VUREVWUykgfHwgZGVmaW5lZChsaW51eCkKKyAgICAgICAge0RJU0tJT19MQTEsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHs5fX0sCisgICAgICAgIHtESVNLSU9fTEE1LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7MTB9fSwKKyAgICAgICAge0RJU0tJT19MQTE1LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7MTF9fSwKICNlbmRpZgotICAgICAgICB7RElTS0lPX05SRUFEWCwgQVNOX0NPVU5URVI2NCwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHsxMn19LAotICAgICAgICB7RElTS0lPX05XUklUVEVOWCwgQVNOX0NPVU5URVI2NCwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHsxM319LAorICAgICAgICB7RElTS0lPX05SRUFEWCwgQVNOX0NPVU5URVI2NCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7MTJ9fSwKKyAgICAgICAge0RJU0tJT19OV1JJVFRFTlgsIEFTTl9DT1VOVEVSNjQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezEzfX0sCiAgICAgfTsKIAogICAgIC8qCkBAIC0xOTIsNyArMjIxLDcgQEAKICAgICBJT01hc3RlclBvcnQoYm9vdHN0cmFwX3BvcnQsICZtYXN0ZXJQb3J0KTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgLyoKICAgICAgKiBpbml0aWFsaXplIHZhbHVlcyB0byBnYXRoZXIgaW5mb3JtYXRpb24gb24gZmlyc3QgcmVxdWVzdAogICAgICAqLwpAQCAtMjAwLDE0ICsyMjksNTQgQEAKICAgICBwc19kaXNrID0gTlVMTDsKICNlbmRpZgogCi0jaWYgZGVmaW5lZCAoZnJlZWJzZDQpIHx8IGRlZmluZWQoZnJlZWJzZDUpCi0JZGV2bGFfZ2V0c3RhdHMoMCwgTlVMTCk7Ci0JLyogY29sbGVjdCBMQSBkYXRhIHJlZ3VsYXJseSAqLwotCXNubXBfYWxhcm1fcmVnaXN0ZXIoRElTS0lPX1NBTVBMRV9JTlRFUlZBTCwgU0FfUkVQRUFULCBkZXZsYV9nZXRzdGF0cywgTlVMTCk7CisjaWYgZGVmaW5lZCAoSEFWRV9HRVRERVZTKSB8fCBkZWZpbmVkKEhBVkVfREVWU1RBVF9HRVRERVZTKSB8fCBkZWZpbmVkKGxpbnV4KQorICAgIGRldmxhX2dldHN0YXRzKDAsIE5VTEwpOworICAgIC8qIGNvbGxlY3QgTEEgZGF0YSByZWd1bGFybHkgKi8KKyAgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKERJU0tJT19TQU1QTEVfSU5URVJWQUwsIFNBX1JFUEVBVCwgZGV2bGFfZ2V0c3RhdHMsIE5VTEwpOwogI2VuZGlmCiAKKworI2lmZGVmIGxpbnV4CisgICAgY2hhciAqYXBwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sIGFwcCwgImRpc2tpb19leGNsdWRlX2ZkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX0ZEKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgYXBwLCAiZGlza2lvX2V4Y2x1ZGVfbG9vcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19MT09QKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgYXBwLCAiZGlza2lvX2V4Y2x1ZGVfcmFtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX1JBTSk7CisKKyAgICAgICAgLyogb3IgcG9zc2libGUgYW4gZXhjbHVzaW9uIHBhdHRlcm4/ICovCisKKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisJICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1BSRV9VUERBVEVfQ09ORklHLAorCSAgICAgICAgICAgICAgICAgICBkaXNraW9fZnJlZV9jb25maWcsIE5VTEwpOworCisjZW5kaWYKIH0KIAorI2lmZGVmIGxpbnV4CisvKiB0byBkbzogbWFrZSBzdXJlIGRpc2tpb19mcmVlX2NvbmZpZygpIGdldHMgaW52b2tlZCB1cG9uIFNJR0hVUC4gKi8KK3N0YXRpYyBpbnQKK2Rpc2tpb19mcmVlX2NvbmZpZyhpbnQgbWFqb3IsIGludCBtaW5vciwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCit7CisgICAgREVCVUdNU0dUTCgoImRpc2tpbyIsICJmcmVlIGNvbmZpZyAlZFxuIiwKKwkJbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorCQkJCSAgICAgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19SQU0pKSk7CisgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKwkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX0ZELCAgIDApOworICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisJCQkgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19MT09QLCAwKTsKKyAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorCQkJICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fUkFNLCAgMCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCiAjaWZkZWYgc29sYXJpczIKIGludAogZ2V0X2Rpc2soaW50IGRpc2tucikKQEAgLTQyMiwxMiArNDkxLDI4OSBAQAogfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBic2RpICovCiAKLSNpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGZyZWVic2Q1KQorI2lmIGRlZmluZWQob3BlbmJzZDQpCitzdGF0aWMgaW50ICAgICAgbmRpc2s7CitzdGF0aWMgc3RydWN0IGRpc2tzdGF0cyAqZGs7CitzdGF0aWMgY2hhciAgICoqZGtuYW1lOworCitzdGF0aWMgaW50CitnZXRzdGF0cyh2b2lkKQoreworICAgIHRpbWVfdCAgICAgICAgICBub3c7CisgICAgaW50ICAgICAgICAgICAgIG1pYlsyXTsKKyAgICBjaGFyICAgICAgICAgICAqdCwgKnRwLCp0ZTsKKyAgICBzaXplX3QgICAgICAgICAgc2l6ZSwgZGtuX3NpemU7CisgICAgaW50ICAgICAgICAgICAgIGk7CisKKyAgICBub3cgPSB0aW1lKE5VTEwpOworICAgIGlmIChjYWNoZV90aW1lICsgQ0FDSEVfVElNRU9VVCA+IG5vdykgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgbWliWzBdID0gQ1RMX0hXOworICAgIG1pYlsxXSA9IEhXX0RJU0tTVEFUUzsKKyAgICBzaXplID0gMDsKKyAgICBpZiAoc3lzY3RsKG1pYiwgMiwgTlVMTCwgJnNpemUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICBwZXJyb3IoIkNhbid0IGdldCBzaXplIG9mIEhXX0RJU0tTVEFUUyBtaWIiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChuZGlzayAhPSBzaXplIC8gc2l6ZW9mKCpkaykpIHsKKyAgICAgICAgaWYgKGRrKQorICAgICAgICAgICAgZnJlZShkayk7CisgICAgICAgIGlmIChka25hbWUpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZGlzazsgaSsrKQorICAgICAgICAgICAgICAgIGlmIChka25hbWVbaV0pCisgICAgICAgICAgICAgICAgICAgIGZyZWUoZGtuYW1lW2ldKTsKKyAgICAgICAgICAgIGZyZWUoZGtuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBuZGlzayA9IHNpemUgLyBzaXplb2YoKmRrKTsKKyAgICAgICAgaWYgKG5kaXNrID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGtuYW1lID0gbWFsbG9jKG5kaXNrICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgICBtaWJbMF0gPSBDVExfSFc7CisgICAgICAgIG1pYlsxXSA9IEhXX0RJU0tOQU1FUzsKKyAgICAgICAgaWYgKHN5c2N0bChtaWIsIDIsIE5VTEwsICZka25fc2l6ZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoIkNhbid0IGdldCBzaXplIG9mIEhXX0RJU0tOQU1FUyBtaWIiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRlID0gdHAgPSB0ID0gbWFsbG9jKGRrbl9zaXplKTsKKyAgICAgICAgaWYgKHN5c2N0bChtaWIsIDIsIHQsICZka25fc2l6ZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoIkNhbid0IGdldCBzaXplIG9mIEhXX0RJU0tOQU1FUyBtaWIiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZGlzazsgaSsrKSB7CisJICAgIHdoaWxlICh0ZS10IDwgZGtuX3NpemUgJiYgKnRlICE9ICcsJykgdGUrKzsKKwkgICAgKnRlKysgPSAnXDAnOworICAgICAgICAgICAgZGtuYW1lW2ldID0gc3RyZHVwKHRwKTsKKyAgICAgICAgICAgIHRwID0gdGU7CisgICAgICAgIH0KKyAgICAgICAgZnJlZSh0KTsKKyAgICAgICAgZGsgPSBtYWxsb2MobmRpc2sgKiBzaXplb2YoKmRrKSk7CisgICAgfQorICAgIG1pYlswXSA9IENUTF9IVzsKKyAgICBtaWJbMV0gPSBIV19ESVNLU1RBVFM7CisgICAgaWYgKHN5c2N0bChtaWIsIDIsIGRrLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIHBlcnJvcigiQ2FuJ3QgZ2V0IEhXX0RJU0tTVEFUUyBtaWIiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNhY2hlX3RpbWUgPSBub3c7CisgICAgcmV0dXJuIDE7Cit9CisKK3VfY2hhciAgICAgICAgICoKK3Zhcl9kaXNraW8oc3RydWN0IHZhcmlhYmxlICogdnAsCisgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisgICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OworICAgIHN0YXRpYyBzdHJ1Y3QgY291bnRlcjY0IGM2NF9yZXQ7CisgICAgdW5zaWduZWQgaW50ICAgIGluZHg7CisKKyAgICBpZiAoZ2V0c3RhdHMoKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoZWFkZXJfc2ltcGxlX3RhYmxlCisgICAgICAgICh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kLCBuZGlzaykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaW5keCA9ICh1bnNpZ25lZCBpbnQpIChuYW1lWypsZW5ndGggLSAxXSAtIDEpOworICAgIGlmIChpbmR4ID49IG5kaXNrKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisgICAgY2FzZSBESVNLSU9fSU5ERVg6CisgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpIGluZHggKyAxOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworICAgIGNhc2UgRElTS0lPX0RFVklDRToKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZGtuYW1lW2luZHhdKTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgZGtuYW1lW2luZHhdOworICAgIGNhc2UgRElTS0lPX05SRUFEOgorICAgICAgICBsb25nX3JldCA9ICh1bnNpZ25lZCBsb25nKSAoZGtbaW5keF0uZHNfcmJ5dGVzKSAmIDB4ZmZmZmZmZmY7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisgICAgY2FzZSBESVNLSU9fTldSSVRURU46CisgICAgICAgIGxvbmdfcmV0ID0gKHVuc2lnbmVkIGxvbmcpIChka1tpbmR4XS5kc193Ynl0ZXMpICYgMHhmZmZmZmZmZjsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKyAgICBjYXNlIERJU0tJT19SRUFEUzoKKyAgICAgICAgbG9uZ19yZXQgPSAodW5zaWduZWQgbG9uZykgZGtbaW5keF0uZHNfcnhmZXIgJiAweGZmZmZmZmZmOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworICAgIGNhc2UgRElTS0lPX1dSSVRFUzoKKyAgICAgICAgbG9uZ19yZXQgPSAodW5zaWduZWQgbG9uZykgZGtbaW5keF0uZHNfd3hmZXIgJiAweGZmZmZmZmZmOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworICAgIGNhc2UgRElTS0lPX05SRUFEWDoKKyAgICAgICAgKnZhcl9sZW4gPSBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCk7CisgICAgICAgIGM2NF9yZXQubG93ID0gZGtbaW5keF0uZHNfcmJ5dGVzICYgMHhmZmZmZmZmZjsKKyAgICAgICAgYzY0X3JldC5oaWdoID0gZGtbaW5keF0uZHNfcmJ5dGVzID4+IDMyOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGM2NF9yZXQ7CisgICAgY2FzZSBESVNLSU9fTldSSVRURU5YOgorICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KTsKKyAgICAgICAgYzY0X3JldC5sb3cgPSBka1tpbmR4XS5kc19yYnl0ZXMgJiAweGZmZmZmZmZmOworICAgICAgICBjNjRfcmV0LmhpZ2ggPSBka1tpbmR4XS5kc19yYnl0ZXMgPj4gMzI7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgYzY0X3JldDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEVSUk9SX01TRygiZGlza2lvLmM6IGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzIHJlcXVlc3QuIik7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvcGVuYnNkICovCisKKyNpZmRlZiBfX05ldEJTRF9fCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorc3RhdGljIGludCAgICAgIG5kaXNrOworI2lmZGVmIEhXX0lPU1RBVE5BTUVTCitzdGF0aWMgaW50IG5taWJbMl0gPSB7Q1RMX0hXLCBIV19JT1NUQVROQU1FU307CisjZWxzZQorc3RhdGljIGludCBubWliWzJdID0ge0NUTF9IVywgSFdfRElTS05BTUVTfTsKKyNlbmRpZgorI2lmZGVmIEhXX0RJU0tTVEFUUworI2luY2x1ZGUgPHN5cy9kaXNrLmg+CitzdGF0aWMgaW50IGRtaWJbM10gPSB7Q1RMX0hXLCBIV19ESVNLU1RBVFMsIHNpemVvZihzdHJ1Y3QgZGlza19zeXNjdGwpfTsKK3N0YXRpYyBzdHJ1Y3QgZGlza19zeXNjdGwgKmRrOworI2VuZGlmCisjaWZkZWYgSFdfSU9TVEFUUworI2luY2x1ZGUgPHN5cy9pb3N0YXQuaD4KK3N0YXRpYyBpbnQgZG1pYlszXSA9IHtDVExfSFcsIEhXX0lPU1RBVFMsIHNpemVvZihzdHJ1Y3QgaW9fc3lzY3RsKX07CitzdGF0aWMgc3RydWN0IGlvX3N5c2N0bCAqZGs7CisjZW5kaWYKK3N0YXRpYyBjaGFyICAgKipka25hbWU7CisKK3N0YXRpYyBpbnQKK2dldHN0YXRzKHZvaWQpCit7CisgICAgdGltZV90ICAgICAgICAgIG5vdzsKKyAgICBjaGFyICAgICAgICAgICAqdCwgKnRwOworICAgIHNpemVfdCAgICAgICAgICBzaXplLCBka25fc2l6ZTsKKyAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgIG5vdyA9IHRpbWUoTlVMTCk7CisgICAgaWYgKGNhY2hlX3RpbWUgKyBDQUNIRV9USU1FT1VUID4gbm93KSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBzaXplID0gMDsKKyAgICBpZiAoc3lzY3RsKGRtaWIsIDMsIE5VTEwsICZzaXplLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgcGVycm9yKCJDYW4ndCBnZXQgc2l6ZSBvZiBIV19ESVNLU1RBVFMvSFdfSU9TVEFUUyBtaWIiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChuZGlzayAhPSBzaXplIC8gZG1pYlsyXSkgeworICAgICAgICBpZiAoZGspCisgICAgICAgICAgICBmcmVlKGRrKTsKKyAgICAgICAgaWYgKGRrbmFtZSkgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5kaXNrOyBpKyspCisgICAgICAgICAgICAgICAgaWYgKGRrbmFtZVtpXSkKKyAgICAgICAgICAgICAgICAgICAgZnJlZShka25hbWVbaV0pOworICAgICAgICAgICAgZnJlZShka25hbWUpOworICAgICAgICB9CisgICAgICAgIG5kaXNrID0gc2l6ZSAvIGRtaWJbMl07CisgICAgICAgIGlmIChuZGlzayA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRrbmFtZSA9IG1hbGxvYyhuZGlzayAqIHNpemVvZihjaGFyICopKTsKKyAgICAgICAgZGtuX3NpemUgPSAwOworICAgICAgICBpZiAoc3lzY3RsKG5taWIsIDIsIE5VTEwsICZka25fc2l6ZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoIkNhbid0IGdldCBzaXplIG9mIEhXX0RJU0tOQU1FUyBtaWIiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHQgPSBtYWxsb2MoZGtuX3NpemUpOworICAgICAgICBpZiAoc3lzY3RsKG5taWIsIDIsIHQsICZka25fc2l6ZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoIkNhbid0IGdldCBzaXplIG9mIEhXX0RJU0tOQU1FUyBtaWIiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDAsIHRwID0gc3RydG9rKHQsICIgIik7IHRwICYmIGkgPCBuZGlzazsgaSsrLAorCSAgICB0cCA9IHN0cnRvayhOVUxMLCAiICIpKSB7CisgICAgICAgICAgICBka25hbWVbaV0gPSBzdHJkdXAodHApOworICAgICAgICB9CisgICAgICAgIGZyZWUodCk7CisgICAgICAgIGRrID0gbWFsbG9jKG5kaXNrICogc2l6ZW9mKCpkaykpOworICAgIH0KKyAgICBpZiAoc3lzY3RsKGRtaWIsIDMsIGRrLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIHBlcnJvcigiQ2FuJ3QgZ2V0IEhXX0RJU0tTVEFUUy9IV19JT1NUQVRTIG1pYiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgY2FjaGVfdGltZSA9IG5vdzsKKyAgICByZXR1cm4gMTsKK30KKwordV9jaGFyICoKK3Zhcl9kaXNraW8oc3RydWN0IHZhcmlhYmxlICogdnAsCisgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisgICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OworICAgIHVuc2lnbmVkIGludCAgICBpbmR4OworCisgICAgaWYgKGdldHN0YXRzKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGVhZGVyX3NpbXBsZV90YWJsZQorICAgICAgICAodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCwgbmRpc2spKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGluZHggPSAodW5zaWduZWQgaW50KSAobmFtZVsqbGVuZ3RoIC0gMV0gLSAxKTsKKyAgICBpZiAoaW5keCA+PSBuZGlzaykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworICAgIGNhc2UgRElTS0lPX0lOREVYOgorICAgICAgICBsb25nX3JldCA9IChsb25nKSBpbmR4ICsgMTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKworICAgIGNhc2UgRElTS0lPX0RFVklDRToKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZGtuYW1lW2luZHhdKTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgZGtuYW1lW2luZHhdOworCisgICAgY2FzZSBESVNLSU9fTlJFQUQ6CisjaWZkZWYgSFdfRElTS1NUQVRTCisgICAgIAlsb25nX3JldCA9IGRrW2luZHhdLmRrX3JieXRlczsKKyNlbmRpZgorI2lmZGVmIEhXX0lPU1RBVFMKKwlpZiAoZGtbaW5keF0udHlwZSA9PSBJT1NUQVRfRElTSykKKwkgICAgbG9uZ19yZXQgPSBka1tpbmR4XS5yYnl0ZXM7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKworICAgIGNhc2UgRElTS0lPX05XUklUVEVOOgorI2lmZGVmIEhXX0RJU0tTVEFUUworICAgICAJbG9uZ19yZXQgPSBka1tpbmR4XS5ka193Ynl0ZXM7CisjZW5kaWYKKyNpZmRlZiBIV19JT1NUQVRTCisJaWYgKGRrW2luZHhdLnR5cGUgPT0gSU9TVEFUX0RJU0spCisJICAgIGxvbmdfcmV0ID0gZGtbaW5keF0ud2J5dGVzOworI2VuZGlmCisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisKKyAgICBjYXNlIERJU0tJT19SRUFEUzoKKyNpZmRlZiBIV19ESVNLU1RBVFMKKyAgICAgCWxvbmdfcmV0ID0gZGtbaW5keF0uZGtfcnhmZXI7CisjZW5kaWYKKyNpZmRlZiBIV19JT1NUQVRTCisJaWYgKGRrW2luZHhdLnR5cGUgPT0gSU9TVEFUX0RJU0spCisJICAgIGxvbmdfcmV0ID0gZGtbaW5keF0ucnhmZXI7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKworICAgIGNhc2UgRElTS0lPX1dSSVRFUzoKKyNpZmRlZiBIV19ESVNLU1RBVFMKKyAgICAgCWxvbmdfcmV0ID0gZGtbaW5keF0uZGtfd3hmZXI7CisjZW5kaWYKKyNpZmRlZiBIV19JT1NUQVRTCisJaWYgKGRrW2luZHhdLnR5cGUgPT0gSU9TVEFUX0RJU0spCisJICAgIGxvbmdfcmV0ID0gZGtbaW5keF0ud3hmZXI7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEVSUk9SX01TRygiZGlza2lvLmM6IGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzIHJlcXVlc3QuIik7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KKworI2lmIGRlZmluZWQoSEFWRV9HRVRERVZTKSB8fCBkZWZpbmVkKEhBVkVfREVWU1RBVF9HRVRERVZTKQogCiAvKiBkaXNrIGxvYWQgYXZlcmFnZSBwYXRjaCBieSBSb2plciAqLwogCiBzdHJ1Y3QgZGV2X2xhIHsKLSNpZiAoIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNyApCisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgICAgICAgc3RydWN0IGJpbnRpbWUgcHJldjsKICNlbHNlCiAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHByZXY7CkBAIC00MzksNyArNzg1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2X2xhICpkZXZsb2FkcyA9IE5VTEw7CiBzdGF0aWMgaW50IG5kZXZzID0gMDsKIAotI2lmICEgKCBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcgKQorI2lmICEgSEFWRV9ERVZTVEFUX0dFVERFVlMKIGRvdWJsZSBkZXZsYV90aW1ldmFsX2RpZmYoc3RydWN0IHRpbWV2YWwgKnQxLCBzdHJ1Y3QgdGltZXZhbCAqdDIpIHsKIAogICAgICAgICBkb3VibGUgZHQxID0gKGRvdWJsZSkgdDEtPnR2X3NlYyArIChkb3VibGUpIHQxLT50dl91c2VjICogMC4wMDAwMDE7CkBAIC00ODgsNyArODM0LDcgQEAKICAgICAgICAgaWYgKG5kZXZzID09IDApIHsKICAgICAgICAgICAgICAgICBuZGV2cyA9IGxhc3RhdC0+ZGluZm8tPm51bWRldnM7CiAgICAgICAgICAgICAgICAgZGV2bG9hZHMgPSAoc3RydWN0IGRldl9sYSAqKSBtYWxsb2MobmRldnMgKiBzaXplb2Yoc3RydWN0IGRldl9sYSkpOwotICAgICAgICAgICAgICAgIGJ6ZXJvKGRldmxvYWRzLCBuZGV2cyAqIHNpemVvZihzdHJ1Y3QgZGV2X2xhKSk7CisgICAgICAgICAgICAgICAgbWVtc2V0KGRldmxvYWRzLCAnXDAnLCBuZGV2cyAqIHNpemVvZihzdHJ1Y3QgZGV2X2xhKSk7CiAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBuZGV2czsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXZsb2Fkc1tpXS5sYTEgPSBkZXZsb2Fkc1tpXS5sYTUgPSBkZXZsb2Fkc1tpXS5sYTE1ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmZGV2bG9hZHNbaV0ucHJldiwgJmxhc3RhdC0+ZGluZm8tPmRldmljZXNbaV0uYnVzeV90aW1lLCBzaXplb2YoZGV2bG9hZHNbaV0ucHJldikpOwpAQCAtNTAxLDcgKzg0Nyw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaT0wOyBpPG5kZXZzOyBpKyspIHsKLSNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAgICAgICAgICAgICAgIGJ1c3lfdGltZSA9IGRldnN0YXRfY29tcHV0ZV9ldGltZSgmbGFzdGF0LT5kaW5mby0+ZGV2aWNlc1tpXS5idXN5X3RpbWUsICZkZXZsb2Fkc1tpXS5wcmV2KTsKICNlbHNlCiAgICAgICAgICAgICAgICAgYnVzeV90aW1lID0gZGV2bGFfdGltZXZhbF9kaWZmKCZkZXZsb2Fkc1tpXS5wcmV2LCAmbGFzdGF0LT5kaW5mby0+ZGV2aWNlc1tpXS5idXN5X3RpbWUpOwpAQCAtNTk3LDE0ICs5NDMsMTQgQEAKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uZGV2aWNlX25hbWUpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5kZXZpY2VfbmFtZTsKICAgICBjYXNlIERJU0tJT19OUkVBRDoKLSNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAgICAgICBsb25nX3JldCA9IChzaWduZWQgbG9uZykgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uYnl0ZXNbREVWU1RBVF9SRUFEXTsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0ID0gKHNpZ25lZCBsb25nKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5ieXRlc19yZWFkOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CiAgICAgY2FzZSBESVNLSU9fTldSSVRURU46Ci0jaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3CisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgICAgICAgbG9uZ19yZXQgPSAoc2lnbmVkIGxvbmcpIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmJ5dGVzW0RFVlNUQVRfV1JJVEVdOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXQgPSAoc2lnbmVkIGxvbmcpIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmJ5dGVzX3dyaXR0ZW47CkBAIC02MTIsNyArOTU4LDcgQEAKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKICAgICBjYXNlIERJU0tJT19OUkVBRFg6CiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpOwotI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNworI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICAgICAgIGxvbmdsb25nX3JldCA9IHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmJ5dGVzW0RFVlNUQVRfUkVBRF07CiAjZWxzZQogICAgICAgICBsb25nbG9uZ19yZXQgPSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5ieXRlc19yZWFkOwpAQCAtNjIyLDcgKzk2OCw3IEBACiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgYzY0X3JldDsKICAgICBjYXNlIERJU0tJT19OV1JJVFRFTlg6CiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpOwotI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNworI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICAgICAgIGxvbmdsb25nX3JldCA9IHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmJ5dGVzW0RFVlNUQVRfV1JJVEVdOwogI2Vsc2UKICAgICAgICAgbG9uZ2xvbmdfcmV0ID0gc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uYnl0ZXNfd3JpdHRlbjsKQEAgLTYzMSwxNCArOTc3LDE0IEBACiAgICAgICAgIGM2NF9yZXQuaGlnaCA9IGxvbmdsb25nX3JldCA+PiAzMjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBjNjRfcmV0OwogICAgIGNhc2UgRElTS0lPX1JFQURTOgotI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNworI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICAgICAgIGxvbmdfcmV0ID0gKHNpZ25lZCBsb25nKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5vcGVyYXRpb25zW0RFVlNUQVRfUkVBRF07CiAjZWxzZQogICAgICAgICBsb25nX3JldCA9IChzaWduZWQgbG9uZykgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0ubnVtX3JlYWRzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CiAgICAgY2FzZSBESVNLSU9fV1JJVEVTOgotI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNworI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICAgICAgIGxvbmdfcmV0ID0gKHNpZ25lZCBsb25nKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5vcGVyYXRpb25zW0RFVlNUQVRfV1JJVEVdOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXQgPSAoc2lnbmVkIGxvbmcpIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLm51bV93cml0ZXM7CkBAIC02ODUsNiArMTAzMSwxMyBAQAogICAgIHVuc2lnbmVkIGxvbmcgIGF2ZXE7CiB9IGxpbnV4X2Rpc2tpbzsKIAorLyogZGlzayBsb2FkIGF2ZXJhZ2VzICovCit0eXBlZGVmIHN0cnVjdCBsaW51eF9kaXNraW9fbGEKK3sKKyAgICB1bnNpZ25lZCBsb25nIHVzZV9wcmV2OworICAgIGRvdWJsZSBsYTEsIGxhNSwgbGExNTsKK30gbGludXhfZGlza2lvX2xhOworCiB0eXBlZGVmIHN0cnVjdCBsaW51eF9kaXNraW9faGVhZGVyCiB7CiAgICAgbGludXhfZGlza2lvKiBpbmRpY2VzOwpAQCAtNjkyLDEwICsxMDQ1LDc5IEBACiAgICAgaW50IGFsbG9jOwogfSBsaW51eF9kaXNraW9faGVhZGVyOwogCit0eXBlZGVmIHN0cnVjdCBsaW51eF9kaXNraW9fbGFfaGVhZGVyCit7CisgICAgbGludXhfZGlza2lvX2xhICogaW5kaWNlczsgICAKKyAgICBpbnQgbGVuZ3RoOworfSBsaW51eF9kaXNraW9fbGFfaGVhZGVyOworCiBzdGF0aWMgbGludXhfZGlza2lvX2hlYWRlciBoZWFkOworc3RhdGljIGxpbnV4X2Rpc2tpb19sYV9oZWFkZXIgbGFfaGVhZDsKIAordm9pZCBkZXZsYV9nZXRzdGF0cyh1bnNpZ25lZCBpbnQgcmVnbm8sIHZvaWQgKiBkdW1teSkgewogCi1pbnQgZ2V0c3RhdHModm9pZCkKKyAgICBzdGF0aWMgZG91YmxlIGV4cG9uMSwgZXhwb241LCBleHBvbjE1OworICAgIGRvdWJsZSBidXN5X3RpbWUsIGJ1c3lfcGVyY2VudDsKKyAgICBpbnQgaWR4OworCisgICAgaWYgKGdldHN0YXRzKCkgPT0gMSkgeworICAgICAgICBFUlJPUl9NU0coImNhbid0IGRvIGRpc2tpbyBnZXRzdGF0cygpXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbGFfaGVhZC5sZW5ndGgpIHsKKyAgICAgICAgbGFfaGVhZC5pbmRpY2VzID0gKGxpbnV4X2Rpc2tpb19sYSAqKSBtYWxsb2MoaGVhZC5sZW5ndGggKiBzaXplb2YobGludXhfZGlza2lvX2xhKSk7CisgICAgICAgIGZvciAoaWR4PTA7IGlkeDxoZWFkLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgICAgIGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMSA9IGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhNSA9IGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMTUgPSAwLjsgCisgICAgICAgICAgICBsYV9oZWFkLmluZGljZXNbaWR4XS51c2VfcHJldiA9IGhlYWQuaW5kaWNlc1tpZHhdLnVzZTsKKyAgICAgICAgfQorICAgICAgICBsYV9oZWFkLmxlbmd0aCA9IGhlYWQubGVuZ3RoOworICAgICAgICBleHBvbjEgPSBleHAoLSgoKGRvdWJsZSlESVNLSU9fU0FNUExFX0lOVEVSVkFMKSAvICgoZG91YmxlKTYwKSkpOworICAgICAgICBleHBvbjUgPSBleHAoLSgoKGRvdWJsZSlESVNLSU9fU0FNUExFX0lOVEVSVkFMKSAvICgoZG91YmxlKTMwMCkpKTsKKyAgICAgICAgZXhwb24xNSA9IGV4cCgtKCgoZG91YmxlKURJU0tJT19TQU1QTEVfSU5URVJWQUwpIC8gKChkb3VibGUpOTAwKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChoZWFkLmxlbmd0aCAtIGxhX2hlYWQubGVuZ3RoKSB7CisgICAgICAgIGxhX2hlYWQuaW5kaWNlcyA9IChsaW51eF9kaXNraW9fbGEgKikgcmVhbGxvYyhsYV9oZWFkLmluZGljZXMsIGhlYWQubGVuZ3RoICogc2l6ZW9mKGxpbnV4X2Rpc2tpb19sYSkpOworICAgICAgICBmb3IgKGlkeD1sYV9oZWFkLmxlbmd0aDsgaWR4PGhlYWQubGVuZ3RoOyBpZHgrKykgeworICAgICAgICAgICAgbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExID0gbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGE1ID0gbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExNSA9IDAuOyAKKyAgICAgICAgICAgIGxhX2hlYWQuaW5kaWNlc1tpZHhdLnVzZV9wcmV2ID0gaGVhZC5pbmRpY2VzW2lkeF0udXNlOworICAgICAgICB9CisgICAgICAgIGxhX2hlYWQubGVuZ3RoID0gaGVhZC5sZW5ndGg7CisgICAgfQorCisgICAgZm9yIChpZHg9MDsgaWR4PGhlYWQubGVuZ3RoOyBpZHgrKykgeworICAgICAgICBidXN5X3RpbWUgPSBoZWFkLmluZGljZXNbaWR4XS51c2UgLSBsYV9oZWFkLmluZGljZXNbaWR4XS51c2VfcHJldjsKKyAgICAgICAgYnVzeV9wZXJjZW50ID0gYnVzeV90aW1lICogMTAwLiAvICgoZG91YmxlKSBESVNLSU9fU0FNUExFX0lOVEVSVkFMKSAvIDEwMDAuOworICAgICAgICBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTEgPSBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTEgKiBleHBvbjEgKyBidXN5X3BlcmNlbnQgKiAoMS4gLSBleHBvbjEpOworICAgICAgICBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTUgPSBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTUgKiBleHBvbjUgKyBidXN5X3BlcmNlbnQgKiAoMS4gLSBleHBvbjUpOworICAgICAgICBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTE1ID0gbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExNSAqIGV4cG9uMTUgKyBidXN5X3BlcmNlbnQgKiAoMS4gLSBleHBvbjE1KTsKKyAgICAgICAgLyoKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCkgdXBkYXRlIGxhMT0lZiBsYTU9JWYgbGExNT0lZlxuIiwKKyAgICAgICAgICBpZHgsIGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMSwgbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGE1LCBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTE1KTsgICAKKyAgICAgICAgKi8KKyAgICAgICAgbGFfaGVhZC5pbmRpY2VzW2lkeF0udXNlX3ByZXYgPSBoZWFkLmluZGljZXNbaWR4XS51c2U7CisgICAgfQorfQorCitpbnQgaXNfZXhjbHVkZWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX0ZEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShzdHJuY21wKG5hbWUsICJmZCIsIDIpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19MT09QKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShzdHJuY21wKG5hbWUsICJsb29wIiwgNCkpKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX1JBTSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoc3RybmNtcChuYW1lLCAicmFtIiwgMykpKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0c3RhdHModm9pZCkKIHsKICAgICBGSUxFKiBwYXJ0czsKICAgICB0aW1lX3Qgbm93OwpAQCAtNzM0LDcgKzExNTYsOCBAQAogCQkgICAgJnBUZW1wLT5tYWpvciwgJnBUZW1wLT5taW5vciwgcFRlbXAtPm5hbWUsCiAJCSAgICAmcFRlbXAtPnJpbywgJnBUZW1wLT5yc2VjdCwKIAkJICAgICZwVGVtcC0+d2lvLCAmcFRlbXAtPndzZWN0KTsKLQkgICAgaGVhZC5sZW5ndGgrKzsKKyAgICAgICAgICAgIGlmICghaXNfZXhjbHVkZWQocFRlbXAtPm5hbWUpKQorCSAgICAgICAgaGVhZC5sZW5ndGgrKzsKIAl9CiAgICAgfQogICAgIGVsc2UgewpAQCAtNzcyLDcgKzExOTUsOCBAQAogICAgICAgICAgICAgICAgZmNsb3NlKHBhcnRzKTsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQotCSAgICBoZWFkLmxlbmd0aCsrOworICAgICAgICAgICAgaWYgKCFpc19leGNsdWRlZChwVGVtcC0+bmFtZSkpCisJICAgICAgICBoZWFkLmxlbmd0aCsrOwogCX0KICAgICB9CiAKQEAgLTgyNiw2ICsxMjUwLDE1IEBACiAgICAgY2FzZSBESVNLSU9fV1JJVEVTOgogICAgICAgbG9uZ19yZXQgPSBoZWFkLmluZGljZXNbaW5keF0ud2lvICYgMHhmZmZmZmZmZjsKICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisgICAgY2FzZSBESVNLSU9fTEExOgorICAgICAgbG9uZ19yZXQgPSBsYV9oZWFkLmluZGljZXNbaW5keF0ubGExOworICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKyAgICBjYXNlIERJU0tJT19MQTU6CisgICAgICBsb25nX3JldCA9IGxhX2hlYWQuaW5kaWNlc1tpbmR4XS5sYTU7CisgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworICAgIGNhc2UgRElTS0lPX0xBMTU6CisgICAgICBsb25nX3JldCA9IGxhX2hlYWQuaW5kaWNlc1tpbmR4XS5sYTE1OworICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKICAgICBjYXNlIERJU0tJT19OUkVBRFg6CiAgICAgICAqdmFyX2xlbiA9IHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KTsKICAgICAgIGM2NF9yZXQubG93ID0gaGVhZC5pbmRpY2VzW2luZHhdLnJzZWN0ICogNTEyICYgMHhmZmZmZmZmZjsKQEAgLTExMDEsNyArMTUzNCw3IEBACiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRhcndpbiAqLwogCiAKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKIC8qCiAgKiBjb2xsZWN0IHN0YXRpc3RpY3MgZm9yIGFsbCBkaXNrcwogICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5oCmluZGV4IDA1NTk2YWIuLjhjZDIwNmIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfTUlCR1JPVVBfRElTS0lPX0gKICNkZWZpbmUgX01JQkdST1VQX0RJU0tJT19ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCiBjb25maWdfYWRkX21pYihVQ0QtRElTS0lPLU1JQikKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYwppbmRleCBhNmI5YjM0Li4wYjcxMWZiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMKQEAgLTMsNiArMyw3IEBACiAgKgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWYgSEFWRV9TVERMSUJfSApAQCAtMTQsMjQgKzE1LDEwIEBACiAjZWxzZQogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSAic3RydWN0LmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotCi0jaWYgZGVmaW5lZChIQVZFX0RMRkNOX0gpICYmIChkZWZpbmVkKEhBVkVfRExPUEVOKSB8fCBkZWZpbmVkKEhBVkVfTElCREwpKSBcCi0gICAgfHwgZGVmaW5lZChXSU4zMikKLQogI2lmIGRlZmluZWQoV0lOMzIpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2Vsc2UKQEAgLTM5LDY4ICsyNiwzMyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiZGxtb2QuaCIKIAotc3RhdGljIHN0cnVjdCBkbG1vZCAqZGxtb2RzOwotc3RhdGljIGludCAgICAgIGRsbW9kX25leHRfaW5kZXggPSAxOwotc3RhdGljIGNoYXIgICAgIGRsbW9kX3BhdGhbMTAyNF07CisjaWZuZGVmIFNOTVBETE1PRFBBVEgKKyNkZWZpbmUgU05NUERMTU9EUEFUSCAiL3Vzci9sb2NhbC9saWIvc25tcC9kbG1vZCIKKyNlbmRpZgogCi1zdGF0aWMgdm9pZCAgICAgZGxtb2RfcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLXN0YXRpYyB2b2lkICAgICBkbG1vZF9mcmVlX2NvbmZpZyh2b2lkKTsKLQotLyoKLSAqIHRoaXMgdmFyaWFibGUgZGVmaW5lcyBmdW5jdGlvbiBjYWxsYmFja3MgYW5kIHR5cGUgcmV0dXJuCi0gKiBpbmZvcm1hdGlvbiBmb3IgdGhlIGRsbW9kIG1pYgotICovCi1zdGF0aWMgc3RydWN0IHZhcmlhYmxlNCBkbG1vZF92YXJpYWJsZXNbXSA9IHsKLSAgICB7RExNT0RORVhUSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2RsbW9kLCAxLCB7MX19LAotICAgIHtETE1PRE5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2RsbW9kRW50cnksIDMsIHsyLCAxLCAyfX0sCi0gICAge0RMTU9EUEFUSCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfZGxtb2RFbnRyeSwgMywgezIsIDEsIDN9fSwKLSAgICB7RExNT0RFUlJPUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9kbG1vZEVudHJ5LCAzLCB7MiwgMSwgNH19LAotICAgIHtETE1PRFNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2RsbW9kRW50cnksIDMsIHsyLCAxLCA1fX0sCitzdHJ1Y3QgZGxtb2QgeworICBzdHJ1Y3QgZGxtb2QgICAqbmV4dDsKKyAgaW50ICAgICAgICAgICAgIGluZGV4OworICBjaGFyICAgICAgICAgICAgbmFtZVs2NCArIDFdOworICBjaGFyICAgICAgICAgICAgcGF0aFsyNTUgKyAxXTsKKyAgY2hhciAgICAgICAgICAgIGVycm9yWzI1NSArIDFdOworICB2b2lkICAgICAgICAgICAqaGFuZGxlOworICBpbnQgICAgICAgICAgICAgc3RhdHVzOwogfTsKIAotc3RhdGljIG9pZCAgICAgIGRsbW9kX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgMTMsIDE0IH07Ci1zdGF0aWMgaW50ICAgICAgZGxtb2RfdmFyaWFibGVzX29pZF9sZW4gPSA5OworI2RlZmluZSBETE1PRF9MT0FERUQJCTEKKyNkZWZpbmUgRExNT0RfVU5MT0FERUQJCTIKKyNkZWZpbmUgRExNT0RfRVJST1IJCTMKKyNkZWZpbmUgRExNT0RfTE9BRAkJNAorI2RlZmluZSBETE1PRF9VTkxPQUQJCTUKKyNkZWZpbmUgRExNT0RfQ1JFQVRFCQk2CisjZGVmaW5lIERMTU9EX0RFTEVURQkJNwogCi12b2lkCi1pbml0X2RsbW9kKHZvaWQpCi17Ci0gICAgUkVHSVNURVJfTUlCKCJkbG1vZCIsIGRsbW9kX3ZhcmlhYmxlcywgdmFyaWFibGU0LCBkbG1vZF92YXJpYWJsZXNfb2lkKTsKK3N0YXRpYyBzdHJ1Y3QgZGxtb2QgKmRsbW9kczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGxtb2RfbmV4dF9pbmRleCA9IDE7CitzdGF0aWMgY2hhciAgICAgZGxtb2RfcGF0aFsxMDI0XTsKIAotICAgIC8qCi0gICAgICogVE9ETzogUkVHSVNURVJfU1lTT1JfRU5UUlkgCi0gICAgICovCi0KLSAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAicmVnaXN0ZXIgbWliXG4iKSk7Ci0KLSAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGxtb2QiLCBkbG1vZF9wYXJzZV9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxtb2RfZnJlZV9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZS1uYW1lIG1vZHVsZS1wYXRoIik7Ci0KLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBwID0gZ2V0ZW52KCJTTk1QRExNT0RQQVRIIik7Ci0gICAgICAgIHN0cmxjcHkoZGxtb2RfcGF0aCwgU05NUERMTU9EUEFUSCwgc2l6ZW9mKGRsbW9kX3BhdGgpKTsKLSAgICAgICAgaWYgKHApIHsKLSAgICAgICAgICAgIGlmIChwWzBdID09IEVOVl9TRVBBUkFUT1JfQ0hBUikgewotICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oZGxtb2RfcGF0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA+PSAxICYmIGRsbW9kX3BhdGhbbGVuIC0gMV0gIT0gRU5WX1NFUEFSQVRPUl9DSEFSKQotICAgICAgICAgICAgICAgICAgICBzdHJsY2F0KGRsbW9kX3BhdGgsIEVOVl9TRVBBUkFUT1IsIHNpemVvZihkbG1vZF9wYXRoKSk7Ci0gICAgICAgICAgICAgICAgc3RybGNhdChkbG1vZF9wYXRoLCBwICsgMSwgc2l6ZW9mKGRsbW9kX3BhdGgpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHN0cmxjcHkoZGxtb2RfcGF0aCwgcCwgc2l6ZW9mKGRsbW9kX3BhdGgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJkbG1vZF9wYXRoOiAlc1xuIiwgZGxtb2RfcGF0aCkpOwotfQotCi12b2lkCi1kZWluaXRfZGxtb2Qodm9pZCkKLXsKLSAgICB1bnJlZ2lzdGVyX21pYihkbG1vZF92YXJpYWJsZXNfb2lkLCBkbG1vZF92YXJpYWJsZXNfb2lkX2xlbik7Ci0gICAgc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGxtb2QiKTsKLX0KLQotc3RydWN0IGRsbW9kICAgKgorc3RhdGljIHN0cnVjdCBkbG1vZCAgICoKIGRsbW9kX2NyZWF0ZV9tb2R1bGUodm9pZCkKIHsKICAgICBzdHJ1Y3QgZGxtb2QgICoqcGRsbW9kLCAqZGxtOwpAQCAtMTIwLDcgKzcyLDcgQEAKICAgICByZXR1cm4gZGxtOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogZGxtb2RfZGVsZXRlX21vZHVsZShzdHJ1Y3QgZGxtb2QgKmRsbSkKIHsKICAgICBzdHJ1Y3QgZGxtb2QgICoqcGRsbW9kOwpAQCAtMjI3LDE0ICsxNzksOSBAQAogI2VuZGlmCiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBkbG1vZF9sb2FkX21vZHVsZShzdHJ1Y3QgZGxtb2QgKmRsbSkKIHsKLSAgICBjaGFyICAgICAgICAgICAgc3ltX2luaXRbNjRdOwotICAgIGNoYXIgICAgICAgICAgICpwLCB0bXBfcGF0aFsyNTVdOwotICAgIGRsX2Z1bmN0aW9uX3B0ciBkbF9pbml0OwotICAgIGNoYXIgICAgICAgICAgICpzdDsKLQogICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJkbG1vZF9sb2FkX21vZHVsZSAlczogJXNcbiIsIGRsbS0+bmFtZSwKICAgICAgICAgICAgICAgICBkbG0tPnBhdGgpKTsKIApAQCAtMjUxLDYgKzE5OCw4IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgeworICAgICAgICBjaGFyICpzdCwgKnAsIHRtcF9wYXRoWzI1NV07CisKICAgICAgICAgZm9yIChwID0gc3RydG9rX3IoZGxtb2RfcGF0aCwgRU5WX1NFUEFSQVRPUiwgJnN0KTsgcDsKICAgICAgICAgICAgICBwID0gc3RydG9rX3IoTlVMTCwgRU5WX1NFUEFSQVRPUiwgJnN0KSkgewogICAgICAgICAgICAgc25wcmludGYodG1wX3BhdGgsIHNpemVvZih0bXBfcGF0aCksICIlcy8lcy4lcyIsIHAsIGRsbS0+cGF0aCwKQEAgLTI2NywyNSArMjE2LDMwIEBACiAgICAgICAgIGlmIChkbG0tPnN0YXR1cyA9PSBETE1PRF9FUlJPUikKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc25wcmludGYoc3ltX2luaXQsIHNpemVvZihzeW1faW5pdCksICJpbml0XyVzIiwgZGxtLT5uYW1lKTsKLSAgICBkbF9pbml0ID0gZGxtb2RfZGxzeW0oZGxtLT5oYW5kbGUsIHN5bV9pbml0KTsKLSAgICBpZiAoZGxfaW5pdCA9PSBOVUxMKSB7Ci0gICAgICAgIGRsbW9kX2RsY2xvc2UoZGxtLT5oYW5kbGUpOwotICAgICAgICBzbnByaW50ZihkbG0tPmVycm9yLCBzaXplb2YoZGxtLT5lcnJvciksCi0gICAgICAgICAgICAgICAgICJkbHN5bSBmYWlsZWQ6IGNhbid0IGZpbmQgXCclc1wnIiwgc3ltX2luaXQpOwotICAgICAgICBkbG0tPnN0YXR1cyA9IERMTU9EX0VSUk9SOwotICAgICAgICByZXR1cm47CisgICAgeworICAgICAgICBjaGFyIHN5bV9pbml0WzY0ICsgc2l6ZW9mKCJpbml0XyIpXTsKKyAgICAgICAgZGxfZnVuY3Rpb25fcHRyIGRsX2luaXQ7CisKKyAgICAgICAgc25wcmludGYoc3ltX2luaXQsIHNpemVvZihzeW1faW5pdCksICJpbml0XyVzIiwgZGxtLT5uYW1lKTsKKyAgICAgICAgZGxfaW5pdCA9IGRsbW9kX2Rsc3ltKGRsbS0+aGFuZGxlLCBzeW1faW5pdCk7CisgICAgICAgIGlmIChkbF9pbml0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGRsbW9kX2RsY2xvc2UoZGxtLT5oYW5kbGUpOworICAgICAgICAgICAgc25wcmludGYoZGxtLT5lcnJvciwgc2l6ZW9mKGRsbS0+ZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgImRsc3ltIGZhaWxlZDogY2FuJ3QgZmluZCBcJyVzXCciLCBzeW1faW5pdCk7CisgICAgICAgICAgICBkbG0tPnN0YXR1cyA9IERMTU9EX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRsX2luaXQoKTsKICAgICB9CiAKLSAgICBkbF9pbml0KCk7CiAgICAgZGxtLT5lcnJvclswXSA9ICdcMCc7CiAgICAgZGxtLT5zdGF0dXMgPSBETE1PRF9MT0FERUQ7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBkbG1vZF91bmxvYWRfbW9kdWxlKHN0cnVjdCBkbG1vZCAqZGxtKQogewotICAgIGNoYXIgICAgICAgICAgICBzeW1fZGVpbml0WzY0XTsKKyAgICBjaGFyICAgICAgICAgICAgc3ltX2RlaW5pdFs2NCArIHNpemVvZigic2h1dGRvd25fIildOwogICAgIGRsX2Z1bmN0aW9uX3B0ciBkbF9kZWluaXQ7CiAKICAgICBpZiAoIWRsbSB8fCBkbG0tPnN0YXR1cyAhPSBETE1PRF9MT0FERUQpCkBAIC0yOTMsMTggKzI0NywyMiBAQAogCiAgICAgc25wcmludGYoc3ltX2RlaW5pdCwgc2l6ZW9mKHN5bV9kZWluaXQpLCAiZGVpbml0XyVzIiwgZGxtLT5uYW1lKTsKICAgICBkbF9kZWluaXQgPSBkbG1vZF9kbHN5bShkbG0tPmhhbmRsZSwgc3ltX2RlaW5pdCk7Ci0gICAgaWYgKGRsX2RlaW5pdCA9PSBOVUxMKSB7Ci0gICAgICAgIHNucHJpbnRmKGRsbS0+ZXJyb3IsIHNpemVvZihkbG0tPmVycm9yKSwKLSAgICAgICAgICAgICAgICAgImRsc3ltIGZhaWxlZDogY2FuJ3QgZmluZCBcJyVzXCciLCBzeW1fZGVpbml0KTsKLSAgICB9IGVsc2UgeworICAgIGlmICghZGxfZGVpbml0KSB7CisgICAgICAgIHNucHJpbnRmKHN5bV9kZWluaXQsIHNpemVvZihzeW1fZGVpbml0KSwgInNodXRkb3duXyVzIiwgZGxtLT5uYW1lKTsKKyAgICAgICAgZGxfZGVpbml0ID0gZGxtb2RfZGxzeW0oZGxtLT5oYW5kbGUsIHN5bV9kZWluaXQpOworICAgIH0KKyAgICBpZiAoZGxfZGVpbml0KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJDYWxsaW5nICVzKClcbiIsIHN5bV9kZWluaXQpKTsKICAgICAgICAgZGxfZGVpbml0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgIk5vIGRlc3RydWN0b3IgZm9yICVzXG4iLCBkbG0tPm5hbWUpKTsKICAgICB9CiAgICAgZGxtb2RfZGxjbG9zZShkbG0tPmhhbmRsZSk7CiAgICAgZGxtLT5zdGF0dXMgPSBETE1PRF9VTkxPQURFRDsKICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAiTW9kdWxlICVzIHVubG9hZGVkXG4iLCBkbG0tPm5hbWUpKTsKIH0KIAotc3RydWN0IGRsbW9kICAgKgorc3RhdGljIHN0cnVjdCBkbG1vZCAgICoKIGRsbW9kX2dldF9ieV9pbmRleChpbnQgaWluZGV4KQogewogICAgIHN0cnVjdCBkbG1vZCAgICpkbG1vZDsKQEAgLTMxNiw2ICsyNzQsMTAgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIEZ1bmN0aW9ucyB0byBwYXJzZSBjb25maWcgbGluZXMKKyAqLworCiBzdGF0aWMgdm9pZAogZGxtb2RfcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewpAQCAtMzI4LDcgKzI5MCw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLyoKLSAgICAgKiByZW1vdmUgY29tbWVudHMgCisgICAgICogcmVtb3ZlIGNvbW1lbnRzCiAgICAgICovCiAgICAgKihjcHRyICsgc3RyY3NwbihjcHRyLCAiIztcclxuIikpID0gJ1wwJzsKIApAQCAtMzM3LDcgKzI5OSw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIC8qCi0gICAgICogZHluYW1pYyBtb2R1bGUgbmFtZSAKKyAgICAgKiBkeW5hbWljIG1vZHVsZSBuYW1lCiAgICAgICovCiAgICAgZGxtX25hbWUgPSBzdHJ0b2tfcihjcHRyLCAiXHQgIiwgJnN0KTsKICAgICBpZiAoZGxtX25hbWUgPT0gTlVMTCkgewpAQCAtMzQ4LDcgKzMxMCw3IEBACiAgICAgc3RybGNweShkbG0tPm5hbWUsIGRsbV9uYW1lLCBzaXplb2YoZGxtLT5uYW1lKSk7CiAKICAgICAvKgotICAgICAqIGR5bmFtaWMgbW9kdWxlIHBhdGggCisgICAgICogZHluYW1pYyBtb2R1bGUgcGF0aAogICAgICAqLwogICAgIGRsbV9wYXRoID0gc3RydG9rX3IoTlVMTCwgIlx0ICIsICZzdCk7CiAgICAgaWYgKGRsbV9wYXRoKQpAQCAtMzc2LDEzICszMzgsMjMgQEAKICAgICBkbG1vZHMgPSBOVUxMOwogfQogCisvKgorICogRnVuY3Rpb25zIHRvIGhhbmRsZSBTTk1QIG1hbmFnZW1lbnQKKyAqLworCisjZGVmaW5lIERMTU9ETkVYVElOREVYIAkJMQorI2RlZmluZSBETE1PRElOREVYICAgICAJCTIKKyNkZWZpbmUgRExNT0ROQU1FICAgICAgCQkzCisjZGVmaW5lIERMTU9EUEFUSCAgICAgIAkJNAorI2RlZmluZSBETE1PREVSUk9SICAgICAJCTUKKyNkZWZpbmUgRExNT0RTVEFUVVMgICAgCQk2CiAKIC8qCiAgKiBoZWFkZXJfZGxtb2QoLi4uCiAgKiBBcmd1bWVudHM6CiAgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQogICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCi0gKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAorICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncwogICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCiAgKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAogICogd3JpdGVfbWV0aG9kCkBAIC00MTQsNyArMzg2LDcgQEAKIH0KIAogCi11X2NoYXIgICAgICAgICAqCitzdGF0aWMgdV9jaGFyICAgICAgICAgKgogdmFyX2RsbW9kKHN0cnVjdCB2YXJpYWJsZSAqIHZwLAogICAgICAgICAgIG9pZCAqIG5hbWUsCiAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLApAQCAtNDIyLDcgKzM5NCw3IEBACiB7CiAKICAgICAvKgotICAgICAqIHZhcmlhYmxlcyB3ZSBtYXkgdXNlIGxhdGVyIAorICAgICAqIHZhcmlhYmxlcyB3ZSBtYXkgdXNlIGxhdGVyCiAgICAgICovCiAKICAgICAqd3JpdGVfbWV0aG9kID0gMDsgICAgICAgICAvKiBhc3N1bWUgaXQgaXNuJ3Qgd3JpdGFibGUgZm9yIHRoZSB0aW1lIGJlaW5nICovCkBAIC00MzAsMTAgKzQwMiwxMCBAQAogCiAgICAgaWYgKGhlYWRlcl9kbG1vZCh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwKICAgICAgICAgICAgICAgICAgICAgIHZhcl9sZW4sIHdyaXRlX21ldGhvZCkgPT0gTUFUQ0hfRkFJTEVEKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgotICAgICAqIHRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHZhbHVlIGFzc2lnbm1lbnRzIGZvciB0aGUgbWliIHJlc3VsdHMuIAorICAgICAqIHRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHZhbHVlIGFzc2lnbm1lbnRzIGZvciB0aGUgbWliIHJlc3VsdHMuCiAgICAgICovCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIERMTU9ETkVYVElOREVYOgpAQCAtNDQzLDExMiArNDE1LDExIEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfZGxtb2RcbiIsCiAgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogCi0vKgotICogaGVhZGVyX2RsbW9kRW50cnkoLi4uCi0gKiBBcmd1bWVudHM6Ci0gKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQotICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCi0gKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAotICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCi0gKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAotICogd3JpdGVfbWV0aG9kCi0gKiAKLSAqLwotCi0KLXN0YXRpYyBzdHJ1Y3QgZGxtb2QgKgotaGVhZGVyX2RsbW9kRW50cnkoc3RydWN0IHZhcmlhYmxlICp2cCwKLSAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKLSNkZWZpbmUgRExNT0RFTlRSWV9OQU1FX0xFTkdUSCAxMgotICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKLSAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OwotICAgIHN0cnVjdCBkbG1vZCAgICpkbG0gPSAwOwotICAgIGludCAgICAgICAgICAgICBkbG1vZF9pbmRleDsKLQotICAgIG1lbWNweShuZXduYW1lLCB2cC0+bmFtZSwgdnAtPm5hbWVsZW4gKiBzaXplb2Yob2lkKSk7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7Ci0KLSAgICBmb3IgKGRsbW9kX2luZGV4ID0gMTsgZGxtb2RfaW5kZXggPCBkbG1vZF9uZXh0X2luZGV4OyBkbG1vZF9pbmRleCsrKSB7Ci0gICAgICAgIGRsbSA9IGRsbW9kX2dldF9ieV9pbmRleChkbG1vZF9pbmRleCk7Ci0KLSAgICAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgImRsbW9kRW50cnkgZGxtOiAlcCBkbG1vZF9pbmRleDogJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIGRsbSwgZGxtb2RfaW5kZXgpKTsKLQotICAgICAgICBpZiAoZGxtKSB7Ci0gICAgICAgICAgICBuZXduYW1lWzEyXSA9IGRsbW9kX2luZGV4OwotICAgICAgICAgICAgcmVzdWx0ID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCAqbGVuZ3RoLCBuZXduYW1lLCB2cC0+bmFtZWxlbiArIDEpOwotCi0gICAgICAgICAgICBpZiAoKGV4YWN0ICYmIChyZXN1bHQgPT0gMCkpIHx8ICghZXhhY3QgJiYgKHJlc3VsdCA8IDApKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChkbG1vZF9pbmRleCA+PSBkbG1vZF9uZXh0X2luZGV4KSB7Ci0gICAgICAgIGlmIChkbG1vZF9pbmRleCA9PSBkbG1vZF9uZXh0X2luZGV4ICYmCi0gICAgICAgICAgICBleGFjdCAmJiB2cC0+bWFnaWMgPT0gRExNT0RTVEFUVVMpCi0KLSAgICAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9kbG1vZFN0YXR1czsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgbWVtY3B5KG5hbWUsIG5ld25hbWUsICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwotICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7Ci0gICAgcmV0dXJuIGRsbTsKLX0KLQotdV9jaGFyICAgICAgICAgKgotdmFyX2RsbW9kRW50cnkoc3RydWN0IHZhcmlhYmxlICogdnAsCi0gICAgICAgICAgICAgICBvaWQgKiBuYW1lLAotICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCi17Ci0gICAgLyoKLSAgICAgKiB2YXJpYWJsZXMgd2UgbWF5IHVzZSBsYXRlciAKLSAgICAgKi8KLSAgICBzdHJ1Y3QgZGxtb2QgICAqZGxtOwotCi0gICAgKnZhcl9sZW4gPSBzaXplb2YoaW50KTsgICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgbm90ICovCi0KLSAgICBkbG0gPSBoZWFkZXJfZGxtb2RFbnRyeSh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKTsKLSAgICBpZiAoZGxtID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLyoKLSAgICAgKiB0aGlzIGlzIHdoZXJlIHdlIGRvIHRoZSB2YWx1ZSBhc3NpZ25tZW50cyBmb3IgdGhlIG1pYiByZXN1bHRzLiAKLSAgICAgKi8KLSAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgRExNT0ROQU1FOgotICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZGxtb2ROYW1lOwotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihkbG0tPm5hbWUpOwotICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgZGxtLT5uYW1lOwotICAgIGNhc2UgRExNT0RQQVRIOgotICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZGxtb2RQYXRoOwotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihkbG0tPnBhdGgpOwotICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgZGxtLT5wYXRoOwotICAgIGNhc2UgRExNT0RFUlJPUjoKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZGxtLT5lcnJvcik7Ci0gICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBkbG0tPmVycm9yOwotICAgIGNhc2UgRExNT0RTVEFUVVM6Ci0gICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9kbG1vZFN0YXR1czsKLSAgICAgICAgbG9uZ19yZXR1cm4gPSBkbG0tPnN0YXR1czsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX2RsbW9kRW50cnlcbiIsCi0gICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50CitzdGF0aWMgaW50CiB3cml0ZV9kbG1vZE5hbWUoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLAogICAgICAgICAgICAgICAgIHVfY2hhciB2YXJfdmFsX3R5cGUsCkBAIC01NjksMTMgKzQ0MCwxMyBAQAogICAgICAgICBkbG0gPSBkbG1vZF9nZXRfYnlfaW5kZXgobmFtZVsxMl0pOwogICAgICAgICBpZiAoIWRsbSB8fCBkbG0tPnN0YXR1cyA9PSBETE1PRF9MT0FERUQpCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKLSAgICAgICAgbWVtY3B5KGRsbS0+bmFtZSwgdmFyX3ZhbCwgdmFyX3ZhbF9sZW4pOworICAgICAgICBzdHJuY3B5KGRsbS0+bmFtZSwgKGNvbnN0IGNoYXIgKikgdmFyX3ZhbCwgdmFyX3ZhbF9sZW4pOwogICAgICAgICBkbG0tPm5hbWVbdmFyX3ZhbF9sZW5dID0gMDsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKLWludAorc3RhdGljIGludAogd3JpdGVfZGxtb2RQYXRoKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKICAgICAgICAgICAgICAgICB1X2NoYXIgdmFyX3ZhbF90eXBlLApAQCAtNTk2LDEzICs0NjcsMTMgQEAKICAgICAgICAgZGxtID0gZGxtb2RfZ2V0X2J5X2luZGV4KG5hbWVbMTJdKTsKICAgICAgICAgaWYgKCFkbG0gfHwgZGxtLT5zdGF0dXMgPT0gRExNT0RfTE9BREVEKQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7Ci0gICAgICAgIG1lbWNweShkbG0tPnBhdGgsIHZhcl92YWwsIHZhcl92YWxfbGVuKTsKKyAgICAgICAgc3RybmNweShkbG0tPnBhdGgsIChjb25zdCBjaGFyICopIHZhcl92YWwsIHZhcl92YWxfbGVuKTsKICAgICAgICAgZGxtLT5wYXRoW3Zhcl92YWxfbGVuXSA9IDA7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHdyaXRlX2RsbW9kU3RhdHVzKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLAogICAgICAgICAgICAgICAgICAgdV9jaGFyIHZhcl92YWxfdHlwZSwKQEAgLTYxMCw3ICs0ODEsNyBAQAogICAgICAgICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKICAgICAvKgotICAgICAqIHZhcmlhYmxlcyB3ZSBtYXkgdXNlIGxhdGVyIAorICAgICAqIHZhcmlhYmxlcyB3ZSBtYXkgdXNlIGxhdGVyCiAgICAgICovCiAgICAgc3RydWN0IGRsbW9kICAgKmRsbTsKIApAQCAtNjI0LDggKzQ5NSw4IEBACiAgICAgfQogICAgIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CiAgICAgICAgIC8qCi0gICAgICAgICAqIG9iamVjdCBpZGVudGlmaWVyIGluIGZvcm0gLjEuMy42LjEuNC4xLjIwMjEuMTMuMTQuMi4xLjQueCAKLSAgICAgICAgICogd2hlcmUgWCBpcyBpbmRleCB3aXRoIG9mZnNldCAxMiAKKyAgICAgICAgICogb2JqZWN0IGlkZW50aWZpZXIgaW4gZm9ybSAuMS4zLjYuMS40LjEuMjAyMS4xMy4xNC4yLjEuNC54CisgICAgICAgICAqIHdoZXJlIFggaXMgaW5kZXggd2l0aCBvZmZzZXQgMTIKICAgICAgICAgICovCiAKICAgICAgICAgZGxtID0gZGxtb2RfZ2V0X2J5X2luZGV4KG5hbWVbMTJdKTsKQEAgLTY1OSwxMyArNTMwLDE2NyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGRsb3BlbiBzdXBwb3J0ICovCisvKgorICogaGVhZGVyX2RsbW9kRW50cnkoLi4uCisgKiBBcmd1bWVudHM6CisgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQorICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCisgKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzCisgKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKKyAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCisgKiB3cml0ZV9tZXRob2QKKyAqCisgKi8KKworCitzdGF0aWMgc3RydWN0IGRsbW9kICoKK2hlYWRlcl9kbG1vZEVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqdnAsCisgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisjZGVmaW5lIERMTU9ERU5UUllfTkFNRV9MRU5HVEggMTIKKyAgICBvaWQgICAgICAgICAgICAgbmV3bmFtZVtNQVhfT0lEX0xFTl07CisgICAgaW50ICAgICAgICAgICAgIHJlc3VsdDsKKyAgICBzdHJ1Y3QgZGxtb2QgICAqZGxtID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgICAgZGxtb2RfaW5kZXg7CisKKyAgICBtZW1jcHkobmV3bmFtZSwgdnAtPm5hbWUsIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOworICAgICp3cml0ZV9tZXRob2QgPSAwOworCisgICAgZm9yIChkbG1vZF9pbmRleCA9IDE7IGRsbW9kX2luZGV4IDwgZGxtb2RfbmV4dF9pbmRleDsgZGxtb2RfaW5kZXgrKykgeworICAgICAgICBkbG0gPSBkbG1vZF9nZXRfYnlfaW5kZXgoZGxtb2RfaW5kZXgpOworCisgICAgICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJkbG1vZEVudHJ5IGRsbTogJXAgZGxtb2RfaW5kZXg6ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBkbG0sIGRsbW9kX2luZGV4KSk7CisKKyAgICAgICAgaWYgKGRsbSkgeworICAgICAgICAgICAgbmV3bmFtZVsxMl0gPSBkbG1vZF9pbmRleDsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgbmV3bmFtZSwgdnAtPm5hbWVsZW4gKyAxKTsKKworICAgICAgICAgICAgaWYgKChleGFjdCAmJiAocmVzdWx0ID09IDApKSB8fCAoIWV4YWN0ICYmIChyZXN1bHQgPCAwKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGxtb2RfaW5kZXggPj0gZGxtb2RfbmV4dF9pbmRleCkgeworICAgICAgICBpZiAoZGxtb2RfaW5kZXggPT0gZGxtb2RfbmV4dF9pbmRleCAmJgorICAgICAgICAgICAgZXhhY3QgJiYgdnAtPm1hZ2ljID09IERMTU9EU1RBVFVTKQorCisgICAgICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZGxtb2RTdGF0dXM7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1lbWNweShuYW1lLCBuZXduYW1lLCAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKKyAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOworICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOworICAgIHJldHVybiBkbG07Cit9CisKK3N0YXRpYyB1X2NoYXIgICAgICAgICAqCit2YXJfZGxtb2RFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKiB2cCwKKyAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyAgICAvKgorICAgICAqIHZhcmlhYmxlcyB3ZSBtYXkgdXNlIGxhdGVyCisgICAgICovCisgICAgc3RydWN0IGRsbW9kICAgKmRsbTsKKworICAgICp2YXJfbGVuID0gc2l6ZW9mKGludCk7ICAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmIG5vdCAqLworCisgICAgZGxtID0gaGVhZGVyX2RsbW9kRW50cnkodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCk7CisgICAgaWYgKGRsbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qCisgICAgICogdGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgdmFsdWUgYXNzaWdubWVudHMgZm9yIHRoZSBtaWIgcmVzdWx0cy4KKyAgICAgKi8KKyAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworICAgIGNhc2UgRExNT0ROQU1FOgorICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZGxtb2ROYW1lOworICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihkbG0tPm5hbWUpOworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgZGxtLT5uYW1lOworICAgIGNhc2UgRExNT0RQQVRIOgorICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZGxtb2RQYXRoOworICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihkbG0tPnBhdGgpOworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgZGxtLT5wYXRoOworICAgIGNhc2UgRExNT0RFUlJPUjoKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZGxtLT5lcnJvcik7CisgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBkbG0tPmVycm9yOworICAgIGNhc2UgRExNT0RTVEFUVVM6CisgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9kbG1vZFN0YXR1czsKKyAgICAgICAgbG9uZ19yZXR1cm4gPSBkbG0tPnN0YXR1czsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX2RsbW9kRW50cnlcbiIsCisgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHRoaXMgdmFyaWFibGUgZGVmaW5lcyBmdW5jdGlvbiBjYWxsYmFja3MgYW5kIHR5cGUgcmV0dXJuCisgKiBpbmZvcm1hdGlvbiBmb3IgdGhlIGRsbW9kIG1pYgorICovCitzdGF0aWMgc3RydWN0IHZhcmlhYmxlNCBkbG1vZF92YXJpYWJsZXNbXSA9IHsKKyAgICB7RExNT0RORVhUSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2RsbW9kLCAxLCB7MX19LAorICAgIHtETE1PRE5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2RsbW9kRW50cnksIDMsIHsyLCAxLCAyfX0sCisgICAge0RMTU9EUEFUSCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZGxtb2RFbnRyeSwgMywgezIsIDEsIDN9fSwKKyAgICB7RExNT0RFUlJPUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9kbG1vZEVudHJ5LCAzLCB7MiwgMSwgNH19LAorICAgIHtETE1PRFNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2RsbW9kRW50cnksIDMsIHsyLCAxLCA1fX0sCit9OworCitzdGF0aWMgb2lkIGRsbW9kX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgMTMsIDE0IH07CiAKIHZvaWQKIGluaXRfZGxtb2Qodm9pZCkKIHsKLSAgICBERUJVR01TR1RMKCgiZGxtb2QiLAotICAgICAgICAgICAgICAgICJEeW5hbWljIG1vZHVsZXMgbm90IHN1cHBvcnQgb24gdGhpcyBwbGF0Zm9ybVxuIikpOworICAgIFJFR0lTVEVSX01JQigiZGxtb2QiLCBkbG1vZF92YXJpYWJsZXMsIHZhcmlhYmxlNCwgZGxtb2RfdmFyaWFibGVzX29pZCk7CisKKyAgICAvKgorICAgICAqIFRPRE86IFJFR0lTVEVSX1NZU09SX0VOVFJZCisgICAgICovCisKKyAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAicmVnaXN0ZXIgbWliXG4iKSk7CisKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGxtb2QiLCBkbG1vZF9wYXJzZV9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxtb2RfZnJlZV9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZS1uYW1lIG1vZHVsZS1wYXRoIik7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBwID0gZ2V0ZW52KCJTTk1QRExNT0RQQVRIIik7CisgICAgICAgIHN0cm5jcHkoZGxtb2RfcGF0aCwgU05NUERMTU9EUEFUSCwgc2l6ZW9mKGRsbW9kX3BhdGgpKTsKKyAgICAgICAgZGxtb2RfcGF0aFsgc2l6ZW9mKGRsbW9kX3BhdGgpIC0gMSBdID0gMDsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIGlmIChwWzBdID09ICc6JykgeworICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oZGxtb2RfcGF0aCk7CisgICAgICAgICAgICAgICAgaWYgKGRsbW9kX3BhdGhbbGVuIC0gMV0gIT0gJzonKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cm5jYXQoZGxtb2RfcGF0aCwgIjoiLCBzaXplb2YoZGxtb2RfcGF0aCkgLSBsZW4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0cm5jYXQoZGxtb2RfcGF0aCwgcCArIDEsICAgc2l6ZW9mKGRsbW9kX3BhdGgpIC0gbGVuKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHN0cm5jcHkoZGxtb2RfcGF0aCwgcCwgc2l6ZW9mKGRsbW9kX3BhdGgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRsbW9kX3BhdGhbIHNpemVvZihkbG1vZF9wYXRoKS0xIF0gPSAwOworICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJkbG1vZF9wYXRoOiAlc1xuIiwgZGxtb2RfcGF0aCkpOwogfQogCi0jZW5kaWYKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIpCisKK3ZvaWQKK3NodXRkb3duX2RsbW9kKHZvaWQpCit7CisgICAgc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGxtb2QiKTsKKyAgICB1bnJlZ2lzdGVyX21pYihkbG1vZF92YXJpYWJsZXNfb2lkLCBPSURfTEVOR1RIKGRsbW9kX3ZhcmlhYmxlc19vaWQpKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5oCmluZGV4IDY5MGJjNDUuLjk1OTJiZGQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaApAQCAtMyw1OCArMywxNiBAQAogICoKICAqLwogCi0jaWZuZGVmIF9NSUJHUk9VUF9ETE1PRF9ICi0jZGVmaW5lIF9NSUJHUk9VUF9ETE1PRF9ICisjaWZuZGVmIE1JQkdST1VQX0RMTU9EX0gKKyNkZWZpbmUgTUlCR1JPVVBfRExNT0RfSAogCi0vKgotICogVE9ETyAjaW5jbHVkZSAibWliZGVmcy5oIiAKLSAqLworI2lmICghZGVmaW5lZChIQVZFX0RMRkNOX0gpIHx8ICFkZWZpbmVkKEhBVkVfRExPUEVOKSkgJiYgIWRlZmluZWQoV0lOMzIpCitjb25maWdfZXJyb3IoRHluYW1pYyBtb2R1bGVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSkKKyNlbmRpZgogCiBjb25maWdfYWRkX21pYihVQ0QtRExNT0QtTUlCKQotI2lmbmRlZiBTTk1QRExNT0RQQVRICi0jZGVmaW5lIFNOTVBETE1PRFBBVEggIi91c3IvbG9jYWwvbGliL3NubXAvZGxtb2QiCi0jZW5kaWYKLSAgICAgc3RydWN0IGRsbW9kIHsKLSAgICAgICAgIHN0cnVjdCBkbG1vZCAgICpuZXh0OwotICAgICAgICAgaW50ICAgICAgICAgICAgIGluZGV4OwotICAgICAgICAgY2hhciAgICAgICAgICAgIG5hbWVbNjQgKyAxXTsKLSAgICAgICAgIGNoYXIgICAgICAgICAgICBwYXRoWzI1NSArIDFdOwotICAgICAgICAgY2hhciAgICAgICAgICAgIGVycm9yWzI1NSArIDFdOwotICAgICAgICAgdm9pZCAgICAgICAgICAgKmhhbmRsZTsKLSAgICAgICAgIGludCAgICAgICAgICAgICBzdGF0dXM7Ci0gICAgIH07CiAKLSAgICAgdm9pZCAgICAgICAgICAgIGRsbW9kX2xvYWRfbW9kdWxlKHN0cnVjdCBkbG1vZCAqKTsKLSAgICAgdm9pZCAgICAgICAgICAgIGRsbW9kX3VubG9hZF9tb2R1bGUoc3RydWN0IGRsbW9kICopOwotICAgICBzdHJ1Y3QgZGxtb2QgICAqZGxtb2RfY3JlYXRlX21vZHVsZSh2b2lkKTsKLSAgICAgdm9pZCAgICAgICAgICAgIGRsbW9kX2RlbGV0ZV9tb2R1bGUoc3RydWN0IGRsbW9kICopOwotICAgICBzdHJ1Y3QgZGxtb2QgICAqZGxtb2RfZ2V0X2J5X2luZGV4KGludCk7Cit2b2lkIGluaXRfZGxtb2Qodm9pZCk7Cit2b2lkIHNodXRkb3duX2RsbW9kKHZvaWQpOwogCi0gICAgIHZvaWQgICAgICAgICAgICBkbG1vZF9pbml0KHZvaWQpOwotICAgICB2b2lkICAgICAgICAgICAgZGxtb2RfZGVpbml0KHZvaWQpOwotCi0gICAgIGV4dGVybiB2b2lkICAgICBpbml0X2RsbW9kKHZvaWQpOwotICAgICBleHRlcm4gdm9pZCAgICAgZGVpbml0X2RsbW9kKHZvaWQpOwotCi0gICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9kbG1vZDsKLSAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2RsbW9kRW50cnk7Ci0gICAgIGV4dGVybiBXcml0ZU1ldGhvZCB3cml0ZV9kbG1vZE5hbWU7Ci0gICAgIGV4dGVybiBXcml0ZU1ldGhvZCB3cml0ZV9kbG1vZFBhdGg7Ci0gICAgIGV4dGVybiBXcml0ZU1ldGhvZCB3cml0ZV9kbG1vZFN0YXR1czsKLQotI2RlZmluZSBETE1PRE5FWFRJTkRFWCAJCTEKLSNkZWZpbmUgRExNT0RJTkRFWCAgICAgCQkyCi0jZGVmaW5lIERMTU9ETkFNRSAgICAgIAkJMwotI2RlZmluZSBETE1PRFBBVEggICAgICAJCTQKLSNkZWZpbmUgRExNT0RFUlJPUiAgICAgCQk1Ci0jZGVmaW5lIERMTU9EU1RBVFVTICAgIAkJNgotCi0jZGVmaW5lIERMTU9EX0xPQURFRAkJMQotI2RlZmluZSBETE1PRF9VTkxPQURFRAkJMgotI2RlZmluZSBETE1PRF9FUlJPUgkJMwotI2RlZmluZSBETE1PRF9MT0FECQk0Ci0jZGVmaW5lCURMTU9EX1VOTE9BRAkJNQotI2RlZmluZSBETE1PRF9DUkVBVEUJCTYKLSNkZWZpbmUgRExNT0RfREVMRVRFCQk3Ci0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0RMTU9EX0ggKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTUlCR1JPVVBfRExNT0RfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMKaW5kZXggMGYxMWU5OS4uN2YzYmNiMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jCkBAIC0xMSwxMSArMTEsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0xMTIsOSArMTA4LDYgQEAKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgpAQCAtMTIyLDcgKzExNSw3IEBACiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJlcnJvcm1pYi5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKIHN0YXRpYyB0aW1lX3QgICBlcnJvcnN0YXR1c3RpbWUgPSAwOwogc3RhdGljIGludCAgICAgIGVycm9yc3RhdHVzcHJpb3IgPSAwOwpAQCAtMTU5LDE0ICsxNTIsMTQgQEAKICAgICAgKiBpbmZvcm1hdGlvbiBhdCAKICAgICAgKi8KICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfZXJyb3JfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9lcnJvcnMsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Vycm9ycywgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9lcnJvcnMsIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Vycm9ycywgMSwKLSAgICAgICAgIHtFUlJPUk1TR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfZXJyb3JzLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9lcnJvcnMsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfZXJyb3JzLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9lcnJvcnMsIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaAppbmRleCA1ZGNiMmNjLi41MDE2NDJjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmgKQEAgLTYsNyArNiw3IEBACiAKIHZvaWQgICAgICAgICAgICBpbml0X2Vycm9ybWliKHZvaWQpOwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogICAgICB2b2lkICAgICAgICAgICAgc2V0UGVycm9yc3RhdHVzKGNvbnN0IGNoYXIgKik7CiAgICAgIHZvaWQgICAgICAgICAgICBzZXRlcnJvcnN0YXR1cyhjb25zdCBjaGFyICosIGludCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMKaW5kZXggNDI5OTIxNy4uMTRiMDg0YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMTAsMTEgKzExLDcgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0xMDAsMjIgKzk3LDIxIEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxjdHlwZS5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0jaWZuZGVmIEhBVkVfU1RSTkNBU0VDTVAKLWludCAgICAgICAgICAgICBzdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKTsKLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAiZXh0ZW5zaWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlsaXRpZXMvZXhlY3V0ZS5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZ2V0X2V4dGVuX2luc3RhbmNlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocGFyc2VfbWlib2lkKQogCiBleHRlcm4gc3RydWN0IG15cHJvYyAqcHJvY3dhdGNoOyAgICAgICAgLyogbW92ZWQgdG8gcHJvYy5jICovCiBleHRlcm4gaW50ICAgICAgbnVtcHJvY3M7ICAgICAgIC8qIGRpdHRvICovCkBAIC0xMzMsMjAgKzEyOSwyMCBAQAogICogdGhlIHJlbG9jYXRhYmxlIGV4dGVuc2libGUgY29tbWFuZHMgdmFyaWFibGVzIAogICovCiBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfcmVsb2NhdGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLAotICAgICB7TUlCSU5ERVh9fSwKLSAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsCi0gICAgIHtFUlJPUk5BTUV9fSwKLSAgICB7U0hFTExDT01NQU5ELCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsCi0gICAgIHtTSEVMTENPTU1BTkR9fSwKLSAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLAotICAgICB7RVJST1JGTEFHfX0sCi0gICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsCi0gICAgIHtFUlJPUk1TR319LAotICAgIHtFUlJPUkZJWCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsCi0gICAgIHtFUlJPUkZJWH19LAotICAgIHtFUlJPUkZJWENNRCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLAotICAgICB7RVJST1JGSVhDTUR9fQorICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwge01JQklOREVYfX0sCisgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLCB7RVJST1JOQU1FfX0sCisgICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLCB7U0hFTExDT01NQU5EfX0sCisgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwge0VSUk9SRkxBR319LAorICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLCB7RVJST1JNU0d9fSwKKyAgICB7RVJST1JGSVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLCB7RVJST1JGSVh9fSwKKyAgICB7RVJST1JGSVhDTUQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwge0VSUk9SRklYQ01EfX0KIH07CiAKIApAQCAtMTU1LDIwICsxNTEsMjAgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9leHRlbnNpYmxlX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U0hFTExDT01NQU5ELCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsCi0gICAgICAgICB7U0hFTExDT01NQU5EfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLAotICAgICAgICAge0VSUk9STVNHfX0sCi0gICAgICAgIHtFUlJPUkZJWCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsCi0gICAgICAgICB7RVJST1JGSVh9fSwKLSAgICAgICAge0VSUk9SRklYQ01ELCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsCi0gICAgICAgICB7RVJST1JGSVhDTUR9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U0hFTExDT01NQU5ELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLCB7U0hFTExDT01NQU5EfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwge0VSUk9STVNHfX0sCisgICAgICAgIHtFUlJPUkZJWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLCB7RVJST1JGSVh9fSwKKyAgICAgICAge0VSUk9SRklYQ01ELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLCB7RVJST1JGSVhDTUR9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5oCmluZGV4IDU1OGYxNGIuLjI0YmQxNmQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmgKQEAgLTcsNiArNyw3IEBACiAKIHZvaWQgICAgICAgICAgICBpbml0X2V4dGVuc2libGUodm9pZCk7CiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKIGNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCiBjb25maWdfcmVxdWlyZSh1dGlsaXRpZXMvZXhlY3V0ZSkKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jCmluZGV4IDAwYzk4ZDQuLjllMzQ1ZDggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMKQEAgLTEyLDExICsxMiw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTI1LDkgKzIxLDYgQEAKICMgIGluY2x1ZGUgPHRpbWUuaD4KICMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCkBAIC00MSw3ICszNCw3IEBACiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJmaWxlLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogCiAjZGVmaW5lIE1BWEZJTEUgICAyMAogCkBAIC01MiwxMiArNDUsMTggQEAKIGluaXRfZmlsZSh2b2lkKQogewogICAgIHN0cnVjdCB2YXJpYWJsZTIgZmlsZV90YWJsZVtdID0gewotICAgICAgICB7RklMRV9JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZmlsZV90YWJsZSwgMSwgezF9fSwKLSAgICAgICAge0ZJTEVfTkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9maWxlX3RhYmxlLCAxLCB7Mn19LAotICAgICAgICB7RklMRV9TSVpFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9maWxlX3RhYmxlLCAxLCB7M319LAotICAgICAgICB7RklMRV9NQVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2ZpbGVfdGFibGUsIDEsIHs0fX0sCi0gICAgICAgIHtGSUxFX0VSUk9SLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9maWxlX3RhYmxlLCAxLCB7MTAwfX0sCi0gICAgICAgIHtGSUxFX01TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9maWxlX3RhYmxlLCAxLCB7MTAxfX0KKyAgICAgICAge0ZJTEVfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9maWxlX3RhYmxlLCAxLCB7MX19LAorICAgICAgICB7RklMRV9OQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9maWxlX3RhYmxlLCAxLCB7Mn19LAorICAgICAgICB7RklMRV9TSVpFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZmlsZV90YWJsZSwgMSwgezN9fSwKKyAgICAgICAge0ZJTEVfTUFYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZmlsZV90YWJsZSwgMSwgezR9fSwKKyAgICAgICAge0ZJTEVfRVJST1IsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9maWxlX3RhYmxlLCAxLCB7MTAwfX0sCisgICAgICAgIHtGSUxFX01TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZmlsZV90YWJsZSwgMSwgezEwMX19CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmgKaW5kZXggOGIyMjJjNS4uNDU1MDg2ZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaApAQCAtNyw2ICs3LDggQEAKIAogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQorCiB2b2lkICAgICAgICAgICAgaW5pdF9maWxlKHZvaWQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvaHB1eC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvaHB1eC5jCmluZGV4IGRiMDk0ZDMuLjljNWY5ZjkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2hwdXguYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9ocHV4LmMKQEAgLTMwLDE1ICszMCwyMSBAQAogICAgICAqIGluZm9ybWF0aW9uIGF0IAogICAgICAqLwogICAgIHN0cnVjdCB2YXJpYWJsZTIgaHBfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtIUENPTkYsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9ocCwgMSwge0hQQ09ORn19LAotICAgICAgICB7SFBSRUNPTkZJRywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hwLCAxLCB7SFBSRUNPTkZJR319LAotICAgICAgICB7SFBGTEFHLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfaHAsIDEsIHtIUEZMQUd9fSwKLSAgICAgICAge0hQTE9HTUFTSywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hwLCAxLCB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtIUFNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hwLCAxLCB7RVJST1JNU0d9fQorICAgICAgICB7SFBDT05GLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2hwLCAxLCB7SFBDT05GfX0sCisgICAgICAgIHtIUFJFQ09ORklHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2hwLCAxLCB7SFBSRUNPTkZJR319LAorICAgICAgICB7SFBGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2hwLCAxLCB7SFBGTEFHfX0sCisgICAgICAgIHtIUExPR01BU0ssIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfaHAsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0hQU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2hwLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGhwdHJhcF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge0hQVFJBUCwgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfaHAsIDEsIHtIUFRSQVB9fSwKKyAgICAgICAge0hQVFJBUCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2hwLCAxLCB7SFBUUkFQfX0sCiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jCmluZGV4IGM1Y2U5MDYuLjA1YzYwYjcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jCkBAIC02Niw2ICs2Niw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC03Myw5ICs3NCwxMiBAQAogICogbWluaW1hbCBpbmNsdWRlIGRpcmVjdGl2ZXMgCiAgKi8KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKICNpbmNsdWRlIDx0aW1lLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcikKKworCiAvKgogICogTG9hZCByZXF1aXJlZCBkcml2ZXJzIGFuZCBsaWJyYXJpZXMuCiAgKi8KQEAgLTg0LDkgKzg4LDEwIEBACiAgICAgI2luY2x1ZGUgPGtzdGF0Lmg+CiAgICAgI2lmZGVmIEhBVkVfUElDTF9IIAogICAgICAgICAjaW5jbHVkZSA8cGljbC5oPiAvKiBhY2Nlc3NlcyB0aGUgcGljbGQgZGFlbW9uICovCisgICAgI2Vsc2UgCisgICAgICAgIC8qIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGFueSBTdW4tYmFzZWQgc2Vuc29ycyAqLworCSNpbmNsdWRlIDwvdXNyL3BsYXRmb3JtL3N1bjR1L2luY2x1ZGUvc3lzL2VudmN0cmwuaD4KICAgICAjZW5kaWYgCi0vKiB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbnkgU3VuLWJhc2VkIHNlbnNvcnMgKi8KLSAgICAjaW5jbHVkZSA8L3Vzci9wbGF0Zm9ybS9zdW40dS9pbmNsdWRlL3N5cy9lbnZjdHJsLmg+CiAjZWxzZQogICAgICNpbmNsdWRlIDxzZW5zb3JzL3NlbnNvcnMuaD4KICAgICAjZGVmaW5lIENPTkZJR19GSUxFX05BTUUgIi9ldGMvc2Vuc29ycy5jb25mIgpAQCAtMTMxLDQxICsxMzYsNDEgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIExNVEVNUFNFTlNPUlNJTkRFWCAgICAzCi0gICAge0xNVEVNUFNFTlNPUlNJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHsyLCAxLCAxfX0sCisgICAge0xNVEVNUFNFTlNPUlNJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHsyLCAxLCAxfX0sCiAjZGVmaW5lICAgTE1URU1QU0VOU09SU0RFVklDRSAgIDQKLSAgICB7TE1URU1QU0VOU09SU0RFVklDRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezIsIDEsIDJ9fSwKKyAgICB7TE1URU1QU0VOU09SU0RFVklDRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezIsIDEsIDJ9fSwKICNkZWZpbmUgICBMTVRFTVBTRU5TT1JTVkFMVUUgICAgNQotICAgIHtMTVRFTVBTRU5TT1JTVkFMVUUsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezIsIDEsIDN9fSwKKyAgICB7TE1URU1QU0VOU09SU1ZBTFVFLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHsyLCAxLCAzfX0sCiAjZGVmaW5lICAgTE1GQU5TRU5TT1JTSU5ERVggICAgIDgKLSAgICB7TE1GQU5TRU5TT1JTSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7MywgMSwgMX19LAorICAgIHtMTUZBTlNFTlNPUlNJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHszLCAxLCAxfX0sCiAjZGVmaW5lICAgTE1GQU5TRU5TT1JTREVWSUNFICAgIDkKLSAgICB7TE1GQU5TRU5TT1JTREVWSUNFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7MywgMSwgMn19LAorICAgIHtMTUZBTlNFTlNPUlNERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHszLCAxLCAyfX0sCiAjZGVmaW5lICAgTE1GQU5TRU5TT1JTVkFMVUUgICAgIDEwCi0gICAge0xNRkFOU0VOU09SU1ZBTFVFLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHszLCAxLCAzfX0sCisgICAge0xNRkFOU0VOU09SU1ZBTFVFLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHszLCAxLCAzfX0sCiAjZGVmaW5lICAgTE1WT0xUU0VOU09SU0lOREVYICAgIDEzCi0gICAge0xNVk9MVFNFTlNPUlNJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHs0LCAxLCAxfX0sCisgICAge0xNVk9MVFNFTlNPUlNJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHs0LCAxLCAxfX0sCiAjZGVmaW5lICAgTE1WT0xUU0VOU09SU0RFVklDRSAgIDE0Ci0gICAge0xNVk9MVFNFTlNPUlNERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHs0LCAxLCAyfX0sCisgICAge0xNVk9MVFNFTlNPUlNERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHs0LCAxLCAyfX0sCiAjZGVmaW5lICAgTE1WT0xUU0VOU09SU1ZBTFVFICAgIDE1Ci0gICAge0xNVk9MVFNFTlNPUlNWQUxVRSwgQVNOX0dBVUdFLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7NCwgMSwgM319LAorICAgIHtMTVZPTFRTRU5TT1JTVkFMVUUsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezQsIDEsIDN9fSwKICNkZWZpbmUgICBMTU1JU0NTRU5TT1JTSU5ERVggICAgMTgKLSAgICB7TE1NSVNDU0VOU09SU0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezUsIDEsIDF9fSwKKyAgICB7TE1NSVNDU0VOU09SU0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezUsIDEsIDF9fSwKICNkZWZpbmUgICBMTU1JU0NTRU5TT1JTREVWSUNFICAgMTkKLSAgICB7TE1NSVNDU0VOU09SU0RFVklDRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezUsIDEsIDJ9fSwKKyAgICB7TE1NSVNDU0VOU09SU0RFVklDRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezUsIDEsIDJ9fSwKICNkZWZpbmUgICBMTU1JU0NTRU5TT1JTVkFMVUUgICAgMjAKLSAgICB7TE1NSVNDU0VOU09SU1ZBTFVFLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHs1LCAxLCAzfX0sCisgICAge0xNTUlTQ1NFTlNPUlNWQUxVRSwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7NSwgMSwgM319LAogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMjQ3LDcgKzI1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQogewogICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKLSAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzdHJpbmdbU1BSSU5UX01BWF9MRU5dOworICAgIHN0YXRpYyBjaGFyICAgICBzdHJpbmdbU1BSSU5UX01BWF9MRU5dOwogCiAgICAgaW50ICAgICAgICAgICAgIHNfaW5kZXg7CiAgICAgaW50ICAgICAgICAgICAgIHNfdHlwZSA9IC0xOwpAQCAtMzc5LDkgKzM4NCw5IEBACiAgICAgfQogCiAgICAgX3NlbnNvcl9sb2FkKHQpOyAvKiBJJ2xsIGxldCB0aGUgbGludXggcGVvcGxlIGRlY2lkZSB3aGV0aGVyIHRoZXkgd2FudCB0byBsb2FkIHJpZ2h0IGF3YXkgKi8KK2xlYXZpbmc6CiAjZW5kaWYgLyogbm90IHNvbGFyaXMyICovCiAKLWxlYXZpbmc6CiAgICAgREVCVUdNU0coKCJ1Y2Qtc25tcC9sbVNlbnNvcnMiLCAiPD0gc2Vuc29yX2luaXRcbiIpKTsKICAgICByZXR1cm4gcmVzOwogfQpAQCAtNDE1LDcgKzQyMCw3IEBACiAgICB0aGUgc2NhbGUgdmFyaWFibGUgaGFuZGxlcyBtaW5pVm9sdHMgKi8KIAogc3RhdGljIGludAotcmVhZF9udW1fc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwgY2hhciAqcHJvcCAsaW50IHNjYWxlLCBpbnQgKnZhbHVlKQorcmVhZF9udW1fc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwgY29uc3QgY2hhciAqcHJvcCwgaW50IHNjYWxlLCBpbnQgKnZhbHVlKQogIHsKICAgcGljbF9ub2RlaGRsX3QgIHNlbnNvcmg7CiAgIHBpY2xfcHJvcGluZm9fdCBzZW5zb3JfaW5mbzsKQEAgLTQ4MSw3ICs0ODYsNyBAQAogfSAvKiBlbmQgb2YgcmVhZF9udW1fc2Vuc29yKCkgKi8KIAogc3RhdGljIGludAotcmVhZF9lbnVtX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNoYXIgKipvcHRpb25zLCB1X2ludCAqdmFsdWUpCityZWFkX2VudW1fc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwgY29uc3QgY2hhciAqKm9wdGlvbnMsIHVfaW50ICp2YWx1ZSkKIHsKICAgcGljbF9ub2RlaGRsX3QgIHNlbnNvcmg7CiAgIHBpY2xfcHJvcGluZm9fdCBzZW5zb3JfaW5mbzsKQEAgLTUyNiwxMCArNTMxLDEwIEBACiAKIC8qIHNjYWxlIHZhcmlhYmxlIGhhbmRsZXMgbWluaVZvbHRzKi8KICAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX251bV9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLCAKLSAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdLCAKLSAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcHZhbFtQSUNMX1BST1BOQU1FTEVOX01BWF0sIGludCB0eXAsIGludCBzY2FsZSkKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdLCAKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcHZhbFtQSUNMX1BST1BOQU1FTEVOX01BWF0sIGludCB0eXAsIGludCBzY2FsZSkKIHsKICAgaW50IHZhbHVlID0gMDsKICAgcGljbF9lcnJub190IGVycm9yX2NvZGU7CkBAIC01NTMsMTAgKzU1OCwxMCBAQAogICB9CiB9IC8qIGVuZCBwcm9jZXNzX251bV9zZW5zb3IoKSAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc19lbnVtX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsIAotICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0sIAotICAgICAgICAgICAgICAgICAgaW50IHR5cCwgY2hhciAqKm9wdGlvbnMpCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSwgCisgICAgICAgICAgICAgICAgICBpbnQgdHlwLCBjb25zdCBjaGFyICoqb3B0aW9ucykKIHsKICAgaW50IHZhbHVlID0gMDsKICAgcGljbF9lcnJub190IGVycm9yX2NvZGU7CkBAIC01ODMsNjkgKzU4OCw2OSBAQAogLyogVGhlIGZvbGxvd2luZyBhcmUgbW9kdWxlcyBmb3IgZGVhbGluZyB3aXRoIGluZGl2aWR1YWwgc2Vuc29ycyB0eXBlcy4KICAgIFRoZXkgY2FsbCB0aGUgZ2VuZXJpYyBtb2R1bGVzIGFib3ZlLiAgKi8KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3NfaW5kaXZpZHVhbF9mYW4ocGljbF9ub2RlaGRsX3QgY2hpbGRoLCAKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCiB7CiAgIHByb2Nlc3NfbnVtX3NlbnNvcihjaGlsZGgsIHByb3BuYW1lLCAiQXRvRFNlbnNvclZhbHVlIiwgRkFOX1RZUEUsIDEpOwogfQogCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX25ld3R5cGVfZmFuKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCiB7CiAgIHByb2Nlc3NfbnVtX3NlbnNvcihjaGlsZGgsIHByb3BuYW1lLCAiU3BlZWQiLCBGQU5fVFlQRSwgMSk7CiB9CiAKIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3NfdGVtcGVyYXR1cmVfc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKIHsKICAgcHJvY2Vzc19udW1fc2Vuc29yKGNoaWxkaCwgcHJvcG5hbWUsICJUZW1wZXJhdHVyZSIsIFRFTVBfVFlQRSwgMTAwMCk7CiB9IC8qIE1JQiBhc2tzIGZvciBtQyAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc192b2x0YWdlX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCiB7CiAgIHByb2Nlc3NfbnVtX3NlbnNvcihjaGlsZGgsIHByb3BuYW1lLCAiVm9sdGFnZSIsIFZPTFRfVFlQRSwgMTAwMCk7CiB9IC8qIE1JQiBhc2tzIGZvciBtViAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc19kaWdpdGFsX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCiB7CiAgIHByb2Nlc3NfbnVtX3NlbnNvcihjaGlsZGgsIHByb3BuYW1lLCAiQXRvRFNlbnNvclZhbHVlIiwgVk9MVF9UWVBFLCAxKTsKIH0KIAogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc19zd2l0Y2gocGljbF9ub2RlaGRsX3QgY2hpbGRoLAotICAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQogewogCi0gIGNoYXIgKnNldHRpbmdzW109eyJPRkYiLCJPTiIsIk5PUk1BTCIsIkxPQ0tFRCIsIlVOS05PV04iLAorICBjb25zdCBjaGFyICpzZXR0aW5nc1tdPXsiT0ZGIiwiT04iLCJOT1JNQUwiLCJMT0NLRUQiLCJVTktOT1dOIiwKICAgICAgICAgICAgICAgICAgICAiRElBRyIsIlNFQ1VSRSIsTlVMTH07CiAKICAgcHJvY2Vzc19lbnVtX3NlbnNvcihjaGlsZGgsIHByb3BuYW1lLCBNSVNDX1RZUEUsIHNldHRpbmdzKTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3NfbGVkKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwKLSAgICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKIHsKIAotICBjaGFyICpzZXR0aW5nc1tdPXsiT0ZGIiwiT04iLCJCTElOSyIsTlVMTH07CisgIGNvbnN0IGNoYXIgKnNldHRpbmdzW109eyJPRkYiLCJPTiIsIkJMSU5LIixOVUxMfTsKICAgcHJvY2Vzc19lbnVtX3NlbnNvcihjaGlsZGgsIHByb3BuYW1lLCBNSVNDX1RZUEUsIHNldHRpbmdzKTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3NfaTJjKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwKLSAgICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKIHsKLSAgY2hhciAqc2V0dGluZ3NbXT17Ik9LIixOVUxMfTsKKyAgY29uc3QgY2hhciAqc2V0dGluZ3NbXT17Ik9LIixOVUxMfTsKICAgcHJvY2Vzc19lbnVtX3NlbnNvcihjaGlsZGgsIHByb3BuYW1lLCBNSVNDX1RZUEUsIHNldHRpbmdzKTsKIH0KIApAQCAtNzUyLDYgKzc1NywxMiBAQAogewogI2lmZGVmIHNvbGFyaXMyCiAgICAgaW50IGksajsKKyNpZmRlZiBIQVZFX1BJQ0xfSCAKKyAgICBpbnQgZXJfY29kZTsKKyAgICBwaWNsX2Vycm5vX3QgICAgIGVycm9yX2NvZGU7CisgICAgaW50IGxldmVsPTA7CisgICAgcGljbF9ub2RlaGRsX3QgIHJvb3RoOworI2Vsc2UKICAgICBpbnQgdHlwOwogICAgIGludCB0ZW1wPTA7IC8qIGRvIG5vdCByZXNldCB0aGlzIGxhdGVyLCBtb3JlIHRoYW4gb25lIHR5cCBoYXMgdGVtcGVyYXR1cmVzKi8KICAgICBpbnQgb3RoZXI9MDsKQEAgLTc2MSw2ICs3NzIsNyBAQAogICAgIGVudmN0cmxfZmFuX3QgKmZhbl9pbmZvOwogICAgIGVudmN0cmxfcHNfdCAqcG93ZXJfaW5mbzsKICAgICBlbnZjdHJsX2VuY2xfdCAqZW5jX2luZm87CisjZW5kaWYKIAogLyogREVCVUdNU0coKCJ1Y2Qtc25tcC9sbVNlbnNvcnMiLCAiUmVhZGluZyB0aGUgc2Vuc29yc1xuIikpOyAqLwogCkBAIC03NzYsMTMgKzc4OCw2IEBACiAvKiB0cnkgcGljbGQgKGlmIHN1cHBvcnRlZCksIGlmIHRoYXQgZG9lc24ndCB3b3JrLCB0cnkga3N0YXQgKi8KICNpZmRlZiBIQVZFX1BJQ0xfSCAKIAotLyogc29tZSBtb3JlIGRlY2xhcmF0aW9ucyAqLwotCi0gICAgaW50IGVyX2NvZGU7Ci0gICAgcGljbF9lcnJub190ICAgICBlcnJvcl9jb2RlOwotICAgIGludCBsZXZlbD0wOwotICAgIHBpY2xfbm9kZWhkbF90ICByb290aDsKLQogZXJfY29kZSA9IHBpY2xfaW5pdGlhbGl6ZSgpOwogCiBpZiAoZXJfY29kZSA9PSBQSUNMX1NVQ0NFU1MpIHsKQEAgLTgwOSw3ICs4MTQsNyBAQAogCiB9IC8qZW5kIGVsc2UgcGljbF9pbml0aWFsaXplICovCiAKLSNlbmRpZiAgLyogZW5kIG9mIHBpY2xkIHNlY3Rpb24gKi8KKyNlbHNlICAvKiBlbmQgb2YgcGljbGQgc2VjdGlvbiAqLwogLyogaW5pdGlhbGl6ZSBrc3RhdCAqLwogCiBrYyA9IGtzdGF0X29wZW4oKTsKQEAgLTkyMyw3ICs5MjgsNyBAQAogICAgICAgICAgICAgICAgICAgIHRlbXArKzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJ1Y2Qtc25tcC9sbVNlbnNvcnMiLCAidW5rbm93biBlbGVtZW50IGluc3RhbmNlICZkIHR5cGUgJmQgdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJ1Y2Qtc25tcC9sbVNlbnNvcnMiLCAidW5rbm93biBlbGVtZW50IGluc3RhbmNlICVkIHR5cGUgJWQgdmFsdWUgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGVuY19pbmZvLT5pbnN0YW5jZSwgZW5jX2luZm8tPnR5cGUsIGVuY19pbmZvLT52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSAvKiBlbmQgc3dpdGNoICovCkBAIC05MzcsMTQgKzk0MiwxNyBAQAogICAgIGtzdGF0X2Nsb3NlKGtjKTsKIAogfSAvKiBlbmQgZWxzZSBrc3RhdCAqLworI2VuZGlmCisKICNlbHNlIC8qIGVuZCBzb2xhcmlzMiBvbmx5IGllLiBpZmRlZiBldmVyeXRoaW5nIGVsc2UgKi8KIAogICAgIGNvbnN0IHNlbnNvcnNfY2hpcF9uYW1lICpjaGlwOwogICAgIGNvbnN0IHNlbnNvcnNfZmVhdHVyZV9kYXRhICpkYXRhOwogICAgIGludCAgICAgICAgICAgICBjaGlwX25yID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwogICAgIHVuc2lnbmVkIGludCAgICBpID0gMDsKIAorICAgIERFQlVHTVNHKCgidWNkLXNubXAvbG1TZW5zb3JzIiwgIj0+IHNlbnNvcl9sb2FkXG4iKSk7CisKICAgICBmb3IgKGkgPSAwOyBpIDwgTl9UWVBFUzsgaSsrKQogICAgIHsKICAgICAgICAgc2Vuc29yX2FycmF5W2ldLm4gPSAwOwpAQCAtOTU2LDcgKzk2NCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgLyogQ29udGludWluZyB3b3VsZCBiZSB1bnNhZmUgKi8KICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNhbm5vdCBtYWxsb2Mgc2Vuc29yIGFycmF5ISIpOyAKLSAgICAgICAgICAgcmV0dXJuIChyYyA9IDEpOworICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfSAvKiBlbmQgaWYgKi8KICAgICAgICAgc2Vuc29yX2FycmF5W2ldLmN1cnJlbnRfbGVuID0gREVGQVVMVF9TRU5TT1JTOwogICAgIH0gLyogZW5kIGZvciAqLwpAQCAtOTc0LDcgKzk4Miw3IEBACiAgICAgICAgICAgICAgICAgIXNlbnNvcnNfZ2V0X2xhYmVsKCpjaGlwLCBkYXRhLT5udW1iZXIsICZsYWJlbCkgJiYKICAgICAgICAgICAgICAgICAhc2Vuc29yc19nZXRfZmVhdHVyZSgqY2hpcCwgZGF0YS0+bnVtYmVyLCAmdmFsKSkgewogICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICB0eXBlID0gLTE7Ci0gICAgICAgICAgICAgICAgZmxvYXQgICAgICAgICAgIG11bDsKKyAgICAgICAgICAgICAgICBmbG9hdCAgICAgICAgICAgbXVsID0gMDsKICAgICAgICAgICAgICAgICBfc2Vuc29yX2FycmF5ICAqYXJyYXk7CiAKICAgICAgICAgICAgICAgICAvKiBUaGUgbGFiZWwsIGFzIGRldGVybWluZWQgZm9yIGEgZ2l2ZW4gY2hpcCBpbiBzZW5zb3JzLmNvbmYsCkBAIC0xMDE2LDE0ICsxMDI0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGxhYmVsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgICAgfSAvKiBlbmQgaWYgbGFiZWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyYz0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgICAgIH0gLyogZW5kIGlmIGFycmF5LT5zZW5zb3IgKi8KICAgICAgICAgICAgICAgICAgICAgYXJyYXktPmN1cnJlbnRfbGVuID0gbmV3X3NpemUgLyBzaXplb2YoX3NlbnNvcik7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHKCgidWNkLXNubXAvbG1TZW5zb3JzIiwgInR5cGUgIyVkIGluY3JlYXNlZCB0byAlZCBlbGVtZW50c1xuIiwgdHlwZSwgYXJyYXktPmN1cnJlbnRfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHKCgidWNkLXNubXAvbG1TZW5zb3JzIiwgInR5cGUgIyVkIGluY3JlYXNlZCB0byAlZCBlbGVtZW50c1xuIiwgdHlwZSwgKGludClhcnJheS0+Y3VycmVudF9sZW4pKTsKICAgICAgICAgICAgICAgICB9IC8qIGVuZCBpZiBhcnJheS0+Y3VycmVudCAqLwogICAgICAgICAgICAgICAgIHN0cmxjcHkoYXJyYXktPnNlbnNvclthcnJheS0+bl0ubmFtZSwgbGFiZWwsIE1BWF9OQU1FKTsKICAgICAgICAgICAgICAgICBhcnJheS0+c2Vuc29yW2FycmF5LT5uXS52YWx1ZSA9IChpbnQpICh2YWwgKiBtdWwpOwotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzIiwic2Vuc29yICVkLCB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29ycyIsInNlbnNvciAlcywgdmFsdWUgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXktPnNlbnNvclthcnJheS0+bl0ubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS0+c2Vuc29yW2FycmF5LT5uXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgIGFycmF5LT5uKys7CkBAIC0xMDM0LDEwICsxMDQyLDExIEBACiAJICAgIH0gLyogZW5kIGlmIGxhYmVsICovCiAgICAgICAgIH0gLyogZW5kIHdoaWxlIGRhdGEgKi8KICAgICB9IC8qIGVuZCB3aGlsZSBjaGlwICovCi0gICAgcmV0dXJuIHJjOworICAgIERFQlVHTVNHKCgidWNkLXNubXAvbG1TZW5zb3JzIiwgIjw9IHNlbnNvcl9sb2FkXG4iKSk7CiAjZW5kaWYgIC8qIGVuZCBlbHNlIGllLiBpZmRlZiBldmVyeXRoaW5nIGVsc2UgKi8KICAgICAvKiBVcGRhdGUgdGhlIHRpbWVzdGFtcCBhZnRlciBhIGxvYWQuICovCiAgICAgdGltZXN0YW1wID0gdDsKKyAgICByZXR1cm4gMDsKIH0KIAogI2lmbmRlZiBzb2xhcmlzMgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuaAppbmRleCBhZmVkNmZhLi45MjA5OGE2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuaApAQCAtNiw3ICs2LDcgQEAKICNpZm5kZWYgX01JQkdST1VQX0xNU0VOU09SU19ICiAjZGVmaW5lIF9NSUJHUk9VUF9MTVNFTlNPUlNfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQogY29uZmlnX2FkZF9taWIoTE0tU0VOU09SUy1NSUIpCiAKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfbG1TZW5zb3JzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTU3Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmMKQEAgLTAsMCArMSwyMDYgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oPgorI2luY2x1ZGUgImhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5oIgorI2luY2x1ZGUgInVjZC1zbm1wL2xtc2Vuc29yc01pYi5oIgorCituZXRzbm1wX2NvbnRhaW5lciAqc2Vuc29yQ29udGFpbmVyID0gTlVMTDsKKwordm9pZCBpbml0aWFsaXplX2xtU2Vuc29yc1RhYmxlKGNvbnN0IGNoYXIgKnRhYmxlTmFtZSwgY29uc3Qgb2lkICp0YWJsZU9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9vcCAqZmlsdGVyLCBpbnQgbXVsdCApOworCitpbnQgX3NlbnNvcl9maWx0ZXJfdGVtcCggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKnYgKTsKK2ludCBfc2Vuc29yX2ZpbHRlcl9mYW4oICBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqdiApOworaW50IF9zZW5zb3JfZmlsdGVyX3ZvbHQoIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICp2ICk7CitpbnQgX3NlbnNvcl9maWx0ZXJfbWlzYyggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKnYgKTsKKworc3RhdGljIGNvbnN0IG9pZCBsbVRlbXBTZW5zb3JzVGFibGVfb2lkW10gICA9IHsxLDMsNiwxLDQsMSwyMDIxLDEzLDE2LDJ9Oworc3RhdGljIGNvbnN0IG9pZCBsbUZhblNlbnNvcnNUYWJsZV9vaWRbXSAgICA9IHsxLDMsNiwxLDQsMSwyMDIxLDEzLDE2LDN9Oworc3RhdGljIGNvbnN0IG9pZCBsbVZvbHRTZW5zb3JzVGFibGVfb2lkW10gICA9IHsxLDMsNiwxLDQsMSwyMDIxLDEzLDE2LDR9Oworc3RhdGljIGNvbnN0IG9pZCBsbU1pc2NTZW5zb3JzVGFibGVfb2lkW10gICA9IHsxLDMsNiwxLDQsMSwyMDIxLDEzLDE2LDV9OworICAgICAgICAgICAgLyogQWxsIHRoZSB0YWJsZXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGggcm9vdCBPSUQgKi8KK2NvbnN0IHNpemVfdCBsbVNlbnNvcnNUYWJsZXNfb2lkX2xlbiA9IE9JRF9MRU5HVEgobG1NaXNjU2Vuc29yc1RhYmxlX29pZCk7CisKKworLyogSW5pdGlhbGlzZSB0aGUgTE0gU2Vuc29ycyBNSUIgbW9kdWxlICovCit2b2lkCitpbml0X2xtc2Vuc29yc01pYih2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9sbXNlbnNvcnNNaWIiLCJJbml0aWFsaXppbmcgTE0tU0VOU09SUy1NSUIgdGFibGVzXG4iKSk7CisKKyAgICAvKiAKKyAgICAgKiBJbml0aWFsaXNlIHRoZSBmb3VyIExNLVNFTlNPUlMtTUlCIHRhYmxlcworICAgICAqCisgICAgICogVGhleSBhcmUgYWxtb3N0IGlkZW50aWNhbCwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSByZWdpc3RyYXRpb24gY29kZS4KKyAgICAgKi8KKyAgICBpbml0aWFsaXplX2xtU2Vuc29yc1RhYmxlKCAibG1UZW1wU2Vuc29yc1RhYmxlIiwgbG1UZW1wU2Vuc29yc1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbnNvcl9maWx0ZXJfdGVtcCwgMTAwMCApOyAgLyogTUlCIGFza3MgZm9yIG1DICovCisgICAgaW5pdGlhbGl6ZV9sbVNlbnNvcnNUYWJsZSggImxtRmFuU2Vuc29yc1RhYmxlIiwgIGxtRmFuU2Vuc29yc1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbnNvcl9maWx0ZXJfZmFuLCAgMSk7CisgICAgaW5pdGlhbGl6ZV9sbVNlbnNvcnNUYWJsZSggImxtVm9sdFNlbnNvcnNUYWJsZSIsIGxtVm9sdFNlbnNvcnNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZW5zb3JfZmlsdGVyX3ZvbHQsIDEwMDAgKTsgIC8qIE1JQiBhc2tzIGZvciBtViAqLworICAgIGluaXRpYWxpemVfbG1TZW5zb3JzVGFibGUoICJsbU1pc2NTZW5zb3JzVGFibGUiLCBsbU1pc2NTZW5zb3JzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2Vuc29yX2ZpbHRlcl9taXNjLCAxICk7Cit9CisKKy8qCisgKiBDb21tb24gaW5pdGlhbGlzYXRpb24gY29kZSwgdXNlZCBmb3Igc2V0dGluZyB1cCBhbGwgZm91ciB0YWJsZXMKKyAqLwordm9pZAoraW5pdGlhbGl6ZV9sbVNlbnNvcnNUYWJsZShjb25zdCBjaGFyICp0YWJsZU5hbWUsIGNvbnN0IG9pZCAqdGFibGVPSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX29wICpmaWx0ZXIsIGludCBtdWx0ICkKK3sKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX2NhY2hlICAgICAqY2FjaGU7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIC8qCisgICAgICogRW5zdXJlIHRoZSBIQUwgc2Vuc29ycyBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGlzZWQsCisgICAgICogICBhbmQgcmV0cmlldmUgdGhlIG1haW4gc2Vuc29ycyBjb250YWluZXIuCisgICAgICogVGhpcyB0YWJsZSB3aWxsIHRoZW4gYmUgcmVnaXN0ZXJlZCB1c2luZyBhIGZpbHRlciBvbiB0aGlzIGNvbnRhaW5lci4KKyAgICAgKi8KKyAgICBzZW5zb3JDb250YWluZXIgPSBnZXRfc2Vuc29yX2NvbnRhaW5lcigpOworICAgIGlmICggIXNlbnNvckNvbnRhaW5lciApIHsKKyAgICAgICAgaW5pdF9od19zZW5zb3JzKCApOworICAgICAgICBzZW5zb3JDb250YWluZXIgPSBnZXRfc2Vuc29yX2NvbnRhaW5lcigpOworICAgIH0KKyAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJzZW5zb3JUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBjb250YWluZXItPmluc2VydF9maWx0ZXIgPSBmaWx0ZXI7CisgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4KCBzZW5zb3JDb250YWluZXIsIGNvbnRhaW5lciApOworCisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIGJhc2ljIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoZSB0YWJsZQorICAgICAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgdGFibGVOYW1lLCBsbVNlbnNvcnNUYWJsZXNfaGFuZGxlciwKKyAgICAgICAgICAgICAgIHRhYmxlT0lELCAgbG1TZW5zb3JzVGFibGVzX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZCisgICAgICAgICAgICAgICk7CisKKyAgICAvKgorICAgICAqIFJlZ2lzdGVyIHRoZSB0YWJsZSB1c2luZyB0aGUgZmlsdGVyZWQgY29udGFpbmVyCisgICAgICogSW5jbHVkZSBhbiBpbmRpY2F0b3Igb2YgYW55IHNjYWxpbmcgdG8gYmUgYXBwbGllZCB0byB0aGUgc2Vuc29yIHZhbHVlCisgICAgICovCisgICAgcmVnLT5teV9yZWdfdm9pZCA9ICh2b2lkICopKHVpbnRwdHJfdCltdWx0OworICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICk7CisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywgQVNOX0lOVEVHRVIsIDApOworICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBDT0xVTU5fTE1TRU5TT1JTX0lOREVYOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fTE1TRU5TT1JTX1ZBTFVFOworICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3JlZ2lzdGVyKCByZWcsIHRhYmxlX2luZm8sIGNvbnRhaW5lciwgMCApOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgSEFMIHNlbnNvcnMgbW9kdWxlIHdhcyBjb25maWd1cmVkIGFzIGFuIG9uLWRlbWFuZCBjYWNoaW5nCisgICAgICogIG1vZHVsZSAocmF0aGVyIHRoYW4gYmVpbmcgYXV0b21hdGljYWxseSBsb2FkZWQgcmVndWxhcmx5KSwKKyAgICAgKiAgdGhlbiBlbnN1cmUgdGhpcyB0YWJsZSBtYWtlcyB1c2Ugb2YgdGhhdCBjYWNoZS4KKyAgICAgKi8KKyAgICBjYWNoZSA9IGdldF9zZW5zb3JfY2FjaGUoKTsKKyAgICBpZiAoIGNhY2hlICkgeworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSggcmVnLCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KCBjYWNoZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFibGVfY29udGFpbmVyIik7CisgICAgfQorCit9CisKKworLyoKKyAqICBDb250YWluZXIgZmlsdGVycyBmb3IgdGhlIGZvdXIgdGFibGVzCisgKgorICogIFVzZWQgdG8gZW5zdXJlIHRoYXQgc2Vuc29yIGVudHJpZXMgYXBwZWFyIGluIHRoZSBhcHByb3ByaWF0ZSB0YWJsZS4KKyAqLworaW50IF9zZW5zb3JfZmlsdGVyX3RlbXAoIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICp2ICkgeworICAgIGNvbnN0IG5ldHNubXBfc2Vuc29yX2luZm8gKnNwID0gKGNvbnN0IG5ldHNubXBfc2Vuc29yX2luZm8gKil2OworICAgIC8qIE9ubHkgbWF0Y2hlcyB0ZW1wZXJhdHVyZSBzZW5zb3JzICovCisgICAgcmV0dXJuICgoIHNwLT50eXBlID09IE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgKSA/IDAgOiAxICk7Cit9CisKK2ludCBfc2Vuc29yX2ZpbHRlcl9mYW4oIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICp2ICkgeworICAgIGNvbnN0IG5ldHNubXBfc2Vuc29yX2luZm8gKnNwID0gKGNvbnN0IG5ldHNubXBfc2Vuc29yX2luZm8gKil2OworICAgIC8qIE9ubHkgbWF0Y2hlcyBmYW4gc2Vuc29ycyAqLworICAgIHJldHVybiAoKCBzcC0+dHlwZSA9PSBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSApID8gMCA6IDEgKTsKK30KKworaW50IF9zZW5zb3JfZmlsdGVyX3ZvbHQoIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICp2ICkgeworICAgIGNvbnN0IG5ldHNubXBfc2Vuc29yX2luZm8gKnNwID0gKGNvbnN0IG5ldHNubXBfc2Vuc29yX2luZm8gKil2OworICAgIC8qIE9ubHkgbWF0Y2hlcyB2b2x0YWdlIHNlbnNvcnMgKEFDIG9yIERDKSAqLworICAgIHJldHVybiAoKCggc3AtPnR5cGUgPT0gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDICkgfHwKKyAgICAgICAgICAgICAoIHNwLT50eXBlID09IE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9BQyApKSA/IDAgOiAxICk7Cit9CisKK2ludCBfc2Vuc29yX2ZpbHRlcl9taXNjKCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqdiApIHsKKyAgICBjb25zdCBuZXRzbm1wX3NlbnNvcl9pbmZvICpzcCA9IChjb25zdCBuZXRzbm1wX3NlbnNvcl9pbmZvICopdjsKKyAgICAvKiBNYXRjaGVzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRlbXBlcmF0dXJlLCBmYW4gb3Igdm9sdGFnZSBzZW5zb3JzICovCisgICAgcmV0dXJuICgoKCBzcC0+dHlwZSA9PSBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFICkgfHwKKyAgICAgICAgICAgICAoIHNwLT50eXBlID09IE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNICAgICAgICAgKSB8fAorICAgICAgICAgICAgICggc3AtPnR5cGUgPT0gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDICApIHx8CisgICAgICAgICAgICAgKCBzcC0+dHlwZSA9PSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfQUMgICkpID8gMSA6IDAgKTsKK30KKworCisvKgorICogSGFuZGxlIHJlcXVlc3RzIGZvciBhbnkgb2YgdGhlIGZvdXIgbG1YeHh4U2Vuc29yc1RhYmxlcyAKKyAqCisgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgYWxsIHRoZSB0YWJsZSBzaGFyZSB0aGUKKyAqICBzYW1lIHN0cnVjdHVyZSBhbmQgYmVoYXZpb3VyLgorICovCitpbnQKK2xtU2Vuc29yc1RhYmxlc19oYW5kbGVyKAorICAgIG5ldHNubXBfbWliX2hhbmRsZXIgICAgICAgICAgICAgICAqaGFuZGxlciwKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICAgKnJlZ2luZm8sCisgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAgICAgICpyZXFpbmZvLAorICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICAgICAgICAqcmVxdWVzdHMpIHsKKworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfc2Vuc29yX2luZm8gICAgICAgICpzZW5zb3JfaW5mbzsKKyAgICBpbnQgbXVsdCAgPSAodWludHB0cl90KXJlZ2luZm8tPm15X3JlZ192b2lkOworCisgICAgREVCVUdNU0dUTCgoICJ1Y2Qtc25tcC9sbXNlbnNvcnNNaWIiLCJsbVNlbnNvcnNUYWJsZXNfaGFuZGxlciAtIHJvb3Q6ICIpKTsKKyAgICBERUJVR01TR09JRCgoInVjZC1zbm1wL2xtc2Vuc29yc01pYiIsIHJlZ2luZm8tPnJvb3RvaWQsIHJlZ2luZm8tPnJvb3RvaWRfbGVuKSk7CisgICAgREVCVUdNU0coKCAgICJ1Y2Qtc25tcC9sbXNlbnNvcnNNaWIiLCIsIG1vZGUgJWRcbiIsIHJlcWluZm8tPm1vZGUgKSk7CisgICAgLyoKKyAgICAgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IHRhYmxlLCBzbyB3ZSBvbmx5IG5lZWQgdG8gaGFuZGxlIEdFVCByZXF1ZXN0cy4KKyAgICAgKiAgICAoVGhlIGNvbnRhaW5lciBoZWxwZXIgY29udmVydHMgR0VUTkVYVC0+R0VUIHJlcXVlc3RzIGF1dG9tYXRpY2FsbHkpLgorICAgICAqLworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBzZW5zb3JfaW5mbyA9IChuZXRzbm1wX3NlbnNvcl9pbmZvICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKCAhc2Vuc29yX2luZm8gKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSElOU1RBTkNFKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIHRhYmxlX2luZm8gICA9ICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9MTVNFTlNPUlNfSU5ERVg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNvcl9pbmZvLT5pZHgub2lkc1swXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9MTVNFTlNPUlNfREVWSUNFOgorICAgICAgICAgICAgICAgIGlmICggc2Vuc29yX2luZm8tPmRlc2NyWzBdICE9ICdcMCcgKSB7CisgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNvcl9pbmZvLT5kZXNjciwgc3RybGVuKHNlbnNvcl9pbmZvLT5kZXNjcikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNvcl9pbmZvLT5uYW1lLCAgc3RybGVuKHNlbnNvcl9pbmZvLT5uYW1lKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fTE1TRU5TT1JTX1ZBTFVFOgorICAgICAgICAgICAgICAgIC8qIE11bHRpcGx5IHRoZSB2YWx1ZSBieSB0aGUgYXBwcm9wcmlhdGUgc2NhbGluZyBmYWN0b3IgZm9yIHRoaXMgdGFibGUgKi8KKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fR0FVR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKG11bHQqc2Vuc29yX2luZm8tPnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNUKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4NWRkMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgTE1fU0VOU09SU19NSUJfSAorI2RlZmluZSBMTV9TRU5TT1JTX01JQl9ICisKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMpCitjb25maWdfYWRkX21pYihMTS1TRU5TT1JTLU1JQikKKworLyogZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCit2b2lkIGluaXRfbG1zZW5zb3JzTWliKHZvaWQpOworCisvKgorICogSGFuZGxlciBhbmQgQ29sdW1uIGRlZmluaXRpb25zIGZvciBsbVh4eHhTZW5zb3JzVGFibGUKKyAqCisgKiBOb3RlIHRoYXQgdGhlIHNhbWUgaGFuZGxlciAoYW5kIGhlbmNlIHRoZSBzYW1lCisgKiAgY29sdW1uIGlkZW50aWZpZXJzKSBhcmUgdXNlZCBmb3IgYWxsIGZvdXIgdGFibGVzLgorICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIGFsbCB0aGUgdGFibGUgc2hhcmUgdGhlCisgKiAgc2FtZSBzdHJ1Y3R1cmUgYW5kIGJlaGF2aW91ci4KKyAqLworTmV0c25tcF9Ob2RlX0hhbmRsZXIgbG1TZW5zb3JzVGFibGVzX2hhbmRsZXI7CisjZGVmaW5lIENPTFVNTl9MTVNFTlNPUlNfSU5ERVgJCTEKKyNkZWZpbmUgQ09MVU1OX0xNU0VOU09SU19ERVZJQ0UJCTIKKyNkZWZpbmUgQ09MVU1OX0xNU0VOU09SU19WQUxVRQkJMworCisjZW5kaWYgLyogTE1fU0VOU09SU19NSUJfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jCmluZGV4IGMzMDY1MDYuLjMxNzgzMzAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMKQEAgLTk5LDExICs5OSw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTExMiwxNiArMTA4LDE2IEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmZGVmIGR5bml4CiAjaW5jbHVkZSA8c3lzL21jX3ZtcGFyYW0uaD4KICNlbmRpZgogI2lmIGRlZmluZWQoaHB1eDEwKSB8fCBkZWZpbmVkKGhwdXgxMSkKICNpbmNsdWRlIDxzeXMvcHN0YXQuaD4KICNlbmRpZgotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQorI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2VuZGlmCiAjaWYgSEFWRV9TWVNfU1lTR0VUX0gKQEAgLTEzNCwxMCArMTMwLDIyIEBACiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJsb2FkYXZlLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogI2luY2x1ZGUgImtlcm5lbC5oIgogCi1kb3VibGUgICAgICAgICAgbWF4bG9hZFszXTsKK3N0YXRpYyBkb3VibGUgbWF4bG9hZFszXTsKK3N0YXRpYyBpbnQgbGFDb25maWdTZXQgPSAwOworCitzdGF0aWMgaW50Citsb2FkYXZlX3N0b3JlX2NvbmZpZyhpbnQgYSwgaW50IGIsIHZvaWQgKmMsIHZvaWQgKmQpCit7CisgICAgY2hhciBsaW5lW1NOTVBfTUFYQlVGX1NNQUxMXTsKKyAgICBpZiAobGFDb25maWdTZXQgPiAwKSB7CisgICAgICAgIHNucHJpbnRmKGxpbmUsIFNOTVBfTUFYQlVGX1NNQUxMLCAicGxvYWQgJS4wMmYgJS4wMmYgJS4wMmYiLCBtYXhsb2FkWzBdLCBtYXhsb2FkWzFdLCBtYXhsb2FkWzJdKTsKKyAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOworICAgIH0KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQogCiB2b2lkCiBpbml0X2xvYWRhdmUodm9pZCkKQEAgLTE0OCwyNCArMTU2LDI0IEBACiAgICAgICogaW5mb3JtYXRpb24gYXQgCiAgICAgICovCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX2xvYWRhdmVfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7TE9BREFWRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsCi0gICAgICAgICB7TE9BREFWRX19LAotICAgICAgICB7TE9BRE1BWFZBTCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsCi0gICAgICAgICB7TE9BRE1BWFZBTH19LAotICAgICAgICB7TE9BREFWRUlOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLAotICAgICAgICAge0xPQURBVkVJTlR9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtMT0FEQVZFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsIHtMT0FEQVZFfX0sCisgICAgICAgIHtMT0FETUFYVkFMLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLCB7TE9BRE1BWFZBTH19LAorICAgICAgICB7TE9BREFWRUlOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwge0xPQURBVkVJTlR9fSwKICNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKLSAgICAgICAge0xPQURBVkVGTE9BVCwgQVNOX09QQVFVRV9GTE9BVCwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsCi0gICAgICAgICB7TE9BREFWRUZMT0FUfX0sCisgICAgICAgIHtMT0FEQVZFRkxPQVQsIEFTTl9PUEFRVUVfRkxPQVQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwge0xPQURBVkVGTE9BVH19LAogI2VuZGlmCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwKLSAgICAgICAgIHtFUlJPUk1TR319CisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCkBAIC0xODEsOSArMTg5LDIyIEBACiAgICAgUkVHSVNURVJfTUlCKCJ1Y2Qtc25tcC9sb2FkYXZlIiwgZXh0ZW5zaWJsZV9sb2FkYXZlX3ZhcmlhYmxlcywKICAgICAgICAgICAgICAgICAgdmFyaWFibGUyLCBsb2FkYXZlX3ZhcmlhYmxlc19vaWQpOwogCisgICAgbGFDb25maWdTZXQgPSAwOworCiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImxvYWQiLCBsb2FkYXZlX3BhcnNlX2NvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkYXZlX2ZyZWVfY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXgxIFttYXg1XSBbbWF4MTVdIik7CisKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigicGxvYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRhdmVfcGFyc2VfY29uZmlnLCBOVUxMLCBOVUxMKTsKKworCisgICAgLyoKKyAgICAgKiB3ZSBuZWVkIHRvIGJlIGNhbGxlZCBiYWNrIGxhdGVyCisgICAgICovCisgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRhdmVfc3RvcmVfY29uZmlnLCBOVUxMKTsKKwogfQogCiB2b2lkCkBAIC0xOTEsNiArMjEyLDI1IEBACiB7CiAgICAgaW50ICAgICAgICAgICAgIGk7CiAKKyAgICBpZiAoc3RyY21wKHRva2VuLCAicGxvYWQiKSA9PSAwKSB7CisgICAgICAgIGlmIChsYUNvbmZpZ1NldCA8IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgbG9hZFxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsYUNvbmZpZ1NldCsrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGxhQ29uZmlnU2V0ID4gMCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSBsb2FkXG4iKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBGYWxsIHRocm91Z2ggYW5kIGNvcHkgaW4gdGhpcyB2YWx1ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICB9CisgICAgICAgIGxhQ29uZmlnU2V0ID0gLTE7CisgICAgfQorCiAgICAgZm9yIChpID0gMDsgaSA8PSAyOyBpKyspIHsKICAgICAgICAgaWYgKGNwdHIgIT0gTlVMTCkKICAgICAgICAgICAgIG1heGxvYWRbaV0gPSBhdG9mKGNwdHIpOwpAQCAtMjE4LDEyICsyNTgsNiBAQAogaW50CiB0cnlfZ2V0bG9hZGF2Zyhkb3VibGUgKnJfYXZlLCBzaXplX3Qgc19hdmUpCiB7Ci0jaWYgZGVmaW5lZChIQVZFX0dFVExPQURBVkcpIHx8IGRlZmluZWQobGludXgpIHx8IGRlZmluZWQodWx0cml4KSBcCi0gICAgfHwgZGVmaW5lZChzdW4pIHx8IGRlZmluZWQoX19hbHBoYSkgfHwgZGVmaW5lZChkeW5peCkgXAotICAgIHx8ICFkZWZpbmVkKGN5Z3dpbikgJiYgZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfTkxJU1QpIFwKLSAgICAgICAmJiBkZWZpbmVkKExPQURBVkVfU1lNQk9MKQotICAgIGRvdWJsZSAgICAgICAgICpwYXZlID0gcl9hdmU7Ci0jZW5kaWYKICNpZm5kZWYgSEFWRV9HRVRMT0FEQVZHCiAjaWZkZWYgSEFWRV9TWVNfRklYUE9JTlRfSAogICAgIGZpeCAgICAgICAgICAgICBmYXZlbnJ1blszXTsKQEAgLTIzNyw4ICsyNzEsNyBAQAogI2RlZmluZSBGSVhfVE9fREJMKF9JTikgKCgoZG91YmxlKSBfSU4pLygoZG91YmxlKSBGU0NBTEUpKQogI2VuZGlmCiAjZW5kaWYKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQotICAgIGludCAgICAgICAgICAgICBmYXZlbnJ1blszXTsKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgcGVyZnN0YXRfY3B1X3RvdGFsX3QgY3M7CiAjZW5kaWYKICNpZiBkZWZpbmVkKGhwdXgxMCkgfHwgZGVmaW5lZChocHV4MTEpCkBAIC0yNTEsMTYgKzI4NCwxNiBAQAogI2VuZGlmCS8qICFIQVZFX0dFVExPQURBVkcgKi8KIAogI2lmZGVmIEhBVkVfR0VUTE9BREFWRwotICAgIGlmIChnZXRsb2FkYXZnKHBhdmUsIHNfYXZlKSA9PSAtMSkKKyAgICBpZiAoZ2V0bG9hZGF2ZyhyX2F2ZSwgc19hdmUpID09IC0xKQogICAgICAgICByZXR1cm4gKC0xKTsKICNlbGlmIGRlZmluZWQobGludXgpCiAgICAgewogICAgICAgICBGSUxFICAgICAgICAgICAqaW4gPSBmb3BlbigiL3Byb2MvbG9hZGF2ZyIsICJyIik7CiAgICAgICAgIGlmICghaW4pIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzbm1wZDogY2Fubm90IG9wZW4gL3Byb2MvbG9hZGF2Z1xuIik7CisgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJzbm1wZDogY2Fubm90IG9wZW4gL3Byb2MvbG9hZGF2Z1xuIikpOwogICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgIH0KLSAgICAgICAgZnNjYW5mKGluLCAiJWxmICVsZiAlbGYiLCBwYXZlLCAocGF2ZSArIDEpLCAocGF2ZSArIDIpKTsKKyAgICAgICAgZnNjYW5mKGluLCAiJWxmICVsZiAlbGYiLCByX2F2ZSwgKHJfYXZlICsgMSksIChyX2F2ZSArIDIpKTsKICAgICAgICAgZmNsb3NlKGluKTsKICAgICB9CiAjZWxpZiAoZGVmaW5lZCh1bHRyaXgpIHx8IGRlZmluZWQoc3VuKSB8fCBkZWZpbmVkKF9fYWxwaGEpIHx8IGRlZmluZWQoZHluaXgpKQpAQCAtMjY4LDE0ICszMDEsMTQgQEAKICAgICAgICAgMCkKICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgZm9yIChpID0gMDsgaSA8IHNfYXZlOyBpKyspCi0gICAgICAgICoocGF2ZSArIGkpID0gRklYX1RPX0RCTChmYXZlbnJ1bltpXSk7CisgICAgICAgICoocl9hdmUgKyBpKSA9IEZJWF9UT19EQkwoZmF2ZW5ydW5baV0pOwogI2VsaWYgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKQogICAgIGlmIChwc3RhdF9nZXRkeW5hbWljKCZwc3RfYnVmLCBzaXplb2Yoc3RydWN0IHBzdF9keW5hbWljKSwgMSwgMCkgPCAwKQogICAgICAgICByZXR1cm4oLTEpOwogICAgIHJfYXZlWzBdID0gcHN0X2J1Zi5wc2RfYXZnXzFfbWluOwogICAgIHJfYXZlWzFdID0gcHN0X2J1Zi5wc2RfYXZnXzVfbWluOwogICAgIHJfYXZlWzJdID0gcHN0X2J1Zi5wc2RfYXZnXzE1X21pbjsKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgaWYocGVyZnN0YXRfY3B1X3RvdGFsKChwZXJmc3RhdF9pZF90ICopTlVMTCwgJmNzLCBzaXplb2YocGVyZnN0YXRfY3B1X3RvdGFsX3QpLCAxKSA+IDApIHsKICAgICAgICAgcl9hdmVbMF0gPSBjcy5sb2FkYXZnWzBdIC8gNjU1MzYuMDsKICAgICAgICAgcl9hdmVbMV0gPSBjcy5sb2FkYXZnWzFdIC8gNjU1MzYuMDsKQEAgLTI5MCw3ICszMjMsNyBAQAogICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9sb2FkYXZlIiwgImlyaXg2OiAlZCAlZCAlZFxuIiwgZmF2ZW5ydW5bMF0sIGZhdmVucnVuWzFdLCBmYXZlbnJ1blsyXSkpOwogI2VsaWYgIWRlZmluZWQoY3lnd2luKQogI2lmIGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX05MSVNUKSAmJiBkZWZpbmVkKExPQURBVkVfU1lNQk9MKQotICAgIGlmIChhdXRvX25saXN0KExPQURBVkVfU1lNQk9MLCAoY2hhciAqKSBwYXZlLCBzaXplb2YoZG91YmxlKSAqIHNfYXZlKQorICAgIGlmIChhdXRvX25saXN0KExPQURBVkVfU1lNQk9MLCAoY2hhciAqKSByX2F2ZSwgc2l6ZW9mKGRvdWJsZSkgKiBzX2F2ZSkKICAgICAgICAgPT0gMCkKICNlbmRpZgogICAgICAgICByZXR1cm4gKC0xKTsKQEAgLTMxNiw2ICszNDksNzAgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAord3JpdGVfbGFDb25maWcoaW50IGFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHZhcl92YWxfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcl92YWxfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBzdGF0UCwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQoreworICAgIHN0YXRpYyBkb3VibGUgbGFDb25maWcgPSAwOworCisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICBjYXNlIFJFU0VSVkUxOiAvKiBDaGVjayB2YWx1ZXMgZm9yIGFjY2VwdGFiaWxpdHkgKi8KKyAgICAgICAgaWYgKHZhcl92YWxfdHlwZSAhPSBBU05fT0NURVRfU1RSKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidWNkLXNubXAvbG9hZGF2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gbGFDb25maWcgbm90IEFTTl9PQ1RFVF9TVFJcbiIpKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhcl92YWxfbGVuID4gOCB8fCB2YXJfdmFsX2xlbiA8PSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidWNkLXNubXAvbG9hZGF2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gbGFDb25maWc6IGJhZCBsZW5ndGhcbiIpKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYUNvbmZpZ1NldCA8IDApIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGUgb2JqZWN0IGlzIHNldCBpbiBhIHJlYWQtb25seSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgUkVTRVJWRTI6IC8qIEFsbG9jYXRlIG1lbW9yeSBhbmQgc2ltaWxhciByZXNvdXJjZXMgKi8KKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBidWZbOF07CisgICAgICAgICAgICBpbnQgb2xkX2Vycm5vID0gZXJybm87CisgICAgICAgICAgICBkb3VibGUgdmFsOworICAgICAgICAgICAgY2hhciAqZW5kcDsKKworICAgICAgICAgICAgc3ByaW50ZihidWYsICIlLipzIiwgKGludCkgdmFyX3ZhbF9sZW4sIChjaGFyICopdmFyX3ZhbCk7CisgICAgICAgICAgICB2YWwgPSBzdHJ0b2QoYnVmLCAmZW5kcCk7CisKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFUkFOR0UgfHwgKmVuZHAgIT0gJ1wwJyB8fCB2YWwgPCAwIHx8IHZhbCA+IDY1NTM2LjAwKSB7CisgICAgICAgICAgICAgICAgZXJybm8gPSBvbGRfZXJybm87CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL2xvYWRhdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBsYUNvbmZpZzogaW52YWxpZCB2YWx1ZVxuIikpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlcnJubyA9IG9sZF9lcnJubzsKKworICAgICAgICAgICAgbGFDb25maWcgPSB2YWw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENPTU1JVDoKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGlkeCA9IG5hbWVbbmFtZV9sZW4gLSAxXSAtIDE7CisgICAgICAgICAgICBtYXhsb2FkW2lkeF0gPSBsYUNvbmZpZzsKKyAgICAgICAgICAgIGxhQ29uZmlnU2V0ID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCiB1X2NoYXIgICAgICAgICAqCiB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlKHN0cnVjdCB2YXJpYWJsZSAqIHZwLAogICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLApAQCAtMzM1LDYgKzQzMiwxMCBAQAogICAgIGNhc2UgTUlCSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0ID0gbmFtZVsqbGVuZ3RoIC0gMV07CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBMT0FETUFYVkFMOgorICAgICAgICAvKiBzZXR1cCB3cml0ZSBtZXRob2QsIGJ1dCBkb24ndCByZXR1cm4geWV0ICovCisgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9sYUNvbmZpZzsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFUlJPUk5BTUU6CiAgICAgICAgIHNwcmludGYoZXJybXNnLCAiTG9hZC0lZCIsICgobmFtZVsqbGVuZ3RoIC0gMV0gPT0gMSkgPyAxIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobmFtZVsqbGVuZ3RoIC0gMV0gPT0gMikgPyA1IDogMTUpKSk7CkBAIC0zNDMsNyArNDQ0LDcgQEAKICAgICB9CiAgICAgaWYgKHRyeV9nZXRsb2FkYXZnKCZhdmVucnVuWzBdLCBzaXplb2YoYXZlbnJ1bikgLyBzaXplb2YoYXZlbnJ1blswXSkpCiAgICAgICAgID09IC0xKQotICAgICAgICByZXR1cm4gKDApOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgTE9BREFWRToKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oCmluZGV4IDQ5N2JmYjguLjRmNWU3YTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmgKQEAgLTQsNyArNCw3IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9MT0FEQVZFX0gKICNkZWZpbmUgX01JQkdST1VQX0xPQURBVkVfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQogCiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X2xvYWRhdmUodm9pZCk7CiAgICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9leHRlbnNpYmxlX2xvYWRhdmU7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYwppbmRleCA2YjY3MmZhLi44M2I0ZTRhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMKQEAgLTksMjM1ICs5LDEwNCBAQAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKyNpbmNsdWRlICJsb2dtYXRjaC5oIgorCiAjaWZkZWYgSEFWRV9SRUdFWF9ICiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0KLQotI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCi0jIGluY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1lTX1RJTUVfSAotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8dGltZS5oPgotIyBlbmRpZgotI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxyZWdleC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInN0cnVjdC5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLSNpbmNsdWRlICJsb2dtYXRjaC5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCiAKLSNkZWZpbmUgTUFYTE9HTUFUQ0ggICA1MAorLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBmaWxlbmFtZSBwYXR0ZXJuCisgKiAgY29udGFpbnMgdGhlICUgY2hhcmFjdGVyIGluZGljYXRpbmcgYSB2YXJpYWJsZQorICogIGZpbGVuYW1lIChpLmUuIGl0IHVzZXMgZGF0ZS90aW1lIGZvcm1hdCBjb250cm9sCisgKiAgY29kZXMsIHNlZSAnbWFuIGRhdGUnKSB0aGVuIGV4cGFuZHMgdGhvc2UgY29udHJvbAorICogIGNvZGVzIGJhc2VkIG9uIGN1cnJlbnQgdGltZSBhbmQgc2V0cyB0aGUKKyAqICBmaWxlbmFtZSBmaWVsZCBpbiB0aGUgc3RydWN0LgorICogIFJldHVybnMgMSBpZiB0aGUgZmlsZW5hbWUgY2hhbmdlZCwgMCBvdGhlcndpc2UKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KIAotc3RydWN0IGxvZ21hdGNoc3RhdCBsb2dtYXRjaFRhYmxlW01BWExPR01BVENIXTsKLWludCAgICAgICAgICAgICBsb2dtYXRjaENvdW50OwotCi12b2lkCi1pbml0X2xvZ21hdGNoKHZvaWQpCitzdGF0aWMgaW50Citsb2dtYXRjaF91cGRhdGVfZmlsZW5hbWUoY29uc3QgY2hhciAqIHBhdHRlcm4sIGNoYXIgKiBjdXJyZW50RmlsZW5hbWUpCiB7Ci0gICAgc3RydWN0IHZhcmlhYmxlMiBsb2dtYXRjaF9pbmZvW10gPSB7Ci0gICAgICAgIHtMT0dNQVRDSF9JTkZPLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMH0KLSAgICB9OwotCi0gICAgc3RydWN0IHZhcmlhYmxlMiBsb2dtYXRjaF90YWJsZVtdID0gewotICAgICAgICB7TE9HTUFUQ0hfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MX19LAotICAgICAgICB7TE9HTUFUQ0hfTkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezJ9fSwKLSAgICAgICAge0xPR01BVENIX0ZJTEVOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLAotICAgICAgICAgezN9fSwKLSAgICAgICAge0xPR01BVENIX1JFR0VYLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7NH19LAotICAgICAgICB7TE9HTUFUQ0hfR0xPQkFMQ1RSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwKLSAgICAgICAgIHs1fX0sCi0gICAgICAgIHtMT0dNQVRDSF9HTE9CQUxDTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLAotICAgICAgICAgezZ9fSwKLSAgICAgICAge0xPR01BVENIX0NVUlJFTlRDVFIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLAotICAgICAgICAgezd9fSwKLSAgICAgICAge0xPR01BVENIX0NVUlJFTlRDTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLAotICAgICAgICAgezh9fSwKLSAgICAgICAge0xPR01BVENIX0NPVU5URVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7OX19LAotICAgICAgICB7TE9HTUFUQ0hfQ09VTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MTB9fSwKLSAgICAgICAge0xPR01BVENIX0ZSRVEsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MTF9fSwKLSAgICAgICAge0xPR01BVENIX0VSUk9SLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezEwMH19LAotICAgICAgICB7TE9HTUFUQ0hfTVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MTAxfX0KLSAgICB9OworICAgIHRpbWVfdCB0OworICAgIHN0cnVjdCB0bSAqdG1wOworICAgIGNoYXIgbmV3RmlsZW5hbWVbMjU2XTsKIAogICAgIC8qCi0gICAgICogRGVmaW5lIHRoZSBPSUQgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBtaWIgdHJlZSB0aGF0IHdlJ3JlCi0gICAgICogcmVnaXN0ZXJpbmcgdW5kZXJuZWF0aCAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogaWYgdGhlIGZpbGVuYW1lIHBhdHRlcm4gZG9lc24ndCBoYXZlIHRoZSAiJSIgY2hhcmFjdGVyIGp1c3QgcmV0dXJuLAorICAgICAqIHNpbmNlIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgKi8KLSAgICBvaWQgICAgICAgICAgICAgbG9nbWF0Y2hfaW5mb19vaWRbXSA9IHsgTkVUU05NUF9VQ0RBVklTX01JQiwgMTYsIDEgfTsKLSAgICBvaWQgICAgICAgICAgICAgbG9nbWF0Y2hfdmFyaWFibGVzX29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCAxNiwgMiwgMSB9OwotCi0gICAgLyoKLSAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgdG8gaGFuZGxlIG91ciBtaWIgdHJlZSAKLSAgICAgKi8KLSAgICBSRUdJU1RFUl9NSUIoInVjZC1zbm1wL2xvZ21hdGNoIiwgbG9nbWF0Y2hfaW5mbywgdmFyaWFibGUyLAotICAgICAgICAgICAgICAgICBsb2dtYXRjaF9pbmZvX29pZCk7Ci0gICAgUkVHSVNURVJfTUlCKCJ1Y2Qtc25tcC9sb2dtYXRjaCIsIGxvZ21hdGNoX3RhYmxlLCB2YXJpYWJsZTIsCi0gICAgICAgICAgICAgICAgIGxvZ21hdGNoX3ZhcmlhYmxlc19vaWQpOwotCi0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImxvZ21hdGNoIiwgbG9nbWF0Y2hfcGFyc2VfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoX2ZyZWVfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2dtYXRjaCBuYW1lIHBhdGggY3ljbGV0aW1lIHJlZ2V4Iik7Ci0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAhISEtLS0hISEgUFVCTElDICEhISAtLS0gISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiBsb2dtYXRjaF9mcmVlX2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhpcyBtaWIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkCi1sb2dtYXRjaF9mcmVlX2NvbmZpZyh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBpOwotCi0gICAgLyoKLSAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICogdGhlIG9ubHkgbWVtb3J5IHdlIGhhdmUgYWxsb2NhdGVkICAgIAotICAgICAqIGlzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHJlZ2NvbXAgICAKLSAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbG9nbWF0Y2hDb3VudDsgaSsrKSB7Ci0KLSAgICAgICAgcmVnZnJlZSgmKGxvZ21hdGNoVGFibGVbaV0ucmVnZXhCdWZmZXIpKTsKKyAgICBpZiAoc3RyY2hyKHBhdHRlcm4sICclJykgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgbG9nbWF0Y2hDb3VudCA9IDA7Ci19CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogISEhLS0tISEhIFBVQkxJQyAhISEgLS0tICEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogbG9nbWF0Y2hfcGFyc2VfY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogcGFyc2Ugb25lIGxpbmUgZnJvbSBzbm1wZC5jb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICB0ID0gdGltZShOVUxMKTsKKyAgICB0bXAgPSBsb2NhbHRpbWUoJnQpOwogCi12b2lkCi1sb2dtYXRjaF9wYXJzZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCi17CisgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgIHBlcnJvcigibG9jYWx0aW1lIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIGNoYXIgc3BhY2VfbmFtZTsKLSAgICBjaGFyIHNwYWNlX3BhdGg7CisgICAgLyogcmVzdWx0IG9mIGV4cGFuc2lvbiBtdXN0IGZpdCBpbnRvIG5ld0ZpbGVuYW1lLCBvdGhlcndpc2UgcmV0dXJuaW5nICovCisgICAgaWYgKHN0cmZ0aW1lKG5ld0ZpbGVuYW1lLCBzaXplb2YobmV3RmlsZW5hbWUpLCBwYXR0ZXJuLCB0bXApID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi0gICAgaWYgKGxvZ21hdGNoQ291bnQgPCBNQVhMT0dNQVRDSCkgewotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZyZXF1ZW5jeSA9IDMwOwotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnRoaXNJbmRleCA9IGxvZ21hdGNoQ291bnQ7Ci0KLQotICAgICAgICAvKgotICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAqIGJlIGNhcmVmdWwgdGhpcyBjb3VudGVyIG5lZWRzIHRvIGJlICAKLSAgICAgICAgICogcmVzZXQgZnJvbSBwZXJzaXN0ZW50IHN0b3JhZ2UgICAgICAgICAKLSAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgKi8KLQotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmdsb2JhbE1hdGNoQ291bnRlciA9IDA7Ci0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uY3VycmVudE1hdGNoQ291bnRlciA9IDA7Ci0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ubWF0Y2hDb3VudGVyID0gMDsKLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS52aXJnaW4gPSBUUlVFOwotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmN1cnJlbnRGaWxlUG9zaXRpb24gPSAwOwotCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgKiBiZSBjYXJlZnVsOiB0aGUgZmxhZyAyNTUgbXVzdCBmaXQgdG8gCi0gICAgICAgICAqIHRoZSBzaXplIG9mIHJlZ0V4IGFzIGRlZmluZGVkIGluICAgICAKLSAgICAgICAgICogbG9nbWF0Y2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAqLwotCi0gICAgICAgIHNzY2FuZihjcHRyLCAiJTI1NXMlYyUyNTVzJWMgJWQgJTI1NWNcbiIsCi0gICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLm5hbWUsCi0JICAgICAgICZzcGFjZV9uYW1lLAotICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5maWxlbmFtZSwKLQkgICAgICAgJnNwYWNlX3BhdGgsCi0gICAgICAgICAgICAgICAmKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZnJlcXVlbmN5KSwKLSAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnRXgpOwotCi0JLyoKLQkgKiBMb2cgYW4gZXJyb3IgdGhlbiByZXR1cm4gaWYgYW55IG9mIHRoZSBzdHJpbmdzIHNjYW5uZWQgaW4gd2VyZQotCSAqIGxhcmdlciB0aGVuIHRoZXkgc2hvdWxkIGhhdmUgYmVlbi4KLQkgKi8KLQlpZiAoc3BhY2VfbmFtZSAhPSAnICcpIHsKLQkJc25tcF9sb2coTE9HX0VSUiwgImxvZ21hdGNoX3BhcnNlX2NvbmZpZzogdGhlIG5hbWUgc2Nhbm5lZCAiIFwKLQkJICJpbiBmcm9tIGxpbmUgJXMgaXMgdG9vIGxhcmdlLiBsb2dtYXRjaENvdW50ID0gJWRcbiIsCi0JCSBjcHRyLCBsb2dtYXRjaENvdW50KTsKLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAoc3BhY2VfcGF0aCAhPSAnICcpIHsKLQkJc25tcF9sb2coTE9HX0VSUiwgImxvZ21hdGNoX3BhcnNlX2NvbmZpZzogdGhlIGZpbGUgbmFtZSAiIFwKLQkJICJzY2FubmVkIGluIGZyb20gbGluZSAlcyBpcyB0b28gbGFyZ2UuIGxvZ21hdGNoQ291bnQgPSAlZFxuIiwKLQkJICAgIGNwdHIsIGxvZ21hdGNoQ291bnQpOwotCQlyZXR1cm47Ci0JfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICoganVzdCB0byBiZSBzYWZlICJOVUxMIiB0aGUgZW5kIG9mICAgIAotICAgICAgICAgKiB0aGUgYXJhcnkgcmVnRXggYXMgc3NjYW5mIHdvbid0IGRvICAgCi0gICAgICAgICAqIGl0IHdpdGggdGhlICVjIG1vZGlmaWVyICAgICAgICAgICAgICAKLSAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgKi8KLQotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ0V4WzI1NV0gPSAnXDAnOwotCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgKiBub3cgY29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uICAgCi0gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICovCi0KLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5teVJlZ2V4RXJyb3IgPQotICAgICAgICAgICAgcmVnY29tcCgmKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnZXhCdWZmZXIpLAotICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ0V4LAotICAgICAgICAgICAgICAgICAgICBSRUdfRVhURU5ERUQgfCBSRUdfTk9TVUIpOwotCi0gICAgICAgIGlmIChsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZyZXF1ZW5jeSA+IDApIHsKLSAgICAgICAgICAgIHNubXBfYWxhcm1fcmVnaXN0ZXIobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5mcmVxdWVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBX1JFUEVBVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNOTVBBbGFybUNhbGxiYWNrICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ21hdGNoX1NjaGVkdWxlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdKQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLQotICAgICAgICBsb2dtYXRjaENvdW50Kys7CisgICAgLyogaWYgc2FtZSBhcyBjdXJyZW50IGZpbGVuYW1lLCBqdXN0IHJldHVybiAqLworICAgIGlmIChzdHJjbXAoY3VycmVudEZpbGVuYW1lLCBuZXdGaWxlbmFtZSkgPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBvdGhlcndpc2UgdXBkYXRlIGN1cnJlbnRGaWxlbmFtZSBhbmQgcmV0dXJuIDEgKi8KKyAgICAgICAgc3RyY3B5KGN1cnJlbnRGaWxlbmFtZSwgbmV3RmlsZW5hbWUpOworICAgICAgICByZXR1cm4gMTsKICAgICB9CiB9CiAKK3N0cnVjdCBsb2dtYXRjaHN0YXQgeworICAgIGNoYXIgICAgICAgICAgICBmaWxlbmFtZVBhdHRlcm5bMjU2XTsKKyAgICBjaGFyICAgICAgICAgICAgZmlsZW5hbWVbMjU2XTsKKyAgICBjaGFyICAgICAgICAgICAgcmVnRXhbMjU2XTsKKyAgICBjaGFyICAgICAgICAgICAgbmFtZVsyNTZdOworICAgIEZJTEUgICAgICAgICAgICpsb2dmaWxlOworICAgIGxvbmcgICAgICAgICAgICBjdXJyZW50RmlsZVBvc2l0aW9uOworICAgIHVuc2lnbmVkIGxvbmcgICBnbG9iYWxNYXRjaENvdW50ZXI7CisgICAgdW5zaWduZWQgbG9uZyAgIGN1cnJlbnRNYXRjaENvdW50ZXI7CisgICAgdW5zaWduZWQgbG9uZyAgIG1hdGNoQ291bnRlcjsKKyAgICByZWdleF90ICAgICAgICAgcmVnZXhCdWZmZXI7CisgICAgaW50ICAgICAgICAgICAgIG15UmVnZXhFcnJvcjsKKyAgICBpbnQgICAgICAgICAgICAgdmlyZ2luOworICAgIGludCAgICAgICAgICAgICB0aGlzSW5kZXg7CisgICAgaW50ICAgICAgICAgICAgIGZyZXF1ZW5jeTsKK307CisKKyNkZWZpbmUgTUFYTE9HTUFUQ0ggICAyNTAKKworc3RhdGljIHN0cnVjdCBsb2dtYXRjaHN0YXQgbG9nbWF0Y2hUYWJsZVtNQVhMT0dNQVRDSF07CitzdGF0aWMgaW50ICAgICAgICAgICAgICAgICBsb2dtYXRjaENvdW50ID0gMDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAhISEtLS0hISEgUFVCTElDICEhISAtLS0gISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKiB1cGRhdGVMb2dtYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiYWNrIGJ5IHNubXBkIGFsYXJtcyAgICAgICAgICAgICAgICAgKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0KLXZvaWQKK3N0YXRpYyB2b2lkCiB1cGRhdGVMb2dtYXRjaChpbnQgaWluZGV4KQogewogCkBAIC0yNTAsNiArMTE5LDcgQEAKICAgICBpbnQgICAgICAgICAgICAgdG9vYmlnOwogICAgIGludCAgICAgICAgICAgICBhbnlDaGFuZ2VzID0gRkFMU0U7CiAgICAgc3RydWN0IHN0YXQgICAgIHNiOworICAgIGNoYXIgICAgICAgICAgICBsYXN0RmlsZW5hbWVbMjU2XTsKIAogICAgIC8qCiAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIApAQCAtMjYyLDcgKzEzMiw3IEBACiAgICAgICovCiAKICAgICBzbnByaW50ZihwZXJmaWxlbmFtZSwgc2l6ZW9mKHBlcmZpbGVuYW1lKSwgIiVzL3NubXBkX2xvZ21hdGNoXyVzLnBvcyIsCi0JZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksIGxvZ21hdGNoVGFibGVbaWluZGV4XS5uYW1lKTsKKyAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLm5hbWUpOwogCiAgICAgaWYgKGxvZ21hdGNoVGFibGVbaWluZGV4XS52aXJnaW4pIHsKIApAQCAtMjc3LDcgKzE0Nyw2IEBACiAKICAgICAgICAgaWYgKChwZXJmaWxlID0gZm9wZW4ocGVyZmlsZW5hbWUsICJyIikpKSB7CiAKLQogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAgICAgICAgICAgICAqIHRoZSBwZXJzaXN0ZW50IGRhdGEgZmlsZSBleGlzdHMgc28gICAKQEAgLTI4OCw3ICsxNTcsOCBAQAogCiAgICAgICAgICAgICBwb3MgPSBjb3VudGVyID0gY2NvdW50ZXIgPSAwOwogCi0gICAgICAgICAgICBpZiAoZnNjYW5mKHBlcmZpbGUsICIlbHUgJWx1ICVsdSIsICZwb3MsICZjY291bnRlciwgJmNvdW50ZXIpKSB7CisgICAgICAgICAgICBpZiAoZnNjYW5mKHBlcmZpbGUsICIlbHUgJWx1ICVsdSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICZwb3MsICZjY291bnRlciwgJmNvdW50ZXIsIGxhc3RGaWxlbmFtZSkpIHsKIAogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTI5OSw0MSArMTY5LDUzIEBACiAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICAgICAgaWYgKChsb2dtYXRjaFRhYmxlW2lpbmRleF0ubG9nZmlsZSA9Ci0gICAgICAgICAgICAgICAgICAgIGZvcGVuKGxvZ21hdGNoVGFibGVbaWluZGV4XS5maWxlbmFtZSwgInIiKSkpIHsKLQorICAgICAgICAgICAgICAgIGlmIChsb2dtYXRjaF91cGRhdGVfZmlsZW5hbWUobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmZpbGVuYW1lUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RGaWxlbmFtZSkgPT0gMCkgewogCiAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICAgICAgICAgICAgICogdGhlIGxvZyBmaWxlIGNvdWxkIGJlIG9wZW5lZDsgbm93ICAgIAotICAgICAgICAgICAgICAgICAgICAgKiBsZXQncyB0cnkgdG8gc2V0IHRoZSBwb2ludGVyICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgICAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAqIHRoZSBmaWxlbmFtZSBpcyBzdGlsbCB0aGUgc2FtZSBhcyAKKyAgICAgICAgICAgICAgICAgICAgICogdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHBlcnNpc3RlbnQKKyAgICAgICAgICAgICAgICAgICAgICogZGF0YSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmc2VlawotICAgICAgICAgICAgICAgICAgICAgICAgKGxvZ21hdGNoVGFibGVbaWluZGV4XS5sb2dmaWxlLCBwb3MsIFNFRUtfU0VUKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKGxvZ21hdGNoVGFibGVbaWluZGV4XS5sb2dmaWxlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcGVuKGxvZ21hdGNoVGFibGVbaWluZGV4XS5maWxlbmFtZSwgInIiKSkpIHsKIAogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIHBvaW50ZXIgY291bGQgYmUgc2V0IC0gdGhpcyBpcyAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIG1vc3QgdGhhdCB3ZSBjYW4gZG86IGlmIHRoZSAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICogcG9pbnRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGZpbGUgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZSB3ZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSBwb2ludGVyIAotICAgICAgICAgICAgICAgICAgICAgICAgICogc3RpbGwgcG9pbnRzIHRvIHdoZXJlIGl0IHJlYWQgdGhlICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICogZmlsZSBsYXN0IHRpbWU7IGxldCdzIHJlc3RvcmUgdGhlICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICogZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGxvZyBmaWxlIGNvdWxkIGJlIG9wZW5lZDsgbm93ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICogbGV0J3MgdHJ5IHRvIHNldCB0aGUgcG9pbnRlciAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5jdXJyZW50RmlsZVBvc2l0aW9uID0gcG9zOwotICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmN1cnJlbnRNYXRjaENvdW50ZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjb3VudGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmdsb2JhbE1hdGNoQ291bnRlciA9IGNvdW50ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnNlZWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmxvZ2ZpbGUsIHBvcywgU0VFS19TRVQpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGxvZ21hdGNoVGFibGVbaWluZGV4XS5sb2dmaWxlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBwb2ludGVyIGNvdWxkIGJlIHNldCAtIHRoaXMgaXMgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgbW9zdCB0aGF0IHdlIGNhbiBkbzogaWYgdGhlICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcG9pbnRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGZpbGUgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemUgd2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgcG9pbnRlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGlsbCBwb2ludHMgdG8gd2hlcmUgaXQgcmVhZCB0aGUgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZmlsZSBsYXN0IHRpbWU7IGxldCdzIHJlc3RvcmUgdGhlICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uY3VycmVudEZpbGVQb3NpdGlvbiA9IHBvczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uY3VycmVudE1hdGNoQ291bnRlciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjb3VudGVyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmxvZ2ZpbGUpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5nbG9iYWxNYXRjaENvdW50ZXIgPSBjb3VudGVyOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmY2xvc2UocGVyZmlsZSk7CkBAIC0zNDIsNiArMjI0LDE5IEBACiAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS52aXJnaW4gPSBGQUxTRTsKICAgICB9CiAKKyAgICAvKgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiBjaGVjayBpZiBhIG5ldyBpbnB1dCBmaWxlIG5lZWRzIHRvIGJlIG9wZW5lZAorICAgICAqIGlmIHllcywgcmVzZXQgY291bnRlciBhbmQgcG9zaXRpb24KKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICovCisKKyAgICBpZiAobG9nbWF0Y2hfdXBkYXRlX2ZpbGVuYW1lKGxvZ21hdGNoVGFibGVbaWluZGV4XS5maWxlbmFtZVBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uZmlsZW5hbWUpID09IDEpIHsKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmN1cnJlbnRGaWxlUG9zaXRpb24gPSAwOyAKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmN1cnJlbnRNYXRjaENvdW50ZXIgPSAwOworICAgIH0KKwogCiAgICAgLyoKICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCkBAIC00MjksMTAgKzMyNCwxMSBAQAogICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgICAgICAgICAqLwogCi0gICAgICAgIGZwcmludGYocGVyZmlsZSwgIiVsdSAlbHUgJWx1XG4iLAorICAgICAgICBmcHJpbnRmKHBlcmZpbGUsICIlbHUgJWx1ICVsdSAlc1xuIiwKICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uY3VycmVudEZpbGVQb3NpdGlvbiwKICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uY3VycmVudE1hdGNoQ291bnRlciwKLSAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uZ2xvYmFsTWF0Y2hDb3VudGVyKTsKKyAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uZ2xvYmFsTWF0Y2hDb3VudGVyLAorICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5maWxlbmFtZSk7CiAKICAgICAgICAgZmNsb3NlKHBlcmZpbGUpOwogICAgIH0KQEAgLTQ0MCwyMiArMzM2LDE3MyBAQAogfQogCiAKLXZvaWQKK3N0YXRpYyB2b2lkCiB1cGRhdGVMb2dtYXRjaF9TY2hlZHVsZWQodW5zaWduZWQgaW50IHJlZ2lzdHJhdGlvbk51bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbG9nbWF0Y2hzdGF0ICpsb2dtYXRjaHRhYmxlKQogewotCiAgICAgdXBkYXRlTG9nbWF0Y2gobG9nbWF0Y2h0YWJsZS0+dGhpc0luZGV4KTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBsb2dtYXRjaF9wYXJzZV9jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBwYXJzZSBvbmUgbGluZSBmcm9tIHNubXBkLmNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorbG9nbWF0Y2hfcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQoreworCisgICAgY2hhciBzcGFjZV9uYW1lOworICAgIGNoYXIgc3BhY2VfcGF0aDsKKworICAgIGlmIChsb2dtYXRjaENvdW50IDwgTUFYTE9HTUFUQ0gpIHsKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5mcmVxdWVuY3kgPSAzMDsKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS50aGlzSW5kZXggPSBsb2dtYXRjaENvdW50OwogCiAKKyAgICAgICAgLyoKKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqIGJlIGNhcmVmdWwgdGhpcyBjb3VudGVyIG5lZWRzIHRvIGJlCisgICAgICAgICAqIHJlc2V0IGZyb20gcGVyc2lzdGVudCBzdG9yYWdlCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKi8KKworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmdsb2JhbE1hdGNoQ291bnRlciA9IDA7CisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uY3VycmVudE1hdGNoQ291bnRlciA9IDA7CisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ubWF0Y2hDb3VudGVyID0gMDsKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS52aXJnaW4gPSBUUlVFOworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmN1cnJlbnRGaWxlUG9zaXRpb24gPSAwOworCisKKyAgICAgICAgLyoKKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqIGJlIGNhcmVmdWw6IHRoZSBmbGFnIDI1NSBtdXN0IGZpdCB0bworICAgICAgICAgKiB0aGUgc2l6ZSBvZiByZWdFeCBhcyBkZWZpbmRlZCBpbgorICAgICAgICAgKiBsb2dtYXRjaC5oCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKi8KKworICAgICAgICBzc2NhbmYoY3B0ciwgIiUyNTVzJWMlMjU1cyVjICVkICUyNTVjXG4iLAorICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5uYW1lLAorCSAgICAgICAmc3BhY2VfbmFtZSwKKyAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZmlsZW5hbWVQYXR0ZXJuLAorCSAgICAgICAmc3BhY2VfcGF0aCwKKyAgICAgICAgICAgICAgICYobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5mcmVxdWVuY3kpLAorICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdFeCk7CisKKyAgICAgICAgLyogZmlsbCBpbiBmaWxlbmFtZSB3aXRoIGluaXRpYWwgZGF0YSAqLworICAgICAgICBzdHJjcHkobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5maWxlbmFtZSwKKyAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZmlsZW5hbWVQYXR0ZXJuKTsKKyAgICAgICAgbG9nbWF0Y2hfdXBkYXRlX2ZpbGVuYW1lKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZmlsZW5hbWVQYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5maWxlbmFtZSk7CisKKwkvKgorCSAqIExvZyBhbiBlcnJvciB0aGVuIHJldHVybiBpZiBhbnkgb2YgdGhlIHN0cmluZ3Mgc2Nhbm5lZCBpbiB3ZXJlCisJICogbGFyZ2VyIHRoZW4gdGhleSBzaG91bGQgaGF2ZSBiZWVuLgorCSAqLworCWlmIChzcGFjZV9uYW1lICE9ICcgJykgeworCQlzbm1wX2xvZyhMT0dfRVJSLCAibG9nbWF0Y2hfcGFyc2VfY29uZmlnOiB0aGUgbmFtZSBzY2FubmVkICIgXAorCQkgImluIGZyb20gbGluZSAlcyBpcyB0b28gbGFyZ2UuIGxvZ21hdGNoQ291bnQgPSAlZFxuIiwKKwkJIGNwdHIsIGxvZ21hdGNoQ291bnQpOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChzcGFjZV9wYXRoICE9ICcgJykgeworCQlzbm1wX2xvZyhMT0dfRVJSLCAibG9nbWF0Y2hfcGFyc2VfY29uZmlnOiB0aGUgZmlsZSBuYW1lICIgXAorCQkgInNjYW5uZWQgaW4gZnJvbSBsaW5lICVzIGlzIHRvbyBsYXJnZS4gbG9nbWF0Y2hDb3VudCA9ICVkXG4iLAorCQkgICAgY3B0ciwgbG9nbWF0Y2hDb3VudCk7CisJCXJldHVybjsKKwl9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqIGp1c3QgdG8gYmUgc2FmZSAiTlVMTCIgdGhlIGVuZCBvZgorICAgICAgICAgKiB0aGUgYXJhcnkgcmVnRXggYXMgc3NjYW5mIHdvbid0IGRvCisgICAgICAgICAqIGl0IHdpdGggdGhlICVjIG1vZGlmaWVyCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKi8KKworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ0V4WzI1NV0gPSAnXDAnOworCisKKyAgICAgICAgLyoKKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqIG5vdyBjb21waWxlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqLworCisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ubXlSZWdleEVycm9yID0KKyAgICAgICAgICAgIHJlZ2NvbXAoJmxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnRXgsCisgICAgICAgICAgICAgICAgICAgIFJFR19FWFRFTkRFRCB8IFJFR19OT1NVQik7CisKKyAgICAgICAgaWYgKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ubXlSZWdleEVycm9yKSB7CisgICAgICAgICAgICBjaGFyIHJlZ2V4RXJyb3JTdHJpbmdbMTAwXTsKKyAgICAgICAgICAgIHJlZ2Vycm9yKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ubXlSZWdleEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgJmxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICByZWdleEVycm9yU3RyaW5nLCAxMDApOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkIG5vdCBwcm9jZXNzIHRoZSBsb2dtYXRjaCByZWdleCAtICVzLCIgXAorICAgICAgICAgICAgICAgICAgICAgIlxuIHNpbmNlIHJlZ2NvbXAoKSBmYWlsZWQgd2l0aCAtICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdFeCwgcmVnZXhFcnJvclN0cmluZyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5mcmVxdWVuY3kgPiAwKSB7CisgICAgICAgICAgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZnJlcXVlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQV9SRVBFQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTTk1QQWxhcm1DYWxsYmFjayAqKSB1cGRhdGVMb2dtYXRjaF9TY2hlZHVsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdKTsKKyAgICAgICAgfQorCisgICAgICAgIGxvZ21hdGNoQ291bnQrKzsKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogbG9nbWF0Y2hfZnJlZV9jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoaXMgbWliIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2xvZ21hdGNoX2ZyZWVfY29uZmlnKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIGk7CisKKyAgICAvKgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHRoZSBvbmx5IG1lbW9yeSB3ZSBoYXZlIGFsbG9jYXRlZAorICAgICAqIGlzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHJlZ2NvbXAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPCBsb2dtYXRjaENvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGxvZ21hdGNoVGFibGVbaV0ubXlSZWdleEVycm9yID09IDApCisgICAgICAgICAgICByZWdmcmVlKCZsb2dtYXRjaFRhYmxlW2ldLnJlZ2V4QnVmZmVyKTsKKyAgICB9CisgICAgbG9nbWF0Y2hDb3VudCA9IDA7Cit9CisKKworI2RlZmluZSBMT0dNQVRDSF9JTkZPICAgICAgIDAKKyNkZWZpbmUgTE9HTUFUQ0hfSU5ERVggICAgICAxCisjZGVmaW5lIExPR01BVENIX05BTUUgICAgICAgMgorI2RlZmluZSBMT0dNQVRDSF9GSUxFTkFNRSAgIDMKKyNkZWZpbmUgTE9HTUFUQ0hfUkVHRVggICAgICA0CisjZGVmaW5lIExPR01BVENIX0dMT0JBTENUUiAgNQorI2RlZmluZSBMT0dNQVRDSF9HTE9CQUxDTlQgIDYKKyNkZWZpbmUgTE9HTUFUQ0hfQ1VSUkVOVENUUiA3CisjZGVmaW5lIExPR01BVENIX0NVUlJFTlRDTlQgOAorI2RlZmluZSBMT0dNQVRDSF9DT1VOVEVSICAgIDkKKyNkZWZpbmUgTE9HTUFUQ0hfQ09VTlQgICAgICAxMAorI2RlZmluZSBMT0dNQVRDSF9GUkVRICAgICAgIDExCisjZGVmaW5lIExPR01BVENIX0VSUk9SICAgICAgMTAwCisjZGVmaW5lIExPR01BVENIX01TRyAgICAgICAgMTAxCiAKIC8qCiAgKiBPSUQgZnVuY3Rpb25zIAogICovCiAKLXVfY2hhciAgICAgICAgICoKK3N0YXRpYyB1X2NoYXIgKgogdmFyX2xvZ21hdGNoX3RhYmxlKHN0cnVjdCB2YXJpYWJsZSAqdnAsCiAgICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCkBAIC01NDksNCArNTk2LDYyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLSNlbmRpZiAvKiBIQVZFX1JFR0VYICovCit2b2lkCitpbml0X2xvZ21hdGNoKHZvaWQpCit7CisgICAgc3RydWN0IHZhcmlhYmxlMiBsb2dtYXRjaF9pbmZvW10gPSB7CisgICAgICAgIHtMT0dNQVRDSF9JTkZPLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDB9CisgICAgfTsKKworICAgIHN0cnVjdCB2YXJpYWJsZTIgbG9nbWF0Y2hfdGFibGVbXSA9IHsKKyAgICAgICAge0xPR01BVENIX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxfX0sCisgICAgICAgIHtMT0dNQVRDSF9OQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezJ9fSwKKyAgICAgICAge0xPR01BVENIX0ZJTEVOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezN9fSwKKyAgICAgICAge0xPR01BVENIX1JFR0VYLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezR9fSwKKyAgICAgICAge0xPR01BVENIX0dMT0JBTENUUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7NX19LAorICAgICAgICB7TE9HTUFUQ0hfR0xPQkFMQ05ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHs2fX0sCisgICAgICAgIHtMT0dNQVRDSF9DVVJSRU5UQ1RSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHs3fX0sCisgICAgICAgIHtMT0dNQVRDSF9DVVJSRU5UQ05ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHs4fX0sCisgICAgICAgIHtMT0dNQVRDSF9DT1VOVEVSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHs5fX0sCisgICAgICAgIHtMT0dNQVRDSF9DT1VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MTB9fSwKKyAgICAgICAge0xPR01BVENIX0ZSRVEsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezExfX0sCisgICAgICAgIHtMT0dNQVRDSF9FUlJPUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MTAwfX0sCisgICAgICAgIHtMT0dNQVRDSF9NU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MTAxfX0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBEZWZpbmUgdGhlIE9JRCBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIG1pYiB0cmVlIHRoYXQgd2UncmUKKyAgICAgKiByZWdpc3RlcmluZyB1bmRlcm5lYXRoCisgICAgICovCisgICAgb2lkICAgICAgICAgICAgIGxvZ21hdGNoX2luZm9fb2lkW10gPSB7IE5FVFNOTVBfVUNEQVZJU19NSUIsIDE2LCAxIH07CisgICAgb2lkICAgICAgICAgICAgIGxvZ21hdGNoX3ZhcmlhYmxlc19vaWRbXSA9IHsgTkVUU05NUF9VQ0RBVklTX01JQiwgMTYsIDIsIDEgfTsKKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IHRvIGhhbmRsZSBvdXIgbWliIHRyZWUKKyAgICAgKi8KKyAgICBSRUdJU1RFUl9NSUIoInVjZC1zbm1wL2xvZ21hdGNoIiwgbG9nbWF0Y2hfaW5mbywgdmFyaWFibGUyLAorICAgICAgICAgICAgICAgICBsb2dtYXRjaF9pbmZvX29pZCk7CisgICAgUkVHSVNURVJfTUlCKCJ1Y2Qtc25tcC9sb2dtYXRjaCIsIGxvZ21hdGNoX3RhYmxlLCB2YXJpYWJsZTIsCisgICAgICAgICAgICAgICAgIGxvZ21hdGNoX3ZhcmlhYmxlc19vaWQpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImxvZ21hdGNoIiwgbG9nbWF0Y2hfcGFyc2VfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoX2ZyZWVfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2dtYXRjaCBuYW1lIHBhdGggY3ljbGV0aW1lIHJlZ2V4Iik7CisKK30KKworI2VuZGlmIC8qIEhBVkVfUkVHRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmgKaW5kZXggZWIyYzA3MC4uYjk0YWQzYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oCkBAIC01LDUzICs1LDkgQEAKICNpZm5kZWYgX01JQkdST1VQX0xPR01BVENIX0gKICNkZWZpbmUgX01JQkdST1VQX0xPR01BVENIX0gKIAotI2luY2x1ZGUgIm1pYmRlZnMuaCIKLSNpbmNsdWRlIDxyZWdleC5oPgorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKIAotc3RydWN0IGxvZ21hdGNoc3RhdCB7Ci0gICAgY2hhciAgICAgICAgICAgIGZpbGVuYW1lWzI1Nl07Ci0gICAgY2hhciAgICAgICAgICAgIHJlZ0V4WzI1Nl07Ci0gICAgY2hhciAgICAgICAgICAgIG5hbWVbMjU2XTsKLSAgICBGSUxFICAgICAgICAgICAqbG9nZmlsZTsKLSAgICBsb25nICAgICAgICAgICAgY3VycmVudEZpbGVQb3NpdGlvbjsKLSAgICB1bnNpZ25lZCBsb25nICAgZ2xvYmFsTWF0Y2hDb3VudGVyOwotICAgIHVuc2lnbmVkIGxvbmcgICBjdXJyZW50TWF0Y2hDb3VudGVyOwotICAgIHVuc2lnbmVkIGxvbmcgICBtYXRjaENvdW50ZXI7Ci0gICAgcmVnZXhfdCAgICAgICAgIHJlZ2V4QnVmZmVyOwotICAgIGludCAgICAgICAgICAgICBteVJlZ2V4RXJyb3I7Ci0gICAgaW50ICAgICAgICAgICAgIHZpcmdpbjsKLSAgICBpbnQgICAgICAgICAgICAgdGhpc0luZGV4OwotICAgIGludCAgICAgICAgICAgICBmcmVxdWVuY3k7Ci19Owotdm9pZCAgICAgICAgICAgIGluaXRfbG9nbWF0Y2godm9pZCk7Ci0KLQotLyoKLSAqIGNvbmZpZyBsb2dtYXRjaCBwYXJzaW5nIHJvdXRpbmVzIAotICovCi12b2lkICAgICAgICAgICAgbG9nbWF0Y2hfZnJlZV9jb25maWcodm9pZCk7Ci12b2lkICAgICAgICAgICAgbG9nbWF0Y2hfcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLXZvaWQgICAgICAgICAgICB1cGRhdGVMb2dtYXRjaF9TY2hlZHVsZWQodW5zaWduZWQgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbG9nbWF0Y2hzdGF0ICopOwotZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2xvZ21hdGNoX3RhYmxlOwotCi0KLQotI2RlZmluZSBMT0dNQVRDSF9FUlJPUl9NU0cgICIlczogc2l6ZSBleGNlZWRzICVka2IgKD0gJWRrYikiCi0KLSNkZWZpbmUgTE9HTUFUQ0hfSU5GTyAgICAgICAwCi0jZGVmaW5lIExPR01BVENIX0lOREVYICAgICAgMQotI2RlZmluZSBMT0dNQVRDSF9OQU1FICAgICAgIDIKLSNkZWZpbmUgTE9HTUFUQ0hfRklMRU5BTUUgICAzCi0jZGVmaW5lIExPR01BVENIX1JFR0VYICAgICAgNAotI2RlZmluZSBMT0dNQVRDSF9HTE9CQUxDVFIgIDUKLSNkZWZpbmUgTE9HTUFUQ0hfR0xPQkFMQ05UICA2Ci0jZGVmaW5lIExPR01BVENIX0NVUlJFTlRDVFIgNwotI2RlZmluZSBMT0dNQVRDSF9DVVJSRU5UQ05UIDgKLSNkZWZpbmUgTE9HTUFUQ0hfQ09VTlRFUiAgICA5Ci0jZGVmaW5lIExPR01BVENIX0NPVU5UICAgICAgMTAKLSNkZWZpbmUgTE9HTUFUQ0hfRlJFUSAgICAgICAxMQotI2RlZmluZSBMT0dNQVRDSF9FUlJPUiAgICAgIDEwMAotI2RlZmluZSBMT0dNQVRDSF9NU0cgICAgICAgIDEwMQordm9pZCBpbml0X2xvZ21hdGNoKHZvaWQpOwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9MT0dNQVRDSF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jCmluZGV4IDEwOWU5NmYuLjc0MjE4NmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jCkBAIC0xMCwzMiArMTAsMzAgQEAKICNpbmNsdWRlICJtZW1vcnkuaCIKIAogI2RlZmluZSBERUZBVUxUTUlOSU1VTVNXQVAgMTYwMDAgICAgICAgIC8qIGtpbG9ieXRlcyAqLwotaW50IG1lbW9yeV9vYmplY3RfaW5kZXg7Ci1pbnQgbWluaW11bV9zd2FwOworc3RhdGljIGludCBtaW5pbXVtX3N3YXA7CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbWVtb3J5IG1vZHVsZSAqLwogdm9pZAogaW5pdF9tZW1vcnkodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICAgICAgbWVtb3J5X29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCA0IH07Ci0gICAgc3RhdGljIG9pZCAgICAgIG1lbVN3YXBFcnJvcl9vaWRbXSAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDQsIDEwMCB9OwotICAgIHN0YXRpYyBvaWQgICAgICBtZW1Td2FwRXJyTXNnX29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCA0LCAxMDEgfTsKKyAgICBjb25zdCBvaWQgICAgICBtZW1vcnlfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDQgfTsKKyAgICBjb25zdCBvaWQgICAgICBtZW1Td2FwRXJyb3Jfb2lkW10gID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCA0LCAxMDAgfTsKKyAgICBjb25zdCBvaWQgICAgICBtZW1Td2FwRXJyTXNnX29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCA0LCAxMDEgfTsKIAogICAgIERFQlVHTVNHVEwoKCJtZW1vcnkiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CiAKLSAgICBtZW1vcnlfb2JqZWN0X2luZGV4ID0gT0lEX0xFTkdUSChtZW1vcnlfb2lkKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cCgKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm1lbW9yeSIsIGhhbmRsZV9tZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfb2lkLCBtZW1vcnlfb2JqZWN0X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5X29pZCwgT0lEX0xFTkdUSChtZW1vcnlfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDE3KTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcigKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm1lbVN3YXBFcnJvciIsIGhhbmRsZV9tZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1Td2FwRXJyb3Jfb2lkLCBtZW1vcnlfb2JqZWN0X2luZGV4KzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1Td2FwRXJyb3Jfb2lkLCBPSURfTEVOR1RIKG1lbVN3YXBFcnJvcl9vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcigKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm1lbVN3YXBFcnJNc2ciLCBoYW5kbGVfbWVtb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1Td2FwRXJyTXNnX29pZCwgbWVtb3J5X29iamVjdF9pbmRleCsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1Td2FwRXJyTXNnX29pZCwgT0lEX0xFTkdUSChtZW1Td2FwRXJyTXNnX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSkpOwogCiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInN3YXAiLCBtZW1vcnlfcGFyc2VfY29uZmlnLApAQCAtNzQsNyArNzIsNyBAQAogICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgIG5ldHNubXBfbWVtb3J5X2xvYWQoKTsKLSAgICAgICAgc3dpdGNoIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lWyBtZW1vcnlfb2JqZWN0X2luZGV4IF0pIHsKKyAgICAgICAgc3dpdGNoIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lWyByZWdpbmZvLT5yb290b2lkX2xlbiAtIDIgXSkgewogICAgICAgICBjYXNlIE1FTU9SWV9JTkRFWDoKICAgICAgICAgICAgIHZhbCA9IDA7CiAgICAgICAgICAgICBicmVhazsKQEAgLTIwNCw4ICsyMDIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKilidWYsIHN0cmxlbihidWYpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gb2JqZWN0ICglbHUpIGluIGhhbmRsZV9tZW1vcnlcbiIsCi0gICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lWyBtZW1vcnlfb2JqZWN0X2luZGV4IF0pOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIG9iamVjdCAoJSIgTkVUU05NUF9QUklvICJ1KSBpbiBoYW5kbGVfbWVtb3J5XG4iLAorICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVsgcmVnaW5mby0+cm9vdG9pZF9sZW4gLSAyIF0pOwogTk9TVUNIOgogICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfTk9TVUNIT0JKRUNUICk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jCmluZGV4IDMxOGVlZTAuLjc4NmU1ZWIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYwpAQCAtMzAsMTAgKzMwLDEzIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiIC8qIHV0aWxpdHkgZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCiAjaW5jbHVkZSAibWVtb3J5LmgiICAgICAgICAgICAgIC8qIHRoZSBtb2R1bGUtc3BlY2lmaWMgaGVhZGVyICovCiAjaW5jbHVkZSAibWVtb3J5X2FpeDQuaCIgICAgLyogdGhlIG1vZHVsZS1zcGVjaWZpYyBoZWFkZXIgKi8KIAorI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC01NSwzOCArNTgsNDAgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9tZW1fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVB9fSwKLSAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxTV0FQfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTH19LAotICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFJFQUx9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFNXQVBUWFR9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFJFQUxUWFR9fSwKLSAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxGUkVFfX0sCi0gICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU1dBUE1JTklNVU19fSwKLSAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU0hBUkVEfX0sCi0gICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUJVRkZFUn19LAotICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1DQUNIRUR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVB9fSwKKyAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxTV0FQfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTH19LAorICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFJFQUx9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQVFhUfX0sCisgICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFNXQVBUWFR9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMVFhUfX0sCisgICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFJFQUxUWFR9fSwKKyAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxGUkVFfX0sCisgICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU1dBUE1JTklNVU19fSwKKyAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU0hBUkVEfX0sCisgICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUJVRkZFUn19LAorICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1DQUNIRUR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuaAppbmRleCA5ZjU4MDQxLi5jMzk1OTZjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9NRU1PUllfQUlYNF9ICiAjZGVmaW5lIF9NSUJHUk9VUF9NRU1PUllfQUlYNF9ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIHZvaWQgICAgICAgICAgICBpbml0X21lbW9yeV9haXg0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmMKaW5kZXggNzljYzRjOS4uNzRkNTM2NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgIm1lbW9yeS5oIgogI2luY2x1ZGUgIm1lbW9yeV9kYXJ3aW43LmgiCiAKQEAgLTczLDIzICs3Myw0MCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX21lbV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVB9fSwKLSAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFNXQVB9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUx9fSwKLSAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFJFQUx9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVBUWFR9fSwKLSAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEUkVBTFRYVH19LAotICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMRlJFRX19LAotICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU1dBUE1JTklNVU19fSwKLSAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TSEFSRUR9fSwKLSAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1CVUZGRVJ9fSwKLSAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1DQUNIRUR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUH19LAorICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFNXQVB9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMfX0sCisgICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMUkVBTH19LAorICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVBUWFR9fSwKKyAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEU1dBUFRYVH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUxUWFR9fSwKKyAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEUkVBTFRYVH19LAorICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTEZSRUV9fSwKKyAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TV0FQTUlOSU1VTX19LAorICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TSEFSRUR9fSwKKyAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQlVGRkVSfX0sCisgICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUNBQ0hFRH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5oCmluZGV4IGVmYTk5YzguLmFiNWQyNjQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX01FTU9SWV9EQVJXSU43X0gKICNkZWZpbmUgX01JQkdST1VQX01FTU9SWV9EQVJXSU43X0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfbWVtb3J5X2Rhcndpbjcodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5jCmluZGV4IGIxZDZjYjMuLjI2MWM0Y2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiIC8qIHV0aWxpdHkgZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCiAjaW5jbHVkZSAibWVtb3J5LmgiICAgICAgICAgICAgIC8qIHRoZSBtb2R1bGUtc3BlY2lmaWMgaGVhZGVyICovCiAjaW5jbHVkZSAibWVtb3J5X2R5bml4LmgiICAgICAgIC8qIHRoZSBtb2R1bGUtc3BlY2lmaWMgaGVhZGVyICovCiAKQEAgLTM0LDM4ICszNCw0MCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX21lbV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUH19LAotICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFNXQVB9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMfX0sCi0gICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMUkVBTH19LAotICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVBUWFR9fSwKLSAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEU1dBUFRYVH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUxUWFR9fSwKLSAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEUkVBTFRYVH19LAotICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTEZSRUV9fSwKLSAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TV0FQTUlOSU1VTX19LAotICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TSEFSRUR9fSwKLSAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQlVGRkVSfX0sCi0gICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUNBQ0hFRH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUH19LAorICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFNXQVB9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMfX0sCisgICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMUkVBTH19LAorICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVBUWFR9fSwKKyAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEU1dBUFRYVH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUxUWFR9fSwKKyAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEUkVBTFRYVH19LAorICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTEZSRUV9fSwKKyAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TV0FQTUlOSU1VTX19LAorICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TSEFSRUR9fSwKKyAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQlVGRkVSfX0sCisgICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUNBQ0hFRH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmgKaW5kZXggMGE2OTk4ZC4uNGZiNTI5NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9NRU1PUllfRFlOSVhfSAogI2RlZmluZSBfTUlCR1JPVVBfTUVNT1JZX0RZTklYX0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmMKaW5kZXggMmJlZTUxNy4uMjJkZGU0YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmMKQEAgLTg3LDM4ICs4Nyw0MCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX21lbV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUH19LAotICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFNXQVB9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMfX0sCi0gICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMUkVBTH19LAotICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVBUWFR9fSwKLSAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEU1dBUFRYVH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUxUWFR9fSwKLSAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEUkVBTFRYVH19LAotICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTEZSRUV9fSwKLSAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TV0FQTUlOSU1VTX19LAotICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TSEFSRUR9fSwKLSAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQlVGRkVSfX0sCi0gICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUNBQ0hFRH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUH19LAorICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFNXQVB9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMfX0sCisgICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMUkVBTH19LAorICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVBUWFR9fSwKKyAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEU1dBUFRYVH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUxUWFR9fSwKKyAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEUkVBTFRYVH19LAorICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTEZSRUV9fSwKKyAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TV0FQTUlOSU1VTX19LAorICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TSEFSRUR9fSwKKyAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQlVGRkVSfX0sCisgICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUNBQ0hFRH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9ocHV4LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfaHB1eC5jCmluZGV4IDViZjk5YWQuLmMyYjI0NzggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9ocHV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2hwdXguYwpAQCAtNDksMzggKzQ5LDQwIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfbWVtX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQfX0sCi0gICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMU1dBUH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUx9fSwKLSAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxSRUFMfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUFRYVH19LAotICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTFRYVH19LAotICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMRlJFRX19LAotICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNXQVBNSU5JTVVNfX0sCi0gICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNIQVJFRH19LAotICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1CVUZGRVJ9fSwKLSAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQ0FDSEVEfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQfX0sCisgICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMU1dBUH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUx9fSwKKyAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxSRUFMfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUFRYVH19LAorICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURTV0FQVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTFRYVH19LAorICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURSRUFMVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMRlJFRX19LAorICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNXQVBNSU5JTVVNfX0sCisgICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNIQVJFRH19LAorICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1CVUZGRVJ9fSwKKyAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQ0FDSEVEfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmMKaW5kZXggNjYzMjkyMS4uM2QyNmE0NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgIm1lbW9yeS5oIgogI2luY2x1ZGUgIm1lbW9yeV9uZXRic2QxLmgiCiAKQEAgLTc1LDM4ICs3NSw0MCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX21lbV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUH19LAotICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFNXQVB9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMfX0sCi0gICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMUkVBTH19LAotICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVBUWFR9fSwKLSAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEU1dBUFRYVH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUxUWFR9fSwKLSAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEUkVBTFRYVH19LAotICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTEZSRUV9fSwKLSAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TV0FQTUlOSU1VTX19LAotICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TSEFSRUR9fSwKLSAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQlVGRkVSfX0sCi0gICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUNBQ0hFRH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUH19LAorICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFNXQVB9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMfX0sCisgICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMUkVBTH19LAorICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVBUWFR9fSwKKyAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEU1dBUFRYVH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUxUWFR9fSwKKyAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEUkVBTFRYVH19LAorICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTEZSRUV9fSwKKyAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TV0FQTUlOSU1VTX19LAorICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TSEFSRUR9fSwKKyAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQlVGRkVSfX0sCisgICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUNBQ0hFRH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5oCmluZGV4IGE5Mzc1NGEuLmExOTVmODUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX01FTU9SWV9ORVRCU0QxX0gKICNkZWZpbmUgX01JQkdST1VQX01FTU9SWV9ORVRCU0QxX0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfbWVtb3J5X25ldGJzZDEodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5jCmluZGV4IDMzZjQxYjIuLjJkMzYyNzggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiIC8qIHV0aWxpdHkgZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCiAjaW5jbHVkZSAibWVtb3J5LmgiICAgICAgICAgICAgIC8qIHRoZSBtb2R1bGUtc3BlY2lmaWMgaGVhZGVyICovCiAjaW5jbHVkZSAibWVtb3J5X3NvbGFyaXMyLmgiICAgIC8qIHRoZSBtb2R1bGUtc3BlY2lmaWMgaGVhZGVyICovCiAKQEAgLTQyLDM4ICs0Miw0MCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX21lbV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUH19LAotICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFNXQVB9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMfX0sCi0gICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMUkVBTH19LAotICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVBUWFR9fSwKLSAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEU1dBUFRYVH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUxUWFR9fSwKLSAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEUkVBTFRYVH19LAotICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTEZSRUV9fSwKLSAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TV0FQTUlOSU1VTX19LAotICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TSEFSRUR9fSwKLSAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQlVGRkVSfX0sCi0gICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUNBQ0hFRH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUH19LAorICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFNXQVB9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMfX0sCisgICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMUkVBTH19LAorICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVBUWFR9fSwKKyAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEU1dBUFRYVH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUxUWFR9fSwKKyAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEUkVBTFRYVH19LAorICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTEZSRUV9fSwKKyAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TV0FQTUlOSU1VTX19LAorICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TSEFSRUR9fSwKKyAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQlVGRkVSfX0sCisgICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUNBQ0hFRH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmgKaW5kZXggMzM2YjNkZC4uZmZmNWY3OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9NRU1PUllfU09MQVJJUzJfSAogI2RlZmluZSBfTUlCR1JPVVBfTUVNT1JZX1NPTEFSSVMyX0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogdm9pZCAgICAgICAgICAgIGluaXRfbWVtb3J5X3NvbGFyaXMyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jCmluZGV4IGE0MmE5MWIuLjhkNjAyYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTIzLDkgKzI0LDYgQEAKICNpZmRlZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmZGVmIFdJTjMyCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKQEAgLTM5LDYgKzM3LDkgQEAKICNpbmNsdWRlICJleHRlbnNpYmxlLmgiCiAjaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShnZXRfZXh0ZW5faW5zdGFuY2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShwYXJzZV9taWJvaWQpCisKIHN0cnVjdCBleHRlbnNpYmxlICpwYXNzdGhydXMgPSBOVUxMOwogaW50ICAgICAgICAgICAgIG51bXBhc3N0aHJ1cyA9IDA7CiAKQEAgLTQ5LDcgKzUwLDggQEAKICAgICAvKgogICAgICAqIGJvZ3VzIGVudHJ5LiAgT25seSBzb21lIG9mIGl0IGlzIGFjdHVhbGx5IHVzZWQuIAogICAgICAqLwotICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfcGFzcywgMCwge01JQklOREVYfX0sCisgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXh0ZW5zaWJsZV9wYXNzLCAwLCB7TUlCSU5ERVh9fSwKIH07CiAKIApAQCAtODAsNyArODIsNyBAQAogCS8qIGNoYW5nZSBwcmlvcml0eSBsZXZlbCAqLwogCWNwdHIrKzsKIAljcHRyID0gc2tpcF93aGl0ZShjcHRyKTsKLQlpZiAoISBpc2RpZ2l0KCpjcHRyKSkgeworCWlmICghIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpIHsKIAkgIGNvbmZpZ19wZXJyb3IoInByaW9yaXR5IG11c3QgYmUgYW4gaW50ZWdlciIpOwogCSAgcmV0dXJuOwogCX0KQEAgLTEwMyw3ICsxMDUsNyBAQAogICAgICAqLwogICAgIGlmICgqY3B0ciA9PSAnLicpCiAgICAgICAgIGNwdHIrKzsKLSAgICBpZiAoIWlzZGlnaXQoKmNwdHIpKSB7CisgICAgaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSB7CiAgICAgICAgIGNvbmZpZ19wZXJyb3IoInNlY29uZCB0b2tlbiBpcyBub3QgYSBPSUQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNSw5ICsxMTcsMTAgQEAKICAgICBpZiAoKnBwYXNzID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKICAgICAoKnBwYXNzKS0+dHlwZSA9IFBBU1NUSFJVOworICAgICgqcHBhc3MpLT5taWJwcmlvcml0eSA9IHByaW9yaXR5OwogCiAgICAgKCpwcGFzcyktPm1pYmxlbiA9IHBhcnNlX21pYm9pZChjcHRyLCAoKnBwYXNzKS0+bWlib2lkKTsKLSAgICB3aGlsZSAoaXNkaWdpdCgqY3B0cikgfHwgKmNwdHIgPT0gJy4nKQorICAgIHdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpIHx8ICpjcHRyID09ICcuJykKICAgICAgICAgY3B0cisrOwogICAgIC8qCiAgICAgICogcGF0aApAQCAtMTM0LDkgKzEzNywxMCBAQAogICAgIHN0cmxjcHkoKCpwcGFzcyktPm5hbWUsICgqcHBhc3MpLT5jb21tYW5kLCBzaXplb2YoKCpwcGFzcyktPm5hbWUpKTsKICAgICAoKnBwYXNzKS0+bmV4dCA9IE5VTEw7CiAKLSAgICByZWdpc3Rlcl9taWJfcHJpb3JpdHkoInBhc3MiLCAoc3RydWN0IHZhcmlhYmxlICopIGV4dGVuc2libGVfcGFzc3RocnVfdmFyaWFibGVzLAotCQkJICBzaXplb2Yoc3RydWN0IHZhcmlhYmxlMiksCi0JCQkgIDEsICgqcHBhc3MpLT5taWJvaWQsICgqcHBhc3MpLT5taWJsZW4sIHByaW9yaXR5KTsKKyAgICByZWdpc3Rlcl9taWJfcHJpb3JpdHkoInBhc3MiLAorICAgICAgICAgICAgICAgICAoc3RydWN0IHZhcmlhYmxlICopIGV4dGVuc2libGVfcGFzc3RocnVfdmFyaWFibGVzLAorICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZhcmlhYmxlMiksIDEsICgqcHBhc3MpLT5taWJvaWQsCisgICAgICAgICAgICAgICAgICgqcHBhc3MpLT5taWJsZW4sICgqcHBhc3MpLT5taWJwcmlvcml0eSk7CiAKICAgICAvKgogICAgICAqIGFyZ2dnZyAtLSBwYXNzdGhydXMgbXVzdCBiZSBzb3J0ZWQgCkBAIC0xNDgsNyArMTUyLDcgQEAKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmb3IgKGkgPSAwLCBwdG1wID0gKHN0cnVjdCBleHRlbnNpYmxlICopIHBhc3N0aHJ1czsKLSAgICAgICAgICAgICBpIDwgbnVtcGFzc3RocnVzICYmIHB0bXAgIT0gMDsgaSsrLCBwdG1wID0gcHRtcC0+bmV4dCkKKyAgICAgICAgICAgICBpIDwgbnVtcGFzc3RocnVzICYmIHB0bXAgIT0gTlVMTDsgaSsrLCBwdG1wID0gcHRtcC0+bmV4dCkKICAgICAgICAgICAgIGV0bXBbaV0gPSBwdG1wOwogICAgICAgICBxc29ydChldG1wLCBudW1wYXNzdGhydXMsIHNpemVvZihzdHJ1Y3QgZXh0ZW5zaWJsZSAqKSwKICAgICAgICAgICAgICAgcGFzc19jb21wYXJlKTsKQEAgLTE3Miw3ICsxNzYsNyBAQAogICAgIGZvciAoZXRtcCA9IHBhc3N0aHJ1czsgZXRtcCAhPSBOVUxMOykgewogICAgICAgICBldG1wMiA9IGV0bXA7CiAgICAgICAgIGV0bXAgPSBldG1wLT5uZXh0OwotICAgICAgICB1bnJlZ2lzdGVyX21pYihldG1wMi0+bWlib2lkLCBldG1wMi0+bWlibGVuKTsKKyAgICAgICAgdW5yZWdpc3Rlcl9taWJfcHJpb3JpdHkoZXRtcDItPm1pYm9pZCwgZXRtcDItPm1pYmxlbiwgZXRtcDItPm1pYnByaW9yaXR5KTsKICAgICAgICAgZnJlZShldG1wMik7CiAgICAgfQogICAgIHBhc3N0aHJ1cyA9IE5VTEw7CkBAIC0zMDAsMTIgKzMwNCw3IEBACiAgICAgICAgICAgICBleGVjX2NvbW1hbmQocGFzc3RocnUpOwogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL3Bhc3MiLCAicGFzcy1ydW5uaW5nIHJldHVybmVkOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzdGhydS0+b3V0cHV0KSk7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jYXNlY21wKHBhc3N0aHJ1LT5vdXRwdXQsICJub3Qtd3JpdGFibGUiLCAxMikpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChwYXNzdGhydS0+b3V0cHV0LCAid3JvbmctdHlwZSIsIDEwKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2ludGVybmFsX3Bhc3Nfc3RyX3RvX2Vycm5vKHBhc3N0aHJ1LT5vdXRwdXQpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmMKaW5kZXggYWNlMGYwNy4uZTNkOWEwMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX2NvbW1vbi5jCkBAIC02MSw2ICs2MSw1MSBAQAogICAgIHJldHVybiAzICogbiAtIDE7CiB9CiAKK2ludAorbmV0c25tcF9pbnRlcm5hbF9wYXNzX3N0cl90b19lcnJubyhjb25zdCBjaGFyICpidWYpCit7CisgICAgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ0b28tYmlnIiwgNykpIHsKKyAgICAgICAgLyogU2hvdWxkbid0IGhhcHBlbiAqLworICAgICAgICByZXR1cm4gU05NUF9FUlJfVE9PQklHOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIm5vLXN1Y2gtbmFtZSIsIDEyKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9TVUNITkFNRTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJiYWQtdmFsdWUiLCA5KSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfQkFEVkFMVUU7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAicmVhZC1vbmx5IiwgOSkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFQURPTkxZOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImdlbi1lcnJvciIsIDkpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAibm8tYWNjZXNzIiwgOSkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQUNDRVNTOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIndyb25nLXR5cGUiLCAxMCkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ3cm9uZy1sZW5ndGgiLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIndyb25nLWVuY29kaW5nIiwgMTQpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0VOQ09ESU5HOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIndyb25nLXZhbHVlIiwgMTEpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIm5vLWNyZWF0aW9uIiwgMTEpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImluY29uc2lzdGVudC12YWx1ZSIsIDE4KSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAicmVzb3VyY2UtdW5hdmFpbGFibGUiLCAyMCkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiY29tbWl0LWZhaWxlZCIsIDEzKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfQ09NTUlURkFJTEVEOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgInVuZG8tZmFpbGVkIiwgMTEpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9VTkRPRkFJTEVEOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImF1dGhvcml6YXRpb24tZXJyb3IiLCAxOSkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0FVVEhPUklaQVRJT05FUlJPUjsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJub3Qtd3JpdGFibGUiLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImluY29uc2lzdGVudC1uYW1lIiwgMTcpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCiB1bnNpZ25lZCBjaGFyICoKIG5ldHNubXBfaW50ZXJuYWxfcGFzc19wYXJzZShjaGFyICogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBidWYyLApAQCAtODIsNyArMTI3LDE5IEBACiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGJ1ZjIpOwogICAgICAgICB2cC0+dHlwZSA9IEFTTl9PQ1RFVF9TVFI7CiAgICAgICAgIHJldHVybiAoKHVuc2lnbmVkIGNoYXIgKikgYnVmMik7Ci0gICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiaW50ZWdlciIsIDcpKSB7CisgICAgfQorI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUworICAgIGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJpbnRlZ2VyNjQiLCA5KSkgeworICAgICAgICBzdGF0aWMgc3RydWN0IGNvdW50ZXI2NCBjNjQ7CisgICAgICAgIHVpbnQ2NF90IHY2NCA9IHN0cnRvdWxsKGJ1ZjIsIE5VTEwsIDEwKTsKKyAgICAgICAgYzY0LmhpZ2ggPSAodW5zaWduZWQgbG9uZykodjY0ID4+IDMyKTsKKyAgICAgICAgYzY0LmxvdyAgPSAodW5zaWduZWQgbG9uZykodjY0ICYgMHhmZmZmZmZmZik7CisgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKGM2NCk7CisgICAgICAgIHZwLT50eXBlID0gQVNOX0lOVEVHRVI2NDsKKyAgICAgICAgcmV0dXJuICgodW5zaWduZWQgY2hhciAqKSAmYzY0KTsKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiaW50ZWdlciIsIDcpKSB7CiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsKICAgICAgICAgbG9uZ19yZXQgPSBzdHJ0b2woYnVmMiwgTlVMTCwgMTApOwogICAgICAgICB2cC0+dHlwZSA9IEFTTl9JTlRFR0VSOwpAQCAtOTIsNyArMTQ5LDE3IEBACiAgICAgICAgIGxvbmdfcmV0ID0gc3RydG91bChidWYyLCBOVUxMLCAxMCk7CiAgICAgICAgIHZwLT50eXBlID0gQVNOX1VOU0lHTkVEOwogICAgICAgICByZXR1cm4gKCh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldCk7Ci0gICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiY291bnRlciIsIDcpKSB7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJjb3VudGVyNjQiLCA5KSkgeworICAgICAgICBzdGF0aWMgc3RydWN0IGNvdW50ZXI2NCBjNjQ7CisgICAgICAgIHVpbnQ2NF90IHY2NCA9IHN0cnRvdWxsKGJ1ZjIsIE5VTEwsIDEwKTsKKyAgICAgICAgYzY0LmhpZ2ggPSAodW5zaWduZWQgbG9uZykodjY0ID4+IDMyKTsKKyAgICAgICAgYzY0LmxvdyAgPSAodW5zaWduZWQgbG9uZykodjY0ICYgMHhmZmZmZmZmZik7CisgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKGM2NCk7CisgICAgICAgIHZwLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmV0dXJuICgodW5zaWduZWQgY2hhciAqKSAmYzY0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImNvdW50ZXIiLCA3KSkgewogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7CiAgICAgICAgIGxvbmdfcmV0ID0gc3RydG91bChidWYyLCBOVUxMLCAxMCk7CiAgICAgICAgIHZwLT50eXBlID0gQVNOX0NPVU5URVI7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19jb21tb24uaAppbmRleCAyY2U2YWZkLi5iMWQ3ZTRiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmgKQEAgLTYsNiArNiw5IEBACiAgKiBvciBkaXNhcHBlYXIgYXQgYW55IHRpbWUKICAqLwogCitpbnQKK25ldHNubXBfaW50ZXJuYWxfcGFzc19zdHJfdG9fZXJybm8oY29uc3QgY2hhciAqYnVmKTsKKwogdW5zaWduZWQgY2hhciAqCiBuZXRzbm1wX2ludGVybmFsX3Bhc3NfcGFyc2UoY2hhciAqYnVmLCBjaGFyICpidWYyLCBzaXplX3QgKnZhcl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2cCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jCmluZGV4IGMzZjM4OTkuLjg0NjdlMTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX0lPX0gKICNpbmNsdWRlIDxpby5oPgpAQCAtMjUsOSArMjYsNiBAQAogI2lmZGVmIEhBVkVfTElNSVRTX0gKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWZkZWYgV0lOMzIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNlbmRpZgpAQCAtNDQsMTIgKzQyLDE1IEBACiAjaW5jbHVkZSAiZXh0ZW5zaWJsZS5oIgogI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZ2V0X2V4dGVuX2luc3RhbmNlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocGFyc2VfbWlib2lkKQorCiBzdHJ1Y3QgZXh0ZW5zaWJsZSAqcGVyc2lzdHBhc3N0aHJ1cyA9IE5VTEw7CiBpbnQgICAgICAgICAgICAgbnVtcGVyc2lzdHBhc3N0aHJ1cyA9IDA7CiBzdHJ1Y3QgcGVyc2lzdF9waXBlX3R5cGUgewogICAgIEZJTEUgICAgICAgICAgICpmSW4sICpmT3V0OwogICAgIGludCAgICAgICAgICAgICBmZEluLCBmZE91dDsKLSAgICBpbnQgICAgICAgICAgICAgcGlkOworICAgIG5ldHNubXBfcGlkX3QgICBwaWQ7CiB9ICAgICAgICAgICAgICAqcGVyc2lzdF9waXBlcyA9IChzdHJ1Y3QgcGVyc2lzdF9waXBlX3R5cGUgKikgTlVMTDsKIHN0YXRpYyB1bnNpZ25lZCBwaXBlX2NoZWNrX2FsYXJtX2lkOwogc3RhdGljIGludCAgICAgIGluaXRfcGVyc2lzdF9waXBlcyh2b2lkKTsKQEAgLTY2LDggKzY3LDggQEAKICAgICAvKgogICAgICAqIGJvZ3VzIGVudHJ5LiAgT25seSBzb21lIG9mIGl0IGlzIGFjdHVhbGx5IHVzZWQuIAogICAgICAqLwotICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfcGFzc19wZXJzaXN0LCAwLAotICAgICB7TUlCSU5ERVh9fSwKKyAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHRlbnNpYmxlX3Bhc3NfcGVyc2lzdCwgMCwge01JQklOREVYfX0sCiB9OwogCiB2b2lkCkBAIC0xMTEsNyArMTEyLDcgQEAKIAkvKiBjaGFuZ2UgcHJpb3JpdHkgbGV2ZWwgKi8KIAljcHRyKys7CiAJY3B0ciA9IHNraXBfd2hpdGUoY3B0cik7Ci0JaWYgKCEgaXNkaWdpdCgqY3B0cikpIHsKKwlpZiAoISBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSB7CiAJICBjb25maWdfcGVycm9yKCJwcmlvcml0eSBtdXN0IGJlIGFuIGludGVnZXIiKTsKIAkgIHJldHVybjsKIAl9CkBAIC0xMzQsNyArMTM1LDcgQEAKICAgICAgKi8KICAgICBpZiAoKmNwdHIgPT0gJy4nKQogICAgICAgICBjcHRyKys7Ci0gICAgaWYgKCFpc2RpZ2l0KCpjcHRyKSkgeworICAgIGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkgewogICAgICAgICBjb25maWdfcGVycm9yKCJzZWNvbmQgdG9rZW4gaXMgbm90IGEgT0lEIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDYsOSArMTQ3LDEwIEBACiAgICAgaWYgKCpwcGFzcyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgKCpwcGFzcyktPnR5cGUgPSBQQVNTVEhSVV9QRVJTSVNUOworICAgICgqcHBhc3MpLT5taWJwcmlvcml0eSA9IHByaW9yaXR5OwogCiAgICAgKCpwcGFzcyktPm1pYmxlbiA9IHBhcnNlX21pYm9pZChjcHRyLCAoKnBwYXNzKS0+bWlib2lkKTsKLSAgICB3aGlsZSAoaXNkaWdpdCgqY3B0cikgfHwgKmNwdHIgPT0gJy4nKQorICAgIHdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpIHx8ICpjcHRyID09ICcuJykKICAgICAgICAgY3B0cisrOwogICAgIC8qCiAgICAgICogcGF0aApAQCAtMTY4LDcgKzE3MCw3IEBACiAgICAgcmVnaXN0ZXJfbWliX3ByaW9yaXR5KCJwYXNzX3BlcnNpc3QiLAogICAgICAgICAgICAgICAgICAoc3RydWN0IHZhcmlhYmxlICopIGV4dGVuc2libGVfcGVyc2lzdF9wYXNzdGhydV92YXJpYWJsZXMsCiAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUyKSwgMSwgKCpwcGFzcyktPm1pYm9pZCwKLSAgICAgICAgICAgICAgICAgKCpwcGFzcyktPm1pYmxlbiwgcHJpb3JpdHkpOworICAgICAgICAgICAgICAgICAoKnBwYXNzKS0+bWlibGVuLCAoKnBwYXNzKS0+bWlicHJpb3JpdHkpOwogCiAgICAgLyoKICAgICAgKiBhcmdnZ2cgLS0gcGFzdGhydXMgbXVzdCBiZSBzb3J0ZWQgCkBAIC0xNzksNyArMTgxLDcgQEAKICAgICAgICAgaWYgKGV0bXAgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZm9yIChpID0gMCwgcHRtcCA9IChzdHJ1Y3QgZXh0ZW5zaWJsZSAqKSBwZXJzaXN0cGFzc3RocnVzOwotICAgICAgICAgICAgIGkgPCBudW1wZXJzaXN0cGFzc3RocnVzICYmIHB0bXAgIT0gMDsgaSsrLCBwdG1wID0gcHRtcC0+bmV4dCkKKyAgICAgICAgICAgICBpIDwgbnVtcGVyc2lzdHBhc3N0aHJ1cyAmJiBwdG1wICE9IE5VTEw7IGkrKywgcHRtcCA9IHB0bXAtPm5leHQpCiAgICAgICAgICAgICBldG1wW2ldID0gcHRtcDsKICAgICAgICAgcXNvcnQoZXRtcCwgbnVtcGVyc2lzdHBhc3N0aHJ1cywgc2l6ZW9mKHN0cnVjdCBleHRlbnNpYmxlICopLAogICAgICAgICAgICAgICBwYXNzX3BlcnNpc3RfY29tcGFyZSk7CkBAIC0xOTksMTMgKzIwMSwxOSBAQAogcGFzc19wZXJzaXN0X2ZyZWVfY29uZmlnKHZvaWQpCiB7CiAgICAgc3RydWN0IGV4dGVuc2libGUgKmV0bXAsICpldG1wMjsKKyAgICBpbnQgaTsKIAogICAgIGZvciAoZXRtcCA9IHBlcnNpc3RwYXNzdGhydXM7IGV0bXAgIT0gTlVMTDspIHsKICAgICAgICAgZXRtcDIgPSBldG1wOwogICAgICAgICBldG1wID0gZXRtcC0+bmV4dDsKLSAgICAgICAgdW5yZWdpc3Rlcl9taWIoZXRtcDItPm1pYm9pZCwgZXRtcDItPm1pYmxlbik7CisgICAgICAgIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KGV0bXAyLT5taWJvaWQsIGV0bXAyLT5taWJsZW4sIGV0bXAyLT5taWJwcmlvcml0eSk7CiAgICAgICAgIGZyZWUoZXRtcDIpOwogICAgIH0KKyAgICBpZiAocGVyc2lzdF9waXBlcykgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG51bXBlcnNpc3RwYXNzdGhydXM7IGkrKykgeworICAgICAgICAgICAgY2xvc2VfcGVyc2lzdF9waXBlKGkpOworICAgICAgICB9CisgICAgfQogICAgIHBlcnNpc3RwYXNzdGhydXMgPSBOVUxMOwogICAgIG51bXBlcnNpc3RwYXNzdGhydXMgPSAwOwogfQpAQCAtMzgxLDE4ICszODksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChidWYsICJub3Qtd3JpdGFibGUiLCAxMikpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ3cm9uZy10eXBlIiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIndyb25nLWxlbmd0aCIsIDEyKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIndyb25nLXZhbHVlIiwgMTEpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJpbmNvbnNpc3RlbnQtdmFsdWUiLCAxOCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2ludGVybmFsX3Bhc3Nfc3RyX3RvX2Vycm5vKGJ1Zik7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7CkBAIC00NDAsNyArNDM3LDcgQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBudW1wZXJzaXN0cGFzc3RocnVzOyBpKyspIHsKICAgICAgICAgICAgIHBlcnNpc3RfcGlwZXNbaV0uZkluID0gcGVyc2lzdF9waXBlc1tpXS5mT3V0ID0gKEZJTEUgKikgMDsKICAgICAgICAgICAgIHBlcnNpc3RfcGlwZXNbaV0uZmRJbiA9IHBlcnNpc3RfcGlwZXNbaV0uZmRPdXQgPSAtMTsKLSAgICAgICAgICAgIHBlcnNpc3RfcGlwZXNbaV0ucGlkID0gLTE7CisgICAgICAgICAgICBwZXJzaXN0X3BpcGVzW2ldLnBpZCA9IE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBwZXJzaXN0X3BpcGVzID8gMSA6IDA7CkBAIC00NTQsNyArNDUxLDcgQEAKICAqLwogc3RhdGljIGludCBwcm9jZXNzX3N0b3BwZWQoaW50IGlkeCkKIHsKLSAgICBpZiAocGVyc2lzdF9waXBlc1tpZHhdLnBpZCAhPSAtMSkgeworICAgIGlmIChwZXJzaXN0X3BpcGVzW2lkeF0ucGlkICE9IE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTKSB7CiAjaWYgSEFWRV9TWVNfV0FJVF9ICiAgICAgICAgIHJldHVybiB3YWl0cGlkKHBlcnNpc3RfcGlwZXNbaWR4XS5waWQsIE5VTEwsIFdOT0hBTkcpID4gMDsKICNlbmRpZgpAQCAtNTIxLDE0ICs1MTgsMTUgQEAKICAgICAvKgogICAgICAqIE9wZW4gaWYgaXQncyBub3QgYWxyZWFkeSBvcGVuIAogICAgICAqLwotICAgIGlmIChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkID09IC0xKSB7Ci0gICAgICAgIGludCAgICAgICAgICAgICBmZEluLCBmZE91dCwgcGlkOworICAgIGlmIChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkID09IE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTKSB7CisgICAgICAgIGludCAgICAgICAgICAgICBmZEluLCBmZE91dDsKKyAgICAgICAgbmV0c25tcF9waWRfdCAgIHBpZDsKIAogICAgICAgICAvKgogICAgICAgICAgKiBEaWQgd2UgZmFpbD8gCiAgICAgICAgICAqLwogICAgICAgICBpZiAoKDAgPT0gZ2V0X2V4ZWNfcGlwZXMoY29tbWFuZCwgJmZkSW4sICZmZE91dCwgJnBpZCkpIHx8Ci0gICAgICAgICAgICAocGlkID09IC0xKSkgeworICAgICAgICAgICAgKHBpZCA9PSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUykpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9wYXNzX3BlcnNpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgIm9wZW5fcGVyc2lzdF9waXBlOiBwaWQgPT0gLTFcbiIpKTsKICAgICAgICAgICAgIHJlY3Vyc2UgPSAwOwpAQCAtNjA1LDcgKzYwMyw3IEBACiAgICAgLyoKICAgICAgKiBEb24ndCB3cml0ZSB0byBhIG5vbi1leGlzdGFudCBwcm9jZXNzIAogICAgICAqLwotICAgIGlmIChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkID09IC0xKSB7CisgICAgaWYgKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQgPT0gTkVUU05NUF9OT19TVUNIX1BST0NFU1MpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL3Bhc3NfcGVyc2lzdCIsCiAgICAgICAgICAgICAgICAgICAgICJ3cml0ZV9wZXJzaXN0X3BpcGU6IG5vdCB3cml0aW5nICVzLCBwcm9jZXNzIGlzIG5vbi1leGlzdGVudCIsCiAgICAgICAgICAgICAgICAgICAgIGRhdGEpKTsKQEAgLTcyMywxNiArNzIxLDIzIEBACiAJdW5saW5rKGZpZm9fb3V0X3BhdGgpOwogI2VuZGlmCiAKLSAgICBpZiAocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCAhPSAtMSkgeworICAgIGlmIChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkICE9IE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGtpbGwgdGhlIGNoaWxkLCBpbiBjYXNlIHdlIGdvdCBhbiBlcnJvciBhbmQgdGhlIGNoaWxkIGlzIG5vdAorICAgICAgICAgKiBjb29wZXJhdGluZy4gIElnbm9yZSB0aGUgcmV0dXJuIGNvZGUuCisgICAgICAgICAqLworI2lmZGVmIEhBVkVfU0lHTkFMCisgICAgICAgICh2b2lkKWtpbGwocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCwgU0lHS0lMTCk7CisjZW5kaWYKICNpZiBIQVZFX1NZU19XQUlUX0gKLSAgICAgICAgd2FpdHBpZChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkLCAwLCAwKTsKKyAgICAgICAgd2FpdHBpZChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkLCBOVUxMLCAwKTsKICNlbmRpZgogI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkIChtaW5ndzMyKSAmJiAhZGVmaW5lZCAoSEFWRV9TSUdOQUwpCi0gICAgICAgIGlmICghQ2xvc2VIYW5kbGUoKEhBTkRMRSlwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkKSkgeworICAgICAgICBpZiAoIUNsb3NlSGFuZGxlKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQpKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidWNkLXNubXAvcGFzc19wZXJzaXN0IiwiY2xvc2VfcGVyc2lzdF9waXBlIHBpZDogY2xvc2UgZXJyb3JcbiIpKTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQgPSAtMTsKKyAgICAgICAgcGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCA9IE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jCmluZGV4IDcyNTIxYTAuLmU5MGMyZTggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmZGVmIHNvbGFyaXMyCiAjZGVmaW5lIF9LTUVNVVNFUiAgICAgICAgICAgICAgIC8qIE5lZWRlZCBieSA8c3lzL3VzZXIuaD4gKi8KQEAgLTI5LDExICszMCw3IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00NSwxNSArNDIsMTUgQEAKICNpZiBIQVZFX0tWTV9ICiAjaW5jbHVkZSA8a3ZtLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAicHJvYy5oIgorI2lmZGVmIFVTSU5HX0hPU1RfREFUQV9BQ0NFU1NfU1dSVU5fTU9EVUxFCisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKyNlbmRpZgogI2lmZGVmIFVTSU5HX1VDRF9TTk1QX0VSUk9STUlCX01PRFVMRQogI2luY2x1ZGUgImVycm9ybWliLmgiCiAjZWxzZQpAQCAtNzYsMjEgKzczLDI0IEBACiAgICAgICogaW5mb3JtYXRpb24gYXQgCiAgICAgICovCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Byb2NfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtQUk9DTUlOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtQUk9DTUlOfX0sCi0gICAgICAgIHtQUk9DTUFYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtQUk9DTUFYfX0sCi0gICAgICAgIHtQUk9DQ09VTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwKLSAgICAgICAgIHtQUk9DQ09VTlR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLAotICAgICAgICAge0VSUk9STVNHfX0sCi0gICAgICAgIHtFUlJPUkZJWCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwKLSAgICAgICAgIHtFUlJPUkZJWH19LAotICAgICAgICB7RVJST1JGSVhDTUQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLAotICAgICAgICAge0VSUk9SRklYQ01EfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtQUk9DTUlOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7UFJPQ01JTn19LAorICAgICAgICB7UFJPQ01BWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge1BST0NNQVh9fSwKKyAgICAgICAge1BST0NDT1VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge1BST0NDT1VOVH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7RVJST1JNU0d9fSwKKyAgICAgICAge0VSUk9SRklYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge0VSUk9SRklYfX0sCisgICAgICAgIHtFUlJPUkZJWENNRCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7RVJST1JGSVhDTUR9fQogICAgIH07CiAKICAgICAvKgpAQCAtMjEwLDggKzIxMCwxMiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoKnByb2NwKS0+bWluID0gMDsKICAgICB9IGVsc2UgeworICAgICAgICAvKiBEZWZhdWx0IHRvIGFzc3N1bWUgdGhhdCB3ZSByZXF1aXJlIGF0IGxlYXN0IG9uZQorICAgICAgICAgKiAgc3VjaCBwcm9jZXNzIHRvIGJlIHJ1bm5pbmcsIGJ1dCBubyB1cHBlciBsaW1pdCAqLwogICAgICAgICAoKnByb2NwKS0+bWF4ID0gMDsKLSAgICAgICAgKCpwcm9jcCktPm1pbiA9IDA7CisgICAgICAgICgqcHJvY3ApLT5taW4gPSAxOworICAgICAgICAvKiBUaGlzIGZyZWVzICJwcm9jIDxwcm9jbmFtZT4gMCAwIiB0byBtb25pdG9yCisgICAgICAgICAqIHByb2Nlc3NlcyB0aGF0IHNob3VsZCBfbm90XyBiZSBydW5uaW5nLiAqLwogICAgIH0KICNpZmRlZiBORVRTTk1QX1BST0NGSVhDTUQKICAgICBzcHJpbnRmKCgqcHJvY3ApLT5maXhjbWQsIE5FVFNOTVBfUFJPQ0ZJWENNRCwgKCpwcm9jcCktPm5hbWUpOwpAQCAtMjYxLDkgKzI2NSwxMiBAQAogICAgICAgICBjYXNlIEVSUk9SRkxBRzoKICAgICAgICAgICAgIGxvbmdfcmV0ID0gc2hfY291bnRfcHJvY3MocHJvYy0+bmFtZSk7CiAgICAgICAgICAgICBpZiAobG9uZ19yZXQgPj0gMCAmJgorICAgICAgICAgICAgICAgICAgIC8qIFRvbyBmZXcgcHJvY2Vzc2VzIHJ1bm5pbmcgKi8KICAgICAgICAgICAgICAgICAoKHByb2MtPm1pbiAmJiBsb25nX3JldCA8IHByb2MtPm1pbikgfHwKKyAgICAgICAgICAgICAgICAgICAvKiBUb28gbWFueSBwcm9jZXNzZXMgcnVubmluZyAqLwogICAgICAgICAgICAgICAgICAocHJvYy0+bWF4ICYmIGxvbmdfcmV0ID4gcHJvYy0+bWF4KSB8fAotICAgICAgICAgICAgICAgICAocHJvYy0+bWluID09IDAgJiYgcHJvYy0+bWF4ID09IDAgJiYgbG9uZ19yZXQgPCAxKSkpIHsKKyAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzZXMgcnVubmluZyB0aGF0IHNob3VsZG4ndCBiZSAqLworICAgICAgICAgICAgICAgICAocHJvYy0+bWluID09IDAgJiYgcHJvYy0+bWF4ID09IDAgJiYgbG9uZ19yZXQgPiAwKSkpIHsKICAgICAgICAgICAgICAgICBsb25nX3JldCA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxvbmdfcmV0ID0gMDsKQEAgLTI3NCwxNiArMjgxLDIwIEBACiAgICAgICAgICAgICBpZiAobG9uZ19yZXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgZXJybXNnWzBdID0gMDsgIC8qIGNhdGNoIG91dCBvZiBtZW0gZXJyb3JzIHJldHVybiAwIGNvdW50ICovCiAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb2MtPm1pbiAmJiBsb25nX3JldCA8IHByb2MtPm1pbikgewotICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCisgICAgICAgICAgICAgICAgaWYgKCBsb25nX3JldCA+IDAgKQorICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAogICAgICAgICAgICAgICAgICAgICAgICAgIlRvbyBmZXcgJXMgcnVubmluZyAoIyA9ICVkKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jLT5uYW1lLCAoaW50KSBsb25nX3JldCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5vICVzIHByb2Nlc3MgcnVubmluZyIsIHByb2MtPm5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jLT5tYXggJiYgbG9uZ19yZXQgPiBwcm9jLT5tYXgpIHsKICAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAogICAgICAgICAgICAgICAgICAgICAgICAgIlRvbyBtYW55ICVzIHJ1bm5pbmcgKCMgPSAlZCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvYy0+bmFtZSwgKGludCkgbG9uZ19yZXQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jLT5taW4gPT0gMCAmJiBwcm9jLT5tYXggPT0gMCAmJiBsb25nX3JldCA8IDEpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvYy0+bWluID09IDAgJiYgcHJvYy0+bWF4ID09IDAgJiYgbG9uZ19yZXQgPiAwKSB7CiAgICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJObyAlcyBwcm9jZXNzIHJ1bm5pbmcuIiwgcHJvYy0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiJXMgcHJvY2VzcyBzaG91bGQgbm90IGJlIHJ1bm5pbmcuIiwgcHJvYy0+bmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVycm1zZ1swXSA9IDA7CiAgICAgICAgICAgICB9CkBAIC0zNDgsNiArMzU5LDE1IEBACiAgICAgcmV0dXJuIChwcm9jKTsKIH0KIAorI2lmZGVmIFVTSU5HX0hPU1RfREFUQV9BQ0NFU1NfU1dSVU5fTU9EVUxFCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzd3J1bl9jb3VudF9wcm9jZXNzZXNfYnlfbmFtZSkKK2ludAorc2hfY291bnRfcHJvY3MoY2hhciAqcHJvY25hbWUpCit7CisgICAgcmV0dXJuIHN3cnVuX2NvdW50X3Byb2Nlc3Nlc19ieV9uYW1lKCBwcm9jbmFtZSApOworfQorI2Vsc2UKKwogI2lmZGVmIGJzZGkyCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgpAQCAtMzk5LDcgKzQxOSw3IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICNpbmNsdWRlIDxwcm9jaW5mby5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCkBAIC03OTQsNiArODE0LDcgQEAKIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX1NMQVNIX1BST0NfTUVUSE9EXyAqLwogI2Vsc2UKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZpbmRfZmllbGQpCiBpbnQKIHNoX2NvdW50X3Byb2NzKGNoYXIgKnByb2NuYW1lKQogewpAQCAtODUyLDMgKzg3Myw0IEBACiAgICAgcmV0dXJuIChyZXQpOwogfQogI2VuZGlmCisjZW5kaWYgICAvKiAhVVNJTkdfSE9TVF9EQVRBX0FDQ0VTU19TV1JVTl9NT0RVTEUgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jCmluZGV4IDU2OTIxMGQuLjAxN2ZkNWMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYwpAQCAtOSwxMSArOSw5IEBACiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCkBAIC0yNiw2ICsyNCw5IEBACiAKICNpbmNsdWRlICJwcm94eS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVxdWVzdF9zZXRfZXJyb3JfaWR4KQorCiBzdGF0aWMgc3RydWN0IHNpbXBsZV9wcm94eSAqcHJveGllcyA9IE5VTEw7CiAKIG9pZCAgICAgICAgICAgICB0ZXN0b2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDg4ODgsIDEgfTsKQEAgLTEwNSw3ICsxMDYsOSBAQAogCiAgICAgREVCVUdNU0dUTCgoInByb3h5X2NvbmZpZyIsICJwYXJzaW5nIGFyZ3M6ICVkXG4iLCBhcmduKSk7CiAgICAgLyogQ2FsbCBzcGVjaWFsIHBhcnNlX2FyZ3MgdGhhdCBhbGxvd3MgZm9yIG5vIHNwZWNpZmllZCBjb21tdW5pdHkgc3RyaW5nICovCi0gICAgYXJnID0gc25tcF9wYXJzZV9hcmdzKGFyZ24sIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBwcm94eU9wdFByb2MpOworICAgIGFyZyA9IG5ldHNubXBfcGFyc2VfYXJncyhhcmduLCBhcmd2LCAmc2Vzc2lvbiwgIkM6IiwgcHJveHlPcHRQcm9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1BBUlNFX0FSR1NfTk9MT0dHSU5HIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9QQVJTRV9BUkdTX05PWkVSTyk7CiAKICAgICAvKiByZXNldCB0aGlzIGluIGNhc2Ugd2UgbW9kaWZpZWQgaXQgKi8KICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKQEAgLTM1Nyw2ICszNjAsNyBAQAogICAgICAgICBwZHUgPSBzbm1wX3BkdV9jcmVhdGUocmVxaW5mby0+bW9kZSk7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgogICAgICAgICBwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfU0VUKTsKICAgICAgICAgYnJlYWs7CkBAIC0zODQsNiArMzg4LDcgQEAKICAgICAgICAgICogIE5vdGhpbmcgdG8gZG8gaW4gdGhpcyBwYXNzCiAgICAgICAgICAqLwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgInVuc3VwcG9ydGVkIG1vZGUgZm9yIHByb3h5IGNhbGxlZCAoJWQpXG4iLApAQCAtNDA0LDcgKzQwOSwzMyBAQAogICAgICAgICBvdXJuYW1lID0gcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lOwogICAgICAgICBvdXJsZW5ndGggPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoOwogCi0gICAgICAgIGlmIChzcC0+YmFzZV9sZW4gPiAwKSB7CisgICAgICAgIGlmIChzcC0+YmFzZV9sZW4gJiYKKyAgICAgICAgICAgIHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRORVhUICYmCisgICAgICAgICAgICAoc25tcF9vaWRfY29tcGFyZShvdXJuYW1lLCBvdXJsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+YmFzZSwgc3AtPmJhc2VfbGVuKSA8IDApKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCggInByb3h5IiwgInJlcXVlc3QgaXMgb3V0IG9mIHJlZ2lzdGVyZWQgcmFuZ2VcbiIpKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDcmVhdGUgR0VUTkVYVCByZXF1ZXN0IHdpdGggYW4gT0lEIHNvIHRoZQorICAgICAgICAgICAgICogbWFzdGVyIHJldHVybnMgdGhlIGZpcnN0IE9JRCBpbiB0aGUgcmVnaXN0ZXJlZCByYW5nZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWVtY3B5KG91cm5hbWUsIHNwLT5iYXNlLCBzcC0+YmFzZV9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBvdXJsZW5ndGggPSBzcC0+YmFzZV9sZW47CisgICAgICAgICAgICBpZiAob3VybmFtZVtvdXJsZW5ndGgtMV0gPD0gMSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogVGhlIHJlZ2lzdGVyZWQgcmFuZ2UgZW5kcyB3aXRoIHgueS56LjEKKyAgICAgICAgICAgICAgICAgKiAtPiBhc2sgZm9yIHRoZSBuZXh0IG9mIHgueS56CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgb3VybGVuZ3RoLS07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogVGhlIHJlZ2lzdGVyZWQgcmFuZ2UgZW5kcyB3aXRoIHgueS56LkEKKyAgICAgICAgICAgICAgICAgKiAtPiBhc2sgZm9yIHRoZSBuZXh0IG9mIHgueS56LkEtMS5NQVhfU1VCSUQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBvdXJuYW1lW291cmxlbmd0aC0xXS0tOworICAgICAgICAgICAgICAgIG91cm5hbWVbb3VybGVuZ3RoXSA9IE1BWF9TVUJJRDsKKyAgICAgICAgICAgICAgICBvdXJsZW5ndGgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzcC0+YmFzZV9sZW4gPiAwKSB7CiAgICAgICAgICAgICBpZiAoKG91cmxlbmd0aCAtIHNwLT5uYW1lX2xlbiArIHNwLT5iYXNlX2xlbikgPiBNQVhfT0lEX0xFTikgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogdG9vIGxhcmdlIApAQCAtNDE5LDggKzQ1MCw4IEBACiAgICAgICAgICAgICAgKiBzdWZmaXggYXBwZW5kZWQ/IAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBERUJVR01TR1RMKCgicHJveHkiLCAibGVuZ3RoPSVkLCBiYXNlX2xlbj0lZCwgbmFtZV9sZW49JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXJsZW5ndGgsIHNwLT5iYXNlX2xlbiwgc3AtPm5hbWVfbGVuKSk7Ci0gICAgICAgICAgICBpZiAob3VybGVuZ3RoID4gKGludCkgc3AtPm5hbWVfbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgKGludClvdXJsZW5ndGgsIChpbnQpc3AtPmJhc2VfbGVuLCAoaW50KXNwLT5uYW1lX2xlbikpOworICAgICAgICAgICAgaWYgKG91cmxlbmd0aCA+IHNwLT5uYW1lX2xlbikKICAgICAgICAgICAgICAgICBtZW1jcHkoJihzcC0+YmFzZVtzcC0+YmFzZV9sZW5dKSwgJihvdXJuYW1lW3NwLT5uYW1lX2xlbl0pLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSAqIChvdXJsZW5ndGggLSBzcC0+bmFtZV9sZW4pKTsKICAgICAgICAgICAgIG91cmxlbmd0aCA9IG91cmxlbmd0aCAtIHNwLT5uYW1lX2xlbiArIHNwLT5iYXNlX2xlbjsKQEAgLTQ5NSw3ICs1MjYsNyBAQAogICAgICAgICAgKiBXV1dYWFg6IGRvbid0IGxlYXZlIHJlcXVlc3RzIGRlbGF5ZWQgaWYgb3BlcmF0aW9uIGlzCiAgICAgICAgICAqIHNvbWV0aGluZyBsaWtlIFRJTUVPVVQgCiAgICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgicHJveHkiLCAiZ290IHRpbWVkIG91dC4uLiByZXF1ZXN0cyA9ICUwOHBcbiIsIHJlcXVlc3RzKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwcm94eSIsICJnb3QgdGltZWQgb3V0Li4uIHJlcXVlc3RzID0gJThwXG4iLCByZXF1ZXN0cykpOwogCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZChyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVFU1RfSVNfTk9UX0RFTEVHQVRFRCk7CkBAIC01MjMsMTMgKzU1NCwxNCBAQAogICAgICAgICAgICAgICogTm90IHN1cmUgaWYgYW55IG90aGVyIGVycm9yIGNvZGVzIG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50LiBMZWZ0CiAgICAgICAgICAgICAgKiBhcyBhbiBleGVyY2lzZSB0byB0aGUgcmVhZGVyLi4uCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwcm94eSIsICJnb3QgZXJyb3IgcmVzcG9uc2UgKCVkKVxuIiwgcGR1LT5lcnJzdGF0KSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicHJveHkiLCAiZ290IGVycm9yIHJlc3BvbnNlICglbGQpXG4iLCBwZHUtPmVycnN0YXQpKTsKICAgICAgICAgICAgIGlmKChjYWNoZS0+cmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVE5FWFQpICYmCiAgICAgICAgICAgICAgICAoU05NUF9FUlJfTk9TVUNITkFNRSA9PSBwZHUtPmVycnN0YXQpKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInByb3h5IiwgIiAgaWdub3JpbmcgZXJyb3IgcmVzcG9uc2VcbiIpKTsKICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWQocmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVFU1RfSVNfTk9UX0RFTEVHQVRFRCk7CiAgICAgICAgICAgICB9CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogCSAgICBlbHNlIGlmIChjYWNoZS0+cmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9BQ1RJT04pIHsKIAkJLyoKIAkJICogSW4gb3JkZXIgZm9yIG5ldHNubXBfd3JhcF91cF9yZXF1ZXN0IHRvIGNvbnNpZGVyIHRoZQpAQCAtNTM5LDEzICs1NzEsMTQgQEAKIAkJICoJP2Z1bmM9ZGV0YWlsJmF0aWQ9MTEyNjk0JmFpZD0xNTU0MjYxJmdyb3VwX2lkPTEyNjk0CiAJCSAqLwogCQlERUJVR01TR1RMKCgicHJveHkiLAotCQkgICAgImdvdCBTRVQgZXJyb3IgJXMsIGluZGV4ICVkXG4iLAorCQkgICAgImdvdCBTRVQgZXJyb3IgJXMsIGluZGV4ICVsZFxuIiwKIAkJICAgIHNubXBfZXJyc3RyaW5nKHBkdS0+ZXJyc3RhdCksIHBkdS0+ZXJyaW5kZXgpKTsKIAkJbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKAogCQkgICAgcmVxdWVzdHMsIFJFUVVFU1RfSVNfTk9UX0RFTEVHQVRFRCk7CiAJCW5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfaWR4KHJlcXVlc3RzLCBwZHUtPmVycnN0YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+ZXJyaW5kZXgpOwogCSAgICB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAgICAgZWxzZSB7CiAJCW5ldHNubXBfaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZCggcmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVRVNUX0lTX05PVF9ERUxFR0FURUQpOwpAQCAtNTgzLDcgKzYxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmJhc2VfbGVuKSAhPSAwKSkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAicHJveHkiLCAib3V0IG9mIHJlZ2lzdGVyZWQgcmFuZ2UuLi4gIikpOwogICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgicHJveHkiLCB2YXItPm5hbWUsIHNwLT5iYXNlX2xlbikpOwotICAgICAgICAgICAgICAgIERFQlVHTVNHKCggICAicHJveHkiLCAiICglZCkgIT0gIiwgc3AtPmJhc2VfbGVuKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCAgICJwcm94eSIsICIgKCVkKSAhPSAiLCAoaW50KXNwLT5iYXNlX2xlbikpOwogICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgicHJveHkiLCBzcC0+YmFzZSwgc3AtPmJhc2VfbGVuKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0coKCAgICJwcm94eSIsICJcbiIpKTsKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fTlVMTCwgTlVMTCwgMCk7CkBAIC01OTUsNyArNjI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPm5hbWVfbGVuKSAhPSAwKSkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAicHJveHkiLCAib3V0IG9mIHJlZ2lzdGVyZWQgYmFzZSByYW5nZS4uLiAiKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dPSUQoKCJwcm94eSIsIHZhci0+bmFtZSwgc3AtPm5hbWVfbGVuKSk7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0coKCAgICJwcm94eSIsICIgKCVkKSAhPSAiLCBzcC0+bmFtZV9sZW4pKTsKKyAgICAgICAgICAgICAgICBERUJVR01TRygoICAgInByb3h5IiwgIiAoJWQpICE9ICIsIChpbnQpc3AtPm5hbWVfbGVuKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dPSUQoKCJwcm94eSIsIHNwLT5uYW1lLCBzcC0+bmFtZV9sZW4pKTsKICAgICAgICAgICAgICAgICBERUJVR01TRygoICAgInByb3h5IiwgIlxuIikpOwogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9OVUxMLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jCmluZGV4IGE5NGFmNWMuLmY3YThjNjMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYwpAQCAtMSwxMiArMSw5IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTgsOSArMTUsNiBAQAogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKQEAgLTMwLDcgKzI0LDEyIEBACiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJ2ZXJzaW9uaW5mby5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9yZXN0YXJ0LmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy5oIiAvKiBjbGVhcl9jYWNoZSAqLworCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjbGVhcl9jYWNoZSkKKwogCiB2b2lkCiBpbml0X3ZlcnNpb25pbmZvKHZvaWQpCkBAIC00MSwyOCArNDAsMjggQEAKICAgICAgKiBpbmZvcm1hdGlvbiBhdCAKICAgICAgKi8KICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdmVyc2lvbl92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge1ZFUlRBRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSVEFHfX0sCi0gICAgICAgIHtWRVJEQVRFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJEQVRFfX0sCi0gICAgICAgIHtWRVJDREFURSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSQ0RBVEV9fSwKLSAgICAgICAge1ZFUklERU5ULCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJJREVOVH19LAotICAgICAgICB7VkVSQ09ORklHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJDT05GSUd9fSwKLSAgICAgICAge1ZFUkNMRUFSQ0FDSEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSQ0xFQVJDQUNIRX19LAotICAgICAgICB7VkVSVVBEQVRFQ09ORklHLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUlVQREFURUNPTkZJR319LAotICAgICAgICB7VkVSUkVTVEFSVEFHRU5ULCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUlJFU1RBUlRBR0VOVH19LAotICAgICAgICB7VkVSU0FWRVBFUlNJU1RFTlQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSU0FWRVBFUlNJU1RFTlR9fSwKLSAgICAgICAge1ZFUkRFQlVHR0lORywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJERUJVR0dJTkd9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7VkVSVEFHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJUQUd9fSwKKyAgICAgICAge1ZFUkRBVEUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUkRBVEV9fSwKKyAgICAgICAge1ZFUkNEQVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJDREFURX19LAorICAgICAgICB7VkVSSURFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUklERU5UfX0sCisgICAgICAgIHtWRVJDT05GSUcsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUkNPTkZJR319LAorICAgICAgICB7VkVSQ0xFQVJDQUNIRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJDTEVBUkNBQ0hFfX0sCisgICAgICAgIHtWRVJVUERBVEVDT05GSUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSVVBEQVRFQ09ORklHfX0sCisgICAgICAgIHtWRVJSRVNUQVJUQUdFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSUkVTVEFSVEFHRU5UfX0sCisgICAgICAgIHtWRVJTQVZFUEVSU0lTVEVOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJTQVZFUEVSU0lTVEVOVH19LAorICAgICAgICB7VkVSREVCVUdHSU5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUkRFQlVHR0lOR319CiAgICAgfTsKIAogICAgIC8qCkBAIC0xMDksMjIgKzEwOCwyMSBAQAogICAgICAgICBsb25nX3JldCA9IG5hbWVbOF07CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CiAgICAgY2FzZSBWRVJUQUc6Ci0gICAgICAgIHNwcmludGYoZXJybXNnLCBuZXRzbm1wX2dldF92ZXJzaW9uKCkpOworICAgICAgICBzdHJsY3B5KGVycm1zZywgbmV0c25tcF9nZXRfdmVyc2lvbigpLCBzaXplb2YoZXJybXNnKSk7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVycm1zZyk7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSBlcnJtc2cpOwogICAgIGNhc2UgVkVSREFURToKLSAgICAgICAgc3ByaW50ZihlcnJtc2csICIkRGF0ZSQiKTsKKyAgICAgICAgc3RybGNweShlcnJtc2csICIkRGF0ZSQiLCBzaXplb2YoZXJybXNnKSk7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVycm1zZyk7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSBlcnJtc2cpOwogICAgIGNhc2UgVkVSQ0RBVEU6CiAgICAgICAgIGN1cnRpbWUgPSB0aW1lKE5VTEwpOwogICAgICAgICBjcHRyID0gY3RpbWUoJmN1cnRpbWUpOwotICAgICAgICBzcHJpbnRmKGVycm1zZywgY3B0cik7CisgICAgICAgIHN0cmxjcHkoZXJybXNnLCBjcHRyLCBzaXplb2YoZXJybXNnKSk7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVycm1zZykgLSAxOyAvKiAtIDEgdG8gc3RyaXAgdHJhaWxpbmcgbmV3bGluZSAqLwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgZXJybXNnKTsKICAgICBjYXNlIFZFUklERU5UOgotICAgICAgICBzcHJpbnRmKGVycm1zZywKLSAgICAgICAgICAgICAgICAiJElkJCIpOworICAgICAgICBzdHJsY3B5KGVycm1zZywgIiRJZCQiLCBzaXplb2YoZXJybXNnKSk7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVycm1zZyk7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSBlcnJtc2cpOwogICAgIGNhc2UgVkVSQ09ORklHOgpAQCAtMTM0LDcgKzEzMiw3IEBACiAgICAgICAgICAgICAqdmFyX2xlbiA9IDEwMjQ7ICAgIC8qIG1pYiBpbXBvc2VkIHJlc3RyaWN0aW9uICovCiAgICAgICAgIHJldHVybiAodV9jaGFyICopIGNvbmZpZ19vcHRzOwogI2Vsc2UKLSAgICAgICAgc3ByaW50ZihlcnJtc2csICIiKTsKKyAgICAgICAgc3RybGNweShlcnJtc2csICIiLCBzaXplb2YoZXJybXNnKSkpOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlcnJtc2cpOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgZXJybXNnKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmgKaW5kZXggZDk5MTE0Ny4uMDA3NDI0ZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oCkBAIC0yOCw1ICsyOCw4IEBACiAjZGVmaW5lIFZFUlNBVkVQRVJTSVNURU5UIDEzCiAjZGVmaW5lIFZFUkRFQlVHR0lORyAyMAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9yZXN0YXJ0KQogY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKKwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfVkVSU0lPTklORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYwppbmRleCA3OWYxMDA0Li5mNzZjZTk1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYwpAQCAtMTMsMTQgKzEzLDE0IEBACiB2b2lkCiBpbml0X3Ztc3RhdCh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgIHZtc3RhdF9vaWRbXSA9IHsgTkVUU05NUF9VQ0RBVklTX01JQiwgMTEgfTsKKyAgICBjb25zdCBvaWQgIHZtc3RhdF9vaWRbXSA9IHsgTkVUU05NUF9VQ0RBVklTX01JQiwgMTEgfTsKIAogICAgIERFQlVHTVNHVEwoKCJ2bXN0YXQiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAoCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJ2bXN0YXQiLCB2bXN0YXRfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm1zdGF0X29pZCwgT0lEX0xFTkdUSCh2bXN0YXRfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAotICAgICAgICBNSUJJTkRFWCwgUkFXU1dBUE9VVCk7CisgICAgICAgIE1JQklOREVYLCBDUFVOVU1DUFVTKTsKIH0KIAogCkBAIC0zOCw2ICszOCw3IEBACiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAgICAgY2FzZSBNT0RFX0dFVDoKICAgICAgICAgb2JqID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVsgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGgtMiBdOworCiAgICAgICAgIHN3aXRjaCAob2JqKSB7CiAgICAgICAgIGNhc2UgTUlCSU5ERVg6ICAgICAgICAgICAgIC8qIGR1bW15IHZhbHVlICovCiAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsIDEpOwpAQCAtMTEyLDYgKzExMywyMiBAQAogICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnNpcnFfdGlja3MgJiAweGZmZmZmZmZmKTsKICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFVSQVdTVEVBTDoKKyAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5zdGVhbF90aWNrcyAmIDB4ZmZmZmZmZmYpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQVVJBV0dVRVNUOgorICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmd1ZXN0X3RpY2tzICYgMHhmZmZmZmZmZik7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BVUkFXR1VFU1ROSUNFOgorICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmd1ZXN0bmljZV90aWNrcyAmIDB4ZmZmZmZmZmYpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQVU5VTUNQVVM6CisgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X251bSAmIDB4N2ZmZmZmZmYpOworICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqICAnQ29va2VkJyBDUFUgc3RhdGlzdGljcwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuaAppbmRleCBiOGQ1MjAyLi45ZmRmNGYwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuaApAQCAtMzYsNSArMzYsOSBAQAogI2RlZmluZSBDUFVSQVdTT0ZUSVJRIDYxCiAjZGVmaW5lIFJBV1NXQVBJTiA2MgogI2RlZmluZSBSQVdTV0FQT1VUIDYzCisjZGVmaW5lIENQVVJBV1NURUFMIDY0CisjZGVmaW5lIENQVVJBV0dVRVNUIDY1CisjZGVmaW5lIENQVVJBV0dVRVNUTklDRSA2NgorI2RlZmluZSBDUFVOVU1DUFVTIDY3CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1ZNU1RBVF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYwppbmRleCBkNDkwNGY5Li42MmQ3Y2U2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmMKQEAgLTM5LDYgKzM5LDkgQEAKIC8qCiAgKiBsaWJwZXJmc3RhdCBzdHJ1Y3RzIAogICovCisjaWZkZWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KQEAgLTQ2LDcgKzQ5LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSAibWliZGVmcy5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKIC8qCiAgKiBIZWFkZXIgZmlsZSBmb3IgdGhpcyBtb2R1bGUgCkBAIC0xNTMsNDUgKzE1Niw1MiBAQAogCSAqIFdoaWNoIHZhcmlhYmxlcyBkbyB3ZSBzZXJ2aWNlID8gCiAJICovCiAJc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLQkJe01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtNSUJJTkRFWH19LAotCQl7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0VSUk9STkFNRX19LAotCQl7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotCQl7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0JCXtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0JCXtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0lPUkVDRUlWRX19LAotCQl7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7U1lTSU5URVJSVVBUU319LAotCQl7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7U1lTQ09OVEVYVH19LAotCQl7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0JCXtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0NQVVNZU1RFTX19LAotCQl7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0JCXtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtDUFVSQVdVU0VSfX0sCi0JCXtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0NQVVJBV1NZU1RFTX19LAotCQl7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7Q1BVUkFXSURMRX19LAotCQl7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7Q1BVUkFXV0FJVH19LAotCQl7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtDUFVSQVdLRVJORUx9fSwKLQkJe0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7SU9SQVdTRU5UfX0sCi0JCXtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0lPUkFXUkVDRUlWRX19LAotCQl7U1lTUkFXSU5URVJSVVBUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7U1lTUkFXSU5URVJSVVBUU319LAotCQl7U1lTUkFXQ09OVEVYVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7U1lTUkFXQ09OVEVYVH19LAorCQl7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKwkJe0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorCQl7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorCQl7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisJCXtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisJCXtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisJCXtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKwkJe1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorCQl7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisJCXtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisJCXtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKwkJe0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorCQl7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorCQl7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisJCXtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1dBSVR9fSwKKwkJe0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKwkJe0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1NFTlR9fSwKKwkJe0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1JFQ0VJVkV9fSwKKwkJe1NZU1JBV0lOVEVSUlVQVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTUkFXSU5URVJSVVBUU319LAorCQl7U1lTUkFXQ09OVEVYVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNSQVdDT05URVhUfX0sCiAJCS8qCiAJCSAqIEZ1dHVyZSB1c2U6IAotCQkgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLQkJICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKwkJICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisJCSAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAJCSAqLwogCX07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5oCmluZGV4IDUwODY5YWIuLmExM2ZjY2UgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuaApAQCAtMTUsNyArMTUsNyBAQAogICAgIC8qCiAgICAgICogRGlyZWN0aXZlIHRvIGluY2x1ZGUgdXRpbGl0eSBtb2R1bGUgCiAgICAgICovCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogICAgIC8qCiAgICAgICogd2UgaGF2ZSB0byBkZWZpbmUgdGhlIGluZGV4IG91cnNlbHZlcywgYmVjYXVzZSBwZXJmc3RhdCBzdHJ1Y3R1cmVzCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5jCmluZGV4IDk0ZDMyYjMuLmUzNWI2Y2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgInZtc3RhdC5oIgogCiAvKgpAQCAtNTcsNDEgKzU3LDQ4IEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0gICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLSAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLSAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SRUNFSVZFfX0sCi0gICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNDT05URVhUfX0sCi0gICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLSAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVU1lTVEVNfX0sCi0gICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLSAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1VTRVJ9fSwKLSAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV05JQ0V9fSwKLSAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU1lTVEVNfX0sCi0gICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJRExFfX0sCi0gICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0tFUk5FTH19LAotICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSU5UUn19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKyAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisgICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisgICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisgICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXTklDRX19LAorICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKyAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKyAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisgICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJTlRSfX0sCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZ1dHVyZSB1c2U6IAogICAgICAgICAgKi8KICAgICAgICAgLyoKLSAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0gICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisgICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKyAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAgICAgICAgICAqLwogICAgIH07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmgKaW5kZXggMGI2N2ExMi4uNzRiZjMxYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9WTVNUQVRfQlNESTRfSAogI2RlZmluZSBfTUlCR1JPVVBfVk1TVEFUX0JTREk0X0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogdm9pZCAgICAgICAgICAgIGluaXRfdm1zdGF0X2JzZGk0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmMKaW5kZXggNzA0MTVlNS4uZDk2YzU1YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5jCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgInZtc3RhdC5oIgogI2luY2x1ZGUgInZtc3RhdF9kYXJ3aW43LmgiCiAKQEAgLTc0LDQ1ICs3NCw1MiBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0gICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0gICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkVDRUlWRX19LAotICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTSU5URVJSVVBUU319LAotICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTQ09OVEVYVH19LAotICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0gICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVNZU1RFTX19LAotICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0gICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdVU0VSfX0sCi0gICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdOSUNFfX0sCi0gICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NZU1RFTX19LAotICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSURMRX19LAotICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdLRVJORUx9fSwKLSAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lOVFJ9fSwKLSAgICAgICAge1NZU1JBV0lOVEVSUlVQVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU1JBV0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU1JBV0NPTlRFWFQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU1JBV0NPTlRFWFR9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKyAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKyAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisgICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKyAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKyAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKyAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV05JQ0V9fSwKKyAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisgICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisgICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSU5UUn19LAorICAgICAgICB7U1lTUkFXSU5URVJSVVBUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTUkFXSU5URVJSVVBUU319LAorICAgICAgICB7U1lTUkFXQ09OVEVYVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTUkFXQ09OVEVYVH19LAogICAgICAgICAvKgogICAgICAgICAgKiBGdXR1cmUgdXNlOiAKICAgICAgICAgICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisgICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogICAgICAgICAgKi8KICAgICB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuaAppbmRleCBmOTJlNTA5Li5iMWEzMDFkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9WTVNUQVRfREFSV0lON19ICiAjZGVmaW5lIF9NSUJHUk9VUF9WTVNUQVRfREFSV0lON19ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIHZvaWQgICAgICAgICAgICBpbml0X3Ztc3RhdF9kYXJ3aW43KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguYwppbmRleCA5MTcwYjI2Li4zM2Y1NDEyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlICJtaWJkZWZzLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAogLyoKICAqIEhlYWRlciBmaWxlIGZvciB0aGlzIG1vZHVsZSAKQEAgLTE2NSw0MyArMTY1LDUwIEBACiAgICAgICogV2hpY2ggdmFyaWFibGVzIGRvIHdlIHNlcnZpY2UgPyAKICAgICAgKi8KICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0gICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLSAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLSAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SRUNFSVZFfX0sCi0gICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNDT05URVhUfX0sCi0gICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLSAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVU1lTVEVNfX0sCi0gICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLSAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1VTRVJ9fSwKLSAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU1lTVEVNfX0sCi0gICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJRExFfX0sCi0gICAgICAgIHtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdXQUlUfX0sCi0gICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0tFUk5FTH19LAotICAgICAgICB7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JBV1NFTlR9fSwKLSAgICAgICAge0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SQVdSRUNFSVZFfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisgICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisgICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKyAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKyAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisgICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisgICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisgICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorICAgICAgICB7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXV0FJVH19LAorICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKyAgICAgICAge0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdTRU5UfX0sCisgICAgICAgIHtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXUkVDRUlWRX19LAogICAgICAgICAvKgogICAgICAgICAgKiBGdXR1cmUgdXNlOiAKICAgICAgICAgICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisgICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogICAgICAgICAgKi8KICAgICB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oCmluZGV4IGFhZTE3OTAuLjg5NTRlMzUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oCkBAIC0xNCw3ICsxNCw3IEBACiAvKgogICogRGlyZWN0aXZlIHRvIGluY2x1ZGUgdXRpbGl0eSBtb2R1bGUgCiAgKi8KLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAgICAgLyoKICAgICAgKiBNSUIgd2FudHMgVl9DUFVfU1lTVEVNIHdoaWNoIGlzIHN5c2luZm8gVl9DUFVfS0VSTkVMICsgVl9DUFVfV0FJVCAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmMKaW5kZXggOTE4NWJjNi4uM2RlODliMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmMKQEAgLTU3LDcgKzU3LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAidm1zdGF0LmgiCiAjaW5jbHVkZSAidm1zdGF0X2ZyZWVic2QyLmgiCiAKQEAgLTg4LDQ1ICs4OCw1MiBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0gICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0gICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkVDRUlWRX19LAotICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTSU5URVJSVVBUU319LAotICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTQ09OVEVYVH19LAotICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0gICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVNZU1RFTX19LAotICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0gICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdVU0VSfX0sCi0gICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdOSUNFfX0sCi0gICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NZU1RFTX19LAotICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSURMRX19LAotICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdLRVJORUx9fSwKLSAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lOVFJ9fSwKLSAgICAgICAge1NZU1JBV0lOVEVSUlVQVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU1JBV0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU1JBV0NPTlRFWFQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU1JBV0NPTlRFWFR9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKyAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKyAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisgICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKyAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKyAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKyAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV05JQ0V9fSwKKyAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisgICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisgICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSU5UUn19LAorICAgICAgICB7U1lTUkFXSU5URVJSVVBUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTUkFXSU5URVJSVVBUU319LAorICAgICAgICB7U1lTUkFXQ09OVEVYVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTUkFXQ09OVEVYVH19LAogICAgICAgICAvKgogICAgICAgICAgKiBGdXR1cmUgdXNlOiAKICAgICAgICAgICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisgICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogICAgICAgICAgKi8KICAgICB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5oCmluZGV4IGYwZTYwYjguLjI2YjQ0YjYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfVk1TVEFUX0ZSRUVCU0QyX0gKICNkZWZpbmUgX01JQkdST1VQX1ZNU1RBVF9GUkVFQlNEMl9ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIHZvaWQgICAgICAgICAgICBpbml0X3Ztc3RhdF9mcmVlYnNkMih2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5jCmluZGV4IDg5MmZiN2UuLmE3ODQ1MDIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguYwpAQCAtNDUsNyArNDUsNyBAQAogLyoKICAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBVQ0QtU05NUCAKICAqLwotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKIC8qCiAgKiBIZWFkZXIgZmlsZSBmb3IgdGhpcyBtb2R1bGUgCkBAIC0xNzEsNDUgKzE3MSw1MiBAQAogICAgICAqIFdoaWNoIHZhcmlhYmxlcyBkbyB3ZSBzZXJ2aWNlID8gCiAgICAgICovCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0gICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0gICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkVDRUlWRX19LAotICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTSU5URVJSVVBUU319LAotICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTQ09OVEVYVH19LAotICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0gICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVNZU1RFTX19LAotICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0gICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdVU0VSfX0sCi0gICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdOSUNFfX0sCi0gICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NZU1RFTX19LAotICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSURMRX19LAotICAgICAgICB7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXV0FJVH19LAotICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdLRVJORUx9fSwKLSAgICAgICAge0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SQVdTRU5UfX0sCi0gICAgICAgIHtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkFXUkVDRUlWRX19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKyAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisgICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisgICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisgICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXTklDRX19LAorICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKyAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKyAgICAgICAge0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1dBSVR9fSwKKyAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisgICAgICAgIHtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXU0VOVH19LAorICAgICAgICB7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1JFQ0VJVkV9fSwKICAgICAgICAgLyoKICAgICAgICAgICogRnV0dXJlIHVzZTogCiAgICAgICAgICAqLwogICAgICAgICAvKgotICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLSAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKyAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KICAgICAgICAgICovCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmgKaW5kZXggZTEwMDk1ZS4uOGYyNjU5NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5oCkBAIC0xNCw3ICsxNCw3IEBACiAvKgogICogRGlyZWN0aXZlIHRvIGluY2x1ZGUgdXRpbGl0eSBtb2R1bGUgCiAgKi8KLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAgICAgLyoKICAgICAgKiBNYWtlIDY0LWJpdCBwc3RhdCBjYWxscyAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMKaW5kZXggZjA5ZWQzNC4uZDZlZmY1MCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfTElNSVRTX0gKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTEwOCw5ICsxMDksMTIgQEAKIAogI2luY2x1ZGUgIm1pYmRlZnMuaCIKICNpbmNsdWRlICJzdHJ1Y3QuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgInZtc3RhdC5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYXJkd2FyZV9jcHVfbG9hZCkKKworCiBGaW5kVmFyTWV0aG9kIHZhcl9leHRlbnNpYmxlX3Ztc3RhdDsKIAogc3RhdGljIGludCBoYXNfdm1zdGF0ID0gMTsKQEAgLTEyOCw1NCArMTMyLDY0IEBACiBpbml0X3Ztc3RhdCh2b2lkKQogewogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLSAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotICAgICAgICB7UkFXU1dBUElOLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1JBV1NXQVBJTn19LAotICAgICAgICB7UkFXU1dBUE9VVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtSQVdTV0FQT1VUfX0sCi0gICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0gICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkVDRUlWRX19LAotICAgICAgICB7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXU0VOVH19LAotICAgICAgICB7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JBV1JFQ0VJVkV9fSwKLSAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVTWVNURU19fSwKLSAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXVVNFUn19LAotICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXTklDRX19LAotICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTWVNURU19fSwKLSAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXS0VSTkVMfX0sCi0gICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJRExFfX0sCi0gICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNSQVdDT05URVhULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNSQVdDT05URVhUfX0sCi0gICAgICAgIHtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdXQUlUfX0sCi0gICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJTlRSfX0sCi0gICAgICAgIHtDUFVSQVdTT0ZUSVJRLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTT0ZUSVJRfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisgICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisgICAgICAgIHtSQVdTV0FQSU4sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1JBV1NXQVBJTn19LAorICAgICAgICB7UkFXU1dBUE9VVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7UkFXU1dBUE9VVH19LAorICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKyAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisgICAgICAgIHtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXU0VOVH19LAorICAgICAgICB7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1JFQ0VJVkV9fSwKKyAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKyAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisgICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisgICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisgICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdOSUNFfX0sCisgICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKyAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKyAgICAgICAge1NZU1JBV0lOVEVSUlVQVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU1JBV0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU1JBV0NPTlRFWFQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU1JBV0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1dBSVR9fSwKKyAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lOVFJ9fSwKKyAgICAgICAge0NQVVJBV1NPRlRJUlEsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NPRlRJUlF9fSwKICAgICAgICAgLyoKICAgICAgICAgICogRnV0dXJlIHVzZTogCiAgICAgICAgICAqLwogICAgICAgICAvKgotICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLSAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKyAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KICAgICAgICAgICovCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguaAppbmRleCA3MzhlMmYxLi42ZjdjNTBmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguaApAQCAtNSw2ICs1LDcgQEAKICNpZm5kZWYgX01JQkdST1VQX1ZNU1RBVF9ICiAjZGVmaW5lIF9NSUJHUk9VUF9WTVNUQVRfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvY3B1KQogCiAjaW5jbHVkZSAibWliZGVmcy5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmMKaW5kZXggMTJjNzNkYi4uOTcwNmM0MiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5jCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgInZtc3RhdC5oIgogCiAvKgpAQCAtNjYsNDIgKzY2LDQ5IEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0gICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLSAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLSAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SRUNFSVZFfX0sCi0gICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNDT05URVhUfX0sCi0gICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLSAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVU1lTVEVNfX0sCi0gICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLSAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1VTRVJ9fSwKLSAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV05JQ0V9fSwKLSAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU1lTVEVNfX0sCi0gICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJRExFfX0sCi0gICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0tFUk5FTH19LAotICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSU5UUn19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKyAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisgICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisgICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisgICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXTklDRX19LAorICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKyAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKyAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisgICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJTlRSfX0sCiAKICAgICAgICAgLyoKICAgICAgICAgICogRnV0dXJlIHVzZTogCiAgICAgICAgICAqLwogICAgICAgICAvKgotICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLSAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKyAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KICAgICAgICAgICovCiAgICAgfTsKIApAQCAtMTkyLDcgKzE5OSw3IEBACiAgICAgICAgICAgICBtZW1zZXQoY3B1X25ldywgMCwgc2l6ZW9mKGNwdV9uZXcpKTsKICNlbGlmIGRlZmluZWQoS0VSTl9DUFRJTUUpCiAgICAgICAgIGludCAgICAgICAgICAgICBtaWJbMl0gPSB7IENUTF9LRVJOLCBLRVJOX0NQVElNRSB9OwotICAgICAgICBpbnQgICAgICAgICAgICAgc3NpemUgPSBzaXplb2YoY3B1X25ldyk7CisgICAgICAgIHNpemVfdCAgICAgICAgICBzc2l6ZSA9IHNpemVvZihjcHVfbmV3KTsKIAogICAgICAgICBpZiAoc3lzY3RsKG1pYiwgMiwgY3B1X25ldywgJnNzaXplLCBOVUxMLCAwKSA8IDApCiAgICAgICAgICAgICBtZW1zZXQoY3B1X25ldywgMCwgc2l6ZW9mKGNwdV9uZXcpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5oCmluZGV4IGViNmIxNzIuLmFkZjVkNDYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX1ZNU1RBVF9ORVRCU0QxX0gKICNkZWZpbmUgX01JQkdST1VQX1ZNU1RBVF9ORVRCU0QxX0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKKwogI2luY2x1ZGUgIm1pYmRlZnMuaCIKIAogdm9pZCAgICAgICAgICAgIGluaXRfdm1zdGF0X25ldGJzZDEodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jCmluZGV4IGNhOGE4N2YuLjM3MTUwNDUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgIm1pYmRlZnMuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiAvKgogICogSGVhZGVyIGZpbGUgZm9yIHRoaXMgbW9kdWxlIApAQCAtMTY5LDQxICsxNjksNDggQEAKICAgICAgKiBXaGljaCB2YXJpYWJsZXMgZG8gd2Ugc2VydmljZSA/IAogICAgICAqLwogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLSAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JFQ0VJVkV9fSwKLSAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVTWVNURU19fSwKLSAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXVVNFUn19LAotICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTWVNURU19fSwKLSAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lETEV9fSwKLSAgICAgICAge0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1dBSVR9fSwKLSAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXS0VSTkVMfX0sCi0gICAgICAgIHtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkFXU0VOVH19LAotICAgICAgICB7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JBV1JFQ0VJVkV9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKyAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKyAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisgICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKyAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKyAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKyAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisgICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisgICAgICAgIHtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdXQUlUfX0sCisgICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorICAgICAgICB7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1NFTlR9fSwKKyAgICAgICAge0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdSRUNFSVZFfX0sCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZ1dHVyZSB1c2U6IAotICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLSAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKyAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KICAgICAgICAgICovCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuaAppbmRleCA4MjgyMjg4Li43N2ZiYjNiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuaApAQCAtMjMsNyArMjMsNyBAQAogICAgIC8qCiAgICAgICogRGlyZWN0aXZlIHRvIGluY2x1ZGUgdXRpbGl0eSBtb2R1bGUgCiAgICAgICovCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogICAgIC8qCiAgICAgICogTUlCIHdhbnRzIENQVV9TWVNURU0gd2hpY2ggaXMgc3lzaW5mbyBDUFVfS0VSTkVMICsgQ1BVX1dBSVQgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Rfc25tcC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkX3NubXAuaAppbmRleCAzNGMyZmJiLi4wZDg3ZWMxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Rfc25tcC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZF9zbm1wLmgKQEAgLTMsMTIgKzMsMTQgQEAKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL3ZlcnNpb25pbmZvKQogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvcGFzcykKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL3Bhc3NfcGVyc2lzdCkKLWNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL2Rpc2spCitjb25maWdfdmVyc2lvbl9yZXF1aXJlKCh1Y2Qtc25tcC9kaXNrLCA1LjcsIHVjZC1zbm1wL2Rpc2tfaHcpKQogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvbG9hZGF2ZSkKIGNvbmZpZ19yZXF1aXJlKGFnZW50L2V4dGVuZCkKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL2Vycm9ybWliKQogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvZmlsZSkKKyNpZiBkZWZpbmVkKEhBVkVfRExGQ05fSCkgJiYgZGVmaW5lZChIQVZFX0RMT1BFTikKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL2RsbW9kKQorI2VuZGlmCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9wcm94eSkKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL2xvZ21hdGNoKQogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvbWVtb3J5KQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaCBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgKaW5kZXggZmQwNzM5NC4uZDlkZWMxZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaAorKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oCkBAIC0yMCw4ICsyMCwxNSBAQAogY29uZmlnX3JlcXVpcmUodWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uKQogI2lmIGRlZmluZWQoIGxpbnV4ICkKIGNvbmZpZ19yZXF1aXJlKHVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4KQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUpCiAjZWxpZiBkZWZpbmVkKCBzb2xhcmlzMiApCiBjb25maWdfcmVxdWlyZSh1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMikKKyNlbGlmIGRlZmluZWQoZnJlZWJzZDQpIHx8IGRlZmluZWQoZHJhZ29uZmx5KSB8fCBkZWZpbmVkKGRhcndpbikKK2NvbmZpZ19yZXF1aXJlKHVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0KQorI2VsaWYgZGVmaW5lZChvcGVuYnNkNCkKK2NvbmZpZ19yZXF1aXJlKHVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QpCisjZWxpZiBkZWZpbmVkKG5ldGJzZDEpCitjb25maWdfcmVxdWlyZSh1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QpCiAjZWxzZQogY29uZmlnX3JlcXVpcmUodWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfdW5zdXApCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMKaW5kZXggNTFlMzM3NS4uNjNmODU0OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMKQEAgLTQsNiArNCw3IEBACiAgKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAidWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfY29uc3RhbnRzLmgiCiAKQEAgLTEzLDYgKzE0LDEwIEBACiAKICNpbmNsdWRlICJ1ZHBfZW5kcG9pbnRfcHJpdmF0ZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwX2VuZHBvaW50X2NvbW1vbiwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBfZW5kcG9pbnRfZW50cnlfY3JlYXRlLCB1ZHBfZW5kcG9pbnRfY29tbW9uKQorCiAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIGxvY2FsIHN0YXRpYyB2YXJzCkBAIC0yNCwxMSArMjksNiBAQAogICogaW5pdGlhbGl6YXRpb24KICAqLwogCi12b2lkCi1uZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfaW5pdCh2b2lkKQotewotfQotCiAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIGNvbnRhaW5lciBmdW5jdGlvbnMKQEAgLTEwNSw3ICsxMDUsOCBAQAogICAgICAgICAgKiBmcmVlIGFsbCBpdGVtcy4KICAgICAgICAgICovCiAgICAgICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKWZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2VudHJ5X2ZyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICB9CiAKQEAgLTExOSw2ICsxMjAsNyBAQAogICovCiAvKioKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUF9FTkRQT0lOVF9FTlRSWV9DUkVBVEUKIG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICoKIG5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9lbnRyeV9jcmVhdGUodm9pZCkKIHsKQEAgLTEzNSw2ICsxMzcsNyBAQAogCiAgICAgcmV0dXJuIGVudHJ5OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQX0VORFBPSU5UX0VOVFJZX0NSRUFURSAqLwogCiAvKioKICAqLwpAQCAtMTUzLDIzICsxNTYsMyBAQAogCiAgICAgZnJlZShlbnRyeSk7CiB9Ci0KLQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBVdGlsaXR5IHJvdXRpbmVzCi0gKi8KLQotLyoqCi0gKiBcaW50ZXJuYWwKLSAqLwotc3RhdGljIHZvaWQKLV9lbnRyeV9yZWxlYXNlKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICogZW50cnksIHZvaWQgKmNvbnRleHQpCi17Ci0gICAgbmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2VudHJ5X2ZyZWUoZW50cnkpOwotfQotCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqCi0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjhiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogIFVEUCBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZm9yIEZyZWVCU0QvRHJhZ29uRmx5QnNkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaD4KKworI2luY2x1ZGUgInVkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCitzdGF0aWMgaW50IF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKTsKKworLyoKKyAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKgorICogQHJldHZhbCAgMDogc3VjY2VzcworICogQHJldHZhbCA8MDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2luaXQobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9jbGVhbnVwKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGNsZWFudXAKKyAgICAgKi8KK30KKworLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9jb3B5KG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKnJocykKK3sKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGRlbGV0ZSBhbiBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfZGVsZXRlKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8qKiB4eHgtcmtzOjkgdGNwQ29ubiBkZWxldGUgbm90IGltcGxlbWVudGVkICovCisgICAgcmV0dXJuIC0xOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MgKQoreworICAgIGludCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnVkcF9lbmRwb2ludDpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJ1ZHBfZW5kcG9pbnRfY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc191ZHBfZW5kcG9pbnRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworCisgICAgcmV0dXJuIHJjOworfQorCisjZGVmaW5lIE5TX0VMRU0gc3RydWN0IHhpbnBjYgorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworc3RhdGljIGludAorX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBzaXplX3QgICBsZW47CisgICAgaW50ICAgICAgc25hbWVbXSA9IHsgQ1RMX05FVCwgUEZfSU5FVCwgSVBQUk9UT19VRFAsIFVEUENUTF9QQ0JMSVNUIH07CisgICAgY2hhciAgICAgKnVkcGNiX2J1ZiA9IE5VTEw7CisjaWYgZGVmaW5lZChkcmFnb25mbHkpCisgICAgc3RydWN0IHhpbnBjYiAgKnhpZyA9IE5VTEw7CisjZWxzZQorICAgIHN0cnVjdCB4aW5wZ2VuICp4aWcgPSBOVUxMOworI2VuZGlmCisgICAgbmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgICplbnRyeTsKKyAgICBpbnQgICAgICByYyA9IDA7CisKKyAgICAvKgorICAgICAqICBSZWFkIGluIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgVENQIHRhYmxlIGRhdGEKKyAgICAgKi8KKyAgICBsZW4gPSAwOworICAgIGlmIChzeXNjdGwoc25hbWUsIDQsIDAsICZsZW4sIDAsIDApIDwgMCB8fAorICAgICAgICh1ZHBjYl9idWYgPSBtYWxsb2MobGVuKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzeXNjdGwoc25hbWUsIDQsIHVkcGNiX2J1ZiwgJmxlbiwgMCwgMCkgPCAwKSB7CisgICAgICAgIGZyZWUodWRwY2JfYnVmKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogIFVucGljayB0aGlzIGludG8gdGhlIGNvbnN0aXR1ZW50ICd4aW5wZ2VuJyBzdHJ1Y3R1cmVzLCBhbmQgZXh0cmFjdAorICAgICAqICAgICB0aGUgJ2lucGNiJyBlbGVtZW50cyBpbnRvIGEgbGlua2VkIGxpc3QgKGJ1aWx0IGluIHJldmVyc2UpCisgICAgICovCisjaWYgZGVmaW5lZChkcmFnb25mbHkpCisgICAgeGlnID0gKHN0cnVjdCB4aW5wY2IgICopIHVkcGNiX2J1ZjsKKyNlbHNlCisgICAgeGlnID0gKHN0cnVjdCB4aW5wZ2VuICopIHVkcGNiX2J1ZjsKKyAgICB4aWcgPSAoc3RydWN0IHhpbnBnZW4gKikgKChjaGFyICopIHhpZyArIHhpZy0+eGlnX2xlbik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoZHJhZ29uZmx5KQorICAgIHdoaWxlICh4aWcgJiYgKHhpZy0+eGlfbGVuID49IHNpemVvZihzdHJ1Y3QgeGlucGNiKSkpCisjZWxzZQorICAgIHdoaWxlICh4aWcgJiYgKHhpZy0+eGlnX2xlbiA+IHNpemVvZihzdHJ1Y3QgeGlucGdlbikpKQorI2VuZGlmCisgICAgeworCU5TX0VMRU0gcGNiID0gKigoTlNfRUxFTSAqKSB4aWcpOworI2lmIGRlZmluZWQoZHJhZ29uZmx5KQorCXhpZyA9IChzdHJ1Y3QgeGlucGNiICAqKSAoKGNoYXIgKikgeGlnICsgeGlnLT54aV9sZW4pOworI2Vsc2UKKwl4aWcgPSAoc3RydWN0IHhpbnBnZW4gKikgKChjaGFyICopIHhpZyArIHhpZy0+eGlnX2xlbik7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgICAgIGlmIChwY2IueGlfaW5wLmlucF92ZmxhZyAmIElOUF9JUFY2KQorCSAgICBjb250aW51ZTsKKyNlbmRpZgorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiogb2RkbHkgZW5vdWdoLCB0aGVzZSBhcHBlYXIgdG8gYWxyZWFkeSBiZSBpbiBuZXR3b3JrIG9yZGVyICovCisgICAgICAgIGVudHJ5LT5sb2NfcG9ydCA9IGh0b25zKHBjYi54aV9pbnAuaW5wX2xwb3J0KTsKKyAgICAgICAgZW50cnktPnJtdF9wb3J0ID0gaHRvbnMocGNiLnhpX2lucC5pbnBfZnBvcnQpOworICAgICAgICBlbnRyeS0+cGlkID0gMDsKKyAgICAgICAgCisgICAgICAgIC8qKiB0aGUgYWRkciBzdHJpbmcgbWF5IG5lZWQgd29yayAqLworCWlmIChwY2IueGlfaW5wLmlucF92ZmxhZyAmIElOUF9JUFY2KSB7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gMTY7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZwY2IueGlfaW5wLmluNnBfbGFkZHIsIDE2KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJnBjYi54aV9pbnAuaW42cF9mYWRkciwgMTYpOworCX0KKwllbHNlIHsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSA0OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmcGNiLnhpX2lucC5pbnBfbGFkZHIsIDQpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmcGNiLnhpX2lucC5pbnBfZmFkZHIsIDQpOworCX0KKworICAgICAgICAvKgorICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCisgICAgICAgICAqLworCWVudHJ5LT5pbmRleCA9IENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikgKyAxOworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgIH0KKworICAgIGlmKHJjPDApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMKaW5kZXggYmE4ZjdhMi4uNmVkYmRjMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jCkBAIC00LDYgKzQsNyBAQAogICogJElkJAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTE0LDExICsxNSwxNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oPgogCiAjaW5jbHVkZSAidWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfY29uc3RhbnRzLmgiCi0KKyNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oIgogI2luY2x1ZGUgInVkcF9lbmRwb2ludF9wcml2YXRlLmgiCiAKICNpbmNsdWRlIDxmY250bC5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0ZXh0X3V0aWxzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcF9lbmRwb2ludF9hbGwsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcF9lbmRwb2ludF93cml0YWJsZSwgdWRwX2VuZHBvaW50X2FsbCkKKwogc3RhdGljIGludCBfbG9hZDQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpOwogI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCiBzdGF0aWMgaW50IF9sb2FkNihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyk7CkBAIC0zMCw2ICszNSw3IEBACiAgKiBAcmV0dmFsICAwOiBzdWNjZXNzCiAgKiBAcmV0dmFsIDwwOiBlcnJvcgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQX0VORFBPSU5UX1dSSVRBQkxFCiBpbnQKIG5ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfaW5pdChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCiB7CkBAIC03MSw2ICs3Nyw3IEBACiAgICAgLyoqIHh4eC1ya3M6OSB1ZHBfZW5kcG9pbnQgZGVsZXRlIG5vdCBpbXBsZW1lbnRlZCAqLwogICAgIHJldHVybiAtMTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUF9FTkRQT0lOVF9XUklUQUJMRSAqLwogCiAKIC8qKgpAQCAtODQsNiArOTEsOSBAQAogewogICAgIGludCByYyA9IDA7CiAKKyAgICAvKiBTZXR1cCB0aGUgcGlkX2Zyb21faW5vZGUgdGFibGUsIGFuZCBmaWxsIGl0LiovCisgICAgbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGVfaW5pdCgpOworCiAgICAgcmMgPSBfbG9hZDQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKICAgICBpZihyYyA8IDApIHsKICAgICAgICAgdV9pbnQgZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19VRFBfRU5EUE9JTlRfRlJFRV9LRUVQX0NPTlRBSU5FUjsKQEAgLTE1MCwxNCArMTYwLDE0IEBACiAgICAgbGVuID0gKHNlcCAtIHB0cik7CiAgICAgaWYgKC0xID09IG5ldHNubXBfYWRkcnN0cl9odG9uKHB0ciwgbGVuKSkgewogICAgICAgICBERUJVR01TR1RMKCgidGV4dDp1dGlsOnR2aSIsICJiYWQgbGVuZ3RoICVkIGZvciBsb2MgYWRkciAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICB1X3B0cl9sZW4sIGxpbmVfaW5mby0+c3RhcnQpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludCl1X3B0cl9sZW4sIGxpbmVfaW5mby0+c3RhcnQpKTsKICAgICAgICAgcmV0dXJuIFBNTFBfUkNfTUVNT1JZX1VOVVNFRDsKICAgICB9CiAgICAgb2Zmc2V0ID0gMDsKICAgICBuZXRzbm1wX2hleF90b19iaW5hcnkoJnVfcHRyLCAmdV9wdHJfbGVuLCAmb2Zmc2V0LCAwLCBwdHIsIE5VTEwpOwogICAgIGlmICgoNCAhPSBvZmZzZXQpICYmICgxNiAhPSBvZmZzZXQpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ0ZXh0OnV0aWw6dHZpIiwgImJhZCBvZmZzZXQgJWQgZm9yIGxvYyBhZGRyICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgIG9mZnNldCwgbGluZV9pbmZvLT5zdGFydCkpOworICAgICAgICAgICAgICAgICAgICAoaW50KW9mZnNldCwgbGluZV9pbmZvLT5zdGFydCkpOwogICAgICAgICByZXR1cm4gUE1MUF9SQ19NRU1PUllfVU5VU0VEOwogICAgIH0KICAgICBlcC0+bG9jX2FkZHJfbGVuID0gb2Zmc2V0OwpAQCAtMTg2LDE0ICsxOTYsMTQgQEAKICAgICBsZW4gPSAoc2VwIC0gcHRyKTsKICAgICBpZiAoLTEgPT0gbmV0c25tcF9hZGRyc3RyX2h0b24ocHRyLCBsZW4pKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ0ZXh0OnV0aWw6dHZpIiwgImJhZCBsZW5ndGggJWQgZm9yIHJtdCBhZGRyICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgIHVfcHRyX2xlbiwgbGluZV9pbmZvLT5zdGFydCkpOworICAgICAgICAgICAgICAgICAgICAoaW50KXVfcHRyX2xlbiwgbGluZV9pbmZvLT5zdGFydCkpOwogICAgICAgICByZXR1cm4gUE1MUF9SQ19NRU1PUllfVU5VU0VEOwogICAgIH0KICAgICBvZmZzZXQgPSAwOwogICAgIG5ldHNubXBfaGV4X3RvX2JpbmFyeSgmdV9wdHIsICZ1X3B0cl9sZW4sICZvZmZzZXQsIDAsIHB0ciwgTlVMTCk7CiAgICAgaWYgKCg0ICE9IG9mZnNldCkgJiYgKDE2ICE9IG9mZnNldCkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInRleHQ6dXRpbDp0dmkiLCAiYmFkIG9mZnNldCAlZCBmb3Igcm10IGFkZHIgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBsaW5lX2luZm8tPnN0YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIChpbnQpb2Zmc2V0LCBsaW5lX2luZm8tPnN0YXJ0KSk7CiAgICAgICAgIHJldHVybiBQTUxQX1JDX01FTU9SWV9VTlVTRUQ7CiAgICAgfQogICAgIGVwLT5ybXRfYWRkcl9sZW4gPSBvZmZzZXQ7CkBAIC0yMjIsOCArMjMyLDEzIEBACiAgICAgaW5vZGUgPSBzdHJ0b3VsbChwdHIsICZwdHIsIDApOwogICAgIGVwLT5pbnN0YW5jZSA9ICh1X2ludClpbm9kZTsKIAotICAgIGVwLT5pbmRleCA9ICh1X2ludCkobHBpLT51c2VyX2NvbnRleHQpOwotICAgIGxwaS0+dXNlcl9jb250ZXh0ID0gKHZvaWQqKSgodV9pbnQpKGxwaS0+dXNlcl9jb250ZXh0KSArIDEpOworICAgIC8qCisgICAgICogZ2V0IHRoZSBwaWQgYWxzbworICAgICAqLworICAgIGVwLT5waWQgPSBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZShpbm9kZSk7CisKKyAgICBlcC0+aW5kZXggPSAodWludHB0cl90KShscGktPnVzZXJfY29udGV4dCk7CisgICAgbHBpLT51c2VyX2NvbnRleHQgPSAodm9pZCopKChjaGFyKikobHBpLT51c2VyX2NvbnRleHQpICsgMSk7CiAKICAgICBlcC0+b2lkX2luZGV4Lm9pZHMgPSAmZXAtPmluZGV4OwogICAgIGVwLT5vaWRfaW5kZXgubGVuID0gMTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY4MzE0YgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogIHVkcF9lbmRwb2ludFRhYmxlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydCBmb3IgTmV0QlNECisgKgorICogJElkOiB1ZHBfZW5kcG9pbnRfbGludXguYyAxODk5NCAyMDEwLTA2LTE2IDEzOjEzOjI1WiBkdHMxMiAkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaD4KKworI2luY2x1ZGUgInVkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCitzdGF0aWMgaW50IF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzLCBpbnQgdmFyKTsKKworLyoKKyAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKgorICogQHJldHZhbCAgMDogc3VjY2VzcworICogQHJldHZhbCA8MDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2luaXQobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9jbGVhbnVwKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGNsZWFudXAKKyAgICAgKi8KK30KKworLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9jb3B5KG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKnJocykKK3sKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGRlbGV0ZSBhbiBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfZGVsZXRlKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8qKiB4eHgtcmtzOjkgdWRwX2VuZHBvaW50IGRlbGV0ZSBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICByZXR1cm4gLTE7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyApCit7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6dWRwX2VuZHBvaW50OmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInVkcF9lbmRwb2ludF9jb250YWluZXJfYXJjaF9sb2FkIChmbGFncyAleClcbiIsIGxvYWRfZmxhZ3MpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3VkcF9lbmRwb2ludFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncywgNCk7CisjaWYgZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgIHJjID0gX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzLCA2KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJjOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzLCBpbnQgdmVyKQoreworICAgIGNvbnN0IGNoYXIgKm1pYm5hbWU7CisgICAgaW50ICAgICAgbWliWzhdOworICAgIHNpemVfdCAgIG1pYl9sZW47CisgICAgc3RydWN0IGtpbmZvX3BjYiAqcGNibGlzdDsKKyAgICBzaXplX3QgICBwY2JfbGVuOworICAgIG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICAqZW50cnk7CisgICAgaW50ICAgICAgaSwgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiAgUmVhZCBpbiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFRDUCB0YWJsZSBkYXRhCisgICAgICovCisgICAgc3dpdGNoICh2ZXIpIHsKKyAgICBjYXNlIDQ6CisgICAgCW1pYm5hbWUgPSAibmV0LmluZXQudWRwLnBjYmxpc3QiOworICAgIAlicmVhazsKKyAgICBjYXNlIDY6CisgICAgCW1pYm5hbWUgPSAibmV0LmluZXQ2LnVkcDYucGNibGlzdCI7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInVkcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGJhZCB2ZXJzaW9uICVkXG4iLCB2ZXIpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsbmFtZXRvbWliKG1pYm5hbWUsIG1pYiwgJm1pYl9sZW4pID09IC0xKSB7CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ1ZHAtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBjYW50IHJlc29sdmUgbWliICVzXG4iLCBtaWJuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKCptaWIpLCBOVUxMLCAmcGNiX2xlbiwgTlVMTCwgMCkgPT0gLTEpIHsKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInVkcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGNhbnQgc2l6ZSBtaWIgJXNcbiIsIG1pYm5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKHBjYmxpc3QgPSBtYWxsb2MocGNiX2xlbikpID09IE5VTEwpIHsKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInVkcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGNhbnQgYWxsb2NhdGUgbWliICVzXG4iLCBtaWJuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIG1lbXNldChwY2JsaXN0LCAwLCBwY2JfbGVuKTsKKworICAgIG1pYls2XSA9IHNpemVvZigqcGNibGlzdCk7CisgICAgbWliWzddID0gcGNiX2xlbiAvIHNpemVvZigqcGNibGlzdCk7CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgc2l6ZW9mKG1pYikgLyBzaXplb2YoKm1pYiksCisJCSAgICBwY2JsaXN0LCAmcGNiX2xlbiwgTlVMTCwgMCkgPT0gLTEpIHsKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInVkcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGNhbnQgc2l6ZSBtaWIgJXNcbiIsIG1pYm5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBVbnBpY2sgdGhpcyBpbnRvIHRoZSBjb25zdGl0dWVudCBzdHJ1Y3R1cmVzLCBhbmQgZXh0cmFjdAorICAgICAqICAgICB0aGUgJ2lucGNiJyBlbGVtZW50cyBpbnRvIGEgbGlua2VkIGxpc3QgKGJ1aWx0IGluIHJldmVyc2UpCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IHBjYl9sZW4gLyBzaXplb2YoKnBjYmxpc3QpOyBpKyspIHsKKwlzdHJ1Y3Qga2luZm9fcGNiICpwY2IgPSBwY2JsaXN0K2k7CisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5LT5waWQgPSAwOworICAgICAgICAKKwlpZiAodmVyID09IDYpIHsKKwkgICAgc3RydWN0IHNvY2thZGRyX2luNiBzcmMsIGRzdDsKKwkgICAgbWVtY3B5KCZzcmMsICZwY2ItPmtpX3MsIHNpemVvZihzcmMpKTsKKwkgICAgbWVtY3B5KCZkc3QsICZwY2ItPmtpX2QsIHNpemVvZihkc3QpKTsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSAxNjsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJnNyYy5zaW42X2FkZHIsIDE2KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJmRzdC5zaW42X2FkZHIsIDE2KTsKKwkgICAgZW50cnktPmxvY19wb3J0ID0gbnRvaHMoc3JjLnNpbjZfcG9ydCk7CisJICAgIGVudHJ5LT5ybXRfcG9ydCA9IG50b2hzKGRzdC5zaW42X3BvcnQpOworCX0KKwllbHNlIHsKKwkgICAgc3RydWN0IHNvY2thZGRyX2luIHNyYywgZHN0OworCSAgICBtZW1jcHkoJnNyYywgJnBjYi0+a2lfcywgc2l6ZW9mKHNyYykpOworCSAgICBtZW1jcHkoJmRzdCwgJnBjYi0+a2lfZCwgc2l6ZW9mKGRzdCkpOworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDQ7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZzcmMuc2luX2FkZHIsIDQpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmZHN0LnNpbl9hZGRyLCA0KTsKKwkgICAgZW50cnktPmxvY19wb3J0ID0gbnRvaHMoc3JjLnNpbl9wb3J0KTsKKwkgICAgZW50cnktPnJtdF9wb3J0ID0gbnRvaHMoZHN0LnNpbl9wb3J0KTsKKwl9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgorICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmluZGV4ID0gQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSArIDE7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgfQorCisgICAgaWYocmM8MCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNjdkYwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqICB1ZHBfZW5kcG9pbnRUYWJsZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZm9yIE9wZW5CU0QKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KKworI2luY2x1ZGUgInVkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCitzdGF0aWMgaW50IF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKTsKKworLyoKKyAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKgorICogQHJldHZhbCAgMDogc3VjY2VzcworICogQHJldHZhbCA8MDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2luaXQobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9jbGVhbnVwKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGNsZWFudXAKKyAgICAgKi8KK30KKworLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9jb3B5KG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKnJocykKK3sKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGRlbGV0ZSBhbiBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfZGVsZXRlKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8qKiB4eHgtcmtzOjkgdWRwX2VuZHBvaW50IGRlbGV0ZSBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICByZXR1cm4gLTE7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyApCit7CisgICAgaW50IHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6dWRwX2VuZHBvaW50OmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInVkcF9lbmRwb2ludF9jb250YWluZXJfYXJjaF9sb2FkIChmbGFncyAleClcbiIsIGxvYWRfZmxhZ3MpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3VkcF9lbmRwb2ludFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIHN0cnVjdCBpbnBjYnRhYmxlIHRhYmxlOworICAgIHN0cnVjdCBpbnBjYiAgICpoZWFkLCAqbmV4dCwgKnByZXY7CisgICAgc3RydWN0IGlucGNiICAgaW5wY2I7CisgICAgbmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgICplbnRyeTsKKyAgICBpbnQgICAgICByYyA9IDA7CisKKyAgICAvKgorICAgICAqICBSZWFkIGluIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgVENQIHRhYmxlIGRhdGEKKyAgICAgKi8KKyAgICBpZiAoIWF1dG9fbmxpc3QoVURCX1NZTUJPTCwgKGNoYXIgKikgJnRhYmxlLCBzaXplb2YodGFibGUpKSkgeworCURFQlVHTVNHVEwoKCJ1ZHAtbWliL3VkcF9lbmRwb2ludF9vcGVuYnNkIiwgIkZhaWxlZCB0byByZWFkIHVkcF9zeW1ib2xcbiIpKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgcHJldiA9IChzdHJ1Y3QgaW5wY2IgKikmQ0lSQ0xFUV9GSVJTVCgmdGFibGUuaW5wdF9xdWV1ZSk7CisgICAgcHJldiA9IE5VTEw7CisgICAgaGVhZCA9IG5leHQgPSBDSVJDTEVRX0ZJUlNUKCZ0YWJsZS5pbnB0X3F1ZXVlKTsKKworICAgIHdoaWxlIChuZXh0KSB7CisJTkVUU05NUF9LTE9PS1VQKG5leHQsIChjaGFyICopJmlucGNiLCBzaXplb2YoaW5wY2IpKTsKKwlpZiAocHJldiAmJiBDSVJDTEVRX1BSRVYoJmlucGNiLCBpbnBfcXVldWUpICE9IHByZXYpIHsKKwkgICAgc25tcF9sb2coTE9HX0VSUiwidWRidGFibGUgbGluayBlcnJvclxuIik7CisJICAgIGJyZWFrOworCX0KKwlwcmV2ID0gbmV4dDsKKwluZXh0ID0gQ0lSQ0xFUV9ORVhUKCZpbnBjYiwgaW5wX3F1ZXVlKTsKKworI2lmICFkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgICAgIGlmIChpbnBjYi5pbnBfZmxhZ3MgJiBJTlBfSVBWNikKKyAgICAgICAgICAgIGdvdG8gc2tpcDsKKyNlbmRpZgorICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBvZGRseSBlbm91Z2gsIHRoZXNlIGFwcGVhciB0byBhbHJlYWR5IGJlIGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgICAgICAgZW50cnktPmxvY19wb3J0ID0gbnRvaHMoaW5wY2IuaW5wX2xwb3J0KTsKKyAgICAgICAgZW50cnktPnJtdF9wb3J0ID0gbnRvaHMoaW5wY2IuaW5wX2Zwb3J0KTsKKyAgICAgICAgZW50cnktPnBpZCA9IDA7CisgICAgICAgIAorICAgICAgICAvKiogdGhlIGFkZHIgc3RyaW5nIG1heSBuZWVkIHdvcmsgKi8KKwlpZiAoaW5wY2IuaW5wX2ZsYWdzICYgSU5QX0lQVjYpIHsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSAxNjsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJmlucGNiLmlucF9sYWRkcjYsIDE2KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJmlucGNiLmlucF9mYWRkcjYsIDE2KTsKKwl9CisJZWxzZSB7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gNDsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJmlucGNiLmlucF9sYWRkciwgNCk7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZpbnBjYi5pbnBfZmFkZHIsIDQpOworCX0KKworICAgICAgICAvKgorICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+aW5kZXggPSBDT05UQUlORVJfU0laRShjb250YWluZXIpICsgMTsKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyNpZiAhZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgIHNraXA6CisjZW5kaWYKKwlpZiAobmV4dCA9PSBoZWFkKQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocmMgPCAwKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jCmluZGV4IGY0YjY5ZGYuLmY1MjI0NGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgpAQCAtMTAsMTEgKzExLDE2IEBACiAKICNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9lbnRyeV9jcmVhdGUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwX2VuZHBvaW50X2FsbCwgbGlibmV0c25tcG1pYnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwX2VuZHBvaW50X3dyaXRhYmxlLCB1ZHBfZW5kcG9pbnRfYWxsKQorCiBzdGF0aWMgaW50IF9sb2FkX3VkcF9lbmRwb2ludF90YWJsZV92NChuZXRzbm1wX2NvbnRhaW5lciAqLCBpbnQpOwogI2lmIGRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikgJiYgZGVmaW5lZChTT0xBUklTX0hBVkVfSVBWNl9NSUJfU1VQUE9SVCkKIHN0YXRpYyBpbnQgX2xvYWRfdWRwX2VuZHBvaW50X3RhYmxlX3Y2KG5ldHNubXBfY29udGFpbmVyICosIGludCk7CiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUF9FTkRQT0lOVF9XUklUQUJMRQogaW50IAogbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9pbml0KG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplcCkKIHsKQEAgLTQ4LDYgKzU0LDcgQEAKICAgICAgKi8KICAgICByZXR1cm4gKC0xKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUF9FTkRQT0lOVF9XUklUQUJMRSAqLwogCiBpbnQgCiBuZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyLCAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jCmluZGV4IDgwM2Y1MDQuLjE0NWY0Y2UgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAidWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIHVkcEVuZHBvaW50VGFibGVfb2lkW10gPSB7IFVEUEVORFBPSU5UVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgdWRwRW5kcG9pbnRUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgdWRwRW5kcG9pbnRUYWJsZV9vaWRbXSA9IHsgVURQRU5EUE9JTlRUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICB1ZHBFbmRwb2ludFRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgodWRwRW5kcG9pbnRUYWJsZV9vaWQpOwogCiB1ZHBFbmRwb2ludFRhYmxlX3JlZ2lzdHJhdGlvbiB1ZHBFbmRwb2ludFRhYmxlX3VzZXJfY29udGV4dDsKQEAgLTIyNiw3ICsyMjYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzc192YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRSZW1vdGVQb3J0X3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludFByb2Nlc3NfdmFsKQogewogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnVkcEVuZHBvaW50VGFibGU6dWRwRW5kcG9pbnRUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4IiwgImNhbGxlZFxuIikpOwogCkBAIC0yOTUsNiArMjk2LDEwIEBACiAgICAgICogdWRwRW5kcG9pbnRJbnN0YW5jZSg3KS9VTlNJR05FRDMyL0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9hL3cvZS9SL2QvaCAKICAgICAgKi8KICAgICB0YmxfaWR4LT51ZHBFbmRwb2ludEluc3RhbmNlID0gdWRwRW5kcG9pbnRJbnN0YW5jZV92YWw7CisgICAgLyoKKyAgICAgKiB1ZHBFbmRwb2ludFByb2Nlc3MoOCkvVU5TSUdORUQzMi9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvYS93L2UvUi9kL2ggCisgICAgICovCisgICAgdGJsX2lkeC0+dWRwRW5kcG9pbnRQcm9jZXNzID0gdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbDsKIAogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwpAQCAtMzIzLDcgKzMyOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVkcEVuZHBvaW50UmVtb3RlQWRkcmVzc192YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzX3ZhbF9wdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRSZW1vdGVQb3J0X3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludFByb2Nlc3NfdmFsKQogewogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnVkcEVuZHBvaW50VGFibGU6dWRwRW5kcG9pbnRUYWJsZV9pbmRleGVzX3NldCIsCiAgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOwpAQCAtMzM4LDcgKzM0NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3NfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzc192YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UmVtb3RlUG9ydF92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UHJvY2Vzc192YWwpKQogICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwogCiAgICAgLyoKQEAgLTQwNSw5ICs0MTIsOSBAQAogCiAgICAgLyoKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgdWRwRW5kcG9pbnRQcm9jZXNzIGRhdGEuCi0gICAgICogY29weSAoKiB1ZHBFbmRwb2ludFByb2Nlc3NfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqIGNvcHkgKCogdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPnRibF9pZHgudWRwRW5kcG9pbnRQcm9jZXNzCiAgICAgICovCi0gICAgKCp1ZHBFbmRwb2ludFByb2Nlc3NfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLnVkcEVuZHBvaW50UHJvY2VzczsKKyAgICAoKnVkcEVuZHBvaW50UHJvY2Vzc192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPnRibF9pZHgudWRwRW5kcG9pbnRQcm9jZXNzOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1ZHBFbmRwb2ludFByb2Nlc3NfZ2V0ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaAppbmRleCAzNjc1MmJmLi4wZGVkYTAzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgKQEAgLTEzMiw2ICsxMzIsMTEgQEAKICAgICAgICAgICovCiAgICAgICAgIHVfbG9uZyAgICAgICAgICB1ZHBFbmRwb2ludEluc3RhbmNlOwogCisgICAgICAgIC8qCisgICAgICAgICAqIHVkcEVuZHBvaW50UHJvY2Vzcyg4KS9VTlNJR05FRDMyL0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9hL3cvZS9SL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIHVkcEVuZHBvaW50UHJvY2VzczsKKwogCiAgICAgfSB1ZHBFbmRwb2ludFRhYmxlX21pYl9pbmRleDsKIApAQCAtMjAwLDggKzIwNSw4IEBACiAgICAgICAgICogdWRwRW5kcG9pbnRUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgodWRwRW5kcG9pbnRUYWJsZV9taWJfaW5kZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIHVkcEVuZHBvaW50VGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIHVkcEVuZHBvaW50VGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIHVkcEVuZHBvaW50VGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIHVkcEVuZHBvaW50VGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgInVkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmgiCkBAIC0yNTcsNyArMjYyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRSZW1vdGVQb3J0X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UHJvY2Vzc192YWwpOwogICAgIGludAogICAgICAgICB1ZHBFbmRwb2ludFRhYmxlX2luZGV4ZXNfc2V0KHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKQEAgLTI3Myw3ICsyODAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzc192YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRSZW1vdGVQb3J0X3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbCk7CiAKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBkMjIzYjk2Li4wZTI1YzIxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTI0Myw3ICsyNDMsOCBAQAogICAgICAgICBuZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfY29udGFpbmVyX2ZyZWUoZXBfYywgMCk7CiAgICAgICAgIHJldHVybiBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEU7CiAgICAgfQotICAgIGZvciAoZXAgPSBJVEVSQVRPUl9GSVJTVChlcF9pdCk7IGVwOyBlcCA9IElURVJBVE9SX05FWFQoZXBfaXQpKSB7CisgICAgZm9yIChlcCA9IChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSopSVRFUkFUT1JfRklSU1QoZXBfaXQpOyBlcDsKKyAgICAgICAgIGVwID0gKG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5KilJVEVSQVRPUl9ORVhUIChlcF9pdCkpIHsKIAogICAgICAgICAvKgogICAgICAgICAgKiBUT0RPOjM1MjpNOiB8ICAgfC0+IHNldCBpbmRleGVzIGluIG5ldyB1ZHBFbmRwb2ludFRhYmxlIHJvd3JlcSBjb250ZXh0LgpAQCAtMjY1LDcgKzI2Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIGVwLT5ybXRfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAtPnJtdF9hZGRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAtPnJtdF9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcC0+aW5zdGFuY2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwLT5pbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAtPnBpZCkpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICAgICAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKICAgICAgICAgICAgICAgICAgICAgICJ1ZHBFbmRwb2ludFRhYmxlIGRhdGEuXG4iKTsKQEAgLTI5Myw3ICsyOTUsNyBAQAogCiAKICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnVkcEVuZHBvaW50VGFibGU6dWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfbG9hZCIsCi0gICAgICAgICAgICAgICAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworICAgICAgICAgICAgICAgImluc2VydGVkICVkIHJlY29yZHNcbiIsIChpbnQpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9sb2FkICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jCmluZGV4IDI4YzJkZjMuLjYwZDM3ZTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxOCBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcEVuZHBvaW50VGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfc2l6ZSwgdWRwRW5kcG9pbnRUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwRW5kcG9pbnRUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCB1ZHBFbmRwb2ludFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBFbmRwb2ludFRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIHVkcEVuZHBvaW50VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX2dldCwgdWRwRW5kcG9pbnRUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtNzksMTkgKzkyLDIzIEBACiAgICAgICAgICAgICAgICAgX3VkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX3NodXRkb3duKHVkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogdWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIHVkcEVuZHBvaW50VGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiB1ZHBFbmRwb2ludFRhYmxlX3JlZ2lzdHJhdGlvbiAqCiB1ZHBFbmRwb2ludFRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gdWRwRW5kcG9pbnRUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogdWRwRW5kcG9pbnRUYWJsZV9yZWdpc3RyYXRpb24gKgogdWRwRW5kcG9pbnRUYWJsZV9yZWdpc3RyYXRpb25fc2V0KHVkcEVuZHBvaW50VGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQogewpAQCAtOTksMTIgKzExNiwxNSBAQAogICAgIHVkcEVuZHBvaW50VGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOwogICAgIHJldHVybiBvbGQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogdWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQogewogICAgIHJldHVybiBDT05UQUlORVJfU0laRSh1ZHBFbmRwb2ludFRhYmxlX2lmX2N0eC5jb250YWluZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiAvKgogICogbWZkIG11bHRpcGxleGVyIG1vZGVzCkBAIC0xNTgsNyArMTc4LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gVURQRU5EUE9JTlRUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gVURQRU5EUE9JTlRUQUJMRV9NQVhfQ09MOwpAQCAtMjI4LDcgKzI0OCw4IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCisgICAgLyogWFhYIC0gYXJlIHRoZXNlIGFjdHVhbGx5IG5lY2Vzc2FyeT8gKi8KICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKQEAgLTI1MSw3ICsyNzIsNyBAQAogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwpAQCAtNzAxLDcgKzcyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtNzQ4LDcgKzc2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKLSAgICB1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6dWRwRW5kcG9pbnRUYWJsZTpfbWZkX3VkcEVuZHBvaW50VGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTgxOSw3ICs4NDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTAyNCw2ICsxMDQ1LDcgQEAKICAgICAgICAgICAgICAgICAgInVkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX2luaXRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmX2N0eC0+Y29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgidWRwRW5kcG9pbnRUYWJsZSIpOwogCiAgICAgaWYgKE5VTEwgIT0gaWZfY3R4LT5jYWNoZSkKICAgICAgICAgaWZfY3R4LT5jYWNoZS0+bWFnaWMgPSAodm9pZCAqKSBpZl9jdHgtPmNvbnRhaW5lcjsKQEAgLTEwNDYsNiArMTA2OCw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF91ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogdWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4ICoKIHVkcEVuZHBvaW50VGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KHVkcEVuZHBvaW50VGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0xMDY4LDggKzEwOTEsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKHVkcEVuZHBvaW50VGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jCmluZGV4IGEwMTc2NTguLjU0MDY4YzYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYworKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMKQEAgLTksNiArOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX0lPX0gKQEAgLTQzLDExICs0NCw3IEBACiAjIGRlZmluZSBXSUZFWElURUQoc3RhdF92YWwpICgoKHN0YXRfdmFsKSAmIDI1NSkgPT0gMCkKICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzAsOSArNjcsNiBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtODYsMjMgKzgwLDkgQEAKICNpZmRlZiBIQVZFX1NZU19TVEFUX0gKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9ESVJFTlRfSAotI2luY2x1ZGUgPGRpcmVudC5oPgotI2Vsc2UKLSMgZGVmaW5lIGRpcmVudCBkaXJlY3QKLSMgaWYgSEFWRV9TWVNfTkRJUl9ICi0jICBpbmNsdWRlIDxzeXMvbmRpci5oPgotIyBlbmRpZgotIyBpZiBIQVZFX1NZU19ESVJfSAotIyAgaW5jbHVkZSA8c3lzL2Rpci5oPgotIyBlbmRpZgotIyBpZiBIQVZFX05ESVJfSAotIyAgaW5jbHVkZSA8bmRpci5oPgotIyBlbmRpZgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KIAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKQEAgLTExNyw2ICs5NywyNCBAQAogI2RlZmluZSBzZXRQZXJyb3JzdGF0dXMoeCkgc25tcF9sb2dfcGVycm9yKHgpCiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHV0aWxfZnVuY3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc2hlbGxfY29tbWFuZCwgdXRpbF9mdW5jcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihnZXRfZXh0ZW5faW5zdGFuY2UsIHV0aWxfZnVuY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2xlYXJfY2FjaGUsIHV0aWxfZnVuY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZmluZF9maWVsZCwgdXRpbF9mdW5jcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihwYXJzZV9taWJvaWQsIHV0aWxfZnVuY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3RyaW5nX2FwcGVuZF9pbnQsIHV0aWxfZnVuY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJuYWxfbWliX3RhYmxlLCB1dGlsX2Z1bmNzKQorCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX1JUTkVUTElOS19IKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHByZWZpeF9pbmZvX2FsbCwgdXRpbF9mdW5jcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihwcmVmaXhfaW5mbywgcHJlZml4X2luZm9fYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVwZGF0ZV9wcmVmaXhfaW5mbywgcHJlZml4X2luZm9fYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRlbGV0ZV9wcmVmaXhfaW5mbywgcHJlZml4X2luZm9fYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZpbmRfcHJlZml4X2luZm8sIHByZWZpeF9pbmZvX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjcmVhdGVfcHJlZml4X2luZm8sIHByZWZpeF9pbmZvX2FsbCkKKyNlbmRpZiAvKiBIQVZFX0xJTlVYX1JUTkVUTElOS19IICovCiAKICNpZmRlZiBORVRTTk1QX0VYQ0FDSEVUSU1FCiBzdGF0aWMgbG9uZyAgICAgY2FjaGV0aW1lOwpAQCAtMTI0LDEzICsxMjIsNiBAQAogCiBleHRlcm4gaW50ICAgICAgbnVtcHJvY3MsIG51bWV4dGVuczsKIAotdm9pZAotRXhpdChpbnQgdmFyKQotewotICAgIHNubXBfbG9nKExPR19FUlIsICJTZXJ2ZXIgRXhpdGluZyB3aXRoIGNvZGUgJWRcbiIsIHZhcik7Ci0gICAgZXhpdCh2YXIpOwotfQotCiAvKiogZGVwcmVjYXRlZCwgdXNlIG5ldHNubXBfbWt0ZW1wIGluc3RlYWQgKi8KIGNvbnN0IGNoYXIgKgogbWFrZV90ZW1wZmlsZSh2b2lkKQpAQCAtMTM4LDYgKzEyOSw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfbWt0ZW1wKCk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TSEVMTF9DT01NQU5ECiBpbnQKIHNoZWxsX2NvbW1hbmQoc3RydWN0IGV4dGVuc2libGUgKmV4KQogewpAQCAtMTcxLDYgKzE2Myw3IEBACiAjZW5kaWYKICAgICByZXR1cm4gKGV4LT5yZXN1bHQpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0hFTExfQ09NTUFORCAqLwogCiAjZGVmaW5lIE1BWE9VVFBVVCAzMDAKIApAQCAtMTk3LDYgKzE5MCw3IEBACiAgICAgcmV0dXJuIChleC0+cmVzdWx0KTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9FWFRFTl9JTlNUQU5DRQogc3RydWN0IGV4dGVuc2libGUgKgogZ2V0X2V4dGVuX2luc3RhbmNlKHN0cnVjdCBleHRlbnNpYmxlICpleHRlbiwgc2l6ZV90IGluc3QpCiB7CkBAIC0yMDgsNiArMjAyLDcgQEAKICAgICAgICAgZXh0ZW4gPSBleHRlbi0+bmV4dDsKICAgICByZXR1cm4gKGV4dGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9FWFRFTl9JTlNUQU5DRSAqLwogCiB2b2lkCiB3YWl0X29uX2V4ZWMoc3RydWN0IGV4dGVuc2libGUgKmV4KQpAQCAtMjE2LDcgKzIxMSw3IEBACiAgIGludCByYzsKICAgaWYgKGV4LT50aWQgIT0gMCAmJiBleC0+cGlkICE9IDApIHsKICAgICBIQU5ETEUgaFRocmVhZCA9IGV4LT50aWQ7Ci0gICAgSEFORExFIGhQcm9jZXNzID0gKEhBTkRMRSkgZXgtPnBpZDsKKyAgICBIQU5ETEUgaFByb2Nlc3MgPSBleC0+cGlkOwogICAgIHJjID0gV2FpdEZvclNpbmdsZU9iamVjdChoUHJvY2VzcywgTkVUU05NUF9USU1FT1VUX1dBSVRGT1JTSU5HTEVPQkpFQ1QpOwogICAgIERFQlVHTVNHVCgoImV4ZWM6d2FpdF9vbl9leGVjIiwiV2FpdEZvclNpbmdsZU9iamVjdCByYz0oJWQpXG4iLHJjICkpOwogICAgIHJjID0gQ2xvc2VIYW5kbGUoIGhUaHJlYWQgKTsKQEAgLTI0MSw2ICsyMzYsMTAgQEAKIGludAogZ2V0X2V4ZWNfb3V0cHV0KHN0cnVjdCBleHRlbnNpYmxlICpleCkKIHsKKyNpZm5kZWYgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCisgICAgZXgtPnJlc3VsdCA9IC0xOworICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX1dBUk5JTkcsICJzdXBwb3J0IGZvciBydW5fZXhlY19jb21tYW5kIG5vdCBhdmFpbGFibGVcbiIpKTsKKyNlbHNlCiAjaWYgSEFWRV9FWEVDVgogICAgIGNoYXIgICAgICAgICAgICBjYWNoZWZpbGVbU1RSTUFYXTsKICAgICBjaGFyICAgICAgICAgICAgY2FjaGVbTkVUU05NUF9NQVhDQUNIRVNJWkVdOwpAQCAtMjcwLDcgKzI2OSw3IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogWFhYICBVc2UgU05NUF9GSUxFTU9ERV9DTE9TRUQgaW5zdGVhZCBvZiA2NDQ/IAogICAgICAgICAgICAgICovCi0gICAgICAgIGlmICgoY2ZkID0gb3BlbihjYWNoZWZpbGUsIE9fV1JPTkxZIHwgT19UUlVOQyB8IE9fQ1JFQVQsIDA2NDQpKSA8IDApIHsKKyAgICAgICAgaWYgKChjZmQgPSBvcGVuKGNhY2hlZmlsZSwgT19XUk9OTFkgfCBPX1RSVU5DIHwgT19DUkVBVCwgMDYwMCkpIDwgMCkgewogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImNhbiBub3QgY3JlYXRlIGNhY2hlIGZpbGVcbiIpOwogICAgICAgICAgICAgICAgIHNldFBlcnJvcnN0YXR1cyhjYWNoZWZpbGUpOwogI2lmZGVmIE5FVFNOTVBfRVhDQUNIRVRJTUUKQEAgLTM2OSw3ICszNjgsNyBAQAogICAgIH0KICAgICAKICAgICAvKiBTZXQgZ2xvYmFsIGNoaWxkIHByb2Nlc3MgaGFuZGxlICovCi0gICAgZXgtPnBpZCA9IChpbnQpcGkuaFByb2Nlc3M7CisgICAgZXgtPnBpZCA9IHBpLmhQcm9jZXNzOwogICAgIGV4LT50aWQgPSBwaS5oVGhyZWFkOwogCiAgICAgLyogQ2xvc2UgcGlwZSBoYW5kbGVzIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIGhhbmRsZXMgdG8gdGhlIHdyaXRlIGVuZCBvZiB0aGUKQEAgLTM5MCwxMSArMzg5LDEyIEBACiAgICAgfQogICAgIHJldHVybiBmZDsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgKi8KLSAgICByZXR1cm4gLTE7CiAjZW5kaWYKKyNlbmRpZiAvKiAhZGVmaW5lZChVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUpICovCisgICAgcmV0dXJuIC0xOwogfQogaW50Ci1nZXRfZXhlY19waXBlcyhjaGFyICpjbWQsIGludCAqZmRJbiwgaW50ICpmZE91dCwgaW50ICpwaWQpCitnZXRfZXhlY19waXBlcyhjaGFyICpjbWQsIGludCAqZmRJbiwgaW50ICpmZE91dCwgbmV0c25tcF9waWRfdCAqcGlkKQogewogLyogCUFsZXhhbmRlciBQcsO2bWVsLCBhbGV4YW5kZXJAcHJvZW1lbC5kZSAwOC8yNC8yMDA2CiAJVGhlIGZvbGxvd2luZyBjb2RlLCBpcyB0ZXN0ZWQgb24gcGljb3R1eCByZXYuIDEuMDEuCkBAIC02MjcsNyArNjI3LDcgQEAKICAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jcyIsImNoaWxkIGR3UHJvY2Vzc0lkICh0YXNrIG1hbmFnZXIpOiAlZFxuIiwoaW50KXBpLmR3UHJvY2Vzc0lkKSk7CiAKICAgICAvKiBTZXQgZ2xvYmFsIGNoaWxkIHByb2Nlc3MgaGFuZGxlICovCi0gICAgKnBpZCA9IChpbnQpcGkuaFByb2Nlc3M7CisgICAgKnBpZCA9IHBpLmhQcm9jZXNzOwogCiAgICAgLyogQ2xlYW51cCAqLwogICAgIGlmICghQ2xvc2VIYW5kbGUocGkuaFRocmVhZCkpCkBAIC02NTYsNiArNjU2LDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NMRUFSX0NBQ0hFCiBpbnQKIGNsZWFyX2NhY2hlKGludCBhY3Rpb24sCiAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLApAQCAtNjc4LDcwICs2NzksNyBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KLQotY2hhciAgICAgICAgICAqKmFyZ3ZyZXN0YXJ0cCwgKmFyZ3ZyZXN0YXJ0bmFtZSwgKmFyZ3ZyZXN0YXJ0OwotCi1SRVRTSUdUWVBFCi1yZXN0YXJ0X2RvaXQoaW50IGEpCi17Ci0gICAgY2hhciAqIG5hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKLSAgICBzbm1wX3NodXRkb3duKG5hbWUpOwotCi0gICAgLyogIFRoaXMgc2lnbmFsIGhhbmRsZXIgbWF5IHJ1biB3aXRoIFNJR0FMQVJNIGJsb2NrZWQuCi0gICAgICogIFNpbmNlIHRoZSBzaWduYWwgbWFzayBpcyBwcmVzZXJ2ZWQgYWNjcm9zcyBleGVjdigpLCB3ZSBtdXN0IAotICAgICAqICBtYWtlIHN1cmUgdGhhdCBTSUdBTEFSTSBpcyB1bmJsb2NrZWQgcHJpb3Igb2YgZXhlY3YnaW5nLgotICAgICAqICBPdGhlcndpc2UgU0lHQUxBUk0gd2lsbCBiZSBpZ25vcmVkIGluIHRoZSBuZXh0IGluY2FybmF0aW9uCi0gICAgICogIG9mIHNubXBkLCBiZWNhdXNlIHRoZSBzaWduYWwgaXMgYmxvY2tlZC4gQW5kIHRodXMsIHRoZSAKLSAgICAgKiAgcmVzdGFydCBkb2Vzbid0IHdvcmsgYW55bW9yZS4gCi0gICAgICoKLSAgICAgKiAgQSBxdW90ZSBmcm9tIHRoZSBzaWdwcm9jbWFzaygpIG1hbiBwYWdlOgotICAgICAqICBUaGUgdXNlIG9mIHNpZ3Byb2NtYXNrKCkgaXMgdW5zcGVjaWZpZWQgaW4gYSBtdWx0aXRocmVhZGVkIHByb2Nlc3M7IHNlZQotICAgICAqICBwdGhyZWFkX3NpZ21hc2soMykuIAotICAgICAqLyAKLSNpZiBIQVZFX1NJR1BST0NNQVNLCi0gICAgewotICAgICAgICBzaWdzZXRfdCBlbXB0eV9zZXQ7Ci0gICAgICAKLSAgICAgICAgc2lnZW1wdHlzZXQoJmVtcHR5X3NldCk7Ci0gICAgICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmZW1wdHlfc2V0LCBOVUxMKTsKLSAgICB9Ci0jZWxpZiBIQVZFX1NJR0JMT0NLCi0gICAgc2lnc2V0bWFzaygwKTsKLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBkbyB0aGUgZXhlYyAKLSAgICAgKi8KLSNpZiBIQVZFX0VYRUNWCi0gICAgZXhlY3YoYXJndnJlc3RhcnRuYW1lLCBhcmd2cmVzdGFydHApOwotICAgIHNldFBlcnJvcnN0YXR1cyhhcmd2cmVzdGFydG5hbWUpOwotI2VuZGlmCi19Ci0KLWludAotcmVzdGFydF9ob29rKGludCBhY3Rpb24sCi0gICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKLSAgICAgICAgICAgICB1X2NoYXIgdmFyX3ZhbF90eXBlLAotICAgICAgICAgICAgIHNpemVfdCB2YXJfdmFsX2xlbiwKLSAgICAgICAgICAgICB1X2NoYXIgKiBzdGF0UCwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQotewotCi0gICAgbG9uZyAgICAgICAgICAgIHRtcCA9IDA7Ci0KLSAgICBpZiAodmFyX3ZhbF90eXBlICE9IEFTTl9JTlRFR0VSKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19OT1RJQ0UsICJXcm9uZyB0eXBlICE9IGludFxuIik7Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7Ci0gICAgfQotICAgIHRtcCA9ICooKGxvbmcgKikgdmFyX3ZhbCk7Ci0gICAgaWYgKHRtcCA9PSAxICYmIGFjdGlvbiA9PSBDT01NSVQpIHsKLSNpZmRlZiBTSUdBTFJNCi0gICAgICAgIHNpZ25hbChTSUdBTFJNLCByZXN0YXJ0X2RvaXQpOwotI2VuZGlmCi0gICAgICAgIGFsYXJtKE5FVFNOTVBfUkVTVEFSVFNMRUVQKTsKLSAgICB9Ci0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DTEVBUl9DQUNIRSAqLwogCiB2b2lkCiBwcmludF9taWJfb2lkKG9pZCBuYW1lW10sIHNpemVfdCBsZW4pCkBAIC03NjMsMTY5ICs3MDEsNyBAQAogICAgIGludCAgICAgICAgICAgICBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIGxlbjsgaSsrKQotICAgICAgICBidWYgKz0gc3ByaW50ZihidWYsICIuJXUiLCAodW5zaWduZWQpIG5hbWVbaV0pOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogaGVhZGVyX3NpbXBsZV90YWJsZQotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKgkgICp2cAkJIFZhcmlhYmxlIGRhdGEuCi0gKgkgICpuYW1lCQkgRnVsbHkgaW5zdGFudGlhdGVkIE9JRCBuYW1lLgotICoJICAqbGVuZ3RoCSBMZW5ndGggb2YgbmFtZS4KLSAqCSAgIGV4YWN0CSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIGlzIGRlc2lyZWQuCi0gKgkgICp2YXJfbGVuCSBIb29rIGZvciBzaXplIG9mIHJldHVybmVkIGRhdGEgdHlwZS4KLSAqCSgqKndyaXRlX21ldGhvZCkgSG9vayBmb3Igd3JpdGUgbWV0aG9kIChVTlVTRUQpLgotICoJICAgbWF4Ci0gKiAgICAgIAotICogUmV0dXJuczoKLSAqCTAJSWYgbmFtZSBtYXRjaGVzIHZwLT5uYW1lIChhY2NvdW50aW5nIGZvciAnZXhhY3QnKSBhbmQgaXMKLSAqCQkJbm90IGdyZWF0ZXIgaW4gbGVuZ3RoIHRoYW4gJ21heCcuCi0gKgkxCU90aGVyd2lzZS4KLSAqCi0gKgotICogQ29tcGFyZSAnbmFtZScgdG8gdnAtPm5hbWUgZm9yIHRoZSBiZXN0IG1hdGNoIG9yIGFuIGV4YWN0IG1hdGNoIChpZgotICoJcmVxdWVzdGVkKS4gIEFsc28gY2hlY2sgdGhhdCAnbmFtZScgaXMgbm90IGxvbmdlciB0aGFuICdtYXgnIGlmCi0gKgltYXggaXMgZ3JlYXRlci10aGFuL2VxdWFsIDAuCi0gKiBTdG9yZSBhIHN1Y2Nlc3NmdWwgbWF0Y2ggaW4gJ25hbWUnLCBhbmQgaW5jcmVtZW50IHRoZSBPSUQgaW5zdGFuY2UgaWYKLSAqCXRoZSBtYXRjaCB3YXMgbm90IGV4YWN0LiAgCi0gKgotICogJ25hbWUnIGFuZCAnbGVuZ3RoJyBhcmUgdW5kZWZpbmVkIHVwb24gZmFpbHVyZS4KLSAqCi0gKi8KLWludAotaGVhZGVyX3NpbXBsZV90YWJsZShzdHJ1Y3QgdmFyaWFibGUgKnZwLCBvaWQgKiBuYW1lLCBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kLCBpbnQgbWF4KQotewotICAgIGludCAgICAgICAgICAgICBpLCBydGVzdDsgICAvKiBTZXQgdG86ICAgICAgLTEgICAgICBJZiBuYW1lIDwgdnAtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAxICAgICAgIElmIG5hbWUgPiB2cC0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgIDAgICAgICAgT3RoZXJ3aXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBvaWQgICAgICAgICAgICAgbmV3bmFtZVtNQVhfT0lEX0xFTl07Ci0KLSAgICBmb3IgKGkgPSAwLCBydGVzdCA9IDA7Ci0gICAgICAgICBpIDwgKGludCkgdnAtPm5hbWVsZW4gJiYgaSA8IChpbnQpICgqbGVuZ3RoKSAmJiAhcnRlc3Q7IGkrKykgewotICAgICAgICBpZiAobmFtZVtpXSAhPSB2cC0+bmFtZVtpXSkgewotICAgICAgICAgICAgaWYgKG5hbWVbaV0gPCB2cC0+bmFtZVtpXSkKLSAgICAgICAgICAgICAgICBydGVzdCA9IC0xOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJ0ZXN0ID0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocnRlc3QgPiAwIHx8Ci0gICAgICAgIChleGFjdCA9PSAxCi0gICAgICAgICAmJiAocnRlc3QgfHwgKGludCkgKmxlbmd0aCAhPSAoaW50KSAodnAtPm5hbWVsZW4gKyAxKSkpKSB7Ci0gICAgICAgIGlmICh2YXJfbGVuKQotICAgICAgICAgICAgKnZhcl9sZW4gPSAwOwotICAgICAgICByZXR1cm4gTUFUQ0hfRkFJTEVEOwotICAgIH0KLQotICAgIG1lbXNldChuZXduYW1lLCAwLCBzaXplb2YobmV3bmFtZSkpOwotCi0gICAgaWYgKCgoaW50KSAqbGVuZ3RoKSA8PSAoaW50KSB2cC0+bmFtZWxlbiB8fCBydGVzdCA9PSAtMSkgewotICAgICAgICBtZW1tb3ZlKG5ld25hbWUsIHZwLT5uYW1lLCAoaW50KSB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKLSAgICAgICAgbmV3bmFtZVt2cC0+bmFtZWxlbl0gPSAxOwotICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgIH0gZWxzZSBpZiAoKChpbnQpICpsZW5ndGgpID4gKGludCkgdnAtPm5hbWVsZW4gKyAxKSB7ICAgICAgIC8qIGV4YWN0IGNhc2UgY2hlY2tlZCBlYXJsaWVyICovCi0gICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgICAgIG1lbW1vdmUobmV3bmFtZSwgbmFtZSwgKCpsZW5ndGgpICogc2l6ZW9mKG9pZCkpOwotICAgICAgICBpZiAobmFtZVsqbGVuZ3RoIC0gMV0gPCBVTE9OR19NQVgpIHsKLSAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV0gKyAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIENhcmVmdWwgbm90IHRvIG92ZXJmbG93Li4uICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgICAgIG1lbW1vdmUobmV3bmFtZSwgbmFtZSwgKCpsZW5ndGgpICogc2l6ZW9mKG9pZCkpOwotICAgICAgICBpZiAoIWV4YWN0KSB7Ci0gICAgICAgICAgICBpZiAobmFtZVsqbGVuZ3RoIC0gMV0gPCBVTE9OR19NQVgpIHsKLSAgICAgICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdICsgMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBDYXJlZnVsIG5vdCB0byBvdmVyZmxvdy4uLiAgCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKChtYXggPj0gMCAmJiAoKGludCluZXduYW1lWypsZW5ndGggLSAxXSA+IG1heCkpIHx8Ci0gICAgICAgICAgICAgICAoIDAgPT0gbmV3bmFtZVsqbGVuZ3RoIC0gMV0gKSkgewotICAgICAgICBpZiAodmFyX2xlbikKLSAgICAgICAgICAgICp2YXJfbGVuID0gMDsKLSAgICAgICAgcmV0dXJuIE1BVENIX0ZBSUxFRDsKLSAgICB9Ci0KLSAgICBtZW1tb3ZlKG5hbWUsIG5ld25hbWUsICgqbGVuZ3RoKSAqIHNpemVvZihvaWQpKTsKLSAgICBpZiAod3JpdGVfbWV0aG9kKQotICAgICAgICAqd3JpdGVfbWV0aG9kID0gMDsKLSAgICBpZiAodmFyX2xlbikKLSAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgcmV0dXJuIChNQVRDSF9TVUNDRUVERUQpOwotfQotCi0vKgotICogaGVhZGVyX2dlbmVyaWMoLi4uCi0gKiBBcmd1bWVudHM6Ci0gKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQotICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCi0gKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAotICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCi0gKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAotICogd3JpdGVfbWV0aG9kCi0gKiAKLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogZ2VuZXJpY19oZWFkZXIKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJICAqdnAJICAgKEkpICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUuCi0gKgkgICpuYW1lCSAgIChJL08pICAgSW5wdXQgbmFtZSByZXF1ZXN0ZWQsIG91dHB1dCBuYW1lIGZvdW5kLgotICoJICAqbGVuZ3RoICAoSS9PKSAgIExlbmd0aCBvZiBpbnB1dCBhbmQgb3V0cHV0IG9pZCdzLgotICoJICAgZXhhY3QgICAoSSkgICAgIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZC4KLSAqCSAgKnZhcl9sZW4gKE8pICAgICBMZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZC4KLSAqCSgqKndyaXRlX21ldGhvZCkgICBIb29rIHRvIG5hbWUgYSB3cml0ZSBtZXRob2QgKFVOVVNFRCkuCi0gKiAgICAgIAotICogUmV0dXJuczoKLSAqCU1BVENIX1NVQ0NFRURFRAlJZiB2cC0+bmFtZSBtYXRjaGVzIG5hbWUgKGFjY291bnRpbmcgZm9yIGV4YWN0IGJpdCkuCi0gKglNQVRDSF9GQUlMRUQJT3RoZXJ3aXNlLAotICoKLSAqCi0gKiBDaGVjayB3aGV0aGVyIHZhcmlhYmxlICh2cCkgbWF0Y2hlcyBuYW1lLgotICovCi1pbnQKLWhlYWRlcl9nZW5lcmljKHN0cnVjdCB2YXJpYWJsZSAqdnAsCi0gICAgICAgICAgICAgICBvaWQgKiBuYW1lLAotICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCi17Ci0gICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOwotICAgIGludCAgICAgICAgICAgICByZXN1bHQ7Ci0KLSAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jcyIsICJoZWFkZXJfZ2VuZXJpYzogIikpOwotICAgIERFQlVHTVNHT0lEKCgidXRpbF9mdW5jcyIsIG5hbWUsICpsZW5ndGgpKTsKLSAgICBERUJVR01TRygoInV0aWxfZnVuY3MiLCAiIGV4YWN0PSVkXG4iLCBleGFjdCkpOwotCi0gICAgbWVtY3B5KChjaGFyICopIG5ld25hbWUsIChjaGFyICopIHZwLT5uYW1lLAotICAgICAgICAgICAoaW50KSB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKLSAgICBuZXduYW1lW3ZwLT5uYW1lbGVuXSA9IDA7Ci0gICAgcmVzdWx0ID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCAqbGVuZ3RoLCBuZXduYW1lLCB2cC0+bmFtZWxlbiArIDEpOwotICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzIiwgIiAgcmVzdWx0OiAlZFxuIiwgcmVzdWx0KSk7Ci0gICAgaWYgKChleGFjdCAmJiAocmVzdWx0ICE9IDApKSB8fCAoIWV4YWN0ICYmIChyZXN1bHQgPj0gMCkpKQotICAgICAgICByZXR1cm4gKE1BVENIX0ZBSUxFRCk7Ci0gICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCi0gICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwotICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0KLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKLSAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwotICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKKyAgICAgICAgYnVmICs9IHNwcmludGYoYnVmLCAiLiUiIE5FVFNOTVBfUFJJbyAidSIsIG5hbWVbaV0pOwogfQogCiAvKgpAQCAtOTQ0LDYgKzcyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9tZXRob2QsIG1heCkpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklORF9GSUVMRAogY2hhciAgICAgICAgICAgKgogZmluZF9maWVsZChjaGFyICpwdHIsIGludCBmaWVsZCkKIHsKQEAgLTk1OSwxNSArNzM2LDE1IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIHJld2luZCBhIGZpZWxkIGxlbmd0aCAKICAgICAgICAgICovCi0gICAgICAgIHdoaWxlICgqcHRyICE9IDAgJiYgaXNzcGFjZSgqcHRyKSAmJiBpbml0IDw9IHB0cikKKyAgICAgICAgd2hpbGUgKCpwdHIgIT0gMCAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqcHRyKSkgJiYgaW5pdCA8PSBwdHIpCiAgICAgICAgICAgICBwdHItLTsKLSAgICAgICAgd2hpbGUgKCpwdHIgIT0gMCAmJiAhaXNzcGFjZSgqcHRyKSAmJiBpbml0IDw9IHB0cikKKyAgICAgICAgd2hpbGUgKCpwdHIgIT0gMCAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKnB0cikpICYmIGluaXQgPD0gcHRyKQogICAgICAgICAgICAgcHRyLS07Ci0gICAgICAgIGlmIChpc3NwYWNlKCpwdHIpKQorICAgICAgICBpZiAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKnB0cikpKQogICAgICAgICAgICAgcHRyKys7ICAgICAgICAgICAgICAvKiBwYXN0IHNwYWNlICovCiAgICAgICAgIGlmIChwdHIgPCBpbml0KQogICAgICAgICAgICAgcHRyID0gaW5pdDsKLSAgICAgICAgaWYgKCFpc3NwYWNlKCpwdHIpICYmICpwdHIgIT0gMCkKKyAgICAgICAgaWYgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqcHRyKSkgJiYgKnB0ciAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIChwdHIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICgocHRyID0gc2tpcF93aGl0ZShwdHIpKSA9PSBOVUxMKQpAQCAtOTg0LDcgKzc2MSw5IEBACiAgICAgfQogICAgIHJldHVybiAoTlVMTCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSU5EX0ZJRUxEICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9NSUJPSUQKIGludAogcGFyc2VfbWlib2lkKGNvbnN0IGNoYXIgKmJ1Ziwgb2lkICogb2lkb3V0KQogewpAQCAtOTk0LDEyICs3NzMsMTIgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCpidWYgPT0gJy4nKQogICAgICAgICBidWYrKzsKLSAgICBmb3IgKGkgPSAwOyBpc2RpZ2l0KCpidWYpOyBpKyspIHsKKyAgICBmb3IgKGkgPSAwOyBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqYnVmKSk7IGkrKykgewogICAgICAgICAvKiBTdWJpZGVudGlmaWVycyBhcmUgdW5zaWduZWQgdmFsdWVzLCB1cCB0byAyXjMyLTEKICAgICAgICAgICogc28gd2UgbmVlZCB0byB1c2UgJ3N0cnRvdWwnIHJhdGhlciB0aGFuICdhdG9pJwogICAgICAgICAgKi8KICAgICAgICAgb2lkb3V0W2ldID0gc3RydG91bChidWYsIE5VTEwsIDEwKSAmIDB4ZmZmZmZmZmY7Ci0gICAgICAgIHdoaWxlIChpc2RpZ2l0KCpidWYrKykpOworICAgICAgICB3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmJ1ZikpKSBidWYrKzsKICAgICAgICAgaWYgKCpidWYgPT0gJy4nKQogICAgICAgICAgICAgYnVmKys7CiAgICAgfQpAQCAtMTAwOCw3ICs3ODcsOSBAQAogICAgICAqLwogICAgIHJldHVybiBpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfTUlCT0lEICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVFJJTkdfQVBQRU5EX0lOVAogdm9pZAogc3RyaW5nX2FwcGVuZF9pbnQoY2hhciAqcywgaW50IHZhbCkKIHsKQEAgLTEwMjMsMTMgKzgwNCwxNiBAQAogICAgIHN0cmNweShzLCB0ZXh0VmFsKTsKICAgICByZXR1cm47CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVFJJTkdfQVBQRU5EX0lOVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJOQUxfTUlCX1RBQkxFCiAKIHN0cnVjdCBpbnRlcm5hbF9taWJfdGFibGUgewogICAgIGludCAgICAgICAgICAgICBtYXhfc2l6ZTsgICAvKiBTaXplIG9mIHRoZSBjdXJyZW50IGRhdGEgdGFibGUgKi8KICAgICBpbnQgICAgICAgICAgICAgbmV4dF9pbmRleDsgLyogSW5kZXggb2YgdGhlIG5leHQgZnJlZSBlbnRyeSAqLwogICAgIGludCAgICAgICAgICAgICBjdXJyZW50X2luZGV4OyAgICAgIC8qIEluZGV4IG9mIHRoZSAnY3VycmVudCcgZW50cnkgKi8KICAgICBpbnQgICAgICAgICAgICAgY2FjaGVfdGltZW91dDsKLSAgICBtYXJrZXJfdCAgICAgICAgY2FjaGVfbWFya2VyOworICAgIG1hcmtlcl90ICAgICAgICBjYWNoZV9tYXJrZXJNOwogICAgIFJFTE9BRCAgICAgICAgICpyZWxvYWQ7ICAgICAvKiBSb3V0aW5lIHRvIHJlYWQgaW4gdGhlIGRhdGEgKi8KICAgICBDT01QQVJFICAgICAgICAqY29tcGFyZTsgICAgLyogUm91dGluZSB0byBjb21wYXJlIHR3byBlbnRyaWVzICovCiAgICAgaW50ICAgICAgICAgICAgIGRhdGFfc2l6ZTsgIC8qIFNpemUgb2YgYW4gaW5kaXZpZHVhbCBlbnRyeSAqLwpAQCAtMTA1MCw3ICs4MzQsNyBAQAogICAgIHQtPm5leHRfaW5kZXggPSAxOyAgICAgICAgICAvKiBEb24ndCB1c2UgaW5kZXggMCAqLwogICAgIHQtPmN1cnJlbnRfaW5kZXggPSAxOwogICAgIHQtPmNhY2hlX3RpbWVvdXQgPSB0aW1lb3V0OwotICAgIHQtPmNhY2hlX21hcmtlciA9IE5VTEw7CisgICAgdC0+Y2FjaGVfbWFya2VyTSA9IE5VTEw7CiAgICAgdC0+cmVsb2FkID0gcmVsb2FkOwogICAgIHQtPmNvbXBhcmUgPSBjb21wYXJlOwogICAgIHQtPmRhdGFfc2l6ZSA9IHNpemU7CkBAIC0xMDcyLDggKzg1Niw5IEBACiAgICAgICogSWYgdGhlIHNhdmVkIGRhdGEgaXMgZmFpcmx5IHJlY2VudCwKICAgICAgKiAgICB3ZSBkb24ndCBuZWVkIHRvIHJlbG9hZCBpdAogICAgICAqLwotICAgIGlmICh0YWJsZS0+Y2FjaGVfbWFya2VyICYmCi0gICAgICAgICEoYXRpbWVfcmVhZHkodGFibGUtPmNhY2hlX21hcmtlciwgdGFibGUtPmNhY2hlX3RpbWVvdXQgKiAxMDAwKSkpCisgICAgaWYgKHRhYmxlLT5jYWNoZV9tYXJrZXJNICYmCisgICAgICAgICEobmV0c25tcF9yZWFkeV9tb25vdG9uaWModGFibGUtPmNhY2hlX21hcmtlck0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUtPmNhY2hlX3RpbWVvdXQgKiAxMDAwKSkpCiAgICAgICAgIHJldHVybiAxOwogCiAKQEAgLTEwODMsMTUgKzg2OCwxMiBAQAogICAgICAqIE4uQjogIFVwZGF0ZSB0aGUgY2FjaGUgbWFya2VyICpiZWZvcmUqIGNhbGxpbmcKICAgICAgKiAgIHRoaXMgcm91dGluZSwgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCByZWN1cnNpb24KICAgICAgKi8KLSAgICBpZiAoIXRhYmxlLT5jYWNoZV9tYXJrZXIpCi0gICAgICAgIHRhYmxlLT5jYWNoZV9tYXJrZXIgPSBhdGltZV9uZXdNYXJrZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIGF0aW1lX3NldE1hcmtlcih0YWJsZS0+Y2FjaGVfbWFya2VyKTsKKyAgICBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKCZ0YWJsZS0+Y2FjaGVfbWFya2VyTSk7CiAKICAgICB0YWJsZS0+bmV4dF9pbmRleCA9IDE7CiAgICAgaWYgKHRhYmxlLT5yZWxvYWQoKG1pYl90YWJsZV90KSB0YWJsZSkgPCAwKSB7Ci0gICAgICAgIGZyZWUodGFibGUtPmNhY2hlX21hcmtlcik7Ci0gICAgICAgIHRhYmxlLT5jYWNoZV9tYXJrZXIgPSBOVUxMOworICAgICAgICBmcmVlKHRhYmxlLT5jYWNoZV9tYXJrZXJNKTsKKyAgICAgICAgdGFibGUtPmNhY2hlX21hcmtlck0gPSBOVUxMOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgdGFibGUtPmN1cnJlbnRfaW5kZXggPSAxOwpAQCAtMTIwMSw4OSArOTgzLDE0NyBAQAogICAgICptYXhfaWR4ID0gdGFibGUtPm5leHRfaW5kZXggLSAxOwogICAgIHJldHVybiB0YWJsZS0+ZGF0YTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSTkFMX01JQl9UQUJMRSAqLwogCi0jaWZkZWYgbGludXgKLSMgZGVmaW5lIFBST0NfUEFUSCAgICAgICAgICAiL3Byb2MiCi0jIGRlZmluZSBGSUxFX0RJU1AgICAgICAgICAgImZkLyIKLSMgZGVmaW5lIFNPQ0tFVF9UWVBFXzEgICAgICAic29ja2V0OlsiCi0jIGRlZmluZSBTT0NLRVRfVFlQRV8yICAgICAgIlswMDAwXToiCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX1JUTkVUTElOS19IKQogCi11bnNpZ25lZCBsb25nIGxvbmcKLWV4dHJhY3RfaW5vZGUoY2hhciAqZm9ybWF0KQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NSRUFURV9QUkVGSVhfSU5GTworcHJlZml4X2NieCAqbmV0X3NubXBfY3JlYXRlX3ByZWZpeF9pbmZvKHVuc2lnbmVkIGxvbmcgT25MaW5rRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIEF1dG9ub21vdXNGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmluNnB0cikKIHsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmV0ID0gMDsKKyAgIHByZWZpeF9jYnggKm5vZGUgPSBTTk1QX01BTExPQ19UWVBFREVGKHByZWZpeF9jYngpOworICAgaWYoIWluNnB0cikgeworICAgICAgZnJlZShub2RlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorICAgaWYoIW5vZGUpIHsKKyAgICAgIGZyZWUobm9kZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKyAgIG5vZGUtPm5leHRfaW5mbyA9IE5VTEw7CisgICBub2RlLT5pcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnID0gT25MaW5rRmxhZzsKKyAgIG5vZGUtPmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnID0gQXV0b25vbW91c0ZsYWc7CisgICBtZW1jcHkobm9kZS0+aW42cCwgaW42cHRyLCBzaXplb2Yobm9kZS0+aW42cCkpOwogCi0gICAgaWYgKCFzdHJuY21wKGZvcm1hdCwgU09DS0VUX1RZUEVfMSwgOCkpIHsKLSAgICAgICAgcmV0ID0gc3RydG91bGwoZm9ybWF0ICsgOCwgTlVMTCwgMCk7Ci0gICAgfSBlbHNlIGlmICghc3RybmNtcChmb3JtYXQsIFNPQ0tFVF9UWVBFXzIsIDcpKSB7Ci0gICAgICAgIHJldCA9IHN0cnRvdWxsKGZvcm1hdCArIDcsIE5VTEwsIDApOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7CisgICByZXR1cm4gbm9kZTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NSRUFURV9QUkVGSVhfSU5GTyAqLwogCi11bnNpZ25lZCBpbnQKLWdldF9waWRfZnJvbV9pbm9kZSh1bnNpZ25lZCBsb25nIGxvbmcgaW5vZGUpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklORF9QUkVGSVhfSU5GTworaW50IG5ldF9zbm1wX2ZpbmRfcHJlZml4X2luZm8ocHJlZml4X2NieCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2NieCAqbm9kZV90b19maW5kKQogewotICAgIERJUiAgICAgICAgICAgICpwcm9jZGlycyA9IE5VTEwsICpwaWRkaXJzID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAqbmFtZSA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgIHBhdGhfbmFtZVtQQVRIX01BWCArIDFdOwotICAgIGNoYXIgICAgICAgICAgICBzb2NrZXRfbG5rW05BTUVfTUFYICsgMV07Ci0gICAgaW50ICAgICAgICAgICAgIGZpbGVsZW4gPSAwLCByZWFkbGVuID0gMCwgaWZsYWcgPSAwOwotICAgIHN0cnVjdCBkaXJlbnQgICpwcm9jaW5mbywgKnBpZGluZm87Ci0gICAgdW5zaWduZWQgaW50ICAgIHBpZDsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgdGVtcF9pbm9kZTsKKyAgICBpbnQgaXJldDsKKyAgICBtZW1zZXQobm9kZV90b19maW5kLCAwLCBzaXplb2YocHJlZml4X2NieCkpOworICAgIGlmKCEqaGVhZCkKKyAgICAgICByZXR1cm4gLTE7CisgICAgbWVtY3B5KG5vZGVfdG9fZmluZC0+aW42cCwgYWRkcmVzcywgc2l6ZW9mKG5vZGVfdG9fZmluZC0+aW42cCkpOwogCi0gICAgaWYgKCEocHJvY2RpcnMgPSBvcGVuZGlyKFBST0NfUEFUSCkpKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzbm1wZDogY2Fubm90IG9wZW4gL3Byb2NcbiIpOyAgICAgICAKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlyZXQgPSBuZXRfc25tcF9zZWFyY2hfdXBkYXRlX3ByZWZpeF9pbmZvKGhlYWQsIG5vZGVfdG9fZmluZCwgMSk7CisgICAgaWYoaXJldCA8IDApIHsKKyAgICAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jczpwcmVmaXgiLCAiVW5hYmxlIHRvIHNlYXJjaCB0aGUgbGlzdFxuIikpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKCFpcmV0KSB7CisgICAgICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3M6cHJlZml4IiwgIkNvdWxkIG5vdCBmaW5kIHByZWZpeCBpbmZvXG4iKSk7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZQorICAgICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklORF9QUkVGSVhfSU5GTyAqLwogCi0gICAgd2hpbGUgKChwcm9jaW5mbyA9IHJlYWRkaXIocHJvY2RpcnMpKSAhPSBOVUxMKSB7Ci0gICAgICAgIG5hbWUgPSBwcm9jaW5mby0+ZF9uYW1lOwotICAgICAgICBmb3IgKDsgKm5hbWU7IG5hbWUrKykgewotICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KCpuYW1lKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZigqbmFtZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VQREFURV9QUkVGSVhfSU5GTworaW50IG5ldF9zbm1wX3VwZGF0ZV9wcmVmaXhfaW5mbyhwcmVmaXhfY2J4ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2NieCAqbm9kZV90b191cGRhdGUpCit7CisgICAgaW50IGlyZXQ7CisgICAgaXJldCA9IG5ldF9zbm1wX3NlYXJjaF91cGRhdGVfcHJlZml4X2luZm8oaGVhZCwgbm9kZV90b191cGRhdGUsIDApOworICAgIGlmKGlyZXQgPCAwKSB7CisgICAgICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3M6cHJlZml4IiwgIlVuYWJsZSB0byB1cGRhdGUgcHJlZml4IGluZm9cbiIpKTsKKyAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmICghaXJldCkgeworICAgICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzOnByZWZpeCIsICJVbmFibGUgdG8gZmluZCB0aGUgbm9kZSB0byB1cGRhdGVcbiIpKTsKKyAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlCisgICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VUERBVEVfUFJFRklYX0lORk8gKi8KIAotICAgICAgICBtZW1zZXQocGF0aF9uYW1lLCAnXDAnLCBQQVRIX01BWCArIDEpOwotICAgICAgICBmaWxlbGVuID0gc25wcmludGYocGF0aF9uYW1lLCBQQVRIX01BWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0NfUEFUSCAiLyVzLyIgRklMRV9ESVNQLCBwcm9jaW5mby0+ZF9uYW1lKTsKLSAgICAgICAgaWYgKGZpbGVsZW4gPD0gMCB8fCBQQVRIX01BWCA8IGZpbGVsZW4pCi0gICAgICAgICAgICBjb250aW51ZTsKK2ludCBuZXRfc25tcF9zZWFyY2hfdXBkYXRlX3ByZWZpeF9pbmZvKHByZWZpeF9jYnggKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2NieCAqbm9kZV90b191c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnVuY3Rpb25hbGl0eSkKK3sKIAotICAgICAgICBwaWQgPSBzdHJ0b3VsKHByb2NpbmZvLT5kX25hbWUsIE5VTEwsIDApOworICAgLyogV2UgZGVmaW5lIGZ1bmN0aW9uYWxpdHkgYmFzZWQgb24gbmVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAqIDAgLSBOZWVkIHRvIGRvIGEgc2VhcmNoIGFuZCB1cGRhdGUuIFdlIGhhdmUgdG8gcHJvdmlkZSB0aGUgbm9kZV90b191c2Ugc3RydWN0dXJlIGZpbGxlZCBmdWxseSAqCisgICAgKiAxIC0gTmVlZCB0byBkbyBvbmx5IHNlYXJjaC4gUHJvdmlkZSB0aGUgbm9kZV90b191c2Ugd2l0aCBpbjZwIHZhbHVlIGZpbGxlZCAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBpZiAoIShwaWRkaXJzID0gb3BlbmRpcihwYXRoX25hbWUpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHByZWZpeF9jYnggKnRlbXBfbm9kZTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGhlYWQpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gbm9kZV90b191c2UpOwogCi0gICAgICAgIHdoaWxlICgocGlkaW5mbyA9IHJlYWRkaXIocGlkZGlycykpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChmaWxlbGVuICsgc3RybGVuKHBpZGluZm8tPmRfbmFtZSkgPiBQQVRIX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICBpZihmdW5jdGlvbmFsaXR5ID4gMSkKKyAgICAgICByZXR1cm4gLTE7CisgICAgaWYoIW5vZGVfdG9fdXNlKQorICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICAgICAgc3RyY3B5KHBhdGhfbmFtZSArIGZpbGVsZW4sIHBpZGluZm8tPmRfbmFtZSk7CiAKLSAgICAgICAgICAgIG1lbXNldChzb2NrZXRfbG5rLCAnXDAnLCBOQU1FX01BWCArIDEpOwotICAgICAgICAgICAgcmVhZGxlbiA9IHJlYWRsaW5rKHBhdGhfbmFtZSwgc29ja2V0X2xuaywgTkFNRV9NQVgpOwotICAgICAgICAgICAgaWYgKHJlYWRsZW4gPCAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc29ja2V0X2xua1tyZWFkbGVuXSA9ICdcMCc7CisgICAgaWYgKCFmdW5jdGlvbmFsaXR5KSB7CisgICAgICAgaWYgKCEqaGVhZCkgeworICAgICAgICAgICAqaGVhZCA9IG5vZGVfdG9fdXNlOworICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICB9CiAKLSAgICAgICAgICAgIHRlbXBfaW5vZGUgPSBleHRyYWN0X2lub2RlKHNvY2tldF9sbmspOwotICAgICAgICAgICAgaWYgKGlub2RlID09IHRlbXBfaW5vZGUpIHsKLSAgICAgICAgICAgICAgICBpZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgZm9yICh0ZW1wX25vZGUgPSAqaGVhZDsgdGVtcF9ub2RlLT5uZXh0X2luZm8gIT0gTlVMTCA7IHRlbXBfbm9kZSA9IHRlbXBfbm9kZS0+bmV4dF9pbmZvKSB7CisgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAodGVtcF9ub2RlLT5pbjZwLCBub2RlX3RvX3VzZS0+aW42cCkpIHsKKyAgICAgICAgICAgICAgICB0ZW1wX25vZGUtPmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcgPSBub2RlX3RvX3VzZS0+aXBBZGRyZXNzUHJlZml4T25MaW5rRmxhZzsKKyAgICAgICAgICAgICAgICB0ZW1wX25vZGUtPmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnID0gbm9kZV90b191c2UtPmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnOworICAgICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNsb3NlZGlyKHBpZGRpcnMpOwotICAgICAgICBpZiAoaWZsYWcgPT0gMSkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgICAgICB0ZW1wX25vZGUtPm5leHRfaW5mbyA9IG5vZGVfdG9fdXNlOworICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgICBmb3IgKHRlbXBfbm9kZSA9ICpoZWFkOyB0ZW1wX25vZGUgIT0gTlVMTCA7IHRlbXBfbm9kZSA9IHRlbXBfbm9kZS0+bmV4dF9pbmZvKSB7CisgICAgICAgICAgICAgIGlmICgwID09IHN0cmNtcCh0ZW1wX25vZGUtPmluNnAsIG5vZGVfdG9fdXNlLT5pbjZwKSkgeworICAgICAgICAgICAgICAgIC8qbmVlZCB5byBwdXQgc2VtIGhlcmUgYXMgaSByZWFkIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBub2RlX3RvX3VzZS0+aXBBZGRyZXNzUHJlZml4T25MaW5rRmxhZyA9IHRlbXBfbm9kZS0+aXBBZGRyZXNzUHJlZml4T25MaW5rRmxhZzsKKyAgICAgICAgICAgICAgICBub2RlX3RvX3VzZS0+aXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcgPSB0ZW1wX25vZGUtPmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKHByb2NkaXJzKQotICAgICAgICBjbG9zZWRpcihwcm9jZGlycyk7Ci0gICAgcmV0dXJuIHBpZDsKIH0KIAotI2VuZGlmICAvKiAjaWZkZWYgbGludXggKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUxFVEVfUFJFRklYX0lORk8KK2ludCBuZXRfc25tcF9kZWxldGVfcHJlZml4X2luZm8ocHJlZml4X2NieCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZHJlc3MpCit7CisKKyAgICBwcmVmaXhfY2J4ICp0ZW1wX25vZGUsKnByZXZfbm9kZTsKKyAgICBpZighYWRkcmVzcykKKyAgICAgICByZXR1cm4gLTE7CisgICAgaWYoIWhlYWQpCisgICAgICAgcmV0dXJuIC0xOworCisgICAgZm9yICh0ZW1wX25vZGUgPSAqaGVhZCwgcHJldl9ub2RlID0gTlVMTDsgdGVtcF9ub2RlOworICAgICAgICAgcHJldl9ub2RlID0gdGVtcF9ub2RlLCB0ZW1wX25vZGUgPSB0ZW1wX25vZGUtPm5leHRfaW5mbykgeworCisgICAgICAgICBpZiAodGVtcF9ub2RlLT5pbjZwICYmIHN0cmNtcCh0ZW1wX25vZGUtPmluNnAsIGFkZHJlc3MpID09IDApIHsKKyAgICAgICAgICAgIGlmIChwcmV2X25vZGUpCisgICAgICAgICAgICAgICAgcHJldl9ub2RlLT5uZXh0X2luZm8gPSB0ZW1wX25vZGUtPm5leHRfaW5mbzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqaGVhZCA9IHRlbXBfbm9kZS0+bmV4dF9pbmZvOworICAgICAgICAgICAgZnJlZSh0ZW1wX25vZGUpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFTEVURV9QUkVGSVhfSU5GTyAqLworCisjZW5kaWYgLyogSEFWRV9MSU5VWF9SVE5FVExJTktfSCAqLworICAgICAgICAgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmggYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgKaW5kZXggZmJhMWE5OC4uN2Y1OTc4MCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaApAQCAtNCwyOCArNCw0NiBAQAogI2lmbmRlZiBfTUlCR1JPVVBfVVRJTF9GVU5DU19ICiAjZGVmaW5lIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAKLXZvaWQgICAgICAgICAgICBFeGl0KGludCk7Cit0eXBlZGVmIHN0cnVjdCBwcmVmaXhfaW5mbworeworICAgc3RydWN0IHByZWZpeF9pbmZvICpuZXh0X2luZm87CisgICB1bnNpZ25lZCBsb25nIGlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWc7CisgICB1bnNpZ25lZCBsb25nIGlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnOworICAgY2hhciBpbjZwWzQwXTsKK31wcmVmaXhfY2J4OworI2lmbmRlZiBXSU4zMgordHlwZWRlZiBzdHJ1Y3QgCit7CisgcHJlZml4X2NieCAqKmxpc3RfaGVhZDsKK31uZXRzbm1wX3ByZWZpeF9saXN0ZW5faW5mbzsKKyNlbmRpZgogaW50ICAgICAgICAgICAgIHNoZWxsX2NvbW1hbmQoc3RydWN0IGV4dGVuc2libGUgKik7CiBpbnQgICAgICAgICAgICAgZXhlY19jb21tYW5kKHN0cnVjdCBleHRlbnNpYmxlICopOwogc3RydWN0IGV4dGVuc2libGUgKmdldF9leHRlbl9pbnN0YW5jZShzdHJ1Y3QgZXh0ZW5zaWJsZSAqLCBzaXplX3QpOwogaW50ICAgICAgICAgICAgIGdldF9leGVjX291dHB1dChzdHJ1Y3QgZXh0ZW5zaWJsZSAqKTsKLWludCAgICAgICAgICAgICBnZXRfZXhlY19waXBlcyhjaGFyICpjbWQsIGludCAqZmRJbiwgaW50ICpmZE91dCwgaW50ICpwaWQpOworI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKGN5Z3dpbikKK2ludCAgICAgICAgICAgICBnZXRfZXhlY19waXBlcyhjaGFyICpjbWQsIGludCAqZmRJbiwgaW50ICpmZE91dCwgSEFORExFICpwaWQpOworI2Vsc2UKK2ludCAgICAgICAgICAgICBnZXRfZXhlY19waXBlcyhjaGFyICpjbWQsIGludCAqZmRJbiwgaW50ICpmZE91dCwgcGlkX3QgKnBpZCk7CisjZW5kaWYKIFdyaXRlTWV0aG9kICAgICBjbGVhcl9jYWNoZTsKLVJFVFNJR1RZUEUgICAgICByZXN0YXJ0X2RvaXQoaW50KTsKLVdyaXRlTWV0aG9kICAgICByZXN0YXJ0X2hvb2s7CiB2b2lkICAgICAgICAgICAgcHJpbnRfbWliX29pZChvaWQgKiwgc2l6ZV90KTsKIHZvaWQgICAgICAgICAgICBzcHJpbnRfbWliX29pZChjaGFyICosIGNvbnN0IG9pZCAqLCBzaXplX3QpOwotaW50ICAgICAgICAgICAgIGhlYWRlcl9zaW1wbGVfdGFibGUoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgc2l6ZV90ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QsIGludCk7Ci1pbnQgICAgICAgICAgICAgaGVhZGVyX2dlbmVyaWMoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7CiBpbnQgICAgICAgICAgICAgY2hlY2ttaWIoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwgaW50LCBzaXplX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QsIGludCk7CiBjaGFyICAgICAgICAgICAqZmluZF9maWVsZChjaGFyICosIGludCk7CkBAIC0zNCwxNSArNTIsMzUgQEAKIHZvaWQgICAgICAgICAgICB3YWl0X29uX2V4ZWMoc3RydWN0IGV4dGVuc2libGUgKik7CiBjb25zdCBjaGFyICAgICAqbWFrZV90ZW1wZmlsZSh2b2lkKTsKIAotI2lmZGVmIGxpbnV4Ci11bnNpZ25lZCBpbnQgICAgZ2V0X3BpZF9mcm9tX2lub2RlKHVuc2lnbmVkIGxvbmcgbG9uZyk7CitwcmVmaXhfY2J4ICpuZXRfc25tcF9jcmVhdGVfcHJlZml4X2luZm8odW5zaWduZWQgbG9uZyBPbkxpbmtGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgQXV0b25vbW91c0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW42cHRyKTsKKyNpZm5kZWYgV0lOMzIKK2ludCBuZXRfc25tcF9maW5kX3ByZWZpeF9pbmZvKHByZWZpeF9jYnggKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9jYnggKm5vZGVfdG9fZmluZCk7CitpbnQgbmV0X3NubXBfdXBkYXRlX3ByZWZpeF9pbmZvKHByZWZpeF9jYnggKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfY2J4ICpub2RlX3RvX3VwZGF0ZSk7CitpbnQgbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyhwcmVmaXhfY2J4ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9jYnggKm5vZGVfdG9fdXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ1bmN0aW9uYWxpdHkpOworaW50IG5ldF9zbm1wX2RlbGV0ZV9wcmVmaXhfaW5mbyhwcmVmaXhfY2J4ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkcmVzcyk7CiAjZW5kaWYKKyNkZWZpbmUgTklQNihhZGRyKSBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMF0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMV0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMl0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbM10pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNF0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNV0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNl0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbN10pCiAKICNkZWZpbmUgICAgIHNhdG9zaW4oeCkgICAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKHgpKQogI2RlZmluZSAgICAgU09DS0FERFIoeCkgICAgIChzYXRvc2luKHgpLT5zaW5fYWRkci5zX2FkZHIpCi0jaWZuZGVmIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUCi0jZGVmaW5lIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUIDUKLSNlbmRpZgorCisjaW5jbHVkZSAidXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIgogCiB0eXBlZGVmIHZvaWQgICAqbWliX3RhYmxlX3Q7CiB0eXBlZGVmIGludCAgICAgKFJFTE9BRCkgKG1pYl90YWJsZV90KTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0OGZkOAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IENvcHlyaWdodCAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgorCisjaW5jbHVkZSAiRXhpdC5oIgorCit2b2lkCitFeGl0KGludCB2YXIpCit7CisgICAgc25tcF9sb2coTE9HX0VSUiwgIlNlcnZlciBFeGl0aW5nIHdpdGggY29kZSAlZFxuIiwgdmFyKTsKKyAgICBleGl0KHZhcik7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuaCBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZjBjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogIEV4aXQuaDogIHZlcmJvc2UgdGVybWluYWlvbiByb3V0aW5lCisgKi8KKyNpZm5kZWYgX01JQkdST1VQX1VUSUxfRlVOQ1NfRVhJVF9ICisjZGVmaW5lIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0VYSVRfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3ZvaWQgICAgICAgICAgICBFeGl0KGludCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1VUSUxfRlVOQ1NfRVhJVF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4YmFjZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaApAQCAtMCwwICsxLDEyIEBACisvKgorICogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oOiAgdXRpbGl0aXkgZnVuY3Rpb25zIGZvciBleHRlbnNpYmxlCisgKiBncm91cHMuCisgKi8KKyNpZm5kZWYgX01JQkdST1VQX1VUSUxfRlVOQ1NfTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVRfSAorI2RlZmluZSBfTUlCR1JPVVBfVVRJTF9GVU5DU19NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVF9ICisKKyNpZm5kZWYgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKKyNkZWZpbmUgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQgNQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTUlCR1JPVVBfVVRJTF9GVU5DU19NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTE1N2FlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYwpAQCAtMCwwICsxLDE4NiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSAiZ2V0X3BpZF9mcm9tX2lub2RlLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworIyBkZWZpbmUgUFJPQ19QQVRIICAgICAgICAgICIvcHJvYyIKKyMgZGVmaW5lIFNPQ0tFVF9UWVBFXzEgICAgICAic29ja2V0OlsiCisjIGRlZmluZSBTT0NLRVRfVFlQRV8yICAgICAgIlswMDAwXToiCisKKy8qIERlZmluaXRpb24gb2YgYSBzaW1wbGUgb3BlbiBhZGRyZXNzaW5nIGhhc2ggdGFibGUuKi8KKy8qIFdoZW4gaW5vZGUgPT0gMCB0aGVuIHRoZSBlbnRyeSBpcyBlbXB0eS4qLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGlubzY0X3QgaW5vZGU7CisgICAgcGlkX3QgICBwaWQ7Cit9IGlub2RlX3BpZF9lbnRfdDsKKworI2RlZmluZSBJTk9ERV9QSURfVEFCTEVfTUFYX0NPTExJU0lPTlMgMTAwMAorI2RlZmluZSBJTk9ERV9QSURfVEFCTEVfTEVOR1RIIDIwMDAwCisjZGVmaW5lIElOT0RFX1BJRF9UQUJMRV9TSVpFIChJTk9ERV9QSURfVEFCTEVfTEVOR1RIICogc2l6ZW9mIChpbm9kZV9waWRfZW50X3QpKQorc3RhdGljIGlub2RlX3BpZF9lbnRfdCAgaW5vZGVfcGlkX3RhYmxlW0lOT0RFX1BJRF9UQUJMRV9MRU5HVEhdOworCitzdGF0aWMgdWludDMyX3QKK19oYXNoKHVpbnQ2NF90IGtleSkKK3sKKyAgICBrZXkgPSAofmtleSkgKyAoa2V5IDw8IDE4KTsKKyAgICBrZXkgPSBrZXkgXiAoa2V5ID4+IDMxKTsKKyAgICBrZXkgPSBrZXkgKiAyMTsKKyAgICBrZXkgPSBrZXkgXiAoa2V5ID4+IDExKTsKKyAgICBrZXkgPSBrZXkgKyAoa2V5IDw8IDYpOworICAgIGtleSA9IGtleSBeIChrZXkgPj4gMjIpOworICAgIHJldHVybiBrZXk7Cit9CisKK3N0YXRpYyB2b2lkCitfY2xlYXIodm9pZCkKK3sKKyAgICAvKiBDbGVhciB0aGUgaW5vZGUvcGlkIGhhc2ggdGFibGUuKi8KKyAgICBtZW1zZXQoaW5vZGVfcGlkX3RhYmxlLCAwLCBJTk9ERV9QSURfVEFCTEVfU0laRSk7Cit9CisKK3N0YXRpYyB2b2lkCitfc2V0KGlubzY0X3QgaW5vZGUsIHBpZF90IHBpZCkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgaGFzaCA9IF9oYXNoKGlub2RlKTsKKyAgICB1aW50MzJfdCAgICAgICAgaTsKKyAgICBpbm9kZV9waWRfZW50X3QgKmVudHJ5OworCisgICAgLyogV2Ugd2lsbCB0cnkgZm9yIGEgbWF4aW11bSBudW1iZXIgb2YgY29sbGlzaW9ucy4qLworICAgIGZvciAoaSA9IDA7IGkgPCBJTk9ERV9QSURfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGkrKykgeworICAgICAgICBlbnRyeSA9ICZpbm9kZV9waWRfdGFibGVbKGhhc2ggKyBpKSAlIElOT0RFX1BJRF9UQUJMRV9MRU5HVEhdOworCisgICAgICAgIC8qIENoZWNrIGlmIHRoaXMgZW50cnkgaXMgZW1wdHksIG9yIHRoZSBhY3R1YWwgaW5vZGUgd2Ugd2VyZSBsb29raW5nIGZvci4qLworICAgICAgICAvKiBUaGUgc2Vjb25kIHBhcnQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGl0IGlzIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy4qLworICAgICAgICBpZiAoZW50cnktPmlub2RlID09IDAgfHwgZW50cnktPmlub2RlID09IGlub2RlKSB7CisgICAgICAgICAgICBlbnRyeS0+aW5vZGUgPSBpbm9kZTsKKyAgICAgICAgICAgIGVudHJ5LT5waWQgPSBwaWQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXZSB3aWxsIHNpbGVudGx5IGZhaWwgdG8gaW5zZXJ0IHRoZSBpbm9kZSBpZiB3ZSBnZXQgdG9vIG1hbnkgY29sbGlzaW9ucy4qLworICAgIC8qIHRoZSBfZ2V0IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgemVybyBwaWQuKi8KK30KKworc3RhdGljIHBpZF90IF9nZXQoaW5vNjRfdCBpbm9kZSkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgaGFzaCA9IF9oYXNoKGlub2RlKTsKKyAgICB1aW50MzJfdCAgICAgICAgaTsKKyAgICBpbm9kZV9waWRfZW50X3QgKmVudHJ5OworCisgICAgLyogV2Ugd2lsbCB0cnkgZm9yIGEgbWF4aW11bSBudW1iZXIgb2YgY29sbGlzaW9ucy4qLworICAgIGZvciAoaSA9IDA7IGkgPCBJTk9ERV9QSURfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGkrKykgeworICAgICAgICBlbnRyeSA9ICZpbm9kZV9waWRfdGFibGVbKGhhc2ggKyBpKSAlIElOT0RFX1BJRF9UQUJMRV9MRU5HVEhdOworCisgICAgICAgIC8qIENoZWNrIGlmIHRoaXMgZW50cnkgaXMgZW1wdHksIG9yIHRoZSBhY3R1YWwgaW5vZGUgd2Ugd2VyZSBsb29raW5nIGZvci4qLworICAgICAgICAvKiBJZiB0aGUgZW50cnkgaXMgZW1wdHkgaXQgbWVhbnMgdGhlIGlub2RlIGlzIG5vdCBpbiB0aGUgdGFibGUgYW5kIHdlKi8KKyAgICAgICAgLyogc2hvdWxkIHJldHVybiAwLCB0aGUgZW50cnkgd2lsbCBhbHNvIGhhdmUgYSB6ZXJvIHBpZC4qLworICAgICAgICBpZiAoZW50cnktPmlub2RlID09IDAgfHwgZW50cnktPmlub2RlID09IGlub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gZW50cnktPnBpZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFdlIGNvdWxkIG5vdCBmaW5kIHRoZSBwaWQuKi8KKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGVfaW5pdCh2b2lkKQoreworICAgIERJUiAgICAgICAgICAgICpwcm9jZGlycyA9IE5VTEwsICpwaWRkaXJzID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAgcGF0aF9uYW1lW1BBVEhfTUFYICsgMV07CisgICAgY2hhciAgICAgICAgICAgIHNvY2tldF9sbmtbTkFNRV9NQVggKyAxXTsKKyAgICBpbnQgICAgICAgICAgICAgZmlsZWxlbiA9IDAsIHJlYWRsZW4gPSAwOworICAgIHN0cnVjdCBkaXJlbnQgICpwcm9jaW5mbywgKnBpZGluZm87CisgICAgcGlkX3QgICAgICAgICAgIHBpZCA9IDA7CisgICAgaW5vNjRfdCAgICAgICAgIHRlbXBfaW5vZGU7CisKKyAgICBfY2xlYXIoKTsKKworICAgIC8qIHdhbGsgb3ZlciBhbGwgZGlyZWN0b3JpZXMgaW4gL3Byb2MqLworICAgIGlmICghKHByb2NkaXJzID0gb3BlbmRpcihQUk9DX1BBVEgpKSkgeworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJzbm1wZDogY2Fubm90IG9wZW4gL3Byb2NcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlICgocHJvY2luZm8gPSByZWFkZGlyKHByb2NkaXJzKSkgIT0gTlVMTCkgeworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gcHJvY2luZm8tPmRfbmFtZTsKKworICAgICAgICAvKiBBIHBpZCBkaXJlY3Rvcnkgb25seSBjb250YWlucyBkaWdpdHMsIGNoZWNrIGZvciB0aG9zZS4qLworICAgICAgICBmb3IgKDsgKm5hbWU7IG5hbWUrKykgeworICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KCpuYW1lKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZigqbmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIENyZWF0ZSB0aGUgL3Byb2MvPHBpZD4vZmQvIHBhdGggbmFtZS4qLworICAgICAgICBtZW1zZXQocGF0aF9uYW1lLCAnXDAnLCBQQVRIX01BWCArIDEpOworICAgICAgICBmaWxlbGVuID0gc25wcmludGYocGF0aF9uYW1lLCBQQVRIX01BWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0NfUEFUSCAiLyVzL2ZkLyIsIHByb2NpbmZvLT5kX25hbWUpOworICAgICAgICBpZiAoZmlsZWxlbiA8PSAwIHx8IFBBVEhfTUFYIDwgZmlsZWxlbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIHdhbGsgb3ZlciBhbGwgdGhlIGZpbGVzIGluIC9wcm9jLzxwaWQ+L2ZkLyovCisgICAgICAgIGlmICghKHBpZGRpcnMgPSBvcGVuZGlyKHBhdGhfbmFtZSkpKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgICB3aGlsZSAoKHBpZGluZm8gPSByZWFkZGlyKHBpZGRpcnMpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoZmlsZWxlbiArIHN0cmxlbihwaWRpbmZvLT5kX25hbWUpID4gUEFUSF9NQVgpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHN0cmNweShwYXRoX25hbWUgKyBmaWxlbGVuLCBwaWRpbmZvLT5kX25hbWUpOworCisgICAgICAgICAgICAvKiBUaGUgZmlsZSBkaXNjcmlwdG9yIGlzIGEgc3ltYm9saWMgbGluayB0byBhIHNvY2tldCBvciBhIGZpbGUuKi8KKyAgICAgICAgICAgIC8qIFRodXMgcmVhZCB0aGUgc3ltYm9saWMgbGluay4qLworICAgICAgICAgICAgbWVtc2V0KHNvY2tldF9sbmssICdcMCcsIE5BTUVfTUFYICsgMSk7CisgICAgICAgICAgICByZWFkbGVuID0gcmVhZGxpbmsocGF0aF9uYW1lLCBzb2NrZXRfbG5rLCBOQU1FX01BWCk7CisgICAgICAgICAgICBpZiAocmVhZGxlbiA8IDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHNvY2tldF9sbmtbcmVhZGxlbl0gPSAnXDAnOworCisgICAgICAgICAgICAvKiBDaGVjayBpZiB0byBzZWUgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBhIHNvY2tldCBieSBjb21wYXJpbmcqLworICAgICAgICAgICAgLyogdGhlIHN0YXJ0IHRvIGEgc3RyaW5nLiBBbHNvIGV4dHJhY3QgdGhlIGlub2RlIG51bWJlciBmcm9tIHRoaXMqLworICAgICAgICAgICAgLyogc3ltYm9saWMgbGluay4qLworICAgICAgICAgICAgaWYgKCFzdHJuY21wKHNvY2tldF9sbmssIFNPQ0tFVF9UWVBFXzEsIDgpKSB7CisgICAgICAgICAgICAgICAgdGVtcF9pbm9kZSA9IHN0cnRvdWxsKHNvY2tldF9sbmsgKyA4LCBOVUxMLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAoc29ja2V0X2xuaywgU09DS0VUX1RZUEVfMiwgNykpIHsKKyAgICAgICAgICAgICAgICB0ZW1wX2lub2RlID0gc3RydG91bGwoc29ja2V0X2xuayArIDcsIE5VTEwsIDApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZW1wX2lub2RlID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQWRkIHRoZSBpbm9kZS9waWQgY29tYmluYXRpb24gdG8gb3VyIGhhc2ggdGFibGUuKi8KKyAgICAgICAgICAgIGlmICh0ZW1wX2lub2RlICE9IDApIHsKKyAgICAgICAgICAgICAgICBwaWQgPSBzdHJ0b3VsKHByb2NpbmZvLT5kX25hbWUsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIF9zZXQodGVtcF9pbm9kZSwgcGlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbG9zZWRpcihwaWRkaXJzKTsKKyAgICB9CisgICAgaWYgKHByb2NkaXJzKQorICAgICAgICBjbG9zZWRpcihwcm9jZGlycyk7Cit9CisKK3BpZF90CituZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZShpbm82NF90IGlub2RlKQoreworICAgIHJldHVybiBfZ2V0KGlub2RlKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaCBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4ODdhNwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIHV0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmg6ICB1dGlsaXRpeSBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgcGlkCisgKiB0aGF0IGNvbnRyb2xzIGEgZ2l2ZW4gaW5vZGUgb24gbGludXguCisgKi8KKyNpZm5kZWYgTkVUU05NUF9NSUJHUk9VUF9VVElMX0ZVTkNTX0dFVF9QSURfRlJPTV9JTk9ERV9ICisjZGVmaW5lIE5FVFNOTVBfTUlCR1JPVVBfVVRJTF9GVU5DU19HRVRfUElEX0ZST01fSU5PREVfSAorCisjaWZuZGVmIGxpbnV4Citjb25maWdfZXJyb3IoZ2V0X3BpZF9mcm9tX2lub2RlIGlzIG9ubHkgc3VwcG9yZWQgb24gbGludXgpCisjZW5kaWYKKworI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDEKKworI2lmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbHNlCisjIGRlZmluZSBkaXJlbnQgZGlyZWN0CisjIGlmIEhBVkVfU1lTX05ESVJfSAorIyAgaW5jbHVkZSA8c3lzL25kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9TWVNfRElSX0gKKyMgIGluY2x1ZGUgPHN5cy9kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9ORElSX0gKKyMgIGluY2x1ZGUgPG5kaXIuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3ZvaWQgbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGVfaW5pdCh2b2lkKTsKK3BpZF90IG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlKGlubzY0X3QpOworCisjZW5kaWYgLyogTkVUU05NUF9NSUJHUk9VUF9VVElMX0ZVTkNTX0dFVF9QSURfRlJPTV9JTk9ERV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmMgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1NGJlOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuYwpAQCAtMCwwICsxLDY0IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAiaGVhZGVyX2dlbmVyaWMuaCIKKworLyoKKyAqIGhlYWRlcl9nZW5lcmljKC4uLgorICogQXJndW1lbnRzOgorICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKKyAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAorICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncworICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCisgKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAorICogd3JpdGVfbWV0aG9kCisgKgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiBnZW5lcmljX2hlYWRlcgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgkgICp2cAkgICAoSSkgICAgIFBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZS4KKyAqCSAgKm5hbWUJICAgKEkvTykgICBJbnB1dCBuYW1lIHJlcXVlc3RlZCwgb3V0cHV0IG5hbWUgZm91bmQuCisgKgkgICpsZW5ndGggIChJL08pICAgTGVuZ3RoIG9mIGlucHV0IGFuZCBvdXRwdXQgb2lkJ3MuCisgKgkgICBleGFjdCAgIChJKSAgICAgVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkLgorICoJICAqdmFyX2xlbiAoTykgICAgIExlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkLgorICoJKCoqd3JpdGVfbWV0aG9kKSAgIEhvb2sgdG8gbmFtZSBhIHdyaXRlIG1ldGhvZCAoVU5VU0VEKS4KKyAqCisgKiBSZXR1cm5zOgorICoJTUFUQ0hfU1VDQ0VFREVECUlmIHZwLT5uYW1lIG1hdGNoZXMgbmFtZSAoYWNjb3VudGluZyBmb3IgZXhhY3QgYml0KS4KKyAqCU1BVENIX0ZBSUxFRAlPdGhlcndpc2UsCisgKgorICoKKyAqIENoZWNrIHdoZXRoZXIgdmFyaWFibGUgKHZwKSBtYXRjaGVzIG5hbWUuCisgKi8KK2ludAoraGVhZGVyX2dlbmVyaWMoc3RydWN0IHZhcmlhYmxlICp2cCwKKyAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKK3sKKyAgICBvaWQgICAgICAgICAgICAgbmV3bmFtZVtNQVhfT0lEX0xFTl07CisgICAgaW50ICAgICAgICAgICAgIHJlc3VsdDsKKworICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzIiwgImhlYWRlcl9nZW5lcmljOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJ1dGlsX2Z1bmNzIiwgbmFtZSwgKmxlbmd0aCkpOworICAgIERFQlVHTVNHKCgidXRpbF9mdW5jcyIsICIgZXhhY3Q9JWRcbiIsIGV4YWN0KSk7CisKKyAgICBtZW1jcHkoKGNoYXIgKikgbmV3bmFtZSwgKGNoYXIgKikgdnAtPm5hbWUsCisgICAgICAgICAgIChpbnQpIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOworICAgIG5ld25hbWVbdnAtPm5hbWVsZW5dID0gMDsKKyAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7CisgICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3MiLCAiICByZXN1bHQ6ICVkXG4iLCByZXN1bHQpKTsKKyAgICBpZiAoKGV4YWN0ICYmIChyZXN1bHQgIT0gMCkpIHx8ICghZXhhY3QgJiYgKHJlc3VsdCA+PSAwKSkpCisgICAgICAgIHJldHVybiAoTUFUQ0hfRkFJTEVEKTsKKyAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKKyAgICAgICAgICAgKChpbnQpIHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CisgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CisgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KKyAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2MTA0MAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaDogIHV0aWxpdGl5IGZ1bmN0aW9ucyBmb3IgZXh0ZW5zaWJsZSBncm91cHMuCisgKi8KKyNpZm5kZWYgX01JQkdST1VQX1VUSUxfRlVOQ1NfSEVBREVSX0dFTkVSSUNfSAorI2RlZmluZSBfTUlCR1JPVVBfVVRJTF9GVU5DU19IRUFERVJfR0VORVJJQ19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworaW50IGhlYWRlcl9nZW5lcmljKHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosIGludCwgc2l6ZV90ICosCisgICAgICAgICAgICAgICAgICAgV3JpdGVNZXRob2QgKiopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX01JQkdST1VQX1VUSUxfRlVOQ1NfSEVBREVSX0dFTkVSSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmMgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWZlMTYwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmMKQEAgLTAsMCArMSwxMTAgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJoZWFkZXJfc2ltcGxlX3RhYmxlLmgiCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIGhlYWRlcl9zaW1wbGVfdGFibGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJICAqdnAJCSBWYXJpYWJsZSBkYXRhLgorICoJICAqbmFtZQkJIEZ1bGx5IGluc3RhbnRpYXRlZCBPSUQgbmFtZS4KKyAqCSAgKmxlbmd0aAkgTGVuZ3RoIG9mIG5hbWUuCisgKgkgICBleGFjdAkgVFJVRSBpZiBhbiBleGFjdCBtYXRjaCBpcyBkZXNpcmVkLgorICoJICAqdmFyX2xlbgkgSG9vayBmb3Igc2l6ZSBvZiByZXR1cm5lZCBkYXRhIHR5cGUuCisgKgkoKip3cml0ZV9tZXRob2QpIEhvb2sgZm9yIHdyaXRlIG1ldGhvZCAoVU5VU0VEKS4KKyAqCSAgIG1heAorICoKKyAqIFJldHVybnM6CisgKgkwCUlmIG5hbWUgbWF0Y2hlcyB2cC0+bmFtZSAoYWNjb3VudGluZyBmb3IgJ2V4YWN0JykgYW5kIGlzCisgKgkJCW5vdCBncmVhdGVyIGluIGxlbmd0aCB0aGFuICdtYXgnLgorICoJMQlPdGhlcndpc2UuCisgKgorICoKKyAqIENvbXBhcmUgJ25hbWUnIHRvIHZwLT5uYW1lIGZvciB0aGUgYmVzdCBtYXRjaCBvciBhbiBleGFjdCBtYXRjaCAoaWYKKyAqCXJlcXVlc3RlZCkuICBBbHNvIGNoZWNrIHRoYXQgJ25hbWUnIGlzIG5vdCBsb25nZXIgdGhhbiAnbWF4JyBpZgorICoJbWF4IGlzIGdyZWF0ZXItdGhhbi9lcXVhbCAwLgorICogU3RvcmUgYSBzdWNjZXNzZnVsIG1hdGNoIGluICduYW1lJywgYW5kIGluY3JlbWVudCB0aGUgT0lEIGluc3RhbmNlIGlmCisgKgl0aGUgbWF0Y2ggd2FzIG5vdCBleGFjdC4KKyAqCisgKiAnbmFtZScgYW5kICdsZW5ndGgnIGFyZSB1bmRlZmluZWQgdXBvbiBmYWlsdXJlLgorICoKKyAqLworaW50CitoZWFkZXJfc2ltcGxlX3RhYmxlKHN0cnVjdCB2YXJpYWJsZSAqdnAsIG9pZCAqIG5hbWUsIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLAorICAgICAgICAgICAgICAgICAgICBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QsIGludCBtYXgpCit7CisgICAgaW50ICAgICAgICAgICAgIGksIHJ0ZXN0OyAgIC8qIFNldCB0bzogICAgICAtMSAgICAgIElmIG5hbWUgPCB2cC0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgIDEgICAgICAgSWYgbmFtZSA+IHZwLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgMCAgICAgICBPdGhlcndpc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKKworICAgIGZvciAoaSA9IDAsIHJ0ZXN0ID0gMDsKKyAgICAgICAgIGkgPCAoaW50KSB2cC0+bmFtZWxlbiAmJiBpIDwgKGludCkgKCpsZW5ndGgpICYmICFydGVzdDsgaSsrKSB7CisgICAgICAgIGlmIChuYW1lW2ldICE9IHZwLT5uYW1lW2ldKSB7CisgICAgICAgICAgICBpZiAobmFtZVtpXSA8IHZwLT5uYW1lW2ldKQorICAgICAgICAgICAgICAgIHJ0ZXN0ID0gLTE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcnRlc3QgPSAxOworICAgICAgICB9CisgICAgfQorICAgIGlmIChydGVzdCA+IDAgfHwKKyAgICAgICAgKGV4YWN0ID09IDEKKyAgICAgICAgICYmIChydGVzdCB8fCAoaW50KSAqbGVuZ3RoICE9IChpbnQpICh2cC0+bmFtZWxlbiArIDEpKSkpIHsKKyAgICAgICAgaWYgKHZhcl9sZW4pCisgICAgICAgICAgICAqdmFyX2xlbiA9IDA7CisgICAgICAgIHJldHVybiBNQVRDSF9GQUlMRUQ7CisgICAgfQorCisgICAgbWVtc2V0KG5ld25hbWUsIDAsIHNpemVvZihuZXduYW1lKSk7CisKKyAgICBpZiAoKChpbnQpICpsZW5ndGgpIDw9IChpbnQpIHZwLT5uYW1lbGVuIHx8IHJ0ZXN0ID09IC0xKSB7CisgICAgICAgIG1lbW1vdmUobmV3bmFtZSwgdnAtPm5hbWUsIChpbnQpIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBuZXduYW1lW3ZwLT5uYW1lbGVuXSA9IDE7CisgICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisgICAgfSBlbHNlIGlmICgoKGludCkgKmxlbmd0aCkgPiAoaW50KSB2cC0+bmFtZWxlbiArIDEpIHsgICAgICAgLyogZXhhY3QgY2FzZSBjaGVja2VkIGVhcmxpZXIgKi8KKyAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKyAgICAgICAgbWVtbW92ZShuZXduYW1lLCBuYW1lLCAoKmxlbmd0aCkgKiBzaXplb2Yob2lkKSk7CisgICAgICAgIGlmIChuYW1lWypsZW5ndGggLSAxXSA8IE1BWF9TVUJJRCkgeworICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXSArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2FyZWZ1bCBub3QgdG8gb3ZlcmZsb3cuLi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisgICAgICAgIG1lbW1vdmUobmV3bmFtZSwgbmFtZSwgKCpsZW5ndGgpICogc2l6ZW9mKG9pZCkpOworICAgICAgICBpZiAoIWV4YWN0KSB7CisgICAgICAgICAgICBpZiAobmFtZVsqbGVuZ3RoIC0gMV0gPCBNQVhfU1VCSUQpIHsKKyAgICAgICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdICsgMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBDYXJlZnVsIG5vdCB0byBvdmVyZmxvdy4uLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdOworICAgICAgICB9CisgICAgfQorICAgIGlmICgobWF4ID49IDAgJiYgKChpbnQpbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPiBtYXgpKSB8fAorICAgICAgICAgICAgICAgKCAwID09IG5ld25hbWVbKmxlbmd0aCAtIDFdICkpIHsKKyAgICAgICAgaWYgKHZhcl9sZW4pCisgICAgICAgICAgICAqdmFyX2xlbiA9IDA7CisgICAgICAgIHJldHVybiBNQVRDSF9GQUlMRUQ7CisgICAgfQorCisgICAgbWVtbW92ZShuYW1lLCBuZXduYW1lLCAoKmxlbmd0aCkgKiBzaXplb2Yob2lkKSk7CisgICAgaWYgKHdyaXRlX21ldGhvZCkKKyAgICAgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKKyAgICBpZiAodmFyX2xlbikKKyAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgcmV0dXJuIChNQVRDSF9TVUNDRUVERUQpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTk1ZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oOiAgdXRpbGl0aXkgZnVuY3Rpb25zIGZvciBleHRlbnNpYmxlCisgKiBncm91cHMuCisgKi8KKyNpZm5kZWYgX01JQkdST1VQX1VUSUxfRlVOQ1NfSEVBREVSX1NJTVBMRV9UQUJMRV9ICisjZGVmaW5lIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0hFQURFUl9TSU1QTEVfVEFCTEVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2ludCBoZWFkZXJfc2ltcGxlX3RhYmxlKHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosIGludCwgc2l6ZV90ICosCisgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZU1ldGhvZCAqKiwgaW50KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0hFQURFUl9TSU1QTEVfVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmMgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2FkNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIHV0aWxfZnVuY3MuYworICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCBDb3B5cmlnaHQgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgSEFWRV9SQUlTRQorI2RlZmluZSBhbGFybSByYWlzZQorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CisKKyNpZmRlZiBVU0lOR19VQ0RfU05NUF9FUlJPUk1JQl9NT0RVTEUKKyNpbmNsdWRlICJ1Y2Qtc25tcC9lcnJvcm1pYi5oIgorI2Vsc2UKKyNkZWZpbmUgc2V0UGVycm9yc3RhdHVzKHgpIHNubXBfbG9nX3BlcnJvcih4KQorI2VuZGlmCisKK2NoYXIgKiphcmd2cmVzdGFydHAsICphcmd2cmVzdGFydG5hbWUsICphcmd2cmVzdGFydDsKKworUkVUU0lHVFlQRQorcmVzdGFydF9kb2l0KGludCBhKQoreworICAgIGNoYXIgKiBuYW1lID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKyAgICBzbm1wX3NodXRkb3duKG5hbWUpOworCisgICAgLyogIFRoaXMgc2lnbmFsIGhhbmRsZXIgbWF5IHJ1biB3aXRoIFNJR0FMQVJNIGJsb2NrZWQuCisgICAgICogIFNpbmNlIHRoZSBzaWduYWwgbWFzayBpcyBwcmVzZXJ2ZWQgYWNjcm9zcyBleGVjdigpLCB3ZSBtdXN0CisgICAgICogIG1ha2Ugc3VyZSB0aGF0IFNJR0FMQVJNIGlzIHVuYmxvY2tlZCBwcmlvciBvZiBleGVjdidpbmcuCisgICAgICogIE90aGVyd2lzZSBTSUdBTEFSTSB3aWxsIGJlIGlnbm9yZWQgaW4gdGhlIG5leHQgaW5jYXJuYXRpb24KKyAgICAgKiAgb2Ygc25tcGQsIGJlY2F1c2UgdGhlIHNpZ25hbCBpcyBibG9ja2VkLiBBbmQgdGh1cywgdGhlCisgICAgICogIHJlc3RhcnQgZG9lc24ndCB3b3JrIGFueW1vcmUuCisgICAgICoKKyAgICAgKiAgQSBxdW90ZSBmcm9tIHRoZSBzaWdwcm9jbWFzaygpIG1hbiBwYWdlOgorICAgICAqICBUaGUgdXNlIG9mIHNpZ3Byb2NtYXNrKCkgaXMgdW5zcGVjaWZpZWQgaW4gYSBtdWx0aXRocmVhZGVkIHByb2Nlc3M7IHNlZQorICAgICAqICBwdGhyZWFkX3NpZ21hc2soMykuCisgICAgICovCisjaWYgSEFWRV9TSUdQUk9DTUFTSworICAgIHsKKyAgICAgICAgc2lnc2V0X3QgZW1wdHlfc2V0OworCisgICAgICAgIHNpZ2VtcHR5c2V0KCZlbXB0eV9zZXQpOworICAgICAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmVtcHR5X3NldCwgTlVMTCk7CisgICAgfQorI2VsaWYgSEFWRV9TSUdCTE9DSworICAgIHNpZ3NldG1hc2soMCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogZG8gdGhlIGV4ZWMKKyAgICAgKi8KKyNpZiBIQVZFX0VYRUNWCisgICAgZXhlY3YoYXJndnJlc3RhcnRuYW1lLCBhcmd2cmVzdGFydHApOworICAgIHNldFBlcnJvcnN0YXR1cyhhcmd2cmVzdGFydG5hbWUpOworI2VuZGlmCit9CisKK2ludAorcmVzdGFydF9ob29rKGludCBhY3Rpb24sCisgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKKyAgICAgICAgICAgICB1X2NoYXIgdmFyX3ZhbF90eXBlLAorICAgICAgICAgICAgIHNpemVfdCB2YXJfdmFsX2xlbiwKKyAgICAgICAgICAgICB1X2NoYXIgKiBzdGF0UCwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQoreworCisgICAgbG9uZyAgICAgICAgICAgIHRtcCA9IDA7CisKKyAgICBpZiAodmFyX3ZhbF90eXBlICE9IEFTTl9JTlRFR0VSKSB7CisgICAgICAgIHNubXBfbG9nKExPR19OT1RJQ0UsICJXcm9uZyB0eXBlICE9IGludFxuIik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CisgICAgfQorICAgIHRtcCA9ICooKGxvbmcgKikgdmFyX3ZhbCk7CisgICAgaWYgKHRtcCA9PSAxICYmIGFjdGlvbiA9PSBDT01NSVQpIHsKKyNpZmRlZiBTSUdBTFJNCisgICAgICAgIHNpZ25hbChTSUdBTFJNLCByZXN0YXJ0X2RvaXQpOworI2VuZGlmCisgICAgICAgIGFsYXJtKE5FVFNOTVBfUkVTVEFSVFNMRUVQKTsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuaCBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzYwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9NSUJHUk9VUF9VVElMX0ZVTkNTX1JFU1RBUlRfSAorI2RlZmluZSBfTUlCR1JPVVBfVVRJTF9GVU5DU19SRVNUQVJUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitSRVRTSUdUWVBFICAgICAgcmVzdGFydF9kb2l0KGludCk7CitXcml0ZU1ldGhvZCAgICAgcmVzdGFydF9ob29rOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX01JQkdST1VQX1VUSUxfRlVOQ1NfUkVTVEFSVF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYwppbmRleCAyMWJmNjgyLi42OGYzNjU0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMKQEAgLTM1LDE5ICszNSwyMiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8dWNkLXNubXAvZXJyb3JtaWIuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJleGVjdXRlLmgiCisjaW5jbHVkZSAic3RydWN0LmgiCiAKICNkZWZpbmUgc2V0UGVycm9yc3RhdHVzKHgpIHNubXBfbG9nX3BlcnJvcih4KQogCisjaWZkZWYgX01TQ19WRVIKKyNkZWZpbmUgcG9wZW4gIF9wb3BlbgorI2RlZmluZSBwY2xvc2UgX3BjbG9zZQorI2VuZGlmCisKKwogaW50CiBydW5fc2hlbGxfY29tbWFuZCggY2hhciAqY29tbWFuZCwgY2hhciAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0cHV0LCAgaW50ICpvdXRfbGVuKQkvKiBPciByZWFsbG9jIHN0eWxlID8gKi8KIHsKICNpZiBIQVZFX1NZU1RFTQotICAgIGNvbnN0IGNoYXIgKmlmbmFtZTsgICAgLyogRmlsZW5hbWUgZm9yIGlucHV0ICByZWRpcmVjdGlvbiAqLwotICAgIGNvbnN0IGNoYXIgKm9mbmFtZTsgICAgLyogRmlsZW5hbWUgZm9yIG91dHB1dCByZWRpcmVjdGlvbiAqLwotICAgIGNoYXIgICAgICAgIHNoZWxsbGluZVtTVFJNQVhdOyAgIC8qIFRoZSBmdWxsIGNvbW1hbmQgdG8gcnVuICovCiAgICAgaW50ICAgICAgICAgcmVzdWx0OyAgICAvKiBhbmQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY29tbWFuZCAqLwogCiAgICAgaWYgKCFjb21tYW5kKQpAQCAtNTYsMjUgKzU5LDMxIEBACiAgICAgREVCVUdNU0dUTCgoInJ1bl9zaGVsbF9jb21tYW5kIiwgInJ1bm5pbmcgJXNcbiIsIGNvbW1hbmQpKTsKICAgICBERUJVR01TR1RMKCgicnVuOnNoZWxsIiwgInJ1bm5pbmcgJyVzJ1xuIiwgY29tbWFuZCkpOwogCisgICAgcmVzdWx0ID0gLTE7CisKICAgICAvKgotICAgICAqIFNldCB1cCB0aGUgY29tbWFuZCB0byBydW4uLi4uCisgICAgICogU2V0IHVwIHRoZSBjb21tYW5kIGFuZCBydW4gaXQuCiAgICAgICovCiAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgIEZJTEUgICAgICAgKmZpbGU7CiAKLSAgICAgICAgaWZuYW1lID0gbmV0c25tcF9ta3RlbXAoKTsKLSAgICAgICAgaWYoTlVMTCA9PSBpZm5hbWUpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGZpbGUgPSBmb3BlbihpZm5hbWUsICJ3Iik7Ci0gICAgICAgIGlmKE5VTEwgPT0gZmlsZSkgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGRuJ3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSAlc1xuIiwgaWZuYW1lKTsKLSAgICAgICAgICAgIHVubGluayhpZm5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0JZnByaW50ZihmaWxlLCAiJXMiLCBpbnB1dCk7Ci0gICAgICAgIGZjbG9zZSggZmlsZSApOwotCiAgICAgICAgIGlmIChvdXRwdXQpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlmbmFtZTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9mbmFtZTsgICAgLyogRmlsZW5hbWUgZm9yIG91dHB1dCByZWRpcmVjdGlvbiAqLworICAgICAgICAgICAgY2hhciAgICAgICAgc2hlbGxsaW5lW1NUUk1BWF07ICAgLyogVGhlIGZ1bGwgY29tbWFuZCB0byBydW4gKi8KKworICAgICAgICAgICAgaWZuYW1lID0gbmV0c25tcF9ta3RlbXAoKTsKKyAgICAgICAgICAgIGlmKE5VTEwgPT0gaWZuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGZpbGUgPSBmb3BlbihpZm5hbWUsICJ3Iik7CisgICAgICAgICAgICBpZihOVUxMID09IGZpbGUpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZG4ndCBvcGVuIHRlbXBvcmFyeSBmaWxlICVzXG4iLCBpZm5hbWUpOworICAgICAgICAgICAgICAgIHVubGluayhpZm5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZwcmludGYoZmlsZSwgIiVzIiwgaW5wdXQpOworICAgICAgICAgICAgZmNsb3NlKCBmaWxlICk7CisKICAgICAgICAgICAgIG9mbmFtZSA9IG5ldHNubXBfbWt0ZW1wKCk7CiAgICAgICAgICAgICBpZihOVUxMID09IG9mbmFtZSkgewogICAgICAgICAgICAgICAgIGlmKGlmbmFtZSkKQEAgLTgzLDQ5ICs5Miw0NiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc25wcmludGYoIHNoZWxsbGluZSwgc2l6ZW9mKHNoZWxsbGluZSksICIoJXMpIDwgXCIlc1wiID4gXCIlc1wiIiwKICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBpZm5hbWUsIG9mbmFtZSApOworICAgICAgICAgICAgcmVzdWx0ID0gc3lzdGVtKHNoZWxsbGluZSk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSWYgb3V0cHV0IHdhcyByZXF1ZXN0ZWQsIHRoZW4gcmV0cmlldmUgJiByZXR1cm4gaXQuCisgICAgICAgICAgICAgKiBUaWR5IHVwLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChvdXRfbGVuICYmICpvdXRfbGVuICE9IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICBmZDsgICAgICAgIC8qIEZvciBwcm9jZXNzaW5nIGFueSBvdXRwdXQgKi8KKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgICAgIGZkID0gb3BlbihvZm5hbWUsIE9fUkRPTkxZKTsKKyAgICAgICAgICAgICAgICBpZihmZCA+PSAwKQorICAgICAgICAgICAgICAgICAgICBsZW4gID0gcmVhZCggZmQsIG91dHB1dCwgKm91dF9sZW4tMSApOworICAgICAgICAgICAgICAgICpvdXRfbGVuID0gbGVuOworICAgICAgICAgICAgICAgIGlmIChsZW4gPj0gMCkgb3V0cHV0W2xlbl0gPSAwOworICAgICAgICAgICAgICAgIGVsc2Ugb3V0cHV0WzBdID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoZmQgPj0gMCkgY2xvc2UoZmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5saW5rKG9mbmFtZSk7CisgICAgICAgICAgICB1bmxpbmsoaWZuYW1lKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG9mbmFtZSA9IE5VTEw7ICAgLyogSnVzdCB0byBzaHV0IHRoZSBjb21waWxlciB1cCEgKi8KLSAgICAgICAgICAgIHNucHJpbnRmKCBzaGVsbGxpbmUsIHNpemVvZihzaGVsbGxpbmUpLCAiKCVzKSA8IFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgaWZuYW1lICk7CisgICAgICAgICAgICBmaWxlID0gcG9wZW4oY29tbWFuZCwgInciKTsKKyAgICAgICAgICAgIGlmIChmaWxlKSB7CisgICAgICAgICAgICAgICAgZndyaXRlKGlucHV0LCAxLCBzdHJsZW4oaW5wdXQpLCBmaWxlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwY2xvc2UoZmlsZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZm5hbWUgPSBOVUxMOyAgIC8qIEp1c3QgdG8gc2h1dCB0aGUgY29tcGlsZXIgdXAhICovCiAgICAgICAgIGlmIChvdXRwdXQpIHsKLSAgICAgICAgICAgIG9mbmFtZSA9IG5ldHNubXBfbWt0ZW1wKCk7Ci0gICAgICAgICAgICBpZihOVUxMID09IG9mbmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBzbnByaW50Ziggc2hlbGxsaW5lLCBzaXplb2Yoc2hlbGxsaW5lKSwgIiglcykgPiBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIG9mbmFtZSApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb2ZuYW1lID0gTlVMTDsgICAvKiBKdXN0IHRvIHNodXQgdGhlIGNvbXBpbGVyIHVwISAqLwotICAgICAgICAgICAgc25wcmludGYoIHNoZWxsbGluZSwgc2l6ZW9mKHNoZWxsbGluZSksICIlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCApOwotICAgICAgICB9Ci0gICAgfQorICAgICAgICAgICAgRklMRSogZmlsZTsKIAotICAgIC8qCi0gICAgICogLi4uIGFuZCBydW4gaXQKLSAgICAgKi8KLSAgICByZXN1bHQgPSBzeXN0ZW0oc2hlbGxsaW5lKTsKLQotICAgIC8qCi0gICAgICogSWYgb3V0cHV0IHdhcyByZXF1ZXN0ZWQsIHRoZW4gcmV0cmlldmUgJiByZXR1cm4gaXQuCi0gICAgICogVGlkeSB1cCwgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLgotICAgICAqLwotICAgIGlmICggb3V0cHV0ICYmIG91dF9sZW4gJiYgKCpvdXRfbGVuICE9IDApICkgewotICAgICAgICBpbnQgICAgICAgICBmZDsgICAgICAgIC8qIEZvciBwcm9jZXNzaW5nIGFueSBvdXRwdXQgKi8KLSAgICAgICAgaW50ICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgZmQgPSBvcGVuKG9mbmFtZSwgT19SRE9OTFkpOwotICAgICAgICBpZihmZCA+PSAwKQotICAgICAgICAgICAgbGVuICA9IHJlYWQoIGZkLCBvdXRwdXQsICpvdXRfbGVuLTEgKTsKLQkqb3V0X2xlbiA9IGxlbjsKLQlpZiAobGVuID49IDApIG91dHB1dFtsZW5dID0gMDsKLQllbHNlIG91dHB1dFswXSA9IDA7Ci0JaWYgKGZkID49IDApIGNsb3NlKGZkKTsKLSAgICAgICAgdW5saW5rKG9mbmFtZSk7Ci0gICAgfQotICAgIGlmICggaW5wdXQgKSB7Ci0gICAgICAgIHVubGluayhpZm5hbWUpOworICAgICAgICAgICAgZmlsZSA9IHBvcGVuKGNvbW1hbmQsICJyIik7CisgICAgICAgICAgICBpZiAoZmlsZSkgeworICAgICAgICAgICAgICAgICpvdXRfbGVuID0gZnJlYWQob3V0cHV0LCAxLCAqb3V0X2xlbiAtIDEsIGZpbGUpOworICAgICAgICAgICAgICAgIGlmICgqb3V0X2xlbiA+PSAwKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXRbKm91dF9sZW5dID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dFswXSA9IDA7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGNsb3NlKGZpbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTYwLDY3ICsxNjYsMTIgQEAKICAgICBpZiAoY3ApIHsKICAgICAgICAgYXJndltpKytdID0gc3RyZHVwKCBjcCApOwogICAgIH0KLSAgICBhcmd2W2ldID0gMDsKKyAgICBhcmd2W2ldID0gTlVMTDsKICAgICAqYXJnYyA9IGk7CiAKICAgICByZXR1cm4gYXJndjsKIH0KIAotY2hhciAqKgoteHhfdG9rZW5pemVfZXhlY19jb21tYW5kKCBjaGFyICpjb21tYW5kLCBpbnQgKmFyZ2MgKQotewotICAgIGNoYXIgY3RtcFtTVFJNQVhdOwotICAgIGNoYXIgKmNwdHIxLCAqY3B0cjI7Ci0gICAgY2hhciAqKmFyZ3Y7Ci0gICAgaW50ICBjb3VudCwgaTsKLQotICAgIGlmICghY29tbWFuZCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBtZW1zZXQoIGN0bXAsIDAsIFNUUk1BWCApOwotICAgIC8qCi0gICAgICogTWFrZSBhIGNvcHkgb2YgdGhlIGNvbW1hbmQgaW50byB0aGUgJ2N0bXAnIGJ1ZmZlciwKLSAgICAgKiAgICBzcGxpdHRpbmcgaXQgaW50byBzZXBhcmF0ZSB0b2tlbnMKLSAgICAgKiAgICAoYnV0IHN0aWxsIGFsbCBpbiB0aGUgb25lIGJ1ZmZlcikuCi0gICAgICovCi0gICAgY291bnQgPSAxOwotICAgIGZvciAoY3B0cjEgPSBjb21tYW5kLCBjcHRyMiA9IGN0bXA7Ci0gICAgICAgICAgICBjcHRyMSAmJiAqY3B0cjE7Ci0gICAgICAgICAgICBjcHRyMSsrLCBjcHRyMisrKSB7Ci0gICAgICAgICpjcHRyMiA9ICpjcHRyMTsKLQlpZiAoaXNzcGFjZSgqY3B0cjEpKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIGEgdG9rZW4sIHNvIGluY3JlYXNlCi0gICAgICAgICAgICAgKiB0aGUgY291bnQsIGFuZCBtYXJrIHRoaXMgaW4gdGhlIGNvbW1hbmQgY29weS4KLSAgICAgICAgICAgICAqIFRoZW4gZ2V0IHJlYWR5IGZvciB0aGUgbmV4dCB3b3JkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgKmNwdHIyID0gMDsgICAgLyogRW5kIG9mIHRva2VuICovCi0JICAgIGNwdHIxID0gc2tpcF93aGl0ZShjcHRyMSk7Ci0JICAgIGlmICghY3B0cjEpCi0JICAgICAgICBicmVhazsKLQkgICAgY3B0cjEtLTsJLyogQmFjayB1cCBvbmUsIHJlYWR5IGZvciB0aGUgbmV4dCBsb29wICovCi0JfQotICAgIH0KLQotICAgIC8qCi0gICAgICogTm93IHNldCB1cCB0aGUgJ2FyZ3YnIGFycmF5LAotICAgICAqICAgY29weWluZyB0b2tlbnMgb3V0IG9mIHRoZSAnY3B0cicgYnVmZmVyCi0gICAgICovCi0gICAgYXJndiA9IChjaGFyICoqKSBjYWxsb2MoKGNvdW50ICsgMiksIHNpemVvZihjaGFyICopKTsKLSAgICBpZiAoYXJndiA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBjcHRyMiA9IGN0bXA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgYXJndltpXSA9IHN0cmR1cCggY3B0cjIgKTsKLSAgICAgICAgY3B0cjIgICs9IHN0cmxlbiggY3B0cjIgKSsxOwotICAgIH0KLSAgICBhcmd2W2NvdW50XSA9IDA7Ci0gICAgKmFyZ2MgICAgICAgPSBjb3VudDsKLSAgICAgICAgCi0gICAgcmV0dXJuIGFyZ3Y7Ci19Ci0KIAogaW50CiBydW5fZXhlY19jb21tYW5kKCBjaGFyICpjb21tYW5kLCBjaGFyICppbnB1dCwKQEAgLTM1NSw3ICszMDYsNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBjb3VudCA9IHJlYWQob3BpcGVbMF0sICZjYWNoZV9wdHJbb2Zmc2V0XSwgY2FjaGVfc2l6ZSk7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpydW46ZXhlYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJlYWQgJWQgYnl0ZXNcbiIsIGNvdW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJlYWQgJWQgYnl0ZXNcbiIsIChpbnQpY291bnQpKTsKICAgICAgICAgICAgIGlmICgwID09IGNvdW50KSB7CiAgICAgICAgICAgICAgICAgaW50IHJjOwogICAgICAgICAgICAgICAgIC8qCkBAIC0zOTAsNyArMzQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnJ1bjpleGVjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAlZCBsZWZ0IGluIGJ1ZmZlclxuIiwgY2FjaGVfc2l6ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVkIGxlZnQgaW4gYnVmZmVyXG4iLCAoaW50KWNhY2hlX3NpemUpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICgoY291bnQgPT0gLTEpICYmIChFQUdBSU4gIT0gZXJybm8pKSB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oIGIvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuaAppbmRleCAwNWU4MjcwLi4zYzllODRiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9FWEVDVVRFX0gKICNkZWZpbmUgX01JQkdST1VQX0VYRUNVVEVfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQogY29uZmlnX2JlbG9uZ3NfaW4oYWdlbnRfbW9kdWxlKQogCiBpbnQgcnVuX3NoZWxsX2NvbW1hbmQoY2hhciAqY29tbWFuZCwgY2hhciAqaW5wdXQsCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMgYi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMKaW5kZXggNGY2NmQ3ZS4uODYwNTkwZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYwpAQCAtMSwzMCArMSwzNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSAidXRpbGl0aWVzL2lxdWVyeS5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXF1ZXJ5X2FsbCwgbGlibmV0c25tcG1pYnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXF1ZXJ5LCBpcXVlcnlfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlxdWVyeV9jb21tdW5pdHlfc2Vzc2lvbiwgaXF1ZXJ5X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcXVlcnlfcGR1X3Nlc3Npb24sIGlxdWVyeV9hbGwpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHF1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24pCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUVVFUlkKKwogdm9pZAogbmV0c25tcF9wYXJzZV9pcXVlcnlTZWNMZXZlbChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKIHsKLSAgICBjaGFyIGJ1ZlsxMDI0XTsKICAgICBpbnQgc2VjTGV2ZWw7CiAKICAgICBpZiAoKHNlY0xldmVsID0gcGFyc2Vfc2VjTGV2ZWxfY29uZiggdG9rZW4sIGxpbmUgKSkgPj0gMCApIHsKICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1NFQ0xFVkVMLCBzZWNMZXZlbCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlVua25vd24gc2VjdXJpdHkgbGV2ZWw6ICVzIiwgbGluZSk7Ci0gICAgICAgIGJ1Zlsgc2l6ZW9mKGJ1ZiktMSBdID0gMDsKLSAgICAgICAgY29uZmlnX3BlcnJvcihidWYpOworCW5ldHNubXBfY29uZmlnX2Vycm9yKCJVbmtub3duIHNlY3VyaXR5IGxldmVsOiAlcyIsIGxpbmUpOwogICAgIH0KIH0KIAogdm9pZAogbmV0c25tcF9wYXJzZV9pcXVlcnlWZXJzaW9uKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQogewotICAgIGNoYXIgYnVmWzEwMjRdOwotCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKICAgICBpZiAoIXN0cmNtcCggbGluZSwgIjEiICkpCiAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELApAQCAtNDEsOSArNDYsNyBAQAogICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfSU5URVJOQUxfVkVSU0lPTiwgU05NUF9WRVJTSU9OXzMpOwogICAgIGVsc2UgewotICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiVW5rbm93biB2ZXJzaW9uOiAlcyIsIGxpbmUpOwotICAgICAgICBidWZbIHNpemVvZihidWYpLTEgXSA9IDA7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiVW5rbm93biB2ZXJzaW9uOiAlcyIsIGxpbmUpOwogICAgIH0KIH0KIApAQCAtNjEsOSArNjQsNiBAQAogICAgIGlmIChzZWNOYW1lKQogICAgICAgICBuZXRzbm1wX3F1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24oCiAgICAgICAgICAgICAgbmV0c25tcF9pcXVlcnlfdXNlcl9zZXNzaW9uKHNlY05hbWUpKTsKLSAgICBlbHNlCi0gICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAiaXF1ZXJ5U2VjTmFtZSBoYXMgbm90IGJlZW4gY29uZmlndXJlZCAtIGludGVybmFsIHF1ZXJpZXMgd2lsbCBmYWlsXG4iKTsKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCkBAIC04MSw5ICs4MSw5IEBACiB7CiAgICAgdV9jaGFyIGVJRFtTTk1QX01BWEJVRl9TTUFMTF07CiAgICAgc2l6ZV90IGVsZW47Ci0gICAgbmV0c25tcF9zZXNzaW9uICpzID0gbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7CisgICAgbmV0c25tcF9zZXNzaW9uICpzID0gbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uX3VuY2hlY2tlZCgpOwogCi0gICAgaWYgKHMgJiYgcy0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwICkgeworICAgIGlmICggcyAmJiBzLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDAgKSB7CiAgICAgICAgIGVsZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKGVJRCwgc2l6ZW9mKGVJRCkpOwogICAgICAgICBzLT5zZWN1cml0eUVuZ2luZUlEID0gbmV0c25tcF9tZW1kdXAoZUlELCBlbGVuKTsKICAgICAgICAgcy0+c2VjdXJpdHlFbmdpbmVJRExlbiA9IGVsZW47CkBAIC0xMzAsNiArMTMwLDcgQEAKICAgICAgKgogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lRVUVSWV9QRFVfU0VTU0lPTgogbmV0c25tcF9zZXNzaW9uICpuZXRzbm1wX2lxdWVyeV9wZHVfc2Vzc2lvbihuZXRzbm1wX3BkdSogcGR1KSB7CiAgICAgaWYgKCFwZHUpCiAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNDEsMTMgKzE0MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXRzbm1wX2lxdWVyeV9zZXNzaW9uKCBwZHUtPmNvbW11bml0eSwgCisgICAgICAgIHJldHVybiBuZXRzbm1wX2lxdWVyeV9zZXNzaW9uKChjaGFyICopIHBkdS0+Y29tbXVuaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dmVyc2lvbisxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9TRUNfTEVWRUxfTk9BVVRILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lRVUVSWV9QRFVfU0VTU0lPTiAqLwogCiBuZXRzbm1wX3Nlc3Npb24gKm5ldHNubXBfaXF1ZXJ5X3VzZXJfc2Vzc2lvbihjaGFyKiBzZWNOYW1lKXsKICAgICB1X2NoYXIgZUlEW1NOTVBfTUFYQlVGX1NNQUxMXTsKQEAgLTE1OSw2ICsxNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9TRUNfTEVWRUxfQVVUSE5PUFJJViwgZUlELCBlbGVuKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lRVUVSWV9DT01NVU5JVFlfU0VTU0lPTgogbmV0c25tcF9zZXNzaW9uICpuZXRzbm1wX2lxdWVyeV9jb21tdW5pdHlfc2Vzc2lvbiggY2hhciogY29tbXVuaXR5LCBpbnQgdmVyc2lvbiApIHsgCiAgICAgdV9jaGFyIGVJRFtTTk1QX01BWEJVRl9TTUFMTF07CiAgICAgc2l6ZV90IGVsZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKGVJRCwgc2l6ZW9mKGVJRCkpOwpAQCAtMTY2LDYgKzE2OSw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfaXF1ZXJ5X3Nlc3Npb24oIGNvbW11bml0eSwgdmVyc2lvbiwgdmVyc2lvbisxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9TRUNfTEVWRUxfTk9BVVRILCBlSUQsIGVsZW4pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVFVRVJZX0NPTU1VTklUWV9TRVNTSU9OICovCiAKIG5ldHNubXBfc2Vzc2lvbiAqbmV0c25tcF9pcXVlcnlfc2Vzc2lvbihjaGFyKiBzZWNOYW1lLCAgIGludCAgIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgc2VjTW9kZWwsICBpbnQgICBzZWNMZXZlbCwKQEAgLTIwMiwzICsyMDYsNyBAQAogICAgIHJldHVybiBzczsKIH0KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUVVFUlkgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoaXF1ZXJ5KTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lRVUVSWSAqLworCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jCmluZGV4IDdjNzBhMDIuLjQ4YWMyODEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jCkBAIC0xNSw4ICsxNSw2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotCiB0eXBlZGVmIHN0cnVjdCBvdmVycmlkZV9kYXRhX3MgewogICAgIGludCAgICAgICAgICAgICB0eXBlOwogICAgIHZvaWQgICAgICAgICAgICp2YWx1ZTsKQEAgLTM0LDcgKzMyLDcgQEAKICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogCi0gICAgb3ZlcnJpZGVfZGF0YSAgKmRhdGEgPSBoYW5kbGVyLT5teXZvaWQ7CisgICAgb3ZlcnJpZGVfZGF0YSAgKmRhdGEgPSAob3ZlcnJpZGVfZGF0YSopaGFuZGxlci0+bXl2b2lkOwogICAgIHZvaWQgKnRtcHB0cjsKIAogICAgIGlmICghZGF0YSkgewpAQCAtNTIsNiArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBkYXRhLT52YWx1ZSwgZGF0YS0+dmFsdWVfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gZGF0YS0+dHlwZSkKICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1dST05HVFlQRSk7CkBAIC04OSw2ICs4OCw3IEBACiAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiAgICAgICAgIFNOTVBfRlJFRShkYXRhLT5zZXRfc3BhY2UpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5zdXBwb3J0ZWQgbW9kZSBpbiBvdmVycmlkZSBoYW5kbGVyXG4iKTsKQEAgLTE4Myw3ICsxODMsNiBAQAogICAgICAgICBjb25maWdfcGVycm9yKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KICAgICB0aGVkYXRhLT50eXBlID0gdHlwZTsKIAogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMjA2LDcgKzIwNSw3IEBACiAgICAgICAgICAgICAgKiBoZXggCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHRoZWRhdGEtPnZhbHVlX2xlbiA9Ci0gICAgICAgICAgICAgICAgaGV4X3RvX2JpbmFyeTIoYnVmICsgMiwgc3RybGVuKGJ1ZikgLSAyLAorICAgICAgICAgICAgICAgIGhleF90b19iaW5hcnkyKCh1X2NoYXIgKikoYnVmICsgMiksIHN0cmxlbihidWYpIC0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJnRoZWRhdGEtPnZhbHVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRoZWRhdGEtPnZhbHVlID0gc3RyZHVwKGJ1Zik7CkBAIC0yNDksNyArMjQ4LDcgQEAKICAgICB0aGVfcmVnLT5tb2RlcyA9IChyZWFkd3JpdGUpID8gSEFORExFUl9DQU5fUldSSVRFIDogSEFORExFUl9DQU5fUk9OTFk7CiAgICAgdGhlX3JlZy0+aGFuZGxlciA9CiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoIm92ZXJyaWRlIiwgb3ZlcnJpZGVfaGFuZGxlcik7Ci0gICAgdGhlX3JlZy0+cm9vdG9pZCA9IG5ldHNubXBfbWVtZHVwKG9pZGJ1Ziwgb2lkYnVmX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICB0aGVfcmVnLT5yb290b2lkID0gc25tcF9kdXBsaWNhdGVfb2JqaWQob2lkYnVmLCBvaWRidWZfbGVuKTsKICAgICB0aGVfcmVnLT5yb290b2lkX2xlbiA9IG9pZGJ1Zl9sZW47CiAgICAgaWYgKCF0aGVfcmVnLT5yb290b2lkIHx8ICF0aGVfcmVnLT5oYW5kbGVyIHx8ICF0aGVfcmVnLT5oYW5kbGVyTmFtZSkgewogICAgICAgICBpZiAodGhlX3JlZy0+aGFuZGxlcikKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3ZlcnNpb250YWcgYi9hZ2VudC9taWJncm91cC92ZXJzaW9udGFnCmluZGV4IDlhYTcxYTYuLmMyNGMyNTkgMTAwNzU1Ci0tLSBhL2FnZW50L21pYmdyb3VwL3ZlcnNpb250YWcKKysrIGIvYWdlbnQvbWliZ3JvdXAvdmVyc2lvbnRhZwpAQCAtMSw2ICsxLDYgQEAKICMhL2Jpbi9zaAogCi1ET0lUPQorRE9JVD1lY2hvCiAKIGlmIFsgJDIgPSAidGFnIiAtbyAkMiA9ICJ0YXIiIF07CiB0aGVuCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC93aW5FeHRETEwuYyBiL2FnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jCmluZGV4IDU5MzY3NzUuLmU0MjE0MTIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jCkBAIC04Miw2ICs4Miw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaD4KIAogI2lmZGVmIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUKQEAgLTEwMSw2ICsxMDIsOCBAQAogI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJ3aW5FeHRETEwuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX2lzX3N1YnRyZWUpCisKIAogI2RlZmluZSBNQVhfVkFMVUVfTkFNRSAgICAgICAgICAxNjM4MwogI2RlZmluZSBNU19BU05fVUlOVEVHRVIzMiBNU19BU05fVU5TSUdORUQzMgpAQCAtNzUzLDYgKzc1Niw3OSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKgorICogVHJhbnNsYXRlIE5ldC1TTk1QIHJlcXVlc3QgbW9kZSBpbnRvIGFuIFNubXBFeHRlbnNpb25RdWVyeSgpIFBEVSB0eXBlCisgKiBvciBpbnRvIGFuIFNubXBFeHRlbnNpb25RdWVyeUV4KCkgcmVxdWVzdCB0eXBlLgorICovCitzdGF0aWMgaW50CitnZXRfcmVxdWVzdF90eXBlKGludCBtb2RlLCBpbnQgcmVxdWVzdF90eXBlLCBVSU5UICpuUmVxdWVzdFR5cGUpCit7CisgICAgc3dpdGNoIChyZXF1ZXN0X3R5cGUpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIC8qIFNubXBFeHRlbnNpb25RdWVyeSgpIFBEVSB0eXBlICovCisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfUERVX0dFVDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIE1PREVfR0VUTkVYVDoKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX1BEVV9HRVRORVhUOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9QRFVfU0VUOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREVCVUdNU0coKCJ3aW5FeHRETEwiLCAiaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgbW9kZSAlZC5cbiIsIG1vZGUpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KDApOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICBjYXNlIDE6CisgICAgICAgIC8qIFNubXBFeHRlbnNpb25RdWVyeUV4KCkgcmVxdWVzdCB0eXBlICovCisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX0dFVDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIE1PREVfR0VUTkVYVDoKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9HRVRfTkVYVDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX1NFVF9URVNUOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX1NFVF9VTkRPOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX1NFVF9DT01NSVQ7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX1NFVF9DTEVBTlVQOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERUJVR01TRygoIndpbkV4dERMTCIsICJpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBtb2RlICVkLlxuIiwgbW9kZSkpOworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoMCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHTVNHKCgid2luRXh0RExMIiwgImludGVybmFsIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgIHJlcXVlc3RfdHlwZSkpOworICAgICAgICBuZXRzbm1wX2Fzc2VydCgwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBzdGF0aWMgaW50CiB2YXJfd2luRXh0RExMKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCkBAIC03NjMsNyArODM5LDYgQEAKICAgICB3aW5leHRkbGwgICAgICAqZXh0X2RsbF9pbmZvOwogICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwogICAgIFVJTlQgICAgICAgICAgICBuUmVxdWVzdFR5cGU7Ci0gICAgY29uc3QgY2hhciAgICAgKm1vZGVfbmFtZTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKICAgICBuZXRzbm1wX2Fzc2VydChleHRfZGxsX3ZpZXdfaW5mbyk7CkBAIC03ODAsNDMgKzg1NSw4IEBACiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgfQogCi0gICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7Ci0gICAgY2FzZSBNT0RFX0dFVDoKLSAgICAgICAgbW9kZV9uYW1lID0gIkdFVCI7Ci0gICAgICAgIG5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX0dFVDsKLSAgICAgICAgbmV0c25tcF9hc3NlcnQoIWNvbnRleHRfaW5mb19oZWFkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT0RFX0dFVE5FWFQ6Ci0gICAgICAgIG1vZGVfbmFtZSA9ICJHRVRORVhUIjsKLSAgICAgICAgblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fR0VUX05FWFQ7Ci0gICAgICAgIG5ldHNubXBfYXNzZXJ0KCFjb250ZXh0X2luZm9faGVhZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6Ci0gICAgICAgIG1vZGVfbmFtZSA9ICJTRVRfUkVTRVJWRTEiOwotICAgICAgICBuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9TRVRfVEVTVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKLSAgICAgICAgbW9kZV9uYW1lID0gIlNFVF9SRVNFUlZFMiI7Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICBtb2RlX25hbWUgPSAiU0VUX0FDVElPTiI7Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKLSAgICAgICAgbW9kZV9uYW1lID0gIlNFVF9VTkRPIjsKLSAgICAgICAgblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fU0VUX1VORE87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgotICAgICAgICBtb2RlX25hbWUgPSAiU0VUX0NPTU1JVCI7Ci0gICAgICAgIG5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX1NFVF9DT01NSVQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKLSAgICAgICAgbW9kZV9uYW1lID0gIlNFVF9GUkVFIjsKLSAgICAgICAgblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fU0VUX0NMRUFOVVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHTVNHKCgid2luRXh0RExMIiwKLSAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBtb2RlICVkLlxuIiwgcmVxaW5mby0+bW9kZSkpOwotICAgICAgICBuZXRzbm1wX2Fzc2VydCgwKTsKKyAgICBpZiAoIWdldF9yZXF1ZXN0X3R5cGUocmVxaW5mby0+bW9kZSwgISFleHRfZGxsX2luZm8tPnBmU25tcEV4dGVuc2lvblF1ZXJ5RXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZuUmVxdWVzdFR5cGUpKSB7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvb2JqZWN0X21vbml0b3IuYyBiL2FnZW50L29iamVjdF9tb25pdG9yLmMKaW5kZXggYzg0OTNlNC4uMmFiOGM5YiAxMDA2NDQKLS0tIGEvYWdlbnQvb2JqZWN0X21vbml0b3IuYworKysgYi9hZ2VudC9vYmplY3RfbW9uaXRvci5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpZiAhIGRlZmluZWQgVFJVRQogIyAgZGVmaW5lIFRSVUUgMQotI2VsaWYgVFJVRSAhPSAxCisjZWxzaWYgVFJVRSAhPSAxCiBlcnJvciAiVFJVRSAhPSAxIgogI2VuZGlmCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FnZW50L3NubXBfYWdlbnQuYyBiL2FnZW50L3NubXBfYWdlbnQuYwppbmRleCA1YWE1NTUyLi5iOTZkNjUwIDEwMDY0NAotLS0gYS9hZ2VudC9zbm1wX2FnZW50LmMKKysrIGIvYWdlbnQvc25tcF9hZ2VudC5jCkBAIC00NCw2ICs0NCw3IEBACiAgKiBAewogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmZGVmIEhBVkVfTElNSVRTX0gKQEAgLTU5LDExICs2MCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTc5LDkgKzc2LDYgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxlcnJuby5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNkZWZpbmUgU05NUF9ORUVEX1JFUVVFU1RfTElTVAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CkBAIC05OSw4ICs5Myw2IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgInNubXBkLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvc3RydWN0LmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaD4KIApAQCAtMTE2LDYgKzEwOCw4NyBAQAogI2luY2x1ZGUgInNtdXgvc211eC5oIgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX2FnZW50LCBsaWJuZXRzbm1wYWdlbnQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnRfZGVidWdnaW5nX3V0aWxpdGllcywgbGlibmV0c25tcGFnZW50KQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWxsb2NhdGVfZ2xvYmFsY2FjaGVpZCwgc25tcF9hZ2VudCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmcmVlX2FnZW50X3NubXBfc2Vzc2lvbl9ieV9zZXNzaW9uLCBzbm1wX2FnZW50KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvciwgc25tcF9hZ2VudCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja19yZXF1ZXN0c19lcnJvciwgc25tcF9hZ2VudCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZXF1ZXN0X3NldF9lcnJvcl9pZHgsIHNubXBfYWdlbnQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc2V0X2FnZW50X3VwdGltZSwgc25tcF9hZ2VudCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF9jaGVja19hbmRfcHJvY2Vzcywgc25tcF9hZ2VudCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGR1bXBfc2Vzc19saXN0LCBhZ2VudF9kZWJ1Z2dpbmdfdXRpbGl0aWVzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnRfcmVtb3ZlX2xpc3RfZGF0YSwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc2V0X2FsbF9yZXF1ZXN0c19lcnJvciwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWRkcmNhY2hlX2FnZSwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGVsZXRlX3N1YnRyZWVfY2FjaGUsIG5ldHNubXBfdW51c2VkKQorCisKK05FVFNOTVBfSU5MSU5FIHZvaWQKK25ldHNubXBfYWdlbnRfYWRkX2xpc3RfZGF0YShuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICpub2RlKQoreworICAgIGlmIChhcmkpIHsKKwlpZiAoYXJpLT5hZ2VudF9kYXRhKSB7CisgICAgICAgICAgICBuZXRzbm1wX2FkZF9saXN0X2RhdGEoJmFyaS0+YWdlbnRfZGF0YSwgbm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcmktPmFnZW50X2RhdGEgPSBub2RlOworCX0KKyAgICB9Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BR0VOVF9SRU1PVkVfTElTVF9EQVRBCitORVRTTk1QX0lOTElORSBpbnQKK25ldHNubXBfYWdlbnRfcmVtb3ZlX2xpc3RfZGF0YShuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBuYW1lKQoreworICAgIGlmICgoTlVMTCA9PSBhcmkpIHx8IChOVUxMID09IGFyaS0+YWdlbnRfZGF0YSkpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIG5ldHNubXBfcmVtb3ZlX2xpc3Rfbm9kZSgmYXJpLT5hZ2VudF9kYXRhLCBuYW1lKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FHRU5UX1JFTU9WRV9MSVNUX0RBVEEgKi8KKworTkVUU05NUF9JTkxJTkUgdm9pZCAgICAqCituZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChhcmkpIHsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfZ2V0X2xpc3RfZGF0YShhcmktPmFnZW50X2RhdGEsIG5hbWUpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9mcmVlX2FnZW50X2RhdGFfc2V0KG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmkpCit7CisgICAgaWYgKGFyaSkgeworICAgICAgICBuZXRzbm1wX2ZyZWVfbGlzdF9kYXRhKGFyaS0+YWdlbnRfZGF0YSk7CisgICAgfQorfQorCitORVRTTk1QX0lOTElORSB2b2lkCituZXRzbm1wX2ZyZWVfYWdlbnRfZGF0YV9zZXRzKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmkpCit7CisgICAgaWYgKGFyaSkgeworICAgICAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShhcmktPmFnZW50X2RhdGEpOworICAgIH0KK30KKworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9mcmVlX2FnZW50X3JlcXVlc3RfaW5mbyhuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpKQoreworICAgIGlmIChhcmkpIHsKKyAgICAgICAgaWYgKGFyaS0+YWdlbnRfZGF0YSkgeworICAgICAgICAgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoYXJpLT5hZ2VudF9kYXRhKTsKKwl9CisgICAgICAgIFNOTVBfRlJFRShhcmkpOworICAgIH0KK30KKwogb2lkICAgICAgdmVyc2lvbl9zeXNvaWRbXSA9IHsgTkVUU05NUF9TWVNURU1fTUlCIH07CiBpbnQgICAgICB2ZXJzaW9uX3N5c29pZF9sZW4gPSBPSURfTEVOR1RIKHZlcnNpb25fc3lzb2lkKTsKIApAQCAtMTMwLDcgKzIwMyw3IEBACiBzdHJ1Y3QgYWRkckNhY2hlIHsKICAgICBjaGFyICAgICAgICAgICAqYWRkcjsKICAgICBpbnQgICAgICAgICAgICBzdGF0dXM7Ci0gICAgc3RydWN0IHRpbWV2YWwgbGFzdEhpdDsKKyAgICBzdHJ1Y3QgdGltZXZhbCBsYXN0SGl0TTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWRkckNhY2hlIGFkZHJDYWNoZVtTTk1QX0FERFJDQUNIRV9TSVpFXTsKQEAgLTE3NiwxMSArMjQ5LDEzIEBACiAKIGludCAgICAgIG5ldHNubXBfcnVubmluZyA9IDE7CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BTExPQ0FURV9HTE9CQUxDQUNIRUlECiBpbnQKIG5ldHNubXBfYWxsb2NhdGVfZ2xvYmFsY2FjaGVpZCh2b2lkKQogewogICAgIHJldHVybiArK2N1cnJlbnRfZ2xvYmFsaWQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BTExPQ0FURV9HTE9CQUxDQUNIRUlEICovCiAKIGludAogbmV0c25tcF9nZXRfbG9jYWxfY2FjaGlkKG5ldHNubXBfY2FjaGVtYXAgKmNhY2hlX3N0b3JlLCBpbnQgZ2xvYmFsaWQpCkBAIC0yMDAsMTUgKzI3NSwxNyBAQAogICAgIG5ldHNubXBfY2FjaGVtYXAgKnRtcHA7CiAKICAgICB0bXBwID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2NhY2hlbWFwKTsKLSAgICBpZiAoKmNhY2hlX3N0b3JlKSB7Ci0gICAgICAgIHRtcHAtPm5leHQgPSAqY2FjaGVfc3RvcmU7Ci0gICAgICAgICpjYWNoZV9zdG9yZSA9IHRtcHA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKmNhY2hlX3N0b3JlID0gdG1wcDsKLSAgICB9CisgICAgaWYgKHRtcHAgIT0gTlVMTCkgeworICAgICAgICBpZiAoKmNhY2hlX3N0b3JlKSB7CisgICAgICAgICAgICB0bXBwLT5uZXh0ID0gKmNhY2hlX3N0b3JlOworICAgICAgICAgICAgKmNhY2hlX3N0b3JlID0gdG1wcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpjYWNoZV9zdG9yZSA9IHRtcHA7CisgICAgICAgIH0KIAotICAgIHRtcHAtPmdsb2JhbGlkID0gZ2xvYmFsaWQ7Ci0gICAgdG1wcC0+Y2FjaGVpZCA9IGxvY2FsaWQ7CisgICAgICAgIHRtcHAtPmdsb2JhbGlkID0gZ2xvYmFsaWQ7CisgICAgICAgIHRtcHAtPmNhY2hlaWQgPSBsb2NhbGlkOworICAgIH0KICAgICByZXR1cm4gdG1wcDsKIH0KIApAQCAtMzIyLDcgKzM5OSw3IEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSBzaG91bGQgZXZlciBoYXBwZW4uIFBsZWFzZSBlbWFpbAogICAgICAgICAgICAgICAgICAqIHRoZSBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0IGlmIHlvdSBoYXZlCi0gICAgICAgICAgICAgICAgICogYSB0ZXN0IGNhc2UgdGhhdCBoaXRzIHRoaXMgYXNzZXJ0LiAtLSByc3RvcnkKKyAgICAgICAgICAgICAgICAgKiBhIHRlc3QgY2FzZSB0aGF0IGhpdHMgdGhpcyBjb25kaXRpb24uIC0tIHJzdG9yeQogICAgICAgICAgICAgICAgICAqLwogCQlpbnQgaTsKICAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMID09IGFzcC0+cmVxdWVzdHMpOyAvKiBzZWUgbm90ZSBhYm92ZSAqLwpAQCAtMzQ1LDcgKzQyMiw3IEBACiAJICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiB3aGVuIHdvdWxkIHdlIG5vdCBoYXZlIHNhdmVkIHZhcmlhYmxlcz8gc29tZW9uZQotICAgICAgICAgICAgICAgICAqIGxldCBtZSBrbm93IGlmIHRoZXkgaGl0IHRoaXMgYXNzZXJ0LiAtLSByc3RvcnkKKyAgICAgICAgICAgICAgICAgKiBsZXQgbWUga25vdyBpZiB0aGV5IGhpdCB0aGlzIGNvbmRpdGlvbi4gLS0gcnN0b3J5CiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBwdHItPnNhdmVkX3ZhcnMpOwogICAgICAgICAgICAgfQpAQCAtNTQxLDE1ICs2MTgsNyBAQAogICAgIH0KIH0KIAotCi1pbnQKLWdldE5leHRTZXNzSUQoKQotewotICAgIHN0YXRpYyBpbnQgICAgICBTZXNzaW9uSUQgPSAwOwotCi0gICAgcmV0dXJuICsrU2Vzc2lvbklEOwotfQotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRfQ0hFQ0tfQU5EX1BST0NFU1MKIC8qKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHBhY2tldHMgYXJyaXZpbmcgb24gdGhlIFNOTVAgcG9ydCBhbmQKICAqIHByb2Nlc3NlcyB0aGVtKHNubXBfcmVhZCkgaWYgc29tZSBhcmUgZm91bmQsIHVzaW5nIHRoZSBzZWxlY3QoKS4gSWYgYmxvY2sKQEAgLTU5Niw3ICs2NjUsNyBAQAogICAgICAgICB0aW1lcmNsZWFyKHR2cCk7CiAgICAgfQogCi0gICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmZmRzZXQsIDAsIDAsIHR2cCk7CisgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmZmRzZXQsIE5VTEwsIE5VTEwsIHR2cCk7CiAKICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgIC8qCkBAIC02MTksNiArNjg4LDExIEBACiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZGlmIC0tIGNvdW50PjAgKi8KIAogICAgIC8qCisgICAgICogc2VlIGlmIHBlcnNpc3RlbnQgc3RvcmUgbmVlZHMgdG8gYmUgc2F2ZWQKKyAgICAgKi8KKyAgICBzbm1wX3N0b3JlX2lmX25lZWRlZCgpOworCisgICAgLyoKICAgICAgKiBSdW4gcmVxdWVzdGVkIGFsYXJtcy4gIAogICAgICAqLwogICAgIHJ1bl9hbGFybXMoKTsKQEAgLTYyNyw3ICs3MDEsNyBAQAogCiAgICAgcmV0dXJuIGNvdW50OwogfQotCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BR0VOVF9DSEVDS19BTkRfUFJPQ0VTUyAqLwogCiAvKgogICogU2V0IHVwIHRoZSBhZGRyZXNzIGNhY2hlLiAgCkBAIC02ODMsNyArNzU3LDcgQEAKICAgICAvKgogICAgICAqIEZpcnN0IGdldCB0aGUgY3VycmVudCBhbmQgb2xkZXN0IGFsbG93YWJsZSB0aW1lc3RhbXBzCiAgICAgICovCi0gICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUqKSBOVUxMKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CiAgICAgYWdlZC50dl9zZWMgPSBub3cudHZfc2VjIC0gU05NUF9BRERSQ0FDSEVfTUFYQUdFOwogICAgIGFnZWQudHZfdXNlYyA9IG5vdy50dl91c2VjOwogCkBAIC03MDMsOCArNzc3LDggQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIGZvdW5kIGEgbWF0Y2gKICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBhZGRyQ2FjaGVbaV0ubGFzdEhpdCA9IG5vdzsKLSAgICAgICAgICAgICAgICBpZiAodGltZXJjbXAoJmFkZHJDYWNoZVtpXS5sYXN0SGl0LCAmYWdlZCwgPCkpCisgICAgICAgICAgICAgICAgYWRkckNhY2hlW2ldLmxhc3RIaXRNID0gbm93OworICAgICAgICAgICAgICAgIGlmICh0aW1lcmNtcCgmYWRkckNhY2hlW2ldLmxhc3RIaXRNLCAmYWdlZCwgPCkpCiAJCSAgICByYyA9IDE7IC8qIHNob3VsZCBoYXZlIGV4cGlyZWQsIHNvIGlzIG5ldyAqLwogCQllbHNlCiAJCSAgICByYyA9IDA7IC8qIG5vdCBleHBpcmVkLCBzbyBpcyBleGlzdGluZyBlbnRyeSAqLwpAQCAtNzE0LDcgKzc4OCw3IEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBVc2VkLCBidXQgbm90IHRoaXMgYWRkcmVzcy4gY2hlY2sgaWYgaXQncyBzdGFsZS4KICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAodGltZXJjbXAoJmFkZHJDYWNoZVtpXS5sYXN0SGl0LCAmYWdlZCwgPCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGltZXJjbXAoJmFkZHJDYWNoZVtpXS5sYXN0SGl0TSwgJmFnZWQsIDwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAqIFN0YWxlLCByZXVzZQogICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTczMiw4ICs4MDYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZGVzdCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBvbGRlc3QgPSBpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lcmNtcCgmYWRkckNhY2hlW2ldLmxhc3RIaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyQ2FjaGVbb2xkZXN0XS5sYXN0SGl0LCA8KSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZXJjbXAoJmFkZHJDYWNoZVtpXS5sYXN0SGl0TSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJDYWNoZVtvbGRlc3RdLmxhc3RIaXRNLCA8KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGVzdCA9IGk7CiAgICAgICAgICAgICAgICAgfSAvKiBmcmVzaCAqLwogICAgICAgICAgICAgfSAvKiB1c2VkLCBubyBtYXRjaCAqLwpAQCAtNzUwLDcgKzgyNCw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGFkZHJDYWNoZVt1bnVzZWRdLmFkZHIgPSBzdHJkdXAoYWRkcik7CiAgICAgICAgICAgICBhZGRyQ2FjaGVbdW51c2VkXS5zdGF0dXMgPSBTTk1QX0FERFJDQUNIRV9VU0VEOwotICAgICAgICAgICAgYWRkckNhY2hlW3VudXNlZF0ubGFzdEhpdCA9IG5vdzsKKyAgICAgICAgICAgIGFkZHJDYWNoZVt1bnVzZWRdLmxhc3RIaXRNID0gbm93OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiBPdGhlcndpc2UsIHJlcGxhY2Ugb2xkZXN0IGVudHJ5ICovCiAgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELApAQCAtNzYwLDcgKzgzNCw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZyZWUoYWRkckNhY2hlW29sZGVzdF0uYWRkcik7CiAgICAgICAgICAgICBhZGRyQ2FjaGVbb2xkZXN0XS5hZGRyID0gc3RyZHVwKGFkZHIpOwotICAgICAgICAgICAgYWRkckNhY2hlW29sZGVzdF0ubGFzdEhpdCA9IG5vdzsKKyAgICAgICAgICAgIGFkZHJDYWNoZVtvbGRlc3RdLmxhc3RIaXRNID0gbm93OwogICAgICAgICB9CiAgICAgICAgIHJjID0gMTsKICAgICB9CkBAIC03NzgsMTEgKzg1MiwxMyBAQAogICoKICAqIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5OyBub3QgdXNlZCBhbnl3aGVyZQogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUREUkNBQ0hFX0FHRQogdm9pZAogbmV0c25tcF9hZGRyY2FjaGVfYWdlKHZvaWQpCiB7CiAgICAgKHZvaWQpbmV0c25tcF9hZGRyY2FjaGVfYWRkKE5VTEwpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUREUkNBQ0hFX0FHRSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogbmV0c25tcF9hZ2VudF9jaGVja19wYWNrZXQKQEAgLTkxMyw5ICs5ODksMTEgQEAKICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfUkVTUE9OU0U6CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiICBSRVNQT05TRSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICIgIFNFVCBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfVFJBUDoKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICIgIFRSQVAgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MzMsNiArMTAxMSw3IEBACiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiICBSRVBPUlQgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMToKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICIgIElOVEVSTkFMIFJFU0VSVkUxIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTU2LDYgKzEwMzUsNyBAQAogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfVU5ETzoKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICIgIElOVEVSTkFMIFVORE8gbWVzc2FnZVxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiICBVTktOT1dOIG1lc3NhZ2UsIHR5cGU9JTAyWFxuIiwKQEAgLTEwNDcsNiArMTEyNywyNyBAQAogCQkJCSAgTkVUU05NUF9EU19BR0VOVF9GTEFHUyk7CiAgICAgcy0+aXNBdXRob3JpdGF0aXZlID0gU05NUF9TRVNTX0FVVEhPUklUQVRJVkU7CiAKKyAgICAvKiBPcHRpb25hbCBzdXBwbGltZW50YWwgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kCisgICAgICAgZmluYWwgY2FsbCB0byBhY3R1YWxseSBvcGVuIHRoZSB0cmFuc3BvcnQgKi8KKyAgICBpZiAobmV0c25tcF9zZXNzX2NvbmZpZ190cmFuc3BvcnQocy0+dHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sIHQpCisgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICBTTk1QX0ZSRUUocyk7CisgICAgICAgIFNOTVBfRlJFRShuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworCisgICAgaWYgKHQtPmZfb3BlbikKKyAgICAgICAgdCA9IHQtPmZfb3Blbih0KTsKKworICAgIGlmIChOVUxMID09IHQpIHsKKyAgICAgICAgU05NUF9GUkVFKHMpOworICAgICAgICBTTk1QX0ZSRUUobik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX09QRU5FRDsKKwogICAgIHNwID0gc25tcF9hZGQocywgdCwgbmV0c25tcF9hZ2VudF9jaGVja19wYWNrZXQsCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X2NoZWNrX3BhcnNlKTsKICAgICBpZiAoc3AgPT0gTlVMTCkgewpAQCAtMTE4Myw2ICsxMjg0LDcgQEAKICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgLyogIE5vIGVycm9yIGlmICEgTUFTVEVSX0FHRU5UICAqLwogICAgIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCiAgICAgLyoKICAgICAgKiBIYXZlIHNwZWNpZmljIGFnZW50IHBvcnRzIGJlZW4gc3BlY2lmaWVkPyAgCiAgICAgICovCkBAIC0xMjUxLDYgKzEzNTMsOCBAQAogCQkJIk5TQVBcbiIsIGNwdHIpKTsKICAgICAgICAgfQogICAgIH0gd2hpbGUoc3QgJiYgKnN0ICE9ICdcMCcpOworICAgIFNOTVBfRlJFRShidWYpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KIAogI2lmZGVmIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCiAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCkBAIC0xMjkxLDcgKzEzOTUsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsImFnZW50X3Nlc2lvbiAlMDhwIGNyZWF0ZWRcbiIsIGFzcCkpOworICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwiYWdlbnRfc2VzaW9uICU4cCBjcmVhdGVkXG4iLCBhc3ApKTsKICAgICBhc3AtPnNlc3Npb24gPSBzZXNzaW9uOwogICAgIGFzcC0+cGR1ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKICAgICBhc3AtPm9yaWdfcGR1ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKQEAgLTEzMTcsNyArMTQyMSw3IEBACiAgICAgaWYgKCFhc3ApCiAgICAgICAgIHJldHVybjsKIAotICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwiYWdlbnRfc2Vzc2lvbiAlMDhwIHJlbGVhc2VkXG4iLCBhc3ApKTsKKyAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsImFnZW50X3Nlc3Npb24gJThwIHJlbGVhc2VkXG4iLCBhc3ApKTsKIAogICAgIG5ldHNubXBfcmVtb3ZlX2Zyb21fZGVsZWdhdGVkKGFzcCk7CiAgICAgCkBAIC0xMzI5LDEyICsxNDMzLDggQEAKICAgICAgICAgc25tcF9mcmVlX3BkdShhc3AtPnBkdSk7CiAgICAgaWYgKGFzcC0+cmVxaW5mbykKICAgICAgICAgbmV0c25tcF9mcmVlX2FnZW50X3JlcXVlc3RfaW5mbyhhc3AtPnJlcWluZm8pOwotICAgIGlmIChhc3AtPnRyZWVjYWNoZSkgewotICAgICAgICBTTk1QX0ZSRUUoYXNwLT50cmVlY2FjaGUpOwotICAgIH0KLSAgICBpZiAoYXNwLT5idWxrY2FjaGUpIHsKLSAgICAgICAgU05NUF9GUkVFKGFzcC0+YnVsa2NhY2hlKTsKLSAgICB9CisgICAgU05NUF9GUkVFKGFzcC0+dHJlZWNhY2hlKTsKKyAgICBTTk1QX0ZSRUUoYXNwLT5idWxrY2FjaGUpOwogICAgIGlmIChhc3AtPnJlcXVlc3RzKSB7CiAgICAgICAgIGludCAgICAgICAgICAgICBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXNwLT52YmNvdW50OyBpKyspIHsKQEAgLTEzODksNyArMTQ4OSw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGFzcC0+bmV4dCA9IGFnZW50X2RlbGVnYXRlZF9saXN0OwogICAgICAgICAgICAgYWdlbnRfZGVsZWdhdGVkX2xpc3QgPSBhc3A7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJkZWxlZ2F0ZSBzZXNzaW9uID09ICUwOHBcbiIsIGFzcCkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiZGVsZWdhdGUgc2Vzc2lvbiA9PSAlOHBcbiIsIGFzcCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KQEAgLTE0MTYsNyArMTUxNiw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFnZW50X2RlbGVnYXRlZF9saXN0ID0gYXNwLT5uZXh0OwogCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgInJlbW92ZSBkZWxlZ2F0ZWQgc2Vzc2lvbiA9PSAlMDhwXG4iLCBhc3ApKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAicmVtb3ZlIGRlbGVnYXRlZCBzZXNzaW9uID09ICU4cFxuIiwgYXNwKSk7CiAKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpAQCAtMTQ2Myw3ICsxNTYzLDcgQEAKICAgICAgKi8KICAgICBpZihjb3VudCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJyZW1vdmVkICVkIGRlbGVnYXRlZCByZXF1ZXN0KHMpIGZvciBzZXNzaW9uICIKLSAgICAgICAgICAgICAgICAgICAgIiUwOHBcbiIsIGNvdW50LCBzZXNzKSk7CisgICAgICAgICAgICAgICAgICAgICIlOHBcbiIsIGNvdW50LCBzZXNzKSk7CiAgICAgICAgIG5ldHNubXBfY2hlY2tfb3V0c3RhbmRpbmdfYWdlbnRfcmVxdWVzdHMoKTsKICAgICB9CiAgICAgCkBAIC0xNTE5LDE1ICsxNjE5LDEyIEBACiBpbnQKIG5ldHNubXBfd3JhcF91cF9yZXF1ZXN0KG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqYXNwLCBpbnQgc3RhdHVzKQogewotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyX3B0cjsKLSAgICBpbnQgICAgICAgICAgICAgaTsKLQogICAgIC8qCiAgICAgICogaWYgdGhpcyByZXF1ZXN0IHdhcyBhIHNldCwgY2xlYXIgdGhlIGdsb2JhbCBub3cgdGhhdCB3ZSBhcmUKICAgICAgKiBkb25lLgogICAgICAqLwogICAgIGlmIChhc3AgPT0gbmV0c25tcF9wcm9jZXNzaW5nX3NldCkgewotICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJTRVQgcmVxdWVzdCBjb21wbGV0ZSwgYXNwID0gJTA4cFxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiU0VUIHJlcXVlc3QgY29tcGxldGUsIGFzcCA9ICU4cFxuIiwKICAgICAgICAgICAgICAgICAgICAgYXNwKSk7CiAgICAgICAgIG5ldHNubXBfcHJvY2Vzc2luZ19zZXQgPSBOVUxMOwogICAgIH0KQEAgLTE1NDEsNiArMTYzOCw3IEBACiAgICAgICAgICAgICBhc3AtPnN0YXR1cyA9IHN0YXR1czsKIAogICAgICAgICBzd2l0Y2ggKGFzcC0+cGR1LT5jb21tYW5kKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfQkVHSU46CiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMToKICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUyOgpAQCAtMTU1MCw2ICsxNjQ4LDcgQEAKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBzYXZlX3NldF9jYWNoZShhc3ApOwogICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX0dFVE5FWFQ6CiAgICAgICAgICAgICAgICAgX2ZpeF9lbmRvZm1pYnZpZXcoYXNwKTsKQEAgLTE1NjgsNiArMTY2Nyw3IEBACiAgICAgICAgICAqIHYxIHF1ZXJ5LiAgU2VlIFJGQzI1NzYgLSBzZWN0aW9uIDQuMwogICAgICAgICAgKi8KICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKChhc3AtPnBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19TRVQpICYmCiAgICAgICAgICAgICAoYXNwLT5wZHUtPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzEpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGFzcC0+c3RhdHVzKSB7CkBAIC0xNjAyLDggKzE3MDIsMTAgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmICgoYXNwLT5wZHUtPmNvbW1hbmQgIT0gU05NUF9NU0dfU0VUKSAmJgogICAgICAgICAgICAgKGFzcC0+cGR1LT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8xKSkgewotICAgICAgICAgICAgZm9yICh2YXJfcHRyID0gYXNwLT5wZHUtPnZhcmlhYmxlcywgaSA9IDE7Ci0gICAgICAgICAgICAgICAgIHZhcl9wdHIgIT0gTlVMTDsgdmFyX3B0ciA9IHZhcl9wdHItPm5leHRfdmFyaWFibGUsIGkrKykgeworICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJfcHRyID0gYXNwLT5wZHUtPnZhcmlhYmxlczsKKyAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgaSA9IDE7CisKKyAgICAgICAgICAgIHdoaWxlICh2YXJfcHRyICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcl9wdHItPnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTTk1QX05PU1VDSE9CSkVDVDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTTk1QX05PU1VDSElOU1RBTkNFOgpAQCAtMTYxNCw4ICsxNzE2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBhc3AtPmluZGV4ID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXJfcHRyID0gdmFyX3B0ci0+bmV4dF92YXJpYWJsZTsKKyAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNlbmRpZiAvKiBzbm1wdjEgc3VwcG9ydCAqLwogICAgIH0gLyoqIGlmIGFzcC0+cGR1ICovCiAKQEAgLTE2NjEsMTAgKzE3NjYsMTYgQEAKICAgICB9CiAKICAgICBpZiAoKHN0YXR1cyA9PSBTTk1QX0VSUl9OT0VSUk9SKSAmJiAoYXNwLT5wZHUpKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkoKGFzcC0+cGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1NFVCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVF9TTk1QSU5UT1RBTFNFVFZBUlMgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRfU05NUElOVE9UQUxSRVFWQVJTKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X3ZhcmJpbmRzKGFzcC0+cGR1LT52YXJpYWJsZXMpKTsKKyNlbHNlIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkoU1RBVF9TTk1QSU5UT1RBTFJFUVZBUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF92YXJiaW5kcyhhc3AtPnBkdS0+dmFyaWFibGVzKSk7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKICAgICB9IGVsc2UgewogICAgICAgICAvKgogICAgICAgICAgKiBVc2UgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0CkBAIC0xNzA5LDYgKzE4MjAsNyBAQAogICAgIHJldHVybiAxOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRFVNUF9TRVNTX0xJU1QKIHZvaWQKIGR1bXBfc2Vzc19saXN0KHZvaWQpCiB7CkBAIC0xNzE2LDE3ICsxODI4LDE4IEBACiAKICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJEVU1QIGFnZW50X3Nlc3NfbGlzdCAtPiAiKSk7CiAgICAgZm9yIChhID0gYWdlbnRfc2Vzc2lvbl9saXN0OyBhICE9IE5VTEw7IGEgPSBhLT5uZXh0KSB7Ci0gICAgICAgIERFQlVHTVNHKCgic25tcF9hZ2VudCIsICIlMDhwW3Nlc3Npb24gJTA4cF0gLT4gIiwgYSwgYS0+c2Vzc2lvbikpOworICAgICAgICBERUJVR01TRygoInNubXBfYWdlbnQiLCAiJThwW3Nlc3Npb24gJThwXSAtPiAiLCBhLCBhLT5zZXNzaW9uKSk7CiAgICAgfQogICAgIERFQlVHTVNHKCgic25tcF9hZ2VudCIsICJbTklMXVxuIikpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRFVNUF9TRVNTX0xJU1QgKi8KIAogdm9pZAogbmV0c25tcF9yZW1vdmVfYW5kX2ZyZWVfYWdlbnRfc25tcF9zZXNzaW9uKG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqYXNwKQogewogICAgIG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqYSwgKipwcmV2TmV4dCA9ICZhZ2VudF9zZXNzaW9uX2xpc3Q7CiAKLSAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJSRU1PVkUgc2Vzc2lvbiA9PSAlMDhwXG4iLCBhc3ApKTsKKyAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJSRU1PVkUgc2Vzc2lvbiA9PSAlOHBcbiIsIGFzcCkpOwogCiAgICAgZm9yIChhID0gYWdlbnRfc2Vzc2lvbl9saXN0OyBhICE9IE5VTEw7IGEgPSAqcHJldk5leHQpIHsKICAgICAgICAgaWYgKGEgPT0gYXNwKSB7CkBAIC0xNzQ4LDYgKzE4NjEsNyBAQAogICAgIH0KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZSRUVfQUdFTlRfU05NUF9TRVNTSU9OX0JZX1NFU1NJT04KIHZvaWQKIG5ldHNubXBfZnJlZV9hZ2VudF9zbm1wX3Nlc3Npb25fYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmcmVlX3JlcXVlc3QpCkBAIC0xNzU1LDcgKzE4NjksNyBAQAogewogICAgIG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqYSwgKm5leHQsICoqcHJldk5leHQgPSAmYWdlbnRfc2Vzc2lvbl9saXN0OwogCi0gICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiUkVNT1ZFIHNlc3Npb24gPT0gJTA4cFxuIiwgc2VzcykpOworICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIlJFTU9WRSBzZXNzaW9uID09ICU4cFxuIiwgc2VzcykpOwogCiAgICAgZm9yIChhID0gYWdlbnRfc2Vzc2lvbl9saXN0OyBhICE9IE5VTEw7IGEgPSBuZXh0KSB7CiAgICAgICAgIGlmIChhLT5zZXNzaW9uID09IHNlc3MpIHsKQEAgLTE3NjgsNiArMTg4Miw3IEBACiAgICAgICAgIH0KICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GUkVFX0FHRU5UX1NOTVBfU0VTU0lPTl9CWV9TRVNTSU9OICovCiAKIC8qKiBoYW5kbGVzIGFuIGluY29taW5nIFNOTVAgcGFja2V0IGludG8gdGhlIGFnZW50ICovCiBpbnQKQEAgLTE4NzQsNyArMTk4OSw3IEBACiAgICAgLyoKICAgICAgKiBkb25lIAogICAgICAqLwotICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgImVuZCBvZiBoYW5kbGVfc25tcF9wYWNrZXQsIGFzcCA9ICUwOHBcbiIsCisgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiZW5kIG9mIGhhbmRsZV9zbm1wX3BhY2tldCwgYXNwID0gJThwXG4iLAogICAgICAgICAgICAgICAgIGFzcCkpOwogICAgIHJldHVybiByYzsKIH0KQEAgLTE4ODUsNyArMjAwMCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZSAqdHApCiB7CiAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBjYWNoZWlkOwogCiAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiYWRkX3ZiX3RvX2NhY2hlKCU4cCwgJWQsICIsIGFzcCwgdmJjb3VudCkpOwogICAgIERFQlVHTVNHT0lEKCgic25tcF9hZ2VudCIsIHZhcmJpbmRfcHRyLT5uYW1lLApAQCAtMTk0OSw3ICsyMDYzLDkgQEAKICAgICAgICAgICAgIHZhcmJpbmRfcHRyLT50eXBlID0gU05NUF9FTkRPRk1JQlZJRVc7CiAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBTTk1QX01TR19TRVQ6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGNhc2UgU05NUF9NU0dfR0VUOgogICAgICAgICAgICAgdmFyYmluZF9wdHItPnR5cGUgPSBTTk1QX05PU1VDSE9CSkVDVDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1OCw2ICsyMDc0LDggQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgLyogc2hvdWxkbid0IGdldCBoZXJlICovCiAgICAgICAgIH0KICAgICB9IGVsc2UgeworICAgICAgICBpbnQgY2FjaGVpZDsKKwogICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJ0cC0+c3RhcnQgIikpOwogICAgICAgICBERUJVR01TR09JRCgoInNubXBfYWdlbnQiLCB0cC0+c3RhcnRfYSwgdHAtPnN0YXJ0X2xlbikpOwogICAgICAgICBERUJVR01TRygoInNubXBfYWdlbnQiLCAiLCB0cC0+ZW5kICIpKTsKQEAgLTE5ODMsOCArMjEwMSwxMCBAQAogICAgICAgICAvKgogICAgICAgICAgKiBmb3Igbm9uLVNFVCBtb2Rlcywgc2V0IHRoZSB0eXBlIHRvIE5VTEwgCiAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKCFNT0RFX0lTX1NFVChhc3AtPnBkdS0+Y29tbWFuZCkpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6YXNwIiwgImFzcCAlcCByZXFpbmZvICVwIGFzc2lnbmVkIHRvIHJlcXVlc3RcbiIsCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTphc3AiLCAiYXNwICVwIHJlcWluZm8gJXAgYXNzaWduZWQgdG8gcmVxdWVzdFxuIiwKICAgICAgICAgICAgICAgICAgICAgYXNwLCBhc3AtPnJlcWluZm8pKTsKICAgICAgICAgICAgIGlmICh2YXJiaW5kX3B0ci0+dHlwZSA9PSBBU05fUFJJVl9JTkNMX1JBTkdFKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAidmFyYmluZCAlZCBpcyBpbmNsdXNpdmVcbiIsCkBAIC0xOTkyLDcgKzIxMTIsOSBAQAogICAgICAgICAgICAgICAgIHJlcXVlc3QtPmluY2x1c2l2ZSA9IDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJiaW5kX3B0ci0+dHlwZSA9IEFTTl9OVUxMOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIHBsYWNlIHRoZW0gaW4gYSBjYWNoZSAKQEAgLTIwMzUsNyArMjE1Nyw3IEBACiAgICAgICAgICAgICAgICAgYXNwLT50cmVlY2FjaGVfbGVuID0KICAgICAgICAgICAgICAgICAgICAgKGFzcC0+dHJlZWNhY2hlX2xlbiArIENBQ0hFX0dST1dfU0laRSk7CiAgICAgICAgICAgICAgICAgYXNwLT50cmVlY2FjaGUgPQotICAgICAgICAgICAgICAgICAgICByZWFsbG9jKGFzcC0+dHJlZWNhY2hlLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF90cmVlX2NhY2hlICopcmVhbGxvYyhhc3AtPnRyZWVjYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF90cmVlX2NhY2hlKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNwLT50cmVlY2FjaGVfbGVuKTsKICAgICAgICAgICAgICAgICBpZiAoYXNwLT50cmVlY2FjaGUgPT0gTlVMTCkKQEAgLTIxNjMsNyArMjI4NSw3IEBACiAgICAgaWYgKGFzcC0+dHJlZWNhY2hlID09IE5VTEwgJiYgYXNwLT50cmVlY2FjaGVfbGVuID09IDApIHsKICAgICAgICAgYXNwLT50cmVlY2FjaGVfbGVuID0gU05NUF9NQVgoMSArIGFzcC0+dmJjb3VudCAvIDQsIDE2KTsKICAgICAgICAgYXNwLT50cmVlY2FjaGUgPQotICAgICAgICAgICAgY2FsbG9jKGFzcC0+dHJlZWNhY2hlX2xlbiwgc2l6ZW9mKG5ldHNubXBfdHJlZV9jYWNoZSkpOworICAgICAgICAgICAgKG5ldHNubXBfdHJlZV9jYWNoZSAqKWNhbGxvYyhhc3AtPnRyZWVjYWNoZV9sZW4sIHNpemVvZihuZXRzbm1wX3RyZWVfY2FjaGUpKTsKICAgICAgICAgaWYgKGFzcC0+dHJlZWNhY2hlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KQEAgLTIyMDQsOCArMjMyNiw4IEBACiAgICAgICAgICAgICAgKiByZXN1bHQgdmVjdG9yCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmIChtYXhyZXNwb25zZXMgPCAwIHx8Ci0gICAgICAgICAgICAgICAgbWF4cmVzcG9uc2VzID4gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgdmFyYmluZF9saXN0ICopKQotICAgICAgICAgICAgICAgIG1heHJlc3BvbnNlcyA9IElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHZhcmJpbmRfbGlzdCAqKTsKKyAgICAgICAgICAgICAgICBtYXhyZXNwb25zZXMgPiAoaW50KShJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCB2YXJiaW5kX2xpc3QgKikpKQorICAgICAgICAgICAgICAgIG1heHJlc3BvbnNlcyA9IChpbnQpKElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHZhcmJpbmRfbGlzdCAqKSk7CiAKICAgICAgICAgICAgIC8qIGVuc3VyZSB0aGF0IHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXBldGl0aW9ucyB3aWxsIGZpdCBpbiB0aGUKICAgICAgICAgICAgICAqIHJlc3VsdCB2ZWN0b3IKQEAgLTIzMTksNiArMjQ0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgU05NUF9NU0dfU0VUOgogICAgICAgICAgICAgdmlldyA9IGluX2Ffdmlldyh2YXJiaW5kX3B0ci0+bmFtZSwgJnZhcmJpbmRfcHRyLT5uYW1lX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNwLT5wZHUsIHZhcmJpbmRfcHRyLT50eXBlKTsKQEAgLTIzMjcsNiArMjQ1MCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQUNDRVNTOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgY2FzZSBTTk1QX01TR19HRVRORVhUOgogICAgICAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6CkBAIC0yMzc1LDYgKzI0OTksMTAgQEAKICAgICBhc3AtPnRyZWVjYWNoZSA9CiAgICAgICAgIChuZXRzbm1wX3RyZWVfY2FjaGUgKikgY2FsbG9jKGFzcC0+dHJlZWNhY2hlX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfdHJlZV9jYWNoZSkpOworCisgICAgaWYgKGFzcC0+dHJlZWNhY2hlID09IE5VTEwpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKICAgICBhc3AtPnRyZWVjYWNoZV9udW0gPSAtMTsKICAgICBpZiAoYXNwLT5jYWNoZV9zdG9yZSkgewogICAgICAgICBuZXRzbm1wX2ZyZWVfY2FjaGVtYXAoYXNwLT5jYWNoZV9zdG9yZSk7CkBAIC0yMzkzLDEwICsyNTIxLDcgQEAKICAgICAgICAgICAgIGlmICghbmV0c25tcF9hZGRfdmFyYmluZF90b19jYWNoZShhc3AsIGFzcC0+cmVxdWVzdHNbaV0uaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNwLT5yZXF1ZXN0c1tpXS5yZXF1ZXN0dmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNwLT5yZXF1ZXN0c1tpXS5zdWJ0cmVlLT5uZXh0KSkgewotICAgICAgICAgICAgICAgIGlmIChvbGRfdHJlZWNhY2hlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKG9sZF90cmVlY2FjaGUpOwotICAgICAgICAgICAgICAgICAgICBvbGRfdHJlZWNhY2hlID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKG9sZF90cmVlY2FjaGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGFzcC0+cmVxdWVzdHNbaV0ucmVxdWVzdHZiLT50eXBlID09IEFTTl9QUklWX1JFVFJZKSB7CiAgICAgICAgICAgICAvKgpAQCAtMjQwNiwxNyArMjUzMSwxMiBAQAogICAgICAgICAgICAgaWYgKCFuZXRzbm1wX2FkZF92YXJiaW5kX3RvX2NhY2hlKGFzcCwgYXNwLT5yZXF1ZXN0c1tpXS5pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3AtPnJlcXVlc3RzW2ldLnJlcXVlc3R2YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3AtPnJlcXVlc3RzW2ldLnN1YnRyZWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZF90cmVlY2FjaGUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob2xkX3RyZWVjYWNoZSk7Ci0gICAgICAgICAgICAgICAgICAgIG9sZF90cmVlY2FjaGUgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob2xkX3RyZWVjYWNoZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob2xkX3RyZWVjYWNoZSAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRShvbGRfdHJlZWNhY2hlKTsKLSAgICB9CisgICAgU05NUF9GUkVFKG9sZF90cmVlY2FjaGUpOwogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCkBAIC0yNDI5LDYgKzI1NDksNyBAQAogICAgIH0KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFTEVURV9TVUJUUkVFX0NBQ0hFCiB2b2lkCiBuZXRzbm1wX2RlbGV0ZV9zdWJ0cmVlX2NhY2hlKG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqYXNwKQogewpAQCAtMjQ0MSw3ICsyNTYyLDkgQEAKICAgICAgICAgYXNwLT50cmVlY2FjaGVfbnVtLS07CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVMRVRFX1NVQlRSRUVfQ0FDSEUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX0FMTF9SRVFVRVNUU19FUlJPUgogLyoKICAqIGNoZWNrIGFsbCByZXF1ZXN0cyBmb3IgZXJyb3JzCiAgKgpAQCAtMjQ3Miw3ICsyNTk1LDkgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfQUxMX1JFUVVFU1RTX0VSUk9SICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19SRVFVRVNUU19FUlJPUgogaW50CiBuZXRzbm1wX2NoZWNrX3JlcXVlc3RzX2Vycm9yKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKQEAgLTI0ODUsNiArMjYxMCw3IEBACiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfUkVRVUVTVFNfRVJST1IgKi8KIAogaW50CiBuZXRzbm1wX2NoZWNrX3JlcXVlc3RzX3N0YXR1cyhuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmFzcCwKQEAgLTI1NjAsNiArMjY4Niw3IEBACiAgICAgICAgICAqIGVycm9ycykuCiAgICAgICAgICAqLwogICAgICAgICBzd2l0Y2ggKGFzcC0+bW9kZSkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiAgICAgICAgICAgICByZXRzdGF0dXMgPSBuZXRzbm1wX2NoZWNrX3JlcXVlc3RzX3N0YXR1cyhhc3AsCiAJCQkJCQkgICAgICBhc3AtPnRyZWVjYWNoZVtpXS4KQEAgLTI1NzMsNiArMjcwMCw3IEBACiAJCQkJCQkgICAgICByZXF1ZXN0c19iZWdpbiwKIAkJCQkJCSAgICAgIFNOTVBfRVJSX1VORE9GQUlMRUQpOwogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHN0YXR1cyA9IG5ldHNubXBfY2hlY2tfcmVxdWVzdHNfc3RhdHVzKGFzcCwKQEAgLTI2ODMsNiArMjgxMSw3IEBACiAgICAgICAgICAqIGlmIHRoZSB0b3AgcmVxdWVzdCBpcyBhIHNldCwgZG9uJ3QgcG9wIGl0CiAgICAgICAgICAqIG9mZiBpZiB0aGVyZSBhcmUgZGVsZWdhdGVkIHJlcXVlc3RzCiAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKChuZXRzbm1wX2FnZW50X3F1ZXVlZF9saXN0LT5wZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfU0VUKSAmJgogICAgICAgICAgICAgKGFnZW50X2RlbGVnYXRlZF9saXN0KSkgewogCkBAIC0yNjkwLDkgKzI4MTksMTAgQEAKIAogICAgICAgICAgICAgbmV0c25tcF9wcm9jZXNzaW5nX3NldCA9IG5ldHNubXBfYWdlbnRfcXVldWVkX2xpc3Q7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJTRVQgcmVxdWVzdCByZW1haW5zIHF1ZXVlZCB3aGlsZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGVsZWdhdGVkIHJlcXVlc3RzIGZpbmlzaCwgYXNwID0gJTA4cFxuIiwgYXNwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZWdhdGVkIHJlcXVlc3RzIGZpbmlzaCwgYXNwID0gJThwXG4iLCBhc3ApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgLyoKICAgICAgICAgICogcG9wIHRoZSBmaXJzdCByZXF1ZXN0IGFuZCBwcm9jZXNzIGl0CkBAIC0yNzAwLDcgKzI4MzAsNyBAQAogICAgICAgICBhc3AgPSBuZXRzbm1wX2FnZW50X3F1ZXVlZF9saXN0OwogICAgICAgICBuZXRzbm1wX2FnZW50X3F1ZXVlZF9saXN0ID0gYXNwLT5uZXh0OwogICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsCi0gICAgICAgICAgICAgICAgICAgICJwcm9jZXNzaW5nIHF1ZXVlZCByZXF1ZXN0LCBhc3AgPSAlMDhwXG4iLCBhc3ApKTsKKyAgICAgICAgICAgICAgICAgICAgInByb2Nlc3NpbmcgcXVldWVkIHJlcXVlc3QsIGFzcCA9ICU4cFxuIiwgYXNwKSk7CiAKICAgICAgICAgbmV0c25tcF9oYW5kbGVfcmVxdWVzdChhc3AsIGFzcC0+c3RhdHVzKTsKIApAQCAtMjc0Myw3ICsyODczLDcgQEAKIHsKICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzID0gU05NUF9FUlJfTk9FUlJPUjsKIAotICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgInByb2Nlc3NpbmcgZGVsZWdhdGVkIHJlcXVlc3QsIGFzcCA9ICUwOHBcbiIsCisgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAicHJvY2Vzc2luZyBkZWxlZ2F0ZWQgcmVxdWVzdCwgYXNwID0gJThwXG4iLAogICAgICAgICAgICAgICAgIGFzcCkpOwogCiAgICAgc3dpdGNoIChhc3AtPm1vZGUpIHsKQEAgLTI3NjQsNiArMjg5NCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiAgICAgICAgIG5ldHNubXBfY2hlY2tfYWxsX3JlcXVlc3RzX3N0YXR1cyhhc3AsIFNOTVBfRVJSX0NPTU1JVEZBSUxFRCk7CiAgICAgICAgIGdvdG8gc2V0dG9wOwpAQCAtMjc5OSw2ICsyOTMwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0yOTkyLDkgKzMxMjQsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7ICAgICAgLyogc2hvdWxkIG5ldmVyIHJlYWxseSBoYXBwZW4gKi8KICAgICAgICAgfQogICAgIH0KKyAgICBpZiAoIW5ldHNubXBfcnVubmluZykgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogaGFuZGxlX3NldChuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmFzcCkKIHsKQEAgLTMwOTIsNiArMzIyOCw3IEBACiAgICAgfQogICAgIHJldHVybiBhc3AtPnN0YXR1czsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogaW50CiBuZXRzbm1wX2hhbmRsZV9yZXF1ZXN0KG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqYXNwLCBpbnQgc3RhdHVzKQpAQCAtMzExMiwxMyArMzI0OSwxNCBAQAogICAgICAgICAgICAgbmV0c25tcF9hZGRfcXVldWVkKGFzcCk7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWVzdCBxdWV1ZWQgd2hpbGUgcHJvY2Vzc2luZyBzZXQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJhc3AgPSAlMDhwXG4iLCBhc3ApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJhc3AgPSAlOHBcbiIsIGFzcCkpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KIAogICAgICAgICAvKgogICAgICAgICAgKiBjaGVjayBmb3Igc2V0IHJlcXVlc3QKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAoYXNwLT5wZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfU0VUKSB7CiAgICAgICAgICAgICBuZXRzbm1wX3Byb2Nlc3Npbmdfc2V0ID0gYXNwOwogCkBAIC0zMTI4LDEyICszMjY2LDEzIEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmIChhZ2VudF9kZWxlZ2F0ZWRfbGlzdCkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIlNFVCByZXF1ZXN0IHF1ZXVlZCB3aGlsZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGVnYXRlZCByZXF1ZXN0cyBmaW5pc2gsIGFzcCA9ICUwOHBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGVnYXRlZCByZXF1ZXN0cyBmaW5pc2gsIGFzcCA9ICU4cFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3ApKTsKICAgICAgICAgICAgICAgICBuZXRzbm1wX2FkZF9xdWV1ZWQoYXNwKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIC8qCkBAIC0zMTg1LDYgKzMzMjQsNyBAQAogICAgICAqLwogICAgIHN3aXRjaCAoYXNwLT5wZHUtPmNvbW1hbmQpIHsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9BQ1RJT046CiAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfQ09NTUlUOgpAQCAtMzE5NCw2ICszMzM0LDcgQEAKICAgICAgICAgaWYgKHN0YXR1cyAhPSBTTk1QX0VSUl9OT0VSUk9SKQogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBjYXNlIFNOTVBfTVNHX0dFVDoKICAgICBjYXNlIFNOTVBfTVNHX0dFVE5FWFQ6CkBAIC0zMjE3LDggKzMzNTgsMTAgQEAKICAgICAgICAgICogZmFsbCB0aHJvdWdoIAogICAgICAgICAgKi8KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9CRUdJTjoKICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMToKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBkZWZhdWx0OgogICAgICAgICBhc3AtPnZiY291bnQgPSBjb3VudF92YXJiaW5kcyhhc3AtPnBkdS0+dmFyaWFibGVzKTsKICAgICAgICAgaWYgKGFzcC0+dmJjb3VudCkgLyogZWZlbmNlIGRvZXNuJ3QgbGlrZSAwIHNpemUgYWxsb2NzICovCkBAIC0zMzA4LDYgKzM0NTEsNyBAQAogICAgICAgICBzdGF0dXMgPSBoYW5kbGVfZ2V0bmV4dF9sb29wKGFzcCk7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUF9NU0dfU0VUOgogI2lmZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CkBAIC0zMzM2LDYgKzM0ODAsNyBAQAogICAgICAgICAgKiBhc3AgcmVsYXRlZCBjYWNoZSBpcyBzYXZlZCBpbiBjbGVhbnVwIAogICAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBjYXNlIFNOTVBfTVNHX1JFU1BPTlNFOgogICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9TTk1QSU5HRVRSRVNQT05TRVMpOwpAQCAtMzM4NSw3ICszNTMwLDcgQEAKICAgICAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgICAgIGNhc2UgTU9ERV9HRVRCVUxLOgogICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT50eXBlID0gZXJyb3JfdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBUaGVzZSBhcmUgdGVjaG5pY2FsbHkgaWxsZWdhbCB0byBzZXQgYnkgdGhlCkBAIC0zMzk4LDkgKzM1NDMsMTUgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1ZBTFVFOwogICAgICAgICAgICAgICovCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxOgorICAgICAgICAgICAgcmVxdWVzdC0+c3RhdHVzID0gU05NUF9FUlJfTk9DUkVBVElPTjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXF1ZXN0LT5zdGF0dXMgPSBTTk1QX0VSUl9OT1NVQ0hOQU1FOyAgICAgIC8qIFdXVzogY29ycmVjdD8gKi8KLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBuZXZlciBnZXQgaGVyZSAqLwogCkBAIC0zNDIxLDcgKzM1NzIsNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICByZXF1ZXN0LT5zdGF0dXMgPSBlcnJvcl92YWx1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KQEAgLTM0NDAsNiArMzU5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl92YWx1ZSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRVFVRVNUX1NFVF9FUlJPUl9JRFgKIC8qKiBzZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCB3aXRoaW4gYSByZXF1ZXN0IGxpc3QKICAqIEBwYXJhbSByZXF1ZXN0IGhlYWQgb2YgdGhlIHJlcXVlc3QgbGlzdAogICogQHBhcmFtIGVycm9yX3ZhbHVlIGVycm9yIHZhbHVlIGZvciByZXF1ZXN0CkBAIC0zNDY3LDYgKzM2MTksNyBAQAogICAgIHJldHVybiBfcmVxdWVzdF9zZXRfZXJyb3IocmVxLCByZXF1ZXN0LT5hZ2VudF9yZXFfaW5mby0+bW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3ZhbHVlKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFUVVFU1RfU0VUX0VSUk9SX0lEWCAqLwogCiAvKiogc2V0IGVycm9yIGZvciBhbGwgcmVxdWVzdHMKICAqIEBwYXJhbSByZXF1ZXN0cyByZXF1ZXN0IGxpc3QKQEAgLTM1MDEsMTAzICszNjU0LDEzMSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgJ3N5c1VwVGltZScgYXQgdGhlIGdpdmVuIG1hcmtlciAKLSAgICAgICAgICAgICAgICAgKi8KKy8qKgorICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG0gYW5kIHRoZSBhZ2VudCBzdGFydCB0aW1lIGluIGh1bmRyZWR0aHMgb2YKKyAqIGEgc2Vjb25kLgorICogXGRlcHJlY2F0ZWQgRG9uJ3QgdXNlIGluIG5ldyBjb2RlLgorICoKKyAqIEBwYXJhbVtpbl0gcG0gQW4gYWJzb2x1dGUgdGltZSBhcyBlLmcuIHJlcG9ydGVkIGJ5IGdldHRpbWVvZmRheSgpLgorICovCiB1X2xvbmcKIG5ldHNubXBfbWFya2VyX3VwdGltZShtYXJrZXJfdCBwbSkKIHsKICAgICB1X2xvbmcgICAgICAgICAgcmVzOwotICAgIG1hcmtlcl90ICAgICAgICBzdGFydCA9IChtYXJrZXJfdCkgJiBzdGFydHRpbWU7CisgICAgY29uc3RfbWFya2VyX3QgIHN0YXJ0ID0gbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCk7CiAKICAgICByZXMgPSB1YXRpbWVfaGRpZmYoc3RhcnQsIHBtKTsKLSAgICByZXR1cm4gcmVzOyAgICAgICAgICAgICAgICAgLyogYXRpbWVfZGlmZiB3b3JrcyBpbiBtc2VjLCBub3QgY3NlYyAqLworICAgIHJldHVybiByZXM7CiB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzdHJ1Y3QgdGltZXZhbCBlcXVpdmFsZW50cyBvZiB0aGVzZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqCisgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0diBhbmQgdGhlIGFnZW50IHN0YXJ0IHRpbWUgaW4gaHVuZHJlZHRocyBvZgorICogYSBzZWNvbmQuCisgKgorICogXGRlcHJlY2F0ZWQgVXNlIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpIGluc3RlYWQuCisgKgorICogQHBhcmFtW2luXSB0diBBbiBhYnNvbHV0ZSB0aW1lIGFzIGUuZy4gcmVwb3J0ZWQgYnkgZ2V0dGltZW9mZGF5KCkuCisgKi8KIHVfbG9uZwogbmV0c25tcF90aW1ldmFsX3VwdGltZShzdHJ1Y3QgdGltZXZhbCAqIHR2KQogewogICAgIHJldHVybiBuZXRzbm1wX21hcmtlcl91cHRpbWUoKG1hcmtlcl90KSB0dik7CiB9CiAKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiAnc3lzVXBUaW1lJyAKLSAgICAgICAgICAgICAgICAgKi8KKworc3RydWN0IHRpbWV2YWwgIHN0YXJ0dGltZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWVNOworCisvKioKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIGluIHdoaWNoIHRoZSBOZXQtU05NUCBzdGFydCB0aW1lIGhhcworICogYmVlbiBzdG9yZWQuCisgKgorICogQG5vdGUgVXNlIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKSBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24gaWYgeW91IG5lZWQKKyAqICAgdG8ga25vdyBob3cgbXVjaCB0aW1lIGVsYXBzZWQgc2luY2UgbmV0c25tcF9zZXRfYWdlbnRfc3RhcnR0aW1lKCkgaGFzIGJlZW4KKyAqICAgY2FsbGVkLgorICovCitjb25zdF9tYXJrZXJfdCAgICAgICAgCituZXRzbm1wX2dldF9hZ2VudF9zdGFydHRpbWUodm9pZCkKK3sKKyAgICByZXR1cm4gJnN0YXJ0dGltZTsKK30KKworLyoqCisgKiBSZXBvcnQgdGhlIHRpbWUgdGhhdCBlbGFwc2VkIHNpbmNlIHRoZSBhZ2VudCBzdGFydCB0aW1lIGluIGh1bmRyZWR0aHMgb2YgYQorICogc2Vjb25kLgorICoKKyAqIEBzZWUgU2VlIGFsc28gbmV0c25tcF9zZXRfYWdlbnRfc3RhcnR0aW1lKCkuCisgKi8KK3VpbnQ2NF90CituZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKHZvaWQpCit7CisgICAgc3RydWN0IHRpbWV2YWwgbm93LCBkZWx0YTsKKworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKKyAgICBORVRTTk1QX1RJTUVSU1VCKCZub3csICZzdGFydHRpbWVNLCAmZGVsdGEpOworICAgIHJldHVybiBkZWx0YS50dl9zZWMgKiAodWludDY0X3QpMTAwICsgZGVsdGEudHZfdXNlYyAvIDEwMDAwOworfQorCisvKioKKyAqIFNldCB0aGUgdGltZSBhdCB3aGljaCBOZXQtU05NUCBzdGFydGVkIGVpdGhlciB0byB0aGUgY3VycmVudCB0aW1lCisgKiAoaWYgcyA9PSBOVUxMKSBvciB0byAqcyAoaWYgcyBpcyBub3QgTlVMTCkuCisgKgorICogQHNlZSBTZWUgYWxzbyBuZXRzbm1wX3NldF9hZ2VudF91cHRpbWUoKS4KKyAqLwordm9pZCAgICAgICAgICAgIAorbmV0c25tcF9zZXRfYWdlbnRfc3RhcnR0aW1lKG1hcmtlcl90IHMpCit7CisgICAgaWYgKHMpIHsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgbm93QSwgbm93TTsKKworICAgICAgICBzdGFydHRpbWUgPSAqKHN0cnVjdCB0aW1ldmFsKilzOworICAgICAgICBnZXR0aW1lb2ZkYXkoJm5vd0EsIE5VTEwpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vd00pOworICAgICAgICBORVRTTk1QX1RJTUVSU1VCKCZzdGFydHRpbWUsICZub3dBLCAmc3RhcnR0aW1lTSk7CisgICAgICAgIE5FVFNOTVBfVElNRVJBREQoJnN0YXJ0dGltZU0sICZub3dNLCAmc3RhcnR0aW1lTSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZzdGFydHRpbWUsIE5VTEwpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnN0YXJ0dGltZU0pOworICAgIH0KK30KKworCisvKioKKyAqIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiAnc3lzVXBUaW1lJyAKKyAqLwogdV9sb25nCiBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUodm9pZCkKIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwotICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKyAgICBzdHJ1Y3QgdGltZXZhbCBub3csIGRlbHRhOwogCi0gICAgcmV0dXJuIG5ldHNubXBfdGltZXZhbF91cHRpbWUoJm5vdyk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOworICAgIE5FVFNOTVBfVElNRVJTVUIoJm5vdywgJnN0YXJ0dGltZU0sICZkZWx0YSk7CisgICAgcmV0dXJuIGRlbHRhLnR2X3NlYyAqIDEwMFVMICsgZGVsdGEudHZfdXNlYyAvIDEwMDAwOwogfQogCi0KLQotTkVUU05NUF9JTkxJTkUgdm9pZAotbmV0c25tcF9hZ2VudF9hZGRfbGlzdF9kYXRhKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKm5vZGUpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0VUX0FHRU5UX1VQVElNRQorLyoqCisgKiBTZXQgdGhlIHN0YXJ0IHRpbWUgZnJvbSB3aGljaCAnc3lzVXBUaW1lJyBpcyBjb21wdXRlZC4KKyAqCisgKiBAcGFyYW1baW5dIGhzZWMgTmV3IHN5c1VwVGltZSBpbiBodW5kcmVkdGhzIG9mIGEgc2Vjb25kLgorICoKKyAqIEBzZWUgU2VlIGFsc28gbmV0c25tcF9zZXRfYWdlbnRfc3RhcnR0aW1lKCkuCisgKi8KK3ZvaWQKK25ldHNubXBfc2V0X2FnZW50X3VwdGltZSh1X2xvbmcgaHNlYykKIHsKLSAgICBpZiAoYXJpKSB7Ci0JaWYgKGFyaS0+YWdlbnRfZGF0YSkgewotICAgICAgICAgICAgbmV0c25tcF9hZGRfbGlzdF9kYXRhKCZhcmktPmFnZW50X2RhdGEsIG5vZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXJpLT5hZ2VudF9kYXRhID0gbm9kZTsKLQl9Ci0gICAgfQotfQorICAgIHN0cnVjdCB0aW1ldmFsICBub3dBLCBub3dNOworICAgIHN0cnVjdCB0aW1ldmFsICBuZXdfdXB0aW1lOwogCi1ORVRTTk1QX0lOTElORSBpbnQKLW5ldHNubXBfYWdlbnRfcmVtb3ZlX2xpc3RfZGF0YShuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBuYW1lKQotewotICAgIGlmICgoTlVMTCA9PSBhcmkpIHx8IChOVUxMID09IGFyaS0+YWdlbnRfZGF0YSkpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgcmV0dXJuIG5ldHNubXBfcmVtb3ZlX2xpc3Rfbm9kZSgmYXJpLT5hZ2VudF9kYXRhLCBuYW1lKTsKKyAgICBnZXR0aW1lb2ZkYXkoJm5vd0EsIE5VTEwpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93TSk7CisgICAgbmV3X3VwdGltZS50dl9zZWMgPSBoc2VjIC8gMTAwOworICAgIG5ld191cHRpbWUudHZfdXNlYyA9ICh1aW50MzJfdCkoaHNlYyAtIG5ld191cHRpbWUudHZfc2VjICogMTAwKSAqIDEwMDAwTDsKKyAgICBORVRTTk1QX1RJTUVSU1VCKCZub3dBLCAmbmV3X3VwdGltZSwgJnN0YXJ0dGltZSk7CisgICAgTkVUU05NUF9USU1FUlNVQigmbm93TSwgJm5ld191cHRpbWUsICZzdGFydHRpbWVNKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFVF9BR0VOVF9VUFRJTUUgKi8KIAotTkVUU05NUF9JTkxJTkUgdm9pZCAgICAqCi1uZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQotewotICAgIGlmIChhcmkpIHsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfZ2V0X2xpc3RfZGF0YShhcmktPmFnZW50X2RhdGEsIG5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotTkVUU05NUF9JTkxJTkUgdm9pZAotbmV0c25tcF9mcmVlX2FnZW50X2RhdGFfc2V0KG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmkpCi17Ci0gICAgaWYgKGFyaSkgewotICAgICAgICBuZXRzbm1wX2ZyZWVfbGlzdF9kYXRhKGFyaS0+YWdlbnRfZGF0YSk7Ci0gICAgfQotfQotCi1ORVRTTk1QX0lOTElORSB2b2lkCi1uZXRzbm1wX2ZyZWVfYWdlbnRfZGF0YV9zZXRzKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmkpCi17Ci0gICAgaWYgKGFyaSkgewotICAgICAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShhcmktPmFnZW50X2RhdGEpOwotICAgIH0KLX0KLQotTkVUU05NUF9JTkxJTkUgdm9pZAotbmV0c25tcF9mcmVlX2FnZW50X3JlcXVlc3RfaW5mbyhuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpKQotewotICAgIGlmIChhcmkpIHsKLSAgICAgICAgaWYgKGFyaS0+YWdlbnRfZGF0YSkgewotICAgICAgICAgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoYXJpLT5hZ2VudF9kYXRhKTsKLQl9Ci0gICAgICAgIFNOTVBfRlJFRShhcmkpOwotICAgIH0KLX0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0zNjQ3LDYgKzM4MjgsNyBAQAogICogQHBhcmFtIGVycm9yX3ZhbHVlIGVycm9yIHZhbHVlIGZvciByZXF1ZXN0cwogICogQHJldHVybiBlcnJvcl92YWx1ZQogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0VUX0FMTF9SRVFVRVNUU19FUlJPUgogaW50CiBuZXRzbm1wX3NldF9hbGxfcmVxdWVzdHNfZXJyb3IobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzLApAQCAtMzY1NSw0ICszODM3LDUgQEAKICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgZXJyb3JfdmFsdWUpOwogICAgIHJldHVybiBlcnJvcl92YWx1ZTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFVF9BTExfUkVRVUVTVFNfRVJST1IgKi8KIC8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvc25tcF9wZXJsLmMgYi9hZ2VudC9zbm1wX3BlcmwuYwppbmRleCA0ODIxYWQzLi40OGQ5Njk1IDEwMDY0NAotLS0gYS9hZ2VudC9zbm1wX3BlcmwuYworKysgYi9hZ2VudC9zbm1wX3BlcmwuYwpAQCAtMjksMTAgKzI5LDE0IEBACiB2b2lkCiBtYXliZV9zb3VyY2VfcGVybF9zdGFydHVwKHZvaWQpCiB7Ci0gICAgY29uc3QgY2hhciAgICAgKmVtYmVkYXJnc1tdID0geyAiIiwgIiIgfTsKKyAgICBpbnQgICAgICAgICAgICAgYXJnYzsKKyAgICBjaGFyICAgICAgICAgICoqYXJndjsKKyAgICBjaGFyICAgICAgICAgICoqZW52OworICAgIGNoYXIgICAgICAgICAgICplbWJlZGFyZ3NbXSA9IHsgTlVMTCwgTlVMTCB9OwogICAgIGNvbnN0IGNoYXIgICAgICpwZXJsX2luaXRfZmlsZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogCQkJCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUEVSTF9JTklUX0ZJTEUpOwogICAgIGNoYXIgICAgICAgICAgICBpbml0X2ZpbGVbU05NUF9NQVhCVUZdOworICAgIGludCAgICAgICAgICAgICByZXM7CiAKICAgICBzdGF0aWMgaW50ICAgICAgaGF2ZV9kb25lX2luaXQgPSAwOwogCkBAIC00MCwzMSArNDQsNTggQEAKICAgICAgICAgcmV0dXJuOwogICAgIGhhdmVfZG9uZV9pbml0ID0gMTsKIAorICAgIGVtYmVkYXJnc1swXSA9IHN0cmR1cCgiIik7CiAgICAgaWYgKCFwZXJsX2luaXRfZmlsZSkgewogICAgICAgICBzbnByaW50Zihpbml0X2ZpbGUsIHNpemVvZihpbml0X2ZpbGUpIC0gMSwKICAgICAgICAgICAgICAgICAgIiVzLyVzIiwgU05NUFNIQVJFUEFUSCwgInNubXBfcGVybC5wbCIpOwogICAgICAgICBwZXJsX2luaXRfZmlsZSA9IGluaXRfZmlsZTsKICAgICB9Ci0gICAgZW1iZWRhcmdzWzFdID0gcGVybF9pbml0X2ZpbGU7CisgICAgZW1iZWRhcmdzWzFdID0gc3RyZHVwKHBlcmxfaW5pdF9maWxlKTsKIAogICAgIERFQlVHTVNHVEwoKCJwZXJsIiwgImluaXRpYWxpemluZyBwZXJsICglcylcbiIsIGVtYmVkYXJnc1sxXSkpOworICAgIGFyZ2MgPSAwOworICAgIGFyZ3YgPSBOVUxMOworICAgIGVudiA9IE5VTEw7CisgICAgUEVSTF9TWVNfSU5JVDMoJmFyZ2MsICZhcmd2LCAmZW52KTsKICAgICBteV9wZXJsID0gcGVybF9hbGxvYygpOwotICAgIGlmICghbXlfcGVybCkKKyAgICBpZiAoIW15X3BlcmwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVtYmVkZGVkIHBlcmwgc3VwcG9ydCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAocGVybF9hbGxvYygpKVxuIik7CiAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgfQogCiAgICAgcGVybF9jb25zdHJ1Y3QobXlfcGVybCk7Ci0gICAgaWYgKHBlcmxfcGFyc2UobXlfcGVybCwgeHNfaW5pdCwgMiwgTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqKiwgZW1iZWRhcmdzKSwgTlVMTCkpCi0gICAgICAgIGdvdG8gYmFpbF9vdXQ7CiAKLSAgICBpZiAocGVybF9ydW4obXlfcGVybCkpCisjaWZkZWYgUEVSTF9FWElUX0RFU1RSVUNUX0VORAorICAgIFBMX2V4aXRfZmxhZ3MgfD0gUEVSTF9FWElUX0RFU1RSVUNUX0VORDsKKyNlbmRpZgorCisgICAgcmVzID0gcGVybF9wYXJzZShteV9wZXJsLCB4c19pbml0LCAyLCBlbWJlZGFyZ3MsIE5VTEwpOworICAgIGlmIChyZXMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVtYmVkZGVkIHBlcmwgc3VwcG9ydCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAocGVybF9wYXJzZSglcykiCisgICAgICAgICAgICAgICAgICIgcmV0dXJuZWQgJWQpXG4iLCBlbWJlZGFyZ3NbMV0sIHJlcyk7CiAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgfQorCisgICAgcmVzID0gcGVybF9ydW4obXlfcGVybCk7CisgICAgaWYgKHJlcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZW1iZWRkZWQgcGVybCBzdXBwb3J0IGZhaWxlZCB0byBpbml0aWFsaXplIChwZXJsX3J1bigpIgorICAgICAgICAgICAgICAgICAiIHJldHVybmVkICVkKVxuIiwgcmVzKTsKKyAgICAgICAgZ290byBiYWlsX291dDsKKyAgICB9CisKKyAgICBmcmVlKGVtYmVkYXJnc1swXSk7CisgICAgZnJlZShlbWJlZGFyZ3NbMV0pOwogCiAgICAgREVCVUdNU0dUTCgoInBlcmwiLCAiZG9uZSBpbml0aWFsaXppbmcgcGVybFxuIikpOwogCiAgICAgcmV0dXJuOwogCiAgIGJhaWxfb3V0OgotICAgIHNubXBfbG9nKExPR19FUlIsICJlbWJlZGRlZCBwZXJsIHN1cHBvcnQgZmFpbGVkIHRvIGluaXRpYWxpemVcbiIpOworICAgIGZyZWUoZW1iZWRhcmdzWzBdKTsKKyAgICBmcmVlKGVtYmVkYXJnc1sxXSk7CiAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfRElTQUJMRV9QRVJMLCAxKTsKICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hZ2VudC9zbm1wX3ZhcnMuYyBiL2FnZW50L3NubXBfdmFycy5jCmluZGV4IGFhZjkxN2YuLjJmOWU2ZWYgMTAwNjQ0Ci0tLSBhL2FnZW50L3NubXBfdmFycy5jCisrKyBiL2FnZW50L3NubXBfdmFycy5jCkBAIC03NywxMSArNzcsNyBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTkwLDkgKzg2LDYgQEAKICMgIGluY2x1ZGUgPHRpbWUuaD4KICMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jIGluY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtMTQzLDYgKzEzNiw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oPgogI2luY2x1ZGUgImtlcm5lbC5oIgogCiAjaW5jbHVkZSAibWliZ3JvdXAvc3RydWN0LmgiCkBAIC0xNTMsNiArMTQ3LDEyIEBACiAjaW5jbHVkZSAiYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmgiCiAjaW5jbHVkZSAibmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCIKIAorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAic25tcF9wZXJsLmgiCiAKICNpZm5kZWYgIE1JTgpAQCAtMjM2LDggKzIzNiw2IEBACiB1X2NoYXIgICAgICAgICAgcmV0dXJuX2J1ZlsyNTZdOyAgICAgICAgLyogbmVlIDY0ICovCiAjZW5kaWYKIAotc3RydWN0IHRpbWV2YWwgIHN0YXJ0dGltZTsKLQogaW50ICAgICAgICAgICAgIGNhbGxiYWNrX21hc3Rlcl9udW0gPSAtMTsKIAogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0NBTExCQUNLX0RPTUFJTgpAQCAtMjg1LDkgKzI4Myw3IEBACiAgICAgLyoKICAgICAgKiBnZXQgY3VycmVudCB0aW1lIChpZSwgdGhlIHRpbWUgdGhlIGFnZW50IHN0YXJ0ZWQpIAogICAgICAqLwotICAgIGdldHRpbWVvZmRheSgmc3RhcnR0aW1lLCBOVUxMKTsKLSAgICBzdGFydHRpbWUudHZfc2VjLS07Ci0gICAgc3RhcnR0aW1lLnR2X3VzZWMgKz0gMTAwMDAwMEw7CisgICAgbmV0c25tcF9zZXRfYWdlbnRfc3RhcnR0aW1lKE5VTEwpOwogCiAgICAgLyoKICAgICAgKiB3ZSBoYW5kbGUgYWxhcm0gc2lnbmFscyBvdXJzZWx2ZXMgaW4gdGhlIHNlbGVjdCBsb29wIApAQCAtMzEyLDE2ICszMDgsMTkgQEAKICAgICBuZXRzbm1wX2luaXRfaGVscGVycygpOwogICAgIGluaXRfdHJhcHMoKTsKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3QoKTsKKyAgICBpbml0X2FnZW50X3N5c09SVGFibGUoKTsKIAogI2lmIGRlZmluZWQoVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRSkgfHwgZGVmaW5lZChVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRSkKICAgICAvKgogICAgICAqIGluaXRpYWxpemUgYWdlbnR4IGNvbmZpZ3MKICAgICAgKi8KICAgICBhZ2VudHhfY29uZmlnX2luaXQoKTsKKyNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpCiAgICAgaWYobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ST0xFKSA9PSBTVUJfQUdFTlQpCiAgICAgICAgIHN1YmFnZW50X2luaXQoKTsKICNlbmRpZgorI2VuZGlmCiAKICAgICAvKgogICAgICAqIFJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gdG9rZW5zIGZyb20gdHJhbnNwb3J0IG1vZHVsZXMuICAKQEAgLTM0MCw2ICszMzksMTEgQEAKICAgICBpbml0X3BlcmwoKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKQorICAgIC8qKiBpbml0IHNlY25hbWUgbWFwcGluZyAqLworICAgIG5ldHNubXBfY2VydHNfYWdlbnRfaW5pdCgpOworI2VuZGlmCisKICNpZmRlZiBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCiAgICAgLyoKICAgICAgKiBkb24ndCBpbml0IGFnZW50IG1vZHVsZXMgZm9yIGEgc3ViLWFnZW50CkBAIC0zNjYsMTIgKzM3MCwxNiBAQAogICAgIG5ldHNubXBfY2xlYXJfY2FsbGJhY2tfbGlzdCgpOwogICAgIG5ldHNubXBfY2xlYXJfdGRvbWFpbl9saXN0KCk7CiAgICAgbmV0c25tcF9jbGVhcl9oYW5kbGVyX2xpc3QoKTsKKyAgICBzaHV0ZG93bl9hZ2VudF9zeXNPUlRhYmxlKCk7CiAgICAgbmV0c25tcF9jb250YWluZXJfZnJlZV9saXN0KCk7CiAgICAgY2xlYXJfc2VjX21vZCgpOwogICAgIGNsZWFyX3NubXBfZW51bSgpOwogICAgIGNsZWFyX2NhbGxiYWNrKCk7Ci0gICAgY2xlYXJfdXNlcl9saXN0KCk7CisgICAgc2h1dGRvd25fc2VjbW9kKCk7CiAgICAgbmV0c25tcF9hZGRyY2FjaGVfZGVzdHJveSgpOworI2lmZGVmIE5FVFNOTVBfQ0FOX1VTRV9OTElTVAorICAgIGZyZWVfa21lbSgpOworI2VuZGlmCiAKICAgICBkb25lX2luaXRfYWdlbnQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvc25tcGQuYyBiL2FnZW50L3NubXBkLmMKaW5kZXggZjQ2NzU5Mi4uY2ZjN2JjZSAxMDA2NDQKLS0tIGEvYWdlbnQvc25tcGQuYworKysgYi9hZ2VudC9zbm1wZC5jCkBAIC0zNiw2ICszNiw4IEBACiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCiAjaWYgSEFWRV9JT19ICiAjaW5jbHVkZSA8aW8uaD4KQEAgLTYxLDExICs2Myw3IEBACiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTc5LDggKzc3LDYgQEAKICNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VsaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+CiAjZW5kaWYKICNpZiBIQVZFX05FVF9JRl9ICiAjaW5jbHVkZSA8bmV0L2lmLmg+CkBAIC0xMTYsNiArMTEyLDkgQEAKICNpZiBIQVZFX0dSUF9ICiAjaW5jbHVkZSA8Z3JwLmg+CiAjZW5kaWYKKyNpZmRlZiBIQVZFX0NSVERCR19ICisjaW5jbHVkZSA8Y3J0ZGJnLmg+CisjZW5kaWYKIAogI2lmbmRlZiBQQVRIX01BWAogIyBpZmRlZiBfUE9TSVhfUEFUSF9NQVgKQEAgLTEzOCwyMSArMTM3LDIwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0Lmg+CiAKICNpbmNsdWRlICJtMm0uaCIKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaD4KIAogI2luY2x1ZGUgInNubXBkLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvc3RydWN0LmgiCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaD4KIAotI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MuaCIKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oPgotI2luY2x1ZGUgIm1pYl9tb2R1bGVfaW5jbHVkZXMuaCIKIAogLyoKICAqIEluY2x1ZGUgd2luc2VydmljZS5oIHRvIHN1cHBvcnQgV2luZG93cyBTZXJ2aWNlCkBAIC0xNjYsNiArMTY0LDEwIEBACiAKICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfd2FudChsb2dnaW5nX2ZpbGUpCituZXRzbm1wX2ZlYXR1cmVfd2FudChsb2dnaW5nX3N0ZGlvKQorbmV0c25tcF9mZWF0dXJlX3dhbnQobG9nZ2luZ19zeXNsb2cpCisKIC8qCiAgKiBHbG9iYWxzLgogICovCkBAIC0xNzYsNyArMTc4LDcgQEAKICNkZWZpbmUgVElNRVRJQ0sgICAgICAgICA1MDAwMDBMCiAKIGludCAgICAgICAgICAgICBzbm1wX2R1bXBfcGFja2V0OwotaW50ICAgICAgICAgICAgIHJlY29uZmlnID0gMDsKK3N0YXRpYyBpbnQgICAgICByZWNvbmZpZyA9IDA7CiBpbnQgICAgICAgICAgICAgRmFjaWxpdHkgPSBMT0dfREFFTU9OOwogCiAjaWZkZWYgV0lOMzJTRVJWSUNFCkBAIC0xOTMsOSArMTk1LDExIEBACiBjb25zdCBjaGFyICAgICAqYXBwX25hbWUgPSAic25tcGQiOwogCiBleHRlcm4gaW50ICAgICAgbmV0c25tcF9ydW5uaW5nOworI2lmZGVmIFVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUKIGV4dGVybiBjaGFyICAgKiphcmd2cmVzdGFydHA7CiBleHRlcm4gY2hhciAgICAqYXJndnJlc3RhcnQ7CiBleHRlcm4gY2hhciAgICAqYXJndnJlc3RhcnRuYW1lOworI2VuZGlmIC8qIFVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUgKi8KIAogI2lmZGVmIFVTSU5HX1NNVVhfTU9EVUxFCiAjaW5jbHVkZSA8bWliZ3JvdXAvc211eC9zbXV4Lmg+CkBAIC0yNjAsODEgKzI2NCw5MiBAQAogdXNhZ2UoY2hhciAqcHJvZykKIHsKICNpZmRlZiBXSU4zMlNFUlZJQ0UKLSAgICBwcmludGYoIlxuVXNhZ2U6ICAlcyBbLXJlZ2lzdGVyXSBbLXF1aWV0XSBbT1BUSU9OU10gW0xJU1RFTklORyBBRERSRVNTRVNdIiwKLSAgICAgICAgICAgcHJvZyk7Ci0gICAgcHJpbnRmKCJcbiAgICAgICAgJXMgWy11bnJlZ2lzdGVyXSBbLXF1aWV0XSIsIHByb2cpOworICAgIHByaW50ZigiXG5Vc2FnZTogICVzIFstcmVnaXN0ZXJdIFstcXVpZXRdIFtPUFRJT05TXSBbTElTVEVOSU5HIEFERFJFU1NFU10iCisgICAgICAgICAgICJcbiAgICAgICAgJXMgWy11bnJlZ2lzdGVyXSBbLXF1aWV0XSIsIHByb2csIHByb2cpOwogI2Vsc2UKICAgICBwcmludGYoIlxuVXNhZ2U6ICAlcyBbT1BUSU9OU10gW0xJU1RFTklORyBBRERSRVNTRVNdIiwgcHJvZyk7CiAjZW5kaWYKLSAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCJcblx0VmVyc2lvbjogICVzXG4iLCBuZXRzbm1wX2dldF92ZXJzaW9uKCkpOwotICAgIHByaW50ZigiXHRXZWI6ICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvXG4iKTsKLSAgICBwcmludGYoIlx0RW1haWw6ICAgIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIpOwotICAgIHByaW50ZigiXG4gIC1hXHRcdFx0bG9nIGFkZHJlc3Nlc1xuIik7Ci0gICAgcHJpbnRmKCIgIC1BXHRcdFx0YXBwZW5kIHRvIHRoZSBsb2dmaWxlIHJhdGhlciB0aGFuIHRydW5jYXRpbmcgaXRcbiIpOwotICAgIHByaW50ZigiICAtYyBGSUxFWywuLi5dXHRcdHJlYWQgRklMRShzKSBhcyBjb25maWd1cmF0aW9uIGZpbGUocylcbiIpOwotICAgIHByaW50ZigiICAtQ1x0XHRcdGRvIG5vdCByZWFkIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZXNcbiIpOwotICAgIHByaW50ZigiICAtZFx0XHRcdGR1bXAgc2VudCBhbmQgcmVjZWl2ZWQgU05NUCBwYWNrZXRzXG4iKTsKLSAgICBwcmludGYoIiAgLURbVE9LRU5bLC4uLl1dXHR0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBnaXZlbiBUT0tFTihzKVxuIgorICAgIHByaW50ZigiXG4iCisgICAgICAgICAgICJcblx0VmVyc2lvbjogICVzXG4lcyIKKyAgICAgICAgICAgIlx0XHRcdCAgKGNvbmZpZyBzZWFyY2ggcGF0aDogJXMpXG4lcyVzIiwKKyAgICAgICAgICAgbmV0c25tcF9nZXRfdmVyc2lvbigpLAorICAgICAgICAgICAiXHRXZWI6ICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvXG4iCisgICAgICAgICAgICJcdEVtYWlsOiAgICBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XG4iCisgICAgICAgICAgICJcbiAgLWFcdFx0XHRsb2cgYWRkcmVzc2VzXG4iCisgICAgICAgICAgICIgIC1BXHRcdFx0YXBwZW5kIHRvIHRoZSBsb2dmaWxlIHJhdGhlciB0aGFuIHRydW5jYXRpbmcgaXRcbiIKKyAgICAgICAgICAgIiAgLWMgRklMRVssLi4uXVx0XHRyZWFkIEZJTEUocykgYXMgY29uZmlndXJhdGlvbiBmaWxlKHMpXG4iCisgICAgICAgICAgICIgIC1DXHRcdFx0ZG8gbm90IHJlYWQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlc1xuIiwKKyAgICAgICAgICAgZ2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5KCksCisgICAgICAgICAgICIgIC1kXHRcdFx0ZHVtcCBzZW50IGFuZCByZWNlaXZlZCBTTk1QIHBhY2tldHNcbiIKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFQlVHR0lORworICAgICAgICAgICAiICAtRFtUT0tFTlssLi4uXV1cdHR1cm4gb24gZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIGdpdmVuIFRPS0VOKHMpXG4iCiAJICAgIlx0XHRcdCAgKHRyeSBBTEwgZm9yIGV4dHJlbWVseSB2ZXJib3NlIG91dHB1dClcbiIKLQkgICAiXHRcdFx0ICBEb24ndCBwdXQgc3BhY2UocykgYmV0d2VlbiAtRCBhbmQgVE9LRU4ocykuXG4iKTsKLSAgICBwcmludGYoIiAgLWZcdFx0XHRkbyBub3QgZm9yayBmcm9tIHRoZSBzaGVsbFxuIik7Ci0jaWYgSEFWRV9VTklTVERfSAotICAgIHByaW50ZigiICAtZyBHSURcdFx0Y2hhbmdlIHRvIHRoaXMgbnVtZXJpYyBnaWQgYWZ0ZXIgb3BlbmluZ1xuIgotCSAgICJcdFx0XHQgIHRyYW5zcG9ydCBlbmRwb2ludHNcbiIpOworCSAgICJcdFx0XHQgIERvbid0IHB1dCBzcGFjZShzKSBiZXR3ZWVuIC1EIGFuZCBUT0tFTihzKS5cbiIKICNlbmRpZgotICAgIHByaW50ZigiICAtaCwgLS1oZWxwXHRcdGRpc3BsYXkgdGhpcyB1c2FnZSBtZXNzYWdlXG4iKTsKLSAgICBwcmludGYoIiAgLUhcdFx0XHRkaXNwbGF5IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmVzIHVuZGVyc3Rvb2RcbiIpOwotICAgIHByaW50ZigiICAtSSBbLV1JTklUTElTVFx0bGlzdCBvZiBtaWIgbW9kdWxlcyB0byBpbml0aWFsaXplIChvciBub3QpXG4iKTsKLSAgICBwcmludGYoIlx0XHRcdCAgKHJ1biBzbm1wZCB3aXRoIC1EbWliX2luaXQgZm9yIGEgbGlzdClcbiIpOwotICAgIHByaW50ZigiICAtTCA8TE9HT1BUUz5cdFx0dG9nZ2xlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hlcmUgdG8gbG9nIHRvXG4iKTsKKyAgICAgICAgICAgIiAgLWZcdFx0XHRkbyBub3QgZm9yayBmcm9tIHRoZSBzaGVsbFxuIiwKKyNpZiBIQVZFX1VOSVNURF9ICisgICAgICAgICAgICIgIC1nIEdJRFx0XHRjaGFuZ2UgdG8gdGhpcyBudW1lcmljIGdpZCBhZnRlciBvcGVuaW5nXG4iCisJICAgIlx0XHRcdCAgdHJhbnNwb3J0IGVuZHBvaW50c1xuIgorI2VuZGlmCisgICAgICAgICAgICIgIC1oLCAtLWhlbHBcdFx0ZGlzcGxheSB0aGlzIHVzYWdlIG1lc3NhZ2VcbiIKKyAgICAgICAgICAgIiAgLUhcdFx0XHRkaXNwbGF5IGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmVzIHVuZGVyc3Rvb2RcbiIKKyAgICAgICAgICAgIiAgLUkgWy1dSU5JVExJU1RcdGxpc3Qgb2YgbWliIG1vZHVsZXMgdG8gaW5pdGlhbGl6ZSAob3Igbm90KVxuIgorICAgICAgICAgICAiXHRcdFx0ICAocnVuIHNubXBkIHdpdGggLURtaWJfaW5pdCBmb3IgYSBsaXN0KVxuIgorICAgICAgICAgICAiICAtTCA8TE9HT1BUUz5cdFx0dG9nZ2xlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hlcmUgdG8gbG9nIHRvXG4iKTsKICAgICBzbm1wX2xvZ19vcHRpb25zX3VzYWdlKCJcdCIsIHN0ZG91dCk7Ci0gICAgcHJpbnRmKCIgIC1tIE1JQkxJU1RcdFx0dXNlIE1JQkxJU1QgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBNSUIgbGlzdFxuIik7Ci0gICAgcHJpbnRmKCIgIC1NIERJUkxJU1RcdFx0dXNlIERJUkxJU1QgYXMgdGhlIGxpc3Qgb2YgbG9jYXRpb25zXG5cdFx0XHQgIHRvIGxvb2sgZm9yIE1JQnNcbiIpOwotICAgIHByaW50ZigiICAtcCBGSUxFXHRcdHN0b3JlIHByb2Nlc3MgaWQgaW4gRklMRVxuIik7Ci0gICAgcHJpbnRmKCIgIC1xXHRcdFx0cHJpbnQgaW5mb3JtYXRpb24gaW4gYSBtb3JlIHBhcnNhYmxlIGZvcm1hdFxuIik7Ci0gICAgcHJpbnRmKCIgIC1yXHRcdFx0ZG8gbm90IGV4aXQgaWYgZmlsZXMgb25seSBhY2Nlc3NpYmxlIHRvIHJvb3RcbiIKLQkgICAiXHRcdFx0ICBjYW5ub3QgYmUgb3BlbmVkXG4iKTsKKyAgICBwcmludGYoIiAgLW0gTUlCTElTVFx0XHR1c2UgTUlCTElTVCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IE1JQiBsaXN0XG4iCisgICAgICAgICAgICIgIC1NIERJUkxJU1RcdFx0dXNlIERJUkxJU1QgYXMgdGhlIGxpc3Qgb2YgbG9jYXRpb25zIHRvIGxvb2sgZm9yIE1JQnNcbiIKKyAgICAgICAgICAgIlx0XHRcdCAgKGRlZmF1bHQgJXMpXG4lcyVzIiwKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCisgICAgICAgICAgIG5ldHNubXBfZ2V0X21pYl9kaXJlY3RvcnkoKSwKKyNlbHNlCisgICAgICAgICAgICJNSUJzIG5vdCBsb2FkZWQiLAorI2VuZGlmCisgICAgICAgICAgICIgIC1wIEZJTEVcdFx0c3RvcmUgcHJvY2VzcyBpZCBpbiBGSUxFXG4iCisgICAgICAgICAgICIgIC1xXHRcdFx0cHJpbnQgaW5mb3JtYXRpb24gaW4gYSBtb3JlIHBhcnNhYmxlIGZvcm1hdFxuIgorICAgICAgICAgICAiICAtclx0XHRcdGRvIG5vdCBleGl0IGlmIGZpbGVzIG9ubHkgYWNjZXNzaWJsZSB0byByb290XG4iCisJICAgIlx0XHRcdCAgY2Fubm90IGJlIG9wZW5lZFxuIgogI2lmZGVmIFdJTjMyU0VSVklDRQotICAgIHByaW50ZigiICAtcmVnaXN0ZXJcdFx0cmVnaXN0ZXIgYXMgYSBXaW5kb3dzIHNlcnZpY2VcbiIpOwotICAgIHByaW50ZigiICBcdFx0XHQgIChmb2xsb3dlZCBieSAtcXVpZXQgdG8gcHJldmVudCBtZXNzYWdlIHBvcHVwcylcbiIpOwotICAgIHByaW50ZigiICBcdFx0XHQgIChmb2xsb3dlZCBieSB0aGUgc3RhcnR1cCBwYXJhbWV0ZXIgbGlzdClcbiIpOwotICAgIHByaW50ZigiICBcdFx0XHQgIE5vdGUgdGhhdCBzb21lIHBhcmFtZXRlcnMgYXJlIG5vdCByZWxldmFudCB3aGVuIHJ1bm5pbmcgYXMgYSBzZXJ2aWNlXG4iKTsKKyAgICAgICAgICAgIiAgLXJlZ2lzdGVyXHRcdHJlZ2lzdGVyIGFzIGEgV2luZG93cyBzZXJ2aWNlXG4iCisgICAgICAgICAgICIgIFx0XHRcdCAgKGZvbGxvd2VkIGJ5IC1xdWlldCB0byBwcmV2ZW50IG1lc3NhZ2UgcG9wdXBzKVxuIgorICAgICAgICAgICAiICBcdFx0XHQgIChmb2xsb3dlZCBieSB0aGUgc3RhcnR1cCBwYXJhbWV0ZXIgbGlzdClcbiIKKyAgICAgICAgICAgIiAgXHRcdFx0ICBOb3RlIHRoYXQgc29tZSBwYXJhbWV0ZXJzIGFyZSBub3QgcmVsZXZhbnQgd2hlbiBydW5uaW5nIGFzIGEgc2VydmljZVxuIgogI2VuZGlmCiAjaWYgSEFWRV9VTklTVERfSAotICAgIHByaW50ZigiICAtdSBVSURcdFx0Y2hhbmdlIHRvIHRoaXMgdWlkIChudW1lcmljIG9yIHRleHR1YWwpIGFmdGVyXG4iCi0JICAgIlx0XHRcdCAgb3BlbmluZyB0cmFuc3BvcnQgZW5kcG9pbnRzXG4iKTsKKyAgICAgICAgICAgIiAgLXUgVUlEXHRcdGNoYW5nZSB0byB0aGlzIHVpZCAobnVtZXJpYyBvciB0ZXh0dWFsKSBhZnRlclxuIgorCSAgICJcdFx0XHQgIG9wZW5pbmcgdHJhbnNwb3J0IGVuZHBvaW50c1xuIgogI2VuZGlmCiAjaWZkZWYgV0lOMzJTRVJWSUNFCi0gICAgcHJpbnRmKCIgIC11bnJlZ2lzdGVyXHRcdHVucmVnaXN0ZXIgYXMgYSBXaW5kb3dzIHNlcnZpY2VcbiIpOwotICAgIHByaW50ZigiICBcdFx0XHQgIChmb2xsb3dlZCAtcXVpZXQgdG8gcHJldmVudCBtZXNzYWdlIHBvcHVwcylcbiIpOworICAgICAgICAgICAiICAtdW5yZWdpc3Rlclx0XHR1bnJlZ2lzdGVyIGFzIGEgV2luZG93cyBzZXJ2aWNlXG4iCisgICAgICAgICAgICIgIFx0XHRcdCAgKGZvbGxvd2VkIC1xdWlldCB0byBwcmV2ZW50IG1lc3NhZ2UgcG9wdXBzKVxuIgogI2VuZGlmCi0gICAgcHJpbnRmKCIgIC12LCAtLXZlcnNpb25cdFx0ZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uXG4iKTsKLSAgICBwcmludGYoIiAgLVZcdFx0XHR2ZXJib3NlIGRpc3BsYXlcbiIpOworICAgICAgICAgICAiICAtdiwgLS12ZXJzaW9uXHRcdGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvblxuIgorICAgICAgICAgICAiICAtVlx0XHRcdHZlcmJvc2UgZGlzcGxheVxuIgogI2lmIGRlZmluZWQoVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRSl8fCBkZWZpbmVkKFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFKQotICAgIHByaW50ZigiICAteCBBRERSRVNTXHRcdHVzZSBBRERSRVNTIGFzIEFnZW50WCBhZGRyZXNzXG4iKTsKKyAgICAgICAgICAgIiAgLXggQUREUkVTU1x0XHR1c2UgQUREUkVTUyBhcyBBZ2VudFggYWRkcmVzc1xuIgogI2VuZGlmCiAjaWZkZWYgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotICAgIHByaW50ZigiICAtWFx0XHRcdHJ1biBhcyBhbiBBZ2VudFggc3ViYWdlbnQgcmF0aGVyIHRoYW4gYXMgYW5cbiIKLQkgICAiXHRcdFx0ICBTTk1QIG1hc3RlciBhZ2VudFxuIik7CisgICAgICAgICAgICIgIC1YXHRcdFx0cnVuIGFzIGFuIEFnZW50WCBzdWJhZ2VudCByYXRoZXIgdGhhbiBhcyBhblxuIgorCSAgICJcdFx0XHQgIFNOTVAgbWFzdGVyIGFnZW50XG4iCiAjZW5kaWYKLQotICAgIHByaW50ZigiXG5EZXByZWNhdGVkIG9wdGlvbnM6XG4iKTsKLSAgICBwcmludGYoIiAgLWwgRklMRVx0XHR1c2UgLUxmIDxGSUxFPiBpbnN0ZWFkXG4iKTsKLSAgICBwcmludGYoIiAgLVBcdFx0XHR1c2UgLXAgaW5zdGVhZFxuIik7Ci0gICAgcHJpbnRmKCIgIC1zXHRcdFx0dXNlIC1Mc2QgaW5zdGVhZFxuIik7Ci0gICAgcHJpbnRmKCIgIC1TIGR8aXwwLTdcdFx0dXNlIC1McyA8ZmFjaWxpdHk+IGluc3RlYWRcbiIpOwotCi0gICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAsCisgICAgICAgICAgICJcbkRlcHJlY2F0ZWQgb3B0aW9uczpcbiIKKyAgICAgICAgICAgIiAgLWwgRklMRVx0XHR1c2UgLUxmIDxGSUxFPiBpbnN0ZWFkXG4iCisgICAgICAgICAgICIgIC1QXHRcdFx0dXNlIC1wIGluc3RlYWRcbiIKKyAgICAgICAgICAgIiAgLXNcdFx0XHR1c2UgLUxzZCBpbnN0ZWFkXG4iCisgICAgICAgICAgICIgIC1TIGR8aXwwLTdcdFx0dXNlIC1McyA8ZmFjaWxpdHk+IGluc3RlYWRcbiIKKyAgICAgICAgICAgIlxuIgorICAgICAgICAgICApOwogICAgIGV4aXQoMSk7CiB9CiAKIHN0YXRpYyB2b2lkCiB2ZXJzaW9uKHZvaWQpCiB7Ci0gICAgcHJpbnRmKCJcbk5FVC1TTk1QIHZlcnNpb246ICAlc1xuIiwgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKLSAgICBwcmludGYoIldlYjogICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9cbiIpOwotICAgIHByaW50ZigiRW1haWw6ICAgICAgICAgICAgIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcblxuIik7CisgICAgcHJpbnRmKCJcbk5FVC1TTk1QIHZlcnNpb246ICAlc1xuIgorICAgICAgICAgICAiV2ViOiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL1xuIgorICAgICAgICAgICAiRW1haWw6ICAgICAgICAgICAgIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcblxuIiwKKyAgICAgICAgICAgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKICAgICBleGl0KDApOwogfQogCkBAIC0zNzksOSArMzk0LDEzIEBACiB7CiAgICAgLyogRGlzYWJsZSBhbGwgbG9ncyBhbmQgbG9nIHRoZSBlcnJvciB2aWEgc3lzbG9nICovCiAgICAgc25tcF9kaXNhYmxlX2xvZygpOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgc25tcF9lbmFibGVfc3lzbG9nKCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogICAgIHNubXBfbG9nKExPR19FUlIsICJFeGl0aW5nIG9uIHNpZ25hbCAlZFxuIiwgYSk7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICBzbm1wX2Rpc2FibGVfc3lzbG9nKCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogICAgIGV4aXQoMSk7CiB9CiAKQEAgLTQyMSw5ICs0NDAsNyBAQAogICAgIGludCAgICAgICAgICAgICBhcmcsIGksIHJldDsKICAgICBpbnQgICAgICAgICAgICAgZG9udF9mb3JrID0gMCwgZG9faGVscCA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIGxvZ19zZXQgPSAwOwotICAgIGludCAgICAgICAgICAgICB1aWQgPSAwLCBnaWQgPSAwOwogICAgIGludCAgICAgICAgICAgICBhZ2VudF9tb2RlID0gLTE7Ci0gICAgY2hhciAgICAgICAgICAgKmNwdHIsICoqYXJndnB0cjsKICAgICBjaGFyICAgICAgICAgICAqcGlkX2ZpbGUgPSBOVUxMOwogICAgIGNoYXIgICAgICAgICAgICBvcHRpb25fY29tcGF0YWJpbGl0eVtdID0gIi1MZSI7CiAjaWYgSEFWRV9HRVRQSUQKQEAgLTUwOSwxMSArNTI2LDEzIEBACiAgICAgICAgICAgICBhcmd2W2ldID0gb3B0aW9uX2NvbXBhdGFiaWxpdHk7ICAgICAgICAgICAgCiAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICNpZmRlZiBXSU4zMgogICAgIHNubXBfbG9nX3N5c2xvZ25hbWUoYXBwX25hbWVfbG9uZyk7CiAjZWxzZQogICAgIHNubXBfbG9nX3N5c2xvZ25hbWUoYXBwX25hbWUpOwogI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUsIGFwcF9uYW1lKTsKIApAQCAtNTU3LDE0ICs1NzYsMTkgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgc25tcF9zZXRfZHVtcF9wYWNrZXQoKytzbm1wX2R1bXBfcGFja2V0KTsKLSAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9WRVJCT1NFLCAxKTsKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzbm1wX2R1bXBfcGFja2V0KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ0QnOgorI2lmZGVmIE5FVFNOTVBfRElTQUJMRV9ERUJVR0dJTkcKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRGVidWdnaW5nIG5vdCBjb25maWd1cmVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisjZWxzZQogICAgICAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKG9wdGFyZyk7CiAgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoMSk7CisjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ2YnOgpAQCAtNTc4LDE5ICs2MDIsMTggQEAKICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgZ2lkOwogCiAgICAgICAgICAgICAgICAgZ2lkID0gc3RydG91bChvcHRhcmcsICZlY3AsIDEwKTsKKyNpZiBIQVZFX0dFVEdSTkFNICYmIEhBVkVfUFdEX0gKICAgICAgICAgICAgICAgICBpZiAoKmVjcCkgewotI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3JvdXAgICppbmZvOworCiAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBnZXRncm5hbShvcHRhcmcpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mbykgewotICAgICAgICAgICAgICAgICAgICAgICAgZ2lkID0gaW5mby0+Z3JfZ2lkOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBnaWQgPSBpbmZvID8gaW5mby0+Z3JfZ2lkIDogLTE7CisgICAgICAgICAgICAgICAgICAgIGVuZGdyZW50KCk7CisgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCBncm91cCBpZDogJXNcbiIsIG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAotICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoZ2lkIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCBncm91cCBpZDogJXNcbiIsIG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0dST1VQSUQsIGdpZCk7CkBAIC02MTYsNiArNjM5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiAgICAgICAgIGNhc2UgJ2wnOgogICAgICAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiAtbCBvcHRpb24gaXMgZGVwcmVjYXRlZCwgdXNlIC1MZiA8ZmlsZT4gaW5zdGVhZFxuIik7CiAgICAgICAgICAgICBpZiAob3B0YXJnICE9IE5VTEwpIHsKQEAgLTYzMyw2ICs2NTcsNyBAQAogICAgICAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KIAogICAgICAgICBjYXNlICdMJzoKIAkgICAgaWYgIChzbm1wX2xvZ19vcHRpb25zKCBvcHRhcmcsIGFyZ2MsIGFyZ3YgKSA8IDAgKSB7CkBAIC02NzgsNyArNzAzLDggQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ3EnOgotICAgICAgICAgICAgc25tcF9zZXRfcXVpY2tfcHJpbnQoMSk7CisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5ULCAxKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ3InOgpAQCAtNjg2LDYgKzcxMiw3IEBACiAJCQkJICAgICAgTkVUU05NUF9EU19BR0VOVF9OT19ST09UX0FDQ0VTUyk7CiAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiAtcyBvcHRpb24gaXMgZGVwcmVjYXRlZCwgdXNlIC1Mc2QgaW5zdGVhZFxuIik7CiAgICAgICAgICAgICBzbm1wX2VuYWJsZV9zeXNsb2coKTsKQEAgLTczOSw2ICs3NjYsNyBAQAogICAgICAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCiAgICAgICAgIGNhc2UgJ1UnOgogICAgICAgICAgICAgbmV0c25tcF9kc190b2dnbGVfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKQEAgLTc1MiwxOSArNzgwLDE4IEBACiAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHVpZDsKIAogICAgICAgICAgICAgICAgIHVpZCA9IHN0cnRvdWwob3B0YXJnLCAmZWNwLCAxMCk7CisjaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICiAgICAgICAgICAgICAgICAgaWYgKCplY3ApIHsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhc3N3ZCAgKmluZm87CisKICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGdldHB3bmFtKG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSBpbmZvLT5wd191aWQ7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVpZCA9IGluZm8gPyBpbmZvLT5wd191aWQgOiAtMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kcHdlbnQoKTsKKyAgICAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIHVzZXIgaWQ6ICVzXG4iLCBvcHRhcmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKHVpZCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgdXNlciBpZDogJXNcbiIsIG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCwgdWlkKTsKQEAgLTgyOCw2ICs4NTUsNyBAQAogICAgIH0KIAogICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogVGhlcmUgYXJlIG9wdGlvbmFsIHRyYW5zcG9ydCBhZGRyZXNzZXMgb24gdGhlIGNvbW1hbmQgbGluZS4gIAogICAgICAgICAgKi8KQEAgLTgzNiw3ICs4NjQsNyBAQAogICAgICAgICAgICAgY2hhciAqYywgKmFzdHJpbmc7CiAgICAgICAgICAgICBpZiAoKGMgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUE9SVFMpKSkgewotICAgICAgICAgICAgICAgIGFzdHJpbmcgPSBtYWxsb2Moc3RybGVuKGMpICsgMiArIHN0cmxlbihhcmd2W2ldKSk7CisgICAgICAgICAgICAgICAgYXN0cmluZyA9IChjaGFyKiltYWxsb2Moc3RybGVuKGMpICsgMiArIHN0cmxlbihhcmd2W2ldKSk7CiAgICAgICAgICAgICAgICAgaWYgKGFzdHJpbmcgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgYXJndlslZF1cbiIsIGkpOwogICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwpAQCAtODUzLDY4ICs4ODEsNjIgQEAKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBkL21haW4iLCAicG9ydCBzcGVjOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJCQkgIE5FVFNOTVBfRFNfQUdFTlRfUE9SVFMpKSk7CisjZWxzZSAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IHNwZWNpZmllZCBwb3J0cyB0byBvcGVuOyB0aGlzIGFnZW50IHdhcyBidWlsdCB0byBvbmx5IHNlbmQgbm90aWZpY2F0aW9uc1xuIik7CisgICAgICAgIGV4aXQoMSk7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLwogICAgIH0KIAogI2lmZGVmIE5FVFNOTVBfTE9HRklMRQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogICAgIGlmICgwID09IGxvZ19zZXQpCiAgICAgICAgIHNubXBfZW5hYmxlX2ZpbGVsb2coTkVUU05NUF9MT0dGSUxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQRU5EX0xPR0ZJTEVTKSk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KICNlbmRpZgogCi0gICAgLyoKLSAgICAgKiBJbml0aWFsaXplIGEgYXJndiBzZXQgdG8gdGhlIGN1cnJlbnQgZm9yIHJlc3RhcnRpbmcgdGhlIGFnZW50LiAgIAotICAgICAqLwotICAgIGFyZ3ZyZXN0YXJ0cCA9IChjaGFyICoqKW1hbGxvYygoYXJnYyArIDIpICogc2l6ZW9mKGNoYXIgKikpOwotICAgIGFyZ3ZwdHIgPSBhcmd2cmVzdGFydHA7Ci0gICAgZm9yIChpID0gMCwgcmV0ID0gMTsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICByZXQgKz0gc3RybGVuKGFyZ3ZbaV0pICsgMTsKKyNpZmRlZiBVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBJbml0aWFsaXplIGEgYXJndiBzZXQgdG8gdGhlIGN1cnJlbnQgZm9yIHJlc3RhcnRpbmcgdGhlIGFnZW50LgorICAgICAgICAgKi8KKyAgICAgICAgY2hhciAqY3B0ciwgKiphcmd2cHRyOworCisgICAgICAgIGFyZ3ZyZXN0YXJ0cCA9IChjaGFyICoqKW1hbGxvYygoYXJnYyArIDIpICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgICBhcmd2cHRyID0gYXJndnJlc3RhcnRwOworICAgICAgICBmb3IgKGkgPSAwLCByZXQgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisgICAgICAgICAgICByZXQgKz0gc3RybGVuKGFyZ3ZbaV0pICsgMTsKKyAgICAgICAgfQorICAgICAgICBhcmd2cmVzdGFydCA9IChjaGFyICopIG1hbGxvYyhyZXQpOworICAgICAgICBhcmd2cmVzdGFydG5hbWUgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGFyZ3ZbMF0pICsgMSk7CisgICAgICAgIGlmICghYXJndnJlc3RhcnRwIHx8ICFhcmd2cmVzdGFydCB8fCAhYXJndnJlc3RhcnRuYW1lKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgYXJndnJlc3RhcnRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBzdHJjcHkoYXJndnJlc3RhcnRuYW1lLCBhcmd2WzBdKTsKKworICAgICAgICBmb3IgKGNwdHIgPSBhcmd2cmVzdGFydCwgaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKyAgICAgICAgICAgIHN0cmNweShjcHRyLCBhcmd2W2ldKTsKKyAgICAgICAgICAgICooYXJndnB0cisrKSA9IGNwdHI7CisgICAgICAgICAgICBjcHRyICs9IHN0cmxlbihhcmd2W2ldKSArIDE7CisgICAgICAgIH0KICAgICB9Ci0gICAgYXJndnJlc3RhcnQgPSAoY2hhciAqKSBtYWxsb2MocmV0KTsKLSAgICBhcmd2cmVzdGFydG5hbWUgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGFyZ3ZbMF0pICsgMSk7Ci0gICAgaWYgKCFhcmd2cmVzdGFydHAgfHwgIWFyZ3ZyZXN0YXJ0IHx8ICFhcmd2cmVzdGFydG5hbWUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIGFyZ3ZyZXN0YXJ0XG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgc3RyY3B5KGFyZ3ZyZXN0YXJ0bmFtZSwgYXJndlswXSk7CisjZW5kaWYgLyogVVNJTkdfVVRJTF9GVU5DU19SRVNUQVJUX01PRFVMRSAqLworCiAgICAgaWYgKGFnZW50X21vZGUgPT0gLTEpIHsKLSAgICAgICAgaWYgKHN0cnN0cihhcmd2cmVzdGFydG5hbWUsICJhZ2VudHhkIikgIT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKyAgICAgICAgaWYgKHN0cnN0cihhcmd2WzBdLCAiYWdlbnR4ZCIpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1JPTEUsIFNVQl9BR0VOVCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUk9MRSwgTUFTVEVSX0FHRU5UKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKIAkJCSAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JPTEUsIGFnZW50X21vZGUpOwogICAgIH0KIAotICAgIGZvciAoY3B0ciA9IGFyZ3ZyZXN0YXJ0LCBpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBzdHJjcHkoY3B0ciwgYXJndltpXSk7Ci0gICAgICAgICooYXJndnB0cisrKSA9IGNwdHI7Ci0gICAgICAgIGNwdHIgKz0gc3RybGVuKGFyZ3ZbaV0pICsgMTsKLSAgICB9Ci0gICAgKmNwdHIgPSAwOwotICAgICphcmd2cHRyID0gTlVMTDsKLQotI2lmZGVmIEJVRlNJWgotICAgIHNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9MQkYsIEJVRlNJWik7Ci0jZW5kaWYKLSAgICAvKgotICAgICAqIEluaXRpYWxpemUgdGhlIHdvcmxkLiAgRGV0YWNoIGZyb20gdGhlIHNoZWxsLiAgQ3JlYXRlIGluaXRpYWwgdXNlci4gIAotICAgICAqLwotICAgIGlmKCFkb250X2ZvcmspIHsKLSAgICAgICAgaW50IHF1aXQgPSAhIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9RVUlUX0lNTUVESUFURUxZKTsKLSAgICAgICAgcmV0ID0gbmV0c25tcF9kYWVtb25pemUocXVpdCwgc25tcF9zdGRlcnJsb2dfc3RhdHVzKCkpOwotICAgICAgICAvKgotICAgICAgICAgKiB4eHgtcmtzOiBkbyB3ZSBjYXJlIGlmIGZvcmsgZmFpbHM/IEkgdGhpbmsgd2Ugc2hvdWxkLi4uCi0gICAgICAgICAqLwotICAgICAgICBpZihyZXQgIT0gMCkKLSAgICAgICAgICAgIEV4aXQoMSk7ICAgICAgICAgICAgICAgIC8qICBFeGl0IGxvZ3MgZXhpdCB2YWwgZm9yIHVzICAqLwotICAgIH0KLQogICAgIFNPQ0tfU1RBUlRVUDsKICAgICBpZiAoaW5pdF9hZ2VudChhcHBfbmFtZSkgIT0gMCkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQWdlbnQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKQEAgLTkzMSw3ICs5NTMsMzAgQEAKICAgICAgICAgLyoKICAgICAgICAgICogU29tZSBlcnJvciBvcGVuaW5nIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGFnZW50IHRyYW5zcG9ydHMuICAKICAgICAgICAgICovCi0gICAgICAgIEV4aXQoMSk7ICAgICAgICAgICAgICAgIC8qICBFeGl0IGxvZ3MgZXhpdCB2YWwgZm9yIHVzICAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU2VydmVyIEV4aXRpbmcgd2l0aCBjb2RlIDFcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8qCisgICAgICogSW5pdGlhbGl6ZSB0aGUgd29ybGQuICBEZXRhY2ggZnJvbSB0aGUgc2hlbGwuICBDcmVhdGUgaW5pdGlhbCB1c2VyLiAgCisgICAgICovCisgICAgaWYoIWRvbnRfZm9yaykgeworICAgICAgICBpbnQgcXVpdCA9ICEgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1FVSVRfSU1NRURJQVRFTFkpOworICAgICAgICByZXQgPSBuZXRzbm1wX2RhZW1vbml6ZShxdWl0LAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zdGRlcnJsb2dfc3RhdHVzKCkKKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCisgICAgICAgICAgICApOworICAgICAgICAvKgorICAgICAgICAgKiB4eHgtcmtzOiBkbyB3ZSBjYXJlIGlmIGZvcmsgZmFpbHM/IEkgdGhpbmsgd2Ugc2hvdWxkLi4uCisgICAgICAgICAqLworICAgICAgICBpZihyZXQgIT0gMCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlNlcnZlciBFeGl0aW5nIHdpdGggY29kZSAxXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KICAgICB9CiAKICNpZiBIQVZFX0dFVFBJRApAQCAtOTY2LDExICsxMDExLDE0IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZiBIQVZFX1VOSVNURF9ICisjaWYgZGVmaW5lZChIQVZFX1VOSVNURF9IKSAmJiAoZGVmaW5lZChIQVZFX0NIT1dOKSB8fCBkZWZpbmVkKEhBVkVfU0VUR0lEKSB8fCBkZWZpbmVkKEhBVkVfU0VUVUlEKSkKICAgICB7Ci0gICAgY29uc3QgY2hhciAqY29uc3QgcGVyc2lzdGVudF9kaXIgPSBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKTsKLSAgICBta2RpcmhpZXIoIHBlcnNpc3RlbnRfZGlyLCBORVRTTk1QX0FHRU5UX0RJUkVDVE9SWV9NT0RFLCAwICk7CisgICAgY29uc3QgY2hhciAgICAgKnBlcnNpc3RlbnRfZGlyOworICAgIGludCAgICAgICAgICAgICB1aWQsIGdpZDsKIAorICAgIHBlcnNpc3RlbnRfZGlyID0gZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCk7CisgICAgbWtkaXJoaWVyKCBwZXJzaXN0ZW50X2RpciwgTkVUU05NUF9BR0VOVF9ESVJFQ1RPUllfTU9ERSwgMCApOworICAgCiAgICAgdWlkID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICAgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCk7CiAgICAgZ2lkID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIApAQCAtOTgwLDcgKzEwMjgsNiBAQAogICAgIGlmICggdWlkICE9IDAgfHwgZ2lkICE9IDAgKQogICAgICAgICBjaG93biggcGVyc2lzdGVudF9kaXIsIHVpZCwgZ2lkICk7CiAjZW5kaWYKLSAgICB9CiAKICNpZmRlZiBIQVZFX1NFVEdJRAogICAgIGlmICgoZ2lkID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIApAQCAtMTAwMiw2ICsxMDQ5LDI2IEBACiAjaWZkZWYgSEFWRV9TRVRVSUQKICAgICBpZiAoKHVpZCA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCQkgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklEKSkgPiAwKSB7CisjaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9IICYmIEhBVkVfSU5JVEdST1VQUworICAgICAgICBzdHJ1Y3QgcGFzc3dkICppbmZvOworCisgICAgICAgIC8qCisgICAgICAgICAqIFNldCBzdXBwbGVtZW50YXJ5IGdyb3VwcyBiZWZvcmUgY2hhbmdpbmcgVUlECisgICAgICAgICAqICAgKHdoaWNoIHByb2JhYmx5IGludm9sdmVzIGdpdmluZyB1cCBwcml2aWxlZ2VzKQorICAgICAgICAgKi8KKyAgICAgICAgaW5mbyA9IGdldHB3dWlkKHVpZCk7CisgICAgICAgIGlmIChpbmZvKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcGQvbWFpbiIsICJTdXBwbGVtZW50YXJ5IGdyb3VwcyBmb3IgJXMuXG4iLCBpbmZvLT5wd19uYW1lKSk7CisgICAgICAgICAgICBpZiAoaW5pdGdyb3VwcyhpbmZvLT5wd19uYW1lLCAoZ2lkICE9IDAgPyAoZ2lkX3QpZ2lkIDogaW5mby0+cHdfZ2lkKSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoImluaXRncm91cHMgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgaWYgKCFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX05PX1JPT1RfQUNDRVNTKSkgeworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbmRwd2VudCgpOworI2VuZGlmCiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZC9tYWluIiwgIkNoYW5naW5nIHVpZCB0byAlZC5cbiIsIHVpZCkpOwogICAgICAgICBpZiAoc2V0dWlkKHVpZCkgPT0gLTEpIHsKICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcigic2V0dWlkIGZhaWxlZCIpOwpAQCAtMTAxMiw2ICsxMDc5LDcgQEAKICAgICAgICAgfQogICAgIH0KICNlbmRpZgorICAgIH0KICNlbmRpZgogCiAgICAgLyoKQEAgLTEwNjEsOSArMTEyOSwxMiBAQAogICAgIGFnZW50X3N0YXR1cyA9IEFHRU5UX1NUT1BQRUQ7CiAjZW5kaWYKIAorI2lmZGVmIFVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUKICAgICBTTk1QX0ZSRUUoYXJndnJlc3RhcnRuYW1lKTsKICAgICBTTk1QX0ZSRUUoYXJndnJlc3RhcnQpOwogICAgIFNOTVBfRlJFRShhcmd2cmVzdGFydHApOworI2VuZGlmIC8qIFVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUgKi8KKwogICAgIFNPQ0tfQ0xFQU5VUDsKICAgICByZXR1cm4gMDsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG1haW4oKSAtLSBzbm1wZCAqLwpAQCAtMTExMSw3ICsxMTgyLDcgQEAKICAqCTAJT24gc3VjY2Vzcy4KICAqCS0xCVN5c3RlbSBlcnJvci4KICAqCi0gKiBJbmZpbml0ZSB3aGlsZS1sb29wIHdoaWNoIG1vbml0b3JzIGluY29taW5nIG1lc3NnZXMgZm9yIHRoZSBhZ2VudC4KKyAqIEluZmluaXRlIHdoaWxlLWxvb3Agd2hpY2ggbW9uaXRvcnMgaW5jb21pbmcgbWVzc2FnZXMgZm9yIHRoZSBhZ2VudC4KICAqIEludm9rZSB0aGUgZXN0YWJsaXNoZWQgbWVzc2FnZSBoYW5kbGVycyBmb3IgaW5jb21pbmcgbWVzc2FnZXMgb24gYSBwZXIKICAqIHBvcnQgYmFzaXMuICBIYW5kbGUgdGltZW91dHMuCiAgKi8KQEAgLTExMTksMTMgKzExOTAsMTcgQEAKIHJlY2VpdmUodm9pZCkKIHsKICAgICBpbnQgICAgICAgICAgICAgbnVtZmRzOwotICAgIGZkX3NldCAgICAgICAgICByZWFkZmRzLCB3cml0ZWZkcywgZXhjZXB0ZmRzOworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHM7CiAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWVvdXQsICp0dnAgPSAmdGltZW91dDsKICAgICBpbnQgICAgICAgICAgICAgY291bnQsIGJsb2NrLCBpOwogI2lmZGVmCVVTSU5HX1NNVVhfTU9EVUxFCiAgICAgaW50ICAgICAgICAgICAgIHNkOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0lOR19TTVVYX01PRFVMRSAqLwogCisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmcmVhZGZkcywgRkRfU0VUU0laRSk7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmd3JpdGVmZHMsIEZEX1NFVFNJWkUpOworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmV4Y2VwdGZkcywgRkRfU0VUU0laRSk7CisKICAgICAvKgogICAgICAqIGlnbm9yZSBlYXJseSBzaWdodXAgZHVyaW5nIHN0YXJ0dXAKICAgICAgKi8KQEAgLTExNjcsMTggKzEyNDIsMTggQEAKICAgICAgICAgdHZwLT50dl91c2VjID0gMDsKIAogICAgICAgICBudW1mZHMgPSAwOwotICAgICAgICBGRF9aRVJPKCZyZWFkZmRzKTsKLSAgICAgICAgRkRfWkVSTygmd3JpdGVmZHMpOwotICAgICAgICBGRF9aRVJPKCZleGNlcHRmZHMpOworICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX1pFUk8oJnJlYWRmZHMpOworICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX1pFUk8oJndyaXRlZmRzKTsKKyAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9aRVJPKCZleGNlcHRmZHMpOwogICAgICAgICBibG9jayA9IDA7Ci0gICAgICAgIHNubXBfc2VsZWN0X2luZm8oJm51bWZkcywgJnJlYWRmZHMsIHR2cCwgJmJsb2NrKTsKKyAgICAgICAgc25tcF9zZWxlY3RfaW5mbzIoJm51bWZkcywgJnJlYWRmZHMsIHR2cCwgJmJsb2NrKTsKICAgICAgICAgaWYgKGJsb2NrID09IDEpIHsKICAgICAgICAgICAgIHR2cCA9IE5VTEw7ICAgICAgICAgLyogYmxvY2sgd2l0aG91dCB0aW1lb3V0ICovCiAJfQogCiAjaWZkZWYJVVNJTkdfU01VWF9NT0RVTEUKICAgICAgICAgaWYgKHNtdXhfbGlzdGVuX3NkID49IDApIHsKLSAgICAgICAgICAgIEZEX1NFVChzbXV4X2xpc3Rlbl9zZCwgJnJlYWRmZHMpOworICAgICAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9TRVQoc211eF9saXN0ZW5fc2QsICZyZWFkZmRzKTsKICAgICAgICAgICAgIG51bWZkcyA9CiAgICAgICAgICAgICAgICAgc211eF9saXN0ZW5fc2QgPj0gbnVtZmRzID8gc211eF9saXN0ZW5fc2QgKyAxIDogbnVtZmRzOwogCkBAIC0xMTg2LDI4ICsxMjYxLDM0IEBACiAgICAgICAgICAgICAgICAgc2QgPSBzbXV4X3NubXBfc2VsZWN0X2xpc3RfZ2V0X1NEX2Zyb21fTGlzdChpKTsKICAgICAgICAgICAgICAgICBpZiAoc2QgIT0gMCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgRkRfU0VUKHNkLCAmcmVhZGZkcyk7CisgICAgICAgICAgICAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9TRVQoc2QsICZyZWFkZmRzKTsKICAgICAgICAgICAgICAgICAgICBudW1mZHMgPSBzZCA+PSBudW1mZHMgPyBzZCArIDEgOiBudW1mZHM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTSU5HX1NNVVhfTU9EVUxFICovCiAKLSAgICAgICAgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvKCZudW1mZHMsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZleGNlcHRmZHMpOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIKKyAgICAgICAgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvMigmbnVtZmRzLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZXB0ZmRzKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIgKi8KIAogICAgIHJlc2VsZWN0OgorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1NJR05BTAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0VYVEVSTkFMX1NJR1M7IGkrKykgewogICAgICAgICAgICAgaWYgKGV4dGVybmFsX3NpZ25hbF9zY2hlZHVsZWRbaV0pIHsKICAgICAgICAgICAgICAgICBleHRlcm5hbF9zaWduYWxfc2NoZWR1bGVkW2ldLS07CiAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfc2lnbmFsX2hhbmRsZXJbaV0oaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1NJR05BTCAqLwogCiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZC9zZWxlY3QiLCAic2VsZWN0KCBudW1mZHM9JWQsIC4uLiwgdHZwPSVwKVxuIiwKICAgICAgICAgICAgICAgICAgICAgbnVtZmRzLCB0dnApKTsKLSAgICAgICAgaWYodHZwKQotICAgICAgICAgICAgREVCVUdNU0dUTCgoInRpbWVyIiwgInR2cCAlbGQuJWxkXG4iLCB0dnAtPnR2X3NlYywgdHZwLT50dl91c2VjKSk7Ci0gICAgICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJnJlYWRmZHMsICZ3cml0ZWZkcywgJmV4Y2VwdGZkcywgdHZwKTsKKyAgICAgICAgaWYgKHR2cCkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0aW1lciIsICJ0dnAgJWxkLiVsZFxuIiwgKGxvbmcpIHR2cC0+dHZfc2VjLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHR2cC0+dHZfdXNlYykpOworICAgICAgICBjb3VudCA9IG5ldHNubXBfbGFyZ2VfZmRfc2V0X3NlbGVjdChudW1mZHMsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZleGNlcHRmZHMsCisJCQkJICAgICB0dnApOwogICAgICAgICBERUJVR01TR1RMKCgic25tcGQvc2VsZWN0IiwgInJldHVybmVkLCBjb3VudCA9ICVkXG4iLCBjb3VudCkpOwogCiAgICAgICAgIGlmIChjb3VudCA+IDApIHsKQEAgLTEyMTksNyArMTMwMCw3IEBACiAgICAgICAgICAgICBpZiAoc211eF9saXN0ZW5fc2QgPj0gMCkgewogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbXV4X3NubXBfc2VsZWN0X2xpc3RfZ2V0X2xlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgc2QgPSBzbXV4X3NubXBfc2VsZWN0X2xpc3RfZ2V0X1NEX2Zyb21fTGlzdChpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEZEX0lTU0VUKHNkLCAmcmVhZGZkcykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoc2QsICZyZWFkZmRzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNtdXhfcHJvY2VzcyhzZCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc211eF9zbm1wX3NlbGVjdF9saXN0X2RlbChzZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjI4LDcgKzEzMDksNyBAQAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogbmV3IGNvbm5lY3Rpb24gCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKEZEX0lTU0VUKHNtdXhfbGlzdGVuX3NkLCAmcmVhZGZkcykpIHsKKyAgICAgICAgICAgICAgICBpZiAoTkVUU05NUF9MQVJHRV9GRF9JU1NFVChzbXV4X2xpc3Rlbl9zZCwgJnJlYWRmZHMpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoc2QgPSBzbXV4X2FjY2VwdChzbXV4X2xpc3Rlbl9zZCkpID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNtdXhfc25tcF9zZWxlY3RfbGlzdF9hZGQoc2QpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjM2LDExICsxMzE3LDE1IEBACiAgICAgICAgICAgICB9CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNJTkdfU01VWF9NT0RVTEUgKi8KLSAgICAgICAgICAgIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzKCZjb3VudCwgJnJlYWRmZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaXRlZmRzLCAmZXhjZXB0ZmRzKTsKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIKKyAgICAgICAgICAgIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzMigmY291bnQsICZyZWFkZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0ZWZkcywgJmV4Y2VwdGZkcyk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSICovCisKICAgICAgICAgICAgIC8qIElmIHRoZXJlIGFyZSBzdGlsbCBldmVudHMgbGVmdG92ZXIsIHByb2Nlc3MgdGhlbSAqLwogICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkgewotICAgICAgICAgICAgICBzbm1wX3JlYWQoJnJlYWRmZHMpOworICAgICAgICAgICAgICBzbm1wX3JlYWQyKCZyZWFkZmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzd2l0Y2ggKGNvdW50KSB7CkBAIC0xMjY4LDYgKzEzNTMsMTEgQEAKICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogZW5kaWYgLS0gY291bnQ+MCAqLwogCiAgICAgICAgIC8qCisgICAgICAgICAqIHNlZSBpZiBwZXJzaXN0ZW50IHN0b3JlIG5lZWRzIHRvIGJlIHNhdmVkCisgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX2lmX25lZWRlZCgpOworCisgICAgICAgIC8qCiAgICAgICAgICAqIHJ1biByZXF1ZXN0ZWQgYWxhcm1zIAogICAgICAgICAgKi8KICAgICAgICAgcnVuX2FsYXJtcygpOwpAQCAtMTI3Niw2ICsxMzY2LDEwIEBACiAKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgKi8KIAorICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJnJlYWRmZHMpOworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJndyaXRlZmRzKTsKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZleGNlcHRmZHMpOworCiAjaWYgZGVmaW5lZChXSU4zMikKICAgICBqb2luX3N0ZGluX3dhaXRlcl90aHJlYWQoKTsKICNlbmRpZgpAQCAtMTM2Niw2ICsxNDYwLDEwIEBACiAgICAgaW50ICAgICAgICAgICAgIG5SdW5UeXBlID0gUlVOX0FTX0NPTlNPTEU7CiAgICAgaW50ICAgICAgICAgICAgIHF1aWV0ID0gMDsKICAgICAKKyNpZiAwCisgICAgX0NydFNldERiZ0ZsYWcoX0NSVERCR19BTExPQ19NRU1fREYgfCBfQ1JUREJHX0xFQUtfQ0hFQ0tfREYgLyp8IF9DUlREQkdfQ0hFQ0tfQUxXQVlTX0RGKi8pOworI2VuZGlmCisKICAgICBuUnVuVHlwZSA9IFBhcnNlQ21kTGluZUZvclNlcnZpY2VPcHRpb24oYXJnYywgYXJndiwgJnF1aWV0KTsKIAogICAgIHN3aXRjaCAoblJ1blR5cGUpIHsKZGlmZiAtLWdpdCBhL2FnZW50L3NubXBkLmggYi9hZ2VudC9zbm1wZC5oCmluZGV4IDkzNWMwZTcuLjg5YmNkMzEgMTAwNjQ0Ci0tLSBhL2FnZW50L3NubXBkLmgKKysrIGIvYWdlbnQvc25tcGQuaApAQCAtMiw2ICsyLDEwIEBACiAgKiBzbm1wZC5oCiAgKi8KIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCiAjZGVmaW5lIE1BU1RFUl9BR0VOVCAwCiAjZGVmaW5lIFNVQl9BR0VOVCAgICAxCiBleHRlcm4gaW50ICAgICAgYWdlbnRfcm9sZTsKQEAgLTE3LDMgKzIxLDcgQEAKICAqIGNvbmZpZyBmaWxlIHBhcnNpbmcgcm91dGluZXMgCiAgKi8KIHZvaWQgICAgICAgICAgICBhZ2VudEJvb3RzX2NvbmYoY2hhciAqLCBjaGFyICopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBwcy9NYWtlZmlsZS5kZXBlbmQgYi9hcHBzL01ha2VmaWxlLmRlcGVuZAppbmRleCBiOTI3NmU4Li4wMTRhZDUwIDEwMDY0NAotLS0gYS9hcHBzL01ha2VmaWxlLmRlcGVuZAorKysgYi9hcHBzL01ha2VmaWxlLmRlcGVuZApAQCAtMSw2MiArMSwxNDYgQEAKICMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KIAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5oCisuL2FnZW50eHRyYXAubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjUsMzIgKzE0OSw1NSBAQAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaApAQCAtOTgsMjkgKzIwNSwxMyBAQAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI5LDY0ICsyMjAsNjkgQEAKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xOTUsNjIgKzI5MSw2OCBAQAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNTksNjEgKzM2MSw2NSBAQAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTMyMiwzMyArNDI4LDU0IEBACiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKQEAgLTM1NiwyOSArNDgzLDEzIEBACiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zODcsNjMgKzQ5OCw2OSBAQAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ1Miw2MSArNTY5LDY2IEBACiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTE1LDMzICs2MzcsNTQgQEAKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCkBAIC01NDksMjkgKzY5MiwxMyBAQAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTgwLDYyICs3MDcsNjggQEAKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NDQsNjIgKzc3Nyw2NyBAQAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcwOCwzMyArODQ2LDE2NiBAQAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaAorLi9zbm1wdGxzLmxvOiAuLi9hZ2VudC9taWJncm91cC90bHN0bS1taWIuaAorLi9zbm1wdGxzLmxvOiAuLi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oCisuL3NubXB0bHMubG86IC4uL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oCisuL3NubXB0bHMubG86IC4uL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKQEAgLTc0Nyw2NyArMTAxOCw2NiBAQAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04MTYsNjIgKzEwODYsMTQ0IEBACiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiBzbm1wdHJhcGRfaGFuZGxlcnMuaCBzbm1wdHJhcGRfYXV0aC5oIHNubXB0cmFwZF9kcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODgwLDYgKzEyMzIsNyBAQAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTE2LDkxICsxMjY5LDQ4IEBACiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc25tcHRyYXBkX2hhbmRsZXJzLmgKLS4vc25tcHRyYXBkLmxvOiBzbm1wdHJhcGRfbG9nLmggc25tcHRyYXBkX2RzLmggc25tcHRyYXBkX2F1dGguaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB0cmFwZC5sbzogc25tcHRyYXBkX2hhbmRsZXJzLmggc25tcHRyYXBkX2xvZy5oIHNubXB0cmFwZF9kcy5oCisuL3NubXB0cmFwZC5sbzogc25tcHRyYXBkX2F1dGguaAogLi9zbm1wdHJhcGQubG86IC4uL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAotLi9zbm1wdHJhcGQubG86IC4uL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oIC4uL2FnZW50L3NubXBfcGVybC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogc25tcHRyYXBkX2hhbmRsZXJzLmggc25tcHRyYXBkX2F1dGguaCBzbm1wdHJhcGRfZHMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXB0cmFwZC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaApAQCAtMTAwOSwxNiArMTMxOSw2IEBACiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaApAQCAtMTAzNiwxOCArMTMzNiw3IEBACiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDU2LDYgKzEzNDUsNyBAQAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA5Myw2NyArMTM4Myw3MiBAQAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiBzbm1wdHJhcGRfaGFuZGxlcnMuaCBzbm1wdHJhcGRfYXV0aC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogc25tcHRyYXBkX2xvZy5oIHNubXB0cmFwZF9kcy5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTYyLDYyICsxNDU3LDY5IEBACiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggc25tcHRyYXBkX2xvZy5oCiAuL3NubXB0cmFwZF9sb2cubG86IHNubXB0cmFwZF9kcy5oCisuL3NubXB0cmFwZF9zcWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcHRyYXBkX3NxbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjI2LDYyICsxNTI4LDY3IEBACiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjkwLDYyICsxNTk3LDY4IEBACiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzU0LDY0ICsxNjY3LDcwIEBACiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zc2h0b3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0MjAsMTMzICsxNzM5LDcxIEBACiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTU1NSw2NSArMTgxMiwyMTQgQEAKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTYyMiw2NiArMjAyOCw3MCBAQAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oIC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjkwLDY2ICsyMTAwLDE0MiBAQAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmggLi9zbm1wbmV0c3RhdC9uZXRzdGF0LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmggLi9zbm1wbmV0c3RhdC9uZXRzdGF0LmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE3NTgsNCArMjI0NCw1IEBACiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKZGlmZiAtLWdpdCBhL2FwcHMvTWFrZWZpbGUuaW4gYi9hcHBzL01ha2VmaWxlLmluCmluZGV4IDE4MWQzZmYuLjc3NDA0ZGQgMTAwNjQ0Ci0tLSBhL2FwcHMvTWFrZWZpbGUuaW4KKysrIGIvYXBwcy9NYWtlZmlsZS5pbgpAQCAtNCw2ICs0LDcgQEAKICMKIAogdG9wX2J1aWxkZGlyPS4uCitteXN1YmRpcj1hcHBzCiAKICMgdXNlIEdOVSB2cGF0aCwgaWYgYXZhaWxhYmxlLCB0byBvbmx5IHNldCBhIHBhdGggZm9yIHNvdXJjZSBhbmQgaGVhZGVycwogIyBWUEFUSCB3aWxsIHBpY2sgdXAgb2JqZWN0cyB0b28sIHdoaWNoIGlzIGJhZCBpZiB5b3UgYXJlIHNoYXJpbmcgYQpAQCAtMTcsMTAgKzE4LDM3IEBACiAjIFRoaW5ncyB0byBpbnN0YWxsCiAjCiAKK0BORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUVAU1NISU5TVEFMTEJJTlBST0cgPSBzc2h0b3NubXAkKEVYRUVYVCkKK0BORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFQFNTSElOU1RBTExCSU5QUk9HID0KK0BORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUVAU1NIRkVBVFVSRVBST0cgPSBzc2h0b3NubXAuZnQKK0BORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFQFNTSEZFQVRVUkVQUk9HID0KK0BORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUVAVExTSU5TVEFMTEJJTlBST0cgPSBzbm1wdGxzJChFWEVFWFQpCitATkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRUBUTFNJTlNUQUxMQklOUFJPRyA9CitATkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFQFRMU0ZFQVRVUkVQUk9HID0gc25tcHRscy5mdAorQE5FVFNOTVBfQlVJTERfVExTX1BST0dfRkFMU0VAVExTRkVBVFVSRVBST0cgPQorQE5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRUBVU01JTlNUQUxMQklOUFJPRyA9IHNubXB1c20kKEVYRUVYVCkKK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFQFVTTUlOU1RBTExCSU5QUk9HID0KK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUVAVVNNRkVBVFVSRVBST0cgPSBzbm1wdXNtLmZ0CitATkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRUBVU01GRUFUVVJFUFJPRyA9CitATkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFQEVLQ1NUQUxMQklOUFJPRyA9IGVuY29kZV9rZXljaGFuZ2UkKEVYRUVYVCkKK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFQEVLQ1NUQUxMQklOUFJPRyA9CitATkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFQEVLQ0ZFQVRVUkVQUk9HID0gZW5jb2RlX2tleWNoYW5nZS5mdAorQE5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0VARUtDRkVBVFVSRVBST0cgPQorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRUBTTk1QU0VUSU5TVEFMTEJJTlBST0cgPSBzbm1wc2V0JChFWEVFWFQpCitATkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRUBTTk1QU0VUSU5TVEFMTEJJTlBST0cgPSAKK0BORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUVAU05NUFNFVEZFQVRVUkVQUk9HID0gc25tcHNldC5mdAorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0VAU05NUFNFVEZFQVRVUkVQUk9HID0gCitATkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFQFNOTVBWQUNNSU5TVEFMTEJJTlBST0cgPSBzbm1wdmFjbSQoRVhFRVhUKQorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0VAU05NUFZBQ01JTlNUQUxMQklOUFJPRyA9IAorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRUBTTk1QVkFDTUZFQVRVUkVQUk9HID0gc25tcHZhY20uZnQKK0BORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFQFNOTVBWQUNNRkVBVFVSRVBST0cgPSAKKworQE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19UUlVFQEFHRU5UWFRSQVAgPSBhZ2VudHh0cmFwJChFWEVFWFQpCitATkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFQEFHRU5UWFRSQVAgPQorCiBJTlNUQUxMQklOUFJPR1MJPSBzbm1wZ2V0JChFWEVFWFQpIAkJCVwKIAkJc25tcGdldG5leHQkKEVYRUVYVCkgCQkJXAotCQlzbm1wc2V0JChFWEVFWFQpIAkJCVwKLQkJc25tcHVzbSQoRVhFRVhUKQkJCVwKKwkJJChTTk1QU0VUSU5TVEFMTEJJTlBST0cpCSAgICAgICAgXAogCQlzbm1wd2FsayQoRVhFRVhUKSAJCQlcCiAJCXNubXBidWxrd2FsayQoRVhFRVhUKSAJCQlcCiAJCXNubXB0YWJsZSQoRVhFRVhUKQkJCVwKQEAgLTMwLDkgKzU4LDExIEBACiAJCXNubXBzdGF0dXMkKEVYRUVYVCkgCQkJXAogCQlzbm1wZGVsdGEkKEVYRUVYVCkgCQkJXAogCQlzbm1wdGVzdCQoRVhFRVhUKQkJCVwKLQkJZW5jb2RlX2tleWNoYW5nZSQoRVhFRVhUKSAJCVwKIAkJc25tcGRmJChFWEVFWFQpIAkJCVwKLQkJc25tcHZhY20kKEVYRUVYVCkKKwkJJChBR0VOVFhUUkFQKQkJCQlcCisJCSQoU05NUFZBQ01JTlNUQUxMQklOUFJPRykJICAgICAgICBcCisgICAgICAgICAgICAgICAgJChTU0hJTlNUQUxMQklOUFJPRykgJChUTFNJTlNUQUxMQklOUFJPRykgXAorCQkkKFVTTUlOU1RBTExCSU5QUk9HKSAkKEVLQ1NUQUxMQklOUFJPRykKIAogSU5TVEFMTFNCSU5QUk9HUyA9IHNubXB0cmFwZCQoRVhFRVhUKQogCkBAIC00MCw0MSArNzAsNjkgQEAKIAogU1VCRElSUwkJPSBzbm1wbmV0c3RhdAogCitGRUFUVVJFRklMRT0uLi9pbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmVzLWFwcHMuaAorCiAjCiAjIGJ1aWxkIHZhcmlhYmxlcy4KICMKIAogIyBVU0VMSUJTL1VTRUFHRU5UTElCUyBhcmUgZm9yIGRlcGVuZGVuY2llcwogVVNFTElCUwkJPSAuLi9zbm1wbGliL2xpYm5ldHNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pIAotSEVMUEVSTElCICAgICAgID0gLi4vYWdlbnQvaGVscGVycy9saWJuZXRzbm1waGVscGVycy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIEFHRU5UTElCICAgICAgICA9IC4uL2FnZW50L2xpYm5ldHNubXBhZ2VudC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIE1JQkxJQiAgICAgICAgICA9IC4uL2FnZW50L2xpYm5ldHNubXBtaWJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQotVVNFQUdFTlRMSUJTCT0gJChNSUJMSUIpICQoQUdFTlRMSUIpICQoSEVMUEVSTElCKSAkKFVTRUxJQlMpCitVU0VBR0VOVExJQlMJPSAkKE1JQkxJQikgJChBR0VOVExJQikgJChVU0VMSUJTKQorTVlTUUxfTElCUwk9IEBNWVNRTF9MSUJTQAorTVlTUUxfSU5DTFVERVMJPSBATVlTUUxfSU5DTFVERVNACiAKLUxJQlMJCT0gJChVU0VMSUJTKSBATElCU0AKK1ZBTF9MSUJTCT0gQFZBTF9MSUJTQAorTElCUwkJPSAkKFVTRUxJQlMpICQoVkFMX0xJQlMpIEBMSUJTQAogUEVSTExET1BUU19GT1JfQVBQUyA9IEBQRVJMTERPUFRTX0ZPUl9BUFBTQAogUEVSTExET1BUU19GT1JfTElCUyA9IEBQRVJMTERPUFRTX0ZPUl9MSUJTQAogCiAjCiAjIGhhY2sgZm9yIGNvbXBpbGluZyB0cmFwZCB3aGVuIGFnZW50IGlzIGRpc2FibGVkCi1UUkFQRFdJVEhBR0VOVCAgPSAkKFVTRVRSQVBMSUJTKSBAQUdFTlRMSUJTQAotVFJBUERXSVRIT1VUQUdFTlQgPSAkKExJQlMpCitUUkFQRFdJVEhBR0VOVCAgPSAkKFVTRVRSQVBMSUJTKSAkKE1ZU1FMX0xJQlMpICQoVkFMX0xJQlMpIEBBR0VOVExJQlNACitUUkFQRFdJVEhPVVRBR0VOVCA9ICQoTElCUykgJChNWVNRTF9MSUJTKSAkKFZBTF9MSUJTKQogCiAjIHRoZXNlIHdpbGwgYmUgc2V0IGJ5IGNvbmZpZ3VyZSB0byBvbmUgb2YgdGhlIGFib3ZlIDIgbGluZXMKIFRSQVBMSUJTCT0gQFRSQVBMSUJTQCAkKFBFUkxMRE9QVFNfRk9SX0FQUFMpCiBVU0VUUkFQTElCUwk9IEBVU0VUUkFQTElCU0AKIAogQ1BQRkxBR1MJPSAkKFRPUF9JTkNMVURFUykgLUkuICQoQUdFTlRfSU5DTFVERVMpICQoSEVMUEVSX0lOQ0xVREVTKSBcCi0JCSAgJChNSUJHUk9VUF9JTkNMVURFUykgICQoU05NUExJQl9JTkNMVURFUykgQENQUEZMQUdTQAorCQkgICQoTUlCR1JPVVBfSU5DTFVERVMpICBcCisJCSAgJChTTk1QTElCX0lOQ0xVREVTKSAkKE1ZU1FMX0lOQ0xVREVTKSBAQ1BQRkxBR1NACiAKIE9TVUZGSVgJCT0gbG8KIFRSQVBEX09CSkVDVFMgICA9IHNubXB0cmFwZC4kKE9TVUZGSVgpIEBvdGhlcl90cmFwZF9vYmplY3RzQAogTElCVFJBUERfT0JKUyAgID0gc25tcHRyYXBkX2hhbmRsZXJzLm8gIHNubXB0cmFwZF9sb2cubyBcCi0JCSAgc25tcHRyYXBkX2F1dGgubworCQkgIHNubXB0cmFwZF9hdXRoLm8gc25tcHRyYXBkX3NxbC5vCiBMTElCVFJBUERfT0JKUyAgPSBzbm1wdHJhcGRfaGFuZGxlcnMubG8gc25tcHRyYXBkX2xvZy5sbyBcCi0JCSAgc25tcHRyYXBkX2F1dGgubG8KKwkJICBzbm1wdHJhcGRfYXV0aC5sbyBzbm1wdHJhcGRfc3FsLmxvCitMSUJUUkFQRF9GVFMgICAgPSBzbm1wdHJhcGRfaGFuZGxlcnMuZnQgc25tcHRyYXBkX2xvZy5mdCBcCisJCSAgc25tcHRyYXBkX2F1dGguZnQgc25tcHRyYXBkX3NxbC5mdAogT0JKUyAgPSAqLm8KIExPQkpTID0gKi5sbworRlRPQkpTPSQoTElCVFJBUERfRlRTKSBcCisgICAgICAgc25tcHdhbGsuZnQgXAorICAgICAgIHNubXBidWxrd2Fsay5mdCBcCisgICAgICAgc25tcGJ1bGtnZXQuZnQgXAorICAgICAgIHNubXB0cmFuc2xhdGUuZnQgXAorICAgICAgIHNubXBzdGF0dXMuZnQgXAorICAgICAgIHNubXBnZXQuZnQgXAorICAgICAgIHNubXBkZWx0YS5mdCBcCisgICAgICAgc25tcHRhYmxlLmZ0IFwKKyAgICAgICBzbm1wdGVzdC5mdCBcCisgICAgICAgc25tcHRyYXBkLmZ0IFwKKyAgICAgICBzbm1wdHJhcC5mdCBcCisgICAgICAgJChTTk1QU0VURkVBVFVSRVBST0cpIFwKKyAgICAgICAkKFNOTVBWQUNNRkVBVFVSRVBST0cpIFwKKyAgICAgICAkKFVTTUZFQVRVUkVQUk9HKSBcCisgICAgICAgJChUTFNGRUFUVVJFUFJPRykgXAorICAgICAgIGFnZW50eHRyYXAuZnQgXAorICAgICAgIHNubXBnZXRuZXh0LmZ0IFwKKyAgICAgICAkKEVLQ0ZFQVRVUkVQUk9HKSBcCisgICAgICAgc25tcGRmLmZ0IFwKKyAgICAgICAkKFNTSEZFQVRVUkVQUk9HKQogCiBhbGw6IHN0YW5kYXJkYWxsCiAKQEAgLTEzMCw2ICsxODgsMTIgQEAKIHNubXB2YWNtJChFWEVFWFQpOiAgICBzbm1wdmFjbS4kKE9TVUZGSVgpICQoVVNFTElCUykKIAkkKExJTkspICR7Q0ZMQUdTfSAtbyAkQCBzbm1wdmFjbS4kKE9TVUZGSVgpICR7TERGTEFHU30gJHtMSUJTfQogCitzbm1wdGxzJChFWEVFWFQpOiAgICBzbm1wdGxzLiQoT1NVRkZJWCkgJChVU0VMSUJTKQorCSQoTElOSykgJHtDRkxBR1N9IC1vICRAIHNubXB0bHMuJChPU1VGRklYKSAke0xERkxBR1N9ICR7TElCU30gCisKK2FnZW50eHRyYXAkKEVYRUVYVCk6ICAgIGFnZW50eHRyYXAuJChPU1VGRklYKSAkKFVTRUFHRU5UTElCUykKKwkkKExJTkspICR7Q0ZMQUdTfSAtbyAkQCBhZ2VudHh0cmFwLiQoT1NVRkZJWCkgJHtMREZMQUdTfSAkKFVTRUFHRU5UTElCUykgJChQRVJMTERPUFRTX0ZPUl9BUFBTKSAke0xJQlN9CisKIHNubXBnZXRuZXh0JChFWEVFWFQpOiAgICBzbm1wZ2V0bmV4dC4kKE9TVUZGSVgpICQoVVNFTElCUykKIAkkKExJTkspICR7Q0ZMQUdTfSAtbyAkQCBzbm1wZ2V0bmV4dC4kKE9TVUZGSVgpICR7TERGTEFHU30gJHtMSUJTfQogCkBAIC0xNTgsNSArMjIyLDkgQEAKIAkgIEBybSAtZiAkKElOU1RBTExfUFJFRklYKSQoc25tcGxpYmRpcikvc25tcF9wZXJsX3RyYXBkLnBsCiAJICBAZWNobyAicmVtb3ZlZCBzbm1wX3BlcmxfdHJhcGQucGwgZnJvbSAkKElOU1RBTExfUFJFRklYKSQoc25tcGxpYmRpcikiCiAKK3NzaHRvc25tcCQoRVhFRVhUKTogc3NodG9zbm1wLiQoT1NVRkZJWCkKKwkkKExJTkspICR7Q0ZMQUdTfSAtbyAkQCBzc2h0b3NubXAuJChPU1VGRklYKQorCisKIGluc3RhbGxkaXJzOgogCUAkKFNIRUxMKSAkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUFJFRklYKSQoc25tcGxpYmRpcikKZGlmZiAtLWdpdCBhL2FwcHMvYWdlbnR4dHJhcC5jIGIvYXBwcy9hZ2VudHh0cmFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmNDIzYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvYWdlbnR4dHJhcC5jCkBAIC0wLDAgKzEsNjEyIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+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+JjIKZGlmZiAtLWdpdCBhL2NvbmZpZy5zdWIgYi9jb25maWcuc3ViCmluZGV4IDY3NTk4MjUuLjMyMGUzMDMgMTAwNzU1Ci0tLSBhL2NvbmZpZy5zdWIKKysrIGIvY29uZmlnLnN1YgpAQCAtMSwxMCArMSwxMCBAQAogIyEgL2Jpbi9zaAogIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCiAjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAotIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCiAjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLXRpbWVzdGFtcD0nMjAwOC0wMS0xNicKK3RpbWVzdGFtcD0nMjAxMC0wOS0xMScKIAogIyBUaGlzIGZpbGUgaXMgKGluIHByaW5jaXBsZSkgY29tbW9uIHRvIEFMTCBHTlUgc29mdHdhcmUuCiAjIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKQEAgLTMyLDEzICszMiwxNiBAQAogCiAKICMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0Ci0jIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgR05VIENoYW5nZUxvZyBlbnRyeS4KICMKICMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCiAjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KICMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCiAjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCiAKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKwogIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKICMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCiAjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCkBAIC03Miw4ICs3NSw5IEBACiB2ZXJzaW9uPSJcCiBHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKIAotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAotMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMTIwLDggKzEyNCwxMCBAQAogIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAogY2FzZSAkbWF5YmVfb3MgaW4KLSAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgbGludXgtdWNsaWJjKiB8IFwKLSAgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKyAgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCiAgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKICAgICBvcz0tJG1heWJlX29zCiAgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKQEAgLTE0OCwxMCArMTU0LDEzIEBACiAJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKIAktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAogCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAotCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkpCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKQogCQlvcz0KIAkJYmFzaWNfbWFjaGluZT0kMQogCQk7OworICAgICAgICAtYmx1ZWdlbmUqKQorCSAgICAgICAgb3M9LWNuaworCQk7OwogCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQogCQlvcz0KIAkJYmFzaWNfbWFjaGluZT0kMQpAQCAtMjQ5LDEzICsyNTgsMTYgQEAKIAl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCiAJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKIAl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbG0zMiBcCiAJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKLQl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCiAJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKIAl8IG1pcHMxNiBcCiAJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCi0JfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAogCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKKwl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAogCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAogCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAogCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXApAQCAtMjY4LDI4ICsyODAsNDEgQEAKIAl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCiAJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAogCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAogCXwgbXQgXAogCXwgbXNwNDMwIFwKKwl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAogCXwgbmlvcyB8IG5pb3MyIFwKIAl8IG5zMTZrIHwgbnMzMmsgXAogCXwgb3IzMiBcCiAJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAogCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAogCXwgcHlyYW1pZCBcCisJfCByeCBcCiAJfCBzY29yZSBcCi0JfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKIAl8IHNoNjQgfCBzaDY0bGUgXAogCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAogCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKIAl8IHNwdSB8IHN0cm9uZ2FybSBcCi0JfCB0YWhvZSB8IHRodW1iIHwgdGljNHggfCB0aWM4MCB8IHRyb24gXAorCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAorCXwgdWJpY29tMzIgXAogCXwgdjg1MCB8IHY4NTBlIFwKIAl8IHdlMzJrIFwKIAl8IHg4NiB8IHhjMTZ4IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAotCXwgejhrKQorCXwgejhrIHwgejgwKQogCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKLQltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIpCisJYzU0eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQk7OworCWM1NXgpCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJOzsKKwljNngpCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IHBpY29jaGlwKQogCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCW9zPS1ub25lCkBAIC0zMjAsNyArMzQ1LDcgQEAKIAl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAogCXwgYXZyLSogfCBhdnIzMi0qIFwKIAl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKLQl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIHwgYzU0eC0qIHwgYzU1eC0qIHwgYzZ4LSogXAorCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogXAogCXwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKIAl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKIAl8IGVseHNpLSogXApAQCAtMzI5LDE0ICszNTQsMTcgQEAKIAl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCiAJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAogCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgbG0zMi0qIFwKIAl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKIAl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCi0JfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogXAorCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiB8IG1pY3JvYmxhemUtKiBcCiAJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCiAJfCBtaXBzMTYtKiBcCiAJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAotCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAogCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAogCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKIAl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCiAJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXApAQCAtMzUxLDI3ICszNzksMzAgQEAKIAl8IG1taXgtKiBcCiAJfCBtdC0qIFwKIAl8IG1zcDQzMC0qIFwKKwl8IG5kczMyLSogfCBuZHMzMmxlLSogfCBuZHMzMmJlLSogXAogCXwgbmlvcy0qIHwgbmlvczItKiBcCiAJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKIAl8IG9yaW9uLSogXAogCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCiAJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiB8IHBwY2JlLSogXAogCXwgcHlyYW1pZC0qIFwKLQl8IHJvbXAtKiB8IHJzNjAwMC0qIFwKLQl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAogCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCiAJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCiAJfCBzcGFyY2xpdGUtKiBcCiAJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCiAJfCB0YWhvZS0qIHwgdGh1bWItKiBcCiAJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWxlLSogfCB0aWxlZ3gtKiBcCiAJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCiAJfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAogCXwgd2UzMmstKiBcCiAJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKIAl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKIAl8IHltcC0qIFwKLQl8IHo4ay0qKQorCXwgejhrLSogfCB6ODAtKikKIAkJOzsKIAkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCiAJeHRlbnNhKikKQEAgLTQzOSw2ICs0NzAsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbwogCQlvcz0tYnNkCiAJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CiAJYXV4KQogCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKIAkJb3M9LWF1eApAQCAtNDU1LDEwICs0OTAsMjcgQEAKIAkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCiAJCW9zPS1saW51eAogCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzU0eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM1NXgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNngtKikKKwkJYmFzaWNfbWFjaGluZT10aWM2eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OwogCWM5MCkKIAkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQogCQlvcz0tdW5pY29zCiAJCTs7CisgICAgICAgIGNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OwogCWNvbnZleC1jMSkKIAkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKIAkJb3M9LWJzZApAQCAtNTI2LDYgKzU3OCwxMCBAQAogCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKIAkJb3M9LXN5c3YzCiAJCTs7CisJZGljb3MpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tZGljb3MKKwkJOzsKIAlkamdwcCkKIAkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCiAJCW9zPS1tc2Rvc2RqZ3BwCkBAIC02OTksNiArNzU1LDkgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCiAJCW9zPS1zeXN2CiAJCTs7CisgICAgICAgIG1pY3JvYmxhemUpCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKIAltaW5ndzMyKQogCQliYXNpY19tYWNoaW5lPWkzODYtcGMKIAkJb3M9LW1pbmd3MzIKQEAgLTgwMyw2ICs4NjIsMTIgQEAKIAlucDEpCiAJCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCiAJCTs7CisgICAgICAgIG5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworICAgICAgICBuc2UtdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zZS10YW5kZW0KKwkJOzsKIAluc3ItdGFuZGVtKQogCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KIAkJOzsKQEAgLTEwMzcsMTcgKzExMDIsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT10OTAtY3JheQogCQlvcz0tdW5pY29zCiAJCTs7Ci0JdGljNTR4IHwgYzU0eCopCi0JCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KLQkJb3M9LWNvZmYKLQkJOzsKLQl0aWM1NXggfCBjNTV4KikKLQkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgotCQlvcz0tY29mZgotCQk7OwotCXRpYzZ4IHwgYzZ4KikKLQkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCi0JCW9zPS1jb2ZmCisgICAgICAgICMgVGhpcyBtdXN0IGJlIG1hdGNoZWQgYmVmb3JlIHRpbGUqLgorICAgICAgICB0aWxlZ3gqKQorCQliYXNpY19tYWNoaW5lPXRpbGVneC11bmtub3duCisJCW9zPS1saW51eC1nbnUKIAkJOzsKIAl0aWxlKikKIAkJYmFzaWNfbWFjaGluZT10aWxlLXVua25vd24KQEAgLTExMjgsNiArMTE4NiwxMCBAQAogCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCiAJCW9zPS1zaW0KIAkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKIAlub25lKQogCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQogCQlvcz0tbm9uZQpAQCAtMTE2Niw3ICsxMjI4LDcgQEAKIAl3ZTMyaykKIAkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKIAkJOzsKLQlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQogCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KIAkJOzsKIAlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKQEAgLTEyMTYsNiArMTI3OCw5IEBACiAgICAgICAgICMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCiAgICAgICAgICMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCiAJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisgICAgICAgIC1hdXJvcmF1eCkKKwkgICAgICAgIG9zPS1hdXJvcmF1eAorCQk7OwogCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQogCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCiAJCTs7CkBAIC0xMjM2LDEwICsxMzAxLDExIEBACiAJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCiAJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAotCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCi0JICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1zb2xhcmlzKiB8IC1zeW0qIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAorCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiBcCiAJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCi0JICAgICAgfCAtYW9zKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCiAJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKIAkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKIAkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCkBAIC0xMjQ4LDkgKzEzMTQsMTAgQEAKIAkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCiAJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAogCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAotCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAogCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKLQkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisJICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKIAkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCiAJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKIAkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKQEAgLTEyNTgsNyArMTMyNSw3IEBACiAJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAogCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAogCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCi0JICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyopCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqKQogCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkJOzsKIAktcW54KikKQEAgLTEzODgsNiArMTQ1NSwxMSBAQAogCS16dm1vZSkKIAkJb3M9LXp2bW9lCiAJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisgICAgICAgIC1uYWNsKikKKwkgICAgICAgIDs7CiAJLW5vbmUpCiAJCTs7CiAJKikKQEAgLTE0MjgsNiArMTUwMCwxNSBAQAogICAgICAgICBjNHgtKiB8IHRpYzR4LSopCiAgICAgICAgIAlvcz0tY29mZgogCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CiAJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgogCXBkcDEwLSopCiAJCW9zPS10b3BzMjAKQEAgLTE1ODUsNyArMTY2Niw3IEBACiAJCQktc3Vub3MqKQogCQkJCXZlbmRvcj1zdW4KIAkJCQk7OwotCQkJLWFpeCopCisJCQktY25rKnwtYWl4KikKIAkJCQl2ZW5kb3I9aWJtCiAJCQkJOzsKIAkJCS1iZW9zKikKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBmMGFkZWFmLi40MzNiYTViIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDg0ICsxLDQzNSBAQAogIyEgL2Jpbi9zaAotIyBGcm9tIGNvbmZpZ3VyZS5pbiBSZXZpc2lvbi4KKyMgRnJvbSBjb25maWd1cmUuYWMgUmV2aXNpb24uCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSBmb3IgTmV0LVNOTVAgNS40LjQuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OCBmb3IgTmV0LVNOTVAgNS43LjMuCiAjCiAjIFJlcG9ydCBidWdzIHRvIDxuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0Pi4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjCisjCiAjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAotIyBCZSBCb3VybmUgY29tcGF0aWJsZQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgc2V0IC1vIHBvc2l4Ci1maQotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotCi0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc191bnNldD11bnNldAorICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZWxzZQotICBhc191bnNldD1mYWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCiBmaQogCiAKLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgotJGFzX3Vuc2V0IEVOViBNQUlMIE1BSUxQQVRICithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCiBQUzE9JyQgJwogUFMyPSc+ICcKIFBTND0nKyAnCiAKICMgTkxTIG51aXNhbmNlcy4KLWZvciBhc192YXIgaW4gXAotICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAotICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAotICBMQ19URUxFUEhPTkUgTENfVElNRQotZG8KLSAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KLSAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKLSAgZWxzZQotICAgICRhc191bnNldCAkYXNfdmFyCi0gIGZpCi1kb25lCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCiAKLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisgIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorIgorICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQorYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Cithc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KK2FzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KK2FzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KKworZXhpdGNvZGU9MAorYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2FzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQoraWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgorCitlbHNlCisgIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorZmkKK3Rlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEiCisgIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCisgIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KKyAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQordGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEKKworICB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwke0JBU0hfVkVSU0lPTitzZXR9XCIgfHwgKAorICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisgICAgdGVzdCBcIlhcYHByaW50ZiAlcyBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgXFwKKyAgICAgIHx8IHRlc3QgXCJYXGBwcmludCAtciAtLSBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgKSB8fCBleGl0IDEiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBicmVhayAyCitmaQorZmkKKwkgICBkb25lOzsKKyAgICAgICBlc2FjCisgIGFzX2ZvdW5kPWZhbHNlCitkb25lCiskYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKKwkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2ZpOyB9CitJRlM9JGFzX3NhdmVfSUZTCisKKworICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgorICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisJIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKwkjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCisJQkFTSF9FTlY9L2Rldi9udWxsCisJRU5WPS9kZXYvbnVsbAorCSh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorCWV4cG9ydCBDT05GSUdfU0hFTEwKKwljYXNlICQtIGluICMgKCgoKAorCSAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7CisJICAqdiogKSBhc19vcHRzPS12IDs7CisJICAqeCogKSBhc19vcHRzPS14IDs7CisJICAqICkgYXNfb3B0cz0gOzsKKwllc2FjCisJZXhlYyAiJENPTkZJR19TSEVMTCIgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFuZAorJDA6IG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgYWJvdXQgeW91cgorJDA6IHN5c3RlbSwgaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKKyQwOiBtZXNzYWdlLiBUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1bgorJDA6IHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4iCisgIGZpCisgIGV4aXQgMQorZmkKK2ZpCitmaQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KK2V4cG9ydCBTSEVMTAorIyBVbnNldCBtb3JlIHZhcmlhYmxlcyBrbm93biB0byBpbnRlcmZlcmUgd2l0aCBiZWhhdmlvciBvZiBjb21tb24gdG9vbHMuCitDTElDT0xPUl9GT1JDRT0gR1JFUF9PUFRJT05TPQordW5zZXQgQ0xJQ09MT1JfRk9SQ0UgR1JFUF9PUFRJT05TCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBTaGVsbCBGdW5jdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogICBhc19leHByPWV4cHIKIGVsc2UKICAgYXNfZXhwcj1mYWxzZQogZmkKIAotaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgoraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgogICBhc19iYXNlbmFtZT1iYXNlbmFtZQogZWxzZQogICBhc19iYXNlbmFtZT1mYWxzZQogZmkKIAoraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQogCi0jIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCi1hc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAogJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCiAKLQotIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgogIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgogYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCiBhc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKQEAgLTg2LDE0NiArNDM3LDEwNyBAQAogYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwogYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCiAKLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCiAKLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7Ci0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCi0gICMgcmVsYXRpdmUgb3Igbm90LgotICBjYXNlICQwIGluCi0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKLQotICAgICAgIDs7Ci0gIGVzYWMKLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICAgIGFzX215c2VsZj0kMAotICBmaQotICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCi0gICcnKQotICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9Ci0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQotCSAgIGZpOzsKLQkgZXNhYwotICAgICAgIGRvbmUKLWRvbmUKLTs7Ci0gIGVzYWMKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAotICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQotICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkICc9JyA8JGFzX215c2VsZiB8CisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAogICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KICAgICAgIE4KLSAgICAgIHMsJCwtLAotICAgICAgOiBsb29wCi0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KICAgICAgIHQgbG9vcAotICAgICAgcywtJCwsCi0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisgICAgICBzLy1cbi4qLy8KICAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KIAogICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwogICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgotICAuIC4vJGFzX21lLmxpbmVubworICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCiAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgogICBleGl0CiB9CiAKLQotY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JwotJyBFQ0hPX1Q9JwknIDs7Ci0gICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7CitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKIGVzYWMKIAotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCi0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgotICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KLSAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCi0gICAgYXNfbG5fcz0nY3AgLXAnCi0gIGVsc2UKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCiAgIGZpCi1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPWxuCiBlbHNlCiAgIGFzX2xuX3M9J2NwIC1wJwogZmkKLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiAKIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbWtkaXJfcD06CisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKIGVsc2UKICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKICAgYXNfbWtkaXJfcD1mYWxzZQogZmkKIAotYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgoraWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCitlbHNlCisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisJdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OworCWVzYWM7CisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CiAKICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KIGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCkBAIC0yMzMsMjQ1ICs1NDUsNTE3IEBACiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KIGFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCiAKLQotIyBJRlMKLSMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCi1hc19ubD0nCi0nCi1JRlM9IiAJJGFzX25sIgotCi0jIENEUEFUSC4KLSRhc191bnNldCBDRFBBVEgKLQotCi0KLSMgQ2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KIFNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CiAKLWNhc2UgWCRFQ0hPIGluCi1YKi0tZmFsbGJhY2stZWNobykKLSAgIyBSZW1vdmUgb25lIGxldmVsIG9mIHF1b3RhdGlvbiAod2hpY2ggd2FzIHJlcXVpcmVkIGZvciBNYWtlKS4KLSAgRUNITz1gZWNobyAiJEVDSE8iIHwgc2VkICdzLFxcXFxcJFxcJDAsJyQwJywnYAotICA7OwotZXNhYwogCi1lY2hvPSR7RUNITy1lY2hvfQotaWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgotICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KLSAgc2hpZnQKLWVsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgotICA6Ci1lbGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KLSAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQotICA6Ci1lbHNlCi0gICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KLSAgZXhlYyAkU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KLWZpCi0KLWlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCi0gICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCi0gIHNoaWZ0Ci0gIGNhdCA8PEVPRgotJCoKLUVPRgotICBleGl0IDAKLWZpCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLWlmIHRlc3QgLXogIiRFQ0hPIjsgdGhlbgotaWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCi0jIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKLSAgZm9yIGNtZCBpbiAnc2VkIDUwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDJxICIkMCInICdlY2hvIHRlc3QnOyBkbwotICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAya0IsIDFrQiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCi0gICAgaWYgKGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGApIDI+L2Rldi9udWxsICYmCi0gICAgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCAmJgotICAgICAgICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi1maQotCi1pZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICA6Ci1lbHNlCi0gICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQotICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCi0gICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCi0gICMKLSAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCi0gICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gICAgICBlY2hvPSIkZGlyL2VjaG8iCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0KLSAgaWYgdGVzdCAiWCRlY2hvIiA9IFhlY2hvOyB0aGVuCi0gICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCi0gICAgaWYgdGVzdCAiWGAocHJpbnQgLXIgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KLSAgICAgIGVjaG89J3ByaW50IC1yJwotICAgIGVsaWYgKHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQpICYmCi0JIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KLSAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgotICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0gICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0gICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKLSAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQotICAgIGVsc2UKLSAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KLSAgICAgIGVjaG89J3ByaW50ZiAlc1xuJwotICAgICAgaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0JIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JIyBDb29sLCBwcmludGYgd29ya3MKLQk6Ci0gICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgotCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCUNPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0JZXhwb3J0IENPTkZJR19TSEVMTAotCVNIRUxMPSIkQ09ORklHX1NIRUxMIgotCWV4cG9ydCBTSEVMTAotCWVjaG89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQllY2hvPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsc2UKLQkjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgotCXByZXY9OgotCi0JZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgNTBxICIkMCInOyBkbwotCSAgaWYgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIikgMj4vZGV2L251bGwKLQkgIHRoZW4KLQkgICAgYnJlYWsKLQkgIGZpCi0JICBwcmV2PSIkY21kIgotCWRvbmUKLQotCWlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiJDAiJzsgdGhlbgotCSAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKLQkgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCi0JICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiJDAiICR7MSsiJEAifQotCWVsc2UKLQkgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCi0JICBlY2hvPWVjaG8KLQlmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotZmkKLWZpCi0KLSMgQ29weSBlY2hvIGFuZCBxdW90ZSB0aGUgY29weSBzdWl0YWJseSBmb3IgcGFzc2luZyB0byBsaWJ0b29sIGZyb20KLSMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgotRUNITz0kZWNobwotaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCi0gICBFQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcJDAgLS1mYWxsYmFjay1lY2hvIgotZmkKLQotCi0KLQotdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9Q1hYCi0KLXRhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUY3NwordGVzdCAtbiAiJERKRElSIiB8fCBleGVjIDc8JjAgPC9kZXYvbnVsbAorZXhlYyA2PiYxCiAKICMgTmFtZSBvZiB0aGUgaG9zdC4KLSMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCiAjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KIGFjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAogCi1leGVjIDY+JjEKLQogIwogIyBJbml0aWFsaXphdGlvbnMuCiAjCiBhY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCithY19jbGVhbl9maWxlcz0KIGFjX2NvbmZpZ19saWJvYmpfZGlyPS4KK0xJQk9CSlM9CiBjcm9zc19jb21waWxpbmc9bm8KIHN1YmRpcnM9CiBNRkxBR1M9CiBNQUtFRkxBR1M9Ci1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotCi0jIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNoZWxsIGhlcmUgZG9jdW1lbnQuCi0jIFRoaXMgdmFyaWFibGUgc2VlbXMgb2Jzb2xldGUuICBJdCBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZCwgYW5kCi0jIG9ubHkgYWNfbWF4X3NlZF9saW5lcyBzaG91bGQgYmUgdXNlZC4KLTogJHthY19tYXhfaGVyZV9saW5lcz0zOH0KIAogIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCiBQQUNLQUdFX05BTUU9J05ldC1TTk1QJwogUEFDS0FHRV9UQVJOQU1FPSduZXQtc25tcCcKLVBBQ0tBR0VfVkVSU0lPTj0nNS40LjQnCi1QQUNLQUdFX1NUUklORz0nTmV0LVNOTVAgNS40LjQnCitQQUNLQUdFX1ZFUlNJT049JzUuNy4zJworUEFDS0FHRV9TVFJJTkc9J05ldC1TTk1QIDUuNy4zJwogUEFDS0FHRV9CVUdSRVBPUlQ9J25ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQnCitQQUNLQUdFX1VSTD0nJwogCi1hY191bmlxdWVfZmlsZT0iYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jIgorYWNfdW5pcXVlX2ZpbGU9ImFnZW50L3NubXBkLmMiCiAjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCiBhY19pbmNsdWRlc19kZWZhdWx0PSJcCiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpZiBIQVZFX1NZU19UWVBFU19ICisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAogIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRfSAorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAogIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2VuZGlmCi0jaWYgU1REQ19IRUFERVJTCisjaWZkZWYgU1REQ19IRUFERVJTCiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgogIyBpbmNsdWRlIDxzdGRkZWYuaD4KICNlbHNlCi0jIGlmIEhBVkVfU1RETElCX0gKKyMgaWZkZWYgSEFWRV9TVERMSUJfSAogIyAgaW5jbHVkZSA8c3RkbGliLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1NUUklOR19ICi0jIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAogIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CiAjIGVuZGlmCiAjIGluY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCi0jaWYgSEFWRV9TVFJJTkdTX0gKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAogIyBpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX0lOVFRZUEVTX0gKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKICMgaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1RESU5UX0gKLSMgIGluY2x1ZGUgPHN0ZGludC5oPgotIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICiAjIGluY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmIgogCi1hY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRPUiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdFX1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJnZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIENPTkZJR1VSRV9PUFRJT05TIExJQlRPT0xGTEFHUyBJTlNUQUxMX1BSRUZJWCBTTk1QRCBUUkFQTElCUyBVU0VUUkFQTElCUyBNQUlOU1VCUyBIQVZFX0RNQUxMT0NfSCBpbnN0YWxsdWNkaGVhZGVycyBpbnN0YWxsdWNkbGlicyBDQyBDRkxBR1MgTERGTEFHUyBDUFBGTEFHUyBhY19jdF9DQyBFWEVFWFQgT0JKRVhUIENQUCBMSU5LQ0MgRUdSRVAgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRvciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgdGFyZ2V0IHRhcmdldF9jcHUgdGFyZ2V0X3ZlbmRvciB0YXJnZXRfb3MgU0VEIExOX1MgRUNITyBBUiBhY19jdF9BUiBSQU5MSUIgYWNfY3RfUkFOTElCIFNUUklQIGFjX2N0X1NUUklQIERTWU1VVElMIGFjX2N0X0RTWU1VVElMIE5NRURJVCBhY19jdF9OTUVESVQgRExMVE9PTCBhY19jdF9ETExUT09MIEFTIGFjX2N0X0FTIE9CSkRVTVAgYWNfY3RfT0JKRFVNUCBDWFggQ1hYRkxBR1MgYWNfY3RfQ1hYIENYWENQUCBGNzcgRkZMQUdTIGFjX2N0X0Y3NyBMSUJUT09MIExJQlRPT0xfREVQUyBJTlNUQUxMX1BST0dSQU0gSU5TVEFMTF9TQ1JJUFQgSU5TVEFMTF9EQVRBIFNFVF9NQUtFIFBTUFJPRyBQRVJMUFJPRyBQWVRIT05QUk9HIFdIT0FNSSBGSU5EIEFVVE9DT05GIEFVVE9IRUFERVIgVU5BTUVQUk9HIFZFUlNJT04gUkVMRUFTRVZFUlNJT04gREVWRkxBR1MgVE9QX0lOQ0xVREVTIFNOTVBMSUJfSU5DTFVERVMgQUdFTlRfSU5DTFVERVMgSEVMUEVSX0lOQ0xVREVTIE1JQkdST1VQX0lOQ0xVREVTIEdOVV92cGF0aCBOT05fR05VX1ZQQVRIIENDUEFUSCBFWFRSQUNQUEZMQUdTIFNOTVBMSUJQQVRIIFNOTVBTSEFSRVBBVEggTkVUU05NUF9ERUZBVUxUX01JQkRJUlMgU05NUENPTkZQQVRIIG90aGVyX3NyY19saXN0IG90aGVyX29ianNfbGlzdCBvdGhlcl9sb2Jqc19saXN0IG90aGVyX2FnZW50b2JqcyBvdGhlcl9sYWdlbnRvYmpzIG90aGVyX3RyYXBkX29iamVjdHMgdHJhbnNwb3J0X2hkcl9saXN0IHRyYW5zcG9ydF9zcmNfbGlzdCB0cmFuc3BvcnRfb2JqX2xpc3QgdHJhbnNwb3J0X2xvYmpfbGlzdCBzZWN1cml0eV9zcmNfbGlzdCBzZWN1cml0eV9oZHJfbGlzdCBzZWN1cml0eV9vYmpfbGlzdCBzZWN1cml0eV9sb2JqX2xpc3Qga3JiNV9jb25maWcgZGVmYXVsdF9taWJzX2luc3RhbGwgZGxsY2xlYW5zIEVOVl9TRVBBUkFUT1IgTkVUU05NUF9ERUZBVUxUX01JQlMgRU1CRURQRVJMSU5TVEFMTCBFTUJFRFBFUkxVTklOU1RBTEwgUEVSTExET1BUU19GT1JfTElCUyBQRVJMTERPUFRTX0ZPUl9BUFBTIFBFUkxUQVJHUyBQRVJMSU5TVEFMTFRBUkdTIFBFUkxVTklOU1RBTExUQVJHUyBQRVJMQVJHUyBQWVRIT05UQVJHUyBQWVRIT05JTlNUQUxMVEFSR1MgUFlUSE9OVU5JTlNUQUxMVEFSR1MgUFlUSE9OQ0xFQU5UQVJHUyBQWVRIT05BUkdTIExQU1RBVF9QQVRIIExORVRTTk1QTElCUyBMQUdFTlRMSUJTIFBTQ01EIEFMTE9DQSBMSUJPQkpTIExNSUJMSUJTIEFHRU5UTElCUyBPVEhFUkFHRU5UTElCT0JKUyBPVEhFUkFHRU5UTElCTE9CSlMgUEVSU0lTVEVOVF9ESVJFQ1RPUlkgVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlkgQ09QWV9QRVJTSVNURU5UX0ZJTEVTIERMTElCUyBMVExJQk9CSlMnCi1hY19zdWJzdF9maWxlcz0nTU9EVUxFX0xJU1QgbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0IG1vZHVsZV9ydWxlcyBtb2R1bGVfbGlzdF9kZXBzIG1pYl9tb2R1bGVfbGlzdF9kZXBzIGFnZW50X21vZHVsZV9saXN0X2RlcHMnCithY19jb25maWdfbGlib2JqX2Rpcj1zbm1wbGliCithY19zdWJzdF92YXJzPSdMVExJQk9CSlMKK2FjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRQorUEFSVElBTFRBUkdFVEZMQUdTCitETExJQlMKK09USEVSQUdFTlRMSUJMRlRTCitPVEhFUkFHRU5UTElCTE9CSlMKK09USEVSQUdFTlRMSUJPQkpTCitBR0VOVExJQlMKK0xNSUJMSUJTCitQU0NNRAorTFBTVEFUX1BBVEgKK0xJQk9CSlMKK0FMTE9DQQorVkFMX0xJQlMKK0xBR0VOVExJQlMKK0xORVRTTk1QTElCUworUFlUSE9ORkVBVFVSRVMKK1BZVEhPTkFSR1MKK1BZVEhPTkNMRUFOVEFSR1MKK1BZVEhPTlVOSU5TVEFMTFRBUkdTCitQWVRIT05JTlNUQUxMVEFSR1MKK1BZVEhPTlRBUkdTCitQRVJMRkVBVFVSRVMKK1BFUkxBUkdTCitQRVJMVU5JTlNUQUxMVEFSR1MKK1BFUkxJTlNUQUxMVEFSR1MKK1BFUkxUQVJHUworUEVSTExET1BUU19GT1JfQVBQUworUEVSTExET1BUU19GT1JfTElCUworRU1CRURQRVJMVU5JTlNUQUxMCitFTUJFRFBFUkxJTlNUQUxMCitNWVNRTF9JTkNMVURFUworTVlTUUxfTElCUworTVlTUUxDT05GSUcKK2NyeXB0b19maWxlc19sbworY3J5cHRvX2ZpbGVzX28KK2NyeXB0b19maWxlc19jCitORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFCitORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUUKK05FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0UKK05FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRQorTkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRQorTkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFCitORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFCitORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUUKK05FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19GQUxTRQorTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUUKK05FVFNOTVBfREVGQVVMVF9NSUJTCitFTlZfU0VQQVJBVE9SCitkbGxjbGVhbnMKK2RlZmF1bHRfbWlic19pbnN0YWxsCitrcmI1X2NvbmZpZworc2VjdXJpdHlfZnRvYmpfbGlzdAorc2VjdXJpdHlfbG9ial9saXN0CitzZWN1cml0eV9vYmpfbGlzdAorc2VjdXJpdHlfaGRyX2xpc3QKK3NlY3VyaXR5X3NyY19saXN0Cit0cmFuc3BvcnRfZnRvYmpfbGlzdAordHJhbnNwb3J0X2xvYmpfbGlzdAordHJhbnNwb3J0X29ial9saXN0Cit0cmFuc3BvcnRfc3JjX2xpc3QKK3RyYW5zcG9ydF9oZHJfbGlzdAorb3RoZXJfdHJhcGRfb2JqZWN0cworb3RoZXJfZnRhZ2VudG9ianMKK290aGVyX2xhZ2VudG9ianMKK290aGVyX2FnZW50b2Jqcworb3RoZXJfZnRvYmpzX2xpc3QKK290aGVyX2xvYmpzX2xpc3QKK290aGVyX29ianNfbGlzdAorb3RoZXJfc3JjX2xpc3QKK1NOTVBDT05GUEFUSAorTkVUU05NUF9ERUZBVUxUX01JQkRJUlMKK1NOTVBTSEFSRVBBVEgKK1NOTVBMSUJQQVRICitWRVJTSU9OCitEUEtHX1FVRVJZX1BBVEgKK0NDUEFUSAorRVhUUkFDUFBGTEFHUworTERfTk9fVU5ERUZJTkVECit0YXJnZXRfb3MKK3RhcmdldF92ZW5kb3IKK3RhcmdldF9jcHUKK3RhcmdldAorTk9OX0dOVV9WUEFUSAorR05VX3ZwYXRoCitFWFRFUk5BTF9NSUJHUk9VUF9JTkNMVURFUworTUlCR1JPVVBfSU5DTFVERVMKK0hFTFBFUl9JTkNMVURFUworQUdFTlRfSU5DTFVERVMKK1NOTVBMSUJfSU5DTFVERVMKK1RPUF9JTkNMVURFUworREVWRkxBR1MKK0xJQlRPT0xfREVQUworT1RPT0w2NAorT1RPT0wKK0xJUE8KK05NRURJVAorRFNZTVVUSUwKK01BTklGRVNUX1RPT0wKK0FXSworUkFOTElCCitTVFJJUAorYWNfY3RfQVIKK0FSCitOTQorYWNfY3RfRFVNUEJJTgorRFVNUEJJTgorTEQKK0ZHUkVQCitob3N0X29zCitob3N0X3ZlbmRvcgoraG9zdF9jcHUKK2hvc3QKK2J1aWxkX29zCitidWlsZF92ZW5kb3IKK2J1aWxkX2NwdQorYnVpbGQKK0xJQlRPT0wKK09CSkRVTVAKK0RMTFRPT0wKK0FTCitMSU5LQ0MKK0NQUAorT0JKRVhUCitFWEVFWFQKK2FjX2N0X0NDCitDUFBGTEFHUworTERGTEFHUworQ0ZMQUdTCitDQworUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTAorVU5BTUVQUk9HCitQWVRIT05QUk9HCitQU1BST0cKK1BFUkxQUk9HCitBVVRPSEVBREVSCitBVVRPQ09ORgorV0hPQU1JCitGSU5ECitGSUxFCitTRUQKK1NFVF9NQUtFCitMTl9TCitJTlNUQUxMX0RBVEEKK0lOU1RBTExfU0NSSVBUCitJTlNUQUxMX1BST0dSQU0KK0VHUkVQCitHUkVQCitDT1BZX1BFUlNJU1RFTlRfRklMRVMKK1VDRFBFUlNJU1RFTlRfRElSRUNUT1JZCitQRVJTSVNURU5UX0RJUkVDVE9SWQorRkVBVFVSRUhFQURFUlMKK0ZFQVRVUkVUQVJHUworRkVBVFVSRV9SRU1PVkVfRkxBR1MKK0ZFQVRVUkVfQUREX0ZMQUdTCitpbnN0YWxsdWNkbGlicworaW5zdGFsbHVjZGhlYWRlcnMKK0ZUTUFJTlNVQlMKK01BSU5TVUJTCitVU0VUUkFQTElCUworVFJBUExJQlMKK1NOTVBECitJTlNUQUxMX1BSRUZJWAorTElCVE9PTEZMQUdTCitDT05GSUdVUkVfT1BUSU9OUwordGFyZ2V0X2FsaWFzCitob3N0X2FsaWFzCitidWlsZF9hbGlhcworTElCUworRUNIT19UCitFQ0hPX04KK0VDSE9fQworREVGUworbWFuZGlyCitsb2NhbGVkaXIKK2xpYmRpcgorcHNkaXIKK3BkZmRpcgorZHZpZGlyCitodG1sZGlyCitpbmZvZGlyCitkb2NkaXIKK29sZGluY2x1ZGVkaXIKK2luY2x1ZGVkaXIKK2xvY2Fsc3RhdGVkaXIKK3NoYXJlZHN0YXRlZGlyCitzeXNjb25mZGlyCitkYXRhZGlyCitkYXRhcm9vdGRpcgorbGliZXhlY2Rpcgorc2JpbmRpcgorYmluZGlyCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCitwcmVmaXgKK2V4ZWNfcHJlZml4CitQQUNLQUdFX1VSTAorUEFDS0FHRV9CVUdSRVBPUlQKK1BBQ0tBR0VfU1RSSU5HCitQQUNLQUdFX1ZFUlNJT04KK1BBQ0tBR0VfVEFSTkFNRQorUEFDS0FHRV9OQU1FCitQQVRIX1NFUEFSQVRPUgorU0hFTEwnCithY19zdWJzdF9maWxlcz0nTU9EVUxFX0xJU1QKK21vZHVsZV9saXN0X2MKK21vZHVsZV9saXN0X28KK21vZHVsZV9saXN0X2xvCittb2R1bGVfbGlzdF9mdAorbWliX21vZHVsZV9saXN0X2MKK21pYl9tb2R1bGVfbGlzdF9vCittaWJfbW9kdWxlX2xpc3RfbG8KK21pYl9tb2R1bGVfbGlzdF9mdAorYWdlbnRfbW9kdWxlX2xpc3RfYworYWdlbnRfbW9kdWxlX2xpc3RfbworYWdlbnRfbW9kdWxlX2xpc3RfbG8KK2FnZW50X21vZHVsZV9saXN0X2Z0CittaWJncm91cF9saXN0X28KK21pYmdyb3VwX2xpc3RfbG8KK21pYmdyb3VwX2xpc3RfZnQKK2FnZW50Z3JvdXBfbGlzdF9vCithZ2VudGdyb3VwX2xpc3RfbG8KK2FnZW50Z3JvdXBfbGlzdF9mdAorbW9kdWxlX3J1bGVzCittb2R1bGVfbGlzdF9kZXBzCittaWJfbW9kdWxlX2xpc3RfZGVwcworYWdlbnRfbW9kdWxlX2xpc3RfZGVwcycKK2FjX3VzZXJfb3B0cz0nCitlbmFibGVfb3B0aW9uX2NoZWNraW5nCit3aXRoX2NjCit3aXRoX2xpbmtjYword2l0aF9hcgord2l0aF9lbmRpYW5uZXNzCit3aXRoX2NmbGFncword2l0aF9sZGZsYWdzCitlbmFibGVfYXNfbmVlZGVkCit3aXRoX2xpYnMKK2VuYWJsZV9zaWxlbnRfbGlidG9vbAord2l0aF9kbWFsbG9jCitlbmFibGVfZG1hbGxvYword2l0aF9lZmVuY2UKK2VuYWJsZV9lZmVuY2UKK3dpdGhfcnNhcmVmCitlbmFibGVfcnNhcmVmCit3aXRoX29wZW5zc2wKK2VuYWJsZV9vcGVuc3NsCit3aXRoX3NzbAorZW5hYmxlX3NzbAord2l0aF9wa2NzCitlbmFibGVfcGtjcword2l0aF9rcmI1CitlbmFibGVfa3JiNQord2l0aF9kbnNzZWNfbG9jYWxfdmFsaWRhdGlvbgorZW5hYmxlX2Ruc3NlY19sb2NhbF92YWxpZGF0aW9uCit3aXRoX2Ruc3NlYworZW5hYmxlX2Ruc3NlYword2l0aF9ycG0KK2VuYWJsZV9ycG0KK3dpdGhfaW5zdGFsbF9wcmVmaXgKK2VuYWJsZV9hZ2VudAord2l0aF9hZ2VudAorZW5hYmxlX2FwcGxpY2F0aW9ucword2l0aF9hcHBsaWNhdGlvbnMKK2VuYWJsZV9tYW51YWxzCit3aXRoX21hbnVhbHMKK2VuYWJsZV9zY3JpcHRzCit3aXRoX3NjcmlwdHMKK2VuYWJsZV9taWJzCitlbmFibGVfbWliX2NvbmZpZ19jaGVja2luZword2l0aF9taWJfY29uZmlnX2NoZWNraW5nCitlbmFibGVfbWliX2NvbmZpZ19kZWJ1Zword2l0aF9taWJfY29uZmlnX2RlYnVnCitlbmFibGVfbmV3X2ZlYXR1cmVzCitlbmFibGVfb2xkX2ZlYXR1cmVzCit3aXRoX2ZlYXR1cmVzX29mCit3aXRoX2RlZmF1bHRzCitlbmFibGVfZGVmYXVsdHMKK2VuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5Cit3aXRoX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkKK2VuYWJsZV9taWJfbG9hZGluZword2l0aF9taWJfbG9hZGluZword2l0aF9taWJkaXJzCitlbmFibGVfbWliZGlycword2l0aF9taWJzCit3aXRoX21pYmZpbGVzCitlbmFibGVfbWliZmlsZXMKK2VuYWJsZV9kZXMKK3dpdGhfZGVzCitlbmFibGVfcHJpdmFjeQord2l0aF9wcml2YWN5CitlbmFibGVfbWQ1Cit3aXRoX21kNQorZW5hYmxlX2ludGVybmFsX21kNQord2l0aF9pbnRlcm5hbF9tZDUKK3dpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMKK2VuYWJsZV9vcGFxdWVfc3BlY2lhbF90eXBlcworZW5hYmxlX2lwdjYKK3dpdGhfaXB2Ngord2l0aF9sb2dmaWxlCitlbmFibGVfbG9nZmlsZQord2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeQorZW5hYmxlX3BlcnNpc3RlbnRfZGlyZWN0b3J5Cit3aXRoX3BlcnNpc3RlbnRfbWFzaworZW5hYmxlX3BlcnNpc3RlbnRfbWFzaword2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMKK2VuYWJsZV9jb3B5X3BlcnNpc3RlbnRfZmlsZXMKK3dpdGhfdGVtcF9maWxlX3BhdHRlcm4KK2VuYWJsZV90ZW1wX2ZpbGVfcGF0dGVybgorZW5hYmxlX3NubXB2MQord2l0aF9zbm1wdjEKK2VuYWJsZV9zbm1wdjJjCit3aXRoX3NubXB2MmMKK3dpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24KK2VuYWJsZV9kZWZhdWx0X3NubXBfdmVyc2lvbgord2l0aF90cmFuc3BvcnRzCit3aXRoX291dF90cmFuc3BvcnRzCit3aXRoX3RyYW5zcG9ydAord2l0aF9vdXRfdHJhbnNwb3J0Cit3aXRoX3NlY3VyaXR5X21vZHVsZXMKK2VuYWJsZV9zZWN1cml0eV9tb2R1bGVzCit3aXRoX291dF9zZWN1cml0eV9tb2R1bGVzCitlbmFibGVfb3V0X3NlY3VyaXR5X21vZHVsZXMKK2VuYWJsZV9kZWJ1Z2dpbmcKK3dpdGhfZGVidWdnaW5nCitlbmFibGVfZGV2ZWxvcGVyCit3aXRoX2RldmVsb3BlcgorZW5hYmxlX3Rlc3RpbmdfY29kZQord2l0aF90ZXN0aW5nX2NvZGUKK2VuYWJsZV9yZWVudHJhbnQKK3dpdGhfcmVlbnRyYW50CitlbmFibGVfZGVwcmVjYXRlZAord2l0aF9kZXByZWNhdGVkCit3aXRoX3Jvb3RfYWNjZXNzCitlbmFibGVfcm9vdF9hY2Nlc3MKK3dpdGhfa21lbV91c2FnZQorZW5hYmxlX2ttZW1fdXNhZ2UKK3dpdGhfZHVtbXlfdmFsdWVzCitlbmFibGVfZHVtbXlfdmFsdWVzCitlbmFibGVfc2V0X3N1cHBvcnQKK3dpdGhfc2V0X3N1cHBvcnQKK3dpdGhfc3lzX2NvbnRhY3QKK2VuYWJsZV9zeXNfY29udGFjdAord2l0aF9zeXNfbG9jYXRpb24KK2VuYWJsZV9zeXNfbG9jYXRpb24KK2VuYWJsZV9sb2NhbF9zbXV4Cit3aXRoX2xvY2FsX3NtdXgKK2VuYWJsZV9hZ2VudHhfZG9tX3NvY2tfb25seQord2l0aF9hZ2VudHhfZG9tX3NvY2tfb25seQorZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudAord2l0aF9zbm1wdHJhcGRfc3ViYWdlbnQKK3dpdGhfYWdlbnR4X3NvY2tldAorZW5hYmxlX2FnZW50eF9zb2NrZXQKK3dpdGhfZmVhdHVyZXMKK2VuYWJsZV9mZWF0dXJlcword2l0aF9vdXRfZmVhdHVyZXMKK2VuYWJsZV9vdXRfZmVhdHVyZXMKK3dpdGhfZmVhdHVyZQord2l0aF9vdXRfZmVhdHVyZQorZW5hYmxlX21pbmltYWxpc3QKK3dpdGhfbWluaW1hbGlzdAorZW5hYmxlX25vdGlmeV9vbmx5Cit3aXRoX25vdGlmeV9vbmx5CitlbmFibGVfbm90aWZ5b25seQorZW5hYmxlX25vX2xpc3Rlbgord2l0aF9ub19saXN0ZW4KK2VuYWJsZV9ub2xpc3RlbgorZW5hYmxlX3JlYWRfb25seQord2l0aF9yZWFkX29ubHkKK2VuYWJsZV9yZWFkb25seQorZW5hYmxlX21pbmlfYWdlbnQKK3dpdGhfbWluaV9hZ2VudAord2l0aF9taW5pYWdlbnQKK2VuYWJsZV9taW5pYWdlbnQKK2VuYWJsZV9tZmRfcmV3cml0ZXMKK3dpdGhfbWZkX3Jld3JpdGVzCit3aXRoX21pYl9tb2R1bGVzCitlbmFibGVfbWliX21vZHVsZXMKK3dpdGhfb3V0X21pYl9tb2R1bGVzCitlbmFibGVfb3V0X21pYl9tb2R1bGVzCit3aXRoX21pYl9tb2R1bGUKK3dpdGhfbW9kdWxlCit3aXRoX21vZHVsZXMKK3dpdGhfb3V0X21pYl9tb2R1bGUKK3dpdGhfb3V0X21vZHVsZQord2l0aF9vdXRfbW9kdWxlcword2l0aF9lbnRlcnByaXNlX29pZAorZW5hYmxlX2VudGVycHJpc2Vfb2lkCit3aXRoX2VudGVycHJpc2Vfc3lzb2lkCitlbmFibGVfZW50ZXJwcmlzZV9zeXNvaWQKK3dpdGhfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkCitlbmFibGVfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkCit3aXRoX3BlcmxfbW9kdWxlcworZW5hYmxlX3BlcmxfbW9kdWxlcworZW5hYmxlX2VtYmVkZGVkX3BlcmwKK3dpdGhfZW1iZWRkZWRfcGVybAorZW5hYmxlX3BlcmxfY2NfY2hlY2tzCit3aXRoX3BlcmxfY2NfY2hlY2tzCit3aXRoX3B5dGhvbl9tb2R1bGVzCit3aXRoX3NlcnZlcl9zZW5kX2J1ZgorZW5hYmxlX3NlcnZlcl9zZW5kX2J1Zgord2l0aF9zZXJ2ZXJfcmVjdl9idWYKK2VuYWJsZV9zZXJ2ZXJfcmVjdl9idWYKK3dpdGhfY2xpZW50X3NlbmRfYnVmCitlbmFibGVfY2xpZW50X3NlbmRfYnVmCit3aXRoX2NsaWVudF9yZWN2X2J1ZgorZW5hYmxlX2NsaWVudF9yZWN2X2J1Zgord2l0aF9lbGYKK2VuYWJsZV9lbGYKK3dpdGhfbmwKK2VuYWJsZV9ubAord2l0aF9saWJ3cmFwCitlbmFibGVfbGlid3JhcAord2l0aF96bGliCitlbmFibGVfemxpYgord2l0aF9iemlwMgord2l0aF9tbnR0YWIKK2VuYWJsZV9tbnR0YWIKK3dpdGhfbXlzcWwKK2VuYWJsZV9teXNxbAorZW5hYmxlX3NoYXJlZAorZW5hYmxlX3N0YXRpYword2l0aF9waWMKK2VuYWJsZV9mYXN0X2luc3RhbGwKK3dpdGhfZ251X2xkCit3aXRoX3N5c3Jvb3QKK2VuYWJsZV9saWJ0b29sX2xvY2sKKycKKyAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCitob3N0X2FsaWFzCit0YXJnZXRfYWxpYXMKK0NDCitDRkxBR1MKK0xERkxBR1MKK0xJQlMKK0NQUEZMQUdTCitDUFAnCisKIAogIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgogYWNfaW5pdF9oZWxwPQogYWNfaW5pdF92ZXJzaW9uPWZhbHNlCithY191bnJlY29nbml6ZWRfb3B0cz0KK2FjX3VucmVjb2duaXplZF9zZXA9CiAjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAogIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgogY2FjaGVfZmlsZT0vZGV2L251bGwKQEAgLTQ5NCwzNCArMTA3OCw0OSBAQAogIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKICMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KICMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCiBiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKIHNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCiBsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJwotZGF0YWRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9Jwogc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKIHNoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJwogbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKLWxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJwogaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCiBvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCi1pbmZvZGlyPScke3ByZWZpeH0vaW5mbycKLW1hbmRpcj0nJHtwcmVmaXh9L21hbicKK2RvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKK2luZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCitodG1sZGlyPScke2RvY2Rpcn0nCitkdmlkaXI9JyR7ZG9jZGlyfScKK3BkZmRpcj0nJHtkb2NkaXJ9JworcHNkaXI9JyR7ZG9jZGlyfScKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCittYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKIAogYWNfcHJldj0KK2FjX2Rhc2hkYXNoPQogZm9yIGFjX29wdGlvbgogZG8KICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCiAgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgotICAgIGV2YWwgIiRhY19wcmV2PVwkYWNfb3B0aW9uIgorICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KICAgICBhY19wcmV2PQogICAgIGNvbnRpbnVlCiAgIGZpCiAKLSAgYWNfb3B0YXJnPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFtePV0qPVwoLipcKSdgCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAqPT8qKSBhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworICAqPSkgICBhY19vcHRhcmc9IDs7CisgICopICAgIGFjX29wdGFyZz15ZXMgOzsKKyAgZXNhYwogCiAgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCiAKLSAgY2FzZSAkYWNfb3B0aW9uIGluCisgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorICAtLSkKKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKIAogICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQogICAgIGFjX3ByZXY9YmluZGlyIDs7CkBAIC01NDMsMzMgKzExNDIsNTkgQEAKICAgLS1jb25maWctY2FjaGUgfCAtQykKICAgICBjYWNoZV9maWxlPWNvbmZpZy5jYWNoZSA7OwogCi0gIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKICAgICBhY19wcmV2PWRhdGFkaXIgOzsKLSAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCi0gIHwgLS1kYT0qKQorICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQogICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OwogCisgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKyAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7CisgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OworCiAgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKLSAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCi0gICAgZXZhbCAiZW5hYmxlXyRhY19mZWF0dXJlPW5vIiA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CiAKICAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKLSAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvLS9fL2cnYAotICAgIGNhc2UgJGFjX29wdGlvbiBpbgotICAgICAgKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKLSAgICAgICopIGFjX29wdGFyZz15ZXMgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1lbmFibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKICAgICBlc2FjCi0gICAgZXZhbCAiZW5hYmxlXyRhY19mZWF0dXJlPSckYWNfb3B0YXJnJyIgOzsKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OwogCiAgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKICAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXApAQCAtNTk2LDYgKzEyMjEsMTIgQEAKICAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKICAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKIAorICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCiAgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKICAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKICAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKQEAgLTYyMCwxMyArMTI1MSwxNiBAQAogICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKICAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKIAorICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCiAgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKLSAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgXAotICB8IC0tbG9jYWxzIHwgLS1sb2NhbCB8IC0tbG9jYSB8IC0tbG9jIHwgLS1sbykKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKICAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKICAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCi0gIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogXAotICB8IC0tbG9jYWxzPSogfCAtLWxvY2FsPSogfCAtLWxvY2E9KiB8IC0tbG9jPSogfCAtLWxvPSopCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQogICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OwogCiAgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCkBAIC02OTEsNiArMTMyNSwxNiBAQAogICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCiAgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CiAKKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKyAgICBhY19wcmV2PXBkZmRpciA7OworICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKyAgICBhY19wcmV2PXBzZGlyIDs7CisgIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQorICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKwogICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAogICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKICAgICBzaWxlbnQ9eWVzIDs7CkBAIC03NDEsMjYgKzEzODUsMzYgQEAKICAgICBhY19pbml0X3ZlcnNpb249OiA7OwogCiAgIC13aXRoLSogfCAtLXdpdGgtKikKLSAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3BhY2thZ2UiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKLSAgICBjYXNlICRhY19vcHRpb24gaW4KLSAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7Ci0gICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKICAgICBlc2FjCi0gICAgZXZhbCAid2l0aF8kYWNfcGFja2FnZT0nJGFjX29wdGFyZyciIDs7CisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CiAKICAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQotICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzLy0vXy9nJ2AKLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPW5vIiA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OwogCiAgIC0teCkKICAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCkBAIC03ODAsMjcgKzE0MzQsMjYgQEAKICAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCiAgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OwogCi0gIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICRhY19vcHRpb24KLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCiAgICAgOzsKIAogICAqPSopCiAgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgCi0gICAgZXZhbCAiJGFjX2VudnZhcj0nJGFjX29wdGFyZyciCisgICAgY2FzZSAkYWNfZW52dmFyIGluICMoCisgICAgICAnJyB8IFswLTldKiB8ICpbIV8kYXNfY3JfYWxudW1dKiApCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OworICAgIGVzYWMKKyAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKICAgICBleHBvcnQgJGFjX2VudnZhciA7OwogCiAgICopCiAgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgotICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCiAgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKLSAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAiJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0iCiAgICAgOzsKIAogICBlc2FjCkBAIC04MDgsMzEgKzE0NjEsMzYgQEAKIAogaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCiAgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCiBmaQogCi0jIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KLWZvciBhY192YXIgaW4gZXhlY19wcmVmaXggcHJlZml4Ci1kbwotICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKLSAgY2FzZSAkYWNfdmFsIGluCi0gICAgW1xcLyRdKiB8ID86W1xcL10qIHwgTk9ORSB8ICcnICkgOzsKLSAgICAqKSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCisgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKyAgICBubykgOzsKKyAgICBmYXRhbCkgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiIDs7CisgICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OwogICBlc2FjCi1kb25lCitmaQogCi0jIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KLWZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAotCSAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKIGRvCi0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KICAgY2FzZSAkYWNfdmFsIGluCi0gICAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKLSAgICAqKSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgICAgKi8gKQorICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisgICAgICBldmFsICRhY192YXI9XCRhY192YWw7OwogICBlc2FjCisgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCiBkb25lCiAKICMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKQEAgLTg0Niw4ICsxNTA0LDggQEAKIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgogICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KICAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKLSAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCi0gICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQuIiA+JjIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkIiA+JjIKICAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKICAgZmkKQEAgLTg1OSw5NCArMTUxNyw3MiBAQAogdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAogCiAKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKICMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KIGlmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCiAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCi0gICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgotICBhY19jb25mZGlyPWAoZGlybmFtZSAiJDAiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiQwIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAogICBzcmNkaXI9JGFjX2NvbmZkaXIKLSAgaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCiAgICAgc3JjZGlyPS4uCiAgIGZpCiBlbHNlCiAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KIGZpCi1pZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KLSAgaWYgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRhY19jb25mZGlyIG9yIC4uIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBlbHNlCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKIGZpCi0oY2QgJHNyY2RpciAmJiB0ZXN0IC1yIC4vJGFjX3VuaXF1ZV9maWxlKSAyPi9kZXYvbnVsbCB8fAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1zcmNkaXI9YGVjaG8gIiRzcmNkaXIiIHwgc2VkICdzJVwoW15cXC9dXClbXFwvXSokJVwxJSdgCi1hY19lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQotYWNfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcwotYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3NldD0ke2J1aWxkX2FsaWFzK3NldH0KLWFjX2N2X2Vudl9idWlsZF9hbGlhc192YWx1ZT0kYnVpbGRfYWxpYXMKLWFjX2Vudl9ob3N0X2FsaWFzX3NldD0ke2hvc3RfYWxpYXMrc2V0fQotYWNfZW52X2hvc3RfYWxpYXNfdmFsdWU9JGhvc3RfYWxpYXMKLWFjX2N2X2Vudl9ob3N0X2FsaWFzX3NldD0ke2hvc3RfYWxpYXMrc2V0fQotYWNfY3ZfZW52X2hvc3RfYWxpYXNfdmFsdWU9JGhvc3RfYWxpYXMKLWFjX2Vudl90YXJnZXRfYWxpYXNfc2V0PSR7dGFyZ2V0X2FsaWFzK3NldH0KLWFjX2Vudl90YXJnZXRfYWxpYXNfdmFsdWU9JHRhcmdldF9hbGlhcwotYWNfY3ZfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQotYWNfY3ZfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCi1hY19lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQotYWNfZW52X0NDX3ZhbHVlPSRDQwotYWNfY3ZfZW52X0NDX3NldD0ke0NDK3NldH0KLWFjX2N2X2Vudl9DQ192YWx1ZT0kQ0MKLWFjX2Vudl9DRkxBR1Nfc2V0PSR7Q0ZMQUdTK3NldH0KLWFjX2Vudl9DRkxBR1NfdmFsdWU9JENGTEFHUwotYWNfY3ZfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQotYWNfY3ZfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCi1hY19lbnZfTERGTEFHU19zZXQ9JHtMREZMQUdTK3NldH0KLWFjX2Vudl9MREZMQUdTX3ZhbHVlPSRMREZMQUdTCi1hY19jdl9lbnZfTERGTEFHU19zZXQ9JHtMREZMQUdTK3NldH0KLWFjX2N2X2Vudl9MREZMQUdTX3ZhbHVlPSRMREZMQUdTCi1hY19lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQotYWNfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUwotYWNfY3ZfZW52X0NQUEZMQUdTX3NldD0ke0NQUEZMQUdTK3NldH0KLWFjX2N2X2Vudl9DUFBGTEFHU192YWx1ZT0kQ1BQRkxBR1MKLWFjX2Vudl9DUFBfc2V0PSR7Q1BQK3NldH0KLWFjX2Vudl9DUFBfdmFsdWU9JENQUAotYWNfY3ZfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQotYWNfY3ZfZW52X0NQUF92YWx1ZT0kQ1BQCi1hY19lbnZfQ1hYX3NldD0ke0NYWCtzZXR9Ci1hY19lbnZfQ1hYX3ZhbHVlPSRDWFgKLWFjX2N2X2Vudl9DWFhfc2V0PSR7Q1hYK3NldH0KLWFjX2N2X2Vudl9DWFhfdmFsdWU9JENYWAotYWNfZW52X0NYWEZMQUdTX3NldD0ke0NYWEZMQUdTK3NldH0KLWFjX2Vudl9DWFhGTEFHU192YWx1ZT0kQ1hYRkxBR1MKLWFjX2N2X2Vudl9DWFhGTEFHU19zZXQ9JHtDWFhGTEFHUytzZXR9Ci1hY19jdl9lbnZfQ1hYRkxBR1NfdmFsdWU9JENYWEZMQUdTCi1hY19lbnZfQ1hYQ1BQX3NldD0ke0NYWENQUCtzZXR9Ci1hY19lbnZfQ1hYQ1BQX3ZhbHVlPSRDWFhDUFAKLWFjX2N2X2Vudl9DWFhDUFBfc2V0PSR7Q1hYQ1BQK3NldH0KLWFjX2N2X2Vudl9DWFhDUFBfdmFsdWU9JENYWENQUAotYWNfZW52X0Y3N19zZXQ9JHtGNzcrc2V0fQotYWNfZW52X0Y3N192YWx1ZT0kRjc3Ci1hY19jdl9lbnZfRjc3X3NldD0ke0Y3NytzZXR9Ci1hY19jdl9lbnZfRjc3X3ZhbHVlPSRGNzcKLWFjX2Vudl9GRkxBR1Nfc2V0PSR7RkZMQUdTK3NldH0KLWFjX2Vudl9GRkxBR1NfdmFsdWU9JEZGTEFHUwotYWNfY3ZfZW52X0ZGTEFHU19zZXQ9JHtGRkxBR1Mrc2V0fQotYWNfY3ZfZW52X0ZGTEFHU192YWx1ZT0kRkZMQUdTCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworZXNhYworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmUKIAogIwogIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgpAQCAtOTU1LDcgKzE1OTEsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIE5ldC1TTk1QIDUuNC40IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KK1xgY29uZmlndXJlJyBjb25maWd1cmVzIE5ldC1TTk1QIDUuNy4zIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTk2OSwyMCArMTYwNSwxNyBAQAogICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCiAgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcwogICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nIC4uLicgbWVzc2FnZXMKICAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQogICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJwogICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcwogICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KIAotX0FDRU9GCi0KLSAgY2F0IDw8X0FDRU9GCiBJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CiAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAotCQkJICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQogICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAotCQkJICBbUFJFRklYXQorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQogCiBCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KIFxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CkBAIC05OTIsMTggKzE2MjUsMjUgQEAKIEZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgogCiBGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgotICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQotICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQotICAtLWxpYmV4ZWNkaXI9RElSICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9zaGFyZV0KLSAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQotICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KLSAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQotICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KLSAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQotICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbUFJFRklYL2luZm9dCi0gIC0tbWFuZGlyPURJUiAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW1BSRUZJWC9tYW5dCisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KKyAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvbmV0LXNubXBdCisgIC0taHRtbGRpcj1ESVIgICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBzZGlyPURJUiAgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCiBfQUNFT0YKIAogICBjYXQgPDxcX0FDRU9GCkBAIC0xMDE3LDM1ICsxNjU3LDQ3IEBACiAKIGlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCiAgIGNhc2UgJGFjX2luaXRfaGVscCBpbgotICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgTmV0LVNOTVAgNS40LjQ6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBOZXQtU05NUCA1LjcuMzoiOzsKICAgIGVzYWMKICAgY2F0IDw8XF9BQ0VPRgogCiBPcHRpb25hbCBGZWF0dXJlczoKKyAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAgaWdub3JlIHVucmVjb2duaXplZCAtLWVuYWJsZS8tLXdpdGggb3B0aW9ucwogICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCiAgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KLSAgLS1lbmFibGUtYXMtbmVlZGVkICAgICAgICAgICAgICBMaW5rIGxpYnBlcmwgYWdhaW5zdCBOZXQtU05NUCBsaWJyYXJpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBhcHBsaWNhdGlvbnMuIFdlIHJlY29tbWVuZCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGlzIG9wdGlvbiBpZiBpdCB3b3Jrcy4KKyAgLS1kaXNhYmxlLWFzLW5lZWRlZCAgICAgICAgICAgICBMaW5rIGxpYnBlcmwgYWdhaW5zdCBhcHBsaWNhdGlvbnMgcmF0aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBOZXQtU05NUCBsaWJyYXJpZXMuIFVzZSBvbmx5IGlmIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdheSBkb2Vzbid0IHdvcmsuCiAgIC0tZW5hYmxlLXNpbGVudC1saWJ0b29sICAgICAgICAgUGFzcyAtLXNpbGVudCB0byBsaWJ0b29sLgogCi0gIC0tZW5hYmxlLW1pbmktYWdlbnQgICAgICAgICAgICAgQnVpbGQgYSBtaW5pbWFsIGFnZW50LgogICAtLWRpc2FibGUtYWdlbnQgICAgICAgICAgICAgICAgIERvIG5vdCBidWlsZCB0aGUgYWdlbnQgKHNubXBkKS4KICAgLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyAgICAgICAgICBEbyBub3QgYnVpbGQgdGhlIGFwcHMgKHNubXBnZXQsIC4uLikuCiAgIC0tZGlzYWJsZS1tYW51YWxzICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIG1hbnVhbHMuCiAgIC0tZGlzYWJsZS1zY3JpcHRzICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIHNjcmlwdHMgKG1pYjJjLCAuLi4pLgogICAtLWRpc2FibGUtbWlicyAgICAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBtaWIgZmlsZXMuCisgIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcgICAgVHVybnMgb24gZXh0cmEgY2hlY2tzIGR1cmluZyBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbWliIG1vZHVsZXMuIEFueSBjb25mbGljdHMgd2lsbCBjYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSB0byBhYm9ydCAoZGVmYXVsdCBpcyB0byBpc3N1ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZyBhbmQgY29udGludWUuKQorICAtLWVuYWJsZS1taWItY29uZmlnLWRlYnVnICAgICAgIFR1cm5zIG9uIHZlcmJvc2Ugb3V0cHV0IGR1cmluZyBtaWIgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHByb2Nlc3NpbmcuCisgIC0tZW5hYmxlLW5ldy1mZWF0dXJlcyAgIENvbXBpbGUgaW4gbmV3IE1JQiBtb2R1bGVzIGFuZCBvdGhlciBleHBlcmltZW50YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgd2hpY2ggYXJlIGR1ZSB0byBiZSBpbmNsdWRlZCBpbiBmdXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZXMuCisgIC0tZW5hYmxlLW9sZC1mZWF0dXJlcyAgIENvbXBpbGUgaW4gb2xkIE1JQiBtb2R1bGVzIGFuZCBvdGhlciBkZXByZWNhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHdoaWNoIHdlcmUgcmVwbGFjZWQgaW4gdGhlIGRlZmF1bHQgYnVpbGQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyByZWxlYXNlLgorICAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IEluc3RhbGwgdWNkLXNubXAgbG9vay1hbGlrZSBoZWFkZXJzIGFuZCBsaWJzLgorCiAgIC0tZGlzYWJsZS1taWItbG9hZGluZyAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IHBhcnNlcyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5pcHVsYXRlcyB0aGUgbWliIGZpbGVzLgotICAtLWRpc2FibGUtc25tcHYxICAgICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIFNOTVB2MS4KLSAgLS1kaXNhYmxlLXNubXB2MmMgICAgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgaW1wbGVtZW50cyBTTk1QdjJjLgotICAtLWRpc2FibGUtc2V0LXN1cHBvcnQgICAgICAgICAgIERvIG5vdCBhbGxvdyBTTk1QIHNldCByZXF1ZXN0cyB0byB0aGUgYWdlbnQuCiAgIC0tZGlzYWJsZS1kZXMgICAgICAgICAgICAgICAgICAgRG8gbm90IHN1cHBvcnQgREVTIGVuY3J5cHRpb24uCiAgIC0tZGlzYWJsZS1wcml2YWN5ICAgICAgICAgICAgICAgRG9uJ3QgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBwcml2YWN5IChlbmNyeXB0aW9uKS4KICAgLS1kaXNhYmxlLW1kNSAgICAgICAgICAgICAgICAgICBEbyBub3Qgc3VwcG9ydCBNRDUgYXV0aGVudGljYXRpb24uCiAgIC0tZW5hYmxlLWludGVybmFsLW1kNSAgICAgICAgICAgVXNlIHRoZSBpbnRlcm5hbCBNRDUgc3VwcG9ydC4KICAgLS1lbmFibGUtaXB2NiAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZSBJUHY2IHJlYWR5IHZlcnNpb24uCi0gIC0tZW5hYmxlLWxvY2FsLXNtdXggICAgICAgICAgICAgUmVzdHJpY3QgU01VWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3QgKGJ5IGRlZmF1bHQpLgorICAtLWRpc2FibGUtc25tcHYxICAgICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIFNOTVB2MS4KKyAgLS1kaXNhYmxlLXNubXB2MmMgICAgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgaW1wbGVtZW50cyBTTk1QdjJjLgogICAtLWVuYWJsZS1kZWJ1Z2dpbmcgICAgICAgICAgICAgIE91dHB1dHMgZXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGF0IGFsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzLiAgTm9ybWFsbHksIHlvdSBzaG91bGQgbm90IGVuYWJsZSB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgLUQgZmxhZyBvZiB0aGUgY29tbWFuZHMsCkBAIC0xMDU0LDE3ICsxNzA2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1pZ2h0IHByb3ZpZGUgc29tZSBzcGVlZCBiZW5lZml0cy4KICAgLS1lbmFibGUtZGV2ZWxvcGVyICAgICAgICAgICAgICBUdXJucyBvbiBzdXBlci1kdXBlci1leHRyYS1jb21waWxlLXdhcm5pbmdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB1c2luZyBnY2MuCi0gIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5ICAgRGlzYWJsZSBVRFAvVENQIHRyYW5zcG9ydHMgZm9yIGFnZW50eC4KLSAgLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCAgICBEaXNhYmxlIGFnZW50eCBzdWJhZ2VudCBjb2RlIGluIHNubXB0cmFwZC4KLSAgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZyAgICBUdXJucyBvbiBleHRyYSBjaGVja3MgZHVyaW5nIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBtaWIgbW9kdWxlcy4gQW55IGNvbmZsaWN0cyB3aWxsIGNhdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHRvIGFib3J0IChkZWZhdWx0IGlzIHRvIGlzc3VlIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nIGFuZCBjb250aW51ZS4pCi0gIC0tZW5hYmxlLW1pYi1jb25maWctZGVidWcgICAgICAgVHVybnMgb24gdmVyYm9zZSBvdXRwdXQgZHVyaW5nIG1pYiBtb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgcHJvY2Vzc2luZy4pCi0gIC0tZW5hYmxlLW1mZC1yZXdyaXRlcyAgICAgICAgICAgVXNlIG5ldyBNRkQgcmV3cml0ZXMgb2YgbWliIG1vZHVsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYXZhaWxhYmxlLiAoZGVmYXVsdCBpcyB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBtaWIgbW9kdWxlIGNvZGUpLgogICAtLWVuYWJsZS10ZXN0aW5nLWNvZGUgICAgICAgICAgIEVuYWJsZXMgc29tZSBjb2RlIHNlY3Rpb25zIHRoYXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nIG9mIGNlcnRhaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIGZ1bmN0aW9uYWxpdGllcy4gIFRoaXMgc2hvdWxkICpub3QqCkBAIC0xMDc0LDE3ICsxNzE1LDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzLiAgVGhpcyBkb2VzIG5vdCBndWFyYW50ZWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQtc2FmZSBvcGVyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5IGFuIGV4cGVyaW1lbnRhbCBzZXR0aW5nLgorICAtLWRpc2FibGUtZGVwcmVjYXRlZCAgICAgICAgICAgIERvbid0IGNvbXBpbGUgaW4gZGVwcmVjYXRlZCBmdW5jdGlvbnMuCisgIC0tZGlzYWJsZS1zZXQtc3VwcG9ydCAgICAgICAgICAgRG8gbm90IGFsbG93IFNOTVAgc2V0IHJlcXVlc3RzLgorICAtLWVuYWJsZS1sb2NhbC1zbXV4ICAgICAgICAgICAgIFJlc3RyaWN0IFNNVVggY29ubmVjdGlvbnMgdG8gbG9jYWxob3N0IChieSBkZWZhdWx0KS4KKyAgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgICBEaXNhYmxlIFVEUC9UQ1AgdHJhbnNwb3J0cyBmb3IgYWdlbnR4LgorICAtLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50ICAgIERpc2FibGUgYWdlbnR4IHN1YmFnZW50IGNvZGUgaW4gc25tcHRyYXBkLgorICAtLWVuYWJsZS1taW5pbWFsaXN0ICAgICAgICAgICAgIFJlbW92ZSBhbGwgbm9uLWVzc2VudGlhbCBjb2RlIGZlYXR1cmVzLgorICAtLWVuYWJsZS1ub3RpZnktb25seSAgICAgICAgICAgIEJ1aWxkIHRvb2xzIHRoYXQgY2FuIG9ubHkgc2VuZCBub3RpZmljYXRpb25zLgorICAtLWVuYWJsZS1uby1saXN0ZW4gICAgICAgICAgICAgIEJ1aWxkIHRvb2xzIHRoYXQgY2FuJ3QgbGlzdGVuIHRvIHBvcnRzLgorICAtLWVuYWJsZS1yZWFkLW9ubHkgICAgICAgICAgICAgIFJlbW92ZSBhbGwgU0VUIHN1cHBvcnQgZnJvbSB0aGUgY29kZS4KKyAgLS1lbmFibGUtbWluaS1hZ2VudCAgICAgICAgICAgICBCdWlsZCBhIG1pbmltYWwgYWdlbnQuCisgIC0tZW5hYmxlLW1mZC1yZXdyaXRlcyAgICAgICAgICAgVXNlIG5ldyBNRkQgcmV3cml0ZXMgb2YgbWliIG1vZHVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYXZhaWxhYmxlLiAoZGVmYXVsdCBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBtaWIgbW9kdWxlIGNvZGUpLgogICAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCAgICAgICAgIERpc2FibGUgZW1iZWRkZWQgUGVybCBpbiB0aGUgU05NUCBhZ2VudCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wdHJhcGQuIGVuYWJsZWQgYnkgZGVmYXVsdAogICAtLWRpc2FibGUtcGVybC1jYy1jaGVja3MgICAgICAgIERpc2FibGUgY29uZmlndXJlIGNoZWNrcyBmb3Igd2hldGhlciBQZXJsJ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIENvbXBpbGVyIGlzIGNvbXBhdGlibGUgd2l0aCBvdXJzIHdoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBQZXJsIGlzIGVuYWJsZWQuCi0gIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgSW5zdGFsbCB1Y2Qtc25tcCBsb29rLWFsaWtlIGhlYWRlcnMgYW5kIGxpYnMuCi0KLSAgLS1lbmFibGUtc2hhcmVkWz1QS0dTXQotICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KLSAgLS1lbmFibGUtc3RhdGljWz1QS0dTXQotICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtc2hhcmVkWz1QS0dTXSAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgIC0tZW5hYmxlLXN0YXRpY1s9UEtHU10gIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQogICAtLWVuYWJsZS1mYXN0LWluc3RhbGxbPVBLR1NdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBbZGVmYXVsdD15ZXNdCiAgIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcykKQEAgLTExMDMsMTkgKzE3NTMsMzkgQEAKICAgLS13aXRoLWNmbGFncz1DRkxBR1MgICAgICAgICAgICB1c2UgQ0ZMQUdTIGFzIGNvbXBpbGUgdGltZSBhcmd1bWVudHMuCiAgIC0td2l0aC1sZGZsYWdzPUxERkxBR1MgICAgICAgICAgdXNlIExERkxBR1MgYXMgbGluayB0aW1lIGFyZ3VtZW50cyB0byBsZC4KICAgLS13aXRoLWxpYnM9TElCUyAgICAgICAgICAgICAgICB1c2UgTElCUyBhcyBsaW5rIHRpbWUgYXJndW1lbnRzIHRvIGxkLgorICAtLXdpdGgtZG1hbGxvYz1QQVRIICAgICBVc2UgZG1hbGxvYyBsaWJyYXJ5ICh3d3cuZG1hbGxvYy5jb20pCisgIC0td2l0aC1lZmVuY2UgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgYW5kIHVzZSBsaWJlZmVuY2UgKG1hbGxvYykuCisgIC0td2l0aC1yc2FyZWY9UEFUSCAgICAgICAgICAgICAgTG9vayBmb3IgbGlicnNhcmVmIGluIFBBVEgvbGliLgorICAtLXdpdGgtb3BlbnNzbD1QQVRIICAgICAgICAgICAgIExvb2sgZm9yIG9wZW5zc2wgaW4gUEFUSC9saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgUEFUSCBtYXkgYmUgImludGVybmFsIiB0byBidWlsZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW1hbCBjb3BpZWQgT3BlblNTTCBjb2RlIGZvciBVU00gb25seS4KKworICAtLXdpdGgtcGtjcz1QQVRIICAgICAgICAgICAgICAgIExvb2sgZm9yIHBrY3MxMSBpbiBQQVRIL2xpYi4KKyAgLS13aXRoLWtyYjU9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBrcmI1IGluIFBBVEgvbGliLgorICAtLXdpdGgtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24gRW5hYmxlIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uIHVzaW5nIGxpYnZhbCAobm8pCisgIC0td2l0aG91dC1ycG0gICAgICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUlBNIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IHN5c3RlbSB3aGVuIGJ1aWxkaW5nIHRoZSBob3N0IE1JQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS4KICAgLS13aXRoLWluc3RhbGwtcHJlZml4PVBBVEggICAgICBKdXN0IGZvciBpbnN0YWxsaW5nLCBwcmVmaXggYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgd2l0aCBQQVRILiAgVGhpcyBpcyBrbm93biBub3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB3b3JrIG9uIHNvbWUgc3lzdGVtcyB3aXRoIHNoYXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyAoZWcsIEhQVVgpCisgIC0td2l0aC1mZWF0dXJlcy1vZj12ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBpbGUgaW4gTUlCIG1vZHVsZXMgYW5kIG90aGVyIGZlYXR1cmVzIGFzIGlmIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIHJlbGVhc2UgInZlcnNpb24iIChkZWZhdWx0IGlzIDUuNy4zKS4KIAotICAtLXdpdGgtZG1hbGxvYz1QQVRIICAgICAgICAgICAgIFVzZSBkbWFsbG9jIGxpYnJhcnkgKHd3dy5kbWFsbG9jLmNvbSkKLSAgLS13aXRoLWVmZW5jZSAgICAgICAgICAgICAgICAgICBMb29rIGZvciBhbmQgdXNlIGxpYmVmZW5jZSAobWFsbG9jKS4KLSAgLS13aXRoLXJzYXJlZj1QQVRIICAgICAgICAgICAgICBMb29rIGZvciBsaWJyc2FyZWYgaW4gUEFUSC9saWIuCi0gIC0td2l0aC1vcGVuc3NsPVBBVEggICAgICAgICAgICAgTG9vayBmb3Igb3BlbnNzbCBpbiBQQVRIL2xpYi4KLSAgLS13aXRoLWtyYjU9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBrcmI1IGluIFBBVEgvbGliLgotICAtLXdpdGhvdXQtcnBtICAgICAgICAgICAgICAgICAgIERvbid0IGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFJQTSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzeXN0ZW0gd2hlbiBidWlsZGluZyB0aGUgaG9zdCBNSUIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuCitNaXNjZWxsYW5lb3VzOgorICAtLXdpdGgtZGVmYXVsdHMgICAgICAgICBVc2UgZGVmYXVsdHMgZm9yIHByb21wdGVkIHZhbHVlcy4KKyAgLS13aXRoLW1pYmRpcnM9ImRpcjE6ZGlyMjoiICAgRGVmYXVsdCBkaXJlY3RvcmllcyB0byBsb29rIGZvciBtaWJzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBcJEhPTUUvLnNubXAvbWliczpEQVRBRElSL3NubXAvbWlicykKKyAgLS13aXRoLW1pYnM9Iml0ZW0xOml0ZW0yOiIgICAgRGVmYXVsdCBtaWIgSURzIHRvIHJlYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRoZSBkZWZhdWx0IGxpc3QgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNOTVB2Mi1NSUI6SUYtTUlCOklQLU1JQjpUQ1AtTUlCOlVEUC1NSUIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYW55IG1pYnMgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBtaWIgbW9kdWxlcyB0aGUgYWdlbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIHdpdGgpCisgIC0td2l0aC1taWJmaWxlcz0iZmlsZTE6ZmlsZTIiIERlZmF1bHQgbWliIGZpbGVzIHRvIGxvYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6ICBub25lLiAgdXNlcyBJRHMgYWJvdmUgaW5zdGVhZC4pCiAgIC0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyAgRG9uJ3QgdXNlIHNwZWNpYWwgb3BhcXVlIGVuY29kaW5ncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIG5vcm1hbGx5IGNhbm5vdCBoYW5kbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyBudW1iZXJzLCBub3IgbGFyZ2UgNjQgYml0CkBAIC0xMTIzLDE3ICsxNzkzLDY4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LXNubXAgcGFja2FnZSBjb21waWxlcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZXNlIGV4dHJhIGRhdGF0eXBlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbiBhIGxlZ2FsIHdheSkKLSAgLS13aXRoLW1pYmRpcnM9ImRpcjE6ZGlyMjoiICAgRGVmYXVsdCBkaXJlY3RvcmllcyB0byBsb29rIGZvciBtaWJzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBcJEhPTUUvLnNubXAvbWliczpEQVRBRElSL3NubXAvbWlicykKLSAgLS13aXRoLW1pYnM9Iml0ZW0xOml0ZW0yOiIgICAgRGVmYXVsdCBtaWIgSURzIHRvIHJlYWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRoZSBkZWZhdWx0IGxpc3QgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUHYyLU1JQjpJRi1NSUI6SVAtTUlCOlRDUC1NSUI6VURQLU1JQiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhbnkgbWlicyB1c2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIG1pYiBtb2R1bGVzIHRoZSBhZ2VudCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgd2l0aCkKLSAgLS13aXRoLW1pYmZpbGVzPSJmaWxlMTpmaWxlMiIgRGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogIG5vbmUuICB1c2VzIElEcyBhYm92ZSBpbnN0ZWFkLikKLSAgLS13aXRoLXBrY3M9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBwa2NzMTEgaW4gUEFUSC9saWIuCisgIC0td2l0aC1sb2dmaWxlPSJsb2NhdGlvbiIgICAgICAgRGVmYXVsdCBsb2cgZmlsZSBsb2NhdGlvbiBmb3Igc25tcGQuCisgIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0iZGlyZWN0b3J5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgZGlyZWN0b3J5IGZvciBwZXJzaXN0ZW50IGRhdGEgc3RvcmFnZS4KKyAgLS13aXRoLXBlcnNpc3RlbnQtbWFzaz0ibWFzayIgIERlZmF1bHQgbWFzayBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDA3NykKKyAgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz0ibm8iIERvbid0IGNvcHkgcGVyc2lzdGVudCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB1c2UgInllcyIgdG8gY29weSB0aGVtKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogeWVzKQorICAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm49UEFUVEVSTiAgUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXMgKERlZmF1bHQ6IC90bXAvc25tcGRYWFhYWFgpCisgIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj0iMyIgRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWdhbCB2YWx1ZXM6IDEsIDIgKGZvciBTTk1QdjJjKSBvciAzLgorICAtLXdpdGgtdHJhbnNwb3J0cz0idDEgdDIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuCisgIC0td2l0aC1vdXQtdHJhbnNwb3J0cz0idDEgLi4uIiAgRXhjbHVkZSBsaXN0ZWQgU05NUCB0cmFuc3BvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BhY2Ugb3IgY29tbWEgc2VwYXJhdGVkIGxpc3QpLgorCisgIEF2YWlsYWJsZSBTTk1QIHRyYW5zcG9ydCBtb2R1bGVzIGFyZToKKworICAgIFVEUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVAuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYWx3YXlzIGNvbXBpbGVkIGluLgorICAgIFVEUElQdjYgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVB2Ni4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhdmFpbGFibGUgZm9yIExpbnV4LCBTb2xhcmlzIGFuZAorICAgICAgICAgICAgICAgIEZyZWVCU0QgYXQgbGVhc3QuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBpZiBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZC4KKyAgICBUQ1BJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKKyAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgaWYgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQuCisgICAgVENQICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFRDUC9JUC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0LCBidXQgbWF5IGJlIG9taXR0ZWQuCisgICAgVW5peCAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVuaXggZG9tYWluIHByb3RvY29scy4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGV4Y2VwdCBvbiBXaW4zMgorICAgICAgICAgICAgICAgIHBsYXRmb3JtcywgYW5kIG1heSBiZSBvbWl0dGVkLgorICAgIENhbGxiYWNrICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBhbiBpbnRlcm5hbCBsb2NhbGx5IGNvbm5lY3RlZCBwYWlyCisgICAgICAgICAgICAgICAgb2Ygc25tcF9zZXNzaW9ucy4KKyAgICBBbGlhcyAgICAgICBUaGUgYWxpYXMgdHJhbnNwb3J0IHNpbXBseSBsZXRzIHlvdSBkZWZpbmUgbW9yZSBjb21wbGV4CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0IHN0cmluZ3MgYW5kIGFsaWFzIHRoZW0gdG8gc2ltcGxlIG5hbWVzIGluCisgICAgICAgICAgICAgICAgdGhlIHNubXAuY29uZiBmaWxlLgorICAgIEFBTDVQVkMgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBBQUw1IFBWQ3MuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgcHJlc2VudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBMaW51eCwKKyAgICAgICAgICAgICAgICBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0IGFuZCBtYXkgYmUgb21pdHRlZC4KKyAgICBJUFggICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgSVBYIHBlciBSRkMgMTQyMC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAorICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgorICAgIERUTFNVRFAgICAgIHN1cHBvcnQgZm9yIHR1bm5lbGluZyBTTk1QIG92ZXIgRFRMUy9VRFAKKyAgICBUTFNUQ1AgICAgICBzdXBwb3J0IGZvciB0dW5uZWxpbmcgU05NUCBvdmVyIFRMUy9UQ1AKKyAgICBTU0ggICAgICAgICAoYWxwaGEpIHN1cHBvcnQgZm9yIHR1bm5lbGluZyBTTk1QIG92ZXIgU1NICisKKyAgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXM9InMxIHMyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgc2VydmljZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KKworICBBdmFpbGFibGUgU05NUCBzZWN1cml0eSBzZXJ2aWNlczoKKworICAgICAgICB1c20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdXNlciBiYXNlZCBTTk1QIHNlY3VyaXR5CisgICAgICAgIGtzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBrZXJiZXJvcyBiYXNlZCBTTk1QIHNlY3VyaXR5CisgICAgICAgIHRzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgVHJhbnNwb3J0LWJhc2VkIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yIHVzZSB3aXRoIHRoZSBTU0gsIERUTFNVRFAgYW5kIFRMU1RDUCB0cmFuc3BvcnRzKQorCisgIC0td2l0aC1vdXQtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIFJlbW92ZXMgdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBzZXJ2aWNlcyBmcm9tIHRoZSBkZWZhdWx0IGxpc3QuCisKIAogQ29uZmlndXJpbmcgdGhlIGFnZW50OgogICAtLXdpdGhvdXQtcm9vdC1hY2Nlc3MgICAgICAgICAgIFRoZSBzbm1wZCBhZ2VudCB3b24ndCByZXF1aXJlIHJvb3QgYWNjZXNzIHRvCkBAIC0xMTQ2LDYzICsxODY3LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0ZWNobmljYWxseSBub3QgY29tcGxpYW50IHdpdGggdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBzcGVjaWZpY2F0aW9ucywgYnV0IHdhcyBob3cgdGhlIGFnZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0ZWQgZm9yIHZlcnNpb25zIDwgNC4wLgotICAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9ImRpcmVjdG9yeSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGRpcmVjdG9yeSBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuCi0gIC0td2l0aC1wZXJzaXN0ZW50LW1hc2s9Im1hc2siICBEZWZhdWx0IG1hc2sgZm9yIHBlcnNpc3RlbnQgZGF0YSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAwNzcpCi0gIC0td2l0aC1jb3B5LXBlcnNpc3RlbnQtZmlsZXM9Im5vIiBEb24ndCBjb3B5IHBlcnNpc3RlbnQgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgdXNlICJ5ZXMiIHRvIGNvcHkgdGhlbSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IHllcykKLSAgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuPVBBVFRFUk4gIFBhdHRlcm4gb2YgdGVtcG9yYXJ5IGZpbGVzIChEZWZhdWx0OiAvdG1wL3NubXBkWFhYWFhYKQotICAtLXdpdGgtYWdlbnR4LXNvY2tldD1GSUxFICAgICAgICAgQWdlbnRYIHNvY2tldCAoRGVmYXVsdDogL3Zhci9hZ2VudHgvbWFzdGVyIGFzIHNwZWNpZmllZCBpbiBSRkMyNzQxKQotICAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249IjMiIERlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVnYWwgdmFsdWVzOiAxLCAyIChmb3IgU05NUHYyYykgb3IgMy4KICAgLS13aXRoLXN5cy1jb250YWN0PSJ3aG9Ad2hlcmUiICBEZWZhdWx0IHN5c3RlbSBjb250YWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IExPR0lOQERPTUFJTk5BTUUpCiAgIC0td2l0aC1zeXMtbG9jYXRpb249ImxvY2F0aW9uIiAgRGVmYXVsdCBzeXN0ZW0gbG9jYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogVW5rbm93bikKLSAgLS13aXRoLWxvZ2ZpbGU9ImxvY2F0aW9uIiAgICAgICBEZWZhdWx0IGxvZyBmaWxlIGxvY2F0aW9uIGZvciBzbm1wZC4KLSAgLS13aXRoLXRyYW5zcG9ydHM9InQxIHQyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHRyYW5zcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgotICAtLXdpdGgtb3V0LXRyYW5zcG9ydHM9InQxIC4uLiIgIEV4Y2x1ZGUgbGlzdGVkIFNOTVAgdHJhbnNwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KLQotICBBdmFpbGFibGUgU05NUCB0cmFuc3BvcnQgbW9kdWxlcyBhcmU6Ci0KLSAgICBVRFAgICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGFsd2F5cyBjb21waWxlZCBpbi4KLSAgICBVRFBJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKLSAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgotICAgICAgICAgICAgICAgIEl0IGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQuCi0gICAgVENQSVB2NiAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUHY2LgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZSBmb3IgTGludXgsIFNvbGFyaXMgYW5kCi0gICAgICAgICAgICAgICAgRnJlZUJTRCBhdCBsZWFzdC4KLSAgICAgICAgICAgICAgICBJdCBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0LgotICAgIFRDUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBUQ1AvSVAuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCwgYnV0IG1heSBiZSBvbWl0dGVkLgotICAgIFVuaXggICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVbml4IGRvbWFpbiBwcm90b2NvbHMuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBleGNlcHQgb24gV2luMzIKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybXMsIGFuZCBtYXkgYmUgb21pdHRlZC4KLSAgICBDYWxsYmFjayAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgYW4gaW50ZXJuYWwgbG9jYWxseSBjb25uZWN0ZWQgcGFpcgotICAgICAgICAgICAgICAgIG9mIHNubXBfc2Vzc2lvbnMuCi0gICAgQUFMNVBWQyAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIEFBTDUgUFZDcy4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAotICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgotICAgIElQWCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBJUFggcGVyIFJGQyAxNDIwLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIHByZXNlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgTGludXgsCi0gICAgICAgICAgICAgICAgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBhbmQgbWF5IGJlIG9taXR0ZWQuCi0KLSAgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXM9InMxIHMyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHNlY3VyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgc2VydmljZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KLQotICBBdmFpbGFibGUgU05NUCBzZWN1cml0eSBzZXJ2aWNlczoKLQotICAgICAgICB1c20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdXNlciBiYXNlZCBTTk1QIHNlY3VyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWlyZWQgYW5kIGFsd2F5cyBjb21waWxlZCBpbikKLSAgICAgICAga3NtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIGtlcmJlcm9zIGJhc2VkIFNOTVAgc2VjdXJpdHkKLQorICAtLXdpdGgtYWdlbnR4LXNvY2tldD1GSUxFICAgICAgICAgQWdlbnRYIHNvY2tldCAoRGVmYXVsdDogL3Zhci9hZ2VudHgvbWFzdGVyIGFzIHNwZWNpZmllZCBpbiBSRkMyNzQxKQorICAtLXdpdGgtZmVhdHVyZXM9ImZlYXQxIGZlYXQyIiAgIFJlcXVlc3QgZXh0cmEgZmVhdHVyZXMgdG8gYmUgdHVybmVkIG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSB1c2VmdWwgd2l0aCAtLWVuYWJsZS1taW5pbWFsaXN0KQorICAtLXdpdGgtb3V0LWZlYXR1cmVzPSJmZWF0MS4uLiIgIFJlbW92ZSBzcGVjaWZpYyBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltcGxpZXMgLS1lbmFibGUtbWluaW1hbGlzdCkKICAgLS13aXRoLW1pYi1tb2R1bGVzPSJpdGVtMSAuLi4iICBDb21waWxlIHdpdGggYWRkaXRpb25hbCBtaWIgbW9kdWxlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KICAgLS13aXRoLW91dC1taWItbW9kdWxlcz0ibGlzdCIgICBDb21waWxlIHdpdGhvdXQgdGhlc2UgbWliIG1vZHVsZXMuCkBAIC0xMjQzLDYgKzE5MTYsNyBAQAogICAgICAgaXBmd2NoYWlucy9pcGZ3Y2hhaW5zICBmaXJld2FsbCBjaGFpbnMgdW5kZXIgaXBmdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2VlIGFnZW50L21pYmdyb3VwL2lwZndjaGFpbnMvUkVBRE1FKQogICAgICAgc2N0cC1taWIgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIFNDVFAtTUlCCisgICAgICBldGhlcmxpa2UtbWliICAgICAgICBzdXBwb3J0IGZvciB0aGUgRXRoZXJMaWtlLU1JQgogCiAgICAgU29sYXJpcwogICAgICAgdWNkLXNubXAvbG1TZW5zb3JzICAgaGFyZHdhcmUgbW9uaXRvcmluZyAoTE0tU0VOU09SUy1NSUIpCkBAIC0xMzA4LDE1MCArMTk4Miw5MzUgQEAKICAgLS13aXRoLWNsaWVudC1zZW5kLWJ1Zj1BUkcgICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb25zLCBidXQgZm9yIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmUgYnVmZmVyIG9mIGNsaWVudCBzb2NrZXRzCiAgIC0td2l0aC1jbGllbnQtcmVjdi1idWY9QVJHICAgIFNpbWlsYXIgYXMgcHJldmlvdXMgb3B0aW9ucywgYnV0IGZvciB0aGUgc2VuZCBidWZmZXIKLQotTWlzY2VsbGFuZW91czoKLSAgLS13aXRoLWRlZmF1bHRzICAgICAgICAgVXNlIGRlZmF1bHRzIGZvciBwcm9tcHRlZCB2YWx1ZXMuCi0gIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRob3V0LWVsZiAgICAgICAgICAgdXNlIGVsZiBsaWJyYXJpZXMKKyAgLS13aXRoLW5sICAgICAgICAgICAgICAgdXNlIGxpYm5sIHRvIGdldCBuZXRsaW5rIGRhdGEgKGxpbnV4IG9ubHkpLgorICAtLXdpdGgtbGlid3JhcD1MSUJQQVRIICBDb21waWxlIGluIGxpYndyYXAgKHRjcF93cmFwcGVycykgc3VwcG9ydC4KKyAgLS13aXRoLXpsaWI9RElSICAgICAgICAgdXNlIGxpYnogaW4gRElSCisgIC0td2l0aC1iemlwMj1ESVIgICAgICAgIHVzZSBsaWJiejIgaW4gRElSCisgIC0td2l0aC1tbnR0YWI9Ii9ldGMvbW50dGFiIgorICAgICAgICAgICAgICAgICAgICAgICAgICBNb3VudCB0YWJsZSBsb2NhdGlvbi4gVGhlIGRlZmF1bHQgaXMgdG8gYXV0b2RldGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLgorICAtLXdpdGgtbXlzcWwgICAgICAgICAgICBJbmNsdWRlIHN1cHBvcnQgZm9yIE15U1FMLgogICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KLSAgLS13aXRoLXRhZ3NbPVRBR1NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBbYXV0b21hdGljXQotICAtLXdpdGhvdXQtZWxmICAgICAgICAgICB1c2UgZWxmIGxpYnJhcmllcwotICAtLXdpdGgtbGlid3JhcD1MSUJQQVRIICBDb21waWxlIGluIGxpYndyYXAgKHRjcF93cmFwcGVycykgc3VwcG9ydC4KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGgtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCiAgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKICAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCiAgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KLSAgQ1BQRkxBR1MgICAgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZiB5b3UgaGF2ZQotICAgICAgICAgICAgICBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgogICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgotICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAotICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKLSAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgotICBGNzcgICAgICAgICBGb3J0cmFuIDc3IGNvbXBpbGVyIGNvbW1hbmQKLSAgRkZMQUdTICAgICAgRm9ydHJhbiA3NyBjb21waWxlciBmbGFncwogCiBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAogaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgogCiBSZXBvcnQgYnVncyB0byA8bmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4uCiBfQUNFT0YKK2FjX3N0YXR1cz0kPwogZmkKIAogaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgogICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgotICBhY19wb3BkaXI9YHB3ZGAKICAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKLSAgICB0ZXN0IC1kICRhY19kaXIgfHwgY29udGludWUKKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorICAgICAgeyBjZCAiJHNyY2RpciIgJiYgYWNfcHdkPWBwd2RgICYmIHNyY2Rpcj0uICYmIHRlc3QgLWQgIiRhY19kaXIiOyB9IHx8CisgICAgICBjb250aW51ZQogICAgIGFjX2J1aWxkZGlyPS4KIAotaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgotICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCi0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKLWVsc2UKLSAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQotZmkKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CiAKIGNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KICAgICBhY19zcmNkaXI9LgotICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCi0gICAgICAgYWNfdG9wX3NyY2Rpcj0uCi0gICAgZWxzZQotICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKLSAgICBmaSA7OwotICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgogICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OwogZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAogCi0jIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKLSMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCi1jYXNlIGBwd2RgIGluCi0uKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSopCi0gIGNhc2UgIiRhY19kaXIiIGluCi0gIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0gICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSopCi0gIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgotICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY19zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0qKQotICBjYXNlICRhY190b3Bfc3JjZGlyIGluCi0gIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7Ci0gIGVzYWM7OwotZXNhYwotCi0gICAgY2QgJGFjX2RpcgotICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCi0gICAgaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnU7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUgIC0taGVscD1yZWN1cnNpdmUKLSAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmU7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZSAgLS1oZWxwPXJlY3Vyc2l2ZQotICAgIGVsaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5hYyB8fAotCSAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgICRhY19jb25maWd1cmUgLS1oZWxwCisgICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/OyBjb250aW51ZTsgfQorICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgorICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKICAgICBlbHNlCi0gICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCi0gICAgZmkKLSAgICBjZCAkYWNfcG9wZGlyCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgIGZpIHx8IGFjX3N0YXR1cz0kPworICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KICAgZG9uZQogZmkKIAotdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAwCit0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgotTmV0LVNOTVAgY29uZmlndXJlIDUuNC40Ci1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkKK05ldC1TTk1QIGNvbmZpZ3VyZSA1LjcuMworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4CiAKLUNvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCiBfQUNFT0YKLSAgZXhpdCAwCisgIGV4aXQKIGZpCi1leGVjIDU+Y29uZmlnLmxvZwotY2F0ID4mNSA8PF9BQ0VPRgorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICBhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY3BwCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKKyMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCisgIHllczpubzogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisoICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9XCRhY19oZWFkZXJfY29tcGlsZXIiCitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKKworIyBhY19mbl9jX3RyeV9ydW4gTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLiBBc3N1bWVzCisjIHRoYXQgZXhlY3V0YWJsZXMgKmNhbiogYmUgcnVuLgorYWNfZm5fY190cnlfcnVuICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKyAgICAgICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgICAgIGFjX3JldHZhbD0kYWNfc3RhdHVzCitmaQorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X3J1bgorCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMgYW5kIGNhbiBiZSBjb21waWxlZCB1c2luZyB0aGUgaW5jbHVkZSBmaWxlcyBpbgorIyBJTkNMVURFUywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlCisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQorYWNfZm5fY19jaGVja19mdW5jICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2Z1bmMKKworIyBhY19mbl9jX2NoZWNrX21lbWJlciBMSU5FTk8gQUdHUiBNRU1CRVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCBpZiB0aGUgZmllbGQgTUVNQkVSIGV4aXN0cyBpbiB0eXBlIEFHR1IsIGFmdGVyIGluY2x1ZGluZworIyBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX21lbWJlciAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyLiQzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4kMy4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskNCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKGFjX2FnZ3IuJDMpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkND15ZXMiCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLiQzKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDQ9eWVzIgorZWxzZQorICBldmFsICIkND1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQ0CisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX21lbWJlcgorCisjIGFjX2ZuX2NfY29tcHV0ZV9pbnQgTElORU5PIEVYUFIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyaWVzIHRvIGZpbmQgdGhlIGNvbXBpbGUtdGltZSB2YWx1ZSBvZiBFWFBSIGluIGEgcHJvZ3JhbSB0aGF0IGluY2x1ZGVzCisjIElOQ0xVREVTLCBzZXR0aW5nIFZBUiBhY2NvcmRpbmdseS4gUmV0dXJucyB3aGV0aGVyIHRoZSB2YWx1ZSBjb3VsZCBiZQorIyBjb21wdXRlZAorYWNfZm5fY19jb21wdXRlX2ludCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICRhY19taWQgKyAxICYmIGFjX2xvPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICsgMSAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgLSAxICYmIGFjX2hpPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICYmIGFjX21pZD0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYXNfZm5fYXJpdGggJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvICYmIGFjX21pZD0kYXNfdmFsCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyArIDEgJiYgYWNfbG89JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4gIygoCis/KikgZXZhbCAiJDM9XCRhY19sbyI7IGFjX3JldHZhbD0wIDs7CisnJykgYWNfcmV0dmFsPTEgOzsKK2VzYWMKKyAgZWxzZQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgcmV0dXJuIDE7CisgIGlmICgoJDIpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWxkIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpbnQgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbHUiLCBpKTsKKyAgICB9CisgIC8qIERvIG5vdCBvdXRwdXQgYSB0cmFpbGluZyBuZXdsaW5lLCBhcyB0aGlzIGNhdXNlcyBcclxuIGNvbmZ1c2lvbgorICAgICBvbiBzb21lIHBsYXRmb3Jtcy4gICovCisgIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZWNobyA+PmNvbmZ0ZXN0LnZhbDsgcmVhZCAkMyA8Y29uZnRlc3QudmFsOyBhY19yZXR2YWw9MAorZWxzZQorICBhY19yZXR2YWw9MQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorCisgIGZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQKKworIyBhY19mbl9jX2ZpbmRfaW50WF90IExJTkVOTyBCSVRTIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kcyBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2l0aCB3aWR0aCBCSVRTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfZmluZF9pbnRYX3QgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbnQkMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnQkMl90Li4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCisgICAgICMgT3JkZXIgaXMgaW1wb3J0YW50IC0gbmV2ZXIgY2hlY2sgYSB0eXBlIHRoYXQgaXMgcG90ZW50aWFsbHkgc21hbGxlcgorICAgICAjIHRoYW4gaGFsZiBvZiB0aGUgZXhwZWN0ZWQgdGFyZ2V0IHdpZHRoLgorICAgICBmb3IgYWNfdHlwZSBpbiBpbnQkMl90ICdpbnQnICdsb25nIGludCcgXAorCSAnbG9uZyBsb25nIGludCcgJ3Nob3J0IGludCcgJ3NpZ25lZCBjaGFyJzsgZG8KKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorCSAgICAgZW51bSB7IE4gPSAkMiAvIDIgLSAxIH07CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKDAgPCAoJGFjX3R5cGUpICgoKCgoJGFjX3R5cGUpIDEgPDwgTikgPDwgTikgLSAxKSAqIDIgKyAxKSldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorCSAgICAgICAgZW51bSB7IE4gPSAkMiAvIDIgLSAxIH07CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDEpCisJCSA8ICgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDIpKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgY2FzZSAkYWNfdHlwZSBpbiAjKAorICBpbnQkMl90KSA6CisgICAgZXZhbCAiJDM9eWVzIiA7OyAjKAorICAqKSA6CisgICAgZXZhbCAiJDM9XCRhY190eXBlIiA7OworZXNhYworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkMyJcIiA9IHgibm8iOyB0aGVuIDoKKworZWxzZQorICBicmVhaworZmkKKyAgICAgZG9uZQorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfZmluZF9pbnRYX3QKKworIyBhY19mbl9jX2NoZWNrX3R5cGUgTElORU5PIFRZUEUgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBUWVBFIGV4aXN0cyBhZnRlciBoYXZpbmcgaW5jbHVkZWQgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUKKyMgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja190eXBlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCQyKSkKKwkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoKCQyKSkpCisJICAgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgZXZhbCAiJDM9eWVzIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQorCisjIGFjX2ZuX2NfZmluZF91aW50WF90IExJTkVOTyBCSVRTIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZHMgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHdpdGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2ZpbmRfdWludFhfdCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVpbnQkMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50JDJfdC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPW5vIgorICAgICAjIE9yZGVyIGlzIGltcG9ydGFudCAtIG5ldmVyIGNoZWNrIGEgdHlwZSB0aGF0IGlzIHBvdGVudGlhbGx5IHNtYWxsZXIKKyAgICAgIyB0aGFuIGhhbGYgb2YgdGhlIGV4cGVjdGVkIHRhcmdldCB3aWR0aC4KKyAgICAgZm9yIGFjX3R5cGUgaW4gdWludCQyX3QgJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCisJICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JyAndW5zaWduZWQgc2hvcnQgaW50JyAndW5zaWduZWQgY2hhcic7IGRvCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCgkYWNfdHlwZSkgLTEgPj4gKCQyIC8gMiAtIDEpKSA+PiAoJDIgLyAyIC0gMSkgPT0gMyldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXNlICRhY190eXBlIGluICMoCisgIHVpbnQkMl90KSA6CisgICAgZXZhbCAiJDM9eWVzIiA7OyAjKAorICAqKSA6CisgICAgZXZhbCAiJDM9XCRhY190eXBlIiA7OworZXNhYworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkMyJcIiA9IHgibm8iOyB0aGVuIDoKKworZWxzZQorICBicmVhaworZmkKKyAgICAgZG9uZQorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfZmluZF91aW50WF90CisKKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBpcyBkZWNsYXJlZCBpbiBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2RlY2wgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBhc19kZWNsX25hbWU9YGVjaG8gJDJ8c2VkICdzLyAqKC4qLy8nYAorICBhc19kZWNsX3VzZT1gZWNobyAkMnxzZWQgLWUgJ3MvKC8oKC8nIC1lICdzLykvKSAwJi8nIC1lICdzLywvKSAwJiAoL2cnYAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CisjaWZuZGVmICRhc19kZWNsX25hbWUKKyNpZmRlZiBfX2NwbHVzcGx1cworICAodm9pZCkgJGFzX2RlY2xfdXNlOworI2Vsc2UKKyAgKHZvaWQpICRhc19kZWNsX25hbWU7CisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2RlY2wKK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5IE5ldC1TTk1QICRhc19tZSA1LjQuNCwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKK0l0IHdhcyBjcmVhdGVkIGJ5IE5ldC1TTk1QICRhc19tZSA1LjcuMywgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjguICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACiAKIF9BQ0VPRgorZXhlYyA1Pj5jb25maWcubG9nCiB7CiBjYXQgPDxfQVNVTkFNRQogIyMgLS0tLS0tLS0tICMjCkBAIC0xNDcwLDcgKzI5MjksNyBAQAogL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAogL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAogL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYApAQCAtMTQ4Miw4ICsyOTQxLDkgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZWNobyAiUEFUSDogJGFzX2RpciIKLWRvbmUKKyAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciIKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiB9ID4mNQogCkBAIC0xNTA1LDcgKzI5NjUsNiBAQAogYWNfY29uZmlndXJlX2FyZ3M9CiBhY19jb25maWd1cmVfYXJnczA9CiBhY19jb25maWd1cmVfYXJnczE9Ci1hY19zZXA9CiBhY19tdXN0X2tlZXBfbmV4dD1mYWxzZQogZm9yIGFjX3Bhc3MgaW4gMSAyCiBkbwpAQCAtMTUxNiwxMyArMjk3NSwxMyBAQAogICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCiAgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCiAgICAgICBjb250aW51ZSA7OwotICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQotICAgICAgYWNfYXJnPWBlY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICpcJyopCisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgIGVzYWMKICAgICBjYXNlICRhY19wYXNzIGluCi0gICAgMSkgYWNfY29uZmlndXJlX2FyZ3MwPSIkYWNfY29uZmlndXJlX2FyZ3MwICckYWNfYXJnJyIgOzsKKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OwogICAgIDIpCi0gICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKICAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgogCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KICAgICAgIGVsc2UKQEAgLTE1MzgsMTA0ICsyOTk3LDExNSBAQAogCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CiAJZXNhYwogICAgICAgZmkKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MkYWNfc2VwJyRhY19hcmcnIgotICAgICAgIyBHZXQgcmlkIG9mIHRoZSBsZWFkaW5nIHNwYWNlLgotICAgICAgYWNfc2VwPSIgIgorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgogICAgICAgOzsKICAgICBlc2FjCiAgIGRvbmUKIGRvbmUKLSRhc191bnNldCBhY19jb25maWd1cmVfYXJnczAgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczArc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MwPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMDsgfQotJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMSB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMStzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczE9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MxOyB9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMDt9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9CiAKICMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKICMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCiAjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KLSMgV0FSTklORzogQmUgc3VyZSBub3QgdG8gdXNlIHNpbmdsZSBxdW90ZXMgaW4gdGhlcmUsIGFzIHNvbWUgc2hlbGxzLAotIyBzdWNoIGFzIG91ciBEVSA1LjAgZnJpZW5kLCB3aWxsIHRoZW4gYGNsb3NlJyB0aGUgdHJhcC4KKyMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgogdHJhcCAnZXhpdF9zdGF0dXM9JD8KICAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCiAgIHsKICAgICBlY2hvCiAKLSAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIENhY2hlIHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLSAjIyIKICAgICBlY2hvCiAgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKLXsKKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCiAgIChzZXQpIDI+JjEgfAotICAgIGNhc2UgYChhY19zcGFjZT0nIiciJyAnIiciJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KLSAgICAqYWNfc3BhY2U9XCAqKQorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCiAgICAgICBzZWQgLW4gXAotCSJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKLQkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgotICAgICAgOzsKKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKyAgICAgIDs7ICMoCiAgICAgKikKLSAgICAgIHNlZCAtbiBcCi0JInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgogICAgICAgOzsKLSAgICBlc2FjOwotfQorICAgIGVzYWMgfAorICAgIHNvcnQKKykKICAgICBlY2hvCiAKLSAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIgogICAgIGVjaG8KICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCiAgICAgZG8KLSAgICAgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAotICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgICAgY2FzZSAkYWNfdmFsIGluCisgICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisgICAgICBlc2FjCisgICAgICAkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCiAgICAgZG9uZSB8IHNvcnQKICAgICBlY2hvCiAKICAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tICMjCi0jIyBPdXRwdXQgZmlsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgogICAgICAgZWNobwogICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKICAgICAgIGRvCi0JZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCi0JZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKwlldmFsIGFjX3ZhbD1cJCRhY192YXIKKwljYXNlICRhY192YWwgaW4KKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJZXNhYworCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKICAgICAgIGRvbmUgfCBzb3J0CiAgICAgICBlY2hvCiAgICAgZmkKIAogICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0gIyMKKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIwogIyMgY29uZmRlZnMuaC4gIyMKLSMjIC0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tICMjIgogICAgICAgZWNobwotICAgICAgc2VkICIvXiQvZCIgY29uZmRlZnMuaCB8IHNvcnQKKyAgICAgIGNhdCBjb25mZGVmcy5oCiAgICAgICBlY2hvCiAgICAgZmkKICAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCi0gICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKLSAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgogICB9ID4mNQotICBybSAtZiBjb3JlICouY29yZSAmJgotICBybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCiAgICAgZXhpdCAkZXhpdF9zdGF0dXMKLSAgICAgJyAwCisnIDAKIGZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbwotICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyB7IChleGl0IDEpOyBleGl0IDE7IH0nICRhY19zaWduYWwKKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgYXNfZm5fZXhpdCAxJyAkYWNfc2lnbmFsCiBkb25lCiBhY19zaWduYWw9MAogCiAjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgotcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCi0jIEFJWCBjcHAgbG9zZXMgb24gYW4gZW1wdHkgZmlsZSwgc28gbWFrZSBzdXJlIGl0IGNvbnRhaW5zIGF0IGxlYXN0IGEgbmV3bGluZS4KLWVjaG8gPmNvbmZkZWZzLmgKK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisKKyRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgKIAogIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCiAKQEAgLTE2NDMsMTEyICszMTEzLDEzNyBAQAogI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgogX0FDRU9GCiAKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiRQQUNLQUdFX1VSTCIKK19BQ0VPRgorCiAKICMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgotIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KLWlmIHRlc3QgLXogIiRDT05GSUdfU0lURSI7IHRoZW4KLSAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCi0gICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCi0gIGVsc2UKLSAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCi0gIGZpCisjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorYWNfc2l0ZV9maWxlMT1OT05FCithY19zaXRlX2ZpbGUyPU5PTkUKK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgY2FzZSAkQ09ORklHX1NJVEUgaW4gIygoCisgICAgLSopICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKyAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICBlc2FjCitlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZWxzZQorICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKIGZpCi1mb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KLSAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9Citmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorZG8KKyAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQogICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQotICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgICAgLiAiJGFjX3NpdGVfZmlsZSIgXAorICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiZmFpbGVkIHRvIGxvYWQgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgZmkKIGRvbmUKIAogaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsCi0gICMgZmlsZXMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LgotICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwgZmlsZXMKKyAgIyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuICBESkdQUCBlbXVsYXRlcyBpdCBhcyBhIHJlZ3VsYXIgZmlsZS4KKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRjYWNoZV9maWxlIiAmJiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KICAgICBjYXNlICRjYWNoZV9maWxlIGluCi0gICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gJGNhY2hlX2ZpbGU7OwotICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAuLyRjYWNoZV9maWxlOzsKKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKICAgICBlc2FjCiAgIGZpCiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgID4kY2FjaGVfZmlsZQogZmkKIAogIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQogIyB2YWx1ZS4KIGFjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQotZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8Ci0JICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbwogICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAogICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAotICBldmFsIGFjX29sZF92YWw9IlwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZSIKLSAgZXZhbCBhY19uZXdfdmFsPSJcJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUiCisgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQogICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCiAgICAgc2V0LCkKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CiAgICAgLHNldCkKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CiAgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OwogICAgICwpOzsKICAgICAqKQogICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgotCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9Ci0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1Ci1lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mMjt9Ci0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1Ci1lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mMjt9Ci0JYWNfY2FjaGVfY29ycnVwdGVkPToKKwkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKwlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKKwlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorCWVsc2UKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCisJZmkKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiYyO30KICAgICAgIGZpOzsKICAgZXNhYwogICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCiAgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgogICAgIGNhc2UgJGFjX25ld192YWwgaW4KLSAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKLSAgICAgIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CiAgICAgZXNhYwogICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgogICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCi0gICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICAgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKICAgICBlc2FjCiAgIGZpCiBkb25lCiBpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CiBmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKQEAgLTE3NjIsMzEgKzMyNTcsNyBAQAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgICAgIGFjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIKK2FjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIKIAogCiAKQEAgLTE3OTYsNTcwICszMjY3LDEzNyBAQAogIwogIyBzYXZlIHRoZSBjb25maWd1cmUgYXJndW1lbnRzCiAjCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9DT05GSUdVUkVfT1BUSU9OUyAiJGFjX2NvbmZpZ3VyZV9hcmdzIgogX0FDRU9GCiAKLUNPTkZJR1VSRV9PUFRJT05TPSJcIiRhY19jb25maWd1cmVfYXJncyJcIgorQ09ORklHVVJFX09QVElPTlM9IlwiJGFjX2NvbmZpZ3VyZV9hcmdzXCIiCiAKIAotIwotIyBDb21waWxhdGlvbiBzZXR1cAotIworIyMKKyMjIFJlY29tbWVuZGVkIHN0cnVjdHVyZToKKyMjCisjICAgICBpbmZvcm1hdGlvbiBvbiB0aGUgcGFja2FnZQorIyAgICAgY2hlY2tzIGZvciBwcm9ncmFtcworIyAgICAgY2hlY2tzIGZvciBsaWJyYXJpZXMKKyMgICAgIGNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzCisjICAgICBjaGVja3MgZm9yIHR5cGVzCisjICAgICBjaGVja3MgZm9yIHN0cnVjdHVyZXMKKyMgICAgIGNoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCisjICAgICBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCisjICAgICBjaGVja3MgZm9yIHN5c3RlbSBzZXJ2aWNlcwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWNjIG9yIC0td2l0aG91dC1jYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfY2Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfY2MiCi0gIENDPSR3aXRoX2NjO2V4cG9ydCBDQwotZmk7CisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyAgIENvbW1hbmQtbGluZSBwcm9jZXNzaW5nIC0gLS13aXRoLy0tZW5hYmxlCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTeXN0ZW06IENvbXBpbGVyIHNldHRpbmdzCisjIwogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlua2NjIG9yIC0td2l0aG91dC1saW5rY2Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2xpbmtjYytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9saW5rY2MiCi0gIExJTktDQz0kd2l0aF9saW5rY2M7ZXhwb3J0IExJTktDQwotZmk7CisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY2M7IENDPSR3aXRoX2NjO2V4cG9ydCBDQworZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWFyIG9yIC0td2l0aG91dC1hciB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfYXIiCi0gIEFSPSR3aXRoX2FyOyBleHBvcnQgQVIKLWZpOworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpbmtjYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGlua2NjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9saW5rY2M7IExJTktDQz0kd2l0aF9saW5rY2M7ZXhwb3J0IExJTktDQworZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWVuZGlhbm5lc3Mgb3IgLS13aXRob3V0LWVuZGlhbm5lc3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2VuZGlhbm5lc3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZW5kaWFubmVzcyIKLSAgaWYgdGVzdCAkd2l0aF9lbmRpYW5uZXNzICE9ICJiaWciIC1hICR3aXRoX2VuZGlhbm5lc3MgIT0gImxpdHRsZSIgOyB0aGVuCi0gICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogRW5kaWFubmVzcyBtdXN0IGJlIGJpZyBvciBsaXR0bGUsIG5vdCBcIiR3aXRoX2VuZGlhbm5lc3NcIi4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogRW5kaWFubmVzcyBtdXN0IGJlIGJpZyBvciBsaXR0bGUsIG5vdCBcIiR3aXRoX2VuZGlhbm5lc3NcIi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hcjsgQVI9JHdpdGhfYXI7IGV4cG9ydCBBUgorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW5kaWFubmVzcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW5kaWFubmVzcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZW5kaWFubmVzczsgaWYgdGVzdCAkd2l0aF9lbmRpYW5uZXNzICE9ICJiaWciIC1hICR3aXRoX2VuZGlhbm5lc3MgIT0gImxpdHRsZSIgOyB0aGVuCisgICAgICAgYXNfZm5fZXJyb3IgJD8gIkVuZGlhbm5lc3MgbXVzdCBiZSBiaWcgb3IgbGl0dGxlLCBub3QgXCIkd2l0aF9lbmRpYW5uZXNzXCIuIiAiJExJTkVOTyIgNTsKICAgICAgZmkKIAotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jZmxhZ3Mgb3IgLS13aXRob3V0LWNmbGFncyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfY2ZsYWdzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2NmbGFncyIKLSAgQ0ZMQUdTPSR3aXRoX2NmbGFnczsgZXhwb3J0IENGTEFHUwotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1sZGZsYWdzIG9yIC0td2l0aG91dC1sZGZsYWdzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9sZGZsYWdzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2xkZmxhZ3MiCi0gIExERkxBR1M9JHdpdGhfbGRmbGFnczsgZXhwb3J0IExERkxBR1MKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXMtbmVlZGVkIG9yIC0tZGlzYWJsZS1hcy1uZWVkZWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfYXNfbmVlZGVkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9hc19uZWVkZWQiCi0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlicyBvciAtLXdpdGhvdXQtbGlicyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbGlicytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9saWJzIgotICBMSUJTPSR3aXRoX2xpYnM7IGV4cG9ydCBMSUJTCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpbGVudC1saWJ0b29sIG9yIC0tZGlzYWJsZS1zaWxlbnQtbGlidG9vbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfbGlidG9vbCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc2lsZW50X2xpYnRvb2wiCi0gIExJQlRPT0xGTEFHUz0tLXNpbGVudAotZmk7Ci0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWluc3RhbGwtcHJlZml4IG9yIC0td2l0aG91dC1pbnN0YWxsLXByZWZpeCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfaW5zdGFsbF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfaW5zdGFsbF9wcmVmaXgiCi0gIElOU1RBTExfUFJFRklYPSIkd2l0aHZhbCIKLWZpOwotCi1pZiB0ZXN0ICJ4JElOU1RBTExfUFJFRklYIiA9ICJ4eWVzIiA7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS13aXRoLWluc3RhbGwtcHJlZml4IHJlcXVpcmVzIGFuIGFyZ3VtZW50IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IC0td2l0aC1pbnN0YWxsLXByZWZpeCByZXF1aXJlcyBhbiBhcmd1bWVudCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgIngkSU5TVEFMTF9QUkVGSVgiID0gInhubyIgOyB0aGVuCi0gIElOU1RBTExfUFJFRklYPSIiCiBmaQogCiAKLSMgY2hlY2sgZm9yIGVycm9ycyBpbiBhcmdzIHRoYXQgcnVuIGFmdGVyIG1vZHVsZSBwcm9jZXNzaW5nIGhlcmUsIHNvCi0jIHRoZXkgZmFpbCBiZWZvcmUgbW9kdWxlIHByb2Nlc3NpbmcuLi4KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ3cmFwIG9yIC0tZGlzYWJsZS1saWJ3cmFwIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYndyYXArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2xpYndyYXAiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1saWJ3cmFwLy0td2l0aG91dC1saWJ3cmFwIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1saWJ3cmFwLy0td2l0aG91dC1saWJ3cmFwIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXpsaWIgb3IgLS1kaXNhYmxlLXpsaWIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfemxpYitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfemxpYiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXpsaWIvLS13aXRob3V0LXpsaWIgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXpsaWIvLS13aXRob3V0LXpsaWIgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWluaV9hZ2VudCBvciAtLWRpc2FibGUtbWluaV9hZ2VudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taW5pX2FnZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taW5pX2FnZW50IgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX21pbmlfYWdlbnQiID0gInh5ZXMiOyB0aGVuCi0gICAgbWluaV9hZ2VudD0ieWVzIgotZWxzZQotICAgIG1pbmlfYWdlbnQ9Im5vIgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jZmxhZ3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NmbGFncytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY2ZsYWdzOyBDRkxBR1M9JHdpdGhfY2ZsYWdzOyBleHBvcnQgQ0ZMQUdTCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pbmlfYWdlbnQgb3IgLS13aXRob3V0LW1pbmlfYWdlbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pbmlfYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWluaV9hZ2VudCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taW5pYWdlbnQgb3IgLS13aXRob3V0LW1pbmlhZ2VudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWluaWFnZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pbmlhZ2VudCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taW5pYWdlbnQgb3IgLS1kaXNhYmxlLW1pbmlhZ2VudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taW5pYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pbmlhZ2VudCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFnZW50IG9yIC0tZGlzYWJsZS1hZ2VudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hZ2VudCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfYWdlbnQiCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxkZmxhZ3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xkZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xkZmxhZ3M7IExERkxBR1M9JHdpdGhfbGRmbGFnczsgZXhwb3J0IExERkxBR1MKK2ZpCiAKLWZpOwotaWYgdGVzdCAieCRlbmFibGVfYWdlbnQiICE9ICJ4bm8iOyB0aGVuCi0gICBTTk1QRD0nc25tcGQkKEVYRUVYVCknCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFnZW50IgotICAgVFJBUExJQlM9JyQoVFJBUERXSVRIQUdFTlQpJwotICAgVVNFVFJBUExJQlM9JyQoVVNFQUdFTlRMSUJTKScKLWVsc2UKLSAgIFNOTVBEPSIiCi0gICAjIHdlIHN0aWxsIG5lZWQvd2FudCB0aGUgYWdlbnRsaWJzIChmb3Igc3ViYWdlbnRzLCBlLmcuIHNubXB0cmFwZCkKLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYWdlbnQiCi0gICAjIGJ1aWxkaW5nIHNubXB0cmFwZCB3L28gYWdlbnRsaWJzIGRvZXNuJ3Qgd29yayBhdG0KLSAgICNUUkFQTElCUz0nJChUUkFQRFdJVEhPVVRBR0VOVCknCi0gICAjVVNFVFJBUExJQlM9JyQoVVNFTElCUyknCi0gICBUUkFQTElCUz0nJChUUkFQRFdJVEhBR0VOVCknCi0gICBVU0VUUkFQTElCUz0nJChVU0VBR0VOVExJQlMpJworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXMtbmVlZGVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2FzX25lZWRlZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2FzX25lZWRlZDsKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xpYnM7IExJQlM9JHdpdGhfbGliczsgZXhwb3J0IExJQlMKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpbGVudC1saWJ0b29sIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9saWJ0b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X2xpYnRvb2w7IExJQlRPT0xGTEFHUz0tLXNpbGVudAogZmkKIAogCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZ2VudCBvciAtLXdpdGhvdXQtYWdlbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2FnZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2FnZW50IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hZ2VudC8tLWRpc2FibGUtYWdlbnQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYWdlbnQvLS1kaXNhYmxlLWFnZW50IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyMjCisjICAgU3lzdGVtOiBMaWJyYXJ5IHNldHRpbmdzCisjIwogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXBwbGljYXRpb25zIG9yIC0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfYXBwbGljYXRpb25zK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9hcHBsaWNhdGlvbnMiCiAKLWZpOwotaWYgdGVzdCAieCRlbmFibGVfYXBwbGljYXRpb25zIiAhPSAieG5vIjsgdGhlbgotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhcHBzIgotZmkKLSMgQ29tbW9uIG1pc3Rha2VzCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXBwbGljYXRpb25zIG9yIC0td2l0aG91dC1hcHBsaWNhdGlvbnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2FwcGxpY2F0aW9ucytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9hcHBsaWNhdGlvbnMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFwcGxpY2F0aW9ucy8tLWRpc2FibGUtYXBwbGljYXRpb25zIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFwcGxpY2F0aW9ucy8tLWRpc2FibGUtYXBwbGljYXRpb25zIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1hbnVhbHMgb3IgLS1kaXNhYmxlLW1hbnVhbHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWFudWFscytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWFudWFscyIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9tYW51YWxzIiAhPSAieG5vIjsgdGhlbgotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBtYW4iCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRtYWxsb2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RtYWxsb2M7CiBmaQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1hbnVhbHMgb3IgLS13aXRob3V0LW1hbnVhbHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21hbnVhbHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWFudWFscyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWFudWFscy8tLWRpc2FibGUtbWFudWFscyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tYW51YWxzLy0tZGlzYWJsZS1tYW51YWxzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNjcmlwdHMgb3IgLS1kaXNhYmxlLXNjcmlwdHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2NyaXB0cytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc2NyaXB0cyIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9zY3JpcHRzIiAhPSAieG5vIjsgdGhlbgotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBsb2NhbCIKLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2NyaXB0cyBvciAtLXdpdGhvdXQtc2NyaXB0cyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc2NyaXB0cytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zY3JpcHRzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zY3JpcHRzLy0tZGlzYWJsZS1zY3JpcHRzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNjcmlwdHMvLS1kaXNhYmxlLXNjcmlwdHMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWlicyBvciAtLWRpc2FibGUtbWlicyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taWJzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taWJzIgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX21pYnMiICE9ICJ4bm8iOyB0aGVuCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIG1pYnMiCi1maQotIyB3aXRoLW1pYnMgaXMgdmFsaWQgdG9vLCBidXQgbWVhbnMgc29tZXRoaW5nIGVsc2UKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hhdCB0byBidWlsZCBhbmQgaW5zdGFsbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoYXQgdG8gYnVpbGQgYW5kIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFJTlNVQlMiID4mNQotZWNobyAiJHtFQ0hPX1R9JE1BSU5TVUJTIiA+JjYKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYi1sb2FkaW5nIG9yIC0tZGlzYWJsZS1taWItbG9hZGluZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taWJfbG9hZGluZytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWliX2xvYWRpbmciCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfbWliX2xvYWRpbmciID0gInhubyI7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HIDEKLV9BQ0VPRgotCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYi1sb2FkaW5nIG9yIC0td2l0aG91dC1taWItbG9hZGluZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWliX2xvYWRpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWliX2xvYWRpbmciCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1sb2FkaW5nLy0tZGlzYWJsZS1taWItbG9hZGluZyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItbG9hZGluZy8tLWRpc2FibGUtbWliLWxvYWRpbmcgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jCi1TTk1QX1ZFUlNJT05TPSIiCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc25tcHYxIG9yIC0tZGlzYWJsZS1zbm1wdjEgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc25tcHYxK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zbm1wdjEiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfc25tcHYxIiA9ICJ4bm8iOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEgMQotX0FDRU9GCi0KLWVsc2UKLSAgU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMSIKLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc25tcHYxIG9yIC0td2l0aG91dC1zbm1wdjEgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NubXB2MStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zbm1wdjEiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB2MS8tLWRpc2FibGUtc25tcHYxIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB2MS8tLWRpc2FibGUtc25tcHYxIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNubXB2MmMgb3IgLS1kaXNhYmxlLXNubXB2MmMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc25tcHYyYytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc25tcHYyYyIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdjJjIiA9ICJ4bm8iOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDIDEKLV9BQ0VPRgotCi1lbHNlCi0gIFNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDJjIgotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zbm1wdjJjIG9yIC0td2l0aG91dC1zbm1wdjJjIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zbm1wdjJjK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NubXB2MmMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB2MmMvLS1kaXNhYmxlLXNubXB2MmMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHYyYy8tLWRpc2FibGUtc25tcHYyYyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLVNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDMiCi0KLSAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgotICBTTk1QIFZlcnNpb25zIFN1cHBvcnRlZDogICAkU05NUF9WRVJTSU9OUwotRU9GCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNldC1zdXBwb3J0IG9yIC0tZGlzYWJsZS1zZXQtc3VwcG9ydCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zZXRfc3VwcG9ydCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc2V0X3N1cHBvcnQiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfc2V0X3N1cHBvcnQiID0gInhubyI7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUIDEKLV9BQ0VPRgotCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNldC1zdXBwb3J0IG9yIC0td2l0aG91dC1zZXQtc3VwcG9ydCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc2V0X3N1cHBvcnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc2V0X3N1cHBvcnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNldC1zdXBwb3J0Ly0tZGlzYWJsZS1zZXQtc3VwcG9ydCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zZXQtc3VwcG9ydC8tLWRpc2FibGUtc2V0LXN1cHBvcnQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVzIG9yIC0tZGlzYWJsZS1kZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kZXMiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfZGVzIiA9ICJ4bm8iOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9ERVMgMQotX0FDRU9GCi0KLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVzIG9yIC0td2l0aG91dC1kZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2RlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9kZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlcy8tLWRpc2FibGUtZGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlcy8tLWRpc2FibGUtZGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXByaXZhY3kgb3IgLS1kaXNhYmxlLXByaXZhY3kgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcHJpdmFjeStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcHJpdmFjeSIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJViAxCi1fQUNFT0YKLQotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wcml2YWN5IG9yIC0td2l0aG91dC1wcml2YWN5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wcml2YWN5K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3ByaXZhY3kiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXByaXZhY3kvLS1kaXNhYmxlLXByaXZhY3kgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcHJpdmFjeS8tLWRpc2FibGUtcHJpdmFjeSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tZDUgb3IgLS1kaXNhYmxlLW1kNSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21kNSIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX01ENSAxCi1fQUNFT0YKLQotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tZDUgb3IgLS13aXRob3V0LW1kNSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWQ1K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21kNSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWQ1Ly0tZGlzYWJsZS1tZDUgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWQ1Ly0tZGlzYWJsZS1tZDUgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaW50ZXJuYWwtbWQ1IG9yIC0tZGlzYWJsZS1pbnRlcm5hbC1tZDUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfaW50ZXJuYWxfbWQ1K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9pbnRlcm5hbF9tZDUiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfaW50ZXJuYWxfbWQ1IiA9ICJ4eWVzIjsgdGhlbgotICBpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBZb3UgY2FuIG5vdCBzcGVjaWZ5IGJvdGggLS1lbmFibGUtaW50ZXJuYWwtbWQ1IGFuZCAtLWRpc2FibGUtbWQ1IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFlvdSBjYW4gbm90IHNwZWNpZnkgYm90aCAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgYW5kIC0tZGlzYWJsZS1tZDUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZWxzZQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSAxCi1fQUNFT0YKLQotICBmaQotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pbnRlcm5hbC1tZDUgb3IgLS13aXRob3V0LWludGVybmFsLW1kNSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfaW50ZXJuYWxfbWQ1K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2ludGVybmFsX21kNSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtaW50ZXJuYWwtbWQ1Ly0tZGlzYWJsZS1pbnRlcm5hbC1tZDUgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtaW50ZXJuYWwtbWQ1Ly0tZGlzYWJsZS1pbnRlcm5hbC1tZDUgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaXB2NiBvciAtLWRpc2FibGUtaXB2NiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9pcHY2K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9pcHY2IgotICBpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9FTkFCTEVfSVBWNiAxCi1fQUNFT0YKLQotICAgIGZpCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pcHY2IG9yIC0td2l0aG91dC1pcHY2IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9pcHY2K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2lwdjYiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWlwdjYvLS1kaXNhYmxlLWlwdjYgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtaXB2Ni8tLWRpc2FibGUtaXB2NiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sb2NhbC1zbXV4IG9yIC0tZGlzYWJsZS1sb2NhbC1zbXV4IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xvY2FsX3NtdXgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2xvY2FsX3NtdXgiCi0gIGlmIHRlc3QgIngkZW5hYmxlX2xvY2FsX3NtdXgiID0gInh5ZXMiOyB0aGVuCi0gICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0VOQUJMRV9MT0NBTF9TTVVYIDEKLV9BQ0VPRgotCi0gICAgZmkKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxvY2FsLXNtdXggb3IgLS13aXRob3V0LWxvY2FsLXNtdXggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2xvY2FsX3NtdXgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbG9jYWxfc211eCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbG9jYWwtc211eC8tLWRpc2FibGUtbG9jYWwtc211eCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1sb2NhbC1zbXV4Ly0tZGlzYWJsZS1sb2NhbC1zbXV4IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnZ2luZyBvciAtLWRpc2FibGUtZGVidWdnaW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnZ2luZytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZGVidWdnaW5nIgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0FMV0FZU19ERUJVRyAxCi1fQUNFT0YKLQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVidWdnaW5nIG9yIC0td2l0aG91dC1kZWJ1Z2dpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2RlYnVnZ2luZytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9kZWJ1Z2dpbmciCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlYnVnZ2luZy8tLWRpc2FibGUtZGVidWdnaW5nIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlYnVnZ2luZy8tLWRpc2FibGUtZGVidWdnaW5nIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRldmVsb3BlciBvciAtLWRpc2FibGUtZGV2ZWxvcGVyIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RldmVsb3BlcitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZGV2ZWxvcGVyIgotICBkZXZlbG9wZXI9eWVzCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZXZlbG9wZXIgb3IgLS13aXRob3V0LWRldmVsb3BlciB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZGV2ZWxvcGVyK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2RldmVsb3BlciIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGV2ZWxvcGVyLy0tZGlzYWJsZS1kZXZlbG9wZXIgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGV2ZWxvcGVyLy0tZGlzYWJsZS1kZXZlbG9wZXIgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kZWJ1Z2dpbmciID0gInhubyI7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX05PX0RFQlVHR0lORyAxCi1fQUNFT0YKLQorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRtYWxsb2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG1hbGxvYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RtYWxsb2M7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kbWFsbG9jLy0td2l0aG91dC1kbWFsbG9jIGluc3RlYWQiICIkTElORU5PIiA1CiBmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZG1hbGxvYyBvciAtLXdpdGhvdXQtZG1hbGxvYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZG1hbGxvYytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9kbWFsbG9jIgotICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCi0gICAgICBMSUJTPSIkTElCUyAtbGRtYWxsb2MiCi0gICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0RNQUxMT0NfSCAxCi1fQUNFT0YKIAotICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVmZW5jZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZWZlbmNlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lZmVuY2U7IHVzZV9lZmVuY2U9IiR3aXRodmFsIgorZmkKIAotICBpZiB0ZXN0ICJ4JHdpdGh2YWwiICE9IHggLWEgLWQgJHdpdGh2YWw7IHRoZW4KLSAgICAgaWYgdGVzdCAtZCAkd2l0aHZhbC9saWI7IHRoZW4KLSAgICAgICBMREZMQUdTPSItTCR3aXRodmFsL2xpYiAkTERGTEFHUyIKLSAgICAgZmkKLSAgICAgaWYgdGVzdCAtZCAkd2l0aHZhbC9pbmNsdWRlOyB0aGVuCi0JQ1BQRkxBR1M9Ii1JJHdpdGh2YWwvaW5jbHVkZSAkQ1BQRkxBR1MiCi0gICAgIGZpCi0gIGZpCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZWZlbmNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2VmZW5jZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2VmZW5jZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVmZW5jZS8tLXdpdGhvdXQtZWZlbmNlIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCi0gICAgICBMSUJTPSIkTElCUyAtbGRtYWxsb2MiCi0gICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0RNQUxMT0NfSCAxCi1fQUNFT0YKLQotICAgIGZpCi0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG1hbGxvYyBvciAtLWRpc2FibGUtZG1hbGxvYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kbWFsbG9jK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kbWFsbG9jIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZG1hbGxvYy8tLXdpdGhvdXQtZG1hbGxvYyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZG1hbGxvYy8tLXdpdGhvdXQtZG1hbGxvYyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lZmVuY2Ugb3IgLS13aXRob3V0LWVmZW5jZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZWZlbmNlK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2VmZW5jZSIKLSAgdXNlX2VmZW5jZT0iJHdpdGh2YWwiCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lZmVuY2Ugb3IgLS1kaXNhYmxlLWVmZW5jZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9lZmVuY2Urc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2VmZW5jZSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVmZW5jZS8tLXdpdGhvdXQtZWZlbmNlIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lZmVuY2UvLS13aXRob3V0LWVmZW5jZSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKIHRyeXJzYXJlZj1ubwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXJzYXJlZiBvciAtLXdpdGhvdXQtcnNhcmVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9yc2FyZWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcnNhcmVmIgotICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJzYXJlZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcnNhcmVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9yc2FyZWY7IGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KICAgICAgIHRyeXJzYXJlZj15ZXMKICAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgogICAgICAgdHJ5cnNhcmVmPW5vCkBAIC0yMzc2LDI3ICszNDE0LDMyIEBACiAKICAgICAgIHRyeXJzYXJlZj15ZXMKICAgICBmaQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnNhcmVmIG9yIC0tZGlzYWJsZS1yc2FyZWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcnNhcmVmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9yc2FyZWYiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1yc2FyZWYvLS13aXRob3V0LXJzYXJlZiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcnNhcmVmLy0td2l0aG91dC1yc2FyZWYgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJzYXJlZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yc2FyZWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yc2FyZWY7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1yc2FyZWYvLS13aXRob3V0LXJzYXJlZiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKwogCiB0cnlvcGVuc3NsPWRlZmF1bHR5ZXMKIGFza2Vkb3BlbnNzbD1ubwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW9wZW5zc2wgb3IgLS13aXRob3V0LW9wZW5zc2wgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX29wZW5zc2wrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfb3BlbnNzbCIKLSAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vcGVuc3NsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vcGVuc3NsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vcGVuc3NsOyBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCiAgICAgICB0cnlvcGVuc3NsPXllcwogICAgICAgYXNrZWRvcGVuc3NsPXllcworICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4aW50ZXJuYWwiOyB0aGVuCisgICAgICB0cnlvcGVuc3NsPWludGVybmFsCisgICAgICBhc2tlZG9wZW5zc2w9aW50ZXJuYWwKICAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgogICAgICAgdHJ5b3BlbnNzbD1ubwogICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1kICIkd2l0aHZhbC9saWIvTWluR1ciOyB0aGVuCisgICAgICAgIExERkxBR1M9Ii1MJHdpdGh2YWwvbGliL01pbkdXICRMREZMQUdTIgorICAgICAgICBDUFBGTEFHUz0iLUkkd2l0aHZhbC9pbmNsdWRlICRDUFBGTEFHUyIKKyAgICAgIGVsc2UKIAogICBpZiB0ZXN0ICJ4JHdpdGh2YWwiICE9IHggLWEgLWQgJHdpdGh2YWw7IHRoZW4KICAgICAgaWYgdGVzdCAtZCAkd2l0aHZhbC9saWI7IHRoZW4KQEAgLTI0MDcsMTAgKzM0NTAsMTcgQEAKICAgICAgZmkKICAgZmkKIAorICAgICAgZmkKICAgICAgIHRyeW9wZW5zc2w9eWVzCiAgICAgICBhc2tlZG9wZW5zc2w9eWVzCiAgICAgZmkKLWZpOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wZW5zc2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3BlbnNzbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX29wZW5zc2w7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCiBpZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiID0gInhkZWZhdWx0eWVzIjsgdGhlbgogCiAgIGlmIHRlc3QgIngvdXNyL2xvY2FsL3NzbCIgIT0geCAtYSAtZCAvdXNyL2xvY2FsL3NzbDsgdGhlbgpAQCAtMjQyNCwyMjYgKzM0NzQsMjMgQEAKIAogICAgICAgdHJ5b3BlbnNzbD15ZXMKIGZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3BlbnNzbCBvciAtLWRpc2FibGUtb3BlbnNzbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9vcGVuc3NsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9vcGVuc3NsIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3NsIG9yIC0td2l0aG91dC1zc2wgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NzbCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zc2wiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zc2wgb3IgLS1kaXNhYmxlLXNzbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zc2wrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NzbCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi10cnlrcmI1PWRlZmF1bHR5ZXMKLWFza2Vka3JiNT1ubwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWtyYjUgb3IgLS13aXRob3V0LWtyYjUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2tyYjUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfa3JiNSIKLSAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgdHJ5a3JiNT15ZXMKLSAgICAgIGFza2Vka3JiNT15ZXMKLSAgICAgIGtyYjVwYXRoPXVuZGVmCi0gICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KLSAgICAgIHRyeWtyYjU9bm8KLSAgICAgIGtyYjVwYXRoPXVuZGVmCi0gICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KLSAgICAgIHRyeWtyYjU9eWVzCi0gICAgICBhc2tlZGtyYjU9eWVzCi0gICAgICBrcmI1cGF0aD0kd2l0aHZhbAotICAgIGZpCi1maTsKLWlmIHRlc3QgIngkdHJ5a3JiNSIgPSAieGRlZmF1bHR5ZXMiOyB0aGVuCi0gICAgICB0cnlrcmI1PXllcwotICAgICAga3JiNXBhdGg9L3Vzci9rZXJiZXJvcwotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1rcmI1IG9yIC0tZGlzYWJsZS1rcmI1IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2tyYjUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2tyYjUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1rcmI1Ly0td2l0aG91dC1rcmI1IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1rcmI1Ly0td2l0aG91dC1rcmI1IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXJwbSBvciAtLXdpdGhvdXQtcnBtIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9ycG0rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcnBtIgotCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ycG0gb3IgLS1kaXNhYmxlLXJwbSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ycG0rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3JwbSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJwbS8tLXdpdGhvdXQtcnBtIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1ycG0vLS13aXRob3V0LXJwbSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSBvciAtLWRpc2FibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfYWdlbnR4X2RvbV9zb2NrX29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2FnZW50eF9kb21fc29ja19vbmx5IgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0FHRU5UWF9ET01fU09DS19PTkxZIDEKLV9BQ0VPRgotCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZ2VudHgtZG9tLXNvY2stb25seSBvciAtLXdpdGhvdXQtYWdlbnR4LWRvbS1zb2NrLW9ubHkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2FnZW50eF9kb21fc29ja19vbmx5K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2FnZW50eF9kb21fc29ja19vbmx5IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seS8tLWRpc2FibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkvLS1kaXNhYmxlLWFnZW50eC1kb20tc29jay1vbmx5IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNubXB0cmFwZC1zdWJhZ2VudCBvciAtLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50IgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudCIgPSAieG5vIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWCAxCi1fQUNFT0YKLQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zc2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NzbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3NsOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkIiAiJExJTkVOTyIgNQogZmkKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zbm1wdHJhcGQtc3ViYWdlbnQgb3IgLS13aXRob3V0LXNubXB0cmFwZC1zdWJhZ2VudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc25tcHRyYXBkX3N1YmFnZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NubXB0cmFwZF9zdWJhZ2VudCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHRyYXBkLXN1YmFnZW50Ly0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHRyYXBkLXN1YmFnZW50Ly0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3BhcXVlLXNwZWNpYWwtdHlwZXMgb3IgLS13aXRob3V0LW9wYXF1ZS1zcGVjaWFsLXR5cGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlcyIKLQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3BhcXVlLXNwZWNpYWwtdHlwZXMgb3IgLS1kaXNhYmxlLW9wYXF1ZS1zcGVjaWFsLXR5cGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29wYXF1ZV9zcGVjaWFsX3R5cGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9vcGFxdWVfc3BlY2lhbF90eXBlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wYXF1ZS1zcGVjaWFsLXR5cGVzLy0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BhcXVlLXNwZWNpYWwtdHlwZXMvLS13aXRob3V0LW9wYXF1ZS1zcGVjaWFsLXR5cGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYmRpcnMgb3IgLS13aXRob3V0LW1pYmRpcnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pYmRpcnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWliZGlycyIKLSAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9IiR3aXRoX21pYmRpcnMiCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfTUlCRElSUyAiJHdpdGhfbWliZGlycyIKLV9BQ0VPRgotCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWJkaXJzIG9yIC0tZGlzYWJsZS1taWJkaXJzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pYmRpcnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pYmRpcnMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJkaXJzLy0td2l0aG91dC1taWJkaXJzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJkaXJzLy0td2l0aG91dC1taWJkaXJzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYnMgb3IgLS13aXRob3V0LW1pYnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pYnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWlicyIKLSAgTkVUU05NUF9ERUZBVUxUX01JQlM9IiR3aXRoX21pYnMiCi1maTsKLSMgZW5hYmxlLW1pYnMgaXMgdmFsaWQgdG9vLCBidXQgbWVhbnMgc29tZXRoaW5nIGVsc2UKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYmZpbGVzIG9yIC0td2l0aG91dC1taWJmaWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWliZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWliZmlsZXMiCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQkZJTEVTICIkd2l0aF9taWJmaWxlcyIKLV9BQ0VPRgotCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWJmaWxlcyBvciAtLWRpc2FibGUtbWliZmlsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWliZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pYmZpbGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliZmlsZXMvLS13aXRob3V0LW1pYmZpbGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJmaWxlcy8tLXdpdGhvdXQtbWliZmlsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZyBvciAtLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taWJfY29uZmlnX2NoZWNraW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taWJfY29uZmlnX2NoZWNraW5nIgotICB3aXRoX21pYl9jZmdfY2hlY2tzPSJ5ZXMiCi1lbHNlCi0gIHdpdGhfbWliX2NmZ19jaGVja3M9Im5vIgotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliLWNvbmZpZy1jaGVja2luZyBvciAtLXdpdGhvdXQtbWliLWNvbmZpZy1jaGVja2luZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWliX2NvbmZpZ19jaGVja2luZytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taWJfY29uZmlnX2NoZWNraW5nIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmcgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliLWNvbmZpZy1kZWJ1ZyBvciAtLWRpc2FibGUtbWliLWNvbmZpZy1kZWJ1ZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taWJfY29uZmlnX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taWJfY29uZmlnX2RlYnVnIgotICB3aXRoX21pYl9jZmdfZGVidWc9InllcyIKLWVsc2UKLSAgd2l0aF9taWJfY2ZnX2RlYnVnPSJubyIKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYi1jb25maWctY2hlY2tpbmcgb3IgLS13aXRob3V0LW1pYi1jb25maWctY2hlY2tpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pYl9jb25maWdfY2hlY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWliX2NvbmZpZ19jaGVja2luZyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZy8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1mZC1yZXdyaXRlcyBvciAtLWRpc2FibGUtbWZkLXJld3JpdGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21mZF9yZXdyaXRlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWZkX3Jld3JpdGVzIgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX21mZF9yZXdyaXRlcyIgPSAieHllcyI7IHRoZW4KLSAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUyAxCi1fQUNFT0YKLQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNzbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zc2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zc2w7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQiICIkTElORU5PIiA1CiBmaQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1mZC1yZXdyaXRlcyBvciAtLXdpdGhvdXQtbWZkLXJld3JpdGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9tZmRfcmV3cml0ZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWZkX3Jld3JpdGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tZmQtcmV3cml0ZXMvLS1kaXNhYmxlLW1mZC1yZXdyaXRlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tZmQtcmV3cml0ZXMvLS1kaXNhYmxlLW1mZC1yZXdyaXRlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKIGFza2VkcGtjcz1ubwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBrY3Mgb3IgLS13aXRob3V0LXBrY3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BrY3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcGtjcyIKLSAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wa2NzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wa2NzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wa2NzOyBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCiAgICAgICBhc2tlZHBrY3M9eWVzCiAgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KICAgICAgIGFza2VkcGtjcz1ubwpAQCAtMjY2MCwzOTYgKzM1MDcsMTMzOCBAQAogCiAgICAgICBhc2tlZHBrY3M9eWVzCiAgICAgZmkKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBrY3Mgb3IgLS1kaXNhYmxlLXBrY3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcGtjcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcGtjcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBrY3MvLS13aXRob3V0LXBrY3MgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBrY3MvLS13aXRob3V0LXBrY3MgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworZmkKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRlc3RpbmctY29kZSBvciAtLWRpc2FibGUtdGVzdGluZy1jb2RlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3Rlc3RpbmdfY29kZStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfdGVzdGluZ19jb2RlIgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgMQorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBrY3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGtjcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BrY3M7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wa2NzLy0td2l0aG91dC1wa2NzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKK3RyeWtyYjU9ZGVmYXVsdHllcworYXNrZWRrcmI1PW5vCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgta3JiNSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfa3JiNStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfa3JiNTsgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHJ5a3JiNT15ZXMKKyAgICAgIGFza2Vka3JiNT15ZXMKKyAgICAgIGtyYjVwYXRoPXVuZGVmCisgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KKyAgICAgIHRyeWtyYjU9bm8KKyAgICAgIGtyYjVwYXRoPXVuZGVmCisgICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KKyAgICAgIHRyeWtyYjU9eWVzCisgICAgICBhc2tlZGtyYjU9eWVzCisgICAgICBrcmI1cGF0aD0kd2l0aHZhbAorICAgIGZpCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUta3JiNSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9rcmI1K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfa3JiNTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWtyYjUvLS13aXRob3V0LWtyYjUgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkdHJ5a3JiNSIgPSAieGRlZmF1bHR5ZXMiOyB0aGVuCisgICAgICB0cnlrcmI1PXllcworICAgICAga3JiNXBhdGg9L3Vzci9rZXJiZXJvcworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kbnNzZWNfbG9jYWxfdmFsaWRhdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZG5zc2VjX2xvY2FsX3ZhbGlkYXRpb247IHdhbnRfZG5zc2VjPSR3aXRodmFsCitlbHNlCisgIHdhbnRfZG5zc2VjPW5vCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG5zc2VjX2xvY2FsX3ZhbGlkYXRpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kbnNzZWNfbG9jYWxfdmFsaWRhdGlvbjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uLy0td2l0aG91dC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRuc3NlYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZG5zc2VjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kbnNzZWM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbi8tLXdpdGhvdXQtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kbnNzZWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG5zc2VjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG5zc2VjOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24vLS13aXRob3V0LWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ycG0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3JwbStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcnBtOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJwbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ycG0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ycG07IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1ycG0vLS13aXRob3V0LXJwbSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMjCisjICAgUHJvamVjdDogQnVpbGQgY29uZmlndXJhdGlvbiBzZXR0aW5ncworIyMKKworIyAgICAgICBJbnN0YWxsIHByZWZpeAorIworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWluc3RhbGwtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9pbnN0YWxsX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfaW5zdGFsbF9wcmVmaXg7IElOU1RBTExfUFJFRklYPSIkd2l0aHZhbCIKK2ZpCisKKworaWYgdGVzdCAieCRJTlNUQUxMX1BSRUZJWCIgPSAieHllcyIgOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICItLXdpdGgtaW5zdGFsbC1wcmVmaXggcmVxdWlyZXMgYW4gYXJndW1lbnQiICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAieCRJTlNUQUxMX1BSRUZJWCIgPSAieG5vIiA7IHRoZW4KKyAgSU5TVEFMTF9QUkVGSVg9IiIKK2ZpCisKKworCisjCisjICAgU3Vic3lzdGVtcyB0byBidWlsZDoKKyMgICAgICAgTGlicmFyeQorIworRkVBVFVSRUhFQURFUlM9ImxpYnJhcnkvZmVhdHVyZXMuaCIKK0ZUTUFJTlNVQlM9IiIKKworIworIyAgICAgICBBZ2VudAorIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFnZW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2FnZW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYWdlbnQ7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWdlbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FnZW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hZ2VudDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYWdlbnQvLS1kaXNhYmxlLWFnZW50IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9hZ2VudCIgIT0gInhubyI7IHRoZW4KKyAgIFNOTVBEPSdzbm1wZCQoRVhFRVhUKScKKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYWdlbnQiCisgICBGRUFUVVJFSEVBREVSUz0iJEZFQVRVUkVIRUFERVJTIGFnZW50L2ZlYXR1cmVzLW1pYmdyb3Vwcy5oIGFnZW50L2ZlYXR1cmVzLmgiCisgICBGVE1BSU5TVUJTPSJhZ2VudCAkRlRNQUlOU1VCUyIKKyAgIFRSQVBMSUJTPSckKFRSQVBEV0lUSEFHRU5UKScKKyAgIFVTRVRSQVBMSUJTPSckKFVTRUFHRU5UTElCUyknCitlbHNlCisgICBTTk1QRD0iIgorICAgIyB3ZSBzdGlsbCBuZWVkL3dhbnQgdGhlIGFnZW50bGlicyAoZm9yIHN1YmFnZW50cywgZS5nLiBzbm1wdHJhcGQpCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFnZW50IgorICAgIyBidWlsZGluZyBzbm1wdHJhcGQgdy9vIGFnZW50bGlicyBkb2Vzbid0IHdvcmsgYXRtCisgICAjVFJBUExJQlM9JyQoVFJBUERXSVRIT1VUQUdFTlQpJworICAgI1VTRVRSQVBMSUJTPSckKFVTRUxJQlMpJworICAgVFJBUExJQlM9JyQoVFJBUERXSVRIQUdFTlQpJworICAgVVNFVFJBUExJQlM9JyQoVVNFQUdFTlRMSUJTKScKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX0FHRU5UIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworCisKKyMgICAgICAgQXBwbGljYXRpb25zCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXBwbGljYXRpb25zIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2FwcGxpY2F0aW9ucytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2FwcGxpY2F0aW9uczsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hcHBsaWNhdGlvbnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FwcGxpY2F0aW9ucytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYXBwbGljYXRpb25zOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hcHBsaWNhdGlvbnMvLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfYXBwbGljYXRpb25zIiAhPSAieG5vIjsgdGhlbgorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhcHBzIgorICAgRkVBVFVSRUhFQURFUlM9IiRGRUFUVVJFSEVBREVSUyBmZWF0dXJlcy1zbm1wbmV0c3RhdC5oIGZlYXR1cmVzLWFwcHMuaCIKKyAgIEZUTUFJTlNVQlM9ImFwcHMgJEZUTUFJTlNVQlMiCitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9BUFBTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjICAgICAgIE1hbnVhbCBwYWdlcworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1hbnVhbHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWFudWFscytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21hbnVhbHM7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWFudWFscyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWFudWFscytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWFudWFsczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWFudWFscy8tLWRpc2FibGUtbWFudWFscyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfbWFudWFscyIgIT0gInhubyI7IHRoZW4KKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbWFuIgorZmkKKworIyAgICAgICBTdXBwb3J0aW5nIHNjcmlwdHMKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zY3JpcHRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NjcmlwdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zY3JpcHRzOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNjcmlwdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NjcmlwdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NjcmlwdHM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNjcmlwdHMvLS1kaXNhYmxlLXNjcmlwdHMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX3NjcmlwdHMiICE9ICJ4bm8iOyB0aGVuCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIGxvY2FsIgorZmkKKworIyAgICAgICBNSUIgZmlsZXMKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taWJzOworZmkKKworaWYgdGVzdCAieCRlbmFibGVfbWlicyIgIT0gInhubyI7IHRoZW4KKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbWlicyIKK2ZpCisjIHdpdGgtbWlicyBpcyB2YWxpZCB0b28sIGJ1dCBtZWFucyBzb21ldGhpbmcgZWxzZQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGF0IHRvIGJ1aWxkIGFuZCBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoYXQgdG8gYnVpbGQgYW5kIGluc3RhbGwuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFJTlNVQlMiID4mNQorJGFzX2VjaG8gIiRNQUlOU1VCUyIgPiY2OyB9CisKKworIyAgICAgICBNSUIgbW9kdWxlIHZhbGlkYXRpb24gKGR1cmluZyAiY29uZmlndXJlIikKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pYl9jb25maWdfY2hlY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taWJfY29uZmlnX2NoZWNraW5nOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyAtbyAiJGVuYWJsZXZhbCIgPSBubyA7IHRoZW4KKyAgICAgd2l0aF9taWJfY2ZnX2NoZWNrcz0iJGVuYWJsZXZhbCIKKyAgIGVsc2UKKyAgICAgYXNfZm5fZXJyb3IgJD8gIlBsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmciICIkTElORU5PIiA1CisgICBmaQorZWxzZQorICB3aXRoX21pYl9jZmdfY2hlY2tzPSJubyIKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWItY29uZmlnLWNoZWNraW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taWJfY29uZmlnX2NoZWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taWJfY29uZmlnX2NoZWNraW5nOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWItY29uZmlnLWRlYnVnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pYl9jb25maWdfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taWJfY29uZmlnX2RlYnVnOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyAtbyAiJGVuYWJsZXZhbCIgPSBubyA7IHRoZW4KKyAgICAgd2l0aF9taWJfY2ZnX2RlYnVnPSIkZW5hYmxldmFsIgorICAgZWxzZQorICAgICBhc19mbl9lcnJvciAkPyAiUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtbWliLWNvbmZpZy1kZWJ1ZyIgIiRMSU5FTk8iIDUKKyAgIGZpCitlbHNlCisgIHdpdGhfbWliX2NmZ19kZWJ1Zz0ibm8iCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliLWNvbmZpZy1kZWJ1ZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWliX2NvbmZpZ19kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWliX2NvbmZpZ19kZWJ1ZzsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWNvbmZpZy1kZWJ1Zy8tLWRpc2FibGUtbWliLWNvbmZpZy1kZWJ1ZyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgICAgICAgVmVyc2lvbi1zcGVjaWZpYyBmZWF0dXJlcworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ldy1mZWF0dXJlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9uZXdfZmVhdHVyZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9uZXdfZmVhdHVyZXM7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vbGQtZmVhdHVyZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb2xkX2ZlYXR1cmVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb2xkX2ZlYXR1cmVzOworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZmVhdHVyZXMtb2Ygd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2ZlYXR1cmVzX29mK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9mZWF0dXJlc19vZjsKK2Vsc2UKKyAgd2l0aF9mZWF0dXJlc19vZj0kUEFDS0FHRV9WRVJTSU9OCitmaQorCisKKworIyAgICAgICBNYW51YWwgcHJvbXB0aW5nIGR1cmluZyAiY29uZmlndXJlIgorIworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlZmF1bHRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZWZhdWx0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGVmYXVsdHM7IGlmIHRlc3QgIiR3aXRodmFsIiA9IHllcyAtbyAiJHdpdGh2YWwiID0gbm8gOyB0aGVuCisgICAgIGRlZmF1bHRzPSIkd2l0aHZhbCIKKyAgIGVsc2UKKyAgICAgYXNfZm5fZXJyb3IgJD8gIlBsZWFzZSB1c2UgLS13aXRoLy0td2l0aG91dC1kZWZhdWx0cyIgIiRMSU5FTk8iIDUKKyAgIGZpCitlbHNlCisgIGRlZmF1bHRzPSJubyIKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWZhdWx0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZWZhdWx0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlZmF1bHRzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZGVmYXVsdHMvLS13aXRob3V0LWRlZmF1bHRzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyAgICAgICBVQ0QgY29tcGF0YWJpbGl0eQorIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdWNkX3NubXBfY29tcGF0aWJpbGl0eStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHk7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdWNkLXNubXAtY29tcGF0aWJpbGl0eSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdWNkX3NubXBfY29tcGF0aWJpbGl0eStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfdWNkX3NubXBfY29tcGF0aWJpbGl0eTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eS8tLWRpc2FibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCitpZiB0ZXN0ICJ4JGVuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5IiA9ICJ4eWVzIiA7IHRoZW4KKyAgaW5zdGFsbHVjZGhlYWRlcnM9aW5zdGFsbHVjZGhlYWRlcnMKKyAgaW5zdGFsbHVjZGxpYnM9aW5zdGFsbHVjZGxpYnMKKworICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgIFVDRC1TTk1QIGNvbXBhdGFiaWxpdHk6ICAgICBlbmFibGVkCitFT0YKKworZmkKKworCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBNSUIgY29uZmlndXJhdGlvbiBzZXR0aW5ncworIyMKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYi1sb2FkaW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pYl9sb2FkaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWliX2xvYWRpbmc7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliLWxvYWRpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pYl9sb2FkaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taWJfbG9hZGluZzsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWxvYWRpbmcvLS1kaXNhYmxlLW1pYi1sb2FkaW5nIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9taWJfbG9hZGluZyIgPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWJkaXJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taWJkaXJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taWJkaXJzOyBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz0iJHdpdGhfbWliZGlycyIKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfTUlCRElSUyAiJHdpdGhfbWliZGlycyIKIF9BQ0VPRgogCi1maTsKK2ZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGVzdGluZy1jb2RlIG9yIC0td2l0aG91dC10ZXN0aW5nLWNvZGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3Rlc3RpbmdfY29kZStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF90ZXN0aW5nX2NvZGUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXRlc3RpbmctY29kZS8tLWRpc2FibGUtdGVzdGluZy1jb2RlIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXRlc3RpbmctY29kZS8tLWRpc2FibGUtdGVzdGluZy1jb2RlIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlZW50cmFudCBvciAtLWRpc2FibGUtcmVlbnRyYW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3JlZW50cmFudCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcmVlbnRyYW50IgotICB3aXRoX3Jlc19sb2Nrcz0ieWVzIgotZWxzZQotICB3aXRoX3Jlc19sb2Nrcz0ibm8iCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yZWVudHJhbnQgb3IgLS13aXRob3V0LXJlZW50cmFudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcmVlbnRyYW50K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3JlZW50cmFudCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcmVlbnRyYW50Ly0tZGlzYWJsZS1yZWVudHJhbnQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcmVlbnRyYW50Ly0tZGlzYWJsZS1yZWVudHJhbnQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYmRpcnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWliZGlycytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pYmRpcnM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJkaXJzLy0td2l0aG91dC1taWJkaXJzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcm9vdC1hY2Nlc3Mgb3IgLS13aXRob3V0LXJvb3QtYWNjZXNzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9yb290X2FjY2VzcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9yb290X2FjY2VzcyIKIAotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcm9vdC1hY2Nlc3Mgb3IgLS1kaXNhYmxlLXJvb3QtYWNjZXNzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3Jvb3RfYWNjZXNzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9yb290X2FjY2VzcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJvb3QtYWNjZXNzLy0td2l0aG91dC1yb290LWFjY2VzcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcm9vdC1hY2Nlc3MvLS13aXRob3V0LXJvb3QtYWNjZXNzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWlicyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWlicytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWliczsgTkVUU05NUF9ERUZBVUxUX01JQlM9IiR3aXRoX21pYnMiCitmaQorCisjIGVuYWJsZS1taWJzIGlzIHZhbGlkIHRvbywgYnV0IG1lYW5zIHNvbWV0aGluZyBlbHNlCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1rbWVtLXVzYWdlIG9yIC0td2l0aG91dC1rbWVtLXVzYWdlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9rbWVtX3VzYWdlK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2ttZW1fdXNhZ2UiCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYmZpbGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taWJmaWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWliZmlsZXM7CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9NSUJGSUxFUyAiJHdpdGhfbWliZmlsZXMiCitfQUNFT0YKIAotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUta21lbS11c2FnZSBvciAtLWRpc2FibGUta21lbS11c2FnZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9rbWVtX3VzYWdlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9rbWVtX3VzYWdlIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgta21lbS11c2FnZS8tLXdpdGhvdXQta21lbS11c2FnZSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgta21lbS11c2FnZS8tLXdpdGhvdXQta21lbS11c2FnZSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliZmlsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWliZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taWJmaWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYmZpbGVzLy0td2l0aG91dC1taWJmaWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWR1bW15LXZhbHVlcyBvciAtLXdpdGhvdXQtZHVtbXktdmFsdWVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9kdW1teV92YWx1ZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZHVtbXlfdmFsdWVzIgogCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kdW1teS12YWx1ZXMgb3IgLS1kaXNhYmxlLWR1bW15LXZhbHVlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kdW1teV92YWx1ZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2R1bW15X3ZhbHVlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWR1bW15LXZhbHVlcy8tLXdpdGhvdXQtZHVtbXktdmFsdWVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kdW1teS12YWx1ZXMvLS13aXRob3V0LWR1bW15LXZhbHVlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IFNlY3VyaXR5IGNvbmZpZ3VyYXRpb24KKyMjCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVzOworZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5IG9yIC0td2l0aG91dC1wZXJzaXN0ZW50LWRpcmVjdG9yeSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGVyc2lzdGVudF9kaXJlY3Rvcnkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcGVyc2lzdGVudF9kaXJlY3RvcnkiCi0gIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9IiR3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5IgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGVyc2lzdGVudC1kaXJlY3Rvcnkgb3IgLS1kaXNhYmxlLXBlcnNpc3RlbnQtZGlyZWN0b3J5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3BlcnNpc3RlbnRfZGlyZWN0b3J5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9wZXJzaXN0ZW50X2RpcmVjdG9yeSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5Ly0td2l0aG91dC1wZXJzaXN0ZW50LWRpcmVjdG9yeSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3RvcnkvLS13aXRob3V0LXBlcnNpc3RlbnQtZGlyZWN0b3J5IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVzLy0tZGlzYWJsZS1kZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKLWRlZmF1bHRfcGVyc2lzdGVudF9tYXNrPTA3NworaWYgdGVzdCAieCRlbmFibGVfZGVzIiA9ICJ4bm8iOyB0aGVuCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGVyc2lzdGVudC1tYXNrIG9yIC0td2l0aG91dC1wZXJzaXN0ZW50LW1hc2sgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BlcnNpc3RlbnRfbWFzaytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9wZXJzaXN0ZW50X21hc2siCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfREVTIDEiID4+Y29uZmRlZnMuaAogCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIG1hc2sgdmFsdWUgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIG1hc2sgdmFsdWUgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXByaXZhY3kgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcHJpdmFjeStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3ByaXZhY3k7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcHJpdmFjeSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcHJpdmFjeStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcHJpdmFjeTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcHJpdmFjeS8tLWRpc2FibGUtcHJpdmFjeSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tZDUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWQ1K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWQ1OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1kNSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWQ1K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9tZDU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1kNS8tLWRpc2FibGUtbWQ1IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX01ENSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWludGVybmFsLW1kNSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9pbnRlcm5hbF9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9pbnRlcm5hbF9tZDU7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW50ZXJuYWwtbWQ1IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9pbnRlcm5hbF9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2ludGVybmFsX21kNTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtaW50ZXJuYWwtbWQ1Ly0tZGlzYWJsZS1pbnRlcm5hbC1tZDUgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2ludGVybmFsX21kNSIgPSAieHllcyI7IHRoZW4KKyAgaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIllvdSBjYW4gbm90IHNwZWNpZnkgYm90aCAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgYW5kIC0tZGlzYWJsZS1tZDUiICIkTElORU5PIiA1CisgIGVsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1IDEiID4+Y29uZmRlZnMuaAorCiAgIGZpCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorZmkKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IE1pc2MgY29uZmlndXJhdGlvbgorIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW9wYXF1ZS1zcGVjaWFsLXR5cGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXM7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3BhcXVlLXNwZWNpYWwtdHlwZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3BhcXVlX3NwZWNpYWxfdHlwZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vcGFxdWVfc3BlY2lhbF90eXBlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wYXF1ZS1zcGVjaWFsLXR5cGVzLy0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KK2lmIHRlc3QgIngkd2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlcyIgIT0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaXB2NiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9pcHY2K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfaXB2NjsgaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9FTkFCTEVfSVBWNiAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaXB2NiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaXB2NitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfaXB2NjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtaXB2Ni8tLWRpc2FibGUtaXB2NiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbG9nZmlsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbG9nZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbG9nZmlsZTsgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPSIkd2l0aF9sb2dmaWxlIgorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxvZ2ZpbGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbG9nZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xvZ2ZpbGU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1sb2dmaWxlLy0td2l0aG91dC1sb2dmaWxlIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA9ICJubyI7IHRoZW4KKyAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9Im5vbmUiCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeTsgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT0iJHdpdGhfcGVyc2lzdGVudF9kaXJlY3RvcnkiCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGVyc2lzdGVudC1kaXJlY3Rvcnkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGVyc2lzdGVudF9kaXJlY3Rvcnkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wZXJzaXN0ZW50X2RpcmVjdG9yeTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5Ly0td2l0aG91dC1wZXJzaXN0ZW50LWRpcmVjdG9yeSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGVyc2lzdGVudC1tYXNrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wZXJzaXN0ZW50X21hc2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BlcnNpc3RlbnRfbWFzazsgaWYgdGVzdCBgZXhwciAiWCR3aXRodmFsIiA6ICdYWzAtN10qJCdgIC1lcSA0IDsgdGhlbgorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJ1c2luZyBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWwiID4mNjsgfQorICAgICB3aXRodmFsPSIwJHdpdGh2YWwiCisgICBlbHNlCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2UgcHJvdmlkZSBhIHRocmVlIGRpZ2l0IG9jdGFsIHBlcnNpc3RlbnQgbWFzayB2YWx1ZSIgIiRMSU5FTk8iIDUKKyAgIGZpCitlbHNlCisgIHdpdGh2YWw9MDc3CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gInVzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsIiA+JjY7IH0KK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wZXJzaXN0ZW50LW1hc2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGVyc2lzdGVudF9tYXNrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGVyc2lzdGVudF9tYXNrOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVyc2lzdGVudC1tYXNrLy0td2l0aG91dC1wZXJzaXN0ZW50LW1hc2sgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfTUFTSyAkd2l0aHZhbAogX0FDRU9GCiAKIAotZWxzZQogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICRkZWZhdWx0X3BlcnNpc3RlbnRfbWFzayIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkZGVmYXVsdF9wZXJzaXN0ZW50X21hc2siID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLICRkZWZhdWx0X3BlcnNpc3RlbnRfbWFzawotX0FDRU9GCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNvcHlfcGVyc2lzdGVudF9maWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY29weV9wZXJzaXN0ZW50X2ZpbGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXM7IGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0iJHdpdGhfY29weV9wZXJzaXN0ZW50X2ZpbGVzIgorZmkKIAorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNvcHlfcGVyc2lzdGVudF9maWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jb3B5X3BlcnNpc3RlbnRfZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jb3B5X3BlcnNpc3RlbnRfZmlsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMvLS13aXRob3V0LWNvcHlfcGVyc2lzdGVudF9maWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGVyc2lzdGVudC1tYXNrIG9yIC0tZGlzYWJsZS1wZXJzaXN0ZW50LW1hc2sgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcGVyc2lzdGVudF9tYXNrK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9wZXJzaXN0ZW50X21hc2siCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJzaXN0ZW50LW1hc2sgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcnNpc3RlbnQtbWFzayBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgb3IgLS13aXRob3V0LWNvcHlfcGVyc2lzdGVudF9maWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfY29weV9wZXJzaXN0ZW50X2ZpbGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlcyIKLSAgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSIkd2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMiCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgb3IgLS1kaXNhYmxlLWNvcHlfcGVyc2lzdGVudF9maWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9jb3B5X3BlcnNpc3RlbnRfZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2NvcHlfcGVyc2lzdGVudF9maWxlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNvcHlfcGVyc2lzdGVudF9maWxlcy8tLXdpdGhvdXQtY29weV9wZXJzaXN0ZW50X2ZpbGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMvLS13aXRob3V0LWNvcHlfcGVyc2lzdGVudF9maWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKIGRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm49Ii90bXAvc25tcGRYWFhYWFgiCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4gb3IgLS13aXRob3V0LXRlbXAtZmlsZS1wYXR0ZXJuIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF90ZW1wX2ZpbGVfcGF0dGVybitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF90ZW1wX2ZpbGVfcGF0dGVybiIKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3RlbXBfZmlsZV9wYXR0ZXJuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF90ZW1wX2ZpbGVfcGF0dGVybjsgaWYgdGVzdCBgZXhwciAiWCR3aXRodmFsIiA6ICIuKlhYWFhYWCQiYCAtbmUgMCA7IHRoZW4KKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gInVzaW5nIHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwiID4mNjsgfQorICAgZWxzZQorICAgICBhc19mbl9lcnJvciAkPyAidGVtcG9yYXJ5IGZpbGUgcGF0dGVucyBtdXN0IGVuZCB3aXRoIDYgWCdzIiAiJExJTkVOTyIgNQorICAgZmkKK2Vsc2UKKyAgd2l0aHZhbD0iJGRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm4iCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZGVmYXVsdCB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJ1c2luZyBkZWZhdWx0IHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwiID4mNjsgfQorZmkKIAotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwYXR0ZXJuICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwYXR0ZXJuICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsKLSAgZmkKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsIiA+JjYKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZW1wLWZpbGUtcGF0dGVybiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV90ZW1wX2ZpbGVfcGF0dGVybitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3RlbXBfZmlsZV9wYXR0ZXJuOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4vLS13aXRob3V0LXRlbXAtZmlsZS1wYXR0ZXJuIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiAiJHdpdGh2YWwiCiBfQUNFT0YKIAogCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogVmVyc2lvbiBjb25maWd1cmF0aW9uCisjIworCitTTk1QX1ZFUlNJT05TPSIiCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc25tcHYxIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NubXB2MStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NubXB2MTsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zbm1wdjEgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NubXB2MStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc25tcHYxOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdjEvLS1kaXNhYmxlLXNubXB2MSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfc25tcHYxIiA9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEgMSIgPj5jb25mZGVmcy5oCisKIGVsc2UKKyAgU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMSIKK2ZpCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZGVmYXVsdCB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICRkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGRlZmF1bHQgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybiIgPiY2Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiAiJGRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm4iCi1fQUNFT0YKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zbm1wdjJjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NubXB2MmMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zbm1wdjJjOworZmkKIAogCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZW1wLWZpbGUtcGF0dGVybiBvciAtLWRpc2FibGUtdGVtcC1maWxlLXBhdHRlcm4gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfdGVtcF9maWxlX3BhdHRlcm4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3RlbXBfZmlsZV9wYXR0ZXJuIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4gaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc25tcHYyYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc25tcHYyYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc25tcHYyYzsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHYyYy8tLWRpc2FibGUtc25tcHYyYyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfc25tcHYyYyIgPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfU05NUFYyQyAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAyYyIKK2ZpCisKK1NOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDMiCisKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICBTTk1QIFZlcnNpb25zIFN1cHBvcnRlZDogICAkU05NUF9WRVJTSU9OUworRU9GCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb247IGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049IiR3aXRoX2RlZmF1bHRfc25tcF92ZXJzaW9uIgorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlZmF1bHQtc25tcC12ZXJzaW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlZmF1bHRfc25tcF92ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVmYXVsdF9zbm1wX3ZlcnNpb247IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbi8tLXdpdGhvdXQtZGVmYXVsdC1zbm1wLXZlcnNpb24gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyB3ZSB0ZXN0IHRoaXMgbm93IGFuZCBsYXRlciBhcyB3ZWxsLiAgd2UgdGVzdCBpdCBub3cgc28gY29uZmlndXJlIGNhbiBkaWUKKyMgZWFybHkgb24gd2l0aCBhbiBlcnJvciByYXRoZXIgdGhhbiB3YWl0aW5nIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NyaXB0LgorY2FzZSAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OLTN9IiBpbgorICBbMTIzXSkgOzsKKyAgMmMpIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049MiA7OworICAqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJJbGxlZ2FsIHZlcnNpb24gbnVtYmVyLiAgT25seSAxLCAyIChmb3IgU05NUHYyYykgYW5kIDMgYXJlIHN1cHBvcnRlZC4iICIkTElORU5PIiA1CisgICAgOzsKK2VzYWMKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IFRyYW5zcG9ydCBtb2R1bGVzCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdHJhbnNwb3J0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdHJhbnNwb3J0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfdHJhbnNwb3J0czsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXRfdHJhbnNwb3J0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X3RyYW5zcG9ydHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF90cmFuc3BvcnRzOworZmkKKworCisjCisjIENhdGNoIGNvbW1vbiBtaXN0YWtlcyBpbiB0cmFuc3BvcnQgb3B0aW9ucworIworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXRyYW5zcG9ydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdHJhbnNwb3J0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF90cmFuc3BvcnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC10cmFuc3BvcnRzLy0td2l0aG91dC10cmFuc3BvcnRzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LXRyYW5zcG9ydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X3RyYW5zcG9ydCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X3RyYW5zcG9ydDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC10cmFuc3BvcnRzLy0td2l0aG91dC1vdXQtdHJhbnNwb3J0cyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogU2VjdXJpdHkgbW9kdWxlcworIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NlY3VyaXR5X21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NlY3VyaXR5X21vZHVsZXM7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2VjdXJpdHktbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zZWN1cml0eV9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2VjdXJpdHlfbW9kdWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXMvLS13aXRob3V0LXNlY3VyaXR5LW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1zZWN1cml0eS1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfc2VjdXJpdHlfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X3NlY3VyaXR5X21vZHVsZXM7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3V0LXNlY3VyaXR5LW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3V0X3NlY3VyaXR5X21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vdXRfc2VjdXJpdHlfbW9kdWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1zZWN1cml0eS1tb2R1bGVzLy0td2l0aG91dC1vdXQtc2VjdXJpdHktbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogRGV2ZWxvcGVyLXJlbGF0ZWQgc2V0dGluZ3MKKyMjCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWJ1Z2dpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVidWdnaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVidWdnaW5nOyAkYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0FMV0FZU19ERUJVRyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlYnVnZ2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGVidWdnaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kZWJ1Z2dpbmc7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlYnVnZ2luZy8tLWRpc2FibGUtZGVidWdnaW5nIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZWJ1Z2dpbmciID0gInhubyI7IHRoZW4KKyAgICAkYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX05PX0RFQlVHR0lORyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRldmVsb3BlciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZXZlbG9wZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZXZlbG9wZXI7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIDsgdGhlbgorICAgICBkZXZlbG9wZXI9InllcyIKKyAgIGVsaWYgdGVzdCAiJGVuYWJsZXZhbCIgIT0gbm8gOyB0aGVuCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS1kZXZlbG9wZXIiICIkTElORU5PIiA1CisgICBlbHNlCisgICAgIGRldmVsb3Blcj0ibm8iCisgICBmaQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRldmVsb3BlciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGV2ZWxvcGVyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kZXZlbG9wZXI7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRldmVsb3Blci8tLWRpc2FibGUtZGV2ZWxvcGVyIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0aW5nLWNvZGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGVzdGluZ19jb2RlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGVzdGluZ19jb2RlOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFIDEiID4+Y29uZmRlZnMuaAorCisgICBlbGlmIHRlc3QgIiRlbmFibGV2YWwiICE9IG5vIDsgdGhlbgorICAgICBhc19mbl9lcnJvciAkPyAiUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtdGVzdGluZy1jb2RlIiAiJExJTkVOTyIgNQorICAgZmkKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ZXN0aW5nLWNvZGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Rlc3RpbmdfY29kZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfdGVzdGluZ19jb2RlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS10ZXN0aW5nLWNvZGUvLS1kaXNhYmxlLXRlc3RpbmctY29kZSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVlbnRyYW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JlZW50cmFudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3JlZW50cmFudDsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgLW8gIiRlbmFibGV2YWwiID0gbm8gOyB0aGVuCisgICAgIHdpdGhfcmVzX2xvY2tzPSIkZW5hYmxldmFsIgorICAgZWxzZQorICAgICBhc19mbl9lcnJvciAkPyAiUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtcmVlbnRyYW50IiAiJExJTkVOTyIgNQorICAgZmkKK2Vsc2UKKyAgd2l0aF9yZXNfbG9ja3M9Im5vIgorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJlZW50cmFudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcmVlbnRyYW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9yZWVudHJhbnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXJlZW50cmFudC8tLWRpc2FibGUtcmVlbnRyYW50IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXByZWNhdGVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlcHJlY2F0ZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZXByZWNhdGVkOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlcHJlY2F0ZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RlcHJlY2F0ZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RlcHJlY2F0ZWQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlcHJlY2F0ZWQvLS1kaXNhYmxlLWRlcHJlY2F0ZWQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfZGVwcmVjYXRlZCIgPSBubyA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9OT19ERVBSRUNBVEVEX0ZVTkNUSU9OUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKyMjCisjICAgUHJvamVjdDogQWdlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncworIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJvb3QtYWNjZXNzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9yb290X2FjY2VzcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcm9vdF9hY2Nlc3M7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcm9vdC1hY2Nlc3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcm9vdF9hY2Nlc3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yb290X2FjY2VzczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJvb3QtYWNjZXNzLy0td2l0aG91dC1yb290LWFjY2VzcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KK2lmIHRlc3QgIngkd2l0aF9yb290X2FjY2VzcyIgPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX05PX1JPT1RfQUNDRVNTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgta21lbS11c2FnZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfa21lbV91c2FnZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfa21lbV91c2FnZTsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1rbWVtLXVzYWdlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2ttZW1fdXNhZ2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9rbWVtX3VzYWdlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgta21lbS11c2FnZS8tLXdpdGhvdXQta21lbS11c2FnZSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KK2lmIHRlc3QgIngkd2l0aF9rbWVtX3VzYWdlIiA9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTk9fS01FTV9VU0FHRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWR1bW15LXZhbHVlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZHVtbXlfdmFsdWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kdW1teV92YWx1ZXM7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZHVtbXktdmFsdWVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2R1bW15X3ZhbHVlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2R1bW15X3ZhbHVlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWR1bW15LXZhbHVlcy8tLXdpdGhvdXQtZHVtbXktdmFsdWVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIERlZmluZSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHN1cHByZXNzZWQgKGkuZS4sIG9wdGlvbiBkZWZhdWx0cyB0byBmYWxzZSkuCitpZiB0ZXN0ICJ4JHdpdGhfZHVtbXlfdmFsdWVzIiAhPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZXQtc3VwcG9ydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zZXRfc3VwcG9ydCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NldF9zdXBwb3J0OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNldC1zdXBwb3J0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zZXRfc3VwcG9ydCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc2V0X3N1cHBvcnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNldC1zdXBwb3J0Ly0tZGlzYWJsZS1zZXQtc3VwcG9ydCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfc2V0X3N1cHBvcnQiID0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNfY29udGFjdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzX2NvbnRhY3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3N5c19jb250YWN0OyBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUPSIkd2l0aF9zeXNfY29udGFjdCIKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zeXNfY29udGFjdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zeXNfY29udGFjdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N5c19jb250YWN0OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc3lzX2NvbnRhY3QvLS13aXRob3V0LXN5c19jb250YWN0IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNfbG9jYXRpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3N5c19sb2NhdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzX2xvY2F0aW9uOyBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0M9IiR3aXRoX3N5c19sb2NhdGlvbiIKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zeXNfbG9jYXRpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3lzX2xvY2F0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3lzX2xvY2F0aW9uOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc3lzX2xvY2F0aW9uLy0td2l0aG91dC1zeXNfbG9jYXRpb24gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisKKyMjCisjICAgUHJvamVjdDogQWdlbnQ6IEV4dGVuc2liaWxpdHkgY29uZmlndXJhdGlvbgorIyMKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxvY2FsLXNtdXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbG9jYWxfc211eCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xvY2FsX3NtdXg7IGlmIHRlc3QgIngkZW5hYmxlX2xvY2FsX3NtdXgiID0gInh5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVggMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxvY2FsLXNtdXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xvY2FsX3NtdXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xvY2FsX3NtdXg7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWxvY2FsLXNtdXgvLS1kaXNhYmxlLWxvY2FsLXNtdXggaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2FnZW50eF9kb21fc29ja19vbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYWdlbnR4X2RvbV9zb2NrX29ubHk7CiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0FHRU5UWF9ET01fU09DS19PTkxZIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWdlbnR4LWRvbS1zb2NrLW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FnZW50eF9kb21fc29ja19vbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hZ2VudHhfZG9tX3NvY2tfb25seTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkvLS1kaXNhYmxlLWFnZW50eC1kb20tc29jay1vbmx5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNubXB0cmFwZC1zdWJhZ2VudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc25tcHRyYXBkX3N1YmFnZW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zbm1wdHJhcGRfc3ViYWdlbnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB0cmFwZC1zdWJhZ2VudC8tLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdHJhcGRfc3ViYWdlbnQiID0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFggMSIgPj5jb25mZGVmcy5oCisKK2ZpCiAKIGRlZmF1bHRfYWdlbnR4X3NvY2tldD0iL3Zhci9hZ2VudHgvbWFzdGVyIgogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWFnZW50eC1zb2NrZXQgb3IgLS13aXRob3V0LWFnZW50eC1zb2NrZXQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2FnZW50eF9zb2NrZXQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfYWdlbnR4X3NvY2tldCIKLQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZ2VudHgtc29ja2V0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hZ2VudHhfc29ja2V0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hZ2VudHhfc29ja2V0OwogICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBmdWxsIHBhdGggIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIGZ1bGwgcGF0aCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07CisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIGZ1bGwgcGF0aCAiICIkTElORU5PIiA1OwogICBmaQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBBZ2VudFggc29ja2V0ICR3aXRodmFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIEFnZW50WCBzb2NrZXQgJHdpdGh2YWwiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgQWdlbnRYIHNvY2tldCAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAidXNpbmcgQWdlbnRYIHNvY2tldCAkd2l0aHZhbCIgPiY2OyB9CisKK2Vsc2UKKworICB3aXRodmFsPSRkZWZhdWx0X2FnZW50eF9zb2NrZXQKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgQWdlbnRYIHNvY2tldCAkZGVmYXVsdF9hZ2VudHhfc29ja2V0IiA+JjUKKyRhc19lY2hvICJ1c2luZyBkZWZhdWx0IEFnZW50WCBzb2NrZXQgJGRlZmF1bHRfYWdlbnR4X3NvY2tldCIgPiY2OyB9CisKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hZ2VudHgtc29ja2V0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2FnZW50eF9zb2NrZXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hZ2VudHhfc29ja2V0OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtYWdlbnR4LXNvY2tldC8tLXdpdGhvdXQtYWdlbnR4LXNvY2tldCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKwogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfQUdFTlRYX1NPQ0tFVCAiJHdpdGh2YWwiCiBfQUNFT0YKIAogCi1lbHNlCi0KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBBZ2VudFggc29ja2V0ICRkZWZhdWx0X2FnZW50eF9zb2NrZXQiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZGVmYXVsdCBBZ2VudFggc29ja2V0ICRkZWZhdWx0X2FnZW50eF9zb2NrZXQiID4mNgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfQUdFTlRYX1NPQ0tFVCAiJGRlZmF1bHRfYWdlbnR4X3NvY2tldCIKLV9BQ0VPRgotCi0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFnZW50eC1zb2NrZXQgb3IgLS1kaXNhYmxlLWFnZW50eC1zb2NrZXQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfYWdlbnR4X3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfYWdlbnR4X3NvY2tldCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWFnZW50eC1zb2NrZXQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWFnZW50eC1zb2NrZXQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24gb3IgLS13aXRob3V0LWRlZmF1bHQtc25tcC12ZXJzaW9uIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbiIKLSAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0iJHdpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24iCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWZhdWx0LXNubXAtdmVyc2lvbiBvciAtLWRpc2FibGUtZGVmYXVsdC1zbm1wLXZlcnNpb24gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVmYXVsdF9zbm1wX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RlZmF1bHRfc25tcF92ZXJzaW9uIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24vLS13aXRob3V0LWRlZmF1bHQtc25tcC12ZXJzaW9uIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbi8tLXdpdGhvdXQtZGVmYXVsdC1zbm1wLXZlcnNpb24gaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIHdlIHRlc3QgdGhpcyBub3cgYW5kIGxhdGVyIGFzIHdlbGwuICB3ZSB0ZXN0IGl0IG5vdyBzbyBjb25maWd1cmUgY2FuIGRpZQotIyBlYXJseSBvbiB3aXRoIGFuIGVycm9yIHJhdGhlciB0aGFuIHdhaXRpbmcgdGlsbCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQuCi1pZiB0ZXN0ICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICJ4IjsgdGhlbgotICBpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPSAiMmMiOyB0aGVuCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0iMiIKLSAgZmkKLSAgaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIxIiAtYSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIyIiAtYSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIzIjsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IElsbGVnYWwgdmVyc2lvbiBudW1iZXIgcGFzc2VkIHRvIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBJbGxlZ2FsIHZlcnNpb24gbnVtYmVyIHBhc3NlZCB0byAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNfY29udGFjdCBvciAtLXdpdGhvdXQtc3lzX2NvbnRhY3Qgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3N5c19jb250YWN0K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3N5c19jb250YWN0IgotICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUPSIkd2l0aF9zeXNfY29udGFjdCIKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5c19jb250YWN0IG9yIC0tZGlzYWJsZS1zeXNfY29udGFjdCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zeXNfY29udGFjdCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc3lzX2NvbnRhY3QiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zeXMtY29udGFjdC8tLXdpdGhvdXQtc3lzLWNvbnRhY3QgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXN5cy1jb250YWN0Ly0td2l0aG91dC1zeXMtY29udGFjdCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNfbG9jYXRpb24gb3IgLS13aXRob3V0LXN5c19sb2NhdGlvbiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc3lzX2xvY2F0aW9uK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3N5c19sb2NhdGlvbiIKLSAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DPSIkd2l0aF9zeXNfbG9jYXRpb24iCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zeXNfbG9jYXRpb24gb3IgLS1kaXNhYmxlLXN5c19sb2NhdGlvbiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zeXNfbG9jYXRpb24rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3N5c19sb2NhdGlvbiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXN5cy1sb2NhdGlvbi8tLXdpdGhvdXQtc3lzLWxvY2F0aW9uIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zeXMtbG9jYXRpb24vLS13aXRob3V0LXN5cy1sb2NhdGlvbiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1sb2dmaWxlIG9yIC0td2l0aG91dC1sb2dmaWxlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9sb2dmaWxlK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2xvZ2ZpbGUiCi0gIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT0iJHdpdGhfbG9nZmlsZSIKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxvZ2ZpbGUgb3IgLS1kaXNhYmxlLWxvZ2ZpbGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbG9nZmlsZStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbG9nZmlsZSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWxvZ2ZpbGUvLS13aXRob3V0LWxvZ2ZpbGUgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWxvZ2ZpbGUvLS13aXRob3V0LWxvZ2ZpbGUgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPSAibm8iOyB0aGVuCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPSJub25lIgotZmkKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXRyYW5zcG9ydHMgb3IgLS13aXRob3V0LXRyYW5zcG9ydHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3RyYW5zcG9ydHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfdHJhbnNwb3J0cyIKLQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0X3RyYW5zcG9ydHMgb3IgLS13aXRob3V0LW91dF90cmFuc3BvcnRzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9vdXRfdHJhbnNwb3J0cytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9vdXRfdHJhbnNwb3J0cyIKLQotZmk7Ci0KICMKLSMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzIGluIHRyYW5zcG9ydCBvcHRpb25zCisjIGZlYXR1cmUgYWRkaXRpb24vcmVtb3ZhbCBhbmQgbWluaW1pYWxpc3Qgc3VwcG9ydAogIworRkVBVFVSRV9BRERfRkxBR1M9IiIKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC10cmFuc3BvcnQgb3IgLS13aXRob3V0LXRyYW5zcG9ydCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfdHJhbnNwb3J0K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3RyYW5zcG9ydCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXRyYW5zcG9ydHMvLS13aXRob3V0LXRyYW5zcG9ydHMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXRyYW5zcG9ydHMvLS13aXRob3V0LXRyYW5zcG9ydHMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC10cmFuc3BvcnQgb3IgLS13aXRob3V0LW91dC10cmFuc3BvcnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX291dF90cmFuc3BvcnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfb3V0X3RyYW5zcG9ydCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC10cmFuc3BvcnRzLy0td2l0aG91dC1vdXQtdHJhbnNwb3J0cyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LXRyYW5zcG9ydHMvLS13aXRob3V0LW91dC10cmFuc3BvcnRzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIwotIyBzZWN1cml0eSBtb2R1bGVzCi0jCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzIG9yIC0td2l0aG91dC1zZWN1cml0eS1tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zZWN1cml0eV9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NlY3VyaXR5X21vZHVsZXMiCi0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNlY3VyaXR5LW1vZHVsZXMgb3IgLS1kaXNhYmxlLXNlY3VyaXR5LW1vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2VjdXJpdHlfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc2VjdXJpdHlfbW9kdWxlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXMvLS13aXRob3V0LXNlY3VyaXR5LW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXMvLS13aXRob3V0LXNlY3VyaXR5LW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jCi0jIG1pYiBtb2R1bGVzCi0jCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWJfbW9kdWxlcyBvciAtLXdpdGhvdXQtbWliX21vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pYl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pYl9tb2R1bGVzIgotCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWJfbW9kdWxlcyBvciAtLWRpc2FibGUtbWliX21vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWliX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pYl9tb2R1bGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMvLS13aXRob3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWItbW9kdWxlcy8tLXdpdGhvdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0X21pYl9tb2R1bGVzIG9yIC0td2l0aG91dC1vdXRfbWliX21vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX291dF9taWJfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9vdXRfbWliX21vZHVsZXMiCi0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW91dF9taWJfbW9kdWxlcyBvciAtLWRpc2FibGUtb3V0X21pYl9tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX291dF9taWJfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfb3V0X21pYl9tb2R1bGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzLy0td2l0aG91dC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcy8tLXdpdGhvdXQtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW50ZXJwcmlzZS1vaWQgb3IgLS13aXRob3V0LWVudGVycHJpc2Utb2lkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9lbnRlcnByaXNlX29pZCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9lbnRlcnByaXNlX29pZCIKLQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1mZWF0dXJlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZmVhdHVyZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2ZlYXR1cmVzOwogICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGVudGVycHJpc2UgbnVtYmVyICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGVudGVycHJpc2UgbnVtYmVyICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsKKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgbGlzdCBvZiBmZWF0dXJlcyAiICIkTElORU5PIiA1OworICBmaQorICBGRUFUVVJFX0FERF9GTEFHUz0iLS1hZGQgJHdpdGh2YWwiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBhZGRpbmcgaW4gZmVhdHVyZXM6ICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJhZGRpbmcgaW4gZmVhdHVyZXM6ICR3aXRodmFsIiA+JjY7IH0KKworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZlYXR1cmVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2ZlYXR1cmVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZmVhdHVyZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1mZWF0dXJlcy8tLXdpdGhvdXQtZmVhdHVyZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisKK0ZFQVRVUkVfUkVNT1ZFX0ZMQUdTPSIiCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LWZlYXR1cmVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfZmVhdHVyZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF9mZWF0dXJlczsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIGxpc3Qgb2YgZmVhdHVyZXMgIiAiJExJTkVOTyIgNTsKKyAgZmkKKyAgRkVBVFVSRV9SRU1PVkVfRkxBR1M9Ii0tcmVtb3ZlICR3aXRodmFsIgorICBGRUFUVVJFVEFSR1M9ImZlYXR1cmVzIgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX01JTklNQUxfQ09ERSAxIiA+PmNvbmZkZWZzLmgKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcmVtb3ZpbmcgZmVhdHVyZXM6ICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJyZW1vdmluZyBmZWF0dXJlczogJHdpdGh2YWwiID4mNjsgfQorCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3V0LWZlYXR1cmVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX291dF9mZWF0dXJlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX291dF9mZWF0dXJlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1mZWF0dXJlcy8tLXdpdGhvdXQtb3V0LWZlYXR1cmVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworCisjIENhdGNoIGNvbW1vbiBtaXN0YWtlcworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWZlYXR1cmUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2ZlYXR1cmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2ZlYXR1cmU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1mZWF0dXJlcy8tLXdpdGhvdXQtZmVhdHVyZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtZmVhdHVyZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X2ZlYXR1cmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF9mZWF0dXJlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LWZlYXR1cmVzLy0td2l0aG91dC1vdXQtZmVhdHVyZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworRkVBVFVSRVRBUkdTPSIiCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWluaW1hbGlzdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taW5pbWFsaXN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWluaW1hbGlzdDsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taW5pbWFsaXN0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taW5pbWFsaXN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taW5pbWFsaXN0OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pbWFsaXN0Ly0tZGlzYWJsZS1taW5pbWFsaXN0IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9taW5pbWFsaXN0IiA9ICJ4eWVzIjsgdGhlbgorICAgIyB3ZSdsbCBhc3N1bWUgdGhlIG1pbmkgYWdlbnQgaXMgZGVzaXJlZCBoZXJlIGFzIHdlbGwKKyAgIG1pbmlfYWdlbnQ9InllcyIKKyAgIEZFQVRVUkVUQVJHUz0iZmVhdHVyZXMiCisKKyAgICMgbmVlZGVkIHRvIGJvb3RzdHJhcCBsYXRlciBjaGVja3MKKyAgIGVjaG8gIiIgPiBpbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTUlOSU1BTF9DT0RFIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgICBGRUFUVVJFSEVBREVSUz0iIgorZmkKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taW5pbWFsaXN0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taW5pbWFsaXN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taW5pbWFsaXN0OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pbWFsaXN0Ly0tZGlzYWJsZS1taW5pbWFsaXN0IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbm90aWZ5LW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbm90aWZ5X29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ub3RpZnlfb25seTsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ub3RpZnktb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbm90aWZ5X29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX25vdGlmeV9vbmx5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1ub3RpZnktb25seS8tLWRpc2FibGUtbm90aWZ5LW9ubHkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX25vdGlmeV9vbmx5IiA9ICJ4eWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX05PVElGWV9PTkxZIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5vdGlmeS1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ub3RpZnlfb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbm90aWZ5X29ubHk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW5vdGlmeS1vbmx5Ly0tZGlzYWJsZS1ub3RpZnktb25seSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5vdGlmeW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbm90aWZ5b25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25vdGlmeW9ubHk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW5vdGlmeS1vbmx5Ly0tZGlzYWJsZS1ub3RpZnktb25seSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbm8tbGlzdGVuIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25vX2xpc3RlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25vX2xpc3RlbjsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1uby1saXN0ZW4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX25vX2xpc3RlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbm9fbGlzdGVuOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1uby1saXN0ZW4vLS1kaXNhYmxlLW5vLWxpc3RlbiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfbm9fbGlzdGVuIiA9ICJ4eWVzIiAtbyAieCRlbmFibGVfbm90aWZ5X29ubHkiID0gInh5ZXMiOyB0aGVuCisgICBlbmFibGVfbm9fbGlzdGVuPSJ5ZXMiCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbm8tbGlzdGVuIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ub19saXN0ZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX25vX2xpc3RlbjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbm8tbGlzdGVuLy0tZGlzYWJsZS1uby1saXN0ZW4gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ub2xpc3RlbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ub2xpc3RlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25vbGlzdGVuOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1uby1saXN0ZW4vLS1kaXNhYmxlLW5vLWxpc3RlbiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVhZC1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JlYWRfb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3JlYWRfb25seTsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yZWFkLW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3JlYWRfb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcmVhZF9vbmx5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1yZWFkLW9ubHkvLS1kaXNhYmxlLXJlYWQtb25seSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfcmVhZF9vbmx5IiA9ICJ4eWVzIiAtbyAieCRlbmFibGVfbm90aWZ5X29ubHkiID0gInh5ZXMiIDsgdGhlbgorICAgZW5hYmxlX3JlYWRfb25seT0ieWVzIgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcmVhZC1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9yZWFkX29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3JlYWRfb25seTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcmVhZC1vbmx5Ly0tZGlzYWJsZS1yZWFkLW9ubHkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWFkb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yZWFkb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3JlYWRvbmx5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1yZWFkLW9ubHkvLS1kaXNhYmxlLXJlYWQtb25seSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMjCisjICAgUHJvamVjdDogQWdlbnQ6IE1JQiBtb2R1bGUgY29uZmlndXJhdGlvbgorIyMKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pbmlfYWdlbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWluaV9hZ2VudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pbmlfYWdlbnQ7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWluaV9hZ2VudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWluaV9hZ2VudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWluaV9hZ2VudDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaV9hZ2VudC8tLWRpc2FibGUtbWluaV9hZ2VudCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfbWluaV9hZ2VudCIgPSAieHllcyI7IHRoZW4KKyAgICBtaW5pX2FnZW50PSJ5ZXMiCitlbHNlCisgICAgbWluaV9hZ2VudD0ibm8iCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pbmlhZ2VudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWluaWFnZW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taW5pYWdlbnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taW5pYWdlbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWluaWFnZW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWluaWFnZW50OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tZmQtcmV3cml0ZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWZkX3Jld3JpdGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWZkX3Jld3JpdGVzOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1mZC1yZXdyaXRlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWZkX3Jld3JpdGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9tZmRfcmV3cml0ZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1mZC1yZXdyaXRlcy8tLWRpc2FibGUtbWZkLXJld3JpdGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9tZmRfcmV3cml0ZXMiID0gInh5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliX21vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pYl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9taWJfbW9kdWxlczsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWJfbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taWJfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pYl9tb2R1bGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliX21vZHVsZXMvLS13aXRob3V0LW1pYl9tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXRfbWliX21vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF9taWJfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X21pYl9tb2R1bGVzOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW91dF9taWJfbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vdXRfbWliX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vdXRfbWliX21vZHVsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXRfbWliX21vZHVsZXMvLS13aXRob3V0LW91dF9taWJfbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMKKyMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzIGluIGNvbmZpZ3VyZSBvcHRpb25zCisjCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliLW1vZHVsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWliX21vZHVsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWliX21vZHVsZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzLy0td2l0aG91dC1taWItbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1vZHVsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbW9kdWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9tb2R1bGU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWItbW9kdWxlcy8tLXdpdGhvdXQtbWliLW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9tb2R1bGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMvLS13aXRob3V0LW1pYi1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtbWliLW1vZHVsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X21pYl9tb2R1bGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF9taWJfbW9kdWxlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzLy0td2l0aG91dC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtbW9kdWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfbW9kdWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfbW9kdWxlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzLy0td2l0aG91dC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF9tb2R1bGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzLy0td2l0aG91dC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIworIyAgIFByb2plY3Q6IEVudGVycHJpc2Ugc2V0dGluZ3MJKD8gQWdlbnQvTGlicmFyeS9Cb3RoPykKKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbnRlcnByaXNlLW9pZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW50ZXJwcmlzZV9vaWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2VudGVycHJpc2Vfb2lkOworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBlbnRlcnByaXNlIG51bWJlciAiICIkTElORU5PIiA1OwogICBmaQogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfRU5URVJQUklTRV9PSUQgJHdpdGh2YWwKQEAgLTMwNjUsMzIgKzQ4NTQsMjggQEAKICNkZWZpbmUgTkVUU05NUF9FTlRFUlBSSVNFX0RPVF9NSUIgJGVudF9kb3Rfb2lkCiBfQUNFT0YKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBlbnRlcnByaXNlIG51bWJlciAkd2l0aHZhbCIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBlbnRlcnByaXNlIG51bWJlciAkd2l0aHZhbCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBlbnRlcnByaXNlIG51bWJlciAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAidXNpbmcgZW50ZXJwcmlzZSBudW1iZXIgJHdpdGh2YWwiID4mNjsgfQogCiBlbHNlCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBcImVudGVycHJpc2UubmV0LXNubXBcIiIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBkZWZhdWx0IFwiZW50ZXJwcmlzZS5uZXQtc25tcFwiIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgXCJlbnRlcnByaXNlLm5ldC1zbm1wXCIiID4mNQorJGFzX2VjaG8gInVzaW5nIGRlZmF1bHQgXCJlbnRlcnByaXNlLm5ldC1zbm1wXCIiID4mNjsgfQogCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbnRlcnByaXNlLW9pZCBvciAtLWRpc2FibGUtZW50ZXJwcmlzZS1vaWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZW50ZXJwcmlzZV9vaWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2VudGVycHJpc2Vfb2lkIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1vaWQvLS13aXRob3V0LWVudGVycHJpc2Utb2lkIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLW9pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1vaWQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVudGVycHJpc2Utb2lkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2VudGVycHJpc2Vfb2lkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZW50ZXJwcmlzZV9vaWQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLW9pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1vaWQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZCBvciAtLXdpdGhvdXQtZW50ZXJwcmlzZS1zeXNvaWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2VudGVycHJpc2Vfc3lzb2lkK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2VudGVycHJpc2Vfc3lzb2lkIgogCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9lbnRlcnByaXNlX3N5c29pZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZW50ZXJwcmlzZV9zeXNvaWQ7CiAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07CisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlICIgIiRMSU5FTk8iIDU7CiAgIGZpCiAgIHN5c19vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLycgfCBzZWQgJ3MvXC4vXCwvZydgCiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKQEAgLTMxMDcsMzIgKzQ4OTIsMjggQEAKICNkZWZpbmUgTkVUU05NUF9TWVNURU1fRE9UX01JQl9MRU5HVEggJHN5c29pZF9sZW4KIF9BQ0VPRgogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGVudGVycHJpc2Ugc3lzT0lEICR3aXRodmFsIC4uLi4iID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZW50ZXJwcmlzZSBzeXNPSUQgJHdpdGh2YWwgLi4uLiIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBlbnRlcnByaXNlIHN5c09JRCAkd2l0aHZhbCAuLi4uIiA+JjUKKyRhc19lY2hvICJ1c2luZyBlbnRlcnByaXNlIHN5c09JRCAkd2l0aHZhbCAuLi4uIiA+JjY7IH0KIAogZWxzZQogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgZW50ZXJwcmlzZSBzeXNPSUQgXCJORVQtU05NUC1NSUI6Om5ldFNubXBBZ2VudE9JRHMuLi5cIiIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBkZWZhdWx0IGVudGVycHJpc2Ugc3lzT0lEIFwiTkVULVNOTVAtTUlCOjpuZXRTbm1wQWdlbnRPSURzLi4uXCIiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBlbnRlcnByaXNlIHN5c09JRCBcIk5FVC1TTk1QLU1JQjo6bmV0U25tcEFnZW50T0lEcy4uLlwiIiA+JjUKKyRhc19lY2hvICJ1c2luZyBkZWZhdWx0IGVudGVycHJpc2Ugc3lzT0lEIFwiTkVULVNOTVAtTUlCOjpuZXRTbm1wQWdlbnRPSURzLi4uXCIiID4mNjsgfQogCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbnRlcnByaXNlLXN5c29pZCBvciAtLWRpc2FibGUtZW50ZXJwcmlzZS1zeXNvaWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZW50ZXJwcmlzZV9zeXNvaWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2VudGVycHJpc2Vfc3lzb2lkIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQvLS13aXRob3V0LWVudGVycHJpc2Utc3lzb2lkIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1zeXNvaWQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVudGVycHJpc2Utc3lzb2lkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2VudGVycHJpc2Vfc3lzb2lkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZW50ZXJwcmlzZV9zeXNvaWQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1zeXNvaWQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgb3IgLS13aXRob3V0LWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2VudGVycHJpc2Vfbm90aWZpY2F0aW9uX29pZCIKIAorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2VudGVycHJpc2Vfbm90aWZpY2F0aW9uX29pZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkOwogICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OworICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSAiICIkTElORU5PIiA1OwogICBmaQogICBub3RpZmljYXRpb25fb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nIHwgc2VkICdzL1wuL1wsL2cnYAogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC0zMTQ5LDgzICs0OTMwLDMxIEBACiAjZGVmaW5lIE5FVFNOTVBfTk9USUZJQ0FUSU9OX0RPVF9NSUJfTEVOR1RIICRub3RpZmljYXRpb25vaWRfbGVuCiBfQUNFT0YKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBlbnRlcnByaXNlIG5vdGlmaWNhdGlvbnMgJHdpdGh2YWwiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZW50ZXJwcmlzZSBub3RpZmljYXRpb25zICR3aXRodmFsIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGVudGVycHJpc2Ugbm90aWZpY2F0aW9ucyAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAidXNpbmcgZW50ZXJwcmlzZSBub3RpZmljYXRpb25zICR3aXRodmFsIiA+JjY7IH0KIAogZWxzZQogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgbm90aWZpY2F0aW9ucyBcIk5FVC1TTk1QLU1JQjo6bmV0U25tcE5vdGlmaWNhdGlvbnNcIiIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBkZWZhdWx0IG5vdGlmaWNhdGlvbnMgXCJORVQtU05NUC1NSUI6Om5ldFNubXBOb3RpZmljYXRpb25zXCIiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZGVmYXVsdCBub3RpZmljYXRpb25zIFwiTkVULVNOTVAtTUlCOjpuZXRTbm1wTm90aWZpY2F0aW9uc1wiIiA+JjUKKyRhc19lY2hvICJ1c2luZyBkZWZhdWx0IG5vdGlmaWNhdGlvbnMgXCJORVQtU05NUC1NSUI6Om5ldFNubXBOb3RpZmljYXRpb25zXCIiID4mNjsgfQogCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgb3IgLS1kaXNhYmxlLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2VudGVycHJpc2Vfbm90aWZpY2F0aW9uX29pZCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQvLS13aXRob3V0LWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0jCi0jIENhdGNoIGNvbW1vbiBtaXN0YWtlcyBpbiBjb25maWd1cmUgb3B0aW9ucwotIworZmkKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWItbW9kdWxlIG9yIC0td2l0aG91dC1taWItbW9kdWxlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taWJfbW9kdWxlK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pYl9tb2R1bGUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjEuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uMS4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW9kdWxlIG9yIC0td2l0aG91dC1tb2R1bGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21vZHVsZStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9tb2R1bGUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjMuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uMy4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW9kdWxlcyBvciAtLXdpdGhvdXQtbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9tb2R1bGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb240LiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjQuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQvLS13aXRob3V0LWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1taWItbW9kdWxlIG9yIC0td2l0aG91dC1vdXQtbWliLW1vZHVsZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfb3V0X21pYl9tb2R1bGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfb3V0X21pYl9tb2R1bGUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjUuIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjUuIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtbW9kdWxlcyBvciAtLXdpdGhvdXQtb3V0LW1vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX291dF9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX291dF9tb2R1bGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb243LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb243LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisjIworIyAgIFByb2plY3Q6IFBlcmwgc2V0dGluZ3MKKyMjCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LW1vZHVsZSBvciAtLXdpdGhvdXQtb3V0LW1vZHVsZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfb3V0X21vZHVsZStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9vdXRfbW9kdWxlIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb244LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb244LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKLSMKLSMgUGVybCBzcGVjaWZpYwotIwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBlcmwtbW9kdWxlcyBvciAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wZXJsX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcGVybF9tb2R1bGVzIgotCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBlcmwtbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGVybF9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wZXJsX21vZHVsZXM7CiAgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgogICAgICAgaW5zdGFsbF9wZXJsPSJubyIKICAgICBlbHNlCkBAIC0zMjM3LDU2ICs0OTY2LDQ5IEBACiAKIGVsc2UKICAgaW5zdGFsbF9wZXJsPSJ0cnkiCi1maTsKK2ZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIG9yIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2VtYmVkZGVkX3Blcmwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2VtYmVkZGVkX3BlcmwiCi0gIGVtYmVkX3Blcmw9IiRlbmFibGV2YWwiCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGVybC1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BlcmxfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BlcmxfbW9kdWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcmwtbW9kdWxlcy8tLXdpdGhvdXQtcGVybC1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2VtYmVkZGVkX3Blcmwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lbWJlZGRlZF9wZXJsOyBlbWJlZF9wZXJsPSIkZW5hYmxldmFsIgogZWxzZQogICBlbWJlZF9wZXJsPSJ0cnkiCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcmwtY2MtY2hlY2tzIG9yIC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wZXJsX2NjX2NoZWNrcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcGVybF9jY19jaGVja3MiCi0KLWZpOwotCi0jIENvbW1vbiBwZXJsIG1pc3Rha2VzCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGVybC1tb2R1bGVzIG9yIC0tZGlzYWJsZS1wZXJsLW1vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcGVybF9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9wZXJsX21vZHVsZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJsLW1vZHVsZXMvLS13aXRob3V0LXBlcmwtbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVybC1tb2R1bGVzLy0td2l0aG91dC1wZXJsLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWVtYmVkZGVkLXBlcmwgb3IgLS13aXRob3V0LWVtYmVkZGVkLXBlcmwgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2VtYmVkZGVkX3Blcmwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZW1iZWRkZWRfcGVybCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZW1iZWRkZWQtcGVybC8tLWRpc2FibGUtZW1iZWRkZWQtcGVybCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsLy0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZXJsLWNjLWNoZWNrcyBvciAtLXdpdGhvdXQtcGVybC1jYy1jaGVja3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BlcmxfY2NfY2hlY2tzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3BlcmxfY2NfY2hlY2tzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1wZXJsLWNjLWNoZWNrcy8tLWRpc2FibGUtcGVybC1jYy1jaGVja3MgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcGVybC1jYy1jaGVja3MvLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKK2ZpCiAKIAotIwotIyBQeXRob24gc3BlY2lmaWMKLSMKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW1iZWRkZWQtcGVybCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW1iZWRkZWRfcGVybCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZW1iZWRkZWRfcGVybDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZW1iZWRkZWQtcGVybC8tLWRpc2FibGUtZW1iZWRkZWQtcGVybCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1weXRob24tbW9kdWxlcyBvciAtLXdpdGhvdXQtcHl0aG9uLW1vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3B5dGhvbl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3B5dGhvbl9tb2R1bGVzIgogCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGVybC1jYy1jaGVja3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGVybF9jY19jaGVja3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wZXJsX2NjX2NoZWNrczsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZXJsLWNjLWNoZWNrcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGVybF9jY19jaGVja3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BlcmxfY2NfY2hlY2tzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1wZXJsLWNjLWNoZWNrcy8tLWRpc2FibGUtcGVybC1jYy1jaGVja3MgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIworIyAgIFByb2plY3Q6IFB5dGhvbiBzZXR0aW5ncworIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXB5dGhvbi1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9weXRob25fbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcHl0aG9uX21vZHVsZXM7CiAgICAgaW5zdGFsbF9weXRob249InllcyIKICAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgogICAgICAgUFlUSE9OQVJHUz0iIgpAQCAtMzI5OSwyMDcgKzUwMjEsNjM1IEBACiAKIGVsc2UKICAgaW5zdGFsbF9weXRob249Im5vIgotZmk7Ci0KLSMgb3RoZXIgZmxhZ3MKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZXJ2ZXItc2VuZC1idWYgb3IgLS13aXRob3V0LXNlcnZlci1zZW5kLWJ1ZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc2VydmVyX3NlbmRfYnVmK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NlcnZlcl9zZW5kX2J1ZiIKIAorIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5IHNldHRpbmdzCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2VydmVyLXNlbmQtYnVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zZXJ2ZXJfc2VuZF9idWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NlcnZlcl9zZW5kX2J1ZjsKICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciBzZW5kIGJ1ZmZlciAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHNlbmQgYnVmZmVyICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgc2VuZCBidWZmZXIgIiAiJExJTkVOTyIgNQogICAgZmkKICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9TRU5EX0JVRiAkd2l0aHZhbAogX0FDRU9GCiAKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0cyIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzIiA+JjYKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNlcnZlci1zZW5kLWJ1ZiBvciAtLWRpc2FibGUtc2VydmVyLXNlbmQtYnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NlcnZlcl9zZW5kX2J1ZitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc2VydmVyX3NlbmRfYnVmIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VydmVyLXNlbmQtYnVmLy0td2l0aG91dC1zZXJ2ZXItc2VuZC1idWYgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlcnZlci1zZW5kLWJ1Zi8tLXdpdGhvdXQtc2VydmVyLXNlbmQtYnVmIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHMiID4mNQorJGFzX2VjaG8gInVzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHMiID4mNjsgfQorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNlcnZlci1zZW5kLWJ1ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zZXJ2ZXJfc2VuZF9idWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zZXJ2ZXJfc2VuZF9idWY7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZXJ2ZXItc2VuZC1idWYvLS13aXRob3V0LXNlcnZlci1zZW5kLWJ1ZiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNlcnZlci1yZWN2LWJ1ZiBvciAtLXdpdGhvdXQtc2VydmVyLXJlY3YtYnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zZXJ2ZXJfcmVjdl9idWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc2VydmVyX3JlY3ZfYnVmIgogCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNlcnZlci1yZWN2LWJ1ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc2VydmVyX3JlY3ZfYnVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zZXJ2ZXJfcmVjdl9idWY7CiAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciByZWN2IGJ1ZmZlciAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHJlY3YgYnVmZmVyICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgcmVjdiBidWZmZXIgIiAiJExJTkVOTyIgNQogICBmaQogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfUkVDVl9CVUYgJHdpdGh2YWwKIF9BQ0VPRgogCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHMiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0cyIgPiY2Ci1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZXJ2ZXItcmVjdi1idWYgb3IgLS1kaXNhYmxlLXNlcnZlci1yZWN2LWJ1ZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zZXJ2ZXJfcmVjdl9idWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NlcnZlcl9yZWN2X2J1ZiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlcnZlci1yZWN2LWJ1Zi8tLXdpdGhvdXQtc2VydmVyLXJlY3YtYnVmIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZXJ2ZXItcmVjdi1idWYvLS13aXRob3V0LXNlcnZlci1yZWN2LWJ1ZiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzIiA+JjUKKyRhc19lY2hvICJ1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzIiA+JjY7IH0KK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZXJ2ZXItcmVjdi1idWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2VydmVyX3JlY3ZfYnVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2VydmVyX3JlY3ZfYnVmOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VydmVyLXJlY3YtYnVmLy0td2l0aG91dC1zZXJ2ZXItcmVjdi1idWYgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jbGllbnQtc2VuZC1idWYgb3IgLS13aXRob3V0LWNsaWVudC1zZW5kLWJ1ZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfY2xpZW50X3NlbmRfYnVmK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2NsaWVudF9zZW5kX2J1ZiIKIAorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jbGllbnQtc2VuZC1idWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NsaWVudF9zZW5kX2J1ZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY2xpZW50X3NlbmRfYnVmOwogICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgc2VuZCBidWZmZXIgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCBzZW5kIGJ1ZmZlciAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHNlbmQgYnVmZmVyICIgIiRMSU5FTk8iIDUKICAgZmkKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1NFTkRfQlVGICR3aXRodmFsCiBfQUNFT0YKIAogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHMiID4mNgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY2xpZW50LXNlbmQtYnVmIG9yIC0tZGlzYWJsZS1jbGllbnQtc2VuZC1idWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfY2xpZW50X3NlbmRfYnVmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9jbGllbnRfc2VuZF9idWYiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jbGllbnQtc2VuZC1idWYvLS13aXRob3V0LWNsaWVudC1zZW5kLWJ1ZiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY2xpZW50LXNlbmQtYnVmLy0td2l0aG91dC1jbGllbnQtc2VuZC1idWYgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0cyIgPiY1CiskYXNfZWNobyAidXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0cyIgPiY2OyB9CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY2xpZW50LXNlbmQtYnVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NsaWVudF9zZW5kX2J1ZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2NsaWVudF9zZW5kX2J1ZjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNsaWVudC1zZW5kLWJ1Zi8tLXdpdGhvdXQtY2xpZW50LXNlbmQtYnVmIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2xpZW50LXJlY3YtYnVmIG9yIC0td2l0aG91dC1jbGllbnQtcmVjdi1idWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2NsaWVudF9yZWN2X2J1ZitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9jbGllbnRfcmVjdl9idWYiCiAKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2xpZW50LXJlY3YtYnVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jbGllbnRfcmVjdl9idWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2NsaWVudF9yZWN2X2J1ZjsKICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHJlY3YgYnVmZmVyICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgcmVjdiBidWZmZXIgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCByZWN2IGJ1ZmZlciAiICIkTElORU5PIiA1CiAgIGZpCiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9SRUNWX0JVRiAkd2l0aHZhbAogX0FDRU9GCiAKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0cyIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzIiA+JjYKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNsaWVudC1yZWN2LWJ1ZiBvciAtLWRpc2FibGUtY2xpZW50LXJlY3YtYnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2NsaWVudF9yZWN2X2J1ZitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfY2xpZW50X3JlY3ZfYnVmIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY2xpZW50LXJlY3YtYnVmLy0td2l0aG91dC1jbGllbnQtcmVjdi1idWYgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNsaWVudC1yZWN2LWJ1Zi8tLXdpdGhvdXQtY2xpZW50LXJlY3YtYnVmIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHMiID4mNQorJGFzX2VjaG8gInVzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHMiID4mNjsgfQorZmkKIAotIwotIyBvdGhlcndpc2UgcHJvbXB0ZWQgaW5mb3JtYXRpb24KLSMKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jbGllbnQtcmVjdi1idWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY2xpZW50X3JlY3ZfYnVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY2xpZW50X3JlY3ZfYnVmOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY2xpZW50LXJlY3YtYnVmLy0td2l0aG91dC1jbGllbnQtcmVjdi1idWYgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdHMgb3IgLS13aXRob3V0LWRlZmF1bHRzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9kZWZhdWx0cytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9kZWZhdWx0cyIKLSAgZGVmYXVsdHM9InllcyIKKworIyMKKyMgICBTeXN0ZW06IGxpYnJhcnkgc2V0dGluZ3MgIChtb3JlKQorIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVsZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZWxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbGY7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZWxmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2VsZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2VsZjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVsZi8tLXdpdGhvdXQtZWxmIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ubCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbmwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX25sOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5sIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25sK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmw7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1ubC8tLXdpdGhvdXQtbmwgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYndyYXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpYndyYXArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xpYndyYXA7CiBlbHNlCi0gIGRlZmF1bHRzPSJubyIKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlZmF1bHRzIG9yIC0tZGlzYWJsZS1kZWZhdWx0cyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZWZhdWx0cytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZGVmYXVsdHMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kZWZhdWx0cy8tLXdpdGhvdXQtZGVmYXVsdHMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRlZmF1bHRzLy0td2l0aG91dC1kZWZhdWx0cyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisgIHdpdGhfbGlid3JhcD0ibm8iCitmaQogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBvciAtLWRpc2FibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5IgorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYndyYXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGlid3JhcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYndyYXA7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1saWJ3cmFwLy0td2l0aG91dC1saWJ3cmFwIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCi1maTsKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IG9yIC0td2l0aG91dC11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF91Y2Rfc25tcF9jb21wYXRpYmlsaXR5K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkvLS1kaXNhYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eS8tLWRpc2FibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtemxpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfemxpYitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfemxpYjsKK2Vsc2UKKyAgd2l0aF96bGliPSJubyIKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS16bGliIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3psaWIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV96bGliOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtemxpYi8tLXdpdGhvdXQtemxpYiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnppcDIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2J6aXAyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9iemlwMjsKK2Vsc2UKKyAgd2l0aF9iemlwMj0ibm8iCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tbnR0YWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21udHRhYitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbW50dGFiOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1udHRhYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tbnR0YWIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tbnR0YWI7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1tbnR0YWIvLS13aXRob3V0LW1udHRhYiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIworIyAgIFByb2plY3Q6IG15c3FsCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbXlzcWwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX215c3FsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9teXNxbDsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1teXNxbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9teXNxbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX215c3FsOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbXlzcWwvLS13aXRob3V0LW15c3FsIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JHdpdGhfbXlzcWwiID0gInh5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX01ZU1FMIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIC0qLSBhdXRvY29uZiAtKi0KICMKLSMgc2V0dXAgaW5zdGFsbCB0YXJnZXRzCisjIFByb21wdCBmb3IgdmFyaW91cyBiaXRzIG9mIHVzZXIgaW5mb3JtYXRpb24KICMKLWlmIHRlc3QgIngkZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkiID0gInh5ZXMiIDsgdGhlbgotICBpbnN0YWxsdWNkaGVhZGVycz1pbnN0YWxsdWNkaGVhZGVycwotICBpbnN0YWxsdWNkbGlicz1pbnN0YWxsdWNkbGlicwogCi0gIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKLSAgVUNELVNOTVAgY29tcGF0YWJpbGl0eTogICAgIGVuYWJsZWQKLUVPRgoraWYgdGVzdCAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPSAieCI7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBwcm9tcHQgZm9yIHZhbHVlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHByb21wdCBmb3IgdmFsdWVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hhdmVfd2FybmVkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKIAoraWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OgorCisJICoqKioqKioqKioqKioqIENvbmZpZ3VyYXRpb24gU2VjdGlvbiAqKioqKioqKioqKioqKgorCisJWW91IGFyZSBhYm91dCB0byBiZSBwcm9tcHRlZCB3aXRoIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucy4gIEFuc3dlcgordGhlbSBjYXJlZnVsbHksIGFzIHRoZXkgZGV0ZXJtaW5lIGhvdyB0aGUgU05NUCBhZ2VudCBhbmQgcmVsYXRlZAorYXBwbGljYXRpb25zIGFyZSB0byBmdW5jdGlvbi4KKworCUFmdGVyIHRoZSBjb25maWd1cmUgc2NyaXB0IGZpbmlzaGVzLCB5b3UgY2FuIGJyb3dzZSB0aGUgbmV3bHkKK2NyZWF0ZWQgbmV0LXNubXAtY29uZmlnLmggZmlsZSBmb3IgZnVydGhlciAtIGxlc3MgaW1wb3J0YW50IC0gcGFyYW1ldGVycyB0bworbW9kaWZ5LiAgQmUgY2FyZWZ1bCBpZiB5b3UgcmUtcnVuIGNvbmZpZ3VyZSB0aG91Z2gsIHNpbmNlIG5ldC1zbm1wLWNvbmZpZy5oCit3aWxsIGJlIG92ZXJ3cml0dGVuLgorCistUHJlc3MgcmV0dXJuIHRvIGNvbnRpbnVlLQorIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6CisKKwkgKioqKioqKioqKioqKiogQ29uZmlndXJhdGlvbiBTZWN0aW9uICoqKioqKioqKioqKioqCisKKwlZb3UgYXJlIGFib3V0IHRvIGJlIHByb21wdGVkIHdpdGggYSBzZXJpZXMgb2YgcXVlc3Rpb25zLiAgQW5zd2VyCit0aGVtIGNhcmVmdWxseSwgYXMgdGhleSBkZXRlcm1pbmUgaG93IHRoZSBTTk1QIGFnZW50IGFuZCByZWxhdGVkCithcHBsaWNhdGlvbnMgYXJlIHRvIGZ1bmN0aW9uLgorCisJQWZ0ZXIgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZmluaXNoZXMsIHlvdSBjYW4gYnJvd3NlIHRoZSBuZXdseQorY3JlYXRlZCBuZXQtc25tcC1jb25maWcuaCBmaWxlIGZvciBmdXJ0aGVyIC0gbGVzcyBpbXBvcnRhbnQgLSBwYXJhbWV0ZXJzIHRvCittb2RpZnkuICBCZSBjYXJlZnVsIGlmIHlvdSByZS1ydW4gY29uZmlndXJlIHRob3VnaCwgc2luY2UgbmV0LXNubXAtY29uZmlnLmgKK3dpbGwgYmUgb3ZlcndyaXR0ZW4uCisKKy1QcmVzcyByZXR1cm4gdG8gY29udGludWUtCisiID4mNjt9CisKK3JlYWQgdG1waW5wdXQgPCY3CithY19jdl9oYXZlX3dhcm5lZD0ieWVzIgorZWxzZQorICBhY19jdl9oYXZlX3dhcm5lZD0ibm8iCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXZlX3dhcm5lZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhdmVfd2FybmVkIiA+JjY7IH0KK2Vsc2UKKyAgYWNfY3ZfaGF2ZV93YXJuZWQ9InllcyIKK2ZpCisKK01FPWAkV0hPQU1JYAoraWYgdGVzdCAtZiAvZXRjL3Jlc29sdi5jb25mOyB0aGVuCisgIExPQz1gYXdrICcvXmRvbWFpbi97bG9jPSRORn1FTkR7cHJpbnQgbG9jfScgL2V0Yy9yZXNvbHYuY29uZmAKK2ZpCitpZiB0ZXN0ICJ4JExPQyIgPSB4OyB0aGVuCisgIExPQz0iQG5vLndoZXJlIgogZmkKIAogCitNU0dfQ0hFQ0s9IkRlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZSIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBlY2hvICIiID4mNgogCi0jIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgotaWYgdGVzdCAieCR3aXRoX3Jvb3RfYWNjZXNzIiA9ICJ4bm8iOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MgMQoraWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgorZWNobyAkRUNIT19OICIKKworKioqIERlZmF1bHQgU05NUCBWZXJzaW9uOgorCisJU3RhcnRpbmcgd2l0aCBOZXQtU05NUCA1LjAsIHlvdSBjYW4gY2hvb3NlIHRoZSBkZWZhdWx0IHZlcnNpb24gb2YKK3RoZSBTTk1QIHByb3RvY29sIHRvIHVzZSB3aGVuIG5vIHZlcnNpb24gaXMgZ2l2ZW4gZXhwbGljaXRseSBvbiB0aGUKK2NvbW1hbmQgbGluZSwgb3IgdmlhIGFuICdzbm1wLmNvbmYnIGZpbGUuICBJbiB0aGUgcGFzdCB0aGlzIHdhcyBzZXQgdG8KK1NOTVB2MSwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgdG8gc3dpdGNoIHRvIFNOTVB2MyBpZiBkZXNpcmVkLiAgU05NUHYzCit3aWxsIHByb3ZpZGUgYSBtb3JlIHNlY3VyZSBtYW5hZ2VtZW50IGVudmlyb25tZW50IChhbmQgdGh1cyB5b3UncmUKK2VuY291cmFnZWQgdG8gc3dpdGNoIHRvIFNOTVB2MyksIGJ1dCBtYXkgYnJlYWsgZXhpc3Rpbmcgc2NyaXB0cyB0aGF0CityZWx5IG9uIHRoZSBvbGQgYmVoYXZpb3VyLiAgKFRob3VnaCBzdWNoIHNjcmlwdHMgd2lsbCBwcm9iYWJseSBuZWVkIHRvCitiZSBjaGFuZ2VkIHRvIHVzZSB0aGUgJy1jJyBjb21tdW5pdHkgZmxhZyBhbnl3YXksIGFzIHRoZSBTTk1QdjEKK2NvbW1hbmQgbGluZSB1c2FnZSBoYXMgY2hhbmdlZCBhcyB3ZWxsLikuCisgICBBdCB0aGlzIHByb21wdCB5b3UgY2FuIHNlbGVjdCBcIjFcIiwgXCIyXCIgKGZvciBTTk1QdjJjKSwgb3IgXCIzXCIgYXMKK3RoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBjb21tYW5kIHRvb2xzIChzbm1wZ2V0LCAuLi4pIHRvIHVzZS4gIFRoaXMKK2NhbiBhbHdheXMgYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lIHVzaW5nIHRoZSAtdiBmbGFnIHRvIHRoZSB0b29scywgb3IKK2J5IHVzaW5nIHRoZSBcImRlZlZlcnNpb25cIiB0b2tlbiBpbiB5b3VyIHNubXAuY29uZiBmaWxlLgorICAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249XCJ4XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCit3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitEZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2UgKDMpOiAkRUNIT19DIgorcmVhZCB0bXBpbnB1dCA8JjcKK2lmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiMyIgIT0gIiI7IHRoZW4KKyAgdG1waW5wdXQ9IjMiCitmaQorZXZhbCBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPVwiJHRtcGlucHV0XCIKK2Vsc2UKK3RtcGlucHV0PSIzIgorZXZhbCBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPVwiJHRtcGlucHV0XCIKK2ZpCisKK2V2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj1cJE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04KK2VjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICJub25lIjsgdGhlbgorICBpZiB0ZXN0ICJ4dW5xdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4dW5xdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIKIF9BQ0VPRgogCi1maQotCi0jIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgotaWYgdGVzdCAieCR3aXRoX2ttZW1fdXNhZ2UiID0gInhubyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9OT19LTUVNX1VTQUdFIDEKKyAgZWxzZQorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTgogX0FDRU9GCiAKKyAgZmkKIGZpCiAKLSMgRGVmaW5lIHVubGVzcyBzcGVjaWZpY2FsbHkgc3VwcHJlc3NlZCAoaS5lLiwgb3B0aW9uIGRlZmF1bHRzIHRvIGZhbHNlKS4KLWlmIHRlc3QgIngkd2l0aF9kdW1teV92YWx1ZXMiICE9ICJ4eWVzIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUyAxCisKKyMgd2UgdGVzdGVkIHRoaXMgYWJvdmUgYmVmb3JlIHRoZSBwcm9tcHQsIGJ1dCB0aGUgcHJvbXB0IG1heSBnaXZlIGEgbmV3IHZhbHVlLgorY2FzZSAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OfSIgaW4KKyAgWzEyM10pIDs7CisgIDJjKSBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPTIgOzsKKyAgKikKKyAgICBhc19mbl9lcnJvciAkPyAiSWxsZWdhbCB2ZXJzaW9uIG51bWJlci4gIE9ubHkgMSwgMiAoZm9yIFNOTVB2MmMpIGFuZCAzIGFyZSBzdXBwb3J0ZWQuIiAiJExJTkVOTyIgNQorICAgIDs7Citlc2FjCisKKworTVNHX0NIRUNLPSJTeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbiIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBlY2hvICIiID4mNgorCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCitlY2hvICRFQ0hPX04gIgorCisqKiogU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb246CisKKwlEZXNjcmliZXMgd2hvIHNob3VsZCBiZSBjb250YWN0ZWQgYWJvdXQgdGhlIGhvc3QgdGhlIGFnZW50IGlzCitydW5uaW5nIG9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgVGhpcworY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlIFwic3lzY29udGFjdFwiIHN5bnRheCBpbiB0aGUgYWdlbnQncworY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWNvbnRhY3Q9XCJjb250YWN0XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCit3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitTeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbiAoJE1FQCRMT0MpOiAkRUNIT19DIgorcmVhZCB0bXBpbnB1dCA8JjcKK2lmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJE1FQCRMT0MiICE9ICIiOyB0aGVuCisgIHRtcGlucHV0PSIkTUVAJExPQyIKK2ZpCitldmFsIE5FVFNOTVBfU1lTX0NPTlRBQ1Q9XCIkdG1waW5wdXRcIgorZWxzZQordG1waW5wdXQ9IiRNRUAkTE9DIgorZXZhbCBORVRTTk1QX1NZU19DT05UQUNUPVwiJHRtcGlucHV0XCIKK2ZpCisKK2V2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVD1cJE5FVFNOTVBfU1lTX0NPTlRBQ1QKK2VjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiICE9ICJub25lIjsgdGhlbgorICBpZiB0ZXN0ICJ4cXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfU1lTX0NPTlRBQ1QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIgogX0FDRU9GCiAKLWZpCi0KLSMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCi1pZiB0ZXN0ICJ4JHdpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMiICE9ICJ4bm8iOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUyAxCisgIGVsc2UKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfU1lTX0NPTlRBQ1QgJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QKIF9BQ0VPRgogCisgIGZpCiBmaQogCiAKLSMgb3ZlcmZsb3cgcHJvYmxlbXMgd2l0aCBocHV4J3Mgc2gKLSMgdGFrZW4gZnJvbSBQZXJsJ3MgQ29uZmlndXJlIHNjcmlwdAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgSSBuZWVkIHRvIGZlZWQgbXlzZWxmIHRvIGtzaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIEkgbmVlZCB0byBmZWVkIG15c2VsZiB0byBrc2guLi4gJEVDSE9fQyIgPiY2CitNU0dfQ0hFQ0s9IlN5c3RlbSBMb2NhdGlvbiIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGVjaG8gIiIgPiY2CisKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK2VjaG8gJEVDSE9fTiAiCisKKyoqKiBTeXN0ZW0gTG9jYXRpb246CisKKwlEZXNjcmliZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0uICBUaGlzIGluZm9ybWF0aW9uIGlzCithdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgdGhpcyBjYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUKK1wic3lzbG9jYXRpb25cIiBzeW50YXggaW4gdGhlIGFnZW50J3MgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWxvY2F0aW9uPVwibG9jYXRpb25cIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKK3dpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK1N5c3RlbSBMb2NhdGlvbiAoVW5rbm93bik6ICRFQ0hPX0MiCityZWFkIHRtcGlucHV0IDwmNworaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICJVbmtub3duIiAhPSAiIjsgdGhlbgorICB0bXBpbnB1dD0iVW5rbm93biIKK2ZpCitldmFsIE5FVFNOTVBfU1lTX0xPQz1cIiR0bXBpbnB1dFwiCitlbHNlCit0bXBpbnB1dD0iVW5rbm93biIKK2V2YWwgTkVUU05NUF9TWVNfTE9DPVwiJHRtcGlucHV0XCIKK2ZpCisKK2V2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DPVwkTkVUU05NUF9TWVNfTE9DCitlY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiAhPSAibm9uZSI7IHRoZW4KKyAgaWYgdGVzdCAieHF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInhxdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX1NZU19MT0MgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiCitfQUNFT0YKKworICBlbHNlCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX1NZU19MT0MgJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQworX0FDRU9GCisKKyAgZmkKK2ZpCisKKworaWYgdGVzdCAtZCAvdmFyL2xvZzsgdGhlbgorICBkZWZhdWx0bG9nPSIvdmFyL2xvZy9zbm1wZC5sb2ciCitlbHNlCisgIGRlZmF1bHRsb2c9Ii91c3IvYWRtL3NubXBkLmxvZyIKK2ZpCisKKworTVNHX0NIRUNLPSJMb2NhdGlvbiB0byB3cml0ZSBsb2dmaWxlIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZWNobyAiIiA+JjYKKworaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgorZWNobyAkRUNIT19OICIKKworKioqIExvZ2ZpbGUgbG9jYXRpb246CisKKwlFbnRlciB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhlIHNubXBkIGFnZW50IHRvIGR1bXAKK2luZm9ybWF0aW9uICYgZXJyb3JzIHRvLiAgSWYgbm90IGRlZmluZWQgKGVudGVyIHRoZSBrZXl3b3JkIFwibm9uZVwiCithdCB0aGUgcHJvbXB0IGJlbG93KSB0aGUgYWdlbnQgd2lsbCB1c2Ugc3Rkb3V0IGFuZCBzdGRlcnIgaW5zdGVhZC4KKyhOb3RlOiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVyLXJpZGRlbiB1c2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucy4pCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLWxvZ2ZpbGU9XCJwYXRoXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCit3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitMb2NhdGlvbiB0byB3cml0ZSBsb2dmaWxlICgkZGVmYXVsdGxvZyk6ICRFQ0hPX0MiCityZWFkIHRtcGlucHV0IDwmNworaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIkZGVmYXVsdGxvZyIgIT0gIiI7IHRoZW4KKyAgdG1waW5wdXQ9IiRkZWZhdWx0bG9nIgorZmkKK2V2YWwgTkVUU05NUF9MT0dGSUxFPVwiJHRtcGlucHV0XCIKK2Vsc2UKK3RtcGlucHV0PSIkZGVmYXVsdGxvZyIKK2V2YWwgTkVUU05NUF9MT0dGSUxFPVwiJHRtcGlucHV0XCIKK2ZpCisKK2V2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPVwkTkVUU05NUF9MT0dGSUxFCitlY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiAhPSAibm9uZSI7IHRoZW4KKyAgaWYgdGVzdCAieHF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInhxdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX0xPR0ZJTEUgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiCitfQUNFT0YKKworICBlbHNlCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX0xPR0ZJTEUgJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRQorX0FDRU9GCisKKyAgZmkKK2ZpCisKKworaWYgdGVzdCAtZCAvdmFyOyB0aGVuCisgIGRlZmF1bHRzdG9yZT0iL3Zhci9uZXQtc25tcCIKKyAgdWNkZGVmYXVsdHN0b3JlPSIvdmFyL3VjZC1zbm1wIgorZWxzZQorICBkZWZhdWx0c3RvcmU9Ii9ldGMvbmV0LXNubXAiCisgIHVjZGRlZmF1bHRzdG9yZT0iL2V0Yy91Y2Qtc25tcCIKK2ZpCisKKworTVNHX0NIRUNLPSJMb2NhdGlvbiB0byB3cml0ZSBwZXJzaXN0ZW50IGluZm9ybWF0aW9uIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGVjaG8gIiIgPiY2CisKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK2VjaG8gJEVDSE9fTiAiCisKKyoqKiBzbm1wZCBwZXJzaXN0ZW50IHN0b3JhZ2UgbG9jYXRpb246CisKKwlFbnRlciBhIGRpcmVjdG9yeSBmb3IgdGhlIFNOTVAgbGlicmFyeSB0byBzdG9yZSBwZXJzaXN0ZW50CitkYXRhIGluIHRoZSBmb3JtIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBkZWZhdWx0IGxvY2F0aW9uIGlzCitkaWZmZXJlbnQgdGhhbiB0aGUgb2xkIGRlZmF1bHQgbG9jYXRpb24gKHdoaWNoIHdhcyBmb3IgdWNkLXNubXApLiAgSWYKK3lvdSBzdGF5IHdpdGggdGhlIG5ldyBwYXRoLCBJJ2xsIGFzayB5b3UgaW4gYSBzZWNvbmQgaWYgeW91IHdpc2ggdG8KK2NvcHkgeW91ciBmaWxlcyBvdmVyIHRvIHRoZSBuZXcgbG9jYXRpb24gKG9uY2Ugb25seSkuICBJZiB5b3UgcGljaworc29tZSBvdGhlciBwYXRoIHRoYW4gdGhlIGRlZmF1bHQsIHlvdSdsbCBoYXZlIHRvIGNvcHkgdGhlbSB5b3Vyc2VsZi4KK1RoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBwaWNraW5nIHRoZSBvbGQgcGF0aCAoJHVjZGRlZmF1bHRzdG9yZSkgaWYKK3lvdSdkIHJhdGhlci4KKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9XCJwYXRoXCIgcGFyYW1ldGVyIHRvCisuL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitMb2NhdGlvbiB0byB3cml0ZSBwZXJzaXN0ZW50IGluZm9ybWF0aW9uICgkZGVmYXVsdHN0b3JlKTogJEVDSE9fQyIKK3JlYWQgdG1waW5wdXQgPCY3CitpZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiRkZWZhdWx0c3RvcmUiICE9ICIiOyB0aGVuCisgIHRtcGlucHV0PSIkZGVmYXVsdHN0b3JlIgorZmkKK2V2YWwgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT1cIiR0bXBpbnB1dFwiCitlbHNlCit0bXBpbnB1dD0iJGRlZmF1bHRzdG9yZSIKK2V2YWwgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT1cIiR0bXBpbnB1dFwiCitmaQorCitldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9XCRORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZCitlY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkiID4mNQorJGFzX2VjaG8gIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZIiAhPSAibm9uZSI7IHRoZW4KKyAgaWYgdGVzdCAieHF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInhxdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSIKK19BQ0VPRgorCisgIGVsc2UKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkgJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkKK19BQ0VPRgorCisgIGZpCitmaQorCisKK1BFUlNJU1RFTlRfRElSRUNUT1JZPSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZCisKK1VDRFBFUlNJU1RFTlRfRElSRUNUT1JZPSR1Y2RkZWZhdWx0c3RvcmUKKworCitpZiB0ZXN0ICRQRVJTSVNURU5UX0RJUkVDVE9SWSA9ICIkZGVmYXVsdHN0b3JlIiAtYSAtZCAiJHVjZGRlZmF1bHRzdG9yZSIgLWEgISAtZCAiJGRlZmF1bHRzdG9yZSIgOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIElmIHdlIHNob3VsZCBjb3B5IHRoZSBvbGQgcGVyc2lzdGVudCBkaXJlY3RvcnkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgSWYgd2Ugc2hvdWxkIGNvcHkgdGhlIG9sZCBwZXJzaXN0ZW50IGRpcmVjdG9yeS4uLiAiID4mNjsgfQoraWYgJHthY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK2VjaG8gJEVDSE9fTiAiCisKKyoqKiBDb3B5aW5nIG9sZCB1Y2Qtc25tcCBwZXJzaXN0ZW50IGZpbGVzIHRvIG5ldC1zbm1wIHBlcnNpc3RlbnQgZGlyZWN0b3J5OgorCisJV291bGQgeW91IGxpa2UgdG8gY29weSB0aGUgb2xkZXIgdWNkLXNubXAgcGVyc2lzdGVudCBmaWxlcworaW50byB5b3VyIG5ldyBuZXQtc25tcCBwZXJzaXN0ZW50IGZpbGUgcGF0aD8gIFRoaXMgd2lsbCBmdW5jdGlvbmFsbHkKK3NhdmUgYWxsIHlvdXIgdWNkLXNubXAgZGF0YSBhbmQgbGV0IGl0IGJlIHVzZWQgd2l0aGluIHRoZSBuZXQtc25tcAordG9vbHMuICBUaGlzIHdpbGwgb25seSBiZSBkb25lIG9uY2Ugd2hlbiB5b3UgcnVuIG1ha2UgaW5zdGFsbC4gIElmIHlvdQord2lzaCB0byBkbyB0aGlzLCBlbnRlciAieWVzIiBhdCB0aGUgcHJvbXB0LgorICBQcm92aWRpbmcgdGhlIC0td2l0aC1jb3B5LXBlcnNpc3RlbnQtZmlsZXM9XCJub1wiIChvciBcInllc1wiKQorcGFyYW1ldGVycyB0byAuL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitDb3B5IHVjZC1zbm1wIGRhdGEgaW50byB0aGUgbmV0LXNubXAgZGF0YSBkaXJlY3RvcnkgKCJ5ZXMiKTogJEVDSE9fQyIKK3JlYWQgdG1waW5wdXQgPCY3CitpZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiJ5ZXMiIiAhPSAiIjsgdGhlbgorICB0bXBpbnB1dD0iInllcyIiCitmaQorZXZhbCBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9XCIkdG1waW5wdXRcIgorZWxzZQordG1waW5wdXQ9IiJ5ZXMiIgorZXZhbCBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9XCIkdG1waW5wdXRcIgorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMiID4mNQorJGFzX2VjaG8gIiRhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMiID4mNjsgfQorZWxzZQorYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSJubyIKK2ZpCitDT1BZX1BFUlNJU1RFTlRfRklMRVM9IiRhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMiCisKKworIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBwcm9ncmFtcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU2hlbGwgY2hlY2tzOgorIyMKKworIyAgICAgICBDaGVjayBmb3IgJ3NoJyBvdmVyZmxvdyAgICAgICAgICAgICAgICAgICAgICAgICAoSFAtVVgpCisjICAgICAgICAgKHRha2VuIGZyb20gUGVybCdzIGNvbmZpZ3VyZSBzY3JpcHQpCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIEkgbmVlZCB0byBmZWVkIG15c2VsZiB0byBrc2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSSBuZWVkIHRvIGZlZWQgbXlzZWxmIHRvIGtzaC4uLiAiID4mNjsgfQogaWYgdGVzdCAtZiAvaHAtdXggLWEgLWYgL2Jpbi9rc2g7IHRoZW4KICAgaWYgKFBBVEg9LjsgYWxpYXMgLXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KICAgZWxzZQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiAgICAgaWYgdGVzdCAieCQxIiA9ICJ4IjsgdGhlbgogICAgICAgZXhlYyAvYmluL2tzaCAkMAogICAgIGVsc2UKQEAgLTM1MDcsMTUgKzU2NTcsODY0IEBACiAgICAgZmkKICAgZmkKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLWlmIHRlc3QgIngkZGV2ZWxvcGVyIiAhPSAieG5vIiAtYSAtZiAkc3JjZGlyL3JlbW92ZS1maWxlczsgdGhlbgotICAjIHR1cm4gb24gdGhlIGRldmVsb3BlciBmbGFnIHdoZW4gdGFrZW4gZnJvbSBhIFNWTiBjaGVja291dCAobm90IGEgcmVsZWFzZSkKLSAgZGV2ZWxvcGVyPSJ5ZXMiCisKKyMjCisjICAgU3RhbmRhcmQgYW5kIHBhdGggcHJvZ3JhbSBjaGVja3M6CisjIworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAogZmkKIAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCithY19hdXhfZGlyPQorZm9yIGFjX2RpciBpbiAiJHNyY2RpciIgIiRzcmNkaXIvLi4iICIkc3JjZGlyLy4uLy4uIjsgZG8KKyAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAorIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5CisjIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCithY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKworCisjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKyMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCisjIElSSVggL3NiaW4vaW5zdGFsbAorIyBBSVggL2Jpbi9pbnN0YWxsCisjIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCitpZiAke2FjX2N2X3BhdGhfaW5zdGFsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisgID86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSogfCA/OltcXC9dT1MyW1xcL11JTlNUQUxMW1xcL10qIHwgXAorICAvdXNyL3VjYi8qICkgOzsKKyAgKikKKyAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorICAgICMgYnkgZGVmYXVsdC4KKyAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKwkgICAgOgorCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorCSAgICA6CisJICBlbHNlCisJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorCSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bworCSAgICBta2RpciBjb25mdGVzdC5kaXIKKwkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworCSAgICB0aGVuCisJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorCSAgICAgIGJyZWFrIDMKKwkgICAgZmkKKwkgIGZpCisJZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgOzsKK2VzYWMKKworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCitmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKyRhc19lY2hvICIkSU5TVEFMTCIgPiY2OyB9CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfU0VEIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9TRUQiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX1NFRAorY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIgYWNfcGF0aF9TRURfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIgorICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX1NFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBzZWQgY291bGQgYmUgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX1NFRD0kU0VECitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KKyBTRUQ9IiRhY19jdl9wYXRoX1NFRCIKKyAgcm0gLWYgY29uZnRlc3Quc2VkCisKKworZm9yIGFjX3Byb2cgaW4gZmlsZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0ZJTEUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRklMRSI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19GSUxFPSIkRklMRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0ZJTEU9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0ZJTEU9JGFjX2N2X3Byb2dfRklMRQoraWYgdGVzdCAtbiAiJEZJTEUiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRklMRSIgPiY1CiskYXNfZWNobyAiJEZJTEUiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkRklMRSIgJiYgYnJlYWsKK2RvbmUKKworaWYgdGVzdCB4JGFjX2N2X3Byb2dfRklMRSA9IHg7IHRoZW4KKyAgIyBUaGUgZmlsZSBwcm9ncmFtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBDeWd3aW4gc2V0dXAsIGFsdGhvdWdoCisgICMgdGhpcyBwcm9ncmFtIGlzIGVzc2VudGlhbCBmb3IgbGlidG9vbCB0byB3b3JrIHByb3Blcmx5LiBJdCBpcyBub250cml2aWFsCisgICMgdG8gZGVkdWNlIGZyb20gdGhlIG1lc3NhZ2UgcHJpbnRlZCBieSBsaWJ0b29sIHRoYXQgdGhlICdmaWxlJyB0b29sIGlzCisgICMgbWlzc2luZyBhbmQgbGlidG9vbCBkb2VzIG5vdCBhYm9ydCB3aGVuIHRoZSBmaWxlIHByb2dyYW0gaXMgbm90IGZvdW5kLiBTbworICAjIHN0b3Agbm93IGlmIHRoZSBmaWxlIHByb2dyYW0gaGFzIG5vdCBiZWVuIGZvdW5kLgorICBhc19mbl9lcnJvciAxICJmaWxlIHByb2dyYW0gbm90IGZvdW5kIGFsdGhvdWdoIGl0IGlzIG5lZWRlZCBieSBsaWJ0b29sLiIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZvciBhY19wcm9nIGluIGZpbmQKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19GSU5EKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEZJTkQiOyB0aGVuCisgIGFjX2N2X3Byb2dfRklORD0iJEZJTkQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19GSU5EPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitGSU5EPSRhY19jdl9wcm9nX0ZJTkQKK2lmIHRlc3QgLW4gIiRGSU5EIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEZJTkQiID4mNQorJGFzX2VjaG8gIiRGSU5EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEZJTkQiICYmIGJyZWFrCitkb25lCisKK2ZvciBhY19wcm9nIGluIHdob2FtaSBsb2duYW1lCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfV0hPQU1JKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFdIT0FNSSI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19XSE9BTUk9IiRXSE9BTUkiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19XSE9BTUk9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1dIT0FNST0kYWNfY3ZfcHJvZ19XSE9BTUkKK2lmIHRlc3QgLW4gIiRXSE9BTUkiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkV0hPQU1JIiA+JjUKKyRhc19lY2hvICIkV0hPQU1JIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJFdIT0FNSSIgJiYgYnJlYWsKK2RvbmUKK3Rlc3QgLW4gIiRXSE9BTUkiIHx8IFdIT0FNST0id2hvYW1pIgorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXV0b2NvbmYiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGF1dG9jb25mOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9BVVRPQ09ORis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJEFVVE9DT05GIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0FVVE9DT05GPSIkQVVUT0NPTkYiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0FVVE9DT05GPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorQVVUT0NPTkY9JGFjX2N2X3BhdGhfQVVUT0NPTkYKK2lmIHRlc3QgLW4gIiRBVVRPQ09ORiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBVVRPQ09ORiIgPiY1CiskYXNfZWNobyAiJEFVVE9DT05GIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXV0b2hlYWRlciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXV0b2hlYWRlcjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfQVVUT0hFQURFUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJEFVVE9IRUFERVIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQVVUT0hFQURFUj0iJEFVVE9IRUFERVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0FVVE9IRUFERVI9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitBVVRPSEVBREVSPSRhY19jdl9wYXRoX0FVVE9IRUFERVIKK2lmIHRlc3QgLW4gIiRBVVRPSEVBREVSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFVVE9IRUFERVIiID4mNQorJGFzX2VjaG8gIiRBVVRPSEVBREVSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUEVSTFBST0crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQRVJMUFJPRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QRVJMUFJPRz0iJFBFUkxQUk9HIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QRVJMUFJPRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BFUkxQUk9HPSRhY19jdl9wYXRoX1BFUkxQUk9HCitpZiB0ZXN0IC1uICIkUEVSTFBST0ciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEVSTFBST0ciID4mNQorJGFzX2VjaG8gIiRQRVJMUFJPRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUFNQUk9HKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUFNQUk9HIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BTUFJPRz0iJFBTUFJPRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUFNQUk9HPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUFNQUk9HPSRhY19jdl9wYXRoX1BTUFJPRworaWYgdGVzdCAtbiAiJFBTUFJPRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQU1BST0ciID4mNQorJGFzX2VjaG8gIiRQU1BST0ciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJweXRob24iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHB5dGhvbjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUFlUSE9OUFJPRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBZVEhPTlBST0cgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUFlUSE9OUFJPRz0iJFBZVEhPTlBST0ciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BZVEhPTlBST0c9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitQWVRIT05QUk9HPSRhY19jdl9wYXRoX1BZVEhPTlBST0cKK2lmIHRlc3QgLW4gIiRQWVRIT05QUk9HIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBZVEhPTlBST0ciID4mNQorJGFzX2VjaG8gIiRQWVRIT05QUk9HIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ1bmFtZSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgdW5hbWU7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1VOQU1FUFJPRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFVOQU1FUFJPRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9VTkFNRVBST0c9IiRVTkFNRVBST0ciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1VOQU1FUFJPRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1VOQU1FUFJPRz0kYWNfY3ZfcGF0aF9VTkFNRVBST0cKK2lmIHRlc3QgLW4gIiRVTkFNRVBST0ciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkVU5BTUVQUk9HIiA+JjUKKyRhc19lY2hvICIkVU5BTUVQUk9HIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBVTkFNRVBST0cgIiRVTkFNRVBST0ciCitfQUNFT0YKKworCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfQVVUT0NPTkYiID0gIngiOyB0aGVuCisJQVVUT0NPTkY9IjoiCisKK2ZpCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfQVVUT0hFQURFUiIgPSAieCI7IHRoZW4KKwlBVVRPSEVBREVSPSI6IgorCitmaQorCitNQUtFPSR7TUFLRS0ibWFrZSJ9CiskTUFLRSAtdiAtZiAvZGV2L251bGwgMj4vZGV2L251bGwgfCAkR1JFUCBHTlUgPi9kZXYvbnVsbAoraGF2ZV9nbnVfbWFrZT0kPworCisKKyMjCisjICAgVGhlIFBlcmwgZnVuY3Rpb24gc3lzdGVtKCkgaXMgdXNlZCBmb3IgcnVubmluZyB0aGUgTmV0LVNOTVAgcmVncmVzc2lvbgorIyAgIHRlc3RzLiBGaW5kIG91dCB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaW52b2tlcyBhIFBPU0lYIHNoZWxsLCB3aGljaCBpcworIyAgIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBydW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMuIFdoZW4gdXNpbmcgV2luZG93cyArIE1TWVMKKyMgICArIEFjdGl2ZVN0YXRlIFBlcmwsIFBlcmwncyBzeXN0ZW0oKSBmdW5jdGlvbiBkb2VzIGludm9rZSBXaW5kb3dzJyBjbWQuZXhlCisjICAgd2hpY2ggaXMgbm90IGEgUE9TSVggc2hlbGwuCisjIworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIFBlcmwgZnVuY3Rpb24gc3lzdGVtKCkgaW52b2tlcyBhIFBPU0lYIHNoZWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIFBlcmwgZnVuY3Rpb24gc3lzdGVtKCkgaW52b2tlcyBhIFBPU0lYIHNoZWxsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICJ4JFBFUkxQUk9HIiAhPSAneCcgJiYgdGVzdCAteCAiJFBFUkxQUk9HIiAmJiB0ZXN0ICJ4YCRQRVJMUFJPRyAtZSAnc3lzdGVtKCdcJydlY2hvICRPU1RZUEUnXCcnKTsnYCIgIT0gJ3gkT1NUWVBFJzsgdGhlbgorICAgIFBFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTEw9eWVzCitlbHNlCisgICAgUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTD1ubworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTCIgPiY1CiskYXNfZWNobyAiJFBFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTEwiID4mNjsgfQorCisKKworIyMKKyMgICBDb21waWxhdGlvbi1yZWxhdGVkIHByb2dyYW0gY2hlY2tzOgorIyMKKwogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCkBAIC0zNTMwLDEwICs2NTI5LDEwIEBACiBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTM1NDMsMzUgKzY1NDIsMzcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKIGZpCiBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KICAgYWNfY3RfQ0M9JENDCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgogICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMzU4MSwzOSArNjU4Miw1MCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0gIENDPSRhY19jdF9DQworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQogZWxzZQogICBDQz0iJGFjX2N2X3Byb2dfQ0MiCiBmaQogCiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTM2MjMsNzcgKzY2MzUsMzcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KLSAgYWNfY3RfQ0M9JENDCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKKwogICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIENDPSRhY19jdF9DQwotZWxzZQotICBDQz0iJGFjX2N2X3Byb2dfQ0MiCi1maQotCiBmaQogaWYgdGVzdCAteiAiJENDIjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0zNzA0LDE4ICs2Njc2LDE5IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCiAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKICAgICAgICBjb250aW51ZQogICAgICBmaQogICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgogICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCkBAIC0zNzMzLDI0ICs2NzA2LDI1IEBACiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKIGZpCiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCiAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCiAgIGRvCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMzc2MCwzOSArNjczNCw0MSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKICAgZG9uZQogZmkKIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KICAgYWNfY3RfQ0M9JENDCi0gIGZvciBhY19wcm9nIGluIGNsCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgogICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMzgwMiw2NiArNjc3OCw3OCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwogaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCiBkb25lCiAKLSAgQ0M9JGFjX2N0X0NDCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCiBmaQogCiBmaQogCiAKLXRlc3QgLXogIiRDQyIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIAogIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IiBcCi0gICAgICJjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMzg3MywxMTIgKzY4NjEsMTA4IEBACiB9CiBfQUNFT0YKIGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCi1hY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEuZXhlIGIub3V0IgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgogIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgogIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgogIyBvZiBleGVleHQuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNgotYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua19kZWZhdWx0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmtfZGVmYXVsdCkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAjIEZpbmQgdGhlIG91dHB1dCwgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdCBsaWtlbHkuICBUaGlzIHNjaGVtZSBpcwotIyBub3Qgcm9idXN0IHRvIGp1bmsgaW4gYC4nLCBoZW5jZSBnbyB0byB3aWxkY2FyZHMgKGEuKikgb25seSBhcyBhIGxhc3QKLSMgcmVzb3J0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCiAKLSMgQmUgY2FyZWZ1bCB0byBpbml0aWFsaXplIHRoaXMgdmFyaWFibGUsIHNpbmNlIGl0IHVzZWQgdG8gYmUgY2FjaGVkLgotIyBPdGhlcndpc2UgYW4gb2xkIGNhY2hlIHZhbHVlIG9mIGBubycgbGVkIHRvIGBFWEVFWFQgPSBubycgaW4gYSBNYWtlZmlsZS4KLWFjX2N2X2V4ZWV4dD0KLSMgYi5vdXQgaXMgY3JlYXRlZCBieSBpOTYwIGNvbXBpbGVycy4KLWZvciBhY19maWxlIGluIGFfb3V0LmV4ZSBhLmV4ZSBjb25mdGVzdC5leGUgYS5vdXQgY29uZnRlc3QgYS4qIGNvbmZ0ZXN0LiogYi5vdXQKKyMgVGhlIHBvc3NpYmxlIG91dHB1dCBmaWxlczoKK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisKK2FjX3JtZmlsZXM9Citmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19ybWZpbGVzCisKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgorIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29uZi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJwogZG8KICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkKLQk7OwotICAgIGNvbmZ0ZXN0LiRhY19leHQgKQotCSMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQogCTs7CiAgICAgW2FiXS5vdXQgKQogCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CiAJIyBjZXJ0YWlubHkgcmlnaHQuCiAJYnJlYWs7OwogICAgICouKiApCi0JYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCi0JIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wsCi0JIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKLQkjIG1haW50YWluIExpYnRvb2w/IC0tYWtpbS4KLQlleHBvcnQgYWNfY3ZfZXhlZXh0CisJaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJdGhlbiA6OyBlbHNlCisJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJZmkKKwkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKKwkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKwkjIEV2ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKwkjIGFjdHVhbGx5IHdvcmtpbmcuCiAJYnJlYWs7OwogICAgICogKQogCWJyZWFrOzsKICAgZXNhYwogZG9uZQordGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgYWNfZmlsZT0nJworZmkKK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBmaQotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQogYWNfZXhlZXh0PSRhY19jdl9leGVleHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjYKIAotIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCi0jIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci0jIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCi0jIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCi0gIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPW5vCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCi0JY3Jvc3NfY29tcGlsaW5nPXllcwotICAgIGVsc2UKLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCi1JZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBmaQotICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotCi1ybSAtZiBhLm91dCBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQotIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCi0jIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICRFQ0hPX0MiID4mNgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAiID4mNjsgfQoraWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CiAgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQogIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCiAjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aApAQCAtMzk4NiwzOCArNjk3MCw5MCBAQAogZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OwogICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAotCSAgZXhwb3J0IGFjX2N2X2V4ZWV4dAogCSAgYnJlYWs7OwogICAgICogKSBicmVhazs7CiAgIGVzYWMKIGRvbmUKIGVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIGZpCi0KLXJtIC1mIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZXhlZXh0IiA+JjYKK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQogCiBybSAtZiBjb25mdGVzdC4kYWNfZXh0CiBFWEVFWFQ9JGFjX2N2X2V4ZWV4dAogYWNfZXhlZXh0PSRFWEVFWFQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgorIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICAgZmkKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CiskYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfb2JqZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTQwMjksNDUgKzcwNjUsNDYgQEAKIH0KIF9BQ0VPRgogcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQoraWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICBmb3IgYWNfZmlsZSBpbiBgKGxzIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqOyBscyBjb25mdGVzdC4qKSAyPi9kZXYvbnVsbGA7IGRvCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOwogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgKSA7OworICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CiAgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCiAgICAgICAgYnJlYWs7OwogICBlc2FjCiBkb25lCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIGZpCi0KIHJtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29iamV4dCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9CiBPQkpFWFQ9JGFjX2N2X29iamV4dAogYWNfb2JqZXh0PSRPQkpFWFQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTQwODEsNTUgKzcxMTgsMzQgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY29tcGlsZXJfZ251PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jb21waWxlcl9nbnU9bm8KKyAgYWNfY29tcGlsZXJfZ251PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBhY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjYKLUdDQz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCiBhY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CiBhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1nIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtNDE0MCwzOSArNzE1Niw0OSBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9wcm9nX2NjX2c9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIENGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi1hY19jdl9wcm9nX2NjX2c9bm8KK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKwkgQ0ZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CiBpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCiAgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKIGVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCkBAIC00MTg4LDE4ICs3MjE0LDE0IEBACiAgICAgQ0ZMQUdTPQogICBmaQogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19zdGRjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgYWNfY3ZfcHJvZ19jY19zdGRjPW5vCisgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCiBhY19zYXZlX0NDPSRDQwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQyMjcsMTIgKzcyNDksMTcgQEAKIC8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCiAgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCiAgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKLSAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZDEgaXMgYWRkZWQgdG8gZ2V0CisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CiAgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCiAgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKLSAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkMS4gICovCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCiBpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOwogCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKIGludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOwogc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CiBzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKQEAgLTQyNDcsMjA1ICs3Mjc0LDM3IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi0jIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAotIyBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCi0jIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCi0jIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKLSMgSFAtVVggMTAuMjAgYW5kIGxhdGVyCS1BZQotIyBIUC1VWCBvbGRlciB2ZXJzaW9ucwktQWEgLURfSFBVWF9TT1VSQ0UKLSMgU1ZSNAkJCS1YYyAtRF9fRVhURU5TSU9OU19fCi1mb3IgYWNfYXJnIGluICIiIC1xbGFuZ2x2bD1hbnNpIC1zdGQxIC1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKIGRvCiAgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfYXJnCi1icmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCiBkb25lCi1ybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKIENDPSRhY19zYXZlX0NDCiAKIGZpCi0KLWNhc2UgIngkYWNfY3ZfcHJvZ19jY19zdGRjIiBpbgotICB4fHhubykKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1ub25lIG5lZWRlZCIgPiY2IDs7CisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OwogICAqKQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY2Ci0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19zdGRjIiA7OworICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7CiBlc2FjCi0KLSMgU29tZSBwZW9wbGUgdXNlIGEgQysrIGNvbXBpbGVyIHRvIGNvbXBpbGUgQy4gIFNpbmNlIHdlIHVzZSBgZXhpdCcsCi0jIGluIEMrKyB3ZSBuZWVkIHRvIGRlY2xhcmUgaXQuICBJbiBjYXNlIHNvbWVvbmUgdXNlcyB0aGUgc2FtZSBjb21waWxlcgotIyBmb3IgYm90aCBjb21waWxpbmcgQyBhbmQgQysrIHdlIG5lZWQgdG8gaGF2ZSB0aGUgQysrIGNvbXBpbGVyIGRlY2lkZQotIyB0aGUgZGVjbGFyYXRpb24gb2YgZXhpdCwgc2luY2UgaXQncyB0aGUgbW9zdCBkZW1hbmRpbmcgZW52aXJvbm1lbnQuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNpZm5kZWYgX19jcGx1c3BsdXMKLSAgY2hva2UgbWUKLSNlbmRpZgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGZvciBhY19kZWNsYXJhdGlvbiBpbiBcCi0gICAnJyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKLSAgICd2b2lkIGV4aXQgKGludCk7JwotZG8KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfZGVjbGFyYXRpb24KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotZXhpdCAoNDIpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2RlY2xhcmF0aW9uCi1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKDQyKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKIAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0KgotaWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgotICBlY2hvICcjaWZkZWYgX19jcGx1c3BsdXMnID4+Y29uZmRlZnMuaAotICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAotICBlY2hvICcjZW5kaWYnICAgICAgICAgICAgID4+Y29uZmRlZnMuaAotZmkKIAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCkBAIC00NDU3LDE1ICs3MzE2LDE1IEBACiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwogYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CiAjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgogaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KICAgQ1BQPQogZmkKIGlmIHRlc3QgLXogIiRDUFAiOyB0aGVuCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKICAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgpAQCAtNDQ3OSwxMSArNzMzOCw3IEBACiAgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgogICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAogICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZmRlZiBfX1NURENfXwogIyBpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTQ0OTIsNzggKzczNDcsMzQgQEAKICNlbmRpZgogCQkgICAgIFN5bnRheCBlcnJvcgogX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKIAorZWxzZQogICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCiBjb250aW51ZQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCiAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KIF9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgogY29udGludWUKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQogICAjIFBhc3NlcyBib3RoIHRlc3RzLgogYWNfcHJlcHJvY19vaz06CiBicmVhawogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKIGRvbmUKICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CiAgIGJyZWFrCiBmaQogCkBAIC00NTc1LDggKzczODYsOCBAQAogZWxzZQogICBhY19jdl9wcm9nX0NQUD0kQ1BQCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ1BQIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KIGFjX3ByZXByb2Nfb2s9ZmFsc2UKIGZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwogZG8KQEAgLTQ1ODYsMTEgKzczOTcsNyBAQAogICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZkZWYgX19TVERDX18KICMgaW5jbHVkZSA8bGltaXRzLmg+CkBAIC00NTk5LDg1ICs3NDA2LDQwIEBACiAjZW5kaWYKIAkJICAgICBTeW50YXggZXJyb3IKIF9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAKK2Vsc2UKICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgogY29udGludWUKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAogCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwogICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CiBfQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KIGFjX3ByZXByb2Nfb2s9OgogYnJlYWsKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAogCiBkb25lCiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgotICA6CitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKIGVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIGZpCiAKIGFjX2V4dD1jCkBAIC00NjkwLDM1OCArNzQ1Miw2NzAgQEAKIAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZWdyZXAuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfZWdyZXArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIGVjaG8gYSB8IChncmVwIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMQotICAgIHRoZW4gYWNfY3ZfcHJvZ19lZ3JlcD0nZ3JlcCAtRScKLSAgICBlbHNlIGFjX2N2X3Byb2dfZWdyZXA9J2VncmVwJwotICAgIGZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZWdyZXAiID4mNgotIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCi0KLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFJWCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBSVguLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9BSVgKLSAgeWVzCi0jZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KIAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBfQUxMX1NPVVJDRSAxCi1fQUNFT0YKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKIHJtIC1mIGNvbmZ0ZXN0KgogCitmaQogCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KIAotIyBzeXN0ZW0gY2hlY2sKLWFjX2F1eF9kaXI9Ci1mb3IgYWNfZGlyIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uOyBkbwotICBpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC1zaDsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCi0gICAgYnJlYWsKLSAgZWxpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC5zaDsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCi0gICAgYnJlYWsKLSAgZWxpZiB0ZXN0IC1mICRhY19kaXIvc2h0b29sOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCi0gICAgYnJlYWsKLSAgZmkKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKwogZG9uZQotaWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1hY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiCi1hY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIKLWFjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgIyBUaGlzIHNob3VsZCBiZSBDeWdudXMgY29uZmlndXJlLgogCi0jIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCi0kYWNfY29uZmlnX3N1YiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRhY19jb25maWdfc3ViIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJGFjX2NvbmZpZ19zdWIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm1pbml4L2NvbmZpZy5oIiAiYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgPSB4eWVzOyB0aGVuIDoKKyAgTUlOSVg9eWVzCiBlbHNlCi0gIGFjX2N2X2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotdGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgotICBhY19jdl9idWlsZF9hbGlhcz1gJGFjX2NvbmZpZ19ndWVzc2AKLXRlc3QgLXogIiRhY19jdl9idWlsZF9hbGlhcyIgJiYKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotYWNfY3ZfYnVpbGQ9YCRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhc2AgfHwKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2J1aWxkX2FsaWFzIGZhaWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0KKyAgTUlOSVg9CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9idWlsZCIgPiY2Ci1idWlsZD0kYWNfY3ZfYnVpbGQKLWJ1aWxkX2NwdT1gZWNobyAkYWNfY3ZfYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAotYnVpbGRfdmVuZG9yPWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCi1idWlsZF9vcz1gZWNobyAkYWNfY3ZfYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaG9zdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICBpZiB0ZXN0ICIkTUlOSVgiID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYXzFfU09VUkNFIDIiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIF9NSU5JWCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhY19jdl9ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi10ZXN0IC16ICIkYWNfY3ZfaG9zdF9hbGlhcyIgJiYKLSAgYWNfY3ZfaG9zdF9hbGlhcz0kYWNfY3ZfYnVpbGRfYWxpYXMKLWFjX2N2X2hvc3Q9YCRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzYCB8fAotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhcyBmYWlsZWQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXMgZmFpbGVkIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9ob3N0IiA+JjYKLWhvc3Q9JGFjX2N2X2hvc3QKLWhvc3RfY3B1PWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKLWhvc3RfdmVuZG9yPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKLWhvc3Rfb3M9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisJICAkYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CiAKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdGFyZ2V0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzCiBlbHNlCi0gIGFjX2N2X3RhcmdldF9hbGlhcz0kdGFyZ2V0X2FsaWFzCi10ZXN0ICJ4JGFjX2N2X3RhcmdldF9hbGlhcyIgPSAieCIgJiYKLSAgYWNfY3ZfdGFyZ2V0X2FsaWFzPSRhY19jdl9ob3N0X2FsaWFzCi1hY19jdl90YXJnZXQ9YCRhY19jb25maWdfc3ViICRhY19jdl90YXJnZXRfYWxpYXNgIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl90YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl90YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fIiA+JjY7IH0KKyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKyAgICAkYXNfZWNobyAiI2RlZmluZSBfX0VYVEVOU0lPTlNfXyAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfQUxMX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfR05VX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMSIgPj5jb25mZGVmcy5oCisKKyAgJGFzX2VjaG8gIiNkZWZpbmUgX1RBTkRFTV9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb25zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisvKiBGSVhNRTogSW5jbHVkZSB0aGUgY29tbWVudHMgc3VnZ2VzdGVkIGJ5IFBhdWwuICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisgIC8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisgIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07CisgIGNvbnN0IGNoYXJzZXQgY3M7CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpwY3BjYzsKKyAgY2hhciAqKnBwYzsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgICBjaGFyICp0OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgICBpZiAocykgcmV0dXJuIDA7CisgIH0KKyAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KKyAgICBpbnQgeFtdID0gezI1LCAxN307CisgICAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKKyAgICArK2ZvbzsKKyAgfQorICB7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KKyAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKKyAgICBpcHRyIHAgPSAwOworICAgICsrcDsKKyAgfQorICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzYXlpbmcKKyAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCisgICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfTsKKyAgICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7CisgIH0KKyAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KKyAgICBjb25zdCBpbnQgZm9vID0gMTA7CisgICAgaWYgKCFmb28pIHJldHVybiAwOworICB9CisgIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19jb25zdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfY19jb25zdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29uc3QiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIGNvbnN0IC8qKi8iID4+Y29uZmRlZnMuaAogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3RhcmdldCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdGFyZ2V0IiA+JjYKLXRhcmdldD0kYWNfY3ZfdGFyZ2V0Ci10YXJnZXRfY3B1PWBlY2hvICRhY19jdl90YXJnZXQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAotdGFyZ2V0X3ZlbmRvcj1gZWNobyAkYWNfY3ZfdGFyZ2V0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKLXRhcmdldF9vcz1gZWNobyAkYWNfY3ZfdGFyZ2V0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKIAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5saW5lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19pbmxpbmUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9jX2lubGluZT1ubworZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGluZV9fIF9faW5saW5lOyBkbworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCit0eXBlZGVmIGludCBmb29fdDsKK3N0YXRpYyAkYWNfa3cgZm9vX3Qgc3RhdGljX2ZvbyAoKSB7cmV0dXJuIDA7IH0KKyRhY19rdyBmb29fdCBmb28gKCkge3JldHVybiAwOyB9CisjZW5kaWYKIAotIyBUaGUgYWxpYXNlcyBzYXZlIHRoZSBuYW1lcyB0aGUgdXNlciBzdXBwbGllZCwgd2hpbGUgJGhvc3QgZXRjLgotIyB3aWxsIGdldCBjYW5vbmljYWxpemVkLgotdGVzdCAtbiAiJHRhcmdldF9hbGlhcyIgJiYKLSAgdGVzdCAiJHByb2dyYW1fcHJlZml4JHByb2dyYW1fc3VmZml4JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiID0gXAotICAgIE5PTkVOT05Fcyx4LHgsICYmCi0gIHByb2dyYW1fcHJlZml4PSR7dGFyZ2V0X2FsaWFzfS0KLQotUEFSVElBTFRBUkdFVE9TPWBlY2hvICR0YXJnZXRfb3MgfCBzZWQgJ3MvWy0uX10uKi8vJ2AKLQotCi0jIHBsYXRmb3JtLXNwZWNpZmljIGNvbXBpbGVyIGZsYWdzCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotCUNGTEFHUz0iJENGTEFHUyAtRG1pbmd3MzIiCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3CiBmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIHRlc3QgIiRhY19jdl9jX2lubGluZSIgIT0gbm8gJiYgYnJlYWsKK2RvbmUKIAotIyBwbGF0Zm9ybS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MKLWNhc2UgJHRhcmdldF9vcyBpbgotICAgIGFpeDQuMip8YWl4NC4zKnxhaXg1KnxhaXg2KikKLSAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoYXQgbGlua2VyIGZsYWdzIHRvIGFkZCB0byBlbmFibGUgcnVudGltZSBsaW5raW5nIG9uIEFJWCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoYXQgbGlua2VyIGZsYWdzIHRvIGFkZCB0byBlbmFibGUgcnVudGltZSBsaW5raW5nIG9uIEFJWC4uLiAkRUNIT19DIiA+JjYKLSAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAgICAgICAgICAgICAgIG5ldHNubXBfYWl4X3J1bnRpbWVsaW5raW5nX2ZsYWdzX29rPXllcwotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBmaQotICAgICAgICBkb25lCi0gICAgICAgIGlmIHRlc3QgIlgkbmV0c25tcF9haXhfcnVudGltZWxpbmtpbmdfZmxhZ3Nfb2siICE9ICJYeWVzIjsgdGhlbgotCSAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KLQkgICAgICAgIG5ldHNubXBfYWl4X2xkZmxhZ3M9Ii1XbCwtYnJ0bCIKLQkgICAgZWxzZQotICAgICAgICAgICAgICAgIG5ldHNubXBfYWl4X2xkZmxhZ3M9Ii1icnRsIgotCSAgICBmaQotICAgICAgICAgICAgTERGTEFHUz0iJG5ldHNubXBfYWl4X2xkZmxhZ3MgJExERkxBR1MiCi0JICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRuZXRzbm1wX2FpeF9sZGZsYWdzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRuZXRzbm1wX2FpeF9sZGZsYWdzIiA+JjYKLQllbHNlCi0JICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSIgPiY2Ci0JZmkKLQk7OwotICAgIGRhcndpbjgqfGRhcndpbjkqKQotICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBkYXJ3aW4gbGQgbWlnaHQgbmVlZCAtZmxhdF9uYW1lc3BhY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGRhcndpbiBsZCBtaWdodCBuZWVkIC1mbGF0X25hbWVzcGFjZS4uLiAkRUNIT19DIiA+JjYKLQlpZiB0ZXN0IC16ICIkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIjsgdGhlbgotCQlMREZMQUdTPSItZmxhdF9uYW1lc3BhY2UgJExERkxBR1MiCi0JCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotCWVsc2UKLQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotCWZpCi0JOzsKLSAgICAqKQotICAgICAgICA7OworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2lubGluZSIgPiY2OyB9CisKK2Nhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgIGlubGluZSB8IHllcykgOzsKKyAgKikKKyAgICBjYXNlICRhY19jdl9jX2lubGluZSBpbgorICAgICAgbm8pIGFjX3ZhbD07OworICAgICAgKikgYWNfdmFsPSRhY19jdl9jX2lubGluZTs7CisgICAgZXNhYworICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgaW5saW5lICRhY192YWwKKyNlbmRpZgorX0FDRU9GCisgICAgOzsKIGVzYWMKIAotIyBsaWJ0b29sIHN0dWZmIGZvciBzaGFyZWQvc3RhdGljIGxpYnJhcmllcy4KKworIyAgICAgICBsaWJ0b29sIHN0dWZmIGZvciBzaGFyZWQvc3RhdGljIGxpYnJhcmllcy4KKyMKKworY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi40JworbWFjcm9fcmV2aXNpb249JzEuMzI5MycKIAogCiAKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCBvciAtLWRpc2FibGUtc2hhcmVkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc2hhcmVkIgotICBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKLSAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OwotICAgICopCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX3NoYXJlZD15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICA7OwotICAgIGVzYWMKKworCisKKworCisKKworCisKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAiJExJTkVOTyIgNQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2J1aWxkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgZW5hYmxlX3NoYXJlZD15ZXMKLWZpOworICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1CithY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIG9yIC0tZGlzYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zdGF0aWMiCi0gIHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OwotICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0gICAgKikKLSAgICAgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zdGF0aWM9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjCi1lbHNlCi0gIGVuYWJsZV9zdGF0aWM9eWVzCi1maTsKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQorY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7Citlc2FjCitidWlsZD0kYWNfY3ZfYnVpbGQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9idWlsZAorc2hpZnQKK2J1aWxkX2NwdT0kMQorYnVpbGRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorYnVpbGRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgb3IgLS1kaXNhYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2Zhc3RfaW5zdGFsbCIKLSAgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjCi1lbHNlCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi1maTsKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hvc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KLSMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKyAgYWNfY3ZfaG9zdD0kYWNfY3ZfYnVpbGQKK2Vsc2UKKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKyAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hvc3QiID4mNjsgfQorY2FzZSAkYWNfY3ZfaG9zdCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OworZXNhYworaG9zdD0kYWNfY3ZfaG9zdAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2hvc3QKK3NoaWZ0Citob3N0X2NwdT0kMQoraG9zdF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Citob3N0X29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKKyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKKworRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCitpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50IC1yIC0tJworZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnRmICVzXG4nCitlbHNlCisgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisgIHsKKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJDEKK19MVEVDSE9fRU9GJworICB9CisgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKK2ZpCisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiIgorfQorCitjYXNlICIkRUNITyIgaW4KKyAgcHJpbnRmKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50ZiIgPiY1CiskYXNfZWNobyAicHJpbnRmIiA+JjY7IH0gOzsKKyAgcHJpbnQqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnQgLXIiID4mNQorJGFzX2VjaG8gInByaW50IC1yIiA+JjY7IH0gOzsKKyAgKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGNhdCIgPiY1CiskYXNfZWNobyAiY2F0IiA+JjY7IH0gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbwogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KLSAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgICAgZmkKKyAgICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9TRUQiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX1NFRCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCiAgICAgZG9uZQogICBkb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi1sdF9hY19tYXg9MAotbHRfYWNfY291bnQ9MAotIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKLSMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCi1mb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KLSAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKLSAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCi0gIGx0X2FjX2NvdW50PTAKLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCi0gICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBicmVhawotICBmaQotICB3aGlsZSB0cnVlOyBkbwotICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCi0gICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCi0gICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICBlY2hvID4+Y29uZnRlc3QubmwKLSAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhawotICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKLSAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKLSAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAotICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCi0gICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50Ci0gICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgZmkKICAgZG9uZQotZG9uZQotCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX1NFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBzZWQgY291bGQgYmUgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX1NFRD0kU0VECiBmaQogCi1TRUQ9JGx0X2N2X3BhdGhfU0VECitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KKyBTRUQ9IiRhY19jdl9wYXRoX1NFRCIKKyAgcm0gLWYgY29uZnRlc3Quc2VkCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTRUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JFNFRCIgPiY2Cit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgb3IgLS13aXRob3V0LWdudS1sZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2dudV9sZCIKLSAgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmdyZXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9GR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gJ2FiKmMnIHwgJEdSRVAgLUYgJ2FiKmMnID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEZHUkVQIjsgdGhlbgorICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZmdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0ZHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9GR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRkdSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgorICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKworCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCiBlbHNlCiAgIHdpdGhfZ251X2xkPW5vCi1maTsKK2ZpCisKIGFjX3Byb2c9bGQKIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KICAgY2FzZSAkaG9zdCBpbgogICAqLSotbWluZ3cqKQogICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKQEAgLTUwNTQsOSArODEyOCw5IEBACiAgICAgW1xcL10qIHwgPzpbXFwvXSopCiAgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCiAgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCi0JYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAogICAgICAgZG9uZQogICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCiAgICAgICA7OwpAQCAtNTA3MCwxNCArODE0NCwxNCBAQAogICAgIDs7CiAgIGVzYWMKIGVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CiBmaQotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitpZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCiAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgpAQCAtNTEwNywxOSArODE4MSwxNyBAQAogCiBMRD0iJGx0X2N2X3BhdGhfTEQiCiBpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTEQiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKLXRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgogY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KQEAgLTUxMzEsNDAgKzgyMDMsMjIgQEAKICAgOzsKIGVzYWMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfZ251X2xkIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9CiB3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjYKLXJlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZwotY2FzZSAkcmVsb2FkX2ZsYWcgaW4KLSIiIHwgIiAiKikgOzsKLSopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OwotZXNhYwotcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotY2FzZSAkaG9zdF9vcyBpbgotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZWxzZQotICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGZpCi0gICAgOzsKLWVzYWMKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBCU0QtY29tcGF0aWJsZSBubSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBCU0QtY29tcGF0aWJsZSBubS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9OTStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTk0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCiAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtNTIwNywxOTE5ICs4MjYxLDE2NyBAQAogICAgIGRvbmUKICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKICAgZG9uZQotICB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9OTSIgJiYgbHRfY3ZfcGF0aF9OTT1ubQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KIGZpCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3BhdGhfTk0iID4mNgotTk09IiRsdF9jdl9wYXRoX05NIgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1MTl9TPSRhc19sbl9zCi1pZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9OTSIgPiY2OyB9CitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubywgdXNpbmcgJExOX1MiID4mNgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCi1sdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJwotIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0Ci0jIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCi0jICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KLSMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgotIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgotIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgotIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAotIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQotIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4WzQtOV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1iZW9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYnNkaVs0NV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJwotICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbwotICA7OwotCi1jeWd3aW4qKQotICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgOzsKLQotbWluZ3cqIHwgcHczMiopCi0gICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCi0gICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCi0gIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6CisgICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCiAgIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIGZpCi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGkqODYgKQotICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KLSAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCi0gICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVszLTldODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCi0gICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIGZpCi0gIDs7Ci0KLWdudSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWhwdXgxMC4yMCogfCBocHV4MTEqKQotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIFBBLVJJU0MgWzAtOV0uWzAtOV0nCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCi0gICAgOzsKLSAgKikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV0uWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWludGVyaXhbMy05XSopCi0gICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJExEIGluCi0gICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKLSAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7Ci0gICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKLSAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICBlc2FjCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLW5ldGJzZCopCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotbmV3b3M2KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbwotICA7OwotCi1udG8tcW54KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotICA7OwotCi1vcGVuYnNkKikKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1yZG9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc29sYXJpcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gIG1vdG9yb2xhKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKLSAgICA7OwotICBuY3IpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBzZXF1ZW50KQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKLSAgICA7OwotICBzbmkpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KLSAgICA7OwotICBzaWVtZW5zKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgcGMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotZXNhYwotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2Ci1maWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAotdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi0KLQotCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayBvciAtLWRpc2FibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbGlidG9vbF9sb2NrIgotCi1maTsKLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCi0KLSMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAotIyBsaWJ0b29sIHN1cHBvcnQuCi1jYXNlICRob3N0IGluCi1pYTY0LSotaHB1eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICpFTEYtMzIqKQotICAgICAgSFBVWF9JQTY0X01PREU9IjMyIgotICAgICAgOzsKLSAgICAqRUxGLTY0KikKLSAgICAgIEhQVVhfSUE2NF9NT0RFPSI2NCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0qLSotaXJpeDYqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJyNsaW5lIDU0NjMgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgKjMyLWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgotICAgICAgOzsKLSAgICAqTjMyKikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCi0gICAgICA7OwotICAgIGVzYWMKLSAgIGVsc2UKLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgKjMyLWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLTMyIgotICAgICAgOzsKLSAgICAqTjMyKikKLSAgICAgIExEPSIke0xELWxkfSAtbjMyIgotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtNjQiCi0gICAgICA7OwotICAgIGVzYWMKLSAgIGZpCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQoteDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCi1zMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqMzItYml0KikKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKLSAgICAgICAgICA7OwotICAgICAgICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTB4LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKLSAgICAgICAgICA7OwotICAgICAgICBzMzkwKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotKi0qLXNjbzMuMnY1KikKLSAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X2NjX25lZWRzX2JlbGYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0gICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWx0X2N2X2NjX25lZWRzX2JlbGY9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2Ci0gIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCi0gICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCi0gICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCi0gIGZpCi0gIDs7Ci1zcGFyYyotKnNvbGFyaXMqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqNjQtYml0KikKLSAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCi0gICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7Ci0gICAgICAqKQotICAgICAgICBpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgIExEPSIke0xELWxkfSAtNjQiCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqKQotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCi1pZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERMTFRPT0wiID4mNQotZWNobyAiJHtFQ0hPX1R9JERMTFRPT0wiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KLSAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wiICYmIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZmFsc2UiCi1maQotZmkKLWFjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAotaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9ETExUT09MIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBETExUT09MPSRhY19jdF9ETExUT09MCi1lbHNlCi0gIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCi1maQotCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0FTK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19BUz0iJHthY190b29sX3ByZWZpeH1hcyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUFTPSRhY19jdl9wcm9nX0FTCi1pZiB0ZXN0IC1uICIkQVMiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVMiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVMiOyB0aGVuCi0gIGFjX2N0X0FTPSRBUwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBhczsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQVM9IiRhY19jdF9BUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfQVMiICYmIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImZhbHNlIgotZmkKLWZpCi1hY19jdF9BUz0kYWNfY3ZfcHJvZ19hY19jdF9BUwotaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FTIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBBUz0kYWNfY3RfQVMKLWVsc2UKLSAgQVM9IiRhY19jdl9wcm9nX0FTIgotZmkKLQotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCi1pZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE9CSkRVTVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JE9CSkRVTVAiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAiICYmIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iZmFsc2UiCi1maQotZmkKLWFjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAotaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9PQkpEVU1QIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCi1lbHNlCi0gIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCi1maQotCi0gIDs7Ci0KLWVzYWMKLQotbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgOgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQotIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQotI2Vsc2UKLSMgZGVmaW5lIElTTE9XRVIoYykgXAotCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAotCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKLQkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKLSMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCi0jZW5kaWYKLQotI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKLWludAotbWFpbiAoKQotewotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKLQl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKLSAgICAgIGV4aXQoMik7Ci0gIGV4aXQgKDApOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBTVERDX0hFQURFUlMgMQotX0FDRU9GCi0KLWZpCi0KLSMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCi0KLQotCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKLQkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi0KLWZvciBhY19oZWFkZXIgaW4gZGxmY24uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gJENDQyBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgogICBkbwogICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJERVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogZWxzZQogYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCi1DWFg9JGFjX2N2X3Byb2dfQ1hYCi1pZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDWFgiID4mNgorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0gICAgdGVzdCAtbiAiJENYWCIgJiYgYnJlYWsKKworICAgIHRlc3QgLW4gIiREVU1QQklOIiAmJiBicmVhawogICBkb25lCiBmaQotaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KLSAgYWNfY3RfQ1hYPSRDWFgKLSAgZm9yIGFjX3Byb2cgaW4gJENDQyBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfY3RfRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCiBlbHNlCiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKLQotZmkKLWZpCi1hY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DWFgiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkYWNfY3RfQ1hYIiB8fCBhY19jdF9DWFg9ImcrKyIKLQotICBDWFg9JGFjX2N0X0NYWAotZmkKLQotCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi1lY2hvICIkYXNfbWU6JExJTkVOTzoiIFwKLSAgICAgImNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1hY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCi17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjYKLUdYWD1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAotYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KLWFjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi1DWFhGTEFHUz0iLWciCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jeHhfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3Byb2dfY3h4X2c9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3Byb2dfY3h4X2c9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY3h4X2ciID4mNgotaWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCi0gIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCi1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLWcgLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgIENYWEZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDWFhGTEFHUz0KLSAgZmkKLWZpCi1mb3IgYWNfZGVjbGFyYXRpb24gaW4gXAotICAgJycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCkgdGhyb3cgKCk7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7JyBcCi0gICAndm9pZCBleGl0IChpbnQpOycKLWRvCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2RlY2xhcmF0aW9uCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKDQyKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2RlY2xhcmF0aW9uCi1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKDQyKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1ybSAtZiBjb25mdGVzdCoKLWlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KLSAgZWNobyAnI2lmZGVmIF9fY3BsdXNwbHVzJyA+PmNvbmZkZWZzLmgKLSAgZWNobyAkYWNfZGVjbGFyYXRpb24gICAgICA+PmNvbmZkZWZzLmgKLSAgZWNobyAnI2VuZGlmJyAgICAgICAgICAgICA+PmNvbmZkZWZzLmgKLWZpCi0KLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0KLWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCi0gICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0gICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCi0gIGFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFhDUFArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAotICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKLSAgICBkbwotICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jeHhfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY3h4X3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCi0gIGJyZWFrCi1maQotCi0gICAgZG9uZQotICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKLQotZmkKLSAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAotZWxzZQotICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENYWENQUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ1hYQ1BQIiA+JjYKLWFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY3h4X3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2N4eF93ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgotICA6Ci1lbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMrKyBwcmVwcm9jZXNzb3IgXCIkQ1hYQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLWFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotZmkKLQotCi1hY19leHQ9ZgotYWNfY29tcGlsZT0nJEY3NyAtYyAkRkZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJEY3NyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiBnNzcgZjc3IHhsZiBmcnQgcGdmNzcgZm9ydDc3IGZsMzIgYWY3NyBmOTAgeGxmOTAgcGdmOTAgZXBjZjkwIGY5NSBmb3J0IHhsZjk1IGlmYyBlZmMgcGdmOTUgbGY5NSBnZm9ydHJhbgotICBkbwotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0Y3NytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRjc3IjsgdGhlbgotICBhY19jdl9wcm9nX0Y3Nz0iJEY3NyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfRjc3PSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLUY3Nz0kYWNfY3ZfcHJvZ19GNzcKLWlmIHRlc3QgLW4gIiRGNzciOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRGNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JEY3NyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgICB0ZXN0IC1uICIkRjc3IiAmJiBicmVhawogICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKIGZpCi1pZiB0ZXN0IC16ICIkRjc3IjsgdGhlbgotICBhY19jdF9GNzc9JEY3NwotICBmb3IgYWNfcHJvZyBpbiBnNzcgZjc3IHhsZiBmcnQgcGdmNzcgZm9ydDc3IGZsMzIgYWY3NyBmOTAgeGxmOTAgcGdmOTAgZXBjZjkwIGY5NSBmb3J0IHhsZjk1IGlmYyBlZmMgcGdmOTUgbGY5NSBnZm9ydHJhbgotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCitpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9GNzciOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfRjc3PSIkYWNfY3RfRjc3IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9GNzc9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhawogZG9uZQogCi1maQotZmkKLWFjX2N0X0Y3Nz0kYWNfY3ZfcHJvZ19hY19jdF9GNzcKLWlmIHRlc3QgLW4gIiRhY19jdF9GNzciOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0Y3NyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0Y3NyIgJiYgYnJlYWsKLWRvbmUKLQotICBGNzc9JGFjX2N0X0Y3NwotZmkKLQotCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi1lY2hvICIkYXNfbWU6Njk3MToiIFwKLSAgICAgImNoZWNraW5nIGZvciBGb3J0cmFuIDc3IGNvbXBpbGVyIHZlcnNpb24iID4mNQotYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci1ybSAtZiBhLm91dAotCi0jIElmIHdlIGRvbid0IHVzZSBgLkYnIGFzIGV4dGVuc2lvbiwgdGhlIHByZXByb2Nlc3NvciBpcyBub3QgcnVuIG9uIHRoZQotIyBpbnB1dCBmaWxlLiAgKE5vdGUgdGhhdCB0aGlzIG9ubHkgbmVlZHMgdG8gd29yayBmb3IgR05VIGNvbXBpbGVycy4pCi1hY19zYXZlX2V4dD0kYWNfZXh0Ci1hY19leHQ9RgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgRm9ydHJhbiA3NyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgRm9ydHJhbiA3NyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZjc3X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSAgICAgIHByb2dyYW0gbWFpbgotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jb21waWxlcl9nbnU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2NvbXBpbGVyX2dudT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2Y3N19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Y3N19jb21waWxlcl9nbnUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Y3N19jb21waWxlcl9nbnUiID4mNgotYWNfZXh0PSRhY19zYXZlX2V4dAotYWNfdGVzdF9GRkxBR1M9JHtGRkxBR1Mrc2V0fQotYWNfc2F2ZV9GRkxBR1M9JEZGTEFHUwotRkZMQUdTPQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJEY3NyBhY2NlcHRzIC1nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkRjc3IGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfZjc3X2crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgRkZMQUdTPS1nCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSAgICAgIHByb2dyYW0gbWFpbgotCi0gICAgICBlbmQKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3Byb2dfZjc3X2c9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3Byb2dfZjc3X2c9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19mNzdfZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19mNzdfZyIgPiY2Ci1pZiB0ZXN0ICIkYWNfdGVzdF9GRkxBR1MiID0gc2V0OyB0aGVuCi0gIEZGTEFHUz0kYWNfc2F2ZV9GRkxBR1MKLWVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19mNzdfZyA9IHllczsgdGhlbgotICBpZiB0ZXN0ICJ4JGFjX2N2X2Y3N19jb21waWxlcl9nbnUiID0geHllczsgdGhlbgotICAgIEZGTEFHUz0iLWcgLU8yIgorICBpZiB0ZXN0ICJ4JGFjX2N0X0RVTVBCSU4iID0geDsgdGhlbgorICAgIERVTVBCSU49IjoiCiAgIGVsc2UKLSAgICBGRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICJ4JGFjX2N2X2Y3N19jb21waWxlcl9nbnUiID0geHllczsgdGhlbgotICAgIEZGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgRkZMQUdTPQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCiAgIGZpCiBmaQogCi1HNzc9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorICAgICpDT0ZGKikKKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgRFVNUEJJTj06CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KIAogCiAKLSMgQXV0b2NvbmYgMi4xMydzIEFDX09CSkVYVCBhbmQgQUNfRVhFRVhUIG1hY3JvcyBvbmx5IHdvcmtzIGZvciBDIGNvbXBpbGVycyEKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X25tX2ludGVyZmFjZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mNSkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JjUpCisgIGNhdCBjb25mdGVzdC5vdXQgPiY1CisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X25tX2ludGVyZmFjZSIgPiY2OyB9CisKICMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3N5c19tYXhfY21kX2xlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAgIGk9MAogICB0ZXN0c3RyaW5nPSJBQkNEIgpAQCAtNzE0MCw3ICs4NDQyLDcgQEAKICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CiAgICAgOzsKIAotICBjeWd3aW4qIHwgbWluZ3cqKQorICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQogICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCiAgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KICAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLApAQCAtNzE1MSw2ICs4NDUzLDExIEBACiAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CiAgICAgOzsKIAorICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKwogICBhbWlnYW9zKikKICAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCiAgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KQEAgLTcxOTUsNyArODUwMiw3IEBACiAgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKICAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCiAgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbIAldLy8nYAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWwkgXS8vJ2AKICAgICBlbHNlCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKICAgICBmaQpAQCAtNzIwNiwyMCArODUxMywyOCBAQAogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCiAgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCiAgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQotICAgICAgd2hpbGUgKHRlc3QgIlgiYCRTSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKLQkgICAgICAgPSAiWFgkdGVzdHN0cmluZyIpID4vZGV2L251bGwgMj4mMSAmJgotCSAgICAgIG5ld19yZXN1bHQ9YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgICYmCi0JICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPSRuZXdfcmVzdWx0ICYmCisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZnVuY19mYWxsYmFja19lY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKIAkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKICAgICAgIGRvCiAgICAgICAgIGk9YGV4cHIgJGkgKyAxYAogICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKICAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAogICAgICAgdGVzdHN0cmluZz0KLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24gbWFzc2l2ZQotICAgICAgIyBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGxpbmtlci4KLSAgICAgICMgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKICAgICBmaQogICAgIDs7CkBAIC03MjI4LDIyICs4NTQzLDExNTkgQEAKIGZpCiAKIGlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vbmUiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSIgPiY1CiskYXNfZWNobyAibm9uZSIgPiY2OyB9CitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsgfQorIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKK3hzaV9zaGVsbD1ubworKCBfbHRfZHVtbXk9ImEvYi9jIgorICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgeHNpX3NoZWxsPXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR4c2lfc2hlbGwiID4mNQorJGFzX2VjaG8gIiR4c2lfc2hlbGwiID4mNjsgfQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIi4uLiAiID4mNjsgfQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkMSs9XCQyIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICA+L2Rldi9udWxsIDI+JjEgXAorICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3NoZWxsX2FwcGVuZCIgPiY1CiskYXNfZWNobyAiJGx0X3NoZWxsX2FwcGVuZCIgPiY2OyB9CisKKworaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCiBmaQogCiAKIAogCiAKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkKK2Nhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKKyAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworICA7OworICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKyAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCisgIDs7Citlc2FjCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICotKi1jeWd3aW4qICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICA7OworZXNhYworCitmaQorCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl90b190b29sX2ZpbGVfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCitjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKK2VzYWMKKworZmkKKwordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjY7IH0KK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz1mYWxzZQorICAgIGZpCisgICAgOzsKKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4WzQtOV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitiZW9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYnNkaVs0NV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgICMgZnVuY193aW4zMl9saWJpZCBhc3N1bWVzIEJTRCBubSwgc28gZGlzYWxsb3cgaXQgaWYgdXNpbmcgTVMgZHVtcGJpbi4KKyAgaWYgKCB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJCU0Qgbm0iICYmIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MqKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitoYWlrdSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18UEEtUklTQ1swLTldXC5bMC05XSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVswLTldWzAtOV0qIFZlcnNpb24gWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKworZmlsZV9tYWdpY19nbG9iPQord2FudF9ub2Nhc2VnbG9iPW5vCitpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG1pbmd3KiB8IHB3MzIqKQorICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKyAgICBlbHNlCisgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworZmkKKworZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorICBhY19jdF9ETExUT09MPSRETExUT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisgICAgRExMVE9PTD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorICBmaQorZWxzZQorICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorZmkKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKyAgICA7OworICAqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworICAgIDs7CisgIGVzYWMKKyAgOzsKKyopCisgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisgIDs7Citlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCit0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gYXIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBUj0kYWNfY3ZfcHJvZ19BUgoraWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFSIiA+JjUKKyRhc19lY2hvICIkQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgIGZvciBhY19wcm9nIGluIGFyCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgQVI9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFSPSRhY19jdF9BUgorICBmaQorZmkKKworOiAke0FSPWFyfQorOiAke0FSX0ZMQUdTPWNydX0KKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FyX2F0X2ZpbGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcl9hdF9maWxlPW5vCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKworaWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorICBhcmNoaXZlcl9saXN0X3NwZWM9CitlbHNlCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorZmkKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorICAgIFNUUklQPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CiskYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorCisKKworCisKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7CisgICopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKwogIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKICMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgpAQCAtNzI1NSwzMyArOTcwNywxOCBAQAogIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCiBzeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJwogCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL14uIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMTsvcCciCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotCiAjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgogY2FzZSAkaG9zdF9vcyBpbgogYWl4KikKICAgc3ltY29kZT0nW0JDRFRdJwogICA7OwotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICBzeW1jb2RlPSdbQUJDREdJU1RXXScKICAgOzsKLWhwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCitocHV4KikKICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KICAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKICAgZmkKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLSAgOzsKLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJwotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLSAgZmkKICAgOzsKIGlyaXgqIHwgbm9uc3RvcHV4KikKICAgc3ltY29kZT0nW0JDREVHUlNUXScKQEAgLTczMDYsNTcgKzk3NDMsODYgQEAKICAgOzsKIGVzYWMKIAotIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi1vcHRfY3I9Ci1jYXNlICRidWlsZF9vcyBpbgotbWluZ3cqKQotICBvcHRfY3I9YGVjaG8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKLSAgOzsKLWVzYWMKLQogIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCiBjYXNlIGAkTk0gLVYgMj4mMWAgaW4KICpHTlUqIHwgKid3aXRoIEJGRCcqKQogICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7CiBlc2FjCiAKLSMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJjb3JlLCB0aGVuIHdpdGggaXQuCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgogZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwogCiAgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCiAgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCiAKICAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWyAJXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsgCV1bIAldKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKyIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKKyIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAorIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCwgYSwgL1x8fFxyLyk7IHNwbGl0KGFbMl0sIHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IHNbMV0sIHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgICcgcHJmeD1eJGFjX3N5bXByZngiCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCiAKICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCiAgIHBpcGVfd29ya3M9bm8KIAogICBybSAtZiBjb25mdGVzdCoKLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogY2hhciBubV90ZXN0X3ZhcjsKLXZvaWQgbm1fdGVzdF9mdW5jKCl7fQordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgogaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLUVPRgorX0xUX0VPRgogCi0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KICAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KICAgICBubGlzdD1jb25mdGVzdC5ubQotICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0XCIiKSA+JjUKLSAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0KSAyPiY1CisgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3RcIiI7IH0gPiY1CisgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgogICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KICAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCiAJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCkBAIC03MzY1LDU3ICs5ODMxLDcxIEBACiAgICAgICBmaQogCiAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgICBpZiBncmVwICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JaWYgZ3JlcCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQkgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi1FT0YKK19MVF9FT0YKIAkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KLQkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCiAKLQkgIGNhdCA8PEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCi0jIGRlZmluZSBsdF9wdHJfdCB2b2lkICoKLSNlbHNlCi0jIGRlZmluZSBsdF9wdHJfdCBjaGFyICoKLSMgZGVmaW5lIGNvbnN0Ci0jZW5kaWYKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAogCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gKi8KLWNvbnN0IHN0cnVjdCB7CisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgewogICBjb25zdCBjaGFyICpuYW1lOwotICBsdF9wdHJfdCBhZGRyZXNzOworICB2b2lkICAgICAgICphZGRyZXNzOwogfQotbHRfcHJlbG9hZGVkX3N5bWJvbHNbXSA9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQogewotRU9GCi0JICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsIChsdF9wdHJfdCkgXCZcMn0sLyIgPCAiJG5saXN0IiB8IGdyZXAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0JICBjYXQgPDxcRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSAgezAsIChsdF9wdHJfdCkgMH0KKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQogfTsKIAorLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgotRU9GCitfTFRfRU9GCiAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgogCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCiAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgogCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgotCSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2xpbmspIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCiAJICAgIHBpcGVfd29ya3M9eWVzCiAJICBmaQotCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUwogCWVsc2UKIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQogCWZpCkBAIC03NDQ1LDE3ICs5OTI1LDE1MDEgQEAKICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CiBmaQogaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZhaWxlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1mYWlsZWQiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKKyRhc19lY2hvICJmYWlsZWQiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBvayIgPiY1Ci1lY2hvICIke0VDSE9fVH1vayIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvayIgPiY1CiskYXNfZWNobyAib2siID4mNjsgfQogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9vYmpkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNyb290IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zeXNyb290OworZWxzZQorICB3aXRoX3N5c3Jvb3Q9bm8KK2ZpCisKKworbHRfc3lzcm9vdD0KK2Nhc2UgJHt3aXRoX3N5c3Jvb3R9IGluICMoCisgeWVzKQorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgIGZpCisgICA7OyAjKAorIC8qKQorICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgOzsgIygKKyBub3wnJykKKyAgIDs7ICMoCisgKikKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfc3lzcm9vdH0iID4mNQorJGFzX2VjaG8gIiR7d2l0aF9zeXNyb290fSIgPiY2OyB9CisgICBhc19mbl9lcnJvciAkPyAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKyAgIDs7Citlc2FjCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK2ZpCisKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2NjX25lZWRzX2JlbGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCitlbHNlCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCitpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorICAgIE1BTklGRVNUX1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorICBmaQorZWxzZQorICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorZmkKKwordGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisgIE1BTklGRVNUX1RPT0w9OgorZmkKKworCisKKworCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEU1lNVVRJTD0kYWNfY3ZfcHJvZ19EU1lNVVRJTAoraWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgorICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgorICAgIERTWU1VVElMPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAorICBmaQorZWxzZQorICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfTk1FRElUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19OTUVESVQ9IiROTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK05NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKK2lmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTk1FRElUIiA+JjUKKyRhc19lY2hvICIkTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCisgIGFjX2N0X05NRURJVD0kTk1FRElUCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X05NRURJVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTk1FRElUPSRhY19jdl9wcm9nX2FjX2N0X05NRURJVAoraWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9OTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgorICAgIE5NRURJVD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBOTUVESVQ9JGFjX2N0X05NRURJVAorICBmaQorZWxzZQorICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0xJUE8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19MSVBPPSIkTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0xJUE89IiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitMSVBPPSRhY19jdl9wcm9nX0xJUE8KK2lmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJUE8iID4mNQorJGFzX2VjaG8gIiRMSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MSVBPIjsgdGhlbgorICBhY19jdF9MSVBPPSRMSVBPCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTElQTys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0xJUE89IiRhY19jdF9MSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0ibGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9MSVBPPSRhY19jdl9wcm9nX2FjX2N0X0xJUE8KK2lmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQorJGFzX2VjaG8gIiRhY19jdF9MSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCisgICAgTElQTz0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBMSVBPPSRhY19jdF9MSVBPCisgIGZpCitlbHNlCisgIExJUE89IiRhY19jdl9wcm9nX0xJUE8iCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MPSIkT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTD0iJHthY190b29sX3ByZWZpeH1vdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTD0kYWNfY3ZfcHJvZ19PVE9PTAoraWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MIiA+JjUKKyRhc19lY2hvICIkT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MIjsgdGhlbgorICBhY19jdF9PVE9PTD0kT1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSIkYWNfY3RfT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0ib3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgorICAgIE9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MPSRhY19jdF9PVE9PTAorICBmaQorZWxzZQorICBPVE9PTD0iJGFjX2N2X3Byb2dfT1RPT0wiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJE9UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w2ND0kYWNfY3ZfcHJvZ19PVE9PTDY0CitpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MNjQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSIkYWNfY3RfT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w2ND0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0CitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MNjQiID0geDsgdGhlbgorICAgIE9UT09MNjQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w2ND0kYWNfY3RfT1RPT0w2NAorICBmaQorZWxzZQorICBPVE9PTDY0PSIkYWNfY3ZfcHJvZ19PVE9PTDY0IgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiY1CisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9mb3JjZV9sb2FkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubworICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiY1CisgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiY1CisgICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCisgICAgICBfbHRfcmVzdWx0PSQ/CisgICAgICBpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgMj4mMSA+L2Rldi9udWxsOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZmkKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYworICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY2OyB9CisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuWzAxMl0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCTEwLiopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisgICAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGZpCisgICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiIgJiYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gIm5vIjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCisKK2ZvciBhY19oZWFkZXIgaW4gZGxmY24uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiZGxmY24uaCIgImFjX2N2X2hlYWRlcl9kbGZjbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisKKworIyBTZXQgb3B0aW9ucworZW5hYmxlX3dpbjMyX2RsbD15ZXMKKworY2FzZSAkaG9zdCBpbgorKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWNlZ2NjKikKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorICBhY19jdl9wcm9nX0FTPSIkQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUz0iJHthY190b29sX3ByZWZpeH1hcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBUz0kYWNfY3ZfcHJvZ19BUworaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFTIiA+JjUKKyRhc19lY2hvICIkQVMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FTIjsgdGhlbgorICBhY19jdF9BUz0kQVMKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0FTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FTPSIkYWNfY3RfQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iYXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVM9JGFjX2N2X3Byb2dfYWNfY3RfQVMKK2lmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVMiID0geDsgdGhlbgorICAgIEFTPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUz0kYWNfY3RfQVMKKyAgZmkKK2Vsc2UKKyAgQVM9IiRhY19jdl9wcm9nX0FTIgorZmkKKworICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorICBhY19jdF9ETExUT09MPSRETExUT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisgICAgRExMVE9PTD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorICBmaQorZWxzZQorICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorZmkKKworICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKworICA7OworZXNhYworCit0ZXN0IC16ICIkQVMiICYmIEFTPWFzCisKKworCisKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorCisKKworCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKKworCisKKworCisKKworICAgICAgICBlbmFibGVfZGxvcGVuPW5vCisKKworCisgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zaGFyZWQ9eWVzCitmaQorCisKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3N0YXRpYz15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BpYzsgcGljX21vZGU9IiR3aXRodmFsIgorZWxzZQorICBwaWNfbW9kZT1kZWZhdWx0CitmaQorCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAorCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfb2JqZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKIG1rZGlyIC5saWJzIDI+L2Rldi9udWxsCkBAIC03NDY3LDE0ICsxMTQzMSwyMSBAQAogZmkKIHJtZGlyIC5saWJzIDI+L2Rldi9udWxsCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3Zfb2JqZGlyIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfb2JqZGlyIiA+JjY7IH0KIG9iamRpcj0kbHRfY3Zfb2JqZGlyCiAKIAogCiAKIAorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBMVF9PQkpESVIgIiRsdF9jdl9vYmpkaXIvIgorX0FDRU9GCisKKworCisKIGNhc2UgJGhvc3Rfb3MgaW4KIGFpeDMqKQogICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKQEAgLTc0ODcsMzE0ICsxMTQ1OCwyNiBAQAogICA7OwogZXNhYwogCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCi0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotWHNlZD0nc2VkIC1lIDFzL15YLy8nCi1zZWRfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgJFxcXFxdXCkvXFxcMS9nJwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLWRvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGBcXFxcXVwpL1xcXDEvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKLSMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KLWRlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucwotbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCi0KLSMgQ29uc3RhbnRzOgotcm09InJtIC1mIgotCiAjIEdsb2JhbCB2YXJpYWJsZXM6Ci1kZWZhdWx0X29maWxlPWxpYnRvb2wKK29maWxlPWxpYnRvb2wKIGNhbl9idWlsZF9zaGFyZWQ9eWVzCiAKICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAogIyB3aGljaCBuZWVkcyAnLmxpYicpLgogbGliZXh0PWEKLWx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotb2ZpbGU9IiRkZWZhdWx0X29maWxlIgorCiB3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgogCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1BUj0kYWNfY3ZfcHJvZ19BUgotaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVIiID4mNQotZWNobyAiJHtFQ0hPX1R9JEFSIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgotICBhY19jdF9BUj0kQVIKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0FSIiAmJiBhY19jdl9wcm9nX2FjX2N0X0FSPSJmYWxzZSIKLWZpCi1maQotYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKLWlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9BUiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgQVI9JGFjX2N0X0FSCi1lbHNlCi0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKLWZpCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KLSAgYWNfY3RfUkFOTElCPSRSQU5MSUIKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCIiAmJiBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iOiIKLWZpCi1maQotYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgotaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBSQU5MSUI9JGFjX2N0X1JBTkxJQgotZWxzZQotICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKLWZpCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLVNUUklQPSRhY19jdl9wcm9nX1NUUklQCi1pZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kU1RSSVAiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCi0gIGFjX2N0X1NUUklQPSRTVFJJUAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAiICYmIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IjoiCi1maQotZmkKLWFjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCi1pZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIFNUUklQPSRhY19jdF9TVFJJUAotZWxzZQotICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCi1maQotCi0KIG9sZF9DQz0iJENDIgogb2xkX0NGTEFHUz0iJENGTEFHUyIKIAogIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci10ZXN0IC16ICIkQVMiICYmIEFTPWFzCiB0ZXN0IC16ICIkQ0MiICYmIENDPWNjCiB0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKIHRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAogdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgotdGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKLXRlc3QgLXogIiROTSIgJiYgTk09bm0KLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLXRlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKLXRlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06Ci10ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKIHRlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCiAKLSMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgotb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCi1vbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQotCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gIG9wZW5ic2QqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCi0gICAgOzsKLSAgKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotICAgIDs7Ci0gIGVzYWMKLSAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi1maQotCiBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KICAgY2FzZSAkY2NfdGVtcCBpbgogICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKQEAgLTc4MDMsMTcgKzExNDg2LDE4IEBACiAgICAgKikgYnJlYWs7OwogICBlc2FjCiBkb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAogCiAKICMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCiBmaWxlX21hZ2ljKikKICAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgJE1BR0lDX0NNRCBpbgogW1xcLypdIHwgID86W1xcL10qKQpAQCAtNzgzNyw3ICsxMTUyMSw3IEBACiAJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgIDoKIAkgIGVsc2UKLQkgICAgY2F0IDw8RU9GIDE+JjIKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCiAKICoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCiAqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCkBAIC03ODQ4LDcgKzExNTMyLDcgQEAKICoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KICoqKiBidWctbGlidG9vbEBnbnUub3JnCiAKLUVPRgorX0xUX0VPRgogCSAgZmkgOzsKIAllc2FjCiAgICAgICBmaQpAQCAtNzg2MywxOSArMTE1NDcsMjMgQEAKIAogTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCiBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKKworCisKIGlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmlsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmaWxlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXNlICRNQUdJQ19DTUQgaW4KIFtcXC8qXSB8ICA/OltcXC9dKikKQEAgLTc4OTksNyArMTE1ODcsNyBAQAogCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICA6CiAJICBlbHNlCi0JICAgIGNhdCA8PEVPRiAxPiYyCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgogCiAqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAogKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgpAQCAtNzkxMCw3ICsxMTU5OCw3IEBACiAqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCiAqKiogYnVnLWxpYnRvb2xAZ251Lm9yZwogCi1FT0YKK19MVF9FT0YKIAkgIGZpIDs7CiAJZXNhYwogICAgICAgZmkKQEAgLTc5MjUsMTMgKzExNjEzLDE0IEBACiAKIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgogaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTUFHSUNfQ01EIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiAgIGVsc2UKICAgICBNQUdJQ19DTUQ9OgogICBmaQpAQCAtNzk0MSwzMTEgKzExNjMwLDggQEAKICAgOzsKIGVzYWMKIAotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4qKQotICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLURTWU1VVElMPSRhY19jdl9wcm9nX0RTWU1VVElMCi1pZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kRFNZTVVUSUwiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRFNZTVVUSUwiOyB0aGVuCi0gIGFjX2N0X0RTWU1VVElMPSREU1lNVVRJTAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBkc3ltdXRpbDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9IiRhY19jdF9EU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwiICYmIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9IjoiCi1maQotZmkKLWFjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCi1pZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfRFNZTVVUSUwiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAotZWxzZQotICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCi1maQotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19OTUVESVQ9IiROTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX05NRURJVD0iJHthY190b29sX3ByZWZpeH1ubWVkaXQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1OTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCi1pZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTk1FRElUIiA+JjUKLWVjaG8gIiR7RUNIT19UfSROTUVESVQiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgotICBhY19jdF9OTUVESVQ9JE5NRURJVAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X05NRURJVCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQiICYmIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSI6IgotZmkKLWZpCi1hY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCi1pZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9OTUVESVQiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIE5NRURJVD0kYWNfY3RfTk1FRElUCi1lbHNlCi0gIE5NRURJVD0iJGFjX2N2X3Byb2dfTk1FRElUIgotZmkKLQotCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCi0gICAjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKLSAgICMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQotICAgIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQotICAgIyBsaW5rIGZsYWdzLgotICAgZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKLSAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCi0gICAgIC1keW5hbWljbGliICR7d2x9LXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYwotICAgaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYjsgdGhlbgotICAgICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcwotICAgICBybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCi0gICBmaQotICAgcm0gY29uZnRlc3QuYwotICAgICAgZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY2Ci0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KLSAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCi0gICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCi0gICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjYKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyM10pCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAgZGFyd2luMS4qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAgZGFyd2luKikKLSAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKLSAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50Ci0gICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KLSAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KLSAgIDEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCi0gICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKLSAgIDEwLlswMTJdKikKLSAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgMTAuKikKLSAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwotICAgICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKLSAgICBmaQotICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKLSAgICBlbHNlCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSJ+JE5NRURJVCAtcyBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gXCR7bGlifSIKLSAgICBmaQotICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCi0gICAgICBfbHRfZHN5bXV0aWw9In4kRFNZTVVUSUwgXCRsaWIgfHwgOiIKLSAgICBlbHNlCi0gICAgICBfbHRfZHN5bXV0aWw9Ci0gICAgZmkKLSAgICA7OwotICBlc2FjCi0KLQotZW5hYmxlX2Rsb3Blbj15ZXMKLWVuYWJsZV93aW4zMl9kbGw9eWVzCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgb3IgLS1kaXNhYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKLQotZmk7Ci10ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGljIG9yIC0td2l0aG91dC1waWMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9waWMiCi0gIHBpY19tb2RlPSIkd2l0aHZhbCIKLWVsc2UKLSAgcGljX21vZGU9ZGVmYXVsdAotZmk7Ci10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKLQogIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLXRhZ25hbWU9CisKIGx0X3NhdmVfQ0M9IiRDQyIKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwpAQCAtODI2OCw2ICsxMTY1NCwxMSBAQAogbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JwogCiAKKworCisKKworCiAjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgogTFRDQz0ke0xUQ0MtIiRDQyJ9CiAKQEAgLTgyNzcsMzUgKzExNjY4LDQ3IEBACiAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgogY29tcGlsZXI9JENDCiAKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQwogCiAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQogYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAogZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCiBfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCiskUk0gY29uZnRlc3QqCiAKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSAtciBjb25mdGVzdCoKKyRSTSAtciBjb25mdGVzdCoKIAogCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KIAogbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9CiAKIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJworICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCiAKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKQEAgLTgzMTcsMjUgKzExNzIwLDI1IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgzMjA6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjgzMjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCiAgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKICAgICAgZmkKICAgIGZpCi0gICAkcm0gY29uZnRlc3QqCisgICAkUk0gY29uZnRlc3QqCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9CiAKIGlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgogICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKQEAgLTgzNDUsMTIgKzExNzQ4LDE1IEBACiAKIGZpCiAKLWx0X3Byb2dfY29tcGlsZXJfd2w9CisKKworCisKKworICBsdF9wcm9nX2NvbXBpbGVyX3dsPQogbHRfcHJvZ19jb21waWxlcl9waWM9CiBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2CiAKICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwpAQCAtODM2NiwxNyArMTE3NzIsMjUgQEAKICAgICAgIDs7CiAKICAgICBhbWlnYW9zKikKLSAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYwogICAgICAgOzsKIAogICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgogICAgICAgOzsKIAotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKICAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKICAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCiAgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCkBAIC04MzkwLDYgKzExODA0LDI2IEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCiAgICAgICA7OwogCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCiAgICAgaW50ZXJpeFszLTldKikKICAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCiAgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KQEAgLTg0MDIsMjkgKzExODM2LDI5IEBACiAgICAgICBlbmFibGVfc2hhcmVkPW5vCiAgICAgICA7OwogCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKICAgICBzeXN2NCpNUCopCiAgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCiAJbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYwogICAgICAgZmkKICAgICAgIDs7CiAKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KICAgICAqKQogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwogICAgICAgOzsKICAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVhsaW5rZXIgJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1YY29tcGlsZXIgLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKICAgZWxzZQogICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KICAgICBjYXNlICRob3N0X29zIGluCkBAIC04NDM3LDE4ICsxMTg3MSw4IEBACiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKICAgICAgIGZpCiAgICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFub2NvbW1vbicKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICAgICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwogCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQogICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwogICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCkBAIC04NDc2LDE5ICsxMTkwMCwzNCBAQAogICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwogICAgICAgOzsKIAotICAgIG5ld3NvczYpCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCiAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCiAgICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKwk7OworICAgICAgbmFnZm9yKikKKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAogCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCiAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKQEAgLTg1MDAsMjUgKzExOTM5LDQyIEBACiAgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgogICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCiAgICAgICAgIDs7CisgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctcXBpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXFzdGF0aWNsaW5rJworCTs7CiAgICAgICAqKQotICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPScnCisJICA7OwogCSpTdW5cIEMqKQogCSAgIyBTdW4gQyA1LjkKIAkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKIAkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKIAkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCiAJICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJwotCSAgOzsKIAllc2FjCiAJOzsKICAgICAgIGVzYWMKICAgICAgIDs7CiAKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCiAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQogICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKICAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgpAQCAtODUzMyw3ICsxMTk4OSw3IEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQogCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OwogICAgICAgKikKIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CkBAIC04NTgxLDIxICsxMjAzNywzOCBAQAogICAgIGVzYWMKICAgZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2CitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYwogCiAjCiAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCiAjCiBpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCiAgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgpAQCAtODYwNywyNSArMTIwODAsMjUgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6ODYxMDogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6ODYxNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPXllcwogICAgICBmaQogICAgZmkKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSBjb25mdGVzdCoKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KIAogaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPSB4eWVzOyB0aGVuCiAgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWMgaW4KQEAgLTg2MzgsMjQgKzEyMTExLDI1IEBACiBmaQogCiBmaQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KLSAgICA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCi0gICAgOzsKLWVzYWMKKworCisKKworCisKKworCisKKwogCiAjCiAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCiAjCiB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubwogICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKQEAgLTg2NjcsNyArMTIxNDEsNyBAQAogICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgogICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCiAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAogICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgogICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKQEAgLTg2NzYsMTIgKzEyMTUwLDEyIEBACiAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCiAgICAgIGZpCiAgICBmaQotICAgJHJtIC1yIGNvbmZ0ZXN0KgorICAgJFJNIC1yIGNvbmZ0ZXN0KgogICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KIAogaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPSB4eWVzOyB0aGVuCiAgICAgOgpAQCAtODY5MCwxMyArMTIxNjQsMTggQEAKIGZpCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubwotICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKICAgIG1rZGlyIGNvbmZ0ZXN0CiAgICBjZCBjb25mdGVzdAogICAgbWtkaXIgb3V0CkBAIC04NzExLDgzICsxMjE5MCwxNDggQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6ODcxNDogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTo4NzE4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CiAgICB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgogICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCiAgICAgIGZpCiAgICBmaQogICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIGNvbmZ0ZXN0KgogICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgogICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CiAgICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKwogCiAKIGhhcmRfbGlua3M9Im5vdHRlc3RlZCIKIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KICAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQogICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCisgICRSTSBjb25mdGVzdCoKICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KICAgdG91Y2ggY29uZnRlc3QuYQogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CiAgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CiAgICAgbmVlZF9sb2Nrcz13YXJuCiAgIGZpCiBlbHNlCiAgIG5lZWRfbG9ja3M9bm8KIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KIAogICBydW5wYXRoX3Zhcj0KICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ci0gIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCiAgIGFyY2hpdmVfY21kcz0KICAgYXJjaGl2ZV9leHBzeW1fY21kcz0KLSAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0KLSAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIGNvbXBpbGVyX25lZWRzX29iamVjdD1ubworICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCiAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ci0gIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBoYXJkY29kZV9hdXRvbWF0aWM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT1ubwogICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQogICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPQogICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQotICBoYXJkY29kZV9kaXJlY3Q9bm8KICAgaGFyZGNvZGVfbWludXNfTD1ubwogICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGluaGVyaXRfcnBhdGg9bm8KICAgbGlua19hbGxfZGVwbGlicz11bmtub3duCi0gIGhhcmRjb2RlX2F1dG9tYXRpYz1ubwogICBtb2R1bGVfY21kcz0KICAgbW9kdWxlX2V4cHN5bV9jbWRzPQotICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KLSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KKyAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjPQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KICAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgogICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAogICBpbmNsdWRlX2V4cHN5bXM9CkBAIC04ODAzLDE5ICsxMjM0Nyw5IEBACiAgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCiAgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KICAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKIAogICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCkBAIC04ODMzLDcgKzEyMzY3LDMzIEBACiAgIGVzYWMKIAogICBsZF9zaGxpYnM9eWVzCisKKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgorICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubwogICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKwkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCisJIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgorCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bMi05XSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgWzMtOV0qKSA7OworCSAgKikKKwkgICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCTs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSIgPSB5ZXM7IHRoZW4KICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQogICAgIHdsYXJjPScke3dsfScKIApAQCAtODg0MSwxNiArMTI0MDEsMTcgQEAKICAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KICAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCiAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGVsc2UKLSAgCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CiAgICAgZmkKICAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4vZGV2L251bGxgIGluCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwogICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQogICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KICAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KQEAgLTg4NjQsMzQgKzEyNDI1LDM2IEBACiAgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCiAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KIAlsZF9zaGxpYnM9bm8KLQljYXQgPDxFT0YgMT4mMgorCWNhdCA8PF9MVF9FT0YgMT4mMgogCi0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKICoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgogKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91Ci0qKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICi0qKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCiAKLUVPRgorX0xUX0VPRgogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYwogICAgICAgOzsKIAogICAgIGJlb3MqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKIAkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCiAJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQpAQCAtODkwMSwxNiArMTI0NjQsMTggQEAKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCiAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJwogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCiAKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwogCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKIAkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgpAQCAtODkyNiw2ICsxMjQ5MSwxMSBAQAogICAgICAgZmkKICAgICAgIDs7CiAKKyAgICBoYWlrdSopCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKICAgICBpbnRlcml4WzMtOV0qKQogICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCkBAIC04OTQxLDYwICsxMjUxMSw5NSBAQAogICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKICAgICAgIDs7CiAKLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQorICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgdG1wX2RpZXQ9bm8KKyAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGRpZXRcICopIHRtcF9kaWV0PXllczs7CSMgbGludXgtZGlldGxpYmMgd2l0aCBzdGF0aWMgbGlua2luZyAoIWRpZXQtZHluKQorCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgdGhlbgorCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJwogCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwogCSAgOzsKLQlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCiAJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKLQllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CiAJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CiAJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKIAkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKIAlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgogCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbY0NdKiB8IGJneGxbY0NdKiB8IG1waXhsW2NDXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICA7OwogCWVzYWMKIAljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KIAkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCiAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CiAJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqKQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7CiAJZXNhYwogCWFyY2hpdmVfY21kcz0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAotCWlmIHRlc3QgJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyA9IHllczsgdGhlbgotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQorICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKICAgICAgIGVsc2UKLQlsZF9zaGxpYnM9bm8KKyAgICAgICAgbGRfc2hsaWJzPW5vCiAgICAgICBmaQogICAgICAgOzsKIAogICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgogCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKIAl3bGFyYz0KICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCiAJbGRfc2hsaWJzPW5vCi0JY2F0IDw8RU9GIDE+JjIKKwljYXQgPDxfTFRfRU9GIDE+JjIKIAogKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKICoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKQEAgLTkwMDMsMTAgKzEyNjA4LDEwIEBACiAqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwogKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCiAKLUVPRgotICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwogICAgICAgZmkKQEAgLTkwMjgsMTAgKzEyNjMzLDE0IEBACiBfTFRfRU9GCiAJOzsKIAkqKQotCSAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJICBlbHNlCiAJICAgIGxkX3NobGlicz1ubwogCSAgZmkKQEAgLTkwNDcsOSArMTI2NTYsOSBAQAogICAgICAgOzsKIAogICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCkBAIC05MDg5LDEwICsxMjY5OCwxMiBAQAogICAgICAgZWxzZQogCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgogCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLQlpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCSMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbAorCSMgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCiAJZWxzZQotCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCiAJZmkKIAlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCiAKQEAgLTkxMDEsMTAgKzEyNzEyLDEwIEBACiAJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KIAljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCiAJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAJICAgIGJyZWFrCi0gIAkgIGZpCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKIAkgIGRvbmUKIAkgIDs7CiAJZXNhYwpAQCAtOTEyMSwyOCArMTI3MzIsMzAgQEAKIAogICAgICAgYXJjaGl2ZV9jbWRzPScnCiAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGZpbGVfbGlzdF9zcGVjPScke3dsfS1mLCcKIAogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQogCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawogCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwogCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAogCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CiAJICBlbHNlCi0gIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLSAgCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CiAJICBmaQogCSAgOzsKIAllc2FjCkBAIC05MTUzLDggKzEyNzY2LDggQEAKICAgICAgIGVsc2UKIAkjIG5vdCB1c2luZyBnY2MKIAlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLSAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgogCSAgc2hhcmVkX2ZsYWc9Jy1HJwogCWVsc2UKIAkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgpAQCAtOTE2NSw2ICsxMjc3OCw3IEBACiAJZmkKICAgICAgIGZpCiAKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tYmV4cGFsbCcKICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAogICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKQEAgLTkxNzIsMTIgKzEyNzg2LDE1IEBACiAJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCiAJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTkxODgsNjQgKzEyODA1LDQ5IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9JworICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpCiBmaQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisgIGZpCiAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAKLSAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCWFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCitmaQorCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCiAJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwogCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ii16IG5vZGVmcyIKIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCiAJZWxzZQotCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTkyNTYsNTcgKzEyODU4LDQ0IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9JworICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpCiBmaQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisgIGZpCiAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworZmkKIAogCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKIAkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KIAkgIG5vX3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVybm90b2snCiAJICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm9rJwotCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJGNvbnZlbmllbmNlJworCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBlbHNlCisJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJGNvbnZlbmllbmNlJworCSAgZmkKIAkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcwogCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKQEAgLTkzMTUsODUgKzEyOTA0LDExNyBAQAogICAgICAgOzsKIAogICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIGxkX3NobGlicz1ubworICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCiAgICAgICA7OwogCiAgICAgYnNkaVs0NV0qKQogICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPS1yZHluYW1pYwogICAgICAgOzsKIAotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0gICAgICBsaWJleHQ9bGliCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSd0cnVlJwotICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBjbCopCisJIyBOYXRpdmUgTVNWQworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJZmlsZV9saXN0X3NwZWM9J0AnCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgIGVsc2UKKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgIGZpfgorCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgbGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisJICAgICouZXhlfCouRVhFKSA7OworCSAgICAqKQorCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorCSAgICAgIDs7CisJICBlc2FjfgorCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisJICBmaScKKwk7OworICAgICAgKikKKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisJOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQotICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuWzAxMl0pCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KLSAgICAgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgYXJjaGl2ZV9jbWRzPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIG1vZHVsZV9leHBzeW1fY21kcz0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgbW9kdWxlX2NtZHM9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHM9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfYXV0b21hdGljPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworICBlbHNlCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKKyAgZmkKKyAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisKKyAgZWxzZQorICBsZF9zaGxpYnM9bm8KKyAgZmkKKwogICAgICAgOzsKIAogICAgIGRndXgqKQpAQCAtOTQyNyw3ICsxMzA0OCw3IEBACiAKICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCiAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwogICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwpAQCAtOTQzNSw5ICsxMzA1Niw5IEBACiAKICAgICBocHV4OSopCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgIGZpCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgpAQCAtOTQ1MCwxOCArMTMwNzEsMTggQEAKICAgICAgIDs7CiAKICAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCiAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgZmkKICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JytiICRsaWJkaXInCiAJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0KIAloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwogCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKLQogCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCiAJaGFyZGNvZGVfbWludXNfTD15ZXMKQEAgLTk0NjksMTYgKzEzMDkwLDE2IEBACiAgICAgICA7OwogCiAgICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgogCWNhc2UgJGhvc3RfY3B1IGluCiAJaHBwYSo2NCopCiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAlpYTY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJKikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWVzYWMKICAgICAgIGVsc2UKQEAgLTk0OTAsNyArMTMxMTEsNDYgQEAKIAkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKworCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0CisJICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX19iKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTIC1iIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA9IHh5ZXM7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworZWxzZQorICAgIGFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKK2ZpCisKIAkgIDs7CiAJZXNhYwogICAgICAgZmkKQEAgLTk1MDAsMTIgKzEzMTYwLDEyIEBACiAKIAljYXNlICRob3N0X2NwdSBpbgogCWhwcGEqNjQqfGlhNjQqKQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nK2IgJGxpYmRpcicKIAkgIGhhcmRjb2RlX2RpcmVjdD1ubwogCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwogCSAgOzsKIAkqKQogCSAgaGFyZGNvZGVfZGlyZWN0PXllcworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwogCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJwogCiAJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILApAQCAtOTUxOCwxOCArMTMxNzgsNDkgQEAKIAogICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKK2Vsc2UKKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJZmkKICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwogICAgICAgOzsKIAogICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgogCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKICAgICAgIGVsc2UKIAlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgpAQCAtOTU0NywxMSArMTMyMzgsMTUgQEAKICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KICAgICAgIDs7CiAKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKwogICAgIG9wZW5ic2QqKQogICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KIAloYXJkY29kZV9kaXJlY3Q9eWVzCiAJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCkBAIC05NTY3LDcgKzEzMjYyLDcgQEAKIAkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCiAJICAgICA7OwogCSAgZXNhYwotICAgICAgICBmaQorCWZpCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzPW5vCiAgICAgICBmaQpAQCAtOTU3NywxOCArMTMyNzIsMTkgQEAKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgICAgYXJjaGl2ZV9jbWRzPSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKICAgICAgIDs7CiAKICAgICBvc2YzKikKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogICAgICAgZWxzZQogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKICAgICAgIDs7CkBAIC05NTk2LDMyICsxMzI5Miw0MyBAQAogICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICBlbHNlCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwogCiAJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJwogICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgOzsKIAogICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiB0ZXh0JworICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAgICAgICBlbHNlCi0Jd2xhcmM9JycKLQlhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYwogICAgICAgZmkKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KQEAgLTk2MzEsNyArMTMzMzgsNyBAQAogCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCiAJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAogCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCiAJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCiAJZWxzZQpAQCAtOTcyMCwxOCArMTM0MjcsMTggQEAKICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS16LG5vZGVmcycKICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIsJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwogICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CZXhwb3J0JwogICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwogCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZmkKICAgICAgIDs7CiAKQEAgLTk3NDUsMTIgKzEzNDUyLDM2IEBACiAgICAgICBsZF9zaGxpYnM9bm8KICAgICAgIDs7CiAgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworCTs7CisgICAgICBlc2FjCisgICAgZmkKICAgZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlicyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KIHRlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCit3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKworCisKKworCisKKworCisKICMKICMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KICMKQEAgLTk3NjgsODMgKzEzNDk5LDIzOSBAQAogICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQogICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCiAgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKIAotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisJaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCi0JcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCi0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12Ci0gICAgICAgIGxpbmtlcl9mbGFncz0tdgotICAgICAgICB2ZXJzdHJpbmc9Ci0gICAgICAgIG91dHB1dF9vYmpkaXI9LgotICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgc29uYW1lPWNvbmZ0ZXN0CisJICBsaWI9Y29uZnRlc3QKKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorCSAgZGVwbGlicz0KKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCisJICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotICAgICAgICBlbHNlCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKLSAgICAgICAgZmkKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJICB0aGVuCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPW5vCisJICBlbHNlCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPXllcworCSAgZmkKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjCiAgICAgICA7OwogICAgIGVzYWMKICAgZmkKICAgOzsKIGVzYWMKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjYKLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KIAogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKICAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OwogICBlc2FjCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gIGlmIGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJzsnID4vZGV2L251bGwgOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbQS1aYS16XTpcKSxcMSxnIiA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKyAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgorICAqXDsqKQogICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKICAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKICAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKICAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgZWxzZQotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICBmaQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKICAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKICAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCiAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQpAQCAtOTg1Nyw3ICsxMzc0NCw3IEBACiAJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCiAgICAgZmkKICAgZG9uZQotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyB8IGF3ayAnCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKIEJFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKICAgbHRfZm9vPSIiOwogICBsdF9jb3VudD0wOwpAQCAtOTg3NywxMCArMTM3NjQsMjkgQEAKICAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW2x0X2Zvb10rKzsgfQogICBpZiAobHRfZnJlcVtsdF9mb29dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9CiB9J2AKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICRsdF9zZWFyY2hfcGF0aF9zcGVjYAorICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKKyAgIyBmb3IgdGhlc2UgaG9zdHMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKKyAgICAgICRTRUQgJ3MsL1woW0EtWmEtel06XCksXDEsZydgIDs7CisgIGVzYWMKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAogZWxzZQogICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCiBmaQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCiBuZWVkX2xpYl9wcmVmaXg9dW5rbm93bgogaGFyZGNvZGVfaW50b19saWJzPW5vCiAKQEAgLTk5MTcsNyArMTM4MjMsNyBAQAogICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQogICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKIAkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KIAk6CiAgICAgICBlbHNlCiAJY2FuX2J1aWxkX3NoYXJlZD1ubwpAQCAtOTk0Myw5ICsxMzg0OSwxOCBAQAogICA7OwogCiBhbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCiAgIDs7CiAKIGJlb3MqKQpAQCAtOTk2OCw2MSArMTM4ODMsMTEyIEBACiAgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwogICA7OwogCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgIHZlcnNpb25fdHlwZT13aW5kb3dzCiAgIHNocmV4dF9jbWRzPSIuZGxsIgogICBuZWVkX3ZlcnNpb249bm8KICAgbmVlZF9saWJfcHJlZml4PW5vCiAKLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYwogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCiAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwogICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KICAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgogICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJwogICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CiAgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKKyAgICAgICAkUk0gXCRkbHBhdGgnCiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGN5Z3dpbiopCiAgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKICAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSIKICAgICAgIDs7Ci0gICAgbWluZ3cqKQorICAgIG1pbmd3KiB8IGNlZ2NjKikKICAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CiAgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQogICAgICAgOzsKICAgICBwdzMyKikKICAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwogICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwogICAgICAgOzsKICAgICBlc2FjCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworCisgICosY2wqKQorICAgICMgTmF0aXZlIE1TVkMKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJwogICAgIDs7CiAKICAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwogICAgIDs7CiAgIGVzYWMKLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCiAgIHNobGlicGF0aF92YXI9UEFUSAogICA7OwpAQCAtMTAwMzIsNyArMTM5OTgsNyBAQAogICB2ZXJzaW9uX3R5cGU9ZGFyd2luCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICkBAIC0xMDEwOSw2ICsxNDA3NSwxOSBAQAogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgIDs7CiAKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwogaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCiAgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KICAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCkBAIC0xMDEzMSwxOCArMTQxMTAsMTggQEAKICAgICBmaQogICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKICAgICA7OwotICAgaHBwYSo2NCopCi0gICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgICA7OwotICAgKikKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCiAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgogICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSApAQCAtMTAxNTEsOCArMTQxMzAsMTAgQEAKICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwogICAgIDs7CiAgIGVzYWMKLSAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KICAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKICAgOzsKIAogaW50ZXJpeFszLTldKikKQEAgLTEwMjEwLDcgKzE0MTkxLDcgQEAKICAgOzsKIAogIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KQEAgLTEwMjE5LDYgKzE0MjAwLDQxIEBACiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisJIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisKK2ZpCisKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKwogICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KICAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCiAgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCkBAIC0xMDIyNiw3ICsxNDI0Miw3IEBACiAKICAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCiAgIGZpCiAKQEAgLTEwMjQzLDcgKzE0MjU5LDcgQEAKICAgdmVyc2lvbl90eXBlPXN1bm9zCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCiAgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCkBAIC0xMDI2NCwxNCArMTQyODAsMTYgQEAKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICA7OwogCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4CisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCiAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwogICA7OwogCiBvcGVuYnNkKikKQEAgLTEwMjgwLDEzICsxNDI5OCwxMyBAQAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgogICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OwogICBlc2FjCiAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKIAlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KQEAgLTEwMzU4LDcgKzE0Mzc2LDYgQEAKICAgICBzbmkpCiAgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCiAgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAogICAgICAgOzsKICAgICBzaWVtZW5zKQpAQCAtMTAzODksMTMgKzE0NDA2LDEyIEBACiAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwogICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBlbHNlCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIHNjbzMuMnY1KikKICAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCkBAIC0xMDQwNSw2ICsxNDQyMSwxNyBAQAogICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCiAgIDs7CiAKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKIHV0czQqKQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCkBAIC0xMDQxNiw0MyArMTQ0NDMsMTI2IEBACiAgIGR5bmFtaWNfbGlua2VyPW5vCiAgIDs7CiBlc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9CiB0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi1maQotCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi1maQotCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgotCiB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gIiA+JjY7IH0KIGhhcmRjb2RlX2FjdGlvbj0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8fCBcCi0gICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8IFwKK2lmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8fAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fAogICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gIlh5ZXMiIDsgdGhlbgogCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgogICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSBubyAmJgogICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCiAgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKICAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAhPSBubyAmJgorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAhPSBubyAmJgogICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KICAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgogICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKQEAgLTEwNDY1LDEwICsxNDU3NSwxMSBAQAogICAjIGRpcmVjdG9yaWVzLgogICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb24iID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQogCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgoraWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRpbmhlcml0X3JwYXRoIiA9IHllczsgdGhlbgogICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwogZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fApAQCAtMTA0NzcsMzcgKzE0NTg4LDEyIEBACiAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKIGZpCiAKLXN0cmlwbGliPQotb2xkX3N0cmlwbGliPQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCBncmVwICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KLSAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKLSAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotZWxzZQotIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgIGRhcndpbiopCi0gICAgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KLSAgICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCi0gICAgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKLSAgICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICAgICAgIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLSAgICAgICA7OwotICAgKikKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotICAgIDs7Ci0gIGVzYWMKLWZpCiAKLWlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorCisKKworCisgIGlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgogICBlbmFibGVfZGxvcGVuPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCkBAIC0xMDUyMiw4MyArMTQ2MDgsNTUgQEAKICAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKICAgICA7OwogCi0gIG1pbmd3KiB8IHB3MzIqKQorICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgOzsKKyAgICA7OwogCiAgIGN5Z3dpbiopCiAgICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OworICAgIDs7CiAKICAgZGFyd2luKikKICAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGRsICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgZGxvcGVuICgpOwogaW50CiBtYWluICgpCiB7Ci1kbG9wZW4gKCk7CityZXR1cm4gZGxvcGVuICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9kbF9kbG9wZW49bm8KKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCiBlbHNlCiAKQEAgLTEwNjA4LDQ2MSArMTQ2NjYsMTcxIEBACiAKIGZpCiAKLSAgIDs7CisgICAgOzsKIAogICAqKQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hsX2xvYWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfc2hsX2xvYWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgc2hsX2xvYWQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBzaGxfbG9hZC4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBzaGxfbG9hZCBpbm5vY3VvdXNfc2hsX2xvYWQKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgc2hsX2xvYWQgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgc2hsX2xvYWQKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBzaGxfbG9hZCAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9zaGxfbG9hZCkgfHwgZGVmaW5lZCAoX19zdHViX19fc2hsX2xvYWQpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IHNobF9sb2FkOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IHNobF9sb2FkOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfc2hsX2xvYWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfc2hsX2xvYWQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGRsZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIHNobF9sb2FkICgpOwogaW50CiBtYWluICgpCiB7Ci1zaGxfbG9hZCAoKTsKK3JldHVybiBzaGxfbG9hZCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZGxkX3NobF9sb2FkPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxkX3NobF9sb2FkID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGRsb3BlbiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGRsb3Blbi4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBkbG9wZW4gaW5ub2N1b3VzX2Rsb3BlbgotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBkbG9wZW4gKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZGxvcGVuCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZGxvcGVuICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2Rsb3BlbikgfHwgZGVmaW5lZCAoX19zdHViX19fZGxvcGVuKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBkbG9wZW47Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gZGxvcGVuOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfZGxvcGVuPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2Rsb3Blbj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Rsb3BlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2Rsb3BlbiA9IHllczsgdGhlbgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIGRsb3BlbiAoKTsKIGludAogbWFpbiAoKQogewotZGxvcGVuICgpOworcmV0dXJuIGRsb3BlbiAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZGxfZGxvcGVuPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZGxfZGxvcGVuPW5vCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxzdmxkICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgZGxvcGVuICgpOwogaW50CiBtYWluICgpCiB7Ci1kbG9wZW4gKCk7CityZXR1cm4gZGxvcGVuICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4gPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9kbGRfbGluaytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsZF9kbGRfbGluays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZGxkICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgZGxkX2xpbmsgKCk7CiBpbnQKIG1haW4gKCkKIHsKLWRsZF9saW5rICgpOworcmV0dXJuIGRsZF9saW5rICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA9IHh5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCiBmaQogCkBAIC0xMTEwMSwxOCArMTQ4NjksMTggQEAKICAgICBzYXZlX0xJQlM9IiRMSUJTIgogICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTExMTUgImNvbmZpZ3VyZSIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWYgSEFWRV9ETEZDTl9ICkBAIC0xMTE1MywxMSArMTQ5MjEsMTMgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwogI2VuZGlmCiAKLXZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQogaW50IG1haW4gKCkKIHsKICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CkBAIC0xMTE2NiwyMCArMTQ5MzYsMjQgQEAKICAgaWYgKHNlbGYpCiAgICAgewogICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7Ci0gICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CiAgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KICAgICB9CiAgIGVsc2UKICAgICBwdXRzIChkbGVycm9yICgpKTsKIAotICAgIGV4aXQgKHN0YXR1cyk7CisgIHJldHVybiBzdGF0dXM7CiB9Ci1FT0YKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xMTE5NiwyMyArMTQ5NzAsMjMgQEAKIAogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQogCiAgICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCiAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKIGVsc2UKICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgogICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMTIxNSAiY29uZmlndXJlIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZiBIQVZFX0RMRkNOX0gKQEAgLTExMjUzLDExICsxNTAyNywxMyBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CiAjZW5kaWYKIAotdm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CiBpbnQgbWFpbiAoKQogewogICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKQEAgLTExMjY2LDIwICsxNTA0MiwyNCBAQAogICBpZiAoc2VsZikKICAgICB7CiAgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKLSAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KICAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLwogICAgIH0KICAgZWxzZQogICAgIHB1dHMgKGRsZXJyb3IgKCkpOwogCi0gICAgZXhpdCAoc3RhdHVzKTsKKyAgcmV0dXJuIHN0YXR1czsKIH0KLUVPRgotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CiAgIChldmFsICRhY19saW5rKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgogICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAogICAgIGx0X3N0YXR1cz0kPwogICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KQEAgLTExMjk2LDggKzE1MDc2LDggQEAKIAogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KICAgICBmaQogCiAgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgpAQCAtMTEzMTgsNjIwNSArMTUwOTgsMTAzIEBACiBmaQogCiAKLSMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRjYW5fYnVpbGRfc2hhcmVkIiA+JjYKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwogCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7CiAKLWFpeFs0LTldKikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGZpCisKKworCisKKworCisKKworCisKKworCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCiAgICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc2hhcmVkIiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLSMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3N0YXRpYyIgPiY2Ci0KLSMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBjb21waWxlciBcCi0gICAgQ0MgXAotICAgIExEIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWMgXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYyBcCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgXAotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMgXAotICAgIG9sZF9hcmNoaXZlX2NtZHMgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAotICAgIHByZWRlcF9vYmplY3RzIFwKLSAgICBwb3N0ZGVwX29iamVjdHMgXAotICAgIHByZWRlcHMgXAotICAgIHBvc3RkZXBzIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGggXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyBcCi0gICAgYXJjaGl2ZV9jbWRzIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzIFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZyBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWcgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpYyBcCi0gICAgbW9kdWxlX2NtZHMgXAotICAgIG1vZHVsZV9leHBzeW1fY21kcyBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAotICAgIGZpeF9zcmNmaWxlX3BhdGggXAotICAgIGV4Y2x1ZGVfZXhwc3ltcyBcCi0gICAgaW5jbHVkZV9leHBzeW1zOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kcyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIHwgXAotICAgIGFyY2hpdmVfY21kcyB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzIHwgXAotICAgIG1vZHVsZV9jbWRzIHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kcyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAorICAqKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogICAgIDs7CiAgIGVzYWMKK2ZpCiAKLWNmZ2ZpbGU9IiR7b2ZpbGV9VCIKLSAgdHJhcCAiJHJtIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKLSAgJHJtIC1mICIkY2ZnZmlsZSIKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJG9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJG9maWxlIiA+JjY7fQogCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyEgJFNIRUxMCiAKLSMgYCRlY2hvICIkY2ZnZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVApCi0jIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KLSMKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbDoKLSMgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KIAotIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgotU0VEPSRsdF9TRUQKIAotIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KLVhzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKIAotIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKLSMgaWYgQ0RQQVRIIGlzIHNldC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKIAotIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCi1hdmFpbGFibGVfdGFncz0KIAotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKIAotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgogCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKIAotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCiAKLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CiAKLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwogCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcgotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xECi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWMKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlYwotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHMKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHMKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHMKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcwotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0cwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0cwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwcwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHMKLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkCi0jIGxpYnJhcnkKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZwotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYwotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpYwotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicwotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcwotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwotCi0jICMjIyBFTkQgTElCVE9PTCBDT05GSUcKLQotX19FT0ZfXwotCi0KKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KICAgY2FzZSAkaG9zdF9vcyBpbgogICBhaXgzKikKLSAgICBjYXQgPDxcRU9GID4+ICIkY2ZnZmlsZSIKLQotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLUVPRgotICAgIDs7Ci0gIGVzYWMKLQotICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKLSAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwgXAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9IiRsdF9zYXZlX0NDIgotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGFncyBvciAtLXdpdGhvdXQtdGFncyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfdGFncytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF90YWdzIgotICB0YWduYW1lcz0iJHdpdGh2YWwiCi1maTsKLQotaWYgdGVzdCAtZiAiJGx0bWFpbiIgJiYgdGVzdCAtbiAiJHRhZ25hbWVzIjsgdGhlbgotICBpZiB0ZXN0ICEgLWYgIiR7b2ZpbGV9IjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG91dHB1dCBmaWxlIFxgJG9maWxlJyBkb2VzIG5vdCBleGlzdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG91dHB1dCBmaWxlIFxgJG9maWxlJyBkb2VzIG5vdCBleGlzdCIgPiYyO30KLSAgZmkKLQotICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KLSAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0M9J2AiCi0gICAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgbG9vayBsaWtlIGEgbGlidG9vbCBzY3JpcHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgbG9vayBsaWtlIGEgbGlidG9vbCBzY3JpcHQiID4mMjt9Ci0gICAgZWxzZQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgXGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gXGAkb2ZpbGUnIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgXGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gXGAkb2ZpbGUnIiA+JjI7fQotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgLXogIiRMVENGTEFHUyI7IHRoZW4KLSAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0ZMQUdTPSdgIgotICBmaQotCi0gICMgRXh0cmFjdCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgaW4gJG9maWxlLgotICAjIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhlIGVudGlyZSBsaXN0IGlzIG9uIG9uZSBsaW5lLgotICBhdmFpbGFibGVfdGFncz1gZ3JlcCAiXmF2YWlsYWJsZV90YWdzPSIgIiR7b2ZpbGV9IiB8ICRTRUQgLWUgJ3MvYXZhaWxhYmxlX3RhZ3M9XCguKiRcKS9cMS8nIC1lICdzL1wiLy9nJ2AKLQotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgZm9yIHRhZ25hbWUgaW4gJHRhZ25hbWVzOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICMgQ2hlY2sgd2hldGhlciB0YWduYW1lIGNvbnRhaW5zIG9ubHkgdmFsaWQgY2hhcmFjdGVycwotICAgIGNhc2UgYCRlY2hvICJYJHRhZ25hbWUiIHwgJFhzZWQgLWUgJ3M6Wy1fQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAsL106OmcnYCBpbgotICAgICIiKSA7OwotICAgICopICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCTs7Ci0gICAgZXNhYwotCi0gICAgaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIke29maWxlfSIgPiAvZGV2L251bGwKLSAgICB0aGVuCi0gICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB0YWcgbmFtZSBcIiR0YWduYW1lXCIgYWxyZWFkeSBleGlzdHMiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgZmkKLQotICAgICMgVXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgotICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIjsgdGhlbgotICAgICAgZWNobyBhcHBlbmRpbmcgY29uZmlndXJhdGlvbiB0YWcgXCIkdGFnbmFtZVwiIHRvICRvZmlsZQotCi0gICAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICBDWFgpCi0JaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLQkgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0JICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotCSAgYWNfZXh0PWNjCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLQotCi1hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KLWFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KLWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPQotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0KLWhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPQotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFg9Ci1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KLWhhcmRjb2RlX21pbnVzX0xfQ1hYPW5vCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAotaGFyZGNvZGVfYXV0b21hdGljX0NYWD1ubwotbW9kdWxlX2NtZHNfQ1hYPQotbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0KLWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXVua25vd24KLW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSRvbGRfYXJjaGl2ZV9jbWRzCi1ub191bmRlZmluZWRfZmxhZ19DWFg9Ci13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9Ci1lbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD1ubwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgotcHJlZGVwX29iamVjdHNfQ1hYPQotcG9zdGRlcF9vYmplY3RzX0NYWD0KLXByZWRlcHNfQ1hYPQotcG9zdGRlcHNfQ1hYPQotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0KLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9Ci0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWNwcAotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfQ1hYPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbXSkgeyByZXR1cm4oMCk7IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIC1yIGNvbmZ0ZXN0KgotCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9MRD0kTEQKLWx0X3NhdmVfR0NDPSRHQ0MKLUdDQz0kR1hYCi1sdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECi1pZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCi0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKLWZpCi1pZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KLSAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAotZmkKLXRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi1DQz0ke0NYWC0iYysrIn0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfQ1hYPSRDQwotZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotCi0jIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2VuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQotIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPScgLWZuby1idWlsdGluJwotZWxzZQotICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9Ci1maQotCi1pZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIG9yIC0td2l0aG91dC1nbnUtbGQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9nbnVfbGQiCi0gIHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcwotZWxzZQotICB3aXRoX2dudV9sZD1ubwotZmk7Ci1hY19wcm9nPWxkCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjYKLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7Ci0gICopCi0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwotICBlc2FjCi0gIGNhc2UgJGFjX3Byb2cgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICBbXFwvXSogfCA/OltcXC9dKikKLSAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKLSAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAotICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAncyVcXFxcJS8lZydgCi0gICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCi0gICAgICA7OwotICAiIikKLSAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KLSAgICBhY19wcm9nPWxkCi0gICAgOzsKLSAgKikKLSAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCi0gICAgd2l0aF9nbnVfbGQ9dW5rbm93bgotICAgIDs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICRFQ0hPX0MiID4mNgotZmkKLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgotICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAotICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0gICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCi0JOzsKLSAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi1lbHNlCi0gIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi1maQotZmkKLQotTEQ9IiRsdF9jdl9wYXRoX0xEIgotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQotZWNobyAiJHtFQ0hPX1R9JExEIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLXRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCi1jYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIGx0X2N2X3Byb2dfZ251X2xkPXllcwotICA7OwotKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KLSAgOzsKLWVzYWMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfZ251X2xkIiA+JjYKLXdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAotCi0KLQotICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKLSAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bwotICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCi0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwgXAotCWdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgZWxzZQotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQotICAgIGZpCi0gIGVsc2UKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIHdsYXJjPQotCi0gICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KLSAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQotICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCi0gICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCi0gICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KLSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gIGZpCi0KLSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLWVsc2UKLSAgR1hYPW5vCi0gIHdpdGhfZ251X2xkPW5vCi0gIHdsYXJjPQotZmkKLQotIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLWxkX3NobGlic19DWFg9eWVzCi1jYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBhaXhbNC05XSopCi0gICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLSAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLSAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKLSAgICBlbHNlCi0gICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLSAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0gICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQotCWZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotCSAgY2FzZSAkbGRfZmxhZyBpbgotCSAgKi1icnRsKikKLQkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgYnJlYWsKLQkgICAgOzsKLQkgIGVzYWMKLQlkb25lCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLSAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICBmaQotCi0gICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgIGFyY2hpdmVfY21kc19DWFg9JycKLSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JwotICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCi0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCi0gICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLSAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCWNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQlpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0JICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCXRoZW4KLQkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotCSAgOgotCWVsc2UKLQkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLQkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9dW5zdXBwb3J0ZWQKLQkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLQkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0JICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLQkgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0Jc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgICMgbm90IHVzaW5nIGdjYwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0Jc2hhcmVkX2ZsYWc9Jy1HJwotICAgICAgZWxzZQotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JZWxzZQotCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQlmaQotICAgICAgZmkKLSAgICBmaQotCi0gICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcwotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0gICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKLSAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgZWxzZQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIteiBub2RlZnMiCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0gICAgICBlbHNlCi0JIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1iZXJub3RvaycKLQlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1iZXJvaycKLQkjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyRjb252ZW5pZW5jZScKLQlhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCi0JIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgZmkKLSAgICBmaQotICAgIDs7Ci0KLSAgYmVvcyopCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKLSAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLSAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICBlbHNlCi0gICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgZmkKLSAgICA7OwotCi0gIGNob3J1cyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKLSAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCi0KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLSAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQljcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICBlbHNlCi0JZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGZpfgotICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgIGVsc2UKLSAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICBmaQotICA7OwotICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotICAgICAgaGFyZGNvZGVfYXV0b21hdGljX0NYWD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JycKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCi0gICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyA7IHRoZW4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICAgIG1vZHVsZV9jbWRzX0NYWD0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgIGZpCi0gICAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICAgbW9kdWxlX2NtZHNfQ1hYPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICAgIDs7Ci0KLSAgZGd1eCopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGVjKysqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgZ2hjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGZyZWVic2RbMTJdKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlIHN3aXRjaCB0byBFTEYKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgZnJlZWJzZC1lbGYqKQotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIDs7Ci0gIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICMgY29udmVudGlvbnMKLSAgICBsZF9zaGxpYnNfQ1hYPXllcwotICAgIDs7Ci0gIGdudSopCi0gICAgOzsKLSAgaHB1eDkqKQotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICBDQyopCi0gICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgIDs7Ci0gICAgYUNDKikKLSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICMKLSAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLSAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0gICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0gICAgICAjIGRlcGVuZGVuY2llcy4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJbLV1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotICAgICAgOzsKLSAgICAqKQotICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgaHB1eDEwKnxocHV4MTEqKQotICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKSA7OwotICAgICAgKikKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgICA7OwotICAgICopCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkJICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkJICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGFDQyopCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCopCi0JICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGlhNjQqKQotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBpbnRlcml4WzMtOV0qKQotICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCi0gICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIDs7Ci0gIGlyaXg1KiB8IGlyaXg2KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU0dJIEMrKwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAtbyAkbGliJwotCSAgZmkKLQlmaQotCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCTs7Ci0gICAgZXNhYwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8IGdyZXAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCwkbGliZGlyJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGljcGMqKQotCSMgSW50ZWwgQysrCi0Jd2l0aF9nbnVfbGQ9eWVzCi0JIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAotCSMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCi0JY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JKiJWZXJzaW9uIDcuIiopCi0gIAkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICA7OwotCSopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICB0bXBfaWR5bj0KLQkgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKLQkgIGVzYWMKLSAgCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JZXNhYwotCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCTs7Ci0gICAgICBwZ0NDKiB8IHBnY3BwKikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLSAgCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICA7OwotICAgICAgY3h4KikKLQkjIENvbXBhcSBDKysKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMrKyA1LjkKLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCi0JICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCi0JICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAjIHdvdWxkIGJlIGJldHRlci4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAjIGluIHRoZSBhcmNoaXZlLgotCSAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICA7OwotCWVzYWMKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBseW54b3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBtODhrKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgbXZzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgY3h4KikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG5ldGJzZCopCi0gICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICBmaQotICAgICMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLSAgICA7OwotICBvcGVuYnNkMiopCi0gICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBvcGVuYnNkKikKLSAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBmaQotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgZWxzZQotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIGZpCi0gICAgOzsKLSAgb3NmMyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJwotCi0JOzsKLSAgICAgIFJDQyopCi0JIyBSYXRpb25hbCBDKysgMi40LjEKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGN4eCopCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIGxkX3NobGlic19DWFg9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG9zZjQqIHwgb3NmNSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgY3h4KikKLQlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLQkgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIC1XbCwtaW5wdXQgLVdsLCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24JJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgotCSAgJHJtICRsaWIuZXhwJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBwc29zKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgc3Vub3M0KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LngKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGxjYyopCi0JIyBMdWNpZAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc29sYXJpcyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQlub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotCWNhc2UgJGhvc3Rfb3MgaW4KLQkgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLQkgICopCi0JICAgICMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JICAgICMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCi0JICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQllc2FjCi0JbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGdjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0KLQkjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LXogJHt3bH1kZWZzJwotCSAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgotCSAgZWxzZQotCSAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCi0JICAgICMgcGxhdGZvcm0uCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBmaQotCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkd2wkbGliZGlyJwotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotCSAgKikKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JICAgIDs7Ci0JICBlc2FjCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JwotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICAqKQotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICMgYXMgLXogZGVmcy4KLSAgICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCi0gICAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKLSAgICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwotICAgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCi0gICAgIyBTbyB0aGF0IGJlaGF2aW91ciBpcyBvbmx5IGVuYWJsZWQgaWYgU0NPQUJTUEFUSCBpcyBzZXQgdG8gYQotICAgICMgbm9uLWVtcHR5IHZhbHVlIGluIHRoZSBlbnZpcm9ubWVudC4gIE1vc3QgbGlrZWx5IG9ubHkgdXNlZnVsIGZvcgotICAgICMgY3JlYXRpbmcgb2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBvZiBwYWNrYWdlcy4KLSAgICAjIFRoaXMgaXMgYSBoYWNrIHVudGlsIGxpYnRvb2wgb2ZmaWNpYWxseSBzdXBwb3J0cyBhYnNvbHV0ZSBwYXRoCi0gICAgIyBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KLSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosdGV4dCcKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosbm9kZWZzJwotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JwotICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUJleHBvcnQnCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB0YW5kZW0qKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBOQ0MqKQotCSMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgdnh3b3JrcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gICopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0NYWCIgPiY2Ci10ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLUdDQ19DWFg9IiRHWFgiCi1MRF9DWFg9IiRMRCIKLQotY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotY2xhc3MgRm9vCi17Ci1wdWJsaWM6Ci0gIEZvbyAodm9pZCkgeyBhID0gMDsgfQotcHJpdmF0ZToKLSAgaW50IGE7Ci19OwotRU9GCi0KLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLQotICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCi0gICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgotICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCi0KLSAgIyBUaGUgYConIGluIHRoZSBjYXNlIG1hdGNoZXMgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCB1c2UgYGNhc2UnIGluCi0gICMgJG91dHB1dF92ZXJib3NlX2NtZCBjYW4gdHJpZ2dlciBnbG9iIGV4cGFuc2lvbiBkdXJpbmcgdGhlIGxvb3AKLSAgIyBldmFsIHdpdGhvdXQgdGhpcyBzdWJzdGl0dXRpb24uCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWAkZWNobyAiWCRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCIgfCAkWHNlZCAtZSAiJG5vX2dsb2Jfc3Vic3QiYAotCi0gIGZvciBwIGluIGBldmFsICRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZGA7IGRvCi0gICAgY2FzZSAkcCBpbgotCi0gICAgLUwqIHwgLVIqIHwgLWwqKQotICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCi0gICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgotICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIFwKLQkgIHx8IHRlc3QgJHAgPSAiLVIiOyB0aGVuCi0JIHByZXY9JHAKLQkgY29udGludWUKLSAgICAgICBlbHNlCi0JIHByZXY9Ci0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGNhc2UgJHAgaW4KLQkgLUwqIHwgLVIqKQotCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQotCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQotCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgotCSAgIGlmIHRlc3QgLXogIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIjsgdGhlbgotCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0iJHtwcmV2fSR7cH0iCi0JICAgZWxzZQotCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0iJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSAke3ByZXZ9JHtwfSIKLQkgICBmaQotCSAgIDs7Ci0JICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCi0JICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgotCSBlc2FjCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkcG9zdGRlcHNfQ1hYIjsgdGhlbgotCSAgIHBvc3RkZXBzX0NYWD0iJHtwcmV2fSR7cH0iCi0JIGVsc2UKLQkgICBwb3N0ZGVwc19DWFg9IiR7cG9zdGRlcHNfQ1hYfSAke3ByZXZ9JHtwfSIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqLiRvYmpleHQpCi0gICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCi0gICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCi0gICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCi0JIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCi0JIGNvbnRpbnVlCi0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGlmIHRlc3QgLXogIiRwcmVkZXBfb2JqZWN0c19DWFgiOyB0aGVuCi0JICAgcHJlZGVwX29iamVjdHNfQ1hYPSIkcCIKLQkgZWxzZQotCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHByZWRlcF9vYmplY3RzX0NYWCAkcCIKLQkgZmkKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRwb3N0ZGVwX29iamVjdHNfQ1hYIjsgdGhlbgotCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwIgotCSBlbHNlCi0JICAgcG9zdGRlcF9vYmplY3RzX0NYWD0iJHBvc3RkZXBfb2JqZWN0c19DWFggJHAiCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCi0KLSAgICBlc2FjCi0gIGRvbmUKLQotICAjIENsZWFuIHVwLgotICBybSAtZiBhLm91dCBhLmV4ZQotZWxzZQotICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgQ1hYIHRlc3QgcHJvZ3JhbSIKLWZpCi0KLSRybSAtZiBjb25mZXN0LiRvYmpleHQKLQotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0KLWlmIHRlc3QgLW4gIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIjsgdGhlbgotICBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPWBlY2hvICIgJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCi1maQotCi0jIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgotY2FzZSAkaG9zdF9vcyBpbgotaW50ZXJpeFszLTldKikKLSAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgotICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgotICBwcmVkZXBfb2JqZWN0c19DWFg9Ci0gIHBvc3RkZXBfb2JqZWN0c19DWFg9Ci0gIHBvc3RkZXBzX0NYWD0KLSAgOzsKLQotbGludXgqKQotICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLSAgKlN1blwgQyopCi0gICAgIyBTdW4gQysrIDUuOQotICAgICMKLSAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKLSAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKLSAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCi0gICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgotICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCi0gICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCi0gICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCi0gICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc29sYXJpcyopCi0gIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gIENDKikKLSAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKLSAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKLSAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCi0gICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgotICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCi0gICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCi0gICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKLSAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCi0gICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgotICAgICAgcG9zdGRlcHNfQ1hYPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci1lc2FjCi0KLWNhc2UgIiAkcG9zdGRlcHNfQ1hYICIgaW4KLSoiIC1sYyAiKikgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vIDs7Ci1lc2FjCi0KLWx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPQotbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjYKLQotICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZuby1jb21tb24nCi0gICAgICA7OwotICAgICpkamdwcCopCi0gICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICAgIDs7Ci0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeFs0LTldKikKLQkjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCWVsc2UKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotCWZpCi0JOzsKLSAgICAgIGNob3J1cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQljeGNoNjgqKQotCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICMgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgQ1hYKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgICBkYXJ3aW4qKQotICAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICAgeGxjKikKLSAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcW5vY29tbW9uJwotICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLSAgICAgICAgICAgOzsKLSAgICAgICAgIGVzYWMKLSAgICAgICA7OwotICAgICAgZGd1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGVjKysqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICA7OwotCSAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0JIyBGcmVlQlNEIHVzZXMgR05VIEMrKwotCTs7Ci0gICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKLQkgICAgZmkKLQkgICAgOzsKLQkgIGFDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KnxpYTY0KikKLQkgICAgICAjICtaIHRoZSBkZWZhdWx0Ci0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBpbnRlcml4KikKLQkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKLQkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/Ci0JOzsKLSAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbGludXgqIHwgaypic2QqLWdudSkKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgIyBLQUkgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLQkgICAgOzsKLQkgIGljcGMqIHwgZWNwYyopCi0JICAgICMgSW50ZWwgQysrCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCi0JICAgIDs7Ci0JICBwZ0NDKiB8IHBnY3BwKikKLQkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIuCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mcGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBDb21wYXEgQysrCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkgICAgKlN1blwgQyopCi0JICAgICAgIyBTdW4gQysrIDUuOQotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGx5bnhvcyopCi0JOzsKLSAgICAgIG04OGsqKQotCTs7Ci0gICAgICBtdnMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBjeHgqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1XIGMsZXhwb3J0YWxsJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIG5ldGJzZCopCi0JOzsKLSAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJwotCSAgICA7OwotCSAgUkNDKikKLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgcHNvcyopCi0JOzsKLSAgICAgIHNvbGFyaXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKLQkgICAgOzsKLQkgIGdjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVBJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzdW5vczQqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LngKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgbGNjKikKLQkgICAgIyBMdWNpZAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgdGFuZGVtKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgTkNDKikKLQkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHZ4d29ya3MqKQotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjYKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCI7IHRoZW4KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEzNjIwOiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjEzNjI0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY2Ci0KLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA9IHh5ZXM7IHRoZW4KLSAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA7OwotICAgICBlc2FjCi1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCi1maQotCi1maQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0gICAgOzsKLSAgKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCi0gICAgOzsKLWVzYWMKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWFwiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY2Ci0KLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA9IHh5ZXM7IHRoZW4KLSAgICA6Ci1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQotZmkKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTM3MjQ6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxMzcyODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2Ci0gIGhhcmRfbGlua3M9eWVzCi0gICRybSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjYKLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KLSAgICBuZWVkX2xvY2tzPXdhcm4KLSAgZmkKLWVsc2UKLSAgbmVlZF9sb2Nrcz1ubwotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLQotICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBjYXNlICRob3N0X29zIGluCi0gIGFpeFs0LTldKikKLSAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLSAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0gICAgaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgZWxzZQotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBmaQotICAgIDs7Ci0gIHB3MzIqKQotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKLSAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KikKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87L14uKlsgXV9fbm1fXy9zL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgKikKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICA7OwotICBlc2FjCi0gIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19DWFgiID4mNgotdGVzdCAiJGxkX3NobGlic19DWFgiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCi0KLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0NYWCBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjYKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNgotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi0KLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4WzQtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0KLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkcm0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiopCi0gICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5Ci0gICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKLSAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQotICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCi0gICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKLSAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCi0gICAgOzsKLSAgZXNhYwotICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAotICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKLSAgOzsKLQotZGd1eCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotZnJlZWJzZDEqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAotICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbMy05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRob3N0X29zIGluCi0gICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwotICAgICopCi0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotCQl2ZXJzaW9uX3R5cGU9bGludXgKLQllbHNlCi0JCXZlcnNpb25fdHlwZT1pcml4Ci0JZmkgOzsKLSAgZXNhYwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCi1saW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgotICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKLSAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotCi0gICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCi0gIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNgotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotZmkKLQotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgotZmkKLQotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2Ci1oYXJkY29kZV9hY3Rpb25fQ1hYPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8fCBcCi0gICB0ZXN0IC1uICIkcnVucGF0aF92YXJfQ1hYIiB8fCBcCi0gICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiICE9IG5vICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIENYWCkiICE9IG5vICYmCi0gICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MX0NYWCIgIT0gbm87IHRoZW4KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9aW1tZWRpYXRlCi0gIGZpCi1lbHNlCi0gICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCi0gICMgZGlyZWN0b3JpZXMuCi0gIGhhcmRjb2RlX2FjdGlvbl9DWFg9dW5zdXBwb3J0ZWQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2Ci0KLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiA9IHJlbGluazsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfQ1hYIFwKLSAgICBDQ19DWFggXAotICAgIExEX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19DWFggXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFggXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCi0gICAgcHJlZGVwX29iamVjdHNfQ1hYIFwKLSAgICBwb3N0ZGVwX29iamVjdHNfQ1hYIFwKLSAgICBwcmVkZXBzX0NYWCBcCi0gICAgcG9zdGRlcHNfQ1hYIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIFwKLSAgICBhcmNoaXZlX2NtZHNfQ1hYIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCi0gICAgcG9zdGluc3RhbGxfY21kc19DWFggXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19DWFggXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKLSAgICBub191bmRlZmluZWRfZmxhZ19DWFggXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFggXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIFwKLSAgICBtb2R1bGVfY21kc19DWFggXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFggXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9DWFggXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAotICAgIGluY2x1ZGVfZXhwc3ltc19DWFg7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWCB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCB8IFwKLSAgICBhcmNoaXZlX2NtZHNfQ1hYIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIHwgXAotICAgIG1vZHVsZV9jbWRzX0NYWCB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWCB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9DWFgKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19DWFgKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfQ1hYCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfQ1hYCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19DWFgKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWAotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19DWFgKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19DWFgKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0NYWAotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19DWFgKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfQ1hYCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX0NYWAotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfQ1hYCi0KLSMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZAotIyBsaWJyYXJ5Ci1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19DWFgKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fQ1hYCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFgKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0NYWAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19DWFgKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19DWFgKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0NYWAotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAotCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi1fX0VPRl9fCi0KLQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1DQz0kbHRfc2F2ZV9DQwotTERDWFg9JExECi1MRD0kbHRfc2F2ZV9MRAotR0NDPSRsdF9zYXZlX0dDQwotd2l0aF9nbnVfbGRjeHg9JHdpdGhfZ251X2xkCi13aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAotbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECi1sdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKLWx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi0KLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBGNzcpCi0JaWYgdGVzdCAtbiAiJEY3NyIgJiYgdGVzdCAiWCRGNzciICE9ICJYbm8iOyB0aGVuCi0KLWFjX2V4dD1mCi1hY19jb21waWxlPSckRjc3IC1jICRGRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckRjc3IC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9mNzdfY29tcGlsZXJfZ251Ci0KLQotYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi1hbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ci1hbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PW5vCi1hcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9Ci1oYXJkY29kZV9kaXJlY3RfRjc3PW5vCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PQotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9Ci1oYXJkY29kZV9taW51c19MX0Y3Nz1ubwotaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz1ubwotbW9kdWxlX2NtZHNfRjc3PQotbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0KLWxpbmtfYWxsX2RlcGxpYnNfRjc3PXVua25vd24KLW9sZF9hcmNoaXZlX2NtZHNfRjc3PSRvbGRfYXJjaGl2ZV9jbWRzCi1ub191bmRlZmluZWRfZmxhZ19GNzc9Ci13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Ci1lbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KLWFjX2V4dD1mCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLW9iamV4dF9GNzc9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCi0gICAgICBzdWJyb3V0aW5lIHQKLSAgICAgIHJldHVybgotICAgICAgZW5kCi0iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKLSAgICAgIHByb2dyYW0gdAotICAgICAgZW5kCi0iCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIC1yIGNvbmZ0ZXN0KgotCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke0Y3Ny0iZjc3In0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfRjc3PSRDQwotZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGNhbl9idWlsZF9zaGFyZWQiID4mNgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKLWFpeFs0LTldKikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgogICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGZpCi0gIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3NoYXJlZCIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zdGF0aWMiID4mNgotCi1HQ0NfRjc3PSIkRzc3IgotTERfRjc3PSIkTEQiCi0KLWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PQotbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PQotbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjYKLQotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLQotICAgIG1zZG9zZGpncHAqKQotICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKLSAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgZWxzZQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgICBkYXJ3aW4qKQotICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgeGxjKikKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLXFub2NvbW1vbicKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotCi0gICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9JytaJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBpY2MqIHwgZWNjKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZnBpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgICA7OwotICAgICAgY2NjKikKLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJwotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCi0JICAjIFN1biBDIDUuOQotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLQkgIDs7Ci0JKlN1blwgRiopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PScnCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHJkb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJzs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctUW9wdGlvbiBsZCAnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1QSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtjb25mb3JtX3BpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICB1bmljb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1waWMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA+JjYKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyI7IHRoZW4KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzc9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE1MzA3OiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjE1MzExOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3PXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NyIgPiY2Ci0KLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3IiA9IHh5ZXM7IHRoZW4KLSAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA7OwotICAgICBlc2FjCi1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PQotICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi1maQotCi1maQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Ci0gICAgOzsKLSAgKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciCi0gICAgOzsKLWVzYWMKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3IGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3N1wiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3Nz1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzc9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NyIgPiY2Ci0KLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3IiA9IHh5ZXM7IHRoZW4KLSAgICA6Ci1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PQotZmkKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzc9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTU0MTE6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNTQxNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzc9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPiY2Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2Ci0gIGhhcmRfbGlua3M9eWVzCi0gICRybSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjYKLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KLSAgICBuZWVkX2xvY2tzPXdhcm4KLSAgZmkKLWVsc2UKLSAgbmVlZF9sb2Nrcz1ubwotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLQotICBydW5wYXRoX3Zhcj0KLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz1ubwotICBhcmNoaXZlX2NtZHNfRjc3PQotICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0KLSAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3Nz0KLSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3PQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9Ci0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQotICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0gIGhhcmRjb2RlX21pbnVzX0xfRjc3PW5vCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PXVuc3VwcG9ydGVkCi0gIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXVua25vd24KLSAgaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz1ubwotICBtb2R1bGVfY21kc19GNzc9Ci0gIG1vZHVsZV9leHBzeW1fY21kc19GNzc9Ci0gIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KLSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgotICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAotICBpbmNsdWRlX2V4cHN5bXNfRjc3PQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltc19GNzc9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCi0gICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwogICAgIGZpCiAgICAgOzsKLSAgaW50ZXJpeCopCi0gICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKLSAgICB3aXRoX2dudV9sZD15ZXMKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci0gIGVzYWMKIAotICBsZF9zaGxpYnNfRjc3PXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHt3bH0nCi0KLSAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQotICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQotICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBlbHNlCi0gIAl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9CisgIGFpeFs0LTldKikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwogICAgIGZpCi0gICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgotICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQotICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KLSAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCi0gICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeFszLTldKikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCWxkX3NobGlic19GNzc9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCi0qKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KLSoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQotKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAotKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLQotICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKLSAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCi0gICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKLSAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKLSAgICAgICMgdGhlbS4KLSAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLQkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIEY3NykgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9eWVzCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0KLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQllbHNlCi0JICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZml+Ci0JJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLSAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgOzsKLQotICAgIGdudSogfCBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JdG1wX2FkZGZsYWc9Ci0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0JcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQkgIDs7Ci0JcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKLQllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7Ci0JZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKLQlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgotCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKLQllc2FjCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqKQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7Ci0JZXNhYwotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0KLQlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCWZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0Jd2xhcmM9Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCi0JbGRfc2hsaWJzX0Y3Nz1ubwotCWNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5Ci0qKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1FT0YKLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgotICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQotCWxkX3NobGlic19GNzc9bm8KLQljYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKLSoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotCTs7Ci0JKikKLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJwotCSAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBsZF9zaGxpYnNfRjc3PW5vCi0JICBmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCAiJGxkX3NobGlic19GNzciID0gbm87IHRoZW4KLSAgICAgIHJ1bnBhdGhfdmFyPQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Ci0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqKQotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PXllcwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKLSAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgotCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotCSMgYnJva2VuIGNvbGxlY3QyLgotCWhhcmRjb2RlX2RpcmVjdF9GNzc9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYWl4WzQtOV0qKQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0JIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0iIgotICAgICAgZWxzZQotCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLQlpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3PSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQllbHNlCi0JICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWZpCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0JIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0JIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0JIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLQljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCi0JICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAJICAgIGJyZWFrCi0gIAkgIGZpCi0JICBkb25lCi0JICA7OwotCWVzYWMKLQotCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgZmkKLQotICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PScnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgotCSAgZWxzZQotICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0gIAkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9dW5zdXBwb3J0ZWQKLSAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLSAgCSAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0JZmkKLSAgICAgIGVsc2UKLQkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLSAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCSAgZmkKLQlmaQotICAgICAgZmkKLQotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSAgICAgIHByb2dyYW0gbWFpbgotCi0gICAgICBlbmQKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSIteiBub2RlZnMiCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLQllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSAgICAgIHByb2dyYW0gbWFpbgotCi0gICAgICBlbmQKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBub191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1iZXJub3RvaycKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWJlcm9rJwotCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyRjb252ZW5pZW5jZScKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLQkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotCWZpCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBic2RpWzQ1XSopCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PS1yZHluYW1pYwotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScgJwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotICAgICAgbGliZXh0PWxpYgotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfRjc3PSd0cnVlJwotICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3PSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0gICAgICBmaXhfc3JjZmlsZV9wYXRoX0Y3Nz0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz15ZXMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQotICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KLSAgICAgICAgICAgICAxMC5bMDEyXSkKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2F1dG9tYXRpY19GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScnCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIGFyY2hpdmVfY21kc19GNzc9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIG1vZHVsZV9jbWRzX0Y3Nz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3PSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgbW9kdWxlX2NtZHNfRjc3PSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgZnJlZWJzZDEqKQotICAgICAgbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubwotICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQotICAgICMgZXh0cmEgc3BhY2UpLgotICAgIGZyZWVic2QyLjIqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCi0gICAgZnJlZWJzZDIqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0gICAgICA7OwotCi0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLQotCWhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLQotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KnxpYTY0KikKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PScrYiAkbGliZGlyJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLQkgIDs7Ci0JKikKLQkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotCi0JICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLQllbHNlCi0JICBjYXNlICRob3N0X29zIGluCi0JICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKLQkgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgICA7OwotCSAgZXNhYwotICAgICAgICBmaQotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb3MyKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICA7OwotCi0gICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKLQotCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScgLXogdGV4dCcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0Jd2xhcmM9JyR7d2x9JwotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBlbHNlCi0Jd2xhcmM9JycKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0gICAgICAqKQotCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAotCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQllbHNlCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KLQkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCi0JIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLQlzbmkpCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KLQk7OwotCXNpZW1lbnMpCi0JICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKLQkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KLQkgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICByZWxvYWRfY21kc19GNzc9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotICAgICAgICA7OwotCW1vdG9yb2xhKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQuMyopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nLUJleHBvcnQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCi0JbGRfc2hsaWJzX0Y3Nz15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LG5vZGVmcycKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1CZXhwb3J0JwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19GNzciID4mNgotdGVzdCAiJGxkX3NobGlic19GNzciID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NyIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9eWVzCi0KLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0Y3NyBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3NwotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3Ci0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0Y3NyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19GNzcgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiA+JjYKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNgotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi0KLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4WzQtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0KLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkcm0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiopCi0gICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5Ci0gICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKLSAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQotICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCi0gICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKLSAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCiAgICAgOzsKICAgZXNhYwotICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zaGFyZWQiID4mNjsgfQogCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKLSAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zdGF0aWMiID4mNjsgfQogCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwogCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwogCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7CiAKLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgotICBmaQotCi0gICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgotICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCi0gICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAotICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAotICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKLSAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCi0gIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCi0gIDs7Ci0KLW5ldGJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwotICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW50by1xbngqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1vcGVuYnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7Ci0gIGVzYWMKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCiBmaQotCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi1maQotCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjYKLWhhcmRjb2RlX2FjdGlvbl9GNzc9Ci1pZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzciIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9GNzciIHx8IFwKLSAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0Y3NyIgPSAiWHllcyIgOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0Y3NyIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgRjc3KSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfRjc3IiAhPSBubzsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz11bnN1cHBvcnRlZAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb25fRjc3IiA+JjYKLQotaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbl9GNzciID0gcmVsaW5rOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotCi0KLSMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBjb21waWxlcl9GNzcgXAotICAgIENDX0Y3NyBcCi0gICAgTERfRjc3IFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3NyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0Y3NyBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3NyBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0Y3NyBcCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3IFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3NyBcCi0gICAgb2xkX2FyY2hpdmVfY21kc19GNzcgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfRjc3IFwKLSAgICBwcmVkZXBfb2JqZWN0c19GNzcgXAotICAgIHBvc3RkZXBfb2JqZWN0c19GNzcgXAotICAgIHByZWRlcHNfRjc3IFwKLSAgICBwb3N0ZGVwc19GNzcgXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9GNzcgXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19GNzcgXAotICAgIGFyY2hpdmVfY21kc19GNzcgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzX0Y3NyBcCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzX0Y3NyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3IFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzcgXAotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3NyBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzcgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3IFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3NyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzcgXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpY19GNzcgXAotICAgIG1vZHVsZV9jbWRzX0Y3NyBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3NyBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3IFwKLSAgICBmaXhfc3JjZmlsZV9wYXRoX0Y3NyBcCi0gICAgZXhjbHVkZV9leHBzeW1zX0Y3NyBcCi0gICAgaW5jbHVkZV9leHBzeW1zX0Y3NzsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3IHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfRjc3IHwgXAotICAgIGFyY2hpdmVfY21kc19GNzcgfCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzcgfCBcCi0gICAgbW9kdWxlX2NtZHNfRjc3IHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzcgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3IHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3IHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAotICAgIDs7Ci0gIGVzYWMKLQotY2ZnZmlsZT0iJG9maWxlIgotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzcKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3Ci0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyX0Y3NwotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDX0Y3NwotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRF9GNzcKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0Y3NwotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfRjc3Ci1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcKLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3Ci0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfRjc3Ci0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3NwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19GNzcKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0Y3Nwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfRjc3Ci0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3NwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0Y3NwotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19GNzcKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0Y3NwotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfRjc3Ci0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0Y3NwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19GNzcKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X3ByZWRlcHNfRjc3Ci0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19GNzcKLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkCi0jIGxpYnJhcnkKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0Y3NwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9GNzcKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NwotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfRjc3Ci0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9GNzcKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NwotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3NwotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzcKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9GNzcKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfRjc3Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3NwotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0Y3NwotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19GNzcKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3NwotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0Y3NwotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfRjc3Ci0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfRjc3Ci0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLV9fRU9GX18KLQotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTE3NTI1LDM5MjcgKzE1MjAzLDgxIEBACiAKIENDPSIkbHRfc2F2ZV9DQyIKIAotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIEdDSikKLQlpZiB0ZXN0IC1uICIkR0NKIiAmJiB0ZXN0ICJYJEdDSiIgIT0gIlhubyI7IHRoZW4KIAogCiAKLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1qYXZhCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfR0NKPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KSB7fTsgfScKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCiAKIAotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gLXIgY29uZnRlc3QqCiAKIAotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7R0NKLSJnY2oifQotY29tcGlsZXI9JENDCi1jb21waWxlcl9HQ0o9JENDCi1mb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAogCiAKLSMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KLWFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotCi1vbGRfYXJjaGl2ZV9jbWRzX0dDSj0kb2xkX2FyY2hpdmVfY21kcwogCiAKLWx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSj0KIAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKPScgLWZuby1idWlsdGluJworICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE3NjIzOiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjE3NjI3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2CiAKLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSj0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSiAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgotZWxzZQotICAgIDoKLWZpCisjIE9ubHkgZXhwYW5kIG9uY2U6CiAKLWZpCiAKLWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPQotbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPQotbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjYKIAotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLXN0YXRpYycKIAotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OworIyMKKyMgICBCdWlsZCBlbnZpcm9ubWVudDoKKyMjCiAKLSAgICBhbWlnYW9zKikKLSAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgOzsKLQotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLQotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLQotICAgIGludGVyaXhbMy05XSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotCi0gICAgbXNkb3NkamdwcCopCi0gICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcwotICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICBlbHNlCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0gICAgICBmaQotICAgICAgOzsKLSAgICAgIGRhcndpbiopCi0gICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICB4bGMqKQotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctcW5vY29tbW9uJwotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICAgICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0KLSAgICAgIDs7Ci0KLSAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nK1onCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGljYyogfCBlY2MqKQotCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1mcGljJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLW5vbl9zaGFyZWQnCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMgNS45Ci0JICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotCSAgOzsKLQkqU3VuXCBGKikKLQkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9JycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgcmRvcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctUW9wdGlvbiBsZCAnOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1Rb3B0aW9uIGxkICcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLVBJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS2NvbmZvcm1fcGljJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHVuaWNvcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLXBpYycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiID4mNgotCisjICAgZGV2ZWxvcGVyIGJ1aWxkCisjICAgICAgIChlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBidWlsZGluZyBmcm9tIFNWTiBjaGVja291dCkKICMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLWlmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiOyB0aGVuCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNzkxMzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNzkxNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0KK2lmIHRlc3QgIngkZGV2ZWxvcGVyIiAhPSAieG5vIiAtYSAtZiAkc3JjZGlyL3JlbW92ZS1maWxlczsgdGhlbgorICAgIGRldmVsb3Blcj0ieWVzIgogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSiIgPiY2Ci0KLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKIiA9IHh5ZXM7IHRoZW4KLSAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0ogaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA7OwotICAgICBlc2FjCi1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPQotICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi1maQotCi1maQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Ci0gICAgOzsKLSAgKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiCi0gICAgOzsKLWVzYWMKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSlwiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSj1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0o9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSiIgPiY2Ci0KLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKIiA9IHh5ZXM7IHRoZW4KLSAgICA6Ci1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPQotZmkKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0o9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTgwMTc6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxODAyMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0o9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPiY2Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2Ci0gIGhhcmRfbGlua3M9eWVzCi0gICRybSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjYKLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KLSAgICBuZWVkX2xvY2tzPXdhcm4KLSAgZmkKLWVsc2UKLSAgbmVlZF9sb2Nrcz1ubwotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLQotICBydW5wYXRoX3Zhcj0KLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSj1ubwotICBhcmNoaXZlX2NtZHNfR0NKPQotICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0KLSAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSj0KLSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfR0NKPQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9Ci0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPQotICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gIGhhcmRjb2RlX21pbnVzX0xfR0NKPW5vCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPXVuc3VwcG9ydGVkCi0gIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXVua25vd24KLSAgaGFyZGNvZGVfYXV0b21hdGljX0dDSj1ubwotICBtb2R1bGVfY21kc19HQ0o9Ci0gIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9Ci0gIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KLSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgotICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAotICBpbmNsdWRlX2V4cHN5bXNfR0NKPQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltc19HQ0o9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCi0gICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICBmaQotICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICA7OwotICBlc2FjCi0KLSAgbGRfc2hsaWJzX0dDSj15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZWxzZQotICAJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQotICAgIGZpCi0gICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgotICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQotICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KLSAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCi0gICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeFszLTldKikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCWxkX3NobGlic19HQ0o9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCi0qKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KLSoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQotKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAotKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLQotICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKLSAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCi0gICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKLSAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKLSAgICAgICMgdGhlbS4KLSAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLQkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIEdDSikgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj1ubwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0o9eWVzCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0KLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQllbHNlCi0JICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZml+Ci0JJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLSAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgOzsKLQotICAgIGdudSogfCBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JdG1wX2FkZGZsYWc9Ci0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0JcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQkgIDs7Ci0JcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKLQllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7Ci0JZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKLQlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgotCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKLQllc2FjCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqKQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7Ci0JZXNhYwotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0KLQlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCWZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0Jd2xhcmM9Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCi0JbGRfc2hsaWJzX0dDSj1ubwotCWNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5Ci0qKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1FT0YKLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgotICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQotCWxkX3NobGlic19HQ0o9bm8KLQljYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKLSoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotCTs7Ci0JKikKLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJwotCSAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBsZF9zaGxpYnNfR0NKPW5vCi0JICBmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCAiJGxkX3NobGlic19HQ0oiID0gbm87IHRoZW4KLSAgICAgIHJ1bnBhdGhfdmFyPQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Ci0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPQotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqKQotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKPXllcwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKLSAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgotCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotCSMgYnJva2VuIGNvbGxlY3QyLgotCWhhcmRjb2RlX2RpcmVjdF9HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYWl4WzQtOV0qKQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0JIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0iIgotICAgICAgZWxzZQotCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLQlpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQllbHNlCi0JICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWZpCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0JIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0JIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0JIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLQljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCi0JICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAJICAgIGJyZWFrCi0gIAkgIGZpCi0JICBkb25lCi0JICA7OwotCWVzYWMKLQotCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgZmkKLQotICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPScnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgotCSAgZWxzZQotICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0gIAkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9dW5zdXBwb3J0ZWQKLSAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLSAgCSAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPQotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0JZmkKLSAgICAgIGVsc2UKLQkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLSAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCSAgZmkKLQlmaQotICAgICAgZmkKLQotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLSAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgICBlbHNlCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0iLXogbm9kZWZzIgotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0JZWxzZQotCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0JIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWJlcm5vdG9rJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tYmVyb2snCi0JICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJGNvbnZlbmllbmNlJwotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgOzsKLQotICAgIGJzZGlbNDVdKikKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyAnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0gICAgICBsaWJleHQ9bGliCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9J3RydWUnCi0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotICAgICAgb2xkX2FyY2hpdmVfY21kc19HQ0o9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSAgICAgIGZpeF9zcmNmaWxlX3BhdGhfR0NKPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubwotICAgICAgaGFyZGNvZGVfYXV0b21hdGljX0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JycKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgbW9kdWxlX2NtZHNfR0NKPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICBtb2R1bGVfY21kc19HQ0o9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgICA7OwotCi0gICAgZGd1eCopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBmcmVlYnNkMSopCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMiopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLSAgICAgIDs7Ci0KLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotCi0JaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQloYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9JytiICRsaWJkaXInCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0JICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotCSAgOzsKLQkqKQotCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIG9wZW5ic2QqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQloYXJkY29kZV9kaXJlY3RfR0NKPXllcwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyAteiB0ZXh0JwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGVsc2UKLQl3bGFyYz0nJwotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgotCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIHJlbG9hZF9jbWRzX0dDSj0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlsZF9zaGxpYnNfR0NKPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LHRleHQnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LHRleHQnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosbm9kZWZzJwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0dDSiIgPiY2Ci10ZXN0ICIkbGRfc2hsaWJzX0dDSiIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKIiBpbgoteHx4eWVzKQotICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCi0gIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj15ZXMKLQotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRhcmNoaXZlX2NtZHNfR0NKIGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjYKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYj1jb25mdGVzdAotICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgICAgICAgZGVwbGlicz0KLSAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKCi0JcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSgotICAgICAgICBjb21waWxlcl9mbGFncz0tdgotICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKLSAgICAgICAgdmVyc3RyaW5nPQotICAgICAgICBvdXRwdXRfb2JqZGlyPS4KLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAotICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19HQ0oKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPQotICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHNfR0NKIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQotICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0dDSiAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci0gICAgICAgIHRoZW4KLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotICAgICAgICBlbHNlCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9eWVzCi0gICAgICAgIGZpCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgZWxzZQotICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgIGZpCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiID4mNgotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2Ci1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLQotbmVlZF9saWJfcHJlZml4PXVua25vd24KLWhhcmRjb2RlX2ludG9fbGlicz1ubwotCi0jIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KLSMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cwotbmVlZF92ZXJzaW9uPXVua25vd24KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0KLSAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICA7OwotCi1haXhbNC05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgotICBmaQotCi0gICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgotICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCi0gICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAotICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAotICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKLSAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCi0gIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCi0gIDs7Ci0KLW5ldGJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwotICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW50by1xbngqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1vcGVuYnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7Ci0gIGVzYWMKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi1maQotCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi1maQotCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjYKLWhhcmRjb2RlX2FjdGlvbl9HQ0o9Ci1pZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0oiIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9HQ0oiIHx8IFwKLSAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0dDSiIgPSAiWHllcyIgOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0dDSiIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgR0NKKSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfR0NKIiAhPSBubzsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0dDSj1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0dDSj1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgaGFyZGNvZGVfYWN0aW9uX0dDSj11bnN1cHBvcnRlZAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb25fR0NKIiA+JjYKLQotaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbl9HQ0oiID0gcmVsaW5rOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotCi0KLSMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBjb21waWxlcl9HQ0ogXAotICAgIENDX0dDSiBcCi0gICAgTERfR0NKIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0ogXAotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSiBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSiBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0dDSiBcCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSiBcCi0gICAgb2xkX2FyY2hpdmVfY21kc19HQ0ogXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKIFwKLSAgICBwcmVkZXBfb2JqZWN0c19HQ0ogXAotICAgIHBvc3RkZXBfb2JqZWN0c19HQ0ogXAotICAgIHByZWRlcHNfR0NKIFwKLSAgICBwb3N0ZGVwc19HQ0ogXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9HQ0ogXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19HQ0ogXAotICAgIGFyY2hpdmVfY21kc19HQ0ogXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKIFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzX0dDSiBcCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzX0dDSiBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKIFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0ogXAotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSiBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0ogXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSiBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0ogXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpY19HQ0ogXAotICAgIG1vZHVsZV9jbWRzX0dDSiBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSiBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIFwKLSAgICBmaXhfc3JjZmlsZV9wYXRoX0dDSiBcCi0gICAgZXhjbHVkZV9leHBzeW1zX0dDSiBcCi0gICAgaW5jbHVkZV9leHBzeW1zX0dDSjsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKIHwgXAotICAgIGFyY2hpdmVfY21kc19HQ0ogfCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0ogfCBcCi0gICAgbW9kdWxlX2NtZHNfR0NKIHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0ogfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAotICAgIDs7Ci0gIGVzYWMKLQotY2ZnZmlsZT0iJG9maWxlIgotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyX0dDSgotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDX0dDSgotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRF9HQ0oKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0dDSgotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfR0NKCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oKLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0oKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0oKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0dDSgotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSgotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0dDSgotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19HQ0oKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0dDSgotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfR0NKCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0dDSgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19HQ0oKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X3ByZWRlcHNfR0NKCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19HQ0oKLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkCi0jIGxpYnJhcnkKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0dDSgotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9HQ0oKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX0dDSgotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfR0NKCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9HQ0oKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSgotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSgotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0oKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9HQ0oKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfR0NKCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSgotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0dDSgotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19HQ0oKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSgotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0dDSgotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfR0NKCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfR0NKCi0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLV9fRU9GX18KLQotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSIkbHRfc2F2ZV9DQyIKLQotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIFJDKQotCi0KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1yYwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLW9iamV4dF9SQz0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIC1yIGNvbmZ0ZXN0KgotCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke1JDLSJ3aW5kcmVzIn0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfUkM9JENDCi1mb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAotCi1sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQz15ZXMKLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyX1JDIFwKLSAgICBDQ19SQyBcCi0gICAgTERfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX1JDIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19SQyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfUkMgXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19SQyBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX1JDIFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19SQyBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19SQyBcCi0gICAgb2xkX2FyY2hpdmVfY21kc19SQyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQyBcCi0gICAgcHJlZGVwX29iamVjdHNfUkMgXAotICAgIHBvc3RkZXBfb2JqZWN0c19SQyBcCi0gICAgcHJlZGVwc19SQyBcCi0gICAgcG9zdGRlcHNfUkMgXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9SQyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX1JDIFwKLSAgICBhcmNoaXZlX2NtZHNfUkMgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfUkMgXAotICAgIHBvc3RpbnN0YWxsX2NtZHNfUkMgXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19SQyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMgXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX1JDIFwKLSAgICBub191bmRlZmluZWRfZmxhZ19SQyBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19SQyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19SQyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9SQyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9SQyBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljX1JDIFwKLSAgICBtb2R1bGVfY21kc19SQyBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX1JDIFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQyBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9SQyBcCi0gICAgZXhjbHVkZV9leHBzeW1zX1JDIFwKLSAgICBpbmNsdWRlX2V4cHN5bXNfUkM7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX1JDIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMgfCBcCi0gICAgYXJjaGl2ZV9jbWRzX1JDIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfUkMgfCBcCi0gICAgbW9kdWxlX2NtZHNfUkMgfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX1JDIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfUkMgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1jZmdmaWxlPSIkb2ZpbGUiCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKLQotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX1JDCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX1JDCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyX1JDCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfUkMKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfUkMKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX1JDCi0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19SQwotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkMKLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19SQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19SQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19SQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjX1JDCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19SQwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19SQwotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19SQwotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfUkMKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX1JDCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX1JDCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX1JDCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX1JDCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19SQwotCi0jIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQKLSMgbGlicmFyeQotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfUkMKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfUkMKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX1JDCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19SQwotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fUkMKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX1JDCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfUkMKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfUkMKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9SQwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9SQwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9SQwotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX1JDCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX1JDCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19SQwotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX1JDCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19SQwotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX1JDCi0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLV9fRU9GX18KLQotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSIkbHRfc2F2ZV9DQyIKLQotCTs7Ci0KLSAgICAgICopCi0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5zdXBwb3J0ZWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFVuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgQXBwZW5kIHRoZSBuZXcgdGFnIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSIgOyB0aGVuCi0gICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzICR0YWduYW1lIgotICAgIGZpCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLQotICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCi0gICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKLSAgICBjaG1vZCAreCAiJG9maWxlIgotICBlbHNlCi0gICAgcm0gLWYgIiR7b2ZpbGV9VCIKLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi1maQotCi0KLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi0KLSMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLQotIyBQcmV2ZW50IG11bHRpcGxlIGV4cGFuc2lvbgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0jIENoZWNrcyBmb3IgcHJvZ3JhbXMuCi0jIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKLSMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgotIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6Ci0jIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAotIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCi0jIElSSVggL3NiaW4vaW5zdGFsbAotIyBBSVggL2Jpbi9pbnN0YWxsCi0jIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKLSMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCi0jIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKLSMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKLSMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYwotIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCi1jYXNlICRhc19kaXIvIGluCi0gIC4vIHwgLi8vIHwgL2NDLyogfCBcCi0gIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAotICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKLSAgL3Vzci91Y2IvKiApIDs7Ci0gICopCi0gICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KLSAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKLSAgICAjIGJ5IGRlZmF1bHQuCi0gICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbwotICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0JaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KLQkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgotCSAgICA6Ci0JICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgotCSAgICBicmVhayAzCi0JICBmaQotCWZpCi0gICAgICBkb25lCi0gICAgZG9uZQotICAgIDs7Ci1lc2FjCi1kb25lCi0KLQotZmkKLSAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKLSAgZWxzZQotICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIFdlIGRvbid0IGNhY2hlIGEKLSAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKLSAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcwotICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHBhdGggaXMgcmVsYXRpdmUuCi0gICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAotICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRJTlNUQUxMIiA+JjYKLQotIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgotIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KLXRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotTE5fUz0kYXNfbG5fcwotaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vLCB1c2luZyAkTE5fUyIgPiY2Ci1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2Ci1zZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksOi4vKy0sX19fcF8sJ2AKLWlmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCi1hbGw6Ci0JQGVjaG8gJ2FjX21ha2V0ZW1wPSIkKE1BS0UpIicKLV9BQ0VPRgotIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCi1ldmFsIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbCB8IGdyZXAgdGVtcD1gCi1pZiB0ZXN0IC1uICIkYWNfbWFrZXRlbXAiOyB0aGVuCi0gIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllcwotZWxzZQotICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0Lm1ha2UKLWZpCi1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9wcm9nX21ha2VfJyR7YWNfbWFrZX1fc2V0YFwiID0geWVzIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgU0VUX01BS0U9Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLSAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19lZ3JlcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKLSAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCi0gICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKLSAgICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2VncmVwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2VncmVwIiA+JjYKLSBFR1JFUD0kYWNfY3ZfcHJvZ19lZ3JlcAotCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicHMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHBzOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX1BTUFJPRytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXNlICRQU1BST0cgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfUFNQUk9HPSIkUFNQUk9HIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX1BTUFJPRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIDs7Ci1lc2FjCi1maQotUFNQUk9HPSRhY19jdl9wYXRoX1BTUFJPRwotCi1pZiB0ZXN0IC1uICIkUFNQUk9HIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUFNQUk9HIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRQU1BST0ciID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBlcmwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHBlcmw7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEVSTFBST0crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2FzZSAkUEVSTFBST0cgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfUEVSTFBST0c9IiRQRVJMUFJPRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QRVJMUFJPRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIDs7Ci1lc2FjCi1maQotUEVSTFBST0c9JGFjX2N2X3BhdGhfUEVSTFBST0cKLQotaWYgdGVzdCAtbiAiJFBFUkxQUk9HIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUEVSTFBST0ciID4mNQotZWNobyAiJHtFQ0hPX1R9JFBFUkxQUk9HIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJweXRob24iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHB5dGhvbjsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QWVRIT05QUk9HK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhc2UgJFBZVEhPTlBST0cgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfUFlUSE9OUFJPRz0iJFBZVEhPTlBST0ciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfUFlUSE9OUFJPRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIDs7Ci1lc2FjCi1maQotUFlUSE9OUFJPRz0kYWNfY3ZfcGF0aF9QWVRIT05QUk9HCi0KLWlmIHRlc3QgLW4gIiRQWVRIT05QUk9HIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUFlUSE9OUFJPRyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kUFlUSE9OUFJPRyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZvciBhY19wcm9nIGluIHdob2FtaSBsb2duYW1lCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19XSE9BTUkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFdIT0FNSSI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19XSE9BTUk9IiRXSE9BTUkiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX1dIT0FNST0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1XSE9BTUk9JGFjX2N2X3Byb2dfV0hPQU1JCi1pZiB0ZXN0IC1uICIkV0hPQU1JIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkV0hPQU1JIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRXSE9BTUkiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIHRlc3QgLW4gIiRXSE9BTUkiICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkV0hPQU1JIiB8fCBXSE9BTUk9Indob2FtaSIKLQotZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1NFRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkU0VEIjsgdGhlbgotICBhY19jdl9wcm9nX1NFRD0iJFNFRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfU0VEPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLVNFRD0kYWNfY3ZfcHJvZ19TRUQKLWlmIHRlc3QgLW4gIiRTRUQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTRUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JFNFRCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgdGVzdCAtbiAiJFNFRCIgJiYgYnJlYWsKLWRvbmUKLQotZm9yIGFjX3Byb2cgaW4gZmluZAotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfRklORCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRklORCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19GSU5EPSIkRklORCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfRklORD0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1GSU5EPSRhY19jdl9wcm9nX0ZJTkQKLWlmIHRlc3QgLW4gIiRGSU5EIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRklORCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kRklORCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgdGVzdCAtbiAiJEZJTkQiICYmIGJyZWFrCi1kb25lCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXV0b2NvbmYiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGF1dG9jb25mOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX0FVVE9DT05GK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhc2UgJEFVVE9DT05GIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0FVVE9DT05GPSIkQVVUT0NPTkYiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfQVVUT0NPTkY9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICA7OwotZXNhYwotZmkKLUFVVE9DT05GPSRhY19jdl9wYXRoX0FVVE9DT05GCi0KLWlmIHRlc3QgLW4gIiRBVVRPQ09ORiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFVVE9DT05GIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRBVVRPQ09ORiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXV0b2hlYWRlciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYXV0b2hlYWRlcjsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9BVVRPSEVBREVSK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhc2UgJEFVVE9IRUFERVIgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfQVVUT0hFQURFUj0iJEFVVE9IRUFERVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfQVVUT0hFQURFUj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIDs7Ci1lc2FjCi1maQotQVVUT0hFQURFUj0kYWNfY3ZfcGF0aF9BVVRPSEVBREVSCi0KLWlmIHRlc3QgLW4gIiRBVVRPSEVBREVSIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVVUT0hFQURFUiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVVUT0hFQURFUiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19BVVRPQ09ORiIgPSAieCI7IHRoZW4KLQlBVVRPQ09ORj0iOiIKLQotZmkKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19BVVRPSEVBREVSIiA9ICJ4IjsgdGhlbgotCUFVVE9IRUFERVI9IjoiCi0KLWZpCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAidW5hbWUiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHVuYW1lOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX1VOQU1FUFJPRytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXNlICRVTkFNRVBST0cgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfVU5BTUVQUk9HPSIkVU5BTUVQUk9HIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX1VOQU1FUFJPRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIDs7Ci1lc2FjCi1maQotVU5BTUVQUk9HPSRhY19jdl9wYXRoX1VOQU1FUFJPRwotCi1pZiB0ZXN0IC1uICIkVU5BTUVQUk9HIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVU5BTUVQUk9HIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRVTkFNRVBST0ciID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFVOQU1FUFJPRyAiJFVOQU1FUFJPRyIKLV9BQ0VPRgotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2NfY29uc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotLyogRklYTUU6IEluY2x1ZGUgdGhlIGNvbW1lbnRzIHN1Z2dlc3RlZCBieSBQYXVsLiAqLwotI2lmbmRlZiBfX2NwbHVzcGx1cwotICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLwotICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOwotICBjb25zdCBjaGFyc2V0IHg7Ci0gIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCi0gIGNoYXIgY29uc3QgKmNvbnN0ICpjY3A7Ci0gIGNoYXIgKipwOwotICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLwotICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307Ci0gIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OwotICAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMuCi0gICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCi0gICAgIGFuIGFybSBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQKLSAgICAgZXhwcmVzc2lvbiAqLwotICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7Ci0gIGNjcCA9ICZnICsgKGcgPyBnLWcgOiAwKTsKLSAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KLSAgKytjY3A7Ci0gIHAgPSAoY2hhcioqKSBjY3A7Ci0gIGNjcCA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwOwotICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMuICAqLwotICAgIGNoYXIgKnQ7Ci0gICAgY2hhciBjb25zdCAqcyA9IDAgPyAoY2hhciAqKSAwIDogKGNoYXIgY29uc3QgKikgMDsKLQotICAgICp0KysgPSAwOwotICB9Ci0gIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCi0gICAgaW50IHhbXSA9IHsyNSwgMTd9OwotICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07Ci0gICAgKytmb287Ci0gIH0KLSAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCi0gICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7Ci0gICAgaXB0ciBwID0gMDsKLSAgICArK3A7Ci0gIH0KLSAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc2F5aW5nCi0gICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLwotICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07Ci0gICAgc3RydWN0IHMgKmI7IGItPmogPSA1OwotICB9Ci0gIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCi0gICAgY29uc3QgaW50IGZvbyA9IDEwOwotICB9Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2NfY29uc3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2NfY29uc3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29uc3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIGNvbnN0Ci1fQUNFT0YKLQotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW5saW5lLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9jX2lubGluZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9jX2lubGluZT1ubwotZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGluZV9fIF9faW5saW5lOyBkbwotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZm5kZWYgX19jcGx1c3BsdXMKLXR5cGVkZWYgaW50IGZvb190Owotc3RhdGljICRhY19rdyBmb29fdCBzdGF0aWNfZm9vICgpIHtyZXR1cm4gMDsgfQotJGFjX2t3IGZvb190IGZvbyAoKSB7cmV0dXJuIDA7IH0KLSNlbmRpZgotCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3OyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2lubGluZSIgPiY2Ci0KLQotY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KLSAgaW5saW5lIHwgeWVzKSA7OwotICAqKQotICAgIGNhc2UgJGFjX2N2X2NfaW5saW5lIGluCi0gICAgICBubykgYWNfdmFsPTs7Ci0gICAgICAqKSBhY192YWw9JGFjX2N2X2NfaW5saW5lOzsKLSAgICBlc2FjCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2lmbmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBpbmxpbmUgJGFjX3ZhbAotI2VuZGlmCi1fQUNFT0YKLSAgICA7OwotZXNhYwotCi0KLQotIyBnZXQgdmVyc2lvbiBudW1iZXIuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5ldC1zbm1wIHZlcnNpb24gbnVtYmVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5ldC1zbm1wIHZlcnNpb24gbnVtYmVyLi4uICRFQ0hPX0MiID4mNgotVkVSU0lPTj0kUEFDS0FHRV9WRVJTSU9OCi0KLSMgY3JlYXRlIHRoZSByZWxlYXNlIHZlcnNpb24gbnVtYmVyLi4uLiAgSSdtIG5vdCBzdXJlIHRoaXMgaXMgdXNlZAotIyBhbnl3aGVyZSBhbnkgbG9uZ2VyLgotX3JlbGVhc2VfdmVyc2lvbj1gZWNobyAkVkVSU0lPTiB8IHNlZCAncy8iOy4qLy87cy8uKiIvLztzL3ByZS8wLi87J2AKLQotUkVMRUFTRVZFUlNJT049YGVjaG8gJF9yZWxlYXNlX3ZlcnNpb24gfCBzZWQgJ3MvXlwoWzAtOV1cKVwuXChbMC05XVwpL1wxOlwyOjAvJ2AKLQotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFZFUlNJT04iID4mNQotZWNobyAiJHtFQ0hPX1R9JFZFUlNJT04iID4mNgotCi0gIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKLSAgTmV0LVNOTVAgVmVyc2lvbjogICAgICAgICAgICRWRVJTSU9OCi1FT0YKLQotCi0jIHN1cGVyIHR5cGUgY2hlY2tpbmcKLSMgV1dXWFhYCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRldmVsb3BlciBnY2MgZmxhZ3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGV2ZWxvcGVyIGdjYyBmbGFncy4uLiAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRldmVsb3BlciBnY2MgZmxhZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRldmVsb3BlciBnY2MgZmxhZ3MuLi4gIiA+JjY7IH0KIGlmIHRlc3QgIngkZGV2ZWxvcGVyIiA9ICJ4eWVzIiAtYSAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCi0gIERFVkZMQUdTPSItV2FsbCAtV2lubGluZSAtV3N0cmljdC1wcm90b3R5cGVzIC1Xd3JpdGUtc3RyaW5ncyAtV2Nhc3QtcXVhbCAtV25vLWNoYXItc3Vic2NyaXB0cyIKKworICAgICMgICAgICAgV1dXWFhYIC0gc3RyaWN0IHR5cGUgY2hlY2tpbmcKKyAgICAjCisgICAgREVWRkxBR1M9Ii1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVd3cml0ZS1zdHJpbmdzIC1XY2FzdC1xdWFsIgogZWxzZQotICBERVZGTEFHUz0iIgorICAgIERFVkZMQUdTPSIiCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERFVkZMQUdTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRERVZGTEFHUyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERFVkZMQUdTIiA+JjUKKyRhc19lY2hvICIkREVWRkxBR1MiID4mNjsgfQogCiAKKworIyAgIGJ1aWxkaW5nIG91dHNpZGUgc291cmNlIGRpcmVjdG9yeQogIwotIyBoYWNrcyBmb3IgYnVpbGRpbmcgb3V0c2lkZSBvZiB0aGUgc291cmNlIGRpcmVjdG9yeQotIwotIyAxKSBtYWtlIHN1cmUgYnVpbGQgaW5jbHVkZSBwYXRocyBhcmUgYmVmb3JlIHNvdXJjZQotIyAyKSBjaGVjayBmb3IgR05VIG1ha2UgdG8gdXNlIHZwYXRoIGluc3RlYWQgb2YgVlBBVEgKKyMgICAgICAgYSkgZW5zdXJlIGJ1aWxkIGluY2x1ZGUgcGF0aHMgYXJlIGJlZm9yZSBzb3VyY2UKKyMgICAgICAgYikgZW5zdXJlIEdOVSBtYWtlIHVzZXMgJ3ZwYXRoJyBpbnN0ZWFkIG9mICdWUEFUSCcKICMKIE5PTl9HTlVfVlBBVEg9IlZQQVRIID0iCiBHTlVfdnBhdGg9IiN2cGF0aCIKKworIyAgICAgICBkZWZpbmUgaW5jbHVkZSBwYXRocyByZWxhdGl2ZSB0byB0b3Bfc3JjZGlyCisjICAgICAgIHR3ZWFrIGluY2x1ZGVzIGlmIHdlJ3JlIGJ1aWxkaW5nIG91dHNpZGUgb2YgdGhlIHNvdXJjZSBkaXIKICMKLSMgZGVmaW5lIGluY2x1ZGUgcGF0aHMgcmVsYXRpdmUgdG8gdG9wX3NyY2RpcgotIyB0d2VhayBpbmNsdWRlcyBpZiB3ZSdyZSBidWlsZGluZyBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgZGlyCiBpZiB0ZXN0ICJ4JHNyY2RpciIgPSAieC4iOyB0aGVuCi1UT1BfSU5DTFVERVM9U1JDX1RPUF9JTkNMVURFUwotU05NUExJQl9JTkNMVURFUz1TUkNfU05NUExJQl9JTkNMVURFUwotQUdFTlRfSU5DTFVERVM9U1JDX0FHRU5UX0lOQ0xVREVTCi1IRUxQRVJfSU5DTFVERVM9U1JDX0hFTFBFUl9JTkNMVURFUwotTUlCR1JPVVBfSU5DTFVERVM9U1JDX01JQkdST1VQX0lOQ0xVREVTCisgICAgVE9QX0lOQ0xVREVTPVNSQ19UT1BfSU5DTFVERVMKKyAgICBTTk1QTElCX0lOQ0xVREVTPVNSQ19TTk1QTElCX0lOQ0xVREVTCisgICAgQUdFTlRfSU5DTFVERVM9U1JDX0FHRU5UX0lOQ0xVREVTCisgICAgSEVMUEVSX0lOQ0xVREVTPVNSQ19IRUxQRVJfSU5DTFVERVMKKyAgICBNSUJHUk9VUF9JTkNMVURFUz1TUkNfTUlCR1JPVVBfSU5DTFVERVMKIGVsc2UKLVRPUF9JTkNMVURFUz1CTERfVE9QX0lOQ0xVREVTCi1TTk1QTElCX0lOQ0xVREVTPUJMRF9TTk1QTElCX0lOQ0xVREVTCi1BR0VOVF9JTkNMVURFUz1CTERfQUdFTlRfSU5DTFVERVMKLUhFTFBFUl9JTkNMVURFUz1CTERfSEVMUEVSX0lOQ0xVREVTCi1NSUJHUk9VUF9JTkNMVURFUz1CTERfTUlCR1JPVVBfSU5DTFVERVMKLW1ha2UgLXYgLWYgL2Rldi9udWxsIDI+L2Rldi9udWxsIHwgZ3JlcCBHTlUgPi9kZXYvbnVsbAotaGF2ZV9nbnVfbWFrZT0kPwotaWYgdGVzdCAkaGF2ZV9nbnVfbWFrZSAtZXEgMCA7IHRoZW4KLSAgICBOT05fR05VX1ZQQVRIPSIjVlBBVEggPSIKLSAgICBHTlVfdnBhdGg9InZwYXRoIgotZmkKKyAgICBUT1BfSU5DTFVERVM9QkxEX1RPUF9JTkNMVURFUworICAgIFNOTVBMSUJfSU5DTFVERVM9QkxEX1NOTVBMSUJfSU5DTFVERVMKKyAgICBBR0VOVF9JTkNMVURFUz1CTERfQUdFTlRfSU5DTFVERVMKKyAgICBIRUxQRVJfSU5DTFVERVM9QkxEX0hFTFBFUl9JTkNMVURFUworICAgIE1JQkdST1VQX0lOQ0xVREVTPUJMRF9NSUJHUk9VUF9JTkNMVURFUworICAgIGlmIHRlc3QgJGhhdmVfZ251X21ha2UgLWVxIDAgOyB0aGVuCisgICAgICAgIE5PTl9HTlVfVlBBVEg9IiNWUEFUSCA9IgorICAgICAgICBHTlVfdnBhdGg9InZwYXRoIgorICAgIGZpCiBmaQogCiAKQEAgLTIxNDU2LDQwICsxNTI4OCw1NSBAQAogCiAKIAotIwotIyBDaGVjayB3aGV0aGVyIHdlIGNhbiB1c2UgLVV4IC1EeD14IHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW91cgotIwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gdW4tZGVmaW5lIHRhcmdldCBzeXN0ZW0gdG9rZW4gKGJlZm9yZSByZWRlZmluaW5nKSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gdW4tZGVmaW5lIHRhcmdldCBzeXN0ZW0gdG9rZW4gKGJlZm9yZSByZWRlZmluaW5nKS4uLiAkRUNIT19DIiA+JjYKLU9MRF9DUFBGTEFHUz0iJENQUEZMQUdTIgotQ1BQRkxBR1M9Ii1VJFBBUlRJQUxUQVJHRVRPUyAtRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi1bCi0jaWZkZWYgJFBBUlRJQUxUQVJHRVRPUwoteWVzCi0jZW5kaWYKLV0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIFBBUlRJQUxUQVJHRVRGTEFHUz0iLVUkUEFSVElBTFRBUkdFVE9TIC1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgotIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorIyMKKyMgICBTeXN0ZW0tcmVsYXRlZCBjb21waWxhdGlvbiBjaGVja3M6CisjIworCisjICAgICAgIFdoYXQgc3lzdGVtIGFyZSB3ZSBidWlsZGluZyBmb3IKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl90YXJnZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBQQVJUSUFMVEFSR0VURkxBR1M9Ii1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgotIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgaWYgdGVzdCAieCR0YXJnZXRfYWxpYXMiID0geDsgdGhlbgorICBhY19jdl90YXJnZXQ9JGFjX2N2X2hvc3QKK2Vsc2UKKyAgYWNfY3ZfdGFyZ2V0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICR0YXJnZXRfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQogZmkKLXJtIC1mIGNvbmZ0ZXN0KgogCi1DRkxBR1M9IiRDRkxBR1MgJFBBUlRJQUxUQVJHRVRGTEFHUyIKLUNQUEZMQUdTPSIkT0xEX0NQUEZMQUdTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdGFyZ2V0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X3RhcmdldCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgdGFyZ2V0IiAiJExJTkVOTyIgNTs7Citlc2FjCit0YXJnZXQ9JGFjX2N2X3RhcmdldAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X3RhcmdldAorc2hpZnQKK3RhcmdldF9jcHU9JDEKK3RhcmdldF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Cit0YXJnZXRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJHRhcmdldF9vcyBpbiAqXCAqKSB0YXJnZXRfb3M9YGVjaG8gIiR0YXJnZXRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworIyBUaGUgYWxpYXNlcyBzYXZlIHRoZSBuYW1lcyB0aGUgdXNlciBzdXBwbGllZCwgd2hpbGUgJGhvc3QgZXRjLgorIyB3aWxsIGdldCBjYW5vbmljYWxpemVkLgordGVzdCAtbiAiJHRhcmdldF9hbGlhcyIgJiYKKyAgdGVzdCAiJHByb2dyYW1fcHJlZml4JHByb2dyYW1fc3VmZml4JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiID0gXAorICAgIE5PTkVOT05Fcyx4LHgsICYmCisgIHByb2dyYW1fcHJlZml4PSR7dGFyZ2V0X2FsaWFzfS0KKworUEFSVElBTFRBUkdFVE9TPWBlY2hvICR0YXJnZXRfb3MgfCBzZWQgJ3MvWy0uX10uKi8vJ2AKKwogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgQnVpbGRpbmcgZm9yOiAgICAgICAgICAgICAgICRQQVJUSUFMVEFSR0VUT1MKQEAgLTIxNDk4LDI0ICsxNTM0NSwxMDggQEAKIAogCiAjCi0jIGNoZWNrIGZvciBzcGVjaWFsIGluY2x1ZGVzIGFuZCBwaWNrIG9uZQorIyAgICBXaGV0aGVyIG9yIG5vdCBDeWd3aW4ncyBsZCByZWNvZ25pemVzIHRoZSBmbGFnIC1uby11bmRlZmluZWQuCiAjCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3lzdGVtIGluY2x1ZGUgZmlsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzeXN0ZW0gaW5jbHVkZSBmaWxlLi4uICRFQ0hPX0MiID4mNgorY2FzZSB4JHRhcmdldF9vcyBpbgoreGN5Z3dpbiopCisgIHNhdmVkX0xERkxBR1M9JExERkxBR1MKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGxpbmtlciBzdXBwb3J0cyAtbm8tdW5kZWZpbmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGxpbmtlciBzdXBwb3J0cyAtbm8tdW5kZWZpbmVkLi4uICIgPiY2OyB9CisgIExERkxBR1M9IiRzYXZlZF9MREZMQUdTIC1XbCwtbm8tdW5kZWZpbmVkIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07ICAgICAgICAgICAgICAgICAgIExEX05PX1VOREVGSU5FRD0tbm8tdW5kZWZpbmVkCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgTERGTEFHUz0iJHNhdmVkX0xERkxBR1MiCisgIDs7Citlc2FjCisKKworCisKKyMKKyMgICBTb2NrZXQgbGlicmFyeTogZWl0aGVyICdkZWZhdWx0JyAobm9uLU1pbkdXKSBvciAnd2luc29jazInIChNaW5HVykuCisjCitjYXNlIHgkdGFyZ2V0X29zIGluCisgIHhtaW5ndyopCisgICAgd2l0aF9zb2NrbGliPXdpbnNvY2syCisgICAgaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KKyAgICAgIENGTEFHUz0iLURfV0lOMzJfV0lOTlQ9MHgwNTAxICRDRkxBR1MiCisgICAgZmkKKyAgICA7OworICAqKQorICAgIHdpdGhfc29ja2xpYj1kZWZhdWx0OzsKK2VzYWMKKworCisjICAgQ2hlY2sgc3lzdGVtIGRlZmluZSBiZWhhdmlvdXIKKyMgICAgICAgRG9lcyAiLVV4IC1EeD14IiB3b3JrIGFzIGV4cGVjdGVkPworIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHVuLWRlZmluZSB0YXJnZXQgc3lzdGVtIHRva2VuIChiZWZvcmUgcmVkZWZpbmluZykiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byB1bi1kZWZpbmUgdGFyZ2V0IHN5c3RlbSB0b2tlbiAoYmVmb3JlIHJlZGVmaW5pbmcpLi4uICIgPiY2OyB9CitPTERfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKK0NQUEZMQUdTPSItVSRQQVJUSUFMVEFSR0VUT1MgLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCisKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK1sKKyNpZmRlZiAkUEFSVElBTFRBUkdFVE9TCit5ZXMKKyNlbmRpZgorICAgIF0KK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgICBQQVJUSUFMVEFSR0VURkxBR1M9Ii1VJFBBUlRJQUxUQVJHRVRPUyAtRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICAgIFBBUlRJQUxUQVJHRVRGTEFHUz0iLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29uZnRlc3QqCisKK0NGTEFHUz0iJENGTEFHUyAkUEFSVElBTFRBUkdFVEZMQUdTIgorQ1BQRkxBR1M9IiRPTERfQ1BQRkxBR1MiCisKKworIyAgICAgICBEZXRlcm1pbmUgYXBwcm9wcmlhdGUgPG5ldC1zbm1wL3N5c3RlbS97b3N9Lmg+IGluY2x1ZGUKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3RlbSBpbmNsdWRlIGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3RlbSBpbmNsdWRlIGZpbGUuLi4gIiA+JjY7IH0KIAogZmlsZWJhc2U9JHRhcmdldF9vcwogIyBpZ25vcmUgYmluYXJ5IGZvcm1hdCBpbmRpY2F0aW9uCi1maWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvZWxmLy8nYAotZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL2FvdXQvLydgCi1maWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvZWNvZmYvLydgCi1maWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvY29mZi8vJ2AKK2ZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvZWxmLy8nYAorZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9hb3V0Ly8nYAorZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9lY29mZi8vJ2AKK2ZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvY29mZi8vJ2AKIHdoaWxlIHRlc3QgIngkZmlsZWJhc2UiICE9ICJ4JGxhc3QiIC1hICEgLWYgJHNyY2Rpci9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS8kZmlsZWJhc2UuaAogZG8KICAgICBsYXN0PSRmaWxlYmFzZQotICAgIGZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9bLS5fXVteLS5fXSokLy8nYAorICAgIGZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvWy0uX11bXi0uX10qJC8vJ2AKICAgICBpZiB0ZXN0ICJ4JGZpbGViYXNlIiA9ICJ4JGxhc3QiOyB0aGVuCi0JZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL1swLTldKiQvLydgCisJZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9bMC05XSokLy8nYAogICAgIGZpCiBkb25lCiAKQEAgLTIxNTI0LDI0ICsxNTQ1NSwyNCBAQAogZmkKIGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRT0ibmV0LXNubXAvc3lzdGVtLyRmaWxlYmFzZS5oIgogCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSIgPiY2OyB9CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSAiJGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSIKIF9BQ0VPRgogCiAKLSMgc2Vjb25kIHBhcnQsIHRoZSBDUFUgdHlwZS4KIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYWNoaW5lLXR5cGUgaW5jbHVkZSBmaWxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1hY2hpbmUtdHlwZSBpbmNsdWRlIGZpbGUuLi4gJEVDSE9fQyIgPiY2CisjICAgICAgIERldGVybWluZSBhcHByb3ByaWF0ZSA8bmV0LXNubXAvbWFjaGluZS97Y3B1fS5oPiBpbmNsdWRlCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBtYWNoaW5lLXR5cGUgaW5jbHVkZSBmaWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtYWNoaW5lLXR5cGUgaW5jbHVkZSBmaWxlLi4uICIgPiY2OyB9CiAKIGZpbGViYXNlPSR0YXJnZXRfY3B1CiB3aGlsZSB0ZXN0ICJ4JGZpbGViYXNlIiAhPSAieCRsYXN0IiAtYSAhIC1mICRzcmNkaXIvaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lLyRmaWxlYmFzZS5oCiBkbwogICAgIGxhc3Q9JGZpbGViYXNlCi0gICAgZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL1stLl9dW14tLl9dKiQvLydgCisgICAgZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9bLS5fXVteLS5fXSokLy8nYAogZG9uZQogCiBpZiB0ZXN0ICJ4JGZpbGViYXNlIiA9ICJ4JGxhc3QiOyB0aGVuCkBAIC0yMTU0OSwyMCArMTU0ODAsNTkgQEAKIGZpCiBhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFPSJuZXQtc25tcC9tYWNoaW5lLyRmaWxlYmFzZS5oIgogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSIgPiY2Ci0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUiID4mNjsgfQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFICIkYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSIKIF9BQ0VPRgogCiAKKworIyMKKyMgICBQbGF0Zm9ybS1zcGVjaWZpYyBjb21waWxhdGlvbiBjaGVja3M6CisjIworCisjICAgUHJlcHJvY2Vzc29yIGNoZWNrczoKKyMKKworIyAgICAgICBNb3JlIHNlbnNpYmxlIHN5c3RlbSBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAoTWluR1cpCisjCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgorCUNGTEFHUz0iJENGTEFHUyAtRG1pbmd3MzIiCitmaQorCisjICAgICAgIEhhbmRsZSAuaW4gZmlsZSBleHRlbnNpb24gICAgICAgICAgICAgICAgICAgICAgIChHQ0MpCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhZGRpdGlvbmFsIGNwcCBmbGFncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYWRkaXRpb25hbCBjcHAgZmxhZ3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiAtYSAieCRDUFAiID0gIngkQ0MgLUUiOyB0aGVuCisgICAgRVhUUkFDUFBGTEFHUz0iLXggYyIKK2Vsc2UKKyAgICBFWFRSQUNQUEZMQUdTPSIiCitmaQorCisjICAgICAgIFNvbGFyaXMgZXh0cmEgQ1BQIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorIworaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIjsgdGhlbgorICAgIGNhc2UgJHRhcmdldF9vcyBpbgorICAgICAgICBzb2xhcmlzKikgRVhUUkFDUFBGTEFHUz0iJEVYVFJBQ1BQRkxBR1MgLVhzIiA7OworICAgIGVzYWMKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRFWFRSQUNQUEZMQUdTIiA+JjUKKyRhc19lY2hvICIkRVhUUkFDUFBGTEFHUyIgPiY2OyB9CisKKworIyAgIENvbXBpbGVyIGNoZWNrczoKKyMKKwogIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkQ0MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICRDQzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9DQ1BBVEgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0NDUEFUSCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgJENDUEFUSCBpbgogICBbXFwvXSogfCA/OltcXC9dKikKQEAgLTIxNTc0LDk5ICsxNTU0NCw2NiBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3BhdGhfQ0NQQVRIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogICA7OwogZXNhYwogZmkKIENDUEFUSD0kYWNfY3ZfcGF0aF9DQ1BBVEgKLQogaWYgdGVzdCAtbiAiJENDUEFUSCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDUEFUSCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0NQQVRIIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQ1BBVEgiID4mNQorJGFzX2VjaG8gIiRDQ1BBVEgiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotIyB3YXRjaCBvdXQgZm9yIC91c3IvdWNiL2NjIG9uIHNvbGFyaXMsIGl0IGRvZXNuJ3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4KKwogY2FzZSAkdGFyZ2V0X29zIGluCiAgICAgYnNkaSopCisgICAgICAgICMgICBDaGVjayBmb3IgYnVuZGxlZCBjb21waWxlciAgICAgICAgICAgICAgICAgIChCU0RpKQorICAgICAgICAjCiAJaWYgdGVzdCAieCRDQ1BBVEgiID0gIngvdXNyL3VjYi9jYyIgLW8gIngkQ0NQQVRIIiA9ICJ4L3Vzci9iaW4vY2MiOyB0aGVuCi0JICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6CisJICAgIGFzX2ZuX2Vycm9yICQ/ICIKIAogKioqIFRoZSBCU0RJIC91c3IvdWNiL2NjIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuCiAqKiogUGxlYXNlIHJ1biBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9Z2NjCi0iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjoKLQotKioqIFRoZSBCU0RJIC91c3IvdWNiL2NjIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuCi0qKiogUGxlYXNlIHJ1biBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9Z2NjCi0iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyIgIiRMSU5FTk8iIDUKIAlmaQogICAgIDs7CiAgICAgc29sYXJpcyopCisgICAgICAgICMgICBDaGVjayBmb3IgYnVuZGxlZCBjb21waWxlciAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorICAgICAgICAjCiAJaWYgdGVzdCAieCRDQ1BBVEgiID0gIngvdXNyL3VjYi9jYyI7IHRoZW4KLQkgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjoKKwkgICAgYXNfZm5fZXJyb3IgJD8gIgogCiAqKiogVGhlIHNvbGFyaXMgL3Vzci91Y2IvY2MgY29tcGlsZXIgZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4KICoqKiBQbGVhc2UgcHV0IGEgZGlmZmVyZW50IGNvbXBpbGVyIGluIHlvdXIgcGF0aCBmaXJzdCBvciBydW4KICoqKiBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9WFgsIHdoZXJlIFhYIGlzIHRoZSBjb21waWxlciB5b3Ugd2FudCB0byB1c2UuCi0iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjoKLQotKioqIFRoZSBzb2xhcmlzIC91c3IvdWNiL2NjIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuCi0qKiogUGxlYXNlIHB1dCBhIGRpZmZlcmVudCBjb21waWxlciBpbiB5b3VyIHBhdGggZmlyc3Qgb3IgcnVuCi0qKiogY29uZmlndXJlIHdpdGggLS13aXRoLWNjPVhYLCB3aGVyZSBYWCBpcyB0aGUgY29tcGlsZXIgeW91IHdhbnQgdG8gdXNlLgotIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisiICIkTElORU5PIiA1CiAJZmkKICAgICA7OwogZXNhYwogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFkZGl0aW9uYWwgY3BwIGZsYWdzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFkZGl0aW9uYWwgY3BwIGZsYWdzLi4uICRFQ0hPX0MiID4mNgotIyBnY2MgZXh0cmEgQ1BQRkxBR1MKLWlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiAtYSAieCRDUFAiID0gIngkQ0MgLUUiOyB0aGVuCi0gICMgZXh0cmEgY3BwIGZsYWdzIGZvciBnbnUgYyBjb21waWxlciB0byBhbGxvdyAuaW4gZmlsZSBleHRlbnNpb25zLgotICBFWFRSQUNQUEZMQUdTPSIteCBjIgotZWxzZQotICBFWFRSQUNQUEZMQUdTPSIiCi1maQotCi0jIFNvbGFyaXMgZXh0cmEgY3BwIGZsYWdzLgotaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIjsgdGhlbgotICBjYXNlICR0YXJnZXRfb3MgaW4KLSAgICBzb2xhcmlzKikgRVhUUkFDUFBGTEFHUz0iJEVYVFJBQ1BQRkxBR1MgLVhzIiA7OwotICBlc2FjCi1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRFWFRSQUNQUEZMQUdTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRFWFRSQUNQUEZMQUdTIiA+JjYKIAogIyAgIENvbXBpbGVyIGZsYWdzOgogIwogCiAjIFRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBpcyBub3Qgc3RyaWN0LWFsaWFzaW5nIHNhZmUsIHNvIGFkZAogIyAtZm5vLXN0cmljdC1hbGlhc2luZyB0byAkQ0ZMQUdTIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdC4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyAtZm5vLXN0cmljdC1hbGlhc2luZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nLi4uICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyAtZm5vLXN0cmljdC1hbGlhc2luZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyAtZm5vLXN0cmljdC1hbGlhc2luZy4uLiAiID4mNjsgfQogbmV0c25tcF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKIENGTEFHUz0iLWZuby1zdHJpY3QtYWxpYXNpbmcgJENGTEFHUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTIxNjc3LDc4ICsxNTYxNCwxOTcgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogICBDRkxBR1M9IiRuZXRzbm1wX3NhdmVfQ0ZMQUdTIgogCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAKLSMgUHJlZml4ZXMgbXVzdCBiZWdpbiB3aXRoICIvIiBvciBbQS1aXSBmb2xsb3dlZCBieSBjb2xvbi4KIAorIyAgIExpbmtlciBjaGVja3M6CisjCisKK2Nhc2UgJHRhcmdldF9vcyBpbgorICAgIGFpeDQuMip8YWl4NC4zKnxhaXg1KnxhaXg2KnxhaXg3KikKKyAgICAgICAgIyAgIFJ1bnRpbWUgbGlua2luZyBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgKEFJWCkKKyAgICAgICAgIworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoYXQgbGlua2VyIGZsYWdzIHRvIGFkZCB0byBlbmFibGUgcnVudGltZSBsaW5raW5nIG9uIEFJWCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGF0IGxpbmtlciBmbGFncyB0byBhZGQgdG8gZW5hYmxlIHJ1bnRpbWUgbGlua2luZyBvbiBBSVguLi4gIiA+JjY7IH0KKyAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorICAgICAgICAgICAgICAgIG5ldHNubXBfYWl4X3J1bnRpbWVsaW5raW5nX2ZsYWdzX29rPXllcworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGlmIHRlc3QgIlgkbmV0c25tcF9haXhfcnVudGltZWxpbmtpbmdfZmxhZ3Nfb2siICE9ICJYeWVzIjsgdGhlbgorCSAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKwkgICAgICAgIG5ldHNubXBfYWl4X2xkZmxhZ3M9Ii1XbCwtYnJ0bCIKKwkgICAgZWxzZQorICAgICAgICAgICAgICAgIG5ldHNubXBfYWl4X2xkZmxhZ3M9Ii1icnRsIgorCSAgICBmaQorICAgICAgICAgICAgTERGTEFHUz0iJG5ldHNubXBfYWl4X2xkZmxhZ3MgJExERkxBR1MiCisJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9haXhfbGRmbGFncyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfYWl4X2xkZmxhZ3MiID4mNjsgfQorCWVsc2UKKwkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUiID4mNQorJGFzX2VjaG8gIm5vbmUiID4mNjsgfQorCWZpCisJOzsKKworICAgIGRhcndpbjgqfGRhcndpbjkqfGRhcndpbjEwKnxkYXJ3aW4xMSp8ZGFyd2luMTIqfGRhcndpbjEzKikKKyAgICAgICAgIyAgIEZsYXQgTmFtZXNwYWNlIGxpbmtpbmcgICAgICAgICAgICAgICAgICAgICAgKE1hYyBPUy9YKQorICAgICAgICAjCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBkYXJ3aW4gbGQgbWlnaHQgbmVlZCAtZmxhdF9uYW1lc3BhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBkYXJ3aW4gbGQgbWlnaHQgbmVlZCAtZmxhdF9uYW1lc3BhY2UuLi4gIiA+JjY7IH0KKwlpZiB0ZXN0IC16ICIkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIjsgdGhlbgorCQlMREZMQUdTPSItZmxhdF9uYW1lc3BhY2UgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiAtZnJhbWV3b3JrIENvcmVTZXJ2aWNlcyAtZnJhbWV3b3JrIERpc2tBcmJpdHJhdGlvbiAtZnJhbWV3b3JrIElPS2l0ICRMREZMQUdTIgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJZmkKKwk7OworCisgICAgKikKKyAgICAgICAgOzsKK2VzYWMKKworCisjICAgICAgIGRwa2cgcGFja2FnZSAoc3dpbnRzdF9hcHQpCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHBrZy1xdWVyeSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZHBrZy1xdWVyeTsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRFBLR19RVUVSWV9QQVRIKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkRFBLR19RVUVSWV9QQVRIIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0RQS0dfUVVFUllfUEFUSD0iJERQS0dfUVVFUllfUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRFBLR19RVUVSWV9QQVRIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorRFBLR19RVUVSWV9QQVRIPSRhY19jdl9wYXRoX0RQS0dfUVVFUllfUEFUSAoraWYgdGVzdCAtbiAiJERQS0dfUVVFUllfUEFUSCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREUEtHX1FVRVJZX1BBVEgiID4mNQorJGFzX2VjaG8gIiREUEtHX1FVRVJZX1BBVEgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworaWYgdGVzdCB4JERQS0dfUVVFUllfUEFUSCAhPSB4OyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRFBLR19RVUVSWSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjIworIyAgIE5vbi1wcm9ncmFtL2NvbXBpbGF0aW9uIGNoZWNrczoKKyMjCisKKyMgICAgICAgU3Vic3RpdHV0ZSB2ZXJzaW9uIG51bWJlci4KKyMKK1ZFUlNJT049JFBBQ0tBR0VfVkVSU0lPTgorCisKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICBOZXQtU05NUCBWZXJzaW9uOiAgICAgICAgICAgJFBBQ0tBR0VfVkVSU0lPTgorRU9GCisKKworCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDb25maWd1cmUgcGF0aHMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFByZWZpeCBwYXRoczoKKyMjCisKKyMgICBNYWluIHByZWZpeAorIwogaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgogICBwcmVmaXg9L3Vzci9sb2NhbAogZmkKIAotZmNoPWBlY2hvICRwcmVmaXggfCBzZWQgJ3MvXCguXCkuKi9cMS8nYAotaWYgdGVzdCAieCRmY2giICE9ICJ4LyIgOyB0aGVuCi0gICBzY2g9YGVjaG8gJHByZWZpeCB8IHNlZCAncy8uXCguXCkuKi9cMS8nYAotICAgaWYgdGVzdCAieCRzY2giICE9ICJ4OiIgOyB0aGVuCisjICAgICAgIFByZWZpeCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgKKyMgICAgICAgICAgIGkuZS4gYmVnaW4gd2l0aCAiLyIgICAgICAgICAgICAgICAgICAgICAgICAgKFVuaXgpCisjICAgICAgICAgICAgICAgIG9yICJbQS1aXToiICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXaW5kb3dzKQorIworZmlyc3RjaGFyPWBlY2hvICRwcmVmaXggfCAkU0VEICdzL1woLlwpLiovXDEvJ2AKK2lmIHRlc3QgIngkZmlyc3RjaGFyIiAhPSAieC8iIDsgdGhlbgorICAgc2Vjb25kY2hhcj1gZWNobyAkcHJlZml4IHwgJFNFRCAncy8uXCguXCkuKi9cMS8nYAorICAgaWYgdGVzdCAieCRzZWNvbmRjaGFyIiAhPSAieDoiIDsgdGhlbgogICAgICAgcHJlZml4PWBwd2RgLyRwcmVmaXgKICAgICAgIGVjaG8gImFkanVzdGluZyBwcmVmaXggdG8gJHByZWZpeCIKICAgIGZpCiBmaQogCi1pZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KLSAgZXhlY19wcmVmaXg9JHByZWZpeAotZmkKIAotZmNoPWBlY2hvICRleGVjX3ByZWZpeCB8IHNlZCAncy9cKC5cKS4qL1wxLydgCi1pZiB0ZXN0ICJ4JGZjaCIgIT0gIngvIiA7IHRoZW4KLSAgIHNjaD1gZWNobyAkZXhlY19wcmVmaXggfCBzZWQgJ3MvLlwoLlwpLiovXDEvJ2AKLSAgIGlmIHRlc3QgIngkc2NoIiAhPSAieDoiIDsgdGhlbgotICAgICAgZXhlY19wcmVmaXg9YHB3ZGAvJGV4ZWNfcHJlZml4Ci0gICAgICBlY2hvICJhZGp1c3RpbmcgZXhlY19wcmVmaXggdG8gJGV4ZWNfcHJlZml4IgorIyAgIEV4ZWMgcHJlZml4CisjCisjICAgICAgIFByZWZpeCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgKKyMgICAgICAgICAgIGkuZS4gYmVnaW4gd2l0aCAiLyIgICAgICAgICAgICAgICAgICAgICAgICAgKFVuaXgpCisjICAgICAgICAgICAgICAgIG9yICJbQS1aXToiICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXaW5kb3dzKQorIworaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCisgICBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworZWxzZQorICAgZmlyc3RjaGFyPWBlY2hvICRleGVjX3ByZWZpeCB8ICRTRUQgJ3MvXCguXCkuKi9cMS8nYAorICAgaWYgdGVzdCAieCRmaXJzdGNoYXIiICE9ICJ4LyIgOyB0aGVuCisgICAgICBzZWNvbmRjaGFyPWBlY2hvICRleGVjX3ByZWZpeCB8ICRTRUQgJ3MvLlwoLlwpLiovXDEvJ2AKKyAgICAgIGlmIHRlc3QgIngkc2Vjb25kY2hhciIgIT0gIng6IiA7IHRoZW4KKyAgICAgICAgIGV4ZWNfcHJlZml4PWBwd2RgLyRleGVjX3ByZWZpeAorICAgICAgICAgZWNobyAiYWRqdXN0aW5nIGV4ZWNfcHJlZml4IHRvICRleGVjX3ByZWZpeCIKKyAgICAgIGZpCiAgICBmaQogZmkKIAotIyBTZXQgU05NUExJQlBBVEggJiBTTk1QU0hBUkVQQVRICiAKKyMjCisjICAgRW52aXJvbm1lbnRhbCB2YXJpYWJsZXM6CisjIworCisjICAgICAgIFNOTVBMSUJQQVRICisjCiBTTk1QTElCUEFUSD0iIgogdG1wc2V0PSIkbGliZGlyL3NubXAiCiB3aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUExJQlBBVEgiOyBkbwotICBTTk1QTElCUEFUSD0iJHRtcHNldCIKLSAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCisgICAgU05NUExJQlBBVEg9IiR0bXBzZXQiCisgICAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCiBkb25lCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNOTVBMSUJQQVRIICIkU05NUExJQlBBVEgiCkBAIC0yMTc2MCwxMSArMTU4MTYsMTMgQEAKIF9BQ0VPRgogCiAKKyMgICAgICAgU05NUFNIQVJFUEFUSAorIwogU05NUFNIQVJFUEFUSD0iIgogdG1wc2V0PSIkZGF0YWRpci9zbm1wIgogd2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBTSEFSRVBBVEgiOyBkbwotICBTTk1QU0hBUkVQQVRIPSIkdG1wc2V0IgotICBldmFsIHRtcHNldD0iJHRtcHNldCIKKyAgICBTTk1QU0hBUkVQQVRIPSIkdG1wc2V0IgorICAgIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgogZG9uZQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTTk1QU0hBUkVQQVRIICIkU05NUFNIQVJFUEFUSCIKQEAgLTIxNzcyLDIzICsxNTgzMCwyOSBAQAogCiAKIAorIyAgICAgICBNSUJESVJTICAgKGRlZmF1bHQpCisjCiBpZiB0ZXN0ICJ4JE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIiA9ICJ4IjsgdGhlbgotICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz0iXCRIT01FLy5zbm1wL21pYnM6JFNOTVBTSEFSRVBBVEgvbWlicyIKLSAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICAgIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPWBlY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiIHwgJFNFRCAncy86LzsvZydgCi0gIGZpCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyAgICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz0iXCRIT01FLy5zbm1wL21pYnM6JFNOTVBTSEFSRVBBVEgvbWlicyIKKyAgICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCisgICAgICAgICMKKyAgICAgICAgIyAgICBVU2UgV2luZG93cy1zdHlsZSBwYXRoIHNlcGFyYXRvcgorICAgICAgICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz1gZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIiB8ICRTRUQgJ3MvOi87L2cnYAorICAgIGZpCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfTUlCRElSUyAiJE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIgogX0FDRU9GCiAKIGZpCiAKIAorIyAgICAgICBTTk1QQ09ORlBBVEgKKyMKIFNOTVBDT05GUEFUSD0iIgogdG1wc2V0PSIkc3lzY29uZmRpci9zbm1wIgogd2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBDT05GUEFUSCI7IGRvCi0gIFNOTVBDT05GUEFUSD0iJHRtcHNldCIKLSAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCisgICAgU05NUENPTkZQQVRIPSIkdG1wc2V0IgorICAgIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgogZG9uZQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTTk1QQ09ORlBBVEggIiRTTk1QQ09ORlBBVEgiCkBAIC0yMTc5NiwzMDM0ICsxNTg2MCwyNDQyIEBACiAKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNob3J0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNob3J0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3Nob3J0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTdGFuZGFyZCBjaGVja3M6CisjIworIyAgQ29yZToKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCiBpbnQKIG1haW4gKCkKIHsKLWlmICgoc2hvcnQgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChzaG9ydCkpCi0gIHJldHVybiAwOworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9zaG9ydD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfc2hvcnQ9bm8KKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2hvcnQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2hvcnQiID4mNgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIHNob3J0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3Nob3J0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisgICAgICAgICAgIyAgPHN0ZGxpYi5oPiwgPHN0ZGFyZy5oPiwgICA8c3RyaW5nLmg+ICAmIDxmbG9hdC5oPgorYWNfaGVhZGVyX2RpcmVudD1ubworZm9yIGFjX2hkciBpbiBkaXJlbnQuaCBzeXMvbmRpci5oIHN5cy9kaXIuaCBuZGlyLmg7IGRvCisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl9kaXJlbnRfJGFjX2hkciIgfCAkYXNfdHJfc2hgCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskYXNfYWNfSGVhZGVyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPCRhY19oZHI+CisKK2ludAorbWFpbiAoKQoreworaWYgKChESVIgKikgMCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2FjX0hlYWRlcgorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZHIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2FjX2hlYWRlcl9kaXJlbnQ9JGFjX2hkcjsgYnJlYWsKK2ZpCisKK2RvbmUKKyMgVHdvIHZlcnNpb25zIG9mIG9wZW5kaXIgZXQgYWwuIGFyZSBpbiAtbGRpciBhbmQgLWx4IG9uIFNDTyBYZW5peC4KK2lmIHRlc3QgJGFjX2hlYWRlcl9kaXJlbnQgPSBkaXJlbnQuaDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBvcGVuZGlyICgpOworaW50CittYWluICgpCit7CityZXR1cm4gb3BlbmRpciAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBkaXI7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfb3BlbmRpcj0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX29wZW5kaXIKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBvcGVuZGlyICgpOworaW50CittYWluICgpCit7CityZXR1cm4gb3BlbmRpciAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyB4OyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9vcGVuZGlyCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKK2ZpCisgICAgICAgICMgIDxkaXJlbnQuaD4sIDxzeXMvbmRpci5oPiwgPHN5cy9kaXIuaD4gJiA8bmRpci5oPgorIyAgQXBwczoKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N5c193YWl0X2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpZm5kZWYgV0VYSVRTVEFUVVMKKyMgZGVmaW5lIFdFWElUU1RBVFVTKHN0YXRfdmFsKSAoKHVuc2lnbmVkIGludCkgKHN0YXRfdmFsKSA+PiA4KQorI2VuZGlmCisjaWZuZGVmIFdJRkVYSVRFRAorIyBkZWZpbmUgV0lGRVhJVEVEKHN0YXRfdmFsKSAoKChzdGF0X3ZhbCkgJiAyNTUpID09IDApCisjZW5kaWYKKworaW50CittYWluICgpCit7CisgIGludCBzOworICB3YWl0ICgmcyk7CisgIHMgPSBXSUZFWElURUQgKHMpID8gV0VYSVRTVEFUVVMgKHMpIDogMTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3lzX3dhaXRfaD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2ggPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEiID4+Y29uZmRlZnMuaAorCitmaQorICAgICAgIyAgPHN5cy93YWl0Lmg+CisKKyMgYWxsb3cgZm9yIHF1aWNrIG1vZHVsZS9saWJyYXJ5L2V0YyBwcm9jZXNzaW5nIGNoZWNrcworaWYgdGVzdCAieCRORVRTTk1QX1FVSUNLX0NIRUNLIiA9ICJ4IiA7IHRoZW4KKworIyMKKyMgICBTdGFuZC1hbG9uZSBoZWFkZXJzOgorIyMKKyMgIENvcmU6Citmb3IgYWNfaGVhZGVyIGluIGdldG9wdC5oICAgcHRocmVhZC5oICByZWdleC5oICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmggICBzeXNsb2cuaCAgIHVuaXN0ZC5oICAgICAgICAgICAgICAgICAgICAgICBzdGRpbnQuaCAgIGludHR5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9wYXJhbS5oICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvc2VsZWN0LmggICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3NvY2tldC5oICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy90aW1lLmggICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvdGltZWIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3VuLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICBMaWJyYXJ5IGFuZCBBZ2VudDoKK2ZvciBhY19oZWFkZXIgaW4gbmxpc3QuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAibmxpc3QuaCIgImFjX2N2X2hlYWRlcl9ubGlzdF9oIiAiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZuZGVmIExJQkJTRF9ESVNBQkxFX0RFUFJFQ0FURUQKKyNkZWZpbmUgTElCQlNEX0RJU0FCTEVfREVQUkVDQVRFRCAxCisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmxpc3RfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05MSVNUX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICBMaWJyYXJ5OgorZm9yIGFjX2hlYWRlciBpbiBmY250bC5oICAgIGlvLmggICAgICAga3N0YXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzLmggICBsb2NhbGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9maWxlLmggICAgICAgc3lzL2lvY3RsLmggICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvc29ja2lvLmggICAgIHN5cy9zdGF0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3N5c3RlbWNmZy5oICBzeXMvc3lzdGVtaW5mby5oICAgICAgICAgICAgICAgICAgICAgIHN5cy90aW1lcy5oICAgICAgc3lzL3Vpby5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvdXRzbmFtZS5oICAgICAgICAgICAgICAgICAgICAgICAgbmV0aXB4L2lweC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgQWdlbnQ6Citmb3IgYWNfaGVhZGVyIGluIGRsZmNuLmggICAgZXJyLmggICAgICBmY250bC5oICAgIGZzdGFiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycC5oICAgICAgaW8uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jdGxzLmggICBrc3RhdC5oICAgIGt2bS5oICAgICAgbGltaXRzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW50ZW50LmggICBtdGFiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2xvY3MuaCAgICAgICAgICAgICBwd2QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21fZXJyLmggICAgICAgICAgICAgZXQvY29tX2Vyci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRtcHguaCAgICB1dHNuYW1lLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIHN5cy9kaXNraW8uaCAgc3lzL2RraW8uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9maWxlLmggICAgc3lzL2ZpbGlvLmggICBzeXMvZml4cG9pbnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9mcy5oICAgICAgc3lzL2lvY3RsLmggICBzeXMvbG9hZGF2Zy5oICBzeXMvbW50ZW50LmggICAgICAgICAgICAgICAgICAgIHN5cy9tbnR0YWIuaCAgc3lzL3Bvb2wuaCAgICBzeXMvcHJvdG9zdy5oICBzeXMvcHN0YXQuaCAgICAgICAgICAgICAgICAgICAgIHN5cy9zb2NraW8uaCAgc3lzL3N0YXQuaCAgICBzeXMvc3RhdGZzLmggICBzeXMvc3RhdHZmcy5oICAgICAgICAgICAgICAgICAgIHN5cy9zdHJlYW0uaCAgc3lzL3N5c2dldC5oICBzeXMvc3lzbXAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy90Y3BpcHN0YXRzLmggICAgICAgICAgICBzeXMvdXRzbmFtZS5oICBzeXMvdmZzLmggICAgICAgICAgICAgICAgICAgICAgIHN5cy92bS5oICAgICAgc3lzL3ZtbWFjLmggICBzeXMvdm1tZXRlci5oICBzeXMvdm1wYXJhbS5oICAgICAgICAgICAgICAgICAgIHN5cy92bXN5c3RtLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIGFzbS9wYWdlLmggYXNtL3R5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0L21pYjIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgvaGRyZWcuaCBsaW51eC90YXNrcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUvcGFyYW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3RjcF9mc20uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZzL2ZzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2bS91dm1fZXh0ZXJuLmggdXZtL3V2bV9wYXJhbS5oICAgICAgICAgICAgICAgICAgICAgICB2bS92bS5oIHZtL3ZtX2V4dGVybi5oIHZtL3ZtX3BhcmFtLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICBBcHBzOgorZm9yIGFjX2hlYWRlciBpbiBmY250bC5oICAgIGdycC5oICAgICAgcHdkLmggICAgICAgICAgICAgICAgICAgICAgICBzeXMvY2RlZnMuaCAgIHN5cy9pb2N0bC5oICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvc29ja2V0LmggIHN5cy9zb2NraW8uaCAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvdGltZS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgTm90LVVzZWQ6Citmb3IgYWNfaGVhZGVyIGluIHNlYXJjaC5oICAgc2d0dHkuaCAgICB4dGkuaCAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9kbWFwLmggc3lzL3BvbGwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy90aW1lb3V0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUvcHRlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaS9wY2kuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworIyBWYWxncmluZAorZm9yIGFjX2hlYWRlciBpbiB2YWxncmluZC92YWxncmluZC5oIHZhbGdyaW5kL21lbWNoZWNrLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworIyBPcGVuU1NMCitmb3IgYWNfaGVhZGVyIGluIG9wZW5zc2wvYWVzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKyAgICAgIyAgKENvcmUpCitmb3IgYWNfaGVhZGVyIGluIG9wZW5zc2wvZGguaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorICAgICAjICAoQXBwcykKKyMgIE5vdC1Vc2VkOgorZm9yIGFjX2hlYWRlciBpbiBvcGVuc3NsL2Rlcy5oICBvcGVuc3NsL2htYWMuaCAgICAgICAgICAgICAgICAgICBvcGVuc3NsL2V2cC5oICBzZWN1cml0eS9jcnlwdG9raS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyBSUE0gc3ViZGlyZWN0b3J5IHBhdGggICAgICAgICAgICAgICAgICAgKEFnZW50KQoraWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyI7IHRoZW4KKyAgZm9yIGFjX2hlYWRlciBpbiBycG0vcnBtdHMuaCAgIHJwbS9ycG1maWxldXRpbC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiNpbmNsdWRlIDxycG0vcnBtbGliLmg+CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworZmkKKworCisjIworIyAgIFByZS1yZXF1aXNpdGUgb24gb3RoZXIgaGVhZGVyczoKKyMjCisKKyMgICAgICAgcmVxdWlyaW5nIDxzeXMvcGFyYW0uaD4gIChNQVhQQVRITEVOKSAgICAgICAgICAgKE9wZW5CU0QgMy40KQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIHN5cy9zd2FwLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy9zd2FwLmgiICJhY19jdl9oZWFkZXJfc3lzX3N3YXBfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3N3YXBfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19TV0FQX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIHJlcXVpcmluZyA8c3lzL3BhcmFtLmg+ICAgICAgICAgICAgICAgICAgICAgICAgIChGcmVlQlNEKQorIworIyAgQ29yZTogICAgICAoPyBUZXN0ZWQgYWJvdmU/ICkKK2ZvciBhY19oZWFkZXIgaW4gc3RkbGliLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisjCisjICBMaWJyYXJ5OgorZm9yIGFjX2hlYWRlciBpbiBtYWxsb2MuaCAgICAgICAgbmV0L2lmX2RsLmggICBzeXMvc3lzY3RsLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisjCisjICBBZ2VudDoKK2ZvciBhY19oZWFkZXIgaW4gbWFsbG9jLmggICAgICAgIG9zcmVsZGF0ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUvdHlwZXMuaCBuZXQvaWZfZGwuaCAgIG5ldC9pZl90eXBlcy5oICAgICAgICAgICAgICAgICAgICBzeXMvZGtzdGF0LmggICAgc3lzL2NvbmYuaCAgICBzeXMvbWJ1Zi5oICAgICAgICAgICAgICAgICAgICAgICAgc3lzL21vdW50LmggICAgIHN5cy9wcm9jLmggICAgc3lzL3F1ZXVlLmggICAgICAgICAgICAgICAgICAgICAgIHN5cy9zeXNjdGwuaCAgICBzeXMvdXNlci5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIHJlcXVpcmluZyA8c3lzL3NlbWEuaD4gICAgICAgICAgICAgICAgICAgICAgICAgIChJUklYIDYuNSkKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBzeXMvc2VtYS5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvc2VtYS5oIiAiYWNfY3ZfaGVhZGVyX3N5c19zZW1hX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zZW1hX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfU0VNQV9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL2hhc2hpbmcuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lzL2hhc2hpbmcuaCIgImFjX2N2X2hlYWRlcl9zeXNfaGFzaGluZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NFTUFfSAorI2luY2x1ZGUgPHN5cy9zZW1hLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX2hhc2hpbmdfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19IQVNISU5HX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIHJlcXVpcmluZyA8c3lzL3NvY2tldC5oPiAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzIDkpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3NvY2tldHZhci5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvc29ja2V0dmFyLmgiICJhY19jdl9oZWFkZXJfc3lzX3NvY2tldHZhcl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXR2YXJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19TT0NLRVRWQVJfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgcmVxdWlyaW5nIF9LTUVNVVNFUiBhbmQgPHN5cy90eXBlcy5oPiAgICAgICAgICAgKEJTRGkzL0lSSVgpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3Zub2RlLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy92bm9kZS5oIiAiYWNfY3ZfaGVhZGVyX3N5c192bm9kZV9oIiAiCisjZGVmaW5lIF9LTUVNVVNFUiAxCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c192bm9kZV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1ZOT0RFX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIHJlcXVpcmluZyA8bWFjaGluZS90eXBlcy5oPiAgICAgICAgICAgICAgICAgICAgIChOZXRCU0QpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gc3lzL2Rpc2tsYWJlbC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvZGlza2xhYmVsLmgiICJhY19jdl9oZWFkZXJfc3lzX2Rpc2tsYWJlbF9oIiAiCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9NQUNISU5FX1RZUEVTX0gKKyNpbmNsdWRlIDxtYWNoaW5lL3R5cGVzLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX2Rpc2tsYWJlbF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX0RJU0tMQUJFTF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIwlRTlgKK2ZvciBhY19oZWFkZXIgaW4gbmJ1dGlsLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm5idXRpbC5oIiAiYWNfY3ZfaGVhZGVyX25idXRpbF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uYnV0aWxfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05CVVRJTF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICBVRlMgaGVhZGVycworIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIHVmcy91ZnMvZGlub2RlLmggdWZzL3Vmcy9xdW90YS5oIHVmcy91ZnMvaW5vZGUuaCB1ZnMvZmZzL2ZzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9VRlNfVUZTX0RJTk9ERV9ICisjaW5jbHVkZSA8dWZzL3Vmcy9kaW5vZGUuaD4KKyNlbmRpZgorI2lmIEhBVkVfVUZTX1VGU19RVU9UQV9ICisjaW5jbHVkZSA8dWZzL3Vmcy9xdW90YS5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgcmVxdWlyaW5nIDx2bS92bS5oPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJTRGkyKQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIHZtL3N3YXBfcGFnZXIuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAidm0vc3dhcF9wYWdlci5oIiAiYWNfY3ZfaGVhZGVyX3ZtX3N3YXBfcGFnZXJfaCIgIgorI2lmIEhBVkVfVk1fVk1fSAorI2luY2x1ZGUgPHZtL3ZtLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdm1fc3dhcF9wYWdlcl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVk1fU1dBUF9QQUdFUl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICBuZXRsaW5rL3J0bmV0bGluayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTGludXgpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gbGludXgvbmV0bGluay5oICBsaW51eC9ydG5ldGxpbmsuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZiBIQVZFX0FTTV9UWVBFU19ICisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTElOVVhfTkVUTElOS19ICisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworIyAgICAgICBOZXR3b3JrIGhlYWRlcnMKKyMgIENvcmUgb3IgTGlicmFyeS9BZ2VudC9BcHBzOgorIworZm9yIGFjX2hlYWRlciBpbiBhcnBhL2luZXQuaCAgICAgICAgbmV0L2lmLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9pbi5oICAgICAgIG5ldGRiLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVElNRU9VVF9ICisjaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUVkFSX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisjCisjICBBZ2VudDoKK2ZvciBhY19oZWFkZXIgaW4gbmV0L2lmX2FycC5oICAgICAgIG5ldC9pZl9taWIuaCAgICAgICAgIG5ldC9pZl92YXIuaCAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9pZl9ldGhlci5oIG5ldGluZXQvaW5fc3lzdG0uaCAgIG5ldGluZXQvaW5fdmFyLmggICAgICAgICAgICAgICAgICAgbmV0aW5ldC9pcC5oICAgICAgIG5ldGluZXQvaXBfaWNtcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9pY21wX3Zhci5oIG5ldGluZXQvaXBfdmFyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC90Y3AuaCAgICAgIG5ldGluZXQvdGNwX3RpbWVyLmggIG5ldGluZXQvdGNwX3Zhci5oICAgICAgICAgICAgICAgICAgbmV0aW5ldC90Y3BpcC5oICAgIG5ldGluZXQvdWRwLmggICAgICAgIG5ldGluZXQvdWRwX3Zhci5oICAgICAgICAgICAgICAgICAgbmV0L3JvdXRlLmggICAgICAgIG5ldGluZXQvaWNtcDYuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19USU1FT1VUX0gKKyNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRWQVJfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JQ01QNl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgS0FNRSAoSVB2NikgaGVhZGVycworIyAgQWdlbnQ6CisjCisjIEtBTUUKK2ZvciBhY19oZWFkZXIgaW4gbmV0aW5ldC9pcDYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0Ni9pbjZfdmFyLmggICAgbmV0aW5ldDYvaW42X3BjYi5oICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQ2L2lwNl92YXIuaCAgICBuZXRpbmV0Ni9uZDYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldDYvdGNwNi5oICAgICAgIG5ldGluZXQ2L3RjcDZfZnNtLmggICAgICAgICAgICAgICAgICAgICBuZXRpbmV0Ni90Y3A2X3RpbWVyLmggbmV0aW5ldDYvdGNwNl92YXIuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVA2X0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwNi5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgcmVxdWlyaW5nIDxuZXRpbmV0L2luLmg+ICAgICAgICAgICAgICAgICAgICAgICAgKE9wZW5CU0QgMi42KQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIG5ldGluZXQvaW5fcGNiLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIm5ldGluZXQvaW5fcGNiLmgiICJhY19jdl9oZWFkZXJfbmV0aW5ldF9pbl9wY2JfaCIgIgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RJTUVPVVRfSAorI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVFZBUl9ICisjaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGluZXRfaW5fcGNiX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX1BDQl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyMKKyMgICBQcmUtcmVxdWlzaXRlIG9uIHNwZWNpZmljIHR5cGVzCisjIworCisjICAgICAgIFNwZWNpYWwgaGFjayB0byBnZXQgYXJvdW5kIHZhcmlvdXMgcHJvYmxlbXMgb24gb2xkZXIgTGludXgga2VybmVscworIyAgICAgICAobWFqb3IgdWdoISkKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBsaW51eC9ldGh0b29sLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImxpbnV4L2V0aHRvb2wuaCIgImFjX2N2X2hlYWRlcl9saW51eF9ldGh0b29sX2giICIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgordHlwZWRlZiBfX3U2NCB1NjQ7ICAgICAgICAgLyogaGFjaywgc28gd2UgbWF5IGluY2x1ZGUga2VybmVsJ3MgZXRodG9vbC5oICovCit0eXBlZGVmIF9fdTMyIHUzMjsgICAgICAgICAvKiBkaXR0byAqLwordHlwZWRlZiBfX3UxNiB1MTY7ICAgICAgICAgLyogZGl0dG8gKi8KK3R5cGVkZWYgX191OCB1ODsgICAgICAgICAgIC8qIGRpdHRvICovCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpbnV4X2V0aHRvb2xfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJTlVYX0VUSFRPT0xfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMjCisjICAgSGVhZGVycyByZXF1aXJpbmcgcGFydGljdWxhciBsaWJyYXJpZXMKKyMjCisKKyMgICAgICAgZm9yIEhvc3RSZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMgMi54KQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIHBrZ2luZm8uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicGtnaW5mby5oIiAiYWNfY3ZfaGVhZGVyX3BrZ2luZm9faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcGtnaW5mb19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUEtHSU5GT19IIDEKK19BQ0VPRgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBrZ2luZm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwa2dpbmZvLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19wa2dpbmZvX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBrZ2luZm8gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwa2dpbmZvICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGFkbSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGtnaW5mbyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBrZ2luZm8gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfcGtnaW5mb19MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfcGtnaW5mb19MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19wa2dpbmZvX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wa2dpbmZvX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wa2dpbmZvX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QS0dJTkZPIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCitmaQorCitkb25lCisKKworZm9yIGFjX2hlYWRlciBpbiBwa2cuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicGtnLmgiICJhY19jdl9oZWFkZXJfcGtnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3BrZ19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUEtHX0ggMQorX0FDRU9GCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGtnX2luaXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwa2dfaW5pdC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGtnX2luaXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwa2dfaW5pdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBwa2cgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBrZ19pbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGtnX2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlBLRyAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworZmkKKworZG9uZQorCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9wa2dfaCA9IG5vCit0aGVuCisgICAgdW5zZXQgYWNfY3ZfaGVhZGVyX3BrZ19oCisgICAgbmV0c25tcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgbmV0c25tcF9zYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2xvY2FsL2luY2x1ZGUiCisgICAgTERGTEFHUz0iJExERkxBR1MgLUwvdXNyL2xvY2FsL2xpYiIKKyAgICBmb3IgYWNfaGVhZGVyIGluIHBrZy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJwa2cuaCIgImFjX2N2X2hlYWRlcl9wa2dfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcGtnX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QS0dfSCAxCitfQUNFT0YKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwa2dfaW5pdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBrZ19pbml0Li4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwa2dfaW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBrZ19pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHBrZyA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGtnX2luaXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwa2dfaW5pdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCUEtHIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCitmaQorCitkb25lCisKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfcGtnX2ggPSBubworICAgIHRoZW4KKyAgICAgICAgQ1BQRkxBR1M9IiRuZXRzbm1wX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIExERkxBR1M9IiRuZXRzbm1wX3NhdmVfTERGTEFHUyIKKyAgICBmaQorZmkKKworY2FzZSAkdGFyZ2V0X29zIGluCisgICAgYWl4KikKKyAgICAgICAgIyAgICAgICBmb3IgQ1BVL21lbW9yeSBzdGF0aXN0aWNzICAgICAgICAgICAgICAgKEFJWCkKKyAgICAgICAgIyAgQWdlbnQ6CisgICAgICAgICMKKyAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBsaWJwZXJmc3RhdC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJsaWJwZXJmc3RhdC5oIiAiYWNfY3ZfaGVhZGVyX2xpYnBlcmZzdGF0X2giICIKKyNpZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpYnBlcmZzdGF0X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJQRVJGU1RBVF9IIDEKK19BQ0VPRgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBlcmZzdGF0X2NwdV90b3RhbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBlcmZzdGF0X2NwdV90b3RhbC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfcGVyZnN0YXRfY3B1X3RvdGFsX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBlcmZzdGF0X2NwdV90b3RhbCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBlcmZzdGF0X2NwdV90b3RhbCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBwZXJmc3RhdCA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGVyZnN0YXRfY3B1X3RvdGFsICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGVyZnN0YXRfY3B1X3RvdGFsICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3BlcmZzdGF0X2NwdV90b3RhbF9MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfcGVyZnN0YXRfY3B1X3RvdGFsX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3BlcmZzdGF0X2NwdV90b3RhbF9MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGVyZnN0YXRfY3B1X3RvdGFsX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wZXJmc3RhdF9jcHVfdG90YWxfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BFUkZTVEFUIDEiID4+Y29uZmRlZnMuaAorCisgZWxzZQorICAgIGFzX2ZuX2Vycm9yICQ/ICIKKworKioqIFRvIG1vbml0b3IgQ1BVL21lbW9yeSB2YWx1ZXMgaW4gQUlYIHlvdSBuZWVkIHRvIGluc3RhbGwKKyoqKiBsaWJwZXJmc3RhdCB3aGljaCBjYW4gYmUgZm91bmQgaW4gYm9zLnBlcmYKKyIgIiRMSU5FTk8iIDUKKyBmaQorCitmaQorCitkb25lCisKKyAgICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICAgIyAgICAgICBIUC1VWCBhZ2VudCBuZWVkcyBvcGVuX21pYiAgICAgICAoWFhYIC0gbm90IGEgaGVhZGVyIGNoZWNrISkKKyAgICAgICAgIworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5fbWliIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3Blbl9taWIuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX29wZW5fbWliX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG9wZW5fbWliICgpOworaW50CittYWluICgpCit7CityZXR1cm4gb3Blbl9taWIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gbm0gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG9wZW5fbWliICgpOworaW50CittYWluICgpCit7CityZXR1cm4gb3Blbl9taWIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfb3Blbl9taWJfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX29wZW5fbWliX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX29wZW5fbWliX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19vcGVuX21pYl9MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfb3Blbl9taWJfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQk5NIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgOzsKK2VzYWMKKworIyAgICAgICBmb3IgTUlCLTIgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ3lnd2luIGFuZCBNaW5HVykKKyMgIENvcmU6CisjCitmb3IgYWNfaGVhZGVyIGluIHdpbmRvd3MuaCBpcGhscGFwaS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgZm9yIE1JQi0yIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorIyAgQ29yZToKKyMKK2lmIHRlc3QgeCR3aXRoX3NvY2tsaWIgPSB4d2luc29jazI7IHRoZW4KKyAgZm9yIGFjX2hlYWRlciBpbiB3aW5zb2NrLmggd2luc29jazIuaCB3czJ0Y3BpcC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK2ZpCisKKyMKKyMgZm9yIHVjZC1zbm1wL2xtc2Vuc29yc01pYgorIworZm9yIGFjX2hlYWRlciBpbiBzZW5zb3JzL3NlbnNvcnMuaCBwaWNsLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIyAgVGhpcyBpcyBoZXJlIHRvIGF2b2lkIGxvYWRzIG9mIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyBkdXJpbmcKKyMjICBtb2R1bGUgY29uZmlndXJhdGlvbgorCisjIworIyAgIHJ0ZW50cnkgc3RydWN0dXJlIGNoZWNrczoKKyMjCisKKyMgQ2hlY2sgc3RydWN0IHJ0ZW50cnkgZm9yIGNvbW1vbiBmaWVsZHMKKyMgICBBZ2VudDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHJ0ZW50cnkiICJydF9kc3QiICJhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfZHN0IiAiCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF9kc3QiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHJ0ZW50cnkiICJydF9oYXNoIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X2hhc2giICIKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X2hhc2giID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9IQVNIIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBydGVudHJ5IiAicnRfbmV4dCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0IiAiCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfTkVYVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgcnRlbnRyeSIgInJ0X3JlZmNudCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF9yZWZjbnQiICIKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X3JlZmNudCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1JFRkNOVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgcnRlbnRyeSIgInJ0X3VuaXQiICJhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfdW5pdCIgIgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfdW5pdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VOSVQgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHJ0ZW50cnkiICJydF91c2UiICJhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfdXNlIiAiCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF91c2UiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VU0UgMQorX0FDRU9GCisKKworZmkKKworCitmaSAjIE5FVFNOTVBfUVVJQ0tfQ0hFQ0sKKworY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgorICAgICAgc2VkIC1uIFwKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKKyAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisgICAgIHQgY2xlYXIKKyAgICAgOmNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAtaCAiJGNhY2hlX2ZpbGUiOyB0aGVuCisJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoCisgICAgICAgICovKiB8ID86KikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKwkgIG12IC1mICIkY2FjaGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoCisgICAgICAgICopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIHR5cGVzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTdGFuZGFyZCBjaGVja3M6CisjIworCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHNob3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygc2hvcnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX3Nob3J0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoc2hvcnQpKSIgImFjX2N2X3NpemVvZl9zaG9ydCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCiBlbHNlCiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX3Nob3J0IiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc2hvcnQpKSkgPj0gMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCi0JCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgotCQkgICAgICBhY19sbz0gYWNfaGk9Ci0JCSAgICAgIGJyZWFrCi0JCSAgICBmaQotCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3Nob3J0PTAKKyAgIGZpCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSA8IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpID49ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKLQkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgYWNfbG89IGFjX2hpPQotCQkJIGJyZWFrCi0JCSAgICAgICBmaQotCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zaG9ydCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9zaG9ydCIgPiY2OyB9CiAKLWFjX2xvPSBhY19oaT0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLWNhc2UgJGFjX2xvIGluCi0/KikgYWNfY3Zfc2l6ZW9mX3Nob3J0PSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Ci1lc2FjCi1lbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1sb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKHNob3J0KSk7IH0KLXVuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKHNob3J0KSk7IH0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci0KLSAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKLSAgaWYgKCEgZikKLSAgICBleGl0ICgxKTsKLSAgaWYgKCgobG9uZykgKHNpemVvZiAoc2hvcnQpKSkgPCAwKQotICAgIHsKLSAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NpemVvZl9zaG9ydD1gY2F0IGNvbmZ0ZXN0LnZhbGAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLXJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2Zfc2hvcnQ9MAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2Zfc2hvcnQiID4mNgogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfU0hPUlQgJGFjX2N2X3NpemVvZl9zaG9ydAogX0FDRU9GCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2ludCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBpbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2ludCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChpbnQgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChpbnQpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2ludD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoaW50KSkiICJhY19jdl9zaXplb2ZfaW50IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CiAKLWFjX2N2X3R5cGVfaW50PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnQiID4mNgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBpbnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGludC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2ludCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnQiID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnQpKSkgPj0gMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludCkpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2xvPWBleHByICRhY19taWQgKyAxYAotCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KLQkJICAgICAgYWNfbG89IGFjX2hpPQotCQkgICAgICBicmVhawotCQkgICAgZmkKLQkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfaW50PTAKKyAgIGZpCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnQpKSkgPCAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPS0xIGFjX21pZD0tMQotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnQpKSkgPj0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAotCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KLQkJCSBhY19sbz0gYWNfaGk9Ci0JCQkgYnJlYWsKLQkJICAgICAgIGZpCi0JCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2ludCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9pbnQiID4mNjsgfQogCi1hY19sbz0gYWNfaGk9Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCi13aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCi0gIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnQpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2ZfaW50PSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKLWVzYWMKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWxvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50KSk7IH0KLXVuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGludCkpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgZXhpdCAoMSk7Ci0gIGlmICgoKGxvbmcpIChzaXplb2YgKGludCkpKSA8IDApCi0gICAgewotICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50KSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGludCkpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOwotICAgIH0KLSAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zaXplb2ZfaW50PWBjYXQgY29uZnRlc3QudmFsYAotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1ybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX2ludD0wCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfaW50IiA+JjYKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX0lOVCAkYWNfY3Zfc2l6ZW9mX2ludAogX0FDRU9GCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsb25nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxvbmcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfbG9uZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgbG9uZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfbG9uZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChsb25nICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAobG9uZykpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfbG9uZz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZykpIiAiYWNfY3Zfc2l6ZW9mX2xvbmciICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKIAotYWNfY3ZfdHlwZV9sb25nPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2xvbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbG9uZyIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGxvbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGxvbmcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmciID0geWVzOyB0aGVuCi0gICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nKSkpID49IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89MCBhY19taWQ9MAotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCi0JCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgotCQkgICAgICBhY19sbz0gYWNfaGk9Ci0JCSAgICAgIGJyZWFrCi0JCSAgICBmaQotCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfbG9uZz0wCisgICBmaQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZykpKSA8IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkgPj0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAotCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KLQkJCSBhY19sbz0gYWNfaGk9Ci0JCQkgYnJlYWsKLQkJICAgICAgIGZpCi0JCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZyIgPiY2OyB9CiAKLWFjX2xvPSBhY19oaT0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2ZfbG9uZz0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKLWVzYWMKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWxvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAobG9uZykpOyB9Ci11bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChsb25nKSk7IH0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci0KLSAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKLSAgaWYgKCEgZikKLSAgICBleGl0ICgxKTsKLSAgaWYgKCgobG9uZykgKHNpemVvZiAobG9uZykpKSA8IDApCi0gICAgewotICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAobG9uZykpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChsb25nKSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NpemVvZl9sb25nPWBjYXQgY29uZnRlc3QudmFsYAotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nKSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLXJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2ZfbG9uZz0wCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2xvbmciID4mNgogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfTE9ORyAkYWNfY3Zfc2l6ZW9mX2xvbmcKIF9BQ0VPRgogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbG9uZyBsb25nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxvbmcgbG9uZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9sb25nX2xvbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9sb25nX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgobG9uZyBsb25nICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAobG9uZyBsb25nKSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGxvbmcgbG9uZykpIiAiYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgogCi1hY19jdl90eXBlX2xvbmdfbG9uZz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9sb25nX2xvbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbG9uZ19sb25nIiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nX2xvbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZ19sb25nIiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpID49IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89MCBhY19taWQ9MAotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCSAgICAgIGFjX2xvPSBhY19oaT0KLQkJICAgICAgYnJlYWsKLQkJICAgIGZpCi0JCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0wCisgICBmaQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0tMSBhY19taWQ9LTEKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpID49ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKLQkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgYWNfbG89IGFjX2hpPQotCQkJIGJyZWFrCi0JCSAgICAgICBmaQotCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nX2xvbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZ19sb25nIiA+JjY7IH0KIAotYWNfbG89IGFjX2hpPQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0jIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgotd2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbwotICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLWNhc2UgJGFjX2xvIGluCi0/KikgYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Ci1lc2FjCi1lbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1sb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpOyB9Ci11bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKTsgfQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOwotICBpZiAoISBmKQotICAgIGV4aXQgKDEpOwotICBpZiAoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPCAwKQotICAgIHsKLSAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKLSAgICB9Ci0gIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz1gY2F0IGNvbmZ0ZXN0LnZhbGAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotcm0gLWYgY29uZnRlc3QudmFsCi1lbHNlCi0gIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9MAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgPiY2CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgJGFjX2N2X3NpemVvZl9sb25nX2xvbmcKIF9BQ0VPRgogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50bWF4X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50bWF4X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50bWF4X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgaW50bWF4X3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnRtYXhfdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfaW50bWF4X3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoaW50bWF4X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChpbnRtYXhfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfaW50bWF4X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGludG1heF90KSkiICJhY19jdl9zaXplb2ZfaW50bWF4X3QiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKIAotYWNfY3ZfdHlwZV9pbnRtYXhfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGludG1heF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnRtYXhfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2ludG1heF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludG1heF90IiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkgPj0gMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludG1heF90KSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCi0JCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgotCQkgICAgICBhY19sbz0gYWNfaGk9Ci0JCSAgICAgIGJyZWFrCi0JCSAgICBmaQotCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludG1heF90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2ludG1heF90PTAKKyAgIGZpCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA8IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludG1heF90KSkpID49ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKLQkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgYWNfbG89IGFjX2hpPQotCQkJIGJyZWFrCi0JCSAgICAgICBmaQotCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9pbnRtYXhfdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9pbnRtYXhfdCIgPiY2OyB9CiAKLWFjX2xvPSBhY19oaT0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludG1heF90KSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLWNhc2UgJGFjX2xvIGluCi0/KikgYWNfY3Zfc2l6ZW9mX2ludG1heF90PSRhY19sbzs7Ci0nJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRtYXhfdCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludG1heF90KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Ci1lc2FjCi1lbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1sb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGludG1heF90KSk7IH0KLXVuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGludG1heF90KSk7IH0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci0KLSAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKLSAgaWYgKCEgZikKLSAgICBleGl0ICgxKTsKLSAgaWYgKCgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkgPCAwKQotICAgIHsKLSAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGludG1heF90KSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGludG1heF90KSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NpemVvZl9pbnRtYXhfdD1gY2F0IGNvbmZ0ZXN0LnZhbGAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50bWF4X3QpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRtYXhfdCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLXJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2ZfaW50bWF4X3Q9MAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2ludG1heF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfaW50bWF4X3QiID4mNgogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfSU5UTUFYX1QgJGFjX2N2X3NpemVvZl9pbnRtYXhfdAogX0FDRU9GCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQ4X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50OF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2ludDhfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoaW50OF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoaW50OF90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbnQ4X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2N2X3R5cGVfaW50OF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDhfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnQ4X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQ4X3QgPSB5ZXM7IHRoZW4KK2FjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICI4IiAiYWNfY3ZfY19pbnQ4X3QiCitjYXNlICRhY19jdl9jX2ludDhfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9JTlQ4X1QgMQorI2RlZmluZSBpbnQ4X3QgJGFjX2N2X2NfaW50OF90CiBfQUNFT0YKKzs7Citlc2FjCiAKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDhfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50OF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnQ4X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKHVpbnQ4X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1aW50OF90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91aW50OF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX3VpbnQ4X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDhfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50OF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDhfdCA9IHllczsgdGhlbgorYWNfZm5fY19maW5kX2ludFhfdCAiJExJTkVOTyIgIjE2IiAiYWNfY3ZfY19pbnQxNl90IgorY2FzZSAkYWNfY3ZfY19pbnQxNl90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VJTlQ4X1QgMQorI2RlZmluZSBpbnQxNl90ICRhY19jdl9jX2ludDE2X3QKIF9BQ0VPRgorOzsKK2VzYWMKIAotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1X2ludDhfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1X2ludDhfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91X2ludDhfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgodV9pbnQ4X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1X2ludDhfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdV9pbnQ4X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfdV9pbnQ4X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdV9pbnQ4X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdV9pbnQ4X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91X2ludDhfdCA9IHllczsgdGhlbgorYWNfZm5fY19maW5kX2ludFhfdCAiJExJTkVOTyIgIjMyIiAiYWNfY3ZfY19pbnQzMl90IgorY2FzZSAkYWNfY3ZfY19pbnQzMl90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VfSU5UOF9UIDEKKyNkZWZpbmUgaW50MzJfdCAkYWNfY3ZfY19pbnQzMl90CiBfQUNFT0YKKzs7Citlc2FjCiAKLQotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQxNl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludDE2X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50MTZfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoaW50MTZfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGludDE2X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2ludDE2X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfaW50MTZfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQxNl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludDE2X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQxNl90ID0geWVzOyB0aGVuCithY19mbl9jX2ZpbmRfaW50WF90ICIkTElORU5PIiAiNjQiICJhY19jdl9jX2ludDY0X3QiCitjYXNlICRhY19jdl9jX2ludDY0X3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfSU5UMTZfVCAxCisjZGVmaW5lIGludDY0X3QgJGFjX2N2X2NfaW50NjRfdAogX0FDRU9GCis7OworZXNhYwogCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQxNl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpbnQxNl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnQxNl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxvbmcgbG9uZyBpbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxvbmcgbG9uZyBpbnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CisKKyAgLyogRm9yIG5vdywgZG8gbm90IHRlc3QgdGhlIHByZXByb2Nlc3NvcjsgYXMgb2YgMjAwNyB0aGVyZSBhcmUgdG9vIG1hbnkKKwkgaW1wbGVtZW50YXRpb25zIHdpdGggYnJva2VuIHByZXByb2Nlc3NvcnMuICBQZXJoYXBzIHRoaXMgY2FuCisJIGJlIHJldmlzaXRlZCBpbiAyMDEyLiAgSW4gdGhlIG1lYW50aW1lLCBjb2RlIHNob3VsZCBub3QgZXhwZWN0CisJICNpZiB0byB3b3JrIHdpdGggbGl0ZXJhbHMgd2lkZXIgdGhhbiAzMiBiaXRzLiAgKi8KKyAgICAgIC8qIFRlc3QgbGl0ZXJhbHMuICAqLworICAgICAgbG9uZyBsb25nIGludCBsbCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIGxvbmcgbG9uZyBpbnQgbmxsID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsID0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEw7CisgICAgICAvKiBUZXN0IGNvbnN0YW50IGV4cHJlc3Npb25zLiAgICovCisgICAgICB0eXBlZGVmIGludCBhWygoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKKwkJICAgICA/IDEgOiAtMSldOworICAgICAgdHlwZWRlZiBpbnQgYlsoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIC0xCisJCSAgICAgPyAxIDogLTEpXTsKKyAgICAgIGludCBpID0gNjM7CiBpbnQKIG1haW4gKCkKIHsKLWlmICgodWludDE2X3QgKikgMCkKKy8qIFRlc3QgYXZhaWxhYmlsaXR5IG9mIHJ1bnRpbWUgcm91dGluZXMgZm9yIHNoaWZ0IGFuZCBkaXZpc2lvbi4gICovCisgICAgICBsb25nIGxvbmcgaW50IGxsbWF4ID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGxtYXggPSAxODQ0Njc0NDA3MzcwOTU1MTYxNXVsbDsKKyAgICAgIHJldHVybiAoKGxsIDw8IDYzKSB8IChsbCA+PiA2MykgfCAobGwgPCBpKSB8IChsbCA+IGkpCisJICAgICAgfCAobGxtYXggLyBsbCkgfCAobGxtYXggJSBsbCkKKwkgICAgICB8ICh1bGwgPDwgNjMpIHwgKHVsbCA+PiA2MykgfCAodWxsIDw8IGkpIHwgKHVsbCA+PiBpKQorCSAgICAgIHwgKHVsbG1heCAvIHVsbCkgfCAodWxsbWF4ICUgdWxsKSk7CisgIDsKICAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1aW50MTZfdCkpCi0gIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgCQkJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwkgICAgICAgI2lmbmRlZiBMTE9OR19NQVgKKwkgICAgICAgIyBkZWZpbmUgSEFMRiBcCisJCQkoMUxMIDw8IChzaXplb2YgKGxvbmcgbG9uZyBpbnQpICogQ0hBUl9CSVQgLSAyKSkKKwkgICAgICAgIyBkZWZpbmUgTExPTkdfTUFYIChIQUxGIC0gMSArIEhBTEYpCisJICAgICAgICNlbmRpZgoraW50CittYWluICgpCit7Citsb25nIGxvbmcgaW50IG4gPSAxOworCSAgICAgICBpbnQgaTsKKwkgICAgICAgZm9yIChpID0gMDsgOyBpKyspCisJCSB7CisJCSAgIGxvbmcgbG9uZyBpbnQgbSA9IG4gPDwgaTsKKwkJICAgaWYgKG0gPj4gaSAhPSBuKQorCQkgICAgIHJldHVybiAxOworCQkgICBpZiAoTExPTkdfTUFYIC8gMiA8IG0pCisJCSAgICAgYnJlYWs7CisJCSB9CisJICAgICAgIHJldHVybiAwOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdWludDE2X3Q9eWVzCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQogCi1hY19jdl90eXBlX3VpbnQxNl90PW5vCitlbHNlCisgIGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDE2X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludDE2X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50MTZfdCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQiID4mNQorJGFzX2VjaG8gIiRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQiID4mNjsgfQorICBpZiB0ZXN0ICRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MT05HX0xPTkdfSU5UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImludG1heF90IiAiYWNfY3ZfdHlwZV9pbnRtYXhfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX2ludG1heF90IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lOVE1BWF9UIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllcyBcCisgICAgICAgJiYgYWNfdHlwZT0nbG9uZyBsb25nIGludCcgXAorICAgICAgIHx8IGFjX3R5cGU9J2xvbmcgaW50JwogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVUlOVDE2X1QgMQorI2RlZmluZSBpbnRtYXhfdCAkYWNfdHlwZQogX0FDRU9GCiAKK2ZpCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVfaW50MTZfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1X2ludDE2X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdV9pbnQxNl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKCh1X2ludDE2X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1X2ludDE2X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VfaW50MTZfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfY3ZfdHlwZV91X2ludDE2X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdV9pbnQxNl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VfaW50MTZfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VfaW50MTZfdCA9IHllczsgdGhlbgorYWNfZm5fY19maW5kX3VpbnRYX3QgIiRMSU5FTk8iICI4IiAiYWNfY3ZfY191aW50OF90IgorY2FzZSAkYWNfY3ZfY191aW50OF90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQ4X1QgMSIgPj5jb25mZGVmcy5oCisKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VfSU5UMTZfVCAxCisjZGVmaW5lIHVpbnQ4X3QgJGFjX2N2X2NfdWludDhfdAogX0FDRU9GCis7OworICBlc2FjCiAKK2FjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiMTYiICJhY19jdl9jX3VpbnQxNl90IgorY2FzZSAkYWNfY3ZfY191aW50MTZfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCiAKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50MzJfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnQzMl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2ludDMyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGludDMyX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChpbnQzMl90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbnQzMl90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX2ludDMyX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50MzJfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnQzMl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW50MzJfdCA9IHllczsgdGhlbgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfSU5UMzJfVCAxCisjZGVmaW5lIHVpbnQxNl90ICRhY19jdl9jX3VpbnQxNl90CiBfQUNFT0YKKzs7CisgIGVzYWMKIAorYWNfZm5fY19maW5kX3VpbnRYX3QgIiRMSU5FTk8iICIzMiIgImFjX2N2X2NfdWludDMyX3QiCitjYXNlICRhY19jdl9jX3VpbnQzMl90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDMyX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludDMyX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDMyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKHVpbnQzMl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodWludDMyX3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VpbnQzMl90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQzMl9UIDEiID4+Y29uZmRlZnMuaAogCi1hY19jdl90eXBlX3VpbnQzMl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnQzMl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VpbnQzMl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDMyX3QgPSB5ZXM7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VJTlQzMl9UIDEKKyNkZWZpbmUgdWludDMyX3QgJGFjX2N2X2NfdWludDMyX3QKIF9BQ0VPRgorOzsKKyAgZXNhYwogCithY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjY0IiAiYWNfY3ZfY191aW50NjRfdCIKK2Nhc2UgJGFjX2N2X2NfdWludDY0X3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1X2ludDMyX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdV9pbnQzMl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VfaW50MzJfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgodV9pbnQzMl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodV9pbnQzMl90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91X2ludDMyX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiskYXNfZWNobyAiI2RlZmluZSBfVUlOVDY0X1QgMSIgPj5jb25mZGVmcy5oCiAKLWFjX2N2X3R5cGVfdV9pbnQzMl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VfaW50MzJfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91X2ludDMyX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91X2ludDMyX3QgPSB5ZXM7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VfSU5UMzJfVCAxCisjZGVmaW5lIHVpbnQ2NF90ICRhY19jdl9jX3VpbnQ2NF90CiBfQUNFT0YKKzs7CisgIGVzYWMKIAogCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDY0X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50NjRfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQ2NF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CisKKyAgLyogRm9yIG5vdywgZG8gbm90IHRlc3QgdGhlIHByZXByb2Nlc3NvcjsgYXMgb2YgMjAwNyB0aGVyZSBhcmUgdG9vIG1hbnkKKwkgaW1wbGVtZW50YXRpb25zIHdpdGggYnJva2VuIHByZXByb2Nlc3NvcnMuICBQZXJoYXBzIHRoaXMgY2FuCisJIGJlIHJldmlzaXRlZCBpbiAyMDEyLiAgSW4gdGhlIG1lYW50aW1lLCBjb2RlIHNob3VsZCBub3QgZXhwZWN0CisJICNpZiB0byB3b3JrIHdpdGggbGl0ZXJhbHMgd2lkZXIgdGhhbiAzMiBiaXRzLiAgKi8KKyAgICAgIC8qIFRlc3QgbGl0ZXJhbHMuICAqLworICAgICAgbG9uZyBsb25nIGludCBsbCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIGxvbmcgbG9uZyBpbnQgbmxsID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsID0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEw7CisgICAgICAvKiBUZXN0IGNvbnN0YW50IGV4cHJlc3Npb25zLiAgICovCisgICAgICB0eXBlZGVmIGludCBhWygoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKKwkJICAgICA/IDEgOiAtMSldOworICAgICAgdHlwZWRlZiBpbnQgYlsoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIC0xCisJCSAgICAgPyAxIDogLTEpXTsKKyAgICAgIGludCBpID0gNjM7CiBpbnQKIG1haW4gKCkKIHsKLWlmICgoaW50NjRfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGludDY0X3QpKQotICByZXR1cm4gMDsKKy8qIFRlc3QgYXZhaWxhYmlsaXR5IG9mIHJ1bnRpbWUgcm91dGluZXMgZm9yIHNoaWZ0IGFuZCBkaXZpc2lvbi4gICovCisgICAgICBsb25nIGxvbmcgaW50IGxsbWF4ID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGxtYXggPSAxODQ0Njc0NDA3MzcwOTU1MTYxNXVsbDsKKyAgICAgIHJldHVybiAoKGxsIDw8IDYzKSB8IChsbCA+PiA2MykgfCAobGwgPCBpKSB8IChsbCA+IGkpCisJICAgICAgfCAobGxtYXggLyBsbCkgfCAobGxtYXggJSBsbCkKKwkgICAgICB8ICh1bGwgPDwgNjMpIHwgKHVsbCA+PiA2MykgfCAodWxsIDw8IGkpIHwgKHVsbCA+PiBpKQorCSAgICAgIHwgKHVsbG1heCAvIHVsbCkgfCAodWxsbWF4ICUgdWxsKSk7CiAgIDsKICAgcmV0dXJuIDA7CiB9Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbnQ2NF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19jdl90eXBlX2ludDY0X3Q9bm8KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9eWVzCitlbHNlCisgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50NjRfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnQ2NF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW50NjRfdCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQiID4mNQorJGFzX2VjaG8gIiRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQiID4mNjsgfQorICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnRtYXhfdCIgImFjX2N2X3R5cGVfdWludG1heF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludG1heF90IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXMgXAorICAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnIFwKKyAgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nIGludCcKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0lOVDY0X1QgMQorI2RlZmluZSB1aW50bWF4X3QgJGFjX3R5cGUKIF9BQ0VPRgogCi0KIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQ2NF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpbnQ2NF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnQ2NF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImludHB0cl90IiAiYWNfY3ZfdHlwZV9pbnRwdHJfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX2ludHB0cl90IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lOVFBUUl9UIDEiID4+Y29uZmRlZnMuaAorCiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBmb3IgYWNfdHlwZSBpbiAnaW50JyAnbG9uZyBpbnQnICdsb25nIGxvbmcgaW50JzsgZG8KKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAogaW50CiBtYWluICgpCiB7Ci1pZiAoKHVpbnQ2NF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodWludDY0X3QpKQotICByZXR1cm4gMDsKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKHNpemVvZiAodm9pZCAqKSA8PSBzaXplb2YgKCRhY190eXBlKSldOwordGVzdF9hcnJheSBbMF0gPSAwCisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VpbnQ2NF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX3VpbnQ2NF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnQ2NF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VpbnQ2NF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDY0X3QgPSB5ZXM7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VJTlQ2NF9UIDEKKyNkZWZpbmUgaW50cHRyX3QgJGFjX3R5cGUKIF9BQ0VPRgogCi0KKwkgIGFjX3R5cGU9CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1X2ludDY0X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdV9pbnQ2NF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VfaW50NjRfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgdGVzdCAteiAiJGFjX3R5cGUiICYmIGJyZWFrCisgICAgIGRvbmUKK2ZpCisKKworCisgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnRwdHJfdCIgImFjX2N2X3R5cGVfdWludHB0cl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludHB0cl90IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxIiA+PmNvbmZkZWZzLmgKKwogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgZm9yIGFjX3R5cGUgaW4gJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCisJJ3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnOyBkbworICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICRhY19pbmNsdWRlc19kZWZhdWx0CiBpbnQKIG1haW4gKCkKIHsKLWlmICgodV9pbnQ2NF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodV9pbnQ2NF90KSkKLSAgcmV0dXJuIDA7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogIShzaXplb2YgKHZvaWQgKikgPD0gc2l6ZW9mICgkYWNfdHlwZSkpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91X2ludDY0X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfdV9pbnQ2NF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VfaW50NjRfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91X2ludDY0X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91X2ludDY0X3QgPSB5ZXM7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VfSU5UNjRfVCAxCisjZGVmaW5lIHVpbnRwdHJfdCAkYWNfdHlwZQogX0FDRU9GCiAKLQorCSAgYWNfdHlwZT0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICB0ZXN0IC16ICIkYWNfdHlwZSIgJiYgYnJlYWsKKyAgICAgZG9uZQogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnRtYXhfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnRtYXhfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnRtYXhfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoaW50bWF4X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChpbnRtYXhfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfaW50bWF4X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfaW50bWF4X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50bWF4X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW50bWF4X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnRtYXhfdCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfSU5UTUFYX1QgMQotX0FDRU9GCiAKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludG1heF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpbnRtYXhfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50bWF4X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKHVpbnRtYXhfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVpbnRtYXhfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdWludG1heF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIyMKKyMgICBPdGhlciB0eXBlIGNoZWNrczoKKyMjCiAKLWFjX2N2X3R5cGVfdWludG1heF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnRtYXhfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50bWF4X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50bWF4X3QgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxCi1fQUNFT0YKLQotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG9mZjY0X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb2ZmNjRfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9vZmY2NF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChvZmY2NF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAob2ZmNjRfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfb2ZmNjRfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV9vZmY2NF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX29mZjY0X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfb2ZmNjRfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX29mZjY0X3QgPSB5ZXM7IHRoZW4KK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm9mZjY0X3QiICJhY19jdl90eXBlX29mZjY0X3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9vZmY2NF90IiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfT0ZGNjRfVCAxCkBAIC0yNDgzMiwxOTUgKzE4MzA0LDI0IEBACiAKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludHB0cl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpbnRwdHJfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50cHRyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKHVpbnRwdHJfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVpbnRwdHJfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdWludHB0cl90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX3VpbnRwdHJfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50cHRyX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludHB0cl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludHB0cl90ID0geWVzOyB0aGVuCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJuZmRzX3QiICJhY19jdl90eXBlX25mZHNfdCIgIiNpbmNsdWRlIDxzeXMvcG9sbC5oPgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX25mZHNfdCIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCi1fQUNFT0YKLQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnRwdHJfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnRwdHJfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnRwdHJfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoaW50cHRyX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChpbnRwdHJfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfaW50cHRyX3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfaW50cHRyX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50cHRyX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW50cHRyX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnRwdHJfdCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfSU5UUFRSX1QgMQorI2RlZmluZSBIQVZFX05GRFNfVCAxCiBfQUNFT0YKIAogCiBmaQogCiAKLSMgc29sYXJpcyBzcGVjaWZpYyB0eXBlCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIENvdW50ZXI2NCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDb3VudGVyNjQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfQ291bnRlcjY0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGluZXQvbWliMi5oPgotCi1pbnQKLW1haW4gKCkKLXsKLWlmICgoQ291bnRlcjY0ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoQ291bnRlcjY0KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9Db3VudGVyNjQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfQ291bnRlcjY0PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX0NvdW50ZXI2NCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9Db3VudGVyNjQiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9Db3VudGVyNjQgPSB5ZXM7IHRoZW4KKyMgICBTb2xhcmlzIHNwZWNpZmljIGNoZWNrcworIyAgICAgICAodGFrZW4gZnJvbSBQZXJsJ3MgY29uZmlndXJlIHNjcmlwdCkKKyMKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIkNvdW50ZXI2NCIgImFjX2N2X3R5cGVfQ291bnRlcjY0IiAiI2luY2x1ZGUgPGluZXQvbWliMi5oPgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX0NvdW50ZXI2NCIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0NPVU5URVI2NCAxCkBAIC0yNTAyOSwyMyArMTgzMzAsNDIgQEAKIAogZmkKIAorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAibWliMl9pcElmU3RhdHNFbnRyeV90IiAiYWNfY3ZfdHlwZV9taWIyX2lwSWZTdGF0c0VudHJ5X3QiICIjaW5jbHVkZSA8aW5ldC9taWIyLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfbWliMl9pcElmU3RhdHNFbnRyeV90IiA9IHh5ZXM7IHRoZW4gOgogCi0jIGd1ZXNzIElQdjYgc3RhY2sgdHlwZS4KK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NSUIyX0lQSUZTVEFUU0VOVFJZX1QgMQorX0FDRU9GCisKKworZmkKKworCisjICAgTi5COiAgVGhlIGFib3ZlIGNoZWNrcyBjb3VsZCBzYWZlbHkgYmUgbW92ZWQgdG8KKyMgICAgICAgICB0aGUgbGF0ZXIgJ2NvbmZpZ190eXBlcycgc3ViLXNjcmlwdAorIworCisKKyMjCisjICAgRGV0ZXJtaW5lIHRoZSBJUHY2IHN0YWNrIHR5cGUKKyMjCisKKyMgICAgICAgVGhlc2UgY2hlY2tzIGFsc28gc2V0IHRoZSBMSUJTL0NGTEFHUyB2YXJpYWJsZXMsCisjICAgICAgIHdoaWNoIG1heSBiZSBuZWVkZWQgZm9yIHN1YnNlcXVlbnQgZnVuY3Rpb24gdGVzdHMKKyMKKwogaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KIAl2NnR5cGU9dW5rbm93bgogCXY2bGliPW5vbmUKIAl2NnRyeWxpYmM9bm8KIAotCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUuLi4gJEVDSE9fQyIgPiY2Ci0JZm9yIGkgaW4gdjZkIHRvc2hpYmEga2FtZSBpbnJpYSB6ZXRhIGxpbnV4LWdsaWJjIGxpbnV4LWluZXQ2IGdlbmVyaWM7IGRvCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlLi4uICIgPiY2OyB9CisJZm9yIGkgaW4gdjZkIHRvc2hpYmEga2FtZSBpbnJpYSB6ZXRhIGxpbnV4LWdsaWJjIGxpbnV4LWluZXQ2IGN5Z3dpbiB3aW5zb2NrMiBnZW5lcmljOyBkbwogCQljYXNlICRpIGluCiAJCXY2ZCkKLQkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCQkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaW5jbHVkZSA8L3Vzci9sb2NhbC92Ni9pbmNsdWRlL3N5cy90eXBlcy5oPgpAQCAtMjUwNTQsNyArMTgzNzQsNyBAQAogI2VuZGlmCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgdjZ0eXBlPSRpOyB2NmxpYj12NjsKIAkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKIAkJCQlDRkxBR1M9Ii1JL3Vzci9sb2NhbC92Ni9pbmNsdWRlICRDRkxBR1MiCkBAIC0yNTA2MywxMSArMTgzODMsNyBAQAogCiAJCQk7OwogCQl0b3NoaWJhKQotCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KQEAgLTI1MDc2LDcgKzE4MzkyLDcgQEAKICNlbmRpZgogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIHY2dHlwZT0kaTsgdjZsaWI9aW5ldDY7CiAJCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7CiAJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKQEAgLTI1MDg1LDExICsxODQwMSw3IEBACiAKIAkJCTs7CiAJCWthbWUpCi0JCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KQEAgLTI1MDk4LDcgKzE4NDEwLDcgQEAKICNlbmRpZgogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIHY2dHlwZT0kaTsgdjZsaWI9aW5ldDY7CiAJCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7CiAJCQkJdjZ0cnlsaWJjPXllczsKQEAgLTI1MTA4LDExICsxODQyMCw3IEBACiAKIAkJCTs7CiAJCWlucmlhKQotCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC0yNTEyMSw3ICsxODQyOSw3IEBACiAjZW5kaWYKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICB2NnR5cGU9JGk7CiAJCQkJdjZsaWI9ZHVtbXk7CiAJCQkJdjZsaWJkaXI9bm9uZTsKQEAgLTI1MTMyLDExICsxODQ0MCw3IEBACiAKIAkJCTs7CiAJCXpldGEpCi0JCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgpAQCAtMjUxNDYsNyArMTg0NTAsNyBAQAogI2VuZGlmCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKIAkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKIAkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgpAQCAtMjUxNTUsMTEgKzE4NDU5LDcgQEAKIAogCQkJOzsKIAkJbGludXgtZ2xpYmMpCi0JCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2luY2x1ZGUgPGZlYXR1cmVzLmg+CkBAIC0yNTE2OCw3ICsxODQ2OCw3IEBACiAjZW5kaWYKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICB2NnR5cGU9JGk7CiAJCQkJdjZsaWI9ZHVtbXk7CiAJCQkJdjZsaWJkaXI9bm9uZTsKQEAgLTI1MTg2LDEwNCArMTg0ODYsNjkgQEAKIAkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgogCQkJZmkKIAkJCTs7Ci0JCWdlbmVyaWMpCi0gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBwb3N0cG9uZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9cG9zdHBvbmVkIiA+JjYKLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic29ja2FkZHJfaW42IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJzaW42X2FkZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzb2NrYWRkcl9pbjYuc2luNl9hZGRyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvY2thZGRyX2luNi5zaW42X2FkZHIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCQljeWd3aW4pCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzb2NrYWRkcl9pbjYgdGVzdGl0OwotdGVzdGl0LnNpbjZfYWRkciAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KKyNpZmRlZiBfQ1lHV0lOX0lONl9ICit5ZXMKKyNlbmRpZgogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICB2NnR5cGU9JGk7CisJCQkJdjZsaWI9ZHVtbXk7CisJCQkJdjZsaWJkaXI9bm9uZQorCQkJCXY2dHJ5bGliYz15ZXM7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdCoKIAotZmkKKyAgICAgICAgICAgICAgICAgICAgICAgOzsKKwkJd2luc29jazIpCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpZiBkZWZpbmVkKF9XUzJUQ1BJUF9IKQoreWVzCisjZW5kaWYKIF9BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgdjZ0eXBlPSRpOworCQkJCXY2bGliPWR1bW15OworCQkJCXY2bGliZGlyPW5vbmUKKwkJCQl2NnRyeWxpYmM9eWVzOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCitmaQorcm0gLWYgY29uZnRlc3QqCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCQkJOzsKKwkJZ2VuZXJpYykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwb3N0cG9uZWQiID4mNQorJGFzX2VjaG8gInBvc3Rwb25lZCIgPiY2OyB9CisJCQlhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkcl9pbjYiICJzaW42X2FkZHIiICJhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X2FkZHIiICIKKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfYWRkciIgPSB4eWVzOyB0aGVuIDoKKwogZmkKIAotCi0JICAgICAgICAgICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUuLi4gJEVDSE9fQyIgPiY2Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9pbjZfaGFzX3NpbjZfYWRkciIgPSAieHllcyI7IHRoZW4KKwkgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlLi4uICIgPiY2OyB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfYWRkciIgPSAieHllcyI7IHRoZW4KIAkJCQl2NnR5cGU9JGkKIAkJCQl2NmxpYj1kdW1teQogCQkJCXY2bGliZGlyPW5vbmUKQEAgLTI1MzAxLDMzICsxODU2NiwzMSBAQAogCQlpZiB0ZXN0IC1kICR2NmxpYmRpciAtYSAtZiAkdjZsaWJkaXIvbGliJHY2bGliLmE7IHRoZW4KIAkJCUxJQlM9Ii1MJHY2bGliZGlyIC1sJHY2bGliICRMSUJTIgogCQkJZW5hYmxlX2lwdjY9InllcyIKLQkJCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IFwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWIkdjZsaWJcIiIgPiY1Ci1lY2hvICIke0VDSE9fVH1cIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliJHY2bGliXCIiID4mNgorCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWIkdjZsaWJcIiIgPiY1CiskYXNfZWNobyAiXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYiR2NmxpYlwiIiA+JjY7IH0KIAkJZWxpZiB0ZXN0ICIkdjZ0cnlsaWJjIiA9ICJ5ZXMiOyB0aGVuCiAJCQllbmFibGVfaXB2Nj0ieWVzIgotCQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYmNcIiIgPiY1Ci1lY2hvICIke0VDSE9fVH1cIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliY1wiIiA+JjYKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBcIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliY1wiIiA+JjUKKyRhc19lY2hvICJcIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliY1wiIiA+JjY7IH0KIAkJZWxzZQotCQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gSVB2NiBsaWJyYXJ5IGxpYiR2NmxpYi5hIGZvdW5kLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBJUHY2IGxpYnJhcnkgbGliJHY2bGliLmEgZm91bmQuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCQlhc19mbl9lcnJvciAkPyAibm8gSVB2NiBsaWJyYXJ5IGxpYiR2NmxpYi5hIGZvdW5kLiIgIiRMSU5FTk8iIDUKIAkJCWV4aXQgMQogCQlmaQogCWVsc2UKIAkJZW5hYmxlX2lwdjY9Im5vIgotCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBcIiR2NnR5cGUsICRlbmFibGVfaXB2NlwiIiA+JjUKLWVjaG8gIiR7RUNIT19UfVwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2XCIiID4mNgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjZcIiIgPiY1CiskYXNfZWNobyAiXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjZcIiIgPiY2OyB9CiAJZmkKIGZpCiAKKyMgLSotIGF1dG9jb25mIC0qLQogIwogIyBNYXliZSBhZGQgbGlicmFyeSBleHRlbnNpb25zIGZvciB0aHJlYWQgbXV0ZXggbG9ja2luZy4KICMKIAogaWYgdGVzdCAieCR3aXRoX3Jlc19sb2NrcyIgPSAieHllcyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9SRUVOVFJBTlQgMQotX0FDRU9GCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfUkVFTlRSQU5UIDEiID4+Y29uZmRlZnMuaAogCiAKICAgICBjYXNlICR0YXJnZXRfb3MgaW4KQEAgLTI1MzQ1LDEzICsxODYwOCwxNSBAQAogIwogIyBBZGQgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlIGZpbGVzLgogIwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlLi4uICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2UuLi4gIiA+JjY7IH0KIG90aGVyX3NyY19saXN0PSIiCi1vdGhlcl9vYmpzX2xpc3Q9IiIKK290aGVyX2Z0b2Jqc19saXN0PSIiCiBvdGhlcl9sb2Jqc19saXN0PSIiCitvdGhlcl9vYmpzX2xpc3Q9IiIKIG90aGVyX2FnZW50b2Jqcz0iIgogb3RoZXJfbGFnZW50b2Jqcz0iIgorb3RoZXJfZnRhZ2VudG9ianM9IiIKIG90aGVyX3RyYXBkX29iamVjdHM9IiIKIAogIyBXaW4zMiBzZXJ2aWNlIGNvZGUKQEAgLTI1MzU5LDE2ICsxODYyNCwxOSBAQAogICBvdGhlcl9zcmNfbGlzdD0iJG90aGVyX3NyY19saXN0IHdpbnNlcnZpY2UuYyB3aW5zZXJ2aWNlcmMucmMiCiAgIG90aGVyX29ianNfbGlzdD0iJG90aGVyX29ianNfbGlzdCB3aW5zZXJ2aWNlLm8gd2luc2VydmljZXJjLm8iCiAgIG90aGVyX2xvYmpzX2xpc3Q9IiRvdGhlcl9sb2Jqc19saXN0IHdpbnNlcnZpY2UubG8gd2luc2VydmljZXJjLmxvIgorICBvdGhlcl9mdG9ianNfbGlzdD0iJG90aGVyX2Z0b2Jqc19saXN0IHdpbnNlcnZpY2UuZnQgd2luc2VydmljZXJjLmZ0IgogICBvdGhlcl9hZ2VudG9ianM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLm8iCiAgIG90aGVyX2xhZ2VudG9ianM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLmxvIgorICBvdGhlcl9mdGFnZW50b2Jqcz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubG8iCiAgIG90aGVyX3RyYXBkX29iamVjdHM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLm8iCiBmaQogCiAjIFdpbjMyIHBpcGVzCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgogICBvdGhlcl9zcmNfbGlzdD0iJG90aGVyX3NyY19saXN0IHdpbnBpcGUuYyIKICAgb3RoZXJfb2Jqc19saXN0PSIkb3RoZXJfb2Jqc19saXN0IHdpbnBpcGUubyIKICAgb3RoZXJfbG9ianNfbGlzdD0iJG90aGVyX2xvYmpzX2xpc3Qgd2lucGlwZS5sbyIKKyAgb3RoZXJfZnRvYmpzX2xpc3Q9IiRvdGhlcl9mdG9ianNfbGlzdCB3aW5waXBlLmZ0IgogZmkKIAogCkBAIC0yNTM3OCwxNjAgKzE4NjQ2LDE2IEBACiAKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkb3RoZXJfc3JjX2xpc3QgJG90aGVyX29ianNfbGlzdCAkb3RoZXJfbG9ianNfbGlzdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kb3RoZXJfc3JjX2xpc3QgJG90aGVyX29ianNfbGlzdCAkb3RoZXJfbG9ianNfbGlzdCIgPiY2Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkb3RoZXJfYWdlbnRvYmpzICRvdGhlcl9sYWdlbnRvYmpzICRvdGhlcl90cmFwZF9vYmplY3RzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRvdGhlcl9hZ2VudG9ianMgJG90aGVyX2xhZ2VudG9ianMgJG90aGVyX3RyYXBkX29iamVjdHMiID4mNgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkb3RoZXJfc3JjX2xpc3QgJG90aGVyX29ianNfbGlzdCAkb3RoZXJfbG9ianNfbGlzdCIgPiY1CiskYXNfZWNobyAiJG90aGVyX3NyY19saXN0ICRvdGhlcl9vYmpzX2xpc3QgJG90aGVyX2xvYmpzX2xpc3QiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRvdGhlcl9hZ2VudG9ianMgJG90aGVyX2xhZ2VudG9ianMgJG90aGVyX3RyYXBkX29iamVjdHMiID4mNQorJGFzX2VjaG8gIiRvdGhlcl9hZ2VudG9ianMgJG90aGVyX2xhZ2VudG9ianMgJG90aGVyX3RyYXBkX29iamVjdHMiID4mNjsgfQogCiAjCi0jIERvIHRyYW5zcG9ydCBtb2R1bGUgcHJvY2Vzc2luZy4KKyMgQ3JlYXRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGJ1aWxkCiAjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFuZCBjb25maWd1cmluZyB0cmFuc3BvcnQgbW9kdWxlcyB0byB1c2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYW5kIGNvbmZpZ3VyaW5nIHRyYW5zcG9ydCBtb2R1bGVzIHRvIHVzZS4uLiAkRUNIT19DIiA+JjYKLXRyYW5zcG9ydF9zcmNfbGlzdD0iIgotdHJhbnNwb3J0X2hkcl9saXN0PSIiCi10cmFuc3BvcnRfZGVmX2xpc3Q9IiIKLXRyYW5zcG9ydF9yZXN1bHRfbGlzdD0iIgotdHJhbnNwb3J0X2FkZF9saXN0PSIiCi10cmFuc3BvcnRfY2FsbGJhY2tfZGlzYWJsZWQ9IiIKLW5ld193aXRoX3RyYW5zcG9ydF9saXN0PWBlY2hvICR3aXRoX3RyYW5zcG9ydHMgfCBzZWQgJ3MvLC8gL2c7J2AKLW5ld193aXRoX291dF90cmFuc3BvcnRfbGlzdD1gZWNobyAkd2l0aF9vdXRfdHJhbnNwb3J0cyB8IHNlZCAncy8sLyAvZzsnYAotCi0jCi0jIEFkZCB0aGUgZGVmYXVsdCB0cmFuc3BvcnRzIHRvIHRoZSBsaXN0Ci0jCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBDYWxsYmFjayIKLWVsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLSAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBDYWxsYmFjayIKLWVsc2UKLSAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBVbml4IENhbGxiYWNrIgotZmkKLWlmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCi0gIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUElQdjYgVENQSVB2NiAkdHJhbnNwb3J0X2RlZmF1bHRfbGlzdCIKLWZpCi1mb3IgaSBpbiAkdHJhbnNwb3J0X2RlZmF1bHRfbGlzdDsgZG8KLSAgaWYgZWNobyAiICRuZXdfd2l0aF90cmFuc3BvcnRfbGlzdCAiIHwgZ3JlcCAiICRpICIgPi9kZXYvbnVsbDsgdGhlbgotICAgIDoKLSAgZWxzZQotICAgIHRyYW5zcG9ydF9hZGRfbGlzdD0iJGkgJHRyYW5zcG9ydF9hZGRfbGlzdCIKLSAgZmkKLWRvbmUKLW5ld190cmFuc3BvcnRfbGlzdD0iJHRyYW5zcG9ydF9hZGRfbGlzdCAkbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3QiCi0KLWZvciBpIGluICRuZXdfdHJhbnNwb3J0X2xpc3Q7IGRvCi0gIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3RyYW5zcG9ydF9saXN0ICIgfCBncmVwICIgJGkgIiA+L2Rldi9udWxsOyB0aGVuCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4VURQIjsgdGhlbgotICAgICAgZWNobwotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aG91dCBVRFAvSVAgc3VwcG9ydC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aG91dCBVRFAvSVAgc3VwcG9ydC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBlbGlmIHRlc3QgIngkaSIgPSAieENhbGxiYWNrIjsgdGhlbgotICAgICAgZWNobwotICAgICAgdHJhbnNwb3J0X2NhbGxiYWNrX2Rpc2FibGVkPSJ5ZXMiCi0gICAgZmkKLSAgZWxzZQotICAgIGlmIHRlc3QgIngkaSIgPSAieEFBTDVQVkMiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgIT0gInhsaW51eCI7IHRoZW4KLSAgICAgICAgZWNobwotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBBQUw1IFBWQyBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIChMaW51eCBvbmx5KSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBBQUw1IFBWQyBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIChMaW51eCBvbmx5KSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgIngkaSIgPSAieElQWCI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiAhPSAieGxpbnV4IjsgdGhlbgotICAgICAgICBlY2hvCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IElQWCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIChMaW51eCBvbmx5KSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBJUFggc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSAoTGludXggb25seSkiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgIGZpCi0gICAgZmkKLSAgICBpZiB0ZXN0ICJ4JGkiID0gInhVbml4IjsgdGhlbgotICAgICAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gICAgICAgIGVjaG8KLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5peCBkb21haW4gcHJvdG9jb2wgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBVbml4IGRvbWFpbiBwcm90b2NvbCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICBlbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0gICAgICAgIGVjaG8KLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5peCBkb21haW4gcHJvdG9jb2wgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBVbml4IGRvbWFpbiBwcm90b2NvbCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAhICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBpZiB0ZXN0ICJ4JGkiID0gInhVRFBJUHY2IiAtbyAieCRpIiA9ICJ4VENQSVB2NiI7IHRoZW4KLSAgICAgICAgICAgIGVjaG8KLSAgICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IElQdjYgdHJhbnNwb3J0cyBub3QgYXZhaWxhYmxlIGlmIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBJUHY2IHRyYW5zcG9ydHMgbm90IGF2YWlsYWJsZSBpZiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgICAgZmkKLSAgICBmaQotICAgIHRyYW5zcG9ydF9zcmM9InNubXAiJGkiRG9tYWluLmMiCi0gICAgdHJhbnNwb3J0X2hkcj0ic25tcCIkaSJEb21haW4uaCIKLSAgICByZWxfdHJhbnNwb3J0X3NyYz0ic25tcGxpYi8iJHRyYW5zcG9ydF9zcmMKLSAgICByZWxfdHJhbnNwb3J0X2hkcj0iaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5LyIkdHJhbnNwb3J0X2hkcgotICAgIGlmIHRlc3QgLWYgIiRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIjsgdGhlbgotICAgICAgdHJhbnNwb3J0X3Jlc3VsdF9saXN0PSIkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICRpIgotICAgICAgdHJhbnNwb3J0X3NyY19saXN0PSIkdHJhbnNwb3J0X3NyYyAkdHJhbnNwb3J0X3NyY19saXN0IgotICAgICAgaWYgdGVzdCAtZiAiJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9oZHIiOyB0aGVuCi0gICAgICAgIHRyYW5zcG9ydF9oZHJfbGlzdD0iJHRyYW5zcG9ydF9oZHIgJHRyYW5zcG9ydF9oZHJfbGlzdCIKLSAgICAgIGZpCi0gICAgICB0cmFuc3BvcnRfZGVmPWBlY2hvICRpIHwgc2VkICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCi0gICAgICB0cmFuc3BvcnRfZGVmX2xpc3Q9Ik5FVFNOTVBfVFJBTlNQT1JUXyIkdHJhbnNwb3J0X2RlZiJfRE9NQUlOICR0cmFuc3BvcnRfZGVmX2xpc3QiCi0gICAgZWxzZQotICAgICAgZWNobwotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQ2Fubm90IGZpbmQgZmlsZSAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyB0byBzdXBwb3J0IFNOTVAgdHJhbnNwb3J0IGRvbWFpbiAkaS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQ2Fubm90IGZpbmQgZmlsZSAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyB0byBzdXBwb3J0IFNOTVAgdHJhbnNwb3J0IGRvbWFpbiAkaS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBmaQotICBmaQotZG9uZQotdHJhbnNwb3J0X29ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgc2VkICdzL1wuYy9cLm8vZydgCi10cmFuc3BvcnRfbG9ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgc2VkICdzL1wuYy9cLmxvL2cnYAotCi0jIyB3aW4zMiBwbGF0Zm9ybXMgcmVxdWlyZSBpbmV0X250b3AgZXRjLgotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLSAgaWYgZWNobyAiJHRyYW5zcG9ydF9kZWZfbGlzdCIgfCBncmVwICJJUFY2IiA+L2Rldi9udWxsOyB0aGVuCi0gICAgdHJhbnNwb3J0X29ial9saXN0PSIkdHJhbnNwb3J0X29ial9saXN0IGluZXRfbnRvcC5vIGluZXRfcHRvbi5vIgotICAgIHRyYW5zcG9ydF9sb2JqX2xpc3Q9IiR0cmFuc3BvcnRfbG9ial9saXN0IGluZXRfbnRvcC5sbyBpbmV0X3B0b24ubG8iCi0gIGZpCi1maQotCi0KLQotCi0KLWZvciBpIGluICR0cmFuc3BvcnRfZGVmX2xpc3Q7IGRvCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGkgMQotX0FDRU9GCi0KLWRvbmUKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSR0cmFuc3BvcnRfcmVzdWx0X2xpc3QuIiA+JjYKLQotICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCi0gIE5ldHdvcmsgdHJhbnNwb3J0IHN1cHBvcnQ6ICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QKLUVPRgotCi0KLSMKLSMgU2VjdXJpdHkgbW9kdWxlcyB0byB1c2UKLSMKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzZWN1cml0eSBtb2R1bGVzIHRvIHVzZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzZWN1cml0eSBtb2R1bGVzIHRvIHVzZS4uLiAkRUNIT19DIiA+JjYKLXNlY3VyaXR5X2RlZl9saXN0PSJ1c20iCi1zZWN1cml0eV9zcmNfbGlzdD0iIgotc2VjdXJpdHlfb2JqX2xpc3Q9IiIKLXNlY3VyaXR5X2xvYmpfbGlzdD0iIgotc2VjdXJpdHlfaW5pdF9maWxlPSJzbm1wbGliL3NubXBzbV9pbml0LmgiCi1zZWN1cml0eV9pbmNsX2ZpbGU9ImluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCIKLW5ld193aXRoX3NlY3VyaXR5PWBlY2hvICR3aXRoX3NlY3VyaXR5X21vZHVsZXMgfCBzZWQgJ3MvLC8gL2c7J2AKLW5ld193aXRoX291dF9zZWN1cml0eT1gZWNobyAkd2l0aF9vdXRfc2VjdXJpdHlfbW9kdWxlcyB8IHNlZCAncy8sLyAvZzsnYAotCiBpZiB0ZXN0ICEgLWQgaW5jbHVkZTsgdGhlbgogICBta2RpciBpbmNsdWRlCiBmaQpAQCAtMjU1NTEsMjIgKzE4Njc1LDIzMCBAQAogaWYgdGVzdCAhIC1kIHNubXBsaWI7IHRoZW4KICAgbWtkaXIgc25tcGxpYgogZmkKLWVjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9pbml0X2ZpbGUKLWVjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9pbmNsX2ZpbGUKK2lmIHRlc3QgISAtZCBzbm1wbGliL3RyYW5zcG9ydHMgOyB0aGVuCisgIG1rZGlyIHNubXBsaWIvdHJhbnNwb3J0cworZmkKIAotZm9yIGkgaW4gJHNlY3VyaXR5X2RlZl9saXN0OyBkbwotICBpZiBlY2hvICIgJG5ld193aXRoX291dF9zZWN1cml0eSAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGkiID0gInh1c20iOyB0aGVuCi0JZWNobwotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBUaGUgVVNNIHNlY3VyaXR5IG1vZHVsZSBpcyBtYW5kYXRvcnkiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogVGhlIFVTTSBzZWN1cml0eSBtb2R1bGUgaXMgbWFuZGF0b3J5IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisjCisjIERvIHRyYW5zcG9ydCBtb2R1bGUgcHJvY2Vzc2luZy4KKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuZCBjb25maWd1cmluZyB0cmFuc3BvcnQgbW9kdWxlcyB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFuZCBjb25maWd1cmluZyB0cmFuc3BvcnQgbW9kdWxlcyB0byB1c2UuLi4gIiA+JjY7IH0KKworIyBpbmNsdWRlIHRoZSBhY3R1YWwgY29kZSBjaGVja2luZworIyAtKi0gc2ggLSotCit0cmFuc3BvcnRfc3JjX2xpc3Q9IiIKK3RyYW5zcG9ydF9oZHJfbGlzdD0iIgordHJhbnNwb3J0X2RlZl9saXN0PSIiCit0cmFuc3BvcnRfcmVzdWx0X2xpc3Q9IiIKK3RyYW5zcG9ydF9hZGRfbGlzdD0iIgorbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3Q9YGVjaG8gJHdpdGhfdHJhbnNwb3J0cyB8ICRTRUQgJ3MvLC8gL2c7J2AKK25ld193aXRoX291dF90cmFuc3BvcnRfbGlzdD1gZWNobyAkd2l0aF9vdXRfdHJhbnNwb3J0cyB8ICRTRUQgJ3MvLC8gL2c7J2AKKworIyBzZXQgdXAgdGhlIENQUCBjb21tYW5kCitNT0RVTEVDUFA9IiRDUFAgJFBBUlRJQUxUQVJHRVRGTEFHUyAtSSR7c3JjZGlyfSAtSSR7c3JjZGlyfS9pbmNsdWRlIgorCisjCisjIEFkZCB0aGUgZGVmYXVsdCB0cmFuc3BvcnRzIHRvIHRoZSBsaXN0CisjCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgorICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIEFsaWFzIENhbGxiYWNrIgorZWxzZQorICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIEFsaWFzIFVuaXggQ2FsbGJhY2siCitmaQoraWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KKyAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQSVB2NiBUQ1BJUHY2ICR0cmFuc3BvcnRfZGVmYXVsdF9saXN0IgorZmkKK2ZvciBpIGluICR0cmFuc3BvcnRfZGVmYXVsdF9saXN0OyBkbworICBpZiBlY2hvICIgJG5ld193aXRoX3RyYW5zcG9ydF9saXN0ICIgfCAkR1JFUCAiICRpICIgPi9kZXYvbnVsbDsgdGhlbgorICAgIDoKKyAgZWxzZQorICAgIHRyYW5zcG9ydF9hZGRfbGlzdD0iJGkgJHRyYW5zcG9ydF9hZGRfbGlzdCIKKyAgZmkKK2RvbmUKK25ld190cmFuc3BvcnRfbGlzdD0iJHRyYW5zcG9ydF9hZGRfbGlzdCAkbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3QiCisKK2lmIHRlc3QgIngkY3Rvcl9oZWFkZXIiID0gIngiIDsgdGhlbgorICAgY3Rvcl9oZWFkZXI9InNubXBsaWIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oIgorZmkKKworZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJGN0b3JfaGVhZGVyCit3aGlsZSB0ZXN0ICJ4JG5ld190cmFuc3BvcnRfbGlzdCIgIT0gIngiOyBkbworICBmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0PSIiCisgIGZvciBpIGluICRuZXdfdHJhbnNwb3J0X2xpc3Q7IGRvCisgICAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfdHJhbnNwb3J0X2xpc3QgIiB8ICRHUkVQICIgJGkgIiA+L2Rldi9udWxsOyB0aGVuCisgICAgICB0cnVlCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAieCRpIiA9ICJ4VURQSVB2NiIgLW8gIngkaSIgPSAieFRDUElQdjYiOyB0aGVuCisgICAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJJUHY2IHRyYW5zcG9ydHMgbm90IGF2YWlsYWJsZSBpZiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQiICIkTElORU5PIiA1CisgICAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICB0cmFuc3BvcnRfc3JjPSJ0cmFuc3BvcnRzL3NubXAiJGkiRG9tYWluLmMiCisgICAgICB0cmFuc3BvcnRfaGRyPSJzbm1wIiRpIkRvbWFpbi5oIgorICAgICAgcmVsX3RyYW5zcG9ydF9zcmM9InNubXBsaWIvIiR0cmFuc3BvcnRfc3JjCisgICAgICByZWxfdHJhbnNwb3J0X2hkcj0iaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5LyIkdHJhbnNwb3J0X2hkcgorICAgICAgbGNfaT1gZWNobyAkaSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKyAgICAgIGN0b3JfZm49Im5ldHNubXBfIiRsY19pIl9jdG9yIgorICAgICAgaWYgdGVzdCAtZiAiJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMiOyB0aGVuCisgICAgICAgIHRyYW5zcG9ydF9yZXN1bHRfbGlzdD0iJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAkaSIKKyAgICAgICAgdHJhbnNwb3J0X3NyY19saXN0PSIkdHJhbnNwb3J0X3NyYyAkdHJhbnNwb3J0X3NyY19saXN0IgorICAgICAgICBpZiB0ZXN0IC1mICIkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X2hkciI7IHRoZW4KKyAgICAgICAgICB0cmFuc3BvcnRfaGRyX2xpc3Q9IiR0cmFuc3BvcnRfaGRyICR0cmFuc3BvcnRfaGRyX2xpc3QiCisgICAgICAgIGZpCisgICAgICAgIHRyYW5zcG9ydF9kZWY9YGVjaG8gJGkgfCAkU0VEICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCisgICAgICAgIHRyYW5zcG9ydF9kZWZfbGlzdD0iTkVUU05NUF9UUkFOU1BPUlRfIiR0cmFuc3BvcnRfZGVmIl9ET01BSU4gJHRyYW5zcG9ydF9kZWZfbGlzdCIKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobworICAgICAgICBhc19mbl9lcnJvciAkPyAiQ2Fubm90IGZpbmQgZmlsZSAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyB0byBzdXBwb3J0IFNOTVAgdHJhbnNwb3J0IGRvbWFpbiAkaS4iICIkTElORU5PIiA1CisgICAgICBmaQorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIGJ1aWxkIGEgcHNldWRvIGluY2x1ZGUgaGVhZGVyIHRoYXQgaW5jbHVkZXMgY3VycmVudCBjb25maWcgYW5kCisgICAgICAjIHN5c3RlbSBzeW1ib2xzOgorICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRQorI3VuZGVmIE5FVFNOTVBfTUlOSU1BTF9DT0RFCisjZGVmaW5lIE5FVF9TTk1QX0NPTkZJR19ICisjdW5kZWYgY29uZmlnX3JlcXVpcmUKKyNkZWZpbmUgY29uZmlnX3JlcXVpcmUoZm9vKSBjb25maWdfY2hlY2tpdF9yZXF1aXJlKGZvbykKKyN1bmRlZiBjb25maWdfZXJyb3IKKyNkZWZpbmUgY29uZmlnX2Vycm9yKGZvbykgY29uZmlnX2NoZWNraXRfZXJyb3IoZm9vKQorI2luY2x1ZGUgIiRyZWxfdHJhbnNwb3J0X2hkciIKK19BQ0VPRgorICAgICAgbXYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCisKKyAgICAgICMKKyAgICAgICMgY2hlY2sgZm9yIGRlcGVuZGVuY2llcyB1c2luZyBjb25maWdfcmVxdWlyZSgpIG1hY3JvCisgICAgICAjCisgICAgICBzdWJfbGlzdD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgJEdSRVAgY29uZmlnX2NoZWNraXRfcmVxdWlyZSB8ICRTRUQgJ3MvLipjb25maWdfY2hlY2tpdF9yZXF1aXJlICooICpcKC4qXCkgKikuKi9cMS8nYAorICAgICAgaWYgdGVzdCAieCRzdWJfbGlzdCIgIT0gIngiIDsgdGhlbgorICAgICAgICBmb3IgaiBpbiAkc3ViX2xpc3QgOyBkbworCSAgaWYgZWNobyAiICRmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0ICRuZXdfdHJhbnNwb3J0X2xpc3QgIiB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbCA7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorICAgICAgICAgICAgZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdD0iJGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3QgJGoiCisJICBmaQorICAgICAgICBkb25lCisgICAgICBmaQorCisgICAgICAjCisgICAgICAjIGNoZWNrIGZvciBlcnJvcnMgdXNpbmcgY29uZmlnX2Vycm9yKCkgbWFjcm8KKyAgICAgICMKKyAgICAgIGVycm9yX2xpc3Q9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8ICRHUkVQIGNvbmZpZ19jaGVja2l0X2Vycm9yIHwgJFNFRCAncy8uKmNvbmZpZ19jaGVja2l0X2Vycm9yKFwoLipcKSkuKi9cMS9nJ2AKKyAgICAgIGlmIHRlc3QgIngkZXJyb3JfbGlzdCIgIT0gIngiIDsgdGhlbgorICAgICAgICBlY2hvICIiCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkZXJyb3JfbGlzdCIgIiRMSU5FTk8iIDUKKyAgICAgIGZpCisKKyAgICAgICMKKyAgICAgICMgQ2hlY2sgZm9yIG5lZWRlZCBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyB0byBjYWxsCisgICAgICAjCisgICAgICBmb3VuZD1gZ3JlcCAkY3Rvcl9mbiAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyY2AKKyAgICAgIGlmIGdyZXAgJGN0b3JfZm4gJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMgPiAvZGV2L251bGwgOyB0aGVuCisJIyB3ZSBhZGQgdGhlbSBkb3duIGJlbG93IGluc3RlYWQgb2YgaGVyZSB0byBtYWtlIHN1cmUKKwkjIGNvbmZpZ19yZXF1aXJlIGRlcGVuZGVuY3kgY29uc3RydWN0b3JzIGdldCBjYWxsZWQgZmlyc3QuCisJdHJfaW5pdF9saXN0PSIkY3Rvcl9mbiAkdHJfaW5pdF9saXN0IgorICAgICAgZmkKICAgICBmaQorICBkb25lICMgZm9yIGVhY2ggbmV3IHRyYW5zcG9ydAorICBuZXdfdHJhbnNwb3J0X2xpc3Q9IiRmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0IgorZG9uZSAjIHdoaWxlIG5ldyB0cmFuc3BvcnRzIGV4aXN0Cit0cmFuc3BvcnRfb2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCAkU0VEICdzL1wuYy9cLm8vZydgCit0cmFuc3BvcnRfbG9ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgJFNFRCAncy9cLmMvXC5sby9nJ2AKK3RyYW5zcG9ydF9mdG9ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgJFNFRCAncy9cLmMvXC5mdC9nJ2AKK2ZvciBpIGluICR0cl9pbml0X2xpc3QgOyBkbworICAgZWNobyAiJGkoKTsiID4+ICRjdG9yX2hlYWRlcgorZG9uZQorCisjIyB3aW4zMiBwbGF0Zm9ybXMgcmVxdWlyZSBpbmV0X250b3AgZXRjLgoraWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgorICBpZiBlY2hvICIkdHJhbnNwb3J0X2RlZl9saXN0IiB8ICRHUkVQICJJUFY2IiA+L2Rldi9udWxsOyB0aGVuCisgICAgdHJhbnNwb3J0X29ial9saXN0PSIkdHJhbnNwb3J0X29ial9saXN0IGluZXRfbnRvcC5vIGluZXRfcHRvbi5vIgorICAgIHRyYW5zcG9ydF9sb2JqX2xpc3Q9IiR0cmFuc3BvcnRfbG9ial9saXN0IGluZXRfbnRvcC5sbyBpbmV0X3B0b24ubG8iCisgICAgdHJhbnNwb3J0X2Z0b2JqX2xpc3Q9IiR0cmFuc3BvcnRfZnRvYmpfbGlzdCBpbmV0X250b3AuZnQgaW5ldF9wdG9uLmZ0IgorICBmaQorZmkKKworaWYgdGVzdCAieCR0cmFuc3BvcnRfcmVzdWx0X2xpc3QiID0geCA7IHRoZW4KKyAgIGFzX2ZuX2Vycm9yICQ/ICJObyB0cmFuc3BvcnRzIGNvbmZpZ3VyZWQsIGF0IGxlYXN0IG9uZSBtdXN0IGJlIHByb3ZpZGVkIiAiJExJTkVOTyIgNQorZmkKKworCisKKworCisKKworZm9yIGkgaW4gJHRyYW5zcG9ydF9kZWZfbGlzdDsgZG8KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSAkaSAxCitfQUNFT0YKKworZG9uZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QuIiA+JjUKKyRhc19lY2hvICIkdHJhbnNwb3J0X3Jlc3VsdF9saXN0LiIgPiY2OyB9CisKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICBOZXR3b3JrIHRyYW5zcG9ydCBzdXBwb3J0OiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0CitFT0YKKworCisjIGNsZWFudXAKK3JtIC1mIG1vZHVsZV90bXBfaGVhZGVyLmgKKworIworIyBTZWN1cml0eSBtb2R1bGVzIHRvIHVzZQorIworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzZWN1cml0eSBtb2R1bGVzIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2VjdXJpdHkgbW9kdWxlcyB0byB1c2UuLi4gIiA+JjY7IH0KKyMgLSotIHNoIC0qLQorc2VjdXJpdHlfZGVmX2xpc3Q9InVzbSIKK3NlY3VyaXR5X3NyY19saXN0PSIiCitzZWN1cml0eV9vYmpfbGlzdD0iIgorc2VjdXJpdHlfbG9ial9saXN0PSIiCitzZWN1cml0eV9mdG9ial9saXN0PSIiCitzZWN1cml0eV9tb2RfbGlzdD0iICIKKworbmV3X3dpdGhfc2VjdXJpdHk9CituZXdfd2l0aF9vdXRfc2VjdXJpdHk9YGVjaG8gJHdpdGhfb3V0X3NlY3VyaXR5X21vZHVsZXMgfCB0ciAsICcgJ2AKKworIyBBc3NpZ24gYWRkaXRpb25hbCBzZWN1cml0eSBtb2R1bGVzCitmb3IgaSBpbiBgZWNobyAkd2l0aF9zZWN1cml0eV9tb2R1bGVzIHwgdHIgLCAnICdgOyBkbworICBpZiBlY2hvICIgJG5ld193aXRoX291dF9zZWN1cml0eSAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgZWNobworICAgIGFzX2ZuX2Vycm9yICQ/ICJzZWN1cml0eSBtb2R1bGUgY29uZmxpY3QgLSAkaSBib3RoIGluY2x1ZGVkIGFuZCBleGNsdWRlZCIgIiRMSU5FTk8iIDUKKyAgZWxpZiBlY2hvICIgJG5ld193aXRoX3NlY3VyaXR5ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgOiAjIERvdWJsZSBkZWZpbmUsIGlnbm9yZQogICBlbHNlCiAgICAgbmV3X3dpdGhfc2VjdXJpdHk9IiRuZXdfd2l0aF9zZWN1cml0eSAkaSIKICAgZmkKIGRvbmUKIAorIyBBZGQgZGVmYXVsdCBzZWN1cml0eSBtb2R1bGVzCitmb3IgaSBpbiAkc2VjdXJpdHlfZGVmX2xpc3Q7IGRvCisgIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3NlY3VyaXR5ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICA6ICMgRXhjbHVkZWQsIGlnbm9yZQorICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfc2VjdXJpdHkgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICA6ICMgRG91YmxlIGRlZmluZSwgaWdub3JlCisgIGVsc2UKKyAgICBuZXdfd2l0aF9zZWN1cml0eT0iJG5ld193aXRoX3NlY3VyaXR5ICRpIgorICBmaQorZG9uZQorCisjIEdlbmVyYXRlIG91dHB1dCBmaWxlcworOiAke3NlY3VyaXR5X2luaXRfZmlsZTo9J3NubXBsaWIvc25tcHNtX2luaXQuaCd9Cis6ICR7c2VjdXJpdHlfc2h1dGRvd25fZmlsZTo9J3NubXBsaWIvc25tcHNtX3NodXRkb3duLmgnfQorOiAke3NlY3VyaXR5X2luY2xfZmlsZTo9J2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCd9CisKK2VjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9pbml0X2ZpbGUKK2VjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9zaHV0ZG93bl9maWxlCitlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfaW5jbF9maWxlCisKIGZvciBpIGluICRuZXdfd2l0aF9zZWN1cml0eTsgZG8KICAgY2ZpbGU9InNubXAiJGkiLmMiCiAgIGhmaWxlPSJzbm1wIiRpIi5oIgpAQCAtMjU1NzYsMTkgKzE4OTA4LDIxIEBACiAgICAgOgogICBlbHNlCiAgICAgZWNobwotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IE5vIHN1Y2ggc2VjdXJpdHkgbW9kdWxlOiAkaSAvICRjZmlsZSAvICRoZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBObyBzdWNoIHNlY3VyaXR5IG1vZHVsZTogJGkgLyAkY2ZpbGUgLyAkaGZpbGUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAkPyAiTm8gc3VjaCBzZWN1cml0eSBtb2R1bGU6ICRpIC8gJGNmaWxlIC8gJGhmaWxlIiAiJExJTkVOTyIgNQogICBmaQogCiAgICMgZGVmaW5lIGEgYnVuY2ggb2Ygc3R1ZmYgdG8gZW5hYmxlIGl0CisgIHNlY3VyaXR5X21vZF9saXN0PSIke3NlY3VyaXR5X21vZF9saXN0fSAkaSIKKyAgc2VjdXJpdHlfc3JjX2xpc3Q9IiRzZWN1cml0eV9zcmNfbGlzdCAkY2ZpbGUiCiAgIHNlY3VyaXR5X3NyY19saXN0PSIkc2VjdXJpdHlfc3JjX2xpc3QgJGNmaWxlIgogICBzZWN1cml0eV9oZHJfbGlzdD0iJHNlY3VyaXR5X2hkcl9saXN0ICRoZmlsZSIKICAgc2VjdXJpdHlfb2JqX2xpc3Q9IiRzZWN1cml0eV9vYmpfbGlzdCBzbm1wIiRpIi5vIgogICBzZWN1cml0eV9sb2JqX2xpc3Q9IiRzZWN1cml0eV9sb2JqX2xpc3Qgc25tcCIkaSIubG8iCi0gIGRlZl9uYW1lPSJORVRTTk1QX1NFQ01PRF8iYGVjaG8gJGkgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgCisgIHNlY3VyaXR5X2Z0b2JqX2xpc3Q9IiRzZWN1cml0eV9mdG9ial9saXN0IHNubXAiJGkiLmZ0IgogICBlY2hvICJpbml0XyIkaSIoKTsiID4+ICRzZWN1cml0eV9pbml0X2ZpbGUKKyAgZWNobyAic2h1dGRvd25fIiRpIigpOyIgPj4gJHNlY3VyaXR5X3NodXRkb3duX2ZpbGUKICAgZWNobyAiI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvJGhmaWxlPiIgPj4gJHNlY3VyaXR5X2luY2xfZmlsZQorICBkZWZfbmFtZT0iYCRhc19lY2hvICJORVRTTk1QX1NFQ01PRF8kaSIgfCAkYXNfdHJfY3BwYCIKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSAkZGVmX25hbWUgMQogX0FDRU9GCkBAIC0yNTU5OSw4ICsxODkzMywxMCBAQAogCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG5ld193aXRoX3NlY3VyaXR5IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRuZXdfd2l0aF9zZWN1cml0eSIgPiY2CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXdfd2l0aF9zZWN1cml0eSIgPiY1CiskYXNfZWNobyAiJG5ld193aXRoX3NlY3VyaXR5IiA+JjY7IH0KIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIFNOTVB2MyBTZWN1cml0eSBNb2R1bGVzOiAgICAkbmV3X3dpdGhfc2VjdXJpdHkKQEAgLTI1NjExLDMyICsxODk0NywzNCBAQAogIyBIYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBLU00gdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2Ugc3VwcG9ydAogIwogCi1hY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ9bm8KIHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9CiBhbHJlYWR5X2NoZWNrZWRfa3JiNT1ubwogCiBmb3Igc2VjIGluICRuZXdfd2l0aF9zZWN1cml0eQogZG8KLSAgaWYgdGVzdCAieCRzZWMiID0gInhrc20iIC1hICJ4eWVzIiA9ICJ4JGFscmVhZHlfY2hlY2tlZF9rcmI1IjsgdGhlbgotICAgIGNvbnRpbnVlCisgIGlmIHRlc3QgIngkc2VjIiA9ICJ4a3NtIjsgdGhlbgorICAgIGlmIHRlc3QgInh5ZXMiID0gIngkYWxyZWFkeV9jaGVja2VkX2tyYjUiOyB0aGVuCisgICAgICBjb250aW51ZQorICAgIGVsc2UKKyAgICAgIGFscmVhZHlfY2hlY2tlZF9rcmI1PXllcworICAgIGZpCiAgIGZpCi0gIGFscmVhZHlfY2hlY2tlZF9rcmI1PXllcwogCiAgIGlmIHRlc3QgeCRzZWMgIT0geGtzbTsgdGhlbgogICAgIHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9IiRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5ICRzZWMiCiAgIGVsc2UKICAgICBpZiB0ZXN0IG5vID0gJHRyeWtyYjU7IHRoZW4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNvbmZpZ3VyZWQgbm90IHRvIHVzZSBrcmI1LiBkaXNhYmxpbmcga3NtIiA+JjUKLWVjaG8gIiRhc19tZTogY29uZmlndXJlZCBub3QgdG8gdXNlIGtyYjUuIGRpc2FibGluZyBrc20iID4mNjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNvbmZpZ3VyZWQgbm90IHRvIHVzZSBrcmI1LiBkaXNhYmxpbmcga3NtIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNvbmZpZ3VyZWQgbm90IHRvIHVzZSBrcmI1LiBkaXNhYmxpbmcga3NtIiA+JjY7fQogICAgICAgY29udGludWUKICAgICBmaQogCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJrcmI1LWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkga3JiNS1jb25maWc7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfa3JiNV9jb25maWcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2tyYjVfY29uZmlnKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAka3JiNV9jb25maWcgaW4KICAgW1xcL10qIHwgPzpbXFwvXSopCkBAIC0yNTY0OSwzMCArMTg5ODcsMzEgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wYXRoX2tyYjVfY29uZmlnPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9rcmI1X2NvbmZpZyIgJiYgYWNfY3ZfcGF0aF9rcmI1X2NvbmZpZz0ibm8iCiAgIDs7CiBlc2FjCiBmaQoga3JiNV9jb25maWc9JGFjX2N2X3BhdGhfa3JiNV9jb25maWcKLQogaWYgdGVzdCAtbiAiJGtyYjVfY29uZmlnIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAka3JiNV9jb25maWciID4mNQotZWNobyAiJHtFQ0hPX1R9JGtyYjVfY29uZmlnIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRrcmI1X2NvbmZpZyIgPiY1CiskYXNfZWNobyAiJGtyYjVfY29uZmlnIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIAorCiAgICAgaWYgdGVzdCBubyAhPSAka3JiNV9jb25maWc7IHRoZW4KICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgYCRrcmI1X2NvbmZpZyAtLWNmbGFnc2AiCiAgICAgICBMSUJTPSIkTElCUyBgJGtyYjVfY29uZmlnIC0tbGlic2AiCkBAIC0yNTcwMCw3NiArMTkwMzksNDggQEAKIAogICAgIGZpCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGtyYjUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3JiNS4uLiAkRUNIT19DIiA+JjYKLSAgICBpZiB0ZXN0ICIke2FjX2N2X2hhdmVfa3JiNStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGtyYjUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGtyYjUuLi4gIiA+JjY7IH0KKyAgICBpZiAke2FjX2N2X2hhdmVfa3JiNSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3JiNV9pbml0X2NvbnRleHQgaW4gLWxrcmI1IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGtyYjVfaW5pdF9jb250ZXh0IGluIC1sa3JiNS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Iga3JiNV9pbml0X2NvbnRleHQgaW4gLWxrcmI1IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBrcmI1X2luaXRfY29udGV4dCBpbiAtbGtyYjUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGtyYjUgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBrcmI1X2luaXRfY29udGV4dCAoKTsKIGludAogbWFpbiAoKQogewota3JiNV9pbml0X2NvbnRleHQgKCk7CityZXR1cm4ga3JiNV9pbml0X2NvbnRleHQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0PW5vCisgIGFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQiID0geHllczsgdGhlbiA6CiAgIGFjX2N2X2hhdmVfa3JiNT15ZXMKIGVsc2UKICAgYWNfY3ZfaGF2ZV9rcmI1PW5vCkBAIC0yNTc4MiwyOSArMTkwOTMsMjMgQEAKIAogICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfa3JiNSA9IG5vOyB0aGVuCiAgICAgICBpZiB0ZXN0ICJ4JGFza2Vka3JiNSIgPSAieHllcyI7IHRoZW4KLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBBc2tlZCB0byB1c2Uga3JiNSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBBc2tlZCB0byB1c2Uga3JiNSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWFzX2ZuX2Vycm9yICQ/ICJBc2tlZCB0byB1c2Uga3JiNSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgIiRMSU5FTk8iIDUKICAgICAgIGZpCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBuby4gZGlzYWJsaW5nIGtzbSIgPiY1Ci1lY2hvICIke0VDSE9fVH1uby4gZGlzYWJsaW5nIGtzbSIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8uIGRpc2FibGluZyBrc20iID4mNQorJGFzX2VjaG8gIm5vLiBkaXNhYmxpbmcga3NtIiA+JjY7IH0KICAgICAgIGNvbnRpbnVlCiAgICAgZmkKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiAgICAgcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0iJHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkga3NtIgogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBoZWltZGFsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGhlaW1kYWwuLi4gJEVDSE9fQyIgPiY2Ci0gICAgaWYgdGVzdCAiJHthY19jdl9oZWltZGFsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaGVpbWRhbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaGVpbWRhbC4uLiAiID4mNjsgfQorICAgIGlmICR7YWNfY3ZfaGVpbWRhbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8a3JiNS5oPgogaW50CkBAIC0yNTgxNSw0NSArMTkxMjAsMjAgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfaGVpbWRhbD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGVpbWRhbD1ubworICBhY19jdl9oZWltZGFsPW5vCiAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVpbWRhbCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVpbWRhbCIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWltZGFsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVpbWRhbCIgPiY2OyB9CiAgICAgaWYgdGVzdCAkYWNfY3ZfaGVpbWRhbCA9IHllczsgdGhlbgotICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9VU0VfS0VSQkVST1NfSEVJTURBTCAxCi1fQUNFT0YKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfS0VSQkVST1NfSEVJTURBTCAxIiA+PmNvbmZkZWZzLmgKIAogICAgICAgaWYgdGVzdCBubyA9ICRrcmI1X2NvbmZpZzsgdGhlbgogCUxJQlM9IiRMSUJTIC1sa3JiNSAtbGFzbjEgLWxjb21fZXJyIC1scm9rZW4iCkBAIC0yNTg2MiwxNzEgKzE5MTQyLDUxIEBACiAJTElCUz0iJExJQlMgLWxrcmI1IC1sY29tX2VyciIKICAgICBmaQogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIG5lZWQgdG8gdXNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2UgbmVlZCB0byB1c2UuLi4gJEVDSE9fQyIgPiY2Ci0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrcmI1X2NfZW5jcnlwdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrcmI1X2NfZW5jcnlwdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19rcmI1X2NfZW5jcnlwdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2UgbmVlZCB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2UgbmVlZCB0byB1c2UuLi4gIiA+JjY7IH0KKyAgICBpZiAke2FjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGtyYjVfY19lbmNyeXB0IHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMga3JiNV9jX2VuY3J5cHQuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUga3JiNV9jX2VuY3J5cHQgaW5ub2N1b3VzX2tyYjVfY19lbmNyeXB0Ci0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGtyYjVfY19lbmNyeXB0ICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGtyYjVfY19lbmNyeXB0Ci0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIga3JiNV9jX2VuY3J5cHQgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfa3JiNV9jX2VuY3J5cHQpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2tyYjVfY19lbmNyeXB0KQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBrcmI1X2NfZW5jcnlwdDsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBrcmI1X2NfZW5jcnlwdDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2tyYjVfY19lbmNyeXB0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2tyYjVfY19lbmNyeXB0PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19rcmI1X2NfZW5jcnlwdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19rcmI1X2NfZW5jcnlwdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2tyYjVfY19lbmNyeXB0ID0geWVzOyB0aGVuCi0KLSAgICBpZiB0ZXN0ICIke2FjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGtyYjVfaW5pdF9jb250ZXh0IGluIC1sazVjcnlwdG8iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3JiNV9pbml0X2NvbnRleHQgaW4gLWxrNWNyeXB0by4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGtyYjVfaW5pdF9jb250ZXh0IGluIC1sazVjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGtyYjVfaW5pdF9jb250ZXh0IGluIC1sazVjcnlwdG8uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxrNWNyeXB0byAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIGtyYjVfaW5pdF9jb250ZXh0ICgpOwogaW50CiBtYWluICgpCiB7Ci1rcmI1X2luaXRfY29udGV4dCAoKTsKK3JldHVybiBrcmI1X2luaXRfY29udGV4dCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dD1ubworICBhY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dCIgPSB4eWVzOyB0aGVuIDoKICAgYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUPXllcwogZWxzZQotICBhY19jdl9NSVRfTkVXX0NSWVBUbz1ubworICBhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ9bm8KIAogZmkKIApAQCAtMjYwMzUsMjcgKzE5MTk1LDEyMTggQEAKIAogCiAgICAgaWYgdGVzdCB5ZXMgPSAkYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBuZXcgTUlUIGNyeXB0byBBUEkiID4mNQotZWNobyAiJHtFQ0hPX1R9bmV3IE1JVCBjcnlwdG8gQVBJIiA+JjYKLSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVVNFX0tFUkJFUk9TX01JVCAxCi1fQUNFT0YKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBuZXcgTUlUIGNyeXB0byBBUEkiID4mNQorJGFzX2VjaG8gIm5ldyBNSVQgY3J5cHRvIEFQSSIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX0tFUkJFUk9TX01JVCAxIiA+PmNvbmZkZWZzLmgKIAogICAgICAgaWYgdGVzdCBubyA9ICRrcmI1X2NvbmZpZzsgdGhlbgogCUxJQlM9IiRMSUJTIC1sazVjcnlwdG8iCiAgICAgICBmaQogICAgIGVsc2UKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9sZCBNSVQgY3J5cHRvIEFQSSIgPiY1Ci1lY2hvICIke0VDSE9fVH1vbGQgTUlUIGNyeXB0byBBUEkiID4mNgotZmkKLQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9sZCBNSVQgY3J5cHRvIEFQSSIgPiY1CiskYXNfZWNobyAib2xkIE1JVCBjcnlwdG8gQVBJIiA+JjY7IH0KICAgICBmaQorICAgIGZvciBhY19mdW5jIGluIGtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkiICJhY19jdl9mdW5jX2tyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19rcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9LUkI1X0FVVEhfQ09OX0dFVFNFTkRTVUJLRVkgMQorX0FDRU9GCisKK2ZpCitkb25lCisKICAgZmkKIGRvbmUKIAogbmV3X3dpdGhfc2VjdXJpdHk9JHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkKIAogIworIyBEZXRlY3QgbG1fc2Vuc29ycyB2ZXJzaW9uCisjCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCIgPSAieHllcyI7IHRoZW4KKyAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzZW5zb3JzX2dldF9hbGxfc3ViZmVhdHVyZXMiICJhY19jdl9oYXZlX2RlY2xfc2Vuc29yc19nZXRfYWxsX3N1YmZlYXR1cmVzIiAiI2luY2x1ZGUgPHNlbnNvcnMvc2Vuc29ycy5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfc2Vuc29yc19nZXRfYWxsX3N1YmZlYXR1cmVzIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU0VOU09SU19HRVRfQUxMX1NVQkZFQVRVUkVTICRhY19oYXZlX2RlY2wKK19BQ0VPRgoraWYgdGVzdCAkYWNfaGF2ZV9kZWNsID0gMTsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX1NFTlNPUlNfVjMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2ZpCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMgdGhhdCBhcmUgcnVuCisjIGJlZm9yZSB0aGUgYWdlbnQgbW9kdWxlIHRlc3RzLgorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyMKKyMgICBSUE0gY2hlY2tzCisjCisjIworZm9yIGFjX2hlYWRlciBpbiBycG0vcnBtbGliLmggcnBtL2hlYWRlci5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInJwbS9ycG1saWIuaCIgImFjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgcnBtbGliX2g9eWVzCitlbHNlCisgIHJwbWxpYl9oPW5vCitmaQorCisKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJycG0vaGVhZGVyLmgiICJhY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2giID0geHllczsgdGhlbiA6CisgIHJwbWhlYWRlcl9oPXllcworZWxzZQorICBycG1oZWFkZXJfaD1ubworZmkKKworCisKK2lmIHRlc3QgIngkcnBtaGVhZGVyX2giID0gInhubyIgLW8gIngkcnBtbGliX2giID0gInhubyIgOyB0aGVuCisgIGlmIHRlc3QgIngkd2l0aF9ycG0iID0gInh5ZXMiIDsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBlaXRoZXIgdGhlIFJQTSBoZWFkZXIgZmlsZXMgbmVlZGVkIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBSUE0gc3VwcG9ydCIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIHdpdGhfcnBtPW5vCisgIGZpCitmaQorCisjCisjIHJwbSBsaWJyYXJpZXMgb25seSBuZWVkZWQgZm9yIHRoZSBob3N0IHJlc291cmNlcyBtaWIgc29mdHdhcmUKKyMgaW5zdGFsbGVkIHRhYmxlcyAob24gbGludXggaW4gcGFydGljdWxhcikKKyMKK2lmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iOyB0aGVuCisgICMgQVJHLiAgUlBNIGlzIGEgcmVhbCBwYWluLgorICAjIEZXSVcgbGlicnBtLmxhLCBsaWJycG1pby5sYSwgYW5kIGxpYnBvcHQubGEgaGF2ZSBjb3JyZWN0IGRlcGVuZGVuY2llcy4KKyAgX3JwbWxpYnM9IiIKKworICAjIHJwbS00LjAueCBuZWVkcyBycG1pby4KKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBycG1HZXRQYXRoIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcnBtR2V0UGF0aC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfcnBtR2V0UGF0aF9fcnBtbGlicys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkX3JwbWxpYnMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAkTE1JQkxJQlMgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBycG1HZXRQYXRoICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcnBtR2V0UGF0aCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBycG1pbyA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcnBtR2V0UGF0aCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJwbUdldFBhdGggKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfcnBtR2V0UGF0aF9fcnBtbGlicz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfcnBtR2V0UGF0aF9fcnBtbGlicyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19ycG1HZXRQYXRoX19ycG1saWJzIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ycG1HZXRQYXRoX19ycG1saWJzfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ycG1HZXRQYXRoX19ycG1saWJzfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIF9ycG1saWJzPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCisgZmkKKworCisgICMgcnBtLTQuMC4zIGxpYnJwbWRiIGFjdHVhbGx5IGNvbnRhaW5zIHdoYXQgd2UgbmVlZC4KKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBycG1kYk9wZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBycG1kYk9wZW4uLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3JwbWRiT3Blbl9fcnBtbGlicys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkX3JwbWxpYnMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAkTE1JQkxJQlMgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBycG1kYk9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBycG1kYk9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gcnBtZGIgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJwbWRiT3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJwbWRiT3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19ycG1kYk9wZW5fX3JwbWxpYnM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3JwbWRiT3Blbl9fcnBtbGlicyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19ycG1kYk9wZW5fX3JwbWxpYnMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3JwbWRiT3Blbl9fcnBtbGlic30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcnBtZGJPcGVuX19ycG1saWJzfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIF9ycG1saWJzPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCisgZmkKKworICAjIG5vdyBjaGVjayBmb3IgcnBtIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJpZXMuCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcnBtUmVhZENvbmZpZ0ZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcnBtUmVhZENvbmZpZ0ZpbGVzLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19ycG1SZWFkQ29uZmlnRmlsZXNfX3JwbWxpYnMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJF9ycG1saWJzIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gJExNSUJMSUJTICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcnBtUmVhZENvbmZpZ0ZpbGVzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcnBtUmVhZENvbmZpZ0ZpbGVzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHJwbSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcnBtUmVhZENvbmZpZ0ZpbGVzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcnBtUmVhZENvbmZpZ0ZpbGVzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3JwbVJlYWRDb25maWdGaWxlc19fcnBtbGlicz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfcnBtUmVhZENvbmZpZ0ZpbGVzX19ycG1saWJzIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3JwbVJlYWRDb25maWdGaWxlc19fcnBtbGlicyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcnBtUmVhZENvbmZpZ0ZpbGVzX19ycG1saWJzfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ycG1SZWFkQ29uZmlnRmlsZXNfX3JwbWxpYnN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgX3JwbWxpYnM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCUlBNIDEiID4+Y29uZmRlZnMuaAorCisgICAgTE1JQkxJQlM9IiRfcnBtbGlicyAkTE1JQkxJQlMiCisKKworIGZpCisKKworICAjIHJwbSA0LjYgaGFzIGluY29tcGF0aWJsZSBBUEksIHR1cm4gb24gdGhlIGxlZ2FjeSBvbmUKKyAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiaGVhZGVyR2V0RW50cnkiICJhY19jdl9oYXZlX2RlY2xfaGVhZGVyR2V0RW50cnkiICIjaW5jbHVkZSA8cnBtL3JwbWxpYi5oPgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9oZWFkZXJHZXRFbnRyeSIgPSB4eWVzOyB0aGVuIDoKKyAgOgorZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBfUlBNXzRfNF9DT01QQVQgLyoqLyIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2ZpCisKKyMKKyMgZ2V0ZnNzdGF0L2dldHZmc3N0YXQKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRmc3N0YXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRmc3N0YXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2dldGZzc3RhdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGZzc3RhdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGdldGZzc3RhdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBuYnV0aWw7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfZ2V0ZnNzdGF0PSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfZ2V0ZnNzdGF0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9nZXRmc3N0YXQrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9nZXRmc3N0YXQ9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9nZXRmc3N0YXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfZ2V0ZnNzdGF0IiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldGZzc3RhdAoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCitmb3IgYWNfZnVuYyBpbiBnZXRmc3N0YXQKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0ZnNzdGF0IiAiYWNfY3ZfZnVuY19nZXRmc3N0YXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0ZnNzdGF0IiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VURlNTVEFUIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitmb3IgYWNfZnVuYyBpbiBnZXR2ZnNzdGF0CitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldHZmc3N0YXQiICJhY19jdl9mdW5jX2dldHZmc3N0YXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0dmZzc3RhdCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVFZGU1NUQVQgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyMgZ2V0bW50ZW50IGlzIGluIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgb24gVU5JQ09TLCBpbiAtbHN1biBvbiBJcml4IDQsCisjIC1sc2VxIG9uIER5bml4L1BUWCwgLWxnZW4gb24gVW5peHdhcmUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0bW50ZW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0bW50ZW50Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9nZXRtbnRlbnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRtbnRlbnQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBnZXRtbnRlbnQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgc3VuIHNlcSBnZW47IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfZ2V0bW50ZW50PSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfZ2V0bW50ZW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9nZXRtbnRlbnQrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9nZXRtbnRlbnQ9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9nZXRtbnRlbnQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfZ2V0bW50ZW50IiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldG1udGVudAoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorICBhY19jdl9mdW5jX2dldG1udGVudD15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRNTlRFTlQgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgYWNfY3ZfZnVuY19nZXRtbnRlbnQ9bm8KK2ZpCisKKworCisjCisjIGtpbmZvX2dldF9jcHVzCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga2luZm9fZ2V0X2NwdXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBraW5mb19nZXRfY3B1cy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfa2luZm9fZ2V0X2NwdXMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBraW5mb19nZXRfY3B1cyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGtpbmZvX2dldF9jcHVzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIGtpbmZvOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2tpbmZvX2dldF9jcHVzPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfa2luZm9fZ2V0X2NwdXMrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2tpbmZvX2dldF9jcHVzKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfa2luZm9fZ2V0X2NwdXM9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9raW5mb19nZXRfY3B1cyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9raW5mb19nZXRfY3B1cyIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9raW5mb19nZXRfY3B1cworaWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCitmb3IgYWNfZnVuYyBpbiBraW5mb19nZXRfY3B1cworZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJraW5mb19nZXRfY3B1cyIgImFjX2N2X2Z1bmNfa2luZm9fZ2V0X2NwdXMiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfa2luZm9fZ2V0X2NwdXMiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9LSU5GT19HRVRfQ1BVUyAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisjCisjIGRpc2tJT0xBeCByZXF1aXJlcyBleHAgd2hpY2ggbWF5IHJlcXVpcmUgLWxtCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZXhwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZXhwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9leHArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBleHAgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBleHAgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgbTsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9leHA9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9leHArOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2V4cCs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2V4cD1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2V4cCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9leHAiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfZXhwCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKKworIworIyAgIGxpYmt2bQorIworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9yZWFkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX3JlYWQuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2t2bV9yZWFkX0xBR0VOVExJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExBR0VOVExJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fcmVhZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9yZWFkICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGt2bSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX3JlYWQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fcmVhZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19rdm1fcmVhZF9MQUdFTlRMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19rdm1fcmVhZF9MQUdFTlRMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2t2bV9yZWFkX0xBR0VOVExJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9yZWFkX0xBR0VOVExJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9yZWFkX0xBR0VOVExJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTEFHRU5UTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworIGZpCisKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fb3BlbmZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX29wZW5maWxlcy4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX29wZW5maWxlc19MQUdFTlRMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMQUdFTlRMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX29wZW5maWxlcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9vcGVuZmlsZXMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4ga3ZtIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrdm1fb3BlbmZpbGVzICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX29wZW5maWxlcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19rdm1fb3BlbmZpbGVzX0xBR0VOVExJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2t2bV9vcGVuZmlsZXNfTEFHRU5UTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19rdm1fb3BlbmZpbGVzX0xBR0VOVExJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9vcGVuZmlsZXNfTEFHRU5UTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX29wZW5maWxlc19MQUdFTlRMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExBR0VOVExJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyBmaQorCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX2dldHByb2NzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX2dldHByb2NzLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvY3NfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX2dldHByb2NzICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX2dldHByb2NzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGt2bSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX2dldHByb2NzICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX2dldHByb2NzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jc19MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2NzX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jc19MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2NzX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvY3NfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyBmaQorCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX2dldHByb2MyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX2dldHByb2MyLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvYzJfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX2dldHByb2MyICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX2dldHByb2MyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGt2bSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX2dldHByb2MyICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX2dldHByb2MyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jMl9MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2MyX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jMl9MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2MyX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvYzJfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyBmaQorCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX2dldHN3YXBpbmZvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX2dldHN3YXBpbmZvLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm9fTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX2dldHN3YXBpbmZvICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX2dldHN3YXBpbmZvICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGt2bSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX2dldHN3YXBpbmZvICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX2dldHN3YXBpbmZvICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRzd2FwaW5mb19MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRzd2FwaW5mb19MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm9fTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyBmaQorCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTEFHRU5UTElCUyAkTE1JQkxJQlMgJExJQlMiCitmb3IgYWNfZnVuYyBpbiBrdm1fb3BlbmZpbGVzIGt2bV9nZXRwcm9jcyBrdm1fZ2V0cHJvYzIga3ZtX2dldHN3YXBpbmZvCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorCisjCisjICAgZHluYW1pYyBtb2R1bGUgc3VwcG9ydAorIworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGRsb3BlbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGRsb3Blbi4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfZGxvcGVuX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICRMQUdFTlRMSUJTICRMU05NUExJQlMgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gZGwgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19kbG9wZW5fTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2Rsb3Blbl9MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19kbG9wZW5fTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2Rsb3Blbl9MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfZGxvcGVuX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCisgZmkKKworbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExNSUJMSUJTICRMQUdFTlRMSUJTICRMU05NUExJQlMgJExJQlMiCitmb3IgYWNfZnVuYyBpbiBkbG9wZW4KK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExPUEVOIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisKKyMgLSotIGF1dG9jb25mIC0qLQorIwogIyBnZW5lcmF0ZSBlbXB0eSBmaWxlcwogIwogIyBDcmVhdGUgaW5jbHVkZSBmaWxlIGxpc3QgZm9yIHNubXBfdmFycy5oIHRvIHVzZS4KQEAgLTI2MDgxLDExICsyMDQzMiwxMSBAQAogIwogIyBEbyBoYWlyeSBhZ2VudCBtb2R1bGUgcHJvY2Vzc2luZy4KICMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYW5kIGNvbmZpZ3VyaW5nIG1pYiBtb2R1bGVzIHRvIHVzZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhbmQgY29uZmlndXJpbmcgbWliIG1vZHVsZXMgdG8gdXNlLi4uICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYW5kIGNvbmZpZ3VyaW5nIG1pYiBtb2R1bGVzIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYW5kIGNvbmZpZ3VyaW5nIG1pYiBtb2R1bGVzIHRvIHVzZS4uLiAiID4mNjsgfQogCiAjIHNldCB1cCB0aGUgQ1BQIGNvbW1hbmQKLU1PRFVMRUNQUD0iJENQUCAkUEFSVElBTFRBUkdFVEZMQUdTIC1JJHtzcmNkaXJ9L2luY2x1ZGUgLUkke3NyY2Rpcn0vYWdlbnQvbWliZ3JvdXAiCitNT0RVTEVDUFA9IiRDUFAgJFBBUlRJQUxUQVJHRVRGTEFHUyAkQ1BQRkxBR1MgLURORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcgLUkke3NyY2Rpcn0vaW5jbHVkZSAtSSR7c3JjZGlyfS9hZ2VudC9taWJncm91cCIKIGlmIHRlc3QgIngkZW5hYmxlX21mZF9yZXdyaXRlcyIgPSAieHllcyI7IHRoZW4KICAgTU9EVUxFQ1BQPSIkTU9EVUxFQ1BQIC1ETkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTIgogZmkKQEAgLTI2MDkzLDggKzIwNDQ0LDggQEAKIG1vZHVsZV9saXN0PSIiCiBtaWJfbW9kdWxlX2xpc3Q9IiIKIGFnZW50X21vZHVsZV9saXN0PSIiCi1uZXdfd2l0aF9taWJfbW9kdWxlcz1gZWNobyAkd2l0aF9taWJfbW9kdWxlcyB8IHNlZCAncy8sLyAvZzsnYAotbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzPWBlY2hvICR3aXRoX291dF9taWJfbW9kdWxlcyB8IHNlZCAncy8sLyAvZzsnYAorbmV3X3dpdGhfbWliX21vZHVsZXM9YGVjaG8gJHdpdGhfbWliX21vZHVsZXMgfCAkU0VEICdzLywvIC9nOydgCituZXdfd2l0aF9vdXRfbWliX21vZHVsZXM9YGVjaG8gJHdpdGhfb3V0X21pYl9tb2R1bGVzIHwgJFNFRCAncy8sLyAvZzsnYAogCiAjIHNldCB1cCBpbml0aWFsIG1vZHVsZSBsaXN0CiBuZXdfbW9kdWxlX2xpc3Q9IiRuZXdfd2l0aF9taWJfbW9kdWxlcyBkZWZhdWx0X21vZHVsZXMiCkBAIC0yNjExNiwyNSArMjA0NjcsMjMgQEAKICMgcmVtb3ZlIG1vZHVsZXMgdGhhdCB3ZXJlIGV4cGxpY2l0bHkgZXhjbHVkZWQKIGZvciBpIGluICR0ZXN0X21vZHVsZXMKICBkbwotICBpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgogICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgaXMgYm90aCBpbmNsdWRlZCBhbmQgZXhjbHVkZWQuIgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pYiBtb2R1bGUgY29uZmxpY3QiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGNvbmZsaWN0IiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWliIG1vZHVsZSBjb25mbGljdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGNvbmZsaWN0IiA+JjI7fQogICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzZXIgd2l0aCAgICA6ICR3aXRoX21pYl9tb2R1bGVzIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdXNlciB3aXRoICAgIDogJHdpdGhfbWliX21vZHVsZXMiID4mMjt9Ci0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBmaW5hbCB3aXRoICAgOiAkbmV3X21vZHVsZV9saXN0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogZmluYWwgd2l0aCAgIDogJG5ld19tb2R1bGVfbGlzdCIgPiYyO30KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzZXIgd2l0aG91dCA6ICR3aXRoX291dF9taWJfbW9kdWxlcyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzZXIgd2l0aG91dCA6ICR3aXRoX291dF9taWJfbW9kdWxlcyIgPiYyO30KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGZpbmFsIHdpdGhvdXQ6ICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBmaW5hbCB3aXRob3V0OiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzIiA+JjI7fQotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJG1pYl9jZmdfbXNnIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRtaWJfY2ZnX21zZyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2VyIHdpdGggICAgOiAkd2l0aF9taWJfbW9kdWxlcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2VyIHdpdGggICAgOiAkd2l0aF9taWJfbW9kdWxlcyIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogZmluYWwgd2l0aCAgIDogJG5ld19tb2R1bGVfbGlzdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBmaW5hbCB3aXRoICAgOiAkbmV3X21vZHVsZV9saXN0IiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2VyIHdpdGhvdXQgOiAkd2l0aF9vdXRfbWliX21vZHVsZXMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNlciB3aXRob3V0IDogJHdpdGhfb3V0X21pYl9tb2R1bGVzIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBmaW5hbCB3aXRob3V0OiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGZpbmFsIHdpdGhvdXQ6ICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMiID4mMjt9CisgICAgICBhc19mbl9lcnJvciAkPyAiJG1pYl9jZmdfbXNnIiAiJExJTkVOTyIgNQogICAgIGVsc2UKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyBJdCB3aWxsIGJlIGV4Y2x1ZGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJG1pYl9jZmdfbXNnIEl0IHdpbGwgYmUgZXhjbHVkZWQiID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyBJdCB3aWxsIGJlIGV4Y2x1ZGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyBJdCB3aWxsIGJlIGV4Y2x1ZGVkIiA+JjI7fQogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnIEl0IGhhcyBiZWVuIGV4Y2x1ZGVkLgpAQCAtMjYxNDYsOCArMjA0OTUsMTAgQEAKICAgZmkKIGRvbmUKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG5ld19tb2R1bGVfbGlzdC4iID4mNQotZWNobyAiJHtFQ0hPX1R9JG5ld19tb2R1bGVfbGlzdC4iID4mNgorbmV3X21vZHVsZV9saXN0PWAoZWNobyAkbmV3X21vZHVsZV9saXN0IHwgdHIgJyAnICdcbicgfCBzb3J0IHwgdHIgJ1xuJyAnICc7IGVjaG8gJycpIHwgJFNFRCAncy8gJC8vJ2AKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXdfbW9kdWxlX2xpc3QuIiA+JjUKKyRhc19lY2hvICIkbmV3X21vZHVsZV9saXN0LiIgPiY2OyB9CiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgbG9vcCBvdmVyIG1vZHVsZSBsaXN0CkBAIC0yNjIxNiwxNCArMjA1NjcsMTQgQEAKIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAjIGZpZ3VyZSBvdXQgd2hpY2ggc3ViLWJsb2NrcyB0byBidWlsZCBpbiBwYXJ0cwotICAgIGlmIGVjaG8gIiRqIiB8IGdyZXAgIj0iIDsgdGhlbgorICAgIGlmIGVjaG8gIiRqIiB8ICRHUkVQICI9IiA7IHRoZW4KICAgICAgICAjIGJ1aWxkIGEgc2hhcmVkIG9iamVjdCBmaWxlCiAgICAgICAgIyBmb3JtYXQ6IHNvZmlsZW5hbWU9bW9kdWxlMTptb2R1bGUyCiAgICAgICAgIyBYWFg6IGN1cnJlbnRseSBkb2Vzbid0IGRvIHRoaXMKLSAgICAgICBkbF9uYW1lPWBlY2hvICRqIHwgc2VkICdzLz0uKi8vJ2AKKyAgICAgICBkbF9uYW1lPWBlY2hvICRqIHwgJFNFRCAncy89LiovLydgCiAgICAgICAgZGxfbmFtZXM9IiRkbF9uYW1lcyAkZGxfbmFtZSIKLSAgICAgICBkbF9vYmplY3RzPWBlY2hvICRqIHwgc2VkICdzLy4qPS8vJ2AKLSAgICAgICBtb2R1bGVfc3VibGlzdD1gZWNobyAkZGxfb2JqZWN0cyB8IHNlZCAncy86LyAvZydgCisgICAgICAgZGxfb2JqZWN0cz1gZWNobyAkaiB8ICRTRUQgJ3MvLio9Ly8nYAorICAgICAgIG1vZHVsZV9zdWJsaXN0PWBlY2hvICRkbF9vYmplY3RzIHwgJFNFRCAncy86LyAvZydgCiAgICAgICAgc2F2ZWRfc3VibGlzdD0iIgogICAgICAgIHNhdmVkX3N1Ymxpc3RfY29kZT0iIgogICAgICAgIG91dHB1dF90bz1zZXBhcmF0ZQpAQCAtMjYyNjMsMTEgKzIwNjE0LDggQEAKICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIyBidWlsZCBhIHBzZXVkbyBpbmNsdWRlIGhlYWRlciB0aGF0IGluY2x1ZGVzIGN1cnJlbnQgY29uZmlnIGFuZAogICAgICMgc3lzdGVtIHN5bWJvbHM6Ci0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaW5jbHVkZSBORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUKQEAgLTI2MjgxLDEwICsyMDYyOSwxMiBAQAogICAgICMgICAgIC0gbWliX21vZHVsZSAgID0+IGxpYm5ldHNubXBtaWJzICAgKGRlZmF1bHQpCiAgICAgIyAgICAgLSBhZ2VudF9tb2R1bGUgPT4gbGlibmV0c25tcGFnZW50CiAgICAgIworCiAgICAgbW9kdWxlX3R5cGU9bWliX21vZHVsZQogICAgIGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmg7IHRoZW4KIAotICAgICAgbW9kdWxlX3R5cGU9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2JlbG9uZ3NfaW4gfCBzZWQgJ3NALipjb25maWdfYmVsb25nc19pbihcKFteKV0qXCkpLipAXDFAJ2AKKyAgICAgIG1vZHVsZV90eXBlPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAgJFNFRCAtbiAnc0AuKmNvbmZpZ19iZWxvbmdzX2luKFwoW14pXSpcKSkuKkBcMUBwJ2AKIAogICAgIGZpCiAgICAgaWYgdGVzdCAieCRtb2R1bGVfdHlwZSIgPSAieCIgOyB0aGVuCkBAIC0yNjMwMSw3ICsyMDY1MSw3IEBACiAgICAgZGJsZml4PSIiCiAgICAgZm9yIGRsdGVzdCBpbiAkZGxfbmFtZXMgOyBkbwogICAgICAgZXZhbCBtb2RfZmlsZXM9IlwiXCRkbF8ke2RsdGVzdH1fZmlsZXNcIiIKLSAgICAgIGlmIGVjaG8gIiAkbW9kX2ZpbGVzICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgZWNobyAiICRtb2RfZmlsZXMgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAjIHNvbWUgZGxsIG1vZHVsZSBoYXMgYWxyZWFkeSBzZWVuIHRoaXMsIHVubG9hZCBpdCBmcm9tIHRoYXQgbGlzdAogICAgICAgICAjIGFuZCBpbmNsdWRlIGl0IGluIHRoZSBjb3JlIChhZ2FpbikKIApAQCAtMjYzMTAsNyArMjA2NjAsNyBAQAogICBmaQogCiAKLSAgICAgICAgbW9kX2ZpbGVzPWBlY2hvICIgJG1vZF9maWxlcyAiIHwgc2VkICJzQCAkaSBAQCJgCisgICAgICAgIG1vZF9maWxlcz1gZWNobyAiICRtb2RfZmlsZXMgIiB8ICRTRUQgInNAICRpIEBAImAKICAgICAgICAgZGJsZml4PSJfX1hYWF9fIgogICAgICAgICBldmFsICJkbF8ke2RsdGVzdH1fZmlsZXM9XCIkbW9kX2ZpbGVzXCIiCiAKQEAgLTI2MzMyLDcgKzIwNjgyLDcgQEAKIAkjIEFkZGluZyBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBvcmRlcmVkIHNwb3Qgd291bGQgYmUgYQogCSMgbmlnaHRtYXJlLiAgT2ssIHdlJ3JlIGFscmVhZHkgaW4gbmlnaHRtYXJlIGNvZGUgc28gdGhhdAogCSMgd29sdWQgaGF2ZSB0byBiZSBhIG5pZ2h0LXRlcnJvci4KLSAgICAgICAgbW5tPWBlY2hvICRpIHwgc2VkICdzLy4qXC8vLztzL1wuYyQvLzsnYAorICAgICAgICBtbm09YGVjaG8gJGkgfCAkU0VEICdzLy4qXC8vLztzL1wuYyQvLzsnYAogCW91dHB1dF9pbml0c190bXA9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5pdHMuaCIKIAllY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0c190bXAKICAgICAgICAgIyBYWFg6IGV2ZW4gd29yc2UsIHdlIGxvb3NlIHdoZXRoZXIgdGhlIGhlYWRlciBpcyBuZWVkZWQgb3Igbm90LgpAQCAtMjYzNTEsMTQgKzIwNzAxLDE0IEBACiAgIGZpCiAKIAotICAgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgZWxpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCiAKICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgogICAgIGVjaG8gIiRpIHdhcyBleGNsdWRlZCIKICAgZmkKIAogCi0gICAgZWxpZiBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGVsaWYgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCiAKICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgogICAgIGVjaG8gIiRpIGFscmVhZHkgdGVzdGVkIgpAQCAtMjYzODQsNyArMjA3MzQsOSBAQAogICAgICAgCSMKICAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGNvbmZsaWN0cwogICAgICAgICAjCi0JbmV3X2xpc3RfZXhjbD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfZXhjbHVkZSB8IHNlZCAncy8uKmNvbmZpZ19leGNsdWRlKFwoLipcKSkuKi9cMS8nYAorCisgICAgICAgIG5ld19saXN0X2V4Y2w9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19leGNsdWRlKFwoLipcKSkuKi9cMS9wJ2AKIAlpZiB0ZXN0ICJ4JG5ld19saXN0X2V4Y2wiICE9ICJ4IjsgdGhlbgogCiAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KQEAgLTI2Mzk0LDE3ICsyMDc0NiwxNSBAQAogCiAJICBmb3IgaiBpbiAkbmV3X2xpc3RfZXhjbAogCSAgICBkbwotCSAgICBpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbWliX21vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gIiB8IGdyZXAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19taWJfbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAiIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgZXhjbHVkZXMgbW9kdWxlICckaicgYnV0IGFub3RoZXIgbW9kdWxlIHJlcXVpcmVzIGl0IgotICAgICAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KKyAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9CiAgICAgICAgICAgICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KLQkgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRtaWJfY2ZnX21zZyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkbWliX2NmZ19tc2ciID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkbWliX2NmZ19tc2ciICIkTElORU5PIiA1CiAgICAgICAgICAgICAgIGVsc2UKLQkgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyIgPiYyO30KKwkgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJG1pYl9jZmdfbXNnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyIgPiYyO30KIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgICoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZwpAQCAtMjY0MzAsMTggKzIwNzgwLDIwIEBACiAgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcmVxdWlyZW1lbnRzCiAgICAgICAgICMKIAotICAgICAgICBuZXdfbGlzdF9hcmNoPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19hcmNoX3JlcXVpcmUgfCBzZWQgJ3MvLipjb25maWdfYXJjaF9yZXF1aXJlKCAqXChbXiBdKlwpICosICpcKFteIF0qXCkgKikuKi9cMS14YXJjaHgtXDIvJ2AKKworICAgICAgICBuZXdfbGlzdF9hcmNoPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfYXJjaF9yZXF1aXJlKCAqXChbXiBdKlwpICosICpcKFteIF0qXCkgKikuKi9cMS14YXJjaHgtXDIvcCdgCiAKIAlpZiB0ZXN0ICJ4JG5ld19saXN0X2FyY2giICE9ICJ4IjsgdGhlbgogICAgICAgICAgIGZvciBqIGluICRuZXdfbGlzdF9hcmNoCiAJICAgIGRvCi0JICAgIGFyY2h0ZXN0PWBlY2hvICRqIHwgc2VkICdzLy14YXJjaHgtLiovLydgCisJICAgIGFyY2h0ZXN0PWBlY2hvICRqIHwgJFNFRCAncy8teGFyY2h4LS4qLy8nYAogCSAgICAjIHRhcmdldF9vcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gYSAjZGVmaW5lIG9mIDEuLi4KIAkgICAgaWYgdGVzdCAieCRhcmNodGVzdCIgPSAieDEiIC1vICJ4JHRhcmdldF9vcyIgPSAieCRhcmNodGVzdCIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4JGFyY2h0ZXN0IjsgdGhlbgotCSAgICAgIG5ld19saXN0PSIkbmV3X2xpc3QgYGVjaG8gJGogfCBzZWQgJ3MvLioteGFyY2h4LS8vJ2AiCisJICAgICAgbmV3X2xpc3Q9IiRuZXdfbGlzdCBgZWNobyAkaiB8ICRTRUQgJ3MvLioteGFyY2h4LS8vJ2AiCiAKICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgotICAgIGVjaG8gIiAkaSByZXF1aXJlZCBhZGRpbmcgYXJjaCBmaWxlczogYGVjaG8gJGogfCBzZWQgJ3MvLioteGFyY2h4LS8vJ2AiCisgICAgZWNobyAiICRpIHJlcXVpcmVkIGFkZGluZyBhcmNoIGZpbGVzOiBgZWNobyAkaiB8ICRTRUQgJ3MvLioteGFyY2h4LS8vJ2AiCiAgIGZpCiAKIApAQCAtMjY0NTYsMTIgKzIwODA4LDU5IEBACiAKIAogICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAJIyBtYWNybzogY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgoYmFzZSwgdmVyc2lvbiwgdmVyc2lvbi1tb2R1bGVzLCAuLi4pKQorICAgICAgCSMgIC0gbGlzdHMgYWx0ZXJuYXRpdmUgbW9kdWxlcyB1c2VkIGZyb20gZGlmZmVyZW50IHZlcnNpb25zLgorICAgICAgICAjCisKKyAgICAgICAgbmV3X2xpc3RfYWx0Mz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgJEFXSyAnCisgICAgICAgICAgICAgICAgQkVHSU4geworICAgICAgICAgICAgICAgICAgICBpZigiJyIkZW5hYmxlX25ld19mZWF0dXJlcyInIiA9PSAieWVzIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0ibWF4IjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZigiJyIkZW5hYmxlX29sZF9mZWF0dXJlcyInIiA9PSAieWVzIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0ibWF4LWxlc3MiOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9Im1heC1sZXNzLWVxdWFsIjsKKyAgICAgICAgICAgICAgICAgICAgRlMgPSAiLiI7CisgICAgICAgICAgICAgICAgICAgIHNwbGl0KCInIiR3aXRoX2ZlYXR1cmVzX29mIiciLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1zcHJpbnRmKCIlMDNkJTAzZCUwM2QlMDNkIiwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC9jb25maWdfdmVyc2lvbl9yZXF1aXJlLyB7CisgICAgICAgICAgICAgICAgICAgIGdzdWIoIl4uKmNvbmZpZ192ZXJzaW9uX3JlcXVpcmUgKlxcXFwoXFxcXCgiLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGdzdWIoIlxcXFwpXFxcXCkuKiQiLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGdzdWIoIiwgKiIsICIsIik7CisgICAgICAgICAgICAgICAgICAgIEZTID0gIiwiOworICAgICAgICAgICAgICAgICAgICBuID0gc3BsaXQoJDAsIGEpOworICAgICAgICAgICAgICAgICAgICBGUyA9ICIuIjsKKyAgICAgICAgICAgICAgICAgICAgYWN0dmVyID0gIjAwMDAwMDAwMDAwMCI7CisgICAgICAgICAgICAgICAgICAgIGFjdHN0ciA9IGFbMV07CisgICAgICAgICAgICAgICAgICAgIGZvcihpID0gMjsgaSA8IG47IGkgKz0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXQoYVtpXSwgYik7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZXI9c3ByaW50ZigiJTAzZCUwM2QlMDNkJTAzZCIsIGJbMV0sIGJbMl0sIGJbM10sIGJbNF0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnZlciA+IGFjdHZlciAmJiAobWV0aG9kICE9ICJtYXgtbGVzcyIgfHwgY3VydmVyIDwgdmVyc2lvbikgJiYgKG1ldGhvZCAhPSAibWF4LWxlc3MtZXF1YWwiIHx8IGN1cnZlciA8PSB2ZXJzaW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHZlciA9IGN1cnZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RzdHIgPSBhW2kgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyIsIGFjdHN0cik7CisgICAgICAgICAgICAgICAgfSdgCisKKyAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgorICAgIGVjaG8gIiAkaSByZXF1aXJlZCB2ZXJzaW9uZWQgZmVhdHVyZXM6ICRuZXdfbGlzdF9hbHQzIgorICBmaQorCisKKyAgICAgICAgbmV3X2xpc3Q9IiR7bmV3X2xpc3R9JHtuZXdfbGlzdF9hbHQzfSIKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAJIyBtYWNybzogY29uZmlnX3JlcXVpcmUobW9kdWxlcykKICAgICAgIAkjICAtIGxpc3RzIG1vZHVsZXMgcmVxdWlyZWQgZm9yIHRoaXMgbW9kdWxlCiAgICAgICAgICMKICAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IG90aGVyIHJlcXVpcmVkIG1vZHVsZXMKICAgICAgICAgIwotCW5ld19saXN0PSIkbmV3X2xpc3QgYCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX3JlcXVpcmUgfCBzZWQgJ3MvLipjb25maWdfcmVxdWlyZShcKC4qXCkpLiovXDEvJ2AiCisKKyAgICAgICAgbmV3X2xpc3Q9IiRuZXdfbGlzdCBgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19yZXF1aXJlKFwoLipcKSkuKi9cMS9wJ2AiCiAKICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgogICAgIGVjaG8gIiAkaSB3aWxsIHRlc3Q6ICRuZXdfbGlzdCIKQEAgLTI2NDc4LDMwICsyMDg3NywyNiBAQAogCiAKIAkgICAgaWYgdGVzdCAhIC1mICRzcmNkaXIvJG1pYmRpci8kai5oIC1hICEgLWYgJHNyY2Rpci8kbWliZGlyLyRqLmM7IHRoZW4KLSAgICAgICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9Ci0JICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbWliIG1vZHVsZSBcIiRpXCIgcmVxdWlyZXMgbW9kdWxlIFwiJGpcIiBidXQgJGouaCBvciAkai5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbWliIG1vZHVsZSBcIiRpXCIgcmVxdWlyZXMgbW9kdWxlIFwiJGpcIiBidXQgJGouaCBvciAkai5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgICAgZWxpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgZ3JlcCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9CisJICAgICAgYXNfZm5fZXJyb3IgJD8gIm1pYiBtb2R1bGUgXCIkaVwiIHJlcXVpcmVzIG1vZHVsZSBcIiRqXCIgYnV0ICRqLmggb3IgJGouYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyIiAiJExJTkVOTyIgNQorCSAgICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgICBpZiB0ZXN0ICJ4JGkiICE9ICJ4ZGVmYXVsdF9tb2R1bGVzIiA7IHRoZW4KICAgICAgICAgICAgICAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIHJlcXVpcmVzIG1vZHVsZSAnJGonIGJ1dCBzb21lb25lIHRvbGQgbWUgdG8gY29tcGlsZSB3aXRob3V0IGl0IgotICAgICAgICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQogICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRtaWJfY2ZnX21zZyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkbWliX2NmZ19tc2ciID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkbWliX2NmZ19tc2ciICIkTElORU5PIiA1CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJG1pYl9jZmdfbXNnIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJG1pYl9jZmdfbXNnIiA+JjI7fQorICAgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkbWliX2NmZ19tc2ciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJG1pYl9jZmdfbXNnIiA+JjI7fQogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnCiBFT0YKIAogICAgICAgICAgICAgICAgIGZpCi0jCSAgICBlbGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAkbmV3X21vZHVsZV9saXN0ICIgfCBncmVwICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgorIwkgICAgZWxpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gJG5ld19tb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCiAjICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaiBpbmNsdWRlZCBwcmV2aW91c2x5IikKICAgICAgICAgICAgICAgZmkKIAkgICAgZWxzZQpAQCAtMjY1MjIsMTUgKzIwOTE3LDE3IEBACiAgICAgICAgICMKICAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IG1pYnMgdG8gYWRkCiAgICAgICAgICMKLQluZXdfbWlicz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfYWRkX21pYiB8IHNlZCAncy8uKmNvbmZpZ19hZGRfbWliKFwoLipcKSkuKi9cMS8nYAorCisgICAgICAgIG5ld19taWJzPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX2FkZF9taWIoXCguKlwpKS4qL1wxL3AnYAogCWlmIHRlc3QgIngkbmV3X21pYnMiICE9ICJ4IjsgdGhlbgogCSAgICBmb3IgaiBpbiAkbmV3X21pYnMKIAkJZG8KLQkJaWYgdGVzdCAieGBlY2hvIDokZGVmYXVsdF9taWJzOiB8IGdyZXAgOiRqOmAiID0gIngiOyB0aGVuCisJCWlmIHRlc3QgInhgZWNobyA6JGRlZmF1bHRfbWliczogfCAkR1JFUCA6JGo6YCIgPSAieCI7IHRoZW4KIAkJICAgIGRlZmF1bHRfbWlicz0iJGRlZmF1bHRfbWliczokaiIKIAkJZmkKIAkJaWYgdGVzdCAtZiAkc3JjZGlyL21pYnMvJGoudHh0OyB0aGVuCi0JCSAgICBpZiBlY2hvICRkZWZhdWx0X21pYnNfaW5zdGFsbCB8IGdyZXAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICBpZiBlY2hvICRkZWZhdWx0X21pYnNfaW5zdGFsbCB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgogCQkJICAgIDoKIAkJICAgIGVsc2UKIAkJCSAgICBkZWZhdWx0X21pYnNfaW5zdGFsbD0iJGRlZmF1bHRfbWlic19pbnN0YWxsICRqLnR4dCIKQEAgLTI2NTYzLDExICsyMDk2MCwxMSBAQAogICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAjIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBjb25maWdfbG9hZF9taWIKICAgICAgICAgIwotICAgICAgICBpZiAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19sb2FkX21pYiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9Ci0gICAgICAJICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaWIgbW9kdWxlIFwiJGlcIiB1c2VzIHRoZSBcImNvbmZpZ19sb2FkX21pYlwiIGRpcmVjdGl2ZSwgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIEl0IHByb2JhYmx5IHdvbid0IHdvcmsuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBcIiRpXCIgdXNlcyB0aGUgXCJjb25maWdfbG9hZF9taWJcIiBkaXJlY3RpdmUsIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBJdCBwcm9iYWJseSB3b24ndCB3b3JrLiIgPiYyO30KKyAgICAgICAgaWYgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgJEdSRVAgLXEgY29uZmlnX2xvYWRfbWliOyB0aGVuCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9CisgICAgICAJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG1pYiBtb2R1bGUgXCIkaVwiIHVzZXMgdGhlIFwiY29uZmlnX2xvYWRfbWliXCIgZGlyZWN0aXZlLCB3aGljaCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgSXQgcHJvYmFibHkgd29uJ3Qgd29yay4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBcIiRpXCIgdXNlcyB0aGUgXCJjb25maWdfbG9hZF9taWJcIiBkaXJlY3RpdmUsIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBJdCBwcm9iYWJseSB3b24ndCB3b3JrLiIgPiYyO30KICAgICAgICAgZmkgIyBncmVwIGNvbmZpZ19sb2FkX21pYgogCiAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNjU3NSw3ICsyMDk3Miw5IEBACiAgICAgICAgICMgIChnZW5lcmFsbHkgbm90IHVzZWQgYW55IGxvbmdlcjsgb2xkIGF1dG8tbG9hZCBhIC5jb25mIHRva2VuKQogICAgICAgICAjCiAKLSAgICAgICAgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfcGFyc2VfZG90X2NvbmYgfCBzZWQgJ3NALipjb25maWdfcGFyc2VfZG90X2NvbmYoXChbXildKlwpLCAqXChbXiksXSpcKSwgKlwoW14pLF0qXCksICpcKFteKSxdKlwpKS4qQHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wZCIsXDEsIFwyLCBcMywgXDQpO0AnID4+ICRtaWJkaXIvbWliX21vZHVsZV9kb3RfY29uZi5oCisKKyAgICAgICAgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAkU0VEIC1uICdzQC4qY29uZmlnX3BhcnNlX2RvdF9jb25mKFwoW14pXSpcKSwgKlwoW14pLF0qXCksICpcKFteKSxdKlwpLCAqXChbXiksXSpcKSkuKkByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcGQiLFwxLCBcMiwgXDMsIFw0KTtAcCcgPj4gJG1pYmRpci9taWJfbW9kdWxlX2RvdF9jb25mLmgKIAogCiAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI2NTg0LDIwICsyMDk4MywyMiBAQAogICAgICAgICAjCiAgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBlcnJvcnMsIG9yIHdhcm5pbmdzCiAgICAgICAgICMKLQllcnJvcj1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfZXJyb3IgfCBzZWQgJ3MvLipjb25maWdfZXJyb3IoXCguKlwpKS4qL1wxLydgCisKKyAgICAgICAgZXJyb3I9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfZXJyb3IoXCguKlwpKS4qL1wxL3AnYAogCWlmIHRlc3QgIngkZXJyb3IiICE9ICJ4IjsgdGhlbgogICAgICAgICAgIGVjaG8KICAgICAgICAgICBlY2hvCi0gICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJGk6ICoqKiAkZXJyb3IgKioqIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRpOiAqKiogJGVycm9yICoqKiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkaTogKioqICRlcnJvciAqKioiICIkTElORU5PIiA1CiAgICAgICAgIGZpCiAKICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgCSMgbWFjcm86IGNvbmZpZ193YXJuaW5nKHdhcm5pbmcgdGV4dCkKICAgICAgIAkjICAtIHVzZWQgdG8gc2lnbmFsIGEgY29uZmlndXJhdGlvbiAid2FybmluZyIgdG8gYmUgcHJpbnRlZCB0byB0aGUgdXNlcgogICAgICAgICAjCi0Jd2FybmluZz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfd2FybmluZyB8IHNlZCAncy8uKmNvbmZpZ193YXJuaW5nKFwoLipcKSkuKi9cMS8nYAorCisgICAgICAgIHdhcm5pbmc9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ193YXJuaW5nKFwoLipcKSkuKi9cMS9wJ2AKIAlpZiB0ZXN0ICJ4JHdhcm5pbmciICE9ICJ4IjsgdGhlbgogICAgICAgICAgIGFsbF93YXJuaW5ncz0iJGFsbF93YXJuaW5ncyAkd2FybmluZwogIgpAQCAtMjY2MDcsNyArMjEwMDgsNyBAQAogICAgICAgIyBDaGVjayBmb3IgYSAuYyBmaWxlIGlmIHRoZSAuaCBkaWRuJ3QgZXhpc3QKICAgICAgICMKICAgICAgIGVsaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuYzsgdGhlbgotICAgICAgICBpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gJG5ld19tb2R1bGVfbGlzdCAiIHwgZ3JlcCAiICRpICAgICAgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gJG5ld19tb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiAkaSAgICAgICIgPiAvZGV2L251bGw7IHRoZW4KIAogICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCiAgICAgZWNobyAiICAkaSBhbHJlYWR5IGluY2x1ZGVkIgpAQCAtMjY2MjksMTEgKzIxMDMwLDkgQEAKICAgICAgICMgTm8gLmggb3IgLmMgPSBlcnJvciEgICh0eXBvPykKICAgICAgICMKICAgICAgIGVsc2UgIyBubyAkaS5oIG9yICRpLmMKLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9Ci0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbW9kdWxlIGZpbGVzICRpLmggb3IgJGkuYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG1vZHVsZSBmaWxlcyAkaS5oIG9yICRpLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpciIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KKwlhc19mbl9lcnJvciAkPyAibW9kdWxlIGZpbGVzICRpLmggb3IgJGkuYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyIiAiJExJTkVOTyIgNQogICAgICAgZmkgIyBubyAkaS5oCiAKICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNjY1MCw3ICsyMTA0OSw3IEBACiAgICAgICAgICAgZXZhbCAiZGxfJHtkbF9uYW1lfV9maWxlcz1cIlwkZGxfJHtkbF9uYW1lfV9maWxlcyAkaVwiIgogICAgICAgICAgIHNhdmVkX3N1Ymxpc3RfY29kZT0iJHNhdmVkX3N1Ymxpc3RfY29kZSAkaSIKICAgICAgICAgZmkKLSAgICAgICAgbW5tPWBlY2hvICRpIHwgc2VkICdzLy4qXC8vLztzL1wuYyQvLzsnYAorICAgICAgICBtbm09YGVjaG8gJGkgfCAkU0VEICdzLy4qXC8vLztzL1wuYyQvLzsnYAogCiAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KICAgICBlY2hvIC1lICJcbmNoZWNraW5nICckc3JjZGlyLyRtaWJkaXIvJGkuYycgKCRtbm0vYGJhc2VuYW1lICRpYCkgQyBmaWxlIGZvciBpbml0L3NodXRkb3duIgpAQCAtMjY2NTgsMTMgKzIxMDU3LDExIEBACiAKIAogICAgICAgICBpZiB0ZXN0ICJ4JG1ubSIgIT0gInhgYmFzZW5hbWUgJGlgIjsgdGhlbgotICAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25mbGljdGluZyBuYW1lczogJG1ubSAhPSBcYGJhc2VuYW1lICRpXGAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZmxpY3RpbmcgbmFtZXM6ICRtbm0gIT0gXGBiYXNlbmFtZSAkaVxgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQorCSAgIGFzX2ZuX2Vycm9yICQ/ICJjb25mbGljdGluZyBuYW1lczogJG1ubSAhPSBcYGJhc2VuYW1lICRpXGAiICIkTElORU5PIiA1CiAgICAgICAgIGZpCi0gICAgICAgIHRlbXBfaW5pdD1gZ3JlcCBpbml0XyRtbm0gJHNyY2Rpci8kbWliZGlyLyRpLmMgfCBncmVwIC12IF9pbml0XyRtbm1gCisgICAgICAgIHRlbXBfaW5pdD1gJEdSRVAgaW5pdF8kbW5tICRzcmNkaXIvJG1pYmRpci8kaS5jIHwgJEdSRVAgLXYgX2luaXRfJG1ubWAKIAlpZiB0ZXN0ICJ4JHRlbXBfaW5pdCIgIT0gIngiOyB0aGVuCiAKICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgpAQCAtMjY2NzUsNyArMjEwNzIsNyBAQAogICAgICAgICAgICAgbmVlZF9oZWFkZXI9MQogCSAgICBlY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0cwogCWZpCi0JZ3JlcCBzaHV0ZG93bl8kbW5tICRzcmNkaXIvJG1pYmRpci8kaS5jID4gL2Rldi9udWxsCisJJEdSRVAgc2h1dGRvd25fJG1ubSAkc3JjZGlyLyRtaWJkaXIvJGkuYyA+IC9kZXYvbnVsbAogICAgICAgICBpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgogICAgICAgICAgICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnIC1lcSAxOyB0aGVuCiAgICAgICAgICAgICAgIGVjaG8gLWUgIlxuYWRkaW5nIHNodXRkb3duXyRtbm0oKSB0byBsaXN0IgpAQCAtMjY2OTgsOCArMjEwOTUsOCBAQAogICAgICAgIyBjaGVjayBmb3Igb3V0cHV0IGRpcmVjdG9yeSAoZm9yIGJ1aWxkaW5nIG91dHNpZGUgb2Ygc291cmNlIHRyZWUKICAgICAgICMKIAotICAgICAgaWYgdGVzdCAieGBlY2hvICRpIHwgc2VkICdzL1wvLy9nOydgIiAhPSAieCRpIjsgdGhlbgotCW1uZD1gZWNobyAkaSB8IHNlZCAncy9cL1teL10qJC8vOydgCisgICAgICBpZiB0ZXN0ICJ4YGVjaG8gJGkgfCAkU0VEICdzL1wvLy9nOydgIiAhPSAieCRpIjsgdGhlbgorCW1uZD1gZWNobyAkaSB8ICRTRUQgJ3MvXC9bXi9dKiQvLzsnYAogCWlmIHRlc3QgISAtZCAuLyRtaWJkaXIvJG1uZDsgdGhlbgogCSAgICBtb2R1bGVfZGlyZWN0b3JpZXM9IiRtb2R1bGVfZGlyZWN0b3JpZXMgLi8kbWliZGlyLyRtbmQiCiAJZmkKQEAgLTI2NzEwLDcgKzIxMTA3LDcgQEAKICAgICAgICMgZGVmaW5lIFVTSU5HXypfTU9EVUxFCiAgICAgICAjCiAKLSAgICAgIHN5bT0iYGVjaG8gJHtpfSB8IHNlZCAncy9bXmEtekEtWjAtOV9dL18vZycgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgIgorICAgICAgc3ltPSJgZWNobyAke2l9IHwgJFNFRCAncy9bXmEtekEtWjAtOV9dL18vZycgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgIgogCiAgICAgICBlY2hvICIvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlICR7aX0gbW9kdWxlIGZpbGVzLiAgKi8iID4+IGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvJHttb2R1bGVfdHlwZX1fY29uZmlnLmgKICAgICAgIGVjaG8gIiNkZWZpbmUgVVNJTkdfJHtzeW19X01PRFVMRSAxIiA+PiBpbmNsdWRlL25ldC1zbm1wL2FnZW50LyR7bW9kdWxlX3R5cGV9X2NvbmZpZy5oCkBAIC0yNjc4MiwxMiArMjExNzksMTAgQEAKIAogICBmb3Igb2ZpbGUgaW4gJG91dHB1dF9pbml0cyAkb3V0cHV0X2hkcnMgOyBkbwogICAgIGlmIHRlc3QgLWYgJG9maWxlIDsgdGhlbgotICAgICAgaWYgZ3JlcCAidGhpcyBmaWxlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUiICRvZmlsZSA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgaWYgJEdSRVAgInRoaXMgZmlsZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlIiAkb2ZpbGUgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KICAgCToKICAgICAgIGVsc2UKLSAgCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRvZmlsZSBhbHJlYWR5IGV4aXN0ZWQgOyBjYW4ndCBidWlsZCBkbGwgb2JqZWN0ICRpIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRvZmlsZSBhbHJlYWR5IGV4aXN0ZWQgOyBjYW4ndCBidWlsZCBkbGwgb2JqZWN0ICRpIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIAlhc19mbl9lcnJvciAkPyAiJG9maWxlIGFscmVhZHkgZXhpc3RlZCA7IGNhbid0IGJ1aWxkIGRsbCBvYmplY3QgJGkiICIkTElORU5PIiA1CiAgICAgICBmaQogICAgIGZpCiAgICAgY2F0ID4gJG9maWxlIDw8IEVPRklGCkBAIC0yNjgwNSw3ICsyMTIwMCw3IEBACiBFT0ZPQwogCiAgICMgY3JlYXRlIHRoZSAuc28gcnVsZQotICBzYXZlZF9zdWJsaXN0X289YGVjaG8gIiRtb2RfZmlsZXMgIiB8IHNlZCAncy9eICovL2c7cy8gICovLm8gL2c7J2AKKyAgc2F2ZWRfc3VibGlzdF9vPWBlY2hvICIkbW9kX2ZpbGVzICIgfCAkU0VEICdzL14gKi8vZztzLyAgKi8ubyAvZzsnYAogCiAgICMgY3JlYXRlIHRoZSBydWxlcyBmb3IgZWFjaCBvYmplY3QKICAgZm9yIGogaW4gJG1vZF9maWxlcyA7IGRvCkBAIC0yNjgxNCw3ICsyMTIwOSw3IEBACiAJXCQoQ0MpIC1jIFwkKENQUEZMQUdTKSBcJChDRkxBR1MpIFwkKERMRkxBR1MpIC1vIFwkQCBcJDwKIAogRU9GUgotICAgIG1ubT1gZWNobyAkaiB8IHNlZCAncy8uKlwvLy87cy9cLmMkLy87J2AKKyAgICBtbm09YGVjaG8gJGogfCAkU0VEICdzLy4qXC8vLztzL1wuYyQvLzsnYAogICAgIGVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzCiAgIGRvbmUKIApAQCAtMjY4MzQsNDEgKzIxMjI5LDQ2IEBACiBkb25lCiAKICMgY2xlYW51cAotcm0gLWYgbW9kdWxlX3RtcF9oZWFkZXIuaAorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tCiAjIGJ1aWxkIG1vZHVsZSBsaXN0cyBmb3IgTWFrZWZpbGVzCiAjCiAKIAotZm9yIGkgaW4gbW9kdWxlX2xpc3RfbyBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9sbyBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9vIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIDsgZG8KK2ZvciBpIGluIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9sbyBtb2R1bGVfbGlzdF9mdCBtaWJfbW9kdWxlX2xpc3RfbyBtaWJfbW9kdWxlX2xpc3RfYyBtaWJfbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X2Z0IG1pYmdyb3VwX2xpc3RfbyBtaWJncm91cF9saXN0X2xvIG1pYmdyb3VwX2xpc3RfZnQgYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X2Z0IGFnZW50Z3JvdXBfbGlzdF9vIGFnZW50Z3JvdXBfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfZnQgOyBkbwogICBldmFsICIkaT1tay8ke2l9Lm1rIgogZG9uZQogCi1zZWQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X28KLXNlZCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfYwotc2VkICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X28KKyRTRUQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2MKKyRTRUQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9sbworJFNFRCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9mdC87cy9cKFtePV1cKSAgKlxcL1wxLmZ0IFxcL2cnIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2Z0CiAKLXNlZCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X28KLXNlZCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2MKLXNlZCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9sbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X28KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9jCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2xvCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfZnQvO3MvXChbXj1dXCkgICpcXC9cMS5mdCBcXC9nJyA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2Z0CiAKLXNlZCAncy9ebWliX21vZHVsZV9saXN0X28vbWliZ3JvdXBfbGlzdF9vLztzQFwoW14gCV0qXClcLm9AbWliZ3JvdXAvXDEub0BnJyA8ICRtaWJfbW9kdWxlX2xpc3RfbyA+ICRtaWJncm91cF9saXN0X28KLXNlZCAncy9ebWliX21vZHVsZV9saXN0X2xvL21pYmdyb3VwX2xpc3RfbG8vO3NAXChbXiAJXSpcKVwubG9AbWliZ3JvdXAvXDEubG9AZycgPCAkbWliX21vZHVsZV9saXN0X2xvID4gJG1pYmdyb3VwX2xpc3RfbG8KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9vL21pYmdyb3VwX2xpc3Rfby87c0BcKFteIAldKlwpXC5vQG1pYmdyb3VwL1wxLm9AZycgPCAkbWliX21vZHVsZV9saXN0X28gPiAkbWliZ3JvdXBfbGlzdF9vCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfbG8vbWliZ3JvdXBfbGlzdF9sby87c0BcKFteIAldKlwpXC5sb0BtaWJncm91cC9cMS5sb0BnJyA8ICRtaWJfbW9kdWxlX2xpc3RfbG8gPiAkbWliZ3JvdXBfbGlzdF9sbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2Z0L21pYmdyb3VwX2xpc3RfZnQvO3NAXChbXiAJXSpcKVwuZnRAbWliZ3JvdXAvXDEuZnRAZycgPCAkbWliX21vZHVsZV9saXN0X2Z0ID4gJG1pYmdyb3VwX2xpc3RfZnQKIAotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9vCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2MKLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2xvCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9vCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9jCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfZnQvO3MvXChbXj1dXCkgICpcXC9cMS5mdCBcXC9nJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9mdAogCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X28vYWdlbnRncm91cF9saXN0X28vO3NAXChbXiAJXSpcKVwub0BtaWJncm91cC9cMS5vQGcnIDwgJGFnZW50X21vZHVsZV9saXN0X28gPiAkYWdlbnRncm91cF9saXN0X28KLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfbG8vYWdlbnRncm91cF9saXN0X2xvLztzQFwoW14gCV0qXClcLmxvQG1pYmdyb3VwL1wxLmxvQGcnIDwgJGFnZW50X21vZHVsZV9saXN0X2xvID4gJGFnZW50Z3JvdXBfbGlzdF9sbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3Rfby9hZ2VudGdyb3VwX2xpc3Rfby87c0BcKFteIAldKlwpXC5vQG1pYmdyb3VwL1wxLm9AZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfbyA+ICRhZ2VudGdyb3VwX2xpc3RfbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfbG8vYWdlbnRncm91cF9saXN0X2xvLztzQFwoW14gCV0qXClcLmxvQG1pYmdyb3VwL1wxLmxvQGcnIDwgJGFnZW50X21vZHVsZV9saXN0X2xvID4gJGFnZW50Z3JvdXBfbGlzdF9sbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfZnQvYWdlbnRncm91cF9saXN0X2Z0LztzQFwoW14gCV0qXClcLmZ0QG1pYmdyb3VwL1wxLmZ0QGcnIDwgJGFnZW50X21vZHVsZV9saXN0X2Z0ID4gJGFnZW50Z3JvdXBfbGlzdF9mdAogCi1mb3IgaSBpbiBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2MgbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X2xvIG1pYmdyb3VwX2xpc3RfbyBtaWJncm91cF9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfYyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gOyBkbworZm9yIGkgaW4gbW9kdWxlX2xpc3RfbyBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X2xvIG1vZHVsZV9saXN0X2Z0IG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9sbyBtaWJfbW9kdWxlX2xpc3RfZnQgbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9mdCBhZ2VudF9tb2R1bGVfbGlzdF9vIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3RfZnQgYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIGFnZW50Z3JvdXBfbGlzdF9mdCA7IGRvCiAJIyBocHV4IG1ha2UgKGF0IGxlYXN0KSBkb2Vzbid0IGxpa2UgYSB0cmFpbGluZyBcIG9uIHRoZSBsYXN0CiAJIyBsaW5lIGV2ZW4gd2hlbiB0aGUgbmV4dCBsaW5lIGNvbnRhaW5zIG5vdGhpbmcgYnV0CiAJIyB3aGl0ZXNwYWNlLgotCWxhc3R0b2tlbj1gdGFpbCAtMSBtay8kaS5tayB8IGF3ayAne3ByaW50ICQxfSdgCi0Jc2VkICJzIyRsYXN0dG9rZW4gXFxcXCMkbGFzdHRva2VuIyIgPCBtay8kaS5tayA+IG1rLyRpLm1rLnRtcAorCWxhc3R0b2tlbj1gYXdrICd7bGFzdHRva2VuPSQxfUVORHtwcmludCBsYXN0dG9rZW59JyBtay8kaS5ta2AKKwkkU0VEICJzIyRsYXN0dG9rZW4gXFxcXCMkbGFzdHRva2VuIyIgPCBtay8kaS5tayA+IG1rLyRpLm1rLnRtcAogCW12IG1rLyRpLm1rLnRtcCBtay8kaS5tawogCiAJIyBhZGQgYSBjbG9zaW5nIGNvbW1lbnQKQEAgLTI2OTA1LDggKzIxMzA1LDYgQEAKIAogCiAKLSNBQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdCkKLSNBQ19TVUJTVChtb2R1bGVfbGlzdCkKIAogCiAKQEAgLTI2OTE0LDggKzIxMzEyLDEyIEBACiAKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAuIiA+JjUKLWVjaG8gIiR7RUNIT19UfS4iID4mNgorCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogLiIgPiY1CiskYXNfZWNobyAiLiIgPiY2OyB9CiAKIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyAtZXEgMTsgdGhlbgogCkBAIC0yNjkzMiw0NzggKzIxMzM0LDMxMCBAQAogCiAjIGVuZCBoYWlyeSBhZ2VudCBtb2R1bGUgcHJvY2Vzc2luZwogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgZGlyZWN0b3JpZXMgbmVlZCB0byBiZSBjcmVhdGVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgZGlyZWN0b3JpZXMgbmVlZCB0byBiZSBjcmVhdGVkLi4uICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBkaXJlY3RvcmllcyBuZWVkIHRvIGJlIGNyZWF0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZGlyZWN0b3JpZXMgbmVlZCB0byBiZSBjcmVhdGVkLi4uICIgPiY2OyB9CiBmb3IgaSBpbiAkbW9kdWxlX2RpcmVjdG9yaWVzOyBkbwogICAkc3JjZGlyL21raW5zdGFsbGRpcnMgJGkKIGRvbmUKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IC4iID4mNQotZWNobyAiJHtFQ0hPX1R9LiIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogLiIgPiY1CiskYXNfZWNobyAiLiIgPiY2OyB9CiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tCiAjIERlZmluZSBkZWZhdWx0IG1pYnMKICMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZWZhdWx0IG1pYiBmaWxlcyB0byByZWFkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVmYXVsdCBtaWIgZmlsZXMgdG8gcmVhZC4uLiAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVmYXVsdCBtaWIgZmlsZXMgdG8gcmVhZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZWZhdWx0IG1pYiBmaWxlcyB0byByZWFkLi4uICIgPiY2OyB9CiBpZiB0ZXN0ICJ4JE5FVFNOTVBfREVGQVVMVF9NSUJTIiA9ICJ4IjsgdGhlbgogICBORVRTTk1QX0RFRkFVTFRfTUlCUz0iJGRlZmF1bHRfbWlicyIKIGZpCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gICMgbWluZ3czMiBhbmQgY3lnd2luIHVzZSAnOycgYXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHNlcGFyYXRvciBjaGFyCitpZiB0ZXN0ICJ4JEVOVl9TRVBBUkFUT1IiICE9ICJ4IjsgdGhlbgorICA6CitlbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KKyAgIyBtaW5ndzMyIGFuZCBjeWd3aW4gdXNlICc7JyBhcyB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXBhcmF0b3IKICAgRU5WX1NFUEFSQVRPUj0iOyIKLSAgTkVUU05NUF9ERUZBVUxUX01JQlM9YGVjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCUyIgfCBzZWQgJ3MvOi87L2cnYAotICBkZWZhdWx0X21pYnM9YGVjaG8gIiRkZWZhdWx0X21pYnMiIHwgc2VkICdzLzovOy9nJ2AKKyAgTkVUU05NUF9ERUZBVUxUX01JQlM9YGVjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCUyIgfCAkU0VEICdzLzovOy9nJ2AKKyAgZGVmYXVsdF9taWJzPWBlY2hvICIkZGVmYXVsdF9taWJzIiB8ICRTRUQgJ3MvOi87L2cnYAogZWxzZQogICBFTlZfU0VQQVJBVE9SPSI6IgogZmkKIAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEVOVl9TRVBBUkFUT1IgIiRFTlZfU0VQQVJBVE9SIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBFTlZfU0VQQVJBVE9SX0NIQVIgJyRFTlZfU0VQQVJBVE9SJworX0FDRU9GCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQlMgIiRORVRTTk1QX0RFRkFVTFRfTUlCUyIKIF9BQ0VPRgogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRORVRTTk1QX0RFRkFVTFRfTUlCUyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTkVUU05NUF9ERUZBVUxUX01JQlMiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRORVRTTk1QX0RFRkFVTFRfTUlCUyIgPiY1CiskYXNfZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJTIiA+JjY7IH0KIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgaGF2ZSB0byBidWlsZCBQSUMgY29kZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgaGF2ZSB0byBidWlsZCBQSUMgY29kZS4uLiAkRUNIT19DIiA+JjYKLWVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiB1Y2Qtc25tcC9kbG1vZCAiID4vZGV2L251bGwKKyMtLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBzeW1ib2xzIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbiBtYWtlZmlsZXMKKyMKKworaWYgZWNobyAiICRhZ2VudF9tb2R1bGVfbGlzdCAiIHwgXAorICAgZmdyZXAgJyBhZ2VudHgvYWdlbnR4X2NvbmZpZyAnIHwgXAorICAgZmdyZXAgJyBhZ2VudHgvY2xpZW50ICcgfCBcCisgICBmZ3JlcCAnIGFnZW50eC9wcm90b2NvbCAnID4gL2Rldi9udWxsIDsgdGhlbgorICAgTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUU9JycKKyAgIE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19GQUxTRT0nIycKK2Vsc2UKKyAgIE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19UUlVFPScjJworICAgTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFPScnCitmaQorCisKKworIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgTWlzY2VsbGFuZW91cyBjaGVja3MKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIENvbXBpbGF0aW9uLXJlbGF0ZWQKKyMjCisKKyMgICAgICAgRHluYW1pYyBtb2R1bGVzIHJlcXVpcmUgUG9zaXRpb24tSW5kZXBlbmRlbnQgQ29kZQorIwkgICAgTElCX0NGTEFHUy9ETExJQlM6IHVzZWQgaW4gYWdlbnQgTWFrZWZpbGUgb25seQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGhhdmUgdG8gYnVpbGQgUElDIGNvZGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBoYXZlIHRvIGJ1aWxkIFBJQyBjb2RlLi4uICIgPiY2OyB9CitlY2hvICIgJG1vZHVsZV9saXN0ICIgfCAkR1JFUCAiIHVjZC1zbm1wL2RsbW9kICIgPi9kZXYvbnVsbAogaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KLSAgICAgICAgTElCX0NGTEFHUz0iJExJQl9DRkxBR1MgJFNITElCX0NGTEFHUyIKLQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgICBMSUJfQ0ZMQUdTPSIkTElCX0NGTEFHUyAkU0hMSUJfQ0ZMQUdTIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCi0JRExMSUJTPSIiCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICAgIERMTElCUz0iIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGxpYnJhcmllcyB0aGF0IGFyZSBydW4KKyMgYWZ0ZXIgdGhlIGFnZW50IG1vZHVsZSB0ZXN0cy4KKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICAgSEFWRV9MSUIgRGVmaW5pdGlvbnMgdXNlZCBpbiB0aGUgTmV0LVNOTVAgY29kZSBiYXNlOgogIwotIyBDaGVjayBmb3Iga2VybmVsIGxvY2F0aW9uCisjICAgICAgIEhBVkVfTElCQ1JZUFRPOglhcHBzCisjICAgICAgIEhBVkVfTElCUlBNOglhZ2VudAogIwogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHN5c3RlbSBrZXJuZWwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbG9jYXRpb24gb2Ygc3lzdGVtIGtlcm5lbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfS0VSTkVMX0xPQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9LRVJORUxfTE9DPSJ1bmtub3duIgotIyBGaXJzdCBkZXRlcm1pbmUgaWYgdGVzdCBleHBlY3RzIGEgLWYgb3IgYSAtYyAoY2hhcmFjdGVyIGRldmljZSAoU1lTVikpCisjIworIyAgIFNpbXBsZSBjaGVja3M6CisjIwogCi1pZiB0ZXN0IC1jIC9kZXYvbnVsbDsgdGhlbgotICBDRkxBRz0iLWMiCi1lbGlmIHRlc3QgLWYgL2Rldi9udWxsOyB0aGVuCi0gIENGTEFHPSItZiIKLWVsc2UKLSAgIyBmYWxsIGJhY2sKLSAgQ0ZMQUc9Ii1mIgotZmkKLWZvciBpIGluIC92bXVuaXggL2hwLXV4IC9zdGFuZC92bXVuaXggL2Rldi9rc3ltcyAva2VybmVsL3VuaXggL2tlcm5lbC9nZW51bml4IC9uZXRic2QgL3VuaXggL2tlcm5lbCAvYnNkIC9tYWNoX2tlcm5lbCAvYm9vdC9rZXJuZWwva2VybmVsCi0gIGRvCi0gIGlmIHRlc3QgLWYgJGkgLW8gJENGTEFHICRpOyB0aGVuCi0gICAgYWNfY3ZfS0VSTkVMX0xPQz0iJGkiCi0gICAgYnJlYWs7CisjIEFDX0NIRUNLX0xJQihkZXMsIG1haW4pCisjIEFDX0NIRUNLX0xJQihtLCAgIGFzaW4pCisKKyMgICBkbWFsbG9jCisjCitpZiB0ZXN0ICIke3dpdGhfZG1hbGxvYytzZXR9IiA9IHNldDsgdGhlbgorICAgaWYgdGVzdCAiJHdpdGhfZG1hbGxvYyIgPSB5ZXMgLWEgLWQgJHdpdGhfZG1hbGxvYyA7IHRoZW4KKworICBpZiB0ZXN0ICJ4JHdpdGhfZG1hbGxvYyIgIT0geCAtYSAtZCAkd2l0aF9kbWFsbG9jOyB0aGVuCisgICAgIGlmIHRlc3QgLWQgJHdpdGhfZG1hbGxvYy9saWI7IHRoZW4KKyAgICAgICBMREZMQUdTPSItTCR3aXRoX2RtYWxsb2MvbGliICRMREZMQUdTIgorICAgICBmaQorICAgICBpZiB0ZXN0IC1kICR3aXRoX2RtYWxsb2MvaW5jbHVkZTsgdGhlbgorCUNQUEZMQUdTPSItSSR3aXRoX2RtYWxsb2MvaW5jbHVkZSAkQ1BQRkxBR1MiCisgICAgIGZpCiAgIGZpCi1kb25lCi1pZiB0ZXN0ICRpID0gInVua25vd24iOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IENhbid0IGZpbmQgc3lzdGVtIGtlcm5lbC4uLiAgU2V0dGluZyB0byAvdm11bml4IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogQ2FuJ3QgZmluZCBzeXN0ZW0ga2VybmVsLi4uICBTZXR0aW5nIHRvIC92bXVuaXgiID4mMjt9Ci0gIGFjX2N2X0tFUk5FTF9MT0M9Ii92bXVuaXgiCi1maQogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X0tFUk5FTF9MT0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X0tFUk5FTF9MT0MiID4mNgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEtFUk5FTF9MT0MgIiRhY19jdl9LRVJORUxfTE9DIgotX0FDRU9GCi0KLQotIwotIyBDaGVjayBmb3IgbW91bnQgdGFibGUgbG9jYXRpb24KLSMKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtb3VudCB0YWJsZSBsb2NhdGlvbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtb3VudCB0YWJsZSBsb2NhdGlvbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfRVRDX01OVFRBQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9FVENfTU5UVEFCPSJ1bmtub3duIgotZm9yIGkgaW4gL2V0Yy9tbnR0YWIgL2V0Yy9tdGFiIC9ldGMvZmlsZXN5c3RlbXMgL2Rldi9tbnR0YWIKLSAgZG8KLSAgaWYgdGVzdCAtZiAkaSAtbyAtYyAkaTsgdGhlbgotICAgIGFjX2N2X0VUQ19NTlRUQUI9IiRpIgotICAgIGJyZWFrOwotICBmaQotZG9uZQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X0VUQ19NTlRUQUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X0VUQ19NTlRUQUIiID4mNgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEVUQ19NTlRUQUIgIiRhY19jdl9FVENfTU5UVEFCIgotX0FDRU9GCi0KLQotIyBDaGVjayBmb3IgL2Rldi9kbWVtIG9yIC9kZXYvZHJ1bSBsb2NhdGlvbgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBzd2FwIGRldmljZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBzd2FwIGRldmljZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfRE1FTV9MT0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotIyBGaXJzdCBkZXRlcm1pbmUgaWYgdGVzdCBleHBlY3RzIGEgLWYgb3IgYSAtYyAoY2hhcmFjdGVyIGRldmljZSAoU1lTVikpCi0KLWlmIHRlc3QgLWYgL2Rldi9rbWVtOyB0aGVuCi0gIENURVNUPSJ0ZXN0IC1mIgotZWxpZiB0ZXN0IC1jIC9kZXYva21lbTsgdGhlbgotICBDVEVTVD0idGVzdCAtYyIKLWVsc2UKLSAgIyBmYWxsIGJhY2sKLSAgQ1RFU1Q9InRlc3QgLWYiCi1maQotCi1pZiAkQ1RFU1QgL2Rldi9kbWVtOyB0aGVuCi0gIGFjX2N2X0RNRU1fTE9DPSIvZGV2L2RtZW0iCi1lbGlmICRDVEVTVCAvZGV2L2RydW07IHRoZW4KLSAgYWNfY3ZfRE1FTV9MT0M9Ii9kZXYvZHJ1bSIKLWVsc2UKLSAgYWNfY3ZfRE1FTV9MT0M9Im5vbmUiCi1maQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X0RNRU1fTE9DIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9ETUVNX0xPQyIgPiY2Ci0KLWlmIHRlc3QgIngkYWNfY3ZfRE1FTV9MT0MiICE9ICJ4bm9uZSI7IHRoZW4KKyAgIGZpCisgICBmb3IgYWNfaGVhZGVyIGluIGRtYWxsb2MuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZG1hbGxvYy5oIiAiYWNfY3ZfaGVhZGVyX2RtYWxsb2NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZG1hbGxvY19oIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIERNRU1fTE9DICIkYWNfY3ZfRE1FTV9MT0MiCisjZGVmaW5lIEhBVkVfRE1BTExPQ19IIDEKIF9BQ0VPRgogCiBmaQogCi0jIGZvcmNlZCBlZmVuY2UgdHVybmVkIG9mZi4KLSMgaWYgdGVzdCAieCRkZXZlbG9wZXIiID0gInh5ZXMiIC1hICJ4JHVzZV9lZmVuY2UiICE9ICJ4bm8iOyB0aGVuCi0jICAgIHVzZV9lZmVuY2U9InllcyIKLSMgZmkKK2RvbmUKIAotaWYgdGVzdCAieCR1c2VfZWZlbmNlIiA9ICJ4eWVzIjsgdGhlbgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEVGX0V4aXQgaW4gLWxlZmVuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgRUZfRXhpdCBpbiAtbGVmZW5jZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2VmZW5jZV9FRl9FeGl0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZG1hbGxvY19tZXNzYWdlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZG1hbGxvY19tZXNzYWdlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9kbWFsbG9jX21lc3NhZ2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGVmZW5jZSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCitjaGFyIGRtYWxsb2NfbWVzc2FnZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRtYWxsb2NfbWVzc2FnZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBkbWFsbG9jOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2RtYWxsb2NfbWVzc2FnZT0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2RtYWxsb2NfbWVzc2FnZSs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfZG1hbGxvY19tZXNzYWdlKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfZG1hbGxvY19tZXNzYWdlPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfZG1hbGxvY19tZXNzYWdlIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2RtYWxsb2NfbWVzc2FnZSIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9kbWFsbG9jX21lc3NhZ2UKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworZmkKKworIyAgIEVGZW5jZQorIyAgICAgICAoVGhpcyB1c2VkIHRvIGJlIG9uIGJ5IGRlZmF1bHQgZm9yIGRldmVsb3BlciBjaGVja291dCkKKyMKK2lmIHRlc3QgIngkdXNlX2VmZW5jZSIgPSAieHllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgRUZfRXhpdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIEVGX0V4aXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX0VGX0V4aXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgogY2hhciBFRl9FeGl0ICgpOwogaW50CiBtYWluICgpCiB7Ci1FRl9FeGl0ICgpOworcmV0dXJuIEVGX0V4aXQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2VmZW5jZV9FRl9FeGl0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZWZlbmNlX0VGX0V4aXQ9bm8KK2ZvciBhY19saWIgaW4gJycgZWZlbmNlOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX0VGX0V4aXQ9JGFjX3JlcwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfRUZfRXhpdCs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9lZmVuY2VfRUZfRXhpdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2VmZW5jZV9FRl9FeGl0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9lZmVuY2VfRUZfRXhpdCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCRUZFTkNFIDEKLV9BQ0VPRgotCi0gIExJQlM9Ii1sZWZlbmNlICRMSUJTIgotCi1maQotCi1maQotCi0jIENoZWNrcyBmb3IgbGlicmFyaWVzLgotIyBBQ19DSEVDS19MSUIoZGVzLCBtYWluKQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJvdW5kIGluIC1sbSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciByb3VuZCBpbiAtbG0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9tX3JvdW5kK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciByb3VuZCAoKTsKLWludAotbWFpbiAoKQotewotcm91bmQgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX21fcm91bmQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9tX3JvdW5kPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX21fcm91bmQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9tX3JvdW5kIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9tX3JvdW5kID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJNIDEKLV9BQ0VPRgotCi0gIExJQlM9Ii1sbSAkTElCUyIKLQotZmkKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGV4cCBpbiAtbG0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZXhwIGluIC1sbS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX21fZXhwK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBleHAgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWV4cCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfbV9leHA9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9tX2V4cD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX2V4cCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX21fZXhwIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9tX2V4cCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCTSAxCi1fQUNFT0YKLQotICBMSUJTPSItbG0gJExJQlMiCi0KLWZpCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWVsZiBvciAtLXdpdGhvdXQtZWxmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9lbGYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZWxmIgorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfRUZfRXhpdCs6fSBmYWxzZTsgdGhlbiA6CiAKIGVsc2UKLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVsZiBvciAtLWRpc2FibGUtZWxmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2VsZitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZWxmIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZWxmLy0td2l0aG91dC1lbGYgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVsZi8tLXdpdGhvdXQtZWxmIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLWZpOworICBhY19jdl9zZWFyY2hfRUZfRXhpdD1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX0VGX0V4aXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfRUZfRXhpdCIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9FRl9FeGl0CitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCiAKK2ZpCisKK2ZpCisKKworIyAgIEVMRiBsaWJyYXJpZXMKKyMgICAgICAgVHlwaWNhbGx5IHVzZWQgZm9yICdubGlzdCcgIChuZWVkZWQgZm9yIHVwdGltZSkKKyMKIGlmIHRlc3QgIngkd2l0aF9lbGYiICE9ICJ4bm8iOyB0aGVuCi0jIG5saXN0IGlzIG5lZWRlZCBmb3IgdXB0aW1lIG9uIHNvbWUgc3l0ZW1zIGluIHRoZSBnZW5lcmljIGxpYnJhcnkKLSMgYWRkIGhvc3RzIHdoaWNoIGRvbid0IHVzZSBubGlzdCB0byB0aGUgYmxhbmsgZmlyc3QgbGluZQogY2FzZSAkdGFyZ2V0X29zIGluCi0JbGludXgqKSA7OworCWxpbnV4KikgIyBhZGQgaG9zdHMgd2hpY2ggZG9uJ3QgdXNlIG5saXN0IGhlcmUKKyAgICAgICAgICAgICAgICA7OwogCWlyaXgqKSAjIENoZWNrIGZvciBubGlzdCBpbiBtbGQgKGlyaXgpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxlbGYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9lbGZfbmxpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sZWxmLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9lbGZfbmxpc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGVsZiAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIG5saXN0ICgpOwogaW50CiBtYWluICgpCiB7Ci1ubGlzdCAoKTsKK3JldHVybiBubGlzdCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZWxmX25saXN0PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZWxmX25saXN0PW5vCisgIGFjX2N2X2xpYl9lbGZfbmxpc3Q9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2VsZl9ubGlzdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2VsZl9ubGlzdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZWxmX25saXN0ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9lbGZfbmxpc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZWxmX25saXN0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2VsZl9ubGlzdCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQkVMRiAxCiBfQUNFT0YKQEAgLTI3NDEyLDcyICsyMTY0Niw0MyBAQAogCiBmaQogCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbmxpc3Q2NCBpbiAtbGVsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBubGlzdDY0IGluIC1sZWxmLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZWxmX25saXN0NjQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbmxpc3Q2NCBpbiAtbGVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbmxpc3Q2NCBpbiAtbGVsZi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZWxmX25saXN0NjQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGVsZiAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIG5saXN0NjQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLW5saXN0NjQgKCk7CityZXR1cm4gbmxpc3Q2NCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZWxmX25saXN0NjQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9lbGZfbmxpc3Q2ND1ubworICBhY19jdl9saWJfZWxmX25saXN0NjQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2VsZl9ubGlzdDY0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZWxmX25saXN0NjQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2VsZl9ubGlzdDY0ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9lbGZfbmxpc3Q2NCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9lbGZfbmxpc3Q2NCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9lbGZfbmxpc3Q2NCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQkVMRiAxCiBfQUNFT0YKQEAgLTI3NDg2LDcyICsyMTY5MSw0MyBAQAogCiBmaQogCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxtbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxtbGQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9tbGRfbmxpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxtbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sbWxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9tbGRfbmxpc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbG1sZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIG5saXN0ICgpOwogaW50CiBtYWluICgpCiB7Ci1ubGlzdCAoKTsKK3JldHVybiBubGlzdCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfbWxkX25saXN0PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfbWxkX25saXN0PW5vCisgIGFjX2N2X2xpYl9tbGRfbmxpc3Q9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX21sZF9ubGlzdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX21sZF9ubGlzdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfbWxkX25saXN0ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9tbGRfbmxpc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbWxkX25saXN0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX21sZF9ubGlzdCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQk1MRCAxCiBfQUNFT0YKQEAgLTI3NTYyLDcyICsyMTczOCw0MyBAQAogCiAJCTs7CiAJKikgIyBkZWZhdWx0Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxlbGYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9lbGZfbmxpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbmxpc3QgaW4gLWxlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sZWxmLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9lbGZfbmxpc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGVsZiAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIG5saXN0ICgpOwogaW50CiBtYWluICgpCiB7Ci1ubGlzdCAoKTsKK3JldHVybiBubGlzdCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZWxmX25saXN0PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZWxmX25saXN0PW5vCisgIGFjX2N2X2xpYl9lbGZfbmxpc3Q9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2VsZl9ubGlzdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2VsZl9ubGlzdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZWxmX25saXN0ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9lbGZfbmxpc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZWxmX25saXN0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2VsZl9ubGlzdCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQkVMRiAxCiBfQUNFT0YKQEAgLTI3NjQxLDU3MyArMjE3ODgsMTE4OCBAQAogZmkKIAogCi0jIE9uIHNvbWUgcGxhdGZvcm1zIChJcml4KSBsaWJuc2wgYW5kIGxpYnNvY2tldCBzaG91bGQgbm90IGJlIHVzZWQuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19nZXRob3N0YnluYW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIyAgIGxpYnNvY2tldAorIyAgICAgICBOZWVkZWQgZm9yICdzb2NrZXQoMiknICAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyMgICAgICAgUG9zc2libHkgYWxzbyBmb3IgJ2dldGhvc3RuYW1lKDMpJyAgICAgICAgICAgICAgKG5vbi1Tb2xhcmlzKQorIyAgICAgICAgICAgKGFsdGVybmF0aXZlbHkgaW4gbGlibnNsICAgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyMgICAgICAgICAgICBvciBpbiBsaWJ3czJfMzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorIworY2FzZSB4JHdpdGhfc29ja2xpYiBpbgoreHdpbnNvY2syKQorICAjICAgbGlid3MyX3czMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisgICMKKyAgbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorICBMSUJTPSIkTElCUyAtbHdzMl8zMiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGdldGhvc3RieW5hbWUgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXRob3N0YnluYW1lLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGdldGhvc3RieW5hbWUgaW5ub2N1b3VzX2dldGhvc3RieW5hbWUKIAotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBnZXRob3N0YnluYW1lCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9nZXRob3N0YnluYW1lKSB8fCBkZWZpbmVkIChfX3N0dWJfX19nZXRob3N0YnluYW1lKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBnZXRob3N0YnluYW1lOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgorICAgICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogCiBpbnQKIG1haW4gKCkKIHsKLXJldHVybiBmICE9IGdldGhvc3RieW5hbWU7CisKKyAgICBzb2NrZXQoMCwgMCwgMCk7CisgICAgZ2V0aG9zdGJ5bmFtZSgwKTsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKIAotYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCi1fQUNFT0YKKyAgICAjIEtlZXAgTElCUy4KKyAgICB0cnVlCiAKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sbnNsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuc2wuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisgICAgIyBSZXN0b3JlIExJQlMgYW5kIGNvbXBsYWluLgorICAgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKyAgICBhc19mbl9lcnJvciAkPyAibGlid3MyXzMyIG5vdCBmb3VuZC4iICIkTElORU5PIiA1CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICA7OworKikKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNvY2tldCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNvY2tldC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfc29ja2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxuc2wgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorY2hhciBzb2NrZXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzb2NrZXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgc29ja2V0OyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX3NvY2tldD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX3NvY2tldCs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfc29ja2V0Kzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfc29ja2V0PW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfc29ja2V0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3NvY2tldCIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9zb2NrZXQKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZWxzZQorICBhc19mbl9lcnJvciAkPyAic29ja2V0KDIpIG5vdCBmb3VuZC4iICIkTElORU5PIiA1CitmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRob3N0YnluYW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0aG9zdGJ5bmFtZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwogICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCiBjaGFyIGdldGhvc3RieW5hbWUgKCk7CiBpbnQKIG1haW4gKCkKIHsKLWdldGhvc3RieW5hbWUgKCk7CityZXR1cm4gZ2V0aG9zdGJ5bmFtZSAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Citmb3IgYWNfbGliIGluICcnIG5zbCBzb2NrZXQ7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZT0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUrOn0gZmFsc2U7IHRoZW4gOgogCi1hY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWU9bm8KK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWU9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworICBmb3IgYWNfZnVuYyBpbiBnZXRob3N0YnluYW1lCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGhvc3RieW5hbWUiICJhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQogX0FDRU9GCiAKLQlMSUJTPSIke0xJQlN9IC1sbnNsIgogZmkKK2RvbmUKIAotZmkKLQotCi0jIFNDTyBVbml4d2FyZSA3LjEuNCBmaW5kcyBnZXRob3N0YnluYW1lKCkgaW4gLWxzb2NrZXQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2dldGhvc3RieW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGhvc3RieWFkZHIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRob3N0YnlhZGRyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0YnlhZGRyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGdldGhvc3RieW5hbWUgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXRob3N0YnluYW1lLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGdldGhvc3RieW5hbWUgaW5ub2N1b3VzX2dldGhvc3RieW5hbWUKIAotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBnZXRob3N0YnluYW1lCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGhvc3RieWFkZHIgKCk7CitpbnQKK21haW4gKCkKIHsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9nZXRob3N0YnluYW1lKSB8fCBkZWZpbmVkIChfX3N0dWJfX19nZXRob3N0YnluYW1lKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBnZXRob3N0YnluYW1lOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKK3JldHVybiBnZXRob3N0YnlhZGRyICgpOworICA7CisgIHJldHVybiAwOwogfQotI2VuZGlmCitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgbnNsIHNvY2tldDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9nZXRob3N0YnlhZGRyPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfZ2V0aG9zdGJ5YWRkcis6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfZ2V0aG9zdGJ5YWRkcis6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2dldGhvc3RieWFkZHI9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9nZXRob3N0YnlhZGRyIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2dldGhvc3RieWFkZHIiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5YWRkcgoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCisgIGZvciBhY19mdW5jIGluIGdldGhvc3RieWFkZHIKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0aG9zdGJ5YWRkciIgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5YWRkciIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRob3N0YnlhZGRyIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICA7OworZXNhYworCisKKyMgICBsaWJpcGhscGFwaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEN5Z3dpbiBhbmQgTWluR1cpCisjCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbGlwaGxwYXBpIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICNpbmNsdWRlIDx3aW5zb2NrMi5oPgorICAjaW5jbHVkZSA8aXBobHBhcGkuaD4KIAogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gZiAhPSBnZXRob3N0YnluYW1lOworCisgIElwUmVuZXdBZGRyZXNzKDApOworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogCi1hY19jdl9mdW5jX2dldGhvc3RieW5hbWU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKLV9BQ0VPRgorICAjIEtlZXAgTElCUy4KKyAgdHJ1ZQogCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbHNvY2tldCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sc29ja2V0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxzb2NrZXQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisKKyAgIyBSZXN0b3JlIExJQlMgYW5kIGNvbXBsYWluLgorICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisgIGNhc2UgeCR3aXRoX3NvY2tsaWIgaW4KKyAgeHdpbnNvY2syKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJsaWJpcGhscGFwaSBub3QgZm91bmQuIiAiJExJTkVOTyIgNQorICAgIDs7CisgIGVzYWMKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworIyAgIGxpYnJlZ2V4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisjCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbHJlZ2V4IgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldGhvc3RieW5hbWUgKCk7CisgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgI2luY2x1ZGUgPHJlZ2V4Lmg+CisKIGludAogbWFpbiAoKQogewotZ2V0aG9zdGJ5bmFtZSAoKTsKKworICByZWdjb21wKDAsIDAsIDApOworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3NvY2tldF9nZXRob3N0YnluYW1lPXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICMgS2VlcCBMSUJTLgorICB0cnVlCisKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfY3ZfbGliX3NvY2tldF9nZXRob3N0YnluYW1lPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NvY2tldF9nZXRob3N0YnluYW1lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWUiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3NvY2tldF9nZXRob3N0YnluYW1lID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCi1fQUNFT0YKLQotCUxJQlM9IiR7TElCU30gLWxzb2NrZXQiCi1maQorICAjIFJlc3RvcmUgTElCUy4KKyAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgogCiBmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAogCi0jIFNvbGFyaXMga3N0YXQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3N0YXRfbG9va3VwIGluIC1sa3N0YXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3N0YXRfbG9va3VwIGluIC1sa3N0YXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9rc3RhdF9rc3RhdF9sb29rdXArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxrc3RhdCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyMgICBsaWJzbm1wYXBpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorIworbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxzbm1wYXBpIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICAjaW5jbHVkZSA8c25tcC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICBTbm1wVXRpbE1lbUFsbG9jKDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAjIEtlZXAgTElCUy4KKyAgdHJ1ZQorCitlbHNlCisKKyAgIyBSZXN0b3JlIExJQlMuCisgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworIyAgIGtzdGF0IGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyMKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrc3RhdF9sb29rdXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrc3RhdF9sb29rdXAuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2tzdGF0X2xvb2t1cF9MTkVUU05NUExJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExORVRTTk1QTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBrc3RhdF9sb29rdXAgKCk7CiBpbnQKIG1haW4gKCkKIHsKLWtzdGF0X2xvb2t1cCAoKTsKK3JldHVybiBrc3RhdF9sb29rdXAgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2tzdGF0X2tzdGF0X2xvb2t1cD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9rc3RhdF9rc3RhdF9sb29rdXA9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfa3N0YXRfa3N0YXRfbG9va3VwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfa3N0YXRfa3N0YXRfbG9va3VwIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9rc3RhdF9rc3RhdF9sb29rdXAgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJLU1RBVCAxCi1fQUNFT0YKLQotICAgICAgICBMTkVUU05NUExJQlM9IiR7TE5FVFNOTVBMSUJTfSAtbGtzdGF0IgotZmkKLQotCi0jIENoZWNrIGZvciBsaWJyYXJpZXMgdGhhdCB0aGUgYWdlbnQgbmVlZHMKLSMgc2F2aW5nIG9sZCBsaWJyYXJpZXMKLU5PTkFHRU5UTElCUz0kTElCUwotCi0jIENoZWNrIGZvciBzZWN1cml0eSByZWxhdGVkIGZ1bmN0aW9ucwotaWYgdGVzdCAieCR0cnlvcGVuc3NsIiAhPSAieG5vIjsgdGhlbgotICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiAhPSAieHllcyIgLWEgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDX0luaXRpYWxpemUgaW4gLWxwa2NzMTEiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQ19Jbml0aWFsaXplIGluIC1scGtjczExLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHBrY3MxMSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBrc3RhdCA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCitjaGFyIGtzdGF0X2xvb2t1cCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGtzdGF0X2xvb2t1cCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19rc3RhdF9sb29rdXBfTE5FVFNOTVBMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19rc3RhdF9sb29rdXBfTE5FVFNOTVBMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2tzdGF0X2xvb2t1cF9MTkVUU05NUExJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2tzdGF0X2xvb2t1cF9MTkVUU05NUExJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2tzdGF0X2xvb2t1cF9MTkVUU05NUExJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE5FVFNOTVBMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJLU1RBVCAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworCisKKyMKKyMgICBsaWJydAorIworCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgY2xvY2tfZ2V0dGltZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGNsb2NrX2dldHRpbWUuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2Nsb2NrX2dldHRpbWVfTE5FVFNOTVBMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTkVUU05NUExJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBjbG9ja19nZXR0aW1lICgpOworaW50CittYWluICgpCit7CityZXR1cm4gY2xvY2tfZ2V0dGltZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBydCA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgY2xvY2tfZ2V0dGltZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNsb2NrX2dldHRpbWUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZV9MTkVUU05NUExJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2Nsb2NrX2dldHRpbWVfTE5FVFNOTVBMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX2Nsb2NrX2dldHRpbWVfTE5FVFNOTVBMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19jbG9ja19nZXR0aW1lX0xORVRTTk1QTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZV9MTkVUU05NUExJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE5FVFNOTVBMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DTE9DS19HRVRUSU1FIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCisKKworIyMKKyMgICBNSUItbW9kdWxlLXNwZWNpZmljIGNoZWNrcworIyMKKworIyAgIGxpYmRldnN0YXQKKyMgICAgICAgIChmb3IgZGlza0lPIE1JQikKKyMKKyMgICBOb3QtVXNlZDogSEFWRV9HRVRERVZTL0hBVkVfREVWU1RBVF9HRVRERVZTCisjCitlY2hvICIgJG1vZHVsZV9saXN0ICIgfCAkR1JFUCAiIHVjZC1zbm1wL2Rpc2tpbyAiID4vZGV2L251bGwKK2lmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0ZGV2cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGRldnMuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2dldGRldnNfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0ZGV2cyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGdldGRldnMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gZGV2c3RhdCA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0ZGV2cyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGdldGRldnMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfZ2V0ZGV2c19MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfZ2V0ZGV2c19MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19nZXRkZXZzX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19nZXRkZXZzX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19nZXRkZXZzX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRERVZTIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZGV2c3RhdF9nZXRkZXZzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZGV2c3RhdF9nZXRkZXZzLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19kZXZzdGF0X2dldGRldnNfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGV2c3RhdF9nZXRkZXZzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGV2c3RhdF9nZXRkZXZzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGRldnN0YXQgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRldnN0YXRfZ2V0ZGV2cyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRldnN0YXRfZ2V0ZGV2cyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19kZXZzdGF0X2dldGRldnNfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2RldnN0YXRfZ2V0ZGV2c19MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19kZXZzdGF0X2dldGRldnNfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2RldnN0YXRfZ2V0ZGV2c19MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfZGV2c3RhdF9nZXRkZXZzX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ERVZTVEFUX0dFVERFVlMgMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKK2ZpCisKKyMgICBsaWJwY2kKKyMgICAgICAgIChmb3IgaWYtbWliIGRlc2NyaXB0aW9uKQorIworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBjaV9sb29rdXBfbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBjaV9sb29rdXBfbmFtZS4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfcGNpX2xvb2t1cF9uYW1lX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBjaV9sb29rdXBfbmFtZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBjaV9sb29rdXBfbmFtZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBwY2kgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBjaV9sb29rdXBfbmFtZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBjaV9sb29rdXBfbmFtZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19wY2lfbG9va3VwX25hbWVfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3BjaV9sb29rdXBfbmFtZV9MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19wY2lfbG9va3VwX25hbWVfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BjaV9sb29rdXBfbmFtZV9MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGNpX2xvb2t1cF9uYW1lX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QQ0lfTE9PS1VQX05BTUUgMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKKworIyAgIExNLVNFTlNPUlMtTUlCIHN1cHBvcnQKKyMKK2VjaG8gIiAkbW9kdWxlX2xpc3QgIiB8ICRHUkVQIC1pICJ1Y2Qtc25tcC9sbXNlbnNvciIgPiAvZGV2L251bGwKK2lmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNlbnNvcnMgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2Vuc29ycyBzdXBwb3J0Li4uICIgPiY2OyB9CisgICAgICAgIGNhc2UgJHRhcmdldF9vcyBpbgorICAgICAgICBzb2xhcmlzKikKKyAgICAgICAgICAgICMgIEFnZW50OiAgSEFWRV9QSUNMX0gKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJwaWNsLmgiICJhY19jdl9oZWFkZXJfcGljbF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9waWNsX2giID0geHllczsgdGhlbiA6CisgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbHBpY2wiCitmaQorCisKKyAgICAgICAgICAgIGZvciBhY19oZWFkZXIgaW4gcGljbC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJwaWNsLmgiICJhY19jdl9oZWFkZXJfcGljbF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9waWNsX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QSUNMX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgIE5vdC1Vc2VkOiAgSEFWRV9TRU5TT1JTX1NFTlNPUlNfSAorICAgICAgICAgICAgIworICAgICAgICAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInNlbnNvcnMvc2Vuc29ycy5oIiAiYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorICBhc19mbl9lcnJvciAkPyAiYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCBzZW5zb3JzL3NlbnNvcnMuaCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gc2Vuc29ycyA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwc19MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHNfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHNfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzX0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwc19MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyBlbHNlCisgICAgYXNfZm5fZXJyb3IgJD8gImFza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgLWxzZW5zb3JzIiAiJExJTkVOTyIgNQorIGZpCisKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2ZpCisKKyMKKyMgbGlibmwgKG5ldGxpbmspCisjCisKK2lmIHRlc3QgIngkd2l0aF9ubCIgIT0gInhubyI7IHRoZW4KKyAgICBjYXNlICR0YXJnZXRfb3MgaW4KKyAgICBsaW51eCopICMgQ2hlY2sgZm9yIGxpYm5sIChsaW51eCkKKyAgICAgICAgbmV0c25tcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgIENQUEZMQUdTPSItSS91c3IvaW5jbHVkZS9saWJubDMgJENQUEZMQUdTIgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG5sX2Nvbm5lY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBubF9jb25uZWN0Li4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG5sX2Nvbm5lY3QgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBubF9jb25uZWN0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIG5sLTMgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG5sX2Nvbm5lY3QgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBubF9jb25uZWN0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisgICAgZm9yIGFjX2hlYWRlciBpbiBuZXRsaW5rL25ldGxpbmsuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibmV0bGluay9uZXRsaW5rLmgiICJhY19jdl9oZWFkZXJfbmV0bGlua19uZXRsaW5rX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGxpbmtfbmV0bGlua19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkVUTElOS19ORVRMSU5LX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAgICAgICAgICAgRVhURVJOQUxfTUlCR1JPVVBfSU5DTFVERVM9IiRFWFRFUk5BTF9NSUJHUk9VUF9JTkNMVURFUyAtSS91c3IvaW5jbHVkZS9saWJubDMiCisgZWxzZQorICAgIENQUEZMQUdTPSIkbmV0c25tcF9zYXZlX0NQUEZMQUdTIgorIGZpCisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmV0bGlua19uZXRsaW5rX2giICE9IHh5ZXM7IHRoZW4KKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBubF9jb25uZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgbmxfY29ubmVjdC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBubF9jb25uZWN0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gbmxfY29ubmVjdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBubCA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbmxfY29ubmVjdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG5sX2Nvbm5lY3QgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xNSUJMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworICAgICAgICAgICAgICAgIGZvciBhY19oZWFkZXIgaW4gbmV0bGluay9uZXRsaW5rLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm5ldGxpbmsvbmV0bGluay5oIiAiYWNfY3ZfaGVhZGVyX25ldGxpbmtfbmV0bGlua19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRsaW5rX25ldGxpbmtfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05FVExJTktfTkVUTElOS19IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIGZpCisKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmV0bGlua19uZXRsaW5rX2giID0geHllczsgdGhlbgorICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG5ldGxpbmsvc29ja2V0Lmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm5sX3NvY2tldF9mcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQk5MMyAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgICAgICAgIGZpCisgICAgOzsKKyAgICBlc2FjCitmaQorCisKKworIyMKKyMgICBNb3JlIGNvbXBsZXggY2hlY2tzOgorIyMKKworIyAgIFNlY3VyaXR5IHJlbGF0ZWQgZnVuY3Rpb25zCisjCitOT05BR0VOVExJQlM9JExJQlMJICMgc2F2ZSBvbGQgbGlicmFyaWVzCitTU0hQUk9HPW5vCitUTFNQUk9HPW5vCitpZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiICE9ICJ4bm8iIC1hICJ4JHRyeW9wZW5zc2wiICE9ICJ4aW50ZXJuYWwiOyB0aGVuCisgICAgIyBjaGVjayBmb3IgbGlicGtjczExIGlmIGFza2VkCisgICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiICE9ICJ4eWVzIiAtYSAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIENfSW5pdGlhbGl6ZSBpbiAtbHBrY3MxMSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQ19Jbml0aWFsaXplIGluIC1scGtjczExLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwa2NzMTEgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCiBjaGFyIENfSW5pdGlhbGl6ZSAoKTsKIGludAogbWFpbiAoKQogewotQ19Jbml0aWFsaXplICgpOworcmV0dXJuIENfSW5pdGlhbGl6ZSAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemU9bm8KKyAgYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemU9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPSB4eWVzOyB0aGVuIDoKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJQS0NTMTEgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlBLQ1MxMSAxIiA+PmNvbmZkZWZzLmgKIAotICAgICAgICAgICAgICBMSUJQS0NTMTE9Ii1scGtjczExIgorCQlMSUJQS0NTMTE9Ii1scGtjczExIgogZmkKIAogICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIngkdHJ5cnNhcmVmIiAhPSAieG5vIjsgdGhlbgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFJTQVByaXZhdGVEZWNyeXB0IGluIC1scnNhcmVmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFJTQVByaXZhdGVEZWNyeXB0IGluIC1scnNhcmVmLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICAgIGlmIHRlc3QgIngkdHJ5cnNhcmVmIiAhPSAieG5vIjsgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUlNBUHJpdmF0ZURlY3J5cHQgaW4gLWxyc2FyZWYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFJTQVByaXZhdGVEZWNyeXB0IGluIC1scnNhcmVmLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbHJzYXJlZiAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIFJTQVByaXZhdGVEZWNyeXB0ICgpOwogaW50CiBtYWluICgpCiB7Ci1SU0FQcml2YXRlRGVjcnlwdCAoKTsKK3JldHVybiBSU0FQcml2YXRlRGVjcnlwdCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0PW5vCisgIGFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0ID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQlJTQVJFRiAxCiBfQUNFT0YKQEAgLTI4MjE2LDcyICsyMjk3OCw0MyBAQAogCiBmaQogCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgUlNBX1BLQ1MxX1JTQXJlZiBpbiAtbFJTQWdsdWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUlNBX1BLQ1MxX1JTQXJlZiBpbiAtbFJTQWdsdWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFJTQV9QS0NTMV9SU0FyZWYgaW4gLWxSU0FnbHVlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBSU0FfUEtDUzFfUlNBcmVmIGluIC1sUlNBZ2x1ZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxSU0FnbHVlICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgUlNBX1BLQ1MxX1JTQXJlZiAoKTsKIGludAogbWFpbiAoKQogewotUlNBX1BLQ1MxX1JTQXJlZiAoKTsKK3JldHVybiBSU0FfUEtDUzFfUlNBcmVmICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWY9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWY9bm8KKyAgYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWYgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWYiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCUlNBR0xVRSAxCiBfQUNFT0YKQEAgLTI4MjkwLDQ4NiArMjMwMjMsNDk0IEBACiAKIGZpCiAKLSAgICAgIGZpCisgICAgICAgIGZpCiAKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgRVZQX21kNSBpbiAtbGNyeXB0byIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBFVlBfbWQ1IGluIC1sY3J5cHRvLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfY3J5cHRvX0VWUF9tZDUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWxlYXkzMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWxlYXkzMi4uLiAiID4mNjsgfQorICAgICAgICBuZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9Ii1sZWF5MzIiCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgICAgICAgICAgICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgoraW50CittYWluICgpCit7CityZXR1cm4gRVZQX21kNSgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9OyBhY19jdl9saWJfZWF5MzJfRVZQX21kNT15ZXM7IENSWVBUTz0iZWF5MzIiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorCisgICAgICAgIGlmIHRlc3QgeCRDUllQVE8gPSB4OyB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBFVlBfbWQ1IGluIC1sY3J5cHRvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBFVlBfbWQ1IGluIC1sY3J5cHRvLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sY3J5cHRvICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIgRVZQX21kNSAoKTsKIGludAogbWFpbiAoKQogewotRVZQX21kNSAoKTsKK3JldHVybiBFVlBfbWQ1ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1PW5vCisgIGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJDUllQVE8gMQotX0FDRU9GCi0KLSAgICAgICAgICAgICAgTElCQ1JZUFRPPSItbGNyeXB0byIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiA9IHh5ZXM7IHRoZW4gOgorICBDUllQVE89ImNyeXB0byIKIGZpCiAKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQUVTX2NmYjEyOF9lbmNyeXB0IGluIC1sY3J5cHRvIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFFU19jZmIxMjhfZW5jcnlwdCBpbiAtbGNyeXB0by4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2NyeXB0b19BRVNfY2ZiMTI4X2VuY3J5cHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICAgICAgZmkKKworICAgICAgICBpZiB0ZXN0IHgkQ1JZUFRPICE9IHg7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJDUllQVE8gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgIExJQkNSWVBUTz0iLWwke0NSWVBUT30iCisgICAgICAgICAgICBhc19hY19MaWI9YCRhc19lY2hvICJhY19jdl9saWJfJHtDUllQVE99JydfQUVTX2NmYjEyOF9lbmNyeXB0IiB8ICRhc190cl9zaGAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFFU19jZmIxMjhfZW5jcnlwdCBpbiAtbCR7Q1JZUFRPfSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQUVTX2NmYjEyOF9lbmNyeXB0IGluIC1sJHtDUllQVE99Li4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19hY19MaWIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGNyeXB0byAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK0xJQlM9Ii1sJHtDUllQVE99ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIEFFU19jZmIxMjhfZW5jcnlwdCAoKTsKIGludAogbWFpbiAoKQogewotQUVTX2NmYjEyOF9lbmNyeXB0ICgpOworcmV0dXJuIEFFU19jZmIxMjhfZW5jcnlwdCAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfY3J5cHRvX0FFU19jZmIxMjhfZW5jcnlwdD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGFzX2FjX0xpYj15ZXMiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9jcnlwdG9fQUVTX2NmYjEyOF9lbmNyeXB0PW5vCisgIGV2YWwgIiRhc19hY19MaWI9bm8iCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdG9fQUVTX2NmYjEyOF9lbmNyeXB0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfY3J5cHRvX0FFU19jZmIxMjhfZW5jcnlwdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfY3J5cHRvX0FFU19jZmIxMjhfZW5jcnlwdCA9IHllczsgdGhlbgorZXZhbCBhY19yZXM9XCQkYXNfYWNfTGliCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfTGliIlwiID0geCJ5ZXMiOyB0aGVuIDoKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FFU19DRkIxMjhfRU5DUllQVCAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBFVlBfTURfQ1RYX2NyZWF0ZSBpbiAtbGNyeXB0byIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBFVlBfTURfQ1RYX2NyZWF0ZSBpbiAtbGNyeXB0by4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2NyeXB0b19FVlBfTURfQ1RYX2NyZWF0ZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisgICAgICAgICAgICBhc19hY19MaWI9YCRhc19lY2hvICJhY19jdl9saWJfJHtDUllQVE99JydfRVZQX01EX0NUWF9jcmVhdGUiIHwgJGFzX3RyX3NoYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgRVZQX01EX0NUWF9jcmVhdGUgaW4gLWwke0NSWVBUT30iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEVWUF9NRF9DVFhfY3JlYXRlIGluIC1sJHtDUllQVE99Li4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRhc19hY19MaWIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGNyeXB0byAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK0xJQlM9Ii1sJHtDUllQVE99ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIEVWUF9NRF9DVFhfY3JlYXRlICgpOwogaW50CiBtYWluICgpCiB7Ci1FVlBfTURfQ1RYX2NyZWF0ZSAoKTsKK3JldHVybiBFVlBfTURfQ1RYX2NyZWF0ZSAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfY3J5cHRvX0VWUF9NRF9DVFhfY3JlYXRlPXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkYXNfYWNfTGliPXllcyIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2NyeXB0b19FVlBfTURfQ1RYX2NyZWF0ZT1ubworICBldmFsICIkYXNfYWNfTGliPW5vIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfY3J5cHRvX0VWUF9NRF9DVFhfY3JlYXRlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfY3J5cHRvX0VWUF9NRF9DVFhfY3JlYXRlIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9jcnlwdG9fRVZQX01EX0NUWF9jcmVhdGUgPSB5ZXM7IHRoZW4KK2V2YWwgYWNfcmVzPVwkJGFzX2FjX0xpYgorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0xpYiJcIiA9IHgieWVzIjsgdGhlbiA6CiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfRVZQX01EX0NUWF9DUkVBVEUKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9FVlBfTURfQ1RYX0NSRUFURSAvKiovIiA+PmNvbmZkZWZzLmgKIAogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0VWUF9NRF9DVFhfREVTVFJPWQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0VWUF9NRF9DVFhfREVTVFJPWSAvKiovIiA+PmNvbmZkZWZzLmgKIAogZmkKIAotICAgIGZpCi1lbGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQ19Jbml0aWFsaXplIGluIC1scGtjczExIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIENfSW5pdGlhbGl6ZSBpbiAtbHBrY3MxMS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICAgICAgZmkKKyAgICAgICAgaWYgZWNobyAiICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgIiB8ICRHUkVQICJEVExTIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBEVExTdjFfbWV0aG9kIGluIC1sc3NsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBEVExTdjFfbWV0aG9kIGluIC1sc3NsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9zc2xfRFRMU3YxX21ldGhvZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scGtjczExICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorTElCUz0iLWxzc2wgLWxjcnlwdG8gJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCitjaGFyIERUTFN2MV9tZXRob2QgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBEVExTdjFfbWV0aG9kICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zc2xfRFRMU3YxX21ldGhvZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NzbF9EVExTdjFfbWV0aG9kPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zc2xfRFRMU3YxX21ldGhvZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zc2xfRFRMU3YxX21ldGhvZCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zc2xfRFRMU3YxX21ldGhvZCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJTU0xfRFRMUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgICAgIExJQkNSWVBUTz0iIC1sc3NsICRMSUJDUllQVE8iCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJUaGUgRFRMUyBiYXNlZCB0cmFuc3BvcnRzIHJlcXVpcmUgdGhlIGxpYnNzbCBsaWJyYXJ5IGZyb20gT3BlblNTTCB0byBiZSBhdmFpbGFibGUgYW5kIHN1cHBvcnQgRFRMUyIgIiRMSU5FTk8iIDUKK2ZpCisKKyAgICAgICAgICAgIFRMU1BST0c9eWVzCisgICAgICAgIGZpCisgICAgICAgIGlmIGVjaG8gIiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICIgfCAkR1JFUCAiVExTIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBTU0xfbGlicmFyeV9pbml0IGluIC1sc3NsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBTU0xfbGlicmFyeV9pbml0IGluIC1sc3NsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9zc2xfU1NMX2xpYnJhcnlfaW5pdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc3NsIC1sY3J5cHRvICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwogICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIFNTTF9saWJyYXJ5X2luaXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBTU0xfbGlicmFyeV9pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zc2xfU1NMX2xpYnJhcnlfaW5pdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NzbF9TU0xfbGlicmFyeV9pbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zc2xfU1NMX2xpYnJhcnlfaW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zc2xfU1NMX2xpYnJhcnlfaW5pdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zc2xfU1NMX2xpYnJhcnlfaW5pdCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJTU0wgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgICBMSUJDUllQVE89IiAtbHNzbCAkTElCQ1JZUFRPIgorZWxzZQorICBhc19mbl9lcnJvciAkPyAiVGhlIERUTFMgYmFzZWQgdHJhbnNwb3J0cyByZXF1aXJlIHRoZSBsaWJzc2wgbGlicmFyeSBmcm9tIE9wZW5TU0wgdG8gYmUgYXZhaWxhYmxlIiAiJExJTkVOTyIgNQorZmkKKworICAgICAgICAgICAgVExTUFJPRz15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgaWYgZWNobyAiICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgIiB8ICRHUkVQICIgU1NIICIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAgaW4gLWxzc2gyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cCBpbiAtbHNzaDIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3NzaDJfbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHNzaDIgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwICgpOworaW50CittYWluICgpCit7CityZXR1cm4gbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3NzaDJfbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXA9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9zc2gyX2xpYnNzaDJfc2Vzc2lvbl9zdGFydHVwPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zc2gyX2xpYnNzaDJfc2Vzc2lvbl9zdGFydHVwIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3NzaDJfbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3NoMl9saWJzc2gyX3Nlc3Npb25fc3RhcnR1cCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJTU0gyIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICAgICAgTElCQ1JZUFRPPSIgLWxzc2gyICRMSUJDUllQVE8iCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJUaGUgU1NIIHRyYW5zcG9ydCByZXF1aXJlcyB0aGUgbGlic3NoMiBsaWJyYXJ5IHRvIGJlIGF2YWlsYWJsZSIgIiRMSU5FTk8iIDUKK2ZpCisKKyAgICAgICAgICAgIFNTSFBST0c9eWVzCisgICAgICAgIGZpCisgICAgZmkKK2VsaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQ19Jbml0aWFsaXplIGluIC1scGtjczExIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDX0luaXRpYWxpemUgaW4gLWxwa2NzMTEuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHBrY3MxMSAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKIGNoYXIgQ19Jbml0aWFsaXplICgpOwogaW50CiBtYWluICgpCiB7Ci1DX0luaXRpYWxpemUgKCk7CityZXR1cm4gQ19Jbml0aWFsaXplICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZT1ubworICBhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJQS0NTMTEgMQotX0FDRU9GCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJQS0NTMTEgMSIgPj5jb25mZGVmcy5oCiAKLSAgICAgICAgICAgIExJQlBLQ1MxMT0iLWxwa2NzMTEiCisgICAgICAgIExJQlBLQ1MxMT0iLWxwa2NzMTEiCitmaQorCitmaQoraWYgdGVzdCAieCRUTFNQUk9HIiA9ICJ4eWVzIjsgdGhlbgorICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiRVZQX3NoYTIyNCIgImFjX2N2X2hhdmVfZGVjbF9FVlBfc2hhMjI0IiAiI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9FVlBfc2hhMjI0IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0VWUF9TSEEyMjQgLyoqLyIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgOgorZmkKKworICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiRVZQX3NoYTM4NCIgImFjX2N2X2hhdmVfZGVjbF9FVlBfc2hhMzg0IiAiI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9FVlBfc2hhMzg0IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0VWUF9TSEEzODQgLyoqLyIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgOgogZmkKIAogZmkKIAotTElCUz0kTk9OQUdFTlRMSUJTCitMSUJTPSROT05BR0VOVExJQlMJICMgcmVzdG9yZSBvbGQgbGlicmFyaWVzCitpZiB0ZXN0ICJ4JFNTSFBST0ciID0gInh5ZXMiOyB0aGVuCisgICAgTkVUU05NUF9CVUlMRF9TU0hfUFJPR19UUlVFPScnCisgICAgTkVUU05NUF9CVUlMRF9TU0hfUFJPR19GQUxTRT0nIycKK2Vsc2UKKyAgICBORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUU9JyMnCisgICAgTkVUU05NUF9CVUlMRF9TU0hfUFJPR19GQUxTRT0nJworZmkKK2lmIHRlc3QgIngkVExTUFJPRyIgPSAieHllcyIgLWEgIngkZW5hYmxlX3JlYWRfb25seSIgIT0gInh5ZXMiIDsgdGhlbgorICAgIE5FVFNOTVBfQlVJTERfVExTX1BST0dfVFJVRT0nJworICAgIE5FVFNOTVBfQlVJTERfVExTX1BST0dfRkFMU0U9JyMnCitlbHNlCisgICAgTkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFPScjJworICAgIE5FVFNOTVBfQlVJTERfVExTX1BST0dfRkFMU0U9JycKK2ZpCitpZiBlY2hvICIgJHtzZWN1cml0eV9tb2RfbGlzdH0gIiB8IGdyZXAgJyB1c20gJyA7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9yZWFkX29ubHkiICE9ICJ4eWVzIiA7IHRoZW4KKyAgICAJTkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFPScnCisgICAgCU5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0U9JyMnCisgICAgZWxzZQorICAgIAlORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUU9JyMnCisgICAgCU5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0U9JycKKyAgICBmaQorZWxzZQorICAgIE5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRT0nIycKKyAgICBORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFPScnCitmaQoraWYgdGVzdCAieCRlbmFibGVfcmVhZF9vbmx5IiAhPSAieHllcyIgOyB0aGVuCisgICAgTkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFPSIiCisgICAgTkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRT0iIyIKK2Vsc2UKKyAgICBORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUU9IiMiCisgICAgTkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRT0iIgorZmkKIAotIyBjaGVjayBmb3IgdGNwIHdyYXBwZXIgc3VwcG9ydAorCisKKworCisKKworCisKKyMKKyMgSWYgd2UncmUgdXNpbmcgaW50ZXJuYWwgY3J5cHRvIHN1cHBvcnQgd2UgbmVlZCB0byBjb21waWxlIGluIGV4dHJhIGZpbGVzCisjCitjcnlwdG9fZmlsZXNfYz0iIgorY3J5cHRvX2ZpbGVzX289IiIKK2NyeXB0b19maWxlc19sbz0iIgoraWYgdGVzdCAieCR0cnlvcGVuc3NsIiAhPSAieG5vIiAtYSAieCRDUllQVE8iID0gIngiOyB0aGVuCisgICAjIElmIHdlOgorICAgIyAgIDEpIGNvdWxkbid0IGZpbmQgbmVlZGVkIG9wZW5zc2wgc3VwcG9ydAorICAgIyAgIDIpIE9SIHdlcmUgYXNrZWQgdG8gdXNlIGludGVybmFsIHN1cHBvcnQKKyAgICMgICAzKSBBTkQgd2UgaGF2ZSB0aGUgbmVlZGVkIGZpbGVzCisgICAjIHRoZW4gdXNlIGl0CisgICBDUllQVE89ImludGVybmFsIgorICAgY3J5cHRvX2ZpbGVzX2M9Im9wZW5zc2wvb3BlbnNzbF9zaGExLmMgb3BlbnNzbC9vcGVuc3NsX21kNS5jIG9wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMgb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMuYyBvcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5jIG9wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMgb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmMgb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5jIgorICAgY3J5cHRvX2ZpbGVzX289Im9wZW5zc2wvb3BlbnNzbF9zaGExLm8gb3BlbnNzbC9vcGVuc3NsX21kNS5vIG9wZW5zc2wvb3BlbnNzbF9zZXRfa2V5Lm8gb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMubyBvcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5vIG9wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLm8gb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLm9vIG9wZW5zc2wvb3BlbnNzbF9jZmIxMjgubyIKKyAgIGNyeXB0b19maWxlc19sbz0ib3BlbnNzbC9vcGVuc3NsX3NoYTEubG8gb3BlbnNzbC9vcGVuc3NsX21kNS5sbyBvcGVuc3NsL29wZW5zc2xfc2V0X2tleS5sbyBvcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5sbyBvcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5sbyBvcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5sbyBvcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUubG8gb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5sbyIKKyAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworCisjCisjIGlmIHdlIGNhbiBkbyBhbnkgc29ydCBvZiBjcnlwdG8gdGhlbiBub3RlIGl0CisjCitpZiB0ZXN0ICJ4JENSWVBUTyIgIT0gIngiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0NBTl9ET19DUllQVE8gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgICBUQ1Agd3JhcHBlciBzdXBwb3J0CisjCiBfY3BwZmxhZ3M9IiR7Q1BQRkxBR1N9IgogX2xkZmxhZ3M9IiR7TERGTEFHU30iCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ3cmFwIG9yIC0td2l0aG91dC1saWJ3cmFwIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9saWJ3cmFwK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2xpYndyYXAiCi0KLSAgaWYgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gIm5vIjsgdGhlbgotICAgIGlmIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLUkkd2l0aF9saWJ3cmFwL2luY2x1ZGUiCi0gICAgICBMREZMQUdTPSIke0xERkxBR1N9IC1MJHdpdGhfbGlid3JhcC9saWIiCi0gICAgZmkKLQotICAgIF9saWJzPSR7TElCU30KLSAgICBpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90Y3BkX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0Y3BkLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdGNwZC5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdGNwZF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90Y3BkX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90Y3BkX2giID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0Y3BkLmggdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGNwZC5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDx0Y3BkLmg+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0Y3BkLmggcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0Y3BkLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDx0Y3BkLmg+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9CitpZiB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSAibm8iOyB0aGVuCisgIGlmIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9ICJ5ZXMiOyB0aGVuCisgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJHdpdGhfbGlid3JhcC9pbmNsdWRlIgorICAgIExERkxBR1M9IiR7TERGTEFHU30gLUwkd2l0aF9saWJ3cmFwL2xpYiIKICAgZmkKKworICBfbGlicz0ke0xJQlN9CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ0Y3BkLmgiICJhY19jdl9oZWFkZXJfdGNwZF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl90Y3BkX2giID0geHllczsgdGhlbiA6CisKIGVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0Y3BkLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0Y3BkLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdGNwZC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdGNwZC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0Y3BkLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRjcGQuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHRjcGQuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRjcGQuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0Y3BkLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRjcGQuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHRjcGQuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRjcGQuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0Y3BkLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdGNwZC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0Y3BkLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRjcGQuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdGNwZC5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRjcGQuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RjcGRfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9oZWFkZXJfdGNwZF9oPSRhY19oZWFkZXJfcHJlcHJvYwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGNwZF9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGNwZF9oIiA+JjYKLQotZmkKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl90Y3BkX2ggPSB5ZXM7IHRoZW4KLSAgOgotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIHRjcGQuaC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCB0Y3BkLmguIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICQ/ICJBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIHRjcGQuaC4iICIkTElORU5PIiA1CiBmaQogCiAKIAotICAgIExJQlM9IiRMSUJTIC1sd3JhcCIKLQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAuLi4gJEVDSE9fQyIgPiY2Ci0JIyBYWFg6IHNob3VsZCBjaGVjayBmb3IgaG9zdHNfY3RsCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIExJQlM9IiRMSUJTIC1sd3JhcCIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAuLi4gIiA+JjY7IH0KKyAgIyBYWFg6IHNob3VsZCBjaGVjayBmb3IgaG9zdHNfY3RsCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkJICAgICAjaW5jbHVkZSA8dGNwZC5oPgotCQkgICAgIGludCBhbGxvd19zZXZlcml0eSA9IDA7Ci0JCSAgICAgaW50IGRlbnlfc2V2ZXJpdHkgID0gMDsKLQorICAgICAjaW5jbHVkZSA8dGNwZC5oPgorICAgICBpbnQgYWxsb3dfc2V2ZXJpdHkgPSAwOworICAgICBpbnQgZGVueV9zZXZlcml0eSAgPSAwOwogaW50CiBtYWluICgpCiB7CkBAIC0yODc3OCwyMDUgKzIzNTE5LDU4IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX0xJQldSQVAgMSIgPj5jb25mZGVmcy5oCiAKLQotCSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLQkgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9VU0VfTElCV1JBUCAxCi1fQUNFT0YKLQotCSAgICB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSBubyAtYSAiJHdpdGhfbGlid3JhcCIgIT0geWVzICYmIF93cmFwbGlicz0iLUwkd2l0aF9saWJ3cmFwL2xpYiIKLQkgICAgX3dyYXBsaWJzPSIkX3dyYXBsaWJzIC1sd3JhcCIKKyAgICAgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gbm8gLWEgIiR3aXRoX2xpYndyYXAiICE9IHllcyAmJiBfd3JhcGxpYnM9Ii1MJHdpdGhfbGlid3JhcC9saWIiCisgICAgIF93cmFwbGlicz0iJF93cmFwbGlicyAtbHdyYXAiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAjIExpbnV4IFJlZEhhdCA2LjEgd29uJ3QgbGluayBsaWJ3cmFwIHdpdGhvdXQgbGlibnNsCisgICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInlwX2dldF9kZWZhdWx0X2RvbWFpbiIgImFjX2N2X2Z1bmNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIgPSB4eWVzOyB0aGVuIDoKIAotCi0JICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLQkgICAgIyBMaW51eCBSZWRIYXQgNi4xIHdvbid0IGxpbmsgbGlid3JhcCB3aXRob3V0IGxpYm5zbAotCSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHlwX2dldF9kZWZhdWx0X2RvbWFpbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB5cF9nZXRfZGVmYXVsdF9kb21haW4uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIHlwX2dldF9kZWZhdWx0X2RvbWFpbiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHlwX2dldF9kZWZhdWx0X2RvbWFpbi4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSB5cF9nZXRfZGVmYXVsdF9kb21haW4gaW5ub2N1b3VzX3lwX2dldF9kZWZhdWx0X2RvbWFpbgotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB5cF9nZXRfZGVmYXVsdF9kb21haW4gKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgeXBfZ2V0X2RlZmF1bHRfZG9tYWluCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgeXBfZ2V0X2RlZmF1bHRfZG9tYWluICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX3lwX2dldF9kZWZhdWx0X2RvbWFpbikgfHwgZGVmaW5lZCAoX19zdHViX19feXBfZ2V0X2RlZmF1bHRfZG9tYWluKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSB5cF9nZXRfZGVmYXVsdF9kb21haW47Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0geXBfZ2V0X2RlZmF1bHRfZG9tYWluOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX3lwX2dldF9kZWZhdWx0X2RvbWFpbj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX3lwX2dldF9kZWZhdWx0X2RvbWFpbiA9IHllczsgdGhlbgotICA6Ci1lbHNlCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgeXBfZ2V0X2RlZmF1bHRfZG9tYWluIGluIC1sbnNsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHlwX2dldF9kZWZhdWx0X2RvbWFpbiBpbiAtbG5zbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgeXBfZ2V0X2RlZmF1bHRfZG9tYWluIGluIC1sbnNsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB5cF9nZXRfZGVmYXVsdF9kb21haW4gaW4gLWxuc2wuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbG5zbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIHlwX2dldF9kZWZhdWx0X2RvbWFpbiAoKTsKIGludAogbWFpbiAoKQogewoteXBfZ2V0X2RlZmF1bHRfZG9tYWluICgpOworcmV0dXJuIHlwX2dldF9kZWZhdWx0X2RvbWFpbiAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW49bm8KKyAgYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW49bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQk5TTCAxCiBfQUNFT0YKQEAgLTI4OTg3LDE5ICsyMzU4MSwxNCBAQAogCiBmaQogCi0JICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwIGxpbmtlZCB3aXRoIC1sbnNsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcCBsaW5rZWQgd2l0aCAtbG5zbC4uLiAkRUNIT19DIiA+JjYKLQkgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcCBsaW5rZWQgd2l0aCAtbG5zbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwIGxpbmtlZCB3aXRoIC1sbnNsLi4uICIgPiY2OyB9CisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkJICAgICAgICAgI2luY2x1ZGUgPHRjcGQuaD4KLQkJICAgICAgICAgaW50IGFsbG93X3NldmVyaXR5ID0gMDsKLQkgICAgICAgICAgICAgICAgIGludCBkZW55X3NldmVyaXR5ICA9IDA7Ci0KKwkjaW5jbHVkZSA8dGNwZC5oPgorCWludCBhbGxvd19zZXZlcml0eSA9IDA7CisJaW50IGRlbnlfc2V2ZXJpdHkgID0gMDsKIGludAogbWFpbiAoKQogewpAQCAtMjkwMDgsMjY3MyArMjM1OTcsMzYyIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotCQkJY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9VU0VfTElCV1JBUCAxCi1fQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkkYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9MSUJXUkFQIDEiID4+Y29uZmRlZnMuaAogCi0JCQl0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSBubyAtYSAiJHdpdGhfbGlid3JhcCIgIT0geWVzICYmIF93cmFwbGlicz0iLUwkd2l0aF9saWJ3cmFwL2xpYiIKLQkJCV93cmFwbGlicz0iJF93cmFwbGlicyAtbHdyYXAgLWxuc2wiCisJdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gbm8gLWEgIiR3aXRoX2xpYndyYXAiICE9IHllcyAmJiBfd3JhcGxpYnM9Ii1MJHdpdGhfbGlid3JhcC9saWIiCisJX3dyYXBsaWJzPSIkX3dyYXBsaWJzIC1sd3JhcCAtbG5zbCIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotCQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJYXNfZm5fZXJyb3IgJD8gIkFza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiAiJExJTkVOTyIgNQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgTEFHRU5UTElCUz0iJF93cmFwbGlicyIKLSAgICBDUFBGTEFHUz0ke19jcHBmbGFnc30KLSAgICBMREZMQUdTPSR7X2xkZmxhZ3N9Ci0gICAgTElCUz0ke19saWJzfQotICBmaQotCi1maTsKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIExBR0VOVExJQlM9IiRfd3JhcGxpYnMiCisgIENQUEZMQUdTPSR7X2NwcGZsYWdzfQorICBMREZMQUdTPSR7X2xkZmxhZ3N9CisgIExJQlM9JHtfbGlic30KK2ZpCiAKIAotCi1mb3IgYWNfaGVhZGVyIGluIHJwbS9ycG1saWIuaCBycG0vaGVhZGVyLmgKKyMjCisjICAgbXlzcWwKKyMjCitpZiB0ZXN0ICJ4JHdpdGhfbXlzcWwiID0gInh5ZXMiIDsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBteXNxbF9jb25maWcKIGRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTVlTUUxDT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9CisgIGNhc2UgJE1ZU1FMQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX01ZU1FMQ09ORklHPSIkTVlTUUxDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX01ZU1FMQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKICAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Citkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKKyAgOzsKIGVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK01ZU1FMQ09ORklHPSRhY19jdl9wYXRoX01ZU1FMQ09ORklHCitpZiB0ZXN0IC1uICIkTVlTUUxDT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTVlTUUxDT05GSUciID4mNQorJGFzX2VjaG8gIiRNWVNRTENPTkZJRyIgPiY2OyB9CiBlbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKworICB0ZXN0IC1uICIkTVlTUUxDT05GSUciICYmIGJyZWFrCiBkb25lCiAKKyAgdGVzdCAteCAiJE1ZU1FMQ09ORklHIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIG15c3FsX2NvbmZpZyBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgTXlTUUwgc3VwcG9ydCIgIiRMSU5FTk8iIDUKKyAgTVlTUUxfTElCUz1gJE1ZU1FMQ09ORklHIC0tbGlic2AKKyAgTVlTUUxfSU5DTFVERVM9YCRNWVNRTENPTkZJRyAtLWluY2x1ZGVgCisgIF9saWJzPSIke0xJQlN9IgorICBfY3BwZmxhZ3M9IiR7Q1BQRkxBR1N9IgorICBMSUJTPSIke0xJQlN9ICR7TVlTUUxfTElCU30iCisgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke01ZU1FMX0lOQ0xVREVTfSIKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm15c3FsLmgiICJhY19jdl9oZWFkZXJfbXlzcWxfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbXlzcWxfaCIgPSB4eWVzOyB0aGVuIDoKIAotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnBtL3JwbWxpYi5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJwbS9ycG1saWIuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oIiA+JjYKIGVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcnBtL3JwbWxpYi5oIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHJwbS9ycG1saWIuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8cnBtL3JwbWxpYi5oPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcnBtL3JwbWxpYi5oIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcnBtL3JwbWxpYi5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cnBtL3JwbWxpYi5oPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL3JwbWxpYi5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL3JwbWxpYi5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL3JwbWxpYi5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL3JwbWxpYi5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL3JwbWxpYi5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL3JwbWxpYi5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL3JwbWxpYi5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBycG0vcnBtbGliLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnBtL3JwbWxpYi5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2g9JGFjX2hlYWRlcl9wcmVwcm9jCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2giID4mNgotCi1maQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCA9IHllczsgdGhlbgotICBycG1saWJfaD15ZXMKLWVsc2UKLSAgcnBtbGliX2g9bm8KKyAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIG15c3FsLmggYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIE15U1FMIHN1cHBvcnQiICIkTElORU5PIiA1CiBmaQogCiAKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJwbS9oZWFkZXIuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBycG0vaGVhZGVyLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHJwbS9oZWFkZXIuaCB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBycG0vaGVhZGVyLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPHJwbS9oZWFkZXIuaD4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHJwbS9oZWFkZXIuaCBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHJwbS9oZWFkZXIuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHJwbS9oZWFkZXIuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL2hlYWRlci5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL2hlYWRlci5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL2hlYWRlci5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnBtL2hlYWRlci5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJwbS9oZWFkZXIuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oPSRhY19oZWFkZXJfcHJlcHJvYwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oIiA+JjYKLQotZmkKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2ggPSB5ZXM7IHRoZW4KLSAgcnBtaGVhZGVyX2g9eWVzCi1lbHNlCi0gIHJwbWhlYWRlcl9oPW5vCi1maQotCi0KLQotaWYgdGVzdCAieCRycG1oZWFkZXJfaCIgPSAieG5vIiAtbyAieCRycG1saWJfaCIgPSAieG5vIiA7IHRoZW4KLSAgaWYgdGVzdCAieCR3aXRoX3JwbSIgPSAieHllcyIgOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQ291bGQgbm90IGZpbmQgZWl0aGVyIHRoZSBSUE0gaGVhZGVyIGZpbGVzIG5lZWRlZCBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgUlBNIHN1cHBvcnQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQ291bGQgbm90IGZpbmQgZWl0aGVyIHRoZSBSUE0gaGVhZGVyIGZpbGVzIG5lZWRlZCBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgUlBNIHN1cHBvcnQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZWxzZQotICAgIHdpdGhfcnBtPW5vCi0gIGZpCi1maQotCi0jCi0jIHJwbSBsaWJyYXJpZXMgb25seSBuZWVkZWQgZm9yIHRoZSBob3N0IHJlc291cmNlcyBtaWIgc29mdHdhcmUKLSMgaW5zdGFsbGVkIHRhYmxlcyAob24gbGludXggaW4gcGFydGljdWxhcikKLSMKLWlmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iICYmIFwKLSAgICAgICAgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIGhvc3QvaHJfc3dpbnN0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgIyBBUkcuICBSUE0gaXMgYSByZWFsIHBhaW4uCi0gICMgRldJVyBsaWJycG0ubGEsIGxpYnJwbWlvLmxhLCBhbmQgbGlicG9wdC5sYSBoYXZlIGNvcnJlY3QgZGVwZW5kZW5jaWVzLgotICBfcnBtbGlicz0iIgotCi0gICMgcnBtLTQuMC54IG5lZWRzIHJwbWlvLgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJwbUdldFBhdGggaW4gLWxycG1pbyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBycG1HZXRQYXRoIGluIC1scnBtaW8uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9ycG1pb19ycG1HZXRQYXRoK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scnBtaW8gJF9ycG1saWJzICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBNWV9JTklUKCkgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBNWV9JTklUKCkgd29ya3MuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHJwbUdldFBhdGggKCk7CisgICAgI2luY2x1ZGUgPG15X2dsb2JhbC5oPgorICAgICAgICAjaW5jbHVkZSA8bXlfc3lzLmg+CiBpbnQKIG1haW4gKCkKIHsKLXJwbUdldFBhdGggKCk7CitNWV9JTklUKCJteV9pbml0X3Rlc3QiKQogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9ycG1pb19ycG1HZXRQYXRoPXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIAotYWNfY3ZfbGliX3JwbWlvX3JwbUdldFBhdGg9bm8KKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlJPS0VOX0xJQk1ZU1FMQ0xJRU5UIDEiID4+Y29uZmRlZnMuaAorCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3JwbWlvX3JwbUdldFBhdGgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9ycG1pb19ycG1HZXRQYXRoIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9ycG1pb19ycG1HZXRQYXRoID0geWVzOyB0aGVuCi0gIF9ycG1saWJzPSItbHJwbWlvICRfcnBtbGlicyIKLWZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBDUFBGTEFHUz0iJHtfY3BwZmxhZ3N9IgorICBMSUJTPSIke19saWJzfSIKIAotCi0gICMgbm93IGNoZWNrIGZvciBycG0gdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcmllcy4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBycG1HZXRGaWxlc3lzdGVtTGlzdCBpbiAtbHJwbSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBycG1HZXRGaWxlc3lzdGVtTGlzdCBpbiAtbHJwbS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3JwbV9ycG1HZXRGaWxlc3lzdGVtTGlzdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHJwbSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBycG1HZXRGaWxlc3lzdGVtTGlzdCAoKTsKLWludAotbWFpbiAoKQotewotcnBtR2V0RmlsZXN5c3RlbUxpc3QgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3JwbV9ycG1HZXRGaWxlc3lzdGVtTGlzdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3JwbV9ycG1HZXRGaWxlc3lzdGVtTGlzdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9ycG1fcnBtR2V0RmlsZXN5c3RlbUxpc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9ycG1fcnBtR2V0RmlsZXN5c3RlbUxpc3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3JwbV9ycG1HZXRGaWxlc3lzdGVtTGlzdCA9IHllczsgdGhlbgotCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJSUE0gMQotX0FDRU9GCi0KLSAgICBMTUlCTElCUz0iLWxycG0gJF9ycG1saWJzICRMTUlCTElCUyIKLSAgICBDRkxBR1M9IiRDRkxBR1MgLUkvdXNyL2luY2x1ZGUvcnBtIgorICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgIE1ZU1FMIFRyYXAgTG9nZ2luZzogICAgICAgICBlbmFibGVkCitFT0YKIAogZWxzZQogCi0gICAgIyBycG0tNC4wLjMgbGlicnBtZGIgYWN0dWFsbHkgY29udGFpbnMgd2hhdCB3ZSBuZWVkLgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnBtZGJPcGVuIGluIC1scnBtZGIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnBtZGJPcGVuIGluIC1scnBtZGIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9ycG1kYl9ycG1kYk9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxycG1kYiAtbHJwbSAkX3JwbWxpYnMgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBycG1kYk9wZW4gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJwbWRiT3BlbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfcnBtZGJfcnBtZGJPcGVuPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfcnBtZGJfcnBtZGJPcGVuPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3JwbWRiX3JwbWRiT3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3JwbWRiX3JwbWRiT3BlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcnBtZGJfcnBtZGJPcGVuID0geWVzOyB0aGVuCi0KLSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCUlBNIDEKLV9BQ0VPRgotCi0gICAgICBMTUlCTElCUz0iLWxycG1kYiAtbHJwbSAkX3JwbWxpYnMgJExNSUJMSUJTIgotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1JL3Vzci9pbmNsdWRlL3JwbSIKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICBNWVNRTCBUcmFwIExvZ2dpbmc6ICAgICAgICAgdW5hdmFpbGFibGUKK0VPRgogCiBmaQogCiAKLWZpCiAKIAotICAjIHJwbSA0LjYgaGFzIGluY29tcGF0aWJsZSBBUEksIHR1cm4gb24gdGhlIGxlZ2FjeSBvbmUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgaGVhZGVyR2V0RW50cnkgaXMgZGVjbGFyZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGhlYWRlckdldEVudHJ5IGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfaGVhZGVyR2V0RW50cnkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cnBtL3JwbWxpYi5oPgotCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBoZWFkZXJHZXRFbnRyeQotICBjaGFyICpwID0gKGNoYXIgKikgaGVhZGVyR2V0RW50cnk7Ci0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hhdmVfZGVjbF9oZWFkZXJHZXRFbnRyeT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGF2ZV9kZWNsX2hlYWRlckdldEVudHJ5PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfaGVhZGVyR2V0RW50cnkiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9oZWFkZXJHZXRFbnRyeSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfaGVhZGVyR2V0RW50cnkgPSB5ZXM7IHRoZW4KLSAgOgotZWxzZQotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBfUlBNXzRfNF9DT01QQVQKLV9BQ0VPRgotCi1maQotCi1maQotCi0jIGxpYmt2bQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrdm1fcmVhZCBpbiAtbGt2bSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrdm1fcmVhZCBpbiAtbGt2bS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2t2bV9rdm1fcmVhZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGt2bSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBrdm1fcmVhZCAoKTsKLWludAotbWFpbiAoKQotewota3ZtX3JlYWQgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2t2bV9rdm1fcmVhZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2t2bV9rdm1fcmVhZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rdm1fa3ZtX3JlYWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9rdm1fa3ZtX3JlYWQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2t2bV9rdm1fcmVhZCA9IHllczsgdGhlbgotICBfbGlia3ZtPSItbGt2bSIKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3ZtX29wZW5maWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrdm1fb3BlbmZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2t2bV9vcGVuZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUga3ZtX29wZW5maWxlcyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGt2bV9vcGVuZmlsZXMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUga3ZtX29wZW5maWxlcyBpbm5vY3VvdXNfa3ZtX29wZW5maWxlcwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBrdm1fb3BlbmZpbGVzICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGt2bV9vcGVuZmlsZXMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBrdm1fb3BlbmZpbGVzICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2t2bV9vcGVuZmlsZXMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2t2bV9vcGVuZmlsZXMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGt2bV9vcGVuZmlsZXM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0ga3ZtX29wZW5maWxlczsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2t2bV9vcGVuZmlsZXM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfa3ZtX29wZW5maWxlcz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfa3ZtX29wZW5maWxlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19rdm1fb3BlbmZpbGVzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfa3ZtX29wZW5maWxlcyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0tWTV9PUEVORklMRVMgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrdm1fb3BlbmZpbGVzIGluIC1sa3ZtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGt2bV9vcGVuZmlsZXMgaW4gLWxrdm0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9rdm1fa3ZtX29wZW5maWxlcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGt2bSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBrdm1fb3BlbmZpbGVzICgpOwotaW50Ci1tYWluICgpCi17Ci1rdm1fb3BlbmZpbGVzICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9rdm1fa3ZtX29wZW5maWxlcz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2t2bV9rdm1fb3BlbmZpbGVzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2t2bV9rdm1fb3BlbmZpbGVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfa3ZtX2t2bV9vcGVuZmlsZXMiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2t2bV9rdm1fb3BlbmZpbGVzID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfS1ZNX09QRU5GSUxFUyAxCi1fQUNFT0YKLQotCV9saWJrdm09Ii1sa3ZtIgotZmkKLQotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrdm1fZ2V0cHJvY3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3ZtX2dldHByb2NzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2t2bV9nZXRwcm9jcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBrdm1fZ2V0cHJvY3MgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBrdm1fZ2V0cHJvY3MuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUga3ZtX2dldHByb2NzIGlubm9jdW91c19rdm1fZ2V0cHJvY3MKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIga3ZtX2dldHByb2NzICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGt2bV9nZXRwcm9jcwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGt2bV9nZXRwcm9jcyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9rdm1fZ2V0cHJvY3MpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2t2bV9nZXRwcm9jcykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0ga3ZtX2dldHByb2NzOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGt2bV9nZXRwcm9jczsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2t2bV9nZXRwcm9jcz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19rdm1fZ2V0cHJvY3M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2t2bV9nZXRwcm9jcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19rdm1fZ2V0cHJvY3MiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19rdm1fZ2V0cHJvY3MgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9LVk1fR0VUUFJPQ1MgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrdm1fZ2V0cHJvY3MgaW4gLWxrdm0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3ZtX2dldHByb2NzIGluIC1sa3ZtLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfa3ZtX2t2bV9nZXRwcm9jcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGt2bSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBrdm1fZ2V0cHJvY3MgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWt2bV9nZXRwcm9jcyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfa3ZtX2t2bV9nZXRwcm9jcz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2t2bV9rdm1fZ2V0cHJvY3M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfa3ZtX2t2bV9nZXRwcm9jcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2t2bV9rdm1fZ2V0cHJvY3MiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2t2bV9rdm1fZ2V0cHJvY3MgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9LVk1fR0VUUFJPQ1MgMQotX0FDRU9GCi0KLQlfbGlia3ZtPSItbGt2bSIKLWZpCi0KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3ZtX2dldHN3YXBpbmZvIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGt2bV9nZXRzd2FwaW5mby4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm8rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUga3ZtX2dldHN3YXBpbmZvIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMga3ZtX2dldHN3YXBpbmZvLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGt2bV9nZXRzd2FwaW5mbyBpbm5vY3VvdXNfa3ZtX2dldHN3YXBpbmZvCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGt2bV9nZXRzd2FwaW5mbyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBrdm1fZ2V0c3dhcGluZm8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBrdm1fZ2V0c3dhcGluZm8gKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfa3ZtX2dldHN3YXBpbmZvKSB8fCBkZWZpbmVkIChfX3N0dWJfX19rdm1fZ2V0c3dhcGluZm8pCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGt2bV9nZXRzd2FwaW5mbzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBrdm1fZ2V0c3dhcGluZm87Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm89eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm8iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfS1ZNX0dFVFNXQVBJTkZPIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3ZtX2dldHN3YXBpbmZvIGluIC1sa3ZtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGt2bV9nZXRzd2FwaW5mbyBpbiAtbGt2bS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2t2bV9rdm1fZ2V0c3dhcGluZm8rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxrdm0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIga3ZtX2dldHN3YXBpbmZvICgpOwotaW50Ci1tYWluICgpCi17Ci1rdm1fZ2V0c3dhcGluZm8gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2t2bV9rdm1fZ2V0c3dhcGluZm89eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9rdm1fa3ZtX2dldHN3YXBpbmZvPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2t2bV9rdm1fZ2V0c3dhcGluZm8iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9rdm1fa3ZtX2dldHN3YXBpbmZvIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9rdm1fa3ZtX2dldHN3YXBpbmZvID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfS1ZNX0dFVFNXQVBJTkZPIDEKLV9BQ0VPRgotCi0JX2xpYmt2bT0iLWxrdm0iCi1maQotCi1maQotCi1pZiB0ZXN0ICJ4JHtfbGlia3ZtfSIgIT0gIngiOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCS1ZNIDEKLV9BQ0VPRgotCi0JTEFHRU5UTElCUz0iJExBR0VOVExJQlMgJHtfbGlia3ZtfSIKLWZpCi0KLSMgRFlOQU1JQyBNT0RVTEUgU1VQUE9SVAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBkbG9wZW4gdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBkbG9wZW4uCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgZGxvcGVuIGlubm9jdW91c19kbG9wZW4KLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZGxvcGVuICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGRsb3BlbgotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGRsb3BlbiAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9kbG9wZW4pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2Rsb3BlbikKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gZGxvcGVuOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGRsb3BlbjsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2Rsb3Blbj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19kbG9wZW49bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19kbG9wZW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19kbG9wZW4gPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ETE9QRU4gMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGRsICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGRsb3BlbiAoKTsKLWludAotbWFpbiAoKQotewotZGxvcGVuICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9kbF9kbG9wZW49bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ETE9QRU4gMQotX0FDRU9GCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJETCAxCi1fQUNFT0YKLQotCUxNSUJMSUJTPSIke0xNSUJMSUJTfSAtbGRsIgotZmkKLQotZmkKLQorIyMKKyMgICBOb24tbGlicmFyeSBjaGVja3MKKyMjCiAKICMgbmxpc3QKLQotCi0KIGZvciBhY19mdW5jIGluIG5saXN0IG5saXN0NjQga25saXN0Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQogX0FDRU9GCiAKIGZpCiBkb25lCiAKIAotIyB3aGV0aGVyIHdlIG5lZWQgLWxkZXZzdGF0IGZvciBkaXNraW8gTUlCCi1lY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgdWNkLXNubXAvZGlza2lvICIgPi9kZXYvbnVsbAotaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KLQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldGRldnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0ZGV2cy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19nZXRkZXZzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGdldGRldnMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXRkZXZzLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGdldGRldnMgaW5ub2N1b3VzX2dldGRldnMKIAotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZ2V0ZGV2cyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBnZXRkZXZzCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0ZGV2cyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9nZXRkZXZzKSB8fCBkZWZpbmVkIChfX3N0dWJfX19nZXRkZXZzKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBnZXRkZXZzOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGdldGRldnM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19nZXRkZXZzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2dldGRldnM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2dldGRldnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZ2V0ZGV2cyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2dldGRldnMgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9HRVRERVZTIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0ZGV2cyBpbiAtbGRldnN0YXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0ZGV2cyBpbiAtbGRldnN0YXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kZXZzdGF0X2dldGRldnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkZXZzdGF0ICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldGRldnMgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWdldGRldnMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2RldnN0YXRfZ2V0ZGV2cz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2RldnN0YXRfZ2V0ZGV2cz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kZXZzdGF0X2dldGRldnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kZXZzdGF0X2dldGRldnMiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2RldnN0YXRfZ2V0ZGV2cyA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0dFVERFVlMgMQotX0FDRU9GCi0KLQkJTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sZGV2c3RhdCIKLWZpCi0KLWZpCi0KLQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldGRldnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0ZGV2cy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19nZXRkZXZzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGdldGRldnMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXRkZXZzLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGdldGRldnMgaW5ub2N1b3VzX2dldGRldnMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZ2V0ZGV2cyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBnZXRkZXZzCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0ZGV2cyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9nZXRkZXZzKSB8fCBkZWZpbmVkIChfX3N0dWJfX19nZXRkZXZzKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBnZXRkZXZzOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGdldGRldnM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19nZXRkZXZzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2dldGRldnM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2dldGRldnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZ2V0ZGV2cyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2dldGRldnMgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERVZTVEFUX0dFVERFVlMgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkZXZzdGF0X2dldGRldnMgaW4gLWxkZXZzdGF0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRldnN0YXRfZ2V0ZGV2cyBpbiAtbGRldnN0YXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kZXZzdGF0X2RldnN0YXRfZ2V0ZGV2cytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGRldnN0YXQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZGV2c3RhdF9nZXRkZXZzICgpOwotaW50Ci1tYWluICgpCi17Ci1kZXZzdGF0X2dldGRldnMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2RldnN0YXRfZGV2c3RhdF9nZXRkZXZzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZGV2c3RhdF9kZXZzdGF0X2dldGRldnM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGV2c3RhdF9kZXZzdGF0X2dldGRldnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kZXZzdGF0X2RldnN0YXRfZ2V0ZGV2cyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGV2c3RhdF9kZXZzdGF0X2dldGRldnMgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERVZTVEFUX0dFVERFVlMgMQotX0FDRU9GCi0KLQkJTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sZGV2c3RhdCIKLWZpCi0KLWZpCi0KLWZpCi0KLSMgTE0tU0VOU09SUy1NSUIgc3VwcG9ydAotZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIHVjZC1zbm1wL2xtU2Vuc29ycyAiID4gL2Rldi9udWxsCi1pZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgotICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNlbnNvcnMgc3VwcG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzZW5zb3JzIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2Ci0gICAgICAgIGNhc2UgJHRhcmdldF9vcyBpbgotICAgICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgICAgaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcGljbF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGljbC5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBpY2wuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3BpY2xfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfcGljbF9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfcGljbF9oIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcGljbC5oIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHBpY2wuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8cGljbC5oPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcGljbC5oIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcGljbC5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cGljbC5oPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHBpY2wuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBpY2wuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBwaWNsLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwaWNsLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHBpY2wuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcGljbC5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcGljbC5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcGljbC5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHBpY2wuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcGljbC5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcGljbC5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcGljbC5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHBpY2wuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwaWNsLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHBpY2wuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcGljbC5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwaWNsLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcGljbC5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcGljbF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9waWNsX2g9JGFjX2hlYWRlcl9wcmVwcm9jCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9waWNsX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9waWNsX2giID4mNgotCi1maQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3BpY2xfaCA9IHllczsgdGhlbgotICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxwaWNsIgotZmkKLQotCi0KLWZvciBhY19oZWFkZXIgaW4gcGljbC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotICAgICAgICAgICAgOzsKLSAgICAgICAgKikKLSAgICAgICAgICAgIGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2Vuc29ycy9zZW5zb3JzLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2Vuc29ycy9zZW5zb3JzLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNlbnNvcnMvc2Vuc29ycy5oIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNlbnNvcnMvc2Vuc29ycy5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDxzZW5zb3JzL3NlbnNvcnMuaD4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNlbnNvcnMvc2Vuc29ycy5oIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2Vuc29ycy9zZW5zb3JzLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzZW5zb3JzL3NlbnNvcnMuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzZW5zb3JzL3NlbnNvcnMuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzZW5zb3JzL3NlbnNvcnMuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaD0kYWNfaGVhZGVyX3ByZXByb2MKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2giID4mNgotCi1maQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oID0geWVzOyB0aGVuCi0gIDoKLWVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCBzZW5zb3JzL3NlbnNvcnMuaCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBhc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIHNlbnNvcnMvc2Vuc29ycy5oIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi0KLSAgICAgICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgaW4gLWxzZW5zb3JzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzIGluIC1sc2Vuc29ycy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3NlbnNvcnNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxzZW5zb3JzICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzICgpOwotaW50Ci1tYWluICgpCi17Ci1zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfc2Vuc29yc19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3NlbnNvcnNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc2Vuc29yc19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3NlbnNvcnNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3NlbnNvcnNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgPSB5ZXM7IHRoZW4KLQotCQkgICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxzZW5zb3JzIiA7Ci0KLWVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCAtbHNlbnNvcnMiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCAtbHNlbnNvcnMiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLSAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLWZpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUEVSTCBTVVBQT1JUCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KICMKLSMgdGVzdCB0byBzZWUgaWYgd2UgY2FuIGF0dGVtcHQgdG8gYnVpbGQgZW1iZWRkZWQgUGVybCBzbyBmYXIKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgICBQZXJsICYgUHl0aG9uIHN1cHBvcnQKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIENoZWNrIHdoZXRoZXIgTmV0LVNOTVAgY29uZmlndXJhdGlvbiB3aWxsIHN1cHBvcnQgUGVybAorIyMKKworIyAgIElucHV0czoKKyMgICAgICAgaW5zdGFsbF9wZXJsOiAgIHdoZXRoZXIgb3Igbm90IHRvIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcy9uby90cnkgICAoaS5lLiAnbWF5YmUnIC0gdGhlIGRlZmF1bHQpCisjICAgICAgIGVtYmVkX3Blcmw6ICAgICB3aGV0aGVyIG9yIG5vdCB0byBlbWJlZCBQZXJsIHN1cHBvcnQgd2l0aGluIHRoZSBhZ2VudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcy9uby90cnkgICAoaS5lLiAnbWF5YmUnIC0gdGhlIGRlZmF1bHQpCisjCisjICAgICAgIGFjX2N2X3BhdGhfUEVSTFBST0c6ICAgIFBhdGggdG8gcGVybCBiaW5hcnkKKworCisjICAgICAgIEVtYmVkZGVkIFBlcmwgcmVxdWlyZXMgUGVybCBtb2R1bGVzLCBhbmQgdGhlIHBlcmwgYmluYXJ5CiAjCiBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieG5vIiA7IHRoZW4KLSAgICBpbnN0YWxsX3Blcmw9InRyeSIKLSAgZmkKLSAgaWYgdGVzdCAieCRhY19jdl9wYXRoX1BFUkxQUk9HIiA9ICJ4IiAtbyAieCRhY19jdl9wYXRoX1BFUkxQUk9HIiA9ICJ4bm8iIDsgdGhlbgotICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgZW1iZWRfcGVybD0ibm8iCi0gIGZpCisgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInhubyIgOyB0aGVuCisgICAgICAgIGluc3RhbGxfcGVybD0idHJ5IgorICAgIGZpCisgICAgaWYgdGVzdCAieCRhY19jdl9wYXRoX1BFUkxQUk9HIiA9ICJ4IiAtbyAieCRhY19jdl9wYXRoX1BFUkxQUk9HIiA9ICJ4bm8iIDsgdGhlbgorICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICBmaQogZmkKIAotCisjICAgICAgIFBlcmwgbW9kdWxlcyByZXF1aXJlIHRoZSBwZXJsIGJpbmFyeQogIwotIyBFbWJlZGRlZCBQZXJsIHNwZWNpZmljIHN0dWZmCi0jCi0KLSMgdGVzdCBwZXJsIHByb2cKIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KICAgICBteXBlcmw9JGFjX2N2X3BhdGhfUEVSTFBST0cKICAgICBpZiB0ZXN0ICRteXBlcmwgPSAibm8iIDsgdGhlbgotICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgZWxzZQotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIHJlcXVlc3RlZCBidXQgbm8gcGVybCBleGVjdXRhYmxlIGZvdW5kIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgcmVxdWVzdGVkIGJ1dCBubyBwZXJsIGV4ZWN1dGFibGUgZm91bmQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICItLWVuYWJsZS1lbWJlZGRlZC1wZXJsIHJlcXVlc3RlZCBidXQgbm8gcGVybCBleGVjdXRhYmxlIGZvdW5kIiAiJExJTkVOTyIgNQorICAgICAgICBmaQogICAgIGZpCiBmaQogCi0jIHRlc3QgZm9yIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydAorIyAgICAgICBQZXJsIG1vZHVsZXMgcmVxdWlyZSBzaGFyZWQgbGlicmFyaWVzCisjCiBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgIyBlbWJlZGRlZCBQZXJsIHJlcXVpcmVzIHNoYXJlZCBsaWJyYXJpZXMKICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9zaGFyZWQiICE9ICJ4eWVzIjsgdGhlbgotICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgZWxzZQotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBQZXJsIHN1cHBvcnQgcmVxdWlyZXMgLS1lbmFibGUtc2hhcmVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFBlcmwgc3VwcG9ydCByZXF1aXJlcyAtLWVuYWJsZS1zaGFyZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJQZXJsIHN1cHBvcnQgcmVxdWlyZXMgLS1lbmFibGUtc2hhcmVkIiAiJExJTkVOTyIgNQorICAgICAgICBmaQogICAgIGZpCiBmaQogCisjICAgICAgIFBlcmwgbW9kdWxlcyBjYW4gb25seSBiZSBpbnN0YWxsZWQgZnJvbSB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlCisjCiBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBhcmUgaW4gdGhlIHNvdXJjZSB0cmVlIHNvIHdlIGNhbiBpbnN0YWxsIFBlcmwgbW9kdWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGFyZSBpbiB0aGUgc291cmNlIHRyZWUgc28gd2UgY2FuIGluc3RhbGwgUGVybCBtb2R1bGVzLi4uICRFQ0hPX0MiID4mNgotICBpZiB0ZXN0ICJ4JHNyY2RpciIgPSAieC4iIC1vIC1kIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZSA7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBZZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9WWVzIiA+JjYKLSAgZWxzZQotICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBObyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ObyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBhcmUgaW4gdGhlIHNvdXJjZSB0cmVlIHNvIHdlIGNhbiBpbnN0YWxsIFBlcmwgbW9kdWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBhcmUgaW4gdGhlIHNvdXJjZSB0cmVlIHNvIHdlIGNhbiBpbnN0YWxsIFBlcmwgbW9kdWxlcy4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkc3JjZGlyIiA9ICJ4LiIgLW8gLWQgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlIDsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogWWVzIiA+JjUKKyRhc19lY2hvICJZZXMiID4mNjsgfQogICAgIGVsc2UKLSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFBlcmwgbW9kdWxlcyBjYW4gbm90IGJlIGJ1aWx0IG91dHNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogUGVybCBtb2R1bGVzIGNhbiBub3QgYmUgYnVpbHQgb3V0c2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE5vIiA+JjUKKyRhc19lY2hvICJObyIgPiY2OyB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJQZXJsIG1vZHVsZXMgY2FuIG5vdCBiZSBidWlsdCBvdXRzaWRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IiAiJExJTkVOTyIgNQorICAgICAgICBmaQogICAgIGZpCi0gIGZpCiBmaQogCi0jIGNoZWNrIHRoZSBQZXJsIGNvbXBpbGVyIG5hbWUKKworIyAgIFRoZSByZXN0IG9mIHRoZSBQZXJsLXJlbGF0ZWQgY2hlY2tzIGFyZW4ndCByZWxldmFudAorIyAgICAgICBpZiB3ZSdyZSBub3QgdXNpbmcgdGhlIFBlcmwgbW9kdWxlcworIwogaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICMKLSAgICAjIFBlcmwgY2MgY2hlY2tzCisKKworIyMKKyMgICBDaGVjayBjb21waWxlciBjb21wYXRhYmlsaXR5CisjIworCisgICAgIyAgICAgICBXaGF0IGNvbXBpbGVyIHdhcyB1c2VkIHRvIGJ1aWxkIHRoZSBwZXJsIGJpbmFyeT8KICAgICAjCiAgICAgaWYgdGVzdCAieGVuYWJsZV9wZXJsX2NjX2NoZWNrcyIgIT0gInhubyIgOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFBlcmwgY2MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUGVybCBjYy4uLiAkRUNIT19DIiA+JjYKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUGVybCBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUGVybCBjYy4uLiAiID4mNjsgfQogCi0gICAgICBQRVJMQ0M9YCRteXBlcmwgLVY6Y2MgfCAkbXlwZXJsIC1uIC1lICdwcmludCBpZiAocy9eXHMqY2M9LihbLT1cd1xzXC9dKykuO1xzKi8kMS8pOydgCisgICAgICAgIFBFUkxDQz1gJG15cGVybCAtVjpjYyB8ICRteXBlcmwgLW4gLWUgJ3ByaW50IGlmIChzL15ccypjYz0uKFstPVx3XHNcL10rKS47XHMqLyQxLyk7J2AKIAotICAgICAgaWYgdGVzdCAieCRQRVJMQ0MiICE9ICJ4IiA7IHRoZW4KLSAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFBFUkxDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kUEVSTENDIiA+JjYKLSAgICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgIGlmIHRlc3QgIngkUEVSTENDIiAhPSAieCIgOyB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBFUkxDQyIgPiY1CiskYXNfZWNobyAiJFBFUkxDQyIgPiY2OyB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBjb21waWxlciB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIHRvIGJ1aWxkIHdpdGhvdXQgUGVybC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQ291bGQgbm90IGRldGVybWluZSB0aGUgY29tcGlsZXIgdGhhdCB3YXMgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS13aXRob3V0LXBlcmwtbW9kdWxlcyB0byBidWlsZCB3aXRob3V0IFBlcmwuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGRldGVybWluZSB0aGUgY29tcGlsZXIgdGhhdCB3YXMgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS13aXRob3V0LXBlcmwtbW9kdWxlcyB0byBidWlsZCB3aXRob3V0IFBlcmwuIiAiJExJTkVOTyIgNQorICAgICAgICAgICAgZmkKICAgICAgICAgZmkKLSAgICAgIGZpCi1maQorICAgIGZpCiAKLSMgY2hlY2sgdGhlIFBlcmwgY29tcGlsZXIgY29tcGF0aWJpbGl0eQotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJFBFUkxDQyBpcyBhIEdOVSBDIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkUEVSTENDIGlzIGEgR05VIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2Ci0gICAgICBPTERDQz0kQ0MKLSAgICAgIENDPSIkUEVSTENDIgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgIyAgICAgICBXYXMgR0NDIHVzZWQgdG8gYnVpbGQgdGhlIHBlcmwgYmluYXJ5PworICAgICMKKyAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkUEVSTENDIGlzIGEgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkUEVSTENDIGlzIGEgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KKyAgICAgICAgT0xEQ0M9JENDCisgICAgICAgIENDPSIkUEVSTENDIgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKKwogaW50CiBtYWluICgpCiB7CkBAIC0zMTY4Nyw0ODkgKzIzOTY1LDIwOSBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBwZXJsY2NfaXNfZ251PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1wZXJsY2NfaXNfZ251PW5vCisgIHBlcmxjY19pc19nbnU9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkcGVybGNjX2lzX2dudSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kcGVybGNjX2lzX2dudSIgPiY2Ci0gICAgICBDQz0kT0xEQ0MKLSAgICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiAtYSAieCRwZXJsY2NfaXNfZ251IiA9ICJ4bm8iIDsgdGhlbgotICAgICAgCWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgIAkgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICAJZWxzZQotICAgICAgCSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVGhpcyBidWlsZCBpcyB1c2luZyBhIEdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIG5vbi1HTlUgKG9yIG5vbi13b3JraW5nKSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogVGhpcyBidWlsZCBpcyB1c2luZyBhIEdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIG5vbi1HTlUgKG9yIG5vbi13b3JraW5nKSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgIAlmaQotICAgICAgZmkKLWZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRwZXJsY2NfaXNfZ251IiA+JjUKKyRhc19lY2hvICIkcGVybGNjX2lzX2dudSIgPiY2OyB9CisgICAgICAgIENDPSRPTERDQwogCi0jIGNoZWNrIGlmIHRoZXkncmUgYm90aCBnbnUKLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyIgLWEgIngkcGVybGNjX2lzX2dudSIgPSAieHllcyIgOyB0aGVuCi0gICAgICAJaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgCSAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIAllbHNlCi0gICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVGhpcyBidWlsZCBpcyB1c2luZyBhIG5vbi1HTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBHTlUgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFRoaXMgYnVpbGQgaXMgdXNpbmcgYSBub24tR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgR05VIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgCWZpCi0gICAgICBmaQotZmkKKyAgICAgICAgIyAgICAgICBDaGVjayBjb21wYXRhYmlsaXR5OiAgR251IE5ldC1TTk1QIHZzIE5vbi1HbnUgcGVybAorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiAtYSAieCRwZXJsY2NfaXNfZ251IiA9ICJ4bm8iIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgCSAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgIAkgICAgZWxzZQorICAgICAgCSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIlRoaXMgYnVpbGQgaXMgdXNpbmcgYSBHTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBub24tR05VIChvciBub24td29ya2luZykgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuIiAiJExJTkVOTyIgNQorICAgICAgCSAgICBmaQorICAgICAgICBmaQorICAgIGZpCiAKLSMgd2UgaGF2ZSBlbm91Z2ggc3VwcG9ydCBmb3IgaW5zdGFsbGluZyB0aGUgbW9kdWxlcyBhdCBsZWFzdC4KLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgaW5zdGFsbF9wZXJsPSJ5ZXMiCi1lbHNlCi0gIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4bm8iIDsgdGhlbgotICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgZW1iZWRfcGVybD0ibm8iCi0gIGZpCi1maQorICAgICMgICAgICAgQ2hlY2sgY29tcGF0YWJpbGl0eTogIE5vbi1HbnUgTmV0LVNOTVAgdnMgR251IHBlcmwKKyAgICAjCisgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiIC1hICJ4JHBlcmxjY19pc19nbnUiID0gInh5ZXMiIDsgdGhlbgorICAgICAgCSAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAJICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgCSAgICBlbHNlCisgICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIlRoaXMgYnVpbGQgaXMgdXNpbmcgYSBub24tR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgR05VIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLiIgIiRMSU5FTk8iIDUKKyAgICAgIAkgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBvbiB0byBlbWJlZGRpbmcuLi4KKyAgICAjICAgICAgIEFyZSB3ZSBjbGVhciB0byBwcm9jZWVkPworICAgICMKKyAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgIGluc3RhbGxfcGVybD0ieWVzIgorICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInhubyIgOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgICAgIGZpCisgICAgZmkKIAotIyBjaGVjayB0aGUgY29tcGlsZXIgZmxhZ3MgZm9yIGlsbGVnYWwgdG9rZW5zCisKKyMjCisjICAgRGV0ZXJtaW5lIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IG5lZWRlZCBmb3IgZW1iZWRkZWQgUGVybAorIyMKKworIyAgICAgICBTeXN0ZW0tc3BlY2lmaWMgcmVxdWlyZW1lbnRzCisjCiBjYXNlICR0YXJnZXRfb3MgaW4KICAgICBzb2xhcmlzKikKICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgICAgICAgIyAgIENoZWNrIGZvciBMQVJHRUZJTEUgc3VwcG9ydCAgICAgICAgICAgICAgIChTb2xhcmlzKQogICAgICAgICAgICMKLSAgICAgICAgICAjIFBlcmwgY2MgY2hlY2tzCi0gICAgICAgICAgIwotICAgICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHJvYmxlbWF0aWMgUGVybCBjYyBmbGFncyBvbiBTdW5zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHByb2JsZW1hdGljIFBlcmwgY2MgZmxhZ3Mgb24gU3Vucy4uLiAkRUNIT19DIiA+JjYKLSAgICAgICAgICBpZiAkbXlwZXJsIC1WOmNjZmxhZ3MgfCBncmVwIExBUkdFRklMRSA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwcm9ibGVtYXRpYyBQZXJsIGNjIGZsYWdzIG9uIFN1bnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHByb2JsZW1hdGljIFBlcmwgY2MgZmxhZ3Mgb24gU3Vucy4uLiAiID4mNjsgfQorICAgICAgICAgIGlmICRteXBlcmwgLVY6Y2NmbGFncyB8ICRHUkVQIExBUkdFRklMRSA+IC9kZXYvbnVsbCA7IHRoZW4KICAgICAgICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCiAgICAgICAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBQZXJsIHdhcyBjb21waWxlZCB3aXRoIExBUkdFRklMRSBzdXBwb3J0IHdoaWNoIHdpbGwgYnJlYWsgTmV0LVNOTVAuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogUGVybCB3YXMgY29tcGlsZWQgd2l0aCBMQVJHRUZJTEUgc3VwcG9ydCB3aGljaCB3aWxsIGJyZWFrIE5ldC1TTk1QLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJQZXJsIHdhcyBjb21waWxlZCB3aXRoIExBUkdFRklMRSBzdXBwb3J0IHdoaWNoIHdpbGwgYnJlYWsgTmV0LVNOTVAuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iICIkTElORU5PIiA1CiAgICAgICAgICAgICBmaQogICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUga25vd24iID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSBrbm93biIgPiY2CisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBrbm93biIgPiY1CiskYXNfZWNobyAibm9uZSBrbm93biIgPiY2OyB9CiAgICAgICAgICAgZmkKICAgICAgIGZpCiAgICAgOzsKIAorICAgICMgRW1iZWRkZWQgcGVybCB0eXBpY2FsbHkgZmFpbHMgb24gSFAtVVggYW5kIE1hYyBPUyBYCisgICAgIyBXZSByZWFsbHkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aHksIGFuZCBjaGVjayBmb3IgdGhpcyBleHBsaWNpdGx5CisgICAgIyBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0dXJuIHRoaXMgb2ZmIGJ5IGRlZmF1bHQKKyAgICBocHV4KnxkYXJ3aW44KnxkYXJ3aW45KnxkYXJ3aW4xMCopCisgICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEVtYmVkZGVkIHBlcmwgZGVmYXVsdGluZyB0byBvZmYiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogRW1iZWRkZWQgcGVybCBkZWZhdWx0aW5nIHRvIG9mZiIgPiYyO30KKyAgICAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgICAgICBmaQorICAgIDs7CisKICAgICAqKQogICAgIDs7CiBlc2FjCiAKLQotIyBjaGVjayB0aGUgY2ZsYWdzCisjICAgICAgIENvbXBpbGVyIGZsYWdzCisjCiBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgUGVybCBDRkxBR1MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUGVybCBDRkxBR1MuLi4gJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUGVybCBDRkxBR1MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFBlcmwgQ0ZMQUdTLi4uICIgPiY2OyB9CiAgICAgcGVybGNmbGFncz1gJG15cGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBjY29wdHNgCiAgICAgaWYgdGVzdCAieCRwZXJsY2ZsYWdzIiAhPSAieCIgOyB0aGVuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkcGVybGNmbGFncyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kcGVybGNmbGFncyIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHBlcmxjZmxhZ3MiID4mNQorJGFzX2VjaG8gIiRwZXJsY2ZsYWdzIiA+JjY7IH0KICAgICAgIENGTEFHUz0iJENGTEFHUyAkcGVybGNmbGFncyIKICAgICBlbHNlCiAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgogICAgICAgICBlbWJlZF9wZXJsPSJubyIKICAgICAgIGVsc2UKLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQ291bGQgbm90IGRldGVybWluZSB0aGUgQyBjb21waWxlciBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIEMgY29tcGlsZXIgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGRldGVybWluZSB0aGUgQyBjb21waWxlciBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiAiJExJTkVOTyIgNQogICAgICAgZmkKICAgICBmaQogZmkKIAotIyBjaGVjayB0aGUgbGRmbGFncworIyAgICAgICBMaW5rZXIgZmxhZ3MKKyMKIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBQZXJsIExERkxBR1MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUGVybCBMREZMQUdTLi4uICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFBlcmwgTERGTEFHUyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUGVybCBMREZMQUdTLi4uICIgPiY2OyB9CiAgICAgbmV0c25tcF9wZXJsbGRvcHRzPWAkbXlwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGxkb3B0c2AKICAgICBpZiB0ZXN0ICJ4JG5ldHNubXBfcGVybGxkb3B0cyIgIT0gIngiIDsgdGhlbgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG5ldHNubXBfcGVybGxkb3B0cyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbmV0c25tcF9wZXJsbGRvcHRzIiA+JjYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9wZXJsbGRvcHRzIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9wZXJsbGRvcHRzIiA+JjY7IH0KICAgICBlbHNlCiAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgogICAgICAgICBlbWJlZF9wZXJsPSJubyIKICAgICAgIGVsc2UKLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQ291bGQgbm90IGRldGVybWluZSB0aGUgbGlua2VyIG9wdGlvbnMgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBsaW5rZXIgb3B0aW9ucyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBsaW5rZXIgb3B0aW9ucyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiAiJExJTkVOTyIgNQogICAgICAgZmkKICAgICBmaQotICAgIGlmIHRlc3QgIngkZW5hYmxlX2FzX25lZWRlZCIgPSAieHllcyIgOyB0aGVuCi0gICAgICAjIGxpbmsgKmxpYnJhcmllcyogd2l0aCBsaWJwZXJsCisgICAgaWYgdGVzdCAieCRlbmFibGVfYXNfbmVlZGVkIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICMgICBKdXN0LWluLXRpbWUgbGlua2luZyB3aWxsIGVtYmVkIHRoZSBQZXJsIGxpYnJhcnkgd2l0aGluCisgICAgICAjICAgICAgIHRoZSBOZXQtU05NUCBsaWJyYXJ5IChyYXRoZXIgdGhhbiB0aGUgYWdlbnQgYXBwbGljYXRpb24pCisgICAgICAjCiAgICAgICBQRVJMTERPUFRTX0ZPUl9MSUJTPSIkbmV0c25tcF9wZXJsbGRvcHRzIgotICAgICAgIyBQZXJsIGNjZGxmbGFncyAoUlBBVEggdG8gbGlicGVybCwgaG9wZWZ1bGx5KQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBQZXJsIENDRExGTEFHUyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBQZXJsIENDRExGTEFHUy4uLiAkRUNIT19DIiA+JjYKKyAgICAgICMgICBQZXJsIGNjZGxmbGFncyAoUlBBVEggdG8gbGlicGVybCwgaG9wZWZ1bGx5KQorICAgICAgIworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUGVybCBDQ0RMRkxBR1MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFBlcmwgQ0NETEZMQUdTLi4uICIgPiY2OyB9CiAKICAgICAgIG5ldHNubXBfcGVybGNjZGxmbGFncz1gJG15cGVybCAtVjpjY2RsZmxhZ3MgfCAkbXlwZXJsIC1uIC1lICdwcmludCAkMSAnImlmICgvXlxzKmNjZGxmbGFncz0nKFteJ10rKSc7Lyk7ImAKIAotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG5ldHNubXBfcGVybGNjZGxmbGFncyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbmV0c25tcF9wZXJsY2NkbGZsYWdzIiA+JjYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9wZXJsY2NkbGZsYWdzIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9wZXJsY2NkbGZsYWdzIiA+JjY7IH0KICAgICAgIFBFUkxMRE9QVFNfRk9SX0FQUFM9IiRuZXRzbm1wX3BlcmxjY2RsZmxhZ3MiCiAgICAgZWxzZQorICAgICAgIyAgIE90aGVyd2lzZSBlbWJlZCB0aGUgUGVybCBsaWJyYXJ5IHdpdGhpbiB0aGUgYXBwbGljYXRpb24KKyAgICAgICMKKyAgICAgIFBFUkxMRE9QVFNfRk9SX0xJQlM9IiRuZXRzbm1wX3BlcmxsZG9wdHMiCiAgICAgICAjIGxpbmsgKmFwcGxpY2F0aW9ucyogYWdhaW5zdCBsaWJwZXJsCiAgICAgICBQRVJMTERPUFRTX0ZPUl9BUFBTPSIkbmV0c25tcF9wZXJsbGRvcHRzIgogICAgIGZpCiBmaQogCi0jIGNoZWNrIG5lZWRlZCBmdW5jdGlvbnMKKyMgICAgICAgJ1BlcmxfZXZhbF9wdicgZnVuY3Rpb24gKGFuZCBlcXVpdmFsZW50cykKKyMKIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgIyAgIFRocmVlIHBvc3NpYmxlIHZlcnNpb25zIG9mIHRoaXMgcm91dGluZToKKyAgICAjICAgICAgIGV2YWxfcHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvIDUuMDAzXzk3ZCkKKyAgICAjICAgICAgIHBlcmxfZXZhbF9wdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUuMDA0LzUuMDA1KQorICAgICMgICAgICAgUGVybF9ldmFsX3B2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJvbSA1LjZmZikKKyAgICAjCiAgICAgT0xETElCUz0iJExJQlMiCiAgICAgTElCUz0iJExJQlMgJG5ldHNubXBfcGVybGxkb3B0cyIKLQotICAgICMgbmV3ZXIgcGVybCB2cyBvbGRlciBwZXJsIGNhbGwgZnVuY3Rpb25zCi0KLWZvciBhY19mdW5jIGluIGV2YWxfcHYKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICAgIGZvciBhY19mdW5jIGluIGV2YWxfcHYKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZXZhbF9wdiIgImFjX2N2X2Z1bmNfZXZhbF9wdiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19ldmFsX3B2IiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgSEFWRV9FVkFMX1BWIDEKIF9BQ0VPRgogCiBmaQogZG9uZQogCisgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicGVybF9ldmFsX3B2IiAiYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2IiA9IHh5ZXM7IHRoZW4gOgogCi0gICAgIyBzaWdoOiB0aGlzIGhhcyBhIENBUElUQUwgUCBpbiBQZXJsLCB3aGljaCBlbmRzIHVwIGJlaW5nIHRoZSBzYW1lCi0gICAgIyBhdXRvY29uZiBkZWZpbmUgYXMgdGhlIGxvd2VyIGNhc2Ugc28gd2UgaGF2ZSB0byB0cmVhdCB0aGVtICpCT1RIKgotICAgICMgc3BlY2lhbGx5LiAgV29uZGVyZnVsLgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGVybF9ldmFsX3B2IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBlcmxfZXZhbF9wdi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgcGVybF9ldmFsX3B2IHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgcGVybF9ldmFsX3B2LgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIHBlcmxfZXZhbF9wdiBpbm5vY3VvdXNfcGVybF9ldmFsX3B2Ci0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHBlcmxfZXZhbF9wdiAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBwZXJsX2V2YWxfcHYKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBwZXJsX2V2YWxfcHYgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfcGVybF9ldmFsX3B2KSB8fCBkZWZpbmVkIChfX3N0dWJfX19wZXJsX2V2YWxfcHYpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IHBlcmxfZXZhbF9wdjsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBwZXJsX2V2YWxfcHY7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHY9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2ID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfUEVSTF9FVkFMX1BWX0xDIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QRVJMX0VWQUxfUFZfTEMgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFBlcmxfZXZhbF9wdiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBQZXJsX2V2YWxfcHYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfUGVybF9ldmFsX3B2K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIFBlcmxfZXZhbF9wdiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIFBlcmxfZXZhbF9wdi4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBQZXJsX2V2YWxfcHYgaW5ub2N1b3VzX1BlcmxfZXZhbF9wdgorICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIlBlcmxfZXZhbF9wdiIgImFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX1BlcmxfZXZhbF9wdiIgPSB4eWVzOyB0aGVuIDoKIAotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgUGVybF9ldmFsX3B2ICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIFBlcmxfZXZhbF9wdgotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIFBlcmxfZXZhbF9wdiAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9QZXJsX2V2YWxfcHYpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX1BlcmxfZXZhbF9wdikKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gUGVybF9ldmFsX3B2OwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IFBlcmxfZXZhbF9wdjsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX1BlcmxfZXZhbF9wdj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHY9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX1BlcmxfZXZhbF9wdiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9QRVJMX0VWQUxfUFZfVUMgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BFUkxfRVZBTF9QVl9VQyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAotCiAgICAgTElCUz0iJE9MRExJQlMiCi0KKyAgICAjCisgICAgIyAgIE5vdGUgdGhhdCBhdXRvY29uZiBmbGF0dGVucyBjYXNlIHdoZW4gZGVmaW5pbmcgdG9rZW5zLAorICAgICMgICBzbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgbGF0dGVyIHR3by4KIAogICAgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYiICE9ICJ4eWVzIiAtYSAieCRhY19jdl9mdW5jX1BlcmxfZXZhbF9wdiIgIT0gInh5ZXMiIC1hICJ4JGFjX2N2X2Z1bmNfZXZhbF9wdiIgIT0gInh5ZXMiIDsgdGhlbgogICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KICAgICAgICAgZW1iZWRfcGVybD0ibm8iCiAgICAgICBlbHNlCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENvdWxkIG5vdCBmaW5kIHRoZSBldmFsX3B2LCBwZXJsX2V2YWxfcHYgb3IgUGVybF9ldmFsX3B2IGZ1bmN0aW9ucyBuZWVkZWQgZm9yIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDb3VsZCBub3QgZmluZCB0aGUgZXZhbF9wdiwgcGVybF9ldmFsX3B2IG9yIFBlcmxfZXZhbF9wdiBmdW5jdGlvbnMgbmVlZGVkIGZvciBlbWJlZGRlZCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIHRoZSBldmFsX3B2LCBwZXJsX2V2YWxfcHYgb3IgUGVybF9ldmFsX3B2IGZ1bmN0aW9ucyBuZWVkZWQgZm9yIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgIiRMSU5FTk8iIDUKICAgICAgIGZpCiAgICAgZWxzZQotICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9FTUJFRERFRF9QRVJMIDEKLV9BQ0VPRgorICAgICAgIyAgIEFjdGl2YXRlIEVtYmVkZGVkIFBlcmwKKyAgICAgICMKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9FTUJFRERFRF9QRVJMIDEiID4+Y29uZmRlZnMuaAogCiAgICAgICBPVEhFUkFHRU5UTElCT0JKUz0ic25tcF9wZXJsLm8iCiAgICAgICBPVEhFUkFHRU5UTElCTE9CSlM9InNubXBfcGVybC5sbyIKKyAgICAgIE9USEVSQUdFTlRMSUJMRlRTPSJzbm1wX3BlcmwuZnQiCiAKICAgICAgIEVNQkVEUEVSTElOU1RBTEw9ImVtYmVkcGVybGluc3RhbGwiCiAgICAgICBFTUJFRFBFUkxVTklOU1RBTEw9ImVtYmVkcGVybHVuaW5zdGFsbCIKLSAgICAgICMgeWF5LCB3ZSBnb3QgaGVyZSEKICAgICAgIGVtYmVkX3Blcmw9InllcyIKICAgICBmaQogZWxzZQpAQCAtMzIxODAsNjAgKzI0MTc4LDcwIEBACiBmaQogCiAKKyMjCisjICAgUmVwb3J0IGFuZCBjb25maWd1cmUgcmVzdWx0cworIyMKIAogCiAKLSMgZW1iZWRkZWQgUGVybCByZXN1bHRzCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBlbWJlZGRlZCBQZXJsIHN1cHBvcnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcG90ZW50aWFsIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4uLiAkRUNIT19DIiA+JjYKKworCisKKyMgICAgICAgUmVzdWx0cyBvZiBFbWJlZGRlZCBQZXJsIGNoZWNrcworIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcG90ZW50aWFsIGVtYmVkZGVkIFBlcmwgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcG90ZW50aWFsIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4uLiAiID4mNjsgfQogaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieHllcyIgOyB0aGVuCiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBFbWJlZGRlZCBQZXJsIHN1cHBvcnQ6ICAgICAgZGlzYWJsZWQKIEVPRgogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGRpc2FibGVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfWRpc2FibGVkIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRpc2FibGVkIiA+JjUKKyRhc19lY2hvICJkaXNhYmxlZCIgPiY2OyB9CiBlbHNlCiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBFbWJlZGRlZCBQZXJsIHN1cHBvcnQ6ICAgICAgZW5hYmxlZAogRU9GCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZW5hYmxlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1lbmFibGVkIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGVuYWJsZWQiID4mNQorJGFzX2VjaG8gImVuYWJsZWQiID4mNjsgfQogZmkKIAotIyBpbnN0YWxsIFBlcmwgbW9kdWxlIHJlc3VsdHMKKyMgICAgICAgUmVzdWx0cyBvZiBQZXJsIE1vZHVsZSBjaGVja3MKKyMKIFBFUkxUQVJHUz0iIgogUEVSTElOU1RBTExUQVJHUz0iIgogUEVSTFVOSU5TVEFMTFRBUkdTPSIiCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXMuLi4gJEVDSE9fQyIgPiY2CitQRVJMRkVBVFVSRVM9IiIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzLi4uICIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHllcyIgOyB0aGVuCiAgICAgUEVSTFRBUkdTPSJwZXJsbW9kdWxlcyIKICAgICBQRVJMSU5TVEFMTFRBUkdTPSJwZXJsaW5zdGFsbCIKICAgICBQRVJMVU5JTlNUQUxMVEFSR1M9InBlcmx1bmluc3RhbGwiCisgICAgUEVSTEZFQVRVUkVTPSJwZXJsZmVhdHVyZXMiCiAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4eWVzIiA7IHRoZW4KIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBidWlsZGluZyAtLSBlbWJlZGRhYmxlCiBFT0YKIAotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIC0tIGFuZCBlbWJlZGRhYmxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyAtLSBhbmQgZW1iZWRkYWJsZSIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIC0tIGFuZCBlbWJlZGRhYmxlIiA+JjUKKyRhc19lY2hvICJ5ZXMgLS0gYW5kIGVtYmVkZGFibGUiID4mNjsgfQogICAgIGVsc2UKIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBidWlsZGluZyAtLSBub3QgZW1iZWRkYWJsZQogRU9GCiAKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyAtLSBub3QgZW1iZWRkYWJsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMgLS0gbm90IGVtYmVkZGFibGUiID4mNgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyAtLSBub3QgZW1iZWRkYWJsZSIgPiY1CiskYXNfZWNobyAieWVzIC0tIG5vdCBlbWJlZGRhYmxlIiA+JjY7IH0KICAgICBmaQogZWxzZQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBkaXNhYmxlZApAQCAtMzIyNDcsMzkgKzI0MjU1LDQ1IEBACiAKIAogCi0jIHJlc2V0IGxpYnMKKyMgICAgICAgUmVzZXQgTElCUyB0byBwcmUtbGlid3JhcCB2YWx1ZSAgICg/Pz8pCisjCiBBR0VOVExJQlM9JExJQlMKIExJQlM9JE5PTkFHRU5UTElCUwogCiAKIAotIyBweXRob24gc3VwcG9ydAorIyMKKyMgICBQeXRob24gY2hlY2tzCisjIworCiBQWVRIT05UQVJHUz0iIgogUFlUSE9OSU5TVEFMTFRBUkdTPSIiCiBQWVRIT05VTklOU1RBTExUQVJHUz0iIgogUFlUSE9OQ0xFQU5UQVJHUz0iIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIHNob3VsZCBpbnN0YWxsIHRoZSBweXRob24gYmluZGluZ3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBzaG91bGQgaW5zdGFsbCB0aGUgcHl0aG9uIGJpbmRpbmdzLi4uICRFQ0hPX0MiID4mNgorUFlUSE9ORkVBVFVSRVM9IiIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGluc3RhbGwgdGhlIHB5dGhvbiBiaW5kaW5ncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBzaG91bGQgaW5zdGFsbCB0aGUgcHl0aG9uIGJpbmRpbmdzLi4uICIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGluc3RhbGxfcHl0aG9uIiA9ICJ4eWVzIiA7IHRoZW4KICAgICBQWVRIT05UQVJHUz0icHl0aG9ubW9kdWxlcyIKICAgICBQWVRIT05JTlNUQUxMVEFSR1M9InB5dGhvbmluc3RhbGwiCiAgICAgUFlUSE9OVU5JTlNUQUxMVEFSR1M9InB5dGhvbnVuaW5zdGFsbCIKICAgICBQWVRIT05DTEVBTlRBUkdTPSJweXRob25jbGVhbiIKKyAgICBQWVRIT05GRUFUVVJFUz0icHl0aG9uZmVhdHVyZXMiCiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBTTk1QIFB5dGhvbiBtb2R1bGVzOiAgICAgICAgYnVpbGRpbmcgZm9yICRQWVRIT05QUk9HCiBFT0YKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBTTk1QIFB5dGhvbiBtb2R1bGVzOiAgICAgICAgZGlzYWJsZWQKIEVPRgogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCkBAIC0zMjI4OSw1MTc5ICsyNDMwMywyOCBAQAogCiAKIAotIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmbG9hdC5oPgogCi1pbnQKLW1haW4gKCkKLXsKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIE1pc2NlbGxhbmVvdXMgY2hlY2tzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hlYWRlcl9zdGRjPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIyMKKyMgICBQYWNrYWdlIGNoYXJhY3RlcmlzdGljcworIyAgICAgICBBdXRoZW50aWNhdGlvbi9FbmNyeXB0aW9uIHN1cHBvcnQKKyMjCiAKLWFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgOgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQotIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQotI2Vsc2UKLSMgZGVmaW5lIElTTE9XRVIoYykgXAotCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAotCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKLQkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKLSMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCi0jZW5kaWYKLQotI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKLWludAotbWFpbiAoKQotewotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKLQl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKLSAgICAgIGV4aXQoMik7Ci0gIGV4aXQgKDApOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBTVERDX0hFQURFUlMgMQotX0FDRU9GCi0KLWZpCi0KLQotCi0KLQotCi1hY19oZWFkZXJfZGlyZW50PW5vCi1mb3IgYWNfaGRyIGluIGRpcmVudC5oIHN5cy9uZGlyLmggc3lzL2Rpci5oIG5kaXIuaDsgZG8KLSAgYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfZGlyZW50XyRhY19oZHIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDwkYWNfaGRyPgotCi1pbnQKLW1haW4gKCkKLXsKLWlmICgoRElSICopIDApCi1yZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZHIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWFjX2hlYWRlcl9kaXJlbnQ9JGFjX2hkcjsgYnJlYWsKLWZpCi0KLWRvbmUKLSMgVHdvIHZlcnNpb25zIG9mIG9wZW5kaXIgZXQgYWwuIGFyZSBpbiAtbGRpciBhbmQgLWx4IG9uIFNDTyBYZW5peC4KLWlmIHRlc3QgJGFjX2hlYWRlcl9kaXJlbnQgPSBkaXJlbnQuaDsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKLWFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBvcGVuZGlyICgpOwotaW50Ci1tYWluICgpCi17Ci1vcGVuZGlyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NlYXJjaF9vcGVuZGlyPSJub25lIHJlcXVpcmVkIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPSBubzsgdGhlbgotICBmb3IgYWNfbGliIGluIGRpcjsgZG8KLSAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgb3BlbmRpciAoKTsKLWludAotbWFpbiAoKQotewotb3BlbmRpciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zZWFyY2hfb3BlbmRpcj0iLWwkYWNfbGliIgotYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWZpCi1MSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjYKLWlmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgIT0gbm87IHRoZW4KLSAgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX29wZW5kaXIgJExJQlMiCi0KLWZpCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCi1hY19jdl9zZWFyY2hfb3BlbmRpcj1ubwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgb3BlbmRpciAoKTsKLWludAotbWFpbiAoKQotewotb3BlbmRpciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zZWFyY2hfb3BlbmRpcj0ibm9uZSByZXF1aXJlZCIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gbm87IHRoZW4KLSAgZm9yIGFjX2xpYiBpbiB4OyBkbwotICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBvcGVuZGlyICgpOwotaW50Ci1tYWluICgpCi17Ci1vcGVuZGlyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NlYXJjaF9vcGVuZGlyPSItbCRhY19saWIiCi1icmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZmkKLUxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNgotaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiAhPSBubzsgdGhlbgotICB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19jdl9zZWFyY2hfb3BlbmRpciAkTElCUyIKLQotZmkKLQotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXMvd2FpdC5oIHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfd2FpdF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jaWZuZGVmIFdFWElUU1RBVFVTCi0jIGRlZmluZSBXRVhJVFNUQVRVUyhzdGF0X3ZhbCkgKCh1bnNpZ25lZCkoc3RhdF92YWwpID4+IDgpCi0jZW5kaWYKLSNpZm5kZWYgV0lGRVhJVEVECi0jIGRlZmluZSBXSUZFWElURUQoc3RhdF92YWwpICgoKHN0YXRfdmFsKSAmIDI1NSkgPT0gMCkKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLSAgaW50IHM7Ci0gIHdhaXQgKCZzKTsKLSAgcyA9IFdJRkVYSVRFRCAocykgPyBXRVhJVFNUQVRVUyAocykgOiAxOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oZWFkZXJfc3lzX3dhaXRfaD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi1fQUNFT0YKLQotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzdGRhcmcuaCBzdHJpbmcuaCBmY250bC5oIGxpbWl0cy5oIHN5cy9maWxlLmggc3lzL2lvY3RsLmggc3lzbG9nLmggdW5pc3RkLmggc3lzL2RtYXAuaCBtYWNoaW5lL3B0ZS5oIHh0aS5oIHN5cy9zb2NraW8uaCBzeXMvc29ja2V0Lmggc3lzL3BhcmFtLmggc3lzL3Vpby5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBhdCBsZWFzdCBTb2xhcmlzIDkgbmVlZHMgc3lzL3NvY2tldC5oIHRvIGNvbXBpbGUgc3lzL3NvY2tldHZhci5oCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3NvY2tldHZhci5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBhdCBsZWFzdCBPcGVuQlNEIDMuNCBuZWVkcyBzeXMvcGFyYW0uaCAoTUFYUEFUSExFTikgdG8gY29tcGlsZSBzeXMvc3dhcC5oCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3N3YXAuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvdGltZW91dC5oIHN5cy91bi5oIGZzdGFiLmggc3lzL2ZzLmggbXRhYi5oIHVmcy9mcy5oIHN5cy9maXhwb2ludC5oIG1hY2hpbmUvcGFyYW0uaCBzeXMvdm0uaCB2bS92bS5oIHN5cy92bW1ldGVyLmggc3lzL3ZtcGFyYW0uaCBzeXMvdm1tYWMuaCBzeXMvdm1zeXN0bS5oIHN5cy90aW1lLmggc3lzL3RpbWVzLmggc3lzL3N0YXR2ZnMuaCBzeXMvdmZzLmggc3lzL21udHRhYi5oIHN5cy9zZWxlY3QuaCBtbnRlbnQuaCBzeXMvbW50ZW50Lmgga3N0YXQuaCB1dHNuYW1lLmggc3lzL3V0c25hbWUuaCBzeXMvY2RlZnMuaCBnZXRvcHQuaCBsb2NhbGUuaCBwdGhyZWFkLmggc3lzL2xvYWRhdmcuaCByZWdleC5oIGxpbnV4L3Rhc2tzLmggcHdkLmggZ3JwLmggdXRtcHguaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgTmV0d29yayBoZWFkZXJzCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIGFycGEvaW5ldC5oIG5ldGluZXQvaW5fc3lzdG0uaCBuZXRpbmV0L2luLmggbmV0aW5ldC9pcF92YXIuaCBuZXRpbmV0L3RjcC5oIG5ldGluZXQvdGNwaXAuaCBuZXRpbmV0L3VkcC5oIG5ldC9pZi5oIG5ldGluZXQvaW5fdmFyLmggbmV0aW5ldC9pcC5oIG5ldGluZXQvaXBfaWNtcC5oIG5ldC9pZl9hcnAuaCBuZXQvaWZfbWliLmggbmV0L2lmX3Zhci5oIG5ldGluZXQvaWZfZXRoZXIuaCBuZXRpbmV0L3RjcF90aW1lci5oIG5ldGluZXQvdGNwX3Zhci5oIG5ldGluZXQvdWRwX3Zhci5oIG5ldGluZXQvaWNtcF92YXIuaCBuZXRkYi5oIG5ldC9yb3V0ZS5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19USU1FT1VUX0gKLSNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRWQVJfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfQVJQQV9JTkVUX0gKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfSAotI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUX0lGX0gKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfSUNNUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVENQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBVRlMgaGVhZGVycwotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHVmcy91ZnMvZGlub2RlLmggdWZzL3Vmcy9xdW90YS5oIHVmcy91ZnMvaW5vZGUuaCB1ZnMvZmZzL2ZzLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfVUZTX1VGU19ESU5PREVfSAotI2luY2x1ZGUgPHVmcy91ZnMvZGlub2RlLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VGU19VRlNfUVVPVEFfSAotI2luY2x1ZGUgPHVmcy91ZnMvcXVvdGEuaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIEZyZWVCU0QgcmVxdWlyZWQgaGVhZGVycwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gbWFsbG9jLmggbmV0L2lmX2RsLmggc3lzL3N5c2N0bC5oIHN0ZGxpYi5oIG5ldC9pZl90eXBlcy5oIHN5cy9xdWV1ZS5oIG9zcmVsZGF0ZS5oIG1hY2hpbmUvdHlwZXMuaCBzeXMvdXNlci5oIHN5cy9wcm9jLmggc3lzL21idWYuaCBzeXMvbW91bnQuaCBzeXMvZGtzdGF0Lmggc3lzL2NvbmYuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgTGludXgKLQotCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIG5ldGluZXQvdGNwX2ZzbS5oIHN5cy9wcm90b3N3Lmggbmxpc3QuaCBpb2N0bHMuaCBhc20vcGFnZS5oIGFzbS90eXBlcy5oIG5ldGlweC9pcHguaCBwY2kvcGNpLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIFNvbGFyaXMKLQotZm9yIGFjX2hlYWRlciBpbiBpbmV0L21pYjIuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgTmV0QlNEIHJlcXVpcmVkIGhlYWRlcnMKLQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4ga3ZtLmggc3lzL3Bvb2wuaCB1dm0vdXZtX3BhcmFtLmggdXZtL3V2bV9leHRlcm4uaCB2bS92bV9wYXJhbS5oIHZtL3ZtX2V4dGVybi5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBCU0RpMiBoZWFkZXJzCi0KLWZvciBhY19oZWFkZXIgaW4gdm0vc3dhcF9wYWdlci5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZiBIQVZFX1ZNX1ZNX0gKLSNpbmNsdWRlIDx2bS92bS5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgbGludXggZXRodG9vbAotIyByZXF1aXJlcyBzcGVjaWFsIGhhY2tzIHRvIGdldCBhcm91bmQgdmFyaW91cyBwcm9ibGVtcyBvbiBvbGRlciBsaW51eCBrZXJuZWxzLgotIyBtYWpvciB1Z2guLi4uCi0KLWZvciBhY19oZWFkZXIgaW4gbGludXgvZXRodG9vbC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotdHlwZWRlZiBfX3U2NCB1NjQ7ICAgICAgICAgLyogaGFjaywgc28gd2UgbWF5IGluY2x1ZGUga2VybmVsJ3MgZXRodG9vbC5oICovCi10eXBlZGVmIF9fdTMyIHUzMjsgICAgICAgICAvKiBkaXR0byAqLwotdHlwZWRlZiBfX3UxNiB1MTY7ICAgICAgICAgLyogZGl0dG8gKi8KLXR5cGVkZWYgX191OCB1ODsgICAgICAgICAgIC8qIGRpdHRvICovCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgQlNEaTMgaGVhZGVycwotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9zdGF0LmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIEJTRGkzL0lSSVggaGVhZGVycwotIyBhdCBsZWFzdCBJUklYIDYuNSBuZWVkcyBfS01FTVVTRVIgYW5kIHN5cy90eXBlcy5oIChtcHJvdF90KSB0byBjb21waWxlCi0jICAgc3lzL3Zub2RlLmgKLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvdm5vZGUuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jZGVmaW5lIF9LTUVNVVNFUiAxCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgYXQgbGVhc3QgSVJJWCA2LjUgbmVlZHMgc3lzL3NlbWEuaCAobXJsb2NrX3QpIHRvIGNvbXBpbGUgc3lzL2hhc2hpbmcuaAotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9zZW1hLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL2hhc2hpbmcuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQotI2lmIEhBVkVfU1lTX1NFTUFfSAotI2luY2x1ZGUgPHN5cy9zZW1hLmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBtb3JlIElSSVggaGVhZGVycwotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy90Y3BpcHN0YXRzLmggc3lzL3N5c21wLmggc3lzL3N5c3RlbWluZm8uaCBzeXMvc3lzZ2V0LmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIEFJWCBzeXN0ZW0gY29uZmlndXJhdGlvbgotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9zeXN0ZW1jZmcuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgZnJvbSBzbXV4IHN0dWZmCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIGVyci5oIHN5cy9maWxpby5oIHNndHR5LmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIEFJWCBuZWVkcyB0aGlzIGZvciBzdGF0ZnMgZnVuYwotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9zdGF0ZnMuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgZm9yIEhvc3RSZXMgKEhQLVVYIGF0IGxlYXN0KQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL2RraW8uaCBzeXMvZGlza2lvLmggc3lzL3BzdGF0LmggbGludXgvaGRyZWcuaCBwa2dsb2NzLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIGZvciBIb3N0UmVzIChTb2xhcmlzIDIueCBhdCBsZWFzdCkKLQotZm9yIGFjX2hlYWRlciBpbiBwa2dpbmZvLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLSBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBrZ2luZm8gaW4gLWxhZG0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcGtnaW5mbyBpbiAtbGFkbS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2FkbV9wa2dpbmZvK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sYWRtICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHBrZ2luZm8gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXBrZ2luZm8gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2FkbV9wa2dpbmZvPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfYWRtX3BrZ2luZm89bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfYWRtX3BrZ2luZm8iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9hZG1fcGtnaW5mbyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfYWRtX3BrZ2luZm8gPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9QS0dJTkZPIDEKLV9BQ0VPRgotCi0gICAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sYWRtIgotZmkKLQotZmkKLQotZG9uZQotCi0KLWNhc2UgJHRhcmdldF9vcyBpbgotICAgIGFpeCopICMgQUlYIHBlcmZzdGF0IGxpYnJhcnksIG5lZWRlZCBmb3IgQ1BVL21lbW9yeSBzdGF0aXN0aWNzCi0KLWZvciBhY19oZWFkZXIgaW4gbGlicGVyZnN0YXQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGVyZnN0YXRfY3B1X3RvdGFsIGluIC1scGVyZnN0YXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcGVyZnN0YXRfY3B1X3RvdGFsIGluIC1scGVyZnN0YXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9wZXJmc3RhdF9wZXJmc3RhdF9jcHVfdG90YWwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxwZXJmc3RhdCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBwZXJmc3RhdF9jcHVfdG90YWwgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXBlcmZzdGF0X2NwdV90b3RhbCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3BlcmZzdGF0X3BlcmZzdGF0X2NwdV90b3RhbCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3BlcmZzdGF0X3BlcmZzdGF0X2NwdV90b3RhbCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfUEVSRlNUQVQgMQotX0FDRU9GCi0KLSAgICAgICAgICAgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbHBlcmZzdGF0IgotZmkKLQotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOgotCi0qKiogVG8gbW9uaXRvciBDUFUvbWVtb3J5IHZhbHVlcyBpbiBBSVggeW91IG5lZWQgdG8gaW5zdGFsbAotKioqIGxpYnBlcmZzdGF0IHdoaWNoIGNhbiBiZSBmb3VuZCBpbiBib3MucGVyZgotIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6Ci0KLSoqKiBUbyBtb25pdG9yIENQVS9tZW1vcnkgdmFsdWVzIGluIEFJWCB5b3UgbmVlZCB0byBpbnN0YWxsCi0qKiogbGlicGVyZnN0YXQgd2hpY2ggY2FuIGJlIGZvdW5kIGluIGJvcy5wZXJmCi0iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi0KLWRvbmUKLQotICAgICAgICA7OwotICAgIGhwdXgqKSAjIEhQLVVYIGFnZW50IG5lZWRzIG9wZW5fbWliCi0gICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb3Blbl9taWIgaW4gLWxubSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvcGVuX21pYiBpbiAtbG5tLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfbm1fb3Blbl9taWIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxubSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBvcGVuX21pYiAoKTsKLWludAotbWFpbiAoKQotewotb3Blbl9taWIgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX25tX29wZW5fbWliPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfbm1fb3Blbl9taWI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbm1fb3Blbl9taWIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9ubV9vcGVuX21pYiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfbm1fb3Blbl9taWIgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJOTSAxCi1fQUNFT0YKLQotICAgICAgICAgICAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sbm0iCi1maQotCi0gICAgICAgIDs7Ci0gICAgKikKLSAgICAgICAgOzsKLWVzYWMKLSMgV0lOMzIKLSMgKG1pbmd3MzIgbXVzdCBsaW5rIHdpbnNvY2sgZXhwbGljaXRseSkKLQotZm9yIGFjX2hlYWRlciBpbiB3aW5zb2NrLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotICAgICAgICBBR0VOVExJQlM9IiR7QUdFTlRMSUJTfSAtbGlwaGxwYXBpIgotICAgICAgICBjYXNlICR0YXJnZXRfb3MgaW4KLSAgICAgICAgICAgICAgICBtaW5ndyopCi0gICAgICAgICAgICAgICAgICAgICAgICBMSUJTPSIke0xJQlN9IC1scmVnZXggLWx3czJfMzIiCi0gICAgICAgICAgICAgICAgICAgICAgICBBR0VOVExJQlM9IiR7QUdFTlRMSUJTfSAtbHJlZ2V4IC1sd3MyXzMyIgotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiBpby5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBTQ08KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvc3RyZWFtLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIEtBTUUKLQotCi0KLQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gbmV0aW5ldC9pcDYuaCBuZXRpbmV0Ni9pbjZfdmFyLmggbmV0aW5ldDYvaW42X3BjYi5oIG5ldGluZXQ2L2lwNl92YXIuaCBuZXRpbmV0Ni90Y3A2LmggbmV0aW5ldDYvdGNwNl9mc20uaCBuZXRpbmV0Ni9uZDYuaCBuZXRpbmV0Ni90Y3A2X3RpbWVyLmggbmV0aW5ldDYvdGNwNl92YXIuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVA2X0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwNi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRfSUZfSAotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRfUk9VVEVfSAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgRFlOQU1JQyBNT0RVTEUgU1VQUE9SVAotCi1mb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIHRhYmxlX2FycmF5IGhlbHBlciBzdXBwb3J0Ci0KLWZvciBhY19oZWFkZXIgaW4gc2VhcmNoLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLSMgUlBNIHN1YmRpcmVjdG9yeSBwYXRoIChzaWdoKQotaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyIgJiYgXAotICAgICAgICBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgaG9zdC9ocl9zd2luc3QgIiA+IC9kZXYvbnVsbDsgdGhlbgotCi1mb3IgYWNfaGVhZGVyIGluIHJwbS9ycG10cy5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cnBtL3JwbWxpYi5oPgotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotZmkKLQotIyBPcGVuQlNEIDIuNiBuZWVkcyBuZXRpbmV0L2luLmggYmVmb3JlIG5ldGluZXQvaW5fcGNiLmgKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbmV0aW5ldC9pbl9wY2IuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuZXRpbmV0L2luX3BjYi5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtjdl9oYXZlX25ldGluZXRfaW5fcGNiX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW5fcGNiLmg+Ci0KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRjdl9oYXZlX25ldGluZXRfaW5fcGNiX2giID4mNgotaWYgdGVzdCAkY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9QQ0JfSCAxCi1fQUNFT0YKLQotZmkKLQotIyBOZXRCU0QgbmVlZHMgbWFjaGluZS90eXBlcy5oIGJlZm9yZSBzeXMvZGlza2xhYmVsLmgKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3lzL2Rpc2tsYWJlbC5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5cy9kaXNrbGFiZWwuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7Y3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9kaXNrbGFiZWwuaD4KLQotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBjdl9oYXZlX3N5c19kaXNrbGFiZWxfaD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBjdl9oYXZlX3N5c19kaXNrbGFiZWxfaD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oIiA+JjYKLWlmIHRlc3QgJGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfU1lTX0RJU0tMQUJFTF9IIDEKLV9BQ0VPRgotCi1maQotCi0jIE9wZW5TU0wKLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIG9wZW5zc2wvaG1hYy5oIG9wZW5zc2wvZXZwLmggb3BlbnNzbC9hZXMuaCBvcGVuc3NsL2Rlcy5oIG9wZW5zc2wvZGguaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+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+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzZWN1cml0eS9jcnlwdG9raS5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+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+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi0jIFByaW50aW5nCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxwc3RhdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgbHBzdGF0OyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX0xQU1RBVF9QQVRIK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhc2UgJExQU1RBVF9QQVRIIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0xQU1RBVF9QQVRIPSIkTFBTVEFUX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfTFBTVEFUX1BBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICA7OwotZXNhYwotZmkKLUxQU1RBVF9QQVRIPSRhY19jdl9wYXRoX0xQU1RBVF9QQVRICi0KLWlmIHRlc3QgLW4gIiRMUFNUQVRfUEFUSCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExQU1RBVF9QQVRIIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRMUFNUQVRfUEFUSCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWlmIHRlc3QgeCRMUFNUQVRfUEFUSCAhPSB4OyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBMUFNUQVRfUEFUSCAiJExQU1RBVF9QQVRIIgotX0FDRU9GCi0KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xQU1RBVCAxCi1fQUNFT0YKLQotZmkKLQotZm9yIGFjX2Z1bmMgaW4gY2dldG5leHQKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi1pZiB0ZXN0IC1yIC9ldGMvcHJpbnRjYXA7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1BSSU5UQ0FQIDEKLV9BQ0VPRgotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYXV0aGVudGljYXRpb24gc3VwcG9ydC4uLiAkRUNIT19DIiA+JjYKKyMgICAgICAgQ2hlY2sgZm9yIFBLQ1MxMQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXV0aGVudGljYXRpb24gc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXV0aGVudGljYXRpb24gc3VwcG9ydC4uLiAiID4mNjsgfQogdXNlb3BlbnNzbD1ubwogdXNlcGtjcz1ubwogaWYgdGVzdCAieCRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9zZWN1cml0eV9jcnlwdG9raV9oIiAhPSAieHllcyI7IHRoZW4KICAgICBpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KLSAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBBc2tlZCB0byB1c2UgUEtDUzExIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEFza2VkIHRvIHVzZSBQS0NTMTEgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkFza2VkIHRvIHVzZSBQS0NTMTEgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iICIkTElORU5PIiA1CiAgICAgZmkKIGVsc2UKICAgICBpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KQEAgLTM3NDY5LDExICsyNDMzMiwxMSBAQAogICAgIGZpCiBmaQogCi1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2htYWNfaCIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2htYWNfaCIgIT0gInh5ZXMiOyB0aGVuCisjICAgICAgIENoZWNrIGZvciBPcGVuU1NMCisjCitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgIT0gInh5ZXMiIC1hICJ4JGFjX2N2X2xpYl9lYXkzMl9FVlBfbWQ1IiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfaG1hY19oIiAhPSAieHllcyI7IHRoZW4KICAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQXNrZWQgdG8gdXNlIE9wZW5TU0wgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQXNrZWQgdG8gdXNlIE9wZW5TU0wgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkFza2VkIHRvIHVzZSBPcGVuU1NMIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiAiJExJTkVOTyIgNQogICAgIGZpCiBlbHNlCiAgICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiID0gInh5ZXMiOyB0aGVuCkBAIC0zNzQ4NSw3ICsyNDM0OCwyMSBAQAogICAgIGZpCiBmaQogCi1pZiB0ZXN0ICJ4JHVzZW9wZW5zc2wiICE9ICJ4bm8iIDsgdGhlbgorIyAgICAgICBBdmFpbGFibGUgYXV0aGVudGljYXRpb24vZW5jcnlwdGlvbiBtb2RlcworIworaWYgdGVzdCAieCRDUllQVE8iID0gInhpbnRlcm5hbCIgOyB0aGVuCisgICAgYXV0aG1vZGVzPSJNRDUgU0hBMSIKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgZW5jcm1vZGVzPSJERVMgQUVTIgorICAgIGVsc2UKKyAgICAgICAgZW5jcm1vZGVzPSJkaXNhYmxlZCIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8gMSIgPj5jb25mZGVmcy5oCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogSW50ZXJuYWwgQ3J5cHRvIFN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkludGVybmFsIENyeXB0byBTdXBwb3J0IiA+JjY7IH0KK2VsaWYgdGVzdCAieCR1c2VvcGVuc3NsIiAhPSAieG5vIiA7IHRoZW4KICAgICBhdXRobW9kZXM9Ik1ENSBTSEExIgogICAgIGlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iIDsgdGhlbgogICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2Flc19oIiA9ICJ4eWVzIiA7IHRoZW4KQEAgLTM3NDk2LDEzICsyNDM3MywxMSBAQAogICAgIGVsc2UKICAgICAgICAgZW5jcm1vZGVzPSJkaXNhYmxlZCIKICAgICBmaQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMQotX0FDRU9GCisgICAgJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxIiA+PmNvbmZkZWZzLmgKIAogICAgIExORVRTTk1QTElCUz0iJExORVRTTk1QTElCUyAkTElCQ1JZUFRPIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IE9wZW5TU0wgU3VwcG9ydCIgPiY1Ci1lY2hvICIke0VDSE9fVH1PcGVuU1NMIFN1cHBvcnQiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBPcGVuU1NMIFN1cHBvcnQiID4mNQorJGFzX2VjaG8gIk9wZW5TU0wgU3VwcG9ydCIgPiY2OyB9CiBlbGlmIHRlc3QgIngkdXNlcGtjcyIgIT0gInhubyIgOyB0aGVuCiAgICAgYXV0aG1vZGVzPSJNRDUgU0hBMSIKICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIiA7IHRoZW4KQEAgLTM3NTEwLDMxICsyNDM4NSwzMyBAQAogICAgIGVsc2UKICAgICAgICAgZW5jcm1vZGVzPSJkaXNhYmxlZCIKICAgICBmaQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVVNFX1BLQ1MxMSAxCi1fQUNFT0YKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfUEtDUzExIDEiID4+Y29uZmRlZnMuaAogCiAgICAgTE5FVFNOTVBMSUJTPSIkTE5FVFNOTVBMSUJTICRMSUJQS0NTMTEiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogUEtDUzExIFN1cHBvcnQiID4mNQotZWNobyAiJHtFQ0hPX1R9UEtDUzExIFN1cHBvcnQiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBQS0NTMTEgU3VwcG9ydCIgPiY1CiskYXNfZWNobyAiUEtDUzExIFN1cHBvcnQiID4mNjsgfQogZWxpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiICE9ICJ4bm8iOyB0aGVuCiAgICAgYXV0aG1vZGVzPSJNRDUiCiAgICAgZW5jcm1vZGVzPSIiCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1IDEKLV9BQ0VPRgorICAgICRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSAxIiA+PmNvbmZkZWZzLmgKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IEludGVybmFsIE1ENSBTdXBwb3J0IiA+JjUKLWVjaG8gIiR7RUNIT19UfUludGVybmFsIE1ENSBTdXBwb3J0IiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogSW50ZXJuYWwgTUQ1IFN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkludGVybmFsIE1ENSBTdXBwb3J0IiA+JjY7IH0KIGZpCiBpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KLSAgICBhdXRobW9kZXM9YGVjaG8gJGF1dGhtb2RlcyB8IHNlZCAncy9NRDUgKi8vOydgCisgICAgYXV0aG1vZGVzPWBlY2hvICRhdXRobW9kZXMgfCAkU0VEICdzL01ENSAqLy87J2AKIGZpCiAKIAogCiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICBDcnlwdG8gc3VwcG9ydCBmcm9tOiAgICAgICAgJENSWVBUTworRU9GCisKKworICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIEF1dGhlbnRpY2F0aW9uIHN1cHBvcnQ6ICAgICAkYXV0aG1vZGVzCiBFT0YKIApAQCAtMzc1NTIsMTMxICsyNDQyOSwyNjAgQEAKIAogZmkKIAotIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvZmZfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvZmZfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9vZmZfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworIworIyBDaGVjayB3aGV0aGVyIHVzZXIgd2FudHMgRE5TU0VDIGxvY2FsIHZhbGlkYXRpb24gc3VwcG9ydAorIworX2xpYnM9JHtMSUJTfQoraWYgISB0ZXN0ICJ4LSR3YW50X2Ruc3NlYyIgPSAieC1ubyIgOyB0aGVuCisgICAgZm9yIGFjX2hlYWRlciBpbiB2YWxpZGF0b3IvdmFsaWRhdG9yLWNvbmZpZy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ2YWxpZGF0b3IvdmFsaWRhdG9yLWNvbmZpZy5oIiAiYWNfY3ZfaGVhZGVyX3ZhbGlkYXRvcl92YWxpZGF0b3JfY29uZmlnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3ZhbGlkYXRvcl92YWxpZGF0b3JfY29uZmlnX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9WQUxJREFUT1JfVkFMSURBVE9SX0NPTkZJR19IIDEKIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfdmFsaWRhdG9yX3ZhbGlkYXRvcl9jb25maWdfaCIgIT0geWVzOyB0aGVuCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDYW4ndCBmaW5kIHZhbGlkYXRvci5oIiAiJExJTkVOTyIgNQorICAgIGZpCisgICAgaWYgdGVzdCAieCRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiICE9ICJ4eWVzIiAtYSBcCisgICAgICAgICAgICAieCRhY19jdl9saWJfZWF5MzJfRVZQX21kNSIgIT0gInh5ZXMiIC1vIFwKKyAgICAgICAgICAgICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2htYWNfaCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZG4ndCBmaW5kIE9wZW5TU0wgZm9yIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uIHN1cHBvcnQuIiAiJExJTkVOTyIgNQorICAgIGZpCisgICAgTElCUz0iJExJQlMgJExJQkNSWVBUTyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBxdWVyeV9zZW5kIGluIC1sc3JlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcXVlcnlfc2VuZCBpbiAtbHNyZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3NyZXNfcXVlcnlfc2VuZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc3JlcyAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHF1ZXJ5X3NlbmQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLWlmICgob2ZmX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChvZmZfdCkpCi0gIHJldHVybiAwOworcmV0dXJuIHF1ZXJ5X3NlbmQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9vZmZfdD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3NyZXNfcXVlcnlfc2VuZD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfbGliX3NyZXNfcXVlcnlfc2VuZD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3Jlc19xdWVyeV9zZW5kIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3NyZXNfcXVlcnlfc2VuZCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zcmVzX3F1ZXJ5X3NlbmQiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJTUkVTIDEKK19BQ0VPRgogCi1hY19jdl90eXBlX29mZl90PW5vCisgIExJQlM9Ii1sc3JlcyAkTElCUyIKKworZWxzZQorICBhc19mbl9lcnJvciAkPyAiQ2FuJ3QgZmluZCBsaWJzcmVzIiAiJExJTkVOTyIgNQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgIFZBTF9MSUJTPSItbHNyZXMgJExJQkNSWVBUTyIKKyAgICBMSUJTPSIkTElCUyAtbHNyZXMiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcF92YWxfc3RhdHVzIGluIC1sdmFsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwX3ZhbF9zdGF0dXMgaW4gLWx2YWwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3ZhbF9wX3ZhbF9zdGF0dXMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHZhbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcF92YWxfc3RhdHVzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcF92YWxfc3RhdHVzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl92YWxfcF92YWxfc3RhdHVzPXllcworZWxzZQorICBhY19jdl9saWJfdmFsX3BfdmFsX3N0YXR1cz1ubwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX29mZl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX29mZl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfb2ZmX3QgPSB5ZXM7IHRoZW4KLSAgOgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl92YWxfcF92YWxfc3RhdHVzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3ZhbF9wX3ZhbF9zdGF0dXMiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfdmFsX3BfdmFsX3N0YXR1cyIgPSB4eWVzOyB0aGVuIDoKKyAgTElCUz0iJExJQlMgLWx2YWwiCisgICAgICAgICAgICAgICAgIFZBTF9MSUJTPSIkVkFMX0xJQlMgLWx2YWwiCisgICAgICAgICAgICAgICAgIGhhdmVfdmFsX3Jlc19xdWVyeT15ZXMKK2Vsc2UKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfcndsb2NrX2luaXQgaW4gLWxwdGhyZWFkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX3J3bG9ja19pbml0IGluIC1scHRocmVhZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX3J3bG9ja19pbml0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwdGhyZWFkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwdGhyZWFkX3J3bG9ja19pbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcHRocmVhZF9yd2xvY2tfaW5pdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX3J3bG9ja19pbml0PXllcworZWxzZQorICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX3J3bG9ja19pbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfcndsb2NrX2luaXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX3J3bG9ja19pbml0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9yd2xvY2tfaW5pdCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlBUSFJFQUQgMQorX0FDRU9GCisKKyAgTElCUz0iLWxwdGhyZWFkICRMSUJTIgorCitmaQorCisJCSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBfdmFsX3N0YXR1cyBpbiAtbHZhbC10aHJlYWRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwX3ZhbF9zdGF0dXMgaW4gLWx2YWwtdGhyZWFkcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfdmFsX3RocmVhZHNfcF92YWxfc3RhdHVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWx2YWwtdGhyZWFkcyAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcF92YWxfc3RhdHVzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcF92YWxfc3RhdHVzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl92YWxfdGhyZWFkc19wX3ZhbF9zdGF0dXM9eWVzCitlbHNlCisgIGFjX2N2X2xpYl92YWxfdGhyZWFkc19wX3ZhbF9zdGF0dXM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3ZhbF90aHJlYWRzX3BfdmFsX3N0YXR1cyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl92YWxfdGhyZWFkc19wX3ZhbF9zdGF0dXMiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfdmFsX3RocmVhZHNfcF92YWxfc3RhdHVzIiA9IHh5ZXM7IHRoZW4gOgorICBoYXZlX3ZhbF9yZXNfcXVlcnk9eWVzCisgICAgICAgICAgICAgICAgICAgTElCUz0iLWx2YWwtdGhyZWFkcyAkTElCUyIKKyAgICAgICAgICAgICAgICAgICBWQUxfTElCUz0iLWx2YWwtdGhyZWFkcyAtbHB0aHJlYWQgJFZBTF9MSUJTIgorICAgICAgICAgICAgICAgICAgIExJQlZBTF9TVUZGSVg9Ii10aHJlYWRzIgorZWxzZQorICBhc19mbl9lcnJvciAkPyAiQ2FuJ3QgZmluZCBsaWJ2YWwgb3IgbGlidmFsLXRocmVhZHMiICIkTElORU5PIiA1CitmaQorCisKK2ZpCisKKworJGFzX2VjaG8gIiNkZWZpbmUgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04gMSIgPj5jb25mZGVmcy5oCisKKyAgICBETlNTRUM9ImVuYWJsZWQiCitlbHNlCisgICAgRE5TU0VDPSJkaXNhYmxlZCIKK2ZpCisKK0xJQlM9JHtfbGlic30KKworCisKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICBMb2NhbCBETlNTRUMgdmFsaWRhdGlvbjogICAgJEROU1NFQworRU9GCisKKworCisKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgdHlwZXMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN0YW5kYXJkIGNoZWNrczoKKyMjCisKKyMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm9mZl90IiAiYWNfY3ZfdHlwZV9vZmZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX29mZl90IiA9IHh5ZXM7IHRoZW4gOgorCiBlbHNlCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgb2ZmX3QgbG9uZworI2RlZmluZSBvZmZfdCBsb25nIGludAogX0FDRU9GCiAKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGlkX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcGlkX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfcGlkX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKHBpZF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAocGlkX3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3BpZF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicGlkX3QiICJhY19jdl90eXBlX3BpZF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcGlkX3QiID0geHllczsgdGhlbiA6CiAKLWFjX2N2X3R5cGVfcGlkX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfcGlkX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfcGlkX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9waWRfdCA9IHllczsgdGhlbgotICA6CiBlbHNlCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKQEAgLTM3Njg1LDE2ICsyNDY5MSwxMiBAQAogCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RpbWUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3RpbWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CkBAIC0zNzcwOSw2MSArMjQ3MTEsMzAgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfaGVhZGVyX3RpbWU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hlYWRlcl90aW1lPW5vCisgIGFjX2N2X2hlYWRlcl90aW1lPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGltZSIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNjsgfQogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3RpbWUgPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCiAKLSMgdGhpcyBzaG91bGQgdXNlIEFDX0NIRUNLX1RZUEUsIGJ1dCBpdCdzIGJyb2tlbiBhdCBsZWFzdCBpbiAyLjEzLTE0Ci0jIHNvIHdlIGRvIGl0IGJ5IGhhbmQuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNvY2tsZW5fdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzb2NrbGVuX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfdHlwZV8kMStzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjIworIyAgIE1vcmUgY29tcGxleCBjaGVja3M6CisjIworCisjICAgQ2hlY2sgZm9yICdzb2NrbGVuX3QnICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhQLVVYKQorIworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic29ja2xlbl90IiAiYWNfY3ZfdHlwZV9zb2NrbGVuX3QiICIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBTVERDX0hFQURFUlMKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTM3NzcyLDM5ICsyNDc0MywyMiBAQAogI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJzb2NrbGVuX3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYWNfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzCi1lbHNlCi0gIGFjX2N2X3R5cGVfc29ja2xlbl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QqCisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc29ja2xlbl90IiA9IHh5ZXM7IHRoZW4gOgogCi1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NvY2tsZW5fdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zb2NrbGVuX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9zb2NrbGVuX3QgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TT0NLTEVOX1QgMQogX0FDRU9GCiAKKwogZmkKIAotIyBBSVgga2VlcHMgaW5fYWRkcl90IGluIC91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW5fYWRkcl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGluX2FkZHJfdC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHthY19jdl90eXBlXyQxK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworIyAgIENoZWNrIGZvciAnaW5fYWRkcl90JworIyAgICAgICBNYXkgYmUgaW4gPG5ldGluZXQvaW4uaD4gICAgICAgICAgICAgICAgICAgICAgICAoQUlYKQorIworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW5fYWRkcl90IiAiYWNfY3ZfdHlwZV9pbl9hZGRyX3QiICIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBTVERDX0hFQURFUlMKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTM3ODEzLDQzMCArMjQ3NjcsNDI3IEBACiAjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImluX2FkZHJfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhY19jdl90eXBlX2luX2FkZHJfdD15ZXMKLWVsc2UKLSAgYWNfY3ZfdHlwZV9pbl9hZGRyX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbl9hZGRyX3QiID0geHllczsgdGhlbiA6CiAKLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW5fYWRkcl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2luX2FkZHJfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX2luX2FkZHJfdCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0lOX0FERFJfVCAxCiBfQUNFT0YKIAorCiBmaQogCi0jIE9sZGVyIHZlcnNpb25zIG9mIE1pbkdXIGRvIG5vdCBkZWZpbmUgc3NpemVfdCBpbiBzeXMvdHlwZXMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3NpemVfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzc2l6ZV90Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3R5cGVfJDErc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjICAgQ2hlY2sgZm9yICdzc2l6ZV90JworIyAgICAgICBOb3QgbmVjZXNzYXJpbHkgaW4gPHN5cy90eXBlcy5oPiAgICAgICAgICAgICAgICAob2xkZXIgTWluR1cpCisjCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzc2l6ZV90IiAiYWNfY3ZfdHlwZV9zc2l6ZV90IiAiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgU1REQ19IRUFERVJTCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjZW5kaWYKLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInNzaXplX3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYWNfY3ZfdHlwZV9zc2l6ZV90PXllcwotZWxzZQotICBhY19jdl90eXBlX3NzaXplX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zc2l6ZV90IiA9IHh5ZXM7IHRoZW4gOgogCi1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NzaXplX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc3NpemVfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3NzaXplX3QgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TU0laRV9UIDEKIF9BQ0VPRgogCi1maQotCi0jIENoZWNrIHBzIGFyZ3MKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgY29ycmVjdCBmbGFncyB0byBwcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBjb3JyZWN0IGZsYWdzIHRvIHBzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wc19mbGFncytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0ICJgKCRQU1BST0cgLWUgMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWUiCi1lbGlmIHRlc3QgImAoJFBTUFJPRyAtZWwgMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWVsIgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgYWN4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9ImFjeCIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIC1hY3ggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWFjeCIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIC1vIHBpZCx0dCxzdGF0ZSx0aW1lLHVjb21tIDI+JjEpIHwgJEVHUkVQICcgcHMgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItbyBwaWQsdHQsc3RhdGUsdGltZSx1Y29tbSIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIGF4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9ImF4IgotZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgotZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWUiCi1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFVuYWJsZSB0byBkZXRlcm1pbmUgdmFsaWQgcHMgZmxhZ3MuLi4gIGRlZmF1bHRpbmcuLi4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gZGV0ZXJtaW5lIHZhbGlkIHBzIGZsYWdzLi4uICBkZWZhdWx0aW5nLi4uIiA+JjI7fQotICBhY19jdl9wc19mbGFncz0iLWFjeCIKLWZpCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHNfZmxhZ3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BzX2ZsYWdzIiA+JjYKLQotUFNDTUQ9IiRQU1BST0cgJGFjX2N2X3BzX2ZsYWdzIgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFBTQ01EICIkUFNQUk9HICRhY19jdl9wc19mbGFncyIKLV9BQ0VPRgogCiAKLSMgQ2hlY2tzIGZvciBieXRlIG9yZGVyCi1pZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCB4JHdpdGhfZW5kaWFubmVzcyA9IHhiaWc7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMQotX0FDRU9GCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBNaXNjZWxsYW5lb3VzIGNoZWNrcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLSAgZWxpZiB0ZXN0IC16ICR3aXRoX2VuZGlhbm5lc3M7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBZb3UgYXJlIGNyb3NzLWNvbXBpbGluZywgYnV0IHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIHRhcmdldCdzIGVuZGlhbm5lc3MiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogWW91IGFyZSBjcm9zcy1jb21waWxpbmcsIGJ1dCB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSB0YXJnZXQncyBlbmRpYW5uZXNzIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCisjIworIyAgIENvbXBpbGF0aW9uIGNoYXJhY3RlcmlzdGljcworIyMKKworIyAgICAgICBCeXRlIG9yZGVyCisjCitpZiB0ZXN0ICIkd2l0aF9lbmRpYW5uZXNzIiA9ICJiaWciOyB0aGVuCisgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbGlmIHRlc3QgIiR3aXRoX2VuZGlhbm5lc3MiID0gImxpdHRsZSIgOyB0aGVuCisgICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19iaWdlbmRpYW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICR3aXRoX2VuZGlhbm5lc3M7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBFbmRpYW5uZXNzIGhhcyBiZWVuIHNwZWNpZmllZCwgYnV0IHlvdSBhcmUgbm90IGNyb3NzLWNvbXBpbGluZy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogRW5kaWFubmVzcyBoYXMgYmVlbiBzcGVjaWZpZWQsIGJ1dCB5b3UgYXJlIG5vdCBjcm9zcy1jb21waWxpbmcuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCisgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgICAjIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB1bml2ZXJzYWwgY29tcGlsZXIuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmbmRlZiBfX0FQUExFX0NDX18KKwkgICAgICAgbm90IGEgdW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXIKKwkgICAgICNlbmRpZgorCSAgICAgdHlwZWRlZiBpbnQgZHVtbXk7CisKIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcworCSMgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAtYXJjaCBmbGFncyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuCisJYWNfYXJjaD0KKwlhY19wcmV2PQorCWZvciBhY193b3JkIGluICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUzsgZG8KKwkgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisJICAgY2FzZSAkYWNfd29yZCBpbgorCSAgICAgaT84NiB8IHg4Nl82NCB8IHBwYyB8IHBwYzY0KQorCSAgICAgICBpZiB0ZXN0IC16ICIkYWNfYXJjaCIgfHwgdGVzdCAiJGFjX2FyY2giID0gIiRhY193b3JkIjsgdGhlbgorCQkgYWNfYXJjaD0kYWNfd29yZAorCSAgICAgICBlbHNlCisJCSBhY19jdl9jX2JpZ2VuZGlhbj11bml2ZXJzYWwKKwkJIGJyZWFrCisJICAgICAgIGZpCisJICAgICAgIDs7CisJICAgZXNhYworCSAgIGFjX3ByZXY9CisJIGVsaWYgdGVzdCAieCRhY193b3JkIiA9ICJ4LWFyY2giOyB0aGVuCisJICAgYWNfcHJldj1hcmNoCisJIGZpCisgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKwkgICAgICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KIAogaW50CiBtYWluICgpCiB7Ci0jaWYgIUJZVEVfT1JERVIgfHwgIUJJR19FTkRJQU4gfHwgIUxJVFRMRV9FTkRJQU4KLSBib2d1cyBlbmRpYW4gbWFjcm9zCi0jZW5kaWYKKyNpZiAhIChkZWZpbmVkIEJZVEVfT1JERVIgJiYgZGVmaW5lZCBCSUdfRU5ESUFOIFwKKwkJICAgICAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOIFwKKwkJICAgICAmJiBMSVRUTEVfRU5ESUFOKQorCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKwkgICAgICNlbmRpZgogCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisJCSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KIAogaW50CiBtYWluICgpCiB7CiAjaWYgQllURV9PUkRFUiAhPSBCSUdfRU5ESUFOCi0gbm90IGJpZyBlbmRpYW4KLSNlbmRpZgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCiAKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfY19iaWdlbmRpYW49bm8KKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSMgSXQgZG9lcyBub3Q7IGNvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIHRyeSB0byBndWVzcyB0aGUgZW5kaWFubmVzcyBieSBncmVwcGluZyB2YWx1ZXMgaW50byBhbiBvYmplY3QgZmlsZQotICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi1zaG9ydCBhc2NpaV9tbVtdID0geyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07Ci1zaG9ydCBhc2NpaV9paVtdID0geyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07Ci12b2lkIF9hc2NpaSAoKSB7IGNoYXIgKnMgPSAoY2hhciAqKSBhc2NpaV9tbTsgcyA9IChjaGFyICopIGFzY2lpX2lpOyB9Ci1zaG9ydCBlYmNkaWNfaWlbXSA9IHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9Owotc2hvcnQgZWJjZGljX21tW10gPSB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKLXZvaWQgX2ViY2RpYyAoKSB7IGNoYXIgKnMgPSAoY2hhciAqKSBlYmNkaWNfbW07IHMgPSAoY2hhciAqKSBlYmNkaWNfaWk7IH0KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogaW50CiBtYWluICgpCiB7Ci0gX2FzY2lpICgpOyBfZWJjZGljICgpOworI2lmICEgKGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KLSAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCi1maQotaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgotICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgotICAgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCi0gIGVsc2UKLSAgICAjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KLSAgICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCi0gIGZpCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBfQklHX0VORElBTiBvciBub3QuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogaW50CiBtYWluICgpCiB7Ci0gIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KLSAgdW5pb24KLSAgewotICAgIGxvbmcgbDsKLSAgICBjaGFyIGNbc2l6ZW9mIChsb25nKV07Ci0gIH0gdTsKLSAgdS5sID0gMTsKLSAgZXhpdCAodS5jW3NpemVvZiAobG9uZykgLSAxXSA9PSAxKTsKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJIG5vdCBiaWcgZW5kaWFuCisJCSNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLgorICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAjIFRyeSB0byBndWVzcyBieSBncmVwcGluZyB2YWx1ZXMgZnJvbSBhbiBvYmplY3QgZmlsZS4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworc2hvcnQgaW50IGFzY2lpX21tW10gPQorCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9OworCQlzaG9ydCBpbnQgYXNjaWlfaWlbXSA9CisJCSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07CisJCWludCB1c2VfYXNjaWkgKGludCBpKSB7CisJCSAgcmV0dXJuIGFzY2lpX21tW2ldICsgYXNjaWlfaWlbaV07CisJCX0KKwkJc2hvcnQgaW50IGViY2RpY19paVtdID0KKwkJICB7IDB4ODlEMywgMHhFM0UzLCAweDg1OTMsIDB4OTVDNSwgMHg4OUM0LCAweDk1ODEsIDAgfTsKKwkJc2hvcnQgaW50IGViY2RpY19tbVtdID0KKwkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKKwkJaW50IHVzZV9lYmNkaWMgKGludCBpKSB7CisJCSAgcmV0dXJuIGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsKKwkJfQorCQlleHRlcm4gaW50IGZvbzsKKworaW50CittYWluICgpCit7CityZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCisJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisJICAgIGZpCisJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgorCQlhY19jdl9jX2JpZ2VuZGlhbj1ubworCSAgICAgIGVsc2UKKwkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/CisJCWFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKwkgICAgICBmaQorCSAgICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKwkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKwkgICAgIHVuaW9uCisJICAgICB7CisJICAgICAgIGxvbmcgaW50IGw7CisJICAgICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07CisJICAgICB9IHU7CisJICAgICB1LmwgPSAxOworCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQogCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9jX2JpZ2VuZGlhbj15ZXMKKyAgICBmaQogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfYmlnZW5kaWFuIiA+JjYKLWNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGluCi0gIHllcykKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9CisgY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygKKyAgIHllcykKKyAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEiID4+Y29uZmRlZnMuaAorOzsgIygKKyAgIG5vKQorICAgICAgOzsgIygKKyAgIHVuaXZlcnNhbCkKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyRhc19lY2hvICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZzLmgKKworICAgICA7OyAjKAorICAgKikKKyAgICAgYXNfZm5fZXJyb3IgJD8gIkZhaWxlZCB0byBmaWd1cmUgb3V0IGhvc3QgZW5kaWFubmVzcywgcGxlYXNlIHVzZSAtLXdpdGgtZW5kaWFubmVzcyB0byBzcGVjaWZ5IGl0LiIgIiRMSU5FTk8iIDUgOzsKKyBlc2FjCisKKworY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKIF9BQ0VPRgotIDs7Ci0gIG5vKQotICAgICA7OwotICAqKQotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVua25vd24gZW5kaWFubmVzcwotcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCi1wcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OwotZXNhYworCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgorICAgICAgc2VkIC1uIFwKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKKyAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisgICAgIHQgY2xlYXIKKyAgICAgOmNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAtaCAiJGNhY2hlX2ZpbGUiOyB0aGVuCisJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoCisgICAgICAgICovKiB8ID86KikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKwkgIG12IC1mICIkY2FjaGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoCisgICAgICAgICopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3RhbmRhcmQgY2hlY2tzOgorIyMKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpemVfdCIgImFjX2N2X3R5cGVfc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc2l6ZV90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgc2l6ZV90IHVuc2lnbmVkIGludAorX0FDRU9GCiAKIGZpCiAKLSMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KICMgVGhlIFVsdHJpeCA0LjIgbWlwcyBidWlsdGluIGFsbG9jYSBkZWNsYXJlZCBieSBhbGxvY2EuaCBvbmx5IHdvcmtzCiAjIGZvciBjb25zdGFudCBhcmd1bWVudHMuICBVc2VsZXNzIQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3dvcmtpbmdfYWxsb2NhX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8YWxsb2NhLmg+CiBpbnQKIG1haW4gKCkKIHsKIGNoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDIgKiBzaXplb2YgKGludCkpOworCQkJICBpZiAocCkgcmV0dXJuIDA7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3Zfd29ya2luZ19hbGxvY2FfaD1ubworICBhY19jdl93b3JraW5nX2FsbG9jYV9oPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQUxMT0NBX0ggMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFsbG9jYSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhbGxvY2EuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbGxvY2EiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFsbG9jYS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX2FsbG9jYV93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZkZWYgX19HTlVDX18KICMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCkBAIC0zODI0NSwxNCArMjUxOTYsMTQgQEAKICMgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCiAjIGVsc2UKLSMgIGlmIEhBVkVfQUxMT0NBX0gKKyMgIGlmZGVmIEhBVkVfQUxMT0NBX0gKICMgICBpbmNsdWRlIDxhbGxvY2EuaD4KICMgIGVsc2UKICMgICBpZmRlZiBfQUlYCiAgI3ByYWdtYSBhbGxvY2EKICMgICBlbHNlCiAjICAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCi1jaGFyICphbGxvY2EgKCk7Cit2b2lkICphbGxvY2EgKHNpemVfdCk7CiAjICAgIGVuZGlmCiAjICAgZW5kaWYKICMgIGVuZGlmCkBAIC0zODI2Myw1MCArMjUyMTQsMjUgQEAKIG1haW4gKCkKIHsKIGNoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDEpOworCQkJCSAgICBpZiAocCkgcmV0dXJuIDA7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPW5vCisgIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQogCiBpZiB0ZXN0ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0FMTE9DQSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxMT0NBIDEiID4+Y29uZmRlZnMuaAogCiBlbHNlCiAgICMgVGhlIFNWUjMgbGliUFcgYW5kIFNWUjQgbGlidWNiIGJvdGggY29udGFpbiBpbmNvbXBhdGlibGUgZnVuY3Rpb25zCkBAIC0zODMxNCwyNSArMjUyNDAsMTkgQEAKICMgY29udGFpbiBhIGJ1Z2d5IHZlcnNpb24uICBJZiB5b3Ugc3RpbGwgd2FudCB0byB1c2UgdGhlaXIgYWxsb2NhLAogIyB1c2UgYXIgdG8gZXh0cmFjdCBhbGxvY2EubyBmcm9tIHRoZW0gaW5zdGVhZCBvZiBjb21waWxpbmcgYWxsb2NhLmMuCiAKLUFMTE9DQT1hbGxvY2EuJGFjX29iamV4dAorQUxMT0NBPVwke0xJQk9CSkRJUn1hbGxvY2EuJGFjX29iamV4dAogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBDX0FMTE9DQSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIENfQUxMT0NBIDEiID4+Y29uZmRlZnMuaAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X29zX2NyYXkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9vc19jcmF5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZiBkZWZpbmVkKENSQVkpICYmICEgZGVmaW5lZChDUkFZMikKKyNpZiBkZWZpbmVkIENSQVkgJiYgISBkZWZpbmVkIENSQVkyCiB3ZWJlY3JheQogI2Vsc2UKIHdlbm90YmVjcmF5CkBAIC0zODM0MCw3ICsyNTI2MCw3IEBACiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIndlYmVjcmF5IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJ3ZWJlY3JheSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgYWNfY3Zfb3NfY3JheT15ZXMKIGVsc2UKICAgYWNfY3Zfb3NfY3JheT1ubwpAQCAtMzgzNDgsMTAyICsyNTI2OCwxMyBAQAogcm0gLWYgY29uZnRlc3QqCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb3NfY3JheSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfb3NfY3JheSIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29zX2NyYXkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9vc19jcmF5IiA+JjY7IH0KIGlmIHRlc3QgJGFjX2N2X29zX2NyYXkgPSB5ZXM7IHRoZW4KICAgZm9yIGFjX2Z1bmMgaW4gX2dldGI2NyBHRVRCNjcgZ2V0YjY3OyBkbwotICAgIGFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgICAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgQ1JBWV9TVEFDS1NFR19FTkQgJGFjX2Z1bmMKQEAgLTM4NDU1LDIwICsyNTI4NiwxNyBAQAogICBkb25lCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX3N0YWNrX2RpcmVjdGlvbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MAogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKIGludAogZmluZF9zdGFja19kaXJlY3Rpb24gKCkKIHsKQEAgLTM4NDg2LDYwICsyNTMxNCw0MiBAQAogaW50CiBtYWluICgpCiB7Ci0gIGV4aXQgKGZpbmRfc3RhY2tfZGlyZWN0aW9uICgpIDwgMCk7CisgIHJldHVybiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKSA8IDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPTEKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPS0xCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKIAotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfY19zdGFja19kaXJlY3Rpb249LTEKIGZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjYKLQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjY7IH0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU1RBQ0tfRElSRUNUSU9OICRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbgogX0FDRU9GCiAKIAogZmkKLQorICAgICAgICAgICMgIGFsbG9jYSgpCiBpZiB0ZXN0ICRhY19jdl9jX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBuZWVkcyAtdHJhZGl0aW9uYWwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBuZWVkcyAtdHJhZGl0aW9uYWwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBuZWVkcyAtdHJhZGl0aW9uYWwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgbmVlZHMgLXRyYWRpdGlvbmFsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgICBhY19wYXR0ZXJuPSJBdXRvY29uZi4qJ3gnIgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHNndHR5Lmg+CiBBdXRvY29uZiBUSU9DR0VUUAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD15ZXMKIGVsc2UKICAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9bm8KQEAgLTM4NTQ4LDQzICsyNTM1OCw0MyBAQAogCiAKICAgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwgPSBubzsgdGhlbgotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDx0ZXJtaW8uaD4KIEF1dG9jb25mIFRDR0VUQQogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD15ZXMKIGZpCiBybSAtZiBjb25mdGVzdCoKIAogICBmaQogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiA+JjY7IH0KICAgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwgPSB5ZXM7IHRoZW4KICAgICBDQz0iJENDIC10cmFkaXRpb25hbCIKICAgZmkKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBtZW1jbXAiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBtZW1jbXAuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgLWEgIiR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZytzZXR9IiAhPSBzZXQKK3RoZW4KKyAgIyBDcm9zcy1jb21waWxpbmcgYW5kIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgaGFzIG5vdCBiZWVuIHNldCAtIGFzc3VtZQorICAjIHRoYXQgbWVtY21wKCkgaXMgYXZhaWxhYmxlLgorICBhY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllcwogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIE5hdGl2ZSBjb21waWxhdGlvbiAtIHRlc3QgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgbWVtY21wKCkuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIG1lbWNtcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBhY19jdl9mdW5jX21lbWNtcF93b3JraW5nPW5vCiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAogaW50CkBAIC0zODU5Miw5ICsyNTQwMiw5IEBACiB7CiAKICAgLyogU29tZSB2ZXJzaW9ucyBvZiBtZW1jbXAgYXJlIG5vdCA4LWJpdCBjbGVhbi4gICovCi0gIGNoYXIgYzAgPSAweDQwLCBjMSA9IDB4ODAsIGMyID0gMHg4MTsKKyAgY2hhciBjMCA9ICdcMTAwJywgYzEgPSAnXDIwMCcsIGMyID0gJ1wyMDEnOwogICBpZiAobWVtY21wKCZjMCwgJmMyLCAxKSA+PSAwIHx8IG1lbWNtcCgmYzEsICZjMiwgMSkgPj0gMCkKLSAgICBleGl0ICgxKTsKKyAgICByZXR1cm4gMTsKIAogICAvKiBUaGUgTmV4dCB4ODYgT3BlblN0ZXAgYnVnIHNob3dzIHVwIG9ubHkgd2hlbiBjb21wYXJpbmcgMTYgYnl0ZXMKICAgICAgb3IgbW9yZSBhbmQgd2l0aCBhdCBsZWFzdCBvbmUgYnVmZmVyIG5vdCBzdGFydGluZyBvbiBhIDQtYnl0ZSBib3VuZGFyeS4KQEAgLTM4NjEwLDQyMiArMjU0MjAsMzc0IEBACiAJc3RyY3B5IChhLCAiLS0tLS0tLS0wMTExMTExMSIpOwogCXN0cmNweSAoYiwgIi0tLS0tLS0tMTAwMDAwMDAiKTsKIAlpZiAobWVtY21wIChhLCBiLCAxNikgPj0gMCkKLQkgIGV4aXQgKDEpOworCSAgcmV0dXJuIDE7CiAgICAgICB9Ci0gICAgZXhpdCAoMCk7CisgICAgcmV0dXJuIDA7CiAgIH0KIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCiAKLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm8KIGZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY2Ci10ZXN0ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nID0gbm8gJiYgY2FzZSAkTElCT0JKUyBpbgotICAgICJtZW1jbXAuJGFjX29iamV4dCIgICB8IFwKLSAgKiIgbWVtY21wLiRhY19vYmpleHQiICAgfCBcCi0gICAgIm1lbWNtcC4kYWNfb2JqZXh0ICIqIHwgXAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY2OyB9Cit0ZXN0ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nID0gbm8gJiYgY2FzZSAiICRMSUJPQkpTICIgaW4KICAgKiIgbWVtY21wLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBtZW1jbXAuJGFjX29iamV4dCIgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgbWVtY21wLiRhY19vYmpleHQiCisgOzsKIGVzYWMKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3NpZ25hbCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3R5cGVfc2lnbmFsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KLSNpZmRlZiBzaWduYWwKLSMgdW5kZWYgc2lnbmFsCi0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB2b2lkICgqc2lnbmFsIChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOwotI2Vsc2UKLXZvaWQgKCpzaWduYWwgKCkpICgpOwotI2VuZGlmCiAKIGludAogbWFpbiAoKQogewotaW50IGk7CityZXR1cm4gKihzaWduYWwgKDAsIDApKSAoMCkgPT0gMTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3NpZ25hbD12b2lkCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3R5cGVfc2lnbmFsPWludAogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX3NpZ25hbD1pbnQKKyAgYWNfY3ZfdHlwZV9zaWduYWw9dm9pZAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpZ25hbCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaWduYWwiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX3NpZ25hbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjY7IH0KIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBSRVRTSUdUWVBFICRhY19jdl90eXBlX3NpZ25hbAogX0FDRU9GCiAKIAotIyBnZXRtbnRlbnQgaXMgaW4gLWxzdW4gb24gSXJpeCA0LCAtbHNlcSBvbiBEeW5peC9QVFgsIC1sZ2VuIG9uIFVuaXh3YXJlLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRtbnRlbnQgaW4gLWxzdW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0bW50ZW50IGluIC1sc3VuLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfc3VuX2dldG1udGVudCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHN1biAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRtbnRlbnQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWdldG1udGVudCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfc3VuX2dldG1udGVudD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3N1bl9nZXRtbnRlbnQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc3VuX2dldG1udGVudCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3N1bl9nZXRtbnRlbnQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3N1bl9nZXRtbnRlbnQgPSB5ZXM7IHRoZW4KLSAgTElCUz0iLWxzdW4gJExJQlMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0bW50ZW50IGluIC1sc2VxIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldG1udGVudCBpbiAtbHNlcS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3NlcV9nZXRtbnRlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxzZXEgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0bW50ZW50ICgpOwotaW50Ci1tYWluICgpCi17Ci1nZXRtbnRlbnQgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3NlcV9nZXRtbnRlbnQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9zZXFfZ2V0bW50ZW50PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NlcV9nZXRtbnRlbnQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zZXFfZ2V0bW50ZW50IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9zZXFfZ2V0bW50ZW50ID0geWVzOyB0aGVuCi0gIExJQlM9Ii1sc2VxICRMSUJTIgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldG1udGVudCBpbiAtbGdlbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRtbnRlbnQgaW4gLWxnZW4uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9nZW5fZ2V0bW50ZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZ2VuICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldG1udGVudCAoKTsKLWludAotbWFpbiAoKQotewotZ2V0bW50ZW50ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9nZW5fZ2V0bW50ZW50PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZ2VuX2dldG1udGVudD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9nZW5fZ2V0bW50ZW50IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZ2VuX2dldG1udGVudCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZ2VuX2dldG1udGVudCA9IHllczsgdGhlbgotICBMSUJTPSItbGdlbiAkTElCUyIKLWZpCi0KLWZpCi0KLWZpCi0KLQotZm9yIGFjX2Z1bmMgaW4gZ2V0bW50ZW50Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyMjCisjICAgU3RhbmQtYWxvbmUgZnVuY3Rpb24gY2hlY2tzOgorIyMKKyMgIENvcmU6Citmb3IgYWNfZnVuYyBpbiBscmFuZDQ4ICAgICAgICAgcmFuZCAgICAgICAgICByYW5kb20gICAgICAgICAgICAgICAgICAgIHNpZ25hbCAgICAgICAgICBzaWdzZXQKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworIyAgTGlicmFyeToKK2ZvciBhY19mdW5jIGluIGNsb3NlZGlyICAgICAgICBmZ2V0Y191bmxvY2tlZCAgZmxvY2tmaWxlICAgICAgICAgICAgICAgICAgICAgICAgZm9yayAgICAgICAgICAgIGZ1bmxvY2tmaWxlICAgICBnZXRpcG5vZGVieW5hbWUgICAgICAgICAgICAgICAgICBnZXR0aW1lb2ZkYXkgICAgaWZfbmFtZXRvaW5kZXggIG1rc3RlbXAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5kaXIgICAgICAgICByZWFkZGlyICAgICAgICAgcmVnY29tcCAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ZW52ICAgICAgICAgIHNldGl0aW1lciAgICAgICBzZXRsb2NhbGUgICAgICAgICAgICAgICAgICAgICAgICBzZXRzaWQgICAgICAgICAgc25wcmludGYgICAgICAgIHN0cmNhc2VzdHIgICAgICAgICAgICAgICAgICAgICAgIHN0cmR1cCAgICAgICAgICBzdHJlcnJvciAgICAgICAgc3RybmNhc2VjbXAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZiAgICAgICAgIHRpbWVzICAgICAgICAgICB2c25wcmludGYKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyMgSVB2NC9JUHY2IGZ1bmN0aW9uIGNoZWNrcy4gQUNfQ0hFQ0tfRlVOQygpIGNhbid0IGZpbmQgdGhlc2Ugb24gTWluR1cKKyMgc2luY2UgdGhlc2UgZnVuY3Rpb25zIGhhdmUgdGhlIF9fY2RlY2wgY2FsbGluZyBjb252ZW50aW9uIG9uIE1pbkdXLgorY2FzZSB4JHRhcmdldF9vcyBpbgorICB4bWluZ3cqKQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgoraW50CittYWluICgpCit7CisgZ2FpX3N0cmVycm9yKDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9mdW5jX2dhaV9zdHJlcnJvcj15ZXMKKyAgICAgICRhc19lY2hvICAiI2RlZmluZSBIQVZFX0dBSV9TVFJFUlJPUiAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8d3MydGNwaXAuaD4KK2ludAorbWFpbiAoKQoreworIGdldGFkZHJpbmZvKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvPXllcworICAgICAgJGFzX2VjaG8gICIjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHdpbnNvY2syLmg+CitpbnQKK21haW4gKCkKK3sKKyBnZXRob3N0YnluYW1lKE5VTEwpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICBhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9eWVzCisgICAgICAkYXNfZWNobyAgIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgoraW50CittYWluICgpCit7CisgZ2V0aG9zdGJ5YWRkcihOVUxMKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY3ZfZnVuY19nZXRob3N0YWRkcj15ZXMKKyAgICAgICRhc19lY2hvICAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHdpbnNvY2syLmg+CitpbnQKK21haW4gKCkKK3sKKyBnZXRob3N0bmFtZShOVUxMLCAwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY3ZfZnVuY19nZXRob3N0bmFtZT15ZXMKKyAgICAgICRhc19lY2hvICAiI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICA7OworCisgICopCisgICAgZm9yIGFjX2Z1bmMgaW4gZ2FpX3N0cmVycm9yIGdldGFkZHJpbmZvIGdldGhvc3RieW5hbWUgZ2V0aG9zdGJ5bmFtZTIgZ2V0aG9zdG5hbWUgZ2V0aG9zdGJ5YWRkcgorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgICA7OworZXNhYworCisKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0b3B0IiAiYWNfY3ZfZnVuY19nZXRvcHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0b3B0IiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVE9QVCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBnZXRvcHQuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIGdldG9wdC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImluZXRfbnRvcCIgImFjX2N2X2Z1bmNfaW5ldF9udG9wIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2luZXRfbnRvcCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTkVUX05UT1AgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgaW5ldF9udG9wLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBpbmV0X250b3AuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJpbmV0X3B0b24iICJhY19jdl9mdW5jX2luZXRfcHRvbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19pbmV0X3B0b24iID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU5FVF9QVE9OIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIGluZXRfcHRvbi4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgaW5ldF9wdG9uLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RybGNhdCIgImFjX2N2X2Z1bmNfc3RybGNhdCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJsY2F0IiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUkxDQVQgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgc3RybGNhdC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RybGNhdC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cmxjcHkiICJhY19jdl9mdW5jX3N0cmxjcHkiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RybGNweSIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJMQ1BZIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0cmxjcHkuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cmxjcHkuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJ0b2tfciIgImFjX2N2X2Z1bmNfc3RydG9rX3IiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RydG9rX3IiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSVE9LX1IgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgc3RydG9rX3IuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cnRva19yLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RydG9sIiAiYWNfY3ZfZnVuY19zdHJ0b2wiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RydG9sIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlRPTCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBzdHJ0b2wuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cnRvbC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cnRvdWwiICJhY19jdl9mdW5jX3N0cnRvdWwiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RydG91bCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJUT1VMIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0cnRvdWwuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cnRvdWwuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJ0b3VsbCIgImFjX2N2X2Z1bmNfc3RydG91bGwiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RydG91bGwiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSVE9VTEwgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgc3RydG91bGwuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cnRvdWxsLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworCisKKyMgIEFnZW50OgorZm9yIGFjX2Z1bmMgaW4gY2dldG5leHQgICAgICAgIGNob3duICAgICAgICAgIGV4ZWN2ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FpX3N0cmVycm9yICAgICAgICAgICAgICAgICAgIGdldGdybmFtICAgICAgICAgICAgICAgICAgICAgICAgZ2V0aG9zdG5hbWUgICAgIGdldGxvYWRhdmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGlkICAgICAgICAgIGdldHB3bmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzbW50b3B0ICAgICAgIGluaXRncm91cHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfbmFtZWluZGV4ICAgIGlmX2luZGV4dG9uYW1lIGlmX25hbWV0b2luZGV4ICAgICAgICAgICAgICAgICAgbG9jYWx0aW1lX3IgICAgIG1rc3RlbXAgICAgICAgIG1rdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbCAgICAgICAgICAgIHJlZ2NvbXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Z2lkICAgICAgICAgIHNldGdyb3VwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0bW50ZW50ICAgICAgIHNldHVpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnYWN0aW9uICAgICAgIHNpZ2Jsb2NrICAgICAgc2lnaG9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgc2lncHJvY21hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGZzICAgICAgICAgIHN0YXR2ZnMgICAgICAgc3RpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNhc2VjbXAgICAgIHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5hbWUgICAgICAgICAgIHVzbGVlcAorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworIyAgQXBwczoKK2ZvciBhY19mdW5jIGluIGdldGR0YWJsZXNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGdybmFtICAgICAgICBnZXRwaWQgICAgICAgIGdldHB3bmFtICAgICAgICAgICAgICAgICAgICAgICAgIHNldGdpZCAgICAgICAgICBzZXRncm91cHMgICAgIHNldHVpZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjZ2V0YXR0cgorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworIyAgTm90LVVzZWQ6Citmb3IgYWNfZnVuYyBpbiBpZl9mcmVlbmFtZWluZGV4ICAgICAgICAgICAgICBnZXRwYWdlc2l6ZSAgICAgICAgICAgICAgICAgICAgICBsc2VlazY0ICAgICAgICAgcHJlYWQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgICAgICAgICAgc2lnYWxybSAgICAgICBzb2NrZXQKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgogCiBmaQpAQCAtMzkwMzMsMjc3MCArMjU3OTUsNDEgQEAKIAogCiAKKyMjCisjICAgTW9yZSBjb21wbGV4IGZ1bmN0aW9uIGNoZWNrczoKKyMgICAgICAgICAgIChBZ2VudCkKKyMjCiAKLQotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBzZXRtbnRlbnQgaGFzbW50b3B0IGdldGhvc3RuYW1lIHVuYW1lIGdldHRpbWVvZmRheSBzZWxlY3Qgc29ja2V0Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyMgICAgICAgcnBtR2V0UGF0aCBjaGVjayBuZWVkcyBjbGVhbiBMSUJTIGVudmlyb25tZW50ICAgKExpbnV4KQorIworaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyI7IHRoZW4KKyAgICBPTERMSUJTPSRMSUJTCisgICAgTElCUz0kTE1JQkxJQlMKKyAgICBmb3IgYWNfZnVuYyBpbiBycG1HZXRQYXRoCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInJwbUdldFBhdGgiICJhY19jdl9mdW5jX3JwbUdldFBhdGgiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcnBtR2V0UGF0aCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfUlBNR0VUUEFUSCAxCiBfQUNFT0YKIAogZmkKIGRvbmUKIAorICAgIExJQlM9JE9MRExJQlMKK2ZpCiAKLQotCi0KLWZvciBhY19mdW5jIGluIHN0cmxjYXQgc3RybGNweSBzdHJ0b2wgc3RydG91bAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyAgICAgICBzdGF0ZnMoIGNoYXIgKiwgc3RydWN0IGZzX2RhdGEqICkgICAgICAgICAgICAgICAoVWx0cml4KQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHdvLWFyZ3VtZW50IHN0YXRmcyB3aXRoIHN0cnVjdCBmc19kYXRhIChVbHRyaXgpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB0d28tYXJndW1lbnQgc3RhdGZzIHdpdGggc3RydWN0IGZzX2RhdGEgKFVsdHJpeCkuLi4gIiA+JjY7IH0KK2lmICR7ZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gc3RyY2hyIHN0cnRva19yIHN0cmR1cCBtZW1jcHkgbWVtbW92ZSBpbmRleCBiY29weSBzdHJjYXNlc3RyIHJlZ2NvbXAKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotCi0KLQotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBzaWduYWwgc2V0c2lkIHNpZ3NldCBzaWdibG9jayBzaWdob2xkIHN0cmVycm9yIHNldGVudiB2c25wcmludGYgc25wcmludGYKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWZvciBhY19mdW5jIGluIHNpZ2FjdGlvbgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotCi0KLWZvciBhY19mdW5jIGluIHJhbmRvbSBscmFuZDQ4IHJhbmQKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBleGVjdiBzeXN0ZW0gZm9yayBnZXRwaWQgc3RybmNhc2VjbXAgc2lnYWxybQotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBsc2VlazY0IHByZWFkNjQKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi1pZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIiAmJiBcCi0gICAgICAgIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiBob3N0L2hyX3N3aW5zdCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIE9MRExJQlM9JExJQlMKLSAgTElCUz0kTE1JQkxJQlMKLQotZm9yIGFjX2Z1bmMgaW4gcnBtR2V0UGF0aAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSAgTElCUz0kT0xETElCUwotZmkKLQotCi1mb3IgYWNfZnVuYyBpbiBnZXRsb2FkYXZnCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gZ2V0YWRkcmluZm8gZ2V0aXBub2RlYnluYW1lIGdhaV9zdHJlcnJvcgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSMgQlNEaTIgZnVuY3Rpb25zIGRpZmZlcgotCi0KLWZvciBhY19mdW5jIGluIHN0YXR2ZnMgc3RhdGZzCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiBnZXRkdGFibGVzaXplCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotIyBmcmVlYnNkMiBjaGVja3MKLQotZm9yIGFjX2Z1bmMgaW4gZ2V0ZnNzdGF0Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiB1c2xlZXAKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWZvciBhY19mdW5jIGluIHNldGxvY2FsZQotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gdGNnZXRhdHRyCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi0KLWZvciBhY19mdW5jIGluIGlmX25hbWVpbmRleCBpZl9mcmVlbmFtZWluZGV4Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiBraW5mb19nZXRfY3B1cwotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSMgc29sYXJpcyBjaGVja3MKLQotZm9yIGFjX2Z1bmMgaW4gZ2V0cGFnZXNpemUKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWZvciBhY19mdW5jIGluIG1rc3RlbXAKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gZ2V0cHduYW0gZ2V0Z3JuYW0gc2V0Z2lkIHNldHVpZCBzZXRncm91cHMKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0jIEhpZ2ggcmVzb2x1dGlvbiBhbGFybSBzdXBwb3J0Ci0KLWZvciBhY19mdW5jIGluIHNldGl0aW1lcgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSMgZnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIGNsb2NrLgotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBta3RpbWUgc3RpbWUgdGltZXMgc3lzY29uZgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSMgbWlzc2luZyBmcm9tIGhwLXV4Ci0KLWZvciBhY19mdW5jIGluIGlmX25hbWV0b2luZGV4Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotIyBtaXNzaW5nIGZyb20gTWluR1cKLQotCi1mb3IgYWNfZnVuYyBpbiBjaG93biBsb2NhbHRpbWVfcgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBTSU9DR0lGQUREUiBpbiBzeXMvaW9jdGwuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBTSU9DR0lGQUREUiBpbiBzeXMvaW9jdGwuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7Y3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNlbmRpZgotI2lmZGVmIFNJT0NHSUZBRERSCi14eHh5ZXN4eHgKLSNlbmRpZgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ4eHh5ZXN4eHgiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFI9eWVzCi1lbHNlCi0gIGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIiID4mNgotaWYgdGVzdCAkY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNZU19JT0NUTF9IX0hBU19TSU9DR0lGQUREUiAxCi1fQUNFT0YKLQotZmkKLQotIyB1bHRyaXgKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdHdvLWFyZ3VtZW50IHN0YXRmcyB3aXRoIHN0cnVjdCBmc19kYXRhIChVbHRyaXgpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHR3by1hcmd1bWVudCBzdGF0ZnMgd2l0aCBzdHJ1Y3QgZnNfZGF0YSAoVWx0cml4KS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7ZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9bm8KIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKQEAgLTQxODE3LDExNCArMjU4NTAsOTMgQEAKIGV4aXQgKHN0YXRmcyAoIi4iLCAmZnNkKSAhPSAxKTsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKICAgZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9bm8KKyAgZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT1ubwogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEiID4mNQotZWNobyAiJHtFQ0hPX1R9JGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEiID4mNgorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmdV9jdl9zeXNfc3RhdF9mc19kYXRhIiA+JjUKKyRhc19lY2hvICIkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSIgPiY2OyB9CiBpZiB0ZXN0ICRmdV9jdl9zeXNfc3RhdF9mc19kYXRhID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNUQVRfU1RBVEZTX0ZTX0RBVEEgMQotX0FDRU9GCisKKyRhc19lY2hvICIjZGVmaW5lIFNUQVRfU1RBVEZTX0ZTX0RBVEEgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLSMgY2hlY2sgaWYgY29tcGlsZXIgcHJlLXByb2Nlc3NvciBkZWZpbmVzIF9fRlVOQ1RJT05fXwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIF9fRlVOQ1RJT05fXyBpcyBkZWZpbmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgX19GVU5DVElPTl9fIGlzIGRlZmluZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworIyMKKyMgICBPdGhlciBmdW5jdGlvbi1yZWxhdGVkIGNoZWNrczoKKyMgICAgICAgICAgIChnZW5lcmFsIGJ1aWxkKQorIyMKKworIyAgICAgICBIb3cgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X19mdW5jX19uYW1lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgbmV0c25tcF9jdl9fZnVuY19fbmFtZT1ubworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7Ci0KLSAgICBjaGFyICpjcCA9IF9fRlVOQ1RJT05fXzsKLQorY29uc3QgY2hhciogY3AgPSBfX2Z1bmNfXzsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEPW5vCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3ZfX2Z1bmNfX25hbWU9X19mdW5jX18KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQiID4mNgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgdGVzdCAiJG5ldHNubXBfY3ZfX2Z1bmNfX25hbWUiID0gbm8gOyB0aGVuCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLWlmIHRlc3QgIngkYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCIgPSAieHllcyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCAxCitpbnQKK21haW4gKCkKK3sKK2NvbnN0IGNoYXIqIGNwID0gX19GVU5DVElPTl9fOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3ZfX2Z1bmNfX25hbWU9X19GVU5DVElPTl9fCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfX2Z1bmNfX25hbWUiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X19mdW5jX19uYW1lIiA+JjY7IH0KK2lmIHRlc3QgIiRuZXRzbm1wX2N2X19mdW5jX19uYW1lIiAhPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfRlVOQ1RJT04gJG5ldHNubXBfY3ZfX2Z1bmNfX25hbWUKIF9BQ0VPRgogCiBmaQogCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgb24gU0NPIFVuaXh3YXJlIDcuMS40IChTQ08gY29tcGlsZXIpLCAic3RhdGljIGlubGluZSIgZnVuY3Rpb25zCi0jIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGlzIGRpc2FibGVzIHRoZSB3aG9sZSBpbmxpbmUgdGhpbmcgaWYgaXQKLSMgZG9lc24ndCB3b3JrIHByb3Blcmx5LiBTaG91bGQgaGF2ZSBubyBlZmZlY3Qgb24gb3RoZXIgcGxhdGZvcm1zLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAoVW5peHdhcmUpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuIChVbml4d2FyZSkuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke25ldHNubXBfY3ZfY19icm9rZW5faW5saW5lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKyMgICAgICAgV2hldGhlciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuICAgICAgKFNDTyBVbml4d2FyZSkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuIChVbml4d2FyZSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuIChVbml4d2FyZSkuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9jX2Jyb2tlbl9pbmxpbmUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBzdGF0aWMgaW5saW5lIGludCBuZXN0ZWRfaW5saW5lX2Z1bmN0aW9uKHZvaWQpIHsKICAgcmV0dXJuIDA7CkBAIC00MTkzNCw0MiArMjU5NDYsMTkgQEAKIH0KIAogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT1ubwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1uZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9eWVzCisgIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT15ZXMKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbmV0c25tcF9jdl9jX2Jyb2tlbl9pbmxpbmUiID4mNQotZWNobyAiJHtFQ0hPX1R9JG5ldHNubXBfY3ZfY19icm9rZW5faW5saW5lIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9jX2Jyb2tlbl9pbmxpbmUiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2NfYnJva2VuX2lubGluZSIgPiY2OyB9CiAKLSMgQnV0LCBzYWRseSwgdGhlIHVzYWdlIG9mIGlubGluZSBpbiBORVRfU05NUCBkaXNhZ3JlZXMgc2VyaW91c2x5IHdpdGggYXQgbGVhc3QKLSMgc29sYXJpczIsIHNvIGRpc2FibGUgaXQgZm9yIG5vdy4KKworIyAgICAgICBZZXMgLSAgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAgICAgICAoU29sYXJpcyAyLngpCisjCiBjYXNlICIkdGFyZ2V0X29zIiBpbgogICAgIHNvbGFyaXMqKQogICAgICAgICBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9eWVzCkBAIC00MTk4MCw0NjM4ICsyNTk2OSwzNjYgQEAKIAogaWYgdGVzdCAiJG5ldHNubXBfY3ZfYnJva2VuX2lubGluZSIgPSB5ZXMgOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfQlJPS0VOX0lOTElORSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfQlJPS0VOX0lOTElORSAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAotIyBvcGVuYnNkIHNlZW1zIHRvIGhhdmUgZHJvcHBlZCBtX2NsdXN0ZXJzIGFuZCBtX2NsZnJlZSBmcm9tIG1ic3RhdAogCisjIworIyAgIE1pcy1wbGFjZWQgKG5vbi1mdW5jdGlvbikgY2hlY2tzOgorIyMKIAotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gIm1ic3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAibV9jbHVzdGVycyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1ic3RhdC5tX2NsdXN0ZXJzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1ic3RhdC5tX2NsdXN0ZXJzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBTSU9DR0lGQUREUiBpbiBzeXMvaW9jdGwuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgU0lPQ0dJRkFERFIgaW4gc3lzL2lvY3RsLmguLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotCi0jaWYgSEFWRV9TWVNfTUJVRl9ICi0jaW5jbHVkZSA8c3lzL21idWYuaD4KKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IG1ic3RhdCB0ZXN0aXQ7Ci10ZXN0aXQubV9jbHVzdGVycyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0jIG9wZW5ic2Qgc2VlbXMgdG8gaGF2ZSBkcm9wcGVkIG1fbWJ1ZnMgZnJvbSBtYnN0YXQgdG9vCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gIm1ic3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAibV9tYnVmcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1ic3RhdC5tX21idWZzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1ic3RhdC5tX21idWZzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWYgSEFWRV9TWVNfTUJVRl9ICi0jaW5jbHVkZSA8c3lzL21idWYuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgbWJzdGF0IHRlc3RpdDsKLXRlc3RpdC5tX21idWZzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzaWdhY3Rpb24iIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInNhX3NpZ2FjdGlvbiIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNpZ2FjdGlvbi5zYV9zaWdhY3Rpb24iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2lnYWN0aW9uLnNhX3NpZ2FjdGlvbi4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHNpZ2FjdGlvbiB0ZXN0aXQ7Ci10ZXN0aXQuc2Ffc2lnYWN0aW9uICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAidG0iIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInRtX2dtdG9mZiIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHRtLnRtX2dtdG9mZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0bS50bV9nbXRvZmYuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TWVNfVElNRV9ICi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDx0aW1lLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHRtIHRlc3RpdDsKLXRlc3RpdC50bV9nbXRvZmYgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfbXR1IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfbXR1IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX210dS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX210dSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9pZm5ldF9oYXNfaWZfbXR1IiA9ICJ4bm8iOyB0aGVuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgX0tFUk5FTCBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBfS0VSTkVMIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X2lmbmV0X2hhc19pZl9tdHUiID0gInh5ZXMiOyB0aGVuCi0gIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD1ubwotZWxzZQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNkZWZpbmUgX0tFUk5FTCAxCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNpZm5kZWYgU0lPQ0dJRkFERFIKK05vIFNJT0NHSUZBRERSIGZvdW5kIGhlcmUuCiAjZW5kaWYKIAogaW50CiBtYWluICgpCiB7CiAKLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfbXR1ID0gMDsKLQogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFI9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD1ubworICBuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUj1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiIgPiY2OyB9CitpZiB0ZXN0ICRuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIgMSIgPj5jb25mZGVmcy5oCisKIGZpCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID4mNgorIyMKKyMgICBDaGVjayBob3cgdG8gcHJpbnQgYSBzaXplX3QgdmFyaWFibGUKKyMjCiAKLWlmIHRlc3QgIngkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA9ICJ4eWVzIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBJRk5FVF9ORUVEU19LRVJORUwgMQotX0FDRU9GCi0KLWZpCi1maQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInNvY2thZGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJzYV9sZW4iIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzb2NrYWRkci5zYV9sZW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29ja2FkZHIuc2FfbGVuLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSB1bmRlcmx5aW5nIHR5cGUgb2YgYSBzaXplX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIHVuZGVybHlpbmcgdHlwZSBvZiBhIHNpemVfdC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X3NpemVfdF90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBpZiBbIHgkbmV0c25tcF9jdl9zaXplX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzb2NrYWRkciB0ZXN0aXQ7Ci10ZXN0aXQuc2FfbGVuICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic29ja2FkZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInNhX3VuaW9uLnNhX2dlbmVyaWMuc2FfZmFtaWx5MiIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNvY2thZGRyLnNhX3VuaW9uLnNhX2dlbmVyaWMuc2FfZmFtaWx5MiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzb2NrYWRkci5zYV91bmlvbi5zYV9nZW5lcmljLnNhX2ZhbWlseTIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHNvY2thZGRyIHRlc3RpdDsKLXRlc3RpdC5zYV91bmlvbi5zYV9nZW5lcmljLnNhX2ZhbWlseTIgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzb2NrYWRkcl9zdG9yYWdlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJzc19mYW1pbHkiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzb2NrYWRkcl9zdG9yYWdlLnNzX2ZhbWlseSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzb2NrYWRkcl9zdG9yYWdlLnNzX2ZhbWlseS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHRlc3RpdDsKLXRlc3RpdC5zc19mYW1pbHkgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzb2NrYWRkcl9zdG9yYWdlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJfX3NzX2ZhbWlseSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNvY2thZGRyX3N0b3JhZ2UuX19zc19mYW1pbHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29ja2FkZHJfc3RvcmFnZS5fX3NzX2ZhbWlseS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHRlc3RpdDsKLXRlc3RpdC5fX3NzX2ZhbWlseSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInJ0ZW50cnkiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInJ0X2RzdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfZHN0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfZHN0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgcnRlbnRyeSB0ZXN0aXQ7Ci10ZXN0aXQucnRfZHN0ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLSMgY2hlY2tpbmcgZm9yIDQuMyB2cyA0LjQgcnRlbnRyeS4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0eXBlIG9mIHJ0ZW50cnkgc3RydWN0dXJlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdHlwZSBvZiBydGVudHJ5IHN0cnVjdHVyZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfUlRFTlRSWV9UWVBFK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLQotIyA0LjQgY29tcGF0Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotaW50Ci1tYWluICgpCi17Ci0KLQotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCi0jZGVmaW5lIHJ0X2RzdCBydF9ub2Rlcy0+cm5fa2V5Ci0jZW5kaWYKLQotICBzdHJ1Y3QgcnRlbnRyeSBydDsKLSAgcnQucnRfbm9kZXNbMF0ucm5fZmxhZ3MgPSAxOwotICBydC5ydF9kc3Q7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9SVEVOVFJZX1RZUEU9IkJTRC00LjQiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLSMgNC4zIGNvbXBhdAotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gIngiOyB0aGVuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBydGVudHJ5IHJ0OwotcnQucnRfaGFzaDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X1JURU5UUllfVFlQRT0iQlNELTQuMyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLSMgZWxzZSBhY2suCi1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogVW5rbm93biIgPiY1Ci1lY2hvICIke0VDSE9fVH1Vbmtub3duIiA+JjYKLSAgYWNfY3ZfUlRFTlRSWV9UWVBFPSJ1bmtub3duIgotZmkKLQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X1JURU5UUllfVFlQRSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfUlRFTlRSWV9UWVBFIiA+JjYKLQotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInhCU0QtNC40IjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBSVEVOVFJZXzRfNCAxCi1fQUNFT0YKLQotZmkKLQotIyBjaGVja2luZyBmb3IgYWxwaGEncyBvcnRlbnRyeSB2cyBydGVudHJ5Ci1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieHVua25vd24iOyB0aGVuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCBydGVudHJ5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBydGVudHJ5Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zdHJ1Y3RfcnRlbnRyeStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNkZWZpbmUgS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIm9ydGVudHJ5IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9b3J0ZW50cnkKLWVsc2UKLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9cnRlbnRyeQotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA9ICJ4cnRlbnRyeSIgOyB0aGVuCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJydGVudHJ5IgotZWxzZQotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0ib3J0ZW50cnkiCi1maQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPiY2Ci1lbHNlCi0gIFJURU5UUllfVFlQRT0icnRlbnRyeSIKLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9InJ0ZW50cnkiCi1maQotCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiAhPSAieCI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBSVEVOVFJZIHN0cnVjdCAke2FjX2N2X3N0cnVjdF9ydGVudHJ5fQotX0FDRU9GCi0KLWVsc2UKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgUlRFTlRSWSBzdHJ1Y3QgcnRlbnRyeQotX0FDRU9GCi0KLWZpCi0KLSMgY2hlY2sgZm9yIDQuMydzIHJ0ZW50cnktPnJ0X25leHQKLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4QlNELTQuMyI7IHRoZW4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHJ0ZW50cnkgaGFzIGEgcnRfbmV4dCBub2RlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBydGVudHJ5IGhhcyBhIHJ0X25leHQgbm9kZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBydGVudHJ5IHJ0OwotcnQucnRfbmV4dDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dCIgPiY2Ci0KLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dCIgPSAieHllcyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgUlRFTlRSWV9SVF9ORVhUIDEKLV9BQ0VPRgotCi1maQotCi1maQotCi0jIENoZWNrIHNpbjZfc2NvcGVfaWQgbWVtYmVyIHNwZWNpZmllZCBpbiBSRkMyNTUzIGFkZGl0aW9uYWxseQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3Qgc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotCitleHRlcm4gdW5zaWduZWQgaW50IHZhcmlhYmxlOworZXh0ZXJuIHNpemVfdCB2YXJpYWJsZTsKIGludAogbWFpbiAoKQogewotc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWNfYWdncjsKLWlmIChhY19hZ2dyLnNpbjZfc2NvcGVfaWQpCi1yZXR1cm4gMDsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3NpemVfdF90eXBlPSJpbnQiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisgICAgaWYgWyB4JG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KICRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCi0KK2V4dGVybiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlOworZXh0ZXJuIHNpemVfdCB2YXJpYWJsZTsKIGludAogbWFpbiAoKQogewotc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWNfYWdncjsKLWlmIChzaXplb2YgYWNfYWdnci5zaW42X3Njb3BlX2lkKQotcmV0dXJuIDA7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3NpemVfdF90eXBlPSJsb25nIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorICAgIGlmIFsgeCRuZXRzbm1wX2N2X3NpemVfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgdmFyaWFibGU7CitleHRlcm4gc2l6ZV90IHZhcmlhYmxlOworaW50CittYWluICgpCit7CiAKLWFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQ9bm8KKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3NpemVfdF90eXBlPSJsb25nIGxvbmciCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisgICAgaWYgWyB4JG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHZhcmlhYmxlOworZXh0ZXJuIHNpemVfdCB2YXJpYWJsZTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl9zaXplX3RfdHlwZT0ic2hvcnQiCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisgICAgaWYgWyB4JG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdmFyaWFibGU7CitleHRlcm4gc2l6ZV90IHZhcmlhYmxlOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3NpemVfdF90eXBlPSJjaGFyIgogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQgPSB5ZXM7IHRoZW4KK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X3NpemVfdF90eXBlIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9zaXplX3RfdHlwZSIgPiY2OyB9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50ZiBhIHNpemVfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnRmIGEgc2l6ZV90Li4uICIgPiY2OyB9CitjYXNlICIkbmV0c25tcF9jdl9zaXplX3RfdHlwZSIgaW4KKyAgICBjaGFyfHNob3J0fGludCkgbmV0c25tcF9QUkl6PSIiIDs7CisgICAgbG9uZykgbmV0c25tcF9QUkl6PSJsIiA7OworICAgICJsb25nIGxvbmciKSBuZXRzbm1wX1BSSXo9ImxsIiA7OworICAgICopIGFzX2ZuX2Vycm9yICQ/ICJ1bmRlcmx5aW5nIHR5cGUgb2Ygc2l6ZV90IG5vdCBrbm93biIgIiRMSU5FTk8iIDUgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9QUkl6IiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9QUkl6IiA+JjY7IH0KIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisjZGVmaW5lIE5FVFNOTVBfUFJJeiAiJG5ldHNubXBfUFJJeiIKIF9BQ0VPRgogCiAKLWZpCisjIworIyAgIENoZWNrIGhvdyB0byBwcmludCBhIHVpbnQzMl90IHZhcmlhYmxlCisjIwogCi0KLSMgQ2hlY2sgc3RydWN0IHJ0ZW50cnkgZm9yIHZhcmlvdXMgdGhpbmdzLgotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJydGVudHJ5IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJydF91bml0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnRlbnRyeS5ydF91bml0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfdW5pdC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgdW5kZXJseWluZyB0eXBlIG9mIGFuIHVpbnQzMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSB1bmRlcmx5aW5nIHR5cGUgb2YgYW4gdWludDMyX3QuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl91aW50MzJfdF90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBpZiBbIHgkbmV0c25tcF9jdl91aW50MzJfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLQorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHZhcmlhYmxlOworZXh0ZXJuIHVpbnQzMl90IHZhcmlhYmxlOwogaW50CiBtYWluICgpCiB7CiAKLXN0cnVjdCBydGVudHJ5IHRlc3RpdDsKLXRlc3RpdC5ydF91bml0ICRkZWZpbmVpdDsKLQogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZT0iY2hhciIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJydGVudHJ5IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJydF9yZWZjbnQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBydGVudHJ5LnJ0X3JlZmNudCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBydGVudHJ5LnJ0X3JlZmNudC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKyAgICBpZiBbIHgkbmV0c25tcF9jdl91aW50MzJfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLQorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCB2YXJpYWJsZTsKK2V4dGVybiB1aW50MzJfdCB2YXJpYWJsZTsKIGludAogbWFpbiAoKQogewogCi1zdHJ1Y3QgcnRlbnRyeSB0ZXN0aXQ7Ci10ZXN0aXQucnRfcmVmY250ICRkZWZpbmVpdDsKLQogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZT0ic2hvcnQiCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAicnRlbnRyeSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAicnRfaGFzaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfaGFzaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBydGVudHJ5LnJ0X2hhc2guLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisgICAgaWYgWyB4JG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi0KKyRhY19pbmNsdWRlc19kZWZhdWx0CitleHRlcm4gdW5zaWduZWQgaW50IHZhcmlhYmxlOworZXh0ZXJuIHVpbnQzMl90IHZhcmlhYmxlOwogaW50CiBtYWluICgpCiB7CiAKLXN0cnVjdCBydGVudHJ5IHRlc3RpdDsKLXRlc3RpdC5ydF9oYXNoICRkZWZpbmVpdDsKLQogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZT0iaW50IgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInJ0ZW50cnkiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInJ0X3VzZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfdXNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfdXNlLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorICAgIGlmIFsgeCRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmFyaWFibGU7CitleHRlcm4gdWludDMyX3QgdmFyaWFibGU7CiBpbnQKIG1haW4gKCkKIHsKIAotc3RydWN0IHJ0ZW50cnkgdGVzdGl0OwotdGVzdGl0LnJ0X3VzZSAkZGVmaW5laXQ7Ci0KICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGU9ImxvbmciCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLSMgQ2hlY2sgdGNwc3RhdCBmb3IgdGNwc3RhdC50Y3BfcmN2bWVtZHJvcAotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJ0Y3BzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJ0Y3BfcmN2bWVtZHJvcCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHRjcHN0YXQudGNwX3Jjdm1lbWRyb3AiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdGNwc3RhdC50Y3BfcmN2bWVtZHJvcC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKyAgICBpZiBbIHgkbmV0c25tcF9jdl91aW50MzJfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FT1VUX0gKLSNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KLSNpZmRlZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX05FVElORVRfVENQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+Ci0jZW5kaWYKLQotCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB2YXJpYWJsZTsKK2V4dGVybiB1aW50MzJfdCB2YXJpYWJsZTsKIGludAogbWFpbiAoKQogewogCi1zdHJ1Y3QgdGNwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQudGNwX3Jjdm1lbWRyb3AgJGRlZmluZWl0OwotCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl91aW50MzJfdF90eXBlPSJsb25nIGxvbmciCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCiAKIGZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSIgPiY2OyB9CiAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50ZiBhIHVpbnQzMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludGYgYSB1aW50MzJfdC4uLiAiID4mNjsgfQorY2FzZSAiJG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSIgaW4KKyAgICBjaGFyfHNob3J0fGludCkgbmV0c25tcF9QUkkzMj0iIiA7OworICAgIGxvbmcpIG5ldHNubXBfUFJJMzI9ImwiIDs7CisgICAgImxvbmcgbG9uZyIpIG5ldHNubXBfUFJJMzI9ImxsIiA7OworICAgICopIGFzX2ZuX2Vycm9yICQ/ICJ1bmRlcmx5aW5nIHR5cGUgb2YgdWludDMyX3Qgbm90IGtub3duIiAiJExJTkVOTyIgNSA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX1BSSTMyIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9QUkkzMiIgPiY2OyB9CiAKLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX1BSSTMyICIkbmV0c25tcF9QUkkzMiIKIF9BQ0VPRgogCisKKyMgY2hlY2sgdG8gc2VlIGlmIHRoZSBvcGVuc3NsIGlzIGdvb2QgZW5vdWdoIGZvciBEVExTCisjIChCSU9fZGdyYW1fZ2V0X3BlZXIgaXMgYSBtYWNybywgbm90IGEgdHJ1ZSBmdW5jdGlvbikKK2lmIGVjaG8gIiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICIgfCAkR1JFUCAiRFRMUyIgPiAvZGV2L251bGw7IHRoZW4KKyAgICBpZiAke25ldHNubXBfY3ZfYmlvX2RncmFtX2dldF9wZWVyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQklPX2RncmFtX2dldF9wZWVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBCSU9fZGdyYW1fZ2V0X3BlZXIuLi4gIiA+JjY7IH0KIAotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZmFkZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmYV9uZXh0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZhZGRyLmlmYV9uZXh0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmYWRkci5pZmFfbmV4dC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICAgIG9sZExJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkTElCUyAtbGNyeXB0byIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLQotCisjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KIGludAogbWFpbiAoKQogewotCi1zdHJ1Y3QgaWZhZGRyIHRlc3RpdDsKLXRlc3RpdC5pZmFfbmV4dCAkZGVmaW5laXQ7Ci0KK0JJT19kZ3JhbV9nZXRfcGVlcihOVUxMLCBOVUxMKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgYXNfZm5fZXJyb3IgJD8gIkRUTFMgc3VwcG9ydCByZXF1aXJlcyBhIG5ld2VyIHZlcnNpb24gb2YgT3BlblNTTCIgIiRMSU5FTk8iIDUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgICAgIExJQlM9IiRvbGRMSUJTIgorCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKwogZmkKIAogCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGRhdGEgc3RydWN0dXJlcyAmIG1lbWJlcnMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0jIENoZWNrIGlmbmV0IGVudHJpZXMgdXNpbmcgbWFjcm8gZGVmaW5lZCBpbiBhY2xvY2FsLm00LgorIyMKKyMgICBTaW1wbGUgY2hlY2tzOgorIyMKKworIyAgICAgICBzdHJ1Y3QgYXJwaGQKKyMgICBBZ2VudDoKICMKLSMgWFhYICBCcm9rZW4gb24gRnJlZUJTRCB3aGVyZSB0aGVzZSBhcmUgI2RlZmluZSdkIGluIDxuZXQvaWYuaD4KLSMKLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfYmF1ZHJhdGUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9iYXVkcmF0ZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9iYXVkcmF0ZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9iYXVkcmF0ZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2JhdWRyYXRlLmlmc192YWx1ZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2JhdWRyYXRlLmlmc192YWx1ZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9iYXVkcmF0ZS5pZnNfdmFsdWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfYmF1ZHJhdGUuaWZzX3ZhbHVlICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfc3BlZWQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9zcGVlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9zcGVlZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9zcGVlZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX3R5cGUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl90eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX3R5cGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfdHlwZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2ltY2FzdHMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9pbWNhc3RzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2ltY2FzdHMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfaW1jYXN0cyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2lxZHJvcHMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9pcWRyb3BzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2lxZHJvcHMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfaXFkcm9wcyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX25vcHJvdG8iIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9ub3Byb3RvIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX25vcHJvdG8uLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfbm9wcm90byAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX29tY2FzdHMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9vbWNhc3RzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX29tY2FzdHMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfb21jYXN0cyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX3huYW1lIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfeG5hbWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfeG5hbWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfeG5hbWUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9sYXN0Y2hhbmdlLnR2X3NlYyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2xhc3RjaGFuZ2UudHZfc2VjIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2xhc3RjaGFuZ2UudHZfc2VjLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2xhc3RjaGFuZ2UudHZfc2VjICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfbGFzdGNoYW5nZS50dl9uc2VjIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfbGFzdGNoYW5nZS50dl9uc2VjIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2xhc3RjaGFuZ2UudHZfbnNlYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9sYXN0Y2hhbmdlLnR2X25zZWMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9vYnl0ZXMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9vYnl0ZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfb2J5dGVzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX29ieXRlcyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2lieXRlcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2lieXRlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9pYnl0ZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfaWJ5dGVzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfYWRkcmxpc3QiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9hZGRybGlzdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9hZGRybGlzdC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9hZGRybGlzdCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2FkZHJoZWFkLnRxaF9maXJzdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2FkZHJoZWFkLnRxaF9maXJzdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9hZGRyaGVhZC50cWhfZmlyc3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfYWRkcmhlYWQudHFoX2ZpcnN0ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJ1ZHBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJ1ZHBzX2Rpc2NhcmQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1ZHBzdGF0LnVkcHNfZGlzY2FyZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1ZHBzdGF0LnVkcHNfZGlzY2FyZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHVkcHN0YXQgdGVzdGl0OwotdGVzdGl0LnVkcHNfZGlzY2FyZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInVkcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInVkcHNfbm9wb3J0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWRwc3RhdC51ZHBzX25vcG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1ZHBzdGF0LnVkcHNfbm9wb3J0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgdWRwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQudWRwc19ub3BvcnQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJ1ZHBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJ1ZHBzX25vcG9ydGJjYXN0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWRwc3RhdC51ZHBzX25vcG9ydGJjYXN0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVkcHN0YXQudWRwc19ub3BvcnRiY2FzdC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHVkcHN0YXQgdGVzdGl0OwotdGVzdGl0LnVkcHNfbm9wb3J0YmNhc3QgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJ1ZHBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJ1ZHBzX2Z1bGxzb2NrIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWRwc3RhdC51ZHBzX2Z1bGxzb2NrIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVkcHN0YXQudWRwc19mdWxsc29jay4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHVkcHN0YXQgdGVzdGl0OwotdGVzdGl0LnVkcHNfZnVsbHNvY2sgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJhcnBoZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiYXRfbmV4dCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFycGhkLmF0X25leHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYXJwaGQuYXRfbmV4dC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGFycGhkIiAiYXRfbmV4dCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfYXJwaGRfYXRfbmV4dCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKICNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgogI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKQEAgLTQ2NjIzLDExNjcgKzI2MzQwLDczIEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9hcnBoZF9hdF9uZXh0IiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGFycGhkIHRlc3RpdDsKLXRlc3RpdC5hdF9uZXh0ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKIAogCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic3dkZXZ0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJzd19uYmxrc2VuYWJsZWQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzd2RldnQuc3dfbmJsa3NlbmFibGVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN3ZGV2dC5zd19uYmxrc2VuYWJsZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19DT05GX0gKLSNpbmNsdWRlIDxzeXMvY29uZi5oPgorIyAgICAgICBzdHJ1Y3QgZGVzX2tzX3N0cnVjdAorIyAgICAgICAgICgnd2Vha19rZXknIGluZGljYXRlcyBvbGRlciB2ZXJzaW9uIG9mIE9wZW5TU0wpCisjICAgTGlicmFyeToKKyMKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfZGVzX2giID0gInh5ZXMiIDsgdGhlbgorICAgIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGRlc19rc19zdHJ1Y3QiICJ3ZWFrX2tleSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfZGVzX2tzX3N0cnVjdF93ZWFrX2tleSIgIgorI2lmZGVmIEhBVkVfT1BFTlNTTF9ERVNfSAorI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2Rlc19rc19zdHJ1Y3Rfd2Vha19rZXkiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc3dkZXZ0IHRlc3RpdDsKLXRlc3RpdC5zd19uYmxrc2VuYWJsZWQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0RFU19LU19TVFJVQ1RfV0VBS19LRVkgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzdGF0dmZzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJtbnRfZGlyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdHZmcy5tbnRfZGlyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXR2ZnMubW50X2Rpci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCiBmaQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCiAKKyMgICAgICAgc3RydWN0IGRpcmVudAorIyAgICAgICAgIChzZWUgYWxzbyBBQ19TVFJVQ1RfRElSRU5UX0RfVFlQRSkKKyMgICBMaWJyYXJ5OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgZGlyZW50IiAiZF90eXBlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9kaXJlbnRfZF90eXBlIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaWYgSEFWRV9ESVJFTlRfSAorI2luY2x1ZGUgPGRpcmVudC5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9kaXJlbnRfZF90eXBlIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHN0YXR2ZnMgdGVzdGl0OwotdGVzdGl0Lm1udF9kaXIgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0RJUkVOVF9EX1RZUEUgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic3RhdHZmcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiZl9mcnNpemUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0dmZzLmZfZnJzaXplIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXR2ZnMuZl9mcnNpemUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUVkZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzdGF0dmZzIHRlc3RpdDsKLXRlc3RpdC5mX2Zyc2l6ZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAogZmkKIAogCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInN0YXRmcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiZl9mcnNpemUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0ZnMuZl9mcnNpemUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdGZzLmZfZnJzaXplLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVFZGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc3RhdGZzIHRlc3RpdDsKLXRlc3RpdC5mX2Zyc2l6ZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInN0YXR2ZnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImZfZmlsZXMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0dmZzLmZfZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdHZmcy5mX2ZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVFZGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc3RhdHZmcyB0ZXN0aXQ7Ci10ZXN0aXQuZl9maWxlcyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInN0YXRmcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiZl9maWxlcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXRmcy5mX2ZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXRmcy5mX2ZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAotI2luY2x1ZGUgPHN5cy9tb3VudC5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzdGF0ZnMgdGVzdGl0OwotdGVzdGl0LmZfZmlsZXMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzdGF0ZnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImZfZmZyZWUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0ZnMuZl9mZnJlZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0ZnMuZl9mZnJlZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKLSNpbmNsdWRlIDxzeXMvbW91bnQuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc3RhdGZzIHRlc3RpdDsKLXRlc3RpdC5mX2ZmcmVlICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic3RhdGZzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJmX2ZhdmFpbCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXRmcy5mX2ZhdmFpbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0ZnMuZl9mYXZhaWwuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICi0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHN0YXRmcyB0ZXN0aXQ7Ci10ZXN0aXQuZl9mYXZhaWwgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJubGlzdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAibl92YWx1ZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5saXN0Lm5fdmFsdWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbmxpc3Qubl92YWx1ZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmIEhBVkVfTkxJU1RfSAotI2luY2x1ZGUgPG5saXN0Lmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IG5saXN0IHRlc3RpdDsKLXRlc3RpdC5uX3ZhbHVlICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLSMgc3RydWN0IG5saXN0NjQgKElSSVgpCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gIm5saXN0NjQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIm5fdmFsdWUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubGlzdDY0Lm5fdmFsdWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbmxpc3Q2NC5uX3ZhbHVlLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9OTElTVF9ICi0jaW5jbHVkZSA8bmxpc3QuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgbmxpc3Q2NCB0ZXN0aXQ7Ci10ZXN0aXQubl92YWx1ZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0jIHN0cnVjdCBldGh0b29sX2NtZAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgZXRodG9vbF9jbWQuc3BlZWRfaGkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IGV0aHRvb2xfY21kLnNwZWVkX2hpLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCisjICAgICAgIHN0cnVjdCBldGh0b29sX2NtZAorIworaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGludXhfZXRodG9vbF9oIiA9ICJ4eWVzIiA7IHRoZW4KK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGV0aHRvb2xfY21kIiAic3BlZWRfaGkiICJhY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpIiAiCiAgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAogI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2VuZGlmCiAKLQotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfY21kIGFjX2FnZ3I7Ci1pZiAoYWNfYWdnci5zcGVlZF9oaSkKLXJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGk9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0gICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQotI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICi0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfY21kIGFjX2FnZ3I7Ci1pZiAoc2l6ZW9mIGFjX2FnZ3Iuc3BlZWRfaGkpCi1yZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpID0geWVzOyB0aGVuCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGkiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TVFJVQ1RfRVRIVE9PTF9DTURfU1BFRURfSEkgMQpAQCAtNDc3OTIsMzcgKzI2NDE1LDE0IEBACiAKIGZpCiAKLQotIyBjaGVjayBzdHJ1Y3QgaXBzdGF0IGZvciB2YXJpb3VzIHRoaW5ncwotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19jYW50Zm9yd2FyZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfY2FudGZvcndhcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19jYW50Zm9yd2FyZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCiBmaQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCiAKKyMgICAgICAgc3RydWN0IGlwc3RhdAorIyAgIEFnZW50OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX2NhbnRmcmFnIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2NhbnRmcmFnIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00NzgzMCw5NSArMjY0MzAsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2NhbnRmcmFnIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX2NhbnRmb3J3YXJkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGUkFHIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19kZWxpdmVyZWQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfZGVsaXZlcmVkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfY2FudGZyYWciIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2NhbnRmcmFnIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfY2FudGZyYWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDc5MjYsOTUgKzI2NDQ5LDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19kZWxpdmVyZWQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfY2FudGZyYWcgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfREVMSVZFUkVEIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19mcmFnZHJvcHBlZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19mcmFnZHJvcHBlZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX2RlbGl2ZXJlZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfZGVsaXZlcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfZGVsaXZlcmVkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4MDIyLDk1ICsyNjQ2OCwxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfZnJhZ2Ryb3BwZWQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfZGVsaXZlcmVkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdEUk9QUEVEIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19mcmFnbWVudGVkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2ZyYWdtZW50ZWQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19mcmFnZHJvcHBlZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfZnJhZ2Ryb3BwZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19mcmFnZHJvcHBlZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODExOCw5NSArMjY0ODcsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2ZyYWdtZW50ZWQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfZnJhZ2Ryb3BwZWQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR01FTlRFRCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfbG9jYWxvdXQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfbG9jYWxvdXQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19mcmFndGltZW91dCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfZnJhZ3RpbWVvdXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19mcmFndGltZW91dC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODIxNCw5NSArMjY1MDYsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2xvY2Fsb3V0IiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX2ZyYWd0aW1lb3V0ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0xPQ0FMT1VUIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19ub3Byb3RvIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX25vcHJvdG8iICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19mcmFnbWVudGVkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19mcmFnbWVudGVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfZnJhZ21lbnRlZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODMxMCw5NSArMjY1MjUsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX25vcHJvdG8iID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfZnJhZ21lbnRlZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1BST1RPIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19ub3JvdXRlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX25vcm91dGUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19sb2NhbG91dCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfbG9jYWxvdXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19sb2NhbG91dC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODQwNiw5NSArMjY1NDQsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX25vcm91dGUiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfbG9jYWxvdXQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9ST1VURSAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfb2Ryb3BwZWQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfb2Ryb3BwZWQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19ub3Byb3RvIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19ub3Byb3RvIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfbm9wcm90by4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODUwMiw5NSArMjY1NjMsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX29kcm9wcGVkIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX25vcHJvdG8gJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0RST1BQRUQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX29mcmFnbWVudHMiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfb2ZyYWdtZW50cyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX25vcm91dGUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX25vcm91dGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19ub3JvdXRlLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4NTk4LDk1ICsyNjU4MiwxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfb2ZyYWdtZW50cyIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19ub3JvdXRlICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09GUkFHTUVOVFMgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX3JlYXNzZW1ibGVkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX3JlYXNzZW1ibGVkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfb2Ryb3BwZWQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX29kcm9wcGVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfb2Ryb3BwZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDg2OTQsOTUgKzI2NjAxLDQ1IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19yZWFzc2VtYmxlZCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19vZHJvcHBlZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19SRUFTU0VNQkxFRCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCiAKKyMgICAgICAgc3RydWN0IGlwNnN0YXQKKyMgICBBZ2VudDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwNnN0YXQiICJpcDZzX2V4dGhkcnRvb2xvbmcgIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcDZzdGF0X2lwNnNfZXh0aGRydG9vbG9uZ18iICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVQ2X0lQNl9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4KKyNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXA2c3RhdF9pcDZzX2V4dGhkcnRvb2xvbmdfIiA9IHh5ZXM7IHRoZW4gOgogCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19vZnJhZ21lbnRzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19vZnJhZ21lbnRzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfb2ZyYWdtZW50cy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVA2U1RBVF9JUDZTX0VYVEhEUlRPT0xPTkdfIDEKIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorZmkKKworCisjCisjICAgTm90LVVzZWQ6CithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfY2FudGZvcndhcmQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfY2FudGZvcndhcmQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4NzkwLDk1ICsyNjY0NywxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfY2FudGZvcndhcmQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfb2ZyYWdtZW50cyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URk9SV0FSRCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfZnJhZ3RpbWVvdXQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfZnJhZ3RpbWVvdXQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19yZWFzc2VtYmxlZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfcmVhc3NlbWJsZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19yZWFzc2VtYmxlZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODg4NiwxNzkgKzI2NjY2LDI2NDYgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2ZyYWd0aW1lb3V0IiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX3JlYXNzZW1ibGVkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdUSU1FT1VUIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKIAogCisjICAgICAgIHN0cnVjdCBtYnN0YXQKKyMgICBOb3QtVXNlZDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IG1ic3RhdCIgIm1fY2x1c3RlcnMiICJhY19jdl9tZW1iZXJfc3RydWN0X21ic3RhdF9tX2NsdXN0ZXJzIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotIyBjaGVjayBmb3IgdGhlIGRlc19rc19zdHJ1Y3Qud2Vha19rZXkgYXR0cmlidXRlLCB3aGljaCBpbmRpY2F0ZXMgdGhlCi0jIG9sZGVyIG9wZW5zc2wgdmVyc2lvbiBpcyBiZWluZyB1c2VkLgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9kZXNfaCIgPSAieHllcyIgOyB0aGVuCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTUJVRl9ICisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfbWJzdGF0X21fY2x1c3RlcnMiID0geHllczsgdGhlbiA6CiAKLWFjX3NhZmVfc3RydWN0PWBlY2hvICJkZXNfa3Nfc3RydWN0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJ3ZWFrX2tleSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRlc19rc19zdHJ1Y3Qud2Vha19rZXkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGVzX2tzX3N0cnVjdC53ZWFrX2tleS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfTUJTVEFUX01fQ0xVU1RFUlMgMQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgbWJzdGF0IiAibV9jbGZyZWUiICJhY19jdl9tZW1iZXJfc3RydWN0X21ic3RhdF9tX2NsZnJlZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NQlVGX0gKKyNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9tYnN0YXRfbV9jbGZyZWUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfTUJTVEFUX01fQ0xGUkVFIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBtYnN0YXQiICJtX21idWZzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9tYnN0YXRfbV9tYnVmcyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NQlVGX0gKKyNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9tYnN0YXRfbV9tYnVmcyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9NQlNUQVRfTV9NQlVGUyAxCitfQUNFT0YKKworCitmaQorCisKKyMJc3RydWN0IHV2bWV4cAorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdXZtZXhwIiAicGdzd2FwaW4iICJhY19jdl9tZW1iZXJfc3RydWN0X3V2bWV4cF9wZ3N3YXBpbiIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpbmNsdWRlIDx1dm0vdXZtX2V4dGVybi5oPgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXZtZXhwX3Bnc3dhcGluIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VWTUVYUF9QR1NXQVBJTiAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IG5saXN0CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBubGlzdCIgIm5fdmFsdWUiICJhY19jdl9tZW1iZXJfc3RydWN0X25saXN0X25fdmFsdWUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9OTElTVF9ICisjaW5jbHVkZSA8bmxpc3QuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfbmxpc3Rfbl92YWx1ZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9OTElTVF9OX1ZBTFVFIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBubGlzdDY0IiAibl92YWx1ZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfbmxpc3Q2NF9uX3ZhbHVlIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfTkxJU1RfSAorI2luY2x1ZGUgPG5saXN0Lmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X25saXN0NjRfbl92YWx1ZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9OTElTVDY0X05fVkFMVUUgMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCBzaWdhY3Rpb24KKyMgICBBZ2VudDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNpZ2FjdGlvbiIgInNhX3NpZ2FjdGlvbiIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc2lnYWN0aW9uX3NhX3NpZ2FjdGlvbiIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TSUdOQUxfSAorI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc2lnYWN0aW9uX3NhX3NpZ2FjdGlvbiIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3Qgc29ja2FkZHIKKyMgICBMaWJyYXJ5OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHIiICJzYV9sZW4iICJhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX2xlbiIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9XSU5TT0NLMl9IKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zYV9sZW4iID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfTEVOIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkciIgInNhX3VuaW9uLnNhX2dlbmVyaWMuc2FfZmFtaWx5MiIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfdW5pb25fc2FfZ2VuZXJpY19zYV9mYW1pbHkyIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0syX0gpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX3VuaW9uX3NhX2dlbmVyaWNfc2FfZmFtaWx5MiIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNvY2thZGRyX3N0b3JhZ2UiICJzc19mYW1pbHkiICJhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2Vfc3NfZmFtaWx5IiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0syX0gpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2Vfc3NfZmFtaWx5IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIiAiX19zc19mYW1pbHkiICJhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2VfX19zc19mYW1pbHkiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfV0lOU09DSzJfSCkKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZV9fX3NzX2ZhbWlseSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX19fU1NfRkFNSUxZIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICAgICAoc2VlIFJGQyAyNTUzKQorIyAgIExpYnJhcnk6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkcl9pbjYiICJzaW42X3Njb3BlX2lkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4KKyMgICBMaWJyYXJ5OgorIworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBzb2NrYWRkcl91bi5zdW5fcGF0aCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHNvY2thZGRyX3VuLnN1bl9wYXRoLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9zb2NrYWRkcl91bl9zdW5fcGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHNvY2thZGRyX3VuLnN1bl9wYXRoKSkiICJhY19jdl9zaXplb2Zfc29ja2FkZHJfdW5fc3VuX3BhdGgiICAgICAgICAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1VOX0gKKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNlbmRpZgorc3RydWN0IHNvY2thZGRyX3VuIHNvY2thZGRyX3VuOworCisiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zb2NrYWRkcl91bl9zdW5fcGF0aCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzb2NrYWRkcl91bi5zdW5fcGF0aCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9zb2NrYWRkcl91bl9zdW5fcGF0aD0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3NvY2thZGRyX3VuX3N1bl9wYXRoIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3NvY2thZGRyX3VuX3N1bl9wYXRoIiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX1NPQ0tBRERSX1VOX1NVTl9QQVRIICRhY19jdl9zaXplb2Zfc29ja2FkZHJfdW5fc3VuX3BhdGgKK19BQ0VPRgorCisKKworIyAgICAgICBzdHJ1Y3Qgc3RhdGZzCisjICAgQWdlbnQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0ZnMiICJmX2ZhdmFpbCIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZmF2YWlsIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9OQlVUSUxfSAorI2luY2x1ZGUgPG5idXRpbC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9mYXZhaWwiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkFWQUlMIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0ZnMiICJmX2ZmcmVlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9mZnJlZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkJVVElMX0gKKyNpbmNsdWRlIDxuYnV0aWwuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZmZyZWUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkZSRUUgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXRmcyIgImZfZmlsZXMiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2ZpbGVzIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9OQlVUSUxfSAorI2luY2x1ZGUgPG5idXRpbC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9maWxlcyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFURlNfRl9GSUxFUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdGZzIiAiZl9mbGFncyIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZmxhZ3MiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2ZsYWdzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZMQUdTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0ZnMiICJmX2Zyc2l6ZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZnJzaXplIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9OQlVUSUxfSAorI2luY2x1ZGUgPG5idXRpbC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9mcnNpemUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRlJTSVpFIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3Qgc3RhdHZmcworIyAgIEFnZW50OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdHZmcyIgImZfZmlsZXMiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXR2ZnNfZl9maWxlcyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXR2ZnNfZl9maWxlcyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRklMRVMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXR2ZnMiICJmX2Zyc2l6ZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19mX2Zyc2l6ZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXR2ZnNfZl9mcnNpemUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdHZmcyIgIm1udF9kaXIiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXR2ZnNfbW50X2RpciIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXR2ZnNfbW50X2RpciIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUVkZTX01OVF9ESVIgMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCBzd2RldnQKKyMgICBOb3QtVXNlZDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN3ZGV2dCIgInN3X25ibGtzZW5hYmxlZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3dkZXZ0X3N3X25ibGtzZW5hYmxlZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19DT05GX0gKKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zd2RldnRfc3dfbmJsa3NlbmFibGVkIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NXREVWVF9TV19OQkxLU0VOQUJMRUQgMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCB0Y3BzdGF0CisjICAgQWdlbnQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB0Y3BzdGF0IiAidGNwX3Jjdm1lbWRyb3AiICJhY19jdl9tZW1iZXJfc3RydWN0X3RjcHN0YXRfdGNwX3Jjdm1lbWRyb3AiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRU9VVF9ICisjaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF90Y3BzdGF0X3RjcF9yY3ZtZW1kcm9wIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RDUFNUQVRfVENQX1JDVk1FTURST1AgMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCB0bQorIyAgIExpYnJhcnk6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB0bSIgInRtX2dtdG9mZiIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fZ210b2ZmIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fZ210b2ZmIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRiAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgZXh0ZXJuIHRpbWV6b25lCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGV4dGVybiB0aW1lem9uZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBleHRlcm4gdGltZXpvbmUuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotCi0jaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLQorI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgogCiBpbnQKIG1haW4gKCkKIHsKIAotc3RydWN0IGRlc19rc19zdHJ1Y3QgdGVzdGl0OwotdGVzdGl0LndlYWtfa2V5ICRkZWZpbmVpdDsKKyAgcmV0dXJuIHRpbWV6b25lOwogCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1RJTUVaT05FX1ZBUklBQkxFIDEiID4+Y29uZmRlZnMuaAorCisKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAKIGZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogCisjICAgICAgIHN0cnVjdCB0aW1lem9uZQorIyAgIExpYnJhcnk6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB0aW1lem9uZSIgInR6X2RzdHRpbWUiICJhY19jdl9tZW1iZXJfc3RydWN0X3RpbWV6b25lX3R6X2RzdHRpbWUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKKyNpZmRlZiBIQVZFX1NZU19USU1FQl9ICisjIGluY2x1ZGUgPHN5cy90aW1lYi5oPgorI2VuZGlmCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF90aW1lem9uZV90el9kc3R0aW1lIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVaT05FX1RaX0RTVFRJTUUgMQogX0FDRU9GCiAKKworZmkKKworCisjICAgICAgIHN0cnVjdCB1ZHBzdGF0CisjICAgQWdlbnQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1ZHBzdGF0IiAidWRwc19kaXNjYXJkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfZGlzY2FyZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfZGlzY2FyZCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRElTQ0FSRCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdWRwc3RhdCIgInVkcHNfZnVsbHNvY2siICJhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19mdWxsc29jayIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfZnVsbHNvY2siID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0ZVTExTT0NLIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1ZHBzdGF0IiAidWRwc19ub3BvcnQiICJhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19ub3BvcnQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX25vcG9ydCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1ZHBzdGF0IiAidWRwc19ub3BvcnRiY2FzdCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX25vcG9ydGJjYXN0IiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19ub3BvcnRiY2FzdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUQkNBU1QgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHVkcHN0YXQiICJ1ZHBzX2lwYWNrZXRzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfaXBhY2tldHMiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX2lwYWNrZXRzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19JUEFDS0VUUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdWRwc3RhdCIgInVkcHNfb3BhY2tldHMiICJhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19vcGFja2V0cyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfb3BhY2tldHMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX09QQUNLRVRTIDEKK19BQ0VPRgorCisKK2ZpCisKKworCisKKyMjCisjICAgaWZuZXQtcmVsYXRlZCBjaGVja3M6CisjIworCisjICAgICAgIERvZXMgInN0cnVjdCBpZm5ldCIgbmVlZCBfS0VSTkVMIGRlZmluZWQ/ICAgICAgIChJcml4KQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBfS0VSTkVMIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBfS0VSTkVMIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9JRk5FVF9ORUVEU19LRVJORUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD11bmtub3duCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworc3RydWN0IGlmbmV0IHRlc3Q7IHRlc3QuaWZfbXR1ID0gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUw9bm8KIGZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID0gdW5rbm93biA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSBfS0VSTkVMIDEKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworc3RydWN0IGlmbmV0IHRlc3Q7IHRlc3QuaWZfbXR1ID0gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUw9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA+JjY7IH0KKworaWYgdGVzdCAieCRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID0gInh5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjICAgICAgIERvZXMgInN0cnVjdCBpZm5ldCIgbmVlZCBfS0VSTkVMX1NUUlVDVFVSRVMgZGVmaW5lZD8gICAgICAgKERyYWdvbkZseSAzKQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBfS0VSTkVMX1NUUlVDVFVSRVMgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIF9LRVJORUxfU1RSVUNUVVJFUyBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUz11bmtub3duCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworc3RydWN0IGlmbmV0IHRlc3Q7IHRlc3QuaWZfbXR1ID0gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgaWYgdGVzdCAiJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTIiA9IHVua25vd24gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworc3RydWN0IGlmbmV0IHRlc3Q7IHRlc3QuaWZfbXR1ID0gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTIiA+JjY7IH0KKworaWYgdGVzdCAieCRhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUyIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjICAgICAgIHN0cnVjdCBpZmFkZHIKKyMgICBOb3QtVXNlZDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmYWRkciIgImlmYV9uZXh0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZmFkZHJfaWZhX25leHQiICIKKworI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKworICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZhZGRyX2lmYV9uZXh0IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGQUREUl9JRkFfTkVYVCAxCitfQUNFT0YKIAogCiBmaQogCi0jIGF0dGVtcHQgdG8gZmlndXJlIG91dCBpZiBzeXNjdGwgaXMgdXNhYmxlCiAKKyMgICAgICAgc3RydWN0IGlmbmV0CisjICAgICAgICAgKEJyb2tlbiBvbiBGcmVlQlNEIC0gI2RlZmluZSdkIGluIDxuZXQvaWYuaD4pCisjICAgQWdlbnQ6ICAgKD9vciBOb3QtVXNlZD8pCisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2FkZHJsaXN0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9hZGRybGlzdCIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2FkZHJsaXN0IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0FERFJMSVNUIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2FkZHJoZWFkLnRxaF9maXJzdCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfYWRkcmhlYWRfdHFoX2ZpcnN0IiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfYWRkcmhlYWRfdHFoX2ZpcnN0IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0FERFJIRUFEX1RRSF9GSVJTVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9iYXVkcmF0ZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfYmF1ZHJhdGUiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9iYXVkcmF0ZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9iYXVkcmF0ZS5pZnNfdmFsdWUiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2JhdWRyYXRlX2lmc192YWx1ZSIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2JhdWRyYXRlX2lmc192YWx1ZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURV9JRlNfVkFMVUUgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfaWJ5dGVzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9pYnl0ZXMiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9pYnl0ZXMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSUJZVEVTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2ltY2FzdHMiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2ltY2FzdHMiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9pbWNhc3RzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lNQ0FTVFMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfaXFkcm9wcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfaXFkcm9wcyIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2lxZHJvcHMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSVFEUk9QUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9sYXN0Y2hhbmdlLnR2X3NlYyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfbGFzdGNoYW5nZV90dl9zZWMiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9sYXN0Y2hhbmdlX3R2X3NlYyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX1NFQyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9sYXN0Y2hhbmdlLnR2X25zZWMiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2xhc3RjaGFuZ2VfdHZfbnNlYyIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2xhc3RjaGFuZ2VfdHZfbnNlYyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX05TRUMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfbXR1IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9tdHUiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9tdHUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTVRVIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX25vcHJvdG8iICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX25vcHJvdG8iICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9ub3Byb3RvIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX05PUFJPVE8gMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfb2J5dGVzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9vYnl0ZXMiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9vYnl0ZXMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT0JZVEVTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX29tY2FzdHMiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX29tY2FzdHMiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9vbWNhc3RzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09NQ0FTVFMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfc3BlZWQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX3NwZWVkIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfc3BlZWQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfU1BFRUQgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfdHlwZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfdHlwZSIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX3R5cGUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfVFlQRSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl94bmFtZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfeG5hbWUiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl94bmFtZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9YTkFNRSAxCitfQUNFT0YKKworCitmaQorCisKKworIyBDaGVjayBmb3IgQlNEIDQuMyB2cyA0LjQgc3RydWN0IHJ0ZW50cnkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdHlwZSBvZiBydGVudHJ5IHN0cnVjdHVyZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0eXBlIG9mIHJ0ZW50cnkgc3RydWN0dXJlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X1JURU5UUllfVFlQRSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgIyBCU0QgNC40IGNvbXBhdGlibGUgc3RydWN0dXJlCisgICAgICAgICMgICAgKCdydF9ub2RlcycgYXJyYXkpCisgICAgICAgICMKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisKK2ludAorbWFpbiAoKQoreworCisKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKKyNkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKKyNlbmRpZgorCisgIHN0cnVjdCBydGVudHJ5IHJ0OworICBydC5ydF9ub2Rlc1swXS5ybl9mbGFncyA9IDE7CisgIHJ0LnJ0X2RzdDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X1JURU5UUllfVFlQRT0iQlNELTQuNCIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieCI7IHRoZW4KKyAgICAgICAgIyBCU0QgNC4zIGNvbXBhdGlibGUgc3RydWN0dXJlCisgICAgICAgICMgICAgKCdydF9oYXNoJykKKyAgICAgICAgIworICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKworaW50CittYWluICgpCit7CisKKworc3RydWN0IHJ0ZW50cnkgcnQ7CitydC5ydF9oYXNoOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfUlRFTlRSWV9UWVBFPSJCU0QtNC4zIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4IjsgdGhlbgorICAgICAgICAjIE5laXRoZXIgQlNEIDQuMyBub3IgNC40IGNvbXBhdGlibGUgc3RydWN0dXJlCisgICAgICAgICMKKyAgICAgICAgICAgIGFjX2N2X1JURU5UUllfVFlQRT0idW5rbm93biIKKyAgICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfUlRFTlRSWV9UWVBFIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfUlRFTlRSWV9UWVBFIiA+JjY7IH0KKworaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInhCU0QtNC40IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBSVEVOVFJZXzRfNCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyAgICBDaGVjayBmb3Igb3J0ZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQWxwaGEpCisjCitpZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieHVua25vd24iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RydWN0IHJ0ZW50cnkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBydGVudHJ5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3N0cnVjdF9ydGVudHJ5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIEtFUk5FTAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJvcnRlbnRyeSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9b3J0ZW50cnkKK2Vsc2UKKyAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9cnRlbnRyeQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID0gInhydGVudHJ5IiA7IHRoZW4KKyAgICAgICAgICAgICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0icnRlbnRyeSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJvcnRlbnRyeSIKKyAgICAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPiY2OyB9CitlbHNlCisgICAgUlRFTlRSWV9UWVBFPSJydGVudHJ5IgorICAgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJydGVudHJ5IgorZmkKKworaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPSAieCI7IHRoZW4KKyAgICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT1ydGVudHJ5CitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJURU5UUlkgc3RydWN0ICR7YWNfY3Zfc3RydWN0X3J0ZW50cnl9CitfQUNFT0YKKworCisKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIE1pc2NlbGxhbmVvdXMgT3BlcmF0aW5nLVN5c3RlbSBjaGFyYWN0ZXJpc3RpY3MKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMJRGV0ZXJtaW5lIGhvdyB0byB0ZXN0IGZvciBjaGFyYWN0ZXIgZGV2aWNlcworIwlbV2UgYXNzdW1lIHRoYXQgL2Rldi9udWxsIGRvZXMgYWN0dWFsbHkgZXhpc3QhXQorIworaWYgdGVzdCAtYyAvZGV2L251bGw7IHRoZW4KKyAgICBDREVWX1RFU1RfRkxBRz0iLWMiCitlbGlmIHRlc3QgLWYgL2Rldi9udWxsOyB0aGVuCisgICAgQ0RFVl9URVNUX0ZMQUc9Ii1mIgorZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ2FuJ3QgcmVsaWFibHkgZGV0ZWN0IGNoYXJhY3RlciBkZXZpY2VzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhbid0IHJlbGlhYmx5IGRldGVjdCBjaGFyYWN0ZXIgZGV2aWNlcyIgPiYyO30KKyAgICAjIElzIGl0IGFjdHVhbGx5IHNlbnNpYmxlIHRvIGZhbGwgYmFjayBvbiAidGVzdCAtZiIgPworICAgIENERVZfVEVTVF9GTEFHPSItZiIKK2ZpCisKKyMgICAgICAgS2VybmVsIExvY2F0aW9uCisjCSAgICB1c2VkIGluIGxpYnJhcnkvYWdlbnQKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHN5c3RlbSBrZXJuZWwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHN5c3RlbSBrZXJuZWwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfS0VSTkVMX0xPQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X0tFUk5FTF9MT0M9InVua25vd24iCisgICAgZm9yIGkgaW4gL3ZtdW5peCAvaHAtdXggL3N0YW5kL3ZtdW5peCAvZGV2L2tzeW1zIC9rZXJuZWwvdW5peCAva2VybmVsL2dlbnVuaXggL25ldGJzZCAvdW5peCAva2VybmVsIC9ic2QgL21hY2hfa2VybmVsIC9ib290L2tlcm5lbC9rZXJuZWwKKyAgICBkbworICAgICAgICBpZiB0ZXN0ICRDREVWX1RFU1RfRkxBRyAkaTsgdGhlbgorICAgICAgICAgICAgYWNfY3ZfS0VSTkVMX0xPQz0iJGkiCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgIworICAgICMgSW4gcHJpbmNpcGxlLCB0aGlzIHRlc3QgaXMgbWVhbnQgdG8gcHJvdmlkZSBhIGRlZmF1bHQgcGF0aCB0byB0aGUga2VybmVsCisgICAgIyBJbiBwcmFjdGljZSwgdGhlIHRlc3QgaXMgYnJva2VuIGFuZCB0aGUga2VybmVsIHBhdGggaXMgc2V0IHRvICJ1bmtub3duIgorICAgICMKKyAgICAjIE5vdGUgdGhhdCBvbiBjZXJ0YWluIHN5c3RlbXMgKGUuZy4gc29tZSBMaW51eCBkaXN0cmlidXRpb25zKSwKKyAgICAjICAgIGl0IGlzIGltcG9zc2libGUgdG8gcHJlZGljdCB0aGUgbmFtZSBvZiB0aGUga2VybmVsLAorICAgICMgICAgcGFydGljdWxhcmx5IGlmIGl0IGluY2x1ZGVzIHRoZSBrZXJuZWwgdmVyc2lvbiwgYXJjaGl0ZWN0dXJlLCBldGMKKyAgICAjCisgICAgIyBTaW5jZSB0aGlzIGRlZmF1bHQgd2lsbCBuZXZlciBhY3R1YWxseSBiZSB1c2VkLCB0aGVuIGRvbid0IHRyeSB0byBzZXQgaXQKKyAgICAjCisgICAgaWYgdGVzdCAkaSA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IENhbid0IGZpbmQgc3lzdGVtIGtlcm5lbC4uLiBob3BlZnVsbHkgdGhpcyB3b24ndCBiZSBuZWVkZWQhIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhbid0IGZpbmQgc3lzdGVtIGtlcm5lbC4uLiBob3BlZnVsbHkgdGhpcyB3b24ndCBiZSBuZWVkZWQhIiA+JjI7fQorICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X0tFUk5FTF9MT0MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9LRVJORUxfTE9DIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBLRVJORUxfTE9DICIkYWNfY3ZfS0VSTkVMX0xPQyIKK19BQ0VPRgorCisKKworIyAgICAgICAvZGV2L2ttZW0gZXhpc3RlbmNlCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC9kZXYva21lbSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2Rldi9rbWVtLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X0hBVkVfS01FTSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgJENERVZfVEVTVF9GTEFHIC9kZXYva21lbTsgdGhlbgorICAgICAgICBhY19jdl9IQVZFX0tNRU09Ii9kZXYva21lbSIKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9IQVZFX0tNRU0iID4mNQorJGFzX2VjaG8gIiRhY19jdl9IQVZFX0tNRU0iID4mNjsgfQorIworIyAgTm90ZSB0aGF0IGl0J3MgT0sgaWYgdGhpcyBkZXZpY2UgaXMgbm90IGZvdW5kCisjCitpZiB0ZXN0ICJ4JGFjX2N2X0hBVkVfS01FTSIgPSAieC9kZXYva21lbSI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0tNRU0gIiRhY19jdl9IQVZFX0tNRU0iCitfQUNFT0YKKworZmkKKworCisjICAgICAgIFN3YXAgZGV2aWNlIExvY2F0aW9uCisjICAgICAgICAgICAoL2Rldi9kbWVtIG9yIC9kZXYvZHJ1bSkKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHN3YXAgZGV2aWNlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X0RNRU1fTE9DKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAkQ0RFVl9URVNUX0ZMQUcgL2Rldi9kbWVtOyB0aGVuCisgICAgICAgIGFjX2N2X0RNRU1fTE9DPSIvZGV2L2RtZW0iCisgICAgZWxpZiB0ZXN0ICRDREVWX1RFU1RfRkxBRyAvZGV2L2RydW07IHRoZW4KKyAgICAgICAgYWNfY3ZfRE1FTV9MT0M9Ii9kZXYvZHJ1bSIKKyAgICBlbHNlCisgICAgICAgIGFjX2N2X0RNRU1fTE9DPSJub25lIgorICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X0RNRU1fTE9DIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfRE1FTV9MT0MiID4mNjsgfQorIworIyAgTm90ZSB0aGF0IGl0J3MgT0sgaWYgdGhpcyBkZXZpY2UgaXMgbm90IGZvdW5kCisjCitpZiB0ZXN0ICJ4JGFjX2N2X0RNRU1fTE9DIiAhPSAieG5vbmUiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgRE1FTV9MT0MgIiRhY19jdl9ETUVNX0xPQyIKK19BQ0VPRgorCitmaQorCisKKyMgICAgICAgTW91bnQgdGFibGUgTG9jYXRpb24KKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbW91bnQgdGFibGUgbG9jYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG1vdW50IHRhYmxlIGxvY2F0aW9uLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X0VUQ19NTlRUQUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9FVENfTU5UVEFCPSIke3dpdGhfbW50dGFiOi11bmtub3dufSIKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfRVRDX01OVFRBQiIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgZm9yIGkgaW4gL2V0Yy9tbnR0YWIgL2V0Yy9tdGFiIC9ldGMvZmlsZXN5c3RlbXMgL2Rldi9tbnR0YWIKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGlmIHRlc3QgLWYgJGkgLW8gLWMgJGk7IHRoZW4KKyAgICAgICAgICAgICAgICBhY19jdl9FVENfTU5UVEFCPSIkaSIKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9FVENfTU5UVEFCIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfRVRDX01OVFRBQiIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgRVRDX01OVFRBQiAiJGFjX2N2X0VUQ19NTlRUQUIiCitfQUNFT0YKKworCisKKyMgICAgICAgUHJpbnRpbmcKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJscHN0YXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxwc3RhdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTFBTVEFUX1BBVEgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRMUFNUQVRfUEFUSCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9MUFNUQVRfUEFUSD0iJExQU1RBVF9QQVRIIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9MUFNUQVRfUEFUSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0xQU1RBVF9QQVRIPSRhY19jdl9wYXRoX0xQU1RBVF9QQVRICitpZiB0ZXN0IC1uICIkTFBTVEFUX1BBVEgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTFBTVEFUX1BBVEgiID4mNQorJGFzX2VjaG8gIiRMUFNUQVRfUEFUSCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitpZiB0ZXN0IHgkTFBTVEFUX1BBVEggIT0geDsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExQU1RBVF9QQVRIICIkTFBTVEFUX1BBVEgiCitfQUNFT0YKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xQU1RBVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKK2lmIHRlc3QgLXIgL2V0Yy9wcmludGNhcDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BSSU5UQ0FQIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgICAgICAgQ2hlY2sgcHMgYXJncworIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjb3JyZWN0IGZsYWdzIHRvIHBzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjb3JyZWN0IGZsYWdzIHRvIHBzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BzX2ZsYWdzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworaWYgdGVzdCAiYCgkUFNQUk9HIC1lIDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWUiCitlbGlmIHRlc3QgImAoJFBTUFJPRyAtZWwgMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItZWwiCitlbGlmIHRlc3QgImAoJFBTUFJPRyBhY3ggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSJhY3giCitlbGlmIHRlc3QgImAoJFBTUFJPRyAtYWN4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWFjeCIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIC1vIHBpZCx0dCxzdGF0ZSx0aW1lLHVjb21tIDI+JjEpIHwgJEVHUkVQICcgcHMgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1vIHBpZCx0dCxzdGF0ZSx0aW1lLHVjb21tIgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgYXggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSJheCIKK2VsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgorZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItZSIKK2Vsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBkZXRlcm1pbmUgdmFsaWQgcHMgZmxhZ3MuLi4gIGRlZmF1bHRpbmcuLi4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIGRldGVybWluZSB2YWxpZCBwcyBmbGFncy4uLiAgZGVmYXVsdGluZy4uLiIgPiYyO30KKyAgICBhY19jdl9wc19mbGFncz0iLWFjeCIKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BzX2ZsYWdzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHNfZmxhZ3MiID4mNjsgfQorCitQU0NNRD0iJFBTUFJPRyAkYWNfY3ZfcHNfZmxhZ3MiCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQU0NNRCAiJFBTUFJPRyAkYWNfY3ZfcHNfZmxhZ3MiCitfQUNFT0YKKworCisKKyMjCisjICAgU3lzdGVtL0NvbXBpbGF0aW9uLXJlbGF0ZWQKKyMjCisKKyMgICAgICAgVGVzdCBmb3IgU0lHSFVQCisjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFNJR0hVUCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgU0lHSFVQLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBTSUdIVVAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2hhdmVfc2lnaHVwPXllcworZWxzZQorICBuZXRzbm1wX2hhdmVfc2lnaHVwPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9oYXZlX3NpZ2h1cCIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfaGF2ZV9zaWdodXAiID4mNjsgfQoraWYgdGVzdCAieCRuZXRzbm1wX2hhdmVfc2lnaHVwIiA9IHh5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TSUdIVVAgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyAgICAgICBDaGVjayB3aGV0aGVyIHN5c2N0bCgpIGlzIHVzYWJsZQorIwkgICAgdXNlZCBpbiBsaWJyYXJ5L2FnZW50CisjCiBpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSB5ZXM7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FuJ3QgY2hlY2sgc3lzY3RsLCBtYW51YWxseSBkZWZpbmUgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCBpZiBwbGF0Zm9ybSBzdXBwb3J0IGF2YWlsYWJsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhbid0IGNoZWNrIHN5c2N0bCwgbWFudWFsbHkgZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgaWYgcGxhdGZvcm0gc3VwcG9ydCBhdmFpbGFibGUiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDYW4ndCBjaGVjayBzeXNjdGwsIG1hbnVhbGx5IGRlZmluZSBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIGlmIHBsYXRmb3JtIHN1cHBvcnQgYXZhaWxhYmxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhbid0IGNoZWNrIHN5c2N0bCwgbWFudWFsbHkgZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgaWYgcGxhdGZvcm0gc3VwcG9ydCBhdmFpbGFibGUiID4mMjt9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBzeXNjdGwgY2FuIHJlYWQga2VybmVsIGluZm9ybWF0aW9uIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgc3lzY3RsIGNhbiByZWFkIGtlcm5lbCBpbmZvcm1hdGlvbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3lzY3RsIGNhbiByZWFkIGtlcm5lbCBpbmZvcm1hdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzeXNjdGwgY2FuIHJlYWQga2VybmVsIGluZm9ybWF0aW9uLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9bm8KIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQpAQCAtNDkwOTYsNjMgKzI5MzQzLDUwIEBACiB9CiAKIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQogCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPW5vCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCIgPiY2OyB9CiBmaQogCiBpZiB0ZXN0ICJ4JGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwiID0gInh5ZXMiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgMQotX0FDRU9GCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKKworIyAgIENoZWNrIHdoZXRoZXIgVENQIHRpbWVyIGNvbnN0YW50cyBhcmUgaW5kZWVkIGNvbnN0YW50CisjICAgICAgIG9yIGRlcGVuZCBvbiB0aGUga2VybmVsIGNsb2NrIHRpY2sgJ2h6Jy4gICAgICAgIChGcmVlQlNEIDQueCkKICMKLSMgSW4gRnJlZUJTRCA0LngsIHRoZSBUQ1AgdGltZXIgY29uc3RhbnRzIGFyZW4ndC4gIFRoZXkgYXJlIGRlZmluZWQKLSMgaW4gdGVybXMgb2YgJ2h6JywgdGhlIGtlcm5lbCBjbG9jayB0aWNrLiAgSW4gdGhpcyBjYXNlLAotIyB3ZSBuZWVkIHRvIGhhdmUgYSBsb2NhbCB2YXJpYWJsZSAnaHonIGluIHNjb3BlIGFuZCBzZXQgdG8gYSB1c2VmdWwKLSMgdmFsdWUgd2hlbmV2ZXIgd2UgdXNlIG9uZSBvZiB0aGVzZSBjb25zdGFudHMuCisjICAgICAgIElmIHRoZSBsYXR0ZXIsIHRoZW4gd2Ugd2lsbCBuZWVkIHRvIGhhdmUgYSBsb2NhbAorIyAgICAgICB2YXJpYWJsZSAnaHonIGRlZmluZWQgYW5kIHdpdGggYSBzdWl0YWJsZSB2YWx1ZSwKKyMgICAgICAgd2hlbmV2ZXIgd2Ugd2FudCB0byAgdXNlIG9uZSBvbmUgb2YgdGhlc2UgJ2NvbnN0YW50cycuCiAjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBUQ1AgdGltZXJzIGRlcGVuZCBvbiAnaHonIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBUQ1AgdGltZXJzIGRlcGVuZCBvbiAnaHonLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9UQ1BUVl9ORUVEU19IWitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyAJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIFRDUCB0aW1lcnMgZGVwZW5kIG9uICdoeiciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBUQ1AgdGltZXJzIGRlcGVuZCBvbiAnaHonLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X1RDUFRWX05FRURTX0haKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKwogI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CiBUQ1BUVl9TUlRUREZMVAogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJoeiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAiaHoiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGFjX2N2X1RDUFRWX05FRURTX0haPXllcwogZWxzZQogICBhY19jdl9UQ1BUVl9ORUVEU19IWj1ubwpAQCAtNDkxNjAsMTYgKzI5Mzk0LDM3NiBAQAogcm0gLWYgY29uZnRlc3QqCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfVENQVFZfTkVFRFNfSFoiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X1RDUFRWX05FRURTX0haIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfVENQVFZfTkVFRFNfSFoiID4mNQorJGFzX2VjaG8gIiRhY19jdl9UQ1BUVl9ORUVEU19IWiIgPiY2OyB9CiAKIGlmIHRlc3QgIngkYWNfY3ZfVENQVFZfTkVFRFNfSFoiID0gInh5ZXMiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFRDUFRWX05FRURTX0haIDEKKworJGFzX2VjaG8gIiNkZWZpbmUgVENQVFZfTkVFRFNfSFogMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyAgIENoZWNrIHdoZXRoZXIgSVAgUm91dGUgdGFibGUgaXMgY2FjaGVkICAgICAgICAgICAgICAoU29sYXJpcykKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworY2FzZSAkdGFyZ2V0X29zIGluCisgIHNvbGFyaXMqKQorICAgICMgICAgSGVhZGVyIGNoZWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcyAyLjYvNykKKyAgICAjCisgICAgZm9yIGFjX2hlYWRlciBpbiBpbmV0L2NvbW1vbi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJpbmV0L2NvbW1vbi5oIiAiYWNfY3ZfaGVhZGVyX2luZXRfY29tbW9uX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2luZXRfY29tbW9uX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTkVUX0NPTU1PTl9IIDEKIF9BQ0VPRgogCiBmaQogCitkb25lCisKKyAgICBmb3IgYWNfaGVhZGVyIGluIGluZXQvaXAuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiaW5ldC9pcC5oIiAiYWNfY3ZfaGVhZGVyX2luZXRfaXBfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVFJFQU1fSAorI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfSU5FVF9DT01NT05fSAorI2luY2x1ZGUgPGluZXQvY29tbW9uLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfaW5ldF9pcF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU5FVF9JUF9IIDEKK19BQ0VPRgorIGFjX2luZXRfaXBfaD15ZXMKK2Vsc2UKKyAgYWNfaW5ldF9pcF9oPW5vCitmaQorCitkb25lCisKKyAgICBpZiB0ZXN0ICRhY19pbmV0X2lwX2ggPSB5ZXMgOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1pYjJfaXBSb3V0ZUVudHJ5X3QgaW4gaW5ldC9taWIyLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG1pYjJfaXBSb3V0ZUVudHJ5X3QgaW4gaW5ldC9taWIyLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIEhBVkVfSU5FVF9NSUIyX0gKKyNpbmNsdWRlIDxpbmV0L21pYjIuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworICBtaWIyX2lwUm91dGVFbnRyeV90IHRlc3RpdDsKKyAgaWYoc2l6ZW9mKHRlc3RpdCkpCisgICAgcmV0dXJuKDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3QiID4mNjsgfQorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdCIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgSVJFX0NBQ0hFIGlzIGRlZmluZWQgaW4gaW5ldC9pcC5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgSVJFX0NBQ0hFIGlzIGRlZmluZWQgaW4gaW5ldC9pcC5oLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2lyZV9jYWNoZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIEhBVkVfSU5FVF9JUF9ICisjaW5jbHVkZSA8aW5ldC9pcC5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisgIGludCB0ZXN0aXQ9SVJFX0NBQ0hFOworICBpZih0ZXN0aXQpCisgICAgcmV0dXJuKDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaXJlX2NhY2hlPXllcworZWxzZQorICBhY19jdl9pcmVfY2FjaGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2lyZV9jYWNoZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2lyZV9jYWNoZSIgPiY2OyB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFjX2N2X2lyZV9jYWNoZT1ubworICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaXJlX2NhY2hlIiA9ICJ4eWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ERUZJTkVEX0lSRV9DQUNIRSAvKiovIiA+PmNvbmZkZWZzLmgKKworICAgICAgICBlbHNlCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEl0IHNlZW1zIHRoYXQgeW91IGhhdmUgaW5ldC9pcC5oLCBidXQgSVJFX0NBQ0hFIGlzIG5vdCBkZWZpbmVkLiBcCitUaGF0IG1lYW5zIHRoYXQgeW91ciBxdWVyeSB0byBpcFJvdXRlIE1JQiBjb3VsZCBnZW5lcmF0ZSBvdmVyIDIwayByZXN1bHRzISBcCitBbmQgdGhpcyBjYW4gYmUgdmVyeSBzbG93LiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJdCBzZWVtcyB0aGF0IHlvdSBoYXZlIGluZXQvaXAuaCwgYnV0IElSRV9DQUNIRSBpcyBub3QgZGVmaW5lZC4gXAorVGhhdCBtZWFucyB0aGF0IHlvdXIgcXVlcnkgdG8gaXBSb3V0ZSBNSUIgY291bGQgZ2VuZXJhdGUgb3ZlciAyMGsgcmVzdWx0cyEgXAorQW5kIHRoaXMgY2FuIGJlIHZlcnkgc2xvdy4iID4mMjt9CisgICAgICAgIGZpCisgICAgZmkgICAgICAgICAjICJ0ZXN0ICRhY19pbmV0X2lwX2ggPSB5ZXMiCisgICAgOzsKK2VzYWMKKworIyAgIENoZWNrIHdoZXRoZXIgSVBfUEtUSU5GTyBpcyB1c2FibGUuCisjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIElQX1BLVElORk8gIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBJUF9QS1RJTkZPIC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oYXZlX2lwX3BrdGluZm8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogcHJpbnRmKCkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gLyogbWFsbG9jKCkgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbWVtc2V0KCkgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCitpbnQKK21haW4gKCkKK3sKKworICAgIHZvaWQgKmJ1ZjsKKyAgICBpbnQgbGVuOworICAgIHZvaWQgKmZyb207CisgICAgc29ja2xlbl90ICpmcm9tbGVuOworCisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBjaGFyICpjbXNnID0gbWFsbG9jKENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSkpOworICAgIHN0cnVjdCBjbXNnaGRyICpjbTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKworICAgIGlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKyAgICBpb3YuaW92X2xlbiA9IGxlbjsKKworICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YgbXNnKTsKKyAgICBtc2cubXNnX25hbWUgPSBmcm9tOworICAgIG1zZy5tc2dfbmFtZWxlbiA9ICpmcm9tbGVuOworICAgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgICBtc2cubXNnX2lvdmxlbiA9IDE7CisgICAgbXNnLm1zZ19jb250cm9sID0gJmNtc2c7CisgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOworCisgICAgZm9yIChjbSA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtOyBjbSA9IENNU0dfTlhUSERSKCZtc2csIGNtKSkgeworICAgICAgICBpZiAoY20tPmNtc2dfbGV2ZWwgPT0gU09MX0lQICYmIGNtLT5jbXNnX3R5cGUgPT0gSVBfUEtUSU5GTykgeworICAgICAgICAgICAgc3RydWN0IGluX3BrdGluZm8qIHNyYyA9IChzdHJ1Y3QgaW5fcGt0aW5mbyAqKUNNU0dfREFUQShjbSk7CisgICAgICAgICAgICBwcmludGYoIkFkZHJlc3M6ICVzOyBpbmRleDogJWRcbiIsIGluZXRfbnRvYShzcmMtPmlwaV9hZGRyKSwKKwkgICAgICAgICAgIHNyYy0+aXBpX2lmaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvPXllcworZWxzZQorICBhY19jdl9oYXZlX2lwX3BrdGluZm89bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXZlX2lwX3BrdGluZm8iID4mNQorJGFzX2VjaG8gIiRhY19jdl9oYXZlX2lwX3BrdGluZm8iID4mNjsgfQoraWYgdGVzdCB4JGFjX2N2X2hhdmVfaXBfcGt0aW5mbyA9IHh5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JUF9QS1RJTkZPIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjICAgQ2hlY2sgd2hldGhlciBJUF9SRUNWRFNUQUREUiBpcyB1c2FibGUuCisjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIElQX1JFQ1ZEU1RBRERSICIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgSVBfUkVDVkRTVEFERFIgLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogcHJpbnRmKCkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gLyogbWFsbG9jKCkgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbWVtc2V0KCkgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCitpbnQKK21haW4gKCkKK3sKKworICAgIHZvaWQgKmJ1ZjsKKyAgICBpbnQgbGVuOworICAgIHZvaWQgKmZyb207CisgICAgc29ja2xlbl90ICpmcm9tbGVuOworCisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBjaGFyICpjbXNnID0gbWFsbG9jKENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpOworICAgIHN0cnVjdCBjbXNnaGRyICpjbTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKworICAgIGlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKyAgICBpb3YuaW92X2xlbiA9IGxlbjsKKworICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YgbXNnKTsKKyAgICBtc2cubXNnX25hbWUgPSBmcm9tOworICAgIG1zZy5tc2dfbmFtZWxlbiA9ICpmcm9tbGVuOworICAgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgICBtc2cubXNnX2lvdmxlbiA9IDE7CisgICAgbXNnLm1zZ19jb250cm9sID0gJmNtc2c7CisgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOworCisgICAgZm9yIChjbSA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtOyBjbSA9IENNU0dfTlhUSERSKCZtc2csIGNtKSkgeworICAgICAgICBpZiAoY20tPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbS0+Y21zZ190eXBlID09IElQX1JFQ1ZEU1RBRERSKSB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciogc3JjID0gKHN0cnVjdCBpbl9hZGRyICopQ01TR19EQVRBKGNtKTsKKyAgICAgICAgICAgIHByaW50ZigiQWRkcmVzczogJXNcbiIsIGluZXRfbnRvYShzcmMpKTsKKyAgICAgICAgfQorICAgIH0KKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHI9eWVzCitlbHNlCisgIGFjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHI9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkciIgPiY2OyB9CitpZiB0ZXN0IHgkYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkciA9IHh5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JUF9SRUNWRFNUQUREUiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgorICAgICAgc2VkIC1uIFwKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKKyAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisgICAgIHQgY2xlYXIKKyAgICAgOmNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAtaCAiJGNhY2hlX2ZpbGUiOyB0aGVuCisJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoCisgICAgICAgICovKiB8ID86KikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKwkgIG12IC1mICIkY2FjaGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoCisgICAgICAgICopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKICMKICMgZGVmaW5lIHRoZSBhZ2VudCBsaWJyYXJpZXMgdmFyaWFibGVzCiAjCkBAIC00OTE3OCw1MDMgKzI5NzcyLDQ0IEBACiAKIAogCi0jCi0jIFByb21wdCBmb3IgdmFyaW91cyBiaXRzIG9mIHVzZXIgaW5mb3JtYXRpb24KLSMKIAotaWYgdGVzdCAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPSAieCI7IHRoZW4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIHByb21wdCBmb3IgdmFsdWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBwcm9tcHQgZm9yIHZhbHVlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV93YXJuZWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKIAotaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgotY2F0IDw8IEVPRgogCi0JICoqKioqKioqKioqKioqIENvbmZpZ3VyYXRpb24gU2VjdGlvbiAqKioqKioqKioqKioqKgogCi0JWW91IGFyZSBhYm91dCB0byBiZSBwcm9tcHRlZCB3aXRoIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucy4gIEFuc3dlcgotdGhlbSBjYXJlZnVsbHksIGFzIHRoZXkgZGV0ZXJtaW5lIGhvdyB0aGUgU05NUCBhZ2VudCBhbmQgcmVsYXRlZAotYXBwbGljYXRpb25zIGFyZSB0byBmdW5jdGlvbi4KIAotCUFmdGVyIHRoZSBjb25maWd1cmUgc2NyaXB0IGZpbmlzaGVzLCB5b3UgY2FuIGJyb3dzZSB0aGUgbmV3bHkKLWNyZWF0ZWQgbmV0LXNubXAtY29uZmlnLmggZmlsZSBmb3IgZnVydGhlciAtIGxlc3MgaW1wb3J0YW50IC0gcGFyYW1ldGVycyB0bwotbW9kaWZ5LiAgQmUgY2FyZWZ1bCBpZiB5b3UgcmUtcnVuIGNvbmZpZ3VyZSB0aG91Z2gsIHNpbmNlIG5ldC1zbm1wLWNvbmZpZy5oCi13aWxsIGJlIG92ZXJ3cml0dGVuLgogCi0tUHJlc3MgcmV0dXJuIHRvIGNvbnRpbnVlLQotRU9GCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIgogCi1yZWFkIHRtcGlucHV0Ci1hY19jdl9oYXZlX3dhcm5lZD0ieWVzIgotZWxzZQotICBhY19jdl9oYXZlX3dhcm5lZD0ibm8iCi1maQorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIHNubXBsaWIvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnNubXBsaWIvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6c25tcGxpYi9NYWtlZmlsZS5kZXBlbmQiCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV93YXJuZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfd2FybmVkIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaGF2ZV93YXJuZWQ9InllcyIKLWZpCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYXBwcy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL01ha2VmaWxlLmRlcGVuZCIKIAotTUU9YCRXSE9BTUlgCi1pZiB0ZXN0IC1mIC9ldGMvcmVzb2x2LmNvbmY7IHRoZW4KLSAgTE9DPWBjYXQgL2V0Yy9yZXNvbHYuY29uZiB8IGdyZXAgJ15kb21haW4nIHwgdGFpbCAtMSB8IGF3ayAne3ByaW50ICRORn0nYAotZWxzZQotICBMT0M9IkBuby53aGVyZSIKLWZpCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCIKIAorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmQiCiAKLU1TR19DSEVDSz1gZWNobyAiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCIKIAotKioqIERlZmF1bHQgU05NUCBWZXJzaW9uOgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFnZW50L21pYmdyb3VwL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQiCiAKLQlTdGFydGluZyB3aXRoIE5ldC1TTk1QIDUuMCwgeW91IGNhbiBjaG9vc2UgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZgotdGhlIFNOTVAgcHJvdG9jb2wgdG8gdXNlIHdoZW4gbm8gdmVyc2lvbiBpcyBnaXZlbiBleHBsaWNpdGx5IG9uIHRoZQotY29tbWFuZCBsaW5lLCBvciB2aWEgYW4gJ3NubXAuY29uZicgZmlsZS4gIEluIHRoZSBwYXN0IHRoaXMgd2FzIHNldCB0bwotU05NUHYxLCBidXQgeW91IGNhbiB1c2UgdGhpcyB0byBzd2l0Y2ggdG8gU05NUHYzIGlmIGRlc2lyZWQuICBTTk1QdjMKLXdpbGwgcHJvdmlkZSBhIG1vcmUgc2VjdXJlIG1hbmFnZW1lbnQgZW52aXJvbm1lbnQgKGFuZCB0aHVzIHlvdSdyZQotZW5jb3VyYWdlZCB0byBzd2l0Y2ggdG8gU05NUHYzKSwgYnV0IG1heSBicmVhayBleGlzdGluZyBzY3JpcHRzIHRoYXQKLXJlbHkgb24gdGhlIG9sZCBiZWhhdmlvdXIuICAoVGhvdWdoIHN1Y2ggc2NyaXB0cyB3aWxsIHByb2JhYmx5IG5lZWQgdG8KLWJlIGNoYW5nZWQgdG8gdXNlIHRoZSAnLWMnIGNvbW11bml0eSBmbGFnIGFueXdheSwgYXMgdGhlIFNOTVB2MQotY29tbWFuZCBsaW5lIHVzYWdlIGhhcyBjaGFuZ2VkIGFzIHdlbGwuKS4KLSAgIEF0IHRoaXMgcHJvbXB0IHlvdSBjYW4gc2VsZWN0IFwiMVwiLCBcIjJcIiAoZm9yIFNOTVB2MmMpLCBvciBcIjNcIiBhcwotdGhlIGRlZmF1bHQgdmVyc2lvbiBmb3IgdGhlIGNvbW1hbmQgdG9vbHMgKHNubXBnZXQsIC4uLikgdG8gdXNlLiAgVGhpcwotY2FuIGFsd2F5cyBiZSBvdmVycmlkZGVuIGF0IHJ1bnRpbWUgdXNpbmcgdGhlIC12IGZsYWcgdG8gdGhlIHRvb2xzLCBvcgotYnkgdXNpbmcgdGhlIFwiZGVmVmVyc2lvblwiIHRva2VuIGluIHlvdXIgc25tcC5jb25mIGZpbGUuCi0gICBQcm92aWRpbmcgdGhlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj1cInhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIgogCi1EZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2UiIHwgdGFpbCAtMWAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBlY2hvICIiID4mNgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIHRlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW4iCiAKLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWVjaG8gJEVDSE9fTiAiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbWFuL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptYW4vTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiCiAKLSoqKiBEZWZhdWx0IFNOTVAgVmVyc2lvbjoKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBtaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIgogCi0JU3RhcnRpbmcgd2l0aCBOZXQtU05NUCA1LjAsIHlvdSBjYW4gY2hvb3NlIHRoZSBkZWZhdWx0IHZlcnNpb24gb2YKLXRoZSBTTk1QIHByb3RvY29sIHRvIHVzZSB3aGVuIG5vIHZlcnNpb24gaXMgZ2l2ZW4gZXhwbGljaXRseSBvbiB0aGUKLWNvbW1hbmQgbGluZSwgb3IgdmlhIGFuICdzbm1wLmNvbmYnIGZpbGUuICBJbiB0aGUgcGFzdCB0aGlzIHdhcyBzZXQgdG8KLVNOTVB2MSwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgdG8gc3dpdGNoIHRvIFNOTVB2MyBpZiBkZXNpcmVkLiAgU05NUHYzCi13aWxsIHByb3ZpZGUgYSBtb3JlIHNlY3VyZSBtYW5hZ2VtZW50IGVudmlyb25tZW50IChhbmQgdGh1cyB5b3UncmUKLWVuY291cmFnZWQgdG8gc3dpdGNoIHRvIFNOTVB2MyksIGJ1dCBtYXkgYnJlYWsgZXhpc3Rpbmcgc2NyaXB0cyB0aGF0Ci1yZWx5IG9uIHRoZSBvbGQgYmVoYXZpb3VyLiAgKFRob3VnaCBzdWNoIHNjcmlwdHMgd2lsbCBwcm9iYWJseSBuZWVkIHRvCi1iZSBjaGFuZ2VkIHRvIHVzZSB0aGUgJy1jJyBjb21tdW5pdHkgZmxhZyBhbnl3YXksIGFzIHRoZSBTTk1QdjEKLWNvbW1hbmQgbGluZSB1c2FnZSBoYXMgY2hhbmdlZCBhcyB3ZWxsLikuCi0gICBBdCB0aGlzIHByb21wdCB5b3UgY2FuIHNlbGVjdCBcIjFcIiwgXCIyXCIgKGZvciBTTk1QdjJjKSwgb3IgXCIzXCIgYXMKLXRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBjb21tYW5kIHRvb2xzIChzbm1wZ2V0LCAuLi4pIHRvIHVzZS4gIFRoaXMKLWNhbiBhbHdheXMgYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lIHVzaW5nIHRoZSAtdiBmbGFnIHRvIHRoZSB0b29scywgb3IKLWJ5IHVzaW5nIHRoZSBcImRlZlZlcnNpb25cIiB0b2tlbiBpbiB5b3VyIHNubXAuY29uZiBmaWxlLgotICAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249XCJ4XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIG5ldC1zbm1wLWNvbmZpZzpuZXQtc25tcC1jb25maWcuaW4iCiAKLURlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZSAoMyk6ICRFQ0hPX0MiCi1yZWFkIHRtcGlucHV0Ci1pZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIjMiICE9ICIiOyB0aGVuCi0gIHRtcGlucHV0PSIzIgotZmkKLWV2YWwgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj1cIiR0bXBpbnB1dFwiCi1lbHNlCi10bXBpbnB1dD0iMyIKLWV2YWwgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj1cIiR0bXBpbnB1dFwiCi1maQorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyOm5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluIgogCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlczpkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluIgogCi1ldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049XCRORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OCi1lY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2CithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbG9jYWwvc25tcGNvbmYiCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPiY2Ci1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIm5vbmUiOyB0aGVuCi0gIGlmIHRlc3QgInh1bnF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInh1bnF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04gIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIgotX0FDRU9GCiAKLSAgZWxzZQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTgotX0FDRU9GCi0KLSAgZmkKLWZpCi0KLQotIyB3ZSB0ZXN0ZWQgdGhpcyBhYm92ZSBiZWZvcmUgdGhlIHByb21wdCwgYnV0IHRoZSBwcm9tcHQgbWF5IGdpdmUgYSBuZXcgdmFsdWUuCi1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPSAiMmMiOyB0aGVuCi0gIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049IjIiCi1maQotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIxIiAtYSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIyIiAtYSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIzIjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJbGxlZ2FsIHZlcnNpb24gbnVtYmVyLiAgT25seSAxLCAyIChmb3IgU05NUHYyYykgYW5kIDMgYXJlIHN1cHBvcnRlZC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogSWxsZWdhbCB2ZXJzaW9uIG51bWJlci4gIE9ubHkgMSwgMiAoZm9yIFNOTVB2MmMpIGFuZCAzIGFyZSBzdXBwb3J0ZWQuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi0KLU1TR19DSEVDSz1gZWNobyAiCi0KLSoqKiBTeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbjoKLQotCURlc2NyaWJlcyB3aG8gc2hvdWxkIGJlIGNvbnRhY3RlZCBhYm91dCB0aGUgaG9zdCB0aGUgYWdlbnQgaXMKLXJ1bm5pbmcgb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICBUaGlzCi1jYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUgXCJzeXNjb250YWN0XCIgc3ludGF4IGluIHRoZSBhZ2VudCdzCi1jb25maWd1cmF0aW9uIGZpbGVzLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtY29udGFjdD1cImNvbnRhY3RcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLVN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uIiB8IHRhaWwgLTFgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZWNobyAiIiA+JjYKLQotaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgotZWNobyAkRUNIT19OICIKLQotKioqIFN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uOgotCi0JRGVzY3JpYmVzIHdobyBzaG91bGQgYmUgY29udGFjdGVkIGFib3V0IHRoZSBob3N0IHRoZSBhZ2VudCBpcwotcnVubmluZyBvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIFRoaXMKLWNhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZSBcInN5c2NvbnRhY3RcIiBzeW50YXggaW4gdGhlIGFnZW50J3MKLWNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1jb250YWN0PVwiY29udGFjdFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb24gKCRNRUAkTE9DKTogJEVDSE9fQyIKLXJlYWQgdG1waW5wdXQKLWlmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJE1FQCRMT0MiICE9ICIiOyB0aGVuCi0gIHRtcGlucHV0PSIkTUVAJExPQyIKLWZpCi1ldmFsIE5FVFNOTVBfU1lTX0NPTlRBQ1Q9XCIkdG1waW5wdXRcIgotZWxzZQotdG1waW5wdXQ9IiRNRUAkTE9DIgotZXZhbCBORVRTTk1QX1NZU19DT05UQUNUPVwiJHRtcGlucHV0XCIKLWZpCi0KLQotZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUPVwkTkVUU05NUF9TWVNfQ09OVEFDVAotZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiID4mNgotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiICE9ICJub25lIjsgdGhlbgotICBpZiB0ZXN0ICJ4cXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfU1lTX0NPTlRBQ1QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIgotX0FDRU9GCi0KLSAgZWxzZQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9TWVNfQ09OVEFDVCAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVAotX0FDRU9GCi0KLSAgZmkKLWZpCi0KLQotCi1NU0dfQ0hFQ0s9YGVjaG8gIgotCi0qKiogU3lzdGVtIExvY2F0aW9uOgotCi0JRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtLiAgVGhpcyBpbmZvcm1hdGlvbiBpcwotYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIHRoaXMgY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlCi1cInN5c2xvY2F0aW9uXCIgc3ludGF4IGluIHRoZSBhZ2VudCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1sb2NhdGlvbj1cImxvY2F0aW9uXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1TeXN0ZW0gTG9jYXRpb24iIHwgdGFpbCAtMWAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiIgPiY2Ci0KLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWVjaG8gJEVDSE9fTiAiCi0KLSoqKiBTeXN0ZW0gTG9jYXRpb246Ci0KLQlEZXNjcmliZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0uICBUaGlzIGluZm9ybWF0aW9uIGlzCi1hdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgdGhpcyBjYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUKLVwic3lzbG9jYXRpb25cIiBzeW50YXggaW4gdGhlIGFnZW50J3MgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWxvY2F0aW9uPVwibG9jYXRpb25cIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLVN5c3RlbSBMb2NhdGlvbiAoVW5rbm93bik6ICRFQ0hPX0MiCi1yZWFkIHRtcGlucHV0Ci1pZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIlVua25vd24iICE9ICIiOyB0aGVuCi0gIHRtcGlucHV0PSJVbmtub3duIgotZmkKLWV2YWwgTkVUU05NUF9TWVNfTE9DPVwiJHRtcGlucHV0XCIKLWVsc2UKLXRtcGlucHV0PSJVbmtub3duIgotZXZhbCBORVRTTk1QX1NZU19MT0M9XCIkdG1waW5wdXRcIgotZmkKLQotCi1ldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQz1cJE5FVFNOTVBfU1lTX0xPQwotZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiA+JjYKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiICE9ICJub25lIjsgdGhlbgotICBpZiB0ZXN0ICJ4cXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHF1b3RlZCIgPSAieFFVT1RFRCI7IHRoZW4KLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfU1lTX0xPQyAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIKLV9BQ0VPRgotCi0gIGVsc2UKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfU1lTX0xPQyAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DCi1fQUNFT0YKLQotICBmaQotZmkKLQotCi1pZiB0ZXN0IC1kIC92YXIvbG9nOyB0aGVuCi0gIGRlZmF1bHRsb2c9Ii92YXIvbG9nL3NubXBkLmxvZyIKLWVsc2UKLSAgZGVmYXVsdGxvZz0iL3Vzci9hZG0vc25tcGQubG9nIgotZmkKLQotCi1NU0dfQ0hFQ0s9YGVjaG8gIgotCi0qKiogTG9nZmlsZSBsb2NhdGlvbjoKLQotCUVudGVyIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgc25tcGQgYWdlbnQgdG8gZHVtcAotaW5mb3JtYXRpb24gJiBlcnJvcnMgdG8uICBJZiBub3QgZGVmaW5lZCAoZW50ZXIgdGhlIGtleXdvcmQgXCJub25lXCIKLWF0IHRoZSBwcm9tcHQgYmVsb3cpIHRoZSBhZ2VudCB3aWxsIHVzZSBzdGRvdXQgYW5kIHN0ZGVyciBpbnN0ZWFkLgotKE5vdGU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXItcmlkZGVuIHVzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLikKLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtbG9nZmlsZT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLUxvY2F0aW9uIHRvIHdyaXRlIGxvZ2ZpbGUiIHwgdGFpbCAtMWAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiIgPiY2Ci0KLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWVjaG8gJEVDSE9fTiAiCi0KLSoqKiBMb2dmaWxlIGxvY2F0aW9uOgotCi0JRW50ZXIgdGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoZSBzbm1wZCBhZ2VudCB0byBkdW1wCi1pbmZvcm1hdGlvbiAmIGVycm9ycyB0by4gIElmIG5vdCBkZWZpbmVkIChlbnRlciB0aGUga2V5d29yZCBcIm5vbmVcIgotYXQgdGhlIHByb21wdCBiZWxvdykgdGhlIGFnZW50IHdpbGwgdXNlIHN0ZG91dCBhbmQgc3RkZXJyIGluc3RlYWQuCi0oTm90ZTogVGhpcyB2YWx1ZSBjYW4gYmUgb3Zlci1yaWRkZW4gdXNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuKQotICBQcm92aWRpbmcgdGhlIC0td2l0aC1sb2dmaWxlPVwicGF0aFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotTG9jYXRpb24gdG8gd3JpdGUgbG9nZmlsZSAoJGRlZmF1bHRsb2cpOiAkRUNIT19DIgotcmVhZCB0bXBpbnB1dAotaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIkZGVmYXVsdGxvZyIgIT0gIiI7IHRoZW4KLSAgdG1waW5wdXQ9IiRkZWZhdWx0bG9nIgotZmkKLWV2YWwgTkVUU05NUF9MT0dGSUxFPVwiJHRtcGlucHV0XCIKLWVsc2UKLXRtcGlucHV0PSIkZGVmYXVsdGxvZyIKLWV2YWwgTkVUU05NUF9MT0dGSUxFPVwiJHRtcGlucHV0XCIKLWZpCi0KLQotZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9XCRORVRTTk1QX0xPR0ZJTEUKLWVjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPiY2Ci1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiAhPSAibm9uZSI7IHRoZW4KLSAgaWYgdGVzdCAieHF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInhxdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0xPR0ZJTEUgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiCi1fQUNFT0YKLQotICBlbHNlCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0xPR0ZJTEUgJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRQotX0FDRU9GCi0KLSAgZmkKLWZpCi0KLQotaWYgdGVzdCAtZCAvdmFyOyB0aGVuCi0gIGRlZmF1bHRzdG9yZT0iL3Zhci9uZXQtc25tcCIKLSAgdWNkZGVmYXVsdHN0b3JlPSIvdmFyL3VjZC1zbm1wIgotZWxzZQotICBkZWZhdWx0c3RvcmU9Ii9ldGMvbmV0LXNubXAiCi0gIHVjZGRlZmF1bHRzdG9yZT0iL2V0Yy91Y2Qtc25tcCIKLWZpCi0KLQotTVNHX0NIRUNLPWBlY2hvICIKLQotKioqIHNubXBkIHBlcnNpc3RlbnQgc3RvcmFnZSBsb2NhdGlvbjoKLQotCUVudGVyIGEgZGlyZWN0b3J5IGZvciB0aGUgU05NUCBsaWJyYXJ5IHRvIHN0b3JlIHBlcnNpc3RlbnQKLWRhdGEgaW4gdGhlIGZvcm0gb2YgYSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGlzIGRlZmF1bHQgbG9jYXRpb24gaXMKLWRpZmZlcmVudCB0aGFuIHRoZSBvbGQgZGVmYXVsdCBsb2NhdGlvbiAod2hpY2ggd2FzIGZvciB1Y2Qtc25tcCkuICBJZgoteW91IHN0YXkgd2l0aCB0aGUgbmV3IHBhdGgsIEknbGwgYXNrIHlvdSBpbiBhIHNlY29uZCBpZiB5b3Ugd2lzaCB0bwotY29weSB5b3VyIGZpbGVzIG92ZXIgdG8gdGhlIG5ldyBsb2NhdGlvbiAob25jZSBvbmx5KS4gIElmIHlvdSBwaWNrCi1zb21lIG90aGVyIHBhdGggdGhhbiB0aGUgZGVmYXVsdCwgeW91J2xsIGhhdmUgdG8gY29weSB0aGVtIHlvdXJzZWxmLgotVGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIHBpY2tpbmcgdGhlIG9sZCBwYXRoICgkdWNkZGVmYXVsdHN0b3JlKSBpZgoteW91J2QgcmF0aGVyLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8KLS4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLUxvY2F0aW9uIHRvIHdyaXRlIHBlcnNpc3RlbnQgaW5mb3JtYXRpb24iIHwgdGFpbCAtMWAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkTVNHX0NIRUNLIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBlY2hvICIiID4mNgotCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1lY2hvICRFQ0hPX04gIgotCi0qKiogc25tcGQgcGVyc2lzdGVudCBzdG9yYWdlIGxvY2F0aW9uOgotCi0JRW50ZXIgYSBkaXJlY3RvcnkgZm9yIHRoZSBTTk1QIGxpYnJhcnkgdG8gc3RvcmUgcGVyc2lzdGVudAotZGF0YSBpbiB0aGUgZm9ybSBvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoaXMgZGVmYXVsdCBsb2NhdGlvbiBpcwotZGlmZmVyZW50IHRoYW4gdGhlIG9sZCBkZWZhdWx0IGxvY2F0aW9uICh3aGljaCB3YXMgZm9yIHVjZC1zbm1wKS4gIElmCi15b3Ugc3RheSB3aXRoIHRoZSBuZXcgcGF0aCwgSSdsbCBhc2sgeW91IGluIGEgc2Vjb25kIGlmIHlvdSB3aXNoIHRvCi1jb3B5IHlvdXIgZmlsZXMgb3ZlciB0byB0aGUgbmV3IGxvY2F0aW9uIChvbmNlIG9ubHkpLiAgSWYgeW91IHBpY2sKLXNvbWUgb3RoZXIgcGF0aCB0aGFuIHRoZSBkZWZhdWx0LCB5b3UnbGwgaGF2ZSB0byBjb3B5IHRoZW0geW91cnNlbGYuCi1UaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGggcGlja2luZyB0aGUgb2xkIHBhdGggKCR1Y2RkZWZhdWx0c3RvcmUpIGlmCi15b3UnZCByYXRoZXIuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5PVwicGF0aFwiIHBhcmFtZXRlciB0bwotLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotTG9jYXRpb24gdG8gd3JpdGUgcGVyc2lzdGVudCBpbmZvcm1hdGlvbiAoJGRlZmF1bHRzdG9yZSk6ICRFQ0hPX0MiCi1yZWFkIHRtcGlucHV0Ci1pZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiRkZWZhdWx0c3RvcmUiICE9ICIiOyB0aGVuCi0gIHRtcGlucHV0PSIkZGVmYXVsdHN0b3JlIgotZmkKLWV2YWwgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT1cIiR0bXBpbnB1dFwiCi1lbHNlCi10bXBpbnB1dD0iJGRlZmF1bHRzdG9yZSIKLWV2YWwgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT1cIiR0bXBpbnB1dFwiCi1maQotCi0KLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT1cJE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkKLWVjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZIiA+JjYKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZIiAhPSAibm9uZSI7IHRoZW4KLSAgaWYgdGVzdCAieHF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInhxdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSIKLV9BQ0VPRgotCi0gIGVsc2UKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkgJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkKLV9BQ0VPRgotCi0gIGZpCi1maQotCi0KLVBFUlNJU1RFTlRfRElSRUNUT1JZPSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZCi0KLVVDRFBFUlNJU1RFTlRfRElSRUNUT1JZPSR1Y2RkZWZhdWx0c3RvcmUKLQotCi1pZiB0ZXN0ICRQRVJTSVNURU5UX0RJUkVDVE9SWSA9ICIkZGVmYXVsdHN0b3JlIiAtYSAtZCAiJHVjZGRlZmF1bHRzdG9yZSIgLWEgISAtZCAiJGRlZmF1bHRzdG9yZSIgOyB0aGVuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgSWYgd2Ugc2hvdWxkIGNvcHkgdGhlIG9sZCBwZXJzaXN0ZW50IGRpcmVjdG9yeSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIElmIHdlIHNob3VsZCBjb3B5IHRoZSBvbGQgcGVyc2lzdGVudCBkaXJlY3RvcnkuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi0KLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWVjaG8gJEVDSE9fTiAiCi0KLSoqKiBDb3B5aW5nIG9sZCB1Y2Qtc25tcCBwZXJzaXN0ZW50IGZpbGVzIHRvIG5ldC1zbm1wIHBlcnNpc3RlbnQgZGlyZWN0b3J5OgotCi0JV291bGQgeW91IGxpa2UgdG8gY29weSB0aGUgb2xkZXIgdWNkLXNubXAgcGVyc2lzdGVudCBmaWxlcwotaW50byB5b3VyIG5ldyBuZXQtc25tcCBwZXJzaXN0ZW50IGZpbGUgcGF0aD8gIFRoaXMgd2lsbCBmdW5jdGlvbmFsbHkKLXNhdmUgYWxsIHlvdXIgdWNkLXNubXAgZGF0YSBhbmQgbGV0IGl0IGJlIHVzZWQgd2l0aGluIHRoZSBuZXQtc25tcAotdG9vbHMuICBUaGlzIHdpbGwgb25seSBiZSBkb25lIG9uY2Ugd2hlbiB5b3UgcnVuIG1ha2UgaW5zdGFsbC4gIElmIHlvdQotd2lzaCB0byBkbyB0aGlzLCBlbnRlciAieWVzIiBhdCB0aGUgcHJvbXB0LgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1jb3B5LXBlcnNpc3RlbnQtZmlsZXM9XCJub1wiIChvciBcInllc1wiKQotcGFyYW1ldGVycyB0byAuL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1Db3B5IHVjZC1zbm1wIGRhdGEgaW50byB0aGUgbmV0LXNubXAgZGF0YSBkaXJlY3RvcnkgKCJ5ZXMiKTogJEVDSE9fQyIKLXJlYWQgdG1waW5wdXQKLWlmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiInllcyIiICE9ICIiOyB0aGVuCi0gIHRtcGlucHV0PSIieWVzIiIKLWZpCi1ldmFsIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz1cIiR0bXBpbnB1dFwiCi1lbHNlCi10bXBpbnB1dD0iInllcyIiCi1ldmFsIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz1cIiR0bXBpbnB1dFwiCi1maQotCi0KLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyIgPiY2Ci1lbHNlCi1hY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9Im5vIgotZmkKLUNPUFlfUEVSU0lTVEVOVF9GSUxFUz0iJGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyIKLQotCi0KLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZTpNYWtlZmlsZS50b3A6TWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZCIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYWdlbnQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L01ha2VmaWxlLmRlcGVuZCIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhZ2VudC9oZWxwZXJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFnZW50L21pYmdyb3VwL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIHRlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW4iCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbWFuL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptYW4vTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbWlicy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWlicy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBuZXQtc25tcC1jb25maWc6bmV0LXNubXAtY29uZmlnLmluIgotCi0KLSAgICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVmYXVsdCIKK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZWZhdWx0IgogCiAKICMKQEAgLTQ5Njg2LDExICsyOTgyMSw2IEBACiAKIAogCi0KLQotCi0KLQogY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCiAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKICMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQpAQCAtNDk3MDksMzkgKzI5ODM5LDcwIEBACiAKICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCiAjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgotIyBTbywgZG9uJ3QgcHV0IG5ld2xpbmVzIGluIGNhY2hlIHZhcmlhYmxlcycgdmFsdWVzLgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KICMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAogIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KLXsKKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKICAgKHNldCkgMj4mMSB8Ci0gICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KLSAgICAqYWNfc3BhY2U9XCAqKQotICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQotICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCiAgICAgICBzZWQgLW4gXAogCSJzLycvJ1xcXFwnJy9nOwogCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgotICAgICAgOzsKKyAgICAgIDs7ICMoCiAgICAgKikKICAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCi0gICAgICBzZWQgLW4gXAotCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKICAgICAgIDs7Ci0gICAgZXNhYzsKLX0gfAorICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAogICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKICAgICAgdCBjbGVhcgotICAgICA6IGNsZWFyCisgICAgIDpjbGVhcgogICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCiAgICAgIHQgZW5kCi0gICAgIC9eYWNfY3ZfZW52LyFzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KLSAgICAgOiBlbmQnID4+Y29uZmNhY2hlCi1pZiBkaWZmICRjYWNoZV9maWxlIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCi0gICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYgZWNobyAidXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCi0gICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAtaCAiJGNhY2hlX2ZpbGUiOyB0aGVuCisJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoCisgICAgICAgICovKiB8ID86KikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKwkgIG12IC1mICIkY2FjaGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoCisgICAgICAgICopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZmkKICAgZWxzZQotICAgIGVjaG8gIm5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgIGZpCiBmaQogcm0gLWYgY29uZmNhY2hlCkBAIC00OTc1MCwzMiArMjk5MTEsMTkgQEAKICMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgogdGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JwogCi0jIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKLSMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCi0jIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQotIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgotaWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KLSAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97Ci1zLzoqXCQoc3JjZGlyKToqLzovOwotcy86Klwke3NyY2Rpcn06Ki86LzsKLXMvOipAc3JjZGlyQDoqLzovOwotcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOwotcy86KiQvLzsKLXMvXltePV0qPVsJIF0qJC8vOwotfScKLWZpCi0KIERFRlM9LURIQVZFX0NPTkZJR19ICiAKIGFjX2xpYm9ianM9CiBhY19sdGxpYm9ianM9CitVPQogZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCiAgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KLSAgYWNfaT1gZWNobyAiJGFjX2kiIHwKLQkgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAotICAjIDIuIEFkZCB0aGVtLgotICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyAkYWNfaVwkVS4kYWNfb2JqZXh0IgotICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgJGFjX2kiJyRVLmxvJworICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJwogZG9uZQogTElCT0JKUz0kYWNfbGlib2JqcwogCkBAIC00OTc4MywxMiArMjk5MzEsMTUgQEAKIAogCiAKLTogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KKworOiAiJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30iCithY193cml0ZV9mYWlsPTAKIGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCiBhY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KLWNhdCA+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Cithc193cml0ZV9mYWlsPTAKK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCiAjISAkU0hFTEwKICMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KICMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgpAQCAtNDk3OTgsODEgKzI5OTQ5LDI1MyBAQAogZGVidWc9ZmFsc2UKIGFjX2NzX3JlY2hlY2s9ZmFsc2UKIGFjX2NzX3NpbGVudD1mYWxzZQorCiBTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQotX0FDRU9GCitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBCZSBCb3VybmUgY29tcGF0aWJsZQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgc2V0IC1vIHBvc2l4Ci1maQotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotCi0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc191bnNldD11bnNldAorICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZWxzZQotICBhc191bnNldD1mYWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCiBmaQogCiAKLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgotJGFzX3Vuc2V0IEVOViBNQUlMIE1BSUxQQVRICithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCiBQUzE9JyQgJwogUFMyPSc+ICcKIFBTND0nKyAnCiAKICMgTkxTIG51aXNhbmNlcy4KLWZvciBhc192YXIgaW4gXAotICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAotICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAotICBMQ19URUxFUEhPTkUgTENfVElNRQotZG8KLSAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KLSAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKLSAgZWxzZQotICAgICRhc191bnNldCAkYXNfdmFyCi0gIGZpCi1kb25lCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCiAKLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KICAgYXNfZXhwcj1leHByCiBlbHNlCiAgIGFzX2V4cHI9ZmFsc2UKIGZpCiAKLWlmIChiYXNlbmFtZSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KICAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKIGVsc2UKICAgYXNfYmFzZW5hbWU9ZmFsc2UKIGZpCiAKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKIAotIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgotYXNfbWU9YCRhc19iYXNlbmFtZSAiJDAiIHx8Cithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCiAJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC9cKSQnIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcL1woXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAogCi0KLSMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KICMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KIGFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwogYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCkBAIC00OTg4MCwxNDggKzMwMjAzLDEyMyBAQAogYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwogYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCiAKLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi0KLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7Ci0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCi0gICMgcmVsYXRpdmUgb3Igbm90LgotICBjYXNlICQwIGluCi0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKLQotICAgICAgIDs7Ci0gIGVzYWMKLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICAgIGFzX215c2VsZj0kMAotICBmaQotICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCi0gICcnKQotICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9Ci0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQotCSAgIGZpOzsKLQkgZXNhYwotICAgICAgIGRvbmUKLWRvbmUKLTs7Ci0gIGVzYWMKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAotICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQotICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkICc9JyA8JGFzX215c2VsZiB8Ci0gICAgc2VkICcKLSAgICAgIE4KLSAgICAgIHMsJCwtLAotICAgICAgOiBsb29wCi0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKLSAgICAgIHQgbG9vcAotICAgICAgcywtJCwsCi0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCi0gICAgJyA+JGFzX21lLmxpbmVubyAmJgotICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8Ci0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwotICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgotICAuIC4vJGFzX21lLmxpbmVubwotICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KLSAgZXhpdAotfQotCi0KLWNhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCi0gICpjKiwtbiopIEVDSE9fTj0gRUNIT19DPScKLScgRUNIT19UPScJJyA7OwotICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7Ci0gICopICAgICAgIEVDSE9fTj0gRUNIT19DPSdcYycgRUNIT19UPSA7OworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7CiBlc2FjCiAKLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2V4cHI9ZXhwcgotZWxzZQotICBhc19leHByPWZhbHNlCi1maQotCiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQotZWNobyA+Y29uZiQkLmZpbGUKLWlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYwotICAjIGFuZCBjKSB3aWxsIHJlbWFpbiB2YWxpZCBvbmNlIERKR1BQIHN1cHBvcnRzIHN5bWxpbmtzIChESkdQUCAyLjA0KS4KLSAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCi0gICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcwotICAgIGFzX2xuX3M9J2NwIC1wJwotICBlbHNlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgogICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wJwogICBmaQotZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz1sbgogZWxzZQogICBhc19sbl9zPSdjcCAtcCcKIGZpCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAogCisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAogaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPToKKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJwogZWxzZQogICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAogICBhc19ta2Rpcl9wPWZhbHNlCiBmaQogCi1hc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Rlc3RfeD0ndGVzdCAteCcKK2Vsc2UKKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYXNfbHNfTF9vcHRpb249TAorICBlbHNlCisgICAgYXNfbHNfTF9vcHRpb249CisgIGZpCisgIGFzX3Rlc3RfeD0nCisgICAgZXZhbCBzaCAtYyAnXCcnCisgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKwl0ZXN0IC1kICIkMS8uIjsKKyAgICAgIGVsc2UKKwljYXNlICQxIGluICMoCisJLSopc2V0ICIuLyQxIjs7CisJZXNhYzsKKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgKKwk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCisgICAgJ1wnJyBzaAorICAnCitmaQorYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKIAogIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgogYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKQEAgLTUwMDMwLDMxICszMDMyOCwyMCBAQAogYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKIAogCi0jIElGUwotIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KLWFzX25sPScKLScKLUlGUz0iIAkkYXNfbmwiCi0KLSMgQ0RQQVRILgotJGFzX3Vuc2V0IENEUEFUSAotCiBleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCiAKLSMgT3BlbiB0aGUgbG9nIHJlYWwgc29vbiwgdG8ga2VlcCBcJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgotIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4gIExvZ2dpbmcgLS12ZXJzaW9uIGV0Yy4gaXMgT0suCi1leGVjIDU+PmNvbmZpZy5sb2cKLXsKLSAgZWNobwotICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAotIyMgUnVubmluZyAkYXNfbWUuICMjCi1fQVNCT1gKLX0gPiY1Ci1jYXQgPiY1IDw8X0NTRU9GCi0KLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgTmV0LVNOTVAgJGFzX21lIDUuNC40LCB3aGljaCB3YXMKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KK2FjX2xvZz0iCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IE5ldC1TTk1QICRhc19tZSA1LjcuMywgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjguICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCiAgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUwpAQCAtNTAwNjIsNDUgKzMwMzQ5LDQ3IEBACiAgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKICAgJCAkMCAkQAogCi1fQ1NFT0YKLWVjaG8gIm9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYCIgPiY1Ci1lY2hvID4mNQorb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKIF9BQ0VPRgogCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiAjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2ZpbGVzIjsgdGhlbgotICBlY2hvICJjb25maWdfZmlsZXM9XCIkYWNfY29uZmlnX2ZpbGVzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgogCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2hlYWRlcnMiOyB0aGVuCi0gIGVjaG8gImNvbmZpZ19oZWFkZXJzPVwiJGFjX2NvbmZpZ19oZWFkZXJzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCitfQUNFT0YKIAotaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19saW5rcyI7IHRoZW4KLSAgZWNobyAiY29uZmlnX2xpbmtzPVwiJGFjX2NvbmZpZ19saW5rc1wiIiA+PiRDT05GSUdfU1RBVFVTCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2NvbW1hbmRzIjsgdGhlbgotICBlY2hvICJjb25maWdfY29tbWFuZHM9XCIkYWNfY29uZmlnX2NvbW1hbmRzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBhY19jc191c2FnZT0iXAotXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCi1jdXJyZW50IGNvbmZpZ3VyYXRpb24uCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKK2Zyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRoZSBmaWxlcworYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgogCi1Vc2FnZTogJDAgW09QVElPTlNdIFtGSUxFXS4uLgorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtUQUddLi4uCiAKICAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKLSAgLXEsIC0tcXVpZXQgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwogICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCi0JCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQotICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KLQkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCiAKIENvbmZpZ3VyYXRpb24gZmlsZXM6CiAkY29uZmlnX2ZpbGVzCkBAIC01MDExMSw4NCArMzA0MDAsOTEgQEAKIENvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiAkY29uZmlnX2NvbW1hbmRzCiAKLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorUmVwb3J0IGJ1Z3MgdG8gPG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+LiIKKwogX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotTmV0LVNOTVAgY29uZmlnLnN0YXR1cyA1LjQuNAotY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LAotICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKK05ldC1TTk1QIGNvbmZpZy5zdGF0dXMgNS43LjMKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OCwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCiAKLUNvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKLXNyY2Rpcj0kc3JjZGlyCi1JTlNUQUxMPSIkSU5TVEFMTCIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitBV0s9JyRBV0snCit0ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3awogX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotIyBJZiBubyBmaWxlIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIHRoZW4gd2UgbmVlZCB0byBwcm92aWRlIGRlZmF1bHQKLSMgdmFsdWUuICBCeSB3ZSBuZWVkIHRvIGtub3cgaWYgZmlsZXMgd2VyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCiBhY19uZWVkX2RlZmF1bHRzPToKIHdoaWxlIHRlc3QgJCMgIT0gMAogZG8KICAgY2FzZSAkMSBpbgotICAtLSo9KikKLSAgICBhY19vcHRpb249YGV4cHIgIngkMSIgOiAneFwoW149XSpcKT0nYAotICAgIGFjX29wdGFyZz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJ2AKKyAgLS0qPT8qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAogICAgIGFjX3NoaWZ0PToKICAgICA7OwotICAtKikKKyAgLS0qPSkKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz0KKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgKikKICAgICBhY19vcHRpb249JDEKICAgICBhY19vcHRhcmc9JDIKICAgICBhY19zaGlmdD1zaGlmdAogICAgIDs7Ci0gICopICMgVGhpcyBpcyBub3QgYW4gb3B0aW9uLCBzbyB0aGUgdXNlciBoYXMgcHJvYmFibHkgZ2l2ZW4gZXhwbGljaXQKLSAgICAgIyBhcmd1bWVudHMuCi0gICAgIGFjX29wdGlvbj0kMQotICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKICAgZXNhYwogCiAgIGNhc2UgJGFjX29wdGlvbiBpbgogICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKICAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCiAgICAgYWNfY3NfcmVjaGVjaz06IDs7Ci0gIC0tdmVyc2lvbiB8IC0tdmVycyogfCAtViApCi0gICAgZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDAgOzsKLSAgLS1oZSB8IC0taCkKLSAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OwotICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKLSAgICBlY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDAgOzsKLSAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CisgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCiAgICAgZGVidWc9OiA7OwogICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQogICAgICRhY19zaGlmdAotICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkYWNfb3B0YXJnIgorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKICAgICAkYWNfc2hpZnQKLSAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgogICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgYXNfZm5fZXJyb3IgJD8gImFtYmlndW91cyBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OwogICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAogICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCiAgICAgYWNfY3Nfc2lsZW50PTogOzsKIAogICAjIFRoaXMgaXMgYW4gZXJyb3IuCi0gIC0qKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7OwogCi0gICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiIDs7CisgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CiAKICAgZXNhYwogICBzaGlmdApAQCAtNTAyMDIsNDMgKzMwNDk4LDM0NCBAQAogZmkKIAogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KLSAgZWNobyAicnVubmluZyAkU0hFTEwgJDAgIiAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIiA+JjYKLSAgZXhlYyAkU0hFTEwgJDAgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2V0IFggJyRTSEVMTCcgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCiBmaQogCiBfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjCisjIElOSVQtQ09NTUFORFMKKyMKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICIkbWFjcm9fdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb19yZXZpc2lvbj0nYCRFQ0hPICIkbWFjcm9fcmV2aXNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVM9J2AkRUNITyAiJEFTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcGljX21vZGU9J2AkRUNITyAiJHBpY19tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9mYXN0X2luc3RhbGw9J2AkRUNITyAiJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0hFTEw9J2AkRUNITyAiJFNIRUxMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VDSE89J2AkRUNITyAiJEVDSE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9hbGlhcz0nYCRFQ0hPICIkaG9zdF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0PSdgJEVDSE8gIiRob3N0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Rfb3M9J2AkRUNITyAiJGhvc3Rfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfYWxpYXM9J2AkRUNITyAiJGJ1aWxkX2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkPSdgJEVDSE8gIiRidWlsZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9vcz0nYCRFQ0hPICIkYnVpbGRfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0VEPSdgJEVDSE8gIiRTRUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworWHNlZD0nYCRFQ0hPICIkWHNlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHUkVQPSdgJEVDSE8gIiRHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VHUkVQPSdgJEVDSE8gIiRFR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitGR1JFUD0nYCRFQ0hPICIkRkdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTEQ9J2AkRUNITyAiJExEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NPSdgJEVDSE8gIiROTSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMTl9TPSdgJEVDSE8gIiRMTl9TIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21heF9jbWRfbGVuPSdgJEVDSE8gIiRtYXhfY21kX2xlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithY19vYmpleHQ9J2AkRUNITyAiJGFjX29iamV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0nYCRFQ0hPICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NDPSdgJEVDSE8gIiRDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDRkxBR1M9J2AkRUNITyAiJENGTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcj0nYCRFQ0hPICIkY29tcGlsZXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDPSdgJEVDSE8gIiRHQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MPSdgJEVDSE8gIiRPVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTDY0PSdgJEVDSE8gIiRPVE9PTDY0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYmV4dD0nYCRFQ0hPICIkbGliZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NocmV4dF9jbWRzPSdgJEVDSE8gIiRzaHJleHRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkPSdgJEVDSE8gIiR3aXRoX2dudV9sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF92ZXJzaW9uPSdgJEVDSE8gIiRuZWVkX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmVyc2lvbl90eXBlPSdgJEVDSE8gIiR2ZXJzaW9uX3R5cGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcnVucGF0aF92YXI9J2AkRUNITyAiJHJ1bnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF92YXI9J2AkRUNITyAiJHNobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlibmFtZV9zcGVjPSdgJEVDSE8gIiRsaWJuYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIiRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc29uYW1lX3NwZWM9J2AkRUNITyAiJHNvbmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0nYCRFQ0hPICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2NtZHM9J2AkRUNITyAiJGZpbmlzaF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9ldmFsPSdgJEVDSE8gIiRmaW5pc2hfZXZhbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9pbnRvX2xpYnM9J2AkRUNITyAiJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3BlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9zdHJpcGxpYj0nYCRFQ0hPICIkb2xkX3N0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBBUyBcCitETExUT09MIFwKK09CSkRVTVAgXAorU0hFTEwgXAorRUNITyBcCitTRUQgXAorR1JFUCBcCitFR1JFUCBcCitGR1JFUCBcCitMRCBcCitOTSBcCitMTl9TIFwKK2x0X1NQMk5MIFwKK2x0X05MMlNQIFwKK3JlbG9hZF9mbGFnIFwKK2RlcGxpYnNfY2hlY2tfbWV0aG9kIFwKK2ZpbGVfbWFnaWNfY21kIFwKK2ZpbGVfbWFnaWNfZ2xvYiBcCit3YW50X25vY2FzZWdsb2IgXAorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorQVIgXAorQVJfRkxBR1MgXAorYXJjaGl2ZXJfbGlzdF9zcGVjIFwKK1NUUklQIFwKK1JBTkxJQiBcCitDQyBcCitDRkxBR1MgXAorY29tcGlsZXIgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKK25tX2ZpbGVfbGlzdF9zcGVjIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitNQU5JRkVTVF9UT09MIFwKK0RTWU1VVElMIFwKK05NRURJVCBcCitMSVBPIFwKK09UT09MIFwKK09UT09MNjQgXAorc2hyZXh0X2NtZHMgXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdCBcCit3aXRoX2dudV9sZCBcCithbGxvd191bmRlZmluZWRfZmxhZyBcCitub191bmRlZmluZWRfZmxhZyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCitleGNsdWRlX2V4cHN5bXMgXAoraW5jbHVkZV9leHBzeW1zIFwKK2ZpbGVfbGlzdF9zcGVjIFwKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKK2xpYm5hbWVfc3BlYyBcCitsaWJyYXJ5X25hbWVzX3NwZWMgXAorc29uYW1lX3NwZWMgXAoraW5zdGFsbF9vdmVycmlkZV9tb2RlIFwKK2ZpbmlzaF9ldmFsIFwKK29sZF9zdHJpcGxpYiBcCitzdHJpcGxpYjsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gcmVsb2FkX2NtZHMgXAorb2xkX3Bvc3RpbnN0YWxsX2NtZHMgXAorb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCitvbGRfYXJjaGl2ZV9jbWRzIFwKK2V4dHJhY3RfZXhwc3ltc19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAorYXJjaGl2ZV9jbWRzIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHMgXAorbW9kdWxlX2NtZHMgXAorbW9kdWxlX2V4cHN5bV9jbWRzIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHMgXAorcHJlbGlua19jbWRzIFwKK3Bvc3RsaW5rX2NtZHMgXAorcG9zdGluc3RhbGxfY21kcyBcCitwb3N0dW5pbnN0YWxsX2NtZHMgXAorZmluaXNoX2NtZHMgXAorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIFwKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCit4c2lfc2hlbGw9JyR4c2lfc2hlbGwnCitsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnCisKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCisKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJwogCiAKIAogCitfQUNFT0YKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisKKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgogZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCiBkbwotICBjYXNlICIkYWNfY29uZmlnX3RhcmdldCIgaW4KLSAgIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCi0gICJNYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OwotICAic25tcGxpYi9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZCIgOzsKLSAgImFwcHMvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFwcHMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9NYWtlZmlsZS5kZXBlbmQiIDs7Ci0gICJhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kIiA7OwotICAiYWdlbnQvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmQiIDs7Ci0gICJhZ2VudC9oZWxwZXJzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhZ2VudC9oZWxwZXJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kIiA7OwotICAiYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50L21pYmdyb3VwL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQiIDs7Ci0gICJsb2NhbC9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OwotICAidGVzdGluZy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdGluZy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6dGVzdGluZy9NYWtlZmlsZS5pbiIgOzsKLSAgIm1hbi9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbWFuL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptYW4vTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiIDs7Ci0gICJtaWJzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OwotICAibmV0LXNubXAtY29uZmlnIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBuZXQtc25tcC1jb25maWc6bmV0LXNubXAtY29uZmlnLmluIiA7OwotICAiZGVmYXVsdCIgKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVmYXVsdCIgOzsKLSAgImluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiICkgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIiA7OwotICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIgOzsKKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZTpNYWtlZmlsZS50b3A6TWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiIDs7CisgICAgInNubXBsaWIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZCIgOzsKKyAgICAiYXBwcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kIiA7OworICAgICJhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQiIDs7CisgICAgImFnZW50L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmQiIDs7CisgICAgImFnZW50L2hlbHBlcnMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCIgOzsKKyAgICAiYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCIgOzsKKyAgICAibG9jYWwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OworICAgICJ0ZXN0aW5nL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW4iIDs7CisgICAgIm1hbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtYW4vTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1hbi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIgOzsKKyAgICAibWlicy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OworICAgICJuZXQtc25tcC1jb25maWciKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbiIgOzsKKyAgICAibmV0LXNubXAtY3JlYXRlLXYzLXVzZXIiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXI6bmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4iIDs7CisgICAgImRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlczpkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluIiA7OworICAgICJsb2NhbC9zbm1wY29uZiIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsb2NhbC9zbm1wY29uZiIgOzsKKyAgICAiZGVmYXVsdCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZWZhdWx0IiA7OworCisgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwogICBlc2FjCiBkb25lCiAKKwogIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAogIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCiAjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CkBAIC01MDI1MCw4MzggKzMwODQ3LDEyMzIgQEAKIGZpCiAKICMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQotIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gdG8gcHV0IGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKICMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgYW5kIGhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNsZWFuZWQ6CisjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KICRkZWJ1ZyB8fAogewotICB0cmFwICdleGl0X3N0YXR1cz0kPzsgcm0gLXJmICR0bXAgJiYgZXhpdCAkZXhpdF9zdGF0dXMnIDAKLSAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyAgdG1wPSBhY190bXA9CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgIDogIiR7YWNfdG1wOj0kdG1wfSIKKyAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQogfQotCiAjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KIAogewotICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIuL2NvbmZzdGF0WFhYWFhYIikgMj4vZGV2L251bGxgICYmCi0gIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1kICIkdG1wIgogfSAgfHwKIHsKLSAgdG1wPS4vY29uZnN0YXQkJC0kUkFORE9NCi0gICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkKLX0gfHwKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworaWYgJEFXSyAnQkVHSU4geyBnZXRsaW5lIDwiL2Rldi9udWxsIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgIGFjX2NzX2F3a19nZXRsaW5lPToKKyAgYWNfY3NfYXdrX3BpcGVfaW5pdD0KKyAgYWNfY3NfYXdrX3JlYWRfZmlsZT0nCisgICAgICB3aGlsZSAoKGdldGxpbmUgYWxpbmUgPCAoRltrZXldKSkgPiAwKQorCXByaW50KGFsaW5lKQorICAgICAgY2xvc2UoRltrZXldKScKKyAgYWNfY3NfYXdrX3BpcGVfZmluaT0KK2Vsc2UKKyAgYWNfY3NfYXdrX2dldGxpbmU9ZmFsc2UKKyAgYWNfY3NfYXdrX3BpcGVfaW5pdD0icHJpbnQgXCJjYXQgPDwnfCNfISFfI3wnICYmXCIiCisgIGFjX2NzX2F3a19yZWFkX2ZpbGU9JworICAgICAgcHJpbnQgInwjXyEhXyN8IgorICAgICAgcHJpbnQgImNhdCAiIEZba2V5XSAiICYmIgorICAgICAgJyRhY19jc19hd2tfcGlwZV9pbml0CisgICMgVGhlIGZpbmFsIGA6JyBmaW5pc2hlcyB0aGUgQU5EIGxpc3QuCisgIGFjX2NzX2F3a19waXBlX2Zpbmk9J0VORCB7IHByaW50ICJ8I18hIV8jfCI7IHByaW50ICI6IiB9JworZmkKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXFxyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiRhY190bXAvc3ViczEuYXdrIiAmJgorX0FDRU9GCisKKyMgQ3JlYXRlIGNvbW1hbmRzIHRvIHN1YnN0aXR1dGUgZmlsZSBvdXRwdXQgdmFyaWFibGVzLgogewotICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotfQorICBlY2hvICJjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEiICYmCisgIGVjaG8gJ2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYnICYmCisgIGVjaG8gIiRhY19zdWJzdF9maWxlcyIgfCBzZWQgJ3MvLiovRlsiJiJdPSIkJiIvJyAmJgorICBlY2hvICJfQUNBV0siICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJGZpbGVzLnNoICYmCisuIC4vY29uZiQkZmlsZXMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorcm0gLWYgY29uZiQkZmlsZXMuc2gKIAotX0FDRU9GCit7CisgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCisgIGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IHNlZCAncy8uKi8mISQmJGFjX2RlbGltLycgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkc3Vicy5zaCB8fAorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CithY19kZWxpbV9udW09YGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IGdyZXAgLWMgJ14nYAorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworICAuIC4vY29uZiQkc3Vicy5zaCB8fAorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLQotIwotIyBDT05GSUdfRklMRVMgc2VjdGlvbi4KLSMKLQotIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCi0jIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKLWlmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgotICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgotICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdFwkL0A7dCB0LzsgL0A7dCB0XCQvcy9bXFxcXCYsXS9cXFxcJi9nOwotICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKLXMsQFNIRUxMQCwkU0hFTEwsO3QgdAotcyxAUEFUSF9TRVBBUkFUT1JALCRQQVRIX1NFUEFSQVRPUiw7dCB0Ci1zLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAotcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKLXMsQFBBQ0tBR0VfVkVSU0lPTkAsJFBBQ0tBR0VfVkVSU0lPTiw7dCB0Ci1zLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKLXMsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAotcyxAZXhlY19wcmVmaXhALCRleGVjX3ByZWZpeCw7dCB0Ci1zLEBwcmVmaXhALCRwcmVmaXgsO3QgdAotcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAotcyxAYmluZGlyQCwkYmluZGlyLDt0IHQKLXMsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKLXMsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKLXMsQGRhdGFkaXJALCRkYXRhZGlyLDt0IHQKLXMsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKLXMsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAotcyxAbG9jYWxzdGF0ZWRpckAsJGxvY2Fsc3RhdGVkaXIsO3QgdAotcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKLXMsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKLXMsQG9sZGluY2x1ZGVkaXJALCRvbGRpbmNsdWRlZGlyLDt0IHQKLXMsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKLXMsQG1hbmRpckAsJG1hbmRpciw7dCB0Ci1zLEBidWlsZF9hbGlhc0AsJGJ1aWxkX2FsaWFzLDt0IHQKLXMsQGhvc3RfYWxpYXNALCRob3N0X2FsaWFzLDt0IHQKLXMsQHRhcmdldF9hbGlhc0AsJHRhcmdldF9hbGlhcyw7dCB0Ci1zLEBERUZTQCwkREVGUyw7dCB0Ci1zLEBFQ0hPX0NALCRFQ0hPX0MsO3QgdAotcyxARUNIT19OQCwkRUNIT19OLDt0IHQKLXMsQEVDSE9fVEAsJEVDSE9fVCw7dCB0Ci1zLEBMSUJTQCwkTElCUyw7dCB0Ci1zLEBDT05GSUdVUkVfT1BUSU9OU0AsJENPTkZJR1VSRV9PUFRJT05TLDt0IHQKLXMsQExJQlRPT0xGTEFHU0AsJExJQlRPT0xGTEFHUyw7dCB0Ci1zLEBJTlNUQUxMX1BSRUZJWEAsJElOU1RBTExfUFJFRklYLDt0IHQKLXMsQFNOTVBEQCwkU05NUEQsO3QgdAotcyxAVFJBUExJQlNALCRUUkFQTElCUyw7dCB0Ci1zLEBVU0VUUkFQTElCU0AsJFVTRVRSQVBMSUJTLDt0IHQKLXMsQE1BSU5TVUJTQCwkTUFJTlNVQlMsO3QgdAotcyxASEFWRV9ETUFMTE9DX0hALCRIQVZFX0RNQUxMT0NfSCw7dCB0Ci1zLEBpbnN0YWxsdWNkaGVhZGVyc0AsJGluc3RhbGx1Y2RoZWFkZXJzLDt0IHQKLXMsQGluc3RhbGx1Y2RsaWJzQCwkaW5zdGFsbHVjZGxpYnMsO3QgdAotcyxAQ0NALCRDQyw7dCB0Ci1zLEBDRkxBR1NALCRDRkxBR1MsO3QgdAotcyxATERGTEFHU0AsJExERkxBR1MsO3QgdAotcyxAQ1BQRkxBR1NALCRDUFBGTEFHUyw7dCB0Ci1zLEBhY19jdF9DQ0AsJGFjX2N0X0NDLDt0IHQKLXMsQEVYRUVYVEAsJEVYRUVYVCw7dCB0Ci1zLEBPQkpFWFRALCRPQkpFWFQsO3QgdAotcyxAQ1BQQCwkQ1BQLDt0IHQKLXMsQExJTktDQ0AsJExJTktDQyw7dCB0Ci1zLEBFR1JFUEAsJEVHUkVQLDt0IHQKLXMsQGJ1aWxkQCwkYnVpbGQsO3QgdAotcyxAYnVpbGRfY3B1QCwkYnVpbGRfY3B1LDt0IHQKLXMsQGJ1aWxkX3ZlbmRvckAsJGJ1aWxkX3ZlbmRvciw7dCB0Ci1zLEBidWlsZF9vc0AsJGJ1aWxkX29zLDt0IHQKLXMsQGhvc3RALCRob3N0LDt0IHQKLXMsQGhvc3RfY3B1QCwkaG9zdF9jcHUsO3QgdAotcyxAaG9zdF92ZW5kb3JALCRob3N0X3ZlbmRvciw7dCB0Ci1zLEBob3N0X29zQCwkaG9zdF9vcyw7dCB0Ci1zLEB0YXJnZXRALCR0YXJnZXQsO3QgdAotcyxAdGFyZ2V0X2NwdUAsJHRhcmdldF9jcHUsO3QgdAotcyxAdGFyZ2V0X3ZlbmRvckAsJHRhcmdldF92ZW5kb3IsO3QgdAotcyxAdGFyZ2V0X29zQCwkdGFyZ2V0X29zLDt0IHQKLXMsQFNFREAsJFNFRCw7dCB0Ci1zLEBMTl9TQCwkTE5fUyw7dCB0Ci1zLEBFQ0hPQCwkRUNITyw7dCB0Ci1zLEBBUkAsJEFSLDt0IHQKLXMsQGFjX2N0X0FSQCwkYWNfY3RfQVIsO3QgdAotcyxAUkFOTElCQCwkUkFOTElCLDt0IHQKLXMsQGFjX2N0X1JBTkxJQkAsJGFjX2N0X1JBTkxJQiw7dCB0Ci1zLEBTVFJJUEAsJFNUUklQLDt0IHQKLXMsQGFjX2N0X1NUUklQQCwkYWNfY3RfU1RSSVAsO3QgdAotcyxARFNZTVVUSUxALCREU1lNVVRJTCw7dCB0Ci1zLEBhY19jdF9EU1lNVVRJTEAsJGFjX2N0X0RTWU1VVElMLDt0IHQKLXMsQE5NRURJVEAsJE5NRURJVCw7dCB0Ci1zLEBhY19jdF9OTUVESVRALCRhY19jdF9OTUVESVQsO3QgdAotcyxARExMVE9PTEAsJERMTFRPT0wsO3QgdAotcyxAYWNfY3RfRExMVE9PTEAsJGFjX2N0X0RMTFRPT0wsO3QgdAotcyxAQVNALCRBUyw7dCB0Ci1zLEBhY19jdF9BU0AsJGFjX2N0X0FTLDt0IHQKLXMsQE9CSkRVTVBALCRPQkpEVU1QLDt0IHQKLXMsQGFjX2N0X09CSkRVTVBALCRhY19jdF9PQkpEVU1QLDt0IHQKLXMsQENYWEAsJENYWCw7dCB0Ci1zLEBDWFhGTEFHU0AsJENYWEZMQUdTLDt0IHQKLXMsQGFjX2N0X0NYWEAsJGFjX2N0X0NYWCw7dCB0Ci1zLEBDWFhDUFBALCRDWFhDUFAsO3QgdAotcyxARjc3QCwkRjc3LDt0IHQKLXMsQEZGTEFHU0AsJEZGTEFHUyw7dCB0Ci1zLEBhY19jdF9GNzdALCRhY19jdF9GNzcsO3QgdAotcyxATElCVE9PTEAsJExJQlRPT0wsO3QgdAotcyxATElCVE9PTF9ERVBTQCwkTElCVE9PTF9ERVBTLDt0IHQKLXMsQElOU1RBTExfUFJPR1JBTUAsJElOU1RBTExfUFJPR1JBTSw7dCB0Ci1zLEBJTlNUQUxMX1NDUklQVEAsJElOU1RBTExfU0NSSVBULDt0IHQKLXMsQElOU1RBTExfREFUQUAsJElOU1RBTExfREFUQSw7dCB0Ci1zLEBTRVRfTUFLRUAsJFNFVF9NQUtFLDt0IHQKLXMsQFBTUFJPR0AsJFBTUFJPRyw7dCB0Ci1zLEBQRVJMUFJPR0AsJFBFUkxQUk9HLDt0IHQKLXMsQFBZVEhPTlBST0dALCRQWVRIT05QUk9HLDt0IHQKLXMsQFdIT0FNSUAsJFdIT0FNSSw7dCB0Ci1zLEBGSU5EQCwkRklORCw7dCB0Ci1zLEBBVVRPQ09ORkAsJEFVVE9DT05GLDt0IHQKLXMsQEFVVE9IRUFERVJALCRBVVRPSEVBREVSLDt0IHQKLXMsQFVOQU1FUFJPR0AsJFVOQU1FUFJPRyw7dCB0Ci1zLEBWRVJTSU9OQCwkVkVSU0lPTiw7dCB0Ci1zLEBSRUxFQVNFVkVSU0lPTkAsJFJFTEVBU0VWRVJTSU9OLDt0IHQKLXMsQERFVkZMQUdTQCwkREVWRkxBR1MsO3QgdAotcyxAVE9QX0lOQ0xVREVTQCwkVE9QX0lOQ0xVREVTLDt0IHQKLXMsQFNOTVBMSUJfSU5DTFVERVNALCRTTk1QTElCX0lOQ0xVREVTLDt0IHQKLXMsQEFHRU5UX0lOQ0xVREVTQCwkQUdFTlRfSU5DTFVERVMsO3QgdAotcyxASEVMUEVSX0lOQ0xVREVTQCwkSEVMUEVSX0lOQ0xVREVTLDt0IHQKLXMsQE1JQkdST1VQX0lOQ0xVREVTQCwkTUlCR1JPVVBfSU5DTFVERVMsO3QgdAotcyxAR05VX3ZwYXRoQCwkR05VX3ZwYXRoLDt0IHQKLXMsQE5PTl9HTlVfVlBBVEhALCROT05fR05VX1ZQQVRILDt0IHQKLXMsQENDUEFUSEAsJENDUEFUSCw7dCB0Ci1zLEBFWFRSQUNQUEZMQUdTQCwkRVhUUkFDUFBGTEFHUyw7dCB0Ci1zLEBTTk1QTElCUEFUSEAsJFNOTVBMSUJQQVRILDt0IHQKLXMsQFNOTVBTSEFSRVBBVEhALCRTTk1QU0hBUkVQQVRILDt0IHQKLXMsQE5FVFNOTVBfREVGQVVMVF9NSUJESVJTQCwkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMsO3QgdAotcyxAU05NUENPTkZQQVRIQCwkU05NUENPTkZQQVRILDt0IHQKLXMsQG90aGVyX3NyY19saXN0QCwkb3RoZXJfc3JjX2xpc3QsO3QgdAotcyxAb3RoZXJfb2Jqc19saXN0QCwkb3RoZXJfb2Jqc19saXN0LDt0IHQKLXMsQG90aGVyX2xvYmpzX2xpc3RALCRvdGhlcl9sb2Jqc19saXN0LDt0IHQKLXMsQG90aGVyX2FnZW50b2Jqc0AsJG90aGVyX2FnZW50b2Jqcyw7dCB0Ci1zLEBvdGhlcl9sYWdlbnRvYmpzQCwkb3RoZXJfbGFnZW50b2Jqcyw7dCB0Ci1zLEBvdGhlcl90cmFwZF9vYmplY3RzQCwkb3RoZXJfdHJhcGRfb2JqZWN0cyw7dCB0Ci1zLEB0cmFuc3BvcnRfaGRyX2xpc3RALCR0cmFuc3BvcnRfaGRyX2xpc3QsO3QgdAotcyxAdHJhbnNwb3J0X3NyY19saXN0QCwkdHJhbnNwb3J0X3NyY19saXN0LDt0IHQKLXMsQHRyYW5zcG9ydF9vYmpfbGlzdEAsJHRyYW5zcG9ydF9vYmpfbGlzdCw7dCB0Ci1zLEB0cmFuc3BvcnRfbG9ial9saXN0QCwkdHJhbnNwb3J0X2xvYmpfbGlzdCw7dCB0Ci1zLEBzZWN1cml0eV9zcmNfbGlzdEAsJHNlY3VyaXR5X3NyY19saXN0LDt0IHQKLXMsQHNlY3VyaXR5X2hkcl9saXN0QCwkc2VjdXJpdHlfaGRyX2xpc3QsO3QgdAotcyxAc2VjdXJpdHlfb2JqX2xpc3RALCRzZWN1cml0eV9vYmpfbGlzdCw7dCB0Ci1zLEBzZWN1cml0eV9sb2JqX2xpc3RALCRzZWN1cml0eV9sb2JqX2xpc3QsO3QgdAotcyxAa3JiNV9jb25maWdALCRrcmI1X2NvbmZpZyw7dCB0Ci1zLEBkZWZhdWx0X21pYnNfaW5zdGFsbEAsJGRlZmF1bHRfbWlic19pbnN0YWxsLDt0IHQKLXMsQGRsbGNsZWFuc0AsJGRsbGNsZWFucyw7dCB0Ci1zLEBFTlZfU0VQQVJBVE9SQCwkRU5WX1NFUEFSQVRPUiw7dCB0Ci1zLEBORVRTTk1QX0RFRkFVTFRfTUlCU0AsJE5FVFNOTVBfREVGQVVMVF9NSUJTLDt0IHQKLXMsQEVNQkVEUEVSTElOU1RBTExALCRFTUJFRFBFUkxJTlNUQUxMLDt0IHQKLXMsQEVNQkVEUEVSTFVOSU5TVEFMTEAsJEVNQkVEUEVSTFVOSU5TVEFMTCw7dCB0Ci1zLEBQRVJMTERPUFRTX0ZPUl9MSUJTQCwkUEVSTExET1BUU19GT1JfTElCUyw7dCB0Ci1zLEBQRVJMTERPUFRTX0ZPUl9BUFBTQCwkUEVSTExET1BUU19GT1JfQVBQUyw7dCB0Ci1zLEBQRVJMVEFSR1NALCRQRVJMVEFSR1MsO3QgdAotcyxAUEVSTElOU1RBTExUQVJHU0AsJFBFUkxJTlNUQUxMVEFSR1MsO3QgdAotcyxAUEVSTFVOSU5TVEFMTFRBUkdTQCwkUEVSTFVOSU5TVEFMTFRBUkdTLDt0IHQKLXMsQFBFUkxBUkdTQCwkUEVSTEFSR1MsO3QgdAotcyxAUFlUSE9OVEFSR1NALCRQWVRIT05UQVJHUyw7dCB0Ci1zLEBQWVRIT05JTlNUQUxMVEFSR1NALCRQWVRIT05JTlNUQUxMVEFSR1MsO3QgdAotcyxAUFlUSE9OVU5JTlNUQUxMVEFSR1NALCRQWVRIT05VTklOU1RBTExUQVJHUyw7dCB0Ci1zLEBQWVRIT05DTEVBTlRBUkdTQCwkUFlUSE9OQ0xFQU5UQVJHUyw7dCB0Ci1zLEBQWVRIT05BUkdTQCwkUFlUSE9OQVJHUyw7dCB0Ci1zLEBMUFNUQVRfUEFUSEAsJExQU1RBVF9QQVRILDt0IHQKLXMsQExORVRTTk1QTElCU0AsJExORVRTTk1QTElCUyw7dCB0Ci1zLEBMQUdFTlRMSUJTQCwkTEFHRU5UTElCUyw7dCB0Ci1zLEBQU0NNREAsJFBTQ01ELDt0IHQKLXMsQEFMTE9DQUAsJEFMTE9DQSw7dCB0Ci1zLEBMSUJPQkpTQCwkTElCT0JKUyw7dCB0Ci1zLEBMTUlCTElCU0AsJExNSUJMSUJTLDt0IHQKLXMsQEFHRU5UTElCU0AsJEFHRU5UTElCUyw7dCB0Ci1zLEBPVEhFUkFHRU5UTElCT0JKU0AsJE9USEVSQUdFTlRMSUJPQkpTLDt0IHQKLXMsQE9USEVSQUdFTlRMSUJMT0JKU0AsJE9USEVSQUdFTlRMSUJMT0JKUyw7dCB0Ci1zLEBQRVJTSVNURU5UX0RJUkVDVE9SWUAsJFBFUlNJU1RFTlRfRElSRUNUT1JZLDt0IHQKLXMsQFVDRFBFUlNJU1RFTlRfRElSRUNUT1JZQCwkVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlksO3QgdAotcyxAQ09QWV9QRVJTSVNURU5UX0ZJTEVTQCwkQ09QWV9QRVJTSVNURU5UX0ZJTEVTLDt0IHQKLXMsQERMTElCU0AsJERMTElCUyw7dCB0Ci1zLEBMVExJQk9CSlNALCRMVExJQk9CSlMsO3QgdAotL0BNT0RVTEVfTElTVEAvciAkTU9EVUxFX0xJU1QKLXMsQE1PRFVMRV9MSVNUQCwsO3QgdAotL0Btb2R1bGVfbGlzdF9jQC9yICRtb2R1bGVfbGlzdF9jCi1zLEBtb2R1bGVfbGlzdF9jQCwsO3QgdAotL0Btb2R1bGVfbGlzdF9vQC9yICRtb2R1bGVfbGlzdF9vCi1zLEBtb2R1bGVfbGlzdF9vQCwsO3QgdAotL0Btb2R1bGVfbGlzdF9sb0AvciAkbW9kdWxlX2xpc3RfbG8KLXMsQG1vZHVsZV9saXN0X2xvQCwsO3QgdAotL0BtaWJfbW9kdWxlX2xpc3RfY0AvciAkbWliX21vZHVsZV9saXN0X2MKLXMsQG1pYl9tb2R1bGVfbGlzdF9jQCwsO3QgdAotL0BtaWJfbW9kdWxlX2xpc3Rfb0AvciAkbWliX21vZHVsZV9saXN0X28KLXMsQG1pYl9tb2R1bGVfbGlzdF9vQCwsO3QgdAotL0BtaWJfbW9kdWxlX2xpc3RfbG9AL3IgJG1pYl9tb2R1bGVfbGlzdF9sbwotcyxAbWliX21vZHVsZV9saXN0X2xvQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdF9jQC9yICRhZ2VudF9tb2R1bGVfbGlzdF9jCi1zLEBhZ2VudF9tb2R1bGVfbGlzdF9jQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdF9vQC9yICRhZ2VudF9tb2R1bGVfbGlzdF9vCi1zLEBhZ2VudF9tb2R1bGVfbGlzdF9vQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdF9sb0AvciAkYWdlbnRfbW9kdWxlX2xpc3RfbG8KLXMsQGFnZW50X21vZHVsZV9saXN0X2xvQCwsO3QgdAotL0BtaWJncm91cF9saXN0X29AL3IgJG1pYmdyb3VwX2xpc3RfbwotcyxAbWliZ3JvdXBfbGlzdF9vQCwsO3QgdAotL0BtaWJncm91cF9saXN0X2xvQC9yICRtaWJncm91cF9saXN0X2xvCi1zLEBtaWJncm91cF9saXN0X2xvQCwsO3QgdAotL0BhZ2VudGdyb3VwX2xpc3Rfb0AvciAkYWdlbnRncm91cF9saXN0X28KLXMsQGFnZW50Z3JvdXBfbGlzdF9vQCwsO3QgdAotL0BhZ2VudGdyb3VwX2xpc3RfbG9AL3IgJGFnZW50Z3JvdXBfbGlzdF9sbwotcyxAYWdlbnRncm91cF9saXN0X2xvQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdEAvciAkYWdlbnRfbW9kdWxlX2xpc3QKLXMsQGFnZW50X21vZHVsZV9saXN0QCwsO3QgdAotL0Btb2R1bGVfcnVsZXNAL3IgJG1vZHVsZV9ydWxlcwotcyxAbW9kdWxlX3J1bGVzQCwsO3QgdAotL0Btb2R1bGVfbGlzdF9kZXBzQC9yICRtb2R1bGVfbGlzdF9kZXBzCi1zLEBtb2R1bGVfbGlzdF9kZXBzQCwsO3QgdAotL0BtaWJfbW9kdWxlX2xpc3RfZGVwc0AvciAkbWliX21vZHVsZV9saXN0X2RlcHMKLXMsQG1pYl9tb2R1bGVfbGlzdF9kZXBzQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdF9kZXBzQC9yICRhZ2VudF9tb2R1bGVfbGlzdF9kZXBzCi1zLEBhZ2VudF9tb2R1bGVfbGlzdF9kZXBzQCwsO3QgdAotQ0VPRgotCi1fQUNFT0YKLQotICBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSAgIyBTcGxpdCB0aGUgc3Vic3RpdHV0aW9ucyBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIGZvciBzZWRzIHdpdGgKLSAgIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCi0gIGFjX21heF9zZWRfbGluZXM9NDgKLSAgYWNfc2VkX2ZyYWc9MSAjIE51bWJlciBvZiBjdXJyZW50IGZpbGUuCi0gIGFjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgotICBhY19lbmQ9JGFjX21heF9zZWRfbGluZXMgIyBMaW5lIGFmdGVyIGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgotICBhY19tb3JlX2xpbmVzPToKLSAgYWNfc2VkX2NtZHM9Ci0gIHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbwotICAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgotICAgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCi0gICAgZWxzZQotICAgICAgc2VkICIke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZwotICAgIGZpCi0gICAgaWYgdGVzdCAhIC1zICR0bXAvc3Vicy5mcmFnOyB0aGVuCi0gICAgICBhY19tb3JlX2xpbmVzPWZhbHNlCi0gICAgZWxzZQotICAgICAgIyBUaGUgcHVycG9zZSBvZiB0aGUgbGFiZWwgYW5kIG9mIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uIGlzIHRvCi0gICAgICAjIHNwZWVkIHVwIHRoZSBzZWQgcHJvY2Vzc2luZyAoaWYgdGhlcmUgYXJlIG5vIGBAJyBhdCBhbGwsIHRoZXJlCi0gICAgICAjIGlzIG5vIG5lZWQgdG8gYnJvd3NlIGFueSBvZiB0aGUgc3Vic3RpdHV0aW9ucykuCi0gICAgICAjIFRoZXNlIGFyZSB0aGUgdHdvIGV4dHJhIHNlZCBjb21tYW5kcyBtZW50aW9uZWQgYWJvdmUuCi0gICAgICAoZWNobyAnOnQKLSAgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYicgJiYgY2F0ICR0bXAvc3Vicy5mcmFnKSA+JHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQKLSAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KLQlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgotICAgICAgZWxzZQotCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCi0gICAgICBmaQotICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKLSAgICAgIGFjX2JlZz0kYWNfZW5kCi0gICAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2xpbmVzYAotICAgIGZpCi0gIGRvbmUKLSAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgotICAgIGFjX3NlZF9jbWRzPWNhdAorICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKICAgZmkKK2RvbmUKK3JtIC1mIGNvbmYkJHN1YnMuc2gKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCitfQUNFT0YKK3NlZCAtbiAnCitoCitzL14vU1siLzsgcy8hLiovIl09LworcAorZworcy9eW14hXSohLy8KKzpyZXBsCit0IHJlcGwKK3MvJyIkYWNfZGVsaW0iJyQvLwordCBkZWxpbQorOm5sCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KK3AKK24KK2IgcmVwbAorOm1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgbmwKKzpkZWxpbQoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworcAorYgorOm1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgZGVsaW0KKycgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKKy9eW14iIl0veworICBOCisgIHMvXG4vLworfQorJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorcm0gLWYgY29uZiQkc3Vicy5hd2sKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorX0FDQVdLCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorICBcJGFjX2NzX2F3a19waXBlX2luaXQKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisgIGlmIChuZmllbGRzID09IDMgJiYgIXN1YnN0ZWQpIHsKKyAgICBrZXkgPSBmaWVsZFsyXQorICAgIGlmIChGW2tleV0gIT0gIiIgJiYgbGluZSB+IC9eWwkgXSpALipAWwkgXSokLykgeworICAgICAgXCRhY19jc19hd2tfcmVhZF9maWxlCisgICAgICBuZXh0CisgICAgfQorICB9CisgIHByaW50IGxpbmUKK30KK1wkYWNfY3NfYXdrX3BpcGVfZmluaQorX0FDQVdLCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIHNlZCAicy8kYWNfY3IvLyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorZWxzZQorICBjYXQKK2ZpIDwgIiRhY190bXAvc3ViczEuYXdrIiA+ICIkYWNfdG1wL3N1YnMuYXdrIiBcCisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK19BQ0VPRgorCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlIHNvbGUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGVudHJpZXMgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKyMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj1bCSBdKi97CitoCitzLy8vCitzL14vOi8KK3MvWwkgXSokLzovCitzLzpcJChzcmNkaXIpOi86L2cKK3MvOlwke3NyY2Rpcn06LzovZworcy86QHNyY2RpckA6LzovZworcy9eOiovLworcy86KiQvLworeAorcy9cKD1bCSBdKlwpLiovXDEvCitHCitzL1xuLy8KK3MvXltePV0qPVsJIF0qJC8vCit9JworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgogCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgoraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorY2F0ID4iJGFjX3RtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitCRUdJTiB7CiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0ZJTEVTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKLSAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgotICBjYXNlICRhY19maWxlIGluCi0gIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgotCWNhdCA+JHRtcC9zdGRpbgotCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JDEKKyAgc2hpZnQKKworICBjYXNlICRhY19tb2RlIGluCisgIDpMKSBhY19zb3VyY2U9JDE7OworICA6W0ZIXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkYWNfdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtcXC8kXSopIGZhbHNlOzsKKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisJICAgZXNhYyB8fAorCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYworCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OworICAgIGVzYWMKKyAgICA7OwogICBlc2FjCiAKLSAgIyBDb21wdXRlIEBzcmNkaXJALCBAdG9wX3NyY2RpckAsIGFuZCBASU5TVEFMTEAgZm9yIHN1YmRpcmVjdG9yaWVzLgotICBhY19kaXI9YChkaXJuYW1lICIkYWNfZmlsZSIpIDI+L2Rldi9udWxsIHx8CisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAogJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKIAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKIAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19maWxlIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgotICAgIG1rZGlyIC1wICIkYWNfZGlyIgotICBlbHNlCi0gICAgYXNfZGlyPSIkYWNfZGlyIgotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIGRvbmUKLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycwotICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQotCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgIGFzX2Rpcj0iJGFjX2RpciI7IGFzX2ZuX21rZGlyX3AKICAgYWNfYnVpbGRkaXI9LgogCi1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAotZWxzZQotICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9Ci1maQorY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKIAogY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgogICAgIGFjX3NyY2Rpcj0uCi0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KLSAgICAgICBhY190b3Bfc3JjZGlyPS4KLSAgICBlbHNlCi0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAotICAgIGZpIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCiAgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4Ci0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7CiBlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CiAKLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQotIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KLWNhc2UgYHB3ZGAgaW4KLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotKikKLSAgY2FzZSAiJGFjX2RpciIgaW4KLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotKikKLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCi0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3NyY2RpciBpbgotICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCiAKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKIAogICBjYXNlICRJTlNUQUxMIGluCiAgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKLSAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkZGlyJElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CiAgIGVzYWMKLQotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KLSAgICBybSAtZiAiJGFjX2ZpbGUiCi0gIGZpCi0gICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0Ci0gICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKLSAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCi0gICAgY29uZmlndXJlX2lucHV0PQotICBlbHNlCi0gICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICIKLSAgZmkKLSAgY29uZmlndXJlX2lucHV0PSRjb25maWd1cmVfaW5wdXQiR2VuZXJhdGVkIGZyb20gYGVjaG8gJGFjX2ZpbGVfaW4gfAotCQkJCSAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKLQotICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQotICAjIHNyYyB0cmVlLgotICBhY19maWxlX2lucHV0cz1gSUZTPToKLSAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KLSAgICAgIGNhc2UgJGYgaW4KLSAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OwotICAgICAgW1xcLyRdKikKLQkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKLQkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JIGVjaG8gIiRmIjs7Ci0gICAgICAqKSAjIFJlbGF0aXZlCi0JIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotCSAgICMgQnVpbGQgdHJlZQotCSAgIGVjaG8gIiRmIgotCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCi0JICAgIyBTb3VyY2UgdHJlZQotCSAgIGVjaG8gIiRzcmNkaXIvJGYiCi0JIGVsc2UKLQkgICAjIC9kZXYvbnVsbCB0cmVlCi0JICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgZmk7OwotICAgICAgZXNhYwotICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotICBzZWQgIiRhY192cHN1YgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKICRleHRyYXN1YgogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIDp0CiAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCi1zLEBjb25maWd1cmVfaW5wdXRALCRjb25maWd1cmVfaW5wdXQsO3QgdAotcyxAc3JjZGlyQCwkYWNfc3JjZGlyLDt0IHQKLXMsQGFic19zcmNkaXJALCRhY19hYnNfc3JjZGlyLDt0IHQKLXMsQHRvcF9zcmNkaXJALCRhY190b3Bfc3JjZGlyLDt0IHQKLXMsQGFic190b3Bfc3JjZGlyQCwkYWNfYWJzX3RvcF9zcmNkaXIsO3QgdAotcyxAYnVpbGRkaXJALCRhY19idWlsZGRpciw7dCB0Ci1zLEBhYnNfYnVpbGRkaXJALCRhY19hYnNfYnVpbGRkaXIsO3QgdAotcyxAdG9wX2J1aWxkZGlyQCwkYWNfdG9wX2J1aWxkZGlyLDt0IHQKLXMsQGFic190b3BfYnVpbGRkaXJALCRhY19hYnNfdG9wX2J1aWxkZGlyLDt0IHQKLXMsQElOU1RBTExALCRhY19JTlNUQUxMLDt0IHQKLSIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4kdG1wL291dAotICBybSAtZiAkdG1wL3N0ZGluCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICBtdiAkdG1wL291dCAkYWNfZmlsZQotICBlbHNlCi0gICAgY2F0ICR0bXAvb3V0Ci0gICAgcm0gLWYgJHRtcC9vdXQKLSAgZmkKK3N8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKK3MmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAorcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKK3MmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKK3MmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorcyZAYnVpbGRkaXJAJiRhY19idWlsZGRpciY7dCB0CitzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAorJGFjX2RhdGFyb290ZGlyX2hhY2sKKyIKK2V2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiB8CitpZiAkYWNfY3NfYXdrX2dldGxpbmU7IHRoZW4KKyAgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIKK2Vsc2UKKyAgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgfCAkU0hFTEwKK2ZpIFwKKyAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogCi0gICMgUnVuIHRoZSBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCit0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkYWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyBcCisgICAgICAiJGFjX3RtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiYyO30KKworICBybSAtZiAiJGFjX3RtcC9zdGRpbiIKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgIG5ldC1zbm1wLWNvbmZpZyApIGNobW9kICt4IG5ldC1zbm1wLWNvbmZpZyA7OwotICBlc2FjCi1kb25lCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotCi0jCi0jIENPTkZJR19IRUFERVIgc2VjdGlvbi4KLSMKLQotIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKLSMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KLSMKLSMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KLWFjX2RBPSdzLF5cKFsJIF0qXCkjXChbCSBdKmRlZmluZVsJIF1bCSBdKlwpJwotYWNfZEI9J1sJIF0uKiQsXDEjXDInCi1hY19kQz0nICcKLWFjX2REPScsO3QnCi0jIGFjX3UgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRob3V0IHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgotYWNfdUE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qXCl1bmRlZlwoWwkgXVsJIF0qXCknCi1hY191Qj0nJCxcMSNcMmRlZmluZVwzJwotYWNfdUM9JyAnCi1hY191RD0nLDt0JwotCi1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfSEVBREVSUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCi0gICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KLSAgY2FzZSAkYWNfZmlsZSBpbgotICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KLQljYXQgPiR0bXAvc3RkaW4KLQlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OwotICBlc2FjCi0KLSAgdGVzdCB4IiRhY19maWxlIiAhPSB4LSAmJiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQotCi0gICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCi0gICMgc3JjIHRyZWUuCi0gIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgotICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbwotICAgICAgY2FzZSAkZiBpbgotICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7Ci0gICAgICBbXFwvJF0qKQotCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQotCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgIyBEbyBxdW90ZSAkZiwgdG8gcHJldmVudCBET1MgcGF0aHMgZnJvbSBiZWluZyBJRlMnZC4KLQkgZWNobyAiJGYiOzsKLSAgICAgICopICMgUmVsYXRpdmUKLQkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCi0JICAgIyBCdWlsZCB0cmVlCi0JICAgZWNobyAiJGYiCi0JIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KLQkgICAjIFNvdXJjZSB0cmVlCi0JICAgZWNobyAiJHNyY2Rpci8kZiIKLQkgZWxzZQotCSAgICMgL2Rldi9udWxsIHRyZWUKLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCSBmaTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci0gICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZXMuCi0gIHNlZCAncy9bCSBdKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCi0KLV9BQ0VPRgotCi0jIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gdHdvIHNlZCBzY3JpcHRzLCBgY29uZnRlc3QuZGVmaW5lcycgYW5kCi0jIGBjb25mdGVzdC51bmRlZnMnLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KLSMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4gIFRoZSBmaXJzdCBoYW5kbGVzIGAjZGVmaW5lJwotIyB0ZW1wbGF0ZXMsIGFuZCB0aGUgc2Vjb25kIGAjdW5kZWYnIHRlbXBsYXRlcy4KLSMgQW5kIGZpcnN0OiBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4KLSMgY29uZmlnLnN0YXR1cy4gIFByb3RlY3QgYWdhaW5zdCBiZWluZyBpbiBhbiB1bnF1b3RlZCBoZXJlIGRvY3VtZW50Ci0jIGluIGNvbmZpZy5zdGF0dXMuCi1ybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnVuZGVmcwotIyBVc2luZyBhIGhlcmUgZG9jdW1lbnQgaW5zdGVhZCBvZiBhIHN0cmluZyByZWR1Y2VzIHRoZSBxdW90aW5nIG5pZ2h0bWFyZS4KLSMgUHV0dGluZyBjb21tZW50cyBpbiBzZWQgc2NyaXB0cyBpcyBub3QgcG9ydGFibGUuCi0jCi0jIGBlbmQnIGlzIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgc2Vjb25kIG1haW4gc2VkIGNvbW1hbmQgKG1lYW50IGZvcgotIyAwLWFyeSBDUFAgbWFjcm9zKSBhcHBsaWVzIHRvIG4tYXJ5IG1hY3JvIGRlZmluaXRpb25zLgotIyBTZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24gZm9yIGBjbGVhcicuCi1jYXQgPmNvbmZkZWYyc2VkLnNlZCA8PFxfQUNFT0YKLXMvW1xcJixdL1xcJi9nCi1zLFtcXCRgXSxcXCYsZwotdCBjbGVhcgotOiBjbGVhcgotcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSAoXVteCSAoXSpcKVwoKFteKV0qKVwpWwkgXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKLXQgZW5kCi1zLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIF1bXgkgXSpcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSxncAotOiBlbmQKLV9BQ0VPRgotIyBJZiBzb21lIG1hY3JvcyB3ZXJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgdGltZXMKLSMgdGhlIHNhbWUgI2RlZmluZXMsIHdoaWNoIGlzIHVzZWxlc3MuICBOZXZlcnRoZWxlc3MsIHdlIG1heSBub3Qgd2FudCB0bwotIyBzb3J0IHRoZW0sIHNpbmNlIHdlIHdhbnQgdGhlICpsYXN0KiBBQy1ERUZJTkUgdG8gYmUgaG9ub3JlZC4KLXVuaXEgY29uZmRlZnMuaCB8IHNlZCAtbiAtZiBjb25mZGVmMnNlZC5zZWQgPmNvbmZ0ZXN0LmRlZmluZXMKLXNlZCAncy9hY19kL2FjX3UvZycgY29uZnRlc3QuZGVmaW5lcyA+Y29uZnRlc3QudW5kZWZzCi1ybSAtZiBjb25mZGVmMnNlZC5zZWQKLQotIyBUaGlzIHNlZCBjb21tYW5kIHJlcGxhY2VzICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgotIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAotIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCi1jYXQgPj5jb25mdGVzdC51bmRlZnMgPDxcX0FDRU9GCi1zLF5bCSBdKiNbCSBdKnVuZGVmWwkgXVsJIF0qW2EtekEtWl9dW2EtekEtWl8wLTldKiwvKiAmICovLAotX0FDRU9GCi0KLSMgQnJlYWsgdXAgY29uZnRlc3QuZGVmaW5lcyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbiB0aGUgc2l6ZQotIyBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvbyAoMTAwIGNtZHMpLgotZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICNkZWZpbmUgdGVtcGxhdGVzIG9ubHkgaWYgbmVjZXNzYXJ5LicgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICBpZiBncmVwICJeWwkgXSojWwkgXSpkZWZpbmUiICR0bXAvaW4gPi9kZXYvbnVsbDsgdGhlbicgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICAjIElmIHRoZXJlIGFyZSBubyBkZWZpbmVzLCB3ZSBtYXkgaGF2ZSBhbiBlbXB0eSBpZi9maScgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICA6JyA+PiRDT05GSUdfU1RBVFVTCi1ybSAtZiBjb25mdGVzdC50YWlsCi13aGlsZSBncmVwIC4gY29uZnRlc3QuZGVmaW5lcyA+L2Rldi9udWxsCi1kbwotICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC9kZWZpbmVzLnNlZC4KLSAgZWNobyAnICBjYXQgPiR0bXAvZGVmaW5lcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCNkZWZpbmUnIGxpbmVzLgotICBlY2hvICcvXlsJIF0qI1sJIF0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCi0gIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QuZGVmaW5lcyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJ0NFT0YKLSAgc2VkIC1mICR0bXAvZGVmaW5lcy5zZWQgJHRtcC9pbiA+JHRtcC9vdXQKLSAgcm0gLWYgJHRtcC9pbgotICBtdiAkdG1wL291dCAkdG1wL2luCi0nID4+JENPTkZJR19TVEFUVVMKLSAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnRhaWwKLSAgcm0gLWYgY29uZnRlc3QuZGVmaW5lcwotICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LmRlZmluZXMKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKLWVjaG8gJyAgZmkgIyBncmVwJyA+PiRDT05GSUdfU1RBVFVTCi1lY2hvID4+JENPTkZJR19TVEFUVVMKLQotIyBCcmVhayB1cCBjb25mdGVzdC51bmRlZnMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKLSMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KLWVjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjdW5kZWYgdGVtcGxhdGVzJyA+PiRDT05GSUdfU1RBVFVTCi1ybSAtZiBjb25mdGVzdC50YWlsCi13aGlsZSBncmVwIC4gY29uZnRlc3QudW5kZWZzID4vZGV2L251bGwKLWRvCi0gICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL3VuZGVmcy5zZWQuCi0gIGVjaG8gJyAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCN1bmRlZicKLSAgZWNobyAnL15bCSBdKiNbCSBdKnVuZGVmLyFiJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCi0gIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QudW5kZWZzID4+JENPTkZJR19TVEFUVVMKLSAgZWNobyAnQ0VPRgotICBzZWQgLWYgJHRtcC91bmRlZnMuc2VkICR0bXAvaW4gPiR0bXAvb3V0Ci0gIHJtIC1mICR0bXAvaW4KLSAgbXYgJHRtcC9vdXQgJHRtcC9pbgotJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC51bmRlZnMgPmNvbmZ0ZXN0LnRhaWwKLSAgcm0gLWYgY29uZnRlc3QudW5kZWZzCi0gIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QudW5kZWZzCi1kb25lCi1ybSAtZiBjb25mdGVzdC51bmRlZnMKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0gICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0Ci0gICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKLSAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCi0gICAgZWNobyAiLyogR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAotICBlbHNlCi0gICAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCi0gIGZpCi0gIGNhdCAkdG1wL2luID4+JHRtcC9jb25maWcuaAotICBybSAtZiAkdG1wL2luCisgIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkYWNfdG1wL291dCIgIiRhY19maWxlIjs7CisgIGVzYWMgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyA7OworICA6SCkKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIwogICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgaWYgZGlmZiAkYWNfZmlsZSAkdG1wL2NvbmZpZy5oID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKLWVjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIHsKKyAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCisgICAgfSA+IiRhY190bXAvY29uZmlnLmgiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorICAgIGlmIGRpZmYgIiRhY19maWxlIiAiJGFjX3RtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CiAgICAgZWxzZQotICAgICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19maWxlIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICAgIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKLSAgZWxzZQotICAgIGFzX2Rpcj0iJGFjX2RpciIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQotICAgICAgcm0gLWYgJGFjX2ZpbGUKLSAgICAgIG12ICR0bXAvY29uZmlnLmggJGFjX2ZpbGUKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkYWNfdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKICAgICBmaQogICBlbHNlCi0gICAgY2F0ICR0bXAvY29uZmlnLmgKLSAgICBybSAtZiAkdG1wL2NvbmZpZy5oCisgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKICAgZmkKLWRvbmUKLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgOzsKIAorICA6QykgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKyA7OworICBlc2FjCisKKworICBjYXNlICRhY19maWxlJGFjX21vZGUgaW4KKyAgICAibGlidG9vbCI6QykKKworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCiAjCi0jIENPTkZJR19DT01NQU5EUyBzZWN0aW9uLgorIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgICAgICAgICAgICAgICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKICMKLWZvciBhY19maWxlIGluIDogJENPTkZJR19DT01NQU5EUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCi0gIGFjX2Rlc3Q9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgCi0gIGFjX3NvdXJjZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLSAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2Rlc3QiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYWNfZGVzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19kZXN0IiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgotICAgIG1rZGlyIC1wICIkYWNfZGlyIgotICBlbHNlCi0gICAgYXNfZGlyPSIkYWNfZGlyIgotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIGRvbmUKLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycwotICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogCi0gIGFjX2J1aWxkZGlyPS4KIAotaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgotICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCi0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKLWVsc2UKLSAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQorIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCithdmFpbGFibGVfdGFncz0iIgorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIFdoaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD8KK21hY3JvX3ZlcnNpb249JG1hY3JvX3ZlcnNpb24KK21hY3JvX3JldmlzaW9uPSRtYWNyb19yZXZpc2lvbgorCisjIEFzc2VtYmxlciBwcm9ncmFtLgorQVM9JGx0X0FTCisKKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSRsdF9ETExUT09MCisKKyMgT2JqZWN0IGR1bXBlciBwcm9ncmFtLgorT0JKRFVNUD0kbHRfT0JKRFVNUAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlcy4KK0VDSE89JGx0X0VDSE8KKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgorU0VEPSRsdF9TRUQKKworIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KK1hzZWQ9IlwkU0VEIC1lIDFzL15YLy8iCisKKyMgQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMuCitHUkVQPSRsdF9HUkVQCisKKyMgQW4gRVJFIG1hdGNoZXIuCitFR1JFUD0kbHRfRUdSRVAKKworIyBBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXIuCitGR1JFUD0kbHRfRkdSRVAKKworIyBBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlci4KK05NPSRsdF9OTQorCisjIFdoZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3MuCitMTl9TPSRsdF9MTl9TCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JG1heF9jbWRfbGVuCisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PSRhY19vYmpleHQKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9JGV4ZWV4dAorCisjIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCIuCitsdF91bnNldD0kbHRfdW5zZXQKKworIyB0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzLgorU1AyTkw9JGx0X2x0X1NQMk5MCisKKyMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KK05MMlNQPSRsdF9sdF9OTDJTUAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisKKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCitmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorCisjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisKKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorCisjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KK1NUUklQPSRsdF9TVFJJUAorCisjIENvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb24uCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249JGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbgorCisjIEEgQyBjb21waWxlci4KK0xUQ0M9JGx0X0NDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9DRkxBR1MKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworCisjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIi4KK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgTWFuaWZlc3QgdG9vbC4KK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorRFNZTVVUSUw9JGx0X0RTWU1VVElMCisKKyMgVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFguCitOTUVESVQ9JGx0X05NRURJVAorCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFguCitMSVBPPSRsdF9MSVBPCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFguCitPVE9PTD0kbHRfT1RPT0wKKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNC4KK09UT09MNjQ9JGx0X09UT09MNjQKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9JGxpYmV4dAorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JGx0X3NocmV4dF9jbWRzCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCBsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0kbHRfdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsKKworIyBEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAorCisjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CituZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgorCisjIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgordmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKKworIyBTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKKworIyBTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgorc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUKK2xpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCisKKyMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCitzb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKKworIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzLgoraW5zdGFsbF9vdmVycmlkZV9tb2RlPSRsdF9pbnN0YWxsX292ZXJyaWRlX21vZGUKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyMgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCisKKyMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYworCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTEQKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXIKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0MKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWMKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0kbHRfY29tcGlsZXJfbmVlZHNfb2JqZWN0CisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kcworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHMKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYworCisjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkKKyMgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZAorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgXCR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpYworCisjIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisjIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgoraW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCisKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCitmdW5jX2Rpcm5hbWUgKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCitcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKK1wgICAgZXNhY1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKK2Z1bmNfYmFzZW5hbWUgKClcCit7XAorXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCitcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKK1wgICAgZXNhY1wKK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKK2Z1bmNfc3RyaXBuYW1lICgpXAore1wKK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCitcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorZnVuY19zcGxpdF9sb25nX29wdCAoKVwKK3tcCitcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAore1wKK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCitcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCitmdW5jX2xvMm8gKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCitcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorXCAgICBlc2FjXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorZnVuY194Zm9ybSAoKVwKK3tcCisgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCitmdW5jX2FyaXRoICgpXAore1wKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCitmdW5jX2xlbiAoKVwKK3tcCisgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKIGZpCiAKLWNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCi0gICAgYWNfc3JjZGlyPS4KLSAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgotICAgICAgIGFjX3RvcF9zcmNkaXI9LgotICAgIGVsc2UKLSAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCi0gICAgZmkgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKLWVzYWMKLQotIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCi0jIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgotY2FzZSBgcHdkYCBpbgotLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0qKQotICBjYXNlICIkYWNfZGlyIiBpbgotICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0qKQotICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KLSAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfc3JjZGlyIGluCi0gIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgotICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0gICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCitmdW5jX2FwcGVuZCAoKVwKK3tcCisgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgogCiAKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjUKLWVjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjY7fQotICBjYXNlICRhY19kZXN0IGluCi0gICAgZGVmYXVsdCApIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaCA7OworICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorZnVuY19hcHBlbmRfcXVvdGVkICgpXAore1wKK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCitcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitlbHNlCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZmkKKworaWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CitmaQorCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCisgOzsKKyAgICAibmV0LXNubXAtY29uZmlnIjpGKSBjaG1vZCAreCBuZXQtc25tcC1jb25maWcgOzsKKyAgICAibmV0LXNubXAtY3JlYXRlLXYzLXVzZXIiOkYpIGNobW9kICt4IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIDs7CisgICAgImRlZmF1bHQiOkMpIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaCA7OworCiAgIGVzYWMKLWRvbmUKLV9BQ0VPRgorZG9uZSAjIGZvciBhY190YWcKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCiAKLXsgKGV4aXQgMCk7IGV4aXQgMDsgfQorYXNfZm5fZXhpdCAwCiBfQUNFT0YKLWNobW9kICt4ICRDT05GSUdfU1RBVFVTCiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQogCit0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKwogCiAjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCiAjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KQEAgLTUxMTAxLDcgKzMyMDkyLDExIEBACiAgIGV4ZWMgNT4+Y29uZmlnLmxvZwogICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAogICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgMQorZmkKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyIgJiYgdGVzdCAiJGVuYWJsZV9vcHRpb25fY2hlY2tpbmciICE9IG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjI7fQogZmkKIAogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmNzYxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDEzMiBAQAorIyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKyMgdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyMgdGhhdCBtYXkgYXBwbHk6CisjCisjIFBvcnRpb25zIENvcHlyaWdodCCpIDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisjCisKKyMKKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyMKK0FDX0lOSVQoW05ldC1TTk1QXSwgWzUuNy4zXSwgW25ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdKQorQUNfUFJFUkVRKFsyLjYzXSkKK0FDX0NPTkZJR19TUkNESVIoW2FnZW50L3NubXBkLmNdKQorQUNfUkVWSVNJT04oWyRSZXZpc2lvbiRdKQorCitBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCitBQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgpCisKK0FDX01TR19DQUNIRV9JTklUKCkKKworIworIyBzYXZlIHRoZSBjb25maWd1cmUgYXJndW1lbnRzCisjCitBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9DT05GSUdVUkVfT1BUSU9OUywiJGFjX2NvbmZpZ3VyZV9hcmdzIiwKKyAgW2NvbmZpZ3VyZSBvcHRpb25zIHNwZWNpZmllZF0pCitDT05GSUdVUkVfT1BUSU9OUz0iXCIkYWNfY29uZmlndXJlX2FyZ3NcIiIKK0FDX1NVQlNUKENPTkZJR1VSRV9PUFRJT05TKQorCisjIworIyMgUmVjb21tZW5kZWQgc3RydWN0dXJlOgorIyMKKyMgICAgIGluZm9ybWF0aW9uIG9uIHRoZSBwYWNrYWdlCisjICAgICBjaGVja3MgZm9yIHByb2dyYW1zCisjICAgICBjaGVja3MgZm9yIGxpYnJhcmllcworIyAgICAgY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKKyMgICAgIGNoZWNrcyBmb3IgdHlwZXMKKyMgICAgIGNoZWNrcyBmb3Igc3RydWN0dXJlcworIyAgICAgY2hlY2tzIGZvciBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MKKyMgICAgIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKKyMgICAgIGNoZWNrcyBmb3Igc3lzdGVtIHNlcnZpY2VzCisKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbF0pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3NdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHNdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnNdKQorQUNfQ0FDSEVfU0FWRQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlc10pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWJdKQorQUNfQ0FDSEVfU0FWRQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50XSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMV0pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbGliczJdKQorQUNfQ0FDSEVfU0FWRQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob25dKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjM10pCitBQ19DQUNIRV9TQVZFCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyc10pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzRdKQorQUNfQ0FDSEVfU0FWRQorCisjCisjIGRlZmluZSB0aGUgYWdlbnQgbGlicmFyaWVzIHZhcmlhYmxlcworIworQUNfU1VCU1QoTE1JQkxJQlMpCitBQ19TVUJTVChBR0VOVExJQlMpCitBQ19TVUJTVChPVEhFUkFHRU5UTElCT0JKUykKK0FDX1NVQlNUKE9USEVSQUdFTlRMSUJMT0JKUykKK0FDX1NVQlNUKE9USEVSQUdFTlRMSUJMRlRTKQorCitBQ19TVUJTVChETExJQlMpCisKK0FDX1NVQlNUKFBBUlRJQUxUQVJHRVRGTEFHUykKK0FDX1NVQlNUKGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSkKKworQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZTpNYWtlZmlsZS50b3A6TWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQorQUNfQ09ORklHX0ZJTEVTKFtzbm1wbGliL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpzbm1wbGliL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOnNubXBsaWIvTWFrZWZpbGUuZGVwZW5kXSkKK0FDX0NPTkZJR19GSUxFUyhbYXBwcy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL01ha2VmaWxlLmRlcGVuZF0pCitBQ19DT05GSUdfRklMRVMoW2FwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmRdKQorQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvTWFrZWZpbGUuZGVwZW5kXSkKK0FDX0NPTkZJR19GSUxFUyhbYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZF0pCitBQ19DT05GSUdfRklMRVMoW2FnZW50L21pYmdyb3VwL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmRdKQorQUNfQ09ORklHX0ZJTEVTKFtsb2NhbC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bG9jYWwvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQorQUNfQ09ORklHX0ZJTEVTKFt0ZXN0aW5nL01ha2VmaWxlOk1ha2VmaWxlLnRvcDp0ZXN0aW5nL01ha2VmaWxlLmluXSkKK0FDX0NPTkZJR19GSUxFUyhbbWFuL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptYW4vTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQorQUNfQ09ORklHX0ZJTEVTKFttaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKK0FDX0NPTkZJR19GSUxFUyhbbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbl0sCisJCVtjaG1vZCAreCBuZXQtc25tcC1jb25maWddKQorQUNfQ09ORklHX0ZJTEVTKFtuZXQtc25tcC1jcmVhdGUtdjMtdXNlcjpuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbl0sCisJCVtjaG1vZCAreCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlcl0pCitBQ19DT05GSUdfRklMRVMoW2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXM6ZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcy5pbl0pCitBQ19DT05GSUdfRklMRVMoW2xvY2FsL3NubXBjb25mXSkKKworQUNfQ09ORklHX0NPTU1BTkRTKFtkZWZhdWx0XSwgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1oKQorCisjCisjIHByb3RlY3QgUEFDS0FHRV8qIHZhcmlhYmxlcworIworQUhfVkVSQkFUSU0oW1BBQ0tBR0VfQlVHUkVQT1JUXSxbLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjaWZuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKyNlbmRpZl0pCitBSF9WRVJCQVRJTShbUEFDS0FHRV9OQU1FXSxbLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBQQUNLQUdFX05BTUUKKyN1bmRlZiBQQUNLQUdFX05BTUUKKyNlbmRpZl0pCitBSF9WRVJCQVRJTShbUEFDS0FHRV9TVFJJTkddLFsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFBBQ0tBR0VfU1RSSU5HCisjdW5kZWYgUEFDS0FHRV9TVFJJTkcKKyNlbmRpZl0pCitBSF9WRVJCQVRJTShbUEFDS0FHRV9UQVJOQU1FXSxbLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBQQUNLQUdFX1RBUk5BTUUKKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKyNlbmRpZl0pCitBSF9WRVJCQVRJTShbUEFDS0FHRV9WRVJTSU9OXSxbLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgUEFDS0FHRV9WRVJTSU9OCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisjZW5kaWZdKQorCitBQ19PVVRQVVQKKworQUNfTVNHX0NBQ0hFX0RJU1BMQVkoKQorIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IEF1dG9jb25mCisjIGNvbW1lbnQtc3RhcnQ6ICIjIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOGFjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudApAQCAtMCwwICsxLDgyMiBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjCisjIGdlbmVyYXRlIGVtcHR5IGZpbGVzCisjCisjIENyZWF0ZSBpbmNsdWRlIGZpbGUgbGlzdCBmb3Igc25tcF92YXJzLmggdG8gdXNlLgorbWliZGlyPSJhZ2VudC9taWJncm91cCIKK2lmIHRlc3QgISAtZCBhZ2VudDsgdGhlbgorICBta2RpciBhZ2VudAorZmkKK2lmIHRlc3QgISAtZCBhZ2VudC9taWJncm91cDsgdGhlbgorICBta2RpciBhZ2VudC9taWJncm91cAorZmkKK2o9IiRtaWJkaXIvbWliX21vZHVsZV9pbmNsdWRlcy5oICAkbWliZGlyL2FnZW50X21vZHVsZV9pbmNsdWRlcy5oIFwKKyAgICRtaWJkaXIvbWliX21vZHVsZV9pbml0cy5oICAgICAkbWliZGlyL2FnZW50X21vZHVsZV9pbml0cy5oICAgIFwKKyAgICRtaWJkaXIvbWliX21vZHVsZV9zaHV0ZG93bi5oICAkbWliZGlyL2FnZW50X21vZHVsZV9zaHV0ZG93bi5oIFwKKyAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaCAgIFwKKyAgICRtaWJkaXIvbWliX21vZHVsZV9kb3RfY29uZi5oICAkbWliZGlyL2FnZW50X21vZHVsZV9kb3RfY29uZi5oIgorCitmb3IgaSBpbiAkajsgZG8KKyAgcm0gLWYgJGkKKyAgZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJGkKK2RvbmUKKworIworIyBEbyBoYWlyeSBhZ2VudCBtb2R1bGUgcHJvY2Vzc2luZy4KKyMKK0FDX01TR19DSEVDS0lORyhbZm9yIGFuZCBjb25maWd1cmluZyBtaWIgbW9kdWxlcyB0byB1c2VdKQorCisjIHNldCB1cCB0aGUgQ1BQIGNvbW1hbmQKK01PRFVMRUNQUD0iJENQUCAkUEFSVElBTFRBUkdFVEZMQUdTICRDUFBGTEFHUyAtRE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORyAtSSR7c3JjZGlyfS9pbmNsdWRlIC1JJHtzcmNkaXJ9L2FnZW50L21pYmdyb3VwIgoraWYgdGVzdCAieCRlbmFibGVfbWZkX3Jld3JpdGVzIiA9ICJ4eWVzIjsgdGhlbgorICBNT0RVTEVDUFA9IiRNT0RVTEVDUFAgLURORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMiCitmaQorCittb2R1bGVfbGlzdD0iIgorbWliX21vZHVsZV9saXN0PSIiCithZ2VudF9tb2R1bGVfbGlzdD0iIgorbmV3X3dpdGhfbWliX21vZHVsZXM9YGVjaG8gJHdpdGhfbWliX21vZHVsZXMgfCAkU0VEICdzLywvIC9nOydgCituZXdfd2l0aF9vdXRfbWliX21vZHVsZXM9YGVjaG8gJHdpdGhfb3V0X21pYl9tb2R1bGVzIHwgJFNFRCAncy8sLyAvZzsnYAorCisjIHNldCB1cCBpbml0aWFsIG1vZHVsZSBsaXN0CituZXdfbW9kdWxlX2xpc3Q9IiRuZXdfd2l0aF9taWJfbW9kdWxlcyBkZWZhdWx0X21vZHVsZXMiCisKKyMgbWlub3IgbW9kaWZpY2F0aW9ucworaWYgdGVzdCAieCRlbmFibGVfYWdlbnQiID0gInhubyI7IHRoZW4KKyAgICMgbWluaW11bSBtaWIgbW9kdWxlIGxpc3QgZm9yIHNubXB0cmFwZAorICAgbmV3X21vZHVsZV9saXN0PSJtaWJJSS92YWNtX3ZhcnMgbWliSUkvdmFjbV9jb25mIHV0aWxpdGllcy9leGVjdXRlICRuZXdfd2l0aF9taWJfbW9kdWxlcyIKKyAgIGRlZmF1bHRfbWlicz1TTk1QdjItTUlCOklGLU1JQjpJUC1NSUI6VENQLU1JQjpVRFAtTUlCCisgICBkZWZhdWx0X21pYnNfaW5zdGFsbD0iICIKK2VsaWYgdGVzdCAieCRtaW5pX2FnZW50IiA9ICJ4eWVzIjsgdGhlbgorICAgIyBkZWZpbmUgdGhlIG1pbmkgYWdlbnQgZmxhZyB0byByZWR1Y2Ugb3VyIGxvYWQgbGlzdCBmcm9tIGRlZmF1bHRfbWlicy5oCisgICBNT0RVTEVDUFA9IiRNT0RVTEVDUFAgLURORVRTTk1QX01JTklfQUdFTlQiCitmaQorCit0ZXN0X21vZHVsZXM9IiRuZXdfbW9kdWxlX2xpc3QiCituZXdfbW9kdWxlX2xpc3Q9IiIKKworIyByZW1vdmUgbW9kdWxlcyB0aGF0IHdlcmUgZXhwbGljaXRseSBleGNsdWRlZAorZm9yIGkgaW4gJHRlc3RfbW9kdWxlcworIGRvCisgIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIGlzIGJvdGggaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkLiIKKyAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBjb25mbGljdF0pCisgICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW3VzZXIgd2l0aCAgICA6ICR3aXRoX21pYl9tb2R1bGVzXSkKKyAgICAgIEFDX01TR19XQVJOKFtmaW5hbCB3aXRoICAgOiAkbmV3X21vZHVsZV9saXN0XSkKKyAgICAgIEFDX01TR19XQVJOKFt1c2VyIHdpdGhvdXQgOiAkd2l0aF9vdXRfbWliX21vZHVsZXNdKQorICAgICAgQUNfTVNHX1dBUk4oW2ZpbmFsIHdpdGhvdXQ6ICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXNdKQorICAgICAgQUNfTVNHX0VSUk9SKFskbWliX2NmZ19tc2ddKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19XQVJOKFskbWliX2NmZ19tc2cgSXQgd2lsbCBiZSBleGNsdWRlZF0pCisgICAgICBBQ19NU0dfQ0FDSEVfQUREKFsqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2cgSXQgaGFzIGJlZW4gZXhjbHVkZWQuXSkKKyAgICBmaQorICBlbHNlCisgICAgbmV3X21vZHVsZV9saXN0PSIkbmV3X21vZHVsZV9saXN0ICRpIgorICBmaQorZG9uZQorCituZXdfbW9kdWxlX2xpc3Q9YChlY2hvICRuZXdfbW9kdWxlX2xpc3QgfCB0ciAnICcgJ1xuJyB8IHNvcnQgfCB0ciAnXG4nICcgJzsgZWNobyAnJykgfCAkU0VEICdzLyAkLy8nYAorCitBQ19NU0dfUkVTVUxUKFskbmV3X21vZHVsZV9saXN0Ll0pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9vcCBvdmVyIG1vZHVsZSBsaXN0CisjCithbGxfd2FybmluZ3M9IiIKK2lmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2RlYnVnIiA9ICJ4eWVzIjsgdGhlbgorICAgbW9kdWxlX2RlYnVnPTEKK2Vsc2UKKyAgIG1vZHVsZV9kZWJ1Zz0wCitmaQorZmlyc3RfcGFzcz0xCitvdXRwdXRfdG89bm9ybWFsCisKK2lmIHRlc3QgISAtZCBtayA7IHRoZW4KKyAgbWtkaXIgbWsKK2ZpCisKKworbW9kdWxlX3J1bGVzPW1rL21vZHVsZV9ydWxlcy5taworZWNobyAiIyBjb250ZW50cyBiZWxvdyBidWlsdCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZTsgZG8gbm90IGVkaXQgYnkgaGFuZCIgPiAkbW9kdWxlX3J1bGVzCisKKyMKKyMgbWFrZSBmaWxlIHN1Yi1waWVjZXMKKyMKK2ZvciBpIGluIG1vZHVsZV9saXN0X2RlcHMgbWliX21vZHVsZV9saXN0X2RlcHMgYWdlbnRfbW9kdWxlX2xpc3RfZGVwcyA7IGRvCisgIGV2YWwgIiRpPW1rLyR7aX0ubWsiCisgIGVjaG8gIiMgY29udGVudHMgYmVsb3cgYnVpbHQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmU7IGRvIG5vdCBlZGl0IGJ5IGhhbmQiID4gbWsvJHtpfS5taworZG9uZQorCisjCisjIHZhcmlhYmxlIHNldHRpbmdzIHN1Yi1waWVjZXMKKyMKK2ZvciBpIGluIG1vZHVsZV9saXN0X2NvZGUgbWliX21vZHVsZV9saXN0X2NvZGUgYWdlbnRfbW9kdWxlX2xpc3RfY29kZSBtb2R1bGVfbGlzdCBtaWJfbW9kdWxlX2xpc3QgYWdlbnRfbW9kdWxlX2xpc3QgOyBkbworICBldmFsICIkaT1tay8ke2l9Lm1rIgorICBlY2hvICIjIGNvbnRlbnRzIGJlbG93IGJ1aWx0IGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlOyBkbyBub3QgZWRpdCBieSBoYW5kIiA+IG1rLyR7aX0ubWsKKyAgZWNobyAiJGk9IFxcIiA+PiBtay8ke2l9Lm1rCitkb25lCisKK2VjaG8gJEVDSE9fTiAiZWNobyAiICRFQ0hPX0MgPiBtay9NT0RVTEVfTElTVC5taworTU9EVUxFX0xJU1Q9bWsvTU9EVUxFX0xJU1QubWsKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHVudGlsIHdlIGhhdmUgYW4gZW1wdHkgbW9kdWxlIGxpc3QuLi4KKyMgICAobW9kdWxlcyBtYXkgYWRkIG5ldyBtb2R1bGVzLCBhbmQgdW50aWwgYWxsIGRlcGVuZGVuY2llcyBhcmUgZG9uZS4uLikKKyMKK3doaWxlIHRlc3QgIngkbmV3X21vZHVsZV9saXN0IiAhPSAieCI7IGRvCisgIEFDX01TR19NT0RVTEVfREJHKC1lLCJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKQorICBBQ19NU0dfTU9EVUxFX0RCRygibm1sOiAkbmV3X21vZHVsZV9saXN0IikKKworICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICMgbG9vcCBvdmVyIGFsbCB0aGUgbW9kdWxlcyBpbiB0aGUgY3VycmVudCBsaXN0CisgICMKKyAgZm9yIGogaW4gJG5ld19tb2R1bGVfbGlzdAorICAgIGRvCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBmaWd1cmUgb3V0IHdoaWNoIHN1Yi1ibG9ja3MgdG8gYnVpbGQgaW4gcGFydHMKKyAgICBpZiBlY2hvICIkaiIgfCAkR1JFUCAiPSIgOyB0aGVuCisgICAgICAgIyBidWlsZCBhIHNoYXJlZCBvYmplY3QgZmlsZQorICAgICAgICMgZm9ybWF0OiBzb2ZpbGVuYW1lPW1vZHVsZTE6bW9kdWxlMgorICAgICAgICMgWFhYOiBjdXJyZW50bHkgZG9lc24ndCBkbyB0aGlzCisgICAgICAgZGxfbmFtZT1gZWNobyAkaiB8ICRTRUQgJ3MvPS4qLy8nYAorICAgICAgIGRsX25hbWVzPSIkZGxfbmFtZXMgJGRsX25hbWUiCisgICAgICAgZGxfb2JqZWN0cz1gZWNobyAkaiB8ICRTRUQgJ3MvLio9Ly8nYAorICAgICAgIG1vZHVsZV9zdWJsaXN0PWBlY2hvICRkbF9vYmplY3RzIHwgJFNFRCAncy86LyAvZydgCisgICAgICAgc2F2ZWRfc3VibGlzdD0iIgorICAgICAgIHNhdmVkX3N1Ymxpc3RfY29kZT0iIgorICAgICAgIG91dHB1dF90bz1zZXBhcmF0ZQorCisgICAgICAgIyBjcmVhdGUgb3V0cHV0IGZpbGVzCisgICAgICAgIyB0aGVzZSBhY3R1YWxseSBnZXQgbnVrZWQgbGF0ZXIKKyAgICAgICBvdXRwdXRfaW5pdHM9ImFnZW50L21pYmdyb3VwLyR7ZGxfbmFtZX0tZGxsLmMiCisgICAgICAgb3V0cHV0X2hkcnM9ImFnZW50L21pYmdyb3VwLyR7ZGxfbmFtZX0taGRycy5oIgorICAgIGVsc2UKKyAgICAgICAjIG5vdCBhIHNwZWNpYWwgdG9rZW4gaW52b2NhdGlvbgorICAgICAgIG1vZHVsZV9zdWJsaXN0PSRqCisgICAgICAgb3V0cHV0X3RvPW5vcm1hbAorICAgICAgIG91dHB1dF90PQorICAgIGZpCisKKyAgICB3aGlsZSB0ZXN0ICJ4JG1vZHVsZV9zdWJsaXN0IiAhPSAieCIgOyBkbworCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgbG9vcCBvdmVyIGFsbCB0aGUgbW9kdWxlcyBpbiB0aGUgc3ViIGxpc3QKKyAgICBmb3IgaSBpbiAkbW9kdWxlX3N1Ymxpc3QKKyAgICBkbworCisgICAgQUNfTVNHX01PRFVMRV9EQkcoLWUgIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpCisgICAgQUNfTVNHX01PRFVMRV9EQkcoInRlc3RpbmcgJGkiKQorICAgIG5lZWRfaGVhZGVyPTAKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGJ1aWxkIGEgcHNldWRvIGluY2x1ZGUgaGVhZGVyIHRoYXQgaW5jbHVkZXMgY3VycmVudCBjb25maWcgYW5kCisgICAgIyBzeXN0ZW0gc3ltYm9sczoKKyAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKKyAgICBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFCisjaW5jbHVkZSAiJHNyY2Rpci8kbWliZGlyLyRpLmgiXV0pXSkKKyAgICBtdiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIG1hY3JvOiBjb25maWdfYmVsb25nc19pbihBUkcpCisgICAgIyAgIEFSRzogZWl0aGVyCisgICAgIyAgICAgLSBtaWJfbW9kdWxlICAgPT4gbGlibmV0c25tcG1pYnMgICAoZGVmYXVsdCkKKyAgICAjICAgICAtIGFnZW50X21vZHVsZSA9PiBsaWJuZXRzbm1wYWdlbnQKKyAgICAjCisgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ19iZWxvbmdzX2luKHgpXSkKKyAgICBtb2R1bGVfdHlwZT1taWJfbW9kdWxlCisgICAgaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuaDsgdGhlbgorICAgICAgY2hhbmdlcXVvdGUoLCApCisgICAgICBtb2R1bGVfdHlwZT1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3NALipjb25maWdfYmVsb25nc19pbihcKFteKV0qXCkpLipAXDFAcCdgCisgICAgICBjaGFuZ2VxdW90ZShbLCBdKQorICAgIGZpCisgICAgaWYgdGVzdCAieCRtb2R1bGVfdHlwZSIgPSAieCIgOyB0aGVuCisgICAgICBtb2R1bGVfdHlwZT1taWJfbW9kdWxlCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JG91dHB1dF90byIgPSAieG5vcm1hbCIgOyB0aGVuCisgICAgIAlvdXRwdXRfaW5pdHM9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5pdHMuaCIKKyAgICAgCW91dHB1dF9oZHJzPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luY2x1ZGVzLmgiCisgICAgZmkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY2hlY2sgZm9yIGR1cGxpY2F0ZXMgd2l0aGluIHRoZSBkbGwgc3lzdGVtLiAKKyAgICAjICAgLSBpZiBmb3VuZCBpbiBhIGRsbCwgdGhlbiByZW1vdmUgZnJvbSB0aGUgZGxsIGFuZCBhZGQgdG8gbWFpbgorICAgIGRibGZpeD0iIgorICAgIGZvciBkbHRlc3QgaW4gJGRsX25hbWVzIDsgZG8KKyAgICAgIGV2YWwgbW9kX2ZpbGVzPSJcIlwkZGxfJHtkbHRlc3R9X2ZpbGVzXCIiCisgICAgICBpZiBlY2hvICIgJG1vZF9maWxlcyAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgc29tZSBkbGwgbW9kdWxlIGhhcyBhbHJlYWR5IHNlZW4gdGhpcywgdW5sb2FkIGl0IGZyb20gdGhhdCBsaXN0CisgICAgICAgICMgYW5kIGluY2x1ZGUgaXQgaW4gdGhlIGNvcmUgKGFnYWluKQorICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygicmVtb3ZpbmcgJGkgZnJvbSAkZGx0ZXN0IikKKyAgICAgICAgbW9kX2ZpbGVzPWBlY2hvICIgJG1vZF9maWxlcyAiIHwgJFNFRCAic0AgJGkgQEAiYAorICAgICAgICBkYmxmaXg9Il9fWFhYX18iCisgICAgICAgIGV2YWwgImRsXyR7ZGx0ZXN0fV9maWxlcz1cIiRtb2RfZmlsZXNcIiIKKworICAgICAgICBtb2R1bGVfbGlzdD0iJG1vZHVsZV9saXN0ICRpIgorCWVjaG8gInJlYWRfY29uZmlnLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkbW9kdWxlX2xpc3RfZGVwcworCWlmIHRlc3QgJG1vZHVsZV90eXBlID0gImFnZW50X21vZHVsZSIgOyB0aGVuCisgCSAgICBlY2hvICJzbm1wX3ZhcnMubG86IG1pYmdyb3VwLyRpLmgiID4+ICRhZ2VudF9tb2R1bGVfbGlzdF9kZXBzCisgICAgICAgIGVsc2UKKyAJICAgIGVjaG8gIm1pYl9tb2R1bGVzLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkbWliX21vZHVsZV9saXN0X2RlcHMKKyAgICAgICAgZmkKKyAgICAgICAgZXZhbCAke21vZHVsZV90eXBlfV9saXN0PSJcIlwkJHttb2R1bGVfdHlwZX1fbGlzdCAkaVwiIgorCWVjaG8gIgkkaSBcXCIgPj4gJG1vZHVsZV9saXN0X2NvZGUKKwllY2hvICRFQ0hPX04gIiAkaSIgJEVDSE9fQyA+PiAkTU9EVUxFX0xJU1QKKyAgICAgICAgZXZhbCB0bXBmaWxldmFyPVwkYGVjaG8gJHttb2R1bGVfdHlwZX1fbGlzdF9jb2RlYAorICAgICAgICBlY2hvICIJJGkgXFwiID4+ICR0bXBmaWxldmFyCisKKwkjIFhYWDogYWRkIHRoaXMgdG8gdGhlIG1haW4gaW5pdCBsaXN0OyB0aGlzIGlzIHBvc3NpYmxlIG5vdAorCSMgcXVpdGUgaW4gdGhlIHJpZ2h0IHNwb3QgYW55IGxvbmdlciBidXQgd2UncmUgc3R1Y2sgd2l0aCBpdC4KKwkjIEFkZGluZyBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBvcmRlcmVkIHNwb3Qgd291bGQgYmUgYQorCSMgbmlnaHRtYXJlLiAgT2ssIHdlJ3JlIGFscmVhZHkgaW4gbmlnaHRtYXJlIGNvZGUgc28gdGhhdAorCSMgd29sdWQgaGF2ZSB0byBiZSBhIG5pZ2h0LXRlcnJvci4KKyAgICAgICAgbW5tPWBlY2hvICRpIHwgJFNFRCAncy8uKlwvLy87cy9cLmMkLy87J2AKKwlvdXRwdXRfaW5pdHNfdG1wPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luaXRzLmgiCisJZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHNfdG1wCisgICAgICAgICMgWFhYOiBldmVuIHdvcnNlLCB3ZSBsb29zZSB3aGV0aGVyIHRoZSBoZWFkZXIgaXMgbmVlZGVkIG9yIG5vdC4KKyAgICAgCW91dHB1dF9oZHJzX3RtcD0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbmNsdWRlcy5oIgorICAgICAgICBlY2hvICcjaW5jbHVkZSAiJyJtaWJncm91cC8kaS5oIiciJyA+PiAkb3V0cHV0X2hkcnNfdG1wCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIG1ha2Ugc3VyZSBtb2R1bGUgd2Fzbid0IGV4cGxpY2l0bHkgZXhjbHVkZWQsIG9yIGFscmVhZHkgYWRkZWQKKyAgICAjCisgICAgaWYgdGVzdCAieCRkYmxmaXgiICE9ICJ4IiA7IHRoZW4KKyAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaSB3YXMgZHVwbGljYXRlZCAtLSBwdXR0aW5nIGludG8gbWFpbiIpCisgICAgZWxpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGkgd2FzIGV4Y2x1ZGVkIikKKyAgICBlbGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRpIGFscmVhZHkgdGVzdGVkIikKKyAgICBlbHNlCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgcHJvY2VzcyBtb2R1bGVzIGhlYWRlciwgY2hlY2tpbmcgZm9yIGNvbmZpZ18gcHNldWRvLW1hY3JvcworICAgICAgIworCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIGRvZXMgdGhlIGhlYWRlciBmaWxlIGZvciB0aGUgbW9kdWxlIGV4aXN0PworICAgICAgIyAgIG1hY3JvcyBhcmUgb25seSBwcm9jZXNzZWQgaWYgaXQgZG9lcworICAgICAgaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuaDsgdGhlbgorICAgICAgICBuZXdfbGlzdD0iIgorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAkjIG1hY3JvOiBjb25maWdfZXhjbHVkZShtb2R1bGVzKQorICAgICAgCSMgIC0gbGlzdHMgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcworICAgICAgCSMgICAgLSBFRzogbmV3IE1JQiBpbXBsZW1lbnRhdGlvbnMgZXhjbHVkZSBvbGQgYW5kIHZpY2UtdmVyc2EKKyAgICAgIAkjCisgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBjb25mbGljdHMKKyAgICAgICAgIworICAgICAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX2V4Y2x1ZGUoeCldKQorICAgICAgICBuZXdfbGlzdF9leGNsPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfZXhjbHVkZShcKC4qXCkpLiovXDEvcCdgCisJaWYgdGVzdCAieCRuZXdfbGlzdF9leGNsIiAhPSAieCI7IHRoZW4KKyAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGkgZXhjbHVkZXMgJG5ld19saXN0X2V4Y2wiKQorCSAgZm9yIGogaW4gJG5ld19saXN0X2V4Y2wKKwkgICAgZG8KKwkgICAgaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X21pYl9tb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICIgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyBleGNsdWRlcyBtb2R1bGUgJyRqJyBidXQgYW5vdGhlciBtb2R1bGUgcmVxdWlyZXMgaXQiCisgICAgICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKKyAgICAgICAgICAgICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgorCSAgICAgICAgQUNfTVNHX0VSUk9SKFskbWliX2NmZ19tc2ddKQorICAgICAgICAgICAgICBlbHNlCisJICAgICAgICBBQ19NU0dfV0FSTihbJG1pYl9jZmdfbXNnXSkKKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0FDSEVfQUREKFsqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2ddKQorICAgICAgICAgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzPSIkaiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzIgorICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGogYWRkZWQgdG8gZXhjbHVkZWQgbGlzdCIpCisJICAgIGZpCisJICBkb25lCisJZmkKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAJIyBtYWNybzogY29uZmlnX2FyY2hfcmVxdWlyZShBUkNILG1vZHVsZXMpCisgICAgICAJIyAgLSBsaXN0cyBtb2R1bGVzIHJlcXVpcmVkIGZvciBhIGdpdmVuIEFSQ0gKKyAgICAgICAgIworICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHJlcXVpcmVtZW50cworICAgICAgICAjCisgICAgICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfYXJjaF9yZXF1aXJlKHgseSldKQorICAgICAgICBjaGFuZ2VxdW90ZSgsICkKKyAgICAgICAgbmV3X2xpc3RfYXJjaD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX2FyY2hfcmVxdWlyZSggKlwoW14gXSpcKSAqLCAqXChbXiBdKlwpICopLiovXDEteGFyY2h4LVwyL3AnYAorICAgICAgICBjaGFuZ2VxdW90ZShbLCBdKQorCWlmIHRlc3QgIngkbmV3X2xpc3RfYXJjaCIgIT0gIngiOyB0aGVuCisgICAgICAgICAgZm9yIGogaW4gJG5ld19saXN0X2FyY2gKKwkgICAgZG8KKwkgICAgYXJjaHRlc3Q9YGVjaG8gJGogfCAkU0VEICdzLy14YXJjaHgtLiovLydgCisJICAgICMgdGFyZ2V0X29zIG1heSBoYXZlIGJlZW4gY2hhbmdlZCB0byBhICNkZWZpbmUgb2YgMS4uLgorCSAgICBpZiB0ZXN0ICJ4JGFyY2h0ZXN0IiA9ICJ4MSIgLW8gIngkdGFyZ2V0X29zIiA9ICJ4JGFyY2h0ZXN0IiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gIngkYXJjaHRlc3QiOyB0aGVuCisJICAgICAgbmV3X2xpc3Q9IiRuZXdfbGlzdCBgZWNobyAkaiB8ICRTRUQgJ3MvLioteGFyY2h4LS8vJ2AiCisgICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgJGkgcmVxdWlyZWQgYWRkaW5nIGFyY2ggZmlsZXM6IGBlY2hvICRqIHwgJFNFRCAncy8uKi14YXJjaHgtLy8nYCIpCisJICAgIGZpCisJICBkb25lCisJZmkKKyAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAkaSByZXF1aXJlZCBhcmNoIGZpbGVzOiAkbmV3X2xpc3QiKQorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAkjIG1hY3JvOiBjb25maWdfdmVyc2lvbl9yZXF1aXJlKChiYXNlLCB2ZXJzaW9uLCB2ZXJzaW9uLW1vZHVsZXMsIC4uLikpCisgICAgICAJIyAgLSBsaXN0cyBhbHRlcm5hdGl2ZSBtb2R1bGVzIHVzZWQgZnJvbSBkaWZmZXJlbnQgdmVyc2lvbnMuCisgICAgICAgICMKKyAgICAgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoeCldKQorICAgICAgICBbbmV3X2xpc3RfYWx0Mz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgJEFXSyAnCisgICAgICAgICAgICAgICAgQkVHSU4geworICAgICAgICAgICAgICAgICAgICBpZigiJyIkZW5hYmxlX25ld19mZWF0dXJlcyInIiA9PSAieWVzIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0ibWF4IjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZigiJyIkZW5hYmxlX29sZF9mZWF0dXJlcyInIiA9PSAieWVzIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0ibWF4LWxlc3MiOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9Im1heC1sZXNzLWVxdWFsIjsKKyAgICAgICAgICAgICAgICAgICAgRlMgPSAiLiI7CisgICAgICAgICAgICAgICAgICAgIHNwbGl0KCInIiR3aXRoX2ZlYXR1cmVzX29mIiciLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1zcHJpbnRmKCIlMDNkJTAzZCUwM2QlMDNkIiwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC9jb25maWdfdmVyc2lvbl9yZXF1aXJlLyB7CisgICAgICAgICAgICAgICAgICAgIGdzdWIoIl4uKmNvbmZpZ192ZXJzaW9uX3JlcXVpcmUgKlxcXFwoXFxcXCgiLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGdzdWIoIlxcXFwpXFxcXCkuKiQiLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGdzdWIoIiwgKiIsICIsIik7CisgICAgICAgICAgICAgICAgICAgIEZTID0gIiwiOworICAgICAgICAgICAgICAgICAgICBuID0gc3BsaXQoJDAsIGEpOworICAgICAgICAgICAgICAgICAgICBGUyA9ICIuIjsKKyAgICAgICAgICAgICAgICAgICAgYWN0dmVyID0gIjAwMDAwMDAwMDAwMCI7CisgICAgICAgICAgICAgICAgICAgIGFjdHN0ciA9IGFbMV07CisgICAgICAgICAgICAgICAgICAgIGZvcihpID0gMjsgaSA8IG47IGkgKz0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXQoYVtpXSwgYik7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZXI9c3ByaW50ZigiJTAzZCUwM2QlMDNkJTAzZCIsIGJbMV0sIGJbMl0sIGJbM10sIGJbNF0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnZlciA+IGFjdHZlciAmJiAobWV0aG9kICE9ICJtYXgtbGVzcyIgfHwgY3VydmVyIDwgdmVyc2lvbikgJiYgKG1ldGhvZCAhPSAibWF4LWxlc3MtZXF1YWwiIHx8IGN1cnZlciA8PSB2ZXJzaW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHZlciA9IGN1cnZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RzdHIgPSBhW2kgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyIsIGFjdHN0cik7CisgICAgICAgICAgICAgICAgfSdgXQorICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICRpIHJlcXVpcmVkIHZlcnNpb25lZCBmZWF0dXJlczogJG5ld19saXN0X2FsdDMiKQorICAgICAgICBuZXdfbGlzdD0iJHtuZXdfbGlzdH0ke25ld19saXN0X2FsdDN9IgorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIAkjIG1hY3JvOiBjb25maWdfcmVxdWlyZShtb2R1bGVzKQorICAgICAgCSMgIC0gbGlzdHMgbW9kdWxlcyByZXF1aXJlZCBmb3IgdGhpcyBtb2R1bGUKKyAgICAgICAgIworICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgb3RoZXIgcmVxdWlyZWQgbW9kdWxlcworICAgICAgICAjCisgICAgICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfcmVxdWlyZSh4KV0pCisgICAgICAgIG5ld19saXN0PSIkbmV3X2xpc3QgYCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfcmVxdWlyZShcKC4qXCkpLiovXDEvcCdgIgorICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICRpIHdpbGwgdGVzdDogJG5ld19saXN0IikKKwlpZiB0ZXN0ICJ4JG5ld19saXN0IiAhPSAieCI7IHRoZW4KKwkgIGZvciBqIGluICRuZXdfbGlzdAorCSAgICBkbworICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoLW4gIiAkaSB3YW50cyB0byBhZGQgJGo6ICIpCisJICAgIGlmIHRlc3QgISAtZiAkc3JjZGlyLyRtaWJkaXIvJGouaCAtYSAhIC1mICRzcmNkaXIvJG1pYmRpci8kai5jOyB0aGVuCisgICAgICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKKwkgICAgICBBQ19NU0dfRVJST1IoW21pYiBtb2R1bGUgIiRpIiByZXF1aXJlcyBtb2R1bGUgIiRqIiBidXQgJGouaCBvciAkai5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXJdKQorCSAgICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICJ4JGkiICE9ICJ4ZGVmYXVsdF9tb2R1bGVzIiA7IHRoZW4KKyAgICAgICAgICAgICAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIHJlcXVpcmVzIG1vZHVsZSAnJGonIGJ1dCBzb21lb25lIHRvbGQgbWUgdG8gY29tcGlsZSB3aXRob3V0IGl0IgorICAgICAgICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoWyRtaWJfY2ZnX21zZ10pCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oWyRtaWJfY2ZnX21zZ10pCisgICAgICAgICAgICAgICAgICBBQ19NU0dfQ0FDSEVfQUREKFsqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2ddKQorICAgICAgICAgICAgICAgIGZpCisjCSAgICBlbGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAkbmV3X21vZHVsZV9saXN0ICIgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KKyMgICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRqIGluY2x1ZGVkIHByZXZpb3VzbHkiKQorICAgICAgICAgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgbmV3X2xpc3RfdHdvPSIkbmV3X2xpc3RfdHdvICRqIgorICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaiBpbmNsdWRlZCIpCisJICAgIGZpCisJICBkb25lCisJZmkKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAJIyBtYWNybzogY29uZmlnX2FkZF9taWIoU09NRS1NSUIpCisgICAgICAJIyAgLSBsaXN0cyBNSUJzIHRvIGJlIGFkZGVkIHRvIHRoZSBkZWZhdWx0IHRvLWxvYWQgbGlzdC4KKyAgICAgICAgIworICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgbWlicyB0byBhZGQKKyAgICAgICAgIworICAgICAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX2FkZF9taWIoeCldKQorICAgICAgICBuZXdfbWlicz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19hZGRfbWliKFwoLipcKSkuKi9cMS9wJ2AKKwlpZiB0ZXN0ICJ4JG5ld19taWJzIiAhPSAieCI7IHRoZW4KKwkgICAgZm9yIGogaW4gJG5ld19taWJzCisJCWRvCisJCWlmIHRlc3QgInhgZWNobyA6JGRlZmF1bHRfbWliczogfCAkR1JFUCA6JGo6YCIgPSAieCI7IHRoZW4KKwkJICAgIGRlZmF1bHRfbWlicz0iJGRlZmF1bHRfbWliczokaiIKKwkJZmkKKwkJaWYgdGVzdCAtZiAkc3JjZGlyL21pYnMvJGoudHh0OyB0aGVuCisJCSAgICBpZiBlY2hvICRkZWZhdWx0X21pYnNfaW5zdGFsbCB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJICAgIDoKKwkJICAgIGVsc2UKKwkJCSAgICBkZWZhdWx0X21pYnNfaW5zdGFsbD0iJGRlZmF1bHRfbWlic19pbnN0YWxsICRqLnR4dCIKKwkJICAgIGZpCisJCWZpCisJICAgIGRvbmUKKwlmaSAjIG5ldyBtaWJzCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyBhZGQgdGhlIGN1cnJlbnQgbW9kdWxlIHRvIHRoZSBsaXN0IG9mIHN0dWZmIHRvIGNvbXBpbGUsIGV0Yy4KKyAgICAgICAgIworICAgICAgICAjIGFkZCAkaSB0byBtb2R1bGUgbGlzdAorICAgICAgICAjCisgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRpIGFkZGVkIChiYXNlZCBvbiAkaS5oKSIpCisgICAgICAgIG1vZHVsZV9saXN0PSIkbW9kdWxlX2xpc3QgJGkiCisgICAgICAgIGV2YWwgJHttb2R1bGVfdHlwZX1fbGlzdD0iXCJcJCR7bW9kdWxlX3R5cGV9X2xpc3QgJGlcIiIKKworCWVjaG8gInJlYWRfY29uZmlnLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkbW9kdWxlX2xpc3RfZGVwcworCWlmIHRlc3QgJG1vZHVsZV90eXBlID0gImFnZW50X21vZHVsZSIgOyB0aGVuCisgCSAgICBlY2hvICJzbm1wX3ZhcnMubG86IG1pYmdyb3VwLyRpLmgiID4+ICRhZ2VudF9tb2R1bGVfbGlzdF9kZXBzCisgICAgICAgIGVsc2UKKyAJICAgIGVjaG8gIm1pYl9tb2R1bGVzLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkbWliX21vZHVsZV9saXN0X2RlcHMKKyAgICAgICAgZmkKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBjb25maWdfbG9hZF9taWIKKyAgICAgICAgIworICAgICAgICBpZiAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCAkR1JFUCAtcSBjb25maWdfbG9hZF9taWI7IHRoZW4KKyAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCisgICAgICAJICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSAiJGkiIHVzZXMgdGhlICJjb25maWdfbG9hZF9taWIiIGRpcmVjdGl2ZSwgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIEl0IHByb2JhYmx5IHdvbid0IHdvcmsuXSkKKyAgICAgICAgZmkgIyBncmVwIGNvbmZpZ19sb2FkX21pYgorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgY2hlY2sgZm9yIGNvbmZpZ19wYXJzZV9kb3RfY29uZgorICAgICAgICAjICAoZ2VuZXJhbGx5IG5vdCB1c2VkIGFueSBsb25nZXI7IG9sZCBhdXRvLWxvYWQgYSAuY29uZiB0b2tlbikKKyAgICAgICAgIworICAgICAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX3BhcnNlX2RvdF9jb25mKHcseCx5LHopXSkKKyAgICAgICAgY2hhbmdlcXVvdGUoLCApCisgICAgICAgICRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgJFNFRCAtbiAnc0AuKmNvbmZpZ19wYXJzZV9kb3RfY29uZihcKFteKV0qXCksICpcKFteKSxdKlwpLCAqXChbXiksXSpcKSwgKlwoW14pLF0qXCkpLipAcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXBkIixcMSwgXDIsIFwzLCBcNCk7QHAnID4+ICRtaWJkaXIvbWliX21vZHVsZV9kb3RfY29uZi5oCisJY2hhbmdlcXVvdGUoWywgXSkKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAJIyBtYWNybzogY29uZmlnX2Vycm9yKGVycm9yIHRleHQpCisgICAgICAJIyAgLSB1c2VkIHRvIHNpZ25hbCBhIGNvbmZpZ3VyYXRpb24gZXJyb3IgZnJvbSBhIG1vZHVsZQorICAgICAgICAjCisgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBlcnJvcnMsIG9yIHdhcm5pbmdzCisgICAgICAgICMKKyAgICAgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ19lcnJvcih4KV0pCisgICAgICAgIGVycm9yPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX2Vycm9yKFwoLipcKSkuKi9cMS9wJ2AKKwlpZiB0ZXN0ICJ4JGVycm9yIiAhPSAieCI7IHRoZW4KKyAgICAgICAgICBlY2hvCisgICAgICAgICAgZWNobworICAgICAgICAgIEFDX01TR19FUlJPUihbJGk6ICoqKiAkZXJyb3IgKioqXSkKKyAgICAgICAgZmkKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAJIyBtYWNybzogY29uZmlnX3dhcm5pbmcod2FybmluZyB0ZXh0KQorICAgICAgCSMgIC0gdXNlZCB0byBzaWduYWwgYSBjb25maWd1cmF0aW9uICJ3YXJuaW5nIiB0byBiZSBwcmludGVkIHRvIHRoZSB1c2VyCisgICAgICAgICMKKyAgICAgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ193YXJuaW5nKHgpXSkKKyAgICAgICAgd2FybmluZz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX3dhcm5pbmcoXCguKlwpKS4qL1wxL3AnYAorCWlmIHRlc3QgIngkd2FybmluZyIgIT0gIngiOyB0aGVuCisgICAgICAgICAgYWxsX3dhcm5pbmdzPSIkYWxsX3dhcm5pbmdzICR3YXJuaW5nCisiCisgICAgICAgIGZpCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgQ2hlY2sgZm9yIGEgLmMgZmlsZSBpZiB0aGUgLmggZGlkbid0IGV4aXN0CisgICAgICAjCisgICAgICBlbGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmM7IHRoZW4KKyAgICAgICAgaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICRuZXdfbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgJGkgICAgICAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRpIGFscmVhZHkgaW5jbHVkZWQiKQorICAgICAgICBlbHNlCisgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRpIGFkZGVkIChiYXNlZCBvbiAkaS5jKSIpCisJICAgbW9kdWxlX2xpc3Q9IiRtb2R1bGVfbGlzdCAkaSIKKwkgICBtaWJfbW9kdWxlX2xpc3Q9IiRtaWJfbW9kdWxlX2xpc3QgJGkiCisgICAgICAgIGZpCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgTm8gLmggb3IgLmMgPSBlcnJvciEgICh0eXBvPykKKyAgICAgICMKKyAgICAgIGVsc2UgIyBubyAkaS5oIG9yICRpLmMKKyAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQorCUFDX01TR19FUlJPUihbbW9kdWxlIGZpbGVzICRpLmggb3IgJGkuYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyXSkKKyAgICAgIGZpICMgbm8gJGkuaAorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBjaGVjayBmb3IgaW5pdC9zaHV0ZG93biByb3V0aW5lcyB0b28KKyAgICAgICMKKyAgICAgIGhhc19jX2NvZGU9bm8KKyAgICAgIGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmM7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAieCRvdXRwdXRfdG8iID0gInhub3JtYWwiIDsgdGhlbgorCSAgZWNobyAiCSRpIFxcIiA+PiAkbW9kdWxlX2xpc3RfY29kZQorICAJICBlY2hvICRFQ0hPX04gIiAkaSIgJEVDSE9fQyA+PiAkTU9EVUxFX0xJU1QKKyAgICAgICAgICBldmFsIHRtcGZpbGV2YXI9XCRgZWNobyAke21vZHVsZV90eXBlfV9saXN0X2NvZGVgCisgICAgICAgICAgZWNobyAiCSRpIFxcIiA+PiAkdG1wZmlsZXZhcgorICAgICAgICBlbHNlCisgICAgICAgICAgZXZhbCAiZGxfJHtkbF9uYW1lfV9maWxlcz1cIlwkZGxfJHtkbF9uYW1lfV9maWxlcyAkaVwiIgorICAgICAgICAgIHNhdmVkX3N1Ymxpc3RfY29kZT0iJHNhdmVkX3N1Ymxpc3RfY29kZSAkaSIKKyAgICAgICAgZmkKKyAgICAgICAgbW5tPWBlY2hvICRpIHwgJFNFRCAncy8uKlwvLy87cy9cLmMkLy87J2AKKyAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoLWUgIlxuY2hlY2tpbmcgJyRzcmNkaXIvJG1pYmRpci8kaS5jJyAoJG1ubS9gYmFzZW5hbWUgJGlgKSBDIGZpbGUgZm9yIGluaXQvc2h1dGRvd24iKQorICAgICAgICBpZiB0ZXN0ICJ4JG1ubSIgIT0gInhgYmFzZW5hbWUgJGlgIjsgdGhlbgorICAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCisJICAgQUNfTVNHX0VSUk9SKFtjb25mbGljdGluZyBuYW1lczogJG1ubSAhPSBgYmFzZW5hbWUgJGlgXSkKKyAgICAgICAgZmkKKyAgICAgICAgdGVtcF9pbml0PWAkR1JFUCBpbml0XyRtbm0gJHNyY2Rpci8kbWliZGlyLyRpLmMgfCAkR1JFUCAtdiBfaW5pdF8kbW5tYAorCWlmIHRlc3QgIngkdGVtcF9pbml0IiAhPSAieCI7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKC1lICJhZGRpbmcgaW5pdF8kbW5tKCkgdG8gbGlzdCIpCisgICAgICAgICAgICBuZWVkX2hlYWRlcj0xCisJICAgIGVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzCisJZmkKKwkkR1JFUCBzaHV0ZG93bl8kbW5tICRzcmNkaXIvJG1pYmRpci8kaS5jID4gL2Rldi9udWxsCisgICAgICAgIGlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgLWVxIDE7IHRoZW4KKyAgICAgICAgICAgICAgZWNobyAtZSAiXG5hZGRpbmcgc2h1dGRvd25fJG1ubSgpIHRvIGxpc3QiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgbmVlZF9oZWFkZXI9MQorCSAgICBlY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIHNodXRkb3duXyRtbm0oKTsiID4+ICRtaWJkaXIvJHttb2R1bGVfdHlwZX1fc2h1dGRvd24uaAorCWZpCisgICAgICBmaSAjIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmMKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgaWYgdGhlcmUgaXMgYSBzaHV0ZG93bi9pbml0IGxpc3QsCisgICAgICAjCisgICAgICBpZiB0ZXN0ICRuZWVkX2hlYWRlciAtZXEgMSA7IHRoZW4KKyAgICAgICAgIGVjaG8gJyNpbmNsdWRlICInIm1pYmdyb3VwLyRpLmgiJyInID4+ICRvdXRwdXRfaGRycworICAgICAgZWxzZQorICAgICAgICAgZWNobyAnLyojaW5jbHVkZSAiJyJtaWJncm91cC8kaS5oIiciKi8nID4+ICRvdXRwdXRfaGRycworICAgICAgZmkKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgY2hlY2sgZm9yIG91dHB1dCBkaXJlY3RvcnkgKGZvciBidWlsZGluZyBvdXRzaWRlIG9mIHNvdXJjZSB0cmVlCisgICAgICAjCisgICAgICBjaGFuZ2VxdW90ZSgsICkKKyAgICAgIGlmIHRlc3QgInhgZWNobyAkaSB8ICRTRUQgJ3MvXC8vL2c7J2AiICE9ICJ4JGkiOyB0aGVuCisJbW5kPWBlY2hvICRpIHwgJFNFRCAncy9cL1teL10qJC8vOydgCisJaWYgdGVzdCAhIC1kIC4vJG1pYmRpci8kbW5kOyB0aGVuCisJICAgIG1vZHVsZV9kaXJlY3Rvcmllcz0iJG1vZHVsZV9kaXJlY3RvcmllcyAuLyRtaWJkaXIvJG1uZCIKKwlmaQorICAgICAgZmkgIyBtb2R1bGUgZGlyZWN0b3J5IHRlc3QKKyAgICAgIGNoYW5nZXF1b3RlKFssIF0pCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIGRlZmluZSBVU0lOR18qX01PRFVMRQorICAgICAgIworICAgICAgY2hhbmdlcXVvdGUoLCApCisgICAgICBzeW09ImBlY2hvICR7aX0gfCAkU0VEICdzL1teYS16QS1aMC05X10vXy9nJyB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2AiCisgICAgICBjaGFuZ2VxdW90ZShbLCBdKQorICAgICAgZWNobyAiLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSAke2l9IG1vZHVsZSBmaWxlcy4gICovIiA+PiBpbmNsdWRlL25ldC1zbm1wL2FnZW50LyR7bW9kdWxlX3R5cGV9X2NvbmZpZy5oCisgICAgICBlY2hvICIjZGVmaW5lIFVTSU5HXyR7c3ltfV9NT0RVTEUgMSIgPj4gaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8ke21vZHVsZV90eXBlfV9jb25maWcuaAorICAgICAgZWNobyAiICIgPj4gaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8ke21vZHVsZV90eXBlfV9jb25maWcuaAorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgZWNobyAkRUNIT19OICIgJGkkRUNIT19DIgorICAgIGZpICMKKyAgICBkb25lICMgZm9yIGkgaW4gJG1vZHVsZV9zdWJsaXN0CisKKyAgICBpZiB0ZXN0ICIkb3V0cHV0X3RvIiA9ICJzZXBhcmF0ZSIgOyB0aGVuCisgICAgICBpZiB0ZXN0ICJ4JG5ld19saXN0X3R3byIgPSAieCIgOyB0aGVuCisgICAgICAgICMgbm8gbmV3IHN1Yi1tb2R1bGVzIHRvIGFkZCB0byB0aGUgY3VycmVudCB0YXJnZXQKKyAgICAgICAgb3V0cHV0X3RvPSJub3JtYWwiCisKKyAgICAgICAgZGxsY2xlYW5zPSIkc2F2ZWRfc3VibGlzdF9vICRkbGxjbGVhbnMiCisgICAgICAgIG91dHB1dF9pbml0cz0iIgorICAgICAgICBtb2R1bGVfc3VibGlzdD0iIgorICAgICAgZWxzZQorICAgICAgICAjIGEgbW9kdWxlIGhhZCBzdWItbW9kdWxlcyByZXF1aXJlZDsga2VlcCBnb2luJworICAgICAgICBzYXZlZF9zdWJsaXN0PSIkc2F2ZWRfc3VibGlzdCAkbW9kdWxlX3N1Ymxpc3QiCisgICAgICAgIG1vZHVsZV9zdWJsaXN0PSIkbmV3X2xpc3RfdHdvIgorICAgICAgICBuZXdfbGlzdF90d289IiIKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgbW9kdWxlX3N1Ymxpc3Q9IiIKKyAgICBmaQorCisgICAgZG9uZSAjIHdoaWxlIG1vZHVsZV9zdWJsaXN0CisgIGRvbmUgIyBmb3IgaiBpbiAkbmV3X21vZHVsZV9saXN0CisKKyAgIyByZW1lbWJlciB0aGUgdG9wIGxldmVsIG1vZHVsZXMgZm9yIGxhdGVyIHJlcG9ydGluZworICBpZiB0ZXN0ICRmaXJzdF9wYXNzID0gMSA7IHRoZW4KKyAgICAjIHJlbWVtYmVyIHRoaXMgbGlzdCBmb3IgbGF0ZXIgcmVwb3J0aW5nCisgICAgdG9wX2xldmVsX21vZHVsZXM9IiRuZXdfbW9kdWxlX2xpc3QgPT4gJG5ld19saXN0X3R3byIKKyAgICBmaXJzdF9wYXNzPTAKKyAgZmkKKyAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIyBpZiAkaSBhZGRlZCBuZXcgbW9kdWxlcyB2aXMgY29uZmlnXyosCisgICMgY2hlY2sgdGhvc2UgbW9kdWxlcyBmb3IgcmVxdWlyZW1lbnRzIHRvbworICAjCisgICMgdHJhbnNmZXIgdGhlIG5ldyBtb2R1bGUgdG8gY2hlY2sgbGlzdCB0byB0aGUgbm9ybWFsIHZhcmlhYmxlCisgICMKKyAgaWYgdGVzdCAieCRuZXdfbGlzdF90d28iIDsgdGhlbgorICAgIG91dHB1dF90bz1ub3JtYWwKKyAgZmkKKyAgbmV3X21vZHVsZV9saXN0PSIkbmV3X2xpc3RfdHdvIgorICBuZXdfbGlzdF90d289IiIKK2RvbmUgIyB3aGlsZSB0ZXN0ICJ4JG5ld19tb2R1bGVfbGlzdCIgIT0gIngiOyBkbworZWNobyAiIgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uc3RydWN0IHRoZSBkbGwgY29kZSBmaWxlcyBhbmQgbWFrZSBydWxlcy4gIFRoaXMgY2FuJ3QgYmUgZG9uZQorIyB1bnRpbCBub3cgYmVjYXVzZSBkdXBsaWNhdGUgdXNlIG9mIGEgbW9kdWxlIG1lYW5zIGl0IGdldHMgcmVtb3ZlZAorIyBmcm9tIHRoZSBkbGwgYW5kIHB1dCBpbnRvIHRoZSBtYWluIGFnZW50LgorIworZm9yIGkgaW4gJGRsX25hbWVzIDsgZG8KKyAgZXZhbCBtb2RfZmlsZXM9IlwiXCRkbF8ke2l9X2ZpbGVzXCIiCisgIGVjaG8gImNvbXBvbmVudHMgaW4gdGhlICRpIGRsbDogJG1vZF9maWxlcyIKKworICBvdXRwdXRfaW5pdHM9ImFnZW50L21pYmdyb3VwLyR7aX0tZGxsLmMiCisgIG91dHB1dF9oZHJzPSJhZ2VudC9taWJncm91cC8ke2l9LWhkcnMuaCIKKworICBBQ19NU0dfTU9EVUxFX0RCRygiY3JlYXRpbmcgZGxsIGZpbGU6ICRvdXRwdXRfaW5pdHMiKQorICBmb3Igb2ZpbGUgaW4gJG91dHB1dF9pbml0cyAkb3V0cHV0X2hkcnMgOyBkbworICAgIGlmIHRlc3QgLWYgJG9maWxlIDsgdGhlbgorICAgICAgaWYgJEdSRVAgInRoaXMgZmlsZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlIiAkb2ZpbGUgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgCToKKyAgICAgIGVsc2UKKyAgCUFDX01TR19FUlJPUihbJG9maWxlIGFscmVhZHkgZXhpc3RlZCA7IGNhbid0IGJ1aWxkIGRsbCBvYmplY3QgJGldKQorICAgICAgZmkKKyAgICBmaQorICAgIGNhdCA+ICRvZmlsZSA8PCBFT0ZJRgorLyogeERvIG5vdCBlZGl0OyB0aGlzIGZpbGUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZSAqLworRU9GSUYKKyAgZG9uZQorCisgIGNhdCA+PiAkb3V0cHV0X2luaXRzIDw8IEVPRk9DCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgIiR7aX0taGRycy5oIgordm9pZAoraW5pdF8kaSh2b2lkKSB7CitFT0ZPQworCisgICMgY3JlYXRlIHRoZSAuc28gcnVsZQorICBzYXZlZF9zdWJsaXN0X289YGVjaG8gIiRtb2RfZmlsZXMgIiB8ICRTRUQgJ3MvXiAqLy9nO3MvICAqLy5vIC9nOydgCisKKyAgIyBjcmVhdGUgdGhlIHJ1bGVzIGZvciBlYWNoIG9iamVjdAorICBmb3IgaiBpbiAkbW9kX2ZpbGVzIDsgZG8KKyAgICBjYXQgPj4gJG1vZHVsZV9ydWxlcyA8PCBFT0ZSCiskai5vOiAkai5jCisJXCQoQ0MpIC1jIFwkKENQUEZMQUdTKSBcJChDRkxBR1MpIFwkKERMRkxBR1MpIC1vIFwkQCBcJDwKKworRU9GUgorICAgIG1ubT1gZWNobyAkaiB8ICRTRUQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCisgICAgZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHMKKyAgZG9uZQorCisgICMgY3JlYXRlIHRoZSBydWxlIGZvciB0aGUgLnNvIGFuZCB3cmFwcGVyIGNvZGUKKyAgY2F0ID4+ICRtb2R1bGVfcnVsZXMgPDwgRU9GTQorJHtpfS1kbGwubzogJHtpfS1kbGwuYworCVwkKENDKSAtYyBcJChDUFBGTEFHUykgXCQoQ0ZMQUdTKSBcJChETEZMQUdTKSAtbyBcJEAgXCQ8CisKKyR7aX0uc286ICRzYXZlZF9zdWJsaXN0X28gJHtpfS1kbGwubworCVwkKENDKSBcJChDUFBGTEFHUykgXCQoQ0ZMQUdTKSBcJChETEZMQUdTKSAtbyBcJEAgJHNhdmVkX3N1Ymxpc3RfbyAke2l9LWRsbC5vCisKK0VPRk0KKyAgICAgICAgY2F0ID4+ICRvdXRwdXRfaW5pdHMgPDwgRU9GT0NGSU4KK30KK0VPRk9DRklOCisKK2RvbmUKKworIyBjbGVhbnVwCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYnVpbGQgbW9kdWxlIGxpc3RzIGZvciBNYWtlZmlsZXMKKyMKK2NoYW5nZXF1b3RlKCwgKQorCitmb3IgaSBpbiBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2MgbW9kdWxlX2xpc3RfbG8gbW9kdWxlX2xpc3RfZnQgbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9mdCBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBtaWJncm91cF9saXN0X2Z0IGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfYyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9mdCBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X2Z0IDsgZG8KKyAgZXZhbCAiJGk9bWsvJHtpfS5tayIKK2RvbmUKKworJFNFRCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfbworJFNFRCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfYworJFNFRCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2xvCiskU0VEICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2Z0LztzL1woW149XVwpICAqXFwvXDEuZnQgXFwvZycgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfZnQKKworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X28KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9jCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2xvCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfZnQvO3MvXChbXj1dXCkgICpcXC9cMS5mdCBcXC9nJyA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2Z0CisKKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9vL21pYmdyb3VwX2xpc3Rfby87c0BcKFteIAldKlwpXC5vQG1pYmdyb3VwL1wxLm9AZycgPCAkbWliX21vZHVsZV9saXN0X28gPiAkbWliZ3JvdXBfbGlzdF9vCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfbG8vbWliZ3JvdXBfbGlzdF9sby87c0BcKFteIAldKlwpXC5sb0BtaWJncm91cC9cMS5sb0BnJyA8ICRtaWJfbW9kdWxlX2xpc3RfbG8gPiAkbWliZ3JvdXBfbGlzdF9sbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2Z0L21pYmdyb3VwX2xpc3RfZnQvO3NAXChbXiAJXSpcKVwuZnRAbWliZ3JvdXAvXDEuZnRAZycgPCAkbWliX21vZHVsZV9saXN0X2Z0ID4gJG1pYmdyb3VwX2xpc3RfZnQKKworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfYworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2xvCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2Z0LztzL1woW149XVwpICAqXFwvXDEuZnQgXFwvZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfZnQKKworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3Rfby9hZ2VudGdyb3VwX2xpc3Rfby87c0BcKFteIAldKlwpXC5vQG1pYmdyb3VwL1wxLm9AZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfbyA+ICRhZ2VudGdyb3VwX2xpc3RfbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfbG8vYWdlbnRncm91cF9saXN0X2xvLztzQFwoW14gCV0qXClcLmxvQG1pYmdyb3VwL1wxLmxvQGcnIDwgJGFnZW50X21vZHVsZV9saXN0X2xvID4gJGFnZW50Z3JvdXBfbGlzdF9sbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfZnQvYWdlbnRncm91cF9saXN0X2Z0LztzQFwoW14gCV0qXClcLmZ0QG1pYmdyb3VwL1wxLmZ0QGcnIDwgJGFnZW50X21vZHVsZV9saXN0X2Z0ID4gJGFnZW50Z3JvdXBfbGlzdF9mdAorCitmb3IgaSBpbiBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2MgbW9kdWxlX2xpc3RfbG8gbW9kdWxlX2xpc3RfZnQgbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9mdCBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBtaWJncm91cF9saXN0X2Z0IGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfYyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9mdCBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X2Z0IDsgZG8KKwkjIGhwdXggbWFrZSAoYXQgbGVhc3QpIGRvZXNuJ3QgbGlrZSBhIHRyYWlsaW5nIFwgb24gdGhlIGxhc3QKKwkjIGxpbmUgZXZlbiB3aGVuIHRoZSBuZXh0IGxpbmUgY29udGFpbnMgbm90aGluZyBidXQKKwkjIHdoaXRlc3BhY2UuCisJbGFzdHRva2VuPWBhd2sgJ3tsYXN0dG9rZW49JDF9RU5Ee3ByaW50IGxhc3R0b2tlbn0nIG1rLyRpLm1rYAorCSRTRUQgInMjJGxhc3R0b2tlbiBcXFxcIyRsYXN0dG9rZW4jIiA8IG1rLyRpLm1rID4gbWsvJGkubWsudG1wCisJbXYgbWsvJGkubWsudG1wIG1rLyRpLm1rCisKKwkjIGFkZCBhIGNsb3NpbmcgY29tbWVudAorCWVjaG8gIiIgPj4gbWsvJGkubWsKKwllY2hvICIjIGVuZCBjb25maWd1cmUgZ2VuZXJhdGVkIGNvZGUiID4+IG1rLyRpLm1rCitkb25lCisKK2NoYW5nZXF1b3RlKFssIF0pCisKK2lmIHRlc3QgJG1vZHVsZV9kZWJ1ZyAtZXEgMTsgdGhlbgorICAgZWNobyAtZSAiXG5GaW5hbCBtb2R1bGUgbGlzdDogJG1vZHVsZV9saXN0X2NvZGUiCisgICBleGl0CitmaQoraWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgorICBBQ19NU0dfQ0FDSEVfQUREKFtBZ2VudCBNb2R1bGUgbGlzdDogJG1vZHVsZV9saXN0X2NvZGVdKQorZmkKK0FDX1NVQlNUX0ZJTEUoTU9EVUxFX0xJU1QpCitBQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X2MpCitBQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X28pCitBQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X2xvKQorQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9mdCkKK0FDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X2MpCitBQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9vKQorQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfbG8pCitBQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9mdCkKK0FDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfYykKK0FDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfbykKK0FDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfbG8pCitBQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X2Z0KQorQUNfU1VCU1RfRklMRShtaWJncm91cF9saXN0X28pCitBQ19TVUJTVF9GSUxFKG1pYmdyb3VwX2xpc3RfbG8pCitBQ19TVUJTVF9GSUxFKG1pYmdyb3VwX2xpc3RfZnQpCitBQ19TVUJTVF9GSUxFKGFnZW50Z3JvdXBfbGlzdF9vKQorQUNfU1VCU1RfRklMRShhZ2VudGdyb3VwX2xpc3RfbG8pCitBQ19TVUJTVF9GSUxFKGFnZW50Z3JvdXBfbGlzdF9mdCkKKworQUNfU1VCU1QoZGVmYXVsdF9taWJzX2luc3RhbGwpCitBQ19TVUJTVChkbGxjbGVhbnMpCitBQ19TVUJTVF9GSUxFKG1vZHVsZV9ydWxlcykKK0FDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfZGVwcykKK0FDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X2RlcHMpCitBQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X2RlcHMpCisKK0FDX01TR19SRVNVTFQoLikKKworaWYgdGVzdCAkbW9kdWxlX2RlYnVnIC1lcSAxOyB0aGVuCitBQ19NU0dfQ0FDSEVfQUREKEFnZW50IE1JQiBjb2RlOiAgICAgICAgICAgICRtb2R1bGVfbGlzdCkKK2ZpCitBQ19NU0dfQ0FDSEVfQUREKEFnZW50IE1JQiBjb2RlOiAgICAgICAgICAgICR0b3BfbGV2ZWxfbW9kdWxlcykKKworIyBlbmQgaGFpcnkgYWdlbnQgbW9kdWxlIHByb2Nlc3NpbmcKKworQUNfTVNHX0NIRUNLSU5HKFtpZiBkaXJlY3RvcmllcyBuZWVkIHRvIGJlIGNyZWF0ZWRdKQorZm9yIGkgaW4gJG1vZHVsZV9kaXJlY3RvcmllczsgZG8KKyAgJHNyY2Rpci9ta2luc3RhbGxkaXJzICRpCitkb25lCitBQ19NU0dfUkVTVUxUKC4pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBkZWZhdWx0IG1pYnMKKyMKK0FDX01TR19DSEVDS0lORyhbZGVmYXVsdCBtaWIgZmlsZXMgdG8gcmVhZF0pCitpZiB0ZXN0ICJ4JE5FVFNOTVBfREVGQVVMVF9NSUJTIiA9ICJ4IjsgdGhlbgorICBORVRTTk1QX0RFRkFVTFRfTUlCUz0iJGRlZmF1bHRfbWlicyIKK2ZpCitpZiB0ZXN0ICJ4JEVOVl9TRVBBUkFUT1IiICE9ICJ4IjsgdGhlbgorICA6CitlbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KKyAgIyBtaW5ndzMyIGFuZCBjeWd3aW4gdXNlICc7JyBhcyB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXBhcmF0b3IKKyAgRU5WX1NFUEFSQVRPUj0iOyIKKyAgTkVUU05NUF9ERUZBVUxUX01JQlM9YGVjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCUyIgfCAkU0VEICdzLzovOy9nJ2AKKyAgZGVmYXVsdF9taWJzPWBlY2hvICIkZGVmYXVsdF9taWJzIiB8ICRTRUQgJ3MvOi87L2cnYAorZWxzZQorICBFTlZfU0VQQVJBVE9SPSI6IgorZmkKK0FDX1NVQlNUKEVOVl9TRVBBUkFUT1IpCitBQ19ERUZJTkVfVU5RVU9URUQoW0VOVl9TRVBBUkFUT1JdLCBbIiRFTlZfU0VQQVJBVE9SIl0sCisgICAgICAgICBbRW52aXJvbm1lbnQgc2VwYXJhdG9yIGNoYXJhY3RlciBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXMuXSkKK0FDX0RFRklORV9VTlFVT1RFRChbRU5WX1NFUEFSQVRPUl9DSEFSXSwgWyckRU5WX1NFUEFSQVRPUiddLAorICAgICAgICAgIFtFbnZpcm9ubWVudCBzZXBhcmF0b3IgY2hhcmFjdGVyIHN1cnJvdW5kZWQgYnkgc2luZ2xlIHF1b3Rlcy5dKQorQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9NSUJTLCIkTkVUU05NUF9ERUZBVUxUX01JQlMiKQorQUNfU1VCU1QoTkVUU05NUF9ERUZBVUxUX01JQlMpCitBQ19NU0dfUkVTVUxUKCRORVRTTk1QX0RFRkFVTFRfTUlCUykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIHN5bWJvbHMgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGluIG1ha2VmaWxlcworIworCitpZiBlY2hvICIgJGFnZW50X21vZHVsZV9saXN0ICIgfCBcCisgICBmZ3JlcCAnIGFnZW50eC9hZ2VudHhfY29uZmlnICcgfCBcCisgICBmZ3JlcCAnIGFnZW50eC9jbGllbnQgJyB8IFwKKyAgIGZncmVwICcgYWdlbnR4L3Byb3RvY29sICcgPiAvZGV2L251bGwgOyB0aGVuCisgICBORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfVFJVRT0nJworICAgTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFPScjJworZWxzZQorICAgTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUU9JyMnCisgICBORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfRkFMU0U9JycKK2ZpCitBQ19TVUJTVChbTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUVdKQorQUNfU1VCU1QoW05FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19GQUxTRV0pCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIgYi9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyYmEwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYgpAQCAtMCwwICsxLDIzNCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjCisjIE1heWJlIGFkZCBsaWJyYXJ5IGV4dGVuc2lvbnMgZm9yIHRocmVhZCBtdXRleCBsb2NraW5nLgorIworCitpZiB0ZXN0ICJ4JHdpdGhfcmVzX2xvY2tzIiA9ICJ4eWVzIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9SRUVOVFJBTlQsIDEsCisgICAgW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggcmVlbnRyYW50L3RocmVhZGVkCisgICAgIGNvZGUgKGluY29tcGxldGUpLl0pCisKKyAgICBjYXNlICR0YXJnZXRfb3MgaW4KKworICAgIGFpeCopCisJQ0NfUlVOVElNRV9BUkc9IiRDQ19SVU5USU1FX0FSRyAtbHB0aHJlYWRzIgorCTs7CisKKyAgICAqKQorCTs7CisKKyAgICBlc2FjCitmaQorCisjCisjIEFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2UgZmlsZXMuCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwbGF0Zm9ybS1zcGVjaWZpYyBzb3VyY2VdKQorb3RoZXJfc3JjX2xpc3Q9IiIKK290aGVyX2Z0b2Jqc19saXN0PSIiCitvdGhlcl9sb2Jqc19saXN0PSIiCitvdGhlcl9vYmpzX2xpc3Q9IiIKK290aGVyX2FnZW50b2Jqcz0iIgorb3RoZXJfbGFnZW50b2Jqcz0iIgorb3RoZXJfZnRhZ2VudG9ianM9IiIKK290aGVyX3RyYXBkX29iamVjdHM9IiIKKworIyBXaW4zMiBzZXJ2aWNlIGNvZGUKK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCisgIG90aGVyX3NyY19saXN0PSIkb3RoZXJfc3JjX2xpc3Qgd2luc2VydmljZS5jIHdpbnNlcnZpY2VyYy5yYyIKKyAgb3RoZXJfb2Jqc19saXN0PSIkb3RoZXJfb2Jqc19saXN0IHdpbnNlcnZpY2UubyB3aW5zZXJ2aWNlcmMubyIKKyAgb3RoZXJfbG9ianNfbGlzdD0iJG90aGVyX2xvYmpzX2xpc3Qgd2luc2VydmljZS5sbyB3aW5zZXJ2aWNlcmMubG8iCisgIG90aGVyX2Z0b2Jqc19saXN0PSIkb3RoZXJfZnRvYmpzX2xpc3Qgd2luc2VydmljZS5mdCB3aW5zZXJ2aWNlcmMuZnQiCisgIG90aGVyX2FnZW50b2Jqcz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubyIKKyAgb3RoZXJfbGFnZW50b2Jqcz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubG8iCisgIG90aGVyX2Z0YWdlbnRvYmpzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5sbyIKKyAgb3RoZXJfdHJhcGRfb2JqZWN0cz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubyIgCitmaQorICAKKyMgV2luMzIgcGlwZXMKK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCisgIG90aGVyX3NyY19saXN0PSIkb3RoZXJfc3JjX2xpc3Qgd2lucGlwZS5jIgorICBvdGhlcl9vYmpzX2xpc3Q9IiRvdGhlcl9vYmpzX2xpc3Qgd2lucGlwZS5vIgorICBvdGhlcl9sb2Jqc19saXN0PSIkb3RoZXJfbG9ianNfbGlzdCB3aW5waXBlLmxvIgorICBvdGhlcl9mdG9ianNfbGlzdD0iJG90aGVyX2Z0b2Jqc19saXN0IHdpbnBpcGUuZnQiCitmaQorCitBQ19TVUJTVChvdGhlcl9zcmNfbGlzdCkKK0FDX1NVQlNUKG90aGVyX29ianNfbGlzdCkKK0FDX1NVQlNUKG90aGVyX2xvYmpzX2xpc3QpCitBQ19TVUJTVChvdGhlcl9mdG9ianNfbGlzdCkKK0FDX1NVQlNUKG90aGVyX2FnZW50b2JqcykKK0FDX1NVQlNUKG90aGVyX2xhZ2VudG9ianMpCitBQ19TVUJTVChvdGhlcl9mdGFnZW50b2JqcykKK0FDX1NVQlNUKG90aGVyX3RyYXBkX29iamVjdHMpCisKK0FDX01TR19SRVNVTFQoWyRvdGhlcl9zcmNfbGlzdCAkb3RoZXJfb2Jqc19saXN0ICRvdGhlcl9sb2Jqc19saXN0XSkKK0FDX01TR19SRVNVTFQoWyRvdGhlcl9hZ2VudG9ianMgJG90aGVyX2xhZ2VudG9ianMgJG90aGVyX3RyYXBkX29iamVjdHNdKQorICAKKyMKKyMgQ3JlYXRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGJ1aWxkCisjCitpZiB0ZXN0ICEgLWQgaW5jbHVkZTsgdGhlbgorICBta2RpciBpbmNsdWRlCitmaQoraWYgdGVzdCAhIC1kIGluY2x1ZGUvbmV0LXNubXA7IHRoZW4KKyAgbWtkaXIgaW5jbHVkZS9uZXQtc25tcAorZmkKK2lmIHRlc3QgISAtZCBpbmNsdWRlL25ldC1zbm1wL2FnZW50OyB0aGVuCisgIG1rZGlyIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQKK2ZpCitpZiB0ZXN0ICEgLWQgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5OyB0aGVuCisgIG1rZGlyIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeQorZmkKK2lmIHRlc3QgISAtZCBpbmNsdWRlL3VjZC1zbm1wOyB0aGVuCisgIG1rZGlyIGluY2x1ZGUvdWNkLXNubXAKK2ZpCisKK2lmIHRlc3QgISAtZCBzbm1wbGliOyB0aGVuCisgIG1rZGlyIHNubXBsaWIKK2ZpCitpZiB0ZXN0ICEgLWQgc25tcGxpYi90cmFuc3BvcnRzIDsgdGhlbgorICBta2RpciBzbm1wbGliL3RyYW5zcG9ydHMKK2ZpCisKKyMKKyMgRG8gdHJhbnNwb3J0IG1vZHVsZSBwcm9jZXNzaW5nLgorIworQUNfTVNHX0NIRUNLSU5HKFtmb3IgYW5kIGNvbmZpZ3VyaW5nIHRyYW5zcG9ydCBtb2R1bGVzIHRvIHVzZV0pCisKKyMgaW5jbHVkZSB0aGUgYWN0dWFsIGNvZGUgY2hlY2tpbmcKK200X2luY2x1ZGUoY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cykKKworQUNfU1VCU1QodHJhbnNwb3J0X2hkcl9saXN0KQorQUNfU1VCU1QodHJhbnNwb3J0X3NyY19saXN0KQorQUNfU1VCU1QodHJhbnNwb3J0X29ial9saXN0KQorQUNfU1VCU1QodHJhbnNwb3J0X2xvYmpfbGlzdCkKK0FDX1NVQlNUKHRyYW5zcG9ydF9mdG9ial9saXN0KQorZm9yIGkgaW4gJHRyYW5zcG9ydF9kZWZfbGlzdDsgZG8KKyAgQUNfREVGSU5FX1VOUVVPVEVEKCRpKQorZG9uZQorQUNfTVNHX1JFU1VMVCgkdHJhbnNwb3J0X3Jlc3VsdF9saXN0LikKK0FDX01TR19DQUNIRV9BREQoTmV0d29yayB0cmFuc3BvcnQgc3VwcG9ydDogJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCkKKworIyBjbGVhbnVwCitybSAtZiBtb2R1bGVfdG1wX2hlYWRlci5oCisKKyMKKyMgU2VjdXJpdHkgbW9kdWxlcyB0byB1c2UKKyMgCisKK0FDX01TR19DSEVDS0lORyhbZm9yIHNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlXSkKK200X2luY2x1ZGUoY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlcykKK0FDX1NVQlNUKHNlY3VyaXR5X3NyY19saXN0KQorQUNfU1VCU1Qoc2VjdXJpdHlfaGRyX2xpc3QpCitBQ19TVUJTVChzZWN1cml0eV9vYmpfbGlzdCkgCSAKK0FDX1NVQlNUKHNlY3VyaXR5X2xvYmpfbGlzdCkKK0FDX1NVQlNUKHNlY3VyaXR5X2Z0b2JqX2xpc3QpCitBQ19NU0dfUkVTVUxUKCRuZXdfd2l0aF9zZWN1cml0eSkKK0FDX01TR19DQUNIRV9BREQoU05NUHYzIFNlY3VyaXR5IE1vZHVsZXM6ICAgICRuZXdfd2l0aF9zZWN1cml0eSkKKworIworIyBIYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBLU00gdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2Ugc3VwcG9ydAorIworCityZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PQorYWxyZWFkeV9jaGVja2VkX2tyYjU9bm8KKworZm9yIHNlYyBpbiAkbmV3X3dpdGhfc2VjdXJpdHkKK2RvCisgIGlmIHRlc3QgIngkc2VjIiA9ICJ4a3NtIjsgdGhlbgorICAgIGlmIHRlc3QgInh5ZXMiID0gIngkYWxyZWFkeV9jaGVja2VkX2tyYjUiOyB0aGVuCisgICAgICBjb250aW51ZQorICAgIGVsc2UKKyAgICAgIGFscmVhZHlfY2hlY2tlZF9rcmI1PXllcworICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCB4JHNlYyAhPSB4a3NtOyB0aGVuCisgICAgcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0iJHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkgJHNlYyIKKyAgZWxzZQorICAgIGlmIHRlc3Qgbm8gPSAkdHJ5a3JiNTsgdGhlbgorICAgICAgQUNfTVNHX05PVElDRShbY29uZmlndXJlZCBub3QgdG8gdXNlIGtyYjUuIGRpc2FibGluZyBrc21dKQorICAgICAgY29udGludWUKKyAgICBmaQorCisgICAgQUNfUEFUSF9QUk9HKFtrcmI1X2NvbmZpZ10sa3JiNS1jb25maWcsW25vXSwka3JiNXBhdGgvYmluOiRQQVRIKQorCisgICAgaWYgdGVzdCBubyAhPSAka3JiNV9jb25maWc7IHRoZW4KKyAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgYCRrcmI1X2NvbmZpZyAtLWNmbGFnc2AiCisgICAgICBMSUJTPSIkTElCUyBgJGtyYjVfY29uZmlnIC0tbGlic2AiCisgICAgZWxpZiB0ZXN0ICRrcmI1cGF0aCAhPSBubzsgdGhlbgorICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCRrcmI1cGF0aCkKKyAgICBlbHNlCisgICAgICBBQ19BRERfU0VBUkNIX1BBVEgoL3Vzci9rZXJiZXJvcykKKyAgICBmaQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Iga3JiNV0pCisgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2hhdmVfa3JiNSwKKyAgICAgIEFDX0NIRUNLX0xJQihrcmI1LCBrcmI1X2luaXRfY29udGV4dCwKKwlhY19jdl9oYXZlX2tyYjU9eWVzLCBhY19jdl9oYXZlX2tyYjU9bm8KKyAgICAgICkKKyAgICApCisKKyAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2tyYjUgPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAieCRhc2tlZGtyYjUiID0gInh5ZXMiOyB0aGVuCisJQUNfTVNHX0VSUk9SKEFza2VkIHRvIHVzZSBrcmI1IGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuKQorICAgICAgZmkKKyAgICAgIEFDX01TR19SRVNVTFQobm8uIGRpc2FibGluZyBrc20pCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgICAKKyAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICByZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PSIkcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eSBrc20iCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW1tmb3IgaGVpbWRhbF1dKQorICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9oZWltZGFsLAorICAgIFtBQ19UUllfQ09NUElMRSgKKyAgICAgIFsjaW5jbHVkZSA8a3JiNS5oPl0sCisgICAgICBbY29uc3QgY2hhciAqdiA9IGhlaW1kYWxfdmVyc2lvbjtdLAorICAgICAgYWNfY3ZfaGVpbWRhbD15ZXMsCisgICAgICBhY19jdl9oZWltZGFsPW5vCisgICAgKV0pCisgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGVpbWRhbCkKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWltZGFsID0geWVzOyB0aGVuCisgICAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfS0VSQkVST1NfSEVJTURBTCwgMSwKKyAgICAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSdyZSB1c2luZyBIZWltZGFsIEtlcmJlcm9zXSkKKyAgICAgIGlmIHRlc3Qgbm8gPSAka3JiNV9jb25maWc7IHRoZW4KKwlMSUJTPSIkTElCUyAtbGtyYjUgLWxhc24xIC1sY29tX2VyciAtbHJva2VuIgorICAgICAgZmkKKyAgICBlbGlmIHRlc3Qgbm8gPSAka3JiNV9jb25maWc7IHRoZW4KKwlMSUJTPSIkTElCUyAtbGtyYjUgLWxjb21fZXJyIgorICAgIGZpCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3RvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIG5lZWQgdG8gdXNlXSkKKyAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlULAorICAgICAgQUNfQ0hFQ0tfTElCKGs1Y3J5cHRvLCBrcmI1X2luaXRfY29udGV4dCwKKwlhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ9eWVzLCBhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ9bm8KKyAgICAgICkKKyAgICApCisKKyAgICBpZiB0ZXN0IHllcyA9ICRhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQobmV3IE1JVCBjcnlwdG8gQVBJKQorICAgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0tFUkJFUk9TX01JVCwgMSwKKyAgICAgICAgW0RlZmluZSB0aGlzIGlmIHdlJ3JlIHVzaW5nIHRoZSBuZXcgTUlUIGNyeXB0byBBUEldKQorICAgICAgaWYgdGVzdCBubyA9ICRrcmI1X2NvbmZpZzsgdGhlbgorCUxJQlM9IiRMSUJTIC1sazVjcnlwdG8iCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQob2xkIE1JVCBjcnlwdG8gQVBJKQorICAgIGZpCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW2tyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleV0pCisgIGZpCitkb25lCisKK25ld193aXRoX3NlY3VyaXR5PSRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5CisKKyMKKyMgRGV0ZWN0IGxtX3NlbnNvcnMgdmVyc2lvbgorIworaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2giID0gInh5ZXMiOyB0aGVuCisgICAgQUNfQ0hFQ0tfREVDTFMoW3NlbnNvcnNfZ2V0X2FsbF9zdWJmZWF0dXJlc10sCisgICAgICAgIFtBQ19ERUZJTkUoTkVUU05NUF9VU0VfU0VOU09SU19WMywgMSwKKyAgICAgICAgICAgIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBsbV9zZW5zb3JzIHYzIG9yIGxhdGVyXSldLCwKKyAgICAgICAgW1sjaW5jbHVkZSA8c2Vuc29ycy9zZW5zb3JzLmg+XV0pCitmaQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlcyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzY2E3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMKQEAgLTAsMCArMSw3MCBAQAorIyAtKi0gc2ggLSotCitzZWN1cml0eV9kZWZfbGlzdD0idXNtIgorc2VjdXJpdHlfc3JjX2xpc3Q9IiIKK3NlY3VyaXR5X29ial9saXN0PSIiCitzZWN1cml0eV9sb2JqX2xpc3Q9IiIKK3NlY3VyaXR5X2Z0b2JqX2xpc3Q9IiIKK3NlY3VyaXR5X21vZF9saXN0PSIgIgorCituZXdfd2l0aF9zZWN1cml0eT0KK25ld193aXRoX291dF9zZWN1cml0eT1gZWNobyAkd2l0aF9vdXRfc2VjdXJpdHlfbW9kdWxlcyB8IHRyICwgJyAnYAorCisjIEFzc2lnbiBhZGRpdGlvbmFsIHNlY3VyaXR5IG1vZHVsZXMKK2ZvciBpIGluIGBlY2hvICR3aXRoX3NlY3VyaXR5X21vZHVsZXMgfCB0ciAsICcgJ2A7IGRvCisgIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3NlY3VyaXR5ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICBlY2hvCisgICAgQUNfTVNHX0VSUk9SKFtzZWN1cml0eSBtb2R1bGUgY29uZmxpY3QgLSAkaSBib3RoIGluY2x1ZGVkIGFuZCBleGNsdWRlZF0pCisgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9zZWN1cml0eSAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsIDsgdGhlbgorICAgIDogIyBEb3VibGUgZGVmaW5lLCBpZ25vcmUKKyAgZWxzZQorICAgIG5ld193aXRoX3NlY3VyaXR5PSIkbmV3X3dpdGhfc2VjdXJpdHkgJGkiCisgIGZpCitkb25lCisKKyMgQWRkIGRlZmF1bHQgc2VjdXJpdHkgbW9kdWxlcworZm9yIGkgaW4gJHNlY3VyaXR5X2RlZl9saXN0OyBkbworICBpZiBlY2hvICIgJG5ld193aXRoX291dF9zZWN1cml0eSAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgOiAjIEV4Y2x1ZGVkLCBpZ25vcmUKKyAgZWxpZiBlY2hvICIgJG5ld193aXRoX3NlY3VyaXR5ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgOiAjIERvdWJsZSBkZWZpbmUsIGlnbm9yZQorICBlbHNlCisgICAgbmV3X3dpdGhfc2VjdXJpdHk9IiRuZXdfd2l0aF9zZWN1cml0eSAkaSIKKyAgZmkKK2RvbmUKKworIyBHZW5lcmF0ZSBvdXRwdXQgZmlsZXMKKzogJHtzZWN1cml0eV9pbml0X2ZpbGU6PSdzbm1wbGliL3NubXBzbV9pbml0LmgnfQorOiAke3NlY3VyaXR5X3NodXRkb3duX2ZpbGU6PSdzbm1wbGliL3NubXBzbV9zaHV0ZG93bi5oJ30KKzogJHtzZWN1cml0eV9pbmNsX2ZpbGU6PSdpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgnfQorCitlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfaW5pdF9maWxlCitlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfc2h1dGRvd25fZmlsZQorZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X2luY2xfZmlsZQorCitmb3IgaSBpbiAkbmV3X3dpdGhfc2VjdXJpdHk7IGRvCisgIGNmaWxlPSJzbm1wIiRpIi5jIgorICBoZmlsZT0ic25tcCIkaSIuaCIKKworICAjIG1ha2Ugc3VyZSBzdXBwb3J0IGV4aXN0cyBmb3IgaXQKKyAgaWYgdGVzdCAtZiAkc3JjZGlyIi9zbm1wbGliLyIkY2ZpbGUgLWEgLWYgJHNyY2RpciIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5LyIkaGZpbGU7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICBlY2hvCisgICAgQUNfTVNHX0VSUk9SKE5vIHN1Y2ggc2VjdXJpdHkgbW9kdWxlOiAkaSAvICRjZmlsZSAvICRoZmlsZSkKKyAgZmkKKworICAjIGRlZmluZSBhIGJ1bmNoIG9mIHN0dWZmIHRvIGVuYWJsZSBpdAorICBzZWN1cml0eV9tb2RfbGlzdD0iJHtzZWN1cml0eV9tb2RfbGlzdH0gJGkiCisgIHNlY3VyaXR5X3NyY19saXN0PSIkc2VjdXJpdHlfc3JjX2xpc3QgJGNmaWxlIgorICBzZWN1cml0eV9zcmNfbGlzdD0iJHNlY3VyaXR5X3NyY19saXN0ICRjZmlsZSIKKyAgc2VjdXJpdHlfaGRyX2xpc3Q9IiRzZWN1cml0eV9oZHJfbGlzdCAkaGZpbGUiCisgIHNlY3VyaXR5X29ial9saXN0PSIkc2VjdXJpdHlfb2JqX2xpc3Qgc25tcCIkaSIubyIKKyAgc2VjdXJpdHlfbG9ial9saXN0PSIkc2VjdXJpdHlfbG9ial9saXN0IHNubXAiJGkiLmxvIgorICBzZWN1cml0eV9mdG9ial9saXN0PSIkc2VjdXJpdHlfZnRvYmpfbGlzdCBzbm1wIiRpIi5mdCIKKyAgZWNobyAiaW5pdF8iJGkiKCk7IiA+PiAkc2VjdXJpdHlfaW5pdF9maWxlCisgIGVjaG8gInNodXRkb3duXyIkaSIoKTsiID4+ICRzZWN1cml0eV9zaHV0ZG93bl9maWxlCisgIGVjaG8gIiNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5LyRoZmlsZT4iID4+ICRzZWN1cml0eV9pbmNsX2ZpbGUKKyAgZGVmX25hbWU9IkFTX1RSX0NQUChbTkVUU05NUF9TRUNNT0RfJGldKSIKKyAgQUNfREVGSU5FX1VOUVVPVEVEKCRkZWZfbmFtZSkKK2RvbmUKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwYjk2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMKQEAgLTAsMCArMSwxMzcgQEAKKyMgLSotIHNoIC0qLQordHJhbnNwb3J0X3NyY19saXN0PSIiCit0cmFuc3BvcnRfaGRyX2xpc3Q9IiIKK3RyYW5zcG9ydF9kZWZfbGlzdD0iIgordHJhbnNwb3J0X3Jlc3VsdF9saXN0PSIiCit0cmFuc3BvcnRfYWRkX2xpc3Q9IiIKK25ld193aXRoX3RyYW5zcG9ydF9saXN0PWBlY2hvICR3aXRoX3RyYW5zcG9ydHMgfCAkU0VEICdzLywvIC9nOydgCituZXdfd2l0aF9vdXRfdHJhbnNwb3J0X2xpc3Q9YGVjaG8gJHdpdGhfb3V0X3RyYW5zcG9ydHMgfCAkU0VEICdzLywvIC9nOydgCisKKyMgc2V0IHVwIHRoZSBDUFAgY29tbWFuZAorTU9EVUxFQ1BQPSIkQ1BQICRQQVJUSUFMVEFSR0VURkxBR1MgLUkke3NyY2Rpcn0gLUkke3NyY2Rpcn0vaW5jbHVkZSIKKworIworIyBBZGQgdGhlIGRlZmF1bHQgdHJhbnNwb3J0cyB0byB0aGUgbGlzdAorIworaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4gCisgIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgQWxpYXMgQ2FsbGJhY2siCitlbHNlCisgIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgQWxpYXMgVW5peCBDYWxsYmFjayIKK2ZpCitpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgorICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFBJUHY2IFRDUElQdjYgJHRyYW5zcG9ydF9kZWZhdWx0X2xpc3QiCitmaQorZm9yIGkgaW4gJHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q7IGRvCisgIGlmIGVjaG8gIiAkbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3QgIiB8ICRHUkVQICIgJGkgIiA+L2Rldi9udWxsOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgdHJhbnNwb3J0X2FkZF9saXN0PSIkaSAkdHJhbnNwb3J0X2FkZF9saXN0IgorICBmaQorZG9uZQorbmV3X3RyYW5zcG9ydF9saXN0PSIkdHJhbnNwb3J0X2FkZF9saXN0ICRuZXdfd2l0aF90cmFuc3BvcnRfbGlzdCIKKworaWYgdGVzdCAieCRjdG9yX2hlYWRlciIgPSAieCIgOyB0aGVuCisgICBjdG9yX2hlYWRlcj0ic25tcGxpYi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmgiCitmaQorCitlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkY3Rvcl9oZWFkZXIKK3doaWxlIHRlc3QgIngkbmV3X3RyYW5zcG9ydF9saXN0IiAhPSAieCI7IGRvCisgIGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3Q9IiIKKyAgZm9yIGkgaW4gJG5ld190cmFuc3BvcnRfbGlzdDsgZG8KKyAgICBpZiBlY2hvICIgJG5ld193aXRoX291dF90cmFuc3BvcnRfbGlzdCAiIHwgJEdSRVAgIiAkaSAiID4vZGV2L251bGw7IHRoZW4KKyAgICAgIHRydWUKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICJ4JGkiID0gInhVRFBJUHY2IiAtbyAieCRpIiA9ICJ4VENQSVB2NiI7IHRoZW4KKyAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKElQdjYgdHJhbnNwb3J0cyBub3QgYXZhaWxhYmxlIGlmIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCkKKyAgICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIHRyYW5zcG9ydF9zcmM9InRyYW5zcG9ydHMvc25tcCIkaSJEb21haW4uYyIKKyAgICAgIHRyYW5zcG9ydF9oZHI9InNubXAiJGkiRG9tYWluLmgiCisgICAgICByZWxfdHJhbnNwb3J0X3NyYz0ic25tcGxpYi8iJHRyYW5zcG9ydF9zcmMKKyAgICAgIHJlbF90cmFuc3BvcnRfaGRyPSJpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvIiR0cmFuc3BvcnRfaGRyCisgICAgICBsY19pPWBlY2hvICRpIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorICAgICAgY3Rvcl9mbj0ibmV0c25tcF8iJGxjX2kiX2N0b3IiCisgICAgICBpZiB0ZXN0IC1mICIkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyI7IHRoZW4KKyAgICAgICAgdHJhbnNwb3J0X3Jlc3VsdF9saXN0PSIkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICRpIgorICAgICAgICB0cmFuc3BvcnRfc3JjX2xpc3Q9IiR0cmFuc3BvcnRfc3JjICR0cmFuc3BvcnRfc3JjX2xpc3QiCisgICAgICAgIGlmIHRlc3QgLWYgIiRzcmNkaXIvJHJlbF90cmFuc3BvcnRfaGRyIjsgdGhlbgorICAgICAgICAgIHRyYW5zcG9ydF9oZHJfbGlzdD0iJHRyYW5zcG9ydF9oZHIgJHRyYW5zcG9ydF9oZHJfbGlzdCIKKyAgICAgICAgZmkKKyAgICAgICAgdHJhbnNwb3J0X2RlZj1gZWNobyAkaSB8ICRTRUQgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKKyAgICAgICAgdHJhbnNwb3J0X2RlZl9saXN0PSJORVRTTk1QX1RSQU5TUE9SVF8iJHRyYW5zcG9ydF9kZWYiX0RPTUFJTiAkdHJhbnNwb3J0X2RlZl9saXN0IgorICAgICAgZWxzZQorICAgICAgICBlY2hvCisgICAgICAgIEFDX01TR19FUlJPUihDYW5ub3QgZmluZCBmaWxlICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIHRvIHN1cHBvcnQgU05NUCB0cmFuc3BvcnQgZG9tYWluICRpLikKKyAgICAgIGZpCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgYnVpbGQgYSBwc2V1ZG8gaW5jbHVkZSBoZWFkZXIgdGhhdCBpbmNsdWRlcyBjdXJyZW50IGNvbmZpZyBhbmQKKyAgICAgICMgc3lzdGVtIHN5bWJvbHM6CisgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKKyAgICAgIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSBORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUKKyN1bmRlZiBORVRTTk1QX01JTklNQUxfQ09ERQorI2RlZmluZSBORVRfU05NUF9DT05GSUdfSAorI3VuZGVmIGNvbmZpZ19yZXF1aXJlCisjZGVmaW5lIGNvbmZpZ19yZXF1aXJlKGZvbykgY29uZmlnX2NoZWNraXRfcmVxdWlyZShmb28pCisjdW5kZWYgY29uZmlnX2Vycm9yCisjZGVmaW5lIGNvbmZpZ19lcnJvcihmb28pIGNvbmZpZ19jaGVja2l0X2Vycm9yKGZvbykKKyNpbmNsdWRlICIkcmVsX3RyYW5zcG9ydF9oZHIiXV0pXSkKKyAgICAgIG12IGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAorCisgICAgICAjCisgICAgICAjIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMgdXNpbmcgY29uZmlnX3JlcXVpcmUoKSBtYWNybworICAgICAgIworICAgICAgc3ViX2xpc3Q9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8ICRHUkVQIGNvbmZpZ19jaGVja2l0X3JlcXVpcmUgfCAkU0VEICdzLy4qY29uZmlnX2NoZWNraXRfcmVxdWlyZSAqKCAqXCguKlwpICopLiovXDEvJ2AKKyAgICAgIGlmIHRlc3QgIngkc3ViX2xpc3QiICE9ICJ4IiA7IHRoZW4KKyAgICAgICAgZm9yIGogaW4gJHN1Yl9saXN0IDsgZG8KKwkgIGlmIGVjaG8gIiAkZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdCAkbmV3X3RyYW5zcG9ydF9saXN0ICIgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGwgOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKyAgICAgICAgICAgIGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3Q9IiRmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0ICRqIgorCSAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZmkKKworICAgICAgIworICAgICAgIyBjaGVjayBmb3IgZXJyb3JzIHVzaW5nIGNvbmZpZ19lcnJvcigpIG1hY3JvCisgICAgICAjCisgICAgICBlcnJvcl9saXN0PWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCAkR1JFUCBjb25maWdfY2hlY2tpdF9lcnJvciB8ICRTRUQgJ3MvLipjb25maWdfY2hlY2tpdF9lcnJvcihcKC4qXCkpLiovXDEvZydgCisgICAgICBpZiB0ZXN0ICJ4JGVycm9yX2xpc3QiICE9ICJ4IiA7IHRoZW4KKyAgICAgICAgZWNobyAiIgorICAgICAgICBBQ19NU0dfRVJST1IoJGVycm9yX2xpc3QpCisgICAgICBmaQorCisgICAgICAjCisgICAgICAjIENoZWNrIGZvciBuZWVkZWQgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgdG8gY2FsbAorICAgICAgIworICAgICAgZm91bmQ9YGdyZXAgJGN0b3JfZm4gJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmNgCisgICAgICBpZiBncmVwICRjdG9yX2ZuICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjID4gL2Rldi9udWxsIDsgdGhlbgorCSMgd2UgYWRkIHRoZW0gZG93biBiZWxvdyBpbnN0ZWFkIG9mIGhlcmUgdG8gbWFrZSBzdXJlCisJIyBjb25maWdfcmVxdWlyZSBkZXBlbmRlbmN5IGNvbnN0cnVjdG9ycyBnZXQgY2FsbGVkIGZpcnN0LgorCXRyX2luaXRfbGlzdD0iJGN0b3JfZm4gJHRyX2luaXRfbGlzdCIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZSAjIGZvciBlYWNoIG5ldyB0cmFuc3BvcnQKKyAgbmV3X3RyYW5zcG9ydF9saXN0PSIkZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdCIKK2RvbmUgIyB3aGlsZSBuZXcgdHJhbnNwb3J0cyBleGlzdAordHJhbnNwb3J0X29ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgJFNFRCAncy9cLmMvXC5vL2cnYAordHJhbnNwb3J0X2xvYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8ICRTRUQgJ3MvXC5jL1wubG8vZydgCit0cmFuc3BvcnRfZnRvYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8ICRTRUQgJ3MvXC5jL1wuZnQvZydgCitmb3IgaSBpbiAkdHJfaW5pdF9saXN0IDsgZG8KKyAgIGVjaG8gIiRpKCk7IiA+PiAkY3Rvcl9oZWFkZXIKK2RvbmUKKworIyMgd2luMzIgcGxhdGZvcm1zIHJlcXVpcmUgaW5ldF9udG9wIGV0Yy4KK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KKyAgaWYgZWNobyAiJHRyYW5zcG9ydF9kZWZfbGlzdCIgfCAkR1JFUCAiSVBWNiIgPi9kZXYvbnVsbDsgdGhlbgorICAgIHRyYW5zcG9ydF9vYmpfbGlzdD0iJHRyYW5zcG9ydF9vYmpfbGlzdCBpbmV0X250b3AubyBpbmV0X3B0b24ubyIKKyAgICB0cmFuc3BvcnRfbG9ial9saXN0PSIkdHJhbnNwb3J0X2xvYmpfbGlzdCBpbmV0X250b3AubG8gaW5ldF9wdG9uLmxvIgorICAgIHRyYW5zcG9ydF9mdG9ial9saXN0PSIkdHJhbnNwb3J0X2Z0b2JqX2xpc3QgaW5ldF9udG9wLmZ0IGluZXRfcHRvbi5mdCIKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkdHJhbnNwb3J0X3Jlc3VsdF9saXN0IiA9IHggOyB0aGVuCisgICBBQ19NU0dfRVJST1IoW05vIHRyYW5zcG9ydHMgY29uZmlndXJlZCwgYXQgbGVhc3Qgb25lIG11c3QgYmUgcHJvdmlkZWRdKQorZmkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMgYi9jb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNTM4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zCkBAIC0wLDAgKzEsMzI0IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3RhbmRhcmQgY2hlY2tzOgorIyMKK0FDX0ZVTkNfQUxMT0NBICAgICAgICAgICMgIGFsbG9jYSgpCitBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAtYSAiJHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nK3NldH0iICE9IHNldAordGhlbgorICAjIENyb3NzLWNvbXBpbGluZyBhbmQgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyBoYXMgbm90IGJlZW4gc2V0IC0gYXNzdW1lCisgICMgdGhhdCBtZW1jbXAoKSBpcyBhdmFpbGFibGUuCisgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzCitlbHNlCisgICMgTmF0aXZlIGNvbXBpbGF0aW9uIC0gdGVzdCBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBtZW1jbXAoKS4KKyAgQUNfRlVOQ19NRU1DTVAKK2ZpCisKK0FDX1RZUEVfU0lHTkFMCisKKyMjCisjICAgU3RhbmQtYWxvbmUgZnVuY3Rpb24gY2hlY2tzOgorIyMKKyMgIENvcmU6CitBQ19DSEVDS19GVU5DUyhbbHJhbmQ0OCAgICAgICAgIHJhbmQgICAgICAgICAgcmFuZG9tICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2lnbmFsICAgICAgICAgIHNpZ3NldCAgICAgICAgICAgICAgICAgIF0gKQorCisjICBMaWJyYXJ5OgorQUNfQ0hFQ0tfRlVOQ1MoW2Nsb3NlZGlyICAgICAgICBmZ2V0Y191bmxvY2tlZCAgZmxvY2tmaWxlICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW2ZvcmsgICAgICAgICAgICBmdW5sb2NrZmlsZSAgICAgZ2V0aXBub2RlYnluYW1lICBdIGRubAorICAgICAgICAgICAgICAgW2dldHRpbWVvZmRheSAgICBpZl9uYW1ldG9pbmRleCAgbWtzdGVtcCAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW29wZW5kaXIgICAgICAgICByZWFkZGlyICAgICAgICAgcmVnY29tcCAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3NldGVudiAgICAgICAgICBzZXRpdGltZXIgICAgICAgc2V0bG9jYWxlICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3NldHNpZCAgICAgICAgICBzbnByaW50ZiAgICAgICAgc3RyY2FzZXN0ciAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3N0cmR1cCAgICAgICAgICBzdHJlcnJvciAgICAgICAgc3RybmNhc2VjbXAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3N5c2NvbmYgICAgICAgICB0aW1lcyAgICAgICAgICAgdnNucHJpbnRmICAgICAgICBdICkKKworIyBJUHY0L0lQdjYgZnVuY3Rpb24gY2hlY2tzLiBBQ19DSEVDS19GVU5DKCkgY2FuJ3QgZmluZCB0aGVzZSBvbiBNaW5HVworIyBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgaGF2ZSB0aGUgX19jZGVjbCBjYWxsaW5nIGNvbnZlbnRpb24gb24gTWluR1cuCitjYXNlIHgkdGFyZ2V0X29zIGluCisgIHhtaW5ndyopCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHdzMnRjcGlwLmg+XSwKKyAgICBbIGdhaV9zdHJlcnJvcigwKTsgXSldLAorICAgIFsgYWNfY3ZfZnVuY19nYWlfc3RyZXJyb3I9eWVzCisgICAgICBBU19FQ0hPICIjZGVmaW5lIEhBVkVfR0FJX1NUUkVSUk9SIDEiID4+Y29uZmRlZnMuaAorICAgIF0sIFsgXSkKKworICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDx3czJ0Y3BpcC5oPl0sCisgICAgWyBnZXRhZGRyaW5mbyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsgXSldLAorICAgIFsgYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXMKKyAgICAgIEFTX0VDSE8gIiNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAxIiA+PmNvbmZkZWZzLmgKKyAgICBdLCBbIF0pCisKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8d2luc29jazIuaD5dLAorICAgIFsgZ2V0aG9zdGJ5bmFtZShOVUxMKTsgXSldLAorICAgIFsgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPXllcworICAgICAgQVNfRUNITyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMSIgPj5jb25mZGVmcy5oCisgICAgXSwgWyBdKQorCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHdpbnNvY2syLmg+XSwKKyAgICBbIGdldGhvc3RieWFkZHIoTlVMTCk7IF0pXSwKKyAgICBbIGFjX2N2X2Z1bmNfZ2V0aG9zdGFkZHI9eWVzCisgICAgICBBU19FQ0hPICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxIiA+PmNvbmZkZWZzLmgKKyAgICBdLCBbIF0pCisKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8d2luc29jazIuaD5dLAorICAgIFsgZ2V0aG9zdG5hbWUoTlVMTCwgMCk7IF0pXSwKKyAgICBbIGFjX2N2X2Z1bmNfZ2V0aG9zdG5hbWU9eWVzCisgICAgICBBU19FQ0hPICIjZGVmaW5lIEhBVkVfR0VUSE9TVE5BTUUgMSIgPj5jb25mZGVmcy5oCisgICAgXSwgWyBdKQorICAgIDs7CisKKyAgKikKKyAgICBBQ19DSEVDS19GVU5DUyhbZ2FpX3N0cmVycm9yIGdldGFkZHJpbmZvIGdldGhvc3RieW5hbWUgZ2V0aG9zdGJ5bmFtZTIgZ2V0aG9zdG5hbWUgZ2V0aG9zdGJ5YWRkcl0pCisgICAgOzsKK2VzYWMKKworQUNfQ09ORklHX0xJQk9CSl9ESVIoW3NubXBsaWJdKQorCitBQ19SRVBMQUNFX0ZVTkNTKFtnZXRvcHQgICAgICAgIGluZXRfbnRvcCAgICAgaW5ldF9wdG9uICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3RybGNhdCAgICAgICBzdHJsY3B5ICAgICAgIHN0cnRva19yICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N0cnRvbCAgICAgICAgc3RydG91bCAgICAgICBzdHJ0b3VsbCAgICAgICAgIF0gKQorCisjICBBZ2VudDoKK0FDX0NIRUNLX0ZVTkNTKFtjZ2V0bmV4dCAgICAgICAgY2hvd24gICAgICAgICAgZXhlY3YgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbZ2FpX3N0cmVycm9yICAgICAgICAgICAgICAgICAgIGdldGdybmFtICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW2dldGhvc3RuYW1lICAgICBnZXRsb2FkYXZnICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtnZXRwaWQgICAgICAgICAgZ2V0cHduYW0gICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbaGFzbW50b3B0ICAgICAgIGluaXRncm91cHMgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW2lmX25hbWVpbmRleCAgICBpZl9pbmRleHRvbmFtZSBpZl9uYW1ldG9pbmRleCAgXSBkbmwKKyAgICAgICAgICAgICAgIFtsb2NhbHRpbWVfciAgICAgbWtzdGVtcCAgICAgICAgbWt0aW1lICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbcG9sbCAgICAgICAgICAgIHJlZ2NvbXAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3NldGdpZCAgICAgICAgICBzZXRncm91cHMgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzZXRtbnRlbnQgICAgICAgc2V0dWlkICAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2lnYWN0aW9uICAgICAgIHNpZ2Jsb2NrICAgICAgc2lnaG9sZCAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3NpZ3Byb2NtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzdGF0ZnMgICAgICAgICAgc3RhdHZmcyAgICAgICBzdGltZSAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc3RybmNhc2VjbXAgICAgIHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3VuYW1lICAgICAgICAgICB1c2xlZXAgICAgICAgICAgICAgICAgICAgICAgICAgXSApCisKKyMgIEFwcHM6CitBQ19DSEVDS19GVU5DUyhbZ2V0ZHRhYmxlc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW2dldGdybmFtICAgICAgICBnZXRwaWQgICAgICAgIGdldHB3bmFtICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzZXRnaWQgICAgICAgICAgc2V0Z3JvdXBzICAgICBzZXR1aWQgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbdGNnZXRhdHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICkKKworIyAgTm90LVVzZWQ6CitBQ19DSEVDS19GVU5DUyhbaWZfZnJlZW5hbWVpbmRleCAgICAgICAgICAgICAgZ2V0cGFnZXNpemUgICAgICBdIGRubAorICAgICAgICAgICAgICAgW2xzZWVrNjQgICAgICAgICBwcmVhZDY0ICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzZWxlY3QgICAgICAgICAgc2lnYWxybSAgICAgICBzb2NrZXQgICAgICAgICAgIF0gKQorCisKKyMjCisjICAgTW9yZSBjb21wbGV4IGZ1bmN0aW9uIGNoZWNrczoKKyMgICAgICAgICAgIChBZ2VudCkKKyMjCisKKyMgICAgICAgcnBtR2V0UGF0aCBjaGVjayBuZWVkcyBjbGVhbiBMSUJTIGVudmlyb25tZW50ICAgKExpbnV4KQorIworaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyI7IHRoZW4KKyAgICBPTERMSUJTPSRMSUJTCisgICAgTElCUz0kTE1JQkxJQlMKKyAgICBBQ19DSEVDS19GVU5DUyhycG1HZXRQYXRoKQorICAgIExJQlM9JE9MRExJQlMKK2ZpCisKKyMgICAgICAgc3RhdGZzKCBjaGFyICosIHN0cnVjdCBmc19kYXRhKiApICAgICAgICAgICAgICAgKFVsdHJpeCkKKyMKK0FDX01TR19DSEVDS0lORyhbW2ZvciB0d28tYXJndW1lbnQgc3RhdGZzIHdpdGggc3RydWN0IGZzX2RhdGEgKFVsdHJpeCldXSkKK0FDX0NBQ0hFX1ZBTCgKKyAgICBmdV9jdl9zeXNfc3RhdF9mc19kYXRhLAorICAgIFtBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0ZTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvZnNfdHlwZXMuaD4KKyNlbmRpZgorbWFpbiAoKQoreworc3RydWN0IGZzX2RhdGEgZnNkOworLyogVWx0cml4J3Mgc3RhdGZzIHJldHVybnMgMSBmb3Igc3VjY2VzcywKKyAgIDAgZm9yIG5vdCBtb3VudGVkLCAtMSBmb3IgZmFpbHVyZS4gICovCitleGl0IChzdGF0ZnMgKCIuIiwgJmZzZCkgIT0gMSk7Cit9XV0pXSwKKyAgICBbZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT15ZXNdLAorICAgIFtmdV9jdl9zeXNfc3RhdF9mc19kYXRhPW5vXSwKKyAgICBbZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT1ub10pXSkKK0FDX01TR19SRVNVTFQoJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEpCitpZiB0ZXN0ICRmdV9jdl9zeXNfc3RhdF9mc19kYXRhID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFNUQVRfU1RBVEZTX0ZTX0RBVEEsIDEsCisgICAgICAgIFtEZWZpbmUgaWYgc3RhdGZzIHRha2VzIDIgYXJncyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBoYXMKKyAgICAgICAgIHR5cGUgc3RydWN0IGZzX2RhdGEuIEA8OkBVbHRyaXhAOj5AXSkKK2ZpCisKKworIyMKKyMgICBPdGhlciBmdW5jdGlvbi1yZWxhdGVkIGNoZWNrczoKKyMgICAgICAgICAgIChnZW5lcmFsIGJ1aWxkKQorIyMKKworIyAgICAgICBIb3cgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uCisjCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbl0sCisgICAgICAgICAgICAgICBbbmV0c25tcF9jdl9fZnVuY19fbmFtZV0sWworICAgIG5ldHNubXBfY3ZfX2Z1bmNfX25hbWU9bm8KKyAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgsW1tjb25zdCBjaGFyKiBjcCA9IF9fZnVuY19fO11dKV0sCisgICAgICAgIFtuZXRzbm1wX2N2X19mdW5jX19uYW1lPV9fZnVuY19fXSkKKyAgICBpZiB0ZXN0ICIkbmV0c25tcF9jdl9fZnVuY19fbmFtZSIgPSBubyA7IHRoZW4KKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKCxbW2NvbnN0IGNoYXIqIGNwID0gX19GVU5DVElPTl9fO11dKV0sCisgICAgICAgIFtuZXRzbm1wX2N2X19mdW5jX19uYW1lPV9fRlVOQ1RJT05fX10pCisgICAgZmldKQoraWYgdGVzdCAiJG5ldHNubXBfY3ZfX2Z1bmNfX25hbWUiICE9IG5vOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtORVRTTk1QX0ZVTkNUSU9OXSxbJG5ldHNubXBfY3ZfX2Z1bmNfX25hbWVdLAorICAgICAgICBbU2hvdWxkIGV2YWx1YXRlIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlmIGRlZmluZWRdKQorZmkKKworCisjICAgICAgIFdoZXRoZXIgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAgICAgIChTQ08gVW5peHdhcmUpCisjCitBQ19DQUNIRV9DSEVDSyhbW3doZXRoZXIgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAoVW5peHdhcmUpXV0sCisgICAgICAgICAgICAgICAgW25ldHNubXBfY3ZfY19icm9rZW5faW5saW5lXSwKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoWworc3RhdGljIGlubGluZSBpbnQgbmVzdGVkX2lubGluZV9mdW5jdGlvbih2b2lkKSB7CisgIHJldHVybiAwOworfQoraW5saW5lIGludCBtYWluX2lubGluZV9mdW5jdGlvbiggdm9pZCApIHsKKyAgcmV0dXJuIG5lc3RlZF9pbmxpbmVfZnVuY3Rpb24oKTsKK30KKyAgICBdKV0sCisgICAgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPW5vLAorICAgIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT15ZXMpKQorCisKKyMgICAgICAgWWVzIC0gIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gICAgICAgKFNvbGFyaXMgMi54KQorIworY2FzZSAiJHRhcmdldF9vcyIgaW4KKyAgICBzb2xhcmlzKikKKyAgICAgICAgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPXllcworICAgICAgICA7OworICAgICopCisgICAgICAgIDs7Citlc2FjCisKK2lmIHRlc3QgIiRuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmUiID0geWVzIDsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9CUk9LRU5fSU5MSU5FLCAxLAorICAgICAgICBbRGVmaW5lIGlmIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSB1bnN1cHBvcnRlZF0pCitmaQorCisKKyMjCisjICAgTWlzLXBsYWNlZCAobm9uLWZ1bmN0aW9uKSBjaGVja3M6CisjIworCitBQ19DQUNIRV9DSEVDSyhbZm9yIFNJT0NHSUZBRERSIGluIHN5cy9pb2N0bC5oXSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSLAorICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZuZGVmIFNJT0NHSUZBRERSCitObyBTSU9DR0lGQUREUiBmb3VuZCBoZXJlLgorI2VuZGlmCisgICAgICAgIF1dKV0sCisgICAgW25ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSPXllc10sCisgICAgW25ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSPW5vXSkpCitpZiB0ZXN0ICRuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSLCAxLAorICAgW2RlZmluZSBpZiBTSU9DR0lGQUREUiBleGlzdHMgaW4gc3lzL2lvY3RsLmhdKQorZmkKKworIyMKKyMgICBDaGVjayBob3cgdG8gcHJpbnQgYSBzaXplX3QgdmFyaWFibGUKKyMjCisKK0FDX0NBQ0hFX0NIRUNLKAorICAgIFt0aGUgdW5kZXJseWluZyB0eXBlIG9mIGEgc2l6ZV90XSwKKyAgICBuZXRzbm1wX2N2X3NpemVfdF90eXBlLAorICAgIFttNF9mb3JlYWNoKFtUWVBFXSwgW1tpbnRdLFtsb25nXSxbbG9uZyBsb25nXSxbc2hvcnRdLFtjaGFyXV0sCisgICAgIFtpZiBbWyB4JG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUgPSB4IF1dIDsgdGhlbgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisJICAgICBbQUNfTEFOR19QUk9HUkFNKAorW0FDX0lOQ0xVREVTX0RFRkFVTFQoKQorZXh0ZXJuIHVuc2lnbmVkIFRZUEUgdmFyaWFibGU7CitleHRlcm4gc2l6ZV90IHZhcmlhYmxlO10sCisgICAgICAgICAgICAgICAgIFtdKV0sCisgICAgICAgICAgICAgW25ldHNubXBfY3Zfc2l6ZV90X3R5cGU9IlRZUEUiXSkKKyAgICAgZmkKKyAgICBdKV0pCisKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50ZiBhIHNpemVfdF0pCitjYXNlICIkbmV0c25tcF9jdl9zaXplX3RfdHlwZSIgaW4KKyAgICBjaGFyfHNob3J0fGludCkgbmV0c25tcF9QUkl6PSIiIDs7CisgICAgbG9uZykgbmV0c25tcF9QUkl6PSJsIiA7OworICAgICJsb25nIGxvbmciKSBuZXRzbm1wX1BSSXo9ImxsIiA7OworICAgICopIEFDX01TR19FUlJPUihbdW5kZXJseWluZyB0eXBlIG9mIHNpemVfdCBub3Qga25vd25dKSA7OworZXNhYworQUNfTVNHX1JFU1VMVCgkbmV0c25tcF9QUkl6KQorQUNfREVGSU5FX1VOUVVPVEVEKFtORVRTTk1QX1BSSXpdLCBbIiRuZXRzbm1wX1BSSXoiXSwKKyAgICAgICAgICAgICAgICAgICBbU2l6ZSBwcmVmaXggdG8gdXNlIHRvIHByaW50ZiBhIHNpemVfdCBvciBzc2l6ZV90XSkKKworIyMKKyMgICBDaGVjayBob3cgdG8gcHJpbnQgYSB1aW50MzJfdCB2YXJpYWJsZQorIyMKKworQUNfQ0FDSEVfQ0hFQ0soCisgICAgW3RoZSB1bmRlcmx5aW5nIHR5cGUgb2YgYW4gdWludDMyX3RdLAorICAgIG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSwKKyAgICBbbTRfZm9yZWFjaChbVFlQRV0sIFtbY2hhcl0sW3Nob3J0XSxbaW50XSxbbG9uZ10sW2xvbmcgbG9uZ11dLAorICAgICBbaWYgW1sgeCRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUgPSB4IF1dIDsgdGhlbgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisJICAgICBbQUNfTEFOR19QUk9HUkFNKAorW0FDX0lOQ0xVREVTX0RFRkFVTFQoKQorZXh0ZXJuIHVuc2lnbmVkIFRZUEUgdmFyaWFibGU7CitleHRlcm4gdWludDMyX3QgdmFyaWFibGU7XSwKKyAgICAgICAgICAgICAgICAgW10pXSwKKyAgICAgICAgICAgICBbbmV0c25tcF9jdl91aW50MzJfdF90eXBlPSJUWVBFIl0pCisgICAgIGZpCisgICAgXSldKQorCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludGYgYSB1aW50MzJfdF0pCitjYXNlICIkbmV0c25tcF9jdl91aW50MzJfdF90eXBlIiBpbgorICAgIGNoYXJ8c2hvcnR8aW50KSBuZXRzbm1wX1BSSTMyPSIiIDs7CisgICAgbG9uZykgbmV0c25tcF9QUkkzMj0ibCIgOzsKKyAgICAibG9uZyBsb25nIikgbmV0c25tcF9QUkkzMj0ibGwiIDs7CisgICAgKikgQUNfTVNHX0VSUk9SKFt1bmRlcmx5aW5nIHR5cGUgb2YgdWludDMyX3Qgbm90IGtub3duXSkgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoJG5ldHNubXBfUFJJMzIpCitBQ19ERUZJTkVfVU5RVU9URUQoW05FVFNOTVBfUFJJMzJdLCBbIiRuZXRzbm1wX1BSSTMyIl0sCisgICAgICAgICAgICAgICAgICAgW1NpemUgcHJlZml4IHRvIHVzZSB0byBwcmludGYgYSB1aW50MzJfdF0pCisKKyMgY2hlY2sgdG8gc2VlIGlmIHRoZSBvcGVuc3NsIGlzIGdvb2QgZW5vdWdoIGZvciBEVExTCisjIChCSU9fZGdyYW1fZ2V0X3BlZXIgaXMgYSBtYWNybywgbm90IGEgdHJ1ZSBmdW5jdGlvbikKK2lmIGVjaG8gIiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICIgfCAkR1JFUCAiRFRMUyIgPiAvZGV2L251bGw7IHRoZW4KKyAgICBBQ19DQUNIRV9WQUwoCisgICAgICAgbmV0c25tcF9jdl9iaW9fZGdyYW1fZ2V0X3BlZXIsCisgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtbZm9yIEJJT19kZ3JhbV9nZXRfcGVlcl1dKQorICAgICAgIFsKKyAgICAgICAgb2xkTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRMSUJTIC1sY3J5cHRvIgorICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgW1sjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD5dXSwKKyAgICAgICAgICAgIFtbQklPX2RncmFtX2dldF9wZWVyKE5VTEwsIE5VTEwpO11dKV0sIFtdLAorICAgICAgICAgIFtBQ19NU0dfRVJST1IoRFRMUyBzdXBwb3J0IHJlcXVpcmVzIGEgbmV3ZXIgdmVyc2lvbiBvZiBPcGVuU1NMKV0pCisKKyAgICAgICAgTElCUz0iJG9sZExJQlMiCisgICAgICAgXQorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICkKK2ZpCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzIGIvY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4YWEwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzCkBAIC0wLDAgKzEsNTg4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTdGFuZGFyZCBjaGVja3M6CisjIworIyAgQ29yZToKK0FDX0hFQURFUl9TVERDICAgICAgICAgICMgIDxzdGRsaWIuaD4sIDxzdGRhcmcuaD4sICAgPHN0cmluZy5oPiAgJiA8ZmxvYXQuaD4KK0FDX0hFQURFUl9ESVJFTlQgICAgICAgICMgIDxkaXJlbnQuaD4sIDxzeXMvbmRpci5oPiwgPHN5cy9kaXIuaD4gJiA8bmRpci5oPgorIyAgQXBwczoKK0FDX0hFQURFUl9TWVNfV0FJVCAgICAgICMgIDxzeXMvd2FpdC5oPgorCisjIGFsbG93IGZvciBxdWljayBtb2R1bGUvbGlicmFyeS9ldGMgcHJvY2Vzc2luZyBjaGVja3MKK2lmIHRlc3QgIngkTkVUU05NUF9RVUlDS19DSEVDSyIgPSAieCIgOyB0aGVuCisKKyMjCisjICAgU3RhbmQtYWxvbmUgaGVhZGVyczoKKyMjCisjICBDb3JlOgorQUNfQ0hFQ0tfSEVBREVSUyhbZ2V0b3B0LmggICBwdGhyZWFkLmggIHJlZ2V4LmggICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3RyaW5nLmggICBzeXNsb2cuaCAgIHVuaXN0ZC5oICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3RkaW50LmggICBpbnR0eXBlcy5oICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3BhcmFtLmggICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvc2VsZWN0LmggICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9zb2NrZXQuaCAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3RpbWUuaCAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdGltZWIuaCAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy91bi5oICAgICAgICAgICBdKQorCisjICBMaWJyYXJ5IGFuZCBBZ2VudDoKK0FDX0NIRUNLX0hFQURFUlMoW25saXN0LmhdLCwsWworQUNfSU5DTFVERVNfREVGQVVMVAorWworI2lmbmRlZiBMSUJCU0RfRElTQUJMRV9ERVBSRUNBVEVECisjZGVmaW5lIExJQkJTRF9ESVNBQkxFX0RFUFJFQ0FURUQgMQorI2VuZGlmCitdXSkKKworIyAgTGlicmFyeToKK0FDX0NIRUNLX0hFQURFUlMoW2ZjbnRsLmggICAgaW8uaCAgICAgICBrc3RhdC5oICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbGltaXRzLmggICBsb2NhbGUuaCAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvZmlsZS5oICAgICAgIHN5cy9pb2N0bC5oICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9zb2NraW8uaCAgICAgc3lzL3N0YXQuaCAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3N5c3RlbWNmZy5oICBzeXMvc3lzdGVtaW5mby5oICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdGltZXMuaCAgICAgIHN5cy91aW8uaCAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy91dHNuYW1lLmggICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aXB4L2lweC5oICAgICAgIF0pCisKKyMgIEFnZW50OgorQUNfQ0hFQ0tfSEVBREVSUyhbZGxmY24uaCAgICBlcnIuaCAgICAgIGZjbnRsLmggICAgZnN0YWIuaCAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFsgICAgICAgICAgIGdycC5oICAgICAgaW8uaCAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW2lvY3Rscy5oICAga3N0YXQuaCAgICBrdm0uaCAgICAgIGxpbWl0cy5oICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbICAgICAgICAgICBtbnRlbnQuaCAgIG10YWIuaCAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFsgICAgICAgICAgIHBrZ2xvY3MuaCAgICAgICAgICAgICBwd2QuaCAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgWyAgICAgICAgICAgY29tX2Vyci5oICAgICAgICAgICAgIGV0L2NvbV9lcnIuaCBdIGRubAorICAgICAgICAgICAgICAgICBbICAgICAgICAgICB1dG1weC5oICAgIHV0c25hbWUuaCAgICAgICAgICAgICAgIF0pCisKK0FDX0NIRUNLX0hFQURFUlMoW3N5cy9kaXNraW8uaCAgc3lzL2RraW8uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvZmlsZS5oICAgIHN5cy9maWxpby5oICAgc3lzL2ZpeHBvaW50LmggICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL2ZzLmggICAgICBzeXMvaW9jdGwuaCAgIHN5cy9sb2FkYXZnLmggIHN5cy9tbnRlbnQuaCAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9tbnR0YWIuaCAgc3lzL3Bvb2wuaCAgICBzeXMvcHJvdG9zdy5oICBzeXMvcHN0YXQuaCAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvc29ja2lvLmggIHN5cy9zdGF0LmggICAgc3lzL3N0YXRmcy5oICAgc3lzL3N0YXR2ZnMuaCBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3N0cmVhbS5oICBzeXMvc3lzZ2V0LmggIHN5cy9zeXNtcC5oICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy90Y3BpcHN0YXRzLmggICAgICAgICAgICBzeXMvdXRzbmFtZS5oICBzeXMvdmZzLmggICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdm0uaCAgICAgIHN5cy92bW1hYy5oICAgc3lzL3ZtbWV0ZXIuaCAgc3lzL3ZtcGFyYW0uaCBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3Ztc3lzdG0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworQUNfQ0hFQ0tfSEVBREVSUyhbYXNtL3BhZ2UuaCBhc20vdHlwZXMuaCAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtpbmV0L21pYjIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW2xpbnV4L2hkcmVnLmggbGludXgvdGFza3MuaCAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbWFjaGluZS9wYXJhbS5oICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0L3RjcF9mc20uaCAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3Vmcy9mcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbdXZtL3V2bV9leHRlcm4uaCB1dm0vdXZtX3BhcmFtLmggICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFt2bS92bS5oIHZtL3ZtX2V4dGVybi5oIHZtL3ZtX3BhcmFtLmggXSkKKworIyAgQXBwczoKK0FDX0NIRUNLX0hFQURFUlMoW2ZjbnRsLmggICAgZ3JwLmggICAgICBwd2QuaCAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvY2RlZnMuaCAgIHN5cy9pb2N0bC5oICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3NvY2tldC5oICBzeXMvc29ja2lvLmggICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy90aW1lLmggICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyMgIE5vdC1Vc2VkOgorQUNfQ0hFQ0tfSEVBREVSUyhbc2VhcmNoLmggICBzZ3R0eS5oICAgIHh0aS5oICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9kbWFwLmggc3lzL3BvbGwuaCAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdGltZW91dC5oICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbWFjaGluZS9wdGUuaCAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3BjaS9wY2kuaCAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKworIyBWYWxncmluZAorQUNfQ0hFQ0tfSEVBREVSUyhbdmFsZ3JpbmQvdmFsZ3JpbmQuaCB2YWxncmluZC9tZW1jaGVjay5oXSkKKyMgT3BlblNTTAorQUNfQ0hFQ0tfSEVBREVSUyhbb3BlbnNzbC9hZXMuaCBdKSAgICAgIyAgKENvcmUpCitBQ19DSEVDS19IRUFERVJTKFtvcGVuc3NsL2RoLmggIF0pICAgICAjICAoQXBwcykKKyMgIE5vdC1Vc2VkOgorQUNfQ0hFQ0tfSEVBREVSUyhbb3BlbnNzbC9kZXMuaCAgb3BlbnNzbC9obWFjLmggXSBkbmwKKyAgICAgICAgICAgICAgICAgW29wZW5zc2wvZXZwLmggIHNlY3VyaXR5L2NyeXB0b2tpLmhdKQorCisjIFJQTSBzdWJkaXJlY3RvcnkgcGF0aCAgICAgICAgICAgICAgICAgICAoQWdlbnQpCitpZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIjsgdGhlbgorICBBQ19DSEVDS19IRUFERVJTKFtycG0vcnBtdHMuaCAgIHJwbS9ycG1maWxldXRpbC5oXSwgW10sIFtdLAorCQkgICBbWyNpbmNsdWRlIDxycG0vcnBtbGliLmg+XV0pCitmaQorCisKKyMjCisjICAgUHJlLXJlcXVpc2l0ZSBvbiBvdGhlciBoZWFkZXJzOgorIyMKKworIyAgICAgICByZXF1aXJpbmcgPHN5cy9wYXJhbS5oPiAgKE1BWFBBVEhMRU4pICAgICAgICAgICAoT3BlbkJTRCAzLjQpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMoc3lzL3N3YXAuaCwsLAorICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoW10pCisgICAgWworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorICAgIF0pCisKKyMgICAgICAgcmVxdWlyaW5nIDxzeXMvcGFyYW0uaD4gICAgICAgICAgICAgICAgICAgICAgICAgKEZyZWVCU0QpCisjCisjICBDb3JlOiAgICAgICg/IFRlc3RlZCBhYm92ZT8gKQorQUNfQ0hFQ0tfSEVBREVSUyhbc3RkbGliLmggIF0sLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorICAgIF1dKQorIworIyAgTGlicmFyeToKK0FDX0NIRUNLX0hFQURFUlMoW21hbGxvYy5oICAgICAgICBuZXQvaWZfZGwuaCAgIHN5cy9zeXNjdGwuaCAgICBdLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyAgICBdXSkKKyMKKyMgIEFnZW50OgorQUNfQ0hFQ0tfSEVBREVSUyhbbWFsbG9jLmggICAgICAgIG9zcmVsZGF0ZS5oICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFttYWNoaW5lL3R5cGVzLmggbmV0L2lmX2RsLmggICBuZXQvaWZfdHlwZXMuaCAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9ka3N0YXQuaCAgICBzeXMvY29uZi5oICAgIHN5cy9tYnVmLmggICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL21vdW50LmggICAgIHN5cy9wcm9jLmggICAgc3lzL3F1ZXVlLmggICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvc3lzY3RsLmggICAgc3lzL3VzZXIuaCAgICAgICAgICAgICAgICAgICAgXSwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgcmVxdWlyaW5nIDxzeXMvc2VtYS5oPiAgICAgICAgICAgICAgICAgICAgICAgICAgKElSSVggNi41KQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKFtzeXMvc2VtYS5oXSkKK0FDX0NIRUNLX0hFQURFUlMoc3lzL2hhc2hpbmcuaCwsLAorICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoW10pCisgICAgWworI2lmIEhBVkVfU1lTX1NFTUFfSAorI2luY2x1ZGUgPHN5cy9zZW1hLmg+CisjZW5kaWYKKyAgICBdKQorCisjICAgICAgIHJlcXVpcmluZyA8c3lzL3NvY2tldC5oPiAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzIDkpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMoc3lzL3NvY2tldHZhci5oLCwsCisgICAgQUNfSU5DTFVERVNfREVGQVVMVChbXSkKKyAgICBbCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyAgICBdKQorCisjICAgICAgIHJlcXVpcmluZyBfS01FTVVTRVIgYW5kIDxzeXMvdHlwZXMuaD4gICAgICAgICAgIChCU0RpMy9JUklYKQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKHN5cy92bm9kZS5oLCwsCisgICAgWworI2RlZmluZSBfS01FTVVTRVIgMQorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorICAgIF0pCisKKyMgICAgICAgcmVxdWlyaW5nIDxtYWNoaW5lL3R5cGVzLmg+ICAgICAgICAgICAgICAgICAgICAgKE5ldEJTRCkKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhzeXMvZGlza2xhYmVsLmgsLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfTUFDSElORV9UWVBFU19ICisjaW5jbHVkZSA8bWFjaGluZS90eXBlcy5oPgorI2VuZGlmCisgICAgXV0pCisKKyMJUU5YCitBQ19DSEVDS19IRUFERVJTKFtuYnV0aWwuaF0pCisKKyMgICAgICAgVUZTIGhlYWRlcnMKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhbdWZzL3Vmcy9kaW5vZGUuaCB1ZnMvdWZzL3F1b3RhLmggdWZzL3Vmcy9pbm9kZS5oIHVmcy9mZnMvZnMuaF0sLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfVUZTX1VGU19ESU5PREVfSAorI2luY2x1ZGUgPHVmcy91ZnMvZGlub2RlLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VGU19VRlNfUVVPVEFfSAorI2luY2x1ZGUgPHVmcy91ZnMvcXVvdGEuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHJlcXVpcmluZyA8dm0vdm0uaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCU0RpMikKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyh2bS9zd2FwX3BhZ2VyLmgsLCwKKyAgICBbWworI2lmIEhBVkVfVk1fVk1fSAorI2luY2x1ZGUgPHZtL3ZtLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBuZXRsaW5rL3J0bmV0bGluayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTGludXgpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMoW2xpbnV4L25ldGxpbmsuaCAgbGludXgvcnRuZXRsaW5rLmhdLCwsCisgICAgW1sKKyNpZiBIQVZFX0FTTV9UWVBFU19ICisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTElOVVhfTkVUTElOS19ICisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2VuZGlmCisgICAgXV0pCisKKworIyAgICAgICBOZXR3b3JrIGhlYWRlcnMKKyMgIENvcmUgb3IgTGlicmFyeS9BZ2VudC9BcHBzOgorIworQUNfQ0hFQ0tfSEVBREVSUyhbYXJwYS9pbmV0LmggICAgICAgIG5ldC9pZi5oICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0L2luLmggICAgICAgbmV0ZGIuaCAgICAgICAgICAgICAgXSwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVElNRU9VVF9ICisjaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUVkFSX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisgICAgXV0pCisjCisjICBBZ2VudDoKK0FDX0NIRUNLX0hFQURFUlMoW25ldC9pZl9hcnAuaCAgICAgICBuZXQvaWZfbWliLmggICAgICAgICBuZXQvaWZfdmFyLmggICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0L2lmX2V0aGVyLmggbmV0aW5ldC9pbl9zeXN0bS5oICAgbmV0aW5ldC9pbl92YXIuaCBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldC9pcC5oICAgICAgIG5ldGluZXQvaXBfaWNtcC5oICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQvaWNtcF92YXIuaCBuZXRpbmV0L2lwX3Zhci5oICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0L3RjcC5oICAgICAgbmV0aW5ldC90Y3BfdGltZXIuaCAgbmV0aW5ldC90Y3BfdmFyLmhdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldC90Y3BpcC5oICAgIG5ldGluZXQvdWRwLmggICAgICAgIG5ldGluZXQvdWRwX3Zhci5oXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldC9yb3V0ZS5oICAgICAgICBuZXRpbmV0L2ljbXA2LmggICAgICAgICAgICAgICAgICAgICAgIF0sLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RJTUVPVVRfSAorI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVFZBUl9ICisjaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lDTVA2X0gKKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBLQU1FIChJUHY2KSBoZWFkZXJzCisjICBBZ2VudDoKKyMKKyMgS0FNRQorQUNfQ0hFQ0tfSEVBREVSUyhbbmV0aW5ldC9pcDYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldDYvaW42X3Zhci5oICAgIG5ldGluZXQ2L2luNl9wY2IuaCAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldDYvaXA2X3Zhci5oICAgIG5ldGluZXQ2L25kNi5oICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldDYvdGNwNi5oICAgICAgIG5ldGluZXQ2L3RjcDZfZnNtLmggICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldDYvdGNwNl90aW1lci5oIG5ldGluZXQ2L3RjcDZfdmFyLmhdLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVA2X0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwNi5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgcmVxdWlyaW5nIDxuZXRpbmV0L2luLmg+ICAgICAgICAgICAgICAgICAgICAgICAgKE9wZW5CU0QgMi42KQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKG5ldGluZXQvaW5fcGNiLmgsLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RJTUVPVVRfSAorI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVFZBUl9ICisjaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisgICAgXV0pCisKKyMjCisjICAgUHJlLXJlcXVpc2l0ZSBvbiBzcGVjaWZpYyB0eXBlcworIyMKKworIyAgICAgICBTcGVjaWFsIGhhY2sgdG8gZ2V0IGFyb3VuZCB2YXJpb3VzIHByb2JsZW1zIG9uIG9sZGVyIExpbnV4IGtlcm5lbHMKKyMgICAgICAgKG1ham9yIHVnaCEpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMoW2xpbnV4L2V0aHRvb2wuaF0sLCwKK1tbCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgX191NjQgdTY0OyAgICAgICAgIC8qIGhhY2ssIHNvIHdlIG1heSBpbmNsdWRlIGtlcm5lbCdzIGV0aHRvb2wuaCAqLwordHlwZWRlZiBfX3UzMiB1MzI7ICAgICAgICAgLyogZGl0dG8gKi8KK3R5cGVkZWYgX191MTYgdTE2OyAgICAgICAgIC8qIGRpdHRvICovCit0eXBlZGVmIF9fdTggdTg7ICAgICAgICAgICAvKiBkaXR0byAqLworXV0pCisKKyMjCisjICAgSGVhZGVycyByZXF1aXJpbmcgcGFydGljdWxhciBsaWJyYXJpZXMKKyMjCisKKyMgICAgICAgZm9yIEhvc3RSZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMgMi54KQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKHBrZ2luZm8uaCwKKyAgICBORVRTTk1QX1NFQVJDSF9MSUJTKHBrZ2luZm8sIGFkbSwKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfUEtHSU5GTywgMSwgW2RlZmluZSBpZiB5b3UgaGF2ZSBwa2dpbmZvXSksLCxMTUlCTElCUykpCisKK0FDX0NIRUNLX0hFQURFUlMocGtnLmgsCisgICAgTkVUU05NUF9TRUFSQ0hfTElCUyhwa2dfaW5pdCwgcGtnLAorICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJQS0csIDEsIFtkZWZpbmUgaWYgeW91IGhhdmUgQlNEIHBrZy1uZ10pKSkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3BrZ19oID0gbm8KK3RoZW4KKyAgICB1bnNldCBhY19jdl9oZWFkZXJfcGtnX2gKKyAgICBuZXRzbm1wX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBuZXRzbm1wX3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvbG9jYWwvaW5jbHVkZSIKKyAgICBMREZMQUdTPSIkTERGTEFHUyAtTC91c3IvbG9jYWwvbGliIgorICAgIEFDX0NIRUNLX0hFQURFUlMocGtnLmgsCisgICAgICAgIE5FVFNOTVBfU0VBUkNIX0xJQlMocGtnX2luaXQsIHBrZywKKwkgICAgQUNfREVGSU5FKEhBVkVfTElCUEtHLCAxLCBbZGVmaW5lIGlmIHlvdSBoYXZlIEJTRCBwa2ctbmddKSkpCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3BrZ19oID0gbm8KKyAgICB0aGVuCisgICAgICAgIENQUEZMQUdTPSIkbmV0c25tcF9zYXZlX0NQUEZMQUdTIgorICAgICAgICBMREZMQUdTPSIkbmV0c25tcF9zYXZlX0xERkxBR1MiCisgICAgZmkKK2ZpCisKK2Nhc2UgJHRhcmdldF9vcyBpbgorICAgIGFpeCopCisgICAgICAgICMgICAgICAgZm9yIENQVS9tZW1vcnkgc3RhdGlzdGljcyAgICAgICAgICAgICAgIChBSVgpCisgICAgICAgICMgIEFnZW50OgorICAgICAgICAjCisgICAgICAgIEFDX0NIRUNLX0hFQURFUlMobGlicGVyZnN0YXQuaCwKKyAgICAgICAgICAgIE5FVFNOTVBfU0VBUkNIX0xJQlMocGVyZnN0YXRfY3B1X3RvdGFsLCBwZXJmc3RhdCwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9QRVJGU1RBVCwgMSwgW29uIGFpeCwgaWYgeW91IGhhdmUgcGVyZnN0YXRdKSwKKyAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoWworCisqKiogVG8gbW9uaXRvciBDUFUvbWVtb3J5IHZhbHVlcyBpbiBBSVggeW91IG5lZWQgdG8gaW5zdGFsbAorKioqIGxpYnBlcmZzdGF0IHdoaWNoIGNhbiBiZSBmb3VuZCBpbiBib3MucGVyZgorXSksLAorICAgICAgICAgICAgICAgIExNSUJMSUJTKSwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCisgICAgXV0pCisgICAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAgICMgICAgICAgSFAtVVggYWdlbnQgbmVlZHMgb3Blbl9taWIgICAgICAgKFhYWCAtIG5vdCBhIGhlYWRlciBjaGVjayEpCisgICAgICAgICMKKyAgICAgICAgTkVUU05NUF9TRUFSQ0hfTElCUyhvcGVuX21pYiwgbm0sCisgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJOTSwgMSwgW2RlZmluZSBpZiB5b3UgaGF2ZSBsaWJubV0pLCwsTE1JQkxJQlMpCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgOzsKK2VzYWMKKworIyAgICAgICBmb3IgTUlCLTIgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ3lnd2luIGFuZCBNaW5HVykKKyMgIENvcmU6CisjCitBQ19DSEVDS19IRUFERVJTKFt3aW5kb3dzLmggaXBobHBhcGkuaF0sIFtdLCBbXSwgWworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCitdKQorCisjICAgICAgIGZvciBNSUItMiBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyMgIENvcmU6CisjCitpZiB0ZXN0IHgkd2l0aF9zb2NrbGliID0geHdpbnNvY2syOyB0aGVuCisgIEFDX0NIRUNLX0hFQURFUlMoW3dpbnNvY2suaCB3aW5zb2NrMi5oIHdzMnRjcGlwLmhdKQorZmkKKworIworIyBmb3IgdWNkLXNubXAvbG1zZW5zb3JzTWliCisjCitBQ19DSEVDS19IRUFERVJTKFtzZW5zb3JzL3NlbnNvcnMuaCBwaWNsLmhdKQorCisjIyAgVGhpcyBpcyBoZXJlIHRvIGF2b2lkIGxvYWRzIG9mIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyBkdXJpbmcKKyMjICBtb2R1bGUgY29uZmlndXJhdGlvbgorCisjIworIyAgIHJ0ZW50cnkgc3RydWN0dXJlIGNoZWNrczoKKyMjCisKKyMgQ2hlY2sgc3RydWN0IHJ0ZW50cnkgZm9yIGNvbW1vbiBmaWVsZHMKKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBydGVudHJ5LnJ0X2RzdCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVudHJ5LnJ0X2hhc2gsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlbnRyeS5ydF9uZXh0LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZW50cnkucnRfcmVmY250LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZW50cnkucnRfdW5pdCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVudHJ5LnJ0X3VzZV0sLCwKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorICAgIF0pCisKK2ZpICMgTkVUU05NUF9RVUlDS19DSEVDSwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxIGIvY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZjA1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbGliczEKQEAgLTAsMCArMSw5NSBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMgdGhhdCBhcmUgcnVuCisjIGJlZm9yZSB0aGUgYWdlbnQgbW9kdWxlIHRlc3RzLgorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyMKKyMgICBSUE0gY2hlY2tzCisjCisjIworQUNfQ0hFQ0tfSEVBREVSUyhycG0vcnBtbGliLmggcnBtL2hlYWRlci5oKQorCitBQ19DSEVDS19IRUFERVIocnBtL3JwbWxpYi5oLHJwbWxpYl9oPXllcyxycG1saWJfaD1ubykKK0FDX0NIRUNLX0hFQURFUihycG0vaGVhZGVyLmgscnBtaGVhZGVyX2g9eWVzLHJwbWhlYWRlcl9oPW5vKQorCitpZiB0ZXN0ICJ4JHJwbWhlYWRlcl9oIiA9ICJ4bm8iIC1vICJ4JHJwbWxpYl9oIiA9ICJ4bm8iIDsgdGhlbgorICBpZiB0ZXN0ICJ4JHdpdGhfcnBtIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGVpdGhlciB0aGUgUlBNIGhlYWRlciBmaWxlcyBuZWVkZWQgYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIFJQTSBzdXBwb3J0XSkKKyAgZWxzZQorICAgIHdpdGhfcnBtPW5vCisgIGZpCitmaQorCisjCisjIHJwbSBsaWJyYXJpZXMgb25seSBuZWVkZWQgZm9yIHRoZSBob3N0IHJlc291cmNlcyBtaWIgc29mdHdhcmUKKyMgaW5zdGFsbGVkIHRhYmxlcyAob24gbGludXggaW4gcGFydGljdWxhcikKKyMKK2lmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iOyB0aGVuCisgICMgQVJHLiAgUlBNIGlzIGEgcmVhbCBwYWluLgorICAjIEZXSVcgbGlicnBtLmxhLCBsaWJycG1pby5sYSwgYW5kIGxpYnBvcHQubGEgaGF2ZSBjb3JyZWN0IGRlcGVuZGVuY2llcy4KKyAgX3JwbWxpYnM9IiIKKworICAjIHJwbS00LjAueCBuZWVkcyBycG1pby4KKyAgTkVUU05NUF9TRUFSQ0hfTElCUyhycG1HZXRQYXRoLCBycG1pbywsLCAkTE1JQkxJQlMsIF9ycG1saWJzKQorICAKKyAgIyBycG0tNC4wLjMgbGlicnBtZGIgYWN0dWFsbHkgY29udGFpbnMgd2hhdCB3ZSBuZWVkLgorICBORVRTTk1QX1NFQVJDSF9MSUJTKHJwbWRiT3BlbiwgcnBtZGIsLCwgJExNSUJMSUJTLCBfcnBtbGlicykKKyAgIyBub3cgY2hlY2sgZm9yIHJwbSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbGlicmFyaWVzLgorICBORVRTTk1QX1NFQVJDSF9MSUJTKHJwbVJlYWRDb25maWdGaWxlcywgcnBtLCBbCisgICAgQUNfREVGSU5FKEhBVkVfTElCUlBNLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcnBtJyBsaWJyYXJ5ICgtbHJwbSkuXSkKKyAgICBMTUlCTElCUz0iJF9ycG1saWJzICRMTUlCTElCUyIKKyAgXSwsICRMTUlCTElCUywgX3JwbWxpYnMpCisKKyAgIyBycG0gNC42IGhhcyBpbmNvbXBhdGlibGUgQVBJLCB0dXJuIG9uIHRoZSBsZWdhY3kgb25lCisgIEFDX0NIRUNLX0RFQ0woW2hlYWRlckdldEVudHJ5XSwKKyAgICA6ICwKKyAgICBBQ19ERUZJTkUoW19SUE1fNF80X0NPTVBBVF0sIFtdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIFJQTSA0LjYgb3IgbmV3ZXIgdG8gdHVybiBvbiBsZWdhY3kgQVBJXSksCisgICAgW1sjaW5jbHVkZSA8cnBtL3JwbWxpYi5oPl1dCisgICkKK2ZpCisKKyMKKyMgZ2V0ZnNzdGF0L2dldHZmc3N0YXQKKyMKK0FDX1NFQVJDSF9MSUJTKGdldGZzc3RhdCwgW25idXRpbF0pCitBQ19DSEVDS19GVU5DUyhnZXRmc3N0YXQpCitBQ19DSEVDS19GVU5DUyhnZXR2ZnNzdGF0KQorQUNfRlVOQ19HRVRNTlRFTlQKKworIworIyBraW5mb19nZXRfY3B1cworIworQUNfU0VBUkNIX0xJQlMoa2luZm9fZ2V0X2NwdXMsIFtraW5mb10pCitBQ19DSEVDS19GVU5DUyhraW5mb19nZXRfY3B1cykKKworIworIyBkaXNrSU9MQXggcmVxdWlyZXMgZXhwIHdoaWNoIG1heSByZXF1aXJlIC1sbQorIworQUNfU0VBUkNIX0xJQlMoZXhwLCBbbV0pCisKKyMKKyMgICBsaWJrdm0KKyMKK05FVFNOTVBfU0VBUkNIX0xJQlMoa3ZtX3JlYWQsIGt2bSwsLCwgTEFHRU5UTElCUykKK05FVFNOTVBfU0VBUkNIX0xJQlMoa3ZtX29wZW5maWxlcywga3ZtLCwsLCBMQUdFTlRMSUJTKQorTkVUU05NUF9TRUFSQ0hfTElCUyhrdm1fZ2V0cHJvY3MsIGt2bSwsLCwgTE1JQkxJQlMpCitORVRTTk1QX1NFQVJDSF9MSUJTKGt2bV9nZXRwcm9jMiwga3ZtLCwsLCBMTUlCTElCUykKK05FVFNOTVBfU0VBUkNIX0xJQlMoa3ZtX2dldHN3YXBpbmZvLCBrdm0sLCwsIExNSUJMSUJTKQorbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExBR0VOVExJQlMgJExNSUJMSUJTICRMSUJTIgorQUNfQ0hFQ0tfRlVOQ1MoW2t2bV9vcGVuZmlsZXMga3ZtX2dldHByb2NzIGt2bV9nZXRwcm9jMiBrdm1fZ2V0c3dhcGluZm9dKQorTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorCisjCisjICAgZHluYW1pYyBtb2R1bGUgc3VwcG9ydAorIworTkVUU05NUF9TRUFSQ0hfTElCUyhbZGxvcGVuXSwgW2RsXSwsLCBbJExBR0VOVExJQlMgJExTTk1QTElCU10sIFtMTUlCTElCU10pCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTE1JQkxJQlMgJExBR0VOVExJQlMgJExTTk1QTElCUyAkTElCUyIKK0FDX0NIRUNLX0ZVTkNTKFtkbG9wZW5dKQorTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyIGIvY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDkxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbGliczIKQEAgLTAsMCArMSw1MDQgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgbGlicmFyaWVzIHRoYXQgYXJlIHJ1bgorIyBhZnRlciB0aGUgYWdlbnQgbW9kdWxlIHRlc3RzLgorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgICBIQVZFX0xJQiBEZWZpbml0aW9ucyB1c2VkIGluIHRoZSBOZXQtU05NUCBjb2RlIGJhc2U6CisjCisjICAgICAgIEhBVkVfTElCQ1JZUFRPOglhcHBzCisjICAgICAgIEhBVkVfTElCUlBNOglhZ2VudAorIworCisjIworIyAgIFNpbXBsZSBjaGVja3M6CisjIworCisjIEFDX0NIRUNLX0xJQihkZXMsIG1haW4pCisjIEFDX0NIRUNLX0xJQihtLCAgIGFzaW4pCisKKyMgICBkbWFsbG9jCisjCitpZiB0ZXN0ICIke3dpdGhfZG1hbGxvYytzZXR9IiA9IHNldDsgdGhlbgorICAgaWYgdGVzdCAiJHdpdGhfZG1hbGxvYyIgPSB5ZXMgLWEgLWQgJHdpdGhfZG1hbGxvYyA7IHRoZW4KKyAgICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJHdpdGhfZG1hbGxvYykKKyAgIGZpCisgICBBQ19DSEVDS19IRUFERVJTKFtkbWFsbG9jLmhdKQorICAgQUNfU0VBUkNIX0xJQlMoW2RtYWxsb2NfbWVzc2FnZV0sIFtkbWFsbG9jXSkKK2ZpCisKKyMgICBFRmVuY2UKKyMgICAgICAgKFRoaXMgdXNlZCB0byBiZSBvbiBieSBkZWZhdWx0IGZvciBkZXZlbG9wZXIgY2hlY2tvdXQpCisjCitpZiB0ZXN0ICJ4JHVzZV9lZmVuY2UiID0gInh5ZXMiOyB0aGVuCisgICAgQUNfU0VBUkNIX0xJQlMoW0VGX0V4aXRdLCBbZWZlbmNlXSkKK2ZpCisKKworIyAgIEVMRiBsaWJyYXJpZXMKKyMgICAgICAgVHlwaWNhbGx5IHVzZWQgZm9yICdubGlzdCcgIChuZWVkZWQgZm9yIHVwdGltZSkKKyMKK2lmIHRlc3QgIngkd2l0aF9lbGYiICE9ICJ4bm8iOyB0aGVuCitjYXNlICR0YXJnZXRfb3MgaW4KKwlsaW51eCopICMgYWRkIGhvc3RzIHdoaWNoIGRvbid0IHVzZSBubGlzdCBoZXJlCisgICAgICAgICAgICAgICAgOzsKKwlpcml4KikgIyBDaGVjayBmb3Igbmxpc3QgaW4gbWxkIChpcml4KQorCQlBQ19DSEVDS19MSUIoZWxmLCBubGlzdCkKKwkJQUNfQ0hFQ0tfTElCKGVsZiwgbmxpc3Q2NCkKKwkJQUNfQ0hFQ0tfTElCKG1sZCwgbmxpc3QpCisJCTs7CisJKikgIyBkZWZhdWx0CisJCUFDX0NIRUNLX0xJQihlbGYsIG5saXN0KQorCQk7OworZXNhYworZmkKKyAKKworIyAgIGxpYnNvY2tldAorIyAgICAgICBOZWVkZWQgZm9yICdzb2NrZXQoMiknICAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyMgICAgICAgUG9zc2libHkgYWxzbyBmb3IgJ2dldGhvc3RuYW1lKDMpJyAgICAgICAgICAgICAgKG5vbi1Tb2xhcmlzKQorIyAgICAgICAgICAgKGFsdGVybmF0aXZlbHkgaW4gbGlibnNsICAgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyMgICAgICAgICAgICBvciBpbiBsaWJ3czJfMzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorIworY2FzZSB4JHdpdGhfc29ja2xpYiBpbgoreHdpbnNvY2syKQorICAjICAgbGlid3MyX3czMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisgICMKKyAgbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorICBMSUJTPSIkTElCUyAtbHdzMl8zMiIKKyAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisgICAgI2luY2x1ZGUgPHdpbnNvY2syLmg+CisgIF0sIFsKKyAgICBzb2NrZXQoMCwgMCwgMCk7CisgICAgZ2V0aG9zdGJ5bmFtZSgwKTsKKyAgXSldLCBbCisgICAgIyBLZWVwIExJQlMuCisgICAgdHJ1ZQorICBdLCBbCisgICAgIyBSZXN0b3JlIExJQlMgYW5kIGNvbXBsYWluLgorICAgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKyAgICBBQ19NU0dfRVJST1IoW2xpYndzMl8zMiBub3QgZm91bmQuXSkKKyAgXSkKKyAgOzsKKyopCisgIEFDX1NFQVJDSF9MSUJTKHNvY2tldCwgc29ja2V0LCxBQ19NU0dfRVJST1IoW3NvY2tldCgyKSBub3QgZm91bmQuXSkpCisgIEFDX1NFQVJDSF9MSUJTKGdldGhvc3RieW5hbWUsIFtuc2wgc29ja2V0XSkKKyAgQUNfQ0hFQ0tfRlVOQ1MoZ2V0aG9zdGJ5bmFtZSkKKyAgQUNfU0VBUkNIX0xJQlMoZ2V0aG9zdGJ5YWRkciwgW25zbCBzb2NrZXRdKQorICBBQ19DSEVDS19GVU5DUyhnZXRob3N0YnlhZGRyKQorICA7OworZXNhYworCisKKyMgICBsaWJpcGhscGFwaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEN5Z3dpbiBhbmQgTWluR1cpCisjCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbGlwaGxwYXBpIgorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisgICNpbmNsdWRlIDx3aW5zb2NrMi5oPgorICAjaW5jbHVkZSA8aXBobHBhcGkuaD4KK10sIFsKKyAgSXBSZW5ld0FkZHJlc3MoMCk7CitdKV0sIFsKKyAgIyBLZWVwIExJQlMuCisgIHRydWUKK10sIFsKKyAgIyBSZXN0b3JlIExJQlMgYW5kIGNvbXBsYWluLgorICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisgIGNhc2UgeCR3aXRoX3NvY2tsaWIgaW4KKyAgeHdpbnNvY2syKQorICAgIEFDX01TR19FUlJPUihbbGliaXBobHBhcGkgbm90IGZvdW5kLl0pCisgICAgOzsKKyAgZXNhYworXSkKKworCisjICAgbGlicmVnZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyMKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMSUJTIC1scmVnZXgiCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsKKyAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAjaW5jbHVkZSA8cmVnZXguaD4KK10sIFsKKyAgcmVnY29tcCgwLCAwLCAwKTsKK10pXSwgWworICAjIEtlZXAgTElCUy4KKyAgdHJ1ZQorXSwgWworICAjIFJlc3RvcmUgTElCUy4KKyAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorXSkKKworCisjICAgbGlic25tcGFwaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyMKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMSUJTIC1sc25tcGFwaSIKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworICAjaW5jbHVkZSA8c25tcC5oPgorXSwgWworICBTbm1wVXRpbE1lbUFsbG9jKDApOworXSldLCBbCisgICMgS2VlcCBMSUJTLgorICB0cnVlCitdLCBbCisgICMgUmVzdG9yZSBMSUJTLgorICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCitdKQorCisKKyMgICBrc3RhdCBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisjCitORVRTTk1QX1NFQVJDSF9MSUJTKGtzdGF0X2xvb2t1cCwga3N0YXQsCisgICAgICAgIEFDX0RFRklORShIQVZFX0xJQktTVEFULCAxLAorICAgICAgICAJW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3N0YXQnIGxpYnJhcnkgKC1sa3N0YXQpLl0pLCwsCisgICAgICAgIExORVRTTk1QTElCUykKKworCisjCisjICAgbGlicnQKKyMKKworTkVUU05NUF9TRUFSQ0hfTElCUyhjbG9ja19nZXR0aW1lLCBydCwKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfQ0xPQ0tfR0VUVElNRSwgMSwKKyAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9ja19nZXR0aW1lJyBsaWJyYXJ5XSksLCwKKyAgICAgICAgTE5FVFNOTVBMSUJTKQorCisKKyMjCisjICAgTUlCLW1vZHVsZS1zcGVjaWZpYyBjaGVja3MKKyMjCisKKyMgICBsaWJkZXZzdGF0CisjICAgICAgICAoZm9yIGRpc2tJTyBNSUIpCisjCisjICAgTm90LVVzZWQ6IEhBVkVfR0VUREVWUy9IQVZFX0RFVlNUQVRfR0VUREVWUworIworZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiB1Y2Qtc25tcC9kaXNraW8gIiA+L2Rldi9udWxsCitpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgorCU5FVFNOTVBfU0VBUkNIX0xJQlMoZ2V0ZGV2cywgZGV2c3RhdCwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRERVZTLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmluZSBpZiB5b3UgaGF2ZSBnZXRkZXZzKCldKSwsLExNSUJMSUJTKQorCU5FVFNOTVBfU0VBUkNIX0xJQlMoZGV2c3RhdF9nZXRkZXZzLCBkZXZzdGF0LAorICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0RFVlNUQVRfR0VUREVWUywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZpbmUgaWYgeW91IGhhdmUgZGV2c3RhdF9nZXRkZXZzKCldKSwsLExNSUJMSUJTKQorZmkKKworIyAgIGxpYnBjaQorIyAgICAgICAgKGZvciBpZi1taWIgZGVzY3JpcHRpb24pCisjCitORVRTTk1QX1NFQVJDSF9MSUJTKHBjaV9sb29rdXBfbmFtZSwgcGNpLAorCUFDX0RFRklORShIQVZFX1BDSV9MT09LVVBfTkFNRSwgMSwKKwkJW2RlZmluZSBpZiB5b3UgaGF2ZSBwY2lfbG9va3VwX25hbWUoKV0pLCwsTE1JQkxJQlMpCisKKyMgICBMTS1TRU5TT1JTLU1JQiBzdXBwb3J0CisjCitlY2hvICIgJG1vZHVsZV9saXN0ICIgfCAkR1JFUCAtaSAidWNkLXNubXAvbG1zZW5zb3IiID4gL2Rldi9udWxsCitpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzZW5zb3JzIHN1cHBvcnRdKQorICAgICAgICBjYXNlICR0YXJnZXRfb3MgaW4KKyAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgICAjICBBZ2VudDogIEhBVkVfUElDTF9ICisgICAgICAgICAgICAjCisgICAgICAgICAgICBBQ19DSEVDS19IRUFERVIocGljbC5oLCBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxwaWNsIiwpCisgICAgICAgICAgICBBQ19DSEVDS19IRUFERVJTKHBpY2wuaCkKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICAjICBOb3QtVXNlZDogIEhBVkVfU0VOU09SU19TRU5TT1JTX0gKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUihzZW5zb3JzL3NlbnNvcnMuaCwsCisgICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihbYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCBzZW5zb3JzL3NlbnNvcnMuaF0pXSkKKyAgICAgICAgICAgIE5FVFNOTVBfU0VBUkNIX0xJQlMoc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMsIHNlbnNvcnMsLAorICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW2Fza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgLWxzZW5zb3JzXSldLCwKKyAgICAgICAgICAgICAgICBMTUlCTElCUykKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2ZpCisKKyMKKyMgbGlibmwgKG5ldGxpbmspCisjCisKK2lmIHRlc3QgIngkd2l0aF9ubCIgIT0gInhubyI7IHRoZW4KKyAgICBjYXNlICR0YXJnZXRfb3MgaW4KKyAgICBsaW51eCopICMgQ2hlY2sgZm9yIGxpYm5sIChsaW51eCkKKyAgICAgICAgbmV0c25tcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgIENQUEZMQUdTPSItSS91c3IvaW5jbHVkZS9saWJubDMgJENQUEZMQUdTIgorICAgICAgICBORVRTTk1QX1NFQVJDSF9MSUJTKG5sX2Nvbm5lY3QsIG5sLTMsCisgICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSUyhuZXRsaW5rL25ldGxpbmsuaCkKKyAgICAgICAgICAgIEVYVEVSTkFMX01JQkdST1VQX0lOQ0xVREVTPSIkRVhURVJOQUxfTUlCR1JPVVBfSU5DTFVERVMgLUkvdXNyL2luY2x1ZGUvbGlibmwzIl0sCisgICAgICAgICAgICBbQ1BQRkxBR1M9IiRuZXRzbm1wX3NhdmVfQ1BQRkxBR1MiXSwgW10sIFtdLCBbTE1JQkxJQlNdKQorICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRsaW5rX25ldGxpbmtfaCIgIT0geHllczsgdGhlbgorICAgICAgICAgICAgTkVUU05NUF9TRUFSQ0hfTElCUyhubF9jb25uZWN0LCBubCwgWworICAgICAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMobmV0bGluay9uZXRsaW5rLmgpXSwgW10sIFtdLCBMTUlCTElCUykKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmV0bGlua19uZXRsaW5rX2giID0geHllczsgdGhlbgorICAgICAgICAgICAgQUNfRUdSRVBfSEVBREVSKFtubF9zb2NrZXRfZnJlZV0sIFtuZXRsaW5rL3NvY2tldC5oXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX0xJQk5MM10sIFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgPG5ldGxpbmsvbmV0bGluay5oPiBwcm92aWRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJubDMgQVBJXSldKQorICAgICAgICBmaQorICAgIDs7CisgICAgZXNhYworZmkKKworCisKKyMjCisjICAgTW9yZSBjb21wbGV4IGNoZWNrczoKKyMjCisKKyMgICBTZWN1cml0eSByZWxhdGVkIGZ1bmN0aW9ucworIworTk9OQUdFTlRMSUJTPSRMSUJTCSAjIHNhdmUgb2xkIGxpYnJhcmllcworU1NIUFJPRz1ubworVExTUFJPRz1ubworaWYgdGVzdCAieCR0cnlvcGVuc3NsIiAhPSAieG5vIiAtYSAieCR0cnlvcGVuc3NsIiAhPSAieGludGVybmFsIjsgdGhlbgorICAgICMgY2hlY2sgZm9yIGxpYnBrY3MxMSBpZiBhc2tlZAorICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiAhPSAieHllcyIgLWEgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICBBQ19DSEVDS19MSUIocGtjczExLCBDX0luaXRpYWxpemUsCisgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJQS0NTMTEsIDEsCisgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGtjczExJyBsaWJyYXJ5ICgtbHBrY3MxMSkuXSkKKwkJTElCUEtDUzExPSItbHBrY3MxMSIpCisgICAgZWxzZSAKKyAgICAgICAgaWYgdGVzdCAieCR0cnlyc2FyZWYiICE9ICJ4bm8iOyB0aGVuCisgICAgICAgICAgICBBQ19DSEVDS19MSUIocnNhcmVmLCBSU0FQcml2YXRlRGVjcnlwdCkKKyAgICAgICAgICAgIEFDX0NIRUNLX0xJQihSU0FnbHVlLCBSU0FfUEtDUzFfUlNBcmVmKQorICAgICAgICBmaQorCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIC1sZWF5MzJdKQorICAgICAgICBuZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9Ii1sZWF5MzIiCisgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworICAgICAgICAgICAgICAgICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPl0sCisgICAgICAgICAgICAgICAgW3JldHVybiBFVlBfbWQ1KCk7XSldLAorICAgICAgICAgICAgW0FDX01TR19SRVNVTFQoeWVzKTsgYWNfY3ZfbGliX2VheTMyX0VWUF9tZDU9eWVzOyBDUllQVE89ImVheTMyIl0sCisgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVChubyldCisgICAgICAgICkKKyAgICAgICAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorCisgICAgICAgIGlmIHRlc3QgeCRDUllQVE8gPSB4OyB0aGVuCisgICAgICAgICAgICBBQ19DSEVDS19MSUIoW2NyeXB0b10sIFtFVlBfbWQ1XSwgW0NSWVBUTz0iY3J5cHRvIl0pCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCB4JENSWVBUTyAhPSB4OyB0aGVuCisgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJDUllQVE8sIDEsCisgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBPcGVuU1NMIGxpYnJhcnkgKC1sY3J5cHRvIG9yIC1sZWF5MzIpLl0pCisgICAgICAgICAgICBMSUJDUllQVE89Ii1sJHtDUllQVE99IgorICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKCR7Q1JZUFRPfSwgQUVTX2NmYjEyOF9lbmNyeXB0LCAKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQsIDEsCisgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEFFU19jZmIxMjhfZW5jcnlwdCcgZnVuY3Rpb24uXSkpCisKKyAgICAgICAgICAgIEFDX0NIRUNLX0xJQigke0NSWVBUT30sIEVWUF9NRF9DVFhfY3JlYXRlLAorICAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9FVlBfTURfQ1RYX0NSRUFURV0sIFtdLAorICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFVlBfTURfQ1RYX2NyZWF0ZScgZnVuY3Rpb24uXSkKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfRVZQX01EX0NUWF9ERVNUUk9ZXSwgW10sCisgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVWUF9NRF9DVFhfZGVzdHJveScgZnVuY3Rpb24uXSkpCisgICAgICAgIGZpCisgICAgICAgIGlmIGVjaG8gIiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICIgfCAkR1JFUCAiRFRMUyIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgQUNfQ0hFQ0tfTElCKHNzbCwgRFRMU3YxX21ldGhvZCwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJTU0xfRFRMUywgMSwKKyAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgYHNzbCcgbGlicmFyeSBzdXBwb3J0cyBEVExTICgtbHNzbCkuXSkKKyAgICAgICAgICAgICAgICBMSUJDUllQVE89IiAtbHNzbCAkTElCQ1JZUFRPIiwJCisJCUFDX01TR19FUlJPUihbVGhlIERUTFMgYmFzZWQgdHJhbnNwb3J0cyByZXF1aXJlIHRoZSBsaWJzc2wgbGlicmFyeSBmcm9tIE9wZW5TU0wgdG8gYmUgYXZhaWxhYmxlIGFuZCBzdXBwb3J0IERUTFNdKQksLWxjcnlwdG8pCisgICAgICAgICAgICBUTFNQUk9HPXllcworICAgICAgICBmaQorICAgICAgICBpZiBlY2hvICIgJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAiIHwgJEdSRVAgIlRMUyIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgQUNfQ0hFQ0tfTElCKHNzbCwgU1NMX2xpYnJhcnlfaW5pdCwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJTU0wsIDEsCisgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzbCcgbGlicmFyeSAoLWxzc2wpLl0pCisgICAgICAgICAgICAgICAgTElCQ1JZUFRPPSIgLWxzc2wgJExJQkNSWVBUTyIsCQorCQlBQ19NU0dfRVJST1IoW1RoZSBEVExTIGJhc2VkIHRyYW5zcG9ydHMgcmVxdWlyZSB0aGUgbGlic3NsIGxpYnJhcnkgZnJvbSBPcGVuU1NMIHRvIGJlIGF2YWlsYWJsZV0pCSwtbGNyeXB0bykKKyAgICAgICAgICAgIFRMU1BST0c9eWVzCisgICAgICAgIGZpCisgICAgICAgIGlmIGVjaG8gIiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICIgfCAkR1JFUCAiIFNTSCAiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIEFDX0NIRUNLX0xJQihzc2gyLCBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cCwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJTU0gyLCAxLAorICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2gyJyBsaWJyYXJ5ICgtbHNzaDIpLl0pCisgICAgICAgICAgICAgICAgTElCQ1JZUFRPPSIgLWxzc2gyICRMSUJDUllQVE8iLAorICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbVGhlIFNTSCB0cmFuc3BvcnQgcmVxdWlyZXMgdGhlIGxpYnNzaDIgbGlicmFyeSB0byBiZSBhdmFpbGFibGVdKSwpCisgICAgICAgICAgICBTU0hQUk9HPXllcworICAgICAgICBmaQorICAgIGZpCitlbGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgorICAgIEFDX0NIRUNLX0xJQihwa2NzMTEsIENfSW5pdGlhbGl6ZSwKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCUEtDUzExKQorICAgICAgICBMSUJQS0NTMTE9Ii1scGtjczExIikKK2ZpCitpZiB0ZXN0ICJ4JFRMU1BST0ciID0gInh5ZXMiOyB0aGVuCisgICBBQ19DSEVDS19ERUNMKFtFVlBfc2hhMjI0XSwKKyAgICBBQ19ERUZJTkUoW0hBVkVfRVZQX1NIQTIyNF0sIFtdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIEVWUF9zaGEyMjQvMjU2IGluIG9wZW5zc2xdKSwKKyAgICA6ICwKKyAgICBbWyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPl1dKQorICAgQUNfQ0hFQ0tfREVDTChbRVZQX3NoYTM4NF0sCisgICAgQUNfREVGSU5FKFtIQVZFX0VWUF9TSEEzODRdLCBbXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBFVlBfc2hhMzg0LzI1NiBpbiBvcGVuc3NsXSksCisgICAgOiAsCisgICAgW1sjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD5dXSkKK2ZpCisKK0xJQlM9JE5PTkFHRU5UTElCUwkgIyByZXN0b3JlIG9sZCBsaWJyYXJpZXMKK2lmIHRlc3QgIngkU1NIUFJPRyIgPSAieHllcyI7IHRoZW4KKyAgICBORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUU9JycKKyAgICBORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFPScjJworZWxzZQorICAgIE5FVFNOTVBfQlVJTERfU1NIX1BST0dfVFJVRT0nIycKKyAgICBORVRTTk1QX0JVSUxEX1NTSF9QUk9HX0ZBTFNFPScnCitmaQoraWYgdGVzdCAieCRUTFNQUk9HIiA9ICJ4eWVzIiAtYSAieCRlbmFibGVfcmVhZF9vbmx5IiAhPSAieHllcyIgOyB0aGVuCisgICAgTkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFPScnCisgICAgTkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRT0nIycKK2Vsc2UKKyAgICBORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUU9JyMnCisgICAgTkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRT0nJworZmkKK2lmIGVjaG8gIiAke3NlY3VyaXR5X21vZF9saXN0fSAiIHwgZ3JlcCAnIHVzbSAnIDsgdGhlbgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3JlYWRfb25seSIgIT0gInh5ZXMiIDsgdGhlbgorICAgIAlORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUU9JycKKyAgICAJTkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRT0nIycKKyAgICBlbHNlCisgICAgCU5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRT0nIycKKyAgICAJTkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRT0nJworICAgIGZpCitlbHNlCisgICAgTkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFPScjJworICAgIE5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0U9JycKK2ZpCitpZiB0ZXN0ICJ4JGVuYWJsZV9yZWFkX29ubHkiICE9ICJ4eWVzIiA7IHRoZW4KKyAgICBORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUU9IiIKKyAgICBORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFPSIjIgorZWxzZQorICAgIE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRT0iIyIKKyAgICBORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFPSIiCitmaQorQUNfU1VCU1QoTkVUU05NUF9CVUlMRF9TU0hfUFJPR19UUlVFKQorQUNfU1VCU1QoTkVUU05NUF9CVUlMRF9TU0hfUFJPR19GQUxTRSkKK0FDX1NVQlNUKE5FVFNOTVBfQlVJTERfVExTX1BST0dfVFJVRSkKK0FDX1NVQlNUKE5FVFNOTVBfQlVJTERfVExTX1BST0dfRkFMU0UpCitBQ19TVUJTVChORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUUpCitBQ19TVUJTVChORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFKQorQUNfU1VCU1QoTkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFKQorQUNfU1VCU1QoTkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRSkKKworIworIyBJZiB3ZSdyZSB1c2luZyBpbnRlcm5hbCBjcnlwdG8gc3VwcG9ydCB3ZSBuZWVkIHRvIGNvbXBpbGUgaW4gZXh0cmEgZmlsZXMKKyMKK2NyeXB0b19maWxlc19jPSIiCitjcnlwdG9fZmlsZXNfbz0iIgorY3J5cHRvX2ZpbGVzX2xvPSIiCitpZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiICE9ICJ4bm8iIC1hICJ4JENSWVBUTyIgPSAieCI7IHRoZW4KKyAgICMgSWYgd2U6CisgICAjICAgMSkgY291bGRuJ3QgZmluZCBuZWVkZWQgb3BlbnNzbCBzdXBwb3J0CisgICAjICAgMikgT1Igd2VyZSBhc2tlZCB0byB1c2UgaW50ZXJuYWwgc3VwcG9ydAorICAgIyAgIDMpIEFORCB3ZSBoYXZlIHRoZSBuZWVkZWQgZmlsZXMKKyAgICMgdGhlbiB1c2UgaXQKKyAgIENSWVBUTz0iaW50ZXJuYWwiCisgICBjcnlwdG9fZmlsZXNfYz0ib3BlbnNzbC9vcGVuc3NsX3NoYTEuYyBvcGVuc3NsL29wZW5zc2xfbWQ1LmMgb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYyBvcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5jIG9wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmMgb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYyBvcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUuYyBvcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmMiCisgICBjcnlwdG9fZmlsZXNfbz0ib3BlbnNzbC9vcGVuc3NsX3NoYTEubyBvcGVuc3NsL29wZW5zc2xfbWQ1Lm8gb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkubyBvcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5vIG9wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLm8gb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIubyBvcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUub28gb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5vIgorICAgY3J5cHRvX2ZpbGVzX2xvPSJvcGVuc3NsL29wZW5zc2xfc2hhMS5sbyBvcGVuc3NsL29wZW5zc2xfbWQ1LmxvIG9wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmxvIG9wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmxvIG9wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmxvIG9wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmxvIG9wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5sbyBvcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmxvIgorICAgQUNfREVGSU5FKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUKQorZmkKK0FDX1NVQlNUKGNyeXB0b19maWxlc19jKQorQUNfU1VCU1QoY3J5cHRvX2ZpbGVzX28pCitBQ19TVUJTVChjcnlwdG9fZmlsZXNfbG8pCisKKyMKKyMgaWYgd2UgY2FuIGRvIGFueSBzb3J0IG9mIGNyeXB0byB0aGVuIG5vdGUgaXQKKyMKK2lmIHRlc3QgIngkQ1JZUFRPIiAhPSAieCIgOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX0NBTl9ET19DUllQVE8sIDEsICJEZWZpbmUgaWYgY3J5dG9ncmFwaHkgc3VwcG9ydCBpcyBwb3NzaWJsZSIpCitmaQorCisjICAgVENQIHdyYXBwZXIgc3VwcG9ydAorIworX2NwcGZsYWdzPSIke0NQUEZMQUdTfSIKK19sZGZsYWdzPSIke0xERkxBR1N9IgoraWYgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gIm5vIjsgdGhlbgorICBpZiB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSAieWVzIjsgdGhlbgorICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR3aXRoX2xpYndyYXAvaW5jbHVkZSIKKyAgICBMREZMQUdTPSIke0xERkxBR1N9IC1MJHdpdGhfbGlid3JhcC9saWIiCisgIGZpCisKKyAgX2xpYnM9JHtMSUJTfQorICBBQ19DSEVDS19IRUFERVIodGNwZC5oLCAsCisgICAgQUNfTVNHX0VSUk9SKFtBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIHRjcGQuaC5dKSkKKworICBMSUJTPSIkTElCUyAtbHdyYXAiCisgIEFDX01TR19DSEVDS0lORyhbZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcF0pCisgICMgWFhYOiBzaG91bGQgY2hlY2sgZm9yIGhvc3RzX2N0bAorICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAjaW5jbHVkZSA8dGNwZC5oPgorICAgICBpbnQgYWxsb3dfc2V2ZXJpdHkgPSAwOworICAgICBpbnQgZGVueV9zZXZlcml0eSAgPSAwO11dLAorICAgIFtbaG9zdHNfYWNjZXNzKCh2b2lkICopMCldXSldLAorICAgIFtBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfTElCV1JBUCkKKyAgICAgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gbm8gLWEgIiR3aXRoX2xpYndyYXAiICE9IHllcyAmJiBfd3JhcGxpYnM9Ii1MJHdpdGhfbGlid3JhcC9saWIiCisgICAgIF93cmFwbGlicz0iJF93cmFwbGlicyAtbHdyYXAiXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAjIExpbnV4IFJlZEhhdCA2LjEgd29uJ3QgbGluayBsaWJ3cmFwIHdpdGhvdXQgbGlibnNsCisgICAgIEFDX0NIRUNLX0ZVTkMoeXBfZ2V0X2RlZmF1bHRfZG9tYWluLCAsCisgICAgICAgQUNfQ0hFQ0tfTElCKG5zbCwgeXBfZ2V0X2RlZmF1bHRfZG9tYWluKSkKKyAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwIGxpbmtlZCB3aXRoIC1sbnNsXSkKKyAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwkjaW5jbHVkZSA8dGNwZC5oPgorCWludCBhbGxvd19zZXZlcml0eSA9IDA7CisJaW50IGRlbnlfc2V2ZXJpdHkgID0gMDtdXSwKKyAgICAgICBbW2hvc3RzX2FjY2Vzcygodm9pZCAqKTApXV0pXSwKKyAgICAgICBbQUNfTVNHX1JFU1VMVCh5ZXMpCisJQUNfREVGSU5FKE5FVFNOTVBfVVNFX0xJQldSQVApCisJdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gbm8gLWEgIiR3aXRoX2xpYndyYXAiICE9IHllcyAmJiBfd3JhcGxpYnM9Ii1MJHdpdGhfbGlid3JhcC9saWIiCisJX3dyYXBsaWJzPSIkX3dyYXBsaWJzIC1sd3JhcCAtbG5zbCJdLAorICAgICAgIFtBQ19NU0dfUkVTVUxUKG5vKQorCUFDX01TR19FUlJPUihBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LildKV0pCisgIExBR0VOVExJQlM9IiRfd3JhcGxpYnMiCisgIENQUEZMQUdTPSR7X2NwcGZsYWdzfQorICBMREZMQUdTPSR7X2xkZmxhZ3N9CisgIExJQlM9JHtfbGlic30KK2ZpCisKKworIyMKKyMgICBteXNxbAorIyMKK2lmIHRlc3QgIngkd2l0aF9teXNxbCIgPSAieHllcyIgOyB0aGVuCisgIEFDX1BBVEhfUFJPR1MoTVlTUUxDT05GSUcsbXlzcWxfY29uZmlnKQorICB0ZXN0IC14ICIkTVlTUUxDT05GSUciIFwKKwl8fCBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIG15c3FsX2NvbmZpZyBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgTXlTUUwgc3VwcG9ydF0pCisgIE1ZU1FMX0xJQlM9YCRNWVNRTENPTkZJRyAtLWxpYnNgCisgIE1ZU1FMX0lOQ0xVREVTPWAkTVlTUUxDT05GSUcgLS1pbmNsdWRlYAorICBfbGlicz0iJHtMSUJTfSIKKyAgX2NwcGZsYWdzPSIke0NQUEZMQUdTfSIKKyAgTElCUz0iJHtMSUJTfSAke01ZU1FMX0xJQlN9IgorICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gJHtNWVNRTF9JTkNMVURFU30iCisgIEFDX0NIRUNLX0hFQURFUihteXNxbC5oLCwKKyAgICAgW0FDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbXlzcWwuaCBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgTXlTUUwgc3VwcG9ydF0pXSkKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE1ZX0lOSVQoKSB3b3Jrc10pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oCisgICAgICBbWyNpbmNsdWRlIDxteV9nbG9iYWwuaD4KKyAgICAgICAgI2luY2x1ZGUgPG15X3N5cy5oPl1dLAorICAgICAgW1tNWV9JTklUKCJteV9pbml0X3Rlc3QiKV1dKV0sCisgICAgICBbQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgICAgIFtBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShbSEFWRV9CUk9LRU5fTElCTVlTUUxDTElFTlRdLCAxLAorICAgICAgICAgICAgICAgICBbRGVmaW5lIGlmIHVzaW5nIE1ZX0lOSVQoKSBjYXVzZXMgYSBsaW5rZXIgZXJyb3JdKV0pCisgIENQUEZMQUdTPSIke19jcHBmbGFnc30iCisgIExJQlM9IiR7X2xpYnN9IgorICBBQ19NU0dfQ0FDSEVfQUREKE1ZU1FMIFRyYXAgTG9nZ2luZzogICAgICAgICBlbmFibGVkKQorZWxzZQorICBBQ19NU0dfQ0FDSEVfQUREKE1ZU1FMIFRyYXAgTG9nZ2luZzogICAgICAgICB1bmF2YWlsYWJsZSkKK2ZpCitBQ19TVUJTVChNWVNRTF9MSUJTKQorQUNfU1VCU1QoTVlTUUxfSU5DTFVERVMpCisgIAorCisjIworIyAgIE5vbi1saWJyYXJ5IGNoZWNrcworIyMKKworIyBubGlzdAorQUNfQ0hFQ0tfRlVOQ1Mobmxpc3Qgbmxpc3Q2NCBrbmxpc3QpCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMSBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWVjOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxCkBAIC0wLDAgKzEsMjQgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIE1pc2NlbGxhbmVvdXMgY2hlY2tzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBDb21waWxhdGlvbi1yZWxhdGVkCisjIworCisjICAgICAgIER5bmFtaWMgbW9kdWxlcyByZXF1aXJlIFBvc2l0aW9uLUluZGVwZW5kZW50IENvZGUKKyMJICAgIExJQl9DRkxBR1MvRExMSUJTOiB1c2VkIGluIGFnZW50IE1ha2VmaWxlIG9ubHkKKyMKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB3ZSBoYXZlIHRvIGJ1aWxkIFBJQyBjb2RlXSkKK2VjaG8gIiAkbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgdWNkLXNubXAvZGxtb2QgIiA+L2Rldi9udWxsCitpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgorICAgIExJQl9DRkxBR1M9IiRMSUJfQ0ZMQUdTICRTSExJQl9DRkxBR1MiCisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisgICAgRExMSUJTPSIiCisgICAgQUNfTVNHX1JFU1VMVChubykKK2ZpCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE4ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyCkBAIC0wLDAgKzEsMTQyIEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBNaXNjZWxsYW5lb3VzIGNoZWNrcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgUGFja2FnZSBjaGFyYWN0ZXJpc3RpY3MKKyMgICAgICAgQXV0aGVudGljYXRpb24vRW5jcnlwdGlvbiBzdXBwb3J0CisjIworCisjICAgICAgIENoZWNrIGZvciBQS0NTMTEKKyMKK0FDX01TR19DSEVDS0lORyhbZm9yIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRdKQordXNlb3BlbnNzbD1ubwordXNlcGtjcz1ubworaWYgdGVzdCAieCRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9zZWN1cml0eV9jcnlwdG9raV9oIiAhPSAieHllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKEFza2VkIHRvIHVzZSBQS0NTMTEgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4pCisgICAgZmkKK2Vsc2UKKyAgICBpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgdXNlcGtjcz15ZXMKKyAgICBmaQorZmkKKworIyAgICAgICBDaGVjayBmb3IgT3BlblNTTAorIworaWYgdGVzdCAieCRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiICE9ICJ4eWVzIiAtYSAieCRhY19jdl9saWJfZWF5MzJfRVZQX21kNSIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2htYWNfaCIgIT0gInh5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihBc2tlZCB0byB1c2UgT3BlblNTTCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LikKKyAgICBmaQorZWxzZQorICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICB1c2VvcGVuc3NsPXllcworICAgIGVsaWYgdGVzdCAieCR0cnlvcGVuc3NsIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJ4JHVzZXBrY3MiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgdXNlb3BlbnNzbD15ZXMKKyAgICAgICAgZmkKKyAgICBmaQorZmkKKworIyAgICAgICBBdmFpbGFibGUgYXV0aGVudGljYXRpb24vZW5jcnlwdGlvbiBtb2RlcworIworaWYgdGVzdCAieCRDUllQVE8iID0gInhpbnRlcm5hbCIgOyB0aGVuCisgICAgYXV0aG1vZGVzPSJNRDUgU0hBMSIKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgZW5jcm1vZGVzPSJERVMgQUVTIgorICAgIGVsc2UKKyAgICAgICAgZW5jcm1vZGVzPSJbZGlzYWJsZWRdIgorICAgIGZpCisgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTywgMSwgIkRlZmluZSBpZiBpbnRlcm5hbCBjcnlwdG9ncmFwaHkgY29kZSBzaG91bGQgYmUgdXNlZCIpCisgICAgQUNfTVNHX1JFU1VMVChJbnRlcm5hbCBDcnlwdG8gU3VwcG9ydCkKK2VsaWYgdGVzdCAieCR1c2VvcGVuc3NsIiAhPSAieG5vIiA7IHRoZW4KKyAgICBhdXRobW9kZXM9Ik1ENSBTSEExIgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2Flc19oIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgICAgIGVuY3Jtb2Rlcz0iREVTIEFFUyIKKwllbHNlCisJICAgIGVuY3Jtb2Rlcz0iREVTIgorCWZpCisgICAgZWxzZQorICAgICAgICBlbmNybW9kZXM9IltkaXNhYmxlZF0iCisgICAgZmkKKyAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfT1BFTlNTTCkKKyAgICBMTkVUU05NUExJQlM9IiRMTkVUU05NUExJQlMgJExJQkNSWVBUTyIKKyAgICBBQ19NU0dfUkVTVUxUKE9wZW5TU0wgU3VwcG9ydCkKK2VsaWYgdGVzdCAieCR1c2Vwa2NzIiAhPSAieG5vIiA7IHRoZW4KKyAgICBhdXRobW9kZXM9Ik1ENSBTSEExIgorICAgIGlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICBlbmNybW9kZXM9IkRFUyIKKyAgICBlbHNlCisgICAgICAgIGVuY3Jtb2Rlcz0iW2Rpc2FibGVkXSIKKyAgICBmaQorICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9QS0NTMTEsIDEsCisgICAgICBbRGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGNvZGVTMTEgbGlicmFyeSAuLi5dKQorICAgIExORVRTTk1QTElCUz0iJExORVRTTk1QTElCUyAkTElCUEtDUzExIgorICAgIEFDX01TR19SRVNVTFQoUEtDUzExIFN1cHBvcnQpCitlbGlmIHRlc3QgIngkZW5hYmxlX21kNSIgIT0gInhubyI7IHRoZW4KKyAgICBhdXRobW9kZXM9Ik1ENSIKKyAgICBlbmNybW9kZXM9IiIKKyAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KQorICAgIEFDX01TR19SRVNVTFQoSW50ZXJuYWwgTUQ1IFN1cHBvcnQpCitmaQoraWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCisgICAgYXV0aG1vZGVzPWBlY2hvICRhdXRobW9kZXMgfCAkU0VEICdzL01ENSAqLy87J2AKK2ZpCitBQ19TVUJTVChMTkVUU05NUExJQlMpCitBQ19TVUJTVChMQUdFTlRMSUJTKQorCitBQ19NU0dfQ0FDSEVfQUREKENyeXB0byBzdXBwb3J0IGZyb206ICAgICAgICAkQ1JZUFRPKQorQUNfTVNHX0NBQ0hFX0FERChBdXRoZW50aWNhdGlvbiBzdXBwb3J0OiAgICAgJGF1dGhtb2RlcykKK0FDX01TR19DQUNIRV9BREQoRW5jcnlwdGlvbiBzdXBwb3J0OiAgICAgICAgICRlbmNybW9kZXMpCisKK2lmIHRlc3QgIngkYWxsX3dhcm5pbmdzIiAhPSAieCI7IHRoZW4KKyAgICBBQ19NU0dfQ0FDSEVfQUREKFdBUk5JTkc6ICRhbGxfd2FybmluZ3MpCitmaQorCisjCisjIENoZWNrIHdoZXRoZXIgdXNlciB3YW50cyBETlNTRUMgbG9jYWwgdmFsaWRhdGlvbiBzdXBwb3J0CisjCitfbGlicz0ke0xJQlN9CitpZiAhIHRlc3QgIngtJHdhbnRfZG5zc2VjIiA9ICJ4LW5vIiA7IHRoZW4KKyAgICBBQ19DSEVDS19IRUFERVJTKFt2YWxpZGF0b3IvdmFsaWRhdG9yLWNvbmZpZy5oXSkKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3ZhbGlkYXRvcl92YWxpZGF0b3JfY29uZmlnX2giICE9IHllczsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoQ2FuJ3QgZmluZCB2YWxpZGF0b3IuaCkKKyAgICBmaQorICAgIGlmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiAhPSAieHllcyIgLWEgXAorICAgICAgICAgICAgIngkYWNfY3ZfbGliX2VheTMyX0VWUF9tZDUiICE9ICJ4eWVzIiAtbyBcCisgICAgICAgICAgICAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9obWFjX2giICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoQ291bGRuJ3QgZmluZCBPcGVuU1NMIGZvciBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbiBzdXBwb3J0LikKKyAgICBmaQorICAgIExJQlM9IiRMSUJTICRMSUJDUllQVE8iCisgICAgQUNfQ0hFQ0tfTElCKHNyZXMsIHF1ZXJ5X3NlbmQsLEFDX01TR19FUlJPUihbQ2FuJ3QgZmluZCBsaWJzcmVzXSkpCisgICAgVkFMX0xJQlM9Ii1sc3JlcyAkTElCQ1JZUFRPIgorICAgIExJQlM9IiRMSUJTIC1sc3JlcyIKKyAgICBBQ19DSEVDS19MSUIodmFsLCBwX3ZhbF9zdGF0dXMsCisgICAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sdmFsIgorICAgICAgICAgICAgICAgICBWQUxfTElCUz0iJFZBTF9MSUJTIC1sdmFsIgorICAgICAgICAgICAgICAgICBoYXZlX3ZhbF9yZXNfcXVlcnk9eWVzLAorICAgICAgICAgICAgICAgICBbIEFDX0NIRUNLX0xJQihwdGhyZWFkLCBwdGhyZWFkX3J3bG9ja19pbml0KQorCQkgICBBQ19DSEVDS19MSUIodmFsLXRocmVhZHMsIHBfdmFsX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICBoYXZlX3ZhbF9yZXNfcXVlcnk9eWVzCisgICAgICAgICAgICAgICAgICAgTElCUz0iLWx2YWwtdGhyZWFkcyAkTElCUyIKKyAgICAgICAgICAgICAgICAgICBWQUxfTElCUz0iLWx2YWwtdGhyZWFkcyAtbHB0aHJlYWQgJFZBTF9MSUJTIgorICAgICAgICAgICAgICAgICAgIExJQlZBTF9TVUZGSVg9Ii10aHJlYWRzIiwKKyAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoQ2FuJ3QgZmluZCBsaWJ2YWwgb3IgbGlidmFsLXRocmVhZHMpKQorICAgICAgICAgICAgICAgICBdKQorICAgIEFDX0RFRklORShETlNTRUNfTE9DQUxfVkFMSURBVElPTiwgMSwKKyAgICAgICAgICAgICAgW0RlZmluZSBpZiB5b3Ugd2FudCBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbiBzdXBwb3J0XSkKKyAgICBETlNTRUM9ImVuYWJsZWQiCitlbHNlCisgICAgRE5TU0VDPSJkaXNhYmxlZCIKK2ZpCisKK0xJQlM9JHtfbGlic30KKworQUNfU1VCU1QoVkFMX0xJQlMpCitBQ19NU0dfQ0FDSEVfQUREKExvY2FsIEROU1NFQyB2YWxpZGF0aW9uOiAgICAkRE5TU0VDKQorCisgCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhZmY0OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMwpAQCAtMCwwICsxLDIwIEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBNaXNjZWxsYW5lb3VzIGNoZWNrcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgQ29tcGlsYXRpb24gY2hhcmFjdGVyaXN0aWNzCisjIworCisjICAgICAgIEJ5dGUgb3JkZXIKKyMKK2lmIHRlc3QgIiR3aXRoX2VuZGlhbm5lc3MiID0gImJpZyI7IHRoZW4KKyAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2VsaWYgdGVzdCAiJHdpdGhfZW5kaWFubmVzcyIgPSAibGl0dGxlIiA7IHRoZW4KKyAgICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK0FDX0NfQklHRU5ESUFOKCwsCisgICAgW0FDX01TR19FUlJPUihbRmFpbGVkIHRvIGZpZ3VyZSBvdXQgaG9zdCBlbmRpYW5uZXNzLCBwbGVhc2UgdXNlIC0td2l0aC1lbmRpYW5uZXNzIHRvIHNwZWNpZnkgaXQuXSldKQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0IGIvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGJhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQKQEAgLTAsMCArMSw0MTYgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIE1pc2NlbGxhbmVvdXMgT3BlcmF0aW5nLVN5c3RlbSBjaGFyYWN0ZXJpc3RpY3MKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMJRGV0ZXJtaW5lIGhvdyB0byB0ZXN0IGZvciBjaGFyYWN0ZXIgZGV2aWNlcworIwlbV2UgYXNzdW1lIHRoYXQgL2Rldi9udWxsIGRvZXMgYWN0dWFsbHkgZXhpc3QhXQorIworaWYgdGVzdCAtYyAvZGV2L251bGw7IHRoZW4KKyAgICBDREVWX1RFU1RfRkxBRz0iLWMiCitlbGlmIHRlc3QgLWYgL2Rldi9udWxsOyB0aGVuCisgICAgQ0RFVl9URVNUX0ZMQUc9Ii1mIgorZWxzZQorICAgIEFDX01TR19XQVJOKFtDYW4ndCByZWxpYWJseSBkZXRlY3QgY2hhcmFjdGVyIGRldmljZXNdKQorICAgICMgSXMgaXQgYWN0dWFsbHkgc2Vuc2libGUgdG8gZmFsbCBiYWNrIG9uICJ0ZXN0IC1mIiA/CisgICAgQ0RFVl9URVNUX0ZMQUc9Ii1mIgorZmkKKworIyAgICAgICBLZXJuZWwgTG9jYXRpb24KKyMJICAgIHVzZWQgaW4gbGlicmFyeS9hZ2VudAorIworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb2NhdGlvbiBvZiBzeXN0ZW0ga2VybmVsXSwKKyAgICBhY19jdl9LRVJORUxfTE9DLAorICAgW2FjX2N2X0tFUk5FTF9MT0M9InVua25vd24iCisgICAgZm9yIGkgaW4gL3ZtdW5peCAvaHAtdXggL3N0YW5kL3ZtdW5peCAvZGV2L2tzeW1zIC9rZXJuZWwvdW5peCAva2VybmVsL2dlbnVuaXggL25ldGJzZCAvdW5peCAva2VybmVsIC9ic2QgL21hY2hfa2VybmVsIC9ib290L2tlcm5lbC9rZXJuZWwKKyAgICBkbworICAgICAgICBpZiB0ZXN0ICRDREVWX1RFU1RfRkxBRyAkaTsgdGhlbgorICAgICAgICAgICAgYWNfY3ZfS0VSTkVMX0xPQz0iJGkiCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgIworICAgICMgSW4gcHJpbmNpcGxlLCB0aGlzIHRlc3QgaXMgbWVhbnQgdG8gcHJvdmlkZSBhIGRlZmF1bHQgcGF0aCB0byB0aGUga2VybmVsCisgICAgIyBJbiBwcmFjdGljZSwgdGhlIHRlc3QgaXMgYnJva2VuIGFuZCB0aGUga2VybmVsIHBhdGggaXMgc2V0IHRvICJ1bmtub3duIgorICAgICMKKyAgICAjIE5vdGUgdGhhdCBvbiBjZXJ0YWluIHN5c3RlbXMgKGUuZy4gc29tZSBMaW51eCBkaXN0cmlidXRpb25zKSwKKyAgICAjICAgIGl0IGlzIGltcG9zc2libGUgdG8gcHJlZGljdCB0aGUgbmFtZSBvZiB0aGUga2VybmVsLAorICAgICMgICAgcGFydGljdWxhcmx5IGlmIGl0IGluY2x1ZGVzIHRoZSBrZXJuZWwgdmVyc2lvbiwgYXJjaGl0ZWN0dXJlLCBldGMKKyAgICAjCisgICAgIyBTaW5jZSB0aGlzIGRlZmF1bHQgd2lsbCBuZXZlciBhY3R1YWxseSBiZSB1c2VkLCB0aGVuIGRvbid0IHRyeSB0byBzZXQgaXQKKyAgICAjCisgICAgaWYgdGVzdCAkaSA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICBBQ19NU0dfV0FSTihbQ2FuJ3QgZmluZCBzeXN0ZW0ga2VybmVsLi4uIGhvcGVmdWxseSB0aGlzIHdvbid0IGJlIG5lZWRlZCFdKQorICAgIGZpCitdKQorQUNfREVGSU5FX1VOUVVPVEVEKEtFUk5FTF9MT0MsIiRhY19jdl9LRVJORUxfTE9DIiwgW2xvY2F0aW9uIG9mIFVOSVgga2VybmVsXSkKKworCisjICAgICAgIC9kZXYva21lbSBleGlzdGVuY2UKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworQUNfQ0FDSEVfQ0hFQ0soW2ZvciAvZGV2L2ttZW1dLAorICAgIGFjX2N2X0hBVkVfS01FTSwKKyAgIFtpZiB0ZXN0ICRDREVWX1RFU1RfRkxBRyAvZGV2L2ttZW07IHRoZW4KKyAgICAgICAgYWNfY3ZfSEFWRV9LTUVNPSIvZGV2L2ttZW0iCisgICAgZmkKK10pCisjCisjICBOb3RlIHRoYXQgaXQncyBPSyBpZiB0aGlzIGRldmljZSBpcyBub3QgZm91bmQKKyMKK2lmIHRlc3QgIngkYWNfY3ZfSEFWRV9LTUVNIiA9ICJ4L2Rldi9rbWVtIjsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0tNRU0sIiRhY19jdl9IQVZFX0tNRU0iLCBbRGVmaW5lIGlmIHlvdSBoYXZlIC9kZXYva21lbV0pCitmaQorCisKKyMgICAgICAgU3dhcCBkZXZpY2UgTG9jYXRpb24KKyMgICAgICAgICAgICgvZGV2L2RtZW0gb3IgL2Rldi9kcnVtKQorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitBQ19DQUNIRV9DSEVDSyhbZm9yIGxvY2F0aW9uIG9mIHN3YXAgZGV2aWNlXSwKKyAgICBhY19jdl9ETUVNX0xPQywKKyAgIFtpZiB0ZXN0ICRDREVWX1RFU1RfRkxBRyAvZGV2L2RtZW07IHRoZW4KKyAgICAgICAgYWNfY3ZfRE1FTV9MT0M9Ii9kZXYvZG1lbSIKKyAgICBlbGlmIHRlc3QgJENERVZfVEVTVF9GTEFHIC9kZXYvZHJ1bTsgdGhlbgorICAgICAgICBhY19jdl9ETUVNX0xPQz0iL2Rldi9kcnVtIgorICAgIGVsc2UKKyAgICAgICAgYWNfY3ZfRE1FTV9MT0M9Im5vbmUiCisgICAgZmkKK10pCisjCisjICBOb3RlIHRoYXQgaXQncyBPSyBpZiB0aGlzIGRldmljZSBpcyBub3QgZm91bmQKKyMKK2lmIHRlc3QgIngkYWNfY3ZfRE1FTV9MT0MiICE9ICJ4bm9uZSI7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoRE1FTV9MT0MsIiRhY19jdl9ETUVNX0xPQyIsIFtsb2NhdGlvbiBvZiBzd2FwIGRldmljZV0pCitmaQorCisKKyMgICAgICAgTW91bnQgdGFibGUgTG9jYXRpb24KKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtb3VudCB0YWJsZSBsb2NhdGlvbl0sCisgICAgYWNfY3ZfRVRDX01OVFRBQiwKKyAgIFthY19jdl9FVENfTU5UVEFCPSIke3dpdGhfbW50dGFiOi11bmtub3dufSIKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfRVRDX01OVFRBQiIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgZm9yIGkgaW4gL2V0Yy9tbnR0YWIgL2V0Yy9tdGFiIC9ldGMvZmlsZXN5c3RlbXMgL2Rldi9tbnR0YWIKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGlmIHRlc3QgLWYgJGkgLW8gLWMgJGk7IHRoZW4KKyAgICAgICAgICAgICAgICBhY19jdl9FVENfTU5UVEFCPSIkaSIKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBmaQorXSkKK0FDX0RFRklORV9VTlFVT1RFRChFVENfTU5UVEFCLCIkYWNfY3ZfRVRDX01OVFRBQiIsIFtsb2NhdGlvbiBvZiBtb3VudCB0YWJsZSBsaXN0XSkKKworCisjICAgICAgIFByaW50aW5nCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK0FDX1BBVEhfUFJPRyhbTFBTVEFUX1BBVEhdLGxwc3RhdCkKK2lmIHRlc3QgeCRMUFNUQVRfUEFUSCAhPSB4OyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKExQU1RBVF9QQVRILCAiJExQU1RBVF9QQVRIIiwKKwlbUGF0aCB0byB0aGUgbHBzdGF0IGNvbW1hbmRdKQorICAgIEFDX0RFRklORShIQVZFX0xQU1RBVCwgMSwgW1NldCBpZiB0aGUgbHBzdGF0IGNvbW1hbmQgaXMgYXZhaWxhYmxlXSkKK2ZpCitpZiB0ZXN0IC1yIC9ldGMvcHJpbnRjYXA7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9QUklOVENBUCwgMSwgW1NldCBpZiAvZXRjL3ByaW50Y2FwIGV4aXN0c10pCitmaQorCisKKyMgICAgICAgQ2hlY2sgcHMgYXJncworIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitBQ19DQUNIRV9DSEVDSyhbZm9yIGNvcnJlY3QgZmxhZ3MgdG8gcHNdLAorICAgICBhY19jdl9wc19mbGFncywKKyAgICAgWworaWYgdGVzdCAiYCgkUFNQUk9HIC1lIDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWUiCitlbGlmIHRlc3QgImAoJFBTUFJPRyAtZWwgMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItZWwiCitlbGlmIHRlc3QgImAoJFBTUFJPRyBhY3ggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSJhY3giCitlbGlmIHRlc3QgImAoJFBTUFJPRyAtYWN4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWFjeCIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIC1vIHBpZCx0dCxzdGF0ZSx0aW1lLHVjb21tIDI+JjEpIHwgJEVHUkVQICcgcHMgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1vIHBpZCx0dCxzdGF0ZSx0aW1lLHVjb21tIgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgYXggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSJheCIKK2VsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgorZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbiAKKyAgICBhY19jdl9wc19mbGFncz0iLWUiCitlbHNlCisgICAgQUNfTVNHX1dBUk4oW1VuYWJsZSB0byBkZXRlcm1pbmUgdmFsaWQgcHMgZmxhZ3MuLi4gIGRlZmF1bHRpbmcuLi5dKQorICAgIGFjX2N2X3BzX2ZsYWdzPSItYWN4IgorZmkKK10pCisKK1BTQ01EPSIkUFNQUk9HICRhY19jdl9wc19mbGFncyIKK0FDX1NVQlNUKFBTQ01EKQorQUNfREVGSU5FX1VOUVVPVEVEKFBTQ01ELCAiJFBTUFJPRyAkYWNfY3ZfcHNfZmxhZ3MiLAorICBbQ29tbWFuZCB0byBnZW5lcmF0ZSBwcyBvdXRwdXQsIHRoZSBmaW5hbCBjb2x1bW4gbXVzdCBiZSB0aGUgcHJvY2VzcworICAgbmFtZSB3aXRoT1VUIGFyZ3VtZW50c10pCisKKworIyMKKyMgICBTeXN0ZW0vQ29tcGlsYXRpb24tcmVsYXRlZAorIyMKKworIyAgICAgICBUZXN0IGZvciBTSUdIVVAKKyMKKworQUNfTVNHX0NIRUNLSU5HKFtmb3IgU0lHSFVQXSkKK0FDX0NPTVBJTEVfSUZFTFNFKAorICAgIFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxzaWduYWwuaD5dLCBbcmV0dXJuIFNJR0hVUF0pXSwKKyAgICBbbmV0c25tcF9oYXZlX3NpZ2h1cD15ZXNdLAorICAgIFtuZXRzbm1wX2hhdmVfc2lnaHVwPW5vXQorKQorQUNfTVNHX1JFU1VMVChbJG5ldHNubXBfaGF2ZV9zaWdodXBdKQoraWYgdGVzdCAieCRuZXRzbm1wX2hhdmVfc2lnaHVwIiA9IHh5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfU0lHSFVQXSwgWzFdLAorICAgICAgICAgICAgICBbRGVmaW5lIGlmIFNJR0hVUCBpcyBkZWZpbmVkIGluIDxzaWduYWwuaD4uXSkKK2ZpCisKKworIyAgICAgICBDaGVjayB3aGV0aGVyIHN5c2N0bCgpIGlzIHVzYWJsZQorIwkgICAgdXNlZCBpbiBsaWJyYXJ5L2FnZW50CisjCitpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbQ2FuJ3QgY2hlY2sgc3lzY3RsLCBtYW51YWxseSBkZWZpbmUgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCBpZiBwbGF0Zm9ybSBzdXBwb3J0IGF2YWlsYWJsZV0pCitlbHNlCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2lmIHN5c2N0bCBjYW4gcmVhZCBrZXJuZWwgaW5mb3JtYXRpb25dLAorICAgICAgICBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMLAorICAgICAgIFtBQ19UUllfUlVOKFsKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9TWVNfU1lTQ1RMX0gKKyMgaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisKK21haW4oKSB7CisgIGludCAgICAgICAgICAgICAgICAgbWliWzJdOworICBzaXplX3QgICAgICAgICAgICAgIGxlbjsKKyAgc3RydWN0IHRpbWV2YWwgYm9vdHRpbWU7CisgIAorICBtaWJbMF0gPSBDVExfS0VSTjsKKyAgbWliWzFdID0gS0VSTl9CT09UVElNRTsKKyAgCisgIGxlbiA9IHNpemVvZihib290dGltZSk7CisgIHN5c2N0bChtaWIsIDIsICZib290dGltZSwgJmxlbiwgTlVMTCwgTlVMTCk7CisgIGlmIChib290dGltZS50dl9zZWMgIT0gMCkKKyAgICBleGl0KDApOworICBlbHNlCisgICAgZXhpdCgxKTsKK30KKyAgICAgICAgXSwKKyAgICAgICAgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD15ZXMsCisgICAgICAgIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9bm8sCisgICAgICAgIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9bm8pXSkKK2ZpCisKK2lmIHRlc3QgIngkYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCIgPSAieHllcyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwsIDEsIFtzeXNjdGwgd29ya3MgdG8gZ2V0IGJvb3R0aW1lLCBldGMuLi5dKQorZmkKKworCisjICAgQ2hlY2sgd2hldGhlciBUQ1AgdGltZXIgY29uc3RhbnRzIGFyZSBpbmRlZWQgY29uc3RhbnQKKyMgICAgICAgb3IgZGVwZW5kIG9uIHRoZSBrZXJuZWwgY2xvY2sgdGljayAnaHonLiAgICAgICAgKEZyZWVCU0QgNC54KQorIworIyAgICAgICBJZiB0aGUgbGF0dGVyLCB0aGVuIHdlIHdpbGwgbmVlZCB0byBoYXZlIGEgbG9jYWwKKyMgICAgICAgdmFyaWFibGUgJ2h6JyBkZWZpbmVkIGFuZCB3aXRoIGEgc3VpdGFibGUgdmFsdWUsCisjICAgICAgIHdoZW5ldmVyIHdlIHdhbnQgdG8gIHVzZSBvbmUgb25lIG9mIHRoZXNlICdjb25zdGFudHMnLgorIworIyAJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgVENQIHRpbWVycyBkZXBlbmQgb24gJ2h6J10sCisgICAgYWNfY3ZfVENQVFZfTkVFRFNfSFosCisgICBbQUNfRUdSRVBfQ1BQKGh6LAorICAgICAgICBbCisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KK1RDUFRWX1NSVFRERkxUCisgICAgICAgIF0sCisgICAgICAgIGFjX2N2X1RDUFRWX05FRURTX0haPXllcywKKyAgICAgICAgYWNfY3ZfVENQVFZfTkVFRFNfSFo9bm8pXSkKKworaWYgdGVzdCAieCRhY19jdl9UQ1BUVl9ORUVEU19IWiIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoVENQVFZfTkVFRFNfSFosIDEsCisgICAgICAgIFtEZWZpbmUgaWYgdGhlIFRDUCB0aW1lciBjb25zdGFudHMgaW4gPG5ldGluZXQvdGNwX3RpbWVyLmg+CisgICAgICAgICBkZXBlbmQgb24gdGhlIGludGVnZXIgdmFyaWFibGUgJ2h6Jy4gIEA8OkBGcmVlQlNEIDQueEA6PkBdKQorZmkKKworCisjICAgQ2hlY2sgd2hldGhlciBJUCBSb3V0ZSB0YWJsZSBpcyBjYWNoZWQgICAgICAgICAgICAgIChTb2xhcmlzKQorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitjYXNlICR0YXJnZXRfb3MgaW4KKyAgc29sYXJpcyopCisgICAgIyAgICBIZWFkZXIgY2hlY2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzIDIuNi83KQorICAgICMKKyAgICBBQ19DSEVDS19IRUFERVJTKGluZXQvY29tbW9uLmgpCisgICAgQUNfQ0hFQ0tfSEVBREVSUyhpbmV0L2lwLmgsYWNfaW5ldF9pcF9oPXllcyxhY19pbmV0X2lwX2g9bm8sCisgICAgICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoW10pCisgICAgICAgIFsKKyNpZiBIQVZFX1NZU19TVFJFQU1fSAorI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfSU5FVF9DT01NT05fSAorI2luY2x1ZGUgPGluZXQvY29tbW9uLmg+CisjZW5kaWYKKyAgICAgICAgXSkKKyAgICBpZiB0ZXN0ICRhY19pbmV0X2lwX2ggPSB5ZXMgOyB0aGVuCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbWliMl9pcFJvdXRlRW50cnlfdCBpbiBpbmV0L21pYjIuaF0sCisgICAgICAgICAgICBhY19jdl9taWIyX2lwUm91dGVFbnRyeV90LAorICAgICAgICAgICBbQUNfVFJZX0NPTVBJTEUoWworI2lmIEhBVkVfSU5FVF9NSUIyX0gKKyNpbmNsdWRlIDxpbmV0L21pYjIuaD4KKyNlbmRpZgorICAgICAgICAgICAgICAgXSxbCisgIG1pYjJfaXBSb3V0ZUVudHJ5X3QgdGVzdGl0OworICBpZihzaXplb2YodGVzdGl0KSkKKyAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdD15ZXMsCisgICAgICAgICAgICAgICBhY19jdl9taWIyX2lwUm91dGVFbnRyeV90PW5vKV0pCisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9taWIyX2lwUm91dGVFbnRyeV90IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIElSRV9DQUNIRSBpcyBkZWZpbmVkIGluIGluZXQvaXAuaF0sCisgICAgICAgICAgICAgICAgYWNfY3ZfaXJlX2NhY2hlLAorICAgICAgICAgICAgICAgW0FDX1RSWV9DT01QSUxFKFsKKyNpZiBIQVZFX0lORVRfSVBfSAorI2luY2x1ZGUgPGluZXQvaXAuaD4KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgIF0sWworICBpbnQgdGVzdGl0PUlSRV9DQUNIRTsKKyAgaWYodGVzdGl0KQorICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgIGFjX2N2X2lyZV9jYWNoZT15ZXMsCisgICAgICAgICAgICAgICAgICAgYWNfY3ZfaXJlX2NhY2hlPW5vKV0pCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFjX2N2X2lyZV9jYWNoZT1ubworICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaXJlX2NhY2hlIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0RFRklORURfSVJFX0NBQ0hFLFtdLAorICAgICAgICAgICAgICAgIFtkZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBJUkVfQ0FDSEUgZGVmaW5lZCBpbiA8aW5ldC9pcC5oPiBoZWFkZXIgZmlsZS5dKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBBQ19NU0dfV0FSTihbSXQgc2VlbXMgdGhhdCB5b3UgaGF2ZSBpbmV0L2lwLmgsIGJ1dCBJUkVfQ0FDSEUgaXMgbm90IGRlZmluZWQuIFwKK1RoYXQgbWVhbnMgdGhhdCB5b3VyIHF1ZXJ5IHRvIGlwUm91dGUgTUlCIGNvdWxkIGdlbmVyYXRlIG92ZXIgMjBrIHJlc3VsdHMhIFwKK0FuZCB0aGlzIGNhbiBiZSB2ZXJ5IHNsb3cuXSkKKyAgICAgICAgZmkKKyAgICBmaSAgICAgICAgICMgInRlc3QgJGFjX2luZXRfaXBfaCA9IHllcyIKKyAgICA7OworZXNhYworCisjICAgQ2hlY2sgd2hldGhlciBJUF9QS1RJTkZPIGlzIHVzYWJsZS4KKyMKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBJUF9QS1RJTkZPIF0sCisgICAgICAgICAgICAgICAgW2FjX2N2X2hhdmVfaXBfcGt0aW5mb10sCitbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIHByaW50ZigpICovCisjaW5jbHVkZSA8c3RkbGliLmg+IC8qIG1hbGxvYygpICovCisjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIG1lbXNldCgpICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KK10sIFsKKyAgICB2b2lkICpidWY7CisgICAgaW50IGxlbjsKKyAgICB2b2lkICpmcm9tOworICAgIHNvY2tsZW5fdCAqZnJvbWxlbjsKKworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgY2hhciAqY21zZyA9IG1hbGxvYyhDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpKTsKKyAgICBzdHJ1Y3QgY21zZ2hkciAqY207CisgICAgc3RydWN0IG1zZ2hkciBtc2c7CisKKyAgICBpb3YuaW92X2Jhc2UgPSBidWY7CisgICAgaW92Lmlvdl9sZW4gPSBsZW47CisKKyAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mIG1zZyk7CisgICAgbXNnLm1zZ19uYW1lID0gZnJvbTsKKyAgICBtc2cubXNnX25hbWVsZW4gPSAqZnJvbWxlbjsKKyAgICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgICAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgIG1zZy5tc2dfY29udHJvbCA9ICZjbXNnOworICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKKworICAgIGZvciAoY20gPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbTsgY20gPSBDTVNHX05YVEhEUigmbXNnLCBjbSkpIHsKKyAgICAgICAgaWYgKGNtLT5jbXNnX2xldmVsID09IFNPTF9JUCAmJiBjbS0+Y21zZ190eXBlID09IElQX1BLVElORk8pIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9wa3RpbmZvKiBzcmMgPSAoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY20pOworICAgICAgICAgICAgcHJpbnRmKCJBZGRyZXNzOiAlczsgaW5kZXg6ICVkXG4iLCBpbmV0X250b2Eoc3JjLT5pcGlfYWRkciksCisJICAgICAgICAgICBzcmMtPmlwaV9pZmluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK10pXSwKK1thY19jdl9oYXZlX2lwX3BrdGluZm89eWVzXSwKK1thY19jdl9oYXZlX2lwX3BrdGluZm89bm9dCispXSkKK2lmIHRlc3QgeCRhY19jdl9oYXZlX2lwX3BrdGluZm8gPSB4eWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfSVBfUEtUSU5GTywgMSwgW1NldCBpZiBJUF9QS1RJTkZPIGlzIHVzYWJsZV0pCitmaQorCisjICAgQ2hlY2sgd2hldGhlciBJUF9SRUNWRFNUQUREUiBpcyB1c2FibGUuCisjCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgSVBfUkVDVkRTVEFERFIgXSwKKyAgICAgICAgICAgICAgICBbYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkcl0sCitbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIHByaW50ZigpICovCisjaW5jbHVkZSA8c3RkbGliLmg+IC8qIG1hbGxvYygpICovCisjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIG1lbXNldCgpICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KK10sIFsKKyAgICB2b2lkICpidWY7CisgICAgaW50IGxlbjsKKyAgICB2b2lkICpmcm9tOworICAgIHNvY2tsZW5fdCAqZnJvbWxlbjsKKworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgY2hhciAqY21zZyA9IG1hbGxvYyhDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKTsKKyAgICBzdHJ1Y3QgY21zZ2hkciAqY207CisgICAgc3RydWN0IG1zZ2hkciBtc2c7CisKKyAgICBpb3YuaW92X2Jhc2UgPSBidWY7CisgICAgaW92Lmlvdl9sZW4gPSBsZW47CisKKyAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mIG1zZyk7CisgICAgbXNnLm1zZ19uYW1lID0gZnJvbTsKKyAgICBtc2cubXNnX25hbWVsZW4gPSAqZnJvbWxlbjsKKyAgICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgICAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgIG1zZy5tc2dfY29udHJvbCA9ICZjbXNnOworICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKKworICAgIGZvciAoY20gPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbTsgY20gPSBDTVNHX05YVEhEUigmbXNnLCBjbSkpIHsKKyAgICAgICAgaWYgKGNtLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY20tPmNtc2dfdHlwZSA9PSBJUF9SRUNWRFNUQUREUikgeworICAgICAgICAgICAgc3RydWN0IGluX2FkZHIqIHNyYyA9IChzdHJ1Y3QgaW5fYWRkciAqKUNNU0dfREFUQShjbSk7CisgICAgICAgICAgICBwcmludGYoIkFkZHJlc3M6ICVzXG4iLCBpbmV0X250b2Eoc3JjKSk7CisgICAgICAgIH0KKyAgICB9CitdKV0sCitbYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkcj15ZXNdLAorW2FjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHI9bm9dCispXSkKK2lmIHRlc3QgeCRhY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyID0geHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0lQX1JFQ1ZEU1RBRERSLCAxLCBbU2V0IGlmIElQX1JFQ1ZEU1RBRERSIGlzIHVzYWJsZV0pCitmaQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzIGIvY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MDEzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MKQEAgLTAsMCArMSw0MzggQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgcHJvZ3JhbXMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFNoZWxsIGNoZWNrczoKKyMjCisKKyMgICAgICAgQ2hlY2sgZm9yICdzaCcgb3ZlcmZsb3cgICAgICAgICAgICAgICAgICAgICAgICAgKEhQLVVYKQorIyAgICAgICAgICh0YWtlbiBmcm9tIFBlcmwncyBjb25maWd1cmUgc2NyaXB0KQorIworQUNfTVNHX0NIRUNLSU5HKFtpZiBJIG5lZWQgdG8gZmVlZCBteXNlbGYgdG8ga3NoXSkKK2lmIHRlc3QgLWYgL2hwLXV4IC1hIC1mIC9iaW4va3NoOyB0aGVuCisgIGlmIChQQVRIPS47IGFsaWFzIC14KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKG5vKQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgaWYgdGVzdCAieCQxIiA9ICJ4IjsgdGhlbgorICAgICAgZXhlYyAvYmluL2tzaCAkMAorICAgIGVsc2UKKyAgICAgIGV4ZWMgL2Jpbi9rc2ggJDAgIiRAIgorICAgIGZpCisgIGZpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorCisKKyMjCisjICAgU3RhbmRhcmQgYW5kIHBhdGggcHJvZ3JhbSBjaGVja3M6CisjIworCitBQ19QUk9HX0VHUkVQCitBQ19QUk9HX0dSRVAKK0FDX1BST0dfSU5TVEFMTAorQUNfUFJPR19MTl9TCitBQ19QUk9HX01BS0VfU0VUCitBQ19QUk9HX1NFRAorCitBQ19DSEVDS19QUk9HUyhbRklMRV0sIFtmaWxlXSkKK2lmIHRlc3QgeCRhY19jdl9wcm9nX0ZJTEUgPSB4OyB0aGVuCisgICMgVGhlIGZpbGUgcHJvZ3JhbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRlZmF1bHQgQ3lnd2luIHNldHVwLCBhbHRob3VnaAorICAjIHRoaXMgcHJvZ3JhbSBpcyBlc3NlbnRpYWwgZm9yIGxpYnRvb2wgdG8gd29yayBwcm9wZXJseS4gSXQgaXMgbm9udHJpdmlhbAorICAjIHRvIGRlZHVjZSBmcm9tIHRoZSBtZXNzYWdlIHByaW50ZWQgYnkgbGlidG9vbCB0aGF0IHRoZSAnZmlsZScgdG9vbCBpcworICAjIG1pc3NpbmcgYW5kIGxpYnRvb2wgZG9lcyBub3QgYWJvcnQgd2hlbiB0aGUgZmlsZSBwcm9ncmFtIGlzIG5vdCBmb3VuZC4gU28KKyAgIyBzdG9wIG5vdyBpZiB0aGUgZmlsZSBwcm9ncmFtIGhhcyBub3QgYmVlbiBmb3VuZC4KKyAgQUNfTVNHX0VSUk9SKFtmaWxlIHByb2dyYW0gbm90IGZvdW5kIGFsdGhvdWdoIGl0IGlzIG5lZWRlZCBieSBsaWJ0b29sLl0sIFsxXSkKK2ZpCisKK0FDX0NIRUNLX1BST0dTKEZJTkQsICAgZmluZCkKK0FDX0NIRUNLX1BST0dTKFdIT0FNSSwgd2hvYW1pIGxvZ25hbWUsIHdob2FtaSkKKworQUNfUEFUSF9QUk9HKEFVVE9DT05GLCAgICBhdXRvY29uZikKK0FDX1BBVEhfUFJPRyhBVVRPSEVBREVSLCAgYXV0b2hlYWRlcikKK0FDX1BBVEhfUFJPRyhbUEVSTFBST0ddLCAgcGVybCkKK0FDX1BBVEhfUFJPRyhbUFNQUk9HXSwgICAgcHMpCitBQ19QQVRIX1BST0coW1BZVEhPTlBST0ddLHB5dGhvbikKKworQUNfUEFUSF9QUk9HKFtVTkFNRVBST0ddLCB1bmFtZSkKK0FDX0RFRklORV9VTlFVT1RFRChVTkFNRVBST0csIiRVTkFNRVBST0ciLCBbV2hlcmUgaXMgdGhlIHVuYW1lIGNvbW1hbmRdKQorCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfQVVUT0NPTkYiID0gIngiOyB0aGVuCisJQVVUT0NPTkY9IjoiCisJQUNfU1VCU1QoQVVUT0NPTkYpCitmaQoraWYgdGVzdCAieCRhY19jdl9wcm9nX0FVVE9IRUFERVIiID0gIngiOyB0aGVuCisJQVVUT0hFQURFUj0iOiIKKwlBQ19TVUJTVChBVVRPSEVBREVSKQorZmkKKworTUFLRT0ke01BS0UtIm1ha2UifQorJE1BS0UgLXYgLWYgL2Rldi9udWxsIDI+L2Rldi9udWxsIHwgJEdSRVAgR05VID4vZGV2L251bGwKK2hhdmVfZ251X21ha2U9JD8KKworCisjIworIyAgIFRoZSBQZXJsIGZ1bmN0aW9uIHN5c3RlbSgpIGlzIHVzZWQgZm9yIHJ1bm5pbmcgdGhlIE5ldC1TTk1QIHJlZ3Jlc3Npb24KKyMgICB0ZXN0cy4gRmluZCBvdXQgd2hldGhlciB0aGF0IGZ1bmN0aW9uIGludm9rZXMgYSBQT1NJWCBzaGVsbCwgd2hpY2ggaXMKKyMgICBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcnVuIHRoZSByZWdyZXNzaW9uIHRlc3RzLiBXaGVuIHVzaW5nIFdpbmRvd3MgKyBNU1lTCisjICAgKyBBY3RpdmVTdGF0ZSBQZXJsLCBQZXJsJ3Mgc3lzdGVtKCkgZnVuY3Rpb24gZG9lcyBpbnZva2UgV2luZG93cycgY21kLmV4ZQorIyAgIHdoaWNoIGlzIG5vdCBhIFBPU0lYIHNoZWxsLgorIyMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBQZXJsIGZ1bmN0aW9uIHN5c3RlbSgpIGludm9rZXMgYSBQT1NJWCBzaGVsbF0pCitpZiB0ZXN0ICJ4JFBFUkxQUk9HIiAhPSAneCcgJiYgdGVzdCAteCAiJFBFUkxQUk9HIiAmJiB0ZXN0ICJ4YCRQRVJMUFJPRyAtZSAnc3lzdGVtKCdcJydlY2hvICRPU1RZUEUnXCcnKTsnYCIgIT0gJ3gkT1NUWVBFJzsgdGhlbgorICAgIFBFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTEw9eWVzCitlbHNlCisgICAgUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTD1ubworZmkKK0FDX01TR19SRVNVTFQoWyRQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMXSkKK0FDX1NVQlNUKFtQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMXSkKKworCisjIworIyAgIENvbXBpbGF0aW9uLXJlbGF0ZWQgcHJvZ3JhbSBjaGVja3M6CisjIworCitBQ19MQU5HKFtDXSkKK0FDX1BST0dfQ0MKK0FDX1BST0dfQ1BQCitMSU5LQ0M9JHtMSU5LQ0MtIiRDQyJ9CitBQ19TVUJTVChMSU5LQ0MpCisKK0FDX0FJWAorQUNfQ19DT05TVAorQUNfQ19JTkxJTkUKKworIyAgICAgICBsaWJ0b29sIHN0dWZmIGZvciBzaGFyZWQvc3RhdGljIGxpYnJhcmllcy4KKyMKK0xUX1BSRVJFUShbMi4yLjZdKQorTFRfSU5JVChbd2luMzItZGxsXSkKK0FDX1NVQlNUKExJQlRPT0xfREVQUykKKworCisjIworIyAgIEJ1aWxkIGVudmlyb25tZW50OgorIyMKKworIyAgIGRldmVsb3BlciBidWlsZCAKKyMgICAgICAgKGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGJ1aWxkaW5nIGZyb20gU1ZOIGNoZWNrb3V0KQorIworaWYgdGVzdCAieCRkZXZlbG9wZXIiICE9ICJ4bm8iIC1hIC1mICRzcmNkaXIvcmVtb3ZlLWZpbGVzOyB0aGVuCisgICAgZGV2ZWxvcGVyPSJ5ZXMiCitmaQorQUNfTVNHX0NIRUNLSU5HKFtmb3IgZGV2ZWxvcGVyIGdjYyBmbGFnc10pCitpZiB0ZXN0ICJ4JGRldmVsb3BlciIgPSAieHllcyIgLWEgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgorCisgICAgIyAgICAgICBXV1dYWFggLSBzdHJpY3QgdHlwZSBjaGVja2luZworICAgICMKKyAgICBERVZGTEFHUz0iLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3dyaXRlLXN0cmluZ3MgLVdjYXN0LXF1YWwiCitlbHNlCisgICAgREVWRkxBR1M9IiIKK2ZpCitBQ19NU0dfUkVTVUxUKCRERVZGTEFHUykKK0FDX1NVQlNUKERFVkZMQUdTKQorCisKKyMgICBidWlsZGluZyBvdXRzaWRlIHNvdXJjZSBkaXJlY3RvcnkKKyMKKyMgICAgICAgYSkgZW5zdXJlIGJ1aWxkIGluY2x1ZGUgcGF0aHMgYXJlIGJlZm9yZSBzb3VyY2UKKyMgICAgICAgYikgZW5zdXJlIEdOVSBtYWtlIHVzZXMgJ3ZwYXRoJyBpbnN0ZWFkIG9mICdWUEFUSCcKKyMKK05PTl9HTlVfVlBBVEg9IlZQQVRIID0iCitHTlVfdnBhdGg9IiN2cGF0aCIKKworIyAgICAgICBkZWZpbmUgaW5jbHVkZSBwYXRocyByZWxhdGl2ZSB0byB0b3Bfc3JjZGlyCisjICAgICAgIHR3ZWFrIGluY2x1ZGVzIGlmIHdlJ3JlIGJ1aWxkaW5nIG91dHNpZGUgb2YgdGhlIHNvdXJjZSBkaXIKKyMKK2lmIHRlc3QgIngkc3JjZGlyIiA9ICJ4LiI7IHRoZW4KKyAgICBUT1BfSU5DTFVERVM9U1JDX1RPUF9JTkNMVURFUworICAgIFNOTVBMSUJfSU5DTFVERVM9U1JDX1NOTVBMSUJfSU5DTFVERVMKKyAgICBBR0VOVF9JTkNMVURFUz1TUkNfQUdFTlRfSU5DTFVERVMKKyAgICBIRUxQRVJfSU5DTFVERVM9U1JDX0hFTFBFUl9JTkNMVURFUworICAgIE1JQkdST1VQX0lOQ0xVREVTPVNSQ19NSUJHUk9VUF9JTkNMVURFUworZWxzZQorICAgIFRPUF9JTkNMVURFUz1CTERfVE9QX0lOQ0xVREVTCisgICAgU05NUExJQl9JTkNMVURFUz1CTERfU05NUExJQl9JTkNMVURFUworICAgIEFHRU5UX0lOQ0xVREVTPUJMRF9BR0VOVF9JTkNMVURFUworICAgIEhFTFBFUl9JTkNMVURFUz1CTERfSEVMUEVSX0lOQ0xVREVTCisgICAgTUlCR1JPVVBfSU5DTFVERVM9QkxEX01JQkdST1VQX0lOQ0xVREVTCisgICAgaWYgdGVzdCAkaGF2ZV9nbnVfbWFrZSAtZXEgMCA7IHRoZW4KKyAgICAgICAgTk9OX0dOVV9WUEFUSD0iI1ZQQVRIID0iCisgICAgICAgIEdOVV92cGF0aD0idnBhdGgiCisgICAgZmkKK2ZpCitBQ19TVUJTVChUT1BfSU5DTFVERVMpCitBQ19TVUJTVChTTk1QTElCX0lOQ0xVREVTKQorQUNfU1VCU1QoQUdFTlRfSU5DTFVERVMpCitBQ19TVUJTVChIRUxQRVJfSU5DTFVERVMpCitBQ19TVUJTVChNSUJHUk9VUF9JTkNMVURFUykKK0FDX1NVQlNUKEVYVEVSTkFMX01JQkdST1VQX0lOQ0xVREVTKQorQUNfU1VCU1QoR05VX3ZwYXRoKQorQUNfU1VCU1QoTk9OX0dOVV9WUEFUSCkKKworCisjIworIyAgIFN5c3RlbS1yZWxhdGVkIGNvbXBpbGF0aW9uIGNoZWNrczoKKyMjCisKKyMgICAgICAgV2hhdCBzeXN0ZW0gYXJlIHdlIGJ1aWxkaW5nIGZvcgorIworQUNfQ0FOT05JQ0FMX1RBUkdFVAorY2hhbmdlcXVvdGUoLCApCitQQVJUSUFMVEFSR0VUT1M9YGVjaG8gJHRhcmdldF9vcyB8IHNlZCAncy9bLS5fXS4qLy8nYAorY2hhbmdlcXVvdGUoWywgXSkKK0FDX01TR19DQUNIRV9BREQoQnVpbGRpbmcgZm9yOiAgICAgICAgICAgICAgICRQQVJUSUFMVEFSR0VUT1MpCisKKworIworIyAgICBXaGV0aGVyIG9yIG5vdCBDeWd3aW4ncyBsZCByZWNvZ25pemVzIHRoZSBmbGFnIC1uby11bmRlZmluZWQuIAorIworCitjYXNlIHgkdGFyZ2V0X29zIGluCit4Y3lnd2luKikKKyAgc2F2ZWRfTERGTEFHUz0kTERGTEFHUworCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgbGlua2VyIHN1cHBvcnRzIC1uby11bmRlZmluZWRdKQorICBMREZMQUdTPSIkc2F2ZWRfTERGTEFHUyAtV2wsLW5vLXVuZGVmaW5lZCIKKyAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorICAgICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVChbeWVzXSk7IGRubAorICAgICAgICAgICAgICAgICAgTERfTk9fVU5ERUZJTkVEPS1uby11bmRlZmluZWRdLAorICAgICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgIAorICBMREZMQUdTPSIkc2F2ZWRfTERGTEFHUyIKKyAgOzsKK2VzYWMKKworQUNfU1VCU1QoTERfTk9fVU5ERUZJTkVEKQorCisKKyMKKyMgICBTb2NrZXQgbGlicmFyeTogZWl0aGVyICdkZWZhdWx0JyAobm9uLU1pbkdXKSBvciAnd2luc29jazInIChNaW5HVykuCisjCitjYXNlIHgkdGFyZ2V0X29zIGluCisgIHhtaW5ndyopCisgICAgd2l0aF9zb2NrbGliPXdpbnNvY2syCisgICAgaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KKyAgICAgIENGTEFHUz0iLURfV0lOMzJfV0lOTlQ9MHgwNTAxICRDRkxBR1MiCisgICAgZmkKKyAgICA7OworICAqKQorICAgIHdpdGhfc29ja2xpYj1kZWZhdWx0OzsKK2VzYWMKKworCisjICAgQ2hlY2sgc3lzdGVtIGRlZmluZSBiZWhhdmlvdXIKKyMgICAgICAgRG9lcyAiLVV4IC1EeD14IiB3b3JrIGFzIGV4cGVjdGVkPworIworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVuLWRlZmluZSB0YXJnZXQgc3lzdGVtIHRva2VuIChiZWZvcmUgcmVkZWZpbmluZyldKQorT0xEX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCitDUFBGTEFHUz0iLVUkUEFSVElBTFRBUkdFVE9TIC1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgorCitBQ19FR1JFUF9DUFAoeWVzLAorICAgIFtbCisjaWZkZWYgJFBBUlRJQUxUQVJHRVRPUworeWVzCisjZW5kaWYKKyAgICBdXSwKKyAgICBbICBQQVJUSUFMVEFSR0VURkxBR1M9Ii1VJFBBUlRJQUxUQVJHRVRPUyAtRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKKyAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sCisgICAgWyAgUEFSVElBTFRBUkdFVEZMQUdTPSItRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKKyAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pXSkKK0NGTEFHUz0iJENGTEFHUyAkUEFSVElBTFRBUkdFVEZMQUdTIgorQ1BQRkxBR1M9IiRPTERfQ1BQRkxBR1MiCisKKworIyAgICAgICBEZXRlcm1pbmUgYXBwcm9wcmlhdGUgPG5ldC1zbm1wL3N5c3RlbS97b3N9Lmg+IGluY2x1ZGUKKyMKK0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3RlbSBpbmNsdWRlIGZpbGVdKQorY2hhbmdlcXVvdGUoLCApCitmaWxlYmFzZT0kdGFyZ2V0X29zCisjIGlnbm9yZSBiaW5hcnkgZm9ybWF0IGluZGljYXRpb24KK2ZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvZWxmLy8nYAorZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9hb3V0Ly8nYAorZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9lY29mZi8vJ2AKK2ZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvY29mZi8vJ2AKK3doaWxlIHRlc3QgIngkZmlsZWJhc2UiICE9ICJ4JGxhc3QiIC1hICEgLWYgJHNyY2Rpci9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS8kZmlsZWJhc2UuaAorZG8KKyAgICBsYXN0PSRmaWxlYmFzZQorICAgIGZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvWy0uX11bXi0uX10qJC8vJ2AKKyAgICBpZiB0ZXN0ICJ4JGZpbGViYXNlIiA9ICJ4JGxhc3QiOyB0aGVuCisJZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9bMC05XSokLy8nYAorICAgIGZpCitkb25lCisKK2lmIHRlc3QgIngkZmlsZWJhc2UiID0gIngkbGFzdCI7IHRoZW4KKyAgICBmaWxlYmFzZT0iZ2VuZXJpYyIKK2ZpCithY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEU9Im5ldC1zbm1wL3N5c3RlbS8kZmlsZWJhc2UuaCIKK2NoYW5nZXF1b3RlKFssIF0pCitBQ19NU0dfUkVTVUxUKCRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUpCitBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFLCAiJGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSIpCisKKworIyAgICAgICBEZXRlcm1pbmUgYXBwcm9wcmlhdGUgPG5ldC1zbm1wL21hY2hpbmUve2NwdX0uaD4gaW5jbHVkZQorIworQUNfTVNHX0NIRUNLSU5HKFtmb3IgbWFjaGluZS10eXBlIGluY2x1ZGUgZmlsZV0pCitjaGFuZ2VxdW90ZSgsICkKK2ZpbGViYXNlPSR0YXJnZXRfY3B1Cit3aGlsZSB0ZXN0ICJ4JGZpbGViYXNlIiAhPSAieCRsYXN0IiAtYSAhIC1mICRzcmNkaXIvaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lLyRmaWxlYmFzZS5oCitkbworICAgIGxhc3Q9JGZpbGViYXNlCisgICAgZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgJFNFRCAncy9bLS5fXVteLS5fXSokLy8nYAorZG9uZQorCitpZiB0ZXN0ICJ4JGZpbGViYXNlIiA9ICJ4JGxhc3QiOyB0aGVuCisgICAgZmlsZWJhc2U9ImdlbmVyaWMiCitmaQorYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRT0ibmV0LXNubXAvbWFjaGluZS8kZmlsZWJhc2UuaCIKK2NoYW5nZXF1b3RlKFssIF0pCitBQ19NU0dfUkVTVUxUKFskYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRV0pCitBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSwgIiRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFIikKKworCisjIworIyAgIFBsYXRmb3JtLXNwZWNpZmljIGNvbXBpbGF0aW9uIGNoZWNrczoKKyMjCisKKyMgICBQcmVwcm9jZXNzb3IgY2hlY2tzOgorIworCisjICAgICAgIE1vcmUgc2Vuc2libGUgc3lzdGVtIGlkZW50aWZpZXIgICAgICAgICAgICAgICAgIChNaW5HVykKKyMKK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCisJQ0ZMQUdTPSIkQ0ZMQUdTIC1EbWluZ3czMiIKK2ZpCisKKyMgICAgICAgSGFuZGxlIC5pbiBmaWxlIGV4dGVuc2lvbiAgICAgICAgICAgICAgICAgICAgICAgKEdDQykKKyMKK0FDX01TR19DSEVDS0lORyhbZm9yIGFkZGl0aW9uYWwgY3BwIGZsYWdzXSkKK2lmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiAtYSAieCRDUFAiID0gIngkQ0MgLUUiOyB0aGVuCisgICAgRVhUUkFDUFBGTEFHUz0iLXggYyIKK2Vsc2UKKyAgICBFWFRSQUNQUEZMQUdTPSIiCitmaQorCisjICAgICAgIFNvbGFyaXMgZXh0cmEgQ1BQIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorIworaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIjsgdGhlbgorICAgIGNhc2UgJHRhcmdldF9vcyBpbgorICAgICAgICBzb2xhcmlzKikgRVhUUkFDUFBGTEFHUz0iJEVYVFJBQ1BQRkxBR1MgLVhzIiA7OworICAgIGVzYWMKK2ZpCisKK0FDX1NVQlNUKEVYVFJBQ1BQRkxBR1MpCitBQ19NU0dfUkVTVUxUKCRFWFRSQUNQUEZMQUdTKQorCisKKyMgICBDb21waWxlciBjaGVja3M6CisjCisKK0FDX1BBVEhfUFJPRyhbQ0NQQVRIXSwkQ0MpCitjYXNlICR0YXJnZXRfb3MgaW4KKyAgICBic2RpKikKKyAgICAgICAgIyAgIENoZWNrIGZvciBidW5kbGVkIGNvbXBpbGVyICAgICAgICAgICAgICAgICAgKEJTRGkpCisgICAgICAgICMKKwlpZiB0ZXN0ICJ4JENDUEFUSCIgPSAieC91c3IvdWNiL2NjIiAtbyAieCRDQ1BBVEgiID0gIngvdXNyL2Jpbi9jYyI7IHRoZW4KKwkgICAgQUNfTVNHX0VSUk9SKFsKKworKioqIFRoZSBCU0RJIC91c3IvdWNiL2NjIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuICAKKyoqKiBQbGVhc2UgcnVuIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1nY2MKK10pCisJZmkKKyAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgICAjICAgQ2hlY2sgZm9yIGJ1bmRsZWQgY29tcGlsZXIgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyAgICAgICAgIworCWlmIHRlc3QgIngkQ0NQQVRIIiA9ICJ4L3Vzci91Y2IvY2MiOyB0aGVuCisJICAgIEFDX01TR19FUlJPUihbCisKKyoqKiBUaGUgc29sYXJpcyAvdXNyL3VjYi9jYyBjb21waWxlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLiAgCisqKiogUGxlYXNlIHB1dCBhIGRpZmZlcmVudCBjb21waWxlciBpbiB5b3VyIHBhdGggZmlyc3Qgb3IgcnVuCisqKiogY29uZmlndXJlIHdpdGggLS13aXRoLWNjPVhYLCB3aGVyZSBYWCBpcyB0aGUgY29tcGlsZXIgeW91IHdhbnQgdG8gdXNlLgorXSkKKwlmaQorICAgIDs7Citlc2FjCisKKworIyAgIENvbXBpbGVyIGZsYWdzOgorIworCisjIFRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBpcyBub3Qgc3RyaWN0LWFsaWFzaW5nIHNhZmUsIHNvIGFkZAorIyAtZm5vLXN0cmljdC1hbGlhc2luZyB0byAkQ0ZMQUdTIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdC4KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgLWZuby1zdHJpY3QtYWxpYXNpbmddKQorbmV0c25tcF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK0NGTEFHUz0iLWZuby1zdHJpY3QtYWxpYXNpbmcgJENGTEFHUyIKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sIFtBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sIFsKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBDRkxBR1M9IiRuZXRzbm1wX3NhdmVfQ0ZMQUdTIgorXSkKKworCisjICAgTGlua2VyIGNoZWNrczoKKyMKKyAgICAKK2Nhc2UgJHRhcmdldF9vcyBpbgorICAgIGFpeDQuMip8YWl4NC4zKnxhaXg1KnxhaXg2KnxhaXg3KikKKyAgICAgICAgIyAgIFJ1bnRpbWUgbGlua2luZyBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgKEFJWCkKKyAgICAgICAgIworICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doYXQgbGlua2VyIGZsYWdzIHRvIGFkZCB0byBlbmFibGUgcnVudGltZSBsaW5raW5nIG9uIEFJWF0pCisgICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FpeF9ydW50aW1lbGlua2luZ19mbGFnc19vaz15ZXMKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBpZiB0ZXN0ICJYJG5ldHNubXBfYWl4X3J1bnRpbWVsaW5raW5nX2ZsYWdzX29rIiAhPSAiWHllcyI7IHRoZW4KKwkgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCisJICAgICAgICBuZXRzbm1wX2FpeF9sZGZsYWdzPSItV2wsLWJydGwiCisJICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FpeF9sZGZsYWdzPSItYnJ0bCIKKwkgICAgZmkKKyAgICAgICAgICAgIExERkxBR1M9IiRuZXRzbm1wX2FpeF9sZGZsYWdzICRMREZMQUdTIgorCSAgICBBQ19NU0dfUkVTVUxUKCRuZXRzbm1wX2FpeF9sZGZsYWdzKQorCWVsc2UKKwkgICAgQUNfTVNHX1JFU1VMVChbbm9uZV0pCisJZmkKKwk7OworCisgICAgZGFyd2luOCp8ZGFyd2luOSp8ZGFyd2luMTAqfGRhcndpbjExKnxkYXJ3aW4xMip8ZGFyd2luMTMqKQorICAgICAgICAjICAgRmxhdCBOYW1lc3BhY2UgbGlua2luZyAgICAgICAgICAgICAgICAgICAgICAoTWFjIE9TL1gpCisgICAgICAgICMKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGRhcndpbiBsZCBtaWdodCBuZWVkIC1mbGF0X25hbWVzcGFjZV0pCisJaWYgdGVzdCAteiAiJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCI7IHRoZW4KKwkJTERGTEFHUz0iLWZsYXRfbmFtZXNwYWNlIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24gLWZyYW1ld29yayBDb3JlU2VydmljZXMgLWZyYW1ld29yayBEaXNrQXJiaXRyYXRpb24gLWZyYW1ld29yayBJT0tpdCAkTERGTEFHUyIKKwkJQUNfTVNHX1JFU1VMVChbeWVzXSkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoW25vXSkKKwlmaQorCTs7CisKKyAgICAqKQorICAgICAgICA7OworZXNhYworCisKKyMgICAgICAgZHBrZyBwYWNrYWdlIChzd2ludHN0X2FwdCkKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworQUNfUEFUSF9QUk9HKFtEUEtHX1FVRVJZX1BBVEhdLCBkcGtnLXF1ZXJ5KQoraWYgdGVzdCB4JERQS0dfUVVFUllfUEFUSCAhPSB4OyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfRFBLR19RVUVSWSwgMSwgW1NldCBpZiB0aGUgZHBrZy1xdWVyeSBjb21tYW5kIGlzIGF2YWlsYWJsZV0pCitmaQorCisKKyMjCisjICAgTm9uLXByb2dyYW0vY29tcGlsYXRpb24gY2hlY2tzOgorIyMKKworIyAgICAgICBTdWJzdGl0dXRlIHZlcnNpb24gbnVtYmVyLgorIworQUNfU1VCU1QoVkVSU0lPTiwgJFBBQ0tBR0VfVkVSU0lPTikKK0FDX01TR19DQUNIRV9BREQoTmV0LVNOTVAgVmVyc2lvbjogICAgICAgICAgICRQQUNLQUdFX1ZFUlNJT04pCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjZiMmMwCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzCkBAIC0wLDAgKzEsNzE1IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGRhdGEgc3RydWN0dXJlcyAmIG1lbWJlcnMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFNpbXBsZSBjaGVja3M6CisjIworCisjICAgICAgIHN0cnVjdCBhcnBoZAorIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGFycGhkLmF0X25leHRdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JRl9FVEhFUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IGRlc19rc19zdHJ1Y3QKKyMgICAgICAgICAoJ3dlYWtfa2V5JyBpbmRpY2F0ZXMgb2xkZXIgdmVyc2lvbiBvZiBPcGVuU1NMKQorIyAgIExpYnJhcnk6CisjCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2Rlc19oIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgZGVzX2tzX3N0cnVjdC53ZWFrX2tleV0sLCxbWworI2lmZGVmIEhBVkVfT1BFTlNTTF9ERVNfSAorI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisjZW5kaWYKKyAgICBdXSkKK2ZpCisKKyMgICAgICAgc3RydWN0IGRpcmVudAorIyAgICAgICAgIChzZWUgYWxzbyBBQ19TVFJVQ1RfRElSRU5UX0RfVFlQRSkKKyMgICBMaWJyYXJ5OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGRpcmVudC5kX3R5cGVdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQKKyMKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpbnV4X2V0aHRvb2xfaCIgPSAieHllcyIgOyB0aGVuCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgZXRodG9vbF9jbWQuc3BlZWRfaGldLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX0xJTlVYX0VUSFRPT0xfSAorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNlbmRpZgorICAgIF1dKQorZmkKKworIyAgICAgICBzdHJ1Y3QgaXBzdGF0CisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgaXBzdGF0Lmlwc19jYW50ZnJhZywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX2RlbGl2ZXJlZCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX2ZyYWdkcm9wcGVkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfZnJhZ21lbnRlZCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX2xvY2Fsb3V0LAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfbm9wcm90bywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX25vcm91dGUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19vZHJvcHBlZCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX29mcmFnbWVudHMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19yZWFzc2VtYmxlZF0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorICAgIF1dKQorIyAgICAgICBzdHJ1Y3QgaXA2c3RhdAorIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGlwNnN0YXQuaXA2c19leHRoZHJ0b29sb25nIF0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUNl9JUDZfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+CisjZW5kaWYKKyAgICBdXSkKKworIworIyAgIE5vdC1Vc2VkOgorQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGlwc3RhdC5pcHNfY2FudGZvcndhcmQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19mcmFndGltZW91dF0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBtYnN0YXQKKyMgICBOb3QtVXNlZDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBtYnN0YXQubV9jbHVzdGVycywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnN0YXQubV9jbGZyZWUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJzdGF0Lm1fbWJ1ZnNdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NQlVGX0gKKyNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2VuZGlmCisgICAgXV0pCisKKyMJc3RydWN0IHV2bWV4cAorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHV2bWV4cC5wZ3N3YXBpbl0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2luY2x1ZGUgPHV2bS91dm1fZXh0ZXJuLmg+CisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IG5saXN0CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgbmxpc3Qubl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBubGlzdDY0Lm5fdmFsdWVdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX05MSVNUX0gKKyNpbmNsdWRlIDxubGlzdC5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHNpZ2FjdGlvbgorIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHNpZ2FjdGlvbi5zYV9zaWdhY3Rpb25dLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TSUdOQUxfSAorI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBzb2NrYWRkcgorIyAgIExpYnJhcnk6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc29ja2FkZHIuc2FfbGVuLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyLnNhX3VuaW9uLnNhX2dlbmVyaWMuc2FfZmFtaWx5MiwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLnNzX2ZhbWlseSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLl9fc3NfZmFtaWx5XSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfV0lOU09DSzJfSCkKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgICAgIChzZWUgUkZDIDI1NTMpCisjICAgTGlicmFyeToKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9zY29wZV9pZF0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBzb2NrYWRkcl91bgorIyAgIExpYnJhcnk6CisjCitBQ19DSEVDS19TSVpFT0YoW3NvY2thZGRyX3VuLnN1bl9wYXRoXSwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQKKyAgICBbCisjaWYgSEFWRV9TWVNfVU5fSAorI2luY2x1ZGUgPHN5cy91bi5oPgorI2VuZGlmCitzdHJ1Y3Qgc29ja2FkZHJfdW4gc29ja2FkZHJfdW47CisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHN0YXRmcworIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHN0YXRmcy5mX2ZhdmFpbCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ZnMuZl9mZnJlZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ZnMuZl9maWxlcywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ZnMuZl9mbGFncywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ZnMuZl9mcnNpemVdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZiAKKyNpZmRlZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYgCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHN0YXR2ZnMKKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzdGF0dmZzLmZfZmlsZXMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdHZmcy5mX2Zyc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0dmZzLm1udF9kaXJdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3Qgc3dkZXZ0CisjICAgTm90LVVzZWQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3dkZXZ0LnN3X25ibGtzZW5hYmxlZF0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX0NPTkZfSAorI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3QgdGNwc3RhdAorIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHRjcHN0YXQudGNwX3Jjdm1lbWRyb3BdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FT1VUX0gKKyNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfVENQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3QgdG0KKyMgICBMaWJyYXJ5OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHRtLnRtX2dtdG9mZl0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIGV4dGVybiB0aW1lem9uZQorQUNfTVNHX0NIRUNLSU5HKFtleHRlcm4gdGltZXpvbmVdKQorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorXV0sIFtbCisgIHJldHVybiB0aW1lem9uZTsKK11dKV0sIFsKK0FDX01TR19SRVNVTFQoW3llc10pCitBQ19ERUZJTkUoW0hBVkVfVElNRVpPTkVfVkFSSUFCTEVdLCBbMV0sIFtEZWZpbmUgaWYgYSB0aW1lem9uZSB2YXJpYWJsZSBpcyBkZWNsYXJlZCBpbiA8c3lzL3RpbWUuaD5dKQorXSwgWworQUNfTVNHX1JFU1VMVChbbm9dKQorXSkKKworIyAgICAgICBzdHJ1Y3QgdGltZXpvbmUKKyMgICBMaWJyYXJ5OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHRpbWV6b25lLnR6X2RzdHRpbWVdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19USU1FQl9ICisjIGluY2x1ZGUgPHN5cy90aW1lYi5oPgorI2VuZGlmCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHVkcHN0YXQKKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCB1ZHBzdGF0LnVkcHNfZGlzY2FyZCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB1ZHBzdGF0LnVkcHNfZnVsbHNvY2ssCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRwc3RhdC51ZHBzX25vcG9ydCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB1ZHBzdGF0LnVkcHNfbm9wb3J0YmNhc3QsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRwc3RhdC51ZHBzX2lwYWNrZXRzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHVkcHN0YXQudWRwc19vcGFja2V0c10sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKyAgICBdXSkKKworCisKKyMjCisjICAgaWZuZXQtcmVsYXRlZCBjaGVja3M6CisjIworCisjICAgICAgIERvZXMgInN0cnVjdCBpZm5ldCIgbmVlZCBfS0VSTkVMIGRlZmluZWQ/ICAgICAgIChJcml4KQorIworQUNfQ0FDSEVfQ0hFQ0soW2lmIF9LRVJORUwgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1XSwKKyAgICAgICAgW2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTF0sCisgICAgICAgIFthY19jdl9JRk5FVF9ORUVEU19LRVJORUw9dW5rbm93bgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorICAgICAgICAgICAgIF0sIFtbc3RydWN0IGlmbmV0IHRlc3Q7IHRlc3QuaWZfbXR1ID0gMDtdXSldLAorICAgICAgICAgICAgIFthY19jdl9JRk5FVF9ORUVEU19LRVJORUw9bm9dKQorICAgICAgICAgaWYgdGVzdCAiJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPSB1bmtub3duIDsgdGhlbgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisjZGVmaW5lIF9LRVJORUwgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyAgICAgICAgICAgICBdLCBbW3N0cnVjdCBpZm5ldCB0ZXN0OyB0ZXN0LmlmX210dSA9IDA7XV0pXSwKKyAgICAgICAgICAgICBbYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPXllc10pCisgICAgICAgICBmaV0pCisKK2lmIHRlc3QgIngkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA9ICJ4eWVzIjsgdGhlbgorICAgIEFDX0RFRklORShORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCwgMSwKKyAgICAgICAgW2lmbmV0IG5lZWRzIHRvIGhhdmUgX0tFUk5FTCBkZWZpbmVkXSkKK2ZpCisKKyMgICAgICAgRG9lcyAic3RydWN0IGlmbmV0IiBuZWVkIF9LRVJORUxfU1RSVUNUVVJFUyBkZWZpbmVkPyAgICAgICAoRHJhZ29uRmx5IDMpCisjCitBQ19DQUNIRV9DSEVDSyhbaWYgX0tFUk5FTF9TVFJVQ1RVUkVTIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dV0sCisgICAgICAgIFthY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFU10sCisgICAgICAgIFthY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUz11bmtub3duCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisgICAgICAgICAgICAgXSwgW1tzdHJ1Y3QgaWZuZXQgdGVzdDsgdGVzdC5pZl9tdHUgPSAwO11dKV0sCisgICAgICAgICAgICAgW2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTPW5vXSkKKyAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUyIgPSB1bmtub3duIDsgdGhlbgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorICAgICAgICAgICAgIF0sIFtbc3RydWN0IGlmbmV0IHRlc3Q7IHRlc3QuaWZfbXR1ID0gMDtdXSldLAorICAgICAgICAgICAgIFthY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUz15ZXNdKQorICAgICAgICAgZmldKQorCitpZiB0ZXN0ICJ4JGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTIiA9ICJ4eWVzIjsgdGhlbgorICAgIEFDX0RFRklORShORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTLCAxLAorICAgICAgICBbaWZuZXQgbmVlZHMgdG8gaGF2ZSBfS0VSTkVMX1NUUlVDVFVSRVMgZGVmaW5lZF0pCitmaQorCisKKyMgICAgICAgc3RydWN0IGlmYWRkcgorIyAgIE5vdC1Vc2VkOgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGlmYWRkci5pZmFfbmV4dF0sLCxbCisgICAgWworI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyAgICBdCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IGlmbmV0CisjICAgICAgICAgKEJyb2tlbiBvbiBGcmVlQlNEIC0gI2RlZmluZSdkIGluIDxuZXQvaWYuaD4pCisjICAgQWdlbnQ6ICAgKD9vciBOb3QtVXNlZD8pCisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgaWZuZXQuaWZfYWRkcmxpc3QsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfYWRkcmhlYWQudHFoX2ZpcnN0LAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX2JhdWRyYXRlLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX2JhdWRyYXRlLmlmc192YWx1ZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9pYnl0ZXMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfaW1jYXN0cywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9pcWRyb3BzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX2xhc3RjaGFuZ2UudHZfc2VjLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX2xhc3RjaGFuZ2UudHZfbnNlYywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9tdHUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfbm9wcm90bywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9vYnl0ZXMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfb21jYXN0cywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9zcGVlZCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl90eXBlLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX3huYW1lXSwsLFtbCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisgICAgXV0pCisKKworIyBDaGVjayBmb3IgQlNEIDQuMyB2cyA0LjQgc3RydWN0IHJ0ZW50cnkKKyMKK0FDX0NBQ0hFX0NIRUNLKFt0eXBlIG9mIHJ0ZW50cnkgc3RydWN0dXJlXSwKKyAgICBbYWNfY3ZfUlRFTlRSWV9UWVBFXSwKKyAgICBbCisgICAgICAgICMgQlNEIDQuNCBjb21wYXRpYmxlIHN0cnVjdHVyZQorICAgICAgICAjICAgICgncnRfbm9kZXMnIGFycmF5KQorICAgICAgICAjCisgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyAgICAgICAgXSxbCisKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKKyNkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKKyNlbmRpZgorCisgIHN0cnVjdCBydGVudHJ5IHJ0OyAKKyAgcnQucnRfbm9kZXNbMF0ucm5fZmxhZ3MgPSAxOworICBydC5ydF9kc3Q7CisgICAgICAgIF0sIGFjX2N2X1JURU5UUllfVFlQRT0iQlNELTQuNCIpCisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gIngiOyB0aGVuCisgICAgICAgICMgQlNEIDQuMyBjb21wYXRpYmxlIHN0cnVjdHVyZQorICAgICAgICAjICAgICgncnRfaGFzaCcpCisgICAgICAgICMKKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorICAgICAgICBdLFsKKworc3RydWN0IHJ0ZW50cnkgcnQ7IAorcnQucnRfaGFzaDsKKyAgICAgICAgXSwgYWNfY3ZfUlRFTlRSWV9UWVBFPSJCU0QtNC4zIikKKyAgICAgICAgZmkKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieCI7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIEJTRCA0LjMgbm9yIDQuNCBjb21wYXRpYmxlIHN0cnVjdHVyZQorICAgICAgICAjCisgICAgICAgICAgICBhY19jdl9SVEVOVFJZX1RZUEU9InVua25vd24iCisgICAgICAgIGZpCisgICAgXSkKKworaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInhCU0QtNC40IjsgdGhlbgorICAgIEFDX0RFRklORShSVEVOVFJZXzRfNCwgMSwgW1VzZSBCU0QgNC40IHJvdXRpbmcgdGFibGUgZW50cmllcz9dKQorZmkKKworIyAgICBDaGVjayBmb3Igb3J0ZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQWxwaGEpCisjCitpZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieHVua25vd24iOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgcnRlbnRyeV0sCisgICAgICAgIFthY19jdl9zdHJ1Y3RfcnRlbnRyeV0sCisgICAgICAgIFtBQ19FR1JFUF9DUFAob3J0ZW50cnksCisgICAgICAgICAgICBbCisjZGVmaW5lIEtFUk5FTAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIFthY19jdl9zdHJ1Y3RfcnRlbnRyeT1vcnRlbnRyeV0sCisgICAgICAgICAgICBbYWNfY3Zfc3RydWN0X3J0ZW50cnk9cnRlbnRyeSBdKQorICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA9ICJ4cnRlbnRyeSIgOyB0aGVuCisgICAgICAgICAgICAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9InJ0ZW50cnkiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0ib3J0ZW50cnkiCisgICAgICAgIGZpCisgICAgXSkKK2Vsc2UKKyAgICBSVEVOVFJZX1RZUEU9InJ0ZW50cnkiCisgICAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9InJ0ZW50cnkiCitmaQorCitpZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA9ICJ4IjsgdGhlbgorICAgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PXJ0ZW50cnkKK2ZpCitBQ19ERUZJTkVfVU5RVU9URUQoUlRFTlRSWSxzdHJ1Y3QgJHthY19jdl9zdHJ1Y3RfcnRlbnRyeX0sCisgICAgICAgIFtkZWZpbmUgcnRlbnRyeSB0byBvcnRlbnRyeSBvbiBTWVNWIG1hY2hpbmVzIChhbHBoYXMpXSkKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4ODZhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMKQEAgLTAsMCArMSwyMDggQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgdHlwZXMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN0YW5kYXJkIGNoZWNrczoKKyMjCisKK0FDX0NIRUNLX1NJWkVPRihzaG9ydCkKK0FDX0NIRUNLX1NJWkVPRihpbnQpCitBQ19DSEVDS19TSVpFT0YobG9uZykKK0FDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCitBQ19DSEVDS19TSVpFT0YoaW50bWF4X3QpCisKK0FDX1RZUEVfSU5UOF9UCitBQ19UWVBFX0lOVDE2X1QKK0FDX1RZUEVfSU5UMzJfVAorQUNfVFlQRV9JTlQ2NF9UCitBQ19UWVBFX0lOVE1BWF9UCitBQ19UWVBFX1VJTlQ4X1QKK0FDX1RZUEVfVUlOVDE2X1QKK0FDX1RZUEVfVUlOVDMyX1QKK0FDX1RZUEVfVUlOVDY0X1QKK0FDX1RZUEVfVUlOVE1BWF9UCitBQ19UWVBFX0lOVFBUUl9UCitBQ19UWVBFX1VJTlRQVFJfVAorCisjIworIyAgIE90aGVyIHR5cGUgY2hlY2tzOgorIyMKKworQUNfQ0hFQ0tfVFlQRVMoW29mZjY0X3RdKQorQUNfQ0hFQ0tfVFlQRVMoW25mZHNfdF0sLCxbI2luY2x1ZGUgPHN5cy9wb2xsLmg+XSkKKworIyAgIFNvbGFyaXMgc3BlY2lmaWMgY2hlY2tzCisjICAgICAgICh0YWtlbiBmcm9tIFBlcmwncyBjb25maWd1cmUgc2NyaXB0KQorIworQUNfQ0hFQ0tfVFlQRVMoW0NvdW50ZXI2NF0sLCxbI2luY2x1ZGUgPGluZXQvbWliMi5oPl0pCitBQ19DSEVDS19UWVBFUyhbbWliMl9pcElmU3RhdHNFbnRyeV90XSwsLFsjaW5jbHVkZSA8aW5ldC9taWIyLmg+XSkKKworIyAgIE4uQjogIFRoZSBhYm92ZSBjaGVja3MgY291bGQgc2FmZWx5IGJlIG1vdmVkIHRvCisjICAgICAgICAgdGhlIGxhdGVyICdjb25maWdfdHlwZXMnIHN1Yi1zY3JpcHQKKyMKKworCisjIworIyAgIERldGVybWluZSB0aGUgSVB2NiBzdGFjayB0eXBlCisjIworCisjICAgICAgIFRoZXNlIGNoZWNrcyBhbHNvIHNldCB0aGUgTElCUy9DRkxBR1MgdmFyaWFibGVzLAorIyAgICAgICB3aGljaCBtYXkgYmUgbmVlZGVkIGZvciBzdWJzZXF1ZW50IGZ1bmN0aW9uIHRlc3RzCisjCisKK2lmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCisJdjZ0eXBlPXVua25vd24KKwl2NmxpYj1ub25lCisJdjZ0cnlsaWJjPW5vCisKKwlBQ19NU0dfQ0hFQ0tJTkcoW1tpcHY2IHN0YWNrIHR5cGVdXSkKKwlmb3IgaSBpbiB2NmQgdG9zaGliYSBrYW1lIGlucmlhIHpldGEgbGludXgtZ2xpYmMgbGludXgtaW5ldDYgY3lnd2luIHdpbnNvY2syIGdlbmVyaWM7IGRvCisJCWNhc2UgJGkgaW4KKwkJdjZkKQorCQkJQUNfRUdSRVBfQ1BQKHllcywgWworI2luY2x1ZGUgPC91c3IvbG9jYWwvdjYvaW5jbHVkZS9zeXMvdHlwZXMuaD4KKyNpZmRlZiBfX1Y2RF9fCit5ZXMKKyNlbmRpZl0sCisJCQkJW3Y2dHlwZT0kaTsgdjZsaWI9djY7CisJCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7CisJCQkJQ0ZMQUdTPSItSS91c3IvbG9jYWwvdjYvaW5jbHVkZSAkQ0ZMQUdTIl0pCisJCQk7OworCQl0b3NoaWJhKQorCQkJQUNfRUdSRVBfQ1BQKHllcywgWworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2lmZGVmIF9UT1NISUJBX0lORVQ2Cit5ZXMKKyNlbmRpZl0sCisJCQkJW3Y2dHlwZT0kaTsgdjZsaWI9aW5ldDY7CisJCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQorCQkJOzsKKwkJa2FtZSkKKwkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaWZkZWYgX19LQU1FX18KK3llcworI2VuZGlmXSwKKwkJCQlbdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKKwkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKKwkJCQl2NnRyeWxpYmM9eWVzOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKKwkJCTs7CisJCWlucmlhKQorCQkJQUNfRUdSRVBfQ1BQKHllcywgWworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpZmRlZiBJUFY2X0lOUklBX1ZFUlNJT04KK3llcworI2VuZGlmXSwKKwkJCQlbdjZ0eXBlPSRpOworCQkJCXY2bGliPWR1bW15OworCQkJCXY2bGliZGlyPW5vbmU7CisJCQkJdjZ0cnlsaWJjPXllczsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCisJCQk7OworCQl6ZXRhKQorCQkJQUNfRUdSRVBfQ1BQKHllcywgWworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2lmZGVmIF9aRVRBX01JTkFNSV9JTkVUNgorQQoreWVzCisjZW5kaWZdLAorCQkJCVt2NnR5cGU9JGk7IHY2bGliPWluZXQ2OworCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKKwkJCTs7CisJCWxpbnV4LWdsaWJjKQorCQkJQUNfRUdSRVBfQ1BQKHllcywgWworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaWYgZGVmaW5lZChfX0dMSUJDX18pICYmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDXyA+IDIpKQoreWVzCisjZW5kaWZdLAorCQkJCVt2NnR5cGU9JGk7CisJCQkJdjZsaWI9ZHVtbXk7CisJCQkJdjZsaWJkaXI9bm9uZTsKKwkJCQl2NnRyeWxpYmM9eWVzOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKKwkJCTs7CisJCWxpbnV4LWluZXQ2KQorCQkJaWYgdGVzdCAtZCAvdXNyL2luZXQ2OyB0aGVuCisJCQkJdjZ0eXBlPSRpCisJCQkJdjZsaWI9aW5ldDYKKwkJCQl2NmxpYmRpcj0vdXNyL2luZXQ2L2xpYgorCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCisJCQlmaQorCQkJOzsKKwkJY3lnd2luKQorCQkJQUNfRUdSRVBfQ1BQKHllcywgWworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpZmRlZiBfQ1lHV0lOX0lONl9ICit5ZXMKKyNlbmRpZl0sCisJCQkJW3Y2dHlwZT0kaTsKKwkJCQl2NmxpYj1kdW1teTsKKwkJCQl2NmxpYmRpcj1ub25lCisJCQkJdjZ0cnlsaWJjPXllczsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCisgICAgICAgICAgICAgICAgICAgICAgIDs7CisJCXdpbnNvY2syKQorCQkJQUNfRUdSRVBfQ1BQKHllcywgWworI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaWYgZGVmaW5lZChfV1MyVENQSVBfSCkKK3llcworI2VuZGlmXSwKKwkJCQlbdjZ0eXBlPSRpOworCQkJCXY2bGliPWR1bW15OworCQkJCXY2bGliZGlyPW5vbmUKKwkJCQl2NnRyeWxpYmM9eWVzOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKKwkJCTs7CisJCWdlbmVyaWMpCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtbcG9zdHBvbmVkXV0pCisJCQlBQ19DSEVDS19NRU1CRVIoW3N0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9hZGRyXSwsLFsKK0FDX0lOQ0xVREVTX0RFRkFVTFQoKQorWyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCitdXSkKKwkgICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtbaXB2NiBzdGFjayB0eXBlXV0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfYWRkciIgPSAieHllcyI7IHRoZW4KKwkJCQl2NnR5cGU9JGkKKwkJCQl2NmxpYj1kdW1teQorCQkJCXY2bGliZGlyPW5vbmUKKwkJCQl2NnRyeWxpYmM9eWVzCisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisJCQk7OworCQllc2FjCisJCWlmIHRlc3QgIiR2NnR5cGUiICE9ICJ1bmtub3duIjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisKKwlpZiB0ZXN0ICIkdjZsaWIiICE9ICJub25lIjsgdGhlbgorCQlpZiB0ZXN0IC1kICR2NmxpYmRpciAtYSAtZiAkdjZsaWJkaXIvbGliJHY2bGliLmE7IHRoZW4KKwkJCUxJQlM9Ii1MJHY2bGliZGlyIC1sJHY2bGliICRMSUJTIgorCQkJZW5hYmxlX2lwdjY9InllcyIKKwkJCUFDX01TR19SRVNVTFQoWyIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYiR2NmxpYiJdKQorCQllbGlmIHRlc3QgIiR2NnRyeWxpYmMiID0gInllcyI7IHRoZW4KKwkJCWVuYWJsZV9pcHY2PSJ5ZXMiCisJCQlBQ19NU0dfUkVTVUxUKFsiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWJjIl0pCisJCWVsc2UKKwkJCUFDX01TR19FUlJPUihubyBJUHY2IGxpYnJhcnkgbGliJHY2bGliLmEgZm91bmQuKQorCQkJZXhpdCAxCisJCWZpCisJZWxzZQorCQllbmFibGVfaXB2Nj0ibm8iCisJCUFDX01TR19SRVNVTFQoWyIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYiXSkKKwlmaQorZmkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbCBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWVmZGQzCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsCkBAIC0wLDAgKzEsMTcwIEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMKKyMgUHJvbXB0IGZvciB2YXJpb3VzIGJpdHMgb2YgdXNlciBpbmZvcm1hdGlvbgorIworCitpZiB0ZXN0ICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA9ICJ4IjsgdGhlbgorQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB0byBwcm9tcHQgZm9yIHZhbHVlcywgYWNfY3ZfaGF2ZV93YXJuZWQsCitbCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCitBQ19NU0dfTk9USUNFKFsKKworCSAqKioqKioqKioqKioqKiBDb25maWd1cmF0aW9uIFNlY3Rpb24gKioqKioqKioqKioqKioKKworCVlvdSBhcmUgYWJvdXQgdG8gYmUgcHJvbXB0ZWQgd2l0aCBhIHNlcmllcyBvZiBxdWVzdGlvbnMuICBBbnN3ZXIKK3RoZW0gY2FyZWZ1bGx5LCBhcyB0aGV5IGRldGVybWluZSBob3cgdGhlIFNOTVAgYWdlbnQgYW5kIHJlbGF0ZWQKK2FwcGxpY2F0aW9ucyBhcmUgdG8gZnVuY3Rpb24uCisKKwlBZnRlciB0aGUgY29uZmlndXJlIHNjcmlwdCBmaW5pc2hlcywgeW91IGNhbiBicm93c2UgdGhlIG5ld2x5CitjcmVhdGVkIG5ldC1zbm1wLWNvbmZpZy5oIGZpbGUgZm9yIGZ1cnRoZXIgLSBsZXNzIGltcG9ydGFudCAtIHBhcmFtZXRlcnMgdG8KK21vZGlmeS4gIEJlIGNhcmVmdWwgaWYgeW91IHJlLXJ1biBjb25maWd1cmUgdGhvdWdoLCBzaW5jZSBuZXQtc25tcC1jb25maWcuaCAKK3dpbGwgYmUgb3ZlcndyaXR0ZW4uCisKKy1QcmVzcyByZXR1cm4gdG8gY29udGludWUtCitdKQorCityZWFkIHRtcGlucHV0IDwmQVNfT1JJR0lOQUxfU1RESU5fRkQKK2FjX2N2X2hhdmVfd2FybmVkPSJ5ZXMiCitlbHNlCisgIGFjX2N2X2hhdmVfd2FybmVkPSJubyIKK2ZpCitdKQorZWxzZQorICBhY19jdl9oYXZlX3dhcm5lZD0ieWVzIgorZmkKKworTUU9YCRXSE9BTUlgCitpZiB0ZXN0IC1mIC9ldGMvcmVzb2x2LmNvbmY7IHRoZW4KKyAgTE9DPWBhd2sgJy9eZG9tYWluL3tsb2M9JE5GfUVORHtwcmludCBsb2N9JyAvZXRjL3Jlc29sdi5jb25mYAorZmkKK2lmIHRlc3QgIngkTE9DIiA9IHg7IHRoZW4KKyAgTE9DPSJAbm8ud2hlcmUiCitmaQorCitBQ19QUk9NUFRfVVNFUihORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OLFsKKworKioqIERlZmF1bHQgU05NUCBWZXJzaW9uOgorCisJU3RhcnRpbmcgd2l0aCBOZXQtU05NUCA1LjAsIHlvdSBjYW4gY2hvb3NlIHRoZSBkZWZhdWx0IHZlcnNpb24gb2YKK3RoZSBTTk1QIHByb3RvY29sIHRvIHVzZSB3aGVuIG5vIHZlcnNpb24gaXMgZ2l2ZW4gZXhwbGljaXRseSBvbiB0aGUKK2NvbW1hbmQgbGluZSwgb3IgdmlhIGFuICdzbm1wLmNvbmYnIGZpbGUuICBJbiB0aGUgcGFzdCB0aGlzIHdhcyBzZXQgdG8KK1NOTVB2MSwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgdG8gc3dpdGNoIHRvIFNOTVB2MyBpZiBkZXNpcmVkLiAgU05NUHYzCit3aWxsIHByb3ZpZGUgYSBtb3JlIHNlY3VyZSBtYW5hZ2VtZW50IGVudmlyb25tZW50IChhbmQgdGh1cyB5b3UncmUKK2VuY291cmFnZWQgdG8gc3dpdGNoIHRvIFNOTVB2MyksIGJ1dCBtYXkgYnJlYWsgZXhpc3Rpbmcgc2NyaXB0cyB0aGF0CityZWx5IG9uIHRoZSBvbGQgYmVoYXZpb3VyLiAgKFRob3VnaCBzdWNoIHNjcmlwdHMgd2lsbCBwcm9iYWJseSBuZWVkIHRvCitiZSBjaGFuZ2VkIHRvIHVzZSB0aGUgJy1jJyBjb21tdW5pdHkgZmxhZyBhbnl3YXksIGFzIHRoZSBTTk1QdjEKK2NvbW1hbmQgbGluZSB1c2FnZSBoYXMgY2hhbmdlZCBhcyB3ZWxsLikuCisgICBBdCB0aGlzIHByb21wdCB5b3UgY2FuIHNlbGVjdCBcIjFcIiwgXCIyXCIgKGZvciBTTk1QdjJjKSwgb3IgXCIzXCIgYXMKK3RoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBjb21tYW5kIHRvb2xzIChzbm1wZ2V0LCAuLi4pIHRvIHVzZS4gIFRoaXMKK2NhbiBhbHdheXMgYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lIHVzaW5nIHRoZSAtdiBmbGFnIHRvIHRoZSB0b29scywgb3IKK2J5IHVzaW5nIHRoZSBcImRlZlZlcnNpb25cIiB0b2tlbiBpbiB5b3VyIHNubXAuY29uZiBmaWxlLgorICAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249XCJ4XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCit3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitEZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2VdLDMsdW5xdW90ZWQpCisKKyMgd2UgdGVzdGVkIHRoaXMgYWJvdmUgYmVmb3JlIHRoZSBwcm9tcHQsIGJ1dCB0aGUgcHJvbXB0IG1heSBnaXZlIGEgbmV3IHZhbHVlLgorY2FzZSAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OfSIgaW4KKyAgW1sxMjNdXSkgOzsKKyAgMmMpIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049MiA7OworICAqKQorICAgIEFDX01TR19FUlJPUihbSWxsZWdhbCB2ZXJzaW9uIG51bWJlci4gIE9ubHkgMSwgMiAoZm9yIFNOTVB2MmMpIGFuZCAzIGFyZSBzdXBwb3J0ZWQuXSkKKyAgICA7OworZXNhYworCitBQ19QUk9NUFRfVVNFUihORVRTTk1QX1NZU19DT05UQUNULFsKKworKioqIFN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uOgorCisJRGVzY3JpYmVzIHdobyBzaG91bGQgYmUgY29udGFjdGVkIGFib3V0IHRoZSBob3N0IHRoZSBhZ2VudCBpcworcnVubmluZyBvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIFRoaXMKK2NhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZSBcInN5c2NvbnRhY3RcIiBzeW50YXggaW4gdGhlIGFnZW50J3MKK2NvbmZpZ3VyYXRpb24gZmlsZXMuCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1jb250YWN0PVwiY29udGFjdFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQord2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb25dLCRNRUAkTE9DLHF1b3RlZCkKKworQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9TWVNfTE9DLFsKKworKioqIFN5c3RlbSBMb2NhdGlvbjoKKworCURlc2NyaWJlcyB0aGUgbG9jYXRpb24gb2YgdGhlIHN5c3RlbS4gIFRoaXMgaW5mb3JtYXRpb24gaXMKK2F2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICB0aGlzIGNhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZQorXCJzeXNsb2NhdGlvblwiIHN5bnRheCBpbiB0aGUgYWdlbnQncyBjb25maWd1cmF0aW9uIGZpbGVzLgorICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtbG9jYXRpb249XCJsb2NhdGlvblwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQord2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworU3lzdGVtIExvY2F0aW9uXSxVbmtub3duLHF1b3RlZCkKKworaWYgdGVzdCAtZCAvdmFyL2xvZzsgdGhlbgorICBkZWZhdWx0bG9nPSIvdmFyL2xvZy9zbm1wZC5sb2ciCitlbHNlCisgIGRlZmF1bHRsb2c9Ii91c3IvYWRtL3NubXBkLmxvZyIKK2ZpCisgIAorQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9MT0dGSUxFLFsKKworKioqIExvZ2ZpbGUgbG9jYXRpb246CisKKwlFbnRlciB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhlIHNubXBkIGFnZW50IHRvIGR1bXAKK2luZm9ybWF0aW9uICYgZXJyb3JzIHRvLiAgSWYgbm90IGRlZmluZWQgKGVudGVyIHRoZSBrZXl3b3JkIFwibm9uZVwiCithdCB0aGUgcHJvbXB0IGJlbG93KSB0aGUgYWdlbnQgd2lsbCB1c2Ugc3Rkb3V0IGFuZCBzdGRlcnIgaW5zdGVhZC4KKyhOb3RlOiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVyLXJpZGRlbiB1c2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucy4pCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLWxvZ2ZpbGU9XCJwYXRoXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCit3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitMb2NhdGlvbiB0byB3cml0ZSBsb2dmaWxlXSwkZGVmYXVsdGxvZyxxdW90ZWQpCisKK2lmIHRlc3QgLWQgL3ZhcjsgdGhlbgorICBkZWZhdWx0c3RvcmU9Ii92YXIvbmV0LXNubXAiCisgIHVjZGRlZmF1bHRzdG9yZT0iL3Zhci91Y2Qtc25tcCIKK2Vsc2UKKyAgZGVmYXVsdHN0b3JlPSIvZXRjL25ldC1zbm1wIgorICB1Y2RkZWZhdWx0c3RvcmU9Ii9ldGMvdWNkLXNubXAiCitmaQorICAKK0FDX1BST01QVF9VU0VSKE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlksWworCisqKiogc25tcGQgcGVyc2lzdGVudCBzdG9yYWdlIGxvY2F0aW9uOgorCisJRW50ZXIgYSBkaXJlY3RvcnkgZm9yIHRoZSBTTk1QIGxpYnJhcnkgdG8gc3RvcmUgcGVyc2lzdGVudAorZGF0YSBpbiB0aGUgZm9ybSBvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoaXMgZGVmYXVsdCBsb2NhdGlvbiBpcworZGlmZmVyZW50IHRoYW4gdGhlIG9sZCBkZWZhdWx0IGxvY2F0aW9uICh3aGljaCB3YXMgZm9yIHVjZC1zbm1wKS4gIElmCit5b3Ugc3RheSB3aXRoIHRoZSBuZXcgcGF0aCwgSSdsbCBhc2sgeW91IGluIGEgc2Vjb25kIGlmIHlvdSB3aXNoIHRvCitjb3B5IHlvdXIgZmlsZXMgb3ZlciB0byB0aGUgbmV3IGxvY2F0aW9uIChvbmNlIG9ubHkpLiAgSWYgeW91IHBpY2sKK3NvbWUgb3RoZXIgcGF0aCB0aGFuIHRoZSBkZWZhdWx0LCB5b3UnbGwgaGF2ZSB0byBjb3B5IHRoZW0geW91cnNlbGYuCitUaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGggcGlja2luZyB0aGUgb2xkIHBhdGggKCR1Y2RkZWZhdWx0c3RvcmUpIGlmCit5b3UnZCByYXRoZXIuCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5PVwicGF0aFwiIHBhcmFtZXRlciB0bworLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworTG9jYXRpb24gdG8gd3JpdGUgcGVyc2lzdGVudCBpbmZvcm1hdGlvbl0sJGRlZmF1bHRzdG9yZSxxdW90ZWQpCisKK1BFUlNJU1RFTlRfRElSRUNUT1JZPSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZCitBQ19TVUJTVChQRVJTSVNURU5UX0RJUkVDVE9SWSkKK1VDRFBFUlNJU1RFTlRfRElSRUNUT1JZPSR1Y2RkZWZhdWx0c3RvcmUKK0FDX1NVQlNUKFVDRFBFUlNJU1RFTlRfRElSRUNUT1JZKQorCitpZiB0ZXN0ICRQRVJTSVNURU5UX0RJUkVDVE9SWSA9ICIkZGVmYXVsdHN0b3JlIiAtYSAtZCAiJHVjZGRlZmF1bHRzdG9yZSIgLWEgISAtZCAiJGRlZmF1bHRzdG9yZSIgOyB0aGVuCitBQ19DQUNIRV9DSEVDSyhJZiB3ZSBzaG91bGQgY29weSB0aGUgb2xkIHBlcnNpc3RlbnQgZGlyZWN0b3J5LCBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMsCitbCitBQ19QUk9NUFRfVVNFUl9OT19ERUZJTkUoYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTLFsKKworKioqIENvcHlpbmcgb2xkIHVjZC1zbm1wIHBlcnNpc3RlbnQgZmlsZXMgdG8gbmV0LXNubXAgcGVyc2lzdGVudCBkaXJlY3Rvcnk6CisKKwlXb3VsZCB5b3UgbGlrZSB0byBjb3B5IHRoZSBvbGRlciB1Y2Qtc25tcCBwZXJzaXN0ZW50IGZpbGVzCitpbnRvIHlvdXIgbmV3IG5ldC1zbm1wIHBlcnNpc3RlbnQgZmlsZSBwYXRoPyAgVGhpcyB3aWxsIGZ1bmN0aW9uYWxseQorc2F2ZSBhbGwgeW91ciB1Y2Qtc25tcCBkYXRhIGFuZCBsZXQgaXQgYmUgdXNlZCB3aXRoaW4gdGhlIG5ldC1zbm1wCit0b29scy4gIFRoaXMgd2lsbCBvbmx5IGJlIGRvbmUgb25jZSB3aGVuIHlvdSBydW4gbWFrZSBpbnN0YWxsLiAgSWYgeW91Cit3aXNoIHRvIGRvIHRoaXMsIGVudGVyICJ5ZXMiIGF0IHRoZSBwcm9tcHQuCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz1cIm5vXCIgKG9yIFwieWVzXCIpCitwYXJhbWV0ZXJzIHRvIC4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK0NvcHkgdWNkLXNubXAgZGF0YSBpbnRvIHRoZSBuZXQtc25tcCBkYXRhIGRpcmVjdG9yeV0sInllcyIpCitdKQorZWxzZQorYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSJubyIKK2ZpCitDT1BZX1BFUlNJU1RFTlRfRklMRVM9IiRhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMiCitBQ19TVUJTVChDT1BZX1BFUlNJU1RFTlRfRklMRVMpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OTBjODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocwpAQCAtMCwwICsxLDEwMSBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ29uZmlndXJlIHBhdGhzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBQcmVmaXggcGF0aHM6CisjIworCisjICAgTWFpbiBwcmVmaXgKKyMKK2lmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KKyAgcHJlZml4PS91c3IvbG9jYWwKK2ZpCisKKyMgICAgICAgUHJlZml4IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aAorIyAgICAgICAgICAgaS5lLiBiZWdpbiB3aXRoICIvIiAgICAgICAgICAgICAgICAgICAgICAgICAoVW5peCkKKyMgICAgICAgICAgICAgICAgb3IgIltBLVpdOiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdpbmRvd3MpCisjCitmaXJzdGNoYXI9YGVjaG8gJHByZWZpeCB8ICRTRUQgJ3MvXCguXCkuKi9cMS8nYAoraWYgdGVzdCAieCRmaXJzdGNoYXIiICE9ICJ4LyIgOyB0aGVuCisgICBzZWNvbmRjaGFyPWBlY2hvICRwcmVmaXggfCAkU0VEICdzLy5cKC5cKS4qL1wxLydgCisgICBpZiB0ZXN0ICJ4JHNlY29uZGNoYXIiICE9ICJ4OiIgOyB0aGVuCisgICAgICBwcmVmaXg9YHB3ZGAvJHByZWZpeAorICAgICAgZWNobyAiYWRqdXN0aW5nIHByZWZpeCB0byAkcHJlZml4IgorICAgZmkKK2ZpCisKKworIyAgIEV4ZWMgcHJlZml4CisjCisjICAgICAgIFByZWZpeCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgKKyMgICAgICAgICAgIGkuZS4gYmVnaW4gd2l0aCAiLyIgICAgICAgICAgICAgICAgICAgICAgICAgKFVuaXgpCisjICAgICAgICAgICAgICAgIG9yICJbQS1aXToiICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXaW5kb3dzKQorIworaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCisgICBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworZWxzZQorICAgZmlyc3RjaGFyPWBlY2hvICRleGVjX3ByZWZpeCB8ICRTRUQgJ3MvXCguXCkuKi9cMS8nYAorICAgaWYgdGVzdCAieCRmaXJzdGNoYXIiICE9ICJ4LyIgOyB0aGVuCisgICAgICBzZWNvbmRjaGFyPWBlY2hvICRleGVjX3ByZWZpeCB8ICRTRUQgJ3MvLlwoLlwpLiovXDEvJ2AKKyAgICAgIGlmIHRlc3QgIngkc2Vjb25kY2hhciIgIT0gIng6IiA7IHRoZW4KKyAgICAgICAgIGV4ZWNfcHJlZml4PWBwd2RgLyRleGVjX3ByZWZpeAorICAgICAgICAgZWNobyAiYWRqdXN0aW5nIGV4ZWNfcHJlZml4IHRvICRleGVjX3ByZWZpeCIKKyAgICAgIGZpCisgICBmaQorZmkKKworCisjIworIyAgIEVudmlyb25tZW50YWwgdmFyaWFibGVzOgorIyMKKworIyAgICAgICBTTk1QTElCUEFUSAorIworU05NUExJQlBBVEg9IiIKK3RtcHNldD0iJGxpYmRpci9zbm1wIgord2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBMSUJQQVRIIjsgZG8KKyAgICBTTk1QTElCUEFUSD0iJHRtcHNldCIKKyAgICBldmFsIHRtcHNldD0iJHRtcHNldCIKK2RvbmUKK0FDX0RFRklORV9VTlFVT1RFRChTTk1QTElCUEFUSCwiJFNOTVBMSUJQQVRIIikKK0FDX1NVQlNUKFNOTVBMSUJQQVRIKQorQUNfREVGSU5FX1VOUVVPVEVEKFNOTVBETE1PRFBBVEgsIiRTTk1QTElCUEFUSC9kbG1vZCIpCisKKyMgICAgICAgU05NUFNIQVJFUEFUSAorIworU05NUFNIQVJFUEFUSD0iIgordG1wc2V0PSIkZGF0YWRpci9zbm1wIgord2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBTSEFSRVBBVEgiOyBkbworICAgIFNOTVBTSEFSRVBBVEg9IiR0bXBzZXQiCisgICAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCitkb25lCitBQ19ERUZJTkVfVU5RVU9URUQoU05NUFNIQVJFUEFUSCwiJFNOTVBTSEFSRVBBVEgiKQorQUNfU1VCU1QoU05NUFNIQVJFUEFUSCkKKworIyAgICAgICBNSUJESVJTICAgKGRlZmF1bHQpCisjCitpZiB0ZXN0ICJ4JE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIiA9ICJ4IjsgdGhlbgorICAgIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPSJcJEhPTUUvLnNubXAvbWliczokU05NUFNIQVJFUEFUSC9taWJzIgorICAgIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KKyAgICAgICAgIworICAgICAgICAjICAgIFVTZSBXaW5kb3dzLXN0eWxlIHBhdGggc2VwYXJhdG9yCisgICAgICAgIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPWBlY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiIHwgJFNFRCAncy86LzsvZydgCisgICAgZmkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX01JQkRJUlMsIiRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIpCitmaQorQUNfU1VCU1QoTkVUU05NUF9ERUZBVUxUX01JQkRJUlMpCisKKyMgICAgICAgU05NUENPTkZQQVRICisjCitTTk1QQ09ORlBBVEg9IiIKK3RtcHNldD0iJHN5c2NvbmZkaXIvc25tcCIKK3doaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QQ09ORlBBVEgiOyBkbworICAgIFNOTVBDT05GUEFUSD0iJHRtcHNldCIKKyAgICBldmFsIHRtcHNldD0iJHRtcHNldCIKK2RvbmUKK0FDX0RFRklORV9VTlFVT1RFRChTTk1QQ09ORlBBVEgsIiRTTk1QQ09ORlBBVEgiKQorQUNfU1VCU1QoU05NUENPTkZQQVRIKQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24gYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Y4YzdlCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24KQEAgLTAsMCArMSwzNzkgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjICAgUGVybCAmIFB5dGhvbiBzdXBwb3J0CisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBDaGVjayB3aGV0aGVyIE5ldC1TTk1QIGNvbmZpZ3VyYXRpb24gd2lsbCBzdXBwb3J0IFBlcmwKKyMjCisKKyMgICBJbnB1dHM6CisjICAgICAgIGluc3RhbGxfcGVybDogICB3aGV0aGVyIG9yIG5vdCB0byBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMvbm8vdHJ5ICAgKGkuZS4gJ21heWJlJyAtIHRoZSBkZWZhdWx0KQorIyAgICAgICBlbWJlZF9wZXJsOiAgICAgd2hldGhlciBvciBub3QgdG8gZW1iZWQgUGVybCBzdXBwb3J0IHdpdGhpbiB0aGUgYWdlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMvbm8vdHJ5ICAgKGkuZS4gJ21heWJlJyAtIHRoZSBkZWZhdWx0KQorIworIyAgICAgICBhY19jdl9wYXRoX1BFUkxQUk9HOiAgICBQYXRoIHRvIHBlcmwgYmluYXJ5CisKKworIyAgICAgICBFbWJlZGRlZCBQZXJsIHJlcXVpcmVzIFBlcmwgbW9kdWxlcywgYW5kIHRoZSBwZXJsIGJpbmFyeQorIworaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieG5vIiA7IHRoZW4KKyAgICAgICAgaW5zdGFsbF9wZXJsPSJ0cnkiCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JGFjX2N2X3BhdGhfUEVSTFBST0ciID0gIngiIC1vICJ4JGFjX2N2X3BhdGhfUEVSTFBST0ciID0gInhubyIgOyB0aGVuCisgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgIGZpCitmaQorCisjICAgICAgIFBlcmwgbW9kdWxlcyByZXF1aXJlIHRoZSBwZXJsIGJpbmFyeQorIworaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgIG15cGVybD0kYWNfY3ZfcGF0aF9QRVJMUFJPRworICAgIGlmIHRlc3QgJG15cGVybCA9ICJubyIgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19FUlJPUigtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIHJlcXVlc3RlZCBidXQgbm8gcGVybCBleGVjdXRhYmxlIGZvdW5kKQorICAgICAgICBmaQorICAgIGZpCitmaQorCisjICAgICAgIFBlcmwgbW9kdWxlcyByZXF1aXJlIHNoYXJlZCBsaWJyYXJpZXMKKyMKK2lmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9zaGFyZWQiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoUGVybCBzdXBwb3J0IHJlcXVpcmVzIC0tZW5hYmxlLXNoYXJlZCkKKyAgICAgICAgZmkKKyAgICBmaQorZmkKKworIyAgICAgICBQZXJsIG1vZHVsZXMgY2FuIG9ubHkgYmUgaW5zdGFsbGVkIGZyb20gd2l0aGluIHRoZSBzb3VyY2UgdHJlZQorIworaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgYXJlIGluIHRoZSBzb3VyY2UgdHJlZSBzbyB3ZSBjYW4gaW5zdGFsbCBQZXJsIG1vZHVsZXNdKQorICAgIGlmIHRlc3QgIngkc3JjZGlyIiA9ICJ4LiIgLW8gLWQgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlIDsgdGhlbgorICAgICAgICBBQ19NU0dfUkVTVUxUKFtZZXNdKQorICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW05vXSkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtQZXJsIG1vZHVsZXMgY2FuIG5vdCBiZSBidWlsdCBvdXRzaWRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5XSkKKyAgICAgICAgZmkKKyAgICBmaQorZmkgICAgICAKKworCisjICAgVGhlIHJlc3Qgb2YgdGhlIFBlcmwtcmVsYXRlZCBjaGVja3MgYXJlbid0IHJlbGV2YW50CisjICAgICAgIGlmIHdlJ3JlIG5vdCB1c2luZyB0aGUgUGVybCBtb2R1bGVzCisjCitpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCisKKworIyMKKyMgICBDaGVjayBjb21waWxlciBjb21wYXRhYmlsaXR5CisjIworCisgICAgIyAgICAgICBXaGF0IGNvbXBpbGVyIHdhcyB1c2VkIHRvIGJ1aWxkIHRoZSBwZXJsIGJpbmFyeT8KKyAgICAjCisgICAgaWYgdGVzdCAieGVuYWJsZV9wZXJsX2NjX2NoZWNrcyIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFBlcmwgY2NdKQorICAgICAgICBjaGFuZ2VxdW90ZSgsICkKKyAgICAgICAgUEVSTENDPWAkbXlwZXJsIC1WOmNjIHwgJG15cGVybCAtbiAtZSAncHJpbnQgaWYgKHMvXlxzKmNjPS4oWy09XHdcc1wvXSspLjtccyovJDEvKTsnYAorICAgICAgICBjaGFuZ2VxdW90ZShbLCBdKQorICAgICAgICBpZiB0ZXN0ICJ4JFBFUkxDQyIgIT0gIngiIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbJFBFUkxDQ10pCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGRldGVybWluZSB0aGUgY29tcGlsZXIgdGhhdCB3YXMgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS13aXRob3V0LXBlcmwtbW9kdWxlcyB0byBidWlsZCB3aXRob3V0IFBlcmwuXSkKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKworICAgICMgICAgICAgV2FzIEdDQyB1c2VkIHRvIGJ1aWxkIHRoZSBwZXJsIGJpbmFyeT8KKyAgICAjCisgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJFBFUkxDQyBpcyBhIEdOVSBDIGNvbXBpbGVyXSkKKyAgICAgICAgT0xEQ0M9JENDCisgICAgICAgIENDPSIkUEVSTENDIgorICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgICAgICBBQ19MQU5HX1BST0dSQU0oW10sIFtbCisjaWZuZGVmIF9fR05VQ19fCisgIGNob2tlIG1lCisjZW5kaWYKKyAgICAgICAgICAgIF1dKV0sIFtwZXJsY2NfaXNfZ251PXllc10sIFtwZXJsY2NfaXNfZ251PW5vXSkKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbJHBlcmxjY19pc19nbnVdKQorICAgICAgICBDQz0kT0xEQ0MKKworICAgICAgICAjICAgICAgIENoZWNrIGNvbXBhdGFiaWxpdHk6ICBHbnUgTmV0LVNOTVAgdnMgTm9uLUdudSBwZXJsCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1hICJ4JHBlcmxjY19pc19nbnUiID0gInhubyIgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAJICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgCSAgICBlbHNlCisgICAgICAJICAgICAgICBBQ19NU0dfRVJST1IoW1RoaXMgYnVpbGQgaXMgdXNpbmcgYSBHTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBub24tR05VIChvciBub24td29ya2luZykgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuXSkKKyAgICAgIAkgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyAgICAgICBDaGVjayBjb21wYXRhYmlsaXR5OiAgTm9uLUdudSBOZXQtU05NUCB2cyBHbnUgcGVybAorICAgICMKKyAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyIgLWEgIngkcGVybGNjX2lzX2dudSIgPSAieHllcyIgOyB0aGVuCisgICAgICAJICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgIAkgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAJICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1RoaXMgYnVpbGQgaXMgdXNpbmcgYSBub24tR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgR05VIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLl0pCisgICAgICAJICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKworICAgICMgICAgICAgQXJlIHdlIGNsZWFyIHRvIHByb2NlZWQ/CisgICAgIworICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgaW5zdGFsbF9wZXJsPSJ5ZXMiCisgICAgZWxzZQorICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieG5vIiA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICAgICAgZmkKKyAgICBmaQorCisKKyMjCisjICAgRGV0ZXJtaW5lIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IG5lZWRlZCBmb3IgZW1iZWRkZWQgUGVybAorIyMKKworIyAgICAgICBTeXN0ZW0tc3BlY2lmaWMgcmVxdWlyZW1lbnRzCisjCitjYXNlICR0YXJnZXRfb3MgaW4KKyAgICBzb2xhcmlzKikKKyAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgICAgICAgIyAgIENoZWNrIGZvciBMQVJHRUZJTEUgc3VwcG9ydCAgICAgICAgICAgICAgIChTb2xhcmlzKQorICAgICAgICAgICMKKyAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwcm9ibGVtYXRpYyBQZXJsIGNjIGZsYWdzIG9uIFN1bnNdKQorICAgICAgICAgIGlmICRteXBlcmwgLVY6Y2NmbGFncyB8ICRHUkVQIExBUkdFRklMRSA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1Blcmwgd2FzIGNvbXBpbGVkIHdpdGggTEFSR0VGSUxFIHN1cHBvcnQgd2hpY2ggd2lsbCBicmVhayBOZXQtU05NUC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLl0pCisgICAgICAgICAgICBmaQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW25vbmUga25vd25dKQorICAgICAgICAgIGZpCisgICAgICBmaQorICAgIDs7CisKKyAgICAjIEVtYmVkZGVkIHBlcmwgdHlwaWNhbGx5IGZhaWxzIG9uIEhQLVVYIGFuZCBNYWMgT1MgWAorICAgICMgV2UgcmVhbGx5IG5lZWQgdG8gaW52ZXN0aWdhdGUgd2h5LCBhbmQgY2hlY2sgZm9yIHRoaXMgZXhwbGljaXRseQorICAgICMgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdHVybiB0aGlzIG9mZiBieSBkZWZhdWx0CisgICAgaHB1eCp8ZGFyd2luOCp8ZGFyd2luOSp8ZGFyd2luMTAqKQorICAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX1dBUk4oW0VtYmVkZGVkIHBlcmwgZGVmYXVsdGluZyB0byBvZmZdKQorICAgICAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgICAgIGZpCisgICAgOzsKKworICAgICopCisgICAgOzsKK2VzYWMKKworIyAgICAgICBDb21waWxlciBmbGFncworIworaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQZXJsIENGTEFHU10pCisgICAgcGVybGNmbGFncz1gJG15cGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBjY29wdHNgCisgICAgaWYgdGVzdCAieCRwZXJsY2ZsYWdzIiAhPSAieCIgOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFskcGVybGNmbGFnc10pCisgICAgICBDRkxBR1M9IiRDRkxBR1MgJHBlcmxjZmxhZ3MiCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgICBlbHNlCisgICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGRldGVybWluZSB0aGUgQyBjb21waWxlciBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuXSkKKyAgICAgIGZpCisgICAgZmkKK2ZpCisKKyMgICAgICAgTGlua2VyIGZsYWdzCisjCitpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFBlcmwgTERGTEFHU10pCisgICAgbmV0c25tcF9wZXJsbGRvcHRzPWAkbXlwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGxkb3B0c2AKKyAgICBpZiB0ZXN0ICJ4JG5ldHNubXBfcGVybGxkb3B0cyIgIT0gIngiIDsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbJG5ldHNubXBfcGVybGxkb3B0c10pCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgICBlbHNlCisgICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGRldGVybWluZSB0aGUgbGlua2VyIG9wdGlvbnMgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLl0pCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAieCRlbmFibGVfYXNfbmVlZGVkIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICMgICBKdXN0LWluLXRpbWUgbGlua2luZyB3aWxsIGVtYmVkIHRoZSBQZXJsIGxpYnJhcnkgd2l0aGluCisgICAgICAjICAgICAgIHRoZSBOZXQtU05NUCBsaWJyYXJ5IChyYXRoZXIgdGhhbiB0aGUgYWdlbnQgYXBwbGljYXRpb24pCisgICAgICAjCisgICAgICBQRVJMTERPUFRTX0ZPUl9MSUJTPSIkbmV0c25tcF9wZXJsbGRvcHRzIgorICAgICAgIyAgIFBlcmwgY2NkbGZsYWdzIChSUEFUSCB0byBsaWJwZXJsLCBob3BlZnVsbHkpCisgICAgICAjCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQZXJsIENDRExGTEFHU10pCisgICAgICBjaGFuZ2VxdW90ZSgsICkKKyAgICAgIG5ldHNubXBfcGVybGNjZGxmbGFncz1gJG15cGVybCAtVjpjY2RsZmxhZ3MgfCAkbXlwZXJsIC1uIC1lICdwcmludCAkMSAnImlmICgvXlxzKmNjZGxmbGFncz0nKFteJ10rKSc7Lyk7ImAKKyAgICAgIGNoYW5nZXF1b3RlKFssIF0pCisgICAgICBBQ19NU0dfUkVTVUxUKFskbmV0c25tcF9wZXJsY2NkbGZsYWdzXSkKKyAgICAgIFBFUkxMRE9QVFNfRk9SX0FQUFM9IiRuZXRzbm1wX3BlcmxjY2RsZmxhZ3MiCisgICAgZWxzZQorICAgICAgIyAgIE90aGVyd2lzZSBlbWJlZCB0aGUgUGVybCBsaWJyYXJ5IHdpdGhpbiB0aGUgYXBwbGljYXRpb24KKyAgICAgICMKKyAgICAgIFBFUkxMRE9QVFNfRk9SX0xJQlM9IiRuZXRzbm1wX3BlcmxsZG9wdHMiCisgICAgICAjIGxpbmsgKmFwcGxpY2F0aW9ucyogYWdhaW5zdCBsaWJwZXJsCisgICAgICBQRVJMTERPUFRTX0ZPUl9BUFBTPSIkbmV0c25tcF9wZXJsbGRvcHRzIgorICAgIGZpCitmaQorCisjICAgICAgICdQZXJsX2V2YWxfcHYnIGZ1bmN0aW9uIChhbmQgZXF1aXZhbGVudHMpCisjCitpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgICMgICBUaHJlZSBwb3NzaWJsZSB2ZXJzaW9ucyBvZiB0aGlzIHJvdXRpbmU6CisgICAgIyAgICAgICBldmFsX3B2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0byA1LjAwM185N2QpCisgICAgIyAgICAgICBwZXJsX2V2YWxfcHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LjAwNC81LjAwNSkKKyAgICAjICAgICAgIFBlcmxfZXZhbF9wdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyb20gNS42ZmYpCisgICAgIworICAgIE9MRExJQlM9IiRMSUJTIgorICAgIExJQlM9IiRMSUJTICRuZXRzbm1wX3BlcmxsZG9wdHMiCisgICAgQUNfQ0hFQ0tfRlVOQ1MoZXZhbF9wdikKKyAgICBBQ19DSEVDS19GVU5DKHBlcmxfZXZhbF9wdiwKKyAgICAgIEFDX0RFRklORShIQVZFX1BFUkxfRVZBTF9QVl9MQywgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGB0aGUgcGVybF9ldmFsX3B2JyBmdW5jdGlvbi5dKSkKKyAgICBBQ19DSEVDS19GVU5DKFBlcmxfZXZhbF9wdiwKKyAgICAgIEFDX0RFRklORShIQVZFX1BFUkxfRVZBTF9QVl9VQywgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUGVybF9ldmFsX3B2JyBmdW5jdGlvbi5dKSkKKyAgICBMSUJTPSIkT0xETElCUyIKKyAgICAjCisgICAgIyAgIE5vdGUgdGhhdCBhdXRvY29uZiBmbGF0dGVucyBjYXNlIHdoZW4gZGVmaW5pbmcgdG9rZW5zLAorICAgICMgICBzbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgbGF0dGVyIHR3by4KKworICAgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19wZXJsX2V2YWxfcHYiICE9ICJ4eWVzIiAtYSAieCRhY19jdl9mdW5jX1BlcmxfZXZhbF9wdiIgIT0gInh5ZXMiIC1hICJ4JGFjX2N2X2Z1bmNfZXZhbF9wdiIgIT0gInh5ZXMiIDsgdGhlbgorICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgICBlbHNlCisgICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgdGhlIGV2YWxfcHYsIHBlcmxfZXZhbF9wdiBvciBQZXJsX2V2YWxfcHYgZnVuY3Rpb25zIG5lZWRlZCBmb3IgZW1iZWRkZWQgUGVybCBzdXBwb3J0LiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuXSkKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgIyAgIEFjdGl2YXRlIEVtYmVkZGVkIFBlcmwKKyAgICAgICMKKyAgICAgIEFDX0RFRklORShORVRTTk1QX0VNQkVEREVEX1BFUkwsIDEsCisgICAgICAgIFtEZWZpbmUgaWYgeW91IGFyZSBlbWJlZGRpbmcgcGVybCBpbiB0aGUgbWFpbiBhZ2VudC5dKQorICAgICAgT1RIRVJBR0VOVExJQk9CSlM9InNubXBfcGVybC5vIgorICAgICAgT1RIRVJBR0VOVExJQkxPQkpTPSJzbm1wX3BlcmwubG8iCisgICAgICBPVEhFUkFHRU5UTElCTEZUUz0ic25tcF9wZXJsLmZ0IgorCisgICAgICBFTUJFRFBFUkxJTlNUQUxMPSJlbWJlZHBlcmxpbnN0YWxsIgorICAgICAgRU1CRURQRVJMVU5JTlNUQUxMPSJlbWJlZHBlcmx1bmluc3RhbGwiCisgICAgICBlbWJlZF9wZXJsPSJ5ZXMiCisgICAgZmkKK2Vsc2UKKyAgICAgIEVNQkVEUEVSTElOU1RBTEw9IiIKKyAgICAgIEVNQkVEUEVSTFVOSU5TVEFMTD0iIgorICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgZmkKK2ZpCisKKworIyMKKyMgICBSZXBvcnQgYW5kIGNvbmZpZ3VyZSByZXN1bHRzCisjIworCitBQ19TVUJTVChFTUJFRFBFUkxJTlNUQUxMKQorQUNfU1VCU1QoRU1CRURQRVJMVU5JTlNUQUxMKQorQUNfU1VCU1QoUEVSTExET1BUU19GT1JfTElCUykKK0FDX1NVQlNUKFBFUkxMRE9QVFNfRk9SX0FQUFMpCisKKyMgICAgICAgUmVzdWx0cyBvZiBFbWJlZGRlZCBQZXJsIGNoZWNrcworIworQUNfTVNHX0NIRUNLSU5HKFtmb3IgcG90ZW50aWFsIGVtYmVkZGVkIFBlcmwgc3VwcG9ydF0pCitpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4eWVzIiA7IHRoZW4KKyAgQUNfTVNHX0NBQ0hFX0FERChFbWJlZGRlZCBQZXJsIHN1cHBvcnQ6ICAgICAgZGlzYWJsZWQpCisgIEFDX01TR19SRVNVTFQoW2Rpc2FibGVkXSkKK2Vsc2UKKyAgQUNfTVNHX0NBQ0hFX0FERChFbWJlZGRlZCBQZXJsIHN1cHBvcnQ6ICAgICAgZW5hYmxlZCkKKyAgQUNfTVNHX1JFU1VMVChbZW5hYmxlZF0pCitmaQorCisjICAgICAgIFJlc3VsdHMgb2YgUGVybCBNb2R1bGUgY2hlY2tzCisjCitQRVJMVEFSR1M9IiIKK1BFUkxJTlNUQUxMVEFSR1M9IiIKK1BFUkxVTklOU1RBTExUQVJHUz0iIgorUEVSTEZFQVRVUkVTPSIiCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXNdKQoraWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh5ZXMiIDsgdGhlbgorICAgIFBFUkxUQVJHUz0icGVybG1vZHVsZXMiCisgICAgUEVSTElOU1RBTExUQVJHUz0icGVybGluc3RhbGwiCisgICAgUEVSTFVOSU5TVEFMTFRBUkdTPSJwZXJsdW5pbnN0YWxsIgorICAgIFBFUkxGRUFUVVJFUz0icGVybGZlYXR1cmVzIgorICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHllcyIgOyB0aGVuCisgICAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBidWlsZGluZyAtLSBlbWJlZGRhYmxlKQorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzIC0tIGFuZCBlbWJlZGRhYmxlXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBidWlsZGluZyAtLSBub3QgZW1iZWRkYWJsZSkKKyAgICAgIEFDX01TR19SRVNVTFQoW3llcyAtLSBub3QgZW1iZWRkYWJsZV0pCisgICAgZmkKK2Vsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgZGlzYWJsZWQpCitmaQorQUNfU1VCU1QoUEVSTFRBUkdTKQorQUNfU1VCU1QoUEVSTElOU1RBTExUQVJHUykKK0FDX1NVQlNUKFBFUkxVTklOU1RBTExUQVJHUykKK0FDX1NVQlNUKFBFUkxBUkdTKQorQUNfU1VCU1QoUEVSTEZFQVRVUkVTKQorCisKKyMgICAgICAgUmVzZXQgTElCUyB0byBwcmUtbGlid3JhcCB2YWx1ZSAgICg/Pz8pCisjCitBR0VOVExJQlM9JExJQlMKK0xJQlM9JE5PTkFHRU5UTElCUworCisKKworIyMKKyMgICBQeXRob24gY2hlY2tzCisjIworCitQWVRIT05UQVJHUz0iIgorUFlUSE9OSU5TVEFMTFRBUkdTPSIiCitQWVRIT05VTklOU1RBTExUQVJHUz0iIgorUFlUSE9OQ0xFQU5UQVJHUz0iIgorUFlUSE9ORkVBVFVSRVM9IiIKK0FDX01TR19DSEVDS0lORyhbaWYgd2Ugc2hvdWxkIGluc3RhbGwgdGhlIHB5dGhvbiBiaW5kaW5nc10pCitpZiB0ZXN0ICJ4JGluc3RhbGxfcHl0aG9uIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBQWVRIT05UQVJHUz0icHl0aG9ubW9kdWxlcyIKKyAgICBQWVRIT05JTlNUQUxMVEFSR1M9InB5dGhvbmluc3RhbGwiCisgICAgUFlUSE9OVU5JTlNUQUxMVEFSR1M9InB5dGhvbnVuaW5zdGFsbCIKKyAgICBQWVRIT05DTEVBTlRBUkdTPSJweXRob25jbGVhbiIKKyAgICBQWVRIT05GRUFUVVJFUz0icHl0aG9uZmVhdHVyZXMiCisgICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFB5dGhvbiBtb2R1bGVzOiAgICAgICAgYnVpbGRpbmcgZm9yICRQWVRIT05QUk9HKQorICAgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisgICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFB5dGhvbiBtb2R1bGVzOiAgICAgICAgZGlzYWJsZWQpCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKK0FDX1NVQlNUKFBZVEhPTlRBUkdTKQorQUNfU1VCU1QoUFlUSE9OSU5TVEFMTFRBUkdTKQorQUNfU1VCU1QoUFlUSE9OVU5JTlNUQUxMVEFSR1MpCitBQ19TVUJTVChQWVRIT05DTEVBTlRBUkdTKQorQUNfU1VCU1QoUFlUSE9OQVJHUykKK0FDX1NVQlNUKFBZVEhPTkZFQVRVUkVTKQorCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5Yzg1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzCkBAIC0wLDAgKzEsNTcgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgdHlwZXMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN0YW5kYXJkIGNoZWNrczoKKyMjCisKKyMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KK0FDX1RZUEVfT0ZGX1QKK0FDX1RZUEVfUElEX1QKK0FDX0hFQURFUl9USU1FCisKKworIyMKKyMgICBNb3JlIGNvbXBsZXggY2hlY2tzOgorIyMKKworIyAgIENoZWNrIGZvciAnc29ja2xlbl90JyAgICAgICAgICAgICAgICAgICAgICAgICAgIChIUC1VWCkKKyMKK0FDX0NIRUNLX1RZUEVTKFtzb2NrbGVuX3RdLCwsWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIFNURENfSEVBREVSUworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWZdKQorCisKKyMgICBDaGVjayBmb3IgJ2luX2FkZHJfdCcKKyMgICAgICAgTWF5IGJlIGluIDxuZXRpbmV0L2luLmg+ICAgICAgICAgICAgICAgICAgICAgICAgKEFJWCkKKyMKK0FDX0NIRUNLX1RZUEVTKFtpbl9hZGRyX3RdLCwsWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIFNURENfSEVBREVSUworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWZdKQorCisKKyMgICBDaGVjayBmb3IgJ3NzaXplX3QnCisjICAgICAgIE5vdCBuZWNlc3NhcmlseSBpbiA8c3lzL3R5cGVzLmg+ICAgICAgICAgICAgICAgIChvbGRlciBNaW5HVykKKyMKK0FDX0NIRUNLX1RZUEVTKFtzc2l6ZV90XSwsLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBTVERDX0hFQURFUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZl0pCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYmEwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZQpAQCAtMCwwICsxLDExNTAgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjICAgQ29tbWFuZC1saW5lIHByb2Nlc3NpbmcgLSAtLXdpdGgvLS1lbmFibGUKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN5c3RlbTogQ29tcGlsZXIgc2V0dGluZ3MKKyMjCisKK0FDX0FSR19XSVRIKGNjLCBbCitDb21waWxlciBPcHRpb25zOgorICAtLXdpdGgtY2M9Q0MgICAgICAgICAgICAgICAgICAgIHVzZSBDQyB0byBjb21waWxlIChkZWZhdWx0PWdjYykuXSwKKyAgICBbQ0M9JHdpdGhfY2M7ZXhwb3J0IENDXSkKKworQUNfQVJHX1dJVEgobGlua2NjLCBbCisgIC0td2l0aC1saW5rY2M9Q0MgICAgICAgICAgICAgICAgdXNlIENDIHRvIGxpbmsgKGRlZmF1bHQ9Z2NjKS5dLAorICAgIFtMSU5LQ0M9JHdpdGhfbGlua2NjO2V4cG9ydCBMSU5LQ0NdKQorCitBQ19BUkdfV0lUSChhciwKK1sgIC0td2l0aC1hcj1BUiAgICAgICAgICAgICAgICAgICAgdXNlIEFSIGFzIHRoZSBhcmNoaXZlci5dLAorICAgIFtBUj0kd2l0aF9hcjsgZXhwb3J0IEFSXSkKKworQUNfQVJHX1dJVEgoZW5kaWFubmVzcywKK1sgIC0td2l0aC1lbmRpYW5uZXNzPWJpZ3xsaXR0bGUgICAgZGVmaW5lIGVuZGlhbm5lc3Mgb2YgdGFyZ2V0IHBsYXRmb3JtIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxpbmcuXSwKKyAgICBbaWYgdGVzdCAkd2l0aF9lbmRpYW5uZXNzICE9ICJiaWciIC1hICR3aXRoX2VuZGlhbm5lc3MgIT0gImxpdHRsZSIgOyB0aGVuCisgICAgICAgQUNfTVNHX0VSUk9SKFtFbmRpYW5uZXNzIG11c3QgYmUgYmlnIG9yIGxpdHRsZSwgbm90ICIkd2l0aF9lbmRpYW5uZXNzIi5dKTsKKyAgICAgZmkKK10pCisKK0FDX0FSR19XSVRIKGNmbGFncywKK1sgIC0td2l0aC1jZmxhZ3M9Q0ZMQUdTICAgICAgICAgICAgdXNlIENGTEFHUyBhcyBjb21waWxlIHRpbWUgYXJndW1lbnRzLl0sCisgICAgW0NGTEFHUz0kd2l0aF9jZmxhZ3M7IGV4cG9ydCBDRkxBR1NdKQorCitBQ19BUkdfV0lUSChsZGZsYWdzLAorWyAgLS13aXRoLWxkZmxhZ3M9TERGTEFHUyAgICAgICAgICB1c2UgTERGTEFHUyBhcyBsaW5rIHRpbWUgYXJndW1lbnRzIHRvIGxkLl0sCisgICAgW0xERkxBR1M9JHdpdGhfbGRmbGFnczsgZXhwb3J0IExERkxBR1NdKQorCitBQ19BUkdfRU5BQkxFKGFzLW5lZWRlZCwKK1sgIC0tZGlzYWJsZS1hcy1uZWVkZWQgICAgICAgICAgICAgTGluayBsaWJwZXJsIGFnYWluc3QgYXBwbGljYXRpb25zIHJhdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gTmV0LVNOTVAgbGlicmFyaWVzLiBVc2Ugb25seSBpZiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXkgZG9lc24ndCB3b3JrLl0pCisKK0FDX0FSR19XSVRIKGxpYnMsCitbICAtLXdpdGgtbGlicz1MSUJTICAgICAgICAgICAgICAgIHVzZSBMSUJTIGFzIGxpbmsgdGltZSBhcmd1bWVudHMgdG8gbGQuXSwKKyAgICBbTElCUz0kd2l0aF9saWJzOyBleHBvcnQgTElCU10pCisKK0FDX0FSR19FTkFCTEUoc2lsZW50LWxpYnRvb2wsCitbICAtLWVuYWJsZS1zaWxlbnQtbGlidG9vbCAgICAgICAgIFBhc3MgLS1zaWxlbnQgdG8gbGlidG9vbC5dLAorCUxJQlRPT0xGTEFHUz0tLXNpbGVudCkKK0FDX1NVQlNUKExJQlRPT0xGTEFHUykKKworCisjIworIyAgIFN5c3RlbTogTGlicmFyeSBzZXR0aW5ncworIyMKKworTkVUU05NUF9BUkdfV0lUSChkbWFsbG9jLAorICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWRtYWxsb2M9UEFUSF0sCisgICAgICAgICAgICAgICAgW1VzZSBkbWFsbG9jIGxpYnJhcnkgKHd3dy5kbWFsbG9jLmNvbSldKSkKKworTkVUU05NUF9BUkdfV0lUSChlZmVuY2UsCitbICAtLXdpdGgtZWZlbmNlICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGFuZCB1c2UgbGliZWZlbmNlIChtYWxsb2MpLl0sCisgICAgICB1c2VfZWZlbmNlPSIkd2l0aHZhbCIpCisKK3RyeXJzYXJlZj1ubworTkVUU05NUF9BUkdfV0lUSChyc2FyZWYsCitbICAtLXdpdGgtcnNhcmVmPVBBVEggICAgICAgICAgICAgIExvb2sgZm9yIGxpYnJzYXJlZiBpbiBQQVRIL2xpYi5dLAorICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KKyAgICAgIHRyeXJzYXJlZj15ZXMKKyAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgorICAgICAgdHJ5cnNhcmVmPW5vCisgICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KKyAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgkd2l0aHZhbCkKKyAgICAgIHRyeXJzYXJlZj15ZXMKKyAgICBmaSwKKykKKwordHJ5b3BlbnNzbD1kZWZhdWx0eWVzCithc2tlZG9wZW5zc2w9bm8KK05FVFNOTVBfQVJHX1dJVEgob3BlbnNzbCwKK1sgIC0td2l0aC1vcGVuc3NsPVBBVEggICAgICAgICAgICAgTG9vayBmb3Igb3BlbnNzbCBpbiBQQVRIL2xpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBQQVRIIG1heSBiZSAiaW50ZXJuYWwiIHRvIGJ1aWxkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbWFsIGNvcGllZCBPcGVuU1NMIGNvZGUgZm9yIFVTTSBvbmx5Ll0sCisgICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHJ5b3BlbnNzbD15ZXMKKyAgICAgIGFza2Vkb3BlbnNzbD15ZXMKKyAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieGludGVybmFsIjsgdGhlbgorICAgICAgdHJ5b3BlbnNzbD1pbnRlcm5hbAorICAgICAgYXNrZWRvcGVuc3NsPWludGVybmFsCisgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KKyAgICAgIHRyeW9wZW5zc2w9bm8KKyAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgorICAgICAgaWYgdGVzdCAtZCAiJHdpdGh2YWwvbGliL01pbkdXIjsgdGhlbgorICAgICAgICBMREZMQUdTPSItTCR3aXRodmFsL2xpYi9NaW5HVyAkTERGTEFHUyIKKyAgICAgICAgQ1BQRkxBR1M9Ii1JJHdpdGh2YWwvaW5jbHVkZSAkQ1BQRkxBR1MiCisgICAgICBlbHNlCisgICAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgkd2l0aHZhbCkKKyAgICAgIGZpCisgICAgICB0cnlvcGVuc3NsPXllcworICAgICAgYXNrZWRvcGVuc3NsPXllcworICAgIGZpLAorKQoraWYgdGVzdCAieCR0cnlvcGVuc3NsIiA9ICJ4ZGVmYXVsdHllcyI7IHRoZW4KKyAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgvdXNyL2xvY2FsL3NzbCkKKyAgICAgIHRyeW9wZW5zc2w9eWVzCitmaQorQUNfQVJHX1dJVEgoW3NzbF0sLE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtvcGVuc3NsXSkpCitBQ19BUkdfRU5BQkxFKFtzc2xdLCxORVRTTk1QX0lOVkFMSURfV0lUSChbb3BlbnNzbF0pKQorCithc2tlZHBrY3M9bm8KK05FVFNOTVBfQVJHX1dJVEgocGtjcywKK1sgIC0td2l0aC1wa2NzPVBBVEggICAgICAgICAgICAgICAgTG9vayBmb3IgcGtjczExIGluIFBBVEgvbGliLl0sCisgICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgYXNrZWRwa2NzPXllcworICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCisgICAgICBhc2tlZHBrY3M9bm8KKyAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgorICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCR3aXRodmFsKQorICAgICAgYXNrZWRwa2NzPXllcworICAgIGZpLAorKQorCit0cnlrcmI1PWRlZmF1bHR5ZXMKK2Fza2Vka3JiNT1ubworTkVUU05NUF9BUkdfV0lUSChrcmI1LAorWyAgLS13aXRoLWtyYjU9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBrcmI1IGluIFBBVEgvbGliLl0sCisgICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHJ5a3JiNT15ZXMKKyAgICAgIGFza2Vka3JiNT15ZXMKKyAgICAgIGtyYjVwYXRoPXVuZGVmCisgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KKyAgICAgIHRyeWtyYjU9bm8KKyAgICAgIGtyYjVwYXRoPXVuZGVmCisgICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KKyAgICAgIHRyeWtyYjU9eWVzCisgICAgICBhc2tlZGtyYjU9eWVzCisgICAgICBrcmI1cGF0aD0kd2l0aHZhbAorICAgIGZpLAorKQoraWYgdGVzdCAieCR0cnlrcmI1IiA9ICJ4ZGVmYXVsdHllcyI7IHRoZW4KKyAgICAgIHRyeWtyYjU9eWVzCisgICAgICBrcmI1cGF0aD0vdXNyL2tlcmJlcm9zCitmaQorCitBQ19BUkdfV0lUSChkbnNzZWMtbG9jYWwtdmFsaWRhdGlvbiwKKyAgICAgICAgWyAgLS13aXRoLWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uIEVuYWJsZSBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbiB1c2luZyBsaWJ2YWwgKG5vKV0sIHdhbnRfZG5zc2VjPSR3aXRodmFsLCB3YW50X2Ruc3NlYz1ubykKK0FDX0FSR19FTkFCTEUoW2Ruc3NlYy1sb2NhbC12YWxpZGF0aW9uXSwsCisgICAgICAgICAgICAgIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtkbnNzZWMtbG9jYWwtdmFsaWRhdGlvbl0pKQorQUNfQVJHX1dJVEgoW2Ruc3NlY10sLE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtkbnNzZWMtbG9jYWwtdmFsaWRhdGlvbl0pKQorQUNfQVJHX0VOQUJMRShbZG5zc2VjXSwsTkVUU05NUF9JTlZBTElEX1dJVEgoW2Ruc3NlYy1sb2NhbC12YWxpZGF0aW9uXSkpCisKK05FVFNOTVBfQVJHX1dJVEgocnBtLAorWyAgLS13aXRob3V0LXJwbSAgICAgICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBSUE0gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3lzdGVtIHdoZW4gYnVpbGRpbmcgdGhlIGhvc3QgTUlCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl0pCisKKworIyMKKyMgICBQcm9qZWN0OiBCdWlsZCBjb25maWd1cmF0aW9uIHNldHRpbmdzCisjIworCisjICAgICAgIEluc3RhbGwgcHJlZml4CisjCitBQ19BUkdfV0lUSChpbnN0YWxsLXByZWZpeCwKK1sgIC0td2l0aC1pbnN0YWxsLXByZWZpeD1QQVRIICAgICAgSnVzdCBmb3IgaW5zdGFsbGluZywgcHJlZml4IGFsbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB3aXRoIFBBVEguICBUaGlzIGlzIGtub3duIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdvcmsgb24gc29tZSBzeXN0ZW1zIHdpdGggc2hhcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIChlZywgSFBVWCldLAorICAgICAgSU5TVEFMTF9QUkVGSVg9IiR3aXRodmFsIikKKworaWYgdGVzdCAieCRJTlNUQUxMX1BSRUZJWCIgPSAieHllcyIgOyB0aGVuCisgIEFDX01TR19FUlJPUihbLS13aXRoLWluc3RhbGwtcHJlZml4IHJlcXVpcmVzIGFuIGFyZ3VtZW50XSkKK2ZpCitpZiB0ZXN0ICJ4JElOU1RBTExfUFJFRklYIiA9ICJ4bm8iIDsgdGhlbgorICBJTlNUQUxMX1BSRUZJWD0iIgorZmkKK0FDX1NVQlNUKElOU1RBTExfUFJFRklYKQorCisKKyMKKyMgICBTdWJzeXN0ZW1zIHRvIGJ1aWxkOgorIyAgICAgICBMaWJyYXJ5CisjCitGRUFUVVJFSEVBREVSUz0ibGlicmFyeS9mZWF0dXJlcy5oIgorRlRNQUlOU1VCUz0iIgorCisjCisjICAgICAgIEFnZW50CisjCitORVRTTk1QX0FSR19FTkFCTEUoYWdlbnQsCitbICAtLWRpc2FibGUtYWdlbnQgICAgICAgICAgICAgICAgIERvIG5vdCBidWlsZCB0aGUgYWdlbnQgKHNubXBkKS5dKQoraWYgdGVzdCAieCRlbmFibGVfYWdlbnQiICE9ICJ4bm8iOyB0aGVuCisgICBTTk1QRD0nc25tcGQkKEVYRUVYVCknCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFnZW50IgorICAgRkVBVFVSRUhFQURFUlM9IiRGRUFUVVJFSEVBREVSUyBhZ2VudC9mZWF0dXJlcy1taWJncm91cHMuaCBhZ2VudC9mZWF0dXJlcy5oIgorICAgRlRNQUlOU1VCUz0iYWdlbnQgJEZUTUFJTlNVQlMiCisgICBUUkFQTElCUz0nJChUUkFQRFdJVEhBR0VOVCknCisgICBVU0VUUkFQTElCUz0nJChVU0VBR0VOVExJQlMpJworZWxzZQorICAgU05NUEQ9IiIKKyAgICMgd2Ugc3RpbGwgbmVlZC93YW50IHRoZSBhZ2VudGxpYnMgKGZvciBzdWJhZ2VudHMsIGUuZy4gc25tcHRyYXBkKQorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhZ2VudCIKKyAgICMgYnVpbGRpbmcgc25tcHRyYXBkIHcvbyBhZ2VudGxpYnMgZG9lc24ndCB3b3JrIGF0bQorICAgI1RSQVBMSUJTPSckKFRSQVBEV0lUSE9VVEFHRU5UKScKKyAgICNVU0VUUkFQTElCUz0nJChVU0VMSUJTKScKKyAgIFRSQVBMSUJTPSckKFRSQVBEV0lUSEFHRU5UKScKKyAgIFVTRVRSQVBMSUJTPSckKFVTRUFHRU5UTElCUyknCisgICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9BR0VOVF0sIDEsIFtEZWZpbmUgaWYgbm8gYWdlbnQgaXMgYnVpbHRdKQorZmkKKworQUNfU1VCU1QoU05NUEQpCitBQ19TVUJTVChUUkFQTElCUykKK0FDX1NVQlNUKFVTRVRSQVBMSUJTKQorCisjICAgICAgIEFwcGxpY2F0aW9ucworIworTkVUU05NUF9BUkdfRU5BQkxFKGFwcGxpY2F0aW9ucywKK1sgIC0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgICAgICAgICAgRG8gbm90IGJ1aWxkIHRoZSBhcHBzIChzbm1wZ2V0LCAuLi4pLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9hcHBsaWNhdGlvbnMiICE9ICJ4bm8iOyB0aGVuCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFwcHMiCisgICBGRUFUVVJFSEVBREVSUz0iJEZFQVRVUkVIRUFERVJTIGZlYXR1cmVzLXNubXBuZXRzdGF0LmggZmVhdHVyZXMtYXBwcy5oIgorICAgRlRNQUlOU1VCUz0iYXBwcyAkRlRNQUlOU1VCUyIKK2Vsc2UKKyAgIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX0FQUFNdLCAxLCBbRGVmaW5lIGlmIG5vIGFwcHMgYXJlIGJ1aWx0XSkKK2ZpCisKKyMgICAgICAgTWFudWFsIHBhZ2VzCisjCitORVRTTk1QX0FSR19FTkFCTEUobWFudWFscywKK1sgIC0tZGlzYWJsZS1tYW51YWxzICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIG1hbnVhbHMuXSkKK2lmIHRlc3QgIngkZW5hYmxlX21hbnVhbHMiICE9ICJ4bm8iOyB0aGVuCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIG1hbiIKK2ZpCisKKyMgICAgICAgU3VwcG9ydGluZyBzY3JpcHRzCisjCitORVRTTk1QX0FSR19FTkFCTEUoc2NyaXB0cywKK1sgIC0tZGlzYWJsZS1zY3JpcHRzICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIHNjcmlwdHMgKG1pYjJjLCAuLi4pLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9zY3JpcHRzIiAhPSAieG5vIjsgdGhlbgorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBsb2NhbCIKK2ZpCisKKyMgICAgICAgTUlCIGZpbGVzCisjCitBQ19BUkdfRU5BQkxFKG1pYnMsCitbICAtLWRpc2FibGUtbWlicyAgICAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBtaWIgZmlsZXMuXSkKK2lmIHRlc3QgIngkZW5hYmxlX21pYnMiICE9ICJ4bm8iOyB0aGVuCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIG1pYnMiCitmaQorIyB3aXRoLW1pYnMgaXMgdmFsaWQgdG9vLCBidXQgbWVhbnMgc29tZXRoaW5nIGVsc2UKKworQUNfU1VCU1QoTUFJTlNVQlMpCitBQ19TVUJTVChGVE1BSU5TVUJTKQorQUNfTVNHX0NIRUNLSU5HKFt3aGF0IHRvIGJ1aWxkIGFuZCBpbnN0YWxsXSkKK0FDX01TR19SRVNVTFQoWyRNQUlOU1VCU10pCisKKworIyAgICAgICBNSUIgbW9kdWxlIHZhbGlkYXRpb24gKGR1cmluZyAiY29uZmlndXJlIikKKyMKK05FVFNOTVBfQVJHX0VOQUJMRShtaWItY29uZmlnLWNoZWNraW5nLAorWyAgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZyAgICBUdXJucyBvbiBleHRyYSBjaGVja3MgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBtaWIgbW9kdWxlcy4gQW55IGNvbmZsaWN0cyB3aWxsIGNhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHRvIGFib3J0IChkZWZhdWx0IGlzIHRvIGlzc3VlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nIGFuZCBjb250aW51ZS4pXSwKKyAgW2lmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIC1vICIkZW5hYmxldmFsIiA9IG5vIDsgdGhlbgorICAgICB3aXRoX21pYl9jZmdfY2hlY2tzPSIkZW5hYmxldmFsIgorICAgZWxzZQorICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmddKQorICAgZmldLAorICBbd2l0aF9taWJfY2ZnX2NoZWNrcz0ibm8iXSkKKworTkVUU05NUF9BUkdfRU5BQkxFKG1pYi1jb25maWctZGVidWcsCitbICAtLWVuYWJsZS1taWItY29uZmlnLWRlYnVnICAgICAgIFR1cm5zIG9uIHZlcmJvc2Ugb3V0cHV0IGR1cmluZyBtaWIgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHByb2Nlc3NpbmcuXSwKKyAgW2lmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIC1vICIkZW5hYmxldmFsIiA9IG5vIDsgdGhlbgorICAgICB3aXRoX21pYl9jZmdfZGVidWc9IiRlbmFibGV2YWwiCisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtbWliLWNvbmZpZy1kZWJ1Z10pCisgICBmaV0sCisgIFt3aXRoX21pYl9jZmdfZGVidWc9Im5vIl0pCisKKworIyAgICAgICBWZXJzaW9uLXNwZWNpZmljIGZlYXR1cmVzCisjCitBQ19BUkdfRU5BQkxFKFtuZXctZmVhdHVyZXNdLAorICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5ldy1mZWF0dXJlc10sCisgICAgICAgICAgICAgICAgW0NvbXBpbGUgaW4gbmV3IE1JQiBtb2R1bGVzIGFuZCBvdGhlciBleHBlcmltZW50YWwgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgd2hpY2ggYXJlIGR1ZSB0byBiZSBpbmNsdWRlZCBpbiBmdXR1cmUgcmVsZWFzZXMuXSldKQorCitBQ19BUkdfRU5BQkxFKFtvbGQtZmVhdHVyZXNdLAorICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW9sZC1mZWF0dXJlc10sCisgICAgICAgICAgICAgICAgW0NvbXBpbGUgaW4gb2xkIE1JQiBtb2R1bGVzIGFuZCBvdGhlciBkZXByZWNhdGVkIGZlYXR1cmVzCisgICAgICAgICAgICAgICAgIHdoaWNoIHdlcmUgcmVwbGFjZWQgaW4gdGhlIGRlZmF1bHQgYnVpbGQgb2YgdGhpcyByZWxlYXNlLl0pXSkKKworQUNfQVJHX1dJVEgoW2ZlYXR1cmVzLW9mXSwKKyAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZmVhdHVyZXMtb2Y9dmVyc2lvbl0sCisgICAgICAgICAgICAgICAgW0NvbXBpbGUgaW4gTUlCIG1vZHVsZXMgYW5kIG90aGVyIGZlYXR1cmVzIGFzIGlmIHRoaXMgd2FzCisgICAgICAgICAgICAgICAgIHJlbGVhc2UgInZlcnNpb24iIChkZWZhdWx0IGlzIF1BQ19QQUNLQUdFX1ZFUlNJT05bKS5dKV0sLAorICAgICAgICBbd2l0aF9mZWF0dXJlc19vZj0kUEFDS0FHRV9WRVJTSU9OXSkKKyAgIAorCisjICAgICAgIE1hbnVhbCBwcm9tcHRpbmcgZHVyaW5nICJjb25maWd1cmUiCisjCitORVRTTk1QX0FSR19XSVRIKGRlZmF1bHRzLAorWworTWlzY2VsbGFuZW91czoKKyAgLS13aXRoLWRlZmF1bHRzICAgICAgICAgVXNlIGRlZmF1bHRzIGZvciBwcm9tcHRlZCB2YWx1ZXMuXSwKKyAgW2lmIHRlc3QgIiR3aXRodmFsIiA9IHllcyAtbyAiJHdpdGh2YWwiID0gbm8gOyB0aGVuCisgICAgIGRlZmF1bHRzPSIkd2l0aHZhbCIKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2UgdXNlIC0td2l0aC8tLXdpdGhvdXQtZGVmYXVsdHNdKQorICAgZmldLAorICBbZGVmYXVsdHM9Im5vIl0pCisKKworIyAgICAgICBVQ0QgY29tcGF0YWJpbGl0eQorIworTkVUU05NUF9BUkdfRU5BQkxFKHVjZC1zbm1wLWNvbXBhdGliaWxpdHksCitbICAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IEluc3RhbGwgdWNkLXNubXAgbG9vay1hbGlrZSBoZWFkZXJzIGFuZCBsaWJzLgorXSkKKworaWYgdGVzdCAieCRlbmFibGVfdWNkX3NubXBfY29tcGF0aWJpbGl0eSIgPSAieHllcyIgOyB0aGVuCQorICBpbnN0YWxsdWNkaGVhZGVycz1pbnN0YWxsdWNkaGVhZGVycworICBpbnN0YWxsdWNkbGlicz1pbnN0YWxsdWNkbGlicworICBBQ19NU0dfQ0FDSEVfQUREKFVDRC1TTk1QIGNvbXBhdGFiaWxpdHk6ICAgICBlbmFibGVkKQorZmkKK0FDX1NVQlNUKGluc3RhbGx1Y2RoZWFkZXJzKQorQUNfU1VCU1QoaW5zdGFsbHVjZGxpYnMpCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBNSUIgY29uZmlndXJhdGlvbiBzZXR0aW5ncworIyMKKworTkVUU05NUF9BUkdfRU5BQkxFKG1pYi1sb2FkaW5nLAorWyAgLS1kaXNhYmxlLW1pYi1sb2FkaW5nICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgcGFyc2VzIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5pcHVsYXRlcyB0aGUgbWliIGZpbGVzLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9taWJfbG9hZGluZyIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElOR10sIDEsIAorICAgICAgICAgICAgW0RlZmluZSBpZiBtaWIgbG9hZGluZyBhbmQgcGFyc2luZyBjb2RlIHNob3VsZCBub3QgYmUgaW5jbHVkZWRdKQorZmkKKworTkVUU05NUF9BUkdfV0lUSChtaWJkaXJzLAorWyAgLS13aXRoLW1pYmRpcnM9ImRpcjE6ZGlyMjoiICAgRGVmYXVsdCBkaXJlY3RvcmllcyB0byBsb29rIGZvciBtaWJzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBcJEhPTUUvLnNubXAvbWliczpEQVRBRElSL3NubXAvbWlicyldLAorICAgIFtORVRTTk1QX0RFRkFVTFRfTUlCRElSUz0iJHdpdGhfbWliZGlycyIKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX01JQkRJUlMsIiR3aXRoX21pYmRpcnMiLAorICAgICAgICBbZGVmYXVsdCBsb2NhdGlvbiB0byBsb29rIGZvciBtaWJzIHRvIGxvYWQgdXNpbmcgdGhlIGFib3ZlIHRva2VucworICAgICAgICAgYW5kL29yIHRob3NlIGluIHRoZSBNSUJTIGVudnJpb25tZW50IHZhcmlhYmxlXSldKQorCitBQ19BUkdfV0lUSChtaWJzLAorWyAgLS13aXRoLW1pYnM9Iml0ZW0xOml0ZW0yOiIgICAgRGVmYXVsdCBtaWIgSURzIHRvIHJlYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRoZSBkZWZhdWx0IGxpc3QgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNOTVB2Mi1NSUI6SUYtTUlCOklQLU1JQjpUQ1AtTUlCOlVEUC1NSUIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYW55IG1pYnMgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBtaWIgbW9kdWxlcyB0aGUgYWdlbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIHdpdGgpXSwKKyAgICBORVRTTk1QX0RFRkFVTFRfTUlCUz0iJHdpdGhfbWlicyIpCisjIGVuYWJsZS1taWJzIGlzIHZhbGlkIHRvbywgYnV0IG1lYW5zIHNvbWV0aGluZyBlbHNlCisKK05FVFNOTVBfQVJHX1dJVEgobWliZmlsZXMsCitbICAtLXdpdGgtbWliZmlsZXM9ImZpbGUxOmZpbGUyIiBEZWZhdWx0IG1pYiBmaWxlcyB0byBsb2FkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAgbm9uZS4gIHVzZXMgSURzIGFib3ZlIGluc3RlYWQuKV0sCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9NSUJGSUxFUywiJHdpdGhfbWliZmlsZXMiLAorICAgICAgICBbZGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZCwgc3BlY2lmaWVkIGJ5IHBhdGguXSkpCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBTZWN1cml0eSBjb25maWd1cmF0aW9uCisjIworCitORVRTTk1QX0FSR19FTkFCTEUoZGVzLAorWyAgLS1kaXNhYmxlLWRlcyAgICAgICAgICAgICAgICAgICBEbyBub3Qgc3VwcG9ydCBERVMgZW5jcnlwdGlvbi5dKQoraWYgdGVzdCAieCRlbmFibGVfZGVzIiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX0RFU10sIDEsIAorICAgICAgICAgICAgW0RlZmluZSBpZiBERVMgZW5jcnlwdGlvbiBzaG91bGQgbm90IGJlIHN1cHBvcnRlZF0pCitmaQorCitORVRTTk1QX0FSR19FTkFCTEUocHJpdmFjeSwKK1sgIC0tZGlzYWJsZS1wcml2YWN5ICAgICAgICAgICAgICAgRG9uJ3QgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBwcml2YWN5IChlbmNyeXB0aW9uKS5dKQoraWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWLCAxLAorICAgIFtkZWZpbmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBib3RoIGF1dGhlbnRpY2F0aW9uIGFuZAorICAgICBwcml2YWN5IHN1cHBvcnQuXSkKK2ZpCisKK05FVFNOTVBfQVJHX0VOQUJMRShtZDUsCitbICAtLWRpc2FibGUtbWQ1ICAgICAgICAgICAgICAgICAgIERvIG5vdCBzdXBwb3J0IE1ENSBhdXRoZW50aWNhdGlvbi5dKQoraWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX01ENV0sIDEsIAorICAgICAgICAgICAgW0RlZmluZSBpZiBNRDUgYXV0aGVudGljYXRpb24gc2hvdWxkIG5vdCBiZSBzdXBwb3J0ZWRdKQorZmkKKworTkVUU05NUF9BUkdfRU5BQkxFKGludGVybmFsLW1kNSwKK1sgIC0tZW5hYmxlLWludGVybmFsLW1kNSAgICAgICAgICAgVXNlIHRoZSBpbnRlcm5hbCBNRDUgc3VwcG9ydC5dKQoraWYgdGVzdCAieCRlbmFibGVfaW50ZXJuYWxfbWQ1IiA9ICJ4eWVzIjsgdGhlbgorICBpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWW91IGNhbiBub3Qgc3BlY2lmeSBib3RoIC0tZW5hYmxlLWludGVybmFsLW1kNSBhbmQgLS1kaXNhYmxlLW1kNSkKKyAgZWxzZQorICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUsIDEsCisgICAgICBbZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE1ENSBjb2RlIC4uLl0pCisgIGZpCitmaQorCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogTWlzYyBjb25maWd1cmF0aW9uCisjIworCitORVRTTk1QX0FSR19XSVRIKG9wYXF1ZS1zcGVjaWFsLXR5cGVzLAorWyAgLS13aXRob3V0LW9wYXF1ZS1zcGVjaWFsLXR5cGVzICBEb24ndCB1c2Ugc3BlY2lhbCBvcGFxdWUgZW5jb2RpbmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVAgbm9ybWFsbHkgY2Fubm90IGhhbmRsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIG51bWJlcnMsIG5vciBsYXJnZSA2NCBiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyB3ZWxsLiAgQnkgZGVmYXVsdCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LXNubXAgcGFja2FnZSBjb21waWxlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZXNlIGV4dHJhIGRhdGF0eXBlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbiBhIGxlZ2FsIHdheSldKQorIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KK2lmIHRlc3QgIngkd2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlcyIgIT0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUywgMSwKKyAgICBbU2hvdWxkIHdlIGNvbXBpbGUgdG8gdXNlIHNwZWNpYWwgb3BhcXVlIHR5cGVzOiBmbG9hdCwgZG91YmxlLCBjb3VudGVyNjQsCisgICAgIGk2NCwgdWk2NCwgdW5pb24/XSkKK2ZpCisKK05FVFNOTVBfQVJHX0VOQUJMRShpcHY2LAorWyAgLS1lbmFibGUtaXB2NiAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZSBJUHY2IHJlYWR5IHZlcnNpb24uXSwKKyAgICBbaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9JUFY2LCAxLAorICAgICAgICBbZGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnRdKQorICAgIGZpXSkKKworTkVUU05NUF9BUkdfV0lUSChsb2dmaWxlLAorWyAgLS13aXRoLWxvZ2ZpbGU9ImxvY2F0aW9uIiAgICAgICBEZWZhdWx0IGxvZyBmaWxlIGxvY2F0aW9uIGZvciBzbm1wZC5dLAorICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT0iJHdpdGhfbG9nZmlsZSIpCitpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA9ICJubyI7IHRoZW4KKyAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9Im5vbmUiCitmaQorCitORVRTTk1QX0FSR19XSVRIKHBlcnNpc3RlbnQtZGlyZWN0b3J5LAorWyAgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5PSJkaXJlY3RvcnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBkaXJlY3RvcnkgZm9yIHBlcnNpc3RlbnQgZGF0YSBzdG9yYWdlLl0sYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWT0iJHdpdGhfcGVyc2lzdGVudF9kaXJlY3RvcnkiKQorCitORVRTTk1QX0FSR19XSVRIKHBlcnNpc3RlbnQtbWFzaywKK1sgIC0td2l0aC1wZXJzaXN0ZW50LW1hc2s9Im1hc2siICBEZWZhdWx0IG1hc2sgZm9yIHBlcnNpc3RlbnQgZGF0YSBzdG9yYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAwNzcpXSwKKyAgW2lmIHRlc3QgW2BleHByICJYJHdpdGh2YWwiIDogJ1hbMC03XSokJ2BdIC1lcSA0IDsgdGhlbgorICAgICBBQ19NU0dfUkVTVUxUKFt1c2luZyBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWxdKQorICAgICB3aXRodmFsPSIwJHdpdGh2YWwiCisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHByb3ZpZGUgYSB0aHJlZSBkaWdpdCBvY3RhbCBwZXJzaXN0ZW50IG1hc2sgdmFsdWVdKQorICAgZmldLAorICBbd2l0aHZhbD0wNzcKKyAgIEFDX01TR19SRVNVTFQoW3VzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsXSldKQorQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLLCR3aXRodmFsLAorICAgW3VtYXNrIHBlcm1pc3Npb25zIHRvIHNldCB1cCBwZXJzaXN0ZW50IGZpbGVzIHdpdGhdKQorCitORVRTTk1QX0FSR19XSVRIKGNvcHlfcGVyc2lzdGVudF9maWxlcywKK1sgIC0td2l0aC1jb3B5LXBlcnNpc3RlbnQtZmlsZXM9Im5vIiBEb24ndCBjb3B5IHBlcnNpc3RlbnQgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgdXNlICJ5ZXMiIHRvIGNvcHkgdGhlbSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IHllcyldLAorICAgIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0iJHdpdGhfY29weV9wZXJzaXN0ZW50X2ZpbGVzIikKKworZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybj0iL3RtcC9zbm1wZFhYWFhYWCIKK05FVFNOTVBfQVJHX1dJVEgodGVtcC1maWxlLXBhdHRlcm4sCitbICAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm49UEFUVEVSTiAgUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXMgKERlZmF1bHQ6IC90bXAvc25tcGRYWFhYWFgpXSwKKyAgW2lmIHRlc3QgYGV4cHIgIlgkd2l0aHZhbCIgOiAiLipYWFhYWFgkImAgLW5lIDAgOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQodXNpbmcgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCkKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFt0ZW1wb3JhcnkgZmlsZSBwYXR0ZW5zIG11c3QgZW5kIHdpdGggNiBYJ3NdKQorICAgZmldLAorICBbd2l0aHZhbD0iJGRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm4iCisgICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCldKQorQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4sIiR3aXRodmFsIiwKKyAgW1BhdHRlcm4gb2YgdGVtcG9yYXJ5IGZpbGVzXSkKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IFZlcnNpb24gY29uZmlndXJhdGlvbgorIyMKKworU05NUF9WRVJTSU9OUz0iIgorTkVUU05NUF9BUkdfRU5BQkxFKHNubXB2MSwKK1sgIC0tZGlzYWJsZS1zbm1wdjEgICAgICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IGltcGxlbWVudHMgU05NUHYxLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdjEiID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfU05NUFYxXSwgMSwgCisgICAgICAgICAgICBbRGVmaW5lIGlmIFNOTVB2MSBjb2RlIHNob3VsZCBub3QgYmUgaW5jbHVkZWRdKQorZWxzZQorICBTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAxIgorZmkKKworTkVUU05NUF9BUkdfRU5BQkxFKHNubXB2MmMsCitbICAtLWRpc2FibGUtc25tcHYyYyAgICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIFNOTVB2MmMuXSkKK2lmIHRlc3QgIngkZW5hYmxlX3NubXB2MmMiID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfU05NUFYyQ10sIDEsIAorICAgICAgICAgICAgW0RlZmluZSBpZiBTTk1QdjJjIGNvZGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZF0pCitlbHNlCisgIFNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDJjIgorZmkKKworU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMyIKK0FDX01TR19DQUNIRV9BREQoU05NUCBWZXJzaW9ucyBTdXBwb3J0ZWQ6ICAgJFNOTVBfVkVSU0lPTlMpCisKK05FVFNOTVBfQVJHX1dJVEgoZGVmYXVsdC1zbm1wLXZlcnNpb24sCitbICAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249IjMiIERlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVnYWwgdmFsdWVzOiAxLCAyIChmb3IgU05NUHYyYykgb3IgMy5dLAorICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049IiR3aXRoX2RlZmF1bHRfc25tcF92ZXJzaW9uIikKKworIyB3ZSB0ZXN0IHRoaXMgbm93IGFuZCBsYXRlciBhcyB3ZWxsLiAgd2UgdGVzdCBpdCBub3cgc28gY29uZmlndXJlIGNhbiBkaWUKKyMgZWFybHkgb24gd2l0aCBhbiBlcnJvciByYXRoZXIgdGhhbiB3YWl0aW5nIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NyaXB0LgorY2FzZSAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OLTN9IiBpbgorICBbWzEyM11dKSA7OworICAyYykgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0yIDs7CisgICopCisgICAgQUNfTVNHX0VSUk9SKFtJbGxlZ2FsIHZlcnNpb24gbnVtYmVyLiAgT25seSAxLCAyIChmb3IgU05NUHYyYykgYW5kIDMgYXJlIHN1cHBvcnRlZC5dKQorICAgIDs7Citlc2FjCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBUcmFuc3BvcnQgbW9kdWxlcworIyMKKworQUNfQVJHX1dJVEgodHJhbnNwb3J0cywKK1sgIC0td2l0aC10cmFuc3BvcnRzPSJ0MSB0MiAuLi4iICAgQ29tcGlsZSBpbiB0aGUgZ2l2ZW4gU05NUCB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgKHNwYWNlIG9yIGNvbW1hIHNlcGFyYXRlZCBsaXN0KS5dKQorQUNfQVJHX1dJVEgob3V0X3RyYW5zcG9ydHMsCitbICAtLXdpdGgtb3V0LXRyYW5zcG9ydHM9InQxIC4uLiIgIEV4Y2x1ZGUgbGlzdGVkIFNOTVAgdHJhbnNwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwYWNlIG9yIGNvbW1hIHNlcGFyYXRlZCBsaXN0KS4KKworICBBdmFpbGFibGUgU05NUCB0cmFuc3BvcnQgbW9kdWxlcyBhcmU6CisKKyAgICBVRFAgICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQLgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGFsd2F5cyBjb21waWxlZCBpbi4KKyAgICBVRFBJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKKyAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgaWYgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQuCisgICAgVENQSVB2NiAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUHY2LgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZSBmb3IgTGludXgsIFNvbGFyaXMgYW5kCisgICAgICAgICAgICAgICAgRnJlZUJTRCBhdCBsZWFzdC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGlmIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLgorICAgIFRDUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBUQ1AvSVAuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCwgYnV0IG1heSBiZSBvbWl0dGVkLgorICAgIFVuaXggICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVbml4IGRvbWFpbiBwcm90b2NvbHMuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBleGNlcHQgb24gV2luMzIKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybXMsIGFuZCBtYXkgYmUgb21pdHRlZC4KKyAgICBDYWxsYmFjayAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgYW4gaW50ZXJuYWwgbG9jYWxseSBjb25uZWN0ZWQgcGFpcgorICAgICAgICAgICAgICAgIG9mIHNubXBfc2Vzc2lvbnMuCisgICAgQWxpYXMgICAgICAgVGhlIGFsaWFzIHRyYW5zcG9ydCBzaW1wbHkgbGV0cyB5b3UgZGVmaW5lIG1vcmUgY29tcGxleAorICAgICAgICAgICAgICAgIHRyYW5zcG9ydCBzdHJpbmdzIGFuZCBhbGlhcyB0aGVtIHRvIHNpbXBsZSBuYW1lcyBpbgorICAgICAgICAgICAgICAgIHRoZSBzbm1wLmNvbmYgZmlsZS4KKyAgICBBQUw1UFZDICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgQUFMNSBQVkNzLgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIHByZXNlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgTGludXgsCisgICAgICAgICAgICAgICAgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBhbmQgbWF5IGJlIG9taXR0ZWQuCisgICAgSVBYICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIElQWCBwZXIgUkZDIDE0MjAuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgcHJlc2VudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBMaW51eCwKKyAgICAgICAgICAgICAgICBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0IGFuZCBtYXkgYmUgb21pdHRlZC4KKyAgICBEVExTVURQICAgICBzdXBwb3J0IGZvciB0dW5uZWxpbmcgU05NUCBvdmVyIERUTFMvVURQCisgICAgVExTVENQICAgICAgc3VwcG9ydCBmb3IgdHVubmVsaW5nIFNOTVAgb3ZlciBUTFMvVENQCisgICAgU1NIICAgICAgICAgKGFscGhhKSBzdXBwb3J0IGZvciB0dW5uZWxpbmcgU05NUCBvdmVyIFNTSAorXSkKKworIworIyBDYXRjaCBjb21tb24gbWlzdGFrZXMgaW4gdHJhbnNwb3J0IG9wdGlvbnMKKyMKK0FDX0FSR19XSVRIKHRyYW5zcG9ydCwsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFt0cmFuc3BvcnRzXSkpCitBQ19BUkdfV0lUSChvdXQtdHJhbnNwb3J0LCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW291dC10cmFuc3BvcnRzXSkpCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBTZWN1cml0eSBtb2R1bGVzCisjIworCitORVRTTk1QX0FSR19XSVRIKHNlY3VyaXR5LW1vZHVsZXMsCitbICAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBzZXJ2aWNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgorCisgIEF2YWlsYWJsZSBTTk1QIHNlY3VyaXR5IHNlcnZpY2VzOgorCisgICAgICAgIHVzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB1c2VyIGJhc2VkIFNOTVAgc2VjdXJpdHkKKyAgICAgICAga3NtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIGtlcmJlcm9zIGJhc2VkIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgdHNtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBUcmFuc3BvcnQtYmFzZWQgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3IgdXNlIHdpdGggdGhlIFNTSCwgRFRMU1VEUCBhbmQgVExTVENQIHRyYW5zcG9ydHMpCitdKQorCitORVRTTk1QX0FSR19XSVRIKG91dC1zZWN1cml0eS1tb2R1bGVzLAorWyAgLS13aXRoLW91dC1zZWN1cml0eS1tb2R1bGVzPSJzMSBzMiAuLi4iICAgUmVtb3ZlcyB0aGUgZ2l2ZW4gU05NUCBzZWN1cml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIHNlcnZpY2VzIGZyb20gdGhlIGRlZmF1bHQgbGlzdC4KK10pCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBEZXZlbG9wZXItcmVsYXRlZCBzZXR0aW5ncworIyMKKworTkVUU05NUF9BUkdfRU5BQkxFKGRlYnVnZ2luZywKK1sgIC0tZW5hYmxlLWRlYnVnZ2luZyAgICAgICAgICAgICAgT3V0cHV0cyBleHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYXQgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMuICBOb3JtYWxseSwgeW91IHNob3VsZCBub3QgZW5hYmxlIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGluc3RlYWQgdXNlIHRoZSAtRCBmbGFnIG9mIHRoZSBjb21tYW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0b2dnbGVzIGRlYnVnaW5nIG91dHB1dCBhdCBydW50aW1lLgorICAtLWRpc2FibGUtZGVidWdnaW5nICAgICAgICAgICAgIERpc2FsbG93cyBkZWJ1Z2dpbmcgY29kZSB0byBiZSBidWlsdCBpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1pZ2h0IHByb3ZpZGUgc29tZSBzcGVlZCBiZW5lZml0cy5dLAorICAgIEFDX0RFRklORShORVRTTk1QX0FMV0FZU19ERUJVRykpCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZWJ1Z2dpbmciID0gInhubyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoTkVUU05NUF9OT19ERUJVR0dJTkcpCitmaQorCitORVRTTk1QX0FSR19FTkFCTEUoZGV2ZWxvcGVyLAorWyAgLS1lbmFibGUtZGV2ZWxvcGVyICAgICAgICAgICAgICBUdXJucyBvbiBzdXBlci1kdXBlci1leHRyYS1jb21waWxlLXdhcm5pbmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB1c2luZyBnY2MuXSwKKyAgW2lmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIDsgdGhlbgorICAgICBkZXZlbG9wZXI9InllcyIKKyAgIGVsaWYgdGVzdCAiJGVuYWJsZXZhbCIgIT0gbm8gOyB0aGVuCisgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtZGV2ZWxvcGVyXSkKKyAgIGVsc2UKKyAgICAgZGV2ZWxvcGVyPSJubyIKKyAgIGZpXSkKKworTkVUU05NUF9BUkdfRU5BQkxFKHRlc3RpbmctY29kZSwKK1sgIC0tZW5hYmxlLXRlc3RpbmctY29kZSAgICAgICAgICAgRW5hYmxlcyBzb21lIGNvZGUgc2VjdGlvbnMgdGhhdCBzaG91bGQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nIG9mIGNlcnRhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIGZ1bmN0aW9uYWxpdGllcy4gIFRoaXMgc2hvdWxkICpub3QqIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHR1cm5lZCBvbiBmb3IgcHJvZHVjdGlvbiB1c2UuICBFdmVyLl0sCisgIFtpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyA7IHRoZW4KKyAgICAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSwgMSwgW3Rlc3RpbmcgY29kZSBzZWN0aW9ucy5dKQorICAgZWxpZiB0ZXN0ICIkZW5hYmxldmFsIiAhPSBubyA7IHRoZW4KKyAgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS10ZXN0aW5nLWNvZGVdKQorICAgZmldKQorCitORVRTTk1QX0FSR19FTkFCTEUocmVlbnRyYW50LAorWyAgLS1lbmFibGUtcmVlbnRyYW50ICAgICAgICAgICAgICBFbmFibGVzIGxvY2tpbmcgZnVuY3Rpb25zIHRoYXQgcHJvdGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgcmVzb3VyY2VzIGluIHNvbWUgbXVsdGktdGhyZWFkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzLiAgVGhpcyBkb2VzIG5vdCBndWFyYW50ZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQtc2FmZSBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5IGFuIGV4cGVyaW1lbnRhbCBzZXR0aW5nLl0sCisgIFtpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyAtbyAiJGVuYWJsZXZhbCIgPSBubyA7IHRoZW4KKyAgICAgd2l0aF9yZXNfbG9ja3M9IiRlbmFibGV2YWwiCisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtcmVlbnRyYW50XSkKKyAgIGZpXSwKKyAgW3dpdGhfcmVzX2xvY2tzPSJubyJdKQorCitORVRTTk1QX0FSR19FTkFCTEUoZGVwcmVjYXRlZCwKK1sgIC0tZGlzYWJsZS1kZXByZWNhdGVkICAgICAgICAgICAgRG9uJ3QgY29tcGlsZSBpbiBkZXByZWNhdGVkIGZ1bmN0aW9ucy5dKQoraWYgdGVzdCAiJGVuYWJsZV9kZXByZWNhdGVkIiA9IG5vIDsgdGhlbgorICAgQUNfREVGSU5FKFtORVRTTk1QX05PX0RFUFJFQ0FURURfRlVOQ1RJT05TXSwgMSwKKyAgICAgICAgICAgICBbRGVmaW5lIHRvIHN1cHByZXNzIGluY2x1c2lvbiBvZiBkZXByZWNhdGVkIGZ1bmN0aW9uc10pCitmaQorCisKKworIyMKKyMgICBQcm9qZWN0OiBBZ2VudCBjb25maWd1cmF0aW9uIHNldHRpbmdzCisjIworCitORVRTTk1QX0FSR19XSVRIKHJvb3QtYWNjZXNzLAorWworQ29uZmlndXJpbmcgdGhlIGFnZW50OgorICAtLXdpdGhvdXQtcm9vdC1hY2Nlc3MgICAgICAgICAgIFRoZSBzbm1wZCBhZ2VudCB3b24ndCByZXF1aXJlIHJvb3QgYWNjZXNzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuIGl0LiAgVGhlIGluZm9ybWF0aW9uIGl0IHJldHVybnMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliLUlJIHRyZWUgbWF5IG5vdCBiZSBjb3JyZWN0LCBob3dldmVyLl0pCisjIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgoraWYgdGVzdCAieCR3aXRoX3Jvb3RfYWNjZXNzIiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX05PX1JPT1RfQUNDRVNTLCAxLAorICAgIFtJZiB5b3UgZG9uJ3QgaGF2ZSByb290IGFjY2VzcyBkb24ndCBleGl0IHVwb24ga21lbSBlcnJvcnNdKQorZmkKKworTkVUU05NUF9BUkdfV0lUSChrbWVtLXVzYWdlLAorWyAgLS13aXRob3V0LWttZW0tdXNhZ2UgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBhbnkgY29kZSByZWxhdGVkIHRvIHRoZSB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBrbWVtLl0pCisjIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgoraWYgdGVzdCAieCR3aXRoX2ttZW1fdXNhZ2UiID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfTk9fS01FTV9VU0FHRSwgMSwgW0lmIHdlIGRvbid0IHdhbnQgdG8gdXNlIGttZW0uXSkKK2ZpCisKK05FVFNOTVBfQVJHX1dJVEgoZHVtbXktdmFsdWVzLAorWyAgLS13aXRoLWR1bW15LXZhbHVlcyAgICAgICAgICAgICBQcm92aWRlICdwbGFjZWhvbGRlcicgZHVtbXkgdmFsdWVzIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGVjaG5pY2FsbHkgbm90IGNvbXBsaWFudCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVAgc3BlY2lmaWNhdGlvbnMsIGJ1dCB3YXMgaG93IHRoZSBhZ2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGVkIGZvciB2ZXJzaW9ucyA8IDQuMC5dKQorIyBEZWZpbmUgdW5sZXNzIHNwZWNpZmljYWxseSBzdXBwcmVzc2VkIChpLmUuLCBvcHRpb24gZGVmYXVsdHMgdG8gZmFsc2UpLgoraWYgdGVzdCAieCR3aXRoX2R1bW15X3ZhbHVlcyIgIT0gInh5ZXMiOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUywgMSwKKyAgICBbSWYgeW91IGRvbid0IHdhbnQgdGhlIGFnZW50IHRvIHJlcG9ydCBvbiB2YXJpYWJsZXMgaXQgZG9lc24ndCBoYXZlCisgICAgIGRhdGEgZm9yXSkKK2ZpCisKK05FVFNOTVBfQVJHX0VOQUJMRShzZXQtc3VwcG9ydCwKK1sgIC0tZGlzYWJsZS1zZXQtc3VwcG9ydCAgICAgICAgICAgRG8gbm90IGFsbG93IFNOTVAgc2V0IHJlcXVlc3RzLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9zZXRfc3VwcG9ydCIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVF0sIDEsIAorICAgICAgICAgICAgW0RlZmluZSBpZiBTTk1QIFNFVCBzdXBwb3J0IHNob3VsZCBiZSBkaXNhYmxlZF0pCitmaQorCisKK05FVFNOTVBfQVJHX1dJVEgoc3lzX2NvbnRhY3QsCitbICAtLXdpdGgtc3lzLWNvbnRhY3Q9Indob0B3aGVyZSIgIERlZmF1bHQgc3lzdGVtIGNvbnRhY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTE9HSU5ARE9NQUlOTkFNRSldLAorICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1Q9IiR3aXRoX3N5c19jb250YWN0IikKKworTkVUU05NUF9BUkdfV0lUSChzeXNfbG9jYXRpb24sCitbICAtLXdpdGgtc3lzLWxvY2F0aW9uPSJsb2NhdGlvbiIgIERlZmF1bHQgc3lzdGVtIGxvY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IFVua25vd24pXSwKKyAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0M9IiR3aXRoX3N5c19sb2NhdGlvbiIpCisKKworCisjIworIyAgIFByb2plY3Q6IEFnZW50OiBFeHRlbnNpYmlsaXR5IGNvbmZpZ3VyYXRpb24KKyMjCisKK05FVFNOTVBfQVJHX0VOQUJMRShsb2NhbC1zbXV4LAorWyAgLS1lbmFibGUtbG9jYWwtc211eCAgICAgICAgICAgICBSZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdCAoYnkgZGVmYXVsdCkuXSwKKyAgICBbaWYgdGVzdCAieCRlbmFibGVfbG9jYWxfc211eCIgPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9MT0NBTF9TTVVYLCAxLAorICAgICAgICAgIFtkZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgU01VWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3QKKyAgICAgICAgICAgYnkgZGVmYXVsdF0pCisgICAgZmldKQorCitORVRTTk1QX0FSR19FTkFCTEUoYWdlbnR4LWRvbS1zb2NrLW9ubHksCitbICAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSAgIERpc2FibGUgVURQL1RDUCB0cmFuc3BvcnRzIGZvciBhZ2VudHguXSwKK0FDX0RFRklORShORVRTTk1QX0FHRU5UWF9ET01fU09DS19PTkxZLCAxLAorICAgIFtkZWZpbmUgaWYgYWdlbnR4IHRyYW5zcG9ydCBpcyB0byB1c2UgZG9tYWluIHNvY2tldHMgb25seV0pKQorCitORVRTTk1QX0FSR19FTkFCTEUoc25tcHRyYXBkLXN1YmFnZW50LAorWyAgLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCAgICBEaXNhYmxlIGFnZW50eCBzdWJhZ2VudCBjb2RlIGluIHNubXB0cmFwZC5dKQoraWYgdGVzdCAieCRlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50IiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWCwgMSwKKyAgICBbZGVmaW5lIGlmIHlvdSBkbyBub3Qgd2FudCBzbm1wdHJhcGQgdG8gcmVnaXN0ZXIgYXMgYW4gQWdlbnRYIHN1YmFnZW50XSkKK2ZpCisKK2RlZmF1bHRfYWdlbnR4X3NvY2tldD0iL3Zhci9hZ2VudHgvbWFzdGVyIgorTkVUU05NUF9BUkdfV0lUSChhZ2VudHgtc29ja2V0LAorWyAgLS13aXRoLWFnZW50eC1zb2NrZXQ9RklMRSAgICAgICAgIEFnZW50WCBzb2NrZXQgKERlZmF1bHQ6IC92YXIvYWdlbnR4L21hc3RlciBhcyBzcGVjaWZpZWQgaW4gUkZDMjc0MSldLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBmdWxsIHBhdGggXSk7CisgIGZpCisgIEFDX01TR19SRVNVTFQodXNpbmcgQWdlbnRYIHNvY2tldCAkd2l0aHZhbCkKK10sWworICB3aXRodmFsPSRkZWZhdWx0X2FnZW50eF9zb2NrZXQKKyAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IEFnZW50WCBzb2NrZXQgJGRlZmF1bHRfYWdlbnR4X3NvY2tldCkKK10pCitBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9BR0VOVFhfU09DS0VULCIkd2l0aHZhbCIsCisgICAgICAgIFtVbml4IGRvbWFpbiBzb2NrZXQgZm9yIEFnZW50WCBtYXN0ZXItc3ViYWdlbnQgY29tbXVuaWNhdGlvbl0pCisKKyMKKyMgZmVhdHVyZSBhZGRpdGlvbi9yZW1vdmFsIGFuZCBtaW5pbWlhbGlzdCBzdXBwb3J0CisjCitGRUFUVVJFX0FERF9GTEFHUz0iIgorTkVUU05NUF9BUkdfV0lUSChmZWF0dXJlcywKK1sgIC0td2l0aC1mZWF0dXJlcz0iZmVhdDEgZmVhdDIiICAgUmVxdWVzdCBleHRyYSBmZWF0dXJlcyB0byBiZSB0dXJuZWQgb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHVzZWZ1bCB3aXRoIC0tZW5hYmxlLW1pbmltYWxpc3QpXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgbGlzdCBvZiBmZWF0dXJlcyBdKTsKKyAgZmkKKyAgRkVBVFVSRV9BRERfRkxBR1M9Ii0tYWRkICR3aXRodmFsIgorICBBQ19NU0dfUkVTVUxUKGFkZGluZyBpbiBmZWF0dXJlczogJHdpdGh2YWwpCitdKQorQUNfU1VCU1QoRkVBVFVSRV9BRERfRkxBR1MpCisKKworRkVBVFVSRV9SRU1PVkVfRkxBR1M9IiIKK05FVFNOTVBfQVJHX1dJVEgob3V0LWZlYXR1cmVzLAorWyAgLS13aXRoLW91dC1mZWF0dXJlcz0iZmVhdDEuLi4iICBSZW1vdmUgc3BlY2lmaWMgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbXBsaWVzIC0tZW5hYmxlLW1pbmltYWxpc3QpXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgbGlzdCBvZiBmZWF0dXJlcyBdKTsKKyAgZmkKKyAgRkVBVFVSRV9SRU1PVkVfRkxBR1M9Ii0tcmVtb3ZlICR3aXRodmFsIgorICBGRUFUVVJFVEFSR1M9ImZlYXR1cmVzIgorICBBQ19ERUZJTkUoTkVUU05NUF9NSU5JTUFMX0NPREUsIDEsCisgICAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIG5vbi1lc3NlbnRpYWwgY29kZSBmZWF0dXJlcy5dKQorICBBQ19NU0dfUkVTVUxUKHJlbW92aW5nIGZlYXR1cmVzOiAkd2l0aHZhbCkKK10pCitBQ19TVUJTVChGRUFUVVJFX1JFTU9WRV9GTEFHUykKKworCisjIENhdGNoIGNvbW1vbiBtaXN0YWtlcworQUNfQVJHX1dJVEgoZmVhdHVyZSwsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtmZWF0dXJlc10pKQorQUNfQVJHX1dJVEgob3V0LWZlYXR1cmUsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbb3V0LWZlYXR1cmVzXSkpCisKK0ZFQVRVUkVUQVJHUz0iIgorTkVUU05NUF9BUkdfRU5BQkxFKG1pbmltYWxpc3QsCitbICAtLWVuYWJsZS1taW5pbWFsaXN0ICAgICAgICAgICAgIFJlbW92ZSBhbGwgbm9uLWVzc2VudGlhbCBjb2RlIGZlYXR1cmVzLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9taW5pbWFsaXN0IiA9ICJ4eWVzIjsgdGhlbgorICAgIyB3ZSdsbCBhc3N1bWUgdGhlIG1pbmkgYWdlbnQgaXMgZGVzaXJlZCBoZXJlIGFzIHdlbGwKKyAgIG1pbmlfYWdlbnQ9InllcyIKKyAgIEZFQVRVUkVUQVJHUz0iZmVhdHVyZXMiCisKKyAgICMgbmVlZGVkIHRvIGJvb3RzdHJhcCBsYXRlciBjaGVja3MKKyAgIGVjaG8gIiIgPiBpbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oCisgICBBQ19ERUZJTkUoTkVUU05NUF9NSU5JTUFMX0NPREUsIDEsCisgICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBub24tZXNzZW50aWFsIGNvZGUgZmVhdHVyZXMuXSkKK2Vsc2UKKyAgIEZFQVRVUkVIRUFERVJTPSIiCitmaQorQUNfQVJHX1dJVEgoW21pbmltYWxpc3RdLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFttaW5pbWFsaXN0XSkpCitBQ19TVUJTVChGRUFUVVJFVEFSR1MpCitBQ19TVUJTVChGRUFUVVJFSEVBREVSUykKKworTkVUU05NUF9BUkdfRU5BQkxFKG5vdGlmeS1vbmx5LAorWyAgLS1lbmFibGUtbm90aWZ5LW9ubHkgICAgICAgICAgICBCdWlsZCB0b29scyB0aGF0IGNhbiBvbmx5IHNlbmQgbm90aWZpY2F0aW9ucy5dKQoraWYgdGVzdCAieCRlbmFibGVfbm90aWZ5X29ubHkiID0gInh5ZXMiOyB0aGVuCisgICBBQ19ERUZJTkUoTkVUU05NUF9OT1RJRllfT05MWSwgMSwKKyAgICAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byBvbmx5IHN1cHBvcnQgc2VuZGluZyBub3RpZmljYXRpb25zXSkKK2ZpCitBQ19BUkdfV0lUSChbbm90aWZ5LW9ubHldLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFtub3RpZnktb25seV0pKQorQUNfQVJHX0VOQUJMRShbbm90aWZ5b25seV0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW25vdGlmeS1vbmx5XSkpCisKK05FVFNOTVBfQVJHX0VOQUJMRShuby1saXN0ZW4sCitbICAtLWVuYWJsZS1uby1saXN0ZW4gICAgICAgICAgICAgIEJ1aWxkIHRvb2xzIHRoYXQgY2FuJ3QgbGlzdGVuIHRvIHBvcnRzLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9ub19saXN0ZW4iID0gInh5ZXMiIC1vICJ4JGVuYWJsZV9ub3RpZnlfb25seSIgPSAieHllcyI7IHRoZW4KKyAgIGVuYWJsZV9ub19saXN0ZW49InllcyIKKyAgIEFDX0RFRklORShORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JULCAxLAorICAgICBbRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuaW5nIHN1cHBvcnQgZnJvbSB0aGUgY29kZV0pCitmaQorQUNfQVJHX1dJVEgoW25vLWxpc3Rlbl0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW25vLWxpc3Rlbl0pKQorQUNfQVJHX0VOQUJMRShbbm9saXN0ZW5dLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFtuby1saXN0ZW5dKSkKKworTkVUU05NUF9BUkdfRU5BQkxFKHJlYWQtb25seSwKK1sgIC0tZW5hYmxlLXJlYWQtb25seSAgICAgICAgICAgICAgUmVtb3ZlIGFsbCBTRVQgc3VwcG9ydCBmcm9tIHRoZSBjb2RlLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9yZWFkX29ubHkiID0gInh5ZXMiIC1vICJ4JGVuYWJsZV9ub3RpZnlfb25seSIgPSAieHllcyIgOyB0aGVuCisgICBlbmFibGVfcmVhZF9vbmx5PSJ5ZXMiCisgICBBQ19ERUZJTkUoTkVUU05NUF9OT19XUklURV9TVVBQT1JULCAxLAorICAgICBbRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgU0VUL3dyaXRlIGFjY2VzcyBmcm9tIHRoZSBjb2RlXSkKK2ZpCitBQ19BUkdfV0lUSChbcmVhZC1vbmx5XSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbcmVhZC1vbmx5XSkpCitBQ19BUkdfRU5BQkxFKFtyZWFkb25seV0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW3JlYWQtb25seV0pKQorCisKKyMjCisjICAgUHJvamVjdDogQWdlbnQ6IE1JQiBtb2R1bGUgY29uZmlndXJhdGlvbgorIyMKKworTkVUU05NUF9BUkdfRU5BQkxFKG1pbmlfYWdlbnQsCitbICAtLWVuYWJsZS1taW5pLWFnZW50ICAgICAgICAgICAgIEJ1aWxkIGEgbWluaW1hbCBhZ2VudC5dKQoraWYgdGVzdCAieCRlbmFibGVfbWluaV9hZ2VudCIgPSAieHllcyI7IHRoZW4KKyAgICBtaW5pX2FnZW50PSJ5ZXMiCitlbHNlCisgICAgbWluaV9hZ2VudD0ibm8iCitmaQorQUNfQVJHX1dJVEgoW21pbmlhZ2VudF0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW21pbmktYWdlbnRdKSkKK0FDX0FSR19FTkFCTEUoW21pbmlhZ2VudF0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW21pbmktYWdlbnRdKSkKKworCisKKworTkVUU05NUF9BUkdfRU5BQkxFKG1mZC1yZXdyaXRlcywKK1sgIC0tZW5hYmxlLW1mZC1yZXdyaXRlcyAgICAgICAgICAgVXNlIG5ldyBNRkQgcmV3cml0ZXMgb2YgbWliIG1vZHVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYXZhaWxhYmxlLiAoZGVmYXVsdCBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBtaWIgbW9kdWxlIGNvZGUpLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9tZmRfcmV3cml0ZXMiID0gInh5ZXMiOyB0aGVuCisgICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTLCAxLAorICAgICBbRGVmaW5lIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE1GRCBtb2R1bGUgcmV3cml0ZXNdKQorZmkKKworCitORVRTTk1QX0FSR19XSVRIKG1pYl9tb2R1bGVzLAorWyAgLS13aXRoLW1pYi1tb2R1bGVzPSJpdGVtMSAuLi4iICBDb21waWxlIHdpdGggYWRkaXRpb25hbCBtaWIgbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNwYWNlIHNlcGFyYXRlZCBsaXN0KS5dKQorCitORVRTTk1QX0FSR19XSVRIKG91dF9taWJfbW9kdWxlcywKK1sgIC0td2l0aC1vdXQtbWliLW1vZHVsZXM9Imxpc3QiICAgQ29tcGlsZSB3aXRob3V0IHRoZXNlIG1pYiBtb2R1bGVzLgorCisgIERlZmF1bHQgbWliIG1vZHVsZXMgY29tcGlsZWQgaW50byB0aGUgYWdlbnQgKHdoaWNoIGNhbiBiZSByZW1vdmVkKToKKyAgCisgICAgbWliSUkgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgbWliLUlJIHRyZWUuCisgICAgc25tcHYzbWlicyAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgc25tcHYzIG1pYiBtb2R1bGVzLgorICAgIHVjZF9zbm1wICAgICAgICAgICAgICAgVUNELVNOTVAtTUlCIHNwZWNpZmljIGV4dGVuc2lvbnMuCisgICAgYWdlbnRfbWlicyAgICAgICAgICAgICBORVQtU05NUC1BR0VOVC1NSUIgZXh0ZW5zaW9ucworICAgIGFnZW50eCAgICAgICAgICAgICAgICAgQWdlbnRYIHN1cHBvcnQgKHNlZSBiZWxvdykKKyAgICBub3RpZmljYXRpb24gICAgICAgICAgIG1pYnMgc3VwcG9ydGluZyBzcGVjaWZpY2F0aW9uIG9mIHRyYXAgZGVzdGluYXRpb25zLgorICAgIHRhcmdldCAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIFNOTVAgV0dzIFRBUkdFVC1NSUIuCisgICAgdXRpbGl0aWVzICAgICAgICAgICAgICBnZW5lcmFsIGFnZW50IGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzLgorICAgIGRpc21hbi9ldmVudCAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIERJU01BTi1FVkVOVC1NSUIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1cHBvcnRzIHNlbGYgbW9uaXRvcmluZyBhbmQgbm90aWZpY2F0aW9uIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnkgd2hlbiBlcnJvciBjb25kaXRpb25zIGFyZSBmb3VuZCkKKyAgICBkaXNtYW4vc2NoZWR1bGUgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBESVNNQU4tU0NIRURVTEUtTUlCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cmlnZ2VyIFNFVCByZXF1ZXN0cyBhdCBzcGVjaWZpZWQgdGltZXMpCisgICAgaG9zdCAgICAgICAgICAgICAgICAgICBob3N0IHJlc291cmNlcyBtaWIgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgb24gbWFqb3Igc3VwcG9ydGVkIHBsYXRmb3JtcykKKworICBPcHRpb25hbCBtaWIgbW9kdWxlcyB0aGF0IGNhbiBiZSBidWlsdCBpbnRvIHRoZSBhZ2VudCBpbmNsdWRlOgorICAgIHNtdXggICAgICAgICAgICAgICAgICAgc211eCBzdXBwb3J0IHRvIGFsbG93IHN1YmFnZW50cyB0byBhdHRhY2ggdG8gc25tcGQuCisgICAgbWliSUkvbXRhX3NlbmRtYWlsICAgICBTZW5kbWFpbCBzdGF0aXN0aWNzIG1vbml0b3JpbmcgKE1UQS1NSUIpCisgICAgdWNkLXNubXAvZGlza2lvICAgICAgICBUYWJsZSBvZiBpby1kZXZpY2VzIGFuZCBob3cgbXVjaCBkYXRhIHRoZXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZC93cml0dGVuLiAgKG9ubHkgdGVzdGVkIG9uIFNvbGFyaXMsIExpbnV4KQorICAgIGRpc21hbi9vbGQtZXZlbnQtbWliICAgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIERJU01BTi1FVkVOVC1NSUIKKworICBPcHRpb25hbCBtb2R1bGVzIGZvciBzcGVjaWZpYyBwbGF0Zm9ybXMKKyAgICBMaW51eAorICAgICAgdWNkLXNubXAvbG1TZW5zb3JzICAgaGFyZHdhcmUgbW9uaXRvcmluZyAoTE0tU0VOU09SUy1NSUIpCisgICAgICBpcC1taWIvaXB2NEludGVyZmFjZVRhYmxlICAoZXhwZXJpbWVudGFsKQorICAgICAgaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZSAgKGV4cGVyaW1lbnRhbCkKKyAgICAgIHR1bm5lbCAgICAgICAgICAgICAgIExpbnV4IFRVTk5FTC1NSUIgc3VwcG9ydCAoaWZUYWJsZSBleHRlbnNpb24pCisgICAgICBtaWJJSS9pbnRlcmZhY2VzICAgICAob2xkIGlmVGFibGUgaW1wbGVtZW50YXRpb24pCisgICAgICBtaXNjL2lwZndhY2MgICAgICAgICBhY2NvdW50aW5nIHJ1bGVzIElQIGZpcmV3YWxsIGluZm9ybWF0aW9uCisgICAgICBpcGZ3Y2hhaW5zL2lwZndjaGFpbnMgIGZpcmV3YWxsIGNoYWlucyB1bmRlciBpcGZ3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTZWUgYWdlbnQvbWliZ3JvdXAvaXBmd2NoYWlucy9SRUFETUUpCisgICAgICBzY3RwLW1pYiAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgU0NUUC1NSUIKKyAgICAgIGV0aGVybGlrZS1taWIgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBFdGhlckxpa2UtTUlCCisKKyAgICBTb2xhcmlzCisgICAgICB1Y2Qtc25tcC9sbVNlbnNvcnMgICBoYXJkd2FyZSBtb25pdG9yaW5nIChMTS1TRU5TT1JTLU1JQikKKyAgICAgIGlmLW1pYiAgICAgICAgICAgICAgIElGLU1JQiByZXdyaXRlIChhZGQgLS1lbmFibGUtbWZkLXJld3JpdGVzKQorICAgICAgdGNwLW1pYiAgICAgICAgICAgICAgVENQLU1JQiByZXdyaXRlICh0Y3BDb25uZWN0aW9uVGFibGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcExpc3RlbmVyVGFibGU7IGFkZCAtLWVuYWJsZS1tZmQtcmV3cml0ZXMpCisgICAgICB1ZHAtbWliICAgICAgICAgICAgICBVRFAtTUlCIHJld3JpdGUgKHVkcEVuZHBvaW50VGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCAtLWVuYWJsZS1tZmQtcmV3cml0ZXMpCisKKyAgICBGcmVlQlNEL09wZW5CU0QKKyAgICAgIGlmLW1pYiAgICAgICAgICAgICAgIElGLU1JQiByZXdyaXRlIChhZGQgLS1lbmFibGUtbWZkLXJld3JpdGVzKQorCisgIEFnZW50WCBzdXBwb3J0OgorICAgIGFnZW50eC9zdWJhZ2VudCAgICAgICAgYWxsb3dzIHRoZSBhZ2VudCB0byBydW4gYXMgZWl0aGVyIGEgc25tcCBhZ2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWdlbnRYIHN1Yi1hZ2VudC4KKyAgICBhZ2VudHgvbWFzdGVyICAgICAgICAgIG1ha2VzIHRoZSBhZ2VudCBydW4gYXMgYW4gYWdlbnRYIG1hc3RlciBhZ2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBhIG5vcm1hbCBzbm1wIGFnZW50LgorICAgIGFnZW50eCAgICAgICAgICAgICAgICAgaW5jbHVkZXMgYm90aCBhZ2VudHgvbWFzdGVyIGFuZCBhZ2VudHgvY2xpZW50LgorCisgIE9wdGlvbmFsIG1vZHVsZXMgZm9yIEMgY29kZXJzIHRvIGxvb2sgYXQgYW5kL29yIGluY2x1ZGUgYXMgZXh0ZW5zaW9uIGV4YW1wbGVzOgorICAKKyAgICBleGFtcGxlcy91Y2REZW1vUHVibGljICBTTk1QdjMgaW50ZXJvcGVyYWJpbGl0eSB0ZXN0aW5nIG1pYi4KKyAgICBleGFtcGxlcy9leGFtcGxlICAgICAgICBleGFtcGxlIEMgY29kZSBleHRlbnNpb24uXSkKKworCisjCisjIENhdGNoIGNvbW1vbiBtaXN0YWtlcyBpbiBjb25maWd1cmUgb3B0aW9ucworIworQUNfQVJHX1dJVEgobWliLW1vZHVsZSwsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFttaWItbW9kdWxlc10pKQorQUNfQVJHX1dJVEgobW9kdWxlLCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW21pYi1tb2R1bGVzXSkpCitBQ19BUkdfV0lUSChtb2R1bGVzLCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW21pYi1tb2R1bGVzXSkpCisKK0FDX0FSR19XSVRIKG91dC1taWItbW9kdWxlLCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW291dC1taWItbW9kdWxlc10pKQorQUNfQVJHX1dJVEgob3V0LW1vZHVsZSwsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtvdXQtbWliLW1vZHVsZXNdKSkKK0FDX0FSR19XSVRIKG91dC1tb2R1bGVzLCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW291dC1taWItbW9kdWxlc10pKQorCisKKyMjCisjICAgUHJvamVjdDogRW50ZXJwcmlzZSBzZXR0aW5ncwkoPyBBZ2VudC9MaWJyYXJ5L0JvdGg/KQorIyMKKworTkVUU05NUF9BUkdfV0lUSChlbnRlcnByaXNlLW9pZCwKK1tFbnRlcnByaXNlIE9JRHM6ICAod2FybmluZzogdGhpcyBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uKQorCisgIC0td2l0aC1lbnRlcnByaXNlLW9pZCAgICAgICAgICAgICAgVGhlIGVudGVycHJpc2UgbnVtYmVyIGFzc2lnbmVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvciBieSBJQU5BLiAgU2VlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pYW5hLm9yZy9jZ2ktYmluL2VudGVycHJpc2UucGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBnZXQgb25lLCB0aG91Z2ggdXNpbmcgdGhlIGRlZmF1bHQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9iYWJseSB0aGUgcmlnaHQgY2hvaWNlIGlzIG1vc3QgY2FzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgODA3MiA9ICJlbnRlcnByaXNlLm5ldC1zbm1wIildLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGVudGVycHJpc2UgbnVtYmVyIF0pOworICBmaQorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9FTlRFUlBSSVNFX09JRCwgJHdpdGh2YWwpCisgIGVudF9vaWQ9IjEsMyw2LDEsNCwxLCR3aXRodmFsIgorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9FTlRFUlBSSVNFX01JQiwgJGVudF9vaWQpCisgIGVudF9kb3Rfb2lkPSIxLjMuNi4xLjQuMS4kd2l0aHZhbCIKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfRU5URVJQUklTRV9ET1RfTUlCLCAkZW50X2RvdF9vaWQpCisgIEFDX01TR19SRVNVTFQodXNpbmcgZW50ZXJwcmlzZSBudW1iZXIgJHdpdGh2YWwpCitdLFsKKyAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0ICJlbnRlcnByaXNlLm5ldC1zbm1wIikKK10pCisKK05FVFNOTVBfQVJHX1dJVEgoZW50ZXJwcmlzZS1zeXNvaWQsCitbCisgIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZCAgICAgICAgICAgVGhlIGJhc2UgT0lEIGZvciB0aGUgc3lzT2JqZWN0SUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3lzdGVtIGdyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgLjEuMy42LjEuNC4xLjgwNzIuMy4yLi4uID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRTbm1wQWdlbnRPSURzLi4uIildLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSBdKTsKKyAgZmkKKyAgc3lzX29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJyB8IHNlZCAncy9cLi9cLC9nJ2AKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX01JQiwgJHN5c19vaWQpCisgIHN5c19kb3Rfb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nYAorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9TWVNURU1fRE9UX01JQiwgJHN5c19kb3Rfb2lkKQorICBzeXNvaWRfbGVuPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvW15cLl0vL2cnIHwgYXdrIC1GXC4gJ3sgcHJpbnQgTkYgfSdgCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9ET1RfTUlCX0xFTkdUSCwgJHN5c29pZF9sZW4pCisgIEFDX01TR19SRVNVTFQodXNpbmcgZW50ZXJwcmlzZSBzeXNPSUQgJHdpdGh2YWwgLi4uLikKK10sWworICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgZW50ZXJwcmlzZSBzeXNPSUQgIk5FVC1TTk1QLU1JQjo6bmV0U25tcEFnZW50T0lEcy4uLiIpCitdKQorCitORVRTTk1QX0FSR19XSVRIKGVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCwKK1sKKyAgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCBUaGUgT0lEIHVzZWQgZm9yIHRoZSByb290IG9mCisJCQkJICAgICBlbnRlcnByaXNlIHNwZWNpZmljIG5vdGlmaWNhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgLjEuMy42LjEuNC4xLjgwNzIuNCA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0U25tcE5vdGlmaWNhdGlvblByZWZpeCIpXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgXSk7CisgIGZpCisgIG5vdGlmaWNhdGlvbl9vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLycgfCBzZWQgJ3MvXC4vXCwvZydgCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX05PVElGSUNBVElPTl9NSUIsICRub3RpZmljYXRpb25fb2lkKQorICBub3RpZmljYXRpb25fZG90X29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJ2AKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfTk9USUZJQ0FUSU9OX0RPVF9NSUIsICRub3RpZmljYXRpb25fZG90X29pZCkKKyAgbm90aWZpY2F0aW9ub2lkX2xlbj1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL1teXC5dLy9nJyB8IGF3ayAtRlwuICd7IHByaW50IE5GIH0nYAorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9OT1RJRklDQVRJT05fRE9UX01JQl9MRU5HVEgsICRub3RpZmljYXRpb25vaWRfbGVuKQorICBBQ19NU0dfUkVTVUxUKHVzaW5nIGVudGVycHJpc2Ugbm90aWZpY2F0aW9ucyAkd2l0aHZhbCkKK10sWworICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgbm90aWZpY2F0aW9ucyAiTkVULVNOTVAtTUlCOjpuZXRTbm1wTm90aWZpY2F0aW9ucyIpCitdKQorCisKKyMjCisjICAgUHJvamVjdDogUGVybCBzZXR0aW5ncworIyMKKworTkVUU05NUF9BUkdfV0lUSChwZXJsLW1vZHVsZXMsCitbCitQZXJsOgorICAtLXdpdGgtcGVybC1tb2R1bGVzWz1BUkdTXSAgICAgIEluc3RhbGwgdGhlIFBlcmwgbW9kdWxlcyBhbG9uZyB3aXRoIHRoZSByZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG5ldC1zbm1wIHRvb2xraXQuICBJZiBBUkdTIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCB0aGV5J3JlIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZS5QTCBzY3JpcHQuXSxbCisgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Blcmw9InllcyIKKyAgICAgIGlmIHRlc3QgIiR3aXRodmFsIiAhPSAieWVzIjsgdGhlbgorICAgICAgICBQRVJMQVJHUz0iJHdpdGh2YWwiCisgICAgICBmaQorICAgIGZpCitdLCBpbnN0YWxsX3Blcmw9InRyeSIpCisKK05FVFNOTVBfQVJHX0VOQUJMRShlbWJlZGRlZC1wZXJsLAorWyAgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgICAgICAgICBEaXNhYmxlIGVtYmVkZGVkIFBlcmwgaW4gdGhlIFNOTVAgYWdlbnQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcHRyYXBkLiBbZW5hYmxlZCBieSBkZWZhdWx0XV0sCisgICAgZW1iZWRfcGVybD0iJGVuYWJsZXZhbCIsIGVtYmVkX3Blcmw9InRyeSIpCisKK05FVFNOTVBfQVJHX0VOQUJMRShwZXJsLWNjLWNoZWNrcywKK1sgIC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcyAgICAgICAgRGlzYWJsZSBjb25maWd1cmUgY2hlY2tzIGZvciB3aGV0aGVyIFBlcmwncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgQ29tcGlsZXIgaXMgY29tcGF0aWJsZSB3aXRoIG91cnMgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIFBlcmwgaXMgZW5hYmxlZC5dKQorCisKKyMjCisjICAgUHJvamVjdDogUHl0aG9uIHNldHRpbmdzCisjIworCitBQ19BUkdfV0lUSChweXRob24tbW9kdWxlcywKK1sKK1B5dGhvbjoKKyAgLS13aXRoLXB5dGhvbi1tb2R1bGVzWz1BUkdTXSAgICBJbnN0YWxsIHRoZSBweXRob24gYmluZGluZ3MgYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0IG9mIHRoZSBuZXQtc25tcCB0b29sa2l0LiAgSWYgQVJHUyBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdGhleSdyZSBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXAucHkgc2NyaXB0IGFzIGFyZ3VtZW50cy5dLFsKKyAgICBpbnN0YWxsX3B5dGhvbj0ieWVzIgorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBQWVRIT05BUkdTPSIiCisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAibm8iOyB0aGVuCisgICAgICBQWVRIT05BUkdTPSIiCisgICAgICBpbnN0YWxsX3B5dGhvbj0ibm8iCisgICAgZWxzZQorICAgICAgUFlUSE9OQVJHUz0iJHdpdGh2YWwiCisgICAgZmkKK10sIGluc3RhbGxfcHl0aG9uPSJubyIpCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5IHNldHRpbmdzCisjIworCitORVRTTk1QX0FSR19XSVRIKHNlcnZlci1zZW5kLWJ1ZiwKK1sKK05ldHdvcmsgQnVmZmVyczoKKyAgLS13aXRoLXNlcnZlci1zZW5kLWJ1Zls9QVJHXSAgICBVc2UgQVJHIGZvciB0aGUgZGVmYXVsdCBVRFAvVENQIHNlbmQgYnVmZmVyIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgT1MgYnVmZmVyIGZvciBzZXJ2ZXIgc29ja2V0cyB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgKHNubXBkLCBzbm1wdHJhcGQpLiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBydW50aW1lIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEFSRyBzaG91bGQgYmUgdGhlIHNpemUgaW4gYnl0ZXNdLFsKKyAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHNlbmQgYnVmZmVyIF0pCisgICBmaQorICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfU0VORF9CVUYsICR3aXRodmFsKV0sCisgICBBQ19NU0dfUkVTVUxUKFt1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzXSkgKQorCitORVRTTk1QX0FSR19XSVRIKHNlcnZlci1yZWN2LWJ1ZiwKK1sgIC0td2l0aC1zZXJ2ZXItcmVjdi1idWZbPUFSR10gICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb24sIGJ1dCBmb3IgcmVjZWl2ZSBidWZmZXJdLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgcmVjdiBidWZmZXIgXSkKKyAgZmkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfUkVDVl9CVUYsICR3aXRodmFsKV0sCisgIEFDX01TR19SRVNVTFQoW3VzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHNdKSApCisKK05FVFNOTVBfQVJHX1dJVEgoY2xpZW50LXNlbmQtYnVmLAorWyAgLS13aXRoLWNsaWVudC1zZW5kLWJ1Zls9QVJHXSAgICBTaW1pbGFyIGFzIHByZXZpb3VzIG9wdGlvbnMsIGJ1dCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZSBidWZmZXIgb2YgY2xpZW50IHNvY2tldHNdLFsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgc2VuZCBidWZmZXIgXSkKKyAgZmkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9DTElFTlRfU0VORF9CVUYsICR3aXRodmFsKV0sCisgIEFDX01TR19SRVNVTFQoW3VzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHNdKSApCisKK05FVFNOTVBfQVJHX1dJVEgoY2xpZW50LXJlY3YtYnVmLAorWyAgLS13aXRoLWNsaWVudC1yZWN2LWJ1Zls9QVJHXSAgICBTaW1pbGFyIGFzIHByZXZpb3VzIG9wdGlvbnMsIGJ1dCBmb3IgdGhlIHNlbmQgYnVmZmVyXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHJlY3YgYnVmZmVyIF0pCisgIGZpCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1JFQ1ZfQlVGLCAkd2l0aHZhbCldLAorICBBQ19NU0dfUkVTVUxUKFt1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzXSkgKQorCisjIworIyAgIFN5c3RlbTogbGlicmFyeSBzZXR0aW5ncyAgKG1vcmUpCisjIworCitORVRTTk1QX0FSR19XSVRIKGVsZiwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtZWxmXSxbdXNlIGVsZiBsaWJyYXJpZXNdKV0pCisKK05FVFNOTVBfQVJHX1dJVEgobmwsCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLW5sXSxbdXNlIGxpYm5sIHRvIGdldCBuZXRsaW5rIGRhdGEgKGxpbnV4IG9ubHkpLl0pXSkKKworTkVUU05NUF9BUkdfV0lUSChsaWJ3cmFwLAorICBbICAtLXdpdGgtbGlid3JhcFs9TElCUEFUSF0gIENvbXBpbGUgaW4gbGlid3JhcCAodGNwX3dyYXBwZXJzKSBzdXBwb3J0Ll0sCisgIFtdLAorICBbd2l0aF9saWJ3cmFwPSJubyJdKQorCitORVRTTk1QX0FSR19XSVRIKHpsaWIsCisgIFsgIC0td2l0aC16bGliWz1ESVJdICAgICAgICAgdXNlIGxpYnogaW4gRElSXSwKKyAgW10sCisgIFt3aXRoX3psaWI9Im5vIl0pCisKK0FDX0FSR19XSVRIKGJ6aXAyLAorICBbICAtLXdpdGgtYnppcDJbPURJUl0gICAgICAgIHVzZSBsaWJiejIgaW4gRElSXSwKKyAgW10sCisgIFt3aXRoX2J6aXAyPSJubyJdKQorCitORVRTTk1QX0FSR19XSVRIKAorIFttbnR0YWJdLAorIEFTX0hFTFBfU1RSSU5HKAorICAgWy0td2l0aC1tbnR0YWI9Ii9ldGMvbW50dGFiIl0sCisgICBbTW91bnQgdGFibGUgbG9jYXRpb24uIFRoZSBkZWZhdWx0IGlzIHRvIGF1dG9kZXRlY3QgdGhpcy5dKSkKKworIyMKKyMgICBQcm9qZWN0OiBteXNxbAorIyMKKworTkVUU05NUF9BUkdfV0lUSChteXNxbCwKKyAgWyAgLS13aXRoLW15c3FsICAgICAgICAgICAgSW5jbHVkZSBzdXBwb3J0IGZvciBNeVNRTC5dKQoraWYgdGVzdCAieCR3aXRoX215c3FsIiA9ICJ4eWVzIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfTVlTUUwsIDEsCisgICAgW2RlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBteXNxbCBjb2RlIGZvciBzbm1wdHJhcGQgLi4uXSkKK2ZpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MTk5N2YuLjAwMDAwMDAKLS0tIGEvY29uZmlndXJlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDgxNyArMCwwIEBACi0jIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQotIyB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwotIyB0aGF0IG1heSBhcHBseToKLSMKLSMgUG9ydGlvbnMgQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KLSMKLQotIwotIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgotIwotQUNfSU5JVChbTmV0LVNOTVBdLCBbNS40LjRdLCBbbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCi1BQ19QUkVSRVEoWzIuNTldKQotQUNfQ09ORklHX1NSQ0RJUihbYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jXSkKLUFDX1JFVklTSU9OKFskUmV2aXNpb24kXSkKLQotQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oKQotCi1BQ19NU0dfQ0FDSEVfSU5JVCgpCi0KLSMKLSMgc2F2ZSB0aGUgY29uZmlndXJlIGFyZ3VtZW50cwotIwotQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMsIiRhY19jb25maWd1cmVfYXJncyIpCi1DT05GSUdVUkVfT1BUSU9OUz0iXCIkYWNfY29uZmlndXJlX2FyZ3MiXCIKLUFDX1NVQlNUKENPTkZJR1VSRV9PUFRJT05TKQotCi0jCi0jIENvbXBpbGF0aW9uIHNldHVwCi0jCi1BQ19BUkdfV0lUSChjYywgWwotQ29tcGlsZXIgT3B0aW9uczoKLSAgLS13aXRoLWNjPUNDICAgICAgICAgICAgICAgICAgICB1c2UgQ0MgdG8gY29tcGlsZSAoZGVmYXVsdD1nY2MpLl0sCi0gICAgW0NDPSR3aXRoX2NjO2V4cG9ydCBDQ10pCi0KLUFDX0FSR19XSVRIKGxpbmtjYywgWwotICAtLXdpdGgtbGlua2NjPUNDICAgICAgICAgICAgICAgIHVzZSBDQyB0byBsaW5rIChkZWZhdWx0PWdjYykuXSwKLSAgICBbTElOS0NDPSR3aXRoX2xpbmtjYztleHBvcnQgTElOS0NDXSkKLQotQUNfQVJHX1dJVEgoYXIsCi1bICAtLXdpdGgtYXI9QVIgICAgICAgICAgICAgICAgICAgIHVzZSBBUiBhcyB0aGUgYXJjaGl2ZXIuXSwKLSAgICBbQVI9JHdpdGhfYXI7IGV4cG9ydCBBUl0pCi0KLUFDX0FSR19XSVRIKGVuZGlhbm5lc3MsCi1bICAtLXdpdGgtZW5kaWFubmVzcz1iaWd8bGl0dGxlICAgIGRlZmluZSBlbmRpYW5uZXNzIG9mIHRhcmdldCBwbGF0Zm9ybSB3aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtY29tcGlsaW5nLl0sCi0gICAgW2lmIHRlc3QgJHdpdGhfZW5kaWFubmVzcyAhPSAiYmlnIiAtYSAkd2l0aF9lbmRpYW5uZXNzICE9ICJsaXR0bGUiIDsgdGhlbgotICAgICAgIEFDX01TR19FUlJPUihbRW5kaWFubmVzcyBtdXN0IGJlIGJpZyBvciBsaXR0bGUsIG5vdCAiJHdpdGhfZW5kaWFubmVzcyIuXSk7Ci0gICAgIGZpCi1dKQotCi1BQ19BUkdfV0lUSChjZmxhZ3MsCi1bICAtLXdpdGgtY2ZsYWdzPUNGTEFHUyAgICAgICAgICAgIHVzZSBDRkxBR1MgYXMgY29tcGlsZSB0aW1lIGFyZ3VtZW50cy5dLAotICAgIFtDRkxBR1M9JHdpdGhfY2ZsYWdzOyBleHBvcnQgQ0ZMQUdTXSkKLQotQUNfQVJHX1dJVEgobGRmbGFncywKLVsgIC0td2l0aC1sZGZsYWdzPUxERkxBR1MgICAgICAgICAgdXNlIExERkxBR1MgYXMgbGluayB0aW1lIGFyZ3VtZW50cyB0byBsZC5dLAotICAgIFtMREZMQUdTPSR3aXRoX2xkZmxhZ3M7IGV4cG9ydCBMREZMQUdTXSkKLQotQUNfQVJHX0VOQUJMRShhcy1uZWVkZWQsCi1bICAtLWVuYWJsZS1hcy1uZWVkZWQgICAgICAgICAgICAgIExpbmsgbGlicGVybCBhZ2FpbnN0IE5ldC1TTk1QIGxpYnJhcmllcyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBhcHBsaWNhdGlvbnMuIFdlIHJlY29tbWVuZCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGlzIG9wdGlvbiBpZiBpdCB3b3Jrcy5dKQotCi1BQ19BUkdfV0lUSChsaWJzLAotWyAgLS13aXRoLWxpYnM9TElCUyAgICAgICAgICAgICAgICB1c2UgTElCUyBhcyBsaW5rIHRpbWUgYXJndW1lbnRzIHRvIGxkLl0sCi0gICAgW0xJQlM9JHdpdGhfbGliczsgZXhwb3J0IExJQlNdKQotCi1BQ19BUkdfRU5BQkxFKHNpbGVudC1saWJ0b29sLAotWyAgLS1lbmFibGUtc2lsZW50LWxpYnRvb2wgICAgICAgICBQYXNzIC0tc2lsZW50IHRvIGxpYnRvb2wuXSwKLQlMSUJUT09MRkxBR1M9LS1zaWxlbnQpCi1BQ19TVUJTVChMSUJUT09MRkxBR1MpCi0KLUFDX0FSR19XSVRIKGluc3RhbGwtcHJlZml4LAotWyAgLS13aXRoLWluc3RhbGwtcHJlZml4PVBBVEggICAgICBKdXN0IGZvciBpbnN0YWxsaW5nLCBwcmVmaXggYWxsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIHdpdGggUEFUSC4gIFRoaXMgaXMga25vd24gbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd29yayBvbiBzb21lIHN5c3RlbXMgd2l0aCBzaGFyZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgKGVnLCBIUFVYKV0sCi0gICAgICBJTlNUQUxMX1BSRUZJWD0iJHdpdGh2YWwiKQotCi1pZiB0ZXN0ICJ4JElOU1RBTExfUFJFRklYIiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfTVNHX0VSUk9SKFstLXdpdGgtaW5zdGFsbC1wcmVmaXggcmVxdWlyZXMgYW4gYXJndW1lbnRdKQotZmkKLWlmIHRlc3QgIngkSU5TVEFMTF9QUkVGSVgiID0gInhubyIgOyB0aGVuCi0gIElOU1RBTExfUFJFRklYPSIiCi1maQotQUNfU1VCU1QoSU5TVEFMTF9QUkVGSVgpCi0KLSMgY2hlY2sgZm9yIGVycm9ycyBpbiBhcmdzIHRoYXQgcnVuIGFmdGVyIG1vZHVsZSBwcm9jZXNzaW5nIGhlcmUsIHNvCi0jIHRoZXkgZmFpbCBiZWZvcmUgbW9kdWxlIHByb2Nlc3NpbmcuLi4KLUFDX0FSR19FTkFCTEUobGlid3JhcCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbGlid3JhcC8tLXdpdGhvdXQtbGlid3JhcCBpbnN0ZWFkIF0pICkKLSAgQUNfQVJHX0VOQUJMRSh6bGliLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC16bGliLy0td2l0aG91dC16bGliIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKG1pbmlfYWdlbnQsCi1bICAtLWVuYWJsZS1taW5pLWFnZW50ICAgICAgICAgICAgIEJ1aWxkIGEgbWluaW1hbCBhZ2VudC5dKQotaWYgdGVzdCAieCRlbmFibGVfbWluaV9hZ2VudCIgPSAieHllcyI7IHRoZW4KLSAgICBtaW5pX2FnZW50PSJ5ZXMiCi1lbHNlCi0gICAgbWluaV9hZ2VudD0ibm8iCi1maQotQUNfQVJHX1dJVEgobWluaV9hZ2VudCwsCi0gICAgICAgICBBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCBdKSApCi1BQ19BUkdfV0lUSChtaW5pYWdlbnQsLAotICAgICAgICAgQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgXSkgKQotQUNfQVJHX0VOQUJMRShtaW5pYWdlbnQsLAotICAgICAgICAgQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGFnZW50LAotWyAgLS1kaXNhYmxlLWFnZW50ICAgICAgICAgICAgICAgICBEbyBub3QgYnVpbGQgdGhlIGFnZW50IChzbm1wZCkuXSkKLWlmIHRlc3QgIngkZW5hYmxlX2FnZW50IiAhPSAieG5vIjsgdGhlbgotICAgU05NUEQ9J3NubXBkJChFWEVFWFQpJwotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhZ2VudCIKLSAgIFRSQVBMSUJTPSckKFRSQVBEV0lUSEFHRU5UKScKLSAgIFVTRVRSQVBMSUJTPSckKFVTRUFHRU5UTElCUyknCi1lbHNlCi0gICBTTk1QRD0iIgotICAgIyB3ZSBzdGlsbCBuZWVkL3dhbnQgdGhlIGFnZW50bGlicyAoZm9yIHN1YmFnZW50cywgZS5nLiBzbm1wdHJhcGQpCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFnZW50IgotICAgIyBidWlsZGluZyBzbm1wdHJhcGQgdy9vIGFnZW50bGlicyBkb2Vzbid0IHdvcmsgYXRtCi0gICAjVFJBUExJQlM9JyQoVFJBUERXSVRIT1VUQUdFTlQpJwotICAgI1VTRVRSQVBMSUJTPSckKFVTRUxJQlMpJwotICAgVFJBUExJQlM9JyQoVFJBUERXSVRIQUdFTlQpJwotICAgVVNFVFJBUExJQlM9JyQoVVNFQUdFTlRMSUJTKScKLWZpCi1BQ19TVUJTVChTTk1QRCkKLUFDX1NVQlNUKFRSQVBMSUJTKQotQUNfU1VCU1QoVVNFVFJBUExJQlMpCi1BQ19BUkdfV0lUSChhZ2VudCwsCi0gICAgICAgICBBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFnZW50Ly0tZGlzYWJsZS1hZ2VudCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShhcHBsaWNhdGlvbnMsCi1bICAtLWRpc2FibGUtYXBwbGljYXRpb25zICAgICAgICAgIERvIG5vdCBidWlsZCB0aGUgYXBwcyAoc25tcGdldCwgLi4uKS5dKQotaWYgdGVzdCAieCRlbmFibGVfYXBwbGljYXRpb25zIiAhPSAieG5vIjsgdGhlbgotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhcHBzIgotZmkKLSMgQ29tbW9uIG1pc3Rha2VzCi1BQ19BUkdfV0lUSChhcHBsaWNhdGlvbnMsLAotICAgICAgICBBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFwcGxpY2F0aW9ucy8tLWRpc2FibGUtYXBwbGljYXRpb25zIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKG1hbnVhbHMsCi1bICAtLWRpc2FibGUtbWFudWFscyAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBtYW51YWxzLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9tYW51YWxzIiAhPSAieG5vIjsgdGhlbgotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBtYW4iCi1maQotQUNfQVJHX1dJVEgobWFudWFscywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tYW51YWxzLy0tZGlzYWJsZS1tYW51YWxzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKHNjcmlwdHMsCi1bICAtLWRpc2FibGUtc2NyaXB0cyAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBzY3JpcHRzIChtaWIyYywgLi4uKS5dKQotaWYgdGVzdCAieCRlbmFibGVfc2NyaXB0cyIgIT0gInhubyI7IHRoZW4KLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbG9jYWwiCi1maQotQUNfQVJHX1dJVEgoc2NyaXB0cywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zY3JpcHRzLy0tZGlzYWJsZS1zY3JpcHRzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKG1pYnMsCi1bICAtLWRpc2FibGUtbWlicyAgICAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBtaWIgZmlsZXMuXSkKLWlmIHRlc3QgIngkZW5hYmxlX21pYnMiICE9ICJ4bm8iOyB0aGVuCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIG1pYnMiCi1maQotIyB3aXRoLW1pYnMgaXMgdmFsaWQgdG9vLCBidXQgbWVhbnMgc29tZXRoaW5nIGVsc2UKLQotQUNfU1VCU1QoTUFJTlNVQlMpCi1BQ19NU0dfQ0hFQ0tJTkcoW3doYXQgdG8gYnVpbGQgYW5kIGluc3RhbGxdKQotQUNfTVNHX1JFU1VMVChbJE1BSU5TVUJTXSkKLQotQUNfQVJHX0VOQUJMRShtaWItbG9hZGluZywKLVsgIC0tZGlzYWJsZS1taWItbG9hZGluZyAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IHBhcnNlcyBhbmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZXMgdGhlIG1pYiBmaWxlcy5dKQotaWYgdGVzdCAieCRlbmFibGVfbWliX2xvYWRpbmciID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkddLCAxLCAKLSAgICAgICAgICAgIFtEZWZpbmUgaWYgbWliIGxvYWRpbmcgYW5kIHBhcnNpbmcgY29kZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkXSkKLWZpCi1BQ19BUkdfV0lUSChtaWItbG9hZGluZywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItbG9hZGluZy8tLWRpc2FibGUtbWliLWxvYWRpbmcgaW5zdGVhZCBdKSApCi0KLSMKLVNOTVBfVkVSU0lPTlM9IiIKLUFDX0FSR19FTkFCTEUoc25tcHYxLAotWyAgLS1kaXNhYmxlLXNubXB2MSAgICAgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgaW1wbGVtZW50cyBTTk1QdjEuXSkKLWlmIHRlc3QgIngkZW5hYmxlX3NubXB2MSIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9TTk1QVjFdLCAxLCAKLSAgICAgICAgICAgIFtEZWZpbmUgaWYgU05NUHYxIGNvZGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZF0pCi1lbHNlCi0gIFNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDEiCi1maQotQUNfQVJHX1dJVEgoc25tcHYxLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB2MS8tLWRpc2FibGUtc25tcHYxIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKHNubXB2MmMsCi1bICAtLWRpc2FibGUtc25tcHYyYyAgICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIFNOTVB2MmMuXSkKLWlmIHRlc3QgIngkZW5hYmxlX3NubXB2MmMiID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfU05NUFYyQ10sIDEsIAotICAgICAgICAgICAgW0RlZmluZSBpZiBTTk1QdjJjIGNvZGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZF0pCi1lbHNlCi0gIFNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDJjIgotZmkKLUFDX0FSR19XSVRIKHNubXB2MmMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHYyYy8tLWRpc2FibGUtc25tcHYyYyBpbnN0ZWFkIF0pICkKLQotU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMyIKLUFDX01TR19DQUNIRV9BREQoU05NUCBWZXJzaW9ucyBTdXBwb3J0ZWQ6ICAgJFNOTVBfVkVSU0lPTlMpCi0KLUFDX0FSR19FTkFCTEUoc2V0LXN1cHBvcnQsCi1bICAtLWRpc2FibGUtc2V0LXN1cHBvcnQgICAgICAgICAgIERvIG5vdCBhbGxvdyBTTk1QIHNldCByZXF1ZXN0cyB0byB0aGUgYWdlbnQuXSkKLWlmIHRlc3QgIngkZW5hYmxlX3NldF9zdXBwb3J0IiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUXSwgMSwgCi0gICAgICAgICAgICBbRGVmaW5lIGlmIFNOTVAgU0VUIHN1cHBvcnQgc2hvdWxkIGJlIGRpc2FibGVkXSkKLWZpCi1BQ19BUkdfV0lUSChzZXQtc3VwcG9ydCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zZXQtc3VwcG9ydC8tLWRpc2FibGUtc2V0LXN1cHBvcnQgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoZGVzLAotWyAgLS1kaXNhYmxlLWRlcyAgICAgICAgICAgICAgICAgICBEbyBub3Qgc3VwcG9ydCBERVMgZW5jcnlwdGlvbi5dKQotaWYgdGVzdCAieCRlbmFibGVfZGVzIiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX0RFU10sIDEsIAotICAgICAgICAgICAgW0RlZmluZSBpZiBERVMgZW5jcnlwdGlvbiBzaG91bGQgbm90IGJlIHN1cHBvcnRlZF0pCi1maQotQUNfQVJHX1dJVEgoZGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlcy8tLWRpc2FibGUtZGVzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKHByaXZhY3ksCi1bICAtLWRpc2FibGUtcHJpdmFjeSAgICAgICAgICAgICAgIERvbid0IGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgcHJpdmFjeSAoZW5jcnlwdGlvbikuXSkKLWlmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVikKLWZpCi1BQ19BUkdfV0lUSChwcml2YWN5LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXByaXZhY3kvLS1kaXNhYmxlLXByaXZhY3kgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUobWQ1LAotWyAgLS1kaXNhYmxlLW1kNSAgICAgICAgICAgICAgICAgICBEbyBub3Qgc3VwcG9ydCBNRDUgYXV0aGVudGljYXRpb24uXSkKLWlmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9NRDVdLCAxLCAKLSAgICAgICAgICAgIFtEZWZpbmUgaWYgTUQ1IGF1dGhlbnRpY2F0aW9uIHNob3VsZCBub3QgYmUgc3VwcG9ydGVkXSkKLWZpCi1BQ19BUkdfV0lUSChtZDUsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWQ1Ly0tZGlzYWJsZS1tZDUgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoaW50ZXJuYWwtbWQ1LAotWyAgLS1lbmFibGUtaW50ZXJuYWwtbWQ1ICAgICAgICAgICBVc2UgdGhlIGludGVybmFsIE1ENSBzdXBwb3J0Ll0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9pbnRlcm5hbF9tZDUiID0gInh5ZXMiOyB0aGVuCi0gIGlmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgotICAgIEFDX01TR19FUlJPUihZb3UgY2FuIG5vdCBzcGVjaWZ5IGJvdGggLS1lbmFibGUtaW50ZXJuYWwtbWQ1IGFuZCAtLWRpc2FibGUtbWQ1KQotICBlbHNlCi0gICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkKLSAgZmkKLWZpCi1BQ19BUkdfV0lUSChpbnRlcm5hbC1tZDUsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtaW50ZXJuYWwtbWQ1Ly0tZGlzYWJsZS1pbnRlcm5hbC1tZDUgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoaXB2NiwKLVsgIC0tZW5hYmxlLWlwdjYgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgSVB2NiByZWFkeSB2ZXJzaW9uLl0sCi0gICAgW2lmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfSVBWNikKLSAgICBmaV0pCi1BQ19BUkdfV0lUSChpcHY2LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWlwdjYvLS1kaXNhYmxlLWlwdjYgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUobG9jYWwtc211eCwKLVsgIC0tZW5hYmxlLWxvY2FsLXNtdXggICAgICAgICAgICAgUmVzdHJpY3QgU01VWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3QgKGJ5IGRlZmF1bHQpLl0sCi0gICAgW2lmIHRlc3QgIngkZW5hYmxlX2xvY2FsX3NtdXgiID0gInh5ZXMiOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWCkKLSAgICBmaV0pCi1BQ19BUkdfV0lUSChsb2NhbC1zbXV4LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWxvY2FsLXNtdXgvLS1kaXNhYmxlLWxvY2FsLXNtdXggaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoZGVidWdnaW5nLAotWyAgLS1lbmFibGUtZGVidWdnaW5nICAgICAgICAgICAgICBPdXRwdXRzIGV4dHJhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhdCBhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcy4gIE5vcm1hbGx5LCB5b3Ugc2hvdWxkIG5vdCBlbmFibGUgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaW5zdGVhZCB1c2UgdGhlIC1EIGZsYWcgb2YgdGhlIGNvbW1hbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvZ2dsZXMgZGVidWdpbmcgb3V0cHV0IGF0IHJ1bnRpbWUuCi0gIC0tZGlzYWJsZS1kZWJ1Z2dpbmcgICAgICAgICAgICAgRGlzYWxsb3dzIGRlYnVnZ2luZyBjb2RlIHRvIGJlIGJ1aWx0IGluLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWlnaHQgcHJvdmlkZSBzb21lIHNwZWVkIGJlbmVmaXRzLl0sCi0gICAgQUNfREVGSU5FKE5FVFNOTVBfQUxXQVlTX0RFQlVHKSkKLUFDX0FSR19XSVRIKGRlYnVnZ2luZywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZWJ1Z2dpbmcvLS1kaXNhYmxlLWRlYnVnZ2luZyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShkZXZlbG9wZXIsCi1bICAtLWVuYWJsZS1kZXZlbG9wZXIgICAgICAgICAgICAgIFR1cm5zIG9uIHN1cGVyLWR1cGVyLWV4dHJhLWNvbXBpbGUtd2FybmluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHVzaW5nIGdjYy5dLAotICAgIGRldmVsb3Blcj15ZXMpCi1BQ19BUkdfV0lUSChkZXZlbG9wZXIsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGV2ZWxvcGVyLy0tZGlzYWJsZS1kZXZlbG9wZXIgaW5zdGVhZCBdKSApCi0KLWlmIHRlc3QgIngkZW5hYmxlX2RlYnVnZ2luZyIgPSAieG5vIjsgdGhlbgotICAgIEFDX0RFRklORShORVRTTk1QX05PX0RFQlVHR0lORykKLWZpCi0KLUFDX0FSR19XSVRIKGRtYWxsb2MsCi1bICAtLXdpdGgtZG1hbGxvYz1QQVRIICAgICAgICAgICAgIFVzZSBkbWFsbG9jIGxpYnJhcnkgKHd3dy5kbWFsbG9jLmNvbSldLAotICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KLSAgICAgIExJQlM9IiRMSUJTIC1sZG1hbGxvYyIKLSAgICAgIEFDX0RFRklORShIQVZFX0RNQUxMT0NfSCkKLSAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgotICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCR3aXRodmFsKQotICAgICAgTElCUz0iJExJQlMgLWxkbWFsbG9jIgotICAgICAgQUNfREVGSU5FKEhBVkVfRE1BTExPQ19IKQotICAgIGZpCi0pCi1BQ19TVUJTVChIQVZFX0RNQUxMT0NfSCkKLUFDX0FSR19FTkFCTEUoZG1hbGxvYywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZG1hbGxvYy8tLXdpdGhvdXQtZG1hbGxvYyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoZWZlbmNlLAotWyAgLS13aXRoLWVmZW5jZSAgICAgICAgICAgICAgICAgICBMb29rIGZvciBhbmQgdXNlIGxpYmVmZW5jZSAobWFsbG9jKS5dLAotICAgICAgdXNlX2VmZW5jZT0iJHdpdGh2YWwiKQotQUNfQVJHX0VOQUJMRShlZmVuY2UsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVmZW5jZS8tLXdpdGhvdXQtZWZlbmNlIGluc3RlYWQgXSkgKQotCi10cnlyc2FyZWY9bm8KLUFDX0FSR19XSVRIKHJzYXJlZiwKLVsgIC0td2l0aC1yc2FyZWY9UEFUSCAgICAgICAgICAgICAgTG9vayBmb3IgbGlicnNhcmVmIGluIFBBVEgvbGliLl0sCi0gICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgdHJ5cnNhcmVmPXllcwotICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCi0gICAgICB0cnlyc2FyZWY9bm8KLSAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgotICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCR3aXRodmFsKQotICAgICAgdHJ5cnNhcmVmPXllcwotICAgIGZpLAotKQotQUNfQVJHX0VOQUJMRShyc2FyZWYsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJzYXJlZi8tLXdpdGhvdXQtcnNhcmVmIGluc3RlYWQgXSkgKQotCi10cnlvcGVuc3NsPWRlZmF1bHR5ZXMKLWFza2Vkb3BlbnNzbD1ubwotQUNfQVJHX1dJVEgob3BlbnNzbCwKLVsgIC0td2l0aC1vcGVuc3NsPVBBVEggICAgICAgICAgICAgTG9vayBmb3Igb3BlbnNzbCBpbiBQQVRIL2xpYi5dLAotICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KLSAgICAgIHRyeW9wZW5zc2w9eWVzCi0gICAgICBhc2tlZG9wZW5zc2w9eWVzCi0gICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KLSAgICAgIHRyeW9wZW5zc2w9bm8KLSAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgotICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCR3aXRodmFsKQotICAgICAgdHJ5b3BlbnNzbD15ZXMKLSAgICAgIGFza2Vkb3BlbnNzbD15ZXMKLSAgICBmaSwKLSkKLWlmIHRlc3QgIngkdHJ5b3BlbnNzbCIgPSAieGRlZmF1bHR5ZXMiOyB0aGVuCi0gICAgICBBQ19BRERfU0VBUkNIX1BBVEgoL3Vzci9sb2NhbC9zc2wpCi0gICAgICB0cnlvcGVuc3NsPXllcwotZmkKLUFDX0FSR19FTkFCTEUob3BlbnNzbCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkIF0pICkKLUFDX0FSR19XSVRIKHNzbCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkIF0pICkKLUFDX0FSR19FTkFCTEUoc3NsLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgXSkgKQotCi10cnlrcmI1PWRlZmF1bHR5ZXMKLWFza2Vka3JiNT1ubwotQUNfQVJHX1dJVEgoa3JiNSwKLVsgIC0td2l0aC1rcmI1PVBBVEggICAgICAgICAgICAgICAgTG9vayBmb3Iga3JiNSBpbiBQQVRIL2xpYi5dLAotICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KLSAgICAgIHRyeWtyYjU9eWVzCi0gICAgICBhc2tlZGtyYjU9eWVzCi0gICAgICBrcmI1cGF0aD11bmRlZgotICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCi0gICAgICB0cnlrcmI1PW5vCi0gICAgICBrcmI1cGF0aD11bmRlZgotICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCi0gICAgICB0cnlrcmI1PXllcwotICAgICAgYXNrZWRrcmI1PXllcwotICAgICAga3JiNXBhdGg9JHdpdGh2YWwKLSAgICBmaSwKLSkKLWlmIHRlc3QgIngkdHJ5a3JiNSIgPSAieGRlZmF1bHR5ZXMiOyB0aGVuCi0gICAgICB0cnlrcmI1PXllcwotICAgICAga3JiNXBhdGg9L3Vzci9rZXJiZXJvcwotZmkKLUFDX0FSR19FTkFCTEUoa3JiNSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgta3JiNS8tLXdpdGhvdXQta3JiNSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgocnBtLAotWyAgLS13aXRob3V0LXJwbSAgICAgICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBSUE0gcGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3lzdGVtIHdoZW4gYnVpbGRpbmcgdGhlIGhvc3QgTUlCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl0pCi1BQ19BUkdfRU5BQkxFKHJwbSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcnBtLy0td2l0aG91dC1ycG0gaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoYWdlbnR4LWRvbS1zb2NrLW9ubHksCi1bICAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSAgIERpc2FibGUgVURQL1RDUCB0cmFuc3BvcnRzIGZvciBhZ2VudHguXSwKLUFDX0RFRklORShORVRTTk1QX0FHRU5UWF9ET01fU09DS19PTkxZKSkKLUFDX0FSR19XSVRIKGFnZW50eC1kb20tc29jay1vbmx5LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5Ly0tZGlzYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShzbm1wdHJhcGQtc3ViYWdlbnQsCi1bICAtLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50ICAgIERpc2FibGUgYWdlbnR4IHN1YmFnZW50IGNvZGUgaW4gc25tcHRyYXBkLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdHJhcGRfc3ViYWdlbnQiID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYKQotZmkKLUFDX0FSR19XSVRIKHNubXB0cmFwZC1zdWJhZ2VudCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQvLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgob3BhcXVlLXNwZWNpYWwtdHlwZXMsCi1bICAtLXdpdGhvdXQtb3BhcXVlLXNwZWNpYWwtdHlwZXMgIERvbid0IHVzZSBzcGVjaWFsIG9wYXF1ZSBlbmNvZGluZ3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBub3JtYWxseSBjYW5ub3QgaGFuZGxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmcgbnVtYmVycywgbm9yIGxhcmdlIDY0IGJpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJzIHdlbGwuICBCeSBkZWZhdWx0LCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQtc25tcCBwYWNrYWdlIGNvbXBpbGVzIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlc2UgZXh0cmEgZGF0YXR5cGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluIGEgbGVnYWwgd2F5KV0pCi1BQ19BUkdfRU5BQkxFKG9wYXF1ZS1zcGVjaWFsLXR5cGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGFxdWUtc3BlY2lhbC10eXBlcy8tLXdpdGhvdXQtb3BhcXVlLXNwZWNpYWwtdHlwZXMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKG1pYmRpcnMsCi1bICAtLXdpdGgtbWliZGlycz0iZGlyMTpkaXIyOiIgICBEZWZhdWx0IGRpcmVjdG9yaWVzIHRvIGxvb2sgZm9yIG1pYnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IFwkSE9NRS8uc25tcC9taWJzOkRBVEFESVIvc25tcC9taWJzKV0sCi0gICAgW05FVFNOTVBfREVGQVVMVF9NSUJESVJTPSIkd2l0aF9taWJkaXJzIgotICAgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfTUlCRElSUywiJHdpdGhfbWliZGlycyIpXSkKLUFDX0FSR19FTkFCTEUobWliZGlycywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliZGlycy8tLXdpdGhvdXQtbWliZGlycyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgobWlicywKLVsgIC0td2l0aC1taWJzPSJpdGVtMTppdGVtMjoiICAgIERlZmF1bHQgbWliIElEcyB0byByZWFkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUaGUgZGVmYXVsdCBsaXN0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNOTVB2Mi1NSUI6SUYtTUlCOklQLU1JQjpUQ1AtTUlCOlVEUC1NSUIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYW55IG1pYnMgdXNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBtaWIgbW9kdWxlcyB0aGUgYWdlbnQgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIHdpdGgpXSwKLSAgICBORVRTTk1QX0RFRkFVTFRfTUlCUz0iJHdpdGhfbWlicyIpCi0jIGVuYWJsZS1taWJzIGlzIHZhbGlkIHRvbywgYnV0IG1lYW5zIHNvbWV0aGluZyBlbHNlCi0KLUFDX0FSR19XSVRIKG1pYmZpbGVzLAotWyAgLS13aXRoLW1pYmZpbGVzPSJmaWxlMTpmaWxlMiIgRGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogIG5vbmUuICB1c2VzIElEcyBhYm92ZSBpbnN0ZWFkLildLAotICAgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfTUlCRklMRVMsIiR3aXRoX21pYmZpbGVzIikpCi1BQ19BUkdfRU5BQkxFKG1pYmZpbGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJmaWxlcy8tLXdpdGhvdXQtbWliZmlsZXMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUobWliLWNvbmZpZy1jaGVja2luZywKLVsgIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcgICAgVHVybnMgb24gZXh0cmEgY2hlY2tzIGR1cmluZyBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbWliIG1vZHVsZXMuIEFueSBjb25mbGljdHMgd2lsbCBjYXVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSB0byBhYm9ydCAoZGVmYXVsdCBpcyB0byBpc3N1ZSBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZyBhbmQgY29udGludWUuKV0sCi0gICAgd2l0aF9taWJfY2ZnX2NoZWNrcz0ieWVzIix3aXRoX21pYl9jZmdfY2hlY2tzPSJubyIpCi1BQ19BUkdfV0lUSChtaWItY29uZmlnLWNoZWNraW5nLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmcgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUobWliLWNvbmZpZy1kZWJ1ZywKLVsgIC0tZW5hYmxlLW1pYi1jb25maWctZGVidWcgICAgICAgVHVybnMgb24gdmVyYm9zZSBvdXRwdXQgZHVyaW5nIG1pYiBtb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgcHJvY2Vzc2luZy4pXSwKLSAgICB3aXRoX21pYl9jZmdfZGVidWc9InllcyIsd2l0aF9taWJfY2ZnX2RlYnVnPSJubyIpCi1BQ19BUkdfV0lUSChtaWItY29uZmlnLWNoZWNraW5nLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmcgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUobWZkLXJld3JpdGVzLAotWyAgLS1lbmFibGUtbWZkLXJld3JpdGVzICAgICAgICAgICBVc2UgbmV3IE1GRCByZXdyaXRlcyBvZiBtaWIgbW9kdWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBhdmFpbGFibGUuIChkZWZhdWx0IGlzIHRvIHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIG1pYiBtb2R1bGUgY29kZSkuXSkKLWlmIHRlc3QgIngkZW5hYmxlX21mZF9yZXdyaXRlcyIgPSAieHllcyI7IHRoZW4KLSAgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMpCi1maQotQUNfQVJHX1dJVEgobWZkLXJld3JpdGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1mZC1yZXdyaXRlcy8tLWRpc2FibGUtbWZkLXJld3JpdGVzIGluc3RlYWQgXSkgKQotCi1hc2tlZHBrY3M9bm8KLUFDX0FSR19XSVRIKHBrY3MsCi1bICAtLXdpdGgtcGtjcz1QQVRIICAgICAgICAgICAgICAgIExvb2sgZm9yIHBrY3MxMSBpbiBQQVRIL2xpYi5dLAotICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KLSAgICAgIGFza2VkcGtjcz15ZXMKLSAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgotICAgICAgYXNrZWRwa2NzPW5vCi0gICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KLSAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgkd2l0aHZhbCkKLSAgICAgIGFza2VkcGtjcz15ZXMKLSAgICBmaSwKLSkKLUFDX0FSR19FTkFCTEUocGtjcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGtjcy8tLXdpdGhvdXQtcGtjcyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRSh0ZXN0aW5nLWNvZGUsCi1bICAtLWVuYWJsZS10ZXN0aW5nLWNvZGUgICAgICAgICAgIEVuYWJsZXMgc29tZSBjb2RlIHNlY3Rpb25zIHRoYXQgc2hvdWxkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZyBvZiBjZXJ0YWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBmdW5jdGlvbmFsaXRpZXMuICBUaGlzIHNob3VsZCAqbm90KiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0dXJuZWQgb24gZm9yIHByb2R1Y3Rpb24gdXNlLiAgRXZlci5dLAotICAgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUpKQotQUNfQVJHX1dJVEgodGVzdGluZy1jb2RlLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXRlc3RpbmctY29kZS8tLWRpc2FibGUtdGVzdGluZy1jb2RlIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKHJlZW50cmFudCwKLVsgIC0tZW5hYmxlLXJlZW50cmFudCAgICAgICAgICAgICAgRW5hYmxlcyBsb2NraW5nIGZ1bmN0aW9ucyB0aGF0IHByb3RlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IHJlc291cmNlcyBpbiBzb21lIG11bHRpLXRocmVhZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50cy4gIFRoaXMgZG9lcyBub3QgZ3VhcmFudGVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLXNhZmUgb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSBhbiBleHBlcmltZW50YWwgc2V0dGluZy5dLAotICAgIHdpdGhfcmVzX2xvY2tzPSJ5ZXMiLHdpdGhfcmVzX2xvY2tzPSJubyIpCi1BQ19BUkdfV0lUSChyZWVudHJhbnQsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcmVlbnRyYW50Ly0tZGlzYWJsZS1yZWVudHJhbnQgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKHJvb3QtYWNjZXNzLAotWwotQ29uZmlndXJpbmcgdGhlIGFnZW50OgotICAtLXdpdGhvdXQtcm9vdC1hY2Nlc3MgICAgICAgICAgIFRoZSBzbm1wZCBhZ2VudCB3b24ndCByZXF1aXJlIHJvb3QgYWNjZXNzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuIGl0LiAgVGhlIGluZm9ybWF0aW9uIGl0IHJldHVybnMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliLUlJIHRyZWUgbWF5IG5vdCBiZSBjb3JyZWN0LCBob3dldmVyLl0pCi1BQ19BUkdfRU5BQkxFKHJvb3QtYWNjZXNzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1yb290LWFjY2Vzcy8tLXdpdGhvdXQtcm9vdC1hY2Nlc3MgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGttZW0tdXNhZ2UsCi1bICAtLXdpdGhvdXQta21lbS11c2FnZSAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGFueSBjb2RlIHJlbGF0ZWQgdG8gdGhlIHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGttZW0uXSkKLUFDX0FSR19FTkFCTEUoa21lbS11c2FnZSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgta21lbS11c2FnZS8tLXdpdGhvdXQta21lbS11c2FnZSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoZHVtbXktdmFsdWVzLAotWyAgLS13aXRoLWR1bW15LXZhbHVlcyAgICAgICAgICAgICBQcm92aWRlICdwbGFjZWhvbGRlcicgZHVtbXkgdmFsdWVzIHdoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGVjaG5pY2FsbHkgbm90IGNvbXBsaWFudCB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVAgc3BlY2lmaWNhdGlvbnMsIGJ1dCB3YXMgaG93IHRoZSBhZ2VudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGVkIGZvciB2ZXJzaW9ucyA8IDQuMC5dKQotQUNfQVJHX0VOQUJMRShkdW1teS12YWx1ZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWR1bW15LXZhbHVlcy8tLXdpdGhvdXQtZHVtbXktdmFsdWVzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChwZXJzaXN0ZW50LWRpcmVjdG9yeSwKLVsgIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0iZGlyZWN0b3J5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgZGlyZWN0b3J5IGZvciBwZXJzaXN0ZW50IGRhdGEgc3RvcmFnZS5dLGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9IiR3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5IikKLUFDX0FSR19FTkFCTEUocGVyc2lzdGVudC1kaXJlY3RvcnksLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5Ly0td2l0aG91dC1wZXJzaXN0ZW50LWRpcmVjdG9yeSBpbnN0ZWFkIF0pICkKLQotZGVmYXVsdF9wZXJzaXN0ZW50X21hc2s9MDc3Ci1BQ19BUkdfV0lUSChwZXJzaXN0ZW50LW1hc2ssCi1bICAtLXdpdGgtcGVyc2lzdGVudC1tYXNrPSJtYXNrIiAgRGVmYXVsdCBtYXNrIGZvciBwZXJzaXN0ZW50IGRhdGEgc3RvcmFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogMDc3KV0sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIG1hc2sgdmFsdWUgXSk7Ci0gIGZpCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJHdpdGh2YWwpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1BFUlNJU1RFTlRfTUFTSywkd2l0aHZhbCkKLV0sWwotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICRkZWZhdWx0X3BlcnNpc3RlbnRfbWFzaykKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLLCRkZWZhdWx0X3BlcnNpc3RlbnRfbWFzaykKLV0pCi1BQ19BUkdfRU5BQkxFKHBlcnNpc3RlbnQtbWFzaywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVyc2lzdGVudC1tYXNrIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChjb3B5X3BlcnNpc3RlbnRfZmlsZXMsCi1bICAtLXdpdGgtY29weS1wZXJzaXN0ZW50LWZpbGVzPSJubyIgRG9uJ3QgY29weSBwZXJzaXN0ZW50IGZpbGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHVzZSAieWVzIiB0byBjb3B5IHRoZW0pLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiB5ZXMpXSwKLSAgICBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9IiR3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlcyIpCi1BQ19BUkdfRU5BQkxFKGNvcHlfcGVyc2lzdGVudF9maWxlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY29weV9wZXJzaXN0ZW50X2ZpbGVzLy0td2l0aG91dC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgaW5zdGVhZCBdKSApCi0KLWRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm49Ii90bXAvc25tcGRYWFhYWFgiCi1BQ19BUkdfV0lUSCh0ZW1wLWZpbGUtcGF0dGVybiwKLVsgIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybj1QQVRURVJOICBQYXR0ZXJuIG9mIHRlbXBvcmFyeSBmaWxlcyAoRGVmYXVsdDogL3RtcC9zbm1wZFhYWFhYWCldLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwYXR0ZXJuIF0pOwotICBmaQotICBBQ19NU0dfUkVTVUxUKHVzaW5nIHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOLCIkd2l0aHZhbCIsW1BhdHRlcm4gb2YgdGVtcG9yYXJ5IGZpbGVzXSkKLV0sWwotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybikKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4sIiRkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuIixbUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXNdKQotXSkKLUFDX0FSR19FTkFCTEUodGVtcC1maWxlLXBhdHRlcm4sLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuIGluc3RlYWQgXSkgKQotCi1kZWZhdWx0X2FnZW50eF9zb2NrZXQ9Ii92YXIvYWdlbnR4L21hc3RlciIKLUFDX0FSR19XSVRIKGFnZW50eC1zb2NrZXQsCi1bICAtLXdpdGgtYWdlbnR4LXNvY2tldD1GSUxFICAgICAgICAgQWdlbnRYIHNvY2tldCAoRGVmYXVsdDogL3Zhci9hZ2VudHgvbWFzdGVyIGFzIHNwZWNpZmllZCBpbiBSRkMyNzQxKV0sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIGZ1bGwgcGF0aCBdKTsKLSAgZmkKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBBZ2VudFggc29ja2V0ICR3aXRodmFsKQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9BR0VOVFhfU09DS0VULCIkd2l0aHZhbCIsW1VuaXggZG9tYWluIHNvY2tldCBmb3IgQWdlbnRYIG1hc3Rlci1zdWJhZ2VudCBjb21tdW5pY2F0aW9uXSkKLV0sWwotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgQWdlbnRYIHNvY2tldCAkZGVmYXVsdF9hZ2VudHhfc29ja2V0KQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9BR0VOVFhfU09DS0VULCIkZGVmYXVsdF9hZ2VudHhfc29ja2V0IixbVW5peCBkb21haW4gc29ja2V0IGZvciBBZ2VudFggbWFzdGVyLXN1YmFnZW50IGNvbW11bmljYXRpb25dKQotXSkKLUFDX0FSR19FTkFCTEUoYWdlbnR4LXNvY2tldCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtYWdlbnR4LXNvY2tldCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoZGVmYXVsdC1zbm1wLXZlcnNpb24sCi1bICAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249IjMiIERlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVnYWwgdmFsdWVzOiAxLCAyIChmb3IgU05NUHYyYykgb3IgMy5dLAotICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049IiR3aXRoX2RlZmF1bHRfc25tcF92ZXJzaW9uIikKLUFDX0FSR19FTkFCTEUoZGVmYXVsdC1zbm1wLXZlcnNpb24sLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uLy0td2l0aG91dC1kZWZhdWx0LXNubXAtdmVyc2lvbiBpbnN0ZWFkIF0pICkKLQotIyB3ZSB0ZXN0IHRoaXMgbm93IGFuZCBsYXRlciBhcyB3ZWxsLiAgd2UgdGVzdCBpdCBub3cgc28gY29uZmlndXJlIGNhbiBkaWUKLSMgZWFybHkgb24gd2l0aCBhbiBlcnJvciByYXRoZXIgdGhhbiB3YWl0aW5nIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NyaXB0LgotaWYgdGVzdCAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAieCI7IHRoZW4KLSAgaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID0gIjJjIjsgdGhlbgotICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049IjIiCi0gIGZpCi0gIGlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMSIgLWEgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMiIgLWEgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMyI7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoSWxsZWdhbCB2ZXJzaW9uIG51bWJlciBwYXNzZWQgdG8gLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uKQotICBmaQotZmkKLQotQUNfQVJHX1dJVEgoc3lzX2NvbnRhY3QsCi1bICAtLXdpdGgtc3lzLWNvbnRhY3Q9Indob0B3aGVyZSIgIERlZmF1bHQgc3lzdGVtIGNvbnRhY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTE9HSU5ARE9NQUlOTkFNRSldLAotICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1Q9IiR3aXRoX3N5c19jb250YWN0IikKLUFDX0FSR19FTkFCTEUoc3lzX2NvbnRhY3QsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXN5cy1jb250YWN0Ly0td2l0aG91dC1zeXMtY29udGFjdCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoc3lzX2xvY2F0aW9uLAotWyAgLS13aXRoLXN5cy1sb2NhdGlvbj0ibG9jYXRpb24iICBEZWZhdWx0IHN5c3RlbSBsb2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBVbmtub3duKV0sCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DPSIkd2l0aF9zeXNfbG9jYXRpb24iKQotQUNfQVJHX0VOQUJMRShzeXNfbG9jYXRpb24sLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXN5cy1sb2NhdGlvbi8tLXdpdGhvdXQtc3lzLWxvY2F0aW9uIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChsb2dmaWxlLAotWyAgLS13aXRoLWxvZ2ZpbGU9ImxvY2F0aW9uIiAgICAgICBEZWZhdWx0IGxvZyBmaWxlIGxvY2F0aW9uIGZvciBzbm1wZC5dLAotICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT0iJHdpdGhfbG9nZmlsZSIpCi1BQ19BUkdfRU5BQkxFKGxvZ2ZpbGUsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWxvZ2ZpbGUvLS13aXRob3V0LWxvZ2ZpbGUgaW5zdGVhZCBdKSApCi1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA9ICJubyI7IHRoZW4KLSAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9Im5vbmUiCi1maQotCi1BQ19BUkdfV0lUSCh0cmFuc3BvcnRzLAotWyAgLS13aXRoLXRyYW5zcG9ydHM9InQxIHQyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHRyYW5zcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLl0pCi1BQ19BUkdfV0lUSChvdXRfdHJhbnNwb3J0cywKLVsgIC0td2l0aC1vdXQtdHJhbnNwb3J0cz0idDEgLi4uIiAgRXhjbHVkZSBsaXN0ZWQgU05NUCB0cmFuc3BvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgotCi0gIEF2YWlsYWJsZSBTTk1QIHRyYW5zcG9ydCBtb2R1bGVzIGFyZToKLQotICAgIFVEUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVAuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYWx3YXlzIGNvbXBpbGVkIGluLgotICAgIFVEUElQdjYgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVB2Ni4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhdmFpbGFibGUgZm9yIExpbnV4LCBTb2xhcmlzIGFuZAotICAgICAgICAgICAgICAgIEZyZWVCU0QgYXQgbGVhc3QuCi0gICAgICAgICAgICAgICAgSXQgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdC4KLSAgICBUQ1BJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKLSAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgotICAgICAgICAgICAgICAgIEl0IGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQuCi0gICAgVENQICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFRDUC9JUC4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0LCBidXQgbWF5IGJlIG9taXR0ZWQuCi0gICAgVW5peCAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVuaXggZG9tYWluIHByb3RvY29scy4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGV4Y2VwdCBvbiBXaW4zMgotICAgICAgICAgICAgICAgIHBsYXRmb3JtcywgYW5kIG1heSBiZSBvbWl0dGVkLgotICAgIENhbGxiYWNrICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBhbiBpbnRlcm5hbCBsb2NhbGx5IGNvbm5lY3RlZCBwYWlyCi0gICAgICAgICAgICAgICAgb2Ygc25tcF9zZXNzaW9ucy4KLSAgICBBQUw1UFZDICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgQUFMNSBQVkNzLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIHByZXNlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgTGludXgsCi0gICAgICAgICAgICAgICAgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBhbmQgbWF5IGJlIG9taXR0ZWQuCi0gICAgSVBYICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIElQWCBwZXIgUkZDIDE0MjAuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgcHJlc2VudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBMaW51eCwKLSAgICAgICAgICAgICAgICBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0IGFuZCBtYXkgYmUgb21pdHRlZC4KLV0pCi0KLSMKLSMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzIGluIHRyYW5zcG9ydCBvcHRpb25zCi0jCi1BQ19BUkdfV0lUSCh0cmFuc3BvcnQsLCAgICBBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC10cmFuc3BvcnRzLy0td2l0aG91dC10cmFuc3BvcnRzIGluc3RlYWQgXSkgICAgICkKLUFDX0FSR19XSVRIKG91dC10cmFuc3BvcnQsLEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC10cmFuc3BvcnRzLy0td2l0aG91dC1vdXQtdHJhbnNwb3J0cyBpbnN0ZWFkIF0pICkKLQotIwotIyBzZWN1cml0eSBtb2R1bGVzCi0jCi0KLUFDX0FSR19XSVRIKHNlY3VyaXR5LW1vZHVsZXMsCi1bICAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBzZXJ2aWNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgotCi0gIEF2YWlsYWJsZSBTTk1QIHNlY3VyaXR5IHNlcnZpY2VzOgotCi0gICAgICAgIHVzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB1c2VyIGJhc2VkIFNOTVAgc2VjdXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1aXJlZCBhbmQgYWx3YXlzIGNvbXBpbGVkIGluKQotICAgICAgICBrc20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3Iga2VyYmVyb3MgYmFzZWQgU05NUCBzZWN1cml0eQotXSkKLUFDX0FSR19FTkFCTEUoc2VjdXJpdHktbW9kdWxlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcy8tLXdpdGhvdXQtc2VjdXJpdHktbW9kdWxlcyBpbnN0ZWFkIF0pICkKLQotIwotIyBtaWIgbW9kdWxlcwotIwotCi1BQ19BUkdfV0lUSChtaWJfbW9kdWxlcywKLVsgIC0td2l0aC1taWItbW9kdWxlcz0iaXRlbTEgLi4uIiAgQ29tcGlsZSB3aXRoIGFkZGl0aW9uYWwgbWliIG1vZHVsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTcGFjZSBzZXBhcmF0ZWQgbGlzdCkuXSkKLUFDX0FSR19FTkFCTEUobWliX21vZHVsZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzLy0td2l0aG91dC1taWItbW9kdWxlcyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgob3V0X21pYl9tb2R1bGVzLAotWyAgLS13aXRoLW91dC1taWItbW9kdWxlcz0ibGlzdCIgICBDb21waWxlIHdpdGhvdXQgdGhlc2UgbWliIG1vZHVsZXMuCi0KLSAgRGVmYXVsdCBtaWIgbW9kdWxlcyBjb21waWxlZCBpbnRvIHRoZSBhZ2VudCAod2hpY2ggY2FuIGJlIHJlbW92ZWQpOgotICAKLSAgICBtaWJJSSAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBtaWItSUkgdHJlZS4KLSAgICBzbm1wdjNtaWJzICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBzbm1wdjMgbWliIG1vZHVsZXMuCi0gICAgdWNkX3NubXAgICAgICAgICAgICAgICBVQ0QtU05NUC1NSUIgc3BlY2lmaWMgZXh0ZW5zaW9ucy4KLSAgICBhZ2VudF9taWJzICAgICAgICAgICAgIE5FVC1TTk1QLUFHRU5ULU1JQiBleHRlbnNpb25zCi0gICAgYWdlbnR4ICAgICAgICAgICAgICAgICBBZ2VudFggc3VwcG9ydCAoc2VlIGJlbG93KQotICAgIG5vdGlmaWNhdGlvbiAgICAgICAgICAgbWlicyBzdXBwb3J0aW5nIHNwZWNpZmljYXRpb24gb2YgdHJhcCBkZXN0aW5hdGlvbnMuCi0gICAgdGFyZ2V0ICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgU05NUCBXR3MgVEFSR0VULU1JQi4KLSAgICB1dGlsaXRpZXMgICAgICAgICAgICAgIGdlbmVyYWwgYWdlbnQgY29uZmlndXJhdGlvbiB1dGlsaXRpZXMuCi0gICAgZGlzbWFuL2V2ZW50ICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgRElTTUFOLUVWRU5ULU1JQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydHMgc2VsZiBtb25pdG9yaW5nIGFuZCBub3RpZmljYXRpb24gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeSB3aGVuIGVycm9yIGNvbmRpdGlvbnMgYXJlIGZvdW5kKQotICAgIGRpc21hbi9zY2hlZHVsZSAgICAgICAgc3VwcG9ydCBmb3IgdGhlIERJU01BTi1TQ0hFRFVMRS1NSUIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyaWdnZXIgU0VUIHJlcXVlc3RzIGF0IHNwZWNpZmllZCB0aW1lcykKLSAgICBob3N0ICAgICAgICAgICAgICAgICAgIGhvc3QgcmVzb3VyY2VzIG1pYiBzdXBwb3J0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSBvbiBtYWpvciBzdXBwb3J0ZWQgcGxhdGZvcm1zKQotCi0gIE9wdGlvbmFsIG1pYiBtb2R1bGVzIHRoYXQgY2FuIGJlIGJ1aWx0IGludG8gdGhlIGFnZW50IGluY2x1ZGU6Ci0gICAgc211eCAgICAgICAgICAgICAgICAgICBzbXV4IHN1cHBvcnQgdG8gYWxsb3cgc3ViYWdlbnRzIHRvIGF0dGFjaCB0byBzbm1wZC4KLSAgICBtaWJJSS9tdGFfc2VuZG1haWwgICAgIFNlbmRtYWlsIHN0YXRpc3RpY3MgbW9uaXRvcmluZyAoTVRBLU1JQikKLSAgICB1Y2Qtc25tcC9kaXNraW8gICAgICAgIFRhYmxlIG9mIGlvLWRldmljZXMgYW5kIGhvdyBtdWNoIGRhdGEgdGhleSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkL3dyaXR0ZW4uICAob25seSB0ZXN0ZWQgb24gU29sYXJpcywgTGludXgpCi0gICAgZGlzbWFuL29sZC1ldmVudC1taWIgICBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRElTTUFOLUVWRU5ULU1JQgotCi0gIE9wdGlvbmFsIG1vZHVsZXMgZm9yIHNwZWNpZmljIHBsYXRmb3JtcwotICAgIExpbnV4Ci0gICAgICB1Y2Qtc25tcC9sbVNlbnNvcnMgICBoYXJkd2FyZSBtb25pdG9yaW5nIChMTS1TRU5TT1JTLU1JQikKLSAgICAgIGlwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUgIChleHBlcmltZW50YWwpCi0gICAgICBpcC1taWIvaXB2NkludGVyZmFjZVRhYmxlICAoZXhwZXJpbWVudGFsKQotICAgICAgdHVubmVsICAgICAgICAgICAgICAgTGludXggVFVOTkVMLU1JQiBzdXBwb3J0IChpZlRhYmxlIGV4dGVuc2lvbikKLSAgICAgIG1pYklJL2ludGVyZmFjZXMgICAgIChvbGQgaWZUYWJsZSBpbXBsZW1lbnRhdGlvbikKLSAgICAgIG1pc2MvaXBmd2FjYyAgICAgICAgIGFjY291bnRpbmcgcnVsZXMgSVAgZmlyZXdhbGwgaW5mb3JtYXRpb24KLSAgICAgIGlwZndjaGFpbnMvaXBmd2NoYWlucyAgZmlyZXdhbGwgY2hhaW5zIHVuZGVyIGlwZncKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNlZSBhZ2VudC9taWJncm91cC9pcGZ3Y2hhaW5zL1JFQURNRSkKLSAgICAgIHNjdHAtbWliICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBTQ1RQLU1JQgotCi0gICAgU29sYXJpcwotICAgICAgdWNkLXNubXAvbG1TZW5zb3JzICAgaGFyZHdhcmUgbW9uaXRvcmluZyAoTE0tU0VOU09SUy1NSUIpCi0gICAgICBpZi1taWIgICAgICAgICAgICAgICBJRi1NSUIgcmV3cml0ZSAoYWRkIC0tZW5hYmxlLW1mZC1yZXdyaXRlcykKLSAgICAgIHRjcC1taWIgICAgICAgICAgICAgIFRDUC1NSUIgcmV3cml0ZSAodGNwQ29ubmVjdGlvblRhYmxlIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BMaXN0ZW5lclRhYmxlOyBhZGQgLS1lbmFibGUtbWZkLXJld3JpdGVzKQotICAgICAgdWRwLW1pYiAgICAgICAgICAgICAgVURQLU1JQiByZXdyaXRlICh1ZHBFbmRwb2ludFRhYmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgLS1lbmFibGUtbWZkLXJld3JpdGVzKQotCi0gICAgRnJlZUJTRC9PcGVuQlNECi0gICAgICBpZi1taWIgICAgICAgICAgICAgICBJRi1NSUIgcmV3cml0ZSAoYWRkIC0tZW5hYmxlLW1mZC1yZXdyaXRlcykKLQotICBBZ2VudFggc3VwcG9ydDoKLSAgICBhZ2VudHgvc3ViYWdlbnQgICAgICAgIGFsbG93cyB0aGUgYWdlbnQgdG8gcnVuIGFzIGVpdGhlciBhIHNubXAgYWdlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIGFnZW50WCBzdWItYWdlbnQuCi0gICAgYWdlbnR4L21hc3RlciAgICAgICAgICBtYWtlcyB0aGUgYWdlbnQgcnVuIGFzIGFuIGFnZW50WCBtYXN0ZXIgYWdlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgYSBub3JtYWwgc25tcCBhZ2VudC4KLSAgICBhZ2VudHggICAgICAgICAgICAgICAgIGluY2x1ZGVzIGJvdGggYWdlbnR4L21hc3RlciBhbmQgYWdlbnR4L2NsaWVudC4KLQotICBPcHRpb25hbCBtb2R1bGVzIGZvciBDIGNvZGVycyB0byBsb29rIGF0IGFuZC9vciBpbmNsdWRlIGFzIGV4dGVuc2lvbiBleGFtcGxlczoKLSAgCi0gICAgZXhhbXBsZXMvdWNkRGVtb1B1YmxpYyAgU05NUHYzIGludGVyb3BlcmFiaWxpdHkgdGVzdGluZyBtaWIuCi0gICAgZXhhbXBsZXMvZXhhbXBsZSAgICAgICAgZXhhbXBsZSBDIGNvZGUgZXh0ZW5zaW9uLl0pCi1BQ19BUkdfRU5BQkxFKG91dF9taWJfbW9kdWxlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzLy0td2l0aG91dC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCBdKSApCi0KLQotIwotQUNfQVJHX1dJVEgoZW50ZXJwcmlzZS1vaWQsCi1bRW50ZXJwcmlzZSBPSURzOiAgKHdhcm5pbmc6IHRoaXMgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLikKLQotICAtLXdpdGgtZW50ZXJwcmlzZS1vaWQgICAgICAgICAgICAgIFRoZSBlbnRlcnByaXNlIG51bWJlciBhc3NpZ25lZCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZW5kb3IgYnkgSUFOQS4gIFNlZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvY2dpLWJpbi9lbnRlcnByaXNlLnBsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IG9uZSwgdGhvdWdoIHVzaW5nIHRoZSBkZWZhdWx0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFibHkgdGhlIHJpZ2h0IGNob2ljZSBpcyBtb3N0IGNhc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDgwNzIgPSAiZW50ZXJwcmlzZS5uZXQtc25tcCIpXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBlbnRlcnByaXNlIG51bWJlciBdKTsKLSAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfRU5URVJQUklTRV9PSUQsICR3aXRodmFsKQotICBlbnRfb2lkPSIxLDMsNiwxLDQsMSwkd2l0aHZhbCIKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfRU5URVJQUklTRV9NSUIsICRlbnRfb2lkKQotICBlbnRfZG90X29pZD0iMS4zLjYuMS40LjEuJHdpdGh2YWwiCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0VOVEVSUFJJU0VfRE9UX01JQiwgJGVudF9kb3Rfb2lkKQotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGVudGVycHJpc2UgbnVtYmVyICR3aXRodmFsKQotXSxbCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCAiZW50ZXJwcmlzZS5uZXQtc25tcCIpCi1dKQotQUNfQVJHX0VOQUJMRShlbnRlcnByaXNlLW9pZCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1vaWQvLS13aXRob3V0LWVudGVycHJpc2Utb2lkIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChlbnRlcnByaXNlLXN5c29pZCwKLVsKLSAgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkICAgICAgICAgICBUaGUgYmFzZSBPSUQgZm9yIHRoZSBzeXNPYmplY3RJRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzeXN0ZW0gZ3JvdXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCAuMS4zLjYuMS40LjEuODA3Mi4zLjIuLi4gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldFNubXBBZ2VudE9JRHMuLi4iKV0sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlIF0pOwotICBmaQotICBzeXNfb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nIHwgc2VkICdzL1wuL1wsL2cnYAotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9TWVNURU1fTUlCLCAkc3lzX29pZCkKLSAgc3lzX2RvdF9vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLydgCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9ET1RfTUlCLCAkc3lzX2RvdF9vaWQpCi0gIHN5c29pZF9sZW49YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9bXlwuXS8vZycgfCBhd2sgLUZcLiAneyBwcmludCBORiB9J2AKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX0RPVF9NSUJfTEVOR1RILCAkc3lzb2lkX2xlbikKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBlbnRlcnByaXNlIHN5c09JRCAkd2l0aHZhbCAuLi4uKQotXSxbCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCBlbnRlcnByaXNlIHN5c09JRCAiTkVULVNOTVAtTUlCOjpuZXRTbm1wQWdlbnRPSURzLi4uIikKLV0pCi1BQ19BUkdfRU5BQkxFKGVudGVycHJpc2Utc3lzb2lkLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1zeXNvaWQgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCwKLVsKLSAgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCBUaGUgT0lEIHVzZWQgZm9yIHRoZSByb290IG9mCi0JCQkJICAgICBlbnRlcnByaXNlIHNwZWNpZmljIG5vdGlmaWNhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgLjEuMy42LjEuNC4xLjgwNzIuNCA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0U25tcE5vdGlmaWNhdGlvblByZWZpeCIpXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgXSk7Ci0gIGZpCi0gIG5vdGlmaWNhdGlvbl9vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLycgfCBzZWQgJ3MvXC4vXCwvZydgCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX05PVElGSUNBVElPTl9NSUIsICRub3RpZmljYXRpb25fb2lkKQotICBub3RpZmljYXRpb25fZG90X29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJ2AKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfTk9USUZJQ0FUSU9OX0RPVF9NSUIsICRub3RpZmljYXRpb25fZG90X29pZCkKLSAgbm90aWZpY2F0aW9ub2lkX2xlbj1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL1teXC5dLy9nJyB8IGF3ayAtRlwuICd7IHByaW50IE5GIH0nYAotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9OT1RJRklDQVRJT05fRE9UX01JQl9MRU5HVEgsICRub3RpZmljYXRpb25vaWRfbGVuKQotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGVudGVycHJpc2Ugbm90aWZpY2F0aW9ucyAkd2l0aHZhbCkKLV0sWwotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgbm90aWZpY2F0aW9ucyAiTkVULVNOTVAtTUlCOjpuZXRTbm1wTm90aWZpY2F0aW9ucyIpCi1dKQotQUNfQVJHX0VOQUJMRShlbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZC8tLXdpdGhvdXQtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIGluc3RlYWQgXSkgKQotIwotIyBDYXRjaCBjb21tb24gbWlzdGFrZXMgaW4gY29uZmlndXJlIG9wdGlvbnMKLSMKLUFDX0FSR19XSVRIKG1pYi1tb2R1bGUsLCAgICBBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbjEuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCBdKSAgICAgKQotQUNfQVJHX1dJVEgobW9kdWxlLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbjMuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCBdKSApCi1BQ19BUkdfV0lUSChtb2R1bGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbjQuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKG91dC1taWItbW9kdWxlLCxBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbjUuIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgXSkgKQotQUNfQVJHX1dJVEgob3V0LW1vZHVsZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uNy4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCBdKSApCi1BQ19BUkdfV0lUSChvdXQtbW9kdWxlLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbjguIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgXSkgKQotCi0jCi0jIFBlcmwgc3BlY2lmaWMKLSMKLUFDX0FSR19XSVRIKHBlcmwtbW9kdWxlcywKLVsKLVBlcmw6Ci0gIC0td2l0aC1wZXJsLW1vZHVsZXNbPUFSR1NdICAgICAgSW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzIGFsb25nIHdpdGggdGhlIHJlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbmV0LXNubXAgdG9vbGtpdC4gIElmIEFSR1MgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIHRoZXkncmUgcGFzc2VkIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VmaWxlLlBMIHNjcmlwdC5dLFsKLSAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAibm8iOyB0aGVuCi0gICAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgIGVsc2UKLSAgICAgIGluc3RhbGxfcGVybD0ieWVzIgotICAgICAgaWYgdGVzdCAiJHdpdGh2YWwiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIFBFUkxBUkdTPSIkd2l0aHZhbCIKLSAgICAgIGZpCi0gICAgZmkKLV0sIGluc3RhbGxfcGVybD0idHJ5IikKLQotQUNfQVJHX0VOQUJMRShlbWJlZGRlZC1wZXJsLAotWyAgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgICAgICAgICBEaXNhYmxlIGVtYmVkZGVkIFBlcmwgaW4gdGhlIFNOTVAgYWdlbnQgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcHRyYXBkLiBbZW5hYmxlZCBieSBkZWZhdWx0XV0sCi0gICAgZW1iZWRfcGVybD0iJGVuYWJsZXZhbCIsIGVtYmVkX3Blcmw9InRyeSIpCi0KLUFDX0FSR19FTkFCTEUocGVybC1jYy1jaGVja3MsCi1bICAtLWRpc2FibGUtcGVybC1jYy1jaGVja3MgICAgICAgIERpc2FibGUgY29uZmlndXJlIGNoZWNrcyBmb3Igd2hldGhlciBQZXJsJ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIENvbXBpbGVyIGlzIGNvbXBhdGlibGUgd2l0aCBvdXJzIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBQZXJsIGlzIGVuYWJsZWQuXSkKLQotIyBDb21tb24gcGVybCBtaXN0YWtlcwotQUNfQVJHX0VOQUJMRShwZXJsLW1vZHVsZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcmwtbW9kdWxlcy8tLXdpdGhvdXQtcGVybC1tb2R1bGVzIGluc3RlYWQgXSkgKQotQUNfQVJHX1dJVEgoZW1iZWRkZWQtcGVybCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsLy0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIGluc3RlYWQgXSkgKQotQUNfQVJHX1dJVEgocGVybC1jYy1jaGVja3MsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcGVybC1jYy1jaGVja3MvLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzIGluc3RlYWQgXSkgKQotCi0KLSMKLSMgUHl0aG9uIHNwZWNpZmljCi0jCi1BQ19BUkdfV0lUSChweXRob24tbW9kdWxlcywKLVsKLVB5dGhvbjoKLSAgLS13aXRoLXB5dGhvbi1tb2R1bGVzWz1BUkdTXSAgICBJbnN0YWxsIHRoZSBweXRob24gYmluZGluZ3MgYWxvbmcgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0IG9mIHRoZSBuZXQtc25tcCB0b29sa2l0LiAgSWYgQVJHUyBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdGhleSdyZSBwYXNzZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXAucHkgc2NyaXB0IGFzIGFyZ3VtZW50cy5dLFsKLSAgICBpbnN0YWxsX3B5dGhvbj0ieWVzIgotICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBQWVRIT05BUkdTPSIiCi0gICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAibm8iOyB0aGVuCi0gICAgICBQWVRIT05BUkdTPSIiCi0gICAgICBpbnN0YWxsX3B5dGhvbj0ibm8iCi0gICAgZWxzZQotICAgICAgUFlUSE9OQVJHUz0iJHdpdGh2YWwiCi0gICAgZmkKLV0sIGluc3RhbGxfcHl0aG9uPSJubyIpCi0KLSMgb3RoZXIgZmxhZ3MKLQotQUNfQVJHX1dJVEgoc2VydmVyLXNlbmQtYnVmLAotWwotTmV0d29yayBCdWZmZXJzOgotICAtLXdpdGgtc2VydmVyLXNlbmQtYnVmWz1BUkddICAgIFVzZSBBUkcgZm9yIHRoZSBkZWZhdWx0IFVEUC9UQ1Agc2VuZCBidWZmZXIgaW5zdGVhZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBPUyBidWZmZXIgZm9yIHNlcnZlciBzb2NrZXRzIHRoYXQgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCAoc25tcGQsIHNubXB0cmFwZCkuICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIHJ1bnRpbWUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQVJHIHNob3VsZCBiZSB0aGUgc2l6ZSBpbiBieXRlc10sWwotICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgc2VuZCBidWZmZXIgXSkKLSAgIGZpCi0gICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9TRU5EX0JVRiwgJHdpdGh2YWwpXSwKLSAgIEFDX01TR19SRVNVTFQoW3VzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHNdKSApCi1BQ19BUkdfRU5BQkxFKHNlcnZlci1zZW5kLWJ1ZiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VydmVyLXNlbmQtYnVmLy0td2l0aG91dC1zZXJ2ZXItc2VuZC1idWYgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKHNlcnZlci1yZWN2LWJ1ZiwKLVsgIC0td2l0aC1zZXJ2ZXItcmVjdi1idWZbPUFSR10gICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb24sIGJ1dCBmb3IgcmVjZWl2ZSBidWZmZXJdLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgcmVjdiBidWZmZXIgXSkKLSAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfUkVDVl9CVUYsICR3aXRodmFsKV0sCi0gIEFDX01TR19SRVNVTFQoW3VzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHNdKSApCi1BQ19BUkdfRU5BQkxFKHNlcnZlci1yZWN2LWJ1ZiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VydmVyLXJlY3YtYnVmLy0td2l0aG91dC1zZXJ2ZXItcmVjdi1idWYgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGNsaWVudC1zZW5kLWJ1ZiwKLVsgIC0td2l0aC1jbGllbnQtc2VuZC1idWZbPUFSR10gICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb25zLCBidXQgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmUgYnVmZmVyIG9mIGNsaWVudCBzb2NrZXRzXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHNlbmQgYnVmZmVyIF0pCi0gIGZpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1NFTkRfQlVGLCAkd2l0aHZhbCldLAotICBBQ19NU0dfUkVTVUxUKFt1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzXSkgKQotQUNfQVJHX0VOQUJMRShjbGllbnQtc2VuZC1idWYsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNsaWVudC1zZW5kLWJ1Zi8tLXdpdGhvdXQtY2xpZW50LXNlbmQtYnVmIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChjbGllbnQtcmVjdi1idWYsCi1bICAtLXdpdGgtY2xpZW50LXJlY3YtYnVmWz1BUkddICAgIFNpbWlsYXIgYXMgcHJldmlvdXMgb3B0aW9ucywgYnV0IGZvciB0aGUgc2VuZCBidWZmZXJdLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgcmVjdiBidWZmZXIgXSkKLSAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9DTElFTlRfUkVDVl9CVUYsICR3aXRodmFsKV0sCi0gIEFDX01TR19SRVNVTFQoW3VzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHNdKSApCi1BQ19BUkdfRU5BQkxFKGNsaWVudC1yZWN2LWJ1ZiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY2xpZW50LXJlY3YtYnVmLy0td2l0aG91dC1jbGllbnQtcmVjdi1idWYgaW5zdGVhZCBdKSApCi0KLSMKLSMgb3RoZXJ3aXNlIHByb21wdGVkIGluZm9ybWF0aW9uCi0jCi1BQ19BUkdfV0lUSChkZWZhdWx0cywKLVsKLU1pc2NlbGxhbmVvdXM6Ci0gIC0td2l0aC1kZWZhdWx0cyAgICAgICAgIFVzZSBkZWZhdWx0cyBmb3IgcHJvbXB0ZWQgdmFsdWVzLl0sCi0gICAgZGVmYXVsdHM9InllcyIsZGVmYXVsdHM9Im5vIikKLUFDX0FSR19FTkFCTEUoZGVmYXVsdHMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRlZmF1bHRzLy0td2l0aG91dC1kZWZhdWx0cyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRSh1Y2Qtc25tcC1jb21wYXRpYmlsaXR5LAotWyAgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBJbnN0YWxsIHVjZC1zbm1wIGxvb2stYWxpa2UgaGVhZGVycyBhbmQgbGlicy4KLV0pCi1BQ19BUkdfV0lUSCh1Y2Qtc25tcC1jb21wYXRpYmlsaXR5LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkvLS1kaXNhYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgaW5zdGVhZCBdKSApCi0KLSMKLSMgc2V0dXAgaW5zdGFsbCB0YXJnZXRzCi0jCi1pZiB0ZXN0ICJ4JGVuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5IiA9ICJ4eWVzIiA7IHRoZW4JCi0gIGluc3RhbGx1Y2RoZWFkZXJzPWluc3RhbGx1Y2RoZWFkZXJzCi0gIGluc3RhbGx1Y2RsaWJzPWluc3RhbGx1Y2RsaWJzCi0gIEFDX01TR19DQUNIRV9BREQoVUNELVNOTVAgY29tcGF0YWJpbGl0eTogICAgIGVuYWJsZWQpCi1maQotQUNfU1VCU1QoaW5zdGFsbHVjZGhlYWRlcnMpCi1BQ19TVUJTVChpbnN0YWxsdWNkbGlicykKLQotIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4gCi1pZiB0ZXN0ICJ4JHdpdGhfcm9vdF9hY2Nlc3MiID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MpCi1maQotCi0jIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgotaWYgdGVzdCAieCR3aXRoX2ttZW1fdXNhZ2UiID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfTk9fS01FTV9VU0FHRSkKLWZpCi0KLSMgRGVmaW5lIHVubGVzcyBzcGVjaWZpY2FsbHkgc3VwcHJlc3NlZCAoaS5lLiwgb3B0aW9uIGRlZmF1bHRzIHRvIGZhbHNlKS4gCi1pZiB0ZXN0ICJ4JHdpdGhfZHVtbXlfdmFsdWVzIiAhPSAieHllcyI7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTKQotZmkKLQotIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4gCi1pZiB0ZXN0ICJ4JHdpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMiICE9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMpCi1maQotCi0KLSMgb3ZlcmZsb3cgcHJvYmxlbXMgd2l0aCBocHV4J3Mgc2gKLSMgdGFrZW4gZnJvbSBQZXJsJ3MgQ29uZmlndXJlIHNjcmlwdCAKLQotQUNfTVNHX0NIRUNLSU5HKFtpZiBJIG5lZWQgdG8gZmVlZCBteXNlbGYgdG8ga3NoXSkKLWlmIHRlc3QgLWYgL2hwLXV4IC1hIC1mIC9iaW4va3NoOyB0aGVuCi0gIGlmIChQQVRIPS47IGFsaWFzIC14KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBBQ19NU0dfUkVTVUxUKG5vKQotICBlbHNlCi0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gICAgaWYgdGVzdCAieCQxIiA9ICJ4IjsgdGhlbgotICAgICAgZXhlYyAvYmluL2tzaCAkMAotICAgIGVsc2UKLSAgICAgIGV4ZWMgL2Jpbi9rc2ggJDAgIiRAIgotICAgIGZpCi0gIGZpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCi1maQotCi1pZiB0ZXN0ICJ4JGRldmVsb3BlciIgIT0gInhubyIgLWEgLWYgJHNyY2Rpci9yZW1vdmUtZmlsZXM7IHRoZW4KLSAgIyB0dXJuIG9uIHRoZSBkZXZlbG9wZXIgZmxhZyB3aGVuIHRha2VuIGZyb20gYSBTVk4gY2hlY2tvdXQgKG5vdCBhIHJlbGVhc2UpCi0gIGRldmVsb3Blcj0ieWVzIgotZmkKLQotQUNfTEFORyhbQ10pCi1BQ19QUk9HX0NDCi1BQ19QUk9HX0NQUAotTElOS0NDPSR7TElOS0NDLSIkQ0MifQotQUNfU1VCU1QoTElOS0NDKQotQUNfQUlYCi0KLSMgc3lzdGVtIGNoZWNrCi1BQ19DQU5PTklDQUxfVEFSR0VUCi1jaGFuZ2VxdW90ZSgsICkKLVBBUlRJQUxUQVJHRVRPUz1gZWNobyAkdGFyZ2V0X29zIHwgc2VkICdzL1stLl9dLiovLydgCi1jaGFuZ2VxdW90ZShbLCBdKQotCi0jIHBsYXRmb3JtLXNwZWNpZmljIGNvbXBpbGVyIGZsYWdzCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotCUNGTEFHUz0iJENGTEFHUyAtRG1pbmd3MzIiCi1maQotCi0jIHBsYXRmb3JtLXNwZWNpZmljIGxpbmtlciBmbGFncwotY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgYWl4NC4yKnxhaXg0LjMqfGFpeDUqfGFpeDYqKQotICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doYXQgbGlua2VyIGZsYWdzIHRvIGFkZCB0byBlbmFibGUgcnVudGltZSBsaW5raW5nIG9uIEFJWF0pCi0gICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgICAgICAgICAgICAgICBuZXRzbm1wX2FpeF9ydW50aW1lbGlua2luZ19mbGFnc19vaz15ZXMKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZmkKLSAgICAgICAgZG9uZQotICAgICAgICBpZiB0ZXN0ICJYJG5ldHNubXBfYWl4X3J1bnRpbWVsaW5raW5nX2ZsYWdzX29rIiAhPSAiWHllcyI7IHRoZW4KLQkgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCi0JICAgICAgICBuZXRzbm1wX2FpeF9sZGZsYWdzPSItV2wsLWJydGwiCi0JICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXRzbm1wX2FpeF9sZGZsYWdzPSItYnJ0bCIKLQkgICAgZmkKLSAgICAgICAgICAgIExERkxBR1M9IiRuZXRzbm1wX2FpeF9sZGZsYWdzICRMREZMQUdTIgotCSAgICBBQ19NU0dfUkVTVUxUKCRuZXRzbm1wX2FpeF9sZGZsYWdzKQotCWVsc2UKLQkgICAgQUNfTVNHX1JFU1VMVChbbm9uZV0pCi0JZmkKLQk7OwotICAgIGRhcndpbjgqfGRhcndpbjkqKQotICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgZGFyd2luIGxkIG1pZ2h0IG5lZWQgLWZsYXRfbmFtZXNwYWNlXSkKLQlpZiB0ZXN0IC16ICIkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIjsgdGhlbgotCQlMREZMQUdTPSItZmxhdF9uYW1lc3BhY2UgJExERkxBR1MiCi0JCUFDX01TR19SRVNVTFQoW3llc10pCi0JZWxzZQotCQlBQ19NU0dfUkVTVUxUKFtub10pCi0JZmkKLQk7OwotICAgICopCi0gICAgICAgIDs7Ci1lc2FjCi0KLSMgbGlidG9vbCBzdHVmZiBmb3Igc2hhcmVkL3N0YXRpYyBsaWJyYXJpZXMuCi1BQ19MSUJUT09MX0RMT1BFTgotQUNfTElCVE9PTF9XSU4zMl9ETEwKLUFDX1BST0dfTElCVE9PTAotQUNfU1VCU1QoTElCVE9PTF9ERVBTKQotCi0jIENoZWNrcyBmb3IgcHJvZ3JhbXMuCi1BQ19QUk9HX0lOU1RBTEwKLUFDX1BST0dfTE5fUwotQUNfUFJPR19NQUtFX1NFVAotQUNfUFJPR19FR1JFUAotQUNfUEFUSF9QUk9HKFtQU1BST0ddLHBzKQotQUNfUEFUSF9QUk9HKFtQRVJMUFJPR10scGVybCkKLUFDX1BBVEhfUFJPRyhbUFlUSE9OUFJPR10scHl0aG9uKQotQUNfQ0hFQ0tfUFJPR1MoV0hPQU1JLCB3aG9hbWkgbG9nbmFtZSwgd2hvYW1pKQotQUNfQ0hFQ0tfUFJPR1MoU0VELHNlZCBnc2VkKQotQUNfQ0hFQ0tfUFJPR1MoRklORCxmaW5kKQotQUNfUEFUSF9QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKLUFDX1BBVEhfUFJPRyhBVVRPSEVBREVSLCBhdXRvaGVhZGVyKQotaWYgdGVzdCAieCRhY19jdl9wcm9nX0FVVE9DT05GIiA9ICJ4IjsgdGhlbgotCUFVVE9DT05GPSI6IgotCUFDX1NVQlNUKEFVVE9DT05GKQotZmkKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19BVVRPSEVBREVSIiA9ICJ4IjsgdGhlbgotCUFVVE9IRUFERVI9IjoiCi0JQUNfU1VCU1QoQVVUT0hFQURFUikKLWZpCi0KLUFDX1BBVEhfUFJPRyhbVU5BTUVQUk9HXSx1bmFtZSkKLUFDX0RFRklORV9VTlFVT1RFRChVTkFNRVBST0csIiRVTkFNRVBST0ciKQotCi1BQ19DX0NPTlNUCi1BQ19DX0lOTElORQotCi0KLSMgZ2V0IHZlcnNpb24gbnVtYmVyLgotQUNfTVNHX0NIRUNLSU5HKFtmb3IgbmV0LXNubXAgdmVyc2lvbiBudW1iZXJdKQotVkVSU0lPTj0kUEFDS0FHRV9WRVJTSU9OCi0KLSMgY3JlYXRlIHRoZSByZWxlYXNlIHZlcnNpb24gbnVtYmVyLi4uLiAgSSdtIG5vdCBzdXJlIHRoaXMgaXMgdXNlZAotIyBhbnl3aGVyZSBhbnkgbG9uZ2VyLgotX3JlbGVhc2VfdmVyc2lvbj1gZWNobyAkVkVSU0lPTiB8IHNlZCAncy8iOy4qLy87cy8uKiIvLztzL3ByZS8wLi87J2AKLWNoYW5nZXF1b3RlKCwgKQotUkVMRUFTRVZFUlNJT049YGVjaG8gJF9yZWxlYXNlX3ZlcnNpb24gfCBzZWQgJ3MvXlwoWzAtOV1cKVwuXChbMC05XVwpL1wxOlwyOjAvJ2AKLWNoYW5nZXF1b3RlKFssIF0pCi0KLUFDX1NVQlNUKFZFUlNJT04pCi1BQ19TVUJTVChSRUxFQVNFVkVSU0lPTikKLUFDX01TR19SRVNVTFQoJFZFUlNJT04pCi1BQ19NU0dfQ0FDSEVfQUREKE5ldC1TTk1QIFZlcnNpb246ICAgICAgICAgICAkVkVSU0lPTikKLQotIyBzdXBlciB0eXBlIGNoZWNraW5nCi0jIFdXV1hYWAotQUNfTVNHX0NIRUNLSU5HKFtmb3IgZGV2ZWxvcGVyIGdjYyBmbGFnc10pCi1pZiB0ZXN0ICJ4JGRldmVsb3BlciIgPSAieHllcyIgLWEgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgotICBERVZGTEFHUz0iLVdhbGwgLVdpbmxpbmUgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3dyaXRlLXN0cmluZ3MgLVdjYXN0LXF1YWwgLVduby1jaGFyLXN1YnNjcmlwdHMiCi1lbHNlCi0gIERFVkZMQUdTPSIiCi1maQotQUNfTVNHX1JFU1VMVCgkREVWRkxBR1MpCi1BQ19TVUJTVChERVZGTEFHUykKLQotIwotIyBoYWNrcyBmb3IgYnVpbGRpbmcgb3V0c2lkZSBvZiB0aGUgc291cmNlIGRpcmVjdG9yeQotIwotIyAxKSBtYWtlIHN1cmUgYnVpbGQgaW5jbHVkZSBwYXRocyBhcmUgYmVmb3JlIHNvdXJjZQotIyAyKSBjaGVjayBmb3IgR05VIG1ha2UgdG8gdXNlIHZwYXRoIGluc3RlYWQgb2YgVlBBVEgKLSMKLU5PTl9HTlVfVlBBVEg9IlZQQVRIID0iCi1HTlVfdnBhdGg9IiN2cGF0aCIKLSMKLSMgZGVmaW5lIGluY2x1ZGUgcGF0aHMgcmVsYXRpdmUgdG8gdG9wX3NyY2RpcgotIyB0d2VhayBpbmNsdWRlcyBpZiB3ZSdyZSBidWlsZGluZyBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgZGlyCi1pZiB0ZXN0ICJ4JHNyY2RpciIgPSAieC4iOyB0aGVuCi1UT1BfSU5DTFVERVM9U1JDX1RPUF9JTkNMVURFUwotU05NUExJQl9JTkNMVURFUz1TUkNfU05NUExJQl9JTkNMVURFUwotQUdFTlRfSU5DTFVERVM9U1JDX0FHRU5UX0lOQ0xVREVTCi1IRUxQRVJfSU5DTFVERVM9U1JDX0hFTFBFUl9JTkNMVURFUwotTUlCR1JPVVBfSU5DTFVERVM9U1JDX01JQkdST1VQX0lOQ0xVREVTCi1lbHNlCi1UT1BfSU5DTFVERVM9QkxEX1RPUF9JTkNMVURFUwotU05NUExJQl9JTkNMVURFUz1CTERfU05NUExJQl9JTkNMVURFUwotQUdFTlRfSU5DTFVERVM9QkxEX0FHRU5UX0lOQ0xVREVTCi1IRUxQRVJfSU5DTFVERVM9QkxEX0hFTFBFUl9JTkNMVURFUwotTUlCR1JPVVBfSU5DTFVERVM9QkxEX01JQkdST1VQX0lOQ0xVREVTCi1tYWtlIC12IC1mIC9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8IGdyZXAgR05VID4vZGV2L251bGwKLWhhdmVfZ251X21ha2U9JD8KLWlmIHRlc3QgJGhhdmVfZ251X21ha2UgLWVxIDAgOyB0aGVuCi0gICAgTk9OX0dOVV9WUEFUSD0iI1ZQQVRIID0iCi0gICAgR05VX3ZwYXRoPSJ2cGF0aCIKLWZpCi1maQotQUNfU1VCU1QoVE9QX0lOQ0xVREVTKQotQUNfU1VCU1QoU05NUExJQl9JTkNMVURFUykKLUFDX1NVQlNUKEFHRU5UX0lOQ0xVREVTKQotQUNfU1VCU1QoSEVMUEVSX0lOQ0xVREVTKQotQUNfU1VCU1QoTUlCR1JPVVBfSU5DTFVERVMpCi1BQ19TVUJTVChHTlVfdnBhdGgpCi1BQ19TVUJTVChOT05fR05VX1ZQQVRIKQotCi0KLSMKLSMgQ2hlY2sgd2hldGhlciB3ZSBjYW4gdXNlIC1VeCAtRHg9eCB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIKLSMKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1bi1kZWZpbmUgdGFyZ2V0IHN5c3RlbSB0b2tlbiAoYmVmb3JlIHJlZGVmaW5pbmcpXSkKLU9MRF9DUFBGTEFHUz0iJENQUEZMQUdTIgotQ1BQRkxBR1M9Ii1VJFBBUlRJQUxUQVJHRVRPUyAtRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKLQotQUNfRUdSRVBfQ1BQKHllcyxbWwotI2lmZGVmICRQQVJUSUFMVEFSR0VUT1MKLXllcwotI2VuZGlmCi1dXSwKLVtQQVJUSUFMVEFSR0VURkxBR1M9Ii1VJFBBUlRJQUxUQVJHRVRPUyAtRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKLSBBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sCi1bUEFSVElBTFRBUkdFVEZMQUdTPSItRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKLSBBQ19NU0dfUkVTVUxUKFtub10pXSkKLUNGTEFHUz0iJENGTEFHUyAkUEFSVElBTFRBUkdFVEZMQUdTIgotQ1BQRkxBR1M9IiRPTERfQ1BQRkxBR1MiCi1BQ19NU0dfQ0FDSEVfQUREKEJ1aWxkaW5nIGZvcjogICAgICAgICAgICAgICAkUEFSVElBTFRBUkdFVE9TKQotCi0KLSMKLSMgY2hlY2sgZm9yIHNwZWNpYWwgaW5jbHVkZXMgYW5kIHBpY2sgb25lCi0jCi0KLUFDX01TR19DSEVDS0lORyhbZm9yIHN5c3RlbSBpbmNsdWRlIGZpbGVdKQotY2hhbmdlcXVvdGUoLCApCi1maWxlYmFzZT0kdGFyZ2V0X29zCi0jIGlnbm9yZSBiaW5hcnkgZm9ybWF0IGluZGljYXRpb24KLWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9lbGYvLydgCi1maWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvYW91dC8vJ2AKLWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9lY29mZi8vJ2AKLWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9jb2ZmLy8nYAotd2hpbGUgdGVzdCAieCRmaWxlYmFzZSIgIT0gIngkbGFzdCIgLWEgISAtZiAkc3JjZGlyL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtLyRmaWxlYmFzZS5oCi1kbwotICAgIGxhc3Q9JGZpbGViYXNlCi0gICAgZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL1stLl9dW14tLl9dKiQvLydgCi0gICAgaWYgdGVzdCAieCRmaWxlYmFzZSIgPSAieCRsYXN0IjsgdGhlbgotCWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9bMC05XSokLy8nYAotICAgIGZpCi1kb25lCi0KLWlmIHRlc3QgIngkZmlsZWJhc2UiID0gIngkbGFzdCI7IHRoZW4KLSAgICBmaWxlYmFzZT0iZ2VuZXJpYyIKLWZpCi1hY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEU9Im5ldC1zbm1wL3N5c3RlbS8kZmlsZWJhc2UuaCIKLQotY2hhbmdlcXVvdGUoWywgXSkKLUFDX01TR19SRVNVTFQoJGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSkKLUFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUsICIkYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIikKLQotIyBzZWNvbmQgcGFydCwgdGhlIENQVSB0eXBlLgotCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBtYWNoaW5lLXR5cGUgaW5jbHVkZSBmaWxlXSkKLWNoYW5nZXF1b3RlKCwgKQotZmlsZWJhc2U9JHRhcmdldF9jcHUKLXdoaWxlIHRlc3QgIngkZmlsZWJhc2UiICE9ICJ4JGxhc3QiIC1hICEgLWYgJHNyY2Rpci9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvJGZpbGViYXNlLmgKLWRvCi0gICAgbGFzdD0kZmlsZWJhc2UKLSAgICBmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvWy0uX11bXi0uX10qJC8vJ2AKLWRvbmUKLQotaWYgdGVzdCAieCRmaWxlYmFzZSIgPSAieCRsYXN0IjsgdGhlbgotICAgIGZpbGViYXNlPSJnZW5lcmljIgotZmkKLWFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEU9Im5ldC1zbm1wL21hY2hpbmUvJGZpbGViYXNlLmgiCi1jaGFuZ2VxdW90ZShbLCBdKQotQUNfTVNHX1JFU1VMVChbJGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEVdKQotCi1BQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSwgIiRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFIikKLQotQUNfUEFUSF9QUk9HKFtDQ1BBVEhdLCRDQykKLSMgd2F0Y2ggb3V0IGZvciAvdXNyL3VjYi9jYyBvbiBzb2xhcmlzLCBpdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuCi1jYXNlICR0YXJnZXRfb3MgaW4KLSAgICBic2RpKikKLQlpZiB0ZXN0ICJ4JENDUEFUSCIgPSAieC91c3IvdWNiL2NjIiAtbyAieCRDQ1BBVEgiID0gIngvdXNyL2Jpbi9jYyI7IHRoZW4KLQkgICAgQUNfTVNHX0VSUk9SKFsKLQotKioqIFRoZSBCU0RJIC91c3IvdWNiL2NjIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuICAKLSoqKiBQbGVhc2UgcnVuIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1nY2MKLV0pCi0JZmkKLSAgICA7OwotICAgIHNvbGFyaXMqKQotCWlmIHRlc3QgIngkQ0NQQVRIIiA9ICJ4L3Vzci91Y2IvY2MiOyB0aGVuCi0JICAgIEFDX01TR19FUlJPUihbCi0KLSoqKiBUaGUgc29sYXJpcyAvdXNyL3VjYi9jYyBjb21waWxlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLiAgCi0qKiogUGxlYXNlIHB1dCBhIGRpZmZlcmVudCBjb21waWxlciBpbiB5b3VyIHBhdGggZmlyc3Qgb3IgcnVuCi0qKiogY29uZmlndXJlIHdpdGggLS13aXRoLWNjPVhYLCB3aGVyZSBYWCBpcyB0aGUgY29tcGlsZXIgeW91IHdhbnQgdG8gdXNlLgotXSkKLQlmaQotICAgIDs7Ci1lc2FjCi0gICAgCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhZGRpdGlvbmFsIGNwcCBmbGFnc10pCi0jIGdjYyBleHRyYSBDUFBGTEFHUwotaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1hICJ4JENQUCIgPSAieCRDQyAtRSI7IHRoZW4KLSAgIyBleHRyYSBjcHAgZmxhZ3MgZm9yIGdudSBjIGNvbXBpbGVyIHRvIGFsbG93IC5pbiBmaWxlIGV4dGVuc2lvbnMuCi0gIEVYVFJBQ1BQRkxBR1M9Ii14IGMiCi1lbHNlCi0gIEVYVFJBQ1BQRkxBR1M9IiIKLWZpCi0KLSMgU29sYXJpcyBleHRyYSBjcHAgZmxhZ3MuCi1pZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiOyB0aGVuCi0gIGNhc2UgJHRhcmdldF9vcyBpbgotICAgIHNvbGFyaXMqKSBFWFRSQUNQUEZMQUdTPSIkRVhUUkFDUFBGTEFHUyAtWHMiIDs7Ci0gIGVzYWMKLWZpCi0KLUFDX1NVQlNUKEVYVFJBQ1BQRkxBR1MpCi1BQ19NU0dfUkVTVUxUKCRFWFRSQUNQUEZMQUdTKQotCi0jICAgQ29tcGlsZXIgZmxhZ3M6Ci0jCi0KLSMgVGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGlzIG5vdCBzdHJpY3QtYWxpYXNpbmcgc2FmZSwgc28gYWRkCi0jIC1mbm8tc3RyaWN0LWFsaWFzaW5nIHRvICRDRkxBR1MgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGl0LgotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyAtZm5vLXN0cmljdC1hbGlhc2luZ10pCi1uZXRzbm1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotQ0ZMQUdTPSItZm5vLXN0cmljdC1hbGlhc2luZyAkQ0ZMQUdTIgotQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwgW0FDX01TR19SRVNVTFQoW3llc10pXSwgWwotICBBQ19NU0dfUkVTVUxUKFtub10pCi0gIENGTEFHUz0iJG5ldHNubXBfc2F2ZV9DRkxBR1MiCi1dKQotCi0jIFByZWZpeGVzIG11c3QgYmVnaW4gd2l0aCAiLyIgb3IgW0EtWl0gZm9sbG93ZWQgYnkgY29sb24uCi0KLWlmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KLSAgcHJlZml4PS91c3IvbG9jYWwKLWZpCi0KLWZjaD1gZWNobyAkcHJlZml4IHwgc2VkICdzL1woLlwpLiovXDEvJ2AKLWlmIHRlc3QgIngkZmNoIiAhPSAieC8iIDsgdGhlbgotICAgc2NoPWBlY2hvICRwcmVmaXggfCBzZWQgJ3MvLlwoLlwpLiovXDEvJ2AKLSAgIGlmIHRlc3QgIngkc2NoIiAhPSAieDoiIDsgdGhlbgotICAgICAgcHJlZml4PWBwd2RgLyRwcmVmaXgKLSAgICAgIGVjaG8gImFkanVzdGluZyBwcmVmaXggdG8gJHByZWZpeCIKLSAgIGZpCi1maQotCi1pZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KLSAgZXhlY19wcmVmaXg9JHByZWZpeAotZmkKLQotZmNoPWBlY2hvICRleGVjX3ByZWZpeCB8IHNlZCAncy9cKC5cKS4qL1wxLydgCi1pZiB0ZXN0ICJ4JGZjaCIgIT0gIngvIiA7IHRoZW4KLSAgIHNjaD1gZWNobyAkZXhlY19wcmVmaXggfCBzZWQgJ3MvLlwoLlwpLiovXDEvJ2AKLSAgIGlmIHRlc3QgIngkc2NoIiAhPSAieDoiIDsgdGhlbgotICAgICAgZXhlY19wcmVmaXg9YHB3ZGAvJGV4ZWNfcHJlZml4Ci0gICAgICBlY2hvICJhZGp1c3RpbmcgZXhlY19wcmVmaXggdG8gJGV4ZWNfcHJlZml4IgotICAgZmkKLWZpCi0KLSMgU2V0IFNOTVBMSUJQQVRIICYgU05NUFNIQVJFUEFUSAotCi1TTk1QTElCUEFUSD0iIgotdG1wc2V0PSIkbGliZGlyL3NubXAiCi13aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUExJQlBBVEgiOyBkbwotICBTTk1QTElCUEFUSD0iJHRtcHNldCIKLSAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCi1kb25lCi1BQ19ERUZJTkVfVU5RVU9URUQoU05NUExJQlBBVEgsIiRTTk1QTElCUEFUSCIpCi1BQ19TVUJTVChTTk1QTElCUEFUSCkKLUFDX0RFRklORV9VTlFVT1RFRChTTk1QRExNT0RQQVRILCIkU05NUExJQlBBVEgvZGxtb2QiKQotCi1TTk1QU0hBUkVQQVRIPSIiCi10bXBzZXQ9IiRkYXRhZGlyL3NubXAiCi13aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUFNIQVJFUEFUSCI7IGRvCi0gIFNOTVBTSEFSRVBBVEg9IiR0bXBzZXQiCi0gIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgotZG9uZQotQUNfREVGSU5FX1VOUVVPVEVEKFNOTVBTSEFSRVBBVEgsIiRTTk1QU0hBUkVQQVRIIikKLUFDX1NVQlNUKFNOTVBTSEFSRVBBVEgpCi0KLWlmIHRlc3QgIngkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiID0gIngiOyB0aGVuCi0gIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPSJcJEhPTUUvLnNubXAvbWliczokU05NUFNIQVJFUEFUSC9taWJzIgotICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gICAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9YGVjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIgfCAkU0VEICdzLzovOy9nJ2AKLSAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9NSUJESVJTLCIkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiKQotZmkKLUFDX1NVQlNUKE5FVFNOTVBfREVGQVVMVF9NSUJESVJTKQotCi1TTk1QQ09ORlBBVEg9IiIKLXRtcHNldD0iJHN5c2NvbmZkaXIvc25tcCIKLXdoaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QQ09ORlBBVEgiOyBkbwotICBTTk1QQ09ORlBBVEg9IiR0bXBzZXQiCi0gIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgotZG9uZQotQUNfREVGSU5FX1VOUVVPVEVEKFNOTVBDT05GUEFUSCwiJFNOTVBDT05GUEFUSCIpCi1BQ19TVUJTVChTTk1QQ09ORlBBVEgpCi0KLUFDX0NIRUNLX1NJWkVPRihzaG9ydCkKLUFDX0NIRUNLX1NJWkVPRihpbnQpCi1BQ19DSEVDS19TSVpFT0YobG9uZykKLUFDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCi1BQ19DSEVDS19TSVpFT0YoaW50bWF4X3QpCi1BQ19DSEVDS19UWVBFUyhbaW50OF90LCAgdWludDhfdCwgIHVfaW50OF90XSkKLUFDX0NIRUNLX1RZUEVTKFtpbnQxNl90LCB1aW50MTZfdCwgdV9pbnQxNl90XSkKLUFDX0NIRUNLX1RZUEVTKFtpbnQzMl90LCB1aW50MzJfdCwgdV9pbnQzMl90XSkKLUFDX0NIRUNLX1RZUEVTKFtpbnQ2NF90LCB1aW50NjRfdCwgdV9pbnQ2NF90XSkKLUFDX0NIRUNLX1RZUEVTKFtpbnRtYXhfdCwgdWludG1heF90XSkKLUFDX0NIRUNLX1RZUEVTKFtvZmY2NF90XSkKLUFDX0NIRUNLX1RZUEVTKFt1aW50cHRyX3QsIGludHB0cl90XSkKLQotIyBzb2xhcmlzIHNwZWNpZmljIHR5cGUKLUFDX0NIRUNLX1RZUEVTKFtDb3VudGVyNjRdLCwsWyNpbmNsdWRlIDxpbmV0L21pYjIuaD5dKQotCi0jIGd1ZXNzIElQdjYgc3RhY2sgdHlwZS4KLWlmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCi0JdjZ0eXBlPXVua25vd24KLQl2NmxpYj1ub25lCi0JdjZ0cnlsaWJjPW5vCi0KLQlBQ19NU0dfQ0hFQ0tJTkcoW1tpcHY2IHN0YWNrIHR5cGVdXSkKLQlmb3IgaSBpbiB2NmQgdG9zaGliYSBrYW1lIGlucmlhIHpldGEgbGludXgtZ2xpYmMgbGludXgtaW5ldDYgZ2VuZXJpYzsgZG8KLQkJY2FzZSAkaSBpbgotCQl2NmQpCi0JCQlBQ19FR1JFUF9DUFAoeWVzLCBbCi0jaW5jbHVkZSA8L3Vzci9sb2NhbC92Ni9pbmNsdWRlL3N5cy90eXBlcy5oPgotI2lmZGVmIF9fVjZEX18KLXllcwotI2VuZGlmXSwKLQkJCQlbdjZ0eXBlPSRpOyB2NmxpYj12NjsKLQkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKLQkJCQlDRkxBR1M9Ii1JL3Vzci9sb2NhbC92Ni9pbmNsdWRlICRDRkxBR1MiXSkKLQkJCTs7Ci0JCXRvc2hpYmEpCi0JCQlBQ19FR1JFUF9DUFAoeWVzLCBbCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaWZkZWYgX1RPU0hJQkFfSU5FVDYKLXllcwotI2VuZGlmXSwKLQkJCQlbdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKLQkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKLQkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCi0JCQk7OwotCQlrYW1lKQotCQkJQUNfRUdSRVBfQ1BQKHllcywgWwotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpZmRlZiBfX0tBTUVfXwoteWVzCi0jZW5kaWZdLAotCQkJCVt2NnR5cGU9JGk7IHY2bGliPWluZXQ2OwotCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwotCQkJCXY2dHJ5bGliYz15ZXM7Ci0JCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQotCQkJOzsKLQkJaW5yaWEpCi0JCQlBQ19FR1JFUF9DUFAoeWVzLCBbCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2lmZGVmIElQVjZfSU5SSUFfVkVSU0lPTgoteWVzCi0jZW5kaWZdLAotCQkJCVt2NnR5cGU9JGk7Ci0JCQkJdjZsaWI9ZHVtbXk7Ci0JCQkJdjZsaWJkaXI9bm9uZTsKLQkJCQl2NnRyeWxpYmM9eWVzOwotCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKLQkJCTs7Ci0JCXpldGEpCi0JCQlBQ19FR1JFUF9DUFAoeWVzLCBbCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaWZkZWYgX1pFVEFfTUlOQU1JX0lORVQ2Ci1BCi15ZXMKLSNlbmRpZl0sCi0JCQkJW3Y2dHlwZT0kaTsgdjZsaWI9aW5ldDY7Ci0JCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7Ci0JCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQotCQkJOzsKLQkJbGludXgtZ2xpYmMpCi0JCQlBQ19FR1JFUF9DUFAoeWVzLCBbCi0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSNpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfID4gMikpCi15ZXMKLSNlbmRpZl0sCi0JCQkJW3Y2dHlwZT0kaTsKLQkJCQl2NmxpYj1kdW1teTsKLQkJCQl2NmxpYmRpcj1ub25lOwotCQkJCXY2dHJ5bGliYz15ZXM7Ci0JCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQotCQkJOzsKLQkJbGludXgtaW5ldDYpCi0JCQlpZiB0ZXN0IC1kIC91c3IvaW5ldDY7IHRoZW4KLQkJCQl2NnR5cGU9JGkKLQkJCQl2NmxpYj1pbmV0NgotCQkJCXY2bGliZGlyPS91c3IvaW5ldDYvbGliCi0JCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKLQkJCWZpCi0JCQk7OwotCQlnZW5lcmljKQotICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbW3Bvc3Rwb25lZF1dKQotCQkJQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLV0sIHNvY2thZGRyX2luNiwgc2luNl9hZGRyLCBubykKLQkgICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtbaXB2NiBzdGFjayB0eXBlXV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9pbjZfaGFzX3NpbjZfYWRkciIgPSAieHllcyI7IHRoZW4KLQkJCQl2NnR5cGU9JGkKLQkJCQl2NmxpYj1kdW1teQotCQkJCXY2bGliZGlyPW5vbmUKLQkJCQl2NnRyeWxpYmM9eWVzCi0JCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0JCQk7OwotCQllc2FjCi0JCWlmIHRlc3QgIiR2NnR5cGUiICE9ICJ1bmtub3duIjsgdGhlbgotCQkJYnJlYWsKLQkJZmkKLQlkb25lCi0KLQlpZiB0ZXN0ICIkdjZsaWIiICE9ICJub25lIjsgdGhlbgotCQlpZiB0ZXN0IC1kICR2NmxpYmRpciAtYSAtZiAkdjZsaWJkaXIvbGliJHY2bGliLmE7IHRoZW4KLQkJCUxJQlM9Ii1MJHY2bGliZGlyIC1sJHY2bGliICRMSUJTIgotCQkJZW5hYmxlX2lwdjY9InllcyIKLQkJCUFDX01TR19SRVNVTFQoWyIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYiR2NmxpYiJdKQotCQllbGlmIHRlc3QgIiR2NnRyeWxpYmMiID0gInllcyI7IHRoZW4KLQkJCWVuYWJsZV9pcHY2PSJ5ZXMiCi0JCQlBQ19NU0dfUkVTVUxUKFsiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWJjIl0pCi0JCWVsc2UKLQkJCUFDX01TR19FUlJPUihubyBJUHY2IGxpYnJhcnkgbGliJHY2bGliLmEgZm91bmQuKQotCQkJZXhpdCAxCi0JCWZpCi0JZWxzZQotCQllbmFibGVfaXB2Nj0ibm8iCi0JCUFDX01TR19SRVNVTFQoWyIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYiXSkKLQlmaQotZmkKLQotIwotIyBNYXliZSBhZGQgbGlicmFyeSBleHRlbnNpb25zIGZvciB0aHJlYWQgbXV0ZXggbG9ja2luZy4KLSMKLQotaWYgdGVzdCAieCR3aXRoX3Jlc19sb2NrcyIgPSAieHllcyI7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfUkVFTlRSQU5UKQotCi0gICAgY2FzZSAkdGFyZ2V0X29zIGluCi0KLSAgICBhaXgqKQotCUNDX1JVTlRJTUVfQVJHPSIkQ0NfUlVOVElNRV9BUkcgLWxwdGhyZWFkcyIKLQk7OwotCi0gICAgKikKLQk7OwotCi0gICAgZXNhYwotZmkKLQotIwotIyBBZGQgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlIGZpbGVzLgotIwotQUNfTVNHX0NIRUNLSU5HKFtmb3IgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlXSkKLW90aGVyX3NyY19saXN0PSIiCi1vdGhlcl9vYmpzX2xpc3Q9IiIKLW90aGVyX2xvYmpzX2xpc3Q9IiIKLW90aGVyX2FnZW50b2Jqcz0iIgotb3RoZXJfbGFnZW50b2Jqcz0iIgotb3RoZXJfdHJhcGRfb2JqZWN0cz0iIgotCi0jIFdpbjMyIHNlcnZpY2UgY29kZQotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLSAgb3RoZXJfc3JjX2xpc3Q9IiRvdGhlcl9zcmNfbGlzdCB3aW5zZXJ2aWNlLmMgd2luc2VydmljZXJjLnJjIgotICBvdGhlcl9vYmpzX2xpc3Q9IiRvdGhlcl9vYmpzX2xpc3Qgd2luc2VydmljZS5vIHdpbnNlcnZpY2VyYy5vIgotICBvdGhlcl9sb2Jqc19saXN0PSIkb3RoZXJfbG9ianNfbGlzdCB3aW5zZXJ2aWNlLmxvIHdpbnNlcnZpY2VyYy5sbyIKLSAgb3RoZXJfYWdlbnRvYmpzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5vIgotICBvdGhlcl9sYWdlbnRvYmpzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5sbyIKLSAgb3RoZXJfdHJhcGRfb2JqZWN0cz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubyIgCi1maQotICAKLSMgV2luMzIgcGlwZXMKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgb3RoZXJfc3JjX2xpc3Q9IiRvdGhlcl9zcmNfbGlzdCB3aW5waXBlLmMiCi0gIG90aGVyX29ianNfbGlzdD0iJG90aGVyX29ianNfbGlzdCB3aW5waXBlLm8iCi0gIG90aGVyX2xvYmpzX2xpc3Q9IiRvdGhlcl9sb2Jqc19saXN0IHdpbnBpcGUubG8iCi1maQotCi1BQ19TVUJTVChvdGhlcl9zcmNfbGlzdCkKLUFDX1NVQlNUKG90aGVyX29ianNfbGlzdCkKLUFDX1NVQlNUKG90aGVyX2xvYmpzX2xpc3QpCi1BQ19TVUJTVChvdGhlcl9hZ2VudG9ianMpCi1BQ19TVUJTVChvdGhlcl9sYWdlbnRvYmpzKQotQUNfU1VCU1Qob3RoZXJfdHJhcGRfb2JqZWN0cykKLQotQUNfTVNHX1JFU1VMVChbJG90aGVyX3NyY19saXN0ICRvdGhlcl9vYmpzX2xpc3QgJG90aGVyX2xvYmpzX2xpc3RdKQotQUNfTVNHX1JFU1VMVChbJG90aGVyX2FnZW50b2JqcyAkb3RoZXJfbGFnZW50b2JqcyAkb3RoZXJfdHJhcGRfb2JqZWN0c10pCi0gIAotIwotIyBEbyB0cmFuc3BvcnQgbW9kdWxlIHByb2Nlc3NpbmcuCi0jCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhbmQgY29uZmlndXJpbmcgdHJhbnNwb3J0IG1vZHVsZXMgdG8gdXNlXSkKLXRyYW5zcG9ydF9zcmNfbGlzdD0iIgotdHJhbnNwb3J0X2hkcl9saXN0PSIiCi10cmFuc3BvcnRfZGVmX2xpc3Q9IiIKLXRyYW5zcG9ydF9yZXN1bHRfbGlzdD0iIgotdHJhbnNwb3J0X2FkZF9saXN0PSIiCi10cmFuc3BvcnRfY2FsbGJhY2tfZGlzYWJsZWQ9IiIKLW5ld193aXRoX3RyYW5zcG9ydF9saXN0PWBlY2hvICR3aXRoX3RyYW5zcG9ydHMgfCBzZWQgJ3MvLC8gL2c7J2AKLW5ld193aXRoX291dF90cmFuc3BvcnRfbGlzdD1gZWNobyAkd2l0aF9vdXRfdHJhbnNwb3J0cyB8IHNlZCAncy8sLyAvZzsnYAotCi0jCi0jIEFkZCB0aGUgZGVmYXVsdCB0cmFuc3BvcnRzIHRvIHRoZSBsaXN0Ci0jCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBDYWxsYmFjayIKLWVsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4gCi0gIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgQ2FsbGJhY2siCi1lbHNlCi0gIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgVW5peCBDYWxsYmFjayIKLWZpCi1pZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgotICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFBJUHY2IFRDUElQdjYgJHRyYW5zcG9ydF9kZWZhdWx0X2xpc3QiCi1maQotZm9yIGkgaW4gJHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q7IGRvCi0gIGlmIGVjaG8gIiAkbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3QgIiB8IGdyZXAgIiAkaSAiID4vZGV2L251bGw7IHRoZW4KLSAgICA6Ci0gIGVsc2UKLSAgICB0cmFuc3BvcnRfYWRkX2xpc3Q9IiRpICR0cmFuc3BvcnRfYWRkX2xpc3QiCi0gIGZpCi1kb25lCi1uZXdfdHJhbnNwb3J0X2xpc3Q9IiR0cmFuc3BvcnRfYWRkX2xpc3QgJG5ld193aXRoX3RyYW5zcG9ydF9saXN0IgotCi1mb3IgaSBpbiAkbmV3X3RyYW5zcG9ydF9saXN0OyBkbwotICBpZiBlY2hvICIgJG5ld193aXRoX291dF90cmFuc3BvcnRfbGlzdCAiIHwgZ3JlcCAiICRpICIgPi9kZXYvbnVsbDsgdGhlbgotICAgIGlmIHRlc3QgIngkaSIgPSAieFVEUCI7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgIEFDX01TR19FUlJPUihJdCBpcyBub3QgcG9zc2libGUgdG8gY29tcGlsZSB3aXRob3V0IFVEUC9JUCBzdXBwb3J0LikKLSAgICBlbGlmIHRlc3QgIngkaSIgPSAieENhbGxiYWNrIjsgdGhlbgotICAgICAgZWNobwotICAgICAgdHJhbnNwb3J0X2NhbGxiYWNrX2Rpc2FibGVkPSJ5ZXMiCi0gICAgZmkKLSAgZWxzZQotICAgIGlmIHRlc3QgIngkaSIgPSAieEFBTDVQVkMiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgIT0gInhsaW51eCI7IHRoZW4KLSAgICAgICAgZWNobwotICAgICAgICBBQ19NU0dfRVJST1IoQUFMNSBQVkMgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSAoTGludXggb25seSkpCi0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4SVBYIjsgdGhlbgotICAgICAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiICE9ICJ4bGludXgiOyB0aGVuCi0gICAgICAgIGVjaG8KLSAgICAgICAgQUNfTVNHX0VSUk9SKElQWCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIChMaW51eCBvbmx5KSkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBpZiB0ZXN0ICJ4JGkiID0gInhVbml4IjsgdGhlbgotICAgICAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gICAgICAgIGVjaG8KLSAgICAgICAgQUNfTVNHX0VSUk9SKFVuaXggZG9tYWluIHByb3RvY29sIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0pCi0gICAgICBlbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0gICAgICAgIGVjaG8KLSAgICAgICAgQUNfTVNHX0VSUk9SKFVuaXggZG9tYWluIHByb3RvY29sIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0pCi0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAhICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBpZiB0ZXN0ICJ4JGkiID0gInhVRFBJUHY2IiAtbyAieCRpIiA9ICJ4VENQSVB2NiI7IHRoZW4KLSAgICAgICAgICAgIGVjaG8KLSAgICAgICAgICAgIEFDX01TR19FUlJPUihJUHY2IHRyYW5zcG9ydHMgbm90IGF2YWlsYWJsZSBpZiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQpCi0gICAgICAgIGZpCi0gICAgZmkKLSAgICB0cmFuc3BvcnRfc3JjPSJzbm1wIiRpIkRvbWFpbi5jIgotICAgIHRyYW5zcG9ydF9oZHI9InNubXAiJGkiRG9tYWluLmgiCi0gICAgcmVsX3RyYW5zcG9ydF9zcmM9InNubXBsaWIvIiR0cmFuc3BvcnRfc3JjCi0gICAgcmVsX3RyYW5zcG9ydF9oZHI9ImluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS8iJHRyYW5zcG9ydF9oZHIKLSAgICBpZiB0ZXN0IC1mICIkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyI7IHRoZW4KLSAgICAgIHRyYW5zcG9ydF9yZXN1bHRfbGlzdD0iJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAkaSIKLSAgICAgIHRyYW5zcG9ydF9zcmNfbGlzdD0iJHRyYW5zcG9ydF9zcmMgJHRyYW5zcG9ydF9zcmNfbGlzdCIKLSAgICAgIGlmIHRlc3QgLWYgIiRzcmNkaXIvJHJlbF90cmFuc3BvcnRfaGRyIjsgdGhlbgotICAgICAgICB0cmFuc3BvcnRfaGRyX2xpc3Q9IiR0cmFuc3BvcnRfaGRyICR0cmFuc3BvcnRfaGRyX2xpc3QiCi0gICAgICBmaQotICAgICAgdHJhbnNwb3J0X2RlZj1gZWNobyAkaSB8IHNlZCAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAotICAgICAgdHJhbnNwb3J0X2RlZl9saXN0PSJORVRTTk1QX1RSQU5TUE9SVF8iJHRyYW5zcG9ydF9kZWYiX0RPTUFJTiAkdHJhbnNwb3J0X2RlZl9saXN0IgotICAgIGVsc2UKLSAgICAgIGVjaG8KLSAgICAgIEFDX01TR19FUlJPUihDYW5ub3QgZmluZCBmaWxlICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIHRvIHN1cHBvcnQgU05NUCB0cmFuc3BvcnQgZG9tYWluICRpLikKLSAgICBmaQotICBmaQotZG9uZQotdHJhbnNwb3J0X29ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgc2VkICdzL1wuYy9cLm8vZydgIAkgCi10cmFuc3BvcnRfbG9ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgc2VkICdzL1wuYy9cLmxvL2cnYAotCi0jIyB3aW4zMiBwbGF0Zm9ybXMgcmVxdWlyZSBpbmV0X250b3AgZXRjLgotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLSAgaWYgZWNobyAiJHRyYW5zcG9ydF9kZWZfbGlzdCIgfCBncmVwICJJUFY2IiA+L2Rldi9udWxsOyB0aGVuCi0gICAgdHJhbnNwb3J0X29ial9saXN0PSIkdHJhbnNwb3J0X29ial9saXN0IGluZXRfbnRvcC5vIGluZXRfcHRvbi5vIgotICAgIHRyYW5zcG9ydF9sb2JqX2xpc3Q9IiR0cmFuc3BvcnRfbG9ial9saXN0IGluZXRfbnRvcC5sbyBpbmV0X3B0b24ubG8iCi0gIGZpCi1maQotCi1BQ19TVUJTVCh0cmFuc3BvcnRfaGRyX2xpc3QpCi1BQ19TVUJTVCh0cmFuc3BvcnRfc3JjX2xpc3QpCi1BQ19TVUJTVCh0cmFuc3BvcnRfb2JqX2xpc3QpCi1BQ19TVUJTVCh0cmFuc3BvcnRfbG9ial9saXN0KQotZm9yIGkgaW4gJHRyYW5zcG9ydF9kZWZfbGlzdDsgZG8KLSAgQUNfREVGSU5FX1VOUVVPVEVEKCRpKQotZG9uZQotQUNfTVNHX1JFU1VMVCgkdHJhbnNwb3J0X3Jlc3VsdF9saXN0LikKLUFDX01TR19DQUNIRV9BREQoTmV0d29yayB0cmFuc3BvcnQgc3VwcG9ydDogJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCkKLQotIwotIyBTZWN1cml0eSBtb2R1bGVzIHRvIHVzZQotIyAKLQotQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2VjdXJpdHkgbW9kdWxlcyB0byB1c2VdKQotc2VjdXJpdHlfZGVmX2xpc3Q9InVzbSIKLXNlY3VyaXR5X3NyY19saXN0PSIiCi1zZWN1cml0eV9vYmpfbGlzdD0iIiAJIAotc2VjdXJpdHlfbG9ial9saXN0PSIiCi1zZWN1cml0eV9pbml0X2ZpbGU9InNubXBsaWIvc25tcHNtX2luaXQuaCIKLXNlY3VyaXR5X2luY2xfZmlsZT0iaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oIgotbmV3X3dpdGhfc2VjdXJpdHk9YGVjaG8gJHdpdGhfc2VjdXJpdHlfbW9kdWxlcyB8IHNlZCAncy8sLyAvZzsnYAotbmV3X3dpdGhfb3V0X3NlY3VyaXR5PWBlY2hvICR3aXRoX291dF9zZWN1cml0eV9tb2R1bGVzIHwgc2VkICdzLywvIC9nOydgCi0KLWlmIHRlc3QgISAtZCBpbmNsdWRlOyB0aGVuCi0gIG1rZGlyIGluY2x1ZGUKLWZpCi1pZiB0ZXN0ICEgLWQgaW5jbHVkZS9uZXQtc25tcDsgdGhlbgotICBta2RpciBpbmNsdWRlL25ldC1zbm1wCi1maQotaWYgdGVzdCAhIC1kIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQ7IHRoZW4KLSAgbWtkaXIgaW5jbHVkZS9uZXQtc25tcC9hZ2VudAotZmkKLWlmIHRlc3QgISAtZCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnk7IHRoZW4KLSAgbWtkaXIgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5Ci1maQotaWYgdGVzdCAhIC1kIGluY2x1ZGUvdWNkLXNubXA7IHRoZW4KLSAgbWtkaXIgaW5jbHVkZS91Y2Qtc25tcAotZmkKLQotaWYgdGVzdCAhIC1kIHNubXBsaWI7IHRoZW4KLSAgbWtkaXIgc25tcGxpYgotZmkKLWVjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9pbml0X2ZpbGUKLWVjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9pbmNsX2ZpbGUKLQotZm9yIGkgaW4gJHNlY3VyaXR5X2RlZl9saXN0OyBkbwotICBpZiBlY2hvICIgJG5ld193aXRoX291dF9zZWN1cml0eSAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGkiID0gInh1c20iOyB0aGVuCi0JZWNobwotICAgICAgICBBQ19NU0dfRVJST1IoVGhlIFVTTSBzZWN1cml0eSBtb2R1bGUgaXMgbWFuZGF0b3J5KQotICAgIGZpCi0gIGVsc2UKLSAgICBuZXdfd2l0aF9zZWN1cml0eT0iJG5ld193aXRoX3NlY3VyaXR5ICRpIgotICBmaQotZG9uZQotCi1mb3IgaSBpbiAkbmV3X3dpdGhfc2VjdXJpdHk7IGRvCi0gIGNmaWxlPSJzbm1wIiRpIi5jIgotICBoZmlsZT0ic25tcCIkaSIuaCIKLQotICAjIG1ha2Ugc3VyZSBzdXBwb3J0IGV4aXN0cyBmb3IgaXQKLSAgaWYgdGVzdCAtZiAkc3JjZGlyIi9zbm1wbGliLyIkY2ZpbGUgLWEgLWYgJHNyY2RpciIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5LyIkaGZpbGU7IHRoZW4KLSAgICA6Ci0gIGVsc2UKLSAgICBlY2hvCi0gICAgQUNfTVNHX0VSUk9SKE5vIHN1Y2ggc2VjdXJpdHkgbW9kdWxlOiAkaSAvICRjZmlsZSAvICRoZmlsZSkKLSAgZmkKLQotICAjIGRlZmluZSBhIGJ1bmNoIG9mIHN0dWZmIHRvIGVuYWJsZSBpdAotICBzZWN1cml0eV9zcmNfbGlzdD0iJHNlY3VyaXR5X3NyY19saXN0ICRjZmlsZSIKLSAgc2VjdXJpdHlfaGRyX2xpc3Q9IiRzZWN1cml0eV9oZHJfbGlzdCAkaGZpbGUiCi0gIHNlY3VyaXR5X29ial9saXN0PSIkc2VjdXJpdHlfb2JqX2xpc3Qgc25tcCIkaSIubyIgCSAKLSAgc2VjdXJpdHlfbG9ial9saXN0PSIkc2VjdXJpdHlfbG9ial9saXN0IHNubXAiJGkiLmxvIgotICBkZWZfbmFtZT0iTkVUU05NUF9TRUNNT0RfImBlY2hvICRpIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYAotICBlY2hvICJpbml0XyIkaSIoKTsiID4+ICRzZWN1cml0eV9pbml0X2ZpbGUKLSAgZWNobyAiI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvJGhmaWxlPiIgPj4gJHNlY3VyaXR5X2luY2xfZmlsZQotICBBQ19ERUZJTkVfVU5RVU9URUQoJGRlZl9uYW1lKQotZG9uZQotCi1BQ19TVUJTVChzZWN1cml0eV9zcmNfbGlzdCkKLUFDX1NVQlNUKHNlY3VyaXR5X2hkcl9saXN0KQotQUNfU1VCU1Qoc2VjdXJpdHlfb2JqX2xpc3QpIAkgCi1BQ19TVUJTVChzZWN1cml0eV9sb2JqX2xpc3QpCi1BQ19NU0dfUkVTVUxUKCRuZXdfd2l0aF9zZWN1cml0eSkKLUFDX01TR19DQUNIRV9BREQoU05NUHYzIFNlY3VyaXR5IE1vZHVsZXM6ICAgICRuZXdfd2l0aF9zZWN1cml0eSkKLQotIwotIyBIYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBLU00gdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2Ugc3VwcG9ydAotIwotCi1hY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ9bm8KLXJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9Ci1hbHJlYWR5X2NoZWNrZWRfa3JiNT1ubwotCi1mb3Igc2VjIGluICRuZXdfd2l0aF9zZWN1cml0eQotZG8KLSAgaWYgdGVzdCAieCRzZWMiID0gInhrc20iIC1hICJ4eWVzIiA9ICJ4JGFscmVhZHlfY2hlY2tlZF9rcmI1IjsgdGhlbgotICAgIGNvbnRpbnVlCi0gIGZpCi0gIGFscmVhZHlfY2hlY2tlZF9rcmI1PXllcwotCi0gIGlmIHRlc3QgeCRzZWMgIT0geGtzbTsgdGhlbgotICAgIHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9IiRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5ICRzZWMiCi0gIGVsc2UKLSAgICBpZiB0ZXN0IG5vID0gJHRyeWtyYjU7IHRoZW4KLSAgICAgIEFDX01TR19OT1RJQ0UoW2NvbmZpZ3VyZWQgbm90IHRvIHVzZSBrcmI1LiBkaXNhYmxpbmcga3NtXSkKLSAgICAgIGNvbnRpbnVlCi0gICAgZmkKLQotICAgIEFDX1BBVEhfUFJPRyhba3JiNV9jb25maWddLGtyYjUtY29uZmlnLFtub10sJGtyYjVwYXRoL2JpbjokUEFUSCkKLQotICAgIGlmIHRlc3Qgbm8gIT0gJGtyYjVfY29uZmlnOyB0aGVuCi0gICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIGAka3JiNV9jb25maWcgLS1jZmxhZ3NgIgotICAgICAgTElCUz0iJExJQlMgYCRrcmI1X2NvbmZpZyAtLWxpYnNgIgotICAgIGVsaWYgdGVzdCAka3JiNXBhdGggIT0gbm87IHRoZW4KLSAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgka3JiNXBhdGgpCi0gICAgZWxzZQotICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKC91c3Iva2VyYmVyb3MpCi0gICAgZmkKLQotICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGtyYjVdKQotICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9oYXZlX2tyYjUsCi0gICAgICBBQ19DSEVDS19MSUIoa3JiNSwga3JiNV9pbml0X2NvbnRleHQsCi0JYWNfY3ZfaGF2ZV9rcmI1PXllcywgYWNfY3ZfaGF2ZV9rcmI1PW5vCi0gICAgICApCi0gICAgKQotCi0gICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9rcmI1ID0gbm87IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkYXNrZWRrcmI1IiA9ICJ4eWVzIjsgdGhlbgotCUFDX01TR19FUlJPUihBc2tlZCB0byB1c2Uga3JiNSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LikKLSAgICAgIGZpCi0gICAgICBBQ19NU0dfUkVTVUxUKG5vLiBkaXNhYmxpbmcga3NtKQotICAgICAgY29udGludWUKLSAgICBmaQotICAgICAgCi0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gICAgcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0iJHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkga3NtIgotCi0gICAgQUNfTVNHX0NIRUNLSU5HKFtbZm9yIGhlaW1kYWxdXSkKLSAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfaGVpbWRhbCwKLSAgICBbQUNfVFJZX0NPTVBJTEUoCi0gICAgICBbI2luY2x1ZGUgPGtyYjUuaD5dLAotICAgICAgW2NvbnN0IGNoYXIgKnYgPSBoZWltZGFsX3ZlcnNpb247XSwKLSAgICAgIGFjX2N2X2hlaW1kYWw9eWVzLAotICAgICAgYWNfY3ZfaGVpbWRhbD1ubwotICAgICldKQotICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2hlaW1kYWwpCi0gICAgaWYgdGVzdCAkYWNfY3ZfaGVpbWRhbCA9IHllczsgdGhlbgotICAgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwpCi0gICAgICBpZiB0ZXN0IG5vID0gJGtyYjVfY29uZmlnOyB0aGVuCi0JTElCUz0iJExJQlMgLWxrcmI1IC1sYXNuMSAtbGNvbV9lcnIgLWxyb2tlbiIKLSAgICAgIGZpCi0gICAgZWxpZiB0ZXN0IG5vID0gJGtyYjVfY29uZmlnOyB0aGVuCi0JTElCUz0iJExJQlMgLWxrcmI1IC1sY29tX2VyciIKLSAgICBmaQotCi0gICAgQUNfTVNHX0NIRUNLSU5HKFt0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBuZWVkIHRvIHVzZV0pCi0gICAgQUNfQ0hFQ0tfRlVOQyhrcmI1X2NfZW5jcnlwdCxbCi0gICAgQUNfQ0FDSEVfVkFMKGFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVCwKLSAgICAgIEFDX0NIRUNLX0xJQihrNWNyeXB0bywga3JiNV9pbml0X2NvbnRleHQsCi0JYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUPXllcywgYWNfY3ZfTUlUX05FV19DUllQVG89bm8KLSAgICAgICkKLSAgICApCi0KLSAgICBpZiB0ZXN0IHllcyA9ICRhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQ7IHRoZW4KLSAgICAgIEFDX01TR19SRVNVTFQobmV3IE1JVCBjcnlwdG8gQVBJKQotICAgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0tFUkJFUk9TX01JVCkKLSAgICAgIGlmIHRlc3Qgbm8gPSAka3JiNV9jb25maWc7IHRoZW4KLQlMSUJTPSIkTElCUyAtbGs1Y3J5cHRvIgotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfUkVTVUxUKG9sZCBNSVQgY3J5cHRvIEFQSSldKQotICAgIGZpCi0gIGZpCi1kb25lCi0KLW5ld193aXRoX3NlY3VyaXR5PSRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5Ci0KLSMKLSMgZ2VuZXJhdGUgZW1wdHkgZmlsZXMKLSMKLSMgQ3JlYXRlIGluY2x1ZGUgZmlsZSBsaXN0IGZvciBzbm1wX3ZhcnMuaCB0byB1c2UuCi1taWJkaXI9ImFnZW50L21pYmdyb3VwIgotaWYgdGVzdCAhIC1kIGFnZW50OyB0aGVuCi0gIG1rZGlyIGFnZW50Ci1maQotaWYgdGVzdCAhIC1kIGFnZW50L21pYmdyb3VwOyB0aGVuCi0gIG1rZGlyIGFnZW50L21pYmdyb3VwCi1maQotaj0iJG1pYmRpci9taWJfbW9kdWxlX2luY2x1ZGVzLmggICRtaWJkaXIvYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmggXAotICAgJG1pYmRpci9taWJfbW9kdWxlX2luaXRzLmggICAgICRtaWJkaXIvYWdlbnRfbW9kdWxlX2luaXRzLmggICAgXAotICAgJG1pYmRpci9taWJfbW9kdWxlX3NodXRkb3duLmggICRtaWJkaXIvYWdlbnRfbW9kdWxlX3NodXRkb3duLmggXAotICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oICAgXAotICAgJG1pYmRpci9taWJfbW9kdWxlX2RvdF9jb25mLmggICRtaWJkaXIvYWdlbnRfbW9kdWxlX2RvdF9jb25mLmgiCi0KLWZvciBpIGluICRqOyBkbwotICBybSAtZiAkaQotICBlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkaQotZG9uZQotCi0jCi0jIERvIGhhaXJ5IGFnZW50IG1vZHVsZSBwcm9jZXNzaW5nLgotIwotQUNfTVNHX0NIRUNLSU5HKFtmb3IgYW5kIGNvbmZpZ3VyaW5nIG1pYiBtb2R1bGVzIHRvIHVzZV0pCi0KLSMgc2V0IHVwIHRoZSBDUFAgY29tbWFuZAotTU9EVUxFQ1BQPSIkQ1BQICRQQVJUSUFMVEFSR0VURkxBR1MgLUkke3NyY2Rpcn0vaW5jbHVkZSAtSSR7c3JjZGlyfS9hZ2VudC9taWJncm91cCIKLWlmIHRlc3QgIngkZW5hYmxlX21mZF9yZXdyaXRlcyIgPSAieHllcyI7IHRoZW4KLSAgTU9EVUxFQ1BQPSIkTU9EVUxFQ1BQIC1ETkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTIgotZmkKLQotbW9kdWxlX2xpc3Q9IiIKLW1pYl9tb2R1bGVfbGlzdD0iIgotYWdlbnRfbW9kdWxlX2xpc3Q9IiIKLW5ld193aXRoX21pYl9tb2R1bGVzPWBlY2hvICR3aXRoX21pYl9tb2R1bGVzIHwgc2VkICdzLywvIC9nOydgCi1uZXdfd2l0aF9vdXRfbWliX21vZHVsZXM9YGVjaG8gJHdpdGhfb3V0X21pYl9tb2R1bGVzIHwgc2VkICdzLywvIC9nOydgCi0KLSMgc2V0IHVwIGluaXRpYWwgbW9kdWxlIGxpc3QKLW5ld19tb2R1bGVfbGlzdD0iJG5ld193aXRoX21pYl9tb2R1bGVzIGRlZmF1bHRfbW9kdWxlcyIKLQotIyBtaW5vciBtb2RpZmljYXRpb25zCi1pZiB0ZXN0ICJ4JGVuYWJsZV9hZ2VudCIgPSAieG5vIjsgdGhlbgotICAgIyBtaW5pbXVtIG1pYiBtb2R1bGUgbGlzdCBmb3Igc25tcHRyYXBkCi0gICBuZXdfbW9kdWxlX2xpc3Q9Im1pYklJL3ZhY21fdmFycyBtaWJJSS92YWNtX2NvbmYgdXRpbGl0aWVzL2V4ZWN1dGUgJG5ld193aXRoX21pYl9tb2R1bGVzIgotICAgZGVmYXVsdF9taWJzPVNOTVB2Mi1NSUI6SUYtTUlCOklQLU1JQjpUQ1AtTUlCOlVEUC1NSUIKLSAgIGRlZmF1bHRfbWlic19pbnN0YWxsPSIgIgotZWxpZiB0ZXN0ICJ4JG1pbmlfYWdlbnQiID0gInh5ZXMiOyB0aGVuCi0gICAjIGRlZmluZSB0aGUgbWluaSBhZ2VudCBmbGFnIHRvIHJlZHVjZSBvdXIgbG9hZCBsaXN0IGZyb20gZGVmYXVsdF9taWJzLmgKLSAgIE1PRFVMRUNQUD0iJE1PRFVMRUNQUCAtRE5FVFNOTVBfTUlOSV9BR0VOVCIKLWZpCi0KLXRlc3RfbW9kdWxlcz0iJG5ld19tb2R1bGVfbGlzdCIKLW5ld19tb2R1bGVfbGlzdD0iIgotCi0jIHJlbW92ZSBtb2R1bGVzIHRoYXQgd2VyZSBleHBsaWNpdGx5IGV4Y2x1ZGVkCi1mb3IgaSBpbiAkdGVzdF9tb2R1bGVzCi0gZG8KLSAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyBpcyBib3RoIGluY2x1ZGVkIGFuZCBleGNsdWRlZC4iCi0gICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgY29uZmxpY3RdKQotICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KLSAgICAgIEFDX01TR19XQVJOKFt1c2VyIHdpdGggICAgOiAkd2l0aF9taWJfbW9kdWxlc10pCi0gICAgICBBQ19NU0dfV0FSTihbZmluYWwgd2l0aCAgIDogJG5ld19tb2R1bGVfbGlzdF0pCi0gICAgICBBQ19NU0dfV0FSTihbdXNlciB3aXRob3V0IDogJHdpdGhfb3V0X21pYl9tb2R1bGVzXSkKLSAgICAgIEFDX01TR19XQVJOKFtmaW5hbCB3aXRob3V0OiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzXSkKLSAgICAgIEFDX01TR19FUlJPUihbJG1pYl9jZmdfbXNnXSkKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfV0FSTihbJG1pYl9jZmdfbXNnIEl0IHdpbGwgYmUgZXhjbHVkZWRdKQotICAgICAgQUNfTVNHX0NBQ0hFX0FERChbKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnIEl0IGhhcyBiZWVuIGV4Y2x1ZGVkLl0pCi0gICAgZmkKLSAgZWxzZQotICAgIG5ld19tb2R1bGVfbGlzdD0iJG5ld19tb2R1bGVfbGlzdCAkaSIKLSAgZmkKLWRvbmUKLQotQUNfTVNHX1JFU1VMVChbJG5ld19tb2R1bGVfbGlzdC5dKQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGxvb3Agb3ZlciBtb2R1bGUgbGlzdAotIwotYWxsX3dhcm5pbmdzPSIiCi1pZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19kZWJ1ZyIgPSAieHllcyI7IHRoZW4KLSAgIG1vZHVsZV9kZWJ1Zz0xCi1lbHNlCi0gICBtb2R1bGVfZGVidWc9MAotZmkKLWZpcnN0X3Bhc3M9MQotb3V0cHV0X3RvPW5vcm1hbAotCi1pZiB0ZXN0ICEgLWQgbWsgOyB0aGVuCi0gIG1rZGlyIG1rCi1maQotCi0KLW1vZHVsZV9ydWxlcz1tay9tb2R1bGVfcnVsZXMubWsKLWVjaG8gIiMgY29udGVudHMgYmVsb3cgYnVpbHQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmU7IGRvIG5vdCBlZGl0IGJ5IGhhbmQiID4gJG1vZHVsZV9ydWxlcwotCi0jCi0jIG1ha2UgZmlsZSBzdWItcGllY2VzCi0jCi1mb3IgaSBpbiBtb2R1bGVfbGlzdF9kZXBzIG1pYl9tb2R1bGVfbGlzdF9kZXBzIGFnZW50X21vZHVsZV9saXN0X2RlcHMgOyBkbwotICBldmFsICIkaT1tay8ke2l9Lm1rIgotICBlY2hvICIjIGNvbnRlbnRzIGJlbG93IGJ1aWx0IGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlOyBkbyBub3QgZWRpdCBieSBoYW5kIiA+IG1rLyR7aX0ubWsKLWRvbmUKLQotIwotIyB2YXJpYWJsZSBzZXR0aW5ncyBzdWItcGllY2VzCi0jCi1mb3IgaSBpbiBtb2R1bGVfbGlzdF9jb2RlIG1pYl9tb2R1bGVfbGlzdF9jb2RlIGFnZW50X21vZHVsZV9saXN0X2NvZGUgbW9kdWxlX2xpc3QgbWliX21vZHVsZV9saXN0IGFnZW50X21vZHVsZV9saXN0IDsgZG8KLSAgZXZhbCAiJGk9bWsvJHtpfS5tayIKLSAgZWNobyAiIyBjb250ZW50cyBiZWxvdyBidWlsdCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZTsgZG8gbm90IGVkaXQgYnkgaGFuZCIgPiBtay8ke2l9Lm1rCi0gIGVjaG8gIiRpPSBcXCIgPj4gbWsvJHtpfS5tawotZG9uZQotCi1lY2hvICRFQ0hPX04gImVjaG8gIiAkRUNIT19DID4gbWsvTU9EVUxFX0xJU1QubWsKLU1PRFVMRV9MSVNUPW1rL01PRFVMRV9MSVNULm1rCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyB1bnRpbCB3ZSBoYXZlIGFuIGVtcHR5IG1vZHVsZSBsaXN0Li4uCi0jICAgKG1vZHVsZXMgbWF5IGFkZCBuZXcgbW9kdWxlcywgYW5kIHVudGlsIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGRvbmUuLi4pCi0jCi13aGlsZSB0ZXN0ICJ4JG5ld19tb2R1bGVfbGlzdCIgIT0gIngiOyBkbwotICBBQ19NU0dfTU9EVUxFX0RCRygtZSwiXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIikKLSAgQUNfTVNHX01PRFVMRV9EQkcoIm5tbDogJG5ld19tb2R1bGVfbGlzdCIpCi0KLSAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAjIGxvb3Agb3ZlciBhbGwgdGhlIG1vZHVsZXMgaW4gdGhlIGN1cnJlbnQgbGlzdAotICAjCi0gIGZvciBqIGluICRuZXdfbW9kdWxlX2xpc3QKLSAgICBkbwotCi0gICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICMgZmlndXJlIG91dCB3aGljaCBzdWItYmxvY2tzIHRvIGJ1aWxkIGluIHBhcnRzCi0gICAgaWYgZWNobyAiJGoiIHwgZ3JlcCAiPSIgOyB0aGVuCi0gICAgICAgIyBidWlsZCBhIHNoYXJlZCBvYmplY3QgZmlsZQotICAgICAgICMgZm9ybWF0OiBzb2ZpbGVuYW1lPW1vZHVsZTE6bW9kdWxlMgotICAgICAgICMgWFhYOiBjdXJyZW50bHkgZG9lc24ndCBkbyB0aGlzCi0gICAgICAgZGxfbmFtZT1gZWNobyAkaiB8IHNlZCAncy89LiovLydgCi0gICAgICAgZGxfbmFtZXM9IiRkbF9uYW1lcyAkZGxfbmFtZSIKLSAgICAgICBkbF9vYmplY3RzPWBlY2hvICRqIHwgc2VkICdzLy4qPS8vJ2AKLSAgICAgICBtb2R1bGVfc3VibGlzdD1gZWNobyAkZGxfb2JqZWN0cyB8IHNlZCAncy86LyAvZydgCi0gICAgICAgc2F2ZWRfc3VibGlzdD0iIgotICAgICAgIHNhdmVkX3N1Ymxpc3RfY29kZT0iIgotICAgICAgIG91dHB1dF90bz1zZXBhcmF0ZQotCi0gICAgICAgIyBjcmVhdGUgb3V0cHV0IGZpbGVzCi0gICAgICAgIyB0aGVzZSBhY3R1YWxseSBnZXQgbnVrZWQgbGF0ZXIKLSAgICAgICBvdXRwdXRfaW5pdHM9ImFnZW50L21pYmdyb3VwLyR7ZGxfbmFtZX0tZGxsLmMiCi0gICAgICAgb3V0cHV0X2hkcnM9ImFnZW50L21pYmdyb3VwLyR7ZGxfbmFtZX0taGRycy5oIgotICAgIGVsc2UKLSAgICAgICAjIG5vdCBhIHNwZWNpYWwgdG9rZW4gaW52b2NhdGlvbgotICAgICAgIG1vZHVsZV9zdWJsaXN0PSRqCi0gICAgICAgb3V0cHV0X3RvPW5vcm1hbAotICAgICAgIG91dHB1dF90PQotICAgIGZpCi0KLSAgICB3aGlsZSB0ZXN0ICJ4JG1vZHVsZV9zdWJsaXN0IiAhPSAieCIgOyBkbwotCi0gICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICMgbG9vcCBvdmVyIGFsbCB0aGUgbW9kdWxlcyBpbiB0aGUgc3ViIGxpc3QKLSAgICBmb3IgaSBpbiAkbW9kdWxlX3N1Ymxpc3QKLSAgICBkbwotCi0gICAgQUNfTVNHX01PRFVMRV9EQkcoLWUgIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpCi0gICAgQUNfTVNHX01PRFVMRV9EQkcoInRlc3RpbmcgJGkiKQotICAgIG5lZWRfaGVhZGVyPTAKLQotICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAjIGJ1aWxkIGEgcHNldWRvIGluY2x1ZGUgaGVhZGVyIHRoYXQgaW5jbHVkZXMgY3VycmVudCBjb25maWcgYW5kCi0gICAgIyBzeXN0ZW0gc3ltYm9sczoKLSAgICBBQ19MQU5HX0NPTkZURVNUKEFDX0xBTkdfU09VUkNFKFtbCi0jaW5jbHVkZSBORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUKLSNpbmNsdWRlICIkc3JjZGlyLyRtaWJkaXIvJGkuaCJdXSkpCi0gICAgbXYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCi0KLSAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBtYWNybzogY29uZmlnX2JlbG9uZ3NfaW4oQVJHKQotICAgICMgICBBUkc6IGVpdGhlcgotICAgICMgICAgIC0gbWliX21vZHVsZSAgID0+IGxpYm5ldHNubXBtaWJzICAgKGRlZmF1bHQpCi0gICAgIyAgICAgLSBhZ2VudF9tb2R1bGUgPT4gbGlibmV0c25tcGFnZW50Ci0gICAgIwotICAgIG1vZHVsZV90eXBlPW1pYl9tb2R1bGUKLSAgICBpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5oOyB0aGVuCi0gICAgICBjaGFuZ2VxdW90ZSgsICkKLSAgICAgIG1vZHVsZV90eXBlPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19iZWxvbmdzX2luIHwgc2VkICdzQC4qY29uZmlnX2JlbG9uZ3NfaW4oXChbXildKlwpKS4qQFwxQCdgCi0gICAgICBjaGFuZ2VxdW90ZShbLCBdKQotICAgIGZpCi0gICAgaWYgdGVzdCAieCRtb2R1bGVfdHlwZSIgPSAieCIgOyB0aGVuCi0gICAgICBtb2R1bGVfdHlwZT1taWJfbW9kdWxlCi0gICAgZmkKLSAgICBpZiB0ZXN0ICJ4JG91dHB1dF90byIgPSAieG5vcm1hbCIgOyB0aGVuCi0gICAgIAlvdXRwdXRfaW5pdHM9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5pdHMuaCIKLSAgICAgCW91dHB1dF9oZHJzPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luY2x1ZGVzLmgiCi0gICAgZmkKLQotICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICMgY2hlY2sgZm9yIGR1cGxpY2F0ZXMgd2l0aGluIHRoZSBkbGwgc3lzdGVtLiAKLSAgICAjICAgLSBpZiBmb3VuZCBpbiBhIGRsbCwgdGhlbiByZW1vdmUgZnJvbSB0aGUgZGxsIGFuZCBhZGQgdG8gbWFpbgotICAgIGRibGZpeD0iIgotICAgIGZvciBkbHRlc3QgaW4gJGRsX25hbWVzIDsgZG8KLSAgICAgIGV2YWwgbW9kX2ZpbGVzPSJcIlwkZGxfJHtkbHRlc3R9X2ZpbGVzXCIiCi0gICAgICBpZiBlY2hvICIgJG1vZF9maWxlcyAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBzb21lIGRsbCBtb2R1bGUgaGFzIGFscmVhZHkgc2VlbiB0aGlzLCB1bmxvYWQgaXQgZnJvbSB0aGF0IGxpc3QKLSAgICAgICAgIyBhbmQgaW5jbHVkZSBpdCBpbiB0aGUgY29yZSAoYWdhaW4pCi0gICAgICAgIEFDX01TR19NT0RVTEVfREJHKCJyZW1vdmluZyAkaSBmcm9tICRkbHRlc3QiKQotICAgICAgICBtb2RfZmlsZXM9YGVjaG8gIiAkbW9kX2ZpbGVzICIgfCBzZWQgInNAICRpIEBAImAKLSAgICAgICAgZGJsZml4PSJfX1hYWF9fIgotICAgICAgICBldmFsICJkbF8ke2RsdGVzdH1fZmlsZXM9XCIkbW9kX2ZpbGVzXCIiCi0KLSAgICAgICAgbW9kdWxlX2xpc3Q9IiRtb2R1bGVfbGlzdCAkaSIKLQllY2hvICJyZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJG1vZHVsZV9saXN0X2RlcHMKLQlpZiB0ZXN0ICRtb2R1bGVfdHlwZSA9ICJhZ2VudF9tb2R1bGUiIDsgdGhlbgotIAkgICAgZWNobyAic25tcF92YXJzLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkYWdlbnRfbW9kdWxlX2xpc3RfZGVwcwotICAgICAgICBlbHNlCi0gCSAgICBlY2hvICJtaWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJG1pYl9tb2R1bGVfbGlzdF9kZXBzCi0gICAgICAgIGZpCi0gICAgICAgIGV2YWwgJHttb2R1bGVfdHlwZX1fbGlzdD0iXCJcJCR7bW9kdWxlX3R5cGV9X2xpc3QgJGlcIiIKLQllY2hvICIJJGkgXFwiID4+ICRtb2R1bGVfbGlzdF9jb2RlCi0JZWNobyAkRUNIT19OICIgJGkiICRFQ0hPX0MgPj4gJE1PRFVMRV9MSVNUCi0gICAgICAgIGV2YWwgdG1wZmlsZXZhcj1cJGBlY2hvICR7bW9kdWxlX3R5cGV9X2xpc3RfY29kZWAKLSAgICAgICAgZWNobyAiCSRpIFxcIiA+PiAkdG1wZmlsZXZhcgotCi0JIyBYWFg6IGFkZCB0aGlzIHRvIHRoZSBtYWluIGluaXQgbGlzdDsgdGhpcyBpcyBwb3NzaWJsZSBub3QKLQkjIHF1aXRlIGluIHRoZSByaWdodCBzcG90IGFueSBsb25nZXIgYnV0IHdlJ3JlIHN0dWNrIHdpdGggaXQuCi0JIyBBZGRpbmcgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgb3JkZXJlZCBzcG90IHdvdWxkIGJlIGEKLQkjIG5pZ2h0bWFyZS4gIE9rLCB3ZSdyZSBhbHJlYWR5IGluIG5pZ2h0bWFyZSBjb2RlIHNvIHRoYXQKLQkjIHdvbHVkIGhhdmUgdG8gYmUgYSBuaWdodC10ZXJyb3IuCi0gICAgICAgIG1ubT1gZWNobyAkaSB8IHNlZCAncy8uKlwvLy87cy9cLmMkLy87J2AKLQlvdXRwdXRfaW5pdHNfdG1wPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luaXRzLmgiCi0JZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHNfdG1wCi0gICAgICAgICMgWFhYOiBldmVuIHdvcnNlLCB3ZSBsb29zZSB3aGV0aGVyIHRoZSBoZWFkZXIgaXMgbmVlZGVkIG9yIG5vdC4KLSAgICAgCW91dHB1dF9oZHJzX3RtcD0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbmNsdWRlcy5oIgotICAgICAgICBlY2hvICcjaW5jbHVkZSAiJyJtaWJncm91cC8kaS5oIiciJyA+PiAkb3V0cHV0X2hkcnNfdG1wCi0gICAgICBmaQotICAgIGRvbmUKLQotICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAjIG1ha2Ugc3VyZSBtb2R1bGUgd2Fzbid0IGV4cGxpY2l0bHkgZXhjbHVkZWQsIG9yIGFscmVhZHkgYWRkZWQKLSAgICAjCi0gICAgaWYgdGVzdCAieCRkYmxmaXgiICE9ICJ4IiA7IHRoZW4KLSAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaSB3YXMgZHVwbGljYXRlZCAtLSBwdXR0aW5nIGludG8gbWFpbiIpCi0gICAgZWxpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaSB3YXMgZXhjbHVkZWQiKQotICAgIGVsaWYgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaSBhbHJlYWR5IHRlc3RlZCIpCi0gICAgZWxzZQotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAjIHByb2Nlc3MgbW9kdWxlcyBoZWFkZXIsIGNoZWNraW5nIGZvciBjb25maWdfIHBzZXVkby1tYWNyb3MKLSAgICAgICMKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIyBkb2VzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIG1vZHVsZSBleGlzdD8KLSAgICAgICMgICBtYWNyb3MgYXJlIG9ubHkgcHJvY2Vzc2VkIGlmIGl0IGRvZXMKLSAgICAgIGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmg7IHRoZW4KLSAgICAgICAgbmV3X2xpc3Q9IiIKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAJIyBtYWNybzogY29uZmlnX2V4Y2x1ZGUobW9kdWxlcykKLSAgICAgIAkjICAtIGxpc3RzIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMKLSAgICAgIAkjICAgIC0gRUc6IG5ldyBNSUIgaW1wbGVtZW50YXRpb25zIGV4Y2x1ZGUgb2xkIGFuZCB2aWNlLXZlcnNhCi0gICAgICAJIwotICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgY29uZmxpY3RzCi0gICAgICAgICMKLQluZXdfbGlzdF9leGNsPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19leGNsdWRlIHwgc2VkICdzLy4qY29uZmlnX2V4Y2x1ZGUoXCguKlwpKS4qL1wxLydgCi0JaWYgdGVzdCAieCRuZXdfbGlzdF9leGNsIiAhPSAieCI7IHRoZW4KLSAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGkgZXhjbHVkZXMgJG5ld19saXN0X2V4Y2wiKQotCSAgZm9yIGogaW4gJG5ld19saXN0X2V4Y2wKLQkgICAgZG8KLQkgICAgaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X21pYl9tb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICIgfCBncmVwICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgICAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIGV4Y2x1ZGVzIG1vZHVsZSAnJGonIGJ1dCBhbm90aGVyIG1vZHVsZSByZXF1aXJlcyBpdCIKLSAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQotICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCi0JICAgICAgICBBQ19NU0dfRVJST1IoWyRtaWJfY2ZnX21zZ10pCi0gICAgICAgICAgICAgIGVsc2UKLQkgICAgICAgIEFDX01TR19XQVJOKFskbWliX2NmZ19tc2ddKQotICAgICAgICAgICAgICAgIEFDX01TR19DQUNIRV9BREQoWyoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZ10pCi0gICAgICAgICAgICAgIGZpCi0JICAgIGVsc2UKLQkgICAgICBuZXdfd2l0aF9vdXRfbWliX21vZHVsZXM9IiRqICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMiCi0gICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaiBhZGRlZCB0byBleGNsdWRlZCBsaXN0IikKLQkgICAgZmkKLQkgIGRvbmUKLQlmaQotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIAkjIG1hY3JvOiBjb25maWdfYXJjaF9yZXF1aXJlKEFSQ0gsbW9kdWxlcykKLSAgICAgIAkjICAtIGxpc3RzIG1vZHVsZXMgcmVxdWlyZWQgZm9yIGEgZ2l2ZW4gQVJDSAotICAgICAgICAjCi0gICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcmVxdWlyZW1lbnRzCi0gICAgICAgICMKLSAgICAgICAgY2hhbmdlcXVvdGUoLCApCi0gICAgICAgIG5ld19saXN0X2FyY2g9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2FyY2hfcmVxdWlyZSB8IHNlZCAncy8uKmNvbmZpZ19hcmNoX3JlcXVpcmUoICpcKFteIF0qXCkgKiwgKlwoW14gXSpcKSAqKS4qL1wxLXhhcmNoeC1cMi8nYAotICAgICAgICBjaGFuZ2VxdW90ZShbLCBdKQotCWlmIHRlc3QgIngkbmV3X2xpc3RfYXJjaCIgIT0gIngiOyB0aGVuCi0gICAgICAgICAgZm9yIGogaW4gJG5ld19saXN0X2FyY2gKLQkgICAgZG8KLQkgICAgYXJjaHRlc3Q9YGVjaG8gJGogfCBzZWQgJ3MvLXhhcmNoeC0uKi8vJ2AKLQkgICAgIyB0YXJnZXRfb3MgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIGEgI2RlZmluZSBvZiAxLi4uCi0JICAgIGlmIHRlc3QgIngkYXJjaHRlc3QiID0gIngxIiAtbyAieCR0YXJnZXRfb3MiID0gIngkYXJjaHRlc3QiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieCRhcmNodGVzdCI7IHRoZW4KLQkgICAgICBuZXdfbGlzdD0iJG5ld19saXN0IGBlY2hvICRqIHwgc2VkICdzLy4qLXhhcmNoeC0vLydgIgotICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICRpIHJlcXVpcmVkIGFkZGluZyBhcmNoIGZpbGVzOiBgZWNobyAkaiB8IHNlZCAncy8uKi14YXJjaHgtLy8nYCIpCi0JICAgIGZpCi0JICBkb25lCi0JZmkKLSAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAkaSByZXF1aXJlZCBhcmNoIGZpbGVzOiAkbmV3X2xpc3QiKQotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIAkjIG1hY3JvOiBjb25maWdfcmVxdWlyZShtb2R1bGVzKQotICAgICAgCSMgIC0gbGlzdHMgbW9kdWxlcyByZXF1aXJlZCBmb3IgdGhpcyBtb2R1bGUKLSAgICAgICAgIwotICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgb3RoZXIgcmVxdWlyZWQgbW9kdWxlcwotICAgICAgICAjCi0JbmV3X2xpc3Q9IiRuZXdfbGlzdCBgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfcmVxdWlyZSB8IHNlZCAncy8uKmNvbmZpZ19yZXF1aXJlKFwoLipcKSkuKi9cMS8nYCIKLSAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAkaSB3aWxsIHRlc3Q6ICRuZXdfbGlzdCIpCi0JaWYgdGVzdCAieCRuZXdfbGlzdCIgIT0gIngiOyB0aGVuCi0JICBmb3IgaiBpbiAkbmV3X2xpc3QKLQkgICAgZG8KLSAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKC1uICIgJGkgd2FudHMgdG8gYWRkICRqOiAiKQotCSAgICBpZiB0ZXN0ICEgLWYgJHNyY2Rpci8kbWliZGlyLyRqLmggLWEgISAtZiAkc3JjZGlyLyRtaWJkaXIvJGouYzsgdGhlbgotICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCi0JICAgICAgQUNfTVNHX0VSUk9SKFttaWIgbW9kdWxlICIkaSIgcmVxdWlyZXMgbW9kdWxlICIkaiIgYnV0ICRqLmggb3IgJGouYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyXSkKLQkgICAgZWxpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgZ3JlcCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgICBpZiB0ZXN0ICJ4JGkiICE9ICJ4ZGVmYXVsdF9tb2R1bGVzIiA7IHRoZW4KLSAgICAgICAgICAgICAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIHJlcXVpcmVzIG1vZHVsZSAnJGonIGJ1dCBzb21lb25lIHRvbGQgbWUgdG8gY29tcGlsZSB3aXRob3V0IGl0IgotICAgICAgICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoWyRtaWJfY2ZnX21zZ10pCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oWyRtaWJfY2ZnX21zZ10pCi0gICAgICAgICAgICAgICAgICBBQ19NU0dfQ0FDSEVfQUREKFsqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2ddKQotICAgICAgICAgICAgICAgIGZpCi0jCSAgICBlbGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAkbmV3X21vZHVsZV9saXN0ICIgfCBncmVwICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgotIyAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGogaW5jbHVkZWQgcHJldmlvdXNseSIpCi0gICAgICAgICAgICAgIGZpCi0JICAgIGVsc2UKLQkgICAgICBuZXdfbGlzdF90d289IiRuZXdfbGlzdF90d28gJGoiCi0gICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRqIGluY2x1ZGVkIikKLQkgICAgZmkKLQkgIGRvbmUKLQlmaQotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIAkjIG1hY3JvOiBjb25maWdfYWRkX21pYihTT01FLU1JQikKLSAgICAgIAkjICAtIGxpc3RzIE1JQnMgdG8gYmUgYWRkZWQgdG8gdGhlIGRlZmF1bHQgdG8tbG9hZCBsaXN0LgotICAgICAgICAjCi0gICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBtaWJzIHRvIGFkZAotICAgICAgICAjCi0JbmV3X21pYnM9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2FkZF9taWIgfCBzZWQgJ3MvLipjb25maWdfYWRkX21pYihcKC4qXCkpLiovXDEvJ2AKLQlpZiB0ZXN0ICJ4JG5ld19taWJzIiAhPSAieCI7IHRoZW4KLQkgICAgZm9yIGogaW4gJG5ld19taWJzCi0JCWRvCi0JCWlmIHRlc3QgInhgZWNobyA6JGRlZmF1bHRfbWliczogfCBncmVwIDokajpgIiA9ICJ4IjsgdGhlbgotCQkgICAgZGVmYXVsdF9taWJzPSIkZGVmYXVsdF9taWJzOiRqIgotCQlmaQotCQlpZiB0ZXN0IC1mICRzcmNkaXIvbWlicy8kai50eHQ7IHRoZW4KLQkJICAgIGlmIGVjaG8gJGRlZmF1bHRfbWlic19pbnN0YWxsIHwgZ3JlcCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KLQkJCSAgICA6Ci0JCSAgICBlbHNlCi0JCQkgICAgZGVmYXVsdF9taWJzX2luc3RhbGw9IiRkZWZhdWx0X21pYnNfaW5zdGFsbCAkai50eHQiCi0JCSAgICBmaQotCQlmaQotCSAgICBkb25lCi0JZmkgIyBuZXcgbWlicwotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICMgYWRkIHRoZSBjdXJyZW50IG1vZHVsZSB0byB0aGUgbGlzdCBvZiBzdHVmZiB0byBjb21waWxlLCBldGMuCi0gICAgICAgICMKLSAgICAgICAgIyBhZGQgJGkgdG8gbW9kdWxlIGxpc3QKLSAgICAgICAgIwotICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaSBhZGRlZCAoYmFzZWQgb24gJGkuaCkiKQotICAgICAgICBtb2R1bGVfbGlzdD0iJG1vZHVsZV9saXN0ICRpIgotICAgICAgICBldmFsICR7bW9kdWxlX3R5cGV9X2xpc3Q9IlwiXCQke21vZHVsZV90eXBlfV9saXN0ICRpXCIiCi0KLQllY2hvICJyZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJG1vZHVsZV9saXN0X2RlcHMKLQlpZiB0ZXN0ICRtb2R1bGVfdHlwZSA9ICJhZ2VudF9tb2R1bGUiIDsgdGhlbgotIAkgICAgZWNobyAic25tcF92YXJzLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkYWdlbnRfbW9kdWxlX2xpc3RfZGVwcwotICAgICAgICBlbHNlCi0gCSAgICBlY2hvICJtaWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJG1pYl9tb2R1bGVfbGlzdF9kZXBzCi0gICAgICAgIGZpCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgIyBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgY29uZmlnX2xvYWRfbWliCi0gICAgICAgICMKLSAgICAgICAgaWYgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfbG9hZF9taWIgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKLSAgICAgIAkgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlICIkaSIgdXNlcyB0aGUgImNvbmZpZ19sb2FkX21pYiIgZGlyZWN0aXZlLCB3aGljaCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgSXQgcHJvYmFibHkgd29uJ3Qgd29yay5dKQotICAgICAgICBmaSAjIGdyZXAgY29uZmlnX2xvYWRfbWliCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgIyBjaGVjayBmb3IgY29uZmlnX3BhcnNlX2RvdF9jb25mCi0gICAgICAgICMgIChnZW5lcmFsbHkgbm90IHVzZWQgYW55IGxvbmdlcjsgb2xkIGF1dG8tbG9hZCBhIC5jb25mIHRva2VuKQotICAgICAgICAjCi0gICAgICAgIGNoYW5nZXF1b3RlKCwgKQotICAgICAgICAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19wYXJzZV9kb3RfY29uZiB8IHNlZCAnc0AuKmNvbmZpZ19wYXJzZV9kb3RfY29uZihcKFteKV0qXCksICpcKFteKSxdKlwpLCAqXChbXiksXSpcKSwgKlwoW14pLF0qXCkpLipAcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXBkIixcMSwgXDIsIFwzLCBcNCk7QCcgPj4gJG1pYmRpci9taWJfbW9kdWxlX2RvdF9jb25mLmgKLQljaGFuZ2VxdW90ZShbLCBdKQotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIAkjIG1hY3JvOiBjb25maWdfZXJyb3IoZXJyb3IgdGV4dCkKLSAgICAgIAkjICAtIHVzZWQgdG8gc2lnbmFsIGEgY29uZmlndXJhdGlvbiBlcnJvciBmcm9tIGEgbW9kdWxlCi0gICAgICAgICMKLSAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGVycm9ycywgb3Igd2FybmluZ3MKLSAgICAgICAgIwotCWVycm9yPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19lcnJvciB8IHNlZCAncy8uKmNvbmZpZ19lcnJvcihcKC4qXCkpLiovXDEvJ2AKLQlpZiB0ZXN0ICJ4JGVycm9yIiAhPSAieCI7IHRoZW4KLSAgICAgICAgICBlY2hvCi0gICAgICAgICAgZWNobwotICAgICAgICAgIEFDX01TR19FUlJPUihbJGk6ICoqKiAkZXJyb3IgKioqXSkKLSAgICAgICAgZmkKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAJIyBtYWNybzogY29uZmlnX3dhcm5pbmcod2FybmluZyB0ZXh0KQotICAgICAgCSMgIC0gdXNlZCB0byBzaWduYWwgYSBjb25maWd1cmF0aW9uICJ3YXJuaW5nIiB0byBiZSBwcmludGVkIHRvIHRoZSB1c2VyCi0gICAgICAgICMKLQl3YXJuaW5nPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ193YXJuaW5nIHwgc2VkICdzLy4qY29uZmlnX3dhcm5pbmcoXCguKlwpKS4qL1wxLydgCi0JaWYgdGVzdCAieCR3YXJuaW5nIiAhPSAieCI7IHRoZW4KLSAgICAgICAgICBhbGxfd2FybmluZ3M9IiRhbGxfd2FybmluZ3MgJHdhcm5pbmcKLSIKLSAgICAgICAgZmkKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIyBDaGVjayBmb3IgYSAuYyBmaWxlIGlmIHRoZSAuaCBkaWRuJ3QgZXhpc3QKLSAgICAgICMKLSAgICAgIGVsaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuYzsgdGhlbgotICAgICAgICBpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gJG5ld19tb2R1bGVfbGlzdCAiIHwgZ3JlcCAiICRpICAgICAgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaSBhbHJlYWR5IGluY2x1ZGVkIikKLSAgICAgICAgZWxzZQotICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaSBhZGRlZCAoYmFzZWQgb24gJGkuYykiKQotCSAgIG1vZHVsZV9saXN0PSIkbW9kdWxlX2xpc3QgJGkiCi0JICAgbWliX21vZHVsZV9saXN0PSIkbWliX21vZHVsZV9saXN0ICRpIgotICAgICAgICBmaQotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAjIE5vIC5oIG9yIC5jID0gZXJyb3IhICAodHlwbz8pCi0gICAgICAjCi0gICAgICBlbHNlICMgbm8gJGkuaCBvciAkaS5jCi0gICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKLQlBQ19NU0dfRVJST1IoW21vZHVsZSBmaWxlcyAkaS5oIG9yICRpLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpcl0pCi0gICAgICBmaSAjIG5vICRpLmgKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICMgY2hlY2sgZm9yIGluaXQvc2h1dGRvd24gcm91dGluZXMgdG9vCi0gICAgICAjCi0gICAgICBoYXNfY19jb2RlPW5vCi0gICAgICBpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5jOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIngkb3V0cHV0X3RvIiA9ICJ4bm9ybWFsIiA7IHRoZW4KLQkgIGVjaG8gIgkkaSBcXCIgPj4gJG1vZHVsZV9saXN0X2NvZGUKLSAgCSAgZWNobyAkRUNIT19OICIgJGkiICRFQ0hPX0MgPj4gJE1PRFVMRV9MSVNUCi0gICAgICAgICAgZXZhbCB0bXBmaWxldmFyPVwkYGVjaG8gJHttb2R1bGVfdHlwZX1fbGlzdF9jb2RlYAotICAgICAgICAgIGVjaG8gIgkkaSBcXCIgPj4gJHRtcGZpbGV2YXIKLSAgICAgICAgZWxzZQotICAgICAgICAgIGV2YWwgImRsXyR7ZGxfbmFtZX1fZmlsZXM9XCJcJGRsXyR7ZGxfbmFtZX1fZmlsZXMgJGlcIiIKLSAgICAgICAgICBzYXZlZF9zdWJsaXN0X2NvZGU9IiRzYXZlZF9zdWJsaXN0X2NvZGUgJGkiCi0gICAgICAgIGZpCi0gICAgICAgIG1ubT1gZWNobyAkaSB8IHNlZCAncy8uKlwvLy87cy9cLmMkLy87J2AKLSAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoLWUgIlxuY2hlY2tpbmcgJyRzcmNkaXIvJG1pYmRpci8kaS5jJyAoJG1ubS9gYmFzZW5hbWUgJGlgKSBDIGZpbGUgZm9yIGluaXQvc2h1dGRvd24iKQotICAgICAgICBpZiB0ZXN0ICJ4JG1ubSIgIT0gInhgYmFzZW5hbWUgJGlgIjsgdGhlbgotICAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCi0JICAgQUNfTVNHX0VSUk9SKFtjb25mbGljdGluZyBuYW1lczogJG1ubSAhPSBgYmFzZW5hbWUgJGlgXSkKLSAgICAgICAgZmkKLSAgICAgICAgdGVtcF9pbml0PWBncmVwIGluaXRfJG1ubSAkc3JjZGlyLyRtaWJkaXIvJGkuYyB8IGdyZXAgLXYgX2luaXRfJG1ubWAKLQlpZiB0ZXN0ICJ4JHRlbXBfaW5pdCIgIT0gIngiOyB0aGVuCi0gICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygtZSAiYWRkaW5nIGluaXRfJG1ubSgpIHRvIGxpc3QiKQotICAgICAgICAgICAgbmVlZF9oZWFkZXI9MQotCSAgICBlY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0cwotCWZpCi0JZ3JlcCBzaHV0ZG93bl8kbW5tICRzcmNkaXIvJG1pYmRpci8kaS5jID4gL2Rldi9udWxsCi0gICAgICAgIGlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCi0gICAgICAgICAgICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgLWVxIDE7IHRoZW4KLSAgICAgICAgICAgICAgZWNobyAtZSAiXG5hZGRpbmcgc2h1dGRvd25fJG1ubSgpIHRvIGxpc3QiCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgbmVlZF9oZWFkZXI9MQotCSAgICBlY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIHNodXRkb3duXyRtbm0oKTsiID4+ICRtaWJkaXIvJHttb2R1bGVfdHlwZX1fc2h1dGRvd24uaAotCWZpCi0gICAgICBmaSAjIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmMKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICMgaWYgdGhlcmUgaXMgYSBzaHV0ZG93bi9pbml0IGxpc3QsCi0gICAgICAjCi0gICAgICBpZiB0ZXN0ICRuZWVkX2hlYWRlciAtZXEgMSA7IHRoZW4KLSAgICAgICAgIGVjaG8gJyNpbmNsdWRlICInIm1pYmdyb3VwLyRpLmgiJyInID4+ICRvdXRwdXRfaGRycwotICAgICAgZWxzZQotICAgICAgICAgZWNobyAnLyojaW5jbHVkZSAiJyJtaWJncm91cC8kaS5oIiciKi8nID4+ICRvdXRwdXRfaGRycwotICAgICAgZmkKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICMgY2hlY2sgZm9yIG91dHB1dCBkaXJlY3RvcnkgKGZvciBidWlsZGluZyBvdXRzaWRlIG9mIHNvdXJjZSB0cmVlCi0gICAgICAjCi0gICAgICBjaGFuZ2VxdW90ZSgsICkKLSAgICAgIGlmIHRlc3QgInhgZWNobyAkaSB8IHNlZCAncy9cLy8vZzsnYCIgIT0gIngkaSI7IHRoZW4KLQltbmQ9YGVjaG8gJGkgfCBzZWQgJ3MvXC9bXi9dKiQvLzsnYAotCWlmIHRlc3QgISAtZCAuLyRtaWJkaXIvJG1uZDsgdGhlbgotCSAgICBtb2R1bGVfZGlyZWN0b3JpZXM9IiRtb2R1bGVfZGlyZWN0b3JpZXMgLi8kbWliZGlyLyRtbmQiCi0JZmkKLSAgICAgIGZpICMgbW9kdWxlIGRpcmVjdG9yeSB0ZXN0Ci0gICAgICBjaGFuZ2VxdW90ZShbLCBdKQotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIyBkZWZpbmUgVVNJTkdfKl9NT0RVTEUKLSAgICAgICMKLSAgICAgIGNoYW5nZXF1b3RlKCwgKQotICAgICAgc3ltPSJgZWNobyAke2l9IHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nJyB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2AiCi0gICAgICBjaGFuZ2VxdW90ZShbLCBdKQotICAgICAgZWNobyAiLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSAke2l9IG1vZHVsZSBmaWxlcy4gICovIiA+PiBpbmNsdWRlL25ldC1zbm1wL2FnZW50LyR7bW9kdWxlX3R5cGV9X2NvbmZpZy5oCi0gICAgICBlY2hvICIjZGVmaW5lIFVTSU5HXyR7c3ltfV9NT0RVTEUgMSIgPj4gaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8ke21vZHVsZV90eXBlfV9jb25maWcuaAotICAgICAgZWNobyAiICIgPj4gaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8ke21vZHVsZV90eXBlfV9jb25maWcuaAotCi0gICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgZWNobyAkRUNIT19OICIgJGkkRUNIT19DIgotICAgIGZpICMKLSAgICBkb25lICMgZm9yIGkgaW4gJG1vZHVsZV9zdWJsaXN0Ci0KLSAgICBpZiB0ZXN0ICIkb3V0cHV0X3RvIiA9ICJzZXBhcmF0ZSIgOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JG5ld19saXN0X3R3byIgPSAieCIgOyB0aGVuCi0gICAgICAgICMgbm8gbmV3IHN1Yi1tb2R1bGVzIHRvIGFkZCB0byB0aGUgY3VycmVudCB0YXJnZXQKLSAgICAgICAgb3V0cHV0X3RvPSJub3JtYWwiCi0KLSAgICAgICAgZGxsY2xlYW5zPSIkc2F2ZWRfc3VibGlzdF9vICRkbGxjbGVhbnMiCi0gICAgICAgIG91dHB1dF9pbml0cz0iIgotICAgICAgICBtb2R1bGVfc3VibGlzdD0iIgotICAgICAgZWxzZQotICAgICAgICAjIGEgbW9kdWxlIGhhZCBzdWItbW9kdWxlcyByZXF1aXJlZDsga2VlcCBnb2luJwotICAgICAgICBzYXZlZF9zdWJsaXN0PSIkc2F2ZWRfc3VibGlzdCAkbW9kdWxlX3N1Ymxpc3QiCi0gICAgICAgIG1vZHVsZV9zdWJsaXN0PSIkbmV3X2xpc3RfdHdvIgotICAgICAgICBuZXdfbGlzdF90d289IiIKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgbW9kdWxlX3N1Ymxpc3Q9IiIKLSAgICBmaQotCi0gICAgZG9uZSAjIHdoaWxlIG1vZHVsZV9zdWJsaXN0Ci0gIGRvbmUgIyBmb3IgaiBpbiAkbmV3X21vZHVsZV9saXN0Ci0KLSAgIyByZW1lbWJlciB0aGUgdG9wIGxldmVsIG1vZHVsZXMgZm9yIGxhdGVyIHJlcG9ydGluZwotICBpZiB0ZXN0ICRmaXJzdF9wYXNzID0gMSA7IHRoZW4KLSAgICAjIHJlbWVtYmVyIHRoaXMgbGlzdCBmb3IgbGF0ZXIgcmVwb3J0aW5nCi0gICAgdG9wX2xldmVsX21vZHVsZXM9IiRuZXdfbW9kdWxlX2xpc3QgPT4gJG5ld19saXN0X3R3byIKLSAgICBmaXJzdF9wYXNzPTAKLSAgZmkKLSAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIyBpZiAkaSBhZGRlZCBuZXcgbW9kdWxlcyB2aXMgY29uZmlnXyosCi0gICMgY2hlY2sgdGhvc2UgbW9kdWxlcyBmb3IgcmVxdWlyZW1lbnRzIHRvbwotICAjCi0gICMgdHJhbnNmZXIgdGhlIG5ldyBtb2R1bGUgdG8gY2hlY2sgbGlzdCB0byB0aGUgbm9ybWFsIHZhcmlhYmxlCi0gICMKLSAgaWYgdGVzdCAieCRuZXdfbGlzdF90d28iIDsgdGhlbgotICAgIG91dHB1dF90bz1ub3JtYWwKLSAgZmkKLSAgbmV3X21vZHVsZV9saXN0PSIkbmV3X2xpc3RfdHdvIgotICBuZXdfbGlzdF90d289IiIKLWRvbmUgIyB3aGlsZSB0ZXN0ICJ4JG5ld19tb2R1bGVfbGlzdCIgIT0gIngiOyBkbwotZWNobyAiIgotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uc3RydWN0IHRoZSBkbGwgY29kZSBmaWxlcyBhbmQgbWFrZSBydWxlcy4gIFRoaXMgY2FuJ3QgYmUgZG9uZQotIyB1bnRpbCBub3cgYmVjYXVzZSBkdXBsaWNhdGUgdXNlIG9mIGEgbW9kdWxlIG1lYW5zIGl0IGdldHMgcmVtb3ZlZAotIyBmcm9tIHRoZSBkbGwgYW5kIHB1dCBpbnRvIHRoZSBtYWluIGFnZW50LgotIwotZm9yIGkgaW4gJGRsX25hbWVzIDsgZG8KLSAgZXZhbCBtb2RfZmlsZXM9IlwiXCRkbF8ke2l9X2ZpbGVzXCIiCi0gIGVjaG8gImNvbXBvbmVudHMgaW4gdGhlICRpIGRsbDogJG1vZF9maWxlcyIKLQotICBvdXRwdXRfaW5pdHM9ImFnZW50L21pYmdyb3VwLyR7aX0tZGxsLmMiCi0gIG91dHB1dF9oZHJzPSJhZ2VudC9taWJncm91cC8ke2l9LWhkcnMuaCIKLQotICBBQ19NU0dfTU9EVUxFX0RCRygiY3JlYXRpbmcgZGxsIGZpbGU6ICRvdXRwdXRfaW5pdHMiKQotICBmb3Igb2ZpbGUgaW4gJG91dHB1dF9pbml0cyAkb3V0cHV0X2hkcnMgOyBkbwotICAgIGlmIHRlc3QgLWYgJG9maWxlIDsgdGhlbgotICAgICAgaWYgZ3JlcCAidGhpcyBmaWxlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUiICRvZmlsZSA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgotICAJOgotICAgICAgZWxzZQotICAJQUNfTVNHX0VSUk9SKFskb2ZpbGUgYWxyZWFkeSBleGlzdGVkIDsgY2FuJ3QgYnVpbGQgZGxsIG9iamVjdCAkaV0pCi0gICAgICBmaQotICAgIGZpCi0gICAgY2F0ID4gJG9maWxlIDw8IEVPRklGCi0vKiB4RG8gbm90IGVkaXQ7IHRoaXMgZmlsZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlICovCi1FT0ZJRgotICBkb25lCi0KLSAgY2F0ID4+ICRvdXRwdXRfaW5pdHMgPDwgRU9GT0MKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSAiJHtpfS1oZHJzLmgiCi12b2lkCi1pbml0XyRpKHZvaWQpIHsKLUVPRk9DCi0KLSAgIyBjcmVhdGUgdGhlIC5zbyBydWxlCi0gIHNhdmVkX3N1Ymxpc3Rfbz1gZWNobyAiJG1vZF9maWxlcyAiIHwgc2VkICdzL14gKi8vZztzLyAgKi8ubyAvZzsnYAotCi0gICMgY3JlYXRlIHRoZSBydWxlcyBmb3IgZWFjaCBvYmplY3QKLSAgZm9yIGogaW4gJG1vZF9maWxlcyA7IGRvCi0gICAgY2F0ID4+ICRtb2R1bGVfcnVsZXMgPDwgRU9GUgotJGoubzogJGouYwotCVwkKENDKSAtYyBcJChDUFBGTEFHUykgXCQoQ0ZMQUdTKSBcJChETEZMQUdTKSAtbyBcJEAgXCQ8Ci0KLUVPRlIKLSAgICBtbm09YGVjaG8gJGogfCBzZWQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCi0gICAgZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHMKLSAgZG9uZQotCi0gICMgY3JlYXRlIHRoZSBydWxlIGZvciB0aGUgLnNvIGFuZCB3cmFwcGVyIGNvZGUKLSAgY2F0ID4+ICRtb2R1bGVfcnVsZXMgPDwgRU9GTQotJHtpfS1kbGwubzogJHtpfS1kbGwuYwotCVwkKENDKSAtYyBcJChDUFBGTEFHUykgXCQoQ0ZMQUdTKSBcJChETEZMQUdTKSAtbyBcJEAgXCQ8Ci0KLSR7aX0uc286ICRzYXZlZF9zdWJsaXN0X28gJHtpfS1kbGwubwotCVwkKENDKSBcJChDUFBGTEFHUykgXCQoQ0ZMQUdTKSBcJChETEZMQUdTKSAtbyBcJEAgJHNhdmVkX3N1Ymxpc3RfbyAke2l9LWRsbC5vCi0KLUVPRk0KLSAgICAgICAgY2F0ID4+ICRvdXRwdXRfaW5pdHMgPDwgRU9GT0NGSU4KLX0KLUVPRk9DRklOCi0KLWRvbmUKLQotIyBjbGVhbnVwCi1ybSAtZiBtb2R1bGVfdG1wX2hlYWRlci5oCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGJ1aWxkIG1vZHVsZSBsaXN0cyBmb3IgTWFrZWZpbGVzCi0jCi1jaGFuZ2VxdW90ZSgsICkKLQotZm9yIGkgaW4gbW9kdWxlX2xpc3RfbyBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9sbyBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9vIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIDsgZG8KLSAgZXZhbCAiJGk9bWsvJHtpfS5tayIKLWRvbmUKLQotc2VkICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9vCi1zZWQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2MKLXNlZCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2xvCi0KLXNlZCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X28KLXNlZCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRtaWJfbW9kdWxlX2xpc3RfY29kZSAgPiAkbWliX21vZHVsZV9saXN0X2MKLXNlZCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9sbwotCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9vL21pYmdyb3VwX2xpc3Rfby87c0BcKFteIAldKlwpXC5vQG1pYmdyb3VwL1wxLm9AZycgPCAkbWliX21vZHVsZV9saXN0X28gPiAkbWliZ3JvdXBfbGlzdF9vCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9sby9taWJncm91cF9saXN0X2xvLztzQFwoW14gCV0qXClcLmxvQG1pYmdyb3VwL1wxLmxvQGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9sbyA+ICRtaWJncm91cF9saXN0X2xvCi0KLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3Rfbwotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9jCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9sbwotCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X28vYWdlbnRncm91cF9saXN0X28vO3NAXChbXiAJXSpcKVwub0BtaWJncm91cC9cMS5vQGcnIDwgJGFnZW50X21vZHVsZV9saXN0X28gPiAkYWdlbnRncm91cF9saXN0X28KLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfbG8vYWdlbnRncm91cF9saXN0X2xvLztzQFwoW14gCV0qXClcLmxvQG1pYmdyb3VwL1wxLmxvQGcnIDwgJGFnZW50X21vZHVsZV9saXN0X2xvID4gJGFnZW50Z3JvdXBfbGlzdF9sbwotCi1mb3IgaSBpbiBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2MgbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X2xvIG1pYmdyb3VwX2xpc3RfbyBtaWJncm91cF9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfYyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gOyBkbwotCSMgaHB1eCBtYWtlIChhdCBsZWFzdCkgZG9lc24ndCBsaWtlIGEgdHJhaWxpbmcgXCBvbiB0aGUgbGFzdAotCSMgbGluZSBldmVuIHdoZW4gdGhlIG5leHQgbGluZSBjb250YWlucyBub3RoaW5nIGJ1dAotCSMgd2hpdGVzcGFjZS4KLQlsYXN0dG9rZW49YHRhaWwgLTEgbWsvJGkubWsgfCBhd2sgJ3twcmludCAkMX0nYAotCXNlZCAicyMkbGFzdHRva2VuIFxcXFwjJGxhc3R0b2tlbiMiIDwgbWsvJGkubWsgPiBtay8kaS5tay50bXAKLQltdiBtay8kaS5tay50bXAgbWsvJGkubWsKLQotCSMgYWRkIGEgY2xvc2luZyBjb21tZW50Ci0JZWNobyAiIiA+PiBtay8kaS5tawotCWVjaG8gIiMgZW5kIGNvbmZpZ3VyZSBnZW5lcmF0ZWQgY29kZSIgPj4gbWsvJGkubWsKLWRvbmUKLQotY2hhbmdlcXVvdGUoWywgXSkKLQotaWYgdGVzdCAkbW9kdWxlX2RlYnVnIC1lcSAxOyB0aGVuCi0gICBlY2hvIC1lICJcbkZpbmFsIG1vZHVsZSBsaXN0OiAkbW9kdWxlX2xpc3RfY29kZSIKLSAgIGV4aXQKLWZpCi1pZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCi0gIEFDX01TR19DQUNIRV9BREQoW0FnZW50IE1vZHVsZSBsaXN0OiAkbW9kdWxlX2xpc3RfY29kZV0pCi1maQotQUNfU1VCU1RfRklMRShNT0RVTEVfTElTVCkKLUFDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfYykKLUFDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfbykKLUFDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfbG8pCi1BQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9jKQotQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfbykKLUFDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X2xvKQotQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9jKQotQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9vKQotQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9sbykKLUFDX1NVQlNUX0ZJTEUobWliZ3JvdXBfbGlzdF9vKQotQUNfU1VCU1RfRklMRShtaWJncm91cF9saXN0X2xvKQotQUNfU1VCU1RfRklMRShhZ2VudGdyb3VwX2xpc3RfbykKLUFDX1NVQlNUX0ZJTEUoYWdlbnRncm91cF9saXN0X2xvKQotQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdCkKLQotI0FDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0KQotI0FDX1NVQlNUKG1vZHVsZV9saXN0KQotQUNfU1VCU1QoZGVmYXVsdF9taWJzX2luc3RhbGwpCi1BQ19TVUJTVChkbGxjbGVhbnMpCi1BQ19TVUJTVF9GSUxFKG1vZHVsZV9ydWxlcykKLUFDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfZGVwcykKLUFDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X2RlcHMpCi1BQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X2RlcHMpCi0KLUFDX01TR19SRVNVTFQoLikKLQotaWYgdGVzdCAkbW9kdWxlX2RlYnVnIC1lcSAxOyB0aGVuCi1BQ19NU0dfQ0FDSEVfQUREKEFnZW50IE1JQiBjb2RlOiAgICAgICAgICAgICRtb2R1bGVfbGlzdCkKLWZpCi1BQ19NU0dfQ0FDSEVfQUREKEFnZW50IE1JQiBjb2RlOiAgICAgICAgICAgICR0b3BfbGV2ZWxfbW9kdWxlcykKLQotIyBlbmQgaGFpcnkgYWdlbnQgbW9kdWxlIHByb2Nlc3NpbmcKLQotQUNfTVNHX0NIRUNLSU5HKFtpZiBkaXJlY3RvcmllcyBuZWVkIHRvIGJlIGNyZWF0ZWRdKQotZm9yIGkgaW4gJG1vZHVsZV9kaXJlY3RvcmllczsgZG8KLSAgJHNyY2Rpci9ta2luc3RhbGxkaXJzICRpCi1kb25lCi1BQ19NU0dfUkVTVUxUKC4pCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIERlZmluZSBkZWZhdWx0IG1pYnMKLSMKLUFDX01TR19DSEVDS0lORyhbZGVmYXVsdCBtaWIgZmlsZXMgdG8gcmVhZF0pCi1pZiB0ZXN0ICJ4JE5FVFNOTVBfREVGQVVMVF9NSUJTIiA9ICJ4IjsgdGhlbgotICBORVRTTk1QX0RFRkFVTFRfTUlCUz0iJGRlZmF1bHRfbWlicyIKLWZpCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gICMgbWluZ3czMiBhbmQgY3lnd2luIHVzZSAnOycgYXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHNlcGFyYXRvciBjaGFyCi0gIEVOVl9TRVBBUkFUT1I9IjsiCi0gIE5FVFNOTVBfREVGQVVMVF9NSUJTPWBlY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQlMiIHwgc2VkICdzLzovOy9nJ2AKLSAgZGVmYXVsdF9taWJzPWBlY2hvICIkZGVmYXVsdF9taWJzIiB8IHNlZCAncy86LzsvZydgCi1lbHNlCi0gIEVOVl9TRVBBUkFUT1I9IjoiCi1maQotQUNfU1VCU1QoRU5WX1NFUEFSQVRPUikKLUFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfTUlCUywiJE5FVFNOTVBfREVGQVVMVF9NSUJTIikKLUFDX1NVQlNUKE5FVFNOTVBfREVGQVVMVF9NSUJTKQotQUNfTVNHX1JFU1VMVCgkTkVUU05NUF9ERUZBVUxUX01JQlMpCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB3ZSBoYXZlIHRvIGJ1aWxkIFBJQyBjb2RlXSkKLWVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiB1Y2Qtc25tcC9kbG1vZCAiID4vZGV2L251bGwKLWlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCi0gICAgICAgIExJQl9DRkxBR1M9IiRMSUJfQ0ZMQUdTICRTSExJQl9DRkxBR1MiCi0JQUNfTVNHX1JFU1VMVCh5ZXMpCi1lbHNlCi0JRExMSUJTPSIiCi0JQUNfTVNHX1JFU1VMVChubykKLWZpCi0KLSMKLSMgQ2hlY2sgZm9yIGtlcm5lbCBsb2NhdGlvbgotIwotCi1BQ19DQUNIRV9DSEVDSyhmb3IgbG9jYXRpb24gb2Ygc3lzdGVtIGtlcm5lbCxhY19jdl9LRVJORUxfTE9DLAotW2FjX2N2X0tFUk5FTF9MT0M9InVua25vd24iCi0jIEZpcnN0IGRldGVybWluZSBpZiB0ZXN0IGV4cGVjdHMgYSAtZiBvciBhIC1jIChjaGFyYWN0ZXIgZGV2aWNlIChTWVNWKSkKLQotaWYgdGVzdCAtYyAvZGV2L251bGw7IHRoZW4KLSAgQ0ZMQUc9Ii1jIgotZWxpZiB0ZXN0IC1mIC9kZXYvbnVsbDsgdGhlbgotICBDRkxBRz0iLWYiCi1lbHNlCi0gICMgZmFsbCBiYWNrCi0gIENGTEFHPSItZiIKLWZpCi1mb3IgaSBpbiAvdm11bml4IC9ocC11eCAvc3RhbmQvdm11bml4IC9kZXYva3N5bXMgL2tlcm5lbC91bml4IC9rZXJuZWwvZ2VudW5peCAvbmV0YnNkIC91bml4IC9rZXJuZWwgL2JzZCAvbWFjaF9rZXJuZWwgL2Jvb3Qva2VybmVsL2tlcm5lbAotICBkbwotICBpZiB0ZXN0IC1mICRpIC1vICRDRkxBRyAkaTsgdGhlbgotICAgIGFjX2N2X0tFUk5FTF9MT0M9IiRpIgotICAgIGJyZWFrOwotICBmaQotZG9uZQotaWYgdGVzdCAkaSA9ICJ1bmtub3duIjsgdGhlbgotICBBQ19NU0dfV0FSTihbQ2FuJ3QgZmluZCBzeXN0ZW0ga2VybmVsLi4uICBTZXR0aW5nIHRvIC92bXVuaXhdKQotICBhY19jdl9LRVJORUxfTE9DPSIvdm11bml4IgotZmkKLV0pCi0KLUFDX0RFRklORV9VTlFVT1RFRChLRVJORUxfTE9DLCIkYWNfY3ZfS0VSTkVMX0xPQyIpCi0KLSMKLSMgQ2hlY2sgZm9yIG1vdW50IHRhYmxlIGxvY2F0aW9uCi0jCi0KLUFDX0NBQ0hFX0NIRUNLKGZvciBtb3VudCB0YWJsZSBsb2NhdGlvbixhY19jdl9FVENfTU5UVEFCLAotW2FjX2N2X0VUQ19NTlRUQUI9InVua25vd24iCi1mb3IgaSBpbiAvZXRjL21udHRhYiAvZXRjL210YWIgL2V0Yy9maWxlc3lzdGVtcyAvZGV2L21udHRhYgotICBkbwotICBpZiB0ZXN0IC1mICRpIC1vIC1jICRpOyB0aGVuCi0gICAgYWNfY3ZfRVRDX01OVFRBQj0iJGkiCi0gICAgYnJlYWs7Ci0gIGZpCi1kb25lCi1dKQotCi1BQ19ERUZJTkVfVU5RVU9URUQoRVRDX01OVFRBQiwiJGFjX2N2X0VUQ19NTlRUQUIiKQotCi0jIENoZWNrIGZvciAvZGV2L2RtZW0gb3IgL2Rldi9kcnVtIGxvY2F0aW9uCi1BQ19DQUNIRV9DSEVDSyhmb3IgbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2UsYWNfY3ZfRE1FTV9MT0MsCi1bCi0jIEZpcnN0IGRldGVybWluZSBpZiB0ZXN0IGV4cGVjdHMgYSAtZiBvciBhIC1jIChjaGFyYWN0ZXIgZGV2aWNlIChTWVNWKSkKLQotaWYgdGVzdCAtZiAvZGV2L2ttZW07IHRoZW4KLSAgQ1RFU1Q9InRlc3QgLWYiCi1lbGlmIHRlc3QgLWMgL2Rldi9rbWVtOyB0aGVuCi0gIENURVNUPSJ0ZXN0IC1jIgotZWxzZQotICAjIGZhbGwgYmFjawotICBDVEVTVD0idGVzdCAtZiIKLWZpCi0KLWlmICRDVEVTVCAvZGV2L2RtZW07IHRoZW4KLSAgYWNfY3ZfRE1FTV9MT0M9Ii9kZXYvZG1lbSIKLWVsaWYgJENURVNUIC9kZXYvZHJ1bTsgdGhlbgotICBhY19jdl9ETUVNX0xPQz0iL2Rldi9kcnVtIgotZWxzZQotICBhY19jdl9ETUVNX0xPQz0ibm9uZSIKLWZpCi1dKQotCi1pZiB0ZXN0ICJ4JGFjX2N2X0RNRU1fTE9DIiAhPSAieG5vbmUiOyB0aGVuCi0gIEFDX0RFRklORV9VTlFVT1RFRChETUVNX0xPQywiJGFjX2N2X0RNRU1fTE9DIikKLWZpCi0KLSMgZm9yY2VkIGVmZW5jZSB0dXJuZWQgb2ZmLgotIyBpZiB0ZXN0ICJ4JGRldmVsb3BlciIgPSAieHllcyIgLWEgIngkdXNlX2VmZW5jZSIgIT0gInhubyI7IHRoZW4KLSMgICAgdXNlX2VmZW5jZT0ieWVzIgotIyBmaQotCi1pZiB0ZXN0ICJ4JHVzZV9lZmVuY2UiID0gInh5ZXMiOyB0aGVuCi0gICAgQUNfQ0hFQ0tfTElCKGVmZW5jZSwgRUZfRXhpdCkKLWZpCi0KLSMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCi0jIEFDX0NIRUNLX0xJQihkZXMsIG1haW4pCi1BQ19DSEVDS19MSUIobSwgcm91bmQpCi1BQ19DSEVDS19MSUIobSwgZXhwKQotCi1BQ19BUkdfV0lUSChlbGYsCi0JW0FTX0hFTFBfU1RSSU5HKC0td2l0aG91dC1lbGYsW3VzZSBlbGYgbGlicmFyaWVzXSldLCwKLQlbQUNfQVJHX0VOQUJMRShlbGYsLAotCQlbQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZWxmLy0td2l0aG91dC1lbGYgaW5zdGVhZCBdKV0pXSkKLQotaWYgdGVzdCAieCR3aXRoX2VsZiIgIT0gInhubyI7IHRoZW4KLSMgbmxpc3QgaXMgbmVlZGVkIGZvciB1cHRpbWUgb24gc29tZSBzeXRlbXMgaW4gdGhlIGdlbmVyaWMgbGlicmFyeQotIyBhZGQgaG9zdHMgd2hpY2ggZG9uJ3QgdXNlIG5saXN0IHRvIHRoZSBibGFuayBmaXJzdCBsaW5lCi1jYXNlICR0YXJnZXRfb3MgaW4KLQlsaW51eCopIDs7Ci0JaXJpeCopICMgQ2hlY2sgZm9yIG5saXN0IGluIG1sZCAoaXJpeCkKLQkJQUNfQ0hFQ0tfTElCKGVsZiwgbmxpc3QpCi0JCUFDX0NIRUNLX0xJQihlbGYsIG5saXN0NjQpCi0JCUFDX0NIRUNLX0xJQihtbGQsIG5saXN0KQotCQk7OwotCSopICMgZGVmYXVsdAotCQlBQ19DSEVDS19MSUIoZWxmLCBubGlzdCkKLQkJOzsKLWVzYWMKLWZpCi0gCi0KLSMgT24gc29tZSBwbGF0Zm9ybXMgKElyaXgpIGxpYm5zbCBhbmQgbGlic29ja2V0IHNob3VsZCBub3QgYmUgdXNlZC4KLUFDX0NIRUNLX0ZVTkMoZ2V0aG9zdGJ5bmFtZSwgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRSksCi0JQUNfQ0hFQ0tfTElCKG5zbCwgZ2V0aG9zdGJ5bmFtZSwgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRSkKLQlMSUJTPSIke0xJQlN9IC1sbnNsIikpCi0KLSMgU0NPIFVuaXh3YXJlIDcuMS40IGZpbmRzIGdldGhvc3RieW5hbWUoKSBpbiAtbHNvY2tldAotQUNfQ0hFQ0tfRlVOQyhnZXRob3N0YnluYW1lLCBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FKSwKLQlBQ19DSEVDS19MSUIoc29ja2V0LCBnZXRob3N0YnluYW1lLCBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FKQotCUxJQlM9IiR7TElCU30gLWxzb2NrZXQiKSkKLQotIyBTb2xhcmlzIGtzdGF0Ci1BQ19DSEVDS19MSUIoa3N0YXQsIGtzdGF0X2xvb2t1cCwKLSAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCS1NUQVQsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtzdGF0JyBsaWJyYXJ5ICgtbGtzdGF0KS5dKQotICAgICAgICBMTkVUU05NUExJQlM9IiR7TE5FVFNOTVBMSUJTfSAtbGtzdGF0IikKLQotIyBDaGVjayBmb3IgbGlicmFyaWVzIHRoYXQgdGhlIGFnZW50IG5lZWRzCi0jIHNhdmluZyBvbGQgbGlicmFyaWVzCi1OT05BR0VOVExJQlM9JExJQlMKLQotIyBDaGVjayBmb3Igc2VjdXJpdHkgcmVsYXRlZCBmdW5jdGlvbnMKLWlmIHRlc3QgIngkdHJ5b3BlbnNzbCIgIT0gInhubyI7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgIT0gInh5ZXMiIC1hICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KLSAgICAgIEFDX0NIRUNLX0xJQihwa2NzMTEsIENfSW5pdGlhbGl6ZSwgQUNfREVGSU5FKEhBVkVfTElCUEtDUzExLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwa2NzMTEnIGxpYnJhcnkgKC1scGtjczExKS5dKQotICAgICAgICAgICAgICBMSUJQS0NTMTE9Ii1scGtjczExIikKLSAgICBlbHNlIAotICAgICAgaWYgdGVzdCAieCR0cnlyc2FyZWYiICE9ICJ4bm8iOyB0aGVuCi0gICAgICAgICBBQ19DSEVDS19MSUIocnNhcmVmLCBSU0FQcml2YXRlRGVjcnlwdCkKLSAgICAgICAgIEFDX0NIRUNLX0xJQihSU0FnbHVlLCBSU0FfUEtDUzFfUlNBcmVmKQotICAgICAgZmkKLQotICAgICAgQUNfQ0hFQ0tfTElCKGNyeXB0bywgRVZQX21kNSwgQUNfREVGSU5FKEhBVkVfTElCQ1JZUFRPLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjcnlwdG8nIGxpYnJhcnkgKC1sY3J5cHRvKS5dKQotICAgICAgICAgICAgICBMSUJDUllQVE89Ii1sY3J5cHRvIikKLSAgICAgIEFDX0NIRUNLX0xJQihjcnlwdG8sIEFFU19jZmIxMjhfZW5jcnlwdCwgCi0gICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0FFU19DRkIxMjhfRU5DUllQVCwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgQUVTX2NmYjEyOF9lbmNyeXB0JyBmdW5jdGlvbi5dKSkKLSAgICAgIEFDX0NIRUNLX0xJQihjcnlwdG8sIEVWUF9NRF9DVFhfY3JlYXRlLAotICAgICAgICAgIEFDX0RFRklORShbSEFWRV9FVlBfTURfQ1RYX0NSRUFURV0sIFtdLAotICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFVlBfTURfQ1RYX2NyZWF0ZScgZnVuY3Rpb24uXSkKLSAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfRVZQX01EX0NUWF9ERVNUUk9ZXSwgW10sCi0gICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVWUF9NRF9DVFhfZGVzdHJveScgZnVuY3Rpb24uXSkpCi0gICAgZmkKLWVsaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCi0gICAgQUNfQ0hFQ0tfTElCKHBrY3MxMSwgQ19Jbml0aWFsaXplLCBBQ19ERUZJTkUoSEFWRV9MSUJQS0NTMTEpCi0gICAgICAgICAgICBMSUJQS0NTMTE9Ii1scGtjczExIikKLWZpCi0KLUxJQlM9JE5PTkFHRU5UTElCUwotCi0jIGNoZWNrIGZvciB0Y3Agd3JhcHBlciBzdXBwb3J0Ci1fY3BwZmxhZ3M9IiR7Q1BQRkxBR1N9IgotX2xkZmxhZ3M9IiR7TERGTEFHU30iCi0KLUFDX0FSR19XSVRIKGxpYndyYXAsCi1bICAtLXdpdGgtbGlid3JhcFs9TElCUEFUSF0gIENvbXBpbGUgaW4gbGlid3JhcCAodGNwX3dyYXBwZXJzKSBzdXBwb3J0Ll0sWwotICBpZiB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSAibm8iOyB0aGVuCi0gICAgaWYgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gInllcyI7IHRoZW4KLSAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR3aXRoX2xpYndyYXAvaW5jbHVkZSIKLSAgICAgIExERkxBR1M9IiR7TERGTEFHU30gLUwkd2l0aF9saWJ3cmFwL2xpYiIKLSAgICBmaQotCi0gICAgX2xpYnM9JHtMSUJTfQotICAgIEFDX0NIRUNLX0hFQURFUih0Y3BkLmgsICwKLQkgICAgQUNfTVNHX0VSUk9SKFtBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIHRjcGQuaC5dKSkKLQotICAgIExJQlM9IiRMSUJTIC1sd3JhcCIKLQlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXBdKQotCSMgWFhYOiBzaG91bGQgY2hlY2sgZm9yIGhvc3RzX2N0bAotCUFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0JCSAgICAgI2luY2x1ZGUgPHRjcGQuaD4KLQkJICAgICBpbnQgYWxsb3dfc2V2ZXJpdHkgPSAwOwotCQkgICAgIGludCBkZW55X3NldmVyaXR5ICA9IDA7Ci0JCSAgICBdLFtob3N0c19hY2Nlc3MoKHZvaWQgKikwKV0sWwotCi0JICAgIEFDX01TR19SRVNVTFQoW3llc10pCi0JICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9MSUJXUkFQKQotCSAgICB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSBubyAtYSAiJHdpdGhfbGlid3JhcCIgIT0geWVzICYmIF93cmFwbGlicz0iLUwkd2l0aF9saWJ3cmFwL2xpYiIKLQkgICAgX3dyYXBsaWJzPSIkX3dyYXBsaWJzIC1sd3JhcCJdLAotICAgICAgICBbCi0JICAgIEFDX01TR19SRVNVTFQoW25vXSkKLQkgICAgIyBMaW51eCBSZWRIYXQgNi4xIHdvbid0IGxpbmsgbGlid3JhcCB3aXRob3V0IGxpYm5zbAotCSAgICBBQ19DSEVDS19GVU5DKHlwX2dldF9kZWZhdWx0X2RvbWFpbiwgLAotCQlBQ19DSEVDS19MSUIobnNsLCB5cF9nZXRfZGVmYXVsdF9kb21haW4pKQotCSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAgbGlua2VkIHdpdGggLWxuc2xdKQotCSAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCQkgICAgICAgICAjaW5jbHVkZSA8dGNwZC5oPgotCQkgICAgICAgICBpbnQgYWxsb3dfc2V2ZXJpdHkgPSAwOwotCSAgICAgICAgICAgICAgICAgaW50IGRlbnlfc2V2ZXJpdHkgID0gMDsKLQkgCQldLFtob3N0c19hY2Nlc3MoKHZvaWQgKikwKV0sCi0KLQkJCUFDX01TR19SRVNVTFQoeWVzKQotCQkJQUNfREVGSU5FKE5FVFNOTVBfVVNFX0xJQldSQVApCi0JCQl0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSBubyAtYSAiJHdpdGhfbGlid3JhcCIgIT0geWVzICYmIF93cmFwbGlicz0iLUwkd2l0aF9saWJ3cmFwL2xpYiIKLQkJCV93cmFwbGlicz0iJF93cmFwbGlicyAtbHdyYXAgLWxuc2wiLAotCi0JCQlBQ19NU0dfUkVTVUxUKG5vKQotCQkJQUNfTVNHX0VSUk9SKEFza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuKSldKQotICAgIExBR0VOVExJQlM9IiRfd3JhcGxpYnMiCi0gICAgQ1BQRkxBR1M9JHtfY3BwZmxhZ3N9Ci0gICAgTERGTEFHUz0ke19sZGZsYWdzfQotICAgIExJQlM9JHtfbGlic30KLSAgZmkKLV0pCi0KLUFDX0NIRUNLX0hFQURFUlMocnBtL3JwbWxpYi5oIHJwbS9oZWFkZXIuaCkKLQotQUNfQ0hFQ0tfSEVBREVSKHJwbS9ycG1saWIuaCxycG1saWJfaD15ZXMscnBtbGliX2g9bm8pCi1BQ19DSEVDS19IRUFERVIocnBtL2hlYWRlci5oLHJwbWhlYWRlcl9oPXllcyxycG1oZWFkZXJfaD1ubykKLQotaWYgdGVzdCAieCRycG1oZWFkZXJfaCIgPSAieG5vIiAtbyAieCRycG1saWJfaCIgPSAieG5vIiA7IHRoZW4KLSAgaWYgdGVzdCAieCR3aXRoX3JwbSIgPSAieHllcyIgOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBlaXRoZXIgdGhlIFJQTSBoZWFkZXIgZmlsZXMgbmVlZGVkIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBSUE0gc3VwcG9ydF0pCi0gIGVsc2UKLSAgICB3aXRoX3JwbT1ubwotICBmaQotZmkKLQotIwotIyBycG0gbGlicmFyaWVzIG9ubHkgbmVlZGVkIGZvciB0aGUgaG9zdCByZXNvdXJjZXMgbWliIHNvZnR3YXJlCi0jIGluc3RhbGxlZCB0YWJsZXMgKG9uIGxpbnV4IGluIHBhcnRpY3VsYXIpCi0jCi1pZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIiAmJiBcCi0gICAgICAgIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiBob3N0L2hyX3N3aW5zdCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICMgQVJHLiAgUlBNIGlzIGEgcmVhbCBwYWluLgotICAjIEZXSVcgbGlicnBtLmxhLCBsaWJycG1pby5sYSwgYW5kIGxpYnBvcHQubGEgaGF2ZSBjb3JyZWN0IGRlcGVuZGVuY2llcy4KLSAgX3JwbWxpYnM9IiIKLQotICAjIHJwbS00LjAueCBuZWVkcyBycG1pby4KLSAgQUNfQ0hFQ0tfTElCKHJwbWlvLCBycG1HZXRQYXRoLCBbX3JwbWxpYnM9Ii1scnBtaW8gJF9ycG1saWJzIl0sLCRfcnBtbGlicykKLSAgCi0gICMgbm93IGNoZWNrIGZvciBycG0gdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcmllcy4KLSAgQUNfQ0hFQ0tfTElCKHJwbSwgcnBtR2V0RmlsZXN5c3RlbUxpc3QsWwotICAgIEFDX0RFRklORShIQVZFX0xJQlJQTSkKLSAgICBMTUlCTElCUz0iLWxycG0gJF9ycG1saWJzICRMTUlCTElCUyIKLSAgICBDRkxBR1M9IiRDRkxBR1MgLUkvdXNyL2luY2x1ZGUvcnBtIgotICBdLFsKLSAgICAjIHJwbS00LjAuMyBsaWJycG1kYiBhY3R1YWxseSBjb250YWlucyB3aGF0IHdlIG5lZWQuCi0gICAgQUNfQ0hFQ0tfTElCKHJwbWRiLCBycG1kYk9wZW4sWwotICAgICAgQUNfREVGSU5FKEhBVkVfTElCUlBNKQotICAgICAgTE1JQkxJQlM9Ii1scnBtZGIgLWxycG0gJF9ycG1saWJzICRMTUlCTElCUyIKLSAgICAgIENGTEFHUz0iJENGTEFHUyAtSS91c3IvaW5jbHVkZS9ycG0iCi0gICAgXSwsLWxycG0gJF9ycG1saWJzKQotICBdKQotCi0gICMgcnBtIDQuNiBoYXMgaW5jb21wYXRpYmxlIEFQSSwgdHVybiBvbiB0aGUgbGVnYWN5IG9uZQotICBBQ19DSEVDS19ERUNMKFtoZWFkZXJHZXRFbnRyeV0sCi0gICAgOiAsCi0gICAgQUNfREVGSU5FKFtfUlBNXzRfNF9DT01QQVRdLCBbXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBSUE0gNC42IG9yIG5ld2VyIHRvIHR1cm4gb24gbGVnYWN5IEFQSV0pLAotICAgIFtbI2luY2x1ZGUgPHJwbS9ycG1saWIuaD5dXQotICApCi1maQotCi0jIGxpYmt2bQotQUNfQ0hFQ0tfTElCKGt2bSwga3ZtX3JlYWQsIFtfbGlia3ZtPSItbGt2bSJdKQotQUNfQ0hFQ0tfRlVOQyhrdm1fb3BlbmZpbGVzLCBBQ19ERUZJTkUoSEFWRV9LVk1fT1BFTkZJTEVTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fb3BlbmZpbGVzJyBmdW5jdGlvbi5dKSwKLQlBQ19DSEVDS19MSUIoa3ZtLCBrdm1fb3BlbmZpbGVzLCBBQ19ERUZJTkUoSEFWRV9LVk1fT1BFTkZJTEVTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fb3BlbmZpbGVzJyBmdW5jdGlvbi5dKQotCV9saWJrdm09Ii1sa3ZtIikpCi1BQ19DSEVDS19GVU5DKGt2bV9nZXRwcm9jcywgQUNfREVGSU5FKEhBVkVfS1ZNX0dFVFBST0NTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fZ2V0cHJvY3MnIGZ1bmN0aW9uLl0pLAotCUFDX0NIRUNLX0xJQihrdm0sIGt2bV9nZXRwcm9jcywgQUNfREVGSU5FKEhBVkVfS1ZNX0dFVFBST0NTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fZ2V0cHJvY3MnIGZ1bmN0aW9uLl0pCi0JX2xpYmt2bT0iLWxrdm0iKSkKLUFDX0NIRUNLX0ZVTkMoa3ZtX2dldHN3YXBpbmZvLCBBQ19ERUZJTkUoSEFWRV9LVk1fR0VUU1dBUElORk8sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9nZXRzd2FwaW5mbycgZnVuY3Rpb24uXSksCi0JQUNfQ0hFQ0tfTElCKGt2bSwga3ZtX2dldHN3YXBpbmZvLCBBQ19ERUZJTkUoSEFWRV9LVk1fR0VUU1dBUElORk8sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9nZXRzd2FwaW5mbycgZnVuY3Rpb24uXSkKLQlfbGlia3ZtPSItbGt2bSIpKQotaWYgdGVzdCAieCR7X2xpYmt2bX0iICE9ICJ4IjsgdGhlbgotCUFDX0RFRklORShIQVZFX0xJQktWTSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtJyBsaWJyYXJ5ICgtbGt2bSkuXSkKLQlMQUdFTlRMSUJTPSIkTEFHRU5UTElCUyAke19saWJrdm19IgotZmkKLQotIyBEWU5BTUlDIE1PRFVMRSBTVVBQT1JUCi1BQ19DSEVDS19GVU5DKGRsb3BlbiwgQUNfREVGSU5FKEhBVkVfRExPUEVOLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbG9wZW4nIGZ1bmN0aW9uLl0pLAotCUFDX0NIRUNLX0xJQihkbCwgZGxvcGVuLCBBQ19ERUZJTkUoSEFWRV9ETE9QRU4sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsb3BlbicgZnVuY3Rpb24uXSkKLQlBQ19ERUZJTkUoSEFWRV9MSUJETCwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGwnIGxpYnJhcnkgKC1sZGwpLl0pCi0JTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sZGwiKSkKLQotIyBubGlzdAotQUNfQ0hFQ0tfRlVOQ1Mobmxpc3Qgbmxpc3Q2NCBrbmxpc3QpCi0KLSMgd2hldGhlciB3ZSBuZWVkIC1sZGV2c3RhdCBmb3IgZGlza2lvIE1JQgotZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIHVjZC1zbm1wL2Rpc2tpbyAiID4vZGV2L251bGwKLWlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCi0JQUNfQ0hFQ0tfRlVOQyhnZXRkZXZzLCBBQ19ERUZJTkUoSEFWRV9HRVRERVZTKSwKLQkJQUNfQ0hFQ0tfTElCKGRldnN0YXQsIGdldGRldnMsIEFDX0RFRklORShIQVZFX0dFVERFVlMpCi0JCUxNSUJMSUJTPSIke0xNSUJMSUJTfSAtbGRldnN0YXQiKSkKLQlBQ19DSEVDS19GVU5DKGdldGRldnMsIEFDX0RFRklORShIQVZFX0RFVlNUQVRfR0VUREVWUyksCi0JCUFDX0NIRUNLX0xJQihkZXZzdGF0LCBkZXZzdGF0X2dldGRldnMsIEFDX0RFRklORShIQVZFX0RFVlNUQVRfR0VUREVWUykKLQkJTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sZGV2c3RhdCIpKQotZmkKLQotIyBMTS1TRU5TT1JTLU1JQiBzdXBwb3J0Ci1lY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgdWNkLXNubXAvbG1TZW5zb3JzICIgPiAvZGV2L251bGwKLWlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCi0gICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHNlbnNvcnMgc3VwcG9ydF0pCi0gICAgICAgIGNhc2UgJHRhcmdldF9vcyBpbgotICAgICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSKHBpY2wuaCwgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1scGljbCIsKQotICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhwaWNsLmgpCi0gICAgICAgICAgICA7OwotICAgICAgICAqKQotICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSKHNlbnNvcnMvc2Vuc29ycy5oLCwKLSAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFthc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIHNlbnNvcnMvc2Vuc29ycy5oXSldKQotICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKHNlbnNvcnMsIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzLCBbCi0JCSAgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbHNlbnNvcnMiIDsKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW2Fza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgLWxzZW5zb3JzXSldKQotICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotZmkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQRVJMIFNVUFBPUlQKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyB0ZXN0IHRvIHNlZSBpZiB3ZSBjYW4gYXR0ZW1wdCB0byBidWlsZCBlbWJlZGRlZCBQZXJsIHNvIGZhcgotIwotaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInhubyIgOyB0aGVuCi0gICAgaW5zdGFsbF9wZXJsPSJ0cnkiCi0gIGZpCi0gIGlmIHRlc3QgIngkYWNfY3ZfcGF0aF9QRVJMUFJPRyIgPSAieCIgLW8gIngkYWNfY3ZfcGF0aF9QRVJMUFJPRyIgPSAieG5vIiA7IHRoZW4KLSAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgIGVtYmVkX3Blcmw9Im5vIgotICBmaQotZmkKLQotCi0jCi0jIEVtYmVkZGVkIFBlcmwgc3BlY2lmaWMgc3R1ZmYKLSMKLQotIyB0ZXN0IHBlcmwgcHJvZwotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgIG15cGVybD0kYWNfY3ZfcGF0aF9QRVJMUFJPRwotICAgIGlmIHRlc3QgJG15cGVybCA9ICJubyIgOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19FUlJPUigtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIHJlcXVlc3RlZCBidXQgbm8gcGVybCBleGVjdXRhYmxlIGZvdW5kKQotICAgICAgZmkKLSAgICBmaQotZmkKLQotIyB0ZXN0IGZvciBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQKLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAjIGVtYmVkZGVkIFBlcmwgcmVxdWlyZXMgc2hhcmVkIGxpYnJhcmllcwotICAgIGlmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInh5ZXMiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19FUlJPUihQZXJsIHN1cHBvcnQgcmVxdWlyZXMgLS1lbmFibGUtc2hhcmVkKQotICAgICAgZmkKLSAgICBmaQotZmkKLQotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGFyZSBpbiB0aGUgc291cmNlIHRyZWUgc28gd2UgY2FuIGluc3RhbGwgUGVybCBtb2R1bGVzXSkKLSAgaWYgdGVzdCAieCRzcmNkaXIiID0gInguIiAtbyAtZCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUgOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChbWWVzXSkKLSAgZWxzZQotICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICBBQ19NU0dfUkVTVUxUKFtOb10pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX0VSUk9SKFtQZXJsIG1vZHVsZXMgY2FuIG5vdCBiZSBidWlsdCBvdXRzaWRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5XSkKLSAgICBmaQotICBmaQotZmkgICAgICAKLQotIyBjaGVjayB0aGUgUGVybCBjb21waWxlciBuYW1lCi1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgIwotICAgICMgUGVybCBjYyBjaGVja3MKLSAgICAjCi0gICAgaWYgdGVzdCAieGVuYWJsZV9wZXJsX2NjX2NoZWNrcyIgIT0gInhubyIgOyB0aGVuCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQZXJsIGNjXSkKLSAgICAgIGNoYW5nZXF1b3RlKCwgKQotICAgICAgUEVSTENDPWAkbXlwZXJsIC1WOmNjIHwgJG15cGVybCAtbiAtZSAncHJpbnQgaWYgKHMvXlxzKmNjPS4oWy09XHdcc1wvXSspLjtccyovJDEvKTsnYAotICAgICAgY2hhbmdlcXVvdGUoWywgXSkKLSAgICAgIGlmIHRlc3QgIngkUEVSTENDIiAhPSAieCIgOyB0aGVuCi0gICAgICAgIEFDX01TR19SRVNVTFQoWyRQRVJMQ0NdKQotICAgICAgZWxzZQotICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgICAgZWxzZQotICAgICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGRldGVybWluZSB0aGUgY29tcGlsZXIgdGhhdCB3YXMgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS13aXRob3V0LXBlcmwtbW9kdWxlcyB0byBidWlsZCB3aXRob3V0IFBlcmwuXSkKLSAgICAgICAgZmkKLSAgICAgIGZpCi1maQotCi0jIGNoZWNrIHRoZSBQZXJsIGNvbXBpbGVyIGNvbXBhdGliaWxpdHkKLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAkUEVSTENDIGlzIGEgR05VIEMgY29tcGlsZXJdKQotICAgICAgT0xEQ0M9JENDCi0gICAgICBDQz0iJFBFUkxDQyIKLSAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtbCi0jaWZuZGVmIF9fR05VQ19fCi0gIGNob2tlIG1lCi0jZW5kaWYKLSAgICAgIF1dKV0sIFtwZXJsY2NfaXNfZ251PXllc10sIFtwZXJsY2NfaXNfZ251PW5vXSkKLSAgICAgIEFDX01TR19SRVNVTFQoWyRwZXJsY2NfaXNfZ251XSkKLSAgICAgIENDPSRPTERDQwotICAgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1hICJ4JHBlcmxjY19pc19nbnUiID0gInhubyIgOyB0aGVuCi0gICAgICAJaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgCSAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIAllbHNlCi0gICAgICAJICBBQ19NU0dfRVJST1IoW1RoaXMgYnVpbGQgaXMgdXNpbmcgYSBHTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBub24tR05VIChvciBub24td29ya2luZykgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuXSkKLSAgICAgIAlmaQotICAgICAgZmkKLWZpCi0KLSMgY2hlY2sgaWYgdGhleSdyZSBib3RoIGdudQotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIiAtYSAieCRwZXJsY2NfaXNfZ251IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgIAlpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAJICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgCWVsc2UKLSAgICAgICAgICBBQ19NU0dfRVJST1IoW1RoaXMgYnVpbGQgaXMgdXNpbmcgYSBub24tR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgR05VIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLl0pCi0gICAgICAJZmkKLSAgICAgIGZpCi1maQotCi0jIHdlIGhhdmUgZW5vdWdoIHN1cHBvcnQgZm9yIGluc3RhbGxpbmcgdGhlIG1vZHVsZXMgYXQgbGVhc3QuCi1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gIGluc3RhbGxfcGVybD0ieWVzIgotZWxzZQotICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieG5vIiA7IHRoZW4KLSAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgIGVtYmVkX3Blcmw9Im5vIgotICBmaQotZmkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgb24gdG8gZW1iZWRkaW5nLi4uCi0KLSMgY2hlY2sgdGhlIGNvbXBpbGVyIGZsYWdzIGZvciBpbGxlZ2FsIHRva2VucwotY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgc29sYXJpcyopCi0gICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgICAgICMKLSAgICAgICAgICAjIFBlcmwgY2MgY2hlY2tzCi0gICAgICAgICAgIwotICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHByb2JsZW1hdGljIFBlcmwgY2MgZmxhZ3Mgb24gU3Vuc10pCi0gICAgICAgICAgaWYgJG15cGVybCAtVjpjY2ZsYWdzIHwgZ3JlcCBMQVJHRUZJTEUgPiAvZGV2L251bGwgOyB0aGVuCi0gICAgICAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICAgICAgICBlbWJlZF9wZXJsPSJubyIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtQZXJsIHdhcyBjb21waWxlZCB3aXRoIExBUkdFRklMRSBzdXBwb3J0IHdoaWNoIHdpbGwgYnJlYWsgTmV0LVNOTVAuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci5dKQotICAgICAgICAgICAgZmkKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub25lIGtub3duXSkKLSAgICAgICAgICBmaQotICAgICAgZmkKLSAgICA7OwotCi0gICAgKikKLSAgICA7OwotZXNhYwotCi0KLSMgY2hlY2sgdGhlIGNmbGFncwotaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQZXJsIENGTEFHU10pCi0gICAgcGVybGNmbGFncz1gJG15cGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBjY29wdHNgCi0gICAgaWYgdGVzdCAieCRwZXJsY2ZsYWdzIiAhPSAieCIgOyB0aGVuCi0gICAgICBBQ19NU0dfUkVTVUxUKFskcGVybGNmbGFnc10pCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgJHBlcmxjZmxhZ3MiCi0gICAgZWxzZQotICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgZW1iZWRfcGVybD0ibm8iCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGRldGVybWluZSB0aGUgQyBjb21waWxlciBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuXSkKLSAgICAgIGZpCi0gICAgZmkKLWZpCi0KLSMgY2hlY2sgdGhlIGxkZmxhZ3MKLWlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUGVybCBMREZMQUdTXSkKLSAgICBuZXRzbm1wX3BlcmxsZG9wdHM9YCRteXBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgbGRvcHRzYAotICAgIGlmIHRlc3QgIngkbmV0c25tcF9wZXJsbGRvcHRzIiAhPSAieCIgOyB0aGVuCi0gICAgICBBQ19NU0dfUkVTVUxUKFskbmV0c25tcF9wZXJsbGRvcHRzXSkKLSAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICBlbWJlZF9wZXJsPSJubyIKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBsaW5rZXIgb3B0aW9ucyB0aGF0IHdlcmUgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBQZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuXSkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9hc19uZWVkZWQiID0gInh5ZXMiIDsgdGhlbgotICAgICAgIyBsaW5rICpsaWJyYXJpZXMqIHdpdGggbGlicGVybAotICAgICAgUEVSTExET1BUU19GT1JfTElCUz0iJG5ldHNubXBfcGVybGxkb3B0cyIKLSAgICAgICMgUGVybCBjY2RsZmxhZ3MgKFJQQVRIIHRvIGxpYnBlcmwsIGhvcGVmdWxseSkKLSAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFBlcmwgQ0NETEZMQUdTXSkKLSAgICAgIGNoYW5nZXF1b3RlKCwgKQotICAgICAgbmV0c25tcF9wZXJsY2NkbGZsYWdzPWAkbXlwZXJsIC1WOmNjZGxmbGFncyB8ICRteXBlcmwgLW4gLWUgJ3ByaW50ICQxICciaWYgKC9eXHMqY2NkbGZsYWdzPScoW14nXSspJzsvKTsiYAotICAgICAgY2hhbmdlcXVvdGUoWywgXSkKLSAgICAgIEFDX01TR19SRVNVTFQoWyRuZXRzbm1wX3BlcmxjY2RsZmxhZ3NdKQotICAgICAgUEVSTExET1BUU19GT1JfQVBQUz0iJG5ldHNubXBfcGVybGNjZGxmbGFncyIKLSAgICBlbHNlCi0gICAgICAjIGxpbmsgKmFwcGxpY2F0aW9ucyogYWdhaW5zdCBsaWJwZXJsCi0gICAgICBQRVJMTERPUFRTX0ZPUl9BUFBTPSIkbmV0c25tcF9wZXJsbGRvcHRzIgotICAgIGZpCi1maQotCi0jIGNoZWNrIG5lZWRlZCBmdW5jdGlvbnMKLWlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgT0xETElCUz0iJExJQlMiCi0gICAgTElCUz0iJExJQlMgJG5ldHNubXBfcGVybGxkb3B0cyIKLQotICAgICMgbmV3ZXIgcGVybCB2cyBvbGRlciBwZXJsIGNhbGwgZnVuY3Rpb25zCi0gICAgQUNfQ0hFQ0tfRlVOQ1MoZXZhbF9wdikKLQotICAgICMgc2lnaDogdGhpcyBoYXMgYSBDQVBJVEFMIFAgaW4gUGVybCwgd2hpY2ggZW5kcyB1cCBiZWluZyB0aGUgc2FtZQotICAgICMgYXV0b2NvbmYgZGVmaW5lIGFzIHRoZSBsb3dlciBjYXNlIHNvIHdlIGhhdmUgdG8gdHJlYXQgdGhlbSAqQk9USCoKLSAgICAjIHNwZWNpYWxseS4gIFdvbmRlcmZ1bC4KLSAgICBBQ19DSEVDS19GVU5DKHBlcmxfZXZhbF9wdiwgQUNfREVGSU5FKEhBVkVfUEVSTF9FVkFMX1BWX0xDKSkKLSAgICBBQ19DSEVDS19GVU5DKFBlcmxfZXZhbF9wdiwgQUNfREVGSU5FKEhBVkVfUEVSTF9FVkFMX1BWX1VDKSkKLQotICAgIExJQlM9IiRPTERMSUJTIgotCi0KLSAgICBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2IiAhPSAieHllcyIgLWEgIngkYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYiICE9ICJ4eWVzIiAtYSAieCRhY19jdl9mdW5jX2V2YWxfcHYiICE9ICJ4eWVzIiA7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgIGVtYmVkX3Blcmw9Im5vIgotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIHRoZSBldmFsX3B2LCBwZXJsX2V2YWxfcHYgb3IgUGVybF9ldmFsX3B2IGZ1bmN0aW9ucyBuZWVkZWQgZm9yIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLl0pCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIEFDX0RFRklORShORVRTTk1QX0VNQkVEREVEX1BFUkwpCi0gICAgICBPVEhFUkFHRU5UTElCT0JKUz0ic25tcF9wZXJsLm8iCi0gICAgICBPVEhFUkFHRU5UTElCTE9CSlM9InNubXBfcGVybC5sbyIKLQotICAgICAgRU1CRURQRVJMSU5TVEFMTD0iZW1iZWRwZXJsaW5zdGFsbCIKLSAgICAgIEVNQkVEUEVSTFVOSU5TVEFMTD0iZW1iZWRwZXJsdW5pbnN0YWxsIgotICAgICAgIyB5YXksIHdlIGdvdCBoZXJlIQotICAgICAgZW1iZWRfcGVybD0ieWVzIgotICAgIGZpCi1lbHNlCi0gICAgICBFTUJFRFBFUkxJTlNUQUxMPSIiCi0gICAgICBFTUJFRFBFUkxVTklOU1RBTEw9IiIKLSAgICAgIGVtYmVkX3Blcmw9Im5vIgotICAgIGZpCi1maQotQUNfU1VCU1QoRU1CRURQRVJMSU5TVEFMTCkKLUFDX1NVQlNUKEVNQkVEUEVSTFVOSU5TVEFMTCkKLUFDX1NVQlNUKFBFUkxMRE9QVFNfRk9SX0xJQlMpCi1BQ19TVUJTVChQRVJMTERPUFRTX0ZPUl9BUFBTKQotCi0jIGVtYmVkZGVkIFBlcmwgcmVzdWx0cwotQUNfTVNHX0NIRUNLSU5HKFtmb3IgcG90ZW50aWFsIGVtYmVkZGVkIFBlcmwgc3VwcG9ydF0pCi1pZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfTVNHX0NBQ0hFX0FERChFbWJlZGRlZCBQZXJsIHN1cHBvcnQ6ICAgICAgZGlzYWJsZWQpCi0gIEFDX01TR19SRVNVTFQoW2Rpc2FibGVkXSkKLWVsc2UKLSAgQUNfTVNHX0NBQ0hFX0FERChFbWJlZGRlZCBQZXJsIHN1cHBvcnQ6ICAgICAgZW5hYmxlZCkKLSAgQUNfTVNHX1JFU1VMVChbZW5hYmxlZF0pCi1maQotCi0jIGluc3RhbGwgUGVybCBtb2R1bGUgcmVzdWx0cwotUEVSTFRBUkdTPSIiCi1QRVJMSU5TVEFMTFRBUkdTPSIiCi1QRVJMVU5JTlNUQUxMVEFSR1M9IiIKLUFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlc10pCi1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHllcyIgOyB0aGVuCi0gICAgUEVSTFRBUkdTPSJwZXJsbW9kdWxlcyIKLSAgICBQRVJMSU5TVEFMTFRBUkdTPSJwZXJsaW5zdGFsbCIKLSAgICBQRVJMVU5JTlNUQUxMVEFSR1M9InBlcmx1bmluc3RhbGwiCi0gICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGJ1aWxkaW5nIC0tIGVtYmVkZGFibGUpCi0gICAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgLS0gYW5kIGVtYmVkZGFibGVdKQotICAgIGVsc2UKLSAgICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGJ1aWxkaW5nIC0tIG5vdCBlbWJlZGRhYmxlKQotICAgICAgQUNfTVNHX1JFU1VMVChbeWVzIC0tIG5vdCBlbWJlZGRhYmxlXSkKLSAgICBmaQotZWxzZQotICAgIEFDX01TR19SRVNVTFQoW25vXSkKLSAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBkaXNhYmxlZCkKLWZpCi1BQ19TVUJTVChQRVJMVEFSR1MpCi1BQ19TVUJTVChQRVJMSU5TVEFMTFRBUkdTKQotQUNfU1VCU1QoUEVSTFVOSU5TVEFMTFRBUkdTKQotQUNfU1VCU1QoUEVSTEFSR1MpCi0KLQotCi0jIHJlc2V0IGxpYnMKLUFHRU5UTElCUz0kTElCUwotTElCUz0kTk9OQUdFTlRMSUJTCi0KLQotCi0jIHB5dGhvbiBzdXBwb3J0Ci1QWVRIT05UQVJHUz0iIgotUFlUSE9OSU5TVEFMTFRBUkdTPSIiCi1QWVRIT05VTklOU1RBTExUQVJHUz0iIgotUFlUSE9OQ0xFQU5UQVJHUz0iIgotQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBzaG91bGQgaW5zdGFsbCB0aGUgcHl0aG9uIGJpbmRpbmdzXSkKLWlmIHRlc3QgIngkaW5zdGFsbF9weXRob24iID0gInh5ZXMiIDsgdGhlbgotICAgIFBZVEhPTlRBUkdTPSJweXRob25tb2R1bGVzIgotICAgIFBZVEhPTklOU1RBTExUQVJHUz0icHl0aG9uaW5zdGFsbCIKLSAgICBQWVRIT05VTklOU1RBTExUQVJHUz0icHl0aG9udW5pbnN0YWxsIgotICAgIFBZVEhPTkNMRUFOVEFSR1M9InB5dGhvbmNsZWFuIgotICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQeXRob24gbW9kdWxlczogICAgICAgIGJ1aWxkaW5nIGZvciAkUFlUSE9OUFJPRykKLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotZWxzZQotICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQeXRob24gbW9kdWxlczogICAgICAgIGRpc2FibGVkKQotICAgIEFDX01TR19SRVNVTFQoW25vXSkKLWZpCi1BQ19TVUJTVChQWVRIT05UQVJHUykKLUFDX1NVQlNUKFBZVEhPTklOU1RBTExUQVJHUykKLUFDX1NVQlNUKFBZVEhPTlVOSU5TVEFMTFRBUkdTKQotQUNfU1VCU1QoUFlUSE9OQ0xFQU5UQVJHUykKLUFDX1NVQlNUKFBZVEhPTkFSR1MpCi0KLQotCi0jIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgotQUNfSEVBREVSX1NUREMKLUFDX0hFQURFUl9ESVJFTlQKLUFDX0hFQURFUl9TWVNfV0FJVAotQUNfQ0hFQ0tfSEVBREVSUyhzdGRhcmcuaCBzdHJpbmcuaCBmY250bC5oIGxpbWl0cy5oIHN5cy9maWxlLmggc3lzL2lvY3RsLmggc3lzbG9nLmggdW5pc3RkLmggc3lzL2RtYXAuaCBtYWNoaW5lL3B0ZS5oIHh0aS5oIHN5cy9zb2NraW8uaCBzeXMvc29ja2V0Lmggc3lzL3BhcmFtLmggc3lzL3Vpby5oKQotIyBhdCBsZWFzdCBTb2xhcmlzIDkgbmVlZHMgc3lzL3NvY2tldC5oIHRvIGNvbXBpbGUgc3lzL3NvY2tldHZhci5oCi1BQ19DSEVDS19IRUFERVJTKHN5cy9zb2NrZXR2YXIuaCwsLAotQUNfSU5DTFVERVNfREVGQVVMVChbXSkKLVsKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotXSkKLSMgYXQgbGVhc3QgT3BlbkJTRCAzLjQgbmVlZHMgc3lzL3BhcmFtLmggKE1BWFBBVEhMRU4pIHRvIGNvbXBpbGUgc3lzL3N3YXAuaAotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc3dhcC5oLCwsCi1BQ19JTkNMVURFU19ERUZBVUxUKFtdKQotWwotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotXSkKLUFDX0NIRUNLX0hFQURFUlMoc3lzL3RpbWVvdXQuaCBzeXMvdW4uaCBmc3RhYi5oIHN5cy9mcy5oIG10YWIuaCB1ZnMvZnMuaCBzeXMvZml4cG9pbnQuaCBtYWNoaW5lL3BhcmFtLmggc3lzL3ZtLmggdm0vdm0uaCBzeXMvdm1tZXRlci5oIHN5cy92bXBhcmFtLmggc3lzL3ZtbWFjLmggc3lzL3Ztc3lzdG0uaCBzeXMvdGltZS5oIHN5cy90aW1lcy5oIHN5cy9zdGF0dmZzLmggc3lzL3Zmcy5oIHN5cy9tbnR0YWIuaCBzeXMvc2VsZWN0LmggbW50ZW50Lmggc3lzL21udGVudC5oIGtzdGF0LmggdXRzbmFtZS5oIHN5cy91dHNuYW1lLmggc3lzL2NkZWZzLmggZ2V0b3B0LmggbG9jYWxlLmggcHRocmVhZC5oIHN5cy9sb2FkYXZnLmggcmVnZXguaCBsaW51eC90YXNrcy5oIHB3ZC5oIGdycC5oIHV0bXB4LmgpCi0jIE5ldHdvcmsgaGVhZGVycwotQUNfQ0hFQ0tfSEVBREVSUyhhcnBhL2luZXQuaCBuZXRpbmV0L2luX3N5c3RtLmggbmV0aW5ldC9pbi5oIG5ldGluZXQvaXBfdmFyLmggbmV0aW5ldC90Y3AuaCBuZXRpbmV0L3RjcGlwLmggbmV0aW5ldC91ZHAuaCBuZXQvaWYuaCBuZXRpbmV0L2luX3Zhci5oIG5ldGluZXQvaXAuaCBuZXRpbmV0L2lwX2ljbXAuaCBuZXQvaWZfYXJwLmggbmV0L2lmX21pYi5oIG5ldC9pZl92YXIuaCBuZXRpbmV0L2lmX2V0aGVyLmggbmV0aW5ldC90Y3BfdGltZXIuaCBuZXRpbmV0L3RjcF92YXIuaCBuZXRpbmV0L3VkcF92YXIuaCBuZXRpbmV0L2ljbXBfdmFyLmggbmV0ZGIuaCBuZXQvcm91dGUuaCwsLAotW1sKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19USU1FT1VUX0gKLSNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRWQVJfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfQVJQQV9JTkVUX0gKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfSAotI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUX0lGX0gKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfSUNNUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVENQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+Ci0jZW5kaWYKLV1dKQotIyBVRlMgaGVhZGVycwotQUNfQ0hFQ0tfSEVBREVSUyh1ZnMvdWZzL2Rpbm9kZS5oIHVmcy91ZnMvcXVvdGEuaCB1ZnMvdWZzL2lub2RlLmggdWZzL2Zmcy9mcy5oLCwsCi1bWwotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfVUZTX1VGU19ESU5PREVfSAotI2luY2x1ZGUgPHVmcy91ZnMvZGlub2RlLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VGU19VRlNfUVVPVEFfSAotI2luY2x1ZGUgPHVmcy91ZnMvcXVvdGEuaD4KLSNlbmRpZgotXV0pCi0jIEZyZWVCU0QgcmVxdWlyZWQgaGVhZGVycwotQUNfQ0hFQ0tfSEVBREVSUyhtYWxsb2MuaCBuZXQvaWZfZGwuaCBzeXMvc3lzY3RsLmggc3RkbGliLmggbmV0L2lmX3R5cGVzLmggc3lzL3F1ZXVlLmggb3NyZWxkYXRlLmggbWFjaGluZS90eXBlcy5oIHN5cy91c2VyLmggc3lzL3Byb2MuaCBzeXMvbWJ1Zi5oIHN5cy9tb3VudC5oIHN5cy9ka3N0YXQuaCBzeXMvY29uZi5oLCwsCi1bWwotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotXV0pCi0jIExpbnV4Ci1BQ19DSEVDS19IRUFERVJTKG5ldGluZXQvdGNwX2ZzbS5oIHN5cy9wcm90b3N3Lmggbmxpc3QuaCBpb2N0bHMuaCBhc20vcGFnZS5oIGFzbS90eXBlcy5oIG5ldGlweC9pcHguaCBwY2kvcGNpLmgpCi0jIFNvbGFyaXMKLUFDX0NIRUNLX0hFQURFUlMoaW5ldC9taWIyLmgpCi0jIE5ldEJTRCByZXF1aXJlZCBoZWFkZXJzCi1BQ19DSEVDS19IRUFERVJTKGt2bS5oIHN5cy9wb29sLmggdXZtL3V2bV9wYXJhbS5oIHV2bS91dm1fZXh0ZXJuLmggdm0vdm1fcGFyYW0uaCB2bS92bV9leHRlcm4uaCkKLSMgQlNEaTIgaGVhZGVycwotQUNfQ0hFQ0tfSEVBREVSUyh2bS9zd2FwX3BhZ2VyLmgsLCwKLVtbCi0jaWYgSEFWRV9WTV9WTV9ICi0jaW5jbHVkZSA8dm0vdm0uaD4KLSNlbmRpZgotXV0pCi0jIGxpbnV4IGV0aHRvb2wKLSMgcmVxdWlyZXMgc3BlY2lhbCBoYWNrcyB0byBnZXQgYXJvdW5kIHZhcmlvdXMgcHJvYmxlbXMgb24gb2xkZXIgbGludXgga2VybmVscy4KLSMgbWFqb3IgdWdoLi4uLgotQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvZXRodG9vbC5oXSwsLAotW1sKLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotdHlwZWRlZiBfX3U2NCB1NjQ7ICAgICAgICAgLyogaGFjaywgc28gd2UgbWF5IGluY2x1ZGUga2VybmVsJ3MgZXRodG9vbC5oICovCi10eXBlZGVmIF9fdTMyIHUzMjsgICAgICAgICAvKiBkaXR0byAqLwotdHlwZWRlZiBfX3UxNiB1MTY7ICAgICAgICAgLyogZGl0dG8gKi8KLXR5cGVkZWYgX191OCB1ODsgICAgICAgICAgIC8qIGRpdHRvICovCi1dXSkKLSMgQlNEaTMgaGVhZGVycwotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc3RhdC5oKQotIyBCU0RpMy9JUklYIGhlYWRlcnMKLSMgYXQgbGVhc3QgSVJJWCA2LjUgbmVlZHMgX0tNRU1VU0VSIGFuZCBzeXMvdHlwZXMuaCAobXByb3RfdCkgdG8gY29tcGlsZSAKLSMgICBzeXMvdm5vZGUuaAotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvdm5vZGUuaCwsLAotWwotI2RlZmluZSBfS01FTVVTRVIgMQotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotXSkKLSMgYXQgbGVhc3QgSVJJWCA2LjUgbmVlZHMgc3lzL3NlbWEuaCAobXJsb2NrX3QpIHRvIGNvbXBpbGUgc3lzL2hhc2hpbmcuaAotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc2VtYS5oKQotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvaGFzaGluZy5oLCwsCi1BQ19JTkNMVURFU19ERUZBVUxUKFtdKQotWwotI2lmIEhBVkVfU1lTX1NFTUFfSAotI2luY2x1ZGUgPHN5cy9zZW1hLmg+Ci0jZW5kaWYKLV0pCi0jIG1vcmUgSVJJWCBoZWFkZXJzCi1BQ19DSEVDS19IRUFERVJTKHN5cy90Y3BpcHN0YXRzLmggc3lzL3N5c21wLmggc3lzL3N5c3RlbWluZm8uaCBzeXMvc3lzZ2V0LmgpCi0jIEFJWCBzeXN0ZW0gY29uZmlndXJhdGlvbgotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc3lzdGVtY2ZnLmgpCi0jIGZyb20gc211eCBzdHVmZgotQUNfQ0hFQ0tfSEVBREVSUyhlcnIuaCBzeXMvZmlsaW8uaCBzZ3R0eS5oKQotIyBBSVggbmVlZHMgdGhpcyBmb3Igc3RhdGZzIGZ1bmMKLUFDX0NIRUNLX0hFQURFUlMoc3lzL3N0YXRmcy5oKQotIyBmb3IgSG9zdFJlcyAoSFAtVVggYXQgbGVhc3QpCi1BQ19DSEVDS19IRUFERVJTKHN5cy9ka2lvLmggc3lzL2Rpc2tpby5oIHN5cy9wc3RhdC5oIGxpbnV4L2hkcmVnLmggcGtnbG9jcy5oKQotIyBmb3IgSG9zdFJlcyAoU29sYXJpcyAyLnggYXQgbGVhc3QpCi1BQ19DSEVDS19IRUFERVJTKHBrZ2luZm8uaCwKLSAgICBBQ19DSEVDS19MSUIoYWRtLCBwa2dpbmZvLCBBQ19ERUZJTkUoSEFWRV9QS0dJTkZPKQotICAgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbGFkbSIpKQotCi1jYXNlICR0YXJnZXRfb3MgaW4KLSAgICBhaXgqKSAjIEFJWCBwZXJmc3RhdCBsaWJyYXJ5LCBuZWVkZWQgZm9yIENQVS9tZW1vcnkgc3RhdGlzdGljcwotICAgICAgICBBQ19DSEVDS19IRUFERVJTKGxpYnBlcmZzdGF0LmgsCi0gICAgICAgICAgICBBQ19DSEVDS19MSUIocGVyZnN0YXQsIHBlcmZzdGF0X2NwdV90b3RhbCwgQUNfREVGSU5FKEhBVkVfUEVSRlNUQVQpCi0gICAgICAgICAgICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxwZXJmc3RhdCIpLCBBQ19NU0dfRVJST1IoWwotCi0qKiogVG8gbW9uaXRvciBDUFUvbWVtb3J5IHZhbHVlcyBpbiBBSVggeW91IG5lZWQgdG8gaW5zdGFsbAotKioqIGxpYnBlcmZzdGF0IHdoaWNoIGNhbiBiZSBmb3VuZCBpbiBib3MucGVyZgotXSkpCi0gICAgICAgIDs7Ci0gICAgaHB1eCopICMgSFAtVVggYWdlbnQgbmVlZHMgb3Blbl9taWIKLSAgICAgICAgQUNfQ0hFQ0tfTElCKG5tLCBvcGVuX21pYiwgQUNfREVGSU5FKEhBVkVfTElCTk0pCi0gICAgICAgICAgICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxubSIpCi0gICAgICAgIDs7Ci0gICAgKikKLSAgICAgICAgOzsKLWVzYWMKLSMgV0lOMzIKLSMgKG1pbmd3MzIgbXVzdCBsaW5rIHdpbnNvY2sgZXhwbGljaXRseSkKLUFDX0NIRUNLX0hFQURFUlMod2luc29jay5oLFsKLSAgICAgICAgQUdFTlRMSUJTPSIke0FHRU5UTElCU30gLWxpcGhscGFwaSIKLSAgICAgICAgY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgICAgICAgICAgICAgbWluZ3cqKQotICAgICAgICAgICAgICAgICAgICAgICAgTElCUz0iJHtMSUJTfSAtbHJlZ2V4IC1sd3MyXzMyIgotICAgICAgICAgICAgICAgICAgICAgICAgQUdFTlRMSUJTPSIke0FHRU5UTElCU30gLWxyZWdleCAtbHdzMl8zMiIKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLV0pCi1BQ19DSEVDS19IRUFERVJTKGlvLmgpCi0jIFNDTwotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc3RyZWFtLmgpCi0jIEtBTUUKLUFDX0NIRUNLX0hFQURFUlMobmV0aW5ldC9pcDYuaCBuZXRpbmV0Ni9pbjZfdmFyLmggbmV0aW5ldDYvaW42X3BjYi5oIG5ldGluZXQ2L2lwNl92YXIuaCBuZXRpbmV0Ni90Y3A2LmggbmV0aW5ldDYvdGNwNl9mc20uaCBuZXRpbmV0Ni9uZDYuaCBuZXRpbmV0Ni90Y3A2X3RpbWVyLmggbmV0aW5ldDYvdGNwNl92YXIuaCwsLAotW1sKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUDZfSAotI2luY2x1ZGUgPG5ldGluZXQvaXA2Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVF9JRl9ICi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVF9ST1VURV9ICi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0jZW5kaWYKLV1dKQotIyBEWU5BTUlDIE1PRFVMRSBTVVBQT1JUCi1BQ19DSEVDS19IRUFERVJTKGRsZmNuLmgpCi0jIHRhYmxlX2FycmF5IGhlbHBlciBzdXBwb3J0Ci1BQ19DSEVDS19IRUFERVJTKHNlYXJjaC5oKQotCi0jIFJQTSBzdWJkaXJlY3RvcnkgcGF0aCAoc2lnaCkKLWlmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iICYmIFwKLSAgICAgICAgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIGhvc3QvaHJfc3dpbnN0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgQUNfQ0hFQ0tfSEVBREVSUyhycG0vcnBtdHMuaCwgW10sIFtdLCBbWyNpbmNsdWRlIDxycG0vcnBtbGliLmg+XV0pCi1maQotCi0jIE9wZW5CU0QgMi42IG5lZWRzIG5ldGluZXQvaW4uaCBiZWZvcmUgbmV0aW5ldC9pbl9wY2IuaAotQUNfTVNHX0NIRUNLSU5HKFtbZm9yIG5ldGluZXQvaW5fcGNiLmhdXSkKLUFDX0NBQ0hFX1ZBTChjdl9oYXZlX25ldGluZXRfaW5fcGNiX2gsCi1bIEFDX1RSWV9DUFAoIFsKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbl9wY2IuaD4KLV0sIGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaD15ZXMsIGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaD1ubyldKQotQUNfTVNHX1JFU1VMVCgkY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oKQotaWYgdGVzdCAkY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oID0geWVzOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX05FVElORVRfSU5fUENCX0gpCi1maQotCi0jIE5ldEJTRCBuZWVkcyBtYWNoaW5lL3R5cGVzLmggYmVmb3JlIHN5cy9kaXNrbGFiZWwuaAotQUNfTVNHX0NIRUNLSU5HKFtbZm9yIHN5cy9kaXNrbGFiZWwuaF1dKQotQUNfQ0FDSEVfVkFMKGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oLAotWyBBQ19UUllfQ1BQKCBbCi0jaW5jbHVkZSA8bWFjaGluZS90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9kaXNrbGFiZWwuaD4KLV0sIGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oPXllcywgY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2g9bm8pXSkKLUFDX01TR19SRVNVTFQoJGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oKQotaWYgdGVzdCAkY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2ggPSB5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfU1lTX0RJU0tMQUJFTF9IKQotZmkKLQotIyBPcGVuU1NMCi1BQ19DSEVDS19IRUFERVJTKG9wZW5zc2wvaG1hYy5oIG9wZW5zc2wvZXZwLmggb3BlbnNzbC9hZXMuaCBvcGVuc3NsL2Rlcy5oIG9wZW5zc2wvZGguaCkKLUFDX0NIRUNLX0hFQURFUlMoc2VjdXJpdHkvY3J5cHRva2kuaCkKLQotIyBQcmludGluZwotQUNfUEFUSF9QUk9HKFtMUFNUQVRfUEFUSF0sbHBzdGF0KQotaWYgdGVzdCB4JExQU1RBVF9QQVRIICE9IHg7IHRoZW4KLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoTFBTVEFUX1BBVEgsIiRMUFNUQVRfUEFUSCIpCi0gICAgQUNfREVGSU5FKEhBVkVfTFBTVEFUKQotZmkKLUFDX0NIRUNLX0ZVTkNTKGNnZXRuZXh0KQotaWYgdGVzdCAtciAvZXRjL3ByaW50Y2FwOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfUFJJTlRDQVApCi1maQotCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhdXRoZW50aWNhdGlvbiBzdXBwb3J0XSkKLXVzZW9wZW5zc2w9bm8KLXVzZXBrY3M9bm8KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfc2VjdXJpdHlfY3J5cHRva2lfaCIgIT0gInh5ZXMiOyB0aGVuCi0gICAgaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgQUNfTVNHX0VSUk9SKEFza2VkIHRvIHVzZSBQS0NTMTEgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4pCi0gICAgZmkKLWVsc2UKLSAgICBpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgdXNlcGtjcz15ZXMKLSAgICBmaQotZmkKLQotaWYgdGVzdCAieCRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9obWFjX2giICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9obWFjX2giICE9ICJ4eWVzIjsgdGhlbgotICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBBQ19NU0dfRVJST1IoQXNrZWQgdG8gdXNlIE9wZW5TU0wgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4pCi0gICAgZmkKLWVsc2UKLSAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgdXNlb3BlbnNzbD15ZXMKLSAgICBlbGlmIHRlc3QgIngkdHJ5b3BlbnNzbCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAieCR1c2Vwa2NzIiAhPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgIHVzZW9wZW5zc2w9eWVzCi0gICAgICAgIGZpCi0gICAgZmkKLWZpCi0KLWlmIHRlc3QgIngkdXNlb3BlbnNzbCIgIT0gInhubyIgOyB0aGVuCi0gICAgYXV0aG1vZGVzPSJNRDUgU0hBMSIKLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIiA7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9hZXNfaCIgPSAieHllcyIgOyB0aGVuCi0gICAgICAgICAgICBlbmNybW9kZXM9IkRFUyBBRVMiCi0JZWxzZQotCSAgICBlbmNybW9kZXM9IkRFUyIKLQlmaQotICAgIGVsc2UKLSAgICAgICAgZW5jcm1vZGVzPSJbZGlzYWJsZWRdIgotICAgIGZpCi0gICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX09QRU5TU0wpCi0gICAgTE5FVFNOTVBMSUJTPSIkTE5FVFNOTVBMSUJTICRMSUJDUllQVE8iCi0gICAgQUNfTVNHX1JFU1VMVChPcGVuU1NMIFN1cHBvcnQpCi1lbGlmIHRlc3QgIngkdXNlcGtjcyIgIT0gInhubyIgOyB0aGVuCi0gICAgYXV0aG1vZGVzPSJNRDUgU0hBMSIKLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIiA7IHRoZW4KLSAgICAgICAgZW5jcm1vZGVzPSJERVMiCi0gICAgZWxzZQotICAgICAgICBlbmNybW9kZXM9IltkaXNhYmxlZF0iCi0gICAgZmkKLSAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfUEtDUzExKQotICAgIExORVRTTk1QTElCUz0iJExORVRTTk1QTElCUyAkTElCUEtDUzExIgotICAgIEFDX01TR19SRVNVTFQoUEtDUzExIFN1cHBvcnQpCi1lbGlmIHRlc3QgIngkZW5hYmxlX21kNSIgIT0gInhubyI7IHRoZW4KLSAgICBhdXRobW9kZXM9Ik1ENSIKLSAgICBlbmNybW9kZXM9IiIKLSAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KQotICAgIEFDX01TR19SRVNVTFQoSW50ZXJuYWwgTUQ1IFN1cHBvcnQpCi1maQotaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCi0gICAgYXV0aG1vZGVzPWBlY2hvICRhdXRobW9kZXMgfCBzZWQgJ3MvTUQ1ICovLzsnYAotZmkKLUFDX1NVQlNUKExORVRTTk1QTElCUykKLUFDX1NVQlNUKExBR0VOVExJQlMpCi0KLUFDX01TR19DQUNIRV9BREQoQXV0aGVudGljYXRpb24gc3VwcG9ydDogICAgICRhdXRobW9kZXMpCi1BQ19NU0dfQ0FDSEVfQUREKEVuY3J5cHRpb24gc3VwcG9ydDogICAgICAgICAkZW5jcm1vZGVzKQotCi1pZiB0ZXN0ICJ4JGFsbF93YXJuaW5ncyIgIT0gIngiOyB0aGVuCi0gICAgQUNfTVNHX0NBQ0hFX0FERChXQVJOSU5HOiAkYWxsX3dhcm5pbmdzKQotZmkKLQotIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgotQUNfVFlQRV9PRkZfVAotQUNfVFlQRV9QSURfVAotQUNfSEVBREVSX1RJTUUKLQotIyB0aGlzIHNob3VsZCB1c2UgQUNfQ0hFQ0tfVFlQRSwgYnV0IGl0J3MgYnJva2VuIGF0IGxlYXN0IGluIDIuMTMtMTQKLSMgc28gd2UgZG8gaXQgYnkgaGFuZC4KLUFDX01TR19DSEVDS0lORyhbZm9yIHNvY2tsZW5fdF0pCi1BQ19DQUNIRV9WQUwoYWNfY3ZfdHlwZV8kMSwKLVtBQ19FR1JFUF9DUFAoW3NvY2tsZW5fdEA8OkBeYS16QS1aXzAtOUA6PkBdLAotWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBTVERDX0hFQURFUlMKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmXSwgW2FjX2N2X3R5cGVfc29ja2xlbl90PXllc10sIFthY19jdl90eXBlX3NvY2tsZW5fdD1ub10pXSkKLQotQUNfTVNHX1JFU1VMVChbJGFjX2N2X3R5cGVfc29ja2xlbl90XSkKLWlmIHRlc3QgJGFjX2N2X3R5cGVfc29ja2xlbl90ID0geWVzOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX1NPQ0tMRU5fVCkKLWZpCi0KLSMgQUlYIGtlZXBzIGluX2FkZHJfdCBpbiAvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpbl9hZGRyX3RdKQotQUNfQ0FDSEVfVkFMKGFjX2N2X3R5cGVfJDEsCi1bQUNfRUdSRVBfQ1BQKFtpbl9hZGRyX3RAPDpAXmEtekEtWl8wLTlAOj5AXSwKLVsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgU1REQ19IRUFERVJTCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZl0sIFthY19jdl90eXBlX2luX2FkZHJfdD15ZXNdLCBbYWNfY3ZfdHlwZV9pbl9hZGRyX3Q9bm9dKV0pCi0KLUFDX01TR19SRVNVTFQoWyRhY19jdl90eXBlX2luX2FkZHJfdF0pCi1pZiB0ZXN0ICRhY19jdl90eXBlX2luX2FkZHJfdCA9IHllczsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9JTl9BRERSX1QpCi1maQotCi0jIE9sZGVyIHZlcnNpb25zIG9mIE1pbkdXIGRvIG5vdCBkZWZpbmUgc3NpemVfdCBpbiBzeXMvdHlwZXMKLUFDX01TR19DSEVDS0lORyhbZm9yIHNzaXplX3RdKQotQUNfQ0FDSEVfVkFMKGFjX2N2X3R5cGVfJDEsCi1bQUNfRUdSRVBfQ1BQKFtzc2l6ZV90QDw6QF5hLXpBLVpfMC05QDo+QF0sCi1bI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIFNURENfSEVBREVSUwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2VuZGlmXSwgW2FjX2N2X3R5cGVfc3NpemVfdD15ZXNdLCBbYWNfY3ZfdHlwZV9zc2l6ZV90PW5vXSldKQotCi1BQ19NU0dfUkVTVUxUKFskYWNfY3ZfdHlwZV9zc2l6ZV90XSkKLWlmIHRlc3QgJGFjX2N2X3R5cGVfc3NpemVfdCA9IHllczsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9TU0laRV9ULCAxLCBbRGVmaW5lIGlmIHR5cGUgc3NpemVfdCBpcyBhdmFpbGFibGVdKQotZmkKLQotIyBDaGVjayBwcyBhcmdzCi1BQ19DQUNIRV9DSEVDSyhbZm9yIGNvcnJlY3QgZmxhZ3MgdG8gcHNdLCBhY19jdl9wc19mbGFncywKLVtpZiB0ZXN0ICJgKCRQU1BST0cgLWUgMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWUiCi1lbGlmIHRlc3QgImAoJFBTUFJPRyAtZWwgMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWVsIgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgYWN4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9ImFjeCIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIC1hY3ggMj4mMSkgfCAkRUdSRVAgJyAocHMpICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLWFjeCIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIC1vIHBpZCx0dCxzdGF0ZSx0aW1lLHVjb21tIDI+JjEpIHwgJEVHUkVQICcgcHMgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItbyBwaWQsdHQsc3RhdGUsdGltZSx1Y29tbSIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIGF4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9ImF4IgotZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgotZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbiAKLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgotZWxzZQotICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIGRldGVybWluZSB2YWxpZCBwcyBmbGFncy4uLiAgZGVmYXVsdGluZy4uLl0pCi0gIGFjX2N2X3BzX2ZsYWdzPSItYWN4IgotZmkKLV0pCi0KLVBTQ01EPSIkUFNQUk9HICRhY19jdl9wc19mbGFncyIKLUFDX1NVQlNUKFBTQ01EKQotQUNfREVGSU5FX1VOUVVPVEVEKFBTQ01ELCAiJFBTUFJPRyAkYWNfY3ZfcHNfZmxhZ3MiKQotCi0jIENoZWNrcyBmb3IgYnl0ZSBvcmRlcgotaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgeCR3aXRoX2VuZGlhbm5lc3MgPSB4YmlnOyB0aGVuCi0gICAgQUNfREVGSU5FKFdPUkRTX0JJR0VORElBTikKLSAgZWxpZiB0ZXN0IC16ICR3aXRoX2VuZGlhbm5lc3M7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoW1lvdSBhcmUgY3Jvc3MtY29tcGlsaW5nLCBidXQgeW91IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgdGFyZ2V0J3MgZW5kaWFubmVzc10pCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgJHdpdGhfZW5kaWFubmVzczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbRW5kaWFubmVzcyBoYXMgYmVlbiBzcGVjaWZpZWQsIGJ1dCB5b3UgYXJlIG5vdCBjcm9zcy1jb21waWxpbmcuXSkKLSAgZmkKLSAgQUNfQ19CSUdFTkRJQU4KLWZpCi0KLSMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KLUFDX0ZVTkNfQUxMT0NBCi1BQ19QUk9HX0dDQ19UUkFESVRJT05BTAotQUNfRlVOQ19NRU1DTVAKLUFDX1RZUEVfU0lHTkFMCi1BQ19GVU5DX0dFVE1OVEVOVAotQUNfQ0hFQ0tfRlVOQ1Moc2V0bW50ZW50IGhhc21udG9wdCBnZXRob3N0bmFtZSB1bmFtZSBnZXR0aW1lb2ZkYXkgc2VsZWN0IHNvY2tldCkKLUFDX0NIRUNLX0ZVTkNTKHN0cmxjYXQgc3RybGNweSBzdHJ0b2wgc3RydG91bCkKLUFDX0NIRUNLX0ZVTkNTKHN0cmNociBzdHJ0b2tfciBzdHJkdXAgbWVtY3B5IG1lbW1vdmUgaW5kZXggYmNvcHkgc3RyY2FzZXN0ciByZWdjb21wKQotQUNfQ0hFQ0tfRlVOQ1Moc2lnbmFsIHNldHNpZCBzaWdzZXQgc2lnYmxvY2sgc2lnaG9sZCBzdHJlcnJvciBzZXRlbnYgdnNucHJpbnRmIHNucHJpbnRmKQotQUNfQ0hFQ0tfRlVOQ1Moc2lnYWN0aW9uKQotQUNfQ0hFQ0tfRlVOQ1MocmFuZG9tIGxyYW5kNDggcmFuZCkKLUFDX0NIRUNLX0ZVTkNTKGV4ZWN2IHN5c3RlbSBmb3JrIGdldHBpZCBzdHJuY2FzZWNtcCBzaWdhbHJtKQotQUNfQ0hFQ0tfRlVOQ1MobHNlZWs2NCBwcmVhZDY0KQotaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyIgJiYgXAotICAgICAgICBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgaG9zdC9ocl9zd2luc3QgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBPTERMSUJTPSRMSUJTCi0gIExJQlM9JExNSUJMSUJTCi0gIEFDX0NIRUNLX0ZVTkNTKHJwbUdldFBhdGgpCi0gIExJQlM9JE9MRExJQlMKLWZpCi0KLUFDX0NIRUNLX0ZVTkNTKGdldGxvYWRhdmcpCi1BQ19DSEVDS19GVU5DUyhnZXRhZGRyaW5mbyBnZXRpcG5vZGVieW5hbWUgZ2FpX3N0cmVycm9yKQotIyBCU0RpMiBmdW5jdGlvbnMgZGlmZmVyCi1BQ19DSEVDS19GVU5DUyhzdGF0dmZzIHN0YXRmcykKLUFDX0NIRUNLX0ZVTkNTKGdldGR0YWJsZXNpemUpCi0jIGZyZWVic2QyIGNoZWNrcwotQUNfQ0hFQ0tfRlVOQ1MoZ2V0ZnNzdGF0KQotQUNfQ0hFQ0tfRlVOQ1ModXNsZWVwKQotQUNfQ0hFQ0tfRlVOQ1Moc2V0bG9jYWxlKQotQUNfQ0hFQ0tfRlVOQ1ModGNnZXRhdHRyKQotQUNfQ0hFQ0tfRlVOQ1MoaWZfbmFtZWluZGV4IGlmX2ZyZWVuYW1laW5kZXgpCi1BQ19DSEVDS19GVU5DUyhraW5mb19nZXRfY3B1cykKLSMgc29sYXJpcyBjaGVja3MKLUFDX0NIRUNLX0ZVTkNTKGdldHBhZ2VzaXplKQotQUNfQ0hFQ0tfRlVOQ1MobWtzdGVtcCkKLUFDX0NIRUNLX0ZVTkNTKGdldHB3bmFtIGdldGdybmFtIHNldGdpZCBzZXR1aWQgc2V0Z3JvdXBzKQotIyBIaWdoIHJlc29sdXRpb24gYWxhcm0gc3VwcG9ydAotQUNfQ0hFQ0tfRlVOQ1Moc2V0aXRpbWVyKQotIyBmdW5jdGlvbnMgdG8gc3VwcG9ydCB0aGUgY2xvY2suCi1BQ19DSEVDS19GVU5DUyhta3RpbWUgc3RpbWUgdGltZXMgc3lzY29uZikKLSMgbWlzc2luZyBmcm9tIGhwLXV4Ci1BQ19DSEVDS19GVU5DUyhpZl9uYW1ldG9pbmRleCkKLSMgbWlzc2luZyBmcm9tIE1pbkdXCi1BQ19DSEVDS19GVU5DUyhjaG93biBsb2NhbHRpbWVfcikKLQotQUNfTVNHX0NIRUNLSU5HKFtbZm9yIFNJT0NHSUZBRERSIGluIHN5cy9pb2N0bC5oXV0pCi1BQ19DQUNIRV9WQUwoY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSLAotWyBBQ19FR1JFUF9DUFAoeHh4eWVzeHh4LAotWwotI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNlbmRpZgotI2lmZGVmIFNJT0NHSUZBRERSCi14eHh5ZXN4eHgKLSNlbmRpZgotXSwgY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSPXllcywgY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSPW5vKV0pCi1BQ19NU0dfUkVTVUxUKCRjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIpCi1pZiB0ZXN0ICRjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIgPSB5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKFNZU19JT0NUTF9IX0hBU19TSU9DR0lGQUREUikKLWZpCi0KLSMgdWx0cml4Ci1BQ19NU0dfQ0hFQ0tJTkcoW1tmb3IgdHdvLWFyZ3VtZW50IHN0YXRmcyB3aXRoIHN0cnVjdCBmc19kYXRhIChVbHRyaXgpXV0pCi1BQ19DQUNIRV9WQUwoZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSwKLVtBQ19UUllfUlVOKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICi0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19GU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL2ZzX3R5cGVzLmg+Ci0jZW5kaWYKLW1haW4gKCkKLXsKLXN0cnVjdCBmc19kYXRhIGZzZDsKLS8qIFVsdHJpeCdzIHN0YXRmcyByZXR1cm5zIDEgZm9yIHN1Y2Nlc3MsCi0gICAwIGZvciBub3QgbW91bnRlZCwgLTEgZm9yIGZhaWx1cmUuICAqLwotZXhpdCAoc3RhdGZzICgiLiIsICZmc2QpICE9IDEpOwotfV0sCi1mdV9jdl9zeXNfc3RhdF9mc19kYXRhPXllcywKLWZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9bm8sCi1mdV9jdl9zeXNfc3RhdF9mc19kYXRhPW5vKV0pCi1BQ19NU0dfUkVTVUxUKCRmdV9jdl9zeXNfc3RhdF9mc19kYXRhKQotaWYgdGVzdCAkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSA9IHllczsgdGhlbgotICBBQ19ERUZJTkUoU1RBVF9TVEFURlNfRlNfREFUQSkKLWZpCi0KLSMgY2hlY2sgaWYgY29tcGlsZXIgcHJlLXByb2Nlc3NvciBkZWZpbmVzIF9fRlVOQ1RJT05fXwotQUNfQ0FDSEVfQ0hFQ0soaWYgX19GVU5DVElPTl9fIGlzIGRlZmluZWQsYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCwKLVsKLUFDX1RSWV9DT01QSUxFKCxbCi0gICAgY2hhciAqY3AgPSBfX0ZVTkNUSU9OX187Ci1dLCBhY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEPXllcywgYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRD1ubyldKQotCi1pZiB0ZXN0ICJ4JGFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQiID0gInh5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEKQotZmkKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIG9uIFNDTyBVbml4d2FyZSA3LjEuNCAoU0NPIGNvbXBpbGVyKSwgInN0YXRpYyBpbmxpbmUiIGZ1bmN0aW9ucwotIyBhcmUgbm90IHN1cHBvcnRlZCwgc28gdGhpcyBkaXNhYmxlcyB0aGUgd2hvbGUgaW5saW5lIHRoaW5nIGlmIGl0Ci0jIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4gU2hvdWxkIGhhdmUgbm8gZWZmZWN0IG9uIG90aGVyIHBsYXRmb3Jtcy4KLUFDX0NBQ0hFX0NIRUNLKFtbd2hldGhlciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuIChVbml4d2FyZSldXSwKLSAgICBbbmV0c25tcF9jdl9jX2Jyb2tlbl9pbmxpbmVdLAotQUNfQ09NUElMRV9JRkVMU0UoW1sKLXN0YXRpYyBpbmxpbmUgaW50IG5lc3RlZF9pbmxpbmVfZnVuY3Rpb24odm9pZCkgewotICByZXR1cm4gMDsKLX0KLWlubGluZSBpbnQgbWFpbl9pbmxpbmVfZnVuY3Rpb24oIHZvaWQgKSB7Ci0gIHJldHVybiBuZXN0ZWRfaW5saW5lX2Z1bmN0aW9uKCk7Ci19Ci1dXSwgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPW5vLCBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9eWVzKSkKLQotIyBCdXQsIHNhZGx5LCB0aGUgdXNhZ2Ugb2YgaW5saW5lIGluIE5FVF9TTk1QIGRpc2FncmVlcyBzZXJpb3VzbHkgd2l0aCBhdCBsZWFzdAotIyBzb2xhcmlzMiwgc28gZGlzYWJsZSBpdCBmb3Igbm93LgotY2FzZSAiJHRhcmdldF9vcyIgaW4KLSAgICBzb2xhcmlzKikKLSAgICAgICAgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPXllcwotICAgICAgICA7OwotICAgICopCi0gICAgICAgIDs7Ci1lc2FjCi0KLWlmIHRlc3QgIiRuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmUiID0geWVzIDsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9CUk9LRU5fSU5MSU5FLCAxLAotICAgICAgICBbRGVmaW5lIGlmIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSB1bnN1cHBvcnRlZF0pCi1maQotCi0jIG9wZW5ic2Qgc2VlbXMgdG8gaGF2ZSBkcm9wcGVkIG1fY2x1c3RlcnMgYW5kIG1fY2xmcmVlIGZyb20gbWJzdGF0Ci1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZiBIQVZFX1NZU19NQlVGX0gKLSNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgotI2VuZGlmCi1dLCBtYnN0YXQsIG1fY2x1c3RlcnMsIG5vKQotCi0jIG9wZW5ic2Qgc2VlbXMgdG8gaGF2ZSBkcm9wcGVkIG1fbWJ1ZnMgZnJvbSBtYnN0YXQgdG9vCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZiBIQVZFX1NZU19NQlVGX0gKLSNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgotI2VuZGlmCi1dLCBtYnN0YXQsIG1fbWJ1ZnMsIG5vKQotCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KLV0sIHNpZ2FjdGlvbiwgc2Ffc2lnYWN0aW9uLCBubykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGluY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1lTX1RJTUVfSAotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8dGltZS5oPgotIyBlbmRpZgotI2VuZGlmCi1dLCB0bSwgdG1fZ210b2ZmLCBubykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi1dLCBpZm5ldCwgaWZfbXR1KQotCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9pZm5ldF9oYXNfaWZfbXR1IiA9ICJ4bm8iOyB0aGVuCi1BQ19DQUNIRV9DSEVDSyhpZiBfS0VSTkVMIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dSwgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMLAotWwotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfaWZuZXRfaGFzX2lmX210dSIgPSAieHllcyI7IHRoZW4KLSAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPW5vCi1lbHNlCi1BQ19UUllfQ09NUElMRShbCi0jZGVmaW5lIF9LRVJORUwgMQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLV0sWwotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9tdHUgPSAwOwotXSwgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPXllcywgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPW5vKQotZmkKLV0pCi0KLWlmIHRlc3QgIngkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA9ICJ4eWVzIjsgdGhlbgotICBBQ19ERUZJTkUoSUZORVRfTkVFRFNfS0VSTkVMKQotZmkKLWZpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotXSwgc29ja2FkZHIsIHNhX2xlbiwgbm8pCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotXSwgc29ja2FkZHIsIHNhX3VuaW9uLnNhX2dlbmVyaWMuc2FfZmFtaWx5Miwgbm8pCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi1dLCBzb2NrYWRkcl9zdG9yYWdlLCBzc19mYW1pbHksIG5vKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotXSwgc29ja2FkZHJfc3RvcmFnZSwgX19zc19mYW1pbHksIG5vKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLCBydGVudHJ5LCBydF9kc3QsIG5vKQotCi0jIGNoZWNraW5nIGZvciA0LjMgdnMgNC40IHJ0ZW50cnkuCi1BQ19DQUNIRV9DSEVDSyh0eXBlIG9mIHJ0ZW50cnkgc3RydWN0dXJlLGFjX2N2X1JURU5UUllfVFlQRSwKLVsKLQotIyA0LjQgY29tcGF0Ci1BQ19UUllfQ09NUElMRShbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSxbCi0KLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVAotI2RlZmluZSBydF9kc3QgcnRfbm9kZXMtPnJuX2tleQotI2VuZGlmCi0KLSAgc3RydWN0IHJ0ZW50cnkgcnQ7IAotICBydC5ydF9ub2Rlc1swXS5ybl9mbGFncyA9IDE7Ci0gIHJ0LnJ0X2RzdDsKLSAgXSwgYWNfY3ZfUlRFTlRSWV9UWVBFPSJCU0QtNC40IikKLQotIyA0LjMgY29tcGF0Ci1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieCI7IHRoZW4KLUFDX1RSWV9DT01QSUxFKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLFsKLXN0cnVjdCBydGVudHJ5IHJ0OyAKLXJ0LnJ0X2hhc2g7Ci1dLCBhY19jdl9SVEVOVFJZX1RZUEU9IkJTRC00LjMiKQotZmkKLQotIyBlbHNlIGFjay4KLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4IjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKFVua25vd24pCi0gIGFjX2N2X1JURU5UUllfVFlQRT0idW5rbm93biIKLWZpCi0KLV0pCi0KLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4QlNELTQuNCI7IHRoZW4KLSAgQUNfREVGSU5FKFJURU5UUllfNF80KQotZmkKLQotIyBjaGVja2luZyBmb3IgYWxwaGEncyBvcnRlbnRyeSB2cyBydGVudHJ5Ci1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieHVua25vd24iOyB0aGVuCi1BQ19DQUNIRV9DSEVDSyhmb3Igc3RydWN0IHJ0ZW50cnksIGFjX2N2X3N0cnVjdF9ydGVudHJ5LAotW0FDX0VHUkVQX0NQUChvcnRlbnRyeSwgWyNkZWZpbmUgS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLCAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9b3J0ZW50cnksICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT1ydGVudHJ5ICkKLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID0gInhydGVudHJ5IiA7IHRoZW4KLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9InJ0ZW50cnkiCi1lbHNlCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJvcnRlbnRyeSIKLWZpCi1dKQotZWxzZQotICBSVEVOVFJZX1RZUEU9InJ0ZW50cnkiCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJydGVudHJ5IgotZmkKLQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgIT0gIngiOyB0aGVuCi0gIEFDX0RFRklORV9VTlFVT1RFRChSVEVOVFJZLHN0cnVjdCAke2FjX2N2X3N0cnVjdF9ydGVudHJ5fSkKLWVsc2UKLSAgQUNfREVGSU5FKFJURU5UUlksc3RydWN0IHJ0ZW50cnkpCi1maQotCi0jIGNoZWNrIGZvciA0LjMncyBydGVudHJ5LT5ydF9uZXh0Ci1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieEJTRC00LjMiOyB0aGVuCi1BQ19DQUNIRV9DSEVDSyhmb3Igc3RydWN0IHJ0ZW50cnkgaGFzIGEgcnRfbmV4dCBub2RlLCAKLQlhY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0LAotWwotQUNfVFJZX0NPTVBJTEUoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sWwotc3RydWN0IHJ0ZW50cnkgcnQ7IAotcnQucnRfbmV4dDsKLV0sIGFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQ9eWVzLCAgYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dD1ubyApCi1dKQotCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQiID0gInh5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShSVEVOVFJZX1JUX05FWFQpCi1maQotCi1maQotCi0jIENoZWNrIHNpbjZfc2NvcGVfaWQgbWVtYmVyIHNwZWNpZmllZCBpbiBSRkMyNTUzIGFkZGl0aW9uYWxseQotQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkXSwsLFsKLUFDX0lOQ0xVREVTX0RFRkFVTFQoKQotWyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi1dXSkKLQotIyBDaGVjayBzdHJ1Y3QgcnRlbnRyeSBmb3IgdmFyaW91cyB0aGluZ3MuCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLCBydGVudHJ5LCBydF91bml0KQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLCBydGVudHJ5LCBydF9yZWZjbnQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sIHJ0ZW50cnksIHJ0X2hhc2gpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sIHJ0ZW50cnksIHJ0X3VzZSkKLQotIyBDaGVjayB0Y3BzdGF0IGZvciB0Y3BzdGF0LnRjcF9yY3ZtZW1kcm9wCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FT1VUX0gKLSNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KLSNpZmRlZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX05FVElORVRfVENQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+Ci0jZW5kaWYKLV0sIHRjcHN0YXQsIHRjcF9yY3ZtZW1kcm9wKQotCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotXSwgaWZhZGRyLCBpZmFfbmV4dCkKLQotIyBDaGVjayBpZm5ldCBlbnRyaWVzIHVzaW5nIG1hY3JvIGRlZmluZWQgaW4gYWNsb2NhbC5tNC4KLSMKLSMgWFhYICBCcm9rZW4gb24gRnJlZUJTRCB3aGVyZSB0aGVzZSBhcmUgI2RlZmluZSdkIGluIDxuZXQvaWYuaD4KLSMKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9iYXVkcmF0ZSkKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9iYXVkcmF0ZS5pZnNfdmFsdWUpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfc3BlZWQpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfdHlwZSkKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9pbWNhc3RzKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2lxZHJvcHMpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfbm9wcm90bykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9vbWNhc3RzKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX3huYW1lLG5vKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2xhc3RjaGFuZ2UudHZfc2VjKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2xhc3RjaGFuZ2UudHZfbnNlYykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9vYnl0ZXMpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfaWJ5dGVzKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2FkZHJsaXN0KQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2FkZHJoZWFkLnRxaF9maXJzdCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KLSNlbmRpZgotXSx1ZHBzdGF0LHVkcHNfZGlzY2FyZCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KLSNlbmRpZgotXSx1ZHBzdGF0LHVkcHNfbm9wb3J0KQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2VuZGlmCi1dLHVkcHN0YXQsdWRwc19ub3BvcnRiY2FzdCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KLSNlbmRpZgotXSx1ZHBzdGF0LHVkcHNfZnVsbHNvY2spCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSUZfRVRIRVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KLSNlbmRpZgotXSxhcnBoZCxhdF9uZXh0KQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19DT05GX0gKLSNpbmNsdWRlIDxzeXMvY29uZi5oPgotI2VuZGlmCi1dLHN3ZGV2dCxzd19uYmxrc2VuYWJsZWQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0jZW5kaWYKLV0sc3RhdHZmcyxtbnRfZGlyKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUVkZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotI2VuZGlmCi1dLHN0YXR2ZnMsZl9mcnNpemUpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0jZW5kaWYKLV0sc3RhdGZzLGZfZnJzaXplKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUVkZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotI2VuZGlmCi1dLHN0YXR2ZnMsZl9maWxlcykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAotI2luY2x1ZGUgPHN5cy9tb3VudC5oPgotI2VuZGlmCi1dLHN0YXRmcyxmX2ZpbGVzKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICi0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jZW5kaWYKLV0sc3RhdGZzLGZfZmZyZWUpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKLSNpbmNsdWRlIDxzeXMvbW91bnQuaD4KLSNlbmRpZgotXSxzdGF0ZnMsZl9mYXZhaWwpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmIEhBVkVfTkxJU1RfSAotI2luY2x1ZGUgPG5saXN0Lmg+Ci0jZW5kaWYKLV0sbmxpc3Qsbl92YWx1ZSkKLQotIyBzdHJ1Y3Qgbmxpc3Q2NCAoSVJJWCkKLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkxJU1RfSAotI2luY2x1ZGUgPG5saXN0Lmg+Ci0jZW5kaWYKLV0sbmxpc3Q2NCwgbl92YWx1ZSkKLQotIyBzdHJ1Y3QgZXRodG9vbF9jbWQKLUFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBldGh0b29sX2NtZC5zcGVlZF9oaV0sLCxbCi0gICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCi0gICAgWwotI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICi0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2VuZGlmCi0gICAgXV0pCi0KLSMgY2hlY2sgc3RydWN0IGlwc3RhdCBmb3IgdmFyaW91cyB0aGluZ3MKLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfY2FudGZvcndhcmQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfY2FudGZyYWcpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfZGVsaXZlcmVkKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX2ZyYWdkcm9wcGVkKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX2ZyYWd0aW1lb3V0KQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX2ZyYWdtZW50ZWQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfbG9jYWxvdXQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfbm9wcm90bykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19ub3JvdXRlKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX29kcm9wcGVkKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX29mcmFnbWVudHMpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfcmVhc3NlbWJsZWQpCi0KLSMgY2hlY2sgZm9yIHRoZSBkZXNfa3Nfc3RydWN0LndlYWtfa2V5IGF0dHJpYnV0ZSwgd2hpY2ggaW5kaWNhdGVzIHRoZSAKLSMgb2xkZXIgb3BlbnNzbCB2ZXJzaW9uIGlzIGJlaW5nIHVzZWQuCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2Rlc19oIiA9ICJ4eWVzIiA7IHRoZW4KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci1dLCBkZXNfa3Nfc3RydWN0LCB3ZWFrX2tleSkKLWZpCi0KLSMgYXR0ZW1wdCB0byBmaWd1cmUgb3V0IGlmIHN5c2N0bCBpcyB1c2FibGUKLQotaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0geWVzOyB0aGVuCi0gIEFDX01TR19XQVJOKFtDYW4ndCBjaGVjayBzeXNjdGwsIG1hbnVhbGx5IGRlZmluZSBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIGlmIHBsYXRmb3JtIHN1cHBvcnQgYXZhaWxhYmxlXSkKLWVsc2UKLSAgQUNfQ0FDSEVfQ0hFQ0soaWYgc3lzY3RsIGNhbiByZWFkIGtlcm5lbCBpbmZvcm1hdGlvbixhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMLAotICBbQUNfVFJZX1JVTihbCi0jaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGluY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1lTX1RJTUVfSAotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8dGltZS5oPgotIyBlbmRpZgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfU1lTX1NZU0NUTF9ICi0jIGluY2x1ZGUgPHN5cy9zeXNjdGwuaD4KLSNlbmRpZgotCi1tYWluKCkgewotICBpbnQgICAgICAgICAgICAgICAgIG1pYlsyXTsKLSAgc2l6ZV90ICAgICAgICAgICAgICBsZW47Ci0gIHN0cnVjdCB0aW1ldmFsIGJvb3R0aW1lOwotICAKLSAgbWliWzBdID0gQ1RMX0tFUk47Ci0gIG1pYlsxXSA9IEtFUk5fQk9PVFRJTUU7Ci0gIAotICBsZW4gPSBzaXplb2YoYm9vdHRpbWUpOwotICBzeXNjdGwobWliLCAyLCAmYm9vdHRpbWUsICZsZW4sIE5VTEwsIE5VTEwpOwotICBpZiAoYm9vdHRpbWUudHZfc2VjICE9IDApCi0gICAgZXhpdCgwKTsKLSAgZWxzZQotICAgIGV4aXQoMSk7Ci19Ci0gIF0sIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9eWVzLCBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPW5vLCBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPW5vKV0pCi1maQotCi1pZiB0ZXN0ICJ4JGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwiID0gInh5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKQotZmkKLQotIwotIyBJbiBGcmVlQlNEIDQueCwgdGhlIFRDUCB0aW1lciBjb25zdGFudHMgYXJlbid0LiAgVGhleSBhcmUgZGVmaW5lZAotIyBpbiB0ZXJtcyBvZiAnaHonLCB0aGUga2VybmVsIGNsb2NrIHRpY2suICBJbiB0aGlzIGNhc2UsCi0jIHdlIG5lZWQgdG8gaGF2ZSBhIGxvY2FsIHZhcmlhYmxlICdoeicgaW4gc2NvcGUgYW5kIHNldCB0byBhIHVzZWZ1bAotIyB2YWx1ZSB3aGVuZXZlciB3ZSB1c2Ugb25lIG9mIHRoZXNlIGNvbnN0YW50cy4KLSMKLUFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgVENQIHRpbWVycyBkZXBlbmQgb24gJ2h6JyxhY19jdl9UQ1BUVl9ORUVEU19IWiwKLVtBQ19FR1JFUF9DUFAoaHosCi1bI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+Ci1UQ1BUVl9TUlRUREZMVAotXSwgYWNfY3ZfVENQVFZfTkVFRFNfSFo9eWVzLCBhY19jdl9UQ1BUVl9ORUVEU19IWj1ubyldKQotCi1pZiB0ZXN0ICJ4JGFjX2N2X1RDUFRWX05FRURTX0haIiA9ICJ4eWVzIjsgdGhlbgotICBBQ19ERUZJTkUoVENQVFZfTkVFRFNfSFopCi1maQotCi0jCi0jIGRlZmluZSB0aGUgYWdlbnQgbGlicmFyaWVzIHZhcmlhYmxlcwotIwotQUNfU1VCU1QoTE1JQkxJQlMpCi1BQ19TVUJTVChBR0VOVExJQlMpCi1BQ19TVUJTVChPVEhFUkFHRU5UTElCT0JKUykKLUFDX1NVQlNUKE9USEVSQUdFTlRMSUJMT0JKUykKLQotIwotIyBQcm9tcHQgZm9yIHZhcmlvdXMgYml0cyBvZiB1c2VyIGluZm9ybWF0aW9uCi0jCi0KLWlmIHRlc3QgIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID0gIngiOyB0aGVuCi1BQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHRvIHByb21wdCBmb3IgdmFsdWVzLCBhY19jdl9oYXZlX3dhcm5lZCwKLVsKLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWNhdCA8PCBFT0YKLQotCSAqKioqKioqKioqKioqKiBDb25maWd1cmF0aW9uIFNlY3Rpb24gKioqKioqKioqKioqKioKLQotCVlvdSBhcmUgYWJvdXQgdG8gYmUgcHJvbXB0ZWQgd2l0aCBhIHNlcmllcyBvZiBxdWVzdGlvbnMuICBBbnN3ZXIKLXRoZW0gY2FyZWZ1bGx5LCBhcyB0aGV5IGRldGVybWluZSBob3cgdGhlIFNOTVAgYWdlbnQgYW5kIHJlbGF0ZWQKLWFwcGxpY2F0aW9ucyBhcmUgdG8gZnVuY3Rpb24uCi0KLQlBZnRlciB0aGUgY29uZmlndXJlIHNjcmlwdCBmaW5pc2hlcywgeW91IGNhbiBicm93c2UgdGhlIG5ld2x5Ci1jcmVhdGVkIG5ldC1zbm1wLWNvbmZpZy5oIGZpbGUgZm9yIGZ1cnRoZXIgLSBsZXNzIGltcG9ydGFudCAtIHBhcmFtZXRlcnMgdG8KLW1vZGlmeS4gIEJlIGNhcmVmdWwgaWYgeW91IHJlLXJ1biBjb25maWd1cmUgdGhvdWdoLCBzaW5jZSBuZXQtc25tcC1jb25maWcuaCAKLXdpbGwgYmUgb3ZlcndyaXR0ZW4uCi0KLS1QcmVzcyByZXR1cm4gdG8gY29udGludWUtCi1FT0YKLQotcmVhZCB0bXBpbnB1dAotYWNfY3ZfaGF2ZV93YXJuZWQ9InllcyIKLWVsc2UKLSAgYWNfY3ZfaGF2ZV93YXJuZWQ9Im5vIgotZmkKLV0pCi1lbHNlCi0gIGFjX2N2X2hhdmVfd2FybmVkPSJ5ZXMiCi1maQotCi1NRT1gJFdIT0FNSWAKLWlmIHRlc3QgLWYgL2V0Yy9yZXNvbHYuY29uZjsgdGhlbgotICBMT0M9YGNhdCAvZXRjL3Jlc29sdi5jb25mIHwgZ3JlcCAnXmRvbWFpbicgfCB0YWlsIC0xIHwgYXdrICd7cHJpbnQgJE5GfSdgCi1lbHNlCi0gIExPQz0iQG5vLndoZXJlIgotZmkKLQotQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTixbCi0KLSoqKiBEZWZhdWx0IFNOTVAgVmVyc2lvbjoKLQotCVN0YXJ0aW5nIHdpdGggTmV0LVNOTVAgNS4wLCB5b3UgY2FuIGNob29zZSB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mCi10aGUgU05NUCBwcm90b2NvbCB0byB1c2Ugd2hlbiBubyB2ZXJzaW9uIGlzIGdpdmVuIGV4cGxpY2l0bHkgb24gdGhlCi1jb21tYW5kIGxpbmUsIG9yIHZpYSBhbiAnc25tcC5jb25mJyBmaWxlLiAgSW4gdGhlIHBhc3QgdGhpcyB3YXMgc2V0IHRvCi1TTk1QdjEsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRvIHN3aXRjaCB0byBTTk1QdjMgaWYgZGVzaXJlZC4gIFNOTVB2Mwotd2lsbCBwcm92aWRlIGEgbW9yZSBzZWN1cmUgbWFuYWdlbWVudCBlbnZpcm9ubWVudCAoYW5kIHRodXMgeW91J3JlCi1lbmNvdXJhZ2VkIHRvIHN3aXRjaCB0byBTTk1QdjMpLCBidXQgbWF5IGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMgdGhhdAotcmVseSBvbiB0aGUgb2xkIGJlaGF2aW91ci4gIChUaG91Z2ggc3VjaCBzY3JpcHRzIHdpbGwgcHJvYmFibHkgbmVlZCB0bwotYmUgY2hhbmdlZCB0byB1c2UgdGhlICctYycgY29tbXVuaXR5IGZsYWcgYW55d2F5LCBhcyB0aGUgU05NUHYxCi1jb21tYW5kIGxpbmUgdXNhZ2UgaGFzIGNoYW5nZWQgYXMgd2VsbC4pLgotICAgQXQgdGhpcyBwcm9tcHQgeW91IGNhbiBzZWxlY3QgXCIxXCIsIFwiMlwiIChmb3IgU05NUHYyYyksIG9yIFwiM1wiIGFzCi10aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgY29tbWFuZCB0b29scyAoc25tcGdldCwgLi4uKSB0byB1c2UuICBUaGlzCi1jYW4gYWx3YXlzIGJlIG92ZXJyaWRkZW4gYXQgcnVudGltZSB1c2luZyB0aGUgLXYgZmxhZyB0byB0aGUgdG9vbHMsIG9yCi1ieSB1c2luZyB0aGUgXCJkZWZWZXJzaW9uXCIgdG9rZW4gaW4geW91ciBzbm1wLmNvbmYgZmlsZS4KLSAgIFByb3ZpZGluZyB0aGUgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uPVwieFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlXSwzLHVucXVvdGVkKQotCi0jIHdlIHRlc3RlZCB0aGlzIGFib3ZlIGJlZm9yZSB0aGUgcHJvbXB0LCBidXQgdGhlIHByb21wdCBtYXkgZ2l2ZSBhIG5ldyB2YWx1ZS4KLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA9ICIyYyI7IHRoZW4KLSAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0iMiIKLWZpCi1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjEiIC1hICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjIiIC1hICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjMiOyB0aGVuCi0gIEFDX01TR19FUlJPUihbSWxsZWdhbCB2ZXJzaW9uIG51bWJlci4gIE9ubHkgMSwgMiAoZm9yIFNOTVB2MmMpIGFuZCAzIGFyZSBzdXBwb3J0ZWQuXSkKLWZpCi0KLUFDX1BST01QVF9VU0VSKE5FVFNOTVBfU1lTX0NPTlRBQ1QsWwotCi0qKiogU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb246Ci0KLQlEZXNjcmliZXMgd2hvIHNob3VsZCBiZSBjb250YWN0ZWQgYWJvdXQgdGhlIGhvc3QgdGhlIGFnZW50IGlzCi1ydW5uaW5nIG9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgVGhpcwotY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlIFwic3lzY29udGFjdFwiIHN5bnRheCBpbiB0aGUgYWdlbnQncwotY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWNvbnRhY3Q9XCJjb250YWN0XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1TeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbl0sJE1FQCRMT0MscXVvdGVkKQotCi1BQ19QUk9NUFRfVVNFUihORVRTTk1QX1NZU19MT0MsWwotCi0qKiogU3lzdGVtIExvY2F0aW9uOgotCi0JRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtLiAgVGhpcyBpbmZvcm1hdGlvbiBpcwotYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIHRoaXMgY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlCi1cInN5c2xvY2F0aW9uXCIgc3ludGF4IGluIHRoZSBhZ2VudCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1sb2NhdGlvbj1cImxvY2F0aW9uXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1TeXN0ZW0gTG9jYXRpb25dLFVua25vd24scXVvdGVkKQotCi1pZiB0ZXN0IC1kIC92YXIvbG9nOyB0aGVuCi0gIGRlZmF1bHRsb2c9Ii92YXIvbG9nL3NubXBkLmxvZyIKLWVsc2UKLSAgZGVmYXVsdGxvZz0iL3Vzci9hZG0vc25tcGQubG9nIgotZmkKLSAgCi1BQ19QUk9NUFRfVVNFUihORVRTTk1QX0xPR0ZJTEUsWwotCi0qKiogTG9nZmlsZSBsb2NhdGlvbjoKLQotCUVudGVyIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgc25tcGQgYWdlbnQgdG8gZHVtcAotaW5mb3JtYXRpb24gJiBlcnJvcnMgdG8uICBJZiBub3QgZGVmaW5lZCAoZW50ZXIgdGhlIGtleXdvcmQgXCJub25lXCIKLWF0IHRoZSBwcm9tcHQgYmVsb3cpIHRoZSBhZ2VudCB3aWxsIHVzZSBzdGRvdXQgYW5kIHN0ZGVyciBpbnN0ZWFkLgotKE5vdGU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXItcmlkZGVuIHVzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLikKLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtbG9nZmlsZT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLUxvY2F0aW9uIHRvIHdyaXRlIGxvZ2ZpbGVdLCRkZWZhdWx0bG9nLHF1b3RlZCkKLQotaWYgdGVzdCAtZCAvdmFyOyB0aGVuCi0gIGRlZmF1bHRzdG9yZT0iL3Zhci9uZXQtc25tcCIKLSAgdWNkZGVmYXVsdHN0b3JlPSIvdmFyL3VjZC1zbm1wIgotZWxzZQotICBkZWZhdWx0c3RvcmU9Ii9ldGMvbmV0LXNubXAiCi0gIHVjZGRlZmF1bHRzdG9yZT0iL2V0Yy91Y2Qtc25tcCIKLWZpCi0gIAotQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSxbCi0KLSoqKiBzbm1wZCBwZXJzaXN0ZW50IHN0b3JhZ2UgbG9jYXRpb246Ci0KLQlFbnRlciBhIGRpcmVjdG9yeSBmb3IgdGhlIFNOTVAgbGlicmFyeSB0byBzdG9yZSBwZXJzaXN0ZW50Ci1kYXRhIGluIHRoZSBmb3JtIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBkZWZhdWx0IGxvY2F0aW9uIGlzCi1kaWZmZXJlbnQgdGhhbiB0aGUgb2xkIGRlZmF1bHQgbG9jYXRpb24gKHdoaWNoIHdhcyBmb3IgdWNkLXNubXApLiAgSWYKLXlvdSBzdGF5IHdpdGggdGhlIG5ldyBwYXRoLCBJJ2xsIGFzayB5b3UgaW4gYSBzZWNvbmQgaWYgeW91IHdpc2ggdG8KLWNvcHkgeW91ciBmaWxlcyBvdmVyIHRvIHRoZSBuZXcgbG9jYXRpb24gKG9uY2Ugb25seSkuICBJZiB5b3UgcGljawotc29tZSBvdGhlciBwYXRoIHRoYW4gdGhlIGRlZmF1bHQsIHlvdSdsbCBoYXZlIHRvIGNvcHkgdGhlbSB5b3Vyc2VsZi4KLVRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBwaWNraW5nIHRoZSBvbGQgcGF0aCAoJHVjZGRlZmF1bHRzdG9yZSkgaWYKLXlvdSdkIHJhdGhlci4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9XCJwYXRoXCIgcGFyYW1ldGVyIHRvCi0uL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1Mb2NhdGlvbiB0byB3cml0ZSBwZXJzaXN0ZW50IGluZm9ybWF0aW9uXSwkZGVmYXVsdHN0b3JlLHF1b3RlZCkKLQotUEVSU0lTVEVOVF9ESVJFQ1RPUlk9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkKLUFDX1NVQlNUKFBFUlNJU1RFTlRfRElSRUNUT1JZKQotVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlk9JHVjZGRlZmF1bHRzdG9yZQotQUNfU1VCU1QoVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlkpCi0KLWlmIHRlc3QgJFBFUlNJU1RFTlRfRElSRUNUT1JZID0gIiRkZWZhdWx0c3RvcmUiIC1hIC1kICIkdWNkZGVmYXVsdHN0b3JlIiAtYSAhIC1kICIkZGVmYXVsdHN0b3JlIiA7IHRoZW4KLUFDX0NBQ0hFX0NIRUNLKElmIHdlIHNob3VsZCBjb3B5IHRoZSBvbGQgcGVyc2lzdGVudCBkaXJlY3RvcnksIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUywKLVsKLUFDX1BST01QVF9VU0VSX05PX0RFRklORShhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMsWwotCi0qKiogQ29weWluZyBvbGQgdWNkLXNubXAgcGVyc2lzdGVudCBmaWxlcyB0byBuZXQtc25tcCBwZXJzaXN0ZW50IGRpcmVjdG9yeToKLQotCVdvdWxkIHlvdSBsaWtlIHRvIGNvcHkgdGhlIG9sZGVyIHVjZC1zbm1wIHBlcnNpc3RlbnQgZmlsZXMKLWludG8geW91ciBuZXcgbmV0LXNubXAgcGVyc2lzdGVudCBmaWxlIHBhdGg/ICBUaGlzIHdpbGwgZnVuY3Rpb25hbGx5Ci1zYXZlIGFsbCB5b3VyIHVjZC1zbm1wIGRhdGEgYW5kIGxldCBpdCBiZSB1c2VkIHdpdGhpbiB0aGUgbmV0LXNubXAKLXRvb2xzLiAgVGhpcyB3aWxsIG9ubHkgYmUgZG9uZSBvbmNlIHdoZW4geW91IHJ1biBtYWtlIGluc3RhbGwuICBJZiB5b3UKLXdpc2ggdG8gZG8gdGhpcywgZW50ZXIgInllcyIgYXQgdGhlIHByb21wdC4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtY29weS1wZXJzaXN0ZW50LWZpbGVzPVwibm9cIiAob3IgXCJ5ZXNcIikKLXBhcmFtZXRlcnMgdG8gLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotQ29weSB1Y2Qtc25tcCBkYXRhIGludG8gdGhlIG5ldC1zbm1wIGRhdGEgZGlyZWN0b3J5XSwieWVzIikKLV0pCi1lbHNlCi1hY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9Im5vIgotZmkKLUNPUFlfUEVSU0lTVEVOVF9GSUxFUz0iJGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyIKLUFDX1NVQlNUKENPUFlfUEVSU0lTVEVOVF9GSUxFUykKLQotQUNfU1VCU1QoRExMSUJTKQotCi1BQ19DT05GSUdfRklMRVMoW01ha2VmaWxlOk1ha2VmaWxlLnRvcDpNYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCi1BQ19DT05GSUdfRklMRVMoW3NubXBsaWIvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnNubXBsaWIvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6c25tcGxpYi9NYWtlZmlsZS5kZXBlbmRdKQotQUNfQ09ORklHX0ZJTEVTKFthcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kXSkKLUFDX0NPTkZJR19GSUxFUyhbYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZF0pCi1BQ19DT05GSUdfRklMRVMoW2FnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmRdKQotQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9oZWxwZXJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kXSkKLUFDX0NPTkZJR19GSUxFUyhbYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZF0pCi1BQ19DT05GSUdfRklMRVMoW2xvY2FsL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpsb2NhbC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCi1BQ19DT05GSUdfRklMRVMoW3Rlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW5dKQotQUNfQ09ORklHX0ZJTEVTKFttYW4vTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1hbi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCi1BQ19DT05GSUdfRklMRVMoW21pYnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1pYnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQotQUNfQ09ORklHX0ZJTEVTKFtuZXQtc25tcC1jb25maWc6bmV0LXNubXAtY29uZmlnLmluXSwKLQkJW2NobW9kICt4IG5ldC1zbm1wLWNvbmZpZ10pCi0KLUFDX0NPTkZJR19DT01NQU5EUyhbZGVmYXVsdF0sIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaCkKLQotIwotIyBwcm90ZWN0IFBBQ0tBR0VfKiB2YXJpYWJsZXMKLSMKLUFIX1ZFUkJBVElNKFtQQUNLQUdFX0JVR1JFUE9SVF0sWy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI2lmbmRlZiBQQUNLQUdFX0JVR1JFUE9SVAotI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCi0jZW5kaWZdKQotQUhfVkVSQkFUSU0oW1BBQ0tBR0VfTkFNRV0sWy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNpZm5kZWYgUEFDS0FHRV9OQU1FCi0jdW5kZWYgUEFDS0FHRV9OQU1FCi0jZW5kaWZdKQotQUhfVkVSQkFUSU0oW1BBQ0tBR0VfU1RSSU5HXSxbLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI2lmbmRlZiBQQUNLQUdFX1NUUklORwotI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCi0jZW5kaWZdKQotQUhfVkVSQkFUSU0oW1BBQ0tBR0VfVEFSTkFNRV0sWy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNpZm5kZWYgUEFDS0FHRV9UQVJOQU1FCi0jdW5kZWYgUEFDS0FHRV9UQVJOQU1FCi0jZW5kaWZdKQotQUhfVkVSQkFUSU0oW1BBQ0tBR0VfVkVSU0lPTl0sWy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jaWZuZGVmIFBBQ0tBR0VfVkVSU0lPTgotI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgotI2VuZGlmXSkKLQotQUNfT1VUUFVUCi0KLUFDX01TR19DQUNIRV9ESVNQTEFZKCkKLSMgTG9jYWwgVmFyaWFibGVzOgotIyBtb2RlOiBBdXRvY29uZgotIyBjb21tZW50LXN0YXJ0OiAiIyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvZGlzdC9NYWtlZmlsZSBiL2Rpc3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhZDhkNQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMzMgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAkU291cmNlJAorIyAkUmV2aXNpb24kCisjICREYXRlJAorIyAkQXV0aG9yJAorIyAkTmFtZSQKKyMgJFN0YXRlJAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgTWFrZWZpbGUgZm9yIGdlbmVyYXRpbmcgcnBtIHBhY2thZ2UgZmlsZXMgKC5ycG0pIGZvciBuZXQtc25tcC4KKworIyBHTlUgJ21ha2UnLXNwZWNpZmljIGZlYXR1cmVzIGFyZSB1c2VkIGluIHRoaXMgbWFrZWZpbGUuCisjIE90aGVyIG1ha2VzIG1heSBvciBtYXkgbm90IHdvcmsgd2l0aCBpdC4KKyMgU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9tYW51YWwvbWFrZS9pbmRleC5odG1sIGZvciBkZXRhaWxzLgorCitTSEVMTCA9IC9iaW4vc2gKKworIyBEZWZpbmUgdGhlIFJQTSBwYWNrYWdlIG5hbWUKK05BTUUgPSBuZXQtc25tcAorCisjIERlZmluZSB0aGUgZGVmYXVsdCBSUE0gcmVsZWFzZSBudW1iZXIuIFNldCBieSBWZXJzaW9uLU11bmdlLnBsCitWRVJTSU9OID0gNS43LjMKKworVkVSU0lPTl9UQUc9YGVjaG8gRXh0LSQoVkVSU0lPTikgfCBzZWQgJ3MvXC4vLS9nOydgCisKK1dJVEhfUEVSTD0xCitFTUJFRF9QRVJMPTEKKworIyBEZWZpbmUgdGhlIFJQTSBhcmNoaXRlY3R1cmUsIGkuZS4sICdwcGMnLCAnaTM4NicsIGV0Yy4KK0FSQ0ggPSBgdW5hbWUgLWlgCisKKyMgRGlyZWN0b3J5IHN0cnVjdHVyZSBleHBlY3RlZCBieSAncnBtJyBwcm9ncmFtCitSUE1fQkFTRSA6PSAkKFBXRCkvcnBtCisKK1JQTV9UUkVFIDo9IFwKKyAgICAkKFJQTV9CQVNFKS9CVUlMRCBcCisgICAgJChSUE1fQkFTRSkvUlBNUyBcCisgICAgJChSUE1fQkFTRSkvU09VUkNFUyBcCisgICAgJChSUE1fQkFTRSkvU1BFQ1MgXAorICAgICQoUlBNX0JBU0UpL1NSUE1TCisKKy5QSE9OWToJYWxsIGNsZWFuIHJwbV9maWxlcyBiaW5hcnlfcnBtIHNvdXJjZV9ycG0gYWxsX3JwbQorCithbGw6CWFsbF9ycG1fZmlsZXMKKworIyBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcy4KK2NsZWFuOgorCXJtIC1yZiAkKFJQTV9CQVNFKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1hY3JvcyBhbmQgcnVsZXMgZm9yIHVwZGF0aW5nIG5ldC1zbm1wLXgueC54LnRhci5nei4KKyMgJ3JwbScgZXhwZWN0cyBhIGNvbXByZXNzZWQgYXJjaGl2ZSAoLnRhci5neikgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyMgdG8gZXhpc3QgKGluIHRoZSBycG0vU09VUkNFUyBkaXJlY3RvcnkpIGJlZm9yZSBpdCBpcyBydW4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDVlNST09UID0gOnBzZXJ2ZXI6YW5vbnltb3VzQG5ldC1zbm1wLmN2cy5zb3VyY2Vmb3JnZS5uZXQ6L2N2c3Jvb3QvbmV0LXNubXAKKworUEtHX1ZFUiA6PSAkKE5BTUUpLSQoVkVSU0lPTikKKworR1pJUF9UQVIgOj0gJChSUE1fQkFTRSkvU09VUkNFUy8kKFBLR19WRVIpLnRhci5negorCitnemlwX3RhcjoJJChHWklQX1RBUikKKworJChHWklQX1RBUik6CisJQGVjaG8gIkNyZWF0aW5nIGEgY29tcHJlc3NlZCBhcmNoaXZlIG9mIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGZpbGVzLi4uIgorCShjZCAkKFJQTV9CQVNFKS9TT1VSQ0VTOyBcCisJY3ZzIC1kJChDVlNST09UKSBsb2dpbjsgXAorCWN2cyAtejMgLWQkKENWU1JPT1QpIGV4cG9ydCAtciQoVkVSU0lPTl9UQUcpICQoTkFNRSk7IFwKKwltdiAkKE5BTUUpICQoUEtHX1ZFUik7IFwKKwl0YXIgY2YgJChQS0dfVkVSKS50YXIgJChQS0dfVkVSKTsgXAorCWd6aXAgJChQS0dfVkVSKS50YXIpCisJQGVjaG8gIkEgY29tcHJlc3NlZCBhcmNoaXZlIG9mIHRoZSBwYWNrYWdlJ3Mgc291cmNlLWZpbGUgdHJlZSBoYXMgYmVlbiBjcmVhdGVkLiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWNyb3MgYW5kIHJ1bGVzIGZvciB1cGRhdGluZyB0aGUgYmluYXJ5IGFuZCBzb3VyY2UgUlBNIHBhY2thZ2UgZmlsZXMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZGVmaW5lICclX3RvcGRpcicgdG8gYWxsb3cgYW4gUlBNIHBhY2thZ2UgZmlsZSB0byBiZSBidWlsdCBhbnl3aGVyZSwKKyMgaW5zdGVhZCBvZiBpbiB0aGUgL3Vzci9zcmMvcmVkaGF0IGRpcmVjdG9yeSB0cmVlLgorIworIyBEb24ndCB3YW50ICdycG1idWlsZCcgdG8gc3RyaXAgeW91ciBleGVjdXRhYmxlIHByb2dyYW1zPworIyBUaGVuIGFkZCB0aGlzIGxpbmU6CisjICAgLS1kZWZpbmU9J19vc19pbnN0YWxsX3Bvc3QgL3Vzci9saWIvcnBtL2JycC1jb21wcmVzcycgXAorIyB0byB0aGUgUlBNX09QVFMgbWFjcm8gZGVmaW5pdGlvbi4gIFRoaXMgd2lsbCBlbGltaW5hdGUgdGhlIAorIyBzdHJpcHBpbmcgb2YgYmluYXJpZXMsIGJ1dCBzdGlsbCByZXRhaW4gdGhlIGNvbXByZXNzaW9uIG9mCisjIG1hbnVhbCBwYWdlcy4KKyMKK2lmZXEgKCQoV0lUSF9QRVJMKSwwKQorUEVSTE9QVFMgPSAtLXdpdGhvdXQgcGVybF9tb2R1bGVzCitlbmRpZgoraWZlcSAoJChFTUJFRF9QRVJMKSwwKQorUEVSTE9QVFMgKz0gLS13aXRob3V0IGVtYmVkZGVkX3BlcmwKK2VuZGlmCisKK1JQTV9PUFRTIDo9IFwKKyAgICAtLWRlZmluZT0nX3RvcGRpciAkKFJQTV9CQVNFKScgXAorICAgIC0tZGVmaW5lPSdfaW5jbHVkZWRpciAvdXNyL2luY2x1ZGUvbmV0LXNubXAnIFwKKyAgICAtLXRhcmdldCAkKEFSQ0gpICQoUEVSTE9QVFMpCisKK1NQRUNfRklMRSAgOj0gJChOQU1FKS5zcGVjCitSUE1fU1BFQyAgIDo9ICQoUlBNX0JBU0UpL1NQRUNTLyQoU1BFQ19GSUxFKQorCitCSU5BUllfUlBNIDo9ICQoUlBNX0JBU0UpL1JQTVMvJChBUkNIKS8kKFBLR19WRVIpLSQoUkVMRUFTRSkuJChBUkNIKS5ycG0KK1NPVVJDRV9SUE0gOj0gJChSUE1fQkFTRSkvU1JQTVMvJChQS0dfVkVSKS0kKFJFTEVBU0UpLnNyYy5ycG0KKworcnBtX2ZpbGVzOgkkKEdaSVBfVEFSKSBhbGxfcnBtX2ZpbGVzCitiaW5hcnlfcnBtOgkkKEJJTkFSWV9SUE0pCitzb3VyY2VfcnBtOgkkKFNPVVJDRV9SUE0pCitycG1fdHJlZTogJChSUE1fVFJFRSkKKworYWxsX3JwbV9maWxlczoJJChSUE1fVFJFRSkgJChSUE1fU1BFQykKKwkoY2QgJChSUE1fQkFTRSkvU1BFQ1M7IFwKKwlycG1idWlsZCAtYmEgJChSUE1fT1BUUykgJChTUEVDX0ZJTEUpKQorCiskKEJJTkFSWV9SUE0pOgkkKFJQTV9UUkVFKSAkKFJQTV9TUEVDKQorCShjZCAkKFJQTV9CQVNFKS9TUEVDUzsgXAorCXJwbWJ1aWxkIC1iYiAkKFJQTV9PUFRTKSAkKFNQRUNfRklMRSkpCisKKyQoU09VUkNFX1JQTSk6CSQoUlBNX1RSRUUpICQoUlBNX1NQRUMpCisJKGNkICQoUlBNX0JBU0UpL1NQRUNTOyBcCisJcnBtYnVpbGQgLWJzICQoUlBNX09QVFMpICQoU1BFQ19GSUxFKSkKKworJChSUE1fU1BFQyk6CSQoUlBNX0JBU0UpL1NQRUNTICQoU1BFQ19GSUxFKQorCWNwICQoU1BFQ19GSUxFKSAkQAorCiskKFJQTV9UUkVFKToKKwlta2RpciAtcCAkQAorCiskKFNQRUNfRklMRSk6CisJQGVjaG8gIkVSUk9SOiBtaXNzaW5nICckKFNQRUNfRklMRSknIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIKKwlAZXhpdCAxCisKK0ZPUkNFOgorCisjID09PSBFbmQgb2YgTWFrZWZpbGUgPT09ICMKZGlmZiAtLWdpdCBhL2Rpc3QvUkVBRE1FLmJ1aWxkLXNjcmlwdHMgYi9kaXN0L1JFQURNRS5idWlsZC1zY3JpcHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDZkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L1JFQURNRS5idWlsZC1zY3JpcHRzCkBAIC0wLDAgKzEsMTA4IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogUkVBRE1FLmJ1aWxkLXNjcmlwdHMKKyoKKyogQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CisqCisqICRJZCQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK1RoZSBhdXRvbWF0ZWQgYnVpbGQgc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBydW4gY29uZmlndXJlLCAnbWFrZSBhbGwnLAorJ21ha2UgdGVzdCcgYW5kICdtYWtlIGluc3RhbGwnLiBMb2cgZmlsZXMgYXJlIGtlcHQgZm9yIGVhY2ggc3RlcCwgYW5kIHRoZQorc2NyaXB0cyBzaG91bGQgYWJvcnQgd2hlbiBlcnJvcnMgb2NjdXIuCisKK1RoZSB1c2FnZSBvZiBuc2ItcGFja2FnZSBpczoKKworIFVzYWdlOiBuc2ItcGFja2FnZSBbLWNdIFstZF0gWy1wXSBbLXMgU1JDRF0gWy1iIEJVSUxERF0gWy1pIElOU1RBTExEXSBWRVJTSU9OCisgIAorICAgIFZFUlNJT04gICAgOiByZWxlYXNlIG51bWJlciAoZWcgNS4yLjIpCisgICAgLXMgU1JDRElSICA6IHNvdXJlIGRpcmVjdG9yeSBbJEhPTUUvc3JjL25ldC1zbm1wLVZFUlNJT05dCisgICAgLWIgQlVJTEREICA6IGJ1aWxkIGRpcmVjdG9yeSBbJEhPTUUvYnVpbGQvXQorICAgICAgICAgICAgICAgICBOT1RFLXBsYXRmb3JtIHdpbGwgYmUgYXBwZW5kZWQgdG8gYnVpbGQgZGlyZWN0b3J5CisgICAgLWkgSU5TVEFMTEQ6IGluc3RhbGwgZGlyZWN0b3J5IFskSE9NRS9idWlsZC9cJFBMQVRGT1JNL3Vzci9sb2NhbF0KKyAgIAorICAgIC1jIDogc2tpcCBjb25maWd1cmUKKyAgICAtZCA6IGRpcnR5IGJ1aWxkIChkb24ndCBtYWtlIGRpc3RjbGVhbikKKyAgICAtbSA6IHNraXAgJ21ha2UgYWxsJworICAgIC1wIDogZG9uJ3QgcGF1c2UgYXQgcHJvbXB0cyBpbiBiZXR3ZWVuIHN0YWdlcworICAgIC10IDogc2tpcCAnbWFrZSB0ZXN0JworCisKK1RoZSBkZWZhdWx0cyBhc3N1bWUgeW91IGhhdmUgYSAnc3JjJywgJ2J1aWxkJyBhbmQgJ2JpbmFyaWVzJyBkaXJlY3RvcnkgaW4KK3lvdXIgaG9tZSBkaXJlY3RvcnkuCisKKworCitSZWNvbW1lbmRlZCBQcm9jZWR1cmUKKz09PT09PT09PT09PT09PT09PT09PQorCisxKSBMb2cgaW50byBTb3VyY2Vmb3JnZSBDb21waWxlIEZhcm0gU2VydmVyCisKKzIpIFVwZGF0ZSBzb3VyY2UgKHRoaXMgd2lsbCBsaWtlbHkgYmUgYXV0b21hdGVkIGluIHRoZSBmdXR1cmUpCisKKyAgIEZvciBleGFtcGxlLCBmb3IgcmVsZWFzZSA1LjAuMzoKKworICAgJCBjZCB+L3NyYworICAgJCBDVlNfUlNIPXNzaCBjdnMgLWQgJFVTRVJAY3ZzLm5ldC1zbm1wLm9yZzovY3Zzcm9vdC9uZXQtc25tcCBcCisgICAgICAgICAtcSBjbyAtciBFeHQtNS0wLTMgLWQgfi9zcmMvbmV0LXNubXAtRXh0LTUtMC0zIG5ldC1zbm1wCisKKzMpIFJ1biB0aGUgcGFja2FnZSBzY3JpcHQuIAorCisgICAkICRIT01FL3NyYy9uZXQtc25tcC1jdnMvZGlzdC9uc2ItcGFja2FnZSAtciBcCisgICAgICAgIC1zICRIT01FL3NyYy9uZXQtc25tcC01LjAuNSA1LjAuNQorCis0KSBDcmVhdGUgdGFyYmFsbCAoYXNzdW1pbmcgbm8gZXJyb3JzOyBzZWUgbmV4dCBzZWN0aW9uIGlmIHRoZXJlIGFyZSBlcnJvcnMpCisKKyAgICQgY2Qgfi9idWlsZC9gbnNiLXBsYXRmb3JtYAorICAgJCB0YXIgY3ZmIG5ldC1zbm1wLTUuMC4zLWBuc2ItcGxhdGZvcm1gLnRhciB1c3IKKyAgICQgZ3ppcCAtLWJlc3QgKi50YXIKKworNSkgQ29weSB0YXJiYWxsIHRvIFNvdXJjZWZvcmdlIHNoZWxsIHNldmVyCisKKyAgICQgc2NwICouZ3ogbmV0LXNubXAuc291cmNlZm9yZ2UubmV0On4vYmluYXJpZXMvCisKKzYpIExvZyBvdXQgb2YgY29tcGlsZSBmYXJtIHNlcnZlciwgbG9nIGludG8gc2hlbGwgc2VydmVyCisKKzcpIFVwbG9hZCB0byBTb3VyY2Vmb3JnZQorCisgICAkIGZ0cCB1cGxvYWQuc291cmNlZm9yZ2UubmV0CisgICAgID5iaW4KKyAgICAgPnB1dCAqLmd6CisKKzgpIFVwZGF0ZSBiaW5hcmllcyB2aWEgU291cmNlZm9yZ2UgYWRtaW4gcGFnZQorCisKKworQnVpbGRzIHdpdGggZXJyb3JzCis9PT09PT09PT09PT09PT09PT0KKworU2hvdWxkIHlvdSBlbmNvdW50ZXIgYSBidWlsZCBlcnJvciwgeW91IHdpbGwgbW9zdCBsaWtlbHkgd2FudCB0byBza2lwIHRoZQorJ21ha2UgZGlzdGNsZWFuJyBhbmQgY29uZmlndXJlIHN0ZXAgKGFzc3VtaW5nIHRoZSBwcm9ibGVtIHdhc24ndCB3aXRoCitjb25maWd1cmUhKS4gVG8gZG8gdGhpcywgc3BlY2lmeSB0aGUgJ2RpcnR5JyBhbmQgJ3NraXAgY29uZmlndXJlJyBvcHRpb25zOgorCisgICAkIG5zYi1wYWNrYWdlIC1wIC1kIC1jIEV4dC01LTAtMworCisKK1Nob3VsZCB0aGUgYnVpbGQgc3VjY2VlZCwgYnV0IHNvbWUgdGVzdHMgZmFpbCBkdXJpbmcgJ21ha2UgdGVzdCcsIHlvdSBwcm9iYWJseQorY2FuIHRvIHNraXAgdGhlIHRlc3Qgc3RlcCB0byBnZXQgdG8gdGhlIGluc3RhbGwgc3RlcDoKKworICAgJCBuc2ItcGFja2FnZSAtcCAtZCAtYyAtdCBFeHQtNS0wLTMKKworCitPVEhFUiBQUk9CTEVNUworLS0tLS0tLS0tLS0tLS0KKyogIkNhbm5vdCBmaW5kIG5zYi1mdW5jdGlvbnMiCisgIAorICAgSXQncyBhIGhhY2ssIGJ1dCBzeW1saW5rIG5zYi1mdW5jdGlvbnMgYW5kIG5zYi1wYWNrYWdlIHRvIHlvdXIgbG9jYWwKKyAgIGJpbiBkaXJlY3RvcnkgKCRIT01FL2JpbikuICBJJ20gdHJ5aW5nIHRvIHRoaW5rIG9mIGEgYmV0dGVyIHNvbHV0aW9uLgorCisqICJnY2M6IHNubXBfdmVyc2lvbi5sbzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKworICAgVGhpcyBpcyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHlvdSBoYXZlIHByZXZpb3VzbHkgYnVpbGQgaW4geW91cgorICAgc291cmNlIGRpcmVjdG9yeS4gJ21ha2UgZGlzdGNsZWFuJyBpbiB5b3VyIHNvdXJjZSBkaXJlY3RvcnksIG9yCisgICBjaGVjayBvdXQgYSBmcmVzaCBuZXcgdmVyc2lvbiBmcm9tIENWUy4KZGlmZiAtLWdpdCBhL2Rpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlMgYi9kaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTQxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TCkBAIC0wLDAgKzEsMTAwMSBAQAorVGhpcyBpcyBhIHN1bW1hcnkgb2YgdGhlIHN0ZXBzIHJlcXVpcmVkIHRvIG1ha2UgYSBuZXcgcmVsZWFzZS4gIERvIG5vdAorYXR0ZW1wdCB0byBydW4gdGhlc2UgbWFudWFsbHkgLSBpbnN0ZWFkIHVzZSB0aGUgJ21ha2VyZWxlYXNlJworYXBwbGljYXRpb24gYW5kIG1ha2VyZWxlYXNlLnhtbCBmaWxlLiAgR2V0ICdtYWtlcmVsZWFzZScgZnJvbSB0aGUKK21ha2VyZWxlYXNlIFNWTiByZXBvc2l0b3J5OgorCisgIHN2biBjbyBodHRwczovL21ha2VyZWxlYXNlLnN2bi5zb3VyY2Vmb3JnZS5uZXQvc3Zucm9vdC9tYWtlcmVsZWFzZS90cnVuay9tYWtlcmVsZWFzZQorICBjZCBtYWtlcmVsZWFzZQorICBwZXJsIE1ha2VmaWxlLlBMCisgIG1ha2UKKyAgc3VkbyBtYWtlIGluc3RhbGwKKworVGhlbiB0byBydW4gaXQgZnJvbSBhIGRpcmVjdG9yeSB0byByZWxlYXNlOgorCisgIG1ha2VyZWxlYXNlIC1jIE5FVFNOTVBUUlVOSy9kaXN0L21ha2VyZWxlYXNlLnhtbAorCitJdCB3aWxsIHByb21wdCB5b3UgZm9yIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24gYW5kIHRhc2tzIHRvIGJlIGRvbmUuCisKK0lNUE9SVEFOVCBOT1RFOgorICAgIERvbid0ICpldmVyKiByZWxlYXNlIGEgc2Vjb25kIHRhciBiYWxsIHVuZGVyIHRoZSBzYW1lIG5hbWUgYXMgdGhlCisgICAgZmlyc3QuICBJdCdzIG11Y2ggbXVjaCBtdWNoIGJldHRlciB0byByZWxlYXNlIGFub3RoZXIgdmVyc2lvbgorICAgIGluc3RlYWQsIHNpbmNlIHlvdSBkb24ndCBoYXZlIHRvIGZpZ3VyZSBvdXQgZnJvbSB0aGUgYnVnIHJlcG9ydHMKKyAgICB0aGF0IGEgdXNlciByZWFsbHkgZ3JhYmJlZCB0aGUgZmlyc3Qgc25hcHNob3QgaW5zdGVhZCBvZiB0aGUKKyAgICBzZWNvbmQgd2hlbiB0aGV5IGNvbXBsYWluIGFib3V0IHZlcnNpb24gIlhYWCIgbm90IHdvcmtpbmcuCisKKz09PT09PSBtYWtlcmVsZWFzZSAtbiBvdXRwdXQgc2hvd2luZyBtYWtlcmVsZWFzZSBkb2N1bWVudGVkIHN0ZXBzID09PT09PQorCitTVEVQOiAxOiBTZXR1cCBTdGVwcworCisgIFRoaXMgc2V0IG9mIHN0ZXBzIHdpbGwgZG8gc29tZSBwcmVsaW1pbmFyeSAic2FmZXR5IiBjaGVja3MgdG8gZW5zdXJlIHRoZQorICBsb2NhbCBlbnZpcm9ubWVudCBpcyBvayBhbmQgc2V0dXAgc29tZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24uCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMSA9PT09PQorCitTVEVQOiAxLjE6IFNldHVwIENoZWNjaworCisgIFRoaXMgc2hvdWxkIHNob3cgdGhlIGxhc3QgdmVyc2lvbiBudW1iZXIgcHVibGlzaGVkIGluIHRoaXMgYnJhbmNoIGJ5CisgIGxvb2tpbmcgYXQgdGhlIHRpbWUgbGluZSBpbiB0aGUgUkVBRE1FIGZpbGU6CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGhlYWQgLTEgUkVBRE1FCisKK1NURVA6IDEuMjogUGljayBhIFZlcnNpb24gTnVtYmVyCisKKyAgUGxlYXNlIGVudGVyIHRoZSB2ZXJzaW9uIG51bWJlciB0byBwdWJsaXNoLiAgTmV0LVNOTVAgY29udmVudGlvbiBkaWN0YXRlcworICB0aGF0IHRoaXMgYmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIDUuNCBvciA1LjQuMS4gIFByZS1yZWxlYXNlcyB0aGF0IG9jY3VyCisgIGJlZm9yZSBhIGJyYW5jaCBmcmVlemVzIHNob3VsZCBiZSBhcHBlbmRlZCB3aXRoICIucHJlTiIgbGlrZSA1LjQuMS5wcmUyLiAKKyAgUmVsZWFzZS1jYW5kaWRhdGVzIHNob3VsZCBiZSBsYWJlbGVkICIucmNOIiBsaWtlIDUuNC4xLnJjMS4KKworICBEZWNpZGUgb24gYSB2YWx1ZSBmb3IgcGFyYW1ldGVyICdWRVJTSU9OJworCisgICAgcGFyYW1ldGVyOiBWRVJTSU9OCisKKyAgICBwcm9tcHQ6ICAgIEVudGVyIHRoZSBuZXcgdmVyc2lvbiBudW1iZXI6CisKK1NURVA6IDEuMzogRGVmaW5pbmcgYSBzZWNvbmQgaW50ZXJuYWwgdmVyc2lvbiBzdHJpbmcKKworICBJbnRlcm5hbCBwZXJsIGNvZGUgd2lsbCBiZSBleGVjdXRlZAorCitTVEVQOiAxLjQ6IFJlbGVhc2UgUGFyYW1ldGVyIEluZm9ybWF0aW9uCisKKyAgSGVyZSBpcyB0aGUgY29uZmlndXJlZCBpbmZvcm1hdGlvbiB3ZSdsbCBiZSB1c2luZzoKKworICBWRVJTSU9OOgkJICAge1ZFUlNJT059CisKKyAgVkVSU0lPTiB3aXRoIGRhc2hlczoJICAge1ZFUlNJT05EQVNIRVN9CisKKyAgRmxvYXRpbmcgcG9pbnQgVkVSU0lPTjogIHtWRVJTSU9ORkxPQVR9CisKKyAgU1ZOIEJyYW5jaCBVUkw6CSAgIHtCUkFOQ0hQQVRIfQorCitTVEVQOiAxLjU6IHVwZGF0ZQorCisgIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSBpcyB1cCB0byBkYXRlIGFuZCBtYXRjaGVzIHRoZSBsYXRlc3QKKyAgc291cmNlcyBpbiB0aGlzIGJyYW5jaC4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIHVwZGF0ZQorCitTVEVQOiAxLjY6IENoZWNrIGZvciBjaGFuZ2VzCisKKyAgVGhpcyBzdGVwcyBsb29rcyBmb3Igb3V0c3RhbmRpbmcgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuICBUaGVyZQorICBzaG91bGQgYmUgbm8gb3V0c3RhbmRpbmcgbW9kaWZpY2F0aW9ucyEgIElmIHRoaXMgc3RlcCBmaW5kcyBvdXRzdGFuZGluZworICBtb2RpZmllZCBmaWxlcyB5b3UgbmVlZCB0byBjaGVjayB0aGVtIGluIG9yIHJldmVydCB0aGVtIGJlZm9yZQorICBjb250aW51aW5nIQorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gLXUgc3RhdHVzIHwgZWdyZXAgJ15bXlw/XScKKworICAoTGVhdmluZyBTdGVwOiAxKQorCitTVEVQOiAyOiBTb3VyY2UgQ29kZSBTZXR1cAorCisgIFRoaXMgc2V0IG9mIHN0ZXBzIHdpbGwgbW9kaWZ5IHZhcmlvdXMgcGxhY2VzIHdpdGhpbiB0aGUgc291cmNlIGNvZGUgdHJlZQorICB0byBicmluZyBpdCB1cCB0byBkYXRlIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciBhYm91dCB0byBiZSBwdWJsaXNoZWQuCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMiA9PT09PQorCitTVEVQOiAyLjE6IExpYnRvb2wgLyBMaWJyYXJ5IHZlcnNpb25pbmcgc2V0dXAKKworICBUaGVzZSBzdGVwcyB3aWxsIG1vZGlmeSB0aGUgdmFyaW91cyBmaWxlcyBpbiB0aGUgc291cmNlIHRyZWUgdGhhdCBjb250YWluCisgIHRoZSB2ZXJzaW9uIG51bWJlciwgc2hvdyB5b3UgdGhlIGNoYW5nZXMgdGhhdCB3aWxsIGJlIG1hZGUgYW5kIHRoZW4gY2hlY2sKKyAgaW4gdGhlIHJlc3VsdGluZyBjaGFuZ2VzIGlmIHlvdSBhcHByb3ZlIG9mIHRoZW0uCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMi4xID09PT09CisKK1NURVA6IDIuMS4xOiB2ZXJzaW9uOmxpYnRvb2xtYW51YWxlZGl0CisKKyAgWW91IChtYXkpIG5lZWQgdG8gZWRpdCBNYWtlZmlsZS50b3AgdG8gdXBkYXRlIHRoZSBsaWJyYXJ5IHZlcnNpb24KKyAgbnVtYmVyaW5nICh1c3VhbGx5IGp1c3QgZm9yIHRoZSBmaXJzdCBwcmUtcmVsZWFzZSBvZiBhIGdpdmVuIHZlcnNpb24pLiAKKyAgU2VlIHRoZSBjb21tZW50cyBpbiBSRUxFQVNFLUlOU1RSVUNUSU9OUyBhYm91dCBMSUJDVVJSRU5ULCBMSUJBR0UgYW5kCisgIExJQlJFVklTSU9OLgorCisgIFRoaXMgc2NyaXB0IHdpbGwgY29tbWl0IHRoZSBmaWxlIGZvciB5b3UgYWZ0ZXIgeW91J3JlIGRvbmUuCisKK1NURVA6IDIuMS4yOiB2ZXJzaW9uOmNvbW1pdAorCisgIFdlJ2xsIG5vdyBjb21taXQgdGhlIE1ha2VmaWxlLnRvcCBmaWxlIGlmIHlvdSd2ZSBtb2RpZmllZCBpdC4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvbW1pdCAtbSAidmVyc2lvbiB1cGRhdGUiIE1ha2VmaWxlLnRvcAorCisgIChMZWF2aW5nIFN0ZXA6IDIuMSkKKworU1RFUDogMi4yOiBDaGFuZ2UgVGhlIFZlcnNpb24gTnVtYmVyCisKKyAgVGhlc2Ugc3RlcHMgd2lsbCBtb2RpZnkgdGhlIHZhcmlvdXMgZmlsZXMgaW4gdGhlIHNvdXJjZSB0cmVlIHRoYXQgY29udGFpbgorICB0aGUgdmVyc2lvbiBudW1iZXIsIHNob3cgeW91IHRoZSBjaGFuZ2VzIHRoYXQgd2lsbCBiZSBtYWRlIGFuZCB0aGVuIGNoZWNrCisgIGluIHRoZSByZXN1bHRpbmcgY2hhbmdlcyBpZiB5b3UgYXBwcm92ZSBvZiB0aGVtLgorCisgID09PT09IEVudGVyaW5nIFN0ZXA6IDIuMiA9PT09PQorCitTVEVQOiAyLjIuMTogTW9kaWZ5IHRoZSBzb3VyY2UgZmlsZXMKKworICBXZSB3aWxsIG5vdyBtb2RpZnkgZmlsZXMgdGhyb3VnaCB0aGUgY29kZSB0byByZXBsYWNlIHRoZSB2ZXJzaW9uIG51bWJlcgorICB3aXRoIHRoZSBuZXdlciBvbmUuCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnVkVSU0lPTiA9ICcoLiopJycgd2l0aDogJ1ZFUlNJT04gPSBcJ3tWRVJTSU9ORkxPQVR9XCcnCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzkwNjQpCisKKyAgICAgIHBlcmwvU05NUC9TTk1QLnBtCisKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0KKworICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0KKworICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KKworICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KKworICAgICAgcGVybC9PSUQvT0lELnBtCisKKyAgICAgIHBlcmwvQVNOL0FTTi5wbQorCisgICAgICBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtCisKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL0Zvcm1hdC5wbQorCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0KKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnTmV0U25tcFZlcnNpb25JbmZvID0gIltcZFwuXSsiJyB3aXRoOiAnTmV0U25tcFZlcnNpb25JbmZvID0KKyAgIntWRVJTSU9OfSInCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzhmZDQpCisKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmMKKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnVmVyc2lvbjogW1wuMC05YS16QS1aXSsnIHdpdGg6ICdWZXJzaW9uOiB7VkVSU0lPTn0nCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzhmNDQpCisKKyAgICAgIFJFQURNRQorCisgICAgICBGQVEKKworICAgICAgZGlzdC9uZXQtc25tcC5zcGVjCisKKworCisgIE1vZGlmeWluZyBmaWxlczoKKworICAgIHJlcGxhY2luZzogJ1ZFUlNJT04gPSBbXC4wLTlhLXpBLVpdKycgd2l0aDogJ1ZFUlNJT04gPSB7VkVSU0lPTn0nCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzhlZDQpCisKKyAgICAgIGRpc3QvTWFrZWZpbGUKKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnQUNfSU5JVFwoXFtOZXQtU05NUFxdLCBcWyhbXlxdXSspXF0nIHdpdGg6CisgICdBQ19JTklUKFtOZXQtU05NUF0sIFt7VkVSU0lPTn1dJworCisKKyAgICBmaWxlczogIGdsb2I9QVJSQVkoMHg4ZGM4ZTY0KQorCisgICAgICBjb25maWd1cmUuaW4KKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnTmV0U25tcFZlcnNpb25JbmZvID0gIlteIl0rIicgd2l0aDogJ05ldFNubXBWZXJzaW9uSW5mbyA9CisgICJ7VkVSU0lPTn0iJworCisKKyAgICBmaWxlczogIGdsb2I9QVJSQVkoMHg4ZGM4ZGY0KQorCisgICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jCisKKworCitTVEVQOiAyLjIuMjogUnVubmluZyBhdXRvY29uZiB0byByZWJ1aWxkIGNvbmZpZ3VyZQorCisgIFdlIG1vZGlmaWVkIGNvbmZpZ3VyZS5pbiwgc28gd2Ugbm93IG5lZWQgdG8gcnVuIGF1dG9jb25mIHRvIHJlYnVpbGQKKyAgY29uZmlndXJlLgorCisgIFhYWDogaW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBjb3JyZWN0IGF1dG9jb25mIHZlcnNpb24gbnVtYmVyCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGF1dG9jb25mCisKK1NURVA6IDIuMi4zOiBSdW5uaW5nIHN2biBkaWZmIHRvIGNoZWNrIGNoYW5nZXMKKworICBDaGVjayB0aGUgZm9sbG93aW5nIGNoYW5nZXMgZm9yIHByb3BlciB2ZXJzaW9uIG51bWJlciBkaWZmZXJlbmNlcyBiZWZvcmUKKyAgd2UgY29tbWl0IHRoZSBjaGFuY2VzLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gZGlmZgorCitTVEVQOiAyLjIuNDogUnVubmluZyBzdm4gY29tbWl0IHRvIGNvbW1pdCB0aGUgY2hhbmdlcworCisgIENoZWNrIHRoZSBjaGFuZ2VzIGluIHRoZSBhYm92ZSBkaWZmIGFuZCB0aGVuIHdlJ2xsIGNvbW1pdCB0aGUgcmVzdWx0cworICBoZXJlIGlmIHRoZXkgbG9vayBvay4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvbW1pdCAtbSAiVmVyc2lvbiBudW1iZXIgdXBkYXRlIgorCisgIChMZWF2aW5nIFN0ZXA6IDIuMikKKworU1RFUDogMi4zOiBkb2NzOm1ha2UKKworICBUaGlzIHN0ZXAgd2lsbCBjcmVhdGUgbWFudWFsIHBhZ2VzIGZyb20gZG94eWdlbiBpbnN0cnVtZW50ZWQgY29kZSBmaWxlcy4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbWFrZSBkb2NzCisKKyAgICBtYWtlIG1hbmNwCisKK1NURVA6IDIuNDogZG9jczp1cGRhdGUKKworICBUaGlzIHdpbGwgcnVuIHN2biBzdGF0dXMgdG8gZmlndXJlIG91dCB3aGF0IGZpbGVzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUKKyAgcHJldmlvdXMgbWFuIHBhZ2UgZ2VuZXJhdGlvbiBzdGVwcyB3ZXJlIGRvbmUuICBBZnRlciB0aGlzIHN0ZXAsIHdlJ2xsCisgIGNvbW1pdCBhbGwgdGhlIG1vZGlmaWVkIGZpbGVzLgorCisgIFlvdSBtYXkgZmluZCBhZGRpdGlvbmFsIGZpbGVzIChtYXJrZWQgd2l0aCBhID8pIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvCisgIHRoZSBzdm4gcmVwb3NpdG9yeSBhbmQgeW91J2xsIG5lZWQgdG8gZG8gdGhpcyBieSBoYW5kIGJlZm9yZSBnb2luZyBvbiB0bworICB0aGUgbmV4dCBzdGVwLgorCisgIE5vdGU6IGJhc2VkIG9uIGEgcmVjZW50IG5ldC1zbm1wLWFkbWluIGRpc2N1c3Npb24sIHdlJ3JlIG5vIGxvbmdlciBnb2luZworICB0byBiZSBhZGRpbmcgdGhlIGJhemlsbGlvbnMgb2YgbWFuIHBhZ2VzIHRoYXQgZG94eWdlbiBnZW5lcmF0ZXMgYnkKKyAgZGVmYXVsdC4gIE9ubHkgaW1wb3J0YW50IG9uZXMgc2hvdWxkIGJlIGFkZGVkLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gLXUgc3RhdHVzIG1hbgorCitTVEVQOiAyLjU6IGRvY3M6bWFudWFsYWRkbmV3bWFuCisKKyAgVXBkYXRlIG1hbi9NYWtlZmlsZS5pbiB3aXRoIGRldGFpbHMgb2YgYW55IG5ldyBtYW4gcGFnZXMsIGFuZCBydW4gJ3N2bgorICBhZGQnIG9uIHRoZW0uCisKKyAgSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyIHlvdSdyZSBkb25lLgorCitTVEVQOiAyLjY6IGRvY3M6Y29tbWl0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biBjb21taXQgLW0gImRvY3VtZW50YXRpb24gdXBkYXRlIiBtYW4KKworICAoTGVhdmluZyBTdGVwOiAyKQorCitTVEVQOiAzOiBUZXN0aW5nIFN0ZXBzCisKKyAgVGhlc2Ugc3RlcHMgd2lsbCBoZWxwIHlvdSB0ZXN0IHRoZSBzb3VyY2UgY29kZSB0byBlbnN1cmUgaXQgcGFzc2VzIHNvbWUKKyAgc2ltcGxlICJpdCB3b3JrcyIgdGVzdHMuCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMyA9PT09PQorCitTVEVQOiAzLjE6IGJ1aWxkOmRpc3RjbGVhbgorCisgIEZpcnN0IHdlIG5lZWQgdG8gY2xlYW4gdGhlIGV4aXN0aW5nIGJ1aWxkIHRyZWUgYW5kIHN0YXJ0IGZyb20gc2NyYXRjaC4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbWFrZSBkaXN0Y2xlYW4KKworU1RFUDogMy4yOiBidWlsZDpjb25maWd1cmUKKworICBXZSBuZWVkIHRvIHJ1biBjb25maWd1cmUgdG8gc2V0IHVwIHRoZSBidWlsZCB0cmVlLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICAuL2NvbmZpZ3VyZSAtLWNhY2hlPWNvbmZpZy5jYWNoZSAtLXdpdGgtZGVmYXVsdHMKKyAgLS13aXRoLW1pYi1tb2R1bGVzPSdob3N0IGV4YW1wbGVzIGV4YW1wbGVzL2V4YW1wbGUgdGVzdGhhbmRsZXIgc211eCBSbW9uCisgIGRpc21hbi9ldmVudC1taWInIC0td2l0aC10cmFuc3BvcnRzPUlQWCAtLWVuYWJsZS1pcHY2CisgIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgLS1lbmFibGUtc2hhcmVkCisKK1NURVA6IDMuMzogYnVpbGQ6bWFrZQorCisgIFRoZW4gd2UgbmVlZCB0byBidWlsZCB0aGUgY29kZQorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBtYWtlCisKK1NURVA6IDMuNDogYnVpbGQ6dGVzdAorCisgIE5vdyB3ZSBydW4gIm1ha2UgdGVzdCIgd2hpY2ggc2hvdWxkIHByb2R1Y2UgYSBwZXJmZWN0IHNldCB1cCB0ZXN0CisgIHJlc3VsdHMuICBJZiBub3QsIHRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgb3IgYXQgbGVhc3QgdW5kZXJzdG9vZCBhbmQKKyAgYWNjZXB0ZWQgYXMgaXMgZm9yIHNvbWUgb3RoZXIgcmVhc29uLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBtYWtlIHRlc3QgVEVTVE9QVFM9LW4KKworU1RFUDogMy41OiBjb2RlOmNoZWNrY29tbWVudHMKKworICBUaGlzIGNvbW1hbmQgbG9va3MgZm9yIHNvdXJjZSBjb2RlIG9kZGl0aWVzIGFuZCBwb2xpY3kgdmlvbGF0aW9ucy4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbWFrZSBjaGVja3MKKworICAoTGVhdmluZyBTdGVwOiAzKQorCitTVEVQOiA0OiBSZWxlYXNlIEZpbGUgU3RlcHMKKworICBDZXJ0YWluIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gYW5kIGJ1aWx0IG9uIGEgcGVyLXJlbGVhc2UgYmFzaXMuIAorICBUaGVzZSBzdGVwcyB3aWxsIGhlbHAgc2V0IHVwIHRoZXNlIGZpbGVzLgorCisgID09PT09IEVudGVyaW5nIFN0ZXA6IDQgPT09PT0KKworU1RFUDogNC4xOiBjb2RlOm1ha2VkZXBlbmQKKworICBUaGlzIHN0ZXAgY3JlYXRlcyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgdXNpbmcgdGhlICJkaXN0ZGVwZW5kIiBydWxlIGluCisgIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUuCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIG1ha2UgZGlzdGRlcGVuZAorCitTVEVQOiA0LjI6IGNvZGU6Y29tbWl0ZGVwZW5kCisKKyAgVGhpcyBzdGVwIGNvbW1pdHMgdGhlIGRlcGVuZGVuY3kgY2hhbmdlcyBkb25lIGluIHRoZSBwcmV2aW91cyBzdGVwLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gY29tbWl0IC1tICJtYWtlIGRlcGVuZCIgYGZpbmQgLiAtbmFtZSBNYWtlZmlsZS5kZXBlbmRgCisKK1NURVA6IDQuMzogY2hhbmdlbG9nOnN2bjJjbAorCisgIFdlIG5lZWQgdG8gZXh0cmFjdCB0aGUgcG9ydGlvbnMgb2YgdGhlIGNoYW5nZSBsb2dzIGNvbW1pdHRlZCB0byB0aGUKKyAgcmVwb3NpdG9yeS4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuMmNsIC1mIENoYW5nZUxvZy5hZGQgLS1icmVhay1iZWZvcmUtbXNnIC0tc3RvcC1vbi1jb3B5CisKKyAgICBwZXJsIGRpc3QvY2hhbmdlbG9nZml4ICA8IENoYW5nZUxvZy5hZGQgPiBDaGFuZ2VMb2cucmVhbGx5YWRkCisKK1NURVA6IDQuNDogY2hhbmdlbG9nOm1hbnVhbGVkaXQKKworICBZb3UgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgdGhlICpyZWxldmVudCogcG9ydGlvbnMgb2YKKyAgJ0NoYW5nZUxvZy5yZWFsbHlhZGQnIGludG8gdGhlIENoYW5nZUxvZyBmaWxlLiBJJ2xsIGNvbW1pdCB0aGVzZSBjaGFuZ2VzCisgIGZvciB5b3UgYWZ0ZXIgeW91IGZpbmlzaCBjdXR0aW5nIG91dCB0aGUgcHJvcGVyIGNoYW5nZXMuCisKK1NURVA6IDQuNTogY2hhbmdlbG9nOmNvbW1pdAorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gY29tbWl0IC1tICJ2ZXJzaW9uIHVwZGF0ZSIgQ2hhbmdlTG9nCisKK1NURVA6IDQuNjogZG9jczpuZXduZXdzCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHBlcmwgZGlzdC9leHRyYWN0bmV3cyAtcyAtLS0tLSAtZSAtLS0tLSBDaGFuZ2VMb2cKKworU1RFUDogNC43OiBkb2NzOm5ld25ld3MKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgcGVybCBkaXN0L2V4dHJhY3RuZXdzIC1jIENIQU5HRVMubmV3MiAtbiBORVdTLm5ldzIgQ2hhbmdlTG9nLnJlYWxseWFkZAorCitTVEVQOiA0Ljg6IGRvY3M6UkVBRE1FCisKKyAgWW91IG5lZWQgdG8gbWFudWFsbHkgaW5zZXJ0IHRoZSByZWxldmVudCBwb3J0aW9ucyBvZiAnQ0hBTkdFUy5uZXcnIGFuZAorICAnTkVXUy5uZXcnIGludG8gdGhlIENIQU5HRVMgYW5kIE5FV1MgZmlsZS4gKFRoZXJlIGFyZSBhbHRlcm5hdGl2ZQorICB2ZXJzaW9ucyBpbiAnQ0hBTkdFUy5uZXcyJyBhbmQgJ05FV1MubmV3MicpIFlvdSBtYXkgd2lzaCB0byB1cGRhdGUgdGhlCisgIFJFQURNRSBmaWxlIGFzIHdlbGwuIEknbGwgY29tbWl0IHRoZXNlIGNoYW5nZXMgZm9yIHlvdSBhZnRlcndhcmRzCisKK1NURVA6IDQuOTogZG9jczpjb21taXQKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvbW1pdCAtbSAidmVyc2lvbiB1cGRhdGUiIFJFQURNRSBORVdTIENIQU5HRVMKKworU1RFUDogNC4xMDogcmVsZWFzZTp1cGRhdGUKKworICBPbmUgbW9yZSBzdm4gdXBkYXRlIGFuZCBzdGF0dXMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgb2RkIGV4aXN0cyBpbiB5b3VyCisgIHNvdXJjZSB0cmVlLglQbGVhc2UgY2hlY2sgdGhlIHJlc3VsdHMhCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biAtdSBzdGF0dXMKKworICAoTGVhdmluZyBTdGVwOiA0KQorCitTVEVQOiA1OiBNYWtlIHRoZSBSZWxlYXNlCisKKyAgVGhpcyBpcyBpdCEgIEFmdGVyIHRoaXMgcG9pbnQgaXQncyBtdWNoIGhhcmRlciB0byB0dXJuIGJhY2suCUlmCisgIGV2ZXJ5dGhpbmcgaXMgb2sgdW50aWwgdGhpcyBwb2ludCBhbmQgeW91J3JlIHJlYWR5IHRvIGFjdHVhbGx5IHN0YW1wIHRoZQorICByZWxlYXNlIGluIFNWTiBhbmQgbWFrZSByZWxlYXNlIGZpbGVzLCB0aGVzZSBzdGVwcyB3aWxsIGRvIHRoYXQgZm9yIHlvdS4KKworICA9PT09PSBFbnRlcmluZyBTdGVwOiA1ID09PT09CisKK1NURVA6IDUuMTogcmVsZWFzZTp0YWcKKworICBUaGlzIHdpbGwgYWN0dWFsbHkgc3ZuIGNvcHkgdGhlIGN1cnJlbnQgY2hlY2tlZCBvdXQgYnJhbmNoIHRvIHRoZSBuZXcgdGFnCisgIG5hbWUuICBTcGVjaWZpY2FsbHk6CisKKyAgc3ZuIGNvcHkge0JSQU5DSFBBVEh9IC4uLi90YWdzL0V4dC17VkVSU0lPTkRBU0hFU30KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvcHkgLW0gIntWRVJTSU9OfSByZWxlYXNlIiB7QlJBTkNIUEFUSH0KKyAgaHR0cHM6Ly9uZXQtc25tcC5zdm4uc291cmNlZm9yZ2UubmV0L3N2bnJvb3QvbmV0LXNubXAvdGFncy9FeHQte1ZFUlNJT05EQQorICBTSEVTfQorCitTVEVQOiA1LjI6IHJlbGVhc2U6bWFrZWRpc3QKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGV4cG9ydAorICBodHRwczovL25ldC1zbm1wLnN2bi5zb3VyY2Vmb3JnZS5uZXQvc3Zucm9vdC9uZXQtc25tcC90YWdzL0V4dC17VkVSU0lPTkRBCisgIFNIRVN9L25ldC1zbm1wIG5ldC1zbm1wLXtWRVJTSU9OfQorCitTVEVQOiA1LjM6IHJlbGVhc2U6cmVtb3ZlZmlsZXMKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbmV0LXNubXAte1ZFUlNJT059L3JlbW92ZS1maWxlcyBuZXQtc25tcC17VkVSU0lPTn0KKworU1RFUDogNS40OiByZWxlYXNlOm1ha2VkaXN0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN0YXIgYXJ0eXBlPXVzdGFyIC1jIC16IC1mIG5ldC1zbm1wLXtWRVJTSU9OfS50YXIuZ3ogCisgIG5ldC1zbm1wLXtWRVJTSU9OfQorCitTVEVQOiA1LjU6IHJlbGVhc2U6bWFrZXppcGNsZWFuCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHJtIC1mIG5ldC1zbm1wLXtWRVJTSU9OfS56aXAKKworU1RFUDogNS42OiByZWxlYXNlOm1ha2V6aXAKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgemlwIC1yIG5ldC1zbm1wLXtWRVJTSU9OfS56aXAgIG5ldC1zbm1wLXtWRVJTSU9OfQorCitTVEVQOiA1Ljc6IHJlbGVhc2U6c2VhcmNoaW5nLWdwZy1rZXlzCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGdwZyAtLWxpc3Qtc2VjcmV0LWtleXMgbmV0LXNubXAtYWRtaW4KKworU1RFUDogNS44OiByZWxlYXNlOmdwZworCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBncGcgLXUgMzE3RjhGNjQgLWEgLS1kZXRhY2gtc2lnbiBuZXQtc25tcC17VkVSU0lPTn0udGFyLmd6CisKK1NURVA6IDUuOTogcmVsZWFzZTpncGcKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgZ3BnIC11IDMxN0Y4RjY0IC1hIC0tZGV0YWNoLXNpZ24gbmV0LXNubXAte1ZFUlNJT059LnppcAorCitTVEVQOiA1LjEwOiBSZWxlYXNlIEZpbGUgVGVzdAorCisgIFdlJ2xsIGFsc28gcmUtYnVpbGQgdGhlIHNvdXJjZSBhbmQgcmV0ZXN0IGEgZmV3IHRoaW5ncyB0byBlbnN1cmUgdGhlCisgIHBhY2thZ2VkIGZpbGUgY2FuIGFjdHVhbGx5IGJlIGJ1aWx0LgorCisgID09PT09IEVudGVyaW5nIFN0ZXA6IDUuMTAgPT09PT0KKworU1RFUDogNS4xMC4xOiBwb3N0dGVzdDp1bnRhcgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBybSAtcmYgbmV0LXNubXAte1ZFUlNJT059CisKK1NURVA6IDUuMTAuMjogcG9zdHRlc3Q6dW50YXIKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgdGFyIHh6ZiBuZXQtc25tcC17VkVSU0lPTn0udGFyLmd6CisKK1NURVA6IDUuMTAuMzogcG9zdHRlc3Q6Y29uZmlndXJlCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGNkIG5ldC1zbm1wLXtWRVJTSU9OfSAmJiAuL2NvbmZpZ3VyZSAtLWNhY2hlPWNvbmZpZy5jYWNoZQorICAtLXdpdGgtZGVmYXVsdHMgLS13aXRoLW1pYi1tb2R1bGVzPSdob3N0IGV4YW1wbGVzIGV4YW1wbGVzL2V4YW1wbGUJCisgIHRlc3RoYW5kbGVyIHNtdXggUm1vbiBkaXNtYW4vZXZlbnQtbWliJyAtLXdpdGgtdHJhbnNwb3J0cz1JUFgKKyAgLS1lbmFibGUtaXB2NiAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIC0tZW5hYmxlLXNoYXJlZAorCitTVEVQOiA1LjEwLjQ6IHBvc3R0ZXN0Om1ha2UKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgY2QgbmV0LXNubXAte1ZFUlNJT059ICYmIG1ha2UKKworU1RFUDogNS4xMC41OiBwb3N0dGVzdDp0ZXN0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGNkIG5ldC1zbm1wLXtWRVJTSU9OfSAmJiBtYWtlIHRlc3QKKworICAoTGVhdmluZyBTdGVwOiA1LjEwKQorCisgIChMZWF2aW5nIFN0ZXA6IDUpCisKK1NURVA6IDY6IFJlbGVhc2UgdGhlIHJlc3VsdHMKKworICBOb3cgd2UnbGwgcHVibGlzaCB0aGUgcmVzdWx0cyB0byB0aGUgU0Ygc2VydmVyCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogNiA9PT09PQorCitTVEVQOiA2LjE6IHJzeW5jIHRoZSBuZXcgZmlsZXMKKworICBUaGlzIHdpbGwgY29weSB0aGUgcmVzdWx0cyB0byB0aGUgU0YgdXBsb2FkcyBkaXJlY3RvcnkgaW4geW91ciBhY2NvdW50IG9uCisgIGZycy5zb3VyY2Vmb3JnZS5uZXQKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgcnN5bmMgLXYgbmV0LXNubXAte1ZFUlNJT059LnRhci5neiBuZXQtc25tcC17VkVSU0lPTn0udGFyLmd6LmFzYworICBuZXQtc25tcC17VkVSU0lPTn0uemlwIG5ldC1zbm1wLXtWRVJTSU9OfS56aXAuYXNjCisgIGZycy5zb3VyY2Vmb3JnZS5uZXQ6dXBsb2Fkcy8KKworU1RFUDogNi4yOiBVcGRhdGUgdGhlIFNGIHJlbGVhc2Ugd2ViIHBhZ2UKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgZmlyZWZveAorICAnaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L2FkbWluL2VkaXRwYWNrYWdlcy5waHA/Z3JvdXBfaWQ9MTI2OTQnCisKKyAgKExlYXZpbmcgU3RlcDogNikKKworU1RFUDogNzogCisKKyAgQmluYXJpZXM6IGJ1aWxkIHJwbXMsIC50YXIuZ3pzLCBldGMuCisKK1NURVA6IDg6IEFkdmVydGlzZSBpdCEKKworICA9PT09PSBFbnRlcmluZyBTdGVwOiA4ID09PT09CisKK1NURVA6IDguMTogCisKKyAgQWRkIGEgbm90ZSB0byB0aGUgc291cmNlIGZvcmdlIG5ld3Mgc3lzdGVtOgorCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbmV3cy9zdWJtaXQucGhwP2dyb3VwX2lkPTEyNjk0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGZpcmVmb3ggJ2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbmV3cy9zdWJtaXQucGhwP2dyb3VwX2lkPTEyNjk0JworCitTVEVQOiA4LjI6IAorCisgIFNlbmQgYW4gYW5ub3VuY2VtZW50IG1lc3NhZ2UgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgbWFpbGluZyBsaXN0cyBiYXNlZAorICBvbiBpdCdzIHR5cGU6CisKKyAgcHJlOgkgIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworICByYzoJICBuZXQtc25tcC11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworICBmaW5hbDogIG5ldC1zbm1wLWFubm91bmNlQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCitTVEVQOiA4LjM6IAorCisgIFVwZGF0ZSB0aGUgdG9waWMgb24gdGhlICNOZXQtU05NUCBjaGFubmVsIGlmIHRoaXMgaXMgYSB0cnVuayBiYXNlZAorICByZWxlYXNlLgorCitTVEVQOiA4LjQ6IAorCisgIFVwZGF0ZSB0aGUgZnJlc2htZWF0IGxpc3RpbmcgKFdlcyBuZWVkcyB0byBkbyB0aGlzKToKKworICBodHRwOi8vZnJlc2htZWF0Lm5ldC9wcm9qZWN0cy9uZXQtc25tcC8KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgZmlyZWZveCBodHRwOi8vZnJlc2htZWF0Lm5ldC9wcm9qZWN0cy9uZXQtc25tcC8KKworICAoTGVhdmluZyBTdGVwOiA4KQorCitTVEVQOiA5OiAKKworICBBZHZlcnRpc2U6IE5FV1MgdXBsb2FkIHRvIHNmLCBwdWJsaXNoIG9uIC1hbm5vdW5jZSwgZnJlc2htZWF0LCBhbmQgdGhlCisgIEdOVSBGU0YgZGlyZWN0b3J5IChodHRwOi8vZGlyZWN0b3J5LmZzZi5vcmcvcHJvamVjdC9uZXQtc25tcC8pLi4uIChzZW5kCisgIG1haWwgdG8gYnVnLWRpcmVjdG9yeUBnbnUub3JnKQorCisKKworCisKKz09PT09PSBCRUdJTiBPQlNPTEVURSAocHJlLW1ha2VyZWxlYXNlKSBET0NVTUVOVEFUSU9OID09PT09PQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1RFU1RJTkc6CisKKyAgMSkgVXBkYXRlIHRoZSBzb3VyY2UgdHJlZSB0byBjYXRjaCBhbGwgcmVjZW50IGNvbW1pdHMsCisgICAgIGFuZCBjaGVjayB0aGF0IGFsbCBsb2NhbCBjaGFuZ2VzIGhhdmUgYmVlbiBjb21taXR0ZWQuCisKKyAgICAgJCBzdm4gLXUgc3RhdHVzCisgICAgICQgc3ZuICAgIHVwZGF0ZQorCisgIDIpIENoYW5nZSB0aGUgbGlidG9vbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIE1ha2VmaWxlLnRvcC4KKyAgICAgU2VlIE1BTlVBTCAtIFNURVAgMSBsYXRlciBpbiB0aGVzZSBpbnN0cnVjdGlvbnMuCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCBjb21taXQgdGhpcyBmaWxlIGF1dG9tYXRpY2FsbHkuCisKKyAgMykgQ29uZmlndXJlIHRoZSBzdWl0ZSB3aXRoIGFzIG1hbnkgbW9kdWxlcyBhcyBwb3NzaWJsZSwKKyAgICAgYnVpbGQgYW5kIHRlc3QgaXQuICBUaGUgbWFrZXJlbGVhc2Ugc2NyaXB0IHdpbGwgdXNlCisgICAgIHRoZSBvcHRpb25zOgorCisgICAgICAkIC4vY29uZmlndXJlICAnLS13aXRoLW1pYi1tb2R1bGVzPWhvc3QgZXhhbXBsZXMgZXhhbXBsZXMvZXhhbXBsZSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGhhbmRsZXIgc211eCBSbW9uIGRpc21hbi9ldmVudC1taWInICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtdHJhbnNwb3J0cz1JUFggIC0tZW5hYmxlLWlwdjYgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtZW1iZWRkZWQtcGVybCAtLWVuYWJsZS1zaGFyZWQKKworICAgICBJZGVhbGx5IHRoaXMgc2hvdWxkIGJlIHJlcGVhdGVkIG9uIGFzIG1hbnkgc3lzdGVtcyBhcyBwb3NzaWJsZQorICAgICAoaW5jbHVkaW5nIHJ1bm5pbmcgIm1ha2UgaW5zdGFsbCIpLiAgSG93ZXZlciB0aGUgbWFrZXJlbGVhc2UKKyAgICAgc2NyaXB0IHdpbGwgb25seSB0ZXN0IHRoaW5ncyBvbiB0aGUgY3VycmVudCBib3gsIGFuZCB3aWxsIG5vdAorICAgICB0cnkgdG8gaW5zdGFsbCB0aGUgc29mdHdhcmUuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitET0NVTUVOVEFUSU9OOgorCisgIDQpICBVcGRhdGUgdGhlIHZlcnNpb24gbnVtYmVyIGluIHRoZSBkb3h5Z2VuLmNvbmYgZmlsZQorICAgICAgKGhhbmRsZWQgYXV0b21hdGljYWxseSBieSAnbWFrZXJlbGVhc2UnKSBhbmQgZ2VuZXJhdGUKKyAgICAgIHRoZSBkb3h5Z2VuIGV4dHJhY3RlZCBtYW51YWwgcGFnZXMuCisKKyAgICAgICAgJCBtYWtlIGRvY3MKKyAgICAgICAgJCBtYWtlIG1hbmNwCisKKyAgICAgJ21ha2VyZWxlYXNlJyB3aWxsIGNvbW1pdCB0aGlzIGZpbGUgYXV0b21hdGljYWxseS4KKyAgICAgTm90ZSB0aGF0IGFueSBuZXcgbWFuIHBhZ2VzIHNob3VsZCBiZSBhZGRlZCB0byBNYWtlZmlsZS5pbi4KKyAgICAgVGhpcyBpcyAqTk9UKiBjdXJyZW50bHkgaGFuZGxlZCBieSB0aGUgbWFrZXJlbGVhc2Ugc2NyaXB0LgorCisgIDUpIENoZWNrIHRoZSBjb2RlIGZvciBpbGxlZ2FsIGNvbnN0cnVjdHMgKGUuZy4gQysrIHN0eWxlIGNvbW1lbnRzCisgICAgIG9yIEdOVSBtYWtlIHNwZWNpZmljIGNvbnN0cnVjdHMgaW4gTWFrZWZpbGVzKToKKworICAgICAgICAkIG1ha2UgY2hlY2tzCisKKyAgNikgVXBkYXRlIE1ha2VmaWxlIGRlcGVuZGVuY2llczoKKworICAgICAgICAkIG1ha2UgZGlzdGRlcGVuZAorCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCBjb21taXQgdGhlc2UgZGVwZW5kZW5jaWVzIGF1dG9tYXRpY2FsbHkuCisKKyAgNykgVXBkYXRlIHRoZSBDaGFuZ2VMb2cgZmlsZSB3aXRoIGRldGFpbHMgb2YgYWxsIChyZWNlbnQpIGNoYW5nZXMKKyAgICAgdG8gdGhlIHN1aXRlLiAgU2VlIE1BTlVBTCAtIFNURVAgMiBsYXRlciBpbiB0aGVzZSBpbnN0cnVjdGlvbnMuCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCBjb21taXQgdGhpcyBmaWxlIGF1dG9tYXRpY2FsbHkuCisKKyAgOCkgVXBkYXRlIHRoZSBSRUFETUUsIE5FV1MsIGFuZCBDSEFOR0VTIGZpbGVzIHdpdGggZGV0YWlscyBvZgorICAgICBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBzdWl0ZS4gIFNlZSBNQU5VQUwgLSBTVEVQIDMgbGF0ZXIKKyAgICAgaW4gdGhlc2UgaW5zdHJ1Y3Rpb25zLgorICAgICAnbWFrZXJlbGVhc2UnIHdpbGwgY29tbWl0IHRoZXNlIGZpbGVzIGF1dG9tYXRpY2FsbHkuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitSRUxFQVNFOgorCisgIDkpIE1ha2Ugc3VyZSBhbGwgY2hhbmdlcyBhcmUgY2hlY2tlZCBpbjoKKworICAgICAgICQgc3ZuIC11IHN0YXR1cworICAgICAgICQgc3ZuICAgIHVwZGF0ZQorCisgICAgIFtOb3RlIHRoYXQgdGhpcyBzdGVwIGlzIG9taXR0ZWQgd2hlbiBydW5uaW5nICJtYWtlcmVsZWFzZSJdCisKKyAxMCkgQ2hhbmdlIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB2YXJpb3VzIGZpbGVzCisgICAgICAgKFJFQURNRSwgRkFRLCBjb25maWd1cmUuaW4sIG5ldC1zbm1wLnNwZWMgYW5kIGFzc29ydGVkIFBlcmwgbW9kdWxlcykuCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCB1cGRhdGUgYW5kIGNvbW1pdCB0aGVzZSBmaWxlcyBhdXRvbWF0aWNhbGx5LgorCisgMTEpIENyZWF0ZSBhIHRhZyBjaGVja3BvaW50IGZvciB0aGlzIHJlbGVhc2U6CisKKyAgICAgICAkIHN2biBjb3B5ICAvdHJ1bmsgICAgICAgICAgICAgICAgIC90YWdzL0V4dC01LXgKKyAgICAgb3IKKyAgICAgICAkIHN2biBjb3B5ICAvYnJhbmNoZXMvVjUteC1wYXRjaGVzIC90YWdzL0V4dC01LXgteQorCisgMTIpIENvbnN0cnVjdCB0aGUgc291cmNlIHBhY2thZ2VzOgorCisgICAgICAgICQgc3ZuIGV4cG9ydCAvdGFncy9FeHQtNS14LXkvbmV0LXNubXAgbmV0LXNubXAtNS54LnkKKyAgICAgICAgJCBuZXQtc25tcC01LngueS9yZW1vdmUtZmlsZXMgICAgICAgICBuZXQtc25tcC01LngueQorICAgICAgICAkIHN0YXIgYXJ0eXBlPXVzdGFyIC1jIC16IC1mIG5ldC1zbm1wLTUueC55LnRhci5neiAgICBuZXQtc25tcC01LngueQorICAgICAgICAkIHJtIC1mIG5ldC1zbm1wLTUueC55LnppcCIKKyAgICAgICAgJCB6aXAgLXIgbmV0LXNubXAtNS54LnkuemlwIG5ldC1zbm1wLTUueC55IgorCisKKyAxMykgU2lnbiAob3IgY2hlY2tzdW0pIHRoZSBwYWNrYWdlczoKKworICAgICBXZXMvUm9iZXJ0OgorICAgICAgICAkIGdwZyAtdSBuZXQtc25tcC1hZG1pbiAtYSAtLWRldGFjaC1zaWduIG5ldC1zbm1wLTUueC55LnRhci5negorICAgICAgICAkIGdwZyAtdSBuZXQtc25tcC1hZG1pbiAtYSAtLWRldGFjaC1zaWduIG5ldC1zbm1wLTUueC55LnppcAorICAgICBPdGhlcnM6CisgICAgICAgICQgbWQ1c3VtIG5ldC1zbm1wLTUueC55LnRhci5neiA+IG5ldC1zbm1wLTUueC55LnRhci5nei5tZDUKKyAgICAgICAgJCBtZDVzdW0gbmV0LXNubXAtNS54LnkuemlwICAgID4gbmV0LXNubXAtNS54LnkuemlwLm1kNQorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorUkVMRUFTRSBURVNUSU5HOgorCisgMTQpIFVucGFjayBhIGNsZWFuIGNvcHkgb2YgdGhlIHRhcmJhbGwsIGNvbmZpZ3VyZSwgYnVpbGQgYW5kCisgICAgIHRlc3QgdGhlIHJlbGVhc2UgdGFyYmFsbC4KKworIDE1KSBEb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgY2hhbmdlcyB0aGF0IGhhdmUKKyAgICAgYmVlbiBtaXNzZWQgZnJvbSB0aGUgQ1ZTIGNoZWNraW46CisKKyAgICAgICAgJCBzdm4gc3RhdHVzCisKK05vdGU6ICBUaGlzIGlzIHRoZSBsYXN0IHN0YWdlIHRoYXQgaXMgaGFuZGxlZCBieSB0aGUgIm1ha2VyZWxlYXNlIiBzY3JpcHQKKyAgICAgICBFdmVyeXRoaW5nIGZvbGxvd2luZyB3aWxsIG5lZWQgdG8gYmUgZG9uZSBtYW51YWxseS4KKworIDE1KSBVcGxvYWQgdGhlIHBhY2thZ2VzIChhbmQgc2lnbmF0dXJlIGZpbGVzKSB0byB0aGUgU291cmNlRm9yZ2Ugc2VydmVyOgorIAorICAgICAgICAkIG5jZnRwcHV0IHVwbG9hZC5zZi5uZXQgaW5jb21pbmcgbmV0LXNubXAtNS54LnkudGFyLmd6CisgICAgICAgICQgbmNmdHBwdXQgdXBsb2FkLnNmLm5ldCBpbmNvbWluZyBuZXQtc25tcC01LngueS56aXAKKyAgICAgICAgKiBTRiBwYWdlczogICJBZG1pbiIgLT4gIkZpbGUgUmVsZWFzZXMiCisgICAgICAgICogbmV0LXNubXA6ICAiQWRkIFJlbGVhc2UiIChvciAiRWRpdCBSZWxlYXNlIikKKyAgICAgICAgKiBDcmVhdGUgKG9yIGNob29zZSkgYW4gYXBwcm9wcmlhdGUgcmVsZWFzZSBuYW1lCisgICAgICAgICAgICAgZS5nLiAgIjUueC55IHNvdXJjZSBjb2RlIiAgKG9yICI1LngueSBwcmUtcmVsZWFzZXMiKQorICAgICAgICAqICJFZGl0IFRoaXMgUmVsZWFzZSIKKyAgICAgICAgKiBTZWxlY3QgdGhlIHRhcmJhbGwgYW5kL29yIG90aGVyIHJlbGV2YW50IGZpbGVzCisKKyAxNikgQW5ub3VuY2UgdGhlIHJlbGVhc2Ugb24gdGhlIGFwcHJvcHJpYXRlIGxpc3QuCisgICAgIFByZS1yZWxlYXNlIGFubm91bmNlbWVudHMgKGFuZCBhIGNhbGwgZm9yIHRlc3RpbmcpIHNob3VsZCBiZQorICAgICBzZW50IHRvIG5ldC1zbm1wLWNvZGVycywgcmVsZWFzZS1jYW5kaWRhdGVzIHRvIG5ldC1zbm1wLXVzZXJzLgorCisgICAgIEZ1bGwgcmVsZWFzZXMgc2hvdWxkIGJlIGFubm91bmNlZCBvbiBuZXQtc25tcC11c2VycywgYW5kIGFzIGEKKyAgICAgbmV3cyBpdGVtIG9uIHRoZSBwcm9qZWN0IGhvbWUgcGFnZSAtIGluY2x1ZGluZyB0aGUgTkVXUyBzbmlwcGV0CisgICAgIG9mIHNpZ25pZmljYW50IGNoYW5nZXMgc2luY2UgdGhlIGxhc3QgcmVsZWFzZS4KKworIDE3KSBVcGRhdGUgdGhlIGZvbGxvd2luZyBodGRvY3MgZmlsZXMgKGluIHRoZSBtYWluIFNWTiB0cnVuayk6CisgICAgICAgICBodGRvY3MvZG93bmxvYWQuaHRtbAorICAgICAgICAgaHRkb2NzL2Rldi9zY2hlZHVsZS5odG1sCisKKyAgICAgW01ha2Ugc3VyZSB5b3UgaGF2ZSBwZXJtaXNzaW9ucyBzZXQgdXAgcHJvcGVybHkgb24gdGhlIHdlYgorICAgICAgc2VydmVyIHNvIHRoYXQgZmlsZXMgY3JlYXRlZCBiZWNvbWUgZ3JvdXAtd3JpdGFibGUhISFdCisKKyAgICAgVGhhdCBjb25jbHVkZXMgdGhlIHByb2Nlc3MgZm9yIHByZS1yZWxlYXNlcyBhbmQgcmVsZWFzZS1jYW5kaWRhdGVzLgorICAgICBGb3IgZnVsbCByZWxlYXNlcywgd2FpdCBhIHdlZWsgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIG1ham9yCisgICAgIHByb2JsZW1zLCBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSByZW1haW5pbmcgc3RlcHMuCisKKyAgICAgICAgSWYgdGhlcmUgYXJlIGtub3duIHByb2JsZW1zIGFuZCBhbm90aGVyIHJlbGVhc2UgaXMgcGxhbm5lZCB0bworICAgICBmaXggdGhlbSwgZG9uJ3QgYW5ub3VuY2UgdGhlIGJyb2tlbiB2ZXJzaW9uIC0gd2FpdCBmb3IgdGhlIHVwZGF0ZWQKKyAgICAgb25lIGluc3RlYWQuCisKKyAxOCkgT25jZSB0aGlzIHdlZWsgaGFzIGVsYXBzZWQsIHN1Ym1pdCBhbiBhbm5vdW5lbWVudCBvZiB0aGUgbmV3CisgICAgIHJlbGVhc2UgdG8gbmV0LXNubXAtYW5ub3VuY2UuICBUaGlzIG1lc3NhZ2Ugd2lsbCBuZWVkIHRvIGJlCisgICAgIGV4cGxpY2l0bHkgYXV0aG9yaXplZCB2aWEgTWFpbE1hbi4KKworICAgICBBbHNvIHVwZGF0ZSB0aGUgSVJDIHRvcGljIHRvIGluY2x1ZGUgbWVudGlvbiBvZiB0aGlzIHJlbGVhc2UuCisKKyAxOSkgRm9yIGEgcmVsZWFzZSBvbiB0aGUgbW9zdCByZWNlbnQgZGV2ZWxvcG1lbnQgbGluZSwgc3RhcnQgYnVnZ2luZworICAgICBXZXMgdG8gdXBkYXRlIHRoZSBmcmVzaG1lYXQsIEZyZWUgU29mdHdhcmUgRGlyZWN0b3J5IGFuZAorICAgICBXaWtpcGVkaWEgZW50cmllcy4KKworIDIwKSBGb3IgYSByZWxlYXNlIG9uIHRoZSBtb3N0IHJlY2VudCBkZXZlbG9wbWVudCBsaW5lLCB1cGRhdGUgdGhlCisgICAgICdodGRvY3MvcGFnZS10b3AuaHRtbCcgZmlsZSAoaW4gdGhlIG1haW4gU1ZOIHRydW5rKSB0byByZWZlcmVuY2UKKyAgICAgdGhlIGxhdGVzdCB2ZXJzaW9uLgorCisgICAgIFVwZGF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzIHdpdGggYW55IGNoYW5nZXM6CisKKyAgICAgICAgIGh0ZG9jcy9kb2NzL3JlYWRtZWZpbGVzL05FV1MKKyAgICAgICAgIGh0ZG9jcy9kb2NzL3JlYWRtZWZpbGVzL0NIQU5HRVMKKyAgICAgICAgIGh0ZG9jcy9kb2NzL3JlYWRtZWZpbGVzL1JFQURNRSoKKyAgICAgICAgIGh0ZG9jcy9DT1BZSU5HCisKKyAgICAgW01ha2Ugc3VyZSB5b3UgaGF2ZSBwZXJtaXNzaW9ucyBzZXQgdXAgcHJvcGVybHkgb24gdGhlIHdlYgorICAgICAgc2VydmVyIHNvIHRoYXQgZmlsZXMgY3JlYXRlZCBiZWNvbWUgZ3JvdXAtd3JpdGFibGUhISFdCisgICAgICAgICAKKworIDIxKSBGb3IgYSBtYWpvciBuZXctZmVhdHVyZSByZWxlYXNlIChpLmUuIDUueCksIGNyZWF0ZSB0aGUgcGF0Y2hlcworICAgICBicmFuY2g6CisKKyAgICAgICAgJCBzdm4gY29weSAgL3RhZ3MvRXh0LTUteCAgIC9icmFuY2hlcy9WNS14LXBhdGNoZXMKKworICAgICBhbmQgdXBkYXRlIHRoZSBTVk4gbWFpbiB0cnVuayB3aXRoIGEgbmV3IHZlcnNpb24gbnVtYmVyOgorCisgICAgICAgICQgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCAtdiA1Lih4KzEpLmRldiAtTSAtUCAtQworCisgICAgIFRoZSAxIHdlZWsgZGVsYXkgKGFuZCBjb250aW51ZWQgY29kZSBmcmVlemUpIGlzIHRvIHRvIGVuc3VyZSB0aGF0CisgICAgIGRldmVsb3BlciBlZmZvcnQgaXMgY29uY2VudHJhdGVkIG9uIGltbWVkaWF0ZSBwcm9ibGVtcyBmb2xsb3dpbmcKKyAgICAgdGhlIHJlbGVhc2UuICBBbnkgbWFqb3IgcHJvYmxlbXMgc2hvdWxkIGhvcGVmdWxseSBjb21lIHRvIGxpZ2h0CisgICAgIGR1cmluZyB0aGlzIHBlcmlvZCwgc28gYWZ0ZXIgYSB3ZWVrIGl0IHNob3VsZCBiZSBzYWZlIHRvIGNyZWF0ZQorICAgICB0aGUgcGF0Y2hlcyBicmFuY2ggYW5kIG9mZmljaWFsbHkgZW5kIHRoZSBjb2RlIGZyZWV6ZSBvbiBNQUlOLgorCisgMjIpIFVwZGF0ZSB0aGUgb2ZmaWNpYWwgcGF0Y2hlcyB0cmFja2VyIHNldDoKKworICAgICAtIGFueSBwYXRjaGVzIGZvciB0aGlzIG5ldyByZWxlYXNlIHRhcmJhbGwgc2hvdWxkIGJlIGdpdmVuCisgICAgICAgcHJpb3JpdHkgOQorICAgICAtIGFsbCBwYXRjaGVzIGZvciB0aGUgcHJldmlvdXMgcmVsZWFzZSBvbiB0aGlzIGxpbmUgc2hvdWxkCisgICAgICAgYmUgbWFya2VkIGF0IHByaW9yaXR5IDUKKyAgICAgLSBhbGwgcGF0Y2hlcyBmb3IgZWFybGllciByZWxlYXNlcyBvbiB0aGlzIGxpbmUgc2hvdWxkCisgICAgICAgYmUgbWFya2VkIGF0IHByaW9yaXR5IDEsIGFuZCBjbG9zZWQKKworICAgICBJZiBhIGxpbmUgaGFzIGJlZW4gZGVzaWduYXRlZCBjbG9zZWQsIHRoZW4gYWxsIG9mZmljaWFsCisgICAgIHBhdGNoZXMgZm9yIHRoYXQgbGluZSBzaG91bGQgYmUgbWFya2VkIGFzIGNsb3NlZCBhcyB3ZWxsLgorCisgMjMpIEhpZGUgdGhlIHByZS1yZWxlYXNlIHJlcG9zaXRvcnkgZnJvbSB0aGUgRmlsZSBSZWxlYXNlcworICAgICBhZG1pbiBwYWdlcy4KKworIDI0KSBDbGVhbiB1cCB0aGUgJ2Rpc3QnIGRpciBvZiB0aGUgcmVsZXZhbnQgVjUteC1wYXRjaGVzIGJyYW5jaC4KKyAgICAgT25seSBsZWF2ZSB0aGUgZm9sbG93aW5nIGZpbGVzOgorCisgICAgIGNoYW5nZWxvZ2ZpeCAgY3Zzc2hvdyAgY3ZzdXAgIGV4dHJhY3RuZXdzICBtYWtlcmVsZWFzZQorICAgICBuZXQtc25tcC5zcGVjICBzbm1wZC1pbml0LmQgIHNubXB0cmFwZC1pbml0LmQKKworICAgICBOb3RlIHRoYXQgYW55IGZpbGVzIHJlbW92ZWQgc2hvdWxkIGFsc28gYmUgZGVsZXRlZCBmcm9tCisgICAgIFNWTiByZXBvc2l0b3J5LgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQ1JFQVRJTkcgQklOQVJZIERJU1RSSUJVVElPTlMKKworICAwKSBBbHdheXMgUkVNT1ZFIEFMTCBQUkVWSU9VUyBJTlNUQUxMUyBGSVJTVCwgdGhlbiBkbyBhIG1ha2UgaW5zdGFsbAorICAgICBmcm9tIHRoZSB0YXItYmFsbCBleHRyYWN0ZWQgc291cmNlcyBhbmQgKlRIRU4qIHJlYnVpbGQgYWxsCisgICAgIGJpbmFyaWVzIGFnYWluLiAgVGhpcyBlbnN1cmVzIHRoYXQgZXZlcnl0aGluZyAoZXNwZWNpYWxseSBwZXJsCisgICAgIG1vZHVsZXMpIGFyZSBwcm9wZXJseSBsaW5rZWQgYWdhaW5zdCB0aGUgcmlnaHQgbGlicmFyaWVzLgorCisgIDEpIGFsd2F5cyBidWlsZCByZWxlYXNlcyBmcm9tIGEgdGFyYmFsbCwgbm90IGZyb20gU1ZOLgorCisgIDIpIEFkZCBtaWIgbW9kdWxlcyB0aGF0IGFyZSBjb21tb24uICBCYXNpY2FsbHksIGFkZDoKKworICAgICAgIGhvc3QgICAgICAgICAgICAgICAgICAgICAgLS0gd2hlcmUgc3VwcG9ydGVkLgorICAgICAgIGRpc21hbi9ldmVudC1taWIKKyAgICAgICBzbXV4CisKKyAgMykgdXNlIC0td2l0aC1kZWZhdWx0cyAtLXdpdGgtc3lzY29udGFjdD0iVW5rbm93biIgCisgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLXN5c2xvY2F0aW9uPSJVbmtub3duIgorCisgIDQpIHdoZW4gcnVubmluZyBtYWtlIGluc3RhbGwsIGRvIGl0IGxpa2U6CisKKyAgICAgJCBtYWtlIGluc3RhbGwgcHJlZml4PS9zb21lL3BhdGgvdG8vaG9tZS9BUkNIL3Vzci9sb2NhbCBcCisgICAgICAgICAgICBleGVjX3ByZWZpeD0vc29tZS9wYXRoL3RvL2hvbWUvQVJDSC91c3IvbG9jYWwKKyAgICAKKyAgNSkgVGFyIGl0IHVwOgorCisgICAgICQgY2QgL3NvbWUvcGF0aC90by9ob21lL0FSQ0gKKyAgICAgJCB0YXIgY3pmIG5ldC1zbm1wLTUuMC4zLUFSQ0gudGFyLmd6IHVzci9sb2NhbAorCisgIDYpIHVwbG9hZCBhbmQgcmVsZWFzZSwgbGlrZSB5b3UgZGlkIGZvciB0aGUgc291cmNlIGNvZGUgYnV0IHdpdGggYQorICAgICBkaWZmZXJlbnQgcGFja2FnZSBuYW1lIGZvciBiaW5hcmllcyAoNS4wLjMgYmluYXJpZXMpLgorCisgIDcpIFJQTXMgW2RvIHRoaXMgaW4gbWFpbiBsaW5lIGV2ZW4gaWYgaXRzIGZvciBhIHBhdGNoIGJyYW5jaF06CisgICAgICQgY2QgZGlzdAorICAgICAkIGNwIC4uL25ldC1zbm1wLTUuMC44LnRhci5neiBycG0vU09VUkNFUworICAgICAkIG1ha2UgUkVMRUFTRT0xCisgICAgIAorICAgICBUaGlzIHNob3VsZCBwdXQgbXVsdGlwbGUgYmluYXJ5IHJwbSBmaWxlcyBpbjoKKyAgICAgICBkaXN0L3JwbS9SUE1TL2kzODYvCisgICAgIEFuZCBvbmUgc291cmNlIFJQTSBpbjoKKyAgICAgICBkaXN0L3JwbS9TUlBNUy8KKworICAgICAqKiogVGhlc2UgZmlsZXMgbmVlZCB0byBiZSByZW5hbWVkIHRvIGluY2x1ZGUgdGhlIE9TIHZlcnNpb24uCisKKyAgICAgICAgIEVHOiAuLi5pMzg2LnJwbSBuZWVkcyB0byBiZWNvbWUgLi4uZmM1LmkzODYucnBtCisKKyAgOCkgUmVtb3ZlIChvciBoaWRlKSBiaW5hcmllcyBmcm9tIG9sZGVyIHJlbGVhc2VzIG9mIHRoZSBzYW1lIGxpbmUsCisgICAgIHdoZXJlIHlvdSBoYXZlIHN1Ym1pdHRlZCBhIG5ld2VyIGJpbmFyeSBmb3IgdGhlIHNhbWUgYXJjaGl0ZWN0dXJlLgorICAgICBPbmNlIHRoZSBsYXN0IGJpbmFyeSBmb3IgYSBwYXJ0aWN1bGFyIHJlbGVhc2UgdmVyc2lvbiBoYXMgYmVlbgorICAgICByZW1vdmVkLCBoaWRlIHRoYXQgcmVwb3NpdG9yeS4KKyAgICAgCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitNQU5VQUwgLSBTVEVQIDEKKworICBDaGFuZ2luZyB0aGUgbGlidG9vbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIE1ha2VmaWxlLnRvcC4KKworICAgICAgLSBJZiBhbnkgaW50ZXJmYWNlcy9zdHJ1Y3R1cmVzIGhhdmUgYmVlbiByZW1vdmVkIG9yIGNoYW5nZWQgc2luY2UgdGhlCisgICAgICAgIGxhc3QgdXBkYXRlLCBpbmNyZW1lbnQgY3VycmVudCAoKzUpLCBhbmQgc2V0IGFnZSBhbmQgcmV2aXNpb24gdG8gMC4KKyAgICAgICAgU3RvcCEKKworICAgICAgLSBJZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlIGxhc3QgcHVibGljIHJlbGVhc2UsCisgICAgICAgIHRoZW4gaW5jcmVtZW50IGN1cnJlbnQgYW5kIGFnZSwgYW5kIHNldCByZXZpc2lvbiB0byAwLgorICAgICAgICBTdG9wIQorCisgICAgICAtIElmIHRoZSBzb3VyY2UgY29kZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlIGxhc3QgdXBkYXRlLAorICAgICAgICB0aGVuIGluY3JlbWVudCByZXZpc2lvbiAoYzpyOmEgYmVjb21lcyBjOnIrMTphKS4KKworICAgICAgTm90ZTogbWFpbnRlbmFuY2UgcmVsZWFzZXMgKGVnIDUuMi54KSBzaG91bGQgbmV2ZXIgaGF2ZSBjaGFuZ2VzCisgICAgICAgICAgICB0aGF0IHdvdWxkIHJlcXVpcmUgY3VycmVudCB0byBiZSBpbmNyZW1lbnRlZC4KKworICBUaGUgY2hlY2stYXBpLWNoYW5nZXMgc2NyaXB0IGluIHRoZSBkaXN0IGRpcmVjdG9yeSB3aWxsIGNvbnN0cnVjdCBhCisgIGRpZmYgb2YgYWxsIGhlYWRlcnMsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIGRldGVybWluaW5nIGlmIGFueXRoaW5nCisgIG5lZWRzIGJ1bXBpbmcuCisKKyAgICAgVXBkYXRlIHRoZXNlIHZhcmlhYmxlcyBub3csIHNvIHRoYXQgd2hlbiB5b3UgcnVuCisgICAgIG1ha2UgaW4gYSBzZWNvbmQgdG8gdGVzdCB0aGluZ3MgeW91IGNhbiBzcG90IGxpYnRvb2wgeWVsbGluZworICAgICBhYm91dCBpbXByb3BlciBudW1iZXJpbmcgYmVmb3JlIHlvdSBtYWtlIHRoZSByZWxlYXNlIGFuZCBub3QKKyAgICAgYWZ0ZXIgeW91J3ZlIHVwbG9hZGVkIHRoZSB0YXIgYmFsbCA6LS8KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK01BTlVBTCAtIFNURVAgMgorCisgIENoYW5naW5nIHRoZSBsaWJ0b29sIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gTWFrZWZpbGUudG9wLgorICBVcGRhdGluZyB0aGUgQ2hhbmdlTG9nIGZpbGUKKworICAgICAgLSBUaGUgQ2hhbmdlTG9nIGVudHJpZXMgYXJlIGV4dHJhY3RlZCAobm9ybWFsbHkgYXV0b21hdGljYWxseSkKKyAgICAgICAgdXNpbmcgdGhlIGNvbW1hbmQ6CisKKyAgICAgICAgICAkIHN2bjJjbCAtZiBDaGFuZ2VMb2cuYWRkIC0tYnJlYWstYmVmb3JlLW1zZyAtLXN0b3Atb24tY29weQorCisgICAgICAgIElmIHlvdSBkb24ndCBoYXZlIHN2bjJjbCBpbnN0YWxsZWQsIHlvdSBjYW4gdHJ5IGFuZCBmaW5kIGEKKyAgICAgICAgc3VpdGFibGUgYmluYXJ5IHBhY2thZ2UgZm9yIHlvdXIgYXJjaGl0ZWN0dXJlLCBvciB5b3UgY2FuCisgICAgICAgIGdldCBpdCBkaXJlY3RseSBmcm9tCisgICAgICAgICAgICAgIGh0dHA6Ly9jaC50dWRlbGZ0Lm5sL35hcnRodXIvc3ZuMmNsCisgICAgICAgIFlvdSBtYXkgbmVlZCB0byByZW5hbWUgdGhlIHNjcmlwdCBmcm9tICdzdm4yY2wuc2gnIHRvICdzdm4yY2wnCisKKyAgICAgIC0gSW4gZWl0aGVyIGNhc2UsIHRoZXkgYXJlIGZpeGVkIHVwIChhdXRvbWF0aWNhbGx5KSB1c2luZzoKKworICAgICAgICAgICQgcGVybCBkaXN0L2NoYW5nZWxvZ2ZpeCA8IENoYW5nZUxvZy5hZGQgPiBDaGFuZ2VMb2cucmVhbGx5YWRkCisgICAgICAgIG9yCisgICAgICAgICAgJCBwZXJsIGRpc3QvY2hhbmdlbG9nZml4IFY1LXtOfS1wYXRjaGVzIDwgQ2hhbmdlTG9nLmFkZCA+IENoYW5nZUxvZy5yZWFsbHlhZGQKKworICAgICAgLSBUaGUgbWFudWFsIHByb2Nlc3Npbmcgc3RlcCBpcyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlIHBvcnRpb24KKyAgICAgICAgb2YgdGhlIGZpbGUgJ0NoYW5nZUxvZy5yZWFsbHlhZGQnIGludG8gJ0NoYW5nZUxvZycuICBZb3UgY2FuCisgICAgICAgIHVzdWFsbHkgZmluZCB0aGUgcG9pbnQgd2hlcmUgdGhlIHByZXZpb3VzIHJlbGVhc2Ugc3RhcnRlZCBpbgorICAgICAgICB0aGUgZmlsZSBieSBzZWFyY2hpbmcgZm9yICJ2ZXJzaW9uIHRhZyIuCisKKyAgICAgIC0gUGxlYXNlIGtlZXAgdGhlIGxpbmUgb2YgZGFzaGVzIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUsIGFzIHRoaXMKKyAgICAgICAgbWFrZXMgaXQgZWFzaWVyIHRvIGNvcHkgZHVyaW5nIHRoZSBuZXh0IHJlbGVhc2UuCisKKyAgICAgIC0gSWYgdXNpbmcgZW1hY3MsIHN3aXRjaCBmcm9tIGNoYW5nZWxvZy1tb2RlIHRvIHRleHQtbW9kZS4KKworICAgICAgLSBDaGVjayBpbiB0aGUgbmV3IENoYW5nZUxvZzoKKworICAgICAgICAgICQgc3ZuIGNvbW1pdCAtbSAidXBkYXRlIGZvciByZWxlYXNlIFgiIENoYW5nZUxvZworCisgICAgICAgIFRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5ICJtYWtlcmVsZWFzZSIKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK01BTlVBTCAtIFNURVAgMworCitVcGRhdGluZyBSRUFETUUsIE5FV1MsIGFuZCBDSEFOR0VTIGZpbGVzCisKKyAgWyBUaGlzIGluZm9ybWF0aW9uIGhhcyBiZWVuIG1vdmVkIHRvOgorCisgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL0NvbW1pdF9tZXNzYWdlX2F1dG8tZXh0cmFjdGlvbl9mb3JtYXRzCisKKyAgXQorCitIb3dldmVyLCBsZWF2aW5nIHNvbWUgZXhhbXBsZXMgaGVyZSBmb3IgcXVpY2sgcmVmZXJyYWw6CisKKyAgU1ZOIGNvbW1pdCBtZXNzYWdlcyB0aGF0IGdlbmVyYXRlIGF1dG8tTkVXUyBhbmQgYXV0by1DSEFOR0VTCisgIGV4dHJhY3Rpb25zIHNob3VsZCBiZSBmb3JtYXR0ZWQgbGlrZSB0aGUgZm9sbG93aW5nIGV4YW1wbGVzOgorCisgICAgTkVXUzogc25tcGQ6IEkgZGlkIHNvbWV0aGluZyByZWFsbHkgY29vbCB0byB0aGUgYWdlbnQKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IGZpeGVkIHNvbWV0aGluZyBtaW5vciBpbiBzbm1wdHJhcGQKKyAgICBORVdTOiBwZXJsOiBQQVRDSDogMTIzLDQ1NjogQXBwbGllZCBwYXRjaGVzIDEyMyBhbmQgNDU2IHRvIHN1cHBvcnQgcGVybDYKKyAgICBDSEFOR0VTOiBCVUc6IDEzOiBGaXhlZCBidWcgMTMgJiBzZWN1cmVkIHRoZSB3b3JsZCBhdCBsYXJnZSBhZ2FpbnN0IGhhY2tlcnMKKyAgICBORVdTOiBwZXJsOiBQQVRDSDogMTIzOiBmcm9tIFJvYmVydDogZGlkIHNvbWV0aGluZworICAgIE5FV1M6IHBlcmw6IFBBVENIOiAxMjM6IGZyb20gIlJvYmVydCBTdG9yeSI6IGRpZCBzb21ldGhpbmcgZWxzZQpkaWZmIC0tZ2l0IGEvZGlzdC9hdXRvY29uZi12ZXJzaW9uIGIvZGlzdC9hdXRvY29uZi12ZXJzaW9uCmluZGV4IGFjYzA3OTcuLjI2NGYyY2UgMTAwNjQ0Ci0tLSBhL2Rpc3QvYXV0b2NvbmYtdmVyc2lvbgorKysgYi9kaXN0L2F1dG9jb25mLXZlcnNpb24KQEAgLTEgKzEgQEAKLTIuNTkKKzIuNjgKZGlmZiAtLWdpdCBhL2Rpc3QvY2hlY2stYXBpLWNoYW5nZSBiL2Rpc3QvY2hlY2stYXBpLWNoYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZjYxZTQyCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9jaGVjay1hcGktY2hhbmdlCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorIworIyBzaW1wbGlzdGljIHNjcmlwdCB0byBjaGVjayBhbGwgaGVhZGVyIGZpbGVzIGZvcgorIyBkaWZmZXJlbmNlcy4gSW50ZW5kZWQgdG8gaGVscCBkZXRlY3QgYXBpIGNoYW5nZXMKKyMgYmV0d2VlbiByZWxlYXNlcy4KKyMKKyMgaXQncyBub3QgcHJldHR5IG9yIGVmZmljaWVudCwgYW5kIGluc3BlY3Rpb24gb2YKKyMgdGhlIHJlc3VsdHMgbXVzdCBiZSBkb25lIG1hbnVhbGx5LgorIworIyBpdCdzIGFsc28gbm90IHNlY3VyZSAoZG9uJ3QgcnVuIGFzIHJvb3QpCisjIG9yIHBvcnRhYmxlLiBUZXN0ZWQgb24gTGludXguCisjCisKK2lmIFsgIngkMSIgPSAieCIgLW8gIngkMiIgPSAieCIgXTsgdGhlbgorICAgZWNobyAiVXNhZ2U6ICQwIDxvbGQtZGlyPiA8bmV3LWRpcj4iCisgICBleGl0IDEKK2ZpCisKK29kPSQxCituZD0kMgorRElSPS90bXAKK09VVFBVVD0kRElSL2FwaS1kaWZmLnBhdAorT0RUPSRESVIvYXBpLW9kCisKK2lmIFsgISAtZCAkb2QgXTsgdGhlbgorICAgZWNobyAib2xkIGRpciAkb2QgZG9lc24ndCBleGlzdCIKKyAgIGV4aXQgMQorZmkKKworaWYgWyAhIC1kICRuZCBdOyB0aGVuCisgICBlY2hvICJvbGQgZGlyICRuZCBkb2Vzbid0IGV4aXN0IgorICAgZXhpdCAxCitmaQorCisjIGZpbmQgaGVhZGVyIGluIG5kCitybSAtZiAkT1VUUFVUICRPRFQgMj4vZGV2L251bGwKKyhjZCAkb2QgJiYgZmluZCAuIC10eXBlIGYgLW5hbWUgIiouaCJ8c29ydCA+ICRPRFQpCisKK09IPWBjYXQgJE9EVGAKK2ZvciBoIGluICRPSAorZG8KKyAgIG5oPSRuZC8kaAorICAgb2g9JG9kLyRoCisgICBlY2hvICIqICRuaCIKKyAgIGlmIFsgLWYgIiRuaCIgXTsgdGhlbgorICAgICAgZWNobyAiKiBkaWZmOiAkaCB2cyAkbmgiID4+ICRPVVRQVVQKKyAgICAgIGRpZmYgLXUgJG9oICRuaCA+PiAkT1VUUFVUIDI+JjEKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiogT2xkIGhlYWRlciAkaCBub3QgZm91bmQgaW4gbmV3IGhlYWRlcnMiID4+ICRPVVRQVVQKKyAgIGZpCitkb25lCisKK2VjaG8gIkluc3BlY3Qgb3V0cHV0IGluICRPVVRQVVQiCitlY2hvICJTZWUgTWFrZWZpbGUudG9wIGZvciBsaWJ0b29sIHZlcnNpb24gYnVtcGluZyBydWxlcy4iCmRpZmYgLS1naXQgYS9kaXN0L2N2c3Nob3cgYi9kaXN0L2N2c3Nob3cKaW5kZXggNjIzYjMyZC4uNzUzOTU5NSAxMDA3NTUKLS0tIGEvZGlzdC9jdnNzaG93CisrKyBiL2Rpc3QvY3Zzc2hvdwpAQCAtMSw0NiArMSw2OSBAQAotIyEvYmluL2Jhc2gKLSMKLSMgJElkJAorIyEvYmluL3NoCiAjCiBleHBvcnQgQ1ZTX1JTSD1zc2gKIFRBRz0KIAotaWYgWyAkIyAtZXEgMCBdOyB0aGVuCi0JRElSPS4KLWVsc2UKLQlpZiBbICQjIC1uZSAxIF07IHRoZW4KLQkJZWNobyAidXNhZ2U6ICQwIDx3b3JraW5nIGRpcmVjdG9yeT4iCi0JCWV4aXQKLQlmaQotCURJUj0kMQotZmkKLQotaWYgWyAhIC1kICRESVIgXTsgdGhlbgotCWVjaG8gIm5vIHN1Y2ggZGlyZWN0b3J5ICckRElSJyIKLQlleGl0Ci1maQotCi1pZiBbICEgLWQgJERJUi9DVlMgXTsgdGhlbgotCWVjaG8gIickRElSJyBoYXMgbm8gQ1ZTIGRpcmVjdG9yeSEiCi0JZXhpdAotZmkKLQotaWYgWyAhIC1mICRESVIvQ1ZTL1JlcG9zaXRvcnkgXTsgdGhlbgorZG9fY3ZzKCkKK3sKKyAgIERJUj0kMQorICAgaWYgWyAhIC1mICRESVIvQ1ZTL1JlcG9zaXRvcnkgXTsgdGhlbgogCWVjaG8gIickRElSJyBoYXMgbm8gQ1ZTL1JlcG9zaXRvcnkhIgogCWV4aXQKLWZpCisgICBmaQogCi1pZiBbICEgLWYgJERJUi9DVlMvUm9vdCBdOyB0aGVuCisgICBpZiBbICEgLWYgJERJUi9DVlMvUm9vdCBdOyB0aGVuCiAJZWNobyAiJyRESVInIGhhcyBubyBDVlMvUm9vdCEiCiAJZXhpdAotZmkKKyAgIGZpCiAKLWlmIFsgLWYgJERJUi9DVlMvVGFnIF07IHRoZW4KKyAgIGlmIFsgLWYgJERJUi9DVlMvVGFnIF07IHRoZW4KIAlUQUc9Ii1yIGBjYXQgJERJUi9DVlMvVGFnIHwgY3V0IC1jIDItYCIKKyAgIGZpCisKKyAgIFJFUD0iYGNhdCAkRElSL0NWUy9SZXBvc2l0b3J5YCIKKyAgIFJPT1Q9ImBjYXQgJERJUi9DVlMvUm9vdGAiCisKKyAgIGVjaG8gIkRpcmVjdG9yeSAkRElSIGlzIHJvb3RlZCBhdCAkUk9PVCwgJFRBRyAkUkVQLi4uIgorICAgZWNobyAiICAgdXBkYXRlIHdpdGggY3ZzIC16MyAtZCAkUk9PVCAtcSBjbyAkVEFHIC1kICRESVIgJFJFUCIKK30KKworZG9fc3ZuKCkKK3sKKyAgIERJUj0kMQorICAgaWYgWyAhIC1kICRESVIvLnN2biBdOyB0aGVuCisJZWNobyAiJyRESVInIGhhcyBubyAuc3ZuLyBzdWJkaXIhIgorCWV4aXQKKyAgIGZpCisKKyAgIFJPT1Q9YHN2biBpbmZvIHwgZ3JlcCBVUkx8Y3V0IC1mMiAtZCAiICJgCisgICBpZiBbIC16ICIkUk9PVCIgXTsgdGhlbgorICAgICAgZWNobyAiQ291bGRuJ3QgZmluZCByb290IGZyb20gJERJUi8uc3ZuL2VudHJpZXMiCisgICAgICBleGl0IDEKKyAgIGZpCisKKyAgIGVjaG8gIkRpcmVjdG9yeSAkRElSIGlzIHJvb3RlZCBhdCAkUk9PVC4uLiIKKyAgIGVjaG8gIiAgIHVwZGF0ZSB3aXRoIHN2biBjbyAkUk9PVCAkRElSIgorfQorCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKwlESVJTPS4KK2Vsc2UKKwlESVJTPSRACiBmaQogCi1SRVA9ImBjYXQgJERJUi9DVlMvUmVwb3NpdG9yeWAiCi1ST09UPSJgY2F0ICRESVIvQ1ZTL1Jvb3RgIgorZm9yIGQgaW4gJERJUlMKK2RvCisgICBpZiBbICEgLWQgJGQgXTsgdGhlbgorCWVjaG8gIm5vIHN1Y2ggZGlyZWN0b3J5ICckZCciCisJZXhpdAorICAgZmkKIAotZWNobyAiRGlyZWN0b3J5ICRESVIgaXMgcm9vdGVkIGF0ICRST09ULCAkVEFHICRSRVAuLi4iCi1lY2hvICJ1cGRhdGUgd2l0aCBjdnMgLXozIC1kICRST09UIC1xIGNvICRUQUcgLWQgJERJUiAkUkVQIgorICAgaWYgWyAtZCAkZC9DVlMgXTsgdGhlbgorCWRvX2N2cyAkZAorICAgZWxpZiBbIC1kICRkLy5zdm4gXTsgdGhlbgorCWRvX3N2biAkZAorICAgZWxzZQorCWVjaG8gIickZCcgaGFzIG5laXRoZXIgQ1ZTIG5vciBTVk4gaW5mb3JtYXRpb24hIgorICAgZmkKK2RvbmUKKwpkaWZmIC0tZ2l0IGEvZGlzdC9jdnN1cCBiL2Rpc3QvY3ZzdXAKaW5kZXggMDhjOGE3NS4uY2EwN2IwZiAxMDA3NTUKLS0tIGEvZGlzdC9jdnN1cAorKysgYi9kaXN0L2N2c3VwCkBAIC0xLDggKzEsOCBAQAotIyEvdXNyL2Jpbi9lbnYgYmFzaAorIyEvYmluL3NoCiAjCiAjICRJZCQKICMKLWV4cG9ydCBDVlNfUlNIPXNzaAorQ1ZTX1JTSD1zc2g7IGV4cG9ydCBDVlNfUlNICiBUQUc9CiBXTz0wCiBERVNUPQpAQCAtMTgsNiArMTgsNyBAQAogICAgICAgICBUQVI9Jy91c3IvYmluL3N0YXIgLUh1c3RhciAtbm90IC1wYXQ9IiovQ1ZTLyoiIC1jIC1mJwogICAgIGVsaWYgWyAteCAvYmluL3RhciBdOyB0aGVuCiAgICAgICAgIFRBUj0iL2Jpbi90YXIgLS1leGNsdWRlPUNWUyAtYyAtZiIKKyAgICAgICAgZWNobyAid2FybmluZzogc3RhciBub3QgYXZhaWxhYmxlLCB1c2luZyAobGVzcyBwb3J0YWJsZSkgdGFyLi4uIgogICAgIGVsc2UKICAgICAgICAgZWNobyAibmVpdGhlciAvdXNyL2Jpbi9zdGFyIG5vciAvYmluL3RhciBmb3VuZC4iCiAgICAgICAgIGV4aXQKZGlmZiAtLWdpdCBhL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi1zZWN1cml0eS1oZWFkZXJzLmluIGIvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXNlY3VyaXR5LWhlYWRlcnMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU1ODgxYQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi1zZWN1cml0eS1oZWFkZXJzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisjIHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBjcmVhdGluZyBhIGZ1bGwgY29uZmlndXJlLWxpa2UKKyMgc2NyaXB0LCBidXQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjYWxsIG00IGRpcmVjdGx5LgorQUNfSU5JVChbTmV0LVNOTVBdLCBbNS42LnByZTJdLCBbbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCisKK0FDX0FSR19XSVRIKHNlY3VyaXR5LW1vZHVsZXMsCitbICAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgKHNwYWNlIG9yIGNvbW1hIHNlcGFyYXRlZCBsaXN0KS5dKQorQUNfQVJHX1dJVEgob3V0cHV0LWhlYWRlciwKK1sgIC0td2l0aC1vdXRwdXQtaGVhZGVyPSJmaWxlIiAgICAgICAgICAgIFdoZXJlIHRvIHN0b3JlIHRoZSBoZWFkZXIgZmlsZV0pCitBQ19BUkdfV0lUSChvdXRwdXQtaW5pdCwKK1sgIC0td2l0aC1vdXRwdXQtaW5pdD0iZmlsZSIgICAgICAgICAgICAgIFdoZXJlIHRvIHN0b3JlIHRoZSBpbml0IGZpbGVdKQorCittNF9pbmNsdWRlKGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMpCisKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUsICIkTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIikKKworaWYgdGVzdCAieCR3aXRoX291dHB1dF9oZWFkZXIiICE9ICJ4IiA7IHRoZW4KKyAgICBzZWN1cml0eV9pbmNsX2ZpbGU9IiR3aXRoX291dHB1dF9oZWFkZXIiCitmaQorCitpZiB0ZXN0ICJ4JHdpdGhfb3V0cHV0X2luaXQiICE9ICJ4IiA7IHRoZW4KKyAgICBzZWN1cml0eV9pbml0X2ZpbGU9IiR3aXRoX291dHB1dF9pbml0IgorZmkKKworbTRfaW5jbHVkZShjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzKQorCisKZGlmZiAtLWdpdCBhL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi10cmFuc3BvcnQtaGVhZGVycy5pbiBiL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi10cmFuc3BvcnQtaGVhZGVycy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWE3YmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXRyYW5zcG9ydC1oZWFkZXJzLmluCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCisjIHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBjcmVhdGluZyBhIGZ1bGwgY29uZmlndXJlLWxpa2UKKyMgc2NyaXB0LCBidXQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjYWxsIG00IGRpcmVjdGx5LgorQUNfSU5JVChbTmV0LVNOTVBdLCBbNS42LnByZTJdLCBbbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCisKK0FDX0FSR19XSVRIKHRyYW5zcG9ydHMsCitbICAtLXdpdGgtdHJhbnNwb3J0cz0idDEgdDIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuXSkKK0FDX0FSR19XSVRIKG91dF90cmFuc3BvcnRzLAorWyAgLS13aXRoLW91dC10cmFuc3BvcnRzPSJ0MSAuLi4iICBFeGNsdWRlIGxpc3RlZCBTTk1QIHRyYW5zcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuXSkKKworQUNfQVJHX1dJVEgob3V0cHV0LAorWyAgLS13aXRoLW91dHB1dD0iZmlsZSIgICAgICAgICAgICBXaGVyZSB0byBzdG9yZSB0aGUgaGVhZGVyIGZpbGVdKQorCittNF9pbmNsdWRlKGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMpCisKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUsICIkTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIikKKworaWYgdGVzdCAieCR3aXRoX291dHB1dCIgIT0gIngiIDsgdGhlbgorICAgIGN0b3JfaGVhZGVyPSR3aXRoX291dHB1dAorZmkKKworbTRfaW5jbHVkZShjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzKQorCisKZGlmZiAtLWdpdCBhL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW4gYi9kaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjkyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgY29tbW9uIHZhcmlhYmxlcyB1c2VkIGJ5IGNvbmZpZ3VyZSBzY3JpcHRzCisjCitTRUQ9IkBTRURAIgorQ1BQPSJAQ1BQQCIKK0dSRVA9IkBHUkVQQCIKK1BBUlRJQUxUQVJHRVRGTEFHUz0iQFBBUlRJQUxUQVJHRVRGTEFHU0AiCitORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEU9IkBhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEVAIgorCitzcmNkaXI9QHNyY2RpckAKZGlmZiAtLWdpdCBhL2Rpc3QvbWFrZXJlbGVhc2UgYi9kaXN0L21ha2VyZWxlYXNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiNDZiOWY5Li4wMDAwMDAwCi0tLSBhL2Rpc3QvbWFrZXJlbGVhc2UKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0KLXVzZSBzdHJpY3Q7Ci11c2UgUG9kOjpVc2FnZTsKLQotCi1teSAlb3B0czsKLW15ICRkZXNjcjsKLQotTG9jYWxHZXRPcHRpb25zKFwlb3B0cywKLQkgICBbJ3J8cmVnZXhwLWlnbm9yZS1zdGVwcz1zJywnSWdub3JlIHRoZXNlIFJFR0VYUCBzdGVwcyddLAotCSAgIFsnc3xzdGFydC1hdD1zJywgICAgICAgICAgICdTa2lwIGFsbCBzdGVwcyB1bnRpbCBBUkcnXSwKLQkgICBbJ2l8aW50ZXJhY3RpdmUnLCAgICAgICAgICAnUHJvbXB0IHdoZXRoZXIgdG8gZG8gZWFjaCBzdGVwJ10sCi0JICAgWydufGRyeS1ydW4nLCAgICAgJ0RyeSBydW4gb25seS4gIERvblwndCBhY3R1YWxseSBkbyBhbnl0aGluZy4nXSwKLQkgICBbJ2h8aGVscCcsICdIZWxwJ10pOwotCi1wb2QydXNhZ2UoMSkgaWYgKCRvcHRzeydoJ30pOwotbXkgJHZlcnNpb24gPSBzaGlmdDsKLXBvZDJ1c2FnZSggIk5vIHZlcnNpb24gc3VwcGxpZWQiICkgaWYgKCEkdmVyc2lvbik7Ci1teSAkZXh0cmFqdW5rID0gc2hpZnQ7Ci1wb2QydXNhZ2UoICJVbmV4cGVjdGVkIGFyZ3VtZW50ICgkZXh0cmFqdW5rKSIgKSBpZiAoJGV4dHJhanVuayk7Ci1teSAkdnRhZyAgID0gJHZlcnNpb247Ci1teSAkYnJhbmNoID0gIiI7Ci0jIEVuc3VyZSB3ZSBoYXZlIGJvdGggbnVtZXJpYyBhbmQgdGFnLXN0eWxlIHZlcnNpb24gbGFiZWxzCi0jIHBsdXMgdGhlIGJyYW5jaCB0aGF0IHdlJ3JlIHdvcmtpbmcgZnJvbSAoaWYgcmVsZXZhbnQpCi1pZiAoICR2ZXJzaW9uID1+IC9eRXh0LykgewotICAgICR2ZXJzaW9uID1+IHMvXkV4dC0vL2c7Ci0gICAgJHZlcnNpb24gPX4gcy8tLy4vZzsKLX0gZWxzZSB7Ci0gICAgJHZ0YWcgPX4gcy9cLi8tL2c7Ci0gICAgJHZ0YWcgPSAiRXh0LSIgLiAkdnRhZzsKLX0KLWlmICggJHZlcnNpb24gPX4gL14oWzAtOV1cLlswLTldKVwuWzAtOV0vKSB7Ci0gICAgKCRicmFuY2ggPSAkdmVyc2lvbikgPX4gcy8oWzAtOV1cLlswLTldKVwuWzAtOV0uKi9cMS87Ci0gICAgJGJyYW5jaCA9fiBzL1wuLy0vOwotICAgICRicmFuY2ggPSAiViR7YnJhbmNofS1wYXRjaGVzIjsKLX0KLQotIyBNYWtlIHN1cmUgd2UncmUgYXQgdGhlIHJvb3Qgb2YgdGhlIGJ1aWxkIHRyZWUKLSMgIChpZiB3ZSdyZSBpbiB0aGUgZGlzdCBkaXJlY3RvcnksIHRoZW4gY2QgLi4pCi1jaGRpcigiLi4iKSBpZiAoLWYgJ21ha2VyZWxlYXNlJyk7Ci1kaWUgIk5vdCBhdCByb290IG9mIGJ1aWxkIHRyZWUiIGlmICghIC1mICdjb25maWd1cmUuaW4nKTsKLQotIwotIyAgVEVTVElORzoKLSMKLSMgU3RlcCAxKSBFbnN1cmUgdGhlIGJ1aWxkIHRyZWUgaXMgdXAgdG8gZGF0ZQotU3lzdGVtKCJ1cGRhdGUiLCJzdm4gLXUgc3RhdHVzIik7Ci1TeXN0ZW0oInVwZGF0ZSIsInN2biAtcSB1cGRhdGUiKTsKLQotIyBTdGVwIDIpIENoYW5nZSB0aGUgbGlidG9vbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIE1ha2VmaWxlLnRvcAotbWFudWFsc3RlcCgndmVyc2lvbjptYW51YWxlZGl0JywKLQkgICAiWW91IChtYXkpIG5lZWQgdG8gZWRpdCBNYWtlZmlsZS50b3AgdG8gdXBkYXRlIHRoZSBsaWJyYXJ5IHZlcnNpb24gbnVtYmVyaW5nCi0gICAgICh1c3VhbGx5IGp1c3QgZm9yIHRoZSBmaXJzdCBwcmUtcmVsZWFzZSBvZiBhIGdpdmVuIHZlcnNpb24pLgotICAgICAgICBTZWUgdGhlIGNvbW1lbnRzIGluIFJFTEVBU0UtSU5TVFJVQ1RJT05TCi0gICAgICAgIGFib3V0IExJQkNVUlJFTlQsIExJQkFHRSBhbmQgTElCUkVWSVNJT04uCi0KLSAgSSdsbCBjb21taXQgdGhlIGZpbGUgZm9yIHlvdSBhZnRlciB5b3UncmUgZG9uZQotIik7Ci1TeXN0ZW0oInZlcnNpb246Y29tbWl0IiwKLSAgICAgICAic3ZuIGNvbW1pdCAtbSBcInZlcnNpb24gdXBkYXRlXCIgTWFrZWZpbGUudG9wIik7Ci0KLSMgU3RlcCAzKSBjb25maWd1cmUgYW5kIGJ1aWxkIGFuZCB0ZXN0IGl0Ci1teSAkdHJhbnNwb3J0YXJncyA9ICIiOwotaWYgKCAkXk8gZXEgImxpbnV4IiApIHsKLSAgICAkdHJhbnNwb3J0YXJncyA9ICItLXdpdGgtdHJhbnNwb3J0cz1JUFgiOwotfQotbXkgJGNvbmZpZ3VyZWFyZ3MgPSAiLS1jYWNoZT1jb25maWcuY2FjaGUgLS13aXRoLWRlZmF1bHRzICIuCi0gICAgIi0td2l0aC1taWItbW9kdWxlcz0nICAgICBleGFtcGxlcyBleGFtcGxlcy9leGFtcGxlICAgIi4KLSAgICAiICB0ZXN0aGFuZGxlciBzbXV4IFJtb24nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLgotICAgICIgJHRyYW5zcG9ydGFyZ3MgICAgICAgIC0tZW5hYmxlLWlwdjYgICAgICAgICAgICAgICAgICIuCi0gICAgIi0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgLS1lbmFibGUtc2hhcmVkIjsKLVN5c3RlbSgiYnVpbGQ6ZGlzdGNsZWFuIiwibWFrZSBkaXN0Y2xlYW4iKSBpZiAoLWYgJ01ha2VmaWxlJyk7Ci1TeXN0ZW0oImJ1aWxkOmNvbmZpZ3VyZSIsIi4vY29uZmlndXJlICRjb25maWd1cmVhcmdzIik7Ci1TeXN0ZW0oImJ1aWxkOm1ha2UiLCJtYWtlIik7Ci1TeXN0ZW0oImJ1aWxkOnRlc3QiLCJtYWtlIHRlc3QgVEVTVE9QVFM9LW4iKTsKLQotIwotIyBET0NVTUVOVEFUSU9OCi0jCi0jIFN0ZXAgNCkgVXBkYXRlIGRveHlnZW4gdmVyc2lvbiBudW1iZXIsIGFuZCBnZW5lcmF0ZSBtYW4gcGFnZXMKLVN5c3RlbSgiZG9jczpkb3h5Z2VuY29uZiIsCi0gICAgICAgInBlcmwgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCAtdiAkdmVyc2lvbiAtTSAtUCAtQyAtdCBkb3h5Z2VuIik7Ci1TeXN0ZW0oImRvY3M6bWFrZSIsIm1ha2UgZG9jcyIpOwotU3lzdGVtKCJkb2NzOm1hbmNwIiwibWFrZSBtYW5jcCIpOwotU3lzdGVtKCJkb2NzOnVwZGF0ZSIsInN2biAtdSBzdGF0dXMgbWFuIik7Ci1tYW51YWxzdGVwKCdkb2NzOm1hbnVhbGFkZG5ld21hbicsCi0gICJVcGRhdGUgbWFuL01ha2VmaWxlLmluIHdpdGggZGV0YWlscyBvZiBhbnkgbmV3IG1hbiBwYWdlcywKLSAgYW5kIHJ1biAnc3ZuIGFkZCcgb24gdGhlbS4KLSAgSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyIHlvdSdyZSBkb25lCi0iKTsKLVN5c3RlbSgiZG9jczpjb21taXQiLCJzdm4gY29tbWl0IC1tIFwiZG9jdW1lbnRhdGlvbiB1cGRhdGVcIiBtYW4iKTsKLQotIyBTdGVwIDUpIENoZWNrIGNvZGUgZm9yIGlsbGVnYWwgY29uc3RydWN0cwotU3lzdGVtKCJjb2RlOmNoZWNrY29tbWVudHMiLCJtYWtlIGNoZWNrcyIpOwotCi0jIFN0ZXAgNikgVXBkYXRlIE1ha2VmaWxlIGRlcGVuZGVuY2llcwotU3lzdGVtKCJjb2RlOm1ha2VkZXBlbmQiLCJtYWtlIGRpc3RkZXBlbmQiKTsKLVN5c3RlbSgiY29kZTpjb21taXRkZXBlbmQiLCJzdm4gY29tbWl0IC1tIFwibWFrZSBkZXBlbmRcIiBgZmluZCAuIC1uYW1lIE1ha2VmaWxlLmRlcGVuZGAiKTsKLQotIyBTdGVwIDcpIFVwZGF0ZSBDaGFuZ2VMb2cKLSMgICBYWFg6IE1heSBuZWVkIHRvIGV4dGVuZCB0aGUgZm9sZGluZyBsaW5lLWxlbmd0aCwKLSMgICAgICAgIHRvIGF2b2lkIHN2bjJjbCBtYW5nbGluZyBDSEFOR0VTL05FV1MgZW50cmllcwotU3lzdGVtKCJjaGFuZ2Vsb2c6c3ZuMmNsIiwKLSAgICAgICAic3ZuMmNsIC1mIENoYW5nZUxvZy5hZGQgLS1icmVhay1iZWZvcmUtbXNnIC0tc3RvcC1vbi1jb3B5Iik7Ci1TeXN0ZW0oImNoYW5nZWxvZzpjaGFuZ2Vsb2dmaXgiLAotICAgICAgICJwZXJsIGRpc3QvY2hhbmdlbG9nZml4ICRicmFuY2ggPCBDaGFuZ2VMb2cuYWRkID4gQ2hhbmdlTG9nLnJlYWxseWFkZCIpOwotbWFudWFsc3RlcCgiY2hhbmdlbG9nOm1hbnVhbGVkaXQiLAotICAgICAgICAgICAiWW91IG5lZWQgdG8gbWFudWFsbHkgaW5zZXJ0IHRoZSAqcmVsZXZlbnQqIHBvcnRpb25zIG9mCi0gICdDaGFuZ2VMb2cucmVhbGx5YWRkJyBpbnRvIHRoZSBDaGFuZ2VMb2cgZmlsZS4KLSAgSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyd2FyZHMiKTsKLVN5c3RlbSgiY2hhbmdlbG9nOmNvbW1pdCIsInN2biBjb21taXQgLW0gXCJ2ZXJzaW9uIHVwZGF0ZVwiIENoYW5nZUxvZyIpOwotCi0jIFN0ZXAgOCkgVXBkYXRlIFJFQURNRS9ORVdTL0NIQU5HRVMKLVN5c3RlbSgiZG9jczpuZXduZXdzIiwKLSAgICAgICAicGVybCBkaXN0L2V4dHJhY3RuZXdzIC1zIC0tLS0tIC1lIC0tLS0tIENoYW5nZUxvZyIpOwotU3lzdGVtKCJkb2NzOm5ld25ld3MiLAotICAgICAgICJwZXJsIGRpc3QvZXh0cmFjdG5ld3MgLWMgQ0hBTkdFUy5uZXcyIC1uIE5FV1MubmV3MiBDaGFuZ2VMb2cucmVhbGx5YWRkIik7Ci1tYW51YWxzdGVwKCJkb2NzOlJFQURNRSIsCi0gICAgICAgICAgICJZb3UgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgdGhlIHJlbGV2ZW50IHBvcnRpb25zIG9mCi0gICdDSEFOR0VTLm5ldycgYW5kICdORVdTLm5ldycgaW50byB0aGUgQ0hBTkdFUyBhbmQgTkVXUyBmaWxlLgotICAoVGhlcmUgYXJlIGFsdGVybmF0aXZlIHZlcnNpb25zIGluICdDSEFOR0VTLm5ldzInIGFuZCAnTkVXUy5uZXcyJykKLSAgWW91IG1heSB3aXNoIHRvIHVwZGF0ZSB0aGUgUkVBRE1FIGZpbGUgYXMgd2VsbC4KLSAgSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyd2FyZHMiKTsKLVN5c3RlbSgiZG9jczpjb21taXQiLAotICAgICAgICJzdm4gY29tbWl0IC1tIFwidmVyc2lvbiB1cGRhdGVcIiBSRUFETUUgTkVXUyBDSEFOR0VTIik7Ci0KLSMKLSMgUkVMRUFTRQotIwotIyBTdGVwICA5KSAgUmVzeW5jIGNvZGUgKG9taXR0ZWQpCi0jIFN0ZXAgMTApICBVcGRhdGUgdmVyc2lvbgotU3lzdGVtKCJyZWxlYXNlOnZlcnNpb25zdGFtcCIsCi0gICAgICAgInBlcmwgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCAtdiAkdmVyc2lvbiAtTSAtUCAtQyIpOwotCi0jIFN0ZXAgMTEpICBDcmVhdGUgdGhlIHJlbGVhc2UgdGFnIGNoZWNrcG9pbnQKLW15ICRyb290PSJodHRwczovL25ldC1zbm1wLnN2bi5zb3VyY2Vmb3JnZS5uZXQvc3Zucm9vdC9uZXQtc25tcCI7Ci1pZiAoICRicmFuY2ggKSB7Ci0gICAgU3lzdGVtKCJyZWxlYXNlOnRhZyIsCi0gICAgICAgInN2biBjb3B5IC1tIFwiJHZlcnNpb24gcmVsZWFzZVwiICRyb290L2JyYW5jaGVzLyRicmFuY2ggJHJvb3QvdGFncy8kdnRhZyIpOwotfSBlbHNlIHsKLSAgICBTeXN0ZW0oInJlbGVhc2U6dGFnIiwKLSAgICAgICAic3ZuIGNvcHkgLW0gXCIkdmVyc2lvbiByZWxlYXNlXCIgJHJvb3QvdHJ1bmsgJHJvb3QvdGFncy8kdnRhZyIpOwotfQotCi0jIFN0ZXAgMTIpICBDb25zdHJ1Y3QgdGhlIHRhcmJhbGwKLW15ICR0YXIgPSAic3RhciBhcnR5cGU9dXN0YXIiOyAgICAjIFhYWCAtIGNoZWNrIGZvciBzdGFyL2d0YXIvZXRjCi1TeXN0ZW0oInJlbGVhc2U6bWFrZWRpc3QiLAotICAgICAgICJzdm4gZXhwb3J0ICRyb290L3RhZ3MvJHt2dGFnfS9uZXQtc25tcCBuZXQtc25tcC0kdmVyc2lvbiIpOwotU3lzdGVtKCJyZWxlYXNlOnJlbW92ZWZpbGVzIiwKLSAgICAgICAibmV0LXNubXAtJHZlcnNpb24vcmVtb3ZlLWZpbGVzIG5ldC1zbm1wLSR2ZXJzaW9uIik7Ci1TeXN0ZW0oInJlbGVhc2U6bWFrZWRpc3QiLAotICAgICAgICIkdGFyIC1jIC16IC1mIG5ldC1zbm1wLSR7dmVyc2lvbn0udGFyLmd6ICBuZXQtc25tcC0kdmVyc2lvbiIpOwotU3lzdGVtKCJyZWxlYXNlOm1ha2V6aXBjbGVhbiIsCi0gICAgICAgInJtIC1mIG5ldC1zbm1wLSR7dmVyc2lvbn0uemlwIik7Ci1TeXN0ZW0oInJlbGVhc2U6bWFrZXppcCIsCi0gICAgICAgInppcCAtciBuZXQtc25tcC0ke3ZlcnNpb259LnppcCAgbmV0LXNubXAtJHZlcnNpb24iKTsKLQotCi0jIFN0ZXAgMTMpICBTaWduIChvciBjaGVja3N1bSkgdGhlIHBhY2thZ2UKLW15ICRzaWcxOwotbXkgJHNpZzI7Ci1teSAkcGtnMSA9ICJuZXQtc25tcC0ke3ZlcnNpb259LnRhci5neiI7Ci1teSAkcGtnMiA9ICJuZXQtc25tcC0ke3ZlcnNpb259LnppcCI7Ci0KLVN5c3RlbSgicmVsZWFzZTpzZWFyY2hpbmctZ3BnLWtleXMiLAotICAgICAgICJncGcgLS1saXN0LXNlY3JldC1rZXlzIG5ldC1zbm1wLWFkbWluIik7Ci1pZigkPyAhPSAwKSB7Ci0gICAgJHNpZzEgPSAiJHtwa2cxfS5tZDUiOwotICAgICRzaWcyID0gIiR7cGtnMn0ubWQ1IjsKLSAgICBTeXN0ZW0oInJlbGVhc2U6bWQ1IiwibWQ1c3VtICRwa2cxID4gJHNpZzEiKTsKLSAgICBTeXN0ZW0oInJlbGVhc2U6bWQ1IiwibWQ1c3VtICRwa2cyID4gJHNpZzIiKTsKLX0gZWxzZSB7Ci0gICAgIyBjdXJyZW50bHkgb25seSByc3RvcnkgYW5kIGhhcmRha2VyIGhhdmUgdGhlIGdwZyBrZXlzIHRpbGwgV2VzCi0gICAgIyBzZWVzIHNvbWVvbmUgZWxzZSBpbiBwZXJzb24gOy0pCi0gICAgJHNpZzEgPSAiJHtwa2cxfS5hc2MiOwotICAgIFN5c3RlbSgicmVsZWFzZTpncGciLCJncGcgLXUgbmV0LXNubXAtYWRtaW4gLWEgLS1kZXRhY2gtc2lnbiAkcGtnMSIpOwotICAgICRzaWcyID0gIiR7cGtnMn0uYXNjIjsKLSAgICBTeXN0ZW0oInJlbGVhc2U6Z3BnIiwiZ3BnIC11IG5ldC1zbm1wLWFkbWluIC1hIC0tZGV0YWNoLXNpZ24gJHBrZzIiKTsKLX0KLQotIwotIyAgUkVMRUFTRSBURVNUSU5HOgotIwotIyBTdGVwIDE0KSAgVW5wYWNrLCBidWlsZCBhbmQgdGVzdCB0aGUgcmVsZWFzZSB0YXJiYWxsCi1TeXN0ZW0oInBvc3R0ZXN0OnVudGFyIiwgInJtIC1yZiBuZXQtc25tcC0ke3ZlcnNpb259Iik7Ci1TeXN0ZW0oInBvc3R0ZXN0OnVudGFyIiwgInRhciB4emYgbmV0LXNubXAtJHt2ZXJzaW9ufS50YXIuZ3oiKTsKLWNoZGlyKCJuZXQtc25tcC0ke3ZlcnNpb259Iik7Ci1TeXN0ZW0oInBvc3R0ZXN0OmNvbmZpZ3VyZSIsIi4vY29uZmlndXJlICRjb25maWd1cmVhcmdzIik7Ci1TeXN0ZW0oInBvc3R0ZXN0Om1ha2UiLCJtYWtlIik7Ci1TeXN0ZW0oInBvc3R0ZXN0OnRlc3QiLCJtYWtlIHRlc3QiKTsKLWNoZGlyKCIuLiIpOwotCi0jIFN0ZXAgMTUpICBEb3VibGUtY2hlY2sgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIGNoYW5nZXMKLVN5c3RlbSgicmVsZWFzZTp1cGRhdGUiLCJzdm4gLXUgc3RhdHVzIik7Ci0KLSMKLSMgU3RlcHMgMTYgYW5kIGZvbGxvd2luZyBhcmUgTk9UIGhhbmRsZWQgYXV0b21hdGljYWxseS4KLSMgU2VlIHRoZSBSRUxFQVNFLUlOU1RSVUNUSU9OUyBmb3IgZnVsbCBkZXRhaWxzLgotIwotcHJpbnQgU1RERVJSICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEZJTklTSEVEICoqKioqKioqKioqKioqKioqKioqXG4iOwotcHJpbnQgU1RERVJSICJcbkRvdWJsZSBjaGVjayB0aGUgU1ZOIHN0YXR1cyBvdXRwdXQgYWJvdmUgZm9yIGFueSBvdXRzdGFuZGluZyBjaGFuZ2VzXG5cbiI7Ci1wcmludCBTVERFUlIgIlJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gdXBsb2FkIHRoZSByZWxhc2UgdG8gU0Y6XG4iOwotcHJpbnQgU1RERVJSICIgIHJzeW5jIC12ICAkcGtnMSAkcGtnMiAkc2lnMSAkc2lnMiBmcnMuc291cmNlZm9yZ2UubmV0OnVwbG9hZHMvXG4iOwotcHJpbnQgU1RERVJSICJTZWUgUkVMRUFTRS1JTlNUUlVDVElPTlMgZm9yIGFueSBhZGRpdGlvbmFsIHN0ZXBzXG4iOwotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXN1YiBTeXN0ZW0gewotICAgIG15ICRuYW1lID0gc2hpZnQ7Ci0gICAgbXkgJGNtZCA9ICRkZXNjciA9IGpvaW4oIiAiLCBAXyk7Ci0gICAgbXkgJHJjOwotICAgIHdoaWxlIChkb3N0ZXAoJG5hbWUpKSB7Ci0JcHJpbnQgU1RERVJSICIgIHJ1bm5pbmc6ICIsJGNtZCwiXG4iOwotCWxhc3QgaWYgKCRvcHRzeyduJ30pOwotCXN5c3RlbShAXyk7Ci0JJHJjID0gY2hlY2tyZXN1bHQoKTsKLSAgICAgICAgbGFzdCBpZiAoJHJjID09IDApOwotICAgIH0KLX0KLQotc3ViIGNoZWNrcmVzdWx0IHsKLSAgICBpZiAoJD8pIHsKLQlwcmludCBTVERFUlIgIlRoZSBhYm92ZSBTVEVQIGZhaWxlZC4gIENvbnRpbnVlIGFueXdheSAoeS9uL3IpPyAgIjsKLQlteSAkYW5zID0gPFNURElOPjsKLSAgICAgICAgcmV0dXJuIDEgaWYgKCRhbnMgPX4gL15yLyk7Ci0JaWYgKCRhbnMgPX4gL15uLykgewotCSAgICBwcmludCBTVERFUlIgIiAgRVhJVElOR1xuIjsKLQkgICAgZXhpdDsKLQl9Ci0gICAgfQotICAgcmV0dXJuIDA7Ci19Ci0KLXN1YiBkb3N0ZXAgewotICAgIG15ICRuYW1lID0gc2hpZnQ7Ci0gICAgcHJpbnQgU1RERVJSICJcbioqKioqKioqKiogU1RFUDogJG5hbWUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOwotICAgIGlmICgkZGVzY3IpIHsKLQlwcmludCBTVERFUlIgIiAgWyRkZXNjcl1cbiI7Ci0JJGRlc2NyID0gdW5kZWY7Ci0gICAgfQotICAgIHByaW50ICJcbiI7Ci0gICAgaWYgKCRvcHRzeydzJ30gJiYgJG5hbWUgbmUgJG9wdHN7J3MnfSkgewotCXByaW50IFNUREVSUiAiICAgICAgW3NraXBwaW5nXVxuIjsKLQlyZXR1cm4gMDsKLSAgICB9Ci0gICAgJG9wdHN7J3MnfSA9ICcnOwotICAgIGlmICgkb3B0c3tyfSAmJiAkbmFtZSA9fiAvJG9wdHN7cn0vKSB7Ci0JcHJpbnQgU1RERVJSICIgICAgICBbc2tpcHBpbmddXG4iOwotCXJldHVybiAwOwotICAgIH0gZWxzaWYgKCRvcHRzeydpJ30pIHsKLQlwcmludCBTVERFUlIgIiAgRG8gdGhpcyBzdGVwICh5L24vcSk/ICAiOwotCW15ICRhbnMgPSA8U1RESU4+OwotCWlmICgkYW5zID1+IC9ebi8pIHsKLQkgICAgcHJpbnQgU1RERVJSICIgICAgICBbc2tpcHBpbmddXG4iOwotCSAgICByZXR1cm4gMDsKLQl9Ci0JaWYgKCRhbnMgPX4gL15xLykgewotCSAgICBwcmludCBTVERFUlIgIiAgICAgIFFVSVRUSU5HXG4iOwotCSAgICBleGl0OwotCX0KLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN1YiBtYW51YWxzdGVwIHsKLSAgICBteSAkdGFnID0gc2hpZnQ7Ci0KLSAgICBpZiAoZG9zdGVwKCR0YWcpKSB7Ci0JcHJpbnQgU1RERVJSICJcblxuIixqb2luKCIgIixAXyk7Ci0KLQlwcmludCBTVERFUlIgIlxuXG4gIEhpdCByZXR1cm4gd2hlbiBkb25lOiAgIjsKLQotCXJldHVybiAxIGlmICgkb3B0c3snbid9KTsKLQotCW15ICRib2d1cyA9IDxTVERJTj47Ci0JcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBnZXRvcHQgbG9uZyBndWkgcG9ydGFiaWxpdHkgY29kZQotIwotc3ViIExvY2FsR2V0T3B0aW9ucyB7Ci0gICAgaWYgKGV2YWwge3JlcXVpcmUgR2V0b3B0OjpHVUk6Okxvbmc7fSkgewotCWltcG9ydCBHZXRvcHQ6OkdVSTo6TG9uZzsKLQlHZXRvcHQ6OkdVSTo6TG9uZzo6Q29uZmlndXJlKHF3KGRpc3BsYXlfaGVscCBub19pZ25vcmVfY2FzZSkpOwotCXJldHVybiBHZXRPcHRpb25zKEBfKTsKLSAgICB9IGVsc2UgewotCXJlcXVpcmUgR2V0b3B0OjpMb25nOwotCUdldG9wdDo6TG9uZzo6Q29uZmlndXJlKHF3KGF1dG9faGVscCBub19pZ25vcmVfY2FzZSkpOwotCWltcG9ydCBHZXRvcHQ6Okxvbmc7Ci0gICAgfQotICAgIEdldE9wdGlvbnMoTG9jYWxPcHRpb25zTWFwKEBfKSk7Ci19Ci0KLXN1YiBMb2NhbE9wdGlvbnNNYXAgewotICAgIG15ICgkc3QsICRjYiwgQG9wdHMpID0gKChyZWYoJF9bMF0pIGVxICdIQVNIJykKLQkJCSAgICA/ICgxLCAxLCAkX1swXSkgOiAoMCwgMikpOwotICAgIGZvciAobXkgJGkgPSAkc3Q7ICRpIDw9ICQjXzsgJGkgKz0gJGNiKSB7Ci0JaWYgKCRfWyRpXSkgewotCSAgICBuZXh0IGlmIChyZWYoJF9bJGldKSBlcSAnQVJSQVknICYmICRfWyRpXVswXSA9fiAvXkdVSTovKTsKLQkgICAgcHVzaCBAb3B0cywgKChyZWYoJF9bJGldKSBlcSAnQVJSQVknKSA/ICRfWyRpXVswXSA6ICRfWyRpXSk7Ci0JICAgIHB1c2ggQG9wdHMsICRfWyRpKzFdIGlmICgkY2IgPT0gMik7Ci0JfQotICAgIH0KLSAgICByZXR1cm4gQG9wdHM7Ci19Ci0KLV9fRU5EX18KLQotPWhlYWQxIE5BTUUKLQotbWFrZXJlbGVhc2UgLSBzb2Z0d2FyZSBwYWNrYWdlIHJlbGVhc2Ugc2NyaXB0Ci0KLT1oZWFkMSBTWU5PUFNJUwotCi1tYWtlcmVsZWFzZSBbb3B0aW9uc10gdmVyc2lvbgotCi09aGVhZDEgQVJHVU1FTlRTCi0KLUZvciBmdWxsIHJlbGVhc2VzLCB0aGUgdmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtICBJPDUueC55PgotCi1Gb3IgcHJlLXJlbGVhc2VzLCB0aGUgdmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtICBJPDUueC55LnByZU4+Ci0KLUZvciByZWxlYXNlIGNhbmRpZGF0ZXMsIHRoZSB2ZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gdGhlIGZvcm0gIEk8NS54LnkucmNOPgotCi1BbHRlcm5hdGl2ZWx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgdmVyc2lvbnMgaW4gdGhlIGZvcm0gIEV4dC01LXgteQotCi09aGVhZDEgT1BUSU9OUwotCi09b3ZlciA4Ci0KLT1pdGVtIEI8LXIge3N0ZXB9fCAtLXJlZ2V4cC1pZ25vcmUtc3RlcHM9e3N0ZXB9PgotCi1JZ25vcmUgc3RlcHMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB7c3RlcH0KLQotPWl0ZW0gQjwtcyB7c3RlcH18IC0tc3RhcnQtYXQ9e3N0ZXB9PgotCi1Ta2lwIGFsbCBzdGVwcyBwcmVjZWRpbmcgdGhlIHNwZWNpZmllZCAoZXhhY3QpIHtzdGVwfQotCi09aXRlbSBCPC1pIHwgLS1pbnRlcmFjdGl2ZT4KLQotUHJvbXB0IHdoZXRoZXIgb3Igbm90IHRvIGV4ZWN1dGUgZWFjaCBzdGVwCi0KLT1pdGVtIEI8LW4gfCAtLWRyeS1ydW4+Ci0KLVByaW50IHRoZSBjb21tYW5kcyB0aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLCBidXQgZG8gbm90IGV4ZWN1dGUgdGhlbS4KLQotPWl0ZW0gQjwtaCB8IC0taGVscD4KLQotRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZS4KLQotPWJhY2sKZGlmZiAtLWdpdCBhL2Rpc3QvbWFrZXJlbGVhc2UueG1sIGIvZGlzdC9tYWtlcmVsZWFzZS54bWwKaW5kZXggMjViN2E5ZC4uMDIxYTJiNyAxMDA2NDQKLS0tIGEvZGlzdC9tYWtlcmVsZWFzZS54bWwKKysrIGIvZGlzdC9tYWtlcmVsZWFzZS54bWwKQEAgLTI3OSw3ICsyNzksNyBAQAogCSAgICAgIDwvdGV4dD4KIAkgICAgICA8Y29tbWFuZHM+CiAJICAgICAgICA8Y29tbWFuZD5naXQgY2hlY2tvdXQgVjUtNC1wYXRjaGVzPC9jb21tYW5kPgotCSAgICAgICAgPGNvbW1hbmQ+ZWNobyB7QlJBTkNIUEFUSH0gPj4gZGlzdC9yZWxlYXNlIDwvY29tbWFuZD4KKwkgICAgICAgIDxjb21tYW5kPmVjaG8ge0JSQU5DSFBBVEh9IHJjID4+IGRpc3QvcmVsZWFzZSA8L2NvbW1hbmQ+CiAJICAgICAgICA8Y29tbWFuZCBpZ25vcmVlcnJvcj0iMSI+Z2l0IGNvbW1pdCAtbSAiUmVsZWFzZSBDYW5kaWRhdGUgZm9yIHtCUkFOQ0hQQVRIfSIgZGlzdC9yZWxlYXNlPC9jb21tYW5kPgogCSAgICAgICAgPGNvbW1hbmQ+Z2l0IGNoZWNrb3V0IHtCUkFOQ0hQQVRIfSA8L2NvbW1hbmQ+CiAJICAgICAgICA8Y29tbWFuZD5naXQgbWVyZ2UgVjUtNC1wYXRjaGVzICAgIDwvY29tbWFuZD4KQEAgLTM2Miw3ICszNjIsNyBAQAogCTxzdGVwIHR5cGU9InN5c3RlbSIgc3RlcG5hbWU9ImJ1aWxkOmNvbmZpZ3VyZSIgdGl0bGU9ImJ1aWxkOmNvbmZpZ3VyZSI+CiAJICA8dGV4dD5XZSBuZWVkIHRvIHJ1biBjb25maWd1cmUgdG8gc2V0IHVwIHRoZSBidWlsZCB0cmVlLjwvdGV4dD4KIAkgIDxjb21tYW5kcz4KLQkgICAgPGNvbW1hbmQ+Li9jb25maWd1cmUgLS1jYWNoZT1jb25maWcuY2FjaGUgLS13aXRoLWRlZmF1bHRzIC0td2l0aC1taWItbW9kdWxlcz0naG9zdCBleGFtcGxlcyBleGFtcGxlcy9leGFtcGxlIHRlc3RoYW5kbGVyIHNtdXggUm1vbiBkaXNtYW4vZXZlbnQtbWliJyAtLXdpdGgtdHJhbnNwb3J0cz1JUFggLS1lbmFibGUtaXB2NiAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIC0tZW5hYmxlLXNoYXJlZDwvY29tbWFuZD4KKwkgICAgPGNvbW1hbmQ+Li9jb25maWd1cmUgLS1jYWNoZT1jb25maWcuY2FjaGUgLS13aXRoLWRlZmF1bHRzIC0td2l0aC1taWItbW9kdWxlcz0naG9zdCBleGFtcGxlcyBleGFtcGxlcy9leGFtcGxlIHRlc3RoYW5kbGVyIHRsc3RtLW1pYiB0c20tbWliIHNtdXggUm1vbiBkaXNtYW4vZXZlbnQtbWliJyAtLXdpdGgtdHJhbnNwb3J0cz0iSVBYIFRMU1RDUCBEVExTVURQIiAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcz0idHNtIiAtLWVuYWJsZS1pcHY2IC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgLS1lbmFibGUtc2hhcmVkPC9jb21tYW5kPgogCSAgPC9jb21tYW5kcz4KIAk8L3N0ZXA+CiAJPHN0ZXAgdHlwZT0ic3lzdGVtIiBzdGVwbmFtZT0iYnVpbGQ6bWFrZSIgdGl0bGU9ImJ1aWxkOm1ha2UiPgpAQCAtMzcxLDEyICszNzEsMzAgQEAKIAkgICAgPGNvbW1hbmQ+TkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT049MSBtYWtlPC9jb21tYW5kPgogCSAgPC9jb21tYW5kcz4KIAk8L3N0ZXA+Ci0JPHN0ZXAgdHlwZT0ic3lzdGVtIiBzdGVwbmFtZT0iYnVpbGQ6dGVzdCIgdGl0bGU9ImJ1aWxkOnRlc3QiPgorCTxzdGVwIHR5cGU9InN5c3RlbSIgc3RlcG5hbWU9ImJ1aWxkOnRlc3QiIHRpdGxlPSJ0ZXN0aW5nOiBkZWZhdWx0IHRlc3RzIj4KIAkgIDx0ZXh0Pk5vdyB3ZSBydW4gIm1ha2UgdGVzdCIgd2hpY2ggc2hvdWxkIHByb2R1Y2UgYSBwZXJmZWN0CiAJICBzZXQgdXAgdGVzdCByZXN1bHRzLiAgSWYgbm90LCB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkIG9yIGF0CiAJICBsZWFzdCB1bmRlcnN0b29kIGFuZCBhY2NlcHRlZCBhcyBpcyBmb3Igc29tZSBvdGhlciByZWFzb24uPC90ZXh0PgogCSAgPGNvbW1hbmRzPgotCSAgICA8Y29tbWFuZD5tYWtlIHRlc3QgVEVTVE9QVFM9LW48L2NvbW1hbmQ+CisJICAgIDxjb21tYW5kPm1ha2UgdGVzdDwvY29tbWFuZD4KKwkgIDwvY29tbWFuZHM+CisJPC9zdGVwPgorCTxzdGVwIHR5cGU9InN5c3RlbSIgc3RlcG5hbWU9ImJ1aWxkOnRlc3Q6dW5pdCIgdGl0bGU9InRlc3Rpbmc6IHVuaXQtdGVzdHMiPgorCSAgPHRleHQ+Tm93IHdlIHJ1biB0aGUgdW5pdC10ZXN0cyB3aGljaCBzaG91bGQgYWxzbyBwcm9kdWNlIGEgcGVyZmVjdAorCSAgc2V0IHVwIHRlc3QgcmVzdWx0cy4gIElmIG5vdCwgdGhpcyBuZWVkcyB0byBiZSBmaXhlZCBvciBhdAorCSAgbGVhc3QgdW5kZXJzdG9vZCBhbmQgYWNjZXB0ZWQgYXMgaXMgZm9yIHNvbWUgb3RoZXIgcmVhc29uLjwvdGV4dD4KKwkgIDxjb21tYW5kcz4KKwkgICAgPGNvbW1hbmQ+Y2QgdGVzdGluZyAmYW1wOyZhbXA7IC4vUlVORlVMTFRFU1RTIC1nIHVuaXQtdGVzdHM8L2NvbW1hbmQ+CisJICA8L2NvbW1hbmRzPgorCTwvc3RlcD4KKwk8c3RlcCB0eXBlPSJzeXN0ZW0iIHN0ZXBuYW1lPSJidWlsZDp0ZXN0OnRyYW5zcG9ydHMiIHRpdGxlPSJ0ZXN0aW5nOiB0cmFuc3BvcnRzIj4KKwkgIDx0ZXh0Pk5vdyB3ZSBydW4gdGhlIHRyYW5zcG9ydCB0ZXN0cyB3aGljaCBzaG91bGQgYWxzbworCSAgcHJvZHVjZSBhIHBlcmZlY3Qgc2V0IHVwIHRlc3QgcmVzdWx0cywgaWYgeW91ciBtYWNoaW5lCisJICBzdXBwb3J0cyBhbGwgdGhlIHRyYW5zcG9ydHMuICBJZiBub3QsIHRoaXMgbmVlZHMgdG8gYmUgZml4ZWQKKwkgIG9yIGF0IGxlYXN0IHVuZGVyc3Rvb2QgYW5kIGFjY2VwdGVkIGFzIGlzIGZvciBzb21lIG90aGVyCisJICByZWFzb24gKGxpa2UgeW91IGNhbid0IGRvIElQdjYgb24geW91ciBzeXN0ZW0pLjwvdGV4dD4KKwkgIDxjb21tYW5kcz4KKwkgICAgPGNvbW1hbmQ+Y2QgdGVzdGluZyAmYW1wOyZhbXA7IC4vUlVORlVMTFRFU1RTIC1nIHRyYW5zcG9ydHM8L2NvbW1hbmQ+CiAJICA8L2NvbW1hbmRzPgogCTwvc3RlcD4KIAk8c3RlcCB0eXBlPSJzeXN0ZW0iIHN0ZXBuYW1lPSJjb2RlOmNoZWNrY29tbWVudHMiIHRpdGxlPSJjb2RlOmNoZWNrY29tbWVudHMiPgpAQCAtNTIyLDEyICs1NDAsMTIgQEAKIAk8L3N0ZXA+CiAJPHN0ZXAgdHlwZT0ic3lzdGVtIiBzdGVwbmFtZT0icmVsZWFzZTpncGciIHRpdGxlPSJyZWxlYXNlOmdwZyI+CiAJICA8Y29tbWFuZHM+Ci0JICAgIDxjb21tYW5kPmdwZyAtdSBFMEY4MTUzMyAtYSAtLWRldGFjaC1zaWduIG5ldC1zbm1wLXtWRVJTSU9OfS50YXIuZ3o8L2NvbW1hbmQ+CisJICAgIDxjb21tYW5kPmdwZyAtLXVzZS1hZ2VudCAtdSBFMEY4MTUzMyAtYSAtLWRldGFjaC1zaWduIG5ldC1zbm1wLXtWRVJTSU9OfS50YXIuZ3o8L2NvbW1hbmQ+CiAJICA8L2NvbW1hbmRzPgogCTwvc3RlcD4KIAk8c3RlcCB0eXBlPSJzeXN0ZW0iIHN0ZXBuYW1lPSJyZWxlYXNlOmdwZyIgdGl0bGU9InJlbGVhc2U6Z3BnIj4KIAkgIDxjb21tYW5kcz4KLQkgICAgPGNvbW1hbmQ+Z3BnIC11IEUwRjgxNTMzIC1hIC0tZGV0YWNoLXNpZ24gbmV0LXNubXAte1ZFUlNJT059LnppcDwvY29tbWFuZD4KKwkgICAgPGNvbW1hbmQ+Z3BnIC0tdXNlLWFnZW50IC11IEUwRjgxNTMzIC1hIC0tZGV0YWNoLXNpZ24gbmV0LXNubXAte1ZFUlNJT059LnppcDwvY29tbWFuZD4KIAkgIDwvY29tbWFuZHM+CiAJPC9zdGVwPgogCTxzdGVwIHR5cGU9ImNvbW1hbmQiIG5hbWU9InJlbGVhc2U6bmV4dGJyYW5jaCIgdGl0bGU9IkRvbid0IHByb3BhZ2F0ZSBjb2RlIG1vZGlmaWNhdGlvbnMiCmRpZmYgLS1naXQgYS9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvREVWRU5WIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL0RFVkVOVgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTA1Y2FlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL0RFVkVOVgpAQCAtMCwwICsxLDQ0IEBACitQUkVGSVg9L29wdC9PU1MKK2V4cG9ydCBQUkVGSVgKKworUEFUSD0kUFJFRklYL2JpbjovdXNyL2JpbjovdXNyL2R0L2JpbjovdXNyL29wZW53aW4vYmluOi91c3Ivc2JpbjovdXNyL2Njcy9iaW46L3Vzci91Y2IKK2V4cG9ydCBQQVRICisKK0xEX0xJQlJBUllfUEFUSD0kUFJFRklYL2xpYiAKK0xEX1JVTl9QQVRIPSRMRF9MSUJSQVJZX1BBVEgKK2V4cG9ydCBMRF9MSUJSQVJZX1BBVEggTERfUlVOX1BBVEgKKworQ0M9Z2NjCitleHBvcnQgQ0MKKworQ1BQRkxBR1M9Ii1JJFBSRUZJWC9pbmNsdWRlIgorQ0ZMQUdTPSItbXY4IC1tdHVuZT11bHRyYXNwYXJjIgorTERGTEFHUz0iLUwkUFJFRklYL2xpYiAtUiRQUkVGSVgvbGliIgorZXhwb3J0IENQUEZMQUdTIENGTEFHUyBMREZMQUdTCisKK1RNUD0vdG1wCitleHBvcnQgVE1QCisKK1RPUD0vY3RidG8vaWRjL2NpY24vc291cmNlL2J1aWxkL2BiYXNlbmFtZSAkUFJFRklYYAorZXhwb3J0IFRPUAorCitTUkM9JFRPUC9kaXN0CitleHBvcnQgU1JDCisKK1dPUks9JFRPUC93b3JrCitleHBvcnQgV09SSworCisKKyMgZm9yIHN1cGVycGFjazoKKworQ0hFQ0tMSVNUPSRUT1AvQ2hlY2tsaXN0OyBleHBvcnQgQ0hFQ0tMSVNUCitNQUtFPSRQUkVGSVgvYmluL21ha2UKK2V4cG9ydCBNQUtFCisKKyNDQVRFR09SWT1PcGVuU291cmNlOyBleHBvcnQgQ0FURUdPUlkKKyNWRU5ET1I9IkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiI7IGV4cG9ydCBWRU5ET1IKK0JBU0VESVI9L29wdDsgZXhwb3J0IEJBU0VESVIKK1BSRUZJWD0kQkFTRURJUi9gYmFzZW5hbWUgJFRPUGA7IGV4cG9ydCBQUkVGSVgKK1JFTEVBU0VfQVJFQT0kVE9QLy4uL3BhY2thZ2VzL2AvYmluL3VuYW1lIC1wYC9gL2Jpbi91bmFtZSAtcmA7IGV4cG9ydCBSRUxFQVNFX0FSRUEKKwordW1hc2sgMDIyCmRpZmYgLS1naXQgYS9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvUkVBRE1FIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2UyNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL1JFQURNRQpAQCAtMCwwICsxLDE5IEBACitUaGUgImJ1aWxkcGFja2FnZS1zb2xhcmlzIiBzY3JpcHQgZG9lcyBhICJvbmUtc2hvdCIgYnVpbGQgCithbmQgcGFja2FnaW5nIG9mIGFuIHVudGFycmVkIG5ldC1zbm1wIGRpc3RyaWJ1dGlvbiAKK29uIFNvbGFyaXMgd2l0aG91dCByZXF1aXJpbmcgcm9vdCBhY2Nlc3MuIAorIAorVGhlIHJlc3VsdGluZyBuYXRpdmUgU29sYXJpcyBwYWNrYWdlIGNhbiB0aGVuIGJlIAorKGF1dG9tYXRpY2FsbHkpIGluc3RhbGxlZC9yZW1vdmVkIHVzaW5nIHRoZSBTb2xhcmlzIAorcGtnYWRkKDEpL3BrZ3JtKDEpIGNvbW1hbmRzLiAKKyAKK1RoZSBzY3JpcHQgcmVxdWlyZXMgY3VzdG9taXphdGlvbiBvZiB5b3VyIAorZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgLSBzZWUgYXR0YWNoZWQgZmlsZSAKK0RFVkVOViAtIGJlZm9yZSBpdCBjYW4gYmUgdXNlZC4gCisgCisgQmFzaWMgdXNhZ2U6IC4vYnVpbGRwYWNrYWdlLXNvbGFyaXMgZGlzdGNsZWFuIAorIAorVGhlIHNjcmlwdCAiZWxmZGVwZW5kLnNoIiBpcyByZXF1aXJlZCB0byAKK2RldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGFsbCBidWlsdCBFTEYgYmluYXJpZXMgCithbmQgbGlicmFyaWVzIHRvIGNyZWF0ZSBhICJwYWNrYWdlIGRlcGVuZGVuY3kgZmlsZSIgLSAKK3NlZSBkZXBlbmQoNCkuIAorIApkaWZmIC0tZ2l0IGEvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2J1aWxkcGFja2FnZS1zb2xhcmlzIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2J1aWxkcGFja2FnZS1zb2xhcmlzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZjRmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvYnVpbGRwYWNrYWdlLXNvbGFyaXMKQEAgLTAsMCArMSwxODIgQEAKKyMhL2Jpbi9rc2gKKyMKKyMgYXV0b21hdGljIGJ1aWxkIChjb25maWd1cmUvbWFrZS9wYWNrYWdlKSBzY3JpcHQgCisjIGZvciBORVQtU05NUCBvbiBTb2xhcmlzCisjCisjIDIwMDQvMTEgUmV3cml0ZSB0byBzdHJpY3RseSBidWlsZCB0aGUgcGFja2FnZSBqZnJhbmtAZmFzdHJpZXZlLmNvbQorIyAyMDAyLzExIFN0ZWZhbi5SYWRtYW5AQ1RCVE8uT1JHCisKKworIyBJZiB5b3UgZGVmaW5lIERFQlVHLCB0aGUgc2NyaXB0IHdpbGwgYmUgdmVyYm9zZSwgYW5kIHdlIHdvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKworI0RFQlVHPVkKK2lmIFsgISAteiAkREVCVUcgXTsgdGhlbgorICAgc2V0IC14ICMgYmUgdmVyYm9zZQorZmkKKworIyBUTVAgaXMgd2hlcmUgd2UgYXJlIHRlbXBvcmFyaWx5IGluc3RhbGxpbmcgdGhlIHBhY2thZ2UgdG8KK1RNUD1gcHdkYC9wa2dyb290CisKKyMgUEtHIGlzIHRoZSBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgbmFtZSBmb3IgdGhlIHBhY2thZ2UKK1BLRz1PU1NuZXQtc25tcAorCisjUFJFRklYIGlzIHRoZSB0b3AgbGV2ZWwgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBkaXJlY3RvcnkuCisjIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGx5IGRldGVybWluZWQgYnkgY29uZmlndXJlCisjcHJlZml4PS9vcHQvJHtQS0d9CitwcmVmaXg9L3Vzci9sb2NhbAorCisjIFZBUkRJUiBpcyB0aGUgcGVyc2lzdGVudCBkaXIgZnJvbSBjb25maWd1cmUKK1ZBUkRJUj0vdmFyL25ldC1zbm1wCisKK2V4cGFuZGVkcHJlZml4PSR7VE1QfS8ke3ByZWZpeH0KKworUEVSTD0ke1BFUkw6PWB3aGljaCBwZXJsYH0KK01BS0U9JHtNQUtFOj1gd2hpY2ggbWFrZWB9CisKK2lmIFsgLWQgJHtUTVB9IF07IHRoZW4KKyAgIHJtIC1yZiAke1RNUH07CitmaQorCisjIGluc3RhbGwgdG8gdGVtcG9yYXJ5IHBhY2thZ2UgYnVpbGQgcm9vdAorY2QgLi4vLi4KKworJE1BS0UgaW5zdGFsbCBwcmVmaXg9JHtleHBhbmRlZHByZWZpeH0gZXhlY19wcmVmaXg9JHtleHBhbmRlZHByZWZpeH0gfHwgZXhpdCAxCisKKyMgV2Ugbm93IGhhdmUgdGhlIG1haW4gc29mdHdhcmUgaW5zdGFsbGVkLCBjb3B5IG92ZXIgdGhlIGF1eGlsbGFyeSBmaWxlcworY2QgLQorCithd2sgL15fX19zbm1wZC1pbml0LmQvLC9fX19FT0YvICQwIHwgZ3JlcCAtdiBeX19fIHwgc2VkICJzLEBwcmVmaXhALCRwcmVmaXgsZyIgPnxzbm1wZC1pbml0LmQKKworIyBjcmVhdGUgcGVyc2lzdGVudCBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QKK1sgLWQgJFRNUC8kVkFSRElSIF0gfHwgaW5zdGFsbCAtZCAtbSAwNzU1ICRUTVAvJFZBUkRJUiAKKworIyBwb3N0aW5zdGFsbAorTERfTElCUkFSWV9QQVRIPSRUTVAkcHJlZml4L2xpYjokTERfTElCUkFSWV9QQVRIICRUTVAvJHByZWZpeC9iaW4vc25tcHRyYW5zbGF0ZVwKKyAgLU0kVE1QLyRwcmVmaXgvc2hhcmUvc25tcC9taWJzIC1tIFNOTVB2Mi1TTUkgLjEgPiYtIHx8IGV4aXQgJD8gIyBjcmVhdGUgTUlCIGluZGV4CisKKyMgcGFja2FnZQordmVyc2lvbj1gLi4vLi4vbmV0LXNubXAtY29uZmlnIC0tdmVyc2lvbmAKK29zPWB1bmFtZSAtc2AKK3JlbD1gdW5hbWUgLXJgCitjbGFzcz1zbm1wCitvd25lcj0kTE9HTkFNRQorZ3JvdXBzIHwgYXdrICd7cHJpbnQgJDF9JyB8IHJlYWQgZ3JvdXAKK2NhdCA8PD09ID58cGtnaW5mbworUEtHPSIke1BLR30iCitOQU1FPSJuZXQtc25tcC0kdmVyc2lvbiIKK0FSQ0g9ImB1bmFtZSAtcGAiCitWRVJTSU9OPSIkdmVyc2lvbiwgJG9zICRyZWwsIGBkYXRlICslWS4lbS4lZC4lSC4lTS4lU2AiCitDQVRFR09SWT0iT3BlblNvdXJjZSIKK0RFU0M9IlRoZSBORVQtU05NUCBUb29scyBhbmQgTGlicmFyeSIKK1ZFTkRPUj0iaHR0cDovL25ldC1zbm1wLnNvdXJjZWZvcmdlLm5ldCIKK0NMQVNTRVM9IiRjbGFzcyIKK0JBU0VESVI9IiRwcmVmaXgiCis9PQorLiAuL3BrZ2luZm8KKworZWNobyAnY2hlY2tpbmcgZGVwZW5kZW5jaWVzJwordW5zZXQgTERfTElCUkFSWV9QQVRIICMgYmluYXJpZXMgYW5kIGxpYnJhcmllcyBzaG91bGQgaGF2ZSBSUEFUSCBub3cKKy4vZWxmZGVwZW5kLnNoICRUTVAgfCBncmVwIC12ICJQICAqJFBLRyAiID58ZGVwZW5kICMgaWdub3JlIG93biBwYWNrYWdlCisKK2VjaG8gJ2NyZWF0aW5nIHByb3RvdHlwZSBmaWxlJworY2F0IDw8PT0gPnxwcm90b3R5cGUKK2kgcGtnaW5mbworaSBjb3B5cmlnaHQ9Li4vLi4vQ09QWUlORworI2kgcHJlaW5zdGFsbD0uL3ByZWluc3RhbGwtcG9zdHJlbW92ZQorI2kgcG9zdGluc3RhbGw9Li9wcmVpbnN0YWxsLXBvc3RyZW1vdmUKK2kgZGVwZW5kCisjIHNldCBkZWZhdWx0IG1vZGUsIG93bmVyIGFuZCBncm91cAorISBkZWZhdWx0IDA3NzUgcm9vdCBzeXMKK2Qgc25tcCAvZXRjIDA3NTUgcm9vdCBzeXMKK2Qgc25tcCAvZXRjL2luaXQuZCAwNzU1IHJvb3Qgc3lzCitmIHNubXAgL2V0Yy9pbml0LmQvc25tcGQ9Li9zbm1wZC1pbml0LmQgMDc1NSByb290IHN5cworI2wgc25tcCAvZXRjL3JjMi5kL1M3NnNubXBkPS9ldGMvaW5pdC5kL3NubXBkICMgbm90IHlldAorPT0KKworcGtncHJvdG8gLWMgc25tcCAkVE1QPS8gfFwKK2VncmVwIC12ICdeZCAuKiAvIHxeZCAuKiAvdmFyIHxeZCAuKiAvb3B0IHxeIC4qcGVybGxvY2FsLnBvZD0nIHxcCitzZWQgLWUgInMvICRvd25lciAkZ3JvdXBcJC8vIiA+PiBwcm90b3R5cGUgfHwgZXhpdCAkPworIyBhbmQgaWdub3JlIHRvcCBsZXZlbCBkaXJlY3RvcmllcyAobXVzdCBwcmUtZXhpc3QpCisKK2VjaG8gJ2NyZWF0aW5nIHBhY2thZ2UnCitwa2dtayAtb2QgLiB8fCBleGl0ICQ/Citwa2d0cmFucyAuICRQS0ctJHZlcnNpb24tJEFSQ0gtJG9zJHJlbC5wa2cgJFBLRyB8fCBleGl0ICQ/CisKKyMgV2Ugc2hvdWxkIHJlYWxseSBkbyBzb21lIGNsZWFudXAgaGVyZQoraWYgWyAteiAkREVCVUcgXTsgdGhlbgorICAgcm0gLXJmIHNubXBkLWluaXQuZCAkUEtHICRUTVAgcGtnaW5mbyBwcm90b3R5cGUgZGVwZW5kIAorZmkKKworZWNobyAiYnVpbGQgd2FzIHN1Y2Nlc3NmdWxsIgorZXhpdCAwCisKKyMgL2V0Yy9pbml0L3NubXBkCisjIFRoaXMgaXMgcGFja2FnZWQgaW5zaWRlIG9mIGJ1aWxkcGFja2FnZS1zb2xhcmlzIGJlY2F1c2Ugd2UgbmVlZCB0byBzdWJzdGl0dXRlCisjIGluIHRoZSBhY3R1YWwgc2VydmVyIG5hbWUuCisKK19fX3NubXBkLWluaXQuZF9fXworIyEgL2Jpbi9zaAorIworIyBzdGFydC9zdG9wIHRoZSBORVQtU05NUCBtYXN0ZXIgYWdlbnQgKHNubXBkKQorIworIyBMb2NhdGlvbjogICAgICAvZXRjL2luaXQuZC9zbm1wZAorIyAgICAgICAgICAgICAgICAvZXRjL3JjMy5kL1M/P3NubXBkCisjCituYW1lPSJORVQtU05NUCBhZ2VudCIKK2RhZW1vbj1AcHJlZml4QC9zYmluL3NubXBkCisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCisgICAgICAgIFsgISAteCAkZGFlbW9uIF0gJiYgZWNobyAiRVJST1I6IGNhbm5vdCBzdGFydCAkbmFtZSAoJGRhZW1vbikiICYmIGV4aXQgMQorICAgICAgICBlY2hvICJTdGFydGluZyAkbmFtZSAuLi4gXGMiCisgICAgICAgIFBHUkVQPWB3aGljaCBwZ3JlcGAKKyAgICAgICAgaWYgWyAteiAkUEdSRVAgXTsgdGhlbgorICAgICAgICAgICBwaWQ9YHBncmVwIC1meCAkZGFlbW9uYAorICAgICAgICBlbHNlCisgICAgICAgICAgIHBpZD1gcHMgLWVmIHwgZ3JlcCAkZGFlbW9uIHwgZ3JlcCAtdiBncmVwIHwgYXdrICd7cHJpbnQgJDJ9J2AKKyAgICAgICAgZmkKKworICAgICAgICBbICEgLXogIiRwaWQiIF0gJiYgZWNobyAiYWxyZWFkeSBydW5uaW5nIHdpdGggcGlkICRwaWQuIiAmJiBleGl0IDAKKyAgICAgICAgJGRhZW1vbiAmJiBlY2hvICJkb25lLiIKKyAgICAgICAgOzsKK3N0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nICRuYW1lIC4uLiBcYyIKKyAgICAgICAgUEdSRVA9YHdoaWNoIHBncmVwYAorICAgICAgICBpZiBbIC16ICRQR1JFUCBdOyB0aGVuCisgICAgICAgICAgIHBpZD1gcGdyZXAgLWZ4ICRkYWVtb25gCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgcGlkPWBwcyAtZWYgfCBncmVwICRkYWVtb24gfCBncmVwIC12IGdyZXAgfCBhd2sgJ3twcmludCAkMn0nYAorICAgICAgICBmaQorICAgICAgICBbICEgLXogIiRwaWQiIF0gJiYgKGtpbGwgJHBpZCAmJiBlY2hvICJkb25lIiApIHx8IGVjaG8gIm5vdCBydW5uaW5nIgorCisgICAgICAgIDs7CitzdGF0dXMpCisgICAgICAgIGVjaG8gIiRuYW1lIGlzIFxjIgorICAgICAgICBQR1JFUD1gd2hpY2ggcGdyZXBgCisgICAgICAgIGlmIFsgLXogJFBHUkVQIF07IHRoZW4KKyAgICAgICAgICAgcGlkPWBwZ3JlcCAtZnggJGRhZW1vbmAKKyAgICAgICAgZWxzZQorICAgICAgICAgICBwaWQ9YHBzIC1lZiB8IGdyZXAgJGRhZW1vbiB8IGdyZXAgLXYgZ3JlcCB8IGF3ayAne3ByaW50ICQyfSdgCisgICAgICAgIGZpCisgICAgICAgIFsgLXogIiRwaWQiIF0gJiYgZWNobyAibm90IHJ1bm5pbmciIHx8IGVjaG8gInJ1bm5pbmcgd2l0aCBwaWQgJHBpZCIKKyAgICAgICAgOzsKK3Jlc3RhcnQpCisgICAgICAgICQwIHN0b3AgJiYgJDAgc3RhcnQKKyAgICAgICAgOzsKK3JlbG9hZCkKKyAgICAgICAgZWNobyAiUmUtaW5pdGlhbGl6aW5nICRuYW1lIC4uLlxjIgorICAgICAgICBQR1JFUD1gd2hpY2ggcGdyZXBgCisgICAgICAgIGlmIFsgLXogJFBHUkVQIF07IHRoZW4KKyAgICAgICAgICAgcGlkPWBwZ3JlcCAtZnggJGRhZW1vbmAKKyAgICAgICAgZWxzZQorICAgICAgICAgICBwaWQ9YHBzIC1lZiB8IGdyZXAgJGRhZW1vbiB8IGdyZXAgLXYgZ3JlcCB8IGF3ayAne3ByaW50ICQyfSdgCisgICAgICAgIGZpCisgICAgICAgIFsgISAteiAiJHBpZCIgXSAmJiAoa2lsbCAtSFVQICRwaWQgJiYgZWNobyAiZG9uZSIgKSB8fCBlY2hvICJub3QgcnVubmluZyIKKyAgICAgICAgOzsKKyopCisgICAgICAgIGVjaG8gIlVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHN0YXR1cyB8IHJlc3RhcnQgfCByZWxvYWQgfSIKKyAgICAgICAgOzsKK2VzYWMKKworZXhpdCAwCitfX19FT0ZfX18KZGlmZiAtLWdpdCBhL2Rpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9lbGZkZXBlbmQuc2ggYi9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvZWxmZGVwZW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0N2M0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvZWxmZGVwZW5kLnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9rc2gKKyMKKyMgZWxmZGVwZW5kLnNoCisjCisjIGdpdmVuIGEgcGF0aCwgdGhpcyBzY3JpcHRzIHNlYXJjaGVzIGZvciBFTEYgYmluYXJpZXMgYW5kIGxpYnJhcmllcworIyBhbmQgZ2VuZXJhdGVzIHBhY2thZ2UgZGVwZW5kZW5jeSBmaWxlIGVudHJpZXMgYWNjb3JkaW5nIHRvIHRoZXIgZGVwZW5kZW5jaWVzCisjCisjIFVzYWdlOiBlbGZkZXBlbmQgPEVMRi1iaW5hcnk+fDxkaXJlY3Rvcnk+CisjCisjIDIwMDIvMTEgU3RlZmFuLlJhZG1hbkBDVEJUTy5PUkcKKyMKKyMgL3Zhci9zYWRtL2luc3RhbGwvY29udGVudHMgZm9ybWF0OgorIworIyAvZGV2IGQgbm9uZSAwNzc1IHJvb3Qgc3lzIFNVTldjc3IgU1VOV2NzZAorIyBwYXRoIHR5cGUgY2xhc3MgbW9kZSBvd25lciBncm91cCBwYWNrYWdlcworIyAvZXRjLy5sb2dpbiBmIHJlbmFtZW5ldyAwNjQ0IHJvb3Qgc3lzIDUxNiAzNzk1NiA5MDQ2NDc2OTUgU1VOV2NzcgorIyAvZXRjL2FjY3QvaG9saWRheXMgZSBwcmVzZXJ2ZSAwNjY0IGJpbiBiaW4gMjg5IDIyMDkwIDkwNDY0NzYwMyBTVU5XYWNjcgorIyBwYXRoIHR5cGUgY2xhc3MgbW9kZSBvd25lciBncm91cCB4IHggeCBwYWNrYWdlcworIyAvYmluPS4vdXNyL2JpbiBzIG5vbmUgU1VOV2NzcgorIyBwYXRoPWxpbmsgdHlwZSBjbGFzcyBwYWNrYWdlcworIyAvZGV2aWNlcy9wc2V1ZG8vY2xvbmVAMDpobWUgYyBub25lIDExIDcgMDYwMCByb290IHN5cyBTVU5XY3NkCisjIHBhdGggdHlwZSBjbGFzcyB4IHggb3duZXIgbW9kZSBwYWNrYWdlcworIworIyB0eXBlcyBlIChzZWQpLCB2ICh2b2xhdGlsZSkgaGF2ZSBzYW1lIGZvcm1hdCBsaWtlIHR5cGUgZiAoZmlsZSkKKyMgdHlwZSBsIChoYXJkbGluaykgaGFzIHNhbWUgZm9ybWF0IGxpa2UgdHlwZSBzIChzeW1saW5rKQorIworcHJvZz1gYmFzZW5hbWUgJDBgCitMQVNUX0NIQU5DRT0vb3B0L09TUy9saWIKKworaWYgWyAtZCAiJDEiIF0gOyB0aGVuCisgIGZpbmQgJDEgLXR5cGUgZiAtZXhlYyBmaWxlIHt9IFw7CitlbGlmIFsgLXggIiQxIiBdIDsgdGhlbgorICBmaWxlICQxCitlbHNlCisgIGVjaG8gMT4mMiAidXNhZ2U6ICQwIDxkaXJlY3Rvcnk+fDxFTEYgZXhlY3V0YWJsZT4iCisgIGV4aXQgMQorZmkgfCBhd2sgJyQyID09ICJFTEYiIHsgcHJpbnQgfScgfCBjdXQgLWQ6IC1mMSB8XAord2hpbGUgcmVhZCBlbGYKK2RvCisgIGxkZCAiJGVsZiIgfCB3aGlsZSByZWFkIGxpYiB4IHBhdGgKKyAgZG8KKyAgICBbIC16ICIkcGF0aCIgXSAmJiBjb250aW51ZQorICAgIGlmIFsgIiRwYXRoIiA9ICcoZmlsZSBub3QgZm91bmQpJyBdCisgICAgdGhlbgorICAgICAgaWYgWyAteCAkTEFTVF9DSEFOQ0UvJGxpYiBdCisgICAgICB0aGVuCisgICAgICAgIHBhdGg9IiRMQVNUX0NIQU5DRS8kbGliIgorICAgICAgZWxzZQorICAgICAgICBlY2hvICIjICRwcm9nOiAkbGliICR4ICRwYXRoIgorICAgICAgICBjb250aW51ZSAjIG5vdCBmb3VuZAorICAgICAgZmkKKyAgICBmaQorICAgIGVjaG8gIiRwYXRoIgorICAgICMgbmVlZCBzeW1saW5rIGhhbmRsaW5nIGhlcmUgLSBzZWUgL3Vzci9wbGF0Zm9ybS9TVU5XLCovbGliLyoKKyAgZG9uZQorZG9uZSB8IHNvcnQgLXUgfCB3aGlsZSByZWFkIGxpYnBhdGggb3RoZXIKK2RvCisgIFsgIiRsaWJwYXRoIiA9ICIjIiBdICYmIGVjaG8gIiRsaWJwYXRoICRvdGhlciIgJiYgY29udGludWUgIyBlcnJvciBtZXNzYWdlCisgIHNldCAtLSBgZ3JlcCAiXiRsaWJwYXRoWyA9XSIgIC92YXIvc2FkbS9pbnN0YWxsL2NvbnRlbnRzIHwgaGVhZCAtMWAKKyAgcGF0aD0kMTsgdHlwZT0kMgorICBjYXNlICR0eXBlIGluCisgICAgZikgIyBmaWxlCisgICAgICBzaGlmdCA5ICMgZmlyc3QgcGFja2FnZQorICAgICAgOzsKKyAgICBzfGwpICMgbGluaworICAgICAgc2hpZnQgMyAjIGZpcnN0IHBhY2thZ2UKKyAgICAgIDs7CisgICAgJycpICMgbm90IGZvdW5kCisgICAgICBlY2hvICIjICRwcm9nOiAkbGlicGF0aCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYWNrYWdlIgorICAgICAgY29udGludWUKKyAgICAgIDs7CisgICAgKikgIyBkdWJpb3VzIGZpbGUgdHlwZQorICAgICAgZWNobyAiIyAkcHJvZzogcGF0aCAkMSBoYXMgZHViaW91cyBmaWxlIHR5cGUgJDIiCisgICAgICBjb250aW51ZQorICAgICAgOzsKKyAgZXNhYworICBzZXQgLS0gYGVjaG8gJDEgfCB0ciA6ICcgJ2AKKyAgZWNobyAkMSAjIHN0cmlwIG9mZiBjbGFzc2VzCitkb25lIHwgc29ydCAtdSB8IHdoaWxlIHJlYWQgcGtnIG90aGVyCitkbworICBpZiBbICIkcGtnIiA9ICIjIiBdIDsgdGhlbiAjIGVycm9yIG1lc3NhZ2UKKyAgICBlY2hvIDE+JjIgIiRvdGhlciIgIyBnb2VzIHRvIHN0ZGVycgorICAgIGNvbnRpbnVlCisgIGZpCisgIGV2YWwgYHBrZ3BhcmFtIC12ICRwa2cgUEtHIE5BTUVgCisgIHByaW50ZiAiUCAgJS0xNXMlc1xuIiAiJFBLRyIgIiROQU1FIgorZG9uZQpkaWZmIC0tZ2l0IGEvZGlzdC9uZXQtc25tcC5zcGVjIGIvZGlzdC9uZXQtc25tcC5zcGVjCmluZGV4IDZhYzRhOWYuLjg5M2FkYmUgMTAwNjQ0Ci0tLSBhL2Rpc3QvbmV0LXNubXAuc3BlYworKysgYi9kaXN0L25ldC1zbm1wLnNwZWMKQEAgLTM3LDcgKzM3LDcgQEAKICVlbmRpZgogU3VtbWFyeTogVG9vbHMgYW5kIHNlcnZlcnMgZm9yIHRoZSBTTk1QIHByb3RvY29sCiBOYW1lOiBuZXQtc25tcAotVmVyc2lvbjogNS40LjQKK1ZlcnNpb246IDUuNy4zCiAjIHVwZGF0ZSByZWxlYXNlIGZvciB2ZW5kb3IgcmVsZWFzZS4gKGVnIDEuZmM2LCAxLnJoNzIsIDEueWRsMywgMS55ZGwyMykKIFJlbGVhc2U6IDEKIFVSTDogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvCkBAIC0xMzMsNyArMTMzLDcgQEAKIAktLWVuYWJsZS1zaGFyZWQgXAogCSV7P25ldHNubXBfcGVybF9tb2R1bGVzOiAtLXdpdGgtcGVybC1tb2R1bGVzPSJJTlNUQUxMRElSUz12ZW5kb3IifSBcCiAJJXshP25ldHNubXBfcGVybF9tb2R1bGVzOiAtLXdpdGhvdXQtcGVybC1tb2R1bGVzfSBcCi0JJXs/bmV0c25tcF9lbWJlZGRlZF9wZXJsOiAtLWVuYWJsZS1hcy1uZWVkZWQgLS1lbmFibGUtZW1iZWRkZWQtcGVybH0gXAorCSV7P25ldHNubXBfZW1iZWRkZWRfcGVybDogLS1lbmFibGUtZW1iZWRkZWQtcGVybH0gXAogCSV7IT9uZXRzbm1wX2VtYmVkZGVkX3Blcmw6IC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsfSBcCiAJLS13aXRoLWNmbGFncz0iJFJQTV9PUFRfRkxBR1MgJXtuZXRzbm1wX2NmbGFnc30iCiAKQEAgLTI1MiwxMiArMjUyLDEyIEBACiAKICogVHVlIE1heSAgNiAyMDA4IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNmLm5ldD4KIC0gcmVtb3ZlICV7bGliY3VycmVudH0KLS0gZG9uJ3QgdXNlIFByb3ZpZGVzOiB1bmxlc3MgbmVjZXNzYXJ5LCBsZXQgcnBtYnVpbGQgY29tcHV0ZSB0aGUgcHJvdmlkZWQKKy0gYWRkIG9wZW5zc2wtZGV2ZWwgdG8gYnVpbGQgcmVxdWlyZW1lbnRzCistIGRvbid0IHVzZSBQcm92aWRlczogdW5sZXNzIG5lY2Vzc2FyeSwgbGV0IHJwbWJ1aWxkIGNvbXB1dGUgdGhlIHByb3ZpZGVkIAogICBsaWJyYXJpZXMKIAotKiBUdWUgSnVuIDMwIDIwMDcgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zZi5uZXQ+CisqIFR1ZSBKdW4gMTkgMjAwNyBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNmLm5ldD4KIC0gYWRkICJCdWlsZFJlcXVpcmVzOiBwZXJsLUV4dFV0aWxzLUVtYmVkIiwgZS5nLiBmb3IgRmVkb3JhIDcKLS0gYWRkIC0tZW5hYmxlLWFzLW5lZWRlZCBpZiBidWlsZGluZyB3aXRoIGVtYmVkZGVkIFBlcmwgc3VwcG9ydAogCiAqIFdlZCBOb3YgMjMgMjAwNiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNmLm5ldD4KIC0gZml4ZXMgZm9yIDUuNCBhbmQgNjQtYml0IHBsYXRmb3JtcwpkaWZmIC0tZ2l0IGEvZGlzdC9uc2ItY29uZmlnIGIvZGlzdC9uc2ItY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA5NDRmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25zYi1jb25maWcKQEAgLTAsMCArMSw4MiBAQAorIyEvYmluL3NoCisjCisjICRJZCQKKyMgQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit1c2FnZSgpCit7CisgICBlY2hvICJVc2FnZTogJDAgIFstZHwteF0gWy1zIFNSQ0RdIgorICAgZWNobyAiIgorICAgZWNobyAiIC1zIFNSQ0RJUiAgOiBzb3VyZSBkaXJlY3RvcnkgWyRIT01FL3NyYy9uZXQtc25tcC1WRVJTSU9OXSIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiAteCA6IGNvbmZpZ3VyZSBleHRyYSBmZWF0dXJlcyBmb3IgcHJlLXJlbGVhc2UgdGVzdGluZyIKKyAgIGVjaG8gIiAtZCA6IGNvbmZpZ3VyZSBmb3IgYmluYXJ5IGRpc3RyaWJ1dGlvbiIKKyAgIGV4aXQgMQorfQorCisjc2V0IC14CisKKworIworIyBmaW5kIG5zYi1wbGF0Zm9ybSBiYXNlZCBvbiB0aGUgcGF0aCB0byB0aGlzIHNjcmlwdAorIworRVhFX1BBVEg9YGRpcm5hbWUgJDBgCitpZiBbIC1mICRFWEVfUEFUSC9uc2ItZnVuY3Rpb25zIF07dGhlbgorICAgLiAkRVhFX1BBVEgvbnNiLWZ1bmN0aW9ucworZWxpZiBbIC1mICRIT01FL2Jpbi9uc2ItZnVuY3Rpb25zIF07IHRoZW4KKyAgIC4gJEhPTUUvYmluL25zYi1mdW5jdGlvbnMKK2VsaWYgWyAtZiBuc2ItZnVuY3Rpb25zIF07dGhlbgorICAgLiBuc2ItZnVuY3Rpb25zCitlbHNlCisgICBlY2hvICJDYW5ub3QgZmluZCBuc2ItZnVuY3Rpb25zIGluICRFWEVfUEFUSCwgJEhPTUUvYmluIG9yICRQV0QiCisgICBleGl0IDEKK2ZpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK05TQl9DT05GSUdfQUxMPTIKKworIyAgICAgIHgpICB4PSRPUFRBUkcgOzsKK3doaWxlIGdldG9wdHMgZHM6eCBvcHQKK2RvCisgICAgY2FzZSAiJG9wdCIgaW4KKyAgICAgIGQpICBOU0JfQ09ORklHX0FMTD0wOzsKKyAgICAgIHMpICBTUkNEPSRPUFRBUkcgOzsKKyAgICAgIHgpICBOU0JfQ09ORklHX0FMTD0xOzsKKyAgICAgIFw/KSMgdW5rbm93biBmbGFnCisgICAgICAgIHVzYWdlOzsKKyAgICBlc2FjCitkb25lCitzaGlmdCBgZXhwciAkT1BUSU5EIC0gMWAKKworaWYgWyAkTlNCX0NPTkZJR19BTEwgLWVxIDIgXTsgdGhlbgorICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSAtZCBvciAteCIKKyAgIHVzYWdlCitmaQorCitpZiBbICJ4JFNSQ0QiID0gIngiIF07IHRoZW4KKyAgIGZvciB4IGluIC4gJEhPTUUvc3JjL25ldC1zbm1wCisgICBkbworICAgICAgaWYgWyAtZiAkeC9jb25maWd1cmUgXTsgdGhlbgorICAgICAgICAgU1JDRD0keAorICAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICBkb25lCisgICBpZiBbICJ4JFNSQ0QiID0gIngiIF07IHRoZW4KKyAgICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgYSBzb3VyY2UgZGlyZWN0b3J5LiBQbGVhc2Ugc3BlY2lmeSBvbmUgZm9yIG1lLiIKKyAgICAgIHVzYWdlCisgICBmaQorZmkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWYgWyAkTlNCX0NPTkZJR19BTEwgLWVxIDAgXTt0aGVuCisgICAgbnNiX2NvbmZpZ19kaXN0ICRTUkNECitlbHNlCisgICAgbnNiX2NvbmZpZ19hbGwgJFNSQ0QKK2ZpCmRpZmYgLS1naXQgYS9kaXN0L25zYi1mdW5jdGlvbnMgYi9kaXN0L25zYi1mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2NWNjMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvbnNiLWZ1bmN0aW9ucwpAQCAtMCwwICsxLDUwOCBAQAorIyEvYmluL3NoCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAkSWQkCisjIEF1dGhvcjogUm9iZXJ0IFN0b3J5IDxyc3RvcnlAZnJlZXNubXAuY29tPgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBzb3VyY2UgdXNlciBjb25maWcKK2lmIFsgLWYgJEhPTUUvLnNubXAvbnNiLXJjIF07IHRoZW4KKyAgIC4gJEhPTUUvLnNubXAvbnNiLXJjCitmaQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCituc2Jfc3lzbmFtZSgpCit7CisgICBlY2hvIGB1bmFtZSAtbXJzIHwgdHIgJyAvJyAnX18nYAorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBVdGlsaXR5IHZhcnMKKyMKK05TQl9WRVJTSU9OPSR7TlNCX1ZFUlNJT046PSIifQorTlNCX0JVSUxEX0RJUj0ke05TQl9CVUlMRF9ESVI6PSIifQorTlNCX0JVSUxEX1NVRkZJWD0ke05TQl9CVUlMRF9TVUZGSVg6PSIifQorTlNCX1NSQ19ESVI9JHtOU0JfU1JDX0RJUjo9IiJ9CitOU0JfSU5TVEFMTF9ESVI9JHtOU0JfSU5TVEFMTF9ESVI6PSIifQorTlNCX0lOU1RBTExfRElSX0RFRkFVTFQ9JHtOU0JfSU5TVEFMTF9ESVJfREVGQVVMVDo9IiROU0JfQlVJTERfRElSL3VzciJ9CitOU0JfUExBVEZPUk09JHtOU0JfUExBVEZPUk06PWBuc2Jfc3lzbmFtZWB9CisjIHN1biBkb2Vzbid0IHN1cHBvcnQgaG9zdG5hbWUgLXMKK05TQl9IT1NUPSR7TlNCX0hPU1Q6PWBob3N0bmFtZSB8IGN1dCAtZjEgLWQuYH0KK05TQl9RVUlFVD0ke05TQl9RVUlFVDo9MH0KK05TQl9QUk9NUFQ9JHtOU0JfUFJPTVBUOj0wfQorTlNCX0NMRUFOPSR7TlNCX0NMRUFOOj0xfQorTlNCX0NPTkZJR19BTEw9JHtOU0JfQ09ORklHX0FMTDo9MH0KK05TQl9TS0lQX0NPTkZJRz0ke05TQl9TS0lQX0NPTkZJRzo9MH0KK05TQl9TS0lQX0JVSUxEPSR7TlNCX1NLSVBfQlVJTEQ6PTB9CitOU0JfU0tJUF9URVNUPSR7TlNCX1NLSVBfVEVTVDo9MH0KK05TQl9TS0lQX0lOU1RBTEw9JHtOU0JfU0tJUF9JTlNUQUxMOj0wfQorTlNCX0VSUl9DVFhfTElORVM9JHtOU0JfRVJSX0NUWF9MSU5FUzo9MjV9CitOU0JfRElTVF9UUkFOU1BPUlRTPSJVRFAgVENQIFVuaXggQ2FsbGJhY2siCitOU0JfRVhUUkFfVFJBTlNQT1JUUz0iIgorTlNCX0RJU1RfTU9EVUxFUz0ke05TQl9ESVNUX01PRFVMRVM6PSJob3N0IGRpc21hbi9ldmVudC1taWIgc211eCJ9CitOU0JfRVhUUkFfTU9EVUxFUz0ke05TQl9FWFRSQV9NT0RVTEVTOj0iZXhhbXBsZXMgZXhhbXBsZXMvZXhhbXBsZSBzbXV4IFJtb24ifQorI3Rlc3RoYW5kbGVyCitOU0JfRVhUUkFfQ09ORklHPSR7TlNCX0VYVFJBX0NPTkZJRzo9IiJ9CitOU0JfUFJFRklYPSR7TlNCX1BSRUZJWDo9Ii91c3IifQorTlNCX0VYVFJBX0lOU1RBTEw9JHtOU0JfRVhUUkFfSU5TVEFMTDo9IiJ9CitOU0JfU0hBUkVEPSR7TlNCX1NIQVJFRDo9Ii0tZW5hYmxlLXNoYXJlZCJ9CitOU0JfVklFVz1jYXQKK05TQl9GTE9XPQorTlNCX0RBVEU9JHtOU0JfREFURTo9YGRhdGUgKyV5JW0lZF8lSCVNYH0KKworIyMgZW1iZWRkZWQgcGVybAorTlNCX0RJUkxJTktfRElSUz0icGVybCBtaWJzIGluY2x1ZGUgcHl0aG9uIgorTlNCX1BFUkw9JHtOU0JfUEVSTDo9IiJ9CisjTlNCX1BFUkw9JHtOU0JfUEVSTDo9Ii0tZW5hYmxlLWVtYmVkZGVkLXBlcmwifQoraWYgWyAieCROU0JfUEVSTCIgIT0gIngiIF07IHRoZW4KKyAgTlNCX1NLSVBfRElSTElOSz0ke05TQl9TS0lQX0RJUkxJTks6PTB9CitlbHNlCisgIE5TQl9TS0lQX0RJUkxJTks9JHtOU0JfU0tJUF9ESVJMSU5LOj0xfQorZmkKKworIworIyBTeXN0ZW0gc3BlY2lmaWMgYWRkaXRpb25zCisjCitjYXNlIGB1bmFtZSAtc2AgaW4KKworICAgU3VuT1MpCisgICAgICBOU0JfVEFJTF9BUkdTPSItJE5TQl9FUlJfQ1RYX0xJTkVTIgorICAgICAgOzsKKworICAgKikKKyAgICAgIE5TQl9UQUlMX0FSR1M9Ii1uICROU0JfRVJSX0NUWF9MSU5FUyIKKyAgICAgIDs7Citlc2FjCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVXRpbGl0eSBmdW5jdGlvbnMKKyMKKworbnNiX2Fib3J0KCkKK3sKKyAgIGVjaG8KKyAgIGVjaG8gIkFCT1JUSU5HOiAkQCIgPiYyCisgICBleGl0IDI1NQorfQorCituc2JfaW5mbygpCit7CisgICBpZiBbICROU0JfUVVJRVQgLW5lIDEgXTsgdGhlbgorICAgICAgZWNobyAkQAorICAgZmkKK30KKworbnNiX3Byb21wdCgpCit7CisgICBpZiBbICJ4JDEiID0gIngtZiIgXTsgdGhlbgorICAgICAgc2hpZnQgMQorICAgICAgdG1wX25zYl9wcm9tcHQ9MQorICAgZWxzZQorICAgICAgdG1wX25zYl9wcm9tcHQ9JE5TQl9QUk9NUFQKKyAgIGZpCisgICBpZiBbICR0bXBfbnNiX3Byb21wdCAtZXEgMSBdOyB0aGVuCisgICAgICBlY2hvICRACisgICAgICByZWFkIG5zYl9wcm9tcHRfZHVtbXkKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiRAIChQUk9NUFQgU0tJUFBFRCkiCisgICBmaQorfQorCituc2JfZmxvdygpCit7CisgICAgTlNCX0ZMT1c9JE5TQl9GTE9XOiRACisgICAgZWNobyAiUnVubmluZyAkQCIgPiYyCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCituc2JfY29uZmlnX2Rpc3QoKQoreworICAgbnNiX2Zsb3cgY29uZmlnX2Rpc3QKKyAgIGlmIFsgJCMgLWx0IDEgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICJ1c2FnZTogbnNiX2NvbmZpZ19kaXN0IHNyY19kaXIiCisgICBmaQorICAgbmdjX3NyYz0kMQorICAgaWYgWyAhIC1kICRuZ2Nfc3JjIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiJG5nY19zcmMgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKyAgIGlmIFsgISAtZCAkbmdjX3NyYy9hZ2VudC9taWJncm91cCBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgImFnZW50L21pYmdyb3VwIGRpcmVjdG9yeSBpbiAkbmdjX3NyYyBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorICAgbmdjX2Rlc3Q9JDIKKyAgIGlmIFsgIlgkbmdjX2Rlc3QiICE9ICJYIiAtYSAhIC1kICRuZ2NfZGVzdCBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgIiRuZ2NfZGVzdCBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorCisgICAjCisgICAjIHNvbWUgbW9kdWxlcyBtaWdodCBiZSByZWxlYXNlIHNwZWNpZmljLCBzbyBtYWtlIHN1cmUgdGhleQorICAgIyBleGlzdCBiZWZvcmUgd2Ugc2VuZCB0aGVtIG9mZiB0byBjb25maWd1cmUKKyAgICMKKyAgIE5TQl9GSU5BTF9NT0RVTEVTPQorICAgZm9yIG5jZF94IGluICROU0JfRElTVF9NT0RVTEVTCisgICBkbworCWlmIFsgLXIgJG5nY19zcmMvYWdlbnQvbWliZ3JvdXAvJG5jZF94LmggXTsgdGhlbgorCQlOU0JfRklOQUxfTU9EVUxFUz0iJE5TQl9GSU5BTF9NT0RVTEVTICRuY2RfeCIKKwlmaQorICAgZG9uZQorCisgICAjCisgICAjIE5PVEU6IGZvciBzb21lIHJlYXNvbiwgYmFzaCBkb2VzIG5vdCBleHBhbmQgdmFyaWFibGVzCisgICAjIGluc2lkZSBvZiBzaW5nbGUgcXVvdGVzLCBzbyB1c2UgZG91YmxlIHF1b3RlcworICAgIworICAgZWNobyAkbmdjX3NyYy9jb25maWd1cmUgLS13aXRoLXN5cy1sb2NhdGlvbj1Vbmtub3duIFwKKyAgICAgIC0tcHJlZml4PSIkTlNCX1BSRUZJWCIgXAorICAgICAgLS1kaXNhYmxlLWRldmVsb3BlciAkTlNCX0VYVFJBX0NPTkZJRyBcCisgICAgICAtLXdpdGgtc3lzLWNvbnRhY3Q9J1N5c3RlbSBBZG1pbmlzdHJhdG9yJyBcCisgICAgICAtLXdpdGgtZGVmYXVsdHMgLS13aXRoLW1pYi1tb2R1bGVzPSIkTlNCX0ZJTkFMX01PRFVMRVMiCisgICAkbmdjX3NyYy9jb25maWd1cmUgLS13aXRoLXN5cy1sb2NhdGlvbj1Vbmtub3duIFwKKyAgICAgIC0tcHJlZml4PSIkTlNCX1BSRUZJWCIgXAorICAgICAgLS1kaXNhYmxlLWRldmVsb3BlciAkTlNCX0VYVFJBX0NPTkZJRyBcCisgICAgICAtLXdpdGgtc3lzLWNvbnRhY3Q9J1N5c3RlbSBBZG1pbmlzdHJhdG9yJyBcCisgICAgICAtLXdpdGgtZGVmYXVsdHMgLS13aXRoLW1pYi1tb2R1bGVzPSIkTlNCX0ZJTkFMX01PRFVMRVMiCisgICAjIEknZCBsaWtlIHRvIGFkZCAnIHwgdGVlIG5zYl9jb25maWcuJE5TQl9EQVRFJyB0byBzYXZlIG91dHB1dCwgYnV0IHRoZW4KKyAgICMgSSdkIGxvc2UgdGhlIHJjIGZyb20gY29uZmlndXJlLCB3aGljaCBJIG5lZWQuLi4gc2lnaAorICAgbmdjX3JjPSQ/CisgICBpZiBbICRuZ2NfcmMgLW5lIDAgXTt0aGVuCisgICAgICBuc2JfYWJvcnQgIkVycm9yIGR1cmluZyBjb25maWd1cmUgZGlzdCAocmM9JG5nY19yYykiCisgICBmaQorfQorCituc2JfY29uZmlnX2FsbCgpCit7CisgICBuc2JfZmxvdyBjb25maWdfYWxsCisgICBpZiBbICQjIC1sdCAxIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAidXNhZ2U6IG5zYl9jb25maWdfYWxsIHNyY19kaXIiCisgICBmaQorICAgbmdjX3NyYz0kMQorICAgaWYgWyAhIC1kICRuZ2Nfc3JjIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiJG5nY19zcmMgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKyAgIGlmIFsgISAtZCAkbmdjX3NyYy9hZ2VudC9taWJncm91cCBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgImFnZW50L21pYmdyb3VwIGRpcmVjdG9yeSBpbiAkbmdjX3NyYyBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorICAgbmdjX2Rlc3Q9JDIKKyAgIGlmIFsgIlgkbmdjX2Rlc3QiICE9ICJYIiAtYSAhIC1kICRuZ2NfZGVzdCBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgIiRuZ2NfZGVzdCBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorCisgICAjCisgICAjIFN5c3RlbSBzcGVjaWZpYyBhZGRpdGlvbnMKKyAgICMKKyAgIGNhc2UgYHVuYW1lIC1zYCBpbgorCisgICBMaW51eCkKKyAgICAgIE5TQl9JUFY2PSR7TlNCX0lQVjY6PSItLWVuYWJsZS1pcHY2In0KKyAgICAgIE5TQl9FWFRSQV9UUkFOU1BPUlRTPSJJUFgiCisgICAgICA7OworCisgICAjRGFyd2luKQorICAgIyAgIDs7CisKKyAgICopCisgICAgICBOU0JfSVBWNj0ke05TQl9JUFY2Oj0iLS1lbmFibGUtaXB2NiJ9CisgICAgICA7OworICAgZXNhYworCisgICAjCisgICAjIHVzZSBsaWJ3cmFwIGlmIHdlIGNhbiBmaW5kIHRoZSBoZWFkZXIKKyAgICMKKyAgIGlmIFsgLWYgL3Vzci9pbmNsdWRlL3RjcGQuaCBdOyB0aGVuCisgICAgICBOU0JfTElCV1JBUD0ke05TQl9MSUJXUkFQOj0iLS13aXRoLWxpYndyYXAifQorICAgICAgTlNCX0VYVFJBX0NPTkZJRz0iJE5TQl9FWFRSQV9DT05GSUcgJE5TQl9MSUJXUkFQIgorICAgZmkKKworICAgIworICAgIyBzb21lIG1vZHVsZXMgbWlnaHQgYmUgcmVsZWFzZSBzcGVjaWZpYywgc28gbWFrZSBzdXJlIHRoZXkKKyAgICMgZXhpc3QgYmVmb3JlIHdlIHNlbmQgdGhlbSBvZmYgdG8gY29uZmlndXJlCisgICAjCisgICBOU0JfRklOQUxfTU9EVUxFUz0KKyAgIGZvciBuY2RfeCBpbiAkTlNCX0RJU1RfTU9EVUxFUyAkTlNCX0VYVFJBX01PRFVMRVMKKyAgIGRvCisJaWYgWyAtciAkbmdjX3NyYy9hZ2VudC9taWJncm91cC8kbmNkX3guaCBdOyB0aGVuCisJCU5TQl9GSU5BTF9NT0RVTEVTPSIkTlNCX0ZJTkFMX01PRFVMRVMgJG5jZF94IgorCWZpCisgICBkb25lCisKKyAgICMKKyAgICMgY29uZmlndXJlCisgICAjCisgICAjIE5PVEU6IGZvciBzb21lIHJlYXNvbiwgYmFzaCBkb2VzIG5vdCBleHBhbmQgdmFyaWFibGVzCisgICAjIGluc2lkZSBvZiBzaW5nbGUgcXVvdGVzLCBzbyB1c2UgZG91YmxlIHF1b3RlcworICAgIworICAgZWNobyAkbmdjX3NyYy9jb25maWd1cmUgIC0td2l0aC1kZWZhdWx0cyBcCisgICAgICAtLXByZWZpeD0iJE5TQl9QUkVGSVgiIFwKKyAgICAgIC0tZGlzYWJsZS1kZXZlbG9wZXIgJE5TQl9FWFRSQV9DT05GSUcgXAorICAgICAgIi0td2l0aC1taWItbW9kdWxlcz0kTlNCX0ZJTkFMX01PRFVMRVMiIFwKKyAgICAgICItLXdpdGgtdHJhbnNwb3J0cz0kTlNCX0RJU1RfVFJBTlNQT1JUUyAkTlNCX0VYVFJBX1RSQU5TUE9SVFMiIFwKKyAgICAgICROU0JfU0hBUkVEICROU0JfSVBWNiAkTlNCX1BFUkwKKyAgICRuZ2Nfc3JjL2NvbmZpZ3VyZSAgLS13aXRoLWRlZmF1bHRzIFwKKyAgICAgIC0tcHJlZml4PSIkTlNCX1BSRUZJWCIgXAorICAgICAgLS1kaXNhYmxlLWRldmVsb3BlciAkTlNCX0VYVFJBX0NPTkZJRyBcCisgICAgICAiLS13aXRoLW1pYi1tb2R1bGVzPSROU0JfRklOQUxfTU9EVUxFUyIgXAorICAgICAgIi0td2l0aC10cmFuc3BvcnRzPSROU0JfRElTVF9UUkFOU1BPUlRTICROU0JfRVhUUkFfVFJBTlNQT1JUUyIgXAorICAgICAgJE5TQl9TSEFSRUQgJE5TQl9JUFY2ICROU0JfUEVSTAorICAgIyBJJ2QgbGlrZSB0byBhZGQgJyB8IHRlZSBuc2JfY29uZmlnLiROU0JfREFURScgdG8gc2F2ZSBvdXRwdXQsIGJ1dCB0aGVuCisgICAjIEknZCBsb3NlIHRoZSByYyBmcm9tIGNvbmZpZ3VyZSwgd2hpY2ggSSBuZWVkLi4uIHNpZ2gKKyAgIG5nY19yYz0kPworICAgaWYgWyAkbmdjX3JjIC1uZSAwIF07dGhlbgorICAgICAgbnNiX2Fib3J0ICJFcnJvciBkdXJpbmcgY29uZmlndXJlIGFsbCAocmM9JG5nY19yYykiCisgICBmaQorfQorCituc2JfemlwKCkKK3sKKyAgIGlmIFsgJCMgLW5lIDMgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICJ1c2FnZTogJDAgcmVsZWFzZSBidWlsZF9kaXJlY3RvcnkgZGVzdF9kaXIiCisgICBmaQorCisgICByZWxlYXNlPSQxCisgICBidWlsZF9kaXI9JDIKKyAgIGRlc3RfZGlyPSQzCisKKyAgIGJ1aWxkPSRidWlsZF9kaXIvJE5TQl9QTEFURk9STQorCisgICBpZiBbICEgLWQgJGJ1aWxkIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiJGJ1aWxkIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorCisgICBpZiBbICEgLWQgJGJ1aWxkL3VzciBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgImluc3RhbGwgZGlyZWN0b3J5ICRidWlsZC91c3IgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisKKyAgIGNkICRidWlsZAorCisgICBybSAtZiAkZGVzdF9kaXIvJHJlbGVhc2UtJE5TQl9QTEFURk9STS50YXIKKyAgIG5zYl9pbmZvICJ0YXIgY2YgJGRlc3RfZGlyLyRyZWxlYXNlLSROU0JfUExBVEZPUk0udGFyIHVzciIKKyAgIHRhciBjZiAkZGVzdF9kaXIvJHJlbGVhc2UtJE5TQl9QTEFURk9STS50YXIgdXNyCisKKyAgIG5zYl9pbmZvICJnemlwIC0tYmVzdCAkZGVzdF9kaXIvJHJlbGVhc2UtJE5TQl9QTEFURk9STS50YXIiCisgICBnemlwIC0tYmVzdCAkZGVzdF9kaXIvJHJlbGVhc2UtJE5TQl9QTEFURk9STS50YXIKKworICAgaWYgWyAkTlNCX1FVSUVUIC1uZSAxIF07IHRoZW4KKyAgICAgIGxzIC1sdCAkZGVzdF9kaXIKKyAgIGZpCit9CisKK25zYl91cGxvYWQoKQoreworICAgYnVpbGRfZGlyPSQxCisgICB0YXJnZXQ9JDIKKyAgIG5zYl9mbG93IHVwbG9hZCB0byAkdGFyZ2V0OiBjb25maWcubG9nIGNvbmZpZ3VyZS1zdW1tYXJ5IG5zYl9tYWtlLWFsbC4kTlNCX0RBVEUgbnNiX21ha2UtdGVzdC4kTlNCX0RBVEUKKyAgIGRpcj0kUFdECisgICBjZCAkYnVpbGRfZGlyCisgICAvdXNyL2Jpbi9zY3AgY29uZmlnLmxvZyBjb25maWd1cmUtc3VtbWFyeSBuc2JfbWFrZS1hbGwuJE5TQl9EQVRFIG5zYl9tYWtlLXRlc3QuJE5TQl9EQVRFXAorICAgICAgICAgICAgICAgICAkdGFyZ2V0CisgICBjZCAkZGlyCit9CisKK25zYl9kaXJfbGluaygpCit7CisgIGlmIFsgJCMgLWx0IDIgXTsgdGhlbgorICAgIG5zYl9hYm9ydCAidXNhZ2U6IG5zYl9kaXJfbGluayBzcmNfZGlyIGRzdF9kaXIiCisgIGZpCisgIGxpbmtfc3JjX2Rpcj0kMQorICBsaW5rX2RzdF9kaXI9JDIKKyAgaWYgWyAtZCAkbGlua19zcmNfZGlyIF07IHRoZW4KKyAgICBuc2JfZmxvdyBzZXQgdXAgc2hhZG93IGRpcmVjdG9yeSAkbGlua19kc3RfZGlyCisgICAgJE5TQl9ESVJMSU5LICRsaW5rX3NyY19kaXIgJGxpbmtfZHN0X2RpcgorICAgIHJjPSQ/CisgICAgaWYgWyAkcmMgLW5lIDAgXTt0aGVuCisgICAgICBuc2JfYWJvcnQgIkVycm9yIGR1cmluZyBuc2JfZGlyX2xpbmsgKHJjPSRyYykiCisgICAgZmkKKyAgZWxzZQorICAgIG5zYl9pbmZvICJTa2lwcGluZyAkbGlua19zcmNfZGlyIgorICBmaQorICB9CisKK25zYl9tYWtlKCkKK3sKKyAgIG5zYl9mbG93IG1ha2UgJDEKKyAgIHRhcmdldD0kMQorICAgc2hpZnQgMQorICAgcGFybXM9JEAKKworICAgaWYgWyAieCROU0JfTUFLRSIgPSAieCIgXTt0aGVuCisgICAgICAjbnNiX2luZm8gIlNlYXJjaGluZyBmb3IgR05VIG1ha2UgKHNldCBOU0JfTUFLRSB0byBza2lwIHRoaXMgc3RlcCkiCisgICAgICBmb3IgcCBpbiBgZWNobyAkUEFUSCB8IHRyICc6JyAnICdgCisgICAgICBkbworICAgICAgICAgI2VjaG8gJHAKKyAgICAgICAgIGlmIFsgLXggJHAvbWFrZSBdO3RoZW4KKyAgICAgICAgICAgIGR1bW15PWAkcC9tYWtlIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCBHTlVgCisgICAgICAgICAgICBpZiBbICQ/IC1lcSAwIF07dGhlbgorCSAgICAgICAjbnNiX2luZm8gInVzaW5nICRwL21ha2UgKCRkdW1teSkiCisgICAgICAgICAgICAgICBOU0JfTUFLRT0kcC9tYWtlCisgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgICAgICBpZiBbIC14ICRwL2dtYWtlIF07dGhlbgorICAgICAgICAgICAgZHVtbXk9YCRwL2dtYWtlIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCBHTlVgCisgICAgICAgICAgICBpZiBbICQ/IC1lcSAwIF07dGhlbgorCSAgICAgICAjbnNiX2luZm8gInVzaW5nICRwL2dtYWtlICgkZHVtbXkpIgorICAgICAgICAgICAgICAgTlNCX01BS0U9JHAvZ21ha2UKKyAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIFsgIngkTlNCX01BS0UiID0gIngiIF07dGhlbgorICAgICAgICAgbnNiX2Fib3J0ICJHTlUgbWFrZSBub3QgZm91bmQuIFNldCBOU0JfTUFLRSB0byB5b3VyIG1ha2UgZXhlY3V0YWJsZS4iCisgICAgICBmaQorICAgZmkKKworICAgbnNiX21ha2VfT1VUUFVUPW5zYl9tYWtlLSR0YXJnZXQuJE5TQl9EQVRFCisgICBuc2JfaW5mbyAiTWFraW5nICR0YXJnZXQuLi4gKGxvZyBpcyAkbnNiX21ha2VfT1VUUFVUKSIKKyAgICMKKyAgIGlmIFsgIngkdGFyZ2V0IiA9ICJ4YWxsIiBdOyB0aGVuCisgICAgICAkTlNCX01BS0UgTk9BVVRPREVQUz15IHRvdWNoaXQgMj4mMSB8IHRlZSAkbnNiX21ha2VfT1VUUFVUCisgICBmaQorICAgJE5TQl9NQUtFICROU0JfTUFLRV9FWFRSQSBOT0FVVE9ERVBTPXkgc3RhcnQtZmxhZyAkdGFyZ2V0ICRwYXJtcyBlbmQtZmxhZyAyPiYxIHwgdGVlIC1hICRuc2JfbWFrZV9PVVRQVVQKKyAgICMgY2hlY2tpbmcgJD8gd291bGQgb25seSBnZXQgdXMgdGhlIHJjIGZyb20gdGVlLCB3aGljaCBpcyB1c2VsZXNzCisKKyAgIG5zYl9pbmZvICJDaGVja2luZyBmb3IgZXJyb3JzLi4uIgorICAgZWdyZXAgLWkgImVycm9yfGZhaWx8d2FybnxubyBzdWNofGV4aXN0c3x0IGZpbmQgfGVybWlzc2lvbiBkZW5pZWQiICRuc2JfbWFrZV9PVVRQVVQgXAorICAgICAgICAgPiBuc2JfbWFrZS0kdGFyZ2V0LWFsbGVycnMuJE5TQl9EQVRFCisgICAjIGFsbG93IGZvciBhIGZldyBleGNlcHRpb25zCisgICBlZ3JlcCAtdiAtaSAiXm9rfHRlc3RpbmcgLipmYWlsdXJlfFthLXomX10oZmFpbHxlcnJvcil8d2FybnxlcnJvcihtaWJ8XC4zKXwoTE9HfFNOTVApX0VSUnxJbiBmdW5jdGlvbnw9IEZBSUxVUkV8REVCVUdNU0d8L1wqfHN0YXRpYyBsaWJyYXJ5IC4qIGlzIG5vdCBwb3J0YWJsZSIgbnNiX21ha2UtJHRhcmdldC1hbGxlcnJzLiROU0JfREFURSBcCisgICAgICAgICA+IG5zYl9tYWtlLSR0YXJnZXQtZXJycy4kTlNCX0RBVEUKKyAgIGlmIFsgLXMgbnNiX21ha2UtJHRhcmdldC1lcnJzLiROU0JfREFURSBdOyB0aGVuCisgICAgICBuc2JfcHJvbXB0ICJwcmVzcyBlbnRlciB0byB2aWV3IGVycm9ycyIKKyMgICAgICBncmVwICc6JyAkbnNiX21ha2VfT1VUUFVUID4gbnNiX21ha2UtJHRhcmdldC1lcnJzMi4kTlNCX0RBVEUKKyMgICAgICB0YWlsIC1uICROU0JfRVJSX0NUWF9MSU5FUyBuc2JfbWFrZS0kdGFyZ2V0LWVycnMyLiROU0JfREFURSA+JjIKKyAgICAgIHRhaWwgJE5TQl9UQUlMX0FSR1MgbnNiX21ha2UtJHRhcmdldC1lcnJzLiROU0JfREFURSA+JjIKKyAgICAgIG5zYl9hYm9ydCAiRXJyb3IocykgZHVyaW5nIG1ha2UgJHRhcmdldCIKKyAgIGZpCisKKyAgIGlmIFsgLWYgYnVpbGQtaW4tcHJvZ3Jlc3MtZmxhZyBdO3RoZW4KKyAgICAgbnNiX2Fib3J0ICJtYWtlICR0YXJnZXQgaW5jb21wbGV0ZSIKKyAgIGZpCit9CisKK25zYl9kZWZhdWx0X3BhdGhzKCkKK3sKKyAgIGlmIFsgIngkTlNCX1ZFUlNJT04iID0gIngiIF07IHRoZW4KKyAgICAgIE5TQl9WRVJTSU9OPSJ1bmtub3duLXZlcnNpb24iCisgICBmaQorICAgaWYgWyAieCROU0JfU1JDX0RJUiIgPSAieCIgXTsgdGhlbgorICAgICAgTlNCX1NSQ19ESVI9JEhPTUUvc3JjL25ldC1zbm1wLSROU0JfVkVSU0lPTgorICAgZmkKKyAgIGlmIFsgIngkTlNCX0JVSUxEX0RJUiIgPSAieCIgXTsgdGhlbgorICAgICAgTlNCX0JVSUxEX0RJUj0kSE9NRS9idWlsZC8kTlNCX1ZFUlNJT04KKyAgICAgIGlmIFsgIngkTlNCX1NVRkZJWCIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgIE5TQl9CVUlMRF9ESVI9JE5TQl9CVUlMRF9ESVIvJE5TQl9TVUZGSVgKKyAgICAgIGZpCisgICBmaQorICAgaWYgWyAieCROU0JfSU5TVEFMTF9ESVIiID0gIngiIF07IHRoZW4KKyAgICAgIE5TQl9JTlNUQUxMX0RJUj0iJE5TQl9JTlNUQUxMX0RJUl9ERUZBVUxUIgorICAgZmkKK30KKworbnNiX2J1aWxkKCkKK3sKKyAgIGlmIFsgJCMgLWx0IDUgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICJ1c2FnZTogJDAgcmVsZWFzZSBzcmNfZGlyIGJ1aWxkX2RpcmVjdG9yeSBkZXN0X2RpciBjb25maWdfYWxsX2ZsYWcgKCRAKSIKKyAgIGZpCisKKyAgIG5zYl9jb25maWdfYWxsX2ZsYWc9MAorICAgcmVsZWFzZT0kMQorICAgc3JjX2Rpcj0kMgorICAgYnVpbGRfZGlyPSQzCisgICBkZXN0X2Rpcj0kNAorICAgbnNiX2NvbmZpZ19hbGxfZmxhZz0kNQorICAgc2hpZnQgNQorCisgICBuc2JfZmxvdyBidWlsZCBpbiAkYnVpbGRfZGlyCisgICBuc2JfZmxvdyBob3N0ICROU0JfSE9TVAorICAgbnNiX2Zsb3cgcGxhdGZvcm0gJE5TQl9QTEFURk9STQorCisgICBpZiBbICEgLWQgJHNyY19kaXIgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICIkc3JjX2RpciBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorCisgICBpZiBbICEgLWQgJGJ1aWxkX2RpciBdOyB0aGVuCisgICAgICBta2RpciAkYnVpbGRfZGlyCisgICAgICBpZiBbICEgLWQgJGJ1aWxkX2RpciBdOyB0aGVuCisgICAgICAgICBuc2JfYWJvcnQgIiRidWlsZF9kaXIgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0ISIKKyAgICAgIGZpCisgICBmaQorCisgICBuc2JfaW5mbyAiQ2hhbmdpbmcgZGlyZWN0b3JpZXMgdG8gJGJ1aWxkX2RpciIKKyAgIGNkICRidWlsZF9kaXIKKworICAgaWYgWyAkTlNCX0NMRUFOIC1ndCAwIF07IHRoZW4KKyAgICAgIG5zYl9pbmZvICJDbGVhbmluZyB1cC4uLiIKKyAgICAgIGlmIFsgJE5TQl9DTEVBTiAtZXEgMiBdO3RoZW4KKyAgICAgICAgaWYgWyAieCRQV0QiID0gIngvIiBdOyB0aGVuCisgICAgICAgICAgIG5zYl9hYm9ydCAiTm90IHJ1bm5pbmcgcm0gLWZSIGZyb20gLyIKKyAgICAgICAgZmkKKyAgICAgICAgbnNiX2luZm8gInJtIC1mUiAqIC5bYS16QS1aXSogPiAvZGV2L251bGwgMj4mMSIKKyAgICAgICAgcm0gLWZSICogLlthLXpBLVpdKiA+IC9kZXYvbnVsbCAyPiYxCisgICAgICBlbHNlCisgICAgICAgIGlmIFsgIngkZGVzdF9kaXIiICE9ICJ4IiAtYSAieCRkZXN0X2RpciIgIT0gIngvIiBdOyB0aGVuCisgICAgICAgICAgbnNiX2luZm8gInJtIC1mUiBuc2JfKiAkZGVzdF9kaXIgPiAvZGV2L251bGwgMj4mMSIKKyAgICAgICAgICAjcm0gLWZSIG5zYl8qICRkZXN0X2RpciA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLWYgTWFrZWZpbGUgXTsgdGhlbgorICAgICAgICAgICAgbnNiX21ha2UgTk9BVVRPREVQUz15IGRpc3RjbGVhbgorICAgICAgICAgICAgbnNiX2J1aWxkX3JjPSQ/CisgICAgICAgICAgICBpZiBbICRuc2JfYnVpbGRfcmMgLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIG5zYl9hYm9ydCAiRXJyb3IgZHVyaW5nIG1ha2UgZGlzdGNsZWFuIChyYz0kbnNiX2J1aWxkX3JjKSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgZmkKKworICAgaWYgWyAiWCRkZXN0X2RpciIgIT0gIlgiIC1hICEgLWQgJGRlc3RfZGlyIF07IHRoZW4KKyAgICAgIG1rZGlyIC1wICRkZXN0X2RpcgorICAgICAgaWYgWyAhIC1kICRkZXN0X2RpciBdOyB0aGVuCisgICAgICAgICBuc2JfYWJvcnQgIiRkZXN0X2RpciBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QhIgorICAgICAgZmkKKyAgIGZpCisKKyAgIGlmIFsgJE5TQl9TS0lQX0RJUkxJTksgLWVxIDEgXTsgdGhlbgorICAgICAgbnNiX2luZm8gIlNraXBwaW5nIG5zYl9kaXJfbGluayIKKyAgIGVsc2UKKyAgICAgIGZvciBkIGluICROU0JfRElSTElOS19ESVJTOyBkbworICAgICAgICBuc2JfZGlyX2xpbmsgJHNyY19kaXIvJGQgJGJ1aWxkX2Rpci8kZAorICAgICAgZG9uZQorICAgZmkKKworICAgaWYgWyAkTlNCX1NLSVBfQ09ORklHIC1uZSAxIF07IHRoZW4KKyAgICAgIG5zYl9pbmZvICJDb25maWd1cmluZy4uLiAobG9nIGlzIG5zYl9jb25maWcuJE5TQl9EQVRFKSIKKyAgICAgIGlmIFsgIngkbnNiX2NvbmZpZ19hbGxfZmxhZyIgPSAieDAiIF07IHRoZW4KKyAgICAgICAgICBuc2JfY29uZmlnX2Rpc3QgJHNyY19kaXIgIiRkZXN0X2RpciIKKyAgICAgIGVsc2UKKyAgICAgICAgICBuc2JfY29uZmlnX2FsbCAkc3JjX2RpciAiJGRlc3RfZGlyIgorICAgICAgZmkKKyAgICAgIG5zYl9wcm9tcHQgInByZXNzIGVudGVyIHRvIGNvbnRpbnVlIgorICAgZmkKKworICAgaWYgWyAkTlNCX1NLSVBfQlVJTEQgLWVxIDEgXTsgdGhlbgorICAgICAgbnNiX2luZm8gIlNraXBwaW5nICdtYWtlIGFsbCciCisgICBlbHNlCisgICAgICBuc2JfbWFrZSBhbGwKKyAgIGZpCisKKyAgIGlmIFsgJE5TQl9TS0lQX1RFU1QgLWVxIDEgXTsgdGhlbgorICAgICAgbnNiX2luZm8gIlNraXBwaW5nICdtYWtlIHRlc3QnIgorICAgZWxzZQorICAgICAgbnNiX3Byb21wdCAiTm8gZXJyb3JzIGZvdW5kLCBwcmVzcyBlbnRlciB0byBydW4gdGVzdHMiCisgICAgICBTTk1QX1RNUERJUl9CQVNFPSRidWlsZF9kaXIvdGVzdHMKKyAgICAgIGV4cG9ydCBTTk1QX1RNUERJUl9CQVNFCisgICAgICBuc2JfbWFrZSB0ZXN0CisgICBmaQorCisgICBpZiBbICROU0JfU0tJUF9JTlNUQUxMIC1lcSAxIF07IHRoZW4KKyAgICAgIG5zYl9pbmZvICJTa2lwcGluZyAnbWFrZSBpbnN0YWxsJyIKKyAgIGVsc2UKKyAgICAgIG5zYl9wcm9tcHQgIk5vIGVycm9ycyBmb3VuZCwgcHJlc3MgZW50ZXIgdG8gaW5zdGFsbCIKKyAgICAgICMgREVTVERJUiBtYWtlcyBzdXJlIHRoZSBwZXJsIHN0dWZmIGdvZXMgaW50byAkZGVzdF9kaXIsIHRvbworICAgICAgbnNiX21ha2UgaW5zdGFsbCBERVNURElSPSIkZGVzdF9kaXIiICROU0JfRVhUUkFfSU5TVEFMTAorICAgZmkKKworICAgcmV0dXJuIDAKK30KZGlmZiAtLWdpdCBhL2Rpc3QvbnNiLW5pZ2h0bHkgYi9kaXN0L25zYi1uaWdodGx5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyOThhMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25zYi1uaWdodGx5CkBAIC0wLDAgKzEsMTg4IEBACisjIS9iaW4vc2gKKyMKKyMgJElkJAorIyBBdXRob3I6IFJvYmVydCBTdG9yeSA8cnN0b3J5QGZyZWVzbm1wLmNvbT4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3VzYWdlKCkKK3sKKyAgIGVjaG8gIlVzYWdlOiAkMCAgW29wdGlvbmFsIHBhcmFtc10gVkVSU0lPTiIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiBvcHRpb25hbCBwYXJhbXM6IFsteF0gWy1zIFNSQ0RdIFstYiBCVUlMRERdIFstaSBJTlNUQUxMRF0iCisgICBlY2hvICIgICAgICAgICAgICAgICAgICBbLWggaG9zdF0gWy1wIHBhdGhdIgorICAgZWNobyAiIFZFUlNJT04gICAgOiByZWxlYXNlIG51bWJlciAoZWcgNS4yLjIpIgorICAgZWNobyAiIC1zIFNSQ0RJUiAgOiBzb3VyZSBkaXJlY3RvcnkgWyRIT01FL3NyYy9uZXQtc25tcC1WRVJTSU9OXSIKKyAgIGVjaG8gIiAtYiBCVUlMREQgIDogYnVpbGQgZGlyZWN0b3J5IFskSE9NRS9idWlsZC9dIgorICAgZWNobyAiICAgICAgICAgICAgICBOT1RFLXBsYXRmb3JtIHdpbGwgYmUgYXBwZW5kZWQgdG8gYnVpbGQgZGlyZWN0b3J5IgorICAgZWNobyAiIC1pIElOU1RBTExEOiBpbnN0YWxsIGRpcmVjdG9yeSBbJEhPTUUvYnVpbGQvXCRQTEFURk9STS91c3JdIgorICAgZWNobyAiIgorICAgZWNobyAiIC14IDogY29uZmlndXJlIGV4dHJhIGZlYXR1cmVzIGZvciBwcmUtcmVsZWFzZSB0ZXN0aW5nIgorICAgZWNobyAiIC1DIDogZG9uJ3Qgc291cmNlICRIT01FLy5zbm1wL25zYi1uaWdodGx5IgorICAgZWNobyAiIgorICAgZWNobyAiIC1mIDogZnJvbSBhZGRyZXNzIGZvciBlbWFpbCByZXN1bHRzIgorICAgZWNobyAiIC1lIDogYWRkcmVzcyB0byBlbWFpbCBlcnJvciByZXN1bHRzIHRvIgorICAgZWNobyAiIC1vIDogYWRkcmVzcyB0byBlbWFpbCBzdWNjZXNzIHJlc3VsdHMgdG8iCisgICBlY2hvICIgLWggOiBob3N0IHRvIHVwbG9hZCByZXN1bHRzIHRvIgorICAgZWNobyAiIC1wIDogcGF0aCB0byB1cGxvYWQgcmVzdWx0cyB0byIKKyAgIGV4aXQgMQorfQorCisjc2V0IC14CisKKyMgbWFrZSBnZXRvcHRzIHdvcmsgb24gVHJ1NjQgYnkgcmVzcGF3bmluZyBpbiBQb3NpeCBtb2RlCitpZiBbICJgdW5hbWVgIiA9ICJPU0YxIiAtYSAiJEJJTl9TSCIgIT0gInhwZzQiIF07IHRoZW4KKyAgICBCSU5fU0g9eHBnNAorICAgIGV4cG9ydCBCSU5fU0gKKyAgICBleGVjICQwICQqCitmaQorCisjCisjIGZpbmQgbnNiLXBsYXRmb3JtIGJhc2VkIG9uIHRoZSBwYXRoIHRvIHRoaXMgc2NyaXB0CisjCitFWEVfUEFUSD1gZGlybmFtZSAkMGAKK2lmIFsgISAtZiAkRVhFX1BBVEgvbnNiLWZ1bmN0aW9ucyBdO3RoZW4KKyAgIGlmIFsgLWYgJEhPTUUvYmluL25zYi1mdW5jdGlvbnMgXTsgdGhlbgorICAgICAgRVhFX1BBVEg9JEhPTUUvYmluCisgICBlbGlmIFsgLWYgbnNiLWZ1bmN0aW9ucyBdO3RoZW4KKyAgICAgIEVYRV9QQVRIPSRQV0QKKyAgIGVsc2UKKyAgICAgIGVjaG8gIkNhbm5vdCBmaW5kIG5zYi1mdW5jdGlvbnMgaW4gJEVYRV9QQVRILCAkSE9NRS9iaW4gb3IgJFBXRCIKKyAgICAgIGV4aXQgMQorICAgZmkKK2ZpCisKK2lmIFsgIngkMSIgPSAieC1DIiBdOyB0aGVuCisgICAgc2hpZnQKK2Vsc2UKKyAgICBpZiBbIC1mICRIT01FLy5zbm1wL25zYi1uaWdodGx5IF07dGhlbgorICAgICAgICAuICRIT01FLy5zbm1wL25zYi1uaWdodGx5CisgICAgZmkKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgLXIgOiByZW1vdmUgYnVpbGQgZGlyIGJlZm9yZQorIyAtUiA6IHJlbW92ZSBidWlsZCBkaXIgYWZ0ZXIKK1BBUk1TPSIkUEFSTVMgLXIiCitOSUdIVExZX1ZFUkJPU0U9MAorTlNCX0VSUl9SRVNVTFRTX1RPPSIiCitOU0JfT0tfUkVTVUxUU19UTz0iIgorCit3aGlsZSBnZXRvcHRzIGI6ZTpmOmk6bzpzOnhoOnA6diBvcHQKK2RvCisgICAgY2FzZSAiJG9wdCIgaW4KKyAgICAgIGIpICBOU0JfQlVJTERfRElSPSRPUFRBUkc7OworICAgICAgZSkgIE5TQl9FUlJfUkVTVUxUU19UTz0kT1BUQVJHOzsKKyAgICAgIGYpICBOU0JfRlJPTT0kT1BUQVJHOzsKKyAgICAgIG8pICBOU0JfT0tfUkVTVUxUU19UTz0kT1BUQVJHOzsKKyAgICAgIGkpICBQQVJNUz0iLWkgJE9QVEFSRyAkUEFSTVMiOzsKKyAgICAgIHMpICBOU0JfU1JDX0RJUj0kT1BUQVJHOzsKKyAgICAgIGgpICBOU0JfU0NQX0hPU1Q9JE9QVEFSRworICAgICAgICAgIFBBUk1TPSItaCAkTlNCX1NDUF9IT1NUICRQQVJNUyIKKyAgICAgICAgICA7OworICAgICAgcCkgIE5TQl9TQ1BfREVTVD0kT1BUQVJHCisgICAgICAgICAgUEFSTVM9Ii1wICROU0JfU0NQX0RFU1QgJFBBUk1TIgorICAgICAgICAgIDs7CisgICAgICB4KSAgUEFSTVM9Ii14ICRQQVJNUyI7OworICAgICAgdikgIE5JR0hUTFlfVkVSQk9TRT0xOzsKKyAgICAgIFw/KSMgdW5rbm93biBmbGFnCisgICAgICAgIHVzYWdlOzsKKyAgICBlc2FjCitkb25lCitzaGlmdCBgZXhwciAkT1BUSU5EIC0gMWAKKworaWYgWyAkIyAtbmUgMSBdOyB0aGVuCisgICBlY2hvICJleHBlY3RpbmcgMSBhcmd1bWVudCwgZ290ICQjICgkQCkiCisgICB1c2FnZQorZmkKKworTlNCX1ZFUlNJT049JDEKKworLiAkRVhFX1BBVEgvbnNiLWZ1bmN0aW9ucworCituc2JfZGVmYXVsdF9wYXRocworCitQQVJNUz0iJFBBUk1TIC1iICROU0JfQlVJTERfRElSIC1zICROU0JfU1JDX0RJUiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2VjaG8gIlN0YXJ0OiBgZGF0ZWAiCitlY2hvICJSdW5uaW5nIG5zYi1wYWNrYWdlICRQQVJNUyAkTlNCX1ZFUlNJT04iCitpZiBbICROSUdIVExZX1ZFUkJPU0UgPSAxIF07IHRoZW4KKyAgICAkRVhFX1BBVEgvbnNiLXBhY2thZ2UgJFBBUk1TICROU0JfVkVSU0lPTgorZWxzZQorICAgICRFWEVfUEFUSC9uc2ItcGFja2FnZSAkUEFSTVMgJE5TQl9WRVJTSU9OID4gL2Rldi9udWxsCitmaQorUkM9JD8KK2VjaG8gIkZpbmlzaDogYGRhdGVgIgorY2QgJE5TQl9CVUlMRF9ESVIKK2Nhc2UgJFJDIGluCisgICAgMCkgIFJFU1VMVD0iU3VjY2VzcyIKKyAgICAgICAgTlNCX1JFU1VMVFNfVE89JE5TQl9PS19SRVNVTFRTX1RPCisgICAgICAgIEZJTEVTPSIiCisgICAgICAgIDs7CisgICAgKikgUkVTVUxUPSJFcnJvciAocmMgJFJDKSIKKyAgICAgICBOU0JfUkVTVUxUU19UTz0kTlNCX0VSUl9SRVNVTFRTX1RPCisgICAgICAgRklMRVM9YGxzIG5zYi1tYWtlLSotZXJycy4qIDI+L2Rldi9udWxsYAorICAgICAgIGlmIFsgIngkTlNCX1NDUF9IT1NUIiAhPSAieCIgXTsgdGhlbgorICAgICAgICAgIG5zYl91cGxvYWQgJE5TQl9CVUlMRF9ESVIgJE5TQl9TQ1BfSE9TVDokTlNCX1NDUF9ERVNULyROU0JfVkVSU0lPTi8kTlNCX1NVRkZJWAorICAgICAgIGZpCisgICAgICAgIDs7Citlc2FjCitlY2hvICJSZXN1bHQ6ICRSRVNVTFQiCisKK2lmIFsgIngkTlNCX1JFU1VMVFNfVE8iICE9ICJ4IiBdOyB0aGVuCisgICBTVUJKRUNUPSIkTlNCX1ZFUlNJT04gJFJFU1VMVCBvbiAkTlNCX0hPU1QgKCROU0JfUExBVEZPUk0pIgorICAgZWNobyAiU2VuZGluZyBtYWlsIHRvICROU0JfUkVTVUxUU19UTzogJFNVQkpFQ1QiCisgICBjYXNlIGB1bmFtZSAtc2AgaW4KKyAgICAgIE9wZW5CU0R8RnJlZUJTRCkgIyBtYWlsIGRvZXNuJ3QgYWxsb3cgc2V0dGluZyBGcm9tCisgICAgICAgICAjIHNlZW1zIHRvIGJlIGluIC91c3Ivc2Jpbiwgd2hpY2ggaXNuJ3QgaW4gYWxsIHBhdGhzCisJIFBBVEg9L3Vzci9zYmluLzokUEFUSAorICAgICAgICAgZWNobyAiRnJvbTogJE5TQl9GUk9NIiA+IG1haWwucmVzdWx0cworICAgICAgICAgZWNobyAiVG86ICROU0JfUkVTVUxUU19UTyIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICAjIG1haWwtcmVsYXRlZCBlcnJvcnMgdG8gT0sgYWRkcmVzcyAodXN1bGx5IGJ1aWxkbWFzdGVyKQorICAgICAgICAgZWNobyAiRXJyb3JzLVRvOiAkTlNCX09LX1JFU1VMVFNfVE8iID4+IG1haWwucmVzdWx0cworICAgICAgICAgZWNobyAiU3ViamVjdDogJFNVQkpFQ1QiID4+IG1haWwucmVzdWx0cworICAgICAgICAgZWNobyAiIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGdyZXAgQ09ORklHVVJFX09QVElPTlMgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaHxzZWQgJ3M6L2hvbWUvW14gXSovYnVpbGQ6JEhPTUU6ZycgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBlY2hvICJSZXN1bHQ6ICRSRVNVTFQiID4+IG1haWwucmVzdWx0cworICAgICAgICAgaWYgWyAieCRGSUxFUyIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgICAgIGNhdCAkRklMRVMgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBmaQorICAgICAgICAgc2VuZG1haWwgLXQgPCBtYWlsLnJlc3VsdHMKKyAgICAgICAgIDs7CisgICAgICBTdW5PUykgIyBubyBzZW5kbWFpbCwgbm8gbWFpbCAtcywgbmVlZCAtdCBmb3IgVG8gCisgICAgICAgICBlY2hvICJGcm9tOiAkTlNCX0ZST00iID4gbWFpbC5yZXN1bHRzCisgICAgICAgICAjIG1haWwtcmVsYXRlZCBlcnJvcnMgdG8gT0sgYWRkcmVzcyAodXN1bGx5IGJ1aWxkbWFzdGVyKQorICAgICAgICAgZWNobyAiRXJyb3JzLVRvOiAkTlNCX09LX1JFU1VMVFNfVE8iID4+IG1haWwucmVzdWx0cworICAgICAgICAgZWNobyAiU3ViamVjdDogJFNVQkpFQ1QiID4+IG1haWwucmVzdWx0cworICAgICAgICAgZWNobyAiIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGdyZXAgQ09ORklHVVJFX09QVElPTlMgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaHxzZWQgJ3M6L2hvbWUvW14gXSovYnVpbGQ6JEhPTUU6ZycgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBlY2hvICJSZXN1bHQ6ICRSRVNVTFQiID4+IG1haWwucmVzdWx0cworICAgICAgICAgaWYgWyAieCRGSUxFUyIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgICAgIGNhdCAkRklMRVMgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBmaQorICAgICAgICAgbWFpbCAtdCAkTlNCX1JFU1VMVFNfVE8gPCBtYWlsLnJlc3VsdHMKKyAgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICAgZWNobyAiUmVzdWx0OiAkUkVTVUxUIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGlmIFsgIngkRklMRVMiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICBjYXQgJEZJTEVTID4+IG1haWwucmVzdWx0cworICAgICAgICAgZmkKKyAgICAgICAgIG1haWwgLXMgIiRTVUJKRUNUIiAkTlNCX1JFU1VMVFNfVE8gPCBtYWlsLnJlc3VsdHMKKyAgICAgICAgIDs7CisgICBlc2FjCitmaQorCitpZiBbICRSQyAtZXEgMCBdOyB0aGVuCisgICAgICAgIGlmIFsgIngkTlNCX0JVSUxEX0RJUiIgPSAiLyIgXTsgdGhlbgorICAgICAgICAgICAgbnNiX2Fib3J0ICJOb3QgcnVubmluZyBybSAtZlIgZnJvbSAvIgorICAgICAgICBlbHNlCisgICAgICAgICAgICAvYmluL3JtIC1mUiAkTlNCX0JVSUxEX0RJUiA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgIGZpCitmaQorCitleGl0ICRSQwpkaWZmIC0tZ2l0IGEvZGlzdC9uc2ItcGFja2FnZSBiL2Rpc3QvbnNiLXBhY2thZ2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjUxYzE1MAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvbnNiLXBhY2thZ2UKQEAgLTAsMCArMSwxMzcgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQkCisjIEF1dGhvcjogUm9iZXJ0IFN0b3J5IDxyc3RvcnlAZnJlZXNubXAuY29tPgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordXNhZ2UoKQoreworICAgZWNobyAiVXNhZ2U6ICQwICBbcGFyYW1zXSBWRVJTSU9OIgorICAgZWNobyAiIgorICAgZWNobyAiICBwYXJhbXM6IFstY10gWy1kXSBbLVBdIFstcyBOU0JfU1JDX0RJUl0gWy1iIEJVSUxERF0gWy1pIE5TQl9JTlNUQUxMX0RJUl0iCisgICBlY2hvICIgICAgICAgICAgWy1oIGhvc3RdIFstcCBwYXRoXSIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiBWRVJTSU9OICAgIDogcmVsZWFzZSBudW1iZXIgKGVnIDUuMi4yKSIKKyAgIGVjaG8gIiAtcyBOU0JfU1JDX0RJUiAgOiBzb3VyY2UgZGlyZWN0b3J5IFskSE9NRS9zcmMvbmV0LXNubXAtVkVSU0lPTl0iCisgICBlY2hvICIgLWIgQlVJTEREICA6IGJ1aWxkIGRpcmVjdG9yeSBbJEhPTUUvYnVpbGQvXSIKKyAgIGVjaG8gIiAgICAgICAgICAgICAgTk9URS1wbGF0Zm9ybSB3aWxsIGJlIGFwcGVuZGVkIHRvIGJ1aWxkIGRpcmVjdG9yeSIKKyAgIGVjaG8gIiAtaSBOU0JfSU5TVEFMTF9ESVI6IGluc3RhbGwgZGlyZWN0b3J5IFskSE9NRS9idWlsZC9cJFBMQVRGT1JNL3Vzcl0iCisgICBlY2hvICIiCisgICBlY2hvICIgLXggOiBjb25maWd1cmUgZXh0cmEgZmVhdHVyZXMgZm9yIHByZS1yZWxlYXNlIHRlc3RpbmciCisgICBlY2hvICIgLWMgOiBza2lwIGNvbmZpZ3VyZSIKKyAgIGVjaG8gIiAtZCA6IGRpcnR5IGJ1aWxkIChkb24ndCBtYWtlIGRpc3RjbGVhbikiCisgICBlY2hvICIgLW0gOiBza2lwICdtYWtlIGFsbCciCisgICBlY2hvICIgLVAgOiBwYXVzZSBhdCBwcm9tcHRzIGluIGJldHdlZW4gc3RhZ2VzIgorICAgZWNobyAiIC1yIDogcmVtb3ZlIGJ1aWxkIGRpciAocm0gLWZSKSBiZWZvcmUgYnVpbGQiCisgICBlY2hvICIgLVIgOiByZW1vdmUgYnVpbGQgZGlyIChybSAtZlIpIGFmdGVyIHN1Y2Nlc3NmdWwgYnVpbGQiCisgICBlY2hvICIgLXQgOiBza2lwICdtYWtlIHRlc3QnIgorICAgZWNobyAiIC1DIDogZG9uJ3Qgc291cmNlICRIT01FLy5zbm1wL25zYi1wYWNrYWdlIgorICAgZWNobyAiIgorICAgZWNobyAiIC1oIDogaG9zdCB0byB1cGxvYWQgcmVzdWx0cyB0byIKKyAgIGVjaG8gIiAtcCA6IHBhdGggdG8gdXBsb2FkIHJlc3VsdHMgdG8iCisgICBleGl0IDEKK30KKworI3RyYXAgZXhpdCBTSUdJTlQKKworI3NldCAteAorCisjIG1ha2UgZ2V0b3B0cyB3b3JrIG9uIFRydTY0IGJ5IHJlc3Bhd25pbmcgaW4gUG9zaXggbW9kZQoraWYgWyAiYHVuYW1lYCIgPSAiT1NGMSIgLWEgIiRCSU5fU0giICE9ICJ4cGc0IiBdOyB0aGVuCisgICAgQklOX1NIPXhwZzQKKyAgICBleHBvcnQgQklOX1NICisgICAgZXhlYyAkMCAkKgorZmkKKworIworIyBmaW5kIG5zYi1wbGF0Zm9ybSBiYXNlZCBvbiB0aGUgcGF0aCB0byB0aGlzIHNjcmlwdAorIworRVhFX1BBVEg9YGRpcm5hbWUgJDBgCitpZiBbICEgLWYgJEVYRV9QQVRIL25zYi1mdW5jdGlvbnMgXTt0aGVuCisgICBpZiBbIC1mICRIT01FL2Jpbi9uc2ItZnVuY3Rpb25zIF07IHRoZW4KKyAgICAgIEVYRV9QQVRIPSRIT01FL2JpbgorICAgZWxpZiBbIC1mIG5zYi1mdW5jdGlvbnMgXTt0aGVuCisgICAgICBFWEVfUEFUSD0kUFdECisgICBlbHNlCisgICAgICBlY2hvICJDYW5ub3QgZmluZCBuc2ItZnVuY3Rpb25zIGluICRFWEVfUEFUSCwgJEhPTUUvYmluIG9yICRQV0QiCisgICAgICBleGl0IDEKKyAgIGZpCitmaQorCitpZiBbICJ4JDEiID0gIngtQyIgXTsgdGhlbgorICAgIHNoaWZ0CitlbHNlCisgICAgaWYgWyAtZiAkSE9NRS8uc25tcC9uc2ItcGFja2FnZSBdO3RoZW4KKyAgICAgICAgLiAkSE9NRS8uc25tcC9uc2ItcGFja2FnZQorICAgIGZpCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitSRU1PVkVfU1VDQ0VTUz0wCisKKyMgICAgICB4KSAgeD0kT1BUQVJHIDs7Cit3aGlsZSBnZXRvcHRzIGI6Y2RoOmk6bVBwOnJSczp0eCBvcHQKK2RvCisgICAgY2FzZSAiJG9wdCIgaW4KKyAgICAgIGIpICBOU0JfQlVJTERfRElSPSRPUFRBUkcgOzsKKyAgICAgIGMpICBOU0JfU0tJUF9DT05GSUc9MSA7OworICAgICAgZCkgIE5TQl9DTEVBTj0wIDs7CisgICAgICBoKSAgTlNCX1NDUF9IT1NUPSRPUFRBUkcgOzsKKyAgICAgIGkpICBOU0JfSU5TVEFMTF9ESVI9JE9QVEFSRyA7OworICAgICAgbSkgIE5TQl9TS0lQX0JVSUxEPTEgOzsKKyAgICAgIFApICBOU0JfUFJPTVBUPTEgOzsKKyAgICAgIHApICBOU0JfU0NQX0RFU1Q9JE9QVEFSRyA7OworICAgICAgcikgIE5TQl9DTEVBTj0yIDs7CisgICAgICBSKSAgUkVNT1ZFX1NVQ0NFU1M9MSA7OworICAgICAgcykgIE5TQl9TUkNfRElSPSRPUFRBUkcgOzsKKyAgICAgIHQpICBOU0JfU0tJUF9URVNUPTEgOzsKKyAgICAgIHgpICBOU0JfQ09ORklHX0FMTD0xOzsKKyAgICAgIFw/KSMgdW5rbm93biBmbGFnCisgICAgICAgIHVzYWdlOzsKKyAgICBlc2FjCitkb25lCitzaGlmdCBgZXhwciAkT1BUSU5EIC0gMWAKKworaWYgWyAkIyAtbmUgMSBdOyB0aGVuCisgICBlY2hvICJleHBlY3RpbmcgMSBhcmd1bWVudCwgZ290ICQjICgkQCkiCisgICB1c2FnZQorZmkKKworTlNCX1ZFUlNJT049JDEKKworLiAkRVhFX1BBVEgvbnNiLWZ1bmN0aW9ucworCituc2JfZGVmYXVsdF9wYXRocworCitpZiBbICROU0JfQ0xFQU4gLWVxIDEgXTsgdGhlbgorICAgaWYgWyAkTlNCX1NLSVBfQ09ORklHIC1lcSAxIF07IHRoZW4KKyAgICAgIGVjaG8gIkEgY2xlYW4gYnVpbGQgYWxzbyByZXF1aXJlcyBjb25maWd1cmF0aW9uICgtZCBhbmQgLWMiCisgICAgICBlY2hvICJjYW5ub3QgYm90aCBiZSBzcGVjaWZpZWQpLiIKKyAgICAgIHVzYWdlCisgICBmaQorZmkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbnNiX3Byb21wdCAicHJlc3MgZW50ZXIgdG8gYnVpbGQgJE5TQl9TUkNfRElSIGluICROU0JfQlVJTERfRElSLCBhbmQgaW5zdGFsbCBpbiAkTlNCX0lOU1RBTExfRElSIgorbnNiX2J1aWxkICROU0JfVkVSU0lPTiAkTlNCX1NSQ19ESVIgJE5TQl9CVUlMRF9ESVIgJE5TQl9JTlNUQUxMX0RJUiAkTlNCX0NPTkZJR19BTEwKK3JjPSQ/CitpZiBbICJ4JE5TQl9TQ1BfSE9TVCIgIT0gIngiIF07IHRoZW4KKyAgIG5zYl91cGxvYWQgJE5TQl9CVUlMRF9ESVIgJE5TQl9TQ1BfSE9TVDokTlNCX1NDUF9ERVNULyROU0JfVkVSU0lPTi8kTlNCX0hPU1QvCitmaQoraWYgWyAkcmMgLWVxIDAgXSAmJiBbICRSRU1PVkVfU1VDQ0VTUyAtZXEgMSBdO3RoZW4KKyAgICBuc2JfcHJvbXB0ICJwcmVzcyBlbnRlciB0byByZW1vdmUgJE5TQl9CVUlMRF9ESVIiCisgICAgaWYgWyAieCROU0JfQlVJTERfRElSIiA9ICIvIiBdOyB0aGVuCisgICAgICAgbnNiX2Fib3J0ICJOb3QgcnVubmluZyBybSAtZlIgZnJvbSAvIgorICAgIGVsc2UKKyAgICAgICAvYmluL3JtIC1mUiAkTlNCX0JVSUxEX0RJUiA+IC9kZXYvbnVsbCAyPiYxCisgICAgZmkKK2ZpCisKK25zYl9wcm9tcHQgInByZXNzIGVudGVyIHRvIGV4aXQgd2l0aCByYyAkUkMiCitleGl0ICRyYwpkaWZmIC0tZ2l0IGEvZGlzdC9uc2ItcGxhdGZvcm0gYi9kaXN0L25zYi1wbGF0Zm9ybQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNzU1MGEzCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uc2ItcGxhdGZvcm0KQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisjCisjICRJZCQKKyMgQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGZpbmQgbnNiLXBsYXRmb3JtIGJhc2VkIG9uIHRoZSBwYXRoIHRvIHRoaXMgc2NyaXB0CisjCitFWEVfUEFUSD1gZGlybmFtZSAkMGAKK2lmIFsgLWYgJEVYRV9QQVRIL25zYi1mdW5jdGlvbnMgXTt0aGVuCisgICAuICRFWEVfUEFUSC9uc2ItZnVuY3Rpb25zCitlbGlmIFsgLWYgJEhPTUUvYmluL25zYi1mdW5jdGlvbnMgXTsgdGhlbgorICAgLiAkSE9NRS9iaW4vbnNiLWZ1bmN0aW9ucworZWxpZiBbIC1mIG5zYi1mdW5jdGlvbnMgXTt0aGVuCisgICAuIG5zYi1mdW5jdGlvbnMKK2Vsc2UKKyAgIGVjaG8gIkNhbm5vdCBmaW5kIG5zYi1mdW5jdGlvbnMgaW4gJEVYRV9QQVRILCAkSE9NRS9iaW4gb3IgJFBXRCIKKyAgIGV4aXQgMQorZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbnNiX3N5c25hbWUKZGlmZiAtLWdpdCBhL2Rpc3QvcGF0bWUgYi9kaXN0L3BhdG1lCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmZDUwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L3BhdG1lCkBAIC0wLDAgKzEsMzUxIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIEdldG9wdDo6R1VJOjpMb25nOwordXNlIFFXaXphcmQ7Cit1c2UgUVdpemFyZDo6QVBJOwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBDd2Q7CisKK3VzZSBHZXRvcHQ6OlN0ZDsKK0dldG9wdDo6R1VJOjpMb25nOjpDb25maWd1cmUocXcoZGlzcGxheV9oZWxwIG5vX2lnbm9yZV9jYXNlKSk7CisKK3VzZSBzdHJpY3Q7CisKK291ciAlb3B0cyA9CisoCisgJ2QnID0+ICRFTlZ7J0hPTUUnfSAuICIvc3JjL3NubXAvcGF0bWUvIiwKKyAnYicgPT4gJ21haW4sNS42LDUuNSw1LjQsNS4zJywKKyAncCcgPT4gJy1wMCcsCispOworCisjIHNldHMgdGhlIG9yZGVyIHNob3duCitvdXIgQGNvZGV0cmVlcyA9ICgnbWFpbicsCisJCSAgJzUuNicsCisJCSAgJzUuNScsCisJCSAgJzUuNCcsCisJCSAgJzUuMycsCisJCSAgJzUuMicsCisJCSAgJzUuMScsCisJCSAgJzUuMCcsCisJCSAgJ1VDRCcpOworCitvdXIgJWNvZGV0cmVlcyA9ICgnNS4wJyA9PiAnVjUtMC1wYXRjaGVzJywKKwkJICAnNS4xJyA9PiAnVjUtMS1wYXRjaGVzJywKKwkJICAnNS4yJyA9PiAnVjUtMi1wYXRjaGVzJywKKwkJICAnNS4zJyA9PiAnVjUtMy1wYXRjaGVzJywKKwkJICAnNS40JyA9PiAnVjUtNC1wYXRjaGVzJywKKwkJICAnNS41JyA9PiAnVjUtNS1wYXRjaGVzJywKKwkJICAnNS42JyA9PiAnVjUtNi1wYXRjaGVzJywKKwkJICAnbWFpbicgPT4gJ25ldC1zbm1wJywKKwkJICAnVUNEJyA9PiAnVjQtMi1wYXRjaGVzJyk7CisKK291ciAoQGNhcHR1cmVzLCAkY2FwZmlsdCwgJHJlc3VsdCwgJWNhcHR1cmVzLCAkY2FwdHVyZW51bSk7CisKK0dldE9wdGlvbnMoXCVvcHRzLAorCSAgIFsnZnxmaWxlPXMnLCAgICAgICAgICAgJ1BhdGNoIGZpbGUnXSwKKwkgICBbJ2R8YmFzZS1kaXJlY3Rvcnk9cycsICdCYXNlIGRpcmVjdG9yeSBvZiBjaGVja291dHMnXSwKKwkgICBbJ3B8cGF0Y2gtYXJncz1zJywgICAgICdEZWZhdWx0IHBhdGNoIGFyZ3VtZW50cyAoLXAxKSddLAorCisJICAgWydHVUk6c2VwYXJhdG9yJywgICAnUGF0Y2ggYXBwbGljYXRpb24gc3BlY2lmaWNzOyddLAorCSAgIFsnYnxicmFjaGVzPXMnLCAgICAgJ0JyYW5jaGVzIHRvIGFwcGx5IHRvIChlZyA1LjEsNS4yLC4uLiknXSwKKwkgICBbJ218Y29tbWl0LW1zZz1zJywgICdEZWZhdWx0IGNvbW1pdCBtZXNzYWdlIHRvIHVzZSddLAorCSAgIFsnRHxzdWJkaXI9cycsICAgICAgJ0FwcGx5IHBhdGNoZXMgdG8gYSBzdWJkaXJlY3RvcnknXSwKKwkgICBbJ3V8bm8tdXBkYXRlJywgICAgICdEbyBub3QgcnVuIHN2biBzdGF0dXMvdXBkYXRlIGluIHRoZSBkaXJlY3RvcnkgZmlyc3QuICBPbmx5IHVzZSB0aGlzIGlmIGl0XCdzIGtub3duIGNsZWFuLiddLAorCSAgKTsKKworbXkgJWJzOworaWYgKCRvcHRzeydiJ30pIHsKKyAgICBtYXAgeyAkYnN7JF99ID0gMTsgfSBzcGxpdCgvLFxzKi8sJG9wdHN7J2InfSk7IAorfQorJG9wdHN7J2QnfSAuPSAiLyIgaWYgKCRvcHRzeydkJ30gIX4gL1wvJC8pOworCitteSAkcXcgPSBuZXcgUVdpemFyZCgpOworbXkgJHByaXMgPSBsb2FkX3ByaW1hcmllcygpOworJHF3LT57J3ByaW1hcmllcyd9ID0gJHByaXM7CisKKyRxdy0+cXdwYXJhbSgnc3ZuY29tbWl0Jywkb3B0c3snbSd9KSBpZiAoJG9wdHN7J20nfSk7CisKKyRxdy0+bWFnaWMoJ3RvcCcpOworCitzdWIgbWFrZV90b3BzIHsKKyAgICBteSBAdG9wczsKKyAgICBmb3JlYWNoIG15ICRrIChAY29kZXRyZWVzKSB7CisJcHVzaCBAdG9wcywgCisJICBxd19jaGVja2JveCgkaywgIkFwcGx5IHRvICRrIiwgMSwgMCwgCisJCSAgICAgIGRlZmF1bHQgPT4gJHF3LT5xd3BhcmFtKCRrKSB8fCAkYnN7JGt9LAorCQkgICAgICBvdmVycmlkZSA9PiAxKTsKKyAgICB9CisgICAgcmV0dXJuIEB0b3BzOworfQorCitzdWIgbG9hZF9wcmltYXJpZXMgeworICAgIG15IEB0b3BzID0gbWFrZV90b3BzKCk7CisgICAgcmV0dXJuCisgICAgICB7CisgICAgICAgdG9wID0+CisgICAgICAgcXdfcHJpbWFyeSgndG9wJywnU2VsZWN0IHBhY2thZ2VzIHRvIGFwcGx5IHRoZSBwYXRjaCB0bzonLCAnJywgCisJCSAgW0B0b3BzLAorCQkgIHF3X3RleHQoJ2Jhc2VkaXInLCAnQmFzZSBjb2RlIGRpcmVjdG9yeTonLCAKKwkJCSAgZGVmYXVsdCA9PiAkb3B0c3snZCd9KSwKKwkJICBxd19oaWRkZW4oJ25vX2NvbmZpcm0nLDEpLAorCQkgIHF3X3RleHQoJ3BhdGNoZmlsZScsJ1BhdGNoIGZpbGU6JywgZGVmYXVsdCA9PiAkb3B0c3tmfSwKKwkJCSBjaGVja192YWx1ZSA9PiBzdWIgeyAKKwkJCSAgICAgcmV0dXJuICJwYXRjaCBmaWxlIGRvZXNuJ3QgZXhpc3QiIGlmICghIC1mIHF3cGFyYW0oJ3BhdGNoZmlsZScpKQorCQkJIH0pLAorCQkgIHF3X2NoZWNrYm94KCdub3VwZGF0ZScsJ0RvblwndCBydW4gc3ZuIHVwZGF0ZS9yZXZlcnQgZmlyc3Q6JywgCisJCQkgICAgICAxLCAwLCBkZWZhdWx0ID0+ICRvcHRzeyd1J30gfHwgMCldLAorCQkgIFtdLFtdLHN1Yl9tb2R1bGVzID0+IFsnY29tbWl0JywgJ2NvbW1pdG1zZycsICdtYWtldGVzdCcsCisJCQkJCSdlZGl0JywgJ2FwcGx5aW5nJywgJ2NoZWNrJywKKwkJCQkJJ3BhdGNoX2luZm8nXSksCisKKyAgICAgICBwYXRjaF9pbmZvID0+CisgICAgICAgcXdfcHJpbWFyeSgnY2hlY2snLCdDaGVja2luZyBjb2RlIGRpcmVjdG9yeSBzdGF0dXM6JywgJycsCisJCSAgW3F3X3BhcmFncmFwaCgncGF0Y2ggcGllY2VzOicsCisJCQkJc3ViIHsgY2FwdHVyZSgiZWdyZXAgJ14oLS0tfFxcK1xcK1xcKyknICIgLiAKKwkJCQkJICAgICAgcXdwYXJhbSgncGF0Y2hmaWxlJykpfSwKKwkJCQl3aWR0aCA9PiA4MCwKKwkJCQloZWlnaHQgPT4gMzApLAorCQkgICBxd190ZXh0KCdwYXRjaGFyZ3MnLCdQYXRjaCBhcmd1bWVudHMnLAorCQkJICAgZGVmYXVsdCA9PiAkb3B0c3sncCd9KSwKKwkJICAgcXdfdGV4dCgnc3ViZGlyJywgJ0FwcGx5IGluIHBhY2thZ2Ugc3ViZGlyOicsCisJCQkgICBkZWZhdWx0ID0+ICRvcHRzeydEJ30pLAorCQkgICBxd19wYXJhZ3JhcGgoJ05vdGU6JywnSGl0dGluZyBuZXh0IGJlbG93IHdpbGwgZmlyc3QgY2xlYW4geW91ciBsb2NhbCByZXBvc2l0b3JpZXMgd2hpY2ggY291bGQgdGFrZSBhIGJpdCAod2F0Y2ggdGhlIGNvbnNvbGUgZm9yIGRlYWlscyBvbiB3aGF0IGl0XCdzIGRvaW5nIGF0IGFueSBtb21lbnQpJywgZG9pZiA9PiBzdWIgeyFxd3BhcmFtKCdub3VwZGF0ZScpfSksCitdKSwKKworCisgICAgICAgY2hlY2sgPT4KKyAgICAgICBxd19wcmltYXJ5KCdjaGVjaycsJ0NoZWNraW5nIGNvZGUgZGlyZWN0b3J5IHN0YXR1czonLCAnJywKKwkJICBbcXdfcGFyYWdyYXBoKCdyZW1vdmVkIC5yZWogZmlsZXM6JywKKwkJCSAgICAgICBzdWIgeyBteSAkaXQgPSBjYXB0dXJlZWFjaGRpcignZmluZCAuIC1uYW1lIFwqLnJlaicpOworCQkJCSAgICAgY2FwdHVyZWVhY2hkaXIoJ2ZpbmQgLiAtbmFtZSBcKi5yZWogfCB4YXJncyBybSAtZicpOworCQkJCSAgICAgcmV0dXJuICRpdDsKKwkJCQkgfSwKKwkJCQlwcmVmb3JtYXR0ZWQgPT4gMSwKKwkJCQl3aWR0aCA9PiA4MCwKKwkJCQloZWlnaHQgPT4gNjAsCisJCQkgICAgICAgKSwKKwkJICAgcXdfcGFyYWdyYXBoKCdzdm4gdXBkYXRlOicsCisJCQkJc3ViIHsKKwkJCQkgICAgbXkgKCRyZXMsICRvbmUpOworCQkJCSAgICBmb3JlYWNoIG15ICRrIChAY29kZXRyZWVzKSB7CisJCQkJCW5leHQgaWYgKCFxd3BhcmFtKCRrKSk7CisJCQkJCSRyZXMgLj0gIiRrOlxuIjsKKwkJCQkJJG9uZSA9IGNhcHR1cmVkaXIoJGNvZGV0cmVlc3ska30sIAorCQkJCQkJCSAgInN2biB1cGRhdGUiKTsKKwkJCQkJJHJlcyAuPSAkb25lOworCQkJCQkkb25lID0gY2FwdHVyZWRpcigkY29kZXRyZWVzeyRrfSwgCisJCQkJCQkJICAic3ZuIHJldmVydCAtUiAuIik7CisJCQkJCSRyZXMgLj0gJG9uZTsKKwkJCQkgICAgfQorCQkJCSAgICByZXR1cm4gJHJlczsKKwkJCQkgIH0sCisJCQkJcHJlZm9ybWF0dGVkID0+IDEsCisJCQkJd2lkdGggPT4gODAsCisJCQkJaGVpZ2h0ID0+IDYwLAorCQkJCWRvaWYgPT4gc3VieyFxd3BhcmFtKCdub3VwZGF0ZScpfQorCQkJICAgICAgICkJCSAgXSwKKwkJICksCisKKyAgICAgICBhcHBseWluZyA9PgorICAgICAgIHF3X3ByaW1hcnkoImFwcGx5aW5nIiwgJ0FwcGx5aW5nIHBhdGNoZXMgdG8gdGhlIGNvZGUgYmFzZXMnLCAnJywKKwkJICBbe3R5cGUgPT4gJ3RhYmxlJywKKwkJICAgIHRleHQgPT4gJ1Jlc3VsdHM6JywKKwkJICAgIHZhbHVlcyA9PiBzdWIgeworCQkJbXkgQHRhYjsKKwkJCWZvcmVhY2ggbXkgJGsgKEBjb2RldHJlZXMpIHsKKwkJCSAgICBuZXh0IGlmICghcXdwYXJhbSgkaykpOworCQkJICAgIHB1c2ggQHRhYiwgWyRrLAorCQkJCQlxd19wYXJhZ3JhcGgoInIkayIsIiIsIAorCQkJCQkJICAgICBwcmVmb3JtYXR0ZWQgPT4gMSwKKwkJCQkJCSAgICAgd2lkdGggPT4gODAsCisJCQkJCQkgICAgIGhlaWdodCA9PiAyMCwKKwkJCQkJCSAgICAgdmFsdWVzID0+IAorCQkJCQkJICAgICBzdWIgeyBteSAkY21kID0gInBhdGNoICIgLiBxd3BhcmFtKCdwYXRjaGFyZ3MnKSAuICIgPCAiIC4gcXdwYXJhbSgncGF0Y2hmaWxlJyk7CisJCQkJCQkJICAgbXkgJHJlc3VsdHMgPSAiUnVubmluZyBvbiAkazogJGNtZCIgLiAiXG4iIC4gY2FwdHVyZWRpcigkY29kZXRyZWVzeyRrfSwkY21kKTsKKwkJCQkJCQkgICByZXR1cm4gJHJlc3VsdHN9KV07CisJCQl9CisJCQlyZXR1cm4gW1xAdGFiXTsKKwkJICAgIH19XSxbXSxbXSksCisKKyAgICAgICBlZGl0ID0+CisgICAgICAgcXdfcHJpbWFyeSgnZWRpdCcsJ0ZpeCB0aGUgZm9sbG93aW5nIGZpbGVzOicsJycsCisJCSAgW3F3X3BhcmFncmFwaCgnRml4IHRoZXNlIChtYXliZSk6JywKKwkJCSAgICAgICBzdWIgeworCQkJCSAgICRjYXBmaWx0ID0gJyguKi5yZWopJzsKKwkJCQkgICBteSAkcmVzID0gCisJCQkJICAgICBjYXB0dXJlZWFjaGRpcignZmluZCAuIC1uYW1lIFwqLnJlaicpOworCQkJCSAgIHByaW50IER1bXBlcihcJWNhcHR1cmVzKTsKKwkJCQkgICAkY2FwZmlsdCA9IHVuZGVmOworCQkJCSAgIHJldHVybiAkcmVzOworCQkJCSB9LAorCQkJCXByZWZvcm1hdHRlZCA9PiAxLAorCQkJCXdpZHRoID0+IDgwLAorCQkJCWhlaWdodCA9PiA2MCwKKwkJCSAgICAgICApLAorCQkgICBxd19sYWJlbCgnZmFpbGVkIGZpbGVzOicsCisJCQkgICAgc3ViIHsgJGNhcHR1cmVudW0gPSAwOworCQkJCSAgbWFwIHsgJGNhcHR1cmVudW0gKz0gJCN7JGNhcHR1cmVzeyRffX0gKyAxOworCQkJCSAgICB9IChrZXlzKCVjYXB0dXJlcykpOworCQkJCSAgcmV0dXJuICRjYXB0dXJlbnVtOworCQkJICAgICAgfSksCisJCSAgcXdfY2hlY2tib3goJ2VkaXRoZW0nLCdPcGVuIGFuIGVkaXRvciBvbiB0aGUgZmFpbGVkIGZpbGVzPycsCisJCQkgICAgICAxLCAwLCBkb2lmID0+IHN1YiB7IHJldHVybiAkY2FwdHVyZW51bSA+IDAgfSksCisJCSAgcXdfdGV4dCgnZWRpdG9yJywnRWRpdG9yOicsZGVmYXVsdCA9PiAkRU5WeydFRElUT1InfSB8fCAndmknLAorCQkJICBkb2lmID0+IHN1YiB7IHJldHVybiAkY2FwdHVyZW51bSA+IDAgfSldLAorCQkgIFtzdWIgeworCQkgICAgICAgaWYgKHF3cGFyYW0oJ2VkaXRoZW0nKSkgeworCQkJICAgZm9yZWFjaCBteSAkayAoa2V5cyglY2FwdHVyZXMpKSB7CisJCQkgICAgICAgZm9yZWFjaCBteSAkZiAoQHskY2FwdHVyZXN7JGt9fSkgeworCQkJCSAgIG15ICRmaWxlID0gcXdwYXJhbSgnYmFzZWRpcicpIC4KKwkJCQkgICAgICRjb2RldHJlZXN7JGt9IC4KKwkJCQkgICAgICAgcXdwYXJhbSgnc3ViZGlyJykgLiAnLycgLiAkZi0+WzBdOworCQkJCSAgIHByaW50IFNUREVSUiAiZWRpdGluZzogJGZpbGVcbiI7CisJCQkJICAgc3lzdGVtKHF3cGFyYW0oJ2VkaXRvcicpIC4gIiAiIC4gJGZpbGUpOworCQkJICAgICAgIH0KKwkJCSAgIH0KKwkJICAgICAgIH0KKwkJICAgfV0KKwkJICksCisKKyAgICAgICBtYWtldGVzdCA9PgorICAgICAgIHF3X3ByaW1hcnkoIm1ha2V0ZXN0IiwgIlJ1biBtYWtlPyIsJycsCisJCSBbcXdfY2hlY2tib3goJ21ha2VpdCcsJ1J1biBtYWtlPycsIDEsIDApLAorCQkgIHF3X2NoZWNrYm94KCdtYWtldGVzdCcsICdSdW4gbWFrZSB0ZXN0PycsIDEsIDApCisJCSBdLAorIAkJIFtzdWIgeworIAkJICAgICAgaWYgKHF3cGFyYW0oJ21ha2VpdCcpIHx8IHF3cGFyYW0oJ21ha2V0ZXN0JykpIHsKKyAJCQkgICRfWzBdLT5hZGRfdG9kb3MoLWVhcmx5LCAnZG9tYWtlJyk7CisgCQkgICAgICB9CisgCQkgIH1dCisJCSApLAorCisgICAgICAgZG9tYWtlID0+CisgICAgICAgcXdfcHJpbWFyeSgiZG9tYWtlIiwgIk1ha2UgcmVzdWx0cyIsJycsCisJCSAgW3F3X3BhcmFncmFwaCgnTWFrZSByZXN1bHRzOicsCisJCQkJc3ViIHsgcmV0dXJuIGNhcHR1cmVlYWNoZGlyKCdtYWtlJyk7IH0sCisJCQkJcHJlZm9ybWF0dGVkID0+IDEsCisJCQkJd2lkdGggPT4gODAsCisJCQkJaGVpZ2h0ID0+IDIwLAorCQkJCWRvaWYgPT4gc3ViIHsgcXdwYXJhbSgnbWFrZWl0JykgfQorCQkJICAgICAgICksCisJCSAgIHF3X3BhcmFncmFwaCgnTWFrZSB0ZXN0IHJlc3VsdHM6JywKKwkJCQlzdWIgeyByZXR1cm4gY2FwdHVyZWVhY2hkaXIoJ21ha2UgdGVzdCcpOyB9LAorCQkJCXByZWZvcm1hdHRlZCA9PiAxLAorCQkJCXdpZHRoID0+IDgwLAorCQkJCWhlaWdodCA9PiAyMCwKKwkJCQlkb2lmID0+IHN1YiB7IHF3cGFyYW0oJ21ha2V0ZXN0JykgfQorCQkJICAgICAgICldCisJCSAgKSwKKworICAgICAgIGNvbW1pdG1zZyA9PgorICAgICAgIHF3X3ByaW1hcnkoImNvbW1pdG1zZyIsICdDb21taXQgaW5mbzonLCAnJywKKwkJICBbcXdfdGV4dCgnc3ZuY29tbWl0JywnQ29tbWl0IG1lc3NhZ2UnLAorCQkJICAgZGVmYXVsdCA9PiBxd3BhcmFtKCdzdm5jb21taXQnKSB8fCAkb3B0c3snbSd9KSwKKwkJICB7dHlwZSA9PiAnZHluYW1pYycsCisJCSAgIHZhbHVlcyA9PiBzdWIgeyBteSBAdG9wcyA9IG1ha2VfdG9wcygxKTsgcmV0dXJuIFxAdG9wc319XSksCisKKyAgICAgICBjb21taXQgPT4KKyAgICAgICBxd19wcmltYXJ5KCJjb21taXQiLCAncnVubmluZyBjb21taXQ6JywgJycsCisJCSAgW3F3X3BhcmFncmFwaCgnY29tbWl0dGluZyBmaWxlczonLAorCQkJICAgICAgIHN1YiB7IG15ICRtc2cgPSBxd3BhcmFtKCdzdm5jb21taXQnKTsKKwkJCQkgICAgICRtc2cgPX4gcy9cJy9cJ1wiXCdcIlwnL2c7ICMgZXNjYXBlICdzCisJCQkJICAgICByZXR1cm4gY2FwdHVyZWRpcigkb3B0c3snZCd9LAorCQkJCQkJICAgICAgICdzdm4gY29tbWl0IC1tIFwnJyAuICRtc2cgLiAnXCcgJyAuIGdldF9jb2RlZGlyc19zdHIoKSk7IH0sCisJCQkJcHJlZm9ybWF0dGVkID0+IDEsCisJCQkJd2lkdGggPT4gODAsCisJCQkJaGVpZ2h0ID0+IDIwLAorCQkJICAgICAgICldKSwKKworICAgICAgIGVkaXRpbmcgPT4KKyAgICAgICBxd19wcmltYXJ5KCJhcHBseWluZyIsICdFZGl0IHRoZSBmb2xsb3dpbmcgZmlsZXM6JywgJycsCisJCSAgW3t0eXBlID0+ICd0YWJsZScsCisJCSAgICB0ZXh0ID0+ICdSZXN1bHRzOicsCisJCSAgICB2YWx1ZXMgPT4gc3ViIHsgcmV0dXJuIFtcQGNhcHR1cmVzXX0sCisJCSAgIH1dLFtdLFtdKQorICAgICAgfQorfQorCitzdWIgY2FwdHVyZSB7CisgICAgbXkgJGNtZCA9IGpvaW4oIiAiLEBfKTsKKyAgICBteSAkcmVzdWx0cyA9ICJSdW5uaW5nOiAkY21kXG4iOworICAgIG15IEBhOworICAgIHByaW50ICRyZXN1bHRzOworICAgIG9wZW4oSSwiJGNtZCAyPiYxfCIpOworICAgIHdoaWxlICg8ST4pIHsKKwkkcmVzdWx0cyAuPSAkXzsKKwlwcmludCAkXzsKKwlpZiAoJGNhcGZpbHQpIHsKKwkgICAgcHJpbnQgImNhcGZpbHQ6ICRjYXBmaWx0XG4iOworCSAgICBAYSA9IC8kY2FwZmlsdC87CisJICAgIHByaW50ICIgIGNhcGZpbHQ6IEBhXG4iOworCSAgICBwdXNoIEBjYXB0dXJlcywgW0BhXTsKKwl9CisgICAgfQorICAgIGNsb3NlKEkpOworICAgICRyZXN1bHQgPSAkPyA+PiA4OworICAgICRyZXN1bHRzIC49ICJSRVNVTFQ6ICIgLiAoKCRyZXN1bHQpID8gIkZBSUwiIDogIlNVQ0NFU1MiKSAuICIoJHJlc3VsdClcbiI7CisgICAgcmV0dXJuICRyZXN1bHRzOworfQorCitzdWIgY2FwdHVyZWRpciB7CisgICAgbXkgJGRpciA9IHNoaWZ0OworICAgICRkaXIgLj0gIi8iIGlmICgkZGlyICF+IC9cLyQvKTsKKyAgICBteSAkYmFzZWRpciA9IHF3cGFyYW0oJ2Jhc2VkaXInKTsKKyAgICAkYmFzZWRpciAuPSAiLyIgaWYgKCRiYXNlZGlyICF+IC9cLyQvKTsKKyAgICBteSAkb2xkZGlyID0gZ2V0Y3dkKCk7CisgICAgbXkgJG5ld2RpciA9ICIkYmFzZWRpciRkaXIiIC4gcXdwYXJhbSgnc3ViZGlyJyk7CisgICAgbXkgJHJlcyA9ICJjaGFuZ2luZyB0bzogJG5ld2RpclxuIjsKKyAgICBwcmludCAkcmVzOworICAgIGNoZGlyKCRuZXdkaXIpOworICAgICRyZXMgLj0gY2FwdHVyZShAXyk7CisgICAgY2hkaXIoJG9sZGRpcik7CisgICAgcmV0dXJuICRyZXM7Cit9CisKK3N1YiBnZXRfY29kZWRpcnNfc3RyKCkgeworICAgIG15ICRyZXMgPSAiIjsKKyAgICBmb3JlYWNoIG15ICRrIChAY29kZXRyZWVzKSB7CisJbmV4dCBpZiAoIXF3cGFyYW0oJGspKTsKKwkkcmVzIC49ICIgJG9wdHN7J2QnfSRjb2RldHJlZXN7JGt9IjsKKyAgICB9CisgICAgJHJlcyA9fiBzL14gLy87CisgICAgcmV0dXJuICRyZXM7Cit9CisKK3N1YiBjYXB0dXJlZWFjaGRpciB7CisgICAgbXkgJG91dDsKKyAgICAlY2FwdHVyZXMgPSAoKTsKKyAgICBmb3JlYWNoIG15ICRrIChAY29kZXRyZWVzKSB7CisJbmV4dCBpZiAoIXF3cGFyYW0oJGspKTsKKwkkb3V0IC49ICIkazpcbiI7CisJJG91dCAuPSBjYXB0dXJlZGlyKCRjb2RldHJlZXN7JGt9LCBAXykgLiAiXG4iOworCWlmICgkI2NhcHR1cmVzID4gLTEpIHsKKwkgICAgQHskY2FwdHVyZXN7JGt9fSA9IEBjYXB0dXJlczsKKwkgICAgQGNhcHR1cmVzID0gKCk7CisJfQorICAgIH0KKyAgICByZXR1cm4gJG91dDsKK30KKworc3ViIGRvZGlyIHsKKyAgICBteSAkdGV4dCA9IHNoaWZ0OworICAgIHJldHVybgorICAgICAgW3t0eXBlID0+ICd0YWJsZScsCisJdGV4dCA9PiAkdGV4dCwKKwl2YWx1ZXMgPT4gW1tzdWIgeworCQkJbXkgQHRhYjsKKwkJCWZvcmVhY2ggbXkgJGsgKEBjb2RldHJlZXMpIHsKKwkJCSAgICBuZXh0IGlmICghcXdwYXJhbSgkaykpOworCQkJICAgIHB1c2ggQHRhYiwgWyRrLAorCQkJCQlxd19wYXJhZ3JhcGgoInIkayIsIiIsIAorCQkJCQkJICAgICBwcmVmb3JtYXR0ZWQgPT4gMSwKKwkJCQkJCSAgICAgd2lkdGggPT4gODAsCisJCQkJCQkgICAgIGhlaWdodCA9PiAyMCwKKwkJCQkJCSAgICAgdmFsdWVzID0+IAorCQkJCQkJICAgICBbW3N1YiB7ICRfLT5bMF0oJGspfSwgCisJCQkJCQkgICAgICAgQF9dXSldOworCQkJfQorCQkJcmV0dXJuIFtcQHRhYl07CisJCSAgICB9LCBAX11dCisgICAgICAgfV07Cit9CmRpZmYgLS1naXQgYS9kaXN0L3NjaGVtYS1zbm1wdHJhcGQuc3FsIGIvZGlzdC9zY2hlbWEtc25tcHRyYXBkLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDk2ZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9zY2hlbWEtc25tcHRyYXBkLnNxbApAQCAtMCwwICsxLDMxIEBACitVU0UgbmV0X3NubXA7CitEUk9QIFRBQkxFIElGIEVYSVNUUyBub3RpZmljYXRpb25zOworQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYG5vdGlmaWNhdGlvbnNgICgKKyAgYHRyYXBfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCisgIGBkYXRlX3RpbWVgIGRhdGV0aW1lIE5PVCBOVUxMLAorICBgaG9zdGAgdmFyY2hhcigyNTUpIE5PVCBOVUxMLAorICBgYXV0aGAgdmFyY2hhcigyNTUpIE5PVCBOVUxMLAorICBgdHlwZWAgRU5VTSgnZ2V0JywnZ2V0bmV4dCcsJ3Jlc3BvbnNlJywnc2V0JywndHJhcCcsJ2dldGJ1bGsnLCdpbmZvcm0nLCd0cmFwMicsJ3JlcG9ydCcpIE5PVCBOVUxMLAorICBgdmVyc2lvbmAgRU5VTSgndjEnLCd2MmMnLCAndW5zdXBwb3J0ZWQodjJ1KScsJ3YzJykgTk9UIE5VTEwsCisgIGByZXF1ZXN0X2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAorICBgc25tcFRyYXBPSURgIHZhcmNoYXIoMTAyNCkgTk9UIE5VTEwsCisgIGB0cmFuc3BvcnRgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCwKKyAgYHNlY3VyaXR5X21vZGVsYCBFTlVNKCdzbm1wVjEnLCdzbm1wVjJjJywnVVNNJykgTk9UIE5VTEwsCisgIGB2M21zZ2lkYCBpbnQoMTEpIHVuc2lnbmVkLAorICBgdjNzZWN1cml0eV9sZXZlbGAgRU5VTSgnbm9BdXRoTm9Qcml2JywnYXV0aE5vUHJpdicsJ2F1dGhQcml2JyksCisgIGB2M2NvbnRleHRfbmFtZWAgdmFyY2hhcigzMiksCisgIGB2M2NvbnRleHRfZW5naW5lYCB2YXJjaGFyKDY0KSwKKyAgYHYzc2VjdXJpdHlfbmFtZWAgdmFyY2hhcigzMiksCisgIGB2M3NlY3VyaXR5X2VuZ2luZWAgdmFyY2hhcig2NCksCisgIFBSSU1BUlkgS0VZICAoYHRyYXBfaWRgKQorKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CisKKworRFJPUCBUQUJMRSBJRiBFWElTVFMgdmFyYmluZHM7CitDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgdmFyYmluZHNgICgKKyAgYHRyYXBfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCisgIGBvaWRgIHZhcmNoYXIoMTAyNCkgTk9UIE5VTEwsCisgIGB0eXBlYCBFTlVNKCdib29sZWFuJywnaW50ZWdlcicsJ2JpdCcsJ29jdGV0JywnbnVsbCcsJ29pZCcsJ2lwYWRkcmVzcycsJ2NvdW50ZXInLCd1bnNpZ25lZCcsJ3RpbWV0aWNrcycsJ29wYXF1ZScsJ3VudXNlZDEnLCdjb3VudGVyNjQnLCd1bnVzZWQyJykgTk9UIE5VTEwsCisgIGB2YWx1ZWAgYmxvYiBOT1QgTlVMTCwKKyAgS0VZIGB0cmFwX2lkYCAoYHRyYXBfaWRgKQorKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7CmRpZmYgLS1naXQgYS9kaXN0L3N2bnVwIGIvZGlzdC9zdm51cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MDM1M2YwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9zdm51cApAQCAtMCwwICsxLDEzMCBAQAorIyEvYmluL3NoCisjCisjICRJZDogY3ZzdXAgMTU3ODggMjAwNy0wMS0yNCAxMzo0OTozOFogZHRzMTIgJAorIworVEFHPQorV089MAorREVTVD0KK1RNUERJUj0vdG1wCisKK2lmIFsgIngkMSIgPSAieC11IiBdOyB0aGVuCisgICAgREVTVD0kMgorICAgIHNoaWZ0IDIKKworICAgICMgZ251IHRhciAoYXMgb2YgMS4xNS4xKSBpcyB1bmFibGUgdG8gY3JlYXRlIHBvcnRhYmxlIHRhciBhcmNoaXZlcywgCisgICAgIyBlc3BlY2lhbGx5IGlmIGxvbmcgZmlsZSBuYW1lcyAoPjEwMCBjaGFyKSBhcmUgcHJlc2VudC4KKyAgICAjIHN0YXIgaXMgYSBiZXR0ZXIgcmVwbGFjZW1lbnQuCisgICAgaWYgWyAteCAvdXNyL2Jpbi9zdGFyIF07IHRoZW4KKyAgICAgICAgVEFSPScvdXNyL2Jpbi9zdGFyIC1IdXN0YXIgLW5vdCAtcGF0PSovLnN2bi8qIC1jIC1mJworICAgIGVsaWYgWyAteCAvYmluL3RhciBdOyB0aGVuCisgICAgICAgIFRBUj0iL2Jpbi90YXIgLS1leGNsdWRlPS5zdm4gLWMgLWYiCisgICAgICAgIGVjaG8gIndhcm5pbmc6IHN0YXIgbm90IGF2YWlsYWJsZSwgdXNpbmcgKGxlc3MgcG9ydGFibGUpIHRhci4uLiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIm5laXRoZXIgL3Vzci9iaW4vc3RhciBub3IgL2Jpbi90YXIgZm91bmQuIgorICAgICAgICBleGl0CisgICAgZmkKK2ZpCisKK2lmIFsgJCMgLWVxIDAgXTsgdGhlbgorICAgIERJUj0kUFdECitlbHNlCisgICAgaWYgWyAkIyAtbmUgMSBdOyB0aGVuCisgICAgICAgIGVjaG8gInVzYWdlOiAkMCA8d29ya2luZyBkaXJlY3Rvcnk+IgorICAgICAgICBleGl0CisgICAgZmkKKyAgICBESVI9JDEKK2ZpCisKK2lmIFsgLXogJHtESVIjIyovfSBdO3RoZW4KKyAgIERJUj0ke0RJUiUvKn0KK2ZpCitTVUJEPSR7RElSIyMqL30KK1BBUkVOVD0ke0RJUiUqJFNVQkR9CisjZWNobyAiJERJUiA9ICRQQVJFTlQgKyAkU1VCRCIKKworaWYgWyAhIC1kICRESVIgXTsgdGhlbgorICAgIGVjaG8gIm5vIHN1Y2ggZGlyZWN0b3J5ICckRElSJyIKKyAgICBleGl0CitmaQorCitpZiBbICEgLWQgJERJUi8uc3ZuIF07IHRoZW4KKyAgICBlY2hvICInJERJUicgaGFzIG5vIC5zdm4gZGlyZWN0b3J5ISIKKyAgICBleGl0CitmaQorCitpZiBbICEgLWYgJERJUi8uc3ZuL2VudHJpZXMgXTsgdGhlbgorICAgIGVjaG8gIickRElSJyBoYXMgbm8gLnN2bi9lbnRyaWVzISIKKyAgICBleGl0CitmaQorCitTVk5VUkw9YHN2biBpbmZvICRESVJ8IGdyZXAgVVJMfGN1dCAtZjIgLWQgIiAiYAorU1ZOVExEPWBlY2hvICRTVk5VUkwgfCBzZWQgJ3M6Lipzdm5yb290L25ldC1zbm1wL1woW14vXSpcKS4qOlwxOidgCitpZiBbICJ4JFNWTlRMRCIgPSAieHRydW5rIiBdOyB0aGVuCisgICBUQUc9Im1haW4iCitlbHNlCisgICBUQUc9YGVjaG8gJFNWTlVSTCB8IHNlZCAnczouKnN2bnJvb3QvbmV0LXNubXAvW14vXSovXChbXi9dKlwpLio6XDE6J2AKK2ZpCisKK2lmIFsgISAteiAkREVTVCBdOyB0aGVuCisgICAgaWYgWyAteiAkVEFHIF07IHRoZW4KKyAgICAgICAgZWNobyAibm8gVEFHIGZvdW5kIGluICRESVIhIgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKworQ09NTUFORD0ic3ZuIHVwZGF0ZSAtcSAkU1ZOVVJMICRESVIiCisKK2lmIFsgISAtdyAkRElSLy5zdm4gXTsgdGhlbgorICAgIGlmIFsgLU8gJERJUi8uc3ZuIF07IHRoZW4KKyAgICAgICAgV089MQorICAgICAgICBlY2hvICJNYWtpbmcgJERJUiB3cml0YWJsZSIKKyAgICAgICAgY2htb2QgLVIgdSt3ICRESVIKKyAgICBmaQorZmkKKworZWNobyAiVXBkYXRpbmcgZGlyZWN0b3J5ICRESVIgZnJvbSAkVEFHLi4uIgorZWNobyAiJENPTU1BTkQiCisKKyRDT01NQU5ECityYz0kPworaWYgWyAkcmMgLW5lIDAgXTsgdGhlbgorICAgIGVjaG8gInN2biBjb21tYW5kIHJldHVybmVkICQ/IgorZmkKKworaWYgWyAkV08gLWVxIDEgXTsgdGhlbgorICAgIGVjaG8gIk1ha2luZyAkRElSIHJlYWQtb25seSIKKyAgICBjaG1vZCAtUiBhLXcgJERJUgorZmkKKworaWYgWyAhIC16ICRERVNUIF07IHRoZW4KKyAgaWYgWyAkcmMgLW5lIDAgXTsgdGhlbgorICAgIGVjaG8gInNraXBwaW5nIHVwbG9hZCBkdWUgdG8gcmMgJHJjIGZyb20gc3ZuIGNvbW1hbmQiCisgICAgZXhpdCAkcmMKKyAgZWxzZQorICAgIGNkICRESVIvLi4KKyAgICAjZWNobyAkUFdECisgICAgREFURT1gZGF0ZSArJVklbSVkXyVIJU1gCisgICAgU09VUkNFPW5ldC1zbm1wLXN2bi0kVEFHIl8kREFURSIKKyAgICAkVEFSICRUTVBESVIvJFNPVVJDRS50YXIgJFNVQkQKKyAgICByYz0kPworICAgIGlmIFsgJHJjIC1uZSAwIF07IHRoZW4KKyAgICAgIGVjaG8gInNraXBwaW5nIHVwbG9hZCBkdWUgdG8gcmMgJHJjIGZyb20gdGFyIGNvbW1hbmQiCisgICAgICBybSAtZiAkVE1QRElSLyRTT1VSQ0UudGFyLmd6CisgICAgICBleGl0ICRyYworICAgIGZpCisgICAgZ3ppcCAtZiAtLWJlc3QgJFRNUERJUi8kU09VUkNFLnRhcgorICAgIHJjPSQ/CisgICAgaWYgWyAkcmMgLW5lIDAgXTsgdGhlbgorICAgICAgZWNobyAic2tpcHBpbmcgdXBsb2FkIGR1ZSB0byByYyAkcmMgZnJvbSBnemlwIGNvbW1hbmQiCisgICAgICBybSAtZiAkVE1QRElSLyRTT1VSQ0UudGFyLmd6CisgICAgICBleGl0ICRyYworICAgIGZpCisgICAgc2NwICRUTVBESVIvJFNPVVJDRS50YXIuZ3ogJERFU1QKKyAgICByYz0kPworICAgIGlmIFsgJHJjIC1uZSAwIF07IHRoZW4KKyAgICAgIGVjaG8gIndhcm5pbmc6IHJjICRyYyBmcm9tIHNjcCBjb21tYW5kICh0YXJiYWxsIGluICRUTVBESVIpIgorICAgIGVsc2UKKyAgICAgIHJtIC1mICRUTVBESVIvJFNPVVJDRS50YXIuZ3oKKyAgICBmaQorICBmaQorZmkKZGlmZiAtLWdpdCBhL2RveHlnZW4uY29uZiBiL2RveHlnZW4uY29uZgppbmRleCA5ZTBlZjQ1Li4yMGU0NTdkIDEwMDY0NAotLS0gYS9kb3h5Z2VuLmNvbmYKKysrIGIvZG94eWdlbi5jb25mCkBAIC0yMyw3ICsyMyw3IEBACiAjIFRoaXMgY291bGQgYmUgaGFuZHkgZm9yIGFyY2hpdmluZyB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb3IgCiAjIGlmIHNvbWUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBpcyB1c2VkLgogCi1QUk9KRUNUX05VTUJFUiAgICAgICAgID0gNS40LjMucHJlMQorUFJPSkVDVF9OVU1CRVIgICAgICAgICA9ICQoVkVSU0lPTikKIAogIyBUaGUgT1VUUFVUX0RJUkVDVE9SWSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAocmVsYXRpdmUgb3IgYWJzb2x1dGUpIAogIyBiYXNlIHBhdGggd2hlcmUgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYmUgcHV0LiAKQEAgLTU4NSw3ICs1ODUsNyBAQAogIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAogIyBnZW5lcmF0ZSBtYW4gcGFnZXMKIAotR0VORVJBVEVfTUFOICAgICAgICAgICA9IFlFUworR0VORVJBVEVfTUFOICAgICAgICAgICA9IE5PCiAKICMgVGhlIE1BTl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgbWFuIHBhZ2VzIHdpbGwgYmUgcHV0LiAKICMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKaW5kZXggNjkxNTFhOC4uZWM5MzBmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTYxLDYgKzYxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3JlcXVlc3RfaW5mb19zICopOworICAgICAgICAvKiogZGF0YSBjbG9uZSBob29rIGZvciBteXZvaWQKKyAgICAgICAgICogIGRlZXAgY29weSB0aGUgbXl2b2lkIG1lbWJlciAtIGRlZmF1bHQgaXMgdG8gY29weSB0aGUgcG9pbnRlcgorICAgICAgICAgKiAgVGhpcyBtZXRob2QgaXMgb25seSBjYWxsZWQgaWYgbXl2b2lkICE9IE5VTEwKKyAgICAgICAgICogIG15dm9pZCBpcyB0aGUgY3VycmVudCBteXZvaWQgcG9pbnRlci4KKyAgICAgICAgICogIHJldHVybnMgTlVMTCBvbiBmYWlsdXJlCisgICAgICAgICAqLworICAgICAgICB2b2lkICooKmRhdGFfY2xvbmUpKHZvaWQgKm15dm9pZCk7CisgICAgICAgIC8qKiBkYXRhIGZyZWUgaG9vayBmb3IgbXl2b2lkCisgICAgICAgICAqICBkZWxldGUgdGhlIG15dm9pZCBtZW1iZXIgLSBkZWZhdWx0IGlzIHRvIGRvIG5vdGhpbmcKKyAgICAgICAgICogIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIGlmIG15dm9pZCAhPSBOVUxMCisgICAgICAgICAqLwogICAgICAgICB2b2lkICgqZGF0YV9mcmVlKSh2b2lkICpteXZvaWQpOyAvKio8IGRhdGEgZnJlZSBob29rIGZvciBteXZvaWQgKi8KIAogICAgICAgICBzdHJ1Y3QgbmV0c25tcF9taWJfaGFuZGxlcl9zICpuZXh0OwpAQCAtMjA3LDEyICsyMTgsMTMgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICoKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZXMpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKgogICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIE5ldHNubXBfTm9kZV9IYW5kbGVyKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJfYWNjZXNzX21ldGhvZCwgb2lkICpyZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50IG1vZGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyX2FjY2Vzc19tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGVzKTsKIAogICAgIG5ldHNubXBfZGVsZWdhdGVkX2NhY2hlCiAgICAgICAgICpuZXRzbm1wX2NyZWF0ZV9kZWxlZ2F0ZWRfY2FjaGUobmV0c25tcF9taWJfaGFuZGxlciAqLApAQCAtMjMxLDYgKzI0Myw4IEBACiAgICAgdm9pZAogICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKm5vZGUpOworICAgIGludCBuZXRzbm1wX3JlcXVlc3RfcmVtb3ZlX2xpc3RfZGF0YShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CiAKICAgICBpbnQKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGEobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKaW5kZXggZTlhZjg5ZC4uZTZiMzU0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaApAQCAtMTEsMTIgKzExLDE3IEBACiAKICAgICB2b2lkICAgICAgICAgICAgaW5pdF9hZ2VudF9yZWFkX2NvbmZpZyhjb25zdCBjaGFyICopOwogICAgIHZvaWQgICAgICAgICAgICB1cGRhdGVfY29uZmlnKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICosCisgICAgdm9pZCAgICAgICAgICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZWxwKTsKKyAgICB2b2lkICAgICAgICAgICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wZF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKik7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhjb25zdCBjaGFyICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKaW5kZXggZTllMjg0NS4uMjk0OWM5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaApAQCAtMzUsMTggKzM1LDIwIEBACiB9OwogCiBzdHJ1Y3QgcmVnaXN0ZXJfcGFyYW1ldGVycyB7Ci0gICAgb2lkICAgICAgICAgICAgKm5hbWU7Ci0gICAgc2l6ZV90ICAgICAgICAgIG5hbWVsZW47Ci0gICAgaW50ICAgICAgICAgICAgIHByaW9yaXR5OwotICAgIGludCAgICAgICAgICAgICByYW5nZV9zdWJpZDsKLSAgICBvaWQgICAgICAgICAgICAgcmFuZ2VfdWJvdW5kOwotICAgIGludCAgICAgICAgICAgICB0aW1lb3V0OwotICAgIHVfY2hhciAgICAgICAgICBmbGFnczsKLSAgICBjb25zdCBjaGFyICAgICAqY29udGV4dE5hbWU7CisgICAgb2lkICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICBuYW1lbGVuOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3N1YmlkOworICAgIG9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3Vib3VuZDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgKmNvbnRleHROYW1lOworICAgIG5ldHNubXBfc2Vzc2lvbiAgICAgICAgICAgICAgKnNlc3Npb247CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKIH07CiAKIHR5cGVkZWYgc3RydWN0IHN1YnRyZWVfY29udGV4dF9jYWNoZV9zIHsKLSAgICBjaGFyCQkJCSpjb250ZXh0X25hbWU7CisgICAgY29uc3QgY2hhcgkJCQkqY29udGV4dF9uYW1lOwogICAgIHN0cnVjdCBuZXRzbm1wX3N1YnRyZWVfcwkJKmZpcnN0X3N1YnRyZWU7CiAgICAgc3RydWN0IHN1YnRyZWVfY29udGV4dF9jYWNoZV9zCSpuZXh0OwogfSBzdWJ0cmVlX2NvbnRleHRfY2FjaGU7CkBAIC01NywxOCArNTksMjEgQEAKIHZvaWQgICAgICAgICAgICAgc2h1dGRvd25fdHJlZSAgICAodm9pZCk7CiAKIAotbmV0c25tcF9zdWJ0cmVlICpuZXRzbm1wX3N1YnRyZWVfZmluZAkgIChvaWQgKiwgc2l6ZV90LCBuZXRzbm1wX3N1YnRyZWUgKiwKK25ldHNubXBfc3VidHJlZSAqbmV0c25tcF9zdWJ0cmVlX2ZpbmQJICAoY29uc3Qgb2lkICosIHNpemVfdCwKKwkJCQkJICAgbmV0c25tcF9zdWJ0cmVlICosCiAJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSk7CiAKLW5ldHNubXBfc3VidHJlZSAqbmV0c25tcF9zdWJ0cmVlX2ZpbmRfbmV4dChvaWQgKiwgc2l6ZV90LCBuZXRzbm1wX3N1YnRyZWUgKiwKK25ldHNubXBfc3VidHJlZSAqbmV0c25tcF9zdWJ0cmVlX2ZpbmRfbmV4dChjb25zdCBvaWQgKiwgc2l6ZV90LAorCQkJCQkgICBuZXRzbm1wX3N1YnRyZWUgKiwKIAkJCQkJICAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKTsKIAotbmV0c25tcF9zdWJ0cmVlICpuZXRzbm1wX3N1YnRyZWVfZmluZF9wcmV2KG9pZCAqLCBzaXplX3QsbmV0c25tcF9zdWJ0cmVlICosCituZXRzbm1wX3N1YnRyZWUgKm5ldHNubXBfc3VidHJlZV9maW5kX3ByZXYoY29uc3Qgb2lkICosIHNpemVfdCwKKwkJCQkJICAgbmV0c25tcF9zdWJ0cmVlICosCiAJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSk7CiAKIG5ldHNubXBfc3VidHJlZSAqbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29uc3QgY2hhciAqY29udGV4dF9uYW1lKTsKIAotbmV0c25tcF9zZXNzaW9uICpnZXRfc2Vzc2lvbl9mb3Jfb2lkCSAgIChvaWQgKiwgc2l6ZV90LCAKK25ldHNubXBfc2Vzc2lvbiAqZ2V0X3Nlc3Npb25fZm9yX29pZAkgICAoY29uc3Qgb2lkICosIHNpemVfdCwgCiAJCQkJCSAgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpOwogCiBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKmdldF90b3BfY29udGV4dF9jYWNoZSh2b2lkKTsKQEAgLTg0LDI1ICs4OSwzMiBAQAogI2RlZmluZSBNSUJfVU5SRUdJU1RSQVRJT05fRkFJTEVECS0yCiAjZGVmaW5lIERFRkFVTFRfTUlCX1BSSU9SSVRZCQkxMjcKIAotaW50ICAgICAgICAgICAgIHJlZ2lzdGVyX21pYgkJICAgKGNvbnN0IGNoYXIgKiwgc3RydWN0IHZhcmlhYmxlICosCi0JCQkJCSAgICBzaXplX3QsIHNpemVfdCwgb2lkICosIHNpemVfdCk7CitpbnQgICAgICAgICAgICAgcmVnaXN0ZXJfbWliCQkgICAoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKiwKKwkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBjb25zdCBvaWQgKiwKKwkJCQkJICAgIHNpemVfdCk7CiAKLWludCAgICAgICAgICAgICByZWdpc3Rlcl9taWJfcHJpb3JpdHkJICAgKGNvbnN0IGNoYXIgKiwgc3RydWN0IHZhcmlhYmxlICosCi0JCQkJCSAgICBzaXplX3QsIHNpemVfdCwgb2lkICosIHNpemVfdCwKK2ludCAgICAgICAgICAgICByZWdpc3Rlcl9taWJfcHJpb3JpdHkJICAgKGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICosCisJCQkJCSAgICBzaXplX3QsIHNpemVfdCwgY29uc3Qgb2lkICosIHNpemVfdCwKIAkJCQkJICAgIGludCk7CiAKLWludCAgICAgICAgICAgICByZWdpc3Rlcl9taWJfcmFuZ2UJICAgKGNvbnN0IGNoYXIgKiwgc3RydWN0IHZhcmlhYmxlICosCi0JCQkJCSAgICBzaXplX3QsIHNpemVfdCwgb2lkICosIHNpemVfdCwgCi0JCQkJCSAgICBpbnQsIGludCwgb2lkLCBuZXRzbm1wX3Nlc3Npb24gKik7CitpbnQgICAgICAgICAgICAgcmVnaXN0ZXJfbWliX3JhbmdlCSAgIChjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqLAorCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIGNvbnN0IG9pZCAqLAorCQkJCQkgICAgc2l6ZV90LCBpbnQsIGludCwgb2lkLAorCQkJCQkgICAgbmV0c25tcF9zZXNzaW9uICopOwogCi1pbnQJCXJlZ2lzdGVyX21pYl9jb250ZXh0CSAgIChjb25zdCBjaGFyICosIHN0cnVjdCB2YXJpYWJsZSAqLAotCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIG9pZCAqLCBzaXplX3QsCitpbnQJCXJlZ2lzdGVyX21pYl9jb250ZXh0CSAgIChjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqLAorCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIGNvbnN0IG9pZCAqLCBzaXplX3QsCiAJCQkJCSAgICBpbnQsIGludCwgb2lkLCBuZXRzbm1wX3Nlc3Npb24gKiwKIAkJCQkJICAgIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwogCi1pbnQJbmV0c25tcF9yZWdpc3Rlcl9taWJfdGFibGVfcm93CSAgIChjb25zdCBjaGFyICosIHN0cnVjdCB2YXJpYWJsZSAqLAotCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIG9pZCAqLCBzaXplX3QsIAotCQkJCQkgICAgaW50LCBpbnQsIG5ldHNubXBfc2Vzc2lvbiAqLAoraW50CW5ldHNubXBfcmVnaXN0ZXJfbWliX3RhYmxlX3JvdwkgICAoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKiwKKwkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBvaWQgKiwKKwkJCQkJICAgIHNpemVfdCwgaW50LCBpbnQsIG5ldHNubXBfc2Vzc2lvbiAqLAogCQkJCQkgICAgY29uc3QgY2hhciAqLCBpbnQsIGludCk7CiAKIGludAkJdW5yZWdpc3Rlcl9taWIJCSAgIChvaWQgKiwgc2l6ZV90KTsKQEAgLTEzNywxMCArMTQ5LDEyIEBACiAgKiAgICAgICAgICAoc2l6ZW9mKHRoZW9pZCkgKm11c3QqIHJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzISkgCiAgKi8KIAotI2RlZmluZSBSRUdJU1RFUl9NSUIoZGVzY3IsIHZhciwgdmFydHlwZSwgdGhlb2lkKSAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChyZWdpc3Rlcl9taWIoZGVzY3IsIChzdHJ1Y3QgdmFyaWFibGUgKikgdmFyLCBzaXplb2Yoc3RydWN0IHZhcnR5cGUpLCBcCi0gICAgICAgICAgICAgICBzaXplb2YodmFyKS9zaXplb2Yoc3RydWN0IHZhcnR5cGUpLCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIHRoZW9pZCwgc2l6ZW9mKHRoZW9pZCkvc2l6ZW9mKG9pZCkpICE9IE1JQl9SRUdJU1RFUkVEX09LICkgXAorI2RlZmluZSBSRUdJU1RFUl9NSUIoZGVzY3IsIHZhciwgdmFydHlwZSwgdGhlb2lkKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChyZWdpc3Rlcl9taWIoZGVzY3IsIChjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKikgdmFyLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB2YXJ0eXBlKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZhcikvc2l6ZW9mKHN0cnVjdCB2YXJ0eXBlKSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgdGhlb2lkLCBzaXplb2YodGhlb2lkKS9zaXplb2Yob2lkKSkgIT0gICAgICAgICAgICAgXAorICAgICAgICBNSUJfUkVHSVNURVJFRF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCURFQlVHTVNHVEwoKCJyZWdpc3Rlcl9taWIiLCAiJXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwgZGVzY3IpKTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MjZlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIEFHRU5UX1NZU09SVEFCTEVfSAorI2RlZmluZSBBR0VOVF9TWVNPUlRBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCitzdHJ1Y3Qgc3lzT1JUYWJsZTsKKworZXh0ZXJuIHZvaWQgICAgIGluaXRfYWdlbnRfc3lzT1JUYWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkICAgICBzaHV0ZG93bl9hZ2VudF9zeXNPUlRhYmxlKHZvaWQpOworCitleHRlcm4gdm9pZCAgICAgbmV0c25tcF9zeXNPUlRhYmxlX2ZvcmVhY2godm9pZCAoKikoY29uc3Qgc3RydWN0IHN5c09SVGFibGUqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKik7CisKK2V4dGVybiBpbnQgICAgICByZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50ICAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICAgIHJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWQgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqKTsKK2V4dGVybiBpbnQgICAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWQgKiwgc2l6ZV90LCBuZXRzbm1wX3Nlc3Npb24gKik7CitleHRlcm4gdm9pZCAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX2J5X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogQUdFTlRfU1lTT1JUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCmluZGV4IGViYzJiMDYuLjI2ZTIyMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCkBAIC0xNCwxNiArMTQsMjAgQEAKIHZvaWQgICAgICAgICAgICBzZW5kX2Vhc3lfdHJhcChpbnQsIGludCk7CiB2b2lkICAgICAgICAgICAgc2VuZF90cmFwX3BkdShuZXRzbm1wX3BkdSAqKTsKIHZvaWQgICAgICAgICAgICBzZW5kX3YydHJhcChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7Cit2b2lkICAgICAgICAgICAgc2VuZF92M3RyYXAobmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCBjb25zdCBjaGFyICpjb250ZXh0KTsKIHZvaWQgICAgICAgICAgICBzZW5kX3RyYXBfdmFycyhpbnQsIGludCwgbmV0c25tcF92YXJpYWJsZV9saXN0ICopOwordm9pZCAgICAgICAgICAgIHNlbmRfdHJhcF92YXJzX3dpdGhfY29udGV4dChpbnQgdHJhcCwgaW50IHNwZWNpZmljLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0KTsKIHZvaWQgICAgICAgICAgICBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzKGludCB0cmFwLCBpbnQgc3BlY2lmaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBlbnRlcnByaXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogZW50ZXJwcmlzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRlcnByaXNlX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcnMpOwogaW50ICAgICAgICAgICAgIG5ldHNubXBfc2VuZF90cmFwcyhpbnQgdHJhcCwgaW50IHNwZWNpZmljLAotICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBlbnRlcnByaXNlLCBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIGVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2UgbmV4dCB0d28gYXJlIGN1cnJlbnRseSB1bnVzZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGNvbnRleHQsIGludCBmbGFncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzIGFyZSBjdXJyZW50bHkgdW51c2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb250ZXh0LCBpbnQgZmxhZ3MpOwogdm9pZCAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ19hdXRodHJhcChjb25zdCBjaGFyICosIGNoYXIgKik7CiB2b2lkICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RyYXBzaW5rKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIHZvaWQgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdHJhcDJzaW5rKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAppbmRleCAyN2U1ODBlLi5kMGQ1YzIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaD4gCiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9tZmQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaD4KIAogCiB2b2lkICAgICAgICAgICAgbmV0c25tcF9pbml0X2hlbHBlcnModm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCmluZGV4IDZhMWE4YjkuLmQyNTY1NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCkBAIC0xNiw2ICsxNiw3IEBACiAjZGVmaW5lIEJBQllfU1RFUF9OT05FICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBCQUJZX1NURVBfUFJFX1JFUVVFU1QgICAgICAgICAgICgweDEgPDwgIDEpCiAjZGVmaW5lIEJBQllfU1RFUF9PQkpFQ1RfTE9PS1VQICAgICAgICAgKDB4MSA8PCAgMikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjZGVmaW5lIEJBQllfU1RFUF9DSEVDS19WQUxVRSAgICAgICAgICAgKDB4MSA8PCAgMykKICNkZWZpbmUgQkFCWV9TVEVQX1JPV19DUkVBVEUgICAgICAgICAgICAoMHgxIDw8ICA0KQogI2RlZmluZSBCQUJZX1NURVBfVU5ET19TRVRVUCAgICAgICAgICAgICgweDEgPDwgIDUpCkBAIC0yNiwxNCArMjcsMTcgQEAKICNkZWZpbmUgQkFCWV9TVEVQX1VORE9fQ09NTUlUICAgICAgICAgICAoMHgxIDw8IDEwKQogI2RlZmluZSBCQUJZX1NURVBfSVJSRVZFUlNJQkxFX0NPTU1JVCAgICgweDEgPDwgMTEpCiAjZGVmaW5lIEJBQllfU1RFUF9VTkRPX0NMRUFOVVAgICAgICAgICAgKDB4MSA8PCAxMikKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNkZWZpbmUgQkFCWV9TVEVQX1BPU1RfUkVRVUVTVCAgICAgICAgICAoMHgxIDw8IDEzKQogCiAjZGVmaW5lIEJBQllfU1RFUF9BTEwgICAgICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmYpCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNkZWZpbmUgQkFCWV9TVEVQX0NIRUNLX09CSkVDVCAgICAgICAgICBCQUJZX1NURVBfQ0hFQ0tfVkFMVUUKICNkZWZpbmUgQkFCWV9TVEVQX1NFVF9WQUxVRVMgICAgICAgICAgICBCQUJZX1NURVBfU0VUX1ZBTFVFCiAjZGVmaW5lIEJBQllfU1RFUF9VTkRPX1NFVFMgICAgICAgICAgICAgQkFCWV9TVEVQX1VORE9fU0VUCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qKiBAbmFtZSBiYWJ5X3N0ZXBzCiAgKgpAQCAtNDMsNiArNDcsOCBAQAogICogIEB7ICovCiAKICAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2JhYnlfc3RlcHNfbW9kZXNfcyB7CisgICAgICAgLyoqIE51bWJlciBvZiBoYW5kbGVycyB3aG9zZSBteXZvaWQgcG9pbnRlciBwb2ludHMgYXQgdGhpcyBvYmplY3QuICovCisgICAgICAgaW50ICAgICAgICAgcmVmY250OwogICAgICAgIHVfaW50ICAgICAgIHJlZ2lzdGVyZWQ7CiAgICAgICAgdV9pbnQgICAgICAgY29tcGxldGVkOwogICAgIH0gbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzOwpAQCAtNzQsNiArODAsNyBAQAogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnByZV9yZXF1ZXN0OwogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKm9iamVjdF9sb29rdXA7CiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqZ2V0X3ZhbHVlczsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqb2JqZWN0X3N5bnRheF9jaGVja3M7CiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqcm93X2NyZWF0aW9uOwogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnVuZG9fc2V0dXA7CkBAIC04NCw2ICs5MSw3IEBACiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqdW5kb19jbGVhbnVwOwogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnVuZG9fY29tbWl0OwogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKmlycmV2ZXJzaWJsZV9jb21taXQ7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqcG9zdF9yZXF1ZXN0OwogCiAgICB2b2lkICAgICAgICAgICAgICAgICAqbXlfYWNjZXNzX3ZvaWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCmluZGV4IGU1YWM2NTMuLjFlNDc1MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCkBAIC0xLDMgKzEsMTMgQEAKKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLwogI2lmbmRlZiBORVRTTk1QX0NBQ0hFX0hBTkRMRVJfSAogI2RlZmluZSBORVRTTk1QX0NBQ0hFX0hBTkRMRVJfSAogCkBAIC0yMiw2ICszMiw4IEBACiAgICAgdHlwZWRlZiB2b2lkIChOZXRzbm1wQ2FjaGVGcmVlKShuZXRzbm1wX2NhY2hlICosIHZvaWQqKTsKIAogICAgIHN0cnVjdCBuZXRzbm1wX2NhY2hlX3MgeworCS8qKiBOdW1iZXIgb2YgaGFuZGxlcnMgd2hvc2UgbXl2b2lkIG1lbWJlciBwb2ludHMgYXQgdGhpcyBzdHJ1Y3R1cmUuICovCisJaW50ICAgICAgcmVmY250OwogICAgICAgICAvKgogCSAqIEZvciBvcGVyYXRpb24gb2YgdGhlIGRhdGEgY2FjaGVzCiAJICovCkBAIC0zMCw3ICs0Miw3IEBACiAgICAgICAgIGludCAgICAgIHZhbGlkOwogICAgICAgICBjaGFyICAgICBleHBpcmVkOwogICAgICAgICBpbnQgICAgICB0aW1lb3V0OwkvKiBMZW5ndGggb2YgdGltZSB0aGUgY2FjaGUgaXMgdmFsaWQgKGluIHMpICovCi0gICAgICAgIG1hcmtlcl90IHRpbWVzdGFtcDsJLyogV2hlbiB0aGUgY2FjaGUgd2FzIGxhc3QgbG9hZGVkICovCisgICAgICAgIG1hcmtlcl90IHRpbWVzdGFtcE07CS8qIFdoZW4gdGhlIGNhY2hlIHdhcyBsYXN0IGxvYWRlZCAqLwogICAgICAgICB1X2xvbmcgICB0aW1lcl9pZDsgICAgICAvKiBwZXJpb2RpYyB0aW1lciBpZCAqLwogCiAgICAgICAgIE5ldHNubXBDYWNoZUxvYWQgKmxvYWRfY2FjaGU7CkBAIC03NCw3ICs4Niw3IEBACiAgICAgaW50ICAgICAgICAgICAgbmV0c25tcF9pc19jYWNoZV92YWxpZCggICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKik7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcihpbnQsIE5ldHNubXBDYWNoZUxvYWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcENhY2hlRnJlZSAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQqLCBpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQqLCBpbnQpOwogICAgIGludCAgIG5ldHNubXBfcmVnaXN0ZXJfY2FjaGVfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIE5ldHNubXBDYWNoZUxvYWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQ2FjaGVGcmVlICopOwpAQCAtODQsMTEgKzk2LDE1IEBACiAgICAgbmV0c25tcF9jYWNoZSAqCiAgICAgbmV0c25tcF9jYWNoZV9jcmVhdGUoaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKiBsb2FkX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcENhY2hlRnJlZSAqIGZyZWVfaG9vaywKLSAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbik7CisgICAgaW50IG5ldHNubXBfY2FjaGVfcmVtb3ZlKG5ldHNubXBfY2FjaGUgKmNhY2hlKTsKKyAgICBpbnQgbmV0c25tcF9jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKmNhY2hlKTsKKwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKgogICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQobmV0c25tcF9jYWNoZSogY2FjaGUpOworICAgIHZvaWQgbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcik7CiAKLSAgICBuZXRzbm1wX2NhY2hlICogbmV0c25tcF9jYWNoZV9maW5kX2J5X29pZChvaWQgKiByb290b2lkLAorICAgIG5ldHNubXBfY2FjaGUgKiBuZXRzbm1wX2NhY2hlX2ZpbmRfYnlfb2lkKGNvbnN0IG9pZCAqIHJvb3RvaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvb3RvaWRfbGVuKTsKIAogICAgIHVuc2lnbmVkIGludCBuZXRzbm1wX2NhY2hlX3RpbWVyX3N0YXJ0KG5ldHNubXBfY2FjaGUgKmNhY2hlKTsKQEAgLTEwMyw2ICsxMTksNyBAQAogI2RlZmluZSBORVRTTk1QX0NBQ0hFX0RPTlRfQVVUT19SRUxFQVNFICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CiAjZGVmaW5lIE5FVFNOTVBfQ0FDSEVfUFJFTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKICNkZWZpbmUgTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBORVRTTk1QX0NBQ0hFX1JFU0VUX1RJTUVSX09OX1VTRSAgICAgICAgICAgICAgICAgICAgMHgwMDQwCiAKICNkZWZpbmUgTkVUU05NUF9DQUNIRV9ISU5UX0hBTkRMRVJfQVJHUyAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKaW5kZXggYWFiYjc5Mi4uZjZmNjM5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaApAQCAtMjcsMTAgKzI3LDE4IEBACiAjZGVmaW5lIE5FVFNOTVBfRFNfQUdFTlRfRE9OVF9MT0dfVENQV1JBUFBFUlNfQ09OTkVDVFMgMTIgICAvKiAxID0gZGlzYWJsZSBsb2dnaW5nICovCiAjZGVmaW5lIE5FVFNOTVBfRFNfQVBQX0RPTlRfTE9HICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ET05UX1JFVEFJTl9OT1RJRklDQVRJT05TIC8qIGNvbXBhdCAqLwogI2RlZmluZSBORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMgICAgMTMgICAvKiAxID0gZG9uJ3Qgc3RvcmUgTkZTIGVudHJpZXMgaW4gaHJTdG9yYWdlVGFibGUgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19BR0VOVF9SRUFMU1RPUkFHRVVOSVRTIDE0ICAgIC8qIDEgPSB1c2UgcmVhbCBhbGxvY2F0aW9uIHVuaXRzIGluIGhyU3RvcmFnZVRhYmxlLCAwID0gcmVjYWxjdWxhdGUgaXQgdG8gZml0IDMyYml0cyAqLwogCi0vKiBXQVJOSU5HOiBUaGUgdHJhcCByZWNlaXZlciB1c2VzIERTIGZsYWdzIGFuZCBtdXN0IG5vdCBjb25mbGljdCB3aXRoCi0gICB0aGVzZSEgIElmIHlvdSB1c2UgYSB2YWx1ZSBhYm92ZSAxNSwgY2hhbmdlIHRoZSBtaW5pbWltdW0gRFMgYm9vbAotICAgdmFsdWUgaW4gc25tcHRyYXBkX2xvZy5oICovCisgICAvKiBSZXBlYXRlZCBmcm9tICJhcHBzL3NubXB0cmFwZF9kcy5oIiAqLworI2RlZmluZSBORVRTTk1QX0RTX0FQUF9OVU1FUklDX0lQICAgICAgIDE2CisjZGVmaW5lIE5FVFNOTVBfRFNfQVBQX05PX0FVVEhPUklaQVRJT04gMTcKKworI2RlZmluZSBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19GRCAgIDE4ICAgICAgLyogMSA9IGRvbid0IHJlcG9ydCAvZGV2L2ZkKiAgIGVudHJpZXMgaW4gZGlza0lPVGFibGUgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fTE9PUCAxOSAgICAgIC8qIDEgPSBkb24ndCByZXBvcnQgL2Rldi9sb29wKiBlbnRyaWVzIGluIGRpc2tJT1RhYmxlICovCisjZGVmaW5lIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX1JBTSAgMjAgICAgICAvKiAxID0gZG9uJ3QgcmVwb3J0IC9kZXYvcmFtKiAgZW50cmllcyBpbiBkaXNrSU9UYWJsZSAqLworCisvKiBXQVJOSU5HOiBUaGUgdHJhcCByZWNlaXZlciBhbHNvIHVzZXMgRFMgZmxhZ3MgYW5kIG11c3Qgbm90IGNvbmZsaWN0IHdpdGggdGhlc2UhCisgKiBJZiB5b3UgZGVmaW5lIGFkZGl0aW9uYWwgYm9vbGVhbiBlbnRyaWVzLCBjaGVjayBpbiAiYXBwcy9zbm1wdHJhcGRfZHMuaCIgZmlyc3QgKi8KIAogLyoKICAqIHN0cmluZ3MgCkBAIC00Miw2ICs1MCw3IEBACiAjZGVmaW5lIE5FVFNOTVBfRFNfQUdFTlRfUEVSTF9JTklUX0ZJTEUgICAgNCAgICAvKiB1c2VkIGJ5IGVtYmVkZGVkIHBlcmwgKi8KICNkZWZpbmUgTkVUU05NUF9EU19TTVVYX1NPQ0tFVCAgICA1ICAgICAvKiBpcDpwb3J0IHNvY2tldCBhZGRyICovCiAjZGVmaW5lIE5FVFNOTVBfRFNfTk9USUZfTE9HX0NUWCAgNiAgICAgLyogIiIgfCAic25tcHRyYXBkIiAqLworI2RlZmluZSBORVRTTk1QX0RTX0FHRU5UX1RSQVBfQUREUiAgICAgIDcgICAgIC8qIHVzZWQgYXMgdjEgdHJhcCBhZ2VudCBhZGRyZXNzICovCiAKIC8qCiAgKiBpbnRlZ2VycyAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oCmluZGV4IDYyNjg4OTcuLmY2ZTQzZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaApAQCAtMzMsNiArMzMsOSBAQAogICAgICB1bnNpZ25lZCBsb25nIGxvbmcga2Vybl90aWNrczsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludHJwdF90aWNrczsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpcnFfdGlja3M7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdGVhbF90aWNrczsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIGd1ZXN0X3RpY2tzOworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ3Vlc3RuaWNlX3RpY2tzOwogCiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF90aWNrczsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN5czJfdGlja3M7ICAvKiBGb3Igbm9uLWF0b21pYyBzeXN0ZW0gY291bnRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZThlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaApAQCAtMCwwICsxLDEwOSBAQAordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9mc3lzX2luZm9fcyBuZXRzbm1wX2ZzeXNfaW5mbzsKKworI2RlZmluZSBfTkVUU05NUF9GU19UWVBFX1NLSVBfQklUICAgMHgyMDAwCisjZGVmaW5lIF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwgICAgICAweDEwMDAKKworICAgLyoKKyAgICAqIEVudW1lcmF0aW9uIGZyb20gSE9TVC1SRVNPVVJDRVMtVFlQRVMgbWliCisgICAgKi8KKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX09USEVSCSAgIDEKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1VOS05PV04JICAgMgorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfQkVSS0VMRVkgICAzCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9TWVNWCSAgIDQKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0ZBVAkgICA1CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9IUEZTCSAgIDYKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0hGUwkgICA3CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9NRlMJICAgOAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfTlRGUwkgICA5CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9WTk9ERQkgICAxMAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfSkZTCSAgIDExCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9JU085NjYwCSAgIDEyCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9ST0NLUklER0UgIDEzCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9ORlMJICAgMTQKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX05FVFdBUkUJICAgMTUKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0FGUwkgICAxNgorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfREZTCSAgIDE3CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9BUFBMRVNIQVJFIDE4CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9SRlMJICAgMTkKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0RHQ1MJICAgMjAKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0JPT1RGUwkgICAyMQorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfRkFUMzIJICAgMjIKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0VYVDIJICAgMjMKKworICAgLyoKKyAgICAqIEFkZGl0aW9uYWwgZW51bWVyYXRpb25pcyAtIG5vdCBsaXN0ZWQgaW4gdGhhdCBNSUIKKyAgICAqLworI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfSUdOT1JFCSAgIDEgfCBfTkVUU05NUF9GU19UWVBFX0xPQ0FMIHwgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVAorCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9QUk9DCSAgIDIgfCBfTkVUU05NUF9GU19UWVBFX0xPQ0FMIHwgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVAorCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9ERVZQVFMJICAgMyB8IF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwgfCBfTkVUU05NUF9GU19UWVBFX1NLSVBfQklUCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9TWVNGUwkgICA0IHwgX05FVFNOTVBfRlNfVFlQRV9MT0NBTCB8IF9ORVRTTk1QX0ZTX1RZUEVfU0tJUF9CSVQKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX1RNUEZTCSAgIDUgfCBfTkVUU05NUF9GU19UWVBFX0xPQ0FMCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9VU0JGUwkgICA2IHwgX05FVFNOTVBfRlNfVFlQRV9MT0NBTAorCisjZGVmaW5lIE5FVFNOTVBfRlNfRkxBR19BQ1RJVkUgICAweDAxCisjZGVmaW5lIE5FVFNOTVBfRlNfRkxBR19SRU1PVEUgICAweDAyCisjZGVmaW5lIE5FVFNOTVBfRlNfRkxBR19ST05MWSAgICAweDA0CisjZGVmaW5lIE5FVFNOTVBfRlNfRkxBR19CT09UQUJMRSAweDA4CisjZGVmaW5lIE5FVFNOTVBfRlNfRkxBR19SRU1PVkUgICAweDEwCisjZGVmaW5lIE5FVFNOTVBfRlNfRkxBR19VQ0QgICAgICAweDIwCisKKyNkZWZpbmUgTkVUU05NUF9GU19GSU5EX0NSRUFURSAgICAgMSAgIC8qIG9yIHVzZSBvbmUgb2YgdGhlIHR5cGUgdmFsdWVzICovCisjZGVmaW5lIE5FVFNOTVBfRlNfRklORF9FWElTVCAgICAgIDAKKworc3RydWN0IG5ldHNubXBfZnN5c19pbmZvX3MgeworICAgICBuZXRzbm1wX2luZGV4ICBpZHg7CisgIC8qIGludCAgaWR4OyAqLworIAorICAgICBjaGFyIHBhdGhbICBTTk1QX01BWFBBVEgrMV07CisgICAgIGNoYXIgZGV2aWNlW1NOTVBfTUFYUEFUSCsxXTsKKyAgICAgaW50ICB0eXBlOworCisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNlZDsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIGF2YWlsOworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdW5pdHM7CisKKyAgICAgLyogYXJ0aWZpY2lhbGx5IGNvbXB1dGVkIHZhbHVlcywgYm90aCAnc2l6ZV8zMicgYW5kICd1bml0c18zMicgZml0IElOVDMyICovCisgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZV8zMjsKKyAgICAgdW5zaWduZWQgbG9uZyB1c2VkXzMyOworICAgICB1bnNpZ25lZCBsb25nIGF2YWlsXzMyOworICAgICB1bnNpZ25lZCBsb25nIHVuaXRzXzMyOworCisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnVtc190b3RhbDsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludW1zX2F2YWlsOworCisgICAgIGludCAgbWluc3BhY2U7CisgICAgIGludCAgbWlucGVyY2VudDsKKworICAgICBsb25nIGZsYWdzOworCisgICAgIG5ldHNubXBfZnN5c19pbmZvICpuZXh0OworfTsKKworCisgICAgLyoKKyAgICAgKiBQb3NzaWJseSBub3QgYWxsIG5lZWRlZCA/PworICAgICAqLworbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19nZXRfZmlyc3QoIHZvaWQgKTsKK25ldHNubXBfZnN5c19pbmZvICpuZXRzbm1wX2ZzeXNfZ2V0X25leHQoIG5ldHNubXBfZnN5c19pbmZvKiApOworbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19nZXRfYnlJZHgoICBpbnQsICAgaW50ICk7CituZXRzbm1wX2ZzeXNfaW5mbyAqbmV0c25tcF9mc3lzX2dldF9uZXh0X2J5SWR4KGludCxpbnQgKTsKKworbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19ieV9kZXZpY2UoICBjaGFyKiwgaW50ICk7CituZXRzbm1wX2ZzeXNfaW5mbyAqbmV0c25tcF9mc3lzX2J5X3BhdGgoICAgIGNoYXIqLCBpbnQgKTsKKworbmV0c25tcF9jYWNoZSAqbmV0c25tcF9mc3lzX2dldF9jYWNoZSggdm9pZCApOworaW50ICBuZXRzbm1wX2ZzeXNfbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKmRhdGEgKTsKK3ZvaWQgbmV0c25tcF9mc3lzX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICpkYXRhICk7CisKK2ludCBuZXRzbm1wX2ZzeXNfc2l6ZSggbmV0c25tcF9mc3lzX2luZm8qICk7CitpbnQgbmV0c25tcF9mc3lzX3VzZWQoIG5ldHNubXBfZnN5c19pbmZvKiApOworaW50IG5ldHNubXBfZnN5c19hdmFpbChuZXRzbm1wX2ZzeXNfaW5mbyogKTsKKwordW5zaWduZWQgbG9uZyBsb25nIG5ldHNubXBfZnN5c19zaXplX3VsbCggbmV0c25tcF9mc3lzX2luZm8qICk7Cit1bnNpZ25lZCBsb25nIGxvbmcgbmV0c25tcF9mc3lzX3VzZWRfdWxsKCBuZXRzbm1wX2ZzeXNfaW5mbyogKTsKK3Vuc2lnbmVkIGxvbmcgbG9uZyBuZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKG5ldHNubXBfZnN5c19pbmZvKiApOworCit2b2lkIG5ldHNubXBfZnN5c19jYWxjdWxhdGUzMiggbmV0c25tcF9mc3lzX2luZm8gKmYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTllY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyIC0gU2Vuc29ycyBtb2R1bGUKKyAqCisgKiBQdWJsaWMgaW50ZXJmYWNlCisgKi8KKworI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX09USEVSICAgICAgIDEKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0FDICAzCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyAgNAorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX0NVUlJFTlQgICAgIDUKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9QT1dFUiAgICAgICA2CisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfRlJFUVVFTkNZICAgNworI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFIDgKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9IVU1JRElUWSAgICA5CisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNICAgICAgICAxMAorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFVNRSAgICAgMTEKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9CT09MRUFOICAgIDEyCisKKworI2RlZmluZSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRSAgICAgMHgwMQorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9GTEFHX05BVkFJTCAgICAgMHgwMgorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9GTEFHX0JST0tFTiAgICAgMHgwNAorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9GTEFHX0RJU0FCTEUgICAgMHgwOAorCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX01BU0tfU1RBVFVTICAgICAweDA2ICAvKiBOQVZBSUx8QlJPS0VOICovCisKKworI2RlZmluZSBORVRTTk1QX1NFTlNPUl9GSU5EX0NSRUFURSAgICAgMSAgIC8qIG9yIHVzZSBvbmUgb2YgdGhlIHNlbnNvciB0eXBlIHZhbHVlcyAqLworI2RlZmluZSBORVRTTk1QX1NFTlNPUl9GSU5EX0VYSVNUICAgICAgMAorCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3NlbnNvcl9pbmZvX3MgbmV0c25tcF9zZW5zb3JfaW5mbzsKK3N0cnVjdCBuZXRzbm1wX3NlbnNvcl9pbmZvX3MgeworCisgICAgbmV0c25tcF9pbmRleCAgaWR4OworICAgIC8qIGludCAgaWR4OyAqLworICAgIGNoYXIgIG5hbWVbMjU2XTsKKyAgICAKKyAgICBpbnQgICB0eXBlOworICAgIGZsb2F0IHZhbHVlOworICAgIGNoYXIgIGRlc2NyWzI1Nl07CisgICAgbG9uZyAgZmxhZ3M7Cit9OworCituZXRzbm1wX2NvbnRhaW5lciAgICpnZXRfc2Vuc29yX2NvbnRhaW5lciggdm9pZCApOworbmV0c25tcF9jYWNoZSAgICAgICAqZ2V0X3NlbnNvcl9jYWNoZSggdm9pZCApOworbmV0c25tcF9zZW5zb3JfaW5mbyAqc2Vuc29yX2J5X25hbWUoIGNvbnN0IGNoYXIgKiwgaW50ICk7CitOZXRzbm1wQ2FjaGVMb2FkICAgICBuZXRzbm1wX3NlbnNvcl9sb2FkOworTmV0c25tcENhY2hlRnJlZSAgICAgbmV0c25tcF9zZW5zb3JfZnJlZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAppbmRleCAwYTAyYzIxLi44MmYyZWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCkBAIC0yMCw4ICsyMCw5IEBACiAgKiAqIGhhdmUgdG8gY2hlY2sgdGhlIG9pZCBhdCBhbGwuICBKdXN0IGFuc3dlci4KICAqLwogCi1pbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbyk7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqIHJlZ2luZm8pOworCiBpbnQgICAgICAgICAgICAKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pOwogCkBAIC0yOSwxMTEgKzMwLDEwMyBAQAogCiBuZXRzbm1wX21pYl9oYW5kbGVyICpuZXRzbm1wX2dldF9pbnN0YW5jZV9oYW5kbGVyKHZvaWQpOwogCi1pbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdWJoYW5kbGVyKTsKLWludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyKTsKLWludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2UoY29uc3QgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyKTsKLWludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3ViaGFuZGxlcik7Ci1pbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9sb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlcik7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiAKLWludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlcik7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiAKLWludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2ludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogCiAvKiBpZGVudGljYWwgZnVuY3Rpb25zIHRoYXQgcmVnaXN0ZXIgYSBpbiBhIHBhcnRpY3VsYXIgY29udGV4dCAqLwotaW50ICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7Ci1pbnQgIG5ldHNubXBfcmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKLWludCAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7Ci1pbnQgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN1YmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7Ci1pbnQgIG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3ViaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CiAKLWludCAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOwogCi1pbnQgIG5ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKIAogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCkBAIC0xNDMsMTEgKzEzNiw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKIAogTmV0c25tcF9Ob2RlX0hhbmRsZXIgbmV0c25tcF9pbnN0YW5jZV9oZWxwZXJfaGFuZGxlcjsKLU5ldHNubXBfTm9kZV9IYW5kbGVyIG5ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlcjsKLU5ldHNubXBfTm9kZV9IYW5kbGVyIG5ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyOwotTmV0c25tcF9Ob2RlX0hhbmRsZXIgbmV0c25tcF9pbnN0YW5jZV9pbnRfaGFuZGxlcjsKLU5ldHNubXBfTm9kZV9IYW5kbGVyIG5ldHNubXBfaW5zdGFuY2VfdWludF9oYW5kbGVyOwotTmV0c25tcF9Ob2RlX0hhbmRsZXIgbmV0c25tcF9pbnN0YW5jZV9jb3VudGVyMzJfaGFuZGxlcjsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG5ldHNubXBfaW5zdGFuY2VfbnVtX2ZpbGVfaGFuZGxlcjsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCmluZGV4IDA2ZWM0NDkuLjJiZDNjZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCkBAIC0yNSwxMCArMjUsMTAgQEAKIH0gbmV0c25tcF9vbGRfYXBpX2NhY2hlOwogCiBpbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW12YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBtaWJsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG1pYmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pYmxvY2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFuZ2Vfc3ViaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCmluZGV4IDQ1Y2E2MmIuLmFhZDg4MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCkBAIC0xMTgsOSArMTE4LDE1IEBACiAjZGVmaW5lIE1PREVfR0VUTkVYVCAgICAgICAgICBTTk1QX01TR19HRVRORVhUCiAjZGVmaW5lIE1PREVfR0VUQlVMSyAgICAgICAgICBTTk1QX01TR19HRVRCVUxLCiAjZGVmaW5lIE1PREVfR0VUX1NUQVNIICAgICAgICBTTk1QX01TR19JTlRFUk5BTF9HRVRfU1RBU0gKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjZGVmaW5lIE1PREVfSVNfR0VUKHgpICAgICAgICAoKHggPj0gMTI4KSAmJiAoeCAhPSAtMSkgICYmICh4ICE9IFNOTVBfTVNHX1NFVCkpCisjZWxzZSAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyNkZWZpbmUgTU9ERV9JU19HRVQoeCkgICAgICAgICgoeCA+PSAxMjgpICYmICh4ICE9IC0xKSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogICAgIC8qICNkZWZpbmUgTU9ERV9JU19HRVQoeCkgICAgICAgICgoeCA9PSBTTk1QX01TR19HRVQpIHx8ICh4ID09IFNOTVBfTVNHX0dFVE5FWFQpIHx8ICh4ID09IFNOTVBfTVNHX0dFVEJVTEspIHx8ICh4ID09IFNOTVBfTVNHX0lOVEVSTkFMX0dFVF9TVEFTSCkpICovCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjZGVmaW5lIE1PREVfU0VUX0JFR0lOICAgICAgICBTTk1QX01TR19JTlRFUk5BTF9TRVRfQkVHSU4KICNkZWZpbmUgTU9ERV9TRVRfUkVTRVJWRTEgICAgIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMQogI2RlZmluZSBNT0RFX1NFVF9SRVNFUlZFMiAgICAgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUyCkBAIC0xMzAsMTEgKzEzNiwxMyBAQAogI2RlZmluZSBNT0RFX1NFVF9VTkRPICAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfU0VUX1VORE8KICNkZWZpbmUgTU9ERV9JU19TRVQoeCkgICAgICAgICAoKHggPCAxMjgpIHx8ICh4ID09IC0xKSB8fCAoeCA9PSBTTk1QX01TR19TRVQpKQogICAgIC8qICNkZWZpbmUgTU9ERV9JU19TRVQoeCkgICAgICAgICAoIU1PREVfSVNfR0VUKHgpKSAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAjZGVmaW5lIE1PREVfQlNURVBfUFJFX1JFUVVFU1QgICBTTk1QX01TR19JTlRFUk5BTF9QUkVfUkVRVUVTVAogI2RlZmluZSBNT0RFX0JTVEVQX1BPU1RfUkVRVUVTVCAgU05NUF9NU0dfSU5URVJOQUxfUE9TVF9SRVFVRVNUCiAKICNkZWZpbmUgTU9ERV9CU1RFUF9PQkpFQ1RfTE9PS1VQICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX09CSkVDVF9MT09LVVAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjZGVmaW5lIE1PREVfQlNURVBfQ0hFQ0tfVkFMVUUgICAgICAgICBTTk1QX01TR19JTlRFUk5BTF9DSEVDS19WQUxVRQogI2RlZmluZSBNT0RFX0JTVEVQX1JPV19DUkVBVEUgICAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfUk9XX0NSRUFURQogI2RlZmluZSBNT0RFX0JTVEVQX1VORE9fU0VUVVAgICAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfVU5ET19TRVRVUApAQCAtMTQ1LDcgKzE1Myw3IEBACiAjZGVmaW5lIE1PREVfQlNURVBfVU5ET19DT01NSVQgICAgICAgICBTTk1QX01TR19JTlRFUk5BTF9VTkRPX0NPTU1JVAogI2RlZmluZSBNT0RFX0JTVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQgU05NUF9NU0dfSU5URVJOQUxfSVJSRVZFUlNJQkxFX0NPTU1JVAogI2RlZmluZSBNT0RFX0JTVEVQX1VORE9fQ0xFQU5VUCAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfVU5ET19DTEVBTlVQCi0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoqIEB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvCiAgKiBUeXBlZGVmcyB0aGUgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcyBzdHJ1Y3QgaW50bwpAQCAtMjYyLDcgKzI3MCwxMSBAQAogCiAgICAgdV9sb25nICAgICAgICAgIG5ldHNubXBfbWFya2VyX3VwdGltZShtYXJrZXJfdCBwbSk7CiAgICAgdV9sb25nICAgICAgICAgIG5ldHNubXBfdGltZXZhbF91cHRpbWUoc3RydWN0IHRpbWV2YWwgKnR2KTsKKyAgICBjb25zdF9tYXJrZXJfdCAgbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKHZvaWQpOworICAgIHVpbnQ2NF90ICAgICAgICBuZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3NldF9hZ2VudF9zdGFydHRpbWUobWFya2VyX3Qgcyk7CiAgICAgdV9sb25nICAgICAgICAgIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9zZXRfYWdlbnRfdXB0aW1lKHVfbG9uZyBoc2VjKTsKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9jaGVja190cmFuc2FjdGlvbl9pZChpbnQgdHJhbnNhY3Rpb25faWQpOwogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X2NoZWNrX3BhY2tldChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNWQ0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgU05NUF9HRVRfU1RBVElTVElDX0gKKyNkZWZpbmUgU05NUF9HRVRfU1RBVElTVElDX0gKKworLyoqIFJlZ2lzdGVycyBhIHNjYWxhciBncm91cCB3aXRoIHN0YXRpc3RpY3MgZnJvbSBAcmVmIHNubXBfZ2V0X3N0YXRpc3RpYy4KKyAqICBhcyByZWdpbmZvLltzdGFydCwgc3RhcnQgKyBlbmQgLSBiZWdpbl0uCisgKiAgQHBhcmFtIHJlZ2luZm8gcmVnaXN0cmF0aW9uIHRvIHJlZ2lzdGVyIHRoZSBpdGVtcyB1bmRlcgorICogIEBwYXJhbSBzdGFydCBvZmZzZXQgdG8gdGhlIGJlZ2luIGl0ZW0KKyAqICBAcGFyYW0gYmVnaW4gZmlyc3Qgc25tcF9nZXRfc3RhdGlzdGljIGtleSB0byByZXR1cm4KKyAqICBAcGFyYW0gZW5kIGxhc3Qgc25tcF9nZXRfc3RhdGlzdGljIGtleSB0byByZXR1cm4KKyAqLworaW50CituZXRzbm1wX3JlZ2lzdGVyX3N0YXRpc3RpY19oYW5kbGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCBzdGFydCwgaW50IGJlZ2luLCBpbnQgZW5kKTsKKworI2RlZmluZSBORVRTTk1QX1JFR0lTVEVSX1NUQVRJU1RJQ19IQU5ETEVSKHJlZ2luZm8sIHN0YXJ0LCBzdGF0KSAgICAgICAgXAorICBuZXRzbm1wX3JlZ2lzdGVyX3N0YXRpc3RpY19oYW5kbGVyKHJlZ2luZm8sIHN0YXJ0LCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRfICMjIHN0YXQgIyMgX1NUQVRTX1NUQVJULCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRfICMjIHN0YXQgIyMgX1NUQVRTX0VORCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAppbmRleCBkMjgwYTlhLi43N2RiZDcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKQEAgLTQ1LDYgKzQ1LDIzIEBACiAKICAgICBzdHJ1Y3QgdmFyaWFibGU7CiAKKyAgICAvKioKKyAgICAgKiBEdXBsaWNhdGVzIGEgdmFyaWFibGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFBvaW50ZXIgdG8gdGhlIGR1cGxpY2F0ZSB2YXJpYWJsZSB1cG9uIHN1Y2Nlc3M7IE5VTEwgdXBvbgorICAgICAqICAgZmFpbHVyZS4KKyAgICAgKgorICAgICAqIEBzZWUgc3RydWN0IHZhcmlhYmxlCisgICAgICogQHNlZSBzdHJ1Y3QgdmFyaWFibGUxCisgICAgICogQHNlZSBzdHJ1Y3QgdmFyaWFibGUyCisgICAgICogQHNlZSBzdHJ1Y3QgdmFyaWFibGUzCisgICAgICogQHNlZSBzdHJ1Y3QgdmFyaWFibGU0CisgICAgICogQHNlZSBzdHJ1Y3QgdmFyaWFibGU3CisgICAgICogQHNlZSBzdHJ1Y3QgdmFyaWFibGU4CisgICAgICogQHNlZSBzdHJ1Y3QgdmFyaWFibGUxMworICAgICAqLworICAgIHN0cnVjdCB2YXJpYWJsZSAqbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGUoY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2YXIpOworCiAgICAgLyoKICAgICAgKiBGdW5jdGlvbiBwb2ludGVyIGNhbGxlZCBieSB0aGUgbWFzdGVyIGFnZW50IGZvciB3cml0ZXMuIAogICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCmluZGV4IGNmYTg1ZWYuLjM3MDlhMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKQEAgLTIwLDYgKzIwLDcgQEAKIH0gbmV0c25tcF9zdGFzaF9jYWNoZV9kYXRhOwogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCit2b2lkIG5ldHNubXBfaW5pdF9zdGFzaF9jYWNoZV9oZWxwZXIodm9pZCk7CiBuZXRzbm1wX21pYl9oYW5kbGVyICpuZXRzbm1wX2dldF9iYXJlX3N0YXNoX2NhY2hlX2hhbmRsZXIodm9pZCk7CiBuZXRzbm1wX21pYl9oYW5kbGVyICpuZXRzbm1wX2dldF9zdGFzaF9jYWNoZV9oYW5kbGVyKHZvaWQpOwogbmV0c25tcF9taWJfaGFuZGxlciAqbmV0c25tcF9nZXRfdGltZWRfYmFyZV9zdGFzaF9jYWNoZV9oYW5kbGVyKGludCB0aW1lb3V0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmViYWQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmbmRlZiBORVRTTk1QX1NZU09SVEFCTEVfSAorI2RlZmluZSBORVRTTk1QX1NZU09SVEFCTEVfSAorCitzdHJ1Y3Qgc3lzT1JUYWJsZSB7CisgICAgY2hhciAgICAgICAgICAgICpPUl9kZXNjcjsKKyAgICBvaWQgICAgICAgICAgICAgKk9SX29pZDsKKyAgICBzaXplX3QgICAgICAgICAgIE9SX29pZGxlbjsKKyAgICBuZXRzbm1wX3Nlc3Npb24gKk9SX3Nlc3M7CisgICAgdV9sb25nICAgICAgICAgICBPUl91cHRpbWU7Cit9OworCitzdHJ1Y3QgcmVnaXN0ZXJfc3lzT1JfcGFyYW1ldGVycyB7CisgICAgY2hhciAgICAgICAgICAgICpkZXNjcjsKKyAgICBvaWQgICAgICAgICAgICAgKm5hbWU7CisgICAgc2l6ZV90ICAgICAgICAgICBuYW1lbGVuOworfTsKKworI2RlZmluZSBTWVNfT1JUQUJMRV9SRUdJU1RFUkVEX09LICAgICAgICAgICAgICAwCisjZGVmaW5lIFNZU19PUlRBQkxFX1JFR0lTVFJBVElPTl9GQUlMRUQgICAgICAgLTEKKyNkZWZpbmUgU1lTX09SVEFCTEVfVU5SRUdJU1RFUkVEX09LICAgICAgICAgICAgMAorI2RlZmluZSBTWVNfT1JUQUJMRV9OT19TVUNIX1JFR0lTVFJBVElPTiAgICAgIC0xCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KKworI2RlZmluZSBSRUdJU1RFUl9TWVNPUl9UQUJMRSh0aGVvaWQsIGxlbiwgZGVzY3IpICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSB0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1JfZGVzY3IgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIGRlc2NyKTsgICAgICBcCisgICAgdC5PUl9vaWQgPSB0aGVvaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX29pZGxlbiA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1Jfc2VzcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl91cHRpbWUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1JFR19TWVNPUiwgJnQpOyBcCisgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgUkVHSVNURVJfU1lTT1JfRU5UUlkodGhlb2lkLCBkZXNjcikgICAgICAgICAgICAgICAgICAgICBcCisgIFJFR0lTVEVSX1NZU09SX1RBQkxFKHRoZW9pZCwgc2l6ZW9mKHRoZW9pZCkgLyBzaXplb2Yob2lkKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBkZXNjcikKKworI2RlZmluZSBVTlJFR0lTVEVSX1NZU09SX1RBQkxFKHRoZW9pZCwgbGVuKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RydWN0IHN5c09SVGFibGUgdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1JfZGVzY3IgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX29pZCA9IHRoZW9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl9vaWRsZW4gPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1Jfc2VzcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX3VwdGltZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVRX1VOUkVHX1NZU09SLCAmdCk7ICAgIFwKKyAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBVTlJFR0lTVEVSX1NZU09SX0VOVFJZKHRoZW9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgVU5SRUdJU1RFUl9TWVNPUl9UQUJMRSh0aGVvaWQsIHNpemVvZih0aGVvaWQpIC8gc2l6ZW9mKG9pZCkpCisKKyNkZWZpbmUgVU5SRUdJU1RFUl9TWVNPUl9TRVNTKHNlc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUl9TRVNTLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICBzZXNzKTsKKworCisjZW5kaWYgLyogTkVUU05NUF9TWVNPUlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAppbmRleCAzYjhiYmMyLi43OWU1ODhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCkBAIC05LDYgKzksMTIgQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KIC8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisvKgogICogQGZpbGUgdGFibGUuaAogICoKICAqIEBhZGR0b2dyb3VwIHRhYmxlCkBAIC0xMTUsMTUgKzEyMSwxNCBAQAogICAgIG5ldHNubXBfbWliX2hhbmRsZXIKICAgICAgICAgKm5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFicmVxKTsKLSAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZShuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YWJyZXEpOwotICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2J1aWxkX29pZChuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhYmxlX2luZm8pOworICAgIHZvaWQgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8obmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcik7CisgICAgdm9pZCAgbmV0c25tcF9yZWdpc3RyYXRpb25fb3duc190YWJsZV9pbmZvKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyk7CisgICAgaW50ICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSggIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYnJlcSk7CisgICAgaW50ICAgbmV0c25tcF91bnJlZ2lzdGVyX3RhYmxlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZ2luZm8pOworICAgIGludCAgIG5ldHNubXBfdGFibGVfYnVpbGRfb2lkKCBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICAgICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAgICp0YWJsZV9pbmZvKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgbmV0c25tcF90YWJsZV9idWlsZF9vaWRfZnJvbV9pbmRleChuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCkBAIC0xNDcsNiArMTUyLDEwIEBACiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbwogICAgICAgICAqbmV0c25tcF9maW5kX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbyk7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fY2xvbmUobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdHJpKTsKKyAgICB2b2lkIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZShuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICopOworCiAgICAgbmV0c25tcF9pbmRleCAqIG5ldHNubXBfdGFibGVfaW5kZXhfZmluZF9uZXh0X3JvdyhuZXRzbm1wX2NvbnRhaW5lciAqYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YmxyZXEpOwogCkBAIC0xNTgsMTMgKzE2Nyw5IEBACiAKICNkZWZpbmUgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4KHRpbmZvLCB0eXBlKSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ0aW5mby0+aW5kZXhlcywgTlVMTCwgMCwgKHVfY2hhcil0eXBlLCBOVUxMLCAwKTsKIAotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2b2lkICAgICAgICAgICAKICAgICAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXMobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGluZm8sIC4uLik7Ci0jZWxzZQotICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh2YV9hbGlzdCk7Ci0jZW5kaWYKIAogICAgIGludCBuZXRzbm1wX2NoZWNrX2dldG5leHRfcmVwbHkobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBwcmVmaXgsIHNpemVfdCBwcmVmaXhfbGVuLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKaW5kZXggZDUxYWNiMS4uYjM0MjExMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCkBAIC01Miw2ICs1Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFicmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBrZXlfdHlwZSk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfdW5yZWdpc3RlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKTsKICAgICAKICAgICAvKiogcmV0cmlldmUgdGhlIGNvbnRhaW5lciB1c2VkIGJ5IHRoZSB0YWJsZV9jb250YWluZXIgaGVscGVyICovCiAgICAgbmV0c25tcF9jb250YWluZXIqCkBAIC04Nyw2ICs4OSw4IEBACiAKICAgICB2b2lkIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19pbnNlcnQobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaW5kZXggKnJvdyk7CisgICAgdm9pZCBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfcmVtb3ZlKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2luZGV4ICAgICAgICAqcm93KTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIENvbnRhaW5lciBUYWJsZSBBUEk6IFJvdyBvcGVyYXRpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCmluZGV4IGNjMjZlYjYuLjY2ZTNiM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCkBAIC0xMTMsMTIgKzExMyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgKmRlZmF1bHRfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVmYXVsdF92YWx1ZV9sZW4pOwotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2b2lkIG5ldHNubXBfdGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdyhuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwotI2Vsc2UKLSAgICB2b2lkIG5ldHNubXBfdGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3Jvdyh2YV9hbGlzdCk7Ci0jZW5kaWYKIAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMzYsNiArMTMyLDE2IEBACiAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlCiAgICAgICAgICpuZXRzbm1wX2V4dHJhY3RfdGFibGVfZGF0YV9zZXRfY29sdW1uKG5ldHNubXBfcmVxdWVzdF9pbmZvICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCk7CisgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKgorICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9nZXRfb3JfY3JlYXRlX3N0YXNoKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmkpOworICAgIG5ldHNubXBfdGFibGVfcm93ICoKKyAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZ2V0X25ld3JvdyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9vdG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqZGF0YXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvKTsKIAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNDQsNiArMTUwLDggQEAKIAogICAgIHZvaWQgbmV0c25tcF9yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUobmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVnaXN0cmF0aW9uX25hbWUpOworICAgIHZvaWQgbmV0c25tcF91bnJlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZShuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQsCisJCQkJCSAgICBjaGFyICpyZWdpc3RyYXRpb25fbmFtZSk7CiAgICAgdm9pZCBuZXRzbm1wX2NvbmZpZ19wYXJzZV90YWJsZV9zZXQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOwogICAgIHZvaWQgbmV0c25tcF9jb25maWdfcGFyc2VfYWRkX3JvdyggIGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKIApAQCAtMTc3LDExICsxODUsNyBAQAogCiAgICAgdm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX2luZGV4KG5ldHNubXBfdGFibGVfZGF0YV9zZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFibGUsIHVfY2hhciB0eXBlKTsKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdm9pZCBuZXRzbm1wX3RhYmxlX3NldF9hZGRfaW5kZXhlcyhuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0c2V0LCAuLi4pOwotI2Vsc2UKLSAgICB2b2lkIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHZhX2FsaXN0KTsKLSNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAppbmRleCA4Y2RiMWU3Li5jNzFkZDRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCkBAIC01MSw2ICs1MSw5IEBACiAgICAgICAgVGhlIG5ldHNubXBfaXRlcmF0b3JfaW5mbyB0eXBlZGVmIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZyB0aGlzIHN0cnVjdCBpZiB5b3Ugd291bGQgcHJlZmVyLgogICAgICAqLwogICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfaXRlcmF0b3JfaW5mb19zIHsKKyAgICAgICAvKiogTnVtYmVyIG9mIGhhbmRsZXJzIHRoYXQgb3duIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuICovCisgICAgICAgaW50IHJlZmNudDsKKwogICAgICAgIC8qKiBSZXNwb25zaWJsZSBmb3I6IHJldHVybmluZyB0aGUgZmlyc3Qgc2V0IG9mICJpbmRleCIgZGF0YSwgYQogICAgICAgICAgICBsb29wLWNvbnRleHQgcG9pbnRlciwgYW5kIG9wdGlvbmFsbHkgYSBkYXRhIGNvbnRleHQKICAgICAgICAgICAgcG9pbnRlciAqLwpAQCAtOTQsNiArOTcsNyBAQAogICAgICAgICB2b2lkICAgICAgICAgICAqbXl2b2lkOwogICAgICAgICBpbnQgICAgICAgICAgICAgZmxhZ3M7CiAjZGVmaW5lIE5FVFNOTVBfSVRFUkFUT1JfRkxBR19TT1JURUQJMHgwMQorI2RlZmluZSBORVRTTk1QX0hBTkRMRVJfT1dOU19JSU5GTwkweDAyCiAKICAgICAgICAvKiogQSBwb2ludGVyIHRvIHRoZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdAogICAgICAgICAgICB0aGlzIGl0ZXJhdG9yIGlzIHJlZ2lzdGVyZWQgYWxvbmcgd2l0aC4gKi8KQEAgLTExNiwxMSArMTIwLDExIEBACiAgKiBJdGVyYXRvciBBUEk6IE1JQiBtYWludGVuYW5jZQogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisgICAgdm9pZCAgIG5ldHNubXBfaGFuZGxlcl9vd25zX2l0ZXJhdG9yX2luZm8obmV0c25tcF9taWJfaGFuZGxlciAqaCk7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlcgogICAgICAgICAgICpuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcl9oYW5kbGVyKG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8pOwotICAgIGludCAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKCAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbyk7CisgICAgaW50IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvKTsKICAgICB2b2lkICBuZXRzbm1wX2l0ZXJhdG9yX2RlbGV0ZV90YWJsZShuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvKTsKIAogICAgIHZvaWQgKm5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0KG5ldHNubXBfcmVxdWVzdF9pbmZvICopOwpAQCAtMTI4LDYgKzEzMiwxMCBAQAogCiAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgbmV0c25tcF90YWJsZV9pdGVyYXRvcl9oZWxwZXJfaGFuZGxlcjsKIAorI2RlZmluZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihyZWdpbmZvLCBpaW5mbykgICAgICAgIFwKKyAgICAoKChpaW5mbyktPmZsYWdzIHw9IE5FVFNOTVBfSEFORExFUl9PV05TX0lJTkZPKSwgICAgICAgICAgIFwKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcigocmVnaW5mbyksIChpaW5mbykpKQorCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEl0ZXJhdG9yIEFQSTogUm93IG9wZXJhdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAppbmRleCAyNDJiMTU5Li5iMGExNjg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFRBQkxFX1REQVRBX1RBQkxFICJ0YWJsZV90ZGF0YV90YWJsZSIKIAogI2RlZmluZSBUREFUQV9GTEFHX05PX1NUT1JFX0lOREVYRVMgICAweDAxCisjZGVmaW5lIFREQVRBX0ZMQUdfTk9fQ09OVEFJTkVSICAgICAgIDB4MDIgLyogdXNlciB3aWxsIHByb3ZpZGUgY29udGFpbmVyICovCiAKICAgICAvKgogICAgICAqIFRoZSAodGFibGUtaW5kZXBlbmRlbnQpIHBlci1yb3cgZGF0YSBzdHJ1Y3R1cmUKQEAgLTgzLDkgKzg0LDEwIEBACiAKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpuZXRzbm1wX2dldF90ZGF0YV9oYW5kbGVyKG5ldHNubXBfdGRhdGEgKnRhYmxlKTsKIAotICAgIGludCBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YSAgICAgICAgICAgICAgICAqdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyk7CisgICAgaW50IG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIoICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YSAgICAgICAgICAgICAgICAgICAqdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvKTsKKyAgICBpbnQgbmV0c25tcF90ZGF0YV91bnJlZ2lzdGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZ2luZm8pOwogCiAgICAgbmV0c25tcF90ZGF0YSAgICAgICpuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUoICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICopOwogICAgIG5ldHNubXBfY29udGFpbmVyICAqbmV0c25tcF90ZGF0YV9leHRyYWN0X2NvbnRhaW5lcihuZXRzbm1wX3JlcXVlc3RfaW5mbyAqKTsKQEAgLTkzLDYgKzk1LDcgQEAKICAgICB2b2lkICAgICAgICAgICAgICAgKm5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeSggICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKik7CiAKICAgICB2b2lkIG5ldHNubXBfaW5zZXJ0X3RkYXRhX3JvdyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqLCBuZXRzbm1wX3RkYXRhX3JvdyAqKTsKKyAgICB2b2lkIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqLCBuZXRzbm1wX3RkYXRhX3JvdyAqKTsKIAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCmluZGV4IDQzYTE5ZDcuLjY3MTA0ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCkBAIC04LDYgKzgsMTAgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKy8qKiBAaW5ncm91cCB3YXRjaGVyCisgKiAgQHsKKyAqLworCiAvKgogICogaWYgaGFuZGxlciBmbGFnIGhhcyB0aGlzIGJpdCBzZXQsIHRoZSB0aW1lc3RhbXAgd2lsbCBiZQogICogdHJlYXRlZCBhcyBhIHBvaW50ZXIgdG8gdGhlIHRpbWVzdGFtcC4gSWYgdGhpcyBiaXQgaXMKQEAgLTE2LDggKzIwLDM2IEBACiAgKi8KICNkZWZpbmUgTkVUU05NUF9XQVRDSEVSX0RJUkVDVCBNSUJfSEFORExFUl9DVVNUT00xCiAKLSNkZWZpbmUgV0FUQ0hFUl9GSVhFRF9TSVpFICAgIDB4MDEKLSNkZWZpbmUgV0FUQ0hFUl9NQVhfU0laRSAgICAgIDB4MDIKKy8qKiBUaGUgc2l6ZSBvZiB0aGUgd2F0Y2hlZCBvYmplY3QgaXMgY29uc3RhbnQuCisgKiAgQGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIFdBVENIRVJfRklYRURfU0laRSAgICAgMHgwMQorLyoqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdhdGNoZWQgb2JqZWN0IGlzIHN0b3JlZCBpbiBtYXhfc2l6ZS4KKyAqICBJZiBXQVRDSEVSX1NJWkVfU1RSTEVOIGlzIHNldCB0aGVuIGl0IGlzIHN1cHBvc2VkIHRoYXQgbWF4X3NpemUgKyAxCisgKiAgYnl0ZXMgY291bGQgYmUgc3RvcmVkIGluIHRoZSBidWZmZXIuCisgKiAgQGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIFdBVENIRVJfTUFYX1NJWkUgICAgICAgMHgwMgorLyoqIElmIHNldCB0aGVuIHRoZSB2YXJpYWJsZSBkYXRhX3NpemVfcCBwb2ludHMgdG8gaXMgc3VwcG9zZWQgdG8gaG9sZCB0aGUKKyAqICBjdXJyZW50IHNpemUgb2YgdGhlIHdhdGNoZWQgb2JqZWN0IGFuZCB3aWxsIGJlIHVwZGF0ZWQgb24gd3JpdGVzLgorICogIEBoaWRlaW5pdGlhbGl6ZXIKKyAqICBAc2luY2UgTmV0LVNOTVAgNS41CisgKi8KKyNkZWZpbmUgV0FUQ0hFUl9TSVpFX0lTX1BUUiAgICAweDA0CisvKiogSWYgc2V0IHRoZW4gZGF0YSBpcyBzdXBwcG9zZWQgdG8gYmUgYSB6ZXJvLXRlcm1pbmF0ZWQgY2hhcmFjdGVyIGFycmF5CisgKiAgYW5kIGJvdGggZGF0YV9zaXplIGFuZCBkYXRhX3NpemVfcCBhcmUgaWdub3JlZC4gQWRkaXRpb25hbGx5IFxcMCBpcyBhCisgKiAgZm9yYmlkZGVuIGNoYXJhY3RlciBpbiB0aGUgZGF0YSBzZXQuCisgKiAgQGhpZGVpbml0aWFsaXplcgorICogIEBzaW5jZSBOZXQtU05NUCA1LjUKKyAqLworI2RlZmluZSBXQVRDSEVSX1NJWkVfU1RSTEVOICAgIDB4MDgKKy8qKiBJZiBzZXQgdGhlbiBzaXplIGlzIGluIHVuaXRzIG9mIG9iamVjdCBpZGVudGlmaWVycy4KKyAqICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSBhbiBPSUQgYW5kIHRyYWNrcyB0aGUgT0lEX0xFTkdUSCBvZiBpdCBhcworICogIG9wcG9zZWQgdG8gaXQncyBzaXplLgorICogIEBoaWRlaW5pdGlhbGl6ZXIKKyAqICBAc2luY2UgTmV0LVNOTVAgNS41LjEKKyAqLworI2RlZmluZSBXQVRDSEVSX1NJWkVfVU5JVF9PSURTIDB4MTAKIAogdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF93YXRjaGVyX2luZm9fcyB7CiAgICAgdm9pZCAgICAgKmRhdGE7CkBAIC0yNSwxMiArNTcsMTkgQEAKICAgICBzaXplX3QgICAgbWF4X3NpemU7CiAgICAgdV9jaGFyICAgIHR5cGU7CiAgICAgaW50ICAgICAgIGZsYWdzOworICAgIHNpemVfdCAgICpkYXRhX3NpemVfcDsKIH0gbmV0c25tcF93YXRjaGVyX2luZm87CiAKKy8qKiBAfSAqLworCiBpbnQgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlKCBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2luZm8pOworaW50IG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgKndpbmZvKTsKIGludCBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKCAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3aW5mbyk7CitpbnQgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIoICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2luZm8pOwogaW50IG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF90aW1lc3RhbXAobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcl90IHRpbWVzdGFtcCk7CiBpbnQgbmV0c25tcF93YXRjaGVkX3RpbWVzdGFtcF9yZWdpc3RlcihuZXRzbm1wX21pYl9oYW5kbGVyICp3aGFuZGxlciwKQEAgLTQ0LDM4ICs4Myw1NiBAQAogICovCiAKIGludCBuZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogaW50IG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogaW50IG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiBpbnQgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiBpbnQgbmV0c25tcF9yZWdpc3Rlcl9pbnRfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiBpbnQgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogaW50IG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIAogI2RlZmluZSBXQVRDSEVSX0hBTkRMRVJfTkFNRSAid2F0Y2hlciIKIAogbmV0c25tcF9taWJfaGFuZGxlciAgKm5ldHNubXBfZ2V0X3dhdGNoZXJfaGFuZGxlcih2b2lkKTsKLW5ldHNubXBfd2F0Y2hlcl9pbmZvICpuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8odm9pZCAqLCBzaXplX3QsIHVfY2hhciwgaW50KTsKKworbmV0c25tcF93YXRjaGVyX2luZm8gKgorbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbyhuZXRzbm1wX3dhdGNoZXJfaW5mbyAqLCB2b2lkICosIHNpemVfdCwgdV9jaGFyLCBpbnQpOworCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvNihuZXRzbm1wX3dhdGNoZXJfaW5mbyAqLAorCQkJICAgdm9pZCAqLCBzaXplX3QsIHVfY2hhciwgaW50LCBzaXplX3QsIHNpemVfdCopOworCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8odm9pZCAqLCBzaXplX3QsIHVfY2hhciwgaW50KTsKKworbmV0c25tcF93YXRjaGVyX2luZm8gKgorbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvNih2b2lkICosIHNpemVfdCwgdV9jaGFyLCBpbnQsIHNpemVfdCwgc2l6ZV90Kik7CisKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfY2xvbmVfd2F0Y2hlcl9pbmZvKG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbyk7Cit2b2lkCituZXRzbm1wX293bnNfd2F0Y2hlcl9pbmZvKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIpOworCiBOZXRzbm1wX05vZGVfSGFuZGxlciAgbmV0c25tcF93YXRjaGVyX2hlbHBlcl9oYW5kbGVyOwogCiBuZXRzbm1wX21pYl9oYW5kbGVyICAqbmV0c25tcF9nZXRfd2F0Y2hlZF90aW1lc3RhbXBfaGFuZGxlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKaW5kZXggNjdjZDZhNC4uMDQ4ZWVkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKQEAgLTgsMTQgKzgsODQgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qIENvbmZpZyBIYW5kbGVycyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICpmaWxlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2FnZUxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICpmaWxlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNhZ2VMaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcihjb25zdCBjaGFyICpmaWxlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2FnZUxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqZmlsZVByZWZpeCwgY29uc3QgY2hhciAqdG9rZW4pOworCisgICAgCQkJCS8qIERlZmluZWQgaW4gbWliLmMsIHJhdGhlciB0aGFuIHJlYWRfY29uZmlnLmMgKi8KKyAgICB2b2lkICAgICAgICAgICAgcmVnaXN0ZXJfbWliX2hhbmRsZXJzKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnModm9pZCk7CisKKyAgICAvKiBBcHBsaWNhdGlvbiBIYW5kbGVycyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzYWdlTGluZSk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzYWdlTGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbik7CisKKyAgICAvKiBSZWFkaW5nIENvbmZpZyBGaWxlcyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHJlYWRfY29uZmlncyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICByZWFkX3ByZW1pYl9jb25maWdzKHZvaWQpOworCisgICAgLyogSGVscCBTdHJpbmdzIGFuZCBFcnJvcnMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICByZWFkX2NvbmZpZ19wcmludF91c2FnZShjb25zdCBjaGFyICpsZWFkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBjb25maWdfcGVycm9yKGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgY29uZmlnX3B3YXJuKGNvbnN0IGNoYXIgKik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKICAgICAvKgotICAgICAqICBGb3IgdGhlIGluaXRpYWwgcmVsZWFzZSwgdGhpcyB3aWxsIGp1c3QgcmVmZXIgdG8gdGhlCi0gICAgICogIHJlbGV2YW50IFVDRCBoZWFkZXIgZmlsZXMuCi0gICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlIHJvdXRpbmVzIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUKLSAgICAgKiAgQVBJIHdpbGwgYmUgaWRlbnRpZmllZCwgYW5kIGxpc3RlZCBoZXJlIGRpcmVjdGx5LgorICAgICAqICAgIEhhdmluZyBleHRyYWN0ZWQgdGhlIG1haW4gKCJwdWJsaWMgQVBJIikgY2FsbHMgcmVsZXZhbnQKKyAgICAgKiAgdG8gdGhpcyBhcmVhIG9mIHRoZSBOZXQtU05NUCBwcm9qZWN0LCB0aGUgbmV4dCBzdGVwIGlzIHRvCisgICAgICogIGlkZW50aWZ5IHRoZSByZWxhdGVkICJwdWJsaWMgaW50ZXJuYWwgQVBJIiByb3V0aW5lcy4KICAgICAgKgotICAgICAqICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGhlYWRlciBmaWxlIGlzIGEgcGxhY2Vob2xkZXIsCi0gICAgICogIHRvIGFsbG93IGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8gYWRvcHQgdGhlIG5ldyBoZWFkZXIgZmlsZSBuYW1lcy4KKyAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgZ2F0aGVyZWQKKyAgICAgKiAgdG9nZXRoZXIgaW50byBhIGNvbXBhbmlvbiAnbGlicmFyeS9jb25maWdfYXBpLmgnIGhlYWRlciBmaWxlLgorICAgICAqICBbT3Igc29tZSBzdWl0YWJsZSBuYW1lXQorICAgICAqCisgICAgICogICAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlCisgICAgICogIHRyYWRpdGlvbmFsIGhlYWRlcnMgdGhhdCBwcm92aWRlZCB0aGUgYWJvdmUgZGVmaW5pdGlvbnMKKyAgICAgKiAgd2lsbCBwcm9iYWJseSBhbHNvIGNvdmVyIHRoZSByZWxldmFudCBpbnRlcm5hbCBBUEkgY2FsbHMuCisgICAgICogIEhlbmNlIHRoZXkgYXJlIGxpc3RlZCBoZXJlOgogICAgICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgKaW5kZXggNGM2YmFlMy4uYmE0YmIyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oCkBAIC03Myw2ICs3Myw3IEBACiAKICAgIGludCAgICAgICBmbGFnczsgLyogZm9yIG5ldC1zbm1wIHVzZSAqLwogCisgICB1bnNpZ25lZCAgZ2VuZXJhdGlvbjsKICAgIG9pZCAgICAgICBpZl9pbmRleDsKIAogICAgdV9jaGFyICAgIGFycF9waHlzYWRkcmVzc1tORVRTTk1QX0FDQ0VTU19BUlBfUEhZU0FERFJfQlVGX1NJWkVdOwpAQCAtODMsMzMgKzg0LDQyIEBACiAgICB1X2NoYXIgICAgYXJwX3R5cGU7ICAgICAgICAgICAvKiBpbmV0TmV0VG9NZWRpYVR5cGUgMS01ICovCiAgICB1X2NoYXIgICAgYXJwX3N0YXRlOyAgICAgICAgICAvKiBpbmV0TmV0VG9NZWRpYVN0YXRlIDEtNyAqLwogCisgICB1X2xvbmcgICAgYXJwX2xhc3RfdXBkYXRlZDsgICAvKiB0aW1ldGlja3Mgb2YgbGFzdCB1cGRhdGUgKi8KIH0gbmV0c25tcF9hcnBfZW50cnk7CiAKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfQVJQX0VOVFJZX0ZMQUdfREVMRVRFICAgICAgMHgwMDAwMDAwMQogCiAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIEFDQ0VTUyBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKi8KLS8qCi0gKiBpZmNvbnRhaW5lciBpbml0Ci0gKi8KLW5ldHNubXBfY29udGFpbmVyICogbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9pbml0KHVfaW50IGluaXRfZmxhZ3MpOwotI2RlZmluZSBORVRTTk1QX0FDQ0VTU19BUlBfSU5JVF9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCitzdHJ1Y3QgbmV0c25tcF9hcnBfYWNjZXNzX3M7Cit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2FycF9hY2Nlc3NfcyBuZXRzbm1wX2FycF9hY2Nlc3M7CiAKLS8qCi0gKiBpZmNvbnRhaW5lciBsb2FkIGFuZCBmcmVlCi0gKi8KLW5ldHNubXBfY29udGFpbmVyKgotbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKLSNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfQVJQX0xPQURfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAordHlwZWRlZiB2b2lkIChOZXRzbm1wQWNjZXNzQXJwVXBkYXRlKShuZXRzbm1wX2FycF9hY2Nlc3MgKiwgbmV0c25tcF9hcnBfZW50cnkqKTsKK3R5cGVkZWYgdm9pZCAoTmV0c25tcEFjY2Vzc0FycEdDKSAgICAobmV0c25tcF9hcnBfYWNjZXNzICopOwogCi12b2lkIG5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBmcmVlX2ZsYWdzKTsKLSNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAotI2RlZmluZSBORVRTTk1QX0FDQ0VTU19BUlBfRlJFRV9ET05UX0NMRUFSICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0FSUF9GUkVFX0tFRVBfQ09OVEFJTkVSICAgICAgICAweDAwMDIKK3N0cnVjdCBuZXRzbm1wX2FycF9hY2Nlc3NfcyB7CisgICAgdm9pZCAqbWFnaWM7CisgICAgdm9pZCAqYXJjaF9tYWdpYzsKKyAgICBpbnQgc3luY2hyb25pemVkOworICAgIHVuc2lnbmVkIGdlbmVyYXRpb247CisgICAgTmV0c25tcEFjY2Vzc0FycFVwZGF0ZSAqdXBkYXRlX2hvb2s7CisgICAgTmV0c25tcEFjY2Vzc0FycEdDICpnY19ob29rOworICAgIGNoYXIgKmNhY2hlX2V4cGlyZWQ7Cit9OwogCituZXRzbm1wX2FycF9hY2Nlc3MgKgorbmV0c25tcF9hY2Nlc3NfYXJwX2NyZWF0ZSh1X2ludCBpbml0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQWNjZXNzQXJwVXBkYXRlICp1cGRhdGVfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycEdDICpnY19ob29rLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNhY2hlX3RpbWVvdXQsIGludCAqY2FjaGVfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNhY2hlX2V4cGlyZWQpOworI2RlZmluZSBORVRTTk1QX0FDQ0VTU19BUlBfQ1JFQVRFX05PRkxBR1MgICAgICAgICAgICAgMHgwMDAwCisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfZGVsZXRlKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKTsKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfbG9hZChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2Vzcyk7CitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX3VubG9hZChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2Vzcyk7CiAKIC8qCiAgKiBjcmVhdGUvZnJlZSBhIGFycCtlbnRyeQpAQCAtMTE5LDYgKzEyOSw5IEBACiAKIHZvaWQgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2ZyZWUobmV0c25tcF9hcnBfZW50cnkgKiBlbnRyeSk7CiAKK3ZvaWQgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X3VwZGF0ZShuZXRzbm1wX2FycF9lbnRyeSAqZW50cnksCisgICAgICAgIG5ldHNubXBfYXJwX2VudHJ5ICpuZXdfZGF0YSk7CisKIC8qCiAgKiBmaW5kIGVudHJ5IGluIGNvbnRhaW5lcgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYWMxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIGRlZmF1bHRyb3V0ZXIgZGF0YSBhY2Nlc3MgaGVhZGVyCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0gKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9ICisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogc3RydWN0dXJlIGRlZmluaXRpb25zCisgKi8KKyNpZiBkZWZpbmVkKCBORVRTTk1QX0VOQUJMRV9JUFY2ICkKKyMgICBkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9CVUZfU0laRSAxNiAgIC8qIFhYWDogMjAsIGZvciBpcDZ6PyAqLworI2Vsc2UKKyMgICBkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9CVUZfU0laRSA0CisjZW5kaWYKKworCisvKgorICogbmV0c25tcF9kZWZhdWx0X3JvdXRlX2VudHJ5CisgKi8KK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfZGVmYXVsdHJvdXRlcl9zIHsKKworICAgIG5ldHNubXBfaW5kZXggb2lkX2luZGV4OyAgIC8qIE1VU1QgQkUgRklSU1QhISBmb3IgY29udGFpbmVyIHVzZSAqLworICAgIG9pZCAgICAgICAgICAgbnNfZHJfaW5kZXg7IC8qIGFyYml0cmFyeSBpbmRleCAqLworCisgICAgaW50ICAgICAgZmxhZ3M7IC8qIGZvciBuZXQtc25tcCB1c2UgKi8KKworICAgIC8qCisgICAgICogbWliIHJlbGF0ZWQgZGF0YQorICAgICAqLworICAgIHVfY2hhciAgIGRyX2FkZHJlc3N0eXBlOyAgICAvKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSAqLworICAgIGNoYXIgICAgIGRyX2FkZHJlc3NbTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9CVUZfU0laRV07IC8qIGlwRGVmYXVsdFJvdXRlckFkZHJlc3MgKi8KKyAgICBzaXplX3QgICBkcl9hZGRyZXNzX2xlbjsgICAgLyogbGVuZ3RoIG9mIGlwRGVmYXVsdFJvdXRlckFkZHJlc3MgKi8KKyAgICBvaWQgICAgICBkcl9pZl9pbmRleDsgICAgICAgLyogaXBEZWZhdWx0Um91dGVySWZJbmRleCAqLworICAgIHVpbnQzMl90IGRyX2xpZmV0aW1lOyAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSAoMC02NTUzNSkgKi8KKyAgICBjaGFyICAgICBkcl9wcmVmZXJlbmNlOyAgICAgLyogaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZSAoLTIsLTEsMCwxKSAqLworCit9IG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeTsKKworCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIEFDQ0VTUyBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KKy8qCisgKiBjb250YWluZXIgaW5pdAorICovCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9pbml0KHVfaW50IGZsYWdzKTsKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9JTklUX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9JTklUX0FERExfSURYX0JZX0FERFIgICAgICAweDAwMDEKKworLyoKKyAqIGNvbnRhaW5lciBsb2FkCisgKi8KK25ldHNubXBfY29udGFpbmVyKgorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9MT0FEX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9MT0FEX0lQVjRfT05MWSAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9MT0FEX0lQVjZfT05MWSAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9MT0FEX0FERExfSURYX0JZX0FERFIgICAgICAweDAwMDQKKworLyoKKyAqIGNvbnRhaW5lciBmcmVlCisgKi8KK3ZvaWQKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgZnJlZV9mbGFncyk7CisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9ET05UX0NMRUFSICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9LRUVQX0NPTlRBSU5FUiAgICAgICAgMHgwMDAyCisKKy8qCisgKiBlbnRyeSBjcmVhdGUKKyAqLworbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICoKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY3JlYXRlKHZvaWQpOworCisvKgorICogZW50cnkgbG9hZAorICovCitpbnQKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfbG9hZChzaXplX3QgKm51bV9lbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqKmVudHJpZXMpOworCisvKgorICogZW50cnkgdXBkYXRlCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV91cGRhdGUobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKnJocyk7CisKKy8qCisgKiBlbnRyeSBmcmVlCisgKi8KK3ZvaWQKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmVudHJ5KTsKKworCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAppbmRleCA1M2RmYjM2Li4yMDAxM2VkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKQEAgLTM0LDYgKzM0LDIwIEBACiAjZGVmaW5lIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19WNl9SRUFDSEFCTEUgICAgICAgIDB4MDAwNDAwMDAKICNkZWZpbmUgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX1Y2X0lGSUQgICAgICAgICAgICAgMHgwMDA4MDAwMAogI2RlZmluZSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfVjZfRk9SV0FSRElORyAgICAgICAweDAwMTAwMDAwCisvKiBTb21lIHBsYXRmb3JtcywgZS5nLkxpbnV4LCBkbyBub3QgcHJvdmlkZSBzdGFuZGFsb25lIGNvdW50ZXIKKyAqIGZvciBpbmNvbWluZyB1bmljYXN0IHBhY2tldHMgLSB0aGV5IHByb3ZpZGUgY291bnRlciBvZiBhbGwgcGFja2V0cworICogKyBzZXBhcmF0ZSBjb3VudGVyIGZvciB0aGUgbXVsdGljYXN0IG9uZXMuCisgKiBUaGF0IG1lYW5zIHRoZSBjb3VudGVyIG9mIGFsbCBwYWNrZXRzIG11c3Qgd2F0Y2hlZCBhbmQgY2hlY2tlZAorICogZm9yIG92ZXJmbG93cyB0byByZWNvbnN0cnVjdCBpdHMgNjQtYml0IHZhbHVlIChpLmUuIGFzIHVzdWFsCisgKiBmb3IgY291bnRlciBvZiB1bmljYXN0IHBhY2tldHMpLCBhbmQgYWZ0ZXIgaXRzIGV4cGFuc2lvbiB0byA2NC1iaXRzLAorICogbnIub2YgbXVsdGljYXN0IHBhY2tldHMgbXVzdCBiZSBzdWJzdHJhY3RlZCB0byBnZXQgbnIuIG9mIHVuaWNhc3QKKyAqIHBhY2tldHMuCisgKiBUaGlzIGZsYWcgbWFya3Mgc3RhdHMgb2Ygc3VjaCBwbGF0Zm9ybXMuIE5yLiBvZiBhbGwgaW5jb21pbmcgcGFja2V0cywKKyAqIHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSwgbXVzdCBiZSBzdG9yZWQgaW4KKyAqIG5ldHNubXBfaW50ZXJmYWNlX3N0YXRzLmlhbGwgYW5kIG5ldHNubXBfaW50ZXJmYWNlX3N0YXRzLml1Y2FzdCB3aWxsCisgKiBiZSBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgbGF0ZXIuCisgKi8KKyNkZWZpbmUgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfQ0FMQ1VMQVRFX1VDQVNUICAgICAgICAgMHgwMDIwMDAwMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCkBAIC05Myw2ICsxMDcsMTEgQEAKICAgICAgKi8KICAgIC8qKiBpbnB1dCAqLwogICAgIHN0cnVjdCBjb3VudGVyNjQgaWJ5dGVzOworICAgIC8qCisgICAgICogbnIuIG9mIGFsbCBwYWNrZXRzICh0byBjYWxjdWxhdGUgaXVjYXN0LCB3aGVuIHVuZGVybHlpbmcgcGxhdGZvcm0gZG9lcworICAgICAqIG5vdCBwcm92aWRlIGl0KQorICAgICAqLworICAgIHN0cnVjdCBjb3VudGVyNjQgaWFsbDsKICAgICBzdHJ1Y3QgY291bnRlcjY0IGl1Y2FzdDsKICAgICBzdHJ1Y3QgY291bnRlcjY0IGltY2FzdDsKICAgICBzdHJ1Y3QgY291bnRlcjY0IGliY2FzdDsKQEAgLTE3OSw3ICsxOTgsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX2NvbmZfaWZfbGlzdCB7CiAgICAgY29uc3QgY2hhciAgICAgKm5hbWU7CiAgICAgaW50ICAgICAgICAgICAgIHR5cGU7Ci0gICAgdWludDY0X3QgICAgICAgIHNwZWVkOworICAgIHVpbnQ2NF90IHNwZWVkOwogICAgIHN0cnVjdCBfY29uZl9pZl9saXN0ICpuZXh0OwogfSBuZXRzbm1wX2NvbmZfaWZfbGlzdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaAppbmRleCAyNTE5MWZlLi4wMzYwMWEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaApAQCAtNSwxMCArNSwxNyBAQAogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAotaW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcEZvcndhcmRpbmdfZ2V0KHVfbG9uZyAqdmFsdWUpOworaW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSk7CitpbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX3NldCh1X2xvbmcgdmFsdWUpOwogCitpbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBEZWZhdWx0VFRMX2dldCh1X2xvbmcgKnZhbHVlKTsKK2ludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfc2V0KHVfbG9uZyB2YWx1ZSk7CisKK2ludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBGb3J3YXJkaW5nX2dldCh1X2xvbmcgKnZhbHVlKTsKIGludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBGb3J3YXJkaW5nX3NldCh1X2xvbmcgdmFsdWUpOwogCitpbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRGVmYXVsdEhvcExpbWl0X2dldCh1X2xvbmcgKnZhbHVlKTsKK2ludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBEZWZhdWx0SG9wTGltaXRfc2V0KHVfbG9uZyB2YWx1ZSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgKaW5kZXggNmI1MTUxOS4uMGJmZjEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oCkBAIC00Nyw3ICs0NywxMCBAQAogICAgdV9jaGFyICAgIGlhX3N0YXR1czsgICAgIC8qIElwQWRkcmVzc1N0YXR1cyAoMS03KSAqLwogICAgdV9jaGFyICAgIGlhX29yaWdpbjsgICAgIC8qIElwQWRkcmVzc09yaWdpbiAoMS02KSAqLwogICAgdV9jaGFyICAgIGlhX3N0b3JhZ2V0eXBlOyAvKiBJcEFkZHJlc3NTdG9yYWdlVHlwZSAoMS01KSAqLwotCisgICB1X2NoYXIgICAgaWFfb25saW5rX2ZsYWc7IC8qIElwT25saW5rRmxhZyAqLworICAgdV9jaGFyICAgIGlhX2F1dG9ub21vdXNfZmxhZzsgLypJcEF1dG9ub21vdXNGbGFnICovCisgICB1X2xvbmcgICAgaWFfcHJlZmVyZWRfbGlmZXRpbWU7LypJcFByZWZlcmVkTGlmZVRpbWUqLworICAgdV9sb25nICAgIGlhX3ZhbGlkX2xpZmV0aW1lOy8qSXBWYWxpZExpZmVUaW1lKi8KICAgIG5ldHNubXBfZGF0YV9saXN0ICphcmNoX2RhdGE7ICAgICAgLyogYXJjaCBzcGVjaWZpYyBkYXRhICovCiAKIH0gbmV0c25tcF9pcGFkZHJlc3NfZW50cnk7CkBAIC0xNDEsOCArMTQ0LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkZHJfbGVuLCBpbnQgcGZ4X2xlbik7CiAKIGludCBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4oaW5fYWRkcl90IG1hc2spOworaW5fYWRkcl90IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfbWFzayhpbnQgbGVuKTsKK2ludCBuZXRzbm1wX2lwYWRkcmVzc19pcHY2X3ByZWZpeF9sZW4oc3RydWN0IGluNl9hZGRyIG1hc2spOwogCitpbnQgbmV0c25tcF9pcGFkZHJlc3NfZmxhZ3NfY29weSh1X2xvbmcgKmlwQWRkcmVzc1ByZWZpeEFkdlByZWZlcnJlZExpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaWFfcHJlZmVyZWRfbGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlhX3ZhbGlkX2xpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICppYV9vbmxpbmtfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqaWFfYXV0b25vbW91c19mbGFnKTsKIAoraW50IG5ldHNubXBfaXBhZGRyZXNzX3ByZWZpeF9vcmlnaW5fY29weSh1X2xvbmcgKmlwQWRkcmVzc1ByZWZpeE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIGlhX29yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBBZGRyZXNzQWRkclR5cGUpOwogCiAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oCmluZGV4IDIxNjE0NDUuLmY3ODI0NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oCkBAIC0xMCw2ICsxMCw0MCBAQAogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTICAgICAgIDEKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFMgICAgICAgICAyCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SUyAgICAgICAgMworI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk5PUk9VVEVTICAgICAgIDQgCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlMgICAgICAgNQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSU5VTktOT1dOUFJPVE9TICAgIDYKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0lOVFJVTkNBVEVEUEtUUyAgICA3CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNUyAgOCAKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNUkVRRFMgICAgICAgICA5CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LUyAgICAgICAgICAgMTAKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNRkFJTFMgICAgICAgICAxMQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEUyAgICAgICAgIDEyCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlMgICAgICAgMTMKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFMgICAgICAxNAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVROT1JPVVRFUyAgICAgIDE1CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVMgMTYKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFMgICAgICAxNworI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHUkVRRFMgICAgIDE4CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1MgICAgICAgMTkKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTICAgICAyMAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFUyAgIDIxCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFRSQU5TTUlUUyAgICAgMjIKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUT0NURVRTICAgICAgICAyMworI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUUyAgICAgIDI0CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFMgICAgMjUKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTICAgICAyNgorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUUyAgIDI3CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOQkNBU1RQS1RTICAgICAgMjgKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUQkNBU1RQS1RTICAgICAyOQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfRElTQ09OVElOVUlUWVRJTUUgIDMwCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURSAgICAgICAgMzEKKyAgICAKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0xBU1QgSVBTWVNURU1TVEFUU1RBQkxFX1JFRlJFU0hSQVRFCisgICAgCiAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIHN0cnVjdHVyZSBkZWZpbml0aW9ucwpAQCAtMjAsMjggKzU0LDQyIEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfaXBzdGF0c19zIHsKIAorICAgLyogQ29sdW1ucyBvZiBpcFN0YXRzVGFibGUuIFNvbWUgb2YgdGhlbSBhcmUgSEMgZm9yIGNvbXB1dGF0aW9uIG9mIHRoZSAKKyAgICAqIG90aGVyIGNvbHVtbnMsIHdoZW4gdW5kZXJseWluZyBPUyBkb2VzIG5vdCBwcm92aWRlIHRoZW0uCisgICAgKiBBbHdheXMgZmlsbCBhdCBsZWFzdCAzMiBiaXRzLCB0aGUgdGFibGUgaXMgcGVyaW9kaWNhbGx5IHBvbGxlZCAtPiAzMiBiaXQKKyAgICAqIG92ZXJmbG93IHNoYWxsIGJlIGRldGVjdGVkIGFuZCA2NCBiaXQgdmFsdWUgc2hvdWxkIGJlIGNvbXB1dGVkIGF1dG9tYXRpY2FsbHkuICovCiAgICBVNjQgICAgICAgICAgICAgSENJblJlY2VpdmVzOwogICAgVTY0ICAgICAgICAgICAgIEhDSW5PY3RldHM7CiAgICB1X2xvbmcgICAgICAgICAgSW5IZHJFcnJvcnM7Ci0gICB1X2xvbmcgICAgICAgICAgSW5Ob1JvdXRlczsKKyAgIFU2NCAgICAgICAgICAgICBIQ0luTm9Sb3V0ZXM7IAogICAgdV9sb25nICAgICAgICAgIEluQWRkckVycm9yczsKICAgIHVfbG9uZyAgICAgICAgICBJblVua25vd25Qcm90b3M7CiAgICB1X2xvbmcgICAgICAgICAgSW5UcnVuY2F0ZWRQa3RzOwotICAgVTY0ICAgICAgICAgICAgIEhDSW5Gb3J3RGF0YWdyYW1zOworICAgCisgICAvKiBvcHRpb25hbCwgY2FuIGJlIGNvbXB1dGVkIGZyb20gSENJbk5vUm91dGVzIGFuZCBIQ091dEZvcndEYXRhZ3JhbXMgKi8KKyAgIFU2NCAgICAgICAgICAgICBIQ0luRm9yd0RhdGFncmFtczsgCisgICAKICAgIHVfbG9uZyAgICAgICAgICBSZWFzbVJlcWRzOwogICAgdV9sb25nICAgICAgICAgIFJlYXNtT0tzOwogICAgdV9sb25nICAgICAgICAgIFJlYXNtRmFpbHM7CiAgICB1X2xvbmcgICAgICAgICAgSW5EaXNjYXJkczsKICAgIFU2NCAgICAgICAgICAgICBIQ0luRGVsaXZlcnM7CiAgICBVNjQgICAgICAgICAgICAgSENPdXRSZXF1ZXN0czsKLSAgIHVfbG9uZyAgICAgICAgICBPdXROb1JvdXRlczsKKyAgIFU2NCAgICAgICAgICAgICBIQ091dE5vUm91dGVzOwogICAgVTY0ICAgICAgICAgICAgIEhDT3V0Rm9yd0RhdGFncmFtczsKLSAgIHVfbG9uZyAgICAgICAgICBPdXREaXNjYXJkczsKLSAgIHVfbG9uZyAgICAgICAgICBPdXRGcmFnUmVxZHM7Ci0gICB1X2xvbmcgICAgICAgICAgT3V0RnJhZ09LczsKLSAgIHVfbG9uZyAgICAgICAgICBPdXRGcmFnRmFpbHM7Ci0gICB1X2xvbmcgICAgICAgICAgT3V0RnJhZ0NyZWF0ZXM7CisgICBVNjQgICAgICAgICAgICAgSENPdXREaXNjYXJkczsKKyAgIAorICAgLyogb3B0aW9uYWwsIGNhbiBiZSBjb21wdXRlZCBmcm9tIEhDT3V0RnJhZ09LcyArIEhDT3V0RnJhZ0ZhaWxzKi8KKyAgIFU2NCAgICAgICAgICAgICBIQ091dEZyYWdSZXFkczsKKyAgIFU2NCAgICAgICAgICAgICBIQ091dEZyYWdPS3M7CisgICBVNjQgICAgICAgICAgICAgSENPdXRGcmFnRmFpbHM7CisgICBVNjQgICAgICAgICAgICAgSENPdXRGcmFnQ3JlYXRlczsKKyAgIAorICAgLyogb3B0aW9uYWwsIGNhbiBiZSBjb21wdXRlZCBmcm9tIAorICAgICogSENPdXRSZXF1ZXN0cyArSENPdXRGb3J3RGF0YWdyYW1zICsgSENPdXRGcmFnQ3JlYXRlcworICAgICogLSBIQ091dEZyYWdSZXFkcyAtIEhDT3V0Tm9Sb3V0ZXMgIC0gSENPdXREaXNjYXJkcyAqLwogICAgVTY0ICAgICAgICAgICAgIEhDT3V0VHJhbnNtaXRzOworICAgCiAgICBVNjQgICAgICAgICAgICAgSENPdXRPY3RldHM7CiAgICBVNjQgICAgICAgICAgICAgSENJbk1jYXN0UGt0czsKICAgIFU2NCAgICAgICAgICAgICBIQ0luTWNhc3RPY3RldHM7CkBAIC01MCw2ICs5OCw4IEBACiAgICBVNjQgICAgICAgICAgICAgSENJbkJjYXN0UGt0czsKICAgIFU2NCAgICAgICAgICAgICBIQ091dEJjYXN0UGt0czsKIAorICAgLyogQXJyYXkgb2YgYXZhaWxhYmxlIGNvbHVtbnMuKi8KKyAgIGludCAgICAgICAgICAgICBjb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfTEFTVCsxXTsKIH0gbmV0c25tcF9pcHN0YXRzOwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaAppbmRleCA5YmExYjE5Li5kOTQ0ZDEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oCkBAIC00NSw3ICs0NSw3IEBACiAgICAgKiBkZWZpbmUgdGhlIG1heGltdW0gb2lkIGxlbmd0aCBmb3IgYSBwb2xpY3ksIGZvciB1c2UgYnkgdGhlCiAgICAgKiBpbmV0Q2lkclJvdXRlVGFibGUuIE11c3QgYmUgYXQgbGVhc3QgMiwgZm9yIGRlZmF1bHQgbnVsbE9pZCBjYXNlLgogICAgICovCi0jZGVmaW5lIE5FVFNOTVBfUE9MSUNZX09JRF9NQVhfTEVOICAyCisjZGVmaW5lIE5FVFNOTVBfUE9MSUNZX09JRF9NQVhfTEVOICAzCiAgICBvaWQgICAgICAqcnRfcG9saWN5OyAgICAgIC8qIE5VTEwgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIHsgMCwgMCB9ICovCiAgICB1X2NoYXIgICAgcnRfcG9saWN5X2xlbjsgIC8qIDAtMTI4IG9pZHMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1YzhiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIHNjb3Blem9uZSBkYXRhIGFjY2VzcyBoZWFkZXIKKyAqCisgKiAkSWQ6IHNjb3Blem9uZS5oIDE0MTcwIDIwMDctMDQtMjkgMDI6MjI6MTJaIHZhcnVuX2MgJAorICovCisjaWZuZGVmIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9ICisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIHN0cnVjdHVyZSBkZWZpbml0aW9ucworICoKKyAqCisgKiBOT1RFOiBpZiB5b3UgYWRkIGZpZWxkcywgdXBkYXRlIGNvZGUgZGVhbGluZyB3aXRoCisgKiAgICAgICB0aGVtIGluIGlwdjZzY29wZXpvbmVfY29tbW9uLmMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF92NnNjb3Blem9uZV9lbnRyeV9zIHsKKyAgICBuZXRzbm1wX2luZGV4IG9pZF9pbmRleDsKKyAgICBvaWQgICAgICAgICAgIG5zX3Njb3Blem9uZV9pbmRleDsKKyAgICB1X2ludCAgIG5zX2ZsYWdzOyAvKiBuZXQtc25tcCBmbGFncyAqLworICAgIG9pZCAgICAgaW5kZXg7CisgICAgaW50ICAgICBzY29wZXpvbmVfbGlua2xvY2FsOyAgICAKKworfSBuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5OworCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIEFDQ0VTUyBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KKworLyoKKyAqIHNjb3Blem9uZSBjb250YWluZXIgaW5pdAorICovCituZXRzbm1wX2NvbnRhaW5lciAqIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfaW5pdCh1X2ludCBpbml0X2ZsYWdzKTsKKworLyoKKyAqIHNjb3Blem9uZSBjb250YWluZXIgbG9hZCBhbmQgZnJlZQorICovCituZXRzbm1wX2NvbnRhaW5lcioKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOworCit2b2lkIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgZnJlZV9mbGFncyk7CisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9GUkVFX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU0NPUEVaT05FX0ZSRUVfRE9OVF9DTEVBUiAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TQ09QRVpPTkVfRlJFRV9LRUVQX0NPTlRBSU5FUiAgICAgICAgMHgwMDAyCisKKworLyoKKyAqIGNyZWF0ZS9mcmVlIGFuIHNjb3Blem9uZSBlbnRyeQorICovCituZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICoKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9jcmVhdGUodm9pZCk7CisKK3ZvaWQgbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2VudHJ5X2ZyZWUobmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqIGVudHJ5KTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTkVUU05NUF9BQ0NFU1NfU0NPUEVaT05FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0LmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjhkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2lmbmRlZiBORVRTTk1QX1NXSU5TVF9ICisjZGVmaW5lIE5FVFNOTVBfU1dJTlNUX0gKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGEgc3dpbnN0IGVudHJ5IAorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGhyU1dJbnN0YWxsZWRUYWJsZV9lbnRyeSB7CisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaW5kZXg7CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBJbmRleCB2YWx1ZXM7IE1JQiB0eXBlIGlzIGludDMyLCBidXQgd2UgdXNlIG9pZCBzbyB0aGlzCisgICAgICAgICAqIHN0cnVjdHVyZSBjYW4gYmUgdXNlZCBkaXJlY3RseSB3aXRoIGEgdGFibGVfY29udGFpbmVyLgorICAgICAgICAgKi8KKyAgICAgICAgb2lkICAgICAgICAgICAgIHN3SW5kZXg7CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBDb2x1bW4gdmFsdWVzIAorICAgICAgICAgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIHN3TmFtZVs2NF07CisgICAgICAgIGNoYXIgICAgICAgICAgICBzd0RhdGVbMTFdOworI2lmZGVmIE5FVFNOTVBfSEFWRV9TV0lECisgICAgICAgIG9pZCAgICAgICAgICAgICpzd0lEOworICAgICAgICB1X2NoYXIgICAgICAgICAgc3dJRF9sZW47CisjZW5kaWYKKyAgICAgICAgdV9jaGFyICAgICAgICAgIHN3VHlwZTsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIHN3TmFtZV9sZW47CisgICAgICAgIHVfY2hhciAgICAgICAgICBzd0RhdGVfbGVuOworICAgIH0gbmV0c25tcF9zd2luc3RfZW50cnk7CisgICAgCisjZGVmaW5lIEhSU1dJTlNUQUxMRURUWVBFX1VOS05PV04gIDEKKyNkZWZpbmUgSFJTV0lOU1RBTExFRFRZUEVfT1BFUkFUSU5HU1lTVEVNICAyCisjZGVmaW5lIEhSU1dJTlNUQUxMRURUWVBFX0RFVklDRURSSVZFUiAgMworI2RlZmluZSBIUlNXSU5TVEFMTEVEVFlQRV9BUFBMSUNBVElPTiAgNAorCisKKyNkZWZpbmUgTkVUU05NUF9TV0lOU1RfTk9GTEFHUyAgICAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBORVRTTk1QX1NXSU5TVF9BTExfT1JfTk9ORSAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORVRTTk1QX1NXSU5TVF9ET05UX0ZSRUVfSVRFTVMgICAgMHgwMDAwMDAwMgorCisgICAgbmV0c25tcF9jb250YWluZXIgKgorICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBmbGFncyApOworCisgICAgdm9pZCBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgZmxhZ3MpOworICAgIHZvaWQgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2ZyZWVfaXRlbXMobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcik7CisKKyAgICB2b2lkIG5ldHNubXBfc3dpbnN0X2VudHJ5X3JlbW92ZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N3aW5zdF9lbnRyeSAqZW50cnkpOworCisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKiBuZXRzbm1wX3N3aW5zdF9lbnRyeV9jcmVhdGUoaW50MzJfdCBpbmRleCk7CisgICAgdm9pZCBuZXRzbm1wX3N3aW5zdF9lbnRyeV9mcmVlKG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeSk7CisKKyAgICBpbnQzMl90IG5ldHNubXBfc3dpbnN0X2FkZF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludDMyX3QgbmV0c25tcF9zd2luc3RfZ2V0X2lkKGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGNvbnN0IGNoYXIgKiBuZXRzbm1wX3N3aW5zdF9nZXRfbmFtZShpbnQzMl90IGlkKTsKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIE5FVFNOTVBfU1dJTlNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTE1YzQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oCkBAIC0wLDAgKzEsMTA0IEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9TV1JVTl9ICisjZGVmaW5lIE5FVFNOTVBfU1dSVU5fSAorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGEgcm93IGVudHJ5IAorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGhyU1dSdW5UYWJsZV9lbnRyeSB7CisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaW5kZXg7CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBJbmRleCB2YWx1ZXMgCisgICAgICAgICAqLworICAgICAgICBvaWQgICAgICAgICAgICAgaHJTV1J1bkluZGV4OworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogQ29sdW1uIHZhbHVlcyAKKyAgICAgICAgICovCisgICAgICAgIGNoYXIgICAgICAgICAgICBoclNXUnVuTmFtZVsgNjQrMV07ICAvKiBzaXplIHBlciBNSUIgKyAxICovCisgICAgICAgIGNoYXIgICAgICAgICAgICBoclNXUnVuUGF0aFsxMjgrMV07ICAvKiBzaXplIHBlciBNSUIgKyAxICovCisgICAgICAgIGNoYXIgICAgICAgICAgICBoclNXUnVuUGFyYW1ldGVyc1sxMjgrMV07IC8qIHNpemUgcGVyIE1JQiArIDEgKi8KKyNpZmRlZiBORVRTTk1QX1NXUlVOX0hBVkVfSUQgIC8qIGlmIG5vdCBkZWZpbmVkLCB3aWxsIGFsd2F5cyB1c2UgbnVsbE9pZCAqLworICAgICAgICBvaWQgICAgICAgICAgICAgaHJTV1J1bklEW1NOTVBfTUFYT0lEXTsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIGhyU1dSdW5JRF9sZW47CisjZW5kaWYKKyAgICAgICAgdV9jaGFyICAgICAgICAgIGhyU1dSdW5OYW1lX2xlbjsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIGhyU1dSdW5QYXRoX2xlbjsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIGhyU1dSdW5QYXJhbWV0ZXJzX2xlbjsKKworICAgICAgICB1X2NoYXIgICAgICAgICAgaHJTV1J1blR5cGU7CisgICAgICAgIHVfY2hhciAgICAgICAgICBoclNXUnVuU3RhdHVzOworICAgICAgICB1X2NoYXIgICAgICAgICAgb2xkX2hyU1dSdW5TdGF0dXM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUGVyZiB2YWx1ZXMKKyAgICAgICAgICovCisgICAgICAgIGludDMyX3QgICAgICAgICBoclNXUnVuUGVyZkNQVTsKKyAgICAgICAgaW50MzJfdCAgICAgICAgIGhyU1dSdW5QZXJmTWVtOworICAgICAgICAKKyAgICB9IG5ldHNubXBfc3dydW5fZW50cnk7CisKKyAgICAvKgorICAgICAqIGVudW1zIGZvciBjb2x1bW4gaHJTV1J1blR5cGUKKyAgICAgKi8KKyNkZWZpbmUgSFJTV1JVTlRZUEVfVU5LTk9XTiAgICAgICAgICAgICAxCisjZGVmaW5lIEhSU1dSVU5UWVBFX09QRVJBVElOR1NZU1RFTSAgICAgMgorI2RlZmluZSBIUlNXUlVOVFlQRV9ERVZJQ0VEUklWRVIgICAgICAgIDMKKyNkZWZpbmUgSFJTV1JVTlRZUEVfQVBQTElDQVRJT04gICAgICAgICA0CisKKyAgICAvKgorICAgICAqIGVudW1zIGZvciBjb2x1bW4gaHJTV1J1blN0YXR1cworICAgICAqLworI2RlZmluZSBIUlNXUlVOU1RBVFVTX1JVTk5JTkcgICAgICAgICAgIDEKKyNkZWZpbmUgSFJTV1JVTlNUQVRVU19SVU5OQUJMRSAgICAgICAgICAyCisjZGVmaW5lIEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEUgICAgICAgMworI2RlZmluZSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQgICAgICAgICAgIDQKKworICAgIC8qLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBQcm90b3R5cGVzCisgICAgICovCisgICAgbmV0c25tcF9jb250YWluZXIgKgorICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MgKTsKKworICAgIHZvaWQgbmV0c25tcF9zd3J1bl9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyk7CisgICAgdm9pZCBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlX2l0ZW1zKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKTsKKworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKgorICAgIG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKGludDMyX3Qgc3dJbmRleCk7CisKKyAgICB2b2lkIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeSk7CisKKyAgICBpbnQgIHN3cnVuX2NvdW50X3Byb2Nlc3Nlcyggdm9pZCApOworICAgIGludCAgc3dydW5fbWF4X3Byb2Nlc3NlcyggICB2b2lkICk7CisgICAgaW50ICBzd3J1bl9jb3VudF9wcm9jZXNzZXNfYnlfbmFtZSggY2hhciAqbmFtZSApOworCisjZGVmaW5lIE5FVFNOTVBfU1dSVU5fTk9GTEFHUyAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTkVUU05NUF9TV1JVTl9BTExfT1JfTk9ORSAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORVRTTk1QX1NXUlVOX0RPTlRfRlJFRV9JVEVNUyAgICAweDAwMDAwMDAyCisvKiNkZWZpbmUgTkVUU05NUF9TV1JVTl94eCAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICovCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisKKyNlbmRpZiAvKiBORVRTTk1QX1NXUlVOX0ggKi8KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmgKaW5kZXggNDM4MjM5Ny4uYzcyZGZiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaApAQCAtMjIsNyArMjIsMTEgQEAKIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfc3lzdGVtc3RhdHNfcyB7CiAKICAgIG5ldHNubXBfaW5kZXggb2lkX2luZGV4OyAgIC8qIE1VU1QgQkUgRklSU1QhISBmb3IgY29udGFpbmVyIHVzZSAqLwotICAgb2lkICAgICAgICAgICBuc19pcF92ZXJzaW9uOworICAgLyogCisgICAgKiBJbmRleCBvZiB0aGUgdGFibGUKKyAgICAqIEZpcnN0IGVudHJ5ID0gaXAgdmVyc2lvbgorICAgICogU2Vjb25kIGVudHJ5ID0gaW50ZXJmYWNlIGluZGV4ICgwIGZvciBpcFN5c3RlbVN0YXRzVGFibGUgKi8KKyAgIG9pZCAgICAgICAgICAgaW5kZXhbMl07ICAgICAgICAgICAKIAogICAgaW50ICAgICAgIGZsYWdzOyAvKiBmb3IgbmV0LXNubXAgdXNlICovCiAKQEAgLTMyLDYgKzM2LDExIEBACiAgICAgKi8KICAgIG5ldHNubXBfaXBzdGF0cyBzdGF0czsKIAorICAgLyoKKyAgICAqIGZvciBsb2dnaW5nCisgICAgKi8KKyAgIGNvbnN0IGNoYXIqIHRhYmxlTmFtZTsKKyAgIAogICAgLyoqIG9sZF9zdGF0cyBpcyB1c2VkIGluIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV91cGRhdGVfc3RhdHMgKi8KICAgIG5ldHNubXBfaXBzdGF0cyAqb2xkX3N0YXRzOwogCkBAIC00NSwxNyArNTQsMjQgQEAKIC8qCiAgKiBpbml0CiAgKi8KK3ZvaWQgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfaW5pdCh2b2lkKTsKKworLyoKKyAqIGluaXQKKyAqLwogbmV0c25tcF9jb250YWluZXIgKiBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfaW5pdCh1X2ludCBpbml0X2ZsYWdzKTsKICNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfSU5JVF9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCiAjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0lOSVRfQURETF9JRFhfQllfQUREUiAgICAgIDB4MDAwMQogCi0vKgotICogbG9hZCBhbmQgZnJlZQorLyoqCisgKiBMb2FkIGNvbnRhaW5lci4gSWYgdGhlIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSBpcyBzZXQKKyAqIHRoZSBpcElmU3lzdGVtU3RhdHMgdGFibGUgaXMgbG9hZGVkLCBlbHNlIGlwU3lzdGVtU3RhdHNUYWJsZSBpcyBsb2FkZWQuCiAgKi8KIG5ldHNubXBfY29udGFpbmVyKgogbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOwogI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfTE9BRF9JRlRBQkxFICAgICAgICAgICAgICAgMHgwMDAxIAogCiB2b2lkIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGZyZWVfZmxhZ3MpOwpAQCAtNjgsNyArODQsOCBAQAogICogY3JlYXRlL2ZyZWUgYW4gZW50cnkKICAqLwogbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqCi1uZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoaW50IHZlcnNpb24pOworbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKGludCB2ZXJzaW9uLCBpbnQgaWZfaW5kZXgsCisgICAgICAgICAgICBjb25zdCBjaGFyKiB0YWJsZU5hbWUpOwogCiB2b2lkIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqIGVudHJ5KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgKaW5kZXggNjQ3MDRkMi4uMzYyMzFlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oCkBAIC00MSw2ICs0MSw3IEBACiAgICAgICAgIHVfc2hvcnQgICBybXRfcG9ydDsKIAogICAgICAgICB1X2ludCAgICAgaW5zdGFuY2U7CisgICAgICAgIHVfaW50ICAgICBwaWQ7CiAgICAKICAgICB9IG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAppbmRleCBmMTMyZjNiLi41MmVjYzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIEFTTjFfSAogI2RlZmluZSBBU04xX0gKIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb2lkLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKQEAgLTM3LDE2ICszOSw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBNQVhfU1VCSUQgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgLSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBwcm90ZWN0aW9uICovCi0jaWZuZGVmIEVJR0hUQklUX1NVQklEUwotICAgIHR5cGVkZWYgdV9sb25nICBvaWQ7Ci0jZGVmaW5lIE1BWF9TVUJJRCAgIDB4RkZGRkZGRkYKLSNlbHNlCi0gICAgdHlwZWRlZiB1X2NoYXIgIG9pZDsKLSNkZWZpbmUgTUFYX1NVQklEICAgMHhGRgotI2VuZGlmCi0jZW5kaWYKLQogI2RlZmluZSBNSU5fT0lEX0xFTgkgICAgMgogI2RlZmluZSBNQVhfT0lEX0xFTgkgICAgMTI4IC8qIG1heCBzdWJpZCdzIGluIGFuIG9pZCAqLwogI2lmbmRlZiBNQVhfTkFNRV9MRU4gICAgICAgICAgICAvKiBjb25mbGljdHMgd2l0aCBzb21lIGxpYnJhcmllcyAqLwpAQCAtMTg2LDM3ICsxNzgsNTYgQEAKIAogCiAgICAgaW50ICAgICAgICAgICAgIGFzbl9jaGVja19wYWNrZXQodV9jaGFyICosIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX2ludCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLCBsb25nICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfaW50KHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyLCBjb25zdCBsb25nICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2VfdW5zaWduZWRfaW50KHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICosIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX3Vuc2lnbmVkX2ludCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2xvbmcgKiwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2Vfc3RyaW5nKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICosIHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfc3RyaW5nKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9oZWFkZXIodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKik7CiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9zZXF1ZW5jZSh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLCB1X2NoYXIgZXhwZWN0ZWRfdHlwZSwgICAgICAvKiBtdXN0IGJlIHRoaXMgdHlwZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXN0cik7ICAgICAgIC8qIGVycm9yIG1lc3NhZ2UgcHJlZml4ICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX2hlYWRlcih1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfc2VxdWVuY2UodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIsIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX2xlbmd0aCh1X2NoYXIgKiwgdV9sb25nICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF9sZW5ndGgodV9jaGFyICosIHNpemVfdCAqLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9vYmppZCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfb2JqaWQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIsIG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2VfbnVsbCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfbnVsbCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX2JpdHN0cmluZyh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqLCBzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX2JpdHN0cmluZyh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2VfdW5zaWduZWRfaW50NjQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb3VudGVyNjQgKiwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfdW5zaWduZWRfaW50NjQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY291bnRlcjY0ICosIHNpemVfdCk7CiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9zaWduZWRfaW50NjQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKaW5kZXggYWNkNWQ0MC4uNTZjZGJhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKQEAgLTI3LDYgKzI3LDggQEAKICNkZWZpbmUgU05NUF9DQUxMQkFDS19QT1NUX1BSRU1JQl9SRUFEX0NPTkZJRwkzCiAjZGVmaW5lIFNOTVBfQ0FMTEJBQ0tfTE9HR0lORwkJCTQKICNkZWZpbmUgU05NUF9DQUxMQkFDS19TRVNTSU9OX0lOSVQJCTUKKyNkZWZpbmUgU05NUF9DQUxMQkFDS19QUkVfUkVBRF9DT05GSUcJICAgICAgICA3CisjZGVmaW5lIFNOTVBfQ0FMTEJBQ0tfUFJFX1BSRU1JQl9SRUFEX0NPTkZJRwk4CiAKIAogICAgIC8qCkBAIC00OSwyMSArNTEsMjkgQEAKICAgICAvKgogICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMgCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgaW5pdF9jYWxsYmFja3Modm9pZCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKGludCBtYWpvciwgaW50IG1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBDYWxsYmFjayAqIG5ld19jYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcsIGludCBwcmlvcml0eSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhpbnQgbWFqb3IsIGludCBtaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QQ2FsbGJhY2sgKiBuZXdfY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKGludCBtYWpvciwgaW50IG1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxlcl9hcmcpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfY2FsbGJhY2tfYXZhaWxhYmxlKGludCBtYWpvciwgaW50IG1pbm9yKTsgICAgICAvKiBpcyA+MSBhdmFpbGFibGUgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2NvdW50X2NhbGxiYWNrcyhpbnQgbWFqb3IsIGludCBtaW5vcik7IC8qIHJldCB0aGUgbnVtYmVyIHJlZ2lzdGVyZWQgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soaW50IG1ham9yLCBpbnQgbWlub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QQ2FsbGJhY2sgKiBuZXdfY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcsIGludCBtYXRjaGFyZ3MpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGNsZWFyX2NhbGxiYWNrICh2b2lkKTsKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19jbGVhcl9jbGllbnRfYXJnKHZvaWQgKiwgaW50IGksIGludCBqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YTc5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgKQEAgLTAsMCArMSwyMjYgQEAKKyNpZm5kZWYgTkVUU05NUF9DRVJUX1VUSUxfSAorCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKQorCisjaWZuZGVmIEhFQURFUl9TU0xfSAorI2Vycm9yICJtdXN0IGluY2x1ZGUgPG9wZW5zc2wvc3NsLmg+IGJlZm9yZSBjZXJ0X3V0aWwuaCIKKyNlbmRpZgorI2lmbmRlZiBIRUFERVJfWDUwOV9ICisjZXJyb3IgIm11c3QgaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+IGJlZm9yZSBjZXJ0X3V0aWwuaCIKKyNlbmRpZgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIG5ldHNubXBfY2VydCBzdHJ1Y3R1cmVzLCBkZWZpbmVzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucworICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgbmV0c25tcF9jZXJ0c19pbml0KHZvaWQpOwordm9pZCBuZXRzbm1wX2NlcnRzX2FnZW50X2luaXQodm9pZCk7Cit2b2lkIG5ldHNubXBfY2VydHNfc2h1dGRvd24odm9pZCk7Cit2b2lkIG5ldHNubXBfY2VydHNfbG9hZCh2b2lkKTsKK25ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX2NlcnRfZ2V0X3RydXN0bGlzdCh2b2lkKTsKKworICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfY2VydF9jb21tb25fcyB7CisgICAgICAgIGNoYXIgICAgICAgICAgICpkaXI7CisgICAgICAgIGNoYXIgICAgICAgICAgICpmaWxlbmFtZTsKKyAgICAgICAgCisgICAgICAgIHVfY2hhciAgICAgICAgICB0eXBlOworICAgICAgICB1X2NoYXIgICAgICAgICAgYWxsb3dlZF91c2VzOworICAgICAgICB1X2NoYXIgICAgICAgICAgX3BhZFsyXTsgLyogZm9yIGZ1dHVyZSB1c2UgKi8KKyAgICB9IG5ldHNubXBfY2VydF9jb21tb247CisKKyAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2tleV9zIHsKKyAgICAgICAgbmV0c25tcF9jZXJ0X2NvbW1vbiBpbmZvOworCisgICAgICAgIEVWUF9QS0VZICAgICAgICpva2V5OworICAgICAgICBzdHJ1Y3QgbmV0c25tcF9jZXJ0X3MgICAqY2VydDsKKyAgICB9IG5ldHNubXBfa2V5OworCisgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9jZXJ0X3MgeworICAgICAgICBuZXRzbm1wX2NlcnRfY29tbW9uIGluZm87CisKKyAgICAgICAgWDUwOSAgICAgICAgICAgKm9jZXJ0OworICAgICAgICBuZXRzbm1wX2tleSAgICAqa2V5OworICAgICAgICBzdHJ1Y3QgbmV0c25tcF9jZXJ0X3MgKmlzc3Vlcl9jZXJ0OworCisgICAgICAgIGNoYXIgICAgICAgICAgICppc3N1ZXI7CisgICAgICAgIGNoYXIgICAgICAgICAgICpzdWJqZWN0OworICAgICAgICBjaGFyICAgICAgICAgICAqZmluZ2VycHJpbnQ7CisgICAgICAgIGNoYXIgICAgICAgICAgICpjb21tb25fbmFtZTsKKworICAgICAgICB1X2NoYXIgICAgICAgICAgaGFzaF90eXBlOworICAgICAgICB1X2NoYXIgICAgICAgICAgX3BhZFszXTsgLyogZm9yIGZ1dHVyZSB1c2UgKi8KKyAgICB9IG5ldHNubXBfY2VydDsKKworLyoqIHR5cGVzICovCisgICAgZW51bSB7IE5TX0NFUlRfVFlQRV9VTktOT1dOID0gMCwgTlNfQ0VSVF9UWVBFX1BFTSwgTlNfQ0VSVF9UWVBFX0RFUiwKKyAgICAgICAgICAgTlNfQ0VSVF9UWVBFX1BLQ1MxMiwgTlNfQ0VSVF9UWVBFX0tFWSB9OworCisvKiogdXNlcyAqLworI2RlZmluZSBOU19DRVJUX0lERU5USVRZICAgICAgIDB4MDAwMQorI2RlZmluZSBOU19DRVJUX1JFTU9URV9QRUVSICAgIDB4MDAwMgorI2RlZmluZSBOU19DRVJUX1JFU0VSVkVEMSAgICAgIDB4MDAwNAorI2RlZmluZSBOU19DRVJUX0NBICAgICAgICAgICAgIDB4MDAwOAorCisvKiogc291cmNlICovCisjZGVmaW5lIE5TX0NFUlRLRVlfREVGQVVMVCAgICAgICAweDAwMCAvKiBnZXQgZGVmYXVsdCBmcm9tIERTIHN0b3JlICovCisjZGVmaW5lIE5TX0NFUlRLRVlfRklMRSAgICAgICAgICAweDAwMSAvKiBmaWxlbmFtZS9mdWxsIHBhdGggKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9GSU5HRVJQUklOVCAgIDB4MDAyIC8qIHB1YmxpYyBrZXkgZmluZ2VycHJpbnQgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9DQSAgICAgICAgICAgIDB4MDA0IC8qIHRydXN0ZWQgQ0EgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9TQU5fUkZDODIyICAgIDB4MDA4IC8qIHN1YmogYWx0IG5hbWU6IHJmYzgyMiAqLworI2RlZmluZSBOU19DRVJUS0VZX1NBTl9ETlMgICAgICAgMHgwMTAgLyogc3ViaiBhbHQgbmFtZTogRE5TICovCisjZGVmaW5lIE5TX0NFUlRLRVlfU0FOX0lQQUREUiAgICAweDAyMCAvKiBzdWJqIGFsdCBuYW1lOiBJUCBhZGRyZXNzICovCisjZGVmaW5lIE5TX0NFUlRLRVlfQ09NTU9OX05BTUUgICAweDA0MCAvKiBjb21tb24gbmFtZSAqLworI2RlZmluZSBOU19DRVJUS0VZX1RBUkdFVF9QQVJBTSAgMHgwODAgLyogdGxzdG1QYXJhbXNUYWJsZSAqLworI2RlZmluZSBOU19DRVJUS0VZX1RBUkdFVF9BRERSICAgMHgxMDAgLyogdGxzdG1BZGRyVGFibGUgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9NVUxUSVBMRSAgICAgIDB4MjAwIC8qIHRyeSBtdWx0aXBsZSBzb3VyY2VzICovCisKKy8qKiBSRkMgNTI0NiBoYXNoIGFsZ29yaXRobXMgKFNlY3Rpb24gNy40LjEuNC4xKSAqLworI2RlZmluZSBOU19IQVNIX05PTkUgICAgICAgIDAKKyNkZWZpbmUgTlNfSEFTSF9NRDUgICAgICAgICAxCisjZGVmaW5lIE5TX0hBU0hfU0hBMSAgICAgICAgMgorI2RlZmluZSBOU19IQVNIX1NIQTIyNCAgICAgIDMKKyNkZWZpbmUgTlNfSEFTSF9TSEEyNTYgICAgICA0CisjZGVmaW5lIE5TX0hBU0hfU0hBMzg0ICAgICAgNQorI2RlZmluZSBOU19IQVNIX1NIQTUxMiAgICAgIDYKKyNkZWZpbmUgTlNfSEFTSF9NQVggICAgICAgICBOU19IQVNIX1NIQTUxMgorCisvKiogU05NUC1UTFMtVE0tTUlCICovCisjZGVmaW5lIFNOTVBUTFNGSU5HRVJQUklOVF9NQVhfTEVOICAgMjU1CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIG5ldHNubXBfY2VydCBmdW5jdGlvbiBkZWZpbml0aW9ucworICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgbmV0c25tcF9jZXJ0ICpuZXRzbm1wX2NlcnRfZmluZChpbnQgd2hhdCwgaW50IHdoZXJlLCB2b2lkICpoaW50KTsKKworICAgIGludCBuZXRzbm1wX2NlcnRfY2hlY2tfdmJfZmluZ2VycHJpbnQoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpOworCisgICAgdm9pZCBuZXRzbm1wX2ZwX2xvd2VyY2FzZV9hbmRfc3RyaXBfY29sb24oY2hhciAqZnApOworICAgIGludCBuZXRzbm1wX2NlcnRfcGFyc2VfaGFzaF90eXBlKGNvbnN0IGNoYXIgKnN0cik7CisgICAgaW50IG5ldHNubXBfdGxzX2ZpbmdlcnByaW50X2J1aWxkKGludCBoYXNoX3R5cGUsIGNvbnN0IGNoYXIgKmhleF9mcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqdGxzX2ZwLCBzaXplX3QgKnRsc19mcF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jKTsKKyAgICBpbnQgbmV0c25tcF90bHNfZmluZ2VycHJpbnRfcGFyc2UoY29uc3QgdV9jaGFyICpiaW5hcnlfZnAsIGludCBmcF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipmcF9zdHJfcHRyLCB1X2ludCAqZnBfc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsIHVfY2hhciAqaGFzaF90eXBlX3B0cik7CisKKworICAgIGludCBuZXRzbm1wX2NlcnRfdHJ1c3QoU1NMX0NUWCAqY3R4LCBuZXRzbm1wX2NlcnQgKnRoaXNjZXJ0KTsKKyAgICBpbnQgbmV0c25tcF9jZXJ0X3RydXN0X2NhKFNTTF9DVFggKmN0eCwgbmV0c25tcF9jZXJ0ICp0aGlzY2VydHNyb290Y2EpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqICBjZXJ0aWZpY2F0ZSB0byBUcmFuc3BvcnQgU2VjdXJpdHkgTmFtZSBtYXBwaW5nIChuZXRzbm1wX2NlcnRfbWFwKQorICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTQU5SRkM4MjJOYW1lICAgICAgICAgICAgIDIKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTQU5ETlNOYW1lICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTQU5JcEFkZHJlc3MgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRTQU5BbnkgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRDb21tb25OYW1lICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVFNOTV90bHN0bUNlcnRfTUFYICAgICAgICAgICAgICAgICAgICAgIFRTTk1fdGxzdG1DZXJ0Q29tbW9uTmFtZQorCisjZGVmaW5lIE5TQ01fRlJPTV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgTlNDTV9GUk9NX01JQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBOU0NNX05PTlZPTEFUSUxFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisKKyAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2NlcnRfbWFwX3MgeworICAgICAgICBpbnQgICAgICAgICAgICAgcHJpb3JpdHk7CisgICAgICAgIGNoYXIgICAgICAgICAgICpmaW5nZXJwcmludDsKKyAgICAgICAgaW50ICAgICAgICAgICAgIG1hcFR5cGU7CisgICAgICAgIGNoYXIgICAgICAgICAgICpkYXRhOworCisgICAgICAgIGNoYXIgICAgICAgICAgICBoYXNoVHlwZTsKKyAgICAgICAgY2hhciAgICAgICAgICAgIGZsYWdzOworCisgICAgICAgIFg1MDkgICAgICAgICAgICpvY2VydDsKKyAgICB9IG5ldHNubXBfY2VydF9tYXA7CisKKyAgICBuZXRzbm1wX2NlcnRfbWFwICpuZXRzbm1wX2NlcnRfbWFwX2FsbG9jKGNoYXIgKmZwLCBYNTA5ICpvY2VydCk7CisgICAgdm9pZCBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobmV0c25tcF9jZXJ0X21hcCAqY2VydF9tYXApOworICAgIGludCBuZXRzbm1wX2NlcnRfbWFwX2FkZChuZXRzbm1wX2NlcnRfbWFwICptYXApOworICAgIGludCBuZXRzbm1wX2NlcnRfbWFwX3JlbW92ZShuZXRzbm1wX2NlcnRfbWFwICptYXApOworICAgIG5ldHNubXBfY2VydF9tYXAgKm5ldHNubXBfY2VydF9tYXBfZmluZChuZXRzbm1wX2NlcnRfbWFwICptYXApOworCisgICAgdm9pZCBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjKTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXJfY3JlYXRlKGludCB3aXRoX2ZwKTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXIodm9pZCk7CisKKyAgICBpbnQgbmV0c25tcF9jZXJ0X2dldF9zZWNuYW1lX21hcHMobmV0c25tcF9jb250YWluZXIgKmNtKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiAgc25tcFRsc3RtUGFyYW1zVGFibGUgZGF0YQorICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgdHlwZWRlZiBzdHJ1Y3Qgc25tcFRsc3RtUGFyYW1zX3MgeworICAgICAgICBjaGFyICAgICAgICAgKm5hbWU7CisgICAgICAgIGNoYXIgICAgICAgICAqZmluZ2VycHJpbnQ7CisgICAgICAgIGNoYXIgICAgICAgICAgaGFzaFR5cGU7CisgICAgICAgIHVfY2hhciAgICAgICAgZmxhZ3M7CisgICAgICAgIHVfY2hhciAgICAgICAgZmluZ2VycHJpbnRfbGVuOworICAgIH0gc25tcFRsc3RtUGFyYW1zOworICAgIAorI2RlZmluZSBUTFNUTV9QQVJBTVNfRlJPTV9DT05GSUcgICAgICAgICAgMHgwMQorI2RlZmluZSBUTFNUTV9QQVJBTVNfRlJPTV9NSUIgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBUTFNUTV9QQVJBTVNfTk9OVk9MQVRJTEUgICAgICAgICAgMHgwNAorLyoqIGluZSBUTFNUTV9QQVJBTVNfWFhYICAgICAgICAgICAgICAgICAgMHgwOCAqLworCisgICAgc25tcFRsc3RtUGFyYW1zICpuZXRzbm1wX3Rsc3RtUGFyYW1zX2NyZWF0ZShjb25zdCBjaGFyICp0YWcsIGludCBoYXNoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZwLCBpbnQgZnBfbGVuKTsKKyAgICB2b2lkIG5ldHNubXBfdGxzdG1QYXJhbXNfZnJlZShzbm1wVGxzdG1QYXJhbXMgKnN0cCk7CisgICAgc25tcFRsc3RtUGFyYW1zICpuZXRzbm1wX3Rsc3RtUGFyYW1zX3Jlc3RvcmVfY29tbW9uKGNoYXIgKipsaW5lKTsKKworICAgIG5ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX3Rsc3RtUGFyYW1zX2NvbnRhaW5lcih2b2lkKTsKKyAgICBpbnQgbmV0c25tcF90bHN0bVBhcmFtc19hZGQoc25tcFRsc3RtUGFyYW1zICpzdHApOworICAgIGludCBuZXRzbm1wX3Rsc3RtUGFyYW1zX3JlbW92ZShzbm1wVGxzdG1QYXJhbXMgKnN0cCk7CisgICAgc25tcFRsc3RtUGFyYW1zICpuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZpbmQoc25tcFRsc3RtUGFyYW1zICpzdHApOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqICBzbm1wVGxzdG1BZGRyVGFibGUgZGF0YQorICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgdHlwZWRlZiBzdHJ1Y3Qgc25tcFRsc3RtQWRkcl9zIHsKKyAgICAgICAgY2hhciAgICAgICAgICpuYW1lOworICAgICAgICBjaGFyICAgICAgICAgKmZpbmdlcnByaW50OworICAgICAgICBjaGFyICAgICAgICAgKmlkZW50aXR5OworICAgICAgICAKKyAgICAgICAgdV9jaGFyICAgICAgICBoYXNoVHlwZTsKKyAgICAgICAgdV9jaGFyICAgICAgICBmbGFnczsKKyAgICAgICAgCisgICAgfSBzbm1wVGxzdG1BZGRyOworCisjZGVmaW5lIFRMU1RNX0FERFJfRlJPTV9DT05GSUcgICAgICAgICAgMHgwMQorI2RlZmluZSBUTFNUTV9BRERSX0ZST01fTUlCICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgVExTVE1fQUREUl9OT05WT0xBVElMRSAgICAgICAgICAweDA0CisvKiogaW5lIFRMU1RNX0FERFJfWFhYICAgICAgICAgICAgICAgICAgMHgwOCAqLworCisgICAgaW50IG5ldHNubXBfdGxzdG1BZGRyX3Jlc3RvcmVfY29tbW9uKGNoYXIgKipsaW5lLCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5hbWVfbGVuLCBjaGFyICppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZF9sZW4sIGNoYXIgKmZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmZwX2xlbiwgdV9jaGFyICpodCk7CisgICAgbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfdGxzdG1BZGRyX2NvbnRhaW5lcih2b2lkKTsKKyAgICBzbm1wVGxzdG1BZGRyICpuZXRzbm1wX3Rsc3RtQWRkcl9maW5kKHNubXBUbHN0bUFkZHIgKmVudHJ5KTsKKyAgICBzbm1wVGxzdG1BZGRyICpuZXRzbm1wX3Rsc3RtQWRkcl9jcmVhdGUoY2hhciAqdGFyZ2V0QWRkck5hbWUpOworICAgIHZvaWQgbmV0c25tcF90bHN0bUFkZHJfZnJlZShzbm1wVGxzdG1BZGRyICplbnRyeSk7CisgICAgaW50IG5ldHNubXBfdGxzdG1BZGRyX2FkZChzbm1wVGxzdG1BZGRyICplbnRyeSk7CisgICAgaW50IG5ldHNubXBfdGxzdG1BZGRyX3JlbW92ZShzbm1wVGxzdG1BZGRyICplbnRyeSk7CisgICAgY2hhciAqbmV0c25tcF90bHN0bUFkZHJfZ2V0X3NlcnZlcklkKGNvbnN0IGNoYXIgKm5hbWUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKSAqLworCisjZW5kaWYgLyogTkVUU05NUF9DRVJUX1VUSUxfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAppbmRleCA0MjcxZjc2Li4xZTE2MTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKQEAgLTE4LDIxICsxOCwzMSBAQAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3NpemVfcmFuZ2UoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG93LCBzaXplX3QgaGlnaCApOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIHNpemVfdCBzaXplKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIHNpemVfdCBzaXplKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfb2lkKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX2ludChjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl91aW50KGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgaW50IGxvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhpZ2gpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl90cnV0aHZhbHVlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3ZhbHVlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1cyhjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgaW50IG9sZF92YWwpOworICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCBpbnQgb2xkX3ZhbCwgaW50IG9sZF9zdG9yYWdlKTsKIAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3N0b3JhZ2V0eXBlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCBpbnQgb2xkX3ZhbCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jbXVfY29tcGF0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY211X2NvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDc1YzZmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jbXVfY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCi0gKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwotICogdGhhdCBtYXkgYXBwbHk6Ci0gKi8KLS8qCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgotICogQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgotICovCi0KLS8qCi0gKiAgQ01VIGNvbXBhdGFiaWxpdHkgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHVyZXMuCi0gKgotICogICAgKHNpbmNlIHRoZSBVQ0QgcGFja2FnZSBzcGxpdCBmcm9tIHRoZSBDTVUgb25lCi0gKiAgICAgYWJvdXQgOCB5ZWFycyBhZ28sIHRoYXQncyBwcm9iYWJseSBlbm91Z2ggdGltZQotICogICAgIGZvciBwZW9wbGUgdG8gY29udmVydCBhbnkgb3V0c3RhbmRpbmcgY29kZSEpCi0gKi8KLQotI2lmbmRlZiBORVRfU05NUF9DTVVfQ09NUEFUX0gKLSNkZWZpbmUgTkVUX1NOTVBfQ01VX0NPTVBBVF9ICi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICAgICAgICAgICJDIiB7Ci0jZW5kaWYKLQotICAgIC8qCi0gICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAqICoKLSAgICAgKiAqIEVudW1lcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMKLSAgICAgKiAqCi0gICAgICogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAqLwotI2luY2x1ZGUgPG5ldC1zbm1wL2RlZmluaXRpb25zLmg+Ci0gICAgLyoKLSAgICAgKiBGcm9tIHBhcnNlLmggCi0gICAgICovCi0jZGVmaW5lIEFDQ0VTU19SRUFET05MWQkJTUlCX0FDQ0VTU19SRUFET05MWQotI2RlZmluZSBBQ0NFU1NfUkVBRFdSSVRFCU1JQl9BQ0NFU1NfUkVBRFdSSVRFCi0jZGVmaW5lIEFDQ0VTU19XUklURU9OTFkJTUlCX0FDQ0VTU19XUklURU9OTFkKLSNkZWZpbmUgQUNDRVNTX05PQUNDRVNTCQlNSUJfQUNDRVNTX05PQUNDRVNTCi0jZGVmaW5lIEFDQ0VTU19OT1RJRlkJCU1JQl9BQ0NFU1NfTk9USUZZCi0jZGVmaW5lIEFDQ0VTU19DUkVBVEUJCU1JQl9BQ0NFU1NfQ1JFQVRFCi0jZGVmaW5lIFNUQVRVU19NQU5EQVRPUlkJTUlCX1NUQVRVU19NQU5EQVRPUlkKLSNkZWZpbmUgU1RBVFVTX09QVElPTkFMCQlNSUJfU1RBVFVTX09QVElPTkFMCi0jZGVmaW5lIFNUQVRVU19PQlNPTEVURQkJTUlCX1NUQVRVU19PQlNPTEVURQotI2RlZmluZSBTVEFUVVNfREVQUkVDQVRFRAlNSUJfU1RBVFVTX0RFUFJFQ0FURUQKLSNkZWZpbmUgU1RBVFVTX0NVUlJFTlQJCU1JQl9TVEFUVVNfQ1VSUkVOVAotICAgIC8qCi0gICAgICogRnJvbSBzbW5wX2ltcGwuaCAKLSAgICAgKi8KLSNkZWZpbmUgSU5URUdFUgkgICAgQVNOX0lOVEVHRVIKLSNkZWZpbmUgU1RSSU5HCSAgICBBU05fT0NURVRfU1RSCi0jZGVmaW5lIE9CSklECSAgICBBU05fT0JKRUNUX0lECi0jZGVmaW5lIE5VTExPQkoJICAgIEFTTl9OVUxMCi0jZGVmaW5lIEJJVFNUUklORyAgIEFTTl9CSVRfU1RSIC8qIEhJU1RPUklDIC0gZG9uJ3QgdXNlICovCi0jZGVmaW5lIElQQUREUkVTUyAgIEFTTl9JUEFERFJFU1MKLSNkZWZpbmUgQ09VTlRFUgkgICAgQVNOX0NPVU5URVIKLSNkZWZpbmUgR0FVR0UJICAgIEFTTl9HQVVHRQotI2RlZmluZSBVTlNJR05FRCAgICBBU05fVU5TSUdORUQKLSNkZWZpbmUgVElNRVRJQ0tTICAgQVNOX1RJTUVUSUNLUwotI2RlZmluZSBBU05UX09QQVFVRSBBU05fT1BBUVVFCi0jZGVmaW5lIE5TQVAJICAgIEFTTl9OU0FQCi0jZGVmaW5lIENPVU5URVI2NCAgIEFTTl9DT1VOVEVSNjQKLSNkZWZpbmUgVUlOVEVHRVIgICAgQVNOX1VJTlRFR0VSCi0gICAgLyoKLSAgICAgKiBGcm9tIHNubXAuaCAKLSAgICAgKi8KLSNkZWZpbmUgR0VUX1JFUV9NU0cJICAgIFNOTVBfTVNHX0dFVAotI2RlZmluZSBHRVRORVhUX1JFUV9NU0cJICAgIFNOTVBfTVNHX0dFVE5FWFQKLSNkZWZpbmUgR0VUX1JTUF9NU0cJICAgIFNOTVBfTVNHX1JFU1BPTlNFCi0jZGVmaW5lIFNFVF9SRVFfTVNHCSAgICBTTk1QX01TR19TRVQKLSNkZWZpbmUgVFJQX1JFUV9NU0cJICAgIFNOTVBfTVNHX1RSQVAKLSNkZWZpbmUgQlVMS19SRVFfTVNHCSAgICBTTk1QX01TR19HRVRCVUxLCi0jZGVmaW5lIElORk9STV9SRVFfTVNHCSAgICBTTk1QX01TR19JTkZPUk0KLSNkZWZpbmUgVFJQMl9SRVFfTVNHCSAgICBTTk1QX01TR19UUkFQMgotI2RlZmluZSBSRVBPUlRfUlNQX01TRwkgICAgU05NUF9NU0dfUkVQT1JUCi0gICAgLyoKLSAgICAgKiBzaW5jZSBDTVUgVjEuNSAKLSAgICAgKi8KLSNkZWZpbmUgU05NUF9QRFVfR0VUCSAgICBTTk1QX01TR19HRVQKLSNkZWZpbmUgU05NUF9QRFVfR0VUTkVYVCAgICBTTk1QX01TR19HRVRORVhUCi0jZGVmaW5lIFNOTVBfUERVX1JFU1BPTlNFICAgU05NUF9NU0dfUkVTUE9OU0UKLSNkZWZpbmUgU05NUF9QRFVfU0VUICAgICAgICBTTk1QX01TR19TRVQKLSNkZWZpbmUgU05NUF9QRFVfR0VUQlVMSyAgICBTTk1QX01TR19HRVRCVUxLCi0jZGVmaW5lIFNOTVBfUERVX0lORk9STSAgICAgU05NUF9NU0dfSU5GT1JNCi0jZGVmaW5lIFNOTVBfUERVX1YyVFJBUCAgICAgU05NUF9NU0dfVFJBUDIKLSNkZWZpbmUgU05NUF9QRFVfUkVQT1JUICAgICBTTk1QX01TR19SRVBPUlQKLSNkZWZpbmUgU05NUF9UUkFQX0FVVEhFTlRJQ0FUSU9ORkFJTFVSRSBTTk1QX1RSQVBfQVVUSEZBSUwKLSNkZWZpbmUgU01JX0lOVEVHRVIgICAgIEFTTl9JTlRFR0VSCi0jZGVmaW5lIFNNSV9TVFJJTkcgICAgICBBU05fT0NURVRfU1RSCi0jZGVmaW5lIFNNSV9PQkpJRCAgICAgICBBU05fT0JKRUNUX0lECi0jZGVmaW5lIFNNSV9OVUxMT0JKICAgICBBU05fTlVMTAotI2RlZmluZSBTTUlfSVBBRERSRVNTICAgQVNOX0lQQUREUkVTUwotI2RlZmluZSBTTUlfQ09VTlRFUjMyCUFTTl9DT1VOVEVSCi0jZGVmaW5lIFNNSV9HQVVHRTMyCUFTTl9HQVVHRQotI2RlZmluZSBTTUlfVU5TSUdORUQzMiAgU01JX0dBVUdFMzIKLSNkZWZpbmUgU01JX1RJTUVUSUNLUyAgIEFTTl9USU1FVElDS1MKLSNkZWZpbmUgU01JX09QQVFVRSAgICAgIEFTTl9PUEFRVUUKLSNkZWZpbmUgU01JX0NPVU5URVI2NCAgIEFTTl9DT1VOVEVSNjQKLSAgICAvKgotICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgKiAqCi0gICAgICogKiAgICAgRnVuY3Rpb24gZGVjbGFyYXRpb25zCi0gICAgICogKiAgICAgYW5kIGdsb2JhbCB2YXJpYWJsZXMKLSAgICAgKiAqCi0gICAgICogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfZHVtcF9wYWNrZXQ7ICAgICAgIC8qIGZyb20gc25tcF9hcGkuaCAqLwotZXh0ZXJuIGludCAgICAgIHF1aWNrX3ByaW50OyAgICAvKiBmcm9tIHNubXBfYXBpLmggKi8KLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+ICAgICAvKiBmb3Igc25tcF9wZHUgJiBzbm1wX3Nlc3Npb24gKi8KLQotaW50ICAgICAgICAgICAgIG1pYl9UeHRUb09pZChjaGFyICosIG9pZCAqKiwgc2l6ZV90ICopOyAvKiBmcm9tIHNubXAuaCAqLwotaW50ICAgICAgICAgICAgIG1pYl9PaWRUb1R4dChvaWQgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCk7ICAgIC8qIGZyb20gc25tcC5oICovCi11X2NoYXIgICAgICAgICAqY211X3NubXBfcGFyc2UobmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgbmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbmd0aCk7ICAgICAgLyogZnJvbSBzbm1wLmggKi8KLQotCi0KLQotICAgICAgICAvKgotICAgICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAqICoKLSAgICAgICAgICogKiBNSUItSUkgZGF0YSBzdHJ1Y3R1cmVzCi0gICAgICAgICAqICogICAgKGZyb20gbWliLmgpIAotICAgICAgICAgKiAqCi0gICAgICAgICAqICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgICAgICovCi0KLQotc3RydWN0IG1pYl9zeXN0ZW0gewotICAgIGNoYXIgICAgICAgICAgICBzeXNEZXNjclszMl07ICAgICAgIC8qIHRleHR1YWwgZGVzY3JpcHRpb24gKi8KLSAgICB1X2NoYXIgICAgICAgICAgc3lzT2JqZWN0SURbMTZdOyAgICAvKiBPQkpFQ1QgSURFTlRJRklFUiBvZiBzeXN0ZW0gKi8KLSAgICB1X2NoYXIgICAgICAgICAgT2JqSURMZW47ICAgLyogbGVuZ3RoIG9mIHN5c09iamVjdElEICovCi0gICAgdV9pbnQgICAgICAgICAgIHN5c1VwVGltZTsgIC8qIFVwdGltZSBpbiAxMDAvcyBvZiBhIHNlY29uZCAqLwotfTsKLQotc3RydWN0IG1pYl9pbnRlcmZhY2UgewotICAgIGludCAgICAgICAgICAgICBpZk51bWJlcjsgICAvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyAqLwotfTsKLQotc3RydWN0IG1pYl9pZkVudHJ5IHsKLSAgICBpbnQgICAgICAgICAgICAgaWZJbmRleDsgICAgLyogaW5kZXggb2YgdGhpcyBpbnRlcmZhY2UgICovCi0gICAgY2hhciAgICAgICAgICAgIGlmRGVzY3JbMzJdOyAgICAgICAgLyogZW5nbGlzaCBkZXNjcmlwdGlvbiBvZiBpbnRlcmZhY2UgKi8KLSAgICBpbnQgICAgICAgICAgICAgaWZUeXBlOyAgICAgLyogbmV0d29yayB0eXBlIG9mIGRldmljZSAgICovCi0gICAgaW50ICAgICAgICAgICAgIGlmTXR1OyAgICAgIC8qIHNpemUgb2YgbGFyZ2VzdCBwYWNrZXQgaW4gYnl0ZXMgICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmU3BlZWQ7ICAgIC8qIGJhbmR3aWR0aCBpbiBiaXRzL3NlYyAgICAqLwotICAgIHVfY2hhciAgICAgICAgICBpZlBoeXNBZGRyZXNzWzExXTsgIC8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLSAgICB1X2NoYXIgICAgICAgICAgUGh5c0FkZHJMZW47ICAgICAgICAvKiBsZW5ndGggb2YgcGh5c0FkZHIgKi8KLSAgICBpbnQgICAgICAgICAgICAgaWZBZG1pblN0YXR1czsgICAgICAvKiBkZXNpcmVkIHN0YXRlIG9mIGludGVyZmFjZSAqLwotICAgIGludCAgICAgICAgICAgICBpZk9wZXJTdGF0dXM7ICAgICAgIC8qIGN1cnJlbnQgb3BlcmF0aW9uYWwgc3RhdHVzICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmTGFzdENoYW5nZTsgICAgICAgLyogdmFsdWUgb2Ygc3lzVXBUaW1lIHdoZW4gY3VycmVudCBzdGF0ZSBlbnRlcmVkICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmSW5PY3RldHM7IC8qIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmSW5VY2FzdFBrdHM7ICAgICAgLyogbnVtYmVyIG9mIHVuaWNhc3QgcGFja2V0cyBkZWxpdmVyZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZJbk5VY2FzdFBrdHM7ICAgICAvKiBudW1iZXIgb2YgYnJvYWRjYXN0cyBvciBtdWx0aWNhc3RzICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmSW5EaXNjYXJkczsgICAgICAgLyogbnVtYmVyIG9mIHBhY2tldHMgZGlzY2FyZGVkIHdpdGggbm8gZXJyb3IgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZJbkVycm9yczsgLyogbnVtYmVyIG9mIHBhY2tldHMgY29udGFpbmluZyBlcnJvcnMgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZJblVua25vd25Qcm90b3M7ICAvKiBudW1iZXIgb2YgcGFja2V0cyB3aXRoIHVua25vd24gcHJvdG9jb2wgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZPdXRPY3RldHM7ICAgICAgICAvKiBudW1iZXIgb2Ygb2N0ZXRzIHRyYW5zbWl0dGVkICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmT3V0VWNhc3RQa3RzOyAgICAgLyogbnVtYmVyIG9mIHVuaWNhc3QgcGFja2V0cyBzZW50ICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmT3V0TlVjYXN0UGt0czsgICAgLyogbnVtYmVyIG9mIGJyb2FkY2FzdCBvciBtdWx0aWNhc3QgcGt0cyAqLwotICAgIHVfaW50ICAgICAgICAgICBpZk91dERpc2NhcmRzOyAgICAgIC8qIG51bWJlciBvZiBwYWNrZXRzIGRpc2NhcmRlZCB3aXRoIG5vIGVycm9yICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmT3V0RXJyb3JzOyAgICAgICAgLyogbnVtYmVyIG9mIHBrdHMgZGlzY2FyZGVkIHdpdGggYW4gZXJyb3IgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZPdXRRTGVuOyAgLyogbnVtYmVyIG9mIHBhY2tldHMgaW4gb3V0cHV0IHF1ZXVlICovCi19OwotCi1zdHJ1Y3QgbWliX2F0RW50cnkgewotICAgIGludCAgICAgICAgICAgICBhdElmSW5kZXg7ICAvKiBpbnRlcmZhY2Ugb24gd2hpY2ggdGhpcyBlbnRyeSBtYXBzICovCi0gICAgdV9jaGFyICAgICAgICAgIGF0UGh5c0FkZHJlc3NbMTFdOyAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBkZXN0aW5hdGlvbiAqLwotICAgIHVfY2hhciAgICAgICAgICBQaHlzQWRkcmVzc0xlbjsgICAgIC8qIGxlbmd0aCBvZiBhdFBoeXNBZGRyZXNzICovCi0gICAgdV9pbnQgICAgICAgICAgIGF0TmV0QWRkcmVzczsgICAgICAgLyogSVAgYWRkcmVzcyBvZiBwaHlzaWNhbCBhZGRyZXNzICovCi19OwotCi1zdHJ1Y3QgbWliX2lwIHsKLSAgICBpbnQgICAgICAgICAgICAgaXBGb3J3YXJkaW5nOyAgICAgICAvKiAxIGlmIGdhdGV3YXksIDIgaWYgaG9zdCAqLwotICAgIGludCAgICAgICAgICAgICBpcERlZmF1bHRUVEw7ICAgICAgIC8qIGRlZmF1bHQgVFRMIGZvciBwa3RzIG9yaWdpbmF0aW5nIGhlcmUgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBJblJlY2VpdmVzOyAgICAgICAvKiBuby4gb2YgSVAgcGFja2V0cyByZWNlaXZlZCBmcm9tIGludGVyZmFjZXMgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBJbkhkckVycm9yczsgICAgICAvKiBudW1iZXIgb2YgcGt0cyBkaXNjYXJkZWQgZHVlIHRvIGhlYWRlciBlcnJvcnMgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBJbkFkZHJFcnJvcnM7ICAgICAvKiBuby4gb2YgcGt0cyBkaXNjYXJkZWQgZHVlIHRvIGJhZCBhZGRyZXNzICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwRm9yd0RhdGFncmFtczsgICAgLyogbnVtYmVyIHBmIHBrdHMgZm9yd2FyZGVkIHRocm91Z2ggdGhpcyBlbnRpdHkgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBJblVua25vd25Qcm90b3M7ICAvKiBuby4gb2YgbG9jYWwtYWRkcmVzc2VkIHBrdHMgdy91bmtub3duIHByb3RvICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwSW5EaXNjYXJkczsgICAgICAgLyogbnVtYmVyIG9mIGVycm9yLWZyZWUgcGFja2V0cyBkaXNjYXJkZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBJbkRlbGl2ZXJzOyAgICAgICAvKiBudW1iZXIgb2YgZGF0YWdyYW1zIGRlbGl2ZXJlZCB0byB1cHBlciBsZXZlbCAqLwotICAgIHVfaW50ICAgICAgICAgICBpcE91dFJlcXVlc3RzOyAgICAgIC8qIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgb3JpZ2luYXRpbmcgbG9jYWxseSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcE91dERpc2NhcmRzOyAgICAgIC8qIG51bWJlciBvZiBlcnJvci1mcmVlIG91dHB1dCBJUCBwa3RzIGRpc2NhcmRlZCAqLwotICAgIHVfaW50ICAgICAgICAgICBpcE91dE5vUm91dGVzOyAgICAgIC8qIG51bWJlciBvZiBJUCBwa3RzIGRpc2NhcmRlZCBkdWUgdG8gbm8gcm91dGUgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSZWFzbVRpbWVvdXQ7ICAgICAvKiBzZWNvbmRzIGZyYWdtZW50IGlzIGhlbGQgYXdhaXRpbmcgcmVhc3NlbWJseSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcFJlYXNtUmVxZHM7ICAgICAgIC8qIG5vLiBvZiBmcmFnbWVudHMgbmVlZGluZyByZWFzc2VtYmx5IChoZXJlKSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcFJlYXNtT0tzOyAvKiBudW1iZXIgb2YgZnJhZ21lbnRzIHJlYXNzZW1ibGVkICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwUmVhc21GYWlsczsgICAgICAgLyogbnVtYmVyIG9mIGZhaWx1cmVzIGluIElQIHJlYXNzZW1ibHkgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBGcmFnT0tzOyAgLyogbnVtYmVyIG9mIGRhdGFncmFtcyBmcmFnbWVudGVkIGhlcmUgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBGcmFnRmFpbHM7ICAgICAgICAvKiBuby4gcGt0cyB1bmFibGUgdG8gYmUgZnJhZ21lbnRlZCBoZXJlICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwRnJhZ0NyZWF0ZXM7ICAgICAgLyogbnVtYmVyIG9mIElQIGZyYWdtZW50cyBjcmVhdGVkIGhlcmUgKi8KLX07Ci0KLXN0cnVjdCBtaWJfaXBBZGRyRW50cnkgewotICAgIHVfaW50ICAgICAgICAgICBpcEFkRW50QWRkcjsgICAgICAgIC8qIElQIGFkZHJlc3Mgb2YgdGhpcyBlbnRyeSAqLwotICAgIGludCAgICAgICAgICAgICBpcEFkRW50SWZJbmRleDsgICAgIC8qIElGIGZvciB0aGlzIGVudHJ5ICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwQWRFbnROZXRNYXNrOyAgICAgLyogc3VibmV0IG1hc2sgb2YgdGhpcyBlbnRyeSAqLwotICAgIGludCAgICAgICAgICAgICBpcEFkRW50QmNhc3RBZGRyOyAgIC8qIHJlYWQgdGhlIE1JQiBmb3IgdGhpcyBvbmUgKi8KLSAgICBpbnQgCSAgICBpcEFkRW50UmVhc21NYXhTaXplOwotCQkvKiBtYXggc2l6ZSBmb3IgZGcgcmVhc3NlbWJseSAgIHtpcEFkZHJFbnRyeSA1fSAqLwotfTsKLQotc3RydWN0IG1pYl9pcFJvdXRlRW50cnkgewotICAgIHVfaW50ICAgICAgICAgICBpcFJvdXRlRGVzdDsgICAgICAgIC8qIGRlc3RpbmF0aW9uIElQIGFkZHIgZm9yIHRoaXMgcm91dGUgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZUlmSW5kZXg7ICAgICAvKiBpbmRleCBvZiBsb2NhbCBJRiBmb3IgdGhpcyByb3V0ZSAqLwotICAgIGludCAgICAgICAgICAgICBpcFJvdXRlTWV0cmljMTsgICAgIC8qIFByaW1hcnkgcm91dGluZyBtZXRyaWMgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZU1ldHJpYzI7ICAgICAvKiBBbHRlcm5hdGUgcm91dGluZyBtZXRyaWMgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZU1ldHJpYzM7ICAgICAvKiBBbHRlcm5hdGUgcm91dGluZyBtZXRyaWMgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZU1ldHJpYzQ7ICAgICAvKiBBbHRlcm5hdGUgcm91dGluZyBtZXRyaWMgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBSb3V0ZU5leHRIb3A7ICAgICAvKiBJUCBhZGRyIG9mIG5leHQgaG9wICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUm91dGVUeXBlOyAgICAgICAgLyogVHlwZSBvZiB0aGlzIHJvdXRlICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUm91dGVQcm90bzsgICAgICAgLyogSG93IHRoaXMgcm91dGUgd2FzIGxlYXJuZWQgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZUFnZTsgLyogTm8uIG9mIHNlY29uZHMgc2luY2UgdXBkYXRpbmcgdGhpcyByb3V0ZSAqLwotfTsKLQotc3RydWN0IG1pYl9pY21wIHsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluTXNnczsgLyogVG90YWwgb2YgSUNNUCBtc2dzIHJlY2VpdmVkICovCi0gICAgdV9pbnQgICAgICAgICAgIGljbXBJbkVycm9yczsgICAgICAgLyogVG90YWwgb2YgSUNNUCBtc2dzIHJlY2VpdmVkIHdpdGggZXJyb3JzICovCi0gICAgdV9pbnQgICAgICAgICAgIGljbXBJbkRlc3RVbnJlYWNoczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluVGltZUV4Y2RzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5QYXJtUHJvYnM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJblNyY1F1ZW5jaHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJblJlZGlyZWN0czsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluRWNob3M7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJbkVjaG9SZXBzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5UaW1lc3RhbXBzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5UaW1lc3RhbXBSZXBzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5BZGRyTWFza3M7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJbkFkZHJNYXNrUmVwczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dE1zZ3M7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRFcnJvcnM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXREZXN0VW5yZWFjaHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRUaW1lRXhjZHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRQYXJtUHJvYnM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRTcmNRdWVuY2hzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0UmVkaXJlY3RzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0RWNob3M7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRFY2hvUmVwczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFRpbWVzdGFtcHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRUaW1lc3RhbXBSZXBzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0QWRkck1hc2tzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0QWRkck1hc2tSZXBzOwotfTsKLQotc3RydWN0IG1pYl90Y3AgewotICAgIGludCAgICAgICAgICAgICB0Y3BSdG9BbGdvcml0aG07ICAgIC8qIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgYWxnb3JpdGhtICovCi0gICAgaW50ICAgICAgICAgICAgIHRjcFJ0b01pbjsgIC8qIG1pbmltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCAobVMpICovCi0gICAgaW50ICAgICAgICAgICAgIHRjcFJ0b01heDsgIC8qIG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCAobVMpICovCi0gICAgaW50ICAgICAgICAgICAgIHRjcE1heENvbm47IC8qIG1heGltdW0gdGNwIGNvbm5lY3Rpb25zIHBvc3NpYmxlICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcEFjdGl2ZU9wZW5zOyAgICAgLyogbnVtYmVyIG9mIFNZTi1TRU5UIC0+IENMT1NFRCB0cmFuc2l0aW9ucyAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BQYXNzaXZlT3BlbnM7ICAgIC8qIG51bWJlciBvZiBTWU4tUkNWRCAtPiBMSVNURU4gdHJhbnNpdGlvbnMgKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwQXR0ZW1wdEZhaWxzOyAgICAvKihTWU4tU0VOVCxTWU4tUkNWRCktPkNMT1NFRCBvciBTWU4tUkNWRC0+TElTVEVOICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcEVzdGFiUmVzZXRzOyAgICAgLyogKEVTVEFCTElTSEVELENMT1NFLVdBSVQpIC0+IENMT1NFRCAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BDdXJyRXN0YWI7ICAgICAgIC8qIG51bWJlciBpbiBFU1RBQkxJU0hFRCBvciBDTE9TRS1XQUlUIHN0YXRlICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcEluU2VnczsgIC8qIG51bWJlciBvZiBzZWdtZW50cyByZWNlaXZlZCAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BPdXRTZWdzOyAvKiBudW1iZXIgb2Ygc2VnbWVudHMgc2VudCAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BSZXRyYW5zU2VnczsgICAgIC8qIG51bWJlciBvZiByZXRyYW5zbWl0dGVkIHNlZ21lbnRzICovCi19OwotCi1zdHJ1Y3QgbWliX3RjcENvbm5FbnRyeSB7Ci0gICAgaW50ICAgICAgICAgICAgIHRjcENvbm5TdGF0ZTsgICAgICAgLyogU3RhdGUgb2YgdGhpcyBjb25uZWN0aW9uICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcENvbm5Mb2NhbEFkZHJlc3M7ICAgICAgICAvKiBsb2NhbCBJUCBhZGRyZXNzIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KLSAgICBpbnQgICAgICAgICAgICAgdGNwQ29ubkxvY2FsUG9ydDsgICAvKiBsb2NhbCBwb3J0IGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwQ29ublJlbUFkZHJlc3M7ICAvKiByZW1vdGUgSVAgYWRkcmVzcyBmb3IgdGhpcyBjb25uZWN0aW9uICovCi0gICAgaW50ICAgICAgICAgICAgIHRjcENvbm5SZW1Qb3J0OyAgICAgLyogcmVtb3RlIHBvcnQgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwotfTsKLQotc3RydWN0IG1pYl91ZHAgewotICAgIHVfaW50ICAgICAgICAgICB1ZHBJbkRhdGFncmFtczsgICAgIC8qIE5vLiBvZiBVRFAgZGF0YWdyYW1zIGRlbGl2ZXJlZCB0byB1c2VycyAqLwotICAgIHVfaW50ICAgICAgICAgICB1ZHBOb1BvcnRzOyAvKiBOby4gb2YgVURQIGRhdGFncmFtcyB0byBwb3J0IHdpdGggbm8gbGlzdGVuZXIgKi8KLSAgICB1X2ludCAgICAgICAgICAgdWRwSW5FcnJvcnM7ICAgICAgICAvKiBOby4gb2YgVURQIGRhdGFncmFtcyB1bmFibGUgdG8gYmUgZGVsaXZlcmVkICovCi0gICAgdV9pbnQgICAgICAgICAgIHVkcE91dERhdGFncmFtczsgICAgLyogTm8uIG9mIFVEUCBkYXRhZ3JhbXMgc2VudCBmcm9tIHRoaXMgZW50aXR5ICovCi19OwotCi1zdHJ1Y3QgbWliX2VncCB7Ci0gICAgdV9pbnQgICAgICAgICAgIGVncEluTXNnczsgIC8qIE5vLiBvZiBFR1AgbXNncyByZWNlaXZlZCB3aXRob3V0IGVycm9yICovCi0gICAgdV9pbnQgICAgICAgICAgIGVncEluRXJyb3JzOyAgICAgICAgLyogTm8uIG9mIEVHUCBtc2dzIHJlY2VpdmVkIHdpdGggZXJyb3IgKi8KLSAgICB1X2ludCAgICAgICAgICAgZWdwT3V0TXNnczsgLyogTm8uIG9mIEVHUCBtc2dzIHNlbnQgKi8KLSAgICB1X2ludCAgICAgICAgICAgZWdwT3V0RXJyb3JzOyAgICAgICAvKiBOby4gb2YgKG91dGdvaW5nKSBFR1AgbXNncyBkcm9wcGVkIGR1ZSB0byBlcnJvciAqLwotfTsKLQotc3RydWN0IG1pYl9lZ3BOZWlnaEVudHJ5IHsKLSAgICBpbnQgICAgICAgICAgICAgZWdwTmVpZ2hTdGF0ZTsgICAgICAvKiBsb2NhbCBFR1Agc3RhdGUgd2l0aCB0aGlzIGVudHJ5J3MgbmVpZ2hib3IgKi8KLSAgICB1X2ludCAgICAgICAgICAgZWdwTmVpZ2hBZGRyOyAgICAgICAvKiBJUCBhZGRyZXNzIG9mIHRoaXMgZW50cnkncyBuZWlnaGJvciAqLwotfTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUX1NOTVBfQ01VX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKaW5kZXggYzZhNDA3Zi4uOTYzMjg5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaApAQCAtMSwzICsxLDEzIEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KICNpZm5kZWYgTkVUU05NUF9DT05UQUlORVJfSAogI2RlZmluZSBORVRTTk1QX0NPTlRBSU5FUl9ICiAKQEAgLTE0LDkgKzI0LDExIEBACiAjZXJyb3IgIlBsZWFzZSBpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gYmVmb3JlIHRoaXMgZmlsZSIKICNlbmRpZgogCisjaW5jbHVkZSA8c3RkbGliLmg+IC8qIGZyZWUoKSAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9mYWN0b3J5Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CiAKICNpZmRlZiAgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtMzEsNyArNDMsMTQgQEAKICAgICBzdHJ1Y3QgbmV0c25tcF9jb250YWluZXJfczsgLyoqIGZvcndhcmQgZGVjbGFyZSAqLwogCiAgICAgLyoKLSAgICAgKiBmdW5jdGlvbiByZXR1cm5pbmcgYW4gaW50IGZvciBhbiBvcGVyYXRpb24gb24gYSBjb250YWluZXIKKyAgICAgKiBmdW5jdGlvbiBmb3IgcGVyZm9ybWluZyBhbiBvcGVyYXRpb24gb24gYSBjb250YWluZXIgd2hpY2gKKyAgICAgKiByZXR1cm5zIChtYXliZSB0aGUgc2FtZSkgY29udGFpbmVyLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3MqIChuZXRzbm1wX2NvbnRhaW5lcl9tb2Rfb3ApCisgICAgICAgIChzdHJ1Y3QgbmV0c25tcF9jb250YWluZXJfcyAqLCB2b2lkICpjb250ZXh0LCB1X2ludCBmbGFncyk7CisKKyAgICAvKgorICAgICAqIGZ1bmN0aW9uIGZvciBzZXR0aW5nIGFuIG9wdGlvbiBvbiBhIGNvbnRhaW5lcgogICAgICAqLwogICAgIHR5cGVkZWYgaW50IChuZXRzbm1wX2NvbnRhaW5lcl9vcHRpb24pKHN0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNldCwgdV9pbnQgZmxhZ3MpOwpAQCAtMTM1LDE3ICsxNTQsMTUgQEAKICAgICAgICAvKgogICAgICAgICAqIHJlbGVhc2UgbWVtb3J5IGZvciBhbiBlbnRyeSBmcm9tIHRoZSBjb250YWluZXIKICAgICAgICAgKi8KLSAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9vcCAgICAqcmVsZWFzZTsKLQotICAgICAgIC8qCi0gICAgICAgICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUga2V5ISAgSWYgeW91IG5lZWQgdG8KLSAgICAgICAgKiBjaGFuZ2UgYSBrZXksIHJlbW92ZSB0aGUgZW50cnksIGNoYW5nZSB0aGUga2V5LAotICAgICAgICAqIGFuZCB0aGUgcmUtYWRkIHRoZSBlbnRyeS4KLSAgICAgICAgKi8KKyAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9vcCAgICAqcmVsZWFzZTsgLyogTk9URTogZGVwcmVjYXRlZC4gVXNlIGZyZWVfaXRlbSAqLworICAgICAgIG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICpmcmVlX2l0ZW07CiAKICAgICAgICAvKgogICAgICAgICAqIGZpbmQgdGhlIGVudHJ5IGluIHRoZSBjb250YWluZXIgd2l0aCB0aGUgc2FtZSBrZXkKICAgICAgICAgKgorICAgICAgICAqIE5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIGtleSEgIElmIHlvdSBuZWVkIHRvCisgICAgICAgICogY2hhbmdlIGEga2V5LCByZW1vdmUgdGhlIGVudHJ5LCBjaGFuZ2UgdGhlIGtleSwKKyAgICAgICAgKiBhbmQgdGhlIHJlLWFkZCB0aGUgZW50cnkuCiAgICAgICAgICovCiAgICAgICAgbmV0c25tcF9jb250YWluZXJfcnRuICAgKmZpbmQ7CiAKQEAgLTE5MSw2ICsyMDgsMTQgQEAKICAgICAgICAgKi8KICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9vcCAgICAqaW5zZXJ0X2ZpbHRlcjsKIAorICAgICAgICAvKgorICAgICAgICAgKiBPUFRJT05BTCBmdW5jdGlvbiB0byBkdXBsaWNhdGUgYSBjb250YWluZXIuIERlZmF1bHRzIHRvIGEgc2hhbGxvdworICAgICAgICAgKiBjb3B5LiBPbmx5IHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGlzIGNvcGllZCAoaS5lLiBzdWItY29udGFpbmVycworICAgICAgICAgKiBub3QgaW5jbHVkZWQpLgorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfbW9kX29wICpkdXBsaWNhdGU7CisKKwogICAgICAgIC8qCiAgICAgICAgICogZnVuY3Rpb24gdG8gY29tcGFyZSB0d28gb2JqZWN0IHN0b3JlZCBpbiB0aGUgY29udGFpbmVyLgogICAgICAgICAqCkBAIC0yMTksMTEgKzI0NCwxNiBAQAogCiAgICAgICAgLyoKICAgICAgICAgKiBzb3J0IGNvdW50LCBmb3IgaXRlcmF0b3JzIHRvIHRyYWNrIChpbnNlcnQvZGVsZXRlCi0gICAgICAgICogYnVtcHMgY291dG5lciwgaW52YWxpZGF0ZXMgaXRlcmF0b3IKKyAgICAgICAgKiBidW1wcyBjb3VudGVyLCBpbnZhbGlkYXRlcyBpdGVyYXRvcikKICAgICAgICAgKi8KICAgICAgICB1X2xvbmcgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmM7CiAKICAgICAgICAvKgorICAgICAgICAqIGZsYWdzCisgICAgICAgICovCisgICAgICAgdV9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKworICAgICAgIC8qCiAgICAgICAgICogY29udGFpbmVycyBjYW4gY29udGFpbiBvdGhlciBjb250YWluZXJzIChhZGRpdGlvbmFsIGluZGV4ZXMpCiAgICAgICAgICovCiAgICAgICAgc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3MgKm5leHQsICpwcmV2OwpAQCAtMjM0LDcgKzI2NCw5IEBACiAgICAgICogaW5pdGlhbGl6ZS9mcmVlIGEgY29udGFpbmVyIG9mIGNvbnRhaW5lciBmYWN0b3JpZXMuIHVzZWQgYnkKICAgICAgKiBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKiBmdW5jdGlvbnMuCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkIG5ldHNubXBfY29udGFpbmVyX2luaXRfbGlzdCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgbmV0c25tcF9jb250YWluZXJfZnJlZV9saXN0KHZvaWQpOwogCiAgICAgLyoKQEAgLTI0OSwxMiArMjgxLDE0IEBACiAgICAgICogc2VhcmNoIGZvciBhbmQgY3JlYXRlIGEgY29udGFpbmVyIGZyb20gYSBsaXN0IG9mIHR5cGVzIG9yIGEKICAgICAgKiBzcGVjaWZpYyB0eXBlLgogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF9jb250YWluZXIgKiBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKGNvbnN0IGNoYXIgKnR5cGVfbGlzdCk7CiAgICAgbmV0c25tcF9jb250YWluZXIgKiBuZXRzbm1wX2NvbnRhaW5lcl9nZXQoY29uc3QgY2hhciAqdHlwZSk7CiAKICAgICAvKgogICAgICAqIHV0aWxpdHkgcm91dGluZXMKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4KG5ldHNubXBfY29udGFpbmVyICpwcmltYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpuZXdfaW5kZXgpOwogCkBAIC0yNjUsNyArMjk5LDkgQEAKICAgICAgKiBjb21tb24gY29tcGFyaXNvbiByb3V0aW5lcwogICAgICAqLwogICAgIC8qKiBmaXJzdCBkYXRhIGVsZW1lbnQgaXMgYSAnbmV0c25tcF9pbmRleCcgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NvbXBhcmVfbmV0c25tcF9pbmRleChjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9uY29tcGFyZV9uZXRzbm1wX2luZGV4KGNvbnN0IHZvaWQgKmxocywgY29uc3Qgdm9pZCAqcmhzKTsKIAogICAgIC8qKiBmaXJzdCBkYXRhIGVsZW1lbnQgaXMgYSAnY2hhciAqJyAqLwpAQCAtMjc2LDcgKzMxMiwxNiBAQAogICAgIGludCBuZXRzbm1wX2NvbXBhcmVfbWVtKGNvbnN0IGNoYXIgKiBsaHMsIHNpemVfdCBsaHNfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiByaHMsIHNpemVfdCByaHNfbGVuKTsKIAorICAgIC8qKiBubyBzdHJ1Y3R1cmUsIGp1c3QgJ2NoYXIgKicgcG9pbnRlcnMgKi8KKyAgICBpbnQgbmV0c25tcF9jb21wYXJlX2RpcmVjdF9jc3RyaW5nKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpOworCisgICAgaW50IG5ldHNubXBfY29tcGFyZV9sb25nKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpOworICAgIGludCBuZXRzbm1wX2NvbXBhcmVfdWxvbmcoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocyk7CisgICAgaW50IG5ldHNubXBfY29tcGFyZV9pbnQzMihjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKTsKKyAgICBpbnQgbmV0c25tcF9jb21wYXJlX3VpbnQzMihjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKTsKKwogICAgIC8qKiBmb3JfZWFjaCBjYWxsYmFjayB0byBjYWxsIGZyZWUgb24gZGF0YSBpdGVtICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICBuZXRzbm1wX2NvbnRhaW5lcl9zaW1wbGVfZnJlZSh2b2lkICpkYXRhLCB2b2lkICpjb250ZXh0KTsKIAogLyoKQEAgLTI4OCwxNSArMzMzLDE1IEBACiAjZGVmaW5lIENPTlRBSU5FUl9TRVRfT1BUSU9OUyh4LG8scmMpICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChOVUxMPT0oeCktPm9wdGlvbnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICByYyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICByYyA9ICh4KS0+b3B0aW9ucyh4LCAxLCBvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAocmMgIT0gLTEgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKHgpLT5mbGFncyB8PSBvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIENPTlRBSU5FUl9DSEVDS19PUFRJT04oeCxvLHJjKSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChOVUxMPT0oeCktPm9wdGlvbnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByYyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByYyA9ICh4KS0+b3B0aW9ucyh4LDAsIG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJjID0geC0+ZmxhZ3MgJiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSgwKQogCiAKQEAgLTMyMywxNjggKzM2OCw2NyBAQAogICAgICAqIGlubGluZSBmdW5jdGlvbnMsIHlvdSBtb3N0IGxpa2VseSBoYXZlIG9wdGltaXphdGlvbnMgdHVybmVkIG9mZi4KICAgICAgKiBFaXRoZXIgdHVybiB0aGVtIGJhY2sgb24sIG9yIGRlZmluZSBORVRTTk1QX05PX0lOTElORQogICAgICAqLwotI2lmbmRlZiBORVRTTk1QX1VTRV9JTkxJTkUgLyogZGVmYXVsdCBpcyB0byBpbmxpbmUgKi8KICAgICAvKgogICAgICAqIGluc2VydCBrIGludG8gYWxsIGNvbnRhaW5lcnMKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBDT05UQUlORVJfSU5TRVJUKG5ldHNubXBfY29udGFpbmVyICp4LCBjb25zdCB2b2lkICprKTsKIAogICAgIC8qCiAgICAgICogcmVtb3ZlIGsgZnJvbSBhbGwgY29udGFpbmVycwogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IENPTlRBSU5FUl9SRU1PVkUobmV0c25tcF9jb250YWluZXIgKngsIGNvbnN0IHZvaWQgKmspOwogCiAgICAgLyoKKyAgICAgKiBkdXBsaWNhdGUgY29udGFpbmVyCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqQ09OVEFJTkVSX0RVUChuZXRzbm1wX2NvbnRhaW5lciAqeCwgdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGZsYWdzKTsKKworICAgIC8qCiAgICAgICogY2xlYXIgYWxsIGNvbnRhaW5lcnMuIFdoZW4gY2xlYXJpbmcgdGhlICpmaXJzdCogY29udGFpbmVyLCBhbmQKICAgICAgKiAqb25seSogdGhlIGZpcnN0IGNvbnRhaW5lciwgY2FsbCB0aGUgZnVuY3Rpb24gZiBmb3IgZWFjaCBpdGVtLgogICAgICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgYWxsIGNvbnRhaW5lcnMgc2hvdWxkIGJlIGVtcHR5LgogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCBDT05UQUlORVJfQ0xFQVIobmV0c25tcF9jb250YWluZXIgKngsIG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICpmLAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYyk7CisKKyAgICAvKgorICAgICAqIGNsZWFyIGFsbCBjb250YWluZXJzLiBXaGVuIGNsZWFyaW5nIHRoZSAqZmlyc3QqIGNvbnRhaW5lciwgYW5kCisgICAgICogKm9ubHkqIHRoZSBmaXJzdCBjb250YWluZXIsIGNhbGwgdGhlIGZyZWVfaXRlbSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLgorICAgICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgYWxsIGNvbnRhaW5lcnMgc2hvdWxkIGJlIGVtcHR5LgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCBDT05UQUlORVJfRlJFRV9BTEwobmV0c25tcF9jb250YWluZXIgKngsIHZvaWQgKmMpOworCiAgICAgLyoKICAgICAgKiBmcmVlIGFsbCBjb250YWluZXJzCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgQ09OVEFJTkVSX0ZSRUUobmV0c25tcF9jb250YWluZXIgKngpOwotI2Vsc2UKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbgotICAgICAqIGNvbnRhaW5lci5jLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KLSAgICAgKi8KLSAgICBORVRTTk1QX1NUQVRJQ19JTkxJTkUgLyogZ2NjIGRvY3MgcmVjb21tZW5kIHN0YXRpYyB3L2lubGluZSAqLwotICAgIGludCBDT05UQUlORVJfSU5TRVJUX0hFTFBFUihuZXRzbm1wX2NvbnRhaW5lciogeCwgY29uc3Qgdm9pZCogaykKLSAgICB7Ci0gICAgICAgIHdoaWxlKHggJiYgeC0+aW5zZXJ0X2ZpbHRlciAmJiB4LT5pbnNlcnRfZmlsdGVyKHgsaykgPT0gMSkKLSAgICAgICAgICAgIHggPSB4LT5uZXh0OwotICAgICAgICBpZih4KSB7Ci0gICAgICAgICAgICBpbnQgcmMgPSB4LT5pbnNlcnQoeCxrKTsKLSAgICAgICAgICAgIGlmKHJjKQotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywiZXJyb3Igb24gc3ViY29udGFpbmVyICclcycgaW5zZXJ0ICglZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgeC0+Y29udGFpbmVyX25hbWUgPyB4LT5jb250YWluZXJfbmFtZSA6ICIiLCByYyk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlRfSEVMUEVSKHgtPm5leHQsIGspOwotICAgICAgICAgICAgICAgIGlmKHJjKQotICAgICAgICAgICAgICAgICAgICB4LT5yZW1vdmUoeCxrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbgotICAgICAqIGNvbnRhaW5lci5jLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KLSAgICAgKi8KLSAgICBORVRTTk1QX1NUQVRJQ19JTkxJTkUgLyogZ2NjIGRvY3MgcmVjb21tZW5kIHN0YXRpYyB3L2lubGluZSAqLwotICAgIGludCBDT05UQUlORVJfSU5TRVJUKG5ldHNubXBfY29udGFpbmVyKiB4LCBjb25zdCB2b2lkKiBrKQotICAgIHsKLSAgICAgICAgLyoqIHN0YXJ0IGF0IGZpcnN0IGNvbnRhaW5lciAqLwotICAgICAgICB3aGlsZSh4LT5wcmV2KQotICAgICAgICAgICAgeCA9IHgtPnByZXY7Ci0gICAgICAgIHJldHVybiBDT05UQUlORVJfSU5TRVJUX0hFTFBFUih4LCBrKTsKLSAgICB9Ci0KLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbgotICAgICAqIGNvbnRhaW5lci5jLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KLSAgICAgKi8KLSAgICBORVRTTk1QX1NUQVRJQ19JTkxJTkUgLyogZ2NjIGRvY3MgcmVjb21tZW5kIHN0YXRpYyB3L2lubGluZSAqLwotICAgIGludCBDT05UQUlORVJfUkVNT1ZFKG5ldHNubXBfY29udGFpbmVyICp4LCBjb25zdCB2b2lkICprKQotICAgIHsKLSAgICAgICAgaW50IHJjMiwgcmMgPSAwOwotICAgICAgICAKLSAgICAgICAgLyoqIHN0YXJ0IGF0IGxhc3QgY29udGFpbmVyICovCi0gICAgICAgIHdoaWxlKHgtPm5leHQpCi0gICAgICAgICAgICB4ID0geC0+bmV4dDsKLSAgICAgICAgd2hpbGUoeCkgewotICAgICAgICAgICAgcmMyID0geC0+cmVtb3ZlKHgsayk7Ci0gICAgICAgICAgICAvKiogaWdub3JlIHJlbW92ZSBlcnJvcnMgaWYgdGhlcmUgaXMgYSBmaWx0ZXIgaW4gcGxhY2UgKi8KLSAgICAgICAgICAgIGlmICgocmMyKSAmJiAoTlVMTCA9PSB4LT5pbnNlcnRfZmlsdGVyKSkgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIG9uIHN1YmNvbnRhaW5lciByZW1vdmUgKCVkKVxuIiwgcmMyKTsKLSAgICAgICAgICAgICAgICByYyA9IHJjMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHggPSB4LT5wcmV2OwotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLSAgICAKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbgotICAgICAqIGNvbnRhaW5lci5jLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KLSAgICAgKi8KLSAgICBORVRTTk1QX1NUQVRJQ19JTkxJTkUgLyogZ2NjIGRvY3MgcmVjb21tZW5kIHN0YXRpYyB3L2lubGluZSAqLwotICAgIGludCBDT05UQUlORVJfRlJFRShuZXRzbm1wX2NvbnRhaW5lciAqeCkKLSAgICB7Ci0JaW50ICByYzIsIHJjID0gMDsKLSAgICAgICAgCi0gICAgICAgIC8qKiBzdGFydCBhdCBsYXN0IGNvbnRhaW5lciAqLwotICAgICAgICB3aGlsZSh4LT5uZXh0KQotICAgICAgICAgICAgeCA9IHgtPm5leHQ7Ci0gICAgICAgIHdoaWxlKHgpIHsKLSAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICp0bXA7Ci0gICAgICAgICAgICB0bXAgPSB4LT5wcmV2OwotICAgICAgICAgICAgaWYgKE5VTEwgIT0geC0+Y29udGFpbmVyX25hbWUpCi0gICAgICAgICAgICAgICAgU05NUF9GUkVFKHgtPmNvbnRhaW5lcl9uYW1lKTsKLSAgICAgICAgICAgIHJjMiA9IHgtPmNmcmVlKHgpOwotICAgICAgICAgICAgaWYgKHJjMikgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIG9uIHN1YmNvbnRhaW5lciBjZnJlZSAoJWQpXG4iLCByYzIpOwotICAgICAgICAgICAgICAgIHJjID0gcmMyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeCA9IHRtcDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmM7Ci0gICAgfQotCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGZ1bmN0aW9uIHZlcnNpb24gaW4KLSAgICAgKiBjb250YWluZXIuYy4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCi0gICAgICovCi0gICAgLyoKLSAgICAgKiBjbGVhciBhbGwgY29udGFpbmVycy4gV2hlbiBjbGVhcmluZyB0aGUgKmZpcnN0KiBjb250YWluZXIsIGFuZAotICAgICAqICpvbmx5KiB0aGUgZmlyc3QgY29udGFpbmVyLCBjYWxsIHRoZSBmdW5jdGlvbiBmIGZvciBlYWNoIGl0ZW0uCi0gICAgICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBhbGwgY29udGFpbmVycyBzaG91bGQgYmUgZW1wdHkuCi0gICAgICovCi0gICAgTkVUU05NUF9TVEFUSUNfSU5MSU5FIC8qIGdjYyBkb2NzIHJlY29tbWVuZCBzdGF0aWMgdy9pbmxpbmUgKi8KLSAgICB2b2lkIENPTlRBSU5FUl9DTEVBUihuZXRzbm1wX2NvbnRhaW5lciAqeCwgbmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjKQotICAgIHsKLSAgICAgICAgLyoqIHN0YXJ0IGF0IGxhc3QgY29udGFpbmVyICovCi0gICAgICAgIHdoaWxlKHgtPm5leHQpCi0gICAgICAgICAgICB4ID0geC0+bmV4dDsKLSAgICAgICAgd2hpbGUoeC0+cHJldikgewotICAgICAgICAgICAgeC0+Y2xlYXIoeCwgTlVMTCwgYyk7Ci0gICAgICAgICAgICB4ID0geC0+cHJldjsKLSAgICAgICAgfQotICAgICAgICB4LT5jbGVhcih4LCBmLCBjKTsKLSAgICB9Ci0KLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbgotICAgICAqIGNvbnRhaW5lci5jLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KLSAgICAgKi8KLSAgICAvKgotICAgICAqIEZpbmQgYSBzdWItY29udGFpbmVyIHdpdGggdGhlIGdpdmVuIG5hbWUKLSAgICAgKi8KLSAgICBORVRTTk1QX1NUQVRJQ19JTkxJTkUgLyogZ2NjIGRvY3MgcmVjb21tZW5kIHN0YXRpYyB3L2lubGluZSAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF9jb250YWluZXIgKlNVQkNPTlRBSU5FUl9GSU5EKG5ldHNubXBfY29udGFpbmVyICp4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKChOVUxMID09IHgpIHx8IChOVUxMID09IG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUpOwogCi0gICAgICAgIC8qKiBzdGFydCBhdCBmaXJzdCBjb250YWluZXIgKi8KLSAgICAgICAgd2hpbGUoeC0+cHJldikKLSAgICAgICAgICAgIHggPSB4LT5wcmV2OwotICAgICAgICB3aGlsZSh4KSB7Ci0gICAgICAgICAgICBpZiAoKE5VTEwgIT0geC0+Y29udGFpbmVyX25hbWUpICYmCi0gICAgICAgICAgICAgICAgKDAgPT0gc3RyY21wKG5hbWUseC0+Y29udGFpbmVyX25hbWUpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHggPSB4LT5uZXh0OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0KKyAgICAvKgorICAgICAqIElOVEVSTkFMIHV0aWxpdHkgcm91dGluZXMgZm9yIGNvbnRhaW5lciBpbXBsZW1lbnRhdGlvbnMKKyAgICAgKi8KKyAgICB2b2lkIG5ldHNubXBfaW5pdF9jb250YWluZXIobmV0c25tcF9jb250YWluZXIgICAgICAgICAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfcmMgICAgICAqaW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfcmMgICAgICAqY2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3NpemUgICAgKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUgKmNtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfb3AgICAgICAqaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9vcCAgICAgICpyZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3J0biAgICAgKmZuZCk7CisgICAgLyoqIER1cGxpY2F0ZSBjb250YWluZXIgbWV0YS1kYXRhLiAqLworICAgIGludCBuZXRzbm1wX2NvbnRhaW5lcl9kYXRhX2R1cChuZXRzbm1wX2NvbnRhaW5lciAqZHVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqYyk7CiAKLSNlbmRpZgogICAgIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTUzNCwxMiArNDc4LDIwIEBACiAKICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yX3J0biAgICAgICAgICAqbmV4dDsKIAorICAgICAgICAvKgorICAgICAgICAgKiByZW1vdmUgd2lsbCByZW1vdmUgdGhlIGl0ZW0gYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIHRoZW4gYmFjayB1cAorICAgICAgICAgKiB0aGUgaXRlcmF0b3IgdG8gdGhlIHByZXZpb3VzIGl0ZW0uIFRoYXQgd2F5IG5leHQgd2lsbCBtb3ZlIHRvIHRoZQorICAgICAgICAgKiBpdGVtICh0aGUgb25lIHRoYXQgcmVwbGFjZWQgdGhlIHJlbW92ZWQgaXRlbS4KKyAgICAgICAgICovCisgICAgICAgbmV0c25tcF9pdGVyYXRvcl9yYyAgICAgICAgICAgKnJlbW92ZTsKKwogICAgIH0gbmV0c25tcF9pdGVyYXRvcjsKIAogCiAjZGVmaW5lIElURVJBVE9SX0ZJUlNUKHgpICB4LT5maXJzdCh4KQogI2RlZmluZSBJVEVSQVRPUl9ORVhUKHgpICAgeC0+bmV4dCh4KQogI2RlZmluZSBJVEVSQVRPUl9MQVNUKHgpICAgeC0+bGFzdCh4KQorI2RlZmluZSBJVEVSQVRPUl9SRU1PVkUoeCkgeC0+cmVtb3ZlKHgpCiAjZGVmaW5lIElURVJBVE9SX1JFTEVBU0UoeCkgZG8geyB4LT5yZWxlYXNlKHgpOyB4ID0gTlVMTDsgfSB3aGlsZSgwKQogICAgIAogI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKaW5kZXggM2E3ZTIzNy4uMzM2YThlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCkBAIC0zOSw2ICszOSw3IEBACiAKICAgICBpbnQgbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQobmV0c25tcF9jb250YWluZXIgKmMsIGludCBzZXQsIHVfaW50IGZsYWdzKTsKIAorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKaW5kZXggMDM5YmE0OC4uNDk0ZjIxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCkBAIC0xNiw2ICsxNiw3IEBACiAgICAgbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfY29udGFpbmVyX2dldF9zb3J0ZWRfc2luZ2x5X2xpbmtlZF9saXN0KHZvaWQpOwogICAgIG5ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX2NvbnRhaW5lcl9nZXRfc2luZ2x5X2xpbmtlZF9saXN0KGludCBmaWZvKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCBuZXRzbm1wX2NvbnRhaW5lcl9zc2xsX2luaXQodm9pZCk7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaAppbmRleCA2NDg5NjA2Li5hNTVkMzQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaApAQCAtMTAsNiArMTAsNyBAQAogCiBuZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9jb250YWluZXJfZ2V0X251bGwodm9pZCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgbmV0c25tcF9jb250YWluZXJfbnVsbF9pbml0KHZvaWQpOwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAppbmRleCBhNjRlMDdhLi41NGEzYTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCkBAIC01Niw2ICs1Niw3IEBACiAgICAgICAgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqZGF0YV9saXN0X2ZyZWVfcHRyOwogICAgIH0gbmV0c25tcF9kYXRhX2xpc3Rfc2F2ZWluZm87CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfZGF0YV9saXN0ICoKICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdChjb25zdCBjaGFyICosIHZvaWQgKiwgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSogKTsKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUobmV0c25tcF9kYXRhX2xpc3QgKipoZWFkLApAQCAtNjQsMTcgKzY1LDIzIEBACiAgICAgICBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfZGF0YShuZXRzbm1wX2RhdGFfbGlzdCAqKmhlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqIGJlZXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgKm5ldHNubXBfZ2V0X2xpc3RfZGF0YShuZXRzbm1wX2RhdGFfbGlzdCAqaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5vZGUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfZnJlZV9saXN0X2RhdGEobmV0c25tcF9kYXRhX2xpc3QgKmhlYWQpOyAgICAvKiBzaW5nbGUgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShuZXRzbm1wX2RhdGFfbGlzdCAqaGVhZCk7ICAgICAgICAvKiBtdWx0aXBsZSAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX2xpc3Rfbm9kZShuZXRzbm1wX2RhdGFfbGlzdCAqKnJlYWxoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqCiAgICAgbmV0c25tcF9nZXRfbGlzdF9ub2RlKG5ldHNubXBfZGF0YV9saXN0ICpoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKTsKIAogICAgIC8qKiBkZXByZWNpYXRlZDogdXNlIG5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlKCkgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2FkZF9saXN0X2RhdGEobmV0c25tcF9kYXRhX2xpc3QgKipoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKm5vZGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAppbmRleCBhZWQ0MzVhLi4zYzNjNTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTI0LDE5ICsyNCwyMSBAQAogI2lmbmRlZiBERUZBVUxUX1NUT1JFX0gKICNkZWZpbmUgREVGQVVMVF9TVE9SRV9ICiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCiAjZGVmaW5lIE5FVFNOTVBfRFNfTUFYX0lEUyAzCi0jZGVmaW5lIE5FVFNOTVBfRFNfTUFYX1NVQklEUyA0MCAgICAgICAgLyogbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA4ICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTUFYX1NVQklEUyA0OCAgICAgICAgLyogbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA4ICovCiAKICAgICAvKgogICAgICAqIGJlZ2luIHN0b3JhZ2UgZGVmaW5pdGlvbnMgCiAgICAgICovCiAvKioKICAqIEBkZWYgTkVUU05NUF9EU19MSUJSQVJZX0lECi0gKiBUaGVzZSBkZWZpbml0aW9ucyBjb3JyZXNwb25kIHdpdGggdGhlICJzdG9yaWQiIGFyZ3VtZW50IHRvIHRoZSBBUEkgCisgKiBUaGVzZSBkZWZpbml0aW9ucyBjb3JyZXNwb25kIHdpdGggdGhlICJzdG9yaWQiIGFyZ3VtZW50IHRvIHRoZSBBUEkuCiAgKi8KICNkZWZpbmUgTkVUU05NUF9EU19MSUJSQVJZX0lEICAgICAwCiAjZGVmaW5lIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQgMQpAQCAtODgsMjMgKzkwLDM1IEBACiAjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfUEVSU0lTVEVOVF9MT0FEICAzNSAvKiBkb24ndCBsb2FkIHBlcnNpc3RlbnQgZmlsZSAqLwogI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfU0FWRSAgMzYgLyogZG9uJ3Qgc2F2ZSBwZXJzaXN0ZW50IGZpbGUgKi8KICNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVBQRU5EX0xPR0ZJTEVTICAgICAzNyAvKiBhcHBlbmQsIGRvbid0IG92ZXJ3cml0ZSwgbG9nIGZpbGVzICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX05PX0RJU0NPVkVSWSAgICAgICAgMzggLyogZG9uJ3Qgc3VwcG9ydCBSRkM1MzQzIGNvbnRleHRFbmdpbmVJRCBkaXNjb3ZlcnkgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVggICAgICAzOSAvKiBUU00ncyBzaW1wbGUgc2VjdXJpdHkgbmFtZSBtYXBwaW5nICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RPTlRfTE9BRF9IT1NUX0ZJTEVTIDQwIC8qIGRvbid0IHJlYWQgaG9zdC5jb25mIGZpbGVzICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0ROU1NFQ19XQVJOX09OTFkgICAgIDQxIC8qIHRyZWFkIEROU1NFQyBlcnJvcnMgYXMgd2FybmluZ3MgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUFYX0JPT0xfSUQgICAgICAgICAgNDggLyogbWF0Y2ggTkVUU05NUF9EU19NQVhfU1VCSURTICovCiAKICAgICAvKgogICAgICAqIGxpYnJhcnkgaW50ZWdlcnMgCiAgICAgICovCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9XQVJOSU5HUyAgMAotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRUNMRVZFTCAgICAgIDEKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU05NUFZFUlNJT04gICAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCAgMwotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVCAgNAotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9TVUZGSVhfT05MWSAgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX1dBUk5JTkdTICAgICAgICAgMAorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRUNMRVZFTCAgICAgICAgICAgICAxCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NOTVBWRVJTSU9OICAgICAgICAgIDIKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUICAgICAgICAgMworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVCAgICA0CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX1NVRkZJWF9PTkxZICAgIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFUCiAjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NUUklOR19PVVRQVVRfRk9STUFUIDUKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfSEVYX09VVFBVVF9MRU5HVEggNgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRVJWRVJTRU5EQlVGICAgNyAvKiBzZW5kIGJ1ZmZlciAoc2VydmVyKSAqLwotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRVJWRVJSRUNWQlVGICAgOCAvKiByZWNlaXZlIGJ1ZmZlciAoc2VydmVyKSAqLwotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DTElFTlRTRU5EQlVGICAgOSAvKiBzZW5kIGJ1ZmZlciAoY2xpZW50KSAqLwotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DTElFTlRSRUNWQlVGICAxMCAvKiByZWNlaXZlIGJ1ZmZlciAoY2xpZW50KSAqLwotCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0hFWF9PVVRQVVRfTEVOR1RIICAgIDYKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VSVkVSU0VOREJVRiAgICAgICAgNyAvKiBzZW5kIGJ1ZmZlciAoc2VydmVyKSAqLworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRVJWRVJSRUNWQlVGICAgICAgICA4IC8qIHJlY2VpdmUgYnVmZmVyIChzZXJ2ZXIpICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NMSUVOVFNFTkRCVUYgICAgICAgIDkgLyogc2VuZCBidWZmZXIgKGNsaWVudCkgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0xJRU5UUkVDVkJVRiAgICAgICAxMCAvKiByZWNlaXZlIGJ1ZmZlciAoY2xpZW50KSAqLworI2RlZmluZSBORVRTTk1QX0RTX1NTSERPTUFJTl9TT0NLX1BFUk0gICAgIDExCisjZGVmaW5lIE5FVFNOTVBfRFNfU1NIRE9NQUlOX0RJUl9QRVJNICAgICAgMTIKKyNkZWZpbmUgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19VU0VSICAgICAxMgorI2RlZmluZSBORVRTTk1QX0RTX1NTSERPTUFJTl9TT0NLX0dST1VQICAgIDEzCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RJTUVPVVQgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkVUUklFUyAgICAgICAgICAgICAxNQorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NQVhfSU5UX0lEICAgICAgICAgIDQ4IC8qIG1hdGNoIE5FVFNOTVBfRFNfTUFYX1NVQklEUyAqLworICAgIAogICAgIC8qCiAgICAgICogc3BlY2lhbCBtZWFuaW5ncyBmb3IgdGhlIGRlZmF1bHQgU05NUCB2ZXJzaW9uIHNsb3QgKE5FVFNOTVBfRFNfTElCX1NOTVBWRVJTSU9OKSAKICAgICAgKi8KQEAgLTE0MywyOCArMTU3LDU0IEBACiAjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FQUFRZUEVTICAgICAgICAgIDIwCiAjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0tTTV9LRVlUQUIgICAgICAgIDIxCiAjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0tTTV9TRVJWSUNFX05BTUUgIDIyCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1g1MDlfQ0xJRU5UX1BVQiAgIDIzCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1g1MDlfU0VSVkVSX1BVQiAgIDI0CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NTSFRPU05NUF9TT0NLRVQgIDI1CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NFUlRfRVhUUkFfU1VCRElSIDI2CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0hPU1ROQU1FICAgICAgICAgIDI3CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1g1MDlfQ1JMX0ZJTEUgICAgIDI4CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RMU19BTEdPUklUTVMgICAgIDI5CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RMU19MT0NBTF9DRVJUICAgIDMwCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RMU19QRUVSX0NFUlQgICAgIDMxCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NTSF9VU0VSTkFNRSAgICAgIDMyCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NTSF9QVUJLRVkgICAgICAgIDMzCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NTSF9QUklWS0VZICAgICAgIDM0CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX01BWF9TVFJfSUQgICAgICAgIDQ4IC8qIG1hdGNoIE5FVFNOTVBfRFNfTUFYX1NVQklEUyAqLwogCiAgICAgLyoKICAgICAgKiBlbmQgc3RvcmFnZSBkZWZpbml0aW9ucyAKICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oaW50IHN0b3JlaWQsIGludCB3aGljaCwgaW50IHZhbHVlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9ib29sZWFuKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4oaW50IHN0b3JlaWQsIGludCB3aGljaCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIGludCB2YWx1ZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfaW50KGludCBzdG9yZWlkLCBpbnQgd2hpY2gpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhpbnQgc3RvcmVpZCwgaW50IHdoaWNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpuZXRzbm1wX2RzX2dldF9zdHJpbmcoaW50IHN0b3JlaWQsIGludCB3aGljaCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfdm9pZChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCB2b2lkICp2YWx1ZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAqbmV0c25tcF9kc19nZXRfdm9pZChpbnQgc3RvcmVpZCwgaW50IHdoaWNoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyh1X2NoYXIgdHlwZSwgY29uc3QgY2hhciAqZnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgaW50IHN0b3JlaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2hpY2gpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliKHVfY2hhciB0eXBlLCBjb25zdCBjaGFyICpmdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBpbnQgc3RvcmVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aGljaCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19wYXJzZV9ib29sZWFuKGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfZHNfc2h1dGRvd24odm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MWJiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgKQEAgLTAsMCArMSw2MyBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaWZuZGVmIE5FVFNOTVBfRElSX1VUSUxTX0gKKyNkZWZpbmUgTkVUU05NUF9ESVJfVVRJTFNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIGZpbHRlciBmdW5jdGlvbjsgcmV0dXJuIDEgdG8gaW5jbHVkZSBmaWxlLCAwIHRvIGV4Y2x1ZGUKKyAgICAgKi8KKyNkZWZpbmUgTkVUU05NUF9ESVJfRVhDTFVERSAwCisjZGVmaW5lIE5FVFNOTVBfRElSX0lOQ0xVREUgMQorICAgIHR5cGVkZWYgaW50IChuZXRzbm1wX2RpcmVjdG9yeV9maWx0ZXIpKGNvbnN0IHZvaWQgKnRleHQsIHZvaWQgKmN0eCk7CisKKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICoKKyAgICAgKiBQcm90b3R5cGVzCisgICAgICovCisgICAgbmV0c25tcF9jb250YWluZXIgKgorICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkX3NvbWUobmV0c25tcF9jb250YWluZXIgKnVzZXJfY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGlybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2ZpbHRlciAqZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZmlsdGVyX2N0eCwgdV9pbnQgZmxhZ3MpOworCisjZGVmaW5lIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkKGMsZCxmKSBcCisgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX3JlYWRfc29tZShjLGQsTlVMTCxOVUxMLGYpOworCisgICAgdm9pZCBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqYyk7CisKKyAgICAgICAgCisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqCisgICAgICogZmxhZ3MKKyAgICAgKi8KKyNkZWZpbmUgTkVUU05NUF9ESVJfUkVDVVJTRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBORVRTTk1QX0RJUl9SRUxBVElWRV9QQVRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIE5FVFNOTVBfRElSX1NPUlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKy8qKiBkb24ndCByZXR1cm4gbnVsbCBpZiBkaXIgZW1wdHkgKi8KKyNkZWZpbmUgTkVUU05NUF9ESVJfRU1QVFlfT0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorLyoqIHN0b3JlIG5ldHNubXBfZmlsZSBpbnN0ZWFkIG9mIGZpbGVuYW1lcyAqLworI2RlZmluZSBORVRTTk1QX0RJUl9OU0ZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisvKiogbG9hZCBzdGF0cyBpbiBuZXRzbm1wX2ZpbGUgKi8KKyNkZWZpbmUgTkVUU05NUF9ESVJfTlNGSUxFX1NUQVRTICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorCisgICAgCisgICAgICAgIAorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5FVFNOTVBfRElSX1VUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCmluZGV4IDRiNzI0MmQuLmVkZTY3YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaApAQCAtODgsOCArODgsMTUgQEAKICAqCiAgKiBTaWRlIEVmZmVjdHM6IE5vbmUKICAqLworTkVUU05NUF9JTVBPUlQKIHZvaWQgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvKGludCAqbnVtZmRzLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsIGZkX3NldCAqZXhjZXB0ZmRzKTsKIAorTkVUU05NUF9JTVBPUlQKK3ZvaWQgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvMihpbnQgKm51bWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqcmVhZGZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqd3JpdGVmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmV4Y2VwdGZkcyk7CisKIC8qCiAgKiBEaXNwYXRjaCBFeHRlcm5hbCBFdmVudHMKICAqCkBAIC0xMTQsNyArMTIxLDEzIEBACiAgKgogICogU2lkZSBFZmZlY3RzOiBOb25lCiAgKi8KK05FVFNOTVBfSU1QT1JUCiB2b2lkIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzKGludCAqY291bnQsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywgZmRfc2V0ICpleGNlcHRmZHMpOworTkVUU05NUF9JTVBPUlQKK3ZvaWQgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMyKGludCAqY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqcmVhZGZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICp3cml0ZWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpleGNlcHRmZHMpOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oCmluZGV4IGZhOWI1YTQuLjlmNWNkY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaApAQCAtMTMsMzIgKzEzLDIzIEBACiAgICAgICovCiAgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9maWxlX3MgewogICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICogZmlsZSBuYW1lCi0gICAgICAgICAqLworICAgICAgICAvKiogZmlsZSBuYW1lICovCiAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgKm5hbWU7CiAgICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgKiBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBmaWxlCi0gICAgICAgICAqLworICAgICAgICAvKiogZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSAqLwogICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBmZDsKIAotICAgICAgICAvKgotICAgICAgICAgKiBmaWxlc3lzdGVtIGZsYWdzCi0gICAgICAgICAqLworICAgICAgICAvKiogZmlsZXN5c3RlbSBmbGFncyAqLwogICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBmc19mbGFnczsKIAotICAgICAgICAvKgotICAgICAgICAgKiBvcGVuL2NyZWF0ZSBtb2RlCi0gICAgICAgICAqLworICAgICAgICAvKiogb3Blbi9jcmVhdGUgbW9kZSAqLwogICAgICAgICBtb2RlX3QgICAgICAgICAgICAgICAgICBtb2RlOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIG5ldHNubXAgZmxhZ3MKLSAgICAgICAgICovCisgICAgICAgIC8qKiBuZXRzbm1wIGZsYWdzICovCiAgICAgICAgIHVfaW50ICAgICAgICAgICAgICAgICAgIG5zX2ZsYWdzOwogCi0KKyAgICAgICAgLyoqIGZpbGUgc3RhdHMgKi8KKyAgICAgICAgc3RydWN0IHN0YXQgICAgICAgICAgICAqc3RhdHM7CiAKICAgICAgICAgLyoKICAgICAgICAgICogZnV0dXJlIGV4cGFuc2lvbgpAQCAtNTQsNiArNDUsOSBAQAogICAgICAqIFByb3RvdHlwZXMKICAgICAgKgogICAgICAqLworICAgIG5ldHNubXBfZmlsZSAqbmV0c25tcF9maWxlX25ldyhjb25zdCBjaGFyICpuYW1lLCBpbnQgZnNfZmxhZ3MsIG1vZGVfdCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBuc19mbGFncyk7CisKICAgICBuZXRzbm1wX2ZpbGUgKiBuZXRzbm1wX2ZpbGVfY3JlYXRlKHZvaWQpOwogICAgIG5ldHNubXBfZmlsZSAqIG5ldHNubXBfZmlsZV9maWxsKG5ldHNubXBfZmlsZSAqIGZpbGVpLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmc19mbGFncywgbW9kZV90IG1vZGUsIHVfaW50IG5zX2ZsYWdzKTsKQEAgLTYyLDcgKzU2LDExIEBACiAgICAgaW50IG5ldHNubXBfZmlsZV9vcGVuKG5ldHNubXBfZmlsZSAqIGZpbGVpKTsKICAgICBpbnQgbmV0c25tcF9maWxlX2Nsb3NlKG5ldHNubXBfZmlsZSAqIGZpbGVpKTsKIAotICAgICAgICAKKyAgICAvKiogc3VwcG9ydCBuZXRzbm1wX2ZpbGUgY29udGFpbmVycyAqLworICAgIGludCBuZXRzbm1wX2ZpbGVfY29tcGFyZV9uYW1lKG5ldHNubXBfZmlsZSAqbGhzLCBuZXRzbm1wX2ZpbGUgKnJocyk7CisgICAgdm9pZCBuZXRzbm1wX2ZpbGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9maWxlICpmaWxlLCB2b2lkICpjb250ZXh0KTsKKworCiAKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAqCkBAIC03MCw3ICs2OCw4IEBACiAgICAgICoKICAgICAgKi8KICNkZWZpbmUgTkVUU05NUF9GSUxFX05PX0FVVE9DTE9TRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE5FVFNOTVBfRklMRV8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORVRTTk1QX0ZJTEVfU1RBVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkVUU05NUF9GSUxFX0FVVE9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CiAKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKaW5kZXggMGY0ZDY5MS4uZjcwZmZlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaApAQCAtMSw2ICsxLDEyIEBACiAjaWZuZGVmIF9HRVRPUFRfSF8KICNkZWZpbmUgX0dFVE9QVF9IXyAxCiAKKyNpZm5kZWYgTkVUX1NOTVBfQ09ORklHX0gKKyNlcnJvciA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDxuZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oPi4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSEFWRV9HRVRPUFRfSCkKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgpAQCAtMTIsNCArMTgsNyBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfR0VUT1BUX0ggKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCmluZGV4IGZkYzY4MDUuLjljN2M4OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCkBAIC0xMywxMSArMTMsMTUgQEAKICAgICB2b2lkICAgICAgICAgICAgbXVsdEJ5MTAoVTY0LCBVNjQgKik7CiAgICAgdm9pZCAgICAgICAgICAgIGluY3JCeVUxNihVNjQgKiwgdW5zaWduZWQgaW50KTsKICAgICB2b2lkICAgICAgICAgICAgaW5jckJ5VTMyKFU2NCAqLCB1bnNpZ25lZCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHplcm9VNjQoVTY0ICopOwogICAgIGludCAgICAgICAgICAgICBpc1plcm9VNjQoY29uc3QgVTY0ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50VTY0KGNoYXIgKiwgY29uc3QgVTY0ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50STY0KGNoYXIgKiwgY29uc3QgVTY0ICopOwogICAgIGludCAgICAgICAgICAgICByZWFkNjQoVTY0ICosIGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdTY0U3VidHJhY3QoY29uc3QgVTY0ICogcHU2NG9uZSwgY29uc3QgVTY0ICogcHU2NHR3bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogcHU2NG91dCk7CiAgICAgdm9pZCAgICAgICAgICAgIHU2NEluY3IoVTY0ICogcHU2NG91dCwgY29uc3QgVTY0ICogcHU2NG9uZSk7CkBAIC0yNyw2ICszMSw3IEBACiAKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAoVTY0ICpvbGRfdmFsLCBVNjQgKm5ld192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZGp1c3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZShzdHJ1Y3QgY291bnRlcjY0ICpwcmV2X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb3VudGVyNjQgKm5ld192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY291bnRlcjY0ICpvbGRfcHJldl92YWwsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCmluZGV4IDIyNzYyMTYuLjQ0YWNjNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCkBAIC0yNCwyMSArMjQsMjUgQEAKICAgICAvKgogICAgICAqIFByb3RvdHlwZXMuaAogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGdlbmVyYXRlX0t1KGNvbnN0IG9pZCAqIGhhc2h0eXBlLCB1X2ludCBoYXNodHlwZV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIFAsIHNpemVfdCBwcGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogUCwgc2l6ZV90IHBwbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBLdSwgc2l6ZV90ICoga3VsZW4pOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgZ2VuZXJhdGVfa3VsKGNvbnN0IG9pZCAqIGhhc2h0eXBlLCB1X2ludCBoYXNodHlwZV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBlbmdpbmVJRCwgc2l6ZV90IGVuZ2luZUlEX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIEt1LCBzaXplX3Qga3VfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogZW5naW5lSUQsIHNpemVfdCBlbmdpbmVJRF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBLdSwgc2l6ZV90IGt1X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIEt1bCwgc2l6ZV90ICoga3VsX2xlbik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBlbmNvZGVfa2V5Y2hhbmdlKGNvbnN0IG9pZCAqIGhhc2h0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGhhc2h0eXBlX2xlbiwgdV9jaGFyICogb2xka2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGRrZXlfbGVuLCB1X2NoYXIgKiBuZXdrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ld2tleV9sZW4sIHVfY2hhciAqIGtjc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGtjc3RyaW5nX2xlbik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBkZWNvZGVfa2V5Y2hhbmdlKGNvbnN0IG9pZCAqIGhhc2h0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGhhc2h0eXBlX2xlbiwgdV9jaGFyICogb2xka2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGRrZXlfbGVuLCB1X2NoYXIgKiBrY3N0cmluZywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjNmYTAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oCkBAIC0wLDAgKzEsMTczIEBACisvKioKKyAqIEBmaWxlICBsYXJnZV9mZF9zZXQuaAorICoKKyAqIEBicmllZiBNYWNybydzIGFuZCBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGlvbiBvZiBsYXJnZSBmaWxlIGRlc2NyaXB0b3Igc2V0cy4KKyAqLworCisKKyNpZm5kZWYgTEFSR0VfRkRfU0VUX0gKKyNkZWZpbmUgTEFSR0VfRkRfU0VUX0gKKworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKworI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKSAmJiAhZGVmaW5lZChfV0lOU09DS0FQSV8pICYmICFkZWZpbmVkKF9XSU5TT0NLX0gpCisjZXJyb3IgPHdpbnNvY2suaD4gb3IgPHdpbnNvY2syLmg+IG11c3QgaGF2ZSBiZWVuIGluY2x1ZGVkIGJlZm9yZSB0aGlzIGZpbGUuCisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworCisvKioKKyAqIEFkZCBzb2NrZXQgZmQgdG8gdGhlIHNldCAqZmRzZXQgaWYgbm90IHlldCBwcmVzZW50LgorICogRW5sYXJnZXMgdGhlIHNldCBpZiBuZWNlc3NhcnkuCisgKi8KKyNkZWZpbmUgTkVUU05NUF9MQVJHRV9GRF9TRVQoZmQsIGZkc2V0KSBcCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ZmQoZmQsIGZkc2V0KQorCisvKioKKyAqIFJlbW92ZSBzb2NrZXQgZmQgZnJvbSB0aGUgc2V0ICpmZHNldC4KKyAqIERvIG5vdGhpbmcgaWYgZmQgaXMgbm90IHByZXNlbnQgaW4gKmZkc2V0LgorICogRG8gbm90aGluZyBpZiBmZCA+PSBmZHNldC0+bGZzX3NldHNpemUuCisgKi8KKyNkZWZpbmUgTkVUU05NUF9MQVJHRV9GRF9DTFIoZmQsIGZkc2V0KSBcCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfY2xyKGZkLCBmZHNldCkKKworLyoqCisgKiBUZXN0IHdoZXRoZXIgc2V0ICpmZHNldCBjb250YWlucyBzb2NrZXQgZmQuCisgKiBFdmFsdWF0ZXMgdG8gemVybyAoZmFsc2UpIGlmIGZkID49IGZkc2V0LT5sZnNfc2V0c2l6ZS4KKyAqLworI2RlZmluZSBORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGZkLCBmZHNldCkgXAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX2lzX3NldChmZCwgZmRzZXQpCisKKyNpZiAhZGVmaW5lZChjeWd3aW4pICYmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCisKKy8qKgorICogTnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byBzdG9yZSBhIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzIGFzIGEKKyAqIHN0cnVjdCBmZF9zZXQuCisgKi8KKyNkZWZpbmUgTkVUU05NUF9GRF9TRVRfQllURVMoc2V0c2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoc2l6ZW9mKGZkX3NldCkgKyAoKHNldHNpemUpID4gRkRfU0VUU0laRSA/ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKChzZXRzaXplKSAtIEZEX1NFVFNJWkUpICogc2l6ZW9mKFNPQ0tFVCkgOiAwKSkKKworLyoqIFJlbW92ZSBhbGwgc29ja2V0cyBmcm9tIHRoZSBzZXQgKmZkc2V0LiAqLworI2RlZmluZSBORVRTTk1QX0xBUkdFX0ZEX1pFUk8oZmRzZXQpIFwKKyAgICBkbyB7IChmZHNldCktPmxmc19zZXRwdHItPmZkX2NvdW50ID0gMDsgfSB3aGlsZSgwKQorCisKK05FVFNOTVBfSU1QT1JUCit2b2lkICAgbmV0c25tcF9sYXJnZV9mZF9zZXRmZCggU09DS0VUIGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQpOworTkVUU05NUF9JTVBPUlQKK3ZvaWQgICBuZXRzbm1wX2xhcmdlX2ZkX2NsciggICBTT0NLRVQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCk7CitORVRTTk1QX0lNUE9SVAoraW50ICAgIG5ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KFNPQ0tFVCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0KTsKKworI2Vsc2UKKworLyoqCisgKiBTaXplIG9mIGEgc2luZ2xlIGVsZW1lbnQgb2YgdGhlIGFycmF5IHdpdGggZmlsZSBkZXNjcmlwdG9yIGJpdG1hc2tzLgorICoKKyAqIEFjY29yZGluZyB0byBTVVN2MiwgdGhpcyBhcnJheSBtdXN0IGhhdmUgdGhlIG5hbWUgZmRzX2JpdHMuIFNlZSBhbHNvCisgKiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDc5MDg3NzUveHNoL3N5c3RpbWUuaC5odG1sIj5UaGUgU2luZ2xlIFVOSVggU3BlY2lmaWNhdGlvbiwgVmVyc2lvbiAyLCAmbHQ7c3lzL3RpbWUuaCZndDs8L2E+LgorICovCisjZGVmaW5lIE5FVFNOTVBfRkRfTUFTS19TSVpFIHNpemVvZigoKGZkX3NldCopMCktPmZkc19iaXRzWzBdKQorCisvKiogTnVtYmVyIG9mIGJpdHMgaW4gb25lIGVsZW1lbnQgb2YgdGhlIGZkX3NldC5mZHNfYml0cyBhcnJheS4gKi8KKyNkZWZpbmUgTkVUU05NUF9CSVRTX1BFUl9GRF9NQVNLICg4ICogTkVUU05NUF9GRF9NQVNLX1NJWkUpCisKKy8qKiBOdW1iZXIgb2YgZWxlbWVudHMgbmVlZGVkIGZvciB0aGUgZmRzX2JpdHMgYXJyYXkuICovCisjZGVmaW5lIE5FVFNOTVBfRkRfU0VUX0VMRU1fQ09VTlQoc2V0c2l6ZSkgXAorICAgIChzZXRzaXplICsgTkVUU05NUF9CSVRTX1BFUl9GRF9NQVNLIC0gMSkgLyBORVRTTk1QX0JJVFNfUEVSX0ZEX01BU0sKKworLyoqCisgKiBOdW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIHN0b3JlIGEgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYXMgYQorICogc3RydWN0IGZkX3NldC4KKyAqLworI2RlZmluZSBORVRTTk1QX0ZEX1NFVF9CWVRFUyhzZXRzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoc2l6ZW9mKGZkX3NldCkgKyAoKHNldHNpemUpID4gRkRfU0VUU0laRSA/ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRkRfU0VUX0VMRU1fQ09VTlQoKHNldHNpemUpIC0gRkRfU0VUU0laRSkgXAorICAgICAgICAgICAgICAgICAgICAgICAqIE5FVFNOTVBfRkRfTUFTS19TSVpFIDogMCkpCisKKy8qKiBSZW1vdmUgYWxsIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGUgc2V0ICpmZHNldC4gKi8KKyNkZWZpbmUgTkVUU05NUF9MQVJHRV9GRF9aRVJPKGZkc2V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtZW1zZXQoKGZkc2V0KS0+bGZzX3NldHB0ciwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIE5FVFNOTVBfRkRfU0VUX0JZVEVTKChmZHNldCktPmxmc19zZXRzaXplKSk7ICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworCit2b2lkICAgbmV0c25tcF9sYXJnZV9mZF9zZXRmZCggaW50IGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQpOwordm9pZCAgIG5ldHNubXBfbGFyZ2VfZmRfY2xyKCAgIGludCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0KTsKK2ludCAgICBuZXRzbm1wX2xhcmdlX2ZkX2lzX3NldChpbnQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCk7CisKKyNlbmRpZgorCisvKioKKyAqIEluaXRpYWxpemUgYSBuZXRzbm1wX2xhcmdlX2ZkX3NldCBzdHJ1Y3R1cmUuCisgKgorICogTm90ZTogdGhpcyBmdW5jdGlvbiBvbmx5IGluaXRpYWxpemVzIHRoZSBsZnNfc2V0c2l6ZSBhbmQgbGZzX3NldHB0cgorICogbWVtYmVycyBvZiBuZXRzbm1wX2xhcmdlX2ZkX3NldCwgbm90IHRoZSBmaWxlIGRlc2NyaXB0b3Igc2V0IGl0c2VsZi4KKyAqIFRoZSBmaWxlIGRlc2NyaXB0b3Igc2V0IG11c3QgYmUgaW5pdGlhbGl6ZWQgc2VwYXJhdGVseSwgZS5nLiB2aWEKKyAqIE5FVFNOTVBfTEFSR0VfRkRfQ0xSKCkuCisgKi8KK05FVFNOTVBfSU1QT1JUCit2b2lkICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCggICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQsIGludCBzZXRzaXplKTsKKworLyoqCisgKiBNb2RpZnkgdGhlIHNpemUgb2YgYSBmaWxlIGRlc2NyaXB0b3Igc2V0IGFuZCBwcmVzZXJ2ZSB0aGUgZmlyc3QKKyAqIG1pbihmZHNldC0+bGZzX3NldHNpemUsIHNldHNpemUpIGZpbGUgZGVzY3JpcHRvcnMuCisgKgorICogUmV0dXJucyAxIHVwb24gc3VjY2VzcyBvciAwIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KKyAqLworaW50ICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSggbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0LCBpbnQgc2V0c2l6ZSk7CisKKy8qKgorICogU3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZyBmb3IgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yIHNldHMuCisgKgorICogT24gUE9TSVggc3lzdGVtcywgYW55IGZpbGUgZGVzY3JpcHRvciBzZXQgd2l0aCBzaXplIGJlbG93IG51bWZkcyB3aWxsIGJlCisgKiByZXNpemVkIGJlZm9yZSBpbnZva2luZyBzZWxlY3QoKS4KKyAqCisgKiBAc2VlIFNlZSBhbHNvIHNlbGVjdCgyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworTkVUU05NUF9JTVBPUlQKK2ludCAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9zZWxlY3QoaW50IG51bWZkcywgbmV0c25tcF9sYXJnZV9mZF9zZXQgKnJlYWRmZHMsCisJCQkgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKndyaXRlZmRzLAorCQkJICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpleGNlcHRmZHMsCisJCQkgICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQpOworCisvKiogRGVhbGxvY2F0ZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0LiAqLworTkVUU05NUF9JTVBPUlQKK3ZvaWQgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCk7CisKKy8qKgorICogQ29weSBhbiBmZF9zZXQgdG8gYSBuZXRzbm1wX2xhcmdlX2ZkX3NldCBzdHJ1Y3R1cmUuCisgKgorICogQG5vdGUgZHN0IG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqLwordm9pZCAgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmZF9zZXQgKnNyYyk7CisKKy8qKgorICogQ29weSBhIG5ldHNubXBfbGFyZ2VfZmRfc2V0IHN0cnVjdHVyZSBpbnRvIGFuIGZkX3NldC4KKyAqCisgKiBAcmV0dXJuIDAgdXBvbiBzdWNjZXNzLCAtMSB3aGVuIGNvcHlpbmcgZmFpbHMgYmVjYXVzZSAqc3JjIGlzIHRvbyBsYXJnZSB0bworICogICAgICAgICBmaXQgaW50byAqZHN0LgorICovCitpbnQgICAgbmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQoICAgICAgICAgICAgICBmZF9zZXQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqc3JjKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogTEFSR0VfRkRfU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKaW5kZXggMmM2NWUyYy4uZGE4YzNjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAvKgogICAgICAqIFByb3RvdHlwZXMuCiAgICAgICovCi0gICAgaW50ICAgICAgICAgICAgIGdldF9lbmdpbmV0aW1lKHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4sCisgICAgaW50ICAgICAgICAgICAgIGdldF9lbmdpbmV0aW1lKGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50ICogZW5naW5lX2Jvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50ICogZW5naW5lX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGF1dGhlbnRpY2F0ZWQpOwpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50ICogbGFzdF9lbmdpbmVfdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgYXV0aGVudGljYXRlZCk7CiAKLSAgICBpbnQgICAgICAgICAgICAgc2V0X2VuZ2luZXRpbWUodV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbiwKKyAgICBpbnQgICAgICAgICAgICAgc2V0X2VuZ2luZXRpbWUoY29uc3QgdV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgZW5naW5lX2Jvb3QsIHVfaW50IGVuZ2luZV90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBhdXRoZW50aWNhdGVkKTsKIApAQCAtMTIyLDkgKzEyMiw5IEBACiAgICAgICAgICAKICAgICAgICAgIAogICAgICAgICBFbmdpbmV0aW1lCi0gICAgICAgIHNlYXJjaF9lbmdpbmV0aW1lX2xpc3QodV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbik7CisgICAgICAgIHNlYXJjaF9lbmdpbmV0aW1lX2xpc3QoY29uc3QgdV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbik7CiAKLSAgICBpbnQgICAgICAgICAgICAgaGFzaF9lbmdpbmVJRCh1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuKTsKKyAgICBpbnQgICAgICAgICAgICAgaGFzaF9lbmdpbmVJRChjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuKTsKIAogICAgIHZvaWQgICAgICAgICAgICBkdW1wX2V0aW1lbGlzdF9lbnRyeShFbmdpbmV0aW1lIGUsIGludCBjb3VudCk7CiAgICAgdm9pZCAgICAgICAgICAgIGR1bXBfZXRpbWVsaXN0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgKaW5kZXggZWJkMDA2Mi4uNmEwNzMwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oCkBAIC01MywxMSArNTMsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzEsOSArNjcsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2Vsc2UKKyNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCiAjaWYgSEFWRV9BUlBBX0lORVRfSApAQCAtODIsOCArNzYsNiBAQAogCiAjaWZkZWYgVUNEX1NOTVBfTElCUkFSWQogCi0jZGVmaW5lIHNubXBfcGFyc2UgY211X3NubXBfcGFyc2UKLQogI2luY2x1ZGUgPHVjZC1zbm1wL2FzbjEuaD4KICNpbmNsdWRlIDx1Y2Qtc25tcC9zbm1wX2FwaS5oPgogI2luY2x1ZGUgPHVjZC1zbm1wL3NubXBfaW1wbC5oPgpAQCAtMTQxLDcgKzEzMyw5IEBACiAjZGVmaW5lIFNOTVBfTVNHX0dFVCBHRVRfUkVRX01TRwogI2RlZmluZSBTTk1QX01TR19HRVRORVhUIEdFVE5FWFRfUkVRX01TRwogI2RlZmluZSBTTk1QX01TR19SRVNQT05TRSBHRVRfUlNQX01TRworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNkZWZpbmUgU05NUF9NU0dfU0VUIFNFVF9SRVFfTVNHCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogI2RlZmluZSBTTk1QX01TR19UUkFQIFRSUF9SRVFfTVNHCiAjZGVmaW5lIFNOTVBfTVNHX0dFVEJVTEsgICAgKEFTTl9DT05URVhUIHwgQVNOX0NPTlNUUlVDVE9SIHwgMHg1KQogI2RlZmluZSBTTk1QX01TR19JTkZPUk0gICAgIChBU05fQ09OVEVYVCB8IEFTTl9DT05TVFJVQ1RPUiB8IDB4NikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaAppbmRleCBjOTk1YzdlLi4xMmIxOTJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICogKiogSW5wdXQ6IE1EIC0tIGFuIE1EcHRyCiAgICAgICogKiogSW5pdGlhbGl6ZSB0aGUgTURzdHJ1Y3QgcHJlcGF0b3J5IHRvIGRvaW5nIGEgbWVzc2FnZSBkaWdlc3QgY29tcHV0YXRpb24uCiAgICAgICovCi0gICAgZXh0ZXJuIHZvaWQgICAgIE1EYmVnaW4oTURwdHIpOworICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgTURiZWdpbihNRHB0cik7CiAKICAgICAvKgogICAgICAqIE1EdXBkYXRlKE1ELFgsY291bnQpCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICogKiogZXZlcnkgTUQgY29tcHV0YXRpb24gc2hvdWxkIGVuZCB3aXRoIG9uZSBjYWxsIHRvIE1EdXBkYXRlIHdpdGggYQogICAgICAqICoqIGNvdW50IGxlc3MgdGhhbiA1MTIuICBaZXJvIGlzIE9LIGZvciBhIGNvdW50LgogICAgICAqLwotICAgIGV4dGVybiBpbnQgICAgICBNRHVwZGF0ZShNRHB0ciwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUIGludCBNRHVwZGF0ZShNRHB0ciwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwogCiAgICAgLyoKICAgICAgKiBNRHByaW50KE1EKQpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICovCiAgICAgZXh0ZXJuIHZvaWQgICAgIE1EcHJpbnQoTURwdHIpOwogCi0gICAgaW50ICAgICAgICAgICAgIE1EY2hlY2tzdW0odV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLAorICAgIGludCAgICAgICAgICAgICBNRGNoZWNrc3VtKGNvbnN0IHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWFjbGVuKTsKLSAgICBpbnQgICAgICAgICAgICAgTURzaWduKHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYWNsZW4sIHVfY2hhciAqIHNlY3JldCwKKyAgICBpbnQgICAgICAgICAgICAgTURzaWduKGNvbnN0IHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYWNsZW4sIGNvbnN0IHVfY2hhciAqIHNlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZWNyZXRsZW4pOwogICAgIHZvaWQgICAgICAgICAgICBNRGdldChNRHN0cnVjdCAqIE1ELCB1X2NoYXIgKiBidWYsIHNpemVfdCBidWZsZW4pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKaW5kZXggZjdjOGJiYS4uMThkOThlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaApAQCAtMzQsNyArMzQsMTMgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgICAgICAvKiBmb3IgRklMRSAqLwogCi0jZGVmaW5lIE1JQiAxLCAzLCA2LCAxLCAyLCAxCisjaW5jbHVkZSA8bmV0LXNubXAvbWliX2FwaS5oPgorCisjZGVmaW5lIE5FVFNOTVBfTUlCMl9PSUQgMSwgMywgNiwgMSwgMiwgMQorCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisjZGVmaW5lIE1JQiBORVRTTk1QX01JQjJfT0lECisjZW5kaWYKIAogI2RlZmluZSBNSUJfSUZUWVBFX09USEVSCQkgICAgMQogI2RlZmluZSBNSUJfSUZUWVBFX1JFR1VMQVIxODIyCQkgICAgMgpAQCAtMTExLDY3ICsxMTcsNTQgQEAKICAgICBzdHJ1Y3QgdmFyaWFibGVfbGlzdDsKICAgICBzdHJ1Y3QgZW51bV9saXN0OwogCi0gICAgdm9pZCAgICAgICAgICAgIHByaW50X21pYihGSUxFICogZnApOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X2FzY2lpX2R1bXAoRklMRSAqKTsKLSAgICBpbnQgICAgICAgICAgICAgcmVhZF9vYmppZChjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QgKik7CiAgICAgdm9pZCAgICAgICAgICAgIHJlZ2lzdGVyX21pYl9oYW5kbGVycyh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9zZXRfbWliX2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgICpuZXRzbm1wX2dldF9taWJfZGlyZWN0b3J5KHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2ZpeHVwX21pYl9kaXJlY3Rvcnkodm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfaW5pdF9taWIodm9pZCk7Ci0jaWZuZGVmIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCi0gICAgdm9pZCAgICAgICAgICAgIGluaXRfbWliKHZvaWQpOwotI2VuZGlmCi0gICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX21pYih2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgcHJpbnRfZGVzY3JpcHRpb24ob2lkICosIHNpemVfdCwgaW50KTsKLSAgICB2b2lkICAgICAgICAgICAgZnByaW50X2Rlc2NyaXB0aW9uKEZJTEUgKiwgb2lkICosIHNpemVfdCwgaW50KTsKLSAgICBpbnQgICAgICAgICAgICAgc25wcmludF9kZXNjcmlwdGlvbihjaGFyICosIHNpemVfdCwgb2lkICosIHNpemVfdCwgaW50KTsKLSAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfZGVzY3JpcHRpb24odV9jaGFyICoqLCBzaXplX3QgKiwgc2l6ZV90ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgb2lkICosIHNpemVfdCwgaW50KTsKLSAgICBpbnQgICAgICAgICAgICAgZ2V0X21vZHVsZV9ub2RlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBvaWQgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9taWJpbmRleF9sb2FkKCB2b2lkICk7CisgICAgY2hhciAqICAgICAgICAgIG5ldHNubXBfbWliaW5kZXhfbG9va3VwKCBjb25zdCBjaGFyICogKTsKKyAgICBGSUxFICogICAgICAgICAgbmV0c25tcF9taWJpbmRleF9uZXcoIGNvbnN0IGNoYXIgKiApOworICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY19kZXNjcmlwdGlvbih1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBnZXRfd2lsZF9ub2RlKGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBnZXRfbm9kZShjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QgKik7Ci0gICAgb2lkICAgICAgICAgICAgKnNubXBfcGFyc2Vfb2lkKGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB0cmVlICAgICpnZXRfdHJlZShjb25zdCBvaWQgKiwgc2l6ZV90LCBzdHJ1Y3QgdHJlZSAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB0cmVlICAgICpnZXRfdHJlZV9oZWFkKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBzZXRfZnVuY3Rpb24oc3RydWN0IHRyZWUgKik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBwYXJzZV9vbmVfb2lkX2luZGV4KG9pZCAqKiBvaWRTdGFydCwgc2l6ZV90ICogb2lkTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBsZXRlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBwYXJzZV9vaWRfaW5kZXhlcyhvaWQgKiBvaWRJbmRleCwgc2l6ZV90IG9pZExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogZGF0YSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgYnVpbGRfb2lkX25vYWxsb2Mob2lkICogaW4sIHNpemVfdCBpbl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sIG9pZCAqIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHByZWZpeF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIGluZGV4ZXMpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGJ1aWxkX29pZChvaWQgKiogb3V0LCBzaXplX3QgKiBvdXRfbGVuLCBvaWQgKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHJlZml4X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIGluZGV4ZXMpOwogICAgIGludCAgICAgICAgICAgICBidWlsZF9vaWRfc2VnbWVudChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIpOwogCi0KLSAgICB2b2lkICAgICAgICAgICAgcHJpbnRfdmFyaWFibGUoY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY192YXJpYWJsZSh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOwogCi0gICAgdm9pZCAgICAgICAgICAgIGZwcmludF92YXJpYWJsZShGSUxFICogZnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOwotCi0gICAgaW50ICAgICAgICAgICAgIHNucHJpbnRfdmFyaWFibGUoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKLQotICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY192YXJpYWJsZSh1X2NoYXIgKiogYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBidWZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvYmppZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUpOwotCisgICAgTkVUU05NUF9JTVBPUlQKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCiAgICAgc3RydWN0IHRyZWUgICAgKgogI2Vsc2UKQEAgLTE4NSw2ICsxNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2JqaWRsZW4pOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkCiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWQodV9jaGFyICoqIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBidWZfbGVuLApAQCAtMTk0LDQwICsxODgsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2JqaWRsZW4pOwogCi0gICAgdm9pZCAgICAgICAgICAgIHByaW50X3ZhbHVlKGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKLQotICAgIHZvaWQgICAgICAgICAgICBmcHJpbnRfdmFsdWUoRklMRSAqIGZwLAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX3ZhbHVlKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7CiAKLSAgICBpbnQgICAgICAgICAgICAgc25wcmludF92YWx1ZShjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOwotCi0gICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX3ZhbHVlKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9iamlkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7Ci0KLQotICAgIHZvaWQgICAgICAgICAgICBwcmludF9vYmppZChjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKTsKLQotICAgIHZvaWQgICAgICAgICAgICBmcHJpbnRfb2JqaWQoRklMRSAqIGZwLAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX29iamlkKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pOwogCi0gICAgaW50ICAgICAgICAgICAgIHNucHJpbnRfb2JqaWQoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKTsKLQotICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY19vYmppZCh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvYmppZGxlbik7Ci0KLQorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX2J5X3R5cGUodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jLApAQCAtMjM2LDEyICsyMDgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVuaXRzKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX2hleHN0cmluZyh1X2NoYXIgKiogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqLCBzaXplX3QpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfYXNjaWlzdHJpbmcodV9jaGFyICoqIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwKQEAgLTQ2MCw2ICs0MzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGVudW1fbGlzdCAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25wcmludF9iaXRzdHJpbmcoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBlbnVtX2xpc3QgKiwgY29uc3QgY2hhciAqLApAQCAtNDkyLDIzICs0NjcsMzUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKICNlbmRpZgogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfb2lkX3JlcG9ydChGSUxFICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X29pZF9yZXBvcnRfZW5hYmxlX2xhYmVsZWRvaWQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfb2lkKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X29pZF9yZXBvcnRfZW5hYmxlX3N1ZmZpeCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9zeW1ib2xpYyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9taWJjaGlsZG9pZCh2b2lkKTsKIAogICAgIGNvbnN0IGNoYXIgICAgICpwYXJzZV9vY3RldF9oaW50KGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnZhbHVlLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKm5ld192YWwsIGludCAqbmV3X3ZhbF9sZW4pOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgY2xlYXJfdHJlZV9mbGFncyhyZWdpc3RlciBzdHJ1Y3QgdHJlZSAqdHApOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqc25tcF9vdXRfdG9nZ2xlX29wdGlvbnMoY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX291dF90b2dnbGVfb3B0aW9uc191c2FnZShjb25zdCBjaGFyICosIEZJTEUgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqc25tcF9pbl90b2dnbGVfb3B0aW9ucyhjaGFyICopOwogICAgIGNoYXIgICAgICAgICAgICpzbm1wX2luX29wdGlvbnMoY2hhciAqLCBpbnQsIGNoYXIgKiBjb25zdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2luX3RvZ2dsZV9vcHRpb25zX3VzYWdlKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICBtaWJfdG9fYXNuX3R5cGUoaW50IG1pYl90eXBlKTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAppbmRleCBjMTdjNzI5Li40ZTM1ZDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKQEAgLTYzLDkgKzYzLDEzIEBACiAjZW5kaWYgLyogIEhBVkVfUFRIUkVBRF9IICAqLwogCiAKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgc25tcF9yZXNfaW5pdCh2b2lkKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgc25tcF9yZXNfbG9jayhpbnQgZ3JvdXBJRCwgaW50IHJlc291cmNlSUQpOworTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBzbm1wX3Jlc191bmxvY2soaW50IGdyb3VwSUQsIGludCByZXNvdXJjZUlEKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgc25tcF9yZXNfZGVzdHJveV9tdXRleChpbnQgZ3JvdXBJRCwgaW50IHJlc291cmNlSUQpOwogCiAjZWxzZSAvKiAgTkVUU05NUF9SRUVOVFJBTlQgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhZGY0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIE5FVFNOTVBfTElCUkFSWV9PSURfSAorI2RlZmluZSBORVRTTk1QX0xJQlJBUllfT0lEX0gKKworI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworI2lmbmRlZiBFSUdIVEJJVF9TVUJJRFMKK3R5cGVkZWYgdV9sb25nIG9pZDsKKyNkZWZpbmUgTUFYX1NVQklEICAgMHhGRkZGRkZGRlVMCisjZGVmaW5lIE5FVFNOTVBfUFJJbyAibCIKKyNlbHNlCit0eXBlZGVmIHVpbnQ4X3Qgb2lkOworI2RlZmluZSBNQVhfU1VCSUQgICAweEZGCisjZGVmaW5lIE5FVFNOTVBfUFJJbyAiIgorI2VuZGlmCisKKyNlbmRpZiAvKiBORVRTTk1QX0xJQlJBUllfT0lEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAppbmRleCBlZWFiNDkwLi4yOTBiYjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCkBAIC0zOCw2ICszOCw3IEBACiAgICAgICAgTmV0U05NUFN0YXNoRHVtcCAqZHVtcGZuOwogICAgIH0gbmV0c25tcF9vaWRfc3Rhc2hfc2F2ZV9pbmZvOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfc3Rhc2hfYWRkX2RhdGEobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnJvb3QsCiAJCQkJCSAgICAgICBjb25zdCBvaWQgKiBsb29rdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb29rdXBfbGVuLApAQCAtNDgsOSArNDksMTEgQEAKICAgICBuZXRzbm1wX29pZF9zdGFzaF9ub2RlCiAgICAgICAgICpuZXRzbm1wX29pZF9zdGFzaF9nZXRfbm9kZShuZXRzbm1wX29pZF9zdGFzaF9ub2RlICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAqbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGEobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqcm9vdCwKIAkJCQkJICAgICAgIGNvbnN0IG9pZCAqIGxvb2t1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvb2t1cF9sZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqCiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfZ2V0bmV4dF9ub2RlKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pOwpAQCAtNjUsNiArNjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICpjdXJvaWQsIHNpemVfdCBjdXJvaWRfbGVuKTsKIAogICAgIC8qIGZyZWVzIGFsbCBkYXRhIGluIHRoZSBzdGFzaCBhbmQgY2xlYW5zIGl0IG91dC4gIFNldHMgcm9vdCA9IE5VTEwgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgbmV0c25tcF9vaWRfc3Rhc2hfZnJlZShuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0U05NUFN0YXNoRnJlZU5vZGUgKmZyZWVmbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGRmMDgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qIGNyeXB0by9hZXMvYWVzLmggLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2lmbmRlZiBIRUFERVJfQUVTX0gKKyNkZWZpbmUgSEVBREVSX0FFU19ICisKKyNpZmRlZiBPUEVOU1NMX05PX0FFUworI2Vycm9yIEFFUyBpcyBkaXNhYmxlZC4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNkZWZpbmUgQUVTX0VOQ1JZUFQJMQorI2RlZmluZSBBRVNfREVDUllQVAkwCisKKy8qIEJlY2F1c2UgYXJyYXkgc2l6ZSBjYW4ndCBiZSBhIGNvbnN0IGluIEMsIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBtYWNyb3MuCisgICBCb3RoIHNpemVzIGFyZSBpbiBieXRlcy4gKi8KKyNkZWZpbmUgQUVTX01BWE5SIDE0CisjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFRoaXMgc2hvdWxkIGJlIGEgaGlkZGVuIHR5cGUsIGJ1dCBFVlAgcmVxdWlyZXMgdGhhdCB0aGUgc2l6ZSBiZSBrbm93biAqLworc3RydWN0IGFlc19rZXlfc3QgeworI2lmZGVmIEFFU19MT05HCisgICAgdW5zaWduZWQgbG9uZyByZF9rZXlbNCAqKEFFU19NQVhOUiArIDEpXTsKKyNlbHNlCisgICAgdW5zaWduZWQgaW50IHJkX2tleVs0ICooQUVTX01BWE5SICsgMSldOworI2VuZGlmCisgICAgaW50IHJvdW5kczsKK307Cit0eXBlZGVmIHN0cnVjdCBhZXNfa2V5X3N0IEFFU19LRVk7CisKK2NvbnN0IGNoYXIgKkFFU19vcHRpb25zKHZvaWQpOworCitpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKwlBRVNfS0VZICprZXkpOworaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJQUVTX0tFWSAqa2V5KTsKKwordm9pZCBBRVNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCWNvbnN0IEFFU19LRVkgKmtleSk7Cit2b2lkIEFFU19kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgQUVTX0tFWSAqa2V5KTsKKwordm9pZCBBRVNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwljb25zdCBBRVNfS0VZICprZXksIGNvbnN0IGludCBlbmMpOwordm9pZCBBRVNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJdW5zaWduZWQgY2hhciAqaXZlYywgY29uc3QgaW50IGVuYyk7Cit2b2lkIEFFU19jZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwl1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSwgY29uc3QgaW50IGVuYyk7Cit2b2lkIEFFU19jZmIxX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpOwordm9pZCBBRVNfY2ZiOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKK3ZvaWQgQUVTX29mYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtKTsKK3ZvaWQgQUVTX2N0cjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgaXZlY1tBRVNfQkxPQ0tfU0laRV0sCisJdW5zaWduZWQgY2hhciBlY291bnRfYnVmW0FFU19CTE9DS19TSVpFXSwKKwl1bnNpZ25lZCBpbnQgKm51bSk7CisvKiBOQjogdGhlIElWIGlzIF90d29fIGJsb2NrcyBsb25nICovCit2b2lkIEFFU19pZ2VfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICppdmVjLCBjb25zdCBpbnQgZW5jKTsKKy8qIE5COiB0aGUgSVYgaXMgX2ZvdXJfIGJsb2NrcyBsb25nICovCit2b2lkIEFFU19iaV9pZ2VfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkJY29uc3QgQUVTX0tFWSAqa2V5MiwgY29uc3QgdW5zaWduZWQgY2hhciAqaXZlYywKKwkJCWNvbnN0IGludCBlbmMpOworCitpbnQgQUVTX3dyYXBfa2V5KEFFU19LRVkgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisJCXVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbik7CitpbnQgQUVTX3Vud3JhcF9rZXkoQUVTX0tFWSAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKwkJdW5zaWduZWQgY2hhciAqb3V0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubGVuKTsKKworCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qICFIRUFERVJfQUVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlN2JhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oCkBAIC0wLDAgKzEsMjM2IEBACisvKiBjcnlwdG8vZGVzL2Rlcy5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKy8qIENvcGllZCByb3VnaGx5IGZyb20gb3BlbnNzbGNvbmYuaCB3aGljaCBpdCdzIGEgbGl0dGxlIG1vcmUgY29tcGxleCAqLworI2RlZmluZSBERVNfTE9ORyB1bnNpZ25lZCBsb25nCisKKyNpZm5kZWYgSEVBREVSX05FV19ERVNfSAorI2RlZmluZSBIRUFERVJfTkVXX0RFU19ICisKKyNpZmRlZiBPUEVOU1NMX05PX0RFUworI2Vycm9yIERFUyBpcyBkaXNhYmxlZC4KKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9CVUlMRF9TSExJQkNSWVBUTworIyB1bmRlZiBPUEVOU1NMX0VYVEVSTgorIyBkZWZpbmUgT1BFTlNTTF9FWFRFUk4gT1BFTlNTTF9FWFBPUlQKKyNlbmRpZgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgREVTX2NibG9ja1s4XTsKK3R5cGVkZWYgLyogY29uc3QgKi8gdW5zaWduZWQgY2hhciBjb25zdF9ERVNfY2Jsb2NrWzhdOworLyogV2l0aCAiY29uc3QiLCBnY2MgMi44LjEgb24gU29sYXJpcyB0aGlua3MgdGhhdCBERVNfY2Jsb2NrICoKKyAqIGFuZCBjb25zdF9ERVNfY2Jsb2NrICogYXJlIGluY29tcGF0aWJsZSBwb2ludGVyIHR5cGVzLiAqLworCit0eXBlZGVmIHN0cnVjdCBERVNfa3MKKyAgICB7CisgICAgdW5pb24KKwl7CisJREVTX2NibG9jayBjYmxvY2s7CisJLyogbWFrZSBzdXJlIHRoaW5ncyBhcmUgY29ycmVjdCBzaXplIG9uIG1hY2hpbmVzIHdpdGgKKwkgKiA4IGJ5dGUgbG9uZ3MgKi8KKwlERVNfTE9ORyBkZXNsb25nWzJdOworCX0ga3NbMTZdOworICAgIH0gREVTX2tleV9zY2hlZHVsZTsKKworI2lmbmRlZiBPUEVOU1NMX0RJU0FCTEVfT0xEX0RFU19TVVBQT1JUCisjIGlmbmRlZiBPUEVOU1NMX0VOQUJMRV9PTERfREVTX1NVUFBPUlQKKyMgIGRlZmluZSBPUEVOU1NMX0VOQUJMRV9PTERfREVTX1NVUFBPUlQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIERFU19LRVlfU1ogCShzaXplb2YoREVTX2NibG9jaykpCisjZGVmaW5lIERFU19TQ0hFRFVMRV9TWiAoc2l6ZW9mKERFU19rZXlfc2NoZWR1bGUpKQorCisjZGVmaW5lIERFU19FTkNSWVBUCTEKKyNkZWZpbmUgREVTX0RFQ1JZUFQJMAorCisjZGVmaW5lIERFU19DQkNfTU9ERQkwCisjZGVmaW5lIERFU19QQ0JDX01PREUJMQorCisjZGVmaW5lIERFU19lY2IyX2VuY3J5cHQoaSxvLGsxLGsyLGUpIFwKKwlERVNfZWNiM19lbmNyeXB0KChpKSwobyksKGsxKSwoazIpLChrMSksKGUpKQorCisjZGVmaW5lIERFU19lZGUyX2NiY19lbmNyeXB0KGksbyxsLGsxLGsyLGl2LGUpIFwKKwlERVNfZWRlM19jYmNfZW5jcnlwdCgoaSksKG8pLChsKSwoazEpLChrMiksKGsxKSwoaXYpLChlKSkKKworI2RlZmluZSBERVNfZWRlMl9jZmI2NF9lbmNyeXB0KGksbyxsLGsxLGsyLGl2LG4sZSkgXAorCURFU19lZGUzX2NmYjY0X2VuY3J5cHQoKGkpLChvKSwobCksKGsxKSwoazIpLChrMSksKGl2KSwobiksKGUpKQorCisjZGVmaW5lIERFU19lZGUyX29mYjY0X2VuY3J5cHQoaSxvLGwsazEsazIsaXYsbikgXAorCURFU19lZGUzX29mYjY0X2VuY3J5cHQoKGkpLChvKSwobCksKGsxKSwoazIpLChrMSksKGl2KSwobikpCisKK2NvbnN0IGNoYXIgKkRFU19vcHRpb25zKHZvaWQpOwordm9pZCBERVNfZWNiM19lbmNyeXB0KGNvbnN0X0RFU19jYmxvY2sgKmlucHV0LCBERVNfY2Jsb2NrICpvdXRwdXQsCisJCSAgICAgIERFU19rZXlfc2NoZWR1bGUgKmtzMSxERVNfa2V5X3NjaGVkdWxlICprczIsCisJCSAgICAgIERFU19rZXlfc2NoZWR1bGUgKmtzMywgaW50IGVuYyk7CitERVNfTE9ORyBERVNfY2JjX2Nrc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LERFU19jYmxvY2sgKm91dHB1dCwKKwkJICAgICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLAorCQkgICAgICAgY29uc3RfREVTX2NibG9jayAqaXZlYyk7CisvKiBERVNfY2JjX2VuY3J5cHQgZG9lcyBub3QgdXBkYXRlIHRoZSBJViEgIFVzZSBERVNfbmNiY19lbmNyeXB0IGluc3RlYWQuICovCit2b2lkIERFU19jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCx1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJCSAgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsREVTX2NibG9jayAqaXZlYywKKwkJICAgICBpbnQgZW5jKTsKK3ZvaWQgREVTX25jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCx1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJCSAgICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLERFU19jYmxvY2sgKml2ZWMsCisJCSAgICAgIGludCBlbmMpOwordm9pZCBERVNfeGNiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwkJICAgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsREVTX2NibG9jayAqaXZlYywKKwkJICAgICAgY29uc3RfREVTX2NibG9jayAqaW53LGNvbnN0X0RFU19jYmxvY2sgKm91dHcsaW50IGVuYyk7Cit2b2lkIERFU19jZmJfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsaW50IG51bWJpdHMsCisJCSAgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsREVTX2NibG9jayAqaXZlYywKKwkJICAgICBpbnQgZW5jKTsKK3ZvaWQgREVTX2VjYl9lbmNyeXB0KGNvbnN0X0RFU19jYmxvY2sgKmlucHV0LERFU19jYmxvY2sgKm91dHB1dCwKKwkJICAgICBERVNfa2V5X3NjaGVkdWxlICprcyxpbnQgZW5jKTsKKworLyogCVRoaXMgaXMgdGhlIERFUyBlbmNyeXB0aW9uIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgYnkganVzdCBhYm91dAorCWV2ZXJ5IG90aGVyIERFUyByb3V0aW5lIGluIHRoZSBsaWJyYXJ5LiAgWW91IHNob3VsZCBub3QgdXNlIHRoaXMKKwlmdW5jdGlvbiBleGNlcHQgdG8gaW1wbGVtZW50ICdtb2Rlcycgb2YgREVTLiAgSSBzYXkgdGhpcyBiZWNhdXNlIHRoZQorCWZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhpcyByb3V0aW5lIGRvIHRoZSBjb252ZXJzaW9uIGZyb20gJ2NoYXIgKicgdG8KKwlsb25nLCBhbmQgdGhpcyBuZWVkcyB0byBiZSBkb25lIHRvIG1ha2Ugc3VyZSAnbm9uLWFsaWduZWQnIG1lbW9yeQorCWFjY2VzcyBkbyBub3Qgb2NjdXIuICBUaGUgY2hhcmFjdGVycyBhcmUgbG9hZGVkICdsaXR0bGUgZW5kaWFuJy4KKwlEYXRhIGlzIGEgcG9pbnRlciB0byAyIHVuc2lnbmVkIGxvbmcncyBhbmQga3MgaXMgdGhlCisJREVTX2tleV9zY2hlZHVsZSB0byB1c2UuICBlbmMsIGlzIG5vbiB6ZXJvIHNwZWNpZmllcyBlbmNyeXB0aW9uLAorCXplcm8gaWYgZGVjcnlwdGlvbi4gKi8KK3ZvaWQgREVTX2VuY3J5cHQxKERFU19MT05HICpkYXRhLERFU19rZXlfc2NoZWR1bGUgKmtzLCBpbnQgZW5jKTsKKworLyogCVRoaXMgZnVuY3Rpb25zIGlzIHRoZSBzYW1lIGFzIERFU19lbmNyeXB0MSgpIGV4Y2VwdCB0aGF0IHRoZSBERVMKKwlpbml0aWFsIHBlcm11dGF0aW9uIChJUCkgYW5kIGZpbmFsIHBlcm11dGF0aW9uIChGUCkgaGF2ZSBiZWVuIGxlZnQKKwlvdXQuICBBcyBmb3IgREVTX2VuY3J5cHQxKCksIHlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGZ1bmN0aW9uLgorCUl0IGlzIHVzZWQgYnkgdGhlIHJvdXRpbmVzIGluIHRoZSBsaWJyYXJ5IHRoYXQgaW1wbGVtZW50IHRyaXBsZSBERVMuCisJSVAoKSBERVNfZW5jcnlwdDIoKSBERVNfZW5jcnlwdDIoKSBERVNfZW5jcnlwdDIoKSBGUCgpIGlzIHRoZSBzYW1lCisJYXMgREVTX2VuY3J5cHQxKCkgREVTX2VuY3J5cHQxKCkgREVTX2VuY3J5cHQxKCkgZXhjZXB0IGZhc3RlciA6LSkuICovCit2b2lkIERFU19lbmNyeXB0MihERVNfTE9ORyAqZGF0YSxERVNfa2V5X3NjaGVkdWxlICprcywgaW50IGVuYyk7CisKK3ZvaWQgREVTX2VuY3J5cHQzKERFU19MT05HICpkYXRhLCBERVNfa2V5X3NjaGVkdWxlICprczEsCisJCSAgREVTX2tleV9zY2hlZHVsZSAqa3MyLCBERVNfa2V5X3NjaGVkdWxlICprczMpOwordm9pZCBERVNfZGVjcnlwdDMoREVTX0xPTkcgKmRhdGEsIERFU19rZXlfc2NoZWR1bGUgKmtzMSwKKwkJICBERVNfa2V5X3NjaGVkdWxlICprczIsIERFU19rZXlfc2NoZWR1bGUgKmtzMyk7Cit2b2lkIERFU19lZGUzX2NiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgCisJCQkgIGxvbmcgbGVuZ3RoLAorCQkJICBERVNfa2V5X3NjaGVkdWxlICprczEsREVTX2tleV9zY2hlZHVsZSAqa3MyLAorCQkJICBERVNfa2V5X3NjaGVkdWxlICprczMsREVTX2NibG9jayAqaXZlYyxpbnQgZW5jKTsKK3ZvaWQgREVTX2VkZTNfY2JjbV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCSAgIGxvbmcgbGVuZ3RoLAorCQkJICAgREVTX2tleV9zY2hlZHVsZSAqa3MxLERFU19rZXlfc2NoZWR1bGUgKmtzMiwKKwkJCSAgIERFU19rZXlfc2NoZWR1bGUgKmtzMywKKwkJCSAgIERFU19jYmxvY2sgKml2ZWMxLERFU19jYmxvY2sgKml2ZWMyLAorCQkJICAgaW50IGVuYyk7Cit2b2lkIERFU19lZGUzX2NmYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LAorCQkJICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKmtzMSwKKwkJCSAgICBERVNfa2V5X3NjaGVkdWxlICprczIsREVTX2tleV9zY2hlZHVsZSAqa3MzLAorCQkJICAgIERFU19jYmxvY2sgKml2ZWMsaW50ICpudW0saW50IGVuYyk7Cit2b2lkIERFU19lZGUzX2NmYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCSAgaW50IG51bWJpdHMsbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqa3MxLAorCQkJICBERVNfa2V5X3NjaGVkdWxlICprczIsREVTX2tleV9zY2hlZHVsZSAqa3MzLAorCQkJICBERVNfY2Jsb2NrICppdmVjLGludCBlbmMpOwordm9pZCBERVNfZWRlM19vZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCSAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICprczEsCisJCQkgICAgREVTX2tleV9zY2hlZHVsZSAqa3MyLERFU19rZXlfc2NoZWR1bGUgKmtzMywKKwkJCSAgICBERVNfY2Jsb2NrICppdmVjLGludCAqbnVtKTsKKyNpZiAwCit2b2lkIERFU194d2hpdGVfaW4yb3V0KGNvbnN0X0RFU19jYmxvY2sgKkRFU19rZXksY29uc3RfREVTX2NibG9jayAqaW5fd2hpdGUsCisJCSAgICAgICBERVNfY2Jsb2NrICpvdXRfd2hpdGUpOworI2VuZGlmCisKK2ludCBERVNfZW5jX3JlYWQoaW50IGZkLHZvaWQgKmJ1ZixpbnQgbGVuLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkLAorCQkgREVTX2NibG9jayAqaXYpOworaW50IERFU19lbmNfd3JpdGUoaW50IGZkLGNvbnN0IHZvaWQgKmJ1ZixpbnQgbGVuLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkLAorCQkgIERFU19jYmxvY2sgKml2KTsKK2NoYXIgKkRFU19mY3J5cHQoY29uc3QgY2hhciAqYnVmLGNvbnN0IGNoYXIgKnNhbHQsIGNoYXIgKnJldCk7CitjaGFyICpERVNfY3J5cHQoY29uc3QgY2hhciAqYnVmLGNvbnN0IGNoYXIgKnNhbHQpOwordm9pZCBERVNfb2ZiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGludCBudW1iaXRzLAorCQkgICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLERFU19jYmxvY2sgKml2ZWMpOwordm9pZCBERVNfcGNiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwkJICAgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsREVTX2NibG9jayAqaXZlYywKKwkJICAgICAgaW50IGVuYyk7CitERVNfTE9ORyBERVNfcXVhZF9ja3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCxERVNfY2Jsb2NrIG91dHB1dFtdLAorCQkJbG9uZyBsZW5ndGgsaW50IG91dF9jb3VudCxERVNfY2Jsb2NrICpzZWVkKTsKK2ludCBERVNfcmFuZG9tX2tleShERVNfY2Jsb2NrICpyZXQpOwordm9pZCBERVNfc2V0X29kZF9wYXJpdHkoREVTX2NibG9jayAqa2V5KTsKK2ludCBERVNfY2hlY2tfa2V5X3Bhcml0eShjb25zdF9ERVNfY2Jsb2NrICprZXkpOworaW50IERFU19pc193ZWFrX2tleShjb25zdF9ERVNfY2Jsb2NrICprZXkpOworLyogREVTX3NldF9rZXkgKD0gc2V0X2tleSA9IERFU19rZXlfc2NoZWQgPSBrZXlfc2NoZWQpIGNhbGxzCisgKiBERVNfc2V0X2tleV9jaGVja2VkIGlmIGdsb2JhbCB2YXJpYWJsZSBERVNfY2hlY2tfa2V5IGlzIHNldCwKKyAqIERFU19zZXRfa2V5X3VuY2hlY2tlZCBvdGhlcndpc2UuICovCitpbnQgREVTX3NldF9rZXkoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKK2ludCBERVNfa2V5X3NjaGVkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7CitpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwordm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKK3ZvaWQgREVTX3N0cmluZ190b19rZXkoY29uc3QgY2hhciAqc3RyLERFU19jYmxvY2sgKmtleSk7Cit2b2lkIERFU19zdHJpbmdfdG9fMmtleXMoY29uc3QgY2hhciAqc3RyLERFU19jYmxvY2sgKmtleTEsREVTX2NibG9jayAqa2V5Mik7Cit2b2lkIERFU19jZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxsb25nIGxlbmd0aCwKKwkJICAgICAgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLERFU19jYmxvY2sgKml2ZWMsaW50ICpudW0sCisJCSAgICAgICBpbnQgZW5jKTsKK3ZvaWQgREVTX29mYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxvbmcgbGVuZ3RoLAorCQkgICAgICAgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUsREVTX2NibG9jayAqaXZlYyxpbnQgKm51bSk7CisKK2ludCBERVNfcmVhZF9wYXNzd29yZChERVNfY2Jsb2NrICprZXksIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IHZlcmlmeSk7CitpbnQgREVTX3JlYWRfMnBhc3N3b3JkcyhERVNfY2Jsb2NrICprZXkxLCBERVNfY2Jsb2NrICprZXkyLCBjb25zdCBjaGFyICpwcm9tcHQsCisJaW50IHZlcmlmeSk7CisKKyNkZWZpbmUgREVTX2ZpeHVwX2tleV9wYXJpdHkgREVTX3NldF9vZGRfcGFyaXR5CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX21kNS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4NWYzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX21kNS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKiBjcnlwdG8vbWQ1L21kNS5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpZm5kZWYgSEVBREVSX01ENV9ICisjZGVmaW5lIEhFQURFUl9NRDVfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMX05PX01ENQorI2Vycm9yIE1ENSBpcyBkaXNhYmxlZC4KKyNlbmRpZgorCisvKgorICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAqICEgTUQ1X0xPTkcgaGFzIHRvIGJlIGF0IGxlYXN0IDMyIGJpdHMgd2lkZS4gSWYgaXQncyB3aWRlciwgdGhlbiAhCisgKiAhIE1ENV9MT05HX0xPRzIgaGFzIHRvIGJlIGRlZmluZWQgYWxvbmcuCQkJICAgIQorICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAqLworCisjaWYgZGVmaW5lZChfX0xQMzJfXykKKyNkZWZpbmUgTUQ1X0xPTkcgdW5zaWduZWQgbG9uZworI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19DUkFZKSB8fCBkZWZpbmVkKF9fSUxQNjRfXykKKyNkZWZpbmUgTUQ1X0xPTkcgdW5zaWduZWQgbG9uZworI2RlZmluZSBNRDVfTE9OR19MT0cyIDMKKy8qCisgKiBfQ1JBWSBub3RlLiBJIGNvdWxkIGRlY2xhcmUgc2hvcnQsIGJ1dCBJIGhhdmUgbm8gaWRlYSB3aGF0IGltcGFjdAorICogZG9lcyBpdCBoYXZlIG9uIHBlcmZvcm1hbmNlIG9uIG5vbmUtVDNFIG1hY2hpbmVzLiBJIGNvdWxkIGRlY2xhcmUKKyAqIGludCwgYnV0IGF0IGxlYXN0IG9uIEM5MCBzaXplb2YoaW50KSBjYW4gYmUgY2hvc2VuIGF0IGNvbXBpbGUgdGltZS4KKyAqIFNvIEkndmUgY2hvc2VuIGxvbmcuLi4KKyAqCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgKi8KKyNlbHNlCisjZGVmaW5lIE1ENV9MT05HIHVuc2lnbmVkIGludAorI2VuZGlmCisKKyNkZWZpbmUgTUQ1X0NCTE9DSwk2NAorI2RlZmluZSBNRDVfTEJMT0NLCShNRDVfQ0JMT0NLLzQpCisjZGVmaW5lIE1ENV9ESUdFU1RfTEVOR1RIIDE2CisKK3R5cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0CisJeworCU1ENV9MT05HIEEsQixDLEQ7CisJTUQ1X0xPTkcgTmwsTmg7CisJTUQ1X0xPTkcgZGF0YVtNRDVfTEJMT0NLXTsKKwl1bnNpZ25lZCBpbnQgbnVtOworCX0gTUQ1X0NUWDsKKworaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpOworaW50IE1ENV9VcGRhdGUoTUQ1X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDVfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKk1ENShjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBNRDVfVHJhbnNmb3JtKE1ENV9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIpOworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfc2hhLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9zaGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzJmZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfc2hhLmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qIGNyeXB0by9zaGEvc2hhLmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2lmbmRlZiBIRUFERVJfU0hBX0gKKyNkZWZpbmUgSEVBREVSX1NIQV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoT1BFTlNTTF9OT19TSEEpIHx8IChkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMCkgJiYgZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpKQorI2Vycm9yIFNIQSBpcyBkaXNhYmxlZC4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisjZGVmaW5lIEZJUFNfU0hBX1NJWkVfVCBzaXplX3QKKyNlbmRpZgorCisvKgorICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICogISBTSEFfTE9ORyBoYXMgdG8gYmUgYXQgbGVhc3QgMzIgYml0cyB3aWRlLiBJZiBpdCdzIHdpZGVyLCB0aGVuICEKKyAqICEgU0hBX0xPTkdfTE9HMiBoYXMgdG8gYmUgZGVmaW5lZCBhbG9uZy4gICAgICAgICAgICAgICAgICAgICAgICAhCisgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgKi8KKworI2lmIGRlZmluZWQoX19MUDMyX18pCisjZGVmaW5lIFNIQV9MT05HIHVuc2lnbmVkIGxvbmcKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQ1JBWSkgfHwgZGVmaW5lZChfX0lMUDY0X18pCisjZGVmaW5lIFNIQV9MT05HIHVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgU0hBX0xPTkdfTE9HMiAzCisjZWxzZQorI2RlZmluZSBTSEFfTE9ORyB1bnNpZ25lZCBpbnQKKyNlbmRpZgorCisjZGVmaW5lIFNIQV9MQkxPQ0sJMTYKKyNkZWZpbmUgU0hBX0NCTE9DSwkoU0hBX0xCTE9DSyo0KQkvKiBTSEEgdHJlYXRzIGlucHV0IGRhdGEgYXMgYQorCQkJCQkgKiBjb250aWd1b3VzIGFycmF5IG9mIDMyIGJpdAorCQkJCQkgKiB3aWRlIGJpZy1lbmRpYW4gdmFsdWVzLiAqLworI2RlZmluZSBTSEFfTEFTVF9CTE9DSyAgKFNIQV9DQkxPQ0stOCkKKyNkZWZpbmUgU0hBX0RJR0VTVF9MRU5HVEggMjAKKwordHlwZWRlZiBzdHJ1Y3QgU0hBc3RhdGVfc3QKKwl7CisJU0hBX0xPTkcgaDAsaDEsaDIsaDMsaDQ7CisJU0hBX0xPTkcgTmwsTmg7CisJU0hBX0xPTkcgZGF0YVtTSEFfTEJMT0NLXTsKKwl1bnNpZ25lZCBpbnQgbnVtOworCX0gU0hBX0NUWDsKKworI2lmbmRlZiBPUEVOU1NMX05PX1NIQTAKK2ludCBTSEFfSW5pdChTSEFfQ1RYICpjKTsKK2ludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEEoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sIHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKK2ludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7CitpbnQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIFNIQTFfVHJhbnNmb3JtKFNIQV9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisKKyNkZWZpbmUgU0hBMjU2X0NCTE9DSwkoU0hBX0xCTE9DSyo0KQkvKiBTSEEtMjU2IHRyZWF0cyBpbnB1dCBkYXRhIGFzIGEKKwkJCQkJICogY29udGlndW91cyBhcnJheSBvZiAzMiBiaXQKKwkJCQkJICogd2lkZSBiaWctZW5kaWFuIHZhbHVlcy4gKi8KKyNkZWZpbmUgU0hBMjI0X0RJR0VTVF9MRU5HVEgJMjgKKyNkZWZpbmUgU0hBMjU2X0RJR0VTVF9MRU5HVEgJMzIKKwordHlwZWRlZiBzdHJ1Y3QgU0hBMjU2c3RhdGVfc3QKKwl7CisJU0hBX0xPTkcgaFs4XTsKKwlTSEFfTE9ORyBObCxOaDsKKwlTSEFfTE9ORyBkYXRhW1NIQV9MQkxPQ0tdOworCXVuc2lnbmVkIGludCBudW0sbWRfbGVuOworCX0gU0hBMjU2X0NUWDsKKworI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgoraW50IFNIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworaW50IFNIQTIyNF9VcGRhdGUoU0hBMjU2X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTIyNChjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3Qgbix1bnNpZ25lZCBjaGFyICptZCk7CitpbnQgU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7CitpbnQgU0hBMjU2X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBMjU2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgU0hBMjU2X1RyYW5zZm9ybShTSEEyNTZfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorCisjZGVmaW5lIFNIQTM4NF9ESUdFU1RfTEVOR1RICTQ4CisjZGVmaW5lIFNIQTUxMl9ESUdFU1RfTEVOR1RICTY0CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKy8qCisgKiBVbmxpa2UgMzItYml0IGRpZ2VzdCBhbGdvcml0aG1zLCBTSEEtNTEyICpyZWxpZXMqIG9uIFNIQV9MT05HNjQKKyAqIGJlaW5nIGV4YWN0bHkgNjQtYml0IHdpZGUuIFNlZSBJbXBsZW1lbnRhdGlvbiBOb3RlcyBpbiBzaGE1MTIuYworICogZm9yIGZ1cnRoZXIgZGV0YWlscy4KKyAqLworI2RlZmluZSBTSEE1MTJfQ0JMT0NLCShTSEFfTEJMT0NLKjgpCS8qIFNIQS01MTIgdHJlYXRzIGlucHV0IGRhdGEgYXMgYQorCQkJCQkgKiBjb250aWd1b3VzIGFycmF5IG9mIDY0IGJpdAorCQkJCQkgKiB3aWRlIGJpZy1lbmRpYW4gdmFsdWVzLiAqLworI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKKyNkZWZpbmUgU0hBX0xPTkc2NCB1bnNpZ25lZCBfX2ludDY0CisjZGVmaW5lIFU2NChDKSAgICAgQyMjVUk2NAorI2VsaWYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2RlZmluZSBTSEFfTE9ORzY0IHVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgVTY0KEMpICAgICBDIyNVTAorI2Vsc2UKKyNkZWZpbmUgU0hBX0xPTkc2NCB1bnNpZ25lZCBsb25nIGxvbmcKKyNkZWZpbmUgVTY0KEMpICAgICBDIyNVTEwKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBTSEE1MTJzdGF0ZV9zdAorCXsKKwlTSEFfTE9ORzY0IGhbOF07CisJU0hBX0xPTkc2NCBObCxOaDsKKwl1bmlvbiB7CisJCVNIQV9MT05HNjQJZFtTSEFfTEJMT0NLXTsKKwkJdW5zaWduZWQgY2hhcglwW1NIQTUxMl9DQkxPQ0tdOworCX0gdTsKKwl1bnNpZ25lZCBpbnQgbnVtLG1kX2xlbjsKKwl9IFNIQTUxMl9DVFg7CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgoraW50IFNIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOworaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTM4NChjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3Qgbix1bnNpZ25lZCBjaGFyICptZCk7CitpbnQgU0hBNTEyX0luaXQoU0hBNTEyX0NUWCAqYyk7CitpbnQgU0hBNTEyX1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEE1MTJfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTUxMl9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBNTEyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgU0hBNTEyX1RyYW5zZm9ybShTSEE1MTJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCmluZGV4IDc4NTEwNmQuLmNlNDZhYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCkBAIC00LDYgKzQsOSBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbWliX2FwaS5oPgorCiAgICAgLyoKICAgICAgKiBwYXJzZS5oCiAgICAgICovCkBAIC0yOSwxMCArMzIsMTkgQEAKIFNPRlRXQVJFLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIE1BWExBQkVMICAgICAgICA2NCAgICAgIC8qIG1heGltdW0gY2hhcmFjdGVycyBpbiBhIGxhYmVsICovCisjZGVmaW5lIE5FVFNOTVBfTUFYTEFCRUwgNjQgICAgICAvKiBtYXhpbXVtIGNoYXJhY3RlcnMgaW4gYSBsYWJlbCAqLwogI2RlZmluZSBNQVhUT0tFTiAgICAgICAgMTI4ICAgICAvKiBtYXhpbXVtIGNoYXJhY3RlcnMgaW4gYSB0b2tlbiAqLwogI2RlZmluZSBNQVhRVU9URVNUUiAgICAgNDA5NiAgICAvKiBtYXhpbXVtIGNoYXJhY3RlcnMgaW4gYSBxdW90ZWQgc3RyaW5nICovCiAKKy8qCisgKiBNQVhMQUJFTCBhcHBlYXJzIHRvIGJlIHVudXNlZCBpbiBjb2RlLCBhbmQgY29uZmxpY3RzIHdpdGgKKyAqIDxhcnBhL25hbWVzZXIuaD4uIE9ubHkgZGVmaW5lIGl0IGlmIHJlcXVlc3RlZC4gVGhpcyB3aWxsCisgKiBjYXVzZSBwcm9ibGVtcyBpZiBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbiBpcyBhbHNvIGVuYWJsZWQuCisgKi8KKyNpZmRlZiBVQ0RfQ09NUEFUSUJMRQorI2RlZmluZSBNQVhMQUJFTCAgICAgICAgTkVUU05NUF9NQVhMQUJFTAorI2VuZGlmCisKICAgICBzdHJ1Y3QgdmFyaWFibGVfbGlzdDsKIAogICAgIC8qCkBAIC03MCwzMyArODIsNiBAQAogICAgIH07CiAKICAgICAvKgotICAgICAqIEEgbGlua2VkIGxpc3Qgb2Ygbm9kZXMuCi0gICAgICovCi0gICAgc3RydWN0IG5vZGUgewotICAgICAgICBzdHJ1Y3Qgbm9kZSAgICAqbmV4dDsKLSAgICAgICAgY2hhciAgICAgICAgICAgKmxhYmVsOyAgLyogVGhpcyBub2RlJ3MgKHVuaXF1ZSkgdGV4dHVhbCBuYW1lICovCi0gICAgICAgIHVfbG9uZyAgICAgICAgICBzdWJpZDsgIC8qIFRoaXMgbm9kZSdzIGludGVnZXIgc3ViaWRlbnRpZmllciAqLwotICAgICAgICBpbnQgICAgICAgICAgICAgbW9kaWQ7ICAvKiBUaGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhpcyBub2RlICovCi0gICAgICAgIGNoYXIgICAgICAgICAgICpwYXJlbnQ7IC8qIFRoZSBwYXJlbnQncyB0ZXh0dWFsIG5hbWUgKi8KLSAgICAgICAgaW50ICAgICAgICAgICAgIHRjX2luZGV4OyAgICAgICAvKiBpbmRleCBpbnRvIHRjbGlzdCAoLTEgaWYgTkEpICovCi0gICAgICAgIGludCAgICAgICAgICAgICB0eXBlOyAgIC8qIFRoZSB0eXBlIG9mIG9iamVjdCB0aGlzIHJlcHJlc2VudHMgKi8KLSAgICAgICAgaW50ICAgICAgICAgICAgIGFjY2VzczsKLSAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXR1czsKLSAgICAgICAgc3RydWN0IGVudW1fbGlzdCAqZW51bXM7ICAgICAgICAvKiAob3B0aW9uYWwpIGxpc3Qgb2YgZW51bWVyYXRlZCBpbnRlZ2VycyAqLwotICAgICAgICBzdHJ1Y3QgcmFuZ2VfbGlzdCAqcmFuZ2VzOwotICAgICAgICBzdHJ1Y3QgaW5kZXhfbGlzdCAqaW5kZXhlczsKLSAgICAgICAgY2hhciAgICAgICAgICAgKmF1Z21lbnRzOwotICAgICAgICBzdHJ1Y3QgdmFyYmluZF9saXN0ICp2YXJiaW5kczsKLSAgICAgICAgY2hhciAgICAgICAgICAgKmhpbnQ7Ci0gICAgICAgIGNoYXIgICAgICAgICAgICp1bml0czsKLSAgICAgICAgY2hhciAgICAgICAgICAgKmRlc2NyaXB0aW9uOyAgICAvKiBkZXNjcmlwdGlvbiAoYSBxdW90ZWQgc3RyaW5nKSAqLwotICAgICAgICBjaGFyICAgICAgICAgICAqcmVmZXJlbmNlOyAgICAvKiByZWZlcmVuY2VzIChhIHF1b3RlZCBzdHJpbmcpICovCi0gICAgICAgIGNoYXIgICAgICAgICAgICpkZWZhdWx0VmFsdWU7Ci0JY2hhciAgICAgICAgICAgKmZpbGVuYW1lOwotICAgICAgICBpbnQgICAgICAgICAgICAgbGluZW5vOwotICAgIH07Ci0KLSAgICAvKgogICAgICAqIEEgdHJlZSBpbiB0aGUgZm9ybWF0IG9mIHRoZSB0cmVlIHN0cnVjdHVyZSBvZiB0aGUgTUlCLgogICAgICAqLwogICAgIHN0cnVjdCB0cmVlIHsKQEAgLTEyOSw2ICsxMTQsNyBAQAogICAgICAgICBjaGFyICAgICAgICAgICAqcmVmZXJlbmNlOyAgICAvKiByZWZlcmVuY2VzIChhIHF1b3RlZCBzdHJpbmcpICovCiAgICAgICAgIGludCAgICAgICAgICAgICByZXBvcnRlZDsgICAgICAgLyogMT1yZXBvcnQgc3RhcnRlZCBpbiBwcmludF9zdWJ0cmVlLi4uICovCiAgICAgICAgIGNoYXIgICAgICAgICAgICpkZWZhdWx0VmFsdWU7CisgICAgICAgY2hhcgkgICAgICAgKnBhcnNlRXJyb3JTdHJpbmc7IC8qIENvbnRhaW5zIHRoZSBlcnJvciBzdHJpbmcgaWYgdGhlcmUgYXJlIGVycm9ycyBpbiBwYXJzaW5nIE1JQnMgKi8KICAgICB9OwogCiAgICAgLyoKQEAgLTIwOSw0NiArMTk1LDUxIEBACiAjZGVmaW5lCUFOT04JImFub255bW91cyMiCiAjZGVmaW5lCUFOT05fTEVOICBzdHJsZW4oQU5PTikKIAotICAgIHN0cnVjdCB0cmVlICAgICpuZXRzbm1wX3JlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKik7Ci0jaWZuZGVmIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCi0gICAgc3RydWN0IHRyZWUgICAgKnJlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKik7Ci0jZW5kaWYKLSAgICBzdHJ1Y3QgdHJlZSAgICAqcmVhZF9taWIoY29uc3QgY2hhciAqKTsKLSAgICBzdHJ1Y3QgdHJlZSAgICAqcmVhZF9hbGxfbWlicyh2b2lkKTsKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF91bmxvYWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpOwotI2lmbmRlZiBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQorI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUwogICAgIGludCAgICAgICAgICAgICB1bmxvYWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIHZvaWQgICAgICAgICAgICBpbml0X21pYl9pbnRlcm5hbHModm9pZCk7CiAjZW5kaWYKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9pbml0X21pYl9pbnRlcm5hbHModm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHVubG9hZF9hbGxfbWlicyh2b2lkKTsKICAgICBpbnQgICAgICAgICAgICAgYWRkX21pYmZpbGUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBGSUxFICopOwotICAgIGludCAgICAgICAgICAgICBhZGRfbWliZGlyKGNvbnN0IGNoYXIgKik7Ci0gICAgdm9pZCAgICAgICAgICAgIGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQpOwogICAgIGludCAgICAgICAgICAgICB3aGljaF9tb2R1bGUoY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICptb2R1bGVfbmFtZShpbnQsIGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfc3VidHJlZShGSUxFICosIHN0cnVjdCB0cmVlICosIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfYXNjaWlfZHVtcF90cmVlKEZJTEUgKiwgc3RydWN0IHRyZWUgKiwgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB0cmVlICAgICpmaW5kX3RyZWVfbm9kZShjb25zdCBjaGFyICosIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjb25zdCBjaGFyICAgICAqZ2V0X3RjX2Rlc2NyaXB0b3IoaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNvbnN0IGNoYXIgICAgICpnZXRfdGNfZGVzY3JpcHRpb24oaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB0cmVlICAgICpmaW5kX2Jlc3RfdHJlZV9ub2RlKGNvbnN0IGNoYXIgKiwgc3RydWN0IHRyZWUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCAqKTsKICAgICAvKgogICAgICAqIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IAogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHRyZWUgICAgKmZpbmRfbm9kZShjb25zdCBjaGFyICosIHN0cnVjdCB0cmVlICopOwogICAgIHN0cnVjdCB0cmVlICAgICpmaW5kX25vZGUyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsgCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgbW9kdWxlICAqZmluZF9tb2R1bGUoaW50KTsKICAgICB2b2lkICAgICAgICAgICAgYWRvcHRfb3JwaGFucyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpzbm1wX21pYl90b2dnbGVfb3B0aW9ucyhjaGFyICpvcHRpb25zKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX21pYl90b2dnbGVfb3B0aW9uc191c2FnZShjb25zdCBjaGFyICpsZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICogb3V0Zik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfbWliKEZJTEUgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfbWliX3RyZWUoRklMRSAqLCBzdHJ1Y3QgdHJlZSAqLCBpbnQpOwogICAgIGludCAgICAgICAgICAgICBnZXRfbWliX3BhcnNlX2Vycm9yX2NvdW50KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfZ2V0X3Rva2VuKEZJTEUgKiBmcCwgY2hhciAqdG9rZW4sIGludCBtYXh0bGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB0cmVlICAgICpmaW5kX2Jlc3RfdHJlZV9ub2RlKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRyZWUgKnRyZWVfdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50ICogbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAppbmRleCA3OGFmNTZlLi4wOGVjYTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaApAQCAtMTUsNyArMTUsNyBAQAogI2RlZmluZSBQUkVNSUJfQ09ORklHIDEKICNkZWZpbmUgRUlUSEVSX0NPTkZJRyAyCiAKLQorI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KIAogICAgIC8qCiAgICAgICogRGVmaW5lcyBhIHNldCBvZiBmaWxlIHR5cGVzIGFuZCB0aGUgcGFyc2UgYW5kIGZyZWUgZnVuY3Rpb25zCkBAIC00Myw3NiArNDMsODggQEAKICAgICB9OwogCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZyhjaGFyICopOyAgICAgLyogcGFyc2UgYSBzaW1wbGUgbGluZTogdG9rZW49dmFsdWVzICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9jb25maWdfcmVtZW1iZXIoY2hhciAqKTsgICAgLyogcHJvY2VzcyBsYXRlciwgZHVyaW5nIHNubXBfaW5pdCgpICovCiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX3Byb2Nlc3NfbWVtb3JpZXModm9pZCk7ICAgICAgLyogcnVuIGFsbCBtZW1vcmllcyB0aHJvdWdoIHBhcnNlciAqLwotICAgIHZvaWQgICAgICAgICAgICByZWFkX2NvbmZpZyhjb25zdCBjaGFyICosIHN0cnVjdCBjb25maWdfbGluZSAqLCBpbnQpOwotICAgIHZvaWQgICAgICAgICAgICByZWFkX2NvbmZpZ3Modm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHJlYWRfcHJlbWliX2NvbmZpZ3Modm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHJlYWRfY29uZmlnX2ZpbGVzKGludCk7CisgICAgaW50ICAgICAgICAgICAgIHJlYWRfY29uZmlnKGNvbnN0IGNoYXIgKiwgc3RydWN0IGNvbmZpZ19saW5lICosIGludCk7CisgICAgaW50ICAgICAgICAgICAgIHJlYWRfY29uZmlnX2ZpbGVzKGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgZnJlZV9jb25maWcodm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoY29uc3QgY2hhciAqKTsKLSAgICB2b2lkICAgICAgICAgICAgY29uZmlnX3B3YXJuKGNvbnN0IGNoYXIgKik7CisjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiYmIF9fR05VQ19NSU5PUl9fIDwgOCkKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcihjb25zdCBjaGFyICosIC4uLik7CisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX3dhcm4oY29uc3QgY2hhciAqLCAuLi4pOworI2Vsc2UKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcihjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKF9fcHJpbnRmX18sIDEsIDIpKSk7CisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX3dhcm4oY29uc3QgY2hhciAqLCAuLi4pCisJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhfX3ByaW50Zl9fLCAxLCAyKSkpOworI2VuZGlmCisKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpza2lwX3doaXRlKGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBjaGFyICAgICAqc2tpcF93aGl0ZV9jb25zdChjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnNraXBfbm90X3doaXRlKGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBjaGFyICAgICAqc2tpcF9ub3Rfd2hpdGVfY29uc3QoY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpza2lwX3Rva2VuKGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBjaGFyICAgICAqc2tpcF90b2tlbl9jb25zdChjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKmNvcHlfbndvcmQoY2hhciAqLCBjaGFyICosIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBjaGFyICAgICAqY29weV9ud29yZF9jb25zdChjb25zdCBjaGFyICosIGNoYXIgKiwgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpjb3B5X3dvcmQoY2hhciAqLCBjaGFyICopOyAgLyogZG8gbm90IHVzZSAqLwotICAgIHZvaWQgICAgICAgICAgICByZWFkX2NvbmZpZ193aXRoX3R5cGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIGNoYXIgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7Ci0gICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSwgY29uc3QgY2hhciAqKTsKLSAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKLSAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnJlbGVhc2VyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKLSAgICB2b2lkICAgICAgICAgICAgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci0gICAgdm9pZCAgICAgICAgICAgIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKik7Ci0gICAgdm9pZCAgICAgICAgICAgIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycyh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoY29uc3QgY2hhciAqbGVhZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgcmVhZF9jb25maWdfd2l0aF90eXBlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZyhjaGFyICpzYXZldG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7Ci0gICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGNoYXIgKnJlYWRmcm9tLAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGNvbnN0IGNoYXIgKnJlYWRmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiogc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3QgY2hhciAgICAgKnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KGNvbnN0IGNoYXIgKnJlYWRmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiogc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3JlYWRfb2JqaWQoY2hhciAqcmVhZGZyb20sIG9pZCAqKiBvYmppZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW4pOworICAgIGNvbnN0IGNoYXIgICAgICpyZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KGNvbnN0IGNoYXIgKnJlYWRmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqKiBvYmppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3NhdmVfb2JqaWQoY2hhciAqc2F2ZXRvLCBvaWQgKiBvYmppZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19yZWFkX2RhdGEoaW50IHR5cGUsIGNoYXIgKnJlYWRmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YXB0ciwgc2l6ZV90ICogbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19yZWFkX21lbW9yeShpbnQgdHlwZSwgY2hhciAqcmVhZGZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGFwdHIsIHNpemVfdCAqIGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfc3RvcmVfZGF0YShpbnQgdHlwZSwgY2hhciAqc3RvcmV0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhcHRyLCBzaXplX3QgKiBsZW4pOwogICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19zdG9yZV9kYXRhX3ByZWZpeChjaGFyIHByZWZpeCwgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnN0b3JldG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGFwdHIsIHNpemVfdCBsZW4pOworICAgIGludCAgcmVhZF9jb25maWdfZmlsZXNfb2ZfdHlwZShpbnQgd2hlbiwgc3RydWN0IGNvbmZpZ19maWxlcyAqY3RtcCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcmVhZF9jb25maWdfc3RvcmUoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcmVhZF9hcHBfY29uZmlnX3N0b3JlKGNvbnN0IGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2F2ZV9wZXJzaXN0ZW50KGNvbnN0IGNoYXIgKnR5cGUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfY2xlYW5fcGVyc2lzdGVudChjb25zdCBjaGFyICp0eXBlKTsKICAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlYWRfY29uZmlnX2dldF9oYW5kbGVycyhjb25zdCBjaGFyICp0eXBlKTsKIApAQCAtMTMwLDEzICsxNDIsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqbWVtKTsKIAogICAgIHZvaWQgICAgICAgICAgICBzZXRfY29uZmlndXJhdGlvbl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNvbnN0IGNoYXIgICAgICpnZXRfY29uZmlndXJhdGlvbl9kaXJlY3Rvcnkodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNldF9wZXJzaXN0ZW50X2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIpOwogICAgIGNvbnN0IGNoYXIgICAgICpnZXRfcGVyc2lzdGVudF9kaXJlY3Rvcnkodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNldF90ZW1wX2ZpbGVfcGF0dGVybihjb25zdCBjaGFyICpwYXR0ZXJuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNvbnN0IGNoYXIgICAgICpnZXRfdGVtcF9maWxlX3BhdHRlcm4odm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgaGFuZGxlX2xvbmdfb3B0KGNvbnN0IGNoYXIgKm15b3B0YXJnKTsKIAorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAppbmRleCBkOTI3MDQ0Li5mNGI2M2Y1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaApAQCAtMzUsNiArMzUsNyBAQAogICAgIGludCAgICAgICAgICAgICBzY19nZXRfcHJvcGVyX3ByaXZfbGVuZ3RoKGNvbnN0IG9pZCAqIHByaXZ0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IHByaXZ0eXBlX2xlbik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzY19pbml0KHZvaWQpOwogICAgIGludCAgICAgICAgICAgICBzY19zaHV0ZG93bihpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKQEAgLTQzLDIwICs0NCwyMCBAQAogCiAgICAgaW50ICAgICAgICAgICAgIHNjX2dlbmVyYXRlX2tleWVkX2hhc2goY29uc3Qgb2lkICogYXV0aHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGF1dGh0eXBlbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIG1lc3NhZ2UsIHVfaW50IG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBtZXNzYWdlLCB1X2ludCBtc2dsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogTUFDLCBzaXplX3QgKiBtYWNsZW4pOwogCiAgICAgaW50ICAgICAgICAgICAgIHNjX2NoZWNrX2tleWVkX2hhc2goY29uc3Qgb2lkICogYXV0aHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGF1dGh0eXBlbGVuLCB1X2NoYXIgKiBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQga2V5bGVuLCB1X2NoYXIgKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IG1zZ2xlbiwgdV9jaGFyICogTUFDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhdXRodHlwZWxlbiwgY29uc3QgdV9jaGFyICoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGtleWxlbiwgY29uc3QgdV9jaGFyICogbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBtc2dsZW4sIGNvbnN0IHVfY2hhciAqIE1BQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBtYWNsZW4pOwogCiAgICAgaW50ICAgICAgICAgICAgIHNjX2VuY3J5cHQoY29uc3Qgb2lkICogcHJpdnR5cGUsIHNpemVfdCBwcml2dHlwZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBpdiwgdV9pbnQgaXZsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogcGxhaW50ZXh0LCB1X2ludCBwdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBwbGFpbnRleHQsIHVfaW50IHB0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGNpcGhlcnRleHQsIHNpemVfdCAqIGN0bGVuKTsKIAogICAgIGludCAgICAgICAgICAgICBzY19kZWNyeXB0KGNvbnN0IG9pZCAqIHByaXZ0eXBlLCBzaXplX3QgcHJpdnR5cGVsZW4sCkBAIC02Niw3ICs2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogcGxhaW50ZXh0LCBzaXplX3QgKiBwdGxlbik7CiAKICAgICBpbnQgICAgICAgICAgICAgc2NfaGFzaChjb25zdCBvaWQgKiBoYXNodHlwZSwgc2l6ZV90IGhhc2h0eXBlbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogYnVmLCBzaXplX3QgYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBNQUMsIHNpemVfdCAqIE1BQ19sZW4pOwogCiAgICAgaW50ICAgICAgICAgICAgIHNjX2dldF90cmFuc2Zvcm1fdHlwZShvaWQgKiBoYXNodHlwZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCmluZGV4IGJmYjRjNWYuLmEzNTVkZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaApAQCAtMTgsOCArMTgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHV0Y19vZmZzZXRfaG91cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdXRjX29mZnNldF9taW51dGVzKTsKIAotICAgIHVfY2hhciAgICAgICAgICpkYXRlX25fdGltZSh0aW1lX3QgKiwgc2l6ZV90ICopOwotICAgIHRpbWVfdCAgICAgICAgICBjdGltZV90b190aW1ldChjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdV9jaGFyICAgICAgICAgKmRhdGVfbl90aW1lKGNvbnN0IHRpbWVfdCAqLCBzaXplX3QgKik7CisgICAgdGltZV90ICAgICAgICAgIGN0aW1lX3RvX3RpbWV0KGNvbnN0IGNoYXIgKik7CiAKICAgICAvKgogICAgICAqIFRydWVWYWx1ZSAKQEAgLTUyLDcgKzUzLDExIEBACiAjZGVmaW5lIFNUX1BFUk1BTkVOVAk0CiAjZGVmaW5lIFNUX1JFQURPTkxZCTUKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgIGNoZWNrX3Jvd3N0YXR1c190cmFuc2l0aW9uKGludCBvbGRfdmFsLCBpbnQgbmV3X3ZhbCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjaGFyICAgICAgICAgICAgY2hlY2tfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGVfdHJhbnNpdGlvbihpbnQgb2xkX3ZhbCwgaW50IG5ld192YWwsIGludCBvbGRfc3RvcmFnZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAgY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uKGludCBvbGRfdmFsLCBpbnQgbmV3X3ZhbCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKaW5kZXggM2JiNTViZi4uZjU5NzhjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCkBAIC0xMTgsNyArMTE4LDkgQEAKICNkZWZpbmUgU05NUF9NU0dfR0VUICAgICAgICAoQVNOX0NPTlRFWFQgfCBBU05fQ09OU1RSVUNUT1IgfCAweDApIC8qIGEwPTE2MCAqLwogI2RlZmluZSBTTk1QX01TR19HRVRORVhUICAgIChBU05fQ09OVEVYVCB8IEFTTl9DT05TVFJVQ1RPUiB8IDB4MSkgLyogYTE9MTYxICovCiAjZGVmaW5lIFNOTVBfTVNHX1JFU1BPTlNFICAgKEFTTl9DT05URVhUIHwgQVNOX0NPTlNUUlVDVE9SIHwgMHgyKSAvKiBhMj0xNjIgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjZGVmaW5lIFNOTVBfTVNHX1NFVCAgICAgICAgKEFTTl9DT05URVhUIHwgQVNOX0NPTlNUUlVDVE9SIHwgMHgzKSAvKiBhMz0xNjMgKi8KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAvKgogICAgICAqIFBEVSB0eXBlcyBpbiBTTk1QdjEgYW5kIFNOTVBzZWMgCkBAIC0xMzcsNiArMTM5LDcgQEAKICAgICAgKi8KICNkZWZpbmUgU05NUF9NU0dfUkVQT1JUICAgICAoQVNOX0NPTlRFWFQgfCBBU05fQ09OU1RSVUNUT1IgfCAweDgpIC8qIGE4PTE2OCAqLwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIC8qCiAgICAgICogaW50ZXJuYWwgbW9kZXMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgdXNlZCBieSB0aGUgcHJvdG9jb2wgZm9yIHRoZQogICAgICAqIHBkdSB0eXBlLgpAQCAtMTYyLDYgKzE2NSw3IEBACiAjZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX1VORE9fQ09NTUlUICAgICAgICAgICAyNAogI2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9JUlJFVkVSU0lCTEVfQ09NTUlUICAgMjUKICNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfVU5ET19DTEVBTlVQICAgICAgICAgIDI2CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgLyoKICAgICAgKiBtb2RlcyA+IDEyOCBmb3Igbm9uIHNldHMuCkBAIC0xNzUsOSArMTc5LDE0IEBACiAgICAgLyoKICAgICAgKiB0ZXN0IGZvciBtZW1iZXIgb2YgQ29uZmlybWVkIENsYXNzIGkuZS4sIHJlcG9ydGFibGUgCiAgICAgICovCisjaWZkZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisjZGVmaW5lIFNOTVBfQ01EX0NPTkZJUk1FRChjKSAoYyA9PSBTTk1QX01TR19JTkZPUk0gfHwgYyA9PSBTTk1QX01TR19HRVRCVUxLIHx8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPT0gU05NUF9NU0dfR0VUTkVYVCB8fCBjID09IFNOTVBfTVNHX0dFVCApCisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZGVmaW5lIFNOTVBfQ01EX0NPTkZJUk1FRChjKSAoYyA9PSBTTk1QX01TR19JTkZPUk0gfHwgYyA9PSBTTk1QX01TR19HRVRCVUxLIHx8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPT0gU05NUF9NU0dfR0VUTkVYVCB8fCBjID09IFNOTVBfTVNHX0dFVCB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9PSBTTk1QX01TR19TRVQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9PSBTTk1QX01TR19TRVQgKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogRXhjZXB0aW9uIHZhbHVlcyBmb3IgU05NUHYycCwgU05NUHYyYywgU05NUHYydSwgU05NUHYyKiwgYW5kIFNOTVB2MyAKQEAgLTI3Nyw2ICsyODYsNyBAQAogI2RlZmluZSBTTk1QX1NFQ19NT0RFTF9TTk1QdjEJCTEKICNkZWZpbmUgU05NUF9TRUNfTU9ERUxfU05NUHYyYwkJMgogI2RlZmluZSBTTk1QX1NFQ19NT0RFTF9VU00JCTMKKyNkZWZpbmUgU05NUF9TRUNfTU9ERUxfVFNNICAgICAgICAgICAgICA0CiAjZGVmaW5lIFNOTVBfU0VDX01PREVMX1NOTVB2MnAJCTI1NgogCiAjZGVmaW5lIFNOTVBfU0VDX0xFVkVMX05PQVVUSAkJMQpAQCAtMzE5LDExICszMjksMTUgQEAKICNkZWZpbmUgU05NUEFETUlOTEVOR1RIIDI1NQogCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICp1cHRpbWVfc3RyaW5nKHVfbG9uZywgY2hhciAqKTsKICAgICBjaGFyICAgICAgICAgICAqdXB0aW1lX3N0cmluZ19uKHVfbG9uZywgY2hhciAqLCBzaXplX3QpOwotICAgIHZvaWQgICAgICAgICAgICB4ZHVtcChjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHhkdW1wKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKnNubXBfcGFyc2VfdmFyX29wKHVfY2hhciAqLCBvaWQgKiwgc2l6ZV90ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiwgdV9jaGFyICoqLCBzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqc25tcF9idWlsZF92YXJfb3AodV9jaGFyICosIG9pZCAqLCBzaXplX3QgKiwgdV9jaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsIHVfY2hhciAqLCBzaXplX3QgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmgKaW5kZXggODg1MTZjYi4uMzI1MTA5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmgKQEAgLTExLDYgKzExLDEwIEBACiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCiAKKyNpZm5kZWYgbGludXgKKyAgICBjb25maWdfZXJyb3IoQUFMNSBQVkMgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSAtTGludXggb25seS0pOworI2VuZGlmCisKICNpbmNsdWRlIDxhdG0uaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQWxpYXNEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQWxpYXNEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2FmY2I1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBbGlhc0RvbWFpbi5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX1NOTVBBTElBU0RPTUFJTl9ICisjZGVmaW5lIF9TTk1QQUxJQVNET01BSU5fSAorCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKworLyoKKyAqIFNpbXBsZSBhbGlhc2VzIGZvciBjb21wbGV4IHRyYW5zcG9ydCBzdHJpbmdzIHRoYXQgY2FuIGJlIHNwZWNpZmllZAorICogdmlhIHRoZSBzbm1wLmNvbmYgZmlsZSBhbmQgdGhlICdhbGlhcycgdG9rZW4uCisgKi8KKworI2RlZmluZSBUUkFOU1BPUlRfRE9NQUlOX0FMSUFTX0lQCQkxLDMsNiwxLDIsMSwxMDAsMSw1CitORVRTTk1QX0lNUE9SVCBvaWQgbmV0c25tcF9zbm1wQUxJQVNEb21haW5bXTsKKworLyoKKyAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LiAgCisgKi8KKwordm9pZCAgICAgICAgICAgIG5ldHNubXBfYWxpYXNfY3Rvcih2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypORVRTTk1QX1RSQU5TUE9SVF9BTElBU19ET01BSU4gKi8KKworI2VuZGlmLypfU05NUEFMSUFTRE9NQUlOX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCmluZGV4IDRhNGUxYTguLmUxYmU3MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKQEAgLTExLDYgKzExLDcgQEAKIAogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0NBTExCQUNLX0RPTUFJTgogCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CiAKIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfY2FsbGJhY2tfcGFzc19zIHsKQEAgLTM4LDYgKzM5LDcgQEAKIGludCAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrX2NoZWNrX3BhY2tldCh1X2NoYXIgKiBwa3QsIHNpemVfdCBsZW4pOwogbmV0c25tcF9wZHUgICAgKm5ldHNubXBfY2FsbGJhY2tfY3JlYXRlX3BkdShuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvcGFxdWUsIHNpemVfdCBvbGVuZ3RoKTsKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX3Nlc3Npb24gKm5ldHNubXBfY2FsbGJhY2tfb3BlbihpbnQgYXR0YWNoX3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqcmV0dXJuX2Z1bmMpIChpbnQgb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbgpAQCAtNTUsNiArNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgIG5ldHNubXBfY2xlYXJfY2FsbGJhY2tfbGlzdCh2b2lkKTsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzNWRhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX1NOTVBEVExTVURQRE9NQUlOX0gKKyNkZWZpbmUgX1NOTVBEVExTVURQRE9NQUlOX0gKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKK2NvbmZpZ19yZXF1aXJlKFVEUCkKK2NvbmZpZ19yZXF1aXJlKFRMU0Jhc2UpCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIFRSQU5TUE9SVF9ET01BSU5fRFRMU19VRFBfSVAJMSwzLDYsMSw2LDEsOQorTkVUU05NUF9JTVBPUlQgb2lkIG5ldHNubXBEVExTVURQRG9tYWluWzddOworTkVUU05NUF9JTVBPUlQgc2l6ZV90IG5ldHNubXBEVExTVURQRG9tYWluX2xlbjsKKworbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfZHRsc3VkcF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvY2FsKTsKKworCisvKgorICogUmVnaXN0ZXIgYW55IGNvbmZpZ3VyYXRpb24gdG9rZW5zIHNwZWNpZmljIHRvIHRoZSBhZ2VudC4gIAorICovCisKK3ZvaWQgICAgICAgICAgICBuZXRzbm1wX2R0bHN1ZHBfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKTsKKworLyoKKyAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LiAgCisgKi8KKwordm9pZCAgICAgICAgICAgIG5ldHNubXBfZHRsc3VkcF9jdG9yKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmLypfU05NUERUTFNVRFBET01BSU5fSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAppbmRleCAzMDRiMzYwLi4xMWMyYmViIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKQEAgLTExLDYgKzExLDkgQEAKICNpbmNsdWRlIDxuZXRpcHgvaXB4Lmg+CiAjZW5kaWYKIAorI2lmbmRlZiBsaW51eAorICAgIGNvbmZpZ19lcnJvcihJUFggc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSAtTGludXggb25seS0pOworI2VuZGlmCiAKIG5ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX2lweF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2lweCAqYWRkciwgaW50IGxvY2FsKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzFkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKQEAgLTAsMCArMSwzNyBAQAorLyogSVBWNCBiYXNlIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworICovCisjaWZuZGVmIFNOTVBJUFY0QkFTRV9ICisjZGVmaW5lIFNOTVBJUFY0QkFTRV9ICisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKworICAgIGNoYXIgKm5ldHNubXBfaXB2NF9mbXRhZGRyKGNvbnN0IGNoYXIgKnByZWZpeCwgbmV0c25tcF90cmFuc3BvcnQgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbik7CisKKy8qCisgKiBDb252ZXJ0IGEgInRyYWRpdGlvbmFsIiBwZWVybmFtZSBpbnRvIGEgc29ja2FkZHJfaW4gc3RydWN0dXJlIHdoaWNoIGlzCisgKiB3cml0dGVuIHRvICphZGRyXyAgUmV0dXJucyAxIGlmIHRoZSBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLCBvciAwIGlmIGl0CisgKiBmYWlsZWQKKyAqLworCisgICAgaW50IG5ldHNubXBfc29ja2FkZHJfaW4oc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBjb25zdCBjaGFyICpwZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQpOworICAgIGludCBuZXRzbm1wX3NvY2thZGRyX2luMihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiBTTk1QSVBWNEJBU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWM4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKQEAgLTAsMCArMSwzNCBAQAorLyogSVBWNiBiYXNlIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworICovCisjaWZuZGVmIFNOTVBJUFY2QkFTRV9ICisjZGVmaW5lIFNOTVBJUFY2QkFTRV9ICisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY2hhciAqbmV0c25tcF9pcHY2X2ZtdGFkZHIoY29uc3QgY2hhciAqcHJlZml4LCBuZXRzbm1wX3RyYW5zcG9ydCAqdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCBuZXRzbm1wX3NvY2thZGRyX2luNl8yKHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCk7CisgICAgaW50IG5ldHNubXBfc29ja2FkZHJfaW42KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGludCByZW1vdGVfcG9ydCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogU05NUElQVjZCQVNFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkNDRlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBfU05NUFNTSERPTUFJTl9ICisjZGVmaW5lIF9TTk1QU1NIRE9NQUlOX0gKKworY29uZmlnX3JlcXVpcmUoSVB2NEJhc2UpCitjb25maWdfcmVxdWlyZShTb2NrZXRCYXNlKQorCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisvKgorICogVGhlIFNOTVAgb3ZlciBTU0ggb3ZlciBJUHY0IHRyYW5zcG9ydCBkb21haW4gaXMgaWRlbnRpZmllZCBieQorICogdHJhbnNwb3J0RG9tYWluU3NoSXB2NCBhcyBkZWZpbmVkIGluIFJGQyAzNDE5LgorICovCisKKyNkZWZpbmUgVFJBTlNQT1JUX0RPTUFJTl9TU0hfSVAJCTEsMyw2LDEsMiwxLDEwMCwxLDEwMAorTkVUU05NUF9JTVBPUlQgY29uc3Qgb2lkIG5ldHNubXBfc25tcFNTSERvbWFpbltdOworZW51bSB7IG5ldHNubXBfc25tcFNTSERvbWFpbl9sZW4gPSA5IH07CisKK25ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX3NzaF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBpbnQgbG9jYWwpOworCisvKgorICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuCisgKi8KKwordm9pZCAgICAgICAgICAgIG5ldHNubXBfc3NoX2N0b3Iodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTiAqLworCisjZW5kaWYvKl9TTk1QU1NIRE9NQUlOX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmgKaW5kZXggNzdiZTIyYi4uM2U5YTU5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oCkBAIC0zLDEzICszLDEyIEBACiAKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TVERfRE9NQUlOCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KLQogLyoKICAqIFRoZSBTTk1QIG92ZXIgU1REIG92ZXIgSVB2NCB0cmFuc3BvcnQgZG9tYWluIGlzIGlkZW50aWZpZWQgYnkKICAqIHRyYW5zcG9ydERvbWFpblN0ZElwdjQgYXMgZGVmaW5lZCBpbiBSRkMgMzQxOS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkODZjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgU05NUFNPQ0tFVEJBU0VET01BSU5fSAorI2RlZmluZSBTTk1QU09DS0VUQkFTRURPTUFJTl9ICisKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKyAgICBpbnQgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KTsKKyAgICBpbnQgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQoaW50IHMsIGludCBvcHRuYW1lLCBpbnQgbG9jYWwsIGludCBzaXplKTsKKyAgICBpbnQgbmV0c25tcF9zZXRfbm9uX2Jsb2NraW5nX21vZGUoaW50IHNvY2ssIGludCBub25fYmxvY2tpbmdfbW9kZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTTk1QU09DS0VUQkFTRURPTUFJTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljODFhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIFNOTVBUQ1BCQVNFRE9NQUlOX0gKKyNkZWZpbmUgU05NUFRDUEJBU0VET01BSU5fSAorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKyAgICBpbnQgbmV0c25tcF90Y3BiYXNlX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCk7CisgICAgaW50IG5ldHNubXBfdGNwYmFzZV9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpOworICAgICAgICAKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTTk1QVENQQkFTRURPTUFJTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAppbmRleCBmNDY1Yjc5Li5jNDU4NTZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKQEAgLTEsMjIgKzEsMjIgQEAKICNpZm5kZWYgX1NOTVBUQ1BET01BSU5fSAogI2RlZmluZSBfU05NUFRDUERPTUFJTl9ICiAKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCitjb25maWdfcmVxdWlyZShJUHY0QmFzZSkKK2NvbmZpZ19yZXF1aXJlKFNvY2tldEJhc2UpCitjb25maWdfcmVxdWlyZShUQ1BCYXNlKQorCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQX0RPTUFJTgogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgotCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCiAvKgogICogVGhlIFNOTVAgb3ZlciBUQ1Agb3ZlciBJUHY0IHRyYW5zcG9ydCBkb21haW4gaXMgaWRlbnRpZmllZCBieQogICogdHJhbnNwb3J0RG9tYWluVGNwSXB2NCBhcyBkZWZpbmVkIGluIFJGQyAzNDE5LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAppbmRleCBiOWRlOWViLi4zYmNhMjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaApAQCAtMSwxMyArMSwyMCBAQAogI2lmbmRlZiBfU05NUFRDUElQVjZET01BSU5fSAogI2RlZmluZSBfU05NUFRDUElQVjZET01BSU5fSAogCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworY29uZmlnX3JlcXVpcmUoSVB2NkJhc2UpCitjb25maWdfcmVxdWlyZShTb2NrZXRCYXNlKQorY29uZmlnX3JlcXVpcmUoVENQQmFzZSkKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KLQogLyoKICAqIFRoZSBTTk1QIG92ZXIgVENQIG92ZXIgSVB2NiB0cmFuc3BvcnQgZG9tYWluIGlzIGlkZW50aWZpZWQgYnkKICAqIHRyYW5zcG9ydERvbWFpblRjcElwdjQgYXMgZGVmaW5lZCBpbiBSRkMgMzQxOS4KQEAgLTIzLDcgKzMwLDcgQEAKICAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LiAgCiAgKi8KIAotdm9pZCAgICAgICAgICAgIG5ldHNubXBfdGNwNl9jdG9yKHZvaWQpOworTkVUU05NUF9JTVBPUlQgdm9pZCAgICAgbmV0c25tcF90Y3BpcHY2X2N0b3Iodm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzIxY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgKQEAgLTAsMCArMSw4MyBAQAorI2lmbmRlZiBfU05NUFRMU0JBU0VET01BSU5fSAorI2RlZmluZSBfU05NUFRMU0JBU0VET01BSU5fSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKworLyogT3BlblNTTCBJbmNsdWRlcyAqLworI2luY2x1ZGUgIm9wZW5zc2wvYmlvLmgiCisjaW5jbHVkZSAib3BlbnNzbC9zc2wuaCIKKyNpbmNsdWRlICJvcGVuc3NsL2Vyci5oIgorCisvKgorICogUHJvdG90eXBlcworICovCisKKyAgICB2b2lkIG5ldHNubXBfdGxzYmFzZV9jdG9yKHZvaWQpOworICAgIHZvaWQgbmV0c25tcF9pbml0X3Rsc2Jhc2Uodm9pZCk7CisgICAgY29uc3QgY2hhciAqIF94NTA5X2dldF9lcnJvcihpbnQgeDUwOWZhaWx2YWx1ZSwgY29uc3QgY2hhciAqbG9jYXRpb24pOworICAgIHZvaWQgX29wZW5zc2xfbG9nX2Vycm9yKGludCByYywgU1NMICpjb24sIGNvbnN0IGNoYXIgKmxvY2F0aW9uKTsKKworICAgIC8qIHdpbGwgbGlrZWx5IGdvIGF3YXkgKi8KKyAgICBTU0xfQ1RYICpnZXRfY2xpZW50X2N0eCh2b2lkKTsKKyAgICBTU0xfQ1RYICpnZXRfc2VydmVyX2N0eCh2b2lkKTsKKworI2RlZmluZSBORVRTTk1QX1RMU0JBU0VfSVNfQ0xJRU5UICAgICAweDAxCisjZGVmaW5lIE5FVFNOTVBfVExTQkFTRV9DRVJUX0ZQX1ZFUklGSUVEIDB4MDIKKworICAgIC8qCisgICAgICogX0ludGVybmFsXyBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgX25ldHNubXBUTFNCYXNlRGF0YV9zIHsKKyAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyAgICAgICBTU0xfQ1RYICAgICAgICAgICAgICAgICAgICpzc2xfY29udGV4dDsKKyAgICAgICBTU0wgICAgICAgICAgICAgICAgICAgICAgICpzc2w7CisgICAgICAgQklPICAgICAgICAgICAgICAgICAgICAgICAqc3NsYmlvOworICAgICAgIEJJTyAgICAgICAgICAgICAgICAgICAgICAgKmFjY2VwdF9iaW87CisgICAgICAgQklPICAgICAgICAgICAgICAgICAgICAgICAqYWNjZXB0ZWRfYmlvOworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgKnNlY3VyaXR5TmFtZTsKKyAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICphZGRyX3N0cmluZzsKKyAgICAgICBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICphZGRyOworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgKm91cl9pZGVudGl0eTsKKyAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICp0aGVpcl9pZGVudGl0eTsKKyAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICp0aGVpcl9maW5nZXJwcmludDsKKyAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICp0aGVpcl9ob3N0bmFtZTsKKyAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICp0cnVzdF9jZXJ0OworICAgIH0gX25ldHNubXBUTFNCYXNlRGF0YTsKKworI2RlZmluZSBWUkZZX1BBUkVOVF9XQVNfT0sgMQorICAgIHR5cGVkZWYgc3RydWN0IF9uZXRzbm1wX3ZlcmlmeV9pbmZvX3MgeworICAgICAgIGludCBmbGFnczsKKyAgICB9IF9uZXRzbm1wX3ZlcmlmeV9pbmZvOworCisgICAgU1NMX0NUWCAqc3NsY3R4X2NsaWVudF9zZXR1cChjb25zdCBTU0xfTUVUSE9EICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNiYXNlKTsKKyAgICBTU0xfQ1RYICpzc2xjdHhfc2VydmVyX3NldHVwKGNvbnN0IFNTTF9NRVRIT0QgKik7CisKKyAgICBpbnQgbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9zZXJ2ZXJfY2VydChTU0wgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhKTsKKyAgICBpbnQgbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9jbGllbnRfY2VydChTU0wgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhKTsKKyAgICBpbnQgbmV0c25tcF90bHNiYXNlX2V4dHJhY3Rfc2VjdXJpdHlfbmFtZShTU0wgKnNzbCwgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSk7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqbmV0c25tcF90bHNiYXNlX2FsbG9jYXRlX3Rsc2RhdGEobmV0c25tcF90cmFuc3BvcnQgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzc2VydmVyKTsKKyAgICBpbnQgbmV0c25tcF90bHNiYXNlX3dyYXB1cF9yZWN2KG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpOworICAgIGludCBuZXRzbm1wX3Rsc2Jhc2VfY29uZmlnKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICp0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKKyAgICBpbnQgbmV0c25tcF90bHNiYXNlX3Nlc3Npb25faW5pdChzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3MpOworICAgIGludCB0bHNfZ2V0X3ZlcmlmeV9pbmZvX2luZGV4KHZvaWQpOworCisgICAgdm9pZCBuZXRzbm1wX3Rsc2Jhc2VfZnJlZV90bHNkYXRhKF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2Jhc2UpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZi8qX1NOTVBUTFNCQVNFRE9NQUlOX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyNzY2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBfU05NUFRMU1RDUERPTUFJTl9ICisjZGVmaW5lIF9TTk1QVExTVENQRE9NQUlOX0gKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKK2NvbmZpZ19yZXF1aXJlKElQdjRCYXNlKQorY29uZmlnX3JlcXVpcmUoU29ja2V0QmFzZSkKK2NvbmZpZ19yZXF1aXJlKFRMU0Jhc2UpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgVFJBTlNQT1JUX0RPTUFJTl9UTFNfVENQX0lQCTEsMyw2LDEsNiwxLDgKK05FVFNOTVBfSU1QT1JUIG9pZCBuZXRzbm1wVExTVENQRG9tYWluWzddOworTkVUU05NUF9JTVBPUlQgc2l6ZV90IG5ldHNubXBUTFNUQ1BEb21haW5fbGVuOworCituZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF90bHN0Y3BfdHJhbnNwb3J0KGNvbnN0IGNoYXIgKmFkZHJfc3RyaW5nLCBpbnQgbG9jYWwpOworCisvKgorICogUmVnaXN0ZXIgYW55IGNvbmZpZ3VyYXRpb24gdG9rZW5zIHNwZWNpZmljIHRvIHRoZSBhZ2VudC4gIAorICovCisKK3ZvaWQgICAgICAgICAgICBuZXRzbm1wX3Rsc3RjcF9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpOworCisvKgorICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuICAKKyAqLworCit2b2lkICAgICAgICAgICAgbmV0c25tcF90bHN0Y3BfY3Rvcih2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZi8qX1NOTVBUTFNUQ1BET01BSU5fSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDJjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIFNOTVBVRFBCQVNFRE9NQUlOX0gKKyNkZWZpbmUgU05NUFVEUEJBU0VET01BSU5fSAorCitjb25maWdfcmVxdWlyZShTb2NrZXRCYXNlKQorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKy8qCisgKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4gIAorICovCisKKyAgICB2b2lkIG5ldHNubXBfdWRwX2Jhc2VfY3Rvcih2b2lkKTsKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworICAgIHZvaWQgX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KGludCBmZCwgaW50IGxvY2FsKTsKKyAgICBpbnQgbmV0c25tcF91ZHBiYXNlX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCk7CisgICAgaW50IG5ldHNubXBfdWRwYmFzZV9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpOworCisjaWYgZGVmaW5lZChIQVZFX0lQX1BLVElORk8pIHx8IGRlZmluZWQoSEFWRV9JUF9SRUNWRFNUQUREUikKKyAgICBpbnQgbmV0c25tcF91ZHBiYXNlX3JlY3Zmcm9tKGludCBzLCB2b2lkICpidWYsIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sIHNvY2tsZW5fdCAqZnJvbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZHN0aXAsIHNvY2tsZW5fdCAqZHN0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppZl9pbmRleCk7CisgICAgaW50IG5ldHNubXBfdWRwYmFzZV9zZW5kdG8oaW50IGZkLCBzdHJ1Y3QgaW5fYWRkciAqc3JjaXAsIGludCBpZl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnJlbW90ZSwgdm9pZCAqZGF0YSwgaW50IGxlbik7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNOTVBVRFBCQVNFRE9NQUlOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCmluZGV4IDU0MGFkZjUuLjNhMDlkZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaApAQCAtMTUsMzYgKzE1LDI4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAKK2NvbmZpZ19yZXF1aXJlKFVEUElQdjRCYXNlKQorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmg+CisKIG5ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX3VkcF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBpbnQgbG9jYWwpOwogCiAKIC8qCi0gKiBDb252ZXJ0IGEgInRyYWRpdGlvbmFsIiBwZWVybmFtZSBpbnRvIGEgc29ja2FkZHJfaW4gc3RydWN0dXJlIHdoaWNoIGlzCi0gKiB3cml0dGVuIHRvICphZGRyLiAgUmV0dXJucyAxIGlmIHRoZSBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLCBvciAwIGlmIGl0Ci0gKiBmYWlsZWQuICAKLSAqLwotCi1pbnQgICAgICAgICAgICAgbmV0c25tcF9zb2NrYWRkcl9pbihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwZWVybmFtZSwgaW50IHJlbW90ZV9wb3J0KTsKLQotCi0vKgogICogUmVnaXN0ZXIgYW55IGNvbmZpZ3VyYXRpb24gdG9rZW5zIHNwZWNpZmljIHRvIHRoZSBhZ2VudC4gIAogICovCiAKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgbmV0c25tcF91ZHBfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKTsKIAorTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqcGFyYW0pOwogCitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIG5ldHNubXBfdWRwX2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb21tdW5pdHlfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnNlY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqY29udGV4dE5hbWUpOwotCi1pbnQgICAgICAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQoaW50IHMsIGludCBvcHRuYW1lLCBpbnQgbG9jYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpOwotCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqc2VjbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipjb250ZXh0TmFtZSk7CiAKIC8qCiAgKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4gIApAQCAtNTIsNiArNDQsMTggQEAKIAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfdWRwX2N0b3Iodm9pZCk7CiAKKy8qCisgKiBwcm90ZWN0ZWQtaXNoIGZ1bmN0aW9ucyB1c2VkIGJ5IG90aGVyIGNvcmUtY29kZQorICovCitjaGFyICpuZXRzbm1wX3VkcF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKyNpZiBkZWZpbmVkKEhBVkVfSVBfUEtUSU5GTykgfHwgZGVmaW5lZChIQVZFX0lQX1JFQ1ZEU1RBRERSKQoraW50IG5ldHNubXBfdWRwX3JlY3Zmcm9tKGludCBzLCB2b2lkICpidWYsIGludCBsZW4sIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKmZyb21sZW4sIHN0cnVjdCBzb2NrYWRkciAqZHN0aXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpkc3RsZW4sIGludCAqaWZfaW5kZXgpOworaW50IG5ldHNubXBfdWRwX3NlbmR0byhpbnQgZmQsIHN0cnVjdCBpbl9hZGRyICpzcmNpcCwgaW50IGlmX2luZGV4LAorCQkJCQkgICBzdHJ1Y3Qgc29ja2FkZHIgKnJlbW90ZSwgdm9pZCAqZGF0YSwgaW50IGxlbik7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjdmMmMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIFVEUElQVjQgYmFzZSB0cmFuc3BvcnQgc3VwcG9ydCBmdW5jdGlvbnMKKyAqLworI2lmbmRlZiBTTk1QVURQSVBWNEJBU0VfSAorI2RlZmluZSBTTk1QVURQSVBWNEJBU0VfSAorCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCitjb25maWdfcmVxdWlyZShVRFBCYXNlKQorY29uZmlnX3JlcXVpcmUoSVB2NEJhc2UpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisvKgorICogUHJvdG90eXBlcworICovCisKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF91ZHBpcHY0YmFzZV90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9jYWwpOworCisjaWYgZGVmaW5lZChIQVZFX0lQX1BLVElORk8pIHx8IGRlZmluZWQoSEFWRV9JUF9SRUNWRFNUQUREUikKKyAgICBpbnQgbmV0c25tcF91ZHBpcHY0X3JlY3Zmcm9tKGludCBzLCB2b2lkICpidWYsIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sIHNvY2tsZW5fdCAqZnJvbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZHN0aXAsIHNvY2tsZW5fdCAqZHN0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppZl9pbmRleCk7CisgICAgaW50IG5ldHNubXBfdWRwaXB2NF9zZW5kdG8oaW50IGZkLCBzdHJ1Y3QgaW5fYWRkciAqc3JjaXAsIGludCBpZl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnJlbW90ZSwgdm9pZCAqZGF0YSwgaW50IGxlbik7CisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIFNOTVBVRFBJUFY0QkFTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCmluZGV4IGM0ZWE0NjQuLjgzZWJhMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCkBAIC0xLDEyICsxLDE4IEBACiAjaWZuZGVmIF9TTk1QVURQSVBWNkRPTUFJTl9ICiAjZGVmaW5lIF9TTk1QVURQSVBWNkRPTUFJTl9ICiAKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisKK2NvbmZpZ19yZXF1aXJlKElQdjZCYXNlKQorY29uZmlnX3JlcXVpcmUoVURQQmFzZSkKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmg+CiAKIC8qCiAgKiBUaGUgU05NUCBvdmVyIFVEUCBvdmVyIElQdjYgdHJhbnNwb3J0IGRvbWFpbiBpcyBpZGVudGlmaWVkIGJ5CkBAIC0xNiwzNCArMjIsMzggQEAKICNkZWZpbmUgVFJBTlNQT1JUX0RPTUFJTl9VRFBfSVBWNgkxLDMsNiwxLDIsMSwxMDAsMSwyCiBORVRTTk1QX0lNUE9SVCBvaWQgICAgICBuZXRzbm1wX1VEUElQdjZEb21haW5bXTsKIAotbmV0c25tcF90cmFuc3BvcnQgKnNubXBfdWRwNl90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsb2NhbCk7CituZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF91ZHA2X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvY2FsKTsKIAogCiAvKgogICogQ29udmVydCBhICJ0cmFkaXRpb25hbCIgcGVlcm5hbWUgaW50byBhIHNvY2thZGRyX2luNiBzdHJ1Y3R1cmUgd2hpY2ggaXMKICAqIHdyaXR0ZW4gdG8gKmFkZHIuICBSZXR1cm5zIDEgaWYgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwsIG9yIDAgaWYgaXQKLSAqIGZhaWxlZC4gIAorICogZmFpbGVkLgogICovCiAKIGludCAgICAgICAgICAgICBuZXRzbm1wX3NvY2thZGRyX2luNihzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBlZXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCk7CiAKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgbmV0c25tcF91ZHA2X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eShjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcGFyYW0pOwogCitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIG5ldHNubXBfdWRwNl9nZXRTZWNOYW1lKHZvaWQgKm9wYXF1ZSwgaW50IG9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tdW5pdHlfbGVuLCBjaGFyICoqc2VjbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqY29udGV4dE5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tdW5pdHlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipzZWNuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipjb250ZXh0TmFtZSk7CiAKIC8qCi0gKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4gIAorICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuCiAgKi8KIAotdm9pZCAgICAgICAgICAgIG5ldHNubXBfdWRwNl9jdG9yKHZvaWQpOworTkVUU05NUF9JTVBPUlQgdm9pZCBuZXRzbm1wX3VkcGlwdjZfY3Rvcih2b2lkKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCmluZGV4IDUxOTA5ZjcuLjkxZTdmNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCkBAIC0zLDggKzMsOCBAQAogCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gICAgICAgICAgIkMiIHsKKyNpZiBkZWZpbmVkKGN5Z3dpbikgfHwgZGVmaW5lZChtaW5ndzMyKSB8fCBkZWZpbmVkKG1pbmd3MzJtc3ZjKQorICAgIGNvbmZpZ19lcnJvcihVbml4IGRvbWFpbiBwcm90b2NvbCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtKQogI2VuZGlmCiAKICNpZiBIQVZFX1NZU19TT0NLRVRfSApAQCAtMTUsNyArMTUsMTIgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorCitjb25maWdfcmVxdWlyZShTb2NrZXRCYXNlKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCiAKIC8qCiAgKiBUaGUgU05NUCBvdmVyIGxvY2FsIHNvY2tldCB0cmFuc3BvcnQgZG9tYWluIGlzIGlkZW50aWZpZWQgYnkKQEAgLTMxLDggKzM2LDggQEAKIHZvaWQgbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpwYXJhbSk7CiBpbnQgbmV0c25tcF91bml4X2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbW11bml0eV9sZW4sIGNoYXIgKipzZWNOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipjb250ZXh0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbW11bml0eV9sZW4sIGNvbnN0IGNoYXIgKipzZWNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipjb250ZXh0TmFtZSk7CiAKIAogLyoKQEAgLTQxLDkgKzQ2LDIwIEBACiAKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3VuaXhfY3Rvcih2b2lkKTsKIAorLyoKKyAqIFN1cHBvcnQgZnVuY3Rpb25zCisgKi8KK3ZvaWQgICAgICAgICAgICBuZXRzbm1wX3VuaXhfY3JlYXRlX3BhdGhfd2l0aF9tb2RlKGludCBtb2RlKTsKK3ZvaWQgICAgICAgICAgICBuZXRzbm1wX3VuaXhfZG9udF9jcmVhdGVfcGF0aCh2b2lkKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKKyNlbHNlCisKKyNkZWZpbmUgbmV0c25tcF91bml4X2NyZWF0ZV9wYXRoX3dpdGhfbW9kZSh4KQorI2RlZmluZSBuZXRzbm1wX3VuaXhfZG9udF9jcmVhdGVfcGF0aCgpCisKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTiAqLwogCiAjZW5kaWYvKl9TTk1QVU5JWERPTUFJTl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCmluZGV4IGY5N2E3MTIuLmQxYmNiZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaApAQCAtMTIsMTMgKzEyLDE3IEBACiAgICAgICogYWxhcm0gZmxhZ3MgCiAgICAgICovCiAjZGVmaW5lIFNBX1JFUEVBVCAweDAxICAgICAgICAgIC8qIGtlZXAgcmVwZWF0aW5nIGV2ZXJ5IFggc2Vjb25kcyAqLworI2RlZmluZSBTQV9GSVJFRCAweDEwICAgICAgICAgIC8qIEJlaW5nIHByb2Nlc3NlZCBpbiBydW5fYWxhcm1zICovCiAKICAgICBzdHJ1Y3Qgc25tcF9hbGFybSB7CisgICAgICAgIC8qKiBBbGFybSBpbnRlcnZhbC4gWmVybyBpZiBzaW5nbGUtc2hvdC4gKi8KICAgICAgICAgc3RydWN0IHRpbWV2YWwgIHQ7CiAgICAgICAgIHVuc2lnbmVkIGludCAgICBmbGFnczsKICAgICAgICAgdW5zaWduZWQgaW50ICAgIGNsaWVudHJlZzsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRfbGFzdDsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRfbmV4dDsKKyAgICAgICAgLyoqIExhc3QgdGltZSB0aGUgYWxhcm0gZmlyZWQgW21vbm90b25pYyBjbG9ja10uICovCisgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0X2xhc3RNOworICAgICAgICAvKiogTmV4dCB0aW1lIHRoZSBhbGFybSB3aWxsIGZpcmUgW21vbm90b25pYyBjbG9ja10uICovCisgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0X25leHRNOwogICAgICAgICB2b2lkICAgICAgICAgICAqY2xpZW50YXJnOwogICAgICAgICBTTk1QQWxhcm1DYWxsYmFjayAqdGhlY2FsbGJhY2s7CiAgICAgICAgIHN0cnVjdCBzbm1wX2FsYXJtICpuZXh0OwpAQCAtMjcsOCArMzEsMTAgQEAKICAgICAvKgogICAgICAqIHRoZSBvbmVzIHlvdSBzaG91bGQgbmVlZCAKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIodW5zaWduZWQgaW50IGNsaWVudHJlZyk7CiAgICAgdm9pZAkgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyX2FsbCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVuc2lnbmVkIGludCAgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKHVuc2lnbmVkIGludCB3aGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QQWxhcm1DYWxsYmFjayAqIHRoZWNhbGxiYWNrLApAQCAtNDUsMTcgKzUxLDIwIEBACiAgICAgLyoKICAgICAgKiB0aGUgb25lcyB5b3Ugc2hvdWxkbid0IAogICAgICAqLwotICAgIHZvaWQgICAgICAgICAgICBpbml0X3NubXBfYWxhcm0odm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQgdm9pZCBpbml0X3NubXBfYWxhcm0odm9pZCk7CiAgICAgaW50ICAgICAgICAgICAgIGluaXRfYWxhcm1fcG9zdF9jb25maWcoaW50IG1ham9yaWQsIGludCBtaW5vcmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOwogICAgIHZvaWQgICAgICAgICAgICBzYV91cGRhdGVfZW50cnkoc3RydWN0IHNubXBfYWxhcm0gKmFscm0pOwogICAgIHN0cnVjdCBzbm1wX2FsYXJtICpzYV9maW5kX25leHQodm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHJ1bl9hbGFybXModm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQgdm9pZCBydW5fYWxhcm1zKHZvaWQpOwogICAgIFJFVFNJR1RZUEUgICAgICBhbGFybV9oYW5kbGVyKGludCBhKTsKICAgICB2b2lkICAgICAgICAgICAgc2V0X2FuX2FsYXJtKHZvaWQpOworICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2dldF9uZXh0X2FsYXJtX3RpbWUoc3RydWN0IHRpbWV2YWwgKmFsYXJtX3RtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdyk7CiAgICAgaW50ICAgICAgICAgICAgIGdldF9uZXh0X2FsYXJtX2RlbGF5X3RpbWUoc3RydWN0IHRpbWV2YWwgKmRlbHRhKTsKIAorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAppbmRleCAyY2FkOTJlLi42ZjY1OGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaApAQCAtMjQsNiArMjQsMTQgQEAKICAqIEB7CiAgKi8KIAorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdmFyYmluZF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvcGR1X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCiAjaWZuZGVmIERPTlRfU0hBUkVfRVJST1JfV0lUSF9PVEhFUl9USFJFQURTCiAjZGVmaW5lIFNFVF9TTk1QX0VSUk9SKHgpIHNubXBfZXJybm89KHgpCiAjZWxzZQpAQCAtNTcsMjU3ICs2NSw3IEBACiBTT0ZUV0FSRS4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoqIEB0eXBlZGVmIHN0cnVjdCB2YXJpYWJsZV9saXN0IG5ldHNubXBfdmFyaWFibGVfbGlzdAotICAgICogVHlwZWRlZnMgdGhlIHZhcmlhYmxlX2xpc3Qgc3RydWN0IGludG8gbmV0c25tcF92YXJpYWJsZV9saXN0ICovCi1zdHJ1Y3QgdmFyaWFibGVfbGlzdDsKLXR5cGVkZWYgc3RydWN0IHZhcmlhYmxlX2xpc3QgbmV0c25tcF92YXJpYWJsZV9saXN0Owogc3RydWN0IHRpbWV2YWw7Ci1zdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfczsKLQotI2RlZmluZSBVU01fQVVUSF9LVV9MRU4gICAgIDMyCi0jZGVmaW5lIFVTTV9QUklWX0tVX0xFTiAgICAgMzIKLQotLyoqIEB0eXBlZGVmIHN0cnVjdCBzbm1wX3BkdSB0byBuZXRzbm1wX3BkdQotICAgICogVHlwZWRlZnMgdGhlIHNubXBfcGR1IHN0cnVjdCBpbnRvIG5ldHNubXBfcGR1ICovCi0vKiogQHN0cnVjdCBzbm1wX3BkdQotICogVGhlIHNubXAgcHJvdG9jb2wgZGF0YSB1bml0LgotICovCQotdHlwZWRlZiBzdHJ1Y3Qgc25tcF9wZHUgewotCi0gICAgLyoKLSAgICAgKiBQcm90b2NvbC12ZXJzaW9uIGluZGVwZW5kZW50IGZpZWxkcwotICAgICAqLwotICAgIC8qKiBzbm1wIHZlcnNpb24gKi8KLSAgICBsb25nICAgICAgICAgICAgdmVyc2lvbjsKLSAgICAvKiogVHlwZSBvZiB0aGlzIFBEVSAqLwkKLSAgICBpbnQgICAgICAgICAgICAgY29tbWFuZDsKLSAgICAvKiogUmVxdWVzdCBpZCAtIG5vdGU6IG5vdCBpbmNyZW1lbnRlZCBvbiByZXRyaWVzICovCi0gICAgbG9uZyAgICAgICAgICAgIHJlcWlkOyAgCi0gICAgLyoqIE1lc3NhZ2UgaWQgZm9yIFYzIG1lc3NhZ2VzIG5vdGU6IGluY3JlbWVudGVkIGZvciBlYWNoIHJldHJ5ICovCi0gICAgbG9uZyAgICAgICAgICAgIG1zZ2lkOwotICAgIC8qKiBVbmlxdWUgSUQgZm9yIGluY29taW5nIHRyYW5zYWN0aW9ucyAqLwotICAgIGxvbmcgICAgICAgICAgICB0cmFuc2lkOwotICAgIC8qKiBTZXNzaW9uIGlkIGZvciBBZ2VudFggbWVzc2FnZXMgKi8KLSAgICBsb25nICAgICAgICAgICAgc2Vzc2lkOwotICAgIC8qKiBFcnJvciBzdGF0dXMgKG5vbl9yZXBlYXRlcnMgaW4gR2V0QnVsaykgKi8KLSAgICBsb25nICAgICAgICAgICAgZXJyc3RhdDsKLSAgICAvKiogRXJyb3IgaW5kZXggKG1heF9yZXBldGl0aW9ucyBpbiBHZXRCdWxrKSAqLwotICAgIGxvbmcgICAgICAgICAgICBlcnJpbmRleDsgICAgICAgCi0gICAgLyoqIFVwdGltZSAqLwotICAgIHVfbG9uZyAgICAgICAgICB0aW1lOyAgIAotICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKLQotICAgIGludCAgICAgICAgICAgICBzZWN1cml0eU1vZGVsOwotICAgIC8qKiBub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2ICovCi0gICAgaW50ICAgICAgICAgICAgIHNlY3VyaXR5TGV2ZWw7ICAKLSAgICBpbnQgICAgICAgICAgICAgbXNnUGFyc2VNb2RlbDsKLQotICAgIC8qKgotICAgICAqIFRyYW5zcG9ydC1zcGVjaWZpYyBvcGFxdWUgZGF0YS4gIFRoaXMgcmVwbGFjZXMgdGhlIElQLWNlbnRyaWMgYWRkcmVzcwotICAgICAqIGZpZWxkLiAgCi0gICAgICovCi0gICAgCi0gICAgdm9pZCAgICAgICAgICAgKnRyYW5zcG9ydF9kYXRhOwotICAgIGludCAgICAgICAgICAgICB0cmFuc3BvcnRfZGF0YV9sZW5ndGg7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgYWN0dWFsIHRyYW5zcG9ydCBkb21haW4uICBUaGlzIFNIT1VMRCBOT1QgQkUgRlJFRSgpRC4gIAotICAgICAqLwotCi0gICAgY29uc3Qgb2lkICAgICAgKnREb21haW47Ci0gICAgc2l6ZV90ICAgICAgICAgIHREb21haW5MZW47Ci0KLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcmlhYmxlczsKLQotCi0gICAgLyoKLSAgICAgKiBTTk1QdjEgJiBTTk1QdjJjIGZpZWxkcwotICAgICAqLwotICAgIC8qKiBjb21tdW5pdHkgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiAqLwotICAgIHVfY2hhciAgICAgICAgICpjb21tdW5pdHk7Ci0gICAgLyoqIGxlbmd0aCBvZiBjb21tdW5pdHkgbmFtZS4gKi8KLSAgICBzaXplX3QgICAgICAgICAgY29tbXVuaXR5X2xlbjsgIAotCi0gICAgLyoKLSAgICAgKiBUcmFwIGluZm9ybWF0aW9uCi0gICAgICovCi0gICAgLyoqIFN5c3RlbSBPSUQgKi8KLSAgICBvaWQgICAgICAgICAgICAqZW50ZXJwcmlzZTsgICAgIAotICAgIHNpemVfdCAgICAgICAgICBlbnRlcnByaXNlX2xlbmd0aDsKLSAgICAvKiogdHJhcCB0eXBlICovCi0gICAgbG9uZyAgICAgICAgICAgIHRyYXBfdHlwZTsKLSAgICAvKiogc3BlY2lmaWMgdHlwZSAqLwotICAgIGxvbmcgICAgICAgICAgICBzcGVjaWZpY190eXBlOwotICAgIC8qKiBUaGlzIGlzIE9OTFkgdXNlZCBmb3IgdjEgVFJBUHMgICovCi0gICAgdW5zaWduZWQgY2hhciAgIGFnZW50X2FkZHJbNF07ICAKLQotICAgIC8qCi0gICAgICogIFNOTVB2MyBmaWVsZHMKLSAgICAgKi8KLSAgICAvKiogY29udGV4dCBzbm1wRW5naW5lSUQgKi8KLSAgICB1X2NoYXIgICAgICAgICAqY29udGV4dEVuZ2luZUlEOwotICAgIC8qKiBMZW5ndGggb2YgY29udGV4dEVuZ2luZUlEICovCi0gICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHRFbmdpbmVJRExlbjsgICAgIAotICAgIC8qKiBhdXRob3JpdGF0aXZlIGNvbnRleHROYW1lICovCi0gICAgY2hhciAgICAgICAgICAgKmNvbnRleHROYW1lOwotICAgIC8qKiBMZW5ndGggb2YgY29udGV4dE5hbWUgKi8KLSAgICBzaXplX3QgICAgICAgICAgY29udGV4dE5hbWVMZW47Ci0gICAgLyoqIGF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEIGZvciBzZWN1cml0eSAqLwotICAgIHVfY2hhciAgICAgICAgICpzZWN1cml0eUVuZ2luZUlEOwotICAgIC8qKiBMZW5ndGggb2Ygc2VjdXJpdHlFbmdpbmVJRCAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUVuZ2luZUlETGVuOyAgICAKLSAgICAvKiogb24gYmVoYWxmIG9mIHRoaXMgcHJpbmNpcGFsICovCi0gICAgY2hhciAgICAgICAgICAgKnNlY3VyaXR5TmFtZTsKLSAgICAvKiogTGVuZ3RoIG9mIHNlY3VyaXR5TmFtZS4gKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlOYW1lTGVuOyAgICAgICAgCi0gICAgCi0gICAgLyoKLSAgICAgKiBBZ2VudFggZmllbGRzCi0gICAgICogICAgICAoYWxzbyB1c2VzIFNOTVB2MSBjb21tdW5pdHkgZmllbGQpCi0gICAgICovCi0gICAgaW50ICAgICAgICAgICAgIHByaW9yaXR5OwotICAgIGludCAgICAgICAgICAgICByYW5nZV9zdWJpZDsKLSAgICAKLSAgICB2b2lkICAgICAgICAgICAqc2VjdXJpdHlTdGF0ZVJlZjsKLX0gbmV0c25tcF9wZHU7Ci0KLXN0cnVjdCBzbm1wX3Nlc3Npb247Ci0KLS8qKiBAdHlwZWRlZiBzdHJ1Y3Qgc25tcF9zZXNzaW9uIG5ldHNubXBfc2Vzc2lvbgotICogVHlwZWRlZnMgdGhlIHNubXBfc2Vzc2lvbiBzdHJ1Y3QgaW50b25ldHNubXBfc2Vzc2lvbiAqLwotdHlwZWRlZiBzdHJ1Y3Qgc25tcF9zZXNzaW9uIG5ldHNubXBfc2Vzc2lvbjsKLQotdHlwZWRlZiBpbnQgICAgICgqc25tcF9jYWxsYmFjaykgKGludCwgbmV0c25tcF9zZXNzaW9uICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgdm9pZCAqKTsKLXR5cGVkZWYgaW50ICAgICAoKm5ldHNubXBfY2FsbGJhY2spIChpbnQsIG5ldHNubXBfc2Vzc2lvbiAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIHZvaWQgKik7Ci0vKiogQHN0cnVjdCBzbm1wX3Nlc3Npb24KLSAqIFRoZSBzbm1wIHNlc3Npb24gc3RydWN0dXJlLgotICovCi1zdHJ1Y3Qgc25tcF9zZXNzaW9uIHsKLSAgICAvKgotICAgICAqIFByb3RvY29sLXZlcnNpb24gaW5kZXBlbmRlbnQgZmllbGRzCi0gICAgICovCi0gICAgLyoqIHNubXAgdmVyc2lvbiAqLwotICAgIGxvbmcgICAgICAgICAgICB2ZXJzaW9uOwotICAgIC8qKiBOdW1iZXIgb2YgcmV0cmllcyBiZWZvcmUgdGltZW91dC4gKi8KLSAgICBpbnQgICAgICAgICAgICAgcmV0cmllczsKLSAgICAvKiogTnVtYmVyIG9mIHVTIHVudGlsIGZpcnN0IHRpbWVvdXQsIHRoZW4gZXhwb25lbnRpYWwgYmFja29mZiAqLwotICAgIGxvbmcgICAgICAgICAgICB0aW1lb3V0OyAgICAgICAgCi0gICAgdV9sb25nICAgICAgICAgIGZsYWdzOwotICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnN1YnNlc3Npb247Ci0gICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqbmV4dDsKLQotICAgIC8qKiBuYW1lIG9yIGFkZHJlc3Mgb2YgZGVmYXVsdCBwZWVyIChtYXkgaW5jbHVkZSB0cmFuc3BvcnQgc3BlY2lmaWVyIGFuZC9vciBwb3J0IG51bWJlcikgKi8KLSAgICBjaGFyICAgICAgICAgICAqcGVlcm5hbWU7Ci0gICAgLyoqIFVEUCBwb3J0IG51bWJlciBvZiBwZWVyLiAoTk8gTE9OR0VSIFVTRUQgLSBVU0UgcGVlcm5hbWUgSU5TVEVBRCkgKi8KLSAgICB1X3Nob3J0ICAgICAgICAgcmVtb3RlX3BvcnQ7Ci0gICAgLyoqIE15IERvbWFpbiBuYW1lIG9yIGRvdHRlZCBJUCBhZGRyZXNzLCAwIGZvciBkZWZhdWx0ICovCi0gICAgY2hhciAgICAgICAgICAgKmxvY2FsbmFtZTsKLSAgICAvKiogTXkgVURQIHBvcnQgbnVtYmVyLCAwIGZvciBkZWZhdWx0LCBwaWNrZWQgcmFuZG9tbHkgKi8KLSAgICB1X3Nob3J0ICAgICAgICAgbG9jYWxfcG9ydDsgICAgIAotICAgIC8qKgotICAgICAqIEF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIG9yIE5VTEwgaWYgbnVsbCBhdXRoZW50aWNhdGlvbiBpcyB1c2VkIAotICAgICAqLwotICAgIHVfY2hhciAgICAgICAgICooKmF1dGhlbnRpY2F0b3IpICh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLCBzaXplX3QpOwotICAgIC8qKiBGdW5jdGlvbiB0byBpbnRlcnByZXQgaW5jb21pbmcgZGF0YSAqLwotICAgIG5ldHNubXBfY2FsbGJhY2sgY2FsbGJhY2s7ICAgICAgCi0gICAgLyoqCi0gICAgICogUG9pbnRlciB0byBkYXRhIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG1heSBjb25zaWRlciBpbXBvcnRhbnQgCi0gICAgICovCi0gICAgdm9pZCAgICAgICAgICAgKmNhbGxiYWNrX21hZ2ljOwotICAgIC8qKiBjb3B5IG9mIHN5c3RlbSBlcnJubyAqLwotICAgIGludCAgICAgICAgICAgICBzX2Vycm5vOwotICAgIC8qKiBjb3B5IG9mIGxpYnJhcnkgZXJybm8gKi8KLSAgICBpbnQgICAgICAgICAgICAgc19zbm1wX2Vycm5vOyAgIAotICAgIC8qKiBTZXNzaW9uIGlkIC0gQWdlbnRYIG9ubHkgKi8KLSAgICBsb25nICAgICAgICAgICAgc2Vzc2lkOyAKLQotICAgIC8qCi0gICAgICogU05NUHYxICYgU05NUHYyYyBmaWVsZHMKLSAgICAgKi8KLSAgICAvKiogY29tbXVuaXR5IGZvciBvdXRnb2luZyByZXF1ZXN0cy4gKi8KLSAgICB1X2NoYXIgICAgICAgICAqY29tbXVuaXR5OwotICAgIC8qKiBMZW5ndGggb2YgY29tbXVuaXR5IG5hbWUuICovCi0gICAgc2l6ZV90ICAgICAgICAgIGNvbW11bml0eV9sZW47ICAKLSAgICAvKiogIExhcmdlc3QgbWVzc2FnZSB0byB0cnkgdG8gcmVjZWl2ZS4gICovCi0gICAgc2l6ZV90ICAgICAgICAgIHJjdk1zZ01heFNpemU7Ci0gICAgLyoqICBMYXJnZXN0IG1lc3NhZ2UgdG8gdHJ5IHRvIHNlbmQuICAqLwotICAgIHNpemVfdCAgICAgICAgICBzbmRNc2dNYXhTaXplOyAgCi0KLSAgICAvKgotICAgICAqIFNOTVB2MyBmaWVsZHMKLSAgICAgKi8KLSAgICAvKiogYXJlIHdlIHRoZSBhdXRob3JpdGF0aXZlIGVuZ2luZT8gKi8KLSAgICB1X2NoYXIgICAgICAgICAgaXNBdXRob3JpdGF0aXZlOwotICAgIC8qKiBhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCAqLwotICAgIHVfY2hhciAgICAgICAgICpjb250ZXh0RW5naW5lSUQ7Ci0gICAgLyoqIExlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQgKi8KLSAgICBzaXplX3QgICAgICAgICAgY29udGV4dEVuZ2luZUlETGVuOyAgICAgCi0gICAgLyoqIGluaXRpYWwgZW5naW5lQm9vdHMgZm9yIHJlbW90ZSBlbmdpbmUgKi8KLSAgICB1X2ludCAgICAgICAgICAgZW5naW5lQm9vdHM7Ci0gICAgLyoqIGluaXRpYWwgZW5naW5lVGltZSBmb3IgcmVtb3RlIGVuZ2luZSAqLwotICAgIHVfaW50ICAgICAgICAgICBlbmdpbmVUaW1lOwotICAgIC8qKiBhdXRob3JpdGF0aXZlIGNvbnRleHROYW1lICovCi0gICAgY2hhciAgICAgICAgICAgKmNvbnRleHROYW1lOwotICAgIC8qKiBMZW5ndGggb2YgY29udGV4dE5hbWUgKi8KLSAgICBzaXplX3QgICAgICAgICAgY29udGV4dE5hbWVMZW47Ci0gICAgLyoqIGF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEICovCi0gICAgdV9jaGFyICAgICAgICAgKnNlY3VyaXR5RW5naW5lSUQ7Ci0gICAgLyoqIExlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQgKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlFbmdpbmVJRExlbjsgICAgCi0gICAgLyoqIG9uIGJlaGFsZiBvZiB0aGlzIHByaW5jaXBhbCAqLwotICAgIGNoYXIgICAgICAgICAgICpzZWN1cml0eU5hbWU7Ci0gICAgLyoqIExlbmd0aCBvZiBzZWN1cml0eU5hbWUuICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5TmFtZUxlbjsKLQotICAgIC8qKiBhdXRoIHByb3RvY29sIG9pZCAqLwotICAgIG9pZCAgICAgICAgICAgICpzZWN1cml0eUF1dGhQcm90bzsKLSAgICAvKiogTGVuZ3RoIG9mIGF1dGggcHJvdG9jb2wgb2lkICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5QXV0aFByb3RvTGVuOwotICAgIC8qKiBLdSBmb3IgYXV0aCBwcm90b2NvbCBYWFggKi8KLSAgICB1X2NoYXIgICAgICAgICAgc2VjdXJpdHlBdXRoS2V5W1VTTV9BVVRIX0tVX0xFTl07ICAgICAgIAotICAgIC8qKiBMZW5ndGggb2YgS3UgZm9yIGF1dGggcHJvdG9jb2wgKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlBdXRoS2V5TGVuOwotICAgIC8qKiBLdWwgZm9yIGF1dGggcHJvdG9jb2wgKi8KLSAgICB1X2NoYXIgICAgICAgICAgKnNlY3VyaXR5QXV0aExvY2FsS2V5OyAgICAgICAKLSAgICAvKiogTGVuZ3RoIG9mIEt1bCBmb3IgYXV0aCBwcm90b2NvbCBYWFggKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlBdXRoTG9jYWxLZXlMZW47ICAgICAgIAotCi0gICAgLyoqIHByaXYgcHJvdG9jb2wgb2lkICovCi0gICAgb2lkICAgICAgICAgICAgKnNlY3VyaXR5UHJpdlByb3RvOwotICAgIC8qKiBMZW5ndGggb2YgcHJpdiBwcm90b2NvbCBvaWQgKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlQcml2UHJvdG9MZW47Ci0gICAgLyoqIEt1IGZvciBwcml2YWN5IHByb3RvY29sIFhYWCAqLwotICAgIHVfY2hhciAgICAgICAgICBzZWN1cml0eVByaXZLZXlbVVNNX1BSSVZfS1VfTEVOXTsgICAgICAgCi0gICAgLyoqIExlbmd0aCBvZiBLdSBmb3IgcHJpdiBwcm90b2NvbCAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eVByaXZLZXlMZW47Ci0gICAgLyoqIEt1bCBmb3IgcHJpdiBwcm90b2NvbCAqLwotICAgIHVfY2hhciAgICAgICAgICAqc2VjdXJpdHlQcml2TG9jYWxLZXk7ICAgICAgIAotICAgIC8qKiBMZW5ndGggb2YgS3VsIGZvciBwcml2IHByb3RvY29sIFhYWCAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eVByaXZMb2NhbEtleUxlbjsgICAgICAgCi0KLSAgICAvKiogc25tcCBzZWN1cml0eSBtb2RlbCwgdjEsIHYyYywgdXNtICovCi0gICAgaW50ICAgICAgICAgICAgIHNlY3VyaXR5TW9kZWw7Ci0gICAgLyoqIG5vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXYgKi8KLSAgICBpbnQgICAgICAgICAgICAgc2VjdXJpdHlMZXZlbDsgIAotICAgIC8qKiB0YXJnZXQgcGFyYW0gbmFtZSAqLwotICAgIGNoYXIgICAgICAgICAgICpwYXJhbU5hbWU7Ci0KLSAgICAvKioKLSAgICAgKiBzZWN1cml0eSBtb2R1bGUgc3BlY2lmaWMgCi0gICAgICovCi0gICAgdm9pZCAgICAgICAgICAgKnNlY3VyaXR5SW5mbzsKLQotICAgIC8qKgotICAgICAqIHVzZSBhcyB5b3Ugd2FudCBkYXRhIAotICAgICAqCi0gICAgICogICAgIHVzZWQgYnkgJ1NOTVBfRkxBR1NfUkVTUF9DQUxMQkFDSycgaGFuZGxpbmcgaW4gdGhlIGFnZW50Ci0gICAgICogWFhYOiBvciBzaG91bGQgd2UgYWRkIGEgbmV3IGZpZWxkIGludG8gdGhpcyBzdHJ1Y3R1cmU/Ci0gICAgICovCi0gICAgdm9pZCAgICAgICAgICAgKm15dm9pZDsKLX07Ci0KIC8qCiAgKiBBIGxpc3Qgb2YgYWxsIHRoZSBvdXRzdGFuZGluZyByZXF1ZXN0cyBmb3IgYSBwYXJ0aWN1bGFyIHNlc3Npb24uCiAgKi8KQEAgLTMyMCw4ICs3OCw4IEBACiAgICAgdm9pZCAgICAgICAgICAgKmNiX2RhdGE7ICAgICAgICAvKiB1c2VyIGNhbGxiYWNrIGRhdGEgcGVyIHJlcXVlc3QgKE5VTEwgaWYgdW51c2VkKSAqLwogICAgIGludCAgICAgICAgICAgICByZXRyaWVzOyAgICAgICAgLyogTnVtYmVyIG9mIHJldHJpZXMgKi8KICAgICB1X2xvbmcgICAgICAgICAgdGltZW91dDsgICAgICAgIC8qIGxlbmd0aCB0byB3YWl0IGZvciB0aW1lb3V0ICovCi0gICAgc3RydWN0IHRpbWV2YWwgIHRpbWU7ICAgLyogVGltZSB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUgKi8KLSAgICBzdHJ1Y3QgdGltZXZhbCAgZXhwaXJlOyAvKiB0aW1lIHRoaXMgcmVxdWVzdCBpcyBkdWUgdG8gZXhwaXJlICovCisgICAgc3RydWN0IHRpbWV2YWwgIHRpbWVNOyAgIC8qIFRpbWUgdGhpcyByZXF1ZXN0IHdhcyBtYWRlIFttb25vdG9uaWMgY2xvY2tdICovCisgICAgc3RydWN0IHRpbWV2YWwgIGV4cGlyZU07IC8qIFRpbWUgdGhpcyByZXF1ZXN0IGlzIGR1ZSB0byBleHBpcmUgW21vbm90b25pYyBjbG9ja10uICovCiAgICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKICAgICBuZXRzbm1wX3BkdSAgICAqcGR1OyAgICAvKiBUaGUgcGR1IGZvciB0aGlzIHJlcXVlc3QKIAkJCSAgICAgKiAoc2F2ZWQgc28gaXQgY2FuIGJlIHJldHJhbnNtaXR0ZWQgKi8KQEAgLTM1OSw4ICsxMTcsNiBAQAogI2VuZGlmCiAjZGVmaW5lIFNOTVBfREVGQVVMVF9QUklWX1BST1RPTEVOICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0KIAotICAgIE5FVFNOTVBfSU1QT1JUIGNvbnN0IGNoYXIgKnNubXBfYXBpX2VycnN0cmluZyhpbnQpOwotICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgICAgIHNubXBfcGVycm9yKGNvbnN0IGNoYXIgKik7CiAgICAgTkVUU05NUF9JTVBPUlQgdm9pZCAgICAgc25tcF9zZXRfZGV0YWlsKGNvbnN0IGNoYXIgKik7CiAKICNkZWZpbmUgU05NUF9NQVhfTVNHX1NJWkUgICAgICAgICAgMTQ3MiAvKiBldGhlcm5ldCBNVFUgbWludXMgSVAvVURQIGhlYWRlciAqLwpAQCAtNDA0LDYgKzE2MCw3IEBACiAKICNkZWZpbmUgU05NUF9ERVRBSUxfU0laRSAgICAgICAgNTEyCiAKKyNkZWZpbmUgU05NUF9GTEFHU19VRFBfQlJPQURDQVNUICAgMHg4MDAKICNkZWZpbmUgU05NUF9GTEFHU19SRVNQX0NBTExCQUNLICAgMHg0MDAgICAgICAvKiBBZGRpdGlvbmFsIGNhbGxiYWNrIG9uIHJlc3BvbnNlICovCiAjZGVmaW5lIFNOTVBfRkxBR1NfVVNFUl9DUkVBVEVEICAgIDB4MjAwICAgICAgLyogVVNNIHVzZXIgaGFzIGJlZW4gY3JlYXRlZCAqLwogI2RlZmluZSBTTk1QX0ZMQUdTX0RPTlRfUFJPQkUgICAgICAweDEwMCAgICAgIC8qIGRvbid0IHByb2JlIGZvciBhbiBlbmdpbmVJRCAqLwpAQCAtNTAwLDEzMiArMjU3LDI5IEBACiAjZGVmaW5lIFNOTVBFUlJfS1JCNQkJCSgtNjMpCiAjZGVmaW5lIFNOTVBFUlJfUFJPVE9DT0wJCSgtNjQpCiAjZGVmaW5lIFNOTVBFUlJfT0lEX05PTklOQ1JFQVNJTkcgICAgICAgKC02NSkKKyNkZWZpbmUgU05NUEVSUl9KVVNUX0FfQ09OVEVYVF9QUk9CRSAgICAoLTY2KQorI2RlZmluZSBTTk1QRVJSX1RSQU5TUE9SVF9OT19DT05GSUcgICAgICgtNjcpCisjZGVmaW5lIFNOTVBFUlJfVFJBTlNQT1JUX0NPTkZJR19FUlJPUiAgKC02OCkKKyNkZWZpbmUgU05NUEVSUl9UTFNfTk9fQ0VSVElGSUNBVEUgICAgICAoLTY5KQogCi0jZGVmaW5lIFNOTVBFUlJfTUFYCQkJKC02NSkKLQotI2RlZmluZSBub25fcmVwZWF0ZXJzCWVycnN0YXQKLSNkZWZpbmUgbWF4X3JlcGV0aXRpb25zIGVycmluZGV4Ci0KLXR5cGVkZWYgdW5pb24gewotICAgbG9uZyAgICAgICAgICAgKmludGVnZXI7Ci0gICB1X2NoYXIgICAgICAgICAqc3RyaW5nOwotICAgb2lkICAgICAgICAgICAgKm9iamlkOwotICAgdV9jaGFyICAgICAgICAgKmJpdHN0cmluZzsKLSAgIHN0cnVjdCBjb3VudGVyNjQgKmNvdW50ZXI2NDsKLSNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKLSAgIGZsb2F0ICAgICAgICAgICpmbG9hdFZhbDsKLSAgIGRvdWJsZSAgICAgICAgICpkb3VibGVWYWw7Ci0gICAvKgotICAgICogdF91bmlvbiAqdW5pb25WYWw7IAotICAgICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUyAqLwotfSBuZXRzbm1wX3ZhcmRhdGE7Ci0KLQotLyoqIEBzdHJ1Y3QgdmFyaWFibGVfbGlzdAotICogVGhlIG5ldHNubXAgdmFyaWFibGUgbGlzdCBiaW5kaW5nIHN0cnVjdHVyZSwgaXQncyB0eXBlZGVmJ2QgdG8KLSAqIG5ldHNubXBfdmFyaWFibGVfbGlzdC4KLSAqLwotc3RydWN0IHZhcmlhYmxlX2xpc3QgewotICAgLyoqIE5VTEwgZm9yIGxhc3QgdmFyaWFibGUgKi8KLSAgIHN0cnVjdCB2YXJpYWJsZV9saXN0ICpuZXh0X3ZhcmlhYmxlOyAgICAKLSAgIC8qKiBPYmplY3QgaWRlbnRpZmllciBvZiB2YXJpYWJsZSAqLwotICAgb2lkICAgICAgICAgICAgKm5hbWU7ICAgCi0gICAvKiogbnVtYmVyIG9mIHN1YmlkJ3MgaW4gbmFtZSAqLwotICAgc2l6ZV90ICAgICAgICAgIG5hbWVfbGVuZ3RoOyAgICAKLSAgIC8qKiBBU04gdHlwZSBvZiB2YXJpYWJsZSAqLwotICAgdV9jaGFyICAgICAgICAgIHR5cGU7ICAgCi0gICAvKiogdmFsdWUgb2YgdmFyaWFibGUgKi8KLSAgICBuZXRzbm1wX3ZhcmRhdGEgdmFsOwotICAgLyoqIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHRvIGJlIGNvcGllZCBpbnRvIGJ1ZiAqLwotICAgc2l6ZV90ICAgICAgICAgIHZhbF9sZW47Ci0gICAvKiogYnVmZmVyIHRvIGhvbGQgdGhlIE9JRCAqLwotICAgb2lkICAgICAgICAgICAgIG5hbWVfbG9jW01BWF9PSURfTEVOXTsgIAotICAgLyoqIDkwIHBlcmNlbnRpbGUgPCA0MC4gKi8KLSAgIHVfY2hhciAgICAgICAgICBidWZbNDBdOwotICAgLyoqIChPcGFxdWUpIGhvb2sgZm9yIGFkZGl0aW9uYWwgZGF0YSAqLwotICAgdm9pZCAgICAgICAgICAgKmRhdGE7Ci0gICAvKiogY2FsbGJhY2sgdG8gZnJlZSBhYm92ZSAqLwotICAgdm9pZCAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSh2b2lkICopOyAgICAKLSAgIGludCAgICAgICAgICAgICBpbmRleDsKLX07Ci0KLQotCi0gICAgLyoKLSAgICAgKiBuZXRzbm1wX3Nlc3Npb24gKnNubXBfb3BlbihzZXNzaW9uKQotICAgICAqICAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOwotICAgICAqCi0gICAgICogU2V0cyB1cCB0aGUgc2Vzc2lvbiB3aXRoIHRoZSBzbm1wX3Nlc3Npb24gaW5mb3JtYXRpb24gcHJvdmlkZWQKLSAgICAgKiBieSB0aGUgdXNlci4gIFRoZW4gb3BlbnMgYW5kIGJpbmRzIHRoZSBuZWNlc3NhcnkgVURQIHBvcnQuCi0gICAgICogQSBoYW5kbGUgdG8gdGhlIGNyZWF0ZWQgc2Vzc2lvbiBpcyByZXR1cm5lZCAodGhpcyBpcyBkaWZmZXJlbnQgdGhhbgotICAgICAqIHRoZSBwb2ludGVyIHBhc3NlZCB0byBzbm1wX29wZW4oKSkuICBPbiBhbnkgZXJyb3IsIE5VTEwgaXMgcmV0dXJuZWQKLSAgICAgKiBhbmQgc25tcF9lcnJubyBpcyBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCi0gICAgICovCi0gICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX29wZW4obmV0c25tcF9zZXNzaW9uICopOwotCi0gICAgLyoKLSAgICAgKiBpbnQgc25tcF9jbG9zZShzZXNzaW9uKQotICAgICAqICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247Ci0gICAgICoKLSAgICAgKiBDbG9zZSB0aGUgaW5wdXQgc2Vzc2lvbi4gIEZyZWVzIGFsbCBkYXRhIGFsbG9jYXRlZCBmb3IgdGhlIHNlc3Npb24sCi0gICAgICogZGVxdWV1ZXMgYW55IHBlbmRpbmcgcmVxdWVzdHMsIGFuZCBjbG9zZXMgYW55IHNvY2tldHMgYWxsb2NhdGVkIGZvcgotICAgICAqIHRoZSBzZXNzaW9uLiAgUmV0dXJucyAwIG9uIGVycm9yLCAxIG90aGVyd2lzZS4KLSAgICAgKgotICAgICAqIHNubXBfY2xvc2Vfc2Vzc2lvbnMoKSBkb2VzIHRoZSBzYW1lIHRoaW5nIGZvciBhbGwgb3BlbiBzZXNzaW9ucwotICAgICAqLwotICAgIGludCAgICAgICAgICAgICBzbm1wX2Nsb3NlKG5ldHNubXBfc2Vzc2lvbiAqKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9jbG9zZV9zZXNzaW9ucyh2b2lkKTsKKyNkZWZpbmUgU05NUEVSUl9NQVgJCQkoLTY5KQogCiAKICAgICAvKgotICAgICAqIGludCBzbm1wX3NlbmQoc2Vzc2lvbiwgcGR1KQotICAgICAqICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247Ci0gICAgICogICAgIG5ldHNubXBfcGR1ICAgICAgKnBkdTsKLSAgICAgKgotICAgICAqIFNlbmRzIHRoZSBpbnB1dCBwZHUgb24gdGhlIHNlc3Npb24gYWZ0ZXIgY2FsbGluZyBzbm1wX2J1aWxkIHRvIGNyZWF0ZQotICAgICAqIGEgc2VyaWFsaXplZCBwYWNrZXQuICBJZiBuZWNlc3NhcnksIHNldCBzb21lIG9mIHRoZSBwZHUgZGF0YSBmcm9tIHRoZQotICAgICAqIHNlc3Npb24gZGVmYXVsdHMuICBBZGQgYSByZXF1ZXN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwZHUgdG8gdGhlIGxpc3QKLSAgICAgKiBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyBvbiB0aGlzIHNlc3Npb24sIHRoZW4gc2VuZCB0aGUgcGR1LgotICAgICAqIFJldHVybnMgdGhlIHJlcXVlc3QgaWQgb2YgdGhlIGdlbmVyYXRlZCBwYWNrZXQgaWYgYXBwbGljYWJsZSwgb3RoZXJ3aXNlIDEuCi0gICAgICogT24gYW55IGVycm9yLCAwIGlzIHJldHVybmVkLgotICAgICAqIFRoZSBwZHUgaXMgZnJlZWQgYnkgc25tcF9zZW5kKCkgdW5sZXNzIGEgZmFpbHVyZSBvY2N1cmVkLgorICAgICAqIEdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8KKyAgICAgKiBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBtYXkgYmUgcmVhbGxvY2F0ZWQgb3IgZnJlZWQgYnkgdGhlIE5ldC1TTk1QCisgICAgICogbGlicmFyeSBvciB0byByZWFsbG9jYXRlIG9yIGZyZWUgbWVtb3J5IHRoYXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZQorICAgICAqIE5ldC1TTk1QIGxpYnJhcnksIGFuZCB3aGVuIHdvcmtpbmcgaW4gYSBjb250ZXh0IHdoZXJlIHRoZXJlIGlzIG1vcmUgdGhhbgorICAgICAqIG9uZSBoZWFwLiBFeGFtcGxlcyBhcmU6CisgICAgICogLSBQZXJsIFhTVUIncy4KKyAgICAgKiAtIE1TVkMgb3IgTWluR1cgd2l0aCB0aGUgTmV0LVNOTVAgbGlicmFyeSBjb21waWxlZCBhcyBhIERMTCBpbnN0ZWFkIG9mCisgICAgICogICBhIHN0YXRpYyBsaWJyYXJ5LgogICAgICAqLwotICAgIGludCAgICAgICAgICAgICBzbm1wX3NlbmQobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfcGR1ICopOwotCi0gICAgLyoKLSAgICAgKiBpbnQgc25tcF9hc3luY19zZW5kKHNlc3Npb24sIHBkdSwgY2FsbGJhY2ssIGNiX2RhdGEpCi0gICAgICogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKLSAgICAgKiAgICAgbmV0c25tcF9wZHUgICAgICAqcGR1OwotICAgICAqICAgICBuZXRzbm1wX2NhbGxiYWNrIGNhbGxiYWNrOwotICAgICAqICAgICB2b2lkICAgKmNiX2RhdGE7Ci0gICAgICoKLSAgICAgKiBTZW5kcyB0aGUgaW5wdXQgcGR1IG9uIHRoZSBzZXNzaW9uIGFmdGVyIGNhbGxpbmcgc25tcF9idWlsZCB0byBjcmVhdGUKLSAgICAgKiBhIHNlcmlhbGl6ZWQgcGFja2V0LiAgSWYgbmVjZXNzYXJ5LCBzZXQgc29tZSBvZiB0aGUgcGR1IGRhdGEgZnJvbSB0aGUKLSAgICAgKiBzZXNzaW9uIGRlZmF1bHRzLiAgQWRkIGEgcmVxdWVzdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcGR1IHRvIHRoZSBsaXN0Ci0gICAgICogb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMgb24gdGhpcyBzZXNzaW9uIGFuZCBzdG9yZSBjYWxsYmFjayBhbmQgZGF0YSwKLSAgICAgKiB0aGVuIHNlbmQgdGhlIHBkdS4KLSAgICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0IGlkIG9mIHRoZSBnZW5lcmF0ZWQgcGFja2V0IGlmIGFwcGxpY2FibGUsIG90aGVyd2lzZSAxLgotICAgICAqIE9uIGFueSBlcnJvciwgMCBpcyByZXR1cm5lZC4KLSAgICAgKiBUaGUgcGR1IGlzIGZyZWVkIGJ5IHNubXBfc2VuZCgpIHVubGVzcyBhIGZhaWx1cmUgb2NjdXJlZC4KLSAgICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgc25tcF9hc3luY19zZW5kKG5ldHNubXBfc2Vzc2lvbiAqLCBuZXRzbm1wX3BkdSAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFjaywgdm9pZCAqKTsKLQotCi0gICAgLyoKLSAgICAgKiB2b2lkIHNubXBfcmVhZChmZHNldCkKLSAgICAgKiAgICAgZmRfc2V0ICAqZmRzZXQ7Ci0gICAgICoKLSAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGFueSBvZiB0aGUgZmQncyBzZXQgaW4gdGhlIGZkc2V0IGJlbG9uZyB0bwotICAgICAqIHNubXAuICBFYWNoIHNvY2tldCB3aXRoIGl0J3MgZmQgc2V0IGhhcyBhIHBhY2tldCByZWFkIGZyb20gaXQKLSAgICAgKiBhbmQgc25tcF9wYXJzZSBpcyBjYWxsZWQgb24gdGhlIHBhY2tldCByZWNlaXZlZC4gIFRoZSByZXN1bHRpbmcgcGR1Ci0gICAgICogaXMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayByb3V0aW5lIGZvciB0aGF0IHNlc3Npb24uICBJZiB0aGUgY2FsbGJhY2sKLSAgICAgKiByb3V0aW5lIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB0aGUgcGR1IGFuZCBpdCdzIHJlcXVlc3QgYXJlIGRlbGV0ZWQuCi0gICAgICovCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfcmVhZChmZF9zZXQgKik7Ci0KLQorICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgKm5ldHNubXBfbWFsbG9jKHNpemVfdCBzaXplKTsKKyAgICBORVRTTk1QX0lNUE9SVCB2b2lkICpuZXRzbm1wX2NhbGxvYyhzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpOworICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgKm5ldHNubXBfcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKyAgICBORVRTTk1QX0lNUE9SVCB2b2lkIG5ldHNubXBfZnJlZSh2b2lkICpwdHIpOworICAgIE5FVFNOTVBfSU1QT1JUIGNoYXIgKm5ldHNubXBfc3RyZHVwKGNvbnN0IGNoYXIgKnMxKTsKIAogICAgIC8qCiAgICAgICogdm9pZApAQCAtNjM0LDU3ICsyODgsOCBAQAogICAgICAqCiAgICAgICogRnJlZXMgdGhlIHBkdSBhbmQgYW55IG1hbGxvYydkIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICAqLwotICAgIHZvaWQgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KG5ldHNubXBfcGR1ICopOwogCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfZnJlZV92YXIobmV0c25tcF92YXJpYWJsZV9saXN0ICopOyAgICAgLyogZnJlZXMganVzdCB0aGlzIG9uZSAqLwotCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcik7ICAgICAvKiBmcmVlcyBhbGwgaW4gbGlzdCAqLwotCi0gICAgLyoKLSAgICAgKiBpbnQgc25tcF9zZWxlY3RfaW5mbyhudW1mZHMsIGZkc2V0LCB0aW1lb3V0LCBibG9jaykKLSAgICAgKiBpbnQgKm51bWZkczsKLSAgICAgKiBmZF9zZXQgICAqZmRzZXQ7Ci0gICAgICogc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQ7Ci0gICAgICogaW50ICpibG9jazsKLSAgICAgKgotICAgICAqIFJldHVybnMgaW5mbyBhYm91dCB3aGF0IHNubXAgcmVxdWlyZXMgZnJvbSBhIHNlbGVjdCBzdGF0ZW1lbnQuCi0gICAgICogbnVtZmRzIGlzIHRoZSBudW1iZXIgb2YgZmRzIGluIHRoZSBsaXN0IHRoYXQgYXJlIHNpZ25pZmljYW50LgotICAgICAqIEFsbCBmaWxlIGRlc2NyaXB0b3JzIG9wZW5lZCBmb3IgU05NUCBhcmUgT1InZCBpbnRvIHRoZSBmZHNldC4KLSAgICAgKiBJZiBhY3Rpdml0eSBvY2N1cnMgb24gYW55IG9mIHRoZXNlIGZpbGUgZGVzY3JpcHRvcnMsIHNubXBfcmVhZAotICAgICAqIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGF0IGZpbGUgZGVzY3JpcHRvciBzZXQuCi0gICAgICoKLSAgICAgKiBUaGUgdGltZW91dCBpcyB0aGUgbGF0ZXN0IHRpbWUgdGhhdCBTTk1QIGNhbiB3YWl0IGZvciBhIHRpbWVvdXQuICBUaGUKLSAgICAgKiBzZWxlY3Qgc2hvdWxkIGJlIGRvbmUgd2l0aCB0aGUgbWluaW11bSB0aW1lIGJldHdlZW4gdGltZW91dCBhbmQgYW55IG90aGVyCi0gICAgICogdGltZW91dHMgbmVjZXNzYXJ5LiAgVGhpcyBzaG91bGQgYmUgY2hlY2tlZCB1cG9uIGVhY2ggaW52b2NhdGlvbiBvZiBzZWxlY3QuCi0gICAgICogSWYgYSB0aW1lb3V0IGlzIHJlY2VpdmVkLCBzbm1wX3RpbWVvdXQgc2hvdWxkIGJlIGNhbGxlZCB0byBjaGVjayBpZiB0aGUKLSAgICAgKiB0aW1lb3V0IHdhcyBmb3IgU05NUC4gIChzbm1wX3RpbWVvdXQgaXMgaWRlbXBvdGVudCkKLSAgICAgKgotICAgICAqIEJsb2NrIGlzIDEgaWYgdGhlIHNlbGVjdCBpcyByZXF1ZXN0ZWQgdG8gYmxvY2sgaW5kZWZpbml0ZWx5LCByYXRoZXIgdGhhbgotICAgICAqIHRpbWUgb3V0LiAgSWYgYmxvY2sgaXMgaW5wdXQgYXMgMSwgdGhlIHRpbWVvdXQgdmFsdWUgd2lsbCBiZSB0cmVhdGVkIGFzCi0gICAgICogdW5kZWZpbmVkLCBidXQgaXQgbXVzdCBiZSBhdmFpbGFibGUgZm9yIHNldHRpbmcgaW4gc25tcF9zZWxlY3RfaW5mby4gIE9uCi0gICAgICogcmV0dXJuLCBpZiBibG9jayBpcyB0cnVlLCB0aGUgdmFsdWUgb2YgdGltZW91dCB3aWxsIGJlIHVuZGVmaW5lZC4KLSAgICAgKgotICAgICAqIHNubXBfc2VsZWN0X2luZm8gcmV0dXJucyB0aGUgbnVtYmVyIG9mIG9wZW4gc29ja2V0cy4gIChpLmUuIFRoZSBudW1iZXIKLSAgICAgKiBvZiBzZXNzaW9ucyBvcGVuKQotICAgICAqLwotICAgIGludCAgICAgICAgICAgICBzbm1wX3NlbGVjdF9pbmZvKGludCAqLCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKik7Ci0KLQotCi0gICAgLyoKLSAgICAgKiB2b2lkIHNubXBfdGltZW91dCgpOwotICAgICAqCi0gICAgICogc25tcF90aW1lb3V0IHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHRpbWVvdXQgZnJvbSBzbm1wX3NlbGVjdF9pbmZvCi0gICAgICogZXhwaXJlcywgYnV0IGl0IGlzIGlkZW1wb3RlbnQsIHNvIHNubXBfdGltZW91dCBjYW4gYmUgcG9sbGVkIChwcm9iYWJseSBhCi0gICAgICogY3B1IGV4cGVuc2l2ZSBwcm9wb3NpdGlvbikuICBzbm1wX3RpbWVvdXQgY2hlY2tzIHRvIHNlZSBpZiBhbnkgb2YgdGhlCi0gICAgICogc2Vzc2lvbnMgaGF2ZSBhbiBvdXRzdGFuZGluZyByZXF1ZXN0IHRoYXQgaGFzIHRpbWVkIG91dC4gIElmIGl0IGZpbmRzIG9uZQotICAgICAqIChvciBtb3JlKSwgYW5kIHRoYXQgcGR1IGhhcyBtb3JlIHJldHJpZXMgYXZhaWxhYmxlLCBhIG5ldyBwYWNrZXQgaXMgZm9ybWVkCi0gICAgICogZnJvbSB0aGUgcGR1IGFuZCBpcyByZXNlbnQuICBJZiB0aGVyZSBhcmUgbm8gbW9yZSByZXRyaWVzIGF2YWlsYWJsZSwgdGhlCi0gICAgICogY2FsbGJhY2sgZm9yIHRoZSBzZXNzaW9uIGlzIHVzZWQgdG8gYWxlcnQgdGhlIHVzZXIgb2YgdGhlIHRpbWVvdXQuCi0gICAgICovCi0KLSAgICB2b2lkICAgICAgICAgICAgc25tcF90aW1lb3V0KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgc25tcF9mcmVlX3Zhcl9pbnRlcm5hbHMobmV0c25tcF92YXJpYWJsZV9saXN0ICopOyAgICAgLyogZnJlZXMgY29udGVudHMgb25seSAqLwogCiAKICAgICAvKgpAQCAtNzI2LDIwICszMzEsMjcgQEAKIAogICAgIGxvbmcgICAgICAgICAgICBzbm1wX2dldF9uZXh0X21zZ2lkKHZvaWQpOwogICAgIGxvbmcgICAgICAgICAgICBzbm1wX2dldF9uZXh0X3JlcWlkKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfc2Vzc2lkKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfdHJhbnNpZCh2b2lkKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfb2lkX2NvbXBhcmUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgICBpbnQgICAgICAgICAgICAgc25tcF9vaWRfbmNvbXBhcmUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX29pZHRyZWVfY29tcGFyZShjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX29pZHN1YnRyZWVfY29tcGFyZShjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF9jb21wYXJlX2xsKGNvbnN0IG9pZCAqIGluX25hbWUxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKiBpbl9uYW1lMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuMiwgc2l6ZV90ICpvZmZwdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfZXF1YWxzKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfdHJlZV9lcXVhbHMoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCkBAIC03NDcsOCArMzU5LDEwIEBACiAgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfaXNfc3VidHJlZShjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2ZpbmRfcHJlZml4KGNvbnN0IG9pZCAqIGluX25hbWUxLCBzaXplX3QgbGVuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogaW5fbmFtZTIsIHNpemVfdCBsZW4yKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBpbml0X3NubXAoY29uc3QgY2hhciAqKTsKICAgICB1X2NoYXIgICAgICAgICAqc25tcF9wZHVfYnVpbGQobmV0c25tcF9wZHUgKiwgdV9jaGFyICosIHNpemVfdCAqKTsKICNpZmRlZiBORVRTTk1QX1VTRV9SRVZFUlNFX0FTTkVOQ09ESU5HCkBAIC03NzIsMjcgKzM4Niw0MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgpOwogICAgIHVfY2hhciAgICAgICAgICpzbm1wdjNfc2NvcGVkUERVX3BhcnNlKG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIGNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoY29uc3QgY2hhciAqdHlwZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9zdG9yZV9pZl9uZWVkZWQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9zdG9yZShjb25zdCBjaGFyICp0eXBlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NodXRkb3duKGNvbnN0IGNoYXIgKnR5cGUpOwotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqc25tcF9wZHVfYWRkX3ZhcmlhYmxlKG5ldHNubXBfcGR1ICosIGNvbnN0IG9pZCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCwgdV9jaGFyLCBjb25zdCB1X2NoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiogdmFybGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5hbWVfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfYWRkX3ZhcihuZXRzbm1wX3BkdSAqLCBjb25zdCBvaWQgKiwgc2l6ZV90LCBjaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG9pZCAgICAgICAgICAgICpzbm1wX2R1cGxpY2F0ZV9vYmppZChjb25zdCBvaWQgKiBvYmpUb0NvcHksIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVRJU1RJQ1MKICAgICB1X2ludCAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKGludCB3aGljaCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2ludCAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5KGludCB3aGljaCwgaW50IGNvdW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfaW50ICAgICAgICAgICBzbm1wX2dldF9zdGF0aXN0aWMoaW50IHdoaWNoKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcF9pbml0X3N0YXRpc3RpY3Modm9pZCk7CisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVRJU1RJQ1MgKi8KKworLyogYWxsb3cgY29kZSB0byBjb250aW51ZSByZWZlcmVuY2luZyBBUEkgZXZlbiBpZiBzdGF0aXN0aWNzIGFyZSByZW1vdmVkICovCisjZGVmaW5lIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhYKQorI2RlZmluZSBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkoWCxZKQorI2RlZmluZSBzbm1wX2luaXRfc3RhdGlzdGljcygpCisKKyNlbmRpZgorCiAgICAgaW50ICAgICAgICAgICAgIGNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uKTsKLSAgICBpbnQgc25tcF9nZXRfZmRfZm9yX3Nlc3Npb24oc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc3ApOworICAgIGludCBzbm1wdjNfcHJvYmVfY29udGV4dEVuZ2luZUlEX3JmYzUzNDModm9pZCAqc2xwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKTsKIAogICAgIC8qCiAgICAgICogTmV3IHJlLWFsbG9jYXRpbmcgcmV2ZXJzZSBlbmNvZGluZyBmdW5jdGlvbnMuICAKQEAgLTgxMSwxMCArNDM4LDEzIEBACiAKIAogCitzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfczsKKwogICAgIC8qCiAgICAgICogRXh0ZW5kZWQgb3BlbjsgZnByZV9wYXJzZSBoYXMgY2hhbmdlZC4gIAogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfb3Blbl9leChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdApAQCAtODM4LDcwICs0NjgsMzYgQEAKICAgICAgKiBTZWUgc25tcF9kZWJ1Zy5oIGFuZCBzbm1wX2RlYnVnLmMgaW5zdGVhZC4KICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZyhpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2RvX2RlYnVnZ2luZyh2b2lkKTsKIAogCi0gICAgLyoKLSAgICAgKiBzbm1wX2Vycm9yIC0gcmV0dXJuIGVycm9yIGRhdGEKLSAgICAgKiBJbnB1dHMgOiAgYWRkcmVzcyBvZiBlcnJubywgYWRkcmVzcyBvZiBzbm1wX2Vycm5vLCBhZGRyZXNzIG9mIHN0cmluZwotICAgICAqIENhbGxlciBtdXN0IGZyZWUgdGhlIHN0cmluZyByZXR1cm5lZCBhZnRlciB1c2UuCi0gICAgICovCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfZXJyb3IobmV0c25tcF9zZXNzaW9uICosIGludCAqLCBpbnQgKiwgY2hhciAqKik7Ci0gICAgLyoKLSAgICAgKiBzaW5nbGUgc2Vzc2lvbiBBUEkuCi0gICAgICoKLSAgICAgKiBUaGVzZSBmdW5jdGlvbnMgcGVyZm9ybSBzaW1pbGFyIGFjdGlvbnMgYXMgc25tcF9YWCBmdW5jdGlvbnMsCi0gICAgICogYnV0IG9wZXJhdGUgb24gYSBzaW5nbGUgc2Vzc2lvbiBvbmx5LgotICAgICAqCi0gICAgICogU3lub3BzaXM6Ci0gICAgIAotICAgICB2b2lkICogc2Vzc3A7Ci0gICAgIG5ldHNubXBfc2Vzc2lvbiBzZXNzaW9uLCAqc3M7Ci0gICAgIG5ldHNubXBfcGR1ICpwZHUsICpyZXNwb25zZTsKLSAgICAgCi0gICAgIHNubXBfc2Vzc19pbml0KCZzZXNzaW9uKTsKLSAgICAgc2Vzc2lvbi5yZXRyaWVzID0gLi4uCi0gICAgIHNlc3Npb24ucmVtb3RlX3BvcnQgPSAuLi4KLSAgICAgc2Vzc3AgPSBzbm1wX3Nlc3Nfb3Blbigmc2Vzc2lvbik7Ci0gICAgIHNzID0gc25tcF9zZXNzX3Nlc3Npb24oc2Vzc3ApOwotICAgICBpZiAoc3MgPT0gTlVMTCkKLSAgICAgZXhpdCgxKTsKLSAgICAgLi4uCi0gICAgIGlmIChzcy0+Y29tbXVuaXR5KSBmcmVlKHNzLT5jb21tdW5pdHkpOwotICAgICBzcy0+Y29tbXVuaXR5ID0gc3RyZHVwKGdhdGV3YXkpOwotICAgICBzcy0+Y29tbXVuaXR5X2xlbiA9IHN0cmxlbihnYXRld2F5KTsKLSAgICAgLi4uCi0gICAgIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZShzZXNzcCwgcGR1LCAmcmVzcG9uc2UpOwotICAgICAuLi4KLSAgICAgc25tcF9zZXNzX2Nsb3NlKHNlc3NwKTsKLSAgICAgCi0gICAgICogU2VlIGFsc286Ci0gICAgICogc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlLCBpbiBzbm1wX2NsaWVudC5oLgotICAgICAKLSAgICAgKiBOb3RlczoKLSAgICAgKiAgMS4gSW52b2tlIHNubXBfc2Vzc19zZXNzaW9uIGFmdGVyIHNubXBfc2Vzc19vcGVuLgotICAgICAqICAyLiBzbm1wX3Nlc3Nfc2Vzc2lvbiByZXR1cm4gdmFsdWUgaXMgYW4gb3BhcXVlIHBvaW50ZXIuCi0gICAgICogIDMuIERvIE5PVCBmcmVlIG1lbW9yeSByZXR1cm5lZCBieSBzbm1wX3Nlc3Nfc2Vzc2lvbi4KLSAgICAgKiAgNC4gUmVwbGFjZSBzbm1wX3NlbmQoc3MscGR1KSB3aXRoIHNubXBfc2Vzc19zZW5kKHNlc3NwLHBkdSkKLSAgICAgKi8KLQotICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfaW5pdChuZXRzbm1wX3Nlc3Npb24gKik7Ci0gICAgdm9pZCAgICAgICAgICAgKnNubXBfc2Vzc19vcGVuKG5ldHNubXBfc2Vzc2lvbiAqKTsKLSAgICB2b2lkICAgICAgICAgICAqc25tcF9zZXNzX3BvaW50ZXIobmV0c25tcF9zZXNzaW9uICopOwotICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9zZXNzX3Nlc3Npb24odm9pZCAqKTsKICAgICBORVRTTk1QX0lNUE9SVAotICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwKHZvaWQgKik7CisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfc2Vzc19sb2dfZXJyb3IoaW50IHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2dfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNzKTsKKyAgICBjb25zdCBjaGFyICogICAgc25tcF9wZHVfdHlwZShpbnQgdHlwZSk7CiAKICAgICAvKgogICAgICAqIFJldHVybiB0aGUgbmV0c25tcF90cmFuc3BvcnQgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gb3BhcXVlCiAgICAgICogcG9pbnRlci4gIAogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqc25tcF9zZXNzX3RyYW5zcG9ydCh2b2lkICopOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfdHJhbnNwb3J0X3NldCh2b2lkICosCiAJCQkJCSAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUIGludAorICAgIG5ldHNubXBfc2Vzc19jb25maWdfdHJhbnNwb3J0KHN0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zICp0cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqdHJhbnNwb3J0KTsKKworICAgIE5FVFNOTVBfSU1QT1JUIGludAorICAgIG5ldHNubXBfc2Vzc19jb25maWdfYW5kX29wZW5fdHJhbnNwb3J0KG5ldHNubXBfc2Vzc2lvbiAqaW5fc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqdHJhbnNwb3J0KTsKKwogICAgIC8qCiAgICAgICogRVhURU5ERUQgU0VTU0lPTiBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgICAqIApAQCAtOTUwLDYgKzU0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIGludCkpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfYWRkKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKQEAgLTk1Nyw2ICs1NTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHZvaWQgKiwgaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwb3N0X3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIGludCkpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX2FkZF9mdWxsKG5ldHNubXBfc2Vzc2lvbiAqIGluX3Nlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICp0cmFuc3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKQEAgLTk4MSwyOCArNTc5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KQogICAgICAgICApOwotCi0gICAgLyoKLSAgICAgKiB1c2UgcmV0dXJuIHZhbHVlIGZyb20gc25tcF9zZXNzX29wZW4gYXMgdm9pZCAqIHBhcmFtZXRlciAKLSAgICAgKi8KLQotICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc2VuZCh2b2lkICosIG5ldHNubXBfcGR1ICopOwotICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3NfYXN5bmNfc2VuZCh2b2lkICosIG5ldHNubXBfcGR1ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2ssIHZvaWQgKik7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mbyh2b2lkICosIGludCAqLCBmZF9zZXQgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICosIGludCAqKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3JlYWQodm9pZCAqLCBmZF9zZXQgKik7Ci0gICAgdm9pZCAgICAgICAgICAgIHNubXBfc2Vzc190aW1lb3V0KHZvaWQgKik7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZSh2b2lkICopOwotCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfc2Vzc19lcnJvcih2b2lkICosIGludCAqLCBpbnQgKiwgY2hhciAqKik7Ci0gICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfc2Vzc19sb2dfZXJyb3IoaW50IHByaW9yaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2dfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNzKTsKLSAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX3BlcnJvcihjb25zdCBjaGFyICpwcm9nX3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzcyk7Ci0gICAgY29uc3QgY2hhciAqICAgIHNubXBfcGR1X3R5cGUoaW50IHR5cGUpOwotCiAgICAgLyoKICAgICAgKiBlbmQgc2luZ2xlIHNlc3Npb24gQVBJIAogICAgICAqLwpAQCAtMTA4OCw3ICs2NjQsNDggQEAKICNkZWZpbmUgIFNUQVRfVEFSR0VUX1NUQVRTX1NUQVJUICAgICAgICAgICAgIFNUQVRfU05NUFVOQVZBSUxBQkxFQ09OVEVYVFMKICNkZWZpbmUgIFNUQVRfVEFSR0VUX1NUQVRTX0VORCAgICAgICAgICAgICAgIFNUQVRfU05NUFVOS05PV05DT05URVhUUwogCi0jZGVmaW5lICBNQVhfU1RBVFMgICAgICAgICAgICAgICAgICAgICAgICAgICA0MworICAgIC8qCisgICAgICogVFNNIGNvdW50ZXJzCisgICAgICovCisjZGVmaW5lICBTVEFUX1RTTV9TTk1QVFNNSU5WQUxJRENBQ0hFUyAgICAgICAgICAgICA0MworI2RlZmluZSAgU1RBVF9UU01fU05NUFRTTUlOQURFUVVBVEVTRUNVUklUWUxFVkVMUyAgNDQKKyNkZWZpbmUgIFNUQVRfVFNNX1NOTVBUU01VTktOT1dOUFJFRklYRVMgICAgICAgICAgIDQ1CisjZGVmaW5lICBTVEFUX1RTTV9TTk1QVFNNSU5WQUxJRFBSRUZJWEVTICAgICAgICAgICA0NgorI2RlZmluZSAgU1RBVF9UU01fU1RBVFNfU1RBUlQgICAgICAgICAgICAgICAgIFNUQVRfVFNNX1NOTVBUU01JTlZBTElEQ0FDSEVTCisjZGVmaW5lICBTVEFUX1RTTV9TVEFUU19FTkQgICAgICAgICAgICAgICAgICAgU1RBVF9UU01fU05NUFRTTUlOVkFMSURQUkVGSVhFUworCisgICAgLyoKKyAgICAgKiBUTFNUTSBjb3VudGVycworICAgICAqLworI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTlMgICAgICAgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTkNMSUVOVENMT1NFUyAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVORVJST1JTICAgICAgICAgICAgICAgICA0OQorI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OQUNDRVBUUyAgICAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTlNFUlZFUkNMT1NFUyAgICAgICAgICAgICAgIDUxCisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05OT1NFU1NJT05TICAgICAgICAgICAgICAgICA1MgorI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OSU5WQUxJRENMSUVOVENFUlRJRklDQVRFUyAgNTMKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTlVOS05PV05TRVJWRVJDRVJUSUZJQ0FURSAgIDU0CisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEU0VSVkVSQ0VSVElGSUNBVEVTICA1NQorI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OSU5WQUxJRENBQ0hFUyAgICAgICAgICAgICAgNTYKKworI2RlZmluZSAgU1RBVF9UTFNUTV9TVEFUU19TVEFSVCAgICAgICAgICAgICAgICAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTlMKKyNkZWZpbmUgIFNUQVRfVExTVE1fU1RBVFNfRU5EICAgICAgICAgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDQUNIRVMKKworICAgIC8qIHRoaXMgcHJldmlvdXNseSB3YXMgZW5kKzE7IGRvbid0IGtub3cgd2h5IHRoZSArMSBpcyBuZWVkZWQ7CisgICAgICAgWFhYOiBjaGVjayB0aGUgY29kZSAqLworI2RlZmluZSAgTkVUU05NUF9TVEFUX01BWF9TVEFUUyAgICAgICAgICAgICAgKFNUQVRfVExTVE1fU1RBVFNfRU5EKzEpCisvKiogYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgKi8KKyNkZWZpbmUgTUFYX1NUQVRTIE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMKKworICAgIC8qCisgICAgICogSW50ZXJuYWw6IFRoZSBsaXN0IG9mIGFjdGl2ZS9vcGVuIHNlc3Npb25zLgorICAgICAqLworICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgeworICAgICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKm5leHQ7CisgICAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOworICAgICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisgICAgICAgc3RydWN0IHNubXBfaW50ZXJuYWxfc2Vzc2lvbiAqaW50ZXJuYWw7CisgICAgfTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCmluZGV4IDU3OGI2Y2UuLjhmNTJhNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCkBAIC0yMyw0MiArMjMsMTA1IEBACiAjICBlbmRpZiAvKiBfX1NURENfXyAqLwogI2VuZGlmIC8qIF9fU1RSSU5HICovCiAKLSNkZWZpbmUgbmV0c25tcF9zdGF0aWNfYXNzZXJ0KHgpIFwKLSAgICBkbyB7IHN3aXRjaCgwKSB7IGNhc2UgKHgpOiBjYXNlIDA6IDsgfSB9IHdoaWxlKDApCi0KLQogLyoKICAqIGFsd2F5cyB1c2UgYXNzZXJ0IGlmIHJlcXVlc3RlZAogICovCiAjaWZkZWYgTkVUU05NUF9VU0VfQVNTRVJUCiAvKiAgIHZvaWQgbmV0c25tcF9hc3NlcnQoIGludCApOyovCiAjICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0KHgpICBhc3NlcnQoIHggKQorIyAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oeCwgeSkgIGFzc2VydCggeCApCisjICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybih4LCB5LCB6KSAgYXNzZXJ0KCB4ICkKICNlbHNlCiAvKgogICogIGlmIGFzc2VydHMgd2VyZW4ndCByZXF1ZXN0ZWQsIGp1c3QgbG9nLCB1bmxlc3MgTkVUU05NUF9OT19ERUJVR0dJTkcgc3BlY2lmaWVkCiAgKi8KICMgICBpZm5kZWYgTkVUU05NUF9OT19ERUJVR0dJTkcKLSMgICAgICBpZmRlZiAgSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRAotIyAgICAgICAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydCh4KSAgZG8geyBcCi0gICAgICAgICAgICAgICAgIGlmICggeCApIFwKLSAgICAgICAgICAgICAgICAgICAgOyBcCi0gICAgICAgICAgICAgICAgIGVsc2UgXAotICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX2Fzc2VydCAlcyBmYWlsZWQgJXM6JWQgJXMoKVxuIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORyh4KSxfX0ZJTEVfXyxfX0xJTkVfXyxfX0ZVTkNUSU9OX18pOyBcCi0gICAgICAgICAgICAgIH13aGlsZSgwKQorIyAgICAgIGlmZGVmICBORVRTTk1QX0ZVTkNUSU9OCisjICAgICAgICAgIGRlZmluZSBORVRTTk1QX0ZVTkNfRk1UICIgJXMoKVxuIgorIyAgICAgICAgICBkZWZpbmUgTkVUU05NUF9GVU5DX1BBUkFNIE5FVFNOTVBfRlVOQ1RJT04KICMgICAgICBlbHNlCi0jICAgICAgICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0KHgpICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgaWYoIHggKVwKLSAgICAgICAgICAgICAgICAgICAgOyBcCi0gICAgICAgICAgICAgICAgIGVsc2UgXAotICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX2Fzc2VydCAlcyBmYWlsZWQgJXM6JWRcbiIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19TVFJJTkcoeCksX19GSUxFX18sX19MSU5FX18pOyBcCi0gICAgICAgICAgICAgIH13aGlsZSgwKQorIyAgICAgICAgICBkZWZpbmUgTkVUU05NUF9GVU5DX0ZNVCAiJWMiCisjICAgICAgICAgIGRlZmluZSBORVRTTk1QX0ZVTkNfUEFSQU0gJ1xuJwogIyAgICAgIGVuZGlmCisjCisjICAgICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0KHgpICBkbyB7IFwKKyAgICAgICAgICAgICAgaWYgKCB4ICkgXAorICAgICAgICAgICAgICAgICA7IFwKKyAgICAgICAgICAgICAgZWxzZSBcCisgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldHNubXBfYXNzZXJ0ICVzIGZhaWxlZCAlczolZCIgTkVUU05NUF9GVU5DX0ZNVCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORyh4KSxfX0ZJTEVfXyxfX0xJTkVfXywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0ZVTkNfUEFSQU0pOyBcCisgICAgICAgICAgIH13aGlsZSgwKQorIyAgICAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oeCwgeSkgIGRvIHsgICAgICAgIFwKKyAgICAgICAgICAgICAgaWYgKCB4ICkgXAorICAgICAgICAgICAgICAgICA7IFwKKyAgICAgICAgICAgICAgZWxzZSB7IFwKKyAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0c25tcF9hc3NlcnQgJXMgZmFpbGVkICVzOiVkIiBORVRTTk1QX0ZVTkNfRk1ULCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HKHgpLF9fRklMRV9fLF9fTElORV9fLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRlVOQ19QQVJBTSk7IFwKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHk7IFwKKyAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgIH13aGlsZSgwKQorIyAgICAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oeCwgeSwgeikgIGRvIHsgICAgICAgXAorICAgICAgICAgICAgICBpZiAoIHggKSBcCisgICAgICAgICAgICAgICAgIDsgXAorICAgICAgICAgICAgICBlbHNlIHsgXAorICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRzbm1wX2Fzc2VydCAlcyBmYWlsZWQgJXM6JWQiIE5FVFNOTVBfRlVOQ19GTVQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19TVFJJTkcoeCksX19GSUxFX18sX19MSU5FX18sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GVU5DX1BBUkFNKTsgXAorICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCB5KTsgXAorICAgICAgICAgICAgICAgICByZXR1cm4gejsgXAorICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgfXdoaWxlKDApCiAjICAgZWxzZSAvKiBOTyBERUJVR0dJTkcgKi8KICMgICAgICBkZWZpbmUgbmV0c25tcF9hc3NlcnQoeCkKKyMgICAgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHgsIHkpICBkbyB7ICAgICAgICBcCisgICAgICAgICAgICAgICAgIGlmICggeCApIFwKKyAgICAgICAgICAgICAgICAgICAgOyBcCisgICAgICAgICAgICAgICAgIGVsc2UgeyBcCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB5OyBcCisgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICB9d2hpbGUoMCkKKyMgICAgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKHgsIHksIHopICBkbyB7ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgaWYgKCB4ICkgXAorICAgICAgICAgICAgICAgICAgICA7IFwKKyAgICAgICAgICAgICAgICAgZWxzZSB7IFwKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHo7IFwKKyAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgIH13aGlsZSgwKQogIyAgIGVuZGlmIC8qIE5PIERFQlVHR0lORyAqLwogI2VuZGlmIC8qIG5vdCBORVRTTk1QX1VTRV9BU1NFUlQgKi8KIAogCisjZGVmaW5lIG5ldHNubXBfc3RhdGljX2Fzc2VydCh4KSBcCisgICAgZG8geyBzd2l0Y2goMCkgeyBjYXNlICh4KTogY2FzZSAwOiA7IH0gfSB3aGlsZSgwKQorCisKKy8qCisgKiAgRVhQRVJJTUVOVEFMIG1hY3Jvcy4gTWF5IGJlIHJlbW92ZWQgd2l0aG91dCB3YXJuaW5nIGluIGZ1dHVyZQorICogcmVsZWFzZXMuIFVzZSBhdCB5b3VyIG93biByaXNrCisgKgorICogVGhlIHNlcmllcyBvZiB1cHBlcmNhc2UgbGV0dGVycyBhdCBvciBuZWFyIHRoZSBlbmQgb2YgdGhlc2UgbWFjcm9zIGdpdmUKKyAqIGFuIGluZGljYXRpb24gb2Ygd2hhdCB0aGV5IGRvLiBUaGUgbGV0dGVycyB1c2VkIGFyZToKKyAqCisgKiAgIEwgIDogbG9nIGEgbWVzc2FnZQorICogICBSTiA6IHJldHVybiBOVUxMCisgKiAgIFJFIDogcmV0dXJuIGEgc3BlY2lmaWMgaGFyZGNvZGVkIGVycm9yIGFwcHJvcHJpYXRlIGZvciB0aGUgY29uZGl0aW9uCisgKiAgIFJWIDogcmV0dXJuIHVzZXIgc3BlY2lmaWVkIHZhbHVlCisgKgorICovCisjZGVmaW5lIG5ldHNubXBfbWFsbG9jX2NoZWNrX0xSTihwdHIpICAgICAgICAgICBcCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKCAocHRyKSAhPSBOVUxMLCBOVUxMKQorI2RlZmluZSBuZXRzbm1wX21hbGxvY19jaGVja19MUkUocHRyKSAgICAgICAgICAgXAorICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybiggKHB0cikgIT0gTlVMTCwgU05NUEVSUl9NQUxMT0MpCisjZGVmaW5lIG5ldHNubXBfbWFsbG9jX2NoZWNrX0xSVihwdHIsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oIChwdHIpICE9IE5VTEwsIHZhbCkKKworI2RlZmluZSBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggcHRyLCB2YWwgKSBcCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKCAocHRyKSAhPSBOVUxMLCB2YWwpCisKKwogI2VuZGlmIC8qIFNOTVBfQVNTRVJUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKaW5kZXggOTllNzViNS4uZWE1NGU3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKQEAgLTI2LDYgKzI2LDEyIEBACiAjaWZuZGVmIFNOTVBfQ0xJRU5UX0gKICNkZWZpbmUgU05NUF9DTElFTlRfSAogCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC92YXJiaW5kX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvc2Vzc2lvbl9hcGkuaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgpAQCAtNDgsNjIgKzU0LDExMiBAQAogICAgICAgICBuZXRzbm1wX3BkdSAgICAqcGR1OwogICAgIH07CiAKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3ZhbHVlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwotICAgIGludCAgICAgICAgICAgICBzbm1wX3NldF92YXJfb2JqaWQobmV0c25tcF92YXJpYWJsZV9saXN0ICogdnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYW1lX2xlbmd0aCk7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFyLCB1X2NoYXIgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiB2YWxfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbF9sZW4pOwotICAgIGludCAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiBuZXd2YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLCBsb25nIHZhbCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9yZXBsYWNlX3Zhcl90eXBlcyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIG9sZF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciBuZXdfdHlwZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9yZXNldF92YXJfYnVmZmVycyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIpOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Jlc2V0X3Zhcl90eXBlcyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciBuZXdfdHlwZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgY291bnRfdmFyYmluZHMobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyX3B0cik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgY291bnRfdmFyYmluZHNfb2ZfdHlwZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlKTsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmZpbmRfdmFyYmluZF9vZl90eXBlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJfcHRyLCB1X2NoYXIgdHlwZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmZpbmRfdmFyYmluZF9pbl9saXN0KG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmJsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICpuYW1lLCBzaXplX3QgbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IGxlbik7CiAKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnNubXBfYWRkX251bGxfdmFyKG5ldHNubXBfcGR1ICosIGNvbnN0IG9pZCAqLCBzaXplX3QpOwotICAgIG5ldHNubXBfcGR1ICAgICpzbm1wX3BkdV9jcmVhdGUoaW50KTsKLSAgICBuZXRzbm1wX3BkdSAgICAqc25tcF9maXhfcGR1KG5ldHNubXBfcGR1ICosIGludCk7Ci0gICAgbmV0c25tcF9wZHUgICAgKnNubXBfY2xvbmVfcGR1KG5ldHNubXBfcGR1ICopOwogICAgIG5ldHNubXBfcGR1ICAgICpzbm1wX3NwbGl0X3BkdShuZXRzbm1wX3BkdSAqLCBpbnQgc2tpcENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29weUNvdW50KTsKIAogICAgIHVuc2lnbmVkIGxvbmcgICBzbm1wX3ZhcmJpbmRfbGVuKG5ldHNubXBfcGR1ICpwZHUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfY2xvbmVfdmFyKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7Ci0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpzbm1wX2Nsb25lX3ZhcmJpbmQobmV0c25tcF92YXJpYWJsZV9saXN0ICopOwotICAgIGNvbnN0IGNoYXIgICAgICpzbm1wX2VycnN0cmluZyhpbnQpOwotICAgIGludCAgICAgICAgICAgICBzbm1wX3N5bmNoX3Jlc3BvbnNlKG5ldHNubXBfc2Vzc2lvbiAqLCBuZXRzbm1wX3BkdSAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICoqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIG5ldHNubXBfcGR1ICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfY2FsbGJhY2spOwotICAgIGludCAgICAgICAgICAgICBzbm1wX2Nsb25lX21lbSh2b2lkICoqLCB2b2lkICosIHVuc2lnbmVkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX2Nsb25lX21lbSh2b2lkICoqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKIAotICAgIC8qCi0gICAgICogc2luZ2xlIHNlc3Npb24gQVBJIC0gc2VlIHNubXBfYXBpLmggZm9yIGZ1bGwgZGV0YWlscyAKLSAgICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHZvaWQgKiwgbmV0c25tcF9wZHUgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICoqKTsKIAorTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICAgIG5ldHNubXBfcXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKik7CitORVRTTk1QX0lNUE9SVAorbmV0c25tcF9zZXNzaW9uICogbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uX3VuY2hlY2tlZCggdm9pZCApOworTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfc2Vzc2lvbiAqIG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbiggdm9pZCApOworTkVUU05NUF9JTVBPUlQKIGludCBuZXRzbm1wX3F1ZXJ5X2dldCggICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLCBuZXRzbm1wX3Nlc3Npb24gKik7CitORVRTTk1QX0lNUE9SVAogaW50IG5ldHNubXBfcXVlcnlfZ2V0bmV4dCggbmV0c25tcF92YXJpYWJsZV9saXN0ICosIG5ldHNubXBfc2Vzc2lvbiAqKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgbmV0c25tcF9xdWVyeV93YWxrKCAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiwgbmV0c25tcF9zZXNzaW9uICopOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK05FVFNOTVBfSU1QT1JUCiBpbnQgbmV0c25tcF9xdWVyeV9zZXQoICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiwgbmV0c25tcF9zZXNzaW9uICopOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc3RhdGUgbWFjaGluZQorICoKKyAqLworICAgIC8qKiBmb3J3YXJkIGRlY2xhcmUgKi8KKyAgICBzdHJ1Y3QgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXBfczsKKyAgICBzdHJ1Y3QgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0X3M7CisKKyAgICAvKiogc3RhdGUgbWFjaGluZSBwcm9jZXNzICovCisgICAgdHlwZWRlZiBpbnQgKG5ldHNubXBfc3RhdGVfbWFjaGluZV9mdW5jKShzdHJ1Y3QgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0X3MgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwX3MgKnN0ZXApOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXBfcyB7CisKKyAgICAgICAgY29uc3QgY2hhciAgICpuYW1lOyAvKiBwcmltYXJpbHkgZm9yIGxvZ2dpbmcvZGVidWdnaW5nICovCisgICAgICAgIHVfaW50ICAgICAgICAgc21fZmxhZ3M7CisgICAgICAgIAorICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfZnVuYyAqcnVuOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OyAvKiByZXR1cm4gY29kZSBmb3IgdGhpcyBzdGVwICovCisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgc3RydWN0IG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwX3MgKm9uX3N1Y2Nlc3M7CisgICAgICAgIHN0cnVjdCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcF9zICpvbl9lcnJvcjsKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIHVzZXIgZmllbGRzIChub3QgdG91Y2hlZCBieSBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9ucykKKyAgICAgICAgICovCisgICAgICAgIHVfaW50ICAgICAgICAgZmxhZ3M7CisgICAgICAgIHZvaWQgICAgICAgICAqc3RlcF9jb250ZXh0OworICAgICAgICAKKyAgICB9IG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0X3MgeworICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgKm5hbWU7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHNfc29fZmFyOworICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAgKnN0ZXBzOworICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAgKmNsZWFudXA7CisgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICAqbGFzdF9ydW47CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdXNlciBmaWVsZHMgKG5vdCB0b3VjaGVkIGJ5IHN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zKQorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCAgICAgICAgICppbnB1dF9jb250ZXh0OworCisgICAgfSBuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQ7CisKKworICAgIE5FVFNOTVBfSU1QT1JUIGludAorICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9ydW4oIG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQgKTsKKworICAgIE5FVFNOTVBfSU1QT1JUIGludAorICAgIG5ldHNubXBfcm93X2NyZWF0ZShuZXRzbm1wX3Nlc3Npb24gKnNlc3MsIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvd19zdGF0dXNfaW5kZXgpOworCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKaW5kZXggOWUzZDVhOS4uYTM5NjlmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCkBAIC0xNSwzNiArMTUsNjAgQEAKICAgICAgKi8KIAogCisjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDgpCisjZGVmaW5lIE5FVFNOTVBfQVRUUklCVVRFX0ZPUk1BVCh0eXBlLCBmb3JtYXRBcmcsIGZpcnN0QXJnKQorI2Vsc2UKKyNkZWZpbmUgTkVUU05NUF9BVFRSSUJVVEVfRk9STUFUKHR5cGUsIGZvcm1hdEFyZywgZmlyc3RBcmcpIFwKKyAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyggX18gIyMgdHlwZSAjIyBfXywgZm9ybWF0QXJnLCBmaXJzdEFyZyApKSkKKyNlbmRpZgorCiAgICAgLyoKICAgICAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSB1c2VkLCBpZiBhdCBhbGwgcG9zc2libGUuICBJbnN0ZWFkLCB1c2UKICAgICAgKiB0aGUgbWFjcm9zIGJlbG93LiAKICAgICAgKi8KLSNpZiBIQVZFX1NUREFSR19ICi0gICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2coY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BVFRSSUJVVEVfRk9STUFUKHByaW50ZiwgMiwgMyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2d0b2tlbihjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BVFRSSUJVVEVfRk9STUFUKHByaW50ZiwgMiwgMyk7CiAgICAgdm9pZCAgICAgICAgICAgIGRlYnVnX2NvbWJvX25jKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7Ci0jZWxzZQotICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZyh2YV9hbGlzdCk7Ci0gICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNndG9rZW4odmFfYWxpc3QpOwotICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z19jb21ib19uYyh2YV9hbGlzdCk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BVFRSSUJVVEVfRk9STUFUKHByaW50ZiwgMiwgMyk7CisKKyN1bmRlZiBORVRTTk1QX0FUVFJJQlVURV9GT1JNQVQKKworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnX29pZChjb25zdCBjaGFyICp0b2tlbiwgY29uc3Qgb2lkICogdGhlb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2dfc3Vib2lkKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBvaWQgKiB0aGVvaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ192YXIoY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnX29pZHJhbmdlKGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiB0aGVvaWQsIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQpOwotICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ19oZXgoY29uc3QgY2hhciAqdG9rZW4sIHVfY2hhciAqIHRoZWRhdGEsCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2dfaGV4KGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCB1X2NoYXIgKiB0aGVkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7Ci0gICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnX2hleHRsaShjb25zdCBjaGFyICp0b2tlbiwgdV9jaGFyICogdGhlZGF0YSwKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ19oZXh0bGkoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IHVfY2hhciAqIHRoZWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z19pbmRlbnRfYWRkKGludCBhbW91bnQpOwotICAgIGNoYXIgICAgICAgICAgICpkZWJ1Z19pbmRlbnQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgZGVidWdfaW5kZW50X2dldCh2b2lkKTsKKyAgICAvKgorICAgICAqIFdoYXQgaXMgc2FpZCBhYm92ZSBpcyB0cnVlIGZvciB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwuIEZ1cnRoZXIgdGhpcworICAgICAqIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIG9ubHkgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorICAgICAqIFBsZWFzZSB1c2UgIiUqcyIsIGRlYnVnX2luZGVudF9nZXQoKSwgIiIgaWYgeW91IHVzZWQgdGhpcyBvbmUgYmVmb3JlLgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3QgY2hhciAgICAgKmRlYnVnX2luZGVudCh2b2lkKTsKIAogICAgIC8qCiAgICAgICogVXNlIHRoZXNlIG1hY3JvcyBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUgdG8gYWxsb3cgdGhlbSB0byBiZQpAQCAtMTIxLDExICsxNDUsMTQgQEAKICNkZWZpbmUgX19EQkdNU0dMX05DKHgpICBfX0RCR1RSQUNFOyBkZWJ1Z21zZyB4CiAjZGVmaW5lIF9fREJHTVNHVExfTkMoeCkgX19EQkdUUkFDRTsgZGVidWdfY29tYm9fbmMgeAogCi0jaWZkZWYgIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQKLSNkZWZpbmUgX19EQkdUUkFDRSAgICAgICBfX0RCR01TR1QoKCJ0cmFjZSIsIiVzKCk6ICVzLCAlZDpcbiIsX19GVU5DVElPTl9fLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLF9fTElORV9fKSkKKyNpZmRlZiAgTkVUU05NUF9GVU5DVElPTgorI2RlZmluZSBfX0RCR1RSQUNFICAgICAgIF9fREJHTVNHVCgoInRyYWNlIiwiJXMoKTogJXMsICVkOlxuIixcCisJCQkJTkVUU05NUF9GVU5DVElPTixfX0ZJTEVfXyxfX0xJTkVfXykpCisjZGVmaW5lIF9fREJHVFJBQ0VUT0soeCkgX19EQkdNU0dUKCh4LCIlcygpOiAlcywgJWQ6XG4iLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0ZVTkNUSU9OLF9fRklMRV9fLF9fTElORV9fKSkKICNlbHNlCiAjZGVmaW5lIF9fREJHVFJBQ0UgICAgICAgX19EQkdNU0dUKCgidHJhY2UiLCIgJXMsICVkOlxuIiwgX19GSUxFX18sX19MSU5FX18pKQorI2RlZmluZSBfX0RCR1RSQUNFVE9LKHgpIF9fREJHTVNHVCgoeCwiICVzLCAlZDpcbiIsIF9fRklMRV9fLF9fTElORV9fKSkKICNlbmRpZgogCiAjZGVmaW5lIF9fREJHTVNHTCh4KSAgICAgX19EQkdUUkFDRSwgZGVidWdtc2cgeApAQCAtMTM2LDExICsxNjMsMTEgQEAKICNkZWZpbmUgX19EQkdNU0dPSURSQU5HRSh4KSBkZWJ1Z21zZ19vaWRyYW5nZSB4CiAjZGVmaW5lIF9fREJHTVNHSEVYKHgpICAgICBkZWJ1Z21zZ19oZXggeAogI2RlZmluZSBfX0RCR01TR0hFWFRMSSh4KSAgZGVidWdtc2dfaGV4dGxpIHgKLSNkZWZpbmUgX19EQkdJTkRFTlQoKSAgICAgIGRlYnVnX2luZGVudCgpCisjZGVmaW5lIF9fREJHSU5ERU5UKCkgICAgICBkZWJ1Z19pbmRlbnRfZ2V0KCkKICNkZWZpbmUgX19EQkdJTkRFTlRBREQoeCkgIGRlYnVnX2luZGVudF9hZGQoeCkKICNkZWZpbmUgX19EQkdJTkRFTlRNT1JFKCkgIGRlYnVnX2luZGVudF9hZGQoMikKICNkZWZpbmUgX19EQkdJTkRFTlRMRVNTKCkgIGRlYnVnX2luZGVudF9hZGQoLTIpCi0jZGVmaW5lIF9fREJHUFJJTlRJTkRFTlQodG9rZW4pIF9fREJHTVNHVEwoKHRva2VuLCAiJXMiLCBfX0RCR0lOREVOVCgpKSkKKyNkZWZpbmUgX19EQkdQUklOVElOREVOVCh0b2tlbikgX19EQkdNU0dUTCgodG9rZW4sICIlKnMiLCBfX0RCR0lOREVOVCgpLCAiIikpCiAKICNkZWZpbmUgX19EQkdEVU1QSEVBREVSKHRva2VuLHgpIFwKICAgICAgICAgX19EQkdQUklOVElOREVOVCgiZHVtcGhfIiB0b2tlbik7IFwKQEAgLTE1NywxMiArMTg0LDExIEBACiAKICNkZWZpbmUgX19EQkdEVU1QU0VDVElPTih0b2tlbix4KSBcCiAgICAgICAgIF9fREJHUFJJTlRJTkRFTlQoImR1bXBoXyIgdG9rZW4pOyBcCi0gICAgICAgIGRlYnVnbXNnKCJkdW1waF8iIHRva2VuLHgpOyBcCi0gICAgICAgIGRlYnVnbXNnKCJkdW1waF8iIHRva2VuLCJcbiIpOyBcCisgICAgICAgIGRlYnVnbXNnKCJkdW1waF8iIHRva2VuLCIlc1xuIix4KTtcCiAgICAgICAgIF9fREJHSU5ERU5UTU9SRSgpCiAKICNkZWZpbmUgX19EQkdEVU1QU0VUVVAodG9rZW4sYnVmLGxlbikgXAotICAgICAgICBkZWJ1Z21zZygiZHVtcHgiIHRva2VuLCAiZHVtcHhfJXM6JXMiLCB0b2tlbiwgX19EQkdJTkRFTlQoKSk7IFwKKyAgICAgICAgZGVidWdtc2coImR1bXB4IiB0b2tlbiwgImR1bXB4XyVzOiUqcyIsIHRva2VuLCBfX0RCR0lOREVOVCgpLCAiIik7IFwKICAgICAgICAgX19EQkdNU0dIRVgoKCJkdW1weF8iIHRva2VuLGJ1ZixsZW4pKTsgXAogICAgICAgICBpZiAoZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZCgiZHVtcHYiIHRva2VuKSA9PSBTTk1QRVJSX1NVQ0NFU1MgfHwgXAogICAgICAgICAgICAgZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZCgiZHVtcHZfIiB0b2tlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7IFwKQEAgLTE3MCw5NSArMTk2LDMxIEBACiAgICAgICAgIH0gZWxzZSB7IFwKICAgICAgICAgICAgIGRlYnVnbXNnKCJkdW1weF8iIHRva2VuLCIgICIpOyBcCiAgICAgICAgIH0gXAotICAgICAgICBkZWJ1Z21zZygiZHVtcHYiIHRva2VuLCAiZHVtcHZfJXM6JXMiLCB0b2tlbiwgX19EQkdJTkRFTlQoKSk7CisgICAgICAgIGRlYnVnbXNnKCJkdW1wdiIgdG9rZW4sICJkdW1wdl8lczolKnMiLCB0b2tlbiwgX19EQkdJTkRFTlQoKSwgIiIpOwogCiAvKioqKioqKioqKioqKioqKioqKiBFbmQgICBwcml2YXRlIG1hY3JvcyAqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYgLyogTkVUU05NUF9OT19ERUJVR0dJTkcgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqU3RhcnQgcHVibGljICBtYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIERFQlVHTVNHKHgpICAgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7ZGVidWdtc2cgeDt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR1QoeCkgICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHVCh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR1RSQUNFICAgICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHVFJBQ0U7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dMKHgpICAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR0woeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dUTCh4KSAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR1RMKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHT0lEKHgpICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dPSUQoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dTVUJPSUQoeCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR1NVQk9JRCh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR1ZBUih4KSAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHVkFSKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHT0lEUkFOR0UoeCkgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHT0lEUkFOR0UoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dIRVgoeCkgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR0hFWCh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR0hFWFRMSSh4KSAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHSEVYVExJKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHSU5ERU5UKCkgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdJTkRFTlQoKTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR0lOREVOVEFERCh4KSAgZG8ge2lmIChfREJHX0lGXykge19fREJHSU5ERU5UQUREKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHSU5ERU5UTU9SRSgpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdJTkRFTlRNT1JFKCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdJTkRFTlRMRVNTKCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0lOREVOVExFU1MoKTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR1BSSU5USU5ERU5UKHRva2VuKSBcCi0JZG8ge2lmIChfREJHX0lGXykge19fREJHUFJJTlRJTkRFTlQodG9rZW4pO30gfXdoaWxlKDApCi0KLQotI2RlZmluZSBERUJVR0RVTVBIRUFERVIodG9rZW4seCkgXAotCWRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0RVTVBIRUFERVIodG9rZW4seCk7fSB9d2hpbGUoMCkKLQotI2RlZmluZSBERUJVR0RVTVBTRUNUSU9OKHRva2VuLHgpIFwKLQlkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdEVU1QU0VDVElPTih0b2tlbix4KTt9IH13aGlsZSgwKQotCi0jZGVmaW5lIERFQlVHRFVNUFNFVFVQKHRva2VuLGJ1ZixsZW4pIFwKLQlkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdEVU1QU0VUVVAodG9rZW4sYnVmLGxlbik7fSB9d2hpbGUoMCkKLQotI2RlZmluZSBERUJVR01TR19OQyh4KSAgZG8geyBfX0RCR01TR19OQyh4KTsgfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHVF9OQyh4KSBkbyB7IF9fREJHTVNHVF9OQyh4KTsgfXdoaWxlKDApCi0KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9OT19ERUJVR0dJTkcgOj0gZW5hYmxlIHN0cmVhbWxpbmluZyBvZiB0aGUgY29kZSAqLwotCi0jZGVmaW5lIERFQlVHTVNHKHgpCi0jZGVmaW5lIERFQlVHTVNHVCh4KQotI2RlZmluZSBERUJVR1RSQUNFCi0jZGVmaW5lIERFQlVHTVNHTCh4KQotI2RlZmluZSBERUJVR01TR1RMKHgpCi0jZGVmaW5lIERFQlVHTVNHT0lEKHgpCi0jZGVmaW5lIERFQlVHTVNHU1VCT0lEKHgpCi0jZGVmaW5lIERFQlVHTVNHVkFSKHgpCi0jZGVmaW5lIERFQlVHTVNHT0lEUkFOR0UoeCkKLSNkZWZpbmUgREVCVUdNU0dIRVgoeCkKLSNkZWZpbmUgREVCVUdJRih4KSAgICAgICAgaWYoMCkKLSNkZWZpbmUgREVCVUdEVU1QKHQsYixsLHApCi0jZGVmaW5lIERFQlVHSU5ERU5UKCkKLSNkZWZpbmUgREVCVUdJTkRFTlRNT1JFKCkKLSNkZWZpbmUgREVCVUdJTkRFTlRMRVNTKCkKLSNkZWZpbmUgREVCVUdJTkRFTlRBREQoeCkKLSNkZWZpbmUgREVCVUdNU0dIRVhUTEkoeCkKLSNkZWZpbmUgREVCVUdQUklOVElOREVOVCh0b2tlbikKLSNkZWZpbmUgREVCVUdEVU1QSEVBREVSKHRva2VuLHgpCi0jZGVmaW5lIERFQlVHRFVNUFNFQ1RJT04odG9rZW4seCkKLSNkZWZpbmUgREVCVUdEVU1QU0VUVVAodG9rZW4sIGJ1ZiwgbGVuKQotCi0jZGVmaW5lIERFQlVHTVNHX05DKHgpCi0jZGVmaW5lIERFQlVHTVNHVF9OQyh4KQotCisjaWZkZWYgX19jcGx1c3BsdXMKK30KICNlbmRpZgogCisgICAgLyogUHVibGljIG1hY3JvcyBtb3ZlZCB0byB0b3AtbGV2ZWwgQVBJIGhlYWRlciBmaWxlICovCisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9kZWJ1Z19pbml0KHZvaWQpOworCiAjZGVmaW5lIE1BWF9ERUJVR19UT0tFTlMgMjU2CiAjZGVmaW5lIE1BWF9ERUJVR19UT0tFTl9MRU4gMTI4CiAjZGVmaW5lIERFQlVHX1RPS0VOX0RFTElNSVRFUiAiLCIKICNkZWZpbmUgREVCVUdfQUxXQVlTX1RPS0VOICJhbGwiCiAKLSAgICAvKgotICAgICAqIHNldHVwIHJvdXRpbmVzOgotICAgICAqIAotICAgICAqIGRlYnVnX3JlZ2lzdGVyX3Rva2VucyhjaGFyICopOiAgICAgcmVnaXN0ZXJzIGEgbGlzdCBvZiB0b2tlbnMgdG8KLSAgICAgKiBwcmludCBkZWJ1Z2dpbmcgb3V0cHV0IGZvci4KLSAgICAgKiAKLSAgICAgKiBkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKGNoYXIgKik6IHJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBFUlJfR0VORVJSCi0gICAgICogaWYgYSB0b2tlbiBoYXMgYmVlbiByZWdpc3RlcmVkIG9yCi0gICAgICogbm90IChhbmQgZGVidWdnaW5nIG91dHB1dCBpcyAib24iKS4KLSAgICAgKiBzbm1wX2RlYnVnX2luaXQodm9pZCk6ICAgICAgICAgICAgIHJlZ2lzdGVycyAuY29uZiBoYW5kbGVycy4KLSAgICAgKi8KLSAgICB2b2lkICAgICAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKGNoYXIgKnRva2Vucyk7Ci0gICAgaW50ICAgICAgICAgICAgIGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoY29uc3QgY2hhciAqdG9rZW4pOwotICAgIHZvaWQgICAgICAgICAgICBzbm1wX2RlYnVnX2luaXQodm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZyhpbnQpOwotICAgIGludCAgICAgICAgICAgICBzbm1wX2dldF9kb19kZWJ1Z2dpbmcodm9pZCk7CisjaWZuZGVmIE5FVFNOTVBfTk9fREVCVUdHSU5HCiAKIC8qCiAgKiBpbnRlcm5hbDoKQEAgLTI3Miw3ICsyMzQsOSBAQAogCiBORVRTTk1QX0lNUE9SVCBpbnQgICAgICAgICAgICAgICAgIGRlYnVnX251bV90b2tlbnM7CiBORVRTTk1QX0lNUE9SVCBuZXRzbm1wX3Rva2VuX2Rlc2NyIGRiZ190b2tlbnNbTUFYX0RFQlVHX1RPS0VOU107Ci0gICAgCisKKyNlbmRpZiAvKiBORVRTTk1QX05PX0RFQlVHR0lORyAqLworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCmluZGV4IDQxNjdkMjguLjIzNzg5MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKQEAgLTYzLDggKzYzLDEwIEBACiAgICAgICogZmluZCBhIGxpc3QsIGFuZCB0aGVuIG9wZXJhdGUgb24gdGhhdCBsaXN0CiAgICAgICogICAoIGRpcmVjdCBtZXRob2RzIGZ1cnRoZXIgYmVsb3cgaWYgeW91IGFscmVhZHkgaGF2ZSB0aGUgbGlzdCBwb2ludGVyKQogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzZV9maW5kX3ZhbHVlX2luX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsKTsKICAgICBpbnQgICAgICAgICAgICAgc2VfZmluZF9mcmVlX3ZhbHVlX2luX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lKTsKQEAgLTczLDYgKzc1LDcgQEAKICAgICAgKiBvd25lcnNoaXAgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGxhYmVsIHRvIHRoZSBsaXN0OgogICAgICAqIGNsZWFyX3NubXBfZW51bSgpIGRlYWxsb2NhdGVzIHRoYXQgbWVtb3J5LgogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lLCBjaGFyICpsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKTsKIApAQCAtOTQsNiArOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKnR5cGUpOwogICAgIHZvaWQgICAgICAgICAgICBzZV9zdG9yZV9saXN0KHVuc2lnbmVkIGludCBtYWpvciwgdW5zaWduZWQgaW50IG1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUpOworICAgIHZvaWQgICAgICAgICAgICBzZV9jbGVhcl9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSk7CiAgICAgdm9pZCAgICAgICAgICAgIHNlX3N0b3JlX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lLCBjb25zdCBjaGFyICp0eXBlKTsKICAgICBpbnQgICAgICAgICAgICAgc2Vfc3RvcmVfc2xpc3RfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZ3MsIHZvaWQgKmNsaWVudGFyZ3MpOwpAQCAtMTAyLDYgKzEwNiw3IEBACiAgICAgICogRGVhbGxvY2F0ZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBpbml0X3NubXBfZW51bSgpOiByZW1vdmUgYWxsIGtleS92YWx1ZQogICAgICAqIHBhaXJzIHN0b3JlZCBieSBzZV9hZGRfKigpIGNhbGxzLgogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGNsZWFyX3NubXBfZW51bSh2b2lkKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKaW5kZXggMGQzMmM0NC4uZjc5YWViZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaApAQCAtNzIsMTAgKzcyLDE1IEBACiAgICAgLyoKICAgICAgKiBBY2Nlc3MgY29udHJvbCBzdGF0ZW1lbnRzIGZvciB0aGUgYWdlbnQgCiAgICAgICovCi0jZGVmaW5lIFJPTkxZCTB4MSAgICAgICAgICAgICAvKiByZWFkIGFjY2VzcyBvbmx5ICovCi0jZGVmaW5lIFJXUklURQkweDIgICAgICAgICAgICAgLyogcmVhZCBhbmQgd3JpdGUgYWNjZXNzIChtdXN0IGhhdmUgMHgyIGJpdCBzZXQpICovCisjZGVmaW5lIE5FVFNOTVBfT0xEQVBJX1JPTkxZCTB4MSAgICAgLyogcmVhZCBhY2Nlc3Mgb25seSAqLworI2RlZmluZSBORVRTTk1QX09MREFQSV9SV1JJVEUJMHgyICAgICAvKiByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgKG11c3QgaGF2ZSAweDIgYml0IHNldCkgKi8KKyNkZWZpbmUgTkVUU05NUF9PTERBUElfTk9BQ0NFU1MgMHgwMDAwICAvKiBubyBhY2Nlc3MgZm9yIGFueWJvZHkgKi8KIAotI2RlZmluZSBOT0FDQ0VTUyAweDAwMDAgICAgICAgICAvKiBubyBhY2Nlc3MgZm9yIGFueWJvZHkgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyNkZWZpbmUgUk9OTFkgICAgICAgICAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZCisjZGVmaW5lIFJXUklURSAgICAgICAgICBORVRTTk1QX09MREFQSV9SV1JJVEUKKyNkZWZpbmUgTk9BQ0NFU1MgICAgICAgIE5FVFNOTVBfT0xEQVBJX05PQUNDRVNTCisjZW5kaWYKIAogICAgIC8qCiAgICAgICogZGVmaW5lZCB0eXBlcyAoZnJvbSB0aGUgU01JLCBSRkMgMTE1NykgCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKaW5kZXggMGRkZTdhZS4uMWQ3OTIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaApAQCAtMSwxOCArMSwxNyBAQAogI2lmbmRlZiBTTk1QX0xPR0dJTkdfSAogI2RlZmluZSBTTk1QX0xPR0dJTkdfSAogCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAgICAgICAgICAiQyIgewotI2VuZGlmCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CiAKLSNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfU1lTTE9HX0gKICNpbmNsdWRlIDxzeXNsb2cuaD4KICNlbmRpZgotI2lmIEhBVkVfU1REQVJHX0gKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDx2YXJhcmdzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAogI2lmbmRlZiBMT0dfRVJSCkBAIC0zNSw1MSArMzQsMzYgQEAKICNkZWZpbmUgREVGQVVMVF9MT0dfSUQgIm5ldC1zbm1wIgogI2VuZGlmCiAKKyNkZWZpbmUgTkVUU05NUF9MT0dPTkNFKHgpIGRvIHsgXAorICAgICAgICBzdGF0aWMgY2hhciBsb2dnZWQgPSAwOyBcCisgICAgICAgIGlmICghbG9nZ2VkKSB7ICAgICAgICAgIFwKKyAgICAgICAgICAgIGxvZ2dlZCA9IDE7ICAgICAgICAgXAorICAgICAgICAgICAgc25tcF9sb2cgeCA7ICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCisKICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wX2xvZ2dpbmcodm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NubXBfbG9nZ2luZyh2b2lkKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9nZXRfZG9fbG9nZ2luZyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2Rpc2FibGVfc3lzbG9nKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2Rpc2FibGVfZmlsZWxvZyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2Rpc2FibGVfc3RkZXJybG9nKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2Rpc2FibGVfY2FsbGxvZyh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgc25tcF9kaXNhYmxlX2xvZyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2VuYWJsZV9zeXNsb2codm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9lbmFibGVfc3lzbG9nX2lkZW50KGNvbnN0IGNoYXIgKmlkZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICAgZmFjaWxpdHkpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZW5hYmxlX2ZpbGVsb2coY29uc3QgY2hhciAqbG9nZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRvbnRfemVyb19sb2cpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZW5hYmxlX3N0ZGVycmxvZyh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcF9lbmFibGVfY2FsbGxvZyh2b2lkKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfc3RkZXJybG9nX3N0YXR1cyh2b2lkKTsKIAotI2lmIEhBVkVfU1REQVJHX0gKLSMgaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDgpCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwotIyBlbHNlCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi0gICAgICAgICAgICAgICAgICAgIAlfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKLSMgZW5kaWYKLSNlbHNlCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfbG9nKHZhX2FsaXN0KTsKLSNlbmRpZgotICAgIGludCAgICAgICAgICAgICBzbm1wX3Zsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFwKTsKLSAgICAvKgotICAgICAqIDAgLSBzdWNjZXNzZnVsIG1lc3NhZ2UgZm9ybWF0dGluZyAKLSAgICAgKi8KLSAgICAvKgotICAgICAqIC0xIC0gQ291bGQgbm90IGZvcm1hdCBsb2ctc3RyaW5nIAotICAgICAqLwotICAgIC8qCi0gICAgICogLTIgLSBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBsb2ctbWVzc2FnZSAKLSAgICAgKi8KLSAgICAvKgotICAgICAqIC0zIC0gTG9nLW1lc3NhZ2UgdG9vIGxvbmchIAotICAgICAqLwotCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcihjb25zdCBjaGFyICpzKTsKLQogCiAjZGVmaW5lIE5FVFNOTVBfTE9HSEFORExFUl9TVERPVVQJMQogI2RlZmluZSBORVRTTk1QX0xPR0hBTkRMRVJfU1RERVJSCTIKQEAgLTg4LDggKzcyLDEzIEBACiAjZGVmaW5lIE5FVFNOTVBfTE9HSEFORExFUl9DQUxMQkFDSwk1CiAjZGVmaW5lIE5FVFNOTVBfTE9HSEFORExFUl9OT05FCQk2CiAKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcoRklMRSAqc3RyZWFtKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBzbm1wX2xvZ19vcHRpb25zKGNoYXIgKm9wdGFyZywgaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgc25tcF9sb2dfb3B0aW9uc191c2FnZShjb25zdCBjaGFyICpsZWFkLCBGSUxFICpvdXRmKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgKnNubXBfbG9nX3N5c2xvZ25hbWUoY29uc3QgY2hhciAqc3lzbG9nbmFtZSk7CiAgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9sb2dfaGFuZGxlcl9zIG5ldHNubXBfbG9nX2hhbmRsZXI7IAogICAgIHR5cGVkZWYgaW50IChOZXRzbm1wTG9nSGFuZGxlcikobmV0c25tcF9sb2dfaGFuZGxlciosIGludCwgY29uc3QgY2hhciAqKTsKQEAgLTExNSwxMyArMTA0LDIxIEBACiAJbmV0c25tcF9sb2dfaGFuZGxlcgkqbmV4dCwgKnByZXY7CiAgICAgfTsKIAorTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfbG9nX2hhbmRsZXIgKmdldF9sb2doX2hlYWQoIHZvaWQgKTsKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX2xvZ19oYW5kbGVyICpuZXRzbm1wX3JlZ2lzdGVyX2xvZ2hhbmRsZXIoIGludCB0eXBlLCBpbnQgcHJpICk7CiBuZXRzbm1wX2xvZ19oYW5kbGVyICpuZXRzbm1wX2ZpbmRfbG9naGFuZGxlciggY29uc3QgY2hhciAqdG9rZW4gKTsKIGludCBuZXRzbm1wX2FkZF9sb2doYW5kbGVyKCAgICBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doICk7CitORVRTTk1QX0lNUE9SVAogaW50IG5ldHNubXBfcmVtb3ZlX2xvZ2hhbmRsZXIoIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2ggKTsKIGludCBuZXRzbm1wX2VuYWJsZV9sb2doYW5kbGVyKCBjb25zdCBjaGFyICp0b2tlbiApOwogaW50IG5ldHNubXBfZGlzYWJsZV9sb2doYW5kbGVyKCBjb25zdCBjaGFyICp0b2tlbiApOworTkVUU05NUF9JTVBPUlQKK3ZvaWQgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKCBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doICk7CitORVRTTk1QX0lNUE9SVAordm9pZCBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKCBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doICk7CitORVRTTk1QX0lNUE9SVAogdm9pZCBuZXRzbm1wX2xvZ2dpbmdfcmVzdGFydCh2b2lkKTsKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTE3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIEhlYWRlciBmaWxlIGZvciB0aGUgT3BlblNTTCBXcmFwcGVyCisgKi8KKworI2lmbmRlZiBTTk1QX09QRU5TU0xfSAorI2RlZmluZSBTTk1QX09QRU5TU0xfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICB2b2lkIG5ldHNubXBfaW5pdF9vcGVuc3NsKHZvaWQpOworCisgICAgLyoKKyAgICAgKiBjZXJ0IGZpZWxkcworICAgICAqLworICAgIHZvaWQgbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9uYW1lcyhYNTA5ICpvY2VydCk7CisgICAgdm9pZCBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX2V4dGVuc2lvbnMoWDUwOSAqb2NlcnQpOworCisgICAgY2hhciAqbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2NvbW1vbk5hbWUoWDUwOSAqLCBjaGFyICoqYnVmLCBpbnQgKmxlbik7CisgICAgY2hhciAqbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3ROYW1lKFg1MDkgKiwgY2hhciAqKmJ1ZiwgaW50ICpsZW4pOworICAgIGNoYXIgKm5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChYNTA5ICpvY2VydCwgaW50IGFsZyk7CisgICAgaW50IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9oYXNoX3R5cGUoWDUwOSAqb2NlcnQpOworCisgICAgaW50IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2lzc3VlZF9ieShYNTA5ICppc3N1ZXIsIFg1MDkgKmNlcnQpOworCisgICAgY2hhciAqbmV0c25tcF9vcGVuc3NsX2V4dHJhY3Rfc2VjbmFtZShuZXRzbm1wX2NlcnRfbWFwICpjZXJ0X21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9tYXAgKnBlZXJfY2VydCk7CisKKyAgICBjaGFyICpuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdEFsdE5hbWUoWDUwOSAqLCBjaGFyICoqYnVmLCBpbnQgKmxlbik7CisKKyAgICAvKgorICAgICAqIHNzbCBjZXJ0IGNoYWlucworICAgICAqLworICAgIG5ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX29wZW5zc2xfZ2V0X2NlcnRfY2hhaW4oU1NMICpzc2wpOworCisgICAgLyoKKyAgICAgKiBtaXNjCisgICAgICovCisgICAgdm9pZCBuZXRzbm1wX29wZW5zc2xfZXJyX2xvZyhjb25zdCBjaGFyICpwcmVmaXgpOworICAgIHZvaWQgbmV0c25tcF9vcGVuc3NsX251bGxfY2hlY2tzKFNTTCAqc3NsLCBpbnQgKm51bGxBdXRoLCBpbnQgKm51bGxDaXBoZXIpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QX09QRU5TU0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCmluZGV4IGMwZmU3MWUuLjFhZDYzZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKQEAgLTEsMTYgKzEsODkgQEAKICNpZm5kZWYgU05NUF9QQVJTRV9BUkdTX0gKICNkZWZpbmUgU05NUF9QQVJTRV9BUkdTX0gKKworLyoqCisgKiBAZmlsZSBzbm1wX3BhcnNlX2FyZ3MuaAorICoKKyAqIFN1cHBvcnQgZm9yIGluaXRpYWxpemluZyB2YXJpYWJsZXMgb2YgdHlwZSBuZXRzbm1wX3Nlc3Npb24gZnJvbSBjb21tYW5kCisgKiBsaW5lIGFyZ3VtZW50cworICovCisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorLyoqIERvbid0IGVuYWJsZSBhbnkgbG9nZ2luZyBldmVuIGlmIHRoZXJlIGlzIG5vIC1MIGFyZ3VtZW50ICovCisjZGVmaW5lIE5FVFNOTVBfUEFSU0VfQVJHU19OT0xPR0dJTkcgICAgMHgwMDAxCisvKiogRG9uJ3QgemVybyBvdXQgc2Vuc2l0aXZlIGFyZ3VtZW50cyBhcyB0aGV5IGFyZSBub3Qgb24gdGhlIGNvbW1hbmQgbGluZQorICogIGFueXdheSwgdHlwaWNhbGx5IHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJuYWwKKyAqICBjb25maWctbGluZSBoYW5kbGVyCisgKi8KKyNkZWZpbmUgTkVUU05NUF9QQVJTRV9BUkdTX05PWkVSTyAgICAgICAweDAwMDIKKworLyoqCisgKiBQYXJzaW5nIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgc3VjY2VlZGVkIGFuZCBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZAorICogdG8gY29udGludWUgd2l0aCBub3JtYWwgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTICAgICAgIDAKKy8qKgorICAqIFBhcnNpbmcgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBzdWNjZWVkZWQsIGJ1dCB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQKKyAgKiB0byBleGl0IHdpdGggemVybyBleGl0IGNvZGUuIEZvciBleGFtcGxlLCAnLVYnIHBhcmFtZXRlciBoYXMgYmVlbiBmb3VuZC4KKyAgKi8KKyNkZWZpbmUgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVCAgLTIKKy8qKgorICogUGFyc2luZyBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZhaWxlZCBhbmQgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gc2hvdworICogdXNhZ2UgKGkuZS4gbGlzdCBvZiBwYXJhbWV0ZXJzKSBhbmQgZXhpdCB3aXRoIG5vemVybyBleGl0IGNvZGUuIAorICovCisjZGVmaW5lIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSAgIC0xCisvKioKKyAqIFBhcnNpbmcgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmYWlsZWQgYW5kIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvIGV4aXQKKyAqIHdpdGggbm96ZXJvIGV4aXQgY29kZS4gIG5ldHNubXBfcGFyc2VfYXJncygpIGhhcyBhbHJlYWR5IHByaW50ZWQgd2hhdCB3ZW50CisgKiB3cm9uZy4KKyAqLworI2RlZmluZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1IgICAgICAgICAtMworICAgIAorLyoqCisgKiAgUGFyc2UgYW4gYXJndW1lbnQgbGlzdCBhbmQgaW5pdGlhbGl6ZSBcbGluayBuZXRzbm1wX3Nlc3Npb24KKyAqICBzZXNzaW9uXGVuZGxpbmsKKyAqICBmcm9tIGl0LgorICogIEBwYXJhbSBhcmdjIE51bWJlciBvZiBlbGVtZW50cyBpbiBhcmd2CisgKiAgQHBhcmFtIGFyZ3Ygc3RyaW5nIGFycmF5IG9mIGF0IGxlYXN0IGFyZ2MgZWxlbWVudHMKKyAqICBAcGFyYW0gc2Vzc2lvbgorICogIEBwYXJhbSBsb2NhbE9wdHMgQWRkaXRpb25hbCBvcHRpb24gY2hhcmFjdGVycyB0byBhY2NlcHQKKyAqICBAcGFyYW0gcHJvYyBmdW5jdGlvbiBwb2ludGVyIHVzZWQgdG8gcHJvY2VzcyBhbnkgdW5oYW5kbGVkIGFyZ3VtZW50cworICogIEBwYXJhbSBmbGFncyBmbGFncyBkaXJlY3RpbmcgaG93IHRvIGhhbmRsZSB0aGUgc3RyaW5nCisgKgorICogIEByZXR2YWwgMCAoPSAjTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1MpIG9uIHN1Y2Nlc3MKKyAqICBAcmV0dmFsICNORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkCisgKiAgdG8gZXhpdCB3aXRoIHplcm8gZXhpdCBjb2RlIChlLmcuICctVicgb3B0aW9uIHdhcyBmb3VuZCkKKyAqICBAcmV0dmFsICNORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0Ugd2hlbiB0aGUgZnVuY3Rpb24gZmFpbGVkIHRvIHBhcnNlCisgKiAgdGhlIGNvbW1hbmQgbGluZSBhbmQgdGhlIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvIHNob3cgaXQncyB1c2FnZQorICogIEByZXR2YWwgI05FVFNOTVBfUEFSU0VfQVJHU19FUlJPUiB3aGVuIHRoZSBmdW5jdGlvbiBmYWlsZWQgdG8gcGFyc2UKKyAqICB0aGUgY29tbWFuZCBsaW5lIGFuZCBpdCBoYXMgYWxyZWFkeSBwcmludGVkIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgdGhlIHVzZXIKKyAqICBhbmQgbm8gb3RoZXIgb3V0cHV0IGlzIG5lZWRlZAorICoKKyAqICBUaGUgcHJvYyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhcmdjLCBhcmd2IGFuZCB0aGUgY3VycmVudGx5IHByb2Nlc3NlZAorICogIG9wdGlvbiBhcyBhcmd1bWVudHMKKyAqLworTkVUU05NUF9JTVBPUlQgaW50CituZXRzbm1wX3BhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxPcHRzLCB2b2lkICgqcHJvYykoaW50LCBjaGFyICpjb25zdCAqLCBpbnQpLAorICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CisKKy8qKgorICogIENhbGxzIFxsaW5rIG5ldHNubXBfcGFyc2VfYXJncygpCisgKiAgbmV0c25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsIHNlc3Npb24sIGxvY2FsT3B0cywgcHJvYywgMClcZW5kbGluaworICovCitORVRTTk1QX0lNUE9SVAogaW50CiBzbm1wX3BhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24sCiAJCWNvbnN0IGNoYXIgKmxvY2FsT3B0cywgdm9pZCAoKnByb2MpKGludCwgY2hhciAqY29uc3QgKiwgaW50KSk7CiAKK05FVFNOTVBfSU1QT1JUCiB2b2lkCiBzbm1wX3BhcnNlX2FyZ3NfZGVzY3JpcHRpb25zKEZJTEUgKik7CiAKK05FVFNOTVBfSU1QT1JUCiB2b2lkCiBzbm1wX3BhcnNlX2FyZ3NfdXNhZ2UoRklMRSAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAppbmRleCBhZWViMjRhLi5hYWJiN2VkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaApAQCAtMTAsOCArMTAsOSBAQAogLyogTG9jYWxseSBkZWZpbmVkIHNlY3VyaXR5IG1vZGVscy4KICAqIChOZXQtU05NUCBlbnRlcnByaXNlIG51bWJlciA9IDgwNzIpKjI1NiArIGxvY2FsX251bQogICovCi0jZGVmaW5lIE5FVFNOTVBfS1NNX1NFQ1VSSVRZX01PREVMICAgICAyMDY2NDMyCi0jZGVmaW5lIE5FVFNOTVBfTE9DQUxTTV9TRUNVUklUWV9NT0RFTCAyMDY2NDMzCisjZGVmaW5lIE5FVFNOTVBfU0VDX01PREVMX0tTTSAgICAgMjA2NjQzMgorI2RlZmluZSBORVRTTk1QX0tTTV9TRUNVUklUWV9NT0RFTCAgICAgTkVUU05NUF9TRUNfTU9ERUxfS1NNCisjZGVmaW5lIE5FVFNOTVBfVFNNX1NFQ1VSSVRZX01PREVMICAgICBTTk1QX1NFQ19NT0RFTF9UU00KIAogc3RydWN0IHNubXBfc2VjbW9kX2RlZjsKIApAQCAtOTAsNyArOTEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpvcmlncGR1KTsKK3R5cGVkZWYgaW50ICAgICAoU2VjbW9kRGlzY292ZXJ5TWV0aG9kKSAodm9pZCAqc2xwLCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pOwordHlwZWRlZiBpbnQgICAgIChTZWNtb2RQb3N0RGlzY292ZXJ5KSAodm9pZCAqc2xwLCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pOwogCit0eXBlZGVmIGludCAgICAgKFNlY21vZFNlc3Npb25TZXR1cCkgKG5ldHNubXBfc2Vzc2lvbiAqaW5fc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICpvdXRfc2Vzc2lvbik7CiAvKgogICogZGVmaW5pdGlvbiBvZiBhIHNlY3VyaXR5IG1vZHVsZQogICovCkBAIC0xMDUsNiArMTEwLDcgQEAKICAgICAgKi8KICAgICBTZWNtb2RTZXNzaW9uQ2FsbGJhY2sgKnNlc3Npb25fb3BlbjsgICAgICAgIC8qIGNhbGxlZCBpbiBzbm1wX3Nlc3Nfb3BlbigpICAqLwogICAgIFNlY21vZFNlc3Npb25DYWxsYmFjayAqc2Vzc2lvbl9jbG9zZTsgICAgICAgLyogY2FsbGVkIGluIHNubXBfc2Vzc19jbG9zZSgpICovCisgICAgU2VjbW9kU2Vzc2lvblNldHVwICAgICpzZXNzaW9uX3NldHVwOwogCiAgICAgLyoKICAgICAgKiBwZHUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzIApAQCAtMTI1LDYgKzEzMSwxMiBAQAogICAgICogZXJyb3IgYW5kIHJlcG9ydCBoYW5kbGluZwogICAgICovCiAgICBTZWNtb2RIYW5kbGVSZXBvcnQgKmhhbmRsZV9yZXBvcnQ7CisKKyAgIC8qCisgICAgKiBkZWZhdWx0IGVuZ2luZUlEIGRpc2NvdmVyeSBtZWNoYW5pc20KKyAgICAqLworICAgU2VjbW9kRGlzY292ZXJ5TWV0aG9kICpwcm9iZV9lbmdpbmVpZDsKKyAgIFNlY21vZFBvc3REaXNjb3ZlcnkgICAqcG9zdF9wcm9iZV9lbmdpbmVpZDsKIH07CiAKIApAQCAtMTQ2LDE2ICsxNTgsMjAgQEAKIC8qCiAgKiBmaW5kIGEgc2VjdXJpdHkgc2VydmljZSBkZWZpbml0aW9uIAogICovCitORVRTTk1QX0lNUE9SVAogc3RydWN0IHNubXBfc2VjbW9kX2RlZiAqZmluZF9zZWNfbW9kKGludCk7CiAvKgogICogcmVnaXN0ZXIgYSBzZWN1cml0eSBzZXJ2aWNlIAogICovCiBpbnQgICAgICAgICAgICAgdW5yZWdpc3Rlcl9zZWNfbW9kKGludCk7ICAgICAgICAvKiByZWdpc3RlciBhIHNlY3VyaXR5IHNlcnZpY2UgKi8KIHZvaWQgICAgICAgICAgICBpbml0X3NlY21vZCh2b2lkKTsKK05FVFNOTVBfSU1QT1JUCit2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2VjbW9kKHZvaWQpOwogCiAvKgogICogY2xlYXJzIHRoZSBzZWNfbW9kIGxpc3QKICAqLworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBjbGVhcl9zZWNfbW9kKHZvaWQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAppbmRleCA1YTQ1NjVkLi43MTFmNjc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCkBAIC03LDcgKzcsNyBAQAogCiAvKiBEZWZhdWx0IHBvcnQgaGFuZGxpbmcgKi8KIAotZXh0ZXJuIGludAorTkVUU05NUF9JTVBPUlQgaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfZG9tYWluKGNvbnN0IGNoYXIqIGFwcGxpY2F0aW9uLCBjb25zdCBjaGFyKiBkb21haW4pOwogCiBleHRlcm4gY29uc3QgY2hhcioKQEAgLTE5LDcgKzE5LDcgQEAKIGV4dGVybiB2b2lkCiBuZXRzbm1wX2NsZWFyX2RlZmF1bHRfZG9tYWluKHZvaWQpOwogCi1leHRlcm4gaW50CitORVRTTk1QX0lNUE9SVCBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoY29uc3QgY2hhciogYXBwbGljYXRpb24sIGNvbnN0IGNoYXIqIGRvbWFpbiwKIAkJCQljb25zdCBjaGFyKiB0YXJnZXQpOwogCkBAIC0yOSw3ICsyOSw3IEBACiBleHRlcm4gdm9pZAogbmV0c25tcF9jbGVhcl9kZWZhdWx0X3RhcmdldCh2b2lkKTsKIAotZXh0ZXJuIHZvaWQKK05FVFNOTVBfSU1QT1JUIHZvaWQKIG5ldHNubXBfcmVnaXN0ZXJfc2VydmljZV9oYW5kbGVycyh2b2lkKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCmluZGV4IGNlNzQyZDUuLjQxNjI4OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCkBAIC0yLDYgKzIsMzEgQEAKICNkZWZpbmUgX1NOTVBfVFJBTlNQT1JUX0gKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpZmRlZiBzb2xhcmlzMgorI2RlZmluZSBfWFBHNF8yCisjZW5kaWYKKworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKKyNkZWZpbmUgX0xJTlVYX1NPVVJDRV9DT01QQVQKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjaWZkZWYgc29sYXJpczIKKyMgaWZuZGVmIENNU0dfU1BBQ0UKKyMgIGRlZmluZSBDTVNHX1NQQUNFKGwpIFwKKyAgICAgICAgICAgICgodW5zaWduZWQgaW50KV9DTVNHX0hEUl9BTElHTihzaXplb2YgKHN0cnVjdCBjbXNnaGRyKSArIChsKSkpCisjICBkZWZpbmUgQ01TR19MRU4obCkgICAoX0NNU0dfSERSX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgKGwpKQorIyBlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogSEFWRV9TWVNfU09DS0VUX0ggKi8KKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0xNiw5ICs0MSwxNCBAQAogCiAvKiAgU29tZSB0cmFuc3BvcnQtdHlwZSBmbGFncy4gICovCiAKLSNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNCTB4MDEKLSNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOCTB4MDIKLSNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfVFVOTkVMRUQJMHgwNAorI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU0JIDB4MDEKKyNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOCSAweDAyCisjZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVECSAweDA0CisjZGVmaW5lICAgICAgICAgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UTVNUQVRFICAgMHgwOCAgLyogaW5kaWNhdGVzIG9wYXF1ZSBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFNNIHRtU3RhdGVSZWZlcmVuY2UgKi8KKyNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfRU1QVFlfUEtUIDB4MTAKKyNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfT1BFTkVECSAweDIwICAvKiBmX29wZW4gY2FsbGVkICovCisjZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0hPU1ROQU1FCSAweDgwICAvKiBmb3IgZm10YWRkciBob29rICovCiAKIC8qICBUaGUgc3RhbmRhcmQgU05NUCBkb21haW5zLiAgKi8KIApAQCAtMzMsOCArNjMsNTMgQEAKIE5FVFNOTVBfSU1QT1JUIHNpemVfdCAgIG5ldHNubXBERFBEb21haW5fbGVuOwogTkVUU05NUF9JTVBPUlQgc2l6ZV90ICAgbmV0c25tcElQWERvbWFpbl9sZW47CiAKKy8qIFN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdHJhbnNwb3J0IHNlY3VyaXR5IG1vZGVsIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKy8qIGlzbXMtc2Vjc2hlbGwtMTEgc2VjdGlvbiA0LjEgKi8KKworLyogY29udGVudHMgZG9jdW1lbnRlZCBpbiBkcmFmdC1pZXRmLWlzbXMtdHJhbnNwb3J0LXNlY3VyaXR5LW1vZGVsCisgICBTZWN0aW9uIDMuMiAqLworLyogbm90ZTogVkFDTSBvbmx5IGFsbG93cyA8PSAzMiBzbyB0aGlzIGlzIG92ZXJraWxsIHRpbGwgYW5vdGhlciBBQ00gY29tZXMgKi8KKyNkZWZpbmUgTkVUU05NUF9UTV9NQVhfU0VDTkFNRSAyNTYKKwordHlwZWRlZiB1bmlvbiBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2VfdSB7CisgICAgc3RydWN0IHNvY2thZGRyICAgICBzYTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gIHNpbjsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCit9IG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZTsKKwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9hZGRyX3BhaXJfcyB7CisgICBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgcmVtb3RlX2FkZHI7CisgICBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgbG9jYWxfYWRkcjsKK30gbmV0c25tcF9hZGRyX3BhaXI7CisKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXJfcyB7CisgICBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgcmVtb3RlX2FkZHI7CisgICBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgbG9jYWxfYWRkcjsKKyAgICBpbnQgaWZfaW5kZXg7Cit9IG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXI7CisKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZV9zIHsKKyAgIG9pZCAgICB0cmFuc3BvcnREb21haW5bTUFYX09JRF9MRU5dOworICAgc2l6ZV90IHRyYW5zcG9ydERvbWFpbkxlbjsKKyAgIGNoYXIgICBzZWN1cml0eU5hbWVbTkVUU05NUF9UTV9NQVhfU0VDTkFNRV07CisgICBzaXplX3Qgc2VjdXJpdHlOYW1lTGVuOworICAgaW50ICAgIHJlcXVlc3RlZFNlY3VyaXR5TGV2ZWw7CisgICBpbnQgICAgdHJhbnNwb3J0U2VjdXJpdHlMZXZlbDsKKyAgIGNoYXIgICBzYW1lU2VjdXJpdHk7CisgICBjaGFyICAgc2Vzc2lvbklEWzhdOworICAgCisgICBjaGFyICAgaGF2ZV9hZGRyZXNzZXM7CisgICBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyIGFkZHJlc3NlczsKKworICAgdm9pZCAqb3RoZXJUcmFuc3BvcnRPcGFxdWU7IC8qIFhYWDogTWF5IGhhdmUgbWVtIGxlYWsgaXNzdWVzICovCit9IG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZTsKKwogLyogIFN0cnVjdHVyZSB3aGljaCBkZWZpbmVzIHRoZSB0cmFuc3BvcnQtaW5kZXBlbmRlbnQgQVBJLiAgKi8KIAorc3RydWN0IHNubXBfc2Vzc2lvbjsKKwogdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyB7CiAgICAgLyogIFRoZSB0cmFuc3BvcnQgZG9tYWluIG9iamVjdCBpZGVudGlmaWVyLiAgKi8KIApAQCAtNjgsNiArMTQzLDE0IEBACiAKICAgICBzaXplX3QgICAgICAgICAgbXNnTWF4U2l6ZTsKIAorI2lmZGVmIEZPUl9TVEFOREFSRFNfQ09NUExJQU5DRV9PUl9GVVRVUkVfVVNFCisgICAgLyogVE0gc3RhdGUgcmVmZXJlbmNlIHBlciBJU01TIFdHIHNvbHV0aW9uICovCisgICAgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmOworI2VuZGlmCisKKyAgICAvKiB0dW5uZWxlZCB0cmFuc3BvcnRzICovCisgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiBiYXNlX3RyYW5zcG9ydDsKKwogICAgIC8qICBDYWxsYmFja3MuICBBcmd1bWVudHMgYXJlOgogICAgICAqCQkKICAgICAgKiAgICAgICAgICAgICAgInRoaXMiIHBvaW50ZXIsIGZkLCBidWYsIHNpemUsICpvcGFxdWUsICpvcGFxdWVfbGVuZ3RoICAKQEAgLTc5LDE0ICsxNjIsMzQgQEAKIAkJCQkgaW50LCB2b2lkICoqLCBpbnQgKik7CiAgICAgaW50ICAgICAgICAgICAgICgqZl9jbG9zZSkgIChzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqKTsKIAorICAgIC8qIE9wdGlvbmFsOiBvcGVuaW5nIGNhbiBvY2N1ciBkdXJpbmcgY3JlYXRpb24gaWYgbW9yZSBhcHByb3ByaWF0ZSAqLworICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiAoKmZfb3BlbikgICAoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKik7CisKICAgICAvKiAgVGhpcyBjYWxsYmFjayBpcyBvbmx5IG5lY2Vzc2FyeSBmb3Igc3RyZWFtLW9yaWVudGVkIHRyYW5zcG9ydHMuICAqLwogCiAgICAgaW50ICAgICAgICAgICAgICgqZl9hY2NlcHQpIChzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqKTsKIAogICAgIC8qICBPcHRpb25hbCBjYWxsYmFjayB0byBmb3JtYXQgYSB0cmFuc3BvcnQgYWRkcmVzcy4gICovCiAKLSAgICBjaGFyICAgICAgICAgICAqKCpmX2ZtdGFkZHIpKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosIHZvaWQgKiwKLQkJCQkgaW50KTsKKyAgICBjaGFyICAgICAgICAgICAqKCpmX2ZtdGFkZHIpKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosIHZvaWQgKiwgaW50KTsKKworICAgIC8qICBPcHRpb25hbCBjYWxsYmFjayB0byBzdXBwb3J0IGV4dHJhIGNvbmZpZ3VyYXRpb24gdG9rZW4vdmFsdWUgcGFpcnMgKi8KKyAgICAvKiAgcmV0dXJuIG5vbi16ZXJvIG9uIGVycm9yICovCisgICAgaW50ICAgICAgICAgICAgKCpmX2NvbmZpZykoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CisKKyAgICAvKiAgT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGZpcnN0IHRyYW5zcG9ydCBpcworICAgICAgICBjbG9uZWQgdG8gdGhlIHNlY29uZCAqLworICAgIGludCAgICAgICAgICAgICgqZl9jb3B5KShzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqKTsKKworICAgIC8qICBTZXR1cCBpbml0aWFsIHNlc3Npb24gY29uZmlnIGlmIHNwZWNpYWwgdGhpbmdzIGFyZSBuZWVkZWQgKi8KKyAgIGludCAgICAgICAgICAgICAoKmZfc2V0dXBfc2Vzc2lvbikoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqKTsKKyAgCisgICAgLyogYWxsb2NhdGVkIGhvc3QgbmFtZSBpZGVudGlmaWVyOyB1c2VkIGJ5IGNvbmZpZ3VyYXRpb24gc3lzdGVtCisgICAgICAgdG8gbG9hZCBsb2NhbGhvc3QuY29uZiBmb3IgaG9zdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uICovCisgICAgdV9jaGFyICAgICAgICAgKmlkZW50aWZpZXI7IC8qIHVkcDpsb2NhbGhvc3Q6MTYxIC0+ICJsb2NhbGhvc3QiICovCiB9IG5ldHNubXBfdHJhbnNwb3J0OwogCiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9saXN0X3MgewpAQCAtMTE0LDEzICsyMTcsMjIgQEAKIAogfSBuZXRzbm1wX3Rkb21haW47CiAKK3ZvaWQgaW5pdF9zbm1wX3RyYW5zcG9ydCh2b2lkKTsKIAogLyogIFNvbWUgdXRpbGl0eSBmdW5jdGlvbnMuICAqLwogCitjaGFyICpuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZyhuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbik7CisKK2ludCBuZXRzbm1wX3RyYW5zcG9ydF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKTsKK2ludCBuZXRzbm1wX3RyYW5zcG9ydF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKTsKKwogaW50IG5ldHNubXBfdHJhbnNwb3J0X2FkZF90b19saXN0KG5ldHNubXBfdHJhbnNwb3J0X2xpc3QgKip0cmFuc3BvcnRfbGlzdCwKIAkJCQkgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwogaW50IG5ldHNubXBfdHJhbnNwb3J0X3JlbW92ZV9mcm9tX2xpc3QobmV0c25tcF90cmFuc3BvcnRfbGlzdCAqKnRyYW5zcG9ydF9saXN0LAogCQkJCSAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKK2ludCBuZXRzbm1wX3NvY2thZGRyX3NpemUoc3RydWN0IHNvY2thZGRyICpzYSk7CiAKIAogLyoKQEAgLTEzMyw2ICsyNDUsNyBAQAogCiAvKiAgRnJlZSBhbiBuZXRzbm1wX3RyYW5zcG9ydC4gICovCiAKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZShuZXRzbm1wX3RyYW5zcG9ydCAqdCk7CiAKIApAQCAtMTQ0LDYgKzI1Nyw3IEBACiAgKiAqb3V0X2xlbi4KICAqLwogCitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIG5ldHNubXBfdGRvbWFpbl9zdXBwb3J0KGNvbnN0IG9pZCAqaW5fb2lkLCBzaXplX3QgaW5fbGVuLAogCQkJCQljb25zdCBvaWQgKipvdXRfb2lkLCBzaXplX3QgKm91dF9sZW4pOwogCkBAIC0xNTEsMzUgKzI2NSw1MiBAQAogICAgIAogaW50ICAgICAgICAgICAgIG5ldHNubXBfdGRvbWFpbl91bnJlZ2lzdGVyKG5ldHNubXBfdGRvbWFpbiAqZG9tYWluKTsKIAorTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2NsZWFyX3Rkb21haW5fbGlzdCh2b2lkKTsKIAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfdGRvbWFpbl9pbml0KHZvaWQpOwogCitORVRTTk1QX0lNUE9SVAogbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnQoY29uc3QgY2hhciAqc3RyLAogCQkJCQkgICAgIGludCBsb2NhbCwKIAkJCQkJICAgICBjb25zdCBjaGFyICpkZWZhdWx0X2RvbWFpbik7CiAKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsKGNvbnN0IGNoYXIgKmFwcGxpY2F0aW9uLAogCQkJCQkJICBjb25zdCBjaGFyICpzdHIsCiAJCQkJCQkgIGludCBsb2NhbCwKIAkJCQkJCSAgY29uc3QgY2hhciAqZGVmYXVsdF9kb21haW4sCiAJCQkJCQkgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KTsKIAorTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X29pZChjb25zdCBvaWQgKiBkb20sCiAJCQkJCQkgc2l6ZV90IGRvbV9sZW4sCiAJCQkJCQkgY29uc3QgdV9jaGFyICogbywKIAkJCQkJCSBzaXplX3Qgb19sZW4sCiAJCQkJCQkgaW50IGxvY2FsKTsKIAorTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfdHJhbnNwb3J0KgogbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQoY29uc3QgY2hhciogYXBwbGljYXRpb24sIGNvbnN0IGNoYXIqIHN0cik7CiAKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX3RyYW5zcG9ydCoKIG5ldHNubXBfdHJhbnNwb3J0X29wZW5fc2VydmVyKGNvbnN0IGNoYXIqIGFwcGxpY2F0aW9uLCBjb25zdCBjaGFyKiBzdHIpOwogCiBuZXRzbm1wX3RyYW5zcG9ydCoKIG5ldHNubXBfdHJhbnNwb3J0X29wZW4oY29uc3QgY2hhciogYXBwbGljYXRpb24sIGNvbnN0IGNoYXIqIHN0ciwgaW50IGxvY2FsKTsKIAordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnX3MgeworICAgY2hhciAqa2V5OworICAgY2hhciAqdmFsdWU7Cit9IG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZzsKKyAgICAKK05FVFNOTVBfSU1QT1JUICAgIAoraW50IG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZ19jb21wYXJlKG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyAqbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcgKnJpZ2h0KTsKK05FVFNOTVBfSU1QT1JUCituZXRzbm1wX3RyYW5zcG9ydF9jb25maWcgKm5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnZhbHVlKTsKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaAppbmRleCAwMjg0NzI3Li4xYjU2M2YwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmgKQEAgLTEzLDcgKzEzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2VjbW9kX291dGdvaW5nX3BhcmFtcyAqKTsKICAgICBpbnQgICAgICAgICAgICAga3NtX3Byb2Nlc3NfaW5fbXNnKHN0cnVjdCBzbm1wX3NlY21vZF9pbmNvbWluZ19wYXJhbXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopOwotICAgIHZvaWQgICAgICAgICAgICBpbml0X3VzbSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgaW5pdF9rc20odm9pZCk7CisKKyAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fa3NtKHZvaWQpOwogCiAgICAgLyoKICAgICAgKiBUaGlzIGlzIHRoZSAia2V5IHVzYWdlIiB0aGF0IGlzIHVzZWQgYnkgdGhlIG5ldyBjcnlwdG8gQVBJLiAgSXQncyB1c2VkCkBAIC0yNSw2ICsyNyw4IEBACiAjZGVmaW5lIEtTTV9LRVlfVVNBR0VfRU5DUllQVElPTgkxMDMwCiAjZGVmaW5lIEtTTV9LRVlfVVNBR0VfQ0hFQ0tTVU0JCTEwMzEKIAorI2RlZmluZSBLU01fU0VDX01PREVMX05VTUJFUiAgICAgICAgICAgIFNOTVBfU0VDX01PREVMX0tTTQorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0YTkyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIEhlYWRlciBmaWxlIGZvciBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwgc3VwcG9ydAorICovCisKKyNpZm5kZWYgU05NUFRTTV9ICisjZGVmaW5lIFNOTVBUU01fSAorCisjZGVmaW5lIFRTTV9TRUNfTU9ERUxfTlVNQkVSICAgICAgICAgICAgU05NUF9TRUNfTU9ERUxfVFNNCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIGludCAgICAgICAgICAgICB0c21fcmdlbmVyYXRlX291dF9tc2coc3RydWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3NlY21vZF9vdXRnb2luZ19wYXJhbXMgKik7CisgICAgaW50ICAgICAgICAgICAgIHRzbV9wcm9jZXNzX2luX21zZyhzdHJ1Y3Qgc25tcF9zZWNtb2RfaW5jb21pbmdfcGFyYW1zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKTsKKyAgICB2b2lkICAgICAgICAgICAgaW5pdF90c20odm9pZCk7CisKKyAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fdHNtKHZvaWQpOworCisgICAgI2RlZmluZSBORVRTTk1QX1RNX1NBTUVfU0VDVVJJVFlfTk9UX1JFUVVJUkVEIDAKKyAgICAjZGVmaW5lIE5FVFNOTVBfVE1fVVNFX1NBTUVfU0VDVVJJVFkgICAgICAgICAgMQorCisgICAgLyogYmFzaWNhbGx5IHdlIHN0b3JlIGFsbW9zdCBub3RoaW5nIGVsc2UgYnV0IGEgdG0gcmVmICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZV9zIHsKKyAgICAgICBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKnRtU3RhdGVSZWY7CisgICAgfSBuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVFNNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCmluZGV4IDVkMTQzMDMuLjlkNjczY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBVU01fTUQ1X0FORF9TSEFfQVVUSF9MRU4gICAgICAgIDEyICAgICAgLyogYnl0ZXMgKi8KICNkZWZpbmUgVVNNX01BWF9BVVRIU0laRSAgICAgICAgICAgICAgICBVU01fTUQ1X0FORF9TSEFfQVVUSF9MRU4KIAotI2RlZmluZSBVU01fU0VDX01PREVMX05VTUJFUiAgICAgICAgICAgIDMKKyNkZWZpbmUgVVNNX1NFQ19NT0RFTF9OVU1CRVIgICAgICAgICAgICBTTk1QX1NFQ19NT0RFTF9VU00KIAogICAgIC8qCiAgICAgICogU3RydWN0dXJlcy4KQEAgLTc1LDYgKzc1LDcgQEAKICAgICAgICAgdV9jaGFyICAgICAgICAgKnByaXZLZXk7CiAgICAgICAgIHNpemVfdCAgICAgICAgICBwcml2S2V5TGVuOwogICAgICAgICB1X2NoYXIgICAgICAgICAqdXNlclB1YmxpY1N0cmluZzsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIHVzZXJQdWJsaWNTdHJpbmdMZW47CiAgICAgICAgIGludCAgICAgICAgICAgICB1c2VyU3RhdHVzOwogICAgICAgICBpbnQgICAgICAgICAgICAgdXNlclN0b3JhZ2VUeXBlOwogICAgICAgIC8qIHRoZXNlIGFyZSBhY3R1YWxseSBESCAqIHBvaW50ZXJzIGJ1dCBvbmx5IGlmIG9wZW5zc2wgaXMgYXZhaWwuICovCkBAIC0xNzksNiArMTgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCB0aW1lX3VpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICplcnJvcik7CiAKKyAgICBTZWNtb2RTZXNzaW9uQ2FsbGJhY2sgdXNtX29wZW5fc2Vzc2lvbjsKICAgICBTZWNtb2RPdXRNc2cgICAgdXNtX3NlY21vZF9nZW5lcmF0ZV9vdXRfbXNnOwogICAgIFNlY21vZE91dE1zZyAgICB1c21fc2VjbW9kX2dlbmVyYXRlX291dF9tc2c7CiAgICAgU2VjbW9kSW5Nc2cgICAgIHVzbV9zZWNtb2RfcHJvY2Vzc19pbl9tc2c7CkBAIC0xOTksNTAgKzIwMSw3OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKiwgbmV0c25tcF9zZXNzaW9uICosIHVfY2hhcik7CiAKICAgICBpbnQgICAgICAgICAgICAgdXNtX2NoZWNrX3NlY0xldmVsKGludCBsZXZlbCwgc3RydWN0IHVzbVVzZXIgKnVzZXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9nZXRfdXNlckxpc3Qodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2dldF91c2VyKHVfY2hhciAqIGVuZ2luZUlELCBzaXplX3QgZW5naW5lSURMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lKTsKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2dldF91c2VyX2Zyb21fbGlzdCh1X2NoYXIgKiBlbmdpbmVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZW5naW5lSURMZW4sIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzbVVzZXIgKnVzZXJMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2VfZGVmYXVsdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2FkZF91c2VyKHN0cnVjdCB1c21Vc2VyICp1c2VyKTsKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2FkZF91c2VyX3RvX2xpc3Qoc3RydWN0IHVzbVVzZXIgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c21Vc2VyICp1c2VyTGlzdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2ZyZWVfdXNlcihzdHJ1Y3QgdXNtVXNlciAqdXNlcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2NyZWF0ZV91c2VyKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9jcmVhdGVfaW5pdGlhbF91c2VyKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIGF1dGhQcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGF1dGhQcm90b2NvbExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcHJpdlByb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHJpdlByb3RvY29sTGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fY2xvbmVGcm9tX3VzZXIoc3RydWN0IHVzbVVzZXIgKmZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNtVXNlciAqdG8pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9yZW1vdmVfdXNlcihzdHJ1Y3QgdXNtVXNlciAqdXNlcik7CiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9yZW1vdmVfdXNlcl9mcm9tX2xpc3Qoc3RydWN0IHVzbVVzZXIgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzbVVzZXIgKip1c2VyTGlzdCk7CiAgICAgY2hhciAgICAgICAgICAgKmdldF9vYmppZChjaGFyICpsaW5lLCBvaWQgKiogb3B0ciwgc2l6ZV90ICogbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB1c21fc2F2ZV91c2Vycyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqdHlwZSk7CiAgICAgdm9pZCAgICAgICAgICAgIHVzbV9zYXZlX3VzZXJzX2Zyb21fbGlzdChzdHJ1Y3QgdXNtVXNlciAqdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdHlwZSk7CiAgICAgdm9pZCAgICAgICAgICAgIHVzbV9zYXZlX3VzZXIoc3RydWN0IHVzbVVzZXIgKnVzZXIsIGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgU05NUENhbGxiYWNrICAgIHVzbV9zdG9yZV91c2VyczsKLSAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX3JlYWRfdXNlcihjaGFyICpsaW5lKTsKKyAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX3JlYWRfdXNlcihjb25zdCBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB1c21fcGFyc2VfY29uZmlnX3VzbVVzZXIoY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsaW5lKTsKIAogICAgIHZvaWQgICAgICAgICAgICB1c21fc2V0X3Bhc3N3b3JkKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB1c21fc2V0X3VzZXJfcGFzc3dvcmQoc3RydWN0IHVzbVVzZXIgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CiAgICAgdm9pZCAgICAgICAgICAgIGluaXRfdXNtKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGluaXRfdXNtX2NvbmYoY29uc3QgY2hhciAqYXBwKTsKICAgICBpbnQgICAgICAgICAgICAgaW5pdF91c21fcG9zdF9jb25maWcoaW50IG1ham9yaWQsIGludCBtaW5vcmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZyk7CiAgICAgaW50ICAgICAgICAgICAgIGRlaW5pdF91c21fcG9zdF9jb25maWcoaW50IG1ham9yaWQsIGludCBtaW5vcmlkLCB2b2lkICpzZXJ2ZXJhcmcsCiAJCQkJCSAgIHZvaWQgKmNsaWVudGFyZyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgY2xlYXJfdXNlcl9saXN0KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX3VzbSh2b2lkKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHVzbV9jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbik7CisgICAgU2VjbW9kUG9zdERpc2NvdmVyeSB1c21fY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uX2hvb2s7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgdXNtX3BhcnNlX2NyZWF0ZV91c21Vc2VyKGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBvaWQgICAgICAqZ2V0X2RlZmF1bHRfYXV0aHR5cGUoc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3Qgb2lkICAgICAgKmdldF9kZWZhdWx0X3ByaXZ0eXBlKHNpemVfdCAqKTsKKyAgICB2b2lkICAgICAgICAgICAgc25tcHYzX2F1dGh0eXBlX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cik7CisgICAgdm9pZCAgICAgICAgICAgIHNubXB2M19wcml2dHlwZV9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAppbmRleCBlMjQ4NDQxLi5hOTU4ODA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCkBAIC05LDI1ICs5LDI0IEBACiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIE1BWF9FTkdJTkVJRF9MRU5HVEggMTI4CisjZGVmaW5lIE1BWF9FTkdJTkVJRF9MRU5HVEggMzIgLyogcGVyIFNOTVAtRlJBTUVXT1JLLU1JQiBTbm1wRW5naW5lSUQgVEMgKi8KIAogI2RlZmluZSBFTkdJTkVJRF9UWVBFX0lQVjQgICAgMQogI2RlZmluZSBFTkdJTkVJRF9UWVBFX0lQVjYgICAgMgogI2RlZmluZSBFTkdJTkVJRF9UWVBFX01BQ0FERFIgMwogI2RlZmluZSBFTkdJTkVJRF9UWVBFX1RFWFQgICAgNAorI2RlZmluZSBFTkdJTkVJRF9UWVBFX0VYQUNUICAgNQogI2RlZmluZSBFTkdJTkVJRF9UWVBFX05FVFNOTVBfUk5EIDEyOAogCiAjZGVmaW5lCURFRkFVTFRfTklDICJldGgwIgogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc2V0dXBfZW5naW5lSUQodV9jaGFyICoqIGVpZHAsIGNvbnN0IGNoYXIgKnRleHQpOwogICAgIHZvaWQgICAgICAgICAgICBlbmdpbmVJRF9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpOwogICAgIHZvaWQgICAgICAgICAgICBlbmdpbmVCb290c19jb25mKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKICAgICB2b2lkICAgICAgICAgICAgZW5naW5lSURUeXBlX2NvbmYoY29uc3QgY2hhciAqLCBjaGFyICopOwogICAgIHZvaWQgICAgICAgICAgICBlbmdpbmVJRE5pY19jb25mKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLSAgICB2b2lkICAgICAgICAgICAgc25tcHYzX2F1dGh0eXBlX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cik7Ci0gICAgdm9pZCAgICAgICAgICAgIHNubXB2M19wcml2dHlwZV9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpOwotICAgIHZvaWQgICAgICAgICAgICB1c21fcGFyc2VfY3JlYXRlX3VzbVVzZXIoY29uc3QgY2hhciAqdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBpbml0X3NubXB2Myhjb25zdCBjaGFyICopOwogICAgIGludCAgICAgICAgICAgICBpbml0X3NubXB2M19wb3N0X2NvbmZpZyhpbnQgbWFqb3JpZCwgaW50IG1pbm9yaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywKQEAgLTM5LDE4ICszOCwyMSBAQAogICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zbm1wdjMoY29uc3QgY2hhciAqdHlwZSk7CiAgICAgaW50ICAgICAgICAgICAgIHNubXB2M19zdG9yZShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2xvbmcgICAgICAgICAgc25tcHYzX2xvY2FsX3NubXBFbmdpbmVCb290cyh2b2lkKTsKICAgICBpbnQgICAgICAgICAgICAgc25tcHYzX2Nsb25lX2VuZ2luZUlEKHVfY2hhciAqKiwgc2l6ZV90ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHNpemVfdCAgICAgICAgICBzbm1wdjNfZ2V0X2VuZ2luZUlEKHVfY2hhciAqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqc25tcHYzX2dlbmVyYXRlX2VuZ2luZUlEKHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfbG9uZyAgICAgICAgICBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUodm9pZCk7CiAgICAgaW50ICAgICAgICAgICAgIGdldF9kZWZhdWx0X3NlY0xldmVsKHZvaWQpOwotICAgIGNvbnN0IG9pZCAgICAgICpnZXRfZGVmYXVsdF9hdXRodHlwZShzaXplX3QgKik7Ci0gICAgY29uc3Qgb2lkICAgICAgKmdldF9kZWZhdWx0X3ByaXZ0eXBlKHNpemVfdCAqKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcHYzX3NldF9lbmdpbmVCb290c0FuZFRpbWUoaW50IGJvb3RzLCBpbnQgdHRpbWUpOwogICAgIGludCAgICAgICAgICAgICBmcmVlX2VuZ2luZUlEKGludCBtYWpvcmlkLCBpbnQgbWlub3JpZCwgdm9pZCAqc2VydmVyYXJnLAogCQkJCSAgdm9pZCAqY2xpZW50YXJnKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBwYXJzZV9zZWNMZXZlbF9jb25mKGNvbnN0IGNoYXIqIHdvcmQsIGNoYXIgKmNwdHIpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAppbmRleCBmMzJjNDNmLi5hYzUwNTJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCkBAIC00NywxNSArNDcsMTkgQEAKICAgICAgKiBSZXR1cm5zOiAtMSA6IGZvcmsgZmFpbGVkCiAgICAgICogICAgICAgICAgIDAgOiBObyBlcnJvcnMKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2RhZW1vbml6ZShpbnQgcXVpdF9pbW1lZGlhdGVseSwgaW50IHN0ZGVycl9sb2cpOwogCiAgICAgLyoKICAgICAgKiBEZWZpbml0aW9ucyBmb3IgdGhlIHN5c3RlbSBkZXBlbmRlbnQgbGlicmFyeSBmaWxlCisgICAgICoKKyAgICAgKiBEbyBub3QgZGVmaW5lICdzdHJ1Y3QgZGlyZWN0JyB3aGVuIE1TVkNfUEVSTCBpcyBkZWZpbmVkIGJlY2F1c2UgYQorICAgICAqIHN0cnVjdHVyZSB3aXRoIHRoYXQgbmFtZSBpcyBhbHNvIGRlZmluZWQgaW4gdGhlIFBlcmwgaGVhZGVyCisgICAgICogbGliXENPUkVcZGlyZW50LmguIERvIG5vdCBkZWNsYXJlIGdldHRpbWVvZmRheSgpIGVpdGhlci4KICAgICAgKi8KICNpZm5kZWYgTVNWQ19QRVJMCi0jaWZkZWYgV0lOMzIKIAotI2lmbmRlZiBIQVZFX0RJUkVOVF9IIC8qIE1pbmdHVyBoYXMgZGlyZW50LmggYnV0IGFsc28gZGVmaW5lcyBXSU4zMiAqLworI2lmbmRlZiBIQVZFX1JFQURESVIKICAgICAvKgogICAgICAqIHN0cnVjdHVyZSBvZiBhIGRpcmVjdG9yeSBlbnRyeSAKICAgICAgKi8KQEAgLTc2LDQ5ICs4MCw5MCBAQAogICAgICAgICBzdHJ1Y3QgZGlyZWN0ICAgZGlyc3RyOyAvKiBEaXJlY3Rvcnkgc3RydWN0dXJlIHRvIHJldHVybiAqLwogICAgIH0gRElSOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBESVIgICAgICAgICAgICAqb3BlbmRpcihjb25zdCBjaGFyICpmaWxlbmFtZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgZGlyZWN0ICAqcmVhZGRpcihESVIgKiBkaXJwKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBjbG9zZWRpcihESVIgKiBkaXJwKTsKLSNlbmRpZiAvKiBIQVZFX0RJUkVOVF9IICovCisjZW5kaWYgLyogSEFWRV9SRUFERElSICovCiAKICNpZm5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgc3RydWN0IHRpbWV6b25lICp0eik7CiAjZW5kaWYKLSNpZm5kZWYgSEFWRV9TVFJOQ0FTRUNNUAorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgLyogTVNWQ19QRVJMICovCisKKy8qCisgKiBOb3RlOiB3aGVuIGNvbXBpbGluZyBOZXQtU05NUCB3aXRoIGRtYWxsb2MgZW5hYmxlZCBvbiBhIHN5c3RlbSB3aXRob3V0CisgKiBzdHJjYXNlY21wKCkgb3Igc3RybmNhc2VjbXAoKSwgdGhlIG1hY3JvIEhBVkVfU1RSTkNBU0VDTVAgaXMKKyAqIG5vdCBkZWZpbmVkIGJ1dCBzdHJjYXNlY21wKCkgYW5kIHN0cm5jYXNlY21wKCkgYXJlIGRlZmluZWQgYXMgbWFjcm9zIGluCisgKiA8ZG1hbGxvYy5oPi4gSW4gb3JkZXIgdG8gcHJldmVudCBhIGNvbXBpbGF0aW9uIGVycm9yLCBkbyBub3QgZGVjbGFyZQorICogc3RyY2FzZWNtcCgpIG9yIHN0cm5jYXNlY21wKCkgd2hlbiB0aGUgPGRtYWxsb2MuaD4gaGVhZGVyIGhhcyBiZWVuIGluY2x1ZGVkLgorICovCisjaWYgIWRlZmluZWQoSEFWRV9TVFJOQ0FTRUNNUCkgJiYgIWRlZmluZWQoc3RyY2FzZWNtcCkKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChIQVZFX1NUUk5DQVNFQ01QKSAmJiAhZGVmaW5lZChzdHJuY2FzZWNtcCkKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKTsKICNlbmRpZgogCisjaWZkZWYgV0lOMzIKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICp3aW5zb2NrX3N0YXJ0dXAodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgd2luc29ja19jbGVhbnVwKHZvaWQpOwotCiAjZGVmaW5lIFNPQ0tfU1RBUlRVUCB3aW5zb2NrX3N0YXJ0dXAoKQogI2RlZmluZSBTT0NLX0NMRUFOVVAgd2luc29ja19jbGVhbnVwKCkKLQogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhV0lOMzIgKi8KLQogI2RlZmluZSBTT0NLX1NUQVJUVVAKICNkZWZpbmUgU09DS19DTEVBTlVQCi0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgKi8KLSNlbmRpZgkJCQkvKiBNU1ZDX1BFUkwgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+ICAgICAvKiBGb3IgZGVmaW5pdGlvbiBvZiBpbl9hZGRyX3QgKi8KIAorICAgIC8qIFNpbXBseSByZXNvbHZlIGEgaG9zdG5hbWUgYW5kIHJldHVybiBmaXJzdCBJUHY0IGFkZHJlc3MuCisgICAgICogUmV0dXJucyAtMSBvbiBlcnJvciAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZ2V0aG9zdGJ5bmFtZV92NChjb25zdCBjaGFyKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYWRkcl90ICphZGRyX291dCk7CisKKyAgICAvKiogbmV0c25tcCB2ZXJzaW9ucyBvZiBkbnMgcmVzb2xvdXRpb24uLiBtYXkgaW5jbHVkZSBETlNTRUMgdmFsaWRhdGlvbi4gKi8KKyAgICBzdHJ1Y3QgYWRkcmluZm87IC8qIGZvcndhcmQgZGVjbGFyZSAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IGhvc3RlbnQgKm5ldHNubXBfZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IGhvc3RlbnQgKm5ldHNubXBfZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICphZGRyLCBzb2NrbGVuX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUpOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9nZXRhZGRyaW5mbyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFkZHJpbmZvICoqcmVzKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW5fYWRkcl90ICAgICAgIGdldF9teWFkZHIodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBsb25nICAgICAgICAgICAgZ2V0X3VwdGltZSh2b2lkKTsKIAogI2lmbmRlZiBIQVZFX1NUUkRVUAogICAgIGNoYXIgICAgICAgICAgICpzdHJkdXAoY29uc3QgY2hhciAqKTsKICNlbmRpZgogI2lmbmRlZiBIQVZFX1NFVEVOVgorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNldGVudihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKICNlbmRpZgogCi0gICAgaW50ICAgICAgICAgICAgIGNhbGN1bGF0ZV90aW1lX2RpZmYoc3RydWN0IHRpbWV2YWwgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqKTsKLSAgICB1X2ludCAgICAgICAgICAgY2FsY3VsYXRlX3NlY3RpbWVfZGlmZihzdHJ1Y3QgdGltZXZhbCAqbm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICp0aGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBjYWxjdWxhdGVfdGltZV9kaWZmKGNvbnN0IHN0cnVjdCB0aW1ldmFsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWV2YWwgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB1X2ludCAgICAgICAgICAgY2FsY3VsYXRlX3NlY3RpbWVfZGlmZihjb25zdCBzdHJ1Y3QgdGltZXZhbCAqbm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0aGVuKTsKIAogI2lmbmRlZiBIQVZFX1NUUkNBU0VTVFIKICAgICBjaGFyICAgICAgICAgICAqc3RyY2FzZXN0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CkBAIC0xMjksMTcgKzE3NCwyNCBAQAogI2lmbmRlZiBIQVZFX1NUUlRPVUwKICAgICB1bnNpZ25lZCBsb25nICAgc3RydG91bChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAjZW5kaWYKKyNpZm5kZWYgSEFWRV9TVFJUT1VMTAorICAgIE5FVFNOTVBfSU1QT1JUIHVpbnQ2NF90IHN0cnRvdWxsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKKyNlbmRpZgogI2lmbmRlZiBIQVZFX1NUUlRPS19SCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqc3RydG9rX3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOwogI2VuZGlmCiAjaWZuZGVmIEhBVkVfU05QUklOVEYKICAgICBpbnQgICAgICAgICAgICAgc25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKICNlbmRpZgogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbWtkaXJoaWVyKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBtb2RlX3QgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBza2lwbGFzdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjb25zdCBjaGFyICAgICAqbmV0c25tcF9ta3RlbXAodm9pZCk7CiAjaWZuZGVmIEhBVkVfU1RSTENQWQorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc2l6ZV90ICAgICAgICAgICAgc3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICNlbmRpZgogI2lmbmRlZiBIQVZFX1NUUkxDQVQKQEAgLTE1MSw2ICsyMDMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvc3BtcmVscHJlZml4KTsKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vc19rZXJuZWxfd2lkdGgodm9pZCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3N0cl90b191aWQoY29uc3QgY2hhciAqdXNlcm9ydWlkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3N0cl90b19naWQoY29uc3QgY2hhciAqZ3JvdXBvcmdpZCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdGVzdGluZy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rlc3RpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzYxMzVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rlc3RpbmcuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIE5FVFNOTVBfTElCUkFSWV9URVNUSU5HX0gKKyNkZWZpbmUgTkVUU05NUF9MSUJSQVJZX1RFU1RJTkdfSAorCisvKiBUaGVzZSBhcmUgbWFjcm9zIHVzZWQgZm9yIHRoZSBuZXQtc25tcCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlOyBzZWUKKyAgIHRoZSAidGVzdGluZyIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgZGV0YWlscy4gKi8KKworc3RhdGljIGludCBfX3Rlc3RfY291bnRlciA9IDA7CitzdGF0aWMgaW50IF9fZGlkX3BsYW4gPSAwOworCisjZGVmaW5lIE9LKGlzb2ssIGRlc2NyaXB0aW9uKSBkbyB7IHByaW50ZigiJXMgJWQgLSAlc1xuIiwgKChpc29rKSA/ICJvayIgOiAibm90IG9rIiksICsrX190ZXN0X2NvdW50ZXIsIGRlc2NyaXB0aW9uKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBPS0YoaXNvaywgZGVzY3JpcHRpb24pIGRvIHsgcHJpbnRmKCIlcyAlZCAtICIsICgoaXNvaykgPyAib2siIDogIm5vdCBvayIpLCArK19fdGVzdF9jb3VudGVyKTsgcHJpbnRmIGRlc2NyaXB0aW9uOyBwcmludGYoIlxuIik7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUExBTihudW1iZXIpIGRvIHsgcHJpbnRmKCIxLi4lZFxuIiwgbnVtYmVyKTsgX19kaWRfcGxhbiA9IDE7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBORVRTTk1QX0xJQlJBUllfVEVTVElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCmluZGV4IDkzZTA1YjAuLjI2MzRiMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCkBAIC0xOTksNiArMTk5LDcgQEAKICAgICAgKiBQcm90b3R5cGVzLgogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9yZWFsbG9jKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4pOwogCiAgICAgdm9pZCAgICAgICAgICAgIGZyZWVfemVybyh2b2lkICpidWYsIHNpemVfdCBzaXplKTsKQEAgLTIwOCw2ICsyMDksMTUgQEAKICAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICpuZXRzbm1wX21lbWR1cChjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IHNpemUpOwogCisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfY2hlY2tfZGVmaW5lZG5lc3MoY29uc3Qgdm9pZCAqcGFja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgpOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB1X2ludCAgICAgICAgICAgbmV0c25tcF9iaW5hcnlfdG9faGV4KHVfY2hhciAqKiBkZXN0LCBzaXplX3QgKmRlc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBpbnB1dCwgc2l6ZV90IGxlbik7CisKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfaW50ICAgICAgICAgICBiaW5hcnlfdG9faGV4KGNvbnN0IHVfY2hhciAqIGlucHV0LCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRwdXQpOwogICAgICAgICAgICAgICAgICAgICAvKiBwcmVmZXJyZWQgKi8KQEAgLTIxNSwzOSArMjI1LDU5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG9mZnNldCwgaW50IGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhleCwgY29uc3QgY2hhciAqZGVsaW0pOwogICAgICAgICAgICAgICAgICAgICAvKiBjYWxscyBuZXRzbm1wX2hleF90b19iaW5hcnkgdy9kZWxpbSBvZiAiICIgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2hleF90b19iaW5hcnkodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG9mZnNldCwgaW50IGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZXgpOwogICAgICAgICAgICAgICAgICAgICAvKiBoYW5kbGVzIG9kZCBsZW5ndGhzICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgaGV4X3RvX2JpbmFyeTIoY29uc3QgdV9jaGFyICogaW5wdXQsIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRwdXQpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9kZWNpbWFsX3RvX2JpbmFyeSh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVjaW1hbCk7CiAjZGVmaW5lIHNubXBfY3N0cmNhdChiLGwsbyxhLHMpIHNubXBfc3RyY2F0KGIsbCxvLGEsKGNvbnN0IHVfY2hhciAqKXMpCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9zdHJjYXQodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIHMpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKm5ldHNubXBfc3RyZHVwX2FuZF9udWxsKGNvbnN0IHVfY2hhciAqIGZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmcm9tX2xlbik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBkdW1wX2NodW5rKGNvbnN0IGNoYXIgKmRlYnVndG9rZW4sIGNvbnN0IGNoYXIgKnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGJ1ZiwgaW50IHNpemUpOwogICAgIGNoYXIgICAgICAgICAgICpkdW1wX3NubXBFbmdpbmVJRChjb25zdCB1X2NoYXIgKiBidWYsIHNpemVfdCAqIGJ1Zmxlbik7CiAKKyAgICAvKiogQSBwb2ludGVyIHRvIGFuIG9wYXF1ZSB0aW1lIG1hcmtlciB2YWx1ZS4gKi8KICAgICB0eXBlZGVmIHZvaWQgICAqbWFya2VyX3Q7Ci0gICAgbWFya2VyX3QgICAgICAgIGF0aW1lX25ld01hcmtlcih2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgYXRpbWVfc2V0TWFya2VyKG1hcmtlcl90IHBtKTsKLSAgICBsb25nICAgICAgICAgICAgYXRpbWVfZGlmZihtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKTsKLSAgICB1X2xvbmcgICAgICAgICAgdWF0aW1lX2RpZmYobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCk7ICAgICAgIC8qIDEvMTAwMHRoIHNlYyAqLwotICAgIHVfbG9uZyAgICAgICAgICB1YXRpbWVfaGRpZmYobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCk7ICAgICAgLyogMS8xMDB0aCBzZWMgKi8KLSAgICBpbnQgICAgICAgICAgICAgYXRpbWVfcmVhZHkobWFya2VyX3QgcG0sIGludCBkZWx0YVQpOwotICAgIGludCAgICAgICAgICAgICB1YXRpbWVfcmVhZHkobWFya2VyX3QgcG0sIHVuc2lnbmVkIGludCBkZWx0YVQpOworICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfbWFya2VyX3Q7CiAKLSAgICBpbnQgICAgICAgICAgICAgbWFya2VyX3R0aWNrcyhtYXJrZXJfdCBwbSk7Ci0gICAgaW50ICAgICAgICAgICAgIHRpbWV2YWxfdHRpY2tzKHN0cnVjdCB0aW1ldmFsICp0dik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBtYXJrZXJfdCAgICAgICAgYXRpbWVfbmV3TWFya2VyKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGF0aW1lX3NldE1hcmtlcihtYXJrZXJfdCBwbSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKHN0cnVjdCB0aW1ldmFsKiB0dik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcihtYXJrZXJfdCAqcG0pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbG9uZyAgICAgICAgICAgIGF0aW1lX2RpZmYoY29uc3RfbWFya2VyX3QgZmlyc3QsIGNvbnN0X21hcmtlcl90IHNlY29uZCk7CisgICAgdV9sb25nICAgICAgICAgIHVhdGltZV9kaWZmKGNvbnN0X21hcmtlcl90IGZpcnN0LCBjb25zdF9tYXJrZXJfdCBzZWNvbmQpOyAgICAgICAvKiAxLzEwMDB0aCBzZWMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHVfbG9uZyAgICAgICAgICB1YXRpbWVfaGRpZmYoY29uc3RfbWFya2VyX3QgZmlyc3QsIGNvbnN0X21hcmtlcl90IHNlY29uZCk7ICAgICAgLyogMS8xMDB0aCBzZWMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBhdGltZV9yZWFkeShjb25zdF9tYXJrZXJfdCBwbSwgaW50IGRlbHRhX21zKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3JlYWR5X21vbm90b25pYyhjb25zdF9tYXJrZXJfdCBwbSwgaW50IGRlbHRhX21zKTsKKyAgICBpbnQgICAgICAgICAgICAgdWF0aW1lX3JlYWR5KGNvbnN0X21hcmtlcl90IHBtLCB1bnNpZ25lZCBpbnQgZGVsdGFfbXMpOworCisgICAgaW50ICAgICAgICAgICAgIG1hcmtlcl90dGlja3MoY29uc3RfbWFya2VyX3QgcG0pOworICAgIGludCAgICAgICAgICAgICB0aW1ldmFsX3R0aWNrcyhjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpOwogICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgICpuZXRzbm1wX2dldGVudihjb25zdCBjaGFyICpuYW1lKTsKICAgICBORVRTTk1QX0lNUE9SVApAQCAtMjU2LDYgKzI4Niw5IEBACiAKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9hZGRyc3RyX2h0b24oY2hhciAqcHRyLCBzaXplX3QgbGVuKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2Vjcyhjb25zdCBjaGFyICp0aW1lX3N0cmluZyk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNzQyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaApAQCAtMCwwICsxLDcwIEBACisjaWZuZGVmIE5FVF9TTk1QX0xJQlJBUllfVFlQRVNfSAorI2RlZmluZSBORVRfU05NUF9MSUJSQVJZX1RZUEVTX0gKKworI2lmbmRlZiBORVRfU05NUF9DT05GSUdfSAorI2Vycm9yICJQbGVhc2UgaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGJlZm9yZSB0aGlzIGZpbGUiCisjZW5kaWYKKworCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKworCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2luZGV4X3MgeworICAgIHNpemVfdCAgICAgICAgICBsZW47CisgICAgb2lkICAgICAgICAgICAgKm9pZHM7Cit9IG5ldHNubXBfaW5kZXg7CisKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfdm9pZF9hcnJheV9zIHsKKyAgICBzaXplX3QgICAgICAgICAgc2l6ZTsKKyAgICB2b2lkICAgICAgICAgICoqYXJyYXk7Cit9IG5ldHNubXBfdm9pZF9hcnJheTsKKworLyoKKyAqIHJlZmVyZW5jZXMgdG8gdmFyaW91cyB0eXBlcworICovCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl92b2lkIHsKKyAgICB2b2lkICAgICAgICAgICAqdmFsOworfSBuZXRzbm1wX3JlZl92b2lkOworCit0eXBlZGVmIHVuaW9uIHsKKyAgICB1X2xvbmcgICAgICAgICAgdWw7CisgICAgdV9pbnQgICAgICAgICAgIHVpOworICAgIHVfc2hvcnQgICAgICAgICB1czsKKyAgICB1X2NoYXIgICAgICAgICAgdWM7CisgICAgbG9uZyAgICAgICAgICAgIHNsOworICAgIGludCAgICAgICAgICAgICBzaTsKKyAgICBzaG9ydCAgICAgICAgICAgc3M7CisgICAgY2hhciAgICAgICAgICAgIHNjOworICAgIGNoYXIgICAgICAgICAgICpjcDsKKyAgICB2b2lkICAgICAgICAgICAqdnA7Cit9IG5ldHNubXBfY3ZhbHVlOworCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl9zaXplX3RfcyB7CisgICAgc2l6ZV90ICAgICAgICAgIHZhbDsKK30gICAgICAgICAgICAgICpuZXRzbm1wX3JlZl9zaXplX3Q7CisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgYSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycywgc2ltaWxhciB0byBmZF9zZXQuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaG93ZXZlciBjYW4gaG9sZCBzby1jYWxsZWQgbGFyZ2UgZmlsZSBkZXNjcmlwdG9ycworICogKD49IEZEX1NFVFNJWkUgb3IgMTAyNCkgb24gVW5peCBzeXN0ZW1zIG9yIG1vcmUgdGhhbiBGRF9TRVRTSVpFICg2NCkKKyAqIHNvY2tldHMgb24gV2luZG93cyBzeXN0ZW1zLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gYWxsb2NhdGUgdGhpcyBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZyBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCkKKyAqIGFuZCBtdXN0IGJlIGNsZWFuZWQgdXAgdmlhIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoKS4gSWYgdGhpcyBsYXN0CisgKiBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIHRoaXMgbWF5IHJlc3VsdCBpbiBhIG1lbW9yeSBsZWFrLgorICoKKyAqIFRoZSBtZW1iZXJzIG9mIHRoaXMgc3RydWN0dXJlIGFyZToKKyAqIGxmc19zZXRzaXplOiBtYXhpbXVtIHNldCBzaXplLgorICogbHNmX3NldHB0cjogIHBvaW50cyB0byBsZnNfc2V0IGlmIGxmc19zZXRzaXplIDw9IEZEX1NFVFNJWkUsIGFuZCBvdGhlcndpc2UKKyAqICAgICAgICAgICAgICB0byBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LgorICogbGZzX3NldDogICAgIGZpbGUgZGVzY3JpcHRvciAvIHNvY2tldCBzZXQgZGF0YSBpZiBsZnNfc2V0c2l6ZSA8PSBGRF9TRVRTSVpFLgorICovCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2xhcmdlX2ZkX3NldF9zIHsKKyAgICB1bnNpZ25lZCAgICAgICAgbGZzX3NldHNpemU7CisgICAgZmRfc2V0ICAgICAgICAgKmxmc19zZXRwdHI7CisgICAgZmRfc2V0ICAgICAgICAgIGxmc19zZXQ7Cit9IG5ldHNubXBfbGFyZ2VfZmRfc2V0OworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRfU05NUF9MSUJSQVJZX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCmluZGV4IDczOTc5ZDMuLjMyOWQ0MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaApAQCAtMTMsMjIgKzEzLDM0IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGZyb20gc25tcF9hcGkuaCAKICAgICAgICAgICovCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X2R1bXBfcGFja2V0KGludCk7CitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2R1bXBfcGFja2V0KHZvaWQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9xdWlja19wcmludChpbnQpOworTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBzbm1wX2dldF9xdWlja19wcmludCh2b2lkKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfc3VmZml4X29ubHkoaW50KTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgc25tcF9nZXRfc3VmZml4X29ubHkodm9pZCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X2Z1bGxfb2JqaWQoaW50KTsKIGludCAgICAgICAgICAgICBzbm1wX2dldF9mdWxsX29iamlkKHZvaWQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9yYW5kb21fYWNjZXNzKGludCk7CitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIHNubXBfZ2V0X3JhbmRvbV9hY2Nlc3Modm9pZCk7CiAKICAgICAgICAgLyoKICAgICAgICAgICogZnJvbSBwYXJzZS5oIAogICAgICAgICAgKi8KK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfbWliX3dhcm5pbmdzKGludCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X21pYl9lcnJvcnMoaW50KTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMoaW50KTsKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9taWJfY29tbWVudF90ZXJtKGludCk7CiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfbWliX3BhcnNlX2xhYmVsKGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAppbmRleCBhMzRkYzY5Li5hNWJlNmFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKQEAgLTEyNiwxMiArMTI2LDE1IEBACiAgICAgICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqbmV4dDsKICAgICB9OwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9kZXN0cm95Vmlld0VudHJ5KGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9kZXN0cm95QWxsVmlld0VudHJpZXModm9pZCk7CiAKICNkZWZpbmUgVkFDTV9NT0RFX0ZJTkQgICAgICAgICAgICAgICAgMAogI2RlZmluZSBWQUNNX01PREVfSUdOT1JFX01BU0sgICAgICAgICAxCiAjZGVmaW5lIFZBQ01fTU9ERV9DSEVDS19TVUJUUkVFICAgICAgIDIKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqdmFjbV9nZXRWaWV3RW50cnkoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KTsKICAgICAvKgpAQCAtMTQwLDYgKzE0Myw3IEBACiAgICAgICogUmV0dXJucyBOVUxMIGlmIHRoYXQgZW50cnkgZG9lcyBub3QgZXhpc3QuCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCB2YWNtX2NoZWNrU3VidHJlZShjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QpOwogCiAgICAgLyoKQEAgLTE1NSw2ICsxNTksNyBAQAogICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FsbG93ZWQgcG9ydGlvbnMuCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQKICAgICAgICAgICAgICAgICAgICAgdmFjbV9zY2FuVmlld0luaXQodm9pZCk7CiAgICAgLyoKQEAgLTE2NCw2ICsxNjksNyBAQAogICAgICAqLwogCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqdmFjbV9zY2FuVmlld05leHQodm9pZCk7CiAgICAgLyoKICAgICAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV4dCB2aWV3RW50cnkuCkBAIC0xNzQsNiArMTgwLDcgQEAKICAgICAgKiB2aWV3X3NjYW5Jbml0KCkgc3RhcnRzIHRoZSBzY2FuIG92ZXIuCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqdmFjbV9jcmVhdGVWaWV3RW50cnkoY29uc3QgY2hhciAqLCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CiAgICAgLyoKQEAgLTE4MiwyMiArMTg5LDM0IEBACiAgICAgICogVGhlIHN0YXR1cyBvZiB0aGlzIGVudHJ5IGlzIGNyZWF0ZWQgYXMgaW52YWxpZC4KICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fZGVzdHJveUdyb3VwRW50cnkoaW50LCBjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fZGVzdHJveUFsbEdyb3VwRW50cmllcyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgKnZhY21fY3JlYXRlR3JvdXBFbnRyeShpbnQsIGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICp2YWNtX2dldEdyb3VwRW50cnkoaW50LCBjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fc2Nhbkdyb3VwSW5pdCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgKnZhY21fc2Nhbkdyb3VwTmV4dCh2b2lkKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fZGVzdHJveUFjY2Vzc0VudHJ5KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9kZXN0cm95QWxsQWNjZXNzRW50cmllcyh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX2FjY2Vzc0VudHJ5ICp2YWNtX2NyZWF0ZUFjY2Vzc0VudHJ5KGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKnZhY21fZ2V0QWNjZXNzRW50cnkoY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fc2NhbkFjY2Vzc0luaXQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqdmFjbV9zY2FuQWNjZXNzTmV4dCh2b2lkKTsKIAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX2Rlc3Ryb3lTZWN1cml0eUVudHJ5KGNvbnN0IGNoYXIgKik7CkBAIC0yMDUsNiArMjI0LDcgQEAKICAgICBzdHJ1Y3QgdmFjbV9zZWN1cml0eUVudHJ5ICp2YWNtX2dldFNlY3VyaXR5RW50cnkoY29uc3QgY2hhciAqKTsKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9zY2FuU2VjdXJpdHlJbml0KHZvaWQpOwogICAgIHN0cnVjdCB2YWNtX3NlY3VyaXR5RW50cnkgKnZhY21fc2NhblNlY3VyaXR5RW50cnkodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgdmFjbV9pc19jb25maWd1cmVkKHZvaWQpOwogCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fc2F2ZShjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqdHlwZSk7CkBAIC0yMTcsMTYgKzIzNywyMyBAQAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX3NhdmVfZ3JvdXAoc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqZ3JvdXBfZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqdHlwZSk7CiAKLSAgICB2b2lkICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfdmlldyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7Ci0gICAgdm9pZCAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX2dyb3VwKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ192aWV3KGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ19ncm91cChjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfYWNjZXNzKGNvbnN0IGNoYXIgKnRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ19hdXRoX2FjY2Vzcyhjb25zdCBjaGFyICp0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsaW5lKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHN0b3JlX3ZhY20oaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICpuZXRzbm1wX3ZpZXdfZ2V0KHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmlld05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHZpZXdTdWJ0cmVlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5waXBlLmgKaW5kZXggYzFkZDkzZi4uOTBmZDcyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oCkBAIC0zNSw2ICszNSw3IEBACiAjaWZuZGVmIFdJTlBJUEVfSAogI2RlZmluZSBXSU5QSVBFX0gKIAorTkVUU05NUF9JTVBPUlQKIGludCBjcmVhdGVfd2lucGlwZV90cmFuc3BvcnQoaW50ICpwaXBlZmRzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2luc2VydmljZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnNlcnZpY2UuaAppbmRleCAxYzQ3NjNhLi43NjA4MGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2luc2VydmljZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5zZXJ2aWNlLmgKQEAgLTk1LDE3ICs5NSw2IEBACiAgIFZPSUQgRGlzcGxheUVycm9yIChMUENUU1RSIHBzelRpdGxlLCBpbnQgcXVpdGUpOwogCiAgIC8qCi0gICAqIFRvIHVwZGF0ZSB3aW5kb3dzIHNlcnZpY2Ugc3RhdHVzIHRvIFNDTSAKLSAgICovCi0gIHN0YXRpYyBCT09MIFVwZGF0ZVNlcnZpY2VTdGF0dXMgKERXT1JEIGR3U3RhdHVzLCBEV09SRCBkd0Vycm9yQ29kZSwKLQkJCQkgICBEV09SRCBkd1dhaXRIaW50KTsKLQotICAvKgotICAgKiBUbyBSZXBvcnQgY3VycmVudCBzZXJ2aWNlIHN0YXR1cyB0byBTQ00gCi0gICAqLwotICBzdGF0aWMgQk9PTCBSZXBvcnRDdXJyZW50U2VydmljZVN0YXR1cyAoVk9JRCk7Ci0KLSAgLyoKICAgICogU2VydmljZSBNYWluIGZ1bmN0aW9uLCAgV2hpY2ggd2lsbCBzcGF3biBhIHRocmVhZCwgYW5kIGNhbGxzIHRoZQogICAgKiBTZXJ2aWNlIHJ1biBwYXJ0CiAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAppbmRleCAwOWZmNWY1Li4zYjU0ZTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaApAQCAtNywxOCArNywxMDEgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qIEluaXRpYWxpc2F0aW9uIGFuZCBTaHV0ZG93biAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIGFkZF9taWJkaXIoY29uc3QgY2hhciAqKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfaW5pdF9taWIodm9pZCk7CisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgaW5pdF9taWIodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgaW5pdF9taWJfaW50ZXJuYWxzKHZvaWQpOworI2VuZGlmCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fbWliKHZvaWQpOworCisgICAgIC8qIFJlYWRpbmcgYW5kIFBhcnNpbmcgTUlCcyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IHRyZWUgICAgKm5ldHNubXBfcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqKTsKKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCB0cmVlICAgICpyZWFkX21vZHVsZShjb25zdCBjaGFyICopOworI2VuZGlmCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCB0cmVlICAgICpyZWFkX21pYihjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgc3RydWN0IHRyZWUgICAgKnJlYWRfYWxsX21pYnModm9pZCk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBhZGRfbW9kdWxlX3JlcGxhY2VtZW50KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgaW50KTsKKworICAgICAgICAgLyogZnJvbSB1Y2QtY29tcGF0LmggKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9taWJfd2FybmluZ3MoaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9taWJfZXJyb3JzKGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMoaW50KTsKKworCisgICAgIC8qIFNlYXJjaGluZyB0aGUgTUlCIFRyZWUgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICByZWFkX29iamlkKGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG9pZCAgICAgICAgICAgICpzbm1wX3BhcnNlX29pZChjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgZ2V0X21vZHVsZV9ub2RlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90ICopOworCisgICAgIC8qIE91dHB1dCAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHByaW50X21pYihGSUxFICogZnApOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgcHJpbnRfb2JqaWQoY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICBmcHJpbnRfb2JqaWQoRklMRSAqIGZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgc25wcmludF9vYmppZChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHByaW50X2Rlc2NyaXB0aW9uKG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICBmcHJpbnRfZGVzY3JpcHRpb24oRklMRSAqIGZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICBzbnByaW50X2Rlc2NyaXB0aW9uKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKICAgICAvKgotICAgICAqICBGb3IgdGhlIGluaXRpYWwgcmVsZWFzZSwgdGhpcyB3aWxsIGp1c3QgcmVmZXIgdG8gdGhlCi0gICAgICogIHJlbGV2YW50IFVDRCBoZWFkZXIgZmlsZXMuCi0gICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlIHJvdXRpbmVzIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUKLSAgICAgKiAgQVBJIHdpbGwgYmUgaWRlbnRpZmllZCwgYW5kIGxpc3RlZCBoZXJlIGRpcmVjdGx5LgorICAgICAqICAgIEhhdmluZyBleHRyYWN0ZWQgdGhlIG1haW4gKCJwdWJsaWMgQVBJIikgY2FsbHMgcmVsZXZhbnQKKyAgICAgKiAgdG8gdGhpcyBhcmVhIG9mIHRoZSBOZXQtU05NUCBwcm9qZWN0LCB0aGUgbmV4dCBzdGVwIGlzIHRvCisgICAgICogIGlkZW50aWZ5IHRoZSByZWxhdGVkICJwdWJsaWMgaW50ZXJuYWwgQVBJIiByb3V0aW5lcy4KICAgICAgKgotICAgICAqICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGhlYWRlciBmaWxlIGlzIGEgcGxhY2Vob2xkZXIsCi0gICAgICogIHRvIGFsbG93IGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8gYWRvcHQgdGhlIG5ldyBoZWFkZXIgZmlsZSBuYW1lcy4KKyAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgZ2F0aGVyZWQKKyAgICAgKiAgdG9nZXRoZXIgaW50byBhIGNvbXBhbmlvbiAnbGlicmFyeS9taWJfYXBpLmgnIGhlYWRlciBmaWxlLgorICAgICAqICBbT3Igc29tZSBzdWl0YWJsZSBuYW1lXQorICAgICAqCisgICAgICogICAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlCisgICAgICogIHRyYWRpdGlvbmFsIGhlYWRlcnMgdGhhdCBwcm92aWRlZCB0aGUgYWJvdmUgZGVmaW5pdGlvbnMKKyAgICAgKiAgd2lsbCBwcm9iYWJseSBhbHNvIGNvdmVyIHRoZSByZWxldmFudCBpbnRlcm5hbCBBUEkgY2FsbHMuCisgICAgICogIEhlbmNlIHRoZXkgYXJlIGxpc3RlZCBoZXJlOgogICAgICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9taWIuaD4KICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9wYXJzZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiBiL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4KaW5kZXggM2M1ZDdjMi4uMWRiMDIzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbgorKysgYi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluCkBAIC0xLDYgKzEsMTAgQEAKLS8qIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCisvKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLwogLyogCiAgKiBuZXQtc25tcCBjb25maWd1cmF0aW9uIGhlYWRlciBmaWxlCisgKgorICogTk9URTogRE8gTk9UIEVESVQgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiBhcyB5b3VyIGNoYW5nZXMKKyAqICAgICAgIHdpbGwgYmUgb3ZlcndyaXR0ZW4uIFRoaXMgY29udGVudCBpcyBpbiBhY2NvbmZpZy5oIGFuZCBtZXJnZWQKKyAqICAgICAgIGludG8gaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiBieSBhdXRvaGVhZGVyLgogICovCiAvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKICAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCkBAIC0yNCwyNDYgKzI4LDI5IEBACiAgKi8KICNpZm5kZWYgTkVUU05NUF9OT19BVVRPQ09ORl9ERUZJTklUSU9OUwogCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSBpbnQzMl90ICovCi0jdW5kZWYgSEFWRV9JTlQzMl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVpbnQzMl90ICovCi0jdW5kZWYgSEFWRV9VSU5UMzJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1X2ludDMyX3QgKi8KLSN1bmRlZiBIQVZFX1VfSU5UMzJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSBpbnQ2NF90ICovCi0jdW5kZWYgSEFWRV9JTlQ2NF9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVpbnQ2NF90ICovCi0jdW5kZWYgSEFWRV9VSU5UNjRfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1X2ludDY0X3QgKi8KLSN1bmRlZiBIQVZFX1VfSU5UNjRfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSBpbnRwdHJfdCAqLwotI3VuZGVmIEhBVkVfSU5UUFRSX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdWludHB0cl90ICovCi0jdW5kZWYgSEFWRV9VSU5UUFRSX1QKLQotLyogZ290IHNvY2tsZW5fdD8gKi8KLSN1bmRlZiBIQVZFX1NPQ0tMRU5fVAotCi0vKiBnb3QgaW5fYWRkcl90PyAqLwotI3VuZGVmIEhBVkVfSU5fQUREUl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBnZXRkZXZzKCkgKi8KLSN1bmRlZiBIQVZFX0dFVERFVlMKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGRldnN0YXRfZ2V0ZGV2cygpICovCi0jdW5kZWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIDxuZXRpbmV0L2luX3BjYi5oPiAqLwotI3VuZGVmIEhBVkVfTkVUSU5FVF9JTl9QQ0JfSAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgPHN5cy9kaXNrbGFiZWwuaD4gKi8KLSN1bmRlZiBIQVZFX1NZU19ESVNLTEFCRUxfSAotCi0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciAocHJvY2Vzc29yKSBkZWZpbmVzIF9fRlVOQ1RJT05fXyBmb3IgeW91ICovCi0jdW5kZWYgSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRAotCi0vKiBvbiBhaXgsIGlmIHlvdSBoYXZlIHBlcmZzdGF0ICovCi0jdW5kZWYgSEFWRV9QRVJGU1RBVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgbGliZGIsIGxpYm5tIG9yIGxpYnJwbSwgcmVzcGVjdGl2ZWx5ICovCi0jdW5kZWYgSEFWRV9MSUJEQgotI3VuZGVmIEhBVkVfTElCTk0KLSN1bmRlZiBIQVZFX0xJQlJQTQotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgcGtnaW5mbyAqLwotI3VuZGVmIEhBVkVfUEtHSU5GTwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZ2V0aG9zdGJ5bmFtZSAqLwotI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRQotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBlcmxfZXZhbF9wdigpIGZ1bmN0aW9uICovCi0jdW5kZWYgSEFWRV9QRVJMX0VWQUxfUFZfTEMKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBQZXJsX2V2YWxfcHYoKSBmdW5jdGlvbiAqLwotI3VuZGVmIEhBVkVfUEVSTF9FVkFMX1BWX1VDCi0KLS8qIHByaW50aW5nIHN5c3RlbSAqLwotI3VuZGVmIEhBVkVfTFBTVEFUCi0jdW5kZWYgTFBTVEFUX1BBVEgKLSN1bmRlZiBIQVZFX1BSSU5UQ0FQCi0vKiBVc2UgZG1hbGxvYyB0byBkbyBtYWxsb2MgZGVidWdnaW5nPyAqLwotI3VuZGVmIEhBVkVfRE1BTExPQ19ICi0KLS8qIGxvY2F0aW9uIG9mIFVOSVgga2VybmVsICovCi0jZGVmaW5lIEtFUk5FTF9MT0MgIi92bXVuaXgiCi0KLS8qIGxvY2F0aW9uIG9mIG1vdW50IHRhYmxlIGxpc3QgKi8KLSNkZWZpbmUgRVRDX01OVFRBQiAiL2V0Yy9tbnR0YWIiCi0KLS8qIGxvY2F0aW9uIG9mIHN3YXAgZGV2aWNlIChvayBpZiBub3QgZm91bmQpICovCi0jdW5kZWYgRE1FTV9MT0MKLQotLyogQ29tbWFuZCB0byBnZW5lcmF0ZSBwcyBvdXRwdXQsIHRoZSBmaW5hbCBjb2x1bW4gbXVzdCBiZSB0aGUgcHJvY2VzcwotICAgbmFtZSB3aXRoT1VUIGFyZ3VtZW50cyAqLwotI2RlZmluZSBQU0NNRCAiL2Jpbi9wcyIKLQotLyogV2hlcmUgaXMgdGhlIHVuYW1lIGNvbW1hbmQgKi8KLSNkZWZpbmUgVU5BTUVQUk9HICIvYmluL3VuYW1lIgotCi0vKiBkZWZpbmUgaWYgeW91IGFyZSB1c2luZyBsaW51eCBhbmQgL3Byb2MvbmV0L2RldiBoYXMgdGhlIGNvbXByZXNzZWQKLSAgIGZpZWxkLCB3aGljaCBleGlzdHMgaW4gbGludXgga2VybmVscyAyLjIgYW5kIGdyZWF0ZXIuICovCi0jdW5kZWYgUFJPQ19ORVRfREVWX0hBU19DT01QUkVTU0VECi0KLS8qIGRlZmluZSBydGVudHJ5IHRvIG9ydGVudHJ5IG9uIFNZU1YgbWFjaGluZXMgKGFscGhhcykgKi8KLSN1bmRlZiBSVEVOVFJZCi0KLS8qIFVzZSBCU0QgNC40IHJvdXRpbmcgdGFibGUgZW50cmllcz8gKi8KLSN1bmRlZiBSVEVOVFJZXzRfNAotCi0vKiBEb2VzIHN0cnVjdCBzaWdhY3Rpb24gaGF2ZSBhIHNhX3NpZ2FjdGlvbiBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfU0lHQUNUSU9OX0hBU19TQV9TSUdBQ1RJT04KLQotLyogRG9lcyBzdHJ1Y3QgdG0gaGF2ZSBhIHRtX2dtdG9mZiBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfVE1fSEFTX1RNX0dNVE9GRkYKLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHIgaGF2ZSBhIHNhX2xlbiBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfU09DS0FERFJfSEFTX1NBX0xFTgotCi0vKiBEb2VzIHN0cnVjdCBzb2NrYWRkciBoYXZlIGEgc2FfZmFtaWx5MiBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfU09DS0FERFJfSEFTX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMgotCi0vKiBEb2VzIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGhhdmUgYSBzc19mYW1pbHkgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX1NTX0ZBTUlMWQotCi0vKiBEb2VzIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGhhdmUgYSBfX3NzX2ZhbWlseSBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9IQVNfX19TU19GQU1JTFkKLQotLyogRG9lcyBzdHJ1Y3QgaW42X2FkZHIgaGF2ZSBhIHM2X3VuLnNhNl9sYWRkIGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9JTjZfQUREUl9IQVNfUzZfVU5fU0E2X0xBRERSCi0KLS8qIHJ0ZW50cnkgc3RydWN0dXJlIHRlc3RzICovCi0jdW5kZWYgUlRFTlRSWV9SVF9ORVhUCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VTklUCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VTRQotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9SRUZDTlQKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfSEFTSAotCi0vKiBpZm5ldCBzdHJ1Y3R1cmUgdGVzdHMgKi8KLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURV9JRlNfVkFMVUUKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1NQRUVECi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9UWVBFCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JTUNBU1RTCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JUURST1BTCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX1NFQwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9OU0VDCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9OT1BST1RPCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PTUNBU1RTCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9YTkFNRQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT0JZVEVTCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JQllURVMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0FERFJMSVNUCi0KLS8qIHRjcHN0YXQudGNwc19yY3ZtZW1kcm9wICovCi0jdW5kZWYgU1RSVUNUX1RDUFNUQVRfSEFTX1RDUFNfUkNWTUVNRFJPUAotCi0vKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0RJU0NBUkQKLQotLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLSN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19OT1BPUlQKLQotLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLSN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19OT1BPUlRCQ0FTVAotCi0vKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0ZVTExTT0NLCi0KLS8qIGFycGhkLmF0X25leHQgKi8KLSN1bmRlZiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQKLQotLyogaWZhZGRyLmlmYV9uZXh0ICovCi0jdW5kZWYgU1RSVUNUX0lGQUREUl9IQVNfSUZBX05FWFQKLQotLyogaWZuZXQuaWZfbXR1ICovCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9NVFUKLQotLyogc3dkZXZ0LnN3X25ibGtzZW5hYmxlZCAqLwotI3VuZGVmIFNUUlVDVF9TV0RFVlRfSEFTX1NXX05CTEtTRU5BQkxFRAotCi0vKiBubGlzdC5uX3ZhbHVlICovCi0jdW5kZWYgU1RSVUNUX05MSVNUX0hBU19OX1ZBTFVFCi0KLS8qIG5saXN0NjQubl92YWx1ZSAqLwotI3VuZGVmIFNUUlVDVF9OTElTVDY0X0hBU19OX1ZBTFVFCi0KLS8qIGlwc3RhdCBzdHJ1Y3R1cmUgdGVzdHMgKi8KLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfQ0FOVEZPUldBUkQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfQ0FOVEZSQUcKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfREVMSVZFUkVECi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0ZSQUdEUk9QUEVECi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0ZSQUdUSU1FT1VUCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0xPQ0FMT1VUCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUFJPVE8KLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9ST1VURQotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19PRFJPUFBFRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19PRlJBR01FTlRTCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX1JFQVNTRU1CTEVECi0KLS8qIHZmc3N0YXQuZl9mcnNpemUgKi8KLSN1bmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUKLQotLyogdmZzc3RhdC5mX2ZpbGVzICovCi0jdW5kZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRklMRVMKLQotLyogc3RhdGZzIGlub2RlIHN0cnVjdHVyZSB0ZXN0cyovCi0jdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GSUxFUwotI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRkZSRUUKLSN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZBVkFJTAotCi0vKiBkZXNfa3Nfc3RydWN0LndlYWtfa2V5ICovCi0jdW5kZWYgU1RSVUNUX0RFU19LU19TVFJVQ1RfSEFTX1dFQUtfS0VZCi0KLS8qIGlmbmV0IG5lZWRzIHRvIGhhdmUgX0tFUk5FTCBkZWZpbmVkICovCi0jdW5kZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0KLS8qIHN5c2N0bCB3b3JrcyB0byBnZXQgYm9vdHRpbWUsIGV0Yy4uLiAqLwotI3VuZGVmIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwKLQotLyogZGVmaW5lIGlmIFNJT0NHSUZBRERSIGV4aXN0cyBpbiBzeXMvaW9jdGwuaCAqLwotI3VuZGVmIFNZU19JT0NUTF9IX0hBU19TSU9DR0lGQUREUgotCi0vKiBEZWZpbmUgaWYgc3RhdGZzIHRha2VzIDIgYXJncyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBoYXMKLSAgIHR5cGUgc3RydWN0IGZzX2RhdGEuIFtVbHRyaXhdICovCi0jdW5kZWYgU1RBVF9TVEFURlNfRlNfREFUQQotCi0vKiBEZWZpbmUgaWYgdGhlIFRDUCB0aW1lciBjb25zdGFudHMgaW4gPG5ldGluZXQvdGNwX3RpbWVyLmg+Ci0gICBkZXBlbmQgb24gdGhlIGludGVnZXIgdmFyaWFibGUgYGh6Jy4gIFtGcmVlQlNEIDQueF0gKi8KLSN1bmRlZiBUQ1BUVl9ORUVEU19IWgotCi0vKiBOb3QtdG8tYmUtY29tcGlsZWQgbWFjcm9zIGZvciB1c2UgYnkgY29uZmlndXJlIG9ubHkgKi8KLSNkZWZpbmUgY29uZmlnX3JlcXVpcmUoeCkKLSNkZWZpbmUgY29uZmlnX2V4Y2x1ZGUoeCkKLSNkZWZpbmUgY29uZmlnX2FyY2hfcmVxdWlyZSh4LHkpCi0jZGVmaW5lIGNvbmZpZ19wYXJzZV9kb3RfY29uZih3LHgseSx6KQotI2RlZmluZSBjb25maWdfYWRkX21pYih4KQotI2RlZmluZSBjb25maWdfYmVsb25nc19pbih4KQotI2RlZmluZSBjb25maWdfZXJyb3IoeCkKLSNkZWZpbmUgY29uZmlnX3dhcm5pbmcoeCkKLSAgCi0jaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKG1pbmd3MzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKLSNkZWZpbmUgRU5WX1NFUEFSQVRPUiAiOyIKLSNkZWZpbmUgRU5WX1NFUEFSQVRPUl9DSEFSICc7JwotI2Vsc2UKLSNkZWZpbmUgRU5WX1NFUEFSQVRPUiAiOiIKLSNkZWZpbmUgRU5WX1NFUEFSQVRPUl9DSEFSICc6JwotI2VuZGlmCi0KIC8qIGRlZmluaXRpb25zIGFkZGVkIGJ5IGNvbmZpZ3VyZSBvbi10aGUtZmx5ICovCiAKKyNkZWZpbmUgY29uZmlnX2JlbG9uZ3NfaW4oeCkKKworI2RlZmluZSBjb25maWdfZXhjbHVkZSh4KQorCisjZGVmaW5lIGNvbmZpZ19hcmNoX3JlcXVpcmUoeCx5KQorCisjZGVmaW5lIGNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoeCkKKworI2RlZmluZSBjb25maWdfcmVxdWlyZSh4KQorCisjZGVmaW5lIGNvbmZpZ19hZGRfbWliKHgpCisKKyNkZWZpbmUgY29uZmlnX3BhcnNlX2RvdF9jb25mKHcseCx5LHopCisKKyNkZWZpbmUgY29uZmlnX2Vycm9yKHgpCisKKyNkZWZpbmUgY29uZmlnX3dhcm5pbmcoeCkKKworLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorCiAvKiBEZWZpbmUgdG8gb25lIG9mIGBfZ2V0YjY3JywgYEdFVEI2NycsIGBnZXRiNjcnIGZvciBDcmF5LTIgYW5kIENyYXktWU1QCiAgICBzeXN0ZW1zLiBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciBgYWxsb2NhLmMnIHN1cHBvcnQgb24gdGhvc2Ugc3lzdGVtcy4KICAgICovCkBAIC0yNzIsNiArNTksMjEgQEAKIC8qIERlZmluZSB0byAxIGlmIHVzaW5nIGBhbGxvY2EuYycuICovCiAjdW5kZWYgQ19BTExPQ0EKIAorLyogbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2UgKi8KKyN1bmRlZiBETUVNX0xPQworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24gc3VwcG9ydCAqLworI3VuZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCisKKy8qIEVudmlyb25tZW50IHNlcGFyYXRvciBjaGFyYWN0ZXIgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzLiAqLworI3VuZGVmIEVOVl9TRVBBUkFUT1IKKworLyogRW52aXJvbm1lbnQgc2VwYXJhdG9yIGNoYXJhY3RlciBzdXJyb3VuZGVkIGJ5IHNpbmdsZSBxdW90ZXMuICovCisjdW5kZWYgRU5WX1NFUEFSQVRPUl9DSEFSCisKKy8qIGxvY2F0aW9uIG9mIG1vdW50IHRhYmxlIGxpc3QgKi8KKyN1bmRlZiBFVENfTU5UVEFCCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgQUVTX2NmYjEyOF9lbmNyeXB0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0FFU19DRkIxMjhfRU5DUllQVAogCkBAIC0yOTEsOCArOTMsOCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc20vdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9BU01fVFlQRVNfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJjb3B5JyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0JDT1BZCisvKiBEZWZpbmUgaWYgdXNpbmcgTVlfSU5JVCgpIGNhdXNlcyBhIGxpbmtlciBlcnJvciAqLworI3VuZGVmIEhBVkVfQlJPS0VOX0xJQk1ZU1FMQ0xJRU5UCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2dldG5leHQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfQ0dFVE5FWFQKQEAgLTMwMCw5ICsxMDIsMjggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2hvd24nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfQ0hPV04KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9ja19nZXR0aW1lJyBsaWJyYXJ5ICovCisjdW5kZWYgSEFWRV9DTE9DS19HRVRUSU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvc2VkaXInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQ0xPU0VESVIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjb21fZXJyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQ09NX0VSUl9ICisKIC8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBDb3VudGVyNjQnLiAqLwogI3VuZGVmIEhBVkVfQ09VTlRFUjY0CiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc2Vuc29yc19nZXRfYWxsX3N1YmZlYXR1cmVzJywKKyAgIGFuZCB0byAwIGlmIHlvdSBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfU0VOU09SU19HRVRfQUxMX1NVQkZFQVRVUkVTCisKKy8qIGRlZmluZSB0byAxIGlmIHlvdSBoYXZlIElSRV9DQUNIRSBkZWZpbmVkIGluIDxpbmV0L2lwLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUKKworLyogZGVmaW5lIGlmIHlvdSBoYXZlIGRldnN0YXRfZ2V0ZGV2cygpICovCisjdW5kZWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLgogICAgKi8KICN1bmRlZiBIQVZFX0RJUkVOVF9ICkBAIC0zMTMsOSArMTM0LDE4IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsb3BlbicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9ETE9QRU4KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRE1BTExPQ19ICisKKy8qIFNldCBpZiB0aGUgZHBrZy1xdWVyeSBjb21tYW5kIGlzIGF2YWlsYWJsZSAqLworI3VuZGVmIEhBVkVfRFBLR19RVUVSWQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0VSUl9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXQvY29tX2Vyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VUX0NPTV9FUlJfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV2YWxfcHYnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRVZBTF9QVgogCkBAIC0zMjUsMjQgKzE1NSw0MiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFVlBfTURfQ1RYX2Rlc3Ryb3knIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRVZQX01EX0NUWF9ERVNUUk9ZCiAKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBFVlBfc2hhMjI0LzI1NiBpbiBvcGVuc3NsICovCisjdW5kZWYgSEFWRV9FVlBfU0hBMjI0CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBFVlBfc2hhMzg0LzI1NiBpbiBvcGVuc3NsICovCisjdW5kZWYgSEFWRV9FVlBfU0hBMzg0CisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhlY3YnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRVhFQ1YKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0ZDTlRMX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmZ2V0Y191bmxvY2tlZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GR0VUQ19VTkxPQ0tFRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZsb2NrZmlsZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GTE9DS0ZJTEUKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0ZPUksKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmc3RhYi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0ZTVEFCX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdW5sb2NrZmlsZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GVU5MT0NLRklMRQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdhaV9zdHJlcnJvcicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HQUlfU1RSRVJST1IKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRhZGRyaW5mbycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRBRERSSU5GTwogCisvKiBkZWZpbmUgaWYgeW91IGhhdmUgZ2V0ZGV2cygpICovCisjdW5kZWYgSEFWRV9HRVRERVZTCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0ZHRhYmxlc2l6ZScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVREVEFCTEVTSVpFCiAKQEAgLTM1Miw2ICsyMDAsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Z3JuYW0nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUR1JOQU0KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnlhZGRyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnluYW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnluYW1lMicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FMgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RuYW1lJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEhPU1ROQU1FCiAKQEAgLTM2NCw2ICsyMjEsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRtbnRlbnQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUTU5URU5UCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0b3B0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVE9QVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdldG9wdC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0dFVE9QVF9ICiAKQEAgLTM3OSw2ICsyMzksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUVElNRU9GREFZCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dmZzc3RhdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRWRlNTVEFUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z3JwLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfR1JQX0gKIApAQCAtMzg4LDI5ICsyNTEsMzIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWZfZnJlZW5hbWVpbmRleCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9JRl9GUkVFTkFNRUlOREVYCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWZfaW5kZXh0b25hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSUZfSU5ERVhUT05BTUUKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9uYW1laW5kZXgnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSUZfTkFNRUlOREVYCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWZfbmFtZXRvaW5kZXgnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVgKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmRleCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9JTkRFWAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbmV0L2NvbW1vbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lORVRfQ09NTU9OX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbmV0L2lwLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU5FVF9JUF9ICiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW5ldC9taWIyLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfSU5FVF9NSUIyX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDE2X3QnLiAqLwotI3VuZGVmIEhBVkVfSU5UMTZfVAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmV0X250b3AnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU5FVF9OVE9QCiAKLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQzMl90Jy4gKi8KLSN1bmRlZiBIQVZFX0lOVDMyX1QKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9wdG9uJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfUFRPTgogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50NjRfdCcuICovCi0jdW5kZWYgSEFWRV9JTlQ2NF9UCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQ4X3QnLiAqLwotI3VuZGVmIEhBVkVfSU5UOF9UCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluaXRncm91cHMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU5JVEdST1VQUwogCiAvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50bWF4X3QnLiAqLwogI3VuZGVmIEhBVkVfSU5UTUFYX1QKQEAgLTQyMSwyMSArMjg3LDQyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW5fYWRkcl90Jy4gKi8KKyN1bmRlZiBIQVZFX0lOX0FERFJfVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlvY3Rscy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0lPQ1RMU19ICiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9JT19ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aXBobHBhcGkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JUEhMUEFQSV9ICisKKy8qIFNldCBpZiBJUF9QS1RJTkZPIGlzIHVzYWJsZSAqLworI3VuZGVmIEhBVkVfSVBfUEtUSU5GTworCisvKiBTZXQgaWYgSVBfUkVDVkRTVEFERFIgaXMgdXNhYmxlICovCisjdW5kZWYgSEFWRV9JUF9SRUNWRFNUQUREUgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtpbmZvX2dldF9jcHVzJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0tJTkZPX0dFVF9DUFVTCiAKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSAvZGV2L2ttZW0gKi8KKyN1bmRlZiBIQVZFX0tNRU0KKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrbmxpc3QnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfS05MSVNUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0tSQjVfQVVUSF9DT05fR0VUU0VORFNVQktFWQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGtzdGF0Lmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfS1NUQVRfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9nZXRwcm9jMicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9LVk1fR0VUUFJPQzIKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fZ2V0cHJvY3MnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfS1ZNX0dFVFBST0NTCiAKQEAgLTQ0OCwzMCArMzM1LDI0IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bV9vcGVuZmlsZXMnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfS1ZNX09QRU5GSUxFUwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNyeXB0bycgbGlicmFyeSAoLWxjcnlwdG8pLiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE9wZW5TU0wgbGlicmFyeSAoLWxjcnlwdG8gb3IgLWxlYXkzMikuICovCiAjdW5kZWYgSEFWRV9MSUJDUllQVE8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCi0jdW5kZWYgSEFWRV9MSUJETAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVmZW5jZScgbGlicmFyeSAoLWxlZmVuY2UpLiAqLwotI3VuZGVmIEhBVkVfTElCRUZFTkNFCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZWxmJyBsaWJyYXJ5ICgtbGVsZikuICovCiAjdW5kZWYgSEFWRV9MSUJFTEYKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrc3RhdCcgbGlicmFyeSAoLWxrc3RhdCkuICovCiAjdW5kZWYgSEFWRV9MSUJLU1RBVAogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bScgbGlicmFyeSAoLWxrdm0pLiAqLwotI3VuZGVmIEhBVkVfTElCS1ZNCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbScgbGlicmFyeSAoLWxtKS4gKi8KLSN1bmRlZiBIQVZFX0xJQk0KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtbGQnIGxpYnJhcnkgKC1sbWxkKS4gKi8KICN1bmRlZiBIQVZFX0xJQk1MRAogCisvKiBEZWZpbmUgdG8gMSBpZiA8bmV0bGluay9uZXRsaW5rLmg+IHByb3ZpZGVzIHRoZSBsaWJubDMgQVBJICovCisjdW5kZWYgSEFWRV9MSUJOTDMKKworLyogZGVmaW5lIGlmIHlvdSBoYXZlIGxpYm5tICovCisjdW5kZWYgSEFWRV9MSUJOTQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5zbCcgbGlicmFyeSAoLWxuc2wpLiAqLwogI3VuZGVmIEhBVkVfTElCTlNMCiAKQEAgLTQ4MSwxMiArMzYyLDMzIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBrY3MxMScgbGlicmFyeSAoLWxwa2NzMTEpLiAqLwogI3VuZGVmIEhBVkVfTElCUEtDUzExCiAKKy8qIGRlZmluZSBpZiB5b3UgaGF2ZSBCU0QgcGtnLW5nICovCisjdW5kZWYgSEFWRV9MSUJQS0cKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdGhyZWFkJyBsaWJyYXJ5ICgtbHB0aHJlYWQpLiAqLworI3VuZGVmIEhBVkVfTElCUFRIUkVBRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJwbScgbGlicmFyeSAoLWxycG0pLiAqLworI3VuZGVmIEhBVkVfTElCUlBNCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUlNBZ2x1ZScgbGlicmFyeSAoLWxSU0FnbHVlKS4gKi8KICN1bmRlZiBIQVZFX0xJQlJTQUdMVUUKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByc2FyZWYnIGxpYnJhcnkgKC1scnNhcmVmKS4gKi8KICN1bmRlZiBIQVZFX0xJQlJTQVJFRgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNyZXMnIGxpYnJhcnkgKC1sc3JlcykuICovCisjdW5kZWYgSEFWRV9MSUJTUkVTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NoMicgbGlicmFyeSAoLWxzc2gyKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTSDIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2wnIGxpYnJhcnkgKC1sc3NsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIGBzc2wnIGxpYnJhcnkgc3VwcG9ydHMgRFRMUyAoLWxzc2wpLiAqLworI3VuZGVmIEhBVkVfTElCU1NMX0RUTFMKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9MSU1JVFNfSAogCkBAIC00OTYsNiArMzk4LDEyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2hkcmVnLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElOVVhfSERSRUdfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L25ldGxpbmsuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU5VWF9ORVRMSU5LX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9ydG5ldGxpbmsuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU5VWF9SVE5FVExJTktfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3Rhc2tzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElOVVhfVEFTS1NfSAogCkBAIC01MDUsNiArNDEzLDEyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2FsdGltZV9yJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0xPQ0FMVElNRV9SCiAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBsb25nIGxvbmcgaW50Jy4gKi8KKyN1bmRlZiBIQVZFX0xPTkdfTE9OR19JTlQKKworLyogU2V0IGlmIHRoZSBscHN0YXQgY29tbWFuZCBpcyBhdmFpbGFibGUgKi8KKyN1bmRlZiBIQVZFX0xQU1RBVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxyYW5kNDgnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTFJBTkQ0OAogCkBAIC01MjMsMTUgKzQzNywxMiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9NQUxMT0NfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbWNweScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9NRU1DUFkKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1tb3ZlJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX01FTU1PVkUKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9NRU1PUllfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgbWliMl9pcElmU3RhdHNFbnRyeV90Jy4gKi8KKyN1bmRlZiBIQVZFX01JQjJfSVBJRlNUQVRTRU5UUllfVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1rc3RlbXAnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTUtTVEVNUAogCkBAIC01NDQsNiArNDU1LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bXRhYi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX01UQUJfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5idXRpbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05CVVRJTF9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmRpci5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuICovCiAjdW5kZWYgSEFWRV9ORElSX0gKIApAQCAtNTc0LDYgKzQ4OCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQ2L3RjcDZfdmFyLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTkVUSU5FVDZfVENQNl9WQVJfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaWNtcDYuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRJTkVUX0lDTVA2X0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2ljbXBfdmFyLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTkVUSU5FVF9JQ01QX1ZBUl9ICiAKQEAgLTU4Myw2ICs1MDAsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTkVUSU5FVF9JTl9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbl9wY2IuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX1BDQl9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbl9zeXN0bS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAogCkBAIC02MjUsNiArNTQ1LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aXB4L2lweC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVElQWF9JUFhfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGxpbmsvbmV0bGluay5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVExJTktfTkVUTElOS19ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L2lmX2FycC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVF9JRl9BUlBfSAogCkBAIC02NDYsNiArNTY5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L3JvdXRlLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTkVUX1JPVVRFX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYG5mZHNfdCcuICovCisjdW5kZWYgSEFWRV9ORkRTX1QKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBubGlzdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9OTElTVAogCkBAIC02NTgsNiArNTg0LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBvZmY2NF90Jy4gKi8KICN1bmRlZiBIQVZFX09GRjY0X1QKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBvcGVuZGlyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX09QRU5ESVIKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2Flcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX09QRU5TU0xfQUVTX0gKIApAQCAtNjc2LDIxICs2MDUsNDUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3NyZWxkYXRlLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfT1NSRUxEQVRFX0gKIAorLyogZGVmaW5lIGlmIHlvdSBoYXZlIHBjaV9sb29rdXBfbmFtZSgpICovCisjdW5kZWYgSEFWRV9QQ0lfTE9PS1VQX05BTUUKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwY2kvcGNpLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUENJX1BDSV9ICiAKKy8qIG9uIGFpeCwgaWYgeW91IGhhdmUgcGVyZnN0YXQgKi8KKyN1bmRlZiBIQVZFX1BFUkZTVEFUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGB0aGUgcGVybF9ldmFsX3B2JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVl9MQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFBlcmxfZXZhbF9wdicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QRVJMX0VWQUxfUFZfVUMKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwaWNsLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUElDTF9ICiAKKy8qIGRlZmluZSBpZiB5b3UgaGF2ZSBwa2dpbmZvICovCisjdW5kZWYgSEFWRV9QS0dJTkZPCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGtnaW5mby5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BLR0lORk9fSAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBrZ2xvY3MuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9QS0dMT0NTX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwa2cuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QS0dfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBvbGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUE9MTAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHByZWFkNjQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUFJFQUQ2NAogCisvKiBTZXQgaWYgL2V0Yy9wcmludGNhcCBleGlzdHMgKi8KKyN1bmRlZiBIQVZFX1BSSU5UQ0FQCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHRocmVhZC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BUSFJFQURfSAogCkBAIC03MDMsNiArNjU2LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmFuZG9tJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1JBTkRPTQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWRkaXInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkVBRERJUgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlZ2NvbXAnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUkVHQ09NUAogCkBAIC03MTUsNiArNjcxLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cnBtL2hlYWRlci5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1JQTV9IRUFERVJfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHJwbS9ycG1maWxldXRpbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1JQTV9SUE1GSUxFVVRJTF9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cnBtL3JwbWxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1JQTV9SUE1MSUJfSAogCkBAIC03MzAsNiArNjg5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VsZWN0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NFTEVDVAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNlbnNvcnMvc2Vuc29ycy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NFTlNPUlNfU0VOU09SU19ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZW52JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NFVEVOVgogCkBAIC03NjksOSArNzMxLDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2hvbGQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0lHSE9MRAogCisvKiBEZWZpbmUgaWYgU0lHSFVQIGlzIGRlZmluZWQgaW4gPHNpZ25hbC5oPi4gKi8KKyN1bmRlZiBIQVZFX1NJR0hVUAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ25hbCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TSUdOQUwKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdwcm9jbWFzaycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdQUk9DTUFTSworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3NldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TSUdTRVQKIApAQCAtNzgxLDcgKzc0OSwxMCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU09DS0VUCiAKLS8qIERlZmluZSBpZiB0eXBlIHNzaXplX3QgaXMgYXZhaWxhYmxlICovCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc29ja2xlbl90Jy4gKi8KKyN1bmRlZiBIQVZFX1NPQ0tMRU5fVAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc3NpemVfdCcuICovCiAjdW5kZWYgSEFWRV9TU0laRV9UCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RhdGZzJyBmdW5jdGlvbi4gKi8KQEAgLTc5MCw5ICs3NjEsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdGF0dmZzJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NUQVRWRlMKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRhcmcuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVERBUkdfSAotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NURElOVF9ICiAKQEAgLTgwNSw5ICs3NzMsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjYXNlc3RyJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NUUkNBU0VTVFIKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjaHInIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU1RSQ0hSCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NUUkRVUAogCkBAIC04MzgsMTIgKzgwMywyMjAgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TVFJUT1VMCiAKLS8qIERlZmluZSB0byAxIGlmIGBzcGVlZF9oaScgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgZXRodG9vbF9jbWQnLiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsbCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT1VMTAorCisvKiBEZWZpbmUgdG8gMSBpZiBgYXRfbmV4dCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBhcnBoZCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgd2Vha19rZXknIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgZGVzX2tzX3N0cnVjdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfREVTX0tTX1NUUlVDVF9XRUFLX0tFWQorCisvKiBEZWZpbmUgdG8gMSBpZiBgZF90eXBlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGRpcmVudCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfRElSRU5UX0RfVFlQRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgc3BlZWRfaGknIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgZXRodG9vbF9jbWQnLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX0VUSFRPT0xfQ01EX1NQRUVEX0hJCiAKLS8qIERlZmluZSB0byAxIGlmIGBzaW42X3Njb3BlX2lkJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCBzb2NrYWRkcl9pbjYnLiAqLworLyogRGVmaW5lIHRvIDEgaWYgYGlmYV9uZXh0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmYWRkcicuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZBRERSX0lGQV9ORVhUCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9hZGRyaGVhZC50cWhfZmlyc3QnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0FERFJIRUFEX1RRSF9GSVJTVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfYWRkcmxpc3QnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0FERFJMSVNUCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9iYXVkcmF0ZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEUKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2JhdWRyYXRlLmlmc192YWx1ZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9pYnl0ZXMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lCWVRFUworCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfaW1jYXN0cycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSU1DQVNUUworCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfaXFkcm9wcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSVFEUk9QUworCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfbGFzdGNoYW5nZS50dl9uc2VjJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX05TRUMKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2xhc3RjaGFuZ2UudHZfc2VjJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX1NFQworCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfbXR1JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9NVFUKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX25vcHJvdG8nIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX05PUFJPVE8KKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX29ieXRlcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT0JZVEVTCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9vbWNhc3RzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PTUNBU1RTCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9zcGVlZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfU1BFRUQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX3R5cGUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1RZUEUKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX3huYW1lJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9YTkFNRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXA2c19leHRoZHJ0b29sb25nICcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcDZzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUDZTVEFUX0lQNlNfRVhUSERSVE9PTE9OR18KKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19jYW50Zm9yd2FyZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZPUldBUkQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19jYW50ZnJhZycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZSQUcKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19kZWxpdmVyZWQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0RFTElWRVJFRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX2ZyYWdkcm9wcGVkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHRFJPUFBFRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX2ZyYWdtZW50ZWQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdNRU5URUQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19mcmFndGltZW91dCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR1RJTUVPVVQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19sb2NhbG91dCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTE9DQUxPVVQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19ub3Byb3RvJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1BST1RPCisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfbm9yb3V0ZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9ST1VURQorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX29kcm9wcGVkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRFJPUFBFRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX29mcmFnbWVudHMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09GUkFHTUVOVFMKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19yZWFzc2VtYmxlZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfUkVBU1NFTUJMRUQKKworLyogRGVmaW5lIHRvIDEgaWYgYG1fY2xmcmVlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IG1ic3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfTUJTVEFUX01fQ0xGUkVFCisKKy8qIERlZmluZSB0byAxIGlmIGBtX2NsdXN0ZXJzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IG1ic3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfTUJTVEFUX01fQ0xVU1RFUlMKKworLyogRGVmaW5lIHRvIDEgaWYgYG1fbWJ1ZnMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgbWJzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9NQlNUQVRfTV9NQlVGUworCisvKiBEZWZpbmUgdG8gMSBpZiBgbl92YWx1ZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBubGlzdDY0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9OTElTVDY0X05fVkFMVUUKKworLyogRGVmaW5lIHRvIDEgaWYgYG5fdmFsdWUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgbmxpc3QnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUKKworLyogRGVmaW5lIHRvIDEgaWYgYHJ0X2RzdCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBydGVudHJ5Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgcnRfaGFzaCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBydGVudHJ5Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0hBU0gKKworLyogRGVmaW5lIHRvIDEgaWYgYHJ0X25leHQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgcnRlbnRyeScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9ORVhUCisKKy8qIERlZmluZSB0byAxIGlmIGBydF9yZWZjbnQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgcnRlbnRyeScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9SRUZDTlQKKworLyogRGVmaW5lIHRvIDEgaWYgYHJ0X3VuaXQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgcnRlbnRyeScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VTklUCisKKy8qIERlZmluZSB0byAxIGlmIGBydF91c2UnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgcnRlbnRyeScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VU0UKKworLyogRGVmaW5lIHRvIDEgaWYgYHNhX3NpZ2FjdGlvbicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzaWdhY3Rpb24nLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04KKworLyogRGVmaW5lIHRvIDEgaWYgYHNpbjZfc2NvcGVfaWQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc29ja2FkZHJfaW42Jy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRAogCisvKiBEZWZpbmUgdG8gMSBpZiBgc2FfbGVuJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHNvY2thZGRyJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9MRU4KKworLyogRGVmaW5lIHRvIDEgaWYgYHNhX3VuaW9uLnNhX2dlbmVyaWMuc2FfZmFtaWx5MicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdAorICAgc29ja2FkZHInLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMgorCisvKiBEZWZpbmUgdG8gMSBpZiBgc3NfZmFtaWx5JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZCisKKy8qIERlZmluZSB0byAxIGlmIGBfX3NzX2ZhbWlseScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX19fU1NfRkFNSUxZCisKKy8qIERlZmluZSB0byAxIGlmIGBmX2ZhdmFpbCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0ZnMnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZBVkFJTAorCisvKiBEZWZpbmUgdG8gMSBpZiBgZl9mZnJlZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0ZnMnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZGUkVFCisKKy8qIERlZmluZSB0byAxIGlmIGBmX2ZpbGVzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXRmcycuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRklMRVMKKworLyogRGVmaW5lIHRvIDEgaWYgYGZfZmxhZ3MnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdGZzJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GTEFHUworCisvKiBEZWZpbmUgdG8gMSBpZiBgZl9mcnNpemUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdGZzJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GUlNJWkUKKworLyogRGVmaW5lIHRvIDEgaWYgYGZfZmlsZXMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdHZmcycuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZJTEVTCisKKy8qIERlZmluZSB0byAxIGlmIGBmX2Zyc2l6ZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0dmZzJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRlJTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIGBtbnRfZGlyJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXR2ZnMnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfTU5UX0RJUgorCisvKiBEZWZpbmUgdG8gMSBpZiBgc3dfbmJsa3NlbmFibGVkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN3ZGV2dCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1dERVZUX1NXX05CTEtTRU5BQkxFRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgdGNwX3Jjdm1lbWRyb3AnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdGNwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVENQU1RBVF9UQ1BfUkNWTUVNRFJPUAorCisvKiBEZWZpbmUgdG8gMSBpZiBgdHpfZHN0dGltZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB0aW1lem9uZScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVElNRVpPTkVfVFpfRFNUVElNRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdG1fZ210b2ZmJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHRtJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYKKworLyogRGVmaW5lIHRvIDEgaWYgYHVkcHNfZGlzY2FyZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB1ZHBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRElTQ0FSRAorCisvKiBEZWZpbmUgdG8gMSBpZiBgdWRwc19mdWxsc29jaycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB1ZHBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRlVMTFNPQ0sKKworLyogRGVmaW5lIHRvIDEgaWYgYHVkcHNfaXBhY2tldHMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdWRwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0lQQUNLRVRTCisKKy8qIERlZmluZSB0byAxIGlmIGB1ZHBzX25vcG9ydCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB1ZHBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUCisKKy8qIERlZmluZSB0byAxIGlmIGB1ZHBzX25vcG9ydGJjYXN0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHVkcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlRCQ0FTVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgdWRwc19vcGFja2V0cycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB1ZHBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfT1BBQ0tFVFMKKworLyogRGVmaW5lIHRvIDEgaWYgYHBnc3dhcGluJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHV2bWV4cCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVVZNRVhQX1BHU1dBUElOCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3lzY29uZicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TWVNDT05GCiAKQEAgLTg2Niw2ICsxMDM5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2Rpc2tpby5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19ESVNLSU9fSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9kaXNrbGFiZWwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfRElTS0xBQkVMX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZGtpby5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19ES0lPX0gKIApAQCAtOTE1LDYgKzEwOTEsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TWVNfUEFSQU1fSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wb2xsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1BPTExfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wb29sLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX1BPT0xfSAogCkBAIC05NzgsNiArMTE1Nyw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90Y3BpcHN0YXRzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX1RDUElQU1RBVFNfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FQl9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVvdXQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TWVNfVElNRU9VVF9ICiAKQEAgLTEwMzIsNiArMTIxNCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRpbWVzJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1RJTUVTCiAKKy8qIERlZmluZSBpZiBhIHRpbWV6b25lIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGluIDxzeXMvdGltZS5oPiAqLworI3VuZGVmIEhBVkVfVElNRVpPTkVfVkFSSUFCTEUKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1ZnMvZmZzL2ZzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVUZTX0ZGU19GU19ICiAKQEAgLTEwNDcsMTggKzEyMzIsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1ZnMvdWZzL3F1b3RhLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVUZTX1VGU19RVU9UQV9ICiAKLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50MTZfdCcuICovCi0jdW5kZWYgSEFWRV9VSU5UMTZfVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDMyX3QnLiAqLwotI3VuZGVmIEhBVkVfVUlOVDMyX1QKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnQ2NF90Jy4gKi8KLSN1bmRlZiBIQVZFX1VJTlQ2NF9UCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50OF90Jy4gKi8KLSN1bmRlZiBIQVZFX1VJTlQ4X1QKLQogLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnRtYXhfdCcuICovCiAjdW5kZWYgSEFWRV9VSU5UTUFYX1QKIApAQCAtMTA3MSw2ICsxMjQ0LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVU5JU1REX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQnLiAqLworI3VuZGVmIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVzbGVlcCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9VU0xFRVAKIApAQCAtMTA4NiwxNyArMTI2MiwxNCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dm0vdXZtX3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVVZNX1VWTV9QQVJBTV9ICiAKLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1X2ludDE2X3QnLiAqLwotI3VuZGVmIEhBVkVfVV9JTlQxNl9UCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHZhbGdyaW5kL21lbWNoZWNrLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVkFMR1JJTkRfTUVNQ0hFQ0tfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdV9pbnQzMl90Jy4gKi8KLSN1bmRlZiBIQVZFX1VfSU5UMzJfVAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2YWxncmluZC92YWxncmluZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1ZBTEdSSU5EX1ZBTEdSSU5EX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVfaW50NjRfdCcuICovCi0jdW5kZWYgSEFWRV9VX0lOVDY0X1QKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVfaW50OF90Jy4gKi8KLSN1bmRlZiBIQVZFX1VfSU5UOF9UCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHZhbGlkYXRvci92YWxpZGF0b3ItY29uZmlnLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVkFMSURBVE9SX1ZBTElEQVRPUl9DT05GSUdfSAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHZtL3N3YXBfcGFnZXIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9WTV9TV0FQX1BBR0VSX0gKQEAgLTExMTMsMTggKzEyODYsNjIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdnNucHJpbnRmJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1ZTTlBSSU5URgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbmRvd3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5ET1dTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrMi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTlNPQ0syX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfV0lOU09DS19ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XUzJUQ1BJUF9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8eHRpLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfWFRJX0gKIAorLyogbG9jYXRpb24gb2YgVU5JWCBrZXJuZWwgKi8KKyN1bmRlZiBLRVJORUxfTE9DCisKKy8qIFBhdGggdG8gdGhlIGxwc3RhdCBjb21tYW5kICovCisjdW5kZWYgTFBTVEFUX1BBVEgKKworLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4KKyAgICovCisjdW5kZWYgTFRfT0JKRElSCisKKy8qIGRlZmluZSBpZiBhZ2VudHggdHJhbnNwb3J0IGlzIHRvIHVzZSBkb21haW4gc29ja2V0cyBvbmx5ICovCisjdW5kZWYgTkVUU05NUF9BR0VOVFhfRE9NX1NPQ0tfT05MWQorCiAvKiBVbml4IGRvbWFpbiBzb2NrZXQgZm9yIEFnZW50WCBtYXN0ZXItc3ViYWdlbnQgY29tbXVuaWNhdGlvbiAqLwogI3VuZGVmIE5FVFNOTVBfQUdFTlRYX1NPQ0tFVAogCiAvKiBEZWZpbmUgaWYgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIHVuc3VwcG9ydGVkICovCiAjdW5kZWYgTkVUU05NUF9CUk9LRU5fSU5MSU5FCiAKKy8qICJEZWZpbmUgaWYgY3J5dG9ncmFwaHkgc3VwcG9ydCBpcyBwb3NzaWJsZSIgKi8KKyN1bmRlZiBORVRTTk1QX0NBTl9ET19DUllQVE8KKworLyogc3lzY3RsIHdvcmtzIHRvIGdldCBib290dGltZSwgZXRjLi4uICovCisjdW5kZWYgTkVUU05NUF9DQU5fVVNFX1NZU0NUTAorCisvKiBjb25maWd1cmUgb3B0aW9ucyBzcGVjaWZpZWQgKi8KKyN1bmRlZiBORVRTTk1QX0NPTkZJR1VSRV9PUFRJT05TCisKKy8qIGRlZmF1bHQgbG9jYXRpb24gdG8gbG9vayBmb3IgbWlicyB0byBsb2FkIHVzaW5nIHRoZSBhYm92ZSB0b2tlbnMgYW5kL29yCisgICB0aG9zZSBpbiB0aGUgTUlCUyBlbnZyaW9ubWVudCB2YXJpYWJsZSAqLworI3VuZGVmIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTCisKKy8qIGRlZmF1bHQgbWliIGZpbGVzIHRvIGxvYWQsIHNwZWNpZmllZCBieSBwYXRoLiAqLworI3VuZGVmIE5FVFNOTVBfREVGQVVMVF9NSUJGSUxFUworCisvKiBEZWZpbmUgaWYgbm8gYWdlbnQgaXMgYnVpbHQgKi8KKyN1bmRlZiBORVRTTk1QX0RJU0FCTEVfQUdFTlQKKworLyogRGVmaW5lIGlmIG5vIGFwcHMgYXJlIGJ1aWx0ICovCisjdW5kZWYgTkVUU05NUF9ESVNBQkxFX0FQUFMKKwogLyogRGVmaW5lIGlmIERFUyBlbmNyeXB0aW9uIHNob3VsZCBub3QgYmUgc3VwcG9ydGVkICovCiAjdW5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUwogCkBAIC0xMTQzLDkgKzEzNjAsMTAzIEBACiAvKiBEZWZpbmUgaWYgU05NUHYyYyBjb2RlIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgKi8KICN1bmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwogCisvKiBEZWZpbmUgaWYgeW91IGFyZSBlbWJlZGRpbmcgcGVybCBpbiB0aGUgbWFpbiBhZ2VudC4gKi8KKyN1bmRlZiBORVRTTk1QX0VNQkVEREVEX1BFUkwKKworLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KKyN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisKKy8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byByZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdCBieSBkZWZhdWx0ICovCisjdW5kZWYgTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgTUZEIG1vZHVsZSByZXdyaXRlcyAqLworI3VuZGVmIE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUworCisvKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBib3RoIGF1dGhlbnRpY2F0aW9uIGFuZCBwcml2YWN5CisgICBzdXBwb3J0LiAqLworI3VuZGVmIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCisKKy8qIHRlc3RpbmcgY29kZSBzZWN0aW9ucy4gKi8KKyN1bmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKKworLyogU2hvdWxkIGV2YWx1YXRlIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlmIGRlZmluZWQgKi8KKyN1bmRlZiBORVRTTk1QX0ZVTkNUSU9OCisKKy8qIGlmbmV0IG5lZWRzIHRvIGhhdmUgX0tFUk5FTCBkZWZpbmVkICovCisjdW5kZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKworLyogaWZuZXQgbmVlZHMgdG8gaGF2ZSBfS0VSTkVMX1NUUlVDVFVSRVMgZGVmaW5lZCAqLworI3VuZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgbm9uLWVzc2VudGlhbCBjb2RlIGZlYXR1cmVzLiAqLworI3VuZGVmIE5FVFNOTVBfTUlOSU1BTF9DT0RFCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBvbmx5IHN1cHBvcnQgc2VuZGluZyBub3RpZmljYXRpb25zICovCisjdW5kZWYgTkVUU05NUF9OT1RJRllfT05MWQorCisvKiBEZWZpbmUgdG8gc3VwcHJlc3MgaW5jbHVzaW9uIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICovCisjdW5kZWYgTkVUU05NUF9OT19ERVBSRUNBVEVEX0ZVTkNUSU9OUworCisvKiBJZiB5b3UgZG9uJ3Qgd2FudCB0aGUgYWdlbnQgdG8gcmVwb3J0IG9uIHZhcmlhYmxlcyBpdCBkb2Vzbid0IGhhdmUgZGF0YSBmb3IKKyAgICovCisjdW5kZWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKKworLyogSWYgd2UgZG9uJ3Qgd2FudCB0byB1c2Uga21lbS4gKi8KKyN1bmRlZiBORVRTTk1QX05PX0tNRU1fVVNBR0UKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuaW5nIHN1cHBvcnQgZnJvbSB0aGUgY29kZSAqLworI3VuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKworLyogSWYgeW91IGRvbid0IGhhdmUgcm9vdCBhY2Nlc3MgZG9uJ3QgZXhpdCB1cG9uIGttZW0gZXJyb3JzICovCisjdW5kZWYgTkVUU05NUF9OT19ST09UX0FDQ0VTUworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBTRVQvd3JpdGUgYWNjZXNzIGZyb20gdGhlIGNvZGUgKi8KKyN1bmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKworLyogdW1hc2sgcGVybWlzc2lvbnMgdG8gc2V0IHVwIHBlcnNpc3RlbnQgZmlsZXMgd2l0aCAqLworI3VuZGVmIE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLCisKKy8qIFNpemUgcHJlZml4IHRvIHVzZSB0byBwcmludGYgYSB1aW50MzJfdCAqLworI3VuZGVmIE5FVFNOTVBfUFJJMzIKKworLyogU2l6ZSBwcmVmaXggdG8gdXNlIHRvIHByaW50ZiBhIHNpemVfdCBvciBzc2l6ZV90ICovCisjdW5kZWYgTkVUU05NUF9QUkl6CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggcmVlbnRyYW50L3RocmVhZGVkIGNvZGUgKGluY29tcGxldGUpLgorICAgKi8KKyN1bmRlZiBORVRTTk1QX1JFRU5UUkFOVAorCisvKiBkZWZpbmUgaWYgeW91IGRvIG5vdCB3YW50IHNubXB0cmFwZCB0byByZWdpc3RlciBhcyBhbiBBZ2VudFggc3ViYWdlbnQgKi8KKyN1bmRlZiBORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWAorCiAvKiBQYXR0ZXJuIG9mIHRlbXBvcmFyeSBmaWxlcyAqLwogI3VuZGVmIE5FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4KIAorLyogIkRlZmluZSBpZiBpbnRlcm5hbCBjcnlwdG9ncmFwaHkgY29kZSBzaG91bGQgYmUgdXNlZCIgKi8KKyN1bmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKworLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE1ENSBjb2RlIC4uLiAqLworI3VuZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENQorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UncmUgdXNpbmcgSGVpbWRhbCBLZXJiZXJvcyAqLworI3VuZGVmIE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwKKworLyogRGVmaW5lIHRoaXMgaWYgd2UncmUgdXNpbmcgdGhlIG5ldyBNSVQgY3J5cHRvIEFQSSAqLworI3VuZGVmIE5FVFNOTVBfVVNFX0tFUkJFUk9TX01JVAorCisvKiBkZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgbXlzcWwgY29kZSBmb3Igc25tcHRyYXBkIC4uLiAqLworI3VuZGVmIE5FVFNOTVBfVVNFX01ZU1FMCisKKy8qIERlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBjb2RlUzExIGxpYnJhcnkgLi4uICovCisjdW5kZWYgTkVUU05NUF9VU0VfUEtDUzExCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxtX3NlbnNvcnMgdjMgb3IgbGF0ZXIgKi8KKyN1bmRlZiBORVRTTk1QX1VTRV9TRU5TT1JTX1YzCisKKy8qIFNob3VsZCB3ZSBjb21waWxlIHRvIHVzZSBzcGVjaWFsIG9wYXF1ZSB0eXBlczogZmxvYXQsIGRvdWJsZSwgY291bnRlcjY0LAorICAgaTY0LCB1aTY0LCB1bmlvbj8gKi8KKyN1bmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKKwogLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCiAjaWZuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCiAjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKQEAgLTExNjYsNTcgKzE0NzcsMTM1IEBACiAjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCiAjZW5kaWYKIAorLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwogI2lmbmRlZiBQQUNLQUdFX1ZFUlNJT04KICN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KICNlbmRpZgogCisvKiBDb21tYW5kIHRvIGdlbmVyYXRlIHBzIG91dHB1dCwgdGhlIGZpbmFsIGNvbHVtbiBtdXN0IGJlIHRoZSBwcm9jZXNzIG5hbWUKKyAgIHdpdGhPVVQgYXJndW1lbnRzICovCisjdW5kZWYgUFNDTUQKKwogLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCiAjdW5kZWYgUkVUU0lHVFlQRQogCi0vKiBUaGUgc2l6ZSBvZiBhIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiBkZWZpbmUgcnRlbnRyeSB0byBvcnRlbnRyeSBvbiBTWVNWIG1hY2hpbmVzIChhbHBoYXMpICovCisjdW5kZWYgUlRFTlRSWQorCisvKiBVc2UgQlNEIDQuNCByb3V0aW5nIHRhYmxlIGVudHJpZXM/ICovCisjdW5kZWYgUlRFTlRSWV80XzQKKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfSU5UCiAKLS8qIFRoZSBzaXplIG9mIGEgYGludG1heF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogVGhlIHNpemUgb2YgYGludG1heF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9JTlRNQVhfVAogCi0vKiBUaGUgc2l6ZSBvZiBhIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogVGhlIHNpemUgb2YgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX0xPTkcKIAotLyogVGhlIHNpemUgb2YgYSBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogVGhlIHNpemUgb2YgYGxvbmcgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfTE9OR19MT05HCiAKLS8qIFRoZSBzaXplIG9mIGEgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9TSE9SVAogCisvKiBUaGUgc2l6ZSBvZiBgc29ja2FkZHJfdW4uc3VuX3BhdGgnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1NPQ0tBRERSX1VOX1NVTl9QQVRICisKIC8qIElmIHVzaW5nIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIGFsbG9jYSwgZGVmaW5lIGlmIHlvdSBrbm93IHRoZQogICAgZGlyZWN0aW9uIG9mIHN0YWNrIGdyb3d0aCBmb3IgeW91ciBzeXN0ZW07IG90aGVyd2lzZSBpdCB3aWxsIGJlCi0gICBhdXRvbWF0aWNhbGx5IGRlZHVjZWQgYXQgcnVuLXRpbWUuCisgICBhdXRvbWF0aWNhbGx5IGRlZHVjZWQgYXQgcnVudGltZS4KIAlTVEFDS19ESVJFQ1RJT04gPiAwID0+IGdyb3dzIHRvd2FyZCBoaWdoZXIgYWRkcmVzc2VzCiAJU1RBQ0tfRElSRUNUSU9OIDwgMCA9PiBncm93cyB0b3dhcmQgbG93ZXIgYWRkcmVzc2VzCiAJU1RBQ0tfRElSRUNUSU9OID0gMCA9PiBkaXJlY3Rpb24gb2YgZ3Jvd3RoIHVua25vd24gKi8KICN1bmRlZiBTVEFDS19ESVJFQ1RJT04KIAorLyogRGVmaW5lIGlmIHN0YXRmcyB0YWtlcyAyIGFyZ3MgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaGFzIHR5cGUgc3RydWN0CisgICBmc19kYXRhLiBbVWx0cml4XSAqLworI3VuZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCiAjdW5kZWYgU1REQ19IRUFERVJTCiAKKy8qIGRlZmluZSBpZiBTSU9DR0lGQUREUiBleGlzdHMgaW4gc3lzL2lvY3RsLmggKi8KKyN1bmRlZiBTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIKKworLyogRGVmaW5lIGlmIHRoZSBUQ1AgdGltZXIgY29uc3RhbnRzIGluIDxuZXRpbmV0L3RjcF90aW1lci5oPiBkZXBlbmQgb24gdGhlCisgICBpbnRlZ2VyIHZhcmlhYmxlICdoeicuIFtGcmVlQlNEIDQueF0gKi8KKyN1bmRlZiBUQ1BUVl9ORUVEU19IWgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KICN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZQotICAgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwgYW5kIFZBWCkuICovCi0jdW5kZWYgV09SRFNfQklHRU5ESUFOCisvKiBXaGVyZSBpcyB0aGUgdW5hbWUgY29tbWFuZCAqLworI3VuZGVmIFVOQU1FUFJPRwogCi0vKiBEZWZpbmUgdG8gMSBpZiBvbiBBSVggMy4KLSAgIFN5c3RlbSBoZWFkZXJzIHNvbWV0aW1lcyBkZWZpbmUgdGhpcy4KLSAgIFdlIGp1c3Qgd2FudCB0byBhdm9pZCBhIHJlZGVmaW5pdGlvbiBlcnJvciBtZXNzYWdlLiAgKi8KKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAgKi8KICNpZm5kZWYgX0FMTF9TT1VSQ0UKICMgdW5kZWYgX0FMTF9TT1VSQ0UKICNlbmRpZgorLyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyB1bmRlZiBfR05VX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgdGhyZWFkaW5nIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKyNlbmRpZgorLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gSFAgTm9uU3RvcC4gICovCisjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisjIHVuZGVmIF9UQU5ERU1fU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9fRVhURU5TSU9OU19fCisjIHVuZGVmIF9fRVhURU5TSU9OU19fCisjZW5kaWYKKworCisvKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLworI2lmIGRlZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisjIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgorIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGVuZGlmCisjZW5kaWYKKworLyogRGVmaW5lIHRvIDEgaWYgb24gTUlOSVguICovCisjdW5kZWYgX01JTklYCisKKy8qIERlZmluZSB0byAyIGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBQT1NJWC4xIGZlYXR1cmVzIGV4Y2VwdCB3aXRoCisgICB0aGlzIGRlZmluZWQuICovCisjdW5kZWYgX1BPU0lYXzFfU09VUkNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRvIGluIG9yZGVyIGZvciBgc3RhdCcgYW5kIG90aGVyIHRoaW5ncyB0byB3b3JrLiAqLworI3VuZGVmIF9QT1NJWF9TT1VSQ0UKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIFJQTSA0LjYgb3IgbmV3ZXIgdG8gdHVybiBvbiBsZWdhY3kgQVBJICovCiAjdW5kZWYgX1JQTV80XzRfQ09NUEFUCiAKKy8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDMyX3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCisgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKKyAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisjdW5kZWYgX1VJTlQzMl9UCisKKy8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDY0X3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCisgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKKyAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisjdW5kZWYgX1VJTlQ2NF9UCisKKy8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDhfdCB0eXBlZGVmIGZyb20gPHN5cy9zeW5jaC5oPiwKKyAgIDxwdGhyZWFkLmg+LCBvciA8c2VtYXBob3JlLmg+IGlzIG5vdCB1c2VkLiBJZiB0aGUgdHlwZWRlZiB3ZXJlIGFsbG93ZWQsIHRoZQorICAgI2RlZmluZSBiZWxvdyB3b3VsZCBjYXVzZSBhIHN5bnRheCBlcnJvci4gKi8KKyN1bmRlZiBfVUlOVDhfVAorCiAvKiBEZWZpbmUgdG8gZW1wdHkgaWYgYGNvbnN0JyBkb2VzIG5vdCBjb25mb3JtIHRvIEFOU0kgQy4gKi8KICN1bmRlZiBjb25zdAogCkBAIC0xMjI2LDU4ICsxNjE1LDY4IEBACiAjdW5kZWYgaW5saW5lCiAjZW5kaWYKIAotLyogRGVmaW5lIHRvIGBsb25nJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAxNiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIGludDE2X3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDMyIGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgaW50MzJfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgNjQgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiBpbnQ2NF90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSA4IGJpdHMgaWYgc3VjaAorICAgYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgaW50OF90CisKKy8qIERlZmluZSB0byB0aGUgd2lkZXN0IHNpZ25lZCBpbnRlZ2VyIHR5cGUgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvCisgICBub3QgZGVmaW5lLiAqLworI3VuZGVmIGludG1heF90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2lkZSBlbm91Z2ggdG8gaG9sZCBhIHBvaW50ZXIsCisgICBpZiBzdWNoIGEgdHlwZSBleGlzdHMsIGFuZCBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiBpbnRwdHJfdAorCisvKiBEZWZpbmUgdG8gYGxvbmcgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KICN1bmRlZiBvZmZfdAogCiAvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCiAjdW5kZWYgcGlkX3QKIAorLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMTYgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiB1aW50MTZfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMzIgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiB1aW50MzJfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgNjQgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiB1aW50NjRfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgOCBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIHVpbnQ4X3QKKworLyogRGVmaW5lIHRvIHRoZSB3aWRlc3QgdW5zaWduZWQgaW50ZWdlciB0eXBlIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPgorICAgZG8gbm90IGRlZmluZS4gKi8KKyN1bmRlZiB1aW50bWF4X3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSB3aWRlIGVub3VnaCB0byBob2xkIGEKKyAgIHBvaW50ZXIsIGlmIHN1Y2ggYSB0eXBlIGV4aXN0cywgYW5kIGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIHVpbnRwdHJfdAorCiAvKiBlbmQgb2YgZGVmaW5pdGlvbnMgYWRkZWQgYnkgY29uZmlndXJlIG9uLXRoZS1mbHkgKi8KIAotI2lmbmRlZiBIQVZFX1NUUkNIUgotI2lmZGVmIEhBVkVfSU5ERVgKLSMgZGVmaW5lIHN0cmNociBpbmRleAotIyBkZWZpbmUgc3RycmNociByaW5kZXgKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9JTkRFWAotI2lmZGVmIEhBVkVfU1RSQ0hSCi0jaWZkZWYgbWluZ3czMgotIyBkZWZpbmUgaW5kZXgoYSxiKSBzdHJjaHIoYSxiKQotIyBkZWZpbmUgcmluZGV4KGEsYikgc3RycmNocihhLGIpCi0jZWxzZQotIyBkZWZpbmUgaW5kZXggc3RyY2hyCi0jIGRlZmluZSByaW5kZXggc3RycmNocgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNQ1BZCi0jaWZkZWYgSEFWRV9CQ09QWQotIyBkZWZpbmUgbWVtY3B5KGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtbW92ZShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbWNtcCBiY21wCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNTU9WRQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBtZW1tb3ZlIG1lbWNweQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0JDT1BZCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIGJjb3B5KHMsIGQsIG4pIG1lbWNweSAoKGQpLCAocyksIChuKSkKLSMgZGVmaW5lIGJ6ZXJvKHAsbikgbWVtc2V0KChwKSwoMCksKG4pKQotIyBkZWZpbmUgYmNtcCBtZW1jbXAKLSNlbmRpZgotI2VuZGlmCi0KIC8qIElmIHlvdSBoYXZlIG9wZW5zc2wgMC45Ljcgb3IgYWJvdmUsIHlvdSBsaWtlbHkgaGF2ZSBBRVMgc3VwcG9ydC4gKi8KICN1bmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfT1BFTlNTTF9BRVNfSCkgJiYgZGVmaW5lZChIQVZFX0FFU19DRkIxMjhfRU5DUllQVCkKKyNpZiAoZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfT1BFTlNTTF9BRVNfSCkgJiYgZGVmaW5lZChIQVZFX0FFU19DRkIxMjhfRU5DUllQVCkpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogI2RlZmluZSBIQVZFX0FFUyAxCiAjZW5kaWYKIApAQCAtMTMzMSwyNyArMTczMCw2IEBACiAvKiBkZWZhdWx0IGxpc3Qgb2YgbWlicyB0byBsb2FkICovCiAjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9NSUJTICJJUC1NSUI6SUYtTUlCOlRDUC1NSUI6VURQLU1JQjpTTk1QdjItTUlCOlJGQzEyMTMtTUlCIgogCi0vKiBkZWZhdWx0IGxvY2F0aW9uIHRvIGxvb2sgZm9yIG1pYnMgdG8gbG9hZCB1c2luZyB0aGUgYWJvdmUgdG9rZW5zCi0gICBhbmQvb3IgdGhvc2UgaW4gdGhlIE1JQlMgZW52cmlvbm1lbnQgdmFyaWFibGUqLwotI3VuZGVmIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTCi0KLS8qIGRlZmF1bHQgbWliIGZpbGVzIHRvIGxvYWQsIHNwZWNpZmllZCBieSBwYXRoLiAqLwotI3VuZGVmIE5FVFNOTVBfREVGQVVMVF9NSUJGSUxFUwotCi0vKiBzaG91bGQgd2UgY29tcGlsZSB0byB1c2Ugc3BlY2lhbCBvcGFxdWUgdHlwZXM6IGZsb2F0LCBkb3VibGUsCi0gICBjb3VudGVyNjQsIGk2NCwgdWk2NCwgdW5pb24/ICovCi0jdW5kZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCi0KLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIHN1cHBvcnQgZm9yIGJvdGggYXV0aGVudGljYXRpb24gYW5kCi0gICBwcml2YWN5IHN1cHBvcnQuICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLQotLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE1ENSBjb2RlIC4uLiovCi0jdW5kZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1Ci0KLS8qIGRlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBjb2RlUzExIGxpYnJhcnkgLi4uKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9QS0NTMTEKLQogLyogZGVidWdnaW5nIHN0dWZmICovCiAvKiBpZiBkZWZpbmVkLCB3ZSBvcHRpbWl6ZSB0aGUgY29kZSB0byBleGNsdWRlIGFsbCBkZWJ1Z2dpbmcgY2FsbHMuICovCiAjdW5kZWYgTkVUU05NUF9OT19ERUJVR0dJTkcKQEAgLTEzNjcsOSArMTc0NSw2IEBACiAgICBsaW5lczogUEVSU0lTVEVOVF9ESVJFQ1RPUlkvTkFNRS5wZXJzaXN0ZW50LmNvbmYgKi8KICNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSAiL3Zhci9zbm1wIgogCi0vKiBQRVJTSVNURU5UX01BU0s6IHRoZSB1bWFzayBwZXJtaXNzaW9ucyB0byBzZXQgdXAgcGVyc2lzdGVudCBmaWxlcyB3aXRoICovCi0jZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLIDA3NwotCiAvKiBBR0VOVF9ESVJFQ1RPUllfTU9ERTogdGhlIG1vZGUgdGhlIGFnZW50cyBzaG91bGQgdXNlIHRvIGNyZWF0ZQogICAgZGlyZWN0b3JpZXMgd2l0aC4gU2luY2UgdGhlIGRhdGEgc3RvcmVkIGhlcmUgaXMgcHJvYmFibHkgc2Vuc2l0aXZlLCBpdAogICAgcHJvYmFibHkgc2hvdWxkIGJlIHJlYWQtb25seSBieSByb290L2FkbWluaXN0cmF0b3IuICovCkBAIC0xNDE0LDE5ICsxNzg5LDYgQEAKIC8qIFVzZSBsaWJ3cmFwIHRvIGhhbmRsZSBhbGxvdy9kZW55IGhvc3RzPyAqLwogI3VuZGVmIE5FVFNOTVBfVVNFX0xJQldSQVAKIAotLyogdGVzdGluZyBjb2RlIHNlY3Rpb25zLiAqLwotI3VuZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAKLQotLyogSWYgeW91IGRvbid0IGhhdmUgcm9vdCBhY2Nlc3MgZG9uJ3QgZXhpdCB1cG9uIGttZW0gZXJyb3JzICovCi0jdW5kZWYgTkVUU05NUF9OT19ST09UX0FDQ0VTUwotCi0vKiBJZiB3ZSBkb24ndCB3YW50IHRvIHVzZSBrbWVtLiAqLwotI3VuZGVmIE5FVFNOTVBfTk9fS01FTV9VU0FHRQotCi0vKiBJZiB5b3UgZG9uJ3Qgd2FudCB0aGUgYWdlbnQgdG8gcmVwb3J0IG9uIHZhcmlhYmxlcyBpdCBkb2Vzbid0IGhhdmUgZGF0YSBmb3IgKi8KLSN1bmRlZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUwotCi0KIC8qIE1pYi0yIHRyZWUgSW5mbyAqLwogLyogVGhlc2UgYXJlIHRoZSBzeXN0ZW0gaW5mb3JtYXRpb24gdmFyaWFibGVzLiAqLwogCkBAIC0xNTMwLDcgKzE4OTIsNyBAQAogI2lmZGVmIFdJTjMyCiAjZGVmaW5lIE5FVFNOTVBfT1NUWVBFIE5FVFNOTVBfV0lOMzJJRAogI2VuZGlmCi0jaWYgZGVmaW5lZChhaXgzKSB8fCBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4MykgfHwgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogI2RlZmluZSBORVRTTk1QX09TVFlQRSBORVRTTk1QX0FJWElECiAjZW5kaWYKICNpZiBkZWZpbmVkKGRhcndpbikgJiYgKGRhcndpbiA+PSA4KQpAQCAtMTYyMSw5ICsxOTgzLDYgQEAKIC8qIGludGVybmFsIGRlZmluZSAqLwogI2RlZmluZSBORVRTTk1QX0xBU1RGSUVMRCAtMQogCi0vKiBjb25maWd1cmUgb3B0aW9ucyBzcGVjaWZpZWQgKi8KLSNkZWZpbmUgTkVUU05NUF9DT05GSUdVUkVfT1BUSU9OUyAiIgotCiAvKiAgUGx1Z2dhYmxlIHRyYW5zcG9ydHMuICAqLwogCiAvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBVRFAvSVAgdHJhbnNwb3J0IGRvbWFpbiBpcwpAQCAtMTY1OCwxMyArMjAxNywzMiBAQAogICAgIGF2YWlsYWJsZS4gICovCiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4KIAotLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVURQL0lQIHRyYW5zcG9ydCBkb21haW4gaXMKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFRMUyB0cmFuc3BvcnQgZG9tYWluIGlzCiAgICAgYXZhaWxhYmxlLiAgICovCi0jdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTX0RPTUFJTgorI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU0JBU0VfRE9NQUlOCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIEFsaWFzIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9BTElBU19ET01BSU4KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgU1NIIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIERUTFMvVURQIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBUTFMvVENQIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCiAKIC8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3Igc3RkaW4vb3V0IHRyYW5zcG9ydCBkb21haW4gaXMgYXZhaWxhYmxlLiAgICovCiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfU1REX0RPTUFJTgogCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBJUHY0QmFzZSB0cmFuc3BvcnQgZG9tYWluIGlzIGF2YWlsYWJsZS4gICAqLworI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0lQVjRCQVNFX0RPTUFJTgorCiAvKiBkZWZpbmUgdGhpcyBpZiB0aGUgVVNNIHNlY3VyaXR5IG1vZHVsZSBpcyBhdmFpbGFibGUgKi8KICN1bmRlZiBORVRTTk1QX1NFQ01PRF9VU00KIApAQCAtMTY3NCwxOCArMjA1Miw5IEBACiAvKiBkZWZpbmUgdGhpcyBpZiB0aGUgbG9jYWwgc2VjdXJpdHkgbW9kdWxlIGlzIGF2YWlsYWJsZSAqLwogI3VuZGVmIE5FVFNOTVBfU0VDTU9EX0xPQ0FMU00KIAotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggcmVlbnRyYW50L3RocmVhZGVkIGNvZGUgKGluY29tcGxldGUpKi8KLSN1bmRlZiBORVRTTk1QX1JFRU5UUkFOVAotCiAvKiBkZWZpbmUgaWYgY29uZmlndXJlZCBhcyBhICJtaW5pLWFnZW50IiAqLwogI3VuZGVmIE5FVFNOTVBfTUlOSV9BR0VOVAogCi0vKiBkZWZpbmUgaWYgeW91IGFyZSBlbWJlZGRpbmcgcGVybCBpbiB0aGUgbWFpbiBhZ2VudCAqLwotI3VuZGVmIE5FVFNOTVBfRU1CRURERURfUEVSTAotCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgTUZEIG1vZHVsZSByZXdyaXRlcyovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTCi0KIC8qIHRoaXMgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBuZXQtc25tcCBtaWIgdHJlZS4gIEl0IHNob3VsZG4ndCBiZQogICAgY2hhbmdlZCwgYXMgdGhlIHBsYWNlcyBpdCBpcyB1c2VkIGFyZSBleHBlY3RlZCB0byBiZSBjb25zdGFudAogICAgdmFsdWVzIG9yIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBVQ0QtU05NUC1NSUIuICovCkBAIC0xNzUzLDMzICsyMTIyLDEyIEBACiAjICBkZWZpbmUgTkVUU05NUF9JTVBPUlQgZXh0ZXJuCiAjZW5kaWYKIAotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2Ci0KLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byByZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdCBieSBkZWZhdWx0ICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWAotCi0vKiBkZWZpbmUgaWYgYWdlbnR4IHRyYW5zcG9ydCBpcyB0byB1c2UgZG9tYWluIHNvY2tldHMgb25seSAqLwotI3VuZGVmIE5FVFNOTVBfQUdFTlRYX0RPTV9TT0NLX09OTFkKLQotLyogZGVmaW5lIGlmIHlvdSBkbyBub3Qgd2FudCBzbm1wdHJhcGQgdG8gcmVnaXN0ZXIgYXMgYW4gQWdlbnRYIHN1YmFnZW50ICovCi0jdW5kZWYgTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgKLQotLyogZGVmaW5lIHRoaXMgaWYgd2UncmUgdXNpbmcgdGhlIG5ldyBNSVQgY3J5cHRvIEFQSSAqLwotI3VuZGVmIE5FVFNOTVBfVVNFX0tFUkJFUk9TX01JVAotCi0vKiBkZWZpbmUgdGhpcyBpZiB5b3UncmUgdXNpbmcgSGVpbWRhbCBLZXJiZXJvcyAqLwotI3VuZGVmIE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwKLQogLyogY29tbWVudCB0aGUgbmV4dCBsaW5lIGlmIHlvdSBhcmUgY29tcGlsaW5nIHdpdGggbGlic25tcC5oIAogICAgYW5kIGFyZSBub3QgdXNpbmcgdGhlIFVDLURhdmlzIFNOTVAgbGlicmFyeS4gKi8KICNkZWZpbmUgVUNEX1NOTVBfTElCUkFSWSAxCiAKLS8qIGFkZCBpbiByZWNlbnQgQ01VIGxpYnJhcnkgZXh0ZW5zaW9ucyAobm90IGNvbXBsZXRlKSAqLwotI3VuZGVmIENNVV9DT01QQVRJQkxFCi0KIC8qIGZpbmFsIGNvbmNsdXNpb24gb24gbmxpc3QgdXNhZ2UgKi8KLSNpZiBkZWZpbmVkKEhBVkVfTkxJU1QpICYmIGRlZmluZWQoU1RSVUNUX05MSVNUX0hBU19OX1ZBTFVFKSAmJiAhZGVmaW5lZChORVRTTk1QX0RPTlRfVVNFX05MSVNUKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCisjaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUpICYmICFkZWZpbmVkKE5FVFNOTVBfRE9OVF9VU0VfTkxJU1QpICYmIGRlZmluZWQoSEFWRV9LTUVNKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCiAjZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9OTElTVAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzdlNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFU19ICisjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRVNfSAorCisvKiBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIG9ubHkgbmVlZGVkIGlmIC0tZW5hYmxlLW1pbmltYWxpc3QgaXMgb24gKi8KKyNpZmRlZiBORVRTTk1QX01JTklNQUxfQ09ERQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORworI2luY2x1ZGUgPG5ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oPgorI2Vsc2UgLyogISBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ZlYXR1cmVzLmg+CisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9BR0VOVAorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2ZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvZmVhdHVyZXMtbWliZ3JvdXBzLmg+CisjZW5kaWYKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0FQUFMKKyNpbmNsdWRlIDxuZXQtc25tcC9mZWF0dXJlcy1zbm1wbmV0c3RhdC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2ZlYXR1cmVzLWFwcHMuaD4KKyNlbmRpZgorI2VuZGlmIC8qICEgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HICovCisjZW5kaWYgLyogTkVUU05NUF9NSU5JTUFMX0NPREUgKi8KKworCisvKiBwcm90b3R5cGVzIGFsd2F5cyBuZWVkZWQgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HCisjZGVmaW5lIG5ldHNubXBfZmVhdHVyZV9wcm92aWRlKFgpCisjZGVmaW5lIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKFgpCisjZGVmaW5lIG5ldHNubXBfZmVhdHVyZV93YW50KFgpCisjZGVmaW5lIG5ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihYLCBZKQorI2VuZGlmCisKKyNkZWZpbmUgbmV0c25tcF9mZWF0dXJlX3VudXNlZChYKSBjaGFyIG5ldHNubXBfZmVhdHVyZV91bnVzZWRfICMjIFgKKworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oIGIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCmluZGV4IDUzZGM3YjguLjNlZTYyYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKQEAgLTM4LDExICszOCw3IEBACiAjZW5kaWYKIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzEsNiArNjcsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2RlZmluaXRpb25zLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvc2Vzc2lvbl9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9wZHVfYXBpLmg+CkBAIC04MCw4ICs3Nyw0IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3NubXB2M19hcGkuaD4KIAotI2lmZGVmIENNVV9DT01QQVRJQkxFCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jbXVfY29tcGF0Lmg+Ci0jZW5kaWYKLQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRfU05NUF9JTkNMVURFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL29wZW5zc2xfbWQ1LmggYi9pbmNsdWRlL25ldC1zbm1wL29wZW5zc2xfbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4NWYzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvb3BlbnNzbF9tZDUuaApAQCAtMCwwICsxLDExNiBAQAorLyogY3J5cHRvL21kNS9tZDUuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaWZuZGVmIEhFQURFUl9NRDVfSAorI2RlZmluZSBIRUFERVJfTUQ1X0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9OT19NRDUKKyNlcnJvciBNRDUgaXMgZGlzYWJsZWQuCisjZW5kaWYKKworLyoKKyAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgKiAhIE1ENV9MT05HIGhhcyB0byBiZSBhdCBsZWFzdCAzMiBiaXRzIHdpZGUuIElmIGl0J3Mgd2lkZXIsIHRoZW4gIQorICogISBNRDVfTE9OR19MT0cyIGhhcyB0byBiZSBkZWZpbmVkIGFsb25nLgkJCSAgICEKKyAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgKi8KKworI2lmIGRlZmluZWQoX19MUDMyX18pCisjZGVmaW5lIE1ENV9MT05HIHVuc2lnbmVkIGxvbmcKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQ1JBWSkgfHwgZGVmaW5lZChfX0lMUDY0X18pCisjZGVmaW5lIE1ENV9MT05HIHVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgTUQ1X0xPTkdfTE9HMiAzCisvKgorICogX0NSQVkgbm90ZS4gSSBjb3VsZCBkZWNsYXJlIHNob3J0LCBidXQgSSBoYXZlIG5vIGlkZWEgd2hhdCBpbXBhY3QKKyAqIGRvZXMgaXQgaGF2ZSBvbiBwZXJmb3JtYW5jZSBvbiBub25lLVQzRSBtYWNoaW5lcy4gSSBjb3VsZCBkZWNsYXJlCisgKiBpbnQsIGJ1dCBhdCBsZWFzdCBvbiBDOTAgc2l6ZW9mKGludCkgY2FuIGJlIGNob3NlbiBhdCBjb21waWxlIHRpbWUuCisgKiBTbyBJJ3ZlIGNob3NlbiBsb25nLi4uCisgKgkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgorICovCisjZWxzZQorI2RlZmluZSBNRDVfTE9ORyB1bnNpZ25lZCBpbnQKKyNlbmRpZgorCisjZGVmaW5lIE1ENV9DQkxPQ0sJNjQKKyNkZWZpbmUgTUQ1X0xCTE9DSwkoTUQ1X0NCTE9DSy80KQorI2RlZmluZSBNRDVfRElHRVNUX0xFTkdUSCAxNgorCit0eXBlZGVmIHN0cnVjdCBNRDVzdGF0ZV9zdAorCXsKKwlNRDVfTE9ORyBBLEIsQyxEOworCU1ENV9MT05HIE5sLE5oOworCU1ENV9MT05HIGRhdGFbTUQ1X0xCTE9DS107CisJdW5zaWduZWQgaW50IG51bTsKKwl9IE1ENV9DVFg7CisKK2ludCBNRDVfSW5pdChNRDVfQ1RYICpjKTsKK2ludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ1X0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpNRDUoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sIHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgTUQ1X1RyYW5zZm9ybShNRDVfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiKTsKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKaW5kZXggYmUyY2UwYy4uM2JmMzE3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIE5FVF9TTk1QX0xPR0dJTkdfQVBJX0gKLSNkZWZpbmUgTkVUX1NOTVBfTE9HR0lOR19BUElfSAorI2lmbmRlZiBORVRfU05NUF9PVVRQVVRfQVBJX0gKKyNkZWZpbmUgTkVUX1NOTVBfT1VUUFVUX0FQSV9ICiAKICAgICAvKioKICAgICAgKiAgTGlicmFyeSBBUEkgcm91dGluZXMgY29uY2VybmVkIHdpdGggbG9nZ2luZyBhbmQgbWVzc2FnZSBvdXRwdXQKQEAgLTcsMTcgKzcsMTQ1IEBACiAgICAgICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgkvKiBmb3IgdmFfbGlzdCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyAgICAvKiBFcnJvciByZXBvcnRpbmcgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgc25tcF9lcnJvcihuZXRzbm1wX3Nlc3Npb24gKnNlc3MsIGludCAqY2xpYl9lcnJvcm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzbm1wX2Vycm9ybm8sIGNoYXIgKiplcnJzdHJpbmcpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICBzbm1wX3Nlc3NfZXJyb3IoICAgICAgdm9pZCAqc2VzcywgaW50ICpjbGliX2Vycm9ybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNubXBfZXJyb3JubywgY2hhciAqKmVycnN0cmluZyk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IGNoYXIgKnNubXBfYXBpX2VycnN0cmluZyhpbnQgc25tcF9lcnJvcm5vKTsgIC8qICBsaWJyYXJ5IGVycm9ycyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3QgY2hhciAgICAgKnNubXBfZXJyc3RyaW5nKGludCBzbm1wX2Vycm9ybm8pOyAgLyogcHJvdG9jb2wgZXJyb3JzICovCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgc25tcF9wZXJyb3IoY29uc3QgY2hhciAqbXNnKTsgICAvKiBmb3IgcGFyc2luZyBlcnJvcnMgb25seSAqLworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgIHNubXBfc2Vzc19wZXJyb3IoY29uc3QgY2hhciAqbXNnLCBuZXRzbm1wX3Nlc3Npb24gKnNlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGFsbCBvdGhlciBTTk1QIGxpYnJhcnkgZXJyb3JzICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgIHNubXBfbG9nX3BlcnJvcihjb25zdCBjaGFyICptc2cpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHN5c3RlbSBsaWJyYXJ5IGVycm9ycyAqLworCisgICAgLyogTG9nZ2luZyBtZXNzYWdlcyAqLworCisjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDgpCisjZGVmaW5lIF9MT0dfQVRUUgorI2Vsc2UKKyNkZWZpbmUgX0xPR19BVFRSICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSkKKyNlbmRpZgorCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgIHNubXBfbG9nKCBpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBfTE9HX0FUVFI7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgIHNubXBfdmxvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgIHNubXBfZ2V0X2RvX2xvZ2dpbmcoICAgIHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCBuZXRzbm1wX2xvZ2dpbmdfcmVzdGFydCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgc25tcF9kaXNhYmxlX2xvZyggICAgICAgdm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkIHNodXRkb3duX3NubXBfbG9nZ2luZyggIHZvaWQpOworCisjdW5kZWYgX0xPR19BVFRSCisKKyAgICAvKiBEZWJ1ZyBtZXNzYWdlcyAqLworI2lmbmRlZiBORVRTTk1QX05PX0RFQlVHR0lORworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgkvKiBmb3IgaW50ZXJuYWwgbWFjcm9zICovCisjZGVmaW5lIERFQlVHTVNHKHgpICAgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7ZGVidWdtc2cgeDt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR1QoeCkgICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHVCh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR1RSQUNFICAgICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHVFJBQ0U7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdUUkFDRVRPSyh4KSAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR1RSQUNFVE9LKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHTCh4KSAgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dMKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHVEwoeCkgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dUTCh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR09JRCh4KSAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHT0lEKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHU1VCT0lEKHgpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dTVUJPSUQoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dWQVIoeCkgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR1ZBUih4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR09JRFJBTkdFKHgpIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR09JRFJBTkdFKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHSEVYKHgpICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dIRVgoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dIRVhUTEkoeCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR0hFWFRMSSh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR0lOREVOVEFERCh4KSAgZG8ge2lmIChfREJHX0lGXykge19fREJHSU5ERU5UQUREKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHSU5ERU5UTU9SRSgpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdJTkRFTlRNT1JFKCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdJTkRFTlRMRVNTKCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0lOREVOVExFU1MoKTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR1BSSU5USU5ERU5UKHRva2VuKSBcCisJZG8ge2lmIChfREJHX0lGXykge19fREJHUFJJTlRJTkRFTlQodG9rZW4pO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHRFVNUEhFQURFUih0b2tlbix4KSBcCisJZG8ge2lmIChfREJHX0lGXykge19fREJHRFVNUEhFQURFUih0b2tlbix4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR0RVTVBTRUNUSU9OKHRva2VuLHgpIFwKKwlkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdEVU1QU0VDVElPTih0b2tlbix4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR0RVTVBTRVRVUCh0b2tlbixidWYsbGVuKSBcCisJZG8ge2lmIChfREJHX0lGXykge19fREJHRFVNUFNFVFVQKHRva2VuLGJ1ZixsZW4pO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHX05DKHgpICBkbyB7IF9fREJHTVNHX05DKHgpOyB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dUX05DKHgpIGRvIHsgX19EQkdNU0dUX05DKHgpOyB9d2hpbGUoMCkKKworI2Vsc2UgICAgICAgIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HIDo9IGVuYWJsZSBzdHJlYW1saW5pbmcgb2YgdGhlIGNvZGUgKi8KKworI2RlZmluZSBERUJVR01TRyh4KQorI2RlZmluZSBERUJVR01TR1QoeCkKKyNkZWZpbmUgREVCVUdUUkFDRQorI2RlZmluZSBERUJVR1RSQUNFVE9LKHgpCisjZGVmaW5lIERFQlVHTVNHTCh4KQorI2RlZmluZSBERUJVR01TR1RMKHgpCisjZGVmaW5lIERFQlVHTVNHT0lEKHgpCisjZGVmaW5lIERFQlVHTVNHU1VCT0lEKHgpCisjZGVmaW5lIERFQlVHTVNHVkFSKHgpCisjZGVmaW5lIERFQlVHTVNHT0lEUkFOR0UoeCkKKyNkZWZpbmUgREVCVUdNU0dIRVgoeCkKKyNkZWZpbmUgREVCVUdJRih4KSAgICAgICAgaWYoMCkKKyNkZWZpbmUgREVCVUdEVU1QKHQsYixsLHApCisjZGVmaW5lIERFQlVHSU5ERU5UTU9SRSgpCisjZGVmaW5lIERFQlVHSU5ERU5UTEVTUygpCisjZGVmaW5lIERFQlVHSU5ERU5UQUREKHgpCisjZGVmaW5lIERFQlVHTVNHSEVYVExJKHgpCisjZGVmaW5lIERFQlVHUFJJTlRJTkRFTlQodG9rZW4pCisjZGVmaW5lIERFQlVHRFVNUEhFQURFUih0b2tlbix4KQorI2RlZmluZSBERUJVR0RVTVBTRUNUSU9OKHRva2VuLHgpCisjZGVmaW5lIERFQlVHRFVNUFNFVFVQKHRva2VuLCBidWYsIGxlbikKKworI2RlZmluZSBERUJVR01TR19OQyh4KQorI2RlZmluZSBERUJVR01TR1RfTkMoeCkKKworI2VuZGlmICAgIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HICovCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoY29uc3QgY2hhciAqdG9rZW5zKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKGNvbnN0IGNoYXIgKnRva2VuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX2dldF9kb19kZWJ1Z2dpbmcodm9pZCk7CiAKICAgICAvKgotICAgICAqICBGb3IgdGhlIGluaXRpYWwgcmVsZWFzZSwgdGhpcyB3aWxsIGp1c3QgcmVmZXIgdG8gdGhlCi0gICAgICogIHJlbGV2YW50IFVDRCBoZWFkZXIgZmlsZXMuCi0gICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlIHJvdXRpbmVzIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUKLSAgICAgKiAgQVBJIHdpbGwgYmUgaWRlbnRpZmllZCwgYW5kIGxpc3RlZCBoZXJlIGRpcmVjdGx5LgorICAgICAqICAgIEhhdmluZyBleHRyYWN0ZWQgdGhlIG1haW4gKCJwdWJsaWMgQVBJIikgY2FsbHMgcmVsZXZhbnQKKyAgICAgKiAgdG8gdGhpcyBhcmVhIG9mIHRoZSBOZXQtU05NUCBwcm9qZWN0LCB0aGUgbmV4dCBzdGVwIGlzIHRvCisgICAgICogIGlkZW50aWZ5IHRoZSByZWxhdGVkICJwdWJsaWMgaW50ZXJuYWwgQVBJIiByb3V0aW5lcy4KICAgICAgKgotICAgICAqICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGhlYWRlciBmaWxlIGlzIGEgcGxhY2Vob2xkZXIsCi0gICAgICogIHRvIGFsbG93IGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8gYWRvcHQgdGhlIG5ldyBoZWFkZXIgZmlsZSBuYW1lcy4KKyAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgZ2F0aGVyZWQKKyAgICAgKiAgdG9nZXRoZXIgaW50byBhIGNvbXBhbmlvbiAnbGlicmFyeS9vdXRwdXRfYXBpLmgnIGhlYWRlciBmaWxlLgorICAgICAqICBbT3Igc29tZSBzdWl0YWJsZSBuYW1lXQorICAgICAqCisgICAgICogICAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlCisgICAgICogIHRyYWRpdGlvbmFsIGhlYWRlcnMgdGhhdCBwcm92aWRlZCB0aGUgYWJvdmUgZGVmaW5pdGlvbnMKKyAgICAgKiAgd2lsbCBwcm9iYWJseSBhbHNvIGNvdmVyIHRoZSByZWxldmFudCBpbnRlcm5hbCBBUEkgY2FsbHMuCisgICAgICogIEhlbmNlIHRoZXkgYXJlIGxpc3RlZCBoZXJlOgogICAgICAqLwogCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgpAQCAtMjYsNCArMTU0LDQgQEAKICNkZWZpbmUgRVJST1JfTVNHKHN0cmluZykJc25tcF9zZXRfZGV0YWlsKHN0cmluZykKICNlbmRpZgogCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVF9TTk1QX0xPR0dJTkdfQVBJX0ggKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUX1NOTVBfT1VUUFVUX0FQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCmluZGV4IGEzYTFkZDYuLjEyNTU5NWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCkBAIC03LDE0ICs3LDM2IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKK05FVFNOTVBfSU1QT1JUCituZXRzbm1wX3BkdSAgICAqc25tcF9wZHVfY3JlYXRlKGludCB0eXBlKTsKK05FVFNOTVBfSU1QT1JUCituZXRzbm1wX3BkdSAgICAqc25tcF9jbG9uZV9wZHUobmV0c25tcF9wZHUgKnBkdSk7CitORVRTTk1QX0lNUE9SVAorbmV0c25tcF9wZHUgICAgKnNubXBfZml4X3BkdSggIG5ldHNubXBfcGR1ICpwZHUsIGludCBpZHgpOworTkVUU05NUF9JTVBPUlQKK3ZvaWQgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KCBuZXRzbm1wX3BkdSAqcGR1KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwogICAgIC8qCi0gICAgICogIEZvciB0aGUgaW5pdGlhbCByZWxlYXNlLCB0aGlzIHdpbGwganVzdCByZWZlciB0byB0aGUKLSAgICAgKiAgcmVsZXZhbnQgVUNEIGhlYWRlciBmaWxlcy4KLSAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGUgcm91dGluZXMgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIHRoZQotICAgICAqICBBUEkgd2lsbCBiZSBpZGVudGlmaWVkLCBhbmQgbGlzdGVkIGhlcmUgZGlyZWN0bHkuCisgICAgICogICAgSGF2aW5nIGV4dHJhY3RlZCB0aGUgbWFpbiAoInB1YmxpYyBBUEkiKSBjYWxscyByZWxldmFudAorICAgICAqICB0byB0aGlzIGFyZWEgb2YgdGhlIE5ldC1TTk1QIHByb2plY3QsIHRoZSBuZXh0IHN0ZXAgaXMgdG8KKyAgICAgKiAgaWRlbnRpZnkgdGhlIHJlbGF0ZWQgInB1YmxpYyBpbnRlcm5hbCBBUEkiIHJvdXRpbmVzLgogICAgICAqCi0gICAgICogIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgaGVhZGVyIGZpbGUgaXMgYSBwbGFjZWhvbGRlciwKLSAgICAgKiAgdG8gYWxsb3cgYXBwbGljYXRpb24gd3JpdGVycyB0byBhZG9wdCB0aGUgbmV3IGhlYWRlciBmaWxlIG5hbWVzLgorICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBnYXRoZXJlZAorICAgICAqICB0b2dldGhlciBpbnRvIGEgY29tcGFuaW9uICdsaWJyYXJ5L3BkdV9hcGkuaCcgaGVhZGVyIGZpbGUuCisgICAgICogIFtPciBzb21lIHN1aXRhYmxlIG5hbWVdCisgICAgICoKKyAgICAgKiAgICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUKKyAgICAgKiAgdHJhZGl0aW9uYWwgaGVhZGVycyB0aGF0IHByb3ZpZGVkIHRoZSBhYm92ZSBkZWZpbml0aW9ucworICAgICAqICB3aWxsIHByb2JhYmx5IGFsc28gY292ZXIgdGhlIHJlbGV2YW50IGludGVybmFsIEFQSSBjYWxscy4KKyAgICAgKiAgSGVuY2UgdGhleSBhcmUgbGlzdGVkIGhlcmU6CiAgICAgICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKaW5kZXggMzMyN2Y4OS4uODhkYmM0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaApAQCAtOCwxNCArOCwyNzIgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2Vzc19pbml0KG5ldHNubXBfc2Vzc2lvbiAqKTsKKwogICAgIC8qCi0gICAgICogIEZvciB0aGUgaW5pdGlhbCByZWxlYXNlLCB0aGlzIHdpbGwganVzdCByZWZlciB0byB0aGUKLSAgICAgKiAgcmVsZXZhbnQgVUNEIGhlYWRlciBmaWxlcy4KLSAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGUgcm91dGluZXMgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIHRoZQotICAgICAqICBBUEkgd2lsbCBiZSBpZGVudGlmaWVkLCBhbmQgbGlzdGVkIGhlcmUgZGlyZWN0bHkuCisgICAgICogbmV0c25tcF9zZXNzaW9uICpzbm1wX29wZW4oc2Vzc2lvbikKKyAgICAgKiAgICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKICAgICAgKgotICAgICAqICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGhlYWRlciBmaWxlIGlzIGEgcGxhY2Vob2xkZXIsCi0gICAgICogIHRvIGFsbG93IGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8gYWRvcHQgdGhlIG5ldyBoZWFkZXIgZmlsZSBuYW1lcy4KKyAgICAgKiBTZXRzIHVwIHRoZSBzZXNzaW9uIHdpdGggdGhlIHNubXBfc2Vzc2lvbiBpbmZvcm1hdGlvbiBwcm92aWRlZAorICAgICAqIGJ5IHRoZSB1c2VyLiAgVGhlbiBvcGVucyBhbmQgYmluZHMgdGhlIG5lY2Vzc2FyeSBVRFAgcG9ydC4KKyAgICAgKiBBIGhhbmRsZSB0byB0aGUgY3JlYXRlZCBzZXNzaW9uIGlzIHJldHVybmVkICh0aGlzIGlzIGRpZmZlcmVudCB0aGFuCisgICAgICogdGhlIHBvaW50ZXIgcGFzc2VkIHRvIHNubXBfb3BlbigpKS4gIE9uIGFueSBlcnJvciwgTlVMTCBpcyByZXR1cm5lZAorICAgICAqIGFuZCBzbm1wX2Vycm5vIGlzIHNldCB0byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9vcGVuKG5ldHNubXBfc2Vzc2lvbiAqKTsKKworICAgIC8qCisgICAgICogaW50IHNubXBfY2xvc2Uoc2Vzc2lvbikKKyAgICAgKiAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOworICAgICAqCisgICAgICogQ2xvc2UgdGhlIGlucHV0IHNlc3Npb24uICBGcmVlcyBhbGwgZGF0YSBhbGxvY2F0ZWQgZm9yIHRoZSBzZXNzaW9uLAorICAgICAqIGRlcXVldWVzIGFueSBwZW5kaW5nIHJlcXVlc3RzLCBhbmQgY2xvc2VzIGFueSBzb2NrZXRzIGFsbG9jYXRlZCBmb3IKKyAgICAgKiB0aGUgc2Vzc2lvbi4gIFJldHVybnMgMCBvbiBlcnJvciwgMSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBzbm1wX2Nsb3NlX3Nlc3Npb25zKCkgZG9lcyB0aGUgc2FtZSB0aGluZyBmb3IgYWxsIG9wZW4gc2Vzc2lvbnMKKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX2Nsb3NlKG5ldHNubXBfc2Vzc2lvbiAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX2Nsb3NlX3Nlc3Npb25zKHZvaWQpOworCisKKyAgICAvKgorICAgICAqIGludCBzbm1wX3NlbmQoc2Vzc2lvbiwgcGR1KQorICAgICAqICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247CisgICAgICogICAgIG5ldHNubXBfcGR1ICAgICAgKnBkdTsKKyAgICAgKgorICAgICAqIFNlbmRzIHRoZSBpbnB1dCBwZHUgb24gdGhlIHNlc3Npb24gYWZ0ZXIgY2FsbGluZyBzbm1wX2J1aWxkIHRvIGNyZWF0ZQorICAgICAqIGEgc2VyaWFsaXplZCBwYWNrZXQuICBJZiBuZWNlc3NhcnksIHNldCBzb21lIG9mIHRoZSBwZHUgZGF0YSBmcm9tIHRoZQorICAgICAqIHNlc3Npb24gZGVmYXVsdHMuICBBZGQgYSByZXF1ZXN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwZHUgdG8gdGhlIGxpc3QKKyAgICAgKiBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyBvbiB0aGlzIHNlc3Npb24sIHRoZW4gc2VuZCB0aGUgcGR1LgorICAgICAqIFJldHVybnMgdGhlIHJlcXVlc3QgaWQgb2YgdGhlIGdlbmVyYXRlZCBwYWNrZXQgaWYgYXBwbGljYWJsZSwgb3RoZXJ3aXNlIDEuCisgICAgICogT24gYW55IGVycm9yLCAwIGlzIHJldHVybmVkLgorICAgICAqIFRoZSBwZHUgaXMgZnJlZWQgYnkgc25tcF9zZW5kKCkgdW5sZXNzIGEgZmFpbHVyZSBvY2N1cmVkLgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2VuZChuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF9wZHUgKik7CisKKyAgICAvKgorICAgICAqIGludCBzbm1wX2FzeW5jX3NlbmQoc2Vzc2lvbiwgcGR1LCBjYWxsYmFjaywgY2JfZGF0YSkKKyAgICAgKiAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOworICAgICAqICAgICBuZXRzbm1wX3BkdSAgICAgICpwZHU7CisgICAgICogICAgIG5ldHNubXBfY2FsbGJhY2sgY2FsbGJhY2s7CisgICAgICogICAgIHZvaWQgICAqY2JfZGF0YTsKKyAgICAgKgorICAgICAqIFNlbmRzIHRoZSBpbnB1dCBwZHUgb24gdGhlIHNlc3Npb24gYWZ0ZXIgY2FsbGluZyBzbm1wX2J1aWxkIHRvIGNyZWF0ZQorICAgICAqIGEgc2VyaWFsaXplZCBwYWNrZXQuICBJZiBuZWNlc3NhcnksIHNldCBzb21lIG9mIHRoZSBwZHUgZGF0YSBmcm9tIHRoZQorICAgICAqIHNlc3Npb24gZGVmYXVsdHMuICBBZGQgYSByZXF1ZXN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwZHUgdG8gdGhlIGxpc3QKKyAgICAgKiBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyBvbiB0aGlzIHNlc3Npb24gYW5kIHN0b3JlIGNhbGxiYWNrIGFuZCBkYXRhLAorICAgICAqIHRoZW4gc2VuZCB0aGUgcGR1LgorICAgICAqIFJldHVybnMgdGhlIHJlcXVlc3QgaWQgb2YgdGhlIGdlbmVyYXRlZCBwYWNrZXQgaWYgYXBwbGljYWJsZSwgb3RoZXJ3aXNlIDEuCisgICAgICogT24gYW55IGVycm9yLCAwIGlzIHJldHVybmVkLgorICAgICAqIFRoZSBwZHUgaXMgZnJlZWQgYnkgc25tcF9zZW5kKCkgdW5sZXNzIGEgZmFpbHVyZSBvY2N1cmVkLgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfYXN5bmNfc2VuZChuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF9wZHUgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2ssIHZvaWQgKik7CisKKworICAgIC8qCisgICAgICogdm9pZCBzbm1wX3JlYWQoZmRzZXQpCisgICAgICogICAgIGZkX3NldCAgKmZkc2V0OworICAgICAqCisgICAgICogQ2hlY2tzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIGZkJ3Mgc2V0IGluIHRoZSBmZHNldCBiZWxvbmcgdG8KKyAgICAgKiBzbm1wLiAgRWFjaCBzb2NrZXQgd2l0aCBpdCdzIGZkIHNldCBoYXMgYSBwYWNrZXQgcmVhZCBmcm9tIGl0CisgICAgICogYW5kIHNubXBfcGFyc2UgaXMgY2FsbGVkIG9uIHRoZSBwYWNrZXQgcmVjZWl2ZWQuICBUaGUgcmVzdWx0aW5nIHBkdQorICAgICAqIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgcm91dGluZSBmb3IgdGhhdCBzZXNzaW9uLiAgSWYgdGhlIGNhbGxiYWNrCisgICAgICogcm91dGluZSByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgdGhlIHBkdSBhbmQgaXQncyByZXF1ZXN0IGFyZSBkZWxldGVkLgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfcmVhZChmZF9zZXQgKik7CisKKyAgICAvKgorICAgICAqIHNubXBfcmVhZDIoKSBpcyBzaW1pbGFyIHRvIHNubXBfcmVhZCgpLCBidXQgYWNjZXB0cyBhIHBvaW50ZXIgdG8gYQorICAgICAqIGxhcmdlIGZpbGUgZGVzY3JpcHRvciBzZXQgaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gYSByZWd1bGFyIGZpbGUKKyAgICAgKiBkZXNjcmlwdG9yIHNldC4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3JlYWQyKG5ldHNubXBfbGFyZ2VfZmRfc2V0ICopOworCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3N5bmNoX3Jlc3BvbnNlKG5ldHNubXBfc2Vzc2lvbiAqLCBuZXRzbm1wX3BkdSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICoqKTsKKworICAgIC8qCisgICAgICogaW50IHNubXBfc2VsZWN0X2luZm8obnVtZmRzLCBmZHNldCwgdGltZW91dCwgYmxvY2spCisgICAgICogaW50ICpudW1mZHM7CisgICAgICogZmRfc2V0ICAgKmZkc2V0OworICAgICAqIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0OworICAgICAqIGludCAqYmxvY2s7CisgICAgICoKKyAgICAgKiBSZXR1cm5zIGluZm8gYWJvdXQgd2hhdCBzbm1wIHJlcXVpcmVzIGZyb20gYSBzZWxlY3Qgc3RhdGVtZW50LgorICAgICAqIG51bWZkcyBpcyB0aGUgbnVtYmVyIG9mIGZkcyBpbiB0aGUgbGlzdCB0aGF0IGFyZSBzaWduaWZpY2FudC4KKyAgICAgKiBBbGwgZmlsZSBkZXNjcmlwdG9ycyBvcGVuZWQgZm9yIFNOTVAgYXJlIE9SJ2QgaW50byB0aGUgZmRzZXQuCisgICAgICogSWYgYWN0aXZpdHkgb2NjdXJzIG9uIGFueSBvZiB0aGVzZSBmaWxlIGRlc2NyaXB0b3JzLCBzbm1wX3JlYWQKKyAgICAgKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhhdCBmaWxlIGRlc2NyaXB0b3Igc2V0LgorICAgICAqCisgICAgICogVGhlIHRpbWVvdXQgaXMgdGhlIGxhdGVzdCB0aW1lIHRoYXQgU05NUCBjYW4gd2FpdCBmb3IgYSB0aW1lb3V0LiAgVGhlCisgICAgICogc2VsZWN0IHNob3VsZCBiZSBkb25lIHdpdGggdGhlIG1pbmltdW0gdGltZSBiZXR3ZWVuIHRpbWVvdXQgYW5kIGFueSBvdGhlcgorICAgICAqIHRpbWVvdXRzIG5lY2Vzc2FyeS4gIFRoaXMgc2hvdWxkIGJlIGNoZWNrZWQgdXBvbiBlYWNoIGludm9jYXRpb24gb2Ygc2VsZWN0LgorICAgICAqIElmIGEgdGltZW91dCBpcyByZWNlaXZlZCwgc25tcF90aW1lb3V0IHNob3VsZCBiZSBjYWxsZWQgdG8gY2hlY2sgaWYgdGhlCisgICAgICogdGltZW91dCB3YXMgZm9yIFNOTVAuICAoc25tcF90aW1lb3V0IGlzIGlkZW1wb3RlbnQpCisgICAgICoKKyAgICAgKiBCbG9jayBpcyAxIGlmIHRoZSBzZWxlY3QgaXMgcmVxdWVzdGVkIHRvIGJsb2NrIGluZGVmaW5pdGVseSwgcmF0aGVyIHRoYW4KKyAgICAgKiB0aW1lIG91dC4gIElmIGJsb2NrIGlzIGlucHV0IGFzIDEsIHRoZSB0aW1lb3V0IHZhbHVlIHdpbGwgYmUgdHJlYXRlZCBhcworICAgICAqIHVuZGVmaW5lZCwgYnV0IGl0IG11c3QgYmUgYXZhaWxhYmxlIGZvciBzZXR0aW5nIGluIHNubXBfc2VsZWN0X2luZm8uICBPbgorICAgICAqIHJldHVybiwgaWYgYmxvY2sgaXMgdHJ1ZSwgdGhlIHZhbHVlIG9mIHRpbWVvdXQgd2lsbCBiZSB1bmRlZmluZWQuCisgICAgICoKKyAgICAgKiBzbm1wX3NlbGVjdF9pbmZvIHJldHVybnMgdGhlIG51bWJlciBvZiBvcGVuIHNvY2tldHMuICAoaS5lLiBUaGUgbnVtYmVyCisgICAgICogb2Ygc2Vzc2lvbnMgb3BlbikKKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3NlbGVjdF9pbmZvKGludCAqLCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKik7CisKKyAgICAvKgorICAgICAqIHNubXBfc2VsZWN0X2luZm8yKCkgaXMgc2ltaWxhciB0byBzbm1wX3NlbGVjdF9pbmZvKCksIGJ1dCBhY2NlcHRzIGEKKyAgICAgKiBwb2ludGVyIHRvIGEgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yIHNldCBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0byBhCisgICAgICogcmVndWxhciBmaWxlIGRlc2NyaXB0b3Igc2V0LgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2VsZWN0X2luZm8yKGludCAqLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqLCBpbnQgKik7CisKKyNkZWZpbmUgTkVUU05NUF9TRUxFQ1RfTk9GTEFHUyAgMHgwMAorI2RlZmluZSBORVRTTk1QX1NFTEVDVF9OT0FMQVJNUyAweDAxCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvX2ZsYWdzKHZvaWQgKiwgaW50ICosIGZkX3NldCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKiwgaW50ICosIGludCk7CisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3Modm9pZCAqLCBpbnQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICosIGludCAqLCBpbnQpOworCisgICAgLyoKKyAgICAgKiB2b2lkIHNubXBfdGltZW91dCgpOworICAgICAqCisgICAgICogc25tcF90aW1lb3V0IHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHRpbWVvdXQgZnJvbSBzbm1wX3NlbGVjdF9pbmZvCisgICAgICogZXhwaXJlcywgYnV0IGl0IGlzIGlkZW1wb3RlbnQsIHNvIHNubXBfdGltZW91dCBjYW4gYmUgcG9sbGVkIChwcm9iYWJseSBhCisgICAgICogY3B1IGV4cGVuc2l2ZSBwcm9wb3NpdGlvbikuICBzbm1wX3RpbWVvdXQgY2hlY2tzIHRvIHNlZSBpZiBhbnkgb2YgdGhlCisgICAgICogc2Vzc2lvbnMgaGF2ZSBhbiBvdXRzdGFuZGluZyByZXF1ZXN0IHRoYXQgaGFzIHRpbWVkIG91dC4gIElmIGl0IGZpbmRzIG9uZQorICAgICAqIChvciBtb3JlKSwgYW5kIHRoYXQgcGR1IGhhcyBtb3JlIHJldHJpZXMgYXZhaWxhYmxlLCBhIG5ldyBwYWNrZXQgaXMgZm9ybWVkCisgICAgICogZnJvbSB0aGUgcGR1IGFuZCBpcyByZXNlbnQuICBJZiB0aGVyZSBhcmUgbm8gbW9yZSByZXRyaWVzIGF2YWlsYWJsZSwgdGhlCisgICAgICogY2FsbGJhY2sgZm9yIHRoZSBzZXNzaW9uIGlzIHVzZWQgdG8gYWxlcnQgdGhlIHVzZXIgb2YgdGhlIHRpbWVvdXQuCisgICAgICovCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3RpbWVvdXQodm9pZCk7CisKKyAgICAvKgorICAgICAqIHNpbmdsZSBzZXNzaW9uIEFQSS4KKyAgICAgKgorICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIHNpbWlsYXIgYWN0aW9ucyBhcyBzbm1wX1hYIGZ1bmN0aW9ucywKKyAgICAgKiBidXQgb3BlcmF0ZSBvbiBhIHNpbmdsZSBzZXNzaW9uIG9ubHkuCisgICAgICoKKyAgICAgKiBTeW5vcHNpczoKKyAgICAgCisgICAgIHZvaWQgKiBzZXNzcDsKKyAgICAgbmV0c25tcF9zZXNzaW9uIHNlc3Npb24sICpzczsKKyAgICAgbmV0c25tcF9wZHUgKnBkdSwgKnJlc3BvbnNlOworICAgICAKKyAgICAgc25tcF9zZXNzX2luaXQoJnNlc3Npb24pOworICAgICBzZXNzaW9uLnJldHJpZXMgPSAuLi4KKyAgICAgc2Vzc2lvbi5yZW1vdGVfcG9ydCA9IC4uLgorICAgICBzZXNzcCA9IHNubXBfc2Vzc19vcGVuKCZzZXNzaW9uKTsKKyAgICAgc3MgPSBzbm1wX3Nlc3Nfc2Vzc2lvbihzZXNzcCk7CisgICAgIGlmIChzcyA9PSBOVUxMKQorICAgICBleGl0KDEpOworICAgICAuLi4KKyAgICAgaWYgKHNzLT5jb21tdW5pdHkpIGZyZWUoc3MtPmNvbW11bml0eSk7CisgICAgIHNzLT5jb21tdW5pdHkgPSBzdHJkdXAoZ2F0ZXdheSk7CisgICAgIHNzLT5jb21tdW5pdHlfbGVuID0gc3RybGVuKGdhdGV3YXkpOworICAgICAuLi4KKyAgICAgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHNlc3NwLCBwZHUsICZyZXNwb25zZSk7CisgICAgIC4uLgorICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2Vzc3ApOworICAgICAKKyAgICAgKiBTZWUgYWxzbzoKKyAgICAgKiBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UsIGluIHNubXBfY2xpZW50LmguCisgICAgIAorICAgICAqIE5vdGVzOgorICAgICAqICAxLiBJbnZva2Ugc25tcF9zZXNzX3Nlc3Npb24gYWZ0ZXIgc25tcF9zZXNzX29wZW4uCisgICAgICogIDIuIHNubXBfc2Vzc19zZXNzaW9uIHJldHVybiB2YWx1ZSBpcyBhbiBvcGFxdWUgcG9pbnRlci4KKyAgICAgKiAgMy4gRG8gTk9UIGZyZWUgbWVtb3J5IHJldHVybmVkIGJ5IHNubXBfc2Vzc19zZXNzaW9uLgorICAgICAqICA0LiBSZXBsYWNlIHNubXBfc2VuZChzcyxwZHUpIHdpdGggc25tcF9zZXNzX3NlbmQoc2Vzc3AscGR1KQorICAgICAqLworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAqc25tcF9zZXNzX29wZW4obmV0c25tcF9zZXNzaW9uICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgKnNubXBfc2Vzc19wb2ludGVyKG5ldHNubXBfc2Vzc2lvbiAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9zZXNzX3Nlc3Npb24odm9pZCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwKHZvaWQgKik7CisKKworICAgIC8qCisgICAgICogdXNlIHJldHVybiB2YWx1ZSBmcm9tIHNubXBfc2Vzc19vcGVuIGFzIHZvaWQgKiBwYXJhbWV0ZXIgCisgICAgICovCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc2VuZCh2b2lkICosIG5ldHNubXBfcGR1ICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19hc3luY19zZW5kKHZvaWQgKiwgbmV0c25tcF9wZHUgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFjaywgdm9pZCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8odm9pZCAqLCBpbnQgKiwgZmRfc2V0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqLCBpbnQgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvMih2b2lkICosIGludCAqLAorCQkJCQkgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICosIGludCAqKTsKKyAgICAvKgorICAgICAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCAtMSBpZiBmYWlsLgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19yZWFkKHZvaWQgKiwgZmRfc2V0ICopOworICAgIC8qCisgICAgICogU2ltaWxhciB0byBzbm1wX3Nlc3NfcmVhZCgpLCBidXQgYWNjZXB0cyBhIHBvaW50ZXIgdG8gYSBsYXJnZSBmaWxlCisgICAgICogZGVzY3JpcHRvciBzZXQgaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gYSBmaWxlIGRlc2NyaXB0b3Igc2V0LgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19yZWFkMih2b2lkICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfdGltZW91dCh2b2lkICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZSh2b2lkICopOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHZvaWQgKiwgbmV0c25tcF9wZHUgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICoqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiAgICBIYXZpbmcgZXh0cmFjdGVkIHRoZSBtYWluICgicHVibGljIEFQSSIpIGNhbGxzIHJlbGV2YW50CisgICAgICogIHRvIHRoaXMgYXJlYSBvZiB0aGUgTmV0LVNOTVAgcHJvamVjdCwgdGhlIG5leHQgc3RlcCBpcyB0bworICAgICAqICBpZGVudGlmeSB0aGUgcmVsYXRlZCAicHVibGljIGludGVybmFsIEFQSSIgcm91dGluZXMuCisgICAgICoKKyAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgZ2F0aGVyZWQKKyAgICAgKiAgdG9nZXRoZXIgaW50byBhIGNvbXBhbmlvbiAnbGlicmFyeS9zZXNzaW9uX2FwaS5oJyBoZWFkZXIgZmlsZS4KKyAgICAgKiAgW09yIHNvbWUgc3VpdGFibGUgbmFtZV0KKyAgICAgKgorICAgICAqICAgIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZQorICAgICAqICB0cmFkaXRpb25hbCBoZWFkZXJzIHRoYXQgcHJvdmlkZWQgdGhlIGFib3ZlIGRlZmluaXRpb25zCisgICAgICogIHdpbGwgcHJvYmFibHkgYWxzbyBjb3ZlciB0aGUgcmVsZXZhbnQgaW50ZXJuYWwgQVBJIGNhbGxzLgorICAgICAqICBIZW5jZSB0aGV5IGFyZSBsaXN0ZWQgaGVyZToKICAgICAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2FpeC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYWl4LmgKaW5kZXggNDMyNzJmMS4uMDJkNDk4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYWl4LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYWl4LmgKQEAgLTIyLDMgKzIyLDYgQEAKIAogLyogZGVmaW5lIHRoZSBleHRyYSBtaWIgbW9kdWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCisKKy8qIHRoZSBsZWdhY3kgc3ltYm9sIE5PQUNDRVNTIGNsYXNoZXMgd2l0aCB0aGUgc3lzdGVtIGhlYWRlcnMuIFJlbW92ZSBpdC4gKi8KKyNkZWZpbmUgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2N5Z3dpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vY3lnd2luLmgKaW5kZXggMTRhZThhZS4uYTliNzZmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vY3lnd2luLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vY3lnd2luLmgKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CS8qIHVpbnQzMl90ICovCiAjZW5kaWYKIAotI3VuZGVmIEhBVkVfV0lOU09DS19ICiAjdW5kZWYgYnNkbGlrZQogI3VuZGVmIE1CU1RBVF9TWU1CT0wKICN1bmRlZiBUT1RBTF9NRU1PUllfU1lNQk9MCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2Rhcndpbi5oCmluZGV4IDY3NTBjZjEuLjVhMDY1YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2Rhcndpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2Rhcndpbi5oCkBAIC01LDMgKzUsNCBAQAogICogQXQgbGVhc3QsIGFzIG9mIDUuMy4KICAqLwogI3VuZGVmIEhBVkVfRlNUQUJfSAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDM3MzI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTAuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIFdoaWxlIERhcndpbiAxMCAoYWthLCBNYWMgT1MgWCAxMC42IFNub3cgTGVvcGFyZCkgaXMgIkJTRC1saWtlIiwgaXQgZGlmZmVycworICogc3Vic3RhbnRpYWxseSBlbm91Z2ggdG8gbm90IHdhcnJhbnQgcHJldGVuZGluZyBpdCBpcyBhIEJTRCBmbGF2b3IuCisgKiBUaGlzIGZpcnN0IHNlY3Rpb24gYXJlIHRoZSB2ZXN0aWdhbCBCU0QgcmVtbmFudHMuCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisvKgorICogQlNEIHN5c3RlbXMgdXNlIGEgZGlmZmVyZW50IG1ldGhvZCBvZiBsb29raW5nIHVwIHNvY2thZGRyX2luIHZhbHVlcyAKKyAqLworLyogI2RlZmluZSBORUVEX0tMR0VUU0EgMSAqLworCisvKgorICogQVJQX1NjYW5fTmV4dCBuZWVkcyBhIDR0aCBpZkluZGV4IGFyZ3VtZW50IAorICovCisjZGVmaW5lIEFSUF9TQ0FOX0ZPVVJfQVJHVU1FTlRTIDEKKworI2RlZmluZSBDSEVDS19SVF9GTEFHUyAxCisKKy8qCisgKiB0aGlzIGlzIG5vdCBnb29kIGVub3VnaCBiZWZvcmUgZnJlZWJzZDMhIAorICovCisvKiAjdW5kZWYgSEFWRV9ORVRfSUZfTUlCX0ggKi8KKworLyoKKyAqIFRoaXMgc2VjdGlvbiBhZGRzIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBmcm9tIGdlbmVyaWMuaAorICogKGEgZmlsZSB3ZSBkb24ndCBpbmNsdWRlIGhlcmUpCisgKi8KKworLyoKKyAqIHVkcF9pbnBjYiBsaXN0IHN5bWJvbCwgZS5nLiBmb3IgbWliSUkvdWRwVGFibGUuYworICovCisjZGVmaW5lIElOUF9ORVhUX1NZTUJPTCBpbnBfbmV4dAorCisvKgorICogVGhpcyBzZWN0aW9uIGRlZmluZXMgTWFjIE9TIFggMTAuNSAoYW5kIGxhdGVyKSBzcGVjaWZpYyBhZGRpdGlvbnMuCisgKi8KKyNkZWZpbmUgZGFyd2luIDEwCisjaWZuZGVmIGRhcndpbjEwCisjICAgZGVmaW5lIGRhcndpbjEwIGRhcndpbgorI2VuZGlmCisKKy8qCisgKiBNYWMgT1MgWCBzaG91bGQgb25seSB1c2UgdGhlIG1vZGVybiBBUEkgYW5kIGRlZmluaXRpb25zLgorICovCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisjZGVmaW5lIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TIDEKKyNlbmRpZgorCisvKgorICogbG9va3MgbGlrZSB0aGUgSUZUYWJsZSBzdHVmZiB3b3JrcyBiZXR0ZXIgdGhhbiB0aGUgbWliSUkgdmVyc2lvbnMKKyAqLworIAorI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUworCisvKgorICogdXNlIG5ldyBob3N0IHJlc291cmNlcyBmaWxlcyBhcyB3ZWxsCisgKi8KKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXSU5TVF9SRVdSSVRFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9SRVdSSVRFUworI3VuZGVmIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1dSSVRFX1NVUFBPUlQKKyNkZWZpbmUgTkVUU05NUF9DQU5fR0VUX0RJU0tfTEFCRUwgMQorCisvKgorICogRW5hYmxpbmcgdGhpcyByZXN0cmljdHMgdGhlIGNvbXBpbGVyIHRvIG1vc3RseSBwdWJsaWMgQVBJcy4KKyAqLworI2lmbmRlZiBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UKKyNkZWZpbmUgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFIDEKKyNlbmRpZgorI2lmbmRlZiBfX0FQUExFX0FQSV9VTlNUQUJMRQorI2RlZmluZSBfX0FQUExFX0FQSV9VTlNUQUJMRSAxCisjZW5kaWYKKworLyoKKyAqIERhcndpbidzIHRvb2xzIGFyZSBjYXBhYmxlIG9mIGJ1aWxkaW5nIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgaW4gb25lIHBhc3MuCisgKiBBcyBhIHJlc3VsdCwgcGxhdGZvcm0gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIGNvbXBpbGUgdGltZS4KKyAqLworI2lmZGVmIEJZVEVfT1JERVIKKyMgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIEFsdGhvdWdoIERhcndpbiBkb2VzIGhhdmUgYW4gZnN0YWIuaCBmaWxlLCBnZXRmc2ZpbGUgZXRjLiBhbHdheXMgcmV0dXJuIG51bGwuCisgKiBBdCBsZWFzdCwgYXMgb2YgNS4zLgorICovCisjdW5kZWYgSEFWRV9GU1RBQl9ICisKKyNkZWZpbmUgU1dBUEZJTEVfRElSICIvcHJpdmF0ZS92YXIvdm0iCisjZGVmaW5lIFNXQVBGSUxFX1BSRUZJWCAic3dhcGZpbGUiCisKKy8qCisgKiBUaGVzZSBhcHBhcmVudGx5IHVzZWQgdG8gYmUgaW4gbmV0aW5ldC90Y3BfdGltZXJzLmgsIGJ1dCB3ZW50IGF3YXkgaW4KKyAqIDEwLjQuMi4gRGVmaW5lIHRoZW0gaGVyZSB0aWwgd2UgZmluZCBvdXQgYSB3YXkgdG8gZ2V0IHRoZSByZWFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBUQ1BUVl9NSU4gICAgICAgKCAgMSpQUl9TTE9XSFopICAgICAgICAgLyogbWluaW11bSBhbGxvd2FibGUgdmFsdWUgKi8KKyNkZWZpbmUgVENQVFZfUkVYTVRNQVggICggNjQqUFJfU0xPV0haKSAgICAgICAgIC8qIG1heCBhbGxvd2FibGUgUkVYTVQgdmFsdWUgKi8KKworLyoKKyAqIEJlY2F1c2UgTWFjIE9TIFggaXMgYnVpbHQgb24gTWFjaCwgaXQgZG9lcyBub3QgcHJvdmlkZSBhIEJTRC1jb21wYXRpYmxlCisgKiBWTSBzdGF0aXN0aWNzIEFQSS4KKyAqLworI2RlZmluZSBVU0VfTUFDSF9IT1NUX1NUQVRJU1RJQ1MgMQorCisvKgorICogVGhpcyB0ZWxscyBjb2RlIHRoYXQgbWFuaXB1bGF0ZXMgSVB2NiB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGFyZSB1bmlmaWVkLAorICogaS5lLiwgSVB2NCBhbmQgSVB2NiB1c2UgdGhlIHNhbWUgc3RydWN0cy4KKyAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgd2l0aCBhIGNvbmZpZ3VyZSBkaXJlY3RpdmUuCisgKi8KKy8qICNkZWZpbmUgVVNFX1VOSUZJRURfSVBWNl9TVFJVQ1RTIDEgKi8KKyN1bmRlZiBTVFJVQ1RfaW42cGNiX0hBU19pbnBfdmZsYWcKKworLyoKKyAqIHV0aWxpdHkgbWFjcm8gdXNlZCBpbiBzZXZlcmFsIGRhcndpbiBzcGVjaWZpYyBmaWxlcworICovCisjZGVmaW5lIFNOTVBfQ0ZSZWxlYXNlKHgpIGRvIHsgaWYgKHgpIHsgQ0ZSZWxlYXNlKHgpOyB4ID0gTlVMTDsgfSB9IHdoaWxlKDApCisKKy8qCisgKiBNYWMgT1MgWCBydW5zIG9uIGJvdGggUFBDIGFuZCBJbnRlbCBoYXJkd2FyZSwKKyAqICAgd2hpY2ggaGFuZGxlIHVkcFRhYmxlIGluZGV4IHZhbHVlcyBkaWZmZXJlbnRseQorICovCisjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisjaWZkZWYgVEFSR0VUX1JUX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgVURQX0FERFJFU1NFU19JTl9IT1NUX09SREVSIDEKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMS5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZmMDNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTEuaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIFdoaWxlIERhcndpbiAxMCAoYWthLCBNYWMgT1MgWCAxMC42IFNub3cgTGVvcGFyZCkgaXMgIkJTRC1saWtlIiwgaXQgZGlmZmVycworICogc3Vic3RhbnRpYWxseSBlbm91Z2ggdG8gbm90IHdhcnJhbnQgcHJldGVuZGluZyBpdCBpcyBhIEJTRCBmbGF2b3IuCisgKiBUaGlzIGZpcnN0IHNlY3Rpb24gYXJlIHRoZSB2ZXN0aWdhbCBCU0QgcmVtbmFudHMuCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisvKgorICogQlNEIHN5c3RlbXMgdXNlIGEgZGlmZmVyZW50IG1ldGhvZCBvZiBsb29raW5nIHVwIHNvY2thZGRyX2luIHZhbHVlcyAKKyAqLworLyogI2RlZmluZSBORUVEX0tMR0VUU0EgMSAqLworCisvKgorICogQVJQX1NjYW5fTmV4dCBuZWVkcyBhIDR0aCBpZkluZGV4IGFyZ3VtZW50IAorICovCisjZGVmaW5lIEFSUF9TQ0FOX0ZPVVJfQVJHVU1FTlRTIDEKKworI2RlZmluZSBDSEVDS19SVF9GTEFHUyAxCisKKy8qCisgKiB0aGlzIGlzIG5vdCBnb29kIGVub3VnaCBiZWZvcmUgZnJlZWJzZDMhIAorICovCisvKiAjdW5kZWYgSEFWRV9ORVRfSUZfTUlCX0ggKi8KKworLyoKKyAqIFRoaXMgc2VjdGlvbiBhZGRzIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBmcm9tIGdlbmVyaWMuaAorICogKGEgZmlsZSB3ZSBkb24ndCBpbmNsdWRlIGhlcmUpCisgKi8KKworLyoKKyAqIHVkcF9pbnBjYiBsaXN0IHN5bWJvbCwgZS5nLiBmb3IgbWliSUkvdWRwVGFibGUuYworICovCisjZGVmaW5lIElOUF9ORVhUX1NZTUJPTCBpbnBfbmV4dAorCisvKgorICogVGhpcyBzZWN0aW9uIGRlZmluZXMgTWFjIE9TIFggMTAuNSAoYW5kIGxhdGVyKSBzcGVjaWZpYyBhZGRpdGlvbnMuCisgKi8KKyNkZWZpbmUgZGFyd2luIDExCisjaWZuZGVmIGRhcndpbjExCisjICAgZGVmaW5lIGRhcndpbjExIGRhcndpbgorI2VuZGlmCisKKy8qCisgKiBNYWMgT1MgWCBzaG91bGQgb25seSB1c2UgdGhlIG1vZGVybiBBUEkgYW5kIGRlZmluaXRpb25zLgorICovCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisjZGVmaW5lIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TIDEKKyNlbmRpZgorCisvKgorICogbG9va3MgbGlrZSB0aGUgSUZUYWJsZSBzdHVmZiB3b3JrcyBiZXR0ZXIgdGhhbiB0aGUgbWliSUkgdmVyc2lvbnMKKyAqLworIAorI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUworCisvKgorICogdXNlIG5ldyBob3N0IHJlc291cmNlcyBmaWxlcyBhcyB3ZWxsCisgKi8KKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXSU5TVF9SRVdSSVRFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9SRVdSSVRFUworI3VuZGVmIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1dSSVRFX1NVUFBPUlQKKyNkZWZpbmUgTkVUU05NUF9DQU5fR0VUX0RJU0tfTEFCRUwgMQorCisvKgorICogRW5hYmxpbmcgdGhpcyByZXN0cmljdHMgdGhlIGNvbXBpbGVyIHRvIG1vc3RseSBwdWJsaWMgQVBJcy4KKyAqLworI2lmbmRlZiBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UKKyNkZWZpbmUgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFIDEKKyNlbmRpZgorI2lmbmRlZiBfX0FQUExFX0FQSV9VTlNUQUJMRQorI2RlZmluZSBfX0FQUExFX0FQSV9VTlNUQUJMRSAxCisjZW5kaWYKKworLyoKKyAqIERhcndpbidzIHRvb2xzIGFyZSBjYXBhYmxlIG9mIGJ1aWxkaW5nIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgaW4gb25lIHBhc3MuCisgKiBBcyBhIHJlc3VsdCwgcGxhdGZvcm0gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIGNvbXBpbGUgdGltZS4KKyAqLworI2lmZGVmIEJZVEVfT1JERVIKKyMgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIEFsdGhvdWdoIERhcndpbiBkb2VzIGhhdmUgYW4gZnN0YWIuaCBmaWxlLCBnZXRmc2ZpbGUgZXRjLiBhbHdheXMgcmV0dXJuIG51bGwuCisgKiBBdCBsZWFzdCwgYXMgb2YgNS4zLgorICovCisjdW5kZWYgSEFWRV9GU1RBQl9ICisKKyNkZWZpbmUgU1dBUEZJTEVfRElSICIvcHJpdmF0ZS92YXIvdm0iCisjZGVmaW5lIFNXQVBGSUxFX1BSRUZJWCAic3dhcGZpbGUiCisKKy8qCisgKiBUaGVzZSBhcHBhcmVudGx5IHVzZWQgdG8gYmUgaW4gbmV0aW5ldC90Y3BfdGltZXJzLmgsIGJ1dCB3ZW50IGF3YXkgaW4KKyAqIDEwLjQuMi4gRGVmaW5lIHRoZW0gaGVyZSB0aWwgd2UgZmluZCBvdXQgYSB3YXkgdG8gZ2V0IHRoZSByZWFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBUQ1BUVl9NSU4gICAgICAgKCAgMSpQUl9TTE9XSFopICAgICAgICAgLyogbWluaW11bSBhbGxvd2FibGUgdmFsdWUgKi8KKyNkZWZpbmUgVENQVFZfUkVYTVRNQVggICggNjQqUFJfU0xPV0haKSAgICAgICAgIC8qIG1heCBhbGxvd2FibGUgUkVYTVQgdmFsdWUgKi8KKworLyoKKyAqIEJlY2F1c2UgTWFjIE9TIFggaXMgYnVpbHQgb24gTWFjaCwgaXQgZG9lcyBub3QgcHJvdmlkZSBhIEJTRC1jb21wYXRpYmxlCisgKiBWTSBzdGF0aXN0aWNzIEFQSS4KKyAqLworI2RlZmluZSBVU0VfTUFDSF9IT1NUX1NUQVRJU1RJQ1MgMQorCisvKgorICogVGhpcyB0ZWxscyBjb2RlIHRoYXQgbWFuaXB1bGF0ZXMgSVB2NiB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGFyZSB1bmlmaWVkLAorICogaS5lLiwgSVB2NCBhbmQgSVB2NiB1c2UgdGhlIHNhbWUgc3RydWN0cy4KKyAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgd2l0aCBhIGNvbmZpZ3VyZSBkaXJlY3RpdmUuCisgKi8KKy8qICNkZWZpbmUgVVNFX1VOSUZJRURfSVBWNl9TVFJVQ1RTIDEgKi8KKyN1bmRlZiBTVFJVQ1RfaW42cGNiX0hBU19pbnBfdmZsYWcKKworLyoKKyAqIHV0aWxpdHkgbWFjcm8gdXNlZCBpbiBzZXZlcmFsIGRhcndpbiBzcGVjaWZpYyBmaWxlcworICovCisjZGVmaW5lIFNOTVBfQ0ZSZWxlYXNlKHgpIGRvIHsgaWYgKHgpIHsgQ0ZSZWxlYXNlKHgpOyB4ID0gTlVMTDsgfSB9IHdoaWxlKDApCisKKy8qCisgKiBNYWMgT1MgWCBydW5zIG9uIGJvdGggUFBDIGFuZCBJbnRlbCBoYXJkd2FyZSwKKyAqICAgd2hpY2ggaGFuZGxlIHVkcFRhYmxlIGluZGV4IHZhbHVlcyBkaWZmZXJlbnRseQorICovCisjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisjaWZkZWYgVEFSR0VUX1JUX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgVURQX0FERFJFU1NFU19JTl9IT1NUX09SREVSIDEKKyNlbmRpZgorCisvKgorICogYXMgb2YgNy8yMDEwLCBvcGVuc3NsIG9uIGRhcndpbiBkb2VzIG5vdCBoYXZlIHNoYTI1NgorICovCisjZGVmaW5lIE9QRU5TU0xfTk9fU0hBMjU2IDEKKyNkZWZpbmUgT1BFTlNTTF9OT19TSEE1MTIgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTIuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzMWQwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEyLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBXaGlsZSBEYXJ3aW4gMTAgKGFrYSwgTWFjIE9TIFggMTAuNiBTbm93IExlb3BhcmQpIGlzICJCU0QtbGlrZSIsIGl0IGRpZmZlcnMKKyAqIHN1YnN0YW50aWFsbHkgZW5vdWdoIHRvIG5vdCB3YXJyYW50IHByZXRlbmRpbmcgaXQgaXMgYSBCU0QgZmxhdm9yLgorICogVGhpcyBmaXJzdCBzZWN0aW9uIGFyZSB0aGUgdmVzdGlnYWwgQlNEIHJlbW5hbnRzLgorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworLyoKKyAqIEJTRCBzeXN0ZW1zIHVzZSBhIGRpZmZlcmVudCBtZXRob2Qgb2YgbG9va2luZyB1cCBzb2NrYWRkcl9pbiB2YWx1ZXMgCisgKi8KKy8qICNkZWZpbmUgTkVFRF9LTEdFVFNBIDEgKi8KKworLyoKKyAqIEFSUF9TY2FuX05leHQgbmVlZHMgYSA0dGggaWZJbmRleCBhcmd1bWVudCAKKyAqLworI2RlZmluZSBBUlBfU0NBTl9GT1VSX0FSR1VNRU5UUyAxCisKKyNkZWZpbmUgQ0hFQ0tfUlRfRkxBR1MgMQorCisvKgorICogdGhpcyBpcyBub3QgZ29vZCBlbm91Z2ggYmVmb3JlIGZyZWVic2QzISAKKyAqLworLyogI3VuZGVmIEhBVkVfTkVUX0lGX01JQl9IICovCisKKy8qCisgKiBUaGlzIHNlY3Rpb24gYWRkcyB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgZnJvbSBnZW5lcmljLmgKKyAqIChhIGZpbGUgd2UgZG9uJ3QgaW5jbHVkZSBoZXJlKQorICovCisKKy8qCisgKiB1ZHBfaW5wY2IgbGlzdCBzeW1ib2wsIGUuZy4gZm9yIG1pYklJL3VkcFRhYmxlLmMKKyAqLworI2RlZmluZSBJTlBfTkVYVF9TWU1CT0wgaW5wX25leHQKKworLyoKKyAqIFRoaXMgc2VjdGlvbiBkZWZpbmVzIE1hYyBPUyBYIDEwLjUgKGFuZCBsYXRlcikgc3BlY2lmaWMgYWRkaXRpb25zLgorICovCisjZGVmaW5lIGRhcndpbiAxMgorI2lmbmRlZiBkYXJ3aW4xMgorIyAgIGRlZmluZSBkYXJ3aW4xMiBkYXJ3aW4KKyNlbmRpZgorCisvKgorICogTWFjIE9TIFggc2hvdWxkIG9ubHkgdXNlIHRoZSBtb2Rlcm4gQVBJIGFuZCBkZWZpbml0aW9ucy4KKyAqLworI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworI2RlZmluZSBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUyAxCisjZW5kaWYKKworLyoKKyAqIGxvb2tzIGxpa2UgdGhlIElGVGFibGUgc3R1ZmYgd29ya3MgYmV0dGVyIHRoYW4gdGhlIG1pYklJIHZlcnNpb25zCisgKi8KKyAKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKKworLyoKKyAqIHVzZSBuZXcgaG9zdCByZXNvdXJjZXMgZmlsZXMgYXMgd2VsbAorICovCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV0lOU1RfUkVXUklURVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fUkVXUklURVMKKyN1bmRlZiBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9XUklURV9TVVBQT1JUCisjZGVmaW5lIE5FVFNOTVBfQ0FOX0dFVF9ESVNLX0xBQkVMIDEKKworLyoKKyAqIEVuYWJsaW5nIHRoaXMgcmVzdHJpY3RzIHRoZSBjb21waWxlciB0byBtb3N0bHkgcHVibGljIEFQSXMuCisgKi8KKyNpZm5kZWYgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFCisjZGVmaW5lIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRSAxCisjZW5kaWYKKyNpZm5kZWYgX19BUFBMRV9BUElfVU5TVEFCTEUKKyNkZWZpbmUgX19BUFBMRV9BUElfVU5TVEFCTEUgMQorI2VuZGlmCisKKy8qCisgKiBEYXJ3aW4ncyB0b29scyBhcmUgY2FwYWJsZSBvZiBidWlsZGluZyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIGluIG9uZSBwYXNzLgorICogQXMgYSByZXN1bHQsIHBsYXRmb3JtIGRlZmluaXRpb25zIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCBjb21waWxlIHRpbWUuCisgKi8KKyNpZmRlZiBCWVRFX09SREVSCisjIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBBbHRob3VnaCBEYXJ3aW4gZG9lcyBoYXZlIGFuIGZzdGFiLmggZmlsZSwgZ2V0ZnNmaWxlIGV0Yy4gYWx3YXlzIHJldHVybiBudWxsLgorICogQXQgbGVhc3QsIGFzIG9mIDUuMy4KKyAqLworI3VuZGVmIEhBVkVfRlNUQUJfSAorCisjZGVmaW5lIFNXQVBGSUxFX0RJUiAiL3ByaXZhdGUvdmFyL3ZtIgorI2RlZmluZSBTV0FQRklMRV9QUkVGSVggInN3YXBmaWxlIgorCisvKgorICogVGhlc2UgYXBwYXJlbnRseSB1c2VkIHRvIGJlIGluIG5ldGluZXQvdGNwX3RpbWVycy5oLCBidXQgd2VudCBhd2F5IGluCisgKiAxMC40LjIuIERlZmluZSB0aGVtIGhlcmUgdGlsIHdlIGZpbmQgb3V0IGEgd2F5IHRvIGdldCB0aGUgcmVhbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgVENQVFZfTUlOICAgICAgICggIDEqUFJfU0xPV0haKSAgICAgICAgIC8qIG1pbmltdW0gYWxsb3dhYmxlIHZhbHVlICovCisjZGVmaW5lIFRDUFRWX1JFWE1UTUFYICAoIDY0KlBSX1NMT1dIWikgICAgICAgICAvKiBtYXggYWxsb3dhYmxlIFJFWE1UIHZhbHVlICovCisKKy8qCisgKiBCZWNhdXNlIE1hYyBPUyBYIGlzIGJ1aWx0IG9uIE1hY2gsIGl0IGRvZXMgbm90IHByb3ZpZGUgYSBCU0QtY29tcGF0aWJsZQorICogVk0gc3RhdGlzdGljcyBBUEkuCisgKi8KKyNkZWZpbmUgVVNFX01BQ0hfSE9TVF9TVEFUSVNUSUNTIDEKKworLyoKKyAqIFRoaXMgdGVsbHMgY29kZSB0aGF0IG1hbmlwdWxhdGVzIElQdjYgdGhhdCB0aGUgc3RydWN0dXJlcyBhcmUgdW5pZmllZCwKKyAqIGkuZS4sIElQdjQgYW5kIElQdjYgdXNlIHRoZSBzYW1lIHN0cnVjdHMuCisgKiBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIHJlcGxhY2VkIHdpdGggYSBjb25maWd1cmUgZGlyZWN0aXZlLgorICovCisvKiAjZGVmaW5lIFVTRV9VTklGSUVEX0lQVjZfU1RSVUNUUyAxICovCisjdW5kZWYgU1RSVUNUX2luNnBjYl9IQVNfaW5wX3ZmbGFnCisKKy8qCisgKiB1dGlsaXR5IG1hY3JvIHVzZWQgaW4gc2V2ZXJhbCBkYXJ3aW4gc3BlY2lmaWMgZmlsZXMKKyAqLworI2RlZmluZSBTTk1QX0NGUmVsZWFzZSh4KSBkbyB7IGlmICh4KSB7IENGUmVsZWFzZSh4KTsgeCA9IE5VTEw7IH0gfSB3aGlsZSgwKQorCisvKgorICogTWFjIE9TIFggcnVucyBvbiBib3RoIFBQQyBhbmQgSW50ZWwgaGFyZHdhcmUsCisgKiAgIHdoaWNoIGhhbmRsZSB1ZHBUYWJsZSBpbmRleCB2YWx1ZXMgZGlmZmVyZW50bHkKKyAqLworI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgorI2lmZGVmIFRBUkdFVF9SVF9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIFVEUF9BRERSRVNTRVNfSU5fSE9TVF9PUkRFUiAxCisjZW5kaWYKKworLyoKKyAqIGFzIG9mIDcvMjAxMCwgb3BlbnNzbCBvbiBkYXJ3aW4gZG9lcyBub3QgaGF2ZSBzaGEyNTYKKyAqLworI2RlZmluZSBPUEVOU1NMX05PX1NIQTI1NiAxCisjZGVmaW5lIE9QRU5TU0xfTk9fU0hBNTEyIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEzLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTg3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMy5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogV2hpbGUgRGFyd2luIDEwIChha2EsIE1hYyBPUyBYIDEwLjYgU25vdyBMZW9wYXJkKSBpcyAiQlNELWxpa2UiLCBpdCBkaWZmZXJzCisgKiBzdWJzdGFudGlhbGx5IGVub3VnaCB0byBub3Qgd2FycmFudCBwcmV0ZW5kaW5nIGl0IGlzIGEgQlNEIGZsYXZvci4KKyAqIFRoaXMgZmlyc3Qgc2VjdGlvbiBhcmUgdGhlIHZlc3RpZ2FsIEJTRCByZW1uYW50cy4KKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKy8qCisgKiBCU0Qgc3lzdGVtcyB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kIG9mIGxvb2tpbmcgdXAgc29ja2FkZHJfaW4gdmFsdWVzIAorICovCisvKiAjZGVmaW5lIE5FRURfS0xHRVRTQSAxICovCisKKy8qCisgKiBBUlBfU2Nhbl9OZXh0IG5lZWRzIGEgNHRoIGlmSW5kZXggYXJndW1lbnQgCisgKi8KKyNkZWZpbmUgQVJQX1NDQU5fRk9VUl9BUkdVTUVOVFMgMQorCisjZGVmaW5lIENIRUNLX1JUX0ZMQUdTIDEKKworLyoKKyAqIHRoaXMgaXMgbm90IGdvb2QgZW5vdWdoIGJlZm9yZSBmcmVlYnNkMyEgCisgKi8KKy8qICN1bmRlZiBIQVZFX05FVF9JRl9NSUJfSCAqLworCisvKgorICogVGhpcyBzZWN0aW9uIGFkZHMgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGZyb20gZ2VuZXJpYy5oCisgKiAoYSBmaWxlIHdlIGRvbid0IGluY2x1ZGUgaGVyZSkKKyAqLworCisvKgorICogdWRwX2lucGNiIGxpc3Qgc3ltYm9sLCBlLmcuIGZvciBtaWJJSS91ZHBUYWJsZS5jCisgKi8KKyNkZWZpbmUgSU5QX05FWFRfU1lNQk9MIGlucF9uZXh0CisKKy8qCisgKiBUaGlzIHNlY3Rpb24gZGVmaW5lcyBNYWMgT1MgWCAxMC41IChhbmQgbGF0ZXIpIHNwZWNpZmljIGFkZGl0aW9ucy4KKyAqLworI2RlZmluZSBkYXJ3aW4gMTMKKyNpZm5kZWYgZGFyd2luMTMKKyMgICBkZWZpbmUgZGFyd2luMTMgZGFyd2luCisjZW5kaWYKKworLyoKKyAqIE1hYyBPUyBYIHNob3VsZCBvbmx5IHVzZSB0aGUgbW9kZXJuIEFQSSBhbmQgZGVmaW5pdGlvbnMuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyNkZWZpbmUgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMgMQorI2VuZGlmCisKKy8qCisgKiBsb29rcyBsaWtlIHRoZSBJRlRhYmxlIHN0dWZmIHdvcmtzIGJldHRlciB0aGFuIHRoZSBtaWJJSSB2ZXJzaW9ucworICovCisgCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCisKKy8qCisgKiB1c2UgbmV3IGhvc3QgcmVzb3VyY2VzIGZpbGVzIGFzIHdlbGwKKyAqLworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dJTlNUX1JFV1JJVEVTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1JFV1JJVEVTCisjdW5kZWYgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fV1JJVEVfU1VQUE9SVAorI2RlZmluZSBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTCAxCisKKy8qCisgKiBFbmFibGluZyB0aGlzIHJlc3RyaWN0cyB0aGUgY29tcGlsZXIgdG8gbW9zdGx5IHB1YmxpYyBBUElzLgorICovCisjaWZuZGVmIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRQorI2RlZmluZSBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UgMQorI2VuZGlmCisjaWZuZGVmIF9fQVBQTEVfQVBJX1VOU1RBQkxFCisjZGVmaW5lIF9fQVBQTEVfQVBJX1VOU1RBQkxFIDEKKyNlbmRpZgorCisvKgorICogRGFyd2luJ3MgdG9vbHMgYXJlIGNhcGFibGUgb2YgYnVpbGRpbmcgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyBpbiBvbmUgcGFzcy4KKyAqIEFzIGEgcmVzdWx0LCBwbGF0Zm9ybSBkZWZpbml0aW9ucyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgY29tcGlsZSB0aW1lLgorICovCisjaWZkZWYgQllURV9PUkRFUgorIyB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogQWx0aG91Z2ggRGFyd2luIGRvZXMgaGF2ZSBhbiBmc3RhYi5oIGZpbGUsIGdldGZzZmlsZSBldGMuIGFsd2F5cyByZXR1cm4gbnVsbC4KKyAqIEF0IGxlYXN0LCBhcyBvZiA1LjMuCisgKi8KKyN1bmRlZiBIQVZFX0ZTVEFCX0gKKworI2RlZmluZSBTV0FQRklMRV9ESVIgIi9wcml2YXRlL3Zhci92bSIKKyNkZWZpbmUgU1dBUEZJTEVfUFJFRklYICJzd2FwZmlsZSIKKworLyoKKyAqIFRoZXNlIGFwcGFyZW50bHkgdXNlZCB0byBiZSBpbiBuZXRpbmV0L3RjcF90aW1lcnMuaCwgYnV0IHdlbnQgYXdheSBpbgorICogMTAuNC4yLiBEZWZpbmUgdGhlbSBoZXJlIHRpbCB3ZSBmaW5kIG91dCBhIHdheSB0byBnZXQgdGhlIHJlYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFRDUFRWX01JTiAgICAgICAoICAxKlBSX1NMT1dIWikgICAgICAgICAvKiBtaW5pbXVtIGFsbG93YWJsZSB2YWx1ZSAqLworI2RlZmluZSBUQ1BUVl9SRVhNVE1BWCAgKCA2NCpQUl9TTE9XSFopICAgICAgICAgLyogbWF4IGFsbG93YWJsZSBSRVhNVCB2YWx1ZSAqLworCisvKgorICogQmVjYXVzZSBNYWMgT1MgWCBpcyBidWlsdCBvbiBNYWNoLCBpdCBkb2VzIG5vdCBwcm92aWRlIGEgQlNELWNvbXBhdGlibGUKKyAqIFZNIHN0YXRpc3RpY3MgQVBJLgorICovCisjZGVmaW5lIFVTRV9NQUNIX0hPU1RfU1RBVElTVElDUyAxCisKKy8qCisgKiBUaGlzIHRlbGxzIGNvZGUgdGhhdCBtYW5pcHVsYXRlcyBJUHY2IHRoYXQgdGhlIHN0cnVjdHVyZXMgYXJlIHVuaWZpZWQsCisgKiBpLmUuLCBJUHY0IGFuZCBJUHY2IHVzZSB0aGUgc2FtZSBzdHJ1Y3RzLgorICogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSByZXBsYWNlZCB3aXRoIGEgY29uZmlndXJlIGRpcmVjdGl2ZS4KKyAqLworLyogI2RlZmluZSBVU0VfVU5JRklFRF9JUFY2X1NUUlVDVFMgMSAqLworI3VuZGVmIFNUUlVDVF9pbjZwY2JfSEFTX2lucF92ZmxhZworCisvKgorICogdXRpbGl0eSBtYWNybyB1c2VkIGluIHNldmVyYWwgZGFyd2luIHNwZWNpZmljIGZpbGVzCisgKi8KKyNkZWZpbmUgU05NUF9DRlJlbGVhc2UoeCkgZG8geyBpZiAoeCkgeyBDRlJlbGVhc2UoeCk7IHggPSBOVUxMOyB9IH0gd2hpbGUoMCkKKworLyoKKyAqIE1hYyBPUyBYIHJ1bnMgb24gYm90aCBQUEMgYW5kIEludGVsIGhhcmR3YXJlLAorICogICB3aGljaCBoYW5kbGUgdWRwVGFibGUgaW5kZXggdmFsdWVzIGRpZmZlcmVudGx5CisgKi8KKyNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4KKyNpZmRlZiBUQVJHRVRfUlRfTElUVExFX0VORElBTgorI2RlZmluZSBVRFBfQUREUkVTU0VTX0lOX0hPU1RfT1JERVIgMQorI2VuZGlmCisKKy8qCisgKiBhcyBvZiA3LzIwMTAsIG9wZW5zc2wgb24gZGFyd2luIGRvZXMgbm90IGhhdmUgc2hhMjU2CisgKi8KKyNkZWZpbmUgT1BFTlNTTF9OT19TSEEyNTYgMQorI2RlZmluZSBPUEVOU1NMX05PX1NIQTUxMiAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW43LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW43LmgKaW5kZXggYjE1NTNkZS4uOGQ0NTU0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luNy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjcuaApAQCAtMTIsMyArMTIsNCBAQAogCiAjZGVmaW5lIFNXQVBGSUxFX0RJUiAiL3ByaXZhdGUvdmFyL3ZtIgogI2RlZmluZSBTV0FQRklMRV9QUkVGSVggInN3YXBmaWxlIgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmgKaW5kZXggMTc0ZmE3OC4uMWU2ZDdkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaApAQCAtNjMsMTQgKzYzLDYgQEAKICNlbmRpZgogCiAvKgotICogQWx0aG91Z2ggRGFyd2luIGRvZXMgaGF2ZSBhIGt2bS5oIGZpbGUsIGt2bV9vcGVuZmlsZXMgZXRjLiBhbHdheXMKLSAqIHJldHVybiBudWxsIGJlY2F1c2UgL2Rldi9rbWVtIHdhcyByZW1vdmVkIGluIE9TIFggMTAuNCBmb3IgSW50ZWwuCi0gKi8KLSN1bmRlZiBIQVZFX0tWTV9ICi0jdW5kZWYgSEFWRV9LVk1fR0VUUFJPQ1MKLSN1bmRlZiBIQVZFX0tWTV9PUEVORklMRVMKLQotLyoKICAqIEFsdGhvdWdoIERhcndpbiBkb2VzIGhhdmUgYW4gZnN0YWIuaCBmaWxlLCBnZXRmc2ZpbGUgZXRjLiBhbHdheXMgcmV0dXJuIG51bGwuCiAgKiBBdCBsZWFzdCwgYXMgb2YgNS4zLgogICovCkBAIC05OSwzICs5MSw0IEBACiAgKi8KIC8qICNkZWZpbmUgVVNFX1VOSUZJRURfSVBWNl9TVFJVQ1RTIDEgKi8KICN1bmRlZiBTVFJVQ1RfaW42cGNiX0hBU19pbnBfdmZsYWcKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oCmluZGV4IDYyZDhkMzAuLmJmM2QyZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45LmgKQEAgLTMsNiArMywxNiBAQAogICogc3Vic3RhbnRpYWxseSBlbm91Z2ggdG8gbm90IHdhcnJhbnQgcHJldGVuZGluZyBpdCBpcyBhIEJTRCBmbGF2b3IuCiAgKiBUaGlzIGZpcnN0IHNlY3Rpb24gYXJlIHRoZSB2ZXN0aWdhbCBCU0QgcmVtbmFudHMuCiAgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLwogCiAvKgogICogQlNEIHN5c3RlbXMgdXNlIGEgZGlmZmVyZW50IG1ldGhvZCBvZiBsb29raW5nIHVwIHNvY2thZGRyX2luIHZhbHVlcyAKQEAgLTM1LDYgKzQ1LDkgQEAKICAqIFRoaXMgc2VjdGlvbiBkZWZpbmVzIE1hYyBPUyBYIDEwLjUgKGFuZCBsYXRlcikgc3BlY2lmaWMgYWRkaXRpb25zLgogICovCiAjZGVmaW5lIGRhcndpbiA5CisjaWZuZGVmIGRhcndpbjkKKyMgICBkZWZpbmUgZGFyd2luOSBkYXJ3aW4KKyNlbmRpZgogCiAvKgogICogTWFjIE9TIFggc2hvdWxkIG9ubHkgdXNlIHRoZSBtb2Rlcm4gQVBJIGFuZCBkZWZpbml0aW9ucy4KQEAgLTUwLDYgKzYzLDE0IEBACiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCiAKIC8qCisgKiB1c2UgbmV3IGhvc3QgcmVzb3VyY2VzIGZpbGVzIGFzIHdlbGwKKyAqLworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV0lOU1RfUkVXUklURVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fUkVXUklURVMKKyN1bmRlZiBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9XUklURV9TVVBQT1JUCisjZGVmaW5lIE5FVFNOTVBfQ0FOX0dFVF9ESVNLX0xBQkVMIDEKKworLyoKICAqIEVuYWJsaW5nIHRoaXMgcmVzdHJpY3RzIHRoZSBjb21waWxlciB0byBtb3N0bHkgcHVibGljIEFQSXMuCiAgKi8KICNpZm5kZWYgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFCkBAIC03MSwyNSArOTIsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBEYXJ3aW4ncyB0b29scyBhcmUgY2FwYWJsZSBvZiBidWlsZGluZyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIGluIG9uZSBwYXNzLgotICogQXMgYSByZXN1bHQsIHBsYXRmb3JtIGRlZmluaXRpb25zIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCBjb21waWxlIHRpbWUuCi0gKi8KLSNpZmRlZiBCWVRFX09SREVSCi0jIHVuZGVmIFdPUkRTX0JJR0VORElBTgotIyBpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLSMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQotIyBlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiBBbHRob3VnaCBEYXJ3aW4gZG9lcyBoYXZlIGEga3ZtLmggZmlsZSwga3ZtX29wZW5maWxlcyBldGMuIGFsd2F5cwotICogcmV0dXJuIG51bGwgYmVjYXVzZSAvZGV2L2ttZW0gd2FzIHJlbW92ZWQgY29tcGxldGVseSBpbiBPUyBYIDEwLjUuCi0gKi8KLSN1bmRlZiBIQVZFX0tWTV9ICi0jdW5kZWYgSEFWRV9LVk1fR0VUUFJPQ1MKLSN1bmRlZiBIQVZFX0tWTV9PUEVORklMRVMKLQotLyoKICAqIEFsdGhvdWdoIERhcndpbiBkb2VzIGhhdmUgYW4gZnN0YWIuaCBmaWxlLCBnZXRmc2ZpbGUgZXRjLiBhbHdheXMgcmV0dXJuIG51bGwuCiAgKiBBdCBsZWFzdCwgYXMgb2YgNS4zLgogICovCkBAIC0xMjAsNiArMTIyLDExIEBACiAjdW5kZWYgU1RSVUNUX2luNnBjYl9IQVNfaW5wX3ZmbGFnCiAKIC8qCisgKiB1dGlsaXR5IG1hY3JvIHVzZWQgaW4gc2V2ZXJhbCBkYXJ3aW4gc3BlY2lmaWMgZmlsZXMKKyAqLworI2RlZmluZSBTTk1QX0NGUmVsZWFzZSh4KSBkbyB7IGlmICh4KSB7IENGUmVsZWFzZSh4KTsgeCA9IE5VTEw7IH0gfSB3aGlsZSgwKQorCisvKgogICogTWFjIE9TIFggcnVucyBvbiBib3RoIFBQQyBhbmQgSW50ZWwgaGFyZHdhcmUsCiAgKiAgIHdoaWNoIGhhbmRsZSB1ZHBUYWJsZSBpbmRleCB2YWx1ZXMgZGlmZmVyZW50bHkKICAqLwpAQCAtMTI3LDMgKzEzNCw0IEBACiAjaWZkZWYgVEFSR0VUX1JUX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgVURQX0FERFJFU1NFU19JTl9IT1NUX09SREVSIDEKICNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkLmgKaW5kZXggNDEwODQyOS4uYTMwNjgzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2QuaApAQCAtMjQsNiArMjQsNCBAQAogCiAvKiBkZWZpbmUgdGhlIGV4dHJhIG1pYiBtb2R1bGVzIHRoYXQgYXJlIHN1cHBvcnRlZCAqLwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKLSNpZmRlZiBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMKICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDUuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q1LmgKaW5kZXggZWZiYzViMy4uMzY5YzFhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNS5oCkBAIC00LDUgKzQsNSBAQAogCiAvKiBkb24ndCBkZWZpbmUgX0tFUk5FTCBvbiBGcmVlQlNEIDUuMyBldmVuIGlmIGNvbmZpZ3VyZSB0aGlua3Mgd2UgbmVlZCBpdCAqLwogI2lmZGVmIGZyZWVic2Q1Ci0jdW5kZWYgSUZORVRfTkVFRFNfS0VSTkVMCisjdW5kZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oCmluZGV4IDBiNjI3ZTkuLjU3Y2VhNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4LmgKQEAgLTgwLDUgKzgwLDE1IEBACiAjICBkZWZpbmUgTkVUU05NUF9FTkFCTEVfSU5MSU5FIDAKICNlbmRpZgogCisvKgorICogcHJldmVudCBzaWdhY3Rpb24gYmVpbmcgcmVkZWZpbmVkIHRvIGNtYV9zaWdhY3Rpb24KKyAqIChjYXVzaW5nIGJ1aWxkIGVycm9ycyBvbiBIUC1VWCAxMC4yMCwgYXQgbGVhc3QpCisgKi8KKyNpZmRlZiBocHV4MTAKKyNpZm5kZWYgX0NNQV9OT1dSQVBQRVJTXworIyAgZGVmaW5lIF9DTUFfTk9XUkFQUEVSU18gMQorI2VuZGlmCisjZW5kaWYKKwogLyogZGVmaW5lIHRoZSBleHRyYSBtaWIgbW9kdWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9pcml4LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9pcml4LmgKaW5kZXggNzlkNDFhOC4uOTMzZmU2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaXJpeC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2lyaXguaApAQCAtMjMsNyArMjMsNyBAQAogLyoKICAqIGRvbid0IGRlZmluZSBfS0VSTkVMIGJlZm9yZSBpbmNsdWRpbmcgc3lzL3VuaXN0ZC5oIAogICovCi0jZGVmaW5lIElGTkVUX05FRURTX0tFUk5FTF9MQVRFICAxCisjZGVmaW5lIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX0xBVEUgIDEKIAogI2RlZmluZSBTVFJFQU1fTkVFRFNfS0VSTkVMX0lTTEFORFMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0va2ZyZWVic2QuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2tmcmVlYnNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmNzAyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2tmcmVlYnNkLmgKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSAiZnJlZWJzZDYuaCIKKyNkZWZpbmUgZnJlZWJzZDYgZnJlZWJzZDYKKworI2luY2x1ZGUgPG9zcmVsZGF0ZS5oPgorI2RlZmluZSBfX0ZyZWVCU0RfdmVyc2lvbiBfX0ZyZWVCU0Rfa2VybmVsX3ZlcnNpb24KKworI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oCmluZGV4IDI5ZDA5YTQuLjY4YTNhNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmgKQEAgLTE2LDYgKzE2LDE1IEBACiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKICAKICAqLworCisvKgorICogTWFrZSB0aGUgZ2V0bmFtZWluZm8oKSBmdW5jdGlvbiBhdmFpbGFibGUuCisgKiBOb3RlOiBhY2NvcmRpbmcgdG8gTVNETiBnZXRuYW1laW5mbygpIGlzIGF2YWlsYWJsZSBpbiB3czJfMzIgb24gV2luZG93cyAyMDAwCisgKiBhbmQgYWJvdmUuIE1pbkdXIG9ubHkgbWFrZXMgZ2V0bmFtZWluZm8oKSB2aXNpYmxlIHdoZW4gc2V0dGluZyBfV0lOMzJfV0lOTlQKKyAqIHRvIDB4MDUwMSAoV2luZG93cyBYUCkgb3IgaGlnaGVyLCB3aGljaCBpcyBhIGJ1ZyBpbiB0aGUgTWluR1cgNS4xLjYgaGVhZGVycy4KKyAqLworI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNTAxCisKICNpbmNsdWRlIDxuZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oPgogCiAjaWZkZWYgSEFWRV9TVERJTlRfSApAQCAtMzAsMTAgKzM5LDcgQEAKICN1bmRlZiBIQVZFX1NJR05BTAogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHRpbWVvZmRheSBmdW5jdGlvbi4gICovCi0vKiBPbmx5IHdoZW4gY29tcGlsaW5nIFBlcmwgbW9kdWxlICAgICAgICAgICAgICAgICovCi0jaWZkZWYgTUlOR1dfUEVSTAogI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCi0jZW5kaWYKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lIGZ1bmN0aW9uLiAgKi8KICNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKQEAgLTQ0LDYgKzUwLDkgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSByYWlzZSgpIGluc3RlYWQgb2YgYWxhcm0oKSAqLwogI2RlZmluZSBIQVZFX1JBSVNFIDEKIAorLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXQgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhlY3YnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRVhFQ1YKIApAQCAtNzIsMTUgKzgxLDEzIEBACiAjZGVmaW5lCUZfU0VURkwJCTQKICNkZWZpbmUJT19OT05CTE9DSwkweDQwMDAgIC8qIG5vbiBibG9ja2luZyBJL08gKFBPU0lYIHN0eWxlKSAqLwogCisjaWZuZGVmIEhBVkVfU1RSVUNUX1RJTUVaT05FX1RaX0RTVFRJTUUKIC8qCi0gKiBJIGR1bm5vIHdoeS4gSXQncyBqdXN0IG5vdCB0aGVyZS4gRGVmaW5lIHN0cnVjdCB0aW1lem9uZS4KLSAqIElmIG90aGVyIHN5c3RlbXMgbmVlZCB0aGlzIGl0IGNvdWxkIGJlIG1vdmVkIHRvIHN5c3RlbS5oCi0gKiBhbmQgdGhlIHByb3BlciBjaGVja2luZyBkb25lIGF0IGNvbmZpZyB0aW1lLiBSaWdodCBub3cgSSBoYXZlCi0gKiBqdXN0IHB1dCBpdCBoZXJlIHRvIGtlZXAgdGhlIE1pbkdXIG91dCBvZiB0aGUgbWFpbiB0cmVlIGFzIG11Y2gKLSAqIGFzIHBvc3NpYmxlLgorICogT2xkZXIgTWluR1cgdmVyc2lvbnMgZG8gbm90IGhhdmUgc3RydWN0IHRpbWV6b25lLCBzbyBkZWZpbmUgaXQgaGVyZS4KICAqLwogc3RydWN0IHRpbWV6b25lIHsKIAlpbnQgdHpfbWludXRlc3dlc3Q7CiAJaW50IHR6X2RzdHRpbWU7CiB9OworI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL25ldGJzZC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbmV0YnNkLmgKaW5kZXggMTNhZDdlYS4uMWYyMmE0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbmV0YnNkLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbmV0YnNkLmgKQEAgLTM0LDggKzM0LDM2IEBACiAKICNkZWZpbmUgVURQX0FERFJFU1NFU19JTl9IT1NUX09SREVSIDEKIAorI2lmZGVmIG5ldGJzZGVsZjYKKyNkZWZpbmUgbmV0YnNkNgorI2RlZmluZSBuZXRic2RlbGY1CisjZW5kaWYKKyNpZmRlZiBuZXRic2RlbGY1CisjZGVmaW5lIG5ldGJzZDUKKyNkZWZpbmUgbmV0YnNkZWxmNAorI2VuZGlmCisjaWZkZWYgbmV0YnNkZWxmNAorI2RlZmluZSBuZXRic2Q0CisjZGVmaW5lIG5ldGJzZGVsZjMKKyNlbmRpZgorI2lmZGVmIG5ldGJzZGVsZjMKKyNkZWZpbmUgbmV0YnNkMworI2VuZGlmCisKKyNpZiBkZWZpbmVkKG5ldGJzZDYpICYmICFkZWZpbmVkKG5ldGJzZDUpCisjZGVmaW5lIG5ldGJzZDUgbmV0YnNkNQorI2VuZGlmCisjaWYgZGVmaW5lZChuZXRic2Q1KSAmJiAhZGVmaW5lZChuZXRic2Q0KQorI2RlZmluZSBuZXRic2Q0IG5ldGJzZDQKKyNlbmRpZgorI2lmIGRlZmluZWQobmV0YnNkNCkgJiYgIWRlZmluZWQobmV0YnNkMykKKyNkZWZpbmUgbmV0YnNkMyBuZXRic2QzCisjZW5kaWYKKyNpZiBkZWZpbmVkKG5ldGJzZDMpICYmICFkZWZpbmVkKG5ldGJzZDIpCisjZGVmaW5lIG5ldGJzZDIgbmV0YnNkMgorI2VuZGlmCiAjaWZuZGVmIG5ldGJzZDEKLSMgZGVmaW5lIG5ldGJzZDEgbmV0YnNkMQorI2RlZmluZSBuZXRic2QxIG5ldGJzZDEKICNlbmRpZgogCiAjaWYgX19OZXRCU0RfVmVyc2lvbl9fID49IDQ5OTAwNTgwMApAQCAtNDQsMyArNzIsNCBAQAogCiAvKiBkZWZpbmUgdGhlIGV4dHJhIG1pYiBtb2R1bGVzIHRoYXQgYXJlIHN1cHBvcnRlZCAqLwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL250by1xbng2LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9udG8tcW54Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NjUxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9udG8tcW54Ni5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpbmNsdWRlICJic2QuaCIKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCisjZGVmaW5lIFBDQl9UQUJMRSAxCisjdW5kZWYgVENQX1NZTUJPTAorI2RlZmluZSBUQ1BfU1lNQk9MICJ0Y2J0YWJsZSIKKyN1bmRlZiBUQ1BfVFRMX1NZTUJPTAorI2RlZmluZSBUQ1BfVFRMX1NZTUJPTCAiaXBfZGVmdHRsIgorI3VuZGVmIFVEQl9TWU1CT0wKKyNkZWZpbmUgVURCX1NZTUJPTCAidWRidGFibGUiCisjdW5kZWYgTlBST0NfU1lNQk9MCisjdW5kZWYgUFJPQ19TWU1CT0wKKworI2RlZmluZSBNQlBPT0xfU1lNQk9MCSJtYnBvb2wiCisjZGVmaW5lIE1DTFBPT0xfU1lNQk9MCSJtY2xwb29sIgorCisvKgorICogaW5wX25leHQgc3ltYm9sIAorICovCisjdW5kZWYgSU5QX05FWFRfU1lNQk9MCisjZGVmaW5lIElOUF9ORVhUX1NZTUJPTCBpbnBfcXVldWUuY3FlX25leHQKKyN1bmRlZiBJTlBfUFJFVl9TWU1CT0wKKyNkZWZpbmUgSU5QX1BSRVZfU1lNQk9MIGlucF9xdWV1ZS5jcWVfcHJldgorI2RlZmluZSBIQVZFX0lOUENCVEFCTEUgMQorCisjdW5kZWYgSUZBRERSX1NZTUJPTAorI2RlZmluZSBJRkFERFJfU1lNQk9MICJpbl9pZmFkZHJoZWFkIgorCisjZGVmaW5lIFVUTVBfRklMRSBfUEFUSF9VVE1QCisKKyNkZWZpbmUgVURQX0FERFJFU1NFU19JTl9IT1NUX09SREVSIDEKKworLyogZGVmaW5lIHRoZSBleHRyYSBtaWIgbW9kdWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KKy8qICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmgKaW5kZXggNzE2Nzk0Yy4uOGRiMGVhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaApAQCAtMTUsNiArMTUsNCBAQAogCiAvKiBkZWZpbmUgdGhlIGV4dHJhIG1pYiBtb2R1bGVzIHRoYXQgYXJlIHN1cHBvcnRlZCAqLwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKLSNpZmRlZiBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMKICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oCmluZGV4IGQzZGNiNzIuLmVjNjFjMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmgKQEAgLTI1LDE0ICsyNSw5IEBACiAjZGVmaW5lIFVEUF9QT1JUU19JTl9IT1NUX09SREVSIDEKICNkZWZpbmUgVENQX1BPUlRTX0lOX0hPU1RfT1JERVIgMQogCi0vKiBnZXQgc29tZSByZXF1aXJlZCBwcm90b3R5cGVzIChzdHJ0b2tfcikgZnJvbSBpbmNsdWRlIGZpbGVzICovCi0jZGVmaW5lIF9fRVhURU5TSU9OU19fCi0KIC8qIGRlZmluZSB0aGUgZXh0cmEgbWliIG1vZHVsZXMgdGhhdCBhcmUgc3VwcG9ydGVkICovCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUwotI2lmZGVmIE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUwotI2VuZGlmCiAKIC8qIFNvbGFyaXMgMi42KyAqLwogI2RlZmluZSBfU0xBU0hfUFJPQ19NRVRIT0RfIDEKQEAgLTQzLDYgKzM4LDYgQEAKIC8qCiAgKiBORVdfTUlCX0NPTVBMSUFOVCBpcyBhIGRlZmluZSB1c2VkIGluIFNvbGFyaXMgMTBVNCsgdG8gZW5hYmxlIGFkZGl0aW9uYWwKICAqIE1JQiBpbmZvcm1hdGlvbiAoaXQgYWZmZWN0cyB0aGUgc3RydWN0cyBpbiA8aW5ldC9taWIyLmg+KQotICovCi0KKyAqLyAKKyAKICNkZWZpbmUgTkVXX01JQl9DT01QTElBTlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N2cjUuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N2cjUuaAppbmRleCBjNGE5ZjlhLi4wMTdjN2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zdnI1LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3ZyNS5oCkBAIC03LDE4ICs3LDEyIEBACiAvKgogICogdXNpbmcgQ0NTICJjYyIsICJjb25maWd1cmUiIGRvZXMgbm90IGZpbmQgdGhpcyBpdGVtIAogICovCi0jZGVmaW5lIEhBVkVfTUVNQ1BZIDEKLS8qCi0gKiBzbywgdW5kbyB0aGUgZGFtYWdlIGRvbmUgZWFybGllciBpbiBjb25maWcuaCAKLSAqLwotI3VuZGVmIG1lbWNweQotI3VuZGVmIG1lbW1vdmUKICNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKIAogLyoKICAqIGxpZSBhYm91dCB0aGlzIG5leHQgZGVmaW5lIHRvIGF2b2lkIHNhX2xlbiBhbmQgc2FfZmFtaWx5IE1BQ1JPUyAhISAKICAqLwotI2RlZmluZSBTVFJVQ1RfU09DS0FERFJfSEFTX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMiAxCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMiAxCiAKIC8qCiAgKiB0aGlzIGhlYWRlciByZXF1aXJlcyBxdWV1ZV90LCBub3QgZWFzaWx5IGRvbmUgd2l0aG91dCBrZXJuZWwgaGVhZGVycyAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCBiL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAppbmRleCBkOTBkZjA3NS4uNWU4MGE0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaApAQCAtMTUsMTEgKzE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZvciAndGltZXZhbCcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTU4LDI2ICs1NCwyOSBAQAogIyBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChjeWd3aW4pCit0eXBlZGVmIEhBTkRMRSBuZXRzbm1wX3BpZF90OworI2RlZmluZSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUyBJTlZBTElEX0hBTkRMRV9WQUxVRQorI2Vsc2UKKy8qCisgKiBOb3RlOiBvbiBQT1NJWC1jb21wbGlhbnQgc3lzdGVtcywgcGlkX3QgaXMgZGVmaW5lZCBpbiA8c3lzL3R5cGVzLmg+LgorICogQW5kIGlmIHBpZF90IGhhcyBub3QgYmVlbiBkZWZpbmVkIGluIDxzeXMvdHlwZXMuaD4sIEFDX1RZUEVfUElEX1QgZW5zdXJlcworICogdGhhdCBhIHBpZF90IGRlZmluaXRpb24gaXMgcHJlc2VudCBpbiBuZXQtc25tcC1jb25maWcuaC4KKyAqLwordHlwZWRlZiBwaWRfdCBuZXRzbm1wX3BpZF90OworI2RlZmluZSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUyAtMQorI2VuZGlmCisKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4JCS8qIEZvciBkZWZpbml0aW9uIG9mIGluX2FkZHJfdCAqLwogI2VuZGlmCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29pZC5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZm5kZWYgTUFYX1NVQklEICAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IC0gZHVwbGljYXRlIGRlZmluaXRpb24gcHJvdGVjdGlvbiAqLwotI2lmbmRlZiBFSUdIVEJJVF9TVUJJRFMKLXR5cGVkZWYgdV9sb25nICBvaWQ7Ci0jZGVmaW5lIE1BWF9TVUJJRCAgIDB4RkZGRkZGRkZVTAotI2RlZmluZSBORVRTTk1QX1BSSW8gImwiCi0jZWxzZQotdHlwZWRlZiB1X2NoYXIgIG9pZDsKLSNkZWZpbmUgTUFYX1NVQklEICAgMHhGRgotI2RlZmluZSBORVRTTk1QX1BSSW8gIiIKLSNlbmRpZgotI2VuZGlmCi0KICNpZm5kZWYgSEFWRV9TT0NLTEVOX1QKIHR5cGVkZWYgdV9pbnQgc29ja2xlbl90OwogI2VuZGlmCkBAIC05OCwxNDIgKzk3LDEwIEBACiAjZW5kaWYKICNlbmRpZgogCi0gICAgLyoKLSAgICAgKiBUcnkgdG8gZW5zdXJlIHdlIGhhdmUgMzItYml0IChhbmQgaG9wZWZ1bGx5IDY0LWJpdCkKLSAgICAgKiAgICBpbnRlZ2VyIHR5cGVzIGF2YWlsYWJsZS4KLSAgICAgKi8KLQotI2lmbmRlZiBIQVZFX0lOVDhfVAotdHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7Ci0jZW5kaWYgLyogIUhBVkVfSU5UOF9UICovCi0KLSNpZm5kZWYgSEFWRV9VSU5UOF9UCi0jaWZkZWYgSEFWRV9VX0lOVDhfVAotdHlwZWRlZiB1X2ludDhfdCAgICAgIHVpbnQ4X3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhSEFWRV9VSU5UOF9UICovCi0KLSNpZm5kZWYgSEFWRV9JTlQxNl9UCi0jaWYgICBTSVpFT0ZfSU5UID09IDIKLSNkZWZpbmUgSU5UMTZfVCBpbnQKLSNlbGlmIFNJWkVPRl9TSE9SVCA9PSAyCi0jZGVmaW5lIElOVDE2X1Qgc2hvcnQKLSNlbHNlCi0jZGVmaW5lIF9JTlQxNl9JU19OT1RfMTZCSVQKLSNkZWZpbmUgSU5UMTZfVCBzaG9ydAotI2VuZGlmCi10eXBlZGVmIElOVDE2X1QgaW50MTZfdDsKLSNlbmRpZiAvKiAhSEFWRV9JTlQxNl9UICovCi0KLSNpZm5kZWYgSEFWRV9VSU5UMTZfVAotI2lmZGVmIEhBVkVfVV9JTlQxNl9UCi10eXBlZGVmIHVfaW50MTZfdCAgICAgICAgdWludDE2X3Q7Ci0jZWxzZQotI2lmZGVmIElOVDE2X1QKLXR5cGVkZWYgdW5zaWduZWQgSU5UMTZfVCB1aW50MTZfdDsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgdWludDE2X3Q7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8qICFIQVZFX1VJTlQxNl9UICovCi0KLSNpZm5kZWYgSEFWRV9JTlQzMl9UCi0jaWYgICBTSVpFT0ZfSU5UID09IDQKLSNkZWZpbmUgSU5UMzJfVCBpbnQgCi0jZWxpZiBTSVpFT0ZfTE9ORyA9PSA0Ci0jZGVmaW5lIElOVDMyX1QgbG9uZyAKLSNlbGlmIFNJWkVPRl9TSE9SVCA9PSA0Ci0jZGVmaW5lIElOVDMyX1Qgc2hvcnQgCi0jZWxzZQotI2RlZmluZSBfSU5UMzJfSVNfTk9UXzMyQklUCi0jZGVmaW5lIElOVDMyX1QgaW50IAotI2VuZGlmCi10eXBlZGVmIElOVDMyX1QgaW50MzJfdDsKLSNlbmRpZiAvKiAhSEFWRV9JTlQzMl9UICovCi0KLSNpZm5kZWYgSEFWRV9VSU5UMzJfVAotI2lmZGVmIEhBVkVfVV9JTlQzMl9UCi10eXBlZGVmIHVfaW50MzJfdCAgICAgICAgdWludDMyX3Q7Ci0jZWxzZQotI2lmZGVmIElOVDMyX1QKLXR5cGVkZWYgdW5zaWduZWQgSU5UMzJfVCB1aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGludCAgICAgdWludDMyX3Q7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8qICFIQVZFX1VJTlQzMl9UICovCi0KLSNpZm5kZWYgSEFWRV9JTlQ2NF9UCi0jaWYgU0laRU9GX0xPTkcgPT0gOAotI2RlZmluZSBJTlQ2NF9UIGxvbmcgCi0jZWxpZiBTSVpFT0ZfTE9OR19MT05HID09IDgKLSNkZWZpbmUgSU5UNjRfVCBsb25nIGxvbmcKLSNlbGlmICAgU0laRU9GX0lOVCA9PSA4Ci0jZGVmaW5lIElOVDY0X1QgaW50IAotI2VsaWYgU0laRU9GX0xPTkcgPj0gOAotI2RlZmluZSBJTlQ2NF9UIGxvbmcgCi0jZGVmaW5lIF9JTlQ2NF9JU19OT1RfNjRCSVQKLSNlbmRpZgotI2lmZGVmIElOVDY0X1QKLXR5cGVkZWYgSU5UNjRfVCBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QgMQotI2VuZGlmCi0jZW5kaWYgLyogIUhBVkVfSU5UNjRfVCAqLwotCi0jaWZuZGVmIEhBVkVfVUlOVDY0X1QKLSNpZmRlZiBIQVZFX1VfSU5UNjRfVAotdHlwZWRlZiB1X2ludDY0X3QgICAgICAgIHVpbnQ2NF90OwotI2VsaWYgZGVmaW5lZChJTlQ2NF9UKQotdHlwZWRlZiB1bnNpZ25lZCBJTlQ2NF9UIHVpbnQ2NF90OwotI2VuZGlmCi0jZGVmaW5lIEhBVkVfVUlOVDY0X1QgMQorI2lmbmRlZiBIQVZFX05GRFNfVAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBuZmRzX3Q7CiAjZW5kaWYKIAotI2lmbmRlZiBIQVZFX0lOVE1BWF9UCi0jaWZkZWYgU0laRU9GX0xPTkdfTE9ORwotdHlwZWRlZiBsb25nIGxvbmcgaW50bWF4X3Q7Ci0jZGVmaW5lIFNJWkVPRl9JTlRNQVhfVCBTSVpFT0ZfTE9OR19MT05HCi0jZWxpZiBkZWZpbmVkKEhBVkVfSU5UNjRfVCkgJiYgIWRlZmluZWQoX0lOVDY0X0lTX05PVF82NEJJVCkKLXR5cGVkZWYgaW50NjRfdCAgIGludG1heF90OwotI2RlZmluZSBTSVpFT0ZfSU5UTUFYX1QgOAotI2Vsc2UKLXR5cGVkZWYgbG9uZyAgICAgIGludG1heF90OwotI2RlZmluZSBTSVpFT0ZfSU5UTUFYX1QgU0laRU9GX0xPTkcKLSNlbmRpZgotI2RlZmluZSBIQVZFX0lOVE1BWF9UIDEKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfVUlOVE1BWF9UCi0jaWZkZWYgU0laRU9GX0xPTkdfTE9ORwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludG1heF90OwotI2VsaWYgZGVmaW5lZChIQVZFX1VJTlQ2NF9UKSAmJiAhZGVmaW5lZChfSU5UNjRfSVNfTk9UXzY0QklUKQotdHlwZWRlZiB1aW50NjRfdCAgICAgICAgICAgdWludG1heF90OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIHVpbnRtYXhfdDsKLSNlbmRpZgotI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX1VJTlRQVFJfVAotI2lmIFNJWkVPRl9MT05HID09IDgKLS8qIGxpa2VseSA2NGJpdCBtYWNoaW5lIHdpdGggNjRiaXQgYWRkcmVzc2luZz8gKi8KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OwotI2Vsc2UKLSAgICB0eXBlZGVmIHVuc2lnbmVkIHVpbnRwdHJfdDsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9JTlRQVFJfVAotI2lmIFNJWkVPRl9MT05HID09IDgKLS8qIGxpa2VseSA2NGJpdCBtYWNoaW5lIHdpdGggNjRiaXQgYWRkcmVzc2luZz8gKi8KLSAgICB0eXBlZGVmIGxvbmcgaW50cHRyX3Q7Ci0jZWxzZQotICAgIHR5cGVkZWYgaW50IGludHB0cl90OwotI2VuZGlmCi0jZW5kaWYKLSAgICAKICAgICAvKgogICAgICAqICBGb3IgdGhlIGluaXRpYWwgcmVsZWFzZSwgdGhpcyB3aWxsIGp1c3QgcmVmZXIgdG8gdGhlCiAgICAgICogIHJlbGV2YW50IFVDRCBoZWFkZXIgZmlsZXMuCkBAIC0yNDQsNjkgKzExMSwzMTQgQEAKICAgICAgKiAgdG8gYWxsb3cgYXBwbGljYXRpb24gd3JpdGVycyB0byBhZG9wdCB0aGUgbmV3IGhlYWRlciBmaWxlIG5hbWVzLgogICAgICAqLwogCit0eXBlZGVmIHVuaW9uIHsKKyAgIGxvbmcgICAgICAgICAgICppbnRlZ2VyOworICAgdV9jaGFyICAgICAgICAgKnN0cmluZzsKKyAgIG9pZCAgICAgICAgICAgICpvYmppZDsKKyAgIHVfY2hhciAgICAgICAgICpiaXRzdHJpbmc7CisgICBzdHJ1Y3QgY291bnRlcjY0ICpjb3VudGVyNjQ7CisjaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCisgICBmbG9hdCAgICAgICAgICAqZmxvYXRWYWw7CisgICBkb3VibGUgICAgICAgICAqZG91YmxlVmFsOworICAgLyoKKyAgICAqIHRfdW5pb24gKnVuaW9uVmFsOyAKKyAgICAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMgKi8KK30gbmV0c25tcF92YXJkYXRhOwogCi0jaW5jbHVkZSA8bmV0LXNubXAvZGVmaW5pdGlvbnMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+Ci0vKgotICogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oPiAKKworI2RlZmluZSBNQVhfT0lEX0xFTgkgICAgMTI4IC8qIG1heCBzdWJpZCdzIGluIGFuIG9pZCAqLworCisvKiogQHR5cGVkZWYgc3RydWN0IHZhcmlhYmxlX2xpc3QgbmV0c25tcF92YXJpYWJsZV9saXN0CisgKiBUeXBlZGVmcyB0aGUgdmFyaWFibGVfbGlzdCBzdHJ1Y3QgaW50byBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKi8KKy8qKiBAc3RydWN0IHZhcmlhYmxlX2xpc3QKKyAqIFRoZSBuZXRzbm1wIHZhcmlhYmxlIGxpc3QgYmluZGluZyBzdHJ1Y3R1cmUsIGl0J3MgdHlwZWRlZidkIHRvCisgKiBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QuCiAgKi8KLQotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfaW5kZXhfcyB7Ci0gICAgICAgc2l6ZV90ICAgICAgbGVuOwotICAgICAgIG9pZCAgICAgICAgICpvaWRzOwotICAgIH0gbmV0c25tcF9pbmRleDsKK3R5cGVkZWYgc3RydWN0IHZhcmlhYmxlX2xpc3QgeworICAgLyoqIE5VTEwgZm9yIGxhc3QgdmFyaWFibGUgKi8KKyAgIHN0cnVjdCB2YXJpYWJsZV9saXN0ICpuZXh0X3ZhcmlhYmxlOyAgICAKKyAgIC8qKiBPYmplY3QgaWRlbnRpZmllciBvZiB2YXJpYWJsZSAqLworICAgb2lkICAgICAgICAgICAgKm5hbWU7ICAgCisgICAvKiogbnVtYmVyIG9mIHN1YmlkJ3MgaW4gbmFtZSAqLworICAgc2l6ZV90ICAgICAgICAgIG5hbWVfbGVuZ3RoOyAgICAKKyAgIC8qKiBBU04gdHlwZSBvZiB2YXJpYWJsZSAqLworICAgdV9jaGFyICAgICAgICAgIHR5cGU7ICAgCisgICAvKiogdmFsdWUgb2YgdmFyaWFibGUgKi8KKyAgICBuZXRzbm1wX3ZhcmRhdGEgdmFsOworICAgLyoqIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHRvIGJlIGNvcGllZCBpbnRvIGJ1ZiAqLworICAgc2l6ZV90ICAgICAgICAgIHZhbF9sZW47CisgICAvKiogYnVmZmVyIHRvIGhvbGQgdGhlIE9JRCAqLworICAgb2lkICAgICAgICAgICAgIG5hbWVfbG9jW01BWF9PSURfTEVOXTsgIAorICAgLyoqIDkwIHBlcmNlbnRpbGUgPCA0MC4gKi8KKyAgIHVfY2hhciAgICAgICAgICBidWZbNDBdOworICAgLyoqIChPcGFxdWUpIGhvb2sgZm9yIGFkZGl0aW9uYWwgZGF0YSAqLworICAgdm9pZCAgICAgICAgICAgKmRhdGE7CisgICAvKiogY2FsbGJhY2sgdG8gZnJlZSBhYm92ZSAqLworICAgdm9pZCAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSh2b2lkICopOyAgICAKKyAgIGludCAgICAgICAgICAgICBpbmRleDsKK30gbmV0c25tcF92YXJpYWJsZV9saXN0OwogCiAKLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3ZvaWRfYXJyYXlfcyB7Ci0gICAgICAgc2l6ZV90ICBzaXplOwotICAgICAgIHZvaWQgKiAqYXJyYXk7Ci0gICAgfSBuZXRzbm1wX3ZvaWRfYXJyYXk7CisvKiogQHR5cGVkZWYgc3RydWN0IHNubXBfcGR1IHRvIG5ldHNubXBfcGR1CisgKiBUeXBlZGVmcyB0aGUgc25tcF9wZHUgc3RydWN0IGludG8gbmV0c25tcF9wZHUgKi8KKy8qKiBAc3RydWN0IHNubXBfcGR1CisgKiBUaGUgc25tcCBwcm90b2NvbCBkYXRhIHVuaXQuCisgKi8JCit0eXBlZGVmIHN0cnVjdCBzbm1wX3BkdSB7CisKKyNkZWZpbmUgbm9uX3JlcGVhdGVycwllcnJzdGF0CisjZGVmaW5lIG1heF9yZXBldGl0aW9ucyBlcnJpbmRleAogCiAgICAgLyoKLSAgICAgKiByZWZlcmVuY2VzIHRvIHZhcmlvdXMgdHlwZXMKKyAgICAgKiBQcm90b2NvbC12ZXJzaW9uIGluZGVwZW5kZW50IGZpZWxkcwogICAgICAqLwotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX3ZvaWQgewotICAgICAgIHZvaWQgKiB2YWw7Ci0gICAgfSBuZXRzbm1wX3JlZl92b2lkOworICAgIC8qKiBzbm1wIHZlcnNpb24gKi8KKyAgICBsb25nICAgICAgICAgICAgdmVyc2lvbjsKKyAgICAvKiogVHlwZSBvZiB0aGlzIFBEVSAqLwkKKyAgICBpbnQgICAgICAgICAgICAgY29tbWFuZDsKKyAgICAvKiogUmVxdWVzdCBpZCAtIG5vdGU6IG5vdCBpbmNyZW1lbnRlZCBvbiByZXRyaWVzICovCisgICAgbG9uZyAgICAgICAgICAgIHJlcWlkOyAgCisgICAgLyoqIE1lc3NhZ2UgaWQgZm9yIFYzIG1lc3NhZ2VzIG5vdGU6IGluY3JlbWVudGVkIGZvciBlYWNoIHJldHJ5ICovCisgICAgbG9uZyAgICAgICAgICAgIG1zZ2lkOworICAgIC8qKiBVbmlxdWUgSUQgZm9yIGluY29taW5nIHRyYW5zYWN0aW9ucyAqLworICAgIGxvbmcgICAgICAgICAgICB0cmFuc2lkOworICAgIC8qKiBTZXNzaW9uIGlkIGZvciBBZ2VudFggbWVzc2FnZXMgKi8KKyAgICBsb25nICAgICAgICAgICAgc2Vzc2lkOworICAgIC8qKiBFcnJvciBzdGF0dXMgKG5vbl9yZXBlYXRlcnMgaW4gR2V0QnVsaykgKi8KKyAgICBsb25nICAgICAgICAgICAgZXJyc3RhdDsKKyAgICAvKiogRXJyb3IgaW5kZXggKG1heF9yZXBldGl0aW9ucyBpbiBHZXRCdWxrKSAqLworICAgIGxvbmcgICAgICAgICAgICBlcnJpbmRleDsgICAgICAgCisgICAgLyoqIFVwdGltZSAqLworICAgIHVfbG9uZyAgICAgICAgICB0aW1lOyAgIAorICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKIAotICAgIHR5cGVkZWYgdW5pb24gewotICAgICAgICB1X2xvbmcgIHVsOwotICAgICAgICB1X2ludCAgIHVpOwotICAgICAgICB1X3Nob3J0IHVzOwotICAgICAgICB1X2NoYXIgIHVjOwotICAgICAgICBsb25nICAgIHNsOwotICAgICAgICBpbnQgICAgIHNpOwotICAgICAgICBzaG9ydCAgIHNzOwotICAgICAgICBjaGFyICAgIHNjOwotICAgICAgICBjaGFyICogIGNwOwotICAgICAgICB2b2lkICogIHZwOwotICAgIH0gbmV0c25tcF9jdmFsdWU7CisgICAgaW50ICAgICAgICAgICAgIHNlY3VyaXR5TW9kZWw7CisgICAgLyoqIG5vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXYgKi8KKyAgICBpbnQgICAgICAgICAgICAgc2VjdXJpdHlMZXZlbDsgIAorICAgIGludCAgICAgICAgICAgICBtc2dQYXJzZU1vZGVsOwogCi0jaWYgMAotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX3VfY2hhciB7Ci0gICAgICAgdV9jaGFyICogdmFsOwotICAgIH0gbmV0c25tcF9yZWZfVV9jaGFyOworICAgIC8qKgorICAgICAqIFRyYW5zcG9ydC1zcGVjaWZpYyBvcGFxdWUgZGF0YS4gIFRoaXMgcmVwbGFjZXMgdGhlIElQLWNlbnRyaWMgYWRkcmVzcworICAgICAqIGZpZWxkLiAgCisgICAgICovCisgICAgCisgICAgdm9pZCAgICAgICAgICAgKnRyYW5zcG9ydF9kYXRhOworICAgIGludCAgICAgICAgICAgICB0cmFuc3BvcnRfZGF0YV9sZW5ndGg7CiAKLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl9jaGFyIHsKLSAgICAgICBjaGFyICogdmFsOwotICAgIH0gbmV0c25tcF9yZWZfdm9pZDsKKyAgICAvKioKKyAgICAgKiBUaGUgYWN0dWFsIHRyYW5zcG9ydCBkb21haW4uICBUaGlzIFNIT1VMRCBOT1QgQkUgRlJFRSgpRC4gIAorICAgICAqLwogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfaW50X3MgewotICAgICAgIGludCB2YWw7Ci0gICAgfSBuZXRzbm1wX3JlZl9pbnQ7CisgICAgY29uc3Qgb2lkICAgICAgKnREb21haW47CisgICAgc2l6ZV90ICAgICAgICAgIHREb21haW5MZW47CiAKLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl91X2ludF9zIHsKLSAgICAgICB1X2ludCB2YWw7Ci0gICAgfSBuZXRzbm1wX3JlZl9pbnQ7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJpYWJsZXM7CiAKLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl91X2xvbmdfcyB7Ci0gICAgICAgdV9sb25nIHZhbDsKLSAgICB9IG5ldHNubXBfcmVmX3VfbG9uZzsKLSNlbmRpZgogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfc2l6ZV90X3MgewotICAgICAgIHNpemVfdCB2YWw7Ci0gICAgfSAqIG5ldHNubXBfcmVmX3NpemVfdDsKKyAgICAvKgorICAgICAqIFNOTVB2MSAmIFNOTVB2MmMgZmllbGRzCisgICAgICovCisgICAgLyoqIGNvbW11bml0eSBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuICovCisgICAgdV9jaGFyICAgICAgICAgKmNvbW11bml0eTsKKyAgICAvKiogbGVuZ3RoIG9mIGNvbW11bml0eSBuYW1lLiAqLworICAgIHNpemVfdCAgICAgICAgICBjb21tdW5pdHlfbGVuOyAgCisKKyAgICAvKgorICAgICAqIFRyYXAgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICAvKiogU3lzdGVtIE9JRCAqLworICAgIG9pZCAgICAgICAgICAgICplbnRlcnByaXNlOyAgICAgCisgICAgc2l6ZV90ICAgICAgICAgIGVudGVycHJpc2VfbGVuZ3RoOworICAgIC8qKiB0cmFwIHR5cGUgKi8KKyAgICBsb25nICAgICAgICAgICAgdHJhcF90eXBlOworICAgIC8qKiBzcGVjaWZpYyB0eXBlICovCisgICAgbG9uZyAgICAgICAgICAgIHNwZWNpZmljX3R5cGU7CisgICAgLyoqIFRoaXMgaXMgT05MWSB1c2VkIGZvciB2MSBUUkFQcyAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgYWdlbnRfYWRkcls0XTsgIAorCisgICAgLyoKKyAgICAgKiAgU05NUHYzIGZpZWxkcworICAgICAqLworICAgIC8qKiBjb250ZXh0IHNubXBFbmdpbmVJRCAqLworICAgIHVfY2hhciAgICAgICAgICpjb250ZXh0RW5naW5lSUQ7CisgICAgLyoqIExlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQgKi8KKyAgICBzaXplX3QgICAgICAgICAgY29udGV4dEVuZ2luZUlETGVuOyAgICAgCisgICAgLyoqIGF1dGhvcml0YXRpdmUgY29udGV4dE5hbWUgKi8KKyAgICBjaGFyICAgICAgICAgICAqY29udGV4dE5hbWU7CisgICAgLyoqIExlbmd0aCBvZiBjb250ZXh0TmFtZSAqLworICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0TmFtZUxlbjsKKyAgICAvKiogYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgZm9yIHNlY3VyaXR5ICovCisgICAgdV9jaGFyICAgICAgICAgKnNlY3VyaXR5RW5naW5lSUQ7CisgICAgLyoqIExlbmd0aCBvZiBzZWN1cml0eUVuZ2luZUlEICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5RW5naW5lSURMZW47ICAgIAorICAgIC8qKiBvbiBiZWhhbGYgb2YgdGhpcyBwcmluY2lwYWwgKi8KKyAgICBjaGFyICAgICAgICAgICAqc2VjdXJpdHlOYW1lOworICAgIC8qKiBMZW5ndGggb2Ygc2VjdXJpdHlOYW1lLiAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eU5hbWVMZW47ICAgICAgICAKKyAgICAKKyAgICAvKgorICAgICAqIEFnZW50WCBmaWVsZHMKKyAgICAgKiAgICAgIChhbHNvIHVzZXMgU05NUHYxIGNvbW11bml0eSBmaWVsZCkKKyAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAgcHJpb3JpdHk7CisgICAgaW50ICAgICAgICAgICAgIHJhbmdlX3N1YmlkOworICAgIAorICAgIHZvaWQgICAgICAgICAgICpzZWN1cml0eVN0YXRlUmVmOworfSBuZXRzbm1wX3BkdTsKKworCisvKiogQHR5cGVkZWYgc3RydWN0IHNubXBfc2Vzc2lvbiBuZXRzbm1wX3Nlc3Npb24KKyAqIFR5cGVkZWZzIHRoZSBzbm1wX3Nlc3Npb24gc3RydWN0IGludG9uZXRzbm1wX3Nlc3Npb24gKi8KKyAgICAgICAgc3RydWN0IHNubXBfc2Vzc2lvbjsKK3R5cGVkZWYgc3RydWN0IHNubXBfc2Vzc2lvbiBuZXRzbm1wX3Nlc3Npb247CisKKyNkZWZpbmUgVVNNX0FVVEhfS1VfTEVOICAgICAzMgorI2RlZmluZSBVU01fUFJJVl9LVV9MRU4gICAgIDMyCisKK3R5cGVkZWYgaW50ICAgICAgICAoKnNubXBfY2FsbGJhY2spIChpbnQsIG5ldHNubXBfc2Vzc2lvbiAqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB2b2lkICopOwordHlwZWRlZiBpbnQgICAgICgqbmV0c25tcF9jYWxsYmFjaykgKGludCwgbmV0c25tcF9zZXNzaW9uICosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIHZvaWQgKik7CisKK3N0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zOworCisvKiogQHN0cnVjdCBzbm1wX3Nlc3Npb24KKyAqIFRoZSBzbm1wIHNlc3Npb24gc3RydWN0dXJlLgorICovCitzdHJ1Y3Qgc25tcF9zZXNzaW9uIHsKKyAgICAvKgorICAgICAqIFByb3RvY29sLXZlcnNpb24gaW5kZXBlbmRlbnQgZmllbGRzCisgICAgICovCisgICAgLyoqIHNubXAgdmVyc2lvbiAqLworICAgIGxvbmcgICAgICAgICAgICB2ZXJzaW9uOworICAgIC8qKiBOdW1iZXIgb2YgcmV0cmllcyBiZWZvcmUgdGltZW91dC4gKi8KKyAgICBpbnQgICAgICAgICAgICAgcmV0cmllczsKKyAgICAvKiogTnVtYmVyIG9mIHVTIHVudGlsIGZpcnN0IHRpbWVvdXQsIHRoZW4gZXhwb25lbnRpYWwgYmFja29mZiAqLworICAgIGxvbmcgICAgICAgICAgICB0aW1lb3V0OyAgICAgICAgCisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOworICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnN1YnNlc3Npb247CisgICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqbmV4dDsKKworICAgIC8qKiBuYW1lIG9yIGFkZHJlc3Mgb2YgZGVmYXVsdCBwZWVyIChtYXkgaW5jbHVkZSB0cmFuc3BvcnQgc3BlY2lmaWVyIGFuZC9vciBwb3J0IG51bWJlcikgKi8KKyAgICBjaGFyICAgICAgICAgICAqcGVlcm5hbWU7CisgICAgLyoqIFVEUCBwb3J0IG51bWJlciBvZiBwZWVyLiAoTk8gTE9OR0VSIFVTRUQgLSBVU0UgcGVlcm5hbWUgSU5TVEVBRCkgKi8KKyAgICB1X3Nob3J0ICAgICAgICAgcmVtb3RlX3BvcnQ7CisgICAgLyoqIE15IERvbWFpbiBuYW1lIG9yIGRvdHRlZCBJUCBhZGRyZXNzLCAwIGZvciBkZWZhdWx0ICovCisgICAgY2hhciAgICAgICAgICAgKmxvY2FsbmFtZTsKKyAgICAvKiogTXkgVURQIHBvcnQgbnVtYmVyLCAwIGZvciBkZWZhdWx0LCBwaWNrZWQgcmFuZG9tbHkgKi8KKyAgICB1X3Nob3J0ICAgICAgICAgbG9jYWxfcG9ydDsgICAgIAorICAgIC8qKgorICAgICAqIEF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIG9yIE5VTEwgaWYgbnVsbCBhdXRoZW50aWNhdGlvbiBpcyB1c2VkIAorICAgICAqLworICAgIHVfY2hhciAgICAgICAgICooKmF1dGhlbnRpY2F0b3IpICh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLCBzaXplX3QpOworICAgIC8qKiBGdW5jdGlvbiB0byBpbnRlcnByZXQgaW5jb21pbmcgZGF0YSAqLworICAgIG5ldHNubXBfY2FsbGJhY2sgY2FsbGJhY2s7ICAgICAgCisgICAgLyoqCisgICAgICogUG9pbnRlciB0byBkYXRhIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG1heSBjb25zaWRlciBpbXBvcnRhbnQgCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgKmNhbGxiYWNrX21hZ2ljOworICAgIC8qKiBjb3B5IG9mIHN5c3RlbSBlcnJubyAqLworICAgIGludCAgICAgICAgICAgICBzX2Vycm5vOworICAgIC8qKiBjb3B5IG9mIGxpYnJhcnkgZXJybm8gKi8KKyAgICBpbnQgICAgICAgICAgICAgc19zbm1wX2Vycm5vOyAgIAorICAgIC8qKiBTZXNzaW9uIGlkIC0gQWdlbnRYIG9ubHkgKi8KKyAgICBsb25nICAgICAgICAgICAgc2Vzc2lkOyAKKworICAgIC8qCisgICAgICogU05NUHYxICYgU05NUHYyYyBmaWVsZHMKKyAgICAgKi8KKyAgICAvKiogY29tbXVuaXR5IGZvciBvdXRnb2luZyByZXF1ZXN0cy4gKi8KKyAgICB1X2NoYXIgICAgICAgICAqY29tbXVuaXR5OworICAgIC8qKiBMZW5ndGggb2YgY29tbXVuaXR5IG5hbWUuICovCisgICAgc2l6ZV90ICAgICAgICAgIGNvbW11bml0eV9sZW47ICAKKyAgICAvKiogIExhcmdlc3QgbWVzc2FnZSB0byB0cnkgdG8gcmVjZWl2ZS4gICovCisgICAgc2l6ZV90ICAgICAgICAgIHJjdk1zZ01heFNpemU7CisgICAgLyoqICBMYXJnZXN0IG1lc3NhZ2UgdG8gdHJ5IHRvIHNlbmQuICAqLworICAgIHNpemVfdCAgICAgICAgICBzbmRNc2dNYXhTaXplOyAgCisKKyAgICAvKgorICAgICAqIFNOTVB2MyBmaWVsZHMKKyAgICAgKi8KKyAgICAvKiogYXJlIHdlIHRoZSBhdXRob3JpdGF0aXZlIGVuZ2luZT8gKi8KKyAgICB1X2NoYXIgICAgICAgICAgaXNBdXRob3JpdGF0aXZlOworICAgIC8qKiBhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCAqLworICAgIHVfY2hhciAgICAgICAgICpjb250ZXh0RW5naW5lSUQ7CisgICAgLyoqIExlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQgKi8KKyAgICBzaXplX3QgICAgICAgICAgY29udGV4dEVuZ2luZUlETGVuOyAgICAgCisgICAgLyoqIGluaXRpYWwgZW5naW5lQm9vdHMgZm9yIHJlbW90ZSBlbmdpbmUgKi8KKyAgICB1X2ludCAgICAgICAgICAgZW5naW5lQm9vdHM7CisgICAgLyoqIGluaXRpYWwgZW5naW5lVGltZSBmb3IgcmVtb3RlIGVuZ2luZSAqLworICAgIHVfaW50ICAgICAgICAgICBlbmdpbmVUaW1lOworICAgIC8qKiBhdXRob3JpdGF0aXZlIGNvbnRleHROYW1lICovCisgICAgY2hhciAgICAgICAgICAgKmNvbnRleHROYW1lOworICAgIC8qKiBMZW5ndGggb2YgY29udGV4dE5hbWUgKi8KKyAgICBzaXplX3QgICAgICAgICAgY29udGV4dE5hbWVMZW47CisgICAgLyoqIGF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEICovCisgICAgdV9jaGFyICAgICAgICAgKnNlY3VyaXR5RW5naW5lSUQ7CisgICAgLyoqIExlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQgKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlFbmdpbmVJRExlbjsgICAgCisgICAgLyoqIG9uIGJlaGFsZiBvZiB0aGlzIHByaW5jaXBhbCAqLworICAgIGNoYXIgICAgICAgICAgICpzZWN1cml0eU5hbWU7CisgICAgLyoqIExlbmd0aCBvZiBzZWN1cml0eU5hbWUuICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5TmFtZUxlbjsKKworICAgIC8qKiBhdXRoIHByb3RvY29sIG9pZCAqLworICAgIG9pZCAgICAgICAgICAgICpzZWN1cml0eUF1dGhQcm90bzsKKyAgICAvKiogTGVuZ3RoIG9mIGF1dGggcHJvdG9jb2wgb2lkICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5QXV0aFByb3RvTGVuOworICAgIC8qKiBLdSBmb3IgYXV0aCBwcm90b2NvbCBYWFggKi8KKyAgICB1X2NoYXIgICAgICAgICAgc2VjdXJpdHlBdXRoS2V5W1VTTV9BVVRIX0tVX0xFTl07ICAgICAgIAorICAgIC8qKiBMZW5ndGggb2YgS3UgZm9yIGF1dGggcHJvdG9jb2wgKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlBdXRoS2V5TGVuOworICAgIC8qKiBLdWwgZm9yIGF1dGggcHJvdG9jb2wgKi8KKyAgICB1X2NoYXIgICAgICAgICAgKnNlY3VyaXR5QXV0aExvY2FsS2V5OyAgICAgICAKKyAgICAvKiogTGVuZ3RoIG9mIEt1bCBmb3IgYXV0aCBwcm90b2NvbCBYWFggKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlBdXRoTG9jYWxLZXlMZW47ICAgICAgIAorCisgICAgLyoqIHByaXYgcHJvdG9jb2wgb2lkICovCisgICAgb2lkICAgICAgICAgICAgKnNlY3VyaXR5UHJpdlByb3RvOworICAgIC8qKiBMZW5ndGggb2YgcHJpdiBwcm90b2NvbCBvaWQgKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlQcml2UHJvdG9MZW47CisgICAgLyoqIEt1IGZvciBwcml2YWN5IHByb3RvY29sIFhYWCAqLworICAgIHVfY2hhciAgICAgICAgICBzZWN1cml0eVByaXZLZXlbVVNNX1BSSVZfS1VfTEVOXTsgICAgICAgCisgICAgLyoqIExlbmd0aCBvZiBLdSBmb3IgcHJpdiBwcm90b2NvbCAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eVByaXZLZXlMZW47CisgICAgLyoqIEt1bCBmb3IgcHJpdiBwcm90b2NvbCAqLworICAgIHVfY2hhciAgICAgICAgICAqc2VjdXJpdHlQcml2TG9jYWxLZXk7ICAgICAgIAorICAgIC8qKiBMZW5ndGggb2YgS3VsIGZvciBwcml2IHByb3RvY29sIFhYWCAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eVByaXZMb2NhbEtleUxlbjsgICAgICAgCisKKyAgICAvKiogc25tcCBzZWN1cml0eSBtb2RlbCwgdjEsIHYyYywgdXNtICovCisgICAgaW50ICAgICAgICAgICAgIHNlY3VyaXR5TW9kZWw7CisgICAgLyoqIG5vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXYgKi8KKyAgICBpbnQgICAgICAgICAgICAgc2VjdXJpdHlMZXZlbDsgIAorICAgIC8qKiB0YXJnZXQgcGFyYW0gbmFtZSAqLworICAgIGNoYXIgICAgICAgICAgICpwYXJhbU5hbWU7CisKKyAgICAvKioKKyAgICAgKiBzZWN1cml0eSBtb2R1bGUgc3BlY2lmaWMgCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgKnNlY3VyaXR5SW5mbzsKKworICAgIC8qKgorICAgICAqIHRyYW5zcG9ydCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIAorICAgICAqLworICAgc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3MgKnRyYW5zcG9ydF9jb25maWd1cmF0aW9uOworCisgICAgLyoqCisgICAgICogdXNlIGFzIHlvdSB3YW50IGRhdGEgCisgICAgICoKKyAgICAgKiAgICAgdXNlZCBieSAnU05NUF9GTEFHU19SRVNQX0NBTExCQUNLJyBoYW5kbGluZyBpbiB0aGUgYWdlbnQKKyAgICAgKiBYWFg6IG9yIHNob3VsZCB3ZSBhZGQgYSBuZXcgZmllbGQgaW50byB0aGlzIHN0cnVjdHVyZT8KKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAqbXl2b2lkOworfTsKKworCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RlZmluaXRpb25zLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAppbmRleCBlZDU3NDhiLi43ZjQ4NTAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCkBAIC03LDE2ICs3LDk3IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCi0gICAgLyoKLSAgICAgKiAgRm9yIHRoZSBpbml0aWFsIHJlbGVhc2UsIHRoaXMgd2lsbCBqdXN0IHJlZmVyIHRvIHRoZQotICAgICAqICByZWxldmFudCBVQ0QgaGVhZGVyIGZpbGVzLgotICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZSByb3V0aW5lcyByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgdGhlCi0gICAgICogIEFQSSB3aWxsIGJlIGlkZW50aWZpZWQsIGFuZCBsaXN0ZWQgaGVyZSBkaXJlY3RseS4KLSAgICAgKgotICAgICAqICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGhlYWRlciBmaWxlIGlzIGEgcGxhY2Vob2xkZXIsCi0gICAgICogIHRvIGFsbG93IGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8gYWRvcHQgdGhlIG5ldyBoZWFkZXIgZmlsZSBuYW1lcy4KLSAgICAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKIAorICAgIC8qIENyZWF0aW9uICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgorICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShuZXRzbm1wX3BkdSAqcGR1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogdmFsdWUsIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoKKyAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKiB2YXJsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogdmFsdWUsIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoKKyAgICAgICBzbm1wX2FkZF9udWxsX3ZhcihuZXRzbm1wX3BkdSAqcGR1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCisgICAgICAgc25tcF9jbG9uZV92YXJiaW5kKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmxpc3QpOworCisgICAgLyogU2V0dGluZyBWYWx1ZXMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3NldF92YXJfb2JqaWQobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3NldF92YXJfdmFsdWUobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIHZhbHVlLCBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogdmFsdWUsIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLCBsb25nIHZhbCk7CisKKyAgICAgLyogT3V0cHV0ICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgcHJpbnRfdmFyaWFibGUoY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgZnByaW50X3ZhcmlhYmxlKEZJTEUgKiBmcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICBzbnByaW50X3ZhcmlhYmxlKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgICBwcmludF92YWx1ZShjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGZwcmludF92YWx1ZShGSUxFICogZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgc25wcmludF92YWx1ZShjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKKworICAgICAgICAgICAvKiBTZWUgbWliX2FwaS5oIGZvciB7LGYsc259cHJpbnRfb2JqaWQgKi8KKworICAgIC8qIERlbGV0aW9uICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9mcmVlX3ZhciggICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpOyAgICAgLyogZnJlZXMganVzdCB0aGlzIG9uZSAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFybGlzdCk7IC8qIGZyZWVzIGFsbCBpbiBsaXN0ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqICAgIEhhdmluZyBleHRyYWN0ZWQgdGhlIG1haW4gKCJwdWJsaWMgQVBJIikgY2FsbHMgcmVsZXZhbnQKKyAgICAgKiAgdG8gdGhpcyBhcmVhIG9mIHRoZSBOZXQtU05NUCBwcm9qZWN0LCB0aGUgbmV4dCBzdGVwIGlzIHRvCisgICAgICogIGlkZW50aWZ5IHRoZSByZWxhdGVkICJwdWJsaWMgaW50ZXJuYWwgQVBJIiByb3V0aW5lcy4KKyAgICAgKgorICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBnYXRoZXJlZAorICAgICAqICB0b2dldGhlciBpbnRvIGEgY29tcGFuaW9uICdsaWJyYXJ5L3ZhcmJpbmRfYXBpLmgnIGhlYWRlciBmaWxlLgorICAgICAqICBbT3Igc29tZSBzdWl0YWJsZSBuYW1lXQorICAgICAqCisgICAgICogICAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlCisgICAgICogIHRyYWRpdGlvbmFsIGhlYWRlcnMgdGhhdCBwcm92aWRlZCB0aGUgYWJvdmUgZGVmaW5pdGlvbnMKKyAgICAgKiAgd2lsbCBwcm9iYWJseSBhbHNvIGNvdmVyIHRoZSByZWxldmFudCBpbnRlcm5hbCBBUEkgY2FsbHMuCisgICAgICogIEhlbmNlIHRoZXkgYXJlIGxpc3RlZCBoZXJlOgorICAgICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9taWIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIGIvaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKaW5kZXggMTdiMmU0NS4uMWMzNmZmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKQEAgLTksNiArOSw3IEBACiAgICAgZXh0ZXJuIGNvbnN0IGNoYXIgKk5ldFNubXBWZXJzaW9uSW5mbzsKICNlbmRpZgogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjb25zdCBjaGFyICAgICAqbmV0c25tcF9nZXRfdmVyc2lvbih2b2lkKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbnN0YWxsLXNoIGIvaW5zdGFsbC1zaAppbmRleCAyYzIxMmNjLi4zZjgzY2U5IDEwMDc1NQotLS0gYS9pbnN0YWxsLXNoCisrKyBiL2luc3RhbGwtc2gKQEAgLTEsMTkgKzEsMzggQEAKLSMhIC9iaW4vc2gKLSMKKyMhL2Jpbi9zaAogIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKLSMgVGhpcyBjb21lcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLgorCitzY3JpcHR2ZXJzaW9uPTIwMTAtMDItMDYuMTg7ICMgVVRDCisKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KICMKLSMgQ29weXJpZ2h0IDE5OTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQogIwotIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLSMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKLSMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0Ci0jIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKLSMgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0jIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKLSMgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKLSMgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCi0jIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgogIwogIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAogIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdApAQCAtMjEsMjMwICs0MCw0ODUgQEAKICMKICMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgogIyBmcm9tIHNjcmF0Y2guCi0jCiAKK25sPScKKycKK0lGUz0iICIiCSRubCIKIAogIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CiAKICMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KLWRvaXQ9IiR7RE9JVFBST0ctfSIKLQotCi0jIHB1dCBpbiBhYnNvbHV0ZSBwYXRocyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsgb3IgdXNlIGVudi4gdmFycy4KLQotbXZwcm9nPSIke01WUFJPRy1tdn0iCi1jcHByb2c9IiR7Q1BQUk9HLWNwfSIKLWNobW9kcHJvZz0iJHtDSE1PRFBST0ctY2htb2R9IgotY2hvd25wcm9nPSIke0NIT1dOUFJPRy1jaG93bn0iCi1jaGdycHByb2c9IiR7Q0hHUlBQUk9HLWNoZ3JwfSIKLXN0cmlwcHJvZz0iJHtTVFJJUFBST0ctc3RyaXB9Igotcm1wcm9nPSIke1JNUFJPRy1ybX0iCi1ta2RpcnByb2c9IiR7TUtESVJQUk9HLW1rZGlyfSIKLQotdHJhbnNmb3JtYmFzZW5hbWU9IiIKLXRyYW5zZm9ybV9hcmc9IiIKLWluc3RjbWQ9IiRtdnByb2ciCi1jaG1vZGNtZD0iJGNobW9kcHJvZyAwNzU1IgotY2hvd25jbWQ9IiIKLWNoZ3JwY21kPSIiCi1zdHJpcGNtZD0iIgotcm1jbWQ9IiRybXByb2cgLWYiCi1tdmNtZD0iJG12cHJvZyIKLXNyYz0iIgotZHN0PSIiCi1kaXJfYXJnPSIiCi0KLXdoaWxlIFsgeCIkMSIgIT0geCBdOyBkbwotICAgIGNhc2UgJDEgaW4KLQktYykgaW5zdGNtZD0iJGNwcHJvZyIKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLWQpIGRpcl9hcmc9dHJ1ZQotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktbSkgY2htb2RjbWQ9IiRjaG1vZHByb2cgJDIiCi0JICAgIHNoaWZ0Ci0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKLQkgICAgc2hpZnQKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgotCSAgICBzaGlmdAotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktcykgc3RyaXBjbWQ9IiRzdHJpcHByb2ciCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS10PSopIHRyYW5zZm9ybWFyZz1gZWNobyAkMSB8IHNlZCAncy8tdD0vLydgCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS1iPSopIHRyYW5zZm9ybWJhc2VuYW1lPWBlY2hvICQxIHwgc2VkICdzLy1iPS8vJ2AKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JKikgIGlmIFsgeCIkc3JjIiA9IHggXQotCSAgICB0aGVuCi0JCXNyYz0kMQotCSAgICBlbHNlCi0JCSMgdGhpcyBjb2xvbiBpcyB0byB3b3JrIGFyb3VuZCBhIDM4NkJTRCAvYmluL3NoIGJ1ZwotCQk6Ci0JCWRzdD0kMQotCSAgICBmaQotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0gICAgZXNhYwotZG9uZQotCi1pZiBbIHgiJHNyYyIgPSB4IF0KLXRoZW4KLQllY2hvICJpbnN0YWxsOglubyBpbnB1dCBmaWxlIHNwZWNpZmllZCIKLQlleGl0IDEKK2RvaXQ9JHtET0lUUFJPRy19CitpZiB0ZXN0IC16ICIkZG9pdCI7IHRoZW4KKyAgZG9pdF9leGVjPWV4ZWMKIGVsc2UKLQl0cnVlCisgIGRvaXRfZXhlYz0kZG9pdAogZmkKIAotaWYgWyB4IiRkaXJfYXJnIiAhPSB4IF07IHRoZW4KLQlkc3Q9JHNyYwotCXNyYz0iIgotCQotCWlmIFsgLWQgJGRzdCBdOyB0aGVuCi0JCWluc3RjbWQ9OgotCWVsc2UKLQkJaW5zdGNtZD1ta2RpcgotCWZpCi1lbHNlCisjIFB1dCBpbiBhYnNvbHV0ZSBmaWxlIG5hbWVzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOworIyBvciB1c2UgZW52aXJvbm1lbnQgdmFycy4KIAotIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kCi0jIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkIAotIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCitjaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9CitjaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9CitjaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259CitjbXBwcm9nPSR7Q01QUFJPRy1jbXB9CitjcHByb2c9JHtDUFBST0ctY3B9Citta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9CittdnByb2c9JHtNVlBST0ctbXZ9CitybXByb2c9JHtSTVBST0ctcm19CitzdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9CiAKLQlpZiBbIC1mICRzcmMgLW8gLWQgJHNyYyBdCi0JdGhlbgotCQl0cnVlCi0JZWxzZQotCQllY2hvICJpbnN0YWxsOiAgJHNyYyBkb2VzIG5vdCBleGlzdCIKLQkJZXhpdCAxCi0JZmkKLQkKLQlpZiBbIHgiJGRzdCIgPSB4IF0KLQl0aGVuCi0JCWVjaG8gImluc3RhbGw6CW5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKLQkJZXhpdCAxCi0JZWxzZQotCQl0cnVlCi0JZmkKLQotIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgaWYgeW91ciBzeXN0ZW0KLSMgZG9lcyBub3QgbGlrZSBkb3VibGUgc2xhc2hlcyBpbiBmaWxlbmFtZXMsIHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZSBsb2dpYwotCi0JaWYgWyAtZCAkZHN0IF0KLQl0aGVuCi0JCWRzdD0iJGRzdCIvYGJhc2VuYW1lICRzcmNgCi0JZWxzZQotCQl0cnVlCi0JZmkKLWZpCi0KLSMjIHRoaXMgc2VkIGNvbW1hbmQgZW11bGF0ZXMgdGhlIGRpcm5hbWUgY29tbWFuZAotZHN0ZGlyPWBlY2hvICRkc3QgfCBzZWQgLWUgJ3MsW14vXSokLCw7cywvJCwsO3MsXiQsLiwnYAotCi0jIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzLgotIyAgdGhpcyBwYXJ0IGlzIHRha2VuIGZyb20gTm9haCBGcmllZG1hbidzIG1raW5zdGFsbGRpcnMgc2NyaXB0Ci0KLSMgU2tpcCBsb3RzIG9mIHN0YXQgY2FsbHMgaW4gdGhlIHVzdWFsIGNhc2UuCi1pZiBbICEgLWQgIiRkc3RkaXIiIF07IHRoZW4KLWRlZmF1bHRJRlM9JwkKK3Bvc2l4X2dsb2I9Jz8nCitpbml0aWFsaXplX3Bvc2l4X2dsb2I9JworICB0ZXN0ICIkcG9zaXhfZ2xvYiIgIT0gIj8iIHx8IHsKKyAgICBpZiAoc2V0IC1mKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgcG9zaXhfZ2xvYj0KKyAgICBlbHNlCisgICAgICBwb3NpeF9nbG9iPToKKyAgICBmaQorICB9CiAnCi1JRlM9IiR7SUZTLSR7ZGVmYXVsdElGU319IgogCi1vSUZTPSIke0lGU30iCi0jIFNvbWUgc2gncyBjYW4ndCBoYW5kbGUgSUZTPS8gZm9yIHNvbWUgcmVhc29uLgotSUZTPSclJwotc2V0IC0gYGVjaG8gJHtkc3RkaXJ9IHwgc2VkIC1lICdzQC9AJUBnJyAtZSAnc0BeJUAvQCdgCi1JRlM9IiR7b0lGU30iCitwb3NpeF9ta2Rpcj0KIAotcGF0aGNvbXA9JycKKyMgRGVzaXJlZCBtb2RlIG9mIGluc3RhbGxlZCBmaWxlLgorbW9kZT0wNzU1CiAKLXdoaWxlIFsgJCMgLW5lIDAgXSA7IGRvCi0JcGF0aGNvbXA9IiR7cGF0aGNvbXB9JHsxfSIKLQlzaGlmdAorY2hncnBjbWQ9CitjaG1vZGNtZD0kY2htb2Rwcm9nCitjaG93bmNtZD0KK212Y21kPSRtdnByb2cKK3JtY21kPSIkcm1wcm9nIC1mIgorc3RyaXBjbWQ9CiAKLQlpZiBbICEgLWQgIiR7cGF0aGNvbXB9IiBdIDsKLSAgICAgICAgdGhlbgotCQkkbWtkaXJwcm9nICIke3BhdGhjb21wfSIKLQllbHNlCi0JCXRydWUKLQlmaQorc3JjPQorZHN0PQorZGlyX2FyZz0KK2RzdF9hcmc9CiAKLQlwYXRoY29tcD0iJHtwYXRoY29tcH0vIgorY29weV9vbl9jaGFuZ2U9ZmFsc2UKK25vX3RhcmdldF9kaXJlY3Rvcnk9CisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0uLi4gWy1UXSBTUkNGSUxFIERTVEZJTEUKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiBTUkNGSUxFUy4uLiBESVJFQ1RPUlkKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtdCBESVJFQ1RPUlkgU1JDRklMRVMuLi4KKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtZCBESVJFQ1RPUklFUy4uLgorCitJbiB0aGUgMXN0IGZvcm0sIGNvcHkgU1JDRklMRSB0byBEU1RGSUxFLgorSW4gdGhlIDJuZCBhbmQgM3JkLCBjb3B5IGFsbCBTUkNGSUxFUyB0byBESVJFQ1RPUlkuCitJbiB0aGUgNHRoLCBjcmVhdGUgRElSRUNUT1JJRVMuCisKK09wdGlvbnM6CisgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisgICAgIC0tdmVyc2lvbiAgZGlzcGxheSB2ZXJzaW9uIGluZm8gYW5kIGV4aXQuCisKKyAgLWMgICAgICAgICAgICAoaWdub3JlZCkKKyAgLUMgICAgICAgICAgICBpbnN0YWxsIG9ubHkgaWYgZGlmZmVyZW50IChwcmVzZXJ2ZSB0aGUgbGFzdCBkYXRhIG1vZGlmaWNhdGlvbiB0aW1lKQorICAtZCAgICAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCisgIC1nIEdST1VQICAgICAgJGNoZ3JwcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gR1JPVVAuCisgIC1tIE1PREUgICAgICAgJGNobW9kcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gTU9ERS4KKyAgLW8gVVNFUiAgICAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgorICAtcyAgICAgICAgICAgICRzdHJpcHByb2cgaW5zdGFsbGVkIGZpbGVzLgorICAtdCBESVJFQ1RPUlkgIGluc3RhbGwgaW50byBESVJFQ1RPUlkuCisgIC1UICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tYW5kczoKKyAgQ0hHUlBQUk9HIENITU9EUFJPRyBDSE9XTlBST0cgQ01QUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRworICBSTVBST0cgU1RSSVBQUk9HCisiCisKK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtYykgOzsKKworICAgIC1DKSBjb3B5X29uX2NoYW5nZT10cnVlOzsKKworICAgIC1kKSBkaXJfYXJnPXRydWU7OworCisgICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7CisKKyAgICAtbSkgbW9kZT0kMgorCWNhc2UgJG1vZGUgaW4KKwkgIConICcqIHwgKicJJyogfCAqJworJyoJICB8IConKicqIHwgKic/JyogfCAqJ1snKikKKwkgICAgZWNobyAiJDA6IGludmFsaWQgbW9kZTogJG1vZGUiID4mMgorCSAgICBleGl0IDE7OworCWVzYWMKKwlzaGlmdDs7CisKKyAgICAtbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OworCisgICAgLXQpIGRzdF9hcmc9JDIKKwlzaGlmdDs7CisKKyAgICAtVCkgbm9fdGFyZ2V0X2RpcmVjdG9yeT10cnVlOzsKKworICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKworICAgIC0tKQlzaGlmdAorCWJyZWFrOzsKKworICAgIC0qKQllY2hvICIkMDogaW52YWxpZCBvcHRpb246ICQxIiA+JjIKKwlleGl0IDE7OworCisgICAgKikgIGJyZWFrOzsKKyAgZXNhYworICBzaGlmdAogZG9uZQorCitpZiB0ZXN0ICQjIC1uZSAwICYmIHRlc3QgLXogIiRkaXJfYXJnJGRzdF9hcmciOyB0aGVuCisgICMgV2hlbiAtZCBpcyB1c2VkLCBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLgorICAjIFdoZW4gLXQgaXMgdXNlZCwgdGhlIGRlc3RpbmF0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkLgorICAjIE90aGVyd2lzZSwgdGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIGRlc3RpbmF0aW9uLiAgUmVtb3ZlIGl0IGZyb20gJEAuCisgIGZvciBhcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgICMgJEAgaXMgbm90IGVtcHR5OiBpdCBjb250YWlucyBhdCBsZWFzdCAkYXJnLgorICAgICAgc2V0IGZub3JkICIkQCIgIiRkc3RfYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgIGZpCisgICAgc2hpZnQgIyBhcmcKKyAgICBkc3RfYXJnPSRhcmcKKyAgZG9uZQogZmkKIAotaWYgWyB4IiRkaXJfYXJnIiAhPSB4IF0KLXRoZW4KLQkkZG9pdCAkaW5zdGNtZCAkZHN0ICYmCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICAgIGVjaG8gIiQwOiBubyBpbnB1dCBmaWxlIHNwZWNpZmllZC4iID4mMgorICAgIGV4aXQgMQorICBmaQorICAjIEl0J3MgT0sgdG8gY2FsbCBgaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KKyAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBjb25kaXRpb25hbCBkaXJlY3Rvcmllcy4KKyAgZXhpdCAwCitmaQogCi0JaWYgWyB4IiRjaG93bmNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93bmNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgotCWlmIFsgeCIkY2hncnBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hncnBjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKLQlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCi0JaWYgWyB4IiRjaG1vZGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaQotZWxzZQoraWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIGRvX2V4aXQ9JyhleGl0ICRyZXQpOyBleGl0ICRyZXQnCisgIHRyYXAgInJldD0xMjk7ICRkb19leGl0IiAxCisgIHRyYXAgInJldD0xMzA7ICRkb19leGl0IiAyCisgIHRyYXAgInJldD0xNDE7ICRkb19leGl0IiAxMworICB0cmFwICJyZXQ9MTQzOyAkZG9fZXhpdCIgMTUKIAotIyBJZiB3ZSdyZSBnb2luZyB0byByZW5hbWUgdGhlIGZpbmFsIGV4ZWN1dGFibGUsIGRldGVybWluZSB0aGUgbmFtZSBub3cuCisgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCisgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KKyAgY2FzZSAkbW9kZSBpbgorICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7CisgICAgKjc1NSkgY3BfdW1hc2s9MjI7OwogCi0JaWYgWyB4IiR0cmFuc2Zvcm1hcmciID0geCBdIAotCXRoZW4KLQkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdGAKKyAgICAqWzAtN10pCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0nJSAyMDAnCisgICAgICBmaQorICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OworICAgICopCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0sdStydworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPSRtb2RlJHVfcGx1c19ydzs7CisgIGVzYWMKK2ZpCisKK2ZvciBzcmMKK2RvCisgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSopIHNyYz0uLyRzcmM7OworICBlc2FjCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgZHN0PSRzcmMKKyAgICBkc3RkaXI9JGRzdAorICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgZHN0ZGlyX3N0YXR1cz0kPworICBlbHNlCisKKyAgICAjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZAorICAgICMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKKyAgICAjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKyAgICBpZiB0ZXN0ICEgLWYgIiRzcmMiICYmIHRlc3QgISAtZCAiJHNyYyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiAkc3JjIGRvZXMgbm90IGV4aXN0LiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGRzdF9hcmciOyB0aGVuCisgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZHN0PSRkc3RfYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICAgIGNhc2UgJGRzdCBpbgorICAgICAgLSopIGRzdD0uLyRkc3Q7OworICAgIGVzYWMKKworICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKKyAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgorICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbm9fdGFyZ2V0X2RpcmVjdG9yeSI7IHRoZW4KKwllY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgICBkc3RkaXI9JGRzdAorICAgICAgZHN0PSRkc3RkaXIvYGJhc2VuYW1lICIkc3JjImAKKyAgICAgIGRzdGRpcl9zdGF0dXM9MAorICAgIGVsc2UKKyAgICAgICMgUHJlZmVyIGRpcm5hbWUsIGJ1dCBmYWxsIGJhY2sgb24gYSBzdWJzdGl0dXRlIGlmIGRpcm5hbWUgZmFpbHMuCisgICAgICBkc3RkaXI9YAorCShkaXJuYW1lICIkZHN0IikgMj4vZGV2L251bGwgfHwKKwlleHByIFgiJGRzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisJZWNobyBYIiRkc3QiIHwKKwkgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXCkuKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSBzLy4qLy4vOyBxJworICAgICAgYAorCisgICAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgICAgZHN0ZGlyX3N0YXR1cz0kPworICAgIGZpCisgIGZpCisKKyAgb2Jzb2xldGVfbWtkaXJfdXNlZD1mYWxzZQorCisgIGlmIHRlc3QgJGRzdGRpcl9zdGF0dXMgIT0gMDsgdGhlbgorICAgIGNhc2UgJHBvc2l4X21rZGlyIGluCisgICAgICAnJykKKwkjIENyZWF0ZSBpbnRlcm1lZGlhdGUgZGlycyB1c2luZyBtb2RlIDc1NSBhcyBtb2RpZmllZCBieSB0aGUgdW1hc2suCisJIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KKwl1bWFzaz1gdW1hc2tgCisJY2FzZSAkc3RyaXBjbWQuJHVtYXNrIGluCisJICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKwkgICpbMjM2N11bMjM2N10pIG1rZGlyX3VtYXNrPSR1bWFzazs7CisJICAuKjBbMDJdWzAyXSB8IC5bMDJdWzAyXSB8IC5bMDJdKSBta2Rpcl91bWFzaz0yMjs7CisKKwkgICpbMC03XSkKKwkgICAgbWtkaXJfdW1hc2s9YGV4cHIgJHVtYXNrICsgMjIgXAorCSAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCisJICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisJICAgIGA7OworCSAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OworCWVzYWMKKworCSMgV2l0aCAtZCwgY3JlYXRlIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIHVzZXItc3BlY2lmaWVkIG1vZGUuCisJIyBPdGhlcndpc2UsIHJlbHkgb24gJG1rZGlyX3VtYXNrLgorCWlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorCSAgbWtkaXJfbW9kZT0tbSRtb2RlCiAJZWxzZQotCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0ICR0cmFuc2Zvcm1iYXNlbmFtZSB8IAotCQkJc2VkICR0cmFuc2Zvcm1hcmdgJHRyYW5zZm9ybWJhc2VuYW1lCisJICBta2Rpcl9tb2RlPQogCWZpCiAKLSMgZG9uJ3QgYWxsb3cgdGhlIHNlZCBjb21tYW5kIHRvIGNvbXBsZXRlbHkgZWxpbWluYXRlIHRoZSBmaWxlbmFtZQorCXBvc2l4X21rZGlyPWZhbHNlCisJY2FzZSAkdW1hc2sgaW4KKwkgICpbMTIzNTY3XVswLTddWzAtN10pCisJICAgICMgUE9TSVggbWtkaXIgLXAgc2V0cyB1K3d4IGJpdHMgcmVnYXJkbGVzcyBvZiB1bWFzaywgd2hpY2gKKwkgICAgIyBpcyBpbmNvbXBhdGlibGUgd2l0aCBGcmVlQlNEICdpbnN0YWxsJyB3aGVuICh1bWFzayAmIDMwMCkgIT0gMC4KKwkgICAgOzsKKwkgICopCisJICAgIHRtcGRpcj0ke1RNUERJUi0vdG1wfS9pbnMkUkFORE9NLSQkCisJICAgIHRyYXAgJ3JldD0kPzsgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiIDI+L2Rldi9udWxsOyBleGl0ICRyZXQnIDAKIAotCWlmIFsgeCIkZHN0ZmlsZSIgPSB4IF0gCi0JdGhlbgotCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0YAorCSAgICBpZiAodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJCWV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9kIikgPi9kZXYvbnVsbCAyPiYxCisJICAgIHRoZW4KKwkgICAgICBpZiB0ZXN0IC16ICIkZGlyX2FyZyIgfHwgeworCQkgICAjIENoZWNrIGZvciBQT1NJWCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIC1tLgorCQkgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgorCQkgICAjIG90aGVyLXdyaXRlYWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KKwkJICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgorCQkgICBsc19sZF90bXBkaXI9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgIGNhc2UgJGxzX2xkX3RtcGRpciBpbgorCQkgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7CisJCSAgICAgZD8/Pz8tPy0tKikgZGlmZmVyZW50X21vZGU9NzU1OzsKKwkJICAgICAqKSBmYWxzZTs7CisJCSAgIGVzYWMgJiYKKwkJICAgJG1rZGlycHJvZyAtbSRkaWZmZXJlbnRfbW9kZSAtcCAtLSAiJHRtcGRpciIgJiYgeworCQkgICAgIGxzX2xkX3RtcGRpcl8xPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICAgIHRlc3QgIiRsc19sZF90bXBkaXIiID0gIiRsc19sZF90bXBkaXJfMSIKKwkJICAgfQorCQkgfQorCSAgICAgIHRoZW4gcG9zaXhfbWtkaXI9OgorCSAgICAgIGZpCisJICAgICAgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KKwkgICAgICBybWRpciAuLyRta2Rpcl9tb2RlIC4vLXAgLi8tLSAyPi9kZXYvbnVsbAorCSAgICBmaQorCSAgICB0cmFwICcnIDA7OworCWVzYWM7OworICAgIGVzYWMKKworICAgIGlmCisgICAgICAkcG9zaXhfbWtkaXIgJiYgKAorCXVtYXNrICRta2Rpcl91bWFzayAmJgorCSRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIKKyAgICAgICkKKyAgICB0aGVuIDoKKyAgICBlbHNlCisKKyAgICAgICMgVGhlIHVtYXNrIGlzIHJpZGljdWxvdXMsIG9yIG1rZGlyIGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVgsCisgICAgICAjIG9yIGl0IGZhaWxlZCBwb3NzaWJseSBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gIENyZWF0ZSB0aGUKKyAgICAgICMgZGlyZWN0b3J5IHRoZSBzbG93IHdheSwgc3RlcCBieSBzdGVwLCBjaGVja2luZyBmb3IgcmFjZXMgYXMgd2UgZ28uCisKKyAgICAgIGNhc2UgJGRzdGRpciBpbgorCS8qKSBwcmVmaXg9Jy8nOzsKKwktKikgcHJlZml4PScuLyc7OworCSopICBwcmVmaXg9Jyc7OworICAgICAgZXNhYworCisgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIgorCisgICAgICBvSUZTPSRJRlMKKyAgICAgIElGUz0vCisgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYKKyAgICAgIHNldCBmbm9yZCAkZHN0ZGlyCisgICAgICBzaGlmdAorICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmCisgICAgICBJRlM9JG9JRlMKKworICAgICAgcHJlZml4ZXM9CisKKyAgICAgIGZvciBkCisgICAgICBkbworCXRlc3QgLXogIiRkIiAmJiBjb250aW51ZQorCisJcHJlZml4PSRwcmVmaXgkZAorCWlmIHRlc3QgLWQgIiRwcmVmaXgiOyB0aGVuCisJICBwcmVmaXhlcz0KIAllbHNlCi0JCXRydWUKKwkgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgorCSAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisJICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworCSAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorCSAgZWxzZQorCSAgICBjYXNlICRwcmVmaXggaW4KKwkgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisJICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKwkgICAgZXNhYworCSAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisJICBmaQogCWZpCisJcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCiAKLSMgTWFrZSBhIHRlbXAgZmlsZSBuYW1lIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgICAgaWYgdGVzdCAtbiAiJHByZWZpeGVzIjsgdGhlbgorCSMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJIGV2YWwgIlwkZG9pdF9leGVjIFwkbWtkaXJwcm9nICRwcmVmaXhlcyIpIHx8CisJICB0ZXN0IC1kICIkZHN0ZGlyIiB8fCBleGl0IDEKKwlvYnNvbGV0ZV9ta2Rpcl91c2VkPXRydWUKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKIAotCWRzdHRtcD0kZHN0ZGlyLyNpbnN0LiQkIworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0ICIkb2Jzb2xldGVfbWtkaXJfdXNlZCRjaG93bmNtZCRjaGdycGNtZCIgPSBmYWxzZSB8fAorICAgICAgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3QiOyB9IHx8IGV4aXQgMQorICBlbHNlCiAKLSMgTW92ZSBvciBjb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQorICAgICMgTWFrZSBhIGNvdXBsZSBvZiB0ZW1wIGZpbGUgbmFtZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCisgICAgZHN0dG1wPSRkc3RkaXIvX2luc3QuJCRfCisgICAgcm10bXA9JGRzdGRpci9fcm0uJCRfCiAKLQkkZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAgJiYKKyAgICAjIFRyYXAgdG8gY2xlYW4gdXAgdGhvc2UgdGVtcCBmaWxlcyBhdCBleGl0LgorICAgIHRyYXAgJ3JldD0kPzsgcm0gLWYgIiRkc3R0bXAiICIkcm10bXAiICYmIGV4aXQgJHJldCcgMAogCi0JdHJhcCAicm0gLWYgJHtkc3R0bXB9IiAwICYmCisgICAgIyBDb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZS4KKyAgICAodW1hc2sgJGNwX3VtYXNrICYmICRkb2l0X2V4ZWMgJGNwcHJvZyAiJHNyYyIgIiRkc3R0bXAiKSAmJgogCi0jIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMKKyAgICAjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMuCisgICAgIworICAgICMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyAgICAjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyAgICAjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgICAgIworICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCiAKLSMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KLSMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQotIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRpbnN0Y21kICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKyAgICAjIElmIC1DLCBkb24ndCBib3RoZXIgdG8gY29weSBpZiBpdCB3b3VsZG4ndCBjaGFuZ2UgdGhlIGZpbGUuCisgICAgaWYgJGNvcHlfb25fY2hhbmdlICYmCisgICAgICAgb2xkPWBMQ19BTEw9QyBscyAtZGxMICIkZHN0IgkyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiCTI+L2Rldi9udWxsYCAmJgogCi0JaWYgWyB4IiRjaG93bmNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93bmNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKLQlpZiBbIHgiJGNoZ3JwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNoZ3JwY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgotCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkc3RyaXBjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCi0JaWYgWyB4IiRjaG1vZGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKKyAgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCAtZiAmJgorICAgICAgIHNldCBYICRvbGQgJiYgb2xkPTokMjokNDokNTokNiAmJgorICAgICAgIHNldCBYICRuZXcgJiYgbmV3PTokMjokNDokNTokNiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCArZiAmJgogCi0jIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisgICAgICAgdGVzdCAiJG9sZCIgPSAiJG5ldyIgJiYKKyAgICAgICAkY21wcHJvZyAiJGRzdCIgIiRkc3R0bXAiID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4KKyAgICAgIHJtIC1mICIkZHN0dG1wIgorICAgIGVsc2UKKyAgICAgICMgUmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorICAgICAgJGRvaXQgJG12Y21kIC1mICIkZHN0dG1wIiAiJGRzdCIgMj4vZGV2L251bGwgfHwKIAotCSRkb2l0ICRybWNtZCAtZiAkZHN0ZGlyLyRkc3RmaWxlICYmCi0JJGRvaXQgJG12Y21kICRkc3R0bXAgJGRzdGRpci8kZHN0ZmlsZSAKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisJIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJeworCSAgdGVzdCAhIC1mICIkZHN0IiB8fAorCSAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCSAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisJICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9CisJICB9IHx8CisJICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKwkgICAgKGV4aXQgMSk7IGV4aXQgMQorCSAgfQorCX0gJiYKIAotZmkgJiYKKwkjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisJJGRvaXQgJG12Y21kICIkZHN0dG1wIiAiJGRzdCIKKyAgICAgIH0KKyAgICBmaSB8fCBleGl0IDEKIAorICAgIHRyYXAgJycgMAorICBmaQorZG9uZQogCi1leGl0IDAKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2xvY2FsL01ha2VmaWxlLmluIGIvbG9jYWwvTWFrZWZpbGUuaW4KaW5kZXggODIzYjY2Yy4uY2I4NGFmYyAxMDA2NDQKLS0tIGEvbG9jYWwvTWFrZWZpbGUuaW4KKysrIGIvbG9jYWwvTWFrZWZpbGUuaW4KQEAgLTE2LDEwICsxNiwxMSBAQAogIwogU05NUENPTkZQQVRIPUBTTk1QQ09ORlBBVEhACiBQRVJTSVNURU5UX0RJUkVDVE9SWT1AUEVSU0lTVEVOVF9ESVJFQ1RPUllACi1QRVJMU0NSSVBUUz1zbm1wY2hlY2sgdGttaWIgbWliMmMgZml4cHJvYyBpcGYtbW9kLnBsIHNubXBjb25mIHRyYXB0b2VtYWlsCitQRVJMU0NSSVBUUz1zbm1wY2hlY2sgdGttaWIgbWliMmMgZml4cHJvYyBpcGYtbW9kLnBsIHNubXBjb25mIHRyYXB0b2VtYWlsIHNubXAtYnJpZGdlLW1pYiBuZXQtc25tcC1jZXJ0CiBTSEVMTFNDUklQVFM9bWliMmMtdXBkYXRlCiBTQ1JJUFRTTUFERUZPUlBFUkw9c25tcGNoZWNrLm1hZGUgdGttaWIubWFkZSBtaWIyYy5tYWRlIGZpeHByb2MubWFkZSBcCi0JaXBmLW1vZC5wbC5tYWRlIHNubXBjb25mLm1hZGUgdHJhcHRvZW1haWwubWFkZQorCWlwZi1tb2QucGwubWFkZSBzbm1wY29uZi5tYWRlIHRyYXB0b2VtYWlsLm1hZGUgc25tcC1icmlkZ2UtbWliLm1hZGUgXAorCW5ldC1zbm1wLWNlcnQubWFkZQogREFUQVNSQ1M9bWliMmMuY29uZiBtaWIyYy5pdGVyYXRlLmNvbmYgbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiBcCiAJbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZiBtaWIyYy5tZmQuY29uZiBcCiAJbWliMmMuYXJyYXktdXNlci5jb25mIG1pYjJjLmNvbHVtbl9lbnVtcy5jb25mIFwKQEAgLTI4LDcgKzI5LDggQEAKIAltaWIyYy5jaGVja192YWx1ZXMuY29uZiBtaWIyYy5jaGVja192YWx1ZXNfbG9jYWwuY29uZiBcCiAJbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mIG1pYjJjLm5vdGlmeS5jb25mIFwKIAltaWIyYy5pbnRfd2F0Y2guY29uZiBtaWIyYy5nZW5odG1sLmNvbmYgXAotCW1pYjJjLnRhYmxlX2RhdGEuY29uZiBtaWIyYy5jb250YWluZXIuY29uZiBtaWIyYy5wZXJsLmNvbmYKKwltaWIyYy5yYXctdGFibGUuY29uZiBtaWIyYy50YWJsZV9kYXRhLmNvbmYgXAorCW1pYjJjLmNvbnRhaW5lci5jb25mIG1pYjJjLnBlcmwuY29uZgogTUlCMkNJTlNUQUxMRElSPSQoc25tcGxpYmRpcikvbWliMmMtZGF0YQogTUlCMkNEQVRBU1JDPW1pYjJjLWNvbmYuZAogTUlCMkNGSUxFUz1kZWZhdWx0LW1mZC10b3AubTJjIGRldGFpbHMtZW51bXMubTJpIGRldGFpbHMtbm9kZS5tMmkgXApAQCAtMTA2LDYgKzEwOCwxMyBAQAogCSAgdG91Y2ggbWliMmMubWFkZTsgXAogICAgICAgICBmaQogCituZXQtc25tcC1jZXJ0Lm1hZGU6ICQoc3JjZGlyKS9uZXQtc25tcC1jZXJ0CisJaWYgdGVzdCAieCQoUEVSTCkiICE9ICJ4IiA7IHRoZW4gXAorCSAgJChQRVJMKSAtcCAtZSAncyVeIyEuKi9wZXJsLiolIyEkKFBFUkwpJTtzIy91c3IvbG9jYWwvc2hhcmUvc25tcCMkKHNubXBsaWJkaXIpIzsnICR7c3JjZGlyfS9uZXQtc25tcC1jZXJ0ID4gbmV0LXNubXAtY2VydC5tYWRlOyBcCisJZWxzZSBcCisJICB0b3VjaCBuZXQtc25tcC1jZXJ0Lm1hZGU7IFwKKyAgICAgICAgZmkKKwogCiBpcGYtbW9kLnBsLm1hZGU6ICQoc3JjZGlyKS9pcGYtbW9kLnBsCiAJaWYgdGVzdCAieCQoUEVSTCkiICE9ICJ4IiA7IHRoZW4gXApAQCAtMTIxLDkgKzEzMCw5IEBACiAJICB0b3VjaCBmaXhwcm9jLm1hZGU7IFwKICAgICAgICAgZmkKIAotc25tcGNvbmYubWFkZTogJChzcmNkaXIpL3NubXBjb25mCitzbm1wY29uZi5tYWRlOiBzbm1wY29uZgogCWlmIHRlc3QgIngkKFBFUkwpIiAhPSAieCIgOyB0aGVuIFwKLQkgICQoUEVSTCkgLXAgLWUgJ3MlXiMhLiovcGVybC4qJSMhJChQRVJMKSU7IHMjL3Vzci9sb2NhbC9zaGFyZSMkKGRhdGFkaXIpI2c7IHMjL3Vzci9sb2NhbC9ldGMvc25tcCMkKFNOTVBDT05GUEFUSCkjZzsgcyMvdmFyL25ldC1zbm1wIyQoUEVSU0lTVEVOVF9ESVJFQ1RPUlkpI2cnICR7c3JjZGlyfS9zbm1wY29uZiA+IHNubXBjb25mLm1hZGU7IFwKKwkgICQoUEVSTCkgLXAgLWUgJ3MlXiMhLiovcGVybC4qJSMhJChQRVJMKSU7IHMjL3Vzci9sb2NhbC9zaGFyZSMkKGRhdGFkaXIpI2c7IHMjL3Vzci9sb2NhbC9ldGMvc25tcCMkKFNOTVBDT05GUEFUSCkjZzsgcyMvdmFyL25ldC1zbm1wIyQoUEVSU0lTVEVOVF9ESVJFQ1RPUlkpI2cnIHNubXBjb25mID4gc25tcGNvbmYubWFkZTsgXAogCWVsc2UgXAogCSAgdG91Y2ggc25tcGNvbmYubWFkZTsgXAogICAgICAgICBmaQpAQCAtMTM1LDYgKzE0NCwxMyBAQAogCSAgdG91Y2ggdHJhcHRvZW1haWwubWFkZTsgXAogICAgICAgICBmaQogCitzbm1wLWJyaWRnZS1taWIubWFkZTogJChzcmNkaXIpL3NubXAtYnJpZGdlLW1pYgorCWlmIHRlc3QgIngkKFBFUkwpIiAhPSAieCIgOyB0aGVuIFwKKwkgICQoUEVSTCkgLXAgLWUgJ3MlXiMhLiovcGVybC4qJSMhJChQRVJMKSUnICR7c3JjZGlyfS9zbm1wLWJyaWRnZS1taWIgPiBzbm1wLWJyaWRnZS1taWIubWFkZTsgXAorCWVsc2UgXAorCSAgdG91Y2ggc25tcC1icmlkZ2UtbWliLm1hZGU7IFwKKyAgICAgICAgZmkKKwogbG9jYWxpbnN0YWxsOiAkKFNDUklQVFNNQURFRk9SUEVSTCkKIAlAaWYgdGVzdCAieCQoUEVSTCkiICE9ICJ4IiA7IHRoZW4gXAogCSAgZm9yIGkgaW4gJChQRVJMU0NSSVBUUykgOyBkbyAkKElOU1RBTEwpICQkaS5tYWRlICQoSU5TVEFMTF9QUkVGSVgpJChiaW5kaXIpLyQkaSA7IGVjaG8gImluc3RhbGw6ICBpbnN0YWxsZWQgJCRpIGluICQoSU5TVEFMTF9QUkVGSVgpJChiaW5kaXIpIiA7IGRvbmUgOyBcCmRpZmYgLS1naXQgYS9sb2NhbC9WZXJzaW9uLU11bmdlLnBsIGIvbG9jYWwvVmVyc2lvbi1NdW5nZS5wbAppbmRleCBmZGU1OTM5Li43ZjZmMjljIDEwMDc1NQotLS0gYS9sb2NhbC9WZXJzaW9uLU11bmdlLnBsCisrKyBiL2xvY2FsL1ZlcnNpb24tTXVuZ2UucGwKQEAgLTMzLDEyICszMyw2IEBACiB9CiAKIG15IEBleHBycyA9ICgKLQkgICAgICMgYyBmaWxlcyB3aXRoIGEgZXF1YWwgc2lnbiBhbmQgYSBzcGVjaWZpYyB2YXJpYWJsZQotCSAgICAgeyB0eXBlID0+ICdjJywKLQkgICAgICAgZXhwciA9PiAnVmVyc2lvbkluZm8oXHMqPVxzKlteIl0qKSIoLiopIicsCi0JICAgICAgIHJlcGwgPT4gJ1ZlcnNpb25JbmZvJDEiJFZFUlNJT04iJywgCi0JICAgICAgIGZpbGVzID0+IFtxdyhzbm1wbGliL3NubXBfdmVyc2lvbi5jKV19LAotCiAJICAgICAjIGRvY3VtZW50YXRpb24gZmlsZXMKIAkgICAgIHsgdHlwZSA9PiAnZG9jcycsCiAJICAgICAgIGV4cHIgPT4gJ1ZlcnNpb246IFtcLjAtOWEtekEtWl0rJywKQEAgLTQ3LDEyICs0MSw2IEBACiAJICAgICAgIG5vdF9yZXF1aXJlZCA9PiB7J2Rpc3QvbmV0LXNubXAuc3BlYycgPT4gMX0KIAkgICAgIH0sCiAKLQkgICAgICMgc2VkIGZpbGVzCi0JICAgICB7IHR5cGUgPT4gJ3NlZCcsCi0JICAgICAgIGV4cHIgPT4gJ15zXC9WRVJTSU9OSU5GT1wvW15cL10qJywKLQkgICAgICAgcmVwbCA9PiAnc1wvVkVSU0lPTklORk9cLyRWRVJTSU9OJywKLQkgICAgICAgZmlsZXMgPT4gW3F3KHNlZHNjcmlwdC5pbildfSwKLQogCSAgICAgIyBNYWtlZmlsZXMKIAkgICAgIHsgdHlwZSA9PiAnTWFrZWZpbGUnLAogCSAgICAgICBleHByID0+ICdWRVJTSU9OID0gW1wuMC05YS16QS1aXSsnLApAQCAtNjEsMTMgKzQ5LDYgQEAKIAkgICAgICAgbm90X3JlcXVpcmVkID0+IHsnZGlzdC9NYWtlZmlsZScgPT4gMX0KIAkgICAgIH0sCiAKLQkgICAgICMgRG94eWdlbiBjb25maWcKLQkgICAgIHsgdHlwZSA9PiAnZG94eWdlbicsCi0JICAgICAgIGV4cHIgPT4gJ1BST0pFQ1RfTlVNQkVSKFxzKyk9KFxzKylcJyguKilcJycsCi0JICAgICAgIHJlcGwgPT4gJ1BST0pFQ1RfTlVNQkVSJDE9JDJcJyRWRVJTSU9OXCcnLAotCSAgICAgICBmaWxlcyA9PiBbcXcoZG94eWdlbi5jb25mKV0KLQkgICAgIH0sCi0KIAkgICAgICMgcGVybCBmaWxlcwogCSAgICAgeyB0eXBlID0+ICdwZXJsJywKIAkgICAgICAgZXhwciA9PiAnVkVSU0lPTiA9IFwnKC4qKVwnJywKQEAgLTkwLDE3ICs3MSwxMSBAQAogCSAgICAgeyB0eXBlID0+ICdjb25maWd1cmUnLAogCSAgICAgICBleHByID0+ICdBQ19JTklUXFwoXFxbTmV0LVNOTVBcXF0sIFxcWyhbXlxcXV0rKVxcXScsCiAJICAgICAgIHJlcGwgPT4gJ0FDX0lOSVQoW05ldC1TTk1QXSwgWyRWRVJTSU9OXScsCi0JICAgICAgIGZpbGVzID0+IFtxdyhjb25maWd1cmUuaW4pXSwKKwkgICAgICAgZmlsZXMgPT4gW3F3KGNvbmZpZ3VyZS5hYyldLAogCSAgICAgICBleGVjID0+ICdhdXRvY29uZicsCiAJICAgICAgIGV4ZmlsZXMgPT4gW3F3KGNvbmZpZ3VyZSldLAogCSAgICAgfSwKIAotCSAgICAgIyBjb25maWd1cmUgc2NyaXB0IGZpbGVzCi0JICAgICB7IHR5cGUgPT4gJ2RveHlnZW4nLAotCSAgICAgICBleHByID0+ICdQUk9KRUNUX05VTUJFUlxzKj0gKC4qKScsCi0JICAgICAgIHJlcGwgPT4gJ1BST0pFQ1RfTlVNQkVSICAgICAgICAgPSAkVkVSU0lPTicsCi0JICAgICAgIGZpbGVzID0+IFtxdyhkb3h5Z2VuLmNvbmYpXSwKLQkgICAgIH0sCiAJICAgICk7CiAKICMKZGlmZiAtLWdpdCBhL2xvY2FsL2NlcnRnZW4tdGVzdC5wbCBiL2xvY2FsL2NlcnRnZW4tdGVzdC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM1NDI4Ci0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvY2VydGdlbi10ZXN0LnBsCkBAIC0wLDAgKzEsNjYgQEAKKyMhL3Vzci9iaW4vcGVybAorCitzeXN0ZW0oInJtIC1yZiAvdG1wLy5zbm1wMSIpOworc3lzdGVtKCJybSAtcmYgL3RtcC8uc25tcDIiKTsKKworc3lzdGVtKCJjcCBuZXQtc25tcC1jZXJ0IH4vYmluIik7CisKKyRzdHIgPSAiXG5nZW5jYSAoaW4gLUMgL3RtcC8uc25tcDEpIDogY2Etc25tcFxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IGdlbmNhIC1JIC1DIC90bXAvLnNubXAxIC0tY24gY2Etc25tcCAtLWVtYWlsIGNhXEBjYS5jb20gLS1ob3N0IGhvc3QuYS5iLmNvbSAgLS1zYW4gRE5TOmNhLmEuYi5jb20gLS1zYW4gRU1BSUw6Y2FcQGNhLmNvbSIpOworCitwcmludCAiXG51c2luZyAtQyAvdG1wLy5zbm1wMiBmb3IgYWxsIGZvbGxvd2luZyB0ZXN0c1xuIjsKKyRzdHIgPSAiXG5nZW5jYTogY2Etc25tcFxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IGdlbmNhIC1JIC1DIC90bXAvLnNubXAyIC0tY24gY2Etc25tcCAtLWVtYWlsIGNhXEBjYS5jb20gLS1ob3N0IGhvc3QuYS5iLmNvbSAgLS1zYW4gRE5TOmNhLmEuYi5jb20gLS1zYW4gRU1BSUw6Y2FcQGNhLmNvbSIpOworCiskc3RyID0gIlxuZ2VuY2E6IGNhLXNubXAtMiAoc2lnbmVkIHcvIGNhLXNubXApXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgZ2VuY2EgLUkgLUMgL3RtcC8uc25tcDIgLS13aXRoLWNhIGNhLXNubXAgLS1jbiBjYS1zbm1wLTIgLS1lbWFpbCBjYTJcQGNhLmNvbSAtLWhvc3QgaG9zdDIuYS5iLmNvbSAgLS1zYW4gRE5TOmNhMi5hLmIuY29tIC0tc2FuIEVNQUlMOmNhMlxAY2EuY29tIik7CisKKyRzdHIgPSAiXG5nZW5jc3I6IHNubXBhcHBcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBnZW5jc3IgLUkgLUMgL3RtcC8uc25tcDIgLXQgc25tcGFwcCAtLWNuICdhZG1pbicgLS1lbWFpbCBhZG1pbkBuZXQtc25tcC5vcmcgLS1ob3N0IGFkbWluLWhvc3QubmV0LXNubXAub3JnICAtLXNhbiBFTUFJTDphXEBiLmNvbSAtLXNhbiBJUDoxLjIuMy40IC0tc2FuIEROUzphZG1pbi5hLmIub3JnIik7CisKKyRzdHIgPSAiXG5zaWduY3NyOiBzbm1wYXBwIHcvY2Etc25tcFxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiZGllZDogJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IHNpZ25jc3IgLUkgLUMgL3RtcC8uc25tcDIgLS13aXRoLWNhIGNhLXNubXAgLS1jc3Igc25tcGFwcCAgLS1pbnN0YWxsIik7CisKKyRzdHIgPSAiXG5zaWduY3NyOiBzbm1wYXBwIHcvY2Etc25tcC0yXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgc2lnbmNzciAtSSAtQyAvdG1wLy5zbm1wMiAtLXdpdGgtY2EgY2Etc25tcC0yIC0tY3NyIHNubXBhcHAgLS1zYW4gRU1BSUw6bm9pbnN0YWxsXEBiLmNvbSAtLXNhbiBJUDo1LjYuNy44Iik7CisKKyRzdHIgPSAiXG5nZW5jZXJ0OiBzbm1wdHJhcGQgKHNlbGYtc2lnbmVkKVxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IGdlbmNlcnQgLUkgLUMgL3RtcC8uc25tcDIgLXQgc25tcHRyYXBkIC0tY24gJ05PQycgLS1lbWFpbCAnbm9jXEBuZXQtc25tcC5vcmcnIC0taG9zdCBub2MtaG9zdC5uZXQtc25tcC5vcmcgIC0tc2FuIEROUzpub2MuYS5iLm9yZyAtLXNhbiAnRU1BSUw6bm9jXEBuZXQtc25tcC5vcmcnIik7CisKKyRzdHIgPSAiXG5nZW5jZXJ0OiBzbm1wZCAoc2lnbmVkIHcvIGNhLXNubXAtMilcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBnZW5jZXJ0IC1JIC1DIC90bXAvLnNubXAyIC10IHNubXBkIC0td2l0aC1jYSBjYS1zbm1wLTIgLS1lbWFpbCBzbm1wZFxAbmV0LXNubXAub3JnIC0taG9zdCBzbm1wZC1ob3N0Lm5ldC1zbm1wLm9yZyAgLS1zYW4gRE5TOnNubXBkLmEuYi5vcmcgLS1zYW4gRU1BSUw6c25tcGRcQG5ldC1zbm1wLm9yZyIpOworCitzeXN0ZW0oImNwIG5ldC1zbm1wLWNlcnQuY29uZiAvdG1wLy5zbm1wMiIpOworCiskc3RyID0gIlxuZ2VuY2EgKGluIC1DIC90bXAvLnNubXAyIC1pIENBLWlkZW50aXR5KVxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IGdlbmNhIC1JIC1DIC90bXAvLnNubXAyIC1pIENBLWlkZW50aXR5Iik7CisKKyRzdHIgPSAiXG5nZW5jZXJ0IChpbiAtQyAvdG1wLy5zbm1wMiAtaSBub2NhZG0gLXQgc25tcC1pZGVudGl0eSlcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBnZW5jZXJ0IC1JIC1DIC90bXAvLnNubXAyIC10IHNubXAtaWRlbnRpdHkgLWkgbm9jYWRtIC0td2l0aC1jYSBDQS1pZGVudGl0eSIpOworCisKKyRzdHIgPSAiXG5zaG93IENBc1xuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IC1DIC90bXAvLnNubXAyIHNob3djYSAtLWlzc3VlciAtLXN1YmplY3QiKTsKKworJHN0ciA9ICJzaG93IENlcnRzXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgLUMgL3RtcC8uc25tcDIgc2hvd2NlcnQgLS1pc3N1ZXIgLS1zdWJqZWN0Iik7CisKKyRzdHIgPSAic2hvdyBDQXMgZmluZ2VycHJpbnRcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCAtQyAvdG1wLy5zbm1wMiBzaG93Y2EgLS1maW5nZXJwcmludCAtLWJyaWVmIik7CisKKyRzdHIgPSAiXG5zaG93IENlcnRzIGZpbmdlcnByaW50XG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgLUMgL3RtcC8uc25tcDIgc2hvd2NlcnQgLS1maW5nZXJwcmludCAtLWJyaWVmIik7CmRpZmYgLS1naXQgYS9sb2NhbC9odG1sLWFkZC1oZWFkZXItZm9vdGVyLnBsIGIvbG9jYWwvaHRtbC1hZGQtaGVhZGVyLWZvb3Rlci5wbAppbmRleCA5NmU0NmE1Li5jM2NiOTAyIDEwMDc1NQotLS0gYS9sb2NhbC9odG1sLWFkZC1oZWFkZXItZm9vdGVyLnBsCisrKyBiL2xvY2FsL2h0bWwtYWRkLWhlYWRlci1mb290ZXIucGwKQEAgLTIxLDcgKzIxLDcgQEAKIHVzZSBGaWxlOjpzdGF0OwogdXNlIEdldG9wdDo6TG9uZzsKIAotbXkgJHRpZHlfb3B0aW9ucyA9ICctZiAvZGV2L251bGwgLW0gLWkgLWFzeGh0bWwgLXdyYXAgMTMwIC1xdWlldCc7CitteSAkdGlkeV9vcHRpb25zID0gJy1mIC9kZXYvbnVsbCAtbSAtaSAtYXN4aHRtbCAtd3JhcCAxMzAgLXF1aWV0IC0tcXVvdGUtbmJzcCBuJzsKIAogbXkgJHBhdHRlcm4gPSAnJzsKIG15ICRzZWN0aW9uID0gJyc7CmRpZmYgLS1naXQgYS9sb2NhbC9odG1sLXRleHRmaWxlLWZpeC5wbCBiL2xvY2FsL2h0bWwtdGV4dGZpbGUtZml4LnBsCmluZGV4IGY5NDExOTcuLmI3MjA3NWIgMTAwNzU1Ci0tLSBhL2xvY2FsL2h0bWwtdGV4dGZpbGUtZml4LnBsCisrKyBiL2xvY2FsL2h0bWwtdGV4dGZpbGUtZml4LnBsCkBAIC04LDYgKzgsNyBAQAogIyBEYXRlOiAgICAgICAgICAgRGVjZW1iZXIgMjl0aCwgMjAwNQogIyAKIEBmaWxlcyA9IHF3IgorQ0hBTkdFUwogRVJSQVRBCiBJTlNUQUxMCiBORVdTCkBAIC0xNyw2ICsxOCw3IEBACiBSRUFETUUuYWdlbnR4CiBSRUFETUUuYWl4CiBSRUFETUUuaHB1eDExCitSRUFETUUuaXJpeAogUkVBRE1FLmtyYjUKIFJFQURNRS5taWIyYwogUkVBRE1FLm1pYnMKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjIGIvbG9jYWwvbWliMmMKaW5kZXggNWZhNWNjOS4uMjAxNmYwNiAxMDA3NTUKLS0tIGEvbG9jYWwvbWliMmMKKysrIGIvbG9jYWwvbWliMmMKQEAgLTUxLDYgKzUxLDcgQEAKICRxdWlldD0wOwogJHN0cmljdF91bmtfdG9rZW4gPSAwOwogJG5vaW5kZW50ID0gMDsKKyRub3NlZCA9IDA7CiAkY3VycmVudGxpbmUgPSAwOwogJGN1cnJlbnRsZXZlbCA9IC0xOwogJWFzc2lnbm1lbnRzOwpAQCAtNzMsNiArNzQsNyBAQAogICAgIHByaW50ICIgIC1kXHRcdGRlYnVnZ2luZyBvdXRwdXQgKGRvbid0IGRvIGl0LiAgdHJ1c3QgbWUuKVxuXG4iOwogICAgIHByaW50ICIgIC1TIFZBUj1WQUxcdFNldCBcJFZBUiB2YXJpYWJsZSB0byBcJFZBTFxuXG4iOwogICAgIHByaW50ICIgIC1pXHRcdERvbid0IHJ1biBpbmRlbnQgb24gdGhlIHJlc3VsdGluZyBjb2RlXG5cbiI7CisgICAgcHJpbnQgIiAgLXNcdFx0RG9uJ3QgbG9vayBmb3IgbWliTm9kZS5zZWQgYW5kIHJ1biBzZWQgb24gdGhlIHJlc3VsdGluZyBjb2RlXG5cbiI7CiAgICAgcHJpbnQgIiAgbWliTm9kZVx0VGhlIG5hbWUgb2YgdGhlIHRvcCBsZXZlbCBtaWIgbm9kZSB5b3Ugd2FudCB0b1xuXHRcdGdlbmVyYXRlIGNvZGUgZm9yLiAgQnkgZGVmYXVsdCwgdGhlIGNvZGUgd2lsbCBiZSBzdG9yZWQgaW5cblx0XHRtaWJOb2RlLmMgYW5kIG1pYk5vZGUuaCAodXNlIHRoZSAtZiBmbGFnIHRvIGNoYW5nZSB0aGlzKVxuXG4iOwogICAgIDE7CiB9CQpAQCAtOTksNiArMTAxLDggQEAKICAgICAgICAgJHF1aWV0ID0gMTsKICAgICAgIH0gZWxzaWYgKC9eLWkvKSB7CiAgICAgICAgICRub2luZGVudCA9IDE7CisgICAgICB9IGVsc2lmICgvXi1zLykgeworICAgICAgICAkbm9zZWQgPSAxOwogICAgICAgfSBlbHNpZiAoL14taC8pIHsKICAgICAgICAgdXNhZ2UgJiYgZXhpdCgxKTsKICAgICAgIH0gZWxzaWYgKC9eLWYvKSB7CkBAIC0yMzEsNiArMjM1LDE1IEBACiBwcm9jZXNzKCItYmFsYW5jZWQiKTsKICRmaC0+Y2xvc2U7CiAKK2lmICgtZiAiJG91dHB1dE5hbWUuc2VkIiAmJiAhJG5vc2VkKSB7CisgIGZvcmVhY2ggJGkgKGtleXMoJXdyaXR0ZW4pKSB7CisgICAgbmV4dCBpZiAoJGkgZXEgIi0iKTsKKyAgICBuZXh0IGlmICghKCRpID1+IC9cLltjaF0kLykpOworICAgIHByaW50IFNUREVSUiAicnVubmluZyBzZWQgLS1pbi1wbGFjZT0ub3JpZyAtLWZpbGU9JG91dHB1dE5hbWUuc2VkICRpXG4iIGlmICghJHF1aWV0KTsKKyAgICBzeXN0ZW0oInNlZCAtLWluLXBsYWNlPS5vcmlnIC0tZmlsZT0kb3V0cHV0TmFtZS5zZWQgJGkiKTsKKyAgfQorfQorCiBpZiAoISRub2luZGVudCkgewogICBmb3JlYWNoICRpIChrZXlzKCV3cml0dGVuKSkgewogICAgIG5leHQgaWYgKCRpIGVxICItIik7CkBAIC0yOTAsOSArMzAzLDExIEBACiAjICAgJHZhci5jcmVhdGFibGUgICAgIC0tIDEgaWYgYSBjb2x1bW4gb2JqZWN0IGNhbiBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBuZXcgcm93LCAwIGlmIG5vdAogIyAgICR2YXIubm9hY2Nlc3MgICAgICAtLSAxIGlmIG5vdC1hY2Nlc3NpYmxlLCAwIGlmIG5vdAogIyAgICR2YXIuYWNjZXNzaWJsZSAgICAtLSAxIGlmIGFjY2Vzc2libGUsIDAgaWYgbm90CisjICAgJHZhci5zdG9yYWdldHlwZSAgIC0tIDEgaWYgYW4gb2JqZWN0IGlzIGEgU3RvcmFnZVR5cGUgb2JqZWN0LCAwIGlmIG5vdAogIyAgICR2YXIucm93c3RhdHVzICAgICAtLSAxIGlmIGFuIG9iamVjdCBpcyBhIFJvd1N0YXR1cyBvYmplY3QsIDAgaWYgbm90Ci0jICAgICAnc2V0dGFibGUnLCAnY3JlYXRhYmxlJyBhbmQgJ3Jvd3N0YXR1cycgY2FuIGFsc28gYmUgdXNlZCB3aXRoIHRhYmxlIHZhcmlhYmxlcwotIyAgICAgdG8gaW5kaWNhdGUgd2hldGhlciBpdCBjb250YWlucyB3cml0YWJsZSwgY3JlYXRhYmxlIG9yIFJvd1N0YXR1cyBjb2x1bW4gb2JqZWN0cworIyAgICAgJ3NldHRhYmxlJywgJ2NyZWF0YWJsZScsICdsYXN0Y2hhbmdlJywgJ3N0b3JhZ2V0eXBlJyBhbmQgJ3Jvd3N0YXR1cycgY2FuCisjICAgICBhbHNvIGJlIHVzZWQgd2l0aCB0YWJsZSB2YXJpYWJsZXMgdG8gaW5kaWNhdGUgd2hldGhlciBpdCBjb250YWlucworIyAgICAgd3JpdGFibGUsIGNyZWF0YWJsZSwgTGFzdENoYW5nZSwgU3RvcmFnZVR5cGUgb3IgUm93U3RhdHVzIGNvbHVtbiBvYmplY3RzCiAjCiAjICAgJHZhci5oYXNkZWZ2YWwgICAgIC0tIHJldHVybnMgMSBpZiB2YXIgaGFzIGEgREVGVkFMIGNsYXVzZQogIyAgICR2YXIuZGVmdmFsICAgICAgICAtLSBub2RlJ3MgREVGVkFMCkBAIC0zNDcsNiArMzYyLDcgQEAKICAgICAkaXQgPX4gcy9cJChcdyspXC4oZW51bXMpLygleyRTTk1QOjpNSUJ7JHZhcnN7JDF9fXsnZW51bXMnfX0gPT0gMCkgPyAwIDogMS9lZzsKICAgICAkaXQgPX4gcy9cJChcdyspXC4oZW51bXJhbmdlKS8leyRTTk1QOjpNSUJ7JHZhcnN7JDF9fXsnZW51bXMnfX0vZWc7CiAgICAgJGl0ID1+IHMvXCQoXHcrKVwuKHJvd3N0YXR1cykvKCgkU05NUDo6TUlCeyR2YXJzeyQxfX17c3ludGF4fSA9fiBcLyhSb3dTdGF0dXMpXC8pPzE6MCkvZWc7CisgICAgJGl0ID1+IHMvXCQoXHcrKVwuKHN0b3JhZ2V0eXBlKS8oKCRTTk1QOjpNSUJ7JHZhcnN7JDF9fXtzeW50YXh9ID1+IFwvKFN0b3JhZ2VUeXBlKVwvKT8xOjApL2VnOwogICAgIGlmICggJGl0ID1+IC9cJChcdyspXC4oXHcrKS8gKSB7CiAgICAgICB3YXJuICJQb3NzaWJsZSB1bmtub3duIHZhcmlhYmxlIGF0dHJpYnV0ZSBcJCQxLiQyIGF0ICRjdXJyZW50ZmlsZTokY3VycmVudGxpbmVcbiI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtc291cmNlLWluY2x1ZGVzLm0yaSBiL2xvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXNvdXJjZS1pbmNsdWRlcy5tMmkKaW5kZXggYjJiNDI1ZS4uOTM0MWNmOSAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtc291cmNlLWluY2x1ZGVzLm0yaQorKysgYi9sb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1zb3VyY2UtaW5jbHVkZXMubTJpCkBAIC0xMCw2ICsxMCw3IEBACiAjIwogLyogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy10by1vaWQubTJpIGIvbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy10by1vaWQubTJpCmluZGV4IGIyYWEwNzcuLmMxN2RlNGMgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtdG8tb2lkLm0yaQorKysgYi9sb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXRvLW9pZC5tMmkKQEAgLTI0LDExICsyNCwxMCBAQAogQCAgICAgICAgaW5jbHVkZSBtMmNfc2V0dXBfbm9kZS5tMmlACiAgICAgICAgIC8qICRtMmNfbm9kZV9zdW1tYXJ5ICovCiBAICAgICAgICBpZiAkbTJjX25vZGVfbmVlZGxlbmd0aCA9PSAxQAotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyXyRub2RlLCAodV9jaGFyKikmbWliX2lkeC0+JG5vZGUsCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfJG5vZGUsICZtaWJfaWR4LT4kbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeC0+JHtub2RlfV9sZW4gKiBzaXplb2YobWliX2lkeC0+JHtub2RlfVswXSkpOwogQCAgICAgICAgZWxzZUAKLSAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl8kbm9kZSwgKHVfY2hhciopJm1pYl9pZHgtPiRub2RlLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+JG5vZGUpKTsKKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl8kbm9kZSwgJm1pYl9pZHgtPiRub2RlLCBzaXplb2YobWliX2lkeC0+JG5vZGUpKTsKIEAgICAgICAgIGVuZEAKIAogQCAgICBlbmRAICMgZm9yIGVhY2ggY29sdW1uCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmMgYi9sb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmMKaW5kZXggN2VjYTMwOC4uZDY2NmM5YSAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjCisrKyBiL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYwpAQCAtMTE4LDYgKzExOCwxMCBAQAogCiAjaW5jbHVkZSAiJHtuYW1lfV9pbnRlcmZhY2UuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKwogI2luY2x1ZGUgPGN0eXBlLmg+CiAKIEBldmFsICRtMmNfcHJvY2Vzc2luZ190eXBlID0gJ2knQApAQCAtMjE1LDE0ICsyMTksNyBAQAogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfJHtjb250ZXh0fV9jaGVja19kZXBlbmRlbmNpZXM7CiBAICAgICAgZW5kQAogCi1ORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50IF8ke2NvbnRleHR9X3VuZG9fY29sdW1uKCAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgaW50IGNvbHVtbiApOwotCiBAICAgZW5kQCAjIHdyaXRhYmxlCi1AaWYgKCRtMmNfdGFibGVfcGVyc2lzdGVudCA9PSAxKSB8fCAoJG0yY190YWJsZV9yb3dfY3JlYXRpb24gPT0gMSlACi1ORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50IF8ke2NvbnRleHR9X2NoZWNrX2luZGV4ZXMoJHtjb250ZXh0fV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7Ci0KLUBlbmRACiBAICAgaWYgKCIkbTJjX2RhdGFfY29udGV4dCIgZXEgImdlbmVyYXRlZCIpICYmICgoJG0yY191bmRvX2VtYmVkID09IDApIHx8ICgkbTJjX2RhdGFfYWxsb2NhdGUgPT0gMSkpQAogJHtjb250ZXh0fV9kYXRhICoke2NvbnRleHR9X2FsbG9jYXRlX2RhdGEodm9pZCk7CiAKQEAgLTI1OSw3ICsyNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKIAogICAgIC8qICBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAgICBvcHRpbWl6ZXMgcmV0cml2YWwuICovCisgICAgICAgIG9wdGltaXplcyByZXRyaWV2YWwuICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSAkY29udGV4dC51Y19NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gJGNvbnRleHQudWNfTUFYX0NPTDsKIApAQCAtMzM1LDcgKzMzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y29udGV4dH1fb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRleHR9X29pZF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAotI2lmZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkKICNlbHNlCiBAaWYgJG0yY190YWJsZV9zZXR0YWJsZSA9PSAxQApAQCAtMzQzLDcgKzM0MCw3IEBACiBAZWxzZUAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkKIEBlbmRACi0jZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgIGlmKE5VTEwgPT0gcmVnaW5mbykgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciByZWdpc3RlcmluZyB0YWJsZSAke2NvbnRleHR9XG4iKTsKQEAgLTM2Miw3ICszNTksNyBAQAogICAgIGlmKCBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCApCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogICAgIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYoIGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcyApCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiggYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0ICkKQEAgLTM4NSw3ICszODIsNyBAQAogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKICAgICBpZiggYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCApCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAgICAgCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC02MTIsNyArNjA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgcmMsIHBhY2tldF9yYzsKIApAQCAtNjYxLDYgKzY1OCw1MSBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIwogQGlmICgkbTJjX3RhYmxlX3Jvd19jcmVhdGlvbiA9PSAxKSB8fCAoJG0yY190YWJsZV9wZXJzaXN0ZW50ID09IDEpQAorTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorXyR7Y29udGV4dH1fY2hlY2tfaW5kZXhlcygke2NvbnRleHR9X3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtjb250ZXh0fTpfJHtjb250ZXh0fV9jaGVja19pbmRleGVzIiwiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisjIworQGlmICRtMmNfdGFibGVfZXh0ZXJuYWxfaW5kZXhlcyAhPSAwQAorICAgIC8qCisgICAgICogY2hlY2sgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBFWFRFUk5BTCByb3cgZXhpc3RzCisgICAgICovCitAICAgZm9yZWFjaCAkbm9kZSBleHRlcm5hbGluZGV4QAorQCAgICAgIGluY2x1ZGUgbTJjX3NldHVwX25vZGUubTJpQAorCisgICAgLyogKElOREVYKSAkbTJjX25vZGVfc3VtbWFyeSAqLworICAgIHJjID0gJHtjb250ZXh0fV8ke25vZGV9X2NoZWNrX2luZGV4KCByb3dyZXFfY3R4ICk7CisgICAgaWYoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOworQCAgIGVuZEAgIyBmb3IgZWFjaCBub25pbmRleAorCitAZW5kQCAjIGV4dGVybmFsIGluZGV4CitAICAgZm9yZWFjaCAkbm9kZSBpbnRlcm5hbGluZGV4QAorQCAgICAgIGluY2x1ZGUgbTJjX3NldHVwX25vZGUubTJpQAorCisgICAgLyogKElOREVYKSAkbTJjX25vZGVfc3VtbWFyeSAqLworQCAgIGV2YWwgJG0yY19udl92YWwgPSAicm93cmVxX2N0eC0+dGJsX2lkeC4kbm9kZSJACitAICAgZXZhbCAkbTJjX252X2xlbiA9ICJyb3dyZXFfY3R4LT50YmxfaWR4LiR7bm9kZX1fbGVuIkAKK0AgICBldmFsICRtMmNfbnZfc3RyID0gInJvd3JlcV9jdHgtPnRibF9pZHguJG5vZGUiQAorQCAgIGluY2x1ZGUgbm9kZS12YWxpZGF0ZS5tMmlACisgICAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgcmMgPSAke25vZGV9X2NoZWNrX2luZGV4KCByb3dyZXFfY3R4ICk7CisgICAgICAgaWYoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOworQCAgIGVuZEAgIyBmb3IgZWFjaCBpbnRlcm5hbGluZGV4CisKKyAgICAvKgorICAgICAqIGlmIGluZGl2aWR1YWwgcGFydHMgbG9vayBvaywgY2hlY2sgdGhlbSBhcyBhIHdob2xlCisgICAgICovCisgICAgcmV0dXJuICR7Y29udGV4dH1fdmFsaWRhdGVfaW5kZXgoICR7Y29udGV4dH1faWZfY3R4LnVzZXJfY3R4LCByb3dyZXFfY3R4ICk7Cit9IC8qIF8ke2NvbnRleHR9X2NoZWNrX2luZGV4ZXMgKi8KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLyoqCiAgKiBAaW50ZXJuYWwKICAqIHdyYXBwZXIKQEAgLTc0MSw3ICs3ODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2NvbnRleHR9Ol9tZmRfJHtjb250ZXh0fV9vYmplY3RfbG9va3VwIiwiY2FsbGVkXG4iKSk7CkBAIC05MDYsNyArOTQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKiB0cmk7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgKiBvbGRfc3RyaW5nOwpAQCAtOTc1LDU0ICsxMDE3LDYgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gLyogX21mZF8ke2NvbnRleHR9X2dldF92YWx1ZXMgKi8KIAotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1AaWYgKCRtMmNfdGFibGVfcm93X2NyZWF0aW9uID09IDEpIHx8ICgkbTJjX3RhYmxlX3BlcnNpc3RlbnQgPT0gMSlACi1ORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50Ci1fJHtjb250ZXh0fV9jaGVja19pbmRleGVzKCR7Y29udGV4dH1fcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCi17Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKLQotICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2NvbnRleHR9Ol8ke2NvbnRleHR9X2NoZWNrX2luZGV4ZXMiLCJjYWxsZWRcbiIpKTsKLQotICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7Ci0KLSMjCi1AaWYgJG0yY190YWJsZV9leHRlcm5hbF9pbmRleGVzICE9IDBACi0gICAgLyoKLSAgICAgKiBjaGVjayB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIEVYVEVSTkFMIHJvdyBleGlzdHMKLSAgICAgKi8KLUAgICBmb3JlYWNoICRub2RlIGV4dGVybmFsaW5kZXhACi1AICAgICAgaW5jbHVkZSBtMmNfc2V0dXBfbm9kZS5tMmlACi0KLSAgICAvKiAoSU5ERVgpICRtMmNfbm9kZV9zdW1tYXJ5ICovCi0gICAgcmMgPSAke2NvbnRleHR9XyR7bm9kZX1fY2hlY2tfaW5kZXgoIHJvd3JlcV9jdHggKTsKLSAgICBpZihNRkRfU1VDQ0VTUyAhPSByYykKLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQ1JFQVRJT047Ci1AICAgZW5kQCAjIGZvciBlYWNoIG5vbmluZGV4Ci0KLUBlbmRAICMgZXh0ZXJuYWwgaW5kZXgKLUAgICBmb3JlYWNoICRub2RlIGludGVybmFsaW5kZXhACi1AICAgICAgaW5jbHVkZSBtMmNfc2V0dXBfbm9kZS5tMmlACi0KLSAgICAvKiAoSU5ERVgpICRtMmNfbm9kZV9zdW1tYXJ5ICovCi1AICAgZXZhbCAkbTJjX252X3ZhbCA9ICJyb3dyZXFfY3R4LT50YmxfaWR4LiRub2RlIkAKLUAgICBldmFsICRtMmNfbnZfbGVuID0gInJvd3JlcV9jdHgtPnRibF9pZHguJHtub2RlfV9sZW4iQAotQCAgIGV2YWwgJG0yY19udl9zdHIgPSAicm93cmVxX2N0eC0+dGJsX2lkeC4kbm9kZSJACi1AICAgaW5jbHVkZSBub2RlLXZhbGlkYXRlLm0yaUAKLSAgICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCi0gICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICByYyA9ICR7bm9kZX1fY2hlY2tfaW5kZXgoIHJvd3JlcV9jdHggKTsKLSAgICAgICBpZihNRkRfU1VDQ0VTUyAhPSByYykKLSAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQ1JFQVRJT047Ci1AICAgZW5kQCAjIGZvciBlYWNoIGludGVybmFsaW5kZXgKLQotICAgIC8qCi0gICAgICogaWYgaW5kaXZpZHVhbCBwYXJ0cyBsb29rIG9rLCBjaGVjayB0aGVtIGFzIGEgd2hvbGUKLSAgICAgKi8KLSAgICByZXR1cm4gJHtjb250ZXh0fV92YWxpZGF0ZV9pbmRleCggJHtjb250ZXh0fV9pZl9jdHgudXNlcl9jdHgsIHJvd3JlcV9jdHggKTsKLX0gLyogXyR7Y29udGV4dH1fY2hlY2tfaW5kZXhlcyAqLwotQGVuZEAgIyAkbTJjX3RhYmxlX3Jvd19jcmVhdGlvbgotCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTExMTAsNyArMTEwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICogdHJpOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgcmM7CkBAIC0xMTU3LDcgKzExNTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOwotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7Y29udGV4dH06X21mZF8ke2NvbnRleHR9X2NoZWNrX2RlcGVuZGVuY2llcyIsImNhbGxlZFxuIikpOwogCkBAIC0xMjI3LDcgKzEyMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOwotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtjb250ZXh0fTpfbWZkXyR7Y29udGV4dH1fdW5kb19zZXR1cCIsImNhbGxlZFxuIikpOwpAQCAtMTI5MSw3ICsxMjg1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgcmM7CiAKQEAgLTEzNzksNyArMTM3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICogdHJpOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTQyNSw3ICsxNDE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7Y29udGV4dH06X21mZF8ke2NvbnRleHR9X2NvbW1pdCIsImNhbGxlZFxuIikpOwpAQCAtMTQ1OCw3ICsxNDUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7Y29udGV4dH06X21mZF8ke2NvbnRleHR9X3VuZG9fY29tbWl0IiwiY2FsbGVkXG4iKSk7CkBAIC0xNTM5LDcgKzE1MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOwotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKiB0cmk7CiAKQEAgLTE1OTYsNyArMTU5MCw3IEBACiBAICAgaWYgJG0yY19pcnJldmVyc2libGVfY29tbWl0ID09IDFACiAgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKIEAgICBlbmRACi0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtjb250ZXh0fTpfbWZkXyR7Y29udGV4dH1faXJyZXZlcnNpYmxlOmNvbW1pdCIsImNhbGxlZFxuIikpOwpAQCAtMTY3Nyw3ICsxNjcxLDcgQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9IENPTlRBSU5FUl9GSU5EKCR7Y29udGV4dH1faWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworICAgIHJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklORCgke2NvbnRleHR9X2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmkgYi9sb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaQppbmRleCBjOWIxNTJmLi43Nzk2Y2YyIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaQorKysgYi9sb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICogYmUgdHJlYXRlZCBhIGxpdHRsZSBkaWZmZXJlbnRseS4gU3BlY2lmaWNhbGx5LCB5b3Ugd2lsbCBuZWVkCiAgICAgICogKDQgKiBsZW4pICsgNCBbMyBBU0NJSSBjaGFycyBwZXIgYnl0ZSArIDEgZm9yIC4sICsgNCBmb3IgbGVuXS4KICAgICAgKgotICAgICAqIDMpIEFsc28sIHJlbWViZXIgdG8gYWRkIHNwYWNlIGZvciB0aGUgaWRlbnRpZmllciBhbmQgc2VwZXJhdG9yCisgICAgICogMykgQWxzbywgcmVtZW1iZXIgdG8gYWRkIHNwYWNlIGZvciB0aGUgaWRlbnRpZmllciBhbmQgc2VwYXJhdG9yCiAgICAgICogY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsIGVhY2ggY29sdW1uIGlzIHByZWZpeGVkIGJ5IHRoZQogICAgICAqIGNvbHVtbiBudW1iZXIgYW5kIGEgc2VtaWNvbG9uLiBUbyBhbGxvdyBmb3IgdGhlIG1heGltdW0KICAgICAgKiBjb2x1bW4gdmFsdWVzLCAxMiBieXRlcyBbMTEgZm9yIG9pZCArIDEgZm9yICc6J10gcGVyCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy1jb25mLmQvbWZkLXRvcC5tMmMgYi9sb2NhbC9taWIyYy1jb25mLmQvbWZkLXRvcC5tMmMKaW5kZXggMTJjZjlkZC4uZGIwZjM5OCAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMtY29uZi5kL21mZC10b3AubTJjCisrKyBiL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtdG9wLm0yYwpAQCAtMjUyLDggKzI1Miw4IEBACiBpbnQgJHtjb250ZXh0fV9yb3dfcmVmX2RlY3JlbWVudCgke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgpOwogCiBAICAgZW5kQAotZXh0ZXJuIG9pZCAke2NvbnRleHR9X29pZFtdOwotZXh0ZXJuIGludCAke2NvbnRleHR9X29pZF9zaXplOworZXh0ZXJuIGNvbnN0IG9pZCAke2NvbnRleHR9X29pZFtdOworZXh0ZXJuIGNvbnN0IGludCAke2NvbnRleHR9X29pZF9zaXplOwogCiBAZW5kQCAjIGZvciBlYWNoCiAKQEAgLTMwOSw4ICszMDksOCBAQAogCiBAZm9yZWFjaCAkdGFibGUgdGFibGVACiBAICAgIGluY2x1ZGUgbTJjX3NldHVwX3RhYmxlLm0yaUAKLW9pZCAke2NvbnRleHR9X29pZFtdID0geyAkY29udGV4dC51Y19PSUQgfTsKLWludCAke2NvbnRleHR9X29pZF9zaXplID0gT0lEX0xFTkdUSCgke2NvbnRleHR9X29pZCk7Citjb25zdCBvaWQgJHtjb250ZXh0fV9vaWRbXSA9IHsgJGNvbnRleHQudWNfT0lEIH07Citjb25zdCBpbnQgJHtjb250ZXh0fV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoJHtjb250ZXh0fV9vaWQpOwogCiBAICAgIGlmICJ4JG0yY19jb250ZXh0X3JlZyIgbmUgIngiQAogICAgICR7Y29udGV4dH1fcmVnaXN0cmF0aW9uICAke2NvbnRleHR9X3VzZXJfY29udGV4dDsKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMgYi9sb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjCmluZGV4IDUyYTgyNTguLjYxZmMyNmQgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMKKysrIGIvbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYwpAQCAtMjcsNiArMjcsMTggQEAKIEBpbmNsdWRlIGdlbmVyaWMtc291cmNlLWluY2x1ZGVzLm0yaUAKICNpbmNsdWRlIDxzaWduYWwuaD4KIAorLyoKKyAqIElmIGNvbXBpbGluZyB3aXRoaW4gdGhlIG5ldC1zbm1wIHNvdXJjZSBjb2RlLCB0aGlzIHdpbGwgdHJpZ2dlciB0aGUgZmVhdHVyZQorICogZGV0ZWN0aW9uIG1lY2hhbnNpbSB0byBlbnN1cmUgdGhlIGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKCkgZnVuY3Rpb24KKyAqIGlzIGxlZnQgYXZhaWxhYmxlIGV2ZW4gaWYgLS1lbmFibGUtbWluaW1pYWxpc3QgaXMgdHVybmVkIG9uLiAgSWYgeW91CisgKiBoYXZlIGNvbmZpZ3VyZWQgbmV0LXNubXAgdXNpbmcgLS1lbmFibGUtbWluaW1pYWxpc3QgYW5kIHdhbnQgdG8gY29tcGlsZQorICogdGhpcyBjb2RlIGV4dGVybmFsbHkgdG8gdGhlIE5ldC1TTk1QIGNvZGUgYmFzZSwgdGhlbiBwbGVhc2UgYWRkCisgKiAtLXdpdGgtZmVhdHVyZXM9ImFnZW50X2NoZWNrX2FuZF9wcm9jZXNzIGVuYWJsZV9zdGRlcnJsb2ciIHRvIHlvdXIKKyAqIGNvbmZpZ3VyZSBsaW5lLgorICovCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShhZ2VudF9jaGVja19hbmRfcHJvY2VzcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGVuYWJsZV9zdGRlcnJsb2cpCisKIHN0YXRpYyBpbnQga2VlcF9ydW5uaW5nOwogCiBzdGF0aWMgUkVUU0lHVFlQRQpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMtdXBkYXRlIGIvbG9jYWwvbWliMmMtdXBkYXRlCmluZGV4IDY2OWE3NDUuLjQyMDE3ZTUgMTAwNzU1Ci0tLSBhL2xvY2FsL21pYjJjLXVwZGF0ZQorKysgYi9sb2NhbC9taWIyYy11cGRhdGUKQEAgLTEsNCArMSw0IEBACi0jIS9iaW4vYmFzaAorIyEvYmluL3NoCiAjCiAjICRJZCQKICMKQEAgLTM5LDcgKzM5LDcgQEAKIAogZXJyb3IoKQogewotICAgIGVjaG8gIkVSUk9SOiAkQCIgPiAvZGV2L3N0ZGVycgorICAgIGVjaG8gIkVSUk9SOiAkQCIgPiYyCiB9CiAKIGRpZSgpCkBAIC0zMDgsOCArMzA4LDE2IEBACiAgICAgLiAkSE9NRS8ubWliMmMtdXBkYXRlcmMKIGZpCiAKLWlmIFsgLWYgLm1pYjJjLXVwZGF0ZXJjIF07IHRoZW4KLSAgICAuIC5taWIyYy11cGRhdGVyYworaWYgWyAtZiAkUFdELy5taWIyYy11cGRhdGVyYyBdOyB0aGVuCisgICAgLiAkUFdELy5taWIyYy11cGRhdGVyYworZWxzZQorICAgZWNobyAiY3JlYXRpbmcgZXhhbXBsZSAubWliMmMtdWRwYXRlcmMuIGVkaXQgYXMgbmVlZGVkIGFuZCByZS1ydW4gIgorICAgZWNobyAibWliMmMtdXBkYXRlLiIKKyAgIAorICAgZWNobyAiVVBEQVRFX09JRD1pcEFkZHJlc3NUYWJsZSIgPj4gLm1pYjJjLXVwZGF0ZXJjCisgICBlY2hvICJVUERBVEVfQ09ORj1taWIyYy5tZmQuY29uZiIgPj4gLm1pYjJjLXVwZGF0ZXJjCisgICBlY2hvICJVUERBVEVfTUlCMkNfT1BUUz0iID4+IC5taWIyYy11cGRhdGVyYworICAgZWNobyAiI1VQREFURV9OT1BST0JFPTEiID4+IC5taWIyYy11cGRhdGVyYwogZmkKIAogY2hlY2tfc2V0dXAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZiBiL2xvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZgppbmRleCA4MzNhODU3Li45ZDU0ZjE0IDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYKKysrIGIvbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mCkBAIC03OSw3ICs3OSw3IEBACiAgICAgdnB0ciA9IHB1dF9pbmRleF9kYXRhOwogICAgIAogICAgIEBmb3JlYWNoICRpZHggaW5kZXhACi0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgLyoqIFhYWDogJGlkeCBkYXRhICovLCAvKiogWFhYOiBsZW5ndGggb2YgJGlkeCBkYXRhICovKTsKKyAgICBzbm1wX3NldF92YXJfdmFsdWUodnB0ciwgLyoqIFhYWDogJGlkeCBkYXRhICovLCAvKiogWFhYOiBsZW5ndGggb2YgJGlkeCBkYXRhICovKTsKICAgICB2cHRyID0gdnB0ci0+bmV4dF92YXJpYWJsZTsKICAgICBAZW5kQAogCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICB2cHRyID0gcHV0X2luZGV4X2RhdGE7CiAgICAgCiAgICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKLSAgICBzbm1wX3NldF92YXJfdmFsdWUodnB0ciwgKHVfY2hhciAqKSAvKiogWFhYOiAkaWR4IGRhdGEgKi8sIC8qKiBYWFg6IGxlbmd0aCBvZiAkaWR4IGRhdGEgKi8pOworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAvKiogWFhYOiAkaWR4IGRhdGEgKi8sIC8qKiBYWFg6IGxlbmd0aCBvZiAkaWR4IGRhdGEgKi8pOwogICAgIHZwdHIgPSB2cHRyLT5uZXh0X3ZhcmlhYmxlOwogICAgIEBlbmRACiAKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAvKiogQ3JlYXRlIGEgZGF0YV9jb250ZXh0IGZvciBub24tZXhpc3RlbnQgcm93cyB0aGF0IFNFVHMgYXJlIHBlcmZvcm1lZCBvbi4KICAqICByZXR1cm4gYSB2b2lkICogcG9pbnRlciB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBzdWJzZXF1ZW50IGdldF9YWFgKLSAqICBhbmQgc2V0X1hYWCBmdW5jdGlvbnMgZm9yIGRhdGEgcmV0cml2YWwgYW5kIG1vZGlmaWNhdGlvbiBkdXJpbmcKKyAqICBhbmQgc2V0X1hYWCBmdW5jdGlvbnMgZm9yIGRhdGEgcmV0cmlldmFsIGFuZCBtb2RpZmljYXRpb24gZHVyaW5nCiAgKiAgdGhpcyBTRVQgcmVxdWVzdC4KICAqCiAgKiAgVGhlIGluZGV4ZXMgYXJlIGVuY29kZWQgKGluIG9yZGVyKSBpbnRvIHRoZSBpbmRleF9kYXRhIHBvaW50ZXIsCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5hcnJheS11c2VyLmNvbmYgYi9sb2NhbC9taWIyYy5hcnJheS11c2VyLmNvbmYKaW5kZXggZDNlMDI2ZS4uMzE1NTlhYyAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuYXJyYXktdXNlci5jb25mCisrKyBiL2xvY2FsL21pYjJjLmFycmF5LXVzZXIuY29uZgpAQCAtMTM2LDggKzEzNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogb2lkIGRlY2xhcmF0aW9ucwogICovCi1leHRlcm4gb2lkICR7aX1fb2lkW107Ci1leHRlcm4gc2l6ZV90ICR7aX1fb2lkX2xlbjsKK2V4dGVybiBjb25zdCBvaWQgJHtpfV9vaWRbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgJHtpfV9vaWRfbGVuOwogCiAjZGVmaW5lICR7aX1fVEFCTEVfT0lEICRpLmNvbW1hb2lkCiAgICAgCkBAIC0yNjEsOCArMjYxLDggQEAKIHN0YXRpYyAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlfaGFuZGxlciA9IE5VTEw7CiBzdGF0aWMgICAgIG5ldHNubXBfdGFibGVfYXJyYXlfY2FsbGJhY2tzIGNiOwogCi1vaWQgJHtpfV9vaWRbXSA9IHsgJHtpfV9UQUJMRV9PSUQgfTsKLXNpemVfdCAke2l9X29pZF9sZW4gPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKK2NvbnN0IG9pZCAke2l9X29pZFtdID0geyAke2l9X1RBQkxFX09JRCB9OworY29uc3Qgc2l6ZV90ICR7aX1fb2lkX2xlbiA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOwogCiAKICNpZmRlZiAke2l9X0NVU1RPTV9TT1JUCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5jb25mIGIvbG9jYWwvbWliMmMuY29uZgppbmRleCAzMjllNzFlLi5jNzE5NjhjIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5jb25mCisrKyBiL2xvY2FsL21pYjJjLmNvbmYKQEAgLTUsMTIgKzUsMTIgQEAKIFlvdSByZXF1ZXN0ZWQgbWliMmMgdG8gYmUgcnVuIG9uIHRoZSBmb2xsb3dpbmcgcGFydCBvZiB0aGUgTUlCIHRyZWU6CiAgIE9JRDogICAgICAgICAgICAgICAgICAgICAgIAkgICAgJG5hbWUKICAgbnVtZXJpYyB0cmFuc2xhdGlvbjogICAgICAgCSAgICAkbmFtZS5vYmplY3RJRAotQGV2YWwgJG51bSA9IGNvdW50X3NjYWxhcnNACi0gIG51bWJlciBvZiBzY2FsYXJzIHdpdGhpbjogICAgICAgICAkbnVtCi1AZXZhbCAkbnVtID0gY291bnRfdGFibGVzQAotICBudW1iZXIgb2YgdGFibGVzIHdpdGhpbjogICAgICAgICAgJG51bQotQGV2YWwgJG51bSA9IGNvdW50X25vdGlmaWNhdGlvbnNACi0gIG51bWJlciBvZiBub3RpZmljYXRpb25zIHdpdGhpbjogICAkbnVtCitAZXZhbCAkbnVtUyA9IGNvdW50X3NjYWxhcnNACisgIG51bWJlciBvZiBzY2FsYXJzIHdpdGhpbjogICAgICAgICAkbnVtUworQGV2YWwgJG51bVQgPSBjb3VudF90YWJsZXNACisgIG51bWJlciBvZiB0YWJsZXMgd2l0aGluOiAgICAgICAgICAkbnVtVAorQGV2YWwgJG51bU4gPSBjb3VudF9ub3RpZmljYXRpb25zQAorICBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyB3aXRoaW46ICAgJG51bU4KIAogRmlyc3QsIGRvIHlvdSB3YW50IHRvIGdlbmVyYXRlIGNvZGUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlCiB1Y2Qtc25tcCA0LlggbGluZSBvZiBjb2RlLCBvciBjb2RlIGZvciB0aGUgbmV3ZXIgTmV0LVNOTVAgNS5YIGNvZGUKQEAgLTMxLDcgKzMxLDMyIEBACiBAZWxzaWYgJGFucyAhPSAyQAogSW52YWxpZCBhbnN3ZXIuCiBAZWxzZUAKLUBpZiBjb3VudF9zY2FsYXJzKCkgPiAwQAorICBAaWYgJG51bVMgPiAwICYmICRudW1UID4gMEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJIE1JWEVEIE1JQiBURU1QTEFURQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorVGhlIHBvcnRpb24gb2YgdGhlIE1JQiB0cmVlIHRoYXQgeW91IGhhdmUgc2VsZWN0ZWQgY29udGFpbnMgYm90aAorc2NhbGFyIG9iamVjdHMgYW5kIE1JQiB0YWJsZXMuICBUaGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgTmV0LVNOTVAKK3N0eWxlIGNvZGUgY2Fubm90IGhhbmRsZSBib3RoIG9mIHRoZXNlIHNpbXVsdGFuZW91c2x5ICh0aG91Z2ggeW91Citjb3VsZCBnZW5lcmF0ZSB0aGUgdHdvIGZpbGVzIHNlcGFyYXRlbHksIGFuZCB0aGVuIG1lcmdlIHRoZSB0d28pLgorCitXaGljaCBjb2RlIGRvIHlvdSB3YW50IHRvIGdlbmVyYXRlOgorCisgIDEpIFNjYWxhciBvYmplY3RzCisgIDIpIE1JQiB0YWJsZXMKKworICAgIEBwcm9tcHQgJGFucyBTZWxlY3QgeW91ciBjaG9pY2UgOiBACisgICAgQGlmICRhbnMgPT0gMSBACisgICAgICBAZXZhbCAkbnVtVCA9IDBACisgICAgQGVsc2lmICRhbnMgPT0gMkAKKyAgICAgIEBldmFsICRudW1TID0gMEAKKyAgICBAZWxzZUAKK0ludmFsaWQgYW5zd2VyCisgICAgICBAZXZhbCAkbnVtUyA9IDBACisgICAgICBAZXZhbCAkbnVtVCA9IDBACisgICAgQGVuZEAKKyAgQGVuZEAKK0BpZiAkbnVtUyA+IDBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkJIEdFTkVSQVRJTkcgQ09ERSBGT1IgU0NBTEFSIE9CSkVDVFM6CkBAIC02MywxOTEgKzg4LDE5MCBAQAogICBAZW5kQAogQGVuZEAgIyBzY2FsYXJzCiAKLUBpZiBjb3VudF90YWJsZXMoKSA+IDBACitAaWYgJG51bVQgPiAwQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCQkgICAgIEdFTkVSQVRJTkcgQ09ERSBGT1IgVEFCTEVTOgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi0gIFlvdXIgdGFibGVzIHdpbGwgbGlrZWx5IGVpdGhlciBmYWxsIGludG8gb25lIG9mIHR3byBjYXRlZ29yaWVzOgorICBUaGUgTmV0LVNOTVAgYWdlbnQgQVBJIGlzIGV4dHJlbWVseSBleHRlbnNpdmUgYW5kLCBpbiBmYWN0LCBsZXRzCisgIGVhY2ggcHJvZ3JhbW1lciB3cml0ZSBhZ2VudCBjb2RlIGFjY29yZGluZyB0byB0aGUgc3R5bGUgdGhhdCB3b3JrcworICBiZXN0IGZvciB0aGVtIGJhc2VkIG9uIHRoZWlyIGV4cGVyaWVuY2UgYW5kIHRoZWlyIHByZWZlcmVuY2UuICBXZSdyZQorICBnb2luZyB0byBhc2sgeW91IGEgc2VyaW91cyBvZiBxdWVzdGlvbnMgdGhhdCB3aWxsIGhlbHAgbWliMmMKKyAgZ2VuZXJhdGUgY29kZSB0aGF0IGJlc3Qgc3VpdHMgKnlvdXIqIG5lZWRzLCBhcyB0aGUgcHJvZ3JhbW1lciB0aGF0CisgIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHRha2luZyB0aGUgY29kZSBhbmQgZnVydGhlciByZWZpbmluZyBpdC4gIElmCisgIHlvdSBkb24ndCBsaWtlIGhvdyB0aGUgcmVzdWx0cyBsb29rLCB5b3UgYXJlIGFsd2F5cyB3ZWxjb21lIHRvCisgIHJlLXJ1biBtaWIyYyBhbmQgc2VsZWN0IGEgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zLgogCi0gICAgMSkgdGFibGVzIHdoZXJlIHRoZSBsaXN0IG9mIHJvd3MgaXMgZXh0ZXJuYWwgdG8gdGhlIGFnZW50LgotICAgICAgIFRoaXMgaXMgc3VpdGVkIHRvIE1JQnMgd2hpY2ggbW9uaXRvciBvciBtYW5pcHVsYXRlIGV4dGVybmFsCi0gICAgICAgZGF0YSAocGVyaGFwcyBleHRyYWN0ZWQgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwKLSAgICAgICBvciBvdGhlciBzeXN0ZW0gaW50ZXJmYWNlcyksIGFuZCB3aGVyZSByb3dzIGFyZSB0eXBpY2FsbHkKLSAgICAgICBjcmVhdGVkIG9yIGRlc3Ryb3llZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBTTk1QIGFnZW50LgorICAgIFRoZXJlIGFyZSBlc3NlbnRpYWxseSB0d28gdGFza3MgaW52b2x2ZWQgaW4gcHJvY2Vzc2luZyByZXF1ZXN0cworICBmb3IgT0lEcyB3aXRoaW4gYSBNSUIgdGFibGUgLSBmaXJzdGx5IGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCByb3cKKyAgb2YgdGhlIHRhYmxlIGZvciBhIGdpdmVuIHJlcXVlc3QsIGFuZCB0aGVuIHJldHVybmluZyAob3IgdXBkYXRpbmcpCisgIHRoZSBhcHByb3ByaWF0ZSBjb2x1bW4gdmFsdWUgd2l0aGluIHRoYXQgcm93LiAgTWFueSBNSUIgdGFibGVzIG1vZGVsCisgIHRoZSBzdGF0ZSBvZiBzb21lIGV4dGVybmFsIHN5c3RlbSAodGhlIGtlcm5lbCwgYSBkZXZpY2UsIHByb2Nlc3NlcywKKyAgZXRjKSwgYW5kIHRoZSBNSUIgaW1wbGVtZW50YXRpb24gbW9kdWxlICh0aGUgY29kZSB3ZSdyZSBhYm91dCB0bworICBwcm9kdWNlIGEgdGVtcGxhdGUgZm9yKSBhY3RzIGFzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoaXMgdW5kZXJseWluZworICBzeXN0ZW0gYW5kIHRoZSBTTk1QIHNpZGUuICBPdGhlciB0YWJsZXMgaG9sZCBkYXRhIGludGVybmFsbHkgdGhhdCBpcworICBvbmx5IGF2YWlsYWJsZSB3aXRoaW4gdGhlIGFnZW50IGl0c2VsZiwgb3IgYXQgbGVhc3QgdGhlIG1hc3RlciBjb3B5CisgIG9mIHRoZSBkYXRhIGlzIGhlbGQgd2l0aGluIHRoZSBhZ2VudC4KIAotICAgIDIpIHRhYmxlcyB3aGVyZSB0aGUgbGlzdCBvZiByb3dzIGlzIGhlbGQgYnkgdGhlIGFnZW50IGl0c2VsZi4KLSAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSBzdWl0ZWQgdG8gdGFibGVzIHRoYXQgYXJlIHByaW1hcmlseQotICAgICAgIG1hbmlwdWxhdGVkIHZpYSBTTk1QLCBvciB3aGVyZSB0aGUgcm93cyBvZiB0aGUgdGFibGUgYXJlCi0gICAgICAgcmVsYXRpdmVseSBzdGF0aWMuCisgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBjb2RlIHRlbXBsYXRlcyB0aGF0IGNhbiBiZSB1c2VkIHRvCisgIGltcGxlbWVudCBNSUIgdGFibGVzLCB1c2luZyB2YXJpb3VzIGFwcHJvYWNoZXMgdG8gdGhlc2UgdHdvIHRhc2tzLgogCi0gICAgMykgRG8gbm90IGdlbmVyYXRlIGNvZGUgZm9yIHRoZSB0YWJsZXMuCisgIFRoZXJlIGFyZSB0aHJlZSBiYXNpYyBhcHByb2FjaGVzIHRvIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCByb3c6CiAKLSAgQHByb21wdCAkYW5zIFNlbGVjdCB0aGUgb3B0aW9uIHRoYXQgYmVzdCBmaXRzIHlvdTogQAotICBAaWYgJGFucyAhPSAzQAotICAgIEBpZiAkYW5zID09IDFACisgICAgMSkgUGFzcyB0aGUgcmVxdWVzdCB0aHJvdWdoIHRvIHRoZSB0YWJsZS1zcGVjaWZpYyBjb2RlLCBhbmQKKyAgICAgICBpZGVudGlmeSB0aGUgcmVxdWVzdGVkIHJvdyB0aGVyZSAoZm9yIGJvdGggR0VUIGFuZCBHRVRORVhUCisgICAgICAgcmVxdWVzdHMpLiAgVGhpcyBpcyB0eXBpY2FsbHkgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQKKyAgICAgICB1cC10by1kYXRlIGluZm9ybWF0aW9uLCBidXQgcmVsaWVzIG9uIHN1aXRhYmxlCisgICAgICAgKHByb2dyYW1tZXItcHJvdmlkZWQpIGNvZGUgd2l0aGluIHRoZSBNSUIgaGFuZGxlci4KKyAgICAgICBNb3N0IGltcG9ydGFudGx5LCB5b3Ugc2hvdWxkIGJlIGFuIGV4cGVydCB0byB1c2UgdGhpcyBjaG9pY2UuCiAKLSAgICAgIFRoaXMgc3R5bGUgb2YgdGFibGUgdGVuZHMgdG8gdXNlIHRoZSBpdGVyYXRvciBoZWxwZXIgdG8gaW5zdHJ1bWVudAotICAgICAgdGhlIGV4dGVybmFsIGRhdGEsIHNvIGl0IGNhbiBiZSByZXByZXNlbnRlZCBieSBhbiBTTk1QIHRhYmxlLgotICAgICAgVGhlIG1haW4gY2hhcmFjdGVyaXN0aWMgb2YgdGhpcyBoZWxwZXIgaXMgdGhlIHVzZSBvZiBhIHBhaXIKLSAgICAgIG9mICJpdGVyYXRpb24gaG9vayIgcm91dGluZXMgdG8gbG9vcCB0aHJvdWdoIHRoZSByb3dzIGluIHR1cm4KLSAgICAgIChpbiB0aGUgbW9zdCBuYXR1cmFsIG9yZGVyIGZvciB0aGUgdW5kZXJseWluZyBkYXRhKS4KLSAgICAgICAgVGhlcmUgYXJlIGEgY291cGxlIG9mIGRpZmZlcmVudCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9ucyB0aGF0Ci0gICAgICBjYW4gYmUgdXNlZCBhcyBhIGZyYW1ld29yayBmb3IgdGhpczoKKyAgICAgICBUaGlzIHdpbGwgcHJvZHVjZSBjb2RlIGJhc2VkIG9uIHRoZSB0YWJsZV9kYXRhc2V0IGhhbmRsZXIuCiAKLSAgICAgIDEpIE9uZSBiYXNlZCBhcm91bmQgYSBzaW5nbGUgaGFuZGxlciwgdGhhdCBpbmNsdWRlcyBjb2RlIHRvIGhhbmRsZQotICAgICAgICAgYm90aCBHRVQgYW5kIFNFVCByZXF1ZXN0cywgYXMgd2VsbCBhcyByb3cgY3JlYXRpb24gYW5kIGRlbGV0aW9uLgotICAgICAgICAgVGhpcyB0ZW1wbGF0ZSBkZWZpbmVzIGEgc3VpdGFibGUgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBpbXBsZW1lbnRzCi0gICAgICAgICB0aGUgdGFibGUgYXMgYW4gaW50ZXJuYWxseS1oZWxkIGxpbmtlZCBsaXN0LCBidXQgYm90aCBvZiB0aGVzZQotICAgICAgICAgYXJlIG1haW5seSBmb3IgaWxsdXN0cmF0aW9uLCBhbmQgY291bGQgcmVhc29uYWJseSBiZSByZXBsYWNlZCBieQotICAgICAgICAgY29kZSBtb3JlIGFwcHJvcHJpYXRlIGZvciB0aGUgdGFibGUgYmVpbmcgaW1wbGVtZW50ZWQuCi0gICAgICAgICAgIFRoZSBzYW1lIHRlbXBsYXRlIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcKLSAgICAgICAgICAgICAgICAgbWliMmMgLWMgbWliMmMuaXRlcmF0ZS5jb25mICRuYW1lCi0gCi0gICAgICAyKSBBbiBhbHRlcm5hdGl2ZSBmcmFtZXdvcmssIGRlc2lnbmVkIGFzIGFuIEFQSSB3cmFwcGVyIG9uIHRvcCBvZgotICAgICAgICAgdGhlIGJhc2ljIGl0ZXJhdG9yIGhlbHBlciwgdGhhdCBzZWVrcyB0byBzZXBhcmF0ZSB0aGUgc3RhbmRhcmQKLSAgICAgICAgIHByb2Nlc3Npbmcgb2YgdGhlIHN5bnRheCBvZiBhIE1JQiB0YWJsZSAod2hpY2ggY2FuIGJlIGdlbmVyYXRlZAotICAgICAgICAgYXV0b21hdGljYWxsKSwgZnJvbSB0aGUgc2VtYW50aWNzIG9mIGEgZ2l2ZW4gdGFibGUgKHdoaWNoIGNhbm5vdCkuCi0gICAgICAgICAgIEl0IGdlbmVyYXRlcyBhIG51bWJlciBvZiBzZXBhcmF0ZSBjb2RlIGZpbGVzLCBidXQgdHlwaWNhbGx5Ci0gICAgICAgICBvbmx5IG9uZSBvciB0d28gb2YgdGhlc2Ugd2lsbCBuZWVkIHRvIGJlIGVkaXRlZC4gIFRoZXNlIGNvbnRhaW4KLSAgICAgICAgIHNlcGFyYXRlICdnZXRfY29sdW1uKCknIGFuZCAnc2V0X2NvbHVtbigpJyBmdW5jdGlvbnMgZm9yIGVhY2gKLSAgICAgICAgIGNvbHVtbiBpbiB0aGUgdGFibGUsIHBsdXMgc29tZSBvdGhlciByb3V0aW5lcyBmb3IgbWFuaXB1bGF0aW5nCi0gICAgICAgICByb3dzIChwbHVzIHRoZSBzdGFuZGFyZCBpdGVyYXRvciBob29rIHJvdXRpbmVzKS4KLSAgICAgICAgICAgVGhlIHNhbWUgdGVtcGxhdGVzIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcKLSAgICAgICAgICAgICAgICAgbWliMmMgLWMgbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiAkbmFtZQotICAgICAgICAgKFNlZSB0aGUgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZS9uZXRTbm1wSG9zdHNUYWJsZS5jIGZpbGUgZm9yIGV4YW1wbGUpCisgICAgMikgSGF2ZSB0YWJsZS1zcGVjaWZpYyBjb2RlIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2gKKyAgICAgICByb3dzIGV4aXN0IGluIHRoZSB0YWJsZSAoYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlbSBpbiB0dXJuKSwKKyAgICAgICBidXQgdXRpbGlzZSBzdGFuZGFyZCBoZWxwZXIgY29kZSB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgcm93IGZvciBhIGdpdmVuIHJlcXVlc3QuICBUaGlzIGlzIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBmb3IKKyAgICAgICB0YWJsZXMgd2hlcmUgdGhlIGRhdGEgaXMgbmF0dXJhbGx5IHN0b3JlZCBpbiBhICJyYW5kb20iIG9yZGVyCisgICAgICAgKG9yIGRpZmZlcmVudGx5IHRvIHRoZSBNSUIgdGFibGUgaW5kZXgpLCBvciB3aGVyZSByb3dzIGFyZQorICAgICAgIGZyZXF1ZW50bHkgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSB0YWJsZS4KIAotICAgICAgMykgQW4gQVBJIGxheWVyIChub3QgYmFzZWQgb24gdGhlIGl0ZXJhdG9yIGhlbHBlcikgdGhhdCBhdHRlbXB0cwotICAgICAgICAgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgU05NUCBzcGVjaWZpYyBrbm93bGVkZ2UgcmVxdWlyZWQgdG8KLSAgICAgICAgIGltcGxlbWVudCBhIG1vZHVsZS4gSXQgcHJvdmlkZXMgbW9yZSBBUElzIHRoYW4gMiwgd2hpY2ggYXJlCi0gICAgICAgICAoaG9wZWZ1bGx5KSBzbWFsbGVyIGFuZCBtb3JlIHNwZWNpZmljLCB3aXRoIGxlc3MgU05NUCB0ZXJtaW5vbG9neS4KLSAgICAgICAgICAgVGhpcyBBUEkgaXMgYWxzbyBrbm93biBhcyAiTUlCcyBmb3IgRHVtbWllcyIuICBOdW1lcm91cyB0YWJsZXMKLSAgICAgICAgIGluIHRoZSBOZXQtU05NUCBhZ2VudCBoYXZlIGJlZW4gcmUtd3JpdHRlbiB0byB1c2UgdGhpcyBBUEkuCi0gICAgICAgICAgIFRoZSBzYW1lIHRlbXBsYXRlcyBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nCi0gICAgICAgICAgICAgICAgIG1pYjJjIC1jIG1pYjJjLm1mZC5jb25mICRuYW1lCi0gICAgICAgICAoU2VlIHRoZSBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlKi5jIGZpbGVzIGZvciBleGFtcGxlcykKKyAgICAgICAgIEhvd2V2ZXIgc2VhcmNoaW5nIGZvciB0aGUgcmVxdWVzdGVkIHJvdyBpcyBub3QgdmVyeSBlZmZpY2llbnQsCisgICAgICAgYW5kIHBlcmZvcm1hbmNlIGNhbiBiZSBzbG93IC0gcGFydGljdWxhcmx5IGZvciBsYXJnZSB0YWJsZXMgd2l0aAorICAgICAgIG1hbnkgcm93cy4KIAotICAgICAgNCkgRG8gbm90IGdlbmVyYXRlIGNvZGUgZm9yIHRoZSB0YWJsZXMuCisgICAgMykgSG9sZCBhIGxvY2FsbHkgY2FjaGVkIGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSAob3IgYXQKKyAgICAgICBsZWFzdCBhIGNhY2hlIG9mIHdoaWNoIHJvd3MgYXJlIHZhbGlkKSwgYW5kIHV0aWxpc2Ugc3RhbmRhcmQKKyAgICAgICBoZWxwZXIgY29kZSB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHJvdy4gIFRoaXMgaXMKKyAgICAgICBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBpdGVyYXRvci1iYXNlZCBhcHByb2FjaCwgYnV0CisgICAgICAgY2FjaGVkIGRhdGEgaXMgaW5ldml0YWJseSBzbGlnaHRseSAic3RhbGUiIHdpdGggcmVzcGVjdCB0byB0aGUKKyAgICAgICBkYXRhIGZyb20gdGhlIHVuZGVybHlpbmcgc3lzdGVtIGJlaW5nIG1hbmFnZWQuICBUaGlzIGFwcHJvYWNoLAorICAgICAgIHNpbmNlIGl0IHJlbGllcyBvbiBjYWNoaW5nIG9mIGRhdGEsIGlzIGFsc28gcmVzdWx0cyBpbiBhIGxhcmdlcgorICAgICAgIG1lbW9yeSBmb290cHJpbnQuICBJdCBpcyBsZXNzIGFwcHJvcHJpYXRlIGZvciB0YWJsZXMgd2hlcmUgcm93cworICAgICAgIGFyZSBmcmVxdWVudGx5IGFkZGVkIG9yIHJlbW92ZWQgZXh0ZXJuYWxseSB0byB0aGUgYWdlbnQgKGkuZS4sCisgICAgICAgbm90IHZpYSBTTk1QIHJlcXVlc3RzKS4KIAotICAgICAgSWYgeW91IGFyZSB1bnN1cmUgd2hpY2ggb3B0aW9uIHRvIHBpY2ssIGNob2ljZXMgMikgb3IgMykgYXJlIHBlcmhhcHMKLSAgICAgIG1vcmUgc3VpdGVkIGZvciB0aG9zZSBsZXNzIGZhbWlsaWFyIHdpdGggdGhlIGNvbmNlcHRzIGJlaGluZCB0aGUgU05NUAotICAgICAgcHJvdG9jb2wgb3BlcmF0aW9ucywgd2hpbGUgY2hvaWNlIDEpIGdpdmVzIG1vcmUgY29udHJvbCBvdmVyIGV4YWN0bHkKLSAgICAgIHdoYXQgaXMgZG9uZS4KKyAgICAgICBUaGlzIGFwcHJvYWNoIGNhbiBhbHNvIGJlIHVzZWQgd2hlcmUgX2FsbF8gdXNlIG9mIHRoZSB0YWJsZSBpcworICAgICAgIHZpYSBTTk1QLCBhbmQgdGhlcmUgaXMgbm8gZXh0ZXJuYWwgInVuZGVybHlpbmcgc3lzdGVtIi4gIEluCisgICAgICAgdGhpcyBjYXNlLCB0aGUgbG9jYWwgY2FjaGUgaXMgdGhlIGNhbm9uaWNhbCB2ZXJzaW9uIG9mIHRoZQorICAgICAgIHRhYmxlLgogCi0gICAgIEBwcm9tcHQgJGFucyBTZWxlY3QgdGhlIEFQSSBzdHlsZSB5b3Ugd2lzaCB0byB1c2U6IEAKLSAgICAgQGlmICRhbnMgIT0gNUAKLSAgICAgICBAaWYgJGFucyA9PSAxQAotICAgICAgICAgdXNpbmcgdGhlIG1pYjJjLml0ZXJhdGUuY29uZiBjb25maWd1cmF0aW9uIGZpbGUgdG8gZ2VuZXJhdGUgeW91ciBjb2RlLgotICAgICAgICAgQHJ1biBtaWIyYy5pdGVyYXRlLmNvbmZACi0gICAgICAgQGVsc2lmICRhbnMgPT0gMkAKLSAgICAgICAgIHVzaW5nIHRoZSBtaWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSB0bwotICAgICAgICAgZ2VuZXJhdGUgeW91ciBjb2RlLgotICAgICAgICAgQHJ1biBtaWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mQAotICAgICAgIEBlbHNpZiAkYW5zID09IDNACi0gICAgICAgICB1c2luZyB0aGUgbWliMmMubWZkLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlIHRvCi0gICAgICAgICBnZW5lcmF0ZSB5b3VyIGNvZGUuCi0gICAgICAgICBAcnVuIG1pYjJjLm1mZC5jb25mQAotICAgICAgIEBlbHNlQAotICAgICAgICAgV0FSTklORzogVW5rbm93biByZXNwb25zZS4gIFNraXBwaW5nIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGFibGVzLgotICAgICAgIEBlbmRACi0gICAgIEBlbmRACisgICAgNCkgRG8gbm90IGdlbmVyYXRlIGNvZGUgZm9yIHRoZSB0YWJsZXMuCisKKyAgQHByb21wdCAkYW5zMSBTZWxlY3QgdGhlIG9wdGlvbiB0aGF0IGJlc3QgZml0cyB5b3VyIHJlcXVpcmVtZW50czogQAorCisgIEBpZiAoJGFuczEgPT0gMikgfHwgKCRhbnMxID09IDMpQAorCisgIEhhdmluZyBpZGVudGlmaWVkIHRoZSBhcHByb3ByaWF0ZSByb3cgZm9yIGEgZ2l2ZW4gcmVxdWVzdCwgdGhlcmUgYXJlCisgIHRocmVlIGJhc2ljIHN0eWxlcyBvZiBjb2RlIGZvciByZXR1cm5pbmcgKG9yIHVwZGF0aW5nKSB0aGUgcmVxdWVzdGVkCisgIGNvbHVtbiB2YWx1ZSBmcm9tIHdpdGhpbiB0aGlzIHJvdzoKKworICAgIDEpIEEgc2luZ2xlIGhhbmRsZXIgcm91dGluZSwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBjb2RlIG5lZWRlZCB0bworICAgICAgIGhhbmRsZSBHRVQgYW5kIFNFVCByZXF1ZXN0cyBmb3IgZWFjaCBvZiB0aGUgY29sdW1uIG9iamVjdHMuCisKK0BpZiAkYW5zMSA9PSAyQAorICAgICAgIFRoZSBjb2RlIHR5cGljYWxseSBsb29rcyBsaWtlIGEgc2luZ2xlIGZ1bmN0aW9uIHdpdGggYSBsYXJnZSAnY2FzZScKKyAgICAgICBzdGF0ZW1lbnQgY292ZXJpbmcgZWFjaCBvZiB0aGUgY29sdW1ucy4KKworICAgICAgIFRoaXMgd2lsbCBwcm9kdWNlIGNvZGUgYmFzZWQgb24gdGhlICdpdGVyYXRvcicgaGVwbGVyLgorQGVuZEAKKworICAgIDIpIEEgc2V0IG9mIGluZGl2aWR1YWwgcm91dGluZXMsIGVhY2ggb2Ygd2hpY2ggaXMgY29uY2VybmVkCisgICAgICAgd2l0aCBhIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QuCisgICAgQGlmICRhbnMxID09IDIgQAorICAgICAgIEVhY2ggY29sdW1uIG9iamVjdCB3aXRoaW4gdGhlIHRhYmxlIGhhcyBvbmUgcm91dGluZSBmb3IKKyAgICAgICByZXRyaWV2aW5nIHRoZSBjdXJyZW50IHZhbHVlLCBhbmQgYW5vdGhlciBmb3Igc2V0dGluZyBhIG5ldyBvbmUuCisKKyAgICAgICBUaGlzIHdpbGwgcHJvZHVjZSBjb2RlIGJhc2VkIG9uIHRoZSAnaXRlcmF0ZV9hY2Nlc3MnIGhlcGxlci4KICAgICBAZWxzZUAKLSAgICAgIEBpZiAkYW5zID09IDJACi0gICAgICBUaGlzIHN0eWxlIG9mIHRhYmxlIGhvbGRzIGEgbGlzdCBvZiB0aGUgdGFibGUgcm93cyBpbnRlcm5hbGx5Ci0gICAgICB3aXRoaW4gdGhlIGFnZW50IGl0c2VsZi4gIFR5cGljYWxseSB0aGlzIHdpbGwgdGVuZCB0byBpbmNsdWRlCi0gICAgICB0aGUgY29sdW1uIHZhbHVlcyBmb3IgZWFjaCBwYXJ0aWN1bGFyIHJvdywgYW5kIHRoYXQgaXMgdGhlCi0gICAgICBtb2RlbCB1c2VkIGJ5IHRoZSBnZW5lcmF0ZWQgdGVtcGxhdGUgY29kZS4gIEJ1dCBpdCBzaG91bGQgdXN1YWxseQotICAgICAgYmUgcG9zc2libGUgdG8gcmVhZCBpbiBzb21lIG9yIGFsbCBvZiB0aGUgY29sdW1uIHZhbHVlcyBmcm9tIGFuCi0gICAgICBleHRlcm5hbCBzb3VyY2UsIHNob3VsZCB0aGlzIGJlIG5lY2Vzc2FyeSBmb3IgYSBwYXJ0aWN1bGFyIE1JQiB0YWJsZS4KLSAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9ucyB0aGF0Ci0gICAgICBjYW4gYmUgdXNlZCBhcyBhIGZyYW1ld29yayBmb3IgdGhpczoKLSAgICAgIAotCi0gICAgICAxKSBkYXRhc2V0IHN0b3JhZ2U6IFRoZSBkYXRhIGZvciB0aGUgdGFibGUgaXMgc3RvcmVkIGNvbXBsZXRlbHkKLSAgICAgICAgIHdpdGhpbiB0aGUgYWdlbnQsIGFuZCB0aGUgdXNlci12aXNpYmxlIGNvZGUgZG9lcyBub3QgbmVlZCB0bwotICAgICAgICAgYmUgY29uY2VybmVkIHdpdGggdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGluZGl2aWR1YWwKLSAgICAgICAgIHJvdy4gIFRoaXMgaXMgbW9zdCBzdWl0ZWQgdG8gTUlCIHRhYmxlcyB0aGF0IGFyZSBwdXJlbHkgaW50ZXJuYWwKLSAgICAgICAgIHRvIHRoZSBhZ2VudCwgcmF0aGVyIHRoYW4gbW9kZWxsaW5nIGV4dGVybmFsIGRhdGEsIG9yIHVzaW5nCi0gICAgICAgICBleGlzdGluZyBkYXRhIHN0cnVjdHVyZXMuCi0gICAgICAgICAgIFRoZSBzYW1lIHRlbXBsYXRlIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcKLSAgICAgICAgICAgICAgICAgbWliMmMgLWMgbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZiAkbmFtZQotCi0gICAgICAyKSByb3ctZGF0YSBzdG9yYWdlOiBUaGUgZGF0YSBmb3IgdGhlIHRhYmxlIGlzIGhlbGQgYnkgdGhlIGFnZW50LAotICAgICAgICAgYnV0IHVzaW5nIGFuIGFyYml0cmFyeSAodXNlci1wcm92aWRlZCkgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZQotICAgICAgICAgcmVwcmVzZW50YXRpb24gb2YgYW4gaW5kaXZpZHVhbCByb3cuIFRoaXMgaXMgc3VpdGVkIGZvciBNSUIKLSAgICAgICAgIHRhYmxlcyB3aGVyZSB0aGVyZSBpcyBhIG5hdHVyYWwgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmUsCi0gICAgICAgICBvciB3aGVyZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIG1heSBuZWVkIHRvIGJlIGludGVycHJldGVkCi0gICAgICAgICBmb3Igc29tZSBhZGRpdGlvbmFsIHB1cnBvc2UsIG90aGVyIHRoYW4gc2ltcGx5IGltcGxlbWVudGluZwotICAgICAgICAgdGhlIHRhYmxlIGZvciBTTk1QIHJlcXVlc3RzLgotICAgICAgICAgICBUaGUgc2FtZSB0ZW1wbGF0ZSBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nCi0gICAgICAgICAgICAgICAgIG1pYjJjIC1jIG1pYjJjLnRhYmxlX2RhdGEuY29uZiAkbmFtZQotCi0gICAgICAzKSBjb250YWluZXIgc3RvcmFnZTogVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIHJvdy1kYXRhCi0gICAgICAgICBtZWNoYW5pc20sIGJ1dCB1c2VzIGEgZGlmZmVyZW50IChhbmQgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQpCi0gICAgICAgICBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gIFRoZSBtYWluIHByYWN0aWNhbCBlZmZlY3QgaXMgdG8KLSAgICAgICAgIGludHJvZHVjZSBhIHNsaWdodCBjb25zdHJhaW50IG9uIHRoZSBmb3JtIG9mIHRoZSBwZXItcm93IGRhdGEKLSAgICAgICAgIHN0cnVjdHVyZS4KLSAgICAgICAgICAgVGhlIHNhbWUgdGVtcGxhdGUgY2FuIGJlIGdlbmVyYXRlZCB1c2luZwotICAgICAgICAgICAgICAgICBtaWIyYyAtYyBtaWIyYy5jb250YWluZXIuY29uZiAkbmFtZQotCi0gICAgICBBbGwgdGhyZWUgb2YgdGhlc2UgdGVtcGxhdGVzIGdlbmVyYXRlIGEgc2luZ2xlIGNvZGUgZmlsZSwgYW5kCi0gICAgICB1c2UgYSAic2luZ2xlIGhhbmRsZXIiIGZvcm1hdCBmb3IgdGhlIGRyaXZpbmcgY29kZS4KLQotICAgICAgNCkgc29ydGVkIGFycmF5OiAgVGhlIGRhdGEgZm9yIHRoZSB0YWJsZSBpcyBzdG9yZWQgaW4gYSBzb3J0ZWQKLSAgICAgICAgIGFycmF5LgotICAgICAgICAgKG1hbnVhbGx5IG1pYjJjIC1jIG1pYjJjLmFycmF5LXVzZXIuY29uZiAke25hbWV9KQotCi0gICAgICA1KSBOZXQtU05NUCBjb250YWluZXI6IChBbHNvIGtub3duIGFzICJNSUJzIGZvciBEdW1taWVzIiwgb3IgTUZELikKLSAgICAgICAgIFRoZSBkYXRhIGZvciB0aGUgdGFibGUgaXMgc3RvcmVkIHZpYSBhCi0gICAgICAgICBnZW5lcmljIGludGVyZmFjZS4gVmFyaW91cyB0eXBlcyBvZiBjb250YWluZXJzIG1heSBiZQotICAgICAgICAgc2VsZWN0ZWQsIGluY2x1ZGluZyBsaW5rZWQgbGlzdHMgb3IgYmluYXJ5IGFycmF5cy4KLSAgICAgICAgIChtYW51YWxseSBtaWIyYyAtYyBtaWIyYy5tZmQuY29uZiAke25hbWV9KQotCi0gICAgICA2KSBEbyBub3QgZ2VuZXJhdGUgY29kZSBmb3IgdGhlIHRhYmxlcy4KLQotICAgICAgQWxsIEFQSXMgYXJlIGZ1bGx5IGZ1bmN0aW9uYWwgd2l0aCBsaXR0bGUtdG8tbm8gcmVxdWlyZWQgY29kZQotICAgICAgdG8gbWFrZSB0aGUgdGFibGUgb3BlcmF0aW9uYWwgb24geW91ciBlbmQgb25jZSB0aGUgdGVtcGxhdGUKLSAgICAgIGNvZGUgaXMgcHJvZHVjZWQuICBUaGUgTUZEIGFuZCBkYXRhc2V0IEFQSXMgYXJlIGEgYml0IGJldHRlcgotICAgICAgZG9jdW1lbnRlZCwgYnV0IHRoZSBzb3J0ZWQgYXJyYXkgaXMgcHJvYmFibHkgYmV0dGVyIHRlc3RlZAotICAgICAgYXMgaXQgd2FzIHVzZWQgaGVhdmlseSBpbiB0aGUgbmV0LXBvbGljeSBzb3VyY2Vmb3JnZSBwcm9qZWN0LgotICAgICAgVGhlIE1GRCBBUEkgaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgYXJyYXktdXNlciBBUEksIGFuZCBzZXZlcmFsCi0gICAgICB0YWJsZXMgaW4gdGhlIE5ldC1TTk1QIGFnZW50IGhhdmUgYmVlbiByZS13cml0dGVuIHRvIHVzZSBpdC4KLSAgICAgIFRoZSBkYXRhc2V0IEFQSSBpcyB1c2VkIGluc2lkZSB0aGUgc25tcHRyYXBkIGFwcGxpY2F0aW9uIGZvcgotICAgICAgbG9nZ2luZyBpbmNvbWluZyB0cmFwcy4KLQotICAgICAgQHByb21wdCAkYW5zIFNlbGVjdCB0aGUgQVBJIHN0eWxlIHlvdSB3aXNoIHRvIHVzZTogQAotICAgICAgQGlmICRhbnMgIT0gNkAKLSAgICAgICAgQGlmICRhbnMgPT0gMUAKLSAgICAgICAgICB1c2luZyB0aGUgbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZiBjb25maWd1cmF0aW9uIGZpbGUKLSAgICAgICAgICB0byBnZW5lcmF0ZSB5b3VyIGNvZGUuCi0gICAgICAgICAgQHJ1biBtaWIyYy5jcmVhdGUtZGF0YXNldC5jb25mQAotICAgICAgICBAZWxzaWYgJGFucyA9PSAyQAotICAgICAgICAgIHVzaW5nIHRoZSBtaWIyYy50YWJsZV9kYXRhLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlIHRvCi0gICAgICAgICAgZ2VuZXJhdGUgeW91ciBjb2RlLgotICAgICAgICAgIEBydW4gbWliMmMudGFibGVfZGF0YS5jb25mQAotICAgICAgICBAZWxzaWYgJGFucyA9PSAzQAotICAgICAgICAgIHVzaW5nIHRoZSBtaWIyYy5jb250YWluZXIuY29uZiBjb25maWd1cmF0aW9uIGZpbGUgdG8KLSAgICAgICAgICBnZW5lcmF0ZSB5b3VyIGNvZGUuCi0gICAgICAgICAgQHJ1biBtaWIyYy5jb250YWluZXIuY29uZkAKLSAgICAgICAgQGVsc2lmICRhbnMgPT0gNEAKLSAgICAgICAgICB1c2luZyB0aGUgbWliMmMuYXJyYXktdXNlci5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSB0bwotICAgICAgICAgIGdlbmVyYXRlIHlvdXIgY29kZS4KLSAgICAgICAgICBAcnVuIG1pYjJjLmFycmF5LXVzZXIuY29uZkAKLSAgICAgICAgQGVsc2lmICRhbnMgPT0gNUAKLSAgICAgICAgICB1c2luZyB0aGUgbWliMmMubWZkLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlIHRvIGdlbmVyYXRlIHlvdXIgY29kZS4KLSAgICAgICAgICBAcnVuIG1pYjJjLm1mZC5jb25mQAotICAgICAgICBAZWxzZUAKLSAgICAgICAgICBXQVJOSU5HOiBVbmtub3duIHJlc3BvbnNlLiAgU2tpcHBpbmcgY29kZSBnZW5lcmF0aW9uIGZvciB0YWJsZXMuCi0gICAgICAgIEBlbmRACi0gICAgICBAZWxzZUAKLSAgICAgICAgV0FSTklORzogVW5rbm93biByZXNwb25zZS4gIFNraXBwaW5nIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGFibGVzLgotICAgICAgQGVuZEAKKyAgICAgICBUaGVyZSBpcyBvbmUgcm91dGluZSBmb3IgcmVwb3J0aW5nIHZhbHVlcyBmb3IgR0VUIHJlcXVlc3RzLAorICAgICAgIGFuZCBvbmUgcm91dGluZSBmb3IgZWFjaCBzdGFnZSBvZiBwcm9jZXNzaW5nIGEgU0VUIHJlcXVlc3QuCiAgICAgQGVuZEAKKworICAgIDMpIEEgKGRpZmZlcmVudCkgc2V0IG9mIGluZGl2aWR1YWwgcm91dGluZXMsIGVhY2ggb2Ygd2hpY2ggaXMKKyAgICAgICBzbWFsbGVyIGFuZCBtb3JlIHRpZ2h0bHkgZm9jdXNlZCB0aGFuIHRoZSBjb2RlIGdlbmVyYXRlZCBieQorICAgICAgIHN0eWxlIDIuICBUaGUgYWltIGhlcmUgaXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgU05NUCBzcGVjaWZpYworICAgICAgIGtub3dsZWRnZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgYSBtb2R1bGUsIGFuZCBoaWRlIG11Y2ggb2YgdGhlCisgICAgICAgU05NUCB0ZXJtaW5vbG9neSBhbmQgcHJvY2Vzc2luZyB3aXRoaW4gc3RhbmRhcmQgZ2VuZXJhdGVkIGNvZGUKKyAgICAgICAod2hpY2ggY2FuIHNpbXBseSBiZSB1c2VkIHNpZ2h0IHVuc2VlbikuCitAaWYgJG5hbWUgIX4gL1RhYmxlJC9pQAorICAgICAgICAgSG93ZXZlciB0aGlzIHN0eWxlIG9mIGNvZGUgY2FuIG9ubHkgYmUgZ2VuZXJhdGVkIHdoZW4gbWliMmMKKyAgICAgICBpcyBydW4gb24gYW4gaW5kaXZpZHVhbCBNSUIgdGFibGUuICBUbyB1c2UgdGhpcyBhcHByb2FjaCwgeW91CisgICAgICAgd2lsbCBuZWVkIHRvIHJlLWludm9rZSBtaWIyYyB3aXRoIHRoZSBuYW1lIG9mIGEgc2luZ2xlIE1JQiB0YWJsZS4KK0BlbmRACisKKyAgICAgICBUaGlzIHdpbGwgcHJvZHVjZSBjb2RlIGJhc2VkIG9uIHRoZSAnbWZkJyBoZXBsZXIgKCdNSUIgZm9yIER1bW1pZXMnKS4KKworICAgIDQpIERvIG5vdCBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgdGFibGVzLgorCisgICAoSW4gYWxsIGNhc2VzLCBHRVRORVhUIHJlcXVlc3RzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZAorICAgIGludG8gdGhlIGVxdWl2YWxlbnQgR0VUIHJlcXVlc3QsIHNvIHRoZSBNSUIgc3BlY2lmaWMgY29kZQorICAgIG5lZWQgb25seSBiZSBjb25jZXJuZWQgd2l0aCBHRVQgYW5kIFNFVCByZXF1ZXN0cy4pLgorICAgICAgIAorICBAcHJvbXB0ICRhbnMyIFNlbGVjdCB0aGUgY29kZSBzdHlsZSB5b3Ugd2lzaCB0byB1c2U6IEAKICAgQGVuZEAKLSBAZW5kQCAjICE9IDMKKworICBAZXZhbCAkdGVtcGxhdGUgPSBOT05FQAorICBAaWYgJGFuczEgPT0gMUAKKyAgICAgQGV2YWwgJHRlbXBsYXRlID0gImNyZWF0ZS1kYXRhc2V0IkAKKworICBAZWxzaWYgJGFuczEgPT0gMkAKKyAgIEBpZiAkYW5zMiA9PSAxQAorICAgICBAZXZhbCAkdGVtcGxhdGUgPSBpdGVyYXRlQAorICAgQGVsc2lmICRhbnMyID09IDJACisgICAgIEBldmFsICR0ZW1wbGF0ZSA9IGl0ZXJhdGVfYWNjZXNzQAorICAgQGVsc2lmICRhbnMyID09IDNACisgICAgIEBldmFsICR0ZW1wbGF0ZSA9IG1mZEAKKyAgIEBlbHNpZiAkYW5zMiAhPSA0QAorICAgICBXQVJOSU5HOiBVbmtub3duIHJlc3BvbnNlLiAgU2tpcHBpbmcgY29kZSBnZW5lcmF0aW9uIGZvciB0YWJsZXMuCisgICBAZW5kQAorCisgIEBlbHNpZiAkYW5zMSA9PSAzQAorICAgQGlmICRhbnMyID09IDFACisgICAgIFRoZXJlIGFyZSBhY3R1YWxseSB0d28gYWx0ZXJuYXRpdmUgdGVtcGxhdGVzIHRoYXQgdXNlIHRoaXMKKyAgICAgc3R5bGUgb2YgY29kZSAtIGRpZmZlcmluZyBwcmltYXJpbHkgaW4gdGhlIGRhdGEgc3RydWN0dXJlCisgICAgIHVzZWQgZm9yIHJlcHJlc2VudGluZyBhIHJvdyBvZiB0aGUgdGFibGUKKworICAgICAgMSkgVGhlIGZpcnN0IGlzIHdlbGwgc3VpdGVkIGZvciBzaXR1YXRpb25zIHdoZXJlIHRoZXJlIGlzIGEKKyAgICAgICAgIG5hdHVyYWwgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmUsIG9yIHdoZXJlIHRoZSBjb250ZW50cyBvZgorICAgICAgICAgdGhlIHRhYmxlIG1heSBuZWVkIHRvIGJlIGludGVycHJldGVkIGZvciBzb21lIGFkZGl0aW9uYWwKKyAgICAgICAgIHB1cnBvc2UsIG90aGVyIHRoYW4gc2ltcGx5IGltcGxlbWVudGluZyB0aGUgdGFibGUgaW4gU05NUC4KKworICAgICAgICAgVGhpcyB3aWxsIHByb2R1Y2UgY29kZSBiYXNlZCBvbiB0aGUgJ3RhYmxlX2RhdGEnIGhlcGxlci4KKworICAgICAgMikgVGhlIHNlY29uZCBpcyBzbGlnaHRseSBtb3JlIGVmZmljaWVudCwgYnV0IGludHJvZHVjZXMgc29tZQorICAgICAgICAgbWlub3IgY29uc3RyYWludHMgb24gdGhlIGZvcm0gb2YgdGhlIHBlci1yb3cgZGF0YSBzdHJ1Y3R1cmUuCisKKyAgICAgICAgIFRoaXMgd2lsbCBwcm9kdWNlIGNvZGUgYmFzZWQgb24gdGhlICdjb250YWluZXInIGhlcGxlci4KKworICAgICAgQHByb21wdCAkYW5zMyBTZWxlY3QgdGhlIHJvdyByZXByZXNlbnRhdGlvbiB5b3Ugd2lzaCB0byB1c2U6IEAKKworICAgICAgQGlmICRhbnMzID09IDFACisgICAgICAgQGV2YWwgJHRlbXBsYXRlID0gdGFibGVfZGF0YUAKKyAgICAgIEBlbHNpZiAkYW5zMyA9PSAyQAorICAgICAgIEBldmFsICR0ZW1wbGF0ZSA9IGNvbnRhaW5lckAKKyAgICAgIEBlbHNlQAorICAgICBXQVJOSU5HOiBVbmtub3duIHJlc3BvbnNlLiAgU2tpcHBpbmcgY29kZSBnZW5lcmF0aW9uIGZvciB0YWJsZXMuCisgICAgICBAZW5kQAorICAgQGVsc2lmICRhbnMyID09IDJACisgICAgIEBldmFsICR0ZW1wbGF0ZSA9ICJhcnJheS11c2VyIkAKKyAgIEBlbHNpZiAkYW5zMiA9PSAzQAorICAgICBAZXZhbCAkdGVtcGxhdGUgPSBtZmRACisgICBAZWxzZUAKKyAgICAgV0FSTklORzogVW5rbm93biByZXNwb25zZS4gIFNraXBwaW5nIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGFibGVzLgorICAgQGVuZEAKKworICBAZWxzaWYgJGFuczEgIT0gNEAKKyAgICAgV0FSTklORzogVW5rbm93biByZXNwb25zZS4gIFNraXBwaW5nIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGFibGVzLgorICBAZW5kQAorCisgIEBpZiAkdGVtcGxhdGUgbmUgTk9ORUAKKyAgICAgVGhlIHNhbWUgdGVtcGxhdGUgY29kZSBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nCisgICAgICAgICAgICAgICAgIG1pYjJjIC1jIG1pYjJjLiR7dGVtcGxhdGV9LmNvbmYgJG5hbWUKKyAgICAgQHJ1biBtaWIyYy4ke3RlbXBsYXRlfS5jb25mQAorICBAZW5kQAogQGVuZEAgIyB0YWJsZXMKIAotQGlmIGNvdW50X25vdGlmaWNhdGlvbnMoKSA+IDBACitAaWYgJG51bU4gPiAwQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCQkgR0VORVJBVElORyBDT0RFIEZPUiBOT1RJRklDQVRJT05TOgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYgYi9sb2NhbC9taWIyYy5jb250YWluZXIuY29uZgppbmRleCAyNjZmMDA3Li5lNzY2MjFmIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5jb250YWluZXIuY29uZgorKysgYi9sb2NhbC9taWIyYy5jb250YWluZXIuY29uZgpAQCAtMSw0ICsxLDcgQEAKICMjIC0qLSBjIC0qLQorIyMgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyIENvcHlyaWdodCAoQykgQXBwbGUsIEluYy4KKyMjIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyMjIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBEbyB0aGUgLmggZmlsZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMzYsOCArMzksMTUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KICNpbmNsdWRlICIke25hbWV9LmgiCiAKKyNpZmRlZiAke2kudWN9X1VTRV9DQUNIRQorc3RhdGljIHZvaWQgX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICptYWdpYyk7CitzdGF0aWMgaW50IF9jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKTsKKyNlbmRpZgorCiAvKiogSW5pdGlhbGl6ZXMgdGhlICRuYW1lIG1vZHVsZSAqLwogdm9pZAogaW5pdF8kbmFtZSh2b2lkKQpAQCAtNDcsOSArNTcsOSBAQAogICAgIGluaXRpYWxpemVfdGFibGVfJGkoKTsKICAgQGVuZEAKIH0KLQorIyMKIEBmb3JlYWNoICRpIHRhYmxlQAotICAjIERldGVybWluZSB0aGUgZmlyc3QvbGFzdCBjb2x1bW4gbmFtZXMKKyMjIERldGVybWluZSB0aGUgZmlyc3QvbGFzdCBjb2x1bW4gbmFtZXMKICAgQGV2YWwgJGZpcnN0X2NvbHVtbiA9ICItIkAKICAgQGV2YWwgJGxhc3RfY29sdW1uID0gIi0iQAogICBAZm9yZWFjaCAkYyBjb2x1bW5ACkBAIC02NSwxMiArNzUsMTggQEAKIHZvaWQKIGluaXRpYWxpemVfdGFibGVfJGkodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OwotICAgIHNpemVfdCAke2l9X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOwotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAgICAgICAgICAgICAgICpjb250YWluZXI7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07CisgICAgY29uc3Qgc2l6ZV90ICR7aX1fb2lkX2xlbiAgID0gT0lEX0xFTkdUSCgke2l9X29pZCk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnID0gTlVMTDsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICAgICAgICAgICAgICpoYW5kbGVyID0gTlVMTDsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAgICAgICAgICAgICAgICpjb250YWluZXIgPSBOVUxMOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOworI2lmZGVmICR7aS51Y31fVVNFX0NBQ0hFCisgICAgbmV0c25tcF9jYWNoZSAgKmNhY2hlID0gTlVMTDsKKyNlbmRpZgogCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aW5pdCIsICJpbml0aWFsaXppbmcgdGFibGUgJGlcbiIpKTsKKyAgICAKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKICAgICAgICAgICAgICAgIiRpIiwgICAgICR7aX1faGFuZGxlciwKICAgICAgICAgICAgICAgJHtpfV9vaWQsICR7aX1fb2lkX2xlbiwKQEAgLTgwLDkgKzk2LDI2IEBACiAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZCiBAZW5kQAogICAgICAgICAgICAgICApOworICAgIGlmIChOVUxMID09IHJlZykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgJGlcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorQGlmICRpLnNldHRhYmxlQAorICAgIC8qKiBzaG91bGQgYSBzZXQgb24gYSBub24tZXhpc3RlbnQgcm93IGNyZWF0ZSBhIG5ldyBvbmU/ICovCisgICAgLyoqIHJlZy0+bW9kZXMgfD0gSEFORExFUl9DQU5fTk9UX0NSRUFURTsgKi8KK0BlbmRACiAKLSAgICBjb250YWluZXIgID0gbmV0c25tcF9jb250YWluZXJfZmluZCggInRhYmxlX2NvbnRhaW5lciIgKTsKKyAgICBjb250YWluZXIgID0gbmV0c25tcF9jb250YWluZXJfZmluZCggIiRpOnRhYmxlX2NvbnRhaW5lciIgKTsKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGZvciAkaVxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyApOworICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgYWxsb2NhdGluZyB0YWJsZSByZWdpc3RyYXRpb24gZm9yICRpXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLAogICAgIEBmb3JlYWNoICRpZHggaW5kZXhACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWR4LnR5cGUsICAvKiBpbmRleDogJGlkeCAqLwpAQCAtOTEsMTMgKzEyNCw5MiBAQAogICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBDT0xVTU5fJGZpcnN0X2NvbHVtbi51YzsKICAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OXyRsYXN0X2NvbHVtbi51YzsKICAgICAKLSAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yZWdpc3RlciggcmVnLCB0YWJsZV9pbmZvLCBjb250YWluZXIsIDAgKTsKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0gbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGFibGVfaW5mbywgY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworICAgIGlmIChOVUxMID09IGhhbmRsZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgYWxsb2NhdGluZyB0YWJsZSByZWdpc3RyYXRpb24gZm9yICRpXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBoYW5kbGVyKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBpbmplY3RpbmcgY29udGFpbmVyX3RhYmxlIGhhbmRsZXIgZm9yICRpXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBoYW5kbGVyID0gTlVMTDsgLyogcmVnIGhhcyBpdCwgd2lsbCByZXVzZSBiZWxvdyAqLwogCi0gICAgLyogSW5pdGlhbGlzZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGhlcmUgKi8KKyNpZmRlZiAke2kudWN9X1VTRV9DQUNIRQorICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisgICAgY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgICAgLyogdGltZW91dCBpbiBzZWNvbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l9X29pZCwgJHtpfV9vaWRfbGVuKTsKKworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgJGlcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKyAgICBjYWNoZS0+bWFnaWMgPSBjb250YWluZXI7CisKKyAgICBoYW5kbGVyID0gbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChjYWNoZSk7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgaGFuZGxlciBmb3IgJGlcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNhY2hlIGhhbmRsZXIgZm9yICRpXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBoYW5kbGVyID0gTlVMTDsgLyogcmVnIGhhcyBpdCovCisjZW5kaWYKKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgdGhlIHRhYmxlCisgICAgICovCisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3IgJGlcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIC8qCisgICAgICogSW5pdGlhbGlzZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGhlcmUKKyAgICAgKi8KKworICAgIAorICAgIHJldHVybjsgLyogb2sgKi8KKworICAgIC8qCisgICAgICogU29tZSBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcmVnaXN0cmF0aW9uLiBDbGVhbiB1cCBhbmQgYmFpbC4KKyAgICAgKi8KKyAgYmFpbDogLyogbm90IG9rICovCisgICAgCisgICAgaWYgKGhhbmRsZXIpCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOworCisjaWZkZWYgJHtpLnVjfV9VU0VfQ0FDSEUKKyAgICBpZiAoY2FjaGUpCisgICAgICAgIG5ldHNubXBfY2FjaGVfZnJlZShjYWNoZSk7CisjZW5kaWYKKyAgICAKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCisgICAgaWYgKGNvbnRhaW5lcikKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKKworICAgIGlmIChyZWcpIAorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAotICAgIC8qIFR5cGljYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgcm93IGVudHJ5ICovCi1zdHJ1Y3QgJHtpfV9lbnRyeSB7CisvKiogVHlwaWNhbCBkYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkgKi8KK3R5cGVkZWYgc3RydWN0ICR7aX1fZW50cnlfcyB7CiAgICAgbmV0c25tcF9pbmRleCBvaWRfaW5kZXg7CiAKICAgICAvKiBJbmRleCB2YWx1ZXMgKi8KQEAgLTEzMywxMCArMjQ1LDEwIEBACiAgICAgQGVuZEAKIAogICAgIGludCAgIHZhbGlkOwotfTsKK30gJHtpfV9lbnRyeTsKIAotLyogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgKi8KLXN0cnVjdCAke2l9X2VudHJ5ICoKKy8qKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAqLworJHtpfV9lbnRyeSAqCiAke2l9X2NyZWF0ZUVudHJ5KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIAogICBAZm9yZWFjaCAkaWR4IGluZGV4QAogICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACkBAIC0xNDcsOSArMjU5LDkgQEAKICAgICBAZW5kQAogICBAZW5kQAogICAgICAgICAgICAgICAgICkgewotICAgIHN0cnVjdCAke2l9X2VudHJ5ICplbnRyeTsKKyAgICAke2l9X2VudHJ5ICplbnRyeTsKIAotICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihzdHJ1Y3QgJHtpfV9lbnRyeSk7CisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKCR7aX1fZW50cnkpOwogICAgIGlmICghZW50cnkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNjcsMTAgKzI3OSwxMCBAQAogICAgIHJldHVybiBlbnRyeTsKIH0KIAotLyogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlICovCisvKiogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlICovCiB2b2lkCiAke2l9X3JlbW92ZUVudHJ5KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIAotICAgICAgICAgICAgICAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAqZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgJHtpfV9lbnRyeSAqZW50cnkpIHsKIAogICAgIGlmICghZW50cnkpCiAgICAgICAgIHJldHVybjsgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KQEAgLTE3OSw2ICsyOTEsMTUgQEAKICAgICAgICAgU05NUF9GUkVFKCBlbnRyeSApOyAgIC8qIFhYWCAtIHJlbGVhc2UgYW55IG90aGVyIGludGVybmFsIHJlc291cmNlcyAqLwogfQogCisvKiogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlICovCit2b2lkCiske2l9X2ZyZWVFbnRyeSgke2l9X2VudHJ5ICplbnRyeSkgeworCisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuOyAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLworICAgIFNOTVBfRlJFRSggZW50cnkgKTsgICAvKiBYWFggLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KK30KKwogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSAkaSB0YWJsZSAqLwogaW50CiAke2l9X2hhbmRsZXIoCkBAIC0xODksMTAgKzMxMCwxMyBAQAogCiAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgKnJlcXVlc3Q7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhICAgICAgICAgKnRhYmxlX2RhdGE7CiAgICAgbmV0c25tcF9jb250YWluZXIgICAgICAgICAgKmNvbnRhaW5lcjsKLSAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAgICAgICAgICAqdGFibGVfZW50cnk7CisgICAgJHtpfV9lbnRyeSAgICAgICAgICAgICAgICAgKnRhYmxlX2VudHJ5OworQGlmICRpLnNldHRhYmxlQAogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CitAZW5kQAorCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aGFuZGxlciIsICJQcm9jZXNzaW5nIHJlcXVlc3QgKCVkKVxuIiwgcmVxaW5mby0+bW9kZSkpOwogCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAgICAgICAgIC8qCkBAIC0yMDAsOSArMzI0LDE4IEBACiAgICAgICAgICAqLwogICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7Ci0gICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoJHtpfV9lbnRyeSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOwogICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgewogICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQApAQCAtMjE1LDcgKzM0OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKil0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4pOwogICAgICAgICAgICAgQGVsc2VACiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKQEAgLTIzOCw5ICszNzEsMTggQEAKICAgICAgICAgICovCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKLSAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICgke2l9X2VudHJ5ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CiAgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACkBAIC0yNTEsNyArMzkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPyBSU19BQ1RJVkUgOiBSU19OT05FWElTVEVOVCApKTsKICAgICAgICAgICAgIEBlbHNlQAogICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACi0JICAgICAgICAvKiBvciBwb3NzaWJsYyAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplJyAqLworCSAgICAgICAgLyogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZScgKi8KICAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKICAgICAgICAgICAgIEBlbHNlQApAQCAtMjc3LDEwICs0MTksMTggQEAKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogQGlmICRpLmNyZWF0YWJsZUAKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lciAgID0gICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3QocmVxdWVzdCk7Ci0gICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoJHtpfV9lbnRyeSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOwogICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgewogQGlmICRpLnJvd3N0YXR1c0AKQEAgLTI5MCw2ICs0NDAsMTQgQEAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKCpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKICAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciAgID0gICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3QocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBjb250YWluZXIgZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gJHtpfV9jcmVhdGVFbnRyeShjb250YWluZXIKICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKICAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQApAQCAtMzE3LDYgKzQ3NSwxNCBAQAogICAgICAgICAgICAgQGVuZEAKICAgICAgICAgICAgIEBlbmRACiAgICAgICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciAgID0gICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3QocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBjb250YWluZXIgZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gJHtpfV9jcmVhdGVFbnRyeShjb250YWluZXIKICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKICAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQApAQCAtMzQ1LDEwICs1MTEsMjYgQEAKICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CiBAaWYgJGkuY3JlYXRhYmxlQAogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29udGFpbmVyICAgPSAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisgICAgICAgICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBjb250YWluZXIgZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoJHtpfV9lbnRyeSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOwogICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgewogQGlmICRpLnJvd3N0YXR1c0AKQEAgLTM4Miw5ICs1NjQsMTggQEAKIAogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewotICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKCR7aX1fZW50cnkgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKICAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKQEAgLTQxNyw5ICs2MDgsMTggQEAKIEBpZiAkaS5yb3dzdGF0dXNACiAgICAgICAgIC8qIENoZWNrIHRoZSBpbnRlcm5hbCBjb25zaXN0ZW5jeSBvZiBhbiBhY3RpdmUgcm93ICovCiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7Ci0gICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoJHtpfV9lbnRyeSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOwogICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgewogICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQApAQCAtNDQzLDEwICs2NDMsMjYgQEAKIAogICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnRhaW5lciAgID0gICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3QocmVxdWVzdCk7Ci0gICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorICAgICAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgY29udGFpbmVyIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKCR7aX1fZW50cnkgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKICAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKQEAgLTUxOCwxMCArNzM0LDE4IEBACiAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiBAaWYgJGkuY3JlYXRhYmxlQAogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewotICAgICAgICAgICAgY29udGFpbmVyICAgPSAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICgke2l9X2VudHJ5ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CiBAaWYgJGkucm93c3RhdHVzQApAQCAtNTQ0LDYgKzc2OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgUlNfREVTVFJPWToKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGNvbnRhaW5lciBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgJHtpfV9yZW1vdmVFbnRyeShjb250YWluZXIsIHRhYmxlX2VudHJ5ICk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgQGVuZEAKQEAgLTU2Niw0ICs3OTgsNjcgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisKKyNpZmRlZiAke2kudWN9X1VTRV9DQUNIRQorLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKyAgICAKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtpfTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBmb3IgJHtpfV9jYWNoZV9sb2FkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjb250YWluZXIgPSAobmV0c25tcF9jb250YWluZXIgKiljYWNoZS0+bWFnaWM7CisKKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICAvKgorICAgICAqIGxvYWQgY2FjaGUgaGVyZSAob3IgY2FsbCBmdW5jdGlvbiB0byBkbyBpdCkKKyAgICAgKi8KKyAgICAvKiogQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJlY29yZCk7ICovCisKKyAgICByZXR1cm4gMDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2xvYWQgKi8KKworLyoqCisgKiBASW50ZXJuYWwKKyAqLworLyoqIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAqLworc3RhdGljIHZvaWQKKyR7aX1fZnJlZUVudHJ5X2NiKCR7aX1fZW50cnkgKmVudHJ5LCB2b2lkICptYWdpYykgeworCisgICAgJHtpfV9mcmVlRW50cnkoZW50cnkpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICptYWdpYykKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7aX06X2NhY2hlX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgaW4gJHtpfV9jYWNoZV9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb250YWluZXIgPSAobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljOworCisgICAgLyoKKyAgICAgKiBlbXB0eSAoYnV0IGRvbid0IGZyZWUpIGNhY2hlIGhlcmUKKyAgICAgKi8KKyAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKSR7aX1fZnJlZUVudHJ5X2NiLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KKyNlbmRpZiAvKiAke2kudWN9X1VTRV9DQUNIRSAqLwogQGVuZEAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYgYi9sb2NhbC9taWIyYy5jcmVhdGUtZGF0YXNldC5jb25mCmluZGV4IDExZmQ1ZDIuLjljZjc1ZmQgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYKKysrIGIvbG9jYWwvbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZgpAQCAtNDMsOCArNDMsNyBAQAogdm9pZAogaW5pdGlhbGl6ZV90YWJsZV8kaSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07Ci0gICAgc2l6ZV90ICR7aX1fb2lkX2xlbiA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQ7CiAKICAgICAvKiBjcmVhdGUgdGhlIHRhYmxlIHN0cnVjdHVyZSBpdHNlbGYgKi8KQEAgLTc4LDcgKzc3LDcgQEAKICAgICAgICBvZiB0aGUgcmVxdWVzdCwgY2hhbmdlICR7aX1faGFuZGxlciB0byAiTlVMTCIgKi8KICAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGFfc2V0KG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCIkaSIsICR7aX1faGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCgke2l9X29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfc2V0LCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLmludF93YXRjaC5jb25mIGIvbG9jYWwvbWliMmMuaW50X3dhdGNoLmNvbmYKaW5kZXggNzc4N2EyZi4uZWNjNWQxMCAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuaW50X3dhdGNoLmNvbmYKKysrIGIvbG9jYWwvbWliMmMuaW50X3dhdGNoLmNvbmYKQEAgLTUwLDEyICs1MCwxMiBAQAogaW5pdF8ke25hbWV9KHZvaWQpCiB7CiAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZzsKLSAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2luZm87CiAKICAgQGZvcmVhY2ggJGkgc2NhbGFyQAogICAgIEBpZiAhJGkubmVlZGxlbmd0aEAKLSAgICBzdGF0aWMgb2lkICR7aX1fb2lkW10gPSB7ICRpLmNvbW1hb2lkIH07CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7ICRpLmNvbW1hb2lkIH07CiAgICAgQGVuZEAKKyAgc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvICR7aX1fd2luZm87CiAgIEBlbmRACiAKICAgLyoKQEAgLTkyLDEwICs5Miw5IEBACiAgICAgQGVsc2VACiAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKICAgICBAZW5kQAotICAgIHdpbmZvID0gbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAotICAgICAgICAgICAgICAgICYkaSwgc2l6ZW9mKCRpLmRlY2wpLAotICAgICAgICAgICAgICAgICAkaS50eXBlLCBXQVRDSEVSX0ZJWEVEX1NJWkUpOwotICAgIGlmIChuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKCByZWcsIHdpbmZvICkgPCAwICkgeworICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oJiR7aX1fd2luZm8sICYkaSwgc2l6ZW9mKCRpLmRlY2wpLAorCQkJICAgICAgJGkudHlwZSwgV0FUQ0hFUl9GSVhFRF9TSVpFKTsKK2lmIChuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKCByZWcsICYke2l9X3dpbmZvICkgPCAwICkgewogICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgIkZhaWxlZCB0byByZWdpc3RlciB3YXRjaGVkICRpIiApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mIGIvbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mCmluZGV4IDNhNTVkMjMuLjNhMmI1ZjcgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLml0ZXJhdGUuY29uZgorKysgYi9sb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYKQEAgLTEsNCArMSwzOCBAQAogIyMgLSotIGMgLSotCisjCitAaWYgIiRjYWNoZSIgZXEgIiIgQAorQG9wZW4gLUAKK1RoaXMgZnJhbWV3b3JrIGNhbiB3b3JrIGluIG9uZSBvZiB0d28gd2F5czoKKworICAxKSAgSG9sZCBhIGxvY2FsIGNhY2hlZCBjb3B5IG9mIHNvbWUgZXh0ZXJuYWwgZGF0YQorICAgICAgd2hpY2ggaXMgdGhlbiB1c2VkIHRvIHNlcnZpY2UgaW5jb21pbmcgcmVxdWVzdHMuCisKKyAgMikgIFF1ZXJ5IHRoZSBleHRlcm5hbCBkYXRhIGRpcmVjdGx5IGZvciBlYWNoIHJlcXVlc3QuCisKK1RoZSBmaXJzdCBpcyB0eXBpY2FsbHkgbW9yZSBlZmZpY2llbnQsIGJ1dCByZXN1bHRzIGluCitzbGlnaHRseSAic3RhbGUiIGRhdGEgKGRlcGVuZGluZyBvbiB0aGUgZXhwaXJhdGlvbiB0aW1lb3V0Citmb3IgdGhlIGNhY2hlKSBhbmQgZ3JlYXRlciBtZW1vcnkgdXNhZ2UuICBUaGUgc2Vjb25kIGNhbgorcHJvdmlkZSBtb3JlIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24sIGJ1dCBhdCB0aGUgY29zdCBvZgoraGlnaGVyIHByb2Nlc3Npbmcgb3ZlcmhlYWRzLgorCitXaGljaCBpcyBtb3JlIGFwcHJvcHJpYXRlIGZvciB5b3VyIG5lZWRzPworICAgIEBwcm9tcHQgJGFucyBTZWxlY3QgeW91ciBjaG9pY2UgOiBACisgICAgQGlmICRhbnMgPT0gMSBACisgICAgICBAZXZhbCAkY2FjaGUgPSAxQAorICAgIEBlbHNpZiAkYW5zID09IDJACisgICAgICBAZXZhbCAkY2FjaGUgPSAwQAorICAgIEBlbHNlQAorSW52YWxpZCBhbnN3ZXIgLSBnZW5lcmF0aW5nIGNhY2hpbmcgY29kZQorICAgICAgQGV2YWwgJGNhY2hlID0gMUAKKyAgICBAZW5kQAorQGVsc2VAICAgICAgICMgIC1TIGNhY2hlPXtzb21ldGhpbmd9CisgICAgQGlmICIkY2FjaGUiIG5lICIxIiAmJiAiJGNhY2hlIiBuZSAiMCIgQAorQG9wZW4gLUAKK0ludmFsaWQgdmFsdWUgZm9yICdjYWNoZScgKCRjYWNoZSkgLSBnZW5lcmF0aW5nIGNhY2hpbmcgY29kZQorICAgICAgQGV2YWwgJGNhY2hlID0gMUAKKyAgICBAZW5kQAorQGVuZEAKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgRG8gdGhlIC5oIGZpbGUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE3LDcgKzUxLDcgQEAKIE5ldHNubXBfTm9kZV9IYW5kbGVyICR7aX1faGFuZGxlcjsKIE5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludCAgJHtpfV9nZXRfZmlyc3RfZGF0YV9wb2ludDsKIE5ldHNubXBfTmV4dF9EYXRhX1BvaW50ICAgJHtpfV9nZXRfbmV4dF9kYXRhX3BvaW50OwotQGlmICIkY2FjaGUiIG5lICIiIEAKK0BpZiAiJGNhY2hlIiA9PSAxIEAKIE5ldHNubXBDYWNoZUxvYWQgJHtpfV9sb2FkOwogTmV0c25tcENhY2hlRnJlZSAke2l9X2ZyZWU7CiAjZGVmaW5lICRpLnVjX1RJTUVPVVQgIDYwCkBAIC03MiwxMiArMTA2LDE0IEBACiB2b2lkCiBpbml0aWFsaXplX3RhYmxlXyRpKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKLSAgICBzaXplX3QgJHtpfV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07CisgICAgY29uc3Qgc2l6ZV90ICR7aX1fb2lkX2xlbiAgID0gT0lEX0xFTkdUSCgke2l9X29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwogICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAgICAgICAgICAgKmlpbmZvOwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTppbml0IiwgImluaXRpYWxpemluZyB0YWJsZSAkaVxuIikpOworCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICIkaSIsICAgICAke2l9X2hhbmRsZXIsCiAgICAgICAgICAgICAgICR7aX1fb2lkLCAke2l9X29pZF9sZW4sCkBAIC0xMDMsNyArMTM5LDcgQEAKICAgICBpaW5mby0+dGFibGVfcmVnaW5mbyAgICAgICAgPSB0YWJsZV9pbmZvOwogICAgIAogICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IoIHJlZywgaWluZm8gKTsKLUBpZiAiJGNhY2hlIiBuZSAiIiBACitAaWYgIiRjYWNoZSIgPT0gMSBACiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUoIHJlZywgCiAgICAgICAgIG5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIoJGkudWNfVElNRU9VVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l9X2xvYWQsICR7aX1fZnJlZSwKQEAgLTIxMSw3ICsyNDcsNyBAQAogICAgIFNOTVBfRlJFRSggZW50cnkgKTsgICAvKiBYWFggLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KIH0KIAotQGlmICIkY2FjaGUiIG5lICIiIEAKK0BpZiAiJGNhY2hlIiA9PSAxIEAKIC8qIEV4YW1wbGUgY2FjaGUgaGFuZGxpbmcgLSBzZXQgdXAgbGlua2VkIGxpc3QgZnJvbSBhIHN1aXRhYmxlIGZpbGUgKi8KIGludAogJHtpfV9sb2FkKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljICkgewpAQCAtMzA3LDYgKzM0Myw4IEBACiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CiAgICAgc3RydWN0ICR7aX1fZW50cnkgICAgICAgICAgKnRhYmxlX2VudHJ5OwogCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aGFuZGxlciIsICJQcm9jZXNzaW5nIHJlcXVlc3QgKCVkKVxuIiwgcmVxaW5mby0+bW9kZSkpOworCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKQEAgLTMyOCw3ICszNjYsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciopdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuKTsKICAgICAgICAgICAgIEBlbHNlQAogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCkBAIC0zNjQsNyArNDAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPyBSU19BQ1RJVkUgOiBSU19OT05FWElTVEVOVCApKTsKICAgICAgICAgICAgIEBlbHNlQAogICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACi0JICAgICAgICAvKiBvciBwb3NzaWJsYyAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplJyAqLworCSAgICAgICAgLyogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZScgKi8KICAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKICAgICAgICAgICAgIEBlbHNlQApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiBiL2xvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYKaW5kZXggZGM3ZWFlMy4uYTM4YWMyMCAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZgorKysgYi9sb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mCkBAIC03NywxMSArNzcsMTMgQEAKIHZvaWQKIGluaXRpYWxpemVfdGFibGVfJGkodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15X2hhbmRsZXI7CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbzsKIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmluaXQiLCAiaW5pdGlhbGl6aW5nIHRhYmxlICRpXG4iKSk7CisKICAgICAvKiogY3JlYXRlIHRoZSB0YWJsZSByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gc3RydWN0dXJlcyAqLwogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIGlpbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2l0ZXJhdG9yX2luZm8pOwpAQCAtMTEyLDcgKzExNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogCiAgICAgLyoqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICAgIG9wdGltaXplcyByZXRyaXZhbC4gKi8KKyAgICAgICAgb3B0aW1pemVzIHJldHJpZXZhbC4gKi8KICAgICBAZXZhbCAkbWludiA9IDB4ZmZmZmZmZmZACiAgICAgQGV2YWwgJG1heHYgPSAwQAogICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKQEAgLTE3NywxNCArMTc5LDE0IEBACiAKICAgICB2b2lkICpkYXRhX2NvbnRleHQgPSBOVUxMOwogCi0gICAgb2lkICpzdWZmaXg7Ci0gICAgc2l6ZV90IHN1ZmZpeF9sZW47Ci0KICAgICAvKiogY29sdW1uIGFuZCByb3cgaW5kZXggZW5jb2RlZCBwb3J0aW9uICovCi0gICAgc3VmZml4ID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMTsKLSAgICBzdWZmaXhfbGVuID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggLQorICAgIGNvbnN0IG9pZCAqIGNvbnN0IHN1ZmZpeCA9CisgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDE7CisgICAgY29uc3Qgc2l6ZV90IHN1ZmZpeF9sZW4gPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCAtCiAgICAgICAgIChyZWdpbmZvLT5yb290b2lkX2xlbiArIDEpOwogICAgIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmhhbmRsZXIiLCAiUHJvY2Vzc2luZyByZXF1ZXN0ICglZClcbiIsIHJlcWluZm8tPm1vZGUpKTsKKwogICAgIGZvcihyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgIHZhciA9IHJlcXVlc3QtPnJlcXVlc3R2YjsKICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCAhPSAwKQpAQCAtMjQyLDggKzI0NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGdldF8kYyhkYXRhX2NvbnRleHQsICZyZXR2YWxfbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSh2YXIsICRjLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyICopIHJldHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbF9sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWxfbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMubm90aWZ5LmNvbmYgYi9sb2NhbC9taWIyYy5ub3RpZnkuY29uZgppbmRleCBkMjExNjE5Li43N2YzMzMwIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5ub3RpZnkuY29uZgorKysgYi9sb2NhbC9taWIyYy5ub3RpZnkuY29uZgpAQCAtMzAsMjAgKzMwLDIxIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICIke25hbWV9LmgiCiAKLXN0YXRpYyBvaWQgc25tcHRyYXBfb2lkW10gPSB7MSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNCwgMSwgMH07CitleHRlcm4gY29uc3Qgb2lkIHNubXB0cmFwX29pZFtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBzbm1wdHJhcF9vaWRfbGVuOwogCiBAZm9yZWFjaCAkaSBub3RpZmljYXRpb25zQAogaW50CiBzZW5kXyR7aX1fdHJhcCggdm9pZCApCiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICAqdmFyX2xpc3QgPSBOVUxMOwotICAgIG9pZCAke2l9X29pZFtdID0geyAkaS5jb21tYW9pZCB9OworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyAkaS5jb21tYW9pZCB9OwogICAgIEBmb3JlYWNoICR2IHZhcmJpbmRzQAogICAgIEBpZiAkdi5pc3NjYWxhckAKLSAgICBvaWQgJHt2fV9vaWRbXSA9IHsgJHYuY29tbWFvaWQsIDAgfTsKKyAgICBjb25zdCBvaWQgJHt2fV9vaWRbXSA9IHsgJHYuY29tbWFvaWQsIDAgfTsKICAgICBAZW5kQAogICAgIEBpZiAhJHYuaXNzY2FsYXJACi0gICAgb2lkICR7dn1fb2lkW10gPSB7ICR2LmNvbW1hb2lkLCAvKiBpbnNlcnQgaW5kZXggaGVyZSAqLyB9OworICAgIGNvbnN0IG9pZCAke3Z9X29pZFtdID0geyAkdi5jb21tYW9pZCwgLyogaW5zZXJ0IGluZGV4IGhlcmUgKi8gfTsKICAgICBAZW5kQAogICAgIEBlbmRACiAKQEAgLTUxLDcgKzUyLDcgQEAKICAgICAgKiBTZXQgdGhlIHNubXBUcmFwT2lkLjAgdmFsdWUKICAgICAgKi8KICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJfbGlzdCwKLSAgICAgICAgc25tcHRyYXBfb2lkLCBPSURfTEVOR1RIKHNubXB0cmFwX29pZCksCisgICAgICAgIHNubXB0cmFwX29pZCwgc25tcHRyYXBfb2lkX2xlbiwKICAgICAgICAgQVNOX09CSkVDVF9JRCwKICAgICAgICAgJHtpfV9vaWQsIHNpemVvZigke2l9X29pZCkpOwogICAgIApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMub2xkLWFwaS5jb25mIGIvbG9jYWwvbWliMmMub2xkLWFwaS5jb25mCmluZGV4IDhkYWY4ZjEuLjhmYTI3MGIgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLm9sZC1hcGkuY29uZgorKysgYi9sb2NhbC9taWIyYy5vbGQtYXBpLmNvbmYKQEAgLTY5LDEwICs2OSwxMiBAQAogICAgIEBldmFsICRzdWZmaXhsZW4gPSAkaS5vaWRsZW5ndGggLSAkbmFtZS5vaWRsZW5ndGhACiAjZGVmaW5lICRpLnVjCQkkbWFnaWMKICAgICBAaWYgJGkuc2V0dGFibGVACi17JGkudWMsICAkaS50eXBlLCAgUldSSVRFLCAgdmFyXyR7bmFtZX0sICRzdWZmaXhsZW4sICB7ICRzdWZmaXggfX0sCit7JGkudWMsICAkaS50eXBlLCAgTkVUU05NUF9PTERBUElfUldSSVRFLAorIHZhcl8ke25hbWV9LCAkc3VmZml4bGVuLCAgeyAkc3VmZml4IH19LAogICAgIEBlbmRACiAgICAgQGlmICEkaS5zZXR0YWJsZUAKLXskaS51YywgICRpLnR5cGUsICBST05MWSAsICB2YXJfJHtuYW1lfSwgJHN1ZmZpeGxlbiwgIHsgJHN1ZmZpeCB9fSwKK3skaS51YywgICRpLnR5cGUsICBORVRTTk1QX09MREFQSV9ST05MWSwKKyB2YXJfJHtuYW1lfSwgJHN1ZmZpeGxlbiwgIHsgJHN1ZmZpeCB9fSwKICAgICBAZW5kQAogQGVuZEAKIApAQCAtOTEsMTAgKzkzLDEyIEBACiAgICAgQGV2YWwgJG1hZ2ljID0gJG1hZ2ljICsgMUAKICNkZWZpbmUgJGMudWMJCSRtYWdpYwogICAgIEBpZiAkYy5zZXR0YWJsZUAKLXskYy51YywgICRjLnR5cGUsICBSV1JJVEUsICB2YXJfJHtpfSwgJHN1ZmZpeGxlbiwgIHsgJHN1ZmZpeCAkY3RtcCAxLCAkYy5zdWJpZCB9fSwKK3skYy51YywgICRjLnR5cGUsICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgdmFyXyR7aX0sICRzdWZmaXhsZW4sICB7ICRzdWZmaXggJGN0bXAgMSwgJGMuc3ViaWQgfX0sCiAgICAgQGVuZEAKICAgICBAaWYgISRjLnNldHRhYmxlQAoteyRjLnVjLCAgJGMudHlwZSwgIFJPTkxZLCAgIHZhcl8ke2l9LCAkc3VmZml4bGVuLCAgeyAkc3VmZml4ICRjdG1wIDEsICRjLnN1YmlkIH19LAoreyRjLnVjLCAgJGMudHlwZSwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorIHZhcl8ke2l9LCAkc3VmZml4bGVuLCAgeyAkc3VmZml4ICRjdG1wIDEsICRjLnN1YmlkIH19LAogICAgIEBlbmRACiAgQGVuZEAKIEBlbmRACmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5yYXctdGFibGUuY29uZiBiL2xvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODhmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taWIyYy5yYXctdGFibGUuY29uZgpAQCAtMCwwICsxLDYxMiBAQAorIyMgLSotIGMgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBEbyB0aGUgLmggZmlsZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQG9wZW4gJHtuYW1lfS5oQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgJElkOiBtaWIyYy5yYXctdGFibGUuY29uZiAxNzQzNiAyMDA5LTAzLTMxIDE1OjEyOjE5WiBkdHMxMiAkCisgKi8KKyNpZm5kZWYgJG5hbWUudWNfSAorI2RlZmluZSAkbmFtZS51Y19ICisKK3ZvaWQgaW5pdF8kbmFtZSh2b2lkKTsKKworI2VuZGlmIC8qICRuYW1lLnVjX0ggKi8KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIERvIHRoZSAuYyBmaWxlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitAb3BlbiAke25hbWV9LmNACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAkSWQ6IG1pYjJjLnJhdy10YWJsZS5jb25mIDE3NDM2IDIwMDktMDMtMzEgMTU6MTI6MTlaIGR0czEyICQKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgIiR7bmFtZX0uaCIKKworQGZvcmVhY2ggJGkgdGFibGVACisgICMjIERldGVybWluZSB0aGUgZmlyc3QvbGFzdCBjb2x1bW4gbmFtZXMKKyAgQGV2YWwgJGZpcnN0X2NvbHVtbiA9ICItIkAKKyAgQGV2YWwgJGxhc3RfY29sdW1uID0gIi0iQAorICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgQGlmICRjLnJlYWRhYmxlQAorICAgICAgQGlmICIkZmlyc3RfY29sdW1uIiBlcSAiLSJACisgICAgICAgIEBldmFsICRmaXJzdF9jb2x1bW4gPSAkY0AKKyAgICAgIEBlbmRACisgICAgICBAZXZhbCAkbGFzdF9jb2x1bW4gPSAkY0AKKyAgICBAZW5kQAorICBAZW5kQAorCisvKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSAkaSAqLworICBAZm9yZWFjaCAkYyBjb2x1bW5ACisjZGVmaW5lIENPTFVNTl8kYy51YwkJJGMuc3ViaWQKKyAgQGVuZEAKKworICAgIC8qIFR5cGljYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgcm93IGVudHJ5ICovCitzdHJ1Y3QgJHtpfV9lbnRyeSB7CisgICAgLyogSW5kZXggdmFsdWVzICovCisgICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKKyAgICAgQGlmICRpZHgubmVlZGxlbmd0aEAKKyAgICAkaWR4LmRlY2wgJGlkeFtOTk5dOworICAgIHNpemVfdCAke2lkeH1fbGVuOworICAgICBAZWxzZUAKKyAgICAkaWR4LmRlY2wgJGlkeDsKKyAgICAgQGVuZEAKKyAgICBAZW5kQAorCisgICAgLyogQ29sdW1uIHZhbHVlcyAqLworICAgIEBmb3JlYWNoICRjIG5vbmluZGV4QAorICAgIEBpZiAkYy5yZWFkYWJsZUAKKyAgICAgQGlmICRjLm5lZWRsZW5ndGhACisgICAgJGMuZGVjbCAkY1tOTk5dOworICAgIHNpemVfdCAke2N9X2xlbjsKKyAgICAgQGVsc2VACisgICAgJGMuZGVjbCAkYzsKKyAgICAgQGVuZEAKKyAgICAgQGlmICRjLnNldHRhYmxlQAorICAgICAgQGlmICEkYy5yb3dzdGF0dXNACisgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACisgICAgJGMuZGVjbCBvbGRfJGNbTk5OXTsKKyAgICBzaXplX3Qgb2xkXyR7Y31fbGVuOworICAgICAgIEBlbHNlQAorICAgICRjLmRlY2wgb2xkXyRjOworICAgICAgIEBlbmRACisgICAgICBAZW5kQAorICAgICBAZW5kQAorICAgIEBlbmRACisgICAgQGVuZEAKKworICAgIGludCAgIHZhbGlkOworfTsKKworLyogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3QgJHtpfV9lbnRyeSAqCiske2l9X2NyZWF0ZUVudHJ5KCBpbnQgZHVtbXkKKyAgQGZvcmVhY2ggJGlkeCBpbmRleEAKKyAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgICAsICRpZHguZGVjbCogJGlkeAorICAgICAgICAgICAgICAgICAsIHNpemVfdCAke2lkeH1fbGVuCisgICAgQGVsc2VACisgICAgICAgICAgICAgICAgICwgJGlkeC5kZWNsICAkaWR4CisgICAgQGVuZEAKKyAgQGVuZEAKKyAgICAgICAgICAgICAgICApIHsKKyAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAqZW50cnk7CisKKyAgICBlbnRyeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3RydWN0ICR7aX1fZW50cnkpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogWFhYIC0gaW5zZXJ0IGVudHJ5IGludG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgKi8KKyAgICByZXR1cm4gZW50cnk7Cit9CisKKy8qIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAqLworc3RhdGljIHZvaWQKKyR7aX1fcmVtb3ZlRW50cnkoc3RydWN0ICR7aX1fZW50cnkgKmVudHJ5KSB7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuOyAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLworCisgICAgLyogWFhYIC0gcmVtb3ZlIGVudHJ5IGZyb20gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgKi8KKworICAgIGlmIChlbnRyeSkKKyAgICAgICAgU05NUF9GUkVFKCBlbnRyeSApOyAgIC8qIFhYWCAtIHJlbGVhc2UgYW55IG90aGVyIGludGVybmFsIHJlc291cmNlcyAqLworfQorCisKKy8qKiBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHJvdyBmb3IgYW4gZXhhY3QgcmVxdWVzdCAqLworc3RhdGljIHN0cnVjdCAke2l9X2VudHJ5ICoKKyR7aX1fZ2V0X2VudHJ5KCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmluZGV4ZXMgKSB7CisgICAgc3RydWN0ICR7aX1fZW50cnkgKnJvdyA9IE5VTEw7CisKKyAgICAvKiBYWFggLSBVc2UgdGhlICdpbmRleGVzJyBwYXJhbWV0ZXIgdG8gcmV0cmlldmUgdGhlIGRhdGEKKyAgICAgICBzdHJ1Y3R1cmUgZm9yIHRoZSByZXF1ZXN0ZWQgcm93LCBhbmQgcmV0dXJuIHRoaXMuICovCisgICAgcmV0dXJuIHJvdzsKK30KKworLyoqIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgcm93IGZvciBhbiBmdXp6eSByZXF1ZXN0ICovCitzdGF0aWMgc3RydWN0ICR7aX1fZW50cnkgKgorJHtpfV9nZXRfbmV4dF9lbnRyeSggbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICAgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgICAgICAgICppbmRleGVzICkgeworICAgIHN0cnVjdCAke2l9X2VudHJ5ICpyb3cgPSBOVUxMOworICAgIG9pZCAgICAgICAgICAgICBidWlsZF9zcGFjZVtNQVhfT0lEX0xFTl07CisgICAgc2l6ZV90ICAgICAgICAgIGJ1aWxkX3NwYWNlX2xlbiA9IDA7CisgICAgc2l6ZV90ICAgICAgICAgIGluZGV4X29pZF9sZW4gPSAwOworCisgICAgLyogWFhYIC0gVXNlIHRoZSAnaW5kZXhlcycgcGFyYW1ldGVyIHRvIGlkZW50aWZ5IHRoZQorICAgICAgICAgICAgIG5leHQgcm93IGluIHRoZSB0YWJsZS4uLi4gKi8KKworICAgIC8qIFhYWCAgIC4uLi4gdXBkYXRlIHRoZSAnaW5kZXhlcycgcGFyYW1ldGVyIHdpdGggdGhlCisgICAgICAgICAgICAgYXBwcm9wcmlhdGUgaW5kZXggdmFsdWVzIC4uLiAqLworCisgICAgLyogLi4uIGFuZCB1cGRhdGUgdGhlIHJlcXVlc3RlZCBPSUQgdG8gbWF0Y2ggdGhpcyBpbnN0YW5jZSAqLworICAgIG1lbWNweShidWlsZF9zcGFjZSwgcmVnaW5mby0+cm9vdG9pZCwgICAvKiByZWdpc3RlcmVkIG9pZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgYnVpbGRfc3BhY2VfbGVuID0gcmVnaW5mby0+cm9vdG9pZF9sZW47CisgICAgYnVpbGRfc3BhY2VbYnVpbGRfc3BhY2VfbGVuKytdID0gMTsgIC8qIGVudHJ5ICovCisgICAgYnVpbGRfc3BhY2VbYnVpbGRfc3BhY2VfbGVuKytdID0gY29sdW1uOyAvKiBjb2x1bW4gKi8KKyAgICBidWlsZF9vaWRfbm9hbGxvYyhidWlsZF9zcGFjZSArIGJ1aWxkX3NwYWNlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBNQVhfT0lEX0xFTiAtIGJ1aWxkX3NwYWNlX2xlbiwgJmluZGV4X29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgaW5kZXhlcyk7CisgICAgc25tcF9zZXRfdmFyX29iamlkKHJlcXVlc3QtPnJlcXVlc3R2YiwgYnVpbGRfc3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3NwYWNlX2xlbiArIGluZGV4X29pZF9sZW4pOworCisgICAgLyogIEZpbmFsbHksIHJldHVybiB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoaXMgcm93ICovCisgICAgcmV0dXJuIHJvdzsKK30KKworCisvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlICRpIHRhYmxlICovCitzdGF0aWMgaW50Ciske2l9X2hhbmRsZXIoCisgICAgbmV0c25tcF9taWJfaGFuZGxlciAgICAgICAgICAgICAgICpoYW5kbGVyLAorICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgICAqcmVnaW5mbywKKyAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICAgICAgKnJlcWluZm8sCisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAgICAgICpyZXF1ZXN0cykgeworCisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgKnJlcXVlc3Q7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisgICAgc3RydWN0ICR7aX1fZW50cnkgICAgICAgICAgKnRhYmxlX2VudHJ5OworICAgIEBpZiAkaS5zZXR0YWJsZUAKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OworICAgIEBlbmRACisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVhZC1zdXBwb3J0CisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9lbnRyeSggdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5yZWFkYWJsZUAKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5ICkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuKTsKKyAgICAgICAgICAgIEBlbHNlQAorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYyk7CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNUKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9HRVRORVhUOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfbmV4dF9lbnRyeSggcmVnaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+Y29sbnVtLCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnJlYWRhYmxlQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSElOU1RBTkNFKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4pOworICAgICAgICAgICAgQGVsc2VACisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjKTsKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCitAaWYgJGkuc2V0dGFibGVACisgICAgICAgIC8qCisgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X2VudHJ5KCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnNldHRhYmxlQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICBAaWYgJGMucm93c3RhdHVzQAorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPyBSU19BQ1RJVkUgOiBSU19OT05FWElTVEVOVCApKTsKKyAgICAgICAgICAgIEBlbHNlQAorICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACisJICAgICAgICAvKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplJyAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUoCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgQGVsc2VACisgICAgICAgICAgICAgICAgLyogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlJyAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KCByZXF1ZXN0LT5yZXF1ZXN0dmIgKTsKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgICAgIGlmICggcmV0ICE9IFNOTVBfRVJSX05PRVJST1IgKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoIHJlcWluZm8sIHJlcXVlc3QsIHJldCApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT1RXUklUQUJMRSApOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKK0BpZiAkaS5jcmVhdGFibGVACisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfZW50cnkoIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CitAaWYgJGkucm93c3RhdHVzQAorICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnJvd3N0YXR1c0AKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgorICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSAke2l9X2NyZWF0ZUVudHJ5KCAwCisgIEBmb3JlYWNoICRpZHggaW5kZXhACisgICAgQGlmICRpZHgubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICAgICAgICAgICwgIHRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC5zdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICwgIHRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbF9sZW4KKyAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICAgICAgICAgICwgKnRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC5pbnRlZ2VyCisgICAgQGVuZEAKKyAgQGVuZEAKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACitAZWxzZUAKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5jcmVhdGFibGVACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5ICkgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICR7aX1fY3JlYXRlRW50cnkoIDAKKyAgQGZvcmVhY2ggJGlkeCBpbmRleEAKKyAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgICAgICAgICAgLCAgdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsLnN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgLCAgdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsX2xlbgorICAgIEBlbHNlQAorICAgICAgICAgICAgICAgICAgICAgICAgLCAqdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsLmludGVnZXIKKyAgICBAZW5kQAorICBAZW5kQAorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRSApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CitAZW5kQAorICAgICAgICAgICAgfQorICAgICAgICB9CitAZW5kQAorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKK0BpZiAkaS5jcmVhdGFibGVACisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9lbnRyeSggdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKK0BpZiAkaS5yb3dzdGF0dXNACisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMucm93c3RhdHVzQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgeworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgorICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9yZW1vdmVFbnRyeSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKK0BlbHNlQAorICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLmNyZWF0YWJsZUAKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICAgICAgaWYgKCB0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkICkgeworICAgICAgICAgICAgICAgICAgICAke2l9X3JlbW92ZUVudHJ5KHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CitAZW5kQAorICAgICAgICAgICAgfQorICAgICAgICB9CitAZW5kQAorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfZW50cnkoIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMuc2V0dGFibGVACisgICAgICAgICAgICBAaWYgISRjLnJvd3N0YXR1c0AKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgIG1lbWNweSggdGFibGVfZW50cnktPm9sZF8kYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyR7Y31fbGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbjsKKyAgICAgICAgICAgICAgICBtZW1zZXQoIHRhYmxlX2VudHJ5LT4kYywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbik7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbjsKKyAgICAgICAgICAgICAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyRjID0gdGFibGVfZW50cnktPiRjOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYyAgICAgPSAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgfQorICAgICAgICB9CitAaWYgJGkucm93c3RhdHVzQAorICAgICAgICAvKiBDaGVjayB0aGUgaW50ZXJuYWwgY29uc2lzdGVuY3kgb2YgYW4gYWN0aXZlIHJvdyAqLworICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfZW50cnkoIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMucm93c3RhdHVzQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgeworICAgICAgICAgICAgICAgIGNhc2UgUlNfQUNUSVZFOgorICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CisgICAgICAgICAgICAgICAgICAgIGlmICgvKiBYWFggKi8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoIHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRSApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorQGVuZEAKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9lbnRyeSggdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5zZXR0YWJsZUAKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorQGlmICRpLnJvd3N0YXR1c0AKKyAgQGlmICRjLnJvd3N0YXR1c0AKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CisgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAke2l9X3JlbW92ZUVudHJ5KHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgQGVsc2VACisgICAgICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgbWVtY3B5KCB0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyRjLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgICAgIG1lbXNldCggdGFibGVfZW50cnktPm9sZF8kYywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8ke2N9X2xlbjsKKyAgICAgICAgICAgICAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMgICAgID0gdGFibGVfZW50cnktPm9sZF8kYzsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyRjID0gMDsKKyAgICAgICAgICAgICAgICBAZW5kQAorICBAZW5kQAorQGVsc2VACisgIEBpZiAkYy5jcmVhdGFibGVACisgICAgICAgICAgICAgICAgaWYgKCB0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkICkgeworICAgICAgICAgICAgICAgICAgICAke2l9X3JlbW92ZUVudHJ5KHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCB0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8kYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCggdGFibGVfZW50cnktPm9sZF8kYywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8ke2N9X2xlbjsKKyAgICAgICAgICAgICAgICAgICAgQGVsc2VACisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYyAgICAgPSB0YWJsZV9lbnRyeS0+b2xkXyRjOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyRjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgICAgICB9CisgIEBlbHNlQAorICAgICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgIG1lbWNweSggdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8kYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoIHRhYmxlX2VudHJ5LT5vbGRfJGMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJHtjfV9sZW47CisgICAgICAgICAgICAgICAgQGVsc2VACisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjICAgICA9IHRhYmxlX2VudHJ5LT5vbGRfJGM7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8kYyA9IDA7CisgICAgICAgICAgICAgICAgQGVuZEAKKyAgQGVuZEAKK0BlbmRACisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorQGlmICRpLmNyZWF0YWJsZUAKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCAgICByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X2VudHJ5KCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworQGlmICRpLnJvd3N0YXR1c0AKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5yb3dzdGF0dXNACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnZhbGlkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgLyogRmFsbC10aHJvdWdoICovCisgICAgICAgICAgICAgICAgY2FzZSBSU19BQ1RJVkU6CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYyA9IFJTX0FDVElWRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT52YWxpZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIC8qIEZhbGwtdGhyb3VnaCAqLworICAgICAgICAgICAgICAgIGNhc2UgUlNfTk9USU5TRVJWSUNFOgorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMgPSBSU19OT1RJTlNFUlZJQ0U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBSU19ERVNUUk9ZOgorICAgICAgICAgICAgICAgICAgICAke2l9X3JlbW92ZUVudHJ5KHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKK0BlbHNlQAorICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLmNyZWF0YWJsZUAKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICAgICAgaWYgKCB0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkICkgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dmFsaWQgPSAxOworICAgICAgICAgICAgICAgIH0KK0BlbmRACisgICAgICAgICAgICB9CisgICAgICAgIH0KK0BlbmRACisgICAgICAgIGJyZWFrOworQGVuZEAKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKy8qKiBJbml0aWFsaXplIHRoZSAkaSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KK3N0YXRpYyB2b2lkCitpbml0aWFsaXplX3RhYmxlXyRpKHZvaWQpCit7CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICIkaSIsICAgICAke2l9X2hhbmRsZXIsCisgICAgICAgICAgICAgICR7aX1fb2lkLCBPSURfTEVOR1RIKCR7aX1fb2lkKSwKK0BpZiAkaS5zZXR0YWJsZUAKKyAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFCitAZWxzZUAKKyAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkKK0BlbmRACisgICAgICAgICAgICAgICk7CisKKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyApOworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCisgICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZHgudHlwZSwgIC8qIGluZGV4OiAkaWR4ICovCisgICAgQGVuZEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl8kZmlyc3RfY29sdW1uLnVjOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fJGxhc3RfY29sdW1uLnVjOworCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSggcmVnLCB0YWJsZV9pbmZvICk7CisKKyAgICAvKiBJbml0aWFsaXNlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgaGVyZSAqLworfQorCitAZW5kQAorLyoqIEluaXRpYWxpemVzIHRoZSAkbmFtZSBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfJG5hbWUodm9pZCkKK3sKKyAgLyogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcgKi8KKyAgQGZvcmVhY2ggJGkgdGFibGVACisgICAgaW5pdGlhbGl6ZV90YWJsZV8kaSgpOworICBAZW5kQAorfQpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMucm93LmNvbmYgYi9sb2NhbC9taWIyYy5yb3cuY29uZgppbmRleCA0NjYxNWMwLi5mNzM2YmFhIDEwMDc1NQotLS0gYS9sb2NhbC9taWIyYy5yb3cuY29uZgorKysgYi9sb2NhbC9taWIyYy5yb3cuY29uZgpAQCAtMTE3LDE2ICsxMTcsMTcgQEAKIHZvaWQKIGluaXRpYWxpemVfdGFibGVfJGkodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OwotICAgIHNpemVfdCAke2l9X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CiAgICAgc3RydWN0ICR7aX1fZW50cnkgICAgICAgICAgICAgICAqcm93OwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAgICAgICAgICAgKmlkeHM7CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmluaXQiLCAiaW5pdGlhbGl6aW5nIHRhYmxlICRpXG4iKSk7CisKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKICAgICAgICAgICAgICAgIiRpIiwgICAgICR7aX1faGFuZGxlciwKLSAgICAgICAgICAgICAgJHtpfV9vaWQsICR7aX1fb2lkX2xlbiwKKyAgICAgICAgICAgICAgJHtpfV9vaWQsIE9JRF9MRU5HVEgoJHtpfV9vaWQpLAogQGlmICRpLnNldHRhYmxlQAogICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUKIEBlbHNlQApAQCAtMjEyLDEwICsyMTMsOSBAQAogICAgIHYyID0gdjItPm5leHRfdmFyaWFibGU7CiAgICBAZW5kQAogICAgQGlmICRpZHgubmVlZGxlbmd0aEAKLSAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHYyLCAkaWR4LnR5cGUsICh1X2NoYXIqKXJvdy0+JGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+JHtpZHh9X2xlbik7CisgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCB2MiwgJGlkeC50eXBlLCByb3ctPiRpZHgsIHJvdy0+JHtpZHh9X2xlbik7CiAgICBAZWxzZUAKLSAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggdjIsICRpZHgudHlwZSwgKHVfY2hhciopcm93LT4kaWR4KTsKKyAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggdjIsICRpZHgudHlwZSwgcm93LT4kaWR4KTsKICAgIEBlbmRACiAgICBAZXZhbCAkZmlyc3Q9MEAKICAgQGVuZEAKQEAgLTIzNyw2ICsyMzcsOCBAQAogICAgIHN0cnVjdCAke2l9X2VudHJ5ICAgICAgICAgICp0YWJsZV9lbnRyeTsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OwogCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aGFuZGxlciIsICJQcm9jZXNzaW5nIHJlcXVlc3QgKCVkKVxuIiwgcmVxaW5mby0+bW9kZSkpOworCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKQEAgLTI1Miw3ICsyNTQsNyBAQAogICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CiAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIqKXRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbik7CiAgICAgICAgICAgICBAZWxzZUAKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuc2NhbGFyLmNvbmYgYi9sb2NhbC9taWIyYy5zY2FsYXIuY29uZgppbmRleCA0MzgzNjFiLi4zMDI0ZmE0IDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5zY2FsYXIuY29uZgorKysgYi9sb2NhbC9taWIyYy5zY2FsYXIuY29uZgpAQCAtMzYsNyArMzYsNyBAQAogaW5pdF8kbmFtZSh2b2lkKQogewogICBAZm9yZWFjaCAkaSBzY2FsYXJACi0gICAgc3RhdGljIG9pZCAke2l9X29pZFtdID0geyAkaS5jb21tYW9pZCB9OworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyAkaS5jb21tYW9pZCB9OwogICBAZW5kQAogCiAgIERFQlVHTVNHVEwoKCIkbmFtZSIsICJJbml0aWFsaXppbmdcbiIpKTsKQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgICAgICBjYXNlIE1PREVfR0VUOgogICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsICRpLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAvKiBYWFg6IGEgcG9pbnRlciB0byB0aGUgc2NhbGFyJ3MgZGF0YSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IGEgcG9pbnRlciB0byB0aGUgc2NhbGFyJ3MgZGF0YSAqLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgaW4gYnl0ZXMgKi8pOwogICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZiBiL2xvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZgppbmRleCBlZGZmMDZjLi4yY2M2NjVjIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmYKKysrIGIvbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mCkBAIC0xLDQgKzEsMzIgQEAKICMjIC0qLSBjIC0qLQorIworQGlmICIkY2FjaGUiIGVxICIiIEAKK0BvcGVuIC1ACitUaGlzIGZyYW1ld29yayBjYW4gd29yayBpbiBvbmUgb2YgdHdvIHdheXM6CisKKyAgMSkgIEhvbGQgYSBsb2NhbCBjYWNoZWQgY29weSBvZiBzb21lIGV4dGVybmFsIGRhdGEKKyAgICAgIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBzZXJ2aWNlIGluY29taW5nIHJlcXVlc3RzLgorCisgIDIpICBIb2xkIHRoZSBkYXRhIGZvciB0aGUgdGFibGUgc29sZWx5IHdpdGhpbiB0aGUgYWdlbnQKKworV2hpY2ggaXMgbW9yZSBhcHByb3ByaWF0ZSBmb3IgeW91ciBuZWVkcz8KKyAgICBAcHJvbXB0ICRhbnMgU2VsZWN0IHlvdXIgY2hvaWNlIDogQAorICAgIEBpZiAkYW5zID09IDEgQAorICAgICAgQGV2YWwgJGNhY2hlID0gMUAKKyAgICBAZWxzaWYgJGFucyA9PSAyQAorICAgICAgQGV2YWwgJGNhY2hlID0gMEAKKyAgICBAZWxzZUAKK0ludmFsaWQgYW5zd2VyIC0gZ2VuZXJhdGluZyBjYWNoaW5nIGNvZGUKKyAgICAgIEBldmFsICRjYWNoZSA9IDFACisgICAgQGVuZEAKK0BlbHNlQCAgICAgICAjICAtUyBjYWNoZT17c29tZXRoaW5nfQorICAgIEBpZiAiJGNhY2hlIiBuZSAiMSIgJiYgIiRjYWNoZSIgbmUgIjAiIEAKK0BvcGVuIC1ACitJbnZhbGlkIHZhbHVlIGZvciAnY2FjaGUnICgkY2FjaGUpIC0gZ2VuZXJhdGluZyBjYWNoaW5nIGNvZGUKKyAgICAgIEBldmFsICRjYWNoZSA9IDFACisgICAgQGVuZEAKK0BlbmRACisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIERvIHRoZSAuaCBmaWxlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xNSw3ICs0Myw3IEBACiBAZm9yZWFjaCAkaSB0YWJsZUAKIHZvaWQgaW5pdGlhbGl6ZV90YWJsZV8kaSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyICR7aX1faGFuZGxlcjsKLUBpZiAiJGNhY2hlIiBuZSAiIiBACitAaWYgIiRjYWNoZSIgPT0gMSBACiBOZXRzbm1wQ2FjaGVMb2FkICR7aX1fbG9hZDsKIE5ldHNubXBDYWNoZUZyZWUgJHtpfV9mcmVlOwogI2RlZmluZSAkaS51Y19USU1FT1VUICA2MApAQCAtNzAsMTUgKzk4LDE3IEBACiB2b2lkCiBpbml0aWFsaXplX3RhYmxlXyRpKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKLSAgICBzaXplX3QgJHtpfV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07CisgICAgY29uc3Qgc2l6ZV90ICR7aX1fb2lkX2xlbiAgID0gT0lEX0xFTkdUSCgke2l9X29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwogICAgIG5ldHNubXBfdGRhdGEgICAgICAgICAgICAgICAgICAgKnRhYmxlX2RhdGE7CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKLUBpZiAiJGNhY2hlIiBuZSAiIiBACitAaWYgIiRjYWNoZSIgPT0gMSBACiAgICAgbmV0c25tcF9jYWNoZSAgICAgICAgICAgICAgICAgICAqY2FjaGU7CiBAZW5kQAogCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aW5pdCIsICJpbml0aWFsaXppbmcgdGFibGUgJGlcbiIpKTsKKwogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgICAiJGkiLCAgICAgJHtpfV9oYW5kbGVyLAogICAgICAgICAgICAgICAke2l9X29pZCwgJHtpfV9vaWRfbGVuLApAQCAtOTAsNyArMTIwLDI1IEBACiAgICAgICAgICAgICAgICk7CiAKICAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGUoICIkaSIsIDAgKTsKKyAgICBpZiAoTlVMTCA9PSB0YWJsZV9kYXRhKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIHRkYXRhIHRhYmxlIGZvciAkaVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CitAaWYgIiRjYWNoZSIgPT0gMSBACisgICAgY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgkaS51Y19USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fbG9hZCwgJHtpfV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fb2lkLCAke2l9X29pZF9sZW4pOworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGNhY2hlIGZvciAkaVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgY2FjaGUtPm1hZ2ljID0gKHZvaWQgKil0YWJsZV9kYXRhOworQGVuZEAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyApOworICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgdGFibGUgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCiAgICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZHgudHlwZSwgIC8qIGluZGV4OiAkaWR4ICovCkBAIC0xMDEsMTIgKzE0OSwxMCBAQAogICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fJGxhc3RfY29sdW1uLnVjOwogICAgIAogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIoIHJlZywgdGFibGVfZGF0YSwgdGFibGVfaW5mbyApOwotQGlmICIkY2FjaGUiIG5lICIiIEAKLSAgICBjYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKCRpLnVjX1RJTUVPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9sb2FkLCAke2l9X2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9vaWQsICR7aX1fb2lkX2xlbik7Ci0gICAgY2FjaGUtPm1hZ2ljID0gKHZvaWQgKil0YWJsZV9kYXRhOwotICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCByZWcsIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9HRVQoY2FjaGUpLCBUQUJMRV9UREFUQV9OQU1FKTsKK0BpZiAiJGNhY2hlIiA9PSAxIEAKKyAgICBpZiAoY2FjaGUpIAorICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSggcmVnLCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfR0VUKGNhY2hlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX1REQVRBX05BTUUpOwogQGVuZEAKIAogICAgIC8qIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlICovCkBAIC0xNzQsNiArMjIwLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJvdy0+ZGF0YSA9IGVudHJ5OworCisgICAgREVCVUdNU0dUKCgiJHtpfTplbnRyeTpjcmVhdGUiLCAicm93IDB4JXhcbiIsICh1aW50cHRyX3Qpcm93KSk7CiAgIEBmb3JlYWNoICRpZHggaW5kZXhACiAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQAogICAgIG1lbWNweShlbnRyeS0+JGlkeCwgJGlkeCwgJHtpZHh9X2xlbik7CkBAIC0xODcsNyArMjM1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+JGlkeCkpOwogICAgQGVuZEAKICAgQGVuZEAKLSAgICBuZXRzbm1wX3RkYXRhX2FkZF9yb3coIHRhYmxlX2RhdGEsIHJvdyApOworICAgIGlmICh0YWJsZV9kYXRhKQorICAgICAgICBuZXRzbm1wX3RkYXRhX2FkZF9yb3coIHRhYmxlX2RhdGEsIHJvdyApOwogICAgIHJldHVybiByb3c7CiB9CiAKQEAgLTE5OSwxMyArMjQ4LDE5IEBACiAKICAgICBpZiAoIXJvdykKICAgICAgICAgcmV0dXJuOyAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLwotICAgIGVudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisKKyAgICBERUJVR01TR1QoKCIke2l9OmVudHJ5OnJlbW92ZSIsICJyb3cgMHgleFxuIiwgKHVpbnRwdHJfdClyb3cpKTsKKworICAgIGVudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopcm93LT5kYXRhOworICAgIFNOTVBfRlJFRSggZW50cnkgKTsgICAvKiBYWFggLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KKworICAgIGlmICh0YWJsZV9kYXRhKQogICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3JvdyggdGFibGVfZGF0YSwgcm93ICk7Ci0gICAgaWYgKGVudHJ5KQotICAgICAgICBTTk1QX0ZSRUUoIGVudHJ5ICk7ICAgLyogWFhYIC0gcmVsZWFzZSBhbnkgb3RoZXIgaW50ZXJuYWwgcmVzb3VyY2VzICovCisgICAgZWxzZQorICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV9yb3coIHJvdyApOyAgICAKIH0KIAotQGlmICIkY2FjaGUiIG5lICIiIEAKK0BpZiAiJGNhY2hlIiA9PSAxIEAKIC8qIEV4YW1wbGUgY2FjaGUgaGFuZGxpbmcgLSBzZXQgdXAgdGFibGVfZGF0YSBsaXN0IGZyb20gYSBzdWl0YWJsZSBmaWxlICovCiBpbnQKICR7aX1fbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYyApIHsKQEAgLTI4NSw2ICszNDAsOCBAQAogICAgIHN0cnVjdCAke2l9X2VudHJ5ICAgICAgICAgICp0YWJsZV9lbnRyeTsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OwogCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aGFuZGxlciIsICJQcm9jZXNzaW5nIHJlcXVlc3QgKCVkKVxuIiwgcmVxaW5mby0+bW9kZSkpOworCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKQEAgLTMwOSw3ICszNjYsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciopdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuKTsKICAgICAgICAgICAgIEBlbHNlQAogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCkBAIC0zNDgsNyArNDA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnkgPyBSU19BQ1RJVkUgOiBSU19OT05FWElTVEVOVCApKTsKICAgICAgICAgICAgIEBlbHNlQAogICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACi0JICAgICAgICAvKiBvciBwb3NzaWJsYyAnbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplJyAqLworCSAgICAgICAgLyogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZScgKi8KICAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKICAgICAgICAgICAgIEBlbHNlQApkaWZmIC0tZ2l0IGEvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrIGIvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhNDk4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2sKQEAgLTAsMCArMSwxMjYgQEAKKyMhL2Jpbi9zaAorCisjCisjIGZlYXR1cmUtY2hlY2s6IFRoaXMgc2NyaXB0IGxvb2tzIGZvciBmZWF0dXJlIHN0YXRlbWVudHMgaW4gYSBmaWxlIGJ5CisjIGV4ZWN1dGluZyBhIGNvbXBpbGVyIHVuZGVyIENQUCBhbmQgZXh0cmFjdGluZyBsaW5lcyBvZiB0aGUgZm9sbG93aW5nCisjIGZvcm06CisjCisjIG5ldHNubXBfZmVhdHVyZV9wcm92aWRlcyhmb28pOiB1c2VkIHRvIGluZGljYXRlIGl0IHByb3ZpZGVzIGZlYXR1cmUgImZvbyIKKyMgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFyKTogdXNlZCB0byBpbmRpY2F0ZSBpdCByZXF1aXJlcyBmZWF0dXJlICJiYXIiCisjIG5ldHNubXBfZmVhdHVyZV93YW50KGJhcik6IHVzZWQgdG8gaW5kaWNhdGUgaXQgd2FudHMgZmVhdHVyZSAiYmFyIgorIyAgICAgICAgICAgICAgICAgICAgKGJ1dCBjYW4gbGl2ZSB3aXRob3V0IGl0KQorIworIyBVc2luZyB0aGVzZSBsaW5lcyBpdCB0aGVuIGdlbmVyYXRlcyBhIGxpc3Qgb2YgZmVhdHVyZSByZXF1aXJlbWVudAorIyBkZWZpbmVzIGluICJpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgiIHdoaWNoIGNhbiB0aGVuIGJlCisjIGxvYWRlZCBpbiBsYXRlciBwYXNzZXMgYXQgY29tcGlsZSB0aW1lLgorIworIyBEZWZpbmVzIHByb2R1Y2VkIHdoZW4gbmV0c25tcF9mZWF0cmVfcmVxdWlyZShiYXIpIGlzIHByZXNlbnQ6CisjICAgI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9CQVIgMQorIworIyBEZWZpbmVzIHByb2R1Y2VkIHdoZW4gbmV0c25tcF9mZWF0dXJlX3dhbnQoYmFyKSBpcyBwcmVzZW50OgorIyAgICNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1dBTlRfQkFSIDEKKyMKKyMgQW5kIHdoZW4gYWxsIHRoZSBmZWF0dXJlcyBoYXZlIGJlZW4gY29sbGVjdGVkLCB0aGV5IGFyZSBhbHNvIGludmVydGVkIHZpYQorIyB0aGUgZmVhdHVyZS1wb3N0LWNoZWNrIHNjcmlwdDoKKyMKKyMgICAjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQkFSWCAxICAvKiBuZXZlciByZXF1aXJlZCAqLworIyAgICN1bmRlZiAgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9CQVIgICAgICAvKiByZXF1aXJlZCAqLworCisjIFVzYWdlOgorCisjIGZlYXR1cmUtY2hlY2sgTk9STUFMLUNPTVBJTEUtTElORQorCitTRUQ9c2VkCitHUkVQPWdyZXAKK0NDPWdjYworUk09cm0KKworaWYgdGVzdCAieCQxIiA9ICJ4LS1mZWF0dXJlLWdsb2JhbCIgOyB0aGVuCisgICAgIyBhIGdsb2JhbCBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZAorICAgIHNoaWZ0CisgICAgZ2xvYmFsPSQxCisgICAgc2hpZnQKK2ZpCisKK3NvdXJjZWRpcj0kMQorc2hpZnQKKworc291cmNlPSQxCitzaGlmdAorCitkZXN0aW5hdGlvbj0kMQorc2hpZnQKKwordG1wZj0iJGRlc3RpbmF0aW9uLjEiCisKK2NvbXBpbGVsaW5lPSIkQCIKKyRjb21waWxlbGluZSAnLURORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkc9MScgXAorICAgICAgICAgICAgICctRE5FVFNOTVBfTUlOSU1BTF9DT0RFPTEnIFwKKyAgICAgICAgICAgICAnLURuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShYKT1YIE5TRl9SUicgXAorICAgICAgICAgICAgICctRG5ldHNubXBfZmVhdHVyZV9wcm92aWRlKFgpPVggTlNGX1BQJyBcCisgICAgICAgICAgICAgJy1EbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKFgsWSk9WCxZIE5TRl9DTycgXAorICAgICAgICAgICAgICctRG5ldHNubXBfZmVhdHVyZV93YW50KFgpPVggTlNGX1dXJyAkc291cmNlIHwgXAorICAgICRHUkVQIE5TRl8gfCAkR1JFUCAtdiAnXiNkZWZpbmUnID4gJHRtcGYKKworJFJNIC1mICRkZXN0aW5hdGlvbjsKK3RvdWNoICRkZXN0aW5hdGlvbjsKKworIyBwcm9jZXNzIHJlcXVpcmVzCitmaXJzdHJlcXVpcmU9MQorZm9yIGkgaW4gYGdyZXAgTlNGX1JSICR0bXBmIHwgc2VkICdzLyBOU0ZfUlIvLydgIDsgZG8KKyAgICBpZiB0ZXN0ICRmaXJzdHJlcXVpcmUgPSAxIDsgdGhlbgorCWVjaG8gIiIgPj4gJGRlc3RpbmF0aW9uCisJZWNobyAiLyogcmVxdWlyZWQgYnkgJHNvdXJjZWRpci8kc291cmNlICovIiA+PiAkZGVzdGluYXRpb24KKwlmaXJzdHJlcXVpcmU9MAorICAgIGZpCisgICAgdXBwZXI9YGVjaG8gJGkgfCB0ciBhLXogQS1aYAorICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfJHVwcGVyIDEiID4+ICRkZXN0aW5hdGlvbgorZG9uZQorCisjIHByb2Nlc3MgcHJvdmlkZXMKK2ZpcnN0ZmVhdHVyZT0xCitmb3IgaSBpbiBgZ3JlcCBOU0ZfUFAgJHRtcGYgfCBzZWQgJ3MvIE5TRl9QUC8vJ2AgOyBkbworICAgIGlmIHRlc3QgJGZpcnN0ZmVhdHVyZSA9IDEgOyB0aGVuCisJZWNobyAiIiA+PiAkZGVzdGluYXRpb24KKwllY2hvICIvKiBmZWF0dXJlcyBwcm92aWRlZCBieSAkc291cmNlZGlyLyRzb3VyY2UgKi8iID4+ICRkZXN0aW5hdGlvbgorCWZpcnN0ZmVhdHVyZT0wCisgICAgZmkKKyAgICB1cHBlcj1gZWNobyAkaSB8IHRyIGEteiBBLVpgCisgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUFJPVklERV8kdXBwZXIgMSIgPj4gJGRlc3RpbmF0aW9uCitkb25lCisKKyMgcHJvY2VzcyBjaGlsZHJlbgorZmlyc3RmZWF0dXJlPTEKK2ZvciBpIGluIGBncmVwIE5TRl9DTyAkdG1wZiB8IHNlZCAncy8gTlNGX0NPLy8nYCA7IGRvCisgICAgcGFyZW50PWBlY2hvICRpIHwgc2VkICdzLy4qLC8vJ2AKKyAgICBjaGlsZD1gZWNobyAkaSB8IHNlZCAncy8sLiovLydgCisgICAgaWYgdGVzdCAkZmlyc3RmZWF0dXJlID0gMSA7IHRoZW4KKwllY2hvICIiID4+ICRkZXN0aW5hdGlvbgorCWVjaG8gIi8qIGZlYXR1cmVzIHByb3ZpZGVkIGJ5ICRzb3VyY2VkaXIvJHNvdXJjZSAqLyIgPj4gJGRlc3RpbmF0aW9uCisJZmlyc3RmZWF0dXJlPTAKKyAgICBmaQorICAgIHVwcGVyY2hpbGQ9YGVjaG8gJGNoaWxkIHwgdHIgYS16IEEtWmAKKyAgICB1cHBlcnBhcmVudD1gZWNobyAkcGFyZW50IHwgdHIgYS16IEEtWmAKKyAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV8ke3VwcGVyY2hpbGR9X0NISUxEX09GXyR7dXBwZXJwYXJlbnR9IDEiID4+ICRkZXN0aW5hdGlvbgorICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1BST1ZJREVfJHVwcGVyY2hpbGQgMSIgPj4gJGRlc3RpbmF0aW9uCitkb25lCisKKyMgcHJvY2VzcyB3YW50cworZmlyc3RmZWF0dXJlPTEKK2ZvciBpIGluIGBncmVwIE5TRl9XVyAkdG1wZiB8IHNlZCAncy8gTlNGX1dXLy8nYCA7IGRvCisgICAgaWYgdGVzdCAkZmlyc3RmZWF0dXJlID0gMSA7IHRoZW4KKwllY2hvICIiID4+ICRkZXN0aW5hdGlvbgorCWVjaG8gIi8qIGZlYXR1cmVzIHdhbnRlZCBieSAkc291cmNlZGlyLyRzb3VyY2UgKi8iID4+ICRkZXN0aW5hdGlvbgorCWZpcnN0ZmVhdHVyZT0wCisgICAgZmkKKyAgICB1cHBlcj1gZWNobyAkaSB8IHRyIGEteiBBLVpgCisgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfV0FOVF8kdXBwZXIgMSIgPj4gJGRlc3RpbmF0aW9uCitkb25lCisKK2lmIHRlc3QgIngkZ2xvYmFsIiAhPSAieCIgOyB0aGVuCisgICAgY2F0ICRkZXN0aW5hdGlvbiA+PiAkZ2xvYmFsCitmaQorCisKKyMgY2xlYW4gdXAKKyMkUk0gLWYgJHRtcGYKZGlmZiAtLWdpdCBhL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jcyBiL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTYwMTkxCi0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzCkBAIC0wLDAgKzEsMjIxIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSBJTzo6RmlsZTsKK3VzZSBHZXRvcHQ6OlN0ZDsKK291ciAlb3B0cyA9IChXID0+IDIpOworCitnZXRvcHRzKCdvaHdXOicsIFwlb3B0cykgfHwgdXNhZ2UoKTsKKwordXNhZ2UoKSBpZiAoJG9wdHN7J2gnfSk7CisKK3VzYWdlKCkgaWYgKCQjQVJHViAhPSAxKTsKKworIyBzaG91bGQgYmUgdGhlIGZlYXR1cmUtZGV0YWlscy5oIGZpbGUKK215ICRpbnB1dGZpbGUgPSBzaGlmdCBAQVJHVjsKK215ICRvdXRwdXRmaWxlID0gc2hpZnQgQEFSR1Y7CisKK215ICVmZWF0dXJlczsKK215ICV0b3A7CitteSAlZmlsZXM7CitteSAkcmVxZmlsZTsKKworZ2F0aGVyX2RhdGEoJGlucHV0ZmlsZSk7CitpZiAoJG9wdHN7J3cnfSkgeworICAgIHByaW50X3dpa2lfbW9kZSgkb3V0cHV0ZmlsZSk7Cit9IGVsc2UgeworICAgIHByaW50X29yZ19tb2RlKCRvdXRwdXRmaWxlKTsKK30KKworc3ViIGdhdGhlcl9kYXRhIHsKKyAgICBteSAoJGlucHV0ZmlsZSkgPSBAXzsKKworICAgIG9wZW4oSSwgJGlucHV0ZmlsZSk7CisgICAgd2hpbGUoPEk+KSB7CisJaWYgKC8ocmVxdWlyZWR8cHJvdmlkZWR8d2FudGVkKSBieSAoLiopIFwqLykgeworCSAgICAkcmVxZmlsZSA9ICQyOworCX0gZWxzaWYgKC9kZWZpbmUgTkVUU05NUF9GRUFUVVJFX1BST1ZJREVfKC4qKSAxLykgeworCSAgICBteSAkbGMgPSBsYygkMSk7CisJICAgIGRpZSAibm8gcmVxZmlsZSBjdXJyZW50bHkgc2V0OyBidWchIiBpZiAoIWRlZmluZWQoJHJlcWZpbGUpKTsKKworCSAgICBhZGQoJGxjKTsKKworCSAgICBwdXNoIEB7JGZpbGVzeyRyZXFmaWxlfXsncHJvdmlkZXMnfX0sICRsYzsKKwkgICAgcHVzaCBAeyRmZWF0dXJlc3skbGN9eydwcm92aWRlZGJ5J319LCAkcmVxZmlsZTsKKworCX0gZWxzaWYgKC9kZWZpbmUgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfKC4qKSAxLykgeworCSAgICBteSAkbGMgPSBsYygkMSk7CisJICAgIGRpZSAibm8gcmVxZmlsZSBjdXJyZW50bHkgc2V0OyBidWchIiBpZiAoIWRlZmluZWQoJHJlcWZpbGUpKTsKKworCSAgICBhZGQoJGxjKTsKKworCSAgICBwdXNoIEB7JGZpbGVzeyRyZXFmaWxlfXsncmVxdWlyZXMnfX0sICRsYzsKKwkgICAgcHVzaCBAeyRmZWF0dXJlc3skbGN9eydyZXF1aXJlZGJ5J319LCAkcmVxZmlsZTsKKworCX0gZWxzaWYgKC9kZWZpbmUgTkVUU05NUF9GRUFUVVJFX1dBTlRfKC4qKSAxLykgeworCSAgICBteSAkbGMgPSBsYygkMSk7CisJICAgIGRpZSAibm8gcmVxZmlsZSBjdXJyZW50bHkgc2V0OyBidWchIiBpZiAoIWRlZmluZWQoJHJlcWZpbGUpKTsKKworCSAgICBhZGQoJGxjKTsKKworCSAgICBwdXNoIEB7JGZpbGVzeyRyZXFmaWxlfXsnd2FudHMnfX0sICRsYzsKKwkgICAgcHVzaCBAeyRmZWF0dXJlc3skbGN9eyd3YW50ZWRieSd9fSwgJHJlcWZpbGU7CisJfSBlbHNpZiAoL2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfKC4qKV9DSElMRF9PRl8oLiopIDEvKSB7CisJICAgIG15ICRjaGlsZCA9IGxjKCQxKTsKKwkgICAgbXkgJHBhcmVudCA9IGxjKCQyKTsKKworCSAgICBhZGRfY2hpbGQoJGNoaWxkLCAkcGFyZW50KTsKKwl9CisgICAgfQorfQorCitzdWIgYWRkIHsKKyAgICBteSAoJG5hbWUpID0gQF87CisgICAgaWYgKCFleGlzdHMoJGZlYXR1cmVzeyRuYW1lfSkpIHsKKwkjIG5ldyBmZWF0dXJlIGVudGlyZWx5LCBtYXJrIGl0IGFzIGEgdG9wIG5vZGUKKwkkdG9weyRuYW1lfSA9IDE7CisgICAgfQorfQorCitzdWIgYWRkX2NoaWxkIHsKKyAgICBteSAoJGNoaWxkLCAkcGFyZW50KSA9IEBfOworCisgICAgYWRkKCRwYXJlbnQpOworCisgICAgaWYgKGV4aXN0cygkdG9weyRjaGlsZH0pKSB7CisJIyBpdCdzIG5vIGxvbmdlciBhIHRvcCBub2RlIGlmIGl0J3MgYSBjaGlsZCBvZiBzb21ldGhpbmcgZWxzZQorCWRlbGV0ZSAkdG9weyRjaGlsZH07CisgICAgfQorICAgICRmZWF0dXJlc3skcGFyZW50fXsnY2hpbGRyZW4nfXskY2hpbGR9Kys7CisKKyAgICAkZmVhdHVyZXN7JGNoaWxkfXsncHJvdmlkZWRieSd9LCAkcmVxZmlsZTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBvcmctbW9kZSBvdXRwdXQKKyMKK3N1YiBwcmludF9vcmdfbW9kZSB7CisgICAgbXkgKCRvdXRwdXRmaWxlKSA9IEBfOworCisgICAgbXkgJGZoID0gbmV3IElPOjpGaWxlOworCisgICAgaWYgKCEkZmgtPm9wZW4oIj4gJG91dHB1dGZpbGUiKSkgeworCWRpZSAiZXJyb3IhXG4iOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJG5vZGUgKHNvcnQga2V5cygldG9wKSkgeworCXByaW50X29yZ19ub2RlKCRmaCwgJG5vZGUsICIqIik7CisgICAgfQorfQorCitzdWIgcHJpbnRfb3JnX25vZGUgeworICAgIG15ICgkZmgsICRub2RlLCAkcHJlZml4KSA9IEBfOworCisgICAgbXkgJHNwYWNlcyA9ICRwcmVmaXg7CisgICAgJHNwYWNlcyA9fiBzLy4vIC9nOworCisgICAgcHJpbnQgJGZoICIkcHJlZml4ICRub2RlXG4iOworICAgIGlmIChleGlzdHMoJGZlYXR1cmVzeyRub2RlfXsncHJvdmlkZWRieSd9KSkgeworCXByaW50ICRmaCAiJHNwYWNlcyArIHByb3ZpZGVkIGluIGZpbGU6ICIgLgorCSAgICBqb2luKCIsICIsIG9yZ19saW5rX2ZpbGVzKEB7JGZlYXR1cmVzeyRub2RlfXsncHJvdmlkZWRieSd9fSkpIC4gIlxuIjsKKyAgICB9CisgICAgaWYgKGV4aXN0cygkZmVhdHVyZXN7JG5vZGV9eydyZXF1aXJlZGJ5J30pKSB7CisJcHJpbnQgJGZoICIkc3BhY2VzICsgcmVxdWlyZWQgaW4gZmlsZTogIiAuCisJICAgIGpvaW4oIiwgIiwgb3JnX2xpbmtfZmlsZXMoQHskZmVhdHVyZXN7JG5vZGV9eydyZXF1aXJlZGJ5J319KSkgLiAiXG4iOworICAgIH0KKyAgICBpZiAoZXhpc3RzKCRmZWF0dXJlc3skbm9kZX17J3dhbnRlZGJ5J30pKSB7CisJcHJpbnQgJGZoICIkc3BhY2VzICsgd2FudGVkIGluIGZpbGU6ICIgLgorCSAgICBqb2luKCIsICIsIG9yZ19saW5rX2ZpbGVzKEB7JGZlYXR1cmVzeyRub2RlfXsnd2FudGVkYnknfX0pKSAuICJcbiI7CisgICAgfQorICAgIGlmIChleGlzdHMoJGZlYXR1cmVzeyRub2RlfXsnY2hpbGRyZW4nfSkpIHsKKwlmb3JlYWNoIG15ICRjaGlsZCAoc29ydCBrZXlzKCV7JGZlYXR1cmVzeyRub2RlfXsnY2hpbGRyZW4nfX0pKSB7CisJICAgIHByaW50X29yZ19ub2RlKCRmaCwgJGNoaWxkLCAkcHJlZml4IC4gIioiKTsKKwl9CisgICAgfQorfQorCitzdWIgb3JnX2xpbmtfZmlsZXMgeworICAgIG15IEBmaWxlcyA9IEBfOworICAgIG1hcCB7ICRfID0gIltbZmlsZTokX11bJF9dXSI7IH0gQGZpbGVzOworICAgIHJldHVybiBAZmlsZXM7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgd2lraSBvdXRwdXQKKyMKK3N1YiBwcmludF93aWtpX21vZGUgeworICAgIG15ICgkb3V0cHV0ZmlsZSkgPSBAXzsKKworICAgIG15ICRmaCA9IG5ldyBJTzo6RmlsZTsKKyAgICBteSAkZGVwdGggPSAwOworCisgICAgaWYgKCEkZmgtPm9wZW4oIj4gJG91dHB1dGZpbGUiKSkgeworCWRpZSAiZXJyb3IhXG4iOworICAgIH0KKworICAgIHByaW50ICRmaCAiJycnVGhlIGNvbnRlbnRzIG9mIHRoaXMgcGFnZSBpcyBhdXRvLWdlbmVyYXRlZCBmcm9tIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczsgZG8gbm90IGVkaXQgYnkgaGFuZCAoY2hhbmdlcyB3aWxsIGJlIGxvc3QpJycnXG5cbiI7CisgICAgcHJpbnQgJGZoICJEZXRhaWxzIG9mIHRoZSBmZWF0dXJlIG1hcmtpbmcgc3lzdGVtIGFuZCBob3cgaXQgaXMgdXNlZCBjYW4gYmUgZm91bmQgYXQgW1tGZWF0dXJlIE1hcmtpbmcgYW5kIFNlbGVjdGlvbl1dXG5cbiI7CisKKyAgICBmb3JlYWNoIG15ICRub2RlIChzb3J0IGtleXMoJXRvcCkpIHsKKwlwcmludF93aWtpX25vZGUoJGZoLCAkbm9kZSwgJGRlcHRoKzEpOworICAgIH0KK30KKworc3ViIHByaW50X3dpa2lfbm9kZSB7CisgICAgbXkgKCRmaCwgJG5vZGUsICRkZXB0aCkgPSBAXzsKKworICAgIG15ICRkYXRhaGVhZGVyOworICAgIG15ICRkZXB0aGluY3JlYXNlID0gMTsKKworICAgIGlmICgkZGVwdGggPiAkb3B0c3snVyd9KSB7CisJcHJpbnQgJGZoICIqIiB4ICgkZGVwdGggLSAkb3B0c3snVyd9ICsgMSkgLiAiICRub2RlXG4iOworCSRkYXRhaGVhZGVyID0gIioiIHggKCRkZXB0aCAtICRvcHRzeydXJ30gKyAyKTsKKwkkZGVwdGhpbmNyZWFzZSsrOworICAgIH0gZWxzZSB7CisJcHJpbnQgJGZoICI9IiB4ICRkZXB0aCAuICIgJG5vZGUgIiAuICI9IiB4ICRkZXB0aCAuICJcbiI7CisJJGRhdGFoZWFkZXIgPSAiKiI7CisgICAgfQorCisgICAgaWYgKGV4aXN0cygkZmVhdHVyZXN7JG5vZGV9eydwcm92aWRlZGJ5J30pKSB7CisJcHJpbnQgJGZoICIkZGF0YWhlYWRlciBwcm92aWRlZCBpbiBmaWxlOiAiIC4KKwkgICAgam9pbigiLCAiLCB3aWtpX2xpbmtfZmlsZXMoQHskZmVhdHVyZXN7JG5vZGV9eydwcm92aWRlZGJ5J319KSkgLiJcbiI7CisgICAgfQorICAgIGlmIChleGlzdHMoJGZlYXR1cmVzeyRub2RlfXsncmVxdWlyZWRieSd9KSkgeworCXByaW50ICRmaCAiJGRhdGFoZWFkZXIgcmVxdWlyZWQgaW4gZmlsZTogIiAuCisJICAgIGpvaW4oIiwgIiwgd2lraV9saW5rX2ZpbGVzKEB7JGZlYXR1cmVzeyRub2RlfXsncmVxdWlyZWRieSd9fSkpIC4iXG4iOworICAgIH0KKyAgICBpZiAoZXhpc3RzKCRmZWF0dXJlc3skbm9kZX17J3dhbnRlZGJ5J30pKSB7CisJcHJpbnQgJGZoICIkZGF0YWhlYWRlciB3YW50ZWQgaW4gZmlsZTogIiAuCisJICAgIGpvaW4oIiwgIiwgd2lraV9saW5rX2ZpbGVzKEB7JGZlYXR1cmVzeyRub2RlfXsnd2FudGVkYnknfX0pKSAuICJcbiI7CisgICAgfQorICAgIGlmIChleGlzdHMoJGZlYXR1cmVzeyRub2RlfXsnY2hpbGRyZW4nfSkpIHsKKwlpZiAoJGRlcHRoID49ICRvcHRzeydXJ30pIHsKKwkgICAgcHJpbnQgJGZoICIkZGF0YWhlYWRlciBDaGlsZHJlbjpcbiI7CisJfQorCWZvcmVhY2ggbXkgJGNoaWxkIChzb3J0IGtleXMoJXskZmVhdHVyZXN7JG5vZGV9eydjaGlsZHJlbid9fSkpIHsKKwkgICAgcHJpbnRfd2lraV9ub2RlKCRmaCwgJGNoaWxkLCAkZGVwdGggKyAkZGVwdGhpbmNyZWFzZSk7CisJfQorICAgIH0KK30KKworc3ViIHdpa2lfbGlua19maWxlcyB7CisgICAgbXkgQGZpbGVzID0gQF87CisgICAgbWFwIHsgJF8gPSAiW2h0dHA6Ly9uZXQtc25tcC5zdm4uc291cmNlZm9yZ2UubmV0L3ZpZXd2Yy9uZXQtc25tcC90cnVuay9uZXQtc25tcC8kXz92aWV3PW1hcmt1cCAkX10iOyB9IEBmaWxlczsKKyAgICByZXR1cm4gQGZpbGVzOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGhlbHAgb3V0cHV0CisjCitzdWIgdXNhZ2UgeworICAgIHByaW50ICJVc2FnZTogJDAgW0ZMQUdTXSBJTlBVVEZJTEUgT1VUUFVURklMRVxuXG4iOworICAgIHByaW50ICJGTEFHUzpcbiI7CisgICAgcHJpbnQgIlx0LWhcdGhlbHBcbiI7CisgICAgcHJpbnQgIlx0LW9cdE91dHB1dCBzdHlsZTogT3JnLU1vZGUgW2RlZmF1bHRdXG4iOworICAgIHByaW50ICJcdC13XHRPdXRwdXQgc3R5bGU6IHdpa2lcbiI7CisgICAgcHJpbnQgIlx0LVcgREVQVEhcdFdpa2kgaGVhZGVyIHRvIGJ1bGxldCBsaXN0IGRlcHRoIChkZWZhdWx0IDIpXG4iOworICAgIHByaW50ICJcbklOUFVUL09VVFBVVFxuIjsKKyAgICBwcmludCAiXHRJTlBVVEZJTEU6XHRsb2NhdGlvbiBvZiB0aGUgaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaCBmaWxlXG4iOworICAgIHByaW50ICJcdE9VVFBVVEZJTEU6XHR0aGUgZmlsZSB0byB3cml0ZSB0aGUgcmVzdWx0cyB0b1xuIjsKKyAgICBleGl0OworfQpkaWZmIC0tZ2l0IGEvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZSBiL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1yZW1vdmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWFlMzQwZAotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1yZW1vdmUKQEAgLTAsMCArMSwxMjggQEAKKyMhL2Jpbi9zaAorCisjCisjIGZlYXR1cmUtcmVtb3ZlOiByZW1vdmVzIGZlYXR1cmVzIGJ5IGRlZmluaW5nIHNwZWNpYWwgdmFyaWFibGVzCisjIGluZGljYXRpbmcgcGFydGljdWxhciBjb2RlIHNlZ21lbnRzIGFyZSB1bm5lZWRlZC4gIFRoaXMgaXMgZG9uZSBieQorIyBleGFtaW5pbmcgdGhlIGxpc3Qgb2YgcHJvdmlkZWQgZmVhdHVyZXMgYW5kIGRlZmluaW5nIGEgUkVNT1ZFCisjIGVxdWl2YWxlbnQgaWYgbm8gb3RoZXIgbW9kdWxlIHJlcXVpcmVkIGl0LgorIworIyBBcmd1bWVudHM6CisjICAgZmVhdHVyZS1yZW1vdmUgbWFpbmhlYWRlci5oIGdsb2JhbGhlYWRlci5oIFRIRVJFU1QKKyMKKyMgV2hlcmUgVEhFUkVTVCBhcmUgYSBsaXN0IG9mIGZlYXR1cmVzIHRvIHJlbW92ZSAoZGVmYXVsdCkgb3IgYWRkLgorIworIyAgIC0tYWRkIHN3aXRjaGVzIHRvICJhZGRpbmciIGFuZCAtLXJlbW92ZSBzd2l0Y2hlcyBiYWNrLgorIworIyBFLkcuCisjICAgZmVhdHVyZS1yZW1vdmUgbWFpbmhlYWRlci5oIGdsb2JhbGhlYWRlci5oIG9pZF9zdGFzaCAtLWFkZCBjb250YWluZXJfbnVsbAorIworQ1A9Y3AKKworZmVhdHVyZWhlYWRlcj0iJDEiCitmZWF0dXJlaGVhZGVyaW49IiQxLmluIgorZmVhdHVyZWhlYWRlcmdsb2JhbD0iJDIiCitzaGlmdAorc2hpZnQKKworYXJndW1lbnR0eXBlPSItLXJlbW92ZSIKK3JlbW92ZXRoZXNlPSIiCithZGR0aGVzZT0iIgorCit3aGlsZSB0ZXN0ICJ4JDEiICE9ICJ4IiA7IGRvCisgICAgdWM9YGVjaG8gJDEgfCB0ciBhLXogQS1aYAorICAgIGNhc2UgJDEgaW4KKwktLSopCisJICAgIGFyZ3VtZW50dHlwZT0iJDEiCisJICAgIDs7CisKKwkqKQorCSAgICBpZiB0ZXN0ICJ4JGFyZ3VtZW50dHlwZSIgPSAieC0tcmVtb3ZlIiA7IHRoZW4KKwkJcmVtb3ZldGhlc2U9IiRyZW1vdmV0aGVzZSAkdWMiCisJICAgIGVsc2UKKwkJYWRkdGhlc2U9IiRhZGR0aGVzZSAkdWMiCisJICAgIGZpCisJICAgIDs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKK2VjaG8gIiIgPiAkZmVhdHVyZWhlYWRlcgorZWNobyAiLyogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGZlYXR1cmVzIHRoYXQgTmV0LVNOTVAgSEFTIG9yIGhhcyBSRU1PVkVkICovIiA+PiAkZmVhdHVyZWhlYWRlcgorCitoYXNsaXN0PSIgIgorCitmb3IgaSBpbiBgZ3JlcCBORVRTTk1QX0ZFQVRVUkVfUFJPVklERV8gJGZlYXR1cmVoZWFkZXJpbiB8IHNlZCAncy8uKkZFQVRVUkVfUFJPVklERV8vLztzLyAuKi8vJ2AgOyBkbworICAgICMKKyAgICAjIElmIHdlIHdlcmUgc3BlY2lmaWNhbGx5IGFza2VkIHRvIGluY2x1ZGUgaXQsIHRoZW4gZG8gc28KKyAgICAjCisgICAgaWYgZWNobyAiICRhZGR0aGVzZSAiIHwgZ3JlcCAiICR7aX0gIiA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAjIFRoZSB1c2VyIHJlcXVpcmVkIGl0IDsgcmVwb3J0IHdlJ3JlIHVzaW5nIGl0CisJZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfSEFTXyRpIDEiID4+ICRmZWF0dXJlaGVhZGVyCisJaGFzbGlzdD0iJHtoYXNsaXN0fSR7aX0gIgorCisgICAgIworICAgICMgY2hlY2sgdG8gc2VlIGlmIHNvbWV0aGluZyByZXF1cmllZCBpdAorICAgICMKKyAgICBlbGlmIGdyZXAgIk5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFXyR7aX0gIiAkZmVhdHVyZWhlYWRlcmdsb2JhbCA+IC9kZXYvbnVsbCA7IHRoZW4KKwkjIGlmIHNvLCBtYWtlIHN1cmUgd2Ugd2VyZW4ndCBhc2tlZCB0byByZW1vdmUgaXQKKyAgICAgICAJaWYgZWNobyAgIiAkcmVtb3ZldGhlc2UgInwgZ3JlcCAiICRpICIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgCSAgICMgVWggb2g7IHRoZXkgc3BlY2lmaWNhbGx5IHdhbnRlZCBpdCByZW1vdmVkIGJ1dCBpdCB3YXMgcmVxdWlyZWQKKwkgICBlY2hvICJGZWF0dXJlIEVycm9yOiIKKyAgICAgICAJICAgZWNobyAiIEZlYXR1cmUgJyRpJyB3YXMgYXNrZWQgdG8gYmUgcmVtb3ZlZCBidXQgc29tZXRoaW5nIHJlcXVpcmVkIGl0IgorICAgICAgIAkgICBlY2hvICIgU2VlIHRoZSAkZmVhdHVyZWhlYWRlcmdsb2JhbCBmaWxlIGZvciBkZXBlbmRlbmN5IGRldGFpbHMiCisJICAgZWNobyAiIgorICAgICAgICAgICBybSAtZiAkZmVhdHVyZWhlYWRlcgorICAgICAgIAkgICBleGl0IDEKKyAgICAgICAJZmkKKworICAgICAgIAkjIHNvbWV0aGluZyByZXF1aXJlZCBpdCA7IHJlcG9ydCB3ZSdyZSB1c2luZyBpdAorICAgICAgIAllY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9IQVNfJGkgMSIgPj4gJGZlYXR1cmVoZWFkZXIKKwloYXNsaXN0PSIke2hhc2xpc3R9JHtpfSAiCisKKyAgICAjCisgICAgIyBjaGVjayB0byBzZWUgaWYgc29tZXRoaW5nICJ3YW50ZWQiIGl0CisgICAgIworICAgIGVsaWYgZ3JlcCAiTkVUU05NUF9GRUFUVVJFX1dBTlRfJHtpfSAiICRmZWF0dXJlaGVhZGVyZ2xvYmFsID4gL2Rldi9udWxsIDsgdGhlbgorCSAgICMgbm90aGluZyByZXF1aXJlZCBpdCwgYnV0IHNvbWV0aGluZyAid2FudGVkIiBpdAorCisJICAgIyBjaGVjayB0byBtYWtlIHN1cmUgd2Ugd2VyZW4ndCBhc2tlZCB0byBleGNsdWRlIGl0CisgICAgICAgICAgIGlmIGVjaG8gIiAkcmVtb3ZldGhlc2UgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsIDsgdGhlbgorICAgICAgICAgICAgICAgIyB3ZSB3ZXJlIHNwZWNpZmljYWxseSBhc2tlZCAqbm90KiB0byB1c2UgdGhpcyBmZWF0dXJlCisgICAgICAgICAgICAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfJGkgMSIgPj4gJGZlYXR1cmVoZWFkZXIKKyAgICAgICAgICAgZWxzZQorCSAgICAgICAjIHNvbWV0aGluZyB3YW50ZWQgaXQsIHNvIHdlJ2xsIGluY2x1ZGUgaXQKKwkgICAgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfSEFTXyRpIDEiID4+ICRmZWF0dXJlaGVhZGVyCisJICAgICAgIGhhc2xpc3Q9IiR7aGFzbGlzdH0ke2l9ICIKKyAgICAgICAgICAgZmkKKworCisgICAgIworICAgICMgY2hlY2sgdG8gc2VlIGlmIHNvbWV0aGluZyByZXF1aXJlZCBhIHBhcmVudAorICAgICMKKyAgICBlbGlmIGVncmVwIE5FVFNOTVBfRkVBVFVSRV8ke2l9X0NISUxEX09GICRmZWF0dXJlaGVhZGVyZ2xvYmFsID4gL2Rldi9udWxsIDsgdGhlbgorCXBhcmVudG5hbWVzPWBlZ3JlcCBORVRTTk1QX0ZFQVRVUkVfJHtpfV9DSElMRF9PRiAkZmVhdHVyZWhlYWRlcmdsb2JhbCB8IHNlZCAncy8uKkNISUxEX09GXy8vO3MvIC4qLy87J2AKKworCWZvdW5kb25lPTAKKwlmb3IgcGFyZW50bmFtZSBpbiAkcGFyZW50bmFtZXMgOyBkbworICAgCSAgICAjIGlmIHRoZSBwYXJlbnQgd2FzIGRlc2lyZWQsIHRoZW4gd2UgYXJlIHRvbzoKKwkgICAgCisJICAgIGlmIHRlc3QgJGZvdW5kb25lID0gMCA7IHRoZW4KKwkJaWYgZWdyZXAgIk5FVFNOTVBfRkVBVFVSRV9IQVNfJHtwYXJlbnRuYW1lfSAiICRmZWF0dXJlaGVhZGVyID4gL2Rldi9udWxsIDsgdGhlbgorICAgICAgIAkJICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX0hBU18kaSAxIiA+PiAkZmVhdHVyZWhlYWRlcgorCQkgICAgaGFzbGlzdD0iJHtoYXNsaXN0fSR7aX0gIgorCQkgICAgZm91bmRvbmU9MQorCQlmaQorCSAgICBmaQorICAgICAgICBkb25lCisJaWYgdGVzdCAkZm91bmRvbmUgPSAwIDsgdGhlbgorICAgIAkgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFXyRpIDEiID4+ICRmZWF0dXJlaGVhZGVyCisJZmkKKworICAgICMKKyAgICAjIG5vIG9uZSByZXF1aXJlZCBvciB3YW50ZWQgaXQgLS0gaXQgaXMgc2FmZSB0byByZW1vdmUgaXQKKyAgICAjCisgICAgZWxzZQorICAgIAkgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFXyRpIDEiID4+ICRmZWF0dXJlaGVhZGVyCisgICAgZmkKK2RvbmUKKwpkaWZmIC0tZ2l0IGEvbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlIGIvbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5ZTNjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGUKQEAgLTAsMCArMSwxMTcgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIHNlYXJjaGVzIGZvciAubyBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGV4YW1pbmVzIGVhY2ggZm9yCisjIGRlZmluZWQgZnVuY3Rpb25zIChUKSBhbmQgdW5kZWZpbmVkIHJlZmVyZW5jZXMgKFUpIGFuZCBsaXN0cworIyBhbnl0aGluZyB0aGF0IGlzbid0IHJlcXVpcmVkIGJ5IHNvbWV0aGluZyBlbHNlIG9yIGl0c2VsZgorCisjIHVzZWZ1bCBjYWxsaW5nIHNvcnRlZCBieSBmaWxlOgorIyAgIHBlcmwgbWluaW1hbC9maW5kLXVudXNlZC1jb2RlIHwgc29ydCAKKwordXNlIEZpbGU6OkZpbmQ7Cit1c2UgRGF0YTo6RHVtcGVyOwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6OkdVSTo6TG9uZzsKKworbXkgJW9wdHM7CisKK0xvY2FsR2V0T3B0aW9ucyhcJW9wdHMsCisJCVsnZ3xncmVwJywgICAgICAicnVuIGZpbmQvZ3JlcCB0byBsb29rIGZvciBzdHJpbmcgdXNhZ2VzIl0sCisgICAgKTsKKworbXkgKEBmaWxlcywgJWRlZmluZWQsICVsb29raW5nZm9yKTsKKworZmluZChcJmRvdF9vcywgIi4iKTsKKworZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKSB7CisgICAgY29sbGVjdF9mcm9tX2ZpbGUoJGZpbGUpOworfQorCisKK2lmICgkI0FSR1YgPiAtMSkgeworICAgIHByaW50ICJEdW1waW5nIGZvdW5kIHN5bWJvbCB1c2FnZXM6XG5cbiI7CisgICAgZm9yZWFjaCBteSAkYXJnIChAQVJHVikgeworCXByaW50ICIkYXJnOlxuIjsKKwlwcmludCAiICAiLCBqb2luKCJcbiAgIiwgQHskZGVmaW5lZHskYXJnfXsndXNhZ2VzJ319KSwiXG5cbiI7CisgICAgfQorICAgIGV4aXQ7Cit9CisKK2ZvcmVhY2ggbXkgJGZ1bmN0aW9uIChzb3J0IHsgJGRlZmluZWR7JGF9eydzb3VyY2UnfSBjbXAgJGRlZmluZWR7JGJ9eydzb3VyY2UnfSB9IGtleXMoJWRlZmluZWQpKSB7CisgICAgaWYgKGV4aXN0cygkZGVmaW5lZHskZnVuY3Rpb259eydzb3VyY2UnfSkgJiYKKwkhZXhpc3RzKCRkZWZpbmVkeyRmdW5jdGlvbn17J3VzYWdlcyd9KSkgeworCWlmIChjaGVja19mb3Jfb25jZV9vbmx5KCRkZWZpbmVkeyRmdW5jdGlvbn17J3NvdXJjZSd9LCAkZnVuY3Rpb24pKSB7CisJICAgIHByaW50ZigiJS0zOHMgJS0zOHNcbiIsICRkZWZpbmVkeyRmdW5jdGlvbn17J3NvdXJjZSd9LCAkZnVuY3Rpb24pOworCSAgICBpZiAoJG9wdHN7J2cnfSkgeworCQlvcGVuKFAsImZpbmQgLiAtcmVnZXggJy4qLlxcKGNcXHx4c1xcKScgfCB4YXJncyBncmVwIC1uICRmdW5jdGlvbnwiKTsKKwkJd2hpbGUoPFA+KSB7CisJCSAgICBwcmludCAiICAkXyI7CisJCX0KKwkJY2xvc2UoUCk7CisJCXByaW50ICJcbiI7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgZG90X29zIHsKKyAgICByZXR1cm4gaWYgKCEvXC5vJC8pOworICAgIHJldHVybiBpZiAoJEZpbGU6OkZpbmQ6Om5hbWUgPX4gL1wvLmxpYnNcLy8pOworIyAgICByZXR1cm4gaWYgKCRGaWxlOjpGaW5kOjpuYW1lID1+IC9cLyhwZXJsfHB5dGhvbilcLy8pOworICAgIHB1c2ggQGZpbGVzLCAkRmlsZTo6RmluZDo6bmFtZTsKK30KKworc3ViIGNvbGxlY3RfZnJvbV9maWxlIHsKKyAgICBteSAkZmlsZSA9IHNoaWZ0OworIyAgICBwcmludCAic2VhcmNoaW5nICRmaWxlXG4iOworICAgIG9wZW4oSSwibm0gJGZpbGV8Iik7CisgICAgd2hpbGUoPEk+KSB7CisJJGRlZmluZWR7JDF9eydzb3VyY2UnfSA9ICRmaWxlIGlmICgvIFQgKC4qKS8pOworCXB1c2ggQHskZGVmaW5lZHskMX17J3VzYWdlcyd9fSwgJGZpbGUgaWYgKC8gVSAoLiopLyk7CisgICAgfQorICAgIGNsb3NlKEkpOworfQorCQorc3ViIGNoZWNrX2Zvcl9vbmNlX29ubHkgeworICAgIG15ICgkZmlsZSwgJGZ1bmN0aW9uKSA9IEBfOworICAgICRmaWxlID1+IHMvXC5vLy5jLzsKKyAgICBvcGVuKEksICRmaWxlKTsKKyAgICBteSAkdXNhZ2VzID0gMDsKKyAgICB3aGlsZSg8ST4pIHsKKwlpZiAoLyRmdW5jdGlvbi8pIHsKKwkgICAgJHVzYWdlcysrOworCX0KKwlpZiAoJHVzYWdlcyA+IDEpIHsKKwkgICAgY2xvc2UoSSk7CisJICAgIHJldHVybiAwOworCX0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKKworc3ViIExvY2FsR2V0T3B0aW9ucyB7CisgICAgaWYgKGV2YWwge3JlcXVpcmUgR2V0b3B0OjpHVUk6Okxvbmc7fSkgeworICAgICAgICBpbXBvcnQgR2V0b3B0OjpHVUk6Okxvbmc7CisgICAgICAgICMgb3B0aW9uYWwgY29uZmlndXJlIGNhbGwKKyAgICAgICAgR2V0b3B0OjpHVUk6Okxvbmc6OkNvbmZpZ3VyZShxdyhkaXNwbGF5X2hlbHAgbm9faWdub3JlX2Nhc2UgY2FwdHVyZV9vdXRwdXQgbm9fZ3VpIGFsbG93X3plcm8pKTsKKyAgICAgICAgcmV0dXJuIEdldE9wdGlvbnMoQF8pOworICAgIH0KKyAgICByZXF1aXJlIEdldG9wdDo6TG9uZzsKKyAgICBpbXBvcnQgR2V0b3B0OjpMb25nOworICAgICMgb3B0aW9uYWwgY29uZmlndXJlIGNhbGwKKyAgICBHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZShxdyhkaXNwbGF5X2hlbHAgbm9faWdub3JlX2Nhc2UgY2FwdHVyZV9vdXRwdXQpKTsKKyAgICBHZXRPcHRpb25zKExvY2FsT3B0aW9uc01hcChAXykpOworfQorCitzdWIgTG9jYWxPcHRpb25zTWFwIHsKKyAgICBteSAoJHN0LCAkY2IsIEBvcHRzKSA9ICgocmVmKCRfWzBdKSBlcSAnSEFTSCcpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKDEsIDEsICRfWzBdKSA6ICgwLCAyKSk7CisgICAgZm9yIChteSAkaSA9ICRzdDsgJGkgPD0gJCNfOyAkaSArPSAkY2IpIHsKKyAgICAgICAgaWYgKCRfWyRpXSkgeworICAgICAgICAgICAgbmV4dCBpZiAocmVmKCRfWyRpXSkgZXEgJ0FSUkFZJyAmJiAkX1skaV1bMF0gPX4gL15HVUk6Lyk7CisgICAgICAgICAgICBwdXNoIEBvcHRzLCAoKHJlZigkX1skaV0pIGVxICdBUlJBWScpID8gJF9bJGldWzBdIDogJF9bJGldKTsKKyAgICAgICAgICAgIHB1c2ggQG9wdHMsICRfWyRpKzFdIGlmICgkY2IgPT0gMik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEBvcHRzOworfQpkaWZmIC0tZ2l0IGEvbG9jYWwvbWluaW1hbGlzdC9pZ25vcmUucmVnZXhwIGIvbG9jYWwvbWluaW1hbGlzdC9pZ25vcmUucmVnZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOWI5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taW5pbWFsaXN0L2lnbm9yZS5yZWdleHAKQEAgLTAsMCArMSw0IEBACit+JAorIyQKK1wvLiMKK1wvLnN2blwvCmRpZmYgLS1naXQgYS9sb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzIGIvbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZDQ1OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlcwpAQCAtMCwwICsxLDEzMCBAQAorIyEvYmluL3BlcmwKKworIyBzdGVwczoKKyMgMSkgcnVuIGNvbmZpZ3VyZQorIyAyKSBwZXJsIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXMKKyMgMykgbWFrZSBkZXBlbmQKKyMgNCkgbWFrZQorCit1c2UgRmlsZTo6RmluZDsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2Ugc3RyaWN0OworCitteSAlZXhjZXB0aW9ucyA9IHF3KAorICAgYWdlbnQvbWliZ3JvdXAvbWliZGVmcy5oICAgICAgICAgICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaCAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oICAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuaCAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuaCAgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfaW5jbHVkZXMuaCAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbml0cy5oICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2RvdF9jb25mLmggIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfc2h1dGRvd24uaCAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmgJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9hZ2VudF9tb2R1bGVfaW5pdHMuaCAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9kb3RfY29uZi5oCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX3NodXRkb3duLmgJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYyAgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Db25mLmMgICAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaCAgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Db25mLmggICAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2hvc3RfcmVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvaHJfZmlsZXN5cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RlZnMuaCAgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2lmVGFibGVfZGVmcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmggICAgICAgICAgICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9tbnR0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmggICAgICAgICAgICAgICAgICAgICAgICAgMQorKTsKKworbXkgJW9wdHM7CisKK0xvY2FsR2V0T3B0aW9ucyhcJW9wdHMsCisJCVsnbnxkcnktcnVuJywgICAgICAiRHJ5LXJ1biwganVzdCBzYXkgd2hhdCB5b3Ugd291bGQgZG8iXSwKKwkJWyd2fHZlcmJvc2UnLCAgICAgICJTaG93IHdoYXQgZmlsZXMgYXJlIGJlaW5nIGxlZnQgdG9vIl0sCisgICAgKTsKKworbXkgJGlucHV0TWFrZWZpbGUgPSAkQVJHVlswXSB8fCAiYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUiOworbXkgJGlucHV0RGlyID0gJEFSR1ZbMV0gfHwgImFnZW50L21pYmdyb3VwIjsKKworbXkgJGNvbGxlY3RpbmcgPSAwOworbXkgKCVmaWxlcywgQGZpbGVzKTsKKworb3BlbihJLCAkaW5wdXRNYWtlZmlsZSk7Cit3aGlsZSg8ST4pIHsKKyAgICBpZiAoL21pYl9tb2R1bGVfbGlzdF9jPS8pIHsKKwkkY29sbGVjdGluZyA9IDE7CisgICAgfSBlbHNpZiAoJGNvbGxlY3RpbmcpIHsKKwlpZiAoISAvXFxccyokLykgeworCSAgICAkY29sbGVjdGluZyA9IDA7CisJfQorCWNob21wKCk7CisJcy9cXC8vOworCXMvXHMqLy9nOworCXMvXC5jLy87CisJcHVzaCBAZmlsZXMsICJhZ2VudC9taWJncm91cC8kXyI7CisJJGZpbGVzeyJhZ2VudC9taWJncm91cC8kXy5jIn0gPSAxOworCSRmaWxlc3siYWdlbnQvbWliZ3JvdXAvJF8uaCJ9ID0gMTsKKyAgICB9Cit9CisKK2ZpbmQoXCZyZW1vdmVfZmlsZXMsICRpbnB1dERpcik7CisKK3N1YiByZW1vdmVfZmlsZXMgeworICAgIHJldHVybiBpZiAoIS9cLltjaF0kLyk7CisgICAgcmV0dXJuIGlmICgvXC5oJC8pOyAjIFhYWDogd2UgbmVlZCB0byBkZWxldGUgaGVhZGVycyBldmVudHVhbGx5IHRvbworICAgIHJldHVybiBpZiAoL19jb25zdGFudHMuaC8pOworICAgIHJldHVybiBpZiAoZXhpc3RzKCRleGNlcHRpb25zeyRGaWxlOjpGaW5kOjpuYW1lfSkpOworCisgICAgaWYgKCFleGlzdHMoJGZpbGVzeyRGaWxlOjpGaW5kOjpuYW1lfSkpIHsKKwlVbmxpbmsoJF8sICRGaWxlOjpGaW5kOjpuYW1lKTsKKyAgICB9IGVsc2lmICgkb3B0c3sndid9KSB7CisJcHJpbnQgIkxlYXZpbmcgJEZpbGU6OkZpbmQ6Om5hbWVcbiI7CisgICAgfQorfQorCitzdWIgVW5saW5rIHsKKyAgICBteSAoJGZpbGUsICRmdWxsZmlsZSkgPSBAXzsKKyAgICBwcmludCAiUmVtb3ZpbmcgJGZ1bGxmaWxlXG4iOworICAgIGlmICghJG9wdHN7J24nfSkgeworCXVubGluaygkZmlsZSk7CisJaWYgKC1mICIkZmlsZSIpIHsKKwkgICAgcHJpbnQgIioqKiBGQUlMRUQgdG8gcmVtb3ZlICRmaWxlXG4iOyAKKwl9CisgICAgfQorfQorCisKK3N1YiBMb2NhbEdldE9wdGlvbnMgeworICAgIGlmIChldmFsIHtyZXF1aXJlIEdldG9wdDo6R1VJOjpMb25nO30pIHsKKyAgICAgICAgaW1wb3J0IEdldG9wdDo6R1VJOjpMb25nOworICAgICAgICAjIG9wdGlvbmFsIGNvbmZpZ3VyZSBjYWxsCisJbXkgQGdvcHRzID0gcXcobm9faWdub3JlX2Nhc2Ugbm9fZ3VpIGFsbG93X3plcm8pOworCWlmICgkR2V0b3B0OjpHVUk6Okxvbmc6OlZFUlNJT04gPiAwLjIpIHsKKwkgICAgcHVzaCBAZ29wdHMsIHF3KGRpc3BsYXlfaGVscCBjYXB0dXJlX291dHB1dCk7CisJfQorICAgICAgICBHZXRvcHQ6OkdVSTo6TG9uZzo6Q29uZmlndXJlKEBnb3B0cyk7CisgICAgICAgIHJldHVybiBHZXRPcHRpb25zKEBfKTsKKyAgICB9CisgICAgcmVxdWlyZSBHZXRvcHQ6Okxvbmc7CisgICAgaW1wb3J0IEdldG9wdDo6TG9uZzsKKyAgICAjIG9wdGlvbmFsIGNvbmZpZ3VyZSBjYWxsCisgICAgR2V0b3B0OjpMb25nOjpDb25maWd1cmUocXcoZGlzcGxheV9oZWxwIG5vX2lnbm9yZV9jYXNlIGNhcHR1cmVfb3V0cHV0KSk7CisgICAgR2V0T3B0aW9ucyhMb2NhbE9wdGlvbnNNYXAoQF8pKTsKK30KKworc3ViIExvY2FsT3B0aW9uc01hcCB7CisgICAgbXkgKCRzdCwgJGNiLCBAb3B0cykgPSAoKHJlZigkX1swXSkgZXEgJ0hBU0gnKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICgxLCAxLCAkX1swXSkgOiAoMCwgMikpOworICAgIGZvciAobXkgJGkgPSAkc3Q7ICRpIDw9ICQjXzsgJGkgKz0gJGNiKSB7CisgICAgICAgIGlmICgkX1skaV0pIHsKKyAgICAgICAgICAgIG5leHQgaWYgKHJlZigkX1skaV0pIGVxICdBUlJBWScgJiYgJF9bJGldWzBdID1+IC9eR1VJOi8pOworICAgICAgICAgICAgcHVzaCBAb3B0cywgKChyZWYoJF9bJGldKSBlcSAnQVJSQVknKSA/ICRfWyRpXVswXSA6ICRfWyRpXSk7CisgICAgICAgICAgICBwdXNoIEBvcHRzLCAkX1skaSsxXSBpZiAoJGNiID09IDIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBAb3B0czsKK30KZGlmZiAtLWdpdCBhL2xvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsIGIvbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWE2NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsCkBAIC0wLDAgKzEsMzMzIEBACisjISAvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6Q29weTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBJTzo6RmlsZTsKK3VzZSBHZXRvcHQ6OlN0ZDsKKworbXkgJElEX05PUkVBRCAgPSAiTkVUU05NUF9OT19SRUFEX1NVUFBPUlQiOworbXkgJElEX05PV1JJVEUgPSAiTkVUU05NUF9OT19XUklURV9TVVBQT1JUIjsKKyMgbXkgJElEX01JTiAgICAgPSAiTkVUU05NUF9NSU5JTUFMX0NPREUiOworCitteSgkU1RfT0ZGLCAkU1RfSUYsICRTVF9FTFNFLCAkU1RfSUZOLCAkU1RfRUxTRU4pID0KKyAgKCJvZmYiLCAiaWYiLCAiZWxzZSIsICJpZm5vdCIsICJlbHNlbm90Iik7CisKK215ICVvcHRzICAgID0gKCk7CitteSAldGhhc2ggICA9ICgpOworbXkgJGNhbndyaXRlID0gMTsgIyBjdXJyZW50IHdyaXRlIHN0YXRlCisKK215KCRhcHBuYW1lLCRhcHBwYXRoKSA9IGZpbGVwYXJzZSgkMCk7CisKK215ICRtaW5pbWFsX2luY2x1ZGVfcGF0aCA9ICJpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgiOworCisKK2lmICggKCFnZXRvcHRzKCJyd21pOnYiLFwlb3B0cykpIHx8ICgxICE9ICQjQVJHVikgKSB7CisgIHByaW50ICIkYXBwbmFtZSBbb3B0aW9uc10gZnJvbS1kaXJlY3RvcnkgdG8tZGlyZXBjdG9yeVxuIjsKKyAgcHJpbnQgIi1yICAgICBwYXJzZSBvdXQgY29kZSB1bm5lZWRlZCBieSAkSURfTk9SRUFEIGlmZGVmXG4iOworICBwcmludCAiLXcgICAgIHBhcnNlIG91dCBjb2RlIHVubmVlZGVkIGJ5ICRJRF9OT1dSSVRFIGlmZGVmIChERUZBVUxUKVxuIjsKKyAgcHJpbnQgIi1tICAgICBwYXJzZSBvdXQgY29kZSB1bm5lZWRlZCBhY2NvcmRpbmcgbWluaW1hbGlzdCBpZmRlZnNcbiI7CisgIHByaW50ICIgICAgICAgcmVxdWlyZXMgZnJvbS1kaXJlY3RvcnkgdG8gYmUgdGhlIHRvcCBvZiB0aGUgbmV0LXNubXAgdHJlZVxuIjsKKyAgcHJpbnQgIiAgICAgICAoVGhpcyBpcyBtdWx0aXBsZSBpZmRlZnMgYXV0byBzZWxlY3RlZCBkZXBlbmRpbmdcbiI7CisgIHByaW50ICIgICAgICAgIG9uIHRoZSBuZXQtc25tcCBzb3VyY2UgY29uZmlndXJhdGlvbilcblxuIjsKKyAgcHJpbnQgIi1pICdpZ25vcmUtZmlsZScgIGZpbGUgb2YgZmlsZXMgdG8gaWdub3JlIChub3QgY29weSlcbiI7CisgIHByaW50ICItdiAgICAgcHJpbnQgdmVyYm9zZSBpbmZvIHRvIHN0YW5kYXJkIG91dFxuIjsKKyAgZGllICJFcnJvcjogdHdvIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgcmVxdWlyZWRcbiI7Cit9CisKKyNkZWZhdWx0IHRvIGV2ZXJ5dGhpbmcKK2lmICggKCFleGlzdHMgJG9wdHN7cn0pICYmICghZXhpc3RzICRvcHRze3d9KSAmJiAoIWV4aXN0cyAkb3B0c3ttfSkgKSB7CisgICR0aGFzaHsiJElEX05PV1JJVEUifSA9ICIkU1RfT0ZGIjsKK30KK2Vsc2UgeworICAkdGhhc2h7IiRJRF9OT1JFQUQifSAgPSAiJFNUX09GRiIgaWYgKCBleGlzdHMgJG9wdHN7cn0gKTsKKyAgJHRoYXNoeyIkSURfTk9XUklURSJ9ID0gIiRTVF9PRkYiIGlmICggZXhpc3RzICRvcHRze3d9ICk7Cit9CisKK215ICRmcm9tZGlyID0gJEFSR1ZbMF07CitteSAkdG9kaXIgICA9ICRBUkdWWzFdOworCitpZiAoICEoLWUgJGZyb21kaXIpICkgeworICBkaWUgIkVycm9yOiAkYXBwbmFtZTogZnJvbSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3Q6ICckZnJvbWRpcidcbiI7Cit9CitpZiAoICEoLWQgJGZyb21kaXIpICkgeworICAgIGRpZSAiRXJyb3I6ICRhcHBuYW1lOiBmcm9tIGRpcmVjdG9yeSwgJyRmcm9tZGlyJywgbXVzdCBiZSBhIGRpcmVjdG9yeVxuIjsKK30KKworaWYgKCBleGlzdHMgJG9wdHN7bX0gKSB7CisgICAgbG9hZF9taW5hbWFsX2lmZGVmcygpOworfQorCisjIGNyZWF0ZSBzZWFyY2ggc3RyaW5nIGZyb20gdGFncworIyBtaW5pbWFsIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhpcworbXkgJHNlYXJjaCA9IGpvaW4gInwiLCAoa2V5cyAldGhhc2gpOworCisKKyMgY2hlY2sgZm9yIGFuZCBsb2FkIGlnbm9yZSBmaWxlCitteSAkaWdzdHJpbmcgPSAiIjsKK2lmICggZXhpc3RzICRvcHRze2l9ICkgeworICBvcGVuIG15KCRJSCksICI8ICRvcHRze2l9IiBvcgorICAgIGRpZSAiQ291bGQgbm90IG9wZW4gaWdub3JlLWZpbGUgJyRvcHRze2l9JzogJCEiOworICBteSBAaWdsaXN0ID0gPCRJSD47CisgICRJSC0+Y2xvc2UoKTsKKyAgY2hvbXAgQGlnbGlzdDsKKyAgJGlnc3RyaW5nID0gam9pbiAifCIsIEBpZ2xpc3Q7CisgICRpZ3N0cmluZyA9ICIoIiAuICRpZ3N0cmluZyAuICIpIjsKKyAgcHJpbnQgImlnbm9yZSBzdHJpbmc6IFwnJGlnc3RyaW5nXCdcbiIgaWYgKGV4aXN0cyAkb3B0c3t2fSk7Cit9CisKKworCitpZiAoIC1lICR0b2RpciApIHsKKyAgaWYgKCAoKC1kICRmcm9tZGlyKSAmJiAhKC1kICR0b2RpcikpIHx8CisJICAgKCEoLWQgJGZyb21kaXIpICYmICgtZCAkdG9kaXIpKSApIHsKKwlkaWUgIkVycm9yOiAkYXBwbmFtZTogZnJvbS1kaXJlY3RvcnkgYW5kIHRvLWRpcmVjdG9yeSBtdXN0IGJvdGggZWl0aGVyIGJlIGEgZmlsZSBvciBib3RoIGJlIGEgZGlyZWN0b3J5XG4iOworICB9Cit9CitlbHNlIHsKKyAgaWYgKC1kICRmcm9tZGlyKSB7CisJcHJpbnQgIldhcm5pbmc6ICRhcHBuYW1lOiAnJHRvZGlyJyBkb2VzIG5vdCBleGlzdCwgY3JlYXRpbmdcbiI7CisJbWtkaXIgIiR0b2RpciIgb3IKKyAgICAgIGRpZSAiRXJyb3I6ICRhcHBuYW1lOiBVbmFibGUgdG8gY3JlYXRlIHRvLWRpcmVjdG9yeSAnJHRvZGlyJzogJCFcbiI7CisgIH0KK30KKworaWYgKC1kICRmcm9tZGlyKSB7CisgIHBhcnNlZGlyZWN0b3J5KCRmcm9tZGlyLCAkdG9kaXIpOworfQorZWxzZSB7CisgIHBhcnNlZmlsZSgkZnJvbWRpciwgJHRvZGlyKTsKK30KKworCisKK2V4aXQoMCk7CisKKworIyBQUk9DRURVUkVTICBQUk9DRURVUkVTICBQUk9DRURVUkVTICBQUk9DRURVUkVTICBQUk9DRURVUkVTCisKKworc3ViIHBhcnNlZGlyZWN0b3J5IHsKKyAgbXkoJGZkaXIsICR0ZGlyKSA9IEBfOworCisgIG15IEBsZGlycyA9ICgpOworICBteSAkREg7CisgIG9wZW5kaXIgbXkoJERIKSwgJGZkaXIgb3IgZGllICJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyRmZGlyJzogJCEiOworICBpZiAoICEoLWUgJHRkaXIpIHx8ICEoLWQgJHRkaXIpICkgeworICAgIG1rZGlyICR0ZGlyIG9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyR0ZGlyJzogJCEiOworICB9CisgIG15IEBmbGlzdCA9IHJlYWRkaXIgJERIOworICBjbG9zZWRpciAkREg7CisgICMgcmVtb3ZlIC4gYW5kIC4uCisgIEBmbGlzdCA9IGdyZXAgKCEgLyheXC4kfF5cLlwuJCkvICwgQGZsaXN0KTsKKworICB3aGlsZSAobXkgJG5hbWUgPSBzaGlmdCBAZmxpc3QpIHsKKyAgICBpZiAoLWQgIiRmZGlyLyRuYW1lIikgeworICAgICAgcHVzaCBAbGRpcnMsICIkbmFtZSI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcGFyc2VmaWxlKCIkZmRpci8kbmFtZSIsICIkdGRpci8kbmFtZSIpOworICAgIH0KKyAgfQorCisgIHdoaWxlIChteSAkbmFtZSA9IHNoaWZ0IEBsZGlycykgeworICAgIHBhcnNlZGlyZWN0b3J5KCIkZmRpci8kbmFtZSIsICIkdGRpci8kbmFtZSIpCisgIH0KKworfSAjIHBhcnNlZGlyZWN0b3J5CisKKworIyByZXR1cm5zIDEgaWYgY3VycmVudCBzdGF0ZSBmb3IgdGFnIGlzIHdyaXRlLCAwIG90aGVyd2lzZQorc3ViIGlzd3JpdGVzdGF0ZSB7CisgIG15ICR0YWcgPSAiIjsKKworICBmb3JlYWNoICR0YWcgKGtleXMgJXRoYXNoKSB7CisJaWYgKCAoJHRoYXNoeyR0YWd9IGVxICIkU1RfRUxTRSIpIHx8CisJCSAoJHRoYXNoeyR0YWd9IGVxICIkU1RfSUZOIikgKSB7CisJICByZXR1cm4oMCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuKDEpOworfSAjIGlzd3JpdGVzdGF0ZQorCisKKyMgQ2hlY2sgJGxpbmUgZm9yIGlmZGVmIHN0YXRlIGNoYW5nZXMgZm9yIGFsbCBvZiB0aGUgdGFncyBhbmQgY2hhbmdlCisjIHN0YXRlLgorIyBJZiB0aGVyZSBpcyBhIHN0YXRlIGNoYW5nZSBlcnJvciByZXR1cm4gMCwgb3RoZXJ3aXNlIHJldHVybiAxOworCitzdWIgY2hlY2tpZmRlZiB7CisgIG15KCRURiwgJGxpbmUsICRmcm9tZmlsZW5hbWUpID0gQF87CisKKyAgaWYgKCAkbGluZSA9fiAvKCNpZmRlZnwjaWZuZGVmfCNlbHNlfCNlbmRpZikuKigkc2VhcmNoKShcc3wkfFwqKS8gKSB7CisgICAgbXkgJGNvcHQgPSAkMTsKKyAgICBteSAkdGFnICA9ICQyOworCisJaWYgKCAkY29wdCBlcSAiI2lmZGVmIiApIHsKKyAgICAgIGlmICgkdGhhc2h7IiR0YWcifSBlcSAiJFNUX09GRiIpIHsKKyAgICAgICAgJHRoYXNoeyIkdGFnIn0gPSAiJFNUX0lGIjsKKyAgICAgICAgcHJpbnQgInN0YXRlIGNoYW5nZSAkdGFnOiAkU1RfT0ZGIC0+ICRTVF9JRlxuIiBpZiAoZXhpc3RzICRvcHRze3Z9KTsKKyAgICAgICAgJGNhbndyaXRlID0gaXN3cml0ZXN0YXRlKCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgIkVycm9yOiAkZnJvbWZpbGVuYW1lOiBGb3VuZCAnI2lmZGVmICR0YWcnIHdpdGggc3RhdGUgJHRoYXNoeyR0YWd9XG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzaWYgKCAkY29wdCBlcSAiI2lmbmRlZiIgKSB7CisgICAgICBpZiAoJHRoYXNoeyIkdGFnIn0gZXEgIiRTVF9PRkYiKSB7CisgICAgICAgICMgYmVmb3JlIGNoYW5naW5nIHRvIGEgbm9uLXdyaXRlIHN0YXRlIChpZm4pIHByaW50ICNJRk5ERUYKKyAgICAgICAgIyBsaW5lLCBpZiBjdXJyZW50IHN0YXRlIGlzIGEgd3JpdGUgc3RhdGUuCisgICAgICAgIHByaW50ICRURiAiJGxpbmUiICBpZiAoICRjYW53cml0ZSApOworICAgICAgICAkdGhhc2h7IiR0YWcifSA9ICIkU1RfSUZOIjsKKyAgICAgICAgcHJpbnQgInN0YXRlIGNoYW5nZSAkdGFnOiAkU1RfT0ZGIC0+ICRTVF9JRk5cbiIgaWYgKGV4aXN0cyAkb3B0c3t2fSk7CisgICAgICAgICRjYW53cml0ZSA9IGlzd3JpdGVzdGF0ZSgpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHByaW50ICJFcnJvcjogJGZyb21maWxlbmFtZTogRm91bmQgJyNpZm5kZWYgJHRhZycgd2l0aCBzdGF0ZSAkdGhhc2h7JHRhZ31cbiI7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBlbHNpZiAoICRjb3B0IGVxICIjZWxzZSIgKSB7CisgICAgICBpZiAoJHRoYXNoeyIkdGFnIn0gZXEgIiRTVF9JRiIpIHsKKyAgICAgICAgIyBiZWZvcmUgY2hhbmdpbmcgdG8gYSBub24td3JpdGUgc3RhdGUgKGVsc2UpIHByaW50ICNlbHNlCisgICAgICAgICMgbGluZSwgaWYgY3VycmVudCBzdGF0ZSBpcyBhIHdyaXRlIHN0YXRlLgorICAgICAgICBwcmludCAkVEYgIiRsaW5lIiAgaWYgKCAkY2Fud3JpdGUgKTsKKyAgICAgICAgJHRoYXNoeyIkdGFnIn0gPSAiJFNUX0VMU0UiOworICAgICAgICBwcmludCAic3RhdGUgY2hhbmdlICR0YWc6ICRTVF9JRiAtPiAkU1RfRUxTRVxuIiBpZiAoZXhpc3RzICRvcHRze3Z9KTsKKyAgICAgICAgJGNhbndyaXRlID0gaXN3cml0ZXN0YXRlKCk7CisgICAgICB9CisgICAgICBlbHNpZiAoJHRoYXNoeyIkdGFnIn0gZXEgIiRTVF9JRk4iKSB7CisgICAgICAgICR0aGFzaHsiJHRhZyJ9ID0gIiRTVF9FTFNFTiI7CisgICAgICAgIHByaW50ICJzdGF0ZSBjaGFuZ2UgJHRhZzogJFNUX0lGTiAtPiAkU1RfRUxTRU5cbiIgaWYgKGV4aXN0cyAkb3B0c3t2fSk7CisgICAgICAgICRjYW53cml0ZSA9IGlzd3JpdGVzdGF0ZSgpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHByaW50ICJFcnJvcjogJGZyb21maWxlbmFtZTogRm91bmQgJyNlbHNlICguLi4pICR0YWcnIHdpdGggc3RhdGUgJHRoYXNoeyR0YWd9XG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzaWYgKCAkY29wdCBlcSAiI2VuZGlmIiApIHsKKyAgICAgIGlmICgoJHRoYXNoeyIkdGFnIn0gZXEgIiRTVF9FTFNFIikgIHx8ICgkdGhhc2h7IiR0YWcifSBlcSAiJFNUX0lGIikgfHwKKyAgICAgICAgICAoJHRoYXNoeyIkdGFnIn0gZXEgIiRTVF9FTFNFTiIpIHx8ICgkdGhhc2h7IiR0YWcifSBlcSAiJFNUX0lGTiIpKQorICAgICAgeworICAgICAgICBwcmludCAic3RhdGUgY2hhbmdlICR0YWc6ICR0aGFzaHskdGFnfSAtPiAkU1RfT0ZGXG4iCisgICAgICAgICAgaWYgKGV4aXN0cyAkb3B0c3t2fSk7CisgICAgICAgICR0aGFzaHsiJHRhZyJ9ID0gIiRTVF9PRkYiOworICAgICAgICAkY2Fud3JpdGUgPSBpc3dyaXRlc3RhdGUoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBwcmludCAiRXJyb3I6IEZvdW5kICcjZW5kaWYgKC4uLikgJHRhZycgd2l0aCBzdGF0ZSAkdGhhc2h7JHRhZ31cbiI7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICB9ICMgZm9yZWFjaCB0YWcKKworICByZXR1cm4gMTsKK30gIyBjaGVja2lmZGVmCisKKworc3ViIHBhcnNlZmlsZSB7CisgIG15KCRmbmFtZSwgJHRuYW1lKSA9IEBfOworICBteSAkRkY7IG15ICRURjsKKyAgbXkgQGZyb21maWxlID0gKCk7CisgICRjYW53cml0ZSA9IDE7CisKKyAgIyBpZ25vcmUgZmlsZSBmb3IgZmlsZSBuYW1lcworICBpZiAoIChleGlzdHMgJG9wdHN7aX0pICYmICgiJGZuYW1lIiA9fiAgLyRpZ3N0cmluZy8pICkgeworICAgIHByaW50ICJJR05PUklORyAkZm5hbWVcbiIgIGlmICggZXhpc3RzICRvcHRze3Z9ICk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBwcmludCAiSW5mbzogT3BlbmluZyAnJGZuYW1lJ1xuIiBpZiAoIGV4aXN0cyAkb3B0c3t2fSApOworICBpZiAoICEob3BlbigkRkYsICI8ICRmbmFtZSIpKSApIHsKKwlwcmludCAiV2FybmluZzogdW5hYmxlIHRvIG9wZW4gaW5wdXQgZmlsZSwgc2tpcHBpbmc6ICckZm5hbWUnOiAkIVxuIjsKKwlyZXR1cm4gMDsKKyAgfQorCisgIG15IEBmcm9tZmlsZSA9IDwkRkY+OworICAkRkYtPmNsb3NlKCk7CisKKyAgaWYgKCAhKG9wZW4oJFRGLCAiPiAkdG5hbWUiKSkgKSB7CisJcHJpbnQgIldhcm5pbmc6IHVuYWJsZSB0byBvcGVuIG91dHB1dCBmaWxlLCBza2lwcGluZzogJyR0bmFtZSc6ICQhXG4iOworCXJldHVybiAwOworICB9CisgIG15ICRtb2RlID0gKHN0YXQoIiRmbmFtZSIpKVsyXTsKKyAgaWYgKCRtb2RlKSB7IG15ICRyZXNwID0gY2htb2QgJG1vZGUsICIkdG5hbWUiOyB9CisKKyAgbXkgJGxpbmUgICA9ICIiOworICBteSBAdG91dCAgPSAoKTsKKyAgbXkgJHJldHZhbCA9IDE7CisKKyAgd2hpbGUgKCAkbGluZSA9IHNoaWZ0IEBmcm9tZmlsZSApIHsKKyAgICAjIGNoZWNrIGZvciBhbnkgaWZkZWYgc3RhdGUgY2hhbmdlcworCWlmICggISBjaGVja2lmZGVmKCRURiwgJGxpbmUsICRmbmFtZSkgKSB7CisgICAgICAkRkYtPmNsb3NlKCk7CisgICAgICAkVEYtPmNsb3NlKCk7CisgICAgICBkaWUgIkVycm9yOiB0YWcgZXJyb3IgaW4gZmlsZSBcJyRmbmFtZVwnLCBleGl0aW5nXG4iOworICAgIH0KKworICAgIGlmICggJGNhbndyaXRlICkgeworCSAgcHJpbnQgJFRGICIkbGluZSI7CisJfQorCWVsc2UgeworCSAgcHJpbnQgIkluZm86IG5vdCBjb3B5aW5nOiAkZm5hbWU6ICRsaW5lIiBpZiAoIGV4aXN0cyAkb3B0c3t2fSApOworICAgIH0KKworICB9CisKKyAgaWYgKCEgJGNhbndyaXRlKSB7CisgICAgICBwcmludCAiRW5kIG9mICRmbmFtZSByZWFjaGVkIGFuZCB3ZSdyZSBub3QgcmVzZXQgaW50byAnY2Fud3JpdGUnIHN0YXRlXG4iOworICB9CisgICRURi0+Y2xvc2UoKTsKKworICByZXR1cm4gJHJldHZhbDsKK30gIyBwYXJzZWZpbGUKKworCisjIG5vdGUsIGZyb21kaXIgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNoZWNrZWQgdG8gZXhpc3QgYW5kIGJlIGEKKyMgZGlyZWN0b3J5CitzdWIgbG9hZF9taW5hbWFsX2lmZGVmcyB7CisgICAgbXkgQGZpbGVsaXN0ID0gKCk7CisgICAgbXkgJE1GOworICAgIAorICAgIGlmICggIShvcGVuKCRNRiwgIjwgJGZyb21kaXIvJG1pbmltYWxfaW5jbHVkZV9wYXRoIikpICkgeworICAgICAgICBkaWUgIlVuYWJsZSB0byBvcGVuIG1haW4gbWluaW1hbCBmZWF0dXJlIGZpbGU6ICckZnJvbWRpci8kbWluaW1hbF9pbmNsdWRlX3BhdGgnXG4iOworICAgIH0KKyAgICBteSAkbGluZTsKKyAgICAjIHNraXAgcHJlY2VkaW5nIGxpbmVzCisgICAgd2hpbGUgKCAoJGxpbmUgPSA8JE1GPikgJiYKKyAgICAgICAgICAgICgkbGluZSAhfiAvXiNlbHNlLipORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcvICkgKSB7CisgICAgfQorICAgICMgZ3JhYiB0aGUgZmV0YXVyZSAuaCBmaWxlcworICAgIHdoaWxlICggKCRsaW5lID0gPCRNRj4pICYmCisgICAgICAgICAgICAoJGxpbmUgIX4gL14jZW5kaWYuKk5FVF9TTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcvKSApIHsKKyAgICAgICAgaWYgKCRsaW5lID1+IC9pbmNsdWRlLio8KC4qLmgpPi8pIHsKKyAgICAgICAgICAgIHB1c2ggQGZpbGVsaXN0LCAkMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsb3NlKCRNRik7CisKKyAgICB3aGlsZSAobXkgJGZuYW1lID0gc2hpZnQgQGZpbGVsaXN0KSB7CisgICAgICAgIGlmICggISggLWUgIiRmcm9tZGlyL2luY2x1ZGUvJGZuYW1lIiApICkgIHsKKyAgICAgICAgICAgIHByaW50ICJXYXJuOiBmZWF0dXJlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nOiAnJGZyb21kaXIvaW5jbHVkZS8kZm5hbWUnIjsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhKG9wZW4oJE1GLCAiPCAkZnJvbWRpci9pbmNsdWRlLyRmbmFtZSIpKSApIHsKKyAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIG9wZW4gbWluaW1hbCBmZWF0dXJlIGZpbGU6ICckZnJvbWRpci9pbmNsdWRlLyRmbmFtZSdcbiI7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCAoJGxpbmUgPSA8JE1GPikgKSB7CisgICAgICAgICAgICBpZiAoICRsaW5lID1+IC9eI2RlZmluZS4qKE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVbXiBdKykgLyApIHsKKyAgICAgICAgICAgICAgICAkdGhhc2h7IiQxIn0gPSAkU1RfT0ZGOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb3NlKCRNRik7CisgICAgfQorICAgICAgICAKK30gIyBsb2FkX21pbmFtYWxfaWZkZWZzCisKKworCisKZGlmZiAtLWdpdCBhL2xvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzIGIvbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjZDY1NAotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzCkBAIC0wLDAgKzEsMzU5IEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2UgR2V0b3B0OjpTdGQ7Cit1c2UgSU86OkZpbGU7CitvdXIgJW9wdHMgPSAoZCA9PiAnc2l6ZS10ZXN0cycpOworCisjIGRlZmF1bHQgYXJndW1lbnRzIGdvIGhlcmUKK215IEBzZXRzID0KKyAgICAoeworCSJ3aXRoLWRlZmF1bHRzIiA9PiAnJywKKyAgICAgfSk7CisKK215ICViYXNlX2FyZ3MgPSAleyRzZXRzWzBdfTsKK215ICgkYmFzZW5hbWUsICRiYXNlbnVtKTsKKworZ2V0b3B0cygndDpobGNEOm5qOm86ZWI6VCcsIFwlb3B0cykgfHwgdXNhZ2UoKTsKKworJG9wdHN7J2onfSA9ICItaiRvcHRze2p9IiBpZiAoZXhpc3RzKCRvcHRzeydqJ30pKTsKKwordXNhZ2UoKSBpZiAoJG9wdHN7J2gnfSk7CisKK215IEBhcmd1bWVudHNldHMgPQorICAgICgKKyAgICAgeworCSB0aXRsZSA9PiAnc2VjdXJpdHktdHlwZXMnLAorCSBhcmd1bWVudHMgPT4KKwkgeworCSAgICAgdXNtID0+IHsKKwkJICd3aXRoLXNlY3VyaXR5LW1vZHVsZXMnID0+ICd1c20nLAorCSAgICAgfSwKKwkgICAgIGR0bHNhbmR0bHMgPT4geworCQkgJ3dpdGgtc2VjdXJpdHktbW9kdWxlcycgICAgID0+ICd0c20nLAorCQkgJ3dpdGgtb3V0LXNlY3VyaXR5LW1vZHVsZXMnID0+ICd1c20nLAorCQkgJ3dpdGgtdHJhbnNwb3J0cycgICAgICAgICAgID0+ICdEVExTVURQIFRMU1RDUCcsCisJCSAnd2l0aC1taWItbW9kdWxlcycgICAgICAgICAgPT4gJ3Rsc3RtLW1pYiB0c20tbWliJworCSAgICAgfSwKKwkgICAgIHVzbWFuZGR0bHNhbmR0bHMgPT4geworCQkgJ3dpdGgtc2VjdXJpdHktbW9kdWxlcycgICAgID0+ICd0c20gdXNtJywKKwkJICd3aXRoLXRyYW5zcG9ydHMnICAgICAgICAgICA9PiAnRFRMU1VEUCBUTFNUQ1AnLAorCQkgJ3dpdGgtbWliLW1vZHVsZXMnICAgICAgICAgID0+ICd0bHN0bS1taWIgdHNtLW1pYicKKwkgICAgIH0KKwkgfQorICAgICB9LAorICAgICB7CisJIHRpdGxlID0+ICdtaW5pbWFsaXN0JywKKwkgYXJndW1lbnRzID0+CisJIHsgCisJICAgICBtaW5pbWFsID0+IHsKKwkJICdlbmFibGUtbWluaW1hbGlzdCcgICAgPT4gJycsCisJICAgICB9LAorCSAgICAgJ25vdC1taW5pbWFsJyA9PiB7CisJICAgICB9CisJIH0KKyAgICAgfSwKKyAgICAgeworCSB0aXRsZSA9PiAnbWliLWxvYWRpbmcnLAorCSBhcmd1bWVudHMgPT4KKwkgeyAKKwkgICAgICd3aXRob3V0LW1pYi1sb2FkaW5nJyA9PiB7CisJCSAnZGlzYWJsZS1taWItbG9hZGluZycgICAgPT4gJycsCisJICAgICB9LAorCSAgICAgJ3dpdGgtbWliLWxvYWRpbmcnID0+IHsKKwkgICAgIH0KKwkgfQorICAgICB9LAorICAgICB7CisJIHRpdGxlID0+ICdkZWJ1Z2dpbmcnLAorCSBhcmd1bWVudHMgPT4KKwkgeyAKKwkgICAgICd3aXRob3V0LWRlYnVnZ2luZycgPT4geworCQkgJ2Rpc2FibGUtZGVidWdnaW5nJyAgICA9PiAnJywKKwkgICAgIH0sCisJICAgICAnd2l0aC1kZWJ1Z2dpbmcnID0+IHsKKwkgICAgIH0KKwkgfQorICAgICB9LAorICAgICB7CisJIHRpdGxlID0+ICdsb2dnaW5nJywKKwkgYXJndW1lbnRzID0+CisJIHsgCisJICAgICAnd2l0aG91dC1sb2dnaW5nJyA9PiB7CisJCSAnd2l0aC1vdXQtZmVhdHVyZXMnICAgID0+ICdsb2dnaW5nJywKKwkgICAgIH0sCisJICAgICAnd2l0aC1sb2dnaW5nJyA9PiB7CisJICAgICB9CisJIH0KKyAgICAgfSwKKyAgICAgeworCSB0aXRsZSA9PiAnYWdlbnQtbWlicycsCisJIGFyZ3VtZW50cyA9PgorCSB7IAorCSAgICAgJ2Z1bGwtYWdlbnQnID0+IHsKKwkgICAgIH0sCisJICAgICAnbWluaS1hZ2VudCcgPT4geworCQkgJ2VuYWJsZS1taW5pLWFnZW50JyA9PiAnJywKKwkgICAgIH0KKwkgfQorICAgICB9LAorICAgICB7CisJIHRpdGxlID0+ICdwcm90b2NvbC1zdXBwb3J0JywKKwkgYXJndW1lbnRzID0+CisJIHsKKwkgICAgICdldmVyeXRoaW5nJyA9PiB7CisJICAgICB9LAorCSAgICAgJ3JlYWQtb25seScgPT4geworCQkgJ2VuYWJsZS1yZWFkLW9ubHknID0+ICcnLAorCSAgICAgfSwKKwkgICAgICdub3RpZnktb25seScgPT4geworCQkgJ2VuYWJsZS1ub3RpZnktb25seScgPT4gJycsCisJICAgICB9CisJIH0KKyAgICAgfSwKKyAgICAgeworCSB0aXRsZSA9PiAncGVybCcsCisJIGFyZ3VtZW50cyA9PgorCSB7IAorCSAgICAgJ3dpdGhvdXQtcGVybC1tb2R1bGVzJyA9PiB7CisJCSAnd2l0aG91dC1wZXJsLW1vZHVsZXMnICAgID0+ICcnLAorCQkgJ2Rpc2FibGUtZW1iZWRkZWQtcGVybCcgPT4gJycsCisJICAgICB9LAorCSAgICAgJ3dpdGgtcGVybC1uby1lbWJlZGRpbmcnID0+IHsKKwkJICd3aXRoLXBlcmwtbW9kdWxlcycgICAgPT4gJycsCisJCSAnZGlzYWJsZS1lbWJlZGRlZC1wZXJsJyA9PiAnJywKKwkgICAgIH0sCisJICAgICAnd2l0aC1wZXJsLWFuZC1lbWJlZGRpbmcnID0+IHsKKwkJICd3aXRoLXBlcmwtbW9kdWxlcycgICAgPT4gJycsCisJCSAnZW5hYmxlLWVtYmVkZGVkLXBlcmwnID0+ICcnLAorCSAgICAgfQorCSB9CisgICAgIH0sCisgICAgKTsKKworIyBtYXAgdGhlc2UgdG8gYSByZWZlcmVuY2FibGUgbG9va3VwIGhhc2gKK215ICVhcmd1bWVudHNldHM7Citmb3JlYWNoIG15ICRzZXQgKEBhcmd1bWVudHNldHMpIHsKKyAgICAkYXJndW1lbnRzZXRzeyRzZXQtPnsndGl0bGUnfX0gPSAkc2V0OworfQorCitpZiAoJG9wdHN7J2wnfSkgeworICAgIHByaW50ICJUeXBlcyBhdmFpbGFibGU6XG4iOworICAgIHByaW50ZigiICAlLTQwLjQwcyAlc1xuIiwgIlRlc3QgVGl0bGUiLCAiTnVtYmVyIG9mIHN1YnRlc3RzIik7CisgICAgcHJpbnRmKCIgICUtNDAuNDBzICVzXG4iLCAiLSIgeCAzOSwgIi0iIHggbGVuZ3RoKCJOdW1iZXIgb2Ygc3VidGVzdHMiKSk7CisgICAgZm9yZWFjaCBteSAkdHlwZSAoQGFyZ3VtZW50c2V0cykgeworCW15IEBrZXlzID0ga2V5cygleyR0eXBlLT57J2FyZ3VtZW50cyd9fSk7CisJcHJpbnRmKCIgICUtNDAuNDBzICVzXG4iLCAkdHlwZS0+eyd0aXRsZSd9LCAkI2tleXMrMSk7CisgICAgfQorICAgIGV4aXQ7Cit9CisKK215ICV0eXBlczsKK2lmICgkb3B0c3sndCd9KSB7CisgICAgbXkgQHR5cGVzID0gc3BsaXQoLyxccyovLCAkb3B0c3sndCd9KTsKKyAgICBmb3JlYWNoIG15ICR0eXBlIChAdHlwZXMpIHsKKwkkdHlwZXN7JHR5cGV9ID0gMTsKKyAgICB9Cit9CisKK2lmICgkb3B0c3snYid9KSB7CisgICAgIyB1c2UgdGhpcyBzZXQgYXMgdGhlIGJhc2UgZGVmYXVsdCBzZXQgb2YgYXJndW1lbnRzCisgICAgKCRiYXNlbmFtZSwgJGJhc2VudW0pID0gKCRvcHRzeydiJ30gPX4gLyguKik6KFxkKykvKTsKKyAgICBpZiAoIWV4aXN0cygkYXJndW1lbnRzZXRzeyRiYXNlbmFtZX0pKSB7CisJcHJpbnRmIFNUREVSUiAiZmFpbGVkIHRvIGZpbmQgc2V0IGZvciAtYiBhcmd1bWVudDogJXNcbiIsICRiYXNlbmFtZTsKKwlleGl0KDEpOworICAgIH0KKyAgICBAc2V0cyA9IGFkZF9pbl9mbGFncygkYXJndW1lbnRzZXRzeyRiYXNlbmFtZX0sIFwlYmFzZV9hcmdzLCAoKSk7CisgICAgQHNldHMgPSBAc2V0c1skYmFzZW51bV07CisgICAgJWJhc2VfYXJncyA9ICV7JHNldHNbMF19OworfQorCitmb3JlYWNoIG15ICRzZXQgKEBhcmd1bWVudHNldHMpIHsKKyAgICBpZiAoISRvcHRzeyd0J30gfHwgZXhpc3RzKCR0eXBlc3skc2V0LT57J3RpdGxlJ319KSkgeworICAgICAgICBpZiAoJGJhc2VuYW1lICYmICRzZXQtPnsndGl0bGUnfSBlcSAkYmFzZW5hbWUpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKwlAc2V0cyA9IGFkZF9pbl9mbGFncygkc2V0LCBcJWJhc2VfYXJncywgQHNldHMpOworICAgIH0KK30KKworaWYgKCRvcHRzeydjJ30pIHsKKyAgICAjIHByaW50IHRoZSBjb25maWd1cmUgZmxhZ3MKKyAgICBmb3JlYWNoIG15ICRzZXQgKEBzZXRzKSB7CisJcHJpbnQgIiRzZXQtPnsndGl0bGUnfTpcbiI7CisJcHJpbnQgIiAiLCBnZW5lcmF0ZV9jb25maWd1cmVfZmxhZ3MoJHNldCksICJcbiI7CisgICAgfQorICAgIGV4aXQ7Cit9CisKK215ICRzdW1tYXJ5ZmlsZTsKK2lmICgkb3B0c3snbyd9ICYmICEkb3B0c3snbid9KSB7CisgICAgJHN1bW1hcnlmaWxlID0gbmV3IElPOjpGaWxlOworICAgICRzdW1tYXJ5ZmlsZS0+b3BlbigiPiRvcHRze299Iik7Cit9CisKK215ICRjb3VudCA9IDA7Citmb3JlYWNoIG15ICRzZXQgKEBzZXRzKSB7CisgICAgJGNvdW50Kys7CisgICAgYnVpbGRfc2V0KCRjb3VudCwgJHNldCk7Cit9CisKK3N1YiBhZGRfaW5fZmxhZ3MgeworICAgIG15ICgkYXJndW1lbnRzZXQsICRiYXNlX2ZsYWdzLCBAY3VycmVudF9mbGFncykgPSBAXzsKKworICAgIG15IEBuZXdfZmxhZ3M7CisKKyAgICAjIGRvIGEgbGluZWFyIHNlYXJjaCBvZiB0aGUgb3B0aW9ucworICAgIGlmICghICRvcHRzeydlJ30pIHsKKwlAbmV3X2ZsYWdzID0gQGN1cnJlbnRfZmxhZ3M7CisJZm9yZWFjaCBteSAkbmV3YXJncyAoa2V5cygleyRhcmd1bWVudHNldC0+eydhcmd1bWVudHMnfX0pKSB7CisJICAgIG15ICVmbGFncyA9ICUkYmFzZV9mbGFnczsKKworCSAgICAkZmxhZ3N7J3RpdGxlJ30gPSAiJGZsYWdzeyd0aXRsZSd9OiRuZXdhcmdzIjsKKworCSAgICBmb3JlYWNoIG15ICRuZXdmbGFnIChrZXlzKCV7JGFyZ3VtZW50c2V0LT57J2FyZ3VtZW50cyd9eyRuZXdhcmdzfX0pKSB7CisKKwkJJGZsYWdzeyRuZXdmbGFnfSAuPSAiICRhcmd1bWVudHNldC0+eydhcmd1bWVudHMnfXskbmV3YXJnc317JG5ld2ZsYWd9IjsKKwkgICAgfQorCSAgICBwdXNoIEBuZXdfZmxhZ3MsIFwlZmxhZ3M7CisJfQorCXJldHVybiBAbmV3X2ZsYWdzOworICAgIH0KKworICAgICMgb3IgYW4gZXhwb25lbnRpYWwgc2VhcmNoCisgICAgZm9yZWFjaCBteSAkZmxhZ3MgKEBjdXJyZW50X2ZsYWdzKSB7CisJZm9yZWFjaCBteSAkbmV3YXJncyAoa2V5cygleyRhcmd1bWVudHNldC0+eydhcmd1bWVudHMnfX0pKSB7CisJICAgIG15ICVmbGFncyA9ICV7JGZsYWdzfTsgICMgY29weSB0aGUgZXhpc3RpbmcgaGFzaC1zZXQgb2YgZmxhZ3MKKwkgICAgCisJICAgIGlmIChleGlzdHMoJGZsYWdzeyd0aXRsZSd9KSkgeworCQkkZmxhZ3N7J3RpdGxlJ30gLj0gIiwgJG5ld2FyZ3MiOworCSAgICB9IGVsc2UgeworCQkkZmxhZ3N7J3RpdGxlJ30gLj0gIiRuZXdhcmdzIjsKKwkgICAgfQorCSAgICBmb3JlYWNoIG15ICRuZXdmbGFnIChrZXlzKCV7JGFyZ3VtZW50c2V0LT57J2FyZ3VtZW50cyd9eyRuZXdhcmdzfX0pKSB7CisKKwkJJGZsYWdzeyRuZXdmbGFnfSAuPSAiICRhcmd1bWVudHNldC0+eydhcmd1bWVudHMnfXskbmV3YXJnc317JG5ld2ZsYWd9IjsKKwkgICAgfQorCisJICAgIHB1c2ggQG5ld19mbGFncywgXCVmbGFnczsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIEBuZXdfZmxhZ3M7Cit9CisKK3N1YiBnZW5lcmF0ZV9jb25maWd1cmVfZmxhZ3MgeworICAgIG15ICgkYXJndW1lbnRzKSA9IEBfOworICAgIG15ICRsaW5lID0gIiI7CisgICAgZm9yZWFjaCBteSAkYXJnIChrZXlzKCUkYXJndW1lbnRzKSkgeworCW5leHQgaWYgKCRhcmcgZXEgJ3RpdGxlJyk7CisJaWYgKCRhcmd1bWVudHMtPnskYXJnfSA9fiAvXlxzKiQvKSB7CisJICAgICRsaW5lIC49ICIgLS0kYXJnIjsKKwl9IGVsc2UgeworCSAgICAkbGluZSAuPSAiIC0tJGFyZz1cIiRhcmd1bWVudHMtPnskYXJnfVwiIjsKKwl9CisgICAgfQorICAgIHJldHVybiAkbGluZTsKK30KKworc3ViIGJ1aWxkX3NldCB7CisgICAgbXkgKCRudW0sICRhcmd1bWVudHMpID0gQF87CisKKyAgICAkbnVtID0gc3ByaW50ZigiJTAzZCIsICRudW0pOworCisgICAgbXkgJGZpbGU7CisKKyAgICBpZiAoISRvcHRzeyduJ30pIHsKKwlta2RpciAkb3B0c3snZCd9IGlmICghIC1kICRvcHRzeydkJ30pOworCWRpZSAiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgJG9wdHN7J2QnfSBkaXJlY3RvcnkiIGlmICghIC1kICRvcHRzeydkJ30pOworCisJJGZpbGUgPSBuZXcgSU86OkZpbGU7CisJJGZpbGUtPm9wZW4oIj4kb3B0c3snZCd9LyRudW0tMC1jbWQtc3VtbWFyeSIpOworCSRmaWxlLT5wcmludCgiQ3JlYXRpbmcgb3V0cHV0IGZvcjogJGFyZ3VtZW50cy0+eyd0aXRsZSd9XG4iKTsKKyAgICB9CisKKyAgICBwcmludCAiPT09PT09PT09PT09PT09PT09PT0gJGFyZ3VtZW50cy0+eyd0aXRsZSd9XG4iOworCisKKyAgICBTeXN0ZW0gKCRmaWxlLCAkbnVtLCAiMS1kaXN0Y2xlYW4iLCAibWFrZSBkaXN0Y2xlYW4iKTsKKyAgICBTeXN0ZW0gKCRmaWxlLCAkbnVtLCAiMi1jb25maWd1cmUiLAorCSAgICAiLi9jb25maWd1cmUgIiAuIGdlbmVyYXRlX2NvbmZpZ3VyZV9mbGFncygkYXJndW1lbnRzKSk7CisgICAgU3lzdGVtICgkZmlsZSwgJG51bSwgIjMtZmVhdHVyZXMiLCAibWFrZSBmZWF0dXJlcyIpOworICAgIFN5c3RlbSAoJGZpbGUsICRudW0sICI0LW1ha2UiLCAibWFrZSAkb3B0c3snaid9Iik7CisgICAgU3lzdGVtICgkZmlsZSwgJG51bSwgIjUtdW51c2VkLWNvZGUiLCAicGVybCBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGUgLWciKTsKKyAgICBTeXN0ZW0gKCRmaWxlLCAkbnVtLCAiNi10ZXN0aW5nIiwgIm1ha2UgLUMgdGVzdGluZyB0ZXN0IikgaWYgKCRvcHRzeydUJ30pOworCisgICAgaWYgKCEkb3B0c3snbid9KSB7CisJYW5hbHl6ZV9zaXplKCRhcmd1bWVudHMtPnsndGl0bGUnfSwgIiRvcHRzeydkJ30vJG51bS05LXJlc3VsdHMiKTsKKyAgICB9Cit9CisKK3N1YiBhbmFseXplX3NpemUgeworICAgIG15ICgkdGl0bGUsICRmaWxlbmFtZSkgPSBAXzsKKworICAgIG15ICRvdXRmaWxlID0gbmV3IElPOjpGaWxlOworICAgICRvdXRmaWxlLT5vcGVuKCI+JGZpbGVuYW1lIik7CisKKyAgICBwcmludCAiUmVzdWx0cyBmb3I6ICR0aXRsZVxuIjsKKyAgICBwcmludGYgJG91dGZpbGUgIlJlc3VsdHMgZm9yOiAkdGl0bGVcbiI7CisgICAgcHJpbnRmICgiJS01MC41MHMgJTEwc1xuIiwgIi0iIHggNDksICItIiB4IDEwKTsKKyAgICBwcmludGYgJG91dGZpbGUgKCIlLTUwLjUwcyAlMTBzXG4iLCAiLSIgeCA0OSwgIi0iIHggMTApOworCisgICAgbXkgJHRvdGFsc2l6ZSA9IDA7CisgICAgZm9yZWFjaCBteSAkYnVpbGRmaWxlIChnbG9iKCJzbm1wbGliLy5saWJzL2xpYiouc28uKi4wLjAiKSwKKwkJCSAgIGdsb2IoImFnZW50Ly5saWJzL2xpYiouc28uKi4wLjAiKSwKKwkJCSAgICJhZ2VudC8ubGlicy9zbm1wZCIpIHsKKworCW15IEBpbmZvID0gc3RhdCgkYnVpbGRmaWxlKTsKKwlwcmludGYgJG91dGZpbGUgKCIlLTUwLjUwcyAlMTBzXG4iLCAkYnVpbGRmaWxlLCAkaW5mb1s3XSk7CisJcHJpbnRmKCIlLTUwLjUwcyAlMTBzXG4iLCAkYnVpbGRmaWxlLCAkaW5mb1s3XSk7CisJJHRvdGFsc2l6ZSArPSAkaW5mb1s3XTsKKyAgICB9CisgICAgcHJpbnRmICRvdXRmaWxlICgiJS01MC41MHMgJTEwc1xuIiwgIi0iIHggNDksICItIiB4IDEwKTsKKyAgICBwcmludGYgJG91dGZpbGUgKCIlLTUwLjUwcyAlMTBzIGJ5dGVzXG4iLCAiVE9UQUwiLCAkdG90YWxzaXplKTsKKworICAgIHByaW50ZigiJS01MC41MHMgJTEwc1xuIiwgIi0iIHggNDksICItIiB4IDEwKTsKKyAgICBwcmludGYoIiUtNTAuNTBzICUxMHMgYnl0ZXNcbiIsICJUT1RBTCIsICR0b3RhbHNpemUpOworCisgICAgaWYgKGRlZmluZWQoJHN1bW1hcnlmaWxlKSkgeworCW15ICRyZXN0cmljdGVkX3RpdGxlID0gJHRpdGxlOworCSRyZXN0cmljdGVkX3RpdGxlID1+IHMvW15hLXpBLVpdL18vZzsKKwlwcmludGYgJHN1bW1hcnlmaWxlICIlMTBzICVzIFxuIiwgJHRvdGFsc2l6ZSwgJHRpdGxlOworICAgIH0KKworICAgIHJldHVybiAkdG90YWxzaXplOworfQorCitzdWIgdXNhZ2UgeworICAgIHByaW50ICJVc2FnZTogJDAgW0ZMQUdTXVxuXG4iOworICAgIHByaW50ICJGTEFHUzpcbiI7CisgICAgcHJpbnQgIiAgLWhcdFx0aGVscFxuIjsKKyAgICBwcmludCAiICAtdCBUWVBFU1x0U2VsZWN0IHR5cGVzIHRvIGFuYWx5emUgKGRlZmF1bHQgPSBhbGwpXG4iOworICAgIHByaW50ICIgIC1sXHRcdExpc3QgYXZhaWxhYmxlIHR5cGVzXG4iOworICAgIHByaW50ICIgIC1jXHRcdFByaW50IHRoZSBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgd291bGQgYmUgdXNlZFxuIjsKKyAgICBwcmludCAiICAtRCBESVJcdFNhdmUgZGF0YSByZXN1bHRzIHRvIHRoaXMgZGlyZWN0b3J5XG4iOworICAgIHByaW50ICIgIC1vIEZJTEVcdFNhdmUgYSBjb21wbGV0ZSBzdW1tYXJ5IGNoYXJ0IHRvIEZJTEVcbiI7IAorICAgIHByaW50ICIgIC1uXHRcdERyeSBydW4gLS0gb25seSBzaG93IHRoZSBjb21tYW5kcyB0byBleGVjdXRlXG4iOworICAgIHByaW50ICIgIC1qIE5VTVx0RXhlY3V0ZSBtYWtlIHdpdGggcGFyYWxsZWwgYnVpbGRpbmcgKC1qTlVNKVxuIjsKKyAgICBwcmludCAiICAtZVx0XHRVc2UgZXhwb25lbnRpYWwgZXhwYW5zaW9uIChhbGwgY29tYm9zKSBvZiB0aGUgcmVxdWVzdGVkIG9wdGlvbnNcbiI7CisgICAgcHJpbnQgIiAgLWIgTkFNRTpOVU1cdFVzZSBOQU1FIGFuZCB0aGUgTlVNJ3RoIHNldCBhcyB0aGUgYmFzZSBhcmd1bWVudHMgdG8gc3RhcnQgZnJvbVxuIjsKKyAgICBwcmludCAiICAtVFx0XHRSdW4gJ21ha2UgdGVzdCcgYXQgZWFjaCBzdGVwIGFzIHdlbGxcbiI7CisgICAgZXhpdDsKK30KKworc3ViIFN5c3RlbSB7CisgICAgbXkgJGZpbGUgID0gc2hpZnQ7CisgICAgbXkgJG51bSAgID0gc2hpZnQ7CisgICAgbXkgJHRpdGxlID0gc2hpZnQ7CisgICAgbXkgJHBpcGUgPSAiIDI+JjEgfCB0ZWUgJG9wdHN7J2QnfS8kbnVtLSR0aXRsZS5vdXRcbiI7CisKKyAgICBwcmludCAiIyMjICIsIGpvaW4oIiAiLCBAXyksICRwaXBlOworICAgIGlmICghJG9wdHN7J24nfSAmJiAkZmlsZSkgeworCXByaW50ICRmaWxlICIjIyMgIiwgam9pbigiICIsIEBfKSwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAoISRvcHRzeyduJ30pIHsKKwlzeXN0ZW0oam9pbigiICIsIEBfKSAuICRwaXBlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9sb2NhbC9uZXQtc25tcC1jZXJ0IGIvbG9jYWwvbmV0LXNubXAtY2VydApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNDVkYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbmV0LXNubXAtY2VydApAQCAtMCwwICsxLDI2OTAgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIDUuOC4wOworCit1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgZ251X2dldG9wdCBub19pZ25vcmVfY2FzZSBwYXNzX3Rocm91Z2gpOwordXNlIEN3ZCBxdyhnZXRjd2QgcmVhbHBhdGgpOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OkNvcHk7Cit1c2UgRmlsZTo6UGF0aDsKK3VzZSBTeXM6Okhvc3RuYW1lOwordXNlIENhcnA7CisKK291ciBAQ0MgPSAoCitbIkFGIiwiQUZHSEFOSVNUQU4iXSwKK1siQVgiLCLDhUxBTkQgSVNMQU5EUyJdLAorWyJBTCIsIkFMQkFOSUEiXSwKK1siRFoiLCJBTEdFUklBIl0sCitbIkFTIiwiQU1FUklDQU4gU0FNT0EiXSwKK1siQUQiLCJBTkRPUlJBIl0sCitbIkFPIiwiQU5HT0xBIl0sCitbIkFJIiwiQU5HVUlMTEEiXSwKK1siQVEiLCJBTlRBUkNUSUNBIl0sCitbIkFHIiwiQU5USUdVQSBBTkQgQkFSQlVEQSJdLAorWyJBUiIsIkFSR0VOVElOQSJdLAorWyJBTSIsIkFSTUVOSUEiXSwKK1siQVciLCJBUlVCQSJdLAorWyJBVSIsIkFVU1RSQUxJQSJdLAorWyJBVCIsIkFVU1RSSUEiXSwKK1siQVoiLCJBWkVSQkFJSkFOIl0sCitbIkJTIiwiQkFIQU1BUyJdLAorWyJCSCIsIkJBSFJBSU4iXSwKK1siQkQiLCJCQU5HTEFERVNIIl0sCitbIkJCIiwiQkFSQkFET1MiXSwKK1siQlkiLCJCRUxBUlVTIl0sCitbIkJFIiwiQkVMR0lVTSJdLAorWyJCWiIsIkJFTElaRSJdLAorWyJCSiIsIkJFTklOIl0sCitbIkJNIiwiQkVSTVVEQSJdLAorWyJCVCIsIkJIVVRBTiJdLAorWyJCTyIsIkJPTElWSUEsIFBMVVJJTkFUSU9OQUwgU1RBVEUgT0YiXSwKK1siQkEiLCJCT1NOSUEgQU5EIEhFUlpFR09WSU5BIl0sCitbIkJXIiwiQk9UU1dBTkEiXSwKK1siQlYiLCJCT1VWRVQgSVNMQU5EIl0sCitbIkJSIiwiQlJBWklMIl0sCitbIklPIiwiQlJJVElTSCBJTkRJQU4gT0NFQU4gVEVSUklUT1JZIl0sCitbIkJOIiwiQlJVTkVJIERBUlVTU0FMQU0iXSwKK1siQkciLCJCVUxHQVJJQSJdLAorWyJCRiIsIkJVUktJTkEgRkFTTyJdLAorWyJCSSIsIkJVUlVOREkiXSwKK1siS0giLCJDQU1CT0RJQSJdLAorWyJDTSIsIkNBTUVST09OIl0sCitbIkNBIiwiQ0FOQURBIl0sCitbIkNWIiwiQ0FQRSBWRVJERSJdLAorWyJLWSIsIkNBWU1BTiBJU0xBTkRTIl0sCitbIkNGIiwiQ0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDIl0sCitbIlREIiwiQ0hBRCJdLAorWyJDTCIsIkNISUxFIl0sCitbIkNOIiwiQ0hJTkEiXSwKK1siQ1giLCJDSFJJU1RNQVMgSVNMQU5EIl0sCitbIkNDIiwiQ09DT1MgKEtFRUxJTkcpIElTTEFORFMiXSwKK1siQ08iLCJDT0xPTUJJQSJdLAorWyJLTSIsIkNPTU9ST1MiXSwKK1siQ0ciLCJDT05HTyJdLAorWyJDRCIsIkNPTkdPLCBUSEUgREVNT0NSQVRJQyBSRVBVQkxJQyBPRiBUSEUiXSwKK1siQ0siLCJDT09LIElTTEFORFMiXSwKK1siQ1IiLCJDT1NUQSBSSUNBIl0sCitbIkNJIiwiQ8OUVEUgRCdJVk9JUkUiXSwKK1siSFIiLCJDUk9BVElBIl0sCitbIkNVIiwiQ1VCQSJdLAorWyJDWSIsIkNZUFJVUyJdLAorWyJDWiIsIkNaRUNIIFJFUFVCTElDIl0sCitbIkRLIiwiREVOTUFSSyJdLAorWyJESiIsIkRKSUJPVVRJIl0sCitbIkRNIiwiRE9NSU5JQ0EiXSwKK1siRE8iLCJET01JTklDQU4gUkVQVUJMSUMiXSwKK1siRUMiLCJFQ1VBRE9SIl0sCitbIkVHIiwiRUdZUFQiXSwKK1siU1YiLCJFTCBTQUxWQURPUiJdLAorWyJHUSIsIkVRVUFUT1JJQUwgR1VJTkVBIl0sCitbIkVSIiwiRVJJVFJFQSJdLAorWyJFRSIsIkVTVE9OSUEiXSwKK1siRVQiLCJFVEhJT1BJQSJdLAorWyJGSyIsIkZBTEtMQU5EIElTTEFORFMgKE1BTFZJTkFTKSJdLAorWyJGTyIsIkZBUk9FIElTTEFORFMiXSwKK1siRkoiLCJGSUpJIl0sCitbIkZJIiwiRklOTEFORCJdLAorWyJGUiIsIkZSQU5DRSJdLAorWyJHRiIsIkZSRU5DSCBHVUlBTkEiXSwKK1siUEYiLCJGUkVOQ0ggUE9MWU5FU0lBIl0sCitbIlRGIiwiRlJFTkNIIFNPVVRIRVJOIFRFUlJJVE9SSUVTIl0sCitbIkdBIiwiR0FCT04iXSwKK1siR00iLCJHQU1CSUEiXSwKK1siR0UiLCJHRU9SR0lBIl0sCitbIkRFIiwiR0VSTUFOWSJdLAorWyJHSCIsIkdIQU5BIl0sCitbIkdJIiwiR0lCUkFMVEFSIl0sCitbIkdSIiwiR1JFRUNFIl0sCitbIkdMIiwiR1JFRU5MQU5EIl0sCitbIkdEIiwiR1JFTkFEQSJdLAorWyJHUCIsIkdVQURFTE9VUEUiXSwKK1siR1UiLCJHVUFNIl0sCitbIkdUIiwiR1VBVEVNQUxBIl0sCitbIkdHIiwiR1VFUk5TRVkiXSwKK1siR04iLCJHVUlORUEiXSwKK1siR1ciLCJHVUlORUEtQklTU0FVIl0sCitbIkdZIiwiR1VZQU5BIl0sCitbIkhUIiwiSEFJVEkiXSwKK1siSE0iLCJIRUFSRCBJU0xBTkQgQU5EIE1DRE9OQUxEIElTTEFORFMiXSwKK1siVkEiLCJIT0xZIFNFRSAoVkFUSUNBTiBDSVRZIFNUQVRFKSJdLAorWyJITiIsIkhPTkRVUkFTIl0sCitbIkhLIiwiSE9ORyBLT05HIl0sCitbIkhVIiwiSFVOR0FSWSJdLAorWyJJUyIsIklDRUxBTkQiXSwKK1siSU4iLCJJTkRJQSJdLAorWyJJRCIsIklORE9ORVNJQSJdLAorWyJJUiIsIklSQU4sIElTTEFNSUMgUkVQVUJMSUMgT0YiXSwKK1siSVEiLCJJUkFRIl0sCitbIklFIiwiSVJFTEFORCJdLAorWyJJTSIsIklTTEUgT0YgTUFOIl0sCitbIklMIiwiSVNSQUVMIl0sCitbIklUIiwiSVRBTFkiXSwKK1siSk0iLCJKQU1BSUNBIl0sCitbIkpQIiwiSkFQQU4iXSwKK1siSkUiLCJKRVJTRVkiXSwKK1siSk8iLCJKT1JEQU4iXSwKK1siS1oiLCJLQVpBS0hTVEFOIl0sCitbIktFIiwiS0VOWUEiXSwKK1siS0kiLCJLSVJJQkFUSSJdLAorWyJLUCIsIktPUkVBLCBERU1PQ1JBVElDIFBFT1BMRSdTIFJFUFVCTElDIE9GIl0sCitbIktSIiwiS09SRUEsIFJFUFVCTElDIE9GIl0sCitbIktXIiwiS1VXQUlUIl0sCitbIktHIiwiS1lSR1laU1RBTiJdLAorWyJMQSIsIkxBTyBQRU9QTEUnUyBERU1PQ1JBVElDIFJFUFVCTElDIl0sCitbIkxWIiwiTEFUVklBIl0sCitbIkxCIiwiTEVCQU5PTiJdLAorWyJMUyIsIkxFU09USE8iXSwKK1siTFIiLCJMSUJFUklBIl0sCitbIkxZIiwiTElCWUFOIEFSQUIgSkFNQUhJUklZQSJdLAorWyJMSSIsIkxJRUNIVEVOU1RFSU4iXSwKK1siTFQiLCJMSVRIVUFOSUEiXSwKK1siTFUiLCJMVVhFTUJPVVJHIl0sCitbIk1PIiwiTUFDQU8iXSwKK1siTUsiLCJNQUNFRE9OSUEsIFRIRSBGT1JNRVIgWVVHT1NMQVYgUkVQVUJMSUMgT0YiXSwKK1siTUciLCJNQURBR0FTQ0FSIl0sCitbIk1XIiwiTUFMQVdJIl0sCitbIk1ZIiwiTUFMQVlTSUEiXSwKK1siTVYiLCJNQUxESVZFUyJdLAorWyJNTCIsIk1BTEkiXSwKK1siTVQiLCJNQUxUQSJdLAorWyJNSCIsIk1BUlNIQUxMIElTTEFORFMiXSwKK1siTVEiLCJNQVJUSU5JUVVFIl0sCitbIk1SIiwiTUFVUklUQU5JQSJdLAorWyJNVSIsIk1BVVJJVElVUyJdLAorWyJZVCIsIk1BWU9UVEUiXSwKK1siTVgiLCJNRVhJQ08iXSwKK1siRk0iLCJNSUNST05FU0lBLCBGRURFUkFURUQgU1RBVEVTIE9GIl0sCitbIk1EIiwiTU9MRE9WQSwgUkVQVUJMSUMgT0YiXSwKK1siTUMiLCJNT05BQ08iXSwKK1siTU4iLCJNT05HT0xJQSJdLAorWyJNRSIsIk1PTlRFTkVHUk8iXSwKK1siTVMiLCJNT05UU0VSUkFUIl0sCitbIk1BIiwiTU9ST0NDTyJdLAorWyJNWiIsIk1PWkFNQklRVUUiXSwKK1siTU0iLCJNWUFOTUFSIl0sCitbIk5BIiwiTkFNSUJJQSJdLAorWyJOUiIsIk5BVVJVIl0sCitbIk5QIiwiTkVQQUwiXSwKK1siTkwiLCJORVRIRVJMQU5EUyJdLAorWyJBTiIsIk5FVEhFUkxBTkRTIEFOVElMTEVTIl0sCitbIk5DIiwiTkVXIENBTEVET05JQSJdLAorWyJOWiIsIk5FVyBaRUFMQU5EIl0sCitbIk5JIiwiTklDQVJBR1VBIl0sCitbIk5FIiwiTklHRVIiXSwKK1siTkciLCJOSUdFUklBIl0sCitbIk5VIiwiTklVRSJdLAorWyJORiIsIk5PUkZPTEsgSVNMQU5EIl0sCitbIk1QIiwiTk9SVEhFUk4gTUFSSUFOQSBJU0xBTkRTIl0sCitbIk5PIiwiTk9SV0FZIl0sCitbIk9NIiwiT01BTiJdLAorWyJQSyIsIlBBS0lTVEFOIl0sCitbIlBXIiwiUEFMQVUiXSwKK1siUFMiLCJQQUxFU1RJTklBTiBURVJSSVRPUlksIE9DQ1VQSUVEIl0sCitbIlBBIiwiUEFOQU1BIl0sCitbIlBHIiwiUEFQVUEgTkVXIEdVSU5FQSJdLAorWyJQWSIsIlBBUkFHVUFZIl0sCitbIlBFIiwiUEVSVSJdLAorWyJQSCIsIlBISUxJUFBJTkVTIl0sCitbIlBOIiwiUElUQ0FJUk4iXSwKK1siUEwiLCJQT0xBTkQiXSwKK1siUFQiLCJQT1JUVUdBTCJdLAorWyJQUiIsIlBVRVJUTyBSSUNPIl0sCitbIlFBIiwiUUFUQVIiXSwKK1siUkUiLCJSw4lVTklPTiJdLAorWyJSTyIsIlJPTUFOSUEiXSwKK1siUlUiLCJSVVNTSUFOIEZFREVSQVRJT04iXSwKK1siUlciLCJSV0FOREEiXSwKK1siQkwiLCJTQUlOVCBCQVJUSMOJTEVNWSJdLAorWyJTSCIsIlNBSU5UIEhFTEVOQSwgQVNDRU5TSU9OIEFORCBUUklTVEFOIERBIENVTkhBIl0sCitbIktOIiwiU0FJTlQgS0lUVFMgQU5EIE5FVklTIl0sCitbIkxDIiwiU0FJTlQgTFVDSUEiXSwKK1siTUYiLCJTQUlOVCBNQVJUSU4iXSwKK1siUE0iLCJTQUlOVCBQSUVSUkUgQU5EIE1JUVVFTE9OIl0sCitbIlZDIiwiU0FJTlQgVklOQ0VOVCBBTkQgVEhFIEdSRU5BRElORVMiXSwKK1siV1MiLCJTQU1PQSJdLAorWyJTTSIsIlNBTiBNQVJJTk8iXSwKK1siU1QiLCJTQU8gVE9NRSBBTkQgUFJJTkNJUEUiXSwKK1siU0EiLCJTQVVESSBBUkFCSUEiXSwKK1siU04iLCJTRU5FR0FMIl0sCitbIlJTIiwiU0VSQklBIl0sCitbIlNDIiwiU0VZQ0hFTExFUyJdLAorWyJTTCIsIlNJRVJSQSBMRU9ORSJdLAorWyJTRyIsIlNJTkdBUE9SRSJdLAorWyJTSyIsIlNMT1ZBS0lBIl0sCitbIlNJIiwiU0xPVkVOSUEiXSwKK1siU0IiLCJTT0xPTU9OIElTTEFORFMiXSwKK1siU08iLCJTT01BTElBIl0sCitbIlpBIiwiU09VVEggQUZSSUNBIl0sCitbIkdTIiwiU09VVEggR0VPUkdJQSBBTkQgVEhFIFNPVVRIIFNBTkRXSUNIIElTTEFORFMiXSwKK1siRVMiLCJTUEFJTiJdLAorWyJMSyIsIlNSSSBMQU5LQSJdLAorWyJTRCIsIlNVREFOIl0sCitbIlNSIiwiU1VSSU5BTUUiXSwKK1siU0oiLCJTVkFMQkFSRCBBTkQgSkFOIE1BWUVOIl0sCitbIlNaIiwiU1dBWklMQU5EIl0sCitbIlNFIiwiU1dFREVOIl0sCitbIkNIIiwiU1dJVFpFUkxBTkQiXSwKK1siU1kiLCJTWVJJQU4gQVJBQiBSRVBVQkxJQyJdLAorWyJUVyIsIlRBSVdBTiwgUFJPVklOQ0UgT0YgQ0hJTkEiXSwKK1siVEoiLCJUQUpJS0lTVEFOIl0sCitbIlRaIiwiVEFOWkFOSUEsIFVOSVRFRCBSRVBVQkxJQyBPRiJdLAorWyJUSCIsIlRIQUlMQU5EIl0sCitbIlRMIiwiVElNT1ItTEVTVEUiXSwKK1siVEciLCJUT0dPIl0sCitbIlRLIiwiVE9LRUxBVSJdLAorWyJUTyIsIlRPTkdBIl0sCitbIlRUIiwiVFJJTklEQUQgQU5EIFRPQkFHTyJdLAorWyJUTiIsIlRVTklTSUEiXSwKK1siVFIiLCJUVVJLRVkiXSwKK1siVE0iLCJUVVJLTUVOSVNUQU4iXSwKK1siVEMiLCJUVVJLUyBBTkQgQ0FJQ09TIElTTEFORFMiXSwKK1siVFYiLCJUVVZBTFUiXSwKK1siVUciLCJVR0FOREEiXSwKK1siVUEiLCJVS1JBSU5FIl0sCitbIkFFIiwiVU5JVEVEIEFSQUIgRU1JUkFURVMiXSwKK1siR0IiLCJVTklURUQgS0lOR0RPTSJdLAorWyJVUyIsIlVOSVRFRCBTVEFURVMiXSwKK1siVU0iLCJVTklURUQgU1RBVEVTIE1JTk9SIE9VVExZSU5HIElTTEFORFMiXSwKK1siVVkiLCJVUlVHVUFZIl0sCitbIlVaIiwiVVpCRUtJU1RBTiJdLAorWyJWVSIsIlZBTlVBVFUiXSwKK1siVkUiLCJWRU5FWlVFTEEsIEJPTElWQVJJQU4gUkVQVUJMSUMgT0YiXSwKK1siVk4iLCJWSUVUIE5BTSJdLAorWyJWRyIsIlZJUkdJTiBJU0xBTkRTLCBCUklUSVNIIl0sCitbIlZJIiwiVklSR0lOIElTTEFORFMsIFUuUy4iXSwKK1siV0YiLCJXQUxMSVMgQU5EIEZVVFVOQSJdLAorWyJFSCIsIldFU1RFUk4gU0FIQVJBIl0sCitbIllFIiwiWUVNRU4iXSwKK1siWk0iLCJaQU1CSUEiXSwKK1siWlciLCJaSU1CQUJXRSJdLAorKTsKKworcGFja2FnZSBOZXRTTk1QOjpUZXJtOworIyBncmF0ZWZ1bGx5IHRha2VuIGZyb20gV2F5bmUgVGhvbXBzb24ncyBUZXJtOjpDb21wbGV0ZQorIyBpZiBuZXdlciBDT1JFIG1vZHVsZXMgY291bGQgYmUgdXNlZCB0aGlzIGNvdWxkIGJlIHJlbW92ZWQKK291cigkY29tcGxldGUsICRleGl0LCAkZG9uZSwgJGtpbGwsICRlcmFzZTEsICRlcmFzZTIsICR0dHlfcmF3X25vZWNobywgJHR0eV9yZXN0b3JlLCAkc3R0eSwgJHR0eV9zYWZlX3Jlc3RvcmUpOworb3VyKCR0dHlfc2F2ZWRfc3RhdGUpID0gJyc7CitDT05GSUc6IHsKKyAgJGV4aXQgICA9ICJcMDAzIjsKKyAgJGRvbmUgICA9ICJcMDA0IjsKKyAgJGtpbGwgICA9ICJcMDI1IjsKKyAgJGVyYXNlMSA9ICAgIlwxNzciOworICAkZXJhc2UyID0gICAiXDAxMCI7CisgIGZvcmVhY2ggbXkgJHMgKHF3KC9iaW4vc3R0eSAvdXNyL2Jpbi9zdHR5KSkgeworICAgIGlmICgteCAkcykgeworICAgICAgJHR0eV9yYXdfbm9lY2hvID0gIiRzIHJhdyAtZWNobyI7CisgICAgICAkdHR5X3Jlc3RvcmUgICAgPSAiJHMgLXJhdyBlY2hvIjsKKyAgICAgICR0dHlfc2FmZV9yZXN0b3JlID0gJHR0eV9yZXN0b3JlOworICAgICAgJHN0dHkgPSAkczsKKyAgICAgIGxhc3Q7CisgICAgfQorICB9Cit9CisKK3N1YiBDb21wbGV0ZSB7CisgIG15KCRwcm9tcHQsICRkZmx0LCAkaGVscCwgJG1hdGNoLCBAY21wX2xzdCk7CisgIG15ICglaGVscCwgJGNtcCwgJHRlc3QsICRsLCBAbWF0Y2gpOworICBteSAoJHJldHVybiwgJHIsICRleGl0dGluZykgPSAoIiIsIDAsIDApOworICBteSAkdGFiOworCisgICRwcm9tcHQgPSBzaGlmdDsKKyAgJGRmbHQgPSBzaGlmdDsKKyAgJGhlbHAgPSBzaGlmdDsKKyAgJG1hdGNoID0gc2hpZnQ7CisKKyAgaWYgKHJlZiAkX1swXSBhbmQgcmVmKCRfWzBdWzBdKSkgeworICAgIEBjbXBfbHN0ID0gQHskX1swXX07CisgIH0gZWxzZSB7CisgICAgQGNtcF9sc3QgPSBAXzsKKyAgfQorICBAY21wX2xzdCA9IG1hcCB7aWYgKHJlZigkXykpIHsgJGhlbHB7JF8tPlswXX09JF8tPlsxXTsgJF8tPlswXX0gZWxzZSB7JF87fX0gQGNtcF9sc3Q7CisKKyAgIyBBdHRlbXB0IHRvIHNhdmUgdGhlIGN1cnJlbnQgc3R0eSBzdGF0ZSwgdG8gYmUgcmVzdG9yZWQgbGF0ZXIKKyAgaWYgKGRlZmluZWQgJHN0dHkgJiYgZGVmaW5lZCAkdHR5X3NhdmVkX3N0YXRlICYmICR0dHlfc2F2ZWRfc3RhdGUgZXEgJycpIHsKKyAgICAkdHR5X3NhdmVkX3N0YXRlID0gcXgoJHN0dHkgLWcgMj4vZGV2L251bGwpOworICAgIGlmICgkPykgeworICAgICAgIyBzdHR5IC1nIG5vdCBzdXBwb3J0ZWQKKyAgICAgICR0dHlfc2F2ZWRfc3RhdGUgPSB1bmRlZjsKKyAgICB9IGVsc2UgeworICAgICAgJHR0eV9zYXZlZF9zdGF0ZSA9fiBzL1xzKyQvL2c7CisgICAgICAkdHR5X3Jlc3RvcmUgPSBxcSgkc3R0eSAiJHR0eV9zYXZlZF9zdGF0ZSIgMj4vZGV2L251bGwpOworICAgIH0KKyAgfQorICBzeXN0ZW0gJHR0eV9yYXdfbm9lY2hvIGlmIGRlZmluZWQgJHR0eV9yYXdfbm9lY2hvOworIExPT1A6IHsKKyAgICBsb2NhbCAkXzsKKyAgICBwcmludCgkcHJvbXB0LCAkcmV0dXJuKTsKKyAgICB3aGlsZSAoKCRfID0gZ2V0YyhTVERJTikpIG5lICJcciIpIHsKKyAgICBDQVNFOiB7CisJIyAoVEFCKSBhdHRlbXB0IGNvbXBsZXRpb24KKwkkXyBlcSAiXHQiICYmIGRvIHsKKwkgIGlmICgkdGFiKSB7CisJICAgIHByaW50KGpvaW4oIlxyXG4iLCAnJywgbWFwIHtleGlzdHMgJGhlbHB7JF99ID8gc3ByaW50ZigiXHQlLTEwLjEwcyAtICVzIiwgJF8sICRoZWxweyRffSkgOgorCQkJCQkgICJcdCRfIn0gZ3JlcCgvXlxRJHJldHVybi8sIEBjbXBfbHN0KSksICJcclxuIik7CisJICAgICR0YWItLTsKKwkgICAgcmVkbyBMT09QOworCSAgfQorCSAgQG1hdGNoID0gZ3JlcCgvXlxRJHJldHVybi8sIEBjbXBfbHN0KTsKKwkgIHVubGVzcyAoJCNtYXRjaCA8IDApIHsKKwkgICAgJGwgPSBsZW5ndGgoJHRlc3QgPSBzaGlmdChAbWF0Y2gpKTsKKwkgICAgZm9yZWFjaCAkY21wIChAbWF0Y2gpIHsKKwkgICAgICB1bnRpbCAoc3Vic3RyKCRjbXAsIDAsICRsKSBlcSBzdWJzdHIoJHRlc3QsIDAsICRsKSkgeworCQkkbC0tOworCSAgICAgIH0KKwkgICAgfQorCSAgICBwcmludCgiXGEiKTsKKwkgICAgcHJpbnQoJHRlc3QgPSBzdWJzdHIoJHRlc3QsICRyLCAkbCAtICRyKSk7CisJICAgICRyID0gbGVuZ3RoKCRyZXR1cm4gLj0gJHRlc3QpOworCSAgfQorCSAgJHRhYisrOworCSAgbGFzdCBDQVNFOworCX07CisKKwkjICheQykgZXhpdAorCSRfIGVxICRleGl0ICYmIGRvIHsKKwkgIHByaW50KCJcclxuYWJvcnRpbmcgYXBwbGljYXRpb24uLi5cclxuIik7CisJICAkZXhpdHRpbmcrKzsKKwkgIHVuZGVmICRyZXR1cm47CisJICBsYXN0IExPT1A7CisJfTsKKworCSMgKF5EKSBkb25lCisJJF8gZXEgJGRvbmUgJiYgZG8geworCSAgdW5kZWYgJHJldHVybjsKKwkgIGxhc3QgTE9PUDsKKwl9OworCisJIyAoPykgc2hvdyBoZWxwIGlmIGF2YWlsYWJsZQorCSRfIGVxICc/JyAmJiBkbyB7CisJICBwcmludCgiXHJcbiRoZWxwXHJcbiIpOworCSAgaWYgKGV4aXN0cyAkaGVscHskcmV0dXJufSkgeworCSAgICBwcmludCgiXHQkcmV0dXJuIC0gJGhlbHB7JHJldHVybn1cclxuIik7CisJICB9IGVsc2UgeworCSAgICBwcmludChqb2luKCJcclxuIiwgbWFwIHtleGlzdHMgJGhlbHB7JF99ID8gIlx0JF8gLSAkaGVscHskX30iIDoKKwkJCQkgICAgICAiXHQkXyJ9IGdyZXAoL15cUSRyZXR1cm4vLCBAY21wX2xzdCkpLCAiXHJcbiIpOworCSAgfQorCSAgcmVkbyBMT09QOworCX07CisKKwkjICheVSkga2lsbAorCSRfIGVxICRraWxsICYmIGRvIHsKKwkgIGlmICgkcikgeworCSAgICAkcgk9IDA7CisJICAgICRyZXR1cm4JPSAiIjsKKwkgICAgcHJpbnQoIlxyXG4iKTsKKwkgICAgcmVkbyBMT09QOworCSAgfQorCSAgbGFzdCBDQVNFOworCX07CisKKwkjIChERUwpIHx8IChCUykgZXJhc2UKKwkoJF8gZXEgJGVyYXNlMSB8fCAkXyBlcSAkZXJhc2UyKSAmJiBkbyB7CisJICBpZiAoJHIpIHsKKwkgICAgcHJpbnQoIlxiIFxiIik7CisJICAgIGNob3AoJHJldHVybik7CisJICAgICRyLS07CisJICB9CisJICBsYXN0IENBU0U7CisJfTsKKworCSMgcHJpbnRhYmxlIGNoYXIKKwlvcmQgPj0gMzIgJiYgZG8geworCSAgJHJldHVybiAuPSAkXzsKKwkgICRyKys7CisJICBwcmludDsKKwkgIGxhc3QgQ0FTRTsKKwl9OworICAgICAgfQorICAgIH0KKworICAgIGlmIChkZWZpbmVkICRyZXR1cm4pIHsKKyAgICAgIGlmIChsZW5ndGgoJHJldHVybikgPT0gMCBvciAkcmV0dXJuIGVxICRkZmx0KSB7CisJJHJldHVybiA9ICRkZmx0OworICAgICAgfSBlbHNpZiAoJG1hdGNoID09ICROZXRTTk1QOjpDZXJ0OjpNQVRDSCBhbmQgc2NhbGFyKGdyZXAgey9eJHJldHVybiQvfSBAY21wX2xzdCkgIT0gMSBvcgorCSAgICAgICAkbWF0Y2ggPT0gJE5ldFNOTVA6OkNlcnQ6OlBSRU1BVENIIGFuZCBzY2FsYXIoZ3JlcCB7JHJldHVybj1+LyRfL30gQGNtcF9sc3QpICE9IDEpIHsKKwkkcgk9IDA7CisJJHJldHVybgk9ICIiOworCXByaW50KCJcclxuQ2hvb3NlIGEgdmFsaWQgb3B0aW9uLCBvciBeRCB0byBleGl0XHJcbiIpOworCXJlZG8gTE9PUDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyBET05FOgorICAjIHN5c3RlbSAkdHR5X3Jlc3RvcmUgaWYgZGVmaW5lZCAkdHR5X3Jlc3RvcmU7CisgIGlmIChkZWZpbmVkICR0dHlfc2F2ZWRfc3RhdGUgJiYgZGVmaW5lZCAkdHR5X3Jlc3RvcmUgJiYgZGVmaW5lZCAkdHR5X3NhZmVfcmVzdG9yZSkgeworICAgIHN5c3RlbSAkdHR5X3Jlc3RvcmU7CisgICAgaWYgKCQ/KSB7CisgICAgICAjIHR0eV9yZXN0b3JlIGNhdXNlZCBlcnJvcgorICAgICAgc3lzdGVtICR0dHlfc2FmZV9yZXN0b3JlOworICAgIH0KKyAgfQorCisgIGV4aXQoMSkgaWYgJGV4aXR0aW5nOworICBwcmludCgiXG4iKTsKKyAgcmV0dXJuICRyZXR1cm47Cit9CisKK3BhY2thZ2UgTmV0U05NUDo6Q2VydDsKKworb3VyICRWRVJTSU9OICAgICAgPSAnMC4yLjknOworCitvdXIgJFBST0cgICAgICAgICA9IDo6YmFzZW5hbWUoJDApOworb3VyICRERUJVRyAgICAgICAgPSAwOworb3VyICRPSyAgICAgICAgICAgPSAwOworb3VyICRFUlIgICAgICAgICAgPSAtMTsKKworIyB1c2VyIGlucHV0IHBhcmFtCitvdXIgJE1BVENIICAgICAgICA9IDE7CitvdXIgJFBSRU1BVENIICAgICA9IDI7CisKKyMgTG9hZCBMV1AgaWYgcG9zc2libGUgdG8gaW1wb3J0IGNlcnQgZnJvbSBVUkwKK2V2YWwoJ3VzZSBMV1A6OlVzZXJBZ2VudDsnKTsKK291ciAkaGF2ZVVzZXJBZ2VudCA9ICgkQCA/IDAgOiAxKTsKKworIyByZXF1aXJlZCBleGVjdXRhYmxlcworb3VyICRPUEVOU1NMICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX09QRU5TU0x9ICB8fCAnb3BlbnNzbCc7CitvdXIgJENGR1RPT0wgICAgID0gJEVOVntORVRfU05NUF9DUlRfQ0ZHVE9PTH0gIHx8ICduZXQtc25tcC1jb25maWcnOworCisjIGRlZmF1bHQgYXBwIGNvbmZpZyBmaWxlCitvdXIgJENGR0ZJTEUgICAgID0gJEVOVntORVRfU05NUF9DUlRfQ0ZHRklMRX0gIHx8ICduZXQtc25tcC1jZXJ0LmNvbmYnOworCisjIGRlZmF1bHQgT3BlblNTTCBjb25maWcgZmlsZXMKK291ciAkU1NMQ0ZHSU4gICAgPSAkRU5We05FVF9TTk1QX0NSVF9TU0xDRkdJTn0gfHwgJ29wZW5zc2wuaW4nOworb3VyICRTU0xDRkdPVVQgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX1NTTENGR0lOfSB8fCAnLm9wZW5zc2wuY29uZic7CitvdXIgJFNTTENGRyAgICAgID0gJEVOVntORVRfU05NUF9DUlRfU1NMQ0ZHfTsKKworIyBkZWZhdWx0IGNtZCBsb2dzCitvdXIgJE9VVExPRyAgICAgID0gJEVOVntORVRfU05NUF9DUlRfT1VUTE9HfSAgIHx8ICcuY21kLm91dC5sb2cnOworb3VyICRFUlJMT0cgICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX0VSUkxPR30gICB8fCAnLmNtZC5lcnIubG9nJzsKKworIyBkZWZhdWx0IGNlcnQgZGlycworb3VyICRUTFNESVIgICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX1RMU0RJUn0gICB8fCAndGxzJzsKK291ciAkQ1JURElSICAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9DUlRESVJ9ICAgfHwgJ2NlcnRzJzsKK291ciAkTkVXQ1JURElSICAgPSAkRU5We05FVF9TTk1QX0NSVF9ORVdDUlRESVJ9fHwgJ25ld2NlcnRzJzsKK291ciAkQ0FESVIgICAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9DQURJUn0gICAgfHwgJ2NhLWNlcnRzJzsKK291ciAkUFJJVkRJUiAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9QUklWRElSfSAgfHwgJ3ByaXZhdGUnOworCitvdXIgJFNFUklBTCAgICAgID0gJEVOVntORVRfU05NUF9DUlRfU0VSSUFMfSAgIHx8ICcuc2VyaWFsJzsKK291ciAkSU5ERVggICAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9JTkRFWH0gICAgfHwgJy5pbmRleCc7CisKK291ciAkREVGQ0FEQVlTICAgPSAkRU5We05FVF9TTk1QX0NSVF9ERUZDQURBWVN9IHx8IDE4MjU7CitvdXIgJERFRkNSVERBWVMgID0gJEVOVntORVRfU05NUF9DUlRfREVGQ1JUREFZU318fCAzNjU7CisKK291ciBAVExTRElSUyAgICAgPSAoJENSVERJUiwgJE5FV0NSVERJUiwgJENBRElSLCAkUFJJVkRJUik7CisKK291ciBAQ1JUU1VGRklYRVMgPSBxdygucGVtIC5jc3IgLmRlciAuY3J0KTsKKworb3VyIEBYNTA5Rk1UUyA9IHF3KHRleHQgbW9kdWx1cyBzZXJpYWwgc3ViamVjdF9oYXNoIGlzc3Vlcl9oYXNoIGhhc2ggc3ViamVjdAorCQkgICAgcHVycG9zZSBpc3N1ZXIgc3RhcnRkYXRlIGVuZGRhdGUgZGF0ZXMgZmluZ2VycHJpbnQgQyk7CisKK3N1YiBkcHJpbnQgeworICBteSAkc3RyID0gc2hpZnQ7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRkbGV2ZWwgPSBzaGlmdCB8fCAxOworICBteSAkZmxhZyA9IChkZWZpbmVkICRvcHRzID8gaW50KCRvcHRzLT57J2RlYnVnJ30gPj0gJGRsZXZlbCkgOiAxKTsKKyAgbXkgKCRwa2csICRmaWxlLCAkbGluZSwgJHN1YikgPSBjYWxsZXIoMSk7CisgIG15ICgkcGtnMCwgJGZpbGUwLCAkbGluZTApID0gY2FsbGVyKDApOworICBwcmludCgiJHtzdWJ9KCk6JGxpbmUwOiAkc3RyIikgaWYgJGZsYWc7Cit9CisKK3N1YiBkd2FybiB7CisgIG15ICRzdHIgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGRsZXZlbCA9IHNoaWZ0IHx8IDE7CisgIG15ICRmbGFnID0gKGRlZmluZWQgJG9wdHMgPyAkb3B0cy0+eydkZWJ1Zyd9ID49ICRkbGV2ZWwgOiAxKTsKKyAgbXkgKCRwa2csICRmaWxlLCAkbGluZSwgJHN1YikgPSBjYWxsZXIoMSk7CisgIG15ICgkcGtnMCwgJGZpbGUwLCAkbGluZTApID0gY2FsbGVyKDApOworICB3YXJuKCIke3N1Yn0oKTokbGluZTA6ICRzdHIiKSBpZiAkZmxhZzsKK30KKworc3ViIHZwcmludCB7CisgIG15ICRzdHIgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGZsYWcgPSAoZGVmaW5lZCAkb3B0cyA/ICRvcHRzLT57J3ZlcmJvc2UnfSA6IDEpOworICBteSAkZGVidWcgPSAoZGVmaW5lZCAkb3B0cyA/ICRvcHRzLT57J2RlYnVnJ30gOiAxKTsKKyAgbXkgKCRwa2csICRmaWxlLCAkbGluZSwgJHN1YikgPSBjYWxsZXIoMSk7CisgIG15ICgkcGtnMCwgJGZpbGUwLCAkbGluZTApID0gY2FsbGVyKDApOworICAkc3RyID0gKCRkZWJ1ZyA/ICIke3N1Yn0oKTokbGluZTA6ICRzdHIiIDogIiRzdHIiKTsKKyAgcHJpbnQoIiRzdHIiKSBpZiAkZmxhZzsKK30KKworc3ViIHZ3YXJuIHsKKyAgbXkgJHN0ciA9IHNoaWZ0OworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkZmxhZyA9IChkZWZpbmVkICRvcHRzID8gJG9wdHMtPnsndmVyYm9zZSd9IDogMSk7CisgIG15ICgkcGtnLCAkZmlsZSwgJGxpbmUsICRzdWIpID0gY2FsbGVyKDEpOworICBteSAoJHBrZzAsICRmaWxlMCwgJGxpbmUwKSA9IGNhbGxlcigwKTsKKyAgd2FybigiJHtzdWJ9KCk6JGxpbmUwOiAkc3RyIikgaWYgJGZsYWc7Cit9CisKK3N1YiByc3lzdGVtIHsKKyAgbXkgJGNtZCA9IHNoaWZ0OworICBteSAkZmxhZyA9IHNoaWZ0OworCisgICMgaWYgbm90IHJ1bm5pbmcgYXMgcm9vdCB0cnkgdG8gdXNlIHN1ZG8KKyAgaWYgKCQ+KSB7CisgICAgJGNtZCA9ICJzdWRvICRmbGFnICRjbWQiOworICB9IGVsc2UgeworICAgIGlmICgkZmxhZyA9fiAvLWIvKSB7CisgICAgICAkY21kID0gIiRjbWQgXCYiOworICAgIH0KKyAgfQorICBkaWUoImNtZCBmYWlsZWQoJCEpOiAkY21kXG4iKSBpZiBzeXN0ZW0oIiRjbWQiKTsKK30KKworc3ViIHVzeXN0ZW0geworICBteSAkY21kID0gc2hpZnQ7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRyZXQ7CisKKyAgdW5saW5rICROZXRTTk1QOjpDZXJ0OjpPVVRMT0cgaWYgLWUgJE5ldFNOTVA6OkNlcnQ6Ok9VVExPRzsKKyAgdW5saW5rICROZXRTTk1QOjpDZXJ0OjpFUlJMT0cgaWYgLWUgJE5ldFNOTVA6OkNlcnQ6OkVSUkxPRzsKKworICAkcmV0ID0gc3lzdGVtKCIkY21kIik7CisKKyAgaWYgKCRyZXQpIHsKKyAgICBpZiAoJG9wdHMtPnsndmVyYm9zZSd9KSB7CisgICAgICBzeXN0ZW0oImNhdCAkTmV0U05NUDo6Q2VydDo6T1VUTE9HIikgaWYgLXIgJE5ldFNOTVA6OkNlcnQ6Ok9VVExPRzsKKyAgICAgIHN5c3RlbSgiY2F0ICROZXRTTk1QOjpDZXJ0OjpFUlJMT0ciKSBpZiAtciAkTmV0U05NUDo6Q2VydDo6RVJSTE9HOworICAgIH0KKyAgICBkaWUoImNtZCBmYWlsZWQoJCEpOiAkY21kXG4iKTsKKyAgfQorfQorCitzdWIgaG9tZV9kaXIgeworICBteSAkY2RpciA9IDo6Z2V0Y3dkKCk7CisKKyAgY2hkaXIoIn4iKTsKKyAgbXkgJGRpciA9IDo6Z2V0Y3dkKCk7CisgIGNoZGlyKCRjZGlyKTsKKworICByZXR1cm4gJGRpcjsKK30KKworc3ViIGZpbmRfYmluX2RpciB7CisgICMgVGhpcyBjb2RlIGZpbmRzIHRoZSBwYXRoIHRvIHRoZSBjdXJyZW50bHkgaW52b2tlZCBwcm9ncmFtIGFuZAorICBteSAkZGlyOworCisgICQwID1+IG0lXigoW14vXSopKC4qKS8pKFteL10rKSQlOworICBpZiAoJDEpIHsKKyAgICBpZiAoJDIpIHsKKyAgICAgICMgSW52b2tlZCB1c2luZyBhIHJlbGF0aXZlIHBhdGguICBDRCB0aGVyZSBhbmQgdXNlIHB3ZC4KKyAgICAgICRkaXIgPSBgY2QgJDEgJiYgcHdkYDsKKyAgICAgIGNob21wICRkaXI7CisgICAgfSBlbHNlIHsKKyAgICAgICMgSW52b2tlZCB1c2luZyBhbiBhYnNvbHV0ZSBwYXRoOyB0aGF0J3MgaXQhCisgICAgICAkZGlyID0gJDM7CisgICAgfQorICB9IGVsc2UgeworICAgICMgTm8gcGF0aC4gIExvb2sgaW4gUEFUSCBmb3IgdGhlIGZpcnN0IGluc3RhbmNlLgorICAgIGZvcmVhY2ggbXkgJHAgKHNwbGl0IC86LywgJEVOVntQQVRIfSkgeworICAgICAgJHAgfHw9ICcuJzsKKyAgICAgIC14ICIkcC8kNCIgb3IgbmV4dDsKKyAgICAgICRkaXIgPSAkcDsKKyAgICB9CisgIH0KKyAgJGRpciBvciBkaWUgIkNhbm5vdCBsb2NhdGUgcHJvZ3JhbSAnJDAnISI7Cit9CisKK3N1YiBmcV9yZWxfcGF0aCB7CisgIG15ICRwYXRoID0gc2hpZnQ7CisgIG15ICRjd2QgPSA6OmdldGN3ZCgpOworICBteSAkcmRpciA9IHNoaWZ0IHx8ICRjd2Q7CisKKyAgY2hkaXIoJHJkaXIpIG9yIGRpZSgiY2FuJ3QgY2hhbmdlIGRpcmVjdG9yeTogJHJkaXIiKTsKKyAgIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGgKKyAgaWYgKCRwYXRoICF+IG18Xi98KSB7CisgICAgbXkgJHB3ZCA9IGBwd2RgOyBjaG9tcCAkcHdkOworICAgICRwYXRoID0gIiRwd2QvJHBhdGgiOworICAgICRwYXRoID0gOjpyZWFscGF0aCgkcGF0aCkgaWYgLWUgJHBhdGg7CisgIH0KKyAgY2hkaXIoJGN3ZCkgb3IgZGllKCJjYW4ndCBjaGFuZ2UgZGlyZWN0b3J5OiAkY3dkIik7CisKKyAgcmV0dXJuICRwYXRoOworfQorCitzdWIgZGlyX2VtcHR5CisgIHsKKyAgICBteSAkcGF0aCA9IHNoaWZ0OworICAgIG9wZW5kaXIoRElSLCAkcGF0aCk7CisgICAgZm9yZWFjaCAocmVhZGRpcihESVIpKSB7CisgICAgICBuZXh0IGlmIC9eXC5cLj8kLzsKKyAgICAgIGNsb3NlZGlyKERJUik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgY2xvc2VkaXIoRElSKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCitzdWIgbWFrZV9kaXJzIHsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGRpciA9IHNoaWZ0OworICBteSAkbW9kZSA9IHNoaWZ0OworICBteSBAZGlycyA9IEBfOworCisgIG15ICR3ZCA9IDo6Z2V0Y3dkKCk7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJtYWtlIGRpcnMgWyRkaXI6QGRpcnNdIGZyb20gJHdkXG4iLCAkb3B0cyk7CisKKyAgOjpta3BhdGgoJGRpciwgJG9wdHMtPnsnZGVidWcnfSwgJG1vZGUpIG9yIGRpZSgiZXJyb3IgLSBjYW4ndCBtYWtlICRkaXIiKQorICAgIGlmIGRlZmluZWQgJGRpciBhbmQgbm90IC1kICRkaXI7CisKKyAgZm9yZWFjaCBteSAkc3ViZGlyIChAZGlycykgeworICAgIG15ICRkID0gIiRzdWJkaXIiOworICAgICRkID0gIiRkaXIvJGQiIGlmIGRlZmluZWQgJGRpcjsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIm1ha2luZyBkaXJlY3Rvcnk6ICRkXG4iLCAkb3B0cykgdW5sZXNzIC1kICRkOworICAgIG1rZGlyKCRkLCAkbW9kZSkgb3IgZGllKCJlcnJvciAtIGNhbid0IG1ha2UgJGQiKSB1bmxlc3MgLWQgJGQ7CisgIH0KK30KKworc3ViIGlzX3VybCB7CisgIG15ICR1cmwgPSBzaGlmdDsKKworICByZXR1cm4gJHVybCA9fiAvXig/I1Byb3RvY29sKSg/Oig/Omh0fGYpdHAoPzpzPylcOlwvXC98flwvfFwvKT8oPyNVc2VybmFtZTpQYXNzd29yZCkoPzpcdys6XHcrQCk/KD8jU3ViZG9tYWlucykoPzooPzpbLVx3XStcLikrKD8jVG9wTGV2ZWwgRG9tYWlucykoPzpjb218b3JnfG5ldHxnb3Z8bWlsfGJpenxpbmZvfG1vYml8bmFtZXxhZXJvfGpvYnN8bXVzZXVtfHRyYXZlbHxbYS16XXsyfSkpKD8jUG9ydCkoPzo6W1xkXXsxLDV9KT8oPyNEaXJlY3RvcmllcykoPzooPzooPzpcLyg/OlstXHd+ISQrfC4sPV18JVthLWZcZF17Mn0pKykrfFwvKSt8XD98Iyk/KD8jUXVlcnkpKD86KD86XD8oPzpbLVx3fiEkK3wuLCo6XXwlW2EtZlxkezJ9XSkrPT8oPzpbLVx3fiEkK3wuLCo6PV18JVthLWZcZF17Mn0pKikoPzomKD86Wy1cd34hJCt8LiwqOl18JVthLWZcZHsyfV0pKz0/KD86Wy1cd34hJCt8LiwqOj1dfCVbYS1mXGRdezJ9KSopKikqKD8jQW5jaG9yKSg/OiMoPzpbLVx3fiEkK3wuLCo6PV18JVthLWZcZF17Mn0pKik/JC87Cit9CisKK3N1YiBpbl9zZXQgeworICBteSAkZWxlbSA9IHNoaWZ0OworICBteSAkc2V0ID0gc2hpZnQ7CisgIGZvciBteSAkZSAoZXZhbCgkc2V0KSkgeworICAgIHJldHVybiAxIGlmICRlID09ICRlbGVtOworICB9CisgIHJldHVybiAwOworfQorCitzdWIgaW5fYXJyIHsKKyAgbXkgJGVsZW0gPSBzaGlmdDsKKyAgbXkgJGFyciA9IHNoaWZ0OworICBmb3IgbXkgJGUgKEB7JGFycn0pIHsKKyAgICByZXR1cm4gMSBpZiAkZSBlcSAkZWxlbTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3ViIG1hcF9ib29sIHsKKyAgbXkgJHZhbCA9IHNoaWZ0OworCisgIHJldHVybiAxIGlmICR2YWwgPX4gL150cnVlJC9pOworICByZXR1cm4gMCBpZiAkdmFsID1+IC9eZmFsc2UkL2k7CisgIHJldHVybiAkdmFsOworfQorCitzdWIgdmVyc2lvbiB7CisgIG15ICRyZXQgPSAoQF8gPyBzaGlmdCA6IDEpOworICBwcmludCAiJE5ldFNOTVA6OkNlcnQ6OlBST0c6ICROZXRTTk1QOjpDZXJ0OjpWRVJTSU9OXG4iOworICBleGl0KCRyZXQpOworfQorCitzdWIgR2V0T3B0c0Zyb21BcnJheSB7CisgIG15ICRhcmdzID0gc2hpZnQ7CisgIGxvY2FsICpBUkdWOworICBAQVJHViA9IEAkYXJnczsKKyAgbXkgJHJldCA9IDo6R2V0T3B0aW9ucyhAXyk7CisgIEAkYXJncyA9IEBBUkdWOyAjIEdldE9wdGlvbnMgc3RyaXBzIG91dCB0aGUgb25lcyBpdCBoYW5kbGVzIGFuZCBsZWF2ZXMgb3RoZXJzCisgIHJldHVybiAkcmV0OworfQorc3ViIHB1bGxfY21kIHsKKyAgbXkgJGFyZ3MgPSBzaGlmdDsKKyAgbXkgJGNtZDsKKworICBmb3JlYWNoIChAeyRhcmdzfSkgeworICAgIGlmICgvXihnZW5jZT9ydHxnZW5jYXxnZW5jc3J8c2lnbmNzcnxzaG93Y2FzP3xzaG93Y2U/cnRzP3xpbXBvcnQpJC8pIHsKKyAgICAgICRjbWQgPSAkMTsKKyAgICB9CisgIH0KKworICBAeyRhcmdzfSA9IGdyZXAgeyEvXiRjbWQkL30gQHskYXJnc307CisKKyAgcmV0dXJuICRjbWQ7Cit9CisKKworc3ViIHVzYWdlIHsKKyAgbXkgJHJldCA9IChAXyA/IHNoaWZ0IDogMSk7CisgIG15ICRhcmcgPSBzaGlmdDsKKworICBwcmludCAiQ29tbWFuZCBub3QgaW1wbG1lbmV0ZWQgeWV0OiAkYXJnXG4iIGlmICRyZXQgPT0gMjsKKyAgcHJpbnQgIlVua25vd246ICRhcmdcbiIgaWYgJHJldCA9PSAzOworICBwcmludCAiXG4gICBOQU1FOlxuIjsKKyAgcHJpbnQgIiAgICAgJE5ldFNOTVA6OkNlcnQ6OlBST0c6IFskTmV0U05NUDo6Q2VydDo6VkVSU0lPTl0gLSAiOworICBwcmludCAiTmV0LVNOTVAgQ2VydGlmaWNhdGUgTWFuYWdlbWVudCBUb29sXG4iOworICBwcmludCAiXG4gICBERVNDUklQVElPTjpcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgY3JlYXRlcywgc2lnbnMsIGluc3RhbGxzIGFuZCBkaXNwbGF5cyBYLjUwOVxuIjsKKyAgcHJpbnQgIiAgICAgY2VydGlmaWNhdGVzIHVzZWQgaW4gdGhlIG9wZXJhdGlvbiBvZiBOZXQtU05NUC8oRClUTFMuXG4iOworICBwcmludCAiXG4gICBTWU5PUFNJUzpcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgWy0taGVscHwtP11cbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgWy0tdmVyc2lvbnwtVl1cbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgZ2VuY2EgICAgWzxmbGFncz5dIFs8ZG4tb3B0cz5dIFstLXdpdGgtY2EgPGNhPl1cbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgZ2VuY2VydCAgWzxmbGFncz5dIFs8ZG4tb3B0cz5dIFstLXdpdGgtY2EgPGNhPl1cbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgZ2VuY3NyICAgWzxmbGFncz5dIFs8ZG4tb3B0cz5dIFstLWZyb20tY3J0IDxjcnQ+XVxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBzaWduY3NyICBbPGZsYWdzPl0gWy0taW5zdGFsbF0gLS1jc3IgPGNzcj4gLS13aXRoLWNhIDxjYT5cbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgc2hvd2NhICAgWzxmbGFncz5dIFs8Zm9ybWF0LW9wdHM+XSBbPGZpbGU+fDxzZWFyY2gtdGFnPl1cbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgc2hvd2NlcnQgWzxmbGFncz5dIFs8Zm9ybWF0LW9wdHM+XSBbPGZpbGU+fDxzZWFyY2gtdGFnPl1cbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgaW1wb3J0ICAgWzxmbGFncz5dIDxmaWxlfHVybD4gWzxrZXk+XVxuIjsKKyAgcHJpbnQgIlxuICAgQ09NTUFORFM6XG4iOworICBwcmludCAiICAgICBnZW5jYSAgICAtLSBnZW5lcmF0ZSBhIHNpZ25lZCBDQSBjZXJ0aWZpY2F0ZSBzdWl0YWJsZSBmb3Igc2lnbmluZyBvdGhlclxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGVzLiBkZWZhdWx0OiBzZWxmLXNpZ25lZCB1bmxlc3MgLS13aXRoLWNhIDxjYT4gc3VwcGxpZWRcblxuIjsKKyAgcHJpbnQgIiAgICAgZ2VuY2VydCAgLS0gZ2VuZXJhdGUgYSBzaWduZWQgY2VydGlmaWNhdGUgc3VpdGFibGUgZm9yIGlkZW50aWZpY2F0aW9uLCBvclxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi4gZGVmYXVsdDogc2VsZi1zaWduZWQgdW5sZXNzIC0td2l0aC1jYSA8Y2E+IHN1cHBsaWVkXG5cbiI7CisgIHByaW50ICIgICAgIGdlbmNzciAgIC0tIGdlbmVyYXRlIGEgY2VydGlmaWNhdGUgc2lnbmluZyByZXF1ZXN0LiB3aWxsIGNyZWF0ZSBhIG5ld1xuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAga2V5IGFuZCBjZXJ0aWZpY2F0ZSB1bmxlc3MgLS1mcm9tLWNydCA8Y3J0PiBzdXBwbGllZFxuXG4iOworICBwcmludCAiICAgICBzaWduY3NyICAtLSBzaWduIGEgY2VydGlmaWNhdGUgc2lnbmluZyByZXF1ZXN0IHNwZWNpZmllZCBieSAtLWNzciA8Y3NyPlxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgd2l0aCB0aGUgQ0EgY2VydGlmaWNhdGUgc3BlY2lmaWVkIGJ5IC0td2l0aC1jYSA8Y2E+XG4iOworICBwcmludCAiICAgICBpbXBvcnQgICAtLSBpbXBvcnQgYW4gaWRlbnRpdHkgb3IgQ0EgY2VydGlmaWNhdGUsIG9wdGlvbmFsbHkgaW1wb3J0IDxrZXk+XG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICBpZiBhbiBVUkwgaXMgcGFzc2VkLCB3aWxsIGF0dGVtcHQgdG8gaW1wb3J0IGNlcnRpZmljYXRlIGZyb20gc2l0ZVxuIjsKKyAgcHJpbnQgIiAgICAgc2hvd2NhLFxuIjsKKyAgcHJpbnQgIiAgICAgc2hvd2NlcnQgLS0gc2hvdyBDQSBvciBpZGVudGl0eSBjZXJ0aWZpY2F0ZShzKS4gbWF5IHBhc3MgZnVsbHkgcXVhbGlmaWVkXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lLCBvciBhIHNlYXJjaC10YWcgd2hpY2ggcHJlZml4IG1hdGNoZXNcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBDQSBvciBpZGVudGl0eSBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUocylcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgIHNlZSBGT1JNQVQgT1BUSU9OUyB0byBzcGVjaWZ5IG91dHB1dCBmb3JtYXRcblxuIjsKKyAgcHJpbnQgIlxuICAgRkxBR1M6XG4iOworICBwcmludCAiICAgICAtPywgLS1oZWxwICAgICAgICAgICAgLS0gc2hvdyB0aGlzIHRleHQgYW5kIGV4aXRcbiI7CisgIHByaW50ICIgICAgIC1WLCAtLXZlcnNpb24gICAgICAgICAtLSBzaG93IHZlcnNpb24gc3RyaW5nIGFuZCBleGl0XG4iOworICBwcmludCAiICAgICAtRCwgLS1kZWJ1ZyAgICAgICAgICAgLS0gcmFpc2UgZGVidWcgbGV2ZWwgKC1EIC1EIGZvciBoaWdoZXIgbGV2ZWwpXG4iOworICBwcmludCAiICAgICAtRiwgLS1mb3JjZSAgICAgICAgICAgLS0gZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIG91dHB1dCBmaWxlc1xuIjsKKyAgcHJpbnQgIiAgICAgLUksIC0tbm9pbnRlcmFjdGl2ZSAgIC0tIG5vbi1pbnRlcmFjdGl2ZSBydW4gKGRlZmF1bHQgaW50ZXJhY3RpdmUpXG4iOworICBwcmludCAiICAgICAtUSwgLS1ub3ZlcmJvc2UgICAgICAgLS0gbm9uLXZlcmJvc2Ugb3V0cHV0IChkZWZhdWx0IHZlcmJvc2UpXG4iOworICBwcmludCAiICAgICAtQywgLS1jZmdkaXIgICA8ZGlyPiAgLS0gY29uZmlndXJhdGlvbiBkaXIgKHNlZSBtYW4oNSkgc25tcF9jb25maWcpXG4iOworICBwcmludCAiICAgICAtVCwgLS10bHNkaXIgICA8ZGlyPiAgLS0gcm9vdCBmb3IgY2VydCBzdG9yYWdlIChkZWZhdWx0IDxjZmdkaXI+L3RscylcbiI7CisgIHByaW50ICIgICAgIC1mLCAtLWNmZ2ZpbGUgIDxmaWxlPiAtLSBjb25maWcgKGRlZmF1bHQgPGNmZ2Rpcj4vbmV0LXNubXAtY2VydC5jb25mKVxuIjsKKyAgcHJpbnQgIiAgICAgLWksIC0taWRlbnRpdHkgPGlkPiAgIC0tIGlkZW50aXR5IHRvIHVzZSBmcm9tIGNvbmZpZ1xuIjsKKyAgcHJpbnQgIiAgICAgLXQsIC0tdGFnICAgICAgPHRhZz4gIC0tIGFwcGxpY2F0aW9uIHRhZyAoZGVmYXVsdCAnc25tcCcpXG4iOworICBwcmludCAiICAgICAtLTxjZmctcGFyYW0+Wz08dmFsPl0gLS0gYWRkaXRpb25hbCBjb25maWcgcGFyYW1zXG4iOyAgCisgIHByaW50ICJcbiAgIENFUlRJRklDQVRFIE9QVElPTlMgKDxjZXJ0LW9wdHM+KTpcbiI7CisgIHByaW50ICIgICAgIC1hLCAtLXdpdGgtY2EgPGNhPiAgICAtLSBDQSBjZXJ0aWZpY2F0ZSB1c2VkIHRvIHNpZ24gcmVxdWVzdFxuIjsKKyAgcHJpbnQgIiAgICAgLUEsIC0tY2EgPGNhPiAgICAgICAgIC0tIGV4cGxpY2l0IG91dHB1dCBDQSBjZXJ0aWZpY2F0ZVxuIjsKKyAgcHJpbnQgIiAgICAgLXIsIC0tY3NyIDxjc3I+ICAgICAgIC0tIGNlcnRpZmljYXRlIHNpZ25pbmcgcmVxdWVzdFxuIjsKKyAgcHJpbnQgIiAgICAgLXgsIC0tZnJvbS1jcnQgPGNydD4gIC0tIGlucHV0IGNlcnRpZmljYXRlIGZvciBjdXJyZW50IG9wZXJhdGlvblxuIjsKKyAgcHJpbnQgIiAgICAgLVgsIC0tY3J0IDxjcnQ+ICAgICAgIC0tIGV4cGxpY2l0IG91dHB1dCBjZXJ0aWZpY2F0ZVxuIjsKKyAgcHJpbnQgIiAgICAgLXksIC0taW5zdGFsbCAgICAgICAgIC0tIGluc3RhbGwgcmVzdWx0IGluIGxvY2FsIHJlcG9zaXRvcnlcbiI7CisgIHByaW50ICJcbiAgIERJU1RJTkdVSVNIRUQgTkFNRSBPUFRJT05TICg8ZG4tb3B0cz4pOlxuIjsKKyAgcHJpbnQgIiAgICAgLWUsIC0tZW1haWwgPGVtYWlsPiAgICAgICAtLSBlbWFpbCBuYW1lXG4iOworICBwcmludCAiICAgICAtaCwgLS1ob3N0IDxob3N0PiAgICAgICAgIC0tIEROUyBob3N0IG5hbWUsIG9yIElQIGFkZHJlc3NcbiI7CisgIHByaW50ICIgICAgIC1kLCAtLWRheXMgPGRheXM+ICAgICAgICAgLS0gbnVtYmVyIG9mIGRheXMgY2VydGlmaWNhdGUgaXMgdmFsaWRcbiI7CisgIHByaW50ICIgICAgIC1uLCAtLWNuIDxjbj4gICAgICAgICAgICAgLS0gY29tbW9uIG5hbWUgKENOKVxuIjsKKyAgcHJpbnQgIiAgICAgLW8sIC0tb3JnIDxvcmc+ICAgICAgICAgICAtLSBvcmdhbml6dGlvbiBuYW1lXG4iOworICBwcmludCAiICAgICAtdSwgLS11bml0IDx1bml0PiAgICAgICAgIC0tIG9yZ2FuaXp0aW9uIHVuaXQgbmFtZVxuIjsKKyAgcHJpbnQgIiAgICAgLWMsIC0tY291bnRyeSA8Y291bnRyeT4gICAtLSBjb3VudHJ5IGNvZGUgKGUuZy4sIFVTKVxuIjsKKyAgcHJpbnQgIiAgICAgLXAsIC0tcHJvdmluY2UgPHByb3ZpbmNlPiAtLSBwcm92aW5jZSBuYW1lIChzeW5vbXlub3VzIHcvIHN0YXRlKVxuIjsKKyAgcHJpbnQgIiAgICAgLXAsIC0tc3RhdGUgPHN0YXRlPiAgICAgICAtLSBzdGF0ZSBuYW1lIChzeW5vbXlub3VzIHcvIHByb3ZpbmNlKVxuIjsKKyAgcHJpbnQgIiAgICAgLWwsIC0tbG9jYWxpdHkgPGxvY2FsaXR5PiAtLSBsb2NhbGl0eSBuYW1lIChlLmcsIHRvd24pXG4iOworICBwcmludCAiICAgICAtcywgLS1zYW4gPHNhbj4gICAgICAgICAgIC0tIHN1YmplY3RBbHROYW1lLCByZXBlYXQgZm9yIGVhY2ggPHNhbj5cbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gPHNhbj4gdmFsdWUgZm9ybWF0ICg8Rk1UPjo8VkFMPik6XG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAgZGlyTmFtZTovdXNyL3NoYXJlL3NubXAvdGxzXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAgRE5TOm5ldC1zbm1wLm9yZ1xuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIGVtYWlsOmFkbWluXEBuZXQtc25tcC5vcmdcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICBJUDoxOTIuMTY4LjEuMVxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIFJJRDoxLjEuMy42XG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAgVVJJOmh0dHA6Ly9uZXQtc25tcC5vcmdcbiI7CisgIHByaW50ICJcbiAgIEZPUk1BVCBPUFRJT05TICg8Zm9ybWF0LW9wdHM+KTogXG4iOworICBwcmludCAiICAgICAtLWJyaWVmICAgICAgICAtLSBtaW5pbWl6ZWQgb3V0cHV0ICh2YWx1ZXMgb25seSB3aGVyZSBhcHBsaWNhYmxlKVxuIjsKKyAgcHJpbnQgIiAgICAgLS10ZXh0ICAgICAgICAgLS0gZnVsbCB0ZXh0IGRlc2NyaXB0aW9uXG4iOworICBwcmludCAiICAgICAtLXN1YmplY3QgICAgICAtLSBzdWJqZWN0IGRlc2NyaXB0aW9uXG4iOworICBwcmludCAiICAgICAtLXN1YmplY3RfaGFzaCAtLSBoYXNoIG9mIHN1YmplY3QgZm9yIGluZGV4aW5nXG4iOworICBwcmludCAiICAgICAtLWlzc3VlciAgICAgICAtLSBpc3N1ZXIgZGVzY3JpcHRpb25cbiI7CisgIHByaW50ICIgICAgIC0taXNzdWVyX2hhc2ggIC0tIGhhc2ggb2YgaXNzdWVyIGZvciBpbmRleGluZ1xuIjsKKyAgcHJpbnQgIiAgICAgLS1maW5nZXJwcmludCAgLS0gU0hBMSBkaWdlc3Qgb2YgREVSXG4iOworICBwcmludCAiICAgICAtLXNlcmlhbCAgICAgICAtLSBzZXJpYWwgbnVtYmVyXG4iOworICBwcmludCAiICAgICAtLW1vZHVsdXMgICAgICAtLSBtb2R1bHVzIG9mIHRoZSBwdWJsaWMga2V5XG4iOworICBwcmludCAiICAgICAtLWRhdGVzICAgICAgICAtLSBzdGFydCBhbmQgZW5kIGRhdGVzXG4iOworICBwcmludCAiICAgICAtLXB1cnBvc2UgICAgICAtLSBkaXNwbGF5cyBhbGxvd2VkIHVzZXNcbiI7CisgIHByaW50ICIgICAgIC0tQyAgICAgICAgICAgIC0tIEMgY29kZSBkZXNjcmlwdGlvblxuIjsKKyAgcHJpbnQgIlxuICAgRVhBTVBMRVM6IFxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAtLWRheXMgMTAwMFxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBnZW5jYSAtZiAuc25tcC9uZXQtc25tcC1jZXJ0LmNvbmYgLWkgbm9jYWRtIC1JXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGdlbmNlcnQgLXQgc25tcGQgLS1jbiBob3N0Lm5ldC1zbm1wLm9yZ1xuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBnZW5jc3IgLXQgc25tcGFwcFxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBzaWduY3NyIC0tY3NyIHNubXBhcHAgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZ1xuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBzaG93Y2VydHMgLS1zdWJqZWN0IC0taXNzdWVyIC0tZGF0ZXMgc25tcGFwcFxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBzaG93Y2FzIC0tZmluZ2VycHJpbnQgY2EtbmV0LXNubXAub3JnIC0tYnJpZWZcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgaW1wb3J0IGNhLXRoaXJkLXBhcnR5LmNydFxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBpbXBvcnQgc2lnbmVkLXJlcXVlc3QuY3J0IHNpZ25lZC1yZXF1ZXN0LmtleVxuXG4iOworCisgIGV4aXQgJHJldDsKK30KKworc3ViIHNldF9kZWZhdWx0IHsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9IHNoaWZ0OworICBteSAkZmllbGQgPSBzaGlmdDsKKyAgbXkgJHZhbCA9IHNoaWZ0OworCisgIGlmIChub3QgZGVmaW5lZCAkb3B0cy0+eyRmaWVsZH0pIHsKKyAgICBteSAkY3ZhbCA9ICRjb25maWctPmluaGVyaXQoJGZpZWxkKTsKKyAgICAkb3B0cy0+eyRmaWVsZH0gPSAoZGVmaW5lZCAkY3ZhbCA/ICRjdmFsIDogJHZhbCk7CisgIH0KK30KKworc3ViIGNmZ19wYXRoIHsKKyAgbXkgJHBhdGg7CisKKyAgJHBhdGggPSBgJE5ldFNOTVA6OkNlcnQ6OkNGR1RPT0wgLS1zbm1wY29uZnBhdGhgOworICBjaG9tcCAkcGF0aDsKKyAgcmV0dXJuICh3YW50YXJyYXkgPyBzcGxpdCgnOicsICRwYXRoKSA6ICRwYXRoKTsKK30KKworc3ViIGZpbmRfY2ZnZmlsZSB7CisgIG15ICRkaXIgPSBzaGlmdDsKKyAgbXkgJGZpbGUgPSBzaGlmdDsKKworICBpZiAoZGVmaW5lZCAkZGlyIGFuZCAtZCAkZGlyIGFuZCAKKyAgICAgIGRlZmluZWQgJGZpbGUgYW5kICRmaWxlICF+IC9eW1wuXC9dLykgeworICAgIHJldHVybiBmcV9yZWxfcGF0aCgiJGRpci8kZmlsZSIpIGlmIC1mICIkZGlyLyRmaWxlIjsKKyAgfQorCisgIGlmIChkZWZpbmVkICRmaWxlKSB7CisgICAgaWYgKC1mICRmaWxlKSB7CisgICAgICByZXR1cm4gZnFfcmVsX3BhdGgoJGZpbGUpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gJGZpbGU7ICMgZmlsZSBpcyBub3QgZm91bmQsIGNvbXBsYWluIGxhdGVyCisgICAgfQorICB9CisKKyAgbXkgQHBhdGggPSBjZmdfcGF0aCgpOworICB1bnNoaWZ0KEBwYXRoLCAkZGlyKSBpZiBkZWZpbmVkICRkaXI7CisgIHdoaWxlIChAcGF0aCkgeworICAgIG15ICRwID0gcG9wKEBwYXRoKTsKKyAgICBuZXh0IGlmICRwIGVxICcvdmFyL2xpYi9zbm1wJzsKKyAgICBpZiAoLXIgIiRwLyROZXRTTk1QOjpDZXJ0OjpDRkdGSUxFIikgeworICAgICAgcmV0dXJuIGZxX3JlbF9wYXRoKCIkcC8kTmV0U05NUDo6Q2VydDo6Q0ZHRklMRSIpOworICAgIH0KKyAgfQorCisgIHJldHVybiAkZmlsZTsKK30KKworc3ViIGZpbmRfY2ZnZGlyIHsKKyAgbXkgJGRpciA9IHNoaWZ0OworICBteSAkZmlsZSA9IHNoaWZ0OworCisgIGlmIChkZWZpbmVkICRkaXIpIHsKKyAgICAkZGlyID0gTmV0U05NUDo6Q2VydDo6ZnFfcmVsX3BhdGgoJGRpcik7CisgICAgcmV0dXJuICRkaXI7CisgIH0KKworICBpZiAoZGVmaW5lZCAkZmlsZSBhbmQgLWYgJGZpbGUpIHsKKyAgICAkZGlyID0gOjpkaXJuYW1lKCRmaWxlKTsKKyAgICByZXR1cm4gTmV0U05NUDo6Q2VydDo6ZnFfcmVsX3BhdGgoJGRpcik7CisgIH0gZWxzZSB7CisgICAgbXkgQHBhdGggPSBjZmdfcGF0aCgpOworICAgICMgc2VhcmNoIGZpcnN0IGZvciB3cml0ZWFibGUgdGxzIGRpcgorICAgICMgZm9yIHJvb3Qgc2VhcmNoIHRvcCBkb3duLCBmb3IgdXNlciBib3R0b20gdXAKKyAgICB3aGlsZSAoQHBhdGgpIHsKKyAgICAgICRkaXIgPSAoJD4gPyBwb3AoQHBhdGgpOiBzaGlmdChAcGF0aCkpOworICAgICAgbmV4dCBpZiAkZGlyIGVxICcvdmFyL2xpYi9zbm1wJzsKKyAgICAgIHJldHVybiAkZGlyIGlmIC1kICIkZGlyLyROZXRTTk1QOjpDZXJ0OjpUTFNESVIiIGFuZCAtdyAiJGRpci8kTmV0U05NUDo6Q2VydDo6VExTRElSIjsKKyAgICB9CisgICAgQHBhdGggPSBjZmdfcGF0aCgpOworICAgICMgaWYgbm8gdGxzIGRpciBmb3VuZCwgcGljayBmaXJzdCB3cml0YWJsZSBjb25maWcgZGlyCisgICAgIyBmb3Igcm9vdCBzZWFyY2ggdG9wIGRvd24sIGZvciB1c2VyIGJvdHRvbSB1cAorICAgIHdoaWxlIChAcGF0aCkgeworICAgICAgJGRpciA9ICgkPiA/IHBvcChAcGF0aCk6IHNoaWZ0KEBwYXRoKSk7CisgICAgICBuZXh0IGlmICRkaXIgZXEgJy92YXIvbGliL3NubXAnOworICAgICAgcmV0dXJuICRkaXIgaWYgLWQgJGRpciBhbmQgLXcgJGRpcjsKKyAgICB9CisgICAgbXkgJGhvbWUgPSAkRU5We0hPTUV9IHx8IGRpZSAiVW5hYmxlIHRvIGRldGVybWluZSBob21lIGRpcmVjdG9yeTogc2V0IFwkSE9NRVxuIjsKKyAgICByZXR1cm4gKCQ+ID8gIiRob21lLy5zbm1wIiA6ICIvdXNyL3NoYXJlL3NubXAiKTsgIyBYWFggaGFjayAtIG5vIGRpcnMgZXhpc3RlZCBvciB3ZXJlIHdyaXRhYmxlCisgIH0KKyAgIyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4KKyAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgZmluZF9jZXJ0cyB7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRkaXIgPSBzaGlmdCB8fCAnY2VydHMnOworICBteSAkdGFyZyA9IHNoaWZ0OworICBteSAkc3VmZml4X3JlZ2V4OworICBteSAkY3dkID0gOjpnZXRjd2QoKTsKKworICBpZiAoJGRpciBlcSAnY3NycycpIHsKKyAgICAkZGlyID0gJE5ldFNOTVA6OkNlcnQ6Ok5FV0NSVERJUjsKKyAgICAkc3VmZml4X3JlZ2V4ID0gJ1wuY3NyfFwucGVtJzsKKyAgfSBlbHNlIHsKKyAgICAkc3VmZml4X3JlZ2V4ID0gJ1wuY3J0fFwucGVtJzsKKyAgfQorCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZmluZF9jZXJ0cygxOiRjd2QpOiRkaXI6JHRhcmc6JHN1ZmZpeF9yZWdleFxuIiwgJG9wdHMpOworCisgIGlmICgkdGFyZyA9fiAvXC4/XC8vKSB7CisgICAgIyBzZWUgaWYgdGFyZyBjb3VsZCBiZSBmaWxlIC0gY2FsYyBvcmlnLiByZWwuIHBhdGgKKyAgICBteSAkYXJnID0gTmV0U05NUDo6Q2VydDo6ZnFfcmVsX3BhdGgoJHRhcmcsICRvcHRzLT57J3JkaXInfSk7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJmaW5kX2NlcnRzKDIpOiRkaXI6JHRhcmc6JGFyZ1xuIiwgJG9wdHMpOworICAgICMgdGFyZyBpcyBhIGZpbGUgbmFtZSAtIHVzZSBpdAorICAgIHJldHVybiAod2FudGFycmF5ID8gKCRhcmcpIDogJGFyZykgaWYgLWYgJGFyZzsKKyAgICAjIGVsc2UgbWFyayBhcyBkaXIgaWYgaXQgaXMKKyAgICAkdGFyZyA9ICIkYXJnIiBpZiAtZCAkYXJnOworICB9CisKKyAgJHRhcmcgPX4gcy9cLyokL1wvLyBpZiAtZCAkdGFyZzsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImZpbmRfY2VydHMoMyk6JGRpcjokdGFyZ1xuIiwgJG9wdHMpOworCisgICMgZmluZCBjZXJ0cyBpbiB0YXJnIGlmIGEgZGlyIChpbiB0bHNkaXIsIG9yIHJlbGF0aXZlKQorICAkZGlyID0gJDEgaWYgJHRhcmcgPX4gcy9eKFxTKylcLyhbXlwvXHNdKikkLyQyLyBhbmQgLWQgJDE7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJmaW5kX2NlcnRzKDQpOiR7ZGlyfTokdGFyZzokY3dkXG4iLCAkb3B0cyk7CisKKyAgbXkgQGNlcnRzOworICBteSAkZ2xvYiA9ICIkZGlyLyR0YXJnIjsKKyAgZm9yZWFjaCAoPCRkaXIvKj4pIHsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNoZWNraW5nKCRkaXI6JHRhcmcpOiAkX1xuIiwgJG9wdHMpOworICAgIG5leHQgdW5sZXNzIC9eJGRpclwvJHRhcmcoLiokc3VmZml4X3JlZ2V4KT8kLzsKKyAgICAjIHJldHVybiBleGFjdCBtYXRjaCBpZiBub3Qgd2FudGFycmF5KCkKKyAgICByZXR1cm4gJF8gaWYgKG5vdCB3YW50YXJyYXkoKSkgYW5kIC9eJGRpclwvJHRhcmcoJHN1ZmZpeF9yZWdleCk/JC87CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJwdXNoaW5nOiAkX1xuIiwgJG9wdHMpOworICAgIHB1c2goQGNlcnRzLCAkXyk7CisgIH0KKworICByZXR1cm4gKHdhbnRhcnJheSA/IEBjZXJ0cyA6ICRjZXJ0c1swXSk7Cit9CisKK3N1YiBjaGVja19vdXRwdXRfZmlsZSB7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRmaWxlID0gc2hpZnQ7CisgIG15ICRpbnRlcmFjdGl2ZSA9IHNoaWZ0OworICBteSAkZm9yY2UgPSBzaGlmdDsKKyAgbXkgJGNvbnRpbnVlID0gMTsKKworICBpZiAoLXcgJGZpbGUpIHsKKyAgICBpZiAoJGludGVyYWN0aXZlIGFuZCBub3QgJGZvcmNlKSB7CisgICAgICBwcmludCAiT3V0cHV0IGZpbGUgKCRmaWxlKSBleGlzdHM7IHdpbGwgYmUgb3ZlcndyaXR0ZW5cbkNvbnRpbnVlIFt5L05dOiAiOworICAgICAgJGNvbnRpbnVlID0gPFNURElOPjsgY2hvbXAgJGNvbnRpbnVlOworICAgICAgJGNvbnRpbnVlID0gMCBpZiAkY29udGludWUgPX4gL15ccyokfF5ubz9ccyokL2k7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICgkZm9yY2UpIHsKKwlOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIk91dHB1dCBmaWxlICgkZmlsZSkgZXhpc3RzOyBvdmVyd3JpdGluZy4uLlxuIiwgJG9wdHMpOworICAgICAgfSBlbHNlIHsKKwlOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIk91dHB1dCBmaWxlICgkZmlsZSkgZXhpc3RzOyBleGl0aW5nLi4uXG4iLCAkb3B0cyk7CisJJGNvbnRpbnVlID0gMDsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzaWYgKC1lICRmaWxlKSB7CisgICAgTmV0U05NUDo6Q2VydDo6dnByaW50KCJPdXRwdXQgZmlsZSAoJGZpbGUpIG5vdCB3cml0YWJsZTsgZXhpdGluZy4uLlxuIiwgJG9wdHMpOworICAgICRjb250aW51ZSA9IDA7CisgIH0KKyAgZXhpdCgxKSB1bmxlc3MgJGNvbnRpbnVlOworfQorCitzdWIgaXNfc2VydmVyIHsKKyAgbXkgJHRhZyA9IHNoaWZ0OworICByZXR1cm4gMSBpZiAkdGFnIGVxICdzbm1wZCcgb3IgJHRhZyBlcSAnc25tcHRyYXBkJzsKKyAgcmV0dXJuIDA7Cit9CisKK3N1YiBpc19jYV9jZXJ0IHsKKyAgbXkgJGNydCA9IHNoaWZ0OworICBteSAkb3V0cHV0ID0gYG9wZW5zc2wgeDUwOSAtaW4gJyRjcnQnIC10ZXh0IC1ub291dGA7CisgIHJldHVybiAoJG91dHB1dCA9fiAvXlxzKkNBOlRSVUVccyokL20gPyAxIDogMCk7Cit9CisKK3N1YiB4NTA5X2Zvcm1hdCB7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRmbXQ7CisKKyAgZm9yZWFjaCBteSAkZiAoQE5ldFNOTVA6OkNlcnQ6Olg1MDlGTVRTKSB7CisgICAgJGZtdCAuPSAiIC0kZiIgaWYgZGVmaW5lZCAkb3B0cy0+eyRmfTsKKyAgfQorCisgIHJldHVybiAkZm10OworfQorCitzdWIgbWFrZV9vcGVuc3NsX2NvbmYgeworICBteSAkZmlsZSA9IHNoaWZ0OworICByZXR1cm4gaWYgLXIgJGZpbGU7CisKKyAgb3BlbihGLCAiPiRmaWxlIikgb3IgZGllKCJjb3VsZCBub3Qgb3BlbiAkZmlsZSIpOworCisgIHByaW50IEYgPDwnRU5EJzsKKyMKKyMgTmV0LVNOTVAgKEQpVExTIE9wZW5TU0wgY29uZmlndXJhdGlvbiBmaWxlLgorIworCityZGlyICAgICAgICAgICAgPSAuCitkaXIJCT0gJEVOVjo6RElSCitSQU5ERklMRQk9ICRyZGlyLy5yYW5kCitNRAkJPSBzaGExCitLU0laRQkJPSAyMDQ4CitDTgkJPSBuZXQtc25tcC5vcmcKK0VNQUlMCQk9IGFkbWluQG5ldC1zbm1wLm9yZworQ09VTlRSWQkgICAgICAgID0gVVMKK1NUQVRFCQk9IENBCitMT0NBTElUWQk9IERhdmlzCitPUkcJCT0gTmV0LVNOTVAKK09SR19VTklUCT0gRGV2ZWxvcG1lbnQKK1NBTiAgICAgICAgICAgICA9IGVtYWlsOmNvcHkKK0RBWVMgICAgICAgICAgICA9IDM2NQorQ1JMREFZUyAgICAgICAgID0gMzAKKworZGVmYXVsdF9kYXlzCT0gJEVOVjo6REFZUwkJIyBob3cgbG9uZyB0byBjZXJ0aWZ5IGZvcgorZGVmYXVsdF9jcmxfZGF5cz0gJEVOVjo6Q1JMREFZUwkJIyBob3cgbG9uZyBiZWZvcmUgbmV4dCBDUkwKK2RlZmF1bHRfbWQJPSAkRU5WOjpNRAkJIyB3aGljaCBtZCB0byB1c2UuCisKK2RhdGFiYXNlCT0gJGRpci8uaW5kZXgJCSMgZGF0YWJhc2UgaW5kZXggZmlsZS4KK3NlcmlhbAkJPSAkZGlyLy5zZXJpYWwgCQkjIFRoZSBjdXJyZW50IHNlcmlhbCBudW1iZXIKK2NlcnRzCQk9ICRyZGlyL2NlcnRzCQkjIGlkZW50aXR5IGNlcnRzCituZXdfY2VydHNfZGlyCT0gJGRpci9uZXdjZXJ0cwkjIGRlZmF1bHQgcGxhY2UgZm9yIG5ldyBjZXJ0cy4KK2NhX2NlcnRzX2Rpcgk9ICRyZGlyL2NhLWNlcnRzCSMgZGVmYXVsdCBwbGFjZSBmb3IgbmV3IGNlcnRzLgora2V5X2RpcgkJPSAkcmRpci9wcml2YXRlCisKK2NybF9kaXIJCT0gJGRpci9jcmwJCSMgY3JsJ3MKK2NybG51bWJlcgk9ICRkaXIvLmNybG51bWJlcgkjIHRoZSBjdXJyZW50IGNybCBudW1iZXIKKwkJCQkJIyBtdXN0IGJlIGNvbW1lbnRlZCBvdXQgdG8gbGVhdmUgVjEgQ1JMCitjcmwJCT0gJGNybF9kaXIvY3JsLnBlbQkjIFRoZSBjdXJyZW50IENSTAorCitwcmVzZXJ2ZQk9IG5vCQkJIyBrZWVwIHBhc3NlZCBETiBvcmRlcmluZwordW5pcXVlX3N1YmplY3QJPSB5ZXMJCQkjIFNldCB0byAnbm8nIHRvIGFsbG93IGNyZWF0aW9uIG9mCisJCQkJCSMgY2VydGlmaWNhdGVzIHdpdGggc2FtZSBzdWJqZWN0LgorIyBFeHRyYSBPQkpFQ1QgSURFTlRJRklFUiBpbmZvOgorb2lkX3NlY3Rpb24JCT0gbmV3X29pZHMKKworWyBuZXdfb2lkcyBdCisKKyMgQWRkIG5ldyBPSURzIGluIGhlcmUgZm9yIHVzZSBieSAnY2EnIGFuZCAncmVxJy4KKyMgQWRkIGEgc2ltcGxlIE9JRCBsaWtlIHRoaXM6CisjIHRlc3RvaWQxPTEuMi4zLjQKKyMgVXNlIGNvbmZpZyBmaWxlIHN1YnN0aXR1dGlvbiBsaWtlIHRoaXM6CisjIHRlc3RvaWQyPSR7dGVzdG9pZDF9LjUuNgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworWyBjYSBdCitkZWZhdWx0X2NhCT0gQ0FfZGVmYXVsdAkJIyBUaGUgZGVmYXVsdCBjYSBzZWN0aW9uCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitbIENBX2RlZmF1bHQgXQorIyBjZXJ0aWZpY2F0ZQk9ICRjYV9jZXJ0c19kaXIvJEVOVjo6VEFHLmNydCAJIyBDQSBjZXJ0aWZpY2F0ZSBzbyBzaWduIHdpdGgKK25hbWVfb3B0IAk9IGNhX2RlZmF1bHQJCSMgU3ViamVjdCBOYW1lIG9wdGlvbnMKK2NlcnRfb3B0IAk9IGNhX2RlZmF1bHQJCSMgQ2VydGlmaWNhdGUgZmllbGQgb3B0aW9ucworcG9saWN5CQk9IHBvbGljeV9tYXRjaAorY29weV9leHRlbnNpb25zID0gY29weSAgICAgICAgICAgICAgICAgICMgY29weSB2MyBleHRlbnNpb25zIChzdWJqZWN0QWx0TmFtZSkKK3N1YmplY3RBbHROYW1lICA9IGNvcHkKKworIyBGb3IgdGhlIENBIHBvbGljeQorWyBwb2xpY3lfbWF0Y2ggXQorY291bnRyeU5hbWUJCT0gbWF0Y2gKK3N0YXRlT3JQcm92aW5jZU5hbWUJPSBtYXRjaAorb3JnYW5pemF0aW9uTmFtZQk9IG1hdGNoCitvcmdhbml6YXRpb25hbFVuaXROYW1lCT0gb3B0aW9uYWwKK2NvbW1vbk5hbWUJCT0gc3VwcGxpZWQKK2VtYWlsQWRkcmVzcwkJPSBvcHRpb25hbAorCisjIEZvciB0aGUgJ2FueXRoaW5nJyBwb2xpY3kKKyMgQXQgdGhpcyBwb2ludCBpbiB0aW1lLCB5b3UgbXVzdCBsaXN0IGFsbCBhY2NlcHRhYmxlICdvYmplY3QnCisjIHR5cGVzLgorWyBwb2xpY3lfYW55dGhpbmcgXQorY291bnRyeU5hbWUJCT0gb3B0aW9uYWwKK3N0YXRlT3JQcm92aW5jZU5hbWUJPSBvcHRpb25hbAorbG9jYWxpdHlOYW1lCQk9IG9wdGlvbmFsCitvcmdhbml6YXRpb25OYW1lCT0gb3B0aW9uYWwKK29yZ2FuaXphdGlvbmFsVW5pdE5hbWUJPSBvcHRpb25hbAorY29tbW9uTmFtZQkJPSBzdXBwbGllZAorZW1haWxBZGRyZXNzCQk9IG9wdGlvbmFsCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitbIHJlcSBdCitkZWZhdWx0X2JpdHMJCT0gJEVOVjo6S1NJWkUKK2RlZmF1bHRfbWQJCT0gJEVOVjo6TUQKK2Rpc3Rpbmd1aXNoZWRfbmFtZQk9IHJlcV9kaXN0aW5ndWlzaGVkX25hbWUKK3N0cmluZ19tYXNrIAkJPSBNQVNLOjB4MjAwMgorcmVxX2V4dGVuc2lvbnMgICAgICAgICAgPSB2M19yZXEKK3g1MDlfZXh0ZW5zaW9ucyAgICAgICAgID0gdjNfdXNlcl9jcmVhdGUKKworWyByZXFfZGlzdGluZ3Vpc2hlZF9uYW1lIF0KK2NvdW50cnlOYW1lCQkJPSBDb3VudHJ5IE5hbWUgKDIgbGV0dGVyIGNvZGUpCitjb3VudHJ5TmFtZV9kZWZhdWx0CQk9ICRFTlY6OkNPVU5UUlkKK2NvdW50cnlOYW1lX21pbgkJCT0gMgorY291bnRyeU5hbWVfbWF4CQkJPSAyCisKK3N0YXRlT3JQcm92aW5jZU5hbWUJCT0gU3RhdGUgb3IgUHJvdmluY2UgTmFtZSAoZnVsbCBuYW1lKQorc3RhdGVPclByb3ZpbmNlTmFtZV9kZWZhdWx0CT0gJEVOVjo6U1RBVEUKKworbG9jYWxpdHlOYW1lCQkJPSBMb2NhbGl0eSBOYW1lIChlZywgY2l0eSkKK2xvY2FsaXR5TmFtZV9kZWZhdWx0CQk9ICRFTlY6OkxPQ0FMSVRZCisKKzAub3JnYW5pemF0aW9uTmFtZQkJPSBPcmdhbml6YXRpb24gTmFtZSAoZWcsIGNvbXBhbnkpCiswLm9yZ2FuaXphdGlvbk5hbWVfZGVmYXVsdAk9ICRFTlY6Ok9SRworCitvcmdhbml6YXRpb25hbFVuaXROYW1lCQk9IE9yZ2FuaXphdGlvbmFsIFVuaXQgTmFtZSAoZWcsIHNlY3Rpb24pCitvcmdhbml6YXRpb25hbFVuaXROYW1lX2RlZmF1bHQJPSAkRU5WOjpPUkdfVU5JVAorCitjb21tb25OYW1lCQkJPSBDb21tb24gTmFtZSAoZWcsIHlvdXIgbmFtZSBvciB5b3VyIHNlcnZlclwncyBob3N0bmFtZSkKK2NvbW1vbk5hbWVfbWF4CQkJPSA2NAorY29tbW9uTmFtZV9kZWZhdWx0ICAgICAgICAgICAgICA9ICRFTlY6OkNOCisKK2VtYWlsQWRkcmVzcwkJCT0gRW1haWwgQWRkcmVzcworZW1haWxBZGRyZXNzX21heAkJPSA2NAorZW1haWxBZGRyZXNzX2RlZmF1bHQgICAgICAgICAgICA9ICRFTlY6OkVNQUlMCisKK1sgdjNfcmVxIF0KKworIyBFeHRlbnNpb25zIHRvIGFkZCB0byBhIGNlcnRpZmljYXRlIHJlcXVlc3QKK2Jhc2ljQ29uc3RyYWludHMgPSBDQTpGQUxTRQorCisjIEltcG9ydCB0aGUgZW1haWwgYWRkcmVzcyBhbmQvb3Igc3BlY2lmaWVkIFNBTnMuCislW3N1YmplY3RBbHROYW1lID0gJEVOVjo6U0FOXQorCitbIHYzX3VzZXJfY3JlYXRlIF0KKworIyBFeHRlbnNpb25zIHRvIGFkZCB0byBhIGNlcnRpZmljYXRlIHJlcXVlc3QKK2Jhc2ljQ29uc3RyYWludHMgPSBDQTpGQUxTRQorI2tleVVzYWdlID0gbm9uUmVwdWRpYXRpb24sIGRpZ2l0YWxTaWduYXR1cmUsIGtleUVuY2lwaGVybWVudAorCisjIFBLSVggcmVjb21tZW5kYXRpb24uCitzdWJqZWN0S2V5SWRlbnRpZmllciA9IGhhc2gKK2F1dGhvcml0eUtleUlkZW50aWZpZXIgPSBrZXlpZDphbHdheXMsaXNzdWVyOmFsd2F5cworCisjIEltcG9ydCB0aGUgZW1haWwgYWRkcmVzcyBhbmQvb3Igc3BlY2lmaWVkIFNBTnMuCislW3N1YmplY3RBbHROYW1lID0gJEVOVjo6U0FOXQorCitbIHYzX2NhX2NyZWF0ZSBdCisjIEV4dGVuc2lvbnMgdG8gYWRkIHRvIGEgQ0EgY2VydGlmaWNhdGUKK2Jhc2ljQ29uc3RyYWludHMgPSBDQTpUUlVFCisjIFRoaXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gTmV0c2NhcGUncyBjb21tZW50IGxpc3Rib3guCituc0NvbW1lbnQgPSAiT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUgKG5ldC1zbm1wKSIKKworIyBQS0lYIHJlY29tbWVuZGF0aW9uLgorc3ViamVjdEtleUlkZW50aWZpZXIgPSBoYXNoCithdXRob3JpdHlLZXlJZGVudGlmaWVyID0ga2V5aWQ6YWx3YXlzLGlzc3VlcjphbHdheXMKKworIyBJbXBvcnQgdGhlIGVtYWlsIGFkZHJlc3MgYW5kL29yIHNwZWNpZmllZCBTQU5zLgorJVtzdWJqZWN0QWx0TmFtZSA9ICRFTlY6OlNBTl0KKworWyB2M19jYV9zaWduIF0KKyMgRXh0ZW5zaW9ucyB0byBhZGQgd2hlbiAnY2EnIHNpZ25zIGEgcmVxdWVzdC4KK2Jhc2ljQ29uc3RyYWludHMgPSBDQTpGQUxTRQorIyBUaGlzIHdpbGwgYmUgZGlzcGxheWVkIGluIE5ldHNjYXBlJ3MgY29tbWVudCBsaXN0Ym94LgorbnNDb21tZW50ID0gIk9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlIChuZXQtc25tcCkiCisKK2tleVVzYWdlID0gbm9uUmVwdWRpYXRpb24sIGRpZ2l0YWxTaWduYXR1cmUsIGtleUVuY2lwaGVybWVudAorCisjIFBLSVggcmVjb21tZW5kYXRpb25zIGhhcm1sZXNzIGlmIGluY2x1ZGVkIGluIGFsbCBjZXJ0aWZpY2F0ZXMuCitzdWJqZWN0S2V5SWRlbnRpZmllciA9IGhhc2gKK2F1dGhvcml0eUtleUlkZW50aWZpZXIgPSBrZXlpZDphbHdheXMsaXNzdWVyOmFsd2F5cworCitbIHYzX2NhX3NpZ25fY2EgXQorIyBFeHRlbnNpb25zIHRvIGFkZCB3aGVuICdjYScgc2lnbnMgYSBjYSByZXF1ZXN0LgorYmFzaWNDb25zdHJhaW50cyA9IENBOlRSVUUKKworIyBUaGlzIHdpbGwgYmUgZGlzcGxheWVkIGluIE5ldHNjYXBlJ3MgY29tbWVudCBsaXN0Ym94LgorbnNDb21tZW50ID0gIk9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlIChuZXQtc25tcCkiCisKKyMgUEtJWCByZWNvbW1lbmRhdGlvbnMgaGFybWxlc3MgaWYgaW5jbHVkZWQgaW4gYWxsIGNlcnRpZmljYXRlcy4KK3N1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaAorYXV0aG9yaXR5S2V5SWRlbnRpZmllciA9IGtleWlkOmFsd2F5cyxpc3N1ZXI6YWx3YXlzCisKK0VORAorCit9CisKKworcGFja2FnZSBOZXRTTk1QOjpDZXJ0OjpPYmo7CisKK3N1YiBuZXcgeworICBteSAkY2xhc3MgPSBzaGlmdDsKKyAgbXkgJGNmaWVsZCA9IHNoaWZ0OworICBteSAkcGFyZW50ID0gc2hpZnQ7CisgIG15ICRpbmQgPSBzaGlmdDsKKyAgbXkgJHRoaXMgPSB7fTsKKyAgYmxlc3MoJHRoaXMsICRjbGFzcyk7CisKKyAgIyBpbml0aWFsaXplIGhhc2ggb2Yga2V5cyB3aGljaCBhcmUgZHluYW1pY2FsbHkgY3JlYXRlZCBvciBpbnRlcm5hbAorICAkdGhpcy0+eydBVVRPS0VZUyd9eydBVVRPS0VZUyd9Kys7CisKKyAgIyBzdG9yZSBhIHJlZmVyZW5jZSB0byBvdXJzZWx2ZXMgc28gb3VyIGNoaWxkcmVuIGNhbiBmaW5kIHVzCisgICR0aGlzLT5hdXRvU2V0KCdDRklFTEQnLCAkY2ZpZWxkKTsKKyAgJHRoaXMtPmF1dG9TZXQoJGNmaWVsZCAsICR0aGlzKTsKKyAgJHRoaXMtPmF1dG9TZXQoJ0NISUxEUkVOJywgW10pOworICAkdGhpcy0+YXV0b1NldCgnSU5ERVgnLCAkaW5kKSBpZiBkZWZpbmVkICRpbmQ7CisKKyAgaWYgKGRlZmluZWQgJHBhcmVudCkgeworICAgICMgY2FjaGUgJ0FQUCcgaW4gYWxsIG9ianMgZm9yIGVhc3kgcmVmZXJlbmNlCisgICAgJHRoaXMtPmF1dG9TZXQoJ0FQUCcsICRwYXJlbnQtPmluaGVyaXQoJ0FQUCcpKTsKKyAgICBteSAkYXBwID0gJHRoaXMtPnsnQVBQJ307CisKKyAgICBkaWUoIm5ldC1zbm1wLWNlcnQ6IGVycm9yOiBubyBOZXRTTk1QOjpDZXJ0OjpBcHAgY29udGV4dCBwcm92aWRlZCIpCisgICAgICBpZiBub3QgZGVmaW5lZCAkYXBwIG9yIG5vdCByZWYgJGFwcCBlcSAnTmV0U05NUDo6Q2VydDo6QXBwJzsKKyAgICAjIHNhdmUgY2hpbGRyZW4gZm9yIGxpc3QgdHJhdmVyc2FsCisgICAgcHVzaChAeyRwYXJlbnQtPnsnQ0hJTERSRU4nfX0sICR0aGlzKSB1bmxlc3MgJHBhcmVudCBlcSAkdGhpczsKKyAgfSBlbHNlIHsKKyAgICAjIHdlIGFyZSB0aGUgdG9wIG9mIHRoZSBsaXN0CisgICAgJHBhcmVudCA9ICR0aGlzOworICB9CisgICR0aGlzLT5hdXRvU2V0KCdQQVJFTlQnICwgJHBhcmVudCk7CisKKyAgcmV0dXJuICR0aGlzOworfQorCitzdWIgYXV0b1NldCB7CisgIG15ICR0aGlzID0gc2hpZnQ7CisgIG15ICRrZXkgPSBzaGlmdDsKKyAgaWYgKEBfKSB7CisgICAgbXkgJHZhbCA9IHNoaWZ0OworICAgICR0aGlzLT57J0FVVE9LRVlTJ317JGtleX0rKzsKKyAgICAkdGhpcy0+eyRrZXl9ID0gJHZhbDsKKyAgfQorICByZXR1cm4gZXhpc3RzICR0aGlzLT57J0FVVE9LRVlTJ317JGtleX07Cit9CisKK3N1YiBpbmhlcml0IHsKKyAgbXkgJHRoaXMgPSBzaGlmdDsKKyAgbXkgJGZpZWxkID0gc2hpZnQ7CisgIG15ICRpZDsKKworICAjIGNtZCBvcHRzIG92ZXJyaWRlIGNvbmZpZyBzZXR0aW5ncworICBpZiAoZXhpc3RzICR0aGlzLT57J0FQUCd9IGFuZCBleGlzdHMgJHRoaXMtPnsnQVBQJ317J09QVFMnfSkgeworICAgIG15ICRvcHRzID0gJHRoaXMtPnsnQVBQJ317J09QVFMnfTsKKyAgICAkaWQgPSAkb3B0cy0+eydpZGVudGl0eSd9OworICAgIHJldHVybiAkb3B0cy0+eyRmaWVsZH0gaWYgZGVmaW5lZCAkb3B0cy0+eyRmaWVsZH07CisgIH0KKworICBpZiAoZGVmaW5lZCAkaWQgYW5kIGV4aXN0cyAkdGhpcy0+eydpZGVudGl0eSd9IGFuZAorICAgICAgZXhpc3RzICR0aGlzLT57J2lkZW50aXR5J317JGlkfSBhbmQKKyAgICAgIGV4aXN0cyAkdGhpcy0+eydpZGVudGl0eSd9eyRpZH17JGZpZWxkfSkgeworICAgIHJldHVybiAkdGhpcy0+eydpZGVudGl0eSd9eyRpZH17JGZpZWxkfTsKKyAgfQorCisgICMgcmV0dXJuIG91ciBmaWVsZCBpZiB3ZSBoYXZlIGl0CisgIHJldHVybiAkdGhpcy0+eyRmaWVsZH0gaWYgZGVmaW5lZCAkdGhpcy0+eyRmaWVsZH07CisKKyAgIyB0ZXJtaW5hdGUgcmVjdXJzaW9uIGF0IHRvcCBhbmQgcmV0dXJuIHVuZGVmIGlmIG5vdCBmb3VuZAorICByZXR1cm4gdW5kZWYgaWYgbm90IGRlZmluZWQgJHRoaXMtPnsnUEFSRU5UJ30gb3IgJHRoaXMtPnsnUEFSRU5UJ30gZXEgJHRoaXM7CisKKyAgIyByZWN1cnNlIHRvIHBhcmVudAorICAkdGhpcy0+eydQQVJFTlQnfS0+aW5oZXJpdCgkZmllbGQpOworfQorCitzdWIgcmVzb2x2ZSB7CisgIG15ICR0aGlzID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJHRoaXMtPmluaGVyaXQoJ09QVFMnKTsKKyAgbXkgJHZhbCA9IHNoaWZ0OworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgicmVzb2x2aW5nOiAkdmFsXG4iLCAkb3B0cyk7CisKKyAgJHZhbCA9fiBzLyhcJChcdyspKS8kdGhpcy0+aW5oZXJpdCgkMikgb3IgZGllKCJ1bnJlc29sdmVkIHJlZmVyZW5jZSBpbiBjb25maWc6ICQxIikvZ2U7CisgICR2YWwgPX4gcy8oXCZceyguKj8pXH0pLyQyL2dlZTsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInJlc29sdmVkOiAkdmFsXG4iLCAkb3B0cyk7CisKKyAgcmV0dXJuICR2YWwKK30KKworc3ViIGRlbGV0ZSB7CisgIG15ICR0aGlzID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJHRoaXMtPmluaGVyaXQoJ09QVFMnKTsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIk9iajo6ZGVsZXRlOiAoJHRoaXMpIFskdGhpcy0+e0NGSUVMRH1dXG4iLCAkb3B0cyk7CisKKyAgbXkgJHBhcmVudCA9ICR0aGlzLT57J1BBUkVOVCd9OworICBteSBAY2hpbGRyZW4gPSBAeyR0aGlzLT57J0NISUxEUkVOJ319OworCisgIGZvcmVhY2ggbXkgJGNoaWxkIChAY2hpbGRyZW4pIHsKKyAgICAkY2hpbGQtPmRlbGV0ZSgpOworICB9CisKKyAgTmV0U05NUDo6Q2VydDo6ZHdhcm4oIk9iajogY2hpbGRyZW4gbm90IGZyZWVkXG4iLCAkb3B0cykgaWYgQHskdGhpcy0+eydDSElMRFJFTid9fTsKKworICAjIGRlbGV0ZSBhbGwgb3VyIHNlbGYtcmVmZXJlbmNlcworICBkZWxldGUoJHRoaXMtPnskdGhpcy0+eydDRklFTEQnfX0pIGlmIGV4aXN0cyAkdGhpcy0+eydDRklFTEQnfTsKKyAgZGVsZXRlKCR0aGlzLT57J1BBUkVOVCd9KTsKKyAgZGVsZXRlKCR0aGlzLT57J0NISUxEUkVOJ30pOworCisgICRwYXJlbnQtPmRpc293bigkdGhpcykgaWYgZGVmaW5lZCAkcGFyZW50IGFuZCByZWYoJHBhcmVudCkgPX4gL05ldFNOTVA6OkNlcnQvOworfQorCitzdWIgZGlzb3duIHsKKyAgbXkgJHRoaXMgPSBzaGlmdDsKKyAgbXkgJHRoZWNoaWxkID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJHRoaXMtPmluaGVyaXQoJ09QVFMnKTsKKyAgbXkgJGluZCA9IDA7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJPYmo6OmRpc293bjogKCR0aGlzKSBbJHRoaXMtPntDRklFTER9XSBkaXNvd25pbmcgKCR0aGVjaGlsZCkgWyR0aGVjaGlsZC0+e0NGSUVMRH1dXG4iLCAkb3B0cyk7CisKKyAgZm9yZWFjaCBteSAkY2hpbGQgKEB7JHRoaXMtPnsnQ0hJTERSRU4nfX0pIHsKKyAgICBsYXN0IGlmICRjaGlsZCBlcSAkdGhlY2hpbGQ7CisgICAgJGluZCsrOworICB9CisgIGlmICgkaW5kIDwgQHskdGhpcy0+eydDSElMRFJFTid9fSkgeworICAgIHNwbGljZShAeyR0aGlzLT57J0NISUxEUkVOJ319LCAkaW5kLCAxKTsKKyAgfSBlbHNlIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojpkd2FybigiQ2hpbGQgKCR0aGVjaGlsZCkgbm90IGZvdW5kIGluIG9iamVjdCAoJHRoaXMpXG4iLCAkb3B0cyk7CisgIH0KK30KKworc3ViIGRpc2FibGVkIHsKKyAgbXkgJHRoaXMgPSBzaGlmdDsKKyAgcmV0dXJuIChleGlzdHMgJHRoaXMtPnsnZGlzYWJsZSd9ID8gJHRoaXMtPnsnZGlzYWJsZSd9IDogMCk7Cit9CisKK215ICVjZmcgPSAoCisJICAgJ25hbWUnID0+IDEsCisJICAgJ3R5cGUnID0+IDIsCisJICAgJ2lkJyA9PiA2LAorCSAgKTsKKworc3ViIGNmZ3NvcnQgeworICBteSAkc2VsZiA9IHNoaWZ0OworICBteSAkYSA9IHNoaWZ0OworICBteSAkYiA9IHNoaWZ0OworICByZXR1cm4gLTEgaWYgZXhpc3RzICRjZmd7JGF9IGFuZCBub3QgZXhpc3RzICRjZmd7JGJ9OworICByZXR1cm4gMSBpZiBleGlzdHMgJGNmZ3skYn0gYW5kIG5vdCBleGlzdHMgJGNmZ3skYX07CisgIHJldHVybiAkY2ZneyRhfSA8PT4gJGNmZ3skYn0gaWYgZXhpc3RzICRjZmd7JGF9IGFuZCBleGlzdHMgJGNmZ3skYn07CisgIHJldHVybiAtMSBpZiAhcmVmKCRzZWxmLT57JGF9KSBhbmQgcmVmKCRzZWxmLT57JGJ9KTsKKyAgcmV0dXJuIDEgaWYgIXJlZigkc2VsZi0+eyRifSkgYW5kIHJlZigkc2VsZi0+eyRhfSk7CisgIHJldHVybiAtMSBpZiByZWYoJHNlbGYtPnskYX0pID1+IC9OZXRTTk1QOjpDZXJ0LyBhbmQgcmVmKCRzZWxmLT57JGJ9KSAhfiAvTmV0U05NUDo6Q2VydC87CisgIHJldHVybiAxIGlmIHJlZigkc2VsZi0+eyRifSkgPX4gL05ldFNOTVA6OkNlcnQvIGFuZCByZWYoJHNlbGYtPnskYX0pICF+IC9OZXRTTk1QOjpDZXJ0LzsKKyAgcmV0dXJuIDA7Cit9CisKK3N1YiBkdW1wIHsKKyAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgbXkgJGluZGVudCA9IHNoaWZ0OworICBteSAkc2VsZl9zdHIgPSAkc2VsZi0+eydDRklFTEQnfTsKKyAgbXkgQGRhdGFfa2V5cyA9ICBncmVwIHshJHNlbGYtPmF1dG9TZXQoJF8pfSBrZXlzICUkc2VsZjsKKyAgbXkgQGxpbmVzOworCisgIHB1c2goQGxpbmVzLCAiXG4iIC4gJyAnIHggJGluZGVudCAuICIkc2VsZl9zdHIgPSB7XG4iKSBpZiBkZWZpbmVkICRpbmRlbnQ7CisKKyAgeworICAgIG15ICRpbmRlbnQgPSAoZGVmaW5lZCAkaW5kZW50ID8gJGluZGVudCArIDMgOiAwKTsKKyAgICBmb3JlYWNoIG15ICRrZXkgKHNvcnQge2NmZ3NvcnQoJHNlbGYsJE5ldFNOTVA6OkNlcnQ6Ok9iajo6YSwKKwkJCQkgICAkTmV0U05NUDo6Q2VydDo6T2JqOjpiKX0gKHNvcnQgQGRhdGFfa2V5cykpIHsKKyAgICAgIGlmIChyZWYoJHNlbGYtPnska2V5fSkgPX4gL05ldFNOTVA6OkNlcnQvKSB7CisJcHVzaChAbGluZXMsICRzZWxmLT57JGtleX0tPmR1bXAoJGluZGVudCkpOworICAgICAgfSBlbHNpZiAocmVmKCRzZWxmLT57JGtleX0pID1+IC9BUlJBWS8pIHsKKwlwdXNoKEBsaW5lcywgIlxuIikgaWYgcmVmKCR7JHNlbGYtPnska2V5fX1bMF0pICF+IC9OZXRTTk1QOjpDZXJ0LzsKKwlmb3JlYWNoIG15ICRlbGVtIChAeyRzZWxmLT57JGtleX19KSB7CisJICBpZiAocmVmKCRlbGVtKSA9fiAvTmV0U05NUDo6Q2VydC8pIHsKKwkgICAgcHVzaChAbGluZXMsICRlbGVtLT5kdW1wKCRpbmRlbnQpKTsKKwkgIH0gZWxzZSB7CisJICAgIHB1c2goQGxpbmVzLCAnICcgeCAkaW5kZW50IC4gIiRrZXkgPSAkZWxlbVxuIik7CisJICB9CisJfQorICAgICAgfSBlbHNlIHsKKwlteSAkc3RyID0gJGtleSAuIChkZWZpbmVkICRzZWxmLT57JGtleX0gPyAiID0gJHNlbGYtPnska2V5fVxuIiA6ICJcbiIpOworCXB1c2goQGxpbmVzLCAnICcgeCAkaW5kZW50IC4gJHN0cik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVzaChAbGluZXMsICcgJyB4ICRpbmRlbnQgLiAifTsgIyBlbmQgJHNlbGZfc3RyXG4iKSBpZiBkZWZpbmVkICRpbmRlbnQ7CisgIHJldHVybiBAbGluZXM7Cit9CisKK3N1YiBERVNUUk9ZIHsKKyAgbXkgJHRoaXMgPSBzaGlmdDsKKworICBwcmludCgiT2JqOjpERVNUUk9ZICR0aGlzIFsiLCByZWYgJHRoaXMsICJdXG4iKSBpZiAkTmV0U05NUDo6Q2VydDo6REVCVUcgPj0gMzsKK30KKworcGFja2FnZSBOZXRTTk1QOjpDZXJ0OjpBcHA7Cit1c2UgdmFycyBxdyhASVNBKTsKKworQElTQSA9IHF3KE5ldFNOTVA6OkNlcnQ6Ok9iaik7CisKK3N1YiBuZXcgeworICBteSAkY2xhc3MgPSBzaGlmdDsKKworICAjIHRoZSBhcHAgaXMgZ29kLCBpdCBpcyBpdHMgb3duIHBhcmVudAorICBteSAkdGhpcyA9ICRjbGFzcy0+U1VQRVI6Om5ldygnQVBQJyk7CisKKyAgYmxlc3MoJHRoaXMsICRjbGFzcyk7CisKKyAgIyB2ZXJpZnkgcmVxdWlyZWQgdG9vbHMgb3IgZGllCisgICR0aGlzLT5jaGVja1JlcXMoKTsKKworICAjIGludGVybmFsIGludGl0aWFsaXphdGlvbgorICAkdGhpcy0+aW5pdE9wdHMoKTsKKworICAjIG1ha2UgYSBuZXcgZW1wdHkgY29uZmlnIGFuZCBpbml0IChub3QgcGFyc2VkKQorICAkdGhpcy0+eydjb25maWcnfSA9IG5ldyBOZXRTTk1QOjpDZXJ0OjpDb25maWcoJHRoaXMpOworCisgIHJldHVybiAkdGhpczsKK30KKworc3ViIGNoZWNrUmVxcyB7CisgIG15ICRhcHAgPSBzaGlmdDsKKworICBkaWUoIiROZXRTTk1QOjpDZXJ0OjpPUEVOU1NMIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBleGVjdXRhYmxlIikKKyAgICBpZiBzeXN0ZW0oIiROZXRTTk1QOjpDZXJ0OjpPUEVOU1NMIHZlcnNpb24gPiAvZGV2L251bGwgMj4mMSIpOworCisgIG15ICRvc3NsX3ZlciA9IGAkTmV0U05NUDo6Q2VydDo6T1BFTlNTTCB2ZXJzaW9uYDsgY2hvbXAgJG9zc2xfdmVyOworICAkb3NzbF92ZXIgPX4gcy9eT3BlblNTTFxzKyhbXGRcLl0rKS4qJC8kMS87CisgIG15ICRvc3NsX21pbl92ZXIgPSAkTmV0U05NUDo6Q2VydDo6T1BFTlNTTF9NSU5fVkVSOworCisgIGRpZSgiJE5ldFNOTVA6OkNlcnQ6Ok9QRU5TU0wgKHYkb3NzbF92ZXIpOiBtdXN0IGJlICRvc3NsX21pbl92ZXIgb3IgbGF0ZXIiKQorICAgIGlmICgkb3NzbF92ZXIgY21wICRvc3NsX21pbl92ZXIpIDwgMDsKKworICBkaWUoIiROZXRTTk1QOjpDZXJ0OjpDRkdUT09MIG5vdCBmb3VuZDogcGxlYXNlIGluc3RhbGwiKQorICAgIGlmIHN5c3RlbSgiJE5ldFNOTVA6OkNlcnQ6OkNGR1RPT0wgPiAvZGV2L251bGwgMj4mMSIpOworfQorCitzdWIgaW5pdE9wdHMgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRvcHRzID0ge307CisgICRhcHAtPmF1dG9TZXQoJ09QVFMnLCAkb3B0cyk7CisKKyAgIyBEZWZpbmUgZGlyZWN0b3JpZXMgd2UgbmVlZC4KKyAgJG9wdHMtPnsnYmluZGlyJ30gPSBOZXRTTk1QOjpDZXJ0OjpmaW5kX2Jpbl9kaXIoKTsKKworICAkb3B0cy0+eydvdXQnfSA9ICI+ICROZXRTTk1QOjpDZXJ0OjpPVVRMT0ciOworICAkb3B0cy0+eydlcnInfSA9ICIyPiAkTmV0U05NUDo6Q2VydDo6RVJSTE9HIjsKKworICAjIHNldCB1cCBwYXRocyBmb3IgYXBwIGluc3RhbGwgYW5kIHJ1bnRpbWUgZW52CisgICRFTlZ7UEFUSH0gPSAiL3NiaW46L3Vzci9zYmluOiRFTlZ7UEFUSH0iOworICAkRU5We1BBVEh9ID0gIiRvcHRzLT57J2JpbmRpcid9OiRFTlZ7UEFUSH0iOworCisgICMgZGVmYXVsdCBhbGwgcHJpdnMgdG8gLXJ3LS0tLS0tLQorICB1bWFzaygwNzcpOworfQorCitzdWIgaW5pdCB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15IEBhcmdzID0gQF87ICAgIyBwYXNzIGV4dGVybmFsIGFyZ3MgKHR5cGljYWxseSBBUkdWKQorCisgICMgcGFyc2UgY29tbWFuZCBsaW5lCisgICRhcHAtPnBhcnNlQXJncyhAYXJncyk7CisKKyAgIyBsYXp5IGNvbmZpZyBwYXJzaW5nIHBvc3Rwb25lZCB1bnRpbCBoZXJlLCB3aWxsIG5vdCByZXBhcnNlCisgICRjb25maWctPnBhcnNlKCk7CisKKyAgIyBzZXQgZGVmYXVsdHMgaGVyZSBpZiBub3QgYWxyZWFkeSBzZXQgaW4gY21kbGluZSBvciBjb25maWcKKyAgIyBndWlkZWQgaW50ZXJhY3RpdmUgbW9kZSBieSBkZWZhdWx0CisgIE5ldFNOTVA6OkNlcnQ6OnNldF9kZWZhdWx0KCRvcHRzLCAkY29uZmlnLCAnaW50ZXJhY3RpdmUnLCAxKTsKKyAgIyB2ZXJib3NlIG91dHB1dAorICBOZXRTTk1QOjpDZXJ0OjpzZXRfZGVmYXVsdCgkb3B0cywgJGNvbmZpZywgJ3ZlcmJvc2UnLCAxKTsKKworICAjIGZpbmQgdGxzZGlyL3N1YmRpcnMgb3IgbWFrZSBpdAorICAkb3B0cy0+eyd0bHNkaXInfSA9ICRhcHAtPmNyZWF0ZVRsc0RpcigpOworfQorCitzdWIgcGFyc2VBcmdzIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSBAYXJncyA9IEBfOworCisgIE5ldFNOTVA6OkNlcnQ6OkdldE9wdHNGcm9tQXJyYXkoXEBhcmdzLCAkb3B0cywgJ2hlbHB8PycsICd2ZXJzaW9ufFYnLAorCQkgICAgICAnaW50ZXJhY3RpdmUhJywgJ0knLCAndmVyYm9zZSEnLCAnUScsICdmb3JjZXxGJywKKwkJICAgICAgJ2NmZ2ZpbGV8Zj1zJywgJ2NmZ2RpcnxDPXMnLCAndGxzZGlyfHRsc0RpcnxUPXMnLAorCQkgICAgICAndGFnfHQ9cycsICdpZGVudGl0eXxpPXMnLCAnZGVidWd8RCsnLCk7CisKKyAgTmV0U05NUDo6Q2VydDo6dmVyc2lvbigwKSBpZiAkb3B0cy0+eyd2ZXJzaW9uJ307CisKKyAgTmV0U05NUDo6Q2VydDo6dXNhZ2UoMCkgaWYgJG9wdHMtPnsnaGVscCd9OworCisgICMgcHVsbCBvdXQgdGhlIGNtZCAtIGdldE9wdHMgc2hvdWxkIGxlYXZlIGl0IHVudG91Y2hlZCBmb3IgdXMKKyAgJG9wdHMtPnsnY21kJ30gPSBOZXRTTk1QOjpDZXJ0OjpwdWxsX2NtZChcQGFyZ3MpOworCisgICMgc2F2ZSBleHRyYSBhcmdzIGZvciBjb21tYW5kIHNwZWNpZmljIHByb2Nlc3NpbmcKKyAgJG9wdHMtPnsnY21kYXJncyd9ID0gW0BhcmdzXTsKKworICAjIENoZWNrIGRlYnVnIG9wdGlvbiBmaXJzdAorICAkTmV0U05NUDo6Q2VydDo6REVCVUcgPSAkb3B0cy0+eydkZWJ1Zyd9OworICAkb3B0cy0+eydlcnInfSA9ICRvcHRzLT57J291dCd9ID0gIiIgaWYgJG9wdHMtPnsnZGVidWcnfTsKKyAgJG9wdHMtPnsnaW50ZXJhY3RpdmUnfSA9IG5vdCAkb3B0cy0+eydJJ30gaWYgZGVmaW5lZCAkb3B0cy0+eydJJ307CisgICRvcHRzLT57J3ZlcmJvc2UnfSA9IG5vdCAkb3B0cy0+eydRJ30gaWYgZGVmaW5lZCAkb3B0cy0+eydRJ307CisKKyAgIyBzZWFyY2ggZm9yIGNmZ2RpciBhbmQgY2ZnZmlsZSBiYXNlZCBvbiBvcHRzIGFuZCBjb25mcGF0aAorICAkb3B0cy0+eydjZmdkaXInfSA9IE5ldFNOTVA6OkNlcnQ6OmZpbmRfY2ZnZGlyKCRvcHRzLT57J2NmZ2Rpcid9LAorCQkJCQkJICRvcHRzLT57J2NmZ2ZpbGUnfSk7CisgICRvcHRzLT57J2NmZ2ZpbGUnfSA9IE5ldFNOTVA6OkNlcnQ6OmZpbmRfY2ZnZmlsZSgkb3B0cy0+eydjZmdkaXInfSwKKwkJCQkJCSAgICRvcHRzLT57J2NmZ2ZpbGUnfSk7Cit9CisKK3N1YiBjcmVhdGVUbHNEaXIgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkZGlyOworICBteSAkZmlsZTsKKyAgbXkgJGNtZDsKKworICAkZGlyID0gJGNvbmZpZy0+aW5oZXJpdCgndGxzRGlyJyk7CisKKyAgaWYgKG5vdCBkZWZpbmVkICRkaXIpIHsKKyAgICBteSAkY2ZnZGlyID0gJG9wdHMtPnsnY2ZnZGlyJ307CisgICAgZGllKCJ1bmRlZmluZWQgY2ZnZGlyOiB1bmFibGUgdG8gY3JlYXQgdGxzZGlyOiBleGl0aW5nLi4uXG4iKSB1bmxlc3MgZGVmaW5lZCAkY2ZnZGlyOworICAgICRkaXIgPSAiJGNmZ2Rpci8kTmV0U05NUDo6Q2VydDo6VExTRElSIjsKKyAgfQorCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgidGxzRGlyIGlzOiAkZGlyXG4iLCAkb3B0cyk7CisgICRkaXIgPSBOZXRTTk1QOjpDZXJ0OjpmcV9yZWxfcGF0aCgkZGlyKTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJ0bHNEaXIgaXM6ICRkaXJcbiIsICRvcHRzKTsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInRsc0RpciBub3QgZm91bmQsIGNyZWF0aW5nXG4iLCAkb3B0cykgdW5sZXNzIC1kICRkaXI7CisgIE5ldFNOTVA6OkNlcnQ6Om1ha2VfZGlycygkb3B0cywgJGRpciwgMDcwMCwgQE5ldFNOTVA6OkNlcnQ6OlRMU0RJUlMpOworCisgIG15ICRzc2xfY2ZnX2luID0gTmV0U05NUDo6Q2VydDo6ZnFfcmVsX3BhdGgoJE5ldFNOTVA6OkNlcnQ6OlNTTENGR0lOLCRkaXIpOworCisgICMgRXhpc3Rpbmcgb3BlbnNzbC5jb25mIHRtcGwgd2lsbCBiZSBwcmVzZXJ2ZWQKKyAgaWYgKC1mICRzc2xfY2ZnX2luKSB7CisgICAgTmV0U05NUDo6Q2VydDo6ZHdhcm4oIk9wZW5TU0wgdGVtcGxhdGUgZXhpc3RzICgkc3NsX2NmZ19pbik6IHByZXNlcnZpbmcuLi4iLCAkb3B0cyk7CisgIH0KKworICBpZiAobm90IC1mICRzc2xfY2ZnX2luKSB7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJtYWtlX29wZW5zc2xfY29uZigkc3NsX2NmZ19pbikiLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6bWFrZV9vcGVuc3NsX2NvbmYoJHNzbF9jZmdfaW4pOworICAgIGNobW9kKDA2MDAsICRzc2xfY2ZnX2luKTsKKyAgfQorCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY3JlYXRlVGxzRGlyOiBkb25lXG4iLCAkb3B0cyk7CisgIHJldHVybiAkZGlyOworfQorCitteSBAaW50ZXJhY3RpdmVfb3BzID0gKFsnZ2VuY2VydCcsICJHZW5lcmF0ZSBhIHNpZ25lZCBjZXJ0aWZpY2F0ZSJdLAorCSAgIFsnZ2VuY2EnLCAiR2VuZXJhdGUgYSBDQSBjZXJ0aWZpY2F0ZSJdLAorCSAgIFsnZ2VuY3NyJywgIkdlbmVyYXRlIGEgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0Il0sCisJICAgWydzaWduY3NyJywgIlNpZ24gYSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QiXSwKKwkgICk7CisKK3N1YiBydW4geworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRjbWQgPSAkb3B0cy0+eydjbWQnfTsKKworICAjIG11c3QgaGF2ZSBhIGNvbW1hbmQgaW4gbm9uLUludGVyYWN0aXZlIG1vZGUKKyAgTmV0U05NUDo6Q2VydDo6dXNhZ2UoMykgaWYgISRvcHRzLT57J2ludGVyYWN0aXZlJ30gYW5kICEkb3B0cy0+eydjbWQnfTsKKworICAjICBjaGFuZ2UgZGlyIHRscyBkaXIgLSB0aGUgY3dkIGZvciBhbGwgY29tbWFuZHMgLSBzYXZlIGN3ZCBmaXJzdAorICAkb3B0cy0+eydyZGlyJ30gPSA6OmdldGN3ZCgpOworICBjaGRpcigkb3B0cy0+eyd0bHNkaXInfSkgb3IgZGllKCJjb3VsZCdudCBjaGFuZ2UgZGlyZWN0b3J5OiAkb3B0cy0+e3Rsc2Rpcn0iKTsKKyAgIyBkaXNwbGF5IGNvbnRleHQKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJQQVRIOiAkRU5We1BBVEh9XG5cbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjb25maWcgZmlsZTogJG9wdHMtPntjZmdmaWxlfVxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNvbmZpZyBkaXI6ICAkb3B0cy0+e2NmZ2Rpcn1cbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJ0bHMgZGlyOiAgICAgJG9wdHMtPnt0bHNkaXJ9XG4iLCAkb3B0cyk7CisKKyAgbXkgJGNtZHN0ciA9IGpvaW4oJyAnLCAkY21kLCBAeyRvcHRzLT57J2NtZGFyZ3MnfX0pOworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNvbW1hbmQ6ICAgICAkY21kc3RyXG4iLCAkb3B0cyk7CisKKyAgTmV0U05NUDo6Q2VydDo6R2V0T3B0c0Zyb21BcnJheShcQHskb3B0cy0+eydjbWRhcmdzJ319LCAkb3B0cywKKwkJCQkgICd3aXRoLWNhfGE9cycsICdjYXxBPXMnLCdjc3J8cj1zJywKKwkJCQkgICdmcm9tLWNydHx4PXMnLCAnY3J0fFg9cycsICdkYXlzfGQ9cycsCisJCQkJICAnY258bj1zJywgJ2VtYWlsfGU9cycsICdob3N0fGg9cycsCisJCQkJICAnc2FufHM9c0AnLCAnb3JnfG89cycsICd1bml0fHU9cycsCisJCQkJICAnY291bnRyeXxjPXMnLCAnc3RhdGV8cHJvdmluY2V8cD1zJywKKwkJCQkgICdsb2NhbGl0eXxsPXMnLCAnYnJpZWZ8YicsCisJCQkJICBATmV0U05NUDo6Q2VydDo6WDUwOUZNVFMpOworCisgICMgcHJvY2VzcyBleHRyYSBhcmdzOyAtLTxjZmctbmFtZT5bPTx2YWw+XQorICAkYXBwLT5wcm9jZXNzRXh0cmFBcmdzKCk7CisKKyAgIyBJZiBpbiBpbnRlcmFjdGl2ZSBtb2RlIC0gZmlsbCBtaXNzaW5nIGluZm8gYnkgaW50ZXJ2aWV3aW5nIHVzZXIKKyAgaWYgKG5vdCBkZWZpbmVkICRjbWQgb3IgZ3JlcCB7LyRjbWQvfSBtYXAgeyRfLT5bMF19IEBpbnRlcmFjdGl2ZV9vcHMpIHsKKyAgICAkYXBwLT51c2VySW5wdXQoKSBpZiAkb3B0cy0+e2ludGVyYWN0aXZlfTsKKyAgICAkY21kID0gJG9wdHMtPnsnY21kJ307ICMgbWF5IGhhdmUgY2hhbmdlZAorICB9CisKKyAgIyByZXNvbHZlIGlucHV0IGFyZ3MgdG8gZmlsZW5hbWVzCisgICRhcHAtPnJlc29sdmVDcnRBcmdzKCk7CisKKyAgIyB1c2UgZW52LiBvciBtZXJnZSB0ZW1wbGF0ZSBmb3IgT3BlblNTTCBjb25maWcKKyAgJE5ldFNOTVA6OkNlcnQ6OlNTTENGRyB8fD0gJGFwcC0+b3BlbnNzbENmZygpOworCisgIGlmICgkY21kID1+IC9eZ2VuY2EkLykgeworICAgIE5ldFNOTVA6OkNlcnQ6OnVzYWdlKDEpIGlmIGRlZmluZWQgJG9wdHMtPnsnZnJvbS1jcnQnfSBvciBkZWZpbmVkICRvcHRzLT57J2Nzcid9OworICAgICRhcHAtPmdlbkNhKCRvcHRzLT57J3dpdGgtY2EnfSk7CisgIH0gZWxzaWYgKCRjbWQgPX4gL15nZW5jZT9ydCQvKSB7CisgICAgTmV0U05NUDo6Q2VydDo6dXNhZ2UoMSkgaWYgZGVmaW5lZCAkb3B0cy0+eydmcm9tLWNydCd9IG9yIGRlZmluZWQgJG9wdHMtPnsnY3NyJ307CisgICAgJGFwcC0+Z2VuQ2VydCgkb3B0cy0+eyd3aXRoLWNhJ30pOworICB9IGVsc2lmICgkY21kID1+IC9eZ2VuY3NyJC8pIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c2FnZSgxKSBpZiBkZWZpbmVkICRvcHRzLT57J3dpdGgtY2EnfSBvciBkZWZpbmVkICRvcHRzLT57J2NydCd9OworICAgICRhcHAtPmdlbkNzcigpOworICB9IGVsc2lmICgkY21kID1+IC9ec2lnbmNzciQvKSB7CisgICAgTmV0U05NUDo6Q2VydDo6dXNhZ2UoMSkgdW5sZXNzIGRlZmluZWQgJG9wdHMtPnsnd2l0aC1jYSd9IGFuZCBkZWZpbmVkICRvcHRzLT57J2Nzcid9OworICAgICRhcHAtPnNpZ25Dc3IoKTsKKyAgfSBlbHNpZiAoJGNtZCA9fiAvXnNob3coY2U/cnRzPyk/JC8pIHsKKyAgICAkYXBwLT5zaG93KCdjZXJ0cycpOworICB9IGVsc2lmICgkY21kID1+IC9ec2hvd2Nhcz8kLykgeworICAgICRhcHAtPnNob3coJ2NhLWNlcnRzJyk7CisgIH0gZWxzaWYgKCRjbWQgPX4gL15pbXBvcnQkLykgeworICAgICRhcHAtPmltcG9ydCgpOworICB9IGVsc2UgeworICAgIE5ldFNOTVA6OkNlcnQ6OnVzYWdlKCk7CisgIH0KK30KKworc3ViIHByb2Nlc3NFeHRyYUFyZ3MgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15IEBhcmdzOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgicHJvY2Vzc2luZyBleHRyYSBhcmdzLi4uXG4iLCAkb3B0cyk7CisKKyAgd2hpbGUgKEB7JG9wdHMtPnsnY21kYXJncyd9fSkgeworICAgIG15ICRhcmcgPSBzaGlmdChAeyRvcHRzLT57J2NtZGFyZ3MnfX0pOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZm91bmQ6IGFyZyAtLT4gJGFyZ1xuIiwgJG9wdHMpOworICAgIGlmICgkYXJnID1+IC9eLSsoXHcrKSg/Oj0oLio/KSk/XHMqJC8pIHsKKyAgICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZm91bmQ6IGFyZygkMSkgdmFsKCQyKVxuIiwgJG9wdHMpOworICAgICAgaWYgKGV4aXN0cyAkb3B0cy0+eyQxfSkgeworICAgCU5ldFNOTVA6OkNlcnQ6OnZ3YXJuKCJvcHRpb24gKCQxKSBhbHJlYWR5IHNldDogb3ZlcndyaXRpbmdcbiIsICRvcHRzKTsKKyAgICAgIH0gCisgICAgICAkb3B0cy0+eyQxfSA9IChkZWZpbmVkICQyID8gJDIgOiAxKTsKKyAgICB9IGVsc2UgeworICAgICAgcHVzaChAYXJncywgJGFyZyk7CisgICAgfQorICB9CisgIEB7JG9wdHMtPnsnY21kYXJncyd9fSA9IEBhcmdzOworfQorCitzdWIgcmVzb2x2ZUNydEFyZ3MgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisKKyAgIyBmaW5kIGNhLCBjcnQsIGNzciBhcmdzIGlmIHByZXNlbnQgYW5kIHJldHVybiBmdWxseSBxdWFsaWZpZWQgcGF0aAorICBpZiAoZGVmaW5lZCAkb3B0cy0+eyd3aXRoLWNhJ30pIHsKKyAgICBteSAkY2E7CisgICAgJGNhID0gTmV0U05NUDo6Q2VydDo6ZmluZF9jZXJ0cygkb3B0cywgJ2NhLWNlcnRzJywgJG9wdHMtPnsnd2l0aC1jYSd9KTsKKyAgICBkaWUoInVuYWJsZSB0byBsb2NhdGUgQ0EgY2VydGlmaWNhdGUgKCRvcHRzLT57J3dpdGgtY2EnfSlcbiIpIHVubGVzcyAtZSAkY2E7CisgICAgZGllKCJ1bmFibGUgcmVhZCBDQSBjZXJ0aWZpY2F0ZSAoJG9wdHMtPnsnd2l0aC1jYSd9KVxuIikgdW5sZXNzIC1yICRjYTsKKyAgICAkb3B0cy0+eyd3aXRoLWNhJ30gPSAkY2E7CisgIH0KKworICBpZiAoZGVmaW5lZCAkb3B0cy0+eydmcm9tLWNydCd9KSB7CisgICAgbXkgJGNydDsKKyAgICAkY3J0ID0gTmV0U05NUDo6Q2VydDo6ZmluZF9jZXJ0cygkb3B0cywgJ2NlcnRzJywgJG9wdHMtPnsnZnJvbS1jcnQnfSk7CisgICAgZGllKCJ1bmFibGUgdG8gbG9jYXRlIGNlcnRpZmljYXRlICgkb3B0cy0+eydmcm9tLWNydCd9KVxuIikgdW5sZXNzIC1lICRjcnQ7CisgICAgZGllKCJ1bmFibGUgcmVhZCBjZXJ0aWZpY2F0ZSAoJG9wdHMtPnsnZnJvbS1jcnQnfSlcbiIpIHVubGVzcyAtciAkY3J0OworICAgICRvcHRzLT57J2Zyb20tY3J0J30gPSAkY3J0OworICB9CisKKyAgaWYgKGRlZmluZWQgJG9wdHMtPnsnY3NyJ30pIHsKKyAgICBteSAkY3NyOworICAgICRjc3IgPSBOZXRTTk1QOjpDZXJ0OjpmaW5kX2NlcnRzKCRvcHRzLCAnY3NycycsICRvcHRzLT57J2Nzcid9KTsKKyAgICBkaWUoInVuYWJsZSB0byBsb2NhdGUgQ1NSIGNlcnRpZmljYXRlICgkb3B0cy0+e2Nzcn0pXG4iKSB1bmxlc3MgLWUgJGNzcjsKKyAgICBkaWUoInVuYWJsZSByZWFkIENTUiBjZXJ0aWZpY2F0ZSAoJG9wdHMtPntjc3J9KVxuIikgdW5sZXNzIC1yICRjc3I7CisgICAgJG9wdHMtPnsnY3NyJ30gPSAkY3NyOworICB9Cit9CisKK3N1YiBvcGVuc3NsQ2ZnIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJHNhbiA9ICRjb25maWctPmluaGVyaXQoJ3NhbicpIHx8ICRjb25maWctPmluaGVyaXQoJ3N1YmplY3RBbHROYW1lJyk7CisgIG15ICRzc2xfY2ZnX2luID0gTmV0U05NUDo6Q2VydDo6ZnFfcmVsX3BhdGgoJE5ldFNOTVA6OkNlcnQ6OlNTTENGR0lOKTsKKyAgbXkgJHNzbF9jZmdfb3V0ID0gTmV0U05NUDo6Q2VydDo6ZnFfcmVsX3BhdGgoJE5ldFNOTVA6OkNlcnQ6OlNTTENGR09VVCk7CisKKyAgaWYgKG5vdCAtZiAkc3NsX2NmZ19pbikgeworICAgIE5ldFNOTVA6OkNlcnQ6OnZ3YXJuKCJPcGVuU1NMIHRlbXBsYXRlIG5vdCBmb3VuZDogJHNzbF9jZmdfaW5cbiIsICRvcHRzKTsKKyAgICBkaWUoIm5vIE9wZW5TU0wgdGVtcGxhdGUiKTsKKyAgfQorCisgIG9wZW4oSU4sICRzc2xfY2ZnX2luKSBvciBkaWUoInVuYWJsZSB0byBvcGVuIE9wZW5TU0wgdGVtcGxhdGU6ICRzc2xfY2ZnX2luXG4iKTsKKyAgb3BlbihPVVQsICI+JHNzbF9jZmdfb3V0Iikgb3IgZGllKCJ1bmFibGUgdG8gb3BlbiBPcGVuU1NMIGNvbmZpZzogJHNzbF9jZmdfb3V0XG4iKTsKKworICBwcmludCBPVVQgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7CisgIHByaW50IE9VVCAiIyMjIyMgICAgV2FybmluZzogRG8gTm90IEVkaXQgLSBHZW5lcmF0ZWQgRmlsZSAgICAjIyMjI1xuIjsKKyAgcHJpbnQgT1VUICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOworICB3aGlsZSAoPElOPikgeworICAgIGlmICgkc2FuKSB7CisgICAgICBzL1wlXFsoW15cXV0qPylcXS8kMS87CisgICAgfSBlbHNlIHsKKyAgICAgIHMvXCVcWyhbXlxdXSo/KVxdLy87CisgICAgfQorICAgIHByaW50IE9VVCAkXzsKKyAgfQorICBjbG9zZShJTik7CisgIGNsb3NlKE9VVCk7CisKKyAgcmV0dXJuICRzc2xfY2ZnX291dDsKK30KKworc3ViIG9wZW5zc2xFbnYgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworCisgIG15ICRjbiA9IHNoaWZ0OworICBteSAkZGF5cyA9IHNoaWZ0OworICBteSAkZGlyID0gc2hpZnQgfHwgIi4iOworICAjIFhYWCAtIG5lZWQgdG8gaGFuZGxlIGNvbmZpZydkIGlkZW50aXR5IGhlcmUKKyAgbXkgJG5hbWUgPSAkY29uZmlnLT5pbmhlcml0KCJuYW1lIik7CisgIG15ICRob3N0ID0gJGNvbmZpZy0+aW5oZXJpdCgiaG9zdCIpOworICBteSAkZW1haWwgPSAkY29uZmlnLT5pbmhlcml0KCJlbWFpbCIpOworICBteSAkY291bnRyeSA9ICRjb25maWctPmluaGVyaXQoImNvdW50cnkiKTsKKyAgbXkgJHN0YXRlID0gJGNvbmZpZy0+aW5oZXJpdCgic3RhdGUiKTsKKyAgbXkgJGxvY2FsaXR5ID0gJGNvbmZpZy0+aW5oZXJpdCgibG9jYWxpdHkiKTsKKyAgbXkgJG9yZyA9ICRjb25maWctPmluaGVyaXQoIm9yZyIpOworICBteSAkb3JnX3VuaXQgPSAkY29uZmlnLT5pbmhlcml0KCJ1bml0IikgfHwgJGNvbmZpZy0+aW5oZXJpdCgib3JnVW5pdCIpOworICBteSAkc2FuOworICBteSAkc2FuX2Fycl9yZWY7CisgIG15ICRtZCA9ICRjb25maWctPmluaGVyaXQoIm1zZ0RpZ2VzdCIpOworICBteSAka3NpemUgPSAkY29uZmlnLT5pbmhlcml0KCJrZXlTaXplIik7CisKKyAgbXkgJGVudjsKKworICAkZW52IC49ICIgS1NJWkU9JGtzaXplIiBpZiBkZWZpbmVkICRrc2l6ZTsKKyAgJGVudiAuPSAiIERBWVM9JGRheXMiIGlmIGRlZmluZWQgJGRheXM7CisgICRlbnYgLj0gIiBNRD0kbWQiIGlmIGRlZmluZWQgJG1kOworCisgICRlbnYgLj0gIiBESVI9JyRkaXInIiBpZiBkZWZpbmVkICRkaXI7CisKKyAgJGVudiAuPSAiIEVNQUlMPSRlbWFpbCIgaWYgZGVmaW5lZCAkZW1haWw7CisgICRlbnYgLj0gIiBDTj0nJGNuJyIgaWYgZGVmaW5lZCAkY247CisgICRlbnYgLj0gIiBPUkc9JyRvcmcnIiBpZiBkZWZpbmVkICRvcmc7CisgICRlbnYgLj0gIiBPUkdfVU5JVD0nJG9yZ191bml0JyIgaWYgZGVmaW5lZCAkb3JnX3VuaXQ7CisgICRlbnYgLj0gIiBDT1VOVFJZPSRjb3VudHJ5IiBpZiBkZWZpbmVkICRjb3VudHJ5OworICAkZW52IC49ICIgU1RBVEU9JHN0YXRlIiBpZiBkZWZpbmVkICRzdGF0ZTsKKyAgJGVudiAuPSAiIExPQ0FMSVRZPSRsb2NhbGl0eSIgaWYgZGVmaW5lZCAkbG9jYWxpdHk7CisKKyAgJHNhbl9hcnJfcmVmID0gJGNvbmZpZy0+aW5oZXJpdCgnc3ViamVjdEFsdE5hbWUnKTsKKyAgJHNhbiA9IGpvaW4oJ1wsXCAnLCBAeyRzYW5fYXJyX3JlZn0pIGlmIHJlZiAkc2FuX2Fycl9yZWY7CisgICRzYW5fYXJyX3JlZiA9ICRjb25maWctPmluaGVyaXQoJ3NhbicpOworICAkc2FuIC49IGpvaW4oJ1wsXCAnLCBAeyRzYW5fYXJyX3JlZn0pIGlmIHJlZiAkc2FuX2Fycl9yZWY7CisgICRzYW4gPX4gcy9FTUFJTDovZW1haWw6L2c7CisgICRlbnYgLj0gIiBTQU49JHNhbiIgaWYgZGVmaW5lZCAkc2FuOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgib3BlbnNzbEVudjogJGVudlxuIiwgJG9wdHMpOworCisgIHJldHVybiAkZW52OworfQorb3VyIEBzYW5fcHJlZml4ID0gKFsnZGlyTmFtZTonLCAiZS5nLiwgZGlyTmFtZTovdXNyL3NoYXJlL3NubXAvdGxzIl0sCisJCSAgIFsnRE5TOicsICJlLmcuLCBETlM6dGVzdC5uZXQtc25tcC5vcmcpIl0sCisJCSAgIFsnZW1haWw6JywgImUuZy4sIGVtYWlsOmFkbWluXEBuZXQtc25tcC5vcmciXSwKKwkJICAgWydJUDonLCAiZS5nLiwgSVA6MTkyLjE2OC4xLjEiXSwKKwkJICAgWydSSUQ6JywgImUuZy4sIFJJRDoxLjEuMy42LjIwIl0sCisJCSAgIFsnVVJJOicsICJlLmcuLCBVUkk6aHR0cDovL3d3dy5uZXQtc25tcC5vcmciXSk7CisKK3N1YiB1c2VySW5wdXRETiB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRwcm9tcHQ7CisgIG15ICRyZXQ7CisgIG15ICRob3N0ID0gJGNvbmZpZy0+aW5oZXJpdCgiaG9zdCIpIHx8IDo6aG9zdG5hbWUoKTsKKyAgbXkgJGVtYWlsID0gJGNvbmZpZy0+aW5oZXJpdCgnZW1haWwnKSB8fCBnZXRsb2dpbigpIC4gIlxAJGhvc3QiOworCisgIyBnZXQgRU1BSUwKKyAgJHByb21wdCA9ICJFbnRlciBFbWFpbCI7CisgICRyZXQgPSAkZW1haWw7CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LAorCQkJCSAiXHRFbWFpbCBBZGRyZXNzIC0gKGUuZy4sIDxuYW1lPkA8ZG9tYWluPikiKTsKKyAgJGVtYWlsID0gJG9wdHMtPnsnZW1haWwnfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICAjIGdldCBDTgorICAkcHJvbXB0ID0gIkVudGVyIENvbW1vbiBOYW1lIjsKKyAgJHJldCA9ICgkb3B0cy0+eydjbWQnfSBlcSAnZ2VuY2EnID8gImNhLSRob3N0IiA6ICRlbWFpbCk7CisgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCdjbicpIHx8ICRjb25maWctPmluaGVyaXQoJ2NvbW1vbk5hbWUnKSB8fCAkcmV0OworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwKKwkJCQkgIlx0Q29tbW9uIE5hbWUgLSAoZS5nLiwgbmV0LXNubXAub3JnKSIpOworICAkb3B0cy0+eydjbid9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgICMgZ2V0IE9SRworICAkcHJvbXB0ID0gIkVudGVyIE9yZ2FuaXphdGlvbiI7CisgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCdvcmcnKSB8fCAnTmV0LVNOTVAnOworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwKKwkJCQkgIlx0T3JnYW5pemF0aW9uIC0gKGUuZy4sIE5ldC1TTk1QKSIpOworICAkb3B0cy0+eydvcmcnfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICAjIGdldCBPUkdfVU5JVAorICAkcHJvbXB0ID0gIkVudGVyIE9yZ2FuaXphdGlvbmFsIFVuaXQiOworICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgndW5pdCcpIHx8ICdEZXZlbG9wbWVudCc7CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LAorCQkJCSAiXHRPcmdhbml6YXRpb25hbCBVbml0IC0gKGUuZy4sIERldmVsb3BtZW50KSIpOworICAkb3B0cy0+eyd1bml0J30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgIyBnZXQgQ09VTlRSWQorICAkcHJvbXB0ID0gIkVudGVyIENvdW50cnkgQ29kZSI7CisgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCdjb3VudHJ5JykgfHwgJ1VTJzsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsCisJCQkJICJDb3VudHJ5IENvZGUsIDIgbGV0dGVycyAoPHRhYj4gZm9yIG9wdGlvbnMpIiwKKwkJCQkgJE5ldFNOTVA6OkNlcnQ6Ok1BVENILCBcQENDKTsKKyAgJG9wdHMtPnsnY291bnRyeSd9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgICMgZ2V0IFNUQVRFKFByb3ZpbmNlKQorICAkcHJvbXB0ID0gIkVudGVyIFN0YXRlIG9yIFByb3ZpbmNlIjsKKyAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ3N0YXRlJykgfHwgJ0NBJzsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsCisJCQkJICJcdFN0YXRlIG9yIFByb3ZpbmNlIC0gKGUuZy4sIENBKSIpOworICAkb3B0cy0+eydzdGF0ZSd9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgICMgZ2V0IExPQ0FMSVRZCisgICRwcm9tcHQgPSAiRW50ZXIgTG9jYWxpdHkiOworICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgnbG9jYWxpdHknKSB8fCAnRGF2aXMnOworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwgIlx0TG9jYWxpdHkgLSAoZS5nLiwgRGF2aXMpIik7CisgICRvcHRzLT57J2xvY2FsaXR5J30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgIyBnZXQgU0FOIChsb29wKQorICBpZiAoISRjb25maWctPnsnYnJpZWYnfSkgeworICAgICAgcHJpbnQgIkVudGVyIFN1YmplY3QgQWx0IE5hbWVzLiAgRXhhbXBsZXM6XG4iOworICAgICAgZm9yZWFjaCBteSAkcGFpciAoQHNhbl9wcmVmaXgpIHsKKwkgIHByaW50ZigiXHQlLTEwLjEwcyAlc1xuIiwgJHBhaXItPlswXSwgJHBhaXItPlsxXSk7CisgICAgICB9CisgIH0KKyAgZG8geworICAgICRyZXQgPSAnZG9uZSc7CisgICAgJHByb21wdCA9ICJFbnRlciBTdWJqZWN0IEFsdCBOYW1lIChlbnRlciAnZG9uZScgd2hlbiBmaW5pc2hlZCkgWyRyZXRdOiAiOworICAgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSAoJHByb21wdCwgJHJldCwKKwkJCSAgICAiXHRTdWJqZWN0IEFsdCBOYW1lIC0gKDx0eXBlPjo8dmFsPikiLAorCQkJICAgICAkTmV0U05NUDo6Q2VydDo6UFJFTUFUQ0gsIFxAc2FuX3ByZWZpeCk7CisgICAgcHVzaChAeyRvcHRzLT57J3Nhbid9fSwgJHJldCkgaWYgZGVmaW5lZCAkcmV0IGFuZCAkcmV0IG5lICdkb25lJzsKKyAgfSB3aGlsZSAoZGVmaW5lZCAkcmV0IGFuZCAkcmV0IG5lICdkb25lJyk7Cit9CisKK291ciBAc25tcF9hcHBzID0gKFsnc25tcCcsICdHZW5lcmljIENlcnRpZmljYXRlJ10sCisJCSAgWydzbm1wYXBwJywnQ2xpZW50IENlcnRpZmljYXRlJ10sCisJCSAgWydzbm1wZCcsJ0FnZW50IENlcnRpZmljYXRlJ10sCisJCSAgWydzbm1wdHJhcGQnLCdUcmFwLWFnZW50IENlcnRpZmljYXRlJ10pOworCitzdWIgdXNlcklucHV0VGFnIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJHJldDsKKyAgbXkgJHByb21wdDsKKworICBwcmludCAiQXBwbGljYXRpb24gVGFnOlxuXHR1c2VkIHRvIG5hbWUgdGhlIGNlcnRpZmljYXRlIGFuZCBkaWN0YXRlIGl0cyBmaWxlbmFtZVxuIjsKKyAgcHJpbnQgIlx0SXQgbWF5IGFsc28gYXNzb2NpYXRlIGl0IHdpdGggYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uIChlZyBcInNubXBkXCIpXG4iOworICBwcmludCAiXHRpZiAnbm9uZScsIGEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBmcm9tIG90aGVyIHBhcmFtZXRlcnNcbiI7CisgIHByaW50ICJcdGVudGVyIDx0YWI+PHRhYj4gZm9yIHR5cGljYWwgb3B0aW9ucywgb3IgZW50ZXIgbmV3IG5hbWVcbiI7CisgICRwcm9tcHQgPSAiRW50ZXIgQXBwbGljYXRpb24gVGFnIjsKKyAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ3RhZycpIHx8ICdub25lJzsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsCisJCQkJICJBcHBsaWNhdGlvbiBUYWcgYXNzb2NhaWF0ZWQgd2l0aCBjZXJ0aWZpY2F0ZSIsCisJCQkJIChub3QgJE5ldFNOTVA6OkNlcnQ6Ok1BVENIKSwgXEBzbm1wX2FwcHMpOworICAkb3B0cy0+eyd0YWcnfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0IGFuZCAkcmV0IG5lICdub25lJzsKK30KKworc3ViIHVzZXJJbnB1dCB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRwcm9tcHQ7CisgIG15ICRyZXQ7CisKKyAgcHJpbnQgIkNob29zZSBhbiBvcGVyYXRpb246XG4iOworICBmb3JlYWNoIG15ICRvcCAoQGludGVyYWN0aXZlX29wcykgeworICAgIHByaW50ICJcdCRvcC0+WzBdXHQtICAkb3AtPlsxXVxuIjsKKyAgfQorCisgICRwcm9tcHQgPSAiT3BlcmF0aW9uIjsKKyAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ2NtZCcpIHx8ICRpbnRlcmFjdGl2ZV9vcHNbMF1bMF07CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LAorCQkJCSAiQ2VydGlmY2lhdGUgT3BlcmF0aW9uIHRvIHBlcmZvcm0iLAorCQkJCSAkTmV0U05NUDo6Q2VydDo6TUFUQ0gsIFxAaW50ZXJhY3RpdmVfb3BzKTsKKworICAkb3B0cy0+eydjbWQnfSA9ICRyZXQ7CisKKyAgaWYgKCRyZXQgPX4gL15nZW5jZXJ0JC8pIHsKKyAgICAjIGdldCB0YWcKKyAgICAkYXBwLT51c2VySW5wdXRUYWcoKTsKKyAgICAjIGdldCBETgorICAgICRhcHAtPnVzZXJJbnB1dEROKCk7CisgICAgIyBzZWxmLXNpZ25lZC9DQS1zaWduZWQoY2EtY2VydCkKKyAgfSBlbHNpZiAoJHJldCA9fiAvXmdlbmNhJC8pIHsKKyAgICAjIGdldCBETgorICAgICRhcHAtPnVzZXJJbnB1dEROKCk7CisgIH0gZWxzaWYgKCRyZXQgPX4gL15nZW5jc3IkLykgeworICAgICMgZ2V0IHRhZworICAgICRhcHAtPnVzZXJJbnB1dFRhZygpOworICAgICMgZ2V0IEROCisgICAgJGFwcC0+dXNlcklucHV0RE4oKTsKKyAgfSBlbHNpZiAoJHJldCA9fiAvXnNpZ25jc3IkLykgeworICAgICMgZ2V0IGNzcgorICAgICRwcm9tcHQgPSAiQ2hvb3NlIENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCI7CisgICAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ2NzcicpOworICAgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQpOworICAgICRvcHRzLT57J2Nzcid9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgICAgIyBnZXQgY2EKKyAgICAkcHJvbXB0ID0gIkNob29zZSBDQSBDZXJ0aWZpY2F0ZSI7CisgICAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ3dpdGgtY2EnKTsKKyAgICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0KTsKKyAgICAkb3B0cy0+eyd3aXRoLWNhJ30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgfSBlbHNlIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp2d2FybigiYWJvcnRpbmcgb3BlcmF0aW9uOiBleGl0aW5nLi4uXG4iLCAkb3B0cyk7CisgICAgZXhpdCgxKTsKKyAgfQorfQorCitzdWIgY3JlYXRlQ2FEaXIgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRkaXIgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRmaWxlOworICBteSAkY21kOworCisgIE5ldFNOTVA6OkNlcnQ6Om1ha2VfZGlycygkb3B0cywgJGRpciwgMDcwMCwnbmV3Y2VydHMnLCdwcml2YXRlJyk7CisKKyAgJGZpbGUgPSAiJGRpci8kTmV0U05NUDo6Q2VydDo6U0VSSUFMIjsKKyAgaWYgKG5vdCAtZiAkZmlsZSkgeworICAgICRjbWQgPSAiZWNobyAnMDEnID4gJyRmaWxlJyI7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCIkY21kXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgkY21kLCAkb3B0cyk7CisgICAgY2htb2QoMDYwMCwgJGZpbGUpOworICB9CisKKyAgJGZpbGUgPSAiJGRpci8kTmV0U05NUDo6Q2VydDo6SU5ERVgiOworICBpZiAobm90IC1mICRmaWxlKSB7CisgICAgJGNtZCA9ICJ0b3VjaCAnJGZpbGUnIjsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIiRjbWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCRjbWQsICRvcHRzKTsKKyAgICBjaG1vZCgwNjAwLCAkZmlsZSk7CisgIH0KK30KKworc3ViIGdlbkNhIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGhvc3QgPSAkY29uZmlnLT5pbmhlcml0KCdob3N0JykgfHwgOjpob3N0bmFtZSgpOworICBteSAkZGF5cyA9ICRjb25maWctPmluaGVyaXQoJ2RheXMnKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjYURheXMnKSB8fCAKKyAgICAgICAgICAgICAkTmV0U05NUDo6Q2VydDo6REVGQ0FEQVlTOworICBteSAkY24gPSAkY29uZmlnLT5pbmhlcml0KCdjbicpIHx8ICRjb25maWctPmluaGVyaXQoJ2NvbW1vbk5hbWUnKSB8fAorICAgICAgICAgICAiY2EtJGhvc3QiOworICBteSAkY2EgPSAkY29uZmlnLT5pbmhlcml0KCd3aXRoLWNhJyk7CisgIG15ICR0YWcgPSAkY29uZmlnLT5pbmhlcml0KCd0YWcnKSB8fCAkY247CisKKyAgIyBjcmVhdGUgQ0EgZGlyCisgIG15ICRkaXIgPSAiLmNhLyR0YWciOworICAkYXBwLT5jcmVhdGVDYURpcigkZGlyKTsKKworICBteSAkb3V0Q3J0ID0gIiROZXRTTk1QOjpDZXJ0OjpDQURJUi8kdGFnLmNydCI7CisgIG15ICRvdXRLZXkgPSAiJE5ldFNOTVA6OkNlcnQ6OlBSSVZESVIvJHRhZy5rZXkiOworCisgICMgc2V0IGNvbW1hbmQgZW52CisgIG15ICRlbnYgPSAkYXBwLT5vcGVuc3NsRW52KCRjbiwgJGRheXMpOworCisgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkb3V0Q3J0LAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkb3V0S2V5LAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisKKyAgbXkgJGNtZCA9ICIkZW52IG9wZW5zc2wgcmVxIC1leHRlbnNpb25zIHYzX2NhX2NyZWF0ZSAtbmV3IC1kYXlzICRkYXlzIC1iYXRjaCAtY29uZmlnICROZXRTTk1QOjpDZXJ0OjpTU0xDRkcgLWtleW91dCAnJG91dEtleSciOworICAkY21kIC49ICIgLW5vZGVzIjsKKworICBpZiAoZGVmaW5lZCAkY2EpIHsKKyAgICAjIHdlIGhhdmUgdG8gZ2VuIGEgY3NyIGFuZCB0aGVuIHNpZ24gaXQsIG11c3QgcHJlc2VydmUgQ0E6VFJVRQorICAgIG15ICRvdXRDc3IgPSAiJE5ldFNOTVA6OkNlcnQ6Ok5FV0NSVERJUi8kdGFnLmNzciI7CisgICAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRvdXRDc3IsCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKyAgICAkY21kIC49ICIgLW91dCAnJG91dENzciciOworCisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJnZW5DYSAoZ2VuY3NyKTogJGNtZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oIiRjbWQgJG9wdHMtPntvdXR9ICRvcHRzLT57ZXJyfSIsICRvcHRzKTsKKworICAgIG15ICRjYV9iYXNlID0gOjpiYXNlbmFtZSgkY2EsIEBOZXRTTk1QOjpDZXJ0OjpDUlRTVUZGSVhFUyk7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjYV9iYXNlOiAkY2FfYmFzZVxuIiwgJG9wdHMpOworCisgICAgIyBzZXQgY29tbWFuZCBlbnYKKyAgICAkZW52ID0gJGFwcC0+b3BlbnNzbEVudigkY24sICRkYXlzLCAiLmNhLyRjYV9iYXNlIik7CisKKyAgICAkY21kID0gIiRlbnYgb3BlbnNzbCBjYSAtZXh0ZW5zaW9ucyB2M19jYV9zaWduX2NhIC1kYXlzICRkYXlzIC1jZXJ0ICckY2EnIC1rZXlmaWxlICckTmV0U05NUDo6Q2VydDo6UFJJVkRJUi8kY2FfYmFzZS5rZXknIC1pbiAnJG91dENzcicgLWJhdGNoIC1jb25maWcgJE5ldFNOTVA6OkNlcnQ6OlNTTENGRyAtb3V0ICckb3V0Q3J0JyI7CisKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImdlbkNhIChzaWduY3NyKTogJGNtZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oIiRjbWQgJG9wdHMtPntvdXR9ICRvcHRzLT57ZXJyfSIsICRvcHRzKTsKKyAgfSBlbHNlIHsKKyAgICAkY21kIC49ICIgLXg1MDkgLW91dCAnJG91dENydCciOworCisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJnZW5DYTogJGNtZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oIiRjbWQgJG9wdHMtPntvdXR9ICRvcHRzLT57ZXJyfSIsICRvcHRzKTsKKyAgfQorCisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiQ0EgR2VuZXJhdGVkOlxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJG91dENydFxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJG91dEtleVxuIiwgJG9wdHMpOworfQorCitzdWIgZ2VuQ2VydCB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRob3N0ID0gJGNvbmZpZy0+aW5oZXJpdCgiaG9zdCIpIHx8IDo6aG9zdG5hbWUoKTsKKyAgbXkgJGVtYWlsID0gJGNvbmZpZy0+aW5oZXJpdCgiZW1haWwiKSB8fCBnZXRsb2dpbigpIC4gIlxAJGhvc3QiOworICBteSAkZGF5cyA9ICRjb25maWctPmluaGVyaXQoJ2RheXMnKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjcnREYXlzJykgfHwgJE5ldFNOTVA6OkNlcnQ6OkRFRkNSVERBWVM7CisgIG15ICRjbiA9ICRjb25maWctPmluaGVyaXQoJ2NuJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY29tbW9uTmFtZScpOworICBteSAkY2EgPSAkY29uZmlnLT5pbmhlcml0KCd3aXRoLWNhJyk7CisgIG15ICRjbWQ7CisKKyAgbXkgJHRhZyA9ICRvcHRzLT57J3RhZyd9IHx8ICdzbm1wJzsKKyAgJGNuIHx8PSAoTmV0U05NUDo6Q2VydDo6aXNfc2VydmVyKCR0YWcpID8gJGhvc3QgOiAkZW1haWwpOworCisgIG15ICRlbnYgPSAkYXBwLT5vcGVuc3NsRW52KCRjbiwgJGRheXMpOworCisgIG15ICRvdXRDcnQgPSAiJE5ldFNOTVA6OkNlcnQ6OkNSVERJUi8kdGFnLmNydCI7CisgIG15ICRvdXRLZXkgPSAiJE5ldFNOTVA6OkNlcnQ6OlBSSVZESVIvJHRhZy5rZXkiOworCisgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkb3V0Q3J0LAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkb3V0S2V5LAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisKKyAgJGNtZCA9ICIkZW52IG9wZW5zc2wgcmVxIC1leHRlbnNpb25zIHYzX3VzZXJfY3JlYXRlIC1uZXcgLWRheXMgJGRheXMgLWtleW91dCAnJG91dEtleScgLWJhdGNoIC1jb25maWcgJE5ldFNOTVA6OkNlcnQ6OlNTTENGRyI7CisgICRjbWQgLj0gIiAtbm9kZXMiOworCisgIGlmIChkZWZpbmVkICRjYSkgeworICAgIG15ICRvdXRDc3IgPSAiJE5ldFNOTVA6OkNlcnQ6Ok5FV0NSVERJUi8kdGFnLmNzciI7CisgICAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRvdXRDc3IsCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKyAgICAkY21kIC49ICIgLW91dCAnJG91dENzciciOworCisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJnZW5DZXJ0IChnZW5jc3IpOiAkY21kXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgiJGNtZCAkb3B0cy0+e291dH0gJG9wdHMtPntlcnJ9IiwgJG9wdHMpOworCisgICAgIyBYWFggY2xlYW51cCB0aGlzIHRlbXAgQ1NSCisgICAgbXkgJGNhX2Jhc2UgPSA6OmJhc2VuYW1lKCRjYSwgQE5ldFNOTVA6OkNlcnQ6OkNSVFNVRkZJWEVTKTsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNhX2Jhc2U6ICRjYV9iYXNlXG4iLCAkb3B0cyk7CisKKyAgICAjIHNldCBjb21tYW5kIGVudgorICAgICRlbnYgPSAkYXBwLT5vcGVuc3NsRW52KCRjbiwgJGRheXMsICIuY2EvJGNhX2Jhc2UiKTsKKworICAgICRjbWQgPSAiJGVudiBvcGVuc3NsIGNhIC1leHRlbnNpb25zIHYzX2NhX3NpZ24gLWRheXMgJGRheXMgLWNlcnQgJyRjYScgLWtleWZpbGUgJyROZXRTTk1QOjpDZXJ0OjpQUklWRElSLyRjYV9iYXNlLmtleScgLWluICckb3V0Q3NyJyAtYmF0Y2ggLWNvbmZpZyAkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHIC1vdXQgJyRvdXRDcnQnIjsKKworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZ2VuY2VydCAoc2lnbmNzcik6ICRjbWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCIkY21kICRvcHRzLT57b3V0fSAkb3B0cy0+e2Vycn0iLCAkb3B0cyk7CisgIH0gZWxzZSB7CisgICAgJGNtZCAuPSAiIC14NTA5IC1vdXQgJyRvdXRDcnQnIjsKKworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZ2VuQ2VydDogJGNtZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oIiRjbWQgJG9wdHMtPntvdXR9ICRvcHRzLT57ZXJyfSIsICRvcHRzKTsKKyAgfQorCisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiQ2VydGlmaWNhdGUgR2VuZXJhdGVkOlxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJG91dENydFxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJG91dEtleVxuIiwgJG9wdHMpOworfQorCitzdWIgZ2VuQ3NyIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkaXNDYSA9IHNoaWZ0OyAjIFhYWCAtIG5vdCBpbXBsZW1lbnRlZCB5ZXQKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRob3N0ID0gJGNvbmZpZy0+aW5oZXJpdCgiaG9zdCIpIHx8IDo6aG9zdG5hbWUoKTsKKyAgbXkgJGVtYWlsID0gJGNvbmZpZy0+aW5oZXJpdCgiZW1haWwiKSB8fCBnZXRsb2dpbigpIC4gIlxAJGhvc3QiOworICBteSAkZGF5cyA9ICRjb25maWctPmluaGVyaXQoJ2RheXMnKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjcnREYXlzJykgfHwgJE5ldFNOTVA6OkNlcnQ6OkRFRkNSVERBWVM7CisgIG15ICRjbiA9ICRjb25maWctPmluaGVyaXQoJ2NuJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY29tbW9uTmFtZScpOworICBteSAkdGFnID0gJGNvbmZpZy0+aW5oZXJpdCgndGFnJyk7CisgIG15ICRpbkNydCA9ICRjb25maWctPmluaGVyaXQoJ2Zyb20tY3J0JykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnZnJvbUNlcnQnKTsKKyAgbXkgJG91dENzcjsKKyAgbXkgJGNzcktleTsKKworICBpZiAoZGVmaW5lZCAkaW5DcnQpIHsKKyAgICAkaW5DcnQgPSBOZXRTTk1QOjpDZXJ0OjpmaW5kX2NlcnRzKCRvcHRzLCAnY2VydHMnLCAkaW5DcnQpOworICAgIG15ICRjcnQgPSA6OmJhc2VuYW1lKCRpbkNydCwgQE5ldFNOTVA6OkNlcnQ6OkNSVFNVRkZJWEVTKTsKKyAgICAkY3NyS2V5ID0gIiROZXRTTk1QOjpDZXJ0OjpQUklWRElSLyRjcnQua2V5IjsKKyAgICAkdGFnIHx8PSAkY3J0OworICB9IGVsc2UgeworICAgICR0YWcgfHw9ICdzbm1wJzsKKyAgICAkY3NyS2V5IHx8PSAiJE5ldFNOTVA6OkNlcnQ6OlBSSVZESVIvJHRhZy5rZXkiOworICB9CisKKyAgJG91dENzciA9ICIkTmV0U05NUDo6Q2VydDo6TkVXQ1JURElSLyR0YWcuY3NyIjsKKworICAkY24gfHw9IChOZXRTTk1QOjpDZXJ0Ojppc19zZXJ2ZXIoJHRhZykgPyAkaG9zdCA6ICRlbWFpbCk7CisKKyAgbXkgJGVudiA9ICRhcHAtPm9wZW5zc2xFbnYoJGNuLCAkZGF5cyk7CisKKyAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRvdXRDc3IsCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKyAgTmV0U05NUDo6Q2VydDo6Y2hlY2tfb3V0cHV0X2ZpbGUoJG9wdHMsICRjc3JLZXksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnaW50ZXJhY3RpdmUnKSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdmb3JjZScpKTsKKworICBteSAkY21kID0gKGRlZmluZWQgJGluQ3J0ID8KKyAgIiRlbnYgb3BlbnNzbCB4NTA5IC14NTA5dG9yZXEgLWluICRpbkNydCAtb3V0ICckb3V0Q3NyJyAtc2lnbmtleSAnJGNzcktleScgLW5vZGVzIC1kYXlzICRkYXlzIC1iYXRjaCAtY29uZmlnICROZXRTTk1QOjpDZXJ0OjpTU0xDRkciIDoKKyAgIiRlbnYgb3BlbnNzbCByZXEgLW5ldyAtbm9kZXMgLWRheXMgJGRheXMgLWJhdGNoIC1rZXlvdXQgJyRjc3JLZXknIC1vdXQgJyRvdXRDc3InIC1jb25maWcgJE5ldFNOTVA6OkNlcnQ6OlNTTENGRyIpOworCisgICRjbWQgLj0gKCRpc0NhID8gIiAtZXh0ZW5zaW9ucyB2M19jYV9jcmVhdGUiIDogIiAtZXh0ZW5zaW9ucyB2M191c2VyX2NyZWF0ZSIpOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZ2VuQ3NyOiAkY21kXG4iLCAkb3B0cyk7CisKKyAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgiJGNtZCAkb3B0cy0+e291dH0gJG9wdHMtPntlcnJ9IiwgJG9wdHMpOworCisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IEdlbmVyYXRlZDpcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRvdXRDc3JcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRjc3JLZXlcbiIsICRvcHRzKTsKK30KKworc3ViIHNpZ25Dc3IgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRpc0NhID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkaG9zdCA9ICRjb25maWctPmluaGVyaXQoImhvc3QiKSB8fCA6Omhvc3RuYW1lKCk7CisgIG15ICRlbWFpbCA9ICRjb25maWctPmluaGVyaXQoImVtYWlsIikgfHwgZ2V0bG9naW4oKSAuICJcQCRob3N0IjsKKyAgbXkgJGRheXMgPSAkY29uZmlnLT5pbmhlcml0KCdkYXlzJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY3J0RGF5cycpIHx8ICROZXRTTk1QOjpDZXJ0OjpERUZDUlREQVlTOworICBteSAkY24gPSAkY29uZmlnLT5pbmhlcml0KCdjbicpIHx8ICRjb25maWctPmluaGVyaXQoJ2NvbW1vbk5hbWUnKTsKKyAgbXkgJHRhZyA9ICRjb25maWctPmluaGVyaXQoJ3RhZycpIHx8ICdzbm1wJzsKKyAgbXkgJGluc3RhbGwgPSAkY29uZmlnLT5pbmhlcml0KCdpbnN0YWxsJyk7CisKKyAgJGNuID0gKE5ldFNOTVA6OkNlcnQ6OmlzX3NlcnZlcigkdGFnKSA/ICRob3N0IDogJGVtYWlsKTsKKworICBteSAkY2EgPSAkb3B0cy0+eyd3aXRoLWNhJ307CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY2E6ICRjYVxuIiwgJG9wdHMpOworICBteSAkY2FfYmFzZSA9IDo6YmFzZW5hbWUoJGNhLCBATmV0U05NUDo6Q2VydDo6Q1JUU1VGRklYRVMpOworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNhX2Jhc2U6ICRjYV9iYXNlXG4iLCAkb3B0cyk7CisgIG15ICRjYV9rZXkgPSAiJE5ldFNOTVA6OkNlcnQ6OlBSSVZESVIvJGNhX2Jhc2Uua2V5IjsgCisKKyAgbXkgJGNzciA9ICRvcHRzLT57J2Nzcid9OworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNzcjogJGNzclxuIiwgJG9wdHMpOworICBteSAkY3NyX2Jhc2UgPSA6OmJhc2VuYW1lKCRjc3IsIEBOZXRTTk1QOjpDZXJ0OjpDUlRTVUZGSVhFUyk7CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY3NyX2Jhc2U6ICRjc3JfYmFzZVxuIiwgJG9wdHMpOworICBteSAkb3V0ZGlyID0gKCRpbnN0YWxsID8gJE5ldFNOTVA6OkNlcnQ6OkNSVERJUiA6ICROZXRTTk1QOjpDZXJ0OjpORVdDUlRESVIpOworICBteSAkb3V0Q3J0ID0gIiRvdXRkaXIvJGNzcl9iYXNlLmNydCI7CisKKyAgbXkgJGVudiA9ICRhcHAtPm9wZW5zc2xFbnYoJGNuLCAkZGF5cywgIi5jYS8kY2FfYmFzZSIpOworCisgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkb3V0Q3J0LAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisKKyAgIyBYWFggLSBoYW5kbGUga2V5ZmlsZSBzZWFyY2g/PworICBteSAkY21kID0gIiRlbnYgb3BlbnNzbCBjYSAtYmF0Y2ggLWRheXMgJGRheXMgLWV4dGVuc2lvbnMgdjNfY2Ffc2lnbiAtY2VydCAnJGNhJyAta2V5ZmlsZSAnJGNhX2tleScgLWluICckY3NyJyAtb3V0ICckb3V0Q3J0JyAtY29uZmlnICROZXRTTk1QOjpDZXJ0OjpTU0xDRkciOworCisgICMgJGNtZCAuPSAoJGlzQ2EgPyAiIC1leHRlbnNpb25zIHYzX2NhX3NpZ25fY2EiIDogIiAtZXh0ZW5zaW9ucyB2M19jYV9zaWduIik7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJzaWduQ3NyOiAkY21kXG4iLCAkb3B0cyk7CisKKyAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgiJGNtZCAkb3B0cy0+e291dH0gJG9wdHMtPntlcnJ9IiwgJG9wdHMpOworCisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiU2lnbmVkIENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdDpcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRjc3JcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCJ3aXRoIENBOlxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJGNhXG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkY2Ffa2V5XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiR2VuZXJhdGVkIENlcnRpZmljYXRlOlxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJG91dENydFxuIiwgJG9wdHMpOworfQorCitzdWIgc2hvdyB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJHR5cGUgPSBzaGlmdCB8fCAnY2VydHMnOworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJHN0YWcgPSBzaGlmdChAeyRvcHRzLT57J2NtZGFyZ3MnfX0pOworICBteSAkZm10ID0gTmV0U05NUDo6Q2VydDo6eDUwOV9mb3JtYXQoJG9wdHMpIHx8ICctc3ViamVjdCc7CisgIG15ICRicmllZiA9ICRjb25maWctPmluaGVyaXQoJ2JyaWVmJyk7CisgIG15ICRvdXRwdXQ7CisgIG15ICRjbWQ7CisKKyAgbXkgJGN3ZCA9IDo6Z2V0Y3dkKCk7CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgic2hvdyAoJGN3ZCk6JHR5cGU6JHN0YWc6JGZtdFxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiRvcHRzLT57J3Rsc2Rpcid9OlxuIiwgJG9wdHMpIHVubGVzcyAkYnJpZWY7CisKKyAgZm9yZWFjaCBteSAkYyAoTmV0U05NUDo6Q2VydDo6ZmluZF9jZXJ0cygkb3B0cywgJHR5cGUsICRzdGFnKSkgeworICAgIHByaW50ICJcbiRjOlxuIiB1bmxlc3MgJGJyaWVmOworICAgICRjbWQgPSAib3BlbnNzbCB4NTA5IC1pbiAnJGMnIC1ub291dCAkZm10IjsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInNob3c6ICRjbWRcbiIsICRvcHRzKTsKKworICAgICRvdXRwdXQgPSBgJGNtZGA7IGNob21wICRvdXRwdXQ7CisgICAgTmV0U05NUDo6Q2VydDo6dndhcm4oInNob3ctJHR5cGUgZmFpbGVkICgkPyk6ICRvdXRwdXRcbiIsICRvcHRzKSBpZiAkPzsKKworICAgICRvdXRwdXQgPX4gcy9eW15cbj1dKz0vLyBpZiAkYnJpZWY7CisKKyAgICBwcmludCAiJG91dHB1dFxuIjsKKyAgICBwcmludCAiXG4iIHVubGVzcyAkYnJpZWY7CisgIH0KK30KKworc3ViIGltcG9ydF9maWxlIHsKKyAgbXkgKCRmaWxlLCAkc3VmZml4LCAkdGFyZywgJHJkaXIsICR0YWcpID0gQF87CisKKyAgaWYgKE5ldFNOTVA6OkNlcnQ6OmlzX3VybCgkZmlsZSkpIHsKKyAgICBpZiAoJE5ldFNOTVA6OkNlcnQ6OmhhdmVVc2VyQWdlbnQpIHsKKworICAgICAgcmVxdWlyZSBGaWxlOjpUZW1wOworICAgICAgaW1wb3J0IEZpbGU6OlRlbXAgcXcodGVtcGZpbGUpOworCisgICAgICBteSAoJGZoLCAkbmV3ZmlsZW5hbWUpID0gdGVtcGZpbGUoU1VGRklYID0+ICRzdWZmaXgpOworICAgICAgcmV0dXJuIGlmICghJGZoIHx8ICEkbmV3ZmlsZW5hbWUpOworICAgICAgbXkgJHVhID0gTFdQOjpVc2VyQWdlbnQtPm5ldzsKKyAgICAgIG15ICRyZXNwb25zZSA9ICR1YS0+Z2V0KCRmaWxlKTsKKyAgICAgIGlmICgkcmVzcG9uc2UtPmlzX3N1Y2Nlc3MpIHsKKwlwcmludCAkZmggJHJlc3BvbnNlLT5kZWNvZGVkX2NvbnRlbnQoKTsKKyAgICAgIH0gZWxzZSB7CisJTmV0U05NUDo6Q2VydDo6dndhcm4oImZhaWxlZCB0byBkb3dubG9hZCBhIGNlcnRpZmljYXRlIGZyb20gJGZpbGUiKTsKKwlyZXR1cm47CisgICAgICB9CisgICAgICAkZmgtPmNsb3NlOworICAgICAgJGZpbGUgPSAkbmV3ZmlsZW5hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgIE5ldFNOTVA6OkNlcnQ6OnZ3YXJuKCJMV1A6OlVzZXJBZ2VudCBub3QgaW5zdGFsbGVkOiB1bmFibGUgdG8gaW1wb3J0IGNlcnRpZmljYXRlIik7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgJGZpbGUgPSBOZXRTTk1QOjpDZXJ0OjpmcV9yZWxfcGF0aCgkZmlsZSwgJHJkaXIpOworICBkaWUoImZpbGUgdW5yZWFkYWJsZTogJGZpbGVcbiIpIHVubGVzcyAtciAkZmlsZTsKKworCisgIGlmICghICR0YXJnKSB7CisgICAgJHRhcmcgPSAoTmV0U05NUDo6Q2VydDo6aXNfY2FfY2VydCgkZmlsZSkgPyAkTmV0U05NUDo6Q2VydDo6Q0FESVIgOiAkTmV0U05NUDo6Q2VydDo6Q1JURElSKTsKKyAgfQorCisgICR0YXJnIC49ICIvIiAuICR0YWcgLiAkc3VmZml4IGlmICgkdGFnKTsKKyAgOjpjb3B5KCRmaWxlLCAkdGFyZyk7Cit9CisKKworc3ViIGltcG9ydCB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRjYXJnID0gc2hpZnQoQHskb3B0cy0+eydjbWRhcmdzJ319KTsKKyAgbXkgJGthcmcgPSBzaGlmdChAeyRvcHRzLT57J2NtZGFyZ3MnfX0pOworICBteSAkdGFyZzsKKworICBpZiAobm90IGRlZmluZWQgJGNhcmcpIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp2d2FybigiaW1wb3J0OiBubyBjZXJ0aWZpY2F0ZSBzdXBwbGllZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzYWdlKDEpOworICB9CisKKyAgaW1wb3J0X2ZpbGUoJGNhcmcsICcuY3J0JywgJycsLAorCSAgICAgICRvcHRzLT57J3JkaXInfSwgJG9wdHMtPnsndGFnJ30pOworCisgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAka2FyZzsKKworICBpbXBvcnRfZmlsZSgka2FyZywgJy5rZXknLCAncHJpdmF0ZScsLAorCSAgICAgICRvcHRzLT57J3JkaXInfSwgJG9wdHMtPnsndGFnJ30pOworfQorCisKK3BhY2thZ2UgTmV0U05NUDo6Q2VydDo6Q29uZmlnOwordXNlIHZhcnMgcXcoQElTQSk7CitASVNBID0gcXcoTmV0U05NUDo6Q2VydDo6T2JqKTsKKworc3ViIG5ldyB7CisgIG15ICRjbGFzcyA9IHNoaWZ0OworICBteSAkcGFyZW50ID0gc2hpZnQ7CisgIG15ICR0aGlzID0gJGNsYXNzLT5TVVBFUjo6bmV3KCdjb25maWcnLCAkcGFyZW50KTsKKworICBibGVzcygkdGhpcywgJGNsYXNzKTsKK30KKworc3ViIHBhcnNlIHsKKyAgbXkgJGNvbmZpZyA9IHNoaWZ0OworICBteSAkYXBwID0gJGNvbmZpZy0+eydBUFAnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGNmZ2ZpbGUgPSBzaGlmdDsKKyAgJGNmZ2ZpbGUgfHw9ICRvcHRzLT57J2NmZ2ZpbGUnfTsKKworICByZXR1cm4gJzAgYnV0IHRydWUnIGlmICRjb25maWctPnsnUEFSU0VEJ307CisgIHJldHVybiAnMCBidXQgdHJ1ZScgdW5sZXNzIGRlZmluZWQgJGNmZ2ZpbGU7CisKKyAgb3BlbiggQ09ORklHLCAiPCRjZmdmaWxlIiApCisgICAgb3IgZGllICJlcnJvciAtIGNvdWxkIG5vdCBvcGVuIGNvbmZpZ3VyYXRpb24gZmlsZTogJGNmZ2ZpbGUiOworCisgIHdoaWxlICg8Q09ORklHPikgeworICAgIG5leHQgaWYgL15ccyojLyBvciAvXlxzKiQvOworCisgICAgaWYgKC9eXHMqKFx3KykoPzpcKChbXClcKFxkXCxcLl0rKVwpKT9ccyo9XHMqey8pIHsKKyAgICAgIG15ICRvYmogPSAkMTsKKworICAgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJvYmplY3Q6ICRvYmogKCQyKSA9IHtcbiIsICRvcHRzKTsKKyAgICAgIGRpZSAiZXJyb3IgLSBpZGVudGl0eTogaW5kaWNlcyBub3Qgc3VwcG9ydGVkOiAkMiIgaWYgZGVmaW5lZCAkMjsKKworICAgICAgIyBGb3VuZCBhbiBvYmplY3QuCisgICAgICBpZiAoICRvYmogZXEgJ2lkZW50aXR5JyApIHsKKwlteSAkaWRlbnRpdHkgPSBOZXRTTk1QOjpDZXJ0OjpJZGVudGl0eTo6cGFyc2UoKkNPTkZJRywgJGNvbmZpZyk7CisJbXkgJGlkID0gJGlkZW50aXR5LT57J2lkJ307CisJZGllICJlcnJvciAtIGlkZW50aXR5OiAnaWQnIG5vdCBkZWZpbmVkIiB1bmxlc3MgZGVmaW5lZCAkaWQ7CisJZGllICJlcnJvciAtIGlkZW50aXR5OiBkdXBsaWNhdGUgJyRpZCciIGlmIGV4aXN0cyAkY29uZmlnLT57JG9ian17JGlkfTsKKwkkY29uZmlnLT57JG9ian17JGlkfSA9ICRpZGVudGl0eTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRpZSAiZXJyb3IgLSB1bnJlY29nbml6ZWQgb2JqZWN0ICgkMSkgYXQgc2NvcGUgKGNvbmZpZykiOworICAgICAgfQorICAgIH0gZWxzaWYgKC9eXHMqKFx3Kylccyo9P1xzKiguKj8pXHMqJC8pIHsKKyAgICAgIG15ICRrZXkgPSAkMTsKKyAgICAgIG15ICR2YWwgPSAkMjsKKworICAgICAgJHZhbCA9ICRjb25maWctPnJlc29sdmUoJHZhbCkgaWYgJHZhbCA9fiAvXCRcdyt8XCZcey4qP1x9LzsKKyAgICAgICMgRm91bmQgYSBzeW1ib2wuCisgICAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIiAgJGtleSA9ICR2YWxcbiIsICRvcHRzKTsKKyAgICAgIGlmICgka2V5IGVxICdzdWJqZWN0QWx0TmFtZScgb3IgJGtleSBlcSAnc2FuJykgeworCXB1c2goQHskY29uZmlnLT57JGtleX19LCAkdmFsKTsKKyAgICAgIH0gZWxzaWYgKCBkZWZpbmVkICRjb25maWctPnska2V5fSApIHsKKyAgICAgICAgZGllICJlcnJvciAtIGR1cGxpY2F0ZSBzeW1ib2wgJGtleSI7CisgICAgICB9IGVsc2UgeworICAgICAgICAkY29uZmlnLT57JGtleX0gPSAoZGVmaW5lZCAkdmFsID8gTmV0U05NUDo6Q2VydDo6bWFwX2Jvb2woJHZhbCkgOiAxICk7CisgICAgICB9CisgICAgfSBlbHNpZiAoL15ccyplbnZccyooXHcrPVxTKylccyokLykgeworICAgICAgIyBGb3VuZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiJCZcbiIsICRvcHRzKTsKKyAgICAgIHB1c2goQHskY29uZmlnLT57J2Vudid9fSwgJDEpOworICAgIH0gZWxzZSB7CisgICAgICBkaWUoImVycm9yIGluIGNvbmZpZyBmaWxlIFskY2ZnZmlsZTpsaW5lICQuXSIpOworICAgIH0KKyAgfQorCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZW5kIHBhcnNlIGNvbmZpZ1xuIiwgJG9wdHMpOworICBjbG9zZShDT05GSUcpOworCisgICMgYXVnbWVudCB3aXRoIGFueSBjb25maWcgZGlyZWN0aXZlcyBzdXBwbGllZCBpbiBvcHRzCisgIGZvcmVhY2ggbXkgJGNmZyAoQHskb3B0cy0+eydjb25maWcnfX0pIHsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImF1Z21lbnRpbmcgY29uZmlnOiAkY2ZnXG4iLCAkb3B0cyk7CisKKyAgICAkY29uZmlnLT5hdXRvU2V0KCQxLCAoZGVmaW5lZCgkMikgPyAkMiA6IDEgKSkKKyAgICAgIGlmICRjZmcgPX4gL15ccyooXHcrKVxzKj0/XHMqKC4qPylccyokLzsKKyAgfQorICAkY29uZmlnLT5hdXRvU2V0KCdQQVJTRUQnLCAxKTsKKyAgcmV0dXJuICRjb25maWctPnsnUEFSU0VEJ307Cit9CisKK3BhY2thZ2UgTmV0U05NUDo6Q2VydDo6SWRlbnRpdHk7Cit1c2UgdmFycyBxdyhASVNBKTsKK0BJU0EgPSBxdyhOZXRTTk1QOjpDZXJ0OjpPYmopOworCitzdWIgbmV3IHsKKyAgbXkgJGNsYXNzID0gc2hpZnQ7CisgIG15ICR0aGlzID0gc2hpZnQgfHwgJGNsYXNzLT5TVVBFUjo6bmV3KCdpZGVudGl0eScsIEBfKTsKKyAgbXkgJGluZCA9ICR0aGlzLT57J0lOREVYJ30gfHwgMTsKKworICAkdGhpcy0+YXV0b1NldCgnbmFtZScsICIkdGhpcy0+e3R5cGV9LiRpbmQiKSB1bmxlc3MgZXhpc3RzICR0aGlzLT57J25hbWUnfTsKKworICAkdGhpcy0+YXV0b1NldCgnTE9HJywnJykgdW5sZXNzIGV4aXN0cyAkdGhpcy0+eydMT0cnfTsKKyAgJHRoaXMtPmF1dG9TZXQoJ1RUWV9MT0cnLCcnKSB1bmxlc3MgZXhpc3RzICR0aGlzLT57VFRZX0xPR307CisKKyAgYmxlc3MoJHRoaXMsICRjbGFzcyk7Cit9CisKKworc3ViIHBhcnNlIHsKKyAgbXkgJEZJTEUgPSBzaGlmdDsKKyAgbXkgJHBhcmVudCA9IHNoaWZ0OworICBteSAkb3B0cyA9ICRwYXJlbnQtPmluaGVyaXQoJ09QVFMnKTsKKyAgbXkgJGlkZW50aXR5ID0gbmV3IE5ldFNOTVA6OkNlcnQ6Ok9iaignaWRlbnRpdHknLCAkcGFyZW50KTsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInBhcnNlIGlkZW50aXR5XG4iLCAkb3B0cyk7CisKKyAgd2hpbGUgKDwkRklMRT4pIHsKKyAgICBuZXh0IGlmIC9eXHMqIy8gb3IgL15ccyokLzsKKworICAgIGlmICgvXlxzKihcdyspXHMqPVxzKnsvKSB7CisgICAgICAjIEZvdW5kIGFuIG9iamVjdC4KKyAgICAgIGRpZSAiZXJyb3IgLSBjYW4ndCBoYXZlIG5lc3RlZCAkMSI7CisgICAgfSBlbHNpZiAoL15ccyooXHcrKVxzKj0/XHMqKC4qPylccyokLykgeworICAgICAgbXkgJGtleSA9ICQxOworICAgICAgbXkgJHZhbCA9ICQyOworCisgICAgICAjIEZvdW5kIGEgc3ltYm9sLgorICAgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCIgICRrZXkgPSAkdmFsXG4iLCAkb3B0cyk7CisKKyAgICAgICR2YWwgPSAkaWRlbnRpdHktPnJlc29sdmUoJHZhbCkgaWYgJHZhbCA9fiAvXCRcdyt8XCZcey4qP1x9LzsKKworICAgICAgaWYgKCAka2V5IGVxICdzdWJqZWN0QWx0TmFtZScgb3IgJGtleSBlcSAnc2FuJykgeworCXB1c2goQHskaWRlbnRpdHktPnska2V5fX0sICR2YWwpOworICAgICAgfSBlbHNpZiAoIGRlZmluZWQgJGlkZW50aXR5LT57JGtleX0gKSB7CisgICAgICAgIGRpZSAiZXJyb3IgLSBkdXBsaWNhdGUgc3ltYm9sICRrZXkiOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJGlkZW50aXR5LT57JGtleX0gPSAoZGVmaW5lZCAkdmFsID8gTmV0U05NUDo6Q2VydDo6bWFwX2Jvb2woJHZhbCkgOiAxICk7CisgICAgICB9CisgICAgfSBlbHNpZiAoL1xzKlx9XHMqXDsvKSB7CisgICAgICAjIEVuZCBvZiBkZWZpbml0aW9uLgorICAgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJlbmQgcGFyc2UgaWRlbnRpdHlcbiIsICRvcHRzKTsKKyAgICAgIHJldHVybiBuZXcgTmV0U05NUDo6Q2VydDo6SWRlbnRpdHkoJGlkZW50aXR5KTsKKyAgICB9IGVsc2UgeworICAgICAgZGllKCJlcnJvciBpbiBjb25maWcgZmlsZSBbJG9wdHMtPntjZmdmaWxlfTpsaW5lICQuXSIpOworICAgIH0KKyAgfQorICBkaWUgImVycm9yIC0gdW5leHBlY3RlZCBlbmQgb2YgY29uZiBmaWxlIjsKK30KKworcGFja2FnZSBtYWluOworCitteSAkYXBwID0gbmV3IE5ldFNOTVA6OkNlcnQ6OkFwcCgpOworJGFwcC0+aW5pdChAQVJHVik7CiskYXBwLT5ydW4oKTsKKworX19FTkRfXworPXBvZAorCis9aGVhZDEgICBOQU1FCisKK25ldC1zbm1wLWNlcnQgLSBOZXQtU05NUCBDZXJ0aWZpY2F0ZSBNYW5hZ2VtZW50IFRvb2wKKworPWhlYWQxICAgU1lOT1BTSVMKKworPW92ZXIKKworPWl0ZW0gJCBuZXQtc25tcC1jZXJ0IGdlbmNhIC1JIC0tY24gY2EtTmV0LVNOTVAKKworPWl0ZW0gJCBuZXQtc25tcC1jZXJ0IGdlbmNlcnQgLUkgLXQgc25tcGFwcCAtLXdpdGgtY2EgY2EtTmV0LVNOTVAKKworPWl0ZW0gJCBuZXQtc25tcC1jZXJ0IGdlbmNlcnQgLUkgLXQgc25tcGQgLS1jbiBuZXQtc25tcC5vcmcKKworPWl0ZW0gJCBuZXQtc25tcC1jZXJ0IHNob3djYXMKKworPWl0ZW0gJCBuZXQtc25tcC1jZXJ0IHNob3djZXJ0cworCis9YmFjaworCis9aGVhZDEgICBERVNDUklQVElPTgorCituZXQtc25tcC1jZXJ0IGNyZWF0ZXMsIHNpZ25zLCBpbnN0YWxscyBhbmQgZGlzcGxheXMgWC41MDkKK2NlcnRpZmljYXRlcyB1c2VkIGluIHRoZSBvcGVyYXRpb24gb2YgTmV0LVNOTVAvKEQpVExTLgorCis9aGVhZDEgICBTWU5UQVgKKworPW92ZXIKKworPWl0ZW0gbmV0LXNubXAtY2VydCBbLS1oZWxwfC0/XQorCis9aXRlbSBuZXQtc25tcC1jZXJ0IFstLXZlcnNpb258LVZdCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgZ2VuY2EgICAgWzxmbGFncz5dIFs8ZG4tb3B0cz5dIFstLXdpdGgtY2EgPGNhPl0KKworPWl0ZW0gbmV0LXNubXAtY2VydCBnZW5jZXJ0ICBbPGZsYWdzPl0gWzxkbi1vcHRzPl0gWy0td2l0aC1jYSA8Y2E+XQorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGdlbmNzciAgIFs8ZmxhZ3M+XSBbPGRuLW9wdHM+XSBbLS1mcm9tLWNydCA8Y3J0Pl0KKworPWl0ZW0gbmV0LXNubXAtY2VydCBzaWduY3NyICBbPGZsYWdzPl0gWy0taW5zdGFsbF0gLS1jc3IgPGNzcj4gLS13aXRoLWNhIDxjYT4KKworPWl0ZW0gbmV0LXNubXAtY2VydCBzaG93Y2EgICBbPGZsYWdzPl0gWzxmb3JtYXQtb3B0cz5dIFs8ZmlsZT58PHNlYXJjaC10YWc+XQorCis9aXRlbSBuZXQtc25tcC1jZXJ0IHNob3djZXJ0IFs8ZmxhZ3M+XSBbPGZvcm1hdC1vcHRzPl0gWzxmaWxlPnw8c2VhcmNoLXRhZz5dCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgaW1wb3J0ICAgWzxmbGFncz5dIDxmaWxlfHVybD4gWzxrZXk+XQorCis9YmFjaworCis9aGVhZDEgICBDT01NQU5EUworCis9b3ZlcgorCis9aXRlbSBnZW5jYQorCitnZW5lcmF0ZSBhIHNpZ25lZCBDQSBjZXJ0aWZpY2F0ZSBzdWl0YWJsZSBmb3Igc2lnbmluZyBvdGhlcgorY2VydGlmaWNhdGVzLiBkZWZhdWx0OiBzZWxmLXNpZ25lZCB1bmxlc3MgLS13aXRoLWNhIDxjYT4gc3VwcGxpZWQKKworPWl0ZW0gZ2VuY2VydAorCitnZW5lcmF0ZSBhIHNpZ25lZCBjZXJ0aWZpY2F0ZSBzdWl0YWJsZSBmb3IgaWRlbnRpZmljYXRpb24sIG9yCit2YWxpZGF0aW9uLiBkZWZhdWx0OiBzZWxmLXNpZ25lZCB1bmxlc3MgLS13aXRoLWNhIDxjYT4gc3VwcGxpZWQKKworPWl0ZW0gZ2VuY3NyCisKK2dlbmVyYXRlIGEgY2VydGlmaWNhdGUgc2lnbmluZyByZXF1ZXN0LiB3aWxsIGNyZWF0ZSBhIG5ldwora2V5IGFuZCBjZXJ0aWZpY2F0ZSB1bmxlc3MgLS1mcm9tLWNydCA8Y3J0PiBzdXBwbGllZAorCis9aXRlbSBzaWduY3NyCisKK3NpZ24gYSBjZXJ0aWZpY2F0ZSBzaWduaW5nIHJlcXVlc3Qgc3BlY2lmaWVkIGJ5IC0tY3NyIDxjc3I+Cit3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZSBzcGVjaWZpZWQgYnkgLS13aXRoLWNhIDxjYT4KKworPWl0ZW0gaW1wb3J0CisKK2ltcG9ydCBhbiBpZGVudGl0eSBvciBDQSBjZXJ0aWZpY2F0ZSwgb3B0aW9uYWxseSBpbXBvcnQgPGtleT4KK2lmIGFuIFVSTCBpcyBwYXNzZWQsIHdpbGwgYXR0ZW1wdCB0byBpbXBvcnQgY2VydGlmaWNhdGUgZnJvbSBzaXRlCisKKz1pdGVtIHNob3djYSwgc2hvd2NlcnQKKworc2hvdyBDQSBvciBpZGVudGl0eSBjZXJ0aWZpY2F0ZShzKS4gbWF5IHBhc3MgZnVsbHkgcXVhbGlmaWVkCitmaWxlIG9yIGRpcmVjdG9yeSBuYW1lLCBvciBhIHNlYXJjaC10YWcgd2hpY2ggcHJlZml4IG1hdGNoZXMKK2luc3RhbGxlZCBDQSBvciBpZGVudGl0eSBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUocykKK3NlZSBGT1JNQVQgT1BUSU9OUyB0byBzcGVjaWZ5IG91dHB1dCBmb3JtYXQKKworCis9YmFjaworCis9aGVhZDEgICBGTEFHUworCis9b3ZlcgorCis9aXRlbSAtPywgLS1oZWxwICAgICAgICAgICAgLS0gc2hvdyB0aGlzIHRleHQgYW5kIGV4aXQKKworPWl0ZW0gLVYsIC0tdmVyc2lvbiAgICAgICAgIC0tIHNob3cgdmVyc2lvbiBzdHJpbmcgYW5kIGV4aXQKKworPWl0ZW0gLUQsIC0tZGVidWcgICAgICAgICAgIC0tIHJhaXNlIGRlYnVnIGxldmVsICgtRCAtRCBmb3IgaGlnaGVyIGxldmVsKQorCis9aXRlbSAtRiwgLS1mb3JjZSAgICAgICAgICAgLS0gZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIG91dHB1dCBmaWxlcworCis9aXRlbSAtSSwgLS1ub2ludGVyYWN0aXZlICAgLS0gbm9uLWludGVyYWN0aXZlIHJ1biAoZGVmYXVsdCBpbnRlcmFjdGl2ZSkKKworPWl0ZW0gLVEsIC0tbm92ZXJib3NlICAgICAgIC0tIG5vbi12ZXJib3NlIG91dHB1dCAoZGVmYXVsdCB2ZXJib3NlKQorCis9aXRlbSAtQywgLS1jZmdkaXIgICA8ZGlyPiAgLS0gY29uZmlndXJhdGlvbiBkaXIgKHNlZSBtYW4oNSkgc25tcF9jb25maWcpCisKKz1pdGVtIC1ULCAtLXRsc2RpciAgIDxkaXI+ICAtLSByb290IGZvciBjZXJ0IHN0b3JhZ2UgKGRlZmF1bHQgPGNmZ2Rpcj4vdGxzKQorCis9aXRlbSAtZiwgLS1jZmdmaWxlICA8ZmlsZT4gLS0gY29uZmlnIChkZWZhdWx0IDxjZmdkaXI+L25ldC1zbm1wLWNlcnQuY29uZikKKworPWl0ZW0gLWksIC0taWRlbnRpdHkgPGlkPiAgIC0tIGlkZW50aXR5IHRvIHVzZSBmcm9tIGNvbmZpZworCis9aXRlbSAtdCwgLS10YWcgICAgICA8dGFnPiAgLS0gYXBwbGljYXRpb24gdGFnIChkZWZhdWx0ICdzbm1wJykKKworPWl0ZW0gLS08Y2ZnLXBhcmFtPls9PHZhbD5dIC0tIGFkZGl0aW9uYWwgY29uZmlnIHBhcmFtcworCis9YmFjaworCis9aGVhZDEgICBDRVJUSUZJQ0FURSBPUFRJT05TICg8Y2VydC1vcHRzPikKKworPW92ZXIKKworPWl0ZW0gLWEsIC0td2l0aC1jYSA8Y2E+ICAgIC0tIENBIGNlcnRpZmljYXRlIHVzZWQgdG8gc2lnbiByZXF1ZXN0CisKKz1pdGVtIC1BLCAtLWNhIDxjYT4gICAgICAgICAtLSBleHBsaWNpdCBvdXRwdXQgQ0EgY2VydGlmaWNhdGUKKworPWl0ZW0gLXIsIC0tY3NyIDxjc3I+ICAgICAgIC0tIGNlcnRpZmljYXRlIHNpZ25pbmcgcmVxdWVzdAorCis9aXRlbSAteCwgLS1mcm9tLWNydCA8Y3J0PiAgLS0gaW5wdXQgY2VydGlmaWNhdGUgZm9yIGN1cnJlbnQgb3BlcmF0aW9uCisKKz1pdGVtIC1YLCAtLWNydCA8Y3J0PiAgICAgICAtLSBleHBsaWNpdCBvdXRwdXQgY2VydGlmaWNhdGUKKworPWl0ZW0gLXksIC0taW5zdGFsbCAgICAgICAgIC0tIGluc3RhbGwgcmVzdWx0IGluIGxvY2FsIHJlcG9zaXRvcnkKKworPWJhY2sKKworPWhlYWQxICAgRElTVElOR1VJU0hFRCBOQU1FIE9QVElPTlMgKDxkbi1vcHRzPikKKworPW92ZXIKKworPWl0ZW0gLWUsIC0tZW1haWwgPGVtYWlsPiAgICAgICAtLSBlbWFpbCBuYW1lCisKKz1pdGVtIC1oLCAtLWhvc3QgPGhvc3Q+ICAgICAgICAgLS0gRE5TIGhvc3QgbmFtZSwgb3IgSVAgYWRkcmVzcworCis9aXRlbSAtZCwgLS1kYXlzIDxkYXlzPiAgICAgICAgIC0tIG51bWJlciBvZiBkYXlzIGNlcnRpZmljYXRlIGlzIHZhbGlkCisKKz1pdGVtIC1uLCAtLWNuIDxjbj4gICAgICAgICAgICAgLS0gY29tbW9uIG5hbWUgKENOKQorCis9aXRlbSAtbywgLS1vcmcgPG9yZz4gICAgICAgICAgIC0tIG9yZ2FuaXp0aW9uIG5hbWUKKworPWl0ZW0gLXUsIC0tdW5pdCA8dW5pdD4gICAgICAgICAtLSBvcmdhbml6dGlvbiB1bml0IG5hbWUKKworPWl0ZW0gLWMsIC0tY291bnRyeSA8Y291bnRyeT4gICAtLSBjb3VudHJ5IGNvZGUgKGUuZy4sIFVTKQorCis9aXRlbSAtcCwgLS1wcm92aW5jZSA8cHJvdmluY2U+IC0tIHByb3ZpbmNlIG5hbWUgKHN5bm9teW5vdXMgdy8gc3RhdGUpCisKKz1pdGVtIC1wLCAtLXN0YXRlIDxzdGF0ZT4gICAgICAgLS0gc3RhdGUgbmFtZSAoc3lub215bm91cyB3LyBwcm92aW5jZSkKKworPWl0ZW0gLWwsIC0tbG9jYWxpdHkgPGxvY2FsaXR5PiAtLSBsb2NhbGl0eSBuYW1lIChlLmcsIHRvd24pCisKKz1pdGVtIC1zLCAtLXNhbiA8c2FuPiAgICAgICAgICAgLS0gc3ViamVjdEFsdE5hbWUsIHJlcGVhdCBmb3IgZWFjaCA8c2FuPgorCis9b3ZlciAyCisKKz1pdGVtICAgIDxzYW4+IHZhbHVlIGZvcm1hdCAoPEZNVD46PFZBTD4pOgorCis9b3ZlciAzCisKKz1pdGVtICAgICAgIGRpck5hbWU6L3Vzci9zaGFyZS9zbm1wL3RscworCis9aXRlbSAgICAgICBETlM6bmV0LXNubXAub3JnCisKKz1pdGVtICAgICAgIGVtYWlsOmFkbWluQG5ldC1zbm1wLm9yZworCis9aXRlbSAgICAgICBJUDoxOTIuMTY4LjEuMQorCis9aXRlbSAgICAgICBSSUQ6MS4xLjMuNgorCis9aXRlbSAgICAgICBVUkk6aHR0cDovL25ldC1zbm1wLm9yZworCis9YmFjaworCis9YmFjaworCis9YmFjaworCis9aGVhZDEgICBGT1JNQVQgT1BUSU9OUyAoPGZvcm1hdC1vcHRzPikKKworPW92ZXIKKworPWl0ZW0gLS1icmllZiAgICAgICAgLS0gbWluaW1pemVkIG91dHB1dCAodmFsdWVzIG9ubHkgd2hlcmUgYXBwbGljYWJsZSkKKworPWl0ZW0gLS10ZXh0ICAgICAgICAgLS0gZnVsbCB0ZXh0IGRlc2NyaXB0aW9uCisKKz1pdGVtIC0tc3ViamVjdCAgICAgIC0tIHN1YmplY3QgZGVzY3JpcHRpb24KKworPWl0ZW0gLS1zdWJqZWN0X2hhc2ggLS0gaGFzaCBvZiBzdWJqZWN0IGZvciBpbmRleGluZworCis9aXRlbSAtLWlzc3VlciAgICAgICAtLSBpc3N1ZXIgZGVzY3JpcHRpb24KKworPWl0ZW0gLS1pc3N1ZXJfaGFzaCAgLS0gaGFzaCBvZiBpc3N1ZXIgZm9yIGluZGV4aW5nCisKKz1pdGVtIC0tZmluZ2VycHJpbnQgIC0tIFNIQTEgZGlnZXN0IG9mIERFUgorCis9aXRlbSAtLXNlcmlhbCAgICAgICAtLSBzZXJpYWwgbnVtYmVyCisKKz1pdGVtIC0tbW9kdWx1cyAgICAgIC0tIG1vZHVsdXMgb2YgdGhlIHB1YmxpYyBrZXkKKworPWl0ZW0gLS1kYXRlcyAgICAgICAgLS0gc3RhcnQgYW5kIGVuZCBkYXRlcworCis9aXRlbSAtLXB1cnBvc2UgICAgICAtLSBkaXNwbGF5cyBhbGxvd2VkIHVzZXMKKworPWl0ZW0gLS1DICAgICAgICAgICAgLS0gQyBjb2RlIGRlc2NyaXB0aW9uCisKKz1iYWNrCisKKz1oZWFkMSAgIE9QRVJBVElPTkFMIE5PVEVTCisKKworPWhlYWQyICAgSW50ZXJhY3RpdmUgTW9kZQorCitUaGUgYXBwbGljYXRpb24gb3BlcmF0ZXMgaW4gaW50ZXJhY3RpdmUgbW9kZSBieSBkZWZhdWx0LiBJbiB0aGlzIG1vZGUKK2Jhc2ljIG9wZXJhdGlvbnMgb2Ygb2ZmZXJlZCBhbmQgcmVxdWlyZWQgaW5wdXQgaXMgcXVlcmllZCB0aHJvdWdoIHRoZQorY29tbWFuZCBsaW5lLiAKKworVHlwaWNhbCA8dGFiPiBjb21wbGV0aW9uIGlzIHByb3ZpZGVkIHdoZW4gcG9zc2libGUgYW5kIGZpZWxkIHNwZWNpZmljCitoZWxwIG1heSBiZSBvYnRhaW5lZCBieSBlbnRlcmluZyAnPycuCisKK1RvIHR1cm4gb2ZmIGludGVyYWN0aXZlIG1vZGUsIHN1cHBseSAnLS1ub2ludGVyYWN0aXZlJyBvciAnLUknIG9uIHRoZQoraW5pdGlhbCBjb21tYW5kIGxpbmUuIEVxdWl2YWxhbnRseSwgJ2ludGVyYWN0aXZlID0gZmFsc2UnIG1heWJlIHBsYWNlZAoraW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAoc2VlIGJlbG93KS4KKworPWhlYWQyICAgQ29uZmlndXJhdGlvbgorCitBIGNvbmZpZ3VyYXRpb24gZmlsZSBtYXkgYmUgc3VwcGxpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvciBmb3VuZCBpbiBhCitkZWZhdWx0IGxvY2F0aW9uICg8c25tcGNvbmZwYXRoPi9uZXQtc25tcC1jZXJ0LmNvbmYpLiBUaGlzIGZpbGUgbWF5Citjb250YWluIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBlcXVpdmFsZW50IHRvIHRob3NlIHN1cHBsaWVkIG9uIHRoZQorY29tbWFuZCBsaW5lIGFuZCBlZmZlY3RpdmVseSBwcm92aWRlcyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlc2UKK3ZhbHVlcy4gSWYgYSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIGlzIHN1cHBsaWVkIGl0IHdpbGwgb3ZlcnJpZGUgdGhlCit2YWx1ZSBpbiB0aGUgY29uZmlnIGZpbGUuIElmIG5laXRoZXIgaXMgcHJlc2VudCB0aGVuIGFuIGFwcGxpY2F0aW9uCit2YWx1ZSB3aWxsIGJlIHVzZWQuCisKKz1oZWFkMiAgIENlcnRpZmljYXRlIE5hbWluZworCitGaWxlbmFtZXMgb2YgY3JlYXRlZCBjZXJ0aWZpY2F0ZXMsIGFzIHN0b3JlZCBpbiB0aGUgY29uZmlndXJhdGlvbgorZGlyZWN0b3J5LCBhcmUgY2hvc2VuIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBJZiBhbmQgYXBwbGljYXRpb24gdGFnCitpcyBzdXBwbGllZCwgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBiYXNlbmFtZSBmb3IgdGhlIGNlcnRpZmljYXRlIGFuZAora2V5IGdlbmVyYXRlZC4gT3RoZXJ3aXNlLCBmb3IgQ0EgY2VydGlmaWNhdGVzLCB0aGUgYmFzZW5hbWUgd2lsbCBiZQorZGVyaXZlZCBmcm9tIHRoZSBDb21tb24gTmFtZS4gRm9yIG5vbi1DQSBjZXJ0aWZpY2F0ZXMgdGhlIGFwcGxpY2F0aW9uCit0YWcgZGVmYXVsdHMgdG8gJ3NubXAnIHdoaWNoIHdpbGwgdGhlbiBiZSB1c2VkIGFzIHRoZSBiYXNlbmFtZSBvZiB0aGUKK2NlcnRpZmljYXRlIGFuZCBrZXkuCisKKz1oZWFkMSAgIEVYQU1QTEVTCisKKz1vdmVyCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgLS1kYXlzIDEwMDAKKworPWl0ZW0gbmV0LXNubXAtY2VydCBnZW5jYSAtZiAuc25tcC9uZXQtc25tcC1jZXJ0LmNvbmYgLWkgbm9jYWRtCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgZ2VuY2VydCAtdCBzbm1wZCAtLWNuIGhvc3QubmV0LXNubXAub3JnCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgZ2VuY3NyIC10IHNubXBhcHAKKworPWl0ZW0gbmV0LXNubXAtY2VydCBzaWduY3NyIC0tY3NyIHNubXBhcHAgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZworCis9aXRlbSBuZXQtc25tcC1jZXJ0IHNob3djZXJ0cyAtLXN1YmplY3QgLS1pc3N1ZXIgLS1kYXRlcyBzbm1wYXBwCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgc2hvd2NhcyAtLWZpbmdlcnByaW50IGNhLW5ldC1zbm1wLm9yZyAtLWJyaWVmCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgaW1wb3J0IGNhLXRoaXJkLXBhcnR5LmNydAorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGltcG9ydCBzaWduZWQtcmVxdWVzdC5jcnQgc2lnbmVkLXJlcXVlc3Qua2V5CisKKz1iYWNrCisKKz1oZWFkMSBDT1BZUklHSFQKKworQ29weXJpZ2h0IChjKSAyMDEwIENvYmhhbSBBbmFseXRpYyBTb2x1dGlvbnMgLSBBbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IChjKSAyMDEwIEcuIFMuIE1hcnpvdCAtICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCis9aGVhZDEgICBBVVRIT1IKKworRy4gUy4gTWFyem90IChtYXJ6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldCkKKworPWN1dAorCmRpZmYgLS1naXQgYS9sb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmYgYi9sb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlZjFjYwotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL25ldC1zbm1wLWNlcnQuY29uZgpAQCAtMCwwICsxLDcyIEBACisjCisjIE5ldC1TTk1QIENlcnRpZmljYXRlIEdlbmVyYXRpb24gYW5kIE1hbmFnZW1lbnQgVG9vbCBDb25maWd1cmF0aW9uCisjCisKKyMgZGVmYXVsdCBtb2RlIHRvIG5vbi1pbnRlcmFjdGl2ZQorIyBpbnRlcmFjdGl2ZSA9IGZhbHNlCisKKyMgbG9jYXRpb24gb2YgJ3RscycgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIGNvbmZpZ3VyYXRpb24gZGlyCisjIHRsc0RpciA9IC4vdGxzCisKKyMgZW5jcnlwdENBID0gZmFsc2UgLSBYWFggbm90LWltcGxlbWVudGVkCisjIGVuY3J5cHRDcnQgPSBmYWxzZSAtIFhYWCBub3QtaW1wbGVtZW50ZWQKKworIyBkZWZhdWx0IHZhbGlkIGxpZmV0aW1lIGR1cmF0aW9uIGZvciBDQSBjZXJ0aWZpY2F0ZXMKKyMgY2FEYXlzID0gMTgyNQorCisjIGRlZmF1bHQgdmFsaWQgbGlmZXRpbWUgZHVyYXRpb24gZm9yIGNlcnRpZmljYXRlcworIyBjcnREYXlzID0gMzY1CisKKyMgZGVmYXVsdCBrZXkgdHlwZXMgZ2VuZXJhdGVkCisjIGtleVR5cGUgPSByc2EKKworIyBkZWZhdWx0IGtleSBzaXplIGdlbmVyYXRlZAorIyBrZXlTaXplID0gMjA0OAorCisjIGRlZmF1bHQgdHlwZSBvZiBtZXNzYWdlIGRpZ2VzdCB1c2VkCisjIG1zZ0RpZ2VzdCA9IHNoYTEKKworIyB0byBzZXQgaW5kaXZpZHVhbCBkZWZhdWx0cywgYSBzcGVjaWZpYyBpZGVudGl0eSBtYXkgYmUgaW5kaWNhdGVkCisjIG9uIHRoZSBuZXQtc25tcC1jZXJ0IGNvbW1hbmQgbGluZTogJy0taWRlbnRpdHkgPGlkPicgb3IgJy1pIDxpZD4nCisjIHZhbHVlcyBkZWZpbmVkIGF0IHRoZSBnbG9iYWwvZmlsZSBsZXZlbCB3aWxsIGJlIHVzZWQgdW5sZXNzCisjIG92ZXJyaWRlbiBieSB2YWx1ZXMgc3VwcGxpZWQgaW4gdGhlIHNwZWNpZmllZCBpZGVudGl0eS4KKyAKK2lkZW50aXR5ID0geworICAgaWQgPSBub2NhZG0KKyAgIGhvc3QgPSBuZXQtc25tcC5vcmcKKyAgIGNuID0gQ2xpZW50LWlkZW50aXR5CisgICBlbWFpbCA9IGFkbWluQG5ldC1zbm1wLm9yZworICAgb3JnID0gTmV0LVNOTVAgRGV2ZWxvcGVycworICAgb3JnVW5pdCA9IFNOTVAtRFRMUworICAgY291bnRyeSA9IFVTCisgICBzdGF0ZSA9IE1BCisgICBsb2NhbGl0eSA9IEJvc3RvbgorCisgICAjIDEwIHllYXJzCisgICBjYURheXMgPSAzNjU0CisgICAjIDIgeWVhcnMKKyAgIGNydERheXMgPSA3MzAKKworICAgc3ViamVjdEFsdE5hbWUgPSBlbWFpbDpjbGllbnRAbmV0LXNubXAub3JnCisgICBzdWJqZWN0QWx0TmFtZSA9IFVSSTpodHRwOi8vbmV0LXNubXAub3JnCit9OworCitpZGVudGl0eSA9IHsKKyAgIGlkID0gQ0EtaWRlbnRpdHkKKyAgIGhvc3QgPSBuZXQtc25tcC5vcmcKKyAgIGNuID0gQ0EtaWRlbnRpdHkKKyAgIGVtYWlsID0gY2EtYWRtaW5AbmV0LXNubXAub3JnCisgICBvcmcgPSBOZXQtU05NUCBEZXZlbG9wZXJzCisgICBvcmdVbml0ID0gU05NUC1EVExTCisgICBjb3VudHJ5ID0gVVMKKyAgIHN0YXRlID0gTUEKKyAgIGxvY2FsaXR5ID0gQm9zdG9uCisKKyAgICMgMTAgeWVhcnMKKyAgIGNhRGF5cyA9IDEwMDAKKyAgICMgMiB5ZWFycworICAgY3J0RGF5cyA9IDUwMAorCisgICBzdWJqZWN0QWx0TmFtZSA9IEROUzp0ZXN0Lm5ldC1zbm1wLm9yZworfTsKKwpkaWZmIC0tZ2l0IGEvbG9jYWwvc25tcC1icmlkZ2UtbWliIGIvbG9jYWwvc25tcC1icmlkZ2UtbWliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MGVhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9zbm1wLWJyaWRnZS1taWIKQEAgLTAsMCArMSwxMTcwIEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQ29weXJpZ2h0IChjKSBJQk0gQ29ycC4gMjAwOSwgMjAxMCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBBdXRob3Iocyk6CVZhc2lsZWlvcyBQYXBwYXMgPHZwYXBwYXNAdXMuaWJtLmNvbT4KKyMJCUplbnMgT3N0ZXJrYW1wIDxqZW5zQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyMgZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyMgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIyBUSEUgU09GVFdBUkUuCisKK3VzZSBOZXRTTk1QOjpPSUQgKCc6YWxsJyk7Cit1c2UgTmV0U05NUDo6QVNOICgnOmFsbCcpOwordXNlIE5ldFNOTVA6OmFnZW50ICgnOmFsbCcpOworCitzdWIgU1RQX1BST1BfVkFMVUUoKSB7IDB4MDF9CitzdWIgU1RQX1BST1BfRklMRSgpIHsgMHgwMn0KK3N1YiBTVFBfUFJPUF9ERUMoKSB7IDB4MDR9CitzdWIgU1RQX1BST1BfSEVYKCkgeyAweDA4fQorCitzdWIgRkRCX1NUQVRVU19PVEhFUiB7IDEgfQorc3ViIEZEQl9TVEFUVVNfSU5WQUxJRCB7IDIgfQorc3ViIEZEQl9TVEFUVVNfTEVBUk5FRCB7IDMgfQorc3ViIEZEQl9TVEFUVVNfU0VMRiB7IDQgfQorc3ViIEZEQl9TVEFUVVNfTUdNVCB7IDUgfQorCitteSAlb2lkX3ZhbHVlOworbXkgJW9pZF90eXBlOworbXkgJW9pZF9uZXh0OworbXkgKCVpbmRleGVzLCAlaW50ZXJmYWNlcywgJW1hY3MsICVhZ2VzLCAlbG9jYWxzLCAldmxhbnMsICV0YWdnZWQpOworbXkgJG9pZDsKKworJHN1YmFnZW50PTA7CitteSAkbmV0ZGlyPSIvc3lzL2NsYXNzL25ldC8iOworbXkgJHRhcmdldGJyaWRnZTsKKworJGNhY2hlX3RpbW91dD02MDsKKyRsYXN0X3BvcHVsYXRlZD0wOworCitteSAkcmVnb2lkID0gIi4xLjMuNi4xLjIuMS4xNyI7CisjIGFyZSB3ZSBydW5uaW5nIGVtYmVkZGVkID8gSWYgbm90LCByZWdpc3RlciBhcyBzdWJhZ2VudAoraWYgKCEkYWdlbnQpIHsKKyAgICAkYWdlbnQgPSBuZXcgTmV0U05NUDo6YWdlbnQoJ05hbWUnID0+ICdkb3QxcWJyaWRnZScsCisJCQkJJ0FnZW50WCcgPT4gMSk7CisgICAgJHN1YmFnZW50ID0gMTsKKyAgICBpZiAoICQjQVJHViAhPSAwKSB7CisJdXNhZ2UoJDApOworCWV4aXQoKTsKKyAgICB9CisgICAgJHRhcmdldGJyaWRnZSA9ICRBUkdWWzBdOworfSBlbHNlIHsKKyAgICBpZiAoIWRlZmluZWQoJGJyaWRnZSkpIHsKKwl1c2FnZSgkMCk7CisJZXhpdCgpOworICAgIH0KKyAgICAkdGFyZ2V0YnJpZGdlID0gJGJyaWRnZTsKK30KKworJGFnZW50LT5yZWdpc3RlcigiZG90MXFicmlkZ2UiLCAiLjEuMy42LjEuMi4xLjE3IiwgXCZyZXF1ZXN0X2hhbmRsZXIpIG9yIGRpZSAicmVnaXN0cmF0aW9uIG9mIGhhbmRsZXIgZmFpbGVkICFcbiI7CisKK2lmICgkc3ViYWdlbnQpIHsKKwkjIHJlZ2lzdGVyIGhhbmRsZXIgZm9yIGdyYWNlZnVsIHNodXRkb3duCisJJFNJR3snSU5UJ30gPSBcJnNodXRkb3duOworCSRTSUd7J1FVSVQnfSA9IFwmc2h1dGRvd247CisJJHJ1bm5pbmcgPSAxOworCisJd2hpbGUoJHJ1bm5pbmcpIHsKKwkJJGFnZW50LT5hZ2VudF9jaGVja19hbmRfcHJvY2VzcygxKTsKKwl9CisKKwkkYWdlbnQtPnNodXRkb3duKCk7Cit9CisKK3N1YiB1c2FnZSB7CisJbXkgJG5hbWUgPSBzaGlmdDsKKwlpZiAoJHN1YmFnZW50KSB7CisJCXByaW50ICRuYW1lLiJcblxuIjsKKwkJcHJpbnQgInVzYWdlOiBcdCRuYW1lIDxicmlkZ2U+CXN0YXJ0IHNubXAgYnJpZGdlIG1vZHVsZSIuCisJCQkiIGZvciBicmlkZ2UgPGJyaWRnZT5cblxuIjsKKwkJcHJpbnQgImFyZ3VtZW50czoJYnJpZGdlCQluYW1lIG9mIHRoZSBMaW51eCBicmlkZ2UiLgorCQkJIiB3aGljaCB5b3Ugd2FudCB0byBwcm92aWRlIGluZm8gdmlhIHNubXAgZm9yLlxuXG4iOworCX0gZWxzZSB7CisJCXByaW50ICd1c2FnZSBpbiBzbm1wZC5jb25mOiBwZXJsICRicmlkZ2U9ImJyMCI7IHBlcmwgZG8gPHBhdGggdG8gJG5hbWU+XG4nOworCX0KKwlwcmludCAibnVtYmVyIG9mIGFyZ3VtZW50cyBnaXZlbiAkI0FSR1ZcblxuIjsKK30KKworc3ViIHJlcXVlc3RfaGFuZGxlciB7CisJbXkgKCRoYW5kbGVyLCAkcmVnaXN0cmF0aW9uX2luZm8sICRyZXF1ZXN0X2luZm8sICRyZXF1ZXN0cyk9QF87CisJbXkgJHJlcXVlc3Q7CisKKwlwb3B1bGF0ZV9taWIoJHRhcmdldGJyaWRnZSk7CisKKwlmb3IoJHJlcXVlc3QgPSAkcmVxdWVzdHM7ICRyZXF1ZXN0OyAkcmVxdWVzdCA9ICRyZXF1ZXN0LT5uZXh0KCkpIHsKKwkJaWYoJHJlcXVlc3RfaW5mby0+Z2V0TW9kZSgpID09IE1PREVfR0VUKSB7CisJCQltb2RlX2dldCgkcmVxdWVzdCk7CisJCX0gZWxzaWYoJHJlcXVlc3RfaW5mby0+Z2V0TW9kZSgpID09IE1PREVfR0VUTkVYVCkgeworCQkJbW9kZV9nZXRfbmV4dCgkcmVxdWVzdCk7CisJCX0gZWxzZSB7CisJCQlwcmludCBTVERFUlIgIm1vZGUgbm90IGltcGxlbWVudGVkLlxuIjsKKwkJfQorCX0KK30KKworc3ViIG1vZGVfZ2V0eworCW15ICgkcmVxdWVzdCk9QF87CisJbXkgJG9pZD0kcmVxdWVzdC0+Z2V0T0lEKCk7CisKKwkkU05NUDo6dXNlX251bWVyaWMgPSAxOworCW15ICRub2lkPVNOTVA6OnRyYW5zbGF0ZU9iaigkb2lkKTsKKworCXJlcGx5KCRyZXF1ZXN0LCAkbm9pZCkgaWYgKGV4aXN0cyAkb2lkX3ZhbHVleyRub2lkfSk7Cit9CisKK3N1YiBmaW5kX25leHR7CisJbXkgKCRub2lkKSA9IEBfOworCW15ICRuZXh0b2lkID0gJG9pZF9uZXh0eyRub2lkfTsKKwlpZighZGVmaW5lZCgkbmV4dG9pZCkgfHwgIWRlZmluZWQoJG9pZF92YWx1ZXskbmV4dG9pZH0pKSB7CisJCSMgZmluZCB0aGUgbG93ZXN0IE9JRCB3aGlzIGlzIGhpZ2hlciB0aGFuICRub2lkCisJCSRwcmV2ID0gIi4xLjMuNi4xLjIuMS4xOCI7CisJCSRwcmV2X29pZCA9IG5ldyBOZXRTTk1QOjpPSUQoJHByZXYpOworCQkkbm9pZF9vaWQgPSBuZXcgTmV0U05NUDo6T0lEKCRub2lkKTsKKwkJI3ByaW50ICJsb29raW5nIGZvciBuZXh0IG9mICRub2lkXG4iOworCQlmb3IgbXkgJGNhbmRpZGF0ZSAoa2V5cyAlb2lkX3ZhbHVlKSB7CisJCQkjcHJpbnQgImV2YWx1YXRpbmcgJGNhbmRpZGF0ZVxuIjsKKwkJCSRjYW5kaWRhdGVfb2lkID0gbmV3IE5ldFNOTVA6Ok9JRCgkY2FuZGlkYXRlKTsKKwkJCWlmICgkbm9pZF9vaWQgPCAkY2FuZGlkYXRlX29pZCAmJiAkcHJldl9vaWQgPiAkY2FuZGlkYXRlX29pZCkgeworCQkJCSNwcmludCAiZm91bmQgY2FuZGlkYXRlICRjYW5kaWRhdGVcbiI7CisJCQkJJHByZXYgPSAkY2FuZGlkYXRlOworCQkJCSRwcmV2X29pZCA9ICRjYW5kaWRhdGVfb2lkOworCQkJfQorCQl9CisJCWlmICgkcHJldiBlcSAiLjEuMy42LjEuMi4xLjE4IikgeworCQkJcmV0dXJuOyAjIG5vIE9JRCBoaWdoZXIgdGhhbiAkbm9pZCBmb3VuZAorCQl9CisJCSRuZXh0b2lkID0gJHByZXY7CisJfQorCXJldHVybiAkbmV4dG9pZDsKK30KKworc3ViIG1vZGVfZ2V0X25leHR7CisJbXkgKCRyZXF1ZXN0KT1AXzsKKwlteSAkb2lkPSRyZXF1ZXN0LT5nZXRPSUQoKTsKKwkkU05NUDo6dXNlX251bWVyaWMgPSAxOworCW15ICRub2lkPVNOTVA6OnRyYW5zbGF0ZU9iaigkb2lkKTsKKwlteSAkbmV4dG9pZCA9IGZpbmRfbmV4dCgkbm9pZCk7CisJI3ByaW50ICJmb3VuZCAkbmV4dG9pZFxuIjsKKwlpZihkZWZpbmVkKCRuZXh0b2lkKSkgeworCQlteSAkdHlwZSA9ICRvaWRfdHlwZXskbmV4dG9pZH07CisJCW15ICR2YWx1ZSA9ICRvaWRfdmFsdWV7JG5leHRvaWR9OworCQlpZiAoZGVmaW5lZCgkdHlwZSkgYW5kIGRlZmluZWQoJHZhbHVlKSkgeworCQkJcmVwbHkoJHJlcXVlc3QsCSRuZXh0b2lkKTsKKwkJfQorCX0KK30KKworc3ViIHJlcGx5eworCW15ICgkcmVxdWVzdCwgJG9pZCk9QF87CisKKwlteSAkdHlwZT0kb2lkX3R5cGV7JG9pZH07CisJbXkgJHZhbHVlPSRvaWRfdmFsdWV7JG9pZH07CisKKwkkcmVxdWVzdC0+c2V0T0lEKG5ldyBOZXRTTk1QOjpPSUQoJG9pZCkpOworCSRyZXF1ZXN0LT5zZXRWYWx1ZSgkdHlwZSwgJHZhbHVlKTsKK30KKworIyBQb3B1bGF0ZWQgTUlCIE9JRAorIworIyMgZG90MWRCYXNlUG9ydDoJMS4zLjYuMS4yLjEuMTcuMS40LjEuMS48ZG90MWRCYXNlUG9ydD4KKyMJCQlJTlRFR0VSMzIKKyMKKyMgZG90MWRCYXNlUG9ydElmSW5kZXg6CTEuMy42LjEuMi4xLjE3LjEuNC4xLjIuPGRvdDFkQmFzZVBvcnQ+CisjCQkJSU5URUdFUjMyCisjCisjIGRvdDFkU3RwKjoJCTEuMy42LjEuMi4xLjE3LjIuPDEtMTQ+CisjCQkJSU5URUdFUiwgT0NURVQgU1RSSU5HCisjCisjIGRvdDFkVHBGZGJBZGRyZXNzOgkxLjMuNi4xLjIuMS4xNy40LjMuMS4xLjxkb3QxZFRwRmRiQWRkcmVzcz4KKyMJCQlPQ1RFVCBTVFJJTkcgKFNJWkUgKDYpKQorIworIyBkb3QxZFRwRmRiUG9ydDoJMS4zLjYuMS4yLjEuMTcuNC4zLjEuMi48ZG90MWRUcEZkYkFkZHJlc3M+CisjCQkJSU5URUdFUjMyCisjCisjIGRvdDFkVHBGZGJTdGF0dXM6CTEuMy42LjEuMi4xLjE3LjQuMy4xLjMuPGRvdDFkVHBGZGJBZGRyZXNzPgorIwkJCUlOVEVHRVIKKyMJCQkxIDogb3RoZXIKKyMJCQkyIDogaW52YWxpZAorIwkJCTMgOiBsZWFybmVkCisjCQkJNCA6IHNlbGYKKyMJCQk1IDogbWdtdAorIworCitzdWIgcG9wdWxhdGVfbWliIHsKKwlteSAkbm93OworCW15ICRicmlkZ2UgPSBzaGlmdDsKKwlteSAkc2Vjb25kc19wYXNzZWQ7CisJJHBvcnRzPTA7CisJJG9pZD0iIjsKKworICAgICAgICAkbm93PXRpbWUoKTsKKwkkc2Vjb25kc19wYXNzZWQ9JG5vdy0kbGFzdF9wb3B1bGF0ZWQ7CisgICAgICAgIHJldHVybiBpZigkc2Vjb25kc19wYXNzZWQgPD0gJGNhY2hlX3RpbW91dCk7CisgICAgICAgICRsYXN0X3BvcHVsYXRlZD0kbm93OworCisJJW9pZF92YWx1ZT0oKTsKKwklb2lkX3R5cGU9KCk7CisJJW9pZF9uZXh0PSgpOworCSVpbmRleGVzPSgpOworCSVpbnRlcmZhY2VzPSgpOworCSVtYWNzPSgpOworCSVhZ2VzPSgpOworCSVsb2NhbHM9KCk7CisJJXZsYW5zPSgpOworCSV0YWdnZWQ9KCk7CisKKwkjIGZpcnN0IHBvcHVsYXRlZCBvaWQKKwkkb2lkX25leHR7Ii4xLjMuNi4xLjIuMS4xNyJ9PSIuMS4zLjYuMS4yLjEuMTcuMS4xIjsKKworCWNyZWF0ZWJhc2VpbmZvKCRicmlkZ2UpOworCisJcmVhZGluZGV4ZXMoJGJyaWRnZSk7CisJcmVhZGZvcndhcmRzKCRicmlkZ2UpOworCXJlYWR2bGFucygkYnJpZGdlKTsKKworCWNyZWF0ZXBvcnRzKCRicmlkZ2UpOworCisJc3RwcHJvcGVydGllcygkYnJpZGdlKTsKKworCXN0cHBvcnRwcm9wZXJ0aWVzKCRicmlkZ2UpOworCisJZG90MWRUcHByb3BlcnRpZXMoKTsKKworCW15ICRwcmV2b2lkID0gJG9pZDsKKwlteSAkY3Vycm9pZCA9IGNyZWF0ZW1hY3MoJGJyaWRnZSk7CisJJG9pZF9uZXh0eyRwcmV2b2lkfSA9ICRjdXJyb2lkOworCisJcG9ydHByb3BlcnRpZXMoJGJyaWRnZSk7CisKKworCWRvdDFxYmFzZSgkYnJpZGdlKTsKKworCWRvdDFxZmRiKCRicmlkZ2UpOworCisJZG90MXFjdXJyZW50dmxhbnMoJGJyaWRnZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3ViIGZpbmRicmlkZ2VzKCkKK3sKKwlteSBAYnJpZGdlczsKKworCW9wZW5kaXIoRElSLCAkbmV0ZGlyKSBvciBkaWUgInVuYWJsZSB0byBvcGVuICRuZXRkaXIgIVxuIjsKKworCXdoaWxlKG15ICRicj1yZWFkZGlyKERJUikpeworCQluZXh0IGlmICRiciBlcSAiLiI7CisJCW5leHQgaWYgJGJyIGVxICIuLiI7CisJCW5leHQgdW5sZXNzIC1kICRuZXRkaXIuJGJyLiIvYnJpZGdlIjsKKwkJcHVzaCBAYnJpZGdlcywgJGJyOworCX0KKworCWNsb3NlKERJUik7CisKKwlyZXR1cm4gQGJyaWRnZXM7Cit9CisKK3N1YiBjcmVhdGViYXNlaW5mbygpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCisJJG9pZD0iLjEuMy42LjEuMi4xLjE3LjEuMSI7CisJJG9pZF92YWx1ZXskb2lkfT1tYWMyaGV4KHJlYWRmaWxlKCRuZXRkaXIuJGJyaWRnZS4iL2FkZHJlc3MiLCAwKSk7CisJJG9pZF90eXBleyRvaWR9PUFTTl9PQ1RFVF9TVFI7CisJJG9pZF9uZXh0eyRvaWR9PSIuMS4zLjYuMS4yLjEuMTcuMS4yIjsKKworCW9wZW5kaXIoRElSLCAkbmV0ZGlyLiRicmlkZ2UuIi9icmlmLyIpIG9yIGRpZSAiQ291bGQgbm90IG9wZW4gIi4kbmV0ZGlyLiRicmlkZ2UuImJyaWYgIVxuIjsKKworCWZvcmVhY2ggJGVudHJ5IChyZWFkZGlyKERJUikpIHsKKwkJbmV4dCBpZiAkZW50cnkgZXEgIi4iOworCQluZXh0IGlmICRlbnRyeSBlcSAiLi4iOworCQkjIG9ubHkgY291bnQgbm9uLXZsYW4gaW50ZXJmYWNlcworCQluZXh0IGlmICRlbnRyeSA9fiAvXC5bMC05XSovOworCQkkcG9ydHMrKzsKKwl9CisKKwljbG9zZWRpcihESVIpOworCisJJG9pZD0iLjEuMy42LjEuMi4xLjE3LjEuMiI7CisJJG9pZF92YWx1ZXskb2lkfT0kcG9ydHM7CisJJG9pZF90eXBleyRvaWR9PUFTTl9JTlRFR0VSOworCSRvaWRfbmV4dHskb2lkfT0iLjEuMy42LjEuMi4xLjE3LjEuMyI7CisKKwkkb2lkPSIuMS4zLjYuMS4yLjEuMTcuMS4zIjsKKwkkb2lkX3ZhbHVleyRvaWR9PSIyIjsJIyB0cmFuc3BhcmVudCBvbmx5CisJJG9pZF90eXBleyRvaWR9PUFTTl9JTlRFR0VSOworCSRvaWRfbmV4dHskb2lkfT0iLjEuMy42LjEuMi4xLjE3LjEuNC4xLjEuMSI7CisKK30KKworc3ViIGNyZWF0ZW1hY3MoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKyAgICAgICAgbXkgJHN0YXJ0X29pZCA9ICRvaWQgPSAiLjEuMy42LjEuMi4xLjE3LjQuMy4xIjsKKworCWZvcmVhY2ggbXkgJG1hYyAoc29ydCB7JGEgY21wICRifSBrZXlzICVtYWNzKSB7CisJCW15ICRtYWNfb2lkPW1hYzJvaWQoJG1hYyk7CisJCXVubGVzcyhkZWZpbmVkKCRmaXJzdF9tYWNfb2lkKSl7CisJCQkkZmlyc3RfbWFjX29pZD0kbWFjX29pZDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMSJ9PSRvaWQuIi4xIi4kbWFjX29pZDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMiJ9PSRvaWQuIi4yIi4kbWFjX29pZDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMyJ9PSRvaWQuIi4zIi4kbWFjX29pZDsKKwkJfQorCQlteSAkcG9ydD0kbWFjc3skbWFjfXskYnJpZGdlfTsKKwkJbXkgJGJhc2Vwb3J0PSRiYXNlcG9ydHN7JGJyaWRnZX17JHBvcnR9OworCQlteSAkc3RhdHVzPSRsb2NhbHN7JG1hY317JGJyaWRnZX07CisJCW15ICRhZ2U9JGFnZXN7JG1hY317JGJyaWRnZX07CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMSIuJG1hY19vaWR9PW1hYzJoZXgoJG1hYyk7CisJCSRvaWRfdHlwZXskb2lkLiIuMSIuJG1hY19vaWR9PUFTTl9PQ1RFVF9TVFI7CisJCWlmKGRlZmluZWQoJHBydl9tYWNfb2lkKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjEiLiRwcnZfbWFjX29pZH09CisJCQkJJG9pZC4iLjEiLiRtYWNfb2lkOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMiIuJG1hY19vaWR9PSRiYXNlcG9ydDsKKwkJJG9pZF90eXBleyRvaWQuIi4yIi4kbWFjX29pZH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHBydl9tYWNfb2lkKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjIiLiRwcnZfbWFjX29pZH09CisJCQkJJG9pZC4iLjIiLiRtYWNfb2lkOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMyIuJG1hY19vaWR9PSRzdGF0dXM7CisJCSRvaWRfdHlwZXskb2lkLiIuMyIuJG1hY19vaWR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcnZfbWFjX29pZCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4zIi4kcHJ2X21hY19vaWR9PQorCQkJCSRvaWQuIi4zIi4kbWFjX29pZDsKKwkJfQorCisJCSRwcnZfbWFjX29pZD0kbWFjX29pZDsKKwl9CisKKwlpZiAoJHBydl9tYWNfb2lkIGFuZCAkZmlyc3RfbWFjX29pZCkgeworCQkkb2lkX25leHR7JG9pZC4iLjEiLiRwcnZfbWFjX29pZH09JG9pZC4iLjIiLiRmaXJzdF9tYWNfb2lkOworCQkkb2lkX25leHR7JG9pZC4iLjIiLiRwcnZfbWFjX29pZH09JG9pZC4iLjMiLiRmaXJzdF9tYWNfb2lkOworCQkkb2lkX25leHR7JG9pZC4iLjMiLiRwcnZfbWFjX29pZH09Ii4xLjMuNi4xLjIuMS4xNy40LjQuMS4xLjEiOworCX0KKworCXVuZGVmICRwcnZfbWFjX29pZDsKKwl1bmRlZiAkZmlyc3RfbWFjX29pZDsKKworCXJldHVybiAkc3RhcnRfb2lkLiIuMSIuJGZpcnN0X21hY19vaWQ7Cit9CisKKyMgVE9ETzogaXMgdGhpcyBzZXF1ZW5jZSBjb21wbGV0ZSA/CitzdWIgY3JlYXRlcG9ydHMoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKwlteSAoJGJhc2Vwb3J0LCAkcHJldl9iYXNlcG9ydCwgJGZpcnN0X2Jhc2Vwb3J0KTsKKwkkYmFzZXBvcnQ9MTsKKwlteSAkb2lkPSAnLjEuMy42LjEuMi4xLjE3LjEuNC4xJzsKKworCWZvcmVhY2ggbXkgJHBvcnQgKGtleXMgJXskaW50ZXJmYWNlc3skYnJpZGdlfX0pIHsKKwkJdW5sZXNzKGRlZmluZWQoJGZpcnN0X2Jhc2Vwb3J0KSl7CisJCQkkZmlyc3RfYmFzZXBvcnQ9JGJhc2Vwb3J0OworCQkJJG9pZF9uZXh0eyRvaWQuIi4xIn09JG9pZC4iLjEuIi4kYmFzZXBvcnQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjIifT0kb2lkLiIuMi4iLiRiYXNlcG9ydDsKKwkJfQorCQlteSAkaW5kZXg9JGluZGV4ZXN7JGJyaWRnZX17JHBvcnR9OworCQkkYmFzZXBvcnRzeyRicmlkZ2V9eyRwb3J0fT0kYmFzZXBvcnQ7CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMS4iLiRiYXNlcG9ydH09JGJhc2Vwb3J0OworCQkkb2lkX3R5cGV7JG9pZC4iLjEuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcnZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4iLiRwcnZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4xLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMi4iLiRiYXNlcG9ydH09JGluZGV4OworCQkkb2lkX3R5cGV7JG9pZC4iLjIuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcnZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4iLiRwcnZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4yLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJJHBydl9iYXNlcG9ydD0kYmFzZXBvcnQ7CisJCSRiYXNlcG9ydCsrOworCX0KKworCWlmICggJHBydl9iYXNlcG9ydCBhbmQgJGZpcnN0X2Jhc2Vwb3J0ICkgeworCQkkb2lkX25leHR7JG9pZC4iLjEuIi4kcHJ2X2Jhc2Vwb3J0fT0kb2lkLiIuMi4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4yLiIuJHBydl9iYXNlcG9ydH09Ii4xLjMuNi4xLjIuMS4xNy4yLjEiOworCX0KKworCXVuZGVmICRwcnZfYmFzZXBvcnQ7CisJdW5kZWYgJGZpcnN0X2Jhc2Vwb3J0OworCit9CisKK3N1YiBzdHBwcm9wZXJ0aWVzKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisJbXkgJGRpciA9ICRuZXRkaXIuJGJyaWRnZS4iL2JyaWRnZS8iOworCisJQHN0cHByb3BzID0gKCB7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMSIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9WQUxVRSwKKwkJCXZhbHVlID0+ICIzIiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4yIiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjIiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuInByaW9yaXR5IiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4zIiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjMiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuInRvcG9sb2d5X2NoYW5nZV90aW1lciIsCisJCQl0eXBlID0+IEFTTl9USU1FVElDS1MsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi40IiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjQiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuInRvcG9sb2d5X2NoYW5nZSIsCisJCQl0eXBlID0+IEFTTl9DT1VOVEVSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuNSIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi41IiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJyb290X2lkIiwKKwkJCXR5cGUgPT4gQVNOX09DVEVUX1NUUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjYiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuNiIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4icm9vdF9wYXRoX2Nvc3QiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjciIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuNyIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4icm9vdF9wb3J0IiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi44IiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjgiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuIm1heF9hZ2UiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjkiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuOSIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4iaGVsbG9fdGltZSIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTEiIH0sCisJCQkjIFRPRE8gLi4uMTcuMi4xMAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjExIiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJmb3J3YXJkX2RlbGF5IiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xMiIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xMiIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4ibWF4X2FnZSIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTMiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTMiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuImhlbGxvX3RpbWUiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjE0IiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjE0IiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJmb3J3YXJkX2RlbGF5IiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xNS4xLjEuMSIgfSwKKwkJCSk7CisKKwlmb3IgKCRpPTA7ICRpIDw9ICQjc3RwcHJvcHM7ICRpKyspIHsKKwkJbXkgJXByb3BzID0gJXskc3RwcHJvcHNbJGldfTsKKwkJJG9pZCA9ICRwcm9wc3snb2lkJ307CisJCWlmICggJHByb3BzeydmbGFncyd9ICYgU1RQX1BST1BfVkFMVUUsKSB7CisJCQkkb2lkX3ZhbHVleyRvaWR9ID0gJHByb3Bzeyd2YWx1ZSd9OworCQl9CisJCWlmICggJHByb3BzeydmbGFncyd9ICYgU1RQX1BST1BfRklMRSwpIHsKKwkJCSRvaWRfdmFsdWV7JG9pZH0gPQorCQkJcmVhZGZpbGUoJHByb3Bzeyd2YWx1ZSd9LAorCQkJJHByb3BzeydmbGFncyd9KTsKKwkJfQorCQkkb2lkX3R5cGV7JG9pZH0gPSAkcHJvcHN7J3R5cGUnfTsKKwkJJG9pZF9uZXh0eyRvaWR9ID0gJHByb3BzeyduZXh0b2lkJ307CisJfQorfQorCitzdWIgc3RwcG9ydHByb3BlcnRpZXMKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisJbXkgJGJyaWZkaXIgPSAkbmV0ZGlyLiRicmlkZ2UuIi9icmlmLyI7CisJbXkgKCRiYXNlcG9ydCwgJGZpcnN0X2Jhc2Vwb3J0LCAkcHJldl9iYXNlcG9ydCk7CisKKwkkb2lkPScuMS4zLjYuMS4yLjEuMTcuMi4xNS4xJzsKKworCWZvcmVhY2ggbXkgJHBvcnQgKGtleXMgJXskaW50ZXJmYWNlc3skYnJpZGdlfX0pIHsKKwkJJGJhc2Vwb3J0ID0gJGJhc2Vwb3J0c3skYnJpZGdlfXskcG9ydH07CisKKwkJdW5sZXNzKGRlZmluZWQoJGZpcnN0X2Jhc2Vwb3J0KSl7CisJCQkkZmlyc3RfYmFzZXBvcnQ9JGJhc2Vwb3J0OworCQkJJG9pZF9uZXh0eyRvaWQuIi4xIn09JG9pZC4iLjEuIi4kYmFzZXBvcnQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjIifT0kb2lkLiIuMi4iLiRiYXNlcG9ydDsKKwkJfQorCisJCW15ICRpbnRlcmZhY2UgPSAkaW50ZXJmYWNlc3skYnJpZGdlfXskcG9ydH07CisJCW15ICRpZmRpciA9ICRicmlmZGlyLiRpbnRlcmZhY2U7CisKKwkJIyBkb3QxZFN0cFBvcnQKKwkJJG9pZF92YWx1ZXskb2lkLiIuMS4iLiRiYXNlcG9ydH09JGJhc2Vwb3J0OworCQkkb2lkX3R5cGV7JG9pZC4iLjEuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjEuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjEuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydFByaW9yaXR5CisJCSRvaWRfdmFsdWV7JG9pZC4iLjIuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL3ByaW9yaXR5IiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuMi4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMi4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0U3RhdGUKKwkJbXkgQHRyYW5zbGF0aW9uID0gKDEsIDMsIDQsIDUsIDIpOworCQlteSAkc3RhdGUgPSByZWFkZmlsZSgkaWZkaXIuIi9zdGF0ZSIsIDApOworCQkkb2lkX3ZhbHVleyRvaWQuIi4zLiIuJGJhc2Vwb3J0fT0kdHJhbnNsYXRpb25bJHN0YXRlXTsKKwkJJG9pZF90eXBleyRvaWQuIi4zLiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4zLiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4zLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnRFbmFibGUKKwkJQHRyYW5zbGF0aW9uID0gKDIsIDEsIDEsIDEsIDEpOworCQkkb2lkX3ZhbHVleyRvaWQuIi40LiIuJGJhc2Vwb3J0fT0kdHJhbnNsYXRpb25bJHN0YXRlXTsKKwkJJG9pZF90eXBleyRvaWQuIi40LiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi40LiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi40LiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnRQYXRoQ29zdAorCQkkb2lkX3ZhbHVleyRvaWQuIi41LiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9wYXRoX2Nvc3QiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi41LiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi41LiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi41LiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnREZXNpZ25hdGVkUm9vdAorCQkkb2lkX3ZhbHVleyRvaWQuIi42LiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9kZXNpZ25hdGVkX3Jvb3QiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi42LiIuJGJhc2Vwb3J0fT1BU05fT0NURVRfU1RSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjYuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjYuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRDb3N0CisJCSRvaWRfdmFsdWV7JG9pZC4iLjcuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL2Rlc2lnbmF0ZWRfY29zdCIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjcuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjcuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjcuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRCcmlkZ2UKKwkJJG9pZF92YWx1ZXskb2lkLiIuOC4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvZGVzaWduYXRlZF9icmlkZ2UiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi44LiIuJGJhc2Vwb3J0fT1BU05fT0NURVRfU1RSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjguIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjguIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRQb3J0CisJCSRvaWRfdmFsdWV7JG9pZC4iLjkuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL2Rlc2lnbmF0ZWRfcG9ydCIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjkuIi4kYmFzZXBvcnR9PUFTTl9PQ1RFVF9TVFI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuOS4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuOS4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0Rm9yd2FyZFRyYW5zaXRpb25zIChubyB2YWx1ZSBpbiBicmlkZ2UgbW9kdWxlKQorCisJCSMgZG90MWRTdHBQb3J0UGF0aENvc3QzMgorCQkkb2lkX3ZhbHVleyRvaWQuIi4xMS4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvcGF0aF9jb3N0IiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuMTEuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjExLiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4xMS4iLiRiYXNlcG9ydDsKKwkJfQorCisKKwkJJHByZXZfYmFzZXBvcnQ9JGJhc2Vwb3J0OworCX0KKworCWlmICggJHByZXZfYmFzZXBvcnQgYW5kICRmaXJzdF9iYXNlcG9ydCApIHsKKwkJJG9pZF9uZXh0eyRvaWQuIi4xLiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi4yLiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjIuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjMuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMy4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuNC4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi40LiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi41LiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjUuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjYuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuNi4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuNy4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi43LiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi44LiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjguIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjkuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuOS4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuMTEuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMTEuIi4kcHJldl9iYXNlcG9ydH09Ii4xLjMuNi4xLjIuMS4xNy40LjEiOworCX0KKworCSRvaWQgPSAkb2lkLiIuMTEuIi4kcHJldl9iYXNlcG9ydDsKKworCXVuZGVmICRwcmV2X2Jhc2Vwb3J0OworCXVuZGVmICRmaXJzdF9iYXNlcG9ydDsKKworfQorCitzdWIgZG90MWRUcHByb3BlcnRpZXMoKQoreworCUBzdHBwcm9wcyA9ICggeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy40LjEiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfVkFMVUUsCisJCQl2YWx1ZSA9PiAiMCIsCisJCQl0eXBlID0+IEFTTl9DT1VOVEVSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjQuMiIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuNC4yIiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX1ZBTFVFLAorCQkJdmFsdWUgPT4gIjMwMCIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjQuMyIgfSwKKwkJCSk7CisKKwlmb3IgKCRpPTA7ICRpIDw9ICQjc3RwcHJvcHM7ICRpKyspIHsKKwkJbXkgJXByb3BzID0gJXskc3RwcHJvcHNbJGldfTsKKwkJJG9pZCA9ICRwcm9wc3snb2lkJ307CisJCWlmICggJHByb3BzeydmbGFncyd9ICYgU1RQX1BST1BfVkFMVUUsKSB7CisJCQkkb2lkX3ZhbHVleyRvaWR9ID0gJHByb3Bzeyd2YWx1ZSd9OworCQl9CisJCWlmICggJHByb3BzeydmbGFncyd9ICYgU1RQX1BST1BfRklMRSwpIHsKKwkJCSRvaWRfdmFsdWV7JG9pZH0gPQorCQkJcmVhZGZpbGUoJHByb3Bzeyd2YWx1ZSd9LAorCQkJJHByb3BzeydmbGFncyd9KTsKKwkJfQorCQkkb2lkX3R5cGV7JG9pZH0gPSAkcHJvcHN7J3R5cGUnfTsKKwkJJG9pZF9uZXh0eyRvaWR9ID0gJHByb3BzeyduZXh0b2lkJ307CisJfQorfQorCitzdWIgcG9ydHByb3BlcnRpZXMKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisJbXkgKCRiYXNlcG9ydCwgJGZpcnN0X2Jhc2Vwb3J0LCAkcHJldl9iYXNlcG9ydCk7CisKKwkkb2lkPScuMS4zLjYuMS4yLjEuMTcuNC40LjEnOworCisJZm9yZWFjaCBteSAkcG9ydCAoa2V5cyAleyRpbnRlcmZhY2VzeyRicmlkZ2V9fSkgeworCQkkYmFzZXBvcnQgPSAkYmFzZXBvcnRzeyRicmlkZ2V9eyRwb3J0fTsKKworCQl1bmxlc3MoZGVmaW5lZCgkZmlyc3RfYmFzZXBvcnQpKXsKKwkJCSRmaXJzdF9iYXNlcG9ydD0kYmFzZXBvcnQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjEifT0kb2lkLiIuMS4iLiRiYXNlcG9ydDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMiJ9PSRvaWQuIi4yLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJbXkgJGludGVyZmFjZSA9ICRpbnRlcmZhY2VzeyRicmlkZ2V9eyRwb3J0fTsKKwkJbXkgJGlmZGlyID0gJG5ldGRpci4kaW50ZXJmYWNlOworCisJCSMgZG90MWRUcFBvcnQKKwkJJG9pZF92YWx1ZXskb2lkLiIuMS4iLiRiYXNlcG9ydH09JGJhc2Vwb3J0OworCQkkb2lkX3R5cGV7JG9pZC4iLjEuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjEuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjEuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkVHBQb3J0TWF4SW5mbworCQkkb2lkX3ZhbHVleyRvaWQuIi4yLiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9tdHUiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi4yLiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4yLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFRwUG9ydEluRnJhbWVzCisJCSRvaWRfdmFsdWV7JG9pZC4iLjMuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL3N0YXRpc3RpY3MvcnhfcGFja2V0cyIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjMuIi4kYmFzZXBvcnR9PUFTTl9DT1VOVEVSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjMuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjMuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkVHBQb3J0T3V0RnJhbWVzCisJCSRvaWRfdmFsdWV7JG9pZC4iLjQuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL3N0YXRpc3RpY3MvdHhfcGFja2V0cyIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjQuIi4kYmFzZXBvcnR9PUFTTl9DT1VOVEVSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjQuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjQuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkVHBQb3J0SW5EaXNjYXJkcworCQkkb2lkX3ZhbHVleyRvaWQuIi41LiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9zdGF0aXN0aWNzL3J4X2Ryb3BwZWQiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi41LiIuJGJhc2Vwb3J0fT1BU05fQ09VTlRFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi41LiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi41LiIuJGJhc2Vwb3J0OworCQl9CisKKwkJJHByZXZfYmFzZXBvcnQ9JGJhc2Vwb3J0OworCX0KKworCWlmICggJHByZXZfYmFzZXBvcnQgYW5kICRmaXJzdF9iYXNlcG9ydCApIHsKKwkJJG9pZF9uZXh0eyRvaWQuIi4xLiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi4yLiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjIuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjMuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMy4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuNC4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi40LiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi41LiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjUuIi4kcHJldl9iYXNlcG9ydH09Ii4xLjMuNi4xLjIuMS4xNy41LjEiOworCX0KKworCSRvaWQgPSAkb2lkLiIuNS4iLiRwcmV2X2Jhc2Vwb3J0OworCisJdW5kZWYgJHByZXZfYmFzZXBvcnQ7CisJdW5kZWYgJGZpcnN0X2Jhc2Vwb3J0OworfQorCitzdWIgZG90MXFiYXNlKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisKKwlteSAkb2lkPSIuMS4zLjYuMS4yLjEuMTcuNy4xLjEiOworCSRvaWRfbmV4dHsiLjEuMy42LjEuMi4xLjE3LjcifT0kb2lkLiIuMSI7CisJJG9pZF9uZXh0eyIuMS4zLjYuMS4yLjEuMTcuNy4xIn09JG9pZC4iLjEiOworCisJJG9pZF92YWx1ZXskb2lkLiIuMSJ9PTE7CisJJG9pZF90eXBleyRvaWQuIi4xIn09QVNOX0lOVEVHRVI7CisJJG9pZF9uZXh0eyRvaWQuIi4xIn09JG9pZC4iLjIiOworCisJJG9pZF92YWx1ZXskb2lkLiIuMiJ9PTQwOTQ7CisJJG9pZF90eXBleyRvaWQuIi4yIn09QVNOX1VOU0lHTkVEOworCSRvaWRfbmV4dHskb2lkLiIuMiJ9PSRvaWQuIi4zIjsKKworCSRvaWRfdmFsdWV7JG9pZC4iLjMifT00MDk0OworCSRvaWRfdHlwZXskb2lkLiIuMyJ9PUFTTl9VTlNJR05FRDsKKwkkb2lkX25leHR7JG9pZC4iLjMifT0kb2lkLiIuNCI7CisKKwkkb2lkX3ZhbHVleyRvaWQuIi40In09MDsgIyBmaWxsZWQgaW4gYnkgY3VycmVudHZsYW5zCisJJG9pZF90eXBleyRvaWQuIi40In09QVNOX1VOU0lHTkVEOworCSRvaWRfbmV4dHskb2lkLiIuNCJ9PSRvaWQuIi41IjsKKworCSRvaWRfdmFsdWV7JG9pZC4iLjUifT0yOworCSRvaWRfdHlwZXskb2lkLiIuNSJ9PUFTTl9JTlRFR0VSOworCSRvaWRfbmV4dHskb2lkLiIuNSJ9PTA7ICAjIGZpbGxlZCBpbiBieSBkb3QxcWZkYgorCit9CisKK3N1YiBkb3QxcWZkYigpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCisJbXkgJG9pZD0iLjEuMy42LjEuMi4xLjE3LjcuMS4yIjsKKwlmb3JlYWNoIG15ICR2bGFuIChzb3J0IHskYTw9PiRifSBrZXlzICV2bGFucyl7CisJCXVubGVzcyhkZWZpbmVkKCRmaXJzdF92bGFuKSl7CisJCQkkZmlyc3Rfdmxhbj0kdmxhbjsKKwkJCSRvaWRfbmV4dHsiLjEuMy42LjEuMi4xLjE3LjcuMS4xLjUifT0kb2lkLiIuMS4xLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZH09JG9pZC4iLjEuMS4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi4xIn09JG9pZC4iLjEuMS4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLjEifT0kb2lkLiIuMS4xLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjEuMiJ9PSRvaWQuIi4xLjIuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjEuMS4iLiR2bGFufT0kdmxhbjsKKwkJJG9pZF90eXBleyRvaWQuIi4xLjEuIi4kdmxhbn09QVNOX1VOU0lHTkVEOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLjEuIi4kcHJ2X3ZsYW59PSRvaWQuIi4xLjEuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjEuMi4iLiR2bGFufT0wOyAjIHRvIGJlIGZpbGxlZCBsYXRlcgorCQkkb2lkX3R5cGV7JG9pZC4iLjEuMi4iLiR2bGFufT1BU05fQ09VTlRFUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4yLiIuJHBydl92bGFufT0kb2lkLiIuMS4yLiIuJHZsYW47CisJCX0KKworCQkkcHJ2X3ZsYW49JHZsYW47CisJfQorCWlmKCRwcnZfdmxhbiBhbmQgJGZpcnN0X3ZsYW4peworCQkkb2lkX25leHR7JG9pZC4iLjEuMS4iLiRwcnZfdmxhbn09JG9pZC4iLjEuMi4iLiRmaXJzdF92bGFuOworCQkkb2lkX25leHR7JG9pZC4iLjEuMi4iLiRwcnZfdmxhbn09MDsgIyB0byBiZSBmaWxsZWQgbGF0ZXIKKwl9CisKKwlteSAlbWFjdmxhbj0oKTsKKwlteSAldmxhbm1hYz0oKTsKKworCWZvcmVhY2ggbXkgJHZsYW4gKHNvcnQgeyRhPD0+JGJ9IGtleXMgJXZsYW5zKXsKKwkJbXkgJGNvdW50PTA7CisJCWZvcmVhY2ggbXkgJG1hYyAoc29ydCB7JGEgY21wICRifSBrZXlzICVtYWNzKSB7CisJCQlteSAkdmJyaWRnZT0kYnJpZGdlLiJfdmxhbiIuJHZsYW47CisJCQluZXh0IHVubGVzcyhkZWZpbmVkKCRtYWNzeyRtYWN9eyR2YnJpZGdlfSkpOworCQkJJGNvdW50Kys7CisJCQlteSAkbWFjX29pZD1tYWMyb2lkKCRtYWMpOworCQkJJG1hY3ZsYW57JHZsYW4uJG1hY19vaWR9PSRtYWM7CisJCQkkdmxhbm1hY3skdmxhbi4kbWFjX29pZH09JHZsYW47CisJCX0KKwkJJG9pZF92YWx1ZXskb2lkLiIuMS4yLiIuJHZsYW59PSRjb3VudDsKKwl9CisKKwlmb3JlYWNoIG15ICR2bWFjX29pZCAoc29ydCB7JGEgY21wICRifSBrZXlzICV2bGFubWFjKXsKKwkJbXkgJG1hYz0kbWFjdmxhbnskdm1hY19vaWR9OworCQlteSAkdmxhbj0kdmxhbm1hY3skdm1hY19vaWR9OworCisJCSNwcmludCAiVk1BQzogJHZtYWNfb2lkICgkdmxhbjokbWFjKVxuIjsKKwkJdW5sZXNzKGRlZmluZWQoJGZpcnN0X3ZtYWNfb2lkKSl7CisJCQkkZmlyc3Rfdm1hY19vaWQ9JHZtYWNfb2lkOworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLjIuIi4kcHJ2X3ZsYW59PSRvaWQuIi4yLjEuIi4kdm1hY19vaWQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjIifT0kb2lkLiIuMi4xLiIuJHZtYWNfb2lkOworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLjEifT0kb2lkLiIuMi4xLiIuJHZtYWNfb2lkOworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLjIifT0kb2lkLiIuMi4yLiIuJHZtYWNfb2lkOworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLjMifT0kb2lkLiIuMi4zLiIuJHZtYWNfb2lkOworCQl9CisKKwkJbXkgJHBvcnQ9JG1hY3N7JG1hY317JGJyaWRnZX07CisJCW15ICRiYXNlcG9ydD0kYmFzZXBvcnRzeyRicmlkZ2V9eyRwb3J0fTsKKwkJbXkgJHN0YXR1cz0kbG9jYWxzeyRtYWN9eyRicmlkZ2V9OworCQlteSAkYWdlPSRhZ2VzeyRtYWN9eyRicmlkZ2V9OworCisJCXByaW50ICJWTEFOICR2bGFuOiAkbWFjIC0+ICRwb3J0OiRiYXNlcG9ydCAoJHN0YXR1cywgJGFnZSlcbiI7IAorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjIuMS4iLiR2bWFjX29pZH09bWFjMmhleCgkbWFjKTsKKwkJJG9pZF90eXBleyRvaWQuIi4yLjEuIi4kdm1hY19vaWR9PUFTTl9PQ1RFVF9TVFI7CisJCWlmKGRlZmluZWQoJHBydl92bWFjX29pZCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLjEuIi4kcHJ2X3ZtYWNfb2lkfT0kb2lkLiIuMi4xLiIuJHZtYWNfb2lkOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMi4yLiIuJHZtYWNfb2lkfT0kYmFzZXBvcnQ7CisJCSRvaWRfdHlwZXskb2lkLiIuMi4yLiIuJHZtYWNfb2lkfT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZtYWNfb2lkKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuMi4iLiRwcnZfdm1hY19vaWR9PSRvaWQuIi4yLjIuIi4kdm1hY19vaWQ7CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4yLjMuIi4kdm1hY19vaWR9PSRzdGF0dXM7CisJCSRvaWRfdHlwZXskb2lkLiIuMi4zLiIuJHZtYWNfb2lkfT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZtYWNfb2lkKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuMy4iLiRwcnZfdm1hY19vaWR9PSRvaWQuIi4yLjMuIi4kdm1hY19vaWQ7CisJCX0KKwkJJHBydl92bWFjX29pZD0kdm1hY19vaWQ7CisJfQorCisJaWYgKCRwcnZfdm1hY19vaWQgYW5kICRmaXJzdF92bWFjX29pZCkgeworCQkkb2lkX25leHR7JG9pZC4iLjIuMS4iLiRwcnZfdm1hY19vaWR9PSRvaWQuIi4yLjIuIi4kZmlyc3Rfdm1hY19vaWQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMi4yLiIuJHBydl92bWFjX29pZH09JG9pZC4iLjIuMy4iLiRmaXJzdF92bWFjX29pZDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4yLjMuIi4kcHJ2X3ZtYWNfb2lkfT0iLjEuMy42LjEuMi4xLjE3LjcuMS40LjEiOworCX0KKworCXVuZGVmICRmaXJzdF92bWFjX29pZDsKKwl1bmRlZiAkcHJ2X3ZtYWNfb2lkOworCisJdW5kZWYgJGZpcnN0X3ZsYW47CisJdW5kZWYgJHBydl92bGFuOworfQorCitzdWIgZG90MXFjdXJyZW50dmxhbnMoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKworCisJbXkgJG9pZD0iLjEuMy42LjEuMi4xLjE3LjcuMS40LjEiOworCSRvaWRfbmV4dHsiLjEuMy42LjEuMi4xLjE3LjcuMS40In09JG9pZDsKKworCSRvaWRfdmFsdWV7JG9pZH09MDsJIyBjYW4ndCBrZWVwIHRyYWNrIG9mIHRoaXMgaW5mbworCSRvaWRfdHlwZXskb2lkfT1BU05fQ09VTlRFUjsKKworCW15ICRjb3VudD0wOworCSRvaWQ9Ii4xLjMuNi4xLjIuMS4xNy43LjEuNC4yIjsKKwlmb3JlYWNoIG15ICR2bGFuIChzb3J0IHskYTw9PiRifSBrZXlzICV2bGFucyl7CisJCSRjb3VudCsrOworCQlteSBAYWxscG9ydHM9KCk7CisJCW15IEB1bnRhZ2dlZHBvcnRzPSgpOworCQlmb3JlYWNoIG15ICRwb3J0IChrZXlzICV7JHZsYW5zeyR2bGFufX0peworCQkJJGJhc2Vwb3J0PSRiYXNlcG9ydHN7JGJyaWRnZX17JHBvcnR9OworCQkJcHVzaCBAYWxscG9ydHMsICRiYXNlcG9ydDsKKwkJCXB1c2ggQHVudGFnZ2VkcG9ydHMsICRiYXNlcG9ydAorCQkJCXVubGVzcygkdGFnZ2VkeyR2bGFufXskcG9ydH0pOworCQl9CisJCSNwcmludCAiQURESU5HOiB2bGFuICR2bGFuIChAYWxscG9ydHMsIEB1bnRhZ2dlZHBvcnRzKVxuIjsKKwkJdW5sZXNzKGRlZmluZWQoJGZpcnN0X3ZsYW4pKXsKKwkJCSRmaXJzdF92bGFuPSR2bGFuOworCQkJJG9pZF9uZXh0eyIuMS4zLjYuMS4yLjEuMTcuNy4xLjQuMSJ9PSRvaWQuIi4xLjAuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkfT0kb2lkLiIuMS4wLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjEifT0kb2lkLiIuMS4wLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjIifT0kb2lkLiIuMi4wLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjMifT0kb2lkLiIuMy4wLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjQifT0kb2lkLiIuNC4wLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjUifT0kb2lkLiIuNS4wLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjYifT0kb2lkLiIuNi4wLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZC4iLjcifT0kb2lkLiIuNy4wLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4xLjAuIi4kdmxhbn09MDsgIyBjYW4ndCBrZWVwIHRyYWNrIG9mIHRoaXMKKwkJJG9pZF90eXBleyRvaWQuIi4xLjAuIi4kdmxhbn09QVNOX1RJTUVUSUNLUzsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4wLiIuJHBydl92bGFufT0kb2lkLiIuMS4wLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4yLjAuIi4kdmxhbn09JHZsYW47CisJCSRvaWRfdHlwZXskb2lkLiIuMi4wLiIuJHZsYW59PUFTTl9VTlNJR05FRDsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4wLiIuJHBydl92bGFufT0kb2lkLiIuMi4wLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4zLjAuIi4kdmxhbn09JHZsYW47IAorCQkkb2lkX3R5cGV7JG9pZC4iLjMuMC4iLiR2bGFufT1BU05fVU5TSUdORUQ7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjMuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjMuMC4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuNC4wLiIuJHZsYW59PWdldHBvcnRsaXN0KEBhbGxwb3J0cyk7CisJCSRvaWRfdHlwZXskb2lkLiIuNC4wLiIuJHZsYW59PUFTTl9PQ1RFVF9TVFI7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjQuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjQuMC4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuNS4wLiIuJHZsYW59PWdldHBvcnRsaXN0KEB1bnRhZ2dlZHBvcnRzKTsKKwkJJG9pZF90eXBleyRvaWQuIi41LjAuIi4kdmxhbn09QVNOX09DVEVUX1NUUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNS4wLiIuJHBydl92bGFufT0kb2lkLiIuNS4wLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi42LjAuIi4kdmxhbn09MTsKKwkJJG9pZF90eXBleyRvaWQuIi42LjAuIi4kdmxhbn09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjYuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjYuMC4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuNy4wLiIuJHZsYW59PTA7CisJCSRvaWRfdHlwZXskb2lkLiIuNy4wLiIuJHZsYW59PUFTTl9USU1FVElDS1M7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjcuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjcuMC4iLiR2bGFuOworCQl9CisJCSRwcnZfdmxhbj0kdmxhbjsKKwl9CisKKwkkb2lkX3ZhbHVleyIuMS4zLjYuMS4yLjEuMTcuNy4xLjEuNCJ9PSRjb3VudDsKKwlpZigkcHJ2X3ZsYW4gYW5kICRmaXJzdF92bGFuKXsKKwkJJG9pZF9uZXh0eyRvaWQuIi4xLjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi4yLjAuIi4kZmlyc3RfdmxhbjsKKwkJJG9pZF9uZXh0eyRvaWQuIi4yLjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi4zLjAuIi4kZmlyc3RfdmxhbjsKKwkJJG9pZF9uZXh0eyRvaWQuIi4zLjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi40LjAuIi4kZmlyc3RfdmxhbjsKKwkJJG9pZF9uZXh0eyRvaWQuIi40LjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi41LjAuIi4kZmlyc3RfdmxhbjsKKwkJJG9pZF9uZXh0eyRvaWQuIi41LjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi42LjAuIi4kZmlyc3RfdmxhbjsKKwkJJG9pZF9uZXh0eyRvaWQuIi42LjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi43LjAuIi4kZmlyc3RfdmxhbjsKKwkJJG9pZF9uZXh0eyRvaWQuIi43LjAuIi4kcHJ2X3ZsYW59PSIuMS4zLjYuMS4yLjEuMTcuNy4xLjQuMyI7CisJfQorCisJdW5kZWYgJHBydl92bGFuOworCXVuZGVmICRmaXJzdF92bGFuOworCit9CisKK3N1YiByZWFkZm9yd2FyZHMoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKwlteSAkZmRiPSRuZXRkaXIuJGJyaWRnZS4iL2JyZm9yd2FyZCI7CisKKwlvcGVuKEZXRCwgJGZkYikgb3IgcmV0dXJuIC0xOworCXdoaWxlKHN5c3JlYWQoRldELCAkZGF0YSwgMjApKXsKKwkJbXkgJG1hYzsKKwkJbXkgKCRiMSwkYjIsJGIzLCRiNCwkYjUsJGI2LCRwb3J0LCRsb2NhbCwkYWdlLCRoaSk9CisJCXVucGFjaygiQzYgQyBDIEwgQyB4MyIsICRkYXRhKTsKKwkJJG1hYz1zcHJpbnRmKCIlLjJ4OiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeCIsCisJCQkJCSRiMSwkYjIsJGIzLCRiNCwkYjUsJGI2KTsKKwkJJGFnZT0kYWdlLzEwMDsKKwkJJG1hY3N7JG1hY317JGJyaWRnZX09JHBvcnQ7CisJCSRhZ2VzeyRtYWN9eyRicmlkZ2V9PSRhZ2U7CisJCSRsb2NhbHN7JG1hY317JGJyaWRnZX09RkRCX1NUQVRVU19MRUFSTkVEOworCQluZXh0IGlmICgkbG9jYWwpOworCQkkbWFjc3skbWFjfXskYnJpZGdlfT0kYnJpZGdlOworCQkkbG9jYWxzeyRtYWN9eyRicmlkZ2V9PUZEQl9TVEFUVVNfU0VMRjsKKwl9CisJY2xvc2UoRldEKTsKK30KKworc3ViIHJlYWRpbmRleGVzKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisKKwlteSAkYnJpZmRpcj0kbmV0ZGlyLiRicmlkZ2UuIi9icmlmLyI7CisKKwlvcGVuZGlyKERJUiwgJGJyaWZkaXIpIG9yIHJldHVybiAtMTsKKwlteSBAaW50ZXJmYWNlcyA9IHJlYWRkaXIoRElSKTsKKwluZXh0IGlmICgkI2ludGVyZmFjZXMgbHQgMik7CisJZm9yZWFjaCBteSAkaWYgKEBpbnRlcmZhY2VzKSB7CisJCW5leHQgaWYgJGlmIGVxICIuIjsKKwkJbmV4dCBpZiAgJGlmIGVxICIuLiI7CisKKwkJbXkgJHBvcnQ9aGV4KHJlYWRmaWxlKCRicmlmZGlyLiRpZi4iL3BvcnRfbm8iLCAwKSk7CisJCW15ICRpbmRleD1yZWFkZmlsZSgkbmV0ZGlyLiRpZi4iL2lmaW5kZXgiLCAwKTsKKworCQkkaW5kZXhlc3skYnJpZGdlfXskcG9ydH09JGluZGV4OworCQkkaW50ZXJmYWNlc3skYnJpZGdlfXskcG9ydH09JGlmOworCX0KKworCSRpbmRleGVzeyRicmlkZ2V9eyRicmlkZ2V9PXJlYWRmaWxlKCRuZXRkaXIuJGJyaWRnZS4iL2lmaW5kZXgiLCAwKTsKKworCWNsb3NlKERJUik7Cit9CisKK3N1YiByZWFkdmxhbnMoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKwlteSAkYnJpZmRpciA9ICRuZXRkaXIuJGJyaWRnZS4iL2JyaWYvIjsKKwlteSAlaWZzOworCisJb3BlbmRpcihESVIsICRicmlmZGlyKSBvciByZXR1cm4gLTE7CisJbXkgQGludGVyZmFjZXMgPSByZWFkZGlyKERJUik7CisJcmV0dXJuIGlmICgkI2ludGVyZmFjZXMgPCAyKTsKKwlmb3JlYWNoIG15ICRpZiAoQGludGVyZmFjZXMpIHsKKwkJbmV4dCBpZiAkaWYgZXEgIi4iOworCQluZXh0IGlmICAkaWYgZXEgIi4uIjsKKwkJJGlmc3skaWZ9PTE7CisJfQorCWNsb3NlKERJUik7CisKKwlvcGVuZGlyKERJUiwgJG5ldGRpcikgb3IgcmV0dXJuIC0xOworCUBpbnRlcmZhY2VzID0gcmVhZGRpcihESVIpOworCXJldHVybiAwIGlmICgkI2ludGVyZmFjZXMgPCAyKTsKKwlmb3JlYWNoIG15ICRpZiAoQGludGVyZmFjZXMpIHsKKwkJbmV4dCBpZiAkaWYgZXEgIi4iOworCQluZXh0IGlmICAkaWYgZXEgIi4uIjsKKwkJbmV4dCB1bmxlc3MoJGlmPX4vXiguKilcLihcZCspJC8pOworCQlteSAkcGlmPSQxOworCQlteSAkdmxhbj0kMjsKKwkJbmV4dCB1bmxlc3MoZGVmaW5lZCgkaWZzeyRwaWZ9KSk7CisJCXRyYWNldmxhbigkdmxhbiwgJGlmLCAkYnJpZGdlKTsKKwl9CisJY2xvc2UoRElSKTsKK30KKworc3ViIHRyYWNldmxhbnsKKwlteSAoJHZsYW4sICRpbnRlcmZhY2UsICRicmlkZ2UpPUBfOworCisJbXkgJGJyaWZkaXI9JG5ldGRpci4kaW50ZXJmYWNlLiIvYnJwb3J0L2JyaWRnZS9icmlmLyI7CisKKwlvcGVuZGlyKERJUiwgJGJyaWZkaXIpIG9yIHJldHVybiAtMTsKKwlteSBAaW50ZXJmYWNlcyA9IHJlYWRkaXIoRElSKTsKKwlyZXR1cm4gaWYgKCQjaW50ZXJmYWNlcyA8IDIpOworCWZvcmVhY2ggbXkgJGlmIChAaW50ZXJmYWNlcykgeworCQluZXh0IGlmICRpZiBlcSAiLiI7CisJCW5leHQgaWYgICRpZiBlcSAiLi4iOworCQlteSAkcG9ydDsKKwkJbXkgJGluZGV4OworCQlpZigkaWY9fi9eKC4qKVwuKFxkKykkLyl7CisJCQlteSAkcGlmPSQxOworCQkJJGJyaWZkaXI9JG5ldGRpci4kcGlmLiIvYnJwb3J0L2JyaWRnZS9icmlmLyI7CisJCQkkcG9ydD1oZXgocmVhZGZpbGUoJGJyaWZkaXIuJHBpZi4iL3BvcnRfbm8iLCAwKSk7CisJCQkkaW5kZXg9cmVhZGZpbGUoJG5ldGRpci4kcGlmLiIvaWZpbmRleCIsIDApOworCQkJIyRpbmRleGVzeyRicmlkZ2V9eyRwb3J0fT0kaW5kZXg7CisJCQkjJGludGVyZmFjZXN7JGJyaWRnZX17JHBvcnR9PSRpZjsKKwkJCSR0YWdnZWR7JHZsYW59eyRwb3J0fT0xOworCQl9ZWxzZXsKKwkJCW15ICRicmlkPXJlYWRmaWxlKCRuZXRkaXIuJGlmLiIvYnJwb3J0L2JyaWRnZS9pZmluZGV4IiwJMCk7CisJCQkkYnJpZmRpcj0kbmV0ZGlyLiRpZi4iL2JycG9ydC9icmlkZ2UvYnJpZi8iOworCQkJJHBvcnQ9aGV4KHJlYWRmaWxlKCRicmlmZGlyLiRpZi4iL3BvcnRfbm8iLCAwKSk7CisJCQkkcG9ydD0kYnJpZCoxMDAwKyRwb3J0OyAjY3JlYXRlIGEgdW5pcXVlIHBvcnQgbnVtYmVyCisJCQkkaW5kZXg9cmVhZGZpbGUoJG5ldGRpci4kaWYuIi9pZmluZGV4IiwgMCk7CisJCQkkaW5kZXhlc3skYnJpZGdlfXskcG9ydH09JGluZGV4OworCQkJJGludGVyZmFjZXN7JGJyaWRnZX17JHBvcnR9PSRpZjsKKwkJCSR0YWdnZWR7JHZsYW59eyRwb3J0fT0wOworCQl9CisJCSR2bGFuc3skdmxhbn17JHBvcnR9PTE7CisJCSNwcmludCAiVkxBTjogJHZsYW4gLT4gJGlmICgkcG9ydCA8LT4gJGluZGV4KVxuIjsKKwl9CisJY2xvc2UoRElSKTsKKworCW15ICRicmlkPXJlYWRmaWxlKCRuZXRkaXIuJGludGVyZmFjZS4iL2JycG9ydC9icmlkZ2UvaWZpbmRleCIsIDApOworCW15ICRmZGI9JG5ldGRpci4kaW50ZXJmYWNlLiIvYnJwb3J0L2JyaWRnZS9icmZvcndhcmQiOworCisJbXkgJHZicmlkZ2U9JGJyaWRnZS4iX3ZsYW4iLiR2bGFuOworCW9wZW4oRldELCAkZmRiKSBvciByZXR1cm4gLTE7CisJd2hpbGUoc3lzcmVhZChGV0QsICRkYXRhLCAyMCkpeworCQlteSAkbWFjOworCQlteSAoJGIxLCRiMiwkYjMsJGI0LCRiNSwkYjYsJHBvcnQsJGxvY2FsLCRhZ2UsJGhpKT0KKwkJdW5wYWNrKCJDNiBDIEMgTCBDIHgzIiwgJGRhdGEpOworCQkgJG1hYz1zcHJpbnRmKCIlLjJ4OiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeCIsCisJCQkJCSRiMSwkYjIsJGIzLCRiNCwkYjUsJGI2KTsKKwkJICRwb3J0PSRicmlkKjEwMDArJHBvcnQgdW5sZXNzKGRlZmluZWQoJGluZGV4ZXN7JGJyaWRnZX17JHBvcnR9KSk7ICAjY3JlYXRlIGEgdW5pcXVlIHBvcnQgbnVtYmVyCisJCSAkYWdlPSRhZ2UvMTAwOworCQkgIyRtYWNzeyRtYWN9eyRicmlkZ2V9PSRwb3J0OworCQkgJG1hY3N7JG1hY317JHZicmlkZ2V9PSRwb3J0OworCQkgIyRhZ2VzeyRtYWN9eyRicmlkZ2V9PSRhZ2U7CisJCSAkYWdlc3skbWFjfXskdmJyaWRnZX09JGFnZTsKKwkJICMkbG9jYWxzeyRtYWN9eyRicmlkZ2V9PUZEQl9TVEFUVVNfTEVBUk5FRDsKKwkJICRsb2NhbHN7JG1hY317JHZicmlkZ2V9PUZEQl9TVEFUVVNfTEVBUk5FRDsKKwkJIG5leHQgaWYgKCRsb2NhbCk7CisJCSAjJG1hY3N7JG1hY317JGJyaWRnZX09JGJyaWRnZTsKKwkJICRtYWNzeyRtYWN9eyR2YnJpZGdlfT0kYnJpZGdlOworCQkgIyRsb2NhbHN7JG1hY317JGJyaWRnZX09RkRCX1NUQVRVU19TRUxGOworCQkgJGxvY2Fsc3skbWFjfXskdmJyaWRnZX09RkRCX1NUQVRVU19TRUxGOworCX0KKwljbG9zZShGV0QpOworfQorCitzdWIgcmVhZGZpbGUoKQoreworCW15ICRmaWxlID0gc2hpZnQ7CisJbXkgJGZsYWdzID0gc2hpZnQ7CisKKwlvcGVuKEZJTEUsICRmaWxlKSBvciBwcmludCAiQ291bGQgbm90IG9wZW4gZmlsZSAkZmlsZSAhXG4iOworCW15ICR2YWx1ZT08RklMRT47CisJY2hvbXAgJHZhbHVlOworCWNsb3NlKEZJTEUpOworCisJaWYgKCRmbGFncyAmIFNUUF9QUk9QX0hFWCkgeworCQlyZXR1cm4gaGV4KCR2YWx1ZSk7CisJfQorCisJcmV0dXJuICR2YWx1ZTsKK30KKworc3ViIGdldHBvcnRsaXN0eworCW15IEBwb3J0cz1AXzsKKwlteSAkcG9ydGxpc3Q9IiI7CisKKwlAcG9ydHM9c29ydCB7JGEgPD0+ICRifSBAcG9ydHM7CisJbXkgJGxhc3Q9MTsKKwlmb3JlYWNoIG15ICRwb3J0IChAcG9ydHMpeworCQlmb3IobXkgJGk9JGxhc3Q7ICRpPCRwb3J0OyAkaSsrKXsKKwkJCSRwb3J0bGlzdD0kcG9ydGxpc3QuIjAiOworCQl9CisJCSRwb3J0bGlzdD0kcG9ydGxpc3QuIjEiOworCQkkbGFzdD0kcG9ydCsxOworCX0KKwlyZXR1cm4gcGFjaygnQionLCRwb3J0bGlzdCk7IAorfQorCitzdWIgbWFjMm9pZHsKKwlteSAoJG1hYyk9QF87CisJbXkgQG9jdGV0cz1zcGxpdCgvOi8sJG1hYyk7CisKKwkkbWFjPSIiOworCWZvcmVhY2ggbXkgJG9jdGV0IChAb2N0ZXRzKXsKKwkJJG1hYz0kbWFjLiIuIi5oZXgoJG9jdGV0KTsKKwl9CisJcmV0dXJuICRtYWM7Cit9CisKK3N1YiBtYWMyaGV4eworICAgICAgICBteSAoJG1hYyk9QF87CisJbXkgQGRlY2ltYWxzOworCW15IEBvY3RldHM9c3BsaXQoLzovLCRtYWMpOworCisJZm9yZWFjaCBteSAkb2N0ZXQgKEBvY3RldHMpeworCQlwdXNoIEBkZWNpbWFscywgaGV4KCRvY3RldCk7CisJfQorCXJldHVybiBwYWNrKCJDQ0NDQ0MiLCBAZGVjaW1hbHMpOworfQorCitzdWIgc2h1dGRvd24geworCSRydW5uaW5nID0gMDsKK30KZGlmZiAtLWdpdCBhL2xvY2FsL3NubXBjaGVjay5kZWYgYi9sb2NhbC9zbm1wY2hlY2suZGVmCmluZGV4IDg0OTk3ZWYuLmFkMzkyZWUgMTAwNzU1Ci0tLSBhL2xvY2FsL3NubXBjaGVjay5kZWYKKysrIGIvbG9jYWwvc25tcGNoZWNrLmRlZgpAQCAtMzIsNyArMzIsNyBAQAogJGFuZGxvZz0wOwogJHNubXBwYXRoPSJCSU5ESVIiOwogJGVyYXNlbGluZT0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHIiOwotJGZpeGl0PTA7ICAjIHRoaXMgc2hvdWxkIGJlIDAgbm90IC0xLCBidXQgaXMgbmVjaXNzYXJ5IHRpbGwgZ2V0YyhTVERJTikgd29ya3MKKyRmaXhpdD0wOyAgIyB0aGlzIHNob3VsZCBiZSAwIG5vdCAtMSwgYnV0IGlzIG5lY2Vzc2FyeSB0aWxsIGdldGMoU1RESU4pIHdvcmtzCiAkcmVzY2FuV2hlbiA9IDMwMDsKICRkaXNwbGF5ID0gJEVOVnsnRElTUExBWSd9OwogJGhpZGRlbiA9IDA7CmRpZmYgLS1naXQgYS9sb2NhbC9zbm1wY29uZiBiL2xvY2FsL3NubXBjb25mCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzN2E1MTM2Li4wMDAwMDAwCi0tLSBhL2xvY2FsL3NubXBjb25mCisrKyAvZGV2L251bGwKQEAgLTEsOTMzICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybCAtdwotCi0jCi0jIEEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBidWlsZGVyIGJhc2VkIG9uIHF1ZXN0aW9ucyBsaXN0ZWQgaW4KLSMgaXRzIG93biBjb25maWd1cmF0aW9uIGZpbGUuICBJdCB3b3VsZCBjZXJ0YWlubHkgYmUgZWFzeSB0byB1c2UgdGhpcwotIyBmb3Igb3RoZXIgKG5vbi1zbm1wKSBwcm9ncmFtcyBhcyB3ZWxsLgotIwotCi11c2UgR2V0b3B0OjpTdGQ7Ci11c2UgVGVybTo6UmVhZExpbmU7Ci11c2UgSU86OkZpbGU7Ci11c2UgRGF0YTo6RHVtcGVyOwotdXNlIEZpbGU6OkNvcHk7Ci1pZiAoJF5PIGVxICdNU1dpbjMyJykgewotICBldmFsICdyZXF1aXJlIFdpbjMyOjpSZWdpc3RyeTsnOwotICBpZiAoJEApIHsKLSAgICBwcmludCAiXG5XYXJuaW5nOiBQZXJsIG1vZHVsZSBXaW4zMjo6UmVnaXN0cnkgaXMgbm90IGluc3RhbGxlZC4gIFRoaXMgbW9kdWxlIGlzXG4iOwotICAgIHByaW50ICIgICAgICAgICByZXF1aXJlZCB0byByZWFkIHRoZSBTTk1QU0hBUkVQQVRIIGFuZCBTTk1QQ09ORlBBVEggdmFsdWVzIGZyb20gXG4iOwotICAgIHByaW50ICIgICAgICAgICB0aGUgcmVnaXN0cnkuICBUbyB1c2Ugc25tcGNvbmYgd2l0aG91dCB0aGUgbW9kdWxlIHlvdSBuZWVkIHRvXG4iOwotICAgIHByaW50ICIgICAgICAgICBkZWZpbmUgU05NUFNIQVJFUEFUSCBhbmQgU05NUENPTkZQQVRIIGFzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuIjsKLSAgICBwcmludCAiICAgICAgICAgb3IgdXNlIHRoZSAtYyBhbmQgLUkgY29tbWFuZCBsaW5lIG9wdGlvbnMuXG4iOwotICB9Ci19Ci0KLSMgZ2xvYmFscwotJXRva2VuaXRlbXM9cXcobGluZSAxIGluZm8gMSBjb21tZW50IDEpOwotJWFycmF5aXRlbXM9cXcocXVlc3Rpb24gMSB2YWxpZGFuc3dlciAxKTsKLQotIyBkZWZhdWx0IGZvbGRlciBmb3Igc25tcGNvbmYtZGF0YQotaWYgKGRlZmluZWQoJm15X2dldGVudigiU05NUFNIQVJFUEFUSCIpKSkgewotICAkb3B0c3snYyd9ID0gJm15X2dldGVudigiU05NUFNIQVJFUEFUSCIpIC4gIi9zbm1wY29uZi1kYXRhIjsKLX0KLWVsc2UgewotICAkb3B0c3snYyd9ID0gIi91c3IvbG9jYWwvc2hhcmUvc25tcC9zbm1wY29uZi1kYXRhIjsKLX0KLSAKLSMgZGVmYXVsdCBjb25maWcgZmlsZSBwYXRoCi1pZiAoZGVmaW5lZCgmbXlfZ2V0ZW52KCJTTk1QQ09ORlBBVEgiKSkpIHsKLSAgJGNvbmZwYXRoID0gJm15X2dldGVudigiU05NUENPTkZQQVRIIik7Ci19Ci1lbHNlIHsKLSAgJGNvbmZwYXRoID0gIi91c3IvbG9jYWwvc2hhcmUvc25tcCI7Ci19Ci0KLSMgaG9tZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotaWYgKGRlZmluZWQoJm15X2dldGVudigiSE9NRSIpKSkgewotICAkaG9tZSA9ICZteV9nZXRlbnYoIkhPTUUiKSAuICIvLnNubXAiOwotfQotZWxzZSB7Ci0gICRob21lID0gIihIT01FIGRpciAtIG4vYSkiOwotfQotCi0jIHJlYWQgdGhlIGFyZ3VtZW50IHN0cmluZwotZ2V0b3B0cygicWFkaGZjOnBpSTpyOlI6ZzpHIiwgXCVvcHRzKTsKLQotIyBkaXNwbGF5IGhlbHAKLWlmICgkb3B0c3snaCd9KSB7Ci0gICAgcHJpbnQgIiQwIFtvcHRpb25zXSBbRklMRVRPQ1JFQVRFLi4uXVxuIjsKLSAgICBwcmludCAib3B0aW9uczpcbiI7Ci0gICAgcHJpbnQgIiAgLWYgICAgICAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcyB3aXRob3V0IHByb21wdGluZ1xuIjsKLSAgICBwcmludCAiICAtaSAgICAgICAgICAgaW5zdGFsbCBjcmVhdGVkIGZpbGVzIGludG8gJGNvbmZwYXRoLlxuIjsKLSAgICBwcmludCAiICAtcCAgICAgICAgICAgaW5zdGFsbCBjcmVhdGVkIGZpbGVzIGludG8gJGhvbWUuXG4iOwotICAgIHByaW50ICIgIC1JIERJUiAgICAgICBpbnN0YWxsIGNyZWF0ZWQgZmlsZXMgaW50byBESVIuXG4iOwotICAgIHByaW50ICIgIC1hICAgICAgICAgICBEb24ndCBhc2sgYW55IHF1ZXN0aW9ucywganVzdCByZWFkIGluIGN1cnJlbnRcbiI7Ci0gICAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICBjdXJyZW50IC5jb25mIGZpbGVzIGFuZCBjb21tZW50IHRoZW1cbiI7Ci0gICAgcHJpbnQgIiAgLXIgYWxsfG5vbmUgIFJlYWQgaW4gYWxsIG9yIG5vbmUgb2YgdGhlIC5jb25mIGZpbGVzIGZvdW5kLlxuIjsKLSAgICBwcmludCAiICAtUiBmaWxlLC4uLiAgUmVhZCBpbiBhIHBhcnRpY3VsYXIgbGlzdCBvZiAuY29uZiBmaWxlcy5cbiI7Ci0gICAgcHJpbnQgIiAgLWcgR1JPVVAgICAgIEFzayBhIHNlcmllcyBvZiBHUk9VUGVkIHF1ZXN0aW9ucy5cbiI7Ci0gICAgcHJpbnQgIiAgLUcgICAgICAgICAgIExpc3Qga25vd24gR1JPVVBzLlxuIjsKLSAgICBwcmludCAiICAtYyBjb25mX2RpciAgdXNlIGFsdGVybmF0ZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeS5cbiI7Ci0gICAgcHJpbnQgIiAgLXEgICAgICAgICAgIHJ1biBtb3JlIHF1aWV0bHkgd2l0aCBsZXNzIGFkdmljZS5cbiI7Ci0gICAgcHJpbnQgIiAgLWQgICAgICAgICAgIHR1cm4gb24gZGVidWdnaW5nIG91dHB1dC5cbiI7Ci0gICAgcHJpbnQgIiAgLUQgICAgICAgICAgIHR1cm4gb24gZGVidWdnaW5nIGR1bXBlciBvdXRwdXQuXG4iOwotICAgIGV4aXQ7Ci19Ci0KLSMgc2V0dXAgdGVybWluYWwgaW50ZXJmYWNlLgotJEVOVnsnUEVSTF9STCd9PSdvPTAnIGlmICghZXhpc3RzKCRFTlZ7J1BFUkxfUkwnfSkpOwotJHRlcm0gPSBuZXcgVGVybTo6UmVhZExpbmUgJ3NubXBjb25mJzsKLQotIyByZWFkIGluIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXQKLXJlYWRfY29uZmlnX2ZpbGVzKCRvcHRzeydjJ30sIFwlZmlsZXR5cGVzKTsKLWRlYnVnKG15X0R1bXBlcihcJWZpbGV0eXBlcykpOwotCi1pZiAoJG9wdHN7J0cnfSkgewotICAgIFByaW50KCJcbktub3duIEdST1VQcyBvZiB0b2tlbnM6XG5cbiIpOwotICAgIGZvcmVhY2ggbXkgJGdyb3VwIChrZXlzKCVncm91cHMpKSB7Ci0JcHJpbnQgIiAgJGdyb3VwXG4iOwotICAgIH0KLSAgICBQcmludCgiXG4iKTsKLSAgICBleGl0OwotfQotCi0jCi0jIEV4cGFuZCB0aGUgc2VhcmNoIHBhdGggaW4gY2FzZSBpdCBjb250YWlucyBtdWx0aXBsZSBkaXJlY3RvcmllcwotIyBzZXBhcmF0ZWQgYnkgOiAoVW5peCkgb3IgOyAoV2luMzIpCi0jCi1teSAkRU5WX1NFUEFSQVRPUiA9ICc6JzsKLWlmICgkXk8gZXEgJ01TV2luMzInKSB7Ci0gICRFTlZfU0VQQVJBVE9SID0gJzsnOwotfQotbXkgQHNlYXJjaHBhdGggPSBzcGxpdCgvJEVOVl9TRVBBUkFUT1IvLCAkY29uZnBhdGgpOwotcHVzaCBAc2VhcmNocGF0aCwgIi91c3IvbG9jYWwvZXRjL3NubXAiOwotcHVzaCBAc2VhcmNocGF0aCwgIi4iOwotcHVzaCBAc2VhcmNocGF0aCwgIiRob21lIjsKLQotIyBSZW1vdmUgdHJhaWxpbmcgLydzIG9yIFwncwotZm9yIChteSAkaT0wOyAkaSA8PSAkI3NlYXJjaHBhdGg7ICRpKyspIHsKLSAgJHNlYXJjaHBhdGhbJGldID1+IC8oLio/KShbXC9cXF0pKiQvOwotICAkc2VhcmNocGF0aFskaV0gPSAkMTsKLX0KLQotIyBEZXRlcm1pbmUgcGVyc2lzdGVudCBkaXJlY3RvcnkuICBPcmRlciBvZiBwcmVmZXJlbmNlOgotIyAKLSMgZmlsZSBpbiBTTk1QX1BFUlNJU1RFTlRfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZQotIyBkaXJlY3RvcnkgZGVmaW5lZCBieSBwZXJzaXN0ZW50RGlyIHNubXAuY29uZiB2YXJpYWJsZQotIyBkaXJlY3RvcnkgaW4gU05NUF9QRVJTSVNURU5UX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZQotIyBkZWZhdWx0IFBFUlNJU1RFTlRfRElSRUNUT1JZIGRpcmVjdG9yeQotbXkgJHBlcnNpc3RlbnREaXIgPSAiIjsKLW15ICRwZXJzaXN0ZW50RmlsZSA9ICIiOwotCi0jIFNOTVBfUEVSU0lTVEVOVF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlCi1pZiAoZGVmaW5lZCgmbXlfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRklMRSIpKSkgewotICAkcGVyc2lzdGVudEZpbGUgPSAmbXlfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRklMRSIpOwotICBkZWJ1ZyAoInBlcnNpc3RlbnQgZmlsZTogU05NUF9QRVJTSVNURU5UX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0XG4iKTsKLX0KLQotIyBzbm1wLmNvbmYgcGVyc2lzdGVudERpcgotaWYgKCEoJHBlcnNpc3RlbnREaXIpICYmICEoJHBlcnNpc3RlbnRGaWxlKSkgewotICBmb3JlYWNoIG15ICRpIChAc2VhcmNocGF0aCkgewotICAgIGRlYnVnICgiU2VhcmNoaW5nIGZpbGUgJGkvc25tcC5jb25mIGZvciBwZXJzaXN0ZW50RGlyXG4iKTsKLSAgICBteSAkdGVtcCA9IGdldF9wZXJzaXN0ZW50RGlyKCIkaS9zbm1wLmNvbmYiKTsKLSAgICBpZiAoJHRlbXApIHsKLSAgICAgIGRlYnVnKCJwZXJzaXN0ZW50IGRpcmVjdG9yeTogc2V0IHRvICR0ZW1wIGluICRpL3NubXAuY29uZlxuIik7Ci0gICAgICAkcGVyc2lzdGVudERpciA9ICR0ZW1wOwotICAgICAgbGFzdDsKLSAgICB9Ci0gIH0KLX0KLQotIyBTTk1QX1BFUlNJU1RFTlRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlCi1pZiAoISgkcGVyc2lzdGVudERpcikgJiYgISgkcGVyc2lzdGVudEZpbGUpKSB7Ci0gIGlmICgmbXlfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRElSIikpIHsKLSAgICAkcGVyc2lzdGVudERpciA9ICZteV9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9ESVIiKTsKLSAgICBkZWJ1ZyAoInBlcnNpc3RlbnQgZGlyZWN0b3J5OiBTTk1QX1BFUlNJU1RFTlRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlIHNldFxuIik7Ci0gIH0KLX0KLQotIyBQRVJTSVNURU5UX0RJUkVDVE9SWSBkZWZhdWx0IHZhcmlhYmxlCi1pZiAoISgkcGVyc2lzdGVudERpcikgJiYgISgkcGVyc2lzdGVudEZpbGUpKSB7Ci0gICRwZXJzaXN0ZW50RGlyID0gIi92YXIvbmV0LXNubXAiOwotICBkZWJ1ZyAoInBlcnNpc3RlbnQgZGlyZWN0b3J5OiBVc2luZyBkZWZhdWx0IHZhbHVlXG4iKTsKLX0KLQotIyBSZWJ1aWxkIHNlYXJjaCBwYXRoIHdpdGhvdXQgcGVyc2lzdGVudCBmb2xkZXIKLSMgTm90ZTogIHBlcnNpc3RlbnQgZmlsZSBoYW5kbGVkIGluIEZpbmQgZXhpc3RpbmcgCi0jIGZpbGVzIHRvIHBvc3NpYmx5IHJlYWQgaW4gc2VjdGlvbgotaWYgKCRwZXJzaXN0ZW50RGlyKSB7Ci0gICMgUmVtb3ZlIHRyYWlsaW5nIC8ncyBvciBcJ3MKLSAgJHBlcnNpc3RlbnREaXIgPX4gLyguKj8pKFtcL1xcXSkqJC87Ci0gICRwZXJzaXN0ZW50RGlyID0gJDE7Ci0gIGRlYnVnICgicGVyc2lzdGVudCBkaXJlY3Rvcnk6ICRwZXJzaXN0ZW50RGlyXG4iKTsKLQotICBteSBAc2VhcmNocGF0aF9vbGQgPSBAc2VhcmNocGF0aDsKLSAgQHNlYXJjaHBhdGggPSAoKTsKLSAgZm9yZWFjaCBteSAkcGF0aF90ZW1wIChAc2VhcmNocGF0aF9vbGQpIHsKLSAgICBpZiAoJHBhdGhfdGVtcCBlcSAkcGVyc2lzdGVudERpcikgewotICAgICAgZGVidWcoInNraXBwaW5nIHBlcnNpc3RlbnQgZGlyZWN0b3J5ICRwYXRoX3RlbXBcbiIpOwotICAgICAgbmV4dDsKLSAgICB9Ci0gICAgcHVzaCBAc2VhcmNocGF0aCwgJHBhdGhfdGVtcDsKLSAgfQotfQotCi0jIFJlc2V0ICRjb25mcGF0aCB0byB0aGUgZmlyc3QgcGF0aAotJGNvbmZwYXRoID0gJHNlYXJjaHBhdGhbMF07Ci0KLSMKLSMgRmluZCBleGlzdGluZyBmaWxlcyB0byBwb3NzaWJseSByZWFkIGluLgotIwotcHVzaCBAc2VhcmNocGF0aCwgJG9wdHN7SX0gaWYgKCRvcHRze0l9KTsKLWZvcmVhY2ggbXkgJGkgKEBzZWFyY2hwYXRoKSB7Ci0gICAgZGVidWcoInNlYXJjaGluZyAkaVxuIik7Ci0gICAgZm9yZWFjaCBteSAkZnQgKGtleXMoJWZpbGV0eXBlcykpIHsKLSAgICAgICAgaWYgKCIkaS8kZnQiIGVxICRwZXJzaXN0ZW50RmlsZSkgewotICAgICAgICAgIGRlYnVnKCJza2lwcGluZyBwZXJzaXN0ZW50IGZpbGUgJGkvJGZ0XG4iKTsKLSAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0JZGVidWcoInNlYXJjaGluZyBmb3IgJGkvJGZ0XG4iKTsKLQkka25vd25maWxlc3siJGkvJGZ0In0gPSAkZnQgaWYgKC1mICIkaS8kZnQiKTsKLQlteSAkbG9jYWxmdCA9ICRmdDsKLQkkbG9jYWxmdCA9fiBzLy5jb25mLy5sb2NhbC5jb25mLzsKLQkka25vd25maWxlc3siJGkvJGxvY2FsZnQifSA9ICRmdCBpZiAoLWYgIiRpLyRsb2NhbGZ0Iik7Ci0gICAgfQotfQotCi0jCi0jIEFzayB0aGUgdXNlciBpZiB0aGV5IHdhbnQgdGhlbSB0byBiZSByZWFkIGluIGFuZCByZWFkIHRoZW0KLSMKLWlmIChrZXlzKCVrbm93bmZpbGVzKSkgewotICAgIG15IEBmaWxlczsKLSAgICBpZiAoZGVmaW5lZCgkb3B0c3sncid9KSkgewotCWlmICgkb3B0c3sncid9IGVxICJhbGwiIHx8ICRvcHRzeydyJ30gZXEgImEiKSB7Ci0JICAgIEBmaWxlcyA9IGtleXMoJWtub3duZmlsZXMpOwotCX0gZWxzaWYgKCRvcHRzeydyJ30gbmUgIm5vbmUiICYmICRvcHRzeydyJ30gbmUgIm4iKSB7Ci0JICAgIHByaW50ICJ1bmtub3duIGFyZ3VtZW50IHRvIC1yOiAkb3B0c3sncid9XG4iOwotCSAgICBleGl0KDEpOwotCX0KLSAgICB9IGVsc2lmKGRlZmluZWQoJG9wdHN7J1InfSkpIHsKLQlAZmlsZXMgPSBzcGxpdCgvXHMqLFxzKi8sJG9wdHN7J1InfSk7Ci0JZm9yZWFjaCBteSAkaSAoQGZpbGVzKSB7Ci0JICAgIG15ICR4ID0gJGk7Ci0JICAgICR4ID1+IHMvLipcLyhbXlwvXSspJC8kMS87Ci0JICAgICRrbm93bmZpbGVzeyRpfSA9ICR4OwotCX0KLQlQcmludCgicmVhZGluZzogIiwgam9pbigiLCIsQGZpbGVzKSwiXG4iKTsKLSAgICB9IGVsc2UgewotCUBmaWxlcyA9IGRpc3BsYXlfbWVudSgtaGVhZCA9PiAiVGhlIGZvbGxvd2luZyBpbnN0YWxsZWQgY29uZmlndXJhdGlvbiBmaWxlcyB3ZXJlIGZvdW5kOlxuIiwKLQkJCSAgICAgIC10YWlsID0+ICJXb3VsZCB5b3UgbGlrZSBtZSB0byByZWFkIHRoZW0gaW4/ICBUaGVpciBjb250ZW50IHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlXG5vdXRwdXQgZmlsZXMgY3JlYXRlZCBieSB0aGlzIHNlc3Npb24uXG5cblZhbGlkIGFuc3dlciBleGFtcGxlczogXCJhbGxcIiwgXCJub25lXCIsXCIzXCIsXCIxLDIsNVwiXG4iLAotCQkJICAgICAgLW11bHRpcGxlID0+IDEsCi0JCQkgICAgICAtcXVlc3Rpb24gPT4gJ1JlYWQgaW4gd2hpY2gnLAotCQkJICAgICAgLWRlZmF1bHR2YWx1ZSA9PiAnYWxsJywKLQkJCSAgICAgIHNvcnQga2V5cygla25vd25maWxlcykpOwotICAgIH0KLSAgICBmb3JlYWNoIG15ICRpIChAZmlsZXMpIHsKLQlkZWJ1ZygicmVhZGluZyAkaVxuIik7Ci0JcmVhZF9jb25maWcoJGksICRrbm93bmZpbGVzeyRpfSk7Ci0gICAgfQotfQotCi1pZiAoJG9wdHN7J2cnfSkgewotICAgIG15IEBncm91cHMgPSBzcGxpdCgvLDpccy8sJG9wdHN7J2cnfSk7Ci0gICAgZm9yZWFjaCBteSAkZ3JvdXAgKEBncm91cHMpIHsKLQlkb19ncm91cCgkZ3JvdXApOwotICAgIH0KLX0gZWxzaWYgKCQjQVJHViA+PSAwKSB7Ci0gICAgIwotICAgICMgbG9vcCB0aHJvdWdoIHJlcXVlc3RlZCBmaWxlcy4KLSAgICAjCi0gICAgZm9yZWFjaCBteSAkaSAoQEFSR1YpIHsKLQlpZiAoIWRlZmluZWQoJGZpbGV0eXBlc3skaX0pKSB7Ci0JICAgIHdhcm4gImludmFsaWQgZmlsZTogJGlcbiI7Ci0JfSBlbHNlIHsKLQkgICAgaWYgKCRvcHRzeydhJ30pIHsKLQkJJGRpZGZpbGV7JGl9ID0gMTsKLQkgICAgfSBlbHNlIHsKLQkJYnVpbGRfZmlsZSgkdGVybSwgJGksICRmaWxldHlwZXN7JGl9KTsKLQkgICAgfQotCX0KLSAgICB9Ci19IGVsc2UgewotICAgICMKLSAgICAjIGFzayB1c2VyIHRvIHNlbGVjdCBmaWxlIHR5cGUgdG8gb3BlcmF0ZSBvbi4KLSAgICAjCi0gICAgd2hpbGUoMSkgewotCW15ICRsaW5lID0gZGlzcGxheV9tZW51KC1oZWFkID0+ICJJIGNhbiBjcmVhdGUgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB5b3UuXG5TZWxlY3QgdGhlIGZpbGUgdHlwZSB5b3Ugd2lzaCB0byBjcmVhdGU6XG4oeW91IGNhbiBjcmVhdGUgbW9yZSB0aGFuIG9uZSBhcyB5b3UgcnVuIHRoaXMgcHJvZ3JhbSlcbiIsCi0JCQkJLXF1ZXN0aW9uID0+ICdTZWxlY3QgRmlsZScsCi0JCQkJLW90aGVyYW5zd2VycyA9PiBbJ3F1aXQnXSwKLQkJCQktbWFwYW5zd2VycyA9PiB7ICdxJyA9PiAncXVpdCcgfSwKLQkJCQlrZXlzKCVmaWxldHlwZXMpKTsKLQlsYXN0IGlmICgkbGluZSBlcSAicXVpdCIpOwotCWRlYnVnKCJmaWxlIHNlbGVjdGVkOiAkbGluZVxuIik7Ci0JYnVpbGRfZmlsZSgkdGVybSwgJGxpbmUsICRmaWxldHlwZXN7JGxpbmV9KTsKLSAgICB9Ci19Ci0KLSMKLSMgV3JpdGUgb3V0IHRoZSByZXN1bHRzIHRvIHRoZSBvdXRwdXQgZmlsZXMuCi0jCi1vdXRwdXRfZmlsZXMoXCVmaWxldHlwZXMsICR0ZXJtKTsKLQotCi0jCi0jIERpc3BsYXkgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgZm9yIHRoZSB1c2VyLgotIwotUHJpbnQoIlxuXG5UaGUgZm9sbG93aW5nIGZpbGVzIHdlcmUgY3JlYXRlZDpcblxuIik7Ci1AZGlkZmlsZXMgPSBrZXlzKCVkaWRmaWxlKTsKLWZvcmVhY2ggbXkgJGkgKEBkaWRmaWxlcykgewotICAgIGlmICgkZGlkZmlsZXskaX0gbmUgIjEiKSB7Ci0JaWYgKCRvcHRzeydpJ30gfHwgJG9wdHN7J0knfSkgewotICAgICAgICAgICRvcHRzeydJJ30gPSAiJGNvbmZwYXRoIiBpZiAoISRvcHRzeydJJ30pOwotCi0gICAgICAgICAgaWYgKCEgKC1kICIkb3B0c3snSSd9IikgJiYgISAobWtkaXIgKCIkb3B0c3snSSd9IiwgMDc1NSkpKSB7Ci0JICAgIHByaW50ICJcbkNvdWxkIG5vdCBjcmVhdGUgJG9wdHN7J0knfSBkaXJlY3Rvcnk6ICQhXG4iOwotCSAgICBwcmludCAoIkZpbGUgJGRpZGZpbGV7JGl9IGxlZnQgaW4gY3VycmVudCBkaXJlY3RvcnlcbiIpOwotCSAgfQotCSAgZWxzZSB7Ci0gICAgICAgICAgICBtb3ZlICgiJG9wdHN7J0knfS8kaSIsICIkb3B0c3snSSd9LyRpLmJhayIpIGlmICgtZiAiJG9wdHN7J0knfS8kaSIpOwotICAgICAgICAgICAgaWYgKG1vdmUgKCIkZGlkZmlsZXskaX0iLCAiJG9wdHN7J0knfSIpKSB7Ci0gICAgICAgICAgICAgIHByaW50KCIgICRkaWRmaWxleyRpfSBpbnN0YWxsZWQgaW4gJG9wdHN7J0knfVxuIik7CSAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICBwcmludCAiXG5Db3VsZCBub3QgbW92ZSBmaWxlICRkaWRmaWxleyRpfSB0byAkb3B0c3snSSd9LyRpOiAkIVxuIjsKLSAgICAgICAgICAgICAgcHJpbnQgKCJGaWxlICRkaWRmaWxleyRpfSBsZWZ0IGluIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0JfSBlbHNpZiAoJG9wdHN7J3AnfSkgewotCSAgaWYgKCEgKC1kICIkaG9tZSIpICYmICEgKG1rZGlyICgiJGhvbWUiLCAwNzU1KSkpIHsKLQkgICAgcHJpbnQgIlxuQ291bGQgbm90IGNyZWF0ZSAkaG9tZSBkaXJlY3Rvcnk6ICQhXG4iOwotCSAgICBwcmludCAoIkZpbGUgJGRpZGZpbGV7JGl9IGxlZnQgaW4gY3VycmVudCBkaXJlY3RvcnlcbiIpOwotCSAgfQotCSAgZWxzZSB7CSAgICAKLQkgICAgbW92ZSAoIiRob21lLyRpIiwgIiRob21lLyRpLmJhayIpIGlmICgtZiAiJGhvbWUvJGkiKTsKLQkgICAgaWYgKG1vdmUgKCIkZGlkZmlsZXskaX0iLCAiJGhvbWUiKSkgewotCSAgICAgIHByaW50KCIgICRkaWRmaWxleyRpfSBpbnN0YWxsZWQgaW4gJGhvbWVcbiIpOwotCSAgICB9Ci0JICAgIGVsc2UgewotCSAgICAgIHByaW50ICJcbkNvdWxkIG5vdCBtb3ZlIGZpbGUgJGRpZGZpbGV7JGl9IHRvICRob21lOiAkIVxuIjsKLQkgICAgICBwcmludCAoIkZpbGUgJGRpZGZpbGV7JGl9IGxlZnQgaW4gY3VycmVudCBkaXJlY3RvcnlcbiIpOwotICAJICAgIH0KLQkgIH0KLSAgCX0gZWxzZSB7Ci0JICAgIFByaW50KCIgICRkaWRmaWxleyRpfSAiLAotCSAgICAoJGkgbmUgJGRpZGZpbGV7JGl9KT8iWyBmcm9tICRpIHNwZWNpZmljYXRpb25zXSI6IiAiLCJcbiIpOwotCSAgICBpZiAoJG9wdHN7J2QnfSkgewotCQlvcGVuKEksJGRpZGZpbGV7JGl9KTsKLQkJZGVidWcoIiAgICAiIC4gam9pbigiICAgICIsPEk+KSAuICJcbiIpOwotCQljbG9zZShJKTsKLQkgICAgfQotCX0KLSAgICB9Ci19Ci0KLWlmICghJG9wdHN7J3AnfSAmJiAhJG9wdHN7J2knfSAmJiAhJG9wdHN7J0knfSkgewotICAgIFByaW50KCJcblRoZXNlIGZpbGVzIHNob3VsZCBiZSBtb3ZlZCB0byAkY29uZnBhdGggaWYgeW91Ci13YW50IHRoZW0gdXNlZCBieSBldmVyeW9uZSBvbiB0aGUgc3lzdGVtLiAgSW4gdGhlIGZ1dHVyZSwgaWYgeW91IGFkZCAKLXRoZSAtaSBvcHRpb24gdG8gdGhlIGNvbW1hbmQgbGluZSBJJ2xsIGNvcHkgdGhlbSB0aGVyZSBhdXRvbWF0aWNhbGx5IGZvciB5b3UuCi0KLU9yLCBpZiB5b3Ugd2FudCB0aGVtIGZvciB5b3VyIHBlcnNvbmFsIHVzZSBvbmx5LCBjb3B5IHRoZW0gdG8KLSRob21lIC4gIEluIHRoZSBmdXR1cmUsIGlmIHlvdSBhZGQgdGhlIC1wIG9wdGlvbiB0byB0aGUKLWNvbW1hbmQgbGluZSBJJ2xsIGNvcHkgdGhlbSB0aGVyZSBhdXRvbWF0aWNhbGx5IGZvciB5b3UuCi0KLSIpOwotfQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRnVuY3Rpb25zCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotc3ViIFByaW50IHsKLSAgICBwcmludCBAXyBpZiAoISRvcHRzeydxJ30pOwotfQotIwotIyBoYW5kbGUgYSBncm91cCBvZiBxdWVzdGlvbnMKLSMKLXN1YiBnZXRfeW5fbWF5YmUgewotICAgIG15ICRxdWVzdGlvbiA9IHNoaWZ0OwotICAgIG15ICRhbnMgPSAieSI7Ci0gICAgaWYgKCRxdWVzdGlvbiBuZSAiIikgewotCSRhbnMgPSBnZXRfYW5zd2VyKCR0ZXJtLCAkcXVlc3Rpb24sCi0JCQkgIHZhbGlkX2Fuc3dlcnMocXcoeWVzIHkgbm8gbikpLCAneScpOwotICAgIH0KLSAgICByZXR1cm4gKCRhbnMgPX4gL155Lyk/MTowOwotfQotCi1zdWIgZG9fZ3JvdXAgewotICAgIG15ICRncm91cCA9IHNoaWZ0OwotICAgIGRpZSAibm8gc3VjaCBncm91cCAkZ3JvdXBcbiIgaWYgKCEkZ3JvdXBzeyRncm91cH0pOwotICAgIGZvcmVhY2ggbXkgJHRva2VuIChAeyRncm91cHN7JGdyb3VwfX0pIHsKLQlpZiAoJHRva2VuLT5bMF0gZXEgIm1lc3NhZ2UiKSB7Ci0JICAgIFByaW50ICgiJHRva2VuLT5bMV0gJHRva2VuLT5bMl1cbiIpOwotCX0gZWxzaWYgKCR0b2tlbi0+WzBdIGVxICJzdWJncm91cCIpIHsKLQkgICAgZG9fZ3JvdXAoJHRva2VuLT5bMV0pIGlmIChnZXRfeW5fbWF5YmUoJHRva2VuLT5bMl0pKTsKLQl9IGVsc2lmIChkZWZpbmVkKCR0b2tlbm1hcHskdG9rZW4tPlsxXX0pKSB7Ci0JICAgIGlmIChnZXRfeW5fbWF5YmUoJHRva2VuLT5bMl0pKSB7Ci0JCWRvIHsKLQkJICAgIGRvX2xpbmUoJHRva2VuLT5bMV0sICR0b2tlbm1hcHskdG9rZW4tPlsxXX0pOwotCQl9IHVudGlsICgkdG9rZW4tPlswXSBuZSAibXVsdGlwbGUiIHx8Ci0JCQkgZ2V0X2Fuc3dlcigkdGVybSwgIkRvIGFub3RoZXIgJHRva2VuLT5bMV0gbGluZT8iLAotCQkJCSAgICB2YWxpZF9hbnN3ZXJzKHF3KHllcyB5IG5vIG4pKSwgJ3knKQotCQkJID1+IC9uLyk7Ci0JICAgIH0KLQl9IGVsc2lmIChkZWZpbmVkKCRmaWxldHlwZXN7JHRva2VuLT5bMV19KSkgewotCSAgICAkZGlkZmlsZXskdG9rZW4tPlsxXX0gPSAxOwotCX0gZWxzZSB7Ci0JICAgIGRpZSAiaW52YWxpZCBtZW1iZXIgJHRva2VuLT5bMV0gb2YgZ3JvdXAgJGdyb3VwXG4iOwotCX0KLSAgICB9Ci19Ci0KLSMKLSMgYnVpbGQgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZmlsZSBieSBvcGVyYXRpbmcgb24gc2VjdGlvbnMKLSMKLXN1YiBidWlsZF9maWxlIHsKLSAgICBteSAoJHRlcm0sICRmaWxlbmFtZSwgJGZpbGVjb25mKSA9IEBfOwotICAgICRkaWRmaWxleyRmaWxlbmFtZX0gPSAxOwotICAgIG15IChAbGluZXMpOwotICAgIHdoaWxlKDEpIHsKLQlteSAkbGluZSA9IGRpc3BsYXlfbWVudSgtaGVhZCA9PiAiVGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gd2hpY2ggY2FuIGJlIHB1dCBpbnRvICRmaWxlbmFtZSBpcyBkaXZpZGVkXG5pbnRvIHNlY3Rpb25zLiAgU2VsZWN0IGEgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciAkZmlsZW5hbWVcbnRoYXQgeW91IHdpc2ggdG8gY3JlYXRlOlxuIiwKLQkJCQktb3RoZXJhbnN3ZXJzID0+IFsnZmluaXNoZWQnXSwKLQkJCQktbWFwYW5zd2VycyA9PiB7ICdmJyA9PiAnZmluaXNoZWQnIH0sCi0JCQkJLXF1ZXN0aW9uID0+ICJTZWxlY3Qgc2VjdGlvbiIsCi0JCQkJLW51bWVyaWMgPT4gMSwKLQkJCQltYXAgeyAkXy0+eyd0aXRsZSd9WzBdIH0gQCRmaWxlY29uZik7Ci0KLQlyZXR1cm4gQGxpbmVzIGlmICgkbGluZSBlcSAiZmluaXNoZWQiKTsKLQlkb19zZWN0aW9uKCRmaWxlY29uZi0+WyRsaW5lLTFdKTsKLSAgICB9Ci19Ci0KLSMKLSMgY29uZmlndXJlIGEgcGFydGljdWxhciBzZWN0aW9uIGJ5IG9wZXJhdGluZyBvbiB0b2tlbiB0eXBlcwotIwotc3ViIGRvX3NlY3Rpb24gewotICAgIG15ICRjb25mc2VjdCA9IHNoaWZ0OwotICAgIG15IEBsaW5lczsKLSAgICB3aGlsZSgxKSB7Ci0JUHJpbnQgKCJcblNlY3Rpb246ICRjb25mc2VjdC0+eyd0aXRsZSd9WzBdXG4iKTsKLQlQcmludCAoIkRlc2NyaXB0aW9uOlxuIik7Ci0JUHJpbnQgKCIgICIsIGpvaW4oIlxuICAiLEB7JGNvbmZzZWN0LT57J2Rlc2NyaXB0aW9uJ319KSwiXG4iKTsKLQlteSAkbGluZSA9Ci0JICAgIGRpc3BsYXlfbWVudSgtaGVhZCA9PiAiU2VsZWN0IGZyb206XG4iLAotCQkJIC1vdGhlcmFuc3dlcnMgPT4gWydmaW5pc2hlZCcsJ2xpc3QnXSwKLQkJCSAtbWFwYW5zd2VycyA9PiB7ICdmJyA9PiAnZmluaXNoZWQnLAotCQkJCQkgICdsJyA9PiAnbGlzdCcgfSwKLQkJCSAtcXVlc3Rpb24gPT4gJ1NlbGVjdCBzZWN0aW9uJywKLQkJCSAtZGVzY3JpcHRpb25zID0+IFttYXAgeyAkY29uZnNlY3QtPnskX317aW5mb31bMF0gfSAKLQkJCQkJICAgQHskY29uZnNlY3QtPnsndGhldG9rZW5zJ319XSwKLQkJCSBAeyRjb25mc2VjdC0+eyd0aGV0b2tlbnMnfX0pOwotCXJldHVybiBAbGluZXMgaWYgKCRsaW5lIGVxICJmaW5pc2hlZCIpOwotCWlmICgkbGluZSBlcSAibGlzdCIpIHsKLQkgICAgcHJpbnQgIkxpbmVzIGRlZmluZWQgZm9yIHNlY3Rpb24gXCIkY29uZnNlY3QtPnt0aXRsZX1bMF1cIiBzbyBmYXI6XG4iOwotCSAgICBmb3JlYWNoIG15ICRpIChAeyRjb25mc2VjdC0+eyd0aGV0b2tlbnMnfX0pIHsKLQkJaWYgKCQjeyRjb25mc2VjdC0+eyRpfXsncmVzdWx0cyd9fSA+PSAwKSB7Ci0JCSAgICBwcmludCAiICAiLGpvaW4oIlxuICAiLEB7JGNvbmZzZWN0LT57JGl9eydyZXN1bHRzJ319KSwiXG4iOwotCQl9Ci0JICAgIH0KLQkgICAgbmV4dDsKLQl9Ci0JZG9fbGluZSgkbGluZSwgJGNvbmZzZWN0LT57JGxpbmV9KTsKLSAgICB9Ci0gICAgcmV0dXJuOwotfQotCi0jCi0jIEFzayBhbGwgdGhlIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBsaW5lIHR5cGUKLSMKLXN1YiBkb19saW5lIHsKLSAgICBteSAkdG9rZW4gPSBzaGlmdDsKLSAgICBteSAkY29uZmxpbmUgPSBzaGlmdDsKLSAgICBteSAoQGFuc3dlcnMsICRjb3VudGVyLCAkaSk7Ci0jICAgIGRlYnVnKG15X0R1bXBlcigkY29uZmxpbmUpKTsKLSAgICBQcmludCAoIlxuQ29uZmlndXJpbmc6ICR0b2tlblxuIik7Ci0gICAgUHJpbnQgKCJEZXNjcmlwdGlvbjpcbiAgIixqb2luKCJcbiAgICAiLEB7JGNvbmZsaW5lLT57J2luZm8nfX0pLCJcblxuIik7Ci0gICAgZm9yKCRpPTA7ICRpIDw9ICQjeyRjb25mbGluZS0+eydxdWVzdGlvbid9fTsgJGkrKykgewotCWlmIChkZWZpbmVkKCRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXSkgJiYKLQkgICAgJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldIG5lICIiKSB7Ci0JICAgIG15ICRxID0gJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldOwotCSAgICAkcSA9fiBzL1wkKFxkKykvJGFuc3dlcnNbJDFdL2c7Ci0JICAgIGRlYnVnKCJhZnRlcjogJHRlcm0sICRxLCAiLCRjb25mbGluZS0+eyd2YWxpZGFuc3dlcid9WyRpXSwiXG4iKTsKLQkgICAgJGFuc3dlcnNbJGldID0gZ2V0X2Fuc3dlcigkdGVybSwgJHEsCi0JCQkJICAgICAgJGNvbmZsaW5lLT57J3ZhbGlkYW5zd2VyJ31bJGldKTsKLQkgICAgJGFuc3dlcnNbJGldID1+IHMvXCIvXFxcIi9nOwotCSAgICAkYW5zd2Vyc1skaV0gPSAnIicgLiAkYW5zd2Vyc1skaV0gLiAnIicgaWYgKCRhbnN3ZXJzWyRpXSA9fiAvXHMvKTsKLQl9Ci0gICAgfQotICAgIGlmICgkI3skY29uZmxpbmUtPnsnbGluZSd9fSA9PSAtMSkgewotCW15ICgkaSwkbGluZSk7Ci0JZm9yKCRpPTA7ICRpIDw9ICQjeyRjb25mbGluZS0+eydxdWVzdGlvbid9fTsgJGkrKykgewotCSAgICBuZXh0IGlmICghZGVmaW5lZCgkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV0pIHx8Ci0JCSAgICAgJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldIGVxICIiKTsKLQkgICAgJGxpbmUgLj0gIiBcJCIgLiAkaTsKLQl9Ci0JcHVzaCBAeyRjb25mbGluZS0+eydsaW5lJ319LCAkbGluZTsKLSAgICB9Ci0KLSAgICBmb3JlYWNoIG15ICRsaW5lIChAeyRjb25mbGluZS0+eydsaW5lJ319KSB7Ci0JbXkgJGZpbmlzaGVkID0gJGxpbmU7Ci0JZGVidWcoInByZWxpbmU6ICRmaW5pc2hlZFxuIik7Ci0JZGVidWcoImFuc3dlcnM6ICIsbXlfRHVtcGVyKFxAYW5zd2VycykpOwotCSRmaW5pc2hlZCA9fiBzL1wkKFxkKykvJGFuc3dlcnNbJDFdL2c7Ci0JaWYgKCRsaW5lID1+IHMvXmV2YWxccysvLykgewotCSAgICBkZWJ1ZygiZXZhbDogJGZpbmlzaGVkXG4iKTsKLQkgICAgJGZpbmlzaGVkID0gZXZhbCAkZmluaXNoZWQ7Ci0JICAgIGRlYnVnKCJldmFsIHJlc3VsdHM6ICRmaW5pc2hlZFxuIik7Ci0JfQotCSRmaW5pc2hlZCA9ICR0b2tlbiAuICIgIiAuICRmaW5pc2hlZDsKLQlQcmludCAoIlxuRmluaXNoZWQgT3V0cHV0OiAkZmluaXNoZWRcbiIpOwotCXB1c2ggQHskY29uZmxpbmUtPnsncmVzdWx0cyd9fSwkZmluaXNoZWQ7Ci0gICAgfQotfQotCi0jCi0jIHJlYWQgYWxsIHNldHMgb2YgY29uZmlnIGZpbGVzIGluIHRoZSB2YXJpb3VzIHN1YmRpcmVjdG9yaWVzLgotIwotc3ViIHJlYWRfY29uZmlnX2ZpbGVzIHsKLSAgICBteSAkcmVhZGRpciA9IHNoaWZ0OwotICAgIG15ICRmaWxldHlwZXMgPSBzaGlmdDsKLSAgICBvcGVuZGlyKERILCAkcmVhZGRpcikgfHwgZGllICJubyBzdWNoIGRpcmVjdG9yeSAkcmVhZGRpciwgZGlkIHlvdSBydW4gbWFrZSBpbnN0YWxsP1xuIjsKLSAgICBteSAkZGlyOwotICAgIG15ICRjb25maWdmaWxlbmFtZT0ic25tcGNvbmYtY29uZmlnIjsKLQotICAgIHdoaWxlKGRlZmluZWQoJGRpciA9IHJlYWRkaXIoREgpKSkgewotCW5leHQgaWYgKCRkaXIgPX4gL15cLi8pOwotCW5leHQgaWYgKCRkaXIgPX4gL0NWUy8pOwotCWRlYnVnKCJkaXIgZW50cnk6ICRkaXJcbiIpOwotCWlmICgtZCAiJHJlYWRkaXIvJGRpciIgJiYgLWYgIiRyZWFkZGlyLyRkaXIvJGNvbmZpZ2ZpbGVuYW1lIikgewotCi0JICAgIG15ICRjb25mZmlsZTsKLQotCSAgICAjIHJlYWQgdGhlIHRvcCBsZXZlbCBjb25maWd1cmF0aW9uIGluZm9yYW1hdGlvbiBhYm91dCB0aGUgZGlyZWNvdHJ5LgotCSAgICBvcGVuKEksICIkcmVhZGRpci8kZGlyLyRjb25maWdmaWxlbmFtZSIpOwotCSAgICB3aGlsZSg8ST4pIHsKLQkJJGNvbmZmaWxlID0gJDEgaWYgKC9mb3Jjb25mZmlsZTogKC4qKS8pOwotCSAgICB9Ci0JICAgIGNsb3NlKEkpOwotCi0JICAgICMgbm8gUkVBRE1FIGluZm9ybWF0aW5vLgotCSAgICBpZiAoJGNvbmZmaWxlIGVxICIiKSB7Ci0JCXByaW50IFNUREVSUiAiV2FybmluZzogTm8gJ2ZvcmNvbmZmaWxlJyBpbmZvcm1hdGlvbiBpbiAkcmVhZGRpci8kZGlyLyRjb25maWdmaWxlbmFtZVxuIjsKLQkJbmV4dDsKLQkgICAgfQotCi0JICAgICMgcmVhZCBhbGwgdGhlIGRhYXQgaW4gdGhlIGRpcmVjdG9yeQotCSAgICAkZmlsZXR5cGVzLT57JGNvbmZmaWxlfSA9IHJlYWRfY29uZmlnX2l0ZW1zKCIkcmVhZGRpci8kZGlyIiwgJGNvbmZmaWxlKTsKLQl9IGVsc2UgewotCSAgICAjIG5vIFJFQURNRSBpbmZvcm1hdGluby4KLQkgICAgcHJpbnQgU1RERVJSICJXYXJuaW5nOiBObyAkY29uZmlnZmlsZW5hbWUgZmlsZSBmb3VuZCBpbiAkcmVhZGRpci8kZGlyXG4iOwotCX0KLSAgICB9Ci0gICAgY2xvc2VkaXIgREg7Ci19Ci0KLSMKLSMgcmVhZCBlYWNoIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBhIGRpcmVjdG9yeQotIwotc3ViIHJlYWRfY29uZmlnX2l0ZW1zIHsKLSAgICBteSAkaXRlbWRpciA9IHNoaWZ0OwotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0gICAgb3BlbmRpcihJVEVNUywgJGl0ZW1kaXIpOwotICAgIG15ICRmaWxlOwotICAgIG15IEByZXN1bHRzOwotICAgIHdoaWxlKGRlZmluZWQoJGZpbGUgPSByZWFkZGlyKElURU1TKSkpIHsKLQluZXh0IGlmICgkZmlsZSA9fiAvfiQvKTsKLQluZXh0IGlmICgkZmlsZSA9fiAvXnNubXBjb25mLWNvbmZpZyQvKTsKLQlpZiAoLWYgIiRpdGVtZGlyLyRmaWxlIikgewotCSAgICBteSAkcmVzID0gcmVhZF9jb25maWdfaXRlbSgiJGl0ZW1kaXIvJGZpbGUiLCAkdHlwZSk7Ci0JICAgIGlmIChzY2FsYXIoa2V5cyglJHJlcykpID4gMCkgewotCQlwdXNoIEByZXN1bHRzLCAkcmVzOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBjbG9zZWRpcihJVEVNUyk7Ci0gICAgcmV0dXJuIFxAcmVzdWx0czsKLX0KLQotIwotIyBtYXJrIGEgbGlzdCBvZiB0b2tlbnMgYXMgYSBzcGVjaWFsICJncm91cCIKLSMKLXN1YiByZWFkX2NvbmZpZ19ncm91cCB7Ci0gICAgbXkgKCRmaCwgJGdyb3VwLCAkdHlwZSkgPSBAXzsKLSAgICBteSAkbGluZTsKLSAgICBkZWJ1ZygiaGFuZGxpbmcgZ3JvdXAgJGdyb3VwXG4iKTsKLSAgICBwdXNoIChAeyRncm91cHN7JGdyb3VwfX0sWydmaWxldHlwZScsICR0eXBlXSk7Ci0gICAgd2hpbGUoJGxpbmUgPSA8JGZoPikgewotCWNob21wKCRsaW5lKTsKLQluZXh0IGlmICgkbGluZSA9fiAvXlxzKiQvKTsKLQluZXh0IGlmICgkbGluZSA9fiAvXlwjLyk7Ci0JcmV0dXJuICRsaW5lIGlmICgkbGluZSAhfiAvXihzaW5nbGV8bXVsdGlwbGV8bWVzc2FnZXxmaWxldHlwZXxzdWJncm91cCkvKTsKLQlteSAoJHR5cGUsICR0b2tlbiwgJHJlc3QpID0gKCRsaW5lID1+IC9eKFx3KylccysoW15cc10rKVxzKiguKikvKTsKLQlkZWJ1ZyAoInJlYWRpbmcgZ3JvdXAgJGdyb3VwIDogJHR5cGUgLT4gJHRva2VuIC0+ICRyZXN0XG4iKTsKLQlwdXNoIChAeyRncm91cHN7JGdyb3VwfX0sIFskdHlwZSwgJHRva2VuLCAkcmVzdF0pOwotICAgIH0KLSAgICByZXR1cm47Ci19Ci0JCi0KLSMKLSMgUGFyc2Ugb25lIGZpbGUKLSMKLXN1YiByZWFkX2NvbmZpZ19pdGVtIHsKLSAgICBteSAkaXRlbWZpbGUgPSBzaGlmdDsKLSAgICBteSAkaXRlbWNvdW50OwotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0gICAgbXkgJGZoID0gbmV3IElPOjpGaWxlKCRpdGVtZmlsZSk7Ci0gICAgcmV0dXJuIGlmICghZGVmaW5lZCgkZmgpKTsKLSAgICBteSAoJXJlc3VsdHMsICRjdXJ0b2tlbik7Ci0gICAgZGVidWcoInRva2VuaXRlbXM6ICAiLCBteV9EdW1wZXIoXCV0b2tlbml0ZW1zKSk7Ci0gIHRvcHdoaWxlOgotICAgIHdoaWxlKCRsaW5lID0gPCRmaD4pIHsKLQluZXh0IGlmICgkbGluZSA9fiAvXlxzKlwjLyk7Ci0JbXkgKCR0b2tlbiwgJHJlc3QpID0gKCRsaW5lID1+IC9eKFx3KylccysoLiopLyk7Ci0JbmV4dCBpZiAoIWRlZmluZWQoJHRva2VuKSB8fCAhZGVmaW5lZCgkcmVzdCkpOwotCXdoaWxlICgkdG9rZW4gZXEgJ2dyb3VwJykgewotCSAgICAjIGhhbmRsZSBzcGVjaWFsIGdyb3VwIGxpc3QKLQkgICAgbXkgJG5leHQgPSByZWFkX2NvbmZpZ19ncm91cCgkZmgsICRyZXN0LCR0eXBlKTsKLQkgICAgaWYgKCRuZXh0KSB7Ci0JCSgkdG9rZW4sICRyZXN0KSA9ICgkbmV4dCA9fiAvXihcdyspXHMrKC4qKS8pOwotCSAgICB9IGVsc2UgewotCQluZXh0IHRvcHdoaWxlOwotCSAgICB9Ci0JfQotCWRlYnVnKCJ0b2tlbjogJHRva2VuID0+ICRyZXN0XG4iKTsKLQlpZiAoJHRva2VuIGVxICdzdGVhbCcpIHsKLQkgICAgZm9yZWFjaCBteSAkc3RlYWxmcm9tIChrZXlzKCV7JHJlc3VsdHN7JHJlc3R9fSkpIHsKLQkJaWYgKCFkZWZpbmVkKCRyZXN1bHRzeyRjdXJ0b2tlbn17JHN0ZWFsZnJvbX0pKSB7Ci0JCSAgICBAeyRyZXN1bHRzeyRjdXJ0b2tlbn17JHN0ZWFsZnJvbX19ID0gCi0JCQlAeyRyZXN1bHRzeyRyZXN0fXskc3RlYWxmcm9tfX07Ci0JCX0KLQkgICAgfQotCX0gZWxzaWYgKGRlZmluZWQoJHRva2VuaXRlbXN7JHRva2VufSkpIHsKLQkgICAgaWYgKCFkZWZpbmVkKCRjdXJ0b2tlbikpIHsKLQkJZGllICJlcnJvciBpbiBjb25maWd1cmF0aW9uIGZpbGUgJGl0ZW1maWxlLCBubyB0b2tlbiBzZXRcbiI7Ci0JICAgIH0KLQkgICAgJHJlc3QgPX4gcy9eXCMvLzsKLQkgICAgcHVzaCBAeyRyZXN1bHRzeyRjdXJ0b2tlbn17JHRva2VufX0sJHJlc3Q7Ci0JfSBlbHNpZiAoZGVmaW5lZCgkYXJyYXlpdGVtc3skdG9rZW59KSkgewotCSAgICBpZiAoIWRlZmluZWQoJGN1cnRva2VuKSkgewotCQlkaWUgImVycm9yIGluIGNvbmZpZ3VyYXRpb24gZmlsZSAkaXRlbWZpbGUsIG5vIHRva2VuIHNldFxuIjsKLQkgICAgfQotCSAgICBteSAoJG51bSwgJG5ld3Jlc3QpID0gKCRyZXN0ID1+IC9eKFxkKylccysoLiopLyk7Ci0JICAgIGlmICghZGVmaW5lZCgkbnVtKSB8fCAhZGVmaW5lZCgkbmV3cmVzdCkpIHsKLQkJd2FybiAiaW52YWxpZCBjb25maWcgbGluZTogJGxpbmVcbiI7Ci0JICAgIH0gZWxzZSB7Ci0JCSRyZXN1bHRzeyRjdXJ0b2tlbn17JHRva2VufVskbnVtXSA9ICRuZXdyZXN0OwotCSAgICB9Ci0JfSBlbHNpZiAoJHRva2VuID1+IC9edG9rZW5ccyokLykgewotCSAgICAkcmVzdCA9IGxjKCRyZXN0KTsKLQkgICAgJGN1cnRva2VuID0gJHJlc3Q7Ci0JICAgIGlmICghIGV4aXN0cyAkcmVzdWx0c3skY3VydG9rZW59eydkZWZpbmVkJ30pIHsKLQkJcHVzaCBAeyRyZXN1bHRzeyd0aGV0b2tlbnMnfX0sICRjdXJ0b2tlbjsKLQkJJHJlc3VsdHN7JGN1cnRva2VufXsnZGVmaW5lZCd9ID0gMTsKLQkgICAgfQotCSAgICAkdG9rZW5tYXB7JGN1cnRva2VufSA9ICRyZXN1bHRzeyRjdXJ0b2tlbn07Ci0JICAgIGRlYnVnKCJjdXJyZW50IHRva2VuIHNldCB0byAkdG9rZW5cbiIpOwotCX0gZWxzZSB7Ci0JICAgIHB1c2ggQHskcmVzdWx0c3skdG9rZW59fSwkcmVzdDsKLQl9Ci0gICAgfQotICAgIHJldHVybiBcJXJlc3VsdHM7Ci19Ci0KLXN1YiBkZWJ1ZyB7Ci0gICAgcHJpbnQgQF8gaWYgKCRvcHRzeydkJ30pOwotfQotCi1zdWIgb3V0cHV0X2ZpbGVzIHsKLSAgICBteSAkZmlsZXR5cGVzID0gc2hpZnQ7Ci0gICAgbXkgJHRlcm0gPSBzaGlmdDsKLSAgICBmb3JlYWNoIG15ICRmdCAoa2V5cyglJGZpbGV0eXBlcykpIHsKLQluZXh0IGlmICghJGRpZGZpbGV7JGZ0fSk7Ci0JbXkgJG91dHB1dGYgPSAkZnQ7Ci0JaWYgKC1mICRvdXRwdXRmICYmICEkb3B0c3snZid9KSB7Ci0JICAgIHByaW50ICJcbkVycm9yOiBBbiAkb3V0cHV0ZiBmaWxlIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgZGlyZWN0b3J5LlxuXG4iOwotCSAgICBteSAkYW5zID0gZ2V0X2Fuc3dlcigkdGVybSwiJ292ZXJ3cml0ZScsICdza2lwJywgJ3JlbmFtZScgb3IgJ2FwcGVuZCc/ICIsdmFsaWRfYW5zd2VycyhxdyhvIG92ZXJ3cml0ZSByIHJlbmFtZSBzIHNraXAgYSBhcHBlbmQpKSk7Ci0JICAgIG5leHQgaWYgKCRhbnMgPX4gL14oc3xza2lwKSQvaSk7Ci0JICAgIGlmICgkYW5zID1+IC9eKGF8YXBwZW5kKS8pIHsKLQkJJG91dHB1dGYgPSAiPiRvdXRwdXRmIjsKLQkgICAgfSBlbHNpZiAoJGFucyA9fiAvXihyfHJlbmFtZSkkL2kpIHsKLQkJIyBkZWZhdWx0IHRvIHJlbmFtZSBmb3IgZXJyb3IgY29uZGl0aW9ucwotCQkkb3V0cHV0ZiA9ICR0ZXJtLT5yZWFkbGluZSgiU2F2ZSB0byB3aGF0IG5ldyBmaWxlIG5hbWUgaW5zdGVhZCAob3IgJ3NraXAnKT8gIik7Ci0JICAgIH0KLQl9Ci0JJGRpZGZpbGV7JGZ0fSA9ICRvdXRwdXRmOwotCW9wZW4oTywiPiRvdXRwdXRmIikgfHwgd2FybiAiY291bGRuJ3Qgd3JpdGUgdG8gJG91dHB1dGZcbiI7Ci0JcHJpbnQgTyAiIyIgeCA3NSwiXG4iOwotCXByaW50IE8gIiNcbiMgJGZ0XG4iOwotCXByaW50IE8gIiNcbiMgICAtIGNyZWF0ZWQgYnkgdGhlIHNubXBjb25mIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbVxuI1xuIjsKLQlmb3JlYWNoIG15ICRzZWN0IChAeyRmaWxldHlwZXMtPnskZnR9fSkgewotCSAgICBteSAkc2VjdGhlbHAgPSAwOwotCSAgICBmb3JlYWNoIG15ICR0b2tlbiAoQHskc2VjdC0+eyd0aGV0b2tlbnMnfX0pIHsKLQkJaWYgKCQjeyRzZWN0LT57JHRva2VufXsncmVzdWx0cyd9fSA+PSAwKSB7Ci0JCSAgICBpZiAoJHNlY3RoZWxwKysgPT0gMCkgewotCQkJcHJpbnQgTyAiIyIgeCA3NSwiXG4jIFNFQ1RJT046ICIsCi0JCQlqb2luKCJcbiMgICAgICAgICAgIiwgQHskc2VjdC0+e3RpdGxlfX0pLCAiXG4jXG4iOwotCQkJcHJpbnQgTyAiIyAgICIsIGpvaW4oIlxuIyAgICIsQHskc2VjdC0+e2Rlc2NyaXB0aW9ufX0pLAotCQkJIlxuIjsKLQkJICAgIH0KLQkJICAgIHByaW50IE8gIlxuIyAkdG9rZW46ICIsCi0JCSAgICBqb2luKCJcbiMgICAiLEB7JHNlY3QtPnskdG9rZW59e2luZm99fSksICJcblxuIjsKLQkJICAgIGZvcmVhY2ggbXkgJHJlc3VsdCAoQHskc2VjdC0+eyR0b2tlbn17J3Jlc3VsdHMnfX0pIHsKLQkJCXByaW50IE8gIiRyZXN1bHRcbiI7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCSAgICBwcmludCBPICJcblxuXG4iOwotCX0KLQlpZiAoJCN7JHVua25vd257JGZ0fX0gPiAtMSkgewotCSAgICBwcmludCBPICIjXG4jIFVua25vd24gZGlyZWN0aXZlcyByZWFkIGluIGZyb20gb3RoZXIgZmlsZXMgYnkgc25tcGNvbmZcbiNcbiI7Ci0JICAgIGZvcmVhY2ggbXkgJHVua25vd24gKEB7JHVua25vd257JGZ0fX0pIHsKLQkJcHJpbnQgTyAkdW5rbm93biwiXG4iOwotCSAgICB9Ci0JfQotCWNsb3NlKE8pOwotICAgIH0KLX0KLQotc3ViIGdldF9hbnN3ZXIgewotICAgIG15ICgkdGVybSwgJHF1ZXN0aW9uLCAkcmVnZXhwLCAkZGVmYXVsdHZhbCkgPSBAXzsKLSAgICAkcXVlc3Rpb24gLj0gIiAoZGVmYXVsdCA9ICRkZWZhdWx0dmFsKSIgaWYgKGRlZmluZWQoJGRlZmF1bHR2YWwpICYmICRkZWZhdWx0dmFsIG5lICIiKTsKLSAgICAkcXVlc3Rpb24gLj0gIjogIjsKLSAgICBteSAkYW5zID0gJHRlcm0tPnJlYWRsaW5lKCRxdWVzdGlvbik7Ci0gICAgcmV0dXJuICRkZWZhdWx0dmFsIGlmICgkYW5zIGVxICIiICYmIGRlZmluZWQoJGRlZmF1bHR2YWwpICYmIAotCQkJICAgJGRlZmF1bHR2YWwgbmUgIiIpOwotICAgIHdoaWxlICghKCFkZWZpbmVkKCRyZWdleHApIHx8Ci0JICAgICAkcmVnZXhwIGVxICIiIHx8Ci0JICAgICAkYW5zID1+IC8kcmVnZXhwLykpIHsKLQlwcmludCAiaW52YWxpZCBhbnN3ZXIhICBJdCBtdXN0IG1hdGNoIHRoaXMgcmVndWxhciBleHByZXNzaW9uOiAkcmVnZXhwXG4iOwotCSRhbnMgPSAkdGVybS0+cmVhZGxpbmUoJHF1ZXN0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuICRkZWZhdWx0dmFsIGlmICgkYW5zIGVxICIiICYmIGRlZmluZWQoJGRlZmF1bHR2YWwpICYmIAotCQkJICAgJGRlZmF1bHR2YWwgbmUgIiIpOwotICAgIHJldHVybiAkYW5zOwotfQotICAgIAotc3ViIHZhbGlkX2Fuc3dlcnMgewotICAgIG15IEBsaXN0OwotICAgIGZvcmVhY2ggJGkgKEBfKSB7Ci0JcHVzaCBAbGlzdCwgJGkgaWYgKCRpKTsKLSAgICB9Ci0gICAgcmV0dXJuICJeKCIgLiBqb2luKCJ8IixAbGlzdCkgLiAiKVwkIjsKLX0KLQotc3ViIHJlYWRfY29uZmlnIHsKLSAgICBteSAkZmlsZSA9IHNoaWZ0OwotICAgIG15ICRmaWxldHlwZSA9IHNoaWZ0OwotICAgIHJldHVybiBpZiAoIWRlZmluZWQoJGZpbGV0eXBlc3skZmlsZXR5cGV9KSk7Ci0gICAgaWYgKCEgLWYgJGZpbGUpIHsKLQl3YXJuICIkZmlsZSBkb2VzIG5vdCBleGlzdFxuIjsKLQlyZXR1cm47Ci0gICAgfQotICAgIG9wZW4oSSwkZmlsZSk7Ci0gICAgd2hpbGUoPEk+KSB7Ci0JbmV4dCBpZiAoL15ccypcIy8pOwotCW5leHQgaWYgKC9eXHMqJC8pOwotCWNob21wOwotCW15ICgkdG9rZW4sICRyZXN0KSA9IC9eXHMqKFx3KylccysoLiopLzsKLQkkdG9rZW4gPSBsYygkdG9rZW4pOwotCW5leHQgaWYgKGRlZmluZWQoJGFsbGxpbmVzeyRffSkpOyAjIGRyb3AgZHVwbGljYXRlIGxpbmVzCi0JaWYgKGRlZmluZWQoJHRva2VubWFweyR0b2tlbn0pKSB7Ci0JICAgIHB1c2ggQHskdG9rZW5tYXB7JHRva2VufXsncmVzdWx0cyd9fSwkXzsKLQl9IGVsc2UgewotCSAgICBwdXNoIEB7JHVua25vd257JGZpbGV0eXBlfX0sJF87Ci0JfQotCSRhbGxsaW5lc3skX30rKzsKLSAgICB9Ci0gICAgY2xvc2UoSSk7Ci19Ci0KLXN1YiBkaXNwbGF5X21lbnUgewotICAgIG15ICVjb25maWc7Ci0KLSAgICB3aGlsZSAoJCNfID4gLTEgJiYgJF9bMF0gPX4gL14tLykgewotCW15ICRrZXkgPSBzaGlmdDsKLQkkY29uZmlneyRrZXl9ID0gc2hpZnQ7Ci0gICAgfQotCi0gICAgbXkgJGNvdW50PTE7Ci0gICAgcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKLSAgICBpZiAoJGNvbmZpZ3snLWhlYWQnfSkgewotCXByaW50ICRjb25maWd7Jy1oZWFkJ307Ci0JcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKLSAgICB9Ci0gICAgbXkgQGFuc3dlcnMgPSBAXzsKLSAgICBteSBAbGlzdDsKLSAgICBpZiAoZGVmaW5lZCgkY29uZmlneyctZGVzY3JpcHRpb25zJ30pICYmIAotCXJlZigkY29uZmlneyctZGVzY3JpcHRpb25zJ30pIGVxICJBUlJBWSIpIHsKLQlAbGlzdCA9IEB7JGNvbmZpZ3snLWRlc2NyaXB0aW9ucyd9fQotICAgIH0gZWxzZSB7Ci0JQGxpc3QgPSBAXzsKLSAgICB9Ci0gICAgZm9yZWFjaCBteSAkaSAoQGxpc3QpIHsKLQlwcmludGYgIiAgJTJkOiAgJGlcbiIsICRjb3VudCsrIGlmICgkaSk7Ci0gICAgfQotICAgIHByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7Ci0gICAgaWYgKGRlZmluZWQoJGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9KSkgewotCWlmIChyZWYoJGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9KSBlcSAnQVJSQVknKSB7Ci0JICAgIHByaW50ICJPdGhlciBvcHRpb25zOiAiLCBqb2luKCIsICIsCi0JCQkJCSAgQHskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319KSwgIlxuIjsKLQkgICAgcHVzaCBAYW5zd2VycywgQHskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319OwotCSAgICBwdXNoIEBhbnN3ZXJzLCBrZXlzKCV7JGNvbmZpZ3snLW1hcGFuc3dlcnMnfX0pOwotCX0gZWxzZSB7Ci0JICAgIG15ICRtYXhsZW4gPSAwOwotCSAgICBwdXNoIEBhbnN3ZXJzLGtleXMoJXskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319KTsKLQkgICAgZm9yZWFjaCBteSAkaSAoa2V5cygleyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX0pKSB7Ci0JCSRtYXhsZW4gPSBsZW5ndGgoJGkpIGlmIChsZW5ndGgoJGkpID4gJG1heGxlbik7Ci0JICAgIH0KLQkgICAgZm9yZWFjaCBteSAkaSAoa2V5cygleyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX0pKSB7Ci0JCXByaW50ZigiICAlLSIgLiAkbWF4bGVuIC4gInM6ICVzXG4iLCAkaSwgCi0JCSAgICAgICAkY29uZmlneyctb3RoZXJhbnN3ZXJzJ317JGl9KTsKLQkgICAgfQotCX0KLQlwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOwotICAgIH0KLSAgICBpZiAoJGNvbmZpZ3snLXRhaWwnfSkgewotCXByaW50ICRjb25maWd7Jy10YWlsJ307Ci0JcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVmaW5lZCgkY29uZmlneyctcXVlc3Rpb24nfSkpIHsKLQl3aGlsZSgxKSB7Ci0JICAgIG15ICRudW1leHByOwotCSAgICBpZiAoJGNvbmZpZ3snLW11bHRpcGxlJ30pIHsKLQkJJG51bWV4cHIgPSAnW1xkXHMsXSt8YWxsfGF8bm9uZXxuJzsKLQkgICAgfSBlbHNlIHsKLQkJJG51bWV4cHIgPSAnXGQrJzsKLQkgICAgfQotCSAgICBwdXNoIEBhbnN3ZXJzLCIiIGlmICgkY29uZmlneyctZGVmYXVsdHZhbHVlJ30pOwotCSAgICAkYW5zID0gZ2V0X2Fuc3dlcigkdGVybSwgJGNvbmZpZ3snLXF1ZXN0aW9uJ30sCi0JCQkgICAgICB2YWxpZF9hbnN3ZXJzKCRudW1leHByLEBhbnN3ZXJzKSwKLQkJCSAgICAgICRjb25maWd7Jy1kZWZhdWx0dmFsdWUnfSk7Ci0JICAgIGlmICgkY29uZmlneyctbWFwYW5zd2Vycyd9eyRhbnN9KSB7Ci0JCSRhbnMgPSAkY29uZmlneyctbWFwYW5zd2Vycyd9eyRhbnN9OwotCSAgICB9Ci0KLQkgICAgaWYgKCRhbnMgPX4gL14kbnVtZXhwciQvKSB7Ci0JCWlmICgkY29uZmlneyctbXVsdGlwbGUnfSkgewotCQkgICAgbXkgQGxpc3QgPSBzcGxpdCgvXHMqLFxzKi8sJGFucyk7Ci0JCSAgICBteSBAcmV0OwotCQkgICAgJGNvdW50ID0gMDsKLQkJICAgIGZvcmVhY2ggbXkgJGkgKEBfKSB7Ci0JCQkkY291bnQrKzsKLQkJCWlmICgkYW5zIGVxICJhbGwiIHx8ICRhbnMgZXEgImEiIAotCQkJICAgIHx8IGdyZXAoL14kY291bnQkLyxAbGlzdCkpIHsKLQkJCSAgICBwdXNoIEByZXQsICRpOwotCQkJfQotCQkgICAgfQotCQkgICAgcmV0dXJuIEByZXQ7Ci0JCX0gZWxzZSB7Ci0JCSAgICBpZiAoJGFucyA8PSAwIHx8ICRhbnMgPiAkI18rMSkgewotCQkJd2FybiAiaW52YWxpZCBzZWxlY3Rpb246ICRhbnMgW211c3QgYmUgMS0iIC4KLQkJCSAgICAoJCNfKzEpIC4gIl1cbiI7Ci0JCSAgICB9IGVsc2UgewotCQkJcmV0dXJuICRhbnMgaWYgKCRjb25maWd7Jy1udW1lcmljJ30pOwotCQkJJGNvdW50ID0gMDsKLQkJCWZvcmVhY2ggbXkgJGkgKEBfKSB7Ci0JCQkgICAgJGNvdW50Kys7Ci0JCQkgICAgaWYgKCRhbnMgZXEgJGNvdW50KSB7Ci0JCQkJcmV0dXJuICRpOwotCQkJICAgIH0KLQkJCX0KLQkJICAgIH0KLQkJfQotCSAgICB9IGVsc2UgewotCQlyZXR1cm4gJGFuczsKLQkgICAgfQotCX0KLSAgICB9Ci19Ci0KLXN1YiBteV9EdW1wZXIgewotICAgIGlmICgkb3B0c3snRCd9KSB7Ci0JcmV0dXJuIER1bXBlcihAXyk7Ci0gICAgfSBlbHNlIHsKLQlyZXR1cm4gIlxuIjsKLSAgICB9Ci19Ci0KLXN1YiBnZXRfcGVyc2lzdGVudERpciB7Ci0gICAgbXkgJGZpbGUgPSBzaGlmdDsKLSAgICBteSAkcmVzdWx0ID0gMDsKLSAgICBpZiAoISAtZiAkZmlsZSkgewotCXJldHVybiAwOwotICAgIH0KLSAgICBvcGVuKEksJGZpbGUpOwotICAgIHdoaWxlKDxJPikgewotCW5leHQgaWYgKC9eXHMqXCMvKTsKLQluZXh0IGlmICgvXlxzKiQvKTsKLQljaG9tcDsKLQlteSAoJHRva2VuLCAkcmVzdCkgPSAvXlxzKihcdyspXHMrKC4qKS87Ci0gICAgICAgIGlmIChsYygkdG9rZW4pIGVxICJwZXJzaXN0ZW50ZGlyIikgewotICAgICAgICAgICRyZXN1bHQgPSAkcmVzdDsKLSAgICAgICAgfQotICAgICAgICBuZXh0OwotICAgIH0KLSAgICBjbG9zZShJKTsKLSAgICByZXR1cm4gJHJlc3VsdDsKLX0KLQotIyBVc2FnZTogICAmd2luMzJfcmVnX3JlYWQoImtleSIsICJ2YWx1ZSIpCi0jIEV4YW1wbGU6ICZ3aW4zMl9yZWdfcmVhZCgiU09GVFdBUkVcXE5ldC1TTk1QIiwiU05NUFNIQVJFUEFUSCIpOwotIyBSZXR1cm5zOiBWYWx1ZSBpZiBmb3VuZCBpbiBIS0NVIG9yIEhDTE0uICBPdGhlcndpc2UgYW4gZW1wdHkgc3RyaW5nLgotc3ViIHdpbjMyX3JlZ19yZWFkIHsKLSAgbXkgJHN1Yl9rZXkgPSBzaGlmdDsKLSAgbXkgJHZhbHVlID0gc2hpZnQ7Ci0KLSAgcmVxdWlyZSBXaW4zMjo6UmVnaXN0cnk7Ci0gICAKLSAgbXkgKCRoa2V5LCAla2V5X3ZhbHVlcywgJHRlbXAsICRub193YXJuKTsKLSAKLSAgIyBUcnkgSEtDVSBmaXJzdAotICAkbm9fd2FybiA9ICRIS0VZX0NVUlJFTlRfVVNFUjsKLSAgaWYgKCRIS0VZX0NVUlJFTlRfVVNFUi0+T3Blbigkc3ViX2tleSwgJGhrZXkpKQotICB7Ci0gICAgJGhrZXktPkdldFZhbHVlcyhcJWtleV92YWx1ZXMpOyAgIAotICAgIGZvcmVhY2ggJHRlbXAgKHNvcnQga2V5cyAla2V5X3ZhbHVlcykgewotICAgICAgaWYgKCR0ZW1wIGVxICR2YWx1ZSkgewotICAgICAgICByZXR1cm4gJGtleV92YWx1ZXN7JHRlbXB9WzJdOwotICAgICAgfQotICAgIH0KLSAgICAkaGtleS0+Q2xvc2UoKTsgCi0gIH0KLQotICAjIFRyeSBIS0xNIHNlY29uZAotICAkbm9fd2FybiA9ICRIS0VZX0xPQ0FMX01BQ0hJTkU7Ci0gIGlmICgkSEtFWV9MT0NBTF9NQUNISU5FLT5PcGVuKCRzdWJfa2V5LCAkaGtleSkpCi0gIHsKLSAgICAkaGtleS0+R2V0VmFsdWVzKFwla2V5X3ZhbHVlcyk7Ci0gICAgZm9yZWFjaCAkdGVtcCAoc29ydCBrZXlzICVrZXlfdmFsdWVzKSB7Ci0gICAgICBpZiAoJHRlbXAgZXEgJHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAka2V5X3ZhbHVlc3skdGVtcH1bMl07Ci0gICAgICB9Ci0gICAgfQotICAgICRoa2V5LT5DbG9zZSgpOyAKLSAgfQotICByZXR1cm4gIiI7Ci19Ci0KLSMgVXNhZ2U6ICAgJm15X2dldGVudigia2V5IikKLSMgRXhhbXBsZTogJm15X2dldGVudigiU05NUFNIQVJFUEFUSCIpOwotIyBSZXR1cm5zOiBVbml4OiAgRW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgKHVuZGVmIGlmIG5vdCBkZWZpbmVkKQotIyAgICAgICAgICBXaW4zMjogSEtDVVxTb2Z0d2FyZVxOZXQtU05NUFwoa2V5KSBvcgotIyAgICAgICAgICBXaW4zMjogSEtMTVxTb2Z0d2FyZVxOZXQtU05NUFwoa2V5KSBvcgotIyAgICAgICAgICBXaW4zMjogRW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgKHVuZGVmIGlmIG5vdCBkZWZpbmVkKQotc3ViIG15X2dldGVudiB7Ci0gIG15ICRrZXkgPSBzaGlmdDsKLSAgCi0gICMgVW5peAotICBpZiAoJF5PIG5lICdNU1dpbjMyJykgewotICAgIHJldHVybiAkRU5WeyRrZXl9OwotICB9Ci0gICMgV2luZG93cwotICBlbHNlIHsKLSAgICBteSAkdGVtcCA9ICZ3aW4zMl9yZWdfcmVhZCgiU09GVFdBUkVcXE5ldC1TTk1QIiwiJGtleSIpOwotICAgIGlmICgkdGVtcCBuZSAiIikgewotICAgICAgcmV0dXJuICR0ZW1wOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHJldHVybiAkRU5WeyRrZXl9OwotICAgIH0KLSAgfQotfQotCmRpZmYgLS1naXQgYS9sb2NhbC9zbm1wY29uZi5pbiBiL2xvY2FsL3NubXBjb25mLmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmZjgwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9zbm1wY29uZi5pbgpAQCAtMCwwICsxLDkyOSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKKyMKKyMgQSBzaW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGJ1aWxkZXIgYmFzZWQgb24gcXVlc3Rpb25zIGxpc3RlZCBpbgorIyBpdHMgb3duIGNvbmZpZ3VyYXRpb24gZmlsZS4gIEl0IHdvdWxkIGNlcnRhaW5seSBiZSBlYXN5IHRvIHVzZSB0aGlzCisjIGZvciBvdGhlciAobm9uLXNubXApIHByb2dyYW1zIGFzIHdlbGwuCisjCisKK3VzZSBHZXRvcHQ6OlN0ZDsKK3VzZSBUZXJtOjpSZWFkTGluZTsKK3VzZSBJTzo6RmlsZTsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2UgRmlsZTo6Q29weTsKK2lmICgkXk8gZXEgJ01TV2luMzInKSB7CisgIGV2YWwgJ3JlcXVpcmUgV2luMzI6OlJlZ2lzdHJ5Oyc7CisgIGlmICgkQCkgeworICAgIHByaW50ICJcbldhcm5pbmc6IFBlcmwgbW9kdWxlIFdpbjMyOjpSZWdpc3RyeSBpcyBub3QgaW5zdGFsbGVkLiAgVGhpcyBtb2R1bGUgaXNcbiI7CisgICAgcHJpbnQgIiAgICAgICAgIHJlcXVpcmVkIHRvIHJlYWQgdGhlIFNOTVBTSEFSRVBBVEggYW5kIFNOTVBDT05GUEFUSCB2YWx1ZXMgZnJvbSBcbiI7CisgICAgcHJpbnQgIiAgICAgICAgIHRoZSByZWdpc3RyeS4gIFRvIHVzZSBzbm1wY29uZiB3aXRob3V0IHRoZSBtb2R1bGUgeW91IG5lZWQgdG9cbiI7CisgICAgcHJpbnQgIiAgICAgICAgIGRlZmluZSBTTk1QU0hBUkVQQVRIIGFuZCBTTk1QQ09ORlBBVEggYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4iOworICAgIHByaW50ICIgICAgICAgICBvciB1c2UgdGhlIC1jIGFuZCAtSSBjb21tYW5kIGxpbmUgb3B0aW9ucy5cbiI7CisgIH0KK30KKworIyBnbG9iYWxzCisldG9rZW5pdGVtcz1xdyhsaW5lIDEgaW5mbyAxIGNvbW1lbnQgMSk7CislYXJyYXlpdGVtcz1xdyhxdWVzdGlvbiAxIHZhbGlkYW5zd2VyIDEpOworCisjIGRlZmF1bHQgZm9sZGVyIGZvciBzbm1wY29uZi1kYXRhCitpZiAoZGVmaW5lZCgmbXlfZ2V0ZW52KCJTTk1QU0hBUkVQQVRIIikpKSB7CisgICRvcHRzeydjJ30gPSAmbXlfZ2V0ZW52KCJTTk1QU0hBUkVQQVRIIikgLiAiL3NubXBjb25mLWRhdGEiOworfQorZWxzZSB7CisgICRvcHRzeydjJ30gPSAiL3Vzci9sb2NhbC9zaGFyZS9zbm1wL3NubXBjb25mLWRhdGEiOworfQorIAorIyBkZWZhdWx0IGNvbmZpZyBmaWxlIHBhdGgKK2lmIChkZWZpbmVkKCZteV9nZXRlbnYoIlNOTVBDT05GUEFUSCIpKSkgeworICAkY29uZnBhdGggPSAmbXlfZ2V0ZW52KCJTTk1QQ09ORlBBVEgiKTsKK30KK2Vsc2UgeworICAkY29uZnBhdGggPSAiL3Vzci9sb2NhbC9zaGFyZS9zbm1wIjsKK30KKworIyBob21lIGVudmlyb25tZW50IHZhcmlhYmxlCitpZiAoZGVmaW5lZCgmbXlfZ2V0ZW52KCJIT01FIikpKSB7CisgICRob21lID0gJm15X2dldGVudigiSE9NRSIpIC4gIi8uc25tcCI7Cit9CitlbHNlIHsKKyAgJGhvbWUgPSAiKEhPTUUgZGlyIC0gbi9hKSI7Cit9CisKKyMgcmVhZCB0aGUgYXJndW1lbnQgc3RyaW5nCitnZXRvcHRzKCJxYWRoZmM6cGlJOnI6UjpnOkciLCBcJW9wdHMpOworCisjIGRpc3BsYXkgaGVscAoraWYgKCRvcHRzeydoJ30pIHsKKyAgICBwcmludCAiJDAgW29wdGlvbnNdIFtGSUxFVE9DUkVBVEUuLi5dXG4iOworICAgIHByaW50ICJvcHRpb25zOlxuIjsKKyAgICBwcmludCAiICAtZiAgICAgICAgICAgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzIHdpdGhvdXQgcHJvbXB0aW5nXG4iOworICAgIHByaW50ICIgIC1pICAgICAgICAgICBpbnN0YWxsIGNyZWF0ZWQgZmlsZXMgaW50byAkY29uZnBhdGguXG4iOworICAgIHByaW50ICIgIC1wICAgICAgICAgICBpbnN0YWxsIGNyZWF0ZWQgZmlsZXMgaW50byAkaG9tZS5cbiI7CisgICAgcHJpbnQgIiAgLUkgRElSICAgICAgIGluc3RhbGwgY3JlYXRlZCBmaWxlcyBpbnRvIERJUi5cbiI7CisgICAgcHJpbnQgIiAgLWEgICAgICAgICAgIERvbid0IGFzayBhbnkgcXVlc3Rpb25zLCBqdXN0IHJlYWQgaW4gY3VycmVudFxuIjsKKyAgICBwcmludCAiICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgLmNvbmYgZmlsZXMgYW5kIGNvbW1lbnQgdGhlbVxuIjsKKyAgICBwcmludCAiICAtciBhbGx8bm9uZSAgUmVhZCBpbiBhbGwgb3Igbm9uZSBvZiB0aGUgLmNvbmYgZmlsZXMgZm91bmQuXG4iOworICAgIHByaW50ICIgIC1SIGZpbGUsLi4uICBSZWFkIGluIGEgcGFydGljdWxhciBsaXN0IG9mIC5jb25mIGZpbGVzLlxuIjsKKyAgICBwcmludCAiICAtZyBHUk9VUCAgICAgQXNrIGEgc2VyaWVzIG9mIEdST1VQZWQgcXVlc3Rpb25zLlxuIjsKKyAgICBwcmludCAiICAtRyAgICAgICAgICAgTGlzdCBrbm93biBHUk9VUHMuXG4iOworICAgIHByaW50ICIgIC1jIGNvbmZfZGlyICB1c2UgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LlxuIjsKKyAgICBwcmludCAiICAtcSAgICAgICAgICAgcnVuIG1vcmUgcXVpZXRseSB3aXRoIGxlc3MgYWR2aWNlLlxuIjsKKyAgICBwcmludCAiICAtZCAgICAgICAgICAgdHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0LlxuIjsKKyAgICBwcmludCAiICAtRCAgICAgICAgICAgdHVybiBvbiBkZWJ1Z2dpbmcgZHVtcGVyIG91dHB1dC5cbiI7CisgICAgZXhpdDsKK30KKworIyBzZXR1cCB0ZXJtaW5hbCBpbnRlcmZhY2UuCiskRU5WeydQRVJMX1JMJ309J289MCcgaWYgKCFleGlzdHMoJEVOVnsnUEVSTF9STCd9KSk7CiskdGVybSA9IG5ldyBUZXJtOjpSZWFkTGluZSAnc25tcGNvbmYnOworCisjIHJlYWQgaW4gY29uZmlndXJhdGlvbiBmaWxlIHNldAorcmVhZF9jb25maWdfZmlsZXMoJG9wdHN7J2MnfSwgXCVmaWxldHlwZXMpOworZGVidWcobXlfRHVtcGVyKFwlZmlsZXR5cGVzKSk7CisKK2lmICgkb3B0c3snRyd9KSB7CisgICAgUHJpbnQoIlxuS25vd24gR1JPVVBzIG9mIHRva2VuczpcblxuIik7CisgICAgZm9yZWFjaCBteSAkZ3JvdXAgKGtleXMoJWdyb3VwcykpIHsKKwlwcmludCAiICAkZ3JvdXBcbiI7CisgICAgfQorICAgIFByaW50KCJcbiIpOworICAgIGV4aXQ7Cit9CisKKyMKKyMgRXhwYW5kIHRoZSBzZWFyY2ggcGF0aCBpbiBjYXNlIGl0IGNvbnRhaW5zIG11bHRpcGxlIGRpcmVjdG9yaWVzLgorIworbXkgJEVOVl9TRVBBUkFUT1IgPSAnQEVOVl9TRVBBUkFUT1JAJzsKK215IEBzZWFyY2hwYXRoID0gc3BsaXQoLyRFTlZfU0VQQVJBVE9SLywgJGNvbmZwYXRoKTsKK3B1c2ggQHNlYXJjaHBhdGgsICIvdXNyL2xvY2FsL2V0Yy9zbm1wIjsKK3B1c2ggQHNlYXJjaHBhdGgsICIuIjsKK3B1c2ggQHNlYXJjaHBhdGgsICIkaG9tZSI7CisKKyMgUmVtb3ZlIHRyYWlsaW5nIC8ncyBvciBcJ3MKK2ZvciAobXkgJGk9MDsgJGkgPD0gJCNzZWFyY2hwYXRoOyAkaSsrKSB7CisgICRzZWFyY2hwYXRoWyRpXSA9fiAvKC4qPykoW1wvXFxdKSokLzsKKyAgJHNlYXJjaHBhdGhbJGldID0gJDE7Cit9CisKKyMgRGV0ZXJtaW5lIHBlcnNpc3RlbnQgZGlyZWN0b3J5LiAgT3JkZXIgb2YgcHJlZmVyZW5jZToKKyMgCisjIGZpbGUgaW4gU05NUF9QRVJTSVNURU5UX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgZGlyZWN0b3J5IGRlZmluZWQgYnkgcGVyc2lzdGVudERpciBzbm1wLmNvbmYgdmFyaWFibGUKKyMgZGlyZWN0b3J5IGluIFNOTVBfUEVSU0lTVEVOVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgZGVmYXVsdCBQRVJTSVNURU5UX0RJUkVDVE9SWSBkaXJlY3RvcnkKK215ICRwZXJzaXN0ZW50RGlyID0gIiI7CitteSAkcGVyc2lzdGVudEZpbGUgPSAiIjsKKworIyBTTk1QX1BFUlNJU1RFTlRfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZQoraWYgKGRlZmluZWQoJm15X2dldGVudigiU05NUF9QRVJTSVNURU5UX0ZJTEUiKSkpIHsKKyAgJHBlcnNpc3RlbnRGaWxlID0gJm15X2dldGVudigiU05NUF9QRVJTSVNURU5UX0ZJTEUiKTsKKyAgZGVidWcgKCJwZXJzaXN0ZW50IGZpbGU6IFNOTVBfUEVSU0lTVEVOVF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlIHNldFxuIik7Cit9CisKKyMgc25tcC5jb25mIHBlcnNpc3RlbnREaXIKK2lmICghKCRwZXJzaXN0ZW50RGlyKSAmJiAhKCRwZXJzaXN0ZW50RmlsZSkpIHsKKyAgZm9yZWFjaCBteSAkaSAoQHNlYXJjaHBhdGgpIHsKKyAgICBkZWJ1ZyAoIlNlYXJjaGluZyBmaWxlICRpL3NubXAuY29uZiBmb3IgcGVyc2lzdGVudERpclxuIik7CisgICAgbXkgJHRlbXAgPSBnZXRfcGVyc2lzdGVudERpcigiJGkvc25tcC5jb25mIik7CisgICAgaWYgKCR0ZW1wKSB7CisgICAgICBkZWJ1ZygicGVyc2lzdGVudCBkaXJlY3Rvcnk6IHNldCB0byAkdGVtcCBpbiAkaS9zbm1wLmNvbmZcbiIpOworICAgICAgJHBlcnNpc3RlbnREaXIgPSAkdGVtcDsKKyAgICAgIGxhc3Q7CisgICAgfQorICB9Cit9CisKKyMgU05NUF9QRVJTSVNURU5UX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZQoraWYgKCEoJHBlcnNpc3RlbnREaXIpICYmICEoJHBlcnNpc3RlbnRGaWxlKSkgeworICBpZiAoJm15X2dldGVudigiU05NUF9QRVJTSVNURU5UX0RJUiIpKSB7CisgICAgJHBlcnNpc3RlbnREaXIgPSAmbXlfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRElSIik7CisgICAgZGVidWcgKCJwZXJzaXN0ZW50IGRpcmVjdG9yeTogU05NUF9QRVJTSVNURU5UX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXRcbiIpOworICB9Cit9CisKKyMgUEVSU0lTVEVOVF9ESVJFQ1RPUlkgZGVmYXVsdCB2YXJpYWJsZQoraWYgKCEoJHBlcnNpc3RlbnREaXIpICYmICEoJHBlcnNpc3RlbnRGaWxlKSkgeworICAkcGVyc2lzdGVudERpciA9ICIvdmFyL25ldC1zbm1wIjsKKyAgZGVidWcgKCJwZXJzaXN0ZW50IGRpcmVjdG9yeTogVXNpbmcgZGVmYXVsdCB2YWx1ZVxuIik7Cit9CisKKyMgUmVidWlsZCBzZWFyY2ggcGF0aCB3aXRob3V0IHBlcnNpc3RlbnQgZm9sZGVyCisjIE5vdGU6ICBwZXJzaXN0ZW50IGZpbGUgaGFuZGxlZCBpbiBGaW5kIGV4aXN0aW5nIAorIyBmaWxlcyB0byBwb3NzaWJseSByZWFkIGluIHNlY3Rpb24KK2lmICgkcGVyc2lzdGVudERpcikgeworICAjIFJlbW92ZSB0cmFpbGluZyAvJ3Mgb3IgXCdzCisgICRwZXJzaXN0ZW50RGlyID1+IC8oLio/KShbXC9cXF0pKiQvOworICAkcGVyc2lzdGVudERpciA9ICQxOworICBkZWJ1ZyAoInBlcnNpc3RlbnQgZGlyZWN0b3J5OiAkcGVyc2lzdGVudERpclxuIik7CisKKyAgbXkgQHNlYXJjaHBhdGhfb2xkID0gQHNlYXJjaHBhdGg7CisgIEBzZWFyY2hwYXRoID0gKCk7CisgIGZvcmVhY2ggbXkgJHBhdGhfdGVtcCAoQHNlYXJjaHBhdGhfb2xkKSB7CisgICAgaWYgKCRwYXRoX3RlbXAgZXEgJHBlcnNpc3RlbnREaXIpIHsKKyAgICAgIGRlYnVnKCJza2lwcGluZyBwZXJzaXN0ZW50IGRpcmVjdG9yeSAkcGF0aF90ZW1wXG4iKTsKKyAgICAgIG5leHQ7CisgICAgfQorICAgIHB1c2ggQHNlYXJjaHBhdGgsICRwYXRoX3RlbXA7CisgIH0KK30KKworIyBSZXNldCAkY29uZnBhdGggdG8gdGhlIGZpcnN0IHBhdGgKKyRjb25mcGF0aCA9ICRzZWFyY2hwYXRoWzBdOworCisjCisjIEZpbmQgZXhpc3RpbmcgZmlsZXMgdG8gcG9zc2libHkgcmVhZCBpbi4KKyMKK3B1c2ggQHNlYXJjaHBhdGgsICRvcHRze0l9IGlmICgkb3B0c3tJfSk7Citmb3JlYWNoIG15ICRpIChAc2VhcmNocGF0aCkgeworICAgIGRlYnVnKCJzZWFyY2hpbmcgJGlcbiIpOworICAgIGZvcmVhY2ggbXkgJGZ0IChrZXlzKCVmaWxldHlwZXMpKSB7CisgICAgICAgIGlmICgiJGkvJGZ0IiBlcSAkcGVyc2lzdGVudEZpbGUpIHsKKyAgICAgICAgICBkZWJ1Zygic2tpcHBpbmcgcGVyc2lzdGVudCBmaWxlICRpLyRmdFxuIik7CisgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCWRlYnVnKCJzZWFyY2hpbmcgZm9yICRpLyRmdFxuIik7CisJJGtub3duZmlsZXN7IiRpLyRmdCJ9ID0gJGZ0IGlmICgtZiAiJGkvJGZ0Iik7CisJbXkgJGxvY2FsZnQgPSAkZnQ7CisJJGxvY2FsZnQgPX4gcy8uY29uZi8ubG9jYWwuY29uZi87CisJJGtub3duZmlsZXN7IiRpLyRsb2NhbGZ0In0gPSAkZnQgaWYgKC1mICIkaS8kbG9jYWxmdCIpOworICAgIH0KK30KKworIworIyBBc2sgdGhlIHVzZXIgaWYgdGhleSB3YW50IHRoZW0gdG8gYmUgcmVhZCBpbiBhbmQgcmVhZCB0aGVtCisjCitpZiAoa2V5cygla25vd25maWxlcykpIHsKKyAgICBteSBAZmlsZXM7CisgICAgaWYgKGRlZmluZWQoJG9wdHN7J3InfSkpIHsKKwlpZiAoJG9wdHN7J3InfSBlcSAiYWxsIiB8fCAkb3B0c3sncid9IGVxICJhIikgeworCSAgICBAZmlsZXMgPSBrZXlzKCVrbm93bmZpbGVzKTsKKwl9IGVsc2lmICgkb3B0c3sncid9IG5lICJub25lIiAmJiAkb3B0c3sncid9IG5lICJuIikgeworCSAgICBwcmludCAidW5rbm93biBhcmd1bWVudCB0byAtcjogJG9wdHN7J3InfVxuIjsKKwkgICAgZXhpdCgxKTsKKwl9CisgICAgfSBlbHNpZihkZWZpbmVkKCRvcHRzeydSJ30pKSB7CisJQGZpbGVzID0gc3BsaXQoL1xzKixccyovLCRvcHRzeydSJ30pOworCWZvcmVhY2ggbXkgJGkgKEBmaWxlcykgeworCSAgICBteSAkeCA9ICRpOworCSAgICAkeCA9fiBzLy4qXC8oW15cL10rKSQvJDEvOworCSAgICAka25vd25maWxlc3skaX0gPSAkeDsKKwl9CisJUHJpbnQoInJlYWRpbmc6ICIsIGpvaW4oIiwiLEBmaWxlcyksIlxuIik7CisgICAgfSBlbHNlIHsKKwlAZmlsZXMgPSBkaXNwbGF5X21lbnUoLWhlYWQgPT4gIlRoZSBmb2xsb3dpbmcgaW5zdGFsbGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2VyZSBmb3VuZDpcbiIsCisJCQkgICAgICAtdGFpbCA9PiAiV291bGQgeW91IGxpa2UgbWUgdG8gcmVhZCB0aGVtIGluPyAgVGhlaXIgY29udGVudCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZVxub3V0cHV0IGZpbGVzIGNyZWF0ZWQgYnkgdGhpcyBzZXNzaW9uLlxuXG5WYWxpZCBhbnN3ZXIgZXhhbXBsZXM6IFwiYWxsXCIsIFwibm9uZVwiLFwiM1wiLFwiMSwyLDVcIlxuIiwKKwkJCSAgICAgIC1tdWx0aXBsZSA9PiAxLAorCQkJICAgICAgLXF1ZXN0aW9uID0+ICdSZWFkIGluIHdoaWNoJywKKwkJCSAgICAgIC1kZWZhdWx0dmFsdWUgPT4gJ2FsbCcsCisJCQkgICAgICBzb3J0IGtleXMoJWtub3duZmlsZXMpKTsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkaSAoQGZpbGVzKSB7CisJZGVidWcoInJlYWRpbmcgJGlcbiIpOworCXJlYWRfY29uZmlnKCRpLCAka25vd25maWxlc3skaX0pOworICAgIH0KK30KKworaWYgKCRvcHRzeydnJ30pIHsKKyAgICBteSBAZ3JvdXBzID0gc3BsaXQoLyw6XHMvLCRvcHRzeydnJ30pOworICAgIGZvcmVhY2ggbXkgJGdyb3VwIChAZ3JvdXBzKSB7CisJZG9fZ3JvdXAoJGdyb3VwKTsKKyAgICB9Cit9IGVsc2lmICgkI0FSR1YgPj0gMCkgeworICAgICMKKyAgICAjIGxvb3AgdGhyb3VnaCByZXF1ZXN0ZWQgZmlsZXMuCisgICAgIworICAgIGZvcmVhY2ggbXkgJGkgKEBBUkdWKSB7CisJaWYgKCFkZWZpbmVkKCRmaWxldHlwZXN7JGl9KSkgeworCSAgICB3YXJuICJpbnZhbGlkIGZpbGU6ICRpXG4iOworCX0gZWxzZSB7CisJICAgIGlmICgkb3B0c3snYSd9KSB7CisJCSRkaWRmaWxleyRpfSA9IDE7CisJICAgIH0gZWxzZSB7CisJCWJ1aWxkX2ZpbGUoJHRlcm0sICRpLCAkZmlsZXR5cGVzeyRpfSk7CisJICAgIH0KKwl9CisgICAgfQorfSBlbHNlIHsKKyAgICAjCisgICAgIyBhc2sgdXNlciB0byBzZWxlY3QgZmlsZSB0eXBlIHRvIG9wZXJhdGUgb24uCisgICAgIworICAgIHdoaWxlKDEpIHsKKwlteSAkbGluZSA9IGRpc3BsYXlfbWVudSgtaGVhZCA9PiAiSSBjYW4gY3JlYXRlIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgeW91LlxuU2VsZWN0IHRoZSBmaWxlIHR5cGUgeW91IHdpc2ggdG8gY3JlYXRlOlxuKHlvdSBjYW4gY3JlYXRlIG1vcmUgdGhhbiBvbmUgYXMgeW91IHJ1biB0aGlzIHByb2dyYW0pXG4iLAorCQkJCS1xdWVzdGlvbiA9PiAnU2VsZWN0IEZpbGUnLAorCQkJCS1vdGhlcmFuc3dlcnMgPT4gWydxdWl0J10sCisJCQkJLW1hcGFuc3dlcnMgPT4geyAncScgPT4gJ3F1aXQnIH0sCisJCQkJa2V5cyglZmlsZXR5cGVzKSk7CisJbGFzdCBpZiAoJGxpbmUgZXEgInF1aXQiKTsKKwlkZWJ1ZygiZmlsZSBzZWxlY3RlZDogJGxpbmVcbiIpOworCWJ1aWxkX2ZpbGUoJHRlcm0sICRsaW5lLCAkZmlsZXR5cGVzeyRsaW5lfSk7CisgICAgfQorfQorCisjCisjIFdyaXRlIG91dCB0aGUgcmVzdWx0cyB0byB0aGUgb3V0cHV0IGZpbGVzLgorIworb3V0cHV0X2ZpbGVzKFwlZmlsZXR5cGVzLCAkdGVybSk7CisKKworIworIyBEaXNwbGF5IHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkIGZvciB0aGUgdXNlci4KKyMKK1ByaW50KCJcblxuVGhlIGZvbGxvd2luZyBmaWxlcyB3ZXJlIGNyZWF0ZWQ6XG5cbiIpOworQGRpZGZpbGVzID0ga2V5cyglZGlkZmlsZSk7Citmb3JlYWNoIG15ICRpIChAZGlkZmlsZXMpIHsKKyAgICBpZiAoJGRpZGZpbGV7JGl9IG5lICIxIikgeworCWlmICgkb3B0c3snaSd9IHx8ICRvcHRzeydJJ30pIHsKKyAgICAgICAgICAkb3B0c3snSSd9ID0gIiRjb25mcGF0aCIgaWYgKCEkb3B0c3snSSd9KTsKKworICAgICAgICAgIGlmICghICgtZCAiJG9wdHN7J0knfSIpICYmICEgKG1rZGlyICgiJG9wdHN7J0knfSIsIDA3NTUpKSkgeworCSAgICBwcmludCAiXG5Db3VsZCBub3QgY3JlYXRlICRvcHRzeydJJ30gZGlyZWN0b3J5OiAkIVxuIjsKKwkgICAgcHJpbnQgKCJGaWxlICRkaWRmaWxleyRpfSBsZWZ0IGluIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKKwkgIH0KKwkgIGVsc2UgeworICAgICAgICAgICAgbW92ZSAoIiRvcHRzeydJJ30vJGkiLCAiJG9wdHN7J0knfS8kaS5iYWsiKSBpZiAoLWYgIiRvcHRzeydJJ30vJGkiKTsKKyAgICAgICAgICAgIGlmIChtb3ZlICgiJGRpZGZpbGV7JGl9IiwgIiRvcHRzeydJJ30iKSkgeworICAgICAgICAgICAgICBwcmludCgiICAkZGlkZmlsZXskaX0gaW5zdGFsbGVkIGluICRvcHRzeydJJ31cbiIpOwkgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgcHJpbnQgIlxuQ291bGQgbm90IG1vdmUgZmlsZSAkZGlkZmlsZXskaX0gdG8gJG9wdHN7J0knfS8kaTogJCFcbiI7CisgICAgICAgICAgICAgIHByaW50ICgiRmlsZSAkZGlkZmlsZXskaX0gbGVmdCBpbiBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCX0gZWxzaWYgKCRvcHRzeydwJ30pIHsKKwkgIGlmICghICgtZCAiJGhvbWUiKSAmJiAhIChta2RpciAoIiRob21lIiwgMDc1NSkpKSB7CisJICAgIHByaW50ICJcbkNvdWxkIG5vdCBjcmVhdGUgJGhvbWUgZGlyZWN0b3J5OiAkIVxuIjsKKwkgICAgcHJpbnQgKCJGaWxlICRkaWRmaWxleyRpfSBsZWZ0IGluIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKKwkgIH0KKwkgIGVsc2UgewkgICAgCisJICAgIG1vdmUgKCIkaG9tZS8kaSIsICIkaG9tZS8kaS5iYWsiKSBpZiAoLWYgIiRob21lLyRpIik7CisJICAgIGlmIChtb3ZlICgiJGRpZGZpbGV7JGl9IiwgIiRob21lIikpIHsKKwkgICAgICBwcmludCgiICAkZGlkZmlsZXskaX0gaW5zdGFsbGVkIGluICRob21lXG4iKTsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICBwcmludCAiXG5Db3VsZCBub3QgbW92ZSBmaWxlICRkaWRmaWxleyRpfSB0byAkaG9tZTogJCFcbiI7CisJICAgICAgcHJpbnQgKCJGaWxlICRkaWRmaWxleyRpfSBsZWZ0IGluIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKKyAgCSAgICB9CisJICB9CisgIAl9IGVsc2UgeworCSAgICBQcmludCgiICAkZGlkZmlsZXskaX0gIiwKKwkgICAgKCRpIG5lICRkaWRmaWxleyRpfSk/IlsgZnJvbSAkaSBzcGVjaWZpY2F0aW9uc10iOiIgIiwiXG4iKTsKKwkgICAgaWYgKCRvcHRzeydkJ30pIHsKKwkJb3BlbihJLCRkaWRmaWxleyRpfSk7CisJCWRlYnVnKCIgICAgIiAuIGpvaW4oIiAgICAiLDxJPikgLiAiXG4iKTsKKwkJY2xvc2UoSSk7CisJICAgIH0KKwl9CisgICAgfQorfQorCitpZiAoISRvcHRzeydwJ30gJiYgISRvcHRzeydpJ30gJiYgISRvcHRzeydJJ30pIHsKKyAgICBQcmludCgiXG5UaGVzZSBmaWxlcyBzaG91bGQgYmUgbW92ZWQgdG8gJGNvbmZwYXRoIGlmIHlvdQord2FudCB0aGVtIHVzZWQgYnkgZXZlcnlvbmUgb24gdGhlIHN5c3RlbS4gIEluIHRoZSBmdXR1cmUsIGlmIHlvdSBhZGQgCit0aGUgLWkgb3B0aW9uIHRvIHRoZSBjb21tYW5kIGxpbmUgSSdsbCBjb3B5IHRoZW0gdGhlcmUgYXV0b21hdGljYWxseSBmb3IgeW91LgorCitPciwgaWYgeW91IHdhbnQgdGhlbSBmb3IgeW91ciBwZXJzb25hbCB1c2Ugb25seSwgY29weSB0aGVtIHRvCiskaG9tZSAuICBJbiB0aGUgZnV0dXJlLCBpZiB5b3UgYWRkIHRoZSAtcCBvcHRpb24gdG8gdGhlCitjb21tYW5kIGxpbmUgSSdsbCBjb3B5IHRoZW0gdGhlcmUgYXV0b21hdGljYWxseSBmb3IgeW91LgorCisiKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZ1bmN0aW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3N1YiBQcmludCB7CisgICAgcHJpbnQgQF8gaWYgKCEkb3B0c3sncSd9KTsKK30KKyMKKyMgaGFuZGxlIGEgZ3JvdXAgb2YgcXVlc3Rpb25zCisjCitzdWIgZ2V0X3luX21heWJlIHsKKyAgICBteSAkcXVlc3Rpb24gPSBzaGlmdDsKKyAgICBteSAkYW5zID0gInkiOworICAgIGlmICgkcXVlc3Rpb24gbmUgIiIpIHsKKwkkYW5zID0gZ2V0X2Fuc3dlcigkdGVybSwgJHF1ZXN0aW9uLAorCQkJICB2YWxpZF9hbnN3ZXJzKHF3KHllcyB5IG5vIG4pKSwgJ3knKTsKKyAgICB9CisgICAgcmV0dXJuICgkYW5zID1+IC9eeS8pPzE6MDsKK30KKworc3ViIGRvX2dyb3VwIHsKKyAgICBteSAkZ3JvdXAgPSBzaGlmdDsKKyAgICBkaWUgIm5vIHN1Y2ggZ3JvdXAgJGdyb3VwXG4iIGlmICghJGdyb3Vwc3skZ3JvdXB9KTsKKyAgICBmb3JlYWNoIG15ICR0b2tlbiAoQHskZ3JvdXBzeyRncm91cH19KSB7CisJaWYgKCR0b2tlbi0+WzBdIGVxICJtZXNzYWdlIikgeworCSAgICBQcmludCAoIiR0b2tlbi0+WzFdICR0b2tlbi0+WzJdXG4iKTsKKwl9IGVsc2lmICgkdG9rZW4tPlswXSBlcSAic3ViZ3JvdXAiKSB7CisJICAgIGRvX2dyb3VwKCR0b2tlbi0+WzFdKSBpZiAoZ2V0X3luX21heWJlKCR0b2tlbi0+WzJdKSk7CisJfSBlbHNpZiAoZGVmaW5lZCgkdG9rZW5tYXB7JHRva2VuLT5bMV19KSkgeworCSAgICBpZiAoZ2V0X3luX21heWJlKCR0b2tlbi0+WzJdKSkgeworCQlkbyB7CisJCSAgICBkb19saW5lKCR0b2tlbi0+WzFdLCAkdG9rZW5tYXB7JHRva2VuLT5bMV19KTsKKwkJfSB1bnRpbCAoJHRva2VuLT5bMF0gbmUgIm11bHRpcGxlIiB8fAorCQkJIGdldF9hbnN3ZXIoJHRlcm0sICJEbyBhbm90aGVyICR0b2tlbi0+WzFdIGxpbmU/IiwKKwkJCQkgICAgdmFsaWRfYW5zd2Vycyhxdyh5ZXMgeSBubyBuKSksICd5JykKKwkJCSA9fiAvbi8pOworCSAgICB9CisJfSBlbHNpZiAoZGVmaW5lZCgkZmlsZXR5cGVzeyR0b2tlbi0+WzFdfSkpIHsKKwkgICAgJGRpZGZpbGV7JHRva2VuLT5bMV19ID0gMTsKKwl9IGVsc2UgeworCSAgICBkaWUgImludmFsaWQgbWVtYmVyICR0b2tlbi0+WzFdIG9mIGdyb3VwICRncm91cFxuIjsKKwl9CisgICAgfQorfQorCisjCisjIGJ1aWxkIGEgcGFydGljdWxhciB0eXBlIG9mIGZpbGUgYnkgb3BlcmF0aW5nIG9uIHNlY3Rpb25zCisjCitzdWIgYnVpbGRfZmlsZSB7CisgICAgbXkgKCR0ZXJtLCAkZmlsZW5hbWUsICRmaWxlY29uZikgPSBAXzsKKyAgICAkZGlkZmlsZXskZmlsZW5hbWV9ID0gMTsKKyAgICBteSAoQGxpbmVzKTsKKyAgICB3aGlsZSgxKSB7CisJbXkgJGxpbmUgPSBkaXNwbGF5X21lbnUoLWhlYWQgPT4gIlRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZSBwdXQgaW50byAkZmlsZW5hbWUgaXMgZGl2aWRlZFxuaW50byBzZWN0aW9ucy4gIFNlbGVjdCBhIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBmb3IgJGZpbGVuYW1lXG50aGF0IHlvdSB3aXNoIHRvIGNyZWF0ZTpcbiIsCisJCQkJLW90aGVyYW5zd2VycyA9PiBbJ2ZpbmlzaGVkJ10sCisJCQkJLW1hcGFuc3dlcnMgPT4geyAnZicgPT4gJ2ZpbmlzaGVkJyB9LAorCQkJCS1xdWVzdGlvbiA9PiAiU2VsZWN0IHNlY3Rpb24iLAorCQkJCS1udW1lcmljID0+IDEsCisJCQkJbWFwIHsgJF8tPnsndGl0bGUnfVswXSB9IEAkZmlsZWNvbmYpOworCisJcmV0dXJuIEBsaW5lcyBpZiAoJGxpbmUgZXEgImZpbmlzaGVkIik7CisJZG9fc2VjdGlvbigkZmlsZWNvbmYtPlskbGluZS0xXSk7CisgICAgfQorfQorCisjCisjIGNvbmZpZ3VyZSBhIHBhcnRpY3VsYXIgc2VjdGlvbiBieSBvcGVyYXRpbmcgb24gdG9rZW4gdHlwZXMKKyMKK3N1YiBkb19zZWN0aW9uIHsKKyAgICBteSAkY29uZnNlY3QgPSBzaGlmdDsKKyAgICBteSBAbGluZXM7CisgICAgd2hpbGUoMSkgeworCVByaW50ICgiXG5TZWN0aW9uOiAkY29uZnNlY3QtPnsndGl0bGUnfVswXVxuIik7CisJUHJpbnQgKCJEZXNjcmlwdGlvbjpcbiIpOworCVByaW50ICgiICAiLCBqb2luKCJcbiAgIixAeyRjb25mc2VjdC0+eydkZXNjcmlwdGlvbid9fSksIlxuIik7CisJbXkgJGxpbmUgPQorCSAgICBkaXNwbGF5X21lbnUoLWhlYWQgPT4gIlNlbGVjdCBmcm9tOlxuIiwKKwkJCSAtb3RoZXJhbnN3ZXJzID0+IFsnZmluaXNoZWQnLCdsaXN0J10sCisJCQkgLW1hcGFuc3dlcnMgPT4geyAnZicgPT4gJ2ZpbmlzaGVkJywKKwkJCQkJICAnbCcgPT4gJ2xpc3QnIH0sCisJCQkgLXF1ZXN0aW9uID0+ICdTZWxlY3Qgc2VjdGlvbicsCisJCQkgLWRlc2NyaXB0aW9ucyA9PiBbbWFwIHsgJGNvbmZzZWN0LT57JF99e2luZm99WzBdIH0gCisJCQkJCSAgIEB7JGNvbmZzZWN0LT57J3RoZXRva2Vucyd9fV0sCisJCQkgQHskY29uZnNlY3QtPnsndGhldG9rZW5zJ319KTsKKwlyZXR1cm4gQGxpbmVzIGlmICgkbGluZSBlcSAiZmluaXNoZWQiKTsKKwlpZiAoJGxpbmUgZXEgImxpc3QiKSB7CisJICAgIHByaW50ICJMaW5lcyBkZWZpbmVkIGZvciBzZWN0aW9uIFwiJGNvbmZzZWN0LT57dGl0bGV9WzBdXCIgc28gZmFyOlxuIjsKKwkgICAgZm9yZWFjaCBteSAkaSAoQHskY29uZnNlY3QtPnsndGhldG9rZW5zJ319KSB7CisJCWlmICgkI3skY29uZnNlY3QtPnskaX17J3Jlc3VsdHMnfX0gPj0gMCkgeworCQkgICAgcHJpbnQgIiAgIixqb2luKCJcbiAgIixAeyRjb25mc2VjdC0+eyRpfXsncmVzdWx0cyd9fSksIlxuIjsKKwkJfQorCSAgICB9CisJICAgIG5leHQ7CisJfQorCWRvX2xpbmUoJGxpbmUsICRjb25mc2VjdC0+eyRsaW5lfSk7CisgICAgfQorICAgIHJldHVybjsKK30KKworIworIyBBc2sgYWxsIHRoZSBxdWVzdGlvbnMgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgbGluZSB0eXBlCisjCitzdWIgZG9fbGluZSB7CisgICAgbXkgJHRva2VuID0gc2hpZnQ7CisgICAgbXkgJGNvbmZsaW5lID0gc2hpZnQ7CisgICAgbXkgKEBhbnN3ZXJzLCAkY291bnRlciwgJGkpOworIyAgICBkZWJ1ZyhteV9EdW1wZXIoJGNvbmZsaW5lKSk7CisgICAgUHJpbnQgKCJcbkNvbmZpZ3VyaW5nOiAkdG9rZW5cbiIpOworICAgIFByaW50ICgiRGVzY3JpcHRpb246XG4gICIsam9pbigiXG4gICAgIixAeyRjb25mbGluZS0+eydpbmZvJ319KSwiXG5cbiIpOworICAgIGZvcigkaT0wOyAkaSA8PSAkI3skY29uZmxpbmUtPnsncXVlc3Rpb24nfX07ICRpKyspIHsKKwlpZiAoZGVmaW5lZCgkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV0pICYmCisJICAgICRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXSBuZSAiIikgeworCSAgICBteSAkcSA9ICRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXTsKKwkgICAgJHEgPX4gcy9cJChcZCspLyRhbnN3ZXJzWyQxXS9nOworCSAgICBkZWJ1ZygiYWZ0ZXI6ICR0ZXJtLCAkcSwgIiwkY29uZmxpbmUtPnsndmFsaWRhbnN3ZXInfVskaV0sIlxuIik7CisJICAgICRhbnN3ZXJzWyRpXSA9IGdldF9hbnN3ZXIoJHRlcm0sICRxLAorCQkJCSAgICAgICRjb25mbGluZS0+eyd2YWxpZGFuc3dlcid9WyRpXSk7CisJICAgICRhbnN3ZXJzWyRpXSA9fiBzL1wiL1xcXCIvZzsKKwkgICAgJGFuc3dlcnNbJGldID0gJyInIC4gJGFuc3dlcnNbJGldIC4gJyInIGlmICgkYW5zd2Vyc1skaV0gPX4gL1xzLyk7CisJfQorICAgIH0KKyAgICBpZiAoJCN7JGNvbmZsaW5lLT57J2xpbmUnfX0gPT0gLTEpIHsKKwlteSAoJGksJGxpbmUpOworCWZvcigkaT0wOyAkaSA8PSAkI3skY29uZmxpbmUtPnsncXVlc3Rpb24nfX07ICRpKyspIHsKKwkgICAgbmV4dCBpZiAoIWRlZmluZWQoJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldKSB8fAorCQkgICAgICRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXSBlcSAiIik7CisJICAgICRsaW5lIC49ICIgXCQiIC4gJGk7CisJfQorCXB1c2ggQHskY29uZmxpbmUtPnsnbGluZSd9fSwgJGxpbmU7CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkbGluZSAoQHskY29uZmxpbmUtPnsnbGluZSd9fSkgeworCW15ICRmaW5pc2hlZCA9ICRsaW5lOworCWRlYnVnKCJwcmVsaW5lOiAkZmluaXNoZWRcbiIpOworCWRlYnVnKCJhbnN3ZXJzOiAiLG15X0R1bXBlcihcQGFuc3dlcnMpKTsKKwkkZmluaXNoZWQgPX4gcy9cJChcZCspLyRhbnN3ZXJzWyQxXS9nOworCWlmICgkbGluZSA9fiBzL15ldmFsXHMrLy8pIHsKKwkgICAgZGVidWcoImV2YWw6ICRmaW5pc2hlZFxuIik7CisJICAgICRmaW5pc2hlZCA9IGV2YWwgJGZpbmlzaGVkOworCSAgICBkZWJ1ZygiZXZhbCByZXN1bHRzOiAkZmluaXNoZWRcbiIpOworCX0KKwkkZmluaXNoZWQgPSAkdG9rZW4gLiAiICIgLiAkZmluaXNoZWQ7CisJUHJpbnQgKCJcbkZpbmlzaGVkIE91dHB1dDogJGZpbmlzaGVkXG4iKTsKKwlwdXNoIEB7JGNvbmZsaW5lLT57J3Jlc3VsdHMnfX0sJGZpbmlzaGVkOworICAgIH0KK30KKworIworIyByZWFkIGFsbCBzZXRzIG9mIGNvbmZpZyBmaWxlcyBpbiB0aGUgdmFyaW91cyBzdWJkaXJlY3Rvcmllcy4KKyMKK3N1YiByZWFkX2NvbmZpZ19maWxlcyB7CisgICAgbXkgJHJlYWRkaXIgPSBzaGlmdDsKKyAgICBteSAkZmlsZXR5cGVzID0gc2hpZnQ7CisgICAgb3BlbmRpcihESCwgJHJlYWRkaXIpIHx8IGRpZSAibm8gc3VjaCBkaXJlY3RvcnkgJHJlYWRkaXIsIGRpZCB5b3UgcnVuIG1ha2UgaW5zdGFsbD9cbiI7CisgICAgbXkgJGRpcjsKKyAgICBteSAkY29uZmlnZmlsZW5hbWU9InNubXBjb25mLWNvbmZpZyI7CisKKyAgICB3aGlsZShkZWZpbmVkKCRkaXIgPSByZWFkZGlyKERIKSkpIHsKKwluZXh0IGlmICgkZGlyID1+IC9eXC4vKTsKKwluZXh0IGlmICgkZGlyID1+IC9DVlMvKTsKKwlkZWJ1ZygiZGlyIGVudHJ5OiAkZGlyXG4iKTsKKwlpZiAoLWQgIiRyZWFkZGlyLyRkaXIiICYmIC1mICIkcmVhZGRpci8kZGlyLyRjb25maWdmaWxlbmFtZSIpIHsKKworCSAgICBteSAkY29uZmZpbGU7CisKKwkgICAgIyByZWFkIHRoZSB0b3AgbGV2ZWwgY29uZmlndXJhdGlvbiBpbmZvcmFtYXRpb24gYWJvdXQgdGhlIGRpcmVjb3RyeS4KKwkgICAgb3BlbihJLCAiJHJlYWRkaXIvJGRpci8kY29uZmlnZmlsZW5hbWUiKTsKKwkgICAgd2hpbGUoPEk+KSB7CisJCSRjb25mZmlsZSA9ICQxIGlmICgvZm9yY29uZmZpbGU6ICguKikvKTsKKwkgICAgfQorCSAgICBjbG9zZShJKTsKKworCSAgICAjIG5vIFJFQURNRSBpbmZvcm1hdGluby4KKwkgICAgaWYgKCRjb25mZmlsZSBlcSAiIikgeworCQlwcmludCBTVERFUlIgIldhcm5pbmc6IE5vICdmb3Jjb25mZmlsZScgaW5mb3JtYXRpb24gaW4gJHJlYWRkaXIvJGRpci8kY29uZmlnZmlsZW5hbWVcbiI7CisJCW5leHQ7CisJICAgIH0KKworCSAgICAjIHJlYWQgYWxsIHRoZSBkYWF0IGluIHRoZSBkaXJlY3RvcnkKKwkgICAgJGZpbGV0eXBlcy0+eyRjb25mZmlsZX0gPSByZWFkX2NvbmZpZ19pdGVtcygiJHJlYWRkaXIvJGRpciIsICRjb25mZmlsZSk7CisJfSBlbHNlIHsKKwkgICAgIyBubyBSRUFETUUgaW5mb3JtYXRpbm8uCisJICAgIHByaW50IFNUREVSUiAiV2FybmluZzogTm8gJGNvbmZpZ2ZpbGVuYW1lIGZpbGUgZm91bmQgaW4gJHJlYWRkaXIvJGRpclxuIjsKKwl9CisgICAgfQorICAgIGNsb3NlZGlyIERIOworfQorCisjCisjIHJlYWQgZWFjaCBjb25maWd1cmF0aW9uIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyMKK3N1YiByZWFkX2NvbmZpZ19pdGVtcyB7CisgICAgbXkgJGl0ZW1kaXIgPSBzaGlmdDsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIG9wZW5kaXIoSVRFTVMsICRpdGVtZGlyKTsKKyAgICBteSAkZmlsZTsKKyAgICBteSBAcmVzdWx0czsKKyAgICB3aGlsZShkZWZpbmVkKCRmaWxlID0gcmVhZGRpcihJVEVNUykpKSB7CisJbmV4dCBpZiAoJGZpbGUgPX4gL34kLyk7CisJbmV4dCBpZiAoJGZpbGUgPX4gL15zbm1wY29uZi1jb25maWckLyk7CisJaWYgKC1mICIkaXRlbWRpci8kZmlsZSIpIHsKKwkgICAgbXkgJHJlcyA9IHJlYWRfY29uZmlnX2l0ZW0oIiRpdGVtZGlyLyRmaWxlIiwgJHR5cGUpOworCSAgICBpZiAoc2NhbGFyKGtleXMoJSRyZXMpKSA+IDApIHsKKwkJcHVzaCBAcmVzdWx0cywgJHJlczsKKwkgICAgfQorCX0KKyAgICB9CisgICAgY2xvc2VkaXIoSVRFTVMpOworICAgIHJldHVybiBcQHJlc3VsdHM7Cit9CisKKyMKKyMgbWFyayBhIGxpc3Qgb2YgdG9rZW5zIGFzIGEgc3BlY2lhbCAiZ3JvdXAiCisjCitzdWIgcmVhZF9jb25maWdfZ3JvdXAgeworICAgIG15ICgkZmgsICRncm91cCwgJHR5cGUpID0gQF87CisgICAgbXkgJGxpbmU7CisgICAgZGVidWcoImhhbmRsaW5nIGdyb3VwICRncm91cFxuIik7CisgICAgcHVzaCAoQHskZ3JvdXBzeyRncm91cH19LFsnZmlsZXR5cGUnLCAkdHlwZV0pOworICAgIHdoaWxlKCRsaW5lID0gPCRmaD4pIHsKKwljaG9tcCgkbGluZSk7CisJbmV4dCBpZiAoJGxpbmUgPX4gL15ccyokLyk7CisJbmV4dCBpZiAoJGxpbmUgPX4gL15cIy8pOworCXJldHVybiAkbGluZSBpZiAoJGxpbmUgIX4gL14oc2luZ2xlfG11bHRpcGxlfG1lc3NhZ2V8ZmlsZXR5cGV8c3ViZ3JvdXApLyk7CisJbXkgKCR0eXBlLCAkdG9rZW4sICRyZXN0KSA9ICgkbGluZSA9fiAvXihcdyspXHMrKFteXHNdKylccyooLiopLyk7CisJZGVidWcgKCJyZWFkaW5nIGdyb3VwICRncm91cCA6ICR0eXBlIC0+ICR0b2tlbiAtPiAkcmVzdFxuIik7CisJcHVzaCAoQHskZ3JvdXBzeyRncm91cH19LCBbJHR5cGUsICR0b2tlbiwgJHJlc3RdKTsKKyAgICB9CisgICAgcmV0dXJuOworfQorCQorCisjCisjIFBhcnNlIG9uZSBmaWxlCisjCitzdWIgcmVhZF9jb25maWdfaXRlbSB7CisgICAgbXkgJGl0ZW1maWxlID0gc2hpZnQ7CisgICAgbXkgJGl0ZW1jb3VudDsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIG15ICRmaCA9IG5ldyBJTzo6RmlsZSgkaXRlbWZpbGUpOworICAgIHJldHVybiBpZiAoIWRlZmluZWQoJGZoKSk7CisgICAgbXkgKCVyZXN1bHRzLCAkY3VydG9rZW4pOworICAgIGRlYnVnKCJ0b2tlbml0ZW1zOiAgIiwgbXlfRHVtcGVyKFwldG9rZW5pdGVtcykpOworICB0b3B3aGlsZToKKyAgICB3aGlsZSgkbGluZSA9IDwkZmg+KSB7CisJbmV4dCBpZiAoJGxpbmUgPX4gL15ccypcIy8pOworCW15ICgkdG9rZW4sICRyZXN0KSA9ICgkbGluZSA9fiAvXihcdyspXHMrKC4qKS8pOworCW5leHQgaWYgKCFkZWZpbmVkKCR0b2tlbikgfHwgIWRlZmluZWQoJHJlc3QpKTsKKwl3aGlsZSAoJHRva2VuIGVxICdncm91cCcpIHsKKwkgICAgIyBoYW5kbGUgc3BlY2lhbCBncm91cCBsaXN0CisJICAgIG15ICRuZXh0ID0gcmVhZF9jb25maWdfZ3JvdXAoJGZoLCAkcmVzdCwkdHlwZSk7CisJICAgIGlmICgkbmV4dCkgeworCQkoJHRva2VuLCAkcmVzdCkgPSAoJG5leHQgPX4gL14oXHcrKVxzKyguKikvKTsKKwkgICAgfSBlbHNlIHsKKwkJbmV4dCB0b3B3aGlsZTsKKwkgICAgfQorCX0KKwlkZWJ1ZygidG9rZW46ICR0b2tlbiA9PiAkcmVzdFxuIik7CisJaWYgKCR0b2tlbiBlcSAnc3RlYWwnKSB7CisJICAgIGZvcmVhY2ggbXkgJHN0ZWFsZnJvbSAoa2V5cygleyRyZXN1bHRzeyRyZXN0fX0pKSB7CisJCWlmICghZGVmaW5lZCgkcmVzdWx0c3skY3VydG9rZW59eyRzdGVhbGZyb219KSkgeworCQkgICAgQHskcmVzdWx0c3skY3VydG9rZW59eyRzdGVhbGZyb219fSA9IAorCQkJQHskcmVzdWx0c3skcmVzdH17JHN0ZWFsZnJvbX19OworCQl9CisJICAgIH0KKwl9IGVsc2lmIChkZWZpbmVkKCR0b2tlbml0ZW1zeyR0b2tlbn0pKSB7CisJICAgIGlmICghZGVmaW5lZCgkY3VydG9rZW4pKSB7CisJCWRpZSAiZXJyb3IgaW4gY29uZmlndXJhdGlvbiBmaWxlICRpdGVtZmlsZSwgbm8gdG9rZW4gc2V0XG4iOworCSAgICB9CisJICAgICRyZXN0ID1+IHMvXlwjLy87CisJICAgIHB1c2ggQHskcmVzdWx0c3skY3VydG9rZW59eyR0b2tlbn19LCRyZXN0OworCX0gZWxzaWYgKGRlZmluZWQoJGFycmF5aXRlbXN7JHRva2VufSkpIHsKKwkgICAgaWYgKCFkZWZpbmVkKCRjdXJ0b2tlbikpIHsKKwkJZGllICJlcnJvciBpbiBjb25maWd1cmF0aW9uIGZpbGUgJGl0ZW1maWxlLCBubyB0b2tlbiBzZXRcbiI7CisJICAgIH0KKwkgICAgbXkgKCRudW0sICRuZXdyZXN0KSA9ICgkcmVzdCA9fiAvXihcZCspXHMrKC4qKS8pOworCSAgICBpZiAoIWRlZmluZWQoJG51bSkgfHwgIWRlZmluZWQoJG5ld3Jlc3QpKSB7CisJCXdhcm4gImludmFsaWQgY29uZmlnIGxpbmU6ICRsaW5lXG4iOworCSAgICB9IGVsc2UgeworCQkkcmVzdWx0c3skY3VydG9rZW59eyR0b2tlbn1bJG51bV0gPSAkbmV3cmVzdDsKKwkgICAgfQorCX0gZWxzaWYgKCR0b2tlbiA9fiAvXnRva2VuXHMqJC8pIHsKKwkgICAgJHJlc3QgPSBsYygkcmVzdCk7CisJICAgICRjdXJ0b2tlbiA9ICRyZXN0OworCSAgICBpZiAoISBleGlzdHMgJHJlc3VsdHN7JGN1cnRva2VufXsnZGVmaW5lZCd9KSB7CisJCXB1c2ggQHskcmVzdWx0c3sndGhldG9rZW5zJ319LCAkY3VydG9rZW47CisJCSRyZXN1bHRzeyRjdXJ0b2tlbn17J2RlZmluZWQnfSA9IDE7CisJICAgIH0KKwkgICAgJHRva2VubWFweyRjdXJ0b2tlbn0gPSAkcmVzdWx0c3skY3VydG9rZW59OworCSAgICBkZWJ1ZygiY3VycmVudCB0b2tlbiBzZXQgdG8gJHRva2VuXG4iKTsKKwl9IGVsc2UgeworCSAgICBwdXNoIEB7JHJlc3VsdHN7JHRva2VufX0sJHJlc3Q7CisJfQorICAgIH0KKyAgICByZXR1cm4gXCVyZXN1bHRzOworfQorCitzdWIgZGVidWcgeworICAgIHByaW50IEBfIGlmICgkb3B0c3snZCd9KTsKK30KKworc3ViIG91dHB1dF9maWxlcyB7CisgICAgbXkgJGZpbGV0eXBlcyA9IHNoaWZ0OworICAgIG15ICR0ZXJtID0gc2hpZnQ7CisgICAgZm9yZWFjaCBteSAkZnQgKGtleXMoJSRmaWxldHlwZXMpKSB7CisJbmV4dCBpZiAoISRkaWRmaWxleyRmdH0pOworCW15ICRvdXRwdXRmID0gJGZ0OworCWlmICgtZiAkb3V0cHV0ZiAmJiAhJG9wdHN7J2YnfSkgeworCSAgICBwcmludCAiXG5FcnJvcjogQW4gJG91dHB1dGYgZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIGRpcmVjdG9yeS5cblxuIjsKKwkgICAgbXkgJGFucyA9IGdldF9hbnN3ZXIoJHRlcm0sIidvdmVyd3JpdGUnLCAnc2tpcCcsICdyZW5hbWUnIG9yICdhcHBlbmQnPyAiLHZhbGlkX2Fuc3dlcnMocXcobyBvdmVyd3JpdGUgciByZW5hbWUgcyBza2lwIGEgYXBwZW5kKSkpOworCSAgICBuZXh0IGlmICgkYW5zID1+IC9eKHN8c2tpcCkkL2kpOworCSAgICBpZiAoJGFucyA9fiAvXihhfGFwcGVuZCkvKSB7CisJCSRvdXRwdXRmID0gIj4kb3V0cHV0ZiI7CisJICAgIH0gZWxzaWYgKCRhbnMgPX4gL14ocnxyZW5hbWUpJC9pKSB7CisJCSMgZGVmYXVsdCB0byByZW5hbWUgZm9yIGVycm9yIGNvbmRpdGlvbnMKKwkJJG91dHB1dGYgPSAkdGVybS0+cmVhZGxpbmUoIlNhdmUgdG8gd2hhdCBuZXcgZmlsZSBuYW1lIGluc3RlYWQgKG9yICdza2lwJyk/ICIpOworCSAgICB9CisJfQorCSRkaWRmaWxleyRmdH0gPSAkb3V0cHV0ZjsKKwlvcGVuKE8sIj4kb3V0cHV0ZiIpIHx8IHdhcm4gImNvdWxkbid0IHdyaXRlIHRvICRvdXRwdXRmXG4iOworCXByaW50IE8gIiMiIHggNzUsIlxuIjsKKwlwcmludCBPICIjXG4jICRmdFxuIjsKKwlwcmludCBPICIjXG4jICAgLSBjcmVhdGVkIGJ5IHRoZSBzbm1wY29uZiBjb25maWd1cmF0aW9uIHByb2dyYW1cbiNcbiI7CisJZm9yZWFjaCBteSAkc2VjdCAoQHskZmlsZXR5cGVzLT57JGZ0fX0pIHsKKwkgICAgbXkgJHNlY3RoZWxwID0gMDsKKwkgICAgZm9yZWFjaCBteSAkdG9rZW4gKEB7JHNlY3QtPnsndGhldG9rZW5zJ319KSB7CisJCWlmICgkI3skc2VjdC0+eyR0b2tlbn17J3Jlc3VsdHMnfX0gPj0gMCkgeworCQkgICAgaWYgKCRzZWN0aGVscCsrID09IDApIHsKKwkJCXByaW50IE8gIiMiIHggNzUsIlxuIyBTRUNUSU9OOiAiLAorCQkJam9pbigiXG4jICAgICAgICAgICIsIEB7JHNlY3QtPnt0aXRsZX19KSwgIlxuI1xuIjsKKwkJCXByaW50IE8gIiMgICAiLCBqb2luKCJcbiMgICAiLEB7JHNlY3QtPntkZXNjcmlwdGlvbn19KSwKKwkJCSJcbiI7CisJCSAgICB9CisJCSAgICBwcmludCBPICJcbiMgJHRva2VuOiAiLAorCQkgICAgam9pbigiXG4jICAgIixAeyRzZWN0LT57JHRva2VufXtpbmZvfX0pLCAiXG5cbiI7CisJCSAgICBmb3JlYWNoIG15ICRyZXN1bHQgKEB7JHNlY3QtPnskdG9rZW59eydyZXN1bHRzJ319KSB7CisJCQlwcmludCBPICIkcmVzdWx0XG4iOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgcHJpbnQgTyAiXG5cblxuIjsKKwl9CisJaWYgKCQjeyR1bmtub3dueyRmdH19ID4gLTEpIHsKKwkgICAgcHJpbnQgTyAiI1xuIyBVbmtub3duIGRpcmVjdGl2ZXMgcmVhZCBpbiBmcm9tIG90aGVyIGZpbGVzIGJ5IHNubXBjb25mXG4jXG4iOworCSAgICBmb3JlYWNoIG15ICR1bmtub3duIChAeyR1bmtub3dueyRmdH19KSB7CisJCXByaW50IE8gJHVua25vd24sIlxuIjsKKwkgICAgfQorCX0KKwljbG9zZShPKTsKKyAgICB9Cit9CisKK3N1YiBnZXRfYW5zd2VyIHsKKyAgICBteSAoJHRlcm0sICRxdWVzdGlvbiwgJHJlZ2V4cCwgJGRlZmF1bHR2YWwpID0gQF87CisgICAgJHF1ZXN0aW9uIC49ICIgKGRlZmF1bHQgPSAkZGVmYXVsdHZhbCkiIGlmIChkZWZpbmVkKCRkZWZhdWx0dmFsKSAmJiAkZGVmYXVsdHZhbCBuZSAiIik7CisgICAgJHF1ZXN0aW9uIC49ICI6ICI7CisgICAgbXkgJGFucyA9ICR0ZXJtLT5yZWFkbGluZSgkcXVlc3Rpb24pOworICAgIHJldHVybiAkZGVmYXVsdHZhbCBpZiAoJGFucyBlcSAiIiAmJiBkZWZpbmVkKCRkZWZhdWx0dmFsKSAmJiAKKwkJCSAgICRkZWZhdWx0dmFsIG5lICIiKTsKKyAgICB3aGlsZSAoISghZGVmaW5lZCgkcmVnZXhwKSB8fAorCSAgICAgJHJlZ2V4cCBlcSAiIiB8fAorCSAgICAgJGFucyA9fiAvJHJlZ2V4cC8pKSB7CisJcHJpbnQgImludmFsaWQgYW5zd2VyISAgSXQgbXVzdCBtYXRjaCB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbjogJHJlZ2V4cFxuIjsKKwkkYW5zID0gJHRlcm0tPnJlYWRsaW5lKCRxdWVzdGlvbik7CisgICAgfQorICAgIHJldHVybiAkZGVmYXVsdHZhbCBpZiAoJGFucyBlcSAiIiAmJiBkZWZpbmVkKCRkZWZhdWx0dmFsKSAmJiAKKwkJCSAgICRkZWZhdWx0dmFsIG5lICIiKTsKKyAgICByZXR1cm4gJGFuczsKK30KKyAgICAKK3N1YiB2YWxpZF9hbnN3ZXJzIHsKKyAgICBteSBAbGlzdDsKKyAgICBmb3JlYWNoICRpIChAXykgeworCXB1c2ggQGxpc3QsICRpIGlmICgkaSk7CisgICAgfQorICAgIHJldHVybiAiXigiIC4gam9pbigifCIsQGxpc3QpIC4gIilcJCI7Cit9CisKK3N1YiByZWFkX2NvbmZpZyB7CisgICAgbXkgJGZpbGUgPSBzaGlmdDsKKyAgICBteSAkZmlsZXR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gaWYgKCFkZWZpbmVkKCRmaWxldHlwZXN7JGZpbGV0eXBlfSkpOworICAgIGlmICghIC1mICRmaWxlKSB7CisJd2FybiAiJGZpbGUgZG9lcyBub3QgZXhpc3RcbiI7CisJcmV0dXJuOworICAgIH0KKyAgICBvcGVuKEksJGZpbGUpOworICAgIHdoaWxlKDxJPikgeworCW5leHQgaWYgKC9eXHMqXCMvKTsKKwluZXh0IGlmICgvXlxzKiQvKTsKKwljaG9tcDsKKwlteSAoJHRva2VuLCAkcmVzdCkgPSAvXlxzKihcdyspXHMrKC4qKS87CisJJHRva2VuID0gbGMoJHRva2VuKTsKKwluZXh0IGlmIChkZWZpbmVkKCRhbGxsaW5lc3skX30pKTsgIyBkcm9wIGR1cGxpY2F0ZSBsaW5lcworCWlmIChkZWZpbmVkKCR0b2tlbm1hcHskdG9rZW59KSkgeworCSAgICBwdXNoIEB7JHRva2VubWFweyR0b2tlbn17J3Jlc3VsdHMnfX0sJF87CisJfSBlbHNlIHsKKwkgICAgcHVzaCBAeyR1bmtub3dueyRmaWxldHlwZX19LCRfOworCX0KKwkkYWxsbGluZXN7JF99Kys7CisgICAgfQorICAgIGNsb3NlKEkpOworfQorCitzdWIgZGlzcGxheV9tZW51IHsKKyAgICBteSAlY29uZmlnOworCisgICAgd2hpbGUgKCQjXyA+IC0xICYmICRfWzBdID1+IC9eLS8pIHsKKwlteSAka2V5ID0gc2hpZnQ7CisJJGNvbmZpZ3ska2V5fSA9IHNoaWZ0OworICAgIH0KKworICAgIG15ICRjb3VudD0xOworICAgIHByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7CisgICAgaWYgKCRjb25maWd7Jy1oZWFkJ30pIHsKKwlwcmludCAkY29uZmlneyctaGVhZCd9OworCXByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7CisgICAgfQorICAgIG15IEBhbnN3ZXJzID0gQF87CisgICAgbXkgQGxpc3Q7CisgICAgaWYgKGRlZmluZWQoJGNvbmZpZ3snLWRlc2NyaXB0aW9ucyd9KSAmJiAKKwlyZWYoJGNvbmZpZ3snLWRlc2NyaXB0aW9ucyd9KSBlcSAiQVJSQVkiKSB7CisJQGxpc3QgPSBAeyRjb25maWd7Jy1kZXNjcmlwdGlvbnMnfX0KKyAgICB9IGVsc2UgeworCUBsaXN0ID0gQF87CisgICAgfQorICAgIGZvcmVhY2ggbXkgJGkgKEBsaXN0KSB7CisJcHJpbnRmICIgICUyZDogICRpXG4iLCAkY291bnQrKyBpZiAoJGkpOworICAgIH0KKyAgICBwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOworICAgIGlmIChkZWZpbmVkKCRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfSkpIHsKKwlpZiAocmVmKCRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfSkgZXEgJ0FSUkFZJykgeworCSAgICBwcmludCAiT3RoZXIgb3B0aW9uczogIiwgam9pbigiLCAiLAorCQkJCQkgIEB7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fSksICJcbiI7CisJICAgIHB1c2ggQGFuc3dlcnMsIEB7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fTsKKwkgICAgcHVzaCBAYW5zd2Vycywga2V5cygleyRjb25maWd7Jy1tYXBhbnN3ZXJzJ319KTsKKwl9IGVsc2UgeworCSAgICBteSAkbWF4bGVuID0gMDsKKwkgICAgcHVzaCBAYW5zd2VycyxrZXlzKCV7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fSk7CisJICAgIGZvcmVhY2ggbXkgJGkgKGtleXMoJXskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319KSkgeworCQkkbWF4bGVuID0gbGVuZ3RoKCRpKSBpZiAobGVuZ3RoKCRpKSA+ICRtYXhsZW4pOworCSAgICB9CisJICAgIGZvcmVhY2ggbXkgJGkgKGtleXMoJXskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319KSkgeworCQlwcmludGYoIiAgJS0iIC4gJG1heGxlbiAuICJzOiAlc1xuIiwgJGksIAorCQkgICAgICAgJGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9eyRpfSk7CisJICAgIH0KKwl9CisJcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKKyAgICB9CisgICAgaWYgKCRjb25maWd7Jy10YWlsJ30pIHsKKwlwcmludCAkY29uZmlneyctdGFpbCd9OworCXByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQoJGNvbmZpZ3snLXF1ZXN0aW9uJ30pKSB7CisJd2hpbGUoMSkgeworCSAgICBteSAkbnVtZXhwcjsKKwkgICAgaWYgKCRjb25maWd7Jy1tdWx0aXBsZSd9KSB7CisJCSRudW1leHByID0gJ1tcZFxzLF0rfGFsbHxhfG5vbmV8bic7CisJICAgIH0gZWxzZSB7CisJCSRudW1leHByID0gJ1xkKyc7CisJICAgIH0KKwkgICAgcHVzaCBAYW5zd2VycywiIiBpZiAoJGNvbmZpZ3snLWRlZmF1bHR2YWx1ZSd9KTsKKwkgICAgJGFucyA9IGdldF9hbnN3ZXIoJHRlcm0sICRjb25maWd7Jy1xdWVzdGlvbid9LAorCQkJICAgICAgdmFsaWRfYW5zd2VycygkbnVtZXhwcixAYW5zd2VycyksCisJCQkgICAgICAkY29uZmlneyctZGVmYXVsdHZhbHVlJ30pOworCSAgICBpZiAoJGNvbmZpZ3snLW1hcGFuc3dlcnMnfXskYW5zfSkgeworCQkkYW5zID0gJGNvbmZpZ3snLW1hcGFuc3dlcnMnfXskYW5zfTsKKwkgICAgfQorCisJICAgIGlmICgkYW5zID1+IC9eJG51bWV4cHIkLykgeworCQlpZiAoJGNvbmZpZ3snLW11bHRpcGxlJ30pIHsKKwkJICAgIG15IEBsaXN0ID0gc3BsaXQoL1xzKixccyovLCRhbnMpOworCQkgICAgbXkgQHJldDsKKwkJICAgICRjb3VudCA9IDA7CisJCSAgICBmb3JlYWNoIG15ICRpIChAXykgeworCQkJJGNvdW50Kys7CisJCQlpZiAoJGFucyBlcSAiYWxsIiB8fCAkYW5zIGVxICJhIiAKKwkJCSAgICB8fCBncmVwKC9eJGNvdW50JC8sQGxpc3QpKSB7CisJCQkgICAgcHVzaCBAcmV0LCAkaTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIHJldHVybiBAcmV0OworCQl9IGVsc2UgeworCQkgICAgaWYgKCRhbnMgPD0gMCB8fCAkYW5zID4gJCNfKzEpIHsKKwkJCXdhcm4gImludmFsaWQgc2VsZWN0aW9uOiAkYW5zIFttdXN0IGJlIDEtIiAuCisJCQkgICAgKCQjXysxKSAuICJdXG4iOworCQkgICAgfSBlbHNlIHsKKwkJCXJldHVybiAkYW5zIGlmICgkY29uZmlneyctbnVtZXJpYyd9KTsKKwkJCSRjb3VudCA9IDA7CisJCQlmb3JlYWNoIG15ICRpIChAXykgeworCQkJICAgICRjb3VudCsrOworCQkJICAgIGlmICgkYW5zIGVxICRjb3VudCkgeworCQkJCXJldHVybiAkaTsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJcmV0dXJuICRhbnM7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgbXlfRHVtcGVyIHsKKyAgICBpZiAoJG9wdHN7J0QnfSkgeworCXJldHVybiBEdW1wZXIoQF8pOworICAgIH0gZWxzZSB7CisJcmV0dXJuICJcbiI7CisgICAgfQorfQorCitzdWIgZ2V0X3BlcnNpc3RlbnREaXIgeworICAgIG15ICRmaWxlID0gc2hpZnQ7CisgICAgbXkgJHJlc3VsdCA9IDA7CisgICAgaWYgKCEgLWYgJGZpbGUpIHsKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgb3BlbihJLCRmaWxlKTsKKyAgICB3aGlsZSg8ST4pIHsKKwluZXh0IGlmICgvXlxzKlwjLyk7CisJbmV4dCBpZiAoL15ccyokLyk7CisJY2hvbXA7CisJbXkgKCR0b2tlbiwgJHJlc3QpID0gL15ccyooXHcrKVxzKyguKikvOworICAgICAgICBpZiAobGMoJHRva2VuKSBlcSAicGVyc2lzdGVudGRpciIpIHsKKyAgICAgICAgICAkcmVzdWx0ID0gJHJlc3Q7CisgICAgICAgIH0KKyAgICAgICAgbmV4dDsKKyAgICB9CisgICAgY2xvc2UoSSk7CisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisKKyMgVXNhZ2U6ICAgJndpbjMyX3JlZ19yZWFkKCJrZXkiLCAidmFsdWUiKQorIyBFeGFtcGxlOiAmd2luMzJfcmVnX3JlYWQoIlNPRlRXQVJFXFxOZXQtU05NUCIsIlNOTVBTSEFSRVBBVEgiKTsKKyMgUmV0dXJuczogVmFsdWUgaWYgZm91bmQgaW4gSEtDVSBvciBIQ0xNLiAgT3RoZXJ3aXNlIGFuIGVtcHR5IHN0cmluZy4KK3N1YiB3aW4zMl9yZWdfcmVhZCB7CisgIG15ICRzdWJfa2V5ID0gc2hpZnQ7CisgIG15ICR2YWx1ZSA9IHNoaWZ0OworCisgIHJlcXVpcmUgV2luMzI6OlJlZ2lzdHJ5OworICAgCisgIG15ICgkaGtleSwgJWtleV92YWx1ZXMsICR0ZW1wLCAkbm9fd2Fybik7CisgCisgICMgVHJ5IEhLQ1UgZmlyc3QKKyAgJG5vX3dhcm4gPSAkSEtFWV9DVVJSRU5UX1VTRVI7CisgIGlmICgkSEtFWV9DVVJSRU5UX1VTRVItPk9wZW4oJHN1Yl9rZXksICRoa2V5KSkKKyAgeworICAgICRoa2V5LT5HZXRWYWx1ZXMoXCVrZXlfdmFsdWVzKTsgICAKKyAgICBmb3JlYWNoICR0ZW1wIChzb3J0IGtleXMgJWtleV92YWx1ZXMpIHsKKyAgICAgIGlmICgkdGVtcCBlcSAkdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICRrZXlfdmFsdWVzeyR0ZW1wfVsyXTsKKyAgICAgIH0KKyAgICB9CisgICAgJGhrZXktPkNsb3NlKCk7IAorICB9CisKKyAgIyBUcnkgSEtMTSBzZWNvbmQKKyAgJG5vX3dhcm4gPSAkSEtFWV9MT0NBTF9NQUNISU5FOworICBpZiAoJEhLRVlfTE9DQUxfTUFDSElORS0+T3Blbigkc3ViX2tleSwgJGhrZXkpKQorICB7CisgICAgJGhrZXktPkdldFZhbHVlcyhcJWtleV92YWx1ZXMpOworICAgIGZvcmVhY2ggJHRlbXAgKHNvcnQga2V5cyAla2V5X3ZhbHVlcykgeworICAgICAgaWYgKCR0ZW1wIGVxICR2YWx1ZSkgeworICAgICAgICByZXR1cm4gJGtleV92YWx1ZXN7JHRlbXB9WzJdOworICAgICAgfQorICAgIH0KKyAgICAkaGtleS0+Q2xvc2UoKTsgCisgIH0KKyAgcmV0dXJuICIiOworfQorCisjIFVzYWdlOiAgICZteV9nZXRlbnYoImtleSIpCisjIEV4YW1wbGU6ICZteV9nZXRlbnYoIlNOTVBTSEFSRVBBVEgiKTsKKyMgUmV0dXJuczogVW5peDogIEVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlICh1bmRlZiBpZiBub3QgZGVmaW5lZCkKKyMgICAgICAgICAgV2luMzI6IEhLQ1VcU29mdHdhcmVcTmV0LVNOTVBcKGtleSkgb3IKKyMgICAgICAgICAgV2luMzI6IEhLTE1cU29mdHdhcmVcTmV0LVNOTVBcKGtleSkgb3IKKyMgICAgICAgICAgV2luMzI6IEVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlICh1bmRlZiBpZiBub3QgZGVmaW5lZCkKK3N1YiBteV9nZXRlbnYgeworICBteSAka2V5ID0gc2hpZnQ7CisgIAorICAjIFVuaXgKKyAgaWYgKCReTyBuZSAnTVNXaW4zMicpIHsKKyAgICByZXR1cm4gJEVOVnska2V5fTsKKyAgfQorICAjIFdpbmRvd3MKKyAgZWxzZSB7CisgICAgbXkgJHRlbXAgPSAmd2luMzJfcmVnX3JlYWQoIlNPRlRXQVJFXFxOZXQtU05NUCIsIiRrZXkiKTsKKyAgICBpZiAoJHRlbXAgbmUgIiIpIHsKKyAgICAgIHJldHVybiAkdGVtcDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXR1cm4gJEVOVnska2V5fTsKKyAgICB9CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMjdkNDk4YS4uZWQxODE0ZgotLS0gYS9sdG1haW4uc2gKKysrIGIvbHRtYWluLnNoCkBAIC0xLDUyICsxLDg5IEBACi0jIGx0bWFpbi5zaCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBOT1RFOiBDaGFuZ2luZyB0aGlzIGZpbGUgd2lsbCBub3QgYWZmZWN0IGFueXRoaW5nIHVudGlsIHlvdSByZXJ1biBjb25maWd1cmUuCi0jCisKKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNAorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCiAjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKLSMgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsCisjIG9yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyMgVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uCiAjCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjCisjICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisjICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyMgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIChkZWZhdWx0KQorIyAgICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCisjICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKyMgICAgICAgLS1uby12ZXJib3NlICAgICAgICAgZG9uJ3QgcHJpbnQgdGhlIGV4dHJhIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyMgICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgorIyAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCisjCisjIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICBjbGVhbiAgICAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorIyAgICAgICAgIGNvbXBpbGUgICAgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0CisjICAgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisjICAgICAgICAgZmluaXNoICAgICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKKyMgICAgICAgICBpbnN0YWxsICAgICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKKyMgICAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisjICAgICAgICAgdW5pbnN0YWxsICAgICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CisjCisjIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFdoZW4gcGFzc2VkIGFzIGZpcnN0IG9wdGlvbiwKKyMgYC0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgYE1PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgorIyBUcnkgYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KKyMKKyMgV2hlbiByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBkZXNjcmliZSBhIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaXQgYW5kCisjIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyMKKyMgICAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0CisjICAgICAgICAgc2hlbGw6CQkkU0hFTEwKKyMgICAgICAgICBjb21waWxlcjoJCSRMVENDCisjICAgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyMgICAgICAgICBsaW5rZXI6CQkkTEQgKGdudT8gJHdpdGhfZ251X2xkKQorIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sKSAyLjQKKyMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KKyMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorIyBHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgorIyBHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4KIAotYmFzZW5hbWU9InMsXi4qLywsZyIKLQotIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCi0jIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgotIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKLSMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQotIyBmdW5jdGlvbi4KLXByb2dwYXRoPSIkMCIKLQotIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06Ci1wcm9nbmFtZT1gZWNobyAiJHByb2dwYXRoIiB8ICRTRUQgJGJhc2VuYW1lYAotbW9kZW5hbWU9IiRwcm9nbmFtZSIKLQotIyBHbG9iYWwgdmFyaWFibGVzOgotRVhJVF9TVUNDRVNTPTAKLUVYSVRfRkFJTFVSRT0xCi0KLVBST0dSQU09bHRtYWluLnNoCitQUk9HUkFNPWxpYnRvb2wKIFBBQ0tBR0U9bGlidG9vbAotVkVSU0lPTj0xLjUuMjYKLVRJTUVTVEFNUD0iICgxLjEyMjAuMi40OTIgMjAwOC8wMS8zMCAwNjo0MDo1NikiCitWRVJTSU9OPTIuNAorVElNRVNUQU1QPSIiCitwYWNrYWdlX3JldmlzaW9uPTEuMzI5MwogCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlICh0YWtlbiBmcm9tIEF1dG9jb25mOl9BU19CT1VSTkVfQ09NUEFUSUJMRSkuCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCiBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKQEAgLTYwLDEwNCArOTcsNDYyIEBACiBCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAogRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAogCi0jIENoZWNrIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgJGVjaG8uCi1pZiB0ZXN0ICJYJDEiID0gWC0tbm8tcmVleGVjOyB0aGVuCi0gICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgotICBzaGlmdAotZWxpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgotICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCi0gIDoKLWVsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCi0gICMgWWlwcGVlLCAkZWNobyB3b3JrcyEKLSAgOgotZWxzZQotICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlICRlY2hvIHdpbGwgd29yay4KLSAgZXhlYyAkU0hFTEwgIiRwcm9ncGF0aCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9Ci1maQorIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCit9CiAKLWlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCi0gICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCi0gIHNoaWZ0Ci0gIGNhdCA8PEVPRgotJCoKLUVPRgotICBleGl0ICRFWElUX1NVQ0NFU1MKLWZpCi0KLWRlZmF1bHRfbW9kZT0KLWhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLW1hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKLW1rZGlyPSJta2RpciIKLW12PSJtdiAtZiIKLXJtPSJybSAtZiIKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCi1zZWRfcXVvdGVfc3Vic3Q9J3MvXChbXFxgXFwiJFxcXFxdXCkvXFxcMS9nJwotIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQotY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgotIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCi0gICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgotICBTUDJOTD0ndHIgXDA0MCBcMDEyJwotICBOTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCi0gIDs7Ci0gKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCi0gIFNQMk5MPSd0ciBcMTAwIFxuJwotICBOTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKLSAgOzsKLWVzYWMKLQotIyBOTFMgbnVpc2FuY2VzLgotIyBPbmx5IHNldCBMQU5HIGFuZCBMQ19BTEwgdG8gQyBpZiBhbHJlYWR5IHNldC4KLSMgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kCi0jIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCi0jIFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgotbHRfZW52PQorIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KK2x0X3VzZXJfbG9jYWxlPQorbHRfc2FmZV9sb2NhbGU9CiBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKIGRvCiAgIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgotCSAgc2F2ZV8kbHRfdmFyPVwkJGx0X3ZhcgotCSAgbHRfZW52PVwiJGx0X3Zhcj1cJCRsdF92YXIgXCRsdF9lbnZcIgotCSAgJGx0X3Zhcj1DCisgICAgICAgICAgc2F2ZV8kbHRfdmFyPVwkJGx0X3ZhcgorICAgICAgICAgICRsdF92YXI9QwogCSAgZXhwb3J0ICRsdF92YXIKKwkgIGx0X3VzZXJfbG9jYWxlPVwiJGx0X3Zhcj1cXFwkc2F2ZV9cJGx0X3ZhcjsgXCRsdF91c2VyX2xvY2FsZVwiCisJICBsdF9zYWZlX2xvY2FsZT1cIiRsdF92YXI9QzsgXCRsdF9zYWZlX2xvY2FsZVwiCiAJZmkiCiBkb25lCitMQ19BTEw9QworTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFIExDX0FMTAogCi1pZiB0ZXN0IC1uICIkbHRfZW52IjsgdGhlbgotICBsdF9lbnY9ImVudiAkbHRfZW52IgotZmkKKyRsdF91bnNldCBDRFBBVEgKKworCisjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKKyMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCisjIGZ1bmN0aW9uLgorcHJvZ3BhdGg9IiQwIgorCisKKworOiAke0NQPSJjcCAtZiJ9Cit0ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KKzogJHtFR1JFUD0iZ3JlcCAtRSJ9Cis6ICR7RkdSRVA9ImdyZXAgLUYifQorOiAke0dSRVA9ImdyZXAifQorOiAke0xOX1M9ImxuIC1zIn0KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTRUQ9InNlZCJ9Cis6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKzogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitFWElUX1NVQ0NFU1M9MAorRVhJVF9GQUlMVVJFPTEKK0VYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KK0VYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCiAKICMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CiBsdF9ubD0nCiAnCiBJRlM9IiAJJGx0X25sIgogCi1pZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KLSAgJGVjaG8gIiRtb2RlbmFtZTogbm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIgMT4mMgotICAkZWNobyAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4gIFNlZSB0aGUgJFBBQ0tBR0UgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKLSAgZXhpdCAkRVhJVF9GQUlMVVJFCi1maQorZGlybmFtZT0icywvW14vXSokLCwiCitiYXNlbmFtZT0icyxeLiovLCwiCiAKLSMgR2xvYmFsIHZhcmlhYmxlcy4KLW1vZGU9JGRlZmF1bHRfbW9kZQotbm9ub3B0PQotcHJldj0KLXByZXZvcHQ9Ci1ydW49Ci1zaG93PSIkZWNobyIKLXNob3dfaGVscD0KLWV4ZWN1dGVfZGxmaWxlcz0KLWR1cGxpY2F0ZV9kZXBzPW5vCi1wcmVzZXJ2ZV9hcmdzPQotbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgotbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgotZXh0cmFjdGVkX2FyY2hpdmVzPQotZXh0cmFjdGVkX3NlcmlhbD0wCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgICBmaQorfSAjIGZ1bmNfZGlybmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBTaGVsbCBmdW5jdGlvbiBkZWZpbml0aW9uczoKLSMgVGhpcyBzZWVtcyB0byBiZSB0aGUgYmVzdCBwbGFjZSBmb3IgdGhlbQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorfSAjIGZ1bmNfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgICBmaQorICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAorfSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCitmdW5jX3N0cmlwbmFtZSAoKQoreworICAgIGNhc2UgJHsyfSBpbgorICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKyAgICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKyAgICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorcGF0aGNhcj0ncyxeL1woW14vXSpcKS4qJCxcMSwnCitwYXRoY2RyPSdzLF4vW14vXSosLCcKK3JlbW92ZWRvdHBhcnRzPSc6ZG90c2wKKwkJc0AvXC4vQC9AZworCQl0IGRvdHNsCisJCXMsL1wuJCwvLCcKK2NvbGxhcHNlc2xhc2hlcz0nc0AvXHsxLFx9QC9AZycKK2ZpbmFsc2xhc2g9J3MsLyokLC8sJworCisjIGZ1bmNfbm9ybWFsX2Fic3BhdGggUEFUSAorIyBSZW1vdmUgZG91YmxlZC11cCBhbmQgdHJhaWxpbmcgc2xhc2hlcywgIi4iIHBhdGggY29tcG9uZW50cywKKyMgYW5kIGNhbmNlbCBvdXQgYW55ICIuLiIgcGF0aCBjb21wb25lbnRzIGluIFBBVEggYWZ0ZXIgbWFraW5nCisjIGl0IGFuIGFic29sdXRlIHBhdGguCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCitmdW5jX25vcm1hbF9hYnNwYXRoICgpCit7CisgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGggaW4KKyAgICAiIikKKyAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgImBwd2RgIgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgcmV0dXJuCisgICAgOzsKKyAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKKyAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOworICAgICMgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgY2FzZSdzIGZpcnN0LW1hdGNoIGJlaGF2aW91ci4KKyAgICAvLy8qKQorICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKyAgICA7OworICAgIC8vKikKKyAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJworICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcworICAgICAgIyBvdmVyIENJRlMvU01CLCBzbyB3ZSBjb25zZXJ2ZSBhIGxlYWRpbmcgZG91YmxlIHNsYXNoIGlmIGZvdW5kLgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LworICAgIDs7CisgICAgLyopCisgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgOzsKKyAgICAqKQorICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWBwd2RgLyRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoCisgICAgOzsKKyAgZXNhYworICAjIENhbmNlbCBvdXQgYWxsIHRoZSBzaW1wbGUgc3R1ZmYgdG8gc2F2ZSBpdGVyYXRpb25zLiAgV2UgYWxzbyB3YW50CisgICMgdGhlIHBhdGggdG8gZW5kIHdpdGggYSBzbGFzaCBmb3IgZWFzZSBvZiBwYXJzaW5nLCBzbyBtYWtlIHN1cmUKKyAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHJlbW92ZWRvdHBhcnRzIiAtZSAiJGNvbGxhcHNlc2xhc2hlcyIgLWUgIiRmaW5hbHNsYXNoImAKKyAgd2hpbGUgOjsgZG8KKyAgICAjIFByb2Nlc3NlZCBpdCBhbGwgeWV0PworICAgIGlmIHRlc3QgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiA9IC8gOyB0aGVuCisgICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgorICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRwYXRoY2FyImAKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcGF0aGNkciJgCisgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAorICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgorICAgICAgIiIpCisgICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KKyAgICAgIDs7CisgICAgICAuLikKKyAgICAgICAgIyBQYXJlbnQgZGlyOyBzdHJpcCBsYXN0IGFzc2VtYmxlZCBjb21wb25lbnQgZnJvbSByZXN1bHQuCisgICAgICAgIGZ1bmNfZGlybmFtZSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgOzsKKyAgICAgICopCisgICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdC8kZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50CisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICAjIFJlc3RvcmUgbGVhZGluZyBkb3VibGUtc2xhc2ggaWYgb25lIHdhcyBmb3VuZCBvbiBlbnRyeS4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Cit9CisKKyMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKKyMgZ2VuZXJhdGVzIGEgcmVsYXRpdmUgcGF0aCBmcm9tIFNSQ0RJUiB0byBEU1RESVIsIHdpdGggYSB0cmFpbGluZworIyBzbGFzaCBpZiBub24tZW1wdHksIHN1aXRhYmxlIGZvciBpbW1lZGlhdGVseSBhcHBlbmRpbmcgYSBmaWxlbmFtZQorIyB3aXRob3V0IG5lZWRpbmcgdG8gYXBwZW5kIGEgc2VwYXJhdG9yLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCitmdW5jX3JlbGF0aXZlX3BhdGggKCkKK3sKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0KKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMiIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisKKyAgIyBBc2NlbmQgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBsaWJkaXIKKyAgd2hpbGUgOjsgZG8KKyAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisgICAgY2FzZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIgaW4KKyAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKKyAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0KKyAgICAgICAgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciopCisgICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKKyAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKyAgICAgICAgZmkKKyAgICAgICAgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JHtmdW5jX2Rpcm5hbWVfcmVzdWx0fQorICAgICAgICBpZiB0ZXN0ICJ4JGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiA9IHggOyB0aGVuCisgICAgICAgICAgIyBIYXZlIHRvIGRlc2NlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QhCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCisgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCisgIGlmIHRlc3QgIngkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiAhPSB4IDsgdGhlbgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JHtmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0fS8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0KKyAgZmkKKworICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiBlbXB0eSBzdHJpbmcsCisgICMgZWxzZSByZWxhdGl2ZSBwYXRoIGVuZGluZyB3aXRoIGEgc2xhc2g7IGVpdGhlciB3YXksIHRhcmdldAorICAjIGZpbGUgbmFtZSBjYW4gYmUgZGlyZWN0bHkgYXBwZW5kZWQuCisgIGlmIHRlc3QgISAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJy4vJyAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvIgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmaQorfQorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRwcm9ncGF0aCIKK3Byb2duYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKKyAgKikKKyAgICAgc2F2ZV9JRlM9IiRJRlMiCisgICAgIElGUz06CisgICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbworICAgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKKyAgICAgZG9uZQorICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbYCIkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKyMgc3RyaW5nIGxpdGVyYWxseS4KK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAorIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKKyMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgorbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworCisjIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQorIyBgXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mIGBcJyBwcmVjZWRlZCBhICckJworIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCisjIFNpbmNlIGVhY2ggaW5wdXQgYFwnIGlzIG5vdyB0d28gYFwncywgbG9vayBmb3IgYW55IG51bWJlciBvZiBydW5zIG9mCisjIGZvdXIgYFwncyBmb2xsb3dlZCBieSB0d28gYFwncyBhbmQgdGhlbiBhICckJy4gIGBcJyB0aGF0ICckJy4KK2JzPSdcXCcKK2JzMj0nXFxcXCcKK2JzND0nXFxcXFxcXFwnCitkb2xsYXI9J1wkJworc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKKyAgcy8kYnM0LyZcXAorL2cKKyAgcy9eJGJzMiRkb2xsYXIvJGJzJi8KKyAgcy9cXChbXiRic11cXCkkYnMyJGRvbGxhci9cXDEkYnMyJGJzJGRvbGxhci9nCisgIHMvXG4vL2ciCisKKyMgU3RhbmRhcmQgb3B0aW9uczoKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfaGVscD1mYWxzZQorb3B0X3F1aWV0PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQorb3B0X3dhcm5pbmc9OgorCisjIGZ1bmNfZWNobyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBtb2RlCisjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KK2Z1bmNfZWNobyAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9JCoiCit9CisKKyMgZnVuY192ZXJib3NlIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCit7CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIKK30KKworIyBmdW5jX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9IiR7MSsiJEAifSAxPiYyCit9CisKKyMgZnVuY193YXJuaW5nIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH13YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKworICAgICMgYmFzaCBidWcgYWdhaW46CisgICAgOgorfQorCisjIGZ1bmNfZmF0YWxfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgorZnVuY19mYXRhbF9lcnJvciAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19mYXRhbF9oZWxwIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2hlbHAgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRoZWxwIgorfQoraGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgIyMgZGVmYXVsdAorCisKKyMgZnVuY19ncmVwIGV4cHJlc3Npb24gZmlsZW5hbWUKKyMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgorZnVuY19ncmVwICgpCit7CisgICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQorfQorCisKKyMgZnVuY19ta2Rpcl9wIGRpcmVjdG9yeS1wYXRoCisjIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgorZnVuY19ta2Rpcl9wICgpCit7CisgICAgbXlfZGlyZWN0b3J5X3BhdGg9IiQxIgorICAgIG15X2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJG15X2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0ICIkb3B0X2RyeV9ydW4iICE9ICI6IjsgdGhlbgorCisgICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nCisgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbgorICAgICAgICAtKikgbXlfZGlyZWN0b3J5X3BhdGg9Ii4vJG15X2RpcmVjdG9yeV9wYXRoIiA7OworICAgICAgZXNhYworCisgICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCisgICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCI7IGRvCisgICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAorCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KKyAgICAgICAgbXlfZGlyX2xpc3Q9IiRteV9kaXJlY3RvcnlfcGF0aDokbXlfZGlyX2xpc3QiCisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgbXlfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorICAgICAgZG9uZQorICAgICAgbXlfZGlyX2xpc3Q9YCRFQ0hPICIkbXlfZGlyX2xpc3QiIHwgJFNFRCAncyw6KiQsLCdgCisKKyAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCisgICAgICBmb3IgbXlfZGlyIGluICRteV9kaXJfbGlzdDsgZG8KKwlJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcworICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAorICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQorICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisKKyAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KKyAgICAgIHRlc3QgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgorICAgIGZpCit9CisKIAogIyBmdW5jX21rdGVtcGRpciBbc3RyaW5nXQogIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZwpAQCAtMTY3LDcgKzU2Miw3IEBACiB7CiAgICAgbXlfdGVtcGxhdGU9IiR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9IgogCi0gICAgaWYgdGVzdCAiJHJ1biIgPSAiOiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkb3B0X2RyeV9ydW4iID0gIjoiOyB0aGVuCiAgICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQogICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0kJCIKICAgICBlbHNlCkBAIC0xNzYsNzIgKzU3MSw4MDAgQEAKICAgICAgIG15X3RtcGRpcj1gbWt0ZW1wIC1kICIke215X3RlbXBsYXRlfS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCiAKICAgICAgIGlmIHRlc3QgISAtZCAiJG15X3RtcGRpciI7IHRoZW4KLQkjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKLQlteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCisgICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQorICAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCiAKLQlzYXZlX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCi0JdW1hc2sgMDA3NwotCSRta2RpciAiJG15X3RtcGRpciIKLQl1bWFzayAkc2F2ZV9ta3RlbXBkaXJfdW1hc2sKKyAgICAgICAgc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJG15X3RtcGRpciIKKyAgICAgICAgdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCiAgICAgICBmaQogCiAgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKLSAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IHsKLSAgICAgICAgJGVjaG8gImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIiAxPiYyCi0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICB9CisgICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgogICAgIGZpCiAKLSAgICAkZWNobyAiWCRteV90bXBkaXIiIHwgJFhzZWQKKyAgICAkRUNITyAiJG15X3RtcGRpciIKIH0KIAogCi0jIGZ1bmNfd2luMzJfbGliaWQgYXJnCi0jIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKLSMKLSMgTmVlZCBhIGxvdCBvZiBnb28gdG8gaGFuZGxlICpib3RoKiBETExzIGFuZCBpbXBvcnQgbGlicwotIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKLSMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgotZnVuY193aW4zMl9saWJpZCAoKQorIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXIuCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFsdWVzOiBGVU5DX1FVT1RFX0ZPUl9FVkFMX1JFU1VMVAorIyBpcyBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwsIHdoZXJlYXMKKyMgRlVOQ19RVU9URV9GT1JfRVZBTF9VTlFVT1RFRF9SRVNVTFQgaGFzIG1lcmVseSBhbGwgY2hhcmFjdGVycworIyB3aGljaCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorZnVuY19xdW90ZV9mb3JfZXZhbCAoKQogewotICB3aW4zMl9saWJpZF90eXBlPSJ1bmtub3duIgotICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAotICBjYXNlICR3aW4zMl9maWxlcmVzIGluCi0gICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAotICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKLSAgICA7OwotICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCi0gICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfCBcCi0gICAgICAkRUdSRVAgLWUgJ2ZpbGUgZm9ybWF0IHBlLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycgPi9kZXYvbnVsbCA7IHRoZW4KLSAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSAkMSB8IFwKLQkkU0VEIC1uIC1lICcxLDEwMHsKLQkJLyBJIC97Ci0JCQlzLC4qLGltcG9ydCwKLQkJCXAKLQkJCXEKLQkJCX0KLQkJfSdgCi0gICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgotICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7OwotICAgICAgKikgICAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIHN0YXRpYyI7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgOzsKLSAgKkRMTCopCi0gICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKLSAgICA7OwotICAqZXhlY3V0YWJsZSopICMgYnV0IHNoZWxsIHNjcmlwdHMgYXJlICJleGVjdXRhYmxlIiB0b28uLi4KLSAgICBjYXNlICR3aW4zMl9maWxlcmVzIGluCi0gICAgKk1TXCBXaW5kb3dzXCBQRVwgSW50ZWwqKQotICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKLSAgICAgIDs7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJcJF0qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7CiAgICAgZXNhYworCisgICAgY2FzZSAkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIGFuZCB2YXJpYWJsZQorICAgICAgIyBleHBhbnNpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IlwiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0XCIiCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IgorICAgIGVzYWMKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAorIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIl0qKQorCW15X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAorCSAgICAtZSAiJGRvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7CisgICAgICAqKQorICAgICAgICBteV9hcmc9IiQxIiA7OworICAgIGVzYWMKKworICAgIGNhc2UgJG15X2FyZyBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nIGFuZCBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBteV9hcmc9IlwiJG15X2FyZ1wiIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9IiRteV9hcmciCit9CisKKworIyBmdW5jX3Nob3dfZXZhbCBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4KK2Z1bmNfc2hvd19ldmFsICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKworIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuICBVc2UgdGhlIHNhdmVkIGxvY2FsZSBmb3IgZXZhbHVhdGlvbi4KK2Z1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRsdF91c2VyX2xvY2FsZQorCSAgICAkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBldmFsICIkbHRfc2FmZV9sb2NhbGUiCisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworIyBmdW5jX3RyX3NoCisjIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgorIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCisjIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAorIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KK2Z1bmNfdHJfc2ggKCkKK3sKKyAgY2FzZSAkMSBpbgorICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzL15cKFswLTldXCkvX1wxLzsgcy9bXmEtekEtWjAtOV9dL18vZydgCisgICAgOzsKKyAgKiApCisgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKICAgICA7OwogICBlc2FjCi0gICRlY2hvICR3aW4zMl9saWJpZF90eXBlCiB9CiAKIAorIyBmdW5jX3ZlcnNpb24KKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY192ZXJzaW9uICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgJFNFRCAtbiAnLyhDKS8hYiBnbworCTptb3JlCisJL1wuLyF7CisJICBOCisJICBzL1xuIyAvIC8KKwkgIGIgbW9yZQorCX0KKwk6Z28KKwkvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisgICAgICAgIHMvXCgoQylcKVsgMC05LC1dKlwoIFsxLTldWzAtOV0qXCkvXDFcMi8KKyAgICAgICAgcAorICAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgIGV4aXQgJD8KK30KKworIyBmdW5jX3VzYWdlCisjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdXNhZ2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLworCXAKKyAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgZWNobworICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfaGVscCBbTk9FWElUXQorIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdCwKKyMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KK2Z1bmNfaGVscCAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisJOnByaW50CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCisJcypcJGhvc3QqJyIkaG9zdCInKgorCXMqXCRTSEVMTConIiRTSEVMTCInKgorCXMqXCRMVENDKiciJExUQ0MiJyoKKwlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKKwlzKlwkTEQqJyIkTEQiJyoKKwlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KKwlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoYXV0b2NvbmYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlwCisJZAorICAgICB9CisgICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKKyAgICAgL14jIEdlbmVyYWwgaGVscCB1c2luZy9iIHByaW50CisgICAgICcgPCAiJHByb2dwYXRoIgorICAgIHJldD0kPworICAgIGlmIHRlc3QgLXogIiQxIjsgdGhlbgorICAgICAgZXhpdCAkcmV0CisgICAgZmkKK30KKworIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAorIyBleGl0X2NtZC4KK2Z1bmNfbWlzc2luZ19hcmcgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMS4iCisgICAgZXhpdF9jbWQ9ZXhpdAorfQorCisKKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgc2hvcnRvcHQKKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAorIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgorZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKK3sKKyAgICBteV9zZWRfc2hvcnRfb3B0PScxcy9eXCguLlwpLiokL1wxLztxJworICAgIG15X3NlZF9zaG9ydF9yZXN0PScxcy9eLi5cKC4qXCkkL1wxLztxJworCisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfb3B0ImAKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X3Jlc3QiYAorfSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19zcGxpdF9sb25nX29wdCBsb25nb3B0CisjIFNldCBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIHNoZWxsCisjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgTE9OR09QVCBhdCB0aGUgYD0nIHNpZ24uCitmdW5jX3NwbGl0X2xvbmdfb3B0ICgpCit7CisgICAgbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtLVtePV0qXCk9LiovXDEvO3EnCisgICAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKKworICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCit9ICMgZnVuY19zcGxpdF9sb25nX29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworZXhpdF9jbWQ9OgorCisKKworCisKK21hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKK21hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgorCisjIEdsb2JhbCB2YXJpYWJsZXMuCitub25vcHQ9CitwcmVzZXJ2ZV9hcmdzPQorbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgorZXh0cmFjdGVkX2FyY2hpdmVzPQorZXh0cmFjdGVkX3NlcmlhbD0wCisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgICBldmFsICIkezF9PVwkJHsxfVwkezJ9IgorfSAjIGZ1bmNfYXBwZW5kIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisjIGZ1bmNfYXBwZW5kX3F1b3RlZCB2YXIgdmFsdWUKKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisjIGJ5IGEgc3BhY2UuCitmdW5jX2FwcGVuZF9xdW90ZWQgKCkKK3sKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorICAgIGV2YWwgIiR7MX09XCQkezF9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKK30gIyBmdW5jX2FwcGVuZF9xdW90ZWQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIke0B9ImAKK30gIyBmdW5jX2FyaXRoIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJHsxfSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorfSAjIGZ1bmNfbGVuIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorfSAjIGZ1bmNfbG8ybyBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorfSAjIGZ1bmNfeGZvcm0gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2Vycm9yICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgorfQorCisKKyMgZnVuY19jb25maWcKKyMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgorZnVuY19jb25maWcgKCkKK3sKKyAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKKyAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJworCisgICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgorCisgICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KKyAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KKyAgICAgICRTRUQgLW4gIi8kcmVfYmVnaW5jZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkLywvJHJlX2VuZGNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvcCIgPCAiJHByb2dwYXRoIgorICAgIGRvbmUKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2ZlYXR1cmVzCisjIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2Z1bmNfZmVhdHVyZXMgKCkKK3sKKyAgICBlY2hvICJob3N0OiAkaG9zdCIKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgIyBHbG9iYWwgdmFyaWFibGU6CisgIHRhZ25hbWU9IiQxIgorCisgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCisKKyAgIyBWYWxpZGF0ZSB0YWduYW1lLgorICBjYXNlICR0YWduYW1lIGluCisgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisgICAgICA7OworICBlc2FjCisKKyAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKKyAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICBDQykgOzsKKyAgICAqKQorICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKworCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCisJIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwlldmFsICIkZXh0cmFjdGVkY2YiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorIyByZWxlYXNlIG9mIGxpYnRvb2wuCitmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKK3sKKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBlbHNlCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICBmaQorCisgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorICBmaQorfQorCisKKyMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorY2FzZSAkMSBpbgorY2xlYW58Y2xlYXxjbGV8Y2wpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2NvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisgIDs7CitmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2luc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworbGlua3xsaW58bGl8bCkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisgIDs7Cit1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2VzYWMKKworCisKKyMgT3B0aW9uIGRlZmF1bHRzOgorb3B0X2RlYnVnPToKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfY29uZmlnPWZhbHNlCitvcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKK29wdF9mZWF0dXJlcz1mYWxzZQorb3B0X2ZpbmlzaD1mYWxzZQorb3B0X2hlbHA9ZmFsc2UKK29wdF9oZWxwX2FsbD1mYWxzZQorb3B0X3NpbGVudD06CitvcHRfdmVyYm9zZT06CitvcHRfc2lsZW50PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQorCisKKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluIHRoZQorIyBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgLS12ZXJzaW9uJyBoYXBwZW4gYXMgcXVpY2tseSBhcyB3ZSBjYW4uCit7CisgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKKyAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICBvcHQ9IiQxIgorICAgIHNoaWZ0CisgICAgY2FzZSAkb3B0IGluCisgICAgICAtLWRlYnVnfC14KQlvcHRfZGVidWc9J3NldCAteCcKKwkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKwkJCSRvcHRfZGVidWcKKwkJCTs7CisgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisJCQlvcHRfZHJ5X3J1bj06CisJCQk7OworICAgICAgLS1jb25maWcpCisJCQlvcHRfY29uZmlnPToKK2Z1bmNfY29uZmlnCisJCQk7OworICAgICAgLS1kbG9wZW58LWRsb3BlbikKKwkJCW9wdGFyZz0iJDEiCisJCQlvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KK30kb3B0YXJnIgorCQkJc2hpZnQKKwkJCTs7CisgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorCQkJb3B0X3ByZXNlcnZlX2R1cF9kZXBzPToKKwkJCTs7CisgICAgICAtLWZlYXR1cmVzKQorCQkJb3B0X2ZlYXR1cmVzPToKK2Z1bmNfZmVhdHVyZXMKKwkJCTs7CisgICAgICAtLWZpbmlzaCkKKwkJCW9wdF9maW5pc2g9Ogorc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorCQkJOzsKKyAgICAgIC0taGVscCkKKwkJCW9wdF9oZWxwPToKKwkJCTs7CisgICAgICAtLWhlbHAtYWxsKQorCQkJb3B0X2hlbHBfYWxsPToKK29wdF9oZWxwPSc6IGhlbHAtYWxsJworCQkJOzsKKyAgICAgIC0tbW9kZSkKKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworCQkJb3B0YXJnPSIkMSIKKwkJCW9wdF9tb2RlPSIkb3B0YXJnIgorY2FzZSAkb3B0YXJnIGluCisgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisKKyAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCisgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCisgICAgIGV4aXRfY21kPWV4aXQKKyAgICAgYnJlYWsKKyAgICAgOzsKK2VzYWMKKwkJCXNoaWZ0CisJCQk7OworICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKKwkJCW9wdF9zaWxlbnQ9ZmFsc2UKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorCQkJOzsKKyAgICAgIC0tbm8tdmVyYm9zZSkKKwkJCW9wdF92ZXJib3NlPWZhbHNlCitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKwkJCTs7CisgICAgICAtLXNpbGVudHwtLXF1aWV0KQorCQkJb3B0X3NpbGVudD06CitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKyAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKwkJCTs7CisgICAgICAtLXZlcmJvc2V8LXYpCisJCQlvcHRfdmVyYm9zZT06CitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKK29wdF9zaWxlbnQ9ZmFsc2UKKwkJCTs7CisgICAgICAtLXRhZykKKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworCQkJb3B0YXJnPSIkMSIKKwkJCW9wdF90YWc9IiRvcHRhcmciCitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCAkb3B0YXJnIgorZnVuY19lbmFibGVfdGFnICIkb3B0YXJnIgorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJOzsKKyAgICAgIC0taGVscCkJCWZ1bmNfaGVscAkJCQk7OworICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJOzsKKworICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9uczoKKyAgICAgIC0tKj0qKQorCQkJZnVuY19zcGxpdF9sb25nX29wdCAiJG9wdCIKKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSIgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKyAgICAgIC1cPyp8LWgqfC1uKnwtdiopCisJCQlmdW5jX3NwbGl0X3Nob3J0X29wdCAiJG9wdCIKKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLS0pCQlicmVhawkJCQkJOzsKKyAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciIDs7CisgICAgICAqKQkJc2V0IGR1bW15ICIkb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIFZhbGlkYXRlIG9wdGlvbnM6CisKKyAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKyAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisgICAgbm9ub3B0PSIkb3B0IgorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBwcmVzZXJ2ZSAtLWRlYnVnCisgIHRlc3QgIiRvcHRfZGVidWciID0gOiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKKworICBjYXNlICRob3N0IGluCisgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKikKKyAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKyAgICAgIDs7CisgICAgKikKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcworICAgICAgOzsKKyAgZXNhYworCisgICRvcHRfaGVscCB8fCB7CisgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorICAgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisgICAgZmkKKworICAgICMgRGFyd2luIHN1Y2tzCisgICAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKworICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisgICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgIiRvcHRfbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgorICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorCisgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorICAgIGdlbmVyaWNfaGVscD0iJGhlbHAiCisgICAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgIH0KKworCisgICMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQKKyAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKK30KKworCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICAgIE1haW4uICAgICMjCisjIyAtLS0tLS0tLS0tLSAjIworCisjIGZ1bmNfbGFsaWJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sYWxpYl9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmCisgICAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwgXAorICAgICAgICB8ICRHUkVQICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIgPiAvZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbGFsaWJfdW5zYWZlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgY2hlY2sgYXMgZnVuY19sYWxpYl9wIHdpdGhvdXQKKyMgcmVzb3J0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLiAgVG8gdGhpcyBlbmQsIGl0IHJlZGlyZWN0cyBzdGRpbiBhbmQKKyMgY2xvc2VzIGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5nIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IuCisjIEFzIGEgc2FmZXR5IG1lYXN1cmUsIHVzZSBpdCBvbmx5IHdoZXJlIGEgbmVnYXRpdmUgcmVzdWx0IHdvdWxkIGJlCisjIGZhdGFsIGFueXdheS4gIFdvcmtzIGlmIGBmaWxlJyBkb2VzIG5vdCBleGlzdC4KK2Z1bmNfbGFsaWJfdW5zYWZlX3AgKCkKK3sKKyAgICBsYWxpYl9wPW5vCisgICAgaWYgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXIgIiQxIiAmJiBleGVjIDU8JjAgPCIkMSI7IHRoZW4KKwlmb3IgbGFsaWJfcF9sIGluIDEgMiAzIDQKKwlkbworCSAgICByZWFkIGxhbGliX3BfbGluZQorCSAgICBjYXNlICIkbGFsaWJfcF9saW5lIiBpbgorCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7CisJICAgIGVzYWMKKwlkb25lCisJZXhlYyAwPCY1IDU8Ji0KKyAgICBmaQorICAgIHRlc3QgIiRsYWxpYl9wIiA9IHllcworfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAoKQoreworICAgIGZ1bmNfbGFsaWJfcCAiJDEiCit9CisKKyMgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9CisgICAgY2FzZSAkMSBpbgorICAgICouZXhlKSA7OworICAgICopIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PS5leGUgOzsKKyAgICBlc2FjCisgICAgJEdSRVAgIiRtYWdpY19leGUiICIkMSRmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeCIgPi9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSBmaWxlCisjIEFzc3VtZXMgZmlsZSBpcyBhbiBsdHdyYXBwZXJfZXhlY3V0YWJsZQorIyB1c2VzICRmaWxlIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZW5hbWUgZm9yIGEKKyMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCit7CisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgorICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkMSIgfHwgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSIKK30KKworCisjIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCisjIEV4ZWN1dGUgdGlsZGUtZGVsaW1pdGVkIENPTU1BTkRTLgorIyBJZiBGQUlMX0NNRCBpcyBnaXZlbiwgZXZhbCB0aGF0IHVwb24gZmFpbHVyZS4KKyMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQorZnVuY19leGVjdXRlX2NtZHMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JworICAgIGZvciBjbWQgaW4gJDE7IGRvCisgICAgICBJRlM9JHNhdmVfaWZzCisgICAgICBldmFsIGNtZD1cIiRjbWRcIgorICAgICAgZnVuY19zaG93X2V2YWwgIiRjbWQiICIkezItOn0iCisgICAgZG9uZQorICAgIElGUz0kc2F2ZV9pZnMKK30KKworCisjIGZ1bmNfc291cmNlIGZpbGUKKyMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3RvcnkgY29tcG9uZW50IGlmIG5lY2Vzc2FyeS4KKyMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bworIyBGSUxFIGV2ZW4gaWYgYm90aCBGSUxFIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCisjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKKyMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KK2Z1bmNfc291cmNlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgJDEgaW4KKyAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKKyAgICAqKQkJLiAiLi8kMSIgOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX3Jlc29sdmVfc3lzcm9vdCBQQVRICisjIFJlcGxhY2UgYSBsZWFkaW5nID0gaW4gUEFUSCB3aXRoIGEgc3lzcm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bworIyBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKK2Z1bmNfcmVzb2x2ZV9zeXNyb290ICgpCit7CisgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kMQorICBjYXNlICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgaW4KKyAgPSopCisgICAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19yZXBsYWNlX3N5c3Jvb3QgUEFUSAorIyBJZiBQQVRIIGJlZ2lucyB3aXRoIHRoZSBzeXNyb290LCByZXBsYWNlIGl0IHdpdGggPSBhbmQKKyMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KK2Z1bmNfcmVwbGFjZV9zeXNyb290ICgpCit7CisgIGNhc2UgIiRsdF9zeXNyb290OiQxIiBpbgorICA/KjoiJGx0X3N5c3Jvb3QiKikKKyAgICBmdW5jX3N0cmlwbmFtZSAiJGx0X3N5c3Jvb3QiICcnICIkMSIKKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9Ij0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorICAgIDs7CisgICopCisgICAgIyBJbmNsdWRpbmcgbm8gc3lzcm9vdC4KKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9JDEKKyAgICA7OworICBlc2FjCit9CisKICMgZnVuY19pbmZlcl90YWcgYXJnCiAjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKICMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCkBAIC0yNTAsMzkgKzEzNzMsMzYgQEAKICMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCiBmdW5jX2luZmVyX3RhZyAoKQogeworICAgICRvcHRfZGVidWcKICAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgogICAgICAgQ0NfcXVvdGVkPQogICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCi0JY2FzZSAkYXJnIGluCi0JICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQkgIGFyZz0iXCIkYXJnXCIiCi0JICA7OwotCWVzYWMKLQlDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGFyZyIKKwlmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgogICAgICAgZG9uZQorICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCiAgICAgICBjYXNlICRAIGluCiAgICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAogICAgICAgIyBidXQgbm90IGZyb20gdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlndXJlIHdhcyBydW4uCi0gICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiIGAkZWNobyAkQ0NgICIqIHwgImAkZWNobyAkQ0NgICIqIHwgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgYCRlY2hvICRDQ19xdW90ZWRgICIqIHwgImAkZWNobyAkQ0NfcXVvdGVkYCAiKikgOzsKKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKyAgICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikgOzsKICAgICAgICMgQmxhbmtzIGF0IHRoZSBzdGFydCBvZiAkYmFzZV9jb21waWxlIHdpbGwgY2F1c2UgdGhpcyB0byBmYWlsCiAgICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCiAgICAgICAqKQogCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KLQkgIGlmIGdyZXAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgogCSAgICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgogCSAgICBDQ19xdW90ZWQ9CiAJICAgIGZvciBhcmcgaW4gJENDOyBkbwotCSAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCi0JICAgIGNhc2UgJGFyZyBpbgotCSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCSAgICAgIGFyZz0iXCIkYXJnXCIiCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICBDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGFyZyIKLQkgIGRvbmUKKwkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCisJICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKwkgICAgZG9uZQorCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisJICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAogCSAgICBjYXNlICIkQCAiIGluCi0JICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiBgJGVjaG8gJENDYCAiKiB8ICJgJGVjaG8gJENDYCAiKiB8ICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiIGAkZWNobyAkQ0NfcXVvdGVkYCAiKiB8ICJgJGVjaG8gJENDX3F1b3RlZGAgIiopCisJICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKwkgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKQogCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCiAJICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KIAkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgpAQCAtMjk2LDExICsxNDE2LDEwIEBACiAJIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAogCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgogCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogdW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgotCSAgJGVjaG8gIiRtb2RlbmFtZTogc3BlY2lmeSBhIHRhZyB3aXRoIFxgLS10YWcnIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgJGVjaG8gIiRtb2RlbmFtZTogdXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgInNwZWNpZnkgYSB0YWcgd2l0aCBcYC0tdGFnJyIKKyMJZWxzZQorIwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCiAJZmkKIAk7OwogICAgICAgZXNhYwpAQCAtMzA4LDM1NCArMTQyNyw1MjggQEAKIH0KIAogCi0jIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKLWZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCisKKyMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQorIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKKyMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCitmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCiB7Ci0gICAgZl9leF9hbl9hcl9kaXI9IiQxIjsgc2hpZnQKLSAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCi0KLSAgICAkc2hvdyAiKGNkICRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCAkZl9leF9hbl9hcl9vbGRsaWIpIgotICAgICRydW4gZXZhbCAiKGNkIFwkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggXCRmX2V4X2FuX2FyX29sZGxpYikiIHx8IGV4aXQgJD8KLSAgICBpZiAoJEFSIHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgotICAgICA6Ci0gICAgZWxzZQotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogRVJST1I6IG9iamVjdCBuYW1lIGNvbmZsaWN0czogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKLX0KLQotIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KLWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQotewotICAgIG15X2dlbnRvcD0iJDEiOyBzaGlmdAotICAgIG15X29sZGxpYnM9JHsxKyIkQCJ9Ci0gICAgbXlfb2xkb2Jqcz0iIgotICAgIG15X3hsaWI9IiIKLSAgICBteV94YWJzPSIiCi0gICAgbXlfeGRpcj0iIgotICAgIG15X3N0YXR1cz0iIgotCi0gICAgJHNob3cgIiR7cm19ciAkbXlfZ2VudG9wIgotICAgICRydW4gJHtybX1yICIkbXlfZ2VudG9wIgotICAgICRzaG93ICIkbWtkaXIgJG15X2dlbnRvcCIKLSAgICAkcnVuICRta2RpciAiJG15X2dlbnRvcCIKLSAgICBteV9zdGF0dXM9JD8KLSAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtbmUgMCAmJiB0ZXN0ICEgLWQgIiRteV9nZW50b3AiOyB0aGVuCi0gICAgICBleGl0ICRteV9zdGF0dXMKLSAgICBmaQotCi0gICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCi0gICAgICAjIEV4dHJhY3QgdGhlIG9iamVjdHMuCi0gICAgICBjYXNlICRteV94bGliIGluCi0JW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSIkbXlfeGxpYiIgOzsKLQkqKSBteV94YWJzPWBwd2RgIi8kbXlfeGxpYiIgOzsKLSAgICAgIGVzYWMKLSAgICAgIG15X3hsaWI9YCRlY2hvICJYJG15X3hsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLSAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgotICAgICAgd2hpbGUgOjsgZG8KLSAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgotCSoiICRteV94bGliX3UgIiopCi0JICBleHRyYWN0ZWRfc2VyaWFsPWBleHByICRleHRyYWN0ZWRfc2VyaWFsICsgMWAKLQkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7Ci0JKikgYnJlYWsgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKLSAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKLQotICAgICAgJHNob3cgIiR7cm19ciAkbXlfeGRpciIKLSAgICAgICRydW4gJHtybX1yICIkbXlfeGRpciIKLSAgICAgICRzaG93ICIkbWtkaXIgJG15X3hkaXIiCi0gICAgICAkcnVuICRta2RpciAiJG15X3hkaXIiCi0gICAgICBleGl0X3N0YXR1cz0kPwotICAgICAgaWYgdGVzdCAiJGV4aXRfc3RhdHVzIiAtbmUgMCAmJiB0ZXN0ICEgLWQgIiRteV94ZGlyIjsgdGhlbgotCWV4aXQgJGV4aXRfc3RhdHVzCi0gICAgICBmaQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgKi1kYXJ3aW4qKQotCSRzaG93ICJFeHRyYWN0aW5nICRteV94YWJzIgotCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgotCWlmIHRlc3QgLXogIiRydW4iOyB0aGVuCi0JICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKLQkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KLQkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCi0JICBkYXJ3aW5fY3VyZGlyPWBwd2RgCi0JICBkYXJ3aW5fYmFzZV9hcmNoaXZlPWAkZWNobyAiWCRkYXJ3aW5fYXJjaGl2ZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCSAgZGFyd2luX2FyY2hlcz1gbGlwbyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRFR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsYAotCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuIAotCSAgICBkYXJ3aW5fYXJjaGVzPWBlY2hvICIkZGFyd2luX2FyY2hlcyIgfCAkU0VEIC1lICdzLy4qYXJlOi8vJ2AKLQkgICAgZGFyd2luX2FyY2g9Ci0JICAgICRzaG93ICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKLQkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlcyA7IGRvCi0JICAgICAgbWtkaXIgLXAgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCi0JICAgICAgbGlwbyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IiAiJHtkYXJ3aW5fYXJjaGl2ZX0iCi0JICAgICAgY2QgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCi0JICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKLQkgICAgICBjZCAiJGRhcndpbl9jdXJkaXIiCi0JICAgICAgJHJtICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCi0JICAgIGRvbmUgIyAkZGFyd2luX2FyY2hlcwotICAgICAgIyMgT2theSBub3cgd2UgaGF2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKLQkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50fCB4YXJncyBiYXNlbmFtZSB8IHNvcnQgLXUgfCAkTkwyU1BgCi0JICAgIGRhcndpbl9maWxlPQotCSAgICBkYXJ3aW5fZmlsZXM9Ci0JICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbwotCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgJE5MMlNQYAotCSAgICAgIGxpcG8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKLQkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKLQkgICAgJHtybX1yIHVuZmF0LSQkCi0JICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgotCSAgZWxzZQotCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKLSAJICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgotCSAgZmkgIyAkZGFyd2luX2FyY2hlcwotCWZpICMgJHJ1bgotCTs7Ci0gICAgICAqKQotICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkTkwyU1BgCi0gICAgZG9uZQotICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgotfQotIyBFbmQgb2YgU2hlbGwgZnVuY3Rpb24gZGVmaW5pdGlvbnMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBEYXJ3aW4gc3Vja3MKLWV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCi0KLWRpc2FibGVfbGlicz1ubwotCi0jIFBhcnNlIG91ciBjb21tYW5kIGxpbmUgb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5Lgotd2hpbGUgdGVzdCAiJCMiIC1ndCAwCi1kbwotICBhcmc9IiQxIgotICBzaGlmdAotCi0gIGNhc2UgJGFyZyBpbgotICAtKj0qKSBvcHRhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncy9bLV9hLXpBLVowLTldKj0vLydgIDs7Ci0gICopIG9wdGFyZz0gOzsKLSAgZXNhYwotCi0gICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgotICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KLSAgICBjYXNlICRwcmV2IGluCi0gICAgZXhlY3V0ZV9kbGZpbGVzKQotICAgICAgZXhlY3V0ZV9kbGZpbGVzPSIkZXhlY3V0ZV9kbGZpbGVzICRhcmciCi0gICAgICA7OwotICAgIHRhZykKLSAgICAgIHRhZ25hbWU9IiRhcmciCi0gICAgICBwcmVzZXJ2ZV9hcmdzPSIke3ByZXNlcnZlX2FyZ3N9PSRhcmciCi0KLSAgICAgICMgQ2hlY2sgd2hldGhlciB0YWduYW1lIGNvbnRhaW5zIG9ubHkgdmFsaWQgY2hhcmFjdGVycwotICAgICAgY2FzZSAkdGFnbmFtZSBpbgotICAgICAgKlshLV9BLVphLXowLTksL10qKQotCSRlY2hvICIkcHJvZ25hbWU6IGludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIiAxPiYyCi0JZXhpdCAkRVhJVF9GQUlMVVJFCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgY2FzZSAkdGFnbmFtZSBpbgotICAgICAgQ0MpCi0JIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93LCBpdCdzIHRoZXJlLCBidXQKLQkjIG5vdCBzcGVjaWFsbHkgbWFya2VkLgotCTs7Ci0gICAgICAqKQotCWlmIGdyZXAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCi0JICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgotCSAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckdGFnbmFtZSckLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckdGFnbmFtZSckL3AnIDwgJHByb2dwYXRoYCIKLQllbHNlCi0JICAkZWNobyAiJHByb2duYW1lOiBpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIgMT4mMgotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgIiRwcmV2PVwkYXJnIgotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBwcmV2PQotICAgIHByZXZvcHQ9Ci0gICAgY29udGludWUKLSAgZmkKLQotICAjIEhhdmUgd2Ugc2VlbiBhIG5vbi1vcHRpb25hbCBhcmd1bWVudCB5ZXQ/Ci0gIGNhc2UgJGFyZyBpbgotICAtLWhlbHApCi0gICAgc2hvd19oZWxwPXllcwotICAgIDs7Ci0KLSAgLS12ZXJzaW9uKQotICAgIGVjaG8gIlwKLSRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OJFRJTUVTVEFNUAotCi1Db3B5cmlnaHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLXdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKLSAgICBleGl0ICQ/Ci0gICAgOzsKLQotICAtLWNvbmZpZykKLSAgICAke1NFRH0gLWUgJzEsL14jICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRy9kJyAtZSAnL14jICMjIyBFTkQgTElCVE9PTCBDT05GSUcvLCRkJyAkcHJvZ3BhdGgKLSAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgotICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbwotICAgICAgJHtTRUR9IC1uIC1lICIvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJC9wIiA8ICIkcHJvZ3BhdGgiCi0gICAgZG9uZQotICAgIGV4aXQgJD8KLSAgICA7OwotCi0gIC0tZGVidWcpCi0gICAgJGVjaG8gIiRwcm9nbmFtZTogZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKLSAgICBzZXQgLXgKLSAgICBwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkYXJnIgotICAgIDs7Ci0KLSAgLS1kcnktcnVuIHwgLW4pCi0gICAgcnVuPToKLSAgICA7OwotCi0gIC0tZmVhdHVyZXMpCi0gICAgJGVjaG8gImhvc3Q6ICRob3N0IgorICAgIHdyaXRlX2xpYm9iaj0kezF9CiAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgICRlY2hvICJlbmFibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICAgIHdyaXRlX2xvYmo9XCckezJ9XCcKICAgICBlbHNlCi0gICAgICAkZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgICAgd3JpdGVfbG9iaj1ub25lCiAgICAgZmkKKwogICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgICRlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJwogICAgIGVsc2UKLSAgICAgICRlY2hvICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgICB3cml0ZV9vbGRvYmo9bm9uZQogICAgIGZpCi0gICAgZXhpdCAkPwotICAgIDs7CiAKLSAgLS1maW5pc2gpIG1vZGU9ImZpbmlzaCIgOzsKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCisjICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KIAotICAtLW1vZGUpIHByZXZvcHQ9Ii0tbW9kZSIgcHJldj1tb2RlIDs7Ci0gIC0tbW9kZT0qKSBtb2RlPSIkb3B0YXJnIiA7OworIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgorcGljX29iamVjdD0kd3JpdGVfbG9iagogCi0gIC0tcHJlc2VydmUtZHVwLWRlcHMpIGR1cGxpY2F0ZV9kZXBzPSJ5ZXMiIDs7CisjIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Citub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCiAKLSAgLS1xdWlldCB8IC0tc2lsZW50KQotICAgIHNob3c9OgotICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRhcmciCi0gICAgOzsKK0VPRgorICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHt3cml0ZV9saWJvYmp9IgorICAgIH0KK30KIAotICAtLXRhZykKLSAgICBwcmV2b3B0PSItLXRhZyIKLSAgICBwcmV2PXRhZwotICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzIC0tdGFnIgotICAgIDs7Ci0gIC0tdGFnPSopCi0gICAgc2V0IHRhZyAiJG9wdGFyZyIgJHsxKyIkQCJ9Ci0gICAgc2hpZnQKLSAgICBwcmV2PXRhZwotICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzIC0tdGFnIgotICAgIDs7CiAKLSAgLWRsb3BlbikKLSAgICBwcmV2b3B0PSItZGxvcGVuIgotICAgIHByZXY9ZXhlY3V0ZV9kbGZpbGVzCi0gICAgOzsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZJTEUgTkFNRSBBTkQgUEFUSCBDT05WRVJTSU9OIEhFTFBFUiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotICAtKikKLSAgICAkZWNobyAiJG1vZGVuYW1lOiB1bnJlY29nbml6ZWQgb3B0aW9uIFxgJGFyZyciIDE+JjIKLSAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICA7OworIyBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKKyMgYW5kICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYQorIyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbQorIyBpbiAkYnVpbGQncyAkUEFUSC4KKyMKKyMgQVJHIGlzIHRoZSAkYnVpbGQgZmlsZSBuYW1lIHRvIGJlIGNvbnZlcnRlZCB0byB3MzIgZm9ybWF0LgorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKKyMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQorZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQorICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCisgICAgIyBjb21tYW5kIGlzIG5vdCBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKKyAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wfSI7IHRoZW4KKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PWAkRUNITyAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIiB8CisgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICBlbHNlCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0KKyAgICBmaQorICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKIAotICAqKQotICAgIG5vbm9wdD0iJGFyZyIKLSAgICBicmVhaworCisjIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCisjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwgYW5kCisjICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYSBjb3JyZWN0bHkKKyMgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbSBpbiAkYnVpbGQncworIyAkUEFUSC4gQXNzdW1lcyBBUkcgaGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KKyMKKyMgQVJHIGlzIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB3aW4zMi4KKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQuCisjIFVuY29udmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1lcyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlmIG5vIGRpcmVjdG9yeSBuYW1lcworIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCitmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcworICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBvbGRJRlM9JElGUworICAgIElGUz06CisgICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KKyAgICAgIElGUz0kb2xkSUZTCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIgorICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0kb2xkSUZTCisgIGZpCit9CisjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMgorCisKKyMgZnVuY19jeWdwYXRoIEFSR1MuLi4KKyMgV3JhcHBlciBhcm91bmQgY2FsbGluZyB0aGUgY3lncGF0aCBwcm9ncmFtIHZpYSBMVF9DWUdQQVRILiBUaGlzIGlzIHVzZWQgd2hlbgorIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKKyMgJGJ1aWxkIGlzIE1TWVMgYW5kICRob3N0IGlzIEN5Z3dpbiwgb3IgKDMpICRidWlsZCBpcyBDeWd3aW4uIEluIGNhc2UgKDEpIG9yCisjICgyKSwgcmV0dXJucyB0aGUgQ3lnd2luIGZpbGUgbmFtZSBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0CisjIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKKyMgZnJvbSAkYnVpbGQncyAqbml4IG9yIE1TWVMgZm9ybWF0KS4gSW4gY2FzZSAoMyksIHJldHVybnMgdGhlIHczMiBmaWxlIG5hbWUKKyMgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dCBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluCisjIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KKyMKKyMgQVJHUyBhcmUgcGFzc2VkIHRvIGN5Z3BhdGgsIHdpdGggdGhlIGxhc3Qgb25lIGJlaW5nIHRoZSBmaWxlIG5hbWUgb3IgcGF0aCB0bworIyBiZSBjb252ZXJ0ZWQuCisjCisjIFNwZWNpZnkgdGhlIGFic29sdXRlICpuaXggKG9yIHczMikgbmFtZSB0byBjeWdwYXRoIGluIHRoZSBMVF9DWUdQQVRICisjIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgorZnVuY19jeWdwYXRoICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCisgICAgICAjIG9uIGZhaWx1cmUsIGVuc3VyZSByZXN1bHQgaXMgZW1wdHkKKyAgICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZmkKKyAgZWxzZQorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6IFxgJExUX0NZR1BBVEgnIgorICBmaQorfQorI2VuZDogZnVuY19jeWdwYXRoCisKKworIyBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgb3IgcGF0aCBBUkcgZnJvbSBNU1lTIGZvcm1hdCB0byB3MzIgZm9ybWF0LiAgUmV0dXJuCisjIHJlc3VsdCBpbiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQuCitmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorfQorI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEgQVJHMgorIyBWZXJpZnkgdGhhdCBBUkcxIChhIGZpbGUgbmFtZSBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisjIGZvcm1hdCBpbiBBUkcyLiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlIChyZXNldHRpbmcKKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgorZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBmaWxlIG5hbWUgY29ycmVzcG9uZGluZyB0byIKKyAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICMgRmFsbGJhY2s6CisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2NoZWNrCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayBGUk9NX1BBVEhTRVAgVE9fUEFUSFNFUCBGUk9NX1BBVEggVE9fUEFUSAorIyBWZXJpZnkgdGhhdCBGUk9NX1BBVEggKGEgcGF0aCBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisjIGZvcm1hdCBpbiBUT19QQVRILiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlLCByZXNldHRpbmcKKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2ltcGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJlbG93KS4KK2Z1bmNfY29udmVydF9wYXRoX2NoZWNrICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgorICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorICAgIGZ1bmNfZXJyb3IgIiAgXGAkMyciCisgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCisgICAgIyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgorICAgIGlmIHRlc3QgIngkMSIgIT0gIngkMiI7IHRoZW4KKyAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycz0ic3wkMXwkMnxnIgorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAorICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKKyAgICBlbHNlCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzIgorICAgIGZpCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjaworCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCisjIE1vZGlmaWVzIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCBieSBwcmVwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEZST05UUEFUCisjIGFuZCBhcHBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgQkFDS1BBVC4KK2Z1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQoreworICAkb3B0X2RlYnVnCisgIGNhc2UgJDQgaW4KKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKICAgICA7OwogICBlc2FjCi1kb25lCisgIGNhc2UgJDQgaW4KKyAgJDIgKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgorICAgIDs7CisgIGVzYWMKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcAogCi1pZiB0ZXN0IC1uICIkcHJldm9wdCI7IHRoZW4KLSAgJGVjaG8gIiRtb2RlbmFtZTogb3B0aW9uIFxgJHByZXZvcHQnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCi0gICRlY2hvICIkaGVscCIgMT4mMgotICBleGl0ICRFWElUX0ZBSUxVUkUKLWZpCiAKLWNhc2UgJGRpc2FibGVfbGlicyBpbgotbm8pIAotICA7Owotc2hhcmVkKQotICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLSAgYnVpbGRfb2xkX2xpYnM9eWVzCi0gIDs7Ci1zdGF0aWMpCi0gIGJ1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAotICA7OwotZXNhYworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJGJ1aWxkIHRvICRob3N0IEZJTEUgTkFNRSBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfZmlsZV9jbWQgQVJHJworIworIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIAotIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0Ci0jIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKLSMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KLWV4ZWNfY21kPQogCi1pZiB0ZXN0IC16ICIkc2hvd19oZWxwIjsgdGhlbgorIyBmdW5jX3RvX2hvc3RfZmlsZSBBUkcKKyMgQ29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX3RvX2hvc3RfZmlsZSAoKQoreworICAkb3B0X2RlYnVnCisgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9maWxlCiAKLSAgIyBJbmZlciB0aGUgb3BlcmF0aW9uIG1vZGUuCi0gIGlmIHRlc3QgLXogIiRtb2RlIjsgdGhlbgotICAgICRlY2hvICIqKiogV2FybmluZzogaW5mZXJyaW5nIHRoZSBtb2RlIG9mIG9wZXJhdGlvbiBpcyBkZXByZWNhdGVkLiIgMT4mMgotICAgICRlY2hvICIqKiogRnV0dXJlIHZlcnNpb25zIG9mIExpYnRvb2wgd2lsbCByZXF1aXJlIC0tbW9kZT1NT0RFIGJlIHNwZWNpZmllZC4iIDE+JjIKLSAgICBjYXNlICRub25vcHQgaW4KLSAgICAqY2MgfCBjYyogfCAqKysgfCBnY2MqIHwgKi1nY2MqIHwgZysrKiB8IHhsYyopCi0gICAgICBtb2RlPWxpbmsKLSAgICAgIGZvciBhcmcKLSAgICAgIGRvCi0JY2FzZSAkYXJnIGluCi0JLWMpCi0JICAgbW9kZT1jb21waWxlCi0JICAgYnJlYWsKLQkgICA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIDs7Ci0gICAgKmRiIHwgKmRieCB8ICpzdHJhY2UgfCAqdHJ1c3MpCi0gICAgICBtb2RlPWV4ZWN1dGUKLSAgICAgIDs7Ci0gICAgKmluc3RhbGwqfGNwfG12KQotICAgICAgbW9kZT1pbnN0YWxsCi0gICAgICA7OwotICAgICpybSkKLSAgICAgIG1vZGU9dW5pbnN0YWxsCisKKyMgZnVuY190b190b29sX2ZpbGUgQVJHIExBWlkKKyMgY29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHRvb2xjaGFpbiBmb3JtYXQuIFJldHVybgorIyByZXN1bHQgaW4gZnVuY190b190b29sX2ZpbGVfcmVzdWx0LiAgSWYgdGhlIGNvbnZlcnNpb24gaW4gdXNlIGlzIGxpc3RlZAorIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KK2Z1bmNfdG9fdG9vbF9maWxlICgpCit7CisgICRvcHRfZGVidWcKKyAgY2FzZSAsJDIsIGluCisgICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKICAgICAgIDs7CiAgICAgKikKLSAgICAgICMgSWYgd2UgaGF2ZSBubyBtb2RlLCBidXQgZGxmaWxlcyB3ZXJlIHNwZWNpZmllZCwgdGhlbiBkbyBleGVjdXRlIG1vZGUuCi0gICAgICB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiBtb2RlPWV4ZWN1dGUKLQotICAgICAgIyBKdXN0IHVzZSB0aGUgZGVmYXVsdCBvcGVyYXRpb24gbW9kZS4KLSAgICAgIGlmIHRlc3QgLXogIiRtb2RlIjsgdGhlbgotCWlmIHRlc3QgLW4gIiRub25vcHQiOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjYW5ub3QgaW5mZXIgb3BlcmF0aW9uIG1vZGUgZnJvbSBcYCRub25vcHQnIiAxPiYyCi0JZWxzZQotCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGluZmVyIG9wZXJhdGlvbiBtb2RlIHdpdGhvdXQgTU9ERS1BUkdTIiAxPiYyCi0JZmkKLSAgICAgIGZpCisgICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdAogICAgICAgOzsKLSAgICBlc2FjCisgIGVzYWMKK30KKyMgZW5kIGZ1bmNfdG9fdG9vbF9maWxlCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29wIEFSRworIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9ub29wICgpCit7CisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKICAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCiAKLSAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KLSAgaWYgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgdGVzdCAiJG1vZGUiICE9IGV4ZWN1dGU7IHRoZW4KLSAgICAkZWNobyAiJG1vZGVuYW1lOiB1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciIDE+JjIKLSAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIGJlY2F1c2UgJGJ1aWxkIGlzIGN5Z3dpbiwgd2UgY2FsbCAidGhlIiBjeWdwYXRoIGluICRQQVRIOyBubyBuZWVkIHRvIHVzZQorICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCiAgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCiAKLSAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgotICBnZW5lcmljX2hlbHA9IiRoZWxwIgotICBoZWxwPSJUcnkgXGAkbW9kZW5hbWUgLS1oZWxwIC0tbW9kZT0kbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgogCi0gICMgVGhlc2UgbW9kZXMgYXJlIGluIG9yZGVyIG9mIGV4ZWN1dGlvbiBmcmVxdWVuY3kgc28gdGhhdCB0aGV5IHJ1biBxdWlja2x5LgotICBjYXNlICRtb2RlIGluCi0gICMgbGlidG9vbCBjb21waWxlIG1vZGUKLSAgY29tcGlsZSkKLSAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBjb21waWxlIgorIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQKKyMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkCisjIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgY29udmVydCBmcm9tICpuaXggdG8gdzMyLCB0aGVuIHVzZSBjeWdwYXRoIHRvIGNvbnZlcnQgZnJvbSB3MzIgdG8gY3lnd2luLgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfcGF0aF9jbWQgQVJHJworIworIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisjCisjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gIElmCisjIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dAorIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCisjCisjIEFsbCBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBuYW1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb246CisjICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKKyMgICBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgICAgICA6IGZ1bmNfY29udmVydF9wYXRoX1hfdG9fWSAoKQorIyB3aGVyZSwgZm9yIGFueSBnaXZlbiAkYnVpbGQvJGhvc3QgY29tYmluYXRpb24gdGhlICdYX3RvX1knIHZhbHVlIGlzIHRoZQorIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKKyMgdGhlIHR3byBuZXcgZnVuY3Rpb25zIG11c3QgZm9sbG93IHRoaXMgcGF0dGVybiwgb3IgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKyMgd2lsbCBicmVhay4KKworCisjIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQorIyBhcHByb3ByaWF0ZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mICR0b19ob3N0X2ZpbGVfY21kLgordG9faG9zdF9wYXRoX2NtZD0KK2Z1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgorICAgIHRvX2hvc3RfcGF0aF9jbWQ9ImZ1bmNfY29udmVydF9wYXRoXyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fSIKKyAgZmkKK30KKworCisjIGZ1bmNfdG9faG9zdF9wYXRoIEFSRworIyBDb252ZXJ0cyB0aGUgcGF0aCBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisgICR0b19ob3N0X3BhdGhfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9wYXRoCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9ub29wIEFSRworIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCit7CisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9ub29wCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbSBBUkcuICBNU1lTCisgICAgIyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZTsgY3lncGF0aCB0dXJucyB0aGVtIGludG8gJy47JyBhbmQgJzsuJzsKKyAgICAjIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC1tIC1wICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSJgCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50IGFuZAorIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZCBpbiBhCisjIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQorICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKyAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgorCisKKyMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCitmdW5jX21vZGVfY29tcGlsZSAoKQoreworICAgICRvcHRfZGVidWcKICAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgogICAgIGJhc2VfY29tcGlsZT0KICAgICBzcmNmaWxlPSIkbm9ub3B0IiAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCkBAIC02NjQsNiArMTk1Nyw3IEBACiAgICAgYXJnX21vZGU9bm9ybWFsCiAgICAgbGlib2JqPQogICAgIGxhdGVyPQorICAgIHBpZV9mbGFnPQogCiAgICAgZm9yIGFyZwogICAgIGRvCkBAIC02ODQsMTYgKzE5NzgsMTkgQEAKIAkjIEFjY2VwdCBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMuCiAJY2FzZSAkYXJnIGluCiAJLW8pCi0JICBpZiB0ZXN0IC1uICIkbGlib2JqIiA7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgZmkKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgogCSAgYXJnX21vZGU9dGFyZ2V0CiAJICBjb250aW51ZQogCSAgOzsKIAotCS1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKLQkgIGxhdGVyPSIkbGF0ZXIgJGFyZyIKKwktcGllIHwgLWZwaWUgfCAtZlBJRSkKKyAgICAgICAgICBmdW5jX2FwcGVuZCBwaWVfZmxhZyAiICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCisJICBmdW5jX2FwcGVuZCBsYXRlciAiICRhcmciCiAJICBjb250aW51ZQogCSAgOzsKIApAQCAtNzA4LDMxICsyMDA1LDI0IEBACiAJICA7OyAgICAgICAgICAgICMgIHJlcGxhY2VkIGxhdGVyLiAgSSB3b3VsZCBndWVzcyB0aGF0IHdvdWxkIGJlIGEgYnVnLgogCiAJLVdjLCopCi0JICBhcmdzPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgInMvXi1XYywvLyJgCisJICBmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJICBhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkgIGxhc3Rhcmc9CiAJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKLSAJICBmb3IgYXJnIGluICRhcmdzOyBkbworCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KIAkgICAgSUZTPSIkc2F2ZV9pZnMiCi0KLQkgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgotCSAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQotCSAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgotCSAgICBjYXNlICRhcmcgaW4KLQkgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQkgICAgICBhcmc9IlwiJGFyZ1wiIgotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgbGFzdGFyZz0iJGxhc3RhcmcgJGFyZyIKKwkgICAgZnVuY19hcHBlbmRfcXVvdGVkIGxhc3RhcmcgIiRhcmciCiAJICBkb25lCiAJICBJRlM9IiRzYXZlX2lmcyIKLQkgIGxhc3Rhcmc9YCRlY2hvICJYJGxhc3RhcmciIHwgJFhzZWQgLWUgInMvXiAvLyJgCisJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAKIAkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgotCSAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRsYXN0YXJnIgorCSAgZnVuY19hcHBlbmQgYmFzZV9jb21waWxlICIgJGxhc3RhcmciCiAJICBjb250aW51ZQogCSAgOzsKIAotCSogKQorCSopCiAJICAjIEFjY2VwdCB0aGUgY3VycmVudCBhcmd1bWVudCBhcyB0aGUgc291cmNlIGZpbGUuCiAJICAjIFRoZSBwcmV2aW91cyAic3JjZmlsZSIgYmVjb21lcyB0aGUgY3VycmVudCBhcmd1bWVudC4KIAkgICMKQEAgLTc0NCw2NiArMjAzNCw0MSBAQAogICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQogCiAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgotICAgICAgbGFzdGFyZz1gJGVjaG8gIlgkbGFzdGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0KLSAgICAgIGNhc2UgJGxhc3RhcmcgaW4KLSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KLSAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5Ci0gICAgICAjIGluIHNjYW4gc2V0cywgYW5kIHNvbWUgU3VuT1Mga3NoIG1pc3RyZWF0IGJhY2tzbGFzaC1lc2NhcGluZwotICAgICAgIyBpbiBzY2FuIHNldHMgKHdvcmtlZCBhcm91bmQgd2l0aCB2YXJpYWJsZSBleHBhbnNpb24pLAotICAgICAgIyBhbmQgZnVydGhlcm1vcmUgY2Fubm90IGhhbmRsZSAnfCcgJyYnICcoJyAnKScgaW4gc2NhbiBzZXRzIAotICAgICAgIyBhdCBhbGwsIHNvIHdlIHNwZWNpZnkgdGhlbSBzZXBhcmF0ZWx5LgotICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JbGFzdGFyZz0iXCIkbGFzdGFyZ1wiIgotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgogICAgIGRvbmUgIyBmb3IgYXJnCiAKICAgICBjYXNlICRhcmdfbW9kZSBpbgogICAgIGFyZykKLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgogICAgICAgOzsKICAgICB0YXJnZXQpCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIgogICAgICAgOzsKICAgICAqKQogICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgotICAgICAgWyAteiAiJGxpYm9iaiIgXSAmJiBsaWJvYmo9YCRlY2hvICJYJHNyY2ZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgICAgIHRlc3QgLXogIiRsaWJvYmoiICYmIHsKKwlmdW5jX2Jhc2VuYW1lICIkc3JjZmlsZSIKKwlsaWJvYmo9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIH0KICAgICAgIDs7CiAgICAgZXNhYwogCiAgICAgIyBSZWNvZ25pemUgc2V2ZXJhbCBkaWZmZXJlbnQgZmlsZSBzdWZmaXhlcy4KICAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllcyAtbyBmaWxlLm8sIGl0IGlzIHJlcGxhY2VkIHdpdGggZmlsZS5sbwotICAgIHhmb3JtPSdbY0NGU2lmbXNvXScKICAgICBjYXNlICRsaWJvYmogaW4KLSAgICAqLmFkYSkgeGZvcm09YWRhIDs7Ci0gICAgKi5hZGIpIHhmb3JtPWFkYiA7OwotICAgICouYWRzKSB4Zm9ybT1hZHMgOzsKLSAgICAqLmFzbSkgeGZvcm09YXNtIDs7Ci0gICAgKi5jKyspIHhmb3JtPWMrKyA7OwotICAgICouY2MpIHhmb3JtPWNjIDs7Ci0gICAgKi5paSkgeGZvcm09aWkgOzsKLSAgICAqLmNsYXNzKSB4Zm9ybT1jbGFzcyA7OwotICAgICouY3BwKSB4Zm9ybT1jcHAgOzsKLSAgICAqLmN4eCkgeGZvcm09Y3h4IDs7Ci0gICAgKi5bZkZdWzA5XT8pIHhmb3JtPVtmRl1bMDldLiA7OwotICAgICouZm9yKSB4Zm9ybT1mb3IgOzsKLSAgICAqLmphdmEpIHhmb3JtPWphdmEgOzsKLSAgICAqLm9iaikgeGZvcm09b2JqIDs7Ci0gICAgKi5zeCkgeGZvcm09c3ggOzsKKyAgICAqLltjQ0ZTaWZtc29dIHwgXAorICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAorICAgICouYysrIHwgKi5jYyB8ICouaWkgfCAqLmNsYXNzIHwgKi5jcHAgfCAqLmN4eCB8IFwKKyAgICAqLltmRl1bMDldPyB8ICouZm9yIHwgKi5qYXZhIHwgKi5vYmogfCAqLnN4IHwgKi5jdSB8ICouY3VwKQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CiAgICAgZXNhYwogCi0gICAgbGlib2JqPWAkZWNobyAiWCRsaWJvYmoiIHwgJFhzZWQgLWUgInMvXC4keGZvcm0kLy5sby8iYAotCiAgICAgY2FzZSAkbGlib2JqIGluCi0gICAgKi5sbykgb2JqPWAkZWNobyAiWCRsaWJvYmoiIHwgJFhzZWQgLWUgIiRsbzJvImAgOzsKKyAgICAqLmxvKSBmdW5jX2xvMm8gIiRsaWJvYmoiOyBvYmo9JGZ1bmNfbG8yb19yZXN1bHQgOzsKICAgICAqKQotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gXGAkbGlib2JqJyIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIgogICAgICAgOzsKICAgICBlc2FjCiAKQEAgLTgxMSw3ICsyMDc2LDE1IEBACiAKICAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KICAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwljb250aW51ZQorCTs7CisKICAgICAgIC1zdGF0aWMpCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCiAJYnVpbGRfb2xkX2xpYnM9eWVzCiAJY29udGludWUKIAk7OwpAQCAtODI4LDI4ICsyMTAxLDE3IEBACiAgICAgICBlc2FjCiAgICAgZG9uZQogCi0gICAgcWxpYm9iaj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICBjYXNlICRxbGlib2JqIGluCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQlxbGlib2JqPSJcIiRxbGlib2JqXCIiIDs7Ci0gICAgZXNhYwotICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRxbGlib2JqIiBcCi0JJiYgJGVjaG8gIlgkbGlib2JqIiB8IGdyZXAgJ1tdfiNeKnt9Ozw+PyInIiciJyAJJigpfGAkW10nIFwKLQkmJiAkZWNobyAiJG1vZGVuYW1lOiBsaWJvYmogbmFtZSBcYCRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgotICAgIG9iam5hbWU9YCRlY2hvICJYJG9iaiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotICAgIHhkaXI9YCRlY2hvICJYJG9iaiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotICAgIGlmIHRlc3QgIlgkeGRpciIgPSAiWCRvYmoiOyB0aGVuCi0gICAgICB4ZGlyPQotICAgIGVsc2UKLSAgICAgIHhkaXI9JHhkaXIvCi0gICAgZmkKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgorICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAorICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCisgICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCisgICAgb2JqbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgogICAgIGxvYmo9JHt4ZGlyfSRvYmpkaXIvJG9iam5hbWUKIAotICAgIGlmIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiOyB0aGVuCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIgMT4mMgotICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQorICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCiAKICAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgogICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KQEAgLTg1OCwxMiArMjEyMCw5IEBACiAgICAgICByZW1vdmVsaXN0PSIkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCiAgICAgZmkKIAotICAgICRydW4gJHJtICRyZW1vdmVsaXN0Ci0gICAgdHJhcCAiJHJ1biAkcm0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1Ci0KICAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCiAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKICAgICAgIHBpY19tb2RlPWRlZmF1bHQKICAgICAgIDs7CiAgICAgZXNhYwpAQCAtODc1LDEwICsyMTM0LDggQEAKICAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcwogICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYwogICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm87IHRoZW4KLSAgICAgIG91dHB1dF9vYmo9YCRlY2hvICJYJHNyY2ZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJyAtZSAncyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9CisgICAgICBvdXRwdXRfb2JqPWAkRUNITyAiJHNyY2ZpbGUiIHwgJFNFRCAncyVeLiovJSU7IHMlXC5bXi5dKiQlJSdgLiR7b2JqZXh0fQogICAgICAgbG9ja2ZpbGU9IiRvdXRwdXRfb2JqLmxvY2siCi0gICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiAkbG9ja2ZpbGUiCi0gICAgICB0cmFwICIkcnVuICRybSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKICAgICBlbHNlCiAgICAgICBvdXRwdXRfb2JqPQogICAgICAgbmVlZF9sb2Nrcz1ubwpAQCAtODg4LDEzICsyMTQ1LDEzIEBACiAgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKICAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCiAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0geWVzOyB0aGVuCi0gICAgICB1bnRpbCAkcnVuIGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbwotCSRzaG93ICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgogCXNsZWVwIDIKICAgICAgIGRvbmUKICAgICBlbGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm47IHRoZW4KICAgICAgIGlmIHRlc3QgLWYgIiRsb2NrZmlsZSI7IHRoZW4KLQkkZWNobyAiXAorCSRFQ0hPICJcCiAqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgogYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCiAKQEAgLTkwNSwzNCArMjE2MiwyMSBAQAogYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKIGNvbXBpbGVyLiIKIAotCSRydW4gJHJtICRyZW1vdmVsaXN0CisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAogCWV4aXQgJEVYSVRfRkFJTFVSRQogICAgICAgZmkKLSAgICAgICRlY2hvICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgorICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCiAgICAgZmkKIAotICAgIGlmIHRlc3QgLW4gIiRmaXhfc3JjZmlsZV9wYXRoIjsgdGhlbgotICAgICAgZXZhbCBzcmNmaWxlPVwiJGZpeF9zcmNmaWxlX3BhdGhcIgotICAgIGZpCi0gICAgcXNyY2ZpbGU9YCRlY2hvICJYJHNyY2ZpbGUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgIGNhc2UgJHFzcmNmaWxlIGluCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLSAgICAgIHFzcmNmaWxlPSJcIiRxc3JjZmlsZVwiIiA7OwotICAgIGVzYWMKKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRsb2NrZmlsZSIKKyAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQogCi0gICAgJHJ1biAkcm0gIiRsaWJvYmoiICIke2xpYm9ian1UIgotCi0gICAgIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKLSAgICAjIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgotICAgIHRlc3QgLXogIiRydW4iICYmIGNhdCA+ICR7bGlib2JqfVQgPDxFT0YKLSMgJGxpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQotIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gLSBHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QCi0jCi0jIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKLSMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgotCi0jIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCi1FT0YKKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCisgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CiAKICAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgpAQCAtOTQ2LDMyICsyMTkwLDE5IEBACiAJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0ICEgLWQgIiR7eGRpcn0kb2JqZGlyIjsgdGhlbgotCSRzaG93ICIkbWtkaXIgJHt4ZGlyfSRvYmpkaXIiCi0JJHJ1biAkbWtkaXIgJHt4ZGlyfSRvYmpkaXIKLQlleGl0X3N0YXR1cz0kPwotCWlmIHRlc3QgIiRleGl0X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIke3hkaXJ9JG9iamRpciI7IHRoZW4KLQkgIGV4aXQgJGV4aXRfc3RhdHVzCi0JZmkKLSAgICAgIGZpCisgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKIAogICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCiAJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCi0JY29tbWFuZD0iJGNvbW1hbmQgLW8gJGxvYmoiCisJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRsb2JqIgogICAgICAgZmkKIAotICAgICAgJHJ1biAkcm0gIiRsb2JqIiAiJG91dHB1dF9vYmoiCi0KLSAgICAgICRzaG93ICIkY29tbWFuZCIKLSAgICAgIGlmICRydW4gZXZhbCAkbHRfZW52ICIkY29tbWFuZCI7IHRoZW4gOgotICAgICAgZWxzZQotCXRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkcnVuICRybSAkcmVtb3ZlbGlzdAotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgZmkKKyAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKKyAgICAgICAgICAndGVzdCAtbiAiJG91dHB1dF9vYmoiICYmICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJwogCiAgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCiAJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCi0JJGVjaG8gIlwKKwkkRUNITyAiXAogKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CiBgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKIApAQCAtOTg1LDY1ICsyMjE2LDQyIEBACiBhdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgogY29tcGlsZXIuIgogCi0JJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CiAJZXhpdCAkRVhJVF9GQUlMVVJFCiAgICAgICBmaQogCiAgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZCwgdGhlbiBnbyBvbiB0byBjb21waWxlIHRoZSBuZXh0IG9uZQogICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KLQkkc2hvdyAiJG12ICRvdXRwdXRfb2JqICRsb2JqIgotCWlmICRydW4gJG12ICRvdXRwdXRfb2JqICRsb2JqOyB0aGVuIDoKLQllbHNlCi0JICBlcnJvcj0kPwotCSAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKLQkgIGV4aXQgJGVycm9yCi0JZmkKKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRsb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKICAgICAgIGZpCiAKLSAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBQSUMgb2JqZWN0IHRvIHRoZSBsaWJ0b29sIG9iamVjdCBmaWxlLgotICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKLXBpY19vYmplY3Q9JyRvYmpkaXIvJG9iam5hbWUnCi0KLUVPRgotCiAgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCiAgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgotICAgICAgICBzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCisJc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJwogICAgICAgZmkKLSAgICBlbHNlCi0gICAgICAjIE5vIFBJQyBvYmplY3Qgc28gaW5kaWNhdGUgaXQgZG9lc24ndCBleGlzdCBpbiB0aGUgbGlidG9vbAotICAgICAgIyBvYmplY3QgZmlsZS4KLSAgICAgIHRlc3QgLXogIiRydW4iICYmIGNhdCA+PiAke2xpYm9ian1UIDw8RU9GCi1waWNfb2JqZWN0PW5vbmUKLQotRU9GCiAgICAgZmkKIAogICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCiAgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgogCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKLQljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKICAgICAgIGVsc2UKIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCiAgICAgICBmaQogICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KLQljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkb2JqIgogICAgICAgZmkKIAogICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCi0gICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCi0gICAgICAkcnVuICRybSAiJG9iaiIgIiRvdXRwdXRfb2JqIgotICAgICAgJHNob3cgIiRjb21tYW5kIgotICAgICAgaWYgJHJ1biBldmFsICRsdF9lbnYgIiRjb21tYW5kIjsgdGhlbiA6Ci0gICAgICBlbHNlCi0JJHJ1biAkcm0gJHJlbW92ZWxpc3QKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJwogCiAgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCiAJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCi0JJGVjaG8gIlwKKwkkRUNITyAiXAogKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CiBgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKIApAQCAtMTA1Nyw1MyArMjI2NSwyODI0IEBACiBhdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgogY29tcGlsZXIuIgogCi0JJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CiAJZXhpdCAkRVhJVF9GQUlMVVJFCiAgICAgICBmaQogCiAgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAogICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgotCSRzaG93ICIkbXYgJG91dHB1dF9vYmogJG9iaiIKLQlpZiAkcnVuICRtdiAkb3V0cHV0X29iaiAkb2JqOyB0aGVuIDoKLQllbHNlCi0JICBlcnJvcj0kPwotCSAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKLQkgIGV4aXQgJGVycm9yCi0JZmkKKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJwogICAgICAgZmkKLQotICAgICAgIyBBcHBlbmQgdGhlIG5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0IHRoZSBsaWJ0b29sIG9iamVjdCBmaWxlLgotICAgICAgIyBPbmx5IGFwcGVuZCBpZiB0aGUgbGlidG9vbCBvYmplY3QgZmlsZSBleGlzdHMuCi0gICAgICB0ZXN0IC16ICIkcnVuIiAmJiBjYXQgPj4gJHtsaWJvYmp9VCA8PEVPRgotIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdC4KLW5vbl9waWNfb2JqZWN0PSckb2JqbmFtZScKLQotRU9GCi0gICAgZWxzZQotICAgICAgIyBBcHBlbmQgdGhlIG5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0IHRoZSBsaWJ0b29sIG9iamVjdCBmaWxlLgotICAgICAgIyBPbmx5IGFwcGVuZCBpZiB0aGUgbGlidG9vbCBvYmplY3QgZmlsZSBleGlzdHMuCi0gICAgICB0ZXN0IC16ICIkcnVuIiAmJiBjYXQgPj4gJHtsaWJvYmp9VCA8PEVPRgotIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdC4KLW5vbl9waWNfb2JqZWN0PW5vbmUKLQotRU9GCiAgICAgZmkKIAotICAgICRydW4gJG12ICIke2xpYm9ian1UIiAiJHtsaWJvYmp9IgorICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICIkbGlib2JqIiAiJG9iamRpci8kb2JqbmFtZSIgIiRvYmpuYW1lIgogCi0gICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAotICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAgICAgJHJ1biAkcm0gIiRsb2NrZmlsZSIKLSAgICBmaQorICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAorICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisJcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKKyAgICAgICAgJFJNICIkbG9ja2ZpbGUiCisgICAgICBmaQorICAgIH0KIAogICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCiskb3B0X2hlbHAgfHwgeworICB0ZXN0ICIkb3B0X21vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KK30KKworZnVuY19tb2RlX2hlbHAgKCkKK3sKKyAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKyAgICBjYXNlICRvcHRfbW9kZSBpbgorICAgICAgIiIpCisgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCisgICAgICAgIGZ1bmNfaGVscAorICAgICAgICA7OworCisgICAgICBjbGVhbikKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAord2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICBjb21waWxlKQorICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNvbXBpbGUgQ09NUElMRS1DT01NQU5ELi4uIFNPVVJDRUZJTEUKKworQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCisgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5CisgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQorICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQorZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KKworVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCitTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggXGAuYycgd2l0aCB0aGUKK2xpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgXGAubG8nLiIKKyAgICAgICAgOzsKKworICAgICAgZXhlY3V0ZSkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KKworQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCisKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKK2ZsYWdzLgorCitJZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCitpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKK2RpcmVjdG9yaWVzIGFyZSBhZGRlZCB0byB0aGUgbGlicmFyeSBwYXRoLgorCitUaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKKyAgICAgICAgOzsKKworICAgICAgZmluaXNoKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCisKK0NvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMuCisKK0VhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCisKK1RoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQordGhlIFxgLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIGluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgorCitJbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KKworSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCitlaXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWluc3QtcHJlZml4LWRpciBQUkVGSVgtRElSICBVc2UgUFJFRklYLURJUiBhcyBhIHN0YWdpbmcgYXJlYSBmb3IgaW5zdGFsbGF0aW9uCisKK1RoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5CitCU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKKyAgICAgICAgOzsKKworICAgICAgbGluaykKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCisKK0xpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KK2NyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCisKK0xJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQorYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAorICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKyAgLWJpbmRpciBCSU5ESVIgICAgc3BlY2lmeSBwYXRoIHRvIGJpbmFyaWVzIGRpcmVjdG9yeSAoZm9yIHN5c3RlbXMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIG11c3QgYmUgZm91bmQgaW4gdGhlIFBBVEggc2V0dGluZyBhdCBydW50aW1lKQorICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKKyAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKKyAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCisgIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQorICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKyAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCisgIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scworICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKyAgLW9iamVjdGxpc3QgRklMRSAgVXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKKyAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKyAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KKyAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgorICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworICAtc2hhcmVkICAgICAgICAgICBvbmx5IGRvIGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtc2hyZXh0IFNVRkZJWCAgICBvdmVycmlkZSB0aGUgc3RhbmRhcmQgc2hhcmVkIGxpYnJhcnkgZmlsZSBleHRlbnNpb24KKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXN0YXRpYy1saWJ0b29sLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKKyAgLVdjLEZMQUcKKyAgLVhjb21waWxlciBGTEFHICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKyAgLVdsLEZMQUcKKyAgLVhsaW5rZXIgRkxBRyAgICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgbGlua2VyCisgIC1YQ0NsaW5rZXIgRkxBRyAgIHBhc3MgbGluay1zcGVjaWZpYyBGTEFHIHRvIHRoZSBjb21waWxlciBkcml2ZXIgKENDKQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgICAgICAgOzsKKworICAgICAgdW5pbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGVjaG8KKyAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorfQorCisjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKK2lmICRvcHRfaGVscDsgdGhlbgorICBpZiB0ZXN0ICIkb3B0X2hlbHAiID0gOjsgdGhlbgorICAgIGZ1bmNfbW9kZV9oZWxwCisgIGVsc2UKKyAgICB7CisgICAgICBmdW5jX2hlbHAgbm9leGl0CisgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworCWZ1bmNfbW9kZV9oZWxwCisgICAgICBkb25lCisgICAgfSB8IHNlZCAtbiAnMXA7IDIsJHMvXlVzYWdlOi8gIG9yOiAvcCcKKyAgICB7CisgICAgICBmdW5jX2hlbHAgbm9leGl0CisgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworCWVjaG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfAorICAgIHNlZCAnMWQKKyAgICAgIC9eV2hlbiByZXBvcnRpbmcvLC9eUmVwb3J0L3sKKwlICisJZAorICAgICAgfQorICAgICAgJHgKKyAgICAgIC9pbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy9kCisgICAgICAvbW9yZSBkZXRhaWxlZCAuKk1PREUvZAorICAgICAgcy9eVXNhZ2U6LiotLW1vZGU9XChbXiBdKlwpIC4qL0Rlc2NyaXB0aW9uIG9mIFwxIG1vZGU6LycKKyAgZmkKKyAgZXhpdCAkPworZmkKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKyAgICBjbWQ9IiRub25vcHQiCisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJG9wdF9kbG9wZW47IGRvCisgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKworICAgICAgZGlyPQorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi5sYSkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCisJZGxuYW1lPQorCWxpYnJhcnlfbmFtZXM9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCisJICAgIGZ1bmNfd2FybmluZyAiXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCisJICBjb250aW51ZQorCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJOzsKKworICAgICAgKikKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorCisgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICBlbHNlCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKKworICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KKyAgICBhcmdzPQorICAgIGZvciBmaWxlCisgICAgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgIC0qIHwgKi5sYSB8ICoubG8gKSA7OworICAgICAgKikKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgIiRmaWxlIgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKKyAgICAgIGRvCisJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgorCSAgICAgIGVsc2UKKwkJJGx0X3Vuc2V0ICRsdF92YXIKKwkgICAgICBmaSIKKyAgICAgIGRvbmUKKworICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgorICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCisgICAgZWxzZQorICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisJZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkb3B0X21vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCitmdW5jX21vZGVfZmluaXNoICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGxpYnM9CisgICAgbGliZGlycz0KKyAgICBhZG1pbmNtZHM9CisKKyAgICBmb3Igb3B0IGluICIkbm9ub3B0IiAkezErIiRAIn0KKyAgICBkbworICAgICAgaWYgdGVzdCAtZCAiJG9wdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBsaWJkaXJzICIgJG9wdCIKKworICAgICAgZWxpZiB0ZXN0IC1mICIkb3B0IjsgdGhlbgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKKwllbHNlCisJICBmdW5jX3dhcm5pbmcgIlxgJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCWZpCisKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdCciCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLW4gIiRsaWJzIjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCisgICAgICAgIHN5c3Jvb3RfcmVnZXg9YCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIHN5c3Jvb3RfY21kPSJzL1woWyAnXVwpJHN5c3Jvb3RfcmVnZXgvXDEvZzsiCisgICAgICBlbHNlCisgICAgICAgIHN5c3Jvb3RfY21kPQorICAgICAgZmkKKworICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCisgICAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCBcYD0nIHByZWZpeGVzIGZyb20gJGxpYiIKKyAgICAgICAgZG9uZQorICAgICAgZWxzZQorICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworCSAgc2VkIC1lICIke3N5c3Jvb3RfY21kfSBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAorCSAgICA+ICR0bXBkaXIvdG1wLWxhCisJICBtdiAtZiAkdG1wZGlyL3RtcC1sYSAkbGliCisJZG9uZQorICAgICAgICAke1JNfXIgIiR0bXBkaXIiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcworJyIkY21kIiciJworCWZpCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKKyAgICAgICAkY21kcyIKKwlmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwkkRUNITyAiICAgJGxpYmRpciIKKyAgICAgIGRvbmUKKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorICAgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJbGliZGlyPUxJQkRJUgorCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKworCSRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKwkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKwllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKyAgICAgIGZpCisgICAgICBlY2hvCisKKyAgICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorICAgICAgY2FzZSAkaG9zdCBpbgorCXNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorCSAgZWNobyAicGFnZXMuIgorCSAgOzsKKwkqKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCisJICA7OworICAgICAgZXNhYworICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBmaQorICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit0ZXN0ICIkb3B0X21vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV9pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgIGNhc2UgJG5vbm9wdCBpbiAqc2h0b29sKikgOjs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0kaW5zdGFsbF9wcm9nCisgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CisgICAgICAqKSBpbnN0YWxsX2NwPWZhbHNlIDs7CisgICAgZXNhYworCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1ubworICAgIHN0cmlwbWU9CisgICAgbm9fbW9kZT06CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBhcmcyPQorICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCisJZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKKwlkZXN0PSRhcmcKKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZCkgaXNkaXI9eWVzIDs7CisgICAgICAtZikKKwlpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCisJICBwcmV2PSRhcmcKKwlmaQorCTs7CisgICAgICAtZyB8IC1tIHwgLW8pCisJcHJldj0kYXJnCisJOzsKKyAgICAgIC1zKQorCXN0cmlwbWU9IiAtcyIKKwljb250aW51ZQorCTs7CisgICAgICAtKikKKwk7OworICAgICAgKikKKwkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCisJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJICBpZiB0ZXN0ICJ4JHByZXYiID0geC1tICYmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiOyB0aGVuCisJICAgIGFyZzI9JGluc3RhbGxfb3ZlcnJpZGVfbW9kZQorCSAgICBub19tb2RlPWZhbHNlCisJICBmaQorCSAgcHJldj0KKwllbHNlCisJICBkZXN0PSRhcmcKKwkgIGNvbnRpbnVlCisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGlmIHRlc3QgLW4gIiRhcmcyIjsgdGhlbgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmcyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgorICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiCisJZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRkZXN0IjsgdGhlbgorCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0IgorICAgIGRlc3Q9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCisgICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPXllcworICAgIGlmIHRlc3QgIiRpc2RpciIgPSB5ZXM7IHRoZW4KKyAgICAgIGRlc3RkaXI9IiRkZXN0IgorICAgICAgZGVzdG5hbWU9CisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJGRlc3QiICIiICIuIgorICAgICAgZGVzdGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBkZXN0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCisgICAgICBzZXQgZHVtbXkgJGZpbGVzOyBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIGNhc2UgJGRlc3RkaXIgaW4KKyAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisgICAgKikKKyAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKwljYXNlICRmaWxlIGluCisJKi5sbykgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgorCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgc3RhdGljbGlicz0KKyAgICBmdXR1cmVfbGliZGlycz0KKyAgICBjdXJyZW50X2xpYmRpcnM9CisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCisgICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi4kbGliZXh0KQorCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCisJZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRmaWxlIgorCTs7CisKKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCXJlbGlua19jb21tYW5kPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgY3VycmVudF9saWJkaXJzICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwllbHNlCisJICAjIE5vdGUgdGhlIGxpYmRpciBhcyBhIGZ1dHVyZSBsaWJkaXIuCisJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZ1dHVyZV9saWJkaXJzICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgXGAkZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgorCisJICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisJICBlbHNlCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCisJICBmaQorCisJICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyBcYCRmaWxlJyIKKwkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCSAgcmVhbG5hbWU9IiQxIgorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCisJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKKwkgICAgICAnZXhpdCAkPycKKwkgIHRzdHJpcG1lPSIkc3RyaXBtZSIKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwkgICAgY2FzZSAkcmVhbG5hbWUgaW4KKwkgICAgKi5kbGwuYSkKKwkgICAgICB0c3RyaXBtZT0iIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgJ2V4aXQgJD8nCisJICBmaQorCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KKwkgICAgIyBUcnkgYGxuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlIGBsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKKwkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgorCSAgICBmb3IgbGlua25hbWUKKwkgICAgZG8KKwkgICAgICB0ZXN0ICIkbGlua25hbWUiICE9ICIkcmVhbG5hbWUiIFwKKwkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICBkb25lCisJICBmaQorCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisJICBsaWI9IiRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgorCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlpbnN0bmFtZT0iJGRpci8kbmFtZSJpCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKKworCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KKwl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwk7OworCisgICAgICAqLmxvKQorCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgorCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwljYXNlICRkZXN0ZmlsZSBpbgorCSoubG8pCisJICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKKwkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIDs7CisJKi4kb2JqZXh0KQorCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIgorCSAgOzsKKwllc2FjCisKKwkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KKwl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisKKwkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KKwlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCSAgZnVuY19sbzJvICIkZmlsZSIKKwkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKKwlmaQorCWV4aXQgJEVYSVRfU1VDQ0VTUworCTs7CisKKyAgICAgICopCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorCSAgICBmaQorCSAgICA7OworCWVzYWMKKworCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqKQorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmaQorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgorCSAgbm90aW5zdF9kZXBsaWJzPQorCSAgcmVsaW5rX2NvbW1hbmQ9CisKKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisKKwkgIGZpbmFsaXplPXllcworCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkgICAgZmkKKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICIkbGliIiB8ICRTRUQgJ3MlXi4qLyUlZydgICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAiXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciCisJICAgICAgZmluYWxpemU9bm8KKwkgICAgZmkKKwkgIGRvbmUKKworCSAgcmVsaW5rX2NvbW1hbmQ9CisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgIG91dHB1dG5hbWU9CisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzOyB0aGVuCisJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCisJCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCisJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKKworCSAgICAgICAgJG9wdF9zaWxlbnQgfHwgeworCSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRyZWxpbmtfY29tbWFuZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgICB9CisJICAgICAgICBpZiBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKKwkgICAgICAgICAgZWxzZQorCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKKwkJICAkb3B0X2RyeV9ydW4gfHwgJHtSTX1yICIkdG1wZGlyIgorCQkgIGNvbnRpbnVlCisJICAgICAgICBmaQorCSAgICAgICAgZmlsZT0iJG91dHB1dG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rIFxgJGZpbGUnIgorCSAgICAgIGZpCisJICAgIH0KKwkgIGVsc2UKKwkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorCSAgICBmaWxlPWAkRUNITyAiJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisJICBmaQorCWZpCisKKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKwkjIG9uZSBhbnl3YXkKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisJICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKwkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCisJICAke1JNfXIgIiR0bXBkaXIiCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KKyAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICRvbGRsaWIiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCisgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCisgICAgZWxzZQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG9wdF9tb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisKKworIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKKyMgRXh0cmFjdCBzeW1ib2xzIGZyb20gZGxwcmVmaWxlcyBhbmQgY3JlYXRlICR7b3V0cHV0bmFtZX1TLm8gd2l0aAorIyBhIGRscHJlb3BlbiBzeW1ib2wgdGFibGUuCitmdW5jX2dlbmVyYXRlX2Rsc3ltcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9vdXRwdXRuYW1lPSIkMSIKKyAgICBteV9vcmlnaW5hdG9yPSIkMiIKKyAgICBteV9waWNfcD0iJHszLW5vfSIKKyAgICBteV9wcmVmaXg9YCRFQ0hPICIkbXlfb3JpZ2luYXRvciIgfCBzZWQgJ3MlW15hLXpBLVowLTldJV8lZydgCisgICAgbXlfZGxzeW1zPQorCisgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwlteV9kbHN5bXM9IiR7bXlfb3V0cHV0bmFtZX1TLmMiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAibm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJG15X2Rsc3ltcyI7IHRoZW4KKyAgICAgIGNhc2UgJG15X2Rsc3ltcyBpbgorICAgICAgIiIpIDs7CisgICAgICAqLmMpCisJIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KKwlubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfS5ubSIKKworCWZ1bmNfc2hvd19ldmFsICIkUk0gJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCisKKwkjIFBhcnNlIHRoZSBuYW1lIGxpc3QgaW50byBhIHNvdXJjZSBmaWxlLgorCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKworCSRvcHRfZHJ5X3J1biB8fCAkRUNITyA+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLyogJG15X2Rsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciBcYCRteV9vdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCisvKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuIFwiQ1wiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDQpKSB8fCAoX19HTlVDX18gPiA0KSkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIgorI2VuZGlmCisKKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorI2VuZGlmCisKKy8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCisiCisKKwlpZiB0ZXN0ICIkZGxzZWxmIiA9IHllczsgdGhlbgorCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRvdXRwdXQnIgorCisJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCisKKwkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwkgIGZvciBwcm9nZmlsZSBpbiAkcHJvZ2ZpbGVzOyBkbworCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHByb2dmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCisJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAgICAgICAgICAgICAgICBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZWxzZQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZmkKKwlmaQorCisJZm9yIGRscHJlZmlsZSBpbiAkZGxwcmVmaWxlczsgZG8KKwkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKKwkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisJICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAjIGlmIGFuIGltcG9ydCBsaWJyYXJ5LCB3ZSBuZWVkIHRvIG9idGFpbiBkbG5hbWUKKwkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCisJICAgICAgICBldmFsICJjdXJyX2xhZmlsZT1cJGxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0IgorCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiIKKwkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCisJICAgICAgICAgICMgVXNlIHN1YnNoZWxsLCB0byBhdm9pZCBjbG9iYmVyaW5nIGN1cnJlbnQgdmFyaWFibGUgdmFsdWVzCisJICAgICAgICAgIGRscHJlZmlsZV9kbG5hbWU9YHNvdXJjZSAiJGN1cnJfbGFmaWxlIiAmJiBlY2hvICIkZGxuYW1lImAKKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiIDsgdGhlbgorCSAgICAgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGVfZGxuYW1lIgorCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgICAgICAgIGVsc2UKKwkgICAgICAgICAgICAjIG5vIGxhZmlsZS4gdXNlciBleHBsaWNpdGx5IHJlcXVlc3RlZCAtZGxwcmVvcGVuIDxpbXBvcnQgbGlicmFyeT4uCisJICAgICAgICAgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kICIkZGxwcmVmaWxlIgorCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorCSAgICAgICAgICBmaQorCSAgICAgICAgZmkKKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxiYXNlbmFtZSIgOyB0aGVuCisJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgIGZ1bmNfd2FybmluZyAiQ291bGQgbm90IGNvbXB1dGUgRExMIG5hbWUgZnJvbSAkbmFtZSIKKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBmaQorCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8CisJICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fbm1fXy8vJyA+PiAnJG5saXN0JyIKKwkgICAgICAgIH0KKwkgICAgICBlbHNlICMgbm90IGFuIGltcG9ydCBsaWIKKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgICAgICAgfQorCSAgICAgIGZpCisJICAgIDs7CisJICAgICopCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICAgICAgfQorCSAgICA7OworICAgICAgICAgIGVzYWMKKwlkb25lCisKKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgorCSAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorCSAgZmkKKworCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgIGlmICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCSAgICAgIGlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzb3J0IC1rIDMKKwkgICAgICBlbHNlCisJCXNvcnQgKzIKKwkgICAgICBmaSB8CisJICAgICAgdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiJworCSAgZWxzZQorCSAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgIGZpCisKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAqYWRkcmVzczsKK30gbHRfZGxzeW1saXN0OworZXh0ZXJuIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdOworTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQore1wKKyAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCisKKwkgIGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgorCSAgbm8pCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgKikKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwl9ICMgISRvcHRfZHJ5X3J1bgorCisJcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQorCWNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSoiIC1zdGF0aWMgIiopIDs7CisJKikKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIqfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKwkgICotKi1ocHV4KikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIlgkbXlfcGljX3AiICE9IFhubzsgdGhlbgorCSAgICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXN5bXRhYl9jZmxhZ3M9CisJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisJICBjYXNlICRhcmcgaW4KKwkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworCSAgKikgZnVuY19hcHBlbmQgc3ltdGFiX2NmbGFncyAiICRhcmciIDs7CisJICBlc2FjCisJZG9uZQorCisJIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KKwlmdW5jX3Nob3dfZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDJHN5bXRhYl9jZmxhZ3MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSAiJG15X2Rsc3ltcyIpJyAnZXhpdCAkPycKKworCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIicKKworCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCisJc3ltZmlsZW9iaj0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dCIKKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciBcYCRteV9kbHN5bXMnIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KKyAgICAgICMgbHRfcHJlbG9hZGVkX3N5bWJvbHMuICBUaGUgbGlua2VyIHdpbGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUKKyAgICAgICMgcmVhbGx5IHdhcyByZXF1aXJlZC4KKworICAgICAgIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KKyAgICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKKyAgICBmaQorfQorCisjIGZ1bmNfd2luMzJfbGliaWQgYXJnCisjIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKKyMKKyMgTmVlZCBhIGxvdCBvZiBnb28gdG8gaGFuZGxlICpib3RoKiBETExzIGFuZCBpbXBvcnQgbGlicworIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKKyMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgorIyBEZXNwaXRlIHRoZSBuYW1lLCBhbHNvIGRlYWwgd2l0aCA2NCBiaXQgYmluYXJpZXMuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgICRvcHRfZGVidWcKKyAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKKyAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKKyAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgOzsKKyAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgorICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKKwkkU0VEIC1uIC1lICcKKwkgICAgMSwxMDB7CisJCS8gSSAveworCQkgICAgcywuKixpbXBvcnQsCisJCSAgICBwCisJCSAgICBxCisJCX0KKwkgICAgfSdgCisgICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgorICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7OworICAgICAgKikgICAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIHN0YXRpYyI7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgKkRMTCopCisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICA7OworICAqZXhlY3V0YWJsZSopICMgYnV0IHNoZWxsIHNjcmlwdHMgYXJlICJleGVjdXRhYmxlIiB0b28uLi4KKyAgICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICAgKk1TXCBXaW5kb3dzXCBQRVwgSW50ZWwqKQorICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiBBUkcKKyMKKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcworIworIyBUaGUgaXMgdGhlIGNvcmUgb2YgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBhCisjIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCisjIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeSBMSUJOQU1FLgorIworIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKKyMgb24gdGhlIHBsYXRmb3JtIGFuZCBjb21waWxlciB0aGF0IGNyZWF0ZWQgdGhlIGltcGxpYi4KKyMKKyMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCisjIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeS4KK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCit7CisgICRvcHRfZGVidWcKKyAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzoveworICAgICAgIyBQbGFjZSBtYXJrZXIgYXQgYmVnaW5uaW5nIG9mIGFyY2hpdmUgbWVtYmVyIGRsbG5hbWUgc2VjdGlvbgorICAgICAgcy8uKi89PT09TUFSSz09PT0vCisgICAgICBwCisgICAgICBkCisgICAgfQorICAgICMgVGhlc2UgbGluZXMgY2FuIHNvbWV0aW1lcyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJzLCBidXQKKyAgICAjIGFyZSBhbHdheXMgdW5pbnRlcmVzdGluZworICAgIC86WwkgXSpmaWxlIGZvcm1hdCBwZVtpXVx7LDFcfS0vZAorICAgIC9eSW4gYXJjaGl2ZSBbXjpdKjovZAorICAgICMgRW5zdXJlIG1hcmtlciBpcyBwcmludGVkCisgICAgL149PT09TUFSSz09PT0vcAorICAgICMgUmVtb3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3MgdGhhbiA0MyBjaGFyYWN0ZXJzCisgICAgL14uXHs0M1x9LyFkCisgICAgIyBGcm9tIHJlbWFpbmluZyBsaW5lcywgcmVtb3ZlIGZpcnN0IDQzIGNoYXJhY3RlcnMKKyAgICBzL14uXHs0M1x9Ly8nIHwKKyAgICAkU0VEIC1uICcKKyAgICAgICMgSm9pbiBtYXJrZXIgYW5kIGFsbCBsaW5lcyB1bnRpbCBuZXh0IG1hcmtlciBpbnRvIGEgc2luZ2xlIGxpbmUKKyAgICAgIC9ePT09PU1BUks9PT09LyBiIHBhcmEKKyAgICAgIEgKKyAgICAgICQgYiBwYXJhCisgICAgICBiCisgICAgICA6cGFyYQorICAgICAgeAorICAgICAgcy9cbi8vZworICAgICAgIyBSZW1vdmUgdGhlIG1hcmtlcgorICAgICAgcy9ePT09PU1BUks9PT09Ly8KKyAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRlc3BhY2UKKyAgICAgIHMvW1wuIFx0XSokLy8KKyAgICAgICMgUHJpbnQKKyAgICAgIC8uL3AnIHwKKyAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKKyAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQorICAgICMgYXJjaGl2ZSB3aGljaCBwb3NzZXNzIHRoYXQgc2VjdGlvbi4gSGV1cmlzdGljOiBlbGltaW5hdGUKKyAgICAjIGFsbCB0aG9zZSB3aGljaCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCisgICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCisgICAgIyBjaGFyYWN0ZXIuKSBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgYXJjaGl2ZXMgd2l0aCBsZXNzIHRoYW4KKyAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQorICAgICMgYmVnaW5zIHdpdGggYSBsaXRlcmFsICcuJyBvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkKKyAgICAjIGEgJy4nLgorICAgICMKKyAgICAjIE9mIHRob3NlIHRoYXQgcmVtYWluLCBwcmludCB0aGUgZmlyc3Qgb25lLgorICAgICRTRUQgLWUgJy9eXC4vZDsvXi5cLi9kO3EnCit9CisKKyMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wIgorfQorCisjIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgQVJHCisjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorIyBpbXBvcnQgbGlicmFyeSBBUkcuCisjCisjIFRoaXMgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgZm9yIHVzZSB3aGVuICRETExUT09MCisjIGRvZXMgbm90IHN1cHBvcnQgdGhlIC0taWRlbnRpZnktc3RyaWN0IG9wdGlvbi4KKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIgOyB0aGVuCisgICAgIyBiaW51dGlscyBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCisgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgOyB0aGVuCisgICAgIyBtcy1nZW5lcmF0ZWQgaW1wb3J0IGxpYnJhcnkKKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAorICBlbHNlCisgICAgIyB1bmtub3duCisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9IiIKKyAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK2Z1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGZfZXhfYW5fYXJfZGlyPSIkMSI7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9IiQxIgorICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgICBsb2NrZmlsZT0kZl9leF9hbl9hcl9vbGRsaWIubG9jaworICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGZpCisgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgXAorCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCisgICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCBybSAtZiAiJGxvY2tmaWxlIgorICAgIGZpCisgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgorICAgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KK2Z1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKKyAgICBteV9vbGRsaWJzPSR7MSsiJEAifQorICAgIG15X29sZG9ianM9IiIKKyAgICBteV94bGliPSIiCisgICAgbXlfeGFicz0iIgorICAgIG15X3hkaXI9IiIKKworICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbworICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorICAgICAgY2FzZSAkbXlfeGxpYiBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgorICAgICAgd2hpbGUgOjsgZG8KKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorCSoiICRteV94bGliX3UgIiopCisJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQorCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisJKikgYnJlYWsgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKKworICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi1kYXJ3aW4qKQorCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKKwkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCisJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CisJICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicworCSAgZGFyd2luX2N1cmRpcj1gcHdkYAorCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSJgCisJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKKwkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgorCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisJICAgIGRhcndpbl9hcmNoPQorCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgorCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkYmFzZW5hbWUiIHwgc29ydCAtdWAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisJICAgICRSTSAtcmYgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICRkYXJ3aW5fb3JpZ19kaXIKKwkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJfSAjICEkb3B0X2RyeV9ydW4KKwk7OworICAgICAgKikKKyAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorICAgIGRvbmUKKworICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorfQorCisKKyMgZnVuY19lbWl0X3dyYXBwZXIgW2FyZz1ub10KKyMKKyMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisjIGluY29ycG9yYXRlIHRoZSBzY3JpcHQgY29udGVudHMgd2l0aGluIGEgY3lnd2luL21pbmd3CisjIHdyYXBwZXIgZXhlY3V0YWJsZS4gIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KKyMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlcworIyBzZXQgdGhlcmVpbi4KKyMKKyMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgorIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKKyMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIHN0b3JlZCBpcworIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCisjIGJlaGF2aW9yLgorZnVuY19lbWl0X3dyYXBwZXIgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPSR7MS1ub30KKworCSRFQ0hPICJcCisjISAkU0hFTEwKKworIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKyMKKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKKyAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJworZWxzZQorICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCisgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICBmaWxlPVwiXCQwXCIiCisKKyAgICBxRUNITz1gJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICRFQ0hPICJcCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKyAgICBFQ0hPPVwiJHFFQ0hPXCIKKyAgZmkKKworIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHdoaWNoIGlzIHVzZWQgb25seSBvbgorIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKyMgdGhpcyBwYXR0ZXJuKS4KKyMKKyMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAorIyAtLWx0LWR1bXAtc2NyaXB0LiBUaGVyZSBpcywgZGVsaWJlcmF0ZWx5LCBubyAtLWx0LWhlbHAuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQorIyBzY3JpcHQncyAkMCB2YWx1ZSwgZm9sbG93ZWQgYnkgIiRAIi4KK2x0X29wdGlvbl9kZWJ1Zz0KK2Z1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQoreworICBsdF9zY3JpcHRfYXJnMD1cJDAKKyAgc2hpZnQKKyAgZm9yIGx0X29wdAorICBkbworICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCisgICAgLS1sdC1kZWJ1ZykgbHRfb3B0aW9uX2RlYnVnPTEgOzsKKyAgICAtLWx0LWR1bXAtc2NyaXB0KQorICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKKyAgICAgICAgdGVzdCBcIlhcJGx0X2R1bXBfRFwiID0gXCJYXCRsdF9zY3JpcHRfYXJnMFwiICYmIGx0X2R1bXBfRD0uCisgICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAorICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCisgICAgICAgIGV4aXQgMAorICAgICAgOzsKKyAgICAtLWx0LSopCisgICAgICAgIFwkRUNITyBcIlVucmVjb2duaXplZCAtLWx0LSBvcHRpb246ICdcJGx0X29wdCdcIiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIFByaW50IHRoZSBkZWJ1ZyBiYW5uZXIgaW1tZWRpYXRlbHk6CisgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisgIGZpCit9CisKKyMgVXNlZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMgYXJndW1lbnRzIHRvIHN0ZG91dAorIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCitmdW5jX2x0X2R1bXBfYXJncyAoKQoreworICBsdF9kdW1wX2FyZ3NfTj0xOworICBmb3IgbHRfYXJnCisgIGRvCisgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgorICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisgIGRvbmUKK30KKworIyBDb3JlIGZ1bmN0aW9uIGZvciBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQoreworIgorICBjYXNlICRob3N0IGluCisgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworICAqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKICAgICA7OwogCi0gICMgbGlidG9vbCBsaW5rIG1vZGUKLSAgbGluayB8IHJlbGluaykKLSAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBsaW5rIgorICAqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworICBlc2FjCisgICRFQ0hPICJcCisgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisgICAgICBleGl0IDEKK30KKworIyBBIGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCisjIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAorIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KK2Z1bmNfZXhlY19wcm9ncmFtICgpCit7CisgIGZvciBsdF93cl9hcmcKKyAgZG8KKyAgICBjYXNlIFwkbHRfd3JfYXJnIGluCisgICAgLS1sdC0qKSA7OworICAgICopIHNldCB4IFwiXCRAXCIgXCJcJGx0X3dyX2FyZ1wiOyBzaGlmdDs7CisgICAgZXNhYworICAgIHNoaWZ0CisgIGRvbmUKKyAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9Cit9CisKKyAgIyBQYXJzZSBvcHRpb25zCisgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKworICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAorICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisKKyAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCisgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgZG9uZQorCisgICMgVXN1YWxseSAnbm8nLCBleGNlcHQgb24gY3lnd2luL21pbmd3IHdoZW4gZW1iZWRkZWQgaW50bworICAjIHRoZSBjd3JhcHBlci4KKyAgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVI9JGZ1bmNfZW1pdF93cmFwcGVyX2FyZzEKKyAgaWYgdGVzdCBcIlwkV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVJcIiA9IFwieWVzXCI7IHRoZW4KKyAgICAjIHNwZWNpYWwgY2FzZSBmb3IgJy4nCisgICAgaWYgdGVzdCBcIlwkdGhpc2RpclwiID0gXCIuXCI7IHRoZW4KKyAgICAgIHRoaXNkaXI9XGBwd2RcYAorICAgIGZpCisgICAgIyByZW1vdmUgLmxpYnMgZnJvbSB0aGlzZGlyCisgICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCisgICAgKltcXFxcL10kb2JqZGlyICkgdGhpc2Rpcj1cYFwkRUNITyBcIlwkdGhpc2RpclwiIHwgJFNFRCAncyVbXFxcXC9dW15cXFxcL10qJCUlJ1xgIDs7CisgICAgJG9iamRpciApICAgdGhpc2Rpcj0uIDs7CisgICAgZXNhYworICBmaQorCisgICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCisgIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKKyAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKKyIKKworCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAkRUNITyAiXAorICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0CisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisKKyAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8CisgICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAke1NFRH0gMXFcYDsgXFwKKyAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgorCisgICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKKworICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCisgICAgICAkTUtESVIgXCJcJHByb2dkaXJcIgorICAgIGVsc2UKKyAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICAgIGZpIgorCisJICAkRUNITyAiXAorCisgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCisgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgIGVsc2UKKwkkRUNITyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCisJJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisJZXhpdCAxCisgICAgICBmaQorICAgIGZpCisKKyAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKKyAgICB7ICRSTSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKKyAgICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQorICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICBmaSIKKwllbHNlCisJICAkRUNITyAiXAorICBwcm9ncmFtPSckb3V0cHV0bmFtZScKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKyIKKwlmaQorCisJJEVDSE8gIlwKKworICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgorCisJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKwkjCisJIyBGaXggdGhlIERMTCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uICBEbyB0aGlzIGJlZm9yZSBwcmVwZW5kaW5nCisJIyB0byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCBhcmUgUEFUSCBhbmQgdW5pbnN0YWxsZWQKKwkjIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuCisJaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKyIKKwlmaQorCisJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCisJaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgorICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKKworICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgorICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCisgICAgJHNobGlicGF0aF92YXI9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgfCAkU0VEICdzLzo6KlwkLy8nXGAKKworICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorIgorCWZpCisKKwkkRUNITyAiXAorICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCisgICAgICBmdW5jX2V4ZWNfcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9CisgICAgZmkKKyAgZWxzZQorICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KKyAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiBcXFxgXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCisgICAgXCRFQ0hPIFwiVGhpcyBzY3JpcHQgaXMganVzdCBhIHdyYXBwZXIgZm9yIFwkcHJvZ3JhbS5cIiAxPiYyCisgICAgXCRFQ0hPIFwiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiIDE+JjIKKyAgICBleGl0IDEKKyAgZmkKK2ZpXAorIgorfQorCisKKyMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0CisjIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQorIyBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlIHNldCB0aGVyZWluLgorZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQoreworCWNhdCA8PEVPRgorCisvKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisgICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisKKyAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorCisgICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisqLworRU9GCisJICAgIGNhdCA8PCJFT0YiCisjaWZkZWYgX01TQ19WRVIKKyMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmZGVmIF9NU0NfVkVSCisjIGluY2x1ZGUgPGRpcmVjdC5oPgorIyBpbmNsdWRlIDxwcm9jZXNzLmg+CisjIGluY2x1ZGUgPGlvLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGlmZGVmIF9fQ1lHV0lOX18KKyMgIGluY2x1ZGUgPGlvLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisvKiBkZWNsYXJhdGlvbnMgb2Ygbm9uLUFOU0kgZnVuY3Rpb25zICovCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitpbnQgX3B1dGVudiAoY29uc3QgY2hhciAqKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOworaW50IHB1dGVudiAoY2hhciAqKTsKK2ludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIyBlbmRpZgorLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKyNlbmRpZgorCisvKiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBleGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3MgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCisjIGlmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAorIyAgZGVmaW5lIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgaW50cHRyX3QgaW50CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGRlZmluZSBIQVZFX1NFVEVOVgorIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChQQVRIX01BWCkKKyMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKKyNlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKKyMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgorI2Vsc2UKKyMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyBkZWZpbmUgU19JWE9USCAwCisjZW5kaWYKKyNpZm5kZWYgU19JWEdSUAorIyBkZWZpbmUgU19JWEdSUCAwCisjZW5kaWYKKworLyogcGF0aCBoYW5kbGluZyBwb3J0YWJpbGl0eSBtYWNyb3MgKi8KKyNpZm5kZWYgRElSX1NFUEFSQVRPUgorIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfV0lOMzIpIHx8IGRlZmluZWQgKF9fTVNET1NfXykgfHwgZGVmaW5lZCAoX19ESkdQUF9fKSB8fCBcCisgIGRlZmluZWQgKF9fT1MyX18pCisjIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgRElSX1NFUEFSQVRPUl8yICdcXCcKKyMgZW5kaWYKKyMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBQQVRIX1NFUEFSQVRPUl8yICc7JworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQorI2Vsc2UgLyogRElSX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCisJKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCisjZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQorI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCisjZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworCisjaWZuZGVmIEZPUEVOX1dCCisjIGRlZmluZSBGT1BFTl9XQiAidyIKKyNlbmRpZgorI2lmbmRlZiBfT19CSU5BUlkKKyMgZGVmaW5lIF9PX0JJTkFSWSAwCisjZW5kaWYKKworI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQorI2RlZmluZSBYRlJFRShzdGFsZSkgZG8geyBcCisgIGlmIChzdGFsZSkgeyBmcmVlICgodm9pZCAqKSBzdGFsZSk7IHN0YWxlID0gMDsgfSBcCit9IHdoaWxlICgwKQorCisjaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCitzdGF0aWMgaW50IGx0X2RlYnVnID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCisKK3ZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOworY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOworY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKK2ludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7CitzdGF0aWMgY29uc3QgY2hhciAqbm9ubnVsbCAoY29uc3QgY2hhciAqcyk7CitzdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOwordm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Cit2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKipwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndik7Cit2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgordm9sYXRpbGUgY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQVJOQU1FID0gIiRzaGxpYnBhdGhfdmFyIjsKK0VPRgorCisJICAgIGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZGxsc2VhcmNocGF0aDoiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICJQQVRIIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICIkb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGZpCisKKworCSAgICBjYXQgPDwiRU9GIgorCisjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgorCitzdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKK3N0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7CitzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGNoYXIgKipuZXdhcmd6OworICBpbnQgIG5ld2FyZ2M7CisgIGNoYXIgKnRtcF9wYXRoc3BlYzsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX3BhdGg7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9uYW1lOworICBjaGFyICp0YXJnZXRfbmFtZTsKKyAgY2hhciAqbHRfYXJndl96ZXJvOworICBpbnRwdHJfdCBydmFsID0gMTI3OworCisgIGludCBpOworCisgIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisKKyAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQKKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CisgICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKKyAgICovCisgIG5ld2FyZ2M9MDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKKwl7CitFT0YKKwkgICAgY2FzZSAiJGhvc3QiIGluCisJICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKKwkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncworCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgorCQk7OworCSAgICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkZWJ1Z19vcHQpID09IDApCisJeworICAgICAgICAgIGx0X2RlYnVnID0gMTsKKyAgICAgICAgICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCisgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKyAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCisgICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgorICAgICAgICAgICAqLworICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCisgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKyAgICAgICAgfQorICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgfQorICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworCitFT0YKKwkgICAgY2F0IDw8RU9GCisgIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXG4iKTsKK0VPRgorCSAgICBjYXQgPDwiRU9GIgorICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOworCisgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgdG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KKyAgdGFyZ2V0X25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKFRBUkdFVF9QUk9HUkFNX05BTUUpKTsKKyAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKwkJICB0YXJnZXRfbmFtZSk7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyAgbmV3YXJnelswXSA9CisgICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKKwkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKKyAgc3RyY3B5IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOworRU9GCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgLyogc3RvcCBoZXJlLCBhbmQgY29weSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgdHdpY2UgKi8KKyAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7CisKKyAgLyogZG8gTk9UIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSwgc28gdXNlIGFjdHVhbF9jd3JhcHBlcl9uYW1lICovCisgIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIERPIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSBpZiBpdCBleGlzdHMsIHNvIHVzZSB0YXJnZXRfbmFtZSAqLworICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgIHRtcF9wYXRoc3BlYyA9IE5VTEw7CitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCSAgICBjYXQgPDwiRU9GIgorICB7CisgICAgY2hhciogcDsKKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgfQorRU9GCisJICAgIDs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorICBYRlJFRSAodGFyZ2V0X25hbWUpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLworICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCisgIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKKyAgICAgYmUgcHJlcGVuZGVkIGJlZm9yZSAodGhhdCBpcywgYXBwZWFyIGFmdGVyKSBMSUJfUEFUSF9WQUxVRSAoJHRlbXBfcnBhdGgpCisgICAgIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCAqX1ZBUk5BTUVzIGFyZSBQQVRIIGJ1dCB1bmluc3RhbGxlZAorICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLworICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKyAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAorCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOworICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAorCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7CisgICAgfQorCitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLworICBuZXdhcmd6ID0gcHJlcGFyZV9zcGF3biAobmV3YXJneik7CisgIHJ2YWwgPSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CisgIGlmIChydmFsID09IC0xKQorICAgIHsKKyAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCisJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgcmV0dXJuIDEyNzsKKyAgICB9CisgIHJldHVybiBydmFsOworRU9GCisJCTs7CisJICAgICAgKikKKwkJY2F0IDw8IkVPRiIKKyAgZXhlY3YgKGx0X2FyZ3ZfemVybywgbmV3YXJneik7CisgIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCitFT0YKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCit9CisKK3ZvaWQgKgoreG1hbGxvYyAoc2l6ZV90IG51bSkKK3sKKyAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgaWYgKCFwKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKKwkJCSAgc3RyaW5nKSA6IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBjb25zdCBjaGFyICpiYXNlOworCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKKyAgICBuYW1lICs9IDI7CisjZW5kaWYKKworICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQorICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCisgICAgICBiYXNlID0gbmFtZSArIDE7CisgIHJldHVybiBiYXNlOworfQorCitpbnQKK2NoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgICAmJiAoc3Quc3RfbW9kZSAmIChTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEgpKSkKKyAgICByZXR1cm4gMTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK21ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgaW50IHJ2YWwgPSAwOworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICB7CisgICAgICBydmFsID0gY2htb2QgKHBhdGgsIHN0LnN0X21vZGUgfCBTX0lYT1RIIHwgU19JWEdSUCB8IFNfSVhVU1IpOworICAgIH0KKyAgcmV0dXJuIHJ2YWw7Cit9CisKKy8qIFNlYXJjaGVzIGZvciB0aGUgZnVsbCBwYXRoIG9mIHRoZSB3cmFwcGVyLiAgUmV0dXJucworICAgbmV3bHkgYWxsb2NhdGVkIGZ1bGwgcGF0aCBuYW1lIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQorICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtLgorKi8KK2NoYXIgKgorZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQoreworICBpbnQgaGFzX3NsYXNoID0gMDsKKyAgY29uc3QgY2hhciAqcDsKKyAgY29uc3QgY2hhciAqcF9uZXh0OworICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KKyAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOworICBpbnQgdG1wX2xlbjsKKyAgY2hhciAqY29uY2F0X25hbWU7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihmaW5kX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7CisKKyAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBBYnNvbHV0ZSBwYXRoPyAqLworI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIHdyYXBwZXJbMF0pICYmIHdyYXBwZXJbMV0gPT0gJzonKQorICAgIHsKKyAgICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCXJldHVybiBjb25jYXRfbmFtZTsKKyAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgICAgfQorICBlbHNlCisgICAgeworI2VuZGlmCisgICAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAod3JhcHBlclswXSkpCisJeworCSAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKwkgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJICAgIHJldHVybiBjb25jYXRfbmFtZTsKKwkgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJfQorI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICAgIH0KKyNlbmRpZgorCisgIGZvciAocCA9IHdyYXBwZXI7ICpwOyBwKyspCisgICAgaWYgKCpwID09ICcvJykKKyAgICAgIHsKKwloYXNfc2xhc2ggPSAxOworCWJyZWFrOworICAgICAgfQorICBpZiAoIWhhc19zbGFzaCkKKyAgICB7CisgICAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLworICAgICAgY29uc3QgY2hhciAqcGF0aCA9IGdldGVudiAoIlBBVEgiKTsKKyAgICAgIGlmIChwYXRoICE9IE5VTEwpCisJeworCSAgZm9yIChwID0gcGF0aDsgKnA7IHAgPSBwX25leHQpCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyICpxOworCSAgICAgIHNpemVfdCBwX2xlbjsKKwkgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKKwkJICBicmVhazsKKwkgICAgICBwX2xlbiA9IHEgLSBwOworCSAgICAgIHBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKKwkgICAgICBpZiAocF9sZW4gPT0gMCkKKwkJeworCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCisJCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorCQkgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKwkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisJCSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCBwLCBwX2xlbik7CisJCSAgY29uY2F0X25hbWVbcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkJcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJICAgIH0KKwl9CisgICAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLworICAgIH0KKyAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICB0bXBfbGVuID0gc3RybGVuICh0bXApOworICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKyAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKworICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorICAgIHJldHVybiBjb25jYXRfbmFtZTsKKyAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQoreworI2lmbmRlZiBTX0lTTE5LCisgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7CisjZWxzZQorICBjaGFyIGJ1ZltMVF9QQVRITUFYXTsKKyAgc3RydWN0IHN0YXQgczsKKyAgY2hhciAqdG1wX3BhdGhzcGVjID0geHN0cmR1cCAocGF0aHNwZWMpOworICBjaGFyICpwOworICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKKyAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQorICAgIHsKKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorCQkgICAgICB0bXBfcGF0aHNwZWMpOworICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQorCXsKKwkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCisJICAgIHsKKwkgICAgICBoYXNfc3ltbGlua3MgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGxhc3QgRElSX1NFUEFSQVRPUiAqLworCSAgcCA9IHRtcF9wYXRoc3BlYyArIHN0cmxlbiAodG1wX3BhdGhzcGVjKSAtIDE7CisJICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgcC0tOworCSAgaWYgKChwID09IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICB7CisJICAgICAgLyogbm8gbW9yZSBESVJfU0VQQVJBVE9SUyBsZWZ0ICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKwl9CisgICAgICBlbHNlCisJeworCSAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKKwkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCX0KKyAgICB9CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGlmICghaGFzX3N5bWxpbmtzKQorICAgIHsKKyAgICAgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7CisgICAgfQorCisgIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQorICAgIHsKKyAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICB9CisgIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOworI2VuZGlmCit9CisKK2NoYXIgKgorc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKyAgc2l6ZV90IGxlbiwgcGF0bGVuOworCisgIGFzc2VydCAoc3RyICE9IE5VTEwpOworICBhc3NlcnQgKHBhdCAhPSBOVUxMKTsKKworICBsZW4gPSBzdHJsZW4gKHN0cik7CisgIHBhdGxlbiA9IHN0cmxlbiAocGF0KTsKKworICBpZiAocGF0bGVuIDw9IGxlbikKKyAgICB7CisgICAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOworICAgICAgaWYgKHN0cmNtcCAoc3RyLCBwYXQpID09IDApCisJKnN0ciA9ICdcMCc7CisgICAgfQorICByZXR1cm4gc3RyOworfQorCit2b2lkCitsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGlmIChsdF9kZWJ1ZykKKyAgICB7CisgICAgICAodm9pZCkgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSk7CisgICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKyAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworICAgICAgdmFfZW5kIChhcmdzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitsdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKmZpbGUsCisJICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICptb2RlLAorCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogJXM6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSwgbW9kZSk7CisgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7CisKKyAgaWYgKGV4aXRfc3RhdHVzID49IDApCisgICAgZXhpdCAoZXhpdF9zdGF0dXMpOworfQorCit2b2lkCitsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgIHZhX2VuZCAoYXApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25udWxsIChjb25zdCBjaGFyICpzKQoreworICByZXR1cm4gcyA/IHMgOiAiKG51bGwpIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiAocyAmJiAhKnMpID8gIihlbXB0eSkiIDogbm9ubnVsbCAocyk7Cit9CisKK3ZvaWQKK2x0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgIHsKKyNpZmRlZiBIQVZFX1NFVEVOVgorICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCisgICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOworICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKKyNlbHNlCisgICAgaW50IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOworICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CisgICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCisgICAgICB7CisgICAgICAgIFhGUkVFIChzdHIpOworICAgICAgfQorI2VuZGlmCisgIH0KK30KKworY2hhciAqCitsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCit7CisgIGNoYXIgKm5ld192YWx1ZTsKKyAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCisgICAgeworICAgICAgaW50IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKKyAgICAgIGludCBhZGRfbGVuID0gc3RybGVuIChhZGQpOworICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7CisgICAgICBpZiAodG9fZW5kKQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBhZGQpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuZXdfdmFsdWUgPSB4c3RyZHVwIChhZGQpOworICAgIH0KKyAgcmV0dXJuIG5ld192YWx1ZTsKK30KKwordm9pZAorbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIC8qIHNvbWUgc3lzdGVtcyBjYW4ndCBjb3BlIHdpdGggYSAnOictdGVybWluYXRlZCBwYXRoICMnICovCisgICAgICBpbnQgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOworICAgICAgd2hpbGUgKCgobGVuID0gc3RybGVuIChuZXdfdmFsdWUpKSA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKKyAgICAgICAgeworICAgICAgICAgIG5ld192YWx1ZVtsZW4tMV0gPSAnXDAnOworICAgICAgICB9CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK0VPRgorCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorCisvKiBQcmVwYXJlcyBhbiBhcmd1bWVudCB2ZWN0b3IgYmVmb3JlIGNhbGxpbmcgc3Bhd24oKS4KKyAgIE5vdGUgdGhhdCBzcGF3bigpIGRvZXMgbm90IGJ5IGl0c2VsZiBjYWxsIHRoZSBjb21tYW5kIGludGVycHJldGVyCisgICAgIChnZXRlbnYgKCJDT01TUEVDIikgIT0gTlVMTCA/IGdldGVudiAoIkNPTVNQRUMiKSA6CisgICAgICAoeyBPU1ZFUlNJT05JTkZPIHY7IHYuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKKyAgICAgICAgIEdldFZlcnNpb25FeCgmdik7CisgICAgICAgICB2LmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ7CisgICAgICB9KSA/ICJjbWQuZXhlIiA6ICJjb21tYW5kLmNvbSIpLgorICAgSW5zdGVhZCBpdCBzaW1wbHkgY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnICcsIGFuZCBjYWxscworICAgQ3JlYXRlUHJvY2VzcygpLiAgV2UgbXVzdCBxdW90ZSB0aGUgYXJndW1lbnRzIHNpbmNlIFdpbjMyIENyZWF0ZVByb2Nlc3MoKQorICAgaW50ZXJwcmV0cyBjaGFyYWN0ZXJzIGxpa2UgJyAnLCAnXHQnLCAnXFwnLCAnIicgKGJ1dCBub3QgJzwnIGFuZCAnPicpIGluIGEKKyAgIHNwZWNpYWwgd2F5OgorICAgLSBTcGFjZSBhbmQgdGFiIGFyZSBpbnRlcnByZXRlZCBhcyBkZWxpbWl0ZXJzLiBUaGV5IGFyZSBub3QgdHJlYXRlZCBhcworICAgICBkZWxpbWl0ZXJzIGlmIHRoZXkgYXJlIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlczogIi4uLiIuCisgICAtIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGlucHV0LiBUaGVpciBvbmx5IGVmZmVjdCBpcworICAgICB0aGF0IHdpdGhpbiBkb3VibGUgcXVvdGVzLCBzcGFjZSBhbmQgdGFiIGFyZSB0cmVhdGVkIGxpa2Ugbm9ybWFsCisgICAgIGNoYXJhY3RlcnMuCisgICAtIEJhY2tzbGFzaGVzIG5vdCBmb2xsb3dlZCBieSBkb3VibGUgcXVvdGVzIGFyZSBub3Qgc3BlY2lhbC4KKyAgIC0gQnV0IDIqbisxIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIGJlY29tZQorICAgICBuIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIChuID49IDApOgorICAgICAgIFwiIC0+ICIKKyAgICAgICBcXFwiIC0+IFwiCisgICAgICAgXFxcXFwiIC0+IFxcIgorICovCisjZGVmaW5lIFNIRUxMX1NQRUNJQUxfQ0hBUlMgIlwiXFwgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKKyNkZWZpbmUgU0hFTExfU1BBQ0VfQ0hBUlMgIiBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorY2hhciAqKgorcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpCit7CisgIHNpemVfdCBhcmdjOworICBjaGFyICoqbmV3X2FyZ3Y7CisgIHNpemVfdCBpOworCisgIC8qIENvdW50IG51bWJlciBvZiBhcmd1bWVudHMuICAqLworICBmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdICE9IE5VTEw7IGFyZ2MrKykKKyAgICA7CisKKyAgLyogQWxsb2NhdGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIG5ld19hcmd2ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisKKyAgLyogUHV0IHF1b3RlZCBhcmd1bWVudHMgaW50byB0aGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gYXJndltpXTsKKworICAgICAgaWYgKHN0cmluZ1swXSA9PSAnXDAnKQorCW5ld19hcmd2W2ldID0geHN0cmR1cCAoIlwiXCIiKTsKKyAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BFQ0lBTF9DSEFSUykgIT0gTlVMTCkKKwl7CisJICBpbnQgcXVvdGVfYXJvdW5kID0gKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BBQ0VfQ0hBUlMpICE9IE5VTEwpOworCSAgc2l6ZV90IGxlbmd0aDsKKwkgIHVuc2lnbmVkIGludCBiYWNrc2xhc2hlczsKKwkgIGNvbnN0IGNoYXIgKnM7CisJICBjaGFyICpxdW90ZWRfc3RyaW5nOworCSAgY2hhciAqcDsKKworCSAgbGVuZ3RoID0gMDsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIGxlbmd0aCsrOworCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSAqczsKKwkgICAgICBpZiAoYyA9PSAnIicpCisJCWxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisJICAgICAgbGVuZ3RoKys7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKworCSAgcXVvdGVkX3N0cmluZyA9IFhNQUxMT0MgKGNoYXIsIGxlbmd0aCArIDEpOworCisJICBwID0gcXVvdGVkX3N0cmluZzsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgICpwKysgPSAnIic7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJeworCQkgIHVuc2lnbmVkIGludCBqOworCQkgIGZvciAoaiA9IGJhY2tzbGFzaGVzICsgMTsgaiA+IDA7IGotLSkKKwkJICAgICpwKysgPSAnXFwnOworCQl9CisJICAgICAgKnArKyA9IGM7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBqOworCSAgICAgIGZvciAoaiA9IGJhY2tzbGFzaGVzOyBqID4gMDsgai0tKQorCQkqcCsrID0gJ1xcJzsKKwkgICAgICAqcCsrID0gJyInOworCSAgICB9CisJICAqcCA9ICdcMCc7CisKKwkgIG5ld19hcmd2W2ldID0gcXVvdGVkX3N0cmluZzsKKwl9CisgICAgICBlbHNlCisJbmV3X2FyZ3ZbaV0gPSAoY2hhciAqKSBzdHJpbmc7CisgICAgfQorICBuZXdfYXJndlthcmdjXSA9IE5VTEw7CisKKyAgcmV0dXJuIG5ld19hcmd2OworfQorRU9GCisJCTs7CisJICAgIGVzYWMKKworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUqIGYpCit7CitFT0YKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgeWVzIHwKKyAgICAgICAgICAgICAgJFNFRCAtZSAncy9cKFtcXCJdXCkvXFxcMS9nJyBcCisJICAgICAgICAgICAtZSAncy9eLyAgZnB1dHMgKCIvJyAtZSAncy8kL1xcbiIsIGYpOy8nCisKKyAgICAgICAgICAgIGNhdCA8PCJFT0YiCit9CitFT0YKK30KKyMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisKKyMgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgQVJHCisjIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKK2Z1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KKyAgICAqaW1wb3J0KikgOiA7OworICAgICopIGZhbHNlIDs7CisgICAgZXNhYworfQorCisjIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgorZnVuY19tb2RlX2xpbmsgKCkKK3sKKyAgICAkb3B0X2RlYnVnCiAgICAgY2FzZSAkaG9zdCBpbgotICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqKQorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCiAgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCiAgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CiAgICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCkBAIC0xMTIxLDEwICs1MTAwLDEwIEBACiAgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCiAgICAgICA7OwogICAgIGVzYWMKLSAgICBsaWJ0b29sX2FyZ3M9IiRub25vcHQiCisgICAgbGlidG9vbF9hcmdzPSRub25vcHQKICAgICBiYXNlX2NvbXBpbGU9IiRub25vcHQgJEAiCi0gICAgY29tcGlsZV9jb21tYW5kPSIkbm9ub3B0IgotICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRub25vcHQiCisgICAgY29tcGlsZV9jb21tYW5kPSRub25vcHQKKyAgICBmaW5hbGl6ZV9jb21tYW5kPSRub25vcHQKIAogICAgIGNvbXBpbGVfcnBhdGg9CiAgICAgZmluYWxpemVfcnBhdGg9CkBAIC0xMTM5LDggKzUxMTgsMTAgQEAKICAgICBkbGxzZWFyY2hwYXRoPQogICAgIGxpYl9zZWFyY2hfcGF0aD1gcHdkYAogICAgIGluc3RfcHJlZml4X2Rpcj0KKyAgICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KIAogICAgIGF2b2lkX3ZlcnNpb249bm8KKyAgICBiaW5kaXI9CiAgICAgZGxmaWxlcz0KICAgICBkbHByZWZpbGVzPQogICAgIGRsc2VsZj1ubwpAQCAtMTE1NCw3ICs1MTM1LDYgQEAKICAgICBub19pbnN0YWxsPW5vCiAgICAgb2Jqcz0KICAgICBub25fcGljX29iamVjdHM9Ci0gICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCiAgICAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9CiAgICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCiAgICAgcHJlbG9hZD1ubwpAQCAtMTE2OCwxOSArNTE0OCwyNSBAQAogICAgIHRocmVhZF9zYWZlPW5vCiAgICAgdmluZm89CiAgICAgdmluZm9fbnVtYmVyPW5vCisgICAgd2Vha19saWJzPQogICAgIHNpbmdsZV9tb2R1bGU9IiR7d2x9LXNpbmdsZV9tb2R1bGUiCi0KICAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCiAKICAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCiAgICAgZm9yIGFyZwogICAgIGRvCiAgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJYnJlYWsKKwk7OwogICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCiAJY2FzZSAkYXJnIGluCiAJLWFsbC1zdGF0aWMpCiAJICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iIDE+JjIKKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKIAkgIGZpCiAJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KIAkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYwpAQCAtMTIxNCwyOSArNTIwMCwzMCBAQAogICAgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KICAgICAgIGFyZz0iJDEiCiAgICAgICBzaGlmdAotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQlxYXJnPVwiYCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgXCIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0Ci0JOzsKLSAgICAgICopIHFhcmc9JGFyZyA7OwotICAgICAgZXNhYwotICAgICAgbGlidG9vbF9hcmdzPSIkbGlidG9vbF9hcmdzICRxYXJnIgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIHFhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisgICAgICBmdW5jX2FwcGVuZCBsaWJ0b29sX2FyZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAKICAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgogICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCiAJY2FzZSAkcHJldiBpbgogCW91dHB1dCkKLQkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBAT1VUUFVUQCIKLQkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kIEBPVVRQVVRAIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQE9VVFBVVEAiCiAJICA7OwogCWVzYWMKIAogCWNhc2UgJHByZXYgaW4KKwliaW5kaXIpCisJICBiaW5kaXI9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CiAJZGxmaWxlc3xkbHByZWZpbGVzKQogCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KIAkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KLQkgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIEBTWU1GSUxFQCIKLQkgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAU1lNRklMRUAiCiAJICAgIHByZWxvYWQ9eWVzCiAJICBmaQogCSAgY2FzZSAkYXJnIGluCkBAIC0xMjYzLDkgKzUyNTAsOSBAQAogCSAgICA7OwogCSAgKikKIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgotCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRhcmciCiAJICAgIGVsc2UKLQkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgogCSAgICBmaQogCSAgICBwcmV2PQogCSAgICBjb250aW51ZQpAQCAtMTI3NCwxMCArNTI2MSw4IEBACiAJICA7OwogCWV4cHN5bXMpCiAJICBleHBvcnRfc3ltYm9scz0iJGFyZyIKLQkgIGlmIHRlc3QgISAtZiAiJGFyZyI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogc3ltYm9sIGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICBmaQorCSAgdGVzdCAtZiAiJGFyZyIgXAorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwpAQCAtMTI4NiwxMSArNTI3MSwxMjAgQEAKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKKwlmcmFtZXdvcmspCisJICBjYXNlICRob3N0IGluCisJICAgICotKi1kYXJ3aW4qKQorCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKwkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CisJCSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisJCSAgIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICBlc2FjCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CiAJaW5zdF9wcmVmaXgpCiAJICBpbnN0X3ByZWZpeF9kaXI9IiRhcmciCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CisJb2JqZWN0bGlzdCkKKwkgIGlmIHRlc3QgLWYgIiRhcmciOyB0aGVuCisJICAgIHNhdmVfYXJnPSRhcmcKKwkgICAgbW9yZWFyZ3M9CisJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKwkgICAgZG8KKyMJICAgICAgZnVuY19hcHBlbmQgbW9yZWFyZ3MgIiAkZmlsIgorCSAgICAgIGFyZz0kZmlsCisJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJICAgICAgaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkJcGljX29iamVjdD0KKwkJbm9uX3BpY19vYmplY3Q9CisKKwkJIyBSZWFkIHRoZSAubG8gZmlsZQorCQlmdW5jX3NvdXJjZSAiJGFyZyIKKworCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJCSAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisJCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJCWZpCisKKwkJIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKwkJICAgICAgcHJldj0KKwkJICAgICAgY29udGludWUKKwkJICAgIGVsc2UKKwkJICAgICAgIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJICAgICAgcHJldj1kbHByZWZpbGVzCisJCSAgICBmaQorCQkgIGZpCisKKwkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKwkJICAgIHByZXY9CisJCSAgZmkKKworCQkgICMgQSBQSUMgb2JqZWN0LgorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBhcmc9IiRwaWNfb2JqZWN0IgorCQlmaQorCisJCSMgTm9uLVBJQyBvYmplY3QuCisJCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCQkgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJCSAgZmkKKwkJZWxzZQorCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJCSAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBlbHNlCisJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJICBmdW5jX2xvMm8gIiRhcmciCisJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgICAgIGVsc2UKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCQlmaQorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OwogCXByZWNpb3VzX3JlZ2V4KQogCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9IiRhcmciCiAJICBwcmV2PQpAQCAtMTMwMSwxNzQgKzUzOTUsNTkgQEAKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKLQlvYmplY3RsaXN0KQotCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KLQkgICAgc2F2ZV9hcmc9JGFyZwotCSAgICBtb3JlYXJncz0KLQkgICAgZm9yIGZpbCBpbiBgY2F0ICRzYXZlX2FyZ2AKLQkgICAgZG8KLSMJICAgICAgbW9yZWFyZ3M9IiRtb3JlYXJncyAkZmlsIgotCSAgICAgIGFyZz0kZmlsCi0JICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCi0KLQkgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCi0JICAgICAgaWYgKCR7U0VEfSAtZSAnMnEnICRhcmcgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgotCQlwaWNfb2JqZWN0PQotCQlub25fcGljX29iamVjdD0KLQotCQkjIFJlYWQgdGhlIC5sbyBmaWxlCi0JCSMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCQljYXNlICRhcmcgaW4KLQkJKi8qIHwgKlxcKikgLiAkYXJnIDs7Ci0JCSopIC4gLi8kYXJnIDs7Ci0JCWVzYWMKLQotCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgXAotCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8Ci0JCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYgXAotCQkgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgotCQkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIiAxPiYyCi0JCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JCWZpCi0KLQkJIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLQkJeGRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JCWlmIHRlc3QgIlgkeGRpciIgPSAiWCRhcmciOyB0aGVuCi0JCSAgeGRpcj0KLQkJZWxzZQotCQkgIHhkaXI9IiR4ZGlyLyIKLQkJZmkKLQotCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgotCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKLQotCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLQkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KLQkJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCi0JCSAgICAgIHByZXY9Ci0JCSAgICAgIGNvbnRpbnVlCi0JCSAgICBlbHNlCi0JCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCi0JCSAgICAgIHByZXY9ZGxwcmVmaWxlcwotCQkgICAgZmkKLQkJICBmaQotCi0JCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKLQkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCi0JCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0JCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKLQkJICAgIHByZXY9Ci0JCSAgZmkKLQotCQkgICMgQSBQSUMgb2JqZWN0LgotCQkgIGxpYm9ianM9IiRsaWJvYmpzICRwaWNfb2JqZWN0IgotCQkgIGFyZz0iJHBpY19vYmplY3QiCi0JCWZpCi0KLQkJIyBOb24tUElDIG9iamVjdC4KLQkJaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCi0JCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkJICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCi0KLQkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKLQkJICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgotCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgotCQkgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCi0JCSAgZmkKLQkJZWxzZQotCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KLQkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCi0JCSAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgotCQkgIG5vbl9waWNfb2JqZWN0cz0iJG5vbl9waWNfb2JqZWN0cyAkbm9uX3BpY19vYmplY3QiCi0JCWZpCi0JICAgICAgZWxzZQotCQkjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KLQkJaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KLQkJICAkZWNobyAiJG1vZGVuYW1lOiBcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IiAxPiYyCi0JCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JCWVsc2UKLQkJICAjIERyeS1ydW4gY2FzZS4KLQotCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JCSAgeGRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JCSAgaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJGFyZyI7IHRoZW4KLQkJICAgIHhkaXI9Ci0JCSAgZWxzZQotCQkgICAgeGRpcj0iJHhkaXIvIgotCQkgIGZpCi0KLQkJICBwaWNfb2JqZWN0PWAkZWNobyAiWCR7eGRpcn0ke29iamRpcn0vJHthcmd9IiB8ICRYc2VkIC1lICIkbG8ybyJgCi0JCSAgbm9uX3BpY19vYmplY3Q9YCRlY2hvICJYJHt4ZGlyfSR7YXJnfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAotCQkgIGxpYm9ianM9IiRsaWJvYmpzICRwaWNfb2JqZWN0IgotCQkgIG5vbl9waWNfb2JqZWN0cz0iJG5vbl9waWNfb2JqZWN0cyAkbm9uX3BpY19vYmplY3QiCi0JCWZpCi0JICAgICAgZmkKLQkgICAgZG9uZQotCSAgZWxzZQotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBsaW5rIGlucHV0IGZpbGUgXGAkc2F2ZV9hcmcnIGRvZXMgbm90IGV4aXN0IgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIGZpCi0JICBhcmc9JHNhdmVfYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7CiAJcnBhdGggfCB4cnBhdGgpCiAJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KIAkgIGNhc2UgJGFyZyBpbgogCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwogCSAgKikKLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogb25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgogCSAgICA7OwogCSAgZXNhYwogCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KIAkgICAgY2FzZSAiJHJwYXRoICIgaW4KIAkgICAgKiIgJGFyZyAiKikgOzsKLQkgICAgKikgcnBhdGg9IiRycGF0aCAkYXJnIiA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7CiAJICAgIGVzYWMKIAkgIGVsc2UKIAkgICAgY2FzZSAiJHhycGF0aCAiIGluCiAJICAgICoiICRhcmcgIiopIDs7Ci0JICAgICopIHhycGF0aD0iJHhycGF0aCAkYXJnIiA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkYXJnIiA7OwogCSAgICBlc2FjCiAJICBmaQogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwotCXhjb21waWxlcikKLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisJc2hyZXh0KQorCSAgc2hyZXh0X2NtZHM9IiRhcmciCiAJICBwcmV2PQotCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRxYXJnIgotCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHFhcmciCiAJICBjb250aW51ZQogCSAgOzsKLQl4bGlua2VyKQotCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgotCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkcWFyZyIKKwl3ZWFrKQorCSAgZnVuY19hcHBlbmQgd2Vha19saWJzICIgJGFyZyIKIAkgIHByZXY9Ci0JICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHdsJHFhcmciCi0JICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkd2wkcWFyZyIKIAkgIGNvbnRpbnVlCiAJICA7OwogCXhjY2xpbmtlcikKLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCiAJICBwcmV2PQotCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRxYXJnIgotCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHFhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKIAkgIGNvbnRpbnVlCiAJICA7OwotCXNocmV4dCkKLSAgCSAgc2hyZXh0X2NtZHM9IiRhcmciCisJeGNvbXBpbGVyKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKIAkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKIAkgIGNvbnRpbnVlCiAJICA7OwotCWRhcndpbl9mcmFtZXdvcmt8ZGFyd2luX2ZyYW1ld29ya19za2lwKQotCSAgdGVzdCAiJHByZXYiID0gImRhcndpbl9mcmFtZXdvcmsiICYmIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKLQkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgotCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKwl4bGlua2VyKQorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRxYXJnIgogCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgogCSAgY29udGludWUKIAkgIDs7CiAJKikKQEAgLTE0ODQsMTYgKzU0NjMsMTYgQEAKICAgICAgIGNhc2UgJGFyZyBpbgogICAgICAgLWFsbC1zdGF0aWMpCiAJaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCi0JICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGxpbmtfc3RhdGljX2ZsYWciCi0JICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkbGlua19zdGF0aWNfZmxhZyIKKwkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgogCWZpCiAJY29udGludWUKIAk7OwogCiAgICAgICAtYWxsb3ctdW5kZWZpbmVkKQogCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KLQkkZWNobyAiJG1vZGVuYW1lOiBcYC1hbGxvdy11bmRlZmluZWQnIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIgMT4mMgotCWNvbnRpbnVlCisJZnVuY19mYXRhbF9lcnJvciAiXGAtYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCiAJOzsKIAogICAgICAgLWF2b2lkLXZlcnNpb24pCkBAIC0xNTAxLDYgKzU0ODAsMTEgQEAKIAljb250aW51ZQogCTs7CiAKKyAgICAgIC1iaW5kaXIpCisJcHJldj1iaW5kaXIKKwljb250aW51ZQorCTs7CisKICAgICAgIC1kbG9wZW4pCiAJcHJldj1kbGZpbGVzCiAJY29udGludWUKQEAgLTE1MTgsOCArNTUwMiw3IEBACiAKICAgICAgIC1leHBvcnQtc3ltYm9scyB8IC1leHBvcnQtc3ltYm9scy1yZWdleCkKIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IG1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCiAJZmkKIAlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1leHBvcnQtc3ltYm9scyI7IHRoZW4KIAkgIHByZXY9ZXhwc3ltcwpAQCAtMTUyOSwxNSArNTUxMiw4IEBACiAJY29udGludWUKIAk7OwogCi0gICAgICAtZnJhbWV3b3JrfC1hcmNofC1pc3lzcm9vdCkKLQljYXNlICIgJENDICIgaW4KLQkgICoiICR7YXJnfSAkezF9ICIqIHwgKiIgJHthcmd9CSR7MX0gIiopIAotCQlwcmV2PWRhcndpbl9mcmFtZXdvcmtfc2tpcCA7OwotCSAgKikgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgotCSAgICAgcHJldj1kYXJ3aW5fZnJhbWV3b3JrIDs7Ci0JZXNhYwotCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgotCWZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisgICAgICAtZnJhbWV3b3JrKQorCXByZXY9ZnJhbWV3b3JrCiAJY29udGludWUKIAk7OwogCkBAIC0xNTUxLDQ1ICs1NTI3LDU5IEBACiAgICAgICAtTFtBLVpdW0EtWl0qOiopCiAJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KIAluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQotCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCi0JICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgogCSAgOzsKIAllc2FjCiAJY29udGludWUKIAk7OwogCiAgICAgICAtTCopCi0JZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYAorCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCisJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKKwkgIGZpCisJZmkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAogCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgogCWNhc2UgJGRpciBpbgogCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKIAkqKQogCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAotCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIiAxPiYyCi0JICAgIGFic2Rpcj0iJGRpciIKLQkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRkaXIiCi0JICBmaQorCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCiAJICBkaXI9IiRhYnNkaXIiCiAJICA7OwogCWVzYWMKIAljYXNlICIkZGVwbGlicyAiIGluCi0JKiIgLUwkZGlyICIqKSA7OworCSoiIC1MJGRpciAiKiB8ICoiICRhcmcgIiopCisJICAjIFdpbGwgb25seSBoYXBwZW4gZm9yIGFic29sdXRlIG9yIHN5c3Jvb3QgYXJndW1lbnRzCisJICA7OwogCSopCi0JICBkZXBsaWJzPSIkZGVwbGlicyAtTCRkaXIiCi0JICBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIKKwkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKKwkgIGNhc2UgJGRpciBpbgorCSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSogfCA9KikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7CisJICBlc2FjCisJICBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIgogCSAgOzsKIAllc2FjCiAJY2FzZSAkaG9zdCBpbgotCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqKQotCSAgdGVzdGJpbmRpcj1gJGVjaG8gIlgkZGlyIiB8ICRYc2VkIC1lICdzKi9saWIkKi9iaW4qJ2AKKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJEVDSE8gIiRkaXIiIHwgJFNFRCAncyovbGliJCovYmluKidgCiAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KIAkgICoiOiRkaXI6IiopIDs7Ci0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokZGlyIjs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokZGlyIjs7CiAJICBlc2FjCiAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OwotCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OwogCSAgZXNhYwogCSAgOzsKIAllc2FjCkBAIC0xNTk5LDcgKzU1ODksNyBAQAogICAgICAgLWwqKQogCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KIAkgIGNhc2UgJGhvc3QgaW4KLQkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKikKKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKIAkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKIAkgICAgY29udGludWUKIAkgICAgOzsKQEAgLTE2MTMsNyArNTYwMyw3IEBACiAJICAgIDs7CiAJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCiAJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1mcmFtZXdvcmsgU3lzdGVtIgorCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgogCSAgICBjb250aW51ZQogCSAgICA7OwogCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQpAQCAtMTYzMywyOSArNTYyMyw3IEBACiAJICAgOzsKIAkgZXNhYwogCWZpCi0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKLSAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KLSAgICAgIC1tb2RlbCkKLQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKLQljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCi0JZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKLQlwcmV2PXhjb21waWxlcgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQotCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKLQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKLQlmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLW11bHRpX21vZHVsZSkKLQlzaW5nbGVfbW9kdWxlPSIke3dsfS1tdWx0aV9tb2R1bGUiCisJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCiAJY29udGludWUKIAk7OwogCkBAIC0xNjY0LDM2ICs1NjMyLDMwIEBACiAJY29udGludWUKIAk7OwogCi0gICAgICAjIC02NCwgLW1pcHNbMC05XSBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFNHSSBjb21waWxlcgotICAgICAgIyAtclswLTldWzAtOV0qIHNwZWNpZmllcyB0aGUgcHJvY2Vzc29yIG9uIHRoZSBTR0kgY29tcGlsZXIKLSAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTdW4gY29tcGlsZXIKLSAgICAgICMgK0RBKiwgK0REKiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIEhQIGNvbXBpbGVyCi0gICAgICAjIC1xKiBwYXNzIHRocm91Z2ggY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgotICAgICAgIyAtbSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21waWxlciBhcmdzIGZvciBHQ0MKLSAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYwotICAgICAgIyBjb21waWxlciBhcmdzIGZvciBHQ0MKLSAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogcGFzcyB0aHJvdWdoIHByb2ZpbGluZyBmbGFnIGZvciBHQ0MKLSAgICAgICMgLUYvcGF0aCBnaXZlcyBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KLSAgICAgICMgQGZpbGUgR0NDIHJlc3BvbnNlIGZpbGVzCi0gICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKLSAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKikKKyAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKKyAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCisgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKIAotCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAotCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCi0JYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotCWNhc2UgJGFyZyBpbgotCSpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCSAgYXJnPSJcIiRhcmdcIiIKLQkgIDs7CisgICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7CiAJZXNhYwotICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKLSAgICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgotICAgICAgICBjb250aW51ZQotICAgICAgICA7OworCWNvbnRpbnVlCisJOzsKIAotICAgICAgLXNocmV4dCkKLQlwcmV2PXNocmV4dAorICAgICAgLW11bHRpX21vZHVsZSkKKwlzaW5nbGVfbW9kdWxlPSIke3dsfS1tdWx0aV9tb2R1bGUiCiAJY29udGludWUKIAk7OwogCkBAIC0xNzA0LDExICs1NjY2LDExIEBACiAKICAgICAgIC1uby1pbnN0YWxsKQogCWNhc2UgJGhvc3QgaW4KLQkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qKQorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiogfCAqLWNlZ2NjKikKIAkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cwogCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCi0JICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIgMT4mMgotCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogYXNzdW1pbmcgXGAtbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIiAxPiYyCisJICBmdW5jX3dhcm5pbmcgIlxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IgorCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCiAJICBmYXN0X2luc3RhbGw9bm8KIAkgIDs7CiAJKikgbm9faW5zdGFsbD15ZXMgOzsKQEAgLTE3NDksMjIgKzU3MTEsMzYgQEAKIAk7OwogCiAgICAgICAtUiopCi0JZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MvXi1SLy8nYAorCWZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRhcmciCisJZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KIAljYXNlICRkaXIgaW4KIAlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJPSopCisJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRkaXIiCisJICBkaXI9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICA7OwogCSopCi0JICAkZWNobyAiJG1vZGVuYW1lOiBvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKIAkgIDs7CiAJZXNhYwogCWNhc2UgIiR4cnBhdGggIiBpbgogCSoiICRkaXIgIiopIDs7Ci0JKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKIAllc2FjCiAJY29udGludWUKIAk7OwogCisgICAgICAtc2hhcmVkKQorCSMgVGhlIGVmZmVjdHMgb2YgLXNoYXJlZCBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJY29udGludWUKKwk7OworCisgICAgICAtc2hyZXh0KQorCXByZXY9c2hyZXh0CisJY29udGludWUKKwk7OworCiAgICAgICAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCiAJIyBUaGUgZWZmZWN0cyBvZiAtc3RhdGljIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KIAkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKQEAgLTE3ODMsNDcgKzU3NTksNDkgQEAKIAlwcmV2PXZpbmZvCiAJY29udGludWUKIAk7OworCiAgICAgICAtdmVyc2lvbi1udW1iZXIpCiAJcHJldj12aW5mbwogCXZpbmZvX251bWJlcj15ZXMKIAljb250aW51ZQogCTs7CiAKKyAgICAgIC13ZWFrKQorICAgICAgICBwcmV2PXdlYWsKKwljb250aW51ZQorCTs7CisKICAgICAgIC1XYywqKQotCWFyZ3M9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCIgLWUgJ3MvXi1XYywvLydgCisJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCWFyZz0KIAlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KIAkgIElGUz0iJHNhdmVfaWZzIgotCSAgY2FzZSAkZmxhZyBpbgotCSAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQkgICAgZmxhZz0iXCIkZmxhZ1wiIgotCSAgICA7OwotCSAgZXNhYwotCSAgYXJnPSIkYXJnICR3bCRmbGFnIgotCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZmxhZyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCWRvbmUKIAlJRlM9IiRzYXZlX2lmcyIKLQlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAicy9eIC8vImAKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAk7OwogCiAgICAgICAtV2wsKikKLQlhcmdzPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiIC1lICdzL14tV2wsLy8nYAorCWZ1bmNfc3RyaXBuYW1lICctV2wsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAlhcmc9CiAJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCiAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCiAJICBJRlM9IiRzYXZlX2lmcyIKLQkgIGNhc2UgJGZsYWcgaW4KLQkgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JICAgIGZsYWc9IlwiJGZsYWdcIiIKLQkgICAgOzsKLQkgIGVzYWMKLQkgIGFyZz0iJGFyZyAkd2wkZmxhZyIKLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJGZsYWciCi0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZsYWciCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAlkb25lCiAJSUZTPSIkc2F2ZV9pZnMiCi0JYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgInMvXiAvLyJgCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJOzsKIAogICAgICAgLVhjb21waWxlcikKQEAgLTE4NDEsNTMgKzU4MTksNjkgQEAKIAljb250aW51ZQogCTs7CiAKKyAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKKyAgICAgIC1tc2dfKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKKyAgICAgICMgLTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgorICAgICAgIyArREEqLCArREQqICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBIUCBjb21waWxlcgorICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCisgICAgICAjIC1GL3BhdGggICAgICAgICAgICAgIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgLWZzdGFjay1wcm90ZWN0b3IqICAgc3RhY2sgcHJvdGVjdG9yIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCisgICAgICAjIC10cD0qICAgICAgICAgICAgICAgIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KKyAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAorICAgICAgIyAtTyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAorICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCisgICAgICAtTyp8LWZsdG8qfC1md2hvcHIqfC1mdXNlLWxpbmtlci1wbHVnaW58LWZzdGFjay1wcm90ZWN0b3IqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorICAgICAgICBjb250aW51ZQorICAgICAgICA7OworCiAgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KICAgICAgIC0qIHwgKyopCi0JIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCi0JIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KLQlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0JY2FzZSAkYXJnIGluCi0JKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JICBhcmc9IlwiJGFyZ1wiIgotCSAgOzsKLQllc2FjCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJOzsKIAogICAgICAgKi4kb2JqZXh0KQogCSMgQSBzdGFuZGFyZCBvYmplY3QuCi0Jb2Jqcz0iJG9ianMgJGFyZyIKKwlmdW5jX2FwcGVuZCBvYmpzICIgJGFyZyIKIAk7OwogCiAgICAgICAqLmxvKQogCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgogCiAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgotCWlmICgke1NFRH0gLWUgJzJxJyAkYXJnIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgogCSAgcGljX29iamVjdD0KIAkgIG5vbl9waWNfb2JqZWN0PQogCiAJICAjIFJlYWQgdGhlIC5sbyBmaWxlCi0JICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLQkgIGNhc2UgJGFyZyBpbgotCSAgKi8qIHwgKlxcKikgLiAkYXJnIDs7Ci0JICAqKSAuIC4vJGFyZyA7OwotCSAgZXNhYworCSAgZnVuY19zb3VyY2UgIiRhcmciCiAKLQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCBcCisJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKIAkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKLQkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYgXAorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgogCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgogCSAgZmkKIAogCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLQkgIHhkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCSAgaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJGFyZyI7IHRoZW4KLQkgICAgeGRpcj0KLSAJICBlbHNlCi0JICAgIHhkaXI9IiR4ZGlyLyIKLQkgIGZpCisJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCiAKIAkgIGlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCiAJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCkBAIC0xODk1LDcgKzU4ODksNyBAQAogCiAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KIAkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCi0JCWRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCiAJCXByZXY9CiAJCWNvbnRpbnVlCiAJICAgICAgZWxzZQpAQCAtMTkwNywxMiArNTkwMSwxMiBAQAogCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQogCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCiAJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKIAkgICAgICBwcmV2PQogCSAgICBmaQogCiAJICAgICMgQSBQSUMgb2JqZWN0LgotCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgogCSAgICBhcmc9IiRwaWNfb2JqZWN0IgogCSAgZmkKIApAQCAtMTkyMiw3ICs1OTE2LDcgQEAKIAkgICAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgogCiAJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAotCSAgICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCiAJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgogCSAgICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgogCSAgICBmaQpAQCAtMTkzMCw1MiArNTkyNCw0NyBAQAogCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCiAJICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KIAkgICAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgotCSAgICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCiAJICBmaQogCWVsc2UKIAkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgotCSAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIGVsc2UKLQkgICAgIyBEcnktcnVuIGNhc2UuCi0KKwkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgogCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotCSAgICB4ZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQkgICAgaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJGFyZyI7IHRoZW4KLQkgICAgICB4ZGlyPQotCSAgICBlbHNlCi0JICAgICAgeGRpcj0iJHhkaXIvIgotCSAgICBmaQorCSAgICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKIAotCSAgICBwaWNfb2JqZWN0PWAkZWNobyAiWCR7eGRpcn0ke29iamRpcn0vJHthcmd9IiB8ICRYc2VkIC1lICIkbG8ybyJgCi0JICAgIG5vbl9waWNfb2JqZWN0PWAkZWNobyAiWCR7eGRpcn0ke2FyZ30iIHwgJFhzZWQgLWUgIiRsbzJvImAKLQkgICAgbGlib2Jqcz0iJGxpYm9ianMgJHBpY19vYmplY3QiCi0JICAgIG5vbl9waWNfb2JqZWN0cz0iJG5vbl9waWNfb2JqZWN0cyAkbm9uX3BpY19vYmplY3QiCisJICAgIGZ1bmNfbG8ybyAiJGFyZyIKKwkgICAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKIAkgIGZpCiAJZmkKIAk7OwogCiAgICAgICAqLiRsaWJleHQpCiAJIyBBbiBhcmNoaXZlLgotCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCi0Jb2xkX2RlcGxpYnM9IiRvbGRfZGVwbGlicyAkYXJnIgorCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIG9sZF9kZXBsaWJzICIgJGFyZyIKIAljb250aW51ZQogCTs7CiAKICAgICAgICoubGEpCiAJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgogCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCiAJaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgogCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCi0JICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICBwcmV2PQogCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgogCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KLQkgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgIHByZXY9CiAJZWxzZQotCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCWZpCiAJY29udGludWUKIAk7OwpAQCAtMTk4NCw3MCArNTk3Myw1MyBAQAogICAgICAgKikKIAkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKIAkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgotCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLQljYXNlICRhcmcgaW4KLQkqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQkgIGFyZz0iXCIkYXJnXCIiCi0JICA7OwotCWVzYWMKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCTs7CiAgICAgICBlc2FjICMgYXJnCiAKICAgICAgICMgTm93IGFjdHVhbGx5IHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvbW1hbmRzLgogICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KLQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKLQlmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCiAgICAgICBmaQogICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKIAotICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogdGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIgMT4mMgotICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQorICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCiAKICAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCiAgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgotICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCi0gICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgogICAgIGZpCiAKICAgICBvbGRsaWJzPQogICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKLSAgICBvdXRwdXRuYW1lPWAkZWNobyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKICAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgogCiAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCiAgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCi0gICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRlY2hvIFwiWFwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkWHNlZCAtZSBcJ3MvOi8gL2dcJ1xgCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiXCR7JHNobGlicGF0aF92YXJ9XCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAogICAgIGVsc2UKICAgICAgIHNobGliX3NlYXJjaF9wYXRoPQogICAgIGZpCiAgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCiAgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgogCi0gICAgb3V0cHV0X29iamRpcj1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0gICAgaWYgdGVzdCAiWCRvdXRwdXRfb2JqZGlyIiA9ICJYJG91dHB1dCI7IHRoZW4KLSAgICAgIG91dHB1dF9vYmpkaXI9IiRvYmpkaXIiCi0gICAgZWxzZQotICAgICAgb3V0cHV0X29iamRpcj0iJG91dHB1dF9vYmpkaXIvJG9iamRpciIKLSAgICBmaQorICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCisgICAgb3V0cHV0X29iamRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyIgorICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCisgICAgdG9vbF9vdXRwdXRfb2JqZGlyPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKICAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KLSAgICBpZiB0ZXN0ICEgLWQgIiRvdXRwdXRfb2JqZGlyIjsgdGhlbgotICAgICAgJHNob3cgIiRta2RpciAkb3V0cHV0X29iamRpciIKLSAgICAgICRydW4gJG1rZGlyICRvdXRwdXRfb2JqZGlyCi0gICAgICBleGl0X3N0YXR1cz0kPwotICAgICAgaWYgdGVzdCAiJGV4aXRfc3RhdHVzIiAtbmUgMCAmJiB0ZXN0ICEgLWQgIiRvdXRwdXRfb2JqZGlyIjsgdGhlbgotCWV4aXQgJGV4aXRfc3RhdHVzCi0gICAgICBmaQotICAgIGZpCisgICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKIAogICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAogICAgIGNhc2UgJG91dHB1dCBpbgogICAgICIiKQotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZSIgMT4mMgotICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZSIKICAgICAgIDs7CiAgICAgKi4kbGliZXh0KSBsaW5rbW9kZT1vbGRsaWIgOzsKICAgICAqLmxvIHwgKi4kb2JqZXh0KSBsaW5rbW9kZT1vYmogOzsKQEAgLTIwNTUsMjcgKzYwMjcsMTggQEAKICAgICAqKSBsaW5rbW9kZT1wcm9nIDs7ICMgQW55dGhpbmcgZWxzZSBzaG91bGQgYmUgYSBwcm9ncmFtLgogICAgIGVzYWMKIAotICAgIGNhc2UgJGhvc3QgaW4KLSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiopCi0gICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcwotICAgICAgZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPXllcwotICAgICAgOzsKLSAgICAqKQotICAgICAgZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRkdXBsaWNhdGVfZGVwcwotICAgICAgOzsKLSAgICBlc2FjCiAgICAgc3BlY2lhbGRlcGxpYnM9CiAKICAgICBsaWJzPQogICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcwogICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQogICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0gICAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9kZXBzIiA9ICJYeWVzIiA7IHRoZW4KKyAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCiAJY2FzZSAiJGxpYnMgIiBpbgotCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CiAJZXNhYwogICAgICAgZmkKLSAgICAgIGxpYnM9IiRsaWJzICRkZXBsaWIiCisgICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKICAgICBkb25lCiAKICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCkBAIC0yMDg1LDEyICs2MDQ4LDEyIEBACiAgICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCiAgICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KICAgICAgIHByZV9wb3N0X2RlcHM9Ci0gICAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgogCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbwogCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgotCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJHByZV9wb3N0X2RlcHMiIDs7CiAJICBlc2FjCi0JICBwcmVfcG9zdF9kZXBzPSIkcHJlX3Bvc3RfZGVwcyAkcHJlX3Bvc3RfZGVwIgorCSAgZnVuY19hcHBlbmQgcHJlX3Bvc3RfZGVwcyAiICRwcmVfcG9zdF9kZXAiCiAJZG9uZQogICAgICAgZmkKICAgICAgIHByZV9wb3N0X2RlcHM9CkBAIC0yMTAxLDE1ICs2MDY0LDE2IEBACiAgICAgbmV3bGliX3NlYXJjaF9wYXRoPQogICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwogICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisKICAgICBjYXNlICRsaW5rbW9kZSBpbgogICAgIGxpYikKLQlwYXNzZXM9ImNvbnYgbGluayIKKwlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCiAJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCiAJICBjYXNlICRmaWxlIGluCiAJICAqLmxhKSA7OwogCSAgKikKLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogbGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICBmdW5jX2ZhdGFsX2hlbHAgImxpYnJhcmllcyBjYW4gXGAtZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIKIAkgICAgOzsKIAkgIGVzYWMKIAlkb25lCkBAIC0yMTI1LDcgKzYwODksMjAgQEAKICAgICAqKSAgcGFzc2VzPSJjb252IgogCTs7CiAgICAgZXNhYworCiAgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KKyAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQorICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiOyB0aGVuCisJIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCisJIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5CisgICAgICAgIHRtcF9kZXBsaWJzPQorCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKyAgICAgIGZpCisKICAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CiAJIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIjsgdGhlbgogCWxpYnM9IiRkZXBsaWJzIgpAQCAtMjEzOCwxMSArNjExNSwzNSBAQAogCWxpbmspIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSAkZGVwZW5kZW5jeV9saWJzIiA7OwogCWVzYWMKICAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixkbHByZW9wZW4iOyB0aGVuCisJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisJICBkZXBlbmRlbmN5X2xpYnM9CisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZG9uZQorCWxpYnM9IiRkbHByZWZpbGVzIgorICAgICAgZmkKICAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgogCSMgQ29sbGVjdCBkbHByZW9wZW5lZCBsaWJyYXJpZXMKIAlzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIgogCWRlcGxpYnM9CiAgICAgICBmaQorCiAgICAgICBmb3IgZGVwbGliIGluICRsaWJzOyBkbwogCWxpYj0KIAlmb3VuZD1ubwpAQCAtMjE1MiwxNiArNjE1MywyMyBAQAogCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKIAkgIGVsc2UKLQkgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZGVwbGliIgorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQogCSAgZmkKIAkgIGNvbnRpbnVlCiAJICA7OwogCS1sKikKIAkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZzsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIiAxPiYyCisJICAgIGZ1bmNfd2FybmluZyAiXGAtbCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKIAkgICAgY29udGludWUKIAkgIGZpCi0JICBuYW1lPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1sLy8nYAorCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgogCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCiAJICBlbHNlCkBAIC0yMTk3LDIxICs2MjA1LDE3IEBACiAJICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KIAkgICAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkgICAgICAqIiAkZGVwbGliICIqKQotCQlpZiAoJHtTRUR9IC1lICcycScgJGxpYiB8Ci0gICAgICAgICAgICAgICAgICAgIGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KIAkJICBsaWJyYXJ5X25hbWVzPQogCQkgIG9sZF9saWJyYXJ5PQotCQkgIGNhc2UgJGxpYiBpbgotCQkgICovKiB8ICpcXCopIC4gJGxpYiA7OwotCQkgICopIC4gLi8kbGliIDs7Ci0JCSAgZXNhYworCQkgIGZ1bmNfc291cmNlICIkbGliIgogCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KIAkJICAgIGxsPSIkbCIKIAkJICBkb25lCiAJCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKIAkJICAgIGZvdW5kPW5vCi0JCSAgICBsYWRpcj1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JCSAgICB0ZXN0ICJYJGxhZGlyIiA9ICJYJGxpYiIgJiYgbGFkaXI9Ii4iCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgogCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKIAkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgogCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKQEAgLTIyMjMsMTkgKzYyMjcsMzYgQEAKIAkJICAgIGNvbnRpbnVlCiAJCSAgZmkKIAkJZmkKLQkgICAgICAgIDs7CisJCTs7CiAJICAgICAgKikgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCiAJICBmaQogCSAgOzsgIyAtbAorCSoubHRmcmFtZXdvcmspCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OwogCS1MKikKIAkgIGNhc2UgJGxpbmttb2RlIGluCiAJICBsaWIpCiAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAiYCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLUwvLydgCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgICA7OwogCSAgcHJvZykKIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgpAQCAtMjI0OCwyNyArNjI2OSwzNCBAQAogCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgogCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCiAJICAgIGZpCi0JICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAiYCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLUwvLydgCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgICA7OwogCSAgKikKLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIgMT4mMgorCSAgICBmdW5jX3dhcm5pbmcgIlxgLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCiAJICAgIDs7CiAJICBlc2FjICMgbGlua21vZGUKIAkgIGNvbnRpbnVlCiAJICA7OyAjIC1MCiAJLVIqKQogCSAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgotCSAgICBkaXI9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLVIvLydgCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAogCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgogCSAgICBjYXNlICIkeHJwYXRoICIgaW4KIAkgICAgKiIgJGRpciAiKikgOzsKLQkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CiAJICAgIGVzYWMKIAkgIGZpCiAJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCSAgY29udGludWUKIAkgIDs7Ci0JKi5sYSkgbGliPSIkZGVwbGliIiA7OworCSoubGEpCisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICA7OwogCSouJGxpYmV4dCkKIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKQEAgLTIyNzYsMzUgKzYzMDQsNDEgQEAKIAkgIGZpCiAJICBjYXNlICRsaW5rbW9kZSBpbgogCSAgbGliKQotCSAgICB2YWxpZF9hX2xpYj1ubwotCSAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCSAgICAgIG1hdGNoX3BhdHRlcm4qKQotCQlzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kCi0JICAgICAgICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQyIFwoLipcKSJgCi0JCWlmIGV2YWwgJGVjaG8gXCIkZGVwbGliXCIgMj4vZGV2L251bGwgXAotCQkgICAgfCAkU0VEIDEwcSBcCisJICAgICMgTGlua2luZyBjb252ZW5pZW5jZSBtb2R1bGVzIGludG8gc2hhcmVkIGxpYnJhcmllcyBpcyBhbGxvd2VkLAorCSAgICAjIGJ1dCBsaW5raW5nIG90aGVyIHN0YXRpYyBsaWJyYXJpZXMgaXMgbm9uLXBvcnRhYmxlLgorCSAgICBjYXNlICIgJGRscHJlY29udmVuaWVuY2VsaWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICAgKikKKwkgICAgICB2YWxpZF9hX2xpYj1ubworCSAgICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJCW1hdGNoX3BhdHRlcm4qKQorCQkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCQkgIGlmIGV2YWwgIlwkRUNITyBcIiRkZXBsaWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSBcCiAJCSAgICB8ICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICB2YWxpZF9hX2xpYj15ZXMKKwkJICBmaQorCQk7OworCQlwYXNzX2FsbCkKIAkJICB2YWxpZF9hX2xpYj15ZXMKLQkJZmkKIAkJOzsKLQkgICAgICBwYXNzX2FsbCkKLQkJdmFsaWRfYV9saWI9eWVzCi0JCTs7Ci0gICAgICAgICAgICBlc2FjCi0JICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCi0JICAgICAgJGVjaG8KLQkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IFRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgotCSAgICAgICRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCSAgICAgICRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCSAgICAgICRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCi0JICAgICAgJGVjaG8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgotCSAgICAgICRlY2hvICIqKiogdGhhdCBpdCBpcyBqdXN0IGEgc3RhdGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3QgdXNlZCBoZXJlLiIKLQkgICAgZWxzZQotCSAgICAgICRlY2hvCi0JICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgotCSAgICAgICRlY2hvICIqKiogc3RhdGljIGxpYnJhcnkgJGRlcGxpYiBpcyBub3QgcG9ydGFibGUhIgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGZpCisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKKwkJZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKwkgICAgICBlbHNlCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgorCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIGVzYWMKIAkgICAgY29udGludWUKIAkgICAgOzsKIAkgIHByb2cpCkBAIC0yMzI1LDExICs2MzU5LDExIEBACiAJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCiAJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCiAJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCi0JICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRlcGxpYiIKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKIAkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgICBlbHNlCi0JICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGRlcGxpYiIKIAkgICAgZmkKIAkgIGZpCiAJICBjb250aW51ZQpAQCAtMjMzOSwyMSArNjM3MywxOCBAQAogCSAgY29udGludWUKIAkgIDs7CiAJZXNhYyAjIGNhc2UgJGRlcGxpYgorCiAJaWYgdGVzdCAiJGZvdW5kIiA9IHllcyB8fCB0ZXN0IC1mICIkbGliIjsgdGhlbiA6CiAJZWxzZQotCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgXGAkbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgXGAkZGVwbGliJyIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIgogCWZpCiAKIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotCWlmICgke1NFRH0gLWUgJzJxJyAkbGliIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCWVsc2UKLQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQlmaQorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCi0JbGFkaXI9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCXRlc3QgIlgkbGFkaXIiID0gIlgkbGliIiAmJiBsYWRpcj0iLiIKKwlmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCWxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKIAogCWRsbmFtZT0KIAlkbG9wZW49CkBAIC0yMzYxLDYgKzYzOTIsNyBAQAogCWxpYmRpcj0KIAlsaWJyYXJ5X25hbWVzPQogCW9sZF9saWJyYXJ5PQorCWluaGVyaXRlZF9saW5rZXJfZmxhZ3M9CiAJIyBJZiB0aGUgbGlicmFyeSB3YXMgaW5zdGFsbGVkIHdpdGggYW4gb2xkIHJlbGVhc2Ugb2YgbGlidG9vbCwKIAkjIGl0IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlcyBpbnN0YWxsZWQsIG9yIHNob3VsZG5vdGxpbmsKIAlpbnN0YWxsZWQ9eWVzCkBAIC0yMzY5LDE2ICs2NDAxLDI0IEBACiAKIAogCSMgUmVhZCB0aGUgLmxhIGZpbGUKLQljYXNlICRsaWIgaW4KLQkqLyogfCAqXFwqKSAuICRsaWIgOzsKLQkqKSAuIC4vJGxpYiA7OwotCWVzYWMKKwlmdW5jX3NvdXJjZSAiJGxpYiIKIAorCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCisJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCisJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MvLWZyYW1ld29yayBcKFteICRdKlwpL1wxLmx0ZnJhbWV3b3JrL2cnYAorCSAgZm9yIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgaW4gJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzOyBkbworCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiAkZGVwZW5kZW5jeV9saWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCiAJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKIAkgICB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiIgfHwKIAkgICB7IHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgfTsgdGhlbgotCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZGxmaWxlcz0iJGRsZmlsZXMgJGRsb3BlbiIKLQkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkbHByZW9wZW4iCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgogCWZpCiAKIAlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCkBAIC0yMzg2LDQ1ICs2NDI2LDQ3IEBACiAJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgogCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KIAkgICAgaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCSAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIiAxPiYyCi0JICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCiAJICAgIGZpCiAJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KLQkgICAgY29udmVuaWVuY2U9IiRjb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCi0JICAgIG9sZF9jb252ZW5pZW5jZT0iJG9sZF9jb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCi0JICAgIHRtcF9saWJzPQotCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLSAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCi0JICAgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgotCSAgICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OwotCSAgICAgICAgZXNhYwotICAgICAgICAgICAgICBmaQotCSAgICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKLQkgICAgZG9uZQorCSAgICBmdW5jX2FwcGVuZCBjb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgogCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCiAJICBmaQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisJICBkb25lCiAJICBjb250aW51ZQogCWZpICMgJHBhc3MgPSBjb252CiAKIAogCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KIAlsaW5rbGliPQotCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KLQkgIGxpbmtsaWI9IiRsIgotCWRvbmUKKwlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCisJICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAorCSAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCxubyI7IH07IHRoZW4KKwkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5CisJZWxzZQorCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBsaW5rbGliPSIkbCIKKwkgIGRvbmUKKwlmaQogCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCiAJZmkKIAogCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgogCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgogCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCiAJICBmaQogCSAgaWYgdGVzdCAteiAiJGRsbmFtZSIgfHwKIAkgICAgIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8CkBAIC0yNDMzLDkgKzY0NzUsOSBAQAogCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQogCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAogCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCi0JICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKwkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKIAkgIGVsc2UKLQkgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIKKwkgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiCiAJICBmaQogCSAgY29udGludWUKIAlmaSAjICRwYXNzID0gZGxvcGVuCkBAIC0yNDQ2LDI0ICs2NDg4LDI1IEBACiAJKikKIAkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAogCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciIDE+JjIKLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogcGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIgMT4mMgorCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCiAJICAgIGFic19sYWRpcj0iJGxhZGlyIgogCSAgZmkKIAkgIDs7CiAJZXNhYwotCWxhbmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwlsYW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKIAogCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgogCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgISAtZiAiJGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogbGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iIDE+JjIKKwkgIGlmIHRlc3QgISAtZiAiJGx0X3N5c3Jvb3QkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgogCSAgICBkaXI9IiRsYWRpciIKIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgogCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCiAJICBlbHNlCi0JICAgIGRpcj0iJGxpYmRpciIKLQkgICAgYWJzZGlyPSIkbGliZGlyIgorCSAgICBkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKwkgICAgYWJzZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCiAJICBmaQogCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKIAllbHNlCkBAIC0yNDcxLDMyICs2NTE0LDYyIEBACiAJICAgIGRpcj0iJGxhZGlyIgogCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCiAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKLQkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCiAJICBlbHNlCiAJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCiAJICAgIGFic2Rpcj0iJGFic19sYWRpci8kb2JqZGlyIgogCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCi0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgogCSAgZmkKIAlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKLQluYW1lPWAkZWNobyAiWCRsYW5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLycgLWUgJ3MvXmxpYi8vJ2AKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJGxhbmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAogCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgogCWlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgotCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgaWYgdGVzdCAteiAiJGxpYmRpciIgJiYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgogCSAgZmkKLQkgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scwotCSAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCi0JICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJG9sZF9saWJyYXJ5IgotCSAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KLQkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgotCSAgZWxzZQotCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgotCSAgZmkKKwkgIGNhc2UgIiRob3N0IiBpbgorCSAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3aXRoIFBFLURMTHMuCisJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICMgTGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcnkgaWYgYm90aAorCSAgICAgICMgc3RhdGljIGFuZCBzaGFyZWQgYXJlIHByZXNlbnQuICBUaGVyZWZvcmUsIGVuc3VyZSB3ZSBleHRyYWN0CisJICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAorCSAgICAgICMgKG90aGVyd2lzZSwgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSB3aWxsIGJlIGluY29ycmVjdCkuICBXZSBkbworCSAgICAgICMgdGhpcyBieSBwdXR0aW5nIHRoZSBpbXBvcnQgbGlicmFyeSBuYW1lIGludG8gJG5ld2RscHJlZmlsZXMuCisJICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKKwkgICAgICAjIG5hbWUgaW4gYSBzcGVjaWFsIHB1cnBvc2UgdmFyaWFibGUsIGFuZCAobGF0ZXIpIGV4dHJhY3RpbmcgdGhlCisJICAgICAgIyBkbG5hbWUgZnJvbSB0aGUgbGEgZmlsZS4KKwkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgICAgZnVuY190cl9zaCAiJGRpci8kbGlua2xpYiIKKwkgICAgICAgIGV2YWwgImxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0PVwkYWJzX2xhZGlyL1wkbGFuYW1lIgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICBmaQorCSAgICA7OworCSAgICAqICkKKwkgICAgICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKwkgICAgICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKwkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisJICAgICAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGRsbmFtZSIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKwkgICAgICBmaQorCSAgICA7OworCSAgZXNhYwogCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KIAogCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCkBAIC0yNTE0LDcgKzY1ODcsNyBAQAogCiAKIAlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgotCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRsYWRpciIKIAkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCiAKIAkgIGxpbmthbGxkZXBsaWJzPW5vCkBAIC0yNTI2LDcgKzY1OTksMTAgQEAKIAkgIHRtcF9saWJzPQogCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwogCSAgICBjYXNlICRkZXBsaWIgaW4KLQkgICAgLUwqKSBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggImAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYDs7ICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkJIDs7CiAJICAgIGVzYWMKIAkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPwogCSAgICBpZiB0ZXN0ICIkbGlua2FsbGRlcGxpYnMiID0geWVzOyB0aGVuCkBAIC0yNTM2LDEyICs2NjEyLDEyIEBACiAJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKIAkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKIAkgICAgZmkKLQkgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCiAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCiAJICBkb25lICMgZm9yIGRlcGxpYgogCSAgY29udGludWUKIAlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KQEAgLTI1NDksMTUgKzY2MjUsMTQgQEAKIAlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KIAkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgogCSAgICAgeyB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0gbm8gfHwKLQkJIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQseWVzIjsgfSB8fAorCSAgICAgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQseWVzIjsgfSB8fAogCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCiAJICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCiAJICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiIDsgdGhlbgogCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KLQkgICAgICBjYXNlICIkdGVtcF9ycGF0aCAiIGluCi0JICAgICAgKiIgJGRpciAiKikgOzsKLQkgICAgICAqIiAkYWJzZGlyICIqKSA7OwotCSAgICAgICopIHRlbXBfcnBhdGg9IiR0ZW1wX3JwYXRoICRhYnNkaXIiIDs7CisJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorCSAgICAgICoiJGFic2RpcjoiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX3JwYXRoICIkYWJzZGlyOiIgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCiAKQEAgLTI1NjksNyArNjY0NCw3IEBACiAJICAgICopCiAJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgogCSAgICAgICoiICRhYnNkaXIgIiopIDs7Ci0JICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKIAkgICAgICBlc2FjCiAJICAgICAgOzsKIAkgICAgZXNhYwpAQCAtMjU3OCw3ICs2NjUzLDcgQEAKIAkgICAgKikKIAkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgogCSAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0JICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKIAkgICAgICBlc2FjCiAJICAgICAgOzsKIAkgICAgZXNhYwpAQCAtMjU5NSwyNyArNjY3MCw0MyBAQAogCiAJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQogCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCi0JaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllcyA7IHRoZW4KKwlpZiB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IGJ1aWx0ICYmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCiAJICB1c2Vfc3RhdGljX2xpYnM9bm8KIAlmaQogCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgogCSAgIHsgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBubyB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCi0JICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCi0JICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgotCSAgICBuZWVkX3JlbGluaz15ZXMKLQkgIGZpCisJICBjYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqKQorCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPW5vCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz15ZXMKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKIAkgICMgVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5CiAKLQkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbgotCSAgIyBzb21lIHN5c3RlbXMgKGRhcndpbikKLQkgIGlmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rIDsgdGhlbgotCSAgICAkZWNobwotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotCSAgICAgICRlY2hvICIqKiogV2FybmluZzogTGlua2luZyB0aGUgZXhlY3V0YWJsZSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKLQkgICAgZWxzZQotCSAgICAgICRlY2hvICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQorCSAgIyBzeXN0ZW1zIChkYXJ3aW4pLiAgRG9uJ3QgYmxlYXQgYWJvdXQgZGxvcGVuZWQgbW9kdWxlcyB0aG91Z2ghCisJICBkbG9wZW5tb2R1bGU9IiIKKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KKwkgICAgICBkbG9wZW5tb2R1bGU9IiRkbHByZW1vZHVsZXRlc3QiCisJICAgICAgYnJlYWsKIAkgICAgZmkKLQkgICAgJGVjaG8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgorCSAgZG9uZQorCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCAiJHNob3VsZG5vdGxpbmsiID0geWVzICYmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZWNobworCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgZXhlY3V0YWJsZSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZWxzZQorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGZpCisJICAgICRFQ0hPICIqKiogJGxpbmtsaWIgaXMgbm90IHBvcnRhYmxlISIKIAkgIGZpCiAJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmCiAJICAgICB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgpAQCAtMjYyNyw3ICs2NzE4LDcgQEAKIAkgICAgKikKIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCiAJICAgICAgKiIgJGFic2RpciAiKikgOzsKLQkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OwogCSAgICAgIGVzYWMKIAkgICAgICA7OwogCSAgICBlc2FjCkBAIC0yNjM2LDcgKzY3MjcsNyBAQAogCSAgICAqKQogCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCiAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKLQkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwogCSAgICAgIGVzYWMKIAkgICAgICA7OwogCSAgICBlc2FjCkBAIC0yNjQ1LDE3ICs2NzM2LDE5IEBACiAJICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCiAJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCiAJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcwotCSAgICByZWFsbmFtZT0iJDIiCi0JICAgIHNoaWZ0OyBzaGlmdAotCSAgICBsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCisJICAgIHNoaWZ0CisJICAgIHJlYWxuYW1lPSIkMSIKKwkgICAgc2hpZnQKKwkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCiAJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPwogCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgogCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKIAkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCiAJICAgICAgIyBibGVoIHdpbmRvd3MKIAkgICAgICBjYXNlICRob3N0IGluCi0JICAgICAgKmN5Z3dpbiogfCBtaW5ndyopCi0JCW1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCQltYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKIAkJdmVyc3VmZml4PSItJG1ham9yIgogCQk7OwogCSAgICAgIGVzYWMKQEAgLTI2NjYsNDMgKzY3NTksMjkgQEAKIAogCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQogCSAgICBzb3Jvb3Q9IiRzb25hbWUiCi0JICAgIHNvbmFtZT1gJGVjaG8gJHNvcm9vdCB8ICR7U0VEfSAtZSAncy9eLipcLy8vJ2AKLQkgICAgbmV3bGliPSJsaWJpbXAtYCRlY2hvICRzb25hbWUgfCAke1NFRH0gJ3MvXmxpYi8vO3MvXC5kbGwkLy8nYC5hIgorCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgorCSAgICBzb25hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgorCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQogCiAJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CiAJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CiAJICAgIGVsc2UKLQkgICAgICAkc2hvdyAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCi0JICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JICAgICAgY21kcz0kZXh0cmFjdF9leHBzeW1zX2NtZHMKLQkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotCQlJRlM9IiRzYXZlX2lmcyIKLQkJZXZhbCBjbWQ9XCIkY21kXCIKLQkJJHNob3cgIiRjbWQiCi0JCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotCSAgICAgIGRvbmUKLQkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JwogCSAgICBmaQogCiAJICAgICMgQ3JlYXRlICRuZXdsaWIKIAkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQotCSAgICAgICRzaG93ICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciBcYCRzb25hbWUnIgotCSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgICAgIGNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCi0JICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLQkJSUZTPSIkc2F2ZV9pZnMiCi0JCWV2YWwgY21kPVwiJGNtZFwiCi0JCSRzaG93ICIkY21kIgotCQkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLQkgICAgICBkb25lCi0JICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiICdleGl0ICQ/JwogCSAgICBmaQogCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQogCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKIAkgICAgbGlua2xpYj0kbmV3bGliCiAJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKIAotCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KIAkgICAgYWRkX3NobGlicGF0aD0KIAkgICAgYWRkX2Rpcj0KIAkgICAgYWRkPQpAQCAtMjcxNywxNyArNjc5NiwyMSBAQAogCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAogCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9Ii1MJGRpciIgOzsKIAkJICAqLSotZGFyd2luKiApCi0JCSAgICAjIGlmIHRoZSBsaWIgaXMgYSBtb2R1bGUgdGhlbiB3ZSBjYW4gbm90IGxpbmsgYWdhaW5zdAotCQkgICAgIyBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgbmV3IHdhcm5pbmdzIEkgYWRkZWQKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIChub24tZGxvcGVuZWQpIG1vZHVsZSB0aGVuIHdlIGNhbiBub3QKKwkJICAgICMgbGluayBhZ2FpbnN0IGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCiAJCSAgICBpZiAvdXNyL2Jpbi9maWxlIC1MICRhZGQgMj4gL2Rldi9udWxsIHwKLSAgICAgICAgICAgICAgICAgICAgICAkRUdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsIDsgdGhlbgotCQkgICAgICAkZWNobyAiKiogV2FybmluZywgbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKLQkJICAgICAgaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IiA7IHRoZW4KLQkJICAgICAgICAkZWNobwotCQkgICAgICAgICRlY2hvICIqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgotCQkgICAgICAgICRlY2hvICIqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgotCQkgICAgICBlbHNlCi0JCSAgICAgICAgYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJCSAkR1JFUCAiOiBbXjpdKiBidW5kbGUiID4vZGV2L251bGwgOyB0aGVuCisJCSAgICAgIGlmIHRlc3QgIlgkZGxvcGVubW9kdWxlIiAhPSAiWCRsaWIiOyB0aGVuCisJCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCisJCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiIDsgdGhlbgorCQkJICBlY2hvCisJCQkgIGVjaG8gIioqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgorCQkJICBlY2hvICIqKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKwkJCWVsc2UKKwkJCSAgYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJCWZpCisJCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCQkJYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKIAkJICAgICAgZmkKIAkJICAgIGZpCiAJCWVzYWMKQEAgLTI3NDUsNyArNjgyOCw4IEBACiAJICAgICAgZmkKIAkgICAgICA7OwogCSAgICByZWxpbmspCi0JICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KIAkJYWRkPSIkZGlyLyRsaW5rbGliIgogCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCiAJCWFkZF9kaXI9Ii1MJGRpciIKQEAgLTI3NTMsNyArNjgzNyw3IEBACiAJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCiAJCSAgY2FzZSAkbGliZGlyIGluCiAJCSAgICBbXFwvXSopCi0JCSAgICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgogCQkgICAgICA7OwogCQkgIGVzYWMKIAkJZmkKQEAgLTI3NjksMTQgKzY4NTMsMTMgQEAKIAkgICAgZXNhYwogCiAJICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KLQkgICAgICAkZWNobyAiJG1vZGVuYW1lOiBjb25maWd1cmF0aW9uIGVycm9yOiB1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgotCSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKIAkgICAgZmkKIAogCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KIAkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCiAJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7Ci0JICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3NobGlicGF0aCAiJGFkZF9zaGxpYnBhdGg6IiA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KQEAgLTI3ODUsMjMgKzY4NjgsMjQgQEAKIAkgICAgZWxzZQogCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKIAkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgotCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJiBcCi0JCSB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0geWVzICYmIFwKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYKIAkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgogCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgogCQkqIjokbGliZGlyOiIqKSA7OwotCQkqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKwkJKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKIAkJZXNhYwogCSAgICAgIGZpCiAJICAgIGZpCiAJICBmaQogCi0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KIAkgICAgYWRkX3NobGlicGF0aD0KIAkgICAgYWRkX2Rpcj0KIAkgICAgYWRkPQogCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgotCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCiAJICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgogCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgogCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKQEAgLTI4MDksMTUgKzY4OTMsMTUgQEAKIAkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KIAkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgogCSAgICAgICoiOiRsaWJkaXI6IiopIDs7Ci0JICAgICAgKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKIAkgICAgICBlc2FjCiAJICAgICAgYWRkPSItbCRuYW1lIgogCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCiAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKIAkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIiA7IHRoZW4KLQkgICAgICAgIGFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCisJCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCiAJICAgICAgZWxzZQotCSAgICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCiAJICAgICAgZmkKIAkgICAgZWxzZQogCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCkBAIC0yODI2LDcgKzY5MTAsNyBAQAogCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCiAJCWNhc2UgJGxpYmRpciBpbgogCQkgIFtcXC9dKikKLQkJICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKIAkJICAgIDs7CiAJCWVzYWMKIAkgICAgICBmaQpAQCAtMjg2MSwyMSArNjk0NSwyMSBAQAogCiAJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KIAkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCi0JICAgICRlY2hvCi0JICAgICRlY2hvICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKLQkgICAgJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JICAgICRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCSAgICAkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKwkgICAgZWNobworCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbiBub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCisJICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCiAJICAgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCi0JICAgICAgJGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKLQkgICAgICAkZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCi0JICAgICAgJGVjaG8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKKwkgICAgICBlY2hvICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCisJICAgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCisJICAgICAgZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgogCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0JCSRlY2hvCi0JCSRlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKLQkJJGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCi0JCSRlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCi0JCSRlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkJZWNobworCQllY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkJZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCQllY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKIAkgICAgICBmaQogCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgogCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCkBAIC0yODk5LDEyNiArNjk4MywxMTMgQEAKIAkgICAgdGVtcF9kZXBsaWJzPQogCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCiAJICAgICAgY2FzZSAkbGliZGlyIGluCi0JICAgICAgLVIqKSB0ZW1wX3hycGF0aD1gJGVjaG8gIlgkbGliZGlyIiB8ICRYc2VkIC1lICdzL14tUi8vJ2AKKwkgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRsaWJkaXIiCisJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJCSAgIGNhc2UgIiAkeHJwYXRoICIgaW4KIAkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OwotCQkgICAqKSB4cnBhdGg9IiR4cnBhdGggJHRlbXBfeHJwYXRoIjs7CisJCSAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICR0ZW1wX3hycGF0aCI7OwogCQkgICBlc2FjOzsKLQkgICAgICAqKSB0ZW1wX2RlcGxpYnM9IiR0ZW1wX2RlcGxpYnMgJGxpYmRpciI7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfZGVwbGlicyAiICRsaWJkaXIiOzsKIAkgICAgICBlc2FjCiAJICAgIGRvbmUKIAkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgogCSAgZmkKIAotCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRhYnNkaXIiCisJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgogCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CiAJICB0ZXN0ICIkbGlua19zdGF0aWMiID0gbm8gJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKIAkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCiAJICB0bXBfbGlicz0KIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICBjYXNlICRkZXBsaWIgaW4KKyAgICAgICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7CisgICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OworICAgICAgICAgICAgZXNhYworCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgogCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCi0JICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCisgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICBkb25lCiAKIAkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgogCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcwogCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgcGF0aD0KIAkgICAgICBjYXNlICRkZXBsaWIgaW4KIAkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CiAJICAgICAgKi5sYSkKLQkJZGlyPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQkJdGVzdCAiWCRkaXIiID0gIlgkZGVwbGliIiAmJiBkaXI9Ii4iCisJICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgorCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCiAJCWNhc2UgJGRpciBpbgogCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKIAkJKikKIAkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCiAJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KLQkJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIgMT4mMgorCQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCiAJCSAgICBhYnNkaXI9IiRkaXIiCiAJCSAgZmkKIAkJICA7OwogCQllc2FjCi0JCWlmIGdyZXAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KLQkJICBwYXRoPSIkYWJzZGlyLyRvYmpkaXIiCi0JCWVsc2UKLQkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAotCQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JCSAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotCQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JCSAgZmkKLQkJICBpZiB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciI7IHRoZW4KLQkJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiIDE+JjIKLQkJICBmaQotCQkgIHBhdGg9IiRhYnNkaXIiCi0JCWZpCi0JCWRlcGRlcGw9CisJCWlmICRHUkVQICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCiAJCWNhc2UgJGhvc3QgaW4KIAkJKi0qLWRhcndpbiopCi0JCSAgIyB3ZSBkbyBub3Qgd2FudCB0byBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnMsCi0JCSAgIyBidXQgbmVlZCB0byBsaW5rIGFnYWluc3Qgc2hhcmVkCisJCSAgZGVwZGVwbD0KIAkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCi0JCSAgZXZhbCBkZXBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKIAkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCiAJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KIAkJICAgICAgZGVwZGVwbD0kdG1wCiAJCSAgICBkb25lCi0JCSAgICBpZiB0ZXN0IC1mICIkZGVwbGliZGlyLyRkZXBkZXBsIiA7IHRoZW4KLQkJICAgICAgZGVwZGVwbD0iJGRlcGxpYmRpci8kZGVwZGVwbCIKLQkgICAgICAJICAgIGVsaWYgdGVzdCAtZiAiJHBhdGgvJGRlcGRlcGwiIDsgdGhlbgotCQkgICAgICBkZXBkZXBsPSIkcGF0aC8kZGVwZGVwbCIKLQkJICAgIGVsc2UKLQkJICAgICAgIyBDYW4ndCBmaW5kIGl0LCBvaCB3ZWxsLi4uCi0JCSAgICAgIGRlcGRlcGw9CisJCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiIDsgdGhlbgorCQkgICAgICBkZXBkZXBsPSIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiCisJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0x9IC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MNjR9IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBmaQorCQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgcGF0aD0KIAkJICAgIGZpCi0JCSAgICAjIGRvIG5vdCBhZGQgcGF0aHMgd2hpY2ggYXJlIGFscmVhZHkgdGhlcmUKLQkJICAgIGNhc2UgIiAkbmV3bGliX3NlYXJjaF9wYXRoICIgaW4KLQkJICAgICoiICRwYXRoICIqKSA7OwotCQkgICAgKikgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRwYXRoIjs7Ci0JCSAgICBlc2FjCiAJCSAgZmkKLQkJICBwYXRoPSIiCiAJCSAgOzsKIAkJKikKLQkJICBwYXRoPSItTCRwYXRoIgorCQkgIHBhdGg9Ii1MJGFic2Rpci8kb2JqZGlyIgogCQkgIDs7CiAJCWVzYWMKKwkJZWxzZQorCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfd2FybmluZyAiXGAkZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKworCQkgIHBhdGg9Ii1MJGFic2RpciIKKwkJZmkKIAkJOzsKLQkgICAgICAtbCopCi0JCWNhc2UgJGhvc3QgaW4KLQkJKi0qLWRhcndpbiopCi0JCSAgIyBBZ2Fpbiwgd2Ugb25seSB3YW50IHRvIGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyaWVzCi0JCSAgZXZhbCB0bXBfbGlicz1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICJzLF5cLWwsLCJgCi0JCSAgZm9yIHRtcCBpbiAkbmV3bGliX3NlYXJjaF9wYXRoIDsgZG8KLQkJICAgIGlmIHRlc3QgLWYgIiR0bXAvbGliJHRtcF9saWJzLmR5bGliIiA7IHRoZW4KLQkJICAgICAgZXZhbCBkZXBkZXBsPSIkdG1wL2xpYiR0bXBfbGlicy5keWxpYiIKLQkJICAgICAgYnJlYWsKLQkJICAgIGZpCi0JCSAgZG9uZQotCQkgIHBhdGg9IiIKLQkJICA7OwotCQkqKSBjb250aW51ZSA7OwotCQllc2FjCi0JCTs7Ci0JICAgICAgKikgY29udGludWUgOzsKIAkgICAgICBlc2FjCiAJICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KIAkgICAgICAqIiAkcGF0aCAiKikgOzsKIAkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKIAkgICAgICBlc2FjCi0JICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KLQkgICAgICAqIiAkZGVwZGVwbCAiKikgOzsKLQkgICAgICAqKSBkZXBsaWJzPSIkZGVwZGVwbCAkZGVwbGlicyIgOzsKLQkgICAgICBlc2FjCiAJICAgIGRvbmUKIAkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubwogCWZpICMgbGlua21vZGUgPSBsaWIKICAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9ICJwcm9nIjsgdGhlbgorCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKKwkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaQorICAgICAgZmkKICAgICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKICAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgogCSMgTGluayB0aGUgZGxwcmVvcGVuZWQgbGlicmFyaWVzIGJlZm9yZSBvdGhlciBsaWJyYXJpZXMKQEAgLTMwMzMsNyArNzEwNCw3IEBACiAJICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCiAJICAgIGNhc2UgIiRsaWJfc2VhcmNoX3BhdGggIiBpbgogCSAgICAqIiAkZGlyICIqKSA7OwotCSAgICAqKSBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIgOzsKIAkgICAgZXNhYwogCSAgZG9uZQogCSAgbmV3bGliX3NlYXJjaF9wYXRoPQpAQCAtMzA5MSwxMCArNzE2MiwxMCBAQAogCSAgICAtTCopCiAJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCiAJICAgICAgKiIgJGRlcGxpYiAiKikgOzsKLQkgICAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OwogCSAgICAgIGVzYWMKIAkgICAgICA7OwotCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKIAkgICAgZXNhYwogCSAgZG9uZQogCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKQEAgLTMxMTAsOTkgKzcxODEsOTYgQEAKIAkgIDs7CiAJZXNhYwogCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KLQkgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGkiCisJICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRpIgogCWZpCiAgICAgICBkb25lCiAgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCiAgICAgZG9uZSAjIGZvciBwYXNzCiAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KICAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgogICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCiAgICAgZmkKIAogICAgIGNhc2UgJGxpbmttb2RlIGluCiAgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisgICAgICBmaQorCiAgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCiAgICAgICAqXCAtbCogfCAqXCAtTCopCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMiA7OworCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgOzsKICAgICAgIGVzYWMKIAotICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAotICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKLSAgICAgIGlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAotICAgICAgaWYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCiAgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KICAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwogICAgICAgb2xkbGlicz0iJG91dHB1dCIKLSAgICAgIG9ianM9IiRvYmpzJG9sZF9kZXBsaWJzIgorICAgICAgZnVuY19hcHBlbmQgb2JqcyAiJG9sZF9kZXBsaWJzIgogICAgICAgOzsKIAogICAgIGxpYikKICAgICAgICMgTWFrZSBzdXJlIHdlIG9ubHkgZ2VuZXJhdGUgbGlicmFyaWVzIG9mIHRoZSBmb3JtIGBsaWJOQU1FLmxhJy4KICAgICAgIGNhc2UgJG91dHB1dG5hbWUgaW4KICAgICAgIGxpYiopCi0JbmFtZT1gJGVjaG8gIlgkb3V0cHV0bmFtZSIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJyAtZSAncy9ebGliLy8nYAorCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgogCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgogCTs7CiAgICAgICAqKQotCWlmIHRlc3QgIiRtb2R1bGUiID0gbm87IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCBcYGxpYiciIDE+JjIKLQkgICRlY2hvICIkaGVscCIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JZmkKKwl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKwogCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCiAJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCi0JICBuYW1lPWAkZWNobyAiWCRvdXRwdXRuYW1lIiB8ICRYc2VkIC1lICdzL1wubGEkLy8nYAorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgogCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCiAJZWxzZQotCSAgbGlibmFtZT1gJGVjaG8gIlgkb3V0cHV0bmFtZSIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJ2AKKwkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKwkgIGxpYm5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCWZpCiAJOzsKICAgICAgIGVzYWMKIAogICAgICAgaWYgdGVzdCAtbiAiJG9ianMiOyB0aGVuCiAJaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiIDI+JjEKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCiAJZWxzZQotCSAgJGVjaG8KLQkgICRlY2hvICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKLQkgICRlY2hvICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgotCSAgbGlib2Jqcz0iJGxpYm9ianMgJG9ianMiCisJICBlY2hvCisJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkb2JqcyIKIAlmaQogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCiAKICAgICAgIHNldCBkdW1teSAkcnBhdGgKLSAgICAgIGlmIHRlc3QgIiQjIiAtZ3QgMjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IiAxPiYyCi0gICAgICBmaQotICAgICAgaW5zdGFsbF9saWJkaXI9IiQyIgorICAgICAgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKworICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgogCiAgICAgICBvbGRsaWJzPQogICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgpAQCAtMzIxNiwyNSArNzI4NCwyMSBAQAogCSAgYnVpbGRfb2xkX2xpYnM9eWVzCiAJZmkKIAotCWlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIgMT4mMgotCWZpCisJdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKIAotCWlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIiAxPiYyCi0JZmkKKwl0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCSAgZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCiAgICAgICBlbHNlCiAKIAkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgogCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JwogCXNldCBkdW1teSAkdmluZm8gMCAwIDAKKwlzaGlmdAogCUlGUz0iJHNhdmVfaWZzIgogCi0JaWYgdGVzdCAtbiAiJDgiOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiB0b28gbWFueSBwYXJhbWV0ZXJzIHRvIFxgLXZlcnNpb24taW5mbyciIDE+JjIKLQkgICRlY2hvICIkaGVscCIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JZmkKKwl0ZXN0IC1uICIkNyIgJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvIFxgLXZlcnNpb24taW5mbyciCiAKIAkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcwogCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCkBAIC0zMjQyLDkgKzczMDYsOSBAQAogCiAJY2FzZSAkdmluZm9fbnVtYmVyIGluCiAJeWVzKQotCSAgbnVtYmVyX21ham9yPSIkMiIKLQkgIG51bWJlcl9taW5vcj0iJDMiCi0JICBudW1iZXJfcmV2aXNpb249IiQ0IgorCSAgbnVtYmVyX21ham9yPSIkMSIKKwkgIG51bWJlcl9taW5vcj0iJDIiCisJICBudW1iZXJfcmV2aXNpb249IiQzIgogCSAgIwogCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKIAkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCkBAIC0zMjU0LDE3ICs3MzE4LDE5IEBACiAJICAjCiAJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KIAkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93c3xub25lKQotCSAgICBjdXJyZW50PWBleHByICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yYAorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJICAgIGFnZT0iJG51bWJlcl9taW5vciIKIAkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCiAJICAgIDs7Ci0JICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8c3Vub3MpCisJICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8cW54fHN1bm9zKQogCSAgICBjdXJyZW50PSIkbnVtYmVyX21ham9yIgogCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKIAkgICAgYWdlPSIwIgogCSAgICA7OwogCSAgaXJpeHxub25zdG9wdXgpCi0JICAgIGN1cnJlbnQ9YGV4cHIgJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3JgCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKIAkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgogCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKIAkgICAgbHRfaXJpeF9pbmNyZW1lbnQ9bm8KQEAgLTMyNzIsOSArNzMzOCw5IEBACiAJICBlc2FjCiAJICA7OwogCW5vKQotCSAgY3VycmVudD0iJDIiCi0JICByZXZpc2lvbj0iJDMiCi0JICBhZ2U9IiQ0IgorCSAgY3VycmVudD0iJDEiCisJICByZXZpc2lvbj0iJDIiCisJICBhZ2U9IiQzIgogCSAgOzsKIAllc2FjCiAKQEAgLTMyODIsMzQgKzczNDgsMzAgQEAKIAljYXNlICRjdXJyZW50IGluCiAJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwogCSopCi0JICAkZWNobyAiJG1vZGVuYW1lOiBDVVJSRU5UIFxgJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiAxPiYyCi0JICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19lcnJvciAiQ1VSUkVOVCBcYCRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKIAkgIDs7CiAJZXNhYwogCiAJY2FzZSAkcmV2aXNpb24gaW4KIAkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CiAJKikKLQkgICRlY2hvICIkbW9kZW5hbWU6IFJFVklTSU9OIFxgJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgotCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OIFxgJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKIAkgIDs7CiAJZXNhYwogCiAJY2FzZSAkYWdlIGluCiAJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwogCSopCi0JICAkZWNobyAiJG1vZGVuYW1lOiBBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgotCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgogCSAgOzsKIAllc2FjCiAKIAlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogQUdFIFxgJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgXGAkY3VycmVudCciIDE+JjIKLQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKIAlmaQogCiAJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgpAQCAtMzMyMiwxMCArNzM4NCwxMiBAQAogCWRhcndpbikKIAkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KIAkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKLQkgIG1ham9yPS5gZXhwciAkY3VycmVudCAtICRhZ2VgCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCiAJICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgotCSAgbWlub3JfY3VycmVudD1gZXhwciAkY3VycmVudCArIDFgCisJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQorCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKIAkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgogCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgogCSAgOzsKQEAgLTMzMzcsMTUgKzc0MDEsMTcgQEAKIAogCWZyZWVic2QtZWxmKQogCSAgbWFqb3I9Ii4kY3VycmVudCIKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IjsKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgogCSAgOzsKIAogCWlyaXggfCBub25zdG9wdXgpCiAJICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCi0JICAgIG1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKIAkgIGVsc2UKLQkgICAgbWFqb3I9YGV4cHIgJGN1cnJlbnQgLSAkYWdlICsgMWAKKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UgKyAxCiAJICBmaQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisKIAkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgogCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CiAJICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKQEAgLTMzNTUsOCArNzQyMSwxMCBAQAogCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KIAkgIGxvb3A9JHJldmlzaW9uCiAJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCi0JICAgIGlmYWNlPWBleHByICRyZXZpc2lvbiAtICRsb29wYAotCSAgICBsb29wPWBleHByICRsb29wIC0gMWAKKwkgICAgZnVuY19hcml0aCAkcmV2aXNpb24gLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKIAkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKIAkgIGRvbmUKIApAQCAtMzM2NiwyNSArNzQzNCwzNCBAQAogCSAgOzsKIAogCWxpbnV4KQotCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CiAJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKIAkgIDs7CiAKIAlvc2YpCi0JICBtYWpvcj0uYGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKIAkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgogCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKIAogCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KIAkgIGxvb3A9JGFnZQogCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbwotCSAgICBpZmFjZT1gZXhwciAkY3VycmVudCAtICRsb29wYAotCSAgICBsb29wPWBleHByICRsb29wIC0gMWAKKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRsb29wCisJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQorCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtpZmFjZX0uMCIKIAkgIGRvbmUKIAogCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgotCSAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7Y3VycmVudH0uMCIKKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiR7Y3VycmVudH0uMCIKKwkgIDs7CisKKwlxbngpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCiAJICA7OwogCiAJc3Vub3MpCkBAIC0zMzk1LDE0ICs3NDcyLDEzIEBACiAJd2luZG93cykKIAkgICMgVXNlICctJyByYXRoZXIgdGhhbiAnLicsIHNpbmNlIHdlIG9ubHkgd2FudCBvbmUKIAkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZXN5c3RlbXMuCi0JICBtYWpvcj1gZXhwciAkY3VycmVudCAtICRhZ2VgCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJICB2ZXJzdWZmaXg9Ii0kbWFqb3IiCiAJICA7OwogCiAJKikKLQkgICRlY2hvICIkbW9kZW5hbWU6IHVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIgMT4mMgotCSAgJGVjaG8gIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuICBTZWUgdGhlICRQQUNLQUdFIGRvY3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIgogCSAgOzsKIAllc2FjCiAKQEAgLTM0MzYsNyArNzUxMiw3IEBACiAJIyBDaGVjayB0byBzZWUgaWYgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIHVuZGVmaW5lZCBzeW1ib2xzLgogCWlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0geWVzOyB0aGVuCiAJICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciID0gdW5zdXBwb3J0ZWQ7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogdW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIgMT4mMgorCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCiAJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwogCSAgICBidWlsZF9vbGRfbGlicz15ZXMKIAkgIGZpCkBAIC0zNDQ0LDU4ICs3NTIwLDYyIEBACiAJICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgogCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRub191bmRlZmluZWRfZmxhZyIKIAlmaQorCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCiAJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKIAkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KIAlyZW1vdmVsaXN0PQotCXRlbXByZW1vdmVsaXN0PWAkZWNobyAiJG91dHB1dF9vYmpkaXIvKiJgCisJdGVtcHJlbW92ZWxpc3Q9YCRFQ0hPICIkb3V0cHV0X29iamRpci8qImAKIAlmb3IgcCBpbiAkdGVtcHJlbW92ZWxpc3Q7IGRvCiAJICBjYXNlICRwIGluCi0JICAgICouJG9iamV4dCkKKwkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQogCSAgICAgICA7OwogCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQogCSAgICAgICBpZiB0ZXN0ICJYJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiAhPSAiWCI7IHRoZW4KLQkgICAgICAgICBpZiBlY2hvICRwIHwgJEVHUkVQIC1lICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiID4vZGV2L251bGwgMj4mMQotCSAgICAgICAgIHRoZW4KKwkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJCSB0aGVuCiAJCSAgIGNvbnRpbnVlCiAJCSBmaQogCSAgICAgICBmaQotCSAgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkcCIKKwkgICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRwIgogCSAgICAgICA7OwogCSAgICAqKSA7OwogCSAgZXNhYwogCWRvbmUKLQlpZiB0ZXN0IC1uICIkcmVtb3ZlbGlzdCI7IHRoZW4KLQkgICRzaG93ICIke3JtfXIgJHJlbW92ZWxpc3QiCi0JICAkcnVuICR7cm19ciAkcmVtb3ZlbGlzdAotCWZpCisJdGVzdCAtbiAiJHJlbW92ZWxpc3QiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIgXCRyZW1vdmVsaXN0IgogICAgICAgZmkKIAogICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCiAgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgotCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJZnVuY19hcHBlbmQgb2xkbGlicyAiICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCiAKIAkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCi0Jb2xkb2Jqcz0iJG9ianMgImAkZWNobyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JyQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKICAgICAgIGZpCiAKICAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCiAgICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KLSAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkZWNobyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJHtTRUR9IC1lICJzJSAkcGF0aCAlICVnImAKLSAgICAgICMJZGVwbGlicz1gJGVjaG8gIiRkZXBsaWJzICIgfCAke1NFRH0gLWUgInMlIC1MJHBhdGggJSAlZyJgCi0gICAgICAjCWRlcGVuZGVuY3lfbGlicz1gJGVjaG8gIiRkZXBlbmRlbmN5X2xpYnMgIiB8ICR7U0VEfSAtZSAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkRUNITyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFNFRCAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICIkZGVwbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKICAgICAgICNkb25lCiAKICAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCiAJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgogCXRlbXBfeHJwYXRoPQogCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KLQkgIHRlbXBfeHJwYXRoPSIkdGVtcF94cnBhdGggLVIkbGliZGlyIgorCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisJICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKIAkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCiAJICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwogCSAgZXNhYwogCWRvbmUKIAlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgpAQCAtMzUwOSw3ICs3NTg5LDcgQEAKICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbwogCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCiAJKiIgJGxpYiAiKikgOzsKLQkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OworCSopIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkbGliIiA7OwogCWVzYWMKICAgICAgIGRvbmUKIApAQCAtMzUxOSwxOSArNzU5OSwxOSBAQAogICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCiAJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgogCSoiICRsaWIgIiopIDs7Ci0JKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiIgOzsKIAllc2FjCiAgICAgICBkb25lCiAKICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCiAJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgogCSAgY2FzZSAkaG9zdCBpbgotCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyopCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKIAkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQogCSAgICA7OwogCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQogCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yawotCSAgICBkZXBsaWJzPSIkZGVwbGlicyAtZnJhbWV3b3JrIFN5c3RlbSIKKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKIAkgICAgOzsKIAkgICotKi1uZXRic2QqKQogCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KQEAgLTM1NDUsMTAgKzc2MjUsMTAgQEAKIAkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKIAkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yawogCSAgICA7OwotIAkgICopCisJICAqKQogCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgogCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorCSAgICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtbGMiCiAJICAgIGZpCiAJICAgIDs7CiAJICBlc2FjCkBAIC0zNTgyLDEyMCArNzY2MiwxMzkgQEAKIAkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CiAJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjawogCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCi0JICAkcm0gY29uZnRlc3QuYworCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdC5jCiAJICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCiAJICBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KIEVPRgotCSAgJHJtIGNvbmZ0ZXN0CisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CiAJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgogCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCiAJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbwotCSAgICAgIG5hbWU9YGV4cHIgJGkgOiAnLWxcKC4qXCknYAotCSAgICAgICMgSWYgJG5hbWUgaXMgZW1wdHkgd2UgYXJlIG9wZXJhdGluZyBvbiBhIC1MIGFyZ3VtZW50LgotICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgIT0gIiIgJiYgdGVzdCAiJG5hbWUiICE9ICIwIjsgdGhlbgorCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KIAkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkJICAqIiAkaSAiKikKLQkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgogCQkgICAgaT0iIgogCQkgICAgOzsKIAkJICBlc2FjCi0JICAgICAgICBmaQorCQlmaQogCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCi0JCSAgbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAotCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsIFxcJGVjaG8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCJgCi0JCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlcwotCQkgIGRlcGxpYl9tYXRjaD0kMgorCQkgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgIGRlcGxpYl9tYXRjaD0kMQogCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KLQkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgogCQkgIGVsc2UKIAkJICAgIGRyb3BwZWRkZXBzPXllcwotCQkgICAgJGVjaG8KLQkJICAgICRlY2hvICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKLQkJICAgICRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCQkgICAgJGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCSAgICAkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBJIGJlbGlldmUgeW91IGRvIG5vdCBoYXZlIgotCQkgICAgJGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIGl0IGZvciIKLQkJICAgICRlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgICBlY2hvCisJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKwkJICAgIGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIGl0IGZvciIKKwkJICAgIGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKIAkJICBmaQogCQlmaQotCSAgICAgIGVsc2UKLQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCi0JICAgICAgZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYwogCSAgICBkb25lCiAJICBlbHNlCiAJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQogCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCiAJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbwotCSAgICAgIG5hbWU9YGV4cHIgJGkgOiAnLWxcKC4qXCknYAotCSAgICAgICMgSWYgJG5hbWUgaXMgZW1wdHkgd2UgYXJlIG9wZXJhdGluZyBvbiBhIC1MIGFyZ3VtZW50LgotICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgIT0gIiIgJiYgdGVzdCAiJG5hbWUiICE9ICIwIjsgdGhlbgotCQkkcm0gY29uZnRlc3QKKwkgICAgICBjYXNlICRpIGluCisJICAgICAgLWwqKQorCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCisJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CiAJCWlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpOyB0aGVuCiAJCSAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAogCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KIAkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCQkgICAgKiIgJGkgIiopCi0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCiAJCSAgICAgIGk9IiIKIAkJICAgICAgOzsKIAkJICAgIGVzYWMKIAkJICBmaQogCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KLQkJICAgIGxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKLQkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsIFxcJGVjaG8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCJgCi0JCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzCi0JCSAgICBkZXBsaWJfbWF0Y2g9JDIKKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICAgIGRlcGxpYl9tYXRjaD0kMQogCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgotCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgogCQkgICAgZWxzZQogCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKLQkJICAgICAgJGVjaG8KLQkJICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgotCQkgICAgICAkZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJICAgICAgJGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCSAgICAgICRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCi0JCSAgICAgICRlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKLQkJICAgICAgJGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgICAgZWNobworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKIAkJICAgIGZpCiAJCSAgZmkKIAkJZWxzZQogCQkgIGRyb3BwZWRkZXBzPXllcwotCQkgICRlY2hvCi0JCSAgJGVjaG8gIioqKiBXYXJuaW5nISAgTGlicmFyeSAkaSBpcyBuZWVkZWQgYnkgdGhpcyBsaWJyYXJ5IGJ1dCBJIHdhcyBub3QgYWJsZSB0byIKLQkJICAkZWNobyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgotCQkgICRlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgotCQkgICRlY2hvICIqKiogZnVuY3Rpb25hbC4gIEluc3RhbGxpbmcgaXQgYmVmb3JlIGNvbnRpbnVpbmcgd291bGQgYmUgZXZlbiBiZXR0ZXIuIgorCQkgIGVjaG8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICBlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgIGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCiAJCWZpCi0JICAgICAgZWxzZQotCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKLQkgICAgICBmaQorCQk7OworCSAgICAgICopCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJOzsKKwkgICAgICBlc2FjCiAJICAgIGRvbmUKIAkgIGZpCiAJICA7OwogCWZpbGVfbWFnaWMqKQotCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZAotCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMiBcKC4qXCkiYAorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKIAkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KLQkgICAgbmFtZT1gZXhwciAkYV9kZXBsaWIgOiAnLWxcKC4qXCknYAotCSAgICAjIElmICRuYW1lIGlzIGVtcHR5IHdlIGFyZSBvcGVyYXRpbmcgb24gYSAtTCBhcmd1bWVudC4KLSAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiAhPSAiIiAmJiB0ZXN0ICAiJG5hbWUiICE9ICIwIjsgdGhlbgorCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCiAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCQkqIiAkYV9kZXBsaWIgIiopCi0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCiAJCSAgYV9kZXBsaWI9IiIKIAkJICA7OwogCQllc2FjCiAJICAgICAgZmkKIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgotCQlsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgorCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCisJCWVsc2UKKwkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQorCQlmaQorCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAogCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KLQkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgorCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgorCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorCQkgICAgJG5vY2FzZWdsb2IKKwkJICBlbHNlCisJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisJCSAgZmkKIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCiAJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCi0JCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCBcCi0JCQkgfCBncmVwICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KIAkJCWNvbnRpbnVlCiAJCSAgICAgIGZpCiAJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgpAQCAtMzcwOCwxMyArNzgwNywxMyBAQAogCQkJcG90bGlibGluaz1gbHMgLWxkICRwb3RsaWIgfCAke1NFRH0gJ3MvLiogLT4gLy8nYAogCQkJY2FzZSAkcG90bGlibGluayBpbgogCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9IiRwb3RsaWJsaW5rIjs7Ci0JCQkqKSBwb3RsaWI9YCRlY2hvICJYJHBvdGxpYiIgfCAkWHNlZCAtZSAncyxbXi9dKiQsLCdgIiRwb3RsaWJsaW5rIjs7CisJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OwogCQkJZXNhYwogCQkgICAgICBkb25lCi0JCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCBcCi0JCQkgfCAke1NFRH0gMTBxIFwKLQkJCSB8ICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCi0JCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisJCQkgJFNFRCAtZSAxMHEgfAorCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgogCQkJYV9kZXBsaWI9IiIKIAkJCWJyZWFrIDIKIAkJICAgICAgZmkKQEAgLTM3MjMsNTAgKzc4MjIsNTIgQEAKIAkgICAgICBmaQogCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCiAJCWRyb3BwZWRkZXBzPXllcwotCQkkZWNobwotCQkkZWNobyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCi0JCSRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCQkkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkJJGVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCiAJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgotCQkgICRlY2hvICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKIAkJZWxzZQotCQkgICRlY2hvICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgotCQkgICRlY2hvICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgZmlsZSBtYWdpYy4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCiAJCWZpCiAJICAgICAgZmkKLQkgICAgZWxzZQorCSAgICAgIDs7CisJICAgICopCiAJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KLQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCi0JICAgIGZpCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCiAJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgogCSAgOzsKIAltYXRjaF9wYXR0ZXJuKikKLQkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2QKLQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDIgXCguKlwpImAKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCiAJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JICAgIG5hbWU9YGV4cHIgJGFfZGVwbGliIDogJy1sXCguKlwpJ2AKLQkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCi0JICAgIGlmIHRlc3QgLW4gIiRuYW1lIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KIAkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJCSoiICRhX2RlcGxpYiAiKikKLQkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKIAkJICBhX2RlcGxpYj0iIgogCQkgIDs7CiAJCWVzYWMKIAkgICAgICBmaQogCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCi0JCWxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCiAJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbwogCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAogCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KIAkJICAgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0Ci0JCSAgICBpZiBldmFsICRlY2hvIFwiJHBvdGVudF9saWJcIiAyPi9kZXYvbnVsbCBcCi0JCSAgICAgICAgfCAke1NFRH0gMTBxIFwKLQkJICAgICAgICB8ICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCi0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgogCQkgICAgICBhX2RlcGxpYj0iIgogCQkgICAgICBicmVhayAyCiAJCSAgICBmaQpAQCAtMzc3NSw0NiArNzg3Niw0OCBAQAogCSAgICAgIGZpCiAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KIAkJZHJvcHBlZGRlcHM9eWVzCi0JCSRlY2hvCi0JCSRlY2hvICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKLQkJJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCSRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCQkkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgotCQkkZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKIAkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCi0JCSAgJGVjaG8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgogCQllbHNlCi0JCSAgJGVjaG8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCi0JCSAgJGVjaG8gIioqKiB1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKIAkJZmkKIAkgICAgICBmaQotCSAgICBlbHNlCisJICAgICAgOzsKKwkgICAgKikKIAkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgotCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKLQkgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKIAkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCiAJICA7OwogCW5vbmUgfCB1bmtub3duIHwgKikKIAkgIG5ld2RlcGxpYnM9IiIKLQkgIHRtcF9kZXBsaWJzPWAkZWNobyAiWCAkZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjJC8vJyBcCi0JICAgIC1lICdzLyAtW0xSXVteIF0qLy9nJ2AKKwkgIHRtcF9kZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyQvLzsgcy8gLVtMUl1bXiBdKi8vZydgCiAJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCiAJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCiAJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJwotCSAgICAgIHRtcF9kZXBsaWJzPWAkZWNobyAiWCAkdG1wX2RlcGxpYnMiIHwgJHtTRUR9IC1lICIxcyxeWCwsIiAtZSAicywkaSwsImAKKwkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAicywkaSwsImAKIAkgICAgZG9uZQogCSAgZmkKLQkgIGlmICRlY2hvICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAncy9bIAldLy9nJyBcCi0JICAgIHwgZ3JlcCAuID4vZGV2L251bGw7IHRoZW4KLQkgICAgJGVjaG8KKwkgIGNhc2UgJHRtcF9kZXBsaWJzIGluCisJICAqWyFcCVwgXSopCisJICAgIGVjaG8KIAkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCi0JICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCiAJICAgIGVsc2UKLQkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgogCSAgICBmaQotCSAgICAkZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGVjaG8gIioqKiBBbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGRyb3BwZWQuIgogCSAgICBkcm9wcGVkZGVwcz15ZXMKLQkgIGZpCisJICAgIDs7CisJICBlc2FjCiAJICA7OwogCWVzYWMKIAl2ZXJzdWZmaXg9JHZlcnN1ZmZpeF9zYXZlCkBAIC0zODI1LDI0ICs3OTI4LDI0IEBACiAKIAljYXNlICRob3N0IGluCiAJKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQotCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5c3RlbSBmcmFtZXdvcmsKLQkgIG5ld2RlcGxpYnM9YCRlY2hvICJYICRuZXdkZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyAtZnJhbWV3b3JrIFN5c3RlbSAvJ2AKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAogCSAgOzsKIAllc2FjCiAKIAlpZiB0ZXN0ICIkZHJvcHBlZGRlcHMiID0geWVzOyB0aGVuCiAJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgotCSAgICAkZWNobwotCSAgICAkZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCi0JICAgICRlY2hvICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKLQkgICAgJGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgotCSAgICAkZWNobyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgorCSAgICBlY2hvCisJICAgIGVjaG8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgorCSAgICAkRUNITyAiKioqIGRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCisJICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorCSAgICBlY2hvICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCiAJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0JICAgICAgJGVjaG8KLQkgICAgICAkZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCi0JICAgICAgJGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCi0JICAgICAgJGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKLQkgICAgICAkZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCSAgICAgIGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCSAgICAgIGVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgogCSAgICBmaQogCSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KIAkgICAgICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgpAQCAtMzg1MiwxNiArNzk1NSwxNiBAQAogCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwogCSAgICBmaQogCSAgZWxzZQotCSAgICAkZWNobyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKLQkgICAgJGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCi0JICAgICRlY2hvICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCisJICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCisJICAgIGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisJICAgIGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKIAogCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCi0JICAgICAgJGVjaG8KLQkgICAgICAkZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKLQkgICAgICAkZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCi0JICAgICAgJGVjaG8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKLQkgICAgICAkZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKKwkgICAgICBlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCisJICAgICAgZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKIAkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KIAkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKIAkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQpAQCAtMzg3NSw3ICs3OTc4LDE0IEBACiAJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCiAJZGVwbGlicz0kbmV3ZGVwbGlicwogICAgICAgZmkKLQorICAgICAgIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorICAgICAgY2FzZSAkaG9zdCBpbgorCSotKi1kYXJ3aW4qKQorCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBkZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICA7OworICAgICAgZXNhYwogCiAgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKICAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CkBAIC0zODg2LDcgKzc5OTYsNyBAQAogCSopCiAJICBjYXNlICIgJGRlcGxpYnMgIiBpbgogCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQotCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CiAJICBlc2FjCiAJICA7OwogCWVzYWMKQEAgLTM4OTYsMTUgKzgwMDYsMTQgQEAKIAktTCopCiAJICBjYXNlICIgJG5ld19saWJzICIgaW4KIAkgICoiICRkZXBsaWIgIiopIDs7Ci0JICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CiAJICBlc2FjCiAJICA7OwotCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CiAJZXNhYwogICAgICAgZG9uZQogICAgICAgZGVwbGlicz0iJG5ld19saWJzIgogCi0KICAgICAgICMgQWxsIHRoZSBsaWJyYXJ5LXNwZWNpZmljIHZhcmlhYmxlcyAoaW5zdGFsbF9saWJkaXIgaXMgc2V0IGFib3ZlKS4KICAgICAgIGxpYnJhcnlfbmFtZXM9CiAgICAgICBvbGRfbGlicmFyeT0KQEAgLTM5MTcsMTAgKzgwMjYsMTIgQEAKIAkgIGhhcmRjb2RlX2xpYmRpcnM9CiAJICBkZXBfcnBhdGg9CiAJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgotCSAgdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCiAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCiAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAogCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KIAkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgogCQllbHNlCkBAIC0zOTI5LDE4ICs4MDQwLDE4IEBACiAJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQogCQkgICAgOzsKIAkJICAqKQotCQkgICAgaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCiAJCSAgICA7OwogCQkgIGVzYWMKIAkJZmkKIAkgICAgICBlbHNlCiAJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQkJZGVwX3JwYXRoPSIkZGVwX3JwYXRoICRmbGFnIgorCQlmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKIAkgICAgICBmaQogCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCiAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKLQkgICAgICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKIAkgIGRvbmUKQEAgLTM5NDksMTAgKzgwNjAsNyBAQAogCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCiAJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCiAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIjsgdGhlbgotCSAgICAgIGNhc2UgJGFyY2hpdmVfY21kcyBpbgotCSAgICAgICpcJExEKikgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiIDs7Ci0JICAgICAgKikgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIgOzsKLQkgICAgICBlc2FjCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCiAJICAgIGVsc2UKIAkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKIAkgICAgZmkKQEAgLTM5NjEsNyArODA2OSw3IEBACiAJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCiAJICAgIHJwYXRoPQogCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbwotCSAgICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCiAJICAgIGRvbmUKIAkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCiAJICBmaQpAQCAtMzk2OSw3ICs4MDc3LDcgQEAKIAlmaQogCiAJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgotCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCXRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKIAlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgogCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgogCWZpCkBAIC0zOTc4LDggKzgwODYsOSBAQAogCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCiAJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCiAJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCi0JcmVhbG5hbWU9IiQyIgotCXNoaWZ0OyBzaGlmdAorCXNoaWZ0CisJcmVhbG5hbWU9IiQxIgorCXNoaWZ0CiAKIAlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCiAJICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCkBAIC0zOTk0LDgzICs4MTAzLDE2NiBAQAogCWxpbmtuYW1lcz0KIAlmb3IgbGluawogCWRvCi0JICBsaW5rbmFtZXM9IiRsaW5rbmFtZXMgJGxpbmsiCisJICBmdW5jX2FwcGVuZCBsaW5rbmFtZXMgIiAkbGluayIKIAlkb25lCiAKIAkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYwotCXRlc3QgLXogIiRwaWNfZmxhZyIgJiYgbGlib2Jqcz1gJGVjaG8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCXRlc3QgLXogIiRwaWNfZmxhZyIgJiYgbGlib2Jqcz1gJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwl0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisJZGVsZmlsZXM9CisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKwlmaQorCisJb3JpZ19leHBvcnRfc3ltYm9scz0KKwljYXNlICRob3N0X29zIGluCisJY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKKwkgICAgaWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiICE9IHhFWFBPUlRTOyB0aGVuCisJICAgICAgIyBhbmQgaXQncyBOT1QgYWxyZWFkeSBhIC5kZWYgZmlsZS4gTXVzdCBmaWd1cmUgb3V0CisJICAgICAgIyB3aGljaCBvZiB0aGUgZ2l2ZW4gc3ltYm9scyBhcmUgZGF0YSBzeW1ib2xzIGFuZCB0YWcKKwkgICAgICAjIHRoZW0gYXMgc3VjaC4gU28sIHRyaWdnZXIgdXNlIG9mIGV4cG9ydF9zeW1ib2xzX2NtZHMuCisJICAgICAgIyBleHBvcnRfc3ltYm9scyBnZXRzIHJlYXNzaWduZWQgaW5zaWRlIHRoZSAicHJlcGFyZQorCSAgICAgICMgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyIgaWYgc3RhdGVtZW50LCBzbyB0aGUKKwkgICAgICAjIGluY2x1ZGVfZXhwc3ltcyBsb2dpYyBzdGlsbCB3b3Jrcy4KKwkgICAgICBvcmlnX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgZXhwb3J0X3N5bWJvbHM9CisJICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworCSAgICBmaQorCSAgZmkKKwkgIDs7CisJZXNhYwogCiAJIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKIAlpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCiAJICBpZiB0ZXN0ICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiA9IHllcyB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAgICRzaG93ICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKIAkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKLQkgICAgJHJ1biAkcm0gJGV4cG9ydF9zeW1ib2xzCisJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCiAJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKIAkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJICAgIGZvciBjbWQxIGluICRjbWRzOyBkbwogCSAgICAgIElGUz0iJHNhdmVfaWZzIgotCSAgICAgIGV2YWwgY21kPVwiJGNtZFwiCi0JICAgICAgaWYgbGVuPWBleHByICJYJGNtZCIgOiAiLioiYCAmJgotCSAgICAgICB0ZXN0ICIkbGVuIiAtbGUgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KLQkgICAgICAgICRzaG93ICIkY21kIgotCSAgICAgICAgJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/Ci0JICAgICAgICBza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgICMgVGFrZSB0aGUgbm9ybWFsIGJyYW5jaCBpZiB0aGUgbm1fZmlsZV9saXN0X3NwZWMgYnJhbmNoCisJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCisJICAgICAgY2FzZSAkbm1fZmlsZV9saXN0X3NwZWN+JHRvX3Rvb2xfZmlsZV9jbWQgaW4KKwkJKn5mdW5jX2NvbnZlcnRfZmlsZV9ub29wIHwgKn5mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiB8IH4qKQorCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcworCQkgIGV2YWwgY21kPVwiJGNtZDFcIgorCQkgIGZ1bmNfbGVuICIgJGNtZCIKKwkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCQkgIDs7CisJCSopCisJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0ICIkdHJ5X25vcm1hbF9icmFuY2giID0geWVzIFwKKwkJICYmIHsgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIFwKKwkJICAgICAgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IH0KKwkgICAgICB0aGVuCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KKwkJZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKwkJb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkJc2F2ZV9vdXRwdXQ9JG91dHB1dAorCQlvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubm0KKwkJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJCWxpYm9ianM9JG5tX2ZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCQlmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisJCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJE5NIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkJZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzOyBkbworCQkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCQkgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCQlkb25lID4gIiRvdXRwdXQiCisJCWV2YWwgY21kPVwiJGNtZDFcIgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCW91dHB1dD0kc2F2ZV9vdXRwdXQKKwkJbGlib2Jqcz0kc2F2ZV9saWJvYmpzCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCiAJICAgICAgZWxzZQotCSAgICAgICAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCi0JICAgICAgICAkc2hvdyAidXNpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZSBmb3IgZXhwb3J0IGxpc3QuLi4iCi0JICAgICAgICBza2lwcGVkX2V4cG9ydD06CisJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgorCQlza2lwcGVkX2V4cG9ydD06CiAJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCiAJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgogCQlicmVhawogCSAgICAgIGZpCiAJICAgIGRvbmUKIAkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgICAkc2hvdyAiJEVHUkVQIC1lIFwiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4XCIgXCIkZXhwb3J0X3N5bWJvbHNcIiA+IFwiJHtleHBvcnRfc3ltYm9sc31UXCIiCi0JICAgICAgJHJ1biBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKLQkgICAgICAkc2hvdyAiJG12IFwiJHtleHBvcnRfc3ltYm9sc31UXCIgXCIkZXhwb3J0X3N5bWJvbHNcIiIKLQkgICAgICAkcnVuIGV2YWwgJyRtdiAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCiAJICAgIGZpCiAJICBmaQogCWZpCiAKIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICAkcnVuIGV2YWwgJyRlY2hvICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiRleHBvcnRfc3ltYm9scyInCisJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCiAJZmkKIAogCXRtcF9kZXBsaWJzPQogCWZvciB0ZXN0X2RlcGxpYiBpbiAkZGVwbGliczsgZG8KLQkJY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCi0JCSoiICR0ZXN0X2RlcGxpYiAiKikgOzsKLQkJKikKLQkJCXRtcF9kZXBsaWJzPSIkdG1wX2RlcGxpYnMgJHRlc3RfZGVwbGliIgotCQkJOzsKLQkJZXNhYworCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJICAqKQorCSAgICBmdW5jX2FwcGVuZCB0bXBfZGVwbGlicyAiICR0ZXN0X2RlcGxpYiIKKwkgICAgOzsKKwkgIGVzYWMKIAlkb25lCiAJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgogCiAJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiAmJgorCSAgICB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllcyAmJgorCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KKwkgICAgIyBleHRyYWN0IHRoZSBhcmNoaXZlcywgc28gd2UgaGF2ZSBvYmplY3RzIHRvIGxpc3QuCisJICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgZmkKIAkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KIAkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCiAJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQogCSAgZWxzZQogCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgotCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKwkgICAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAogCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKLQkgICAgbGlib2Jqcz0iJGxpYm9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KIAkgIGZpCiAJZmkKLQkKKwogCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KIAkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgotCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCiAJZmkKIAogCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZwotCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgotCSAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICR7cmVhbG5hbWV9VSAmJiAkbXYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CiAJZmkKIAogCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KQEAgLTQwODMsMjIgKzgyNzUsMjQgQEAKIAkgICAgY21kcz0kbW9kdWxlX2NtZHMKIAkgIGZpCiAJZWxzZQotCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCi0JICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKLQkgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKLQllbHNlCi0JICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgotCSAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKIAkgIGZpCiAJZmkKIAogCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYKLQkgICBsZW49YGV4cHIgIlgkdGVzdF9jbWRzIiA6ICIuKiIgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIiAmJgorCSAgIGxlbj0kZnVuY19sZW5fcmVzdWx0ICYmCisJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCiAJICA6CiAJZWxzZQotCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlLgotCSAgJGVjaG8gImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlCisJICAjIG9yLCBpZiB1c2luZyBHTlUgbGQgYW5kIHNraXBwZWRfZXhwb3J0IGlzIG5vdCA6LCB1c2UgYSBsaW5rZXIKKwkgICMgc2NyaXB0LgogCiAJICAjIFNhdmUgdGhlIHZhbHVlIG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1c2Ugd2Ugd2FudCB0bwogCSAgIyB1c2UgdGhlbSBsYXRlci4gIElmIHdlIGhhdmUgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsIHdlCkBAIC00MTEyLDc3ICs4MzA2LDE3MSBAQAogCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKIAkgIGZpCiAJICBzYXZlX291dHB1dD0kb3V0cHV0Ci0JICBvdXRwdXRfbGE9YCRlY2hvICJYJG91dHB1dCIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKwkgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisJICBvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAKIAkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCiAJICAjIGluaXRpYWxpemUgayB0byBvbmUuCiAJICB0ZXN0X2NtZHM9CiAJICBjb25jYXRfY21kcz0KIAkgIG9iamxpc3Q9Ci0JICBkZWxmaWxlcz0KIAkgIGxhc3Rfcm9iaj0KIAkgIGs9MQotCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0Ci0JICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KLQkgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcwotCSAgZG8KLQkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCi0JICAgIGlmIHRlc3QgIlgkb2JqbGlzdCIgPSBYIHx8Ci0JICAgICAgIHsgbGVuPWBleHByICJYJHRlc3RfY21kcyIgOiAiLioiIDI+L2Rldi9udWxsYCAmJgotCQkgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iOyB9OyB0aGVuCi0JICAgICAgb2JqbGlzdD0iJG9iamxpc3QgJG9iaiIKLQkgICAgZWxzZQotCSAgICAgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCi0JICAgICAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KLQkgICAgICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCi0JCSMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCi0JCWV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCi0JICAgICAgZWxzZQotCQkjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgotCQkjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgotCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCi0JICAgICAgZmkKLQkgICAgICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKLQkgICAgICBrPWBleHByICRrICsgMWAKLQkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKLQkgICAgICBvYmpsaXN0PSRvYmoKLQkgICAgICBsZW49MQorCisJICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lmxua3NjcmlwdAorCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCisJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKIAkgICAgZmkKLQkgIGRvbmUKLQkgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAotCSAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKLQkgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgotCSAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+Ci0JICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorCSAgICBmb3Igb2JqCisJICAgIGRvCisJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKKwkgICAgZG9uZQorCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgbGVuPSRsZW4wCiAKLQkgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCi0JICAgICRzaG93ICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKLQkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKLQkgICAgJHJ1biAkcm0gJGV4cG9ydF9zeW1ib2xzCi0JICAgIGxpYm9ianM9JG91dHB1dAotCSAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgotCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kZXhwb3J0X3N5bWJvbHNfY21kc1wiCi0gICAgICAgICAgZmkKKwkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgICAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgICBkbworCQlmdW5jX2xlbiAiICRvYmoiCisJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkJZWxzZQorCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCisJCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KKwkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQkgICAgcmVsb2FkX29ianM9JG9iamxpc3QKKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCQkgIGVsc2UKKwkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkJICBmaQorCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIGZ1bmNfYXJpdGggJGsgKyAxCisJCSAgaz0kZnVuY19hcml0aF9yZXN1bHQKKwkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBvYmpsaXN0PSIgJG9iaiIKKwkJICBmdW5jX2xlbiAiICRsYXN0X3JvYmoiCisJCSAgZnVuY19hcml0aCAkbGVuMCArICRmdW5jX2xlbl9yZXN1bHQKKwkJICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWZpCisJICAgICAgZG9uZQorCSAgICAgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAorCSAgICAgICMgcmVsb2FkYWJsZSBvYmplY3QgZmlsZS4gIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0CisJICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKIAotCSAgIyBTZXQgdXAgYSBjb21tYW5kIHRvIHJlbW92ZSB0aGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMKLQkgICMgYWZ0ZXIgdGhleSBhcmUgdXNlZC4KLQkgIGk9MAotCSAgd2hpbGUgdGVzdCAiJGkiIC1sdCAiJGsiCi0JICBkbwotCSAgICBpPWBleHByICRpICsgMWAKLQkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7aX0uJG9iamV4dCIKLQkgIGRvbmUKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKIAotCSAgJGVjaG8gImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCisJICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgbGlib2Jqcz0kb3V0cHV0CisJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgIGZpCiAKLQkgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KLQkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgIH0KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCQlsdF9leGl0PSQ/CisKKwkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJICAgICRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCisJCWZpCisKKwkJZXhpdCAkbHRfZXhpdAorCSAgICAgIH0KKwkgICAgZG9uZQogCSAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgJHNob3cgIiRjbWQiCi0JICAgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotCSAgZG9uZQotCSAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKworICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgICAgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCSAgICBmaQorCSAgZmkKIAogCSAgbGlib2Jqcz0kb3V0cHV0CiAJICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KQEAgLTQxOTAsNiArODQ3OCw3IEBACiAKIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgogCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KIAkgIGZpCiAJICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQogCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCkBAIC00MjAyLDI4ICs4NDkxLDQ1IEBACiAJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKIAkgICAgZmkKIAkgIGVsc2UKLQkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCi0JICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKLQkgIGVsc2UKLQkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kYXJjaGl2ZV9jbWRzCiAJICAgIGZpCiAJICBmaQotCi0JICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzCi0JICAjIHRvIHRoZSBqdXN0LXJlc2V0ICRjbWRzLgotCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkcm0gJGRlbGZpbGVzXCIKIAlmaQorCisJaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgorCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCisJZmkKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCWZpCisKIAlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKIAlmb3IgY21kIGluICRjbWRzOyBkbwogCSAgSUZTPSIkc2F2ZV9pZnMiCiAJICBldmFsIGNtZD1cIiRjbWRcIgotCSAgJHNob3cgIiRjbWQiCi0JICAkcnVuIGV2YWwgIiRjbWQiIHx8IHsKKwkgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICB9CisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgewogCSAgICBsdF9leGl0PSQ/CiAKIAkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgotCSAgICAgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVQgJiYgJG12ICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJworCSAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkgICAgICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCiAJICAgIGZpCiAKIAkgICAgZXhpdCAkbHRfZXhpdApAQCAtNDIzMiwxMyArODUzOCwxMiBAQAogCUlGUz0iJHNhdmVfaWZzIgogCiAJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCi0JICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1UICYmICRtdiAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRtdiAiJHJlYWxuYW1lIlUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KIAogCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgogCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCi0JICAgICAgJHNob3cgIiR7cm19ciAkZ2VudG9wIgotCSAgICAgICRydW4gJHtybX1yICIkZ2VudG9wIgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwogCSAgICBmaQogCSAgZmkKIApAQCAtNDI0OCw4ICs4NTUzLDcgQEAKIAkjIENyZWF0ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgogCWZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbwogCSAgaWYgdGVzdCAiJHJlYWxuYW1lIiAhPSAiJGxpbmtuYW1lIjsgdGhlbgotCSAgICAkc2hvdyAiKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZSkiCi0JICAgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZSknIHx8IGV4aXQgJD8KKwkgICAgZnVuY19zaG93X2V2YWwgJyhjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJGxpbmtuYW1lIiAmJiAkTE5fUyAiJHJlYWxuYW1lIiAiJGxpbmtuYW1lIiknICdleGl0ICQ/JwogCSAgZmkKIAlkb25lCiAKQEAgLTQyNjIsMzkgKzg1NjYsMzUgQEAKICAgICAgIDs7CiAKICAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorICAgICAgZmkKKwogICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgogICAgICAgKlwgLWwqIHwgKlwgLUwqKQotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMiA7OworCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OwogICAgICAgZXNhYwogCi0gICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAKLSAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogCi0gICAgICBpZiB0ZXN0IC1uICIkdmluZm8iOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAKICAgICAgIGNhc2UgJG91dHB1dCBpbgogICAgICAgKi5sbykKLQlpZiB0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JZmkKLQlsaWJvYmo9IiRvdXRwdXQiCi0Jb2JqPWAkZWNobyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgIiRsbzJvImAKKwl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCisJbGlib2JqPSRvdXRwdXQKKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisJb2JqPSRmdW5jX2xvMm9fcmVzdWx0CiAJOzsKICAgICAgICopCiAJbGlib2JqPQpAQCAtNDMwMyw3ICs4NjAzLDcgQEAKICAgICAgIGVzYWMKIAogICAgICAgIyBEZWxldGUgdGhlIG9sZCBvYmplY3RzLgotICAgICAgJHJ1biAkcm0gJG9iaiAkbGlib2JqCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvYmogJGxpYm9iagogCiAgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKICAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCkBAIC00MzE5LDM1ICs4NjE5LDI5IEBACiAgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCiAJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgogCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCi0JICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRlY2hvICJYJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRYc2VkIC1lICdzfCx8IHxnJ2AKKwkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKIAllbHNlCiAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCi0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAKIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQogCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgogCWZpCiAgICAgICBmaQogCisgICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcworICAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIGxpYm9ianM9IiRub25fcGljX29iamVjdHMiCisKICAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJGVjaG8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSQnL2QnIC1lICcvXC5saWIkL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKIAogICAgICAgb3V0cHV0PSIkb2JqIgotICAgICAgY21kcz0kcmVsb2FkX2NtZHMKLSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLQlJRlM9IiRzYXZlX2lmcyIKLQlldmFsIGNtZD1cIiRjbWRcIgotCSRzaG93ICIkY21kIgotCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotICAgICAgZG9uZQotICAgICAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKIAogICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCiAgICAgICBpZiB0ZXN0IC16ICIkbGlib2JqIjsgdGhlbgogCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCi0JICAkc2hvdyAiJHtybX1yICRnZW50b3AiCi0JICAkcnVuICR7cm19ciAkZ2VudG9wCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKIAlmaQogCiAJZXhpdCAkRVhJVF9TVUNDRVNTCkBAIC00MzU1LDE0ICs4NjQ5LDEzIEBACiAKICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgogCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCi0JICAkc2hvdyAiJHtybX1yICRnZW50b3AiCi0JICAkcnVuICR7cm19ciAkZ2VudG9wCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKIAlmaQogCiAJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKIAkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgogCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKLQkjICRydW4gZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/CisJIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/CiAJZXhpdCAkRVhJVF9TVUNDRVNTCiAgICAgICBmaQogCkBAIC00MzcwLDIwICs4NjYzLDExIEBACiAJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KIAlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCiAJb3V0cHV0PSIkbGlib2JqIgotCWNtZHM9JHJlbG9hZF9jbWRzCi0Jc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JZm9yIGNtZCBpbiAkY21kczsgZG8KLQkgIElGUz0iJHNhdmVfaWZzIgotCSAgZXZhbCBjbWQ9XCIkY21kXCIKLQkgICRzaG93ICIkY21kIgotCSAgJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/Ci0JZG9uZQotCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JwogICAgICAgZmkKIAogICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KLQkkc2hvdyAiJHtybX1yICRnZW50b3AiCi0JJHJ1biAke3JtfXIgJGdlbnRvcAorCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwogICAgICAgZmkKIAogICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCkBAIC00MzkxLDM5ICs4Njc1LDQ1IEBACiAKICAgICBwcm9nKQogICAgICAgY2FzZSAkaG9zdCBpbgotCSpjeWd3aW4qKSBvdXRwdXQ9YCRlY2hvICRvdXRwdXQgfCAke1NFRH0gLWUgJ3MsLmV4ZSQsLDtzLCQsLmV4ZSwnYCA7OworCSpjeWd3aW4qKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmV4ZTs7CiAgICAgICBlc2FjCi0gICAgICBpZiB0ZXN0IC1uICIkdmluZm8iOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKIAotICAgICAgaWYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCiAKLSAgICAgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllczsgdGhlbgotCWlmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duICYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgPSB1bmtub3duICYmCi0JICAgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYEFDX0xJQlRPT0xfRExPUEVOJyBub3QgdXNlZC4gQXNzdW1pbmcgbm8gZGxvcGVuIHN1cHBvcnQuIgotCWZpCi0gICAgICBmaQorICAgICAgdGVzdCAiJHByZWxvYWQiID0geWVzIFwKKyAgICAgICAgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd24gJiYgXAorCSAgZnVuY193YXJuaW5nICJcYExUX0lOSVQoW2Rsb3Blbl0pJyBub3QgdXNlZC4gQXNzdW1pbmcgbm8gZGxvcGVuIHN1cHBvcnQuIgogCiAgICAgICBjYXNlICRob3N0IGluCiAgICAgICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCiAJIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5c3RlbSBmcmFtZXdvcmsKLQljb21waWxlX2RlcGxpYnM9YCRlY2hvICJYICRjb21waWxlX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIC1mcmFtZXdvcmsgU3lzdGVtIC8nYAotCWZpbmFsaXplX2RlcGxpYnM9YCRlY2hvICJYICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyAtZnJhbWV3b3JrIFN5c3RlbSAvJ2AKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCiAJOzsKICAgICAgIGVzYWMKIAogICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgKmRhcndpbiopCi0gICAgICAgICMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKLSAgICAgICAgaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgotICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgotICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCi0gICAgICAgIGZpCi0gICAgICAgIDs7CisgICAgICAqLSotZGFyd2luKikKKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KKwlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCisJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisJICAgIDEwLlswMTIzXSkKKwkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwk7OwogICAgICAgZXNhYwogCiAKQEAgLTQ0MzYsNyArODcyNiw3IEBACiAJKikKIAkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KIAkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKLQkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OwogCSAgZXNhYwogCSAgOzsKIAllc2FjCkBAIC00NDQ2LDE3ICs4NzM2LDE3IEBACiAJLUwqKQogCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCiAJICAqIiAkZGVwbGliICIqKSA7OwotCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwogCSAgZXNhYwogCSAgOzsKLQkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwogCWVzYWMKICAgICAgIGRvbmUKICAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgogCiAKLSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkY29tcGlsZV9kZXBsaWJzIgotICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGZpbmFsaXplX2RlcGxpYnMiCisgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkY29tcGlsZV9kZXBsaWJzIgorICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgogCiAgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgogCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KQEAgLTQ0NjQsNyArODc1NCw3IEBACiAJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCiAJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgogCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKIAkgIGVzYWMKIAlkb25lCiAgICAgICBmaQpAQCAtNDQ4MywzMCArODc3MywzMiBAQAogCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKIAkJOzsKIAkgICAgICAqKQotCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgogCQk7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKIAkgIGVsc2UKIAkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgogCSAgZmkKIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KIAkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KIAkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CiAJICBlc2FjCiAJZmkKIAljYXNlICRob3N0IGluCi0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCi0JICB0ZXN0YmluZGlyPWAkZWNobyAiWCRsaWJkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCiAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KIAkgICoiOiRsaWJkaXI6IiopIDs7Ci0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokbGliZGlyIjs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CiAJICBlc2FjCiAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OwotCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OwogCSAgZXNhYwogCSAgOzsKIAllc2FjCkBAIC00NTMyLDE4ICs4ODI0LDE4IEBACiAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQogCQk7OwogCSAgICAgICopCi0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCiAJCTs7CiAJICAgICAgZXNhYwogCSAgICBmaQogCSAgZWxzZQogCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0JICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCiAJICBmaQogCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgogCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgogCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9wZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKIAkgIGVzYWMKIAlmaQogICAgICAgZG9uZQpAQCAtNDU1NywyODEgKzg4NDksNTcgQEAKIAogICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KIAkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCi0JY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKLQlmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKICAgICAgIGZpCiAKLSAgICAgIGRsc3ltcz0KLSAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCi0JaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotCSAgZGxzeW1zPSIke291dHB1dG5hbWV9Uy5jIgotCWVsc2UKLQkgICRlY2hvICIkbW9kZW5hbWU6IG5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIgMT4mMgotCWZpCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JwogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAtbiAiJGRsc3ltcyI7IHRoZW4KLQljYXNlICRkbHN5bXMgaW4KLQkiIikgOzsKLQkqLmMpCi0JICAjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgotCSAgbmxpc3Q9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX0ubm0iCi0KLQkgICRzaG93ICIkcm0gJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCi0JICAkcnVuICRybSAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIgotCi0JICAjIFBhcnNlIHRoZSBuYW1lIGxpc3QgaW50byBhIHNvdXJjZSBmaWxlLgotCSAgJHNob3cgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiCi0KLQkgIHRlc3QgLXogIiRydW4iICYmICRlY2hvID4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICJcCi0vKiAkZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG91dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KLS8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAgKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gXCJDXCIgewotI2VuZGlmCi0KLS8qIFByZXZlbnQgdGhlIG9ubHkga2luZCBvZiBkZWNsYXJhdGlvbiBjb25mbGljdHMgd2UgY2FuIG1ha2UuICovCi0jZGVmaW5lIGx0X3ByZWxvYWRlZF9zeW1ib2xzIHNvbWVfb3RoZXJfc3ltYm9sCi0KLS8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCi0iCi0KLQkgIGlmIHRlc3QgIiRkbHNlbGYiID0geWVzOyB0aGVuCi0JICAgICRzaG93ICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRvdXRwdXQnIgotCi0JICAgIHRlc3QgLXogIiRydW4iICYmICRlY2hvICc6IEBQUk9HUkFNQCAnID4gIiRubGlzdCIKLQotCSAgICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCi0JICAgIHByb2dmaWxlcz1gJGVjaG8gIlgkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAotCSAgICBmb3IgYXJnIGluICRwcm9nZmlsZXM7IGRvCi0JICAgICAgJHNob3cgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGFyZyciCi0JICAgICAgJHJ1biBldmFsICIkTk0gJGFyZyB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCi0JICAgIGRvbmUKLQotCSAgICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgICAgICRydW4gZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCi0JICAgICAgJHJ1biBldmFsICckbXYgIiRubGlzdCJUICIkbmxpc3QiJwotCSAgICBmaQotCi0JICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgICAkcnVuIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKLQkgICAgICAkcnVuIGV2YWwgJyRtdiAiJG5saXN0IlQgIiRubGlzdCInCi0JICAgIGZpCi0KLQkgICAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKLQkgICAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgotCSAgICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCi0JICAgICAgJHJ1biAkcm0gJGV4cG9ydF9zeW1ib2xzCi0JICAgICAgJHJ1biBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKLSAgICAgICAgICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQotCSAgICAgICAgJHJ1biBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwotCQkkcnVuIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICBlc2FjCi0JICAgIGVsc2UKLQkgICAgICAkcnVuIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJwotCSAgICAgICRydW4gZXZhbCAnZ3JlcCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJwotCSAgICAgICRydW4gZXZhbCAnbXYgIiRubGlzdCJUICIkbmxpc3QiJwotICAgICAgICAgICAgICBjYXNlICRob3N0IGluCi0gICAgICAgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCi0JICAgICAgICAkcnVuIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0JCSRydW4gZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLQkgICAgZmkKLQkgIGZpCi0KLQkgIGZvciBhcmcgaW4gJGRscHJlZmlsZXM7IGRvCi0JICAgICRzaG93ICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRhcmcnIgotCSAgICBuYW1lPWAkZWNobyAiJGFyZyIgfCAke1NFRH0gLWUgJ3MlXi4qLyUlJ2AKLQkgICAgJHJ1biBldmFsICckZWNobyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwotCSAgICAkcnVuIGV2YWwgIiROTSAkYXJnIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKLQkgIGRvbmUKLQotCSAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KLQkgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgotCSAgICB0ZXN0IC1mICIkbmxpc3QiIHx8IDogPiAiJG5saXN0IgotCi0JICAgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICAgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKLQkgICAgICAkbXYgIiRubGlzdCJUICIkbmxpc3QiCi0JICAgIGZpCi0KLQkgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLQkgICAgaWYgZ3JlcCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKLQkJaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JCSAgc29ydCAtayAzCi0JCWVsc2UKLQkJICBzb3J0ICsyCi0JCWZpIHwKLQkJdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgotCSAgICAgIDoKLQkgICAgZWxzZQotCSAgICAgIGdyZXAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUwotCSAgICBmaQotCi0JICAgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCi0JICAgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyInCi0JICAgIGVsc2UKLQkgICAgICAkZWNobyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiCi0JICAgIGZpCi0KLQkgICAgJGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICJcCi0KLSN1bmRlZiBsdF9wcmVsb2FkZWRfc3ltYm9scwotCi0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCi0jIGRlZmluZSBsdF9wdHIgdm9pZCAqCi0jZWxzZQotIyBkZWZpbmUgbHRfcHRyIGNoYXIgKgotIyBkZWZpbmUgY29uc3QKLSNlbmRpZgotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gKi8KLSIKLQotCSAgICBjYXNlICRob3N0IGluCi0JICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCi0JICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UKLSAgIHJ1bnRpbWUgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uCi0gICBvbiBwc2V1ZG8tcmVsb2NzICovCi1zdHJ1Y3QgewotIgotCSAgICAgIDs7Ci0JICAgICogKQotCSAgJGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICJcCi1jb25zdCBzdHJ1Y3QgewotIgotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQotCi0JICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgbHRfcHRyIGFkZHJlc3M7Ci19Ci1sdF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KLXtcCi0iCi0KLQkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiCi0KLQkgICAgJGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICJcCi0gIHswLCAobHRfcHRyKSAwfQotfTsKLQotLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCi0jaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECi1zdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewotICByZXR1cm4gbHRfcHJlbG9hZGVkX3N5bWJvbHM7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWZcCi0iCi0JICBmaQotCi0JICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9Ci0JICBjYXNlICRob3N0IGluCi0JICAjIGNvbXBpbGluZyB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgd2l0aCBwaWNfZmxhZyB3b3JrcyBhcm91bmQKLQkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcwotCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQotCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCi0JICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgotCSAgKi0qLWZyZWVic2QyKnwqLSotZnJlZWJzZDMuMCp8Ki0qLWZyZWVic2RlbGYzLjAqKQotCSAgICBjYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KLQkgICAgKiIgLXN0YXRpYyAiKikgOzsKLQkgICAgKikgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIC1ERlJFRUJTRF9XT1JLQVJPVU5EIjs7Ci0JICAgIGVzYWM7OwotCSAgKi0qLWhwdXgqKQotCSAgICBjYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KLQkgICAgKiIgLXN0YXRpYyAiKikgOzsKLQkgICAgKikgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIjs7Ci0JICAgIGVzYWMKLQkgIGVzYWMKLQotCSAgIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KLQkgICRzaG93ICIoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0MgICRMVENGTEFHUyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlIFwiJGRsc3ltc1wiKSIKLQkgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDICAkTFRDRkxBR1MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSAiJGRsc3ltcyIpJyB8fCBleGl0ICQ/Ci0KLQkgICMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KLQkgICRzaG93ICIkcm0gJG91dHB1dF9vYmpkaXIvJGRsc3ltcyAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKLQkgICRydW4gJHJtICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIgotCi0JICAjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgotICAgICAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQotICAgICAgICAgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5kZWYiIDsgdGhlbgotICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5kZWYgJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCi0gICAgICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX0uZGVmICRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSUiIHwgJE5MMlNQYAotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCi0gICAgICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSUiIHwgJE5MMlNQYAotICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICA7OwotICAgICAgICAgICogKQotICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSUiIHwgJE5MMlNQYAotICAgICAgICAgICAgZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCi0gICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLQkgIDs7Ci0JKikKLQkgICRlY2hvICIkbW9kZW5hbWU6IHVua25vd24gc3VmZml4IGZvciBcYCRkbHN5bXMnIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotCSMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCi0JIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQotCSMgcmVhbGx5IHdhcyByZXF1aXJlZC4KLQotCSMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCi0JY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlIiB8ICROTDJTUGAKLQlmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSIgfCAkTkwyU1BgCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0gbm8gfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICB3cmFwcGVyc19yZXF1aXJlZD15ZXMKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICpjZWdjYyogfCAqbWluZ3czMmNlKikKKyAgICAgICAgIyBEaXNhYmxlIHdyYXBwZXJzIGZvciBjZWdjYyBhbmQgbWluZ3czMmNlIGhvc3RzLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KKyAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgOzsKKyAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisgICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBpZiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0gbm8gfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgIiR3cmFwcGVyc19yZXF1aXJlZCIgPSBubzsgdGhlbgogCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLQljb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyB8ICROTDJTUGAKKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCiAJbGlua19jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCiAKIAkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KLQkkc2hvdyAiJGxpbmtfY29tbWFuZCIKLQkkcnVuIGV2YWwgIiRsaW5rX2NvbW1hbmQiCi0JZXhpdF9zdGF0dXM9JD8KKwlleGl0X3N0YXR1cz0wCisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0X3N0YXR1cz0kPycKKworCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworCWZpCiAKIAkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgotCWlmIHRlc3QgLW4gIiRkbHN5bXMiOyB0aGVuCi0JICAkc2hvdyAiJHJtICRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSIKLQkgICRydW4gJHJtICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iCisJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKIAlmaQogCiAJZXhpdCAkZXhpdF9zdGF0dXMKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCSMgV2Ugc2hvdWxkIHNldCB0aGUgc2hsaWJwYXRoX3ZhcgotCXJwYXRoPQotCWZvciBkaXIgaW4gJHRlbXBfcnBhdGg7IGRvCi0JICBjYXNlICRkaXIgaW4KLQkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikKLQkgICAgIyBBYnNvbHV0ZSBwYXRoLgotCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCi0JICAgIDs7Ci0JICAqKQotCSAgICAjIFJlbGF0aXZlIHBhdGg6IGFkZCBhIHRoaXNkaXIgZW50cnkuCi0JICAgIHJwYXRoPSIkcnBhdGhcJHRoaXNkaXIvJGRpcjoiCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCXRlbXBfcnBhdGg9IiRycGF0aCIKLSAgICAgIGZpCi0KICAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCiAJY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKICAgICAgIGZpCkBAIC00ODQ2LDcgKzg5MTQsNyBAQAogCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KIAkgIHJwYXRoPQogCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCiAJICBkb25lCiAJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCiAJZmkKQEAgLTQ4NTQsNyArODkyMiw3IEBACiAJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgogCSAgcnBhdGg9CiAJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbwotCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKIAkgIGRvbmUKIAkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCiAJZmkKQEAgLTQ4NjQsMTIgKzg5MzIsMTggQEAKIAkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCiAJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCiAJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKIAkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgotCSRydW4gJHJtICRvdXRwdXQKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKIAkjIExpbmsgdGhlIGV4ZWN1dGFibGUgYW5kIGV4aXQKLQkkc2hvdyAiJGxpbmtfY29tbWFuZCIKLQkkcnVuIGV2YWwgIiRsaW5rX2NvbW1hbmQiIHx8IGV4aXQgJD8KKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisKKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKwlmaQorCiAJZXhpdCAkRVhJVF9TVUNDRVNTCiAgICAgICBmaQogCkBAIC00ODc4LDEzICs4OTUyLDEzIEBACiAJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCiAJcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKIAotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIiAxPiYyCi0JJGVjaG8gIiRtb2RlbmFtZTogXGAkb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iIDE+JjIKKwlmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgorCWZ1bmNfd2FybmluZyAiXGAkb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCiAgICAgICBlbHNlCiAJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgIT0gbm87IHRoZW4KIAkgIGxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCiAJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgotCSAgICByZWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJyB8ICROTDJTUGAKKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAogCSAgZWxzZQogCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKIAkgICAgcmVsaW5rX2NvbW1hbmQ9CkBAIC00ODk2LDYwOCArODk3MCw5OCBAQAogICAgICAgZmkKIAogICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotICAgICAgbGlua19jb21tYW5kPWAkZWNobyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKIAogICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCi0gICAgICAkcnVuICRybSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKIAotICAgICAgJHNob3cgIiRsaW5rX2NvbW1hbmQiCi0gICAgICAkcnVuIGV2YWwgIiRsaW5rX2NvbW1hbmQiIHx8IGV4aXQgJD8KKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIgorCXBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisJZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCiAKICAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCi0gICAgICAkc2hvdyAiY3JlYXRpbmcgJG91dHB1dCIKKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKIAogICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgogICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgogCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKIAlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KIAkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCi0JICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCB1bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgogCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCiAJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKIAkgIGVsc2UKLQkgICAgdmFyX3ZhbHVlPWAkZWNobyAiWCR2YXJfdmFsdWUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj1cIiR2YXJfdmFsdWVcIjsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgogCSAgZmkKIAlkb25lCiAJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKLQlyZWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiIHwgJE5MMlNQYAorCXJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAogICAgICAgZmkKIAotICAgICAgIyBRdW90ZSAkZWNobyBmb3Igc2hpcHBpbmcuCi0gICAgICBpZiB0ZXN0ICJYJGVjaG8iID0gIlgkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KLQljYXNlICRwcm9ncGF0aCBpbgotCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcWVjaG89IiRTSEVMTCAkcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjs7Ci0JKikgcWVjaG89IiRTSEVMTCBgcHdkYC8kcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjs7Ci0JZXNhYwotCXFlY2hvPWAkZWNobyAiWCRxZWNobyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBlbHNlCi0JcWVjaG89YCRlY2hvICJYJGVjaG8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgZmkKLQotICAgICAgIyBPbmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBpZiBvdXIgcnVuIGNvbW1hbmQgaXMgbm9uLW51bGwuCi0gICAgICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgorICAgICAgIyBPbmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBpZiBub3QgaW4gZHJ5IHJ1biBtb2RlLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKIAkjIHdpbjMyIHdpbGwgdGhpbmsgdGhlIHNjcmlwdCBpcyBhIGJpbmFyeSBpZiBpdCBoYXMKIAkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgogCWNhc2UgJG91dHB1dCBpbgotCSAgKi5leGUpIG91dHB1dD1gJGVjaG8gJG91dHB1dHwke1NFRH0gJ3MsLmV4ZSQsLCdgIDs7CisJICAqLmV4ZSkgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CiAJZXNhYwogCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucwogCWNhc2UgJGhvc3QgaW4KIAkgICpjeWd3aW4qKQogCSAgICBleGVleHQ9LmV4ZQotCSAgICBvdXRwdXRuYW1lPWAkZWNobyAkb3V0cHV0bmFtZXwke1NFRH0gJ3MsLmV4ZSQsLCdgIDs7CisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwogCSAgKikgZXhlZXh0PSA7OwogCWVzYWMKIAljYXNlICRob3N0IGluCiAJICAqY3lnd2luKiB8ICptaW5ndyogKQotICAgICAgICAgICAgb3V0cHV0X25hbWU9YGJhc2VuYW1lICRvdXRwdXRgCi0gICAgICAgICAgICBvdXRwdXRfcGF0aD1gZGlybmFtZSAkb3V0cHV0YAotICAgICAgICAgICAgY3dyYXBwZXJzb3VyY2U9IiRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jIgotICAgICAgICAgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgotICAgICAgICAgICAgJHJtICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKLSAgICAgICAgICAgIHRyYXAgIiRybSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyOyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKwkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKIAotCSAgICBjYXQgPiAkY3dyYXBwZXJzb3VyY2UgPDxFT0YKKwkgICAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyA+ICRjd3JhcHBlcnNvdXJjZQogCi0vKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCi0gICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gLSBHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QCisJICAgICMgVGhlIHdyYXBwZXIgZXhlY3V0YWJsZSBpcyBidWlsdCB1c2luZyB0aGUgJGhvc3QgY29tcGlsZXIsCisJICAgICMgYmVjYXVzZSBpdCBjb250YWlucyAkaG9zdCBwYXRocyBhbmQgZmlsZXMuIElmIGNyb3NzLQorCSAgICAjIGNvbXBpbGluZywgaXQsIGxpa2UgdGhlIHRhcmdldCBleGVjdXRhYmxlLCBtdXN0IGJlCisJICAgICMgZXhlY3V0ZWQgb24gdGhlICRob3N0IG9yIHVuZGVyIGFuIGVtdWxhdGlvbiBlbnZpcm9ubWVudC4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkTFRDQyAkTFRDRkxBR1MgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQorCSAgICAgICRTVFJJUCAkY3dyYXBwZXIKKwkgICAgfQogCi0gICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKLSAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KLQotICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgotICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgotCi0gICBDdXJyZW50bHksIGl0IHNpbXBseSBleGVjcyB0aGUgd3JhcHBlciAqc2NyaXB0KiAiL2Jpbi9zaCAkb3V0cHV0IiwKLSAgIGJ1dCBjb3VsZCBldmVudHVhbGx5IGFic29yYiBhbGwgb2YgdGhlIHNjcmlwdHMgZnVuY3Rpb25hbGl0eSBhbmQKLSAgIGV4ZWMgJG9iamRpci8kb3V0cHV0bmFtZSBkaXJlY3RseS4KLSovCi1FT0YKLQkgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZTw8IkVPRiIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLQotI2lmIGRlZmluZWQoUEFUSF9NQVgpCi0jIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCi0jZWxpZiBkZWZpbmVkKE1BWFBBVEhMRU4pCi0jIGRlZmluZSBMVF9QQVRITUFYIE1BWFBBVEhMRU4KLSNlbHNlCi0jIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKLSNlbmRpZgotCi0jaWZuZGVmIERJUl9TRVBBUkFUT1IKLSMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCi0jIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX1dJTjMyKSB8fCBkZWZpbmVkIChfX01TRE9TX18pIHx8IGRlZmluZWQgKF9fREpHUFBfXykgfHwgXAotICBkZWZpbmVkIChfX09TMl9fKQotIyBkZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KLSMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgotIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCi0jIGVuZGlmCi0jIGlmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCi0jICBkZWZpbmUgUEFUSF9TRVBBUkFUT1JfMiAnOycKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIERJUl9TRVBBUkFUT1JfMgotIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gRElSX1NFUEFSQVRPUikKLSNlbHNlIC8qIERJUl9TRVBBUkFUT1JfMiAqLwotIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgXAotICAgICAgICAoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKLSNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KLQotI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCi0jIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCi0jZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCi0jIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKLSNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCi0KLSNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKLSNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAotICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAotfSB3aGlsZSAoMCkKLQotLyogLURERUJVRyBpcyBmYWlybHkgY29tbW9uIGluIENGTEFHUy4gICovCi0jdW5kZWYgREVCVUcKLSNpZiBkZWZpbmVkIERFQlVHV1JBUFBFUgotIyBkZWZpbmUgREVCVUcoZm9ybWF0LCAuLi4pIGZwcmludGYoc3RkZXJyLCBmb3JtYXQsIF9fVkFfQVJHU19fKQotI2Vsc2UKLSMgZGVmaW5lIERFQlVHKGZvcm1hdCwgLi4uKQotI2VuZGlmCi0KLWNvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9IE5VTEw7Ci0KLXZvaWQgKiB4bWFsbG9jIChzaXplX3QgbnVtKTsKLWNoYXIgKiB4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOwotY29uc3QgY2hhciAqIGJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7Ci1jaGFyICogZmluZF9leGVjdXRhYmxlKGNvbnN0IGNoYXIgKndyYXBwZXIpOwotaW50ICAgIGNoZWNrX2V4ZWN1dGFibGUoY29uc3QgY2hhciAqcGF0aCk7Ci1jaGFyICogc3RyZW5kemFwKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKLXZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgY2hhciAqKm5ld2FyZ3o7Ci0gIGludCBpOwotCi0gIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOwotICBERUJVRygiKG1haW4pIGFyZ3ZbMF0gICAgICA6ICVzXG4iLGFyZ3ZbMF0pOwotICBERUJVRygiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLHByb2dyYW1fbmFtZSk7Ci0gIG5ld2FyZ3ogPSBYTUFMTE9DKGNoYXIgKiwgYXJnYysyKTsKLUVPRgotCi0gICAgICAgICAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8RU9GCi0gIG5ld2FyZ3pbMF0gPSAoY2hhciAqKSB4c3RyZHVwKCIkU0hFTEwiKTsKLUVPRgotCi0gICAgICAgICAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8IkVPRiIKLSAgbmV3YXJnelsxXSA9IGZpbmRfZXhlY3V0YWJsZShhcmd2WzBdKTsKLSAgaWYgKG5ld2FyZ3pbMV0gPT0gTlVMTCkKLSAgICBsdF9mYXRhbCgiQ291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOwotICBERUJVRygiKG1haW4pIGZvdW5kIGV4ZSBhdCA6ICVzXG4iLG5ld2FyZ3pbMV0pOwotICAvKiB3ZSBrbm93IHRoZSBzY3JpcHQgaGFzIHRoZSBzYW1lIG5hbWUsIHdpdGhvdXQgdGhlIC5leGUgKi8KLSAgLyogc28gbWFrZSBzdXJlIG5ld2FyZ3pbMV0gZG9lc24ndCBlbmQgaW4gLmV4ZSAqLwotICBzdHJlbmR6YXAobmV3YXJnelsxXSwiLmV4ZSIpOwotICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQotICAgIG5ld2FyZ3pbaSsxXSA9IHhzdHJkdXAoYXJndltpXSk7Ci0gIG5ld2FyZ3pbYXJnYysxXSA9IE5VTEw7Ci0KLSAgZm9yIChpPTA7IGk8YXJnYysxOyBpKyspCi0gIHsKLSAgICBERUJVRygiKG1haW4pIG5ld2FyZ3pbJWRdICAgOiAlc1xuIixpLG5ld2FyZ3pbaV0pOwotICAgIDsKLSAgfQotCi1FT0YKLQotICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICAgICAgICBtaW5ndyopCi0gICAgICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PEVPRgotICBleGVjdigiJFNIRUxMIiwoY2hhciBjb25zdCAqKiluZXdhcmd6KTsKLUVPRgotICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDxFT0YKLSAgZXhlY3YoIiRTSEVMTCIsbmV3YXJneik7Ci1FT0YKLSAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgIGVzYWMKLQotICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PCJFT0YiCi0gIHJldHVybiAxMjc7Ci19Ci0KLXZvaWQgKgoteG1hbGxvYyAoc2l6ZV90IG51bSkKLXsKLSAgdm9pZCAqIHAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7Ci0gIGlmICghcCkKLSAgICBsdF9mYXRhbCAoIk1lbW9yeSBleGhhdXN0ZWQiKTsKLQotICByZXR1cm4gcDsKLX0KLQotY2hhciAqCi14c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCi17Ci0gIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLCBzdHJpbmcpIDogTlVMTAotOwotfQotCi1jb25zdCBjaGFyICoKLWJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgY29uc3QgY2hhciAqYmFzZTsKLQotI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQotICAvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCi0gIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhciluYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKLSAgICBuYW1lICs9IDI7Ci0jZW5kaWYKLQotICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQotICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCi0gICAgICBiYXNlID0gbmFtZSArIDE7Ci0gIHJldHVybiBiYXNlOwotfQotCi1pbnQKLWNoZWNrX2V4ZWN1dGFibGUoY29uc3QgY2hhciAqIHBhdGgpCi17Ci0gIHN0cnVjdCBzdGF0IHN0OwotCi0gIERFQlVHKCIoY2hlY2tfZXhlY3V0YWJsZSkgIDogJXNcbiIsIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIik7Ci0gIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQotICAgIHJldHVybiAwOwotCi0gIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKSAmJgotICAgICAgKAotICAgICAgICAvKiBNaW5HVyAmIG5hdGl2ZSBXSU4zMiBkbyBub3Qgc3VwcG9ydCBTX0lYT1RIIG9yIFNfSVhHUlAgKi8KLSNpZiBkZWZpbmVkIChTX0lYT1RIKQotICAgICAgICgoc3Quc3RfbW9kZSAmIFNfSVhPVEgpID09IFNfSVhPVEgpIHx8Ci0jZW5kaWYKLSNpZiBkZWZpbmVkIChTX0lYR1JQKQotICAgICAgICgoc3Quc3RfbW9kZSAmIFNfSVhHUlApID09IFNfSVhHUlApIHx8Ci0jZW5kaWYKLSAgICAgICAoKHN0LnN0X21vZGUgJiBTX0lYVVNSKSA9PSBTX0lYVVNSKSkKLSAgICAgICkKLSAgICByZXR1cm4gMTsKLSAgZWxzZQotICAgIHJldHVybiAwOwotfQotCi0vKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKLSAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UgKi8KLWNoYXIgKgotZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyKiB3cmFwcGVyKQotewotICBpbnQgaGFzX3NsYXNoID0gMDsKLSAgY29uc3QgY2hhciogcDsKLSAgY29uc3QgY2hhciogcF9uZXh0OwotICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KLSAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOwotICBpbnQgdG1wX2xlbjsKLSAgY2hhciogY29uY2F0X25hbWU7Ci0KLSAgREVCVUcoIihmaW5kX2V4ZWN1dGFibGUpICA6ICVzXG4iLCB3cmFwcGVyID8gKCp3cmFwcGVyID8gd3JhcHBlciA6ICJFTVBUWSEiKSA6ICJOVUxMISIpOwotCi0gIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogQWJzb2x1dGUgcGF0aD8gKi8KLSNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKLSAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKXdyYXBwZXJbMF0pICYmIHdyYXBwZXJbMV0gPT0gJzonKQotICB7Ci0gICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKLSAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZShjb25jYXRfbmFtZSkpCi0gICAgICByZXR1cm4gY29uY2F0X25hbWU7Ci0gICAgWEZSRUUoY29uY2F0X25hbWUpOwotICB9Ci0gIGVsc2UKLSAgewotI2VuZGlmCi0gICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQotICAgIHsKLSAgICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7Ci0gICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZShjb25jYXRfbmFtZSkpCi0gICAgICAgIHJldHVybiBjb25jYXRfbmFtZTsKLSAgICAgIFhGUkVFKGNvbmNhdF9uYW1lKTsKLSAgICB9Ci0jaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCi0gIH0KLSNlbmRpZgotCi0gIGZvciAocCA9IHdyYXBwZXI7ICpwOyBwKyspCi0gICAgaWYgKCpwID09ICcvJykKLSAgICB7Ci0gICAgICBoYXNfc2xhc2ggPSAxOwotICAgICAgYnJlYWs7Ci0gICAgfQotICBpZiAoIWhhc19zbGFzaCkKLSAgewotICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCi0gICAgY29uc3QgY2hhciogcGF0aCA9IGdldGVudiAoIlBBVEgiKTsKLSAgICBpZiAocGF0aCAhPSBOVUxMKQotICAgIHsKLSAgICAgIGZvciAocCA9IHBhdGg7ICpwOyBwID0gcF9uZXh0KQotICAgICAgewotICAgICAgICBjb25zdCBjaGFyKiBxOwotICAgICAgICBzaXplX3QgcF9sZW47Ci0gICAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCi0gICAgICAgICAgaWYgKElTX1BBVEhfU0VQQVJBVE9SKCpxKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwX2xlbiA9IHEgLSBwOwotICAgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7Ci0gICAgICAgIGlmIChwX2xlbiA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KLSAgICAgICAgICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCi0gICAgICAgICAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKLSAgICAgICAgICB0bXBfbGVuID0gc3RybGVuKHRtcCk7Ci0gICAgICAgICAgY29uY2F0X25hbWUgPSBYTUFMTE9DKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuKHdyYXBwZXIpICsgMSk7Ci0gICAgICAgICAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKLSAgICAgICAgICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKLSAgICAgICAgICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGNvbmNhdF9uYW1lID0gWE1BTExPQyhjaGFyLCBwX2xlbiArIDEgKyBzdHJsZW4od3JhcHBlcikgKyAxKTsKLSAgICAgICAgICBtZW1jcHkgKGNvbmNhdF9uYW1lLCBwLCBwX2xlbik7Ci0gICAgICAgICAgY29uY2F0X25hbWVbcF9sZW5dID0gJy8nOwotICAgICAgICAgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjaGVja19leGVjdXRhYmxlKGNvbmNhdF9uYW1lKSkKLSAgICAgICAgICByZXR1cm4gY29uY2F0X25hbWU7Ci0gICAgICAgIFhGUkVFKGNvbmNhdF9uYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLyogbm90IGZvdW5kIGluIFBBVEg7IGFzc3VtZSBjdXJkaXIgKi8KLSAgfQotICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCi0gIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKLSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKLSAgdG1wX2xlbiA9IHN0cmxlbih0bXApOwotICBjb25jYXRfbmFtZSA9IFhNQUxMT0MoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4od3JhcHBlcikgKyAxKTsKLSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKLSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7Ci0gIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7Ci0KLSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQotICAgIHJldHVybiBjb25jYXRfbmFtZTsKLSAgWEZSRUUoY29uY2F0X25hbWUpOwotICByZXR1cm4gTlVMTDsKLX0KLQotY2hhciAqCi1zdHJlbmR6YXAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCi17Ci0gIHNpemVfdCBsZW4sIHBhdGxlbjsKLQotICBhc3NlcnQoc3RyICE9IE5VTEwpOwotICBhc3NlcnQocGF0ICE9IE5VTEwpOwotCi0gIGxlbiA9IHN0cmxlbihzdHIpOwotICBwYXRsZW4gPSBzdHJsZW4ocGF0KTsKLQotICBpZiAocGF0bGVuIDw9IGxlbikKLSAgewotICAgIHN0ciArPSBsZW4gLSBwYXRsZW47Ci0gICAgaWYgKHN0cmNtcChzdHIsIHBhdCkgPT0gMCkKLSAgICAgICpzdHIgPSAnXDAnOwotICB9Ci0gIHJldHVybiBzdHI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKiBtb2RlLAotICAgICAgICAgIGNvbnN0IGNoYXIgKiBtZXNzYWdlLCB2YV9saXN0IGFwKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlczogJXM6ICIsIHByb2dyYW1fbmFtZSwgbW9kZSk7Ci0gIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7Ci0KLSAgaWYgKGV4aXRfc3RhdHVzID49IDApCi0gICAgZXhpdCAoZXhpdF9zdGF0dXMpOwotfQotCi12b2lkCi1sdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQotewotICB2YV9saXN0IGFwOwotICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOwotICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKLSAgdmFfZW5kIChhcCk7Ci19Ci1FT0YKLSAgICAgICAgICAjIHdlIHNob3VsZCByZWFsbHkgdXNlIGEgYnVpbGQtcGxhdGZvcm0gc3BlY2lmaWMgY29tcGlsZXIKLSAgICAgICAgICAjIGhlcmUsIGJ1dCBPVE9ILCB0aGUgd3JhcHBlcnMgKHNoZWxsIHNjcmlwdCBhbmQgdGhpcyBDIG9uZSkKLSAgICAgICAgICAjIGFyZSBvbmx5IHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBleGVjdXRlIHRoZSAicmVhbCIgYmluYXJ5LgotICAgICAgICAgICMgU2luY2UgdGhlICJyZWFsIiBiaW5hcnkgaXMgYnVpbHQgZm9yICRob3N0LCB0aGVuIHRoaXMKLSAgICAgICAgICAjIHdyYXBwZXIgbWlnaHQgYXMgd2VsbCBiZSBidWlsdCBmb3IgJGhvc3QsIHRvby4KLSAgICAgICAgICAkcnVuICRMVENDICRMVENGTEFHUyAtcyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICAkcm0gJG91dHB1dAotICAgICAgICB0cmFwICIkcm0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKLQotCSRlY2hvID4gJG91dHB1dCAiXAotIyEgJFNIRUxMCi0KLSMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQotIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gLSBHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QCi0jCi0jIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAotIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCi0jCi0jIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgotIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKLSMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1Yc2VkPScke1NFRH0gLWUgMXMvXlgvLycKLXNlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKLQotIyBCZSBCb3VybmUgY29tcGF0aWJsZSAodGFrZW4gZnJvbSBBdXRvY29uZjpfQVNfQk9VUk5FX0NPTVBBVElCTEUpLgotaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGVtdWxhdGUgc2gKLSAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYwotZmkKLUJJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0Ci1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLXJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKLQotIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgotaWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCi0gICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6Ci0gIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKLWVsc2UKLSAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJGVjaG8gYXJlIGFscmVhZHkgc2V0LgotICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCi0gICAgZWNobz1cIiRxZWNob1wiCi0gICAgZmlsZT1cIlwkMFwiCi0gICAgIyBNYWtlIHN1cmUgZWNobyB3b3Jrcy4KLSAgICBpZiB0ZXN0IFwiWFwkMVwiID0gWC0tbm8tcmVleGVjOyB0aGVuCi0gICAgICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KLSAgICAgIHNoaWZ0Ci0gICAgZWxpZiB0ZXN0IFwiWFxgKFwkZWNobyAnXHQnKSAyPi9kZXYvbnVsbFxgXCIgPSAnWFx0JzsgdGhlbgotICAgICAgIyBZaXBwZWUsIFwkZWNobyB3b3JrcyEKLSAgICAgIDoKLSAgICBlbHNlCi0gICAgICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlIFwkZWNobyB3aWxsIHdvcmsuCi0gICAgICBleGVjICRTSEVMTCBcIlwkMFwiIC0tbm8tcmVleGVjIFwkezErXCJcJEBcIn0KLSAgICBmaQotICBmaVwKLSIKLQkkZWNobyA+PiAkb3V0cHV0ICJcCi0KLSAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KLSAgdGhpc2Rpcj1cYFwkZWNobyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSokJSUnXGAKLSAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgotCi0gICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgotICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKLSAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbwotICAgIGRlc3RkaXI9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qXCQlJSdcYAotCi0gICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgotICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KLSAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgotICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7Ci0gICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLQotICAgIGZpbGU9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlXi4qLyUlJ1xgCi0gICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAotICBkb25lCi0KLSAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KLSAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAotICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgotIgotCi0JaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KLQkgICRlY2hvID4+ICRvdXRwdXQgIlwKLSAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAotICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgotCi0gIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fCBcXAotICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCi0gICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KLQotICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCi0KLSAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgotICAgICAgJG1rZGlyIFwiXCRwcm9nZGlyXCIKLSAgICBlbHNlCi0gICAgICAkcm0gXCJcJHByb2dkaXIvXCRmaWxlXCIKLSAgICBmaSIKLQotCSAgJGVjaG8gPj4gJG91dHB1dCAiXAotCi0gICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKLSAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCi0gICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKLSAgICAgIGVsc2UKLQkkZWNobyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCi0JJHJtIFwiXCRwcm9nZGlyL1wkZmlsZVwiCi0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAkbXYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKLSAgICB7ICRybSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKLSAgICAgICRtdiBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQotICAgICRybSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgotICBmaSIKLQllbHNlCi0JICAkZWNobyA+PiAkb3V0cHV0ICJcCi0gIHByb2dyYW09JyRvdXRwdXRuYW1lJwotICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgotIgotCWZpCi0KLQkkZWNobyA+PiAkb3V0cHV0ICJcCi0KLSAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKLQotCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgotCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KLQkgICRlY2hvID4+ICRvdXRwdXQgIlwKLSAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgotICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKLQotICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgotICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCi0gICAgJHNobGlicGF0aF92YXI9XGBcJGVjaG8gXCJYXCQkc2hsaWJwYXRoX3ZhclwiIHwgXCRYc2VkIC1lICdzLzo6KlwkLy8nXGAKLQotICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgotIgotCWZpCi0KLQkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgotCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgotCSAgJGVjaG8gPj4gJG91dHB1dCAiXAotICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICi0gICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKLSIKLQlmaQotCi0JJGVjaG8gPj4gJG91dHB1dCAiXAotICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KLSAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCi0iCi0JY2FzZSAkaG9zdCBpbgotCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cwotCSotKi1taW5ndyB8ICotKi1vczIqKQotCSAgJGVjaG8gPj4gJG91dHB1dCAiXAotICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9Ci0iCisJICAgICMgTm93LCBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0IGZvciBmdW5jX3NvdXJjZSB1c2U6CisJICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgJGN3cmFwcGVyCisJICAgICRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgdHJhcCAiJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAjIG5vdGU6IHRoaXMgc2NyaXB0IHdpbGwgbm90IGJlIGV4ZWN1dGVkLCBzbyBkbyBub3QgY2htb2QuCisJICAgICAgaWYgdGVzdCAieCRidWlsZCIgPSAieCRob3N0IiA7IHRoZW4KKwkJJGN3cmFwcGVyIC0tbHQtZHVtcC1zY3JpcHQgPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBlbHNlCisJCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZmkKKwkgICAgfQogCSAgOzsKKwkgICogKQorCSAgICAkUk0gJG91dHB1dAorCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKIAotCSopCi0JICAkZWNobyA+PiAkb3V0cHV0ICJcCi0gICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KLSIKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkb3V0cHV0CisJICAgIGNobW9kICt4ICRvdXRwdXQKIAkgIDs7CiAJZXNhYwotCSRlY2hvID4+ICRvdXRwdXQgIlwKLSAgICAgIFwkZWNobyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQotICBlbHNlCi0gICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgotICAgIFwkZWNobyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKLSAgICBcJGVjaG8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKLSAgICAkZWNobyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCi0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gIGZpCi1maVwKLSIKLQljaG1vZCAreCAkb3V0cHV0Ci0gICAgICBmaQorICAgICAgfQogICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCiAgICAgICA7OwogICAgIGVzYWMKQEAgLTU1MDYsNyArOTA3MCw3IEBACiAgICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KIAogICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBjb252ZW5pZW5jZTsgdGhlbgotCW9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKIAlhZGRsaWJzPSIkY29udmVuaWVuY2UiCiAJYnVpbGRfbGlidG9vbF9saWJzPW5vCiAgICAgICBlbHNlCkBAIC01NTE1LDIyICs5MDc5LDM1IEBACiAJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KIAllbHNlCiAJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgorCSAgZmkKIAlmaQogCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCiAgICAgICBmaQogCiAgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KIAlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgotCWdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCWZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAKIAlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicwotCW9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKICAgICAgIGZpCiAKICAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgogICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCi0gICAgICAgY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworCWNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKICAgICAgIGVsc2UKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKwogCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQogCSMgdG8gYXZvaWQgY3JlYXRpbmcgYXJjaGl2ZXMgd2l0aCBkdXBsaWNhdGUgYmFzZW5hbWVzIGlmIHdlCiAJIyBtaWdodCBoYXZlIHRvIGV4dHJhY3QgdGhlbSBhZnRlcndhcmRzLCBlLmcuLCB3aGVuIGNyZWF0aW5nIGEKQEAgLTU1MzksMzIgKzkxMTYsMjIgQEAKIAkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCiAJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKIAkgICAgZG8KLQkgICAgICAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJworCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKIAkgICAgZG9uZSB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCiAJICA6CiAJZWxzZQotCSAgJGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKLQotCSAgaWYgdGVzdCAteiAiJGdlbnRvcCI7IHRoZW4KLQkgICAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKLQkgICAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCi0KLQkgICAgJHNob3cgIiR7cm19ciAkZ2VudG9wIgotCSAgICAkcnVuICR7cm19ciAiJGdlbnRvcCIKLQkgICAgJHNob3cgIiRta2RpciAkZ2VudG9wIgotCSAgICAkcnVuICRta2RpciAiJGdlbnRvcCIKLQkgICAgZXhpdF9zdGF0dXM9JD8KLQkgICAgaWYgdGVzdCAiJGV4aXRfc3RhdHVzIiAtbmUgMCAmJiB0ZXN0ICEgLWQgIiRnZW50b3AiOyB0aGVuCi0JICAgICAgZXhpdCAkZXhpdF9zdGF0dXMKLQkgICAgZmkKLQkgIGZpCi0KKwkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgogCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCiAJICBvbGRvYmpzPQogCSAgY291bnRlcj0xCiAJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKIAkgIGRvCi0JICAgIG9iamJhc2U9YCRlY2hvICJYJG9iaiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICBvYmpiYXNlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCiAJICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCiAJICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7CiAJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKQEAgLTU1NzIsNTggKzkxMzksNzIgQEAKIAkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KIAkJIyBvdmVybGFwcy4KIAkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKLQkJY291bnRlcj1gZXhwciAkY291bnRlciArIDFgCisJCWZ1bmNfYXJpdGggJGNvdW50ZXIgKyAxCisJCWNvdW50ZXI9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJCWNhc2UgIiAkb2xkb2JqcyAiIGluCiAJCSpbXCAvXSIkbmV3b2JqICIqKSA7OwogCQkqKSBpZiB0ZXN0ICEgLWYgIiRnZW50b3AvJG5ld29iaiI7IHRoZW4gYnJlYWs7IGZpIDs7CiAJCWVzYWMKIAkgICAgICBkb25lCi0JICAgICAgJHNob3cgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgotCSAgICAgICRydW4gbG4gIiRvYmoiICIkZ2VudG9wLyRuZXdvYmoiIHx8Ci0JICAgICAgJHJ1biBjcCAiJG9iaiIgIiRnZW50b3AvJG5ld29iaiIKLQkgICAgICBvbGRvYmpzPSIkb2xkb2JqcyAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCiAJICAgICAgOzsKLQkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRvYmoiIDs7CiAJICAgIGVzYWMKIAkgIGRvbmUKIAlmaQotCiAJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgogCi0JaWYgbGVuPWBleHByICJYJGNtZHMiIDogIi4qImAgJiYKLQkgICAgIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCWZ1bmNfbGVuICIgJGNtZHMiCisJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbGlmIHRlc3QgLW4gIiRhcmNoaXZlcl9saXN0X3NwZWMiOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIGNvbW1hbmQgZmlsZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBmb3Igb2JqIGluICRvbGRvYmpzCisJICBkbworCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJICBkb25lID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kIgorCSAgb2xkb2Jqcz0iICRhcmNoaXZlcl9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgogCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcwogCWVsc2UKIAkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCi0JICAkZWNobyAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKIAkgIHNhdmVfUkFOTElCPSRSQU5MSUIKIAkgIFJBTkxJQj06CiAJICBvYmpsaXN0PQogCSAgY29uY2F0X2NtZHM9CiAJICBzYXZlX29sZG9ianM9JG9sZG9ianMKLQorCSAgb2xkb2Jqcz0KIAkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PwogCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCiAJICBkbwogCSAgICBsYXN0X29sZG9iaj0kb2JqCiAJICBkb25lCisJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgbGVuPSRsZW4wCiAJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKIAkgIGRvCi0JICAgIG9sZG9ianM9IiRvYmpsaXN0ICRvYmoiCi0JICAgIG9iamxpc3Q9IiRvYmpsaXN0ICRvYmoiCi0JICAgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgotCSAgICBpZiBsZW49YGV4cHIgIlgkdGVzdF9jbWRzIiA6ICIuKiIgMj4vZGV2L251bGxgICYmCi0JICAgICAgIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIjsgdGhlbgorCSAgICBmdW5jX2xlbiAiICRvYmoiCisJICAgIGZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkgICAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCiAJICAgICAgOgogCSAgICBlbHNlCiAJICAgICAgIyB0aGUgYWJvdmUgY29tbWFuZCBzaG91bGQgYmUgdXNlZCBiZWZvcmUgaXQgZ2V0cyB0b28gbG9uZwogCSAgICAgIG9sZG9ianM9JG9iamxpc3QKIAkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiIDsgdGhlbgotCSAgICAgICAgUkFOTElCPSRzYXZlX1JBTkxJQgorCQlSQU5MSUI9JHNhdmVfUkFOTElCCiAJICAgICAgZmkKIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KIAkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIgogCSAgICAgIG9iamxpc3Q9CisJICAgICAgbGVuPSRsZW4wCiAJICAgIGZpCiAJICBkb25lCiAJICBSQU5MSUI9JHNhdmVfUkFOTElCCkBAIC01NjM1LDQ5ICs5MjE2LDM5IEBACiAJICBmaQogCWZpCiAgICAgICBmaQotICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0gICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotICAgICAgICBldmFsIGNtZD1cIiRjbWRcIgotCUlGUz0iJHNhdmVfaWZzIgotCSRzaG93ICIkY21kIgotCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotICAgICAgZG9uZQotICAgICAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdleGl0ICQ/JwogICAgIGRvbmUKIAotICAgIGlmIHRlc3QgLW4gIiRnZW5lcmF0ZWQiOyB0aGVuCi0gICAgICAkc2hvdyAiJHtybX1yJGdlbmVyYXRlZCIKLSAgICAgICRydW4gJHtybX1yJGdlbmVyYXRlZAotICAgIGZpCisgICAgdGVzdCAtbiAiJGdlbmVyYXRlZCIgJiYgXAorICAgICAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciRnZW5lcmF0ZWQiCiAKICAgICAjIE5vdyBjcmVhdGUgdGhlIGxpYnRvb2wgYXJjaGl2ZS4KICAgICBjYXNlICRvdXRwdXQgaW4KICAgICAqLmxhKQogICAgICAgb2xkX2xpYnJhcnk9CiAgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIG9sZF9saWJyYXJ5PSIkbGlibmFtZS4kbGliZXh0IgotICAgICAgJHNob3cgImNyZWF0aW5nICRvdXRwdXQiCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCiAKICAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKICAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbwogCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCi0JICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCiAJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCiAJICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCiAJZWxzZQotCSAgdmFyX3ZhbHVlPWAkZWNobyAiWCR2YXJfdmFsdWUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9XCIkdmFyX3ZhbHVlXCI7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgogCWZpCiAgICAgICBkb25lCiAgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgogICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgotICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJHJlbGlua19jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0IiB8ICROTDJTUGAKKyAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAogICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCiAJcmVsaW5rX2NvbW1hbmQ9CiAgICAgICBmaQogCi0KICAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgotICAgICAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CiAJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCiAJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgogCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCkBAIC01Njg5LDM4ICs5MjYwLDU5IEBACiAJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KIAkgICAgICBjYXNlICRkZXBsaWIgaW4KIAkgICAgICAqLmxhKQotCQluYW1lPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgogCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAotCQlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCi0JCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JCWZpCi0JCW5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkbGliZGlyLyRuYW1lIgorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgogCQk7OwotCSAgICAgICopIG5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkZGVwbGliIiA7OworCSAgICAgIC1MKikKKwkJZnVuY19zdHJpcG5hbWUgLUwgJycgIiRkZXBsaWIiCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJCTs7CisJICAgICAgLVIqKQorCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAkZGVwbGliIiA7OwogCSAgICAgIGVzYWMKIAkgICAgZG9uZQogCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCiAJICAgIG5ld2RsZmlsZXM9CisKIAkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KLQkgICAgICBuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQkgICAgICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAotCSAgICAgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JCSRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCi0JCWV4aXQgJEVYSVRfRkFJTFVSRQotCSAgICAgIGZpCi0JICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKwkgICAgICBlc2FjCiAJICAgIGRvbmUKIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCiAJICAgIG5ld2RscHJlZmlsZXM9CiAJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCi0JICAgICAgbmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0JICAgICAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKLQkgICAgICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCQkkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotCQlleGl0ICRFWElUX0ZBSUxVUkUKLQkgICAgICBmaQotCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCisJCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCisJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworCQkjIHRoZSBsaWJyYXJ5OgorCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIGVzYWMKIAkgICAgZG9uZQogCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKIAkgIGVsc2UKQEAgLTU3MzAsNyArOTMyMiw3IEBACiAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OwogCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CiAJICAgICAgZXNhYwotCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRhYnMiCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRhYnMiCiAJICAgIGRvbmUKIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCiAJICAgIG5ld2RscHJlZmlsZXM9CkBAIC01NzM5LDE5ICs5MzMxLDM3IEBACiAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OwogCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CiAJICAgICAgZXNhYwotCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCiAJICAgIGRvbmUKIAkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCiAJICBmaQotCSAgJHJtICRvdXRwdXQKKwkgICRSTSAkb3V0cHV0CiAJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KKwkgICMgSW4gZmFjdCwgaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB1c2UgdGhpcyBjb2RlIGZvciBhbGwgdGFyZ2V0CisJICAjIHN5c3RlbXMgdGhhdCBjYW4ndCBoYXJkLWNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHRoZWlyIGV4ZWN1dGFibGVzCisJICAjIGFuZCB0aGF0IGhhdmUgbm8gc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZSBpbmRlcGVuZGVudCBvZiBQQVRILAorCSAgIyBidXQgaXQgdHVybnMgb3V0IHdlIGNhbid0IGVhc2lseSBkZXRlcm1pbmUgdGhhdCBmcm9tIGluc3BlY3RpbmcKKwkgICMgbGlidG9vbCB2YXJpYWJsZXMsIHNvIHdlIGhhdmUgdG8gaGFyZC1jb2RlIHRoZSBPU3MgdG8gd2hpY2ggaXQKKwkgICMgYXBwbGllcyBoZXJlOyBhdCB0aGUgbW9tZW50LCB0aGF0IG1lYW5zIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGUgUEUKKwkgICMgb2JqZWN0IGZvcm1hdCB3aXRoIERMTCBmaWxlcy4gIFNlZSB0aGUgbG9uZyBjb21tZW50IGF0IHRoZSB0b3Agb2YKKwkgICMgdGVzdHMvYmluZGlyLmF0IGZvciBmdWxsIGRldGFpbHMuCiAJICB0ZGxuYW1lPSRkbG5hbWUKIAkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgotCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwpIHRkbG5hbWU9Li4vYmluLyRkbG5hbWUgOzsKKwkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkKKwkgICAgICAjIElmIGEgLWJpbmRpciBhcmd1bWVudCB3YXMgc3VwcGxpZWQsIHBsYWNlIHRoZSBkbGwgdGhlcmUuCisJICAgICAgaWYgdGVzdCAieCRiaW5kaXIiICE9IHggOworCSAgICAgIHRoZW4KKwkJZnVuY19yZWxhdGl2ZV9wYXRoICIkaW5zdGFsbF9saWJkaXIiICIkYmluZGlyIgorCQl0ZGxuYW1lPSRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0JGRsbmFtZQorCSAgICAgIGVsc2UKKwkJIyBPdGhlcndpc2UgZmFsbCBiYWNrIG9uIGhldXJpc3RpYy4KKwkJdGRsbmFtZT0uLi9iaW4vJGRsbmFtZQorCSAgICAgIGZpCisJICAgICAgOzsKIAkgIGVzYWMKLQkgICRlY2hvID4gJG91dHB1dCAiXAorCSAgJEVDSE8gPiAkb3V0cHV0ICJcCiAjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQotIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gLSBHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KICMKICMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQogIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCkBAIC01NzY1LDkgKzkzNzUsMTUgQEAKICMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgogb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKIAorIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW4gbm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKwogIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCiBkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCiAKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKwogIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KIGN1cnJlbnQ9JGN1cnJlbnQKIGFnZT0kYWdlCkBAIC01Nzg2LDc0OCArOTQwMiwyOSBAQAogIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgogbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgogCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0geWVzOyB0aGVuCi0JICAgICRlY2hvID4+ICRvdXRwdXQgIlwKKwkgICAgJEVDSE8gPj4gJG91dHB1dCAiXAogcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKIAkgIGZpCiAJZG9uZQotICAgICAgZmkKKyAgICAgIH0KIAogICAgICAgIyBEbyBhIHN5bWJvbGljIGxpbmsgc28gdGhhdCB0aGUgbGlidG9vbCBhcmNoaXZlIGNhbiBiZSBmb3VuZCBpbgogICAgICAgIyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZC4KLSAgICAgICRzaG93ICIoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICRvdXRwdXRuYW1lICYmICRMTl9TIC4uLyRvdXRwdXRuYW1lICRvdXRwdXRuYW1lKSIKLSAgICAgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkb3V0cHV0bmFtZSAmJiAkTE5fUyAuLi8kb3V0cHV0bmFtZSAkb3V0cHV0bmFtZSknIHx8IGV4aXQgJD8KKyAgICAgIGZ1bmNfc2hvd19ldmFsICcoIGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkb3V0cHV0bmFtZSIgJiYgJExOX1MgIi4uLyRvdXRwdXRuYW1lIiAiJG91dHB1dG5hbWUiICknICdleGl0ICQ/JwogICAgICAgOzsKICAgICBlc2FjCiAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgOzsKK30KIAotICAjIGxpYnRvb2wgaW5zdGFsbCBtb2RlCi0gIGluc3RhbGwpCi0gICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogaW5zdGFsbCIKK3sgdGVzdCAiJG9wdF9tb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgfSAmJgorICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQogCi0gICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgotICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgotICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCIgfHwgdGVzdCAiJG5vbm9wdCIgPSAvYmluL3NoIHx8Ci0gICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCi0gICAgICAgJGVjaG8gIlgkbm9ub3B0IiB8IGdyZXAgc2h0b29sID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCi0gICAgICBhcmc9YCRlY2hvICJYJG5vbm9wdCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBjYXNlICRhcmcgaW4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCWFyZz0iXCIkYXJnXCIiCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIGluc3RhbGxfcHJvZz0iJGFyZyAiCi0gICAgICBhcmc9IiQxIgotICAgICAgc2hpZnQKLSAgICBlbHNlCi0gICAgICBpbnN0YWxsX3Byb2c9Ci0gICAgICBhcmc9JG5vbm9wdAotICAgIGZpCiAKLSAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCi0gICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgotICAgIGFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICBjYXNlICRhcmcgaW4KLSAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLSAgICAgIGFyZz0iXCIkYXJnXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2ckYXJnIgotCi0gICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgotICAgIGRlc3Q9Ci0gICAgZmlsZXM9Ci0gICAgb3B0cz0KLSAgICBwcmV2PQotICAgIGluc3RhbGxfdHlwZT0KLSAgICBpc2Rpcj1ubwotICAgIHN0cmlwbWU9Ci0gICAgZm9yIGFyZwotICAgIGRvCi0gICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KLQlmaWxlcz0iJGZpbGVzICRkZXN0IgotCWRlc3Q9JGFyZwotCWNvbnRpbnVlCi0gICAgICBmaQotCi0gICAgICBjYXNlICRhcmcgaW4KLSAgICAgIC1kKSBpc2Rpcj15ZXMgOzsKLSAgICAgIC1mKSAKLSAgICAgIAljYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCi0JKltcXFwgL11jcFwgKikgOzsKLQkqKSBwcmV2PSRhcmcgOzsKLQllc2FjCi0JOzsKLSAgICAgIC1nIHwgLW0gfCAtbykgcHJldj0kYXJnIDs7Ci0gICAgICAtcykKLQlzdHJpcG1lPSIgLXMiCi0JY29udGludWUKLQk7OwotICAgICAgLSopCi0JOzsKLSAgICAgICopCi0JIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgotCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotCSAgcHJldj0KLQllbHNlCi0JICBkZXN0PSRhcmcKLQkgIGNvbnRpbnVlCi0JZmkKLQk7OwotICAgICAgZXNhYwotCi0gICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgotICAgICAgYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQlhcmc9IlwiJGFyZ1wiIgotCTs7Ci0gICAgICBlc2FjCi0gICAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2cgJGFyZyIKLSAgICBkb25lCi0KLSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIjsgdGhlbgotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iIDE+JjIKLSAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogdGhlIFxgJHByZXYnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIgMT4mMgotICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQotCi0gICAgaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgotICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogbm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiIDE+JjIKLSAgICAgIGVsc2UKLQkkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iIDE+JjIKLSAgICAgIGZpCi0gICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCi0KLSAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KLSAgICBkZXN0PWAkZWNobyAiWCRkZXN0IiB8ICRYc2VkIC1lICdzJS8kJSUnYAotCi0gICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCi0gICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPXllcwotICAgIGlmIHRlc3QgIiRpc2RpciIgPSB5ZXM7IHRoZW4KLSAgICAgIGRlc3RkaXI9IiRkZXN0IgotICAgICAgZGVzdG5hbWU9Ci0gICAgZWxzZQotICAgICAgZGVzdGRpcj1gJGVjaG8gIlgkZGVzdCIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotICAgICAgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGRlc3QiICYmIGRlc3RkaXI9LgotICAgICAgZGVzdG5hbWU9YCRlY2hvICJYJGRlc3QiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQotICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgotICAgICAgc2V0IGR1bW15ICRmaWxlcwotICAgICAgaWYgdGVzdCAiJCMiIC1ndCAyOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogXGAkZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IiAxPiYyCi0JJGVjaG8gIiRoZWxwIiAxPiYyCi0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQotICAgIGZpCi0gICAgY2FzZSAkZGVzdGRpciBpbgotICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKLSAgICAqKQotICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwotCWNhc2UgJGZpbGUgaW4KLQkqLmxvKSA7OwotCSopCi0JICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIiAxPiYyCi0JICAkZWNobyAiJGhlbHAiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgotICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgotICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgotCi0gICAgc3RhdGljbGlicz0KLSAgICBmdXR1cmVfbGliZGlycz0KLSAgICBjdXJyZW50X2xpYmRpcnM9Ci0gICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwotCi0gICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgotICAgICAgY2FzZSAkZmlsZSBpbgotICAgICAgKi4kbGliZXh0KQotCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCi0Jc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGZpbGUiCi0JOzsKLQotICAgICAgKi5sYSkKLQkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotCWlmICgke1NFRH0gLWUgJzJxJyAkZmlsZSB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLQllbHNlCi0JICAkZWNobyAiJG1vZGVuYW1lOiBcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKLQkgICRlY2hvICIkaGVscCIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JZmkKLQotCWxpYnJhcnlfbmFtZXM9Ci0Jb2xkX2xpYnJhcnk9Ci0JcmVsaW5rX2NvbW1hbmQ9Ci0JIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JY2FzZSAkZmlsZSBpbgotCSovKiB8ICpcXCopIC4gJGZpbGUgOzsKLQkqKSAuIC4vJGZpbGUgOzsKLQllc2FjCi0KLQkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCi0JaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KLQkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgotCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGN1cnJlbnRfbGliZGlycz0iJGN1cnJlbnRfbGliZGlycyAkbGliZGlyIiA7OwotCSAgZXNhYwotCWVsc2UKLQkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KLQkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCi0JICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OwotCSAgZXNhYwotCWZpCi0KLQlkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AvCi0JdGVzdCAiWCRkaXIiID0gIlgkZmlsZS8iICYmIGRpcj0KLQlkaXI9IiRkaXIkb2JqZGlyIgotCi0JaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgotCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KLQkgIGluc3RfcHJlZml4X2Rpcj1gJGVjaG8gIiRkZXN0ZGlyIiB8ICRTRUQgInMlJGxpYmRpclwkJSUiYAotCi0JICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCi0JICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0Ci0JICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgotCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKLQkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKLQkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgotCSAgaWYgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiBjYW5ub3QgaW5zdGFsbCBcYCRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICBmaQotCi0JICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgotCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCi0JICAgIHJlbGlua19jb21tYW5kPWAkZWNobyAiJHJlbGlua19jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSIgfCAkTkwyU1BgCi0JICBlbHNlCi0JICAgIHJlbGlua19jb21tYW5kPWAkZWNobyAiJHJlbGlua19jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlJSIgfCAkTkwyU1BgCi0JICBmaQotCi0JICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiByZWxpbmtpbmcgXGAkZmlsZSciIDE+JjIKLQkgICRzaG93ICIkcmVsaW5rX2NvbW1hbmQiCi0JICBpZiAkcnVuIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgotCSAgZWxzZQotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICBmaQotCWZpCi0KLQkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgotCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcwotCWlmIHRlc3QgLW4gIiQyIjsgdGhlbgotCSAgcmVhbG5hbWU9IiQyIgotCSAgc2hpZnQKLQkgIHNoaWZ0Ci0KLQkgIHNyY25hbWU9IiRyZWFsbmFtZSIKLQkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKLQotCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgotCSAgJHNob3cgIiRpbnN0YWxsX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiCi0JICAkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIHx8IGV4aXQgJD8KLQkgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkc3RyaXBsaWIiOyB0aGVuCi0JICAgICRzaG93ICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIgotCSAgICAkcnVuIGV2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiIHx8IGV4aXQgJD8KLQkgIGZpCi0KLQkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgotCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgotCSAgICAjIFRyeSBgbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgYGxuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCi0JICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAotCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCi0JICAgIGZvciBsaW5rbmFtZQotCSAgICBkbwotCSAgICAgIGlmIHRlc3QgIiRsaW5rbmFtZSIgIT0gIiRyZWFsbmFtZSI7IHRoZW4KLSAgICAgICAgICAgICAgICAkc2hvdyAiKGNkICRkZXN0ZGlyICYmIHsgJExOX1MgLWYgJHJlYWxuYW1lICRsaW5rbmFtZSB8fCB7ICRybSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZTsgfTsgfSkiCi0gICAgICAgICAgICAgICAgJHJ1biBldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJHJtICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKLQkgICAgICBmaQotCSAgICBkb25lCi0JICBmaQotCi0JICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCi0JICBsaWI9IiRkZXN0ZGlyLyRyZWFsbmFtZSIKLQkgIGNtZHM9JHBvc3RpbnN0YWxsX2NtZHMKLQkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgZm9yIGNtZCBpbiAkY21kczsgZG8KLQkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgIGV2YWwgY21kPVwiJGNtZFwiCi0JICAgICRzaG93ICIkY21kIgotCSAgICAkcnVuIGV2YWwgIiRjbWQiIHx8IHsKLQkgICAgICBsdF9leGl0PSQ/Ci0KLQkgICAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLQkgICAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KLQkJJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICR7cmVhbG5hbWV9VCAmJiAkbXYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknCi0JICAgICAgZmkKLQotCSAgICAgIGV4aXQgJGx0X2V4aXQKLQkgICAgfQotCSAgZG9uZQotCSAgSUZTPSIkc2F2ZV9pZnMiCi0JZmkKLQotCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgotCW5hbWU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQlpbnN0bmFtZT0iJGRpci8kbmFtZSJpCi0JJHNob3cgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIgotCSRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiIHx8IGV4aXQgJD8KLQotCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KLQl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgotCTs7Ci0KLSAgICAgICoubG8pCi0JIyBJbnN0YWxsIChpLmUuIGNvcHkpIGEgbGlidG9vbCBvYmplY3QuCi0KLQkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCi0JaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgotCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKLQllbHNlCi0JICBkZXN0ZmlsZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKLQlmaQotCi0JIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KLQljYXNlICRkZXN0ZmlsZSBpbgotCSoubG8pCi0JICBzdGF0aWNkZXN0PWAkZWNobyAiWCRkZXN0ZmlsZSIgfCAkWHNlZCAtZSAiJGxvMm8iYAotCSAgOzsKLQkqLiRvYmpleHQpCi0JICBzdGF0aWNkZXN0PSIkZGVzdGZpbGUiCi0JICBkZXN0ZmlsZT0KLQkgIDs7Ci0JKikKLQkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIiAxPiYyCi0JICAkZWNobyAiJGhlbHAiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgOzsKLQllc2FjCi0KLQkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KLQlpZiB0ZXN0IC1uICIkZGVzdGZpbGUiOyB0aGVuCi0JICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiCi0JICAkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiB8fCBleGl0ICQ/Ci0JZmkKLQotCSMgSW5zdGFsbCB0aGUgb2xkIG9iamVjdCBpZiBlbmFibGVkLgotCWlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLQkgICMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCi0JICBzdGF0aWNvYmo9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgIiRsbzJvImAKLQotCSAgJHNob3cgIiRpbnN0YWxsX3Byb2cgJHN0YXRpY29iaiAkc3RhdGljZGVzdCIKLQkgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyBcJHN0YXRpY29iaiBcJHN0YXRpY2Rlc3QiIHx8IGV4aXQgJD8KLQlmaQotCWV4aXQgJEVYSVRfU1VDQ0VTUwotCTs7Ci0KLSAgICAgICopCi0JIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgotCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCi0JZWxzZQotCSAgZGVzdGZpbGU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCi0JZmkKLQotCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAotCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KLQkjIGluc3RhbGwKLQlzdHJpcHBlZF9leHQ9IiIKLQljYXNlICRmaWxlIGluCi0JICAqLmV4ZSkKLQkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KLQkgICAgICBmaWxlPWAkZWNobyAkZmlsZXwke1NFRH0gJ3MsLmV4ZSQsLCdgCi0JICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgotCSAgICBmaQotCSAgICA7OwotCWVzYWMKLQotCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KLQljYXNlICRob3N0IGluCi0JKmN5Z3dpbip8Km1pbmd3KikKLQkgICAgd3JhcHBlcj1gJGVjaG8gJGZpbGUgfCAke1NFRH0gLWUgJ3MsLmV4ZSQsLCdgCi0JICAgIDs7Ci0JKikKLQkgICAgd3JhcHBlcj0kZmlsZQotCSAgICA7OwotCWVzYWMKLQlpZiAoJHtTRUR9IC1lICc0cScgJHdyYXBwZXIgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICBub3RpbnN0X2RlcGxpYnM9Ci0JICByZWxpbmtfY29tbWFuZD0KLQotCSAgIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCi0JICAjIGZvbyBldmVuIGlmIGJvdGggZm9vIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCi0JICAjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKLQkgICMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KLQkgICMKLQkgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCSAgY2FzZSAkd3JhcHBlciBpbgotCSAgKi8qIHwgKlxcKikgLiAke3dyYXBwZXJ9IDs7Ci0JICAqKSAuIC4vJHt3cmFwcGVyfSA7OwotCSAgZXNhYwotCi0JICAjIENoZWNrIHRoZSB2YXJpYWJsZXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHNldC4KLQkgIGlmIHRlc3QgLXogIiRub3RpbnN0X2RlcGxpYnMiOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBcYCR3cmFwcGVyJyIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIGZpCi0KLQkgIGZpbmFsaXplPXllcwotCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbwotCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCi0JICAgIGxpYmRpcj0KLQkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KLQkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLQkgICAgICBjYXNlICRsaWIgaW4KLQkgICAgICAqLyogfCAqXFwqKSAuICRsaWIgOzsKLQkgICAgICAqKSAuIC4vJGxpYiA7OwotCSAgICAgIGVzYWMKLQkgICAgZmkKLQkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0Ci0JICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCi0JICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciIDE+JjIKLQkgICAgICBmaW5hbGl6ZT1ubwotCSAgICBmaQotCSAgZG9uZQotCi0JICByZWxpbmtfY29tbWFuZD0KLQkgICMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bwotCSAgIyBmb28gZXZlbiBpZiBib3RoIGZvbyBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQotCSAgIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCi0JICAjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCi0JICAjCi0JICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLQkgIGNhc2UgJHdyYXBwZXIgaW4KLQkgICovKiB8ICpcXCopIC4gJHt3cmFwcGVyfSA7OwotCSAgKikgLiAuLyR7d3JhcHBlcn0gOzsKLQkgIGVzYWMKLQotCSAgb3V0cHV0bmFtZT0KLQkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgotCSAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzICYmIHRlc3QgLXogIiRydW4iOyB0aGVuCi0JICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKLQkgICAgICBmaWxlPWAkZWNobyAiWCRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCSAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCi0JICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCSAgICAgIHJlbGlua19jb21tYW5kPWAkZWNobyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZycgfCAkTkwyU1BgCi0KLQkgICAgICAkc2hvdyAiJHJlbGlua19jb21tYW5kIgotCSAgICAgIGlmICRydW4gZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6Ci0JICAgICAgZWxzZQotCQkkZWNobyAiJG1vZGVuYW1lOiBlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiIDE+JjIKLQkJJHtybX1yICIkdG1wZGlyIgotCQljb250aW51ZQotCSAgICAgIGZpCi0JICAgICAgZmlsZT0iJG91dHB1dG5hbWUiCi0JICAgIGVsc2UKLQkgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjYW5ub3QgcmVsaW5rIFxgJGZpbGUnIiAxPiYyCi0JICAgIGZpCi0JICBlbHNlCi0JICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KLQkgICAgZmlsZT1gJGVjaG8gIlgkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFhzZWQgLWUgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCi0JICBmaQotCWZpCi0KLQkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKLQkjIG9uZSBhbnl3YXkgCi0JY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCi0JKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQotCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KLQkgICouZXhlOiouZXhlKQotCSAgICAjIHRoaXMgaXMgb2sKLQkgICAgOzsKLQkgICouZXhlOiopCi0JICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKLQkgICAgOzsKLQkgICo6Ki5leGUpCi0JICAgIGRlc3RmaWxlPWAkZWNobyAkZGVzdGZpbGUgfCAke1NFRH0gLWUgJ3MsLmV4ZSQsLCdgCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLQkkc2hvdyAiJGluc3RhbGxfcHJvZyRzdHJpcG1lICRmaWxlICRkZXN0ZmlsZSIKLQkkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2dcJHN0cmlwbWUgXCRmaWxlIFwkZGVzdGZpbGUiIHx8IGV4aXQgJD8KLQl0ZXN0IC1uICIkb3V0cHV0bmFtZSIgJiYgJHtybX1yICIkdG1wZGlyIgotCTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotCi0gICAgZm9yIGZpbGUgaW4gJHN0YXRpY2xpYnM7IGRvCi0gICAgICBuYW1lPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0KLSAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KLSAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCi0KLSAgICAgICRzaG93ICIkaW5zdGFsbF9wcm9nICRmaWxlICRvbGRsaWIiCi0gICAgICAkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiB8fCBleGl0ICQ/Ci0KLSAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgotCSRzaG93ICIkb2xkX3N0cmlwbGliICRvbGRsaWIiCi0JJHJ1biBldmFsICIkb2xkX3N0cmlwbGliICRvbGRsaWIiIHx8IGV4aXQgJD8KLSAgICAgIGZpCi0KLSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KLSAgICAgIGNtZHM9JG9sZF9wb3N0aW5zdGFsbF9jbWRzCi0gICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0JSUZTPSIkc2F2ZV9pZnMiCi0JZXZhbCBjbWQ9XCIkY21kXCIKLQkkc2hvdyAiJGNtZCIKLQkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJHNhdmVfaWZzIgotICAgIGRvbmUKLQotICAgIGlmIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyI7IHRoZW4KLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciIDE+JjIKLSAgICBmaQotCi0gICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KLSAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCi0gICAgICB0ZXN0IC1uICIkcnVuIiAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCi0gICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCi0gICAgZWxzZQotICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgZmkKLSAgICA7OwotCi0gICMgbGlidG9vbCBmaW5pc2ggbW9kZQotICBmaW5pc2gpCi0gICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogZmluaXNoIgotICAgIGxpYmRpcnM9IiRub25vcHQiCi0gICAgYWRtaW5jbWRzPQotCi0gICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KLSAgICAgIGZvciBkaXIKLSAgICAgIGRvCi0JbGliZGlycz0iJGxpYmRpcnMgJGRpciIKLSAgICAgIGRvbmUKLQotICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KLQlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCi0JICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgotCSAgY21kcz0kZmluaXNoX2NtZHMKLQkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgZm9yIGNtZCBpbiAkY21kczsgZG8KLQkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgIGV2YWwgY21kPVwiJGNtZFwiCi0JICAgICRzaG93ICIkY21kIgotCSAgICAkcnVuIGV2YWwgIiRjbWQiIHx8IGFkbWluY21kcz0iJGFkbWluY21kcwotICAgICAgICRjbWQiCi0JICBkb25lCi0JICBJRlM9IiRzYXZlX2lmcyIKLQlmaQotCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KLQkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KLQkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCi0JICAkcnVuIGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKLSAgICAgICAkY21kcyIKLQlmaQotICAgICAgZG9uZQotICAgIGZpCi0KLSAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KLSAgICB0ZXN0ICIkc2hvdyIgPSA6ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUwotCi0gICAgJGVjaG8gIlgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiB8ICRYc2VkCi0gICAgJGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKLSAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbwotICAgICAgJGVjaG8gIiAgICRsaWJkaXIiCi0gICAgZG9uZQotICAgICRlY2hvCi0gICAgJGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgotICAgICRlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKLSAgICAkZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKLSAgICAkZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgotICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotICAgICAgJGVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCi0gICAgICAkZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgotICAgIGZpCi0gICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotICAgICAgJGVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgotICAgICAgJGVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCi0gICAgZmkKLSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLSAgICAgIGxpYmRpcj1MSUJESVIKLSAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQotICAgICAgJGVjaG8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKLSAgICBmaQotICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCi0gICAgICAkZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCi0gICAgZmkKLSAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgICAgJGVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgotICAgIGZpCi0gICAgJGVjaG8KLSAgICAkZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCi0gICAgJGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgotICAgICRlY2hvICJYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgfCAkWHNlZAotICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgIDs7Ci0KLSAgIyBsaWJ0b29sIGV4ZWN1dGUgbW9kZQotICBleGVjdXRlKQotICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGV4ZWN1dGUiCi0KLSAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29tbWFuZCBuYW1lLgotICAgIGNtZD0iJG5vbm9wdCIKLSAgICBpZiB0ZXN0IC16ICIkY21kIjsgdGhlbgotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiIDE+JjIKLSAgICAgICRlY2hvICIkaGVscCIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCi0KLSAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgotICAgIGZvciBmaWxlIGluICRleGVjdXRlX2RsZmlsZXM7IGRvCi0gICAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IFxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiIDE+JjIKLQkkZWNobyAiJGhlbHAiIDE+JjIKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCi0KLSAgICAgIGRpcj0KLSAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgICoubGEpCi0JIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KLQlpZiAoJHtTRUR9IC1lICcycScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0JZWxzZQotCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKLQkgICRlY2hvICIkaGVscCIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JZmkKLQotCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgotCWRsbmFtZT0KLQlsaWJyYXJ5X25hbWVzPQotCi0JIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JY2FzZSAkZmlsZSBpbgotCSovKiB8ICpcXCopIC4gJGZpbGUgOzsKLQkqKSAuIC4vJGZpbGUgOzsKLQllc2FjCi0KLQkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KLQlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgotCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggXGAtZXhwb3J0LWR5bmFtaWMnIgotCSAgY29udGludWUKLQlmaQotCi0JZGlyPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JdGVzdCAiWCRkaXIiID0gIlgkZmlsZSIgJiYgZGlyPS4KLQotCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgotCSAgZGlyPSIkZGlyLyRvYmpkaXIiCi0JZWxzZQotCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIFxgJGRsbmFtZScgaW4gXGAkZGlyJyBvciBcYCRkaXIvJG9iamRpciciIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICBmaQotCWZpCi0JOzsKLQotICAgICAgKi5sbykKLQkjIEp1c3QgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLmxvIGZpbGUuCi0JZGlyPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JdGVzdCAiWCRkaXIiID0gIlgkZmlsZSIgJiYgZGlyPS4KLQk7OwotCi0gICAgICAqKQotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmcgXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiIDE+JjIKLQljb250aW51ZQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KLSAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKLSAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKLQotICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KLSAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCi0JZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgotICAgICAgZWxzZQotCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgotICAgICAgZmkKLSAgICBkb25lCi0KLSAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKLSAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCi0gICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCi0KLSAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCi0gICAgYXJncz0KLSAgICBmb3IgZmlsZQotICAgIGRvCi0gICAgICBjYXNlICRmaWxlIGluCi0gICAgICAtKikgOzsKLSAgICAgICopCi0JIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgotCWlmICgke1NFRH0gLWUgJzRxJyAkZmlsZSB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLQkgIGNhc2UgJGZpbGUgaW4KLQkgICovKiB8ICpcXCopIC4gJGZpbGUgOzsKLQkgICopIC4gLi8kZmlsZSA7OwotCSAgZXNhYwotCi0JICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgotCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KLSAgICAgIGZpbGU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgYXJncz0iJGFyZ3MgXCIkZmlsZVwiIgotICAgIGRvbmUKLQotICAgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCi0gICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLQkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KLQlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCi0gICAgICBmaQotCi0gICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKLSAgICAgIGRvCi0JZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KLQkJJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKLQkgICAgICBmaSIKLSAgICAgIGRvbmUKLQotICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgotICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCi0gICAgZWxzZQotICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KLSAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCWV2YWwgIlwkZWNobyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCi0JJGVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKLSAgICAgIGZpCi0gICAgICAkZWNobyAiJGNtZCRhcmdzIgotICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgZmkKLSAgICA7OwotCi0gICMgbGlidG9vbCBjbGVhbiBhbmQgdW5pbnN0YWxsIG1vZGUKLSAgY2xlYW4gfCB1bmluc3RhbGwpCi0gICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogJG1vZGUiCi0gICAgcm09IiRub25vcHQiCisjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfdW5pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIFJNPSIkbm9ub3B0IgogICAgIGZpbGVzPQogICAgIHJtZm9yY2U9CiAgICAgZXhpdF9zdGF0dXM9MApAQCAtNjUzOSw0NCArOTQzNiw0MSBAQAogICAgIGZvciBhcmcKICAgICBkbwogICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtZikgcm09IiRybSAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKLSAgICAgIC0qKSBybT0iJHJtICRhcmciIDs7Ci0gICAgICAqKSBmaWxlcz0iJGZpbGVzICRhcmciIDs7CisgICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKyAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CisgICAgICAqKSBmdW5jX2FwcGVuZCBmaWxlcyAiICRhcmciIDs7CiAgICAgICBlc2FjCiAgICAgZG9uZQogCi0gICAgaWYgdGVzdCAteiAiJHJtIjsgdGhlbgotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhbiBSTSBwcm9ncmFtIiAxPiYyCi0gICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCisgICAgdGVzdCAteiAiJFJNIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKIAogICAgIHJtZGlycz0KIAotICAgIG9yaWdvYmpkaXI9IiRvYmpkaXIiCiAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwotICAgICAgZGlyPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0gICAgICBpZiB0ZXN0ICJYJGRpciIgPSAiWCRmaWxlIjsgdGhlbgotCWRpcj0uCi0Jb2JqZGlyPSIkb3JpZ29iamRpciIKKyAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCisJb2Rpcj0iJG9iamRpciIKICAgICAgIGVsc2UKLQlvYmpkaXI9IiRkaXIvJG9yaWdvYmpkaXIiCisJb2Rpcj0iJGRpci8kb2JqZGlyIgogICAgICAgZmkKLSAgICAgIG5hbWU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLSAgICAgIHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCAmJiBvYmpkaXI9IiRkaXIiCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgJiYgb2Rpcj0iJGRpciIKIAotICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcwotICAgICAgaWYgdGVzdCAiJG1vZGUiID0gY2xlYW47IHRoZW4KKyAgICAgICMgUmVtZW1iZXIgb2RpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IHRoZW4KIAljYXNlICIgJHJtZGlycyAiIGluCi0JICAqIiAkb2JqZGlyICIqKSA7OwotCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7CisJICAqIiAkb2RpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHJtZGlycyAiICRvZGlyIiA7OwogCWVzYWMKICAgICAgIGZpCiAKICAgICAgICMgRG9uJ3QgZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgcm0gLWYgd2FzIHVzZWQuCi0gICAgICBpZiAodGVzdCAtTCAiJGZpbGUiKSA+L2Rldi9udWxsIDI+JjEgXAotCXx8ICh0ZXN0IC1oICIkZmlsZSIpID4vZGV2L251bGwgMj4mMSBcCi0JfHwgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisgICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgogCToKICAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCiAJZXhpdF9zdGF0dXM9MQpAQCAtNjU5MCw1NSArOTQ4NCwzMiBAQAogICAgICAgY2FzZSAkbmFtZSBpbgogICAgICAgKi5sYSkKIAkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCi0JaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgIC4gJGRpci8kbmFtZQorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCiAKIAkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCiAJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbiIKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgogCSAgZG9uZQotCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKIAotCSAgY2FzZSAiJG1vZGUiIGluCisJICBjYXNlICIkb3B0X21vZGUiIGluCiAJICBjbGVhbikKLQkgICAgY2FzZSAiICAkbGlicmFyeV9uYW1lcyAiIGluCi0JICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQorCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgogCSAgICAqIiAkZGxuYW1lICIqKSA7OwotCSAgICAqKSBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRkbG5hbWUiIDs7CisJICAgICopIHRlc3QgLW4gIiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIiA7OwogCSAgICBlc2FjCi0JICAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfWkiCisJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9aSIKIAkgICAgOzsKIAkgIHVuaW5zdGFsbCkKIAkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCiAJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwgY29tbWFuZHMuCi0JICAgICAgY21kcz0kcG9zdHVuaW5zdGFsbF9jbWRzCi0JICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLQkJSUZTPSIkc2F2ZV9pZnMiCi0JCWV2YWwgY21kPVwiJGNtZFwiCi0JCSRzaG93ICIkY21kIgotCQkkcnVuIGV2YWwgIiRjbWQiCi0JCWlmIHRlc3QgIiQ/IiAtbmUgMCAmJiB0ZXN0ICIkcm1mb3JjZSIgIT0geWVzOyB0aGVuCi0JCSAgZXhpdF9zdGF0dXM9MQotCQlmaQotCSAgICAgIGRvbmUKLQkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJwogCSAgICBmaQogCiAJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KIAkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCi0JICAgICAgY21kcz0kb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0JCUlGUz0iJHNhdmVfaWZzIgotCQlldmFsIGNtZD1cIiRjbWRcIgotCQkkc2hvdyAiJGNtZCIKLQkJJHJ1biBldmFsICIkY21kIgotCQlpZiB0ZXN0ICIkPyIgLW5lIDAgJiYgdGVzdCAiJHJtZm9yY2UiICE9IHllczsgdGhlbgotCQkgIGV4aXRfc3RhdHVzPTEKLQkJZmkKLQkgICAgICBkb25lCi0JICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCiAJICAgIGZpCiAJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgogCSAgICA7OwpAQCAtNjY0OCwyODggKzk1MTksOTUgQEAKIAogICAgICAgKi5sbykKIAkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KLQlpZiAoJHtTRUR9IC1lICcycScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCiAKIAkgICMgUmVhZCB0aGUgLmxvIGZpbGUKLQkgIC4gJGRpci8kbmFtZQorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQogCiAJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KLQkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiBcCi0JICAgICAmJiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgotCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRwaWNfb2JqZWN0IgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKIAkgIGZpCiAKIAkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KLQkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgXAotCSAgICAgJiYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCi0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKIAkgIGZpCiAJZmkKIAk7OwogCiAgICAgICAqKQotCWlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuIDsgdGhlbgorCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbiA7IHRoZW4KIAkgIG5vZXhlbmFtZT0kbmFtZQogCSAgY2FzZSAkZmlsZSBpbgogCSAgKi5leGUpCi0JICAgIGZpbGU9YCRlY2hvICRmaWxlfCR7U0VEfSAncywuZXhlJCwsJ2AKLQkgICAgbm9leGVuYW1lPWAkZWNobyAkbmFtZXwke1NFRH0gJ3MsLmV4ZSQsLCdgCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRuYW1lIgorCSAgICBub2V4ZW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCiAJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQotCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZmlsZSIKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgogCSAgICA7OwogCSAgZXNhYwogCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCi0JICBpZiAoJHtTRUR9IC1lICc0cScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgICByZWxpbmtfY29tbWFuZD0KLQkgICAgLiAkZGlyLyRub2V4ZW5hbWUKKwkgIGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRmaWxlIjsgdGhlbgorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAgIGVsc2UKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKKwkgICAgZmkKIAogCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQogCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcwotCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfVMuJHtvYmpleHR9IgogCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCi0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0kbmFtZSIKKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5hbWUiCiAJICAgIGZpCiAJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KLQkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKIAkgICAgZmkKIAkgIGZpCiAJZmkKIAk7OwogICAgICAgZXNhYwotICAgICAgJHNob3cgIiRybSAkcm1maWxlcyIKLSAgICAgICRydW4gJHJtICRybWZpbGVzIHx8IGV4aXRfc3RhdHVzPTEKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJwogICAgIGRvbmUKLSAgICBvYmpkaXI9IiRvcmlnb2JqZGlyIgogCiAgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCiAgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbwogICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KLQkkc2hvdyAicm1kaXIgJGRpciIKLQkkcnVuIHJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxCisJZnVuY19zaG93X2V2YWwgInJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxIgogICAgICAgZmkKICAgICBkb25lCiAKICAgICBleGl0ICRleGl0X3N0YXR1cwotICAgIDs7Cit9CiAKLSAgIiIpCi0gICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhIE1PREUiIDE+JjIKLSAgICAkZWNobyAiJGdlbmVyaWNfaGVscCIgMT4mMgotICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIDs7Ci0gIGVzYWMKK3sgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IH0gJiYKKyAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQogCi0gIGlmIHRlc3QgLXogIiRleGVjX2NtZCI7IHRoZW4KLSAgICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIiAxPiYyCi0gICAgJGVjaG8gIiRnZW5lcmljX2hlbHAiIDE+JjIKLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgZmkKLWZpICMgdGVzdCAteiAiJHNob3dfaGVscCIKK3Rlc3QgLXogIiRvcHRfbW9kZSIgJiYgeworICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorfQorCit0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKIAogaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgotICBldmFsIGV4ZWMgJGV4ZWNfY21kCisgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgogICBleGl0ICRFWElUX0ZBSUxVUkUKIGZpCiAKLSMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgotY2FzZSAkbW9kZSBpbgotIiIpICRlY2hvIFwKLSJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4KK2V4aXQgJGV4aXRfc3RhdHVzCiAKLVByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotCi0gICAgLS1jb25maWcgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKLSAgICAtLWRlYnVnICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCi0tbiwgLS1kcnktcnVuICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKLSAgICAtLWZlYXR1cmVzICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgICAtLWZpbmlzaCAgICAgICAgICBzYW1lIGFzIFxgLS1tb2RlPWZpbmlzaCcKLSAgICAtLWhlbHAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0gICAgLS1tb2RlPU1PREUgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUgW2RlZmF1bHQ9aW5mZXJyZWQgZnJvbSBNT0RFLUFSR1NdCi0gICAgLS1xdWlldCAgICAgICAgICAgc2FtZSBhcyBcYC0tc2lsZW50JwotICAgIC0tc2lsZW50ICAgICAgICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKLSAgICAtLXRhZz1UQUcgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCi0gICAgLS12ZXJzaW9uICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgotCi1NT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgIGNsZWFuICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5Ci0gICAgICBjb21waWxlICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAotICAgICAgZXhlY3V0ZSAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCi0gICAgICBmaW5pc2ggICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcwotICAgICAgaW5zdGFsbCAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCi0gICAgICBsaW5rICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCi0gICAgICB1bmluc3RhbGwgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKLQotTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLiAgVHJ5IFxgJG1vZGVuYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yCi1hIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KLQotUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LiIKLSAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gIDs7Ci0KLWNsZWFuKQotICAkZWNobyBcCi0iVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgotCi1SZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgotCi1STSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKLSh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKLXRvIFJNLgotCi1JZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBvYmplY3Qgb3IgcHJvZ3JhbSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkCi13aXRoIGl0IGFyZSBkZWxldGVkLiBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCi0gIDs7Ci0KLWNvbXBpbGUpCi0gICRlY2hvIFwKLSJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCi0KLUNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KLQotVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6Ci0KLSAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCi0gIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZGluZyBQSUMgb2JqZWN0cyBvbmx5Ci0gIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZGluZyBub24tUElDIG9iamVjdHMgb25seQotICAtc3RhdGljICAgICAgICAgICBhbHdheXMgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZwotCi1DT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQotZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KLQotVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCi1TT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggXGAuYycgd2l0aCB0aGUKLWxpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgXGAubG8nLiIKLSAgOzsKLQotZXhlY3V0ZSkKLSAgJGVjaG8gXAotIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KLQotQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCi0KLVRoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgotCi0gIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCi0KLVRoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKLWZsYWdzLgotCi1JZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCi1pbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKLWRpcmVjdG9yaWVzIGFyZSBhZGRlZCB0byB0aGUgbGlicmFyeSBwYXRoLgotCi1UaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKLSAgOzsKLQotZmluaXNoKQotICAkZWNobyBcCi0iVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCi0KLUNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMuCi0KLUVhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCi0KLVRoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQotdGhlIFxgLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCi0gIDs7Ci0KLWluc3RhbGwpCi0gICRlY2hvIFwKLSJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgotCi1JbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KLQotSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCi1laXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KLQotVGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgYXJlIGludGVycHJldGVkIGFzIGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9ubHkKLUJTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgotICA7OwotCi1saW5rKQotICAkZWNobyBcCi0iVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGluayBMSU5LLUNPTU1BTkQuLi4KLQotTGluayBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzIHRvZ2V0aGVyIHRvIGZvcm0gYW5vdGhlciBsaWJyYXJ5LCBvciB0bwotY3JlYXRlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS4KLQotTElOSy1DT01NQU5EIGlzIGEgY29tbWFuZCB1c2luZyB0aGUgQyBjb21waWxlciB0aGF0IHlvdSB3b3VsZCB1c2UgdG8gY3JlYXRlCi1hIHByb2dyYW0gZnJvbSBzZXZlcmFsIG9iamVjdCBmaWxlcy4KLQotVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIExJTkstQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6Ci0KLSAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCi0gIC1hdm9pZC12ZXJzaW9uICAgIGRvIG5vdCBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCBpZiBwb3NzaWJsZQotICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKLSAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKLSAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKLSAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCi0gIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAotICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKLSAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcwotICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQotICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKLSAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKLSAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCi0gIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scwotICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKLSAgLW9iamVjdGxpc3QgRklMRSAgVXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKLSAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCi0gICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKLSAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KLSAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgotICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcwotICAtc3RhdGljICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwotICAtc3RhdGljLWxpYnRvb2wtbGlicwotICAgICAgICAgICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcwotICAtdmVyc2lvbi1pbmZvIENVUlJFTlRbOlJFVklTSU9OWzpBR0VdXQotICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCi0KLUFsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggXGAtJykgYXJlIGlnbm9yZWQuCi0KLUV2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiBcYC5sYScgYXJlCi10cmVhdGVkIGFzIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzLCBvdGhlciBmaWxlcyBhcmUgc3RhbmRhcmQgb3IgbGlicmFyeQotb2JqZWN0IGZpbGVzLgotCi1JZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKLW9ubHkgbGlicmFyeSBvYmplY3RzIChcYC5sbycgZmlsZXMpIG1heSBiZSBzcGVjaWZpZWQsIGFuZCBcYC1ycGF0aCcgaXMKLXJlcXVpcmVkLCBleGNlcHQgd2hlbiBjcmVhdGluZyBhIGNvbnZlbmllbmNlIGxpYnJhcnkuCi0KLUlmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAuYScgb3IgXGAubGliJywgdGhlbiBhIHN0YW5kYXJkIGxpYnJhcnkgaXMgY3JlYXRlZAotdXNpbmcgXGBhcicgYW5kIFxgcmFubGliJywgb3Igb24gV2luZG93cyB1c2luZyBcYGxpYicuCi0KLUlmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubG8nIG9yIFxgLiR7b2JqZXh0fScsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCi1pcyBjcmVhdGVkLCBvdGhlcndpc2UgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGlzIGNyZWF0ZWQuIgotICA7OwotCi11bmluc3RhbGwpCi0gICRlY2hvIFwKLSJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT11bmluc3RhbGwgUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgotCi1SZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KLQotUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCi0odHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCi10byBSTS4KLQotSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggaXQgYXJlIGRlbGV0ZWQuCi1PdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCi0gIDs7Ci0KLSopCi0gICRlY2hvICIkbW9kZW5hbWU6IGludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciIDE+JjIKLSAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gIGV4aXQgJEVYSVRfRkFJTFVSRQotICA7OwotZXNhYwotCi0kZWNobwotJGVjaG8gIlRyeSBcYCRtb2RlbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKLQotZXhpdCAkPwogCiAjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgogIyBpbiB3aGljaCB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKQEAgLTY5NDMsMTQgKzk2MjEsMTcgQEAKICMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgogCiAjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCi1kaXNhYmxlX2xpYnM9c2hhcmVkCitidWlsZF9saWJ0b29sX2xpYnM9bm8KK2J1aWxkX29sZF9saWJzPXllcwogIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKIAogIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYwotZGlzYWJsZV9saWJzPXN0YXRpYworYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCiAjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYwogCiAjIExvY2FsIFZhcmlhYmxlczoKICMgbW9kZTpzaGVsbC1zY3JpcHQKICMgc2gtaW5kZW50YXRpb246MgogIyBFbmQ6CisjIHZpOnN3PTIKKwpkaWZmIC0tZ2l0IGEvbTQvYWNfYWRkX3NlYXJjaF9wYXRoLm00IGIvbTQvYWNfYWRkX3NlYXJjaF9wYXRoLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGE4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9hY19hZGRfc2VhcmNoX3BhdGgubTQKQEAgLTAsMCArMSwxMyBAQAorZG5sCitkbmwgQWRkIGEgc2VhcmNoIHBhdGggdG8gdGhlIExJQlMgYW5kIENQUEZMQUdTIHZhcmlhYmxlcworZG5sCitBQ19ERUZVTihbQUNfQUREX1NFQVJDSF9QQVRIXSxbCisgIGlmIHRlc3QgIngkMSIgIT0geCAtYSAtZCAkMTsgdGhlbgorICAgICBpZiB0ZXN0IC1kICQxL2xpYjsgdGhlbgorICAgICAgIExERkxBR1M9Ii1MJDEvbGliICRMREZMQUdTIgorICAgICBmaQorICAgICBpZiB0ZXN0IC1kICQxL2luY2x1ZGU7IHRoZW4KKwlDUFBGTEFHUz0iLUkkMS9pbmNsdWRlICRDUFBGTEFHUyIKKyAgICAgZmkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9hY19tc2dfY2FjaGUubTQgYi9tNC9hY19tc2dfY2FjaGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkN2NkYQotLS0gL2Rldi9udWxsCisrKyBiL200L2FjX21zZ19jYWNoZS5tNApAQCAtMCwwICsxLDI0IEBACitkbmwKK2RubCBTdG9yZSBpbmZvcm1hdGlvbiBmb3IgZGlzcGxheWluZyBsYXRlci4KK2RubAorQUNfREVGVU4oW0FDX01TR19DQUNIRV9JTklUXSxbCisgIHJtIC1mIGNvbmZpZ3VyZS1zdW1tYXJ5CitdKQorCitBQ19ERUZVTihbQUNfTVNHX0NBQ0hFX0FERF0sWworICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCisgICQxCitFT0YKK10pCisKK0FDX0RFRlVOKFtBQ19NU0dfQ0FDSEVfRElTUExBWV0sWworICBlY2hvICIiCisgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgZWNobyAiICAgICAgICAgICAgTmV0LVNOTVAgY29uZmlndXJhdGlvbiBzdW1tYXJ5OiIKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICBlY2hvICIiCisgIGNhdCBjb25maWd1cmUtc3VtbWFyeQorICBlY2hvICIiCisgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgZWNobyAiIgorXSkKZGlmZiAtLWdpdCBhL200L2FjX21zZ19tb2R1bGVfZGJnLm00IGIvbTQvYWNfbXNnX21vZHVsZV9kYmcubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjYjMxNwotLS0gL2Rldi9udWxsCisrKyBiL200L2FjX21zZ19tb2R1bGVfZGJnLm00CkBAIC0wLDAgKzEsNyBAQAorQUNfREVGVU4oW0FDX01TR19NT0RVTEVfREJHXSwKK1sKKyAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgorICAgIGVjaG8gJDEgJDIgJDMgJDQKKyAgZmkKK10KKykKZGlmZiAtLWdpdCBhL200L2FjX3Byb21wdF91c2VyLm00IGIvbTQvYWNfcHJvbXB0X3VzZXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyZGQ5YQotLS0gL2Rldi9udWxsCisrKyBiL200L2FjX3Byb21wdF91c2VyLm00CkBAIC0wLDAgKzEsNTIgQEAKK2RubCBAc3lub3BzaXMgQUNfUFJPTVBUX1VTRVJfTk9fREVGSU5FKFZBUklBQkxFTkFNRSxRVUVTVElPTixbREVGQVVMVF0pCitkbmwKK2RubCBBc2tzIGEgUVVFU1RJT04gYW5kIHB1dHMgdGhlIHJlc3VsdHMgaW4gVkFSSUFCTEVOQU1FIHdpdGggYW4gb3B0aW9uYWwKK2RubCBERUZBVUxUIHZhbHVlIGlmIHRoZSB1c2VyIG1lcmVseSBoaXRzIHJldHVybi4KK2RubAorZG5sIEB2ZXJzaW9uIDEuMTUKK2RubCBAYXV0aG9yIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorZG5sCitBQ19ERUZVTihbQUNfUFJPTVBUX1VTRVJfTk9fREVGSU5FXSwKK1sKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK2VjaG8gJEVDSE9fTiAiJDIgKCQzKTogJEVDSE9fQyIKK3JlYWQgdG1waW5wdXQgPCZBU19PUklHSU5BTF9TVERJTl9GRAoraWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIkMyIgIT0gIiI7IHRoZW4KKyAgdG1waW5wdXQ9IiQzIgorZmkKK2V2YWwgJDE9XCIkdG1waW5wdXRcIgorZWxzZQordG1waW5wdXQ9IiQzIgorZXZhbCAkMT1cIiR0bXBpbnB1dFwiCitmaQorXSkgZG5sIGRvbmUgQUNfUFJPTVBUX1VTRVIKKworZG5sIEBzeW5vcHNpcyBBQ19QUk9NUFRfVVNFUihWQVJJQUJMRU5BTUUsUVVFU1RJT04sW0RFRkFVTFRdLFFVT1RFRCkKK2RubAorZG5sIEFza3MgYSBRVUVTVElPTiBhbmQgcHV0cyB0aGUgcmVzdWx0cyBpbiBWQVJJQUJMRU5BTUUgd2l0aCBhbiBvcHRpb25hbAorZG5sIERFRkFVTFQgdmFsdWUgaWYgdGhlIHVzZXIgbWVyZWx5IGhpdHMgcmV0dXJuLiAgQWxzbyBjYWxscworZG5sIEFDX0RFRklORV9VTlFVT1RFRCgpIG9uIHRoZSBWQVJJQUJMRU5BTUUgZm9yIFZBUklBQkxFTkFNRXMgdGhhdCBzaG91bGQKK2RubCBiZSBlbnRlcmVkIGludG8gdGhlIGNvbmZpZy5oIGZpbGUgYXMgd2VsbC4gIElmIFFVT1RFRCBpcyAicXVvdGVkIiB0aGVuCitkbmwgdGhlIHJlc3VsdCB3aWxsIGJlIGRlZmluZWQgd2l0aGluIHF1b3Rlcy4KK2RubAorZG5sIEB2ZXJzaW9uIDEuMTUKK2RubCBAYXV0aG9yIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorZG5sCitBQ19ERUZVTihbQUNfUFJPTVBUX1VTRVJdLAorWworTVNHX0NIRUNLPSJwYXRzdWJzdChbJDJdLCBbLioKK10sIFtdKSIKK0FDX0NBQ0hFX0NIRUNLKCRNU0dfQ0hFQ0ssIGFjX2N2X3VzZXJfcHJvbXB0XyQxLAorW2VjaG8gIiIgPiZBU19NRVNTQUdFX0ZECitBQ19QUk9NUFRfVVNFUl9OT19ERUZJTkUoJDEsWyQyXSwkMykKK2V2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfJDE9XCQkMQorZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mQVNfTUVTU0FHRV9GRAorXSkKK2lmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF8kMSIgIT0gIm5vbmUiOyB0aGVuCisgIGlmIHRlc3QgIngkNCIgPSAieHF1b3RlZCIgLW8gIngkNCIgPSAieFFVT1RFRCI7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoJDEsIiRhY19jdl91c2VyX3Byb21wdF8kMSIpCisgIGVsc2UKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoJDEsJGFjX2N2X3VzZXJfcHJvbXB0XyQxKQorICBmaQorZmkKK10pIGRubApkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxMjU4NAotLS0gL2Rldi9udWxsCisrKyBiL200L2xpYnRvb2wubTQKQEAgLTAsMCArMSw3ODMxIEBACisjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgICAgICAgICAgICAgICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCittNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgICAgICAgICAgICAgICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK10pCisKKyMgc2VyaWFsIDU3IExUX0lOSVQKKworCisjIExUX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCittNF9kZWZ1bihbTFRfUFJFUkVRXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbTFRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorCQkgICBbbTRfZmF0YWwoW0xpYnRvb2wgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWRdLAorCQkgICAgICAgICAgICAgNjMpXSldLAorICAgICAgIFskMl0pXSkKKworCisjIF9MVF9DSEVDS19CVUlMRERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gaWYgdGhlIGFic29sdXRlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycworbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCitbY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKK2VzYWMKK10pCisKKworIyBMVF9JTklUKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfSU5JVF0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwgV2UgdXNlIEFDX0lOQ0xVREVTX0RFRkFVTFQKK0FDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9MQU5HXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19CVUlMRERJUl0pZG5sCisKK2RubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgorbTRfcGF0dGVybl9mb3JiaWQoW15fP0xUX1tBLVpfXSskXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW14oX0xUX0VPRnxMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XfExUX01VTFRJX01PRFVMRSkkXSlkbmwKK2RubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAorZG5sIHVubGVzcyB3ZSByZXF1aXJlIGFuIEFDX0RFRlVOZWQgbWFjcm86CitBQ19SRVFVSVJFKFtMVE9QVElPTlNfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRWRVJTSU9OX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRPQlNPTEVURV9WRVJTSU9OXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCisKK19MVF9TSEVMTF9JTklUKFtTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofV0pCisKK2RubCBQYXJzZSBPUFRJT05TCitfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCitBQ19TVUJTVChMSUJUT09MKWRubAorCitfTFRfU0VUVVAKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorbTRfZGVmaW5lKFtMVF9JTklUXSkKK10pIyBMVF9JTklUCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FDX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK0FVX0FMSUFTKFtBTV9QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCBbXSkKKworCisjIF9MVF9DQ19CQVNFTkFNRShDQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCittNF9kZWZ1bihbX0xUX0NDX0JBU0VOQU1FXSwKK1tmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKK10pCisKKworIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAorIyBzZW5zaWJseSBhZnRlciBgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KK200X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKK1s6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CitdKSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworCisKKyMgX0xUX1NFVFVQCisjIC0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9TRVRVUF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworX0xUX0RFQ0woW10sIFtob3N0X2FsaWFzXSwgWzBdLCBbVGhlIGhvc3Qgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9vc10sIFswXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtidWlsZF9hbGlhc10sIFswXSwgW1RoZSBidWlsZCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfb3NdLCBbMF0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKK19MVF9ERUNMKFtdLCBbTE5fU10sIFsxXSwgW1doZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3NdKWRubAorZG5sCitBQ19SRVFVSVJFKFtMVF9DTURfTUFYX0xFTl0pZG5sCitfTFRfREVDTChbb2JqZXh0XSwgW2FjX29iamV4dF0sIFswXSwgW09iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4ZWV4dF0sIFswXSwgW0V4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKV0pZG5sCitkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9XSVRIX1NZU1JPT1RdKWRubAorCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKK10pCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK19MVF9DSEVDS19PQkpESVIKKworbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKyAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIF9MVF9QQVRIX01BR0lDCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitMVF9TVVBQT1JURURfVEFHKFtDQ10pCitfTFRfTEFOR19DX0NPTkZJRworX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKK19MVF9DT05GSUdfQ09NTUFORFMKK10pIyBfTFRfU0VUVVAKKworCisjIF9MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGZldyBzZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscCB1cyBkbyByb2J1c3QgcXVvdGluZy4KK200X2RlZnVuKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCitbIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbWyJgJFxcXV1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1siYFxcXV1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKK10pCisKKyMgX0xUX1BST0dfTFRNQUlOCisjIC0tLS0tLS0tLS0tLS0tLQorIyBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNhbGxlZCBib3RoIGZyb20gYGNvbmZpZ3VyZScsIGFuZCBgY29uZmlnLnN0YXR1cycKKyMgbm93IHRoYXQgd2UgdXNlIEFDX0NPTkZJR19DT01NQU5EUyB0byBnZW5lcmF0ZSBsaWJ0b29sLiAgTm90YWJseSwKKyMgYGNvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorIyBzbyB3ZSBwYXNzIGEgY29weSBhbG9uZyB0byBtYWtlIHN1cmUgaXQgaGFzIGEgc2Vuc2libGUgdmFsdWUgYW55d2F5LgorbTRfZGVmdW4oW19MVF9QUk9HX0xUTUFJTl0sCitbbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJ10pCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK10pIyBfTFRfUFJPR19MVE1BSU4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBY2N1bXVsYXRlIGNvZGUgZm9yIGNyZWF0aW5nIGxpYnRvb2wuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgU28gdGhhdCB3ZSBjYW4gcmVjcmVhdGUgYSBmdWxsIGxpYnRvb2wgc2NyaXB0IGluY2x1ZGluZyBhZGRpdGlvbmFsCisjIHRhZ3MsIHdlIGFjY3VtdWxhdGUgdGhlIGNodW5rcyBvZiBjb2RlIHRvIHNlbmQgdG8gQUNfQ09ORklHX0NPTU1BTkRTCisjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgYGxpYnRvb2wnCisjIGxhYmVsLgorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW0lOSVQtQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MX0lOSVRdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0pCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0woW0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIENPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorCisKKyMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09ORklHX1NBVkVfQ09NTUFORFNdLAorW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWyQyXSkKK10pCisKKworIyBfTFRfRk9STUFUX0NPTU1FTlQoW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgbGVhZGluZyBjb21tZW50IG1hcmtzIHRvIHRoZSBzdGFydCBvZiBlYWNoIGxpbmUsIGFuZCBhIHRyYWlsaW5nCisjIGZ1bGwtc3RvcCB0byB0aGUgd2hvbGUgY29tbWVudCBpZiBvbmUgaXMgbm90IHByZXNlbnQgYWxyZWFkeS4KK200X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKK1ttNF9pZnZhbChbJDFdLCBbCittNF9icGF0c3Vic3QoW200X2JwYXRzdWJzdChbJDFdLCBbXiAqXSwgWyMgXSldLAorICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCispXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRklYTUU6IEVsaW1pbmF0ZSBWQVJOQU1FICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9MVF9ERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0sIFtJUy1UQUdHRUQ/XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCisjIFZBUk5BTUUgaXMgdGhlIChiYXNlKSBuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisjIFZBTFVFIG1heSBiZSAwLCAxIG9yIDIgZm9yIGEgY29tcHV0ZWQgcXVvdGUgZXNjYXBlZCB2YWx1ZSBiYXNlZCBvbgorIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KK200X2RlZmluZShbX0xUX0RFQ0xdLAorW2x0X2lmX2FwcGVuZF91bmlxKFtsdF9kZWNsX3Zhcm5hbWVzXSwgWyQyXSwgWywgXSwKKyAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKwlbbTRfaWZ2YWwoWyQxXSwgWyQxXSwgWyQyXSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW3ZhbHVlXSwgWyQzXSkKKyAgICBtNF9pZnZhbChbJDRdLAorCVtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtkZXNjcmlwdGlvbl0sIFskNF0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sCisJW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorXSkKKworCisjIF9MVF9UQUdERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCisKKworIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdGFnX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKworCisjIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX2x0X2RlY2xfZmlsdGVyXSwKK1ttNF9jYXNlKFskI10sCisgIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbM10sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgWyQzXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sICRAKV0pW11kbmwKK10pCisKKworIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorCisKKyMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2RxdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKworCisjIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2Fzc2VydChbJCMgPD0gMl0pZG5sCitfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICBtNF9pZnZhbChbJDJdLCBbWyQyXV0sIFttNF9kcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpXSksCisgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSksIFsgXSkpXSkKK200X2RlZmluZShbX2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9pZnZhbChbJDNdLCBbbHRfY29tYmluZShbJDFdLCBbJDJdLCBbX10sICQzKV0pXSkKKworCisjIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgICBtNF9pZihbJDJdLCBbXSwKKwkgICBtNF9xdW90ZShsdF9kZWNsX3Zhcm5hbWVzKSwKKwltNF9xdW90ZShtNF9zaGlmdCgkQCkpKSlbXWRubAorXSkKK200X2RlZmluZShbX2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tsdF9qb2luKCRALCBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbJDFdLAorCQkJbHRfZGVjbF90YWdfdmFybmFtZXMoW1ssIF1dLCBtNF9zaGlmdCgkQCkpKSlkbmwKK10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvIGBjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gYGNvbmZpZ3VyZScuICBWQVJOQU1FCisjIG11c3QgaGF2ZSBhIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZWQgdmFsdWUgZm9yIHRoaXMgdG8gd29yay4KK200X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCitbJDE9J2AkRUNITyAiJF1bJDEiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorIyB3ZSB3cml0ZSB0aGVtIHRvIGNvbmZpZy5zdGF0dXMsIHdlIGhhdmUgdG8gYmUgc3VyZSB0byBxdW90ZSBhbGwKKyMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCisjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorIworIyAgICA8dmFyPj0nYCRFQ0hPICIkPHZhcj4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbTRfZGVmdW4oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfYWxsX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHUworIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBjb21tZW50IGFuZCBsaXN0IG9mIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBzY3JpcHQKK200X2RlZnVuKFtfTFRfTElCVE9PTF9UQUdTXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCithdmFpbGFibGVfdGFncz0iX0xUX1RBR1MiZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfREVDTEFSRShWQVJOQU1FLCBbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXh0cmFjdCB0aGUgZGljdGlvbmFyeSB2YWx1ZXMgZm9yIFZBUk5BTUUgKG9wdGlvbmFsbHkgd2l0aCBUQUcpIGFuZAorIyBleHBhbmQgdG8gYSBjb21tZW50ZWQgc2hlbGwgdmFyaWFibGUgc2V0dGluZzoKKyMKKyMgICAgIyBTb21lIGNvbW1lbnQgYWJvdXQgd2hhdCBWQVIgaXMgZm9yLgorIyAgICB2aXNpYmxlX25hbWU9JGx0X2ludGVybmFsX25hbWUKK200X2RlZmluZShbX0xUX0xJQlRPT0xfREVDTEFSRV0sCitbX0xUX0ZPUk1BVF9DT01NRU5UKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sCisJCQkJCSAgIFtkZXNjcmlwdGlvbl0pKSlbXWRubAorbTRfcHVzaGRlZihbX2xpYnRvb2xfbmFtZV0sCisgICAgbTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW2xpYnRvb2xfbmFtZV0pKSlbXWRubAorbTRfY2FzZShtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKSksCisgICAgWzBdLCBbX2xpYnRvb2xfbmFtZT1bJF0kMV0sCisgICAgWzFdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgWzJdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgW19saWJ0b29sX25hbWU9bHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSldKVtdZG5sCittNF9pZnZhbChbJDJdLCBbXyQyXSlbXW00X3BvcGRlZihbX2xpYnRvb2xfbmFtZV0pW11kbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9DT05GSUdfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGNvbW1lbnRlZCBkZWNsYXJhdGlvbnMgb2Ygbm9uLXRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMKKyMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbiB0aGUgTElCVE9PTCBDT05GSUcgc2VjdGlvbiBvZiB0aGUgYGxpYnRvb2wnCisjIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRworIyBzZWN0aW9uKSBhcmUgcHJvZHVjZWQgYnkgX0xUX0xJQlRPT0xfVEFHX1ZBUlMuCittNF9kZWZ1bihbX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLAorICAgIG00X3F1b3RlKF9sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFtub10sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKSksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR19WQVJTKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9UQUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyLCBbJDFdKV0pXSldKQorCisKKyMgX0xUX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHVkFSXSwgW200X2lmdmFsKFskMl0sIFskMV8kMl0sIFskMV0pXSkKKworCisjIF9MVF9DT05GSUdfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZW5kIGFjY3VtdWxhdGVkIG91dHB1dCB0byAkQ09ORklHX1NUQVRVUy4gIFRoYW5rcyB0byB0aGUgbGlzdHMgb2YKKyMgdmFyaWFibGVzIGZvciBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZSBlc2NhcGluZyB3ZSBzYXZlZCBmcm9tIGNhbGxzCisjIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworIyBpbnRvIGBjb25maWcuc3RhdHVzJywgYW5kIHRoZW4gdGhlIHNoZWxsIGNvZGUgdG8gcXVvdGUgZXNjYXBlIHRoZW0gaW4KKyMgZm9yIGxvb3BzIGluIGBjb25maWcuc3RhdHVzJy4gIEZpbmFsbHksIGFueSBhZGRpdGlvbmFsIGNvZGUgYWNjdW11bGF0ZWQKKyMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KK200X2RlZnVuKFtfTFRfQ09ORklHX0NPTU1BTkRTXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbTFRfT1VUUFVUXSwKKwlkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIHBsYWNlZCBpbiAkQ09ORklHX0xULAorCWRubCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGFsbCBvdmVyIGFnYWluIGludG8gY29uZmlnLnN0YXR1cywKKwlkbmwgdGhlbiB3ZSB3aWxsIGhhdmUgY29uZmlnLnN0YXR1cyBydW4gJENPTkZJR19MVCBsYXRlciwgc28gaXQKKwlkbmwgbmVlZHMgdG8ga25vdyB3aGF0IG5hbWUgaXMgc3RvcmVkIHRoZXJlOgorICAgICAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgICAgIFskU0hFTEwgJENPTkZJR19MVCB8fCBBU19FWElUKDEpXSwgW0NPTkZJR19MVD0nJENPTkZJR19MVCddKV0sCisgICAgZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBpcyBkZXN0aW5lZCBmb3IgY29uZmlnLnN0YXR1cywKKyAgICBkbmwgZXhwYW5kIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyBhbmQgaW5pdCBjb2RlIG5vdzoKKyAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0pXSkKK10pI19MVF9DT05GSUdfQ09NTUFORFMKKworCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSwKK1sKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworTFRDQz0nJExUQ0MnCitMVENGTEFHUz0nJExUQ0ZMQUdTJworY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkW10xCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK19MVF9PVVRQVVRfTElCVE9PTF9JTklUCitdKQorCisjIF9MVF9HRU5FUkFURURfRklMRV9JTklUKEZJTEUsIFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdlbmVyYXRlIGEgY2hpbGQgc2NyaXB0IEZJTEUgd2l0aCBhbGwgaW5pdGlhbGl6YXRpb24gbmVjZXNzYXJ5IHRvCisjIHJldXNlIHRoZSBlbnZpcm9ubWVudCBsZWFybmVkIGJ5IHRoZSBwYXJlbnQgc2NyaXB0LCBhbmQgbWFrZSB0aGUKKyMgZmlsZSBleGVjdXRhYmxlLiAgSWYgQ09NTUVOVCBpcyBzdXBwbGllZCwgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlCisjIGAjIScgc2VxdWVuY2UgYnV0IGJlZm9yZSBpbml0aWFsaXphdGlvbiB0ZXh0IGJlZ2lucy4gIEFmdGVyIHRoaXMKKyMgbWFjcm8sIGFkZGl0aW9uYWwgdGV4dCBjYW4gYmUgYXBwZW5kZWQgdG8gRklMRSB0byBmb3JtIHRoZSBib2R5IG9mCisjIHRoZSBjaGlsZCBzY3JpcHQuICBUaGUgbWFjcm8gZW5kcyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBpZiB0aGUKKyMgZmlsZSBjb3VsZCBub3QgYmUgZnVsbHkgd3JpdHRlbiAoc3VjaCBhcyBpZiB0aGUgZGlzayBpcyBmdWxsKS4KK200X2lmZGVmKFtBU19JTklUX0dFTkVSQVRFRF0sCitbbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSxbQVNfSU5JVF9HRU5FUkFURUQoJEApXSldLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sCitbbTRfcmVxdWlyZShbQVNfUFJFUEFSRV0pXWRubAorW200X3B1c2hkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldZG5sCitbbHRfd3JpdGVfZmFpbD0wCitjYXQgPiQxIDw8X0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiskMgorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kMSA8PFxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCitBU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKK2V4ZWMgQVNfTUVTU0FHRV9GRD4mMQorX0FTRU9GCit0ZXN0ICRsdF93cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkMVtdZG5sCittNF9wb3BkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldKV0pIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVAorCisjIExUX09VVFBVVAorIyAtLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBhbGxvd3MgZWFybHkgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQgKGJlZm9yZQorIyBBQ19PVVRQVVQgaXMgY2FsbGVkKSwgaW5jYXNlIGl0IGlzIHVzZWQgaW4gY29uZmlndXJlIGZvciBjb21waWxhdGlvbgorIyB0ZXN0cy4KK0FDX0RFRlVOKFtMVF9PVVRQVVRdLAorWzogJHtDT05GSUdfTFQ9Li9jb25maWcubHR9CitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkQ09ORklHX0xUXSkKK19MVF9HRU5FUkFURURfRklMRV9JTklUKFsiJENPTkZJR19MVCJdLAorWyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXSkKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorbHRfY2xfc2lsZW50PWZhbHNlCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgQVNfQk9YKFtSdW5uaW5nICRhc19tZS5dKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK2x0X2NsX2hlbHA9IlwKK1xgJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKK2ZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcworZ2VuZXJhdGVkLgorCitVc2FnZTogJFswXSBbW09QVElPTlNdXQorCisgIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisKK2x0X2NsX3ZlcnNpb249IlwKK200X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKK200X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCitjb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KKworQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKword2hpbGUgdGVzdCAkWyNdICE9IDAKK2RvCisgIGNhc2UgJFsxXSBpbgorICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCisgICAgICBlY2hvICIkbHRfY2xfdmVyc2lvbiI7IGV4aXQgMCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OworICAgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAgICAgZGVidWc9OiA7OworICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQorICAgICAgbHRfY2xfc2lsZW50PTogOzsKKworICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworCisgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmICRsdF9jbF9zaWxlbnQ7IHRoZW4KKyAgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorZmkKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxfTFRFT0YKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSkKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EUworQVNfRVhJVCgwKQorX0xURU9GCitjaG1vZCAreCAiJENPTkZJR19MVCIKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBidXQgY29uZmlnLmx0IGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwKKyMgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2csIHdoaWNoIGZhaWxzIG9uIERPUywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0CisjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKKyMgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5sdC4KK2x0X2NsX3N1Y2Nlc3M9OgordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgbHRfY29uZmlnX2x0X2FyZ3M9IiRsdF9jb25maWdfbHRfYXJncyAtLXF1aWV0IgorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4vZGV2L251bGwKKyRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKKyRsdF9jbF9zdWNjZXNzIHx8IEFTX0VYSVQoMSkKK10pIyBMVF9PVVRQVVQKKworCisjIF9MVF9DT05GSUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgSWYgVEFHIGlzIHRoZSBidWlsdC1pbiB0YWcsIGNyZWF0ZSBhbiBpbml0aWFsIGxpYnRvb2wgc2NyaXB0IHdpdGggYQorIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdW50YWdnZWQgY29uZmlnIHZhcnMuICBPdGhlcndpc2UgYWRkIGNvZGUKKyMgdG8gY29uZmlnLnN0YXR1cyBmb3IgYXBwZW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG5hbWVkIGJ5IFRBRyBmcm9tIHRoZQorIyBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCittNF9kZWZ1bihbX0xUX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoWworICBtNF9kZWZpbmUoW19MVF9UQUddLCBtNF9pZihbJDFdLCBbXSwgW0NdLCBbJDFdKSlkbmwKKyAgbTRfaWYoX0xUX1RBRywgW0NdLCBbCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgICAkUk0gIiRjZmdmaWxlIgorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKK19MVF9DT1BZSU5HCitfTFRfTElCVE9PTF9UQUdTCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCitfTFRfTElCVE9PTF9DT05GSUdfVkFSUworX0xUX0xJQlRPT0xfVEFHX1ZBUlMKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworICBfTFRfUFJPR19MVE1BSU4KKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworCisgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK10sCitbY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgorCitkbmwgVW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIHVzZSAkMSBoZXJlLCBzaW5jZSBfTFRfVEFHIGlzIG5vdCBleHBhbmRlZAorZG5sIGluIGEgY29tbWVudCAoaWUgYWZ0ZXIgYSAjKS4KKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9MSUJUT09MX1RBR19WQVJTKF9MVF9UQUcpCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0VPRgorXSlkbmwgL200X2lmCitdLAorW200X2lmKFskMV0sIFtdLCBbCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKK10pIyBfTFRfQ09ORklHCisKKworIyBMVF9TVVBQT1JURURfVEFHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKyMgLS10YWcgb3B0aW9uLCB1c2luZzoKKyMgICAgYXV0b2NvbmYgLS10cmFjZSAnTFRfU1VQUE9SVEVEX1RBRzokMScKK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisKKworIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworbTRfZGVmaW5lKFtfTFRfTEFOR19DX2VuYWJsZWRdLCBbXSkKK200X2RlZmluZShbX0xUX1RBR1NdLCBbXSkKKworCisjIExUX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWYgbm90IGFscmVhZHkgZW5hYmxlZC4KK0FDX0RFRlVOKFtMVF9MQU5HXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCittNF9jYXNlKFskMV0sCisgIFtDXSwJCQlbX0xUX0xBTkcoQyldLAorICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKyAgW0phdmFdLAkJW19MVF9MQU5HKEdDSildLAorICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisgIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorICBbV2luZG93cyBSZXNvdXJjZV0sCVtfTFRfTEFORyhSQyldLAorICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKyAgICBbX0xUX0xBTkcoJDEpXSwKKyAgICBbbTRfZmF0YWwoWyQwOiB1bnN1cHBvcnRlZCBsYW5ndWFnZTogIiQxIl0pXSldKWRubAorXSkjIExUX0xBTkcKKworCisjIF9MVF9MQU5HKExBTkdOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR10sCitbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorICBtNF9hcHBlbmQoW19MVF9UQUdTXSwgWyQxIF0pZG5sCisgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisgIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorXSkjIF9MVF9MQU5HCisKKworIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HX0RFRkFVTFRfQ09ORklHXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICBbTFRfTEFORyhDWFgpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0xUX0xBTkcoQ1hYKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgW0xUX0xBTkcoRjc3KV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtMVF9MQU5HKEY3NyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0ZDXSwKKyAgW0xUX0xBTkcoRkMpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GQ10sIGRlZm4oW0FDX1BST0dfRkNdKVtMVF9MQU5HKEZDKV0pXSkKKworZG5sIFRoZSBjYWxsIHRvIFtBXVtNX1BST0dfR0NKXSBpcyBxdW90ZWQgbGlrZSB0aGF0IHRvIHN0b3AgYWNsb2NhbAorZG5sIHB1bGxpbmcgdGhpbmdzIGluIG5lZWRsZXNzbHkuCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAorICBbTFRfTEFORyhHQ0opXSwKKyAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKKyAgICBbTFRfTEFORyhHQ0opXSwKKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfR0NKXSwKKyAgICAgIFtMVF9MQU5HKEdDSildLAorICAgICAgW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sCisJW200X2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sCisJW200X2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0xUX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtMVF9QUk9HX0dDSl0sIGRlZm4oW0xUX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKV0pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19SQ10sCisgIFtMVF9MQU5HKFJDKV0sCisgIFttNF9kZWZpbmUoW0xUX1BST0dfUkNdLCBkZWZuKFtMVF9QUk9HX1JDXSlbTFRfTEFORyhSQyldKV0pCitdKSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKworIyBPYnNvbGV0ZSBtYWNyb3M6CitBVV9ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbTFRfTEFORyhDKyspXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtMVF9MQU5HKEZvcnRyYW4gNzcpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW0xUX0xBTkcoRm9ydHJhbildKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW0xUX0xBTkcoSmF2YSldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbTFRfTEFORyhXaW5kb3dzIFJlc291cmNlKV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtdKQorCisKKyMgX0xUX1RBR19DT01QSUxFUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RBR19DT01QSUxFUl0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisKK19MVF9ERUNMKFtMVENDXSwgW0NDXSwgWzFdLCBbQSBDIGNvbXBpbGVyXSlkbmwKK19MVF9ERUNMKFtMVENGTEFHU10sIFtDRkxBR1NdLCBbMV0sIFtMVENDIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19MVF9UQUdERUNMKFtDQ10sIFtjb21waWxlcl0sIFsxXSwgW0EgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXJdKWRubAorX0xUX1RBR0RFQ0woW3dpdGhfZ2NjXSwgW0dDQ10sIFswXSwgW0lzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyP10pZG5sCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKK10pIyBfTFRfVEFHX0NPTVBJTEVSCisKKworIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKK10pIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKworCisjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgbGlua2VyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgbGluayB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKK10pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW5fb25jZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLFsKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgQUNfQ0hFQ0tfVE9PTChbRFNZTVVUSUxdLCBbZHN5bXV0aWxdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTk1FRElUXSwgW25tZWRpdF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtMSVBPXSwgW2xpcG9dLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0xdLCBbb3Rvb2xdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0w2NF0sIFtvdG9vbDY0XSwgWzpdKQorICAgIF9MVF9ERUNMKFtdLCBbRFNZTVVUSUxdLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtOTUVESVRdLCBbMV0sCisgICAgICBbVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTElQT10sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MXSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MNjRdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjRdKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZ10sW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2RdLAorICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpXSkKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWddLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdF0sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vXSkKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIF0pCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZ10sW2x0X2N2X2xkX2ZvcmNlX2xvYWRdLAorICAgICAgW2x0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEgMj5jb25mdGVzdC5lcnIKKyAgICAgIF9sdF9yZXN1bHQ9JD8KKyAgICAgIGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMCAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCAyPiYxID4vZGV2L251bGw7IHRoZW4KKwlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcworICAgICAgZWxzZQorCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZmkKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYworICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorICAgIF0pCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4xLiopCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bWzkxXV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLltbMDEyXV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCTEwLiopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisgICAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGZpCisgICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiIgJiYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gIm5vIjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQorCisKKyMgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgorbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKK1sKKyAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR7d2x9LWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisgIGVsc2UKKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKKyAgZmkKKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbTRfaWYoWyQxXSwgW0NYWF0sCitbICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgZmkKK10sW10pCisgIGVsc2UKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICBmaQorXSkKKworIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQorIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCisjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgorIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZworIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KKyMgU3RvcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyBmb3IgZWFjaCBUQUdOQU1FLgorIyBBbGxvdyB0byBvdmVycmlkZSB0aGVtIGZvciBhbGwgdGFncyB0aHJvdWdoIGx0X2N2X2FpeF9saWJwYXRoLgorbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAoraWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCisgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSxbCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nWworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9XScKKyAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaV0sW10pCisgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0iL3Vzci9saWI6L2xpYiIKKyAgZmkKKyAgXSkKKyAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCitmaQorXSkjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisKKworIyBfTFRfU0hFTExfSU5JVChBUkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1NIRUxMX0lOSVRdLAorW200X2RpdmVydF90ZXh0KFtNNFNILUlOSVRdLCBbJDEKK10pXSkjIF9MVF9TSEVMTF9JTklUCisKKworCisjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgaG93IHdlIGNhbiBmYWtlIGFuIGVjaG8gY29tbWFuZCB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2guCisjIEluIHBhcnRpY3VsYXIsIHdpdGggQXV0b2NvbmYgMi42MCBvciBsYXRlciB3ZSBhZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydAorIyBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2ggd2lsbCBmaW5kIGEgc2hlbGwgd2l0aCBhIGJ1aWx0aW4KKyMgcHJpbnRmICh3aGljaCB3ZSBjYW4gdXNlIGFzIGFuIGVjaG8gY29tbWFuZCkuCittNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAorW0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQorIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCitpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50IC1yIC0tJworZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnRmICVzXG4nCitlbHNlCisgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisgIHsKKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJFtdMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIgCit9CisKK2Nhc2UgIiRFQ0hPIiBpbgorICBwcmludGYqKSBBQ19NU0dfUkVTVUxUKFtwcmludGZdKSA7OworICBwcmludCopIEFDX01TR19SRVNVTFQoW3ByaW50IC1yXSkgOzsKKyAgKikgQUNfTVNHX1JFU1VMVChbY2F0XSkgOzsKK2VzYWMKKworbTRfaWZkZWYoW19BU19ERVRFQ1RfU1VHR0VTVEVEXSwKK1tfQVNfREVURUNUX1NVR0dFU1RFRChbCisgIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSR7QkFTSF9WRVJTSU9OK3NldH0iIHx8ICgKKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorICAgIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPYCIgPSAiWCRFQ0hPIiBcCisgICAgICB8fCB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPYCIgPSAiWCRFQ0hPIiApXSldKQorCitfTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCitfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCitdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9XSVRIX1NZU1JPT1QKKyMgLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAorWyAgLS13aXRoLXN5c3Jvb3RbPURJUl0gU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLl0sCitbXSwgW3dpdGhfc3lzcm9vdD1ub10pCisKK2RubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKK2RubCBpbiBjYXNlIHRoZSB1c2VyIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lLgorbHRfc3lzcm9vdD0KK2Nhc2UgJHt3aXRoX3N5c3Jvb3R9IGluICMoCisgeWVzKQorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgIGZpCisgICA7OyAjKAorIC8qKQorICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgOzsgIygKKyBub3wnJykKKyAgIDs7ICMoCisgKikKKyAgIEFDX01TR19SRVNVTFQoWyR7d2l0aF9zeXNyb290fV0pCisgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQorICAgOzsKK2VzYWMKKworIEFDX01TR19SRVNVTFQoWyR7bHRfc3lzcm9vdDotbm99XSkKK19MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAorW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQorCisjIF9MVF9FTkFCTEVfTE9DSworIyAtLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCisgICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKKyAgICBbQUNfTEFOR19QVVNIKEMpCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCitdKSMgX0xUX0VOQUJMRV9MT0NLCisKKworIyBfTFRfUFJPR19BUgorIyAtLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QUk9HX0FSXSwKK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCis6ICR7QVI9YXJ9Cis6ICR7QVJfRkxBR1M9Y3J1fQorX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCitfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdLCBbRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmVdKQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCisgIFtsdF9jdl9hcl9hdF9maWxlPW5vCisgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJworICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAgICAgXSkKKyAgXSkKKworaWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorICBhcmNoaXZlcl9saXN0X3NwZWM9CitlbHNlCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorZmkKK19MVF9ERUNMKFtdLCBbYXJjaGl2ZXJfbGlzdF9zcGVjXSwgWzFdLAorICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKK10pIyBfTFRfUFJPR19BUgorCisKKyMgX0xUX0NNRF9PTERfQVJDSElWRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCitbX0xUX1BST0dfQVIKKworQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK19MVF9ERUNMKFtdLCBbU1RSSVBdLCBbMV0sIFtBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbV0pCisKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorX0xUX0RFQ0woW10sIFtSQU5MSUJdLCBbMV0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCitmaQorCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworICAqKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OworZXNhYworX0xUX0RFQ0woW10sIFtvbGRfcG9zdGluc3RhbGxfY21kc10sIFsyXSkKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbl0sIFswXSwKKyAgICBbV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uXSkKK10pIyBfTFRfQ01EX09MRF9BUkNISVZFCisKKworIyBfTFRfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZWxzZQorICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKK2ZpCitdKSMgX0xUX0NPTVBJTEVSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW19MVF9DT01QSUxFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtdKQorCisKKyMgX0xUX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0xJTktFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICQzIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgJDI9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIG00X2lmKFskNF0sICwgOiwgWyQ0XSkKK2Vsc2UKKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitmaQorXSkjIF9MVF9MSU5LRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW19MVF9MSU5LRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW10pCisKKworIyBMVF9DTURfTUFYX0xFTgorIy0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX0NNRF9NQVhfTEVOXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK0FDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCisgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKltbCSBdXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0ICJYImBmdW5jX2ZhbGxiYWNrX2VjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChub25lKQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KK19MVF9ERUNMKFtdLCBbbWF4X2NtZF9sZW5dLCBbMF0sCisgICAgW1doYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD9dKQorXSkjIExUX0NNRF9NQVhfTEVOCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbTFRfQ01EX01BWF9MRU5dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtdKQorCisKKyMgX0xUX0hFQURFUl9ETEZDTgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0hFQURFUl9ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhbZGxmY24uaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKWRubAorXSkjIF9MVF9IRUFERVJfRExGQ04KKworCisjIF9MVF9UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKKyMgICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZBTFNFLCBBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RSWV9ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIFskNF0KK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorWyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfV0KK19MVF9FT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKworCisjIExUX1NZU19ETE9QRU5fU0VMRgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCisgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCisJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKwkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAorCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisgICAgICBdKQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtkbG9wZW5fc3VwcG9ydF0sIFtlbmFibGVfZGxvcGVuXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK10pIyBMVF9TWVNfRExPUEVOX1NFTEYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW0xUX1NZU19ETE9QRU5fU0VMRl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9DX09dLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorXSkKK19MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCisJW0RvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz9dKQorXSkjIF9MVF9DT01QSUxFUl9DX08KKworCisjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09NUElMRVJfQ19PKFskMV0pCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCitfTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQorXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisKKworIyBfTFRfQ0hFQ0tfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKK19MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAorICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCittNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKExUX09CSkRJUiwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK10pIyBfTFRfQ0hFQ0tfT0JKRElSCisKKworIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKyAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8CisgICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorZmkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKKworaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCisgICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKworCisjIF9MVF9DTURfU1RSSVBMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N0cmlwbGliXSwgWzFdKQorXSkjIF9MVF9DTURfU1RSSVBMSUIKKworCisjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQorbTRfaWYoWyQxXSwKKwlbXSwgWworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbW0EtWmEtel1dOlwpLFwxLGciIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSJzLD0vLC8sZyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJworQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICBsdF9mb289IiI7CisgIGx0X2NvdW50PTA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KKyAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzLC9cKFtbQS1aYS16XV06XCksXDEsZydgIDs7CisgIGVzYWMKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaV0pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4W1s0LTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCittNF9pZihbJDFdLCBbXSxbCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIl0pCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworCisgICosY2wqKQorICAgICMgTmF0aXZlIE1TVkMKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW1thLXpBLVpdXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCittNF9pZihbJDFdLCBbXSxbCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZDEqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFtbMTIzXV0qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMDFdXSogfCBmcmVlYnNkZWxmMy5bWzAxXV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1syLTldXSogfCBmcmVlYnNkZWxmMy5bWzItOV1dKiB8IFwKKyAgZnJlZWJzZDQuW1swLTVdXSB8IGZyZWVic2RlbGY0LltbMC01XV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICA7OworCitpbnRlcml4W1szLTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXgKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgQUNfQ0FDSEVfVkFMKFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLAorICAgIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSlcIiIKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAorCSBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisgICAgXSkKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuW1s4OV1dIHwgb3BlbmJzZDIuW1s4OV1dLiopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisJOzsKKyAgICAgICopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCTs7CisgICAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKK19MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCisgICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorICAgIHJlc3RvcmVkIGF0IGxpbmsgdGltZV0pCitfTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKKyAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCitfTFRfREVDTChbXSwgW25lZWRfdmVyc2lvbl0sIFswXSwgW0RvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/XSkKK19MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQorX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfdmFyXSwgWzBdLFtTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAorICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKK19MVF9ERUNMKFtdLCBbbGlibmFtZV9zcGVjXSwgWzFdLCBbRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXhdKQorX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCisgICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorICAgIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUVdXSkKK19MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCisgICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQorX0xUX0RFQ0woW10sIFtpbnN0YWxsX292ZXJyaWRlX21vZGVdLCBbMV0sCisgICAgW1Blcm1pc3Npb24gbW9kZSBvdmVycmlkZSBmb3IgaW5zdGFsbGF0aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnldKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKKyAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorICAgIG5vdCBzaG93bl1dKQorX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitdKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgorCisKKyMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CitBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKK1tjYXNlICRNQUdJQ19DTUQgaW4KK1tbXFwvKl0gfCAgPzpbXFwvXSpdKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitkbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KK2RubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKK2RubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCisgIGFjX2R1bW15PSJtNF9pZihbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWNdKQorTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCisJIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKK10pIyBfTFRfUEFUSF9UT09MX1BSRUZJWAorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbX0xUX1BBVEhfVE9PTF9QUkVGSVhdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCisKKworIyBfTFRfUEFUSF9NQUdJQworIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKK1tfTFRfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBfTFRfUEFUSF9UT09MX1BSRUZJWChmaWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQorICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCitdKSMgX0xUX1BBVEhfTUFHSUMKKworCisjIExUX1BBVEhfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbTFRfUEFUSF9MRF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJExEKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCitfTFRfUEFUSF9MRF9HTlUKK0FDX1NVQlNUKFtMRF0pCisKK19MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKK10pIyBMVF9QQVRIX0xECisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitBVV9BTElBUyhbQUNfUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xEXSwgW10pCisKKworIyBfTFRfUEFUSF9MRF9HTlUKKyMtIC0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgX0xUX1BBVEhfTERfR05VCisKKworIyBfTFRfQ01EX1JFTE9BRAorIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorbTRfZGVmdW4oW19MVF9DTURfUkVMT0FEXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfZmxhZ10sIFsxXSwgW0hvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXNdKWRubAorX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKK10pIyBfTFRfQ01EX1JFTE9BRAorCisKKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCisgIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitoYWlrdSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nXQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV1cLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKK10pCisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKK19MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2dsb2JdLCBbMV0sCisgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK19MVF9ERUNMKFtdLCBbd2FudF9ub2Nhc2VnbG9iXSwgWzFdLAorICAgIFtGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorZWxzZQorICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhaworCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmldKQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFtkdW1wYmluICJsaW5rIC1kdW1wIl0sIDopCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIEFDX1NVQlNUKFtEVU1QQklOXSkKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCitBQ19TVUJTVChbTk1dKQorX0xUX0RFQ0woW10sIFtOTV0sIFsxXSwgW0EgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyXSlkbmwKKworQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKKyAgW2x0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCpdKQorXSkjIExUX1BBVEhfTk0KKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK0FVX0FMSUFTKFtBQ19QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKKworIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCitsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICA7OworZXNhYworXSkKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCitfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKK10pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorCisKKyMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAorbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAorW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCit0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAorICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCitfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisKKworIyBMVF9MSUJfTQorIyAtLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbTFRfTElCX01dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAorICA7OworKi1uY3Itc3lzdjQuMyopCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQorICA7OworKikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iLWxtIikKKyAgOzsKK2VzYWMKK0FDX1NVQlNUKFtMSUJNXSkKK10pIyBMVF9MSUJfTQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0NIRUNLX0xJQk1dLCBbTFRfTElCX01dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19DSEVDS19MSUJNXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfTk9fUlRUSShbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfTk9fUlRUSV0sCitbbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgbnZjYyopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCisKKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAorICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIl0pCitmaQorX0xUX1RBR0RFQ0woW25vX2J1aWx0aW5fZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9uc10pCitdKSMgX0xUX0NPTVBJTEVSX05PX1JUVEkKKworCisjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK0FDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAorWworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbW0JDRFRdXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tbQkNERUdSU1RdXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tbQkNERUdRUlNUXV0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW1tCRFJUXV0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbW0FCRFRdXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbW0RGTlNUVV1dJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKyIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKKyIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAorIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCwgYSwgL1x8fFxyLyk7IHNwbGl0KGFbMl0sIHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IHNbMV0sIHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgICcgcHJmeD1eJGFjX3N5bXByZnhdIgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVCBjb25zdAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK0xUQCZ0QF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tbXV0gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKKwkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorXSkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCitlbHNlCisgIEFDX01TR19SRVNVTFQob2spCitmaQorCisjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZmkKKworX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfcGlwZV0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwgWzFdLAorICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKKyAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKKyAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWRdKQorX0xUX0RFQ0woW10sIFtubV9maWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciAkTk1dKQorXSkgIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisKKworIyBfTFRfQ09NUElMRVJfUElDKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX1BJQ10sCitbbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKworbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgICA7OworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAgICAgIDs7CisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqcW54KiB8ICpudG8qKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeFtbNC05XV0qKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorCW00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwkgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorCTs7CisgICAgICBkZ3V4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZWMrKyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICBmaQorCSAgICA7OworCSAgYUNDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGhwcGEqNjQqfGlhNjQqKQorCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGludGVyaXgqKQorCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQorCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICAgIDs7CisJICBlY3BjKiApCisJICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwkgICAgOzsKKwkgIGljcGMqICkKKwkgICAgIyBJbnRlbCBDKyssIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorCSAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwkgICAgOzsKKwkgIHBnQ0MqIHwgcGdjcHAqKQorCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgeGxjKiB8IHhsQyogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikKKwkgICAgIyBJQk0gWEwgOC4wLCA5LjAgb24gUFBDIGFuZCBCbHVlR2VuZQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCopCisJOzsKKyAgICAgICpxbngqIHwgKm50byopCisgICAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgICA7OworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIDs7CisJICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBwc29zKikKKwk7OworICAgICAgc29sYXJpcyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICA7OworCSAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN1bm9zNCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdnh3b3JrcyopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworCTs7CisgICAgZXNhYworICBmaQorXSwKK1sKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1YbGlua2VyICcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVhjb21waWxlciAtZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKyAgICAgIGZpCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy0tc3RhdGljJworCTs7CisgICAgICBuYWdmb3IqKQorCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCTs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBjY2MqKQorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICAgIDs7CisgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKKwkgIDs7CisJKlN1blwgQyopCisJICAjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgorICAgIDs7Citlc2FjCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSldLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAorICAgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzLCAkMSldLAorICAgIFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSldLCBbXSwKKyAgICBbY2FzZSAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIgOzsKKyAgICAgZXNhY10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ub10pCitmaQorX0xUX1RBR0RFQ0woW3BpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfcGljXSwgWzFdLAorCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorCitfTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKK19MVF9MSU5LRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrc10sCisgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKKyAgJGx0X3RtcF9zdGF0aWNfZmxhZywKKyAgW10sCisgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKK19MVF9UQUdERUNMKFtsaW5rX3N0YXRpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfc3RhdGljXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nXSkKK10pIyBfTFRfQ09NUElMRVJfUElDCisKKworIyBfTFRfTElOS0VSX1NITElCUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCitbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICBjYXNlICRob3N0X29zIGluCisgIGFpeFtbNC05XV0qKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKyAgICAjIEFsc28sIEFJWCBubSB0cmVhdHMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZAorICAgICMgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisgICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgorICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBjbCopIDs7CisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgOzsKKyAgZXNhYworXSwgWworICBydW5wYXRoX3Zhcj0KKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKyAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgX0xUX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KK2RubCBOb3RlIGFsc28gYWRqdXN0IGV4Y2x1ZGVfZXhwc3ltcyBmb3IgQysrIGFib3ZlLgorICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKworICAjIE9uIHNvbWUgdGFyZ2V0cywgR05VIGxkIGlzIGNvbXBhdGlibGUgZW5vdWdoIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIKKyAgIyB0aGF0IHdlJ3JlIGJldHRlciBvZmYgdXNpbmcgdGhlIG5hdGl2ZSBpbnRlcmZhY2UgZm9yIGJvdGguCisgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorCSMgVGhlIEFJWCBwb3J0IG9mIEdOVSBsZCBoYXMgYWx3YXlzIGFzcGlyZWQgdG8gY29tcGF0aWJpbGl0eQorCSMgd2l0aCB0aGUgbmF0aXZlIGxpbmtlci4gIEhvd2V2ZXIsIGFzIHRoZSB3YXJuaW5nIGluIHRoZSBHTlUgbGQKKwkjIGJsb2NrIHNheXMsIHZlcnNpb25zIGJlZm9yZSAyLjE5LjUqIGNvdWxkbid0IHJlYWxseSBjcmVhdGUgd29ya2luZworCSMgc2hhcmVkIGxpYnJhcmllcywgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJmYWNlIHVzZWQuCisJY2FzZSBgJExEIC12IDI+JjFgIGluCisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi4xOS41KikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLltbMi05XV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFtbMy05XV0qKSA7OworCSAgKikKKwkgICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCTs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSIgPSB5ZXM7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCisgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgorICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgorICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKKyAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4W1szLTldXSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAorKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCisqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKKyoqKiAyLjIwIG9yIGFib3ZlLCBvciBtb2RpZnkgeW91ciBQQVRIIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZC4KKyoqKiBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gcmVzdGFydCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgorCitfTFRfRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBoYWlrdSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtbY0NdXSogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCSAgOzsKKwllc2FjCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCisgICAgICBydW5wYXRoX3Zhcj0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICBlbHNlCisgICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKikKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFtbNC05XV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwkjIEFsc28sIEFJWCBubSB0cmVhdHMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwKKwkjIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICBmaQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbWzQ1XV0qKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgY2wqKQorCSMgTmF0aXZlIE1TVkMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwlfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCV9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICBlbHNlCisJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICBmaX4KKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKwkgIGxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworCSMgRG9uJ3QgdXNlIHJhbmxpYgorCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisJX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisJICAgICouZXhlfCouRVhFKSA7OworCSAgICAqKQorCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorCSAgICAgIDs7CisJICBlc2FjfgorCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisJICBmaScKKwk7OworICAgICAgKikKKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBmcmVlYnNkMSopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICBmcmVlYnNkMiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nK2IgJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCW00X2lmKCQxLCBbXSwgWworCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0CisJICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKKwkgIF9MVF9MSU5LRVJfT1BUSU9OKFtpZiAkQ0MgdW5kZXJzdGFuZHMgLWJdLAorCSAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfX2IsICQxKSwgWy1iXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10sCisJICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJ10pXSwKKwkgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddKQorCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKwkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorCUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sXSwKKwkgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbF0sCisJICBbc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisJICAgQUNfTElOS19JRkVMU0UoCisJICAgICBbQUNfTEFOR19TT1VSQ0UoCisJICAgICAgICBbQUNfTEFOR19DQVNFKFtDXSwgW1tpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9XV0sCisJCQkgICAgICBbQysrXSwgW1tpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9XV0sCisJCQkgICAgICBbRm9ydHJhbiA3N10sIFtbCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgZW5kXV0sCisJCQkgICAgICBbRm9ydHJhbl0sIFtbCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgZW5kXV0pXSldLAorCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAorCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ub10pCisgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiXSkKKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJZmkKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwllbHNlCisJICBjYXNlICRob3N0X29zIGluCisJICAgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICAgOzsKKwkgICAqKQorCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgICA7OworCSAgZXNhYworCWZpCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICBlbHNlCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJDb21waWxlcnMgNS4wIiopCisJICB3bGFyYz0nJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR7d2x9JworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKyAgICAgICopCisJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCisJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJZWxzZQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmxhcmdlZHluc3ltJworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKK10pCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCit0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK19MVF9UQUdWQVIod2l0aF9nbnVfbGQsICQxKT0kd2l0aF9nbnVfbGQKKworX0xUX0RFQ0woW10sIFtsaWJleHRdLCBbMF0sIFtPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIildKWRubAorX0xUX0RFQ0woW10sIFtzaHJleHRfY21kc10sIFsxXSwgW1NoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXh0cmFjdF9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW5dLAorCVtsdF9jdl9dX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpLAorCVskUk0gY29uZnRlc3QqCisJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKwlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgc29uYW1lPWNvbmZ0ZXN0CisJICBsaWI9Y29uZnRlc3QKKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorCSAgZGVwbGlicz0KKwkgIHdsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQorCSAgcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQorCSAgY29tcGlsZXJfZmxhZ3M9LXYKKwkgIGxpbmtlcl9mbGFncz0tdgorCSAgdmVyc3RyaW5nPQorCSAgb3V0cHV0X29iamRpcj0uCisJICBsaWJuYW1lPWNvbmZ0ZXN0CisJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKwkgIGlmIEFDX1RSWV9FVkFMKF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCisJICB0aGVuCisJICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICBlbHNlCisJICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgZmkKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorCWZpCisJJFJNIGNvbmZ0ZXN0KgorCV0pCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9JGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworX0xUX1RBR0RFQ0woW2J1aWxkX2xpYnRvb2xfbmVlZF9sY10sIFthcmNoaXZlX2NtZHNfbmVlZF9sY10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllc10pCitfTFRfVEFHREVDTChbYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwKKyAgICBbZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpY10pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVuc10pCitfTFRfVEFHREVDTChbXSwgW3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9uZWVkc19vYmplY3RdLCBbMV0sCisgICAgW1doZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5XSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2NtZHNdLCBbMl0sIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworICAgIGEgc2hhcmVkIGFyY2hpdmUuXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFt3aXRoX2dudV9sZF0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90XSkKK19MVF9UQUdERUNMKFtdLCBbYWxsb3dfdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0XSkKK19MVF9UQUdERUNMKFtdLCBbbm9fdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0ZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICAgIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRdLCBbMV0sCisgICAgW1tJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKyAgICBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF1dKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0XSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisgICAgbGlicmFyeSBpcyByZWxvY2F0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisgICAgYWdhaW5zdCBpdF0pCitfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgW1NldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtleGNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCitfTFRfVEFHREVDTChbXSwgW3ByZWxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zXSkKK19MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCitkbmwgRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK2RubCBfTFRfVEFHREVDTChbXSwgW3RocmVhZF9zYWZlX2ZsYWdfc3BlY10sIFsxXSwKK2RubCAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQgc2FmZSBvYmplY3RzXSkKK10pIyBfTFRfTElOS0VSX1NITElCUworCisKKyMgX0xUX0xBTkdfQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK2x0X3NhdmVfQ0M9IiRDQyIKK0FDX0xBTkdfUFVTSChDKQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKK19MVF9UQUdfQ09NUElMRVIKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorQUNfTEFOR19QT1AKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIEFDX1BST0dfQ1hYQ1BQCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworQUNfTEFOR19QVVNIKEMrKykKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgbHRfc2F2ZV9MRD0kTEQKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBHQ0M9JEdYWAorICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCisgIGZpCisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECisgIGZpCisgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgIENDPSR7Q1hYLSJjKysifQorICBDRkxBR1M9JENYWEZMQUdTCisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworICAgICAgTFRfUEFUSF9MRAorCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgICAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8CisJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICAgIHdsYXJjPQorCisgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgICBmaQorCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSIiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIDs7CisgICAgICAgICAgZXNhYworCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICAgIGZpCisKKyAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKyAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKyAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgICAgOgorCSAgZWxzZQorCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworICAgICAgICAgIGVsc2UKKwkgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICAgIGVsc2UKKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworCSMgZXhwb3J0LgorICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisgICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgIyBleGVjdXRhYmxlLgorICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisKKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgICAgIGVsc2UKKwkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICBlbHNlCisJICAgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkCisJICAgICMgbGlicmFyaWVzLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgIGJlb3MqKQorCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIGNob3J1cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgKikKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorCSxjbCogfCBubyxjbCopCisJICAjIE5hdGl2ZSBNU1ZDCisJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisJICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCSAgbGliZXh0PWxpYgorCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJICBzaHJleHRfY21kcz0iLmRsbCIKKwkgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgICAgJFNFRCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICAgIGVsc2UKKwkgICAgICAkU0VEIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgICAgZml+CisJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKwkgICAgbGlua25hbWVzPScKKwkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgorCSAgX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKwkgIF9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisJICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisJICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKwkgICAgICAqKQorCQlsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJCTs7CisJICAgIGVzYWN+CisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisJICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisJICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgICAgZmknCisJICA7OworCSopCisJICAjIGcrKworCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisKKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgZWxzZQorCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGZpfgorCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkW1sxMl1dKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZQorCSMgc3dpdGNoIHRvIEVMRgorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QtZWxmKikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKKyAgICAgICAgIyBjb252ZW50aW9ucworICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgICA7OworCisgICAgICBnbnUqKQorICAgICAgICA7OworCisgICAgICBoYWlrdSopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICBpYTY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICBlc2FjCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBpbnRlcml4W1szLTldXSopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqICkKKwkgICAgIyBJbnRlbCBDKysKKwkgICAgd2l0aF9nbnVfbGQ9eWVzCisJICAgICMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCisJICAgICMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisJICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSAgICAgICoiVmVyc2lvbiA3LiIqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorCSAgICAgICAgdG1wX2lkeW49CisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKwkJZXNhYworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICA7OworICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgY2FzZSBgJENDIC1WYCBpbgorCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorCQkkUkFOTElCICRvbGRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKwk7OworCisgICAgICBvcGVuYnNkMiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgb3BlbmJzZCopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCQk7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKwkgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgorCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgICAqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBwc29zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgc3Vub3M0KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBzb2xhcmlzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcworCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZmkKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCisJICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCQkqKQorCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorCSAgICAgICciJF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIgorCSAgICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+CisJICAgICAgJyIkX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpIgorCSAgICA7OworCSAgKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCisgICAgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19DWFhfQ09ORklHCisKKworIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZnVuY19zdHJpcG5hbWVfY25mIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMKKyMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIChub24tWFNJKSB2ZXJzaW9uIG9mIGZ1bmNfc3RyaXBuYW1lLAorIyBleGNlcHQgdGhpcyBvbmUgY2FuIGJlIHVzZWQgYnkgbTQgY29kZSB0aGF0IG1heSBiZSBleGVjdXRlZCBieSBjb25maWd1cmUsCisjIHJhdGhlciB0aGFuIHRoZSBsaWJ0b29sIHNjcmlwdC4KK200X2RlZnVuKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSxbZG5sCitBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKQorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKQorZnVuY19zdHJpcG5hbWVfY25mICgpCit7CisgIGNhc2UgJHsyfSBpbgorICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisgIGVzYWMKK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKK10pIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisKKyMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCittNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitBQ19SRVFVSVJFKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSlkbmwKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwcmVkZXBzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorCitkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKK2RubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCitkbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCitkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCittNF9pZihbJDFdLCBbXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitpbnQgYTsKK3ZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9CitfTFRfRU9GCitdLCBbJDFdLCBbQ1hYXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCitdLCBbJDFdLCBbRjc3XSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlcio0IGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtGQ10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0dDSl0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcHVibGljIGNsYXNzIGZvbyB7CisgIHByaXZhdGUgaW50IGE7CisgIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworICAgIGEgPSAwOworICB9Cit9OworX0xUX0VPRgorXSkKKworX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7Citlc2FjCisKK2RubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKK2RubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiB8fAorICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKyAgICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICBmaQorICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgIGVzYWMKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICR7cHJldn0gaW4KKwkgLUwgfCAtUikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICBwcmV2PQorICAgICAgIDs7CisKKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCisKKyAgICBlc2FjCisgIGRvbmUKKworICAjIENsZWFuIHVwLgorICBybSAtZiBhLm91dCBhLmV4ZQorZWxzZQorICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgJDEgdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorbTRfaWYoWyQxXSwgW0NYWF0sCitbY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFtbMy05XV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyogfCBzdW5DQyopCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCisgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAorICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CitpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKKyAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwX29iamVjdHNdLCBbMV0sCisgICAgW0RlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworICAgIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcF9vYmplY3RzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoXSwgWzFdLAorICAgIFtUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworICAgIGEgc2hhcmVkIGxpYnJhcnldKQorXSkjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMKKworCisjIF9MVF9MQU5HX0Y3N19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKK1tBQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKK2lmIHRlc3QgLXogIiRGNzciIHx8IHRlc3QgIlgkRjc3IiA9ICJYbm8iOyB0aGVuCisgIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWYKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIENDPSR7Rjc3LSJmNzcifQorICBDRkxBR1M9JEZGTEFHUworICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisgIEdDQz0kRzc3CisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0iJGx0X3NhdmVfQ0MiCisgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GNzdfQ09ORklHCisKKworIyBfTFRfTEFOR19GQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0ZDX0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4pCisKK2lmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCAiWCRGQyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GQz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmYyB0ZXN0IHNvdXJjZXMuCithY19leHQ9JHthY19mY19zcmNleHQtZn0KKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGZjIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRkMgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIENDPSR7RkMtImY5NSJ9CisgIENGTEFHUz0kRkNGTEFHUworICBjb21waWxlcj0kQ0MKKyAgR0NDPSRhY19jdl9mY19jb21waWxlcl9nbnUKKworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJGFjX2N2X2ZjX2NvbXBpbGVyX2dudSIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0kbHRfc2F2ZV9DQworICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRkNfQ09ORklHCisKKworIyBfTFRfTEFOR19HQ0pfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgSmF2YSBDb21waWxlciBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfR0NKX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19HQ0pdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1qYXZhCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbW11dIGFyZ3YpIHt9OyB9JworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9JENDCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dDSi0iZ2NqIn0KK0NGTEFHUz0kR0NKRkxBR1MKK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19HQ0pfQ09ORklHCisKKworIyBfTFRfTEFOR19SQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX1JDXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PXJjCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPQorQ0M9JHtSQy0id2luZHJlcyJ9CitDRkxBR1M9Citjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKworaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICA6CisgIF9MVF9DT05GSUcoJDEpCitmaQorCitHQ0M9JGx0X3NhdmVfR0NDCitBQ19MQU5HX1JFU1RPUkUKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfUkNfQ09ORklHCisKKworIyBMVF9QUk9HX0dDSgorIyAtLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfR0NKXSwKK1ttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAorICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCisgICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQorICAgICAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCisgICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19HQ0pdLCBbTFRfUFJPR19HQ0pdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sIFtdKQorCisKKyMgTFRfUFJPR19SQworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19SQ10sCitbQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKKworCisjIF9MVF9ERUNMX0VHUkVQCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQorX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKK19MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQorZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KK0FDX1NVQlNUKFtHUkVQXSkKK10pCisKKworIyBfTFRfREVDTF9PQkpEVU1QCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAorW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCitBQ19TVUJTVChbT0JKRFVNUF0pCitdKQorCisjIF9MVF9ERUNMX0RMTFRPT0wKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCittNF9kZWZ1bihbX0xUX0RFQ0xfRExMVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKK19MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSkKK0FDX1NVQlNUKFtETExUT09MXSkKK10pCisKKyMgX0xUX0RFQ0xfU0VECisjIC0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcworIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgorbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCitbQUNfUFJPR19TRUQKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKK19MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitfTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKKyAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQorXSkjIF9MVF9ERUNMX1NFRAorCittNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittNF9kZWZ1bihbQUNfUFJPR19TRURdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKK1sjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KKyMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworbHRfYWNfbWF4PTAKK2x0X2FjX2NvdW50PTAKKyMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCisjIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgorZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCisgIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCisgIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgorICBsdF9hY19jb3VudD0wCisgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgorICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgYnJlYWsKKyAgZmkKKyAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgorICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCisgICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCisgICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKKyAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCisgICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKKyAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgorICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAorICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGZpCisgIGRvbmUKK2RvbmUKK10pCitTRUQ9JGx0X2N2X3BhdGhfU0VECitBQ19TVUJTVChbU0VEXSkKK0FDX01TR19SRVNVTFQoWyRTRURdKQorXSkjQUNfUFJPR19TRUQKK10pI200X2lmbmRlZgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfU0VEXSwgW0FDX1BST0dfU0VEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdLCBbXSkKKworCisjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBvdXQgd2hldGhlciB0aGUgc2hlbGwgaXMgQm91cm5lIG9yIFhTSSBjb21wYXRpYmxlLAorIyBvciBoYXMgc29tZSBvdGhlciB1c2VmdWwgZmVhdHVyZXMuCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHNdKQorIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKK3hzaV9zaGVsbD1ubworKCBfbHRfZHVtbXk9ImEvYi9jIgorICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgeHNpX3NoZWxsPXllcworQUNfTVNHX1JFU1VMVChbJHhzaV9zaGVsbF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbeHNpX3NoZWxsPSckeHNpX3NoZWxsJ10pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgIis9Il0pCitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiRbMV0rPVwkWzJdIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICA+L2Rldi9udWxsIDI+JjEgXAorICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCitBQ19NU0dfUkVTVUxUKFskbHRfc2hlbGxfYXBwZW5kXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFtsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnXSkKKworaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCitmaQorX0xUX0RFQ0woW10sIFtsdF91bnNldF0sIFswXSwgW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCJdKWRubAorCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworX0xUX0RFQ0woW1NQMk5MXSwgW2x0X1NQMk5MXSwgWzFdLCBbdHVybiBzcGFjZXMgaW50byBuZXdsaW5lc10pZG5sCitfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKK10pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKworCisjIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UgKEZVTkNOQU1FLCBSRVBMQUNFTUVOVC1CT0RZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW4gYCRjZmdmaWxlJywgbG9vayBmb3IgZnVuY3Rpb24gRlVOQ05BTUUgZGVsaW1pdGVkIGJ5IGBeRlVOQ05BTUUgKCkkJyBhbmQKKyMgJ159IEZVTkNOQU1FICcsIGFuZCByZXBsYWNlIGl0cyBib2R5IHdpdGggUkVQTEFDRU1FTlQtQk9EWS4KK200X2RlZnVuKFtfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFXSwKK1tkbmwgeworc2VkIC1lICcvXiQxICgpJC8sL159ICMgJDEgL2NcCiskMSAoKVwKK3tcCittNF9icGF0c3Vic3RzKFskMl0sIFskXSwgW1xcXSwgW15cKFsJIF1cKV0sIFtcXFwxXSkKK30gIyBFeHRlbmRlZC1zaGVsbCAkMSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorXSkKKworCisjIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXBsYWNlIGV4aXN0aW5nIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIHNoZWxsIGZ1bmN0aW9ucyB3aXRoCisjIGVxdWl2YWxlbnQgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRob3NlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUuLgorbTRfZGVmdW4oW19MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlNdLAorW2lmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lXSwgW2RubAorICAgIGNhc2UgJHsxfSBpbgorICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgICBlc2FjXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Jhc2VuYW1lXSwgW2RubAorICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWVdLCBbZG5sCisgICAgY2FzZSAkezF9IGluCisgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICAgIGVzYWMKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3N0cmlwbmFtZV0sIFtkbmwKKyAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn0KKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X3Nob3J0X29wdF0sIFtkbmwKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQorICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbG8yb10sIFtkbmwKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CisgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKyAgICBlc2FjXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3hmb3JtXSwgWyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FyaXRoXSwgWyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sZW5dLCBbICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfV0pCitmaQorCitpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kXSwgWyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF9xdW90ZWRdLCBbZG5sCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKK2RubCBtNCBleHBhbnNpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgdGhlbiB0aGUgc2hlbGwgZXZhbCB0dXJucyB0aGF0IGludG8gXAorICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXSkKKworICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZWxzZQorICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZmkKKworaWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKyAgQUNfTVNHX1dBUk4oW1VuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGVdKQorZmkKK10pCisKKyMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGV0ZXJtaW5lIHdoaWNoIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieQorIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCisjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KK200X2RlZnVuKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl90b19ob3N0X2ZpbGVfY21kLAorW2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICotKi1jeWd3aW4qICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICA7OworZXNhYworXSkKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b19ob3N0X2ZpbGVfY21kXSkKK19MVF9ERUNMKFt0b19ob3N0X2ZpbGVfY21kXSwgW2x0X2N2X3RvX2hvc3RfZmlsZV9jbWRdLAorICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKWRubAorCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQsCitbI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCitjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKK2VzYWMKK10pCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCitBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0pCitfTFRfREVDTChbdG9fdG9vbF9maWxlX2NtZF0sIFtsdF9jdl90b190b29sX2ZpbGVfY21kXSwKKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKWRubAorXSkjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCmRpZmYgLS1naXQgYS9tNC9sdG9wdGlvbnMubTQgYi9tNC9sdG9wdGlvbnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjZmQ1MQotLS0gL2Rldi9udWxsCisrKyBiL200L2x0b3B0aW9ucy5tNApAQCAtMCwwICsxLDM2OSBAQAorIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICBJbmMuCisjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCisKKyMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCitbW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKworIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCisjIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCisjIHNhdmVkIGFzIGEgZmxhZy4KK200X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKK200X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uIGAkMiddKV0pW11kbmwKK10pCisKKworIyBfTFRfSUZfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorbTRfZGVmaW5lKFtfTFRfSUZfT1BUSU9OXSwKK1ttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQorCisKKyMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtTk9ULVNFVCB1bmxlc3MgYWxsIG9wdGlvbnMgaW4gT1BUSU9OLUxJU1QgZm9yIE1BQ1JPLU5BTUUKKyMgYXJlIHNldC4KK200X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKK1ttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKwkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAorCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCittNF9pZmRlZihbJDBfZm91bmRdLCBbbTRfdW5kZWZpbmUoWyQwX2ZvdW5kXSldLCBbJDMKK10pW11kbmwKK10pCisKKworIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAorIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAorIyBMVF9PUFRJT05fREVGSU5FLCBkaXNwYXRjaCB0byB0aGF0IG1hY3JvOyBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQKKyMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgorbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCitbIyBTZXQgb3B0aW9ucworbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisgICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKKworbTRfaWYoWyQxXSxbTFRfSU5JVF0sWworICBkbmwKKyAgZG5sIFNpbXBseSBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAoaS5lIG9mZikgaWYgYm9vbGVhbiBvcHRpb25zIHdlcmUgbm90CisgIGRubCBzcGVjaWZpZWQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubworICBdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KKyAgXSkKKyAgZG5sCisgIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCisgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCisgIGRubCBgc2hhcmVkJyBub3IgYGRpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCisgIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCisgIAkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKKyAgXSkKK10pIyBfTFRfU0VUX09QVElPTlMKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1hY3JvcyB0byBoYW5kbGUgTFRfSU5JVCBvcHRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgX0xUX01BTkdMRV9ERUZVTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCitbW19MVF9PUFRJT05fREVGVU5fXW00X2JwYXRzdWJzdChtNF90b3VwcGVyKFskMV9fJDJdKSwgW1teQS1aMC05X11dLCBbX10pXSkKKworCisjIExUX09QVElPTl9ERUZJTkUoTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIENPREUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAorW200X2RlZmluZShfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLCBbJDNdKVtdZG5sCitdKSMgTFRfT1BUSU9OX0RFRklORQorCisKKyMgZGxvcGVuCisjIC0tLS0tLQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj15ZXMKK10pCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKKworCisjIHdpbjMyLWRsbAorIyAtLS0tLS0tLS0KKyMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAorW2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzFdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAorIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCisjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU1RBVElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCisgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKKwlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAorICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKKyAgICBbcGljX21vZGU9ZGVmYXVsdF0pCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCisKK19MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCitdKSMgX0xUX1dJVEhfUElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQorCisjIE9sZCBuYW1lOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTFRETF9JTklUIE9wdGlvbnMgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKK200X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCisKK200X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKZGlmZiAtLWdpdCBhL200L2x0c3VnYXIubTQgYi9tNC9sdHN1Z2FyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDBhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sdHN1Z2FyLm00CkBAIC0wLDAgKzEsMTIzIEBACisjIGx0c3VnYXIubTQgLS0gbGlidG9vbCBtNCBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi1BdXRvY29uZi0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNiBsdHN1Z2FyLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRTVUdBUl9WRVJTSU9OXSwgW200X2lmKFswLjFdKV0pCisKKworIyBsdF9qb2luKFNFUCwgQVJHMSwgW0FSRzIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIEFSRzFTRVBBUkcyLi4uU0VQQVJHbiwgb21pdHRpbmcgW10gYXJndW1lbnRzIGFuZCB0aGVpcgorIyBhc3NvY2lhdGVkIHNlcGFyYXRvci4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2pvaW4gZnJvbSBBdXRvY29uZiAyLjYyLCBzaW5jZSBhbGwgZWFybGllcgorIyB2ZXJzaW9ucyBpbiBtNHN1Z2FyIGhhZCBidWdzLgorbTRfZGVmaW5lKFtsdF9qb2luXSwKK1ttNF9pZihbJCNdLCBbMV0sIFtdLAorICAgICAgIFskI10sIFsyXSwgW1skMl1dLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDJdX10pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCittNF9kZWZpbmUoW19sdF9qb2luXSwKK1ttNF9pZihbJCMkMl0sIFsyXSwgW10sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMSQyXV0pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisKKworIyBsdF9jYXIoTElTVCkKKyMgbHRfY2RyKExJU1QpCisjIC0tLS0tLS0tLS0tLQorIyBNYW5pcHVsYXRlIG00IGxpc3RzLgorIyBUaGVzZSBtYWNyb3MgYXJlIG5lY2Vzc2FyeSBhcyBsb25nIGFzIHdpbGwgc3RpbGwgbmVlZCB0byBzdXBwb3J0CisjIEF1dG9jb25mLTIuNTkgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCittNF9kZWZpbmUoW2x0X2Nkcl0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCAxLCBbXSwKKyAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW2x0X3VucXVvdGVdLCAkMSkKKworCisjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1InYFNUUklORycuCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorIyB0aGFuIGRlZmluZWQgYW5kIGVtcHR5KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorIyB2ZXJzaW9ucyBvZiBtNHN1Z2FyIG1pc3Rha2VubHkgZXhwYW5kZWQgU0VQQVJBVE9SIGJ1dCBub3QgU1RSSU5HLgorbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorW200X2RlZmluZShbJDFdLAorCSAgIG00X2lmZGVmKFskMV0sIFttNF9kZWZuKFskMV0pWyQzXV0pWyQyXSldKQorCisKKworIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIFNFUCBkZWxpbWl0ZWQgbGlzdCBvZiBhbGwgcGFpcmVkIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBvZgorIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisjIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfY29tYmluZSBhZGRlZCBpbiBBdXRvY29uZiAyLjYyLgorbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKK1ttNF9pZihtNF9ldmFsKFskIyA+IDNdKSwgWzFdLAorICAgICAgIFttNF9wdXNoZGVmKFtfTHRfc2VwXSwgW200X2RlZmluZShbX0x0X3NlcF0sIG00X2RlZm4oW2x0X2Nhcl0pKV0pXV1kbmwKK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisJICAgICBbbTRfZm9yZWFjaChbX0x0X3N1ZmZpeF0sCisJCV1tNF9kcXVvdGUobTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpKSlbLAorCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKworCisjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmZiBNQUNSTy1OQU1FIGRvZXMgbm90IHlldCBjb250YWluIFZBUk5BTUUsIHRoZW4gYXBwZW5kIGl0IChkZWxpbWl0ZWQKKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCittNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKwkJIFskNV0pXSwKKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKworCisjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkXSwKK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKworCisjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkX3N1YmtleV0sCitbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisKKworIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9mZXRjaF0sCitbbTRfaWZ2YWwoWyQzXSwKKwltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCisgICAgbTRfaWZkZWYoWyQxKCQyKV0sIFttNF9kZWZuKFskMSgkMildKV0pKV0pCisKKworIyBsdF9pZl9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0sIFZBTFVFLCBJRi1UUlVFLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKK1ttNF9pZihsdF9kaWN0X2ZldGNoKFskMV0sIFskMl0sIFskM10pLCBbJDRdLAorCVskNV0sCisgICAgWyQ2XSldKQorCisKKyMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorW200X2lmKFskNV0sIFtdLCBbXSwKKyAgW2x0X2pvaW4obTRfcXVvdGUobTRfZGVmYXVsdChbJDRdLCBbWywgXV0pKSwKKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKwkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCitdKQpkaWZmIC0tZ2l0IGEvbTQvbHR2ZXJzaW9uLm00IGIvbTQvbHR2ZXJzaW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljN2I1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sdHZlcnNpb24ubTQKQEAgLTAsMCArMSwyMyBAQAorIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgc2VyaWFsIDMyOTMgbHR2ZXJzaW9uLm00CisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sCisKK200X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuNF0pCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMjkzXSkKKworQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKK1ttYWNyb192ZXJzaW9uPScyLjQnCittYWNyb19yZXZpc2lvbj0nMS4zMjkzJworX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCitfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorXSkKZGlmZiAtLWdpdCBhL200L2x0fm9ic29sZXRlLm00IGIvbTQvbHR+b2Jzb2xldGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3M2RhOQotLS0gL2Rldi9udWxsCisrKyBiL200L2x0fm9ic29sZXRlLm00CkBAIC0wLDAgKzEsOTggQEAKKyMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorCisjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyMKKyMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pCisjIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQorIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorIworIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCisjIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKyMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKKyMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCisjIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCisjCisjIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cworIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKyMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKKyMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCisjCisjIEFueXRpbWUgd2Ugd2l0aGRyYXcgYW4gQUNfREVGVU4gb3IgQVVfREVGVU4sIHJlbWVtYmVyIHRvIGFkZCBpdCBoZXJlLgorIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorIyB3ZSBnaXZlIHVwIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBiZWZvcmUgMS43LCBhdCB3aGljaCBwb2ludAorIyB3ZSBuZWVkIHRvIGtlZXAgb25seSB0aG9zZSBuYW1lcyB3aGljaCB3ZSBzdGlsbCByZWZlciB0by4KKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9CU09MRVRFX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKK200X2lmbmRlZihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dKV0pCittNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TSEVMTF9JTklUXSwJCVtBQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0xUTUFJTl0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0xUTUFJTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR1ZBUl0sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfRU5BQkxFX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0xURExfRU5BQkxFX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW0FDX0xURExfUFJFT1BFTl0sCQlbQUNfREVGVU4oW0FDX0xURExfUFJFT1BFTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19DT01QSUxFUl0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xPQ0tdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTE9DS10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwJW0FDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MVERMX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0pXSkKK200X2lmbmRlZihbQUNfUEFUSF9NQUdJQ10sCQlbQUNfREVGVU4oW0FDX1BBVEhfTUFHSUNdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfR05VXSwJCVtBQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAlbQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKV0pCittNF9pZm5kZWYoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwJW0FDX0RFRlVOKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfU0VEXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdKV0pCittNF9pZm5kZWYoW19MVF9DQ19CQVNFTkFNRV0sCQlbQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0pXSkKK200X2lmbmRlZihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19BQ19QUk9HX0xJQlRPT0xdLAkJW0FDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NFVFVQXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0NIRUNLX0RMRkNOXSwJCVtBQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdDT05GSUddLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3XSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQorbTRfaWZuZGVmKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sCVtBQ19ERUZVTihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0NYWENQUF0sCQlbQUNfREVGVU4oW19MVF9BQ19QUk9HX0NYWENQUF0pXSkKK200X2lmbmRlZihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAlbQUNfREVGVU4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0Y3N10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRkNdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19GQ10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfQ1hYXSldKQpkaWZmIC0tZ2l0IGEvbTQvbmV0c25tcF9hcmcubTQgYi9tNC9uZXRzbm1wX2FyZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzIzMzBiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbmV0c25tcF9hcmcubTQKQEAgLTAsMCArMSwyNyBAQAorZG5sIFJlcG9ydHMgYW4gaW52YWxpZCBvcHRpb24gYW5kIHN1Z2dlc3RzIC0tZW5hYmxlLTxBUkdVTUVOVCAxPiBpbnN0ZWFkCitBQ19ERUZVTihbTkVUU05NUF9JTlZBTElEX0VOQUJMRV0sCisgIFtBQ19NU0dfRVJST1IoW0ludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtJDEvLS1kaXNhYmxlLSQxIGluc3RlYWRdKV0pCisKK2RubCBSZXBvcnRzIGFuIGludmFsaWQgb3B0aW9uIGFuZCBzdWdnZXN0cyAtLXdpdGgtPEFSR1VNRU5UIDE+IGluc3RlYWQKK0FDX0RFRlVOKFtORVRTTk1QX0lOVkFMSURfV0lUSF0sCisgIFtBQ19NU0dfRVJST1IoW0ludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLSQxLy0td2l0aG91dC0kMSBpbnN0ZWFkXSldKQorCitkbmwgU2ltaWxhciB0byBBQ19BUkdfRU5BQkxFIGJ1dCBhbHNvIGRlZmluZXMgYSBtYXRjaGluZyBXSVRIIG9wdGlvbiB0aGF0Citkbmwgc3VnZ2VzdHMgdGhlIHVzZSBvZiB0aGUgRU5BQkxFIG9wdGlvbiBpZiBjYWxsZWQKK0FDX0RFRlVOKFtORVRTTk1QX0FSR19FTkFCTEVdLAorICBbQUNfQVJHX0VOQUJMRShbJDFdLFskMl1kbmwKKyAgICAgbTRfaWYobTRfZXZhbCgkIyA8IDMpLDEsW10sWyxbJDNdXSlkbmwKKyAgICAgbTRfaWYobTRfZXZhbCgkIyA8IDQpLDEsW10sWyxbJDRdXSkpCisgICBBQ19BUkdfV0lUSCgKKyAgICAgWyQxXSwsCisgICAgIFtORVRTTk1QX0lOVkFMSURfRU5BQkxFKFskMV0pXSldKQorCitkbmwgU2ltaWxhciB0byBBQ19BUkdfV0lUSCBidXQgYWxzbyBkZWZpbmVzIGEgbWF0Y2hpbmcgRU5BQkxFIG9wdGlvbiB0aGF0Citkbmwgc3VnZ2VzdHMgdGhlIHVzZSBvZiB0aGUgV0lUSCBvcHRpb24gaWYgY2FsbGVkCitBQ19ERUZVTihbTkVUU05NUF9BUkdfV0lUSF0sCisgIFtBQ19BUkdfV0lUSChbJDFdLFskMl1kbmwKKyAgICAgbTRfaWYobTRfZXZhbCgkIyA8IDMpLDEsW10sWyxbJDNdXSlkbmwKKyAgICAgbTRfaWYobTRfZXZhbCgkIyA8IDQpLDEsW10sWyxbJDRdXSkpCisgICBBQ19BUkdfRU5BQkxFKAorICAgICBbJDFdLCwKKyAgICAgW05FVFNOTVBfSU5WQUxJRF9XSVRIKFskMV0pXSldKQpkaWZmIC0tZ2l0IGEvbTQvbmV0c25tcF9zZWFyY2hfbGlicy5tNCBiL200L25ldHNubXBfc2VhcmNoX2xpYnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkOGExMgotLS0gL2Rldi9udWxsCisrKyBiL200L25ldHNubXBfc2VhcmNoX2xpYnMubTQKQEAgLTAsMCArMSwzNSBAQAorZG5sIEBzeW5vcHNpcyBORVRTTk1QX1NFQVJDSF9MSUJTKEZVTkNUSU9OLCBTRUFSQ0gtTElCUywgW0FDVElPTi1JRi1GT1VORF0sCitkbmwgICAgICAgICAgICAgW0FDVElPTi1JRi1OT1QtRk9VTkRdLCBbT1RIRVItTElCUkFSSUVTXSwgW1RBUkdFVC1WQVJJQUJMRV0pCitkbmwgU2ltaWxhciB0byBBQ19TRUFSQ0hfTElCUyBidXQgY2hhbmdlcyBUQVJHRVQtVkFSSUFCTEUgaW5zdGVhZCBvZiBMSUJTCitkbmwgSWYgVEFSR0VULVZBUklBQkxFIGlzIHVuc2V0IHRoZW4gTElCUyBpcyB1c2VkCitBQ19ERUZVTihbTkVUU05NUF9TRUFSQ0hfTElCU10sCitbbTRfcHVzaGRlZihbbmV0c25tcF90YXJnZXRdLG00X2lmdmFsKFskNl0sWyQ2XSxbTElCU10pKQorIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGlicmFyeSBjb250YWluaW5nICQxXSwKKyAgICBbbmV0c25tcF9jdl9mdW5jXyQxX11uZXRzbm1wX3RhcmdldCwKKyAgICBbbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBtNF9pZihuZXRzbm1wX3RhcmdldCwgW0xJQlNdLAorICAgICAgICAgW25ldHNubXBfdGFyZ2V0X3ZhbD0iJExJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiQ1ICR7TElCU30iXSwKKyAgICAgICAgIFtuZXRzbm1wX3RhcmdldF92YWw9IiRuZXRzbm1wX3RhcmdldCIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICQ1ICR7TElCU30iXSkKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX0NBTEwoW10sWyQxXSldLAorICAgICAgICAgW25ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIl0sCisgICAgICAgICBbZm9yIG5ldHNubXBfY3VyX2xpYiBpbiAkMiA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19DQUxMKFtdLFskMV0pXSwKKyAgICAgICAgICAgICAgICAgIFtuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrXSkKKyAgICAgICAgICBkb25lXSkKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIFtuZXRzbm1wX2N2X2Z1bmNfJDFfXW5ldHNubXBfdGFyZ2V0PSIke25ldHNubXBfcmVzdWx0fSJdKQorIGlmIHRlc3QgIiR7W25ldHNubXBfY3ZfZnVuY18kMV9dbmV0c25tcF90YXJnZXR9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7W25ldHNubXBfY3ZfZnVuY18kMV9dbmV0c25tcF90YXJnZXR9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgbmV0c25tcF90YXJnZXQ9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorICAgICQzCisgbTRfaWZ2YWwoWyQ0XSwgW2Vsc2UKKyAgICAkNF0pCisgZmkKKyBtNF9wb3BkZWYoW25ldHNubXBfdGFyZ2V0XSldKQpkaWZmIC0tZ2l0IGEvbWFuL01ha2VmaWxlLmluIGIvbWFuL01ha2VmaWxlLmluCmluZGV4IGFiMTgzNzUuLjAxZmU4NTIgMTAwNjQ0Ci0tLSBhL21hbi9NYWtlZmlsZS5pbgorKysgYi9tYW4vTWFrZWZpbGUuaW4KQEAgLTE0LDcwICsxNCw2OCBAQAogIyBsb2NhbCBzdHVmZgogIwogCi1NQU4xICA9IHNubXBpbmZvcm0uMQotTUFOMUcgPSBzbm1wYnVsa2dldC4xIHNubXBjbWQuMSBzbm1wZ2V0LjEgc25tcHNldC4xIHNubXB3YWxrLjEgXAorTUFOMSAgPSBzbm1waW5mb3JtLjEgc25tcC1icmlkZ2UtbWliLjEKKworQE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19UUlVFQEFHRU5UWFRSQVAgPSBhZ2VudHh0cmFwLjEKK0BORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfRkFMU0VAQUdFTlRYVFJBUCA9CisKK01BTjFHID0gJChBR0VOVFhUUkFQKSBzbm1wYnVsa2dldC4xIHNubXBjbWQuMSBzbm1wZ2V0LjEgc25tcHNldC4xIHNubXB3YWxrLjEgXAogCXNubXBidWxrd2Fsay4xIHNubXBnZXRuZXh0LjEgc25tcHRlc3QuMSBzbm1wdHJhbnNsYXRlLjEgc25tcHRyYXAuMSBcCiAJc25tcHVzbS4xIHNubXB2YWNtLjEgc25tcHRhYmxlLjEgc25tcHN0YXR1cy4xIHNubXBjb25mLjEgbWliMmMuMSBcCiAJc25tcG5ldHN0YXQuMSBzbm1wZGVsdGEuMSBzbm1wZGYuMSBlbmNvZGVfa2V5Y2hhbmdlLjEgZml4cHJvYy4xIFwKLQluZXQtc25tcC1jb25maWcuMSBtaWIyYy11cGRhdGUuMSB0a21pYi4xIHRyYXB0b2VtYWlsLjEKKwluZXQtc25tcC1jb25maWcuMSBtaWIyYy11cGRhdGUuMSB0a21pYi4xIHRyYXB0b2VtYWlsLjEgXAorCW5ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEKIAotTUFOMyAgPSBzbm1wX2Nsb3NlLjMgc25tcF9mcmVlX3BkdS4zIHNubXBfb3Blbi4zIHNubXBfcmVhZC4zIFwKLQlzbm1wX3NlbGVjdF9pbmZvLjMgc25tcF9zZW5kLjMgc25tcF90aW1lb3V0LjMJCQkgICAgICAgXAotCXNubXBfc2Vzc19hc3luY19zZW5kLjMgc25tcF9zZXNzX2Nsb3NlLjMgc25tcF9zZXNzX2Vycm9yLjMgICAgIFwKLQlzbm1wX3Nlc3NfaW5pdC4zIHNubXBfc2Vzc19vcGVuLjMgc25tcF9zZXNzX3JlYWQuMwkgICAgICAgXAotCXNubXBfc2Vzc19zZWxlY3RfaW5mby4zIHNubXBfc2Vzc19zZW5kLjMgc25tcF9zZXNzX3RpbWVvdXQuMyAgIFwKLQlzbm1wX3Nlc3Nfc2Vzc2lvbi4zIHNubXBfcGVycm9yLjMgc25tcF9zZXNzX3BlcnJvci4zCSAgICAgICBcCi0Jc25tcF9lcnJvci4zIHNubXBfYXBpX2VycnN0cmluZy4zIGluaXRfbWliLjMgYWRkX21pYmRpci4zICAgICAgXAotCWluaXRfbWliX2ludGVybmFscy4zIHNubXBfc2V0X21pYl93YXJuaW5ncy4zIHJlYWRfbW9kdWxlLjMgICAgIFwKLQlyZWFkX2FsbF9taWJzLjMgcmVhZF9taWIuMyByZWFkX21vZHVsZV9ub2RlLjMgcmVhZF9vYmppZC4zICAgICBcCi0JYWRkX21vZHVsZV9yZXBsYWNlbWVudC4zIHNodXRkb3duX21pYi4zIHByaW50X21pYi4zCSAgICAgICBcCi0JcHJpbnRfdmFyaWFibGUuMyBwcmludF92YWx1ZS4zIHByaW50X29iamlkLjMJCSAgICAgICBcCi0JcHJpbnRfZGVzY3JpcHRpb24uMyBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zCSAgICAgICBcCi0JZ2V0X21vZHVsZV9ub2RlLjMgbmV0c25tcF9hZ2VudC4zIG5ldHNubXBfYnVsa190b19uZXh0LjMgICAgICAgXAotCW5ldHNubXBfZGVidWcuMyBuZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zIG5ldHNubXBfaGFuZGxlci4zIFwKLQluZXRzbm1wX2luc3RhbmNlLjMgbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMJICAgICAgIFwKLQluZXRzbm1wX211bHRpcGxleGVyLjMgbmV0c25tcF9vbGRfYXBpLjMgbmV0c25tcF9yZWFkX29ubHkuMyAgICBcCi0JbmV0c25tcF9zZXJpYWxpemUuMyBuZXRzbm1wX3RhYmxlLjMgbmV0c25tcF90YWJsZV9hcnJheS4zICAgICAgXAotCW5ldHNubXBfdGFibGVfZGF0YS4zIG5ldHNubXBfdGFibGVfZGF0YXNldC4zCQkgICAgICAgXAotCW5ldHNubXBfdGFibGVfaXRlcmF0b3IuMyBuZXRzbm1wX3NjYWxhci4zICAgICAgIFwKLQluZXRzbm1wX3dhdGNoZXIuMyBuZXRzbm1wX21vZGVfZW5kX2NhbGwuMyBuZXRzbm1wX2xpYnJhcnkuMyAgICBcCi0JbmV0c25tcF9taWJfdXRpbGl0aWVzLjMJCQkJCSAgICAgICBcCi0JbmV0c25tcF9iYWJ5X3N0ZXBzLjMgbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMJCSAgICAgICBcCi0JbmV0c25tcF9jb250YWluZXIuMyBuZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zIG5ldHNubXBfbGVhZi4zICAgXAotCW5ldHNubXBfcm93X21lcmdlLjMJCSAgICAgICBcCi0JbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMyBuZXRzbm1wX3N0YXNoX2NhY2hlLjMJICAgICAgIFwKLQluZXRzbm1wX3V0aWxpdGllcy4zCi0KLU1BTjNHID0gZGVmYXVsdF9zdG9yZS4zIG1pYl9hcGkuMyByZWFkX2NvbmZpZy4zIHNubXBfYWdlbnRfYXBpLjMgc25tcF9hbGFybS4zIFwKLQlzbm1wX2FwaS4zIHNubXBfc2Vzc19hcGkuMyBzbm1wX3RyYXBfYXBpLjMKKyMgSWYgTUFOMyBpcyBwb3B1bGF0ZWQgYWdhaW4sIHRoZW4gcmVtZW1iZXIgdG8gcmUtZW5hYmxlIHRoZSBjb3JyZXNwb25kaW5nCisjIGFjdGlvbiBsaW5lIHdpdGhpbiB0aGUgJ21hbmluc3RhbGwnIHRhcmdldAorTUFOMyAgPSAKK01BTjNfQVBJID0gbmV0c25tcF9taWJfYXBpLjMgbmV0c25tcF9jb25maWdfYXBpLjMgc25tcF9hbGFybS4zIFwKKwluZXRzbm1wX3Nlc3Npb25fYXBpLjMgbmV0c25tcF9zZXNzX2FwaS4zIG5ldHNubXBfdHJhcF9hcGkuMyBuZXRzbm1wX3ZhcmJpbmRfYXBpLjMgbmV0c25tcF9wZHVfYXBpLjMgCitNQU4zRyA9IGRlZmF1bHRfc3RvcmUuMyBuZXRzbm1wX2FnZW50X2FwaS4zICQoTUFOM19BUEkpCiBNQU41RyA9IHNubXBkLmNvbmYuNSBzbm1wdHJhcGQuY29uZi41IHNubXAuY29uZi41IHNubXBfY29uZmlnLjUgdmFyaWFibGVzLjUgXAogICAgICAgICBtaWIyYy5jb25mLjUgc25tcGQuZXhhbXBsZXMuNSBzbm1wZC5pbnRlcm5hbC41CiBNQU44RyA9IHNubXB0cmFwZC44IHNubXBkLjgKIAotREVGQVVMVF9TVE9SRV9BTElBU0VTID0gbmV0c25tcF9kc19nZXRfYm9vbGVhbi4zIG5ldHNubXBfZHNfZ2V0X2ludC4zCVwKLQluZXRzbm1wX2RzX2dldF9zdHJpbmcuMyBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZy4zCQlcCi0JbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIuMyBuZXRzbm1wX2RzX3NldF9ib29sZWFuLjMgCQlcCi0JbmV0c25tcF9kc19zZXRfaW50LjMJCQkJCQlcCi0JbmV0c25tcF9kc19zZXRfc3RyaW5nLjMgbmV0c25tcF9kc19zaHV0ZG93bi4zCi1SRUFEX0NPTkZJR19BTElBU0VTID0gY29uZmlnX3BlcnJvci4zIGNvbmZpZ19wd2Fybi4zCQkJXAotCXJlYWRfY29uZmlnX3ByaW50X3VzYWdlLjMgcmVhZF9jb25maWdzLjMgcmVhZF9wcmVtaWJfY29uZmlncy4zCVwKLQlyZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIuMyByZWdpc3Rlcl9hcHBfcHJlbWliX2hhbmRsZXIuMwlcCi0JcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIuMyByZWdpc3Rlcl9taWJfaGFuZGxlcnMuMyAJCVwKLQlyZWdpc3Rlcl9wcmVtaWJfaGFuZGxlci4zIAkJCQkJXAorTUlCX0FMSUFTRVMgICAgID0gYWRkX21pYmRpci4zIGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQuMwkJXAorCWZwcmludF9kZXNjcmlwdGlvbi4zIGZwcmludF9vYmppZC4zIGdldF9tb2R1bGVfbm9kZS4zCVwKKwluZXRzbm1wX2luaXRfbWliLjMgbmV0c25tcF9yZWFkX21vZHVsZS4zCQlcCisJcHJpbnRfZGVzY3JpcHRpb24uMyBwcmludF9taWIuMyBwcmludF9vYmppZC4zCQlcCisJcmVhZF9hbGxfbWlicy4zIHJlYWRfbWliLjMgcmVhZF9vYmppZC4zCQkJXAorCXNodXRkb3duX21pYi4zIHNubXBfcGFyc2Vfb2lkLjMgc25tcF9zZXRfbWliX2Vycm9ycy4zCVwKKwlzbm1wX3NldF9taWJfd2FybmluZ3MuMyBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zCVwKKwlzbnByaW50X2Rlc2NyaXB0aW9uLjMgc25wcmludF9vYmppZC4zCitDT05GSUdfQUxJQVNFUyAgPSBjb25maWdfcGVycm9yLjMgY29uZmlnX3B3YXJuLjMJCQkgICAgXAorCXJlYWRfY29uZmlnX3ByaW50X3VzYWdlLjMgcmVhZF9jb25maWdzLjMgcmVhZF9wcmVtaWJfY29uZmlncy4zCSAgICBcCisJcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyLjMgcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIuMyBcCisJcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIuMyByZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlci4zCSAgICBcCisJcmVnaXN0ZXJfbWliX2hhbmRsZXJzLjMgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlci4zCSAgICBcCisJdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzLjMJCQkgCSAgICBcCiAJdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIuMyB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyLjMKLVNOTVBfQUxBUk1fQUxJQVNFUyA9IHNubXBfYWxhcm1fcmVnaXN0ZXIuMyBzbm1wX2FsYXJtX3JlZ2lzdGVyX2hyLjMgCVwKLQlzbm1wX2FsYXJtX3VucmVnaXN0ZXIuMwotU05NUF9TRVRfU0FWRV9ERVNDUklQVElPTlNfQUxJQVNFUyA9IGZwcmludF9kZXNjcmlwdGlvbi4zIGZwcmludF9vYmppZC4zIFwKLQlmcHJpbnRfdmFsdWUuMyBmcHJpbnRfdmFyaWFibGUuMyBzbnByaW50X29iamlkLjMgc25wcmludF92YWx1ZS4zIFwKLQlzbnByaW50X3ZhcmlhYmxlLjMgc3ByaW50X3JlYWxsb2Nfb2JqaWQuMyBzcHJpbnRfcmVhbGxvY192YWx1ZS4zIFwKLQlzcHJpbnRfcmVhbGxvY192YXJpYWJsZS4zCi1TTk1QX1RSQVBfQVBJX0FMSUFTRVMgPSBzZW5kX2Vhc3lfdHJhcC4zIHNlbmRfdHJhcF92YXJzLjMgc2VuZF92MnRyYXAuMworQUxBUk1fQUxJQVNFUyAgID0gc25tcF9hbGFybV9yZWdpc3Rlci4zIHNubXBfYWxhcm1fcmVnaXN0ZXJfaHIuMyBzbm1wX2FsYXJtX3VucmVnaXN0ZXIuMworU0VTU0lPTl9BTElBU0VTID0gc25tcF9hcGlfZXJyc3RyaW5nLjMgc25tcF9jbG9zZS4zIHNubXBfZXJyb3IuMyAgICBcCisJc25tcF9vcGVuLjMgc25tcF9wZXJyb3IuMyBzbm1wX3JlYWQuMyBzbm1wX3NlbGVjdF9pbmZvLjMgICAgXAorCXNubXBfc2VuZC4zIHNubXBfc2Vzc19wZXJyb3IuMyBzbm1wX3RpbWVvdXQuMyAgICAgICAgICAgICAgIFwKKwlzbm1wX2FzeW5jX3NlbmQuMyBzbm1wX3N5bmNoX3Jlc3BvbnNlLjMKK1NTRVNTX0FMSUFTRVMgICA9IHNubXBfc2Vzc19hc3luY19zZW5kLjMgc25tcF9zZXNzX2Nsb3NlLjMgc25tcF9zZXNzX2Vycm9yLjMgXAorCXNubXBfc2Vzc19pbml0LjMgc25tcF9zZXNzX29wZW4uMyBzbm1wX3Nlc3NfcmVhZC4zCQkgICAgIFwKKwlzbm1wX3Nlc3Nfc2VsZWN0X2luZm8uMyBzbm1wX3Nlc3Nfc2VuZC4zCQkJICAgICBcCisJc25tcF9zZXNzX3Nlc3Npb24uMyBzbm1wX3Nlc3NfdGltZW91dC4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXNubXBfc2Vzc19zeW5jaF9yZXNwb25zZS4zCitUUkFQX0FMSUFTRVMgICAgPSBzZW5kX2Vhc3lfdHJhcC4zIHNlbmRfdHJhcF92YXJzLjMgc2VuZF92MnRyYXAuMyAKK1ZBUkJJTkRfQUxJQVNFUyA9IGZwcmludF92YWx1ZS4zIGZwcmludF92YXJpYWJsZS4zCVwKKwlwcmludF92YWx1ZS4zIHByaW50X3ZhcmlhYmxlLjMJCQlcCisJc25tcF9hZGRfbnVsbF92YXIuMyBzbm1wX2Nsb25lX3ZhcmJpbmQuMwlcCisJc25tcF9mcmVlX3Zhci4zIHNubXBfZnJlZV92YXJiaW5kLjMJCVwKKwlzbm1wX3BkdV9hZGRfdmFyaWFibGUuMwkJCQlcCisJc25tcF9zZXRfdmFyX29iamlkLjMgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIuMyBcCisJc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlLjMgc25tcF9zZXRfdmFyX3ZhbHVlLjMgICBcCisJc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZS4zIHNucHJpbnRfdmFsdWUuMyBzbnByaW50X3ZhcmlhYmxlLjMKK1BEVV9BTElBU0VTICAgICA9IHNubXBfY2xvbmVfcGR1LjMgc25tcF9maXhfcGR1LjMgc25tcF9mcmVlX3BkdS4zIHNubXBfcGR1X2NyZWF0ZS4zCiAKIAogCi1NQU5BTElBU0VTPSQoREVGQVVMVF9TVE9SRV9BTElBU0VTKSAkKFJFQURfQ09ORklHX0FMSUFTRVMpIAkJXAotCSQoU05NUF9BTEFSTV9BTElBU0VTKSAkKFNOTVBfU0VUX1NBVkVfREVTQ1JJUFRJT05TX0FMSUFTRVMpIAlcCi0JJChTTk1QX1RSQVBfQVBJX0FMSUFTRVMpCitNQU5BTElBU0VTPSQoTUlCX0FMSUFTRVMpICQoQ09ORklHX0FMSUFTRVMpICQoQUxBUk1fQUxJQVNFUykgJChTRVNTSU9OX0FMSUFTRVMpIFwKKwkkKFNTRVNTX0FMSUFTRVMpICQoVFJBUF9BTElBU0VTKSAkKFZBUkJJTkRfQUxJQVNFUykgJChQRFVfQUxJQVNFUykKIE1BTkFMTCA9ICQoTUFOMSkgJChNQU4xRykgJChNQU4zKSAkKE1BTjNHKSAkKE1BTjVHKSAkKE1BTjhHKSAkKE1BTkFMSUFTRVMpCiAKIFRBUkdFVFMgPSAkKE1BTjVHKSAkKE1BTjFHKSAkKE1BTjNHKSAkKE1BTjhHKQpAQCAtODUsMjggKzgzLDI5IEBACiAKIGFsbDogJChUQVJHRVRTKSBzdGFuZGFyZGFsbCBtYW5hbGlhc2VzCiAKLW1hbmFsaWFzZXM6IE1ha2VmaWxlCittYW5hbGlhc2VzOiBNYWtlZmlsZSAkKE1BTjNfQVBJKQogCXRvdWNoIG1hbmFsaWFzZXMKLQlAZm9yIGkgaW4gJChERUZBVUxUX1NUT1JFX0FMSUFTRVMpIDsgZG8JCQkJXAotCQllY2hvICJtYWtpbmcgbWFuIHBhZ2UgYWxpYXMgJCRpIC0+IGRlZmF1bHRfc3RvcmUgQVBJcyIgOyBcCi0JCWVjaG8gIi5zbyBtYW4zL2RlZmF1bHRfc3RvcmUuMyIgPiAkJGkgOyAJCVwKLQlkb25lCi0JQGZvciBpIGluICQoUkVBRF9DT05GSUdfQUxJQVNFUykgOyBkbwkJCQlcCi0JCWVjaG8gIm1ha2luZyBtYW4gcGFnZSBhbGlhcyAkJGkgLT4gcmVhZF9jb25maWcgQVBJcyIgOwlcCi0JCWVjaG8gIi5zbyBtYW4zL3JlYWRfY29uZmlnLjMiID4gJCRpIDsgCQkJXAotCWRvbmUKLQlAZm9yIGkgaW4gJChTTk1QX0FMQVJNX0FMSUFTRVMpIDsgZG8JCQkJXAotCQllY2hvICJtYWtpbmcgbWFuIHBhZ2UgYWxpYXMgJCRpIC0+IHNubXBfYWxhcm0gQVBJcyIgOwlcCi0JCWVjaG8gIi5zbyBtYW4zL3NubXBfYWxhcm0uMyIgPiAkJGkgOyAJCQlcCi0JZG9uZQotCUBmb3IgaSBpbiAkKFNOTVBfU0VUX1NBVkVfREVTQ1JJUFRJT05TX0FMSUFTRVMpIDsgZG8JCVwKLQkJZWNobyAibWFraW5nIG1hbiBwYWdlIGFsaWFzICQkaSAtPiBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucyBBUElzIiA7IFwKLQkJZWNobyAiLnNvIG1hbjMvc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMyIgPiAkJGkgOyAJXAotCWRvbmUKLQlAZm9yIGkgaW4gJChTTk1QX1RSQVBfQVBJX0FMSUFTRVMpIDsgZG8JCQkJXAotCQllY2hvICJtYWtpbmcgbWFuIHBhZ2UgYWxpYXMgJCRpIC0+IHNubXBfdHJhcCBBUElzIiA7CVwKLQkJZWNobyAiLnNvIG1hbjMvc25tcF90cmFwX2FwaS4zIiA+ICQkaSA7CQkJXAotCWRvbmUKKwlAcmVzdWx0PTAgOyBcCisgICAgICAgIGZvciBpIGluICQoTUFOM19BUEkpIDsgZG8JCQkJICBcCisgICAgICAgICAgICBmb3IgaiBpbiBgJChTRUQpIC1uICcvXi5TSCBOQU1FLywvXi5TSCBTWU5PUFNJUy9wJyAkJGkgIHwgJChTRUQpIC1lICdzLy4tIC4qLy8nIHwgJChTRUQpICdzLywuKi8vJyAgfCAkKEVHUkVQKSAtdiAnXi5TSCAnIGA7IGRvIFwKKwkJZWNobyAibWFraW5nIG1hbiBwYWdlIGFsaWFzICQkaiAtPiAkJGkgQVBJcyIgOyAgICBcCisJCWVjaG8gIi5zbyBtYW4zLyQkaSIgPiAkJGouMyA7IAkJICBcCisJCWlmIGV4cHIgIiQoTUFOQUxJQVNFUykiIDogIi4qJCRqXFwuMyIgPiAvZGV2L251bGwgOyBcCisJCXRoZW4gXAorCQkgIDogOyBcCisJCWVsc2UgXAorCQkgICAgdmFyPWBlY2hvICQkaSB8ICQoU0VEKSAtZSAncy9ebmV0c25tcF8vLycgLWUgJ3MvX2FwaS4zLy8nIHwgdHIgJ1thLXpdJyAnW0EtWl0nYCA7IFwKKwkJICAgIGVjaG8gIllvdSBtdXN0IGFkZCAkJGouMyB0byB0aGUgJCR7dmFyfV9BTElBU0VTIHZhcmlhYmxlIGluIHRoZSBNYWtlZmlsZS5pbiIgOyBcCisJCSAgICByZXN1bHQ9MSA7IFwKKwkgICAgICAgIGZpOyBcCisJICAgIGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkb25lIDsgXAorCWV4aXQgJCRyZXN1bHQKKworJChNQU5BTElBU0VTKTogbWFuYWxpYXNlcworCithZ2VudHh0cmFwLjE6ICQoc3JjZGlyKS9hZ2VudHh0cmFwLjEuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvYWdlbnR4dHJhcC4xLmRlZiA+IGFnZW50eHRyYXAuMQogCiBzbm1wYnVsa2dldC4xOiAkKHNyY2Rpcikvc25tcGJ1bGtnZXQuMS5kZWYgLi4vc2Vkc2NyaXB0CiAJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wYnVsa2dldC4xLmRlZiA+IHNubXBidWxrZ2V0LjEKQEAgLTE4MCw1NiArMTc5LDY1IEBACiBuZXQtc25tcC1jb25maWcuMTogJChzcmNkaXIpL25ldC1zbm1wLWNvbmZpZy4xLmRlZiAuLi9zZWRzY3JpcHQKIAkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldC1zbm1wLWNvbmZpZy4xLmRlZiA+IG5ldC1zbm1wLWNvbmZpZy4xCiAKK25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjE6ICQoc3JjZGlyKS9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEuZGVmID4gbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMQorCiB0a21pYi4xOiAkKHNyY2RpcikvdGttaWIuMS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS90a21pYi4xLmRlZiA+IHRrbWliLjEKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3RrbWliLjEuZGVmID4gJEAKIAogdHJhcHRvZW1haWwuMTogJChzcmNkaXIpL3RyYXB0b2VtYWlsLjEuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvdHJhcHRvZW1haWwuMS5kZWYgPiB0cmFwdG9lbWFpbC4xCisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS90cmFwdG9lbWFpbC4xLmRlZiA+ICRACiAKLW1pYl9hcGkuMzogJChzcmNkaXIpL21pYl9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9taWJfYXBpLjMuZGVmID4gbWliX2FwaS4zCituZXRzbm1wX3ZhcmJpbmRfYXBpLjM6ICQoc3JjZGlyKS9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZiA+ICRACiAKLXJlYWRfY29uZmlnLjM6ICQoc3JjZGlyKS9yZWFkX2NvbmZpZy4zLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3JlYWRfY29uZmlnLjMuZGVmID4gcmVhZF9jb25maWcuMworbmV0c25tcF9wZHVfYXBpLjM6ICQoc3JjZGlyKS9uZXRzbm1wX3BkdV9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXRzbm1wX3BkdV9hcGkuMy5kZWYgPiAkQAogCi1zbm1wX2FnZW50X2FwaS4zOiAkKHNyY2Rpcikvc25tcF9hZ2VudF9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wX2FnZW50X2FwaS4zLmRlZiA+IHNubXBfYWdlbnRfYXBpLjMKK25ldHNubXBfc2Vzc2lvbl9hcGkuMzogJChzcmNkaXIpL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmID4gJEAKKworbmV0c25tcF9taWJfYXBpLjM6ICQoc3JjZGlyKS9uZXRzbm1wX21pYl9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXRzbm1wX21pYl9hcGkuMy5kZWYgPiAkQAorCituZXRzbm1wX2NvbmZpZ19hcGkuMzogJChzcmNkaXIpL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZiA+ICRACiAKIHNubXBfYWxhcm0uMzogJChzcmNkaXIpL3NubXBfYWxhcm0uMy5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wX2FsYXJtLjMuZGVmID4gc25tcF9hbGFybS4zCisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wX2FsYXJtLjMuZGVmID4gJEAKIAotc25tcF9hcGkuMzogJChzcmNkaXIpL3NubXBfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcF9hcGkuMy5kZWYgPiBzbm1wX2FwaS4zCituZXRzbm1wX3Nlc3NfYXBpLjM6ICQoc3JjZGlyKS9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0c25tcF9zZXNzX2FwaS4zLmRlZiA+ICRACiAKLXNubXBfc2Vzc19hcGkuMzogJChzcmNkaXIpL3NubXBfc2Vzc19hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wX3Nlc3NfYXBpLjMuZGVmID4gc25tcF9zZXNzX2FwaS4zCituZXRzbm1wX2FnZW50X2FwaS4zOiAkKHNyY2RpcikvbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiA+ICRACiAKLXNubXBfdHJhcF9hcGkuMzogJChzcmNkaXIpL3NubXBfdHJhcF9hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wX3RyYXBfYXBpLjMuZGVmID4gc25tcF90cmFwX2FwaS4zCituZXRzbm1wX3RyYXBfYXBpLjM6ICQoc3JjZGlyKS9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0c25tcF90cmFwX2FwaS4zLmRlZiA+ICRACiAKIHNubXAuY29uZi41OiAkKHNyY2Rpcikvc25tcC5jb25mLjUuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcC5jb25mLjUuZGVmID4gc25tcC5jb25mLjUKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXAuY29uZi41LmRlZiA+ICRACiAKIHNubXBfY29uZmlnLjU6ICQoc3JjZGlyKS9zbm1wX2NvbmZpZy41LmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBfY29uZmlnLjUuZGVmID4gc25tcF9jb25maWcuNQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcF9jb25maWcuNS5kZWYgPiAkQAogCiBzbm1wZC5jb25mLjU6ICQoc3JjZGlyKS9zbm1wZC5jb25mLjUuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcGQuY29uZi41LmRlZiA+IHNubXBkLmNvbmYuNQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcGQuY29uZi41LmRlZiA+ICRACiAKIHNubXBkLmV4YW1wbGVzLjU6ICQoc3JjZGlyKS9zbm1wZC5leGFtcGxlcy41LmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBkLmV4YW1wbGVzLjUuZGVmID4gc25tcGQuZXhhbXBsZXMuNQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcGQuZXhhbXBsZXMuNS5kZWYgPiAkQAogCiBzbm1wZC5pbnRlcm5hbC41OiAkKHNyY2Rpcikvc25tcGQuaW50ZXJuYWwuNS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wZC5pbnRlcm5hbC41LmRlZiA+IHNubXBkLmludGVybmFsLjUKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBkLmludGVybmFsLjUuZGVmID4gJEAKIAogc25tcHRyYXBkLmNvbmYuNTogJChzcmNkaXIpL3NubXB0cmFwZC5jb25mLjUuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcHRyYXBkLmNvbmYuNS5kZWYgPiBzbm1wdHJhcGQuY29uZi41CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wdHJhcGQuY29uZi41LmRlZiA+ICRACiAKIHZhcmlhYmxlcy41OiAkKHNyY2RpcikvdmFyaWFibGVzLjUuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvdmFyaWFibGVzLjUuZGVmID4gdmFyaWFibGVzLjUKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3ZhcmlhYmxlcy41LmRlZiA+ICRACiAKIHNubXB0cmFwZC44OiAkKHNyY2Rpcikvc25tcHRyYXBkLjguZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcHRyYXBkLjguZGVmID4gc25tcHRyYXBkLjgKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXB0cmFwZC44LmRlZiA+ICRACiAKIGRlZmF1bHRfc3RvcmUuMy5oOiAkKHNyY2RpcikvLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogCWF3ayAneyBpZiAoJCQwID09ICIgICAgICogYmVnaW4gc3RvcmFnZSBkZWZpbml0aW9ucyAiKSB7IHAgPSAxIH0gZWxzZSBpZiAoJCQwID09ICIgICAgICogZW5kIHN0b3JhZ2UgZGVmaW5pdGlvbnMgIikgeyBwID0gMCB9IGVsc2UgaWYgKHApIHsgcHJpbnQgJCQwfX0nIDwgJChzcmNkaXIpLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmggPiBkZWZhdWx0X3N0b3JlLjMuaApAQCAtMjQ1LDExICsyNTMsMTEgQEAKIAkgIHRvdWNoIG1pYjJjLmNvbmYuNSA7IFwKIAlmaQogCi1tYW5pbnN0YWxsOiAgbWFuaW5zdGFsbGRpcnMgJChNQU4xKSAkKE1BTjFHKSAkKE1BTjMpICQoTUFONUcpICQoTUFOOCkgJChNQU5BTElBU0VTKQorbWFuaW5zdGFsbDogIG1hbmluc3RhbGxkaXJzICQoTUFOMSkgJChNQU4xRykgJChNQU4zKSAkKE1BTjNfQVBJKSAkKE1BTjNHKSAkKE1BTjVHKSAkKE1BTjhHKSAkKE1BTkFMSUFTRVMpCiAJQGZvciBpIGluICQoTUFOMSkgOyBkbyAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2BiYXNlbmFtZSAkJGlgICQoSU5TVEFMTF9QUkVGSVgpJChtYW4xZGlyKSA7IGVjaG8gImluc3RhbGw6ICBpbnN0YWxsZWQgJCRpIGluICQoSU5TVEFMTF9QUkVGSVgpJChtYW4xZGlyKSIgOyBkb25lCiAJQCQoSU5TVEFMTF9EQVRBKSAkKE1BTjFHKSAkKElOU1RBTExfUFJFRklYKSQobWFuMWRpcikKIAlAZm9yIGkgaW4gJChNQU4xRykgOyBkbyBlY2hvICJpbnN0YWxsOiAgaW5zdGFsbGVkICQkaSBpbiAkKElOU1RBTExfUFJFRklYKSQobWFuMWRpcikiIDsgZG9uZQotCUBmb3IgaSBpbiAkKE1BTjMpIDsgZG8gJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGkgJChJTlNUQUxMX1BSRUZJWCkkKG1hbjNkaXIpIDsgZWNobyAiaW5zdGFsbDogIGluc3RhbGxlZCAkJGkgaW4gJChJTlNUQUxMX1BSRUZJWCkkKG1hbjNkaXIpIiA7IGRvbmUKKwkjRU1QVFkgTElTVCNAZm9yIGkgaW4gJChNQU4zKSA7IGRvICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRpICQoSU5TVEFMTF9QUkVGSVgpJChtYW4zZGlyKSA7IGVjaG8gImluc3RhbGw6ICBpbnN0YWxsZWQgJCRpIGluICQoSU5TVEFMTF9QUkVGSVgpJChtYW4zZGlyKSIgOyBkb25lCiAJQCQoSU5TVEFMTF9EQVRBKSAkKE1BTjNHKSAkKElOU1RBTExfUFJFRklYKSQobWFuM2RpcikKIAlAZm9yIGkgaW4gJChNQU4zRykgOyBkbyBlY2hvICJpbnN0YWxsOiAgaW5zdGFsbGVkICQkaSBpbiAkKElOU1RBTExfUFJFRklYKSQobWFuM2RpcikiIDsgZG9uZQogCUAkKElOU1RBTExfREFUQSkgJChNQU5BTElBU0VTKSAkKElOU1RBTExfUFJFRklYKSQobWFuM2RpcikKQEAgLTI3NCwxMSArMjgyLDExIEBACiAjCiBodG1sOiAkKE1BTkFMTCkKIAlmb3IgaSBpbiAkKE1BTkFMTCk7IGRvIFwKLQkgICBpZiB0ZXN0IGB3YyAtbCAkJGkgfCBhd2sgJ3twcmludCAkJDF9J2AgIT0gMSA7IHRoZW4gXAorIwkgICBpZiB0ZXN0IGB3YyAtbCAkJGkgfCBhd2sgJ3twcmludCAkJDF9J2AgIT0gMSA7IHRoZW4gXAogCQkgICBiYXNlPWBlY2hvICQkaSB8IHNlZCAncy8uWzAtOV0kJC8vOydgIDsgXAogCQkgICBlY2hvICI8SFRNTD48Qk9EWSBiZ2NvbG9yPVwiI2ZmZmZmZlwiIGJhY2tncm91bmQ9XCIuLi91Y2Qtc25tcC1iZzMuZ2lmXCI+PFBSRT4iID4gJCRiYXNlLmh0bWw7IFwKIAkJICAgbWFuMmh0bWwgLXIgLi8kJGkgfCAkKFBFUkwpIC1wIC1lICdzL0hSRUY9XCIuLlwvbWFuLlwvL0hSRUY9XCIvZztzL1wuWzEtOV1cLmh0bWwvLmh0bWwvZzsnIHwgZ3JlcCAtdiAnQ29udGVudC10eXBlOicgPj4gJCRiYXNlLmh0bWw7IFwKIAkJICAgYT0iJCRhICQkaSI7IFwKLQkgICBmaSA7IFwKKyMJICAgZmkgOyBcCiAJZG9uZSA7XAogCSQoUEVSTCkgbWFrZV9pbmRleC5wbCBtYW5fc2VjdGlvbnMudHh0ICQkYSA+IGluZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL21hbi9hZGRfbWliZGlyLjMgYi9tYW4vYWRkX21pYmRpci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9hZGRfbWliZGlyLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9hZGRfbW9kdWxlX3JlcGxhY2VtZW50LjMgYi9tYW4vYWRkX21vZHVsZV9yZXBsYWNlbWVudC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9hZGRfbW9kdWxlX3JlcGxhY2VtZW50LjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9hZ2VudHh0cmFwLjEuZGVmIGIvbWFuL2FnZW50eHRyYXAuMS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxMzI1ZgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9hZ2VudHh0cmFwLjEuZGVmCkBAIC0wLDAgKzEsMTEwIEBACisuVEggQUdFTlRYVFJBUCAxICIyMCBEZWMgMjAwOSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCithZ2VudHh0cmFwIC0gc2VuZCBhbiBBZ2VudFggTm90aWZ5UERVIHRvIGFuIEFnZW50WCBtYXN0ZXIgYWdlbnQKKy5TSCBTWU5PUFNJUworLkIgYWdlbnR4dHJhcAorLlJJIFsgT1BUSU9OUyBdICIgdHJhcC1vaWQgIiBbICJPSUQgVFlQRSBWQUxVRSIgLi4uXQorLlNIIERFU0NSSVBUSU9OCisuQiBhZ2VudHh0cmFwCitpc3N1ZXMgYW4gQWdlbnRYIE5vdGlmeVBEVSB0byBhIG1hc3RlciBhZ2VudC4gT25lIG9yIG1vcmUgb2JqZWN0CitpZGVudGlmaWVycyAoT0lEcykgY2FuIGJlIGdpdmVuIGFzIGFyZ3VtZW50cyBvbiB0aGUgY29tbWFuZCBsaW5lLgorQSB0eXBlIGFuZCBhIHZhbHVlIG11c3QgYWNjb21wYW55IGVhY2ggb2JqZWN0IGlkZW50aWZpZXIuCitFYWNoIHZhcmlhYmxlIG5hbWUgaXMgZ2l2ZW4gaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4KKy5JUiB2YXJpYWJsZXMoNSkgLgorLlBQCisuU0ggT1BUSU9OUworLlBEIDAKKy5UUCA2CisuQkkgXC1jICJcfCBjb250ZXh0TmFtZVxeIgoraWYgdGhlCisuQiBcLWMKK29wdGlvbiBpcyBwcmVzZW50IHRoZW4gdGhlIG5vdGlmaWNhdGlvbiBpcyBzZW50IGluIHRoZSBub25kZWZhdWx0IG5hbWUgY29udGV4dC4KKy5UUAorLkJJIFwtVSAiXHwgdXB0aW1lXF4iCitpZiB0aGUKKy5CIFwtVQorb3B0aW9uIGlzIHByZXNlbnQgdGhlbiB0aGF0IHZhbHVlLCBwYXJzZWQgYXMgY2VudGlzZWNvbmRzLCBpcyB0YWtlbiB0byBiZSB0aGUKK3N5c1VwVGltZSBmaWVsZCBvZiB0aGUgYXBwbGljYXRpb24uCisuVFAKKy5CSSBcLXggIlx8IEFERFJFU1NcXiIKK2lmIHRoZQorLkIgXC14CitvcHRpb24gaXMgcHJlc2VudCB0aGVuIGNvbnRhY3QgdGhlIEFnZW50WCBtYXN0ZXIgYXQgQUREUkVTUyBhbmQgbm90IHRoZSBkZWZhdWx0CitvbmUuCisuUEQKKy5QUAorQWRkaXRpb25hbGx5IGFsbCB0aGUgb3B0aW9ucyBkZXNjcmliZWQgaW4KKy5JUiBzbm1wY21kKDEpCit1bmRlciB0aGUKKy5CUiAiTUlCIFBBUlNJTkcgT1BUSU9OUyIgIiwgIiAiTE9HR0lORyBPUFRJT05TIiAiIGFuZCAiICJJTlBVVCBPUFRJT05TIgoraGVhZGVycyBhcyB3ZWxsIGFzIHRoZQorLkJSIC1kICIsICIgLUQgIiwgIiAtbSAiIGFuZCAiIC1NCitvcHRpb25zIGFyZSBzdXBwb3J0ZWQuCisuUFAKK0luCisuSSBPSUQgVFlQRSBWQUxVRQordGhlIHBhcnNpbmcgb2YgdGhlCisuSSBWQUxVRQorZmllbGQgaXMgY29udHJvbGxlZCBieSB0aGUKKy5JIFRZUEUKK2ZpZWxkLiBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUKKy5JIFRZUEUKK2ZpZWxkIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6CisuUlMKKy5QRCAwCisuVFAgMworLkIgPQorTGV0CisuSSBPSUQKK2RlY2lkZSBob3cKKy5JIFZBTFVFCitzaG91bGQgYmUgaW50ZXJwcmV0ZWQKKy5UUAorLkIgaQorSU5URUdFUgorLlRQCisuQiB1CitVbnNpZ25lZAorLlRQCisuQiBjCitDb3VudGVyMzIKKy5UUAorLkIgcworT0NURVQgU1RSSU5HIG9mIGNoYWFjdGVycworLlRQCisuQiB4CitPQ1RFVCBTVFJJTkcsIGVudGVyZWQgYXMgYSBzZXF1ZW5jZSBvZiBvcHRpb25hbGx5IHNwYWNlIHNlcGFyYXRlZCBoZXhhZGVjaW1hbAorZGlnaXQgcGFpcnMKKy5UUAorLkIgZAorT0NURVQgU1RSSU5HLCBlbnRlcmVkIGFzIGEgc2VxdWVuY2Ugb2Ygc3BhY2Ugc2VwYXJhdGVkIGRlY2ltYWwgZGlnaXRzIGluIHRoZQorcmFuZ2UgMCAtIDI1NQorLlRQCisuQiBuCitOVUxMCisuVFAKKy5CIG8KK09CSkVDVCBJREVOVElGSUVSCisuVFAKKy5CIHQKK1RpbWVUaWNrcworLlRQCisuQiBhCitJcEFkZHJlc3MKKy5UUAorLkIgYgorQklUUworLlBECisuUkUKK3doaWNoIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyB0aGUKKy5CIHNubXBzZXQKK2NvbW1hbmQuCisuUFAKKy5TSCBFWEFNUExFUworVG8gc2VuZCBhIGdlbmVyaWMgbGlua1VwIHRyYXAgdG8gdGhlIG1hbmFnZXIgZm9yIGludGVyZmFjZSAxIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgY2FuIGJlIHVzZWQ6CisuUFAKK2FnZW50eHRyYXAgbmV0U25tcC4wLjMgaWZpbmRleC4xIGkgMQorLlBQCisuU0ggU0VFIEFMU08KK3NubXBjbWQoMSksIHNubXBzZXQoMSksIHZhcmlhYmxlcyg1KSwgUkZDIDI3NDEKZGlmZiAtLWdpdCBhL21hbi9kZWZhdWx0X3N0b3JlLjMuYm90IGIvbWFuL2RlZmF1bHRfc3RvcmUuMy5ib3QKaW5kZXggNTZhMzY3OC4uZWJkMmJmNiAxMDA2NDQKLS0tIGEvbWFuL2RlZmF1bHRfc3RvcmUuMy5ib3QKKysrIGIvbWFuL2RlZmF1bHRfc3RvcmUuMy5ib3QKQEAgLTExMSwxMCArMTExLDEwIEBACiBhbGxvY2F0aW9uIGZhaWx1cmUpLgogLlRQCiAuQkkgImludCBuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYih1X2NoYXIgIiB0eXBlICIsIGNvbnN0IGNoYXIgKiIgZnR5cGUgIiwgY29uc3QgY2hhciAqIiB0b2tlbiAiLCBpbnQgIiBzdG9yZSAiLCBpbnQgIiB3aGljaCAiKTsiCi1BbmFsb2dvdXMgdG8gdGhlIHByZWNlZWRpbmcgZnVuY3Rpb24sIGJ1dCB0aGUKK0FuYWxvZ291cyB0byB0aGUgcHJlY2VkaW5nIGZ1bmN0aW9uLCBidXQgdGhlCiAuSSB0b2tlbgogaXMgcHJvY2Vzc2VkIGJlZm9yZSBNSUJzIGFyZSByZWFkICh0aGlzIGlzIHRoZXJlZm9yZSB1c2VmdWwgZm9yIGNvbnRyb2xsaW5nCiBNSUIgcHJvY2Vzc2luZyBvcHRpb25zKS4KIC5TSCAiU0VFIEFMU08iCi0uQlIgc25tcF9jb25maWcgIig1KSwgIiByZWFkX2NvbmZpZyAiKDMpIgorLkJSIHNubXBfY29uZmlnICIoNSksICIgbmV0c25tcF9jb25maWdfYXBpICIoMykiCiAKZGlmZiAtLWdpdCBhL21hbi9kZWZhdWx0X3N0b3JlLjMudG9wIGIvbWFuL2RlZmF1bHRfc3RvcmUuMy50b3AKaW5kZXggZWM1MjZiYi4uY2MwNDgyMiAxMDA2NDQKLS0tIGEvbWFuL2RlZmF1bHRfc3RvcmUuMy50b3AKKysrIGIvbWFuL2RlZmF1bHRfc3RvcmUuMy50b3AKQEAgLTEsNSArMSw0IEBACiAuVEggREVGQVVMVF9TVE9SRSAzICIyNSBKdW4gMjAwMiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKLS5VQyA1CiAuU0ggTkFNRQogZGVmYXVsdF9zdG9yZSBcLSBnZW5lcmljIHN0b3JhZ2Ugb2YgZ2xvYmFsIGRhdGEuCiAuU0ggU1lOT1BTSVMKZGlmZiAtLWdpdCBhL21hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmIGIvbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYKaW5kZXggNzQxNTYxNy4uMjBmNWNjMyAxMDA2NDQKLS0tIGEvbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYKKysrIGIvbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYKQEAgLTMsMTMgKzMsMTMgQEAKIGVuY29kZV9rZXljaGFuZ2UgLSBwcm9kdWNlIHRoZSBLZXlDaGFuZ2Ugc3RyaW5nIGZvciBTTk1QdjMKIC5TSCBTWU5PUFNJUwogLkIgZW5jb2RlX2tleWNoYW5nZSAKLS10IG1kNXxzaGExCitcLXQgbWQ1fHNoYTEKIFtcZklPUFRJT05TXGZSXQogLlNIIERFU0NSSVBUSU9OCiAuQiBlbmNvZGVfa2V5Y2hhbmdlCiBwcm9kdWNlcyBhIEtleUNoYW5nZSBzdHJpbmcgdXNpbmcgdGhlIG9sZCBhbmQgbmV3IHBhc3NwaHJhc2VzIAogYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNSBvZiBSRkMgMjI3NCAiVXNlci1iYXNlZCBTZWN1cml0eSBNb2RlbCAoVVNNKSBmb3IgCi12ZXJzaW9uIDMgb2YgdGhlIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wgKFNOTVB2MykiLiBcZkItdFxmUgordmVyc2lvbiAzIG9mIHRoZSBTaW1wbGUgTmV0d29yayBNYW5hZ2VtZW50IFByb3RvY29sIChTTk1QdjMpIi4gXGZCXC10XGZSCiBvcHRpb24gaXMgbWFuZGF0b3J5IGFuZCBzcGVjaWZpZXMgdGhlIGhhc2ggdHJhbnNmb3JtIHR5cGUgdG8gdXNlLgogCiBUaGUgdHJhbnNmb3JtIGlzIHVzZWQgdG8gY29udmVydCBwYXNzcGhyYXNlIHRvIG1hc3RlciBrZXkgZm9yIGEgZ2l2ZW4KQEAgLTIwLDkgKzIwLDkgQEAKIChpbiBvcmRlciBsaXN0ZWQpOgogLklQCiBjb21tYW5kIGxpbmUgb3B0aW9ucyAoc2VlIAotLkIgLU4KKy5CIFwtTgogYW5kCi0uQiAtTworLkIgXC1PCiBvcHRpb25zIGJlbG93KTsKIC5JUAogdGhlIGZpbGUgCkBAIC0zNSw3ICszNSw3IEBACiAuU0ggT1BUSU9OUwogLlRQCiBcZkJcLUVcZlIgWzB4XTxcZkllbmdpbmVJRFxmUj4gRW5naW5lSUQgdXNlZCBmb3IgS3VsIGdlbmVyYXRpb24uCi08XGZJZW5naW5lSURcZlI+IGlzIGludGVwcmV0ZWQgYXMgYSBoZXggc3RyaW5nIHdoZW4gcHJlY2VlZGVkIGJ5IDB4LAorPFxmSWVuZ2luZUlEXGZSPiBpcyBpbnRlcHJldGVkIGFzIGEgaGV4IHN0cmluZyB3aGVuIHByZWNlZGVkIGJ5IDB4LAogb3RoZXJ3aXNlIGl0IGlzIHRyZWF0ZWQgYXMgYSB0ZXh0IHN0cmluZy4gSWYgbm8gPFxmSWVuZ2luZUlEXGZSPiBpcwogc3BlY2lmaWVkLCBpdCBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBmaXJzdCBJUCBhZGRyZXNzIGZvciB0aGUgbG9jYWwKIGhvc3QuCmRpZmYgLS1naXQgYS9tYW4vZml4cHJvYy4xLmRlZiBiL21hbi9maXhwcm9jLjEuZGVmCmluZGV4IGVmOTAwMzYuLmFlODhhM2QgMTAwNjQ0Ci0tLSBhL21hbi9maXhwcm9jLjEuZGVmCisrKyBiL21hbi9maXhwcm9jLjEuZGVmCkBAIC0yNywxMCArMjcsMTAgQEAKIGNoZWNrIHByb2Nlc3MgYWdhaW5zdCBkYXRhYmFzZSAvbG9jYWwvZXRjL2ZpeHByb2MuY29uZi4KIC5UUAogLkIgXC1raWxsCi1raWxsIHByb2Nlc3MsIHdhaXQgNSBzZWNvbmRzLCBraWxsIC05IGlmIHN0aWxsIGV4aXN0CitraWxsIHByb2Nlc3MsIHdhaXQgNSBzZWNvbmRzLCBraWxsIFwtOSBpZiBzdGlsbCBleGlzdAogLlRQCiAuQiBcLXJlc3RhcnQKLWtpbGwgcHJvY2Vzcywgd2FpdCA1IHNlY29uZHMsIGtpbGwgLTkgaWYgc3RpbGwgZXhpc3QsIHRoZW4gc3RhcnQgYWdhaW4KK2tpbGwgcHJvY2Vzcywgd2FpdCA1IHNlY29uZHMsIGtpbGwgXC05IGlmIHN0aWxsIGV4aXN0LCB0aGVuIHN0YXJ0IGFnYWluCiAuVFAKIC5CIFwtZXhpc3QKIGNoZWNrcyBpZiBwcm9jIGV4aXN0cyBpbiBwcyAmJiAobWluIDw9IG51bS4gb2YgcHJvY2Vzc2VzIDw9IG1heCkKZGlmZiAtLWdpdCBhL21hbi9nZXRfbW9kdWxlX25vZGUuMyBiL21hbi9nZXRfbW9kdWxlX25vZGUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vZ2V0X21vZHVsZV9ub2RlLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9pbml0X21pYi4zIGIvbWFuL2luaXRfbWliLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL2luaXRfbWliLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9pbml0X21pYl9pbnRlcm5hbHMuMyBiL21hbi9pbml0X21pYl9pbnRlcm5hbHMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vaW5pdF9taWJfaW50ZXJuYWxzLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9tYWtlX2luZGV4LnBsIGIvbWFuL21ha2VfaW5kZXgucGwKaW5kZXggN2FiMWRkMi4uMzc1NjZiYSAxMDA2NDQKLS0tIGEvbWFuL21ha2VfaW5kZXgucGwKKysrIGIvbWFuL21ha2VfaW5kZXgucGwKQEAgLTI1LDYgKzI1LDcgQEAKIAljaG9tcCgkbmFtZSk7CiAJaWYgKCFleGlzdHMoJHBhZ2VzeyRuYW1lfSkpIHsKIAkgICAgcHJpbnQgU1RERVJSICIkbmFtZSBpcyBpbiAkaW5maWxlLCBidXQgbm90IGluIHRoZSByZXN0IG9mIHRoZSBhcmdzLlxuIjsKKwkgICAgcHJpbnQgU1RERVJSICJNYWtlIHN1cmUgaXQncyBub3QgbGlzdGVkIHR3aWNlIGluICRpbmZpbGUhXG4iOwogCX0KIAlvcGVuKEgsIiRuYW1lLmh0bWwiKTsKIAl3aGlsZSAoPEg+KSB7CmRpZmYgLS1naXQgYS9tYW4vbWFuX3NlY3Rpb25zLnR4dCBiL21hbi9tYW5fc2VjdGlvbnMudHh0CmluZGV4IGI4MThiMGQuLmZjY2U4ZjkgMTAwNjQ0Ci0tLSBhL21hbi9tYW5fc2VjdGlvbnMudHh0CisrKyBiL21hbi9tYW5fc2VjdGlvbnMudHh0CkBAIC0xLDQgKzEsNSBAQAogIyBTTk1QIGJhc2ljIGFwcGxpY2F0aW9ucworZW5jb2RlX2tleWNoYW5nZQogc25tcGNtZAogc25tcHRyYW5zbGF0ZQogc25tcGdldApAQCAtOCw2ICs5LDcgQEAKIHNubXBidWxrd2Fsawogc25tcHNldAogc25tcHRlc3QKK3RrbWliCiAjIFNOTVAgInNlY29uZC1sZXZlbCIgYXBwbGljYXRpb25zCiBzbm1wdGFibGUKIHNubXBkZWx0YQpAQCAtMTcsMTggKzE5LDI1IEBACiBzbm1wbmV0c3RhdAogc25tcGRmCiAjIE5vdGlmaWNhdGlvbiBtYW51YWwgcGFnZXMKK3NubXBpbmZvcm0KIHNubXB0cmFwCiBzbm1wdHJhcGQKIHNubXB0cmFwZC5jb25mCit0cmFwdG9lbWFpbAogIyBTTk1QIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gbWFudWFsIHBhZ2VzCituZXQtc25tcC1jb25maWcKIHNubXBjb25mCiBzbm1wX2NvbmZpZwogc25tcC5jb25mCiAjIEFnZW50IG1hbnVhbCBwYWdlcworZml4cHJvYwogc25tcGQKIHNubXBkLmNvbmYKK3NubXBkLmV4YW1wbGVzCitzbm1wZC5pbnRlcm5hbAogbWliMmMKIG1pYjJjLmNvbmYKK21pYjJjLXVwZGF0ZQogIyBTTk1QIGJhc2UgbGlicmFyeSBBUElzCiBuZXRzbm1wX2xpYnJhcnkKIHJlYWRfY29uZmlnCkBAIC00MSwzMyArNTAsMTA5IEBACiBuZXRzbm1wX21pYl91dGlsaXRpZXMKIG5ldHNubXBfZGVidWcKICMgQWdlbnQgQVBJIG1hbnVhbHMKK2FkZF9taWJkaXIKK2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQKK2NvbmZpZ19wZXJyb3IKK2NvbmZpZ19wd2FybgorZnByaW50X2Rlc2NyaXB0aW9uCitmcHJpbnRfb2JqaWQKK2ZwcmludF92YWx1ZQorZnByaW50X3ZhcmlhYmxlCitnZXRfbW9kdWxlX25vZGUKK2luaXRfbWliCitpbml0X21pYl9pbnRlcm5hbHMKIG5ldHNubXBfYWdlbnQKLXNubXBfYWdlbnRfYXBpCi1zbm1wX3RyYXBfYXBpCi1uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMKLW5ldHNubXBfdXRpbGl0aWVzCi1uZXRzbm1wX2hhbmRsZXIKLW5ldHNubXBfc2NhbGFyCiBuZXRzbm1wX2JhYnlfc3RlcHMKIG5ldHNubXBfYnVsa190b19uZXh0Ci1uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cAotbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQKLW5ldHNubXBfdGFibGVfZGF0YXNldAotbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MKLW5ldHNubXBfb2xkX2FwaQotbmV0c25tcF93YXRjaGVyCi1uZXRzbm1wX3RhYmxlX2FycmF5Ci1uZXRzbm1wX211bHRpcGxleGVyCi1uZXRzbm1wX3NlcmlhbGl6ZQogbmV0c25tcF9jYWNoZV9oYW5kbGVyCi1uZXRzbm1wX0NvbnRhaW5lcl9pdGVyYXRvcgotbmV0c25tcF90YWJsZV9pdGVyYXRvcgotbmV0c25tcF90YWJsZQotbmV0c25tcF90YWJsZV9kYXRhCi1uZXRzbm1wX3N0YXNoX2NhY2hlCi1uZXRzbm1wX3Jvd19tZXJnZQotbmV0c25tcF9yZWFkX29ubHkKLW5ldHNubXBfbGVhZgotbmV0c25tcF9pbnN0YW5jZQogbmV0c25tcF9jb250YWluZXIKK25ldHNubXBfQ29udGFpbmVyX2l0ZXJhdG9yCituZXRzbm1wX2RzX2dldF9ib29sZWFuCituZXRzbm1wX2RzX2dldF9pbnQKK25ldHNubXBfZHNfZ2V0X3N0cmluZworbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcKK25ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliCituZXRzbm1wX2RzX3NldF9ib29sZWFuCituZXRzbm1wX2RzX3NldF9pbnQKK25ldHNubXBfZHNfc2V0X3N0cmluZworbmV0c25tcF9kc19zaHV0ZG93bgorbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQKK25ldHNubXBfaGFuZGxlcgorbmV0c25tcF9pbnN0YW5jZQorbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MKK25ldHNubXBfbGVhZgorbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzCiBuZXRzbm1wX21vZGVfZW5kX2NhbGwKK25ldHNubXBfbXVsdGlwbGV4ZXIKK25ldHNubXBfb2xkX2FwaQorbmV0c25tcF9yZWFkX29ubHkKK25ldHNubXBfcm93X21lcmdlCituZXRzbm1wX3NjYWxhcgorbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAKK25ldHNubXBfc2VyaWFsaXplCituZXRzbm1wX3N0YXNoX2NhY2hlCituZXRzbm1wX3RhYmxlCituZXRzbm1wX3RhYmxlX2FycmF5CituZXRzbm1wX3RhYmxlX2RhdGEKK25ldHNubXBfdGFibGVfZGF0YXNldAorbmV0c25tcF90YWJsZV9pdGVyYXRvcgorbmV0c25tcF91dGlsaXRpZXMKK25ldHNubXBfd2F0Y2hlcgorcHJpbnRfZGVzY3JpcHRpb24KK3ByaW50X21pYgorcHJpbnRfb2JqaWQKK3ByaW50X3ZhbHVlCitwcmludF92YXJpYWJsZQorcmVhZF9hbGxfbWlicworcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UKK3JlYWRfY29uZmlncworcmVhZF9taWIKK3JlYWRfbW9kdWxlCityZWFkX21vZHVsZV9ub2RlCityZWFkX29iamlkCityZWFkX3ByZW1pYl9jb25maWdzCityZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIKK3JlZ2lzdGVyX2FwcF9wcmVtaWJfaGFuZGxlcgorcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIKK3JlZ2lzdGVyX21pYl9oYW5kbGVycworcmVnaXN0ZXJfcHJlbWliX2hhbmRsZXIKK3NlbmRfZWFzeV90cmFwCitzZW5kX3RyYXBfdmFycworc2VuZF92MnRyYXAKK3NodXRkb3duX21pYgorc25tcF9hZ2VudF9hcGkKK3NubXBfYWxhcm1fcmVnaXN0ZXIKK3NubXBfYWxhcm1fcmVnaXN0ZXJfaHIKK3NubXBfYWxhcm1fdW5yZWdpc3Rlcgorc25tcF9hcGlfZXJyc3RyaW5nCitzbm1wX2Nsb3NlCitzbm1wX2Vycm9yCitzbm1wX2ZyZWVfcGR1Citzbm1wX29wZW4KK3NubXBfcGVycm9yCitzbm1wX3JlYWQKK3NubXBfc2VsZWN0X2luZm8KK3NubXBfc2VuZAorc25tcF9zZXNzX2FzeW5jX3NlbmQKK3NubXBfc2Vzc19jbG9zZQorc25tcF9zZXNzX2Vycm9yCitzbm1wX3Nlc3NfaW5pdAorc25tcF9zZXNzX29wZW4KK3NubXBfc2Vzc19wZXJyb3IKK3NubXBfc2Vzc19yZWFkCitzbm1wX3Nlc3Nfc2VsZWN0X2luZm8KK3NubXBfc2Vzc19zZW5kCitzbm1wX3Nlc3Nfc2Vzc2lvbgorc25tcF9zZXNzX3RpbWVvdXQKK3NubXBfc2V0X21pYl93YXJuaW5ncworc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMKK3NubXBfdGltZW91dAorc25tcF90cmFwX2FwaQorc25wcmludF9vYmppZAorc25wcmludF92YWx1ZQorc25wcmludF92YXJpYWJsZQorc3ByaW50X3JlYWxsb2Nfb2JqaWQKK3NwcmludF9yZWFsbG9jX3ZhbHVlCitzcHJpbnRfcmVhbGxvY192YXJpYWJsZQordW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIKK3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYW4vbWliMmMtdXBkYXRlLjEuZGVmIGIvbWFuL21pYjJjLXVwZGF0ZS4xLmRlZgppbmRleCBiZDlhZDkzLi41MmVjZThhIDEwMDY0NAotLS0gYS9tYW4vbWliMmMtdXBkYXRlLjEuZGVmCisrKyBiL21hbi9taWIyYy11cGRhdGUuMS5kZWYKQEAgLTEsNCArMSw0IEBACi0uVEggbWliMmMtdXBkYXRlICIxIiAiMTYgTm92IDIwMDYiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggbWliMmMtdXBkYXRlIDEgIjA3IEFwciAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIG1pYjJjLXVwZGF0ZSAtIHNjcmlwdCB0byBtZXJnZSBjdXN0b20gY29kZSBpbnRvIHVwZGF0ZWQgbWliMmMgY29kZQogLlNIIFNZTk9QU0lTCkBAIC02LDQgKzYsMjMgQEAKIC5CIG1pYjJjLXVwZGF0ZQogLlNIIERFU0NSSVBUSU9OCiAuUFAKLW1lcmdlcyBjdXN0b20gY29kZSBpbnRvIHVwZGF0ZWQgbWliMmMgY29kZQorVXNlIG1pYjJjLXVwZGF0ZSB0byBnZW5lcmF0ZSB5b3VyIG1pYjJjIGNvZGUgdGVtcGxhdGVzLCBhbmQgaXQgd2lsbCB0cmFjawordGhlIG9yaWdpbmFsIGNvZGUgYW5kIHRoZSBjaGFuZ2VzIHlvdSBtYWtlIHRvIHRoZSBjb2RlLiBJZiB0aGUgbWliMmMKK3RlbXBsYXRlIGNoYW5nZXMgKGJ1ZyBmaXhlcywgZW5oYW5jZXMgaW4gbGF0ZXIgcmVsZWFzZXMpLCByZS1ydW5uaW5nCittaWIyYyB3aWxsIHVwZGF0ZSB0aGUgdGVtcGxhdGUgYW5kIHRoZW4gYXR0ZW1wdCB0byByZS1hcHBseSB5b3VyCitjaGFuZ2VzLgorLlBQCitUaGlzIGNhbiBiZSBleHRyZW1lbHkgdXNlZnVsIHdoZW4gZGV2ZWxvcGluZyB5b3VyIG93biBtaWIyYyB0ZW1wbGF0ZXMuCisuUFAKK1doZW4geW91IGZpcnN0IHJ1biBtaWIyYy11cGRhdGUsIGl0IHdpbGwgY3JlYXRlIHNldmVyYWwgaGlkZGVuCitkaXJlY3RvcmllcyBhbmQgYSAubWliMmMtdXBkYXRlcmMgZmlsZS4gWW91IG11c3QgZWRpdCB0aGUgLm1pYjJjLXVkcGF0ZXJjCitmaWxlIHRvIHNwZWNpZnkgdHdvIHZhbHVlcy4gVGhlIGZpcnN0LCBVUERBVEVfT0lELCBpcyB0aGUgdGFibGUgbmFtZQordG8gc3BlY2lmeSB3aGVuIHJ1bm5pbmcgbWliMmMuIFRoZSBzZWNvbmQsIFVQREFURV9DT05GLCBpcyB0aGUgbWliMmMKK2NvbmZpZ3VyYXRpb24gZmlsZSB0byBzcGVjaWZ5IHdoZW4gcnVubmluZyBtaWIyYy4KKy5QUAorQWRkaXRpb25hbCBtaWIyYyBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgaW4gVVBEQVRFX01JQjJDX09QVFMuCisuUFAKKy5TSCBCVUdTCisuUFAKK21pYjJjLXVwZGF0ZSBoYXMgb25seSBiZWVuIHRlc3RlZCBvbiBpbmRpdmlkdWFsIHRhYmxlcy4gU3BlY2lmeWluZworYSBzY2FsYXIgb3IgYW5kIGVudGlyZSBNSUIgbWlnaHQgbm90IHdvcmsuCmRpZmYgLS1naXQgYS9tYW4vbWliMmMuMS5kZWYgYi9tYW4vbWliMmMuMS5kZWYKaW5kZXggMGI4Yzk4OS4uYjljMTEzNCAxMDA2NDQKLS0tIGEvbWFuL21pYjJjLjEuZGVmCisrKyBiL21hbi9taWIyYy4xLmRlZgpAQCAtNywxMiArNywxMiBAQAogLlwiIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKIC5cIiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBNSUIyQyAxICIxIFNlcCAyMDA0IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIE1JQjJDIDEgIjA1IEFwciAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIG1pYjJjIC0tIGdlbmVyYXRlIHRlbXBsYXRlIGNvZGUgZm9yIGV4dGVuZGluZyB0aGUgYWdlbnQKIC5TSCBTWU5PUFNJUwogLkIgbWliMmMKLVstaF0gLWMgQ09ORklHRklMRSBbLUkgUEFUSF0gWy1mIE9VVE5BTUVdIFstaV1bcV1bLVMgVkFSPVZBTF0gTUlCTk9ERQorWy1oXSAtYyBDT05GSUdGSUxFIFstSSBQQVRIXSBbLWYgT1VUTkFNRV0gWy1pXVstc11bLXFdWy1TIFZBUj1WQUxdIE1JQk5PREUKIC5TSCBERVNDUklQVElPTgogVGhlIG1pYjJjIHRvb2wgaXMgZGVzaWduZWQgdG8gdGFrZSBhIHBvcnRpb24gb2YgdGhlIE1JQiB0cmVlIChhcyBkZWZpbmVkCiBieSBhIE1JQiBmaWxlKSBhbmQgZ2VuZXJhdGUgdGhlIHRlbXBsYXRlIEMgY29kZSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50CkBAIC0xNzUsNiArMTc1LDEwIEBACiAuQkkgLWkKIERvIG5vdCBydW4gaW5kZW50IG9uIHRoZSByZXN1bHRpbmcgY29kZS4KIC5UUAorLkJJIC1zCitEbyBub3QgbG9vayBmb3IgTUlCTk9ERS5zZWQgYW5kIHJ1biBzZWQgb24gdGhlIHJlc3VsdGluZyBjb2RlLiBUaGlzCitpcyB1c2VmdWwgdG8gc2hvcnRlbiBsb25nIG1pYiB2YXJpYWJsZSBuYW1lcyBpbiB0aGUgY29kZS4KKy5UUAogLkJJIC1xCiBSdW4gaW4gInF1aWV0IiBtb2RlLCB3aGljaCBtaW5pbWl6ZXMgdGhlIHN0YXR1cyBtZXNzYWdlcwogbWliMmMgZ2VuZXJhdGVzLgpkaWZmIC0tZ2l0IGEvbWFuL21pYjJjLmNvbmYuNS5pbiBiL21hbi9taWIyYy5jb25mLjUuaW4KaW5kZXggOWJlZjg3NS4uMzY5MmE2NSAxMDA2NDQKLS0tIGEvbWFuL21pYjJjLmNvbmYuNS5pbgorKysgYi9tYW4vbWliMmMuY29uZi41LmluCkBAIC0xLDcgKzEsNiBAQAotLlRIIE1JQjJDLkNPTkYgNSAiMjggQXByIDIwMDQiIFY1LjIgIk5ldC1TTk1QIgotLlVDIDQKKy5USCBNSUIyQy5DT05GIDUgIjI4IEFwciAyMDA0IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKLW1pYjJjLmNvbmYgLS0gSG93IHRvIHdyaXRlIG1pYjJjLmNvbmYgZmlsZXMgdG8gZG8gQU5ZVEhJTkcgYmFzZWQgb24gTUlCIGlucHV0LgorbWliMmMuY29uZiBcW2VtXSBIb3cgdG8gd3JpdGUgbWliMmMuY29uZiBmaWxlcyB0byBkbyBBTllUSElORyBiYXNlZCBvbiBNSUIgaW5wdXQuCiAuU0ggU1lOT1BTSVMKICUgY2F0ID4gbWliMmMudGVzdC5jb25mICA8PCBFT0YKIEBmb3JlYWNoICR0IHRhYmxlQApAQCAtMTMsNyArMTIsNyBAQAogQGVuZEAKIEVPRgogCi0lIG1pYjJjIC1jIG1pYjJjLnRlc3QuY29uZiBpbnRlcm5ldAorJSBtaWIyYyBcLWMgbWliMmMudGVzdC5jb25mIGludGVybmV0CiAuU0ggREVTQ1JJUFRJT04KIFRoZSBtaWIyYy5jb25mIHNjcmlwdCBsYW5ndWFnZSBpcyBhIE1JQi1wYXJ0aWN1bGFyIGxhbmd1YWdlIGRlc2lnbmVkCiB0byBlYXNpbHkgcHJvY2VzcyBNSUIgbm9kZXMgaW4gd2F5cyB0aGF0IHlvdSB3YW50LiAgbWliMmMgaXMgYQpkaWZmIC0tZ2l0IGEvbWFuL21pYl9hcGkuMy5kZWYgYi9tYW4vbWliX2FwaS4zLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI2ZDFiMC4uMDAwMDAwMAotLS0gYS9tYW4vbWliX2FwaS4zLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDMyMiArMCwwIEBACi0uVEggTUlCX0FQSSAzICIyMiBBcHIgMjAwOSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKLS5TSCBOQU1FCi1pbml0X21pYiwgYWRkX21pYmRpciwgaW5pdF9taWJfaW50ZXJuYWxzLAotYWRkX21vZHVsZV9yZXBsYWNlbWVudCwKLXJlYWRfbW9kdWxlLCByZWFkX21pYiwgcmVhZF9hbGxfbWlicywKLXJlYWRfb2JqaWQsIHJlYWRfbW9kdWxlX25vZGUsIGdldF9tb2R1bGVfbm9kZSwKLXNubXBfc2V0X21pYl93YXJuaW5ncywgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMsCi1zaHV0ZG93bl9taWIsCi1wcmludF9taWIsCi1wcmludF92YXJpYWJsZSwgZnByaW50X3ZhcmlhYmxlLCBzbnByaW50X3ZhcmlhYmxlLCBzcHJpbnRfcmVhbGxvY192YXJpYWJsZSwKLXByaW50X3ZhbHVlLCBmcHJpbnRfdmFsdWUsIHNucHJpbnRfdmFsdWUsIHNwcmludF9yZWFsbG9jX3ZhbHVlLAotcHJpbnRfb2JqaWQsIGZwcmludF9vYmppZCwgc25wcmludF9vYmppZCwgc3ByaW50X3JlYWxsb2Nfb2JqaWQsCi1wcmludF9kZXNjcmlwdGlvbiwgZnByaW50X2Rlc2NyaXB0aW9uIC0gbWliX2FwaSBmdW5jdGlvbnMKLS5TSCBTWU5PUFNJUwotLkIgI2luY2x1ZGUgPG5ldC1zbm1wL21pYl9hcGkuaD4KLS5QUAotLkIgInZvaWQgaW5pdF9taWIodm9pZCk7Ci0uYnIKLS5CSSAiaW50IGFkZF9taWJkaXIoY29uc3QgY2hhciAqIiAiZGlybmFtZSIgKTsKLS5icgotLkJJICJpbnQgYWRkX21vZHVsZV9yZXBsYWNlbWVudChjb25zdCBjaGFyICoiICJvbGRfbW9kdWxlIiAiLCBjb25zdCBjaGFyICoiICJuZXdfbW9kdWxlIiAiLCBjb25zdCBjaGFyICoiICJ0YWciICIsIGludCAiICJsZW4iICk7Ci0uYnIKLS5CICJ2b2lkIGluaXRfbWliX2ludGVybmFscyh2b2lkKTsKLS5icgotLkJJICJzdHJ1Y3QgdHJlZSAqcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqIiAibmFtZSIgKTsKLS5icgotLkJJICJzdHJ1Y3QgdHJlZSAqcmVhZF9taWIoY29uc3QgY2hhciAqIiAiZmlsZW5hbWUiICk7Ci0uYnIKLS5CICJzdHJ1Y3QgdHJlZSAqcmVhZF9hbGxfbWlicyh2b2lkKTsKLS5QUAotLkIgInZvaWQgc2h1dGRvd25fbWliKHZvaWQpOwotLlBQCi0uQkkgInZvaWQgcHJpbnRfbWliKEZJTEUgKiIgImZwIiApOwotLlBQCi0uQkkgImludCByZWFkX29iamlkKGNvbnN0IGNoYXIgKiIgImlucHV0IiAiLCBvaWQgKiIgIm91dHB1dCIgIiwgc2l6ZV90ICoiICJvdXRfbGVuIiApOwotLmJyCi0uQkkgImludCBnZXRfbW9kdWxlX25vZGUoY29uc3QgY2hhciAqIiAibmFtZSIgIiwgY29uc3QgY2hhciAqIiAibW9kdWxlIiAiLCBvaWQgKiIgIm9iamlkIiAiLCBzaXplX3QgKiIgIm9iamlkbGVuIiApOwotLlBQCi0uQkkgInZvaWQgcHJpbnRfdmFyaWFibGUoY29uc3Qgb2lkICoiICJvYmppZCIgIiwgc2l6ZV90ICIgIm9iamlkbGVuIiAiLCBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgInZhcmlhYmxlIiApOwotLmJyCi0uQkkgInZvaWQgZnByaW50X3ZhcmlhYmxlKEZJTEUgKiIgZnAgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSApOwotLmJyCi0uQkkgImludCBzbnByaW50X3ZhcmlhYmxlKGNoYXIgKiIgImJ1ZiIgIiwgc2l6ZV90ICIgImxlbiIgIiwgY29uc3Qgb2lkICoiICJvYmppZCIgIiwgc2l6ZV90ICIgIm9iamlkbGVuIiAiLCBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgInZhcmlhYmxlIiApOwotLmJyCi0uQkkgImludCBzcHJpbnRfcmVhbGxvY192YXJpYWJsZSh1X2NoYXIgKioiIGJ1ZiAiLCBzaXplX3QgKiIgYnVmX2xlbiAiLCBzaXplX3QgKiIgb3V0X2xlbiAiLCBpbnQgIiBhbGxvd19yZWFsbG9jICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgKTsKLS5QUAotLkJJICJ2b2lkIHByaW50X3ZhbHVlKG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJpYWJsZSkKLS5icgotLkJJICJ2b2lkIGZwcmludF92YWx1ZShGSUxFICoiIGZwICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgKTsKLS5icgotLkJJICJpbnQgc25wcmludF92YWx1ZShjaGFyICoiIGJ1ZiAiLCBzaXplX3QgIiAibGVuIiAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICk7Ci0uYnIKLS5CSSAiaW50IHNwcmludF9yZWFsbG9jX3ZhbHVlKHVfY2hhciAqKiIgYnVmICIsIHNpemVfdCAqIiBidWZfbGVuICIsIHNpemVfdCAqIiBvdXRfbGVuICIsIGludCAiIGFsbG93X3JlYWxsb2MgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSApOwotLlBQCi0uQkkgInZvaWQgcHJpbnRfb2JqaWQoY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICk7Ci0uYnIKLS5CSSAidm9pZCBmcHJpbnRfb2JqaWQoRklMRSAqIiBmcCAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gKTsKLS5icgotLkJJICJpbnQgc25wcmludF9vYmppZChjaGFyICoiIGJ1ZiAiLCBzaXplX3QgIiAibGVuIiAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gKTsKLS5icgotLkJJICJpbnQgc3ByaW50X3JlYWxsb2Nfb2JqaWQodV9jaGFyICoqIiBidWYgIiwgc2l6ZV90ICoiIGJ1Zl9sZW4gIiwgc2l6ZV90ICoiIG91dF9sZW4gIiwgaW50ICJhbGxvd19yZWFsbG9jICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiApOwotLlBQCi0uQkkgInZvaWQgcHJpbnRfZGVzY3JpcHRpb24ob2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGludCAiIHdpZHRoICk7Ci0uYnIKLS5CSSAidm9pZCBmcHJpbnRfZGVzY3JpcHRpb24oRklMRSAqIiBmcCAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgaW50ICIgd2lkdGggKTsKLS5QUAotLkJJICJ2b2lkIHNubXBfc2V0X21pYl93YXJuaW5ncyhpbnQgIiBsZXZlbCApOwotLmJyCi0uQkkgInZvaWQgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMoaW50ICIgc2F2ZSAiKTsiCi0uUFAKLS5TSCBERVNDUklQVElPTgotVGhlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggTUlCIG1vZHVsZXMgZmFsbCBpbnRvIGZvdXIgZ3JvdXBzLiAgVGhvc2UKLWRlYWxpbmcgd2l0aCBpbml0aWFsaXNhdGlvbiBhbmQgc2h1dGRvd24sIHRob3NlIHRoYXQgcmVhZCBpbiBhbmQKLXBhcnNlIE1JQiBmaWxlcywgdGhvc2UgdGhhdCBzZWFyY2ggdGhlIE1JQiB0cmVlLCBhbmQgdmFyaW91cyBvdXRwdXQKLXJvdXRpbmVzLgotLlNTIEluaXRpYWxpc2F0aW9uIGFuZCBTaHV0ZG93bgotLkIgaW5pdF9taWIKLWlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGFsbCBjYWxscyB0bwotLkJSIGFkZF9taWJkaXIgIiwgIiByZWFkX21vZHVsZSAiIGFuZCAiIHJlYWRfbWliCi1mb3Igc3RhbmRhcmQgYXBwbGljYXRpb25zLiAgSXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyCi1yb3V0aW5lIHRoYXQgbWFuaXB1bGF0ZXMgb3IgYWNjZXNzZXMgdGhlIE1JQiB0cmVlLiAgVGhpcyByb3V0aW5lIHNldHMKLXVwIHZhcmlvdXMgaW50ZXJuYWwgc3RydWN0dXJlcywgYXMgd2VsbCBhcyByZWFkaW5nIGluIHRoZSBkZWZhdWx0IE1JQgotbW9kdWxlcywgYXMgZGV0YWlsZWQgYmVsb3cuCi0uUFAKLS5CIGFkZF9taWJkaXIKLWlzIHVzZWQgdG8gZGVmaW5lIHRoZSByYW5nZSBvZiBkaXJlY3RvcnkgbG9jYXRpb25zIHdoaWNoIGFyZSBzZWFyY2hlZAotZm9yIGZpbGVzIGNvbnRhaW5pbmcgTUlCIG1vZHVsZXMgKG9uZSBtb2R1bGUgcGVyIGZpbGUpLiAgQnkgZGVmYXVsdCwKLXRoaXMgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeQotLkkgREFUQURJUi9taWJzCi1idXQgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotLkkgTUlCRElSUwotdG8gYSAoY29sb24tc2VwYXJhdGVkKSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaC4KLU5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5IGxvYWQgdGhlIE1JQiBtb2R1bGVzIGxvY2F0ZWQKLWluIHRoYXQgZGlyZWN0b3J5LCBidXQgaXMgYW4gaW5pdGlhbGlzYXRpb24gc3RlcCB0byBtYWtlIHRoZW0gYXZhaWxhYmxlLgotVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY291bnQgb2YgZmlsZXMgZm91bmQgaW4gdGhlIGRpcmVjdG9yeSwgb3IgYSAtMQotaWYgdGhlcmUgaXMgYW4gZXJyb3IuICAKLS5QUAotLkIgaW5pdF9taWJfaW50ZXJuYWxzCi1zZXRzIHVwIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzLCBwcmVwYXJhdG9yeSB0byByZWFkaW5nIGluIE1JQgotbW9kdWxlcy4gIEl0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYWxsIGNhbGxzIHRvCi0uQlIgYWRkX21pYmRpciAsCi1hbmQgYmVmb3JlIGFuZCBjYWxscyB0bwotLkJSIHJlYWRfbW9kdWxlIC4KLVRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYKLS5CIGluaXRfbWliCi1pcyB1c2VkLgotLlBQCi0uQiBzaHV0ZG93bl9taWIKLXdpbGwgY2xlYXIgdGhlIGluZm9ybWF0aW9uIHRoYXQgd2FzIGdhdGhlcmVkIGJ5IAotLkJSIHJlYWRfbW9kdWxlICIsICIgYWRkX21pYmRpciAiIGFuZCAiIGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQgLgotSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBvbmUgZG9lcyBub3QgaW52b2tlCi0uQlIgc2h1dGRvd25fbWliCi13aGlsZSB0aGVyZSBhcmUgU05NUCBzZXNzaW9ucyBiZWluZyBhY3RpdmVseSBtYW5hZ2VkLgotLlNTIFJlYWRpbmcgYW5kIFBhcnNpbmcgTUlCcwotLkIgYWRkX21vZHVsZV9yZXBsYWNlbWVudAotY2FuIGJlIHVzZWQgdG8gYWxsb3cgbmV3IE1JQiBtb2R1bGVzIHRvIG9ic29sZXRlIG9sZGVyIG9uZXMsIHdpdGhvdXQKLW5lZWRpbmcgdG8gYW1lbmQgdGhlIGltcG9ydHMgY2xhdXNlcyBvZiBvdGhlciBtb2R1bGVzLiAgSXQgdGFrZXMgdGhlCi1uYW1lcyBvZiB0aGUgb2xkIGFuZCBuZXcgbW9kdWxlcywgdG9nZXRoZXIgd2l0aCBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoCi1wb3J0aW9ucyBvZiB0aGUgb2xkIG1vZHVsZSBhcmUgYWZmZWN0ZWQuCi0uUlMKLS5UUwotdGFiKCspOwotbGIgbGIgbGIKLWwgIGwgIGwuCi10YWcgKyBsZW4gKyBsb2FkIHRoZSBuZXcgbW9kdWxlIHdoZW46Ci1OVUxMICsgMCArIGFsd2F5cyAodGhlIG9sZCBtb2R1bGUgaXMgYSBzdHJpY3Qgc3Vic2V0IG9mCi0gKyArIHRoZSBuZXcpCi1uYW1lICsgMCArIGZvciB0aGUgZ2l2ZW4gdGFnIG9ubHkKLW5hbWUgKyBub24tMCArIGZvciBhbnkgaWRlbnRpZmllciB3aXRoIHRoaXMgcHJlZml4Ci0uVEUKLS5SRQotSXQgY2FuIGFsc28gYmUgdXNlZCB0byBoYW5kbGUgZXJyb3JzIGluIHRoZSBtb2R1bGUgaWRlbnRpZmllcnMgdXNlZAotaW4gTUlCIGltcG9ydCBjbGF1c2VzIChzdWNoIGFzIHJlZmVycmluZyB0bwotLkkgUkZDMTIxMwotaW5zdGVhZCBvZgotLklSIFJGQzEyMTMtTUlCICkuCi0uUFAKLS5CIHJlYWRfbW9kdWxlCi1sb2NhdGVzIGFuZCBwYXJzZXMgdGhlIG1vZHVsZSBzcGVjaWZpZWQsIHRvZ2V0aGVyIHdpdGggYW55IG1vZHVsZXMKLXRoYXQgaXQgaW1wb3J0cyBmcm9tLCBhbmQgYWRkcyB0aGUgY29udGVudHMgb2YgdGhlc2UgbW9kdWxlcyB0byB0aGUKLWFjdGl2ZSBNSUIgdHJlZS4gIE5vdGUgdGhhdAotLkIgYWRkX21pYmRpcgotbXVzdCBmaXJzdCBiZSBjYWxsZWQgdG8gYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmlsZSB3aXRoIHRoZQotbW9kdWxlIGRlZmluaXRpb24sIGlmIHRoaXMgaXMgbm90IGluIHRoZSBzdGFuZGFyZCBwYXRoLgotLmJyCi1CeSBkZWZhdWx0LCB0aGUgZm9sbG93aW5nIE1JQiBtb2R1bGVzIHdpbGwgYmUgbG9hZGVkOiAgSVAtTUlCLCBJRi1NSUIsCi1UQ1AtTUlCLCBVRFAtTUlCLCBTTk1QdjItTUlCLCBSRkMxMjEzLU1JQiwgVUNELVNOTVAtTUlCLgotVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotLkkgTUlCUwotdG8gYSAoY29sb24tc2VwYXJhdGVkKSBsaXN0IG9mIG1vZHVsZXMgdG8gbG9hZC4KLUlmIHRoaXMgdmFyaWFibGUgc3RhcnRzIHdpdGggYSBwbHVzIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIG1vZHVsZXMKLWFyZSBhZGRlZCB0byB0aGUgZGVmYXVsdCBsaXN0LiAgT3RoZXJ3aXNlIG9ubHkgdGhvc2UgbW9kdWxlcyBsaXN0ZWQgYXJlCi1sb2FkZWQgKHRvZ2V0aGVyIHdpdGggYW55IG90aGVycyB0aGV5IGltcG9ydCBmcm9tKS4KLUlmCi0uSSBNSUJTCi1pcyBzZXQgdG8KLS5JUiBBTEwgLAotLkIgcmVhZF9hbGxfbWlicwotaXMgY2FsbGVkIHRvIGxvYWQgYWxsIHRoZSBNSUIgZmlsZXMgZm91bmQgaW4gYWxsIHRoZSBzcGVjaWZpZWQKLS5JUiBNSUJESVJTIC4KLS5QUAotLkIgcmVhZF9taWIKLXBhcnNlcyB0aGUgZmlsZSBzcGVjaWZpZWQsIHRvZ2V0aGVyIHdpdGggYW55IG1vZHVsZXMgdGhhdCBpdCBpbXBvcnRzCi1mcm9tLCBhbmQgYWRkcyB0aGUgY29udGVudHMgdG8gdGhlIGFjdGl2ZSBNSUIgdHJlZS4gIFN1Y2ggYSBmaWxlIGNhbgotY29udGFpbiBtb3JlIHRoZW4gb25lIG1vZHVsZSwgdGhvdWdoIGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0IGFueQotaW1wb3J0cyBvY2N1ciBlYXJsaWVyIGluIHRoZSBmaWxlLCBpZiB0aGV5IGFyZSBub3QgdG8gYmUgcmVhZCBmcm9tIHRoZQotaW5zdGFsbGVkIG1vZHVsZXMuICBOb3RlIHRoYXQgdGhlIGZpbGUgc3BlY2lmaWVkIGRvZXMgbm90IG5lZWQgdG8gYmUKLWluIGFueSBvZiB0aGUgZGlyZWN0b3JpZXMgaW5pdGlhbGlzZWQgYnkKLS5CIGFkZF9taWJkaXIKLShvciB0aGUgZGVmYXVsdCBzZXR1cCksIHRob3VnaCBhbnkgaW1wb3J0ZWQgbW9kdWxlcyBkby4KLS5icgotVGhlIGVudmlyb25tZW50IHZhcmlhYmxlCi0uSSBNSUJGSUxFUwotY2FuIGJlIHNldCB0byBhIChjb2xvbi1zZXBhcmF0ZWQpIGxpc3Qgb2YgZmlsZXMgY29udGFpbmluZyBNSUJzIHRvIGxvYWQuCi0uUFAKLS5CIHJlYWRfb2JqaWQKLXRha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB0ZXh0dWFsIHZlcnNpb24gb2YgYW4gb2JqZWN0IGlkZW50aWZpZXIKLShpbiBlaXRoZXIgbnVtZXJpYyBvciBkZXNjcmlwdG9yIGZvcm0pLCBhbmQgdHJhbnNmb3JtcyB0aGlzIGludG8gdGhlCi1jb3JyZXNwb25kaW5nIGxpc3Qgb2Ygc3ViLWlkZW50aWZpZXJzLiAgVGhpcyBpcyByZXR1cm5lZCBpbiB0aGUKLS5JIG91dHB1dAotcGFyYW1ldGVyLCB3aXRoIHRoZSBudW1iZXIgb2Ygc3ViLWlkZW50aWZpZXJzIHJldHVybmVkIHZpYQotLklSIG91dF9sZW4gLgotV2hlbiBjYWxsZWQsIAotLkkgb3V0X2xlbgotbXVzdCBob2xkIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUKLS5JIG91dHB1dAotYXJyYXkuCi1JZiBtdWx0aXBsZSBvYmplY3QgaWRlbnRpZmllcnMgYXJlIGJlaW5nIHByb2Nlc3NlZCwgdGhlbiB0aGlzCi1sZW5ndGggc2hvdWxkIGJlIHJlc2V0IGJlZm9yZSBlYWNoIGNhbGwuCi1UaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBvZiAxIGlmIGl0IHN1Y2NlZWRzIGluIHBhcnNpbmcgdGhlIHN0cmluZwotYW5kIDAgb3RoZXJ3aXNlLgotLlNTIFNlYXJjaGluZyB0aGUgTUlCIFRyZWUKLS5CIGdldF9tb2R1bGVfbm9kZQotdGFrZXMgYSBkZXNjcmlwdG9yIGFuZCB0aGUgbmFtZSBvZiBhIG1vZHVsZSwgYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcKLW9pZCBsaXN0LCBpbiB0aGUgc2FtZSB3YXkgYXMKLS5CIHJlYWRfb2JqaWQKLWFib3ZlLgotLmJyCi1JZiB0aGUgbW9kdWxlIG5hbWUgaXMgc3BlY2lmaWVkIGFzICJBTlkiLCB0aGVuIHRoaXMgcm91dGluZSB3aWxsCi1hc3N1bWUgdGhhdCB0aGUgZGVzY3JpcHRvciBnaXZlbiBpcyB1bmlxdWUgd2l0aGluIHRoZSB0cmVlLCBhbmQgd2lsbAotcmV0dXJuIHRoZSBtYXRjaGluZyBlbnRyeS4gIElmIHRoaXMgYXNzdW1wdGlvbiBpcyBpbnZhbGlkLCB0aGVuIHRoZQotYmVoYXZpb3VyIGFzIHRvIHdoaWNoIHZhcmlhYmxlIGlzIHJldHVybmVkIGlzIGltcGxlbWVudGF0aW9uCi1kZXBlbmRlbnQuCi0uU1MgT3V0cHV0Ci0uQiBwcmludF9taWIKLXdpbGwgcHJpbnQgb3V0IGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgTUlCIHRyZWUgdG8KLXRoZSBzcGVjaWZpZWQgRklMRSBwb2ludGVyLgotLlBQCi0uQiBwcmludF92YXJpYWJsZQotd2lsbCB0YWtlIGFuIG9iamVjdCBpZGVudGlmaWVyIChhcyByZXR1cm5lZCBieQotLkIgcmVhZF9vYmppZAotb3IKLS5CUiBnZXRfbW9kdWxlX25vZGUgKQotYW5kIGFuIGluc3RhbmNlIG9mIHN1Y2ggYSB2YXJpYWJsZSwgYW5kIHByaW50cyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0Ci10aGUgdGV4dHVhbCBmb3JtIG9mIHRoZSBvYmplY3QgaWRlbnRpZmllciB0b2dldGhlciB3aXRoIHRoZSB2YWx1ZQotb2YgdGhlIHZhcmlhYmxlLgotLkIgZnByaW50X3ZhcmlhYmxlCi1kb2VzIHRoZSBzYW1lLCBidXQgcHJpbnRzIHRvIHRoZSBGSUxFIHBvaW50ZXIgc3BlY2lmaWVkIGJ5IHRoZSBpbml0aWFsCi1wYXJhbWV0ZXIuCi0uYnIKLS5CIHNucHJpbnRfdmFyaWFibGUKLXByaW50cyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieQotLkkgYnVmCi13aGljaCBpcyBvZiBsZW5ndGgKLS5JUiBsZW4gCi1hbmQgcmV0dXJucyBlaXRoZXIgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQsIG9yIC0xIGlmIHRoZQotYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLiAgSW4gdGhlIGxhdHRlciBjYXNlLAotLkkgYnVmCi13aWxsIHR5cGljYWxseSBjb250YWluZWQgYSB0cnVuY2F0ZWQgdmVyc2lvbiBvZiB0aGUgaW5mb3JtYXRpb24gKGJ1dAotdGhpcyBiZWhhdmlvdXIgaXMgbm90IGd1YXJhbnRlZWQpLiAgVGhpcyBmdW5jdGlvbiByZXBsYWNlcyB0aGUKLW9ic29sZXRlIGZ1bmN0aW9uCi0uQlIgc3ByaW50X3ZhcmlhYmxlIC4KLS5icgotLkIgc3ByaW50X3JlYWxsb2NfdmFyaWFibGUKLWlzIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb24gdXNlZCB0byBpbXBsZW1lbnQgYWxsIHRoZXNlIGZ1bmN0aW9ucy4gIEl0Ci1wcmludHMgdG8gYSBzcGVjaWZpZWQgb2Zmc2V0IGluIGEgc3RyaW5nIGJ1ZmZlci4gIFRoZQotLkkgYnVmCi1wYXJhbWV0ZXIgcG9pbnRzIHRvIGEgcG9pbnRlciB0byB0aGF0IGJ1ZmZlcjsKLS5JIGJ1Zl9sZW4KLXBvaW50cyB0byBhIHZhcmlhYmxlIGhvbGRpbmcgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGF0IGJ1ZmZlciwgYW5kCi0uSSBvdXRfbGVuCi1wb2ludHMgdG8gYSB2YXJpYWJsZSBob2xkaW5nIHRoZSBvZmZzZXQgdG8gd2hpY2ggdG8gcHJpbnQuCi0uSSBvdXRfbGVuCi13aWxsIGJlIHVwZGF0ZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IG9mIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBsYXN0Ci1vbmUgYWRkZWQgdG8gdGhlIGJ1ZmZlci4gIElmCi0uSSBhbGxvd19yZWFsbG9jCi1pcyAxLCB0aGUgYnVmZmVyIHdpbGwgYmUgZHluYW1pY2FsbHkgZXhwYW5kZWQsIGFzIG5lY2Vzc2FyeSwgdG8gaG9sZAotdGhlIG91dHB1dDsgdGhlIHZhcmlhYmxlcyBwb2ludGVkIHRvIGJ5Ci0uSSBidWYKLWFuZAotLkkgYnVmX2xlbgotd2lsbCBiZSB1cGRhdGVkLiAgSWYKLS5JIGFsbG93X3JlYWxsb2MKLWlzIDAsIHRoZSBidWZmZXIgd2lsbCBub3QgYmUgZHluYW1pY2FsbHkgZXhwYW5kZWQuCi0uQiBzcHJpbnRfcmVhbGxvY192YXJpYWJsZQotcmV0dXJucyAwIGlmCi0uSSBhbGxvd19yZWFsbG9jCi1pcyAxIGFuZCBhbiBhdHRlbXB0IHRvIGFsbG9jYXRlIG1lbW9yeSB0byBleHBhbmQgdGhlIGJ1ZmZlciBmYWlscywgb3IKLWlmCi0uSSBhbGxvd19yZWFsbG9jCi1pcyAwIGFuZCB0aGUgb3V0cHV0IHdvdWxkbid0IGZpdCBpbiB0aGUgYnVmZmVyLiAgT3RoZXJ3aXNlIGl0IHJldHVybnMKLTEuICBXaGVuIHVzaW5nIHRoaXMgZnVuY3Rpb24geW91IHNob3VsZCBiZSBjYXJlZnVsIHRvIGNhbGwKLS5CUiBmcmVlICgzKQotb24KLS5JICpidWYKLXdoZW4geW91IGhhdmUgZmluaXNoZWQgd2l0aCBpdC4KLS5QUAotLkJSIHByaW50X3ZhbHVlICwKLS5CUiBmcHJpbnRfdmFsdWUgLAotLkJSIHNucHJpbnRfdmFsdWUKLWFuZAotLkIgc3ByaW50X3JlYWxsb2NfdmFsdWUKLWRvIHRoZSBzYW1lIGFzIHRoZSBlcXVpdmFsZW50Ci0uQiBwcmludF92YXJpYWJsZQotcm91dGluZXMsIGJ1dCBvbmx5IGRpc3BsYXlpbmcgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgd2l0aG91dCB0aGUKLWNvcnJlc3BvbmRpbmcgb2JqZWN0IGlkZW50aWZpZXIuCi0uUFAKLS5CUiBwcmludF9vYmppZCAsCi0uQlIgZnByaW50X29iamlkICwKLS5CUiBzbnByaW50X29iamlkICwKLWFuZAotLkIgc3ByaW50X3JlYWxsb2Nfb2JqaWQKLXRha2UgYW4gb2JqZWN0IGlkZW50aWZpZXIgKHdpdGhvdXQgYW4gYWNjb21wYW55aW5nIHZhcmlhYmxlIGluc3RhbmNlKQotYW5kIHByaW50IG91dCB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbi4KLS5QUAotLkJJIHByaW50X2Rlc2NyaXB0aW9uICwKLS5CSSBmcHJpbnRfZGVzY3JpcHRpb24gLAotLkJJIHNucHJpbnRfZGVzY3JpcHRpb24gLAotYW5kCi0uQiBzcHJpbnRfcmVhbGxvY19kZXNjcmlwdGlvbgotdGFrZSBhbiBvYmplY3QgaWRlbnRpZmllciAoYXMgZm9yCi0uQiBwcmludF9vYmppZAotYWJvdmUpIGFuZCBwcmludCBvdXQgYSB2ZXJzaW9uIG9mIHRoZSBNSUIgZGVmaW5pdGlvbiBmb3IgdGhhdCBvYmplY3QsCi10b2dldGhlciB3aXRoIHRoZSBmdWxsIE9JRC4gVGhlCi0uSSB3aWR0aAotYXJndW1lbnQgY29udHJvbHMgaG93IHRoZSBPSUQgaXMgbGF5ZWQgb3V0LgotLlBQCi1CeSBkZWZhdWx0IHRoZSBwYXJzZXIgZG9lcyBub3Qgc2F2ZSBkZXNjcmlwdGlvbnMgc2luY2UgdGhleSBtYXkgYmUKLWh1Z2UuICBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHByaW50IHRoZW0sIHlvdSBtdXN0IGNhbGwKLS5CUiBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucygxKSAuCi0uUFAKLUluIGdlbmVyYWwgdGhlIHBhcnNlciBpcyBzaWxlbnQgYWJvdXQgd2hhdCBzdHJhbmdlbmVzc2VzIGl0IHNlZXMgaW4KLXRoZSBNSUIgZmlsZXMuIFRvIGdldCB3YXJuaW5ncyByZXBvcnRlZCwgY2FsbAotLkIgc25tcF9zZXRfbWliX3dhcm5pbmdzCi13aXRoIGEKLS5JIGxldmVsCi1vZiAxIChvciAyIGZvciBldmVuIG1vcmUgd2FybmluZ3MpLgotLlNIICJFTlZJUk9OTUVOVCBWQVJJQUJMRVMiCi0uVFAgMTAKLU1JQkRJUlMKLUEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBNSUIgbW9kdWxlcy4KLURlZmF1bHQ6IERBVEFESVIvc25tcC9taWJzCi0uVFAgMTAKLU1JQkZJTEVTCi1BIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIHRvIGxvYWQuCi1EZWZhdWx0OiAobm9uZSkKLS5UUCAxMAotTUlCUwotQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBNSUIgbW9kdWxlcyB0byBsb2FkLgotRGVmYXVsdDogSVAtTUlCOklGLU1JQjpUQ1AtTUlCOlVEUC1NSUI6U05NUHYyLU1JQjogUkZDMTIxMy1NSUI6VUNELVNOTVAtTUlCLgotLlNIICJTRUUgQUxTTyIKLS5CUiBzbm1wX2FwaSAiKDMpIgpkaWZmIC0tZ2l0IGEvbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZiBiL21hbi9uZXQtc25tcC1jb25maWcuMS5kZWYKaW5kZXggNjUyMWM5ZS4uM2EwZmEyYiAxMDA2NDQKLS0tIGEvbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZgorKysgYi9tYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmCkBAIC0xLDE3ICsxLDE3IEBACiAuVEggbmV0LXNubXAtY29uZmlnIDEgIjE2IE5vdiAyMDA2IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKLW5ldC1zbm1wLWNvbmZpZyBcLSByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGluc3RhbGxlZCBuZXQtc25tcCBsaWJyYXJpZXMgYW5kIGJpbmFyaWVzIAorbmV0XC1zbm1wXC1jb25maWcgLSByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGluc3RhbGxlZCBuZXQtc25tcCBsaWJyYXJpZXMgYW5kIGJpbmFyaWVzIAogLlNIIFNZTk9QU0lTCiAuUFAKLS5CIG5ldC1zbm1wLWNvbmZpZworLkIgbmV0XC1zbm1wXC1jb25maWcKIFtPUFRJT05TXQogLlNIIERFU0NSSVBUSU9OCiAuUFAKLVRoZSBcZkluZXQtc25tcC1jb25maWdcZlAgc2hlbGwgc2NyaXB0IGlzIGRlc2lnbmVkIHRvIHJldHJpZXZlIHRoZQorVGhlIFxmSW5ldFwtc25tcFwtY29uZmlnXGZQIHNoZWxsIHNjcmlwdCBpcyBkZXNpZ25lZCB0byByZXRyaWV2ZSB0aGUKIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpYnJhcmllcyBhbmQgYmluYXJpZXMgZGVhbGluZyB3aXRoCiB0aGUgU2ltcGxlIE5ldHdvcmsgTWFuYWdlbWVudCBQcm90b2NvbCAoU05NUCksIGJ1aWx0IGZyb20gdGhlIAogLkIgbmV0LXNubXAgCi1zb3VyY2UgcGFja2FnZS4gVGhlIGluZm9ybWF0aW9uIGlzIHBhcnRpY3VsYXJpbHkgdXNlZnVsIGZvcgorc291cmNlIHBhY2thZ2UuIFRoZSBpbmZvcm1hdGlvbiBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvcgogYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0byBsaW5rIGFnYWluc3QgdGhlIFNOTVAgbGlicmFyaWVzIGFuZCBoZW5jZQogbXVzdCBrbm93IGFib3V0IGFueSBvdGhlciBsaWJyYXJpZXMgdGhhdCBtdXN0IGJlIGxpbmtlZCBpbiBhcyB3ZWxsLgogCkBAIC0yOSw4ICsyOSw4IEBACiAuUFAKIFNOTVAgU2V0dXAgY29tbWFuZHM6CiAuVFAKLVxmQlwtXC1jcmVhdGVcLXNubXB2M1wtdXNlclxmUiBbLXJvXSBbLWEgYXV0aHBhc3NdIFsteCBwcml2cGFzc10gWy1YIERFU3xBRVNdCi1bLUEgTUQ1fFNIQV0gW3VzZXJuYW1lXQorXGZCXC1cLWNyZWF0ZVwtc25tcHYzXC11c2VyXGZSIFtcLXJvXSBbXC1hIGF1dGhwYXNzXSBbXC14IHByaXZwYXNzXQorW1wtWCBERVN8QUVTXSBbXC1BIE1ENXxTSEFdIFt1c2VybmFtZV0KIC5QUAogVGhlc2Ugb3B0aW9ucyBwcm9kdWNlIHRoZSB2YXJpb3VzIGNvbXBpbGF0aW9uIGZsYWdzIG5lZWRlZCB3aGVuCiBidWlsZGluZyBleHRlcm5hbCBTTk1QIGFwcGxpY2F0aW9uczoKQEAgLTYzLDggKzYzLDggQEAKIEF1dG9tYXRlZCBzdWJhZ2VudCBidWlsZGluZyAocHJvZHVjZXMgYW4gT1VUUFVUTkFNRSBiaW5hcnkgZmlsZSk6CiBbVGhpcyBmZWF0dXJlIGhhcyBub3QgYmVlbiBleHRlbnNpdmVseSB0ZXN0ZWQsICB1c2UgYXQgeW91ciBvd24gcmlzay5dCiAuVFAKLVxmQlwtXC1jb21waWxlXC1zdWJhZ2VudFxmUiBPVVRQVVROQU1FIFstLW5vcm1dIFstLWNmbGFncyBmbGFnc10KLVstLWxkZmxhZ3MgZmxhZ3NdIG1pYm1vZHVsZTEuYyBbLi4uXV0KK1xmQlwtXC1jb21waWxlXC1zdWJhZ2VudFxmUiBPVVRQVVROQU1FIFtcLVwtbm9ybV0gW1wtXC1jZmxhZ3MgZmxhZ3NdCitbXC1cLWxkZmxhZ3MgZmxhZ3NdIG1pYm1vZHVsZTEuYyBbLi4uXV0KIC5UUAogXGZCXC1cLW5vcm1cZlIKIGxlYXZlIHRoZSBnZW5lcmF0ZWQgLmMgZmlsZSBhcm91bmQgdG8gcmVhZC4KZGlmZiAtLWdpdCBhL21hbi9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xLmRlZiBiL21hbi9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTY5NDRjCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEuZGVmCkBAIC0wLDAgKzEsMjggQEAKKy5USCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciAxICIxNyBTZXAgMjAwOCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCituZXQtc25tcC1jcmVhdGUtdjMtdXNlciBcLSBjcmVhdGUgYSBTTk1QdjMgdXNlciBpbiBuZXQtc25tcCBjb25maWd1cmF0aW9uIGZpbGUKKy5TSCBTWU5PUFNJUworLlBQCisuQiBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciBbLXJvXSBbLWEgYXV0aHBhc3NdIFsteCBwcml2cGFzc10gWy1YIERFU3xBRVNdCisuQiBbdXNlcm5hbWVdCisuU0ggREVTQ1JJUFRJT04KKy5QUAorVGhlIFxmSW5ldC1zbm1wLWNyZWF0ZS12My11c2VyXGZQIHNoZWxsIHNjcmlwdCBpcyBkZXNpZ25lZCB0byBjcmVhdGUgYQorbmV3IHVzZXIgaW4gbmV0LXNubXAgY29uZmlndXJhdGlvbiBmaWxlICgvdmFyL25ldC1zbm1wL3NubXBkLmNvbmYgYnkgZGVmYXVsdCkuCisKKy5TSCBPUFRJT05TCisuVFAKK1xmQlwtXC12ZXJzaW9uXGZSCitkaXNwbGF5cyB0aGUgbmV0LXNubXAgdmVyc2lvbiBudW1iZXIKKy5UUAorXGZCXC1yb1xmUgorY3JlYXRlIGFuIHVzZXIgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnMKKy5UUAorXGZCXC1hIGF1dGhwYXNzXGZSCitzcGVjaWZ5IGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkCisuVFAKK1xmQlwteCBwcml2cGFzc1xmUgorc3BlY2lmeSBlbmNyeXB0aW9uIHBhc3N3b3JkCisuVFAKK1xmQlwtWCBERVN8QUVTXGZSCitzcGVjaWZ5IGVuY3J5cHRpb24gYWxnb3JpdGhtCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9hZ2VudC4zIGIvbWFuL25ldHNubXBfYWdlbnQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjN2RkNS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9hZ2VudC4zCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLlRIICJUaGUgTmV0LVNOTVAgYWdlbnQiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1UaGUgTmV0LVNOTVAgYWdlbnQgXC0gCi0uUFAKLVRoZSBzbm1wIGFnZW50IHJlc3BvbmRzIHRvIFNOTVAgcXVlcmllcyBmcm9tIG1hbmFnZW1lbnQgc3RhdGlvbnMuICAKLQotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQk5ldC1TTk1QIEFnZW50IGhhbmRsZXIgYW5kIGV4dGVuc2liaWxpdHkgQVBJXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklUaGUgYmFzaWMgdGhlb3J5IGdvZXMgc29tZXRoaW5nIGxpa2UgdGhpczogSW4gdGhlIHBhc3QsIHdpdGggdGhlIG9yaWdpbmFsIG1pYiBcZkJtb2R1bGVcZlAgYXBpICh3aGljaCBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIENNVSBTTk1QIGNvZGUpIHRoZSB1bmRlcmx5aW5nIG1pYiBtb2R1bGVzIHdlcmUgcGFzc2VkIHZlcnkgbGl0dGxlIGluZm9ybWF0aW9uIChvbmx5IHRoZSB0cnVseSBtb3N0IGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGEgcmVxdWVzdCkuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCTWFpbnRhaW4gYSByZWdpc3RyeSBvZiBNSUIgc3VidHJlZXMsIHRvZ2V0aGVyIHdpdGggcmVsYXRlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgbWlibW9kdWxlLCBzZXNzaW9ucywgZXRjXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQlRyYXAgZ2VuZXJhdGlvbiByb3V0aW5lcyBmb3IgbWliIG1vZHVsZXMgdG8gdXNlXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldC1zbm1wIGFnZW50IHJlbGF0ZWQgcHJvY2Vzc2luZ1xmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSBzbm1wIGFnZW50IHJlc3BvbmRzIHRvIFNOTVAgcXVlcmllcyBmcm9tIG1hbmFnZW1lbnQgc3RhdGlvbnMuIAotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiBiL21hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWVmZDAwCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmCkBAIC0wLDAgKzEsMTMyIEBACisuVEggTkVUU05NUF9BR0VOVF9BUEkgMyAiMTMgQXVnIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorbmV0c25tcF9hZ2VudF9hcGkgLSBlbWJlZGRpbmcgYW4gYWdlbnQgaW50byBhIGV4dGVybmFsIGFwcGxpY2F0aW9uCisuU0ggU1lOT1BTSVMKKy5uZgorI2luY2x1ZGUgPG5ldFwtc25tcC9uZXRcLXNubXBcLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldFwtc25tcC9uZXRcLXNubXBcLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0XC1zbm1wL2FnZW50L25ldFwtc25tcFwtYWdlbnRcLWluY2x1ZGVzLmg+CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IGFnZW50eF9zdWJhZ2VudCA9IDE7ICAvKiBDaGFuZ2UgdGhpcyBpZiB5b3UncmUgYSBtYXN0ZXIgYWdlbnQuICAqLworCisgIHNubXBfZW5hYmxlX3N0ZGVycmxvZygpOworCisgIC8qICBJZiB3ZSdyZSBhbiBBZ2VudFggc3ViYWdlbnQuLi4gICovCisgIGlmIChhZ2VudHhfc3ViYWdlbnQpIHsKKyAgICAgIC8qIC4uLm1ha2UgdXMgYW4gQWdlbnRYIGNsaWVudC4gICovCisgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUk9MRSwgMSk7CisgIH0KKworICBpbml0X2FnZW50KCJ5b3VyYXBwbmFtZSIpOworCisgIC8qICBJbml0aWFsaXplIHlvdXIgTUlCIGNvZGUgaGVyZS4gICovCisgIGluaXRfbXlfbWliX2NvZGUoKTsKKworICAvKiAgYHlvdXJhcHBuYW1lJyB3aWxsIGJlIHVzZWQgdG8gcmVhZCB5b3VyYXBwbmFtZS5jb25mIGZpbGVzLiAgKi8KKyAgaW5pdF9zbm1wKCJ5b3VyYXBwbmFtZSIpOworCisgIC8qICBJZiB3ZSdyZSBnb2luZyB0byBiZSBhIFNOTVAgbWFzdGVyIGFnZW50Li4uICAqLworICBpZiAoIWFnZW50eF9zdWJhZ2VudCkKKyAgICAgIGluaXRfbWFzdGVyX2FnZW50KCk7ICAvKiAgTGlzdGVuIG9uIGRlZmF1bHQgcG9ydCAoMTYxKS4gICovCisKKyAgLyogIFlvdXIgbWFpbiBsb29wIGhlcmUuLi4gICovCisgIHdoaWxlICh3aGF0ZXZlcikgeworICAgICAgLyogaWYgeW91IHVzZSBzZWxlY3QoKSwgc2VlIHNubXBfYXBpKDMpICovCisgICAgICAvKiAgICAgLS0tIE9SIC0tLSAgKi8KKyAgICAgIGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKDApOyAvKiAwID09IGRvbid0IGJsb2NrICovCisgIH0KKworICAvKiAgQXQgc2h1dGRvd24gdGltZTogICovCisgIHNubXBfc2h1dGRvd24oInlvdXJhcHBuYW1lIik7Cit9CisKK1RoZW46CiskKENDKSAuLi4gYG5ldFwtc25tcFwtY29uZmlnIFwtXC1hZ2VudFwtbGlic2AKKworLmZpCisuU0ggREVTQ1JJUFRJT04KKy5QUAorT3VyIGdvYWwgaXMgdG8gY3JlYXRlIGEgZWFzeSB0byB1c2UgaW50ZXJmYWNlIHRvIHRoZSBOZXQtU05NUCBwYWNrYWdlCitzdWNoIHRoYXQgeW91IGNhbiB0YWtlIGNvZGUgdGhhdCB5b3UgaGF2ZSB3cml0dGVuIHRoYXQgaGFzIGJlZW4KK2Rlc2lnbmVkIHRvIGJlIGEgTmV0LVNOTVAgTUlCIG1vZHVsZSBhbmQgZW1iZWQgaXQgaW50byBhbiBleHRlcm5hbAorYXBwbGljYXRpb24gd2hlcmUgeW91IGNhbiBlaXRoZXIgY2hvc2UgdG8gYmUgYSBTTk1QIG1hc3RlciBhZ2VudCBvciBhbgorQWdlbnRYIHN1Yi1hZ2VudCB1c2luZyB0aGUgc2FtZSBNSUIgbW9kdWxlIGNvZGUuICBPdXIgc3VnZ2VzdGlvbiBpcwordGhhdCB5b3UgdXNlIG91ciAob3IgYW5vdGhlcikgU05NUCBhZ2VudCBhcyB0aGUgQWdlbnRYIG1hc3RlciBhZ2VudAorYW5kIGNob3NlIHRvIGJlY29tZSBhbiBBZ2VudFggc3ViYWdlbnQgd2hpY2ggdGhlbiBhdHRhY2hlcyB0byB0aGUKK21hc3Rlci4KKy5QUAorVGhlIE5ldC1TTk1QIHBhY2thZ2UgcHJvdmlkZXMgYSBwYWlyIG9mIGxpYnJhcmllcyB0aGF0IGVuYWJsZXMgZWFzeQorZW1iZWRkaW5nIG9mIGFuIFNOTVAgb3IgQWdlbnRYIGFnZW50IGludG8gYW4gZXh0ZXJuYWwgc29mdHdhcmUKK3BhY2thZ2UuIEFnZW50WCBpcyBhbiBleHRlbnNpYmxlIHByb3RvY29sIGRlc2lnbmVkIHRvIGFsbG93IG11bHRpcGxlCitTTk1QIHN1Yi1hZ2VudHMgYWxsIHJ1biBvbiBvbmUgbWFjaGluZSB1bmRlciBhIHNpbmdsZSBTTk1QIG1hc3RlcgorYWdlbnQuICBJdCBpcyBkZWZpbmVkIGluIFJGQyAyNzQxLgorLlBQCitZb3Ugd2lsbCBuZWVkIHRvIHBlcmZvcm0gYSBmZXcgdGFza3MgaW4gb3JkZXIgdG8gYWNjb21wbGlzaAordGhpcy4gRmlyc3Qgb2ZmLCB5b3Ugd2lsbCBuZWVkIHRvIGluaXRpYWxpemUgYm90aCB0aGUgU05NUCBsaWJyYXJ5IGFuZAordGhlIFNOTVAgYWdlbnQgbGlicmFyeS4gQXMgaW5kaWNhdGVkIGFib3ZlLCB0aGlzIGlzIGRvbmUgc2xpZ2h0bHkKK2RpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB5b3UgYXJlIGdvaW5nIHRvIHBlcmZvcm0gYXMgYQorbWFzdGVyIGFnZW50IG9yIGFuIEFnZW50WCBzdWItYWdlbnQuCisuU0ggQ09ORklHVVJBVElPTgorLlBQCitJZiB5b3UgaW50ZW5kIHRvIG9wZXJhdGUgYXMgYW4gQWdlbnRYIHN1Yi1hZ2VudCwgeW91IHdpbGwgaGF2ZSB0bworY29uZmlndXJlZCB0aGUgTmV0LVNOTVAgcGFja2FnZSB3aXRoIGFnZW50eCBzdXBwb3J0ICh3aGljaCBpcyB0dXJuZWQKK29uIGJ5IGRlZmF1bHQsIHNvIGp1c3QgZG9uJ3QgdHVybiBpdCBvZmYpCisuUFAKK0FkZGl0aW9uYWxseSwgeW91IHdpbGwgbmVlZCB0byBsaW5rIGFnYWluc3QgdGhlIE5ldC1TTk1QIGxpYnJhcmllcworKHVzZSB0aGUgb3V0cHV0IG9mICJuZXRcLXNubXBcLWNvbmZpZyBcLVwtYWdlbnRcLWxpYnMiIHRvIGdldCBhIGxpYnJhcnkKK2xpc3QpIGFuZCBjYWxsIHN1YmFnZW50X3ByZV9pbml0KCkgYXMgaW5kaWNhdGVkIGFib3ZlLgorLlNIIENPTVBJTElORworLlBQCitJbiBvcmRlciB0byBtYWtlIHVzZSBvZiBhbnkgb2YgdGhlIGFib3ZlIEFQSSwgeW91IHdpbGwgbmVlZCB0byBsaW5rCithZ2FpbnN0IGF0IGxlYXN0IHRoZSBmb3VyIGxpYnJhcmllcyBsaXN0ZWQgYWJvdmUuCisuU0ggRlVOQ1RJT05TCisuUFAgVGhpcyBpcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGFib3ZlIGFuZAord2hlcmUgdG8gZmluZCBvdXQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVtLiAgSXQgaXMgY2VydGFpbmx5IG5vdCBhCitjb21wbGV0ZSBsaXN0IG9mIHdoYXQgaXMgYXZhaWxhYmxlIHdpdGhpbiBhbGwgdGhlIE5ldC1TTk1QIGxpYnJhcmllcy4gCisuSVAgInNubXBfZW5hYmxlX3N0ZGVycmxvZygpIgorTG9ncyBlcnJvciBvdXRwdXQgZnJvbSB0aGUgU05NUCBhZ2VudCB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgorLklQICJuZXRzbm1wX2RzX3NldF9ib29sZWFuKCkiCitQbGVhc2Ugc2VlIHRoZQorLklSIGRlZmF1bHRfc3RvcmUoMykKK21hbnVhbCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uCithYm91dCB0aGlzIEFQSS4KKy5JUCAiaW5pdF9hZ2VudChjaGFyICpuYW1lKSIKK0luaXRpYWxpemVzIHRoZSBlbWJlZGRlZCBhZ2VudC4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlCisuQlIgImluaXRfc25tcCgpIgorY2FsbC4gIAorLkkgbmFtZQoraXMgdXNlZCB0byBkaWN0YXRlIHdoYXQgLmNvbmYgZmlsZSB0byByZWFkIHdoZW4KKy5CUiAiaW5pdF9zbm1wKCkiCitpcyBjYWxsZWQgbGF0ZXIuCisuSVAgImluaXRfc25tcChjaGFyICpuYW1lKSIKK0luaXRpYWxpemVzIHRoZSBTTk1QIGxpYnJhcnkuICBOb3RlIHRoYXQgb25lIG9mIHRoZSB0aGluZ3MgdGhpcyB3aWxsCitkbyB3aWxsIGJlIHRvIHJlYWQgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBhbiBlZmZvcnQgdG8gY29uZmlndXJlIHlvdXIKK2FwcGxpY2F0aW9uLiBJdCB3aWxsIGF0dGVtcHQgdG8gcmVhZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBuYW1lZCBieQordGhlCisuSSBuYW1lCitzdHJpbmcgdGhhdCB5b3UgcGFzc2VkIGluLiAgSXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGFjY2VzcworY29udHJvbCwgZm9yIGluc3RhbmNlLiAgIFBsZWFzZSBzZWUgdGhlCisuSVIgbmV0c25tcF9jb25maWdfYXBpKDMpICIsICIgc25tcF9jb25maWcoNSkgIiwgYW5kICIgc25tcGQuY29uZig1KQorbWFudWFsIHBhZ2VzIGZvciBmdXJ0aGVyIGRldGFpbHMgb24gdGhpcyBzdWJqZWN0LgorLklQICJpbml0X21hc3Rlcl9hZ2VudCh2b2lkKSIKK0luaXRpYWxpemVzIHRoZSBtYXN0ZXIgYWdlbnQgYW5kIGNhdXNlcyBpdCB0byBsaXN0ZW4gZm9yIFNOTVAgcmVxdWVzdHMgCitvbiBpdHMgZGVmYXVsdCBVRFAgcG9ydCBvZiAxNjEuCisuSVAgImFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKGludCBibG9jaykiCitUaGlzIGNoZWNrcyBmb3IgcGFja2V0cyBhcnJpdmluZyBvbiB0aGUgU05NUCBwb3J0IGFuZCBwcm9jZXNzZXMgdGhlbQoraWYgc29tZSBhcmUgZm91bmQuICBJZiAKKy5JIGJsb2NrCitpcyBub24temVybywgdGhlIGZ1bmN0aW9uIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhIHBhY2tldCBhcnJpdmVzIG9yIGFuIAorYWxhcm0gbXVzdCBiZSBydW4gKHNlZQorLklSIHNubXBfYWxhcm0oMykgKS4KK1RoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBwYWNrZXRzCit3ZXJlIHByb2Nlc3NlZCwgemVybyBpZiBhbiBhbGFybSBvY2N1cnJlZCBhbmQgXC0xIGlmIGFuIGVycm9yIG9jY3VyZWQuCisuSVAgInNubXBfc2h1dGRvd24oY2hhciAqbmFtZSk7IgorVGhpcyBzaHV0cyBkb3duIHRoZSBhZ2VudCwgc2F2aW5nIGFueSBuZWVkZWQgcGVyc2lzdGVudCBzdG9yYWdlLCBldGMuCisuU0ggIlNFRSBBTFNPIgoraHR0cDovL3d3dy5uZXRcLXNubXAub3JnL3R1dG9yaWFsXC01L3Rvb2xraXQvIHNlbGVjdCgyKSwgc25tcF9hcGkoMyksCitkZWZhdWx0X3N0b3JlKDMpLCBzbm1wX2FsYXJtKDMpLCBuZXRzbm1wX2NvbmZpZ19hcGkoMyksIHNubXBfY29uZmlnKDUpLAorc25tcGQuY29uZig1KQpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMyBiL21hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwYmEyZjIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMworKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0uVEggIk1haW50YWluIGEgcmVnaXN0cnkgb2YgTUlCIHN1YnRyZWVzLCB0b2dldGhlciB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIG1pYm1vZHVsZSwgc2Vzc2lvbnMsIGV0YyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLU1haW50YWluIGEgcmVnaXN0cnkgb2YgTUlCIHN1YnRyZWVzLCB0b2dldGhlciB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIG1pYm1vZHVsZSwgc2Vzc2lvbnMsIGV0YyBcLSAKLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJsb29rdXBfY2FjaGVfc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbG9va3VwX2NhY2hlX2NvbnRleHRfc1xmUCIKLS5icgotLmluIC0xYwotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSU5fU05NUF9WQVJTX0NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTVUJUUkVFX0RFRkFVTFRfQ0FDSEVfU0laRVxmUCAgIDgiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTVUJUUkVFX01BWF9DQUNIRV9TSVpFXGZQICAgMzIiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVHlwZWRlZnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbG9va3VwX2NhY2hlX3NcZlAgXGZCbG9va3VwX2NhY2hlXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQmxvb2t1cF9jYWNoZV9jb250ZXh0X3NcZlAgXGZCbG9va3VwX2NhY2hlX2NvbnRleHRcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkIFxmQmludmFsaWRhdGVfbG9va3VwX2NhY2hlXGZQIChjb25zdCBjaGFyICpjb250ZXh0KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfc2V0X2xvb2t1cF9jYWNoZV9zaXplXGZQIChpbnQgbmV3c2l6ZSkiCi0uYnIKLS5SSSAiXGZJc2V0IHRoZSBsb29rdXAgY2FjaGUgc2l6ZSBmb3Igb3B0aW1pemVkIGFnZW50IHJlZ2lzdHJhdGlvbiBwZXJmb3JtYW5jZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZXRfbG9va3VwX2NhY2hlX3NpemVcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbG9va3VwIGNhY2hlIHNpemUgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfc3VidHJlZV9mcmVlXGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKmEpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQm5ldHNubXBfc3VidHJlZV9kZWVwY29weVxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICphKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJzdWJ0cmVlX2NvbnRleHRfY2FjaGVcZlAgKiBcZkJnZXRfdG9wX2NvbnRleHRfY2FjaGVcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQm5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0XGZQIChjb25zdCBjaGFyICpjb250ZXh0X25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQmFkZF9zdWJ0cmVlXGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKm5ld190cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQm5ldHNubXBfc3VidHJlZV9yZXBsYWNlX2ZpcnN0XGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKm5ld190cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9zdWJ0cmVlX2NoYW5nZV9uZXh0XGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnB0ciwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICp0aGVuZXh0KSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfc3VidHJlZV9jaGFuZ2VfcHJldlxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpwdHIsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqdGhlcHJldikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc3VidHJlZV9jb21wYXJlXGZQIChjb25zdCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKmFwLCBjb25zdCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKmJwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfc3VidHJlZV9qb2luXGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnJvb3QpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQm5ldHNubXBfc3VidHJlZV9zcGxpdFxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpjdXJyZW50LCBvaWQgbmFtZVtdLCBpbnQgbmFtZV9sZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3N1YnRyZWVfbG9hZFxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpuZXdfc3ViLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX21pYlxmUCAoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICp2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICptaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4sIGludCBwcmlvcml0eSwgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzLCBjb25zdCBjaGFyICpjb250ZXh0LCBpbnQgdGltZW91dCwgaW50IGZsYWdzLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBpbnQgcGVyZm9ybV9jYWxsYmFjaykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWdpc3Rlcl9taWJfcmVhdHRhY2hcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVnaXN0ZXJfbWliX2RldGFjaFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlZ2lzdGVyX21pYl9jb250ZXh0XGZQIChjb25zdCBjaGFyICptb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKnZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKm1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5LCBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGludCB0aW1lb3V0LCBpbnQgZmxhZ3MpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZWdpc3Rlcl9taWJfcmFuZ2VcZlAgKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHksIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlZ2lzdGVyX21pYl9wcmlvcml0eVxmUCAoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICp2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICptaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4sIGludCBwcmlvcml0eSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlZ2lzdGVyX21pYlxmUCAoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICp2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICptaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9zdWJ0cmVlX3VubG9hZFxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpzdWIsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqcHJldiwgY29uc3QgY2hhciAqY29udGV4dCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnVucmVnaXN0ZXJfbWliX2NvbnRleHRcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgaW50IHByaW9yaXR5LCBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIGNvbnN0IGNoYXIgKmNvbnRleHQpIgotLmJyCi0uUkkgIlxmSVVucmVnaXN0ZXJzIGFuIE9JRCB0aGF0IGhhcyBhbiBhc3NvY2lhdGVkIGNvbnRleHQgbmFtZSB2YWx1ZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF91bnJlZ2lzdGVyX21pYl90YWJsZV9yb3dcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgaW50IHByaW9yaXR5LCBpbnQgdmFyX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLCBjb25zdCBjaGFyICpjb250ZXh0KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdW5yZWdpc3Rlcl9taWJfcmFuZ2VcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgaW50IHByaW9yaXR5LCBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ1bnJlZ2lzdGVyX21pYl9wcmlvcml0eVxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHkpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ1bnJlZ2lzdGVyX21pYlxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnVucmVnaXN0ZXJfbWlic19ieV9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaW5fYV92aWV3XGZQIChvaWQgKm5hbWUsIHNpemVfdCAqbmFtZWxlbiwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgaW50IHR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJjaGVja19hY2Nlc3NcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2FjbV9jaGVja19zdWJ0cmVlXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lbGVuKSIKLS5icgotLlJJICJcZkljaGVja3MgdG8gc2VlIGlmIGV2ZXJ5dGhpbmcgd2l0aGluIGEgZ2l2ZW4gc3VidHJlZSBpcyBlaXRoZXI6IGluIHZpZXcsIG5vdCBpbiB2aWV3LCBvciBwb3NzaWJseSBib3RoLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSBcZkJsb29rdXBfY2FjaGVfY29udGV4dFxmUCAqIFxmQmdldF9jb250ZXh0X2xvb2t1cF9jYWNoZVxmUCAoY29uc3QgY2hhciAqY29udGV4dCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQgXGZCbG9va3VwX2NhY2hlX2FkZFxmUCAoY29uc3QgY2hhciAqY29udGV4dCwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpuZXh0LCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnByZXZpb3VzKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZCBcZkJsb29rdXBfY2FjaGVfcmVwbGFjZVxmUCAoXGZCbG9va3VwX2NhY2hlXGZQICpwdHIsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqbmV4dCwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpwcmV2aW91cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIFxmQmxvb2t1cF9jYWNoZVxmUCAqIFxmQmxvb2t1cF9jYWNoZV9maW5kXGZQIChjb25zdCBjaGFyICpjb250ZXh0LCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50ICpyZXRjbXApIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQm5ldHNubXBfc3VidHJlZV9maW5kX3ByZXZcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpzdWJ0cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQm5ldHNubXBfc3VidHJlZV9maW5kX25leHRcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpzdWJ0cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQm5ldHNubXBfc3VidHJlZV9maW5kXGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqc3VidHJlZSwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJnZXRfc2Vzc2lvbl9mb3Jfb2lkXGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZXR1cF90cmVlXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVtb3ZlX3RyZWVfZW50cnlcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzaHV0ZG93bl90cmVlXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmNsZWFyX3N1YnRyZWVcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqc3ViKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmNsZWFyX2xvb2t1cF9jYWNoZVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJjbGVhcl9jb250ZXh0XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmR1bXBfaWR4X3JlZ2lzdHJ5XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmR1bXBfcmVnaXN0cnlcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlJFVFNJR1RZUEUgXGZCYWdlbnRfU0lHQ0hMRF9oYW5kbGVyXGZQIChpbnQgc2lnKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVnaXN0ZXJfc2lnbmFsXGZQIChpbnQgc2lnLCB2b2lkKCpmdW5jKShpbnQpKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdW5yZWdpc3Rlcl9zaWduYWxcZlAgKGludCBzaWcpIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJzdWJ0cmVlX2NvbnRleHRfY2FjaGVcZlAgKiBcZkJjb250ZXh0X3N1YnRyZWVzXGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbG9va3VwX2NhY2hlX3NpemVcZlAgPSAwIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJleHRlcm5hbF9zaWduYWxfc2NoZWR1bGVkXGZQIFtOVU1fRVhURVJOQUxfU0lHU10iCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCgqIFxmQmV4dGVybmFsX3NpZ25hbF9oYW5kbGVyXGZQIFtOVU1fRVhURVJOQUxfU0lHU10pKGludCkiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfYWNtX2NoZWNrX3N1YnRyZWUgKFxmQm5ldHNubXBfcGR1XGZQICogcGR1LCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZWxlbikiCi0uUFAKLWNoZWNrcyB0byBzZWUgaWYgZXZlcnl0aGluZyB3aXRoaW4gYSBnaXZlbiBzdWJ0cmVlIGlzIGVpdGhlcjogaW4gdmlldywgbm90IGluIHZpZXcsIG9yIHBvc3NpYmx5IGJvdGguIElmIHRoZSBlbnRpcmUgc3VidHJlZSBpcyBub3QtaW4tdmlldyB3ZSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gc2tpcCBjYWxsaW5nIHRoZSBzdWItaGFuZGxlcnMgZW50aXJlbHkuIAotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgaWYgZW50aXJlIHN1YnRyZWUgaXMgYWNjZXNzaWJsZSwgNSBpZiBub3QgYW5kIDcgaWYgcG9ydGlvbnMgYXJlIGJvdGguIDEgb24gZXJyb3IgKGlsbGVnYWwgcGR1IHZlcnNpb24pLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzMjMgb2YgZmlsZSBhZ2VudF9yZWdpc3RyeS5jLgotLlNTICJpbnQgbmV0c25tcF9nZXRfbG9va3VwX2NhY2hlX3NpemUgKHZvaWQpIgotLlBQCi1yZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxvb2t1cCBjYWNoZSBzaXplIFxmQlJldHVybnM6XGZQCi0uUlMgNAotdGhlIGN1cnJlbnQgbG9va3VwIGNhY2hlIHNpemUgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzk2IG9mIGZpbGUgYWdlbnRfcmVnaXN0cnkuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3NldF9sb29rdXBfY2FjaGVfc2l6ZSAoaW50IG5ld3NpemUpIgotLlBQCi1zZXQgdGhlIGxvb2t1cCBjYWNoZSBzaXplIGZvciBvcHRpbWl6ZWQgYWdlbnQgcmVnaXN0cmF0aW9uIHBlcmZvcm1hbmNlLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW5ld3NpemVcZlAgc2V0IHRvIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBjYWNoZSBmb3IgYSBnaXZlbiBjb250ZXh0LiBTZXQgdG8gMCB0byBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgb3IgdG8gLTEgdG8gc2V0IHRvIHRoZSBkZWZhdWx0IGNhY2hlIHNpemUgKDgpLCBvciB0byBhIG51bWJlciBvZiB5b3VyIGNob3NpbmcuIFRoZSByb3VnaCBndWlkZSBpcyB0aGF0IGl0IHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5pb3VzIG1hbmFnZXJzIHlvdSBleHBlY3QgdG8gdGFsayB0byB0aGUgYWdlbnQgKE0pIHRpbWVzIDgwJSAob3Igc28sIGhlIHNheXMgcmFuZG9tbHkpIHRoZSBhdmVyYWdlIG51bWJlciAoTikgb2YgdmFyYmluZHMgeW91IGV4cGVjdCB0byByZWNlaXZlIGluIGEgZ2l2ZW4gcmVxdWVzdCBmb3IgYSBtYW5hZ2VyLiBpZSwgTSB0aW1lcyBOLiBCaWdnZXIgZG9lcyBOT1QgbmVjZXNzYXJpbHkgbWVhbiBiZXR0ZXIuIENlcnRhaW5seSAxNiBzaG91bGQgYmUgYW4gdXBwZXIgbGltaXQuIDMyIGlzIHRoZSBoYXJkIGNvZGVkIGxpbWl0LiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzODMgb2YgZmlsZSBhZ2VudF9yZWdpc3RyeS5jLgotLlNTICJpbnQgdW5yZWdpc3Rlcl9taWJfY29udGV4dCAob2lkICogbmFtZSwgc2l6ZV90IGxlbiwgaW50IHByaW9yaXR5LCBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIGNvbnN0IGNoYXIgKiBjb250ZXh0KSIKLS5QUAotVW5yZWdpc3RlcnMgYW4gT0lEIHRoYXQgaGFzIGFuIGFzc29jaWF0ZWQgY29udGV4dCBuYW1lIHZhbHVlLiBUeXBpY2FsbHkgdXNlZCB3aGVuIGEgXGZCbW9kdWxlXGZQIGhhcyBtdWx0aXBsZSBjb250ZXh0cyBkZWZpbmVkLiBUaGUgcGFyYW1ldGVycyBwcmlvcml0eSwgcmFuZ2Vfc3ViaWQsIGFuZCByYW5nZV91Ym91bmQgc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhZ2VudHgsIHNlZSBSRkMgMjc0MSwgb3RoZXJ3aXNlIHRoZXNlIHZhbHVlcyBzaG91bGQgYWx3YXlzIGJlIDAuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbmFtZVxmUCB0aGUgc3BlY2lmaWMgT0lEIHRvIHVucmVnaXN0ZXIgaWYgaXQgY29uYXRpbnMgdGhlIGFzc29jaWF0ZWQgY29udGV4dC4KLS5icgotXGZJbGVuXGZQIHRoZSBsZW5ndGggb2YgdGhlIE9JRCwgdXNlIE9JRF9MRU5HVEggbWFjcm8uCi0uYnIKLVxmSXByaW9yaXR5XGZQIGEgdmFsdWUgYmV0d2VlbiAxIGFuZCAyNTUsIHVzZWQgdG8gYWNoaWV2ZSBhIGRlc2lyZWQgY29uZmlndXJhdGlvbiB3aGVuIGRpZmZlcmVudCBzZXNzaW9ucyByZWdpc3RlciBpZGVudGljYWwgb3Igb3ZlcmxhcHBpbmcgcmVnaW9ucy4gU3ViYWdlbnRzIHdpdGggbm8gcGFydGljdWxhciBrbm93bGVkZ2Ugb2YgcHJpb3JpdHkgc2hvdWxkIHJlZ2lzdGVyIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUgb2YgMTI3LgotLmJyCi1cZklyYW5nZV9zdWJpZFxmUCBwZXJtaXRzIHNwZWNpZnlpbmcgYSByYW5nZSBpbiBwbGFjZSBvZiBvbmUgb2YgYSBzdWJ0cmVlIHN1Yi1pZGVudGlmaWVycy4gV2hlbiB0aGlzIHZhbHVlIGlzIHplcm8sIG5vIHJhbmdlIGlzIGJlaW5nIHNwZWNpZmllZC4KLS5icgotXGZJcmFuZ2VfdWJvdW5kXGZQIHRoZSB1cHBlciBib3VuZCBvZiBhIHN1Yi1pZGVudGlmaWVyJ3MgcmFuZ2UuIFRoaXMgZmllbGQgaXMgcHJlc2VudCBvbmx5IGlmIHJhbmdlX3N1YmlkIGlzIG5vdCAwLgotLmJyCi1cZkljb250ZXh0XGZQIGEgY29udGV4dCBuYW1lIHRoYXQgaGFzIGJlZW4gY3JlYXRlZAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTY5IG9mIGZpbGUgYWdlbnRfcmVnaXN0cnkuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9hZ2VudF90cmFwLjMgYi9tYW4vbmV0c25tcF9hZ2VudF90cmFwLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNTE3MWQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zCisrKyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLS5USCAiVHJhcCBnZW5lcmF0aW9uIHJvdXRpbmVzIGZvciBtaWIgbW9kdWxlcyB0byB1c2UiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1UcmFwIGdlbmVyYXRpb24gcm91dGluZXMgZm9yIG1pYiBtb2R1bGVzIHRvIHVzZSBcLSAKLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ0cmFwX3NpbmtcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBWMl9UUkFQU19QUkVGSVhcZlAgICBTTk1QX09JRF9TTk1QTU9EVUxFUywxLDEsNSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBWMl9UUkFQX09CSlNfUFJFRklYXGZQICAgU05NUF9PSURfU05NUE1PRFVMRVMsMSwxLDQiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QVjJfQ09NTV9PQkpTX1BSRUZJWFxmUCAgIFNOTVBfT0lEX1NOTVBNT0RVTEVTLDE4LDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX0FVVEhFTlRJQ0FURURfVFJBUFNfRU5BQkxFRFxmUCAgIDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX0FVVEhFTlRJQ0FURURfVFJBUFNfRElTQUJMRURcZlAgICAyIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUFYX0FSR1NcZlAgICAxMjgiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCaW5pdF90cmFwc1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFkZF90cmFwX3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MsIGludCBwZHV0eXBlLCBpbnQgY29uZmlybSwgaW50IHZlcnNpb24pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZW1vdmVfdHJhcF9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCY3JlYXRlX3RyYXBfc2Vzc2lvblxmUCAoY2hhciAqc2luaywgdV9zaG9ydCBzaW5rcG9ydCwgY2hhciAqY29tLCBpbnQgdmVyc2lvbiwgaW50IHBkdXR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcGRfZnJlZV90cmFwc2lua3NcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcGR1XGZQICogXGZCY29udmVydF92MnBkdV90b192MVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnRlbXBsYXRlX3YycGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3BkdVxmUCAqIFxmQmNvbnZlcnRfdjFwZHVfdG9fdjJcZlAgKFxmQm5ldHNubXBfcGR1XGZQICp0ZW1wbGF0ZV92MXBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2VuZF90cmFwc1xmUCAoaW50IHRyYXAsIGludCBzcGVjaWZpYywgb2lkICplbnRlcnByaXNlLCBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFycywgY2hhciAqY29udGV4dCwgaW50IGZsYWdzKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gZ2VuZXJpYyB0cmFwcyBmcm9tIGRpZmZlcmVudCBjbGFzc2VzIG9mIGVxdWlwbWVudC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnNcZlAgKGludCB0cmFwLCBpbnQgc3BlY2lmaWMsIG9pZCAqZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcnMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJoYW5kbGVfaW5mb3JtX3Jlc3BvbnNlXGZQIChpbnQgb3AsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgaW50IHJlcWlkLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCB2b2lkICptYWdpYykiCi0uYnIKLS5SSSAiXGZJQ2FwdHVyZXMgcmVzcG9uc2VzIG9yIHRoZSBsYWNrIHRoZXJlIG9mIGZyb20gSU5GT1JNcyB0aGF0IHdlcmUgc2VudCAxKSBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gYW4gSU5GT1JNIDIpIG9uZSBpc24ndCByZWNlaXZlZCBhbmQgdGhlIHJldHJpZXMvdGltZW91dHMgaGF2ZSBmYWlsZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZW5kX3RyYXBfdG9fc2Vzc1xmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzLCBcZkJuZXRzbm1wX3BkdVxmUCAqdGVtcGxhdGVfcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNlbmRfdHJhcF92YXJzXGZQIChpbnQgdHJhcCwgaW50IHNwZWNpZmljLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcnMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2VuZF9lYXN5X3RyYXBcZlAgKGludCB0cmFwLCBpbnQgc3BlY2lmaWMpIgotLmJyCi0uUkkgIlxmSVNlbmRzIGFuIFNOTVB2MSB0cmFwIChvciB0aGUgU05NUHYyIGVxdWl2YWxlbnQpIHRvIHRoZSBsaXN0IG9mIGNvbmZpZ3VyZWQgdHJhcCBkZXN0aW5hdGlvbnMgKG9yICdzaW5rcycpLCB1c2luZyB0aGUgcHJvdmlkZWQgdmFsdWVzIGZvciB0aGUgZ2VuZXJpYyB0cmFwIHR5cGUgYW5kIHNwZWNpZmljIHRyYXAgdmFsdWUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZW5kX3YydHJhcFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJzKSIKLS5icgotLlJJICJcZklVc2VzIHRoZSBzdXBwbGllZCBsaXN0IG9mIFxmQnZhcmlhYmxlXGZQIGJpbmRpbmdzIHRvIGZvcm0gYW4gU05NUHYyIHRyYXAsIHdoaWNoIGlzIHNlbnQgdG8gU05NUHYyLWNhcGFibGUgc2lua3Mgb24gdGhlIGNvbmZpZ3VyZWQgbGlzdC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNlbmRfdHJhcF9wZHVcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcGRfcGFyc2VfY29uZmlnX2F1dGh0cmFwXGZQIChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wZF9wYXJzZV9jb25maWdfdHJhcHNpbmtcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBkX3BhcnNlX2NvbmZpZ190cmFwMnNpbmtcZlAgKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcGRfcGFyc2VfY29uZmlnX2luZm9ybXNpbmtcZlAgKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcGRfcGFyc2VfY29uZmlnX3RyYXBzZXNzXGZQIChjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBkX3BhcnNlX2NvbmZpZ190cmFwY29tbXVuaXR5XGZQIChjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBkX2ZyZWVfdHJhcGNvbW11bml0eVxmUCAodm9pZCkiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ0cmFwX3NpbmtcZlAgKiBcZkJzaW5rc1xmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IHRpbWV2YWwgXGZCc3RhcnR0aW1lXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJvYmppZF9lbnRlcnByaXNldHJhcFxmUCBbXSA9IHsgTkVUU05NUF9OT1RJRklDQVRJT05fTUlCIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQnRyYXBfdmVyc2lvbl9pZFxmUCBbXSA9IHsgTkVUU05NUF9TWVNURU1fTUlCIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmVudGVycHJpc2V0cmFwX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdHJhcF92ZXJzaW9uX2lkX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCdHJhcF9wcmVmaXhcZlAgW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVggfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCY29sZF9zdGFydF9vaWRcZlAgW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDEgfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCd2FybV9zdGFydF9vaWRcZlAgW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDIgfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCbGlua19kb3duX29pZFxmUCBbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgMyB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJsaW5rX3VwX29pZFxmUCBbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgNCB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJhdXRoX2ZhaWxfb2lkXGZQIFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCA1IH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQmVncF94eHhfb2lkXGZQIFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCA5OSB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJzbm1wdHJhcF9vaWRcZlAgW10gPSB7IFNOTVBWMl9UUkFQX09CSlNfUFJFRklYLCAxLCAwIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQnNubXB0cmFwZW50ZXJwcmlzZV9vaWRcZlAgW10iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQnN5c3VwdGltZV9vaWRcZlAgW10gPSB7IFNOTVBfT0lEX01JQjIsIDEsIDMsIDAgfSIKLS5icgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc25tcHRyYXBfb2lkX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc25tcHRyYXBlbnRlcnByaXNlX29pZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnN5c3VwdGltZV9vaWRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJhZ2VudGFkZHJfb2lkXGZQIFtdID0geyBTTk1QVjJfQ09NTV9PQkpTX1BSRUZJWCwgMywgMCB9IgotLmJyCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJhZ2VudGFkZHJfb2lkX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCY29tbXVuaXR5X29pZFxmUCBbXSA9IHsgU05NUFYyX0NPTU1fT0JKU19QUkVGSVgsIDQsIDAgfSIKLS5icgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCY29tbXVuaXR5X29pZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNubXBfdHJhcGNvbW11bml0eVxmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfZW5hYmxlYXV0aGVudHJhcHNcZlAgPSBTTk1QX0FVVEhFTlRJQ0FURURfVFJBUFNfRElTQUJMRUQiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXRcZlAgPSAwIgotLmJyCi0uaW4gLTFjCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBoYW5kbGVfaW5mb3JtX3Jlc3BvbnNlIChpbnQgb3AsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIHNlc3Npb24sIGludCByZXFpZCwgXGZCbmV0c25tcF9wZHVcZlAgKiBwZHUsIHZvaWQgKiBtYWdpYykiCi0uUFAKLUNhcHR1cmVzIHJlc3BvbnNlcyBvciB0aGUgbGFjayB0aGVyZSBvZiBmcm9tIElORk9STXMgdGhhdCB3ZXJlIHNlbnQgMSkgYSByZXNwb25zZSBpcyByZWNlaXZlZCBmcm9tIGFuIElORk9STSAyKSBvbmUgaXNuJ3QgcmVjZWl2ZWQgYW5kIHRoZSByZXRyaWVzL3RpbWVvdXRzIGhhdmUgZmFpbGVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg1MCBvZiBmaWxlIGFnZW50X3RyYXAuYy4KLS5TUyAiaW50IG5ldHNubXBfc2VuZF90cmFwcyAoaW50IHRyYXAsIGludCBzcGVjaWZpYywgb2lkICogZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXJzLCBjaGFyICogY29udGV4dCwgaW50IGZsYWdzKSIKLS5QUAotVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGdlbmVyaWMgdHJhcHMgZnJvbSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBlcXVpcG1lbnQuIEZvciBleGFtcGxlLCB5b3UgbWF5IHdhbnQgdG8gaGFuZGxlIGEgU05NUF9UUkFQX0xJTktET1dOIHRyYXAgZm9yIGEgcGFydGljdWxhciBkZXZpY2UgaW4gYSBkaWZmZXJlbnQgbWFubmVyIHRvIGEgZ2VuZXJpYyBzeXN0ZW0gU05NUF9UUkFQX0xJTktET1dOIHRyYXAuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHJhcFxmUCBpcyB0aGUgZ2VuZXJpYyB0cmFwIHR5cGUuIFRoZSB0cmFwIHR5cGVzIGFyZToKLS5JUCAiXChidSIgMgotU05NUF9UUkFQX0NPTERTVEFSVDogY29sZCBzdGFydAotLklQICJcKGJ1IiAyCi1TTk1QX1RSQVBfV0FSTVNUQVJUOiB3YXJtIHN0YXJ0Ci0uSVAgIlwoYnUiIDIKLVNOTVBfVFJBUF9MSU5LRE9XTjogbGluayBkb3duCi0uSVAgIlwoYnUiIDIKLVNOTVBfVFJBUF9MSU5LVVA6IGxpbmsgdXAKLS5JUCAiXChidSIgMgotU05NUF9UUkFQX0FVVEhGQUlMOiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlCi0uSVAgIlwoYnUiIDIKLVNOTVBfVFJBUF9FR1BORUlHSEJPUkxPU1M6IGVncCBuZWlnaGJvciBsb3NzCi0uSVAgIlwoYnUiIDIKLVNOTVBfVFJBUF9FTlRFUlBSSVNFU1BFQ0lGSUM6IGVudGVycHJpc2Ugc3BlY2lmaWMKLS5QUAotLmJyCi1cZklzcGVjaWZpY1xmUCBpcyB0aGUgc3BlY2lmaWMgdHJhcCB2YWx1ZS4KLS5icgotXGZJZW50ZXJwcmlzZVxmUCBpcyBhbiBlbnRlcnByaXNlIG9pZCBpbiB3aGljaCB5b3Ugd2FudCB0byBzZW5kIHNwZWNpZmljIHRyYXBzIGZyb20uCi0uYnIKLVxmSWVudGVycHJpc2VfbGVuZ3RoXGZQIGlzIHRoZSBsZW5ndGggb2YgdGhlIGVudGVycHJpc2Ugb2lkLCB1c2UgbWFjcm8sIE9JRF9MRU5HVEgsIHRvIGNvbXB1dGUgbGVuZ3RoLgotLmJyCi1cZkl2YXJzXGZQIGlzIHVzZWQgdG8gc3VwcGx5IGxpc3Qgb2YgXGZCdmFyaWFibGVcZlAgYmluZGluZ3MgdG8gZm9ybSBhbiBTTk1QdjIgdHJhcC4KLS5icgotXGZJY29udGV4dFxmUCBjdXJyZW50bHkgdW51c2VkCi0uYnIKLVxmSWZsYWdzXGZQIGN1cnJlbnRseSB1bnVzZWQKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXZvaWQKLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJzZW5kX2Vhc3lfdHJhcFxmUCAKLS5QUAotXGZCc2VuZF92MnRyYXBcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2Mjkgb2YgZmlsZSBhZ2VudF90cmFwLmMuCi0uU1MgInZvaWQgc2VuZF9lYXN5X3RyYXAgKGludCB0cmFwLCBpbnQgc3BlY2lmaWMpIgotLlBQCi1TZW5kcyBhbiBTTk1QdjEgdHJhcCAob3IgdGhlIFNOTVB2MiBlcXVpdmFsZW50KSB0byB0aGUgbGlzdCBvZiBjb25maWd1cmVkIHRyYXAgZGVzdGluYXRpb25zIChvciAnc2lua3MnKSwgdXNpbmcgdGhlIHByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlIGdlbmVyaWMgdHJhcCB0eXBlIGFuZCBzcGVjaWZpYyB0cmFwIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGV2ZW50dWFsbHkgY2FsbHMgc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycy4gSWYgdGhlIHRyYXAgdHlwZSBpcyBub3Qgc2V0IHRvIFNOTVBfVFJBUF9FTlRFUlBSSVNFU1BFQ0lGSUMgdGhlIGVudGVycHJpc2UgYW5kIGVudGVycHJpc2VfbGVuZ3RoIHBhcmFtYXRlciBpcyBzZXQgdG8gdGhlIHByZSBkZWZpbmVkIE5FVFNOTVBfU1lTVEVNX01JQiBvaWQgYW5kIGxlbmd0aCByZXNwZWN0aXZlbHkuIElmIHRoZSB0cmFwIHR5cGUgaXMgc2V0IHRvIFNOTVBfVFJBUF9FTlRFUlBSSVNFU1BFQ0lGSUMgdGhlIGVudGVycHJpc2UgYW5kIGVudGVycHJpc2VfbGVuZ3RoIHBhcmFtZXRlcnMgYXJlIHNldCB0byB0aGUgcHJlLWRlZmluZWQgTkVUU05NUF9OT1RJRklDQVRJT05fTUlCIG9pZCBhbmQgbGVuZ3RoIHJlc3BlY3RpdmVseS4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0cmFwXGZQIGlzIHRoZSBnZW5lcmljIHRyYXAgdHlwZS4KLS5icgotXGZJc3BlY2lmaWNcZlAgaXMgdGhlIHNwZWNpZmljIHRyYXAgdmFsdWUuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci12b2lkCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycyAKLS5QUAotXGZCc2VuZF92MnRyYXBcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5Nzggb2YgZmlsZSBhZ2VudF90cmFwLmMuCi0uU1MgInZvaWQgc2VuZF92MnRyYXAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhcnMpIgotLlBQCi1Vc2VzIHRoZSBzdXBwbGllZCBsaXN0IG9mIFxmQnZhcmlhYmxlXGZQIGJpbmRpbmdzIHRvIGZvcm0gYW4gU05NUHYyIHRyYXAsIHdoaWNoIGlzIHNlbnQgdG8gU05NUHYyLWNhcGFibGUgc2lua3Mgb24gdGhlIGNvbmZpZ3VyZWQgbGlzdC4gQW4gZXF1aXZhbGVudCBJTkZPUk0gaXMgc2VudCB0byB0aGUgY29uZmlndXJlZCBsaXN0IG9mIGluZm9ybSBzaW5rcy4gU2lua3MgdGhhdCBjYW4gb25seSBoYW5kbGUgU05NUHYxIHRyYXBzIGFyZSBza2lwcGVkLgotLlBQCi1UaGlzIGZ1bmN0aW9uIGV2ZW50dWFsbHkgY2FsbHMgc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycy4gSWYgdGhlIHRyYXAgdHlwZSBpcyBub3Qgc2V0IHRvIFNOTVBfVFJBUF9FTlRFUlBSSVNFU1BFQ0lGSUMgdGhlIGVudGVycHJpc2UgYW5kIGVudGVycHJpc2VfbGVuZ3RoIHBhcmFtYXRlciBpcyBzZXQgdG8gdGhlIHByZSBkZWZpbmVkIE5FVFNOTVBfU1lTVEVNX01JQiBvaWQgYW5kIGxlbmd0aCByZXNwZWN0aXZlbHkuIElmIHRoZSB0cmFwIHR5cGUgaXMgc2V0IHRvIFNOTVBfVFJBUF9FTlRFUlBSSVNFU1BFQ0lGSUMgdGhlIGVudGVycHJpc2UgYW5kIGVudGVycHJpc2VfbGVuZ3RoIHBhcmFtZXRlcnMgYXJlIHNldCB0byB0aGUgcHJlLWRlZmluZWQgTkVUU05NUF9OT1RJRklDQVRJT05fTUlCIG9pZCBhbmQgbGVuZ3RoIHJlc3BlY3RpdmVseS4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl2YXJzXGZQIGlzIHVzZWQgdG8gc3VwcGx5IGxpc3Qgb2YgXGZCdmFyaWFibGVcZlAgYmluZGluZ3MgdG8gZm9ybSBhbiBTTk1QdjIgdHJhcC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXZvaWQKLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJzZW5kX2Vhc3lfdHJhcFxmUCAKLS5QUAotc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycyAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCbm90aWZpY2F0aW9uLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDA3IG9mIGZpbGUgYWdlbnRfdHJhcC5jLgotLlNIICJWYXJpYWJsZSBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJvaWQgc25tcHRyYXBlbnRlcnByaXNlX29pZFtdIlxmQkluaXRpYWwgdmFsdWU6XGZQCi0uUFAKLS5uZgotCi0gICAgeyBTTk1QVjJfVFJBUF9PQkpTX1BSRUZJWCwgMywgMCB9Ci0uZmkKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk5IG9mIGZpbGUgYWdlbnRfdHJhcC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMgYi9tYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTJkNWIwLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLlRIICJhc24xIHBhcnNpbmcgYW5kIGRhdGF0eXBlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4iIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1hc24xIHBhcnNpbmcgYW5kIGRhdGF0eXBlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4gXC0gCi0uUFAKLU5vdGUgb24uICAKLQotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTlVMTFxmUCAgIDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJJTlQzMl9NQVhcZlAgICAyMTQ3NDgzNjQ3IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSU5UMzJfTUlOXGZQICAgKDAgLSBJTlQzMl9NQVggLSAxKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkNIRUNLX09WRVJGTE9XX1NcZlAoeCwgeSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJDSEVDS19PVkVSRkxPV19VXGZQKHgsIHkpIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX2NoZWNrX3BhY2tldFxmUCAodV9jaGFyICpwa3QsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV9pbnRcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUsIGxvbmcgKmludHAsIHNpemVfdCBpbnRzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2VfdW5zaWduZWRfaW50XGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlLCB1X2xvbmcgKmludHAsIHNpemVfdCBpbnRzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfaW50XGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUsIGNvbnN0IGxvbmcgKmludHAsIHNpemVfdCBpbnRzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfdW5zaWduZWRfaW50XGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfbG9uZyAqaW50cCwgc2l6ZV90IGludHNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV9zdHJpbmdcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUsIHVfY2hhciAqc3RyLCBzaXplX3QgKnN0cmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX3N0cmluZ1xmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKnN0ciwgc2l6ZV90IHN0cmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX2hlYWRlclxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX3NlcXVlbmNlXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlLCB1X2NoYXIgZXhwZWN0ZWRfdHlwZSwgY29uc3QgY2hhciAqZXN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX2hlYWRlclxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlLCBzaXplX3QgbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfc2VxdWVuY2VcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSwgc2l6ZV90IGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX2xlbmd0aFxmUCAodV9jaGFyICpkYXRhLCB1X2xvbmcgKmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX2xlbmd0aFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHNpemVfdCBsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV9vYmppZFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSwgb2lkICpvYmppZCwgc2l6ZV90ICpvYmppZGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX29iamlkXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUsIG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX251bGxcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF9udWxsXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV9iaXRzdHJpbmdcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUsIHVfY2hhciAqc3RyLCBzaXplX3QgKnN0cmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX2JpdHN0cmluZ1xmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKnN0ciwgc2l6ZV90IHN0cmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0XGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlLCBzdHJ1Y3QgXGZCY291bnRlcjY0XGZQICpjcCwgc2l6ZV90IGNvdW50ZXJzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfdW5zaWduZWRfaW50NjRcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSwgY29uc3Qgc3RydWN0IFxmQmNvdW50ZXI2NFxmUCAqY3AsIHNpemVfdCBjb3VudGVyc2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF9sZW5ndGhcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHNpemVfdCBsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfaGVhZGVyXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSwgc2l6ZV90IGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF9pbnRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlLCBjb25zdCBsb25nICppbnRwLCBzaXplX3QgaW50c2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF9zdHJpbmdcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKnN0ciwgc2l6ZV90IHN0cmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlLCBjb25zdCB1X2xvbmcgKmludHAsIHNpemVfdCBpbnRzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX3NlcXVlbmNlXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSwgc2l6ZV90IGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF9vYmppZFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF9udWxsXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF9iaXRzdHJpbmdcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKnN0ciwgc2l6ZV90IHN0cmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUsIGNvbnN0IHN0cnVjdCBcZkJjb3VudGVyNjRcZlAgKmNwLCBzaXplX3QgY291bnRlcnNpemUpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotTm90ZSBvbi4gCi0KLVJlLWFsbG9jYXRpbmcgcmV2ZXJzZSBBU04uMSBlbmNvZGVyIGZ1bmN0aW9ucy4gU3lub3BzaXM6Ci0uUFAKLS5QUAotLm5mCi0gdV9jaGFyICpidWYgPSAodV9jaGFyKiltYWxsb2MoMTAwKTsKLSB1X2NoYXIgdHlwZSA9IChBU05fVU5JVkVSU0FMIHwgQVNOX1BSSU1JVElWRSB8IEFTTl9JTlRFR0VSKTsKLSBzaXplX3QgYnVmX2xlbiA9IDEwMCwgb2Zmc2V0ID0gMDsKLSBsb25nIGRhdGEgPSAxMjM0NTsKLSBpbnQgYWxsb3dfcmVhbGxvYyA9IDE7Ci0gCi0gaWYgKGFzbl9yZWFsbG9jX3JidWlsZF9pbnQoJmJ1ZiwgJmJ1Zl9sZW4sICZvZmZzZXQsIGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJmRhdGEsIHNpemVvZihsb25nKSkgPT0gMCkgewotICAgICBlcnJvcjsKLSB9Ci0uZmkKLS5QUAotLlBQCi1OT1RFIFdFTEw6IGFmdGVyIGNhbGxpbmcgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIGFsbG93X3JlYWxsb2Mgbm9uLXplcm8sIGJ1ZiBtaWdodCBoYXZlIG1vdmVkLCBidWZfbGVuIG1pZ2h0IGhhdmUgZ3Jvd24gYW5kIG9mZnNldCB3aWxsIGhhdmUgaW5jcmVhc2VkIGJ5IHRoZSBzaXplIG9mIHRoZSBlbmNvZGVkIGRhdGEuIFlvdSBzaG91bGQgKipORVZFUioqIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0uUFAKLS5QUAotLm5mCi0gdV9jaGFyICpidWYgPSAodV9jaGFyICopbWFsbG9jKDEwMCksICpwdHI7Ci0gdV9jaGFyIHR5cGUgPSAoQVNOX1VOSVZFUlNBTCB8IEFTTl9QUklNSVRJVkUgfCBBU05fSU5URUdFUik7Ci0gc2l6ZV90IGJ1Zl9sZW4gPSAxMDAsIG9mZnNldCA9IDA7Ci0gbG9uZyBkYXRhMSA9IDEyMzQsIGRhdGEyID0gNTY3ODsKLSBpbnQgcmMgPSAwLCBhbGxvd19yZWFsbG9jID0gMTsKLSAKLSByYyAgPSBhc25fcmVhbGxvY19yYnVpbGRfaW50KCZidWYsICZidWZfbGVuLCAmb2Zmc2V0LCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAmZGF0YTEsIHNpemVvZihsb25nKSk7Ci0gcHRyID0gYnVmW2J1Zl9sZW4gLSBvZmZzZXRdOyAgIC8gKiBwb2ludHMgYXQgZW5jb2Rpbmcgb2YgZGF0YTEgKiAvCi0gaWYgKHJjID09IDApIHsKLSAgICAgIGVycm9yOwotIH0KLSByYyAgPSBhc25fcmVhbGxvY19yYnVpbGRfaW50KCZidWYsICZidWZfbGVuLCAmb2Zmc2V0LCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJmRhdGEyLCBzaXplb2YobG9uZykpOwotIG1ha2UgdXNlIG9mIHB0ciBoZXJlOwotLmZpCi0uUFAKLS5QUAotcHRyIGlzICoqSU5WQUxJRCoqIGF0IHRoaXMgcG9pbnQuIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgc3RvcmUgdGhlIG9mZnNldCB2YWx1ZSBhbmQgY29tcHV0ZSBwb2ludGVycyB3aGVuIHlvdSBuZWVkIHRoZW06Ci0uUFAKLS5QUAotLm5mCi0gdV9jaGFyICpidWYgPSAodV9jaGFyICopbWFsbG9jKDEwMCksICpwdHI7Ci0gdV9jaGFyIHR5cGUgPSAoQVNOX1VOSVZFUlNBTCB8IEFTTl9QUklNSVRJVkUgfCBBU05fSU5URUdFUik7Ci0gc2l6ZV90IGJ1Zl9sZW4gPSAxMDAsIG9mZnNldCA9IDAsIHB0cl9vZmZzZXQ7Ci0gbG9uZyBkYXRhMSA9IDEyMzQsIGRhdGEyID0gNTY3ODsKLSBpbnQgcmMgPSAwLCBhbGxvd19yZWFsbG9jID0gMTsKLSAKLSByYyAgPSBhc25fcmVhbGxvY19yYnVpbGRfaW50KCZidWYsICZidWZfbGVuLCAmb2Zmc2V0LCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJmRhdGExLCBzaXplb2YobG9uZykpOwotIHB0cl9vZmZzZXQgPSBvZmZzZXQ7Ci0gaWYgKHJjID09IDApIHsKLSAgICAgIGVycm9yOwotIH0KLSByYyAgPSBhc25fcmVhbGxvY19yYnVpbGRfaW50KCZidWYsICZidWZfbGVuLCAmb2Zmc2V0LCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJmRhdGEyLCBzaXplb2YobG9uZykpOwotIHB0ciA9IGJ1ZiArIGJ1Zl9sZW4gLSBwdHJfb2Zmc2V0Ci0gbWFrZSB1c2Ugb2YgcHRyIGhlcmU7Ci0uZmkKLS5QUAotLlBQCi1IZXJlLCB5b3UgY2FuIHNlZSB0aGF0IHB0ciB3aWxsIGJlIGEgdmFsaWQgcG9pbnRlciBldmVuIGlmIHRoZSBibG9jayBvZiBtZW1vcnkgaGFzIGJlZW4gbW92ZWQsIGFzIGl0IG1heSB3ZWxsIGhhdmUgYmVlbi4gUGxlbnR5IG9mIGV4YW1wbGVzIG9mIHVzYWdlIGFsbCBvdmVyIFxmQmFzbjEuY1xmUCwgXGZCc25tcF9hcGkuY1xmUCwgXGZCc25tcHVzbS5jXGZQLgotLlBQCi1UaGUgb3RoZXIgdGhpbmcgeW91IHNob3VsZCAqKk5FVkVSKiogZG8gaXMgdG8gcGFzcyBhIHBvaW50ZXIgdG8gYSBidWZmZXIgb24gdGhlIHN0YWNrIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB3aGVuIGFsbG93X3JlYWxsb2MgaXMgbm9uLXplcm8sIHVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGFuZCB5b3VyIG1hY2hpbmUvY29tcGlsZXIgYWxsb3dzIHlvdSB0byBmcmVlIG5vbi1oZWFwIG1lbW9yeS4gVGhlcmUgYXJlIHJ1bW91cnMgdGhhdCBzdWNoIHRoaW5ncyBleGlzdCwgYnV0IG1hbnkgY29uc2lkZXIgdGhlbSBubyBtb3JlIHRoYW4gdGhlIHdpbGQgdGFsZXMgb2YgYSBmb29sLgotLlBQCi1PZiBjb3Vyc2UsIHlvdSBjYW4gcGFzcyBhbGxvd19yZWFsbG9jIGFzIHplcm8sIHRvIGluZGljYXRlIHRoYXQgeW91IGRvIG5vdCB3aXNoIHRoZSBwYWNrZXQgYnVmZmVyIHRvIGJlIHJlYWxsb2NhdGVkIGZvciBzb21lIHJlYXNvbjsgcGVyaGFwcyBiZWNhdXNlIGl0IGlzIG9uIHRoZSBzdGFjay4gVGhpcyBtYXkgYmUgdXNlZnVsIHRvIGVtdWxhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG9sZCBBUEk6Ci0uUFAKLS5QUAotLm5mCi0gdV9jaGFyIG15X3N0YXRpY19idWZmZXJbMTAwXSwgKmNwID0gTlVMTDsKLSBzaXplX3QgbXlfc3RhdGljX2J1ZmZlcl9sZW4gPSAxMDA7Ci0gZmxvYXQgbXlfcGkgPSAoZmxvYXQpMjIvKGZsb2F0KTc7Ci0gCi0gY3AgPSBhc25fcmJ1aWxkX2Zsb2F0KG15X3N0YXRpY19idWZmZXIsICZteV9zdGF0aWNfYnVmZmVyX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgQVNOX09QQVFVRV9GTE9BVCwgJm15X3BpLCBzaXplb2YoZmxvYXQpKTsKLSBpZiAoY3AgPT0gTlVMTCkgewotIGVycm9yOwotIH0KLS5maQotLlBQCi0uUFAKLUlTIEVRVUlWQUxFTlQgVE86Ci0uUFAKLS5QUAotLm5mCi0gdV9jaGFyIG15X3N0YXRpY19idWZmZXJbMTAwXTsKLSBzaXplX3QgbXlfc3RhdGljX2J1ZmZlcl9sZW4gPSAxMDAsIG15X29mZnNldCA9IDA7Ci0gZmxvYXQgbXlfcGkgPSAoZmxvYXQpMjIvKGZsb2F0KTc7Ci0gaW50IHJjID0gMDsKLSAKLSByYyA9IGFzbl9yZWFsbG9jX3JidWlsZF9mbG9hdCgmbXlfc3RhdGljX2J1ZmZlciwgJm15X3N0YXRpY19idWZmZXJfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteV9vZmZzZXQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09QQVFVRV9GTE9BVCwgJm15X3BpLCBzaXplb2YoZmxvYXQpKTsKLSBpZiAocmMgPT0gMCkgewotICAgZXJyb3I7Ci0gfQotLmZpCi0uUFAKLSAKLS5TSCAiRGVmaW5lIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIiNkZWZpbmUgQ0hFQ0tfT1ZFUkZMT1dfUyh4LCB5KSJcZkJWYWx1ZTpcZlAKLS5QUAotLm5mCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoeCA+IElOVDMyX01BWCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgREVCVUdNU0coKCdhc24nLCd0cnVuY2F0aW5nIHNpZ25lZCB2YWx1ZSAlbGQgdG8gMzIgYml0cyAoJWQpXG4nLChsb25nKSh4KSx5KSk7IFwKLSAgICAgICAgICAgIHggJj0gMHhmZmZmZmZmZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIGlmICh4IDwgSU5UMzJfTUlOKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIERFQlVHTVNHKCgnYXNuJywndHJ1bmNhdGluZyBzaWduZWQgdmFsdWUgJWxkIHRvIDMyIGJpdHMgKCVkKVxuJywobG9uZykoeCkseSkpOyBcCi0gICAgICAgICAgICB4ID0gMCAtICh4ICYgMHhmZmZmZmZmZik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKQotLmZpCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMTQgb2YgZmlsZSBhc24xLmMuCi0uU1MgIiNkZWZpbmUgQ0hFQ0tfT1ZFUkZMT1dfVSh4LCB5KSJcZkJWYWx1ZTpcZlAKLS5QUAotLm5mCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoeCA+IFVJTlQzMl9NQVgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgeCAmPSAweGZmZmZmZmZmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgREVCVUdNU0coKCdhc24nLCd0cnVuY2F0aW5nIHVuc2lnbmVkIHZhbHVlIHRvIDMyIGJpdHMgKCVkKVxuJyx5KSk7IFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0uZmkKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyNCBvZiBmaWxlIGFzbjEuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMgYi9tYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhODc0YmIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfYmFieV9zdGVwcy4zCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLlRIICJiYWJ5X3N0ZXBzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotYmFieV9zdGVwcyBcLSAKLS5QUAotQ2FsbHMgeW91ciBoYW5kbGVyIGluIGJhYnlfc3RlcHMgZm9yIHNldCBwcm9jZXNzaW5nLiAgCi0KLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJiYWJ5X3N0ZXBzX2FjY2Vzc19tdWx0aXBsZXhlcjogY2FsbHMgaW5kaXZpZHVhbCBhY2Nlc3MgbWV0aG9kcyBiYXNlZCBvbiBiYWJ5X3N0ZXAgbW9kZS5cZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXRcZlAgKHVfbG9uZyBtb2RlcykiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGJhYnlfc3RlcHMgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2luaXRcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSBiYWJ5X3N0ZXBzIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIGJhYnlfc3RlcHMgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUNhbGxzIHlvdXIgaGFuZGxlciBpbiBiYWJ5X3N0ZXBzIGZvciBzZXQgcHJvY2Vzc2luZy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldCAodV9sb25nIG1vZGVzKSIKLS5QUAotcmV0dXJucyBhIGJhYnlfc3RlcHMgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1OCBvZiBmaWxlIGJhYnlfc3RlcHMuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9pbml0ICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIGJhYnlfc3RlcHMgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgYmFieV9zdGVwcyBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMxOSBvZiBmaWxlIGJhYnlfc3RlcHMuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9idWxrX3RvX25leHQuMyBiL21hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDI4MjIwLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLlRIICJidWxrX3RvX25leHQiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1idWxrX3RvX25leHQgXC0gCi0uUFAKLUNvbnZlcnQgR0VUQlVMSyByZXF1ZXN0cyBpbnRvIEdFVE5FWFQgcmVxdWVzdHMgZm9yIHRoZSBoYW5kbGVyLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9idWxrX3RvX25leHRfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGJ1bGtfdG9fbmV4dCBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9idWxrX3RvX25leHRfZml4X3JlcXVlc3RzXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSXRha2VzIGFuc3dlcmVkIHJlcXVlc3RzIGFuZCBkZWNyZW1lbnRzIHRoZSByZXBlYXQgY291bnQgYW5kIHVwZGF0ZXMgdGhlIHJlcXVlc3RzIHRvIHRoZSBuZXh0IHRvLWRvIHZhcmJpbmQgaW4gdGhlIGxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9idWxrX3RvX25leHRfaGVscGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9idWxrX3RvX25leHRfaGVscGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgYnVsa190b19uZXh0IGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIGJ1bGtfdG9fbmV4dCBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotQ29udmVydCBHRVRCVUxLIHJlcXVlc3RzIGludG8gR0VUTkVYVCByZXF1ZXN0cyBmb3IgdGhlIGhhbmRsZXIuIAotCi1UaGUgb25seSBwdXJwb3NlIG9mIHRoaXMgaGFuZGxlciBpcyB0byBjb252ZXJ0IGEgR0VUQlVMSyByZXF1ZXN0IHRvIGEgR0VUTkVYVCByZXF1ZXN0LiBJdCBpcyBpbnNlcnRlZCBpbnRvIGhhbmRsZXIgY2hhaW5zIHdoZXJlIHRoZSBoYW5kbGVyIGhhcyBub3Qgc2V0IHRoZSBIQU5ETEVSX0NBTl9HRVRCVUxLIGZsYWcuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ2b2lkIG5ldHNubXBfYnVsa190b19uZXh0X2ZpeF9yZXF1ZXN0cyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLXRha2VzIGFuc3dlcmVkIHJlcXVlc3RzIGFuZCBkZWNyZW1lbnRzIHRoZSByZXBlYXQgY291bnQgYW5kIHVwZGF0ZXMgdGhlIHJlcXVlc3RzIHRvIHRoZSBuZXh0IHRvLWRvIHZhcmJpbmQgaW4gdGhlIGxpc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MiBvZiBmaWxlIGJ1bGtfdG9fbmV4dC5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9idWxrX3RvX25leHRfaGFuZGxlciAodm9pZCkiCi0uUFAKLXJldHVybnMgYSBidWxrX3RvX25leHQgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNyBvZiBmaWxlIGJ1bGtfdG9fbmV4dC5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9idWxrX3RvX25leHRfaGVscGVyICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIGJ1bGtfdG9fbmV4dCBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBidWxrX3RvX25leHQgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzkgb2YgZmlsZSBidWxrX3RvX25leHQuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMgYi9tYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1M2JiODEuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS5USCAiY2FjaGVfaGFuZGxlciIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWNhY2hlX2hhbmRsZXIgXC0gCi0uUFAKLU1haW50YWlucyBhIGNhY2hlIG9mIGRhdGEgZm9yIHVzZSBieSBsb3dlciBsZXZlbCBoYW5kbGVycy4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NhY2hlXGZQICogXGZCbmV0c25tcF9jYWNoZV9nZXRfaGVhZFxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJZ2V0IGNhY2hlIGhlYWQgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NhY2hlXGZQICogXGZCbmV0c25tcF9jYWNoZV9maW5kX2J5X29pZFxmUCAob2lkICpyb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pIgotLmJyCi0uUkkgIlxmSWZpbmQgZXhpc3RpbmcgY2FjaGUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NhY2hlXGZQICogXGZCbmV0c25tcF9jYWNoZV9jcmVhdGVcZlAgKGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICpsb2FkX2hvb2ssIE5ldHNubXBDYWNoZUZyZWUgKmZyZWVfaG9vaywgb2lkICpyb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBjYWNoZSBcZlAiCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGludCBcZkJuZXRzbm1wX2NhY2hlX3RpbWVyX3N0YXJ0XGZQIChcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSkiCi0uYnIKLS5SSSAiXGZJc3RhcnRzIHRoZSByZWN1cnJpbmcgY2FjaGVfbG9hZCBjYWxsYmFjayBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jYWNoZV90aW1lcl9zdG9wXGZQIChcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSkiCi0uYnIKLS5SSSAiXGZJc3RvcHMgdGhlIHJlY3VycmluZyBjYWNoZV9sb2FkIGNhbGxiYWNrIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXRcZlAgKFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlclxmUCAoaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKmxvYWRfaG9vaywgTmV0c25tcENhY2hlRnJlZSAqZnJlZV9ob29rLCBvaWQgKnJvb3RvaWQsIGludCByb290b2lkX2xlbikiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGNhY2hlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2FjaGVfaGFuZGxlcl9yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUpIgotLmJyCi0uUkkgIlxmSWZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIGJ1dCBhbHNvIGluamVjdHMgYSBjYWNoZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9jYWNoZV9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqbG9hZF9ob29rLCBOZXRzbm1wQ2FjaGVGcmVlICpmcmVlX2hvb2spIgotLmJyCi0uUkkgIlxmSWZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIGJ1dCBhbHNvIGluamVjdHMgYSBjYWNoZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgY2hhciAqIFxmQl9idWlsZF9jYWNoZV9uYW1lXGZQIChjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY2FjaGVfcmVxaW5mb19pbnNlcnRcZlAgKFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJSW5zZXJ0IHRoZSBjYWNoZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiByZXF1ZXN0IChQRFUpLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY2FjaGVcZlAgKiBcZkJuZXRzbm1wX2NhY2hlX3JlcWluZm9fZXh0cmFjdFxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSUV4dHJhY3QgdGhlIGNhY2hlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHJlcXVlc3QgKFBEVSkuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jYWNoZVxmUCAqIFxmQm5ldHNubXBfZXh0cmFjdF9jYWNoZV9pbmZvXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbykiCi0uYnIKLS5SSSAiXGZJRXh0cmFjdCB0aGUgY2FjaGUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcmVxdWVzdCAoUERVKS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jYWNoZV9jaGVja19leHBpcmVkXGZQIChcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSkiCi0uYnIKLS5SSSAiXGZJQ2hlY2sgaWYgdGhlIGNhY2hlIHRpbWVvdXQgaGFzIHBhc3NlZC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkXGZQIChcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSkiCi0uYnIKLS5SSSAiXGZJUmVsb2FkIHRoZSBjYWNoZSBpZiByZXF1aXJlZC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jYWNoZV9pc192YWxpZFxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSUlzIHRoZSBjYWNoZSB2YWxpZCBmb3IgYSBnaXZlbiByZXF1ZXN0PyBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2lzX2NhY2hlX3ZhbGlkXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbykiCi0uYnIKLS5SSSAiXGZJSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBhIGdpdmVuIHJlcXVlc3Q/IGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jYWNoZV9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJSW1wbGVtZW50cyB0aGUgY2FjaGUgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlbGVhc2VfY2FjaGVkX3Jlc291cmNlc1xmUCAodW5zaWduZWQgaW50IHJlZ05vLCB2b2lkICpjbGllbnRhcmdzKSIKLS5icgotLlJJICJcZklydW4gcmVndWxhcmx5IHRvIGF1dG9tYXRpY2FsbHkgcmVsZWFzZSBjYWNoZWQgcmVzb3VyY2VzLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotTWFpbnRhaW5zIGEgY2FjaGUgb2YgZGF0YSBmb3IgdXNlIGJ5IGxvd2VyIGxldmVsIGhhbmRsZXJzLiAKLQotVGhpcyBoZWxwZXIgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIHRoZSBkYXRhIGhhcyBiZWVuIGxvYWRlZCAncmVjZW50bHknIChhY2NvcmRpbmcgdG8gdGhlIHRpbWVvdXQgZm9yIHRoYXQgcGFydGljdWxhciBjYWNoZSkgYW5kIGNhbGxzIHRoZSByZWdpc3RlcmVkICdsb2FkX2NhY2hlJyByb3V0aW5lIGlmIG5lY2Vzc2FyeS4gVGhlIGxvd2VyIGhhbmRsZXJzIGNhbiB0aGVuIHdvcmsgd2l0aCB0aGlzIGxvY2FsIGNhY2hlZCBkYXRhLgotLlBQCi1BIHRpbWVvdXQgdmFsdWUgb2YgLTEgd2lsbCBjYXVzZSBcZkJuZXRzbm1wX2NhY2hlX2NoZWNrX2V4cGlyZWQoKVxmUCB0byBhbHdheXMgcmV0dXJuIHRydWUsIGFuZCB0aHVzIHRoZSBjYWNoZSB3aWxsIGJlIHJlbG9hZGVkIGZvciBldmVyeSByZXF1ZXN0LgotLlBQCi1UbyBtaW5pbXplIHJlc291cmNlIHVzZSBieSB0aGUgYWdlbnQsIGEgcGVyaW9kaWMgY2FsbGJhY2sgY2hlY2tzIGZvciBleHBpcmVkIGNhY2hlcywgYW5kIHdpbGwgY2FsbCB0aGUgZnJlZV9jYWNoZSBmdW5jdGlvbiBmb3IgYW55IGV4cGlyZWQgY2FjaGUuCi0uUFAKLVRoZSBsb2FkX2NhY2hlIHJvdXRlIHNob3VsZCByZXR1cm4gYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhlIGNhY2hlIHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IGxvYWRlZC4gMCBvciBhbnkgcG9zaXRpdmUgbnVtYmVyIGluZGljYXRlcyBzdWNjZXNzcy4KLS5QUAotU2V2ZXJhbCBmbGFncyBjYW4gYmUgc2V0IHRvIGFmZmVjdCB0aGUgb3BlcmF0aW9ucyBvbiB0aGUgY2FjaGUuCi0uUFAKLUlmIE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVCBpcyBzZXQsIHRoZSBmcmVlX2NhY2hlIG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWQgYWZ0ZXIgYSBzZXQgcmVxdWVzdCBoYXMgcHJvY2Vzc2VkLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxvd2VyIG1pYiBoYW5kbGVyIHVzaW5nIHRoZSBjYWNoZSBoYXMgbWFpbnRhaW5lZCBjYWNoZSBjb25zaXN0ZW5jeS4KLS5QUAotSWYgTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfQkVGT1JFX0xPQUQgaXMgc2V0LCB0aGUgZnJlZV9jYWNoZSBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbG9hZF9jYWNoZSBtZXRob2QgaXMgY2FsbGVkLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxvYWRfY2FjaGUgcm91dGluZSB3aWxsIHByb3Blcmx5IGRlYWwgd2l0aCBiZWluZyBjYWxsZWQgd2l0aCBhIHZhbGlkIGNhY2hlLgotLlBQCi1JZiBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9FWFBJUkVEIGlzIHNldCwgdGhlIGZyZWVfY2FjaGUgbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZCB3aXRoIHRoZSBjYWNoZSBleHBpcmVzLiBUaGUgZXhwaXJlZCBmbGFnIHdpbGwgYmUgc2V0LCBidXQgdGhlIHZhbGlkIGZsYWcgd2lsbCBub3QgYmUgY2xlYXJlZC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBsb2FkX2NhY2hlIHJvdXRpbmUgd2lsbCBwcm9wZXJseSBkZWFsIHdpdGggYmVpbmcgY2FsbGVkIHdpdGggYSB2YWxpZCBjYWNoZS4KLS5QUAotSWYgTkVUU05NUF9DQUNIRV9QUkVMT0FEIGlzIHNldCB3aGVuIGEgdGhlIGNhY2hlIGhhbmRsZXIgaXMgY3JlYXRlZCwgdGhlIGNhY2hlIGxvYWQgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseS4KLS5QUAotSWYgTkVUU05NUF9DQUNIRV9ET05UX0FVVE9fUkVMRUFTRSBpcyBzZXQsIHRoZSBwZXJpb2RpYyBjYWxsYmFjayB0aGF0IGNoZWNrcyBmb3IgZXhwaXJlZCBjYWNoZXMgd2lsbCBza2lwIHRoZSBjYWNoZS4gVGhlIGNhY2hlIHdpbGwgb25seSBiZSBjaGVja2VkIGZvciBleHBpcmF0aW9uIHdoZW4gYSByZXF1ZXN0IHRyaWdnZXJzIHRoZSBjYWNoZSBoYW5kbGVyLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgY2FjaGUgaGFzIGl0J3Mgb3duIHBlcmlvZGljIGNhbGxiYWNrIHRvIGtlZXAgdGhlIGNhY2hlIGZyZXNoLgotLlBQCi1JZiBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEIGlzIHNldCwgYSB0aW1lciB3aWxsIGJlIHNldCB1cCB0byByZWxvYWQgdGhlIGNhY2hlIHdoZW4gaXQgZXhwaXJlcy4gVGhpcyBpcyB1c2VmdWwgZm9yIGtlZXBpbmcgdGhlIGNhY2hlIGZyZXNoLCBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGluY29taW5nIHNubXAgcmVxdWVzdHMuCi0uUFAKLUhlcmUgYXJlIHNvbWUgc3VnZ2VzdGlvbnMgZm9yIHNvbWUgY29tbW9uIHNpdHVhdGlvbnMuCi0uUFAKLUNhY2hlZCBGaWxlOiBJZiB5b3VyIHRhYmxlIGlzIGJhc2VkIG9uIGEgZmlsZSB0aGF0IG1heSBwZXJpb2RpY2FsbHkgY2hhbmdlLCB5b3UgY2FuIHRlc3QgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIHRvIHNlZSBpZiB0aGUgZmlsZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWNoZSBsb2FkLiBUbyBnZXQgdGhlIGNhY2hlIGhlbHBlciB0byBjYWxsIHRoZSBsb2FkIGZ1bmN0aW9uIGZvciBldmVyeSByZXF1ZXN0LCBzZXQgdGhlIHRpbWVvdXQgdG8gLTEsIHdoaWNoIHdpbGwgY2F1c2UgdGhlIGNhY2hlIHRvIGFsd2F5cyByZXBvcnQgdGhhdCBpdCBpcyBleHBpcmVkLiBUaGlzIG1lYW5zIHRoYXQgeW91IHdpbGwgd2FudCB0byBwcmV2ZW50IHRoZSBhZ2VudCBmcm9tIGZsdXNoaW5nIHRoZSBjYWNoZSB3aGVuIGl0IGhhcyBleHBpcmVkLCBhbmQgeW91IHdpbGwgaGF2ZSB0byBmbHVzaCBpdCBtYW51YWxseSBpZiB5b3UgZGV0ZWN0IHRoYXQgdGhlIGZpbGUgaGFzIGNoYW5nZWQuIFRvIGFjY29tcGxpc2ggdGhpcywgc2V0IHRoZSBmb2xsb3dpbmcgZmxhZ3M6Ci0uUFAKLU5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0VYUElSRUQgTkVUU05NUF9DQUNIRV9ET05UX0FVVE9fUkVMRUFTRQotLlBQCi1Db25zdGFudCAocGVyaW9kaWMpIHJlbG9hZDogSWYgeW91IHdhbnQgdGhlIGNhY2hlIGtlcHQgdXAgdG8gZGF0ZSByZWd1bGFybHksIGV2ZW4gaWYgbm8gcmVxdWVzdHMgZm9yIHRoZSB0YWJsZSBhcmUgcmVjZWl2ZWQsIHlvdSBjYW4gaGF2ZSB5b3VyIGNhY2hlIGxvYWQgcm91dGluZSBjYWxsZWQgcGVyaW9kaWNhbGx5LiBUaGlzIGlzIHZlcnkgdXNlZnVsIGlmIHlvdSBuZWVkIHRvIG1vbml0b3IgdGhlIGRhdGEgZm9yIGNoYW5nZXMgKGVnIGEgXGZJTGFzdENoYW5nZWRcZlAgb2JqZWN0KS4gWW91IHdpbGwgbmVlZCB0byBwcmV2ZW50IHRoZSBhZ2VudCBmcm9tIGZsdXNoaW5nIHRoZSBjYWNoZSB3aGVuIGl0IGV4cGlyZXMuIFNldCB0aGUgY2FjaGUgdGltZW91dCB0byB0aGUgZnJlcXVlbmN5LCBpbiBzZWNvbmRzLCB0aGF0IHlvdSB3aXNoIHRvIHJlbG9hZCB5b3VyIGNhY2hlLCBhbmQgc2V0IHRoZSBmb2xsb3dpbmcgZmxhZ3M6Ci0uUFAKLU5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0VYUElSRUQgTkVUU05NUF9DQUNIRV9ET05UX0FVVE9fUkVMRUFTRSBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkIChcZkJuZXRzbm1wX2NhY2hlXGZQICogY2FjaGUpIgotLlBQCi1SZWxvYWQgdGhlIGNhY2hlIGlmIHJlcXVpcmVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM4NSBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiaW50IG5ldHNubXBfY2FjaGVfY2hlY2tfZXhwaXJlZCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqIGNhY2hlKSIKLS5QUAotQ2hlY2sgaWYgdGhlIGNhY2hlIHRpbWVvdXQgaGFzIHBhc3NlZC4gU2V0cyBhbmQgcmV0dXJuIHRoZSBleHBpcmVkIGZsYWcuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzcwIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJcZkJuZXRzbm1wX2NhY2hlXGZQKiBuZXRzbm1wX2NhY2hlX2NyZWF0ZSAoaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKiBsb2FkX2hvb2ssIE5ldHNubXBDYWNoZUZyZWUgKiBmcmVlX2hvb2ssIG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikiCi0uUFAKLXJldHVybnMgYSBjYWNoZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzNiBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9jYWNoZVxmUCogbmV0c25tcF9jYWNoZV9maW5kX2J5X29pZCAob2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKSIKLS5QUAotZmluZCBleGlzdGluZyBjYWNoZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyMCBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9jYWNoZVxmUCogbmV0c25tcF9jYWNoZV9nZXRfaGVhZCAodm9pZCkiCi0uUFAKLWdldCBjYWNoZSBoZWFkIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTEyIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0IChcZkJuZXRzbm1wX2NhY2hlXGZQICogY2FjaGUpIgotLlBQCi1yZXR1cm5zIGEgY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDcgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgImludCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfcmVnaXN0ZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2NhY2hlXGZQICogY2FjaGUpIgotLlBQCi1mdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCBidXQgYWxzbyBpbmplY3RzIGEgY2FjaGUgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjk1IG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJpbnQgbmV0c25tcF9jYWNoZV9oZWxwZXJfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1JbXBsZW1lbnRzIHRoZSBjYWNoZSBoYW5kbGVyLiAKLS5QUAotbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcKLS5QUAotbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcKLS5QUAotbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MjAgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgImludCBuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBhIGdpdmVuIHJlcXVlc3Q/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDAyIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJcZkJuZXRzbm1wX2NhY2hlXGZQKiBuZXRzbm1wX2NhY2hlX3JlcWluZm9fZXh0cmFjdCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLUV4dHJhY3QgdGhlIGNhY2hlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHJlcXVlc3QgKFBEVSkuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzUwIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJ2b2lkIG5ldHNubXBfY2FjaGVfcmVxaW5mb19pbnNlcnQgKFxmQm5ldHNubXBfY2FjaGVcZlAgKiBjYWNoZSwgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLUluc2VydCB0aGUgY2FjaGUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcmVxdWVzdCAoUERVKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMzMgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgInVuc2lnbmVkIGludCBuZXRzbm1wX2NhY2hlX3RpbWVyX3N0YXJ0IChcZkJuZXRzbm1wX2NhY2hlXGZQICogY2FjaGUpIgotLlBQCi1zdGFydHMgdGhlIHJlY3VycmluZyBjYWNoZV9sb2FkIGNhbGxiYWNrIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTkxIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJ2b2lkIG5ldHNubXBfY2FjaGVfdGltZXJfc3RvcCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqIGNhY2hlKSIKLS5QUAotc3RvcHMgdGhlIHJlY3VycmluZyBjYWNoZV9sb2FkIGNhbGxiYWNrIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjI2IG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJcZkJuZXRzbm1wX2NhY2hlXGZQKiBuZXRzbm1wX2V4dHJhY3RfY2FjaGVfaW5mbyAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvKSIKLS5QUAotRXh0cmFjdCB0aGUgY2FjaGUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcmVxdWVzdCAoUERVKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNjIgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIgKGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICogbG9hZF9ob29rLCBOZXRzbm1wQ2FjaGVGcmVlICogZnJlZV9ob29rLCBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pIgotLlBQCi1yZXR1cm5zIGEgY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzYgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgImludCBuZXRzbm1wX2lzX2NhY2hlX3ZhbGlkIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8pIgotLlBQCi1JcyB0aGUgY2FjaGUgdmFsaWQgZm9yIGEgZ2l2ZW4gcmVxdWVzdD8gZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5LiBmb3IgYmFja3dhcmRzIGNvbXBhdAotLlBQCi1cZkJuZXRzbm1wX2NhY2hlX2lzX3ZhbGlkKClcZlAgaXMgcHJlZmVycmVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQxMyBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfY2FjaGVfaGFuZGxlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICogbG9hZF9ob29rLCBOZXRzbm1wQ2FjaGVGcmVlICogZnJlZV9ob29rKSIKLS5QUAotZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgYnV0IGFsc28gaW5qZWN0cyBhIGNhY2hlIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMwOCBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAidm9pZCByZWxlYXNlX2NhY2hlZF9yZXNvdXJjZXMgKHVuc2lnbmVkIGludCByZWdObywgdm9pZCAqIGNsaWVudGFyZ3MpIgotLlBQCi1ydW4gcmVndWxhcmx5IHRvIGF1dG9tYXRpY2FsbHkgcmVsZWFzZSBjYWNoZWQgcmVzb3VyY2VzLiB4eHggLSBtZXRob2QgdG8gcHJldmVudCBjYWNoZSBmcm9tIGV4cGlyaW5nIHdoaWxlIGEgcmVxdWVzdCBpcyBiZWluZyBwcm9jZXNzZWQgKGUuZy4gZGVsZWdhdGVkIHJlcXVlc3QpLiBwcm9wb3NhbDogc2V0IGEgZmxhZywgd2hpY2ggd291bGQgYmUgY2xlYXJlZCB3aGVuIHJlcXVlc3QgZmluaXNoZWQgKHdoaWNoIGNvdWxkIGJlIGFjb21wbGlzaGVkIGJ5IGEgZHVtbXkgZGF0YSBsaXN0IGl0ZW0gaW4gYWdlbnQgcmVxIGluZm8gJiBjdXN0b20gZnJlZSBmdW5jdGlvbikuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTgxIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2NhbGxiYWNrLjMgYi9tYW4vbmV0c25tcF9jYWxsYmFjay4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmVlYzg5Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2NhbGxiYWNrLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLlRIICJBIGdlbmVyaWMgY2FsbGJhY2sgbWVjaGFuaXNtIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotQSBnZW5lcmljIGNhbGxiYWNrIG1lY2hhbmlzbSBcLSAKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkNBTExCQUNLX05BTUVfTE9HR0lOR1xmUCAgIDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJMT0NLX1BFUl9DQUxMQkFDS19TVUJJRFxmUCAgIDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJDQUxMQkFDS19MT0NLXGZQKG1haiwgbWluKSAgICsrX2xvY2tzW21hal1bbWluXSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkNBTExCQUNLX1VOTE9DS1xmUChtYWosIG1pbikgICAtLV9sb2Nrc1ttYWpdW21pbl0iCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJDQUxMQkFDS19MT0NLX0NPVU5UXGZQKG1haiwgbWluKSAgIF9sb2Nrc1ttYWpdW21pbl0iCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQgXGZCX2NhbGxiYWNrX2xvY2tcZlAgKGludCBtYWpvciwgaW50IG1pbm9yLCBjb25zdCBjaGFyICp3YXJuLCBpbnQgYXNzZXJ0KSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZCBcZkJfY2FsbGJhY2tfdW5sb2NrXGZQIChpbnQgbWFqb3IsIGludCBtaW5vcikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJpbml0X2NhbGxiYWNrc1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfcmVnaXN0ZXJfY2FsbGJhY2tcZlAgKGludCBtYWpvciwgaW50IG1pbm9yLCBTTk1QQ2FsbGJhY2sgKm5ld19jYWxsYmFjaywgdm9pZCAqYXJnKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIGdlbmVyaWMgY2FsbGJhY2sgZnVuY3Rpb24uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfY2FsbGJhY2tcZlAgKGludCBtYWpvciwgaW50IG1pbm9yLCBTTk1QQ2FsbGJhY2sgKm5ld19jYWxsYmFjaywgdm9pZCAqYXJnLCBpbnQgcHJpb3JpdHkpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2NhbGxfY2FsbGJhY2tzXGZQIChpbnQgbWFqb3IsIGludCBtaW5vciwgdm9pZCAqY2FsbGVyX2FyZykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaXN0ZXJlZCBjYWxsYmFjayBvZiB0eXBlIG1ham9yIGFuZCBtaW5vci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9jb3VudF9jYWxsYmFja3NcZlAgKGludCBtYWpvciwgaW50IG1pbm9yKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9jYWxsYmFja19hdmFpbGFibGVcZlAgKGludCBtYWpvciwgaW50IG1pbm9yKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrXGZQIChpbnQgbWFqb3IsIGludCBtaW5vciwgU05NUENhbGxiYWNrICp0YXJnZXQsIHZvaWQgKmFyZywgaW50IG1hdGNoYXJncykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyBhIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbiBnaXZlbiBhIG1ham9yIGFuZCBtaW5vciB0eXBlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NhbGxiYWNrX2NsZWFyX2NsaWVudF9hcmdcZlAgKHZvaWQgKnB0ciwgaW50IGksIGludCBqKSIKLS5icgotLlJJICJcZklmaW5kIGFuZCBjbGVhciBjbGllbnQgYXJncyB0aGF0IG1hdGNoIHB0ciBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCY2xlYXJfY2FsbGJhY2tcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJzbm1wX2dlbl9jYWxsYmFja1xmUCAqIFxmQnNubXBfY2FsbGJhY2tfbGlzdFxmUCAoaW50IG1ham9yLCBpbnQgbWlub3IpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2NhbGxiYWNrX2NsZWFyX2NsaWVudF9hcmcgKHZvaWQgKiBwdHIsIGludCBpLCBpbnQgaikiCi0uUFAKLWZpbmQgYW5kIGNsZWFyIGNsaWVudCBhcmdzIHRoYXQgbWF0Y2ggcHRyIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcHRyXGZQIHBvaW50ZXIgdG8gc2VhcmNoIGZvciAKLS5icgotXGZJaVxmUCBjYWxsYmFjayBpZCB0byBzdGFydCBhdCAKLS5icgotXGZJalxmUCBjYWxsYmFjayBzdWJpZCB0byBzdGFydCBhdCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ3NyBvZiBmaWxlIGNhbGxiYWNrLmMuCi0uU1MgImludCBzbm1wX2NhbGxfY2FsbGJhY2tzIChpbnQgbWFqb3IsIGludCBtaW5vciwgdm9pZCAqIGNhbGxlcl9hcmcpIgotLlBQCi1UaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIGNhbGxiYWNrIG9mIHR5cGUgbWFqb3IgYW5kIG1pbm9yLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW1ham9yXGZQIGlzIHRoZSBTTk1QIGNhbGxiYWNrIG1ham9yIHR5cGUgdXNlZAotLmJyCi1cZkltaW5vclxmUCBpcyB0aGUgU05NUCBjYWxsYmFjayBtaW5vciB0eXBlIHVzZWQKLS5icgotXGZJY2FsbGVyX2FyZ1xmUCBpcyBhIHZvaWQgcG9pbnRlciB3aGljaCBpcyBzZW50IGluIGFzIHRoZSBjYWxsYmFjaydzIHNlcnZlcmFyZyBwYXJhbWV0ZXIsIGlmIG5lZWRlZC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgU05NUEVSUl9HRU5FUlIgaWYgbWFqb3IgaXMgPj0gTUFYX0NBTExCQUNLX0lEUyBvciBtaW5vciBpcyA+PSBNQVhfQ0FMTEJBQ0tfU1VCSURTLCBvdGhlcndpc2UgU05NUEVSUl9TVUNDRVNTIGlzIHJldHVybmVkLgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQnNubXBfcmVnaXN0ZXJfY2FsbGJhY2tcZlAgCi0uUFAKLVxmQnNubXBfdW5yZWdpc3Rlcl9jYWxsYmFja1xmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMwMSBvZiBmaWxlIGNhbGxiYWNrLmMuCi0uU1MgImludCBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrIChpbnQgbWFqb3IsIGludCBtaW5vciwgU05NUENhbGxiYWNrICogbmV3X2NhbGxiYWNrLCB2b2lkICogYXJnKSIKLS5QUAotVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBnZW5lcmljIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgbWFqb3IgYW5kIG1pbm9yIHZhbHVlcyBhcmUgdXNlZCB0byBzZXQgdGhlIG5ld19jYWxsYmFjayBmdW5jdGlvbiBpbnRvIGEgZ2xvYmFsIHN0YXRpYyBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBvZiB0eXBlIHN0cnVjdCBcZkJzbm1wX2dlbl9jYWxsYmFja1xmUC4gVGhlIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdG8gYXBwZW5kIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgbGluayBsaXN0LCBzbm1wX2dlbl9jYWxsYmFjay0+bmV4dC4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkltYWpvclxmUCBpcyB0aGUgU05NUCBjYWxsYmFjayBtYWpvciB0eXBlIHVzZWQKLS5JUCAiXChidSIgMgotU05NUF9DQUxMQkFDS19MSUJSQVJZCi0uUFAKLS5SRQotLlBQCi0uSVAgIlwoYnUiIDIKLVNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04KLS5QUAotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW1pbm9yXGZQIGlzIHRoZSBTTk1QIGNhbGxiYWNrIG1pbm9yIHR5cGUgdXNlZAotLklQICJcKGJ1IiAyCi1TTk1QX0NBTExCQUNLX1BPU1RfUkVBRF9DT05GSUcKLS5JUCAiXChidSIgMgotU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBCi0uSVAgIlwoYnUiIDIKLVNOTVBfQ0FMTEJBQ0tfU0hVVERPV04KLS5JUCAiXChidSIgMgotU05NUF9DQUxMQkFDS19QT1NUX1BSRU1JQl9SRUFEX0NPTkZJRwotLklQICJcKGJ1IiAyCi1TTk1QX0NBTExCQUNLX0xPR0dJTkcKLS5JUCAiXChidSIgMgotU05NUF9DQUxMQkFDS19TRVNTSU9OX0lOSVQKLS5QUAotLmJyCi1cZkluZXdfY2FsbGJhY2tcZlAgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgcmVnaXN0ZXJlZC4KLS5icgotXGZJYXJnXGZQIHdoZW4gbm90IE5VTEwgaXMgYSB2b2lkIHBvaW50ZXIgdXNlZCB3aGVuZXZlciBuZXdfY2FsbGJhY2sgZnVuY3Rpb24gaXMgZXhlcmNpc2VkLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBTTk1QRVJSX0dFTkVSUiBpZiBtYWpvciBpcyA+PSBNQVhfQ0FMTEJBQ0tfSURTIG9yIG1pbm9yIGlzID49IE1BWF9DQUxMQkFDS19TVUJJRFMgb3IgYSBcZkJzbm1wX2dlbl9jYWxsYmFja1xmUCBwb2ludGVyIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQsIG90aGVyd2lzZSBTTk1QRVJSX1NVQ0NFU1MgaXMgcmV0dXJuZWQuCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTUFYX0NBTExCQUNLX0lEUyAyCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTUFYX0NBTExCQUNLX1NVQklEUyAxNgotLlBQCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCc25tcF9jYWxsX2NhbGxiYWNrc1xmUCAKLS5QUAotXGZCc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjMzIG9mIGZpbGUgY2FsbGJhY2suYy4KLS5TUyAiaW50IHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayAoaW50IG1ham9yLCBpbnQgbWlub3IsIFNOTVBDYWxsYmFjayAqIHRhcmdldCwgdm9pZCAqIGFyZywgaW50IG1hdGNoYXJncykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgYSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24gZ2l2ZW4gYSBtYWpvciBhbmQgbWlub3IgdHlwZS4gTm90ZTogbm8gYm91bmQgY2hlY2tpbmcgb24gbWFqb3IgYW5kIG1pbm9yLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW1ham9yXGZQIGlzIHRoZSBTTk1QIGNhbGxiYWNrIG1ham9yIHR5cGUgdXNlZAotLmJyCi1cZkltaW5vclxmUCBpcyB0aGUgU05NUCBjYWxsYmFjayBtaW5vciB0eXBlIHVzZWQKLS5icgotXGZJdGFyZ2V0XGZQIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdW5yZWdpc3RlcmVkLgotLmJyCi1cZklhcmdcZlAgaXMgYSB2b2lkIHBvaW50ZXIgdXNlZCBmb3IgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrJ3Mgc2NfY2xpZW50X2FyZyBcZkJ2YXJpYWJsZVxmUC4KLS5icgotXGZJbWF0Y2hhcmdzXGZQIGlzIGFuIGludGVnZXIgdXNlZCB0byBieXBhc3MgdGhlIGNvbXBhcmlzb24gb2YgYXJnIGFuZCB0aGUgY2FsbGJhY2sncyBzY19jbGllbnRfYXJnIFxmQnZhcmlhYmxlXGZQIG9ubHkgd2hlbiBtYXRjaGFyZ3MgaXMgc2V0IHRvIDAuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FsbGJhY2tzIHRoYXQgd2VyZSB1bnJlZ2lzdGVyZWQuCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCc25tcF9yZWdpc3Rlcl9jYWxsYmFja1xmUCAKLS5QUAotXGZCc25tcF9jYWxsX2NhbGxiYWNrc1xmUCAKLS5SRQotLlBQCi0KLS5QUAotc2V0IGNsZWFudXAgZmxhZz8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MjEgb2YgZmlsZSBjYWxsYmFjay5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYgYi9tYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDlmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmCkBAIC0wLDAgKzEsMzczIEBACisuVEggTkVUU05NUF9DT05GSUdfQVBJIDMgIjEzIEF1ZyAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyLAorcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIsCityZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyLAordW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciwKK3JlZ2lzdGVyX21pYl9oYW5kbGVycywKK3VucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycywKK3JlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlciwKK3JlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyLAordW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIsCityZWFkX2NvbmZpZ3MsCityZWFkX3ByZW1pYl9jb25maWdzLAorcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UsCitjb25maWdfcGVycm9yLAorY29uZmlnX3B3YXJuIC0gbmV0c25tcF9jb25maWdfYXBpIGZ1bmN0aW9ucworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorLmJyCisuU1MgQ29uZmlnIEhhbmRsZXJzCisuUFAKKy5CIHN0cnVjdCBjb25maWdfbGluZSAqCisuYnIKKy5CSSAiICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIGZpbGVQcmVmaXggIiwKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHRva2VuICwKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjaGFyICopLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqInVzYWdlTGluZSAiKTsiCisuUFAKKy5CIHN0cnVjdCBjb25maWdfbGluZSAqCisuYnIKKy5CSSAiICByZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIGZpbGVQcmVmaXggIiwgCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB0b2tlbiAsCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdXNhZ2VMaW5lICIpOyIKKy5QUAorLlBQCisuQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgorLmJyCisuQkkgIiAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcihjb25zdCBjaGFyICoiIGZpbGVQcmVmaXggIiwgCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB0b2tlbiAsCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdXNhZ2VMaW5lICIpOyIKKy5QUAorLkJJICJ2b2lkIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiBmaWxlUHJlZml4ICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdG9rZW4gIik7IgorLlBQCisuXCIgRGVmaW5lZCBpbiBtaWIuYywgcmF0aGVyIHRoYW4gcmVhZF9jb25maWcuYworLkIgICJ2b2lkIHJlZ2lzdGVyX21pYl9oYW5kbGVycyh2b2lkKTsiCisuYnIKKy5CICAidm9pZCB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnModm9pZCk7IgorLmJyCisuU1MgQXBwbGljYXRpb24gSGFuZGxlcnMKKy5QUAorLkIgc3RydWN0IGNvbmZpZ19saW5lICoKKy5icgorLkJJICIgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICwKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjaGFyICopLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqInVzYWdlTGluZSAiKTsiCisuUFAKKy5CIHN0cnVjdCBjb25maWdfbGluZSAqCisuYnIKKy5CSSAiICByZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICwKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjaGFyICopLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB1c2FnZUxpbmUgIik7IgorLlBQCisuQkkgInZvaWQgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAiKTsiCisuYnIKKy5TUyBSZWFkaW5nIENvbmZpZ3VyYXRpb24gRmlsZXMKKy5QUAorLkIgInZvaWQgcmVhZF9wcmVtaWJfY29uZmlncyh2b2lkKTsiCisuYnIKKy5CICJ2b2lkIHJlYWRfY29uZmlncyh2b2lkKTsiCisuYnIKKy5TUyBIZWxwIFN0cmluZ3MgYW5kIEVycm9ycworLlBQCisuQkkgInZvaWQgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoY2hhciAqIiBsZWFkICIpOyIKKy5icgorLkJJICJ2b2lkIGNvbmZpZ19wd2Fybihjb25zdCBjaGFyICoiIHN0cmluZyAiKTsiCisuYnIKKy5CSSAidm9pZCBjb25maWdfcGVycm9yKGNvbnN0IGNoYXIgKiIgc3RyaW5nICIpOyIKKworLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb25zIGFyZSBhIGZhaXJseSBleHRlbnNpYmxlIHN5c3RlbSBvZiBwYXJzaW5nIHZhcmlvdXMKK2NvbmZpZ3VyYXRpb24gZmlsZXMgYXQgdGhlIHJ1biB0aW1lIG9mIGFuIGFwcGxpY2F0aW9uLiAgVGhlCitjb25maWd1cmF0aW9uIGZpbGUgZmxvdyBpcyBicm9rZW4gaW50byB0aGUgZm9sbG93aW5nIHBoYXNlczoKKy5SUyA0CisuVFAgNAorMS4KK1JlZ2lzdHJhdGlvbiBvZiBoYW5kbGVycy4KKy5UUAorMi4KK1JlYWRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHByZS1NSUIgcGFyc2luZyByZXF1aXJlbWVudHMuCisuVFAKKzMuCitSZWFkaW5nIGFuZCBwYXJzaW5nIG9mIHRoZSB0ZXh0dWFsIE1JQiBmaWxlcy4KKy5UUAorNC4KK1JlYWRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcy4KKy5UUAorNS4KK09wdGlvbmFsbHkgcmUtcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhdCBhIGZ1dHVyZSBkYXRlLgorLlJFCisuUFAKK1RoZSBpZGVhIGlzIHRoYXQgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gaXMgYWJsZSB0byByZWdpc3RlcgorLkkgaGFuZGxlcnMKK2ZvciBjZXJ0YWluCisuSSB0b2tlbnMKK3NwZWNpZmllZCBpbiBjZXJ0YWluIG5hbWVkCisuSSAiY29uZmlndXJhdGlvbiBmaWxlcy4iCitUaGUgCisuQiByZWFkX2NvbmZpZ3MoKQorZnVuY3Rpb24gY2FuIHRoZW4gYmUgY2FsbGVkIHRvIGxvb2sgZm9yIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzLAorbWF0Y2ggdGhlIGZpcnN0IHdvcmQgb24gZWFjaCBsaW5lIGFnYWluc3QgdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCB0b2tlbnMKK2FuZCBwYXNzIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUgdG8gdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVyZWQgaGFuZGxlci4KKy5TSCBSRUdJU1RFUklORyBBIEhBTkRMRVIKKy5UUAorLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQorUmVnaXN0ZXJzIGEgY29uZmlndXJhdGlvbiBoYW5kbGVyIHJvdXRpbmUsIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQKK3RvIHByb2Nlc3MgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzIHN0YXJ0aW5nIHdpdGggdGhlIHNwZWNpZmllZCB0b2tlbi4KK0ZvciBleGFtcGxlOgorLlBQCisuUlMKKy5SUworcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiZXhhbXBsZVRva2VuIiwgZXhhbXBsZV9oYW5kbGVyLCBOVUxMLCAiQVJHMSBbQVJHMl0iKTsKKy5SRQorLlJFCisuSVAKK3dvdWxkIHJlZ2lzdGVyIHRoZQorLkIgZXhhbXBsZV9oYW5kbGVyKCkKK2Z1bmN0aW9uIHNvIHRoYXQgaXQgd2lsbCBnZXQgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGZpcnN0IHdvcmQgb2YgYQorbGluZSBpbiB0aGUgCisuSSBzbm1wLmNvbmYKK2NvbmZpZ3VyYXRpb24gZmlsZShzKSBtYXRjaGVzICJleGFtcGxlVG9rZW4iLgorLmJyCitDYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVycyB0byBwcm9jZXNzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlcworaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIAorLkIgcmVhZF9jb25maWdzKCkgCisoc2VlIGJlbG93KS4KKy5UUAorLkIgcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoKQorU2ltaWxhciB0byB0aGUKKy5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKK2Z1bmN0aW9uLCBidXQgdGhlIHBhcnNlciByb3V0aW5lIGlzIGV4cGxpY2l0bHkgY29uc3RyYWluZWQKK3RvIG5vdCBtb2RpZnkgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQuCisuVFAKKy5CIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoKQorU2ltaWxhciB0byB0aGUKKy5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKK2Z1bmN0aW9uLCBidXQgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlciByb3V0aW5lIHdpbGwgYmUgY2FsbGVkCitcZkliZWZvcmVcZlAgdGhlIHRleHR1YWwgTUlCcyBhcmUgcmVhZCBpbi4KK1RoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIHRva2VucyB0aGF0IHdpbGwgYWZmZWN0IHRoZSBjb25maWd1cmF0aW9uIG9mCit0aGUgTUlCIHBhcnNlciwgYW5kIHdpbGwgbm9ybWFsbHkgb25seSBiZSB1c2VkIHdpdGhpbiB0aGUgU05NUCBsaWJyYXJ5IGl0c2VsZi4KKy5UUAorLkIgcmVnaXN0ZXJfbWliX2hhbmRsZXJzKCkKK0luaXRpYWxpc2F0aW9uIHJvdXRpbmUgdG8gcmVnaXN0ZXIgdGhlIGludGVybmFsIFNOTVAgbGlicmFyeSBjb25maWd1cmF0aW9uIGhhbmRsZXJzLgorLlRQCisuQiB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKK1JlbW92ZXMgdGhlIHJlZ2lzdGVyZWQgY29uZmlndXJhdGlvbiBoYW5kbGVyIGZvciB0aGUgc3BlY2lmaWVkCisuSSBmaWxlUHJlZml4CithbmQKKy5JUiB0b2tlbiAuCisuVFAKKy5CIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycygpCitSZW1vdmVzIGFsbCByZWdpc3RlcmVkIGNvbmZpZ3VyYXRpb24gaGFuZGxlcnMuCisKKy5TUyBUb2tlbiBIYW5kbGVycworLlBQCitIYW5kbGVyIGZ1bmN0aW9ucyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKKy5QUAorLlJTCisuQkkgInZvaWQgaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICIsIGNoYXIgKiIgbGluZSAiKTsiCisuYnIKK29yCisuYnIKKy5CSSAidm9pZCBoYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gIiwgY29uc3QgY2hhciAqIiBsaW5lICIpOyIKK2JyCisoaWYgcmVnaXN0ZXJlZCB1c2luZyBcZklyZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlclxmUCkKKy5SRQorLlBQCitUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzLCB0aGUgZmlyc3QgYmVpbmcgdGhlCit0b2tlbiB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIChpLmUuIHRoZSB0b2tlbiB1c2VkCit3aGVuIHJlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyKSwgYW5kIHRoZSBzZWNvbmQKK2JlaW5nIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBsaW5lIChpLmUuIGV2ZXJ5dGhpbmcKK2ZvbGxvd2luZyB0aGUgd2hpdGUgc3BhY2UgZm9sbG93aW5nIHRoZSBtYXRjaGVkIHRva2VuKS4KKworLlNTIEZyZWVpbmcgSGFuZGxlcnMKKy5QUAorSWYgdGhlIHRva2VuIGhhbmRsZXIgZnVuY3Rpb24gZHluYW1pY2FsbHkgYWxsb2NhdGVzIHJlc291cmNlcyB3aGVuCitwcm9jZXNzaW5nIGEgY29uZmlndXJhdGlvbiBlbnRyeSwgdGhlbiB0aGVzZSBtYXkgbmVlZCB0byBiZSByZWxlYXNlZAorYmVmb3JlIHJlLXJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCitJZiB0aGUgZm91cnRoIHBhcmFtZXRlciAoCisuSSByZWxlYXNlcgorKSBwYXNzZWQgdG8KKy5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyCitpcyBub24tTlVMTCwgdGhlbiB0aGlzIHNwZWNpZmllcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiZWZvcmUKK3JlLXJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmcmVlIGFueQorcmVzb3VyY2VzIGFsbG9jYXRlZCBieSB0aGUgdG9rZW4gaGFuZGxlciBmdW5jdGlvbiBhbmQgcmVzZXQgaXRzIG5vdGlvbgorb2YgdGhlIGNvbmZpZ3VyYXRpb24gdG8gaXRzIGRlZmF1bHQuICBUaGUgdG9rZW4gaGFuZGxlciBmdW5jdGlvbiBjYW4KK3RoZW4gc2FmZWx5IGJlIGNhbGxlZCBhZ2Fpbi4KK05vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSByZXNvdXJjZSBmcmVlaW5nIGhhbmRsZXIuCisuYnIKK05vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgd2hlbiB0aGUgaGFuZGxlciBpcwordW5yZWdpc3RlcmVkIGluZGl2aWR1YWxseSAoYnV0IFxmSWlzXGZQIGNhbGxlZCBhcyBwYXJ0IG9mCisuQiB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMoKQorKS4KKworLlNTIEFwcGxpY2F0aW9uIEhhbmRsZXJzCisuVFAKKy5CIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigpCisuVFAKKy5CIHJlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCkKKy5UUAorLkIgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoKQorVGhlc2UgZnVuY3Rpb25zIGFyZSBhbmFsYWdvdXMgdG8gCisuQlIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKSAiLCAiIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoKSAiIGFuZCAiCisuQiB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKK2J1dCBkbyBub3QgcmVxdWlyZSB0aGUgZmlsZSB0eXBlIGFyZ3VtZW50ICh3aGljaCBpcyBmaWxsZWQgaW4gYnkgdGhlCithcHBsaWNhdGlvbikuICBJdCBpcyBpbnRlbmRlZCB0aGF0IE1JQiBtb2R1bGVzIHdyaXR0ZW4gZm9yIHRoZSBhZ2VudAordXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBhbGxvdyB0aGUgYWdlbnQgdG8gaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB3aGljaAorY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgcmVhZCAodHlwaWNhbGx5IHRoZQorLkkgc25tcGQuY29uZgorZmlsZXMpLgorLlNIIFJFQURJTkcgQ09ORklHVVJBVElPTiBGSUxFUworLlRQCisuQiByZWFkX3ByZW1pYl9jb25maWdzKCkKKy5UUAorLkIgcmVhZF9jb25maWdzKCkKK1RoZXNlIHJvdXRpbmVzIHByb2Nlc3MgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm91bmQgaW4gdGhlCitjb25maWd1cmF0aW9uIHNlYXJjaCBwYXRoIChzZWUgYmVsb3cpLiAgRm9yIGVhY2ggZW50cnksIHRoZQoraGFuZGxlciByZWdpc3RlcmVkIGZvciB0aGF0IGNvbmZpZ3VyYXRpb24gdG9rZW4gaXMgY2FsbGVkLgorLlBQCisuQiByZWFkX3ByZW1pYl9jb25maWdzKCkKK2lzIHJ1biBiZWZvcmUgdGhlIE1JQiBmaWxlcyBhcmUgcmVhZCBpbiwgYW5kIHByb2Nlc3NlcyB0aG9zZQorY29uZmlndXJhdGlvbiB0b2tlbnMgcmVnaXN0ZXJlZCB1c2luZworLkIgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigpCisob3IKKy5CIHJlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCkKKykuCitBbGwgb3RoZXIgZW50cmllcyBhcmUgaWdub3JlZC4KKy5QUAorLkIgcmVhZF9jb25maWdzKCkKK2lzIHJ1biBhZnRlciB0aGUgTUlCIGZpbGVzIGhhdmUgYmVlbiByZWFkIGluLCBhbmQgcHJvY2Vzc2VzIHRob3NlCitjb25maWd1cmF0aW9uIHRva2VucyByZWdpc3RlcmVkIHVzaW5nCisuQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCisob3IKKy5CIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigpCispLgorSWYgaXQgZW5jb3VudGVycyBhIGNvbmZpZ3VyYXRpb24gdG9rZW4gZm9yIHdoaWNoIG5vIGhhbmRsZXIgaGFzCitiZWVuIHJlZ2lzdGVyZWQgKGVpdGhlciBwcmUtIG9yIHBvc3QtbWliKSwgdGhlbiBpdCB3aWxsIGRpc3BsYXkKK2Egd2FybmluZyBtZXNzYWdlLCBhbmQgY29udGludWUgcHJvY2Vzc2luZyB3aXRoIHRoZSBuZXh0IGxpbmUKK29mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisuU1MgQ29uZmlndXJhdGlvbiBTZWFyY2ggUGF0aAorLlBQCitUaGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBiZSByZWFkIGFyZSBmb3VuZCBieSBzZWFyY2hpbmcgYSBsaXN0CitvZiBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzIGZvciBhcHByb3ByaWF0ZWx5IG5hbWVkIGZpbGVzLgorSW4gZWFjaCBzdWNoIGRpcmVjdG9yeSwgdGhlIGxpYnJhcnkgd2lsbCBsb29rIGZvciBmaWxlcyBuYW1lZAorXGZDIHNubXAuY29uZlxmUCwKK1xmQyBzbm1wLmxvY2FsLmNvbmZcZlAsCitcZkkgYXBwXGZQXGZDLmNvbmZcZlAsCitcZkkgYXBwXGZQXGZDLmxvY2FsLmNvbmZcZlAsCisuYnIKKyh3aGVyZSBcZklhcHBcZlAgaXMgdGhlIGFwcGljYXRpb24tc3BlY2lmaWMgZmlsZVByZWZpeCB1c2VkIHRvCityZWdpc3RlciBjb25maWd1cmF0aW9uIGhhbmRsZXJzKS4KK0l0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIGFueSBvciBhbGwgb2YgdGhlc2UgZmlsZXMgdG8gYmUgcHJlc2VudAoraW4gZWFjaCBkaXJlY3RvcnkuICBNaXNzaW5nIGZpbGVzIHdpbGwgYmUgc2lsZW50bHkgc2tpcHBlZC4KKy5icgorVGhlIGlkZWEgYmVoaW5kIHRoZSB0d28gZGlmZmVyZW50IHN1ZmZpeGVzIGlzIHRoYXQgdGhlIGZpcnN0IGZpbGUgY2FuCitiZSBzaGFyZWQgKHZpYSByZGlzdCBvciBhbiBORlMgbW91bnQpIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZgorbWFjaGluZXMgYW5kIHRoZSBzZWNvbmQgZmlsZSBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgbG9jYWwgc2V0dGluZ3MKK2ZvciBvbmUgcGFydGljdWxhciBtYWNoaW5lLgorLlBQCitUaGUgZGVmYXVsdCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBpcyBcZkMgU1lTQ09ORkRJUi9zbm1wXGZQLAorZm9sbG93ZWQgYnkgXGZDIERBVEFESVIvc25tcFxmUCwKK2ZvbGxvd2VkIGJ5IFxmQyBMSUJESVIvc25tcFxmUCwKK2ZvbGxvd2VkIGJ5IFxmQyAkSE9NRS8uc25tcFxmUC4KK1RoaXMgbGlzdCBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlCisuSSBTTk1QQ09ORlBBVEgKK3RvIGJlIGEgKGNvbG9uIHNlcGFyYXRlZCkgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2guCisuYnIKKy5TUyBpbml0X3NubXAoKQorLlBQCitUaGUgbm9ybWFsIG1vZGUgb2Ygb3BlcmF0aW9uIHdvdWxkIGJlIHRvIHJlZ2lzdGVyIHRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYworY29uZmlndXJhdGlvbiBoYW5kbGVycywgYW5kIHRoZW4gaW52b2tlCisuQlIgaW5pdF9zbm1wKCkgIi4iCitUaGlzIHdvdWxkIGNhbGwgdGhlIHJvdXRpbmVzIGxpc3RlZCBhYm92ZSB0byByZWdpc3RlciB0aGUgaW50ZXJuYWwgbGlicmFyeQorY29uZmlndXJhdGlvbiBoYW5kbGVycywgcHJvY2VzcyBhbnkgY29uZmlndXJhdGlvbiB0b2tlbnMgcmVnaXN0ZXJlZCB3aXRoCisuQiByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCksCityZWFkIGluIHRoZSB0ZXh0dWFsIE1JQiBmaWxlcyB1c2luZworLkIgaW5pdF9taWIoKSwKK2FuZCBmaW5hbGx5IHBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdG9rZW5zIHJlZ2lzdGVyZWQgd2l0aCAKKy5CUiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpIC4KKy5QUAorSWYgdGhlIAorLkIgaW5pdF9zbm1wKCkKK2Z1bmN0aW9uIGlzIHVzZWQsIG5vbmUgb2YgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZXhwbGljaXRseQorY2FsbGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKy5TSCBIRUxQIFNUUklOR1MgQU5EIEVSUk9SUworLlBQCitUaGUKKy5JIHVzYWdlTGluZQorcGFyYW1ldGVyIHBhc3NlZCB0bworLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQorYW5kIHNpbWlsYXIgY2FsbHMsIGlzIHVzZWQgdG8gZGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIHdoZW4gdGhlCisuQiByZWFkX2NvbmZpZ19wcmludF91c2FnZSgpCitmdW5jdGlvbiBpcyBjYWxsZWQuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYWxsIG9mIHRoZSBhcHBsaWNhdGlvbnMKK3doZW4gdGhlIAorLkIgLUgKK2ZsYWcgaXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBJdCBwcmludHMgYSBzdW1tYXJ5IG9mIGFsbCBvZiB0aGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBsaW5lcywgYW5kIHRoZSBhc3NvY2lhdGVkIGZpbGVzLCB0aGF0IHRoZQorY29uZmlndXJhdGlvbiBzeXN0ZW0gdW5kZXJzdGFuZHMuICBUaGUKKy5JIHVzYWdlTGluZQorcGFyYW1ldGVyIHNob3VsZCBiZSBhIGxpc3Qgb2YgYXJndW1lbnRzIGV4cGVjdGVkIGFmdGVyIHRoZSB0b2tlbiwgYW5kCitub3QgYSBsZW5ndGh5IGRlc2NyaXB0aW9uICh3aGljaCBzaG91bGQgZ28gaW50byBhIG1hbnVhbCBwYWdlCitpbnN0ZWFkKS4gIFRoZQorLkkgbGVhZAorcHJlZml4IHdpbGwgYmUgcHJlcGVuZGVkIHRvIGVhY2ggbGluZSB0aGF0IHRoZSBmdW5jdGlvbiBwcmludHMgdG8KK3N0ZGVyciwgd2hlcmUgaXQgZGlzcGxheXMgaXRzIG91dHB1dC4KKy5QUAorVGhlCisuQiBpbml0X3NubXAoKQorZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlCisuQiByZWFkX2NvbmZpZ19wcmludF91c2FnZSgpCitmdW5jdGlvbiBpcyBjYWxsZWQsIHNvIHRoYXQgdGhlIGxpYnJhcnkgY2FuIHJlZ2lzdGVyIGl0cyBjb25maWd1cmF0aW9uIAorZmlsZSBkaXJlY3RpdmVzIGFzIHdlbGwgZm9yIHRoZSAKKy5CIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKCkKK2Z1bmN0aW9uIHRvIGRpc3BsYXkuCisuU1MgRXJyb3IgSGFuZGxpbmcgRnVuY3Rpb25zCisuUFAKK1RoZSB0d28gZnVuY3Rpb25zCisuQiBjb25maWdfcHdhcm4oKQorYW5kCisuQiBjb25maWdfcGVycm9yKCkKK2JvdGggdGFrZSBhbiBlcnJvciBzdHJpbmcgYXMgYW4gYXJndW1lbnQgYW5kIHByaW50IGl0IHRvIHN0ZGVyciBhbG9uZword2l0aCB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgdGhhdCBjYXVzZWQgdGhlIGVycm9yLiAgQSBjYWxsIHRvIHRoZQorc2Vjb25kIGZ1bmN0aW9uIHdpbGwgYWxzbyBmb3JjZSAKKy5CIHJlYWRfY29uZmlncygpIAordG8gZXZlbnR1YWxseSByZXR1cm4gd2l0aCBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcgdG8gaXQncyBjYWxsaW5nCitmdW5jdGlvbiB0aGF0IGl0IHNob3VsZCBhYm9ydCB0aGUgb3BlcmF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi4KKy5TSCAiRU5WSVJPTk1FTlQgVkFSSUFCTEVTIgorLlRQIDEwCitTTk1QQ09ORlBBVEgKK0EgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBjb25maWd1cmF0aW9uCitmaWxlcyBpbi4KK0RlZmF1bHQ6IFNZU0NPTkZESVIvc25tcDpEQVRBRElSL3NubXA6TElCRElSL3NubXA6JEhPTUUvLnNubXAKKy5TSCAiU0VFIEFMU08iCituZXRzbm1wX21pYl9hcGkoMyksIHNubXBfYXBpKDMpCisuXCIgTG9jYWwgVmFyaWFibGVzOgorLlwiICBtb2RlOiBucm9mZgorLlwiIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2NvbnRhaW5lci4zIGIvbWFuL25ldHNubXBfY29udGFpbmVyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZjQxNGQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfY29udGFpbmVyLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0uVEggImNvbnRhaW5lciIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWNvbnRhaW5lciBcLSAKLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJudWxsX2NvbnRhaW5lclxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJSGVscHMgeW91IGltcGxlbWVudCBzcGVjaWFsaXplZCBjb250YWluZXJzLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfZGF0YV9saXN0LjMgYi9tYW4vbmV0c25tcF9kYXRhX2xpc3QuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVjY2FmZS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9kYXRhX2xpc3QuMworKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0uVEggImdlbmVyaWMgbGlua2VkLWxpc3QgZGF0YSBoYW5kbGluZyB3aXRoIGEgc3RyaW5nIGFzIGEga2V5LiIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWdlbmVyaWMgbGlua2VkLWxpc3QgZGF0YSBoYW5kbGluZyB3aXRoIGEgc3RyaW5nIGFzIGEga2V5LiBcLSAKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9mcmVlX2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKlxmQm5vZGVcZlApIgotLmJyCi0uUkkgIlxmSWZyZWVzIHRoZSBkYXRhIGFuZCBhIG5hbWUgYXQgYSBnaXZlbiBkYXRhX2xpc3QgXGZCbm9kZVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqaGVhZCkiCi0uYnIKLS5SSSAiXGZJZnJlZXMgYWxsIGRhdGEgYW5kIG5vZGVzIGluIGEgbGlzdC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIFxmQm5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdFxmUCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSwgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqYmVlcikiCi0uYnIKLS5SSSAiXGZJYWRkcyBjcmVhdGVzIGEgZGF0YV9saXN0IFxmQm5vZGVcZlAgZ2l2ZW4gYSBuYW1lLCBkYXRhIGFuZCBhIGZyZWUgZnVuY3Rpb24gcHRyLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9hZGRfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKmhlYWQsIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpcZkJub2RlXGZQKSIKLS5icgotLlJJICJcZklhZGRzIGRhdGEgdG8gYSBkYXRhbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGVcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqaGVhZCwgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKlxmQm5vZGVcZlApIgotLmJyCi0uUkkgIlxmSWFkZHMgZGF0YSB0byBhIGRhdGFsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBcZkJuZXRzbm1wX2RhdGFfbGlzdF9hZGRfZGF0YVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKipoZWFkLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhLCBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICpiZWVyKSIKLS5icgotLlJJICJcZklhZGRzIGRhdGEgdG8gYSBkYXRhbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgKiBcZkJuZXRzbm1wX2dldF9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgZGF0YV9saXN0IG5vZGUncyBkYXRhIGZvciBhIGdpdmVuIG5hbWUgd2l0aGluIGEgZGF0YV9saXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBcZkJuZXRzbm1wX2dldF9saXN0X25vZGVcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgZGF0YV9saXN0IFxmQm5vZGVcZlAgZm9yIGEgZ2l2ZW4gbmFtZSB3aXRoaW4gYSBkYXRhX2xpc3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKnJlYWxoZWFkLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklSZW1vdmVzIGEgbmFtZWQgXGZCbm9kZVxmUCBmcm9tIGEgZGF0YV9saXN0IChhbmQgZnJlZXMgaXQpLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9yZWdpc3Rlcl9zYXZlX2xpc3RcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqZGF0YWxpc3QsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnRva2VuLCBOZXRzbm1wX1NhdmVfTGlzdF9EYXRhICpkYXRhX2xpc3Rfc2F2ZV9wdHIsIE5ldHNubXBfUmVhZF9MaXN0X0RhdGEgKmRhdGFfbGlzdF9yZWFkX3B0ciwgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqZGF0YV9saXN0X2ZyZWVfcHRyKSIKLS5icgotLlJJICJcZklyZWdpc3RlcnMgdG8gc3RvcmUgYSBkYXRhX2xpc3Qgc2V0IG9mIGRhdGEgYXQgcGVyc2lzdGVudCBzdG9yYWdlIHRpbWUgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zYXZlX2FsbF9kYXRhX2NhbGxiYWNrXGZQIChpbnQgbWFqb3IsIGludCBtaW5vciwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpIgotLmJyCi0uUkkgIlxmSWludGVuZGVkIHRvIGJlIHJlZ2lzdGVyZCBhcyBhIGNhbGxiYWNrIG9wZXJhdGlvbi4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zYXZlX2FsbF9kYXRhXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqaGVhZCwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdG9rZW4sIE5ldHNubXBfU2F2ZV9MaXN0X0RhdGEgKmRhdGFfbGlzdF9zYXZlX3B0cikiCi0uYnIKLS5SSSAiXGZJaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGFzIGEgY2FsbGJhY2sgZHVyaW5nIHBlcnNpc3RlbnQgc2F2ZSBvcGVyYXRpb25zLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9yZWFkX2RhdGFfY2FsbGJhY2tcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSIKLS5icgotLlJJICJcZklpbnRlbmRlZCB0byBiZSByZWdpc3RlcmQgYXMgYSAuY29uZiBwYXJzZXIgSXQgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdXNpbmc6IFxmUCIKLS5pbiAtMWMKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX2FkZF9saXN0X2RhdGEgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqIGhlYWQsIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogbm9kZSkiCi0uUFAKLWFkZHMgZGF0YSB0byBhIGRhdGFsaXN0IGRlcHJlY2lhdGVkOiB1c2UgXGZCbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUoKVxmUAotLlBQCi1cZkJOb3RlOlxmUAotLlJTIDQKLW5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlIGlzIHByZWZlcnJlZCAKLS5SRQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWhlYWRcZlAgYSBwb2ludGVyIHRvIHRoZSBoZWFkIFxmQm5vZGVcZlAgb2YgYSBkYXRhX2xpc3QgCi0uYnIKLVxmSVxmQm5vZGVcZlBcZlAgYSBcZkJub2RlXGZQIHRvIHN0YXNoIGluIHRoZSBkYXRhX2xpc3QgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NyBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCogbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0IChjb25zdCBjaGFyICogbmFtZSwgdm9pZCAqIGRhdGEsIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKiBiZWVyKSIKLS5QUAotYWRkcyBjcmVhdGVzIGEgZGF0YV9saXN0IFxmQm5vZGVcZlAgZ2l2ZW4gYSBuYW1lLCBkYXRhIGFuZCBhIGZyZWUgZnVuY3Rpb24gcHRyLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW5hbWVcZlAgdGhlIG5hbWUgb2YgdGhlIFxmQm5vZGVcZlAgdG8gY2FjaGUgdGhlIGRhdGEuIAotLmJyCi1cZklkYXRhXGZQIHRoZSBkYXRhIHRvIGJlIHN0b3JlZCB1bmRlciB0aGF0IG5hbWUgCi0uYnIKLVxmSWJlZXJcZlAgQSBmdW5jdGlvbiB0aGF0IGNhbiBmcmVlIHRoZSBkYXRhIHBvaW50ZXIgKGluIHRoZSBmdXR1cmUpIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotYSBuZXdseSBjcmVhdGVkIGRhdGFfbGlzdCBcZkJub2RlXGZQIHdoaWNoIGNhbiBiZSBnaXZlbiB0byB0aGUgbmV0c25tcF9hZGRfbGlzdF9kYXRhIGZ1bmN0aW9uLiAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjAgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAqIG5ldHNubXBfZGF0YV9saXN0X2FkZF9kYXRhIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKiBoZWFkLCBjb25zdCBjaGFyICogbmFtZSwgdm9pZCAqIGRhdGEsIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKiBiZWVyKSIKLS5QUAotYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkloZWFkXGZQIGEgcG9pbnRlciB0byB0aGUgaGVhZCBcZkJub2RlXGZQIG9mIGEgZGF0YV9saXN0IAotLmJyCi1cZkluYW1lXGZQIHRoZSBuYW1lIG9mIHRoZSBcZkJub2RlXGZQIHRvIGNhY2hlIHRoZSBkYXRhLiAKLS5icgotXGZJZGF0YVxmUCB0aGUgZGF0YSB0byBiZSBzdG9yZWQgdW5kZXIgdGhhdCBuYW1lIAotLmJyCi1cZkliZWVyXGZQIEEgZnVuY3Rpb24gdGhhdCBjYW4gZnJlZSB0aGUgZGF0YSBwb2ludGVyIChpbiB0aGUgZnV0dXJlKSAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWEgbmV3bHkgY3JlYXRlZCBkYXRhX2xpc3QgXGZCbm9kZVxmUCB3aGljaCB3YXMgaW5zZXJ0ZWQgaW4gdGhlIGxpc3QgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNDEgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiogaGVhZCwgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBub2RlKSIKLS5QUAotYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkloZWFkXGZQIGEgcG9pbnRlciB0byB0aGUgaGVhZCBcZkJub2RlXGZQIG9mIGEgZGF0YV9saXN0IAotLmJyCi1cZklcZkJub2RlXGZQXGZQIGEgXGZCbm9kZVxmUCB0byBzdGFzaCBpbiB0aGUgZGF0YV9saXN0IAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTcgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBoZWFkKSIKLS5QUAotZnJlZXMgYWxsIGRhdGEgYW5kIG5vZGVzIGluIGEgbGlzdC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkloZWFkXGZQIHRoZSB0b3AgXGZCbm9kZVxmUCBvZiB0aGUgbGlzdCB0byBiZSBmcmVlZC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MiBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfZnJlZV9saXN0X2RhdGEgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogbm9kZSkiCi0uUFAKLWZyZWVzIHRoZSBkYXRhIGFuZCBhIG5hbWUgYXQgYSBnaXZlbiBkYXRhX2xpc3QgXGZCbm9kZVxmUC4gTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBmcmVlIHRoZSBcZkJub2RlXGZQIGl0c2VsZi4gCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJXGZCbm9kZVxmUFxmUCB0aGUgXGZCbm9kZVxmUCBmb3Igd2hpY2ggdGhlIGRhdGEgc2hvdWxkIGJlIGZyZWVkIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjYgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCogbmV0c25tcF9nZXRfbGlzdF9kYXRhIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIGhlYWQsIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotcmV0dXJucyBhIGRhdGFfbGlzdCBub2RlJ3MgZGF0YSBmb3IgYSBnaXZlbiBuYW1lIHdpdGhpbiBhIGRhdGFfbGlzdCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWhlYWRcZlAgdGhlIGhlYWQgXGZCbm9kZVxmUCBvZiBhIGRhdGFfbGlzdCAKLS5icgotXGZJbmFtZVxmUCB0aGUgbmFtZSB0byBmaW5kIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotYSBwb2ludGVyIHRvIHRoZSBkYXRhIGNhY2hlZCBhdCB0aGF0IFxmQm5vZGVcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNjYgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAqIG5ldHNubXBfZ2V0X2xpc3Rfbm9kZSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBoZWFkLCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLXJldHVybnMgYSBkYXRhX2xpc3QgXGZCbm9kZVxmUCBmb3IgYSBnaXZlbiBuYW1lIHdpdGhpbiBhIGRhdGFfbGlzdCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWhlYWRcZlAgdGhlIGhlYWQgXGZCbm9kZVxmUCBvZiBhIGRhdGFfbGlzdCAKLS5icgotXGZJbmFtZVxmUCB0aGUgbmFtZSB0byBmaW5kIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotYSBwb2ludGVyIHRvIHRoZSBkYXRhX2xpc3QgXGZCbm9kZVxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4NCBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJ2b2lkIG5ldHNubXBfcmVhZF9kYXRhX2NhbGxiYWNrIChjb25zdCBjaGFyICogdG9rZW4sIGNoYXIgKiBsaW5lKSIKLS5QUAotaW50ZW5kZWQgdG8gYmUgcmVnaXN0ZXJkIGFzIGEgLmNvbmYgcGFyc2VyIEl0IHNob3VsZCBiZSByZWdpc3RlcmVkIHVzaW5nOiByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoJ3Rva2VuJywgbmV0c25tcF9yZWFkX2RhdGFfY2FsbGJhY2ssIFhYWCkKLS5QUAotd2hlcmUgSU5GT19QT0lOVEVSIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfZGF0YV9saXN0X3NhdmVpbmZvIG9iamVjdCBjb250YWluaW5nIGFwcG9ycHJpYXRlIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiAKLS5QUAotXGZCVG9kb1xmUAotLlJTIDQKLW1ha2UgbmV0c25tcF9yZWFkX2RhdGFfY2FsbGJhY2sgZGVhbCB3aXRoIGEgZnJlZSByb3V0aW5lIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzM3IG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgInZvaWQgbmV0c25tcF9yZWdpc3Rlcl9zYXZlX2xpc3QgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqIGRhdGFsaXN0LCBjb25zdCBjaGFyICogdHlwZSwgY29uc3QgY2hhciAqIHRva2VuLCBOZXRzbm1wX1NhdmVfTGlzdF9EYXRhICogZGF0YV9saXN0X3NhdmVfcHRyLCBOZXRzbm1wX1JlYWRfTGlzdF9EYXRhICogZGF0YV9saXN0X3JlYWRfcHRyLCBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICogZGF0YV9saXN0X2ZyZWVfcHRyKSIKLS5QUAotcmVnaXN0ZXJzIHRvIHN0b3JlIGEgZGF0YV9saXN0IHNldCBvZiBkYXRhIGF0IHBlcnNpc3RlbnQgc3RvcmFnZSB0aW1lIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJZGF0YWxpc3RcZlAgdGhlIGRhdGEgdG8gYmUgc2F2ZWQgCi0uYnIKLVxmSXR5cGVcZlAgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHNhdmUgdGhlIGRhdGEgYXMuIElmIGxlZnQgTlVMTCB0aGUgZGVmYXVsdCBhcHBsaWNhdGlvbiBuYW1lIHRoYXQgd2FzIHJlZ2lzdGVyZWQgZHVyaW5nIHRoZSBpbml0X3NubXAgY2FsbCB3aWxsIGJlIHVzZWQgKHJlY29tbWVuZGVkKS4gCi0uYnIKLVxmSXRva2VuXGZQIHRoZSB1bmlxdWUgdG9rZW4gaWRlbnRpZmllciBzdHJpbmcgdG8gdXNlIGFzIHRoZSBmaXJzdCB3b3JkIGluIHRoZSBwZXJzaXN0ZW50IGZpbGUgbGluZS4gCi0uYnIKLVxmSWRhdGFfbGlzdF9zYXZlX3B0clxmUCBhIGZ1bmN0aW9uIHBvaW50ZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgdG8gc2F2ZSB0aGUgcmVzdCBvZiB0aGUgZGF0YSB0byBhIGJ1ZmZlci4gCi0uYnIKLVxmSWRhdGFfbGlzdF9yZWFkX3B0clxmUCBhIGZ1bmN0aW9uIHBvaW50ZXIgd2hpY2ggY2FuIHJlYWQgdGhlIHJlbWFpbmRlciBvZiBhIHNhdmVkIGxpbmUgYW5kIHJldHVybiB0aGUgYXBwbGljYXRpb24gc3BlY2lmaWMgdm9pZCAqIHBvaW50ZXIuIAotLmJyCi1cZklkYXRhX2xpc3RfZnJlZV9wdHJcZlAgYSBmdW5jdGlvbiBwb2ludGVyIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBkYXRhIFxmQm5vZGVcZlAgZm9yIGZyZWVpbmcgaXQgaW4gdGhlIGZ1dHVyZSB3aGVuL2lmIHRoZSBsaXN0L25vZGUgaXMgY2xlYW5lZCB1cCBvciBkZXN0cm95ZWQuIAotLlJFCi0uUFAKLQotLlBQCi1cZkJUb2RvXGZQCi0uUlMgNAotbmV0c25tcF9yZWdpc3Rlcl9zYXZlX2xpc3Qgc2hvdWxkIGhhbmRsZSB0aGUgc2FtZSB0b2tlbiBuYW1lIGJlaW5nIHNhdmVkIGZyb20gZGlmZmVyZW50IHR5cGVzPyAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzNSBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJpbnQgbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKiByZWFsaGVhZCwgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1SZW1vdmVzIGEgbmFtZWQgXGZCbm9kZVxmUCBmcm9tIGEgZGF0YV9saXN0IChhbmQgZnJlZXMgaXQpLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlYWxoZWFkXGZQIGEgcG9pbnRlciB0byB0aGUgaGVhZCBcZkJub2RlXGZQIG9mIGEgZGF0YV9saXN0IAotLmJyCi1cZkluYW1lXGZQIHRoZSBuYW1lIHRvIGZpbmQgYW5kIHJlbW92ZSAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgb24gc3VjY2Vzc2Z1bCBmaW5kLWFuZC1kZWxldGUsIDEgb3RoZXJ3aXNlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwMiBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJpbnQgbmV0c25tcF9zYXZlX2FsbF9kYXRhIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIGhlYWQsIGNvbnN0IGNoYXIgKiB0eXBlLCBjb25zdCBjaGFyICogdG9rZW4sIE5ldHNubXBfU2F2ZV9MaXN0X0RhdGEgKiBkYXRhX2xpc3Rfc2F2ZV9wdHIpIgotLlBQCi1pbnRlbmRlZCB0byBiZSBjYWxsZWQgYXMgYSBjYWxsYmFjayBkdXJpbmcgcGVyc2lzdGVudCBzYXZlIG9wZXJhdGlvbnMuIFNlZSB0aGUgbmV0c25tcF9zYXZlX2FsbF9kYXRhX2NhbGxiYWNrIGZvciB3aGVyZSB0aGlzIGlzIHR5cGljYWxseSB1c2VkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMwMSBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJpbnQgbmV0c25tcF9zYXZlX2FsbF9kYXRhX2NhbGxiYWNrIChpbnQgbWFqb3IsIGludCBtaW5vciwgdm9pZCAqIHNlcnZlcmFyZywgdm9pZCAqIGNsaWVudGFyZykiCi0uUFAKLWludGVuZGVkIHRvIGJlIHJlZ2lzdGVyZCBhcyBhIGNhbGxiYWNrIG9wZXJhdGlvbi4gSXQgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdXNpbmc6Ci0uUFAKLXNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsIG5ldHNubXBfc2F2ZV9hbGxfZGF0YV9jYWxsYmFjaywgSU5GT19QT0lOVEVSKTsKLS5QUAotd2hlcmUgSU5GT19QT0lOVEVSIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfZGF0YV9saXN0X3NhdmVpbmZvIG9iamVjdCBjb250YWluaW5nIGFwcG9ycHJpYXRlIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4NCBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2RlYnVnLjMgYi9tYW4vbmV0c25tcF9kZWJ1Zy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2E4Yjg5Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2RlYnVnLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLlRIICJkZWJ1ZyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWRlYnVnIFwtIAotLlBQCi1QcmludCBvdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYW5kbGVyIGNoYWluIGJlaW5nIGNhbGxlZC4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfZGVidWdfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGRlYnVnIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJkZWJ1Z19wcmludF9yZXF1ZXN0c1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kZWJ1Z19oZWxwZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X2RlYnVnX2hlbHBlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIGRlYnVnIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIGRlYnVnIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS5pbiAtMWMKLS5TUyAiaGFuZGxlciIKLSAKLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfc2VyaWFsaXplXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgc2VyaWFsaXplIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHNlcmlhbGl6ZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3JlYWRfb25seV9oZWxwZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSByZWFkX29ubHkgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgcmVhZF9vbmx5IGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfYnVsa190b19uZXh0X2hlbHBlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIGJ1bGtfdG9fbmV4dCBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBidWxrX3RvX25leHQgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF90YWJsZV9kYXRhc2V0XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9zdGFzaF9jYWNoZV9oZWxwZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSBzdGFzaF9jYWNoZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X2hlbHBlcnNcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWNhbGwgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciBhbGwgaGFuZGxlcnMgd2l0aCBpbml0XyByb3V0aW5lcy4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVByaW50IG91dCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhbmRsZXIgY2hhaW4gYmVpbmcgY2FsbGVkLiAKLQotVGhpcyBpcyBhIHVzZWZ1bCBcZkJtb2R1bGVcZlAgZm9yIHJ1bi10aW1lIGRlYnVnZ2luZyBvZiByZXF1ZXN0cyBhcyB0aGUgcGFzcyB0aGlzIGhhbmRsZXIgaW4gYSBjYWxsaW5nIGNoYWluLiBBbGwgZGVidWdnaW5nIG91dHB1dCBpcyBkb25lIHZpYSB0aGUgc3RhbmRhcmQgZGVidWdnaW5nIHJvdXRpbmVzIHdpdGggYSB0b2tlbiBuYW1lIG9mICdoZWxwZXI6ZGVidWcnLCBzbyB1c2UgdGhlIC1EaGVscGVyOmRlYnVnIGNvbW1hbmQgbGluZSBmbGFnIHRvIHNlZSB0aGUgb3V0cHV0IHdoZW4gcnVubmluZyB0aGUgc25tcGQgZGVtb24uIEl0J3Mgbm90IHJlY29tbWVuZGVkIHlvdSBjb21waWxlIHRoaXMgaW50byBhIGhhbmRsZXIgY2hhaW4gZHVyaW5nIGNvbXBpbGUgdGltZSwgYnV0IGluc3RlYWQgdXNlIHRoZSAnaW5qZWN0SGFuZGxlcicgdG9rZW4gaW4gdGhlIHNubXBkLmNvbmYgZmlsZSAob3Igc2ltaWxhcikgdG8gYWRkIGl0IHRvIHRoZSBjaGFpbiBsYXRlcjoKLS5QUAotaW5qZWN0SGFuZGxlciBkZWJ1ZyBteV9tb2R1bGVfbmFtZQotLlBQCi10byBzZWUgYW4gZXhhbXBsZSBvdXRwdXQsIHRyeToKLS5QUAotaW5qZWN0SGFuZGxlciBkZWJ1ZyBtaWJJSS9zeXN0ZW0KLS5QUAotYW5kIHRoZW4gcnVuIHNubXB3YWxrIG9uIHRoZSAnc3lzdGVtJyBncm91cC4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X2RlYnVnX2hhbmRsZXIgKHZvaWQpIgotLlBQCi1yZXR1cm5zIGEgZGVidWcgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MSBvZiBmaWxlIGRlYnVnX2hhbmRsZXIuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfYnVsa190b19uZXh0X2hlbHBlciAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSBidWxrX3RvX25leHQgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgYnVsa190b19uZXh0IGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM5IG9mIGZpbGUgYnVsa190b19uZXh0LmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X2RlYnVnX2hlbHBlciAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSBkZWJ1ZyBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBkZWJ1ZyBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1NSBvZiBmaWxlIGRlYnVnX2hhbmRsZXIuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfaGVscGVycyAodm9pZCkiCi0uUFAKLWNhbGwgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciBhbGwgaGFuZGxlcnMgd2l0aCBpbml0XyByb3V0aW5lcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNiBvZiBmaWxlIGFsbF9oZWxwZXJzLmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X3JlYWRfb25seV9oZWxwZXIgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgcmVhZF9vbmx5IGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHJlYWRfb25seSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgxIG9mIGZpbGUgcmVhZF9vbmx5LmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X3NlcmlhbGl6ZSAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSBzZXJpYWxpemUgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgc2VyaWFsaXplIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTMgb2YgZmlsZSBzZXJpYWxpemUuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfc3Rhc2hfY2FjaGVfaGVscGVyICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIHN0YXNoX2NhY2hlIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjM4IG9mIGZpbGUgc3Rhc2hfY2FjaGUuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMgYi9tYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzI4N2IuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS5USCAic3RvcmFnZSBzcGFjZSBmb3IgZGVmYXVsdHMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zdG9yYWdlIHNwYWNlIGZvciBkZWZhdWx0cyBcLSAKLS5QUAotVGhlIHB1cnBvc2Ugb2YgdGhlIGRlZmF1bHQgc3RvcmFnZSBpcyB0aHJlZS1mb2xkOi4gIAotCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9kc19yZWFkX2NvbmZpZ19zXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIlR5cGVkZWZzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQm5ldHNubXBfZHNfcmVhZF9jb25maWdfc1xmUCBcZkJuZXRzbm1wX2RzX3JlYWRfY29uZmlnXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZHNfaGFuZGxlX2NvbmZpZ1xmUCAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX3NldF9ib29sZWFuXGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCBpbnQgdmFsdWUpIgotLmJyCi0uUkkgIlxmSVN0b3JlcyAndHJ1ZScgb3IgJ2ZhbHNlJyBnaXZlbiBhbiBpbnQgdmFsdWUgZm9yIHZhbHVlIGludG8gbmV0c25tcF9kc19ib29sZWFuc1tzdG9yZV1bd2hpY2hdIHNsb3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW5cZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX2dldF9ib29sZWFuXGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19zZXRfaW50XGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCBpbnQgdmFsdWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX2dldF9pbnRcZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX3NldF9zdHJpbmdcZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIGNvbnN0IGNoYXIgKnZhbHVlKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCbmV0c25tcF9kc19nZXRfc3RyaW5nXGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19zZXRfdm9pZFxmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCwgdm9pZCAqdmFsdWUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2RzX2dldF92b2lkXGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19wYXJzZV9ib29sZWFuXGZQIChjaGFyICpsaW5lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWdcZlAgKHVfY2hhciB0eXBlLCBjb25zdCBjaGFyICpmdHlwZSwgY29uc3QgY2hhciAqdG9rZW4sIGludCBzdG9yZWlkLCBpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYlxmUCAodV9jaGFyIHR5cGUsIGNvbnN0IGNoYXIgKmZ0eXBlLCBjb25zdCBjaGFyICp0b2tlbiwgaW50IHN0b3JlaWQsIGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2RzX3NodXRkb3duXGZQICgpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIHB1cnBvc2Ugb2YgdGhlIGRlZmF1bHQgc3RvcmFnZSBpcyB0aHJlZS1mb2xkOi4gCi0KLTEpIFRvIGNyZWF0ZSBhIGdsb2JhbCBzdG9yYWdlIHNwYWNlIHdpdGhvdXQgY3JlYXRpbmcgYSB3aG9sZSBidW5jaCBvZiBnbG9iYWxseSBhY2Nlc3NpYmxlIHZhcmlhYmxlcyBvciBhIHdob2xlIGJ1bmNoIG9mIGFjY2VzcyBmdW5jdGlvbnMgdG8gd29yayB3aXRoIG1vcmUgcHJpdmF0ZWx5IHJlc3RyaWN0ZWQgdmFyaWFibGVzLgotLlBQCi0yKSBUbyBwcm92aWRlIGEgc2luZ2xlIGxvY2F0aW9uIHdoZXJlIHRoZSB0aHJlYWQgbG9jay0gaW5nIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkLiBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGhvd2V2ZXIsIHRocmVhZCBsb2NraW5nIGlzIG5vdCB5ZXQgaW4gcGxhY2UuCi0uUFAKLTMpIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNyb3NzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGNvZGUgcGllY2VzIHRoYXQgbWF5IG9yIG1heSBub3QgYmUgbGlua2VkIHRvZ2V0aGVyIGluIHRoZSBsb25nIHJ1bi4gVGhpcyBwcm92aWRlcyBmb3IgYSBzaW5nbGUgbG9jYS0gdGlvbiBpbiB3aGljaCBjb25maWd1cmF0aW9uIGRhdGEsIGZvciBleGFtcGxlLCBjYW4gYmUgc3RvcmVkIGZvciBhIHNlcGFyYXRlIHNlY3Rpb24gb2YgY29kZSB0aGF0IG1heSBub3QgYmUgbGlua2VkIGluIHRvIHRoZSBhcHBsaWNhdGlvbiBpbiBxdWVzdGlvbi4KLS5QUAotVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUgaW1wbGVtZW50IHRoZXNlIGdvYWxzLgotLlBQCi1DdXJyZW50bHksIHRocmVlIGRhdGEgdHlwZXMgYXJlIHN1cHBvcnRlZDogYm9vbGVhbnMsIGludGUtIGdlcnMsIGFuZCBzdHJpbmdzLiBFYWNoIG9mIHRoZXNlIGRhdGEgdHlwZXMgaGF2ZSBzZXBhcmF0ZSBzdG9yYWdlIHNwYWNlcy4gSW4gYWRkaXRpb24sIHRoZSBzdG9yYWdlIHNwYWNlIGZvciBlYWNoIGRhdGEgdHlwZSBpcyBkaXZpZGVkIGZ1cnRoZXIgYnkgdGhlIGFwcGxpY2F0aW9uIGxldmVsLiBDdXJyZW50bHksIHRoZXJlIGFyZSB0d28gc3RvcmFnZSBzcGFjZXMuIFRoZSBmaXJzdCBpcyByZXNlcnZlZCBmb3IgdGhlIFNOTVAgbGlicmFyeSBpdHNlbGYuIFRoZSBzZWNvbmQgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBhcHBsaWNhdGlvbnMgYW5kIGlzIG5vdCBtb2RpZmllZCBvciBjaGVja2VkIGJ5IHRoZSBsaWJyYXJ5LCBhbmQsIHRoZXJlZm9yZSwgdGhpcyBpcyB0aGUgc3BhY2UgdXNhYmxlIGJ5IHlvdS4KLS5QUAotVGhlc2UgZGVmaW5pdGlvbnMgY29ycmVzcG9uZCB3aXRoIHRoZSAnc3RvcmlkJyBhcmd1bWVudCB0byB0aGUgQVBJCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJSQVJZX0lEIDAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lEIDEKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX1RPS0VOX0lEIDIKLS5QUAotLlBQCi1UaGVzZSBkZWZpbml0aW9ucyBjb3JyZXNwb25kIHdpdGggdGhlICd3aGljaCcgYXJndW1lbnQgdG8gdGhlIEFQSSwgd2hlbiB0aGUgc3RvcmVpZCBhcmd1bWVudCBpcyBORVRTTk1QX0RTX0xJQlJBUllfSUQKLS5QUAotbGlicmFyeSBib29sZWFucwotLlBQCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX0VSUk9SUyAwCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0FWRV9NSUJfREVTQ1JTIDEKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJfQ09NTUVOVF9URVJNIDIKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJfUEFSU0VfTEFCRUwgMwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VUIDQKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9MT0dfVElNRVNUQU1QIDUKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX1JFQURfQ09ORklHUyA2Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX1JFUExBQ0UgNyByZXBsYWNlIG9iamVjdHMgZnJvbSBsYXRlc3QgXGZCbW9kdWxlXGZQCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfTlVNRVJJQ19FTlVNIDggcHJpbnQgb25seSBudW1lcmljIGVudW0gdmFsdWVzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfTlVNRVJJQ19PSURTIDkgcHJpbnQgb25seSBudW1lcmljIGVudW0gdmFsdWVzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9CUkVBS0RPV05fT0lEUyAxMCBkb250IHByaW50IG9pZCBpbmRleGVzIHNwZWNpYWxseQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRyAxMSBkb24ndCB1c2UgdGhlIGFsYXJtKCkgc2lnbmFsCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfRlVMTF9PSUQgMTIgcHJpbnQgZnVsbHkgcXVhbGlmaWVkIG9pZHMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9RVUlDS19QUklOVCAxMyBwcmludCB2ZXJ5IGJyaWVmIG91dHB1dCBmb3IgcGFyc2luZwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1JBTkRPTV9BQ0NFU1MgMTQgcmFuZG9tIGFjY2VzcyB0byBvaWQgbGFiZWxzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkVHRVhfQUNDRVNTIDE1IHJlZ2V4IG1hdGNoaW5nIHRvIG9pZCBsYWJlbHMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX0NIRUNLX1JBTkdFIDE2IGRvbid0IGNoZWNrIHZhbHVlcyBmb3IgcmFuZ2VzIG9uIHNlbmQKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19UT0tFTl9XQVJOSU5HUyAxNyBubyB3YXJuIGFib3V0IHVua25vd24gY29uZmlnIHRva2VucwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX05VTUVSSUNfVElNRVRJQ0tTIDE4IHByaW50IHRpbWV0aWNrcyBhcyBhIG51bWJlcgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0VTQ0FQRV9RVU9URVMgMTkgc2hlbGwgZXNjYXBlIHF1b3RlIG1hcmtzIGluIG9pZHMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9SRVZFUlNFX0VOQ09ERSAyMCBlbmNvZGUgcGFja2V0cyBmcm9tIGJhY2sgdG8gZnJvbnQKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9CQVJFX1ZBTFVFIDIxIGp1c3QgcHJpbnQgdmFsdWUgKG5vdCBPSUQgPSB2YWx1ZSkKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9FWFRFTkRFRF9JTkRFWCAyMiBwcmludCBleHRlbmRlZCBpbmRleCBmb3JtYXQgW3gxXVt4Ml0KLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9IRVhfVEVYVCAyMyBwcmludCBBU0NJSSB0ZXh0IGFsb25nIHdpdGggaGV4IHN0cmluZ3MKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9VQ0RfU1RZTEVfT0lEIDI0IHByaW50IE9JRCdzIHVzaW5nIHRoZSBVQ0Qtc3R5bGUgcHJlZml4IHN1cHByZXNzaW9uCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkVBRF9VQ0RfU1RZTEVfT0lEIDI1IHJlcXVpcmUgdG9wLWxldmVsIE9JRHMgdG8gYmUgcHJlZml4ZWQgd2l0aCBhIGRvdAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0hBVkVfUkVBRF9QUkVNSUJfQ09ORklHIDI2IGhhdmUgdGhlIHByZS1taWIgcGFyc2luZyBjb25maWcgdG9rZW5zIGJlZW4gcHJvY2Vzc2VkCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfSEFWRV9SRUFEX0NPTkZJRyAyNyBoYXZlIHRoZSBjb25maWcgdG9rZW5zIGJlZW4gcHJvY2Vzc2VkCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUVVJQ0tFX1BSSU5UIDI4Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9QUklOVF9VTklUUyAyOSBkb24ndCBwcmludCBVTklUUyBzdWZmaXgKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19ESVNQTEFZX0hJTlQgMzAgZG9uJ3QgYXBwbHkgRElTUExBWS1ISU5UcwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCXzE2QklUX0lEUyAzMSByZXN0cmljdCByZXF1ZXN0SURzLCBldGMgdG8gMTYtYml0IHZhbHVlcwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RPTlRfUEVSU0lTVF9TVEFURSAzMiBkb24ndCBzYXZlL2xvYWQgYW55IHBlcnNpc3RhbnQgc3RhdGUKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl8yRElHSVRfSEVYX09VVFBVVCAzMyBwcmludCBhIGxlYWRpbmcgMCBvbiBoZXggdmFsdWVzIDw9ICdmJwotLlBQCi0uUFAKLWxpYnJhcnkgaW50ZWdlcnMKLS5QUAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9XQVJOSU5HUyAwCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VDTEVWRUwgMQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NOTVBWRVJTSU9OIDIKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQgMwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFUIDQKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TVFJJTkdfT1VUUFVUX0ZPUk1BVCA1Ci0uUFAKLS5QUAotbGlicmFyeSBzdHJpbmdzCi0uUFAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRUNOQU1FIDAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DT05URVhUIDEKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFIDIKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BVVRIUEFTU1BIUkFTRSAzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJVlBBU1NQSFJBU0UgNAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX09QVElPTkFMQ09ORklHIDUKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BUFBUWVBFIDYKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DT01NVU5JVFkgNwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BFUlNJU1RFTlRfRElSIDgKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DT05GSUdVUkFUSU9OX0RJUiA5Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VDTU9ERUwgMTAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJESVJTIDExCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfT0lEU1VGRklYIDEyCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfT0lEUFJFRklYIDEzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIgMTQKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9URU1QX0ZJTEVfUEFUVEVSTiAxNQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FVVEhNQVNURVJLRVkgMTYKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklWTUFTVEVSS0VZIDE3Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVVUSExPQ0FMSVpFREtFWSAxOAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSVZMT0NBTElaRURLRVkgMTkgCi0uUFAKLQotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9kc19zZXRfYm9vbGVhbiAoaW50IHN0b3JlaWQsIGludCB3aGljaCwgaW50IHZhbHVlKSIKLS5QUAotU3RvcmVzICd0cnVlJyBvciAnZmFsc2UnIGdpdmVuIGFuIGludCB2YWx1ZSBmb3IgdmFsdWUgaW50byBuZXRzbm1wX2RzX2Jvb2xlYW5zW3N0b3JlXVt3aGljaF0gc2xvdC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklzdG9yZWlkXGZQIGFuIGluZGV4IHRvIHRoZSBib29sZWFuIHN0b3JhZ2UgY29udGFpbmVyJ3MgZmlyc3QgaW5kZXgoc3RvcmUpCi0uYnIKLVxmSXdoaWNoXGZQIGFuIGluZGV4IHRvIHRoZSBib29sZWFuIHN0b3JhZ2UgY29udGFpbmVyJ3Mgc2Vjb25kIGluZGV4KHdoaWNoKQotLmJyCi1cZkl2YWx1ZVxmUCBpZiA+IDAsICd0cnVlJyBpcyBzZXQgaW50byB0aGUgc2xvdCBvdGhlcndpc2UgJ2ZhbHNlJwotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBTTk1QUEVSUl9HRU5FUlIgaWYgdGhlIHN0b3JlaWQgYW5kIHdoaWNoIHBhcmFtZXRlcnMgZG8gbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBzbG90LCBvciBTTk1QRVJSX1NVQ0NFU1Mgb3RoZXJ3aXNlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwMCBvZiBmaWxlIGRlZmF1bHRfc3RvcmUuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMyBiL21hbi9uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTRhMjNiLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLlRIICJleGFtcGxlX3NjYWxhcl9pbnQ6IGluc3RhbnRpYXRlcyBhIGZldyBleGFtcGxlIHNjYWxhcnMuIiAzICI2IE1hciAyMDAyIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1leGFtcGxlX3NjYWxhcl9pbnQgXC0gVGhpcyBleGFtcGxlIG1lcmVseSBjcmVhdGVzIHNvbWUgc2NhbGFyIHJlZ2lzdHJhdGlvbnMgdGhhdCBhbGxvd3Mgc29tZSBzaW1wbGUgdmFyaWFibGVzIHRvIGJlIGFjY2Vzc2VkIHZpYSBTTk1QLgotTW9yZS4uLgotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJpbml0X3NjYWxhcl9pbnRcZlAgKHZvaWQpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRFVEFJTEVEIERFU0NSSVBUSU9OIgotLlBQIAotVGhpcyBleGFtcGxlIG1lcmVseSBjcmVhdGVzIHNvbWUgc2NhbGFyIHJlZ2lzdHJhdGlvbnMgdGhhdCBhbGxvd3Mgc29tZSBzaW1wbGUgdmFyaWFibGVzIHRvIGJlIGFjY2Vzc2VkIHZpYSBTTk1QLgotLlBQCi1JbiBhIG1vcmUgcmVhbGlzdGljIGV4YW1wbGUsIGl0IGlzIGxpa2VseSB0aGF0IHRoZXNlIHZhcmlhYmxlcyB3b3VsZCBhbHNvIGJlIG1hbmlwdWxhdGVkIGluIG90aGVyIHdheXMgb3V0c2lkZSBvZiBTTk1QIGdldHMvc2V0cy4KLS5QUAotSWYgdGhpcyBtb2R1bGUgaXMgY29tcGlsZWQgaW50byBhbiBhZ2VudCwgeW91IHNob3VsZCBiZSBhYmxlIHRvIGlzc3VlIHNubXAgY29tbWFuZHMgdGhhdCBsb29rIHNvbWV0aGluZyBsaWtlIChhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBub3Qgc2hvd24gaW4gdGhlc2UgY29tbWFuZHMpOgotLlBQCi1zbm1wZ2V0IGxvY2FsaG9zdCBuZXRTbm1wRXhhbXBsZUludGVnZXIuMCBuZXRTbm1wRXhhbXBsZVNjYWxhcnMgPSA0MgotLlBQCi1zbm1wc2V0IGxvY2FsaG9zdCBuZXRTbm1wRXhhbXBsZUludGVnZXIuMCA9IDEyMzQgbmV0U25tcEV4YW1wbGVTY2FsYXJzID0gMTIzNAotLlBQCi1zbm1wZ2V0IGxvY2FsaG9zdCBuZXRTbm1wRXhhbXBsZUludGVnZXIuMCBuZXRTbm1wRXhhbXBsZVNjYWxhcnMgPSAxMjM0CmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9oYW5kbGVyLjMgYi9tYW4vbmV0c25tcF9oYW5kbGVyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExY2EzYTAuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfaGFuZGxlci4zCisrKyAvZGV2L251bGwKQEAgLTEsNTE1ICswLDAgQEAKLS5USCAiTmV0LVNOTVAgQWdlbnQgaGFuZGxlciBhbmQgZXh0ZW5zaWJpbGl0eSBBUEkiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1OZXQtU05NUCBBZ2VudCBoYW5kbGVyIGFuZCBleHRlbnNpYmlsaXR5IEFQSSBcLSAKLS5QUAotVGhlIGJhc2ljIHRoZW9yeSBnb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6IEluIHRoZSBwYXN0LCB3aXRoIHRoZSBvcmlnaW5hbCBtaWIgXGZCbW9kdWxlXGZQIGFwaSAod2hpY2ggZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBDTVUgU05NUCBjb2RlKSB0aGUgdW5kZXJseWluZyBtaWIgbW9kdWxlcyB3ZXJlIHBhc3NlZCB2ZXJ5IGxpdHRsZSBpbmZvcm1hdGlvbiAob25seSB0aGUgdHJ1bHkgbW9zdCBiYXNpYyBpbmZvcm1hdGlvbiBhYm91dCBhIHJlcXVlc3QpLiAgCi0KLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAiCi0uYnIKLS5SSSAiXGZJdGhlIG1pYiBoYW5kbGVyIHN0cnVjdHVyZSB0byBiZSByZWdpc3RlcmVkIFxmUCIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fc1xmUCIKLS5icgotLlJJICJcZklSb290IHJlZ2lzdHJhdGlvbiBpbmZvLiBcZlAiCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2hhbmRsZXJfYXJnc19zXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZV9zXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCdXRpbGl0eV9oYW5kbGVyc1xmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJU2ltcGxpZnkgcmVxdWVzdCBwcm9jZXNzaW5nIEEgZ3JvdXAgb2YgaGFuZGxlcnMgaW50ZW5kZWQgdG8gc2ltcGxpZnkgY2VydGFpbiBhc3BlY3RzIG9mIHByb2Nlc3NpbmcgYSByZXF1ZXN0IGZvciBhIE1JQiBvYmplY3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbGVhZl9oYW5kbGVyc1xmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUHJvY2VzcyBpbmRpdmlkdWFsIGxlYWYgb2JqZWN0cyBBIGdyb3VwIG9mIGhhbmRsZXJzIHRvIGltcGxlbWVudCBpbmRpdmlkdWFsIGxlYWYgb2JqZWN0cyBhbmQgaW5zdGFuY2VzIChib3RoIHNjYWxhciBvYmplY3RzLCBhbmQgaW5kaXZpZHVhbCBvYmplY3RzIGFuZCBpbnN0YW5jZXMgd2l0aGluIGEgdGFibGUpLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQmJhYnlfc3RlcHNcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUNhbGxzIHlvdXIgaGFuZGxlciBpbiBiYWJ5X3N0ZXBzIGZvciBzZXQgcHJvY2Vzc2luZy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJvbGRfYXBpXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklDYWxscyBtaWIgXGZCbW9kdWxlXGZQIGNvZGUgd3JpdHRlbiBpbiB0aGUgb2xkIHN0eWxlIG9mIGNvZGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCc3Rhc2hfY2FjaGVcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUF1dG9tYXRpY2FsbHkgY2FjaGVzIGRhdGEgZm9yIGNlcnRhaW4gaGFuZGxlcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZS4gXGZQIgotLmluIC0xYwotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlCX0hBTkRMRVJfQVVUT19ORVhUXGZQICAgMHgwMDAwMDAwMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFXGZQICAgMHgwMDAwMDAwMiIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JQl9IQU5ETEVSX0lOU1RBTkNFXGZQICAgMHgwMDAwMDAwNCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JQl9IQU5ETEVSX0NVU1RPTTRcZlAgICAweDEwMDAwMDAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlCX0hBTkRMRVJfQ1VTVE9NM1xmUCAgIDB4MjAwMDAwMDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSUJfSEFORExFUl9DVVNUT00yXGZQICAgMHg0MDAwMDAwMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JQl9IQU5ETEVSX0NVU1RPTTFcZlAgICAweDgwMDAwMDAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fR0VUQU5ER0VUTkVYVFxmUCAgIDB4MDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9TRVRcZlAgICAweDAyIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fR0VUQlVMS1xmUCAgIDB4MDQiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9OT1RfQ1JFQVRFXGZQICAgMHgwOCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX0JBQllfU1RFUFxmUCAgIDB4MTAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9TVEFTSFxmUCAgIDB4MjAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9ST05MWVxmUCAgIChIQU5ETEVSX0NBTl9HRVRBTkRHRVRORVhUKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX1JXUklURVxmUCAgIChIQU5ETEVSX0NBTl9HRVRBTkRHRVRORVhUIHwgSEFORExFUl9DQU5fU0VUKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX1NFVF9PTkxZXGZQICAgKEhBTkRMRVJfQ0FOX1NFVCB8IEhBTkRMRVJfQ0FOX05PVF9DUkVBVEUpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fREVGQVVMVFxmUCAgIChIQU5ETEVSX0NBTl9ST05MWSB8IEhBTkRMRVJfQ0FOX05PVF9DUkVBVEUpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCUkVRVUVTVF9JU19ERUxFR0FURURcZlAgICAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCUkVRVUVTVF9JU19OT1RfREVMRUdBVEVEXGZQICAgMCIKLS5icgotLmluIC0xYwotLlNTICJUeXBlZGVmcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCIKLS5icgotLlJJICJcZklUeXBlZGVmcyB0aGUgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQIHN0cnVjdCBpbnRvIG5ldHNubXBfbWliX2hhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zXGZQIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAiCi0uYnIKLS5SSSAiXGZJVHlwZWRlZnMgdGhlIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fc1xmUCBzdHJ1Y3QgaW50byBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uLiBcZlAiCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgaW50KCBcZkJOZXRzbm1wX05vZGVfSGFuZGxlclxmUCApKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQm5ldHNubXBfaGFuZGxlcl9hcmdzX3NcZlAgXGZCbmV0c25tcF9oYW5kbGVyX2FyZ3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVfc1xmUCBcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfY3JlYXRlX2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpoYW5kbGVyX2FjY2Vzc19tZXRob2QpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIHN0cnVjdHVyZSBnaXZlbiBhIG5hbWUgYW5kIGEgYWNjZXNzIG1ldGhvZC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGVcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgbW9kZXMpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgZ2l2ZW4gYSBuYW1lLCBhIGFjY2Vzc19tZXRob2QgZnVuY3Rpb24sIGEgcmVnaXN0cmF0aW9uIGxvY2F0aW9uIG9pZCBhbmQgdGhlIG1vZGVzIHRoZSBoYW5kbGVyIHN1cHBvcnRzLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiBcZkJuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAoY29uc3QgY2hhciAqbmFtZSwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKmhhbmRsZXJfYWNjZXNzX21ldGhvZCwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCBtb2RlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZkl1bnJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfbm9jYWxsYmFja1xmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBjb25zdCBjaGFyICpiZWZvcmVfd2hhdCkiCi0uYnIKLS5SSSAiXGZJaW5qZWN0IGEgbmV3IGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiB0aGUgaGFuZGxlcnMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luamVjdF9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyKSIKLS5icgotLlJJICJcZklpbmplY3QgYSBuZXcgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIHRoZSBoYW5kbGVycyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgaW50IFxmQm5ldHNubXBfY2FsbF9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpuZXh0X2hhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSWNhbGxzIGEgaGFuZGxlciB3aXRoIHdpdGggYXBwcm9wcmlhdGUgTlVMTCBjaGVja2luZyBvZiBhcmd1bWVudHMsIGV0Yy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jYWxsX2hhbmRsZXJzXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBpbnQgXGZCbmV0c25tcF9jYWxsX25leHRfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqY3VycmVudCwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJY2FsbHMgdGhlIG5leHQgaGFuZGxlciBpbiB0aGUgY2hhaW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIHdpdGggd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nLCBldGMuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgaW50IFxmQm5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXJfb25lX3JlcXVlc3RcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmN1cnJlbnQsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSWNhbGxzIHRoZSBuZXh0IGhhbmRsZXIgaW4gdGhlIGNoYWluIGFmdGVyIHRoZSBjdXJyZW50IG9uZSB3aXRoIHdpdGggYXBwcm9wcmlhdGUgTlVMTCBjaGVja2luZywgZXRjLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9oYW5kbGVyX2ZyZWVcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIpIgotLmJyCi0uUkkgIlxmSWZyZWVzIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gaGFuZGxlciBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2hhbmRsZXJfZHVwXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyKSIKLS5icgotLlJJICJcZklkdXBsaWNhdGVzIGEgaGFuZGxlciBhbmQgYWxsIHN1YnNlcXVlbnQgaGFuZGxlcnMgc2VlIGFsc28gX2Nsb25lX2hhbmRsZXIgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJZnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2R1cFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJZHVwbGljYXRlcyB0aGUgaGFuZGxlciByZWdpc3RyYXRpb24gb2JqZWN0IFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAgKiBcZkJuZXRzbm1wX2NyZWF0ZV9kZWxlZ2F0ZWRfY2FjaGVcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMsIHZvaWQgKmxvY2FsaW5mbykiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhIGNhY2hlIG9mIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZSBzYXZlZCBmb3IgZnV0dXJlIHJlZmVyZW5jZS4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCAqIFxmQm5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZVxmUCAoXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAgKmRjYWNoZSkiCi0uYnIKLS5SSSAiXGZJY2hlY2sncyBhIGdpdmVuIGNhY2hlIGFuZCByZXR1cm5zIGl0IGlmIGl0IGlzIHN0aWxsIHZhbGlkIChpZSwgdGhlIGFnZW50IHN0aWxsIGNvbnNpZGVycyBpdCB0byBiZSBhbiBvdXRzdGFuZGluZyByZXF1ZXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9mcmVlX2RlbGVnYXRlZF9jYWNoZVxmUCAoXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAgKmRjYWNoZSkiCi0uYnIKLS5SSSAiXGZJZnJlZXMgYSBjYWNoZSBvbmNlIHlvdSdyZSBmaW5pc2hlZCB1c2luZyBpdCBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMsIGludCBpc2RlbGVnYXRlZCkiCi0uYnIKLS5SSSAiXGZJbWFya3MgYSBsaXN0IG9mIHJlcXVlc3RzIGFzIGRlbGVnYXRlZCAob3Igbm90IGlmIGlzZGVsZWdhZGVkID0gMCkgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKlxmQm5vZGVcZlApIgotLmJyCi0uUkkgIlxmSWFkZCBkYXRhIHRvIGEgcmVxdWVzdCB0aGF0IGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgYnkgc3VibW9kdWxlcyBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIGludCBcZkJuZXRzbm1wX3JlcXVlc3RfcmVtb3ZlX2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSXJlbW92ZSBkYXRhIGZyb20gYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdCBkYXRhIGZyb20gYSByZXF1ZXN0IHRoYXQgd2FzIGFkZGVkIHByZXZpb3VzbHkgYnkgYSBwYXJlbnQgXGZCbW9kdWxlXGZQIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSUZyZWUgdGhlIGV4dHJhIGRhdGEgc3RvcmVkIGluIGEgcmVxdWVzdC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0c1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSUZyZWUgdGhlIGV4dHJhIGRhdGEgc3RvcmVkIGluIGEgYnVuY2ggb2YgcmVxdWVzdHMgKGFsbCBkYXRhIGluIHRoZSBjaGFpbikuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZmluZF9oYW5kbGVyX2J5X25hbWVcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSVJldHVybnMgYSBoYW5kbGVyIGZyb20gYSBjaGFpbiBiYXNlZCBvbiB0aGUgbmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9maW5kX2hhbmRsZXJfZGF0YV9ieV9uYW1lXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklSZXR1cm5zIGEgaGFuZGxlcidzIHZvaWQgKiBwb2ludGVyIGZyb20gYSBjaGFpbiBiYXNlZCBvbiB0aGUgbmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmhhbmRsZXJfZnJlZV9jYWxsYmFja1xmUCAodm9pZCAqaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfYnlfbmFtZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlcikiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXJzIGEgZ2l2ZW4gaGFuZGxlciBieSBuYW1lIHNvIHRoYXQgaXQgY2FuIGJlIGZvdW5kIGVhc2lseSBsYXRlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY2xlYXJfaGFuZGxlcl9saXN0XGZQICh2b2lkKSIKLS5icgotLlJJICJcZkljbGVhcnMgdGhlIGVudGlyZSBoYW5kbGVyLXJlZ2lzdHJhdGlvbiBsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luamVjdF9oYW5kbGVyX2ludG9fc3VidHJlZVxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICp0cCwgY29uc3QgY2hhciAqbmFtZSwgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgY29uc3QgY2hhciAqYmVmb3JlX3doYXQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcGFyc2VfaW5qZWN0SGFuZGxlcl9jb25mXGZQIChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfaGFuZGxlcl9jb25mXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9oYW5kbGVyX2dldF9wYXJlbnRfZGF0YVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiwgY29uc3QgY2hhciAqKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSBiYXNpYyB0aGVvcnkgZ29lcyBzb21ldGhpbmcgbGlrZSB0aGlzOiBJbiB0aGUgcGFzdCwgd2l0aCB0aGUgb3JpZ2luYWwgbWliIFxmQm1vZHVsZVxmUCBhcGkgKHdoaWNoIGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgQ01VIFNOTVAgY29kZSkgdGhlIHVuZGVybHlpbmcgbWliIG1vZHVsZXMgd2VyZSBwYXNzZWQgdmVyeSBsaXR0bGUgaW5mb3JtYXRpb24gKG9ubHkgdGhlIHRydWx5IG1vc3QgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgYSByZXF1ZXN0KS4gCi0KLVRoaXMgd29ya2VkIHdlbGwgYXQgdGhlIHRpbWUgYnV0IGluIHRvZGF5cyB3b3JsZCBvZiBzdWJhZ2VudHMsIGRldmljZSBpbnN0cnVtZW50YXRpb24sIGxvdyByZXNvdXJjZSBjb25zdW1wdGlvbiwgZXRjLCBpdCBqdXN0IGlzbid0IGZsZXhpYmxlIGVub3VnaC4gJ2hhbmRsZXJzJyBhcmUgaGVyZSB0byBmaXggYWxsIHRoYXQuCi0uUFAKLVdpdGggdGhlIHJld3JpdGUgb2YgdGhlIGFnZW50IGludGVybmFscyBmb3IgdGhlIG5ldC1zbm1wIDUuMCByZWxlYXNlLCB3ZSBpbnRyb2R1Y2UgYSBtb2R1bGFyIGNhbGxpbmcgc2NoZW1lIHRoYXQgYWxsb3dzIGFnZW50IG1vZHVsZXMgdG8gYmUgd3JpdHRlbiBpbiBhIHZlcnkgZmxleGlibGUgbWFubmVyLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBhbGxvd3MgcmV1c2Ugb2YgY29kZSBpbiBhIGRlY2VudCB3YXkgKGFuZCB3aXRob3V0IHRoZSBtZW1vcnkgYW5kIHNwZWVkIG92ZXJoZWFkcyBvZiBPTyBsYW5ndWFnZXMgbGlrZSBDKyspLgotLlBQCi1GdW5jdGlvbmFsbHksIHRoZSBub3Rpb24gb2Ygd2hhdCBhIGhhbmRsZXIgZG9lcyBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkZXIgYXBpOiBBIGhhbmRsZXIgaXMgXGZCY3JlYXRlZFxmUCBhbmQgdGhlbiBcZkJyZWdpc3RlcmVkXGZQIHdpdGggdGhlIG1haW4gYWdlbnQgYXQgYSBnaXZlbiBPSUQgaW4gdGhlIE9JRCBcZkJ0cmVlXGZQIGFuZCBnZXRzIGNhbGxlZCBhbnkgdGltZSBhIHJlcXVlc3QgaXMgbWFkZSB0aGF0IGl0IHNob3VsZCByZXNwb25kIHRvLiBZb3UgcHJvYmFibHkgc2hvdWxkIHVzZSBvbmUgb2YgdGhlIGNvbnZlbmllbmNlIGhlbHBlcnMgaW5zdGVhZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlIHlvdXJzZWxmIHRob3VnaDoKLS5QUAotTW9zdCBpbXBvcnRhbnRseSwgdGhvdWdoLCBpcyB0aGF0IHRoZSBoYW5kbGVycyBhcmUgYnVpbHQgb24gdGhlIG5vdGlvbiBvZiBtb2R1bGFyaXR5IGFuZCByZXVzZS4gU3BlY2lmaWNhbGx5LCByYXRoZXIgdGhhbiBkbyBhbGwgdGhlIHJlYWxseSBoYXJkIHdvcmsgKGxpa2UgcGFyc2luZyB0YWJsZSBpbmRleGVzIG91dCBvZiBhbiBpbmNvbWluZyBvaWQgcmVxdWVzdCkgaW4gZWFjaCBcZkJtb2R1bGVcZlAsIHRoZSBBUEkgaXMgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXN5IHRvIHdyaXRlICdoZWxwZXInIGhhbmRsZXJzIHRoYXQgbWVyZWx5IHByb2Nlc3Mgc29tZSBhc3BlY3Qgb2YgdGhlIHJlcXVlc3QgYmVmb3JlIHBhc3NpbmcgaXQgYWxvbmcgdG8gdGhlIGZpbmFsIGhhbmRsZXIgdGhhdCByZXR1cm5zIHRoZSByZWFsIGFuc3dlci4gTW9zdCBwZW9wbGUgd2lsbCB3YW50IHRvIG1ha2UgdXNlIG9mIHRoZSBcZkJpbnN0YW5jZVxmUCwgXGZCdGFibGVcZlAsIFxmQnRhYmxlX2l0ZXJhdG9yXGZQLCBcZkJ0YWJsZV9kYXRhXGZQLCBvciBcZkJ0YWJsZV9kYXRhc2V0XGZQIGhlbHBlcnMgdG8gbWFrZSB0aGVpciBsaWZlIGVhc2llci4gVGhlc2UgJ2hlbHBlcnMnIGludGVycGVydCBpbXBvcnRhbnQgYXNwZWN0cyBvZiB0aGUgcmVxdWVzdCBhbmQgcGFzcyB0aGVtIG9uIHRvIHlvdS4KLS5QUAotRm9yIGluc3RhbmNlLCB0aGUgXGZCdGFibGVcZlAgaGVscGVyIGlzIGRlc2lnbmVkIHRvIGhhbmQgeW91IGEgbGlzdCBvZiBleHRyYWN0ZWQgaW5kZXggdmFsdWVzIGZyb20gYW4gaW5jb21pbmcgcmVxdWVzdC4gVEhlIFxmQnRhYmxlX2l0ZXJhdG9yXGZQIGhlbHBlciBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIHRhYmxlIGhlbHBlciwgYW5kIGlzIGRlc2lnbmVkIHRvIGhlbHAgeW91IGl0ZXJhdGUgdGhyb3VnaCBkYXRhIHN0b3JlZCBlbHNld2hlcmUgKGxpa2UgaW4gYSBrZXJuZWwpIHRoYXQgaXMgbm90IGluIE9JRCBsZXhvZ3JhcGhpY2FsIG9yZGVyIChpZSwgZG9uJ3Qgd3JpdGUgeW91ciBvd24gaW5kZXgvb2lkIHNvcnRpbmcgcm91dGluZSwgdXNlIHRoaXMgaGVscGVyIGluc3RlYWQpLiBUaGUgYmVhdXR5IG9mIHRoZSBcZkJ0YWJsZV9pdGVyYXRvciBoZWxwZXJcZlAsIGFzIHdlbGwgYXMgdGhlIFxmQmluc3RhbmNlXGZQIGhlbHBlciBpcyB0aGF0IHRoZXkgdGFrZSBjYXJlIG9mIHRoZSBjb21wbGV4IEdFVE5FWFQgcHJvY2Vzc2luZyBlbnRpcmVseSBmb3IgeW91IGFuZCBoYW5kIHlvdSBldmVyeXRoaW5nIHlvdSBuZWVkIHRvIG1lcmVseSByZXR1cm4gdGhlIGRhdGEgYXMgaWYgaXQgd2FzIGEgR0VUIHJlcXVlc3QuIE11Y2ggbGVzcyBjb2RlIGFuZCBoYWlyIHB1bGxpbmcuIEkndmUgcHVsbGVkIGFsbCBteSBoYWlyIG91dCB0byBoZWxwIHlvdSBzbyB0aGF0IG9ubHkgb25lIG9mIHVzIGhhcyB0byBiZSBiYWxkLiAKLS5TSCAiVHlwZWRlZiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJzdHJ1Y3QgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zXGZQIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAiCi0uUFAKLVR5cGVkZWZzIHRoZSBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3NcZlAgc3RydWN0IGludG8gbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbi4gCi0uU1MgInN0cnVjdCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCIKLS5QUAotVHlwZWRlZnMgdGhlIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCBzdHJ1Y3QgaW50byBuZXRzbm1wX21pYl9oYW5kbGVyLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfY2FsbF9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogbmV4dF9oYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotY2FsbHMgYSBoYW5kbGVyIHdpdGggd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nIG9mIGFyZ3VtZW50cywgZXRjLiAKLS5TUyAiaW50IG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBjdXJyZW50LCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotY2FsbHMgdGhlIG5leHQgaGFuZGxlciBpbiB0aGUgY2hhaW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIHdpdGggd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nLCBldGMuIAotLlNTICJpbnQgbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcl9vbmVfcmVxdWVzdCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGN1cnJlbnQsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1jYWxscyB0aGUgbmV4dCBoYW5kbGVyIGluIHRoZSBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBvbmUgd2l0aCB3aXRoIGFwcHJvcHJpYXRlIE5VTEwgY2hlY2tpbmcsIGV0Yy4gCi0uU1MgInZvaWQgbmV0c25tcF9jbGVhcl9oYW5kbGVyX2xpc3QgKHZvaWQpIgotLlBQCi1jbGVhcnMgdGhlIGVudGlyZSBoYW5kbGVyLXJlZ2lzdHJhdGlvbiBsaXN0IAotLlNTICJcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCAqIG5ldHNubXBfY3JlYXRlX2RlbGVnYXRlZF9jYWNoZSAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMsIHZvaWQgKiBsb2NhbGluZm8pIgotLlBQCi1jcmVhdGVzIGEgY2FjaGUgb2YgaW5mb3JtYXRpb24gd2hpY2ggY2FuIGJlIHNhdmVkIGZvciBmdXR1cmUgcmVmZXJlbmNlLiBVc2UgXGZCbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlKClcZlAgbGF0ZXIgdG8gbWFrZSBzdXJlIGl0J3Mgc3RpbGwgdmFsaWQgYmVmb3JlIHJlZmVyZW5jaW5nIGl0IGluIHRoZSBmdXR1cmUuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyIChjb25zdCBjaGFyICogbmFtZSwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBoYW5kbGVyX2FjY2Vzc19tZXRob2QpIgotLlBQCi1jcmVhdGVzIGEgbmV0c25tcF9taWJfaGFuZGxlciBzdHJ1Y3R1cmUgZ2l2ZW4gYSBuYW1lIGFuZCBhIGFjY2VzcyBtZXRob2QuIFRoZSByZXR1cm5lZCBoYW5kbGVyIHNob3VsZCB0aGVuIGJlIFxmQnJlZ2lzdGVyZWQuXGZQCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbmFtZVxmUCBpcyB0aGUgaGFuZGxlciBuYW1lIGFuZCBpcyBjb3BpZWQgdGhlbiBhc3NpZ25lZCB0byBuZXRzbm1wX21pYl9oYW5kbGVyLT5oYW5kbGVyX25hbWUKLS5icgotXGZJaGFuZGxlcl9hY2Nlc3NfbWV0aG9kXGZQIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB1c2VkIGFzIHRoZSBhY2Nlc3MgbWV0aG9kIGZvciB0aGlzIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGluc3RhbmNlIGZvciB3aGF0ZXZlciByZXF1aXJlZCBuZWVkcy4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWEgcG9pbnRlciB0byBhIHBvcHVsYXRlZCBuZXRzbm1wX21pYl9oYW5kbGVyIHN0cnVjdCB0byBiZSByZWdpc3RlcmVkCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oKSAKLS5QUAotXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgCi0uUkUKLS5QUAotCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9ieV9uYW1lIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1SZXR1cm5zIGEgaGFuZGxlciBmcm9tIGEgY2hhaW4gYmFzZWQgb24gdGhlIG5hbWUuIAotLlNTICJ2b2lkICogbmV0c25tcF9maW5kX2hhbmRsZXJfZGF0YV9ieV9uYW1lIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1SZXR1cm5zIGEgaGFuZGxlcidzIHZvaWQgKiBwb2ludGVyIGZyb20gYSBjaGFpbiBiYXNlZCBvbiB0aGUgbmFtZS4gVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNlZCBieSB0aGUgZ2VuZXJhbCBwdWJsaWMgYXMgdGhlIHZvaWQgKiBkYXRhIG1heSBjaGFuZ2UgYXMgYSBoYW5kbGVyIGV2b2x2ZXMuIEhhbmRsZXJzIHNob3VsZCByZWFsbHkgYWR2ZXJ0aXNlIHNvbWUgZnVuY3Rpb24gZm9yIHlvdSB0byB1c2UgaW5zdGVhZC4gCi0uU1MgInZvaWQgbmV0c25tcF9mcmVlX2RlbGVnYXRlZF9jYWNoZSAoXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAgKiBkY2FjaGUpIgotLlBQCi1mcmVlcyBhIGNhY2hlIG9uY2UgeW91J3JlIGZpbmlzaGVkIHVzaW5nIGl0IAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uU1MgInZvaWQgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXQgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLUZyZWUgdGhlIGV4dHJhIGRhdGEgc3RvcmVkIGluIGEgcmVxdWVzdC4gCi0uU1MgInZvaWQgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1GcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIGJ1bmNoIG9mIHJlcXVlc3RzIChhbGwgZGF0YSBpbiB0aGUgY2hhaW4pLiAKLS5TUyAiXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAgKiBuZXRzbm1wX2hhbmRsZXJfY2hlY2tfY2FjaGUgKFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQICogZGNhY2hlKSIKLS5QUAotY2hlY2sncyBhIGdpdmVuIGNhY2hlIGFuZCByZXR1cm5zIGl0IGlmIGl0IGlzIHN0aWxsIHZhbGlkIChpZSwgdGhlIGFnZW50IHN0aWxsIGNvbnNpZGVycyBpdCB0byBiZSBhbiBvdXRzdGFuZGluZyByZXF1ZXN0LiBSZXR1cm5zIE5VTEwgaWYgaXQncyBubyBsb25nZXIgdmFsaWQuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBuZXRzbm1wX2hhbmRsZXJfZHVwIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlcikiCi0uUFAKLWR1cGxpY2F0ZXMgYSBoYW5kbGVyIGFuZCBhbGwgc3Vic2VxdWVudCBoYW5kbGVycyBzZWUgYWxzbyBfY2xvbmVfaGFuZGxlciAKLS5TUyAidm9pZCBuZXRzbm1wX2hhbmRsZXJfZnJlZSAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIpIgotLlBQCi1mcmVlcyB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGhhbmRsZXIgCi0uUFAKLW1ha2Ugc3VyZSB3ZSBhcmVuJ3QgcG9pbnRpbmcgdG8gb3Vyc2VsdmVzLiAKLS5TUyAidm9pZCBuZXRzbm1wX2hhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWQgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMsIGludCBpc2RlbGVnYXRlZCkiCi0uUFAKLW1hcmtzIGEgbGlzdCBvZiByZXF1ZXN0cyBhcyBkZWxlZ2F0ZWQgKG9yIG5vdCBpZiBpc2RlbGVnYWRlZCA9IDApIAotLlNTICJcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUgKGNvbnN0IGNoYXIgKiBuYW1lLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgbW9kZXMpIgotLlBQCi1jcmVhdGVzIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIGdpdmVuIGEgbmFtZSwgYSBhY2Nlc3NfbWV0aG9kIGZ1bmN0aW9uLCBhIHJlZ2lzdHJhdGlvbiBsb2NhdGlvbiBvaWQgYW5kIHRoZSBtb2RlcyB0aGUgaGFuZGxlciBzdXBwb3J0cy4gSWYgbW9kZXMgPT0gMCwgdGhlbiBtb2RlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlIG9mIG9ubHkgSEFORExFUl9DQU5fREVGQVVMVCwgd2hpY2ggaXMgYnkgZGVmYXVsdCByZWFkLW9ubHkgR0VUIGFuZCBHRVRORVhUIHJlcXVlc3RzLiBBIGhhbmRlciB3aGljaCBzdXBwb3J0cyBzZXRzIGJ1dCBub3Qgcm93IGNyZWF0aW9uIHNob3VsZCBzZXQgdXMgYSBtb2RlIG9mIEhBTkRMRVJfQ0FOX1NFVF9PTkxZLiAKLS5QUAotXGZCTm90ZTpcZlAKLS5SUyA0Ci1UaGlzIGVuZHMgdXAgY2FsbGluZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKG5hbWUsIGhhbmRsZXJfYWNjZXNzX21ldGhvZCkgCi0uUkUKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkluYW1lXGZQIGlzIHRoZSBoYW5kbGVyIG5hbWUgYW5kIGlzIGNvcGllZCB0aGVuIGFzc2lnbmVkIHRvIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24tPmhhbmRsZXJOYW1lLgotLmJyCi1cZkloYW5kbGVyXGZQIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB1c2VkIGFzIHRoZSBhY2Nlc3MgbWV0aG9kIGZvciB0aGlzIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGluc3RhbmNlIGZvciB3aGF0ZXZlciByZXF1aXJlZCBuZWVkcy4KLS5icgotXGZJcmVnX29pZFxmUCBpcyB0aGUgcmVnaXN0cmF0aW9uIGxvY2F0aW9uIG9pZC4KLS5icgotXGZJcmVnX29pZF9sZW5cZlAgaXMgdGhlIGxlbmd0aCBvZiByZWdfb2lkLCBjYW4gdXNlIHRoZSBtYWNybywgT0lEX0xFTkdUSAotLmJyCi1cZkltb2Rlc1xmUCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSByZWFkL3dyaXRlIGFjY2Vzcy4gSWYgbW9kZXMgPT0gMCwgdGhlbiBtb2RlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlIG9mIG9ubHkgSEFORExFUl9DQU5fREVGQVVMVCwgd2hpY2ggaXMgYnkgZGVmYXVsdCByZWFkLW9ubHkgR0VUIGFuZCBHRVRORVhUIHJlcXVlc3RzLiBUaGUgb3RoZXIgdHdvIG1vZGUgb3B0aW9ucyBhcmUgcmVhZCBvbmx5LCBIQU5ETEVSX0NBTl9ST05MWSwgYW5kIHJlYWQvd3JpdGUsIEhBTkRMRVJfQ0FOX1JXUklURS4KLS5SRQotLlBQCi0uSVAgIlwoYnUiIDIKLUhBTkRMRVJfQ0FOX0dFVEFOREdFVE5FWFQKLS5JUCAiXChidSIgMgotSEFORExFUl9DQU5fU0VUCi0uSVAgIlwoYnUiIDIKLUhBTkRMRVJfQ0FOX0dFVEJVTEsKLS5QUAotLlBQCi0uSVAgIlwoYnUiIDIKLUhBTkRMRVJfQ0FOX1JPTkxZIChIQU5ETEVSX0NBTl9HRVRBTkRHRVRORVhUKQotLklQICJcKGJ1IiAyCi1IQU5ETEVSX0NBTl9SV1JJVEUgKEhBTkRMRVJfQ0FOX0dFVEFOREdFVE5FWFQgfCBIQU5ETEVSX0NBTl9TRVQpCi0uSVAgIlwoYnUiIDIKLUhBTkRMRVJfQ0FOX0RFRkFVTFQgSEFORExFUl9DQU5fUk9OTFkKLS5QUAotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QuIE5VTEwgaXMgcmV0dXJuZWQgb25seSB3aGVuIG1lbW9yeSBjb3VsZCBub3QgYmUgYWxsb2NhdGVkIGZvciB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QuCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCbmV0c25tcF9jcmVhdGVfaGFuZGxlcigpXGZQIAotLlBQCi1cZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCAKLS5SRQotLlBQCi0KLS5TUyAiXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZHVwIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLWR1cGxpY2F0ZXMgdGhlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCAKLS5TUyAidm9pZCBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotZnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCAKLS5TUyAiaW50IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlcikiCi0uUFAKLWluamVjdCBhIG5ldyBoYW5kbGVyIGludG8gdGhlIGNhbGxpbmcgY2hhaW4gb2YgdGhlIGhhbmRsZXJzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gVGhlIG5ldyBoYW5kbGVyIGlzIGluamVjdGVkIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QgYW5kIGhlbmNlIHdpbGwgYmUgdGhlIG5ldyBoYW5kbGVyIHRvIGJlIGNhbGxlZCBmaXJzdC4gCi0uU1MgImludCBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBjb25zdCBjaGFyICogYmVmb3JlX3doYXQpIgotLlBQCi1pbmplY3QgYSBuZXcgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIHRoZSBoYW5kbGVycyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIFRoZSBuZXcgaGFuZGxlciBpcyBpbmplY3RlZCBhZnRlciB0aGUgYmVmb3JlX3doYXQgaGFuZGxlciwgb3IgaWYgTlVMTCBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0IGFuZCBoZW5jZSB3aWxsIGJlIHRoZSBuZXcgaGFuZGxlciB0byBiZSBjYWxsZWQgZmlyc3QuIAotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLXJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiAKLS5TUyAidm9pZCBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfYnlfbmFtZSAoY29uc3QgY2hhciAqIG5hbWUsIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyKSIKLS5QUAotcmVnaXN0ZXJzIGEgZ2l2ZW4gaGFuZGxlciBieSBuYW1lIHNvIHRoYXQgaXQgY2FuIGJlIGZvdW5kIGVhc2lseSBsYXRlci4gCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfbm9jYWxsYmFjayAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1yZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gCi0uU1MgInZvaWQgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBub2RlKSIKLS5QUAotYWRkIGRhdGEgdG8gYSByZXF1ZXN0IHRoYXQgY2FuIGJlIGV4dHJhY3RlZCBsYXRlciBieSBzdWJtb2R1bGVzIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxdWVzdFxmUCB0aGUgbmV0c25tcCByZXF1ZXN0IGluZm8gc3RydWN0dXJlCi0uYnIKLVxmSVxmQm5vZGVcZlBcZlAgdGhpcyBpcyB0aGUgZGF0YSB0byBiZSBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QgcmVxdWVzdC0+cGFyZW50X2RhdGEKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXZvaWQgCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5TUyAidm9pZCAqIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotZXh0cmFjdCBkYXRhIGZyb20gYSByZXF1ZXN0IHRoYXQgd2FzIGFkZGVkIHByZXZpb3VzbHkgYnkgYSBwYXJlbnQgXGZCbW9kdWxlXGZQIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxdWVzdFxmUCB0aGUgbmV0c25tcCByZXF1ZXN0IGluZm8gZnVuY3Rpb24KLS5icgotXGZJbmFtZVxmUCB1c2VkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgcmVxdWVzdC0+cGFyZW50X2RhdGEtPm5hbWUgdmFsdWUsIGlmIGEgbWF0Y2ggaXMgZm91bmQgcmVxdWVzdC0+cGFyZW50X2RhdGEtPmRhdGEgaXMgcmV0dXJuZWQKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWEgdm9pZCBwb2ludGVyKHJlcXVlc3QtPnBhcmVudF9kYXRhLT5kYXRhKSwgb3RoZXJ3aXNlIE5VTEwgaXMgcmV0dXJuZWQgaWYgcmVxdWVzdCBpcyBOVUxMIG9yIHJlcXVlc3QtPnBhcmVudF9kYXRhIGlzIE5VTEwgb3IgcmVxdWVzdC0+cGFyZW50X2RhdGEgb2JqZWN0IGlzIG5vdCBmb3VuZC4gCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5TUyAiaW50IG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotcmVtb3ZlIGRhdGEgZnJvbSBhIHJlcXVlc3QgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXF1ZXN0XGZQIHRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUKLS5icgotXGZJbmFtZVxmUCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBwcmV2aW91c2x5IGFkZGVkIGRhdGEKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgb24gc3VjY2Vzc2Z1bCBmaW5kLWFuZC1kZWxldGUsIDEgb3RoZXJ3aXNlLiAKLS5SRQotLlBQCi0KLS5TUyAiaW50IG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLXVucmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIAotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2luc3RhbmNlLjMgYi9tYW4vbmV0c25tcF9pbnN0YW5jZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzg3NzI1Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2luc3RhbmNlLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLlRIICJpbnN0YW5jZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWluc3RhbmNlIFwtIAotLlBQCi1Qcm9jZXNzIGluZGl2aWR1YWwgTUlCIGluc3RhbmNlcyBlYXNpbHkuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X2luc3RhbmNlX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZXMgYW4gaW5zdGFuY2UgaGVscGVyIGhhbmRsZXIsIGNhbGxzIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIsIHdoaWNoIHRoZW4gY291bGQgYmUgcmVnaXN0ZXJlZCwgdXNpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2VcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGFuIGluc3RhbmNlIGhlbHBlciBoYW5kbGVyLCB3aGljaCBpcyBhIHdheSBvZiByZWdpc3RlcmluZyBhbiBleGFjdCBPSUQgc3VjaCB0aGF0IEdFTkVYVCByZXF1ZXN0cyBhcmUgaGFuZGxlZCBlbnRpcmVseSBieSB0aGUgaGVscGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiBpbmplY3RzIGEgJ3JlYWQgb25seScgaGFuZGxlciBpbnRvIHRoZSBoYW5kbGVyIGNoYWluIHByaW9yIHRvIHNlcmlhbGl6aW5nL3JlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9sb25nX2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWludF9pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVuc2lnbmVkIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl91aW50X2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdW5zaWduZWQgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX2luc3RhbmNlX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2VfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2VfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGxvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2VfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGxvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2ludF9pbnN0YW5jZV9jb250ZXh0XGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgY2hhciAqZmlsZV9uYW1lLCBpbnQgYXNuX3R5cGUsIGludCBtb2RlLCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2ludF9pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbiBpbnQgaGVscGVyIGhhbmRsZXIgdG8gYSBzcGVjaWZpZWQgT0lELiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luc3RhbmNlX3Vsb25nX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luc3RhbmNlX2NvdW50ZXIzMl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbnN0YW5jZV9udW1fZmlsZV9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbnN0YW5jZV91aW50X2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luc3RhbmNlX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVByb2Nlc3MgaW5kaXZpZHVhbCBNSUIgaW5zdGFuY2VzIGVhc2lseS4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X2luc3RhbmNlX2hhbmRsZXIgKHZvaWQpIgotLlBQCi1DcmVhdGVzIGFuIGluc3RhbmNlIGhlbHBlciBoYW5kbGVyLCBjYWxscyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyLCB3aGljaCB0aGVuIGNvdWxkIGJlIHJlZ2lzdGVyZWQsIHVzaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQLiBcZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9taWJfaGFuZGxlciBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIGhhbmRsZXIncyBuYW1lIGFuZCB0aGUgYWNjZXNzIG1ldGhvZCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ4IG9mIGZpbGUgaW5zdGFuY2UuYy4KLS5TUyAiaW50IG5ldHNubXBfaW5zdGFuY2VfbnVtX2ZpbGVfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1mYWxsIHRocm91Z2ggCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NDIgb2YgZmlsZSBpbnN0YW5jZS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1UaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbiBpbnN0YW5jZSBoZWxwZXIgaGFuZGxlciwgd2hpY2ggaXMgYSB3YXkgb2YgcmVnaXN0ZXJpbmcgYW4gZXhhY3QgT0lEIHN1Y2ggdGhhdCBHRU5FWFQgcmVxdWVzdHMgYXJlIGhhbmRsZWQgZW50aXJlbHkgYnkgdGhlIGhlbHBlci4gRmlyc3QgbmVlZCB0byBpbmplY3QgaXQgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiB0aGUgaGFuZGxlciBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdCwgcmVnaW5mby4gVGhlIG5ldyBoYW5kbGVyIGlzIGluamVjdGVkIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QgYW5kIHdpbGwgYmUgdGhlIG5ldyBoYW5kbGVyIHRvIGJlIGNhbGxlZCBmaXJzdC4gVGhpcyBmdW5jdGlvbiBhbHNvIGluamVjdHMgYSBzZXJpYWxpemUgaGFuZGxlciBiZWZvcmUgYWN0dWFsbHkgY2FsbGluZyBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZSwgcmVnaXN0ZXJpbmcgcmVnaW5mby4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZWdpbmZvXGZQIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIHdoaWNoIGNvdWxkIGdldCBjcmVhdGVkIHVzaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uLiBVc2VkIHRvIHJlZ2lzdGVyIGFuIGluc3RhbmNlIGhlbHBlciBoYW5kbGVyLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotTUlCX1JFR0lTVEVSRURfT0sgaXMgcmV0dXJuZWQgaWYgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgYSBzdWNjZXNzLiBGYWlsdXJlcyBhcmUgTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQgYW5kIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLiAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzMgb2YgZmlsZSBpbnN0YW5jZS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2UgKGNvbnN0IGNoYXIgKiBuYW1lLCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqIGl0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpIgotLlBQCi1UaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbiBpbnQgaGVscGVyIGhhbmRsZXIgdG8gYSBzcGVjaWZpZWQgT0lELiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW5hbWVcZlAgdGhlIG5hbWUgdXNlZCBmb3IgcmVnaXN0cmF0aW9uIHBydXBvc2VzLgotLmJyCi1cZklyZWdfb2lkXGZQIHRoZSBPSUQgd2hlcmUgeW91IHdhbnQgdG8gcmVnaXN0ZXIgeW91ciBpbnRlZ2VyIGF0Ci0uYnIKLVxmSXJlZ19vaWRfbGVuXGZQIHRoZSBsZW5ndGggb2YgdGhlIE9JRAotLmJyCi1cZklpdFxmUCB0aGUgaW50ZWdlciB2YWx1ZSB0byBiZSByZWdpc3RlcmVkIGR1cmluZyBpbml0aWFsaXphdGlvbgotLmJyCi1cZklzdWJoYW5kbGVyXGZQIGEgaGFuZGxlciB0byBkbyB3aGF0ZXZlciB5b3Ugd2FudCB0byBkbywgb3RoZXJ3aXNlIHVzZSBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBpbnQgaGFuZGxlci4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLU1JQl9SRUdJU1RFUkVEX09LIGlzIHJldHVybmVkIGlmIHRoZSByZWdpc3RyYXRpb24gd2FzIGEgc3VjY2Vzcy4gRmFpbHVyZXMgYXJlIE1JQl9SRUdJU1RSQVRJT05fRkFJTEVEIGFuZCBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTi4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NjEgb2YgZmlsZSBpbnN0YW5jZS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotVGhpcyBmdW5jdGlvbiBpbmplY3RzIGEgJ3JlYWQgb25seScgaGFuZGxlciBpbnRvIHRoZSBoYW5kbGVyIGNoYWluIHByaW9yIHRvIHNlcmlhbGl6aW5nL3JlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyLiBUaGUgb25seSBwdXJwb3NlIG9mIHRoaXMgJ3JlYWQgb25seScgaGFuZGxlciBpcyB0byByZXR1cm4gYW4gYXBwcm9wcmlhdGUgZXJyb3IgZm9yIGFueSByZXF1ZXN0cyBwYXNzZWQgdG8gaXQgaW4gYSBTRVQgbW9kZS4gSW5zZXJ0aW5nIGl0IGludG8geW91ciBoYW5kbGVyIGNoYWluIHdpbGwgZW5zdXJlIHlvdSdyZSBuZXZlciBhc2tlZCB0byBwZXJmb3JtIGEgU0VUIHJlcXVlc3Qgc28geW91IGNhbiBpZ25vcmUgdGhvc2UgZXJyb3IgY29uZGl0aW9ucy4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZWdpbmZvXGZQIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIHdoaWNoIGNvdWxkIGdldCBjcmVhdGVkIHVzaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uLiBVc2VkIHRvIHJlZ2lzdGVyIGEgcmVhZCBvbmx5IGluc3RhbmNlIGhlbHBlciBoYW5kbGVyLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotTUlCX1JFR0lTVEVSRURfT0sgaXMgcmV0dXJuZWQgaWYgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgYSBzdWNjZXNzLiBGYWlsdXJlcyBhcmUgTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQgYW5kIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwMCBvZiBmaWxlIGluc3RhbmNlLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMgYi9tYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMwYmNjMC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS5USCAiaXRlcmF0b3JfaW5mb19zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotaXRlcmF0b3JfaW5mb19zIFwtIAotLlBQCi1Ib2xkcyBpdGVyYXRvciBpbmZvcm1hdGlvbiBjb250YWluaW5nIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBpdGVyYXRvcl9oYW5kbGVyIHRvIGxvb3Agb3ZlciB5b3VyIGRhdGEgc2V0IGFuZCBzb3J0IGl0IGluIGEgU05NUCBzcGVjaWZpYyBtYW5uZXIuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCBcZkJjXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfTG9vcF9LZXkgKiBcZkJnZXRfZmlyc3RcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9Mb29wX0tleSAqIFxmQmdldF9uZXh0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfTG9vcF9EYXRhICogXGZCZ2V0X2RhdGFcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9EYXRhICogXGZCZnJlZV91c2VyX2N0eFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0N0eCAqIFxmQmluaXRfbG9vcF9jdHhcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9DdHggKiBcZkJjbGVhbnVwX2xvb3BfY3R4XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfQ3R4X0R1cCAqIFxmQnNhdmVfcG9zXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfRGF0YSAqIFxmQnJlbGVhc2VfZGF0YVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0RhdGEgKiBcZkJpbnNlcnRfZGF0YVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0RhdGEgKiBcZkJyZW1vdmVfZGF0YVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX09wICogXGZCZ2V0X3NpemVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNvcnRlZFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCdXNlcl9jdHhcZlAiCi0uYnIKLS5SSSAiXGZJVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnQgaGFuZGxlcnMgdG8gc3RvcmUgYW55IGluZm9ybWF0aW9uIHRoZXkgbmVlZC4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUhvbGRzIGl0ZXJhdG9yIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIGl0ZXJhdG9yX2hhbmRsZXIgdG8gbG9vcCBvdmVyIHlvdXIgZGF0YSBzZXQgYW5kIHNvcnQgaXQgaW4gYSBTTk1QIHNwZWNpZmljIG1hbm5lci4gCi0KLVRoZSBpdGVyYXRvcl9pbmZvIHR5cGVkZWYgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIHRoaXMgc3RydWN0IGlmIHlvdSB3b3VsZCBwcmVmZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzkgb2YgZmlsZSBjb250YWluZXJfaXRlcmF0b3IuYy4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidm9pZCogXGZCaXRlcmF0b3JfaW5mb19zOjp1c2VyX2N0eFxmUCIKLS5QUAotVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnQgaGFuZGxlcnMgdG8gc3RvcmUgYW55IGluZm9ybWF0aW9uIHRoZXkgbmVlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2OSBvZiBmaWxlIGNvbnRhaW5lcl9pdGVyYXRvci5jLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbGVhZi4zIGIvbWFuL25ldHNubXBfbGVhZi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGI2OWEwLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2xlYWYuMworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS5USCAibGVhZl9oYW5kbGVycyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWxlYWZfaGFuZGxlcnMgXC0gCi0uUFAKLVByb2Nlc3MgaW5kaXZpZHVhbCBsZWFmIG9iamVjdHMgQSBncm91cCBvZiBoYW5kbGVycyB0byBpbXBsZW1lbnQgaW5kaXZpZHVhbCBsZWFmIG9iamVjdHMgYW5kIGluc3RhbmNlcyAoYm90aCBzY2FsYXIgb2JqZWN0cywgYW5kIGluZGl2aWR1YWwgb2JqZWN0cyBhbmQgaW5zdGFuY2VzIHdpdGhpbiBhIHRhYmxlKS4gIAotCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCaW5zdGFuY2VcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVByb2Nlc3MgaW5kaXZpZHVhbCBNSUIgaW5zdGFuY2VzIGVhc2lseS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJzY2FsYXJcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVByb2Nlc3Mgc2NhbGFycyBlYXNpbHkuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCc2NhbGFyX2dyb3VwXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklQcm9jZXNzIGdyb3VwcyBvZiBzY2FsYXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQndhdGNoZXJcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVdhdGNoIGEgc3BlY2lmaWVkIFxmQnZhcmlhYmxlXGZQIGFuZCBwcm9jZXNzIGl0IGFzIGFuIGluc3RhbmNlIG9yIHNjYWxhciBvYmplY3QuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Qcm9jZXNzIGluZGl2aWR1YWwgbGVhZiBvYmplY3RzIEEgZ3JvdXAgb2YgaGFuZGxlcnMgdG8gaW1wbGVtZW50IGluZGl2aWR1YWwgbGVhZiBvYmplY3RzIGFuZCBpbnN0YW5jZXMgKGJvdGggc2NhbGFyIG9iamVjdHMsIGFuZCBpbmRpdmlkdWFsIG9iamVjdHMgYW5kIGluc3RhbmNlcyB3aXRoaW4gYSB0YWJsZSkuIAotCi1UaGVzZSBoYW5kbGVycyB3aWxsIHR5cGljYWxseSBhbGxvdyBjb250cm9sIHRvIGJlIHBhc3NlZCBkb3duIHRvIGEgbG93ZXIgbGV2ZWwsIHVzZXItcHJvdmlkZWQgaGFuZGxlciwgYnV0IHRoaXMgaXMgKHVzdWFsbHkpIG9wdGlvbmFsLiAKLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9saWJyYXJ5LjMgYi9tYW4vbmV0c25tcF9saWJyYXJ5LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOTZkMzguLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbGlicmFyeS4zCisrKyAvZGV2L251bGwKQEAgLTEsNjcwICswLDAgQEAKLS5USCAiVGhlIE5ldC1TTk1QIGxpYnJhcnkiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1UaGUgTmV0LVNOTVAgbGlicmFyeSBcLSAKLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJzbm1wX2ludGVybmFsX3Nlc3Npb25cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnNlc3Npb25fbGlzdFxmUCIKLS5icgotLmluIC0xYwotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQmFzbjEgcGFyc2luZyBhbmQgZGF0YXR5cGUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLlxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJTm90ZSBvbi4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJBIGdlbmVyaWMgY2FsbGJhY2sgbWVjaGFuaXNtXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQmdlbmVyaWMgbGlua2VkLWxpc3QgZGF0YSBoYW5kbGluZyB3aXRoIGEgc3RyaW5nIGFzIGEga2V5LlxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJzdG9yYWdlIHNwYWNlIGZvciBkZWZhdWx0c1xmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJVGhlIHB1cnBvc2Ugb2YgdGhlIGRlZmF1bHQgc3RvcmFnZSBpcyB0aHJlZS1mb2xkOi4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJtaWIgcGFyc2luZyBhbmQgZGF0YXR5cGUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLlxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJTdG9yZSBhbmQgcmV0cmlldmUgZGF0YSByZWZlcmVuY2VkIGJ5IGFuIE9JRC5cZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVRoaXMgaXMgZXNzZW50aWFsbHkgYSB3YXkgb2Ygc3RvcmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJwYXJzaW5nIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBhdCBydW4gdGltZVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJVGhlIHJlYWRfY29uZmlnIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBhIGZhaXJseSBleHRlbnNpYmxlIHN5c3RlbSBvZiBwYXJzaW5nIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBhdCB0aGUgcnVuIHRpbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCZ2VuZXJpYyBsaWJyYXJ5IGJhc2VkIGFsYXJtIHRpbWVycyBmb3IgdmFyaW91cyBwYXJ0cyBvZiBhbiBhcHBsaWNhdGlvblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJ2YXJpb3VzIFBEVSBwcm9jZXNzaW5nIHJvdXRpbmVzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQmdlbmVyaWMgbG9nZ2luZyBmb3IgbmV0LXNubXBcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCTWVtb3J5IFV0aWxpdHkgUm91dGluZXNcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JTlxmUChhLCBiKSAgICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSUJfQ0xJRU5UU19BUkVfRVZJTFxmUCAgIDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJfaW5pdF9hZ2VudF9jYWxsYmFja190cmFuc3BvcnRcZlAoKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTkVFRF9SRVFVRVNUX0xJU1RcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJ0aW1lcmNtcFxmUCh0dnAsIHV2cCwgY21wKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQnRpbWVyY2xlYXJcZlAodHZwKSAgICh0dnApLT50dl9zZWMgPSAodHZwKS0+dHZfdXNlYyA9IDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNQVhfUEFDS0VUX0xFTkdUSFxmUCAgICgweDdmZmZmZmZmKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTlxmUCAgIDUiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJCU0Q0XzJcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJERUZBVUxUX0NPTU1VTklUWVxmUCAgICdwdWJsaWMnIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCREVGQVVMVF9SRVRSSUVTXGZQICAgNSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkRFRkFVTFRfVElNRU9VVFxmUCAgIDEwMDAwMDBMIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCREVGQVVMVF9SRU1QT1JUXGZQICAgU05NUF9QT1JUIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCREVGQVVMVF9FTlRFUlBSSVNFXGZQICAgZGVmYXVsdF9lbnRlcnByaXNlIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCREVGQVVMVF9USU1FXGZQICAgMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1BWElNVU1fUEFDS0VUX1NJWkVcZlAgICAweDdmZmZmZmZmIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCREVCVUdQUklOVFBEVVRZUEVcZlAodG9rZW4sIHR5cGUpICAgREVCVUdEVU1QU0VDVElPTih0b2tlbiwgc25tcF9wZHVfdHlwZSh0eXBlKSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJFUlJPUl9TVEFUX0xFTkdUSFxmUCAgIDExIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJpbnQgXGZCaW5pdF9hZ2VudFxmUCAoY29uc3QgY2hhciAqYXBwKSIKLS5icgotLlJJICJcZklJbml0aWFsaXplIHRoZSBhZ2VudC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNodXRkb3duX2FnZW50XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmFkZF90b19pbml0X2xpc3RcZlAgKGNoYXIgKm1vZHVsZV9saXN0KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc2hvdWxkX2luaXRcZlAgKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9idWlsZFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnBzcywgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfZ2V0X2Vycm5vXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc3luY2hfcmVzZXRcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqbm90dXNlZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3N5bmNoX3NldHVwXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKm5vdHVzZWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJzdHJlcnJvclxmUCAoaW50IGVycikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQnNubXBfcGR1X3R5cGVcZlAgKGludCB0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJsb25nIFxmQnNubXBfZ2V0X25leHRfcmVxaWRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCc25tcF9nZXRfbmV4dF9tc2dpZFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJzbm1wX2dldF9uZXh0X3Nlc3NpZFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJzbm1wX2dldF9uZXh0X3RyYW5zaWRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9wZXJyb3JcZlAgKGNvbnN0IGNoYXIgKnByb2dfc3RyaW5nKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc2V0X2RldGFpbFxmUCAoY29uc3QgY2hhciAqZGV0YWlsX3N0cmluZykiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQnNubXBfYXBpX2VycnN0cmluZ1xmUCAoaW50IHNubXBfZXJybnVtYmVyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZXJyb3JcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqcHNlc3MsIGludCAqcF9lcnJubywgaW50ICpwX3NubXBfZXJybm8sIGNoYXIgKipwX3N0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3Nlc3NfZXJyb3JcZlAgKHZvaWQgKnNlc3NwLCBpbnQgKnBfZXJybm8sIGludCAqcF9zbm1wX2Vycm5vLCBjaGFyICoqcF9zdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9zZXNzX2xvZ19lcnJvclxmUCAoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpwcm9nX3N0cmluZywgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3Nlc3NfcGVycm9yXGZQIChjb25zdCBjaGFyICpwcm9nX3N0cmluZywgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3Nlc3NfaW5pdFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmluaXRfc25tcFxmUCAoY29uc3QgY2hhciAqdHlwZSkiCi0uYnIKLS5SSSAiXGZJQ2FsbHMgdGhlIGZ1bmN0aW9ucyB0byBkbyBjb25maWcgZmlsZSBsb2FkaW5nIGFuZCBtaWIgXGZCbW9kdWxlXGZQIHBhcnNpbmcgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3N0b3JlXGZQIChjb25zdCBjaGFyICp0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc2h1dGRvd25cZlAgKGNvbnN0IGNoYXIgKnR5cGUpIgotLmJyCi0uUkkgIlxmSVNodXRzIGRvd24gdGhlIGFwcGxpY2F0aW9uLCBzYXZpbmcgYW55IG5lZWRlZCBwZXJzaXN0ZW50IHN0b3JhZ2UsIGFuZCBhcHByb3ByaWF0ZSBjbGVhbiB1cC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJzbm1wX29wZW5cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCc25tcF9vcGVuX2V4XGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIGludCgqZnByZV9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICosIHZvaWQgKiwgaW50KSwgaW50KCpmcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiwgc2l6ZV90KSwgaW50KCpmcG9zdF9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIGludCksIGludCgqZmJ1aWxkKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICosIHNpemVfdCAqKSwgaW50KCpmcmJ1aWxkKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICoqLCBzaXplX3QgKiwgc2l6ZV90ICopLCBpbnQoKmZjaGVjaykodV9jaGFyICosIHNpemVfdCkpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wdjNfZW5naW5lSURfcHJvYmVcZlAgKHN0cnVjdCBcZkJzZXNzaW9uX2xpc3RcZlAgKnNscCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICppbl9zZXNzaW9uKSIKLS5icgotLlJJICJcZklwcm9iZSBmb3IgcGVlciBlbmdpbmVJRCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQnNubXBfYWRkXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKmluX3Nlc3Npb24sIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICp0cmFuc3BvcnQsIGludCgqZnByZV9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICosIHZvaWQgKiwgaW50KSwgaW50KCpmcG9zdF9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIGludCkpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQnNubXBfYWRkX2Z1bGxcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqaW5fc2Vzc2lvbiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKnRyYW5zcG9ydCwgaW50KCpmcHJlX3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKiwgdm9pZCAqLCBpbnQpLCBpbnQoKmZwYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqLCBzaXplX3QpLCBpbnQoKmZwb3N0X3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgaW50KSwgaW50KCpmYnVpbGQpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiwgc2l6ZV90ICopLCBpbnQoKmZyYnVpbGQpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiosIHNpemVfdCAqLCBzaXplX3QgKiksIGludCgqZmNoZWNrKSh1X2NoYXIgKiwgc2l6ZV90KSwgXGZCbmV0c25tcF9wZHVcZlAgKigqZmNyZWF0ZV9wZHUpKFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICosIHZvaWQgKiwgc2l6ZV90KSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQnNubXBfc2Vzc19hZGRfZXhcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqaW5fc2Vzc2lvbiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKnRyYW5zcG9ydCwgaW50KCpmcHJlX3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKiwgdm9pZCAqLCBpbnQpLCBpbnQoKmZwYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqLCBzaXplX3QpLCBpbnQoKmZwb3N0X3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgaW50KSwgaW50KCpmYnVpbGQpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiwgc2l6ZV90ICopLCBpbnQoKmZyYnVpbGQpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiosIHNpemVfdCAqLCBzaXplX3QgKiksIGludCgqZmNoZWNrKSh1X2NoYXIgKiwgc2l6ZV90KSwgXGZCbmV0c25tcF9wZHVcZlAgKigqZmNyZWF0ZV9wZHUpKFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICosIHZvaWQgKiwgc2l6ZV90KSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQnNubXBfc2Vzc19hZGRcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqaW5fc2Vzc2lvbiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKnRyYW5zcG9ydCwgaW50KCpmcHJlX3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKiwgdm9pZCAqLCBpbnQpLCBpbnQoKmZwb3N0X3BhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgaW50KSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQnNubXBfc2Vzc19vcGVuXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnBzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXNzX2Nsb3NlXGZQICh2b2lkICpzZXNzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfY2xvc2VcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfY2xvc2Vfc2Vzc2lvbnNcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wdjNfaGVhZGVyX3JlYWxsb2NfcmJ1aWxkXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXB2M19zY29wZWRQRFVfaGVhZGVyX3JlYWxsb2NfcmJ1aWxkXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHNpemVfdCBib2R5X2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXB2M19wYWNrZXRfcmVhbGxvY19yYnVpbGRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCB1X2NoYXIgKnBkdV9kYXRhLCBzaXplX3QgcGR1X2RhdGFfbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcHYzX3BhY2tldF9idWlsZFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCB1X2NoYXIgKnBhY2tldCwgc2l6ZV90ICpvdXRfbGVuZ3RoLCB1X2NoYXIgKnBkdV9kYXRhLCBzaXplX3QgcGR1X2RhdGFfbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJzbm1wX3BkdV9idWlsZFxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgdV9jaGFyICpjcCwgc2l6ZV90ICpvdXRfbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9wZHVfcmVhbGxvY19yYnVpbGRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXB2M19wYXJzZVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgdV9jaGFyICpkYXRhLCBzaXplX3QgKmxlbmd0aCwgdV9jaGFyICoqYWZ0ZXJfaGVhZGVyLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wdjNfbWFrZV9yZXBvcnRcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIGludCBlcnJvcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXB2M19nZXRfcmVwb3J0X3R5cGVcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3BkdV9wYXJzZVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgdV9jaGFyICpkYXRhLCBzaXplX3QgKmxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCc25tcHYzX3Njb3BlZFBEVV9wYXJzZVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgdV9jaGFyICpjcCwgc2l6ZV90ICpsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3NlbmRcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2Vzc19zZW5kXGZQICh2b2lkICpzZXNzcCwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfYXN5bmNfc2VuZFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBzbm1wX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpjYl9kYXRhKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXNzX2FzeW5jX3NlbmRcZlAgKHZvaWQgKnNlc3NwLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBzbm1wX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpjYl9kYXRhKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZnJlZV92YXJcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZnJlZV92YXJiaW5kXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2ZyZWVfcGR1XGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3BkdVxmUCAqIFxmQnNubXBfY3JlYXRlX3Nlc3NfcGR1XGZQIChcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqdHJhbnNwb3J0LCB2b2lkICpvcGFxdWUsIHNpemVfdCBvbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfcmVhZFxmUCAoZmRfc2V0ICpmZHNldCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQl9zZXNzX3JlYWRcZlAgKHZvaWQgKnNlc3NwLCBmZF9zZXQgKmZkc2V0KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXNzX3JlYWRcZlAgKHZvaWQgKnNlc3NwLCBmZF9zZXQgKmZkc2V0KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZWxlY3RfaW5mb1xmUCAoaW50ICpudW1mZHMsIGZkX3NldCAqZmRzZXQsIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXNzX3NlbGVjdF9pbmZvXGZQICh2b2lkICpzZXNzcCwgaW50ICpudW1mZHMsIGZkX3NldCAqZmRzZXQsIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfdGltZW91dFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3Nlc3NfdGltZW91dFxmUCAodm9pZCAqc2Vzc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX29pZF9uY29tcGFyZVxmUCAoY29uc3Qgb2lkICppbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqaW5fbmFtZTIsIHNpemVfdCBsZW4yLCBzaXplX3QgbWF4X2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfb2lkX2NvbXBhcmVcZlAgKGNvbnN0IG9pZCAqaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKmluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uYnIKLS5SSSAiXGZJbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmUgdHdvIG9iamVjdCBpZGVudGlmaWVycy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vaWRfY29tcGFyZV9sbFxmUCAoY29uc3Qgb2lkICppbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqaW5fbmFtZTIsIHNpemVfdCBsZW4yLCBzaXplX3QgKm9mZnB0KSIKLS5icgotLlJJICJcZklsZXhpY29ncmFwaGljYWwgY29tcGFyZSB0d28gb2JqZWN0IGlkZW50aWZpZXJzIGFuZCByZXR1cm4gdGhlIHBvaW50IHdoZXJlIHRoZXkgZGlmZmVyIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfb2lkdHJlZV9jb21wYXJlXGZQIChjb25zdCBvaWQgKmluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICppbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLmJyCi0uUkkgIlxmSUNvbXBhcmVzIDIgT0lEcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1YWwgdXAgdW50aWwgdGhlIHNob3J0ZXN0IGxlbmd0aC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9vaWRzdWJ0cmVlX2NvbXBhcmVcZlAgKGNvbnN0IG9pZCAqaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKmluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2lkX2VxdWFsc1xmUCAoY29uc3Qgb2lkICppbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5icgotLlJJICJcZklDb21wYXJlcyAyIE9JRHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGV4YWN0bHkgZXF1YWwuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2lkX2lzX3N1YnRyZWVcZlAgKGNvbnN0IG9pZCAqaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKmluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uYnIKLS5SSSAiXGZJSWRlbnRpY2FsIHRvIG5ldHNubXBfb2lkX2VxdWFscywgZXhjZXB0IG9ubHkgdGhlIGxlbmd0aCB1cCB0byBsZW4xIGlzIGNvbXBhcmVkLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29pZF9maW5kX3ByZWZpeFxmUCAoY29uc3Qgb2lkICppbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5icgotLlJJICJcZklHaXZlbiB0d28gT0lEcywgZGV0ZXJtaW5lIHRoZSBjb21tb24gcHJlZml4IHRvIHRoZW0gYm90aC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJzbm1wX3BkdV9hZGRfdmFyaWFibGVcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICp2YWx1ZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZVxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICoqdmFybGlzdCwgY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgsIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKnZhbHVlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9hZGRfdmFyXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCwgY2hhciB0eXBlLCBjb25zdCBjaGFyICp2YWx1ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQnNubXBfc2Vzc19wb2ludGVyXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQnNubXBfc2Vzc19zZXNzaW9uXGZQICh2b2lkICpzZXNzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwXGZQICh2b2lkICpzZXNzcCkiCi0uYnIKLS5SSSAiXGZJTG9vayB1cCBhIHNlc3Npb24gdGhhdCBhbHJlYWR5IG1heSBoYXZlIGJlZW4gY2xvc2VkLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICogXGZCc25tcF9zZXNzX3RyYW5zcG9ydFxmUCAodm9pZCAqc2Vzc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zZXNzX3RyYW5zcG9ydF9zZXRcZlAgKHZvaWQgKnNwLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkICogXGZCc25tcF9kdXBsaWNhdGVfb2JqaWRcZlAgKGNvbnN0IG9pZCAqb2JqVG9Db3B5LCBzaXplX3Qgb2JqVG9Db3B5TGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2ludCBcZkJzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNcZlAgKGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9pbnQgXGZCc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5XGZQIChpbnQgd2hpY2gsIGludCBjb3VudCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9pbnQgXGZCc25tcF9nZXRfc3RhdGlzdGljXGZQIChpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9pbml0X3N0YXRpc3RpY3NcZlAgKHZvaWQpIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbW9kdWxlX2luaXRfbGlzdFxmUCAqIFxmQmluaXRsaXN0XGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbW9kdWxlX2luaXRfbGlzdFxmUCAqIFxmQm5vaW5pdGxpc3RcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3VidHJlZVxmUCAqIFxmQnN1YnRyZWVzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCbG9uZ19yZXR1cm5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyIFxmQnJldHVybl9idWZcZlAgWzI1OF0iCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IHRpbWV2YWwgXGZCc3RhcnR0aW1lXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJjYWxsYmFja19tYXN0ZXJfbnVtXGZQID0gLTEiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQm51bGxPaWRcZlAgW10gPSB7IDAsIDAgfSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbnVsbE9pZExlblxmUCA9IHNpemVvZihudWxsT2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCc2Vzc2lvbl9saXN0XGZQICogXGZCU2Vzc2lvbnNcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2Vycm5vXGZQID0gMCIKLS5icgotLmluIC0xYwotLlNIICJEZWZpbmUgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiI2RlZmluZSB0aW1lcmNtcCh0dnAsIHV2cCwgY21wKSJcZkJWYWx1ZTpcZlAKLS5QUAotLm5mCi0vKiBDU1RZTEVEICovIFwKLSAgICAgICAgKCh0dnApLT50dl9zZWMgY21wICh1dnApLT50dl9zZWMgfHwgXAotICAgICAgICAoKHR2cCktPnR2X3NlYyA9PSAodXZwKS0+dHZfc2VjICYmIFwKLSAgICAgICAgLyogQ1NUWUxFRCAqLyBcCi0gICAgICAgICh0dnApLT50dl91c2VjIGNtcCAodXZwKS0+dHZfdXNlYykpCi0uZmkKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE0OCBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBfc2Vzc19yZWFkICh2b2lkICogc2Vzc3AsIGZkX3NldCAqIGZkc2V0KSIKLS5QUAotWFhYLXJrczogd2h5IG5vIFNOTVBfRlJFRShpc3AtPnBhY2tldCk7ID8/Ci0uUFAKLVhYWC1ya3M6IHdoeSBubyBTTk1QX0ZSRUUoaXNwLT5wYWNrZXQpOyA/PyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0NDggb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJpbnQgaW5pdF9hZ2VudCAoY29uc3QgY2hhciAqIGFwcCkiCi0uUFAKLUluaXRpYWxpemUgdGhlIGFnZW50LiBDYWxscyBpbnRvIGluaXRfYWdlbnRfcmVhZF9jb25maWcgdG8gc2V0IHRoYSBhcHAncyBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIGFwcHJvcHJpYXRlIGRlZmF1bHQgc3RvcmFnZSBzcGFjZSwgTkVUU05NUF9EU19MSUJfQVBQVFlQRS4gTmVlZCB0byBjYWxsIGluaXRfYWdlbnQgYmVmb3JlIGNhbGxpbmcgaW5pdF9zbm1wLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWFwcFxmUCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRvIGJlIHJlYWQgaW4sIGdldHMgc3RvcmVkIGluIGRlZmF1bHQgc3RvcmFnZQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBub24temVybyBvbiBmYWlsdXJlIGFuZCB6ZXJvIG9uIHN1Y2Nlc3MuCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCaW5pdF9zbm1wXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjcwIG9mIGZpbGUgc25tcF92YXJzLmMuCi0uU1MgInZvaWQgaW5pdF9zbm1wIChjb25zdCBjaGFyICogdHlwZSkiCi0uUFAKLUNhbGxzIHRoZSBmdW5jdGlvbnMgdG8gZG8gY29uZmlnIGZpbGUgbG9hZGluZyBhbmQgbWliIFxmQm1vZHVsZVxmUCBwYXJzaW5nIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXR5cGVcZlAgbGFiZWwgZm9yIHRoZSBjb25maWcgZmlsZSAndHlwZScKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXZvaWQKLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJpbml0X2FnZW50XGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzg3IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiaW50IG5ldHNubXBfb2lkX2NvbXBhcmVfbGwgKGNvbnN0IG9pZCAqIGluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsIHNpemVfdCBsZW4yLCBzaXplX3QgKiBvZmZwdCkiCi0uUFAKLWxleGljb2dyYXBoaWNhbCBjb21wYXJlIHR3byBvYmplY3QgaWRlbnRpZmllcnMgYW5kIHJldHVybiB0aGUgcG9pbnQgd2hlcmUgdGhleSBkaWZmZXIgQ2F1dGlvbjogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9mdGVuIGJ5IGNvbW1hbmQgcmVzcG9uZGVyIGFwcGxpY2F0aW9ucyAoaWUsIGFnZW50KS4KLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0tMSBpZiBuYW1lMSA8IG5hbWUyLCAwIGlmIG5hbWUxID0gbmFtZTIsIDEgaWYgbmFtZTEgPiBuYW1lMiBhbmQgb2ZmcHQgPSBsZW4gd2hlcmUgbmFtZTEgIT0gbmFtZTIgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2Mzg2IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiaW50IG5ldHNubXBfb2lkX2VxdWFscyAoY29uc3Qgb2lkICogaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKiBpbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLlBQCi1Db21wYXJlcyAyIE9JRHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGV4YWN0bHkgZXF1YWwuIFRoaXMgc2hvdWxkIGJlIGZhc3RlciB0aGFuIGRvaW5nIGEgc25tcF9vaWRfY29tcGFyZSBmb3IgZGlmZmVyZW50IGxlbmd0aCBPSURzLCBzaW5jZSB0aGUgbGVuZ3RoIGlzIGNoZWNrZWQgZmlyc3QgYW5kIGlmICE9IHJldHVybnMgaW1tZWRpYXRlbHkuIE1pZ2h0IGJlIHZlcnkgc2xpZ2hseSBmYXN0ZXIgaWYgbGVuZ3RocyBhcmUgPT0uIAotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWluX25hbWUxXGZQIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2lkLiAKLS5icgotXGZJbGVuMVxmUCBsZW5ndGggb2YgdGhlIGZpcnN0IE9JRCAoaW4gc2VnbWVudHMsIG5vdCBieXRlcykgCi0uYnIKLVxmSWluX25hbWUyXGZQIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIG9pZC4gCi0uYnIKLVxmSWxlbjJcZlAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgT0lEIChpbiBzZWdtZW50cywgbm90IGJ5dGVzKSAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgaWYgdGhleSBhcmUgZXF1YWwsIDEgaWYgdGhleSBhcmUgbm90LiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY0Njcgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJpbnQgbmV0c25tcF9vaWRfZmluZF9wcmVmaXggKGNvbnN0IG9pZCAqIGluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5QUAotR2l2ZW4gdHdvIE9JRHMsIGRldGVybWluZSB0aGUgY29tbW9uIHByZWZpeCB0byB0aGVtIGJvdGguIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaW5fbmFtZTFcZlAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvaWQuIAotLmJyCi1cZklsZW4xXGZQIExlbmd0aCBvZiB0aGUgZmlyc3Qgb2lkLiAKLS5icgotXGZJaW5fbmFtZTJcZlAgQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgb2lkLiAKLS5icgotXGZJbGVuMlxmUCBMZW5ndGggb2YgdGhlIHNlY29uZCBvaWQuIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotbGVuZ3RoIG9mIGNvbW1vbiBwcmVmaXggMCBpZiBubyBjb21tb24gcHJlZml4LCAtMSBvbiBlcnJvci4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NTMxIG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiaW50IG5ldHNubXBfb2lkX2lzX3N1YnRyZWUgKGNvbnN0IG9pZCAqIGluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5QUAotSWRlbnRpY2FsIHRvIG5ldHNubXBfb2lkX2VxdWFscywgZXhjZXB0IG9ubHkgdGhlIGxlbmd0aCB1cCB0byBsZW4xIGlzIGNvbXBhcmVkLiBGdW5jdGlvbmFsbHksIHRoaXMgZGV0ZXJtaW5lcyBpZiBpbl9uYW1lMiBpcyBlcXVhbCBvciBhIHN1YnRyZWUgb2YgaW5fbmFtZTEgCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaW5fbmFtZTFcZlAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvaWQuIAotLmJyCi1cZklsZW4xXGZQIGxlbmd0aCBvZiB0aGUgZmlyc3QgT0lEIChpbiBzZWdtZW50cywgbm90IGJ5dGVzKSAKLS5icgotXGZJaW5fbmFtZTJcZlAgQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgb2lkLiAKLS5icgotXGZJbGVuMlxmUCBsZW5ndGggb2YgdGhlIHNlY29uZCBPSUQgKGluIHNlZ21lbnRzLCBub3QgYnl0ZXMpIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCBpZiBvbmUgaXMgYSBjb21tb24gcHJlZml4IG9mIHRoZSBvdGhlci4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NTEwIG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiaW50IHNubXBfb2lkX2NvbXBhcmUgKGNvbnN0IG9pZCAqIGluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5QUAotbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmUgdHdvIG9iamVjdCBpZGVudGlmaWVycy4gQ2F1dGlvbjogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9mdGVuIGJ5IGNvbW1hbmQgcmVzcG9uZGVyIGFwcGxpY2F0aW9ucyAoaWUsIGFnZW50KS4KLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0tMSBpZiBuYW1lMSA8IG5hbWUyLCAwIGlmIG5hbWUxID0gbmFtZTIsIDEgaWYgbmFtZTEgPiBuYW1lMiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYzMzcgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJpbnQgc25tcF9vaWR0cmVlX2NvbXBhcmUgKGNvbnN0IG9pZCAqIGluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5QUAotQ29tcGFyZXMgMiBPSURzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVhbCB1cCB1bnRpbCB0aGUgc2hvcnRlc3QgbGVuZ3RoLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWluX25hbWUxXGZQIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2lkLiAKLS5icgotXGZJbGVuMVxmUCBsZW5ndGggb2YgdGhlIGZpcnN0IE9JRCAoaW4gc2VnbWVudHMsIG5vdCBieXRlcykgCi0uYnIKLVxmSWluX25hbWUyXGZQIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIG9pZC4gCi0uYnIKLVxmSWxlbjJcZlAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgT0lEIChpbiBzZWdtZW50cywgbm90IGJ5dGVzKSAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgaWYgdGhleSBhcmUgZXF1YWwsIDEgaWYgaW5fbmFtZTEgaXMgPiBpbl9uYW1lMiwgb3IgLTEgaWYgPC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NDM5IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiXGZCbmV0c25tcF9zZXNzaW9uXGZQKiBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAgKHZvaWQgKiBzZXNzcCkiCi0uUFAKLUxvb2sgdXAgYSBzZXNzaW9uIHRoYXQgYWxyZWFkeSBtYXkgaGF2ZSBiZWVuIGNsb3NlZC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklzZXNzcFxmUCBPcGFxdWUgcG9pbnRlciwgcmV0dXJuZWQgYnkgc25tcF9zZXNzX29wZW4uCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1Qb2ludGVyIHRvIHNlc3Npb24gdXBvbiBzdWNjZXNzIG9yIE5VTEwgdXBvbiBmYWlsdXJlLgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLXNubXBfc2Vzc19zZXNzaW9uKCkgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3MTk3IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAidm9pZCBzbm1wX3NodXRkb3duIChjb25zdCBjaGFyICogdHlwZSkiCi0uUFAKLVNodXRzIGRvd24gdGhlIGFwcGxpY2F0aW9uLCBzYXZpbmcgYW55IG5lZWRlZCBwZXJzaXN0ZW50IHN0b3JhZ2UsIGFuZCBhcHByb3ByaWF0ZSBjbGVhbiB1cC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0eXBlXGZQIExhYmVsIGZvciB0aGUgY29uZmlnIGZpbGUgJ3R5cGUnIHVzZWQKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXZvaWQgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NTMgb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNTICJpbnQgc25tcHYzX2VuZ2luZUlEX3Byb2JlIChzdHJ1Y3QgXGZCc2Vzc2lvbl9saXN0XGZQICogc2xwLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBpbl9zZXNzaW9uKSIKLS5QUAotcHJvYmUgZm9yIHBlZXIgZW5naW5lSUQgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklzbHBcZlAgc2Vzc2lvbiBsaXN0IHBvaW50ZXIuIAotLmJyCi1cZklpbl9zZXNzaW9uXGZQIHNlc3Npb24gZm9yIGVycm9ycwotLlJFCi0uUFAKLVxmQk5vdGU6XGZQCi0uUlMgNAotLklQICJcKGJ1IiAyCi1jYWxsZWQgYnkgX3Nlc3Nfb3BlbigpLCBzbm1wX3Nlc3NfYWRkX2V4KCkKLS5JUCAiXChidSIgMgotaW5fc2Vzc2lvbiBpcyB0aGUgdXNlciBzdXBwbGllZCBzZXNzaW9uIHByb3ZpZGVkIHRvIHRob3NlIGZ1bmN0aW9ucy4KLS5JUCAiXChidSIgMgotdGhlIGZpcnN0IHNlc3Npb24gaW4gc2xwIHNob3VsZCB0aGUgaW50ZXJuYWwgYWxsb2NhdGVkIGNvcHkgb2YgaW5fc2Vzc2lvbgotLlBQCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIDogZXJyb3IgCi0uUFAKLTEgOiBvayAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNzggb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYgYi9tYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWRhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmCkBAIC0wLDAgKzEsMzA5IEBACisuVEggTkVUU05NUF9NSUJfQVBJIDMgIjEzIEF1ZyAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK2FkZF9taWJkaXIsCituZXRzbm1wX2luaXRfbWliLAorc2h1dGRvd25fbWliLAorbmV0c25tcF9yZWFkX21vZHVsZSwKK3JlYWRfbWliLAorcmVhZF9hbGxfbWlicywKK2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQsCitzbm1wX3NldF9taWJfZXJyb3JzLAorc25tcF9zZXRfbWliX3dhcm5pbmdzLAorc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMsCityZWFkX29iamlkLAorc25tcF9wYXJzZV9vaWQsCitnZXRfbW9kdWxlX25vZGUsCitwcmludF9taWIsCitwcmludF9vYmppZCwKK2ZwcmludF9vYmppZCwKK3NucHJpbnRfb2JqaWQsCitwcmludF9kZXNjcmlwdGlvbiwKK2ZwcmludF9kZXNjcmlwdGlvbiwKK3NucHJpbnRfZGVzY3JpcHRpb24gLSBuZXRzbm1wX21pYl9hcGkgZnVuY3Rpb25zCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxuZXRcLXNubXAvbWliX2FwaS5oPgorLlBQCisuU1MgSW5pdGlhbGlzYXRpb24gYW5kIFNodXRkb3duCisuQkkgImludCBhZGRfbWliZGlyKGNvbnN0IGNoYXIgKiIgImRpcm5hbWUiICk7CisuUFAKKy5CICJ2b2lkIG5ldHNubXBfaW5pdF9taWIodm9pZCk7CisuXCIuYnIKKy5cIi5CSSAidm9pZCBpbml0X21pYih2b2lkKTsiICAiICAgICAgICAgICAgICAgIChkZXByZWNhdGVkKSIKKy5cIi5icgorLlwiLkJJICJ2b2lkIGluaXRfbWliX2ludGVybmFscyh2b2lkKTsiICAiICAgICAgICAoZGVwcmVjYXRlZCkiCisuYnIKKy5CICJ2b2lkIHNodXRkb3duX21pYih2b2lkKTsKKy5TUyBSZWFkaW5nIGFuZCBQYXJzaW5nIE1JQnMKKy5CSSAic3RydWN0IHRyZWUgKm5ldHNubXBfcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqIiAibmFtZSIgKTsKKy5icgorLlwiLkJJICJzdHJ1Y3QgdHJlZSAqcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqIiAibmFtZSIgIik7IiAgIiAgICAgICAgKGRlcHJlY2F0ZWQpIgorLlwiLlBQCisuQkkgInN0cnVjdCB0cmVlICpyZWFkX21pYihjb25zdCBjaGFyICoiICJmaWxlbmFtZSIgKTsKKy5icgorLkIgInN0cnVjdCB0cmVlICpyZWFkX2FsbF9taWJzKHZvaWQpOworLlBQCisuQkkgImludCBhZGRfbW9kdWxlX3JlcGxhY2VtZW50KGNvbnN0IGNoYXIgKiIgIm9sZF9tb2R1bGUiICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgIm5ld19tb2R1bGUiICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgInRhZyIgIiwgaW50ICIgImxlbiIgKTsKKy5QUAorLkJJICJ2b2lkIHNubXBfc2V0X21pYl93YXJuaW5ncyhpbnQgIiBsZXZlbCApOworLmJyCisuQkkgInZvaWQgc25tcF9zZXRfbWliX2Vycm9ycyhpbnQgIiBsZXZlbCApOworLmJyCisuQkkgInZvaWQgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMoaW50ICIgc2F2ZSAiKTsiCisuU1MgU2VhcmNoaW5nIHRoZSBNSUIgVHJlZQorLlBQCisuQkkgImludCAgcmVhZF9vYmppZChjb25zdCBjaGFyICoiICJpbnB1dCIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgIG9pZCAqIiAib2JqaWQiICIsIHNpemVfdCAqIiAib2JqaWRsZW4iICk7CisuYnIKKy5CSSAib2lkICpzbm1wX3BhcnNlX29pZChjb25zdCBjaGFyICoiICJpbnB1dCIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgIG9pZCAqIiAib2JqaWQiICIsIHNpemVfdCAqIiAib2JqaWRsZW4iICk7CisuYnIKKy5CSSAiaW50ICBnZXRfbW9kdWxlX25vZGUoY29uc3QgY2hhciAqIiAibmFtZSIgIiwgY29uc3QgY2hhciAqIiAibW9kdWxlIiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgb2lkICoiICJvYmppZCIgIiwgc2l6ZV90ICoiICJvYmppZGxlbiIgKTsKKy5TUyBPdXRwdXQKKy5QUAorLkJJICJ2b2lkICBwcmludF9taWIoRklMRSAqIiAiZnAiICk7CisuUFAKKy5CSSAidm9pZCAgcHJpbnRfb2JqaWQoY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICk7CisuYnIKKy5CSSAidm9pZCBmcHJpbnRfb2JqaWQoRklMRSAqIiBmcCAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIik7IgorLmJyCisuQkkgImludCBzbnByaW50X29iamlkKGNoYXIgKiIgYnVmICIsIHNpemVfdCAiICJsZW4iICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiKTsiCisuUFAKKy5CSSAidm9pZCAgcHJpbnRfZGVzY3JpcHRpb24oY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGludCAiIHdpZHRoICk7CisuYnIKKy5CSSAidm9pZCBmcHJpbnRfZGVzY3JpcHRpb24oRklMRSAqIiBmcCAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgaW50ICIgd2lkdGggKTsKKy5icgorLkJJICJpbnQgc25wcmludF9kZXNjcmlwdGlvbihjaGFyICoiIGJ1ZiAiLCBzaXplX3QgIiAibGVuIiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgaW50ICIgd2lkdGggKTsKKy5icgorLlBQCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIE1JQiBtb2R1bGVzIGZhbGwgaW50byBmb3VyIGdyb3VwcyAtIHRob3NlCitkZWFsaW5nIHdpdGggaW5pdGlhbGlzYXRpb24gYW5kIHNodXRkb3duLCB3aXRoIHJlYWRpbmcgaW4gYW5kIHBhcnNpbmcKK01JQiBmaWxlcywgd2l0aCBzZWFyY2hpbmcgdGhlIE1JQiB0cmVlLCBhbmQgb3V0cHV0IHJvdXRpbmVzLgorLlNTIEluaXRpYWxpc2F0aW9uIGFuZCBTaHV0ZG93bgorLlBQCisuQiBhZGRfbWliZGlyCitpcyB1c2VkIHRvIGFkZCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSB0byB0aGUgcGF0aCBvZiBsb2NhdGlvbnMgd2hpY2ggYXJlCitzZWFyY2hlZCBmb3IgZmlsZXMgY29udGFpbmluZyBNSUIgbW9kdWxlcy4KK05vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5IGxvYWQgdGhlIE1JQiBtb2R1bGVzIGxvY2F0ZWQKK2luIHRoYXQgZGlyZWN0b3J5LCBidXQgaXMgc2ltcGx5IGFuIGluaXRpYWxpc2F0aW9uIHN0ZXAgdG8gbWFrZQordGhlbSBhdmFpbGFibGUgdG8KKy5CUiBuZXRzbm1wX3JlYWRfbW9kdWxlIC4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNvdW50IG9mIGZpbGVzIGZvdW5kIGluIHRoZSBkaXJlY3RvcnksIG9yIGEgXC0xCitpZiB0aGVyZSBpcyBhbiBlcnJvci4gIAorSXQgc2hvdWxkIGJlIGNhbGxlZCBcZkliZWZvcmVcZlAgaW52b2tpbmcgXGZCbmV0c25tcF9pbml0X21pYlxmUC4KKy5QUAorLlwiLkIgaW5pdF9taWJfaW50ZXJuYWxzCisuXCJzZXRzIHVwIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzLCBwcmVwYXJhdG9yeSB0byByZWFkaW5nIGluIE1JQgorLlwibW9kdWxlcy4gIEl0IHNob3VsZCBiZSBjYWxsZWQgXGZJYWZ0ZXJcZlAgYWxsIGNhbGxzIHRvCisuXCIuQlIgYWRkX21pYmRpciAsCisuXCJhbmQgYmVmb3JlIGFueSBjYWxscyB0bworLlwiLkJSIG5ldHNubXBfcmVhZF9tb2R1bGUgLgorLlwiLlBQCisuQiBuZXRzbm1wX2luaXRfbWliCitjb25maWd1cmVzIHRoZSBNSUIgZGlyZWN0b3J5IHNlYXJjaCBwYXRoICh1c2luZworLkIgYWRkX21pYmRpcgorKSwgc2V0cyB1cCB0aGUgaW50ZXJuYWwgTUlCIGZyYW1ld29yaywKK2FuZCB0aGVuIGxvYWRzIHRoZSBhcHByb3ByaWF0ZSBNSUIgbW9kdWxlcyAodXNpbmcKKy5CUiBuZXRzbm1wX3JlYWRfbW9kdWxlICIgYW5kICIgcmVhZF9taWIgIikuIgorU2VlIHRoZSBFTlZJUk9OTUVOVEFMIFZBUklBQkxFUyBzZWN0aW9uIGZvciBkZXRhaWxzLgorLmJyCitJdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIKK3JvdXRpbmUgdGhhdCBtYW5pcHVsYXRlcyBvciBhY2Nlc3NlcyB0aGUgTUlCIHRyZWUKKyhidXQgYWZ0ZXIgYW55IGFkZGl0aW9uYWwKKy5CIGFkZF9taWJkaXIKK2NhbGxzKS4KKy5QUAorLkIgc2h1dGRvd25fbWliCit3aWxsIGNsZWFyIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdhcyBnYXRoZXJlZCBieSAKKy5CUiBuZXRzbm1wX3JlYWRfbW9kdWxlICIsICIgYWRkX21pYmRpciAiIGFuZCAiIGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQgLgorSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBvbmUgZG9lcyBub3QgaW52b2tlCisuQlIgc2h1dGRvd25fbWliCit3aGlsZSB0aGVyZSBhcmUgU05NUCBzZXNzaW9ucyBiZWluZyBhY3RpdmVseSBtYW5hZ2VkLgorLlNTIFJlYWRpbmcgYW5kIFBhcnNpbmcgTUlCcworLlBQCisuQiBuZXRzbm1wX3JlYWRfbW9kdWxlCit0YWtlcyB0aGUgbmFtZSBvZiBhIE1JQiBtb2R1bGUgKHdoaWNoIG5lZWQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZQorbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBtb2R1bGUpLCBsb2NhdGVzIHRoaXMgd2l0aGluIHRoZQorY29uZmlndXJlZCBsaXN0IG9mIE1JQiBkaXJlY3RvcmllcywgYW5kIGxvYWRzIHRoZSBkZWZpbml0aW9ucyBmcm9tCit0aGUgbW9kdWxlIGludG8gdGhlIGFjdGl2ZSBNSUIgdHJlZS4KK0l0IGFsc28gbG9hZHMgYW55IE1JQiBtb2R1bGVzIGxpc3RlZCBpbiB0aGUgSU1QT1JUUyBjbGF1c2Ugb2YgdGhpcyBtb2R1bGUuCisuUFAKKy5CIHJlYWRfbWliCitpcyBzaW1pbGFyLCBidXQgdGFrZXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgTUlCIG1vZHVsZS4KK05vdGUgdGhhdCB0aGlzIGZpbGUgbmVlZCBub3QgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIE1JQiBkaXJlY3RvcnkKK3NlYXJjaCBsaXN0IChhbHRob3VnaCBhbnkgbW9kdWxlcyBsaXN0ZWQgaW4gdGhlIElNUE9SVFMgY2xhdXNlIGRvKS4KKy5QUAorLkIgcmVhZF9hbGxfbWlicword2lsbCByZWFkIGluIGFsbCB0aGUgTUlCIG1vZHVsZXMgZm91bmQgb24gdGhlIE1JQiBkaXJlY3Rvcnkgc2VhcmNoIGxpc3QuCisuUFAKK0luIGdlbmVyYWwgdGhlIHBhcnNlciBpcyBzaWxlbnQgYWJvdXQgd2hhdCBzdHJhbmdlbmVzc2VzIGl0IHNlZXMgaW4KK3RoZSBNSUIgZmlsZXMuIFRvIGdldCB3YXJuaW5ncyByZXBvcnRlZCwgY2FsbAorLkIgc25tcF9zZXRfbWliX3dhcm5pbmdzCit3aXRoIGEKKy5JIGxldmVsCitvZiAxIChvciAyIGZvciBldmVuIG1vcmUgd2FybmluZ3MpLgorLlBQCisuQiBhZGRfbW9kdWxlX3JlcGxhY2VtZW50CitjYW4gYmUgdXNlZCB0byBhbGxvdyBuZXcgTUlCIG1vZHVsZXMgdG8gb2Jzb2xldGUgb2xkZXIgb25lcywgd2l0aG91dAorbmVlZGluZyB0byBhbWVuZCB0aGUgSU1QT1JUUyBjbGF1c2VzIG9mIG90aGVyIG1vZHVsZXMuICBJdCB0YWtlcyB0aGUKK25hbWVzIG9mIHRoZSBvbGQgYW5kIG5ldyBtb2R1bGVzLCB0b2dldGhlciB3aXRoIGFuIGluZGljYXRpb24gb2Ygd2hpY2gKK3BvcnRpb25zIG9mIHRoZSBvbGQgbW9kdWxlIGFyZSBhZmZlY3RlZC4KKy5SUworLlRTCit0YWIoKyk7CitsYiBsYiBsYgorbCAgbCAgbC4KK3RhZyArIGxlbiArIGxvYWQgdGhlIG5ldyBtb2R1bGUgd2hlbjoKK05VTEwgKyAwICsgYWx3YXlzICh0aGUgb2xkIG1vZHVsZSBpcyBhIHN0cmljdCBzdWJzZXQgb2YKKyArICsgdGhlIG5ldykKK25hbWUgKyAwICsgZm9yIHRoZSBnaXZlbiB0YWcgb25seQorbmFtZSArIG5vbi0wICsgZm9yIGFueSBpZGVudGlmaWVyIHdpdGggdGhpcyBwcmVmaXgKKy5URQorLlJFCitJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlIG1vZHVsZSBpZGVudGlmaWVycyB1c2VkCitpbiBNSUIgSU1QT1JUUyBjbGF1c2VzIChzdWNoIGFzIHJlZmVycmluZyB0bworLkkgUkZDMTIxMworaW5zdGVhZCBvZgorLklSIFJGQzEyMTNcLU1JQiApLgorLlNTIFNlYXJjaGluZyB0aGUgTUlCIFRyZWUKKy5QUAorLkIgcmVhZF9vYmppZAordGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHRleHR1YWwgdmVyc2lvbiBvZiBhbiBvYmplY3QgaWRlbnRpZmllcgorKGluIGVpdGhlciBudW1lcmljIG9yIGRlc2NyaXB0b3IgZm9ybSksIGFuZCB0cmFuc2Zvcm1zIHRoaXMgaW50byB0aGUKK2NvcnJlc3BvbmRpbmcgbGlzdCBvZiBzdWItaWRlbnRpZmllcnMuICBUaGlzIGlzIHJldHVybmVkIGluIHRoZQorLkkgb3V0cHV0CitwYXJhbWV0ZXIsIHdpdGggdGhlIG51bWJlciBvZiBzdWItaWRlbnRpZmllcnMgcmV0dXJuZWQgdmlhCisuSVIgb3V0X2xlbiAuCitXaGVuIGNhbGxlZCwgCisuSSBvdXRfbGVuCittdXN0IGhvbGQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZQorLkkgb3V0cHV0CithcnJheS4KK0lmIG11bHRpcGxlIG9iamVjdCBpZGVudGlmaWVycyBhcmUgYmVpbmcgcHJvY2Vzc2VkLCB0aGVuIHRoaXMKK2xlbmd0aCBzaG91bGQgYmUgcmVzZXQgYmVmb3JlIGVhY2ggY2FsbC4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIG9mIDEgaWYgaXQgc3VjY2VlZHMgaW4gcGFyc2luZyB0aGUgc3RyaW5nCithbmQgMCBvdGhlcndpc2UuCisuUFAKKy5CIHNubXBfcGFyc2Vfb2lkCitpcyBzaW1pbGFyLCBidXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBhcnNlZCBPSUQgYnVmZmVyIChvciBOVUxMKS4KKy5QUAorLkIgZ2V0X21vZHVsZV9ub2RlCit0YWtlcyBhIGRlc2NyaXB0b3IgYW5kIHRoZSBuYW1lIG9mIGEgbW9kdWxlLCBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZworb2lkIGxpc3QsIGluIHRoZSBzYW1lIHdheSBhcworLkIgcmVhZF9vYmppZAorYWJvdmUuCisuYnIKK0lmIHRoZSBtb2R1bGUgbmFtZSBpcyBzcGVjaWZpZWQgYXMgIkFOWSIsIHRoZW4gdGhpcyByb3V0aW5lIHdpbGwKK2Fzc3VtZSB0aGF0IHRoZSBkZXNjcmlwdG9yIGdpdmVuIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIHRyZWUsIGFuZCB3aWxsCityZXR1cm4gdGhlIG1hdGNoaW5nIGVudHJ5LiAgSWYgdGhpcyBhc3N1bXB0aW9uIGlzIGludmFsaWQsIHRoZW4gdGhlCitiZWhhdmlvdXIgYXMgdG8gd2hpY2ggdmFyaWFibGUgaXMgcmV0dXJuZWQgaXMgaW1wbGVtZW50YXRpb24KK2RlcGVuZGVudC4KKy5icgorLlNTIE91dHB1dAorLkIgcHJpbnRfbWliCit3aWxsIHByaW50IG91dCBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIE1JQiB0cmVlIHRvCit0aGUgc3BlY2lmaWVkIEZJTEUgcG9pbnRlci4KKy5QUAorLkIgcHJpbnRfb2JqaWQKK3dpbGwgdGFrZSBhbiBvYmplY3QgaWRlbnRpZmllciAoYXMgcmV0dXJuZWQgYnkKKy5CUiByZWFkX29iamlkICIsICIgc25tcF9wYXJzZV9vaWQgIiBvciAiIGdldF9tb2R1bGVfbm9kZSAiKSwiCithbmQgcHJpbnRzIHRoZSB0ZXh0dWFsIGZvcm0gb2YgdGhpcyBPSUQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKy5QUAorLkIgZnByaW50X29iamlkCitkb2VzIHRoZSBzYW1lLCBidXQgcHJpbnRzIHRvIHRoZSBGSUxFIHBvaW50ZXIgc3BlY2lmaWVkIGJ5IHRoZSBpbml0aWFsCitwYXJhbWV0ZXIuCisuUFAKKy5CIHNucHJpbnRfb2JqaWQKK3ByaW50cyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieQorLkkgYnVmCit3aGljaCBpcyBvZiBsZW5ndGgKKy5JUiBsZW4gLgorSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZCwgb3IgXC0xIGlmIHRoZQorYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLiAgSW4gdGhlIGxhdHRlciBjYXNlLAorLkkgYnVmCit3aWxsIHR5cGljYWxseSBjb250YWluIGEgdHJ1bmNhdGVkIHZlcnNpb24gb2YgdGhlIGluZm9ybWF0aW9uIChidXQKK3RoaXMgYmVoYXZpb3VyIGlzIG5vdCBndWFyYW50ZWVkKS4KKy5QUAorLkJSIHByaW50X2Rlc2NyaXB0aW9uICwKKy5CUiBmcHJpbnRfZGVzY3JpcHRpb24gLAorYW5kCisuQiBzbnByaW50X2Rlc2NyaXB0aW9uCit0YWtlIGEgc2ltaWxhciBvYmplY3QgaWRlbnRpZmllcgorYW5kIHByaW50IG91dCBhIHZlcnNpb24gb2YgdGhlIE1JQiBkZWZpbml0aW9uIGZvciB0aGF0IG9iamVjdCwKK3RvZ2V0aGVyIHdpdGggdGhlIGZ1bGwgT0lELiBUaGUKKy5JIHdpZHRoCithcmd1bWVudCBjb250cm9scyBob3cgdGhlIE9JRCBpcyBsYXllZCBvdXQuCisuUFAKK0J5IGRlZmF1bHQgdGhlIHBhcnNlciBkb2VzIG5vdCBzYXZlIGRlc2NyaXB0aW9ucyBzaW5jZSB0aGV5IG1heSBiZQoraHVnZS4gIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcHJpbnQgdGhlbSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGludm9rZQorLkJJIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zKDEpIGJlZm9yZQorY2FsbGluZworLkIgaW5pdF9taWIKKyhvciBzaW1pbGFyKS4KKy5TSCAiRU5WSVJPTk1FTlQgVkFSSUFCTEVTIgorLlBQCitUaGUgbWFpbiB1c2Ugb2YgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgd2l0aCByZXNwZWN0IHRvIHRoZXNlIEFQSSBjYWxscworaXMgdG8gY29uZmlndXJlIHdoaWNoIE1JQiBtb2R1bGVzIHNob3VsZCBiZSBsb2FkZWQsIGFuZCB3aGVyZSB0aGV5IGFyZQorbG9jYXRlZC4KKy5UUCAxMAorTUlCRElSUworQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIE1JQiBtb2R1bGVzLgorLmJyCitEZWZhdWx0OiBEQVRBRElSL3NubXAvbWlicworLmJyCitVc2VkIGJ5CisuQlIgaW5pdF9taWIgIiwgIiBuZXRzbm1wX3JlYWRfbW9kdWxlICIsICIgcmVhZF9hbGxfbWlicworYW5kIChpbXBsaWNpdGx5KSBieQorLkJSIHJlYWRfbWliIC4KKy5UUCAxMAorTUlCUworQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBNSUIgbW9kdWxlcyB0byBsb2FkLgorLmJyCitUaGUgZGVmYXVsdCBsaXN0IG9mIG1vZHVsZXMgd2lsbCBkZXBlbmQgb24gaG93IHRoZSBOZXQtU05NUCBzb2Z0d2FyZQord2FzIG9yaWdpbmFsbHkgY29tcGlsZWQsIGJ1dCBpcyB0eXBpY2FsbHk6CitJUFwtTUlCOklGXC1NSUI6VENQXC1NSUI6VURQXC1NSUI6U05NUHYyXC1NSUI6UkZDMTIxM1wtTUlCOiBVQ0RcLVNOTVBcLU1JQjpIT1NUXC1SRVNPVVJDRVNcLU1JQgorLklQCitJZiB0aGUgdmFsdWUgb2YgdGhlCisuQiBNSUJTCitlbnZpcm9ubWVudGFsIHZhcmlhYmxlIHN0YXJ0cyB3aXRoIGEgJysnIGNoYXJhY3RlciwKK3RoZW4gdGhlc2UgTUlCIG1vZHVsZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdCBsaXN0LgorT3RoZXJ3aXNlIHRoZXNlIG1vZHVsZXMgKHBsdXMgYW55IHRoYXQgdGhleSBJTVBPUlQgZnJvbSkgd2lsbCBiZSBsb2FkZWQKKy5JIGluc3RlYWQKK29mIHRoZSBkZWZhdWx0IGxpc3QuCisuSVAKK0lmIHRoZSAKKy5CIE1JQlMKK2Vudmlyb25tZW50YWwgdmFyaWFibGUgaGFzIHRoZSB2YWx1ZQorLkJSIEFMTCAiIHRoZW4gIiByZWFkX2FsbF9taWJzCit3aWxsIGJlIGNhbGxlZCB0byBsb2FkIHRoZSBmdWxsIGNvbGxlY3Rpb24gb2YgYWxsIGF2YWlsYWJsZSBNSUIgbW9kdWxlcy4KKy5JUAorVXNlZCBieQorLkIgaW5pdF9taWIKK29ubHkuCisuVFAgMTAKK01JQkZJTEVTCitBIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIHRvIGxvYWQuCisuYnIKK0RlZmF1bHQ6IChub25lKQorLmJyCitVc2VkIGJ5CisuQiBpbml0X21pYgorb25seS4KKy5TSCAiU0VFIEFMU08iCituZXRzbm1wX3Nlc3Npb25fYXBpKDMpLCBuZXRzbm1wX3BkdV9hcGkoMyksIG5ldHNubXBfdmFyYmluZF9hcGkoMykKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMyBiL21hbi9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkN2RjYy4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0uVEggIm1pYl9oYW5kbGVyX21ldGhvZHMiIDMgIjIzIERlYyAyMDAxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1taWJfaGFuZGxlcl9tZXRob2RzIFwtIERlZmluZXMgdGhlIHN1YmhhbmRsZXJzIHRvIGJlIGNhbGxlZCBieSB0aGUgbXVsdGlwbGV4ZXIgaGVscGVyLiAKLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLVxmQyNpbmNsdWRlIDxtdWx0aXBsZXhlci5oPlxmUAotLlBQCi0uU0ggIkRFVEFJTEVEIERFU0NSSVBUSU9OIgotLlBQIAotRGVmaW5lcyB0aGUgc3ViaGFuZGxlcnMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBtdWx0aXBsZXhlciBoZWxwZXIuCi0uUFAKLQotCi0uU0ggIkFVVEhPUiIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zIGIvbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YjM5MTYuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0uVEggIm1pYl9tYWludGVuYW5jZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW1pYl9tYWludGVuYW5jZSBcLSAKLS5QUAotUm91dGluZXMgZm9yIG1haW50YWluaW5nIGEgTUlCIHRhYmxlLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dlbmVyaWNfZ2V0X2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZSBhIE1JQiBoYW5kbGVyIHN0cnVjdHVyZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2dlbmVyaWNfZnJlZV9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyKSIKLS5icgotLlJJICJcZklGcmVlIGEgTUlCIGhhbmRsZXIgc3RydWN0dXJlLCByZWxlYXNpbmcgYW55IHJlbGF0ZWQgcmVzb3VyY2VzLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfcmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIHZvaWQgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJsZV9pbmZvKSIKLS5icgotLlJJICJcZklSZWdpc3RlciBhIE1JQiB0YWJsZSB3aXRoIHRoZSBTTk1QIGFnZW50LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfdW5yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJVW5yZWdpc3RlciBhIE1JQiB0YWJsZSBmcm9tIHRoZSBTTk1QIGFnZW50LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9nZW5lcmljX2V4dHJhY3RfdGFibGVcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklFeHRyYWN0IHRoZSB0YWJsZSByZWxhdGluZyB0byBhIHJlcXVlc3RlZCB2YXJiaW5kLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9nZW5lcmljX2V4dHJhY3Rfcm93XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJRXh0cmFjdCB0aGUgcm93IHJlbGF0aW5nIHRvIGEgcmVxdWVzdGVkIHZhcmJpbmQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2dlbmVyaWNfaW5zZXJ0X3Jvd1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJQXNzb2NpYXRlIGEgKG5ldykgcm93IHdpdGggdGhlIHJlcXVlc3RlZCB2YXJiaW5kLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUm91dGluZXMgZm9yIG1haW50YWluaW5nIGEgTUlCIHRhYmxlLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidm9pZCBuZXRzbm1wX2dlbmVyaWNfZXh0cmFjdF9yb3cgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLUV4dHJhY3QgdGhlIHJvdyByZWxhdGluZyB0byBhIHJlcXVlc3RlZCB2YXJiaW5kLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5NSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2dlbmVyaWNfZXh0cmFjdF90YWJsZSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotRXh0cmFjdCB0aGUgdGFibGUgcmVsYXRpbmcgdG8gYSByZXF1ZXN0ZWQgdmFyYmluZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODkgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgIm5ldHNubXBfZ2VuZXJpY19mcmVlX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyKSIKLS5QUAotRnJlZSBhIE1JQiBoYW5kbGVyIHN0cnVjdHVyZSwgcmVsZWFzaW5nIGFueSByZWxhdGVkIHJlc291cmNlcy4gUG9zc2libHkgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgJ25ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyJyA/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTY1IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dlbmVyaWNfZ2V0X2hhbmRsZXIgKHZvaWQpIgotLlBQCi1DcmVhdGUgYSBNSUIgaGFuZGxlciBzdHJ1Y3R1cmUuIFRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgaW52b2tlZCB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgJ25ldHNubXBfZ2VuZXJpY19yZWdpc3Rlcicgcm91dGluZSAob3IgdGhlIHJlZ2lzdHJhdGlvbiBjb2RlIG9mIGEgc3ViLWhlbHBlciBiYXNlZCBvbiB0aGlzIGhlbHBlcikuCi0uUFAKLUFsdGVybmF0aXZlbHksIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIHRoZSBpbml0aWFsaXNhdGlvbiBjb2RlIG9mIGEgcGFydGljdWxhciBNSUIgdGFibGUgaW1wbGVtZW50YXRpb24uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU4IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkIG5ldHNubXBfZ2VuZXJpY19pbnNlcnRfcm93IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIHZvaWQgKiByb3cpIgotLlBQCi1Bc3NvY2lhdGUgYSAobmV3KSByb3cgd2l0aCB0aGUgcmVxdWVzdGVkIHZhcmJpbmQuIFRoZSByb3cgc2hvdWxkIGFsc28gYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBvdGhlciB2YXJiaW5kcyB0aGF0IHJlZmVyIHRvIHRoZSBzYW1lIGluZGV4IHZhbHVlcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDMgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfcmVnaXN0ZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCB2b2lkICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJsZV9pbmZvKSIKLS5QUAotUmVnaXN0ZXIgYSBNSUIgdGFibGUgd2l0aCB0aGUgU05NUCBhZ2VudC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNzIgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfdW5yZWdpc3RlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1VbnJlZ2lzdGVyIGEgTUlCIHRhYmxlIGZyb20gdGhlIFNOTVAgYWdlbnQuIFRoaXMgc2hvdWxkIGFsc28gcmVsZWFzZSB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhYmxlLiA/PyBJcyBhIHRhYmxlLXNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBuZWVkZWQsIG9yIHdvdWxkICduZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcicgKyAnbmV0c25tcF9nZW5lcmljX2ZyZWVfaGFuZGxlcicgZG8/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTgzIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMyBiL21hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3MjdiZC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjgzICswLDAgQEAKLS5USCAibWliIHBhcnNpbmcgYW5kIGRhdGF0eXBlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4iIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1taWIgcGFyc2luZyBhbmQgZGF0YXR5cGUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBcLSAKLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJfUHJlZml4TGlzdFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCcGFyc2VfaGludHNcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVHlwZWRlZnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCX1ByZWZpeExpc3RcZlAgKiBcZkJQcmVmaXhMaXN0UHRyXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQl9QcmVmaXhMaXN0XGZQIFxmQlByZWZpeExpc3RcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRW51bWVyYXRpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImVudW0gXGZCaW5ldF9hZGRyZXNzX3R5cGVcZlAgeyBcZkJJUFY0XGZQID0gIDEsIFxmQklQVjZcZlAgPSAgMiwgXGZCSVBWNFpcZlAgPSAgMywgXGZCSVBWNlpcZlAgPSAgNCwgXGZCRE5TXGZQID0gIDE2IH0iCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImludCBcZkJfc3ByaW50X2hleHN0cmluZ19saW5lXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgdV9jaGFyICpjcCwgc2l6ZV90IGxpbmVfbGVuKSIKLS5icgotLlJJICJcZklQcmludHMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfaGV4c3RyaW5nXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgdV9jaGFyICpjcCwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2FzY2lpc3RyaW5nXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgdV9jaGFyICpjcCwgc2l6ZV90IGxlbikiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIGFzY2lpIHN0cmluZyBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19vY3RldF9zdHJpbmdcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gb2N0ZXQgc3RyaW5nIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2NvdW50ZXI2NFxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIGNvdW50ZXIgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2Nfb3BhcXVlXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIG9iamVjdCBpZGVudGlmaWVyIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX29iamVjdF9pZGVudGlmaWVyXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIG9iamVjdCBpZGVudGlmaWVyIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX3RpbWV0aWNrc1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIHRpbWV0aWNrIFxmQnZhcmlhYmxlXGZQIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2hpbnRlZF9pbnRlZ2VyXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgbG9uZyB2YWwsIGNvbnN0IGNoYXIgZGVjaW1hbHR5cGUsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gaW50ZWdlciBhY2NvcmRpbmcgdG8gdGhlIGhpbnQgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfaW50ZWdlclxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBpbnRlZ2VyIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX3VpbnRlZ2VyXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIHVuc2lnbmVkIGludGVnZXIgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfZ2F1Z2VcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYSBnYXVnZSB2YWx1ZSBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19jb3VudGVyXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgY291bnRlciB2YWx1ZSBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19uZXR3b3JrYWRkcmVzc1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIG5ldHdvcmsgYWRkcmVzcyBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19pcGFkZHJlc3NcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gaXAtYWRkcmVzcyBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19udWxsXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgbnVsbCB2YWx1ZSBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19iaXRzdHJpbmdcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYSBiaXQgc3RyaW5nIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX25zYXBhZGRyZXNzXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2JhZHR5cGVcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklGYWxsYmFjayByb3V0aW5lIGZvciBhIGJhZCB0eXBlLCBwcmludHMgJ1ZhcmlhYmxlIGhhcyBiYWQgdHlwZScgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfYnlfdHlwZVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVVuaXZlcnNhbCBwcmludCByb3V0aW5lLCBwcmludHMgYSBcZkJ2YXJpYWJsZVxmUCBpbnRvIGEgYnVmZmVyIGFjY29yZGluZyB0byB0aGUgXGZCdmFyaWFibGVcZlAgdHlwZS4gXGZQIgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdHJlZVxmUCAqIFxmQmdldF90cmVlX2hlYWRcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlcyB0aGUgXGZCdHJlZVxmUCBoZWFkLiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJzbm1wX291dF90b2dnbGVfb3B0aW9uc1xmUCAoY2hhciAqb3B0aW9ucykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX291dF90b2dnbGVfb3B0aW9uc191c2FnZVxmUCAoY29uc3QgY2hhciAqbGVhZCwgRklMRSAqb3V0ZikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNubXBfaW5fb3B0aW9uc1xmUCAoY2hhciAqb3B0YXJnLCBpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJzbm1wX2luX3RvZ2dsZV9vcHRpb25zXGZQIChjaGFyICpvcHRpb25zKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfaW5fdG9nZ2xlX29wdGlvbnNfdXNhZ2VcZlAgKGNvbnN0IGNoYXIgKmxlYWQsIEZJTEUgKm91dGYpIgotLmJyCi0uUkkgIlxmSVByaW50cyBvdXQgYSBoZWxwIHVzYWdlIGZvciB0aGUgaW4qIHRvZ2dsZSBvcHRpb25zLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVnaXN0ZXJfbWliX2hhbmRsZXJzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfc2V0X21pYl9kaXJlY3RvcnlcZlAgKGNvbnN0IGNoYXIgKmRpcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQm5ldHNubXBfZ2V0X21pYl9kaXJlY3RvcnlcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9maXh1cF9taWJfZGlyZWN0b3J5XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9taWJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSUluaXRpYWxpc2VzIHRoZSBtaWIgcmVhZGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCaW5pdF9taWJcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2h1dGRvd25fbWliXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklVbmxvYWRzIGFsbCBtaWJzLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfbWliXGZQIChGSUxFICpmcCkiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIHRoZSBNSUJzIHRvIHRoZSBmaWxlIGZwLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfYXNjaWlfZHVtcFxmUCAoRklMRSAqZnApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2V0X2Z1bmN0aW9uXGZQIChzdHJ1Y3QgXGZCdHJlZVxmUCAqc3VidHJlZSkiCi0uYnIKLS5SSSAiXGZJU2V0J3MgdGhlIHByaW50aW5nIGZ1bmN0aW9uIHByaW50b21hdCBpbiBhIHN1YnRyZWUgYWNjb3JkaW5nIGl0J3MgdHlwZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVhZF9vYmppZFxmUCAoY29uc3QgY2hhciAqaW5wdXQsIG9pZCAqb3V0cHV0LCBzaXplX3QgKm91dF9sZW4pIgotLmJyCi0uUkkgIlxmSVJlYWRzIGFuIG9iamVjdCBpZGVudGlmaWVyIGZyb20gYW4gaW5wdXQgc3RyaW5nIGludG8gaW50ZXJuYWwgT0lEIGZvcm0uIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgaW50ICpidWZfb3ZlcmZsb3csIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnRyZWVcZlAgKiBcZkJuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWVcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBpbnQgKmJ1Zl9vdmVyZmxvdywgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2Nfb2JqaWRcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X29iamlkXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfb2JqaWRcZlAgKGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbikiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIG9pZCB0byBzdGRvdXQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJmcHJpbnRfb2JqaWRcZlAgKEZJTEUgKmYsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbikiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIG9pZCB0byBhIGZpbGUgZGVzY3JpcHRvci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfdmFyaWFibGVcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqXGZCdmFyaWFibGVcZlApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X3ZhcmlhYmxlXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqXGZCdmFyaWFibGVcZlApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfdmFyaWFibGVcZlAgKGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpcZkJ2YXJpYWJsZVxmUCkiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgXGZCdmFyaWFibGVcZlAgdG8gc3Rkb3V0LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZnByaW50X3ZhcmlhYmxlXGZQIChGSUxFICpmLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqXGZCdmFyaWFibGVcZlApIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIFxmQnZhcmlhYmxlXGZQIHRvIGEgZmlsZSBkZXNjcmlwdG9yLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY192YWx1ZVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpcZkJ2YXJpYWJsZVxmUCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfdmFsdWVcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpcZkJ2YXJpYWJsZVxmUCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF92YWx1ZVxmUCAoY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKlxmQnZhcmlhYmxlXGZQKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmZwcmludF92YWx1ZVxmUCAoRklMRSAqZiwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKlxmQnZhcmlhYmxlXGZQKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYnVpbGRfb2lkX3NlZ21lbnRcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyKSIKLS5icgotLlJJICJcZklUYWtlcyB0aGUgdmFsdWUgaW4gVkFSIGFuZCB0dXJucyBpdCBpbnRvIGFuIE9JRCBzZWdtZW50IGluIHZhci0+bmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCYnVpbGRfb2lkX25vYWxsb2NcZlAgKG9pZCAqaW4sIHNpemVfdCBpbl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgb2lkICpwcmVmaXgsIHNpemVfdCBwcmVmaXhfbGVuLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJidWlsZF9vaWRcZlAgKG9pZCAqKm91dCwgc2l6ZV90ICpvdXRfbGVuLCBvaWQgKnByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnBhcnNlX29pZF9pbmRleGVzXGZQIChvaWQgKm9pZEluZGV4LCBzaXplX3Qgb2lkTGVuLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmRhdGEpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJwYXJzZV9vbmVfb2lkX2luZGV4XGZQIChvaWQgKipvaWRTdGFydCwgc2l6ZV90ICpvaWRMZW4sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqZGF0YSwgaW50IGNvbXBsZXRlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZHVtcF9yZWFsbG9jX29pZF90b19pbmV0YWRkcmVzc1xmUCAoY29uc3QgaW50IGFkZHJfdHlwZSwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCB1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY2hhciBxdW90ZWNoYXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJkdW1wX3JlYWxsb2Nfb2lkX3RvX3N0cmluZ1xmUCAoY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCB1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY2hhciBxdW90ZWNoYXIpIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ0cmVlXGZQICogXGZCZ2V0X3RyZWVcZlAgKGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgc3RydWN0IFxmQnRyZWVcZlAgKnN1YnRyZWUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfZGVzY3JpcHRpb25cZlAgKG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKSIKLS5icgotLlJJICJcZklQcmludHMgb24gb2lkIGRlc2NyaXB0aW9uIG9uIHN0ZG91dC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmZwcmludF9kZXNjcmlwdGlvblxmUCAoRklMRSAqZiwgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpIgotLmJyCi0uUkkgIlxmSVByaW50cyBvbiBvaWQgZGVzY3JpcHRpb24gaW50byBhIGZpbGUgZGVzY3JpcHRvci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9kZXNjcmlwdGlvblxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19kZXNjcmlwdGlvblxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZ2V0X21vZHVsZV9ub2RlXGZQIChjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqXGZCbW9kdWxlXGZQLCBvaWQgKm9iamlkLCBzaXplX3QgKm9iamlkbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZ2V0X3dpbGRfbm9kZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpvYmppZCwgc2l6ZV90ICpvYmppZGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmdldF9ub2RlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKm9iamlkLCBzaXplX3QgKm9iamlkbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmNsZWFyX3RyZWVfZmxhZ3NcZlAgKHJlZ2lzdGVyIHN0cnVjdCBcZkJ0cmVlXGZQICp0cCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9vaWRfcmVwb3J0XGZQIChGSUxFICpmcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9sYWJlbGVkb2lkXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X29pZF9yZXBvcnRfZW5hYmxlX29pZFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9zdWZmaXhcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfc3ltYm9saWNcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfbWliY2hpbGRvaWRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJ1cHRpbWVfc3RyaW5nXGZQICh1X2xvbmcgdGltZXRpY2tzLCBjaGFyICpidWYpIgotLmJyCi0uUkkgIlxmSUNvbnZlcnRzIHRpbWV0aWNrcyB0byBob3VycywgbWludXRlcywgc2Vjb25kcyBzdHJpbmcuIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnVwdGltZV9zdHJpbmdfblxmUCAodV9sb25nIHRpbWV0aWNrcywgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgKiBcZkJzbm1wX3BhcnNlX29pZFxmUCAoY29uc3QgY2hhciAqYXJndiwgb2lkICpyb290LCBzaXplX3QgKnJvb3RsZW4pIgotLmJyCi0uUkkgIlxmSUdpdmVuIGEgc3RyaW5nLCBwYXJzZXMgYW4gb2lkIG91dCBvZiBpdCAoaWYgcG9zc2libGUpLiBcZlAiCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJwYXJzZV9vY3RldF9oaW50XGZQIChjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp2YWx1ZSwgdW5zaWduZWQgY2hhciAqKm5ld192YWwsIGludCAqbmV3X3ZhbF9sZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciBcZkJtaWJfdG9fYXNuX3R5cGVcZlAgKGludCBtaWJfdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc3RyMm9pZFxmUCAoY29uc3QgY2hhciAqUywgb2lkICpPLCBpbnQgTCkiCi0uYnIKLS5SSSAiXGZJQ29udmVydHMgYSBzdHJpbmcgdG8gaXRzIE9JRCBmb3JtLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29pZDJjaGFyc1xmUCAoY2hhciAqQywgaW50IEwsIGNvbnN0IG9pZCAqTykiCi0uYnIKLS5SSSAiXGZJQ29udmVydHMgYW4gT0lEIHRvIGl0cyBjaGFyYWN0ZXIgZm9ybS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vaWQyc3RyXGZQIChjaGFyICpTLCBpbnQgTCwgb2lkICpPKSIKLS5icgotLlJJICJcZklDb252ZXJ0cyBhbiBPSUQgdG8gaXRzIHN0cmluZyBmb3JtLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2J5X3R5cGVcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2hleHN0cmluZ1xmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgdV9jaGFyICpjcCwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfYXNjaWlzdHJpbmdcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IHVfY2hhciAqY3AsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X29jdGV0X3N0cmluZ1xmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfb3BhcXVlXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9vYmplY3RfaWRlbnRpZmllclxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfdGltZXRpY2tzXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9oaW50ZWRfaW50ZWdlclxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgbG9uZyB2YWwsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9pbnRlZ2VyXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF91aW50ZWdlclxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfZ2F1Z2VcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2NvdW50ZXJcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X25ldHdvcmthZGRyZXNzXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9pcGFkZHJlc3NcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X251bGxcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2JpdHN0cmluZ1xmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfbnNhcGFkZHJlc3NcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2NvdW50ZXI2NFxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfYmFkdHlwZVxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ0cmVlXGZQICogXGZCdHJlZV9oZWFkXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ0cmVlXGZQICogXGZCTWliXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJSRkMxMjEzX01JQlxmUCBbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSB9IgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQlByZWZpeExpc3RcZlAgXGZCbWliX3ByZWZpeGVzXGZQIFtdIgotLmJyCi0uaW4gLTFjCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBfc3ByaW50X2hleHN0cmluZ19saW5lICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgdV9jaGFyICogY3AsIHNpemVfdCBsaW5lX2xlbikiCi0uUFAKLVByaW50cyBhIGhleGFkZWNpbWFsIHN0cmluZyBpbnRvIGEgYnVmZmVyLiBUaGUgY2hhcmFjdGVycyBwb2ludGVkIGJ5ICpjcCBhcmUgZW5jb2RlZCBhcyBoZXhhZGVjaW1hbCBzdHJpbmcuCi0uUFAKLUlmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBhZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIGluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSWNwXGZQIHRoZSBhcnJheSBvZiBjaGFyYWN0ZXJzIHRvIGVuY29kZS4gCi0uYnIKLVxmSWxpbmVfbGVuXGZQIHRoZSBhcnJheSBsZW5ndGggb2YgY3AuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjc0IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBidWlsZF9vaWQgKG9pZCAqKiBvdXQsIHNpemVfdCAqIG91dF9sZW4sIG9pZCAqIHByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4ZXMpIgotLlBQCi14eHgtcmtzOiBzaG91bGQgZnJlZSBwcmV2aW91cyB2YWx1ZT8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNTgyIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBidWlsZF9vaWRfc2VnbWVudCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyKSIKLS5QUAotVGFrZXMgdGhlIHZhbHVlIGluIFZBUiBhbmQgdHVybnMgaXQgaW50byBhbiBPSUQgc2VnbWVudCBpbiB2YXItPm5hbWUuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QRVJSX0dFTkVSUiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM0NDggb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBmcHJpbnRfZGVzY3JpcHRpb24gKEZJTEUgKiBmLCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpIgotLlBQCi1QcmludHMgb24gb2lkIGRlc2NyaXB0aW9uIGludG8gYSBmaWxlIGRlc2NyaXB0b3IuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJZlxmUCBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIHByaW50IHRvLiAKLS5icgotXGZJb2JqaWRcZlAgVGhlIG9iamVjdCBpZGVudGlmaWVyLiAKLS5icgotXGZJb2JqaWRsZW5cZlAgVGhlIG9iamVjdCBpZCBsZW5ndGguIAotLmJyCi1cZkl3aWR0aFxmUCBOdW1iZXIgb2Ygc3ViaWRlbnRpZmllcnMuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDQ1MiBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIGZwcmludF9vYmppZCAoRklMRSAqIGYsIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pIgotLlBQCi1QcmludHMgYW4gb2lkIHRvIGEgZmlsZSBkZXNjcmlwdG9yLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWZcZlAgVGhlIGZpbGUgZGVzY3JpcHRvciB0byBwcmludCB0by4gCi0uYnIKLVxmSW9iamlkXGZQIFRoZSBvaWQgdG8gcHJpbnQgCi0uYnIKLVxmSW9iamlkbGVuXGZQIFRoZSBsZW5ndGggb2Ygb2lkaWQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzE2NyBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIGZwcmludF92YXJpYWJsZSAoRklMRSAqIGYsIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhcmlhYmxlKSIKLS5QUAotUHJpbnRzIGEgXGZCdmFyaWFibGVcZlAgdG8gYSBmaWxlIGRlc2NyaXB0b3IuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJZlxmUCBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIHByaW50IHRvLiAKLS5icgotXGZJb2JqaWRcZlAgVGhlIG9iamVjdCBpZC4gCi0uYnIKLVxmSW9iamlkbGVuXGZQIFRoZSBsZW5ndGggb2YgdGVoIG9iamVjdCBpZC4gCi0uYnIKLVxmSVxmQnZhcmlhYmxlXGZQXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBwcmludC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMzIxIG9mIGZpbGUgbWliLmMuCi0uU1MgInN0cnVjdCBcZkJ0cmVlXGZQKiBnZXRfdHJlZV9oZWFkICh2b2lkKVxmQyBbcmVhZF1cZlAiCi0uUFAKLVJldHJpZXZlcyB0aGUgXGZCdHJlZVxmUCBoZWFkLiBcZkJSZXR1cm5zOlxmUAotLlJTIDQKLXRoZSBcZkJ0cmVlXGZQIGhlYWQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjAyMCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgZ2V0X3dpbGRfbm9kZSAoY29uc3QgY2hhciAqIG5hbWUsIG9pZCAqIG9iamlkLCBzaXplX3QgKiBvYmppZGxlbikiXGZCU2VlIGFsc286XGZQCi0uUlMgNAotY29tbWVudHMgb24gZmluZF9iZXN0X3RyZWVfbm9kZSBmb3IgdXNhZ2UgYWZ0ZXIgZmlyc3QgdGltZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NDkxIG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgbmV0c25tcF9maXh1cF9taWJfZGlyZWN0b3J5ICh2b2lkKSIKLS5QUAotc3dhcCBpbiB0aGUgbmV3IHZhbHVlIGFuZCByZXBlYXQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDgzIG9mIGZpbGUgbWliLmMuCi0uU1MgImNoYXIqIG5ldHNubXBfZ2V0X21pYl9kaXJlY3RvcnkgKHZvaWQpIgotLlBQCi1DaGVjayBpZiB0aGUgZW52aXJvbm1lbnQgXGZCdmFyaWFibGVcZlAgaXMgc2V0Ci0uUFAKLU5vdCBzZXQgdXNlIGhhcmQgY29kZWQgcGF0aCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0MzYgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfbWliICh2b2lkKSIKLS5QUAotSW5pdGlhbGlzZXMgdGhlIG1pYiByZWFkZXIuIFJlYWRzIGluIGFsbCBzZXR0aW5ncyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTMwIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBuZXRzbm1wX29pZDJjaGFycyAoY2hhciAqIEMsIGludCBMLCBjb25zdCBvaWQgKiBPKSIKLS5QUAotQ29udmVydHMgYW4gT0lEIHRvIGl0cyBjaGFyYWN0ZXIgZm9ybS4gaW4gZXhhbXBsZSA1IC4gMSAuIDIgLiAzIC4gNCAuIDUgPSAxMjM0NQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSUNcZlAgVGhlIGNoYXJhY3RlciBidWZmZXIuIAotLmJyCi1cZklMXGZQIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4gCi0uYnIKLVxmSU9cZlAgVGhlIG9pZC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgb24gU3VjZXNzLCAxIG9uIGZhaWx1cmUuIAotLlJFCi0uUFAKLQotLlBQCi1sZW5ndGggCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2Mjc4IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBuZXRzbm1wX29pZDJzdHIgKGNoYXIgKiBTLCBpbnQgTCwgb2lkICogTykiCi0uUFAKLUNvbnZlcnRzIGFuIE9JRCB0byBpdHMgc3RyaW5nIGZvcm0uIGluIGV4YW1wbGUgNSAuICdoJyAuICdlJyAuICdsJyAuICdsJyAuICdvJyA9ICdoZWxsb1xcMCcgKG51bGwgdGVybWluYXRlZCkKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklTXGZQIFRoZSBjaGFyYWN0ZXIgc3RyaW5nIGJ1ZmZlci4gCi0uYnIKLVxmSUxcZlAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGJ1ZmZlci4gCi0uYnIKLVxmSU9cZlAgVGhlIG9pZC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgb24gU3VjZXNzLCAxIG9uIGZhaWx1cmUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjMwNiBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIG5ldHNubXBfc2V0X21pYl9kaXJlY3RvcnkgKGNvbnN0IGNoYXIgKiBkaXIpIgotLlBQCi1OZXcgZGlyIHN0YXJ0cyB3aXRoICcrJywgdGh1cyB3ZSBhZGQgaXQuCi0uUFAKLUlmIGRpciBzdGFydHMgd2l0aCAnKycgc2tpcCAnKycgaXQuCi0uUFAKLXNldF9zdHJpbmcgY2FsbHMgc3RyZHVwLCBzbyBpZiB3ZSBhbGxvY2F0ZWQgbWVtb3J5LCBmcmVlIGl0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjM4MSBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgbmV0c25tcF9zdHIyb2lkIChjb25zdCBjaGFyICogUywgb2lkICogTywgaW50IEwpIgotLlBQCi1Db252ZXJ0cyBhIHN0cmluZyB0byBpdHMgT0lEIGZvcm0uIGluIGV4YW1wbGUgJ2hlbGxvJyA9IDUgLiAnaCcgLiAnZScgLiAnbCcgLiAnbCcgLiAnbycKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklTXGZQIFRoZSBzdHJpbmcuIAotLmJyCi1cZklPXGZQIFRoZSBvaWQuIAotLmJyCi1cZklMXGZQIFRoZSBsZW5ndGggb2YgdGhlIG9pZC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgb24gU3VjZXNzLCAxIG9uIGZhaWx1cmUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjI0MyBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIHByaW50X2Rlc2NyaXB0aW9uIChvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpIgotLlBQCi1QcmludHMgb24gb2lkIGRlc2NyaXB0aW9uIG9uIHN0ZG91dC4gXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCZnByaW50X2Rlc2NyaXB0aW9uXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDQzNiBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIHByaW50X21pYiAoRklMRSAqIGZwKSIKLS5QUAotUHJpbnRzIHRoZSBNSUJzIHRvIHRoZSBmaWxlIGZwLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWZwXGZQIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gcHJpbnQgdG8uIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjc0NSBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIHByaW50X29iamlkIChjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKSIKLS5QUAotUHJpbnRzIGFuIG9pZCB0byBzdGRvdXQuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJb2JqaWRcZlAgVGhlIG9pZCB0byBwcmludCAKLS5icgotXGZJb2JqaWRsZW5cZlAgVGhlIGxlbmd0aCBvZiBvaWRpZC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMTUzIG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgcHJpbnRfdmFyaWFibGUgKGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhcmlhYmxlKSIKLS5QUAotUHJpbnRzIGEgXGZCdmFyaWFibGVcZlAgdG8gc3Rkb3V0LiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW9iamlkXGZQIFRoZSBvYmplY3QgaWQuIAotLmJyCi1cZklvYmppZGxlblxmUCBUaGUgbGVuZ3RoIG9mIHRlaCBvYmplY3QgaWQuIAotLmJyCi1cZklcZkJ2YXJpYWJsZVxmUFxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gcHJpbnQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzMwNSBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgcmVhZF9vYmppZCAoY29uc3QgY2hhciAqIGlucHV0LCBvaWQgKiBvdXRwdXQsIHNpemVfdCAqIG91dF9sZW4pIgotLlBQCi1SZWFkcyBhbiBvYmplY3QgaWRlbnRpZmllciBmcm9tIGFuIGlucHV0IHN0cmluZyBpbnRvIGludGVybmFsIE9JRCBmb3JtLiBXaGVuIGNhbGxlZCwgb3V0X2xlbiBtdXN0IGhvbGQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYXJyYXkuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaW5wdXRcZlAgdGhlIGlucHV0IHN0cmluZy4gCi0uYnIKLVxmSW91dHB1dFxmUCB0aGUgb2lkIHdpcnRlLiAKLS5icgotXGZJb3V0X2xlblxmUCBudW1iZXIgb2Ygc3ViaWQncyBpbiBvdXRwdXQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIGlmIHN1Y2Nlc3NmdWwuCi0uUkUKLS5QUAotSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMCBhbmQgTUFZIHNldCBzbm1wX2Vycm5vLiBzbm1wX2Vycm5vIGlzIE5PVCBzZXQgaWYgU0VUX1NOTVBfRVJST1IgZXZhbHVhdGVzIHRvIG5vdGhpbmcuIFRoaXMgY2FuIG1ha2UgbXVsdGktdGhyZWFkZWQgdXNlIGEgdGlueSBiaXQgbW9yZSByb2J1c3QuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjg0MyBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIHNldF9mdW5jdGlvbiAoc3RydWN0IFxmQnRyZWVcZlAgKiBzdWJ0cmVlKSIKLS5QUAotU2V0J3MgdGhlIHByaW50aW5nIGZ1bmN0aW9uIHByaW50b21hdCBpbiBhIHN1YnRyZWUgYWNjb3JkaW5nIGl0J3MgdHlwZS4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklzdWJ0cmVlXGZQIFRoZSBzdWJ0cmVlIHRvIHNldC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzY2IG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgc2h1dGRvd25fbWliICh2b2lkKSIKLS5QUAotVW5sb2FkcyBhbGwgbWlicy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzIwIG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgc25tcF9pbl90b2dnbGVfb3B0aW9uc191c2FnZSAoY29uc3QgY2hhciAqIGxlYWQsIEZJTEUgKiBvdXRmKSIKLS5QUAotUHJpbnRzIG91dCBhIGhlbHAgdXNhZ2UgZm9yIHRoZSBpbiogdG9nZ2xlIG9wdGlvbnMuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbGVhZFxmUCBUaGUgbGVhZCB0byBwcmludCBmb3IgZXZlcnkgbGluZS4gCi0uYnIKLVxmSW91dGZcZlAgVGhlIGZpbGUgZGVzY3JpcHRvciB0byB3cml0ZSB0by4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjkzIG9mIGZpbGUgbWliLmMuCi0uU1MgIm9pZCogc25tcF9wYXJzZV9vaWQgKGNvbnN0IGNoYXIgKiBhcmd2LCBvaWQgKiByb290LCBzaXplX3QgKiByb290bGVuKSIKLS5QUAotR2l2ZW4gYSBzdHJpbmcsIHBhcnNlcyBhbiBvaWQgb3V0IG9mIGl0IChpZiBwb3NzaWJsZSkuIEl0IHdpbGwgdHJ5IHRvIHBhcnNlIGl0IGJhc2VkIG9uIHByZWRldGVybWluZWQgY29uZmlndXJhdGlvbiBpZiBwcmVzZW50IG9yIGJ5IGV2ZXJ5IG1ldGhvZCBwb3NzaWJsZSBvdGhlcndpc2UuIElmIGEgc3VmZml4IGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgTkVUU05NUF9EU19MSUJfT0lEU1VGRklYLCBpdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBpbnB1dCBzdHJpbmcgYmVmb3JlIHByb2Nlc3NpbmcuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYXJndlxmUCBUaGUgT0lEIHRvIHN0cmluZyBwYXJzZSAKLS5icgotXGZJcm9vdFxmUCBBbiBPSUQgYXJyYXkgd2hlcmUgdGhlIHJlc3VsdHMgYXJlIHN0b3JlZC4gCi0uYnIKLVxmSXJvb3RsZW5cZlAgVGhlIG1heCBsZW5ndGggb2YgdGhlIGFycmF5IGdvaW5nIGluIGFuZCB0aGUgZGF0YSBsZW5ndGggY29taW5nIG91dC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVRoZSByb290IG9pZCBwb2ludGVyIGlmIHN1Y2Nlc3NmdWwsIG9yIE5VTEwgb3RoZXJ3aXNlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU4NDkgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2FzY2lpc3RyaW5nICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgdV9jaGFyICogY3AsIHNpemVfdCBsZW4pIgotLlBQCi1QcmludHMgYW4gYXNjaWkgc3RyaW5nIGludG8gYSBidWZmZXIuIFRoZSBjaGFyYWN0ZXJzIHBvaW50ZWQgYnkgKmNwIGFyZSBlbmNvZGVkIGFzIGFuIGFzY2lpIHN0cmluZy4KLS5QUAotSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIGFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgaW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJY3BcZlAgdGhlIGFycmF5IG9mIGNoYXJhY3RlcnMgdG8gZW5jb2RlLiAKLS5icgotXGZJbGVuXGZQIHRoZSBhcnJheSBsZW5ndGggb2YgY3AuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzcwIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19iYWR0eXBlICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1GYWxsYmFjayByb3V0aW5lIGZvciBhIGJhZCB0eXBlLCBwcmludHMgJ1ZhcmlhYmxlIGhhcyBiYWQgdHlwZScgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTkwNSBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfYml0c3RyaW5nICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYSBiaXQgc3RyaW5nIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE3NjYgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2J5X3R5cGUgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVVuaXZlcnNhbCBwcmludCByb3V0aW5lLCBwcmludHMgYSBcZkJ2YXJpYWJsZVxmUCBpbnRvIGEgYnVmZmVyIGFjY29yZGluZyB0byB0aGUgXGZCdmFyaWFibGVcZlAgdHlwZS4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTk0MCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfY291bnRlciAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGEgY291bnRlciB2YWx1ZSBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTMzIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19jb3VudGVyNjQgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhIGNvdW50ZXIgaW50byBhIGJ1ZmZlci4gVGhlIFxmQnZhcmlhYmxlXGZQIHZhciBpcyBlbmNvZGVkIGFzIGEgY291bnRlciB2YWx1ZS4KLS5QUAotSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODQ5IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19nYXVnZSAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGEgZ2F1Z2UgdmFsdWUgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTQ2MCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfaGludGVkX2ludGVnZXIgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBsb25nIHZhbCwgY29uc3QgY2hhciBkZWNpbWFsdHlwZSwgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhbiBpbnRlZ2VyIGFjY29yZGluZyB0byB0aGUgaGludCBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YWxcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWRlY2ltYWx0eXBlXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBfTk9UXyBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTg2IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19pbnRlZ2VyICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYW4gaW50ZWdlciBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjYwIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19pcGFkZHJlc3MgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhbiBpcC1hZGRyZXNzIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2NjIgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX25ldHdvcmthZGRyZXNzICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYSBuZXR3b3JrIGFkZHJlc3MgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU5NiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfbnVsbCAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGEgbnVsbCB2YWx1ZSBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNzIyIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19vYmplY3RfaWRlbnRpZmllciAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGFuIG9iamVjdCBpZGVudGlmaWVyIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwNDIgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX29jdGV0X3N0cmluZyAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGFuIG9jdGV0IHN0cmluZyBpbnRvIGEgYnVmZmVyLiBUaGUgXGZCdmFyaWFibGVcZlAgdmFyIGlzIGVuY29kZWQgYXMgb2N0ZXQgc3RyaW5nLgotLlBQCi1JZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MzAgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX29wYXF1ZSAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGFuIG9iamVjdCBpZGVudGlmaWVyIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk1MiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfdGltZXRpY2tzICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYSB0aW1ldGljayBcZkJ2YXJpYWJsZVxmUCBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTEyIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY191aW50ZWdlciAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGFuIHVuc2lnbmVkIGludGVnZXIgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM2MyBvZiBmaWxlIG1pYi5jLgotLlNTICJjaGFyKiB1cHRpbWVfc3RyaW5nICh1X2xvbmcgdGltZXRpY2tzLCBjaGFyICogYnVmKSIKLS5QUAotQ29udmVydHMgdGltZXRpY2tzIHRvIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIHN0cmluZy4gQ01VIGNvbXBhdGlibGUgZG9lcyBub3Qgc2hvdyBjZW50aXNlY29uZHMuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdGltZXRpY2tzXGZQIFRoZSB0aW1ldGlja3MgdG8gY29udmVydC4gCi0uYnIKLVxmSWJ1ZlxmUCBCdWZmZXIgdG8gd3JpdGUgdG8sIGhhcyB0byBiZSBhdCBsZWFzdCA0MCBCeXRlcyBsYXJnZS4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVRoZSBidWZmZXIKLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci11cHRpbWVTdHJpbmcgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1ODE0IG9mIGZpbGUgbWliLmMuCi0uU0ggIlZhcmlhYmxlIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQlByZWZpeExpc3RcZlAgbWliX3ByZWZpeGVzW10iXGZCSW5pdGlhbCB2YWx1ZTpcZlAKLS5QUAotLm5mCi0gewotICAgIHsmU3RhbmRhcmRfUHJlZml4WzBdfSwgICAgICAKLSAgICB7Jy5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yJ30sCi0gICAgeycuaXNvLm9yZy5kb2QuaW50ZXJuZXQuZXhwZXJpbWVudGFsJ30sCi0gICAgeycuaXNvLm9yZy5kb2QuaW50ZXJuZXQucHJpdmF0ZSd9LAotICAgIHsnLmlzby5vcmcuZG9kLmludGVybmV0LnNubXBQYXJ0aWVzJ30sCi0gICAgeycuaXNvLm9yZy5kb2QuaW50ZXJuZXQuc25tcFNlY3JldHMnfSwKLSAgICB7TlVMTCwgMH0gICAgICAgICAgICAgICAgICAgCi19Ci0uZmkKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2MyBvZiBmaWxlIG1pYi5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMyBiL21hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk0MWIwOS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0uVEggIm1vZGVfZW5kX2NhbGwiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1tb2RlX2VuZF9jYWxsIFwtIAotLlBQCi1BdCB0aGUgZW5kIG9mIGEgc2VyaWVzIG9mIHJlcXVlc3RzLCBjYWxsIGFub3RoZXIgaGFuZGxlciBob29rLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9tb2RlX2VuZF9jYWxsX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbW9kZV9oYW5kbGVyX2xpc3RcZlAgKmVuZGxpc3QpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBtb2RlX2VuZF9jYWxsIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9tb2RlX2hhbmRsZXJfbGlzdFxmUCAqIFxmQm5ldHNubXBfbW9kZV9lbmRfY2FsbF9hZGRfbW9kZV9jYWxsYmFja1xmUCAoXGZCbmV0c25tcF9tb2RlX2hhbmRsZXJfbGlzdFxmUCAqZW5kbGlzdCwgaW50IG1vZGUsIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmNhbGxiYWNraCkiCi0uYnIKLS5SSSAiXGZJYWRkcyBhIG1vZGUgc3BlY2lmaWMgY2FsbGJhY2sgdG8gdGhlIGNhbGxiYWNrIGxpc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfbW9kZV9lbmRfY2FsbF9oZWxwZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotQXQgdGhlIGVuZCBvZiBhIHNlcmllcyBvZiByZXF1ZXN0cywgY2FsbCBhbm90aGVyIGhhbmRsZXIgaG9vay4gCi0KLUhhbmRsZXJzIHRoYXQgd2FudCB0byBsb29wIHRocm91Z2ggYSBzZXJpZXMgb2YgcmVxdWVzdHMgYW5kIHRoZW4gcmVjZWl2ZSBhIGNhbGxiYWNrIGF0IHRoZSBlbmQgb2YgYSBwYXJ0aWN1bGFyIE1PREUgY2FuIHVzZSB0aGlzIGhlbHBlciB0byBtYWtlIHRoaXMgcG9zc2libGUuIEZvciBtb3N0IG1vZHVsZXMsIHRoaXMgaXMgbm90IG5lZWRlZCBhcyB0aGUgaGFuZGxlciBpdHNlbGYgY291bGQgcGVyZm9ybSBhIGZvcigpIGxvb3AgYXJvdW5kIHRoZSByZXF1ZXN0IGxpc3QgYW5kIHRoZW4gcGVyZm9ybSBpdHMgYWN0aW9ucyBhZnRlcndhcmRzLiBIb3dldmVyLCBpZiBzb21ldGhpbmcgbGlrZSB0aGUgc2VyaWFsaXplIGhlbHBlciBpcyBpbiB1c2UgdGhpcyBpc24ndCBwb3NzaWJsZSBiZWNhdXNlIG5vdCBhbGwgdGhlIHJlcXVlc3RzIGZvciBhIGdpdmVuIGhhbmRsZXIgYXJlIGJlaW5nIHBhc3NlZCBkb3dud2FyZCBpbiBhIHNpbmdsZSBncm91cC4gVGh1cywgdGhpcyBoZWxwZXIgKm11c3QqIGJlIGFkZGVkIGFib3ZlIG90aGVyIGhlbHBlcnMgbGlrZSB0aGUgc2VyaWFsaXplIGhlbHBlciB0byBiZSB1c2VmdWwuCi0uUFAKLU11bHRpcGxlIG1vZGUgc3BlY2lmaWMgaGFuZGxlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgYW5kIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVnZXN0ZXJlZCBpbi4gQ2FsbGJhY2tzIHJlZ2VzdGVyZCB3aXRoIGEgbW9kZSBvZiBORVRTTk1QX01PREVfRU5EX0FMTF9NT0RFUyB3aWxsIGJlIGNhbGxlZCBmb3IgYWxsIG1vZGVzLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfbW9kZV9lbmRfY2FsbF9oYW5kbGVyIChcZkJuZXRzbm1wX21vZGVfaGFuZGxlcl9saXN0XGZQICogZW5kbGlzdCkiCi0uUFAKLXJldHVybnMgYSBtb2RlX2VuZF9jYWxsIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJZW5kbGlzdFxmUCBUaGUgY2FsbGJhY2sgbGlzdCBmb3IgdGhlIGhhbmRsZXIgdG8gbWFrZSB1c2Ugb2YuIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotQW4gaW5qZWN0YWJsZSBOZXQtU05NUCBoYW5kbGVyLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ1IG9mIGZpbGUgbW9kZV9lbmRfY2FsbC5jLgotLlNTICJcZkJuZXRzbm1wX21vZGVfaGFuZGxlcl9saXN0XGZQKiBuZXRzbm1wX21vZGVfZW5kX2NhbGxfYWRkX21vZGVfY2FsbGJhY2sgKFxmQm5ldHNubXBfbW9kZV9oYW5kbGVyX2xpc3RcZlAgKiBlbmRsaXN0LCBpbnQgbW9kZSwgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGNhbGxiYWNraCkiCi0uUFAKLWFkZHMgYSBtb2RlIHNwZWNpZmljIGNhbGxiYWNrIHRvIHRoZSBjYWxsYmFjayBsaXN0LiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWVuZGxpc3RcZlAgdGhlIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBmb3IgdGhlIG1vZGVfZW5kX2NhbGwgaGVscGVyLiBDYW4gYmUgTlVMTCB0byBjcmVhdGUgYSBuZXcgbGlzdC4gCi0uYnIKLVxmSW1vZGVcZlAgdGhlIG1vZGUgdG8gYmUgY2FsbGVkIHVwb24uIEEgbW9kZSBvZiBORVRTTk1QX01PREVfRU5EX0FMTF9NT0RFUyA9IGFsbCBtb2Rlcy4gCi0uYnIKLVxmSWNhbGxiYWNraFxmUCB0aGUgbmV0c25tcF9taWJfaGFuZGxlciBjYWxsYmFjayB0byBjYWxsLiAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXRoZSBuZXcgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGxpc3QgdXBvbiBzdWNjZXNzLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY1IG9mIGZpbGUgbW9kZV9lbmRfY2FsbC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX211bHRpcGxleGVyLjMgYi9tYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmIyYzRkLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX211bHRpcGxleGVyLjMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0uVEggIm11bHRpcGxleGVyIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbXVsdGlwbGV4ZXIgXC0gCi0uUFAKLVNwbGl0cyBtb2RlIHJlcXVlc3RzIGludG8gY2FsbHMgdG8gZGlmZmVyZW50IGhhbmRsZXJzLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9tdWx0aXBsZXhlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHNcZlAgKnJlcSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIG11bHRpcGxpeGVyIGhhbmRsZXIgZ2l2ZW4gYSBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHNcZlAgc3RydWN0dXJlIG9mIHN1YmhhbmRsZXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX211bHRpcGxleGVyX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZklpbXBsZW1lbnRzIHRoZSBtdWx0aXBsZXhlciBoZWxwZXIgXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVNwbGl0cyBtb2RlIHJlcXVlc3RzIGludG8gY2FsbHMgdG8gZGlmZmVyZW50IGhhbmRsZXJzLiAKLQotVGhlIG11bHRpcGxleGVyIGhlbHBlciBsZXRzIHlvdSBzcGxpdCB0aGUgY2FsbGluZyBjaGFpbiBkZXBlbmRpbmcgb24gdGhlIGNhbGxpbmcgbW9kZSAoZ2V0IHZzIGdldG5leHQgdnMgc2V0KS4gVXNlZnVsIGlmIHlvdSB3YW50IGRpZmZlcmVudCByb3V0aW5lcyB0byBoYW5kbGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgU05NUCByZXF1ZXN0cywgd2hpY2ggaXMgdmVyeSBjb21tb24gZm9yIEdFVCB2cyBTRVQgdHlwZSBhY3Rpb25zLgotLlBQCi1GdW5jdGlvbmFsbHk6Ci0uUFAKLS5JUCAiMS4iIDQKLUdFVCByZXF1ZXN0cyBjYWxsIHRoZSBnZXRfbWV0aG9kCi0uSVAgIjIuIiA0Ci1HRVRORVhUIHJlcXVlc3RzIGNhbGwgdGhlIGdldG5leHRfbWV0aG9kLCBvciBpZiBub3QgcHJlc2VudCwgdGhlIGdldF9tZXRob2QuCi0uSVAgIjMuIiA0Ci1HRVRCVUxLIHJlcXVlc3RzIGNhbGwgdGhlIGdldGJ1bGtfbWV0aG9kLCBvciBpZiBub3QgcHJlc2VudCwgdGhlIGdldG5leHRfbWV0aG9kLCBvciBpZiBldmVuIHRoYXQgaXNuJ3QgcHJlc2VudCB0aGUgZ2V0X21ldGhvZC4KLS5JUCAiNC4iIDQKLVNFVCByZXF1ZXN0cyBjYWxsIHRoZSBzZXRfbWV0aG9kLCBvciBpZiBub3QgcHJlc2VudCByZXR1cm4gYSBTTk1QX0VSUl9OT1RXUklUQUJMRSBlcnJvci4gCi0uUFAKLQotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9tdWx0aXBsZXhlcl9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHNcZlAgKiByZXEpIgotLlBQCi1yZXR1cm5zIGEgbXVsdGlwbGl4ZXIgaGFuZGxlciBnaXZlbiBhIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kc1xmUCBzdHJ1Y3R1cmUgb2Ygc3ViaGFuZGxlcnMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzMgb2YgZmlsZSBtdWx0aXBsZXhlci5jLgotLlNTICJpbnQgbmV0c25tcF9tdWx0aXBsZXhlcl9oZWxwZXJfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1pbXBsZW1lbnRzIHRoZSBtdWx0aXBsZXhlciBoZWxwZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NCBvZiBmaWxlIG11bHRpcGxleGVyLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmU2ZmU0Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS5USCAibmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MgXC0gCi0uUFAKLVRoZSBhZ2VudCB0cmFuc2FjdGlvbiByZXF1ZXN0IHN0cnVjdHVyZS4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxzbm1wX2FnZW50Lmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImludCBcZkJtb2RlXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25fc1xmUCAqIFxmQmFzcFxmUCIKLS5icgotLlJJICJcZklwZHUgY29udGFpbnMgYXV0aGluZm8sIGVnIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBcZkJhZ2VudF9kYXRhXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIGFnZW50IHRyYW5zYWN0aW9uIHJlcXVlc3Qgc3RydWN0dXJlLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotLlBQCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTggb2YgZmlsZSBzbm1wX2FnZW50LmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInN0cnVjdCBcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25fc1xmUCogXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fczo6YXNwXGZQXGZDIFtyZWFkXVxmUCIKLS5QUAotcGR1IGNvbnRhaW5zIGF1dGhpbmZvLCBlZyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2MiBvZiBmaWxlIHNubXBfYWdlbnQuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlODUyYmMuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0uVEggIm5ldHNubXBfY29sdW1uX2luZm9fdCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfY29sdW1uX2luZm9fdCBcLSAKLS5QUAotY29sdW1uIGluZm8gc3RydWN0LiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHRhYmxlLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImNoYXIgXGZCaXNSYW5nZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyIFxmQmxpc3RfY291bnRcZlAiCi0uYnIKLS5SSSAiXGZJb25seSB1c2VmdWwgaWYgaXNSYW5nZSA9PSAwIFxmUCIKLS50aSAtMWMKLS5SSSAidW5pb24geyIKLS5icgotLnRpIC0xYwotLlJJICIgICB1bnNpZ25lZCBpbnQgXGZCcmFuZ2VcZlAgWzJdIgotLmJyCi0udGkgLTFjCi0uUkkgIiAgIHVuc2lnbmVkIGludCAqIFxmQmxpc3RcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAifSBcZkJkZXRhaWxzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2NvbHVtbl9pbmZvX3RcZlAgKiBcZkJuZXh0XGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotY29sdW1uIGluZm8gc3RydWN0LiAKLQotT1ZFUkxBUFBJTkcgUkFOR0VTIEFSRSBOT1QgU1VQUE9SVEVELiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUyIG9mIGZpbGUgdGFibGUuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiY2hhciBcZkJuZXRzbm1wX2NvbHVtbl9pbmZvX3Q6Omxpc3RfY291bnRcZlAiCi0uUFAKLW9ubHkgdXNlZnVsIGlmIGlzUmFuZ2UgPT0gMCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU1IG9mIGZpbGUgdGFibGUuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU1NzlhOC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0uVEggIm5ldHNubXBfZGF0YV9saXN0X3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX2RhdGFfbGlzdF9zIFwtIAotLlBQCi11c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCBsaXN0cyBvZiBkYXRhICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8ZGF0YV9saXN0Lmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2RhdGFfbGlzdF9zXGZQICogXGZCbmV4dFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCbmFtZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCZGF0YVxmUCIKLS5icgotLlJJICJcZklUaGUgcG9pbnRlciB0byB0aGUgZGF0YSBwYXNzZWQgb24uIFxmUCIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqIFxmQmZyZWVfZnVuY1xmUCIKLS5icgotLlJJICJcZkltdXN0IGtub3cgaG93IHRvIGZyZWUgbmV0c25tcF9kYXRhX2xpc3QtPmRhdGEgXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLXVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGxpc3RzIG9mIGRhdGEgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MSBvZiBmaWxlIGRhdGFfbGlzdC5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ2b2lkKiBcZkJuZXRzbm1wX2RhdGFfbGlzdF9zOjpkYXRhXGZQIgotLlBQCi1UaGUgcG9pbnRlciB0byB0aGUgZGF0YSBwYXNzZWQgb24uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDUgb2YgZmlsZSBkYXRhX2xpc3QuaC4KLS5TUyAiTmV0c25tcF9GcmVlX0xpc3RfRGF0YSogXGZCbmV0c25tcF9kYXRhX2xpc3Rfczo6ZnJlZV9mdW5jXGZQIgotLlBQCi1tdXN0IGtub3cgaG93IHRvIGZyZWUgbmV0c25tcF9kYXRhX2xpc3QtPmRhdGEgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NyBvZiBmaWxlIGRhdGFfbGlzdC5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczMWFkMi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMworKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0uVEggIm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcyBcLSAKLS5QUAotUm9vdCByZWdpc3RyYXRpb24gaW5mby4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxhZ2VudF9oYW5kbGVyLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJoYW5kbGVyTmFtZVxmUCIKLS5icgotLlJJICJcZklmb3IgbXJUYWJsZSBsaXN0aW5ncywgYW5kIG90aGVyIHVzZXMgXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCY29udGV4dE5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJTlVMTCA9IGRlZmF1bHQgY29udGV4dC4gXGZQIgotLnRpIC0xYwotLlJJICJvaWQgKiBcZkJyb290b2lkXGZQIgotLmJyCi0uUkkgIlxmSXdoZXJlIGFyZSB3ZSByZWdpc3RlcmVkIGF0PyBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJyb290b2lkX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCaGFuZGxlclxmUCIKLS5icgotLlJJICJcZkloYW5kbGVyIGRldGFpbHMgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbW9kZXNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnByaW9yaXR5XGZQIgotLmJyCi0uUkkgIlxmSW1vcmUgb3B0aW9uYWwgc3R1ZmYgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmFuZ2Vfc3ViaWRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQnJhbmdlX3Vib3VuZFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdGltZW91dFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZ2xvYmFsX2NhY2hlaWRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm15X3JlZ192b2lkXGZQIgotLmJyCi0uUkkgIlxmSXZvaWQgcHRyIGZvciByZWdpc3RlcmVlIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Sb290IHJlZ2lzdHJhdGlvbiBpbmZvLiAKLQotVGhlIHZhcmlhYmxlcyBoYW5kbGVyTmFtZSwgY29udGV4dE5hbWUsIGFuZCByb290b2lkIG5lZWQgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLCB3aGVuIHRoZSByZWdpc3RyYXRpb24gc3RydWN0dXJlIGlzIHVucmVnaXN0ZXJlZCB1c2luZyBcZkJ1bnJlZ2lzdGVyX21pYl9jb250ZXh0KClcZlAgdGhlIGNvZGUgYXR0ZW1wdHMgdG8gZnJlZSB0aGVtLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotLlBQCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAsIGFuZCBcZkJ3YXRjaGVkLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5NSBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiY2hhciogXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zOjpjb250ZXh0TmFtZVxmUCIKLS5QUAotTlVMTCA9IGRlZmF1bHQgY29udGV4dC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDAgb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fczo6aGFuZGxlclxmUCIKLS5QUAotaGFuZGxlciBkZXRhaWxzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTExIG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotLlNTICJjaGFyKiBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3M6OmhhbmRsZXJOYW1lXGZQIgotLlBQCi1mb3IgbXJUYWJsZSBsaXN0aW5ncywgYW5kIG90aGVyIHVzZXMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5OCBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLS5TUyAidm9pZCogXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zOjpteV9yZWdfdm9pZFxmUCIKLS5QUAotdm9pZCBwdHIgZm9yIHJlZ2lzdGVyZWUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjYgb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0uU1MgImludCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3M6OnByaW9yaXR5XGZQIgotLlBQCi1tb3JlIG9wdGlvbmFsIHN0dWZmIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTE3IG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotLlNTICJvaWQqIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fczo6cm9vdG9pZFxmUCIKLS5QUAotd2hlcmUgYXJlIHdlIHJlZ2lzdGVyZWQgYXQ/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA1IG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1OWY3ODguLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMworKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0uVEggIm5ldHNubXBfaXRlcmF0b3JfaW5mb19zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MgXC0gCi0uUFAKLUhvbGRzIGl0ZXJhdG9yIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIGl0ZXJhdG9yX2hhbmRsZXIgdG8gbG9vcCBvdmVyIHlvdXIgZGF0YSBzZXQgYW5kIHNvcnQgaXQgaW4gYSBTTk1QIHNwZWNpZmljIG1hbm5lci4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDx0YWJsZV9pdGVyYXRvci5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJOZXRzbm1wX0ZpcnN0X0RhdGFfUG9pbnQgKiBcZkJnZXRfZmlyc3RfZGF0YV9wb2ludFxmUCIKLS5icgotLlJJICJcZklSZXNwb25zaWJsZSBmb3I6IHJldHVybmluZyB0aGUgZmlyc3Qgc2V0IG9mICdpbmRleCcgZGF0YSwgYSBsb29wLWNvbnRleHQgcG9pbnRlciwgYW5kIG9wdGlvbmFsbHkgYSBkYXRhIGNvbnRleHQgcG9pbnRlci4gXGZQIgotLnRpIC0xYwotLlJJICJOZXRzbm1wX05leHRfRGF0YV9Qb2ludCAqIFxmQmdldF9uZXh0X2RhdGFfcG9pbnRcZlAiCi0uYnIKLS5SSSAiXGZJR2l2ZW4gdGhlIHByZXZpb3VzIGxvb3AgY29udGV4dCwgdGhpcyBzaG91bGQgcmV0dXJuIHRoZSBuZXh0IGxvb3AgY29udGV4dCwgYXNzb2NpYXRlZCBpbmRleCBzZXQgYW5kIG9wdGlvbmFsbHkgYSBkYXRhIGNvbnRleHQuIFxmUCIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9NYWtlX0RhdGFfQ29udGV4dCAqIFxmQm1ha2VfZGF0YV9jb250ZXh0XGZQIgotLmJyCi0uUkkgIlxmSUlmIGEgZGF0YSBjb250ZXh0IHdhc24ndCBzdXBwbGllZCBieSB0aGUgZ2V0X2ZpcnN0X2RhdGFfcG9pbnQgb3IgZ2V0X25leHRfZGF0YV9wb2ludCBmdW5jdGlvbnMgYW5kIHRoZSBtYWtlX2RhdGFfY29udGV4dCBwb2ludGVyIGlzIGRlZmluZWQsIGl0IHdpbGwgYmUgY2FsbGVkIHRvIGNvbnZlcnQgYSBsb29wIGNvbnRleHQgaW50byBhIGRhdGEgY29udGV4dC4gXGZQIgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0ZyZWVfTG9vcF9Db250ZXh0ICogXGZCZnJlZV9sb29wX2NvbnRleHRcZlAiCi0uYnIKLS5SSSAiXGZJQSBmdW5jdGlvbiB3aGljaCBzaG91bGQgZnJlZSB0aGUgbG9vcCBjb250ZXh0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfRnJlZV9EYXRhX0NvbnRleHQgKiBcZkJmcmVlX2RhdGFfY29udGV4dFxmUCIKLS5icgotLlJJICJcZklGcmVlcyBhIGRhdGEgY29udGV4dC4gXGZQIgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0ZyZWVfTG9vcF9Db250ZXh0ICogXGZCZnJlZV9sb29wX2NvbnRleHRfYXRfZW5kXGZQIgotLmJyCi0uUkkgIlxmSUZyZWVzIGEgbG9vcCBjb250ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSBpdGVyYXRpb24gc2VxdWVuY2UuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm15dm9pZFxmUCIKLS5icgotLlJJICJcZklUaGlzIGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBoYW5kbGVycyB0byBzdG9yZSBhbnkgaW5mb3JtYXRpb24gdGhleSBuZWVkLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJmbGFnc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogXGZCdGFibGVfcmVnaW5mb1xmUCIKLS5icgotLlJJICJcZklBIHBvaW50ZXIgdG8gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0IHRoaXMgaXRlcmF0b3IgaXMgcmVnaXN0ZXJlZCBhbG9uZyB3aXRoLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludCAqIFxmQmdldF9yb3dfaW5kZXhlc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJpbmRleGVzXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotSG9sZHMgaXRlcmF0b3IgaW5mb3JtYXRpb24gY29udGFpbmluZyBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCBieSB0aGUgaXRlcmF0b3JfaGFuZGxlciB0byBsb29wIG92ZXIgeW91ciBkYXRhIHNldCBhbmQgc29ydCBpdCBpbiBhIFNOTVAgc3BlY2lmaWMgbWFubmVyLiAKLQotVGhlIG5ldHNubXBfaXRlcmF0b3JfaW5mbyB0eXBlZGVmIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZyB0aGlzIHN0cnVjdCBpZiB5b3Ugd291bGQgcHJlZmVyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzIG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiTmV0c25tcF9GcmVlX0RhdGFfQ29udGV4dCogXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3M6OmZyZWVfZGF0YV9jb250ZXh0XGZQIgotLlBQCi1GcmVlcyBhIGRhdGEgY29udGV4dC4gVGhpcyB3aWxsIGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhIGRhdGEgY29udGV4dCBuZWVkcyB0byBiZSBmcmVlZC4gVGhpcyBtYXkgYmUgYXQgdGhlIHNhbWUgdGltZSBhcyBhIGNvcnJlc3BvbmRuZyBsb29wIGNvbnRleHQgaXMgZnJlZWQsIG9yIG11Y2ggbXVjaCBsYXRlci4gTXVsdGlwbGUgZGF0YSBjb250ZXh0cyBtYXkgYmUga2VwdCBpbiBleGlzdGVuY2UgYXQgYW55IHRpbWUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODIgb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotLlNTICJOZXRzbm1wX0ZyZWVfTG9vcF9Db250ZXh0KiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fczo6ZnJlZV9sb29wX2NvbnRleHRcZlAiCi0uUFAKLUEgZnVuY3Rpb24gd2hpY2ggc2hvdWxkIGZyZWUgdGhlIGxvb3AgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgKmVhY2gqIGl0ZXJhdGlvbiBzdGVwLCB3aGljaCBpcyBub3Qtb3B0aW1hbCBmb3Igc3BlZWQgcHVycG9zZXMuIFRoZSB1c2Ugb2YgZnJlZV9sb29wX2NvbnRleHRfYXRfZW5kIGluc3RlYWQgaXMgc3Ryb25nbHkgZW5jb3VyYWdlZC4gVGhpcyBjYW4gYmUgc2V0IHRvIE5VTEwgdG8gYXZvaWQgaXRzIHVzYWdlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc1IG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLS5TUyAiTmV0c25tcF9GcmVlX0xvb3BfQ29udGV4dCogXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3M6OmZyZWVfbG9vcF9jb250ZXh0X2F0X2VuZFxmUCIKLS5QUAotRnJlZXMgYSBsb29wIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXJlIGl0ZXJhdGlvbiBzZXF1ZW5jZS4gR2VuZXJhbGx5LCB0aGlzIHdvdWxkIGZyZWUgdGhlIGxvb3AgY29udGV4dCBhbGxvY2F0ZWQgYnkgdGhlIGdldF9maXJzdF9kYXRhX3BvaW50IGZ1bmN0aW9uICh3aGljaCB3b3VsZCB0aGVuIGJlIHVwZGF0ZWQgYnkgZWFjaCBjYWxsIHRvIHRoZSBnZXRfbmV4dF9kYXRhX3BvaW50IGZ1bmN0aW9uKS4gSXQgaXMgbm90IGNhbGxlZCB1bnRpbCB0aGUgZ2V0X25leHRfZGF0YV9wb2ludCBmdW5jdGlvbiByZXR1cm5zIGEgTlVMTCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkwIG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLS5TUyAiTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50KiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fczo6Z2V0X2ZpcnN0X2RhdGFfcG9pbnRcZlAiCi0uUFAKLVJlc3BvbnNpYmxlIGZvcjogcmV0dXJuaW5nIHRoZSBmaXJzdCBzZXQgb2YgJ2luZGV4JyBkYXRhLCBhIGxvb3AtY29udGV4dCBwb2ludGVyLCBhbmQgb3B0aW9uYWxseSBhIGRhdGEgY29udGV4dCBwb2ludGVyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU3IG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLS5TUyAiTmV0c25tcF9OZXh0X0RhdGFfUG9pbnQqIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zOjpnZXRfbmV4dF9kYXRhX3BvaW50XGZQIgotLlBQCi1HaXZlbiB0aGUgcHJldmlvdXMgbG9vcCBjb250ZXh0LCB0aGlzIHNob3VsZCByZXR1cm4gdGhlIG5leHQgbG9vcCBjb250ZXh0LCBhc3NvY2lhdGVkIGluZGV4IHNldCBhbmQgb3B0aW9uYWxseSBhIGRhdGEgY29udGV4dC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2MiBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0uU1MgIk5ldHNubXBfTWFrZV9EYXRhX0NvbnRleHQqIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zOjptYWtlX2RhdGFfY29udGV4dFxmUCIKLS5QUAotSWYgYSBkYXRhIGNvbnRleHQgd2Fzbid0IHN1cHBsaWVkIGJ5IHRoZSBnZXRfZmlyc3RfZGF0YV9wb2ludCBvciBnZXRfbmV4dF9kYXRhX3BvaW50IGZ1bmN0aW9ucyBhbmQgdGhlIG1ha2VfZGF0YV9jb250ZXh0IHBvaW50ZXIgaXMgZGVmaW5lZCwgaXQgd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBhIGxvb3AgY29udGV4dCBpbnRvIGEgZGF0YSBjb250ZXh0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY4IG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLS5TUyAidm9pZCogXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3M6Om15dm9pZFxmUCIKLS5QUAotVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnQgaGFuZGxlcnMgdG8gc3RvcmUgYW55IGluZm9ybWF0aW9uIHRoZXkgbmVlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5NCBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAqIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zOjp0YWJsZV9yZWdpbmZvXGZQIgotLlBQCi1BIHBvaW50ZXIgdG8gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0IHRoaXMgaXRlcmF0b3IgaXMgcmVnaXN0ZXJlZCBhbG9uZyB3aXRoLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwMCBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NzkxYjEuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLlRIICJuZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcyBcLSAKLS5QUAotRGVmaW5lcyB0aGUgYWNjZXNzIG1ldGhvZHMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBhY2Nlc3NfbXVsdGlwbGV4ZXIgaGVscGVyLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPGJhYnlfc3RlcHMuaD5cZlAKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1EZWZpbmVzIHRoZSBhY2Nlc3MgbWV0aG9kcyB0byBiZSBjYWxsZWQgYnkgdGhlIGFjY2Vzc19tdWx0aXBsZXhlciBoZWxwZXIuIAotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0YWUwOS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS5USCAibmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzIFwtIAotLlBQCi1EZWZpbmVzIHRoZSBzdWJoYW5kbGVycyB0byBiZSBjYWxsZWQgYnkgdGhlIG11bHRpcGxleGVyIGhlbHBlci4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxtdWx0aXBsZXhlci5oPlxmUAotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLURlZmluZXMgdGhlIHN1YmhhbmRsZXJzIHRvIGJlIGNhbGxlZCBieSB0aGUgbXVsdGlwbGV4ZXIgaGVscGVyLiAKLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZmIzY2EuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0uVEggIm5ldHNubXBfbWliX2hhbmRsZXJfcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfbWliX2hhbmRsZXJfcyBcLSAKLS5QUAotdGhlIG1pYiBoYW5kbGVyIHN0cnVjdHVyZSB0byBiZSByZWdpc3RlcmVkICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8YWdlbnRfaGFuZGxlci5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJjaGFyICogXGZCaGFuZGxlcl9uYW1lXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJteXZvaWRcZlAiCi0uYnIKLS5SSSAiXGZJZm9yIGhhbmRsZXIncyBpbnRlcm5hbCB1c2UgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCZmxhZ3NcZlAiCi0uYnIKLS5SSSAiXGZJZm9yIGFnZW50X2hhbmRsZXIncyBpbnRlcm5hbCB1c2UgXGZQIgotLnRpIC0xYwotLlJJICJpbnQoKiBcZkJhY2Nlc3NfbWV0aG9kXGZQICkoc3RydWN0IFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zXGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zXGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zXGZQICopIgotLmJyCi0uUkkgIlxmSWlmIHlvdSBhZGQgbW9yZSBtZW1iZXJzLCB5b3UgcHJvYmFibHkgYWxzbyB3YW50IHRvIHVwZGF0ZSBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQoKiBcZkJkYXRhX2ZyZWVcZlAgKSh2b2lkICpcZkJteXZvaWRcZlApIgotLmJyCi0uUkkgIlxmSWRhdGEgZnJlZSBob29rIGZvciBteXZvaWQgXGZQIgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQICogXGZCbmV4dFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQICogXGZCcHJldlxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLXRoZSBtaWIgaGFuZGxlciBzdHJ1Y3R1cmUgdG8gYmUgcmVnaXN0ZXJlZCAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotLlBQCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0OCBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50KCogXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zOjphY2Nlc3NfbWV0aG9kXGZQKShzdHJ1Y3QgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3NcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3NcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3NcZlAgKikiCi0uUFAKLWlmIHlvdSBhZGQgbW9yZSBtZW1iZXJzLCB5b3UgcHJvYmFibHkgYWxzbyB3YW50IHRvIHVwZGF0ZSBfY2xvbmVfaGFuZGxlciBpbiBcZkJhZ2VudF9oYW5kbGVyLmNcZlAuIAotLlNTICJ2b2lkKCogXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zOjpkYXRhX2ZyZWVcZlApKHZvaWQgKlxmQm15dm9pZFxmUCkiCi0uUFAKLWRhdGEgZnJlZSBob29rIGZvciBteXZvaWQgCi0uU1MgImludCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3M6OmZsYWdzXGZQIgotLlBQCi1mb3IgYWdlbnRfaGFuZGxlcidzIGludGVybmFsIHVzZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzIG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotLlNTICJ2b2lkKiBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3M6Om15dm9pZFxmUCIKLS5QUAotZm9yIGhhbmRsZXIncyBpbnRlcm5hbCB1c2UgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MSBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTViZDE2OC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLlRIICJuZXRzbm1wX3JlcXVlc3RfaW5mb19zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9yZXF1ZXN0X2luZm9fcyBcLSAKLS5QUAotVGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZS4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxzbm1wX2FnZW50Lmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQnJlcXVlc3R2YlxmUCIKLS5icgotLlJJICJcZklcZkJ2YXJpYWJsZVxmUCBiaW5kaW5ncyBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogXGZCcGFyZW50X2RhdGFcZlAiCi0uYnIKLS5SSSAiXGZJY2FuIGJlIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIGZyb20gYSBoZWxwZXIgdG8gdGhlIGxhdGVyIGhhbmRsZXJzIFxmUCIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3NcZlAgKiBcZkJhZ2VudF9yZXFfaW5mb1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgKiBcZkJyYW5nZV9lbmRcZlAiCi0uYnIKLS5SSSAiXGZJZG9uJ3QgZnJlZSwgcmVmZXJlbmNlIHRvIChzdHJ1Y3QgXGZCdHJlZVxmUCktPmVuZCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJyYW5nZV9lbmRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJkZWxlZ2F0ZWRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnByb2Nlc3NlZFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaW5jbHVzaXZlXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzdGF0dXNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmluZGV4XGZQIgotLmJyCi0uUkkgIlxmSWluZGV4IGluIG9yaWdpbmFsIHBkdSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJyZXBlYXRcZlAiCi0uYnIKLS5SSSAiXGZJZ2V0LWJ1bGsgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCb3JpZ19yZXBlYXRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCcmVxdWVzdHZiX3N0YXJ0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zXGZQICogXGZCbmV4dFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fc1xmUCAqIFxmQnByZXZcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfc3VidHJlZV9zXGZQICogXGZCc3VidHJlZVxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi0uUFAKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0IG9mIGZpbGUgc25tcF9hZ2VudC5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fczo6aW5kZXhcZlAiCi0uUFAKLWluZGV4IGluIG9yaWdpbmFsIHBkdSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg0IG9mIGZpbGUgc25tcF9hZ2VudC5oLgotLlNTICJcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCogXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fczo6cGFyZW50X2RhdGFcZlAiCi0uUFAKLWNhbiBiZSB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gb24gYSBwZXItcmVxdWVzdCBiYXNpcyBmcm9tIGEgaGVscGVyIHRvIHRoZSBsYXRlciBoYW5kbGVycyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY0IG9mIGZpbGUgc25tcF9hZ2VudC5oLgotLlNTICJvaWQqIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3M6OnJhbmdlX2VuZFxmUCIKLS5QUAotZG9uJ3QgZnJlZSwgcmVmZXJlbmNlIHRvIChzdHJ1Y3QgXGZCdHJlZVxmUCktPmVuZCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDcyIG9mIGZpbGUgc25tcF9hZ2VudC5oLgotLlNTICJpbnQgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fczo6cmVwZWF0XGZQIgotLlBQCi1nZXQtYnVsayAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg3IG9mIGZpbGUgc25tcF9hZ2VudC5oLgotLlNTICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAqIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3M6OnJlcXVlc3R2YlxmUCIKLS5QUAotXGZCdmFyaWFibGVcZlAgYmluZGluZ3MgCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU4IG9mIGZpbGUgc25tcF9hZ2VudC5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVjNWU5Yi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS5USCAibmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zIFwtIAotLlBQCi1UYWJsZSByZWdpc3RyYXRpb24gc3RydWN0dXJlLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHRhYmxlLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQmluZGV4ZXNcZlAiCi0uYnIKLS5SSSAiXGZJbGlzdCBvZiB2YXJiaW5kcyB3aXRoIG9ubHkgJ3R5cGUnIHNldCBcZlAiCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGludCBcZkJudW1iZXJfaW5kZXhlc1xmUCIKLS5icgotLlJJICJcZkljYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgXGZQIgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBpbnQgXGZCbWluX2NvbHVtblxmUCIKLS5icgotLlJJICJcZkl0aGUgbWluaW11bSBjb2x1bW5zIG51bWJlci4gXGZQIgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBpbnQgXGZCbWF4X2NvbHVtblxmUCIKLS5icgotLlJJICJcZkl0aGUgbWF4aW11bSBjb2x1bW5zIG51bWJlciBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY29sdW1uX2luZm9cZlAgKiBcZkJ2YWxpZF9jb2x1bW5zXGZQIgotLmJyCi0uUkkgIlxmSW1vcmUgZGV0YWlscyBvbiBjb2x1bW5zIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UYWJsZSByZWdpc3RyYXRpb24gc3RydWN0dXJlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc0IG9mIGZpbGUgdGFibGUuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQKiBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3M6OmluZGV4ZXNcZlAiCi0uUFAKLWxpc3Qgb2YgdmFyYmluZHMgd2l0aCBvbmx5ICd0eXBlJyBzZXQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NiBvZiBmaWxlIHRhYmxlLmguCi0uU1MgInVuc2lnbmVkIGludCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3M6Om1heF9jb2x1bW5cZlAiCi0uUFAKLXRoZSBtYXhpbXVtIGNvbHVtbnMgbnVtYmVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODcgb2YgZmlsZSB0YWJsZS5oLgotLlNTICJ1bnNpZ25lZCBpbnQgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zOjptaW5fY29sdW1uXGZQIgotLlBQCi10aGUgbWluaW11bSBjb2x1bW5zIG51bWJlci4gSWYgdGhlcmUgYXJlIGNvbHVtbnMgaW4tYmV0d2VlbiB3aGljaCBhcmUgbm90IHZhbGlkLCB1c2UgdmFsaWRfY29sdW1ucyB0byBnZXQgYXV0b21hdGljIGNvbHVtbiByYW5nZSBjaGVja2luZy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NSBvZiBmaWxlIHRhYmxlLmguCi0uU1MgInVuc2lnbmVkIGludCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3M6Om51bWJlcl9pbmRleGVzXGZQIgotLlBQCi1jYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3OCBvZiBmaWxlIHRhYmxlLmguCi0uU1MgIlxmQm5ldHNubXBfY29sdW1uX2luZm9cZlAqIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fczo6dmFsaWRfY29sdW1uc1xmUCIKLS5QUAotbW9yZSBkZXRhaWxzIG9uIGNvbHVtbnMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MCBvZiBmaWxlIHRhYmxlLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NmM4NjkuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLlRIICJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcyBcLSAKLS5QUAotVGhlIHRhYmxlIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8dGFibGUuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgaW50IFxmQmNvbG51bVxmUCIKLS5icgotLlJJICJcZkkwIGlmIE9JRCBub3QgbG9uZyBlbm91Z2ggXGZQIgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBpbnQgXGZCbnVtYmVyX2luZGV4ZXNcZlAiCi0uYnIKLS5SSSAiXGZJMCBpZiBmYWlsdXJlIHRvIHBhcnNlIGFueSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQmluZGV4ZXNcZlAiCi0uYnIKLS5SSSAiXGZJY29udGVudHMgZnJlZWQgYnkgaGVscGVyIHVwb24gZXhpdCBcZlAiCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJpbmRleF9vaWRcZlAgW01BWF9PSURfTEVOXSIKLS5icgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCaW5kZXhfb2lkX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogXGZCcmVnX2luZm9cZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgdGFibGUgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDIgb2YgZmlsZSB0YWJsZS5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ1bnNpZ25lZCBpbnQgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fczo6Y29sbnVtXGZQIgotLlBQCi0wIGlmIE9JRCBub3QgbG9uZyBlbm91Z2ggCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDQgb2YgZmlsZSB0YWJsZS5oLgotLlNTICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAqIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3M6OmluZGV4ZXNcZlAiCi0uUFAKLWNvbnRlbnRzIGZyZWVkIGJ5IGhlbHBlciB1cG9uIGV4aXQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDggb2YgZmlsZSB0YWJsZS5oLgotLlNTICJ1bnNpZ25lZCBpbnQgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fczo6bnVtYmVyX2luZGV4ZXNcZlAiCi0uUFAKLTAgaWYgZmFpbHVyZSB0byBwYXJzZSBhbnkgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDYgb2YgZmlsZSB0YWJsZS5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfb2lkX3N0YXNoLjMgYi9tYW4vbmV0c25tcF9vaWRfc3Rhc2guMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFiMDM0Yi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9vaWRfc3Rhc2guMworKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0uVEggIlN0b3JlIGFuZCByZXRyaWV2ZSBkYXRhIHJlZmVyZW5jZWQgYnkgYW4gT0lELiIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLVN0b3JlIGFuZCByZXRyaWV2ZSBkYXRhIHJlZmVyZW5jZWQgYnkgYW4gT0lELiBcLSAKLS5QUAotVGhpcyBpcyBlc3NlbnRpYWxseSBhIHdheSBvZiBzdG9yaW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiBcZkJuZXRzbm1wX29pZF9zdGFzaF9jcmVhdGVfc2l6ZWRfbm9kZVxmUCAoc2l6ZV90IG15c2l6ZSkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlIGFuIG5ldHNubXBfb2lkX3N0YXNoIFxmQm5vZGVcZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIFxmQm5ldHNubXBfb2lkX3N0YXNoX2NyZWF0ZV9ub2RlXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklDcmVhdGVzIGEgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vaWRfc3Rhc2hfYWRkX2RhdGFcZlAgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKipyb290LCBvaWQgKmxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4sIHZvaWQgKm15ZGF0YSkiCi0uYnIKLS5SSSAiXGZJYWRkcyBkYXRhIHRvIHRoZSBzdGFzaCBhdCBhIGdpdmVuIG9pZC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogXGZCbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X25vZGVcZlAgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKnJvb3QsIG9pZCAqbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbikiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIFxmQm5vZGVcZlAgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiBcZkJuZXRzbm1wX29pZF9zdGFzaF9nZXRuZXh0X25vZGVcZlAgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKnJvb3QsIG9pZCAqbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbikiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyB0aGUgbmV4dCBcZkJub2RlXGZQIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGFcZlAgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKnJvb3QsIG9pZCAqbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbikiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGRhdGEgcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2lkX3N0YXNoX3N0b3JlX2FsbFxmUCAoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykiCi0uYnIKLS5SSSAiXGZJYSB3cmFwcGVyIGFyb3VuZCBuZXRzbm1wX29pZF9zdGFzaF9zdG9yZSBmb3IgdXNlIHdpdGggYSBcZkJzbm1wX2FsYXJtXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9vaWRfc3Rhc2hfc3RvcmVcZlAgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKnJvb3QsIGNvbnN0IGNoYXIgKnRva2VubmFtZSwgTmV0U05NUFN0YXNoRHVtcCAqZHVtcGZuLCBvaWQgKmN1cm9pZCwgc2l6ZV90IGN1cm9pZF9sZW4pIgotLmJyCi0uUkkgIlxmSXN0b3JlcyBkYXRhIGluIGEgc3RhcnNoIFxmQnRyZWVcZlAgdG8gcGVyaXN0ZW50IHN0b3JhZ2UuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJvaWRfc3Rhc2hfZHVtcFxmUCAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqcm9vdCwgY2hhciAqcHJlZml4KSIKLS5icgotLlJJICJcZklGb3IgZGVidWdnaW5nOiBkdW1wIHRoZSBuZXRzbm1wX29pZF9zdGFzaCBcZkJ0cmVlXGZQIHRvIHN0ZG91dC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfb2lkX3N0YXNoX2ZyZWVcZlAgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKipyb290LCBOZXRTTk1QU3Rhc2hGcmVlTm9kZSAqZnJlZWZuKSIKLS5icgotLlJJICJcZklGcmVlcyB0aGUgY29udGVudHMgb2YgYSBuZXRzbm1wX29pZF9zdGFzaCBcZkJ0cmVlXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9fZnJlZVxmUCAodm9pZCAqYm9ndXMpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhpcyBpcyBlc3NlbnRpYWxseSBhIHdheSBvZiBzdG9yaW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiAKLQotSXQgc3RvcmVzIGEgYnVuY2ggb2YgZGF0YSBwb2ludGVycyB3aXRoaW4gYSBtZW1vcnkgXGZCdHJlZVxmUCB0aGF0IGFsbG93cyBmYWlybHkgZWZmaWNpZW50IGxvb2t1cHMgd2l0aCBhIGhlYXZpbHkgcG9wdWxhdGVkIFxmQnRyZWVcZlAuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9vaWRfc3Rhc2hfYWRkX2RhdGEgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiogcm9vdCwgb2lkICogbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbiwgdm9pZCAqIG15ZGF0YSkiCi0uUFAKLWFkZHMgZGF0YSB0byB0aGUgc3Rhc2ggYXQgYSBnaXZlbiBvaWQuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcm9vdFxmUCB0aGUgdG9wIG9mIHRoZSBzdGFzaCBcZkJ0cmVlXGZQIAotLmJyCi1cZklsb29rdXBcZlAgdGhlIG9pZCBpbmRleCB0byBzdG9yZSB0aGUgZGF0YSBhdC4gCi0uYnIKLVxmSWxvb2t1cF9sZW5cZlAgdGhlIGxlbmd0aCBvZiB0aGUgbG9va3VwIG9pZC4gCi0uYnIKLVxmSW15ZGF0YVxmUCB0aGUgZGF0YSB0byBzdG9yZQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotU05NUEVSUl9TVUNDRVNTIG9uIHN1Y2Nlc3MsIFNOTVBFUlJfR0VORVJSIGlmIGRhdGEgaXMgYWxyZWFkeSB0aGVyZSwgU05NUEVSUl9NQUxMT0Mgb24gbWFsbG9jIGZhaWx1cmVzIG9yIGlmIGFyZ3VtZW50cyBwYXNzZWQgaW4gd2l0aCBOVUxMIHZhbHVlcy4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MyBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQKiBuZXRzbm1wX29pZF9zdGFzaF9jcmVhdGVfbm9kZSAodm9pZCkiCi0uUFAKLUNyZWF0ZXMgYSBuZXRzbm1wX29pZF9zdGFzaF9ub2RlLiBBc3N1bWVzIHlvdSB3YW50IHRoZSBkZWZhdWx0IE9JRF9TVEFTSF9DSElMRFJFTl9TSVpFIGhhc2ggc2l6ZSBmb3IgdGhlIFxmQm5vZGVcZlAuIAotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLU5VTEwgb24gZXJyb3IsIG90aGVyd2lzZSB0aGUgbmV3bHkgYWxsb2NhdGVkIFxmQm5vZGVcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NiBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQKiBuZXRzbm1wX29pZF9zdGFzaF9jcmVhdGVfc2l6ZWRfbm9kZSAoc2l6ZV90IG15c2l6ZSkiCi0uUFAKLUNyZWF0ZSBhbiBuZXRzbm1wX29pZF9zdGFzaCBcZkJub2RlXGZQLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW15c2l6ZVxmUCB0aGUgc2l6ZSBvZiB0aGUgY2hpbGQgcG9pbnRlciBhcnJheQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotTlVMTCBvbiBlcnJvciwgb3RoZXJ3aXNlIHRoZSBuZXdseSBhbGxvY2F0ZWQgXGZCbm9kZVxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ2IG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgInZvaWQgbmV0c25tcF9vaWRfc3Rhc2hfZnJlZSAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqKiByb290LCBOZXRTTk1QU3Rhc2hGcmVlTm9kZSAqIGZyZWVmbikiCi0uUFAKLUZyZWVzIHRoZSBjb250ZW50cyBvZiBhIG5ldHNubXBfb2lkX3N0YXNoIFxmQnRyZWVcZlAuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcm9vdFxmUCB0aGUgdG9wIG9mIHRoZSBcZkJ0cmVlXGZQIChvciBicmFuY2ggdG8gYmUgZnJlZWQpIAotLmJyCi1cZklmcmVlZm5cZlAgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBlYWNoIGRhdGEgKHZvaWQgKikgcG9pbnRlci4gSWYgbGVmdCBOVUxMIHRoZSBzeXN0ZW0gZnJlZSgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDAxIG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfb2lkX3N0YXNoX2dldF9kYXRhIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogcm9vdCwgb2lkICogbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbikiCi0uUFAKLXJldHVybnMgYSBkYXRhIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiBUaGlzIGlzIGVxdWl2ZWxlbnQgdG8gbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X25vZGUsIGJ1dCByZXR1cm5zIG9ubHkgdGhlIGRhdGEgbm90IHRoZSBlbnRpcmUgXGZCbm9kZVxmUC4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyb290XGZQIHRoZSB0b3Agb2YgdGhlIHN0YXNoIAotLmJyCi1cZklsb29rdXBcZlAgdGhlIG9pZCB0byBzZWFyY2ggZm9yIAotLmJyCi1cZklsb29rdXBfbGVuXGZQIHRoZSBsZW5ndGggb2YgdGhlIHNlYXJjaCBvaWQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjgyIG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgIlxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAqIG5ldHNubXBfb2lkX3N0YXNoX2dldF9ub2RlIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogcm9vdCwgb2lkICogbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbikiCi0uUFAKLXJldHVybnMgYSBcZkJub2RlXGZQIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyb290XGZQIHRoZSB0b3Agb2YgdGhlIHN0YXNoIFxmQnRyZWVcZlAgCi0uYnIKLVxmSWxvb2t1cFxmUCB0aGUgb2lkIHRvIGxvb2sgdXAgYSBcZkJub2RlXGZQIGZvci4gCi0uYnIKLVxmSWxvb2t1cF9sZW5cZlAgdGhlIGxlbmd0aCBvZiB0aGUgbG9va3VwIG9pZCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1NCBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQKiBuZXRzbm1wX29pZF9zdGFzaF9nZXRuZXh0X25vZGUgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiByb290LCBvaWQgKiBsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKSIKLS5QUAotcmV0dXJucyB0aGUgbmV4dCBcZkJub2RlXGZQIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gSU5DT01QTEVURS4gVGhpcyBpcyBlcXVpdmVsZW50IHRvIGEgR0VUTkVYVCBvcGVyYXRpb24uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTkxIG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgInZvaWQgbmV0c25tcF9vaWRfc3Rhc2hfc3RvcmUgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiByb290LCBjb25zdCBjaGFyICogdG9rZW5uYW1lLCBOZXRTTk1QU3Rhc2hEdW1wICogZHVtcGZuLCBvaWQgKiBjdXJvaWQsIHNpemVfdCBjdXJvaWRfbGVuKSIKLS5QUAotc3RvcmVzIGRhdGEgaW4gYSBzdGFyc2ggXGZCdHJlZVxmUCB0byBwZXJpc3RlbnQgc3RvcmFnZS4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHRvIHNhdmUgYWxsIGRhdGEgaW4gYSBzdGFzaCBcZkJ0cmVlXGZQIHRvIE5ldC1TTk1QJ3MgcGVyY2VudCBzdG9yYWdlLiBNYWtlIHN1cmUgeW91IHJlZ2lzdGVyIGEgcGFyc2luZyBmdW5jdGlvbiB3aXRoIHRoZSByZWFkX2NvbmZpZyBzeXN0ZW0gdG8gcmUtaW5jb3JwZXJhdGUgeW91ciBzYXZlZCBkYXRhIGludG8gZnV0dXJlIHRyZWVzLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJvb3RcZlAgdGhlIHRvcCBvZiB0aGUgc3Rhc2ggdG8gc3RvcmUuIAotLmJyCi1cZkl0b2tlbm5hbWVcZlAgdGhlIGZpbGUgdG9rZW4gbmFtZSB0byBzYXZlIGluIChwYXNzaW5nICdzbm1wZCcgd2lsbCBzYXZlIHRoaW5ncyBpbnRvIHNubXBkLmNvbmYpLiAKLS5icgotXGZJZHVtcGZuXGZQIEEgZnVuY3Rpb24gd2hpY2ggY2FuIGR1bXAgdGhlIGRhdGEgc3RvcmVkIGF0IGEgcGFydGljdWxhciBcZkJub2RlXGZQIGludG8gYSBjaGFyIGJ1ZmZlci4gCi0uYnIKLVxmSWN1cm9pZFxmUCBtdXN0IGJlIGEgcG9pbnRlciB0byBhIE9JRCBhcnJheSBvZiBsZW5ndGggTUFYX09JRF9MRU4uIAotLmJyCi1cZkljdXJvaWRfbGVuXGZQIG11c3QgYmUgMCBmb3IgdGhlIHRvcCBsZXZlbCBjYWxsLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMzNCBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJpbnQgbmV0c25tcF9vaWRfc3Rhc2hfc3RvcmVfYWxsIChpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKiBzZXJ2ZXJhcmcsIHZvaWQgKiBjbGllbnRhcmcpIgotLlBQCi1hIHdyYXBwZXIgYXJvdW5kIG5ldHNubXBfb2lkX3N0YXNoX3N0b3JlIGZvciB1c2Ugd2l0aCBhIFxmQnNubXBfYWxhcm1cZlAuIHdoZW4gY2FsbGluZyBcZkJzbm1wX2FsYXJtXGZQLCB5b3UgY2FuIGxpc3QgdGhpcyBhcyBhIGNhbGxiYWNrLiBUaGUgY2xpZW50YXJnIHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX29pZF9zdGFzaF9zYXZlX2luZm8gcG9pbnRlci4gSXQgY2FuIGFsc28gYmUgY2FsbGVkIGRpcmVjdGx5LCBvZiBjb3Vyc2UuIFRoZSBsYXN0IGFyZ3VtZW50IChjbGllbnRhcmcpIGlzIHRoZSBvbmx5IG9uZSB0aGF0IGlzIHVzZWQuIFRoZSByZXN0IGFyZSBpZ25vcmVkIGJ5IHRoZSBmdW5jdGlvbi4gCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbWFqb3JJRFxmUCAKLS5icgotXGZJbWlub3JJRFxmUCAKLS5icgotXGZJc2VydmVyYXJnXGZQIAotLmJyCi1cZkljbGllbnRhcmdcZlAgQSBwb2ludGVyIHRvIGEgbmV0c25tcF9vaWRfc3Rhc2hfc2F2ZV9pbmZvIHN0cnVjdHVyZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMDQgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAidm9pZCBvaWRfc3Rhc2hfZHVtcCAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIHJvb3QsIGNoYXIgKiBwcmVmaXgpIgotLlBQCi1Gb3IgZGVidWdnaW5nOiBkdW1wIHRoZSBuZXRzbm1wX29pZF9zdGFzaCBcZkJ0cmVlXGZQIHRvIHN0ZG91dC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyb290XGZQIFRoZSB0b3Agb2YgdGhlIFxmQnRyZWVcZlAgCi0uYnIKLVxmSXByZWZpeFxmUCBhIGNoYXJhY3RlciBzdHJpbmcgcHJlZml4IHByaW50ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzc0IG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfb2xkX2FwaS4zIGIvbWFuL25ldHNubXBfb2xkX2FwaS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTZjYzc1Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX29sZF9hcGkuMworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS5USCAib2xkX2FwaSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW9sZF9hcGkgXC0gCi0uUFAKLUNhbGxzIG1pYiBcZkJtb2R1bGVcZlAgY29kZSB3cml0dGVuIGluIHRoZSBvbGQgc3R5bGUgb2YgY29kZS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCZ2V0X29sZF9hcGlfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIG9sZF9hcGkgaGFuZGxlciB0aGF0IHNob3VsZCBiZSB0aGUgZmluYWwgY2FsbGluZyBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGlcZlAgKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHksIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcywgY29uc3QgY2hhciAqY29udGV4dCwgaW50IHRpbWVvdXQsIGludCBmbGFncykiCi0uYnIKLS5SSSAiXGZJUmVnaXN0ZXJzIGFuIG9sZCBBUEkgc2V0IGludG8gdGhlIG1pYiBcZkJ0cmVlXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX21pYl90YWJsZV9yb3dcZlAgKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHksIGludCB2YXJfc3ViaWQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGludCB0aW1lb3V0LCBpbnQgZmxhZ3MpIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVycyBhIHJvdyB3aXRoaW4gYSBtaWIgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vbGRfYXBpX2hlbHBlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJaW1wbGVtZW50cyB0aGUgb2xkX2FwaSBoYW5kbGVyIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1DYWxscyBtaWIgXGZCbW9kdWxlXGZQIGNvZGUgd3JpdHRlbiBpbiB0aGUgb2xkIHN0eWxlIG9mIGNvZGUuIAotCi1UaGlzIGlzIGEgYmFja3dhcmRzIGNvbXBhdGlsaWJpdHkgXGZCbW9kdWxlXGZQIHRoYXQgYWxsb3dzIGNvZGUgd3JpdHRlbiBpbiB0aGUgb2xkIEFQSSB0byBiZSBydW4gdW5kZXIgdGhlIG5ldyBoYW5kbGVyIGJhc2VkIGFyY2hpdGVjdHVyZS4gVXNlIGl0IGJ5IGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKClcZlAuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBnZXRfb2xkX2FwaV9oYW5kbGVyICh2b2lkKSIKLS5QUAotcmV0dXJucyBhIG9sZF9hcGkgaGFuZGxlciB0aGF0IHNob3VsZCBiZSB0aGUgZmluYWwgY2FsbGluZyBoYW5kbGVyLiBEb24ndCB1c2UgdGhpcyBmdW5jdGlvbi4gVXNlIHRoZSBcZkJuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKVxmUCBmdW5jdGlvbiBpbnN0ZWFkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3IG9mIGZpbGUgb2xkX2FwaS5jLgotLlNTICJpbnQgbmV0c25tcF9vbGRfYXBpX2hlbHBlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1pbXBsZW1lbnRzIHRoZSBvbGRfYXBpIGhhbmRsZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjYgb2YgZmlsZSBvbGRfYXBpLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX21pYl90YWJsZV9yb3cgKGNvbnN0IGNoYXIgKiBtb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKiB2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHksIGludCB2YXJfc3ViaWQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIHNzLCBjb25zdCBjaGFyICogY29udGV4dCwgaW50IHRpbWVvdXQsIGludCBmbGFncykiCi0uUFAKLXJlZ2lzdGVycyBhIHJvdyB3aXRoaW4gYSBtaWIgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDcgb2YgZmlsZSBvbGRfYXBpLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkgKGNvbnN0IGNoYXIgKiBtb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKiB2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHksIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICogc3MsIGNvbnN0IGNoYXIgKiBjb250ZXh0LCBpbnQgdGltZW91dCwgaW50IGZsYWdzKSIKLS5QUAotUmVnaXN0ZXJzIGFuIG9sZCBBUEkgc2V0IGludG8gdGhlIG1pYiBcZkJ0cmVlXGZQLiBGdW5jdGlvbmFsbHkgdGhpcyBtaW1pY3MgdGhlIG9sZCByZWdpc3Rlcl9taWJfY29udGV4dCgpIGZ1bmN0aW9uIChhbmQgaW4gZmFjdCB0aGUgbmV3IHJlZ2lzdGVyX21pYl9jb250ZXh0KCkgZnVuY3Rpb24gbWVyZWx5IGNhbGxzIHRoaXMgbmV3IG9sZF9hcGkgb25lKS4gCi0uUFAKLW5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWdpbmZvKTsgYWxyZWFkeSBmcmVlZCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ4IG9mIGZpbGUgb2xkX2FwaS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYgYi9tYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZjFhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmCkBAIC0wLDAgKzEsMjkgQEAKKy5USCBORVRTTk1QX1BEVV9BUEkgMyAiMTMgQXVnIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorc25tcF9wZHVfY3JlYXRlLAorc25tcF9jbG9uZV9wZHUsCitzbm1wX2ZpeF9wZHUsCitzbm1wX2ZyZWVfcGR1IC0gbmV0c25tcF9wZHVfYXBpIGZ1bmN0aW9ucworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8bmV0LXNubXAvcGR1X2FwaS5oPgorLlBQCisuQkkgIm5ldHNubXBfcGR1ICpzbm1wX3BkdV9jcmVhdGUoIGludCIgInR5cGUiICIpOyIKKy5QUAorLkJJICJuZXRzbm1wX3BkdSAqc25tcF9jbG9uZV9wZHUoIG5ldHNubXBfcGR1KiIgInBkdSIgIik7IgorLlBQCisuQkkgIm5ldHNubXBfcGR1ICpzbm1wX2ZpeF9wZHUoIG5ldHNubXBfcGR1KiIgInBkdSIgIiwgaW50ICIgImlkeCIgIik7IgorLlBQCisuQkkgIm5ldHNubXBfcGR1ICpzbm1wX2ZyZWVfcGR1KCBuZXRzbm1wX3BkdSoiICJwZHUiICIpOyIKKy5QUAorLlNIIERFU0NSSVBUSU9OCitUaGVzZSBmdW5jdGlvbnMgZGVhbCB3aXRoIFNOTVAgcmVxdWVzdCBzdHJ1Y3R1cmVzLgorLlBQCisuQiBzbm1wX3BkdV9jcmVhdGUKKy5QUAorLkIgc25tcF9jbG9uZV9wZHUKKy5QUAorLkIgc25tcF9maXhfcGR1CisuUFAKKy5CIHNubXBfZnJlZV9wZHUKKy5TSCAiU0VFIEFMU08iCituZXRzbm1wX3ZhcmJpbmRfYXBpKDMpLCBuZXRzbm1wX3Nlc3Npb25fYXBpKDMpCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zIGIvbWFuL25ldHNubXBfcmVhZF9jb25maWcuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI0MGUxYi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zCisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLS5USCAicGFyc2luZyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgcnVuIHRpbWUiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1wYXJzaW5nIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBhdCBydW4gdGltZSBcLSAKLS5QUAotVGhlIHJlYWRfY29uZmlnIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBhIGZhaXJseSBleHRlbnNpYmxlIHN5c3RlbSBvZiBwYXJzaW5nIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBhdCB0aGUgcnVuIHRpbWUuICAKLQotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9DT05GSUdfREVMSU1FVEVSU1xmUCAgICcgXFx0PSciCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqIFxmQnJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnRva2VuLCB2b2lkKCpwYXJzZXIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwgdm9pZCgqcmVsZWFzZXIpKHZvaWQpLCBjb25zdCBjaGFyICpoZWxwKSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKiBcZkJyZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlclxmUCAoY29uc3QgY2hhciAqdG9rZW4sIHZvaWQoKnBhcnNlcikoY29uc3QgY2hhciAqLCBjaGFyICopLCB2b2lkKCpyZWxlYXNlcikodm9pZCksIGNvbnN0IGNoYXIgKmhlbHApIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqIFxmQnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyXGZQIChjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICp0b2tlbiwgdm9pZCgqcGFyc2VyKShjb25zdCBjaGFyICosIGNoYXIgKiksIHZvaWQoKnJlbGVhc2VyKSh2b2lkKSwgY29uc3QgY2hhciAqaGVscCkiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgcmVnaXN0ZXJzIGhhbmRsZXJzIGZvciBjZXJ0YWluIHRva2VucyBzcGVjaWZpZWQgaW4gY2VydGFpbiB0eXBlcyBvZiBmaWxlcy4gXGZQIgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKiBcZkJyZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCB2b2lkKCpwYXJzZXIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwgdm9pZCgqcmVsZWFzZXIpKHZvaWQpLCBjb25zdCBjaGFyICpoZWxwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnR5cGVfcGFyYW0sIGNvbnN0IGNoYXIgKnRva2VuKSIKLS5icgotLlJJICJcZkl1cmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgdW4tcmVnaXN0ZXJzIGhhbmRsZXJzIGdpdmVuIGEgc3BlY2lmaWMgdHlwZV9wYXJhbSBhbmQgdG9rZW4uIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJ1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlclxmUCAoY29uc3QgY2hhciAqdG9rZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzXGZQICgpIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqIFxmQnJlYWRfY29uZmlnX2dldF9oYW5kbGVyc1xmUCAoY29uc3QgY2hhciAqdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2NvbmZpZ193aXRoX3R5cGVfd2hlblxmUCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsIGludCB3aGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfY29uZmlnX3dpdGhfdHlwZVxmUCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqIFxmQnJlYWRfY29uZmlnX2ZpbmRfaGFuZGxlclxmUCAoc3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICpsaW5lX2hhbmRsZXJzLCBjb25zdCBjaGFyICp0b2tlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJ1bl9jb25maWdfaGFuZGxlclxmUCAoc3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICpscHRyLCBjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0ciwgaW50IHdoZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2NvbmZpZ193aGVuXGZQIChjaGFyICpsaW5lLCBpbnQgd2hlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY29uZmlnXGZQIChjaGFyICpsaW5lKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29uZmlnX3JlbWVtYmVyX2luX2xpc3RcZlAgKGNoYXIgKmxpbmUsIHN0cnVjdCBcZkJyZWFkX2NvbmZpZ19tZW1vcnlcZlAgKiptZW0pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb25maWdfcmVtZW1iZXJfZnJlZV9saXN0XGZQIChzdHJ1Y3QgXGZCcmVhZF9jb25maWdfbWVtb3J5XGZQICoqbWVtKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29uZmlnX3Byb2Nlc3NfbWVtb3J5X2xpc3RcZlAgKHN0cnVjdCBcZkJyZWFkX2NvbmZpZ19tZW1vcnlcZlAgKiptZW1wLCBpbnQgd2hlbiwgaW50IGNsZWFyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29uZmlnX3JlbWVtYmVyXGZQIChjaGFyICpsaW5lKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29uZmlnX3Byb2Nlc3NfbWVtb3JpZXNcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb25maWdfcHJvY2Vzc19tZW1vcmllc193aGVuXGZQIChpbnQgd2hlbiwgaW50IGNsZWFyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfY29uZmlnXGZQIChjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICpsaW5lX2hhbmRsZXIsIGludCB3aGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmZyZWVfY29uZmlnXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfY29uZmlnc19vcHRpb25hbFxmUCAoY29uc3QgY2hhciAqb3B0aW9uYWxfY29uZmlnLCBpbnQgd2hlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2NvbmZpZ3NcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9wcmVtaWJfY29uZmlnc1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZXRfY29uZmlndXJhdGlvbl9kaXJlY3RvcnlcZlAgKGNvbnN0IGNoYXIgKmRpcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQmdldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeVxmUCAoKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNldF9wZXJzaXN0ZW50X2RpcmVjdG9yeVxmUCAoY29uc3QgY2hhciAqZGlyKSIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5XGZQICgpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2V0X3RlbXBfZmlsZV9wYXR0ZXJuXGZQIChjb25zdCBjaGFyICpwYXR0ZXJuKSIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCZ2V0X3RlbXBfZmlsZV9wYXR0ZXJuXGZQICgpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9jb25maWdfZmlsZXNcZlAgKGludCB3aGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfY29uZmlnX3ByaW50X3VzYWdlXGZQIChjb25zdCBjaGFyICpsZWFkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfY29uZmlnX3N0b3JlXGZQIChjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpsaW5lKSIKLS5icgotLlJJICJcZklyZWFkX2NvbmZpZ19zdG9yZSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucyB0byBzdG9yZSBwZXJtZW5hbnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgYnkgc2V0cyBvciBwZXJzaXN0ZW50IGNvdW50ZXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9hcHBfY29uZmlnX3N0b3JlXGZQIChjb25zdCBjaGFyICpsaW5lKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc2F2ZV9wZXJzaXN0ZW50XGZQIChjb25zdCBjaGFyICp0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfY2xlYW5fcGVyc2lzdGVudFxmUCAoY29uc3QgY2hhciAqdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJjb25maWdfcGVycm9yXGZQIChjb25zdCBjaGFyICpzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCY29uZmlnX3B3YXJuXGZQIChjb25zdCBjaGFyICpzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJza2lwX3doaXRlXGZQIChjaGFyICpwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJza2lwX25vdF93aGl0ZVxmUCAoY2hhciAqcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc2tpcF90b2tlblxmUCAoY2hhciAqcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCY29weV9ud29yZFxmUCAoY2hhciAqZnJvbSwgY2hhciAqdG8sIGludCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJjb3B5X3dvcmRcZlAgKGNoYXIgKmZyb20sIGNoYXIgKnRvKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmdcZlAgKGNoYXIgKnNhdmV0bywgdV9jaGFyICpzdHIsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ1xmUCAoY2hhciAqcmVhZGZyb20sIHVfY2hhciAqKnN0ciwgc2l6ZV90ICpsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJyZWFkX2NvbmZpZ19zYXZlX29iamlkXGZQIChjaGFyICpzYXZldG8sIG9pZCAqb2JqaWQsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJyZWFkX2NvbmZpZ19yZWFkX29iamlkXGZQIChjaGFyICpyZWFkZnJvbSwgb2lkICoqb2JqaWQsIHNpemVfdCAqbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcmVhZF9jb25maWdfcmVhZF9kYXRhXGZQIChpbnQgdHlwZSwgY2hhciAqcmVhZGZyb20sIHZvaWQgKmRhdGFwdHIsIHNpemVfdCAqbGVuKSIKLS5icgotLlJJICJcZklyZWFkX2NvbmZpZ19yZWFkX2RhdGEgcmVhZHMgZGF0YSBvZiBhIGdpdmVuIHR5cGUgZnJvbSBhIHRva2VuKHMpIG9uIGEgY29uZmlndXJhdGlvbiBsaW5lLiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJyZWFkX2NvbmZpZ19yZWFkX21lbW9yeVxmUCAoaW50IHR5cGUsIGNoYXIgKnJlYWRmcm9tLCBjaGFyICpkYXRhcHRyLCBzaXplX3QgKmxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnJlYWRfY29uZmlnX3N0b3JlX2RhdGFcZlAgKGludCB0eXBlLCBjaGFyICpzdG9yZXRvLCB2b2lkICpkYXRhcHRyLCBzaXplX3QgKmxlbikiCi0uYnIKLS5SSSAiXGZJcmVhZF9jb25maWdfc3RvcmVfZGF0YSBzdG9yZXMgZGF0YSBvZiBhIGdpdmVuIHR5cGUgdG8gYSBjb25maWd1cmF0aW9uIGxpbmUgaW50byB0aGUgc3RvcmV0byBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnJlYWRfY29uZmlnX3N0b3JlX2RhdGFfcHJlZml4XGZQIChjaGFyIHByZWZpeCwgaW50IHR5cGUsIGNoYXIgKnN0b3JldG8sIHZvaWQgKmRhdGFwdHIsIHNpemVfdCBsZW4pIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCY29uZmlnX2ZpbGVzXGZQICogXGZCY29uZmlnX2ZpbGVzXGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbGluZWNvdW50XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJjdXJmaWxlbmFtZVxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSByZWFkX2NvbmZpZyByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgYSBmYWlybHkgZXh0ZW5zaWJsZSBzeXN0ZW0gb2YgcGFyc2luZyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgdGhlIHJ1biB0aW1lLiAKLQotVGhlIGlkZWEgaXMgdGhhdCB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiBpcyBhYmxlIHRvIHJlZ2lzdGVyIGhhbmRsZXJzIGZvciBjZXJ0YWluIHRva2VucyBzcGVjaWZpZWQgaW4gY2VydGFpbiB0eXBlcyBvZiBmaWxlcy4gVGhlIHJlYWRfY29uZmlncyBmdW5jdGlvbiBjYW4gdGhlbiBiZSBjYWxsZWQgdG8gbG9vayBmb3IgYWxsIHRoZSBmaWxlcyB0aGF0IGl0IGhhcyByZWdpc3RyYXRpb25zIGZvciwgZmluZCB0aGUgZmlyc3Qgd29yZCBvbiBlYWNoIGxpbmUsIGFuZCBwYXNzIHRoZSByZW1haW5kZXIgdG8gdGhlIGFwcHJvcHJpYXRlbHkgcmVnaXN0ZXJlZCBoYW5kbGVyLgotLlBQCi1Gb3IgcGVyc2lzdGVudCBjb25maWd1cmF0aW9uIHN0b3JhZ2UgeW91IHdpbGwgbmVlZCB0byB1c2UgdGhlIHJlYWRfY29uZmlnX3JlYWRfZGF0YSwgcmVhZF9jb25maWdfc3RvcmUsIGFuZCByZWFkX2NvbmZpZ19zdG9yZV9kYXRhIEFQSXMgaW4gY29uanVuY3Rpb24gd2l0aCBmaXJzdCByZWdpc3RlcmluZyBhIGNhbGxiYWNrIHNvIHdoZW4gdGhlIGFnZW50IHNodXRzZG93biBmb3Igd2hhdGV2ZXIgcmVhc29uIGRhdGEgaXMgd3JpdHRlbiB0byB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBmb2xsb3dpbmcgZXhwbGFpbnMgaW4gbW9yZSBkZXRhaWwgdGhlIHNlcXVlbmNlIHRvIG1ha2UgdGhpcyBoYXBwZW4uCi0uUFAKLVRoaXMgaXMgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBBUEksIHlvdSBuZWVkIHRvIGNhbGwgdGhpcyBBUEkgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBpbiBvcmRlciB0byBjb25maWd1cmUgcGVyc2lzdGVudCBzdG9yYWdlIG5lZWRzLgotLlBQCi1pbnQgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhpbnQgbWFqb3IsIGludCBtaW5vciwgU05NUENhbGxiYWNrICpuZXdfY2FsbGJhY2ssIHZvaWQgKmFyZyk7Ci0uUFAKLVlvdSB3aWxsIG5lZWQgdG8gc2V0IG1ham9yIHRvIFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgbWlub3IgdG8gU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLiBhcmcgaXMgd2hhdGV2ZXIgeW91IHdhbnQuCi0uUFAKLVlvdXIgY2FsbGJhY2sgZnVuY3Rpb24ncyBwcm90b3R5cGUgaXM6IGludCAoU05NUENhbGxiYWNrKSAoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZyk7Ci0uUFAKLVRoZSBtYWpvcklELCBtaW5vcklEIGFuZCBjbGllbnRhcmcgYXJlIHdoYXQgeW91IHBhc3NlZCBpbiB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGFib3ZlLiBXaGVuIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgeW91IGhhdmUgdG8gZXNzZW50aWFsbHkgdHJhbnNmZXIgYWxsIHlvdXIgc3RhdGUgZnJvbSBtZW1vcnkgdG8gZGlzay4gWW91IGRvIHRoaXMgYnkgZ2VuZXJhdGluZyBjb25maWd1cmF0aW9uIGxpbmVzIGludG8gYSBidWZmZXIuIFRoZSBsaW5lcyBhcmUgb2YgdGhlIGZvcm0gdG9rZW4gZm9sbG93ZWQgYnkgdG9rZW4gcGFyYW1ldGVycy4KLS5QUAotRmluYWxseSBzdG9yaW5nIGlzIGRvbmUgdXNpbmcgcmVhZF9jb25maWdfc3RvcmUodHlwZSwgYnVmZmVyKTsgdHlwZSBpcyB0aGUgYXBwbGljYXRpb24gbmFtZSB0aGlzIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgotLlBQCi1uZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKLS5QUAotTm93LCByZWFkaW5nIGJhY2sgdGhlIGRhdGE6IFRoaXMgaXMgZG9uZSBieSByZWdpc3RlcmluZyBhIGNvbmZpZyBoYW5kbGVyIGZvciB5b3VyIHRva2VuIHVzaW5nIHRoZSByZWdpc3Rlcl9jb25maWdfaGFuZGxlciBmdW5jdGlvbi4gWW91ciBoYW5kbGVyIHdpbGwgYmUgaW52b2tlZCBhbmQgeW91IGNhbiBwYXJzZSBpbiB0aGUgZGF0YSB1c2luZyB0aGUgcmVhZF9jb25maWdfcmVhZCBBUElzLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiY2hhciogcmVhZF9jb25maWdfcmVhZF9kYXRhIChpbnQgdHlwZSwgY2hhciAqIHJlYWRmcm9tLCB2b2lkICogZGF0YXB0ciwgc2l6ZV90ICogbGVuKSIKLS5QUAotcmVhZF9jb25maWdfcmVhZF9kYXRhIHJlYWRzIGRhdGEgb2YgYSBnaXZlbiB0eXBlIGZyb20gYSB0b2tlbihzKSBvbiBhIGNvbmZpZ3VyYXRpb24gbGluZS4gVGhlIHN1cHBvcnRlZCB0eXBlcyBhcmU6Ci0uUFAKLS5JUCAiXChidSIgMgotQVNOX0lOVEVHRVIKLS5JUCAiXChidSIgMgotQVNOX1RJTUVUSUNLUwotLklQICJcKGJ1IiAyCi1BU05fVU5TSUdORUQKLS5JUCAiXChidSIgMgotQVNOX09DVEVUX1NUUgotLklQICJcKGJ1IiAyCi1BU05fQklUX1NUUgotLklQICJcKGJ1IiAyCi1BU05fT0JKRUNUX0lECi0uUFAKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0eXBlXGZQIHRoZSBhc24gZGF0YSB0eXBlIHRvIGJlIHJlYWQgaW4uCi0uYnIKLVxmSXJlYWRmcm9tXGZQIHRoZSBjb25maWd1cmF0aW9uIGxpbmUgZGF0YSB0byBiZSByZWFkLgotLmJyCi1cZklkYXRhcHRyXGZQIGFuIGFsbG9jYXRlZCBwb2ludGVyIGV4cGVjdGVkIHRvIG1hdGNoIHRoZSB0eXBlIGJlaW5nIHJlYWQgKGludCAqLCB1X2ludCAqLCBjaGFyICoqLCBvaWQgKiopCi0uYnIKLVxmSWxlblxmUCBpcyB0aGUgbGVuZ3RoIG9mIGFuIGFzbiBvaWQgb3Igb2N0ZXQvYml0IHN0cmluZywgbm90IHJlcXVpcmVkIGZvciB0aGUgYXNuIGludGVnZXIsIHVuc2lnbmVkIGludGVnZXIsIGFuZCB0aW1ldGlja3MgdHlwZXMKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXRoZSBuZXh0IHRva2VuIGluIHRoZSBjb25maWd1cmF0aW9uIGxpbmUuIE5VTEwgaWYgbm9uZSBsZWZ0IG9yIGlmIGFuIHVua25vd24gdHlwZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODM2IG9mIGZpbGUgcmVhZF9jb25maWcuYy4KLS5TUyAidm9pZCByZWFkX2NvbmZpZ19zdG9yZSAoY29uc3QgY2hhciAqIHR5cGUsIGNvbnN0IGNoYXIgKiBsaW5lKSIKLS5QUAotcmVhZF9jb25maWdfc3RvcmUgaW50ZW5kZWQgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdG8gc3RvcmUgcGVybWVuYW50IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHNldHMgb3IgcGVyc2lzdGVudCBjb3VudGVycy4gQXBwZW5kcyBsaW5lIHRvIGEgZmlsZSBuYW1lZCBlaXRoZXIgRU5WKFNOTVBfUEVSU0lTVEVOVF9GSUxFKSBvciAnPE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk+Lzx0eXBlPi5jb25mJy4gQWRkcyBhIHRyYWlsaW5nIG5ld2xpbmUgdG8gdGhlIHN0b3JlZCBmaWxlIGlmIG5lY2Vzc2FyeS4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0eXBlXGZQIGlzIHRoZSBhcHBsaWNhdGlvbiBuYW1lIAotLmJyCi1cZklsaW5lXGZQIGlzIHRoZSBjb25maWd1cmF0aW9uIGxpbmUgd3JpdHRlbiB0byB0aGUgYXBwbGljYXRpb24gbmFtZSdzIGNvbmZpZ3VyYXRpb24gZmlsZQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdm9pZCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNzIgb2YgZmlsZSByZWFkX2NvbmZpZy5jLgotLlNTICJjaGFyKiByZWFkX2NvbmZpZ19zdG9yZV9kYXRhIChpbnQgdHlwZSwgY2hhciAqIHN0b3JldG8sIHZvaWQgKiBkYXRhcHRyLCBzaXplX3QgKiBsZW4pIgotLlBQCi1yZWFkX2NvbmZpZ19zdG9yZV9kYXRhIHN0b3JlcyBkYXRhIG9mIGEgZ2l2ZW4gdHlwZSB0byBhIGNvbmZpZ3VyYXRpb24gbGluZSBpbnRvIHRoZSBzdG9yZXRvIGJ1ZmZlci4gQ2FsbHMgcmVhZF9jb25maWdfc3RvcmVfZGF0YV9wcmVmaXggd2l0aCB0aGUgcHJlZml4IHBhcmFtZXRlciBzZXQgdG8gYSBjaGFyIHNwYWNlLiBUaGUgc3VwcG9ydGVkIHR5cGVzIGFyZToKLS5QUAotLklQICJcKGJ1IiAyCi1BU05fSU5URUdFUgotLklQICJcKGJ1IiAyCi1BU05fVElNRVRJQ0tTCi0uSVAgIlwoYnUiIDIKLUFTTl9VTlNJR05FRAotLklQICJcKGJ1IiAyCi1BU05fT0NURVRfU1RSCi0uSVAgIlwoYnUiIDIKLUFTTl9CSVRfU1RSCi0uSVAgIlwoYnUiIDIKLUFTTl9PQkpFQ1RfSUQKLS5QUAotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXR5cGVcZlAgdGhlIGFzbiBkYXRhIHR5cGUgdG8gYmUgc3RvcmVkCi0uYnIKLVxmSXN0b3JldG9cZlAgYSBwcmUtYWxsb2NhdGVkIGNoYXIgYnVmZmVyIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgZGF0YSB0byBiZSBzdG9yZWQKLS5icgotXGZJZGF0YXB0clxmUCBjb250YWlucyB0aGUgdmFsdWUgdG8gYmUgc3RvcmVkLCB0aGUgc3VwcG9ydGVkIHBvaW50ZXJzOiAoaW50ICosIHVfaW50ICosIGNoYXIgKiosIG9pZCAqKikKLS5icgotXGZJbGVuXGZQIGlzIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHRvIGJlIHN0b3JlZCAobm90IHJlcXVpcmVkIGZvciB0aGUgYXNuIGludGVnZXIsIHVuc2lnbmVkIGludGVnZXIsIGFuZCB0aW1ldGlja3MgdHlwZXMpCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1jaGFyYWN0ZXIgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLiBOVUxMIGlmIGFuIHVua25vd24gdHlwZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTk1IG9mIGZpbGUgcmVhZF9jb25maWcuYy4KLS5TUyAic3RydWN0IFxmQmNvbmZpZ19saW5lXGZQKiByZWdpc3Rlcl9jb25maWdfaGFuZGxlciAoY29uc3QgY2hhciAqIHR5cGUsIGNvbnN0IGNoYXIgKiB0b2tlbiwgdm9pZCgqKShjb25zdCBjaGFyICosIGNoYXIgKikgcGFyc2VyLCB2b2lkKCopKHZvaWQpIHJlbGVhc2VyLCBjb25zdCBjaGFyICogaGVscClcZkMgW3JlYWRdXGZQIgotLlBQCi1yZWdpc3Rlcl9jb25maWdfaGFuZGxlciByZWdpc3RlcnMgaGFuZGxlcnMgZm9yIGNlcnRhaW4gdG9rZW5zIHNwZWNpZmllZCBpbiBjZXJ0YWluIHR5cGVzIG9mIGZpbGVzLiBBbGxvd3MgYSBcZkJtb2R1bGVcZlAgd3JpdGVyIHVzZS9yZWdpc3RlciBtdWx0aXBsZSBjb25maWd1cmF0aW9uIGZpbGVzIGJhc2VkIG9mZiBvZiB0aGUgdHlwZSBwYXJhbWV0ZXIuIEEgXGZCbW9kdWxlXGZQIHdyaXRlciBtYXkgd2FudCB0byBzZXQgdXAgbXVsdGlwbGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBzZXBhcmF0ZSBvdXQgcmVsYXRlZCB0YXNrcy92YXJpYWJsZXMgb3IganVzdCBmb3IgbWFuYWdlbWVudCBvZiB3aGVyZSB0byBwdXQgdG9rZW5zIGFzIHRoZSBcZkJtb2R1bGVcZlAgb3IgbW9kdWxlcyBnZXQgbW9yZSBjb21wbGV4IGluIHJlZ2FyZCB0byBoYW5kbGluZyB0b2tlbiByZWdpc3RyYXRpb25zLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXR5cGVcZlAgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2VkLCBlLmcuLCBpZiBzbm1wLmNvbmYgaXMgdGhlIGZpbGUgd2hlcmUgdGhlIHRva2VuIGlzIGxvY2F0ZWQgdXNlICdzbm1wJyBoZXJlLiBNdWx0aXBsZSBjb2xvbiBzZXBhcmF0ZWQgdG9rZW5zIG1pZ2h0IGJlIHVzZWQuIElmIE5VTEwgb3IgJycgdGhlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHVzZWQgd2lsbCBiZSA8YXBwbGljYXRpb24+LmNvbmYuCi0uYnIKLVxmSXRva2VuXGZQIHRoZSB0b2tlbiBiZWluZyBwYXJzZWQgZnJvbSB0aGUgZmlsZS4gTXVzdCBiZSBub24tTlVMTC4KLS5icgotXGZJcGFyc2VyXGZQIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCB1c2UgdGhlIHNwZWNpZmllZCB0b2tlbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgdG8gZG8gd2hhdGV2ZXIgaXMgcmVxdWlyZWQgU2hvdWxkIGJlIG5vbi1OVUxMIGluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIHRoaXMgQVBJLgotLmJyCi1cZklyZWxlYXNlclxmUCBpZiBub24tTlVMTCwgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBpcyBjYWxsZWQgaWYgYW5kIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHJlLXJlYWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZyZWUgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIHRva2VuIGhhbmRsZXIgZnVuY3Rpb24uCi0uYnIKLVxmSWhlbHBcZlAgaWYgbm9uLU5VTEwsIHVzZWQgdG8gZGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIG9uIHRoZSBleHBlY3RlZCBhcmd1bWVudHMgYWZ0ZXIgdGhlIHRva2VuLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUG9pbnRlciB0byBhIG5ldyBjb25maWcgbGluZSBlbnRyeSBvciBOVUxMIG9uIGVycm9yLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4NCBvZiBmaWxlIHJlYWRfY29uZmlnLmMuCi0uU1MgInZvaWQgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciAoY29uc3QgY2hhciAqIHR5cGVfcGFyYW0sIGNvbnN0IGNoYXIgKiB0b2tlbikiCi0uUFAKLXVyZWdpc3Rlcl9jb25maWdfaGFuZGxlciB1bi1yZWdpc3RlcnMgaGFuZGxlcnMgZ2l2ZW4gYSBzcGVjaWZpYyB0eXBlX3BhcmFtIGFuZCB0b2tlbi4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0eXBlX3BhcmFtXGZQIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdXNlZCB3aGVyZSB0aGUgdG9rZW4gaXMgbG9jYXRlZC4gVXNlZCB0byBsb29rdXAgdGhlIGNvbmZpZyBmaWxlIGVudHJ5Ci0uYnIKLVxmSXRva2VuXGZQIHRoZSB0b2tlbiB0aGF0IGlzIGJlaW5nIHVucmVnaXN0ZXJlZAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdm9pZCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMxNSBvZiBmaWxlIHJlYWRfY29uZmlnLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfcmVhZF9vbmx5LjMgYi9tYW4vbmV0c25tcF9yZWFkX29ubHkuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhNDBmZC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9yZWFkX29ubHkuMworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS5USCAicmVhZF9vbmx5IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotcmVhZF9vbmx5IFwtIAotLlBQCi1NYWtlIHlvdXIgaGFuZGxlciByZWFkX29ubHkgYXV0b21hdGljYWxseSBUaGUgb25seSBwdXJwb3NlIG9mIHRoaXMgaGFuZGxlciBpcyB0byByZXR1cm4gYW4gYXBwcm9wcmlhdGUgZXJyb3IgZm9yIGFueSByZXF1ZXN0cyBwYXNzZWQgdG8gaXQgaW4gYSBTRVQgbW9kZS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfcmVhZF9vbmx5X2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSByZWFkX29ubHkgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWFkX29ubHlfaGVscGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9yZWFkX29ubHlfaGVscGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgcmVhZF9vbmx5IGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHJlYWRfb25seSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotTWFrZSB5b3VyIGhhbmRsZXIgcmVhZF9vbmx5IGF1dG9tYXRpY2FsbHkgVGhlIG9ubHkgcHVycG9zZSBvZiB0aGlzIGhhbmRsZXIgaXMgdG8gcmV0dXJuIGFuIGFwcHJvcHJpYXRlIGVycm9yIGZvciBhbnkgcmVxdWVzdHMgcGFzc2VkIHRvIGl0IGluIGEgU0VUIG1vZGUuIAotCi1JbnNlcnRpbmcgaXQgaW50byB5b3VyIGhhbmRsZXIgY2hhaW4gd2lsbCBlbnN1cmUgeW91J3JlIG5ldmVyIGFza2VkIHRvIHBlcmZvcm0gYSBTRVQgcmVxdWVzdCBzbyB5b3UgY2FuIGlnbm9yZSB0aG9zZSBlcnJvciBjb25kaXRpb25zLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfcmVhZF9vbmx5X2hhbmRsZXIgKHZvaWQpIgotLlBQCi1yZXR1cm5zIGEgcmVhZF9vbmx5IGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjkgb2YgZmlsZSByZWFkX29ubHkuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfcmVhZF9vbmx5X2hlbHBlciAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSByZWFkX29ubHkgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgcmVhZF9vbmx5IGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODEgb2YgZmlsZSByZWFkX29ubHkuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9yb3dfbWVyZ2UuMyBiL21hbi9uZXRzbm1wX3Jvd19tZXJnZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmM2MmQyLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3Jvd19tZXJnZS4zCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS5USCAicm93X21lcmdlIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotcm93X21lcmdlIFwtIAotLlBQCi1DYWxscyBzdWIgaGFuZGxlcnMgd2l0aCByZXF1ZXN0IGZvciBvbmUgcm93IGF0IGEgdGltZS4gIAotCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJST1dfTUVSR0VfV0FJVElOR1xmUCAgIDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJST1dfTUVSR0VfQUNUSVZFXGZQICAgMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlJPV19NRVJHRV9ET05FXGZQICAgMiIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlJPV19NRVJHRV9IRUFEXGZQICAgMyIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyXGZQIChpbnQgcHJlZml4X2xlbikiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIHJvd19tZXJnZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3Jvd19tZXJnZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgYnV0IGFsc28gaW5qZWN0cyBhIHJvd19tZXJnZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNcZlAgKiBcZkJuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZ2V0XGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgaW50IGNyZWF0ZV9taXNzaW5nKSIKLS5icgotLlJJICJcZklyZXRyaWV2ZSByb3dfbWVyZ2Vfc3RhdHVzIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcm93X21lcmdlX3N0YXR1c19maXJzdFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8pIgotLmJyCi0uUkkgIlxmSURldGVybWluZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcm93X21lcmdlX3N0YXR1c19sYXN0XGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbykiCi0uYnIKLS5SSSAiXGZJRGV0ZXJtaW5lIGlmIHRoaXMgaXMgdGhlIGxhc3Qgcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3Jvd19tZXJnZV9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJSW1wbGVtZW50cyB0aGUgcm93X21lcmdlIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfcm93X21lcmdlXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgcm93X21lcmdlIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHJvd19tZXJnZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotQ2FsbHMgc3ViIGhhbmRsZXJzIHdpdGggcmVxdWVzdCBmb3Igb25lIHJvdyBhdCBhIHRpbWUuIAotCi1UaGlzIGhlbHBlciBzcGxpdHMgYSB3aG9sZSBidW5jaCBvZiByZXF1ZXN0cyBpbnRvIGNodW5rcyBiYXNlZCBvbiB0aGUgcm93IGluZGV4IHRoYXQgdGhleSByZWZlciB0bywgYW5kIHBhc3NlcyBhbGwgcmVxdWVzdHMgZm9yIGEgZ2l2ZW4gcm93IHRvIHRoZSBsb3dlciBoYW5kbGVycy4gVGhpcyBpcyB1c2VmdWwgZm9yIGhhbmRsZXJzIHRoYXQgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIG11bHRpcGxlIHJvd3MgYXQgdGhlIHNhbWUgdGltZSwgYnV0IGFyZSBoYXBweSB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHJlcXVlc3QgbGlzdCBmb3IgYSBzaW5nbGUgcm93LiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfcm93X21lcmdlX2hhbmRsZXIgKGludCBwcmVmaXhfbGVuKSIKLS5QUAotcmV0dXJucyBhIHJvd19tZXJnZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4IG9mIGZpbGUgcm93X21lcmdlLmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X3Jvd19tZXJnZSAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSByb3dfbWVyZ2UgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgcm93X21lcmdlIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzYwIG9mIGZpbGUgcm93X21lcmdlLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3Jvd19tZXJnZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1mdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCBidXQgYWxzbyBpbmplY3RzIGEgcm93X21lcmdlIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQyIG9mIGZpbGUgcm93X21lcmdlLmMuCi0uU1MgImludCBuZXRzbm1wX3Jvd19tZXJnZV9oZWxwZXJfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1JbXBsZW1lbnRzIHRoZSByb3dfbWVyZ2UgaGFuZGxlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTQgb2YgZmlsZSByb3dfbWVyZ2UuYy4KLS5TUyAiaW50IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19maXJzdCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbykiCi0uUFAKLURldGVybWluZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCByb3cuIHJldHVybnMgMSBpZiB0aGlzIGlzIHRoZSBmaXJzdCByb3cgZm9yIHRoaXMgcGFzcyBvZiB0aGUgaGFuZGxlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTAgb2YgZmlsZSByb3dfbWVyZ2UuYy4KLS5TUyAiXGZCbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzXGZQKiBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZ2V0IChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBpbnQgY3JlYXRlX21pc3NpbmcpIgotLlBQCi1yZXRyaWV2ZSByb3dfbWVyZ2Vfc3RhdHVzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjcgb2YgZmlsZSByb3dfbWVyZ2UuYy4KLS5TUyAiaW50IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19sYXN0IChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvKSIKLS5QUAotRGV0ZXJtaW5lIGlmIHRoaXMgaXMgdGhlIGxhc3Qgcm93LiByZXR1cm5zIDEgaWYgdGhpcyBpcyB0aGUgbGFzdCByb3cgZm9yIHRoaXMgcGFzcyBvZiB0aGUgaGFuZGxlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzAgb2YgZmlsZSByb3dfbWVyZ2UuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zY2FsYXIuMyBiL21hbi9uZXRzbm1wX3NjYWxhci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWVkNGNjLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NjYWxhci4zCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS5USCAic2NhbGFyIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc2NhbGFyIFwtIAotLlBQCi1Qcm9jZXNzIHNjYWxhcnMgZWFzaWx5LiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9zY2FsYXJfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlcyBhIHNjYWxhciBoYW5kbGVyIGNhbGxpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlciB3aXRoIGEgaGFuZGxlciBuYW1lIGRlZmF1bHRlZCB0byAnc2NhbGFyJyBhbmQgYWNjZXNzIG1ldGhvZCwgbmV0c25tcF9zY2FsYXJfaGVscGVyX2hhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIHNjYWxhciBoZWxwZXIgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfc2NhbGFyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIHJlYWQgb25seSBzY2FsYXIgaGVscGVyIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2NhbGFyX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVByb2Nlc3Mgc2NhbGFycyBlYXNpbHkuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9zY2FsYXJfaGFuZGxlciAodm9pZCkiCi0uUFAKLUNyZWF0ZXMgYSBzY2FsYXIgaGFuZGxlciBjYWxsaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIgd2l0aCBhIGhhbmRsZXIgbmFtZSBkZWZhdWx0ZWQgdG8gJ3NjYWxhcicgYW5kIGFjY2VzcyBtZXRob2QsIG5ldHNubXBfc2NhbGFyX2hlbHBlcl9oYW5kbGVyLiBcZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9taWJfaGFuZGxlciBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIGhhbmRsZXIncyBuYW1lIGFuZCB0aGUgYWNjZXNzIG1ldGhvZAotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQm5ldHNubXBfZ2V0X3NjYWxhcl9oYW5kbGVyXGZQIAotLlBQCi1cZkJuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhclxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ2IG9mIGZpbGUgc2NhbGFyLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9zY2FsYXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSByZWFkIG9ubHkgc2NhbGFyIGhlbHBlciBoYW5kbGVyLiBUaGlzIGZ1bmN0aW9uIGlzIHZlcnkgc2ltaWxhciB0byBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhciB0aGUgb25seSBhZGRpdGlvbiBpcyB0aGF0IHRoZSAncmVhZF9vbmx5JyBoYW5kbGVyIGlzIGluamVjdGVkIGludG8gdGhlIGhhbmRsZXIgY2hhaW4gcHJpb3IgdG8gaW5qZWN0aW5nIHRoZSBzZXJpYWxpemUgaGFuZGxlciBhbmQgcmVnaXN0ZXJpbmcgcmVnaW5mby4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZWdpbmZvXGZQIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIHdoaWNoIGNvdWxkIGdldCBjcmVhdGVkIHVzaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uLiBVc2VkIHRvIHJlZ2lzdGVyIGEgcmVhZCBvbmx5IHNjYWxhciBoZWxwZXIgaGFuZGxlci4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLU1JQl9SRUdJU1RFUkVEX09LIGlzIHJldHVybmVkIGlmIHRoZSByZWdpc3RyYXRpb24gd2FzIGEgc3VjY2Vzcy4gRmFpbHVyZXMgYXJlIE1JQl9SRUdJU1RSQVRJT05fRkFJTFVSRSBhbmQgTUlCX0RVUExJQ0FURV9SRUdJU1RSQVRJT04uCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJcZlAgCi0uUFAKLVxmQm5ldHNubXBfZ2V0X3NjYWxhcl9oYW5kbGVyXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA5IG9mIGZpbGUgc2NhbGFyLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1UaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIHNjYWxhciBoZWxwZXIgaGFuZGxlci4gVGhlIHJlZ2lzdGVyZWQgT0lELCByZWdpbmZvLT5yb290b2lkLCBzcGFjZSBpcyBleHRlbmRlZCBmb3IgdGhlIGluc3RhbmNlIHN1YmlkIHVzaW5nIHJlYWxsb2MoKSBidXQgdGhlIHJlZ2luZm8tPnJvb3RvaWRfbGVuIGxlbmd0aCBpcyBub3QgZXh0ZW5kZWQganVzdCB5ZXQuIC5UaGlzIGZ1bmN0aW9uIHN1YnNlcXVlbnRseSBpbmplY3RzIHRoZSBpbnN0YW5jZSwgc2NhbGFyLCBhbmQgc2VyaWFsaXplIGhlbHBlciBoYW5kbGVycyBiZWZvcmUgYWN0dWFsbHkgcmVnaXN0ZXJpbmcgcmVnaW5mby4KLS5QUAotRWFjaCBoYW5kbGVyIGlzIGluamVjdGVkL3B1c2hlZCB0byB0aGUgdG9wIG9mIHRoZSBoYW5kbGVyIGNoYWluIGxpc3QgYW5kIHdpbGwgYmUgcHJvY2Vzc2VkIGxhc3QgaW4gZmlyc3Qgb3V0LCBMSUZPLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlZ2luZm9cZlAgYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgd2hpY2ggY291bGQgZ2V0IGNyZWF0ZWQgdXNpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24uIFVzZWQgdG8gcmVnaXN0ZXIgYSBzY2FsYXIgaGVscGVyIGhhbmRsZXIuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1NSUJfUkVHSVNURVJFRF9PSyBpcyByZXR1cm5lZCBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBhIHN1Y2Nlc3MuIEZhaWx1cmVzIGFyZSBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxVUkUgYW5kIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3NjYWxhclxmUCAKLS5QUAotXGZCbmV0c25tcF9nZXRfc2NhbGFyX2hhbmRsZXJcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NCBvZiBmaWxlIHNjYWxhci5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zIGIvbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYmE5YjAuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0uVEggInNjYWxhcl9ncm91cCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXNjYWxhcl9ncm91cCBcLSAKLS5QUAotUHJvY2VzcyBncm91cHMgb2Ygc2NhbGFycy4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfc2NhbGFyX2dyb3VwX2hhbmRsZXJcZlAgKG9pZCBmaXJzdCwgb2lkIGxhc3QpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgb2lkIGZpcnN0LCBvaWQgbGFzdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2NhbGFyX2dyb3VwX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVByb2Nlc3MgZ3JvdXBzIG9mIHNjYWxhcnMuIAotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zIGIvbWFuL25ldHNubXBfc2VyaWFsaXplLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NzRmM2QuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc2VyaWFsaXplLjMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0uVEggInNlcmlhbGl6ZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXNlcmlhbGl6ZSBcLSAKLS5QUAotQ2FsbHMgc3ViIGhhbmRsZXJzIG9uZSByZXF1ZXN0IGF0IGEgdGltZS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfc2VyaWFsaXplX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBzZXJpYWxpemUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9zZXJpYWxpemVcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSWZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIGJ1dCBhbHNvIGluamVjdHMgYSBzZXJpYWxpemUgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2VyaWFsaXplX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZklJbXBsZW1lbnRzIHRoZSBzZXJpYWwgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9zZXJpYWxpemVcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSBzZXJpYWxpemUgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgc2VyaWFsaXplIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1DYWxscyBzdWIgaGFuZGxlcnMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLiAKLQotVGhpcyBmdW5jdGlvbmFsbHkgcGFzc2VzIGluIG9uZSByZXF1ZXN0IGF0IGEgdGltZSBpbnRvIGxvd2VyIGhhbmRsZXJzIHJhdGhlciB0aGFuIGEgd2hvbGUgYnVuY2ggb2YgcmVxdWVzdHMgYXQgb25jZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGhhbmRsZXJzIHRoYXQgZG9uJ3Qgd2FudCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHJlcXVlc3QgbGlzdHMgdGhlbXNlbHZlcy4gR2VuZXJhbGx5LCB0aGlzIGlzIHByb2JhYmx5IGxlc3MgZWZmaWNpZW50IHNvIHVzZSB3aXRoIGNhdXRpb24uIFRoZSBzZXJpYWxpemUgaGFuZGxlciBtaWdodCBiZSB1c2VhYmxlIHRvIGR5bmFtaWNhbGx5IGZpeCBoYW5kbGVycyB3aXRoIGJyb2tlbiBsb29waW5nIGNvZGUsIGhvd2V2ZXIuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9zZXJpYWxpemVfaGFuZGxlciAodm9pZCkiCi0uUFAKLXJldHVybnMgYSBzZXJpYWxpemUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMSBvZiBmaWxlIHNlcmlhbGl6ZS5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9zZXJpYWxpemUgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgc2VyaWFsaXplIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHNlcmlhbGl6ZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkzIG9mIGZpbGUgc2VyaWFsaXplLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3NlcmlhbGl6ZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1mdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCBidXQgYWxzbyBpbmplY3RzIGEgc2VyaWFsaXplIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQwIG9mIGZpbGUgc2VyaWFsaXplLmMuCi0uU1MgImludCBuZXRzbm1wX3NlcmlhbGl6ZV9oZWxwZXJfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1JbXBsZW1lbnRzIHRoZSBzZXJpYWwgaGFuZGxlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0OCBvZiBmaWxlIHNlcmlhbGl6ZS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmIGIvbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMzUzZAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmCkBAIC0wLDAgKzEsMjM2IEBACisuVEggTkVUU05NUF9TRVNTX0FQSSAzICIxOSBNYXkgMjAxMSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCitzbm1wX3Nlc3NfaW5pdCwKK3NubXBfc2Vzc19vcGVuLAorc25tcF9zZXNzX3Nlc3Npb24sCitzbm1wX3Nlc3Nfc2VuZCwKK3NubXBfc2Vzc19hc3luY19zZW5kLAorc25tcF9zZXNzX3NlbGVjdF9pbmZvLAorc25tcF9zZXNzX3JlYWQsCitzbm1wX3Nlc3NfdGltZW91dCwKK3NubXBfc2Vzc19zeW5jaF9yZXNwb25zZSwKK3NubXBfc2Vzc19jbG9zZSwKK3NubXBfc2Vzc19lcnJvciAtIHNlc3Npb24gZnVuY3Rpb25zCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgorLlBQCisuQkkgInZvaWQgc25tcF9zZXNzX2luaXQoc3RydWN0IHNubXBfc2Vzc2lvbiAqIiBzZXNzaW9uICIpOyIKKy5QUAorLkJJICJ2b2lkICpzbm1wX3Nlc3Nfb3BlbihzdHJ1Y3Qgc25tcF9zZXNzaW9uICoiIHNlc3Npb24gIik7IgorLlBQCisuQkkgInN0cnVjdCBzbm1wX3Nlc3Npb24gKnNubXBfc2Vzc19zZXNzaW9uKHZvaWQgKiIgaGFuZGxlICIpOyIKKy5QUAorLkJJICJpbnQgc25tcF9zZXNzX3NlbmQodm9pZCAqIiBoYW5kbGUgIiwgc3RydWN0IHNubXBfcGR1ICoiIHBkdSAiKTsiCisuUFAKKy5CSSAiaW50IHNubXBfc2Vzc19hc3luY19zZW5kKHZvaWQgKiIgaGFuZGxlICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9wZHUgKiIgcGR1ICIsICIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9jYWxsYmFjayAiIGNhbGxiYWNrICIsICIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIiBjYWxsYmFja0RhdGEgIik7IgorLlBQCisuQkkgImludCBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8odm9pZCAqIiBoYW5kbGUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiIgbnVtZmRzICIsIGZkX3NldCAqIiBmZHNldCAiLCAiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqIiB0aW1lb3V0ICIsICIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIiBibG9jayAiKTsiCisuUFAKKy5CSSAiaW50IHNubXBfc2Vzc19yZWFkKHZvaWQgKiIgaGFuZGxlICIsIGZkX3NldCAqIiBmZHNldCAiKTsiCisuUFAKKy5CSSAidm9pZCBzbm1wX3Nlc3NfdGltZW91dCh2b2lkICoiIGhhbmRsZSAiKTsiCisuUFAKKy5CSSAiaW50IHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZSAoIHZvaWQgKiIgImhhbmRsZSwiCisuUlMKKy5CSSAibmV0c25tcF9wZHUgKiIgInBkdSIgIiwgIgorLmJyCisuQkkgIm5ldHNubXBfcGR1ICoqIiAicmVzcG9uc2UiICk7CisuUkUKKy5QUAorLkJJICJpbnQgc25tcF9zZXNzX2Nsb3NlKHZvaWQgKiIgaGFuZGxlICIpOyIKKy5QUAorLkJJICJ2b2lkIHNubXBfc2Vzc19lcnJvcih2b2lkICoiIGhhbmRsZSAiLCBpbnQgKiIgcGNsaWJlcnIgIiwgIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgaW50ICoiIHBzbm1wZXJyICIsIGNoYXIgKioiIHBwZXJyc3RyaW5nICIpOyIKKy5TSCBERVNDUklQVElPTgorVGhlc2UgZnVuY3Rpb25zIGRlZmluZSBhIHN1YnNldCBvZiB0aGUgQVBJIHRoYXQgY2FuIGJlIHVzZWQKK3RvIG1hbmFnZSBzaW5nbGUgU05NUCBzZXNzaW9ucyBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLgorRXhjZXB0IGZvcgorLkJSIHNubXBfc2Vzc19zZXNzaW9uKCkgLAordGhlc2UgZnVuY3Rpb25zIGFyZSBzaW5nbGUgc2Vzc2lvbiB2ZXJzaW9ucyBvZiB0aGUgdHJhZGl0aW9uYWwKK1NOTVAgbGlicmFyeSBBUEkuCisuUFAKK05vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgdXNlIGFuIG9wYXF1ZSBwb2ludGVyCisuUkkgKCBoYW5kbGUKK2luIHRoZSBhYm92ZSBwcm90b3R5cGVzKSB0byBpZGVudGlmeSBhIHNpbmdsZSBzZXNzaW9uIGluIGxpZXUgb2YgYQorLkkgc2Vzc2lvbgorcG9pbnRlciAoYXMgaW4gdGhlIHRyYWRpdGlvbmFsIEFQSSkuCisuUFAKKy5CIHNubXBfc2Vzc19pbml0KCkKK3ByZXBhcmVzIGEgc3RydWN0IHNubXBfc2Vzc2lvbiB0aGF0IHNvdXJjZXMgdHJhbnNwb3J0IGNoYXJhY3RlcmlzdGljcworYW5kIGNvbW1vbiBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYSBzZXQgb2YgU05NUCB0cmFuc2FjdGlvbnMuCitBZnRlciB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8KKy5CIHNubXBfc2Vzc19vcGVuKCkKK3RvIGNyZWF0ZSBhbiBTTk1QIHNlc3Npb24sIHRoZSBzdHJ1Y3R1cmUgaXMgbm8gbG9uZ2VyIHVzZWQuICBJbnN0ZWFkCit0aGUgb3BhcXVlIHBvaW50ZXIgcmV0dXJuZWQgYnkKKy5CIHNubXBfc2Vzc19vcGVuKCkKK2lzIHVzZWQgdG8gcmVmZXIgdG8gdGhhdCBzZXNzaW9uIGhlbmNlZm9ydGguCisuUFAKK1NOTVAgc2Vzc2lvbnMgdGhhdCBhcmUgY3JlYXRlZCB3aXRoCisuQiBzbm1wX3Nlc3Nfb3BlbigpCithcmUgbm90IGFmZmVjdGVkIGJ5LCBhbmQgU0hPVUxEIE5PVCBCRSBVU0VEIFdJVEgsCisuQlIgc25tcF9zZWxlY3RfaW5mbygpICIsICIgc25tcF9yZWFkKCkgIiwgIiBzbm1wX3RpbWVvdXQoKSAiIG5vciIKKy5CUiBzbm1wX2Nsb3NlKCkgLgorUmF0aGVyIHRoZSBlcXVpdmFsZW50IHNpbmdsZSBzZXNzaW9uIGZ1bmN0aW9ucyBkZXNjcmliZWQgaGVyZSBzaG91bGQKK2JlIHVzZWQuCisuUFAKKy5CIHNubXBfc2Vzc19pbml0KCkKK2FuZAorLkIgc25tcF9zZXNzX29wZW4oKQorZWFjaCB0YWtlIGFzIGlucHV0IGEgcG9pbnRlciB0byBhIHN0cnVjdCBzbm1wX3Nlc3Npb24gb2JqZWN0LgorVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGEgc2V0IG9mIHRyYW5zYWN0aW9ucyB0aGF0Cit3aWxsIHNoYXJlIHNpbWlsYXIgdHJhbnNwb3J0IGNoYXJhY3RlcmlzdGljcy4KKy5CIHNubXBfc2Vzc19zZXNzaW9uKCkKK3Rha2VzIHRoZSBvcGFxdWUgc2Vzc2lvbiBoYW5kbGUgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvCitpdHMgYXNzb2NpYXRlZCBzdHJ1Y3Qgc25tcF9zZXNzaW9uLgorLlBQCisuQiBzbm1wX3Nlc3Nfc2VuZCgpCithbmQKKy5CIHNubXBfc2Vzc19hc3luY19zZW5kKCkKK2VhY2ggdGFrZSBhCisuSSBwZHUKK3BhcmFtZXRlciwgd2hpY2ggcG9pbnRzIHRvIGEgc3RydWN0IHNubXBfcGR1IG9iamVjdCBjb250YWluaW5nCitpbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyBhIHRyYW5zYWN0aW9uIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQgb3ZlcgorYW4gb3BlbiBzZXNzaW9uLgorLlBQCitDb25zdWx0IHNubXBfYXBpLmggZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgorLlBQCitXaXRoIHRoZQorLkkgc25tcF9zZXNzX2FzeW5jX3NlbmQoKQorY2FsbCwKKy5JIHNubXBfc2Vzc19yZWFkCit3aWxsIGludm9rZSB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgorLlBQCisuQlIgc25tcF9zZXNzX3NlbGVjdF9pbmZvKCkgIiwgIiBzbm1wX3Nlc3NfcmVhZCgpICIgYW5kICIgc25tcF9zZXNzX3RpbWVvdXQoKQorcHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIHRoZSB1c2Ugb2YgdGhlCisuQlIgc2VsZWN0ICgyKQorc3lzdGVtIGNhbGwgc28gdGhhdCBTTk1QIHRyYW5zYWN0aW9ucyBmb3IgYSBzaW5nbGUgc2Vzc2lvbiBjYW4gb2NjdXIKK2FzeW5jaHJvbm91c2x5LgorLlBQCisuQiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oKQoraXMgcGFzc2VkIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwYXNzZWQgdG8KKy5CUiBzZWxlY3QgKDIpCitpbiB0aGUgYWJzZW5jZSBvZiBTTk1QLiAgRm9yIGV4YW1wbGUsIHRoaXMgbWlnaHQgaW5jbHVkZSBmaWxlCitkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gbG9vcCBvZiBhIGdyYXBoaWNhbAorYXBwbGljYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gaXMgbW9kaWZpZWQgc28gdGhhdCBTTk1QIHdpbGwgZ2V0IHRoZQorc2VydmljZSBpdCByZXF1aXJlcyBmcm9tIHRoZSBjYWxsIHRvCisuQlIgc2VsZWN0ICgyKS4KK0luIHRoaXMgY2FzZSwKKy5JUiBudW1mZHMgIiwgIiBmZHNldCAiIGFuZCAiIHRpbWVvdXQKK2NvcnJlc3BvbmQgdG8gdGhlCisuSVIgbmZkcyAiLCAiIHJlYWRmZHMgIiBhbmQgIiB0aW1lb3V0Cithcmd1bWVudHMgdG8KKy5CUiBzZWxlY3QgKDIpCityZXNwZWN0aXZlbHkuICBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCB0aW1lb3V0IG11c3QgQUxXQVlTIHBvaW50IHRvCithbiBhbGxvY2F0ZWQgKGJ1dCBwZXJoYXBzIHVuaW5pdGlhbGl6ZWQpCisuSSBzdHJ1Y3QgdGltZXZhbAorKGl0IGNhbm5vdCBiZSBOVUxMIGFzIGZvcgorLkJSIHNlbGVjdCAoMikpLgorSWYKKy5JIHRpbWVvdXQKK3dvdWxkIGhhdmUgYmVlbiBwYXNzZWQgYXMgTlVMTCwKKy5JIGJsb2NrCitpcyBpbnN0ZWFkIHNldCB0byB0cnVlLCBhbmQKKy5JIHRpbWVvdXQKK2lzIHRyZWF0ZWQgYXMgdW5kZWZpbmVkLiAgVGhpcyBzYW1lIHJ1bGUgYXBwbGllcyB1cG9uIHJldHVybiBmcm9tCisuQlIgc25tcF9zZWxlY3RfaW5mbygpIC4KKy5QUAorQWZ0ZXIgY2FsbGluZworLkIgc25tcF9zZXNzX3NlbGVjdF9pbmZvKCkgLAorLkJSIHNlbGVjdCAoMikKK3Nob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgcmV0dXJuZWQgZGF0YS4gIFdoZW4gaXQgcmV0dXJucywKKy5CIHNubXBfc2Vzc19yZWFkKCkKK3Nob3VsZCB0aGVuIGJlIGNhbGxlZCB3aXRoIHRoZQorLkkgZmRfc2V0CityZXR1cm5lZCBmcm9tCisuQlIgc2VsZWN0ICgyKS4KK1RoaXMgd2lsbCByZWFkIGFueSBpbnB1dCBmcm9tIHRoaXMgc2Vzc2lvbidzIFNOTVAgc29ja2V0LiAgSWYKKy5CUiBzZWxlY3QgKDIpCit0aW1lcyBvdXQgKHRoYXQgaXMsIGl0IHJldHVybnMgemVybyksCisuQiBzbm1wX3Nlc3NfdGltZW91dCgpCitzaG91bGQgYmUgY2FsbGVkIHRvIHNlZSBpZiBhIHRpbWVvdXQgaGFzIG9jY3VycmVkIG9uIHRoZSBTTk1QCitzZXNzaW9uLgorLlBQCisuSSBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UKK2lzIGEgY29udmVuaWVuY2Ugcm91dGluZSB0aGF0IHdpbGwgc2VuZCB0aGUgcmVxdWVzdCwKK3dhaXQgZm9yIHRoZSByZXNwb25zZSBhbmQgcHJvY2VzcyBpdCBiZWZvcmUgcmV0dXJuaW5nLgorU2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YKKy5JICJzbm1wX3Nlc3Nfc2VuZCIgIiwgIiAic25tcF9zZXNzX3JlYWQiCitldGMgZm9yIGRldGFpbHMuCisuU0ggRElBR05PU1RJQ1MKKy5QUAorRXJyb3IgcmV0dXJuIHN0YXR1cyBmcm9tIAorLkIgc25tcF9zZXNzX29wZW4oKQoraXMgaW5kaWNhdGVkIGJ5IHJldHVybiBvZiBhIE5VTEwgcG9pbnRlci4KK0Vycm9yIHJldHVybiBzdGF0dXMgZnJvbSAKKy5CIHNubXBfc2Vzc19jbG9zZSgpCithbmQKKy5CIHNubXBfc2Vzc19zZW5kKCkKK2lzIGluZGljYXRlZCBieSBhIHJldHVybiB2YWx1ZSBvZiAwLiAgQSBzdWNjZXNzZnVsIHN0YXR1cyB3aWxsIHJldHVybgorMS4KKy5QUAorRnVydGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgdXNpbmcKKy5CIHNubXBfc2Vzc19lcnJvcigpCit0byBzZWUgd2hhdCB0eXBlIG9mIGVycm9yIGhhcyBvY2N1cnJlZC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUKK1NOTVAKKy5JIHNubXBfZXJybm8KK3ZhcmlhYmxlLCB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbQorLkkgZXJybm8KK3ZhcmlhYmxlLCBhbmQgYSBzdHJpbmcgaW50ZXJwcmV0YXRpb24gb2YgYm90aCB2YXJpYWJsZXMuICBUaGUgc3RyaW5nCittdXN0IGJlIGZyZWVkIGFmdGVyIHVzZSBieSB0aGUgY2FsbGVyLgorLlBQCitGb3IgZXJyb3JzIHJldHVybmVkIGJ5CisuQlIgc25tcF9zZXNzX29wZW4oKSAsCit1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24KKy5CIHNubXBfZXJyb3IoKQoraW5zdGVhZCBvZgorLkJSIHNubXBfc2Vzc19lcnJvcigpIC4KKy5QUAorQ29uc3VsdCBzbm1wX2FwaS5oIGZvciB0aGUgY29tcGxldGUgc2V0IG9mIFNOTVAgbGlicmFyeQorZXJyb3IgdmFsdWVzLgorVGhlIFNOTVAgbGlicmFyeSBlcnJvciB2YWx1ZQorLklSIHNubXBlcnIKK2NhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuUlMgMm4KKy5JUCBTTk1QRVJSX0dFTkVSUiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCitBIGdlbmVyaWMgZXJyb3Igb2NjdXJyZWQuCisuSVAgU05NUEVSUl9CQURfTE9DUE9SVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCitUaGUgbG9jYWwgcG9ydCB3YXMgYmFkIGJlY2F1c2UgaXQgaGFkIGFscmVhZHkgYmVlbgorYWxsb2NhdGVkIG9yIHBlcm1pc3Npb24gd2FzIGRlbmllZC4KKy5JUCBTTk1QRVJSX0JBRF9BRERSRVNTIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KK1RoZSBob3N0IG5hbWUgb3IgYWRkcmVzcyBnaXZlbiB3YXMgbm90IHVzZWFibGUuCisuSVAgU05NUEVSUl9CQURfU0VTU0lPTiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCitUaGUgc3BlY2lmaWVkIHNlc3Npb24gd2FzIG5vdCBvcGVuLgorLklQIFNOTVBFUlJfVE9PX0xPTkcgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfTk9fU09DS0VUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX1YyX0lOX1YxIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX1YxX0lOX1YyIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9SRVBFQVRFUlMgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1JFUEVUSVRJT05TIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9BU04xX0JVSUxEIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9TRU5EVE8gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1JDVkZST00gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1BBUlNFIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9WRVJTSU9OIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9DT01NVU5JVFkgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfTk9BVVRIX0RFU1BSSVYgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQUJPUlQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfVU5LTk9XTl9QRFUgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfVElNRU9VVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuUkUKKy5QUAorLlNIICJTRUUgQUxTTyIKK3NlbGVjdCgyKSwgbmV0c25tcF9zZXNzaW9uX2FwaSgzKSwgbmV0c25tcF9wZHVfYXBpKDMpLAorbmV0c25tcF92YXJiaW5kX2FwaSgzKSwgbmV0c25tcF9taWJfYXBpKDMpLCBzbm1wX2FwaS5oCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiBiL21hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ODkxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZgpAQCAtMCwwICsxLDI4MiBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKy5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKy5cIiB0aGF0IG1heSBhcHBseToKKy5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAJQ29weXJpZ2h0IDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKKy5cIiAKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorLlwiIAorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyAKKy5cIiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIAorLlwiIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKKy5cIiBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gCisuXCIgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBDTVUgbm90IGJlCisuXCIgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgCisuXCIgCisuXCIgQ01VIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcKKy5cIiBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwKKy5cIiBDTVUgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SCisuXCIgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLAorLlwiIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKKy5cIiBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisuXCIgU09GVFdBUkUuCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLlRIIE5FVFNOTVBfU0VTU0lPTl9BUEkgMyAiMTkgTWF5IDIwMTEiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorc25tcF9zZXNzX2luaXQsCitzbm1wX29wZW4sCitzbm1wX3NlbmQsCitzbm1wX2FzeW5jX3NlbmQsCitzbm1wX3NlbGVjdF9pbmZvLAorc25tcF9yZWFkLAorc25tcF90aW1lb3V0LAorc25tcF9zeW5jaF9yZXNwb25zZSwKK3NubXBfY2xvc2UsCitzbm1wX3BlcnJvciwKK3NubXBfc2Vzc19wZXJyb3IsCitzbm1wX2Vycm9yLAorc25tcF9hcGlfZXJyc3RyaW5nIFwtIG5ldHNubXBfc2Vzc2lvbl9hcGkgZnVuY3Rpb25zCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgorLlBQCisuQkkgInZvaWQgc25tcF9zZXNzX2luaXQgKCBuZXRzbm1wX3Nlc3Npb24qIiAic2VzcyIgKTsKKy5QUAorLkJJICJuZXRzbm1wX3Nlc3Npb24qIHNubXBfb3BlbiAoIG5ldHNubXBfc2Vzc2lvbiAqIiAic2VzcyIpOworLlJTCisuSSAvKiBJbnB1dCBwYXJhbWV0ZXIgbm90IHVzZWQgaW4gYWN0aXZlIHNlc3Npb25zICovCisuUkUKKy5QUAorLkJJICJpbnQgc25tcF9zZW5kICggbmV0c25tcF9zZXNzaW9uICoiICJzZXNzaW9uLCIKKy5SUworLkJJICJuZXRzbm1wX3BkdSAqIiAicGR1IiApOworLlJFCisuUFAKKy5CSSAiaW50IHNubXBfYXN5bmNfc2VuZCAoIG5ldHNubXBfc2Vzc2lvbiAqIiAic2Vzc2lvbiwiCisuUlMKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICoiIHBkdSAiLCAiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfY2FsbGJhY2sgIiBjYWxsYmFjayAiLCAiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiIgY2FsbGJhY2tEYXRhICIpOyIKKy5SRQorLlBQCisuQkkgImludCBzbm1wX3NlbGVjdF9pbmZvICggaW50ICogIiBudW1mZHMsICJmZF9zZXQgKiIgZmRzZXQsCisuUlMKKy5CSSAic3RydWN0IHRpbWV2YWwgKiIgdGltZW91dCwgImludCAqIiBibG9jayApOworLlJFCisuUFAKKy5CSSAidm9pZCBzbm1wX3JlYWQgKCBmZF9zZXQgKiIgZmRzZXQgKTsKKy5QUAorLkIgIHZvaWQgc25tcF90aW1lb3V0ICggdm9pZCApOworLlBQCisuQkkgImludCBzbm1wX3N5bmNoX3Jlc3BvbnNlICggbmV0c25tcF9zZXNzaW9uICoiICJzZXNzaW9uLCIKKy5SUworLkJJICJuZXRzbm1wX3BkdSAqIiAicGR1IiAiLCAiCisuYnIKKy5CSSAibmV0c25tcF9wZHUgKioiICJyZXNwb25zZSIgKTsKKy5SRQorLlBQCisuQkkgImludCBzbm1wX2Nsb3NlICggbmV0c25tcF9zZXNzaW9uICoiIHNlc3Npb24gKTsKKy5icgorLkIgICJpbnQgc25tcF9jbG9zZV9zZXNzaW9ucyAoIHZvaWQgKTsKKy5QUAorLlNTIEVycm9yIFJlcG9ydGluZworLkkgKE1vdmUgdG8gb3V0cHV0X2FwaSgzKSkKKy5icgorLkJJICJ2b2lkIHNubXBfZXJyb3IgKCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24sCisuUlMKKy5CSSAiaW50ICoiIHBjbGliZXJyLCAiaW50ICoiIHBzbm1wZXJyLCAiY2hhciAqKiIgcHBlcnJzdHJpbmcgKTsKKy5SRQorLlBQCisuQkkgImNoYXIgKnNubXBfYXBpX2VycnN0cmluZyAoIGludCIgc25tcGVyciApOworLlBQCisuQkkgInZvaWQgc25tcF9wZXJyb3IgKCBjaGFyICoiIG1zZyApOworLlJTCisuSSAvKiBmb3IgcGFyc2luZyBlcnJvcnMgb25seSAqLworLlJFCisuUFAKKy5CSSAidm9pZCBzbm1wX3Nlc3NfcGVycm9yIChjaGFyICoiIG1zZywgIm5ldHNubXBfc2Vzc2lvbiAqIiBzZXNzICk7CisuUlMKKy5JIC8qIGFsbCBvdGhlciBTTk1QIGxpYnJhcnkgZXJyb3JzICovCisuUkUKKy5QUAorLlNIIERFU0NSSVBUSU9OCisuSSBTbm1wX3Nlc3NfaW5pdAorcHJlcGFyZXMgYSBuZXRzbm1wX3Nlc3Npb24gdGhhdCBzb3VyY2VzIHRyYW5zcG9ydCBjaGFyYWN0ZXJpc3RpY3MKK2FuZCBjb21tb24gaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGEgc2V0IG9mIFNOTVAgdHJhbnNhY3Rpb25zLgorQWZ0ZXIgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIHRvCisuSSBzbm1wX29wZW4KK3RvIGNyZWF0ZSBhbiBTTk1QIHNlc3Npb24sIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IHVzZWQuCisuUFAKKy5JIFNubXBfb3BlbgorcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseS1mb3JtZWQKKy5JIG5ldHNubXBfc2Vzc2lvbgorb2JqZWN0LCB3aGljaCB0aGUgYXBwbGljYXRpb24gbXVzdCB1c2UgdG8gcmVmZXJlbmNlIHRoZQorYWN0aXZlIFNOTVAgc2Vzc2lvbi4KKy5QUAorLkkgc25tcF9zZW5kCithbmQKKy5JIHNubXBfYXN5bmNfc2VuZCgpCitlYWNoIHRha2UgYXMgaW5wdXQgYSBwb2ludGVyIHRvIGEKKy5JIG5ldHNubXBfcGR1CitvYmplY3QuCitUaGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyBhIHRyYW5zYWN0aW9uCit0aGF0IHdpbGwgYmUgcGVyZm9ybWVkIG92ZXIgYW4gb3BlbiBzZXNzaW9uLgorLlBQCitDb25zdWx0IHNubXBfYXBpLmggZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgorLlBQCitXaXRoIHRoZQorLkkgc25tcF9hc3luY19zZW5kKCkKK2NhbGwsCisuSSBzbm1wX3JlYWQKK3dpbGwgaW52b2tlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgd2hlbiB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCisuUFAKKy5JIFNubXBfcmVhZCwgc25tcF9zZWxlY3RfaW5mbywKK2FuZAorLkkgc25tcF90aW1lb3V0Citwcm92aWRlIGFuIGludGVyZmFjZSBmb3IgdGhlIHVzZSBvZiB0aGUKKy5JUiBzZWxlY3QoMikKK3N5c3RlbSBjYWxsIHNvIHRoYXQgU05NUCB0cmFuc2FjdGlvbnMgY2FuIG9jY3VyIGFzeW5jaHJvbm91c2x5LgorLlBQCisuSSBTbm1wX3NlbGVjdF9pbmZvCitpcyBnaXZlbiB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBoYXZlIGJlZW4gcGFzc2VkIHRvCisuSSBzZWxlY3QKK2luIHRoZSBhYnNlbmNlIG9mIFNOTVAuICBGb3IgZXhhbXBsZSwgdGhpcyBtaWdodCBpbmNsdWRlIHdpbmRvdyB1cGRhdGUgaW5mb3JtYXRpb24uCitUaGlzIGluZm9ybWF0aW9uIGlzIG1vZGlmaWVkIHNvIHRoYXQgU05NUCB3aWxsIGdldCB0aGUgc2VydmljZSBpdCByZXF1aXJlcyBmcm9tIHRoZQorY2FsbCB0bworLkkgc2VsZWN0LgorSW4gdGhpcyBjYXNlLAorLkkgbnVtZmRzLCBmZHNldCwKK2FuZAorLkkgdGltZW91dAorY29ycmVzcG9uZCB0byB0aGUKKy5JIG5mZHMsIHJlYWRmZHMsCithbmQKKy5JIHRpbWVvdXQKK2FyZ3VtZW50cyB0bworLkkgc2VsZWN0LAorcmVzcGVjdGl2ZWx5LiAgVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoYXQgdGltZW91dCBtdXN0IGFsd2F5cyBwb2ludCB0byBhbiBhbGxvY2F0ZWQgKGJ1dCBwZXJoYXBzIHVuaW5pdGlhbGl6ZWQpCisuSSBzdHJ1Y3QgdGltZXZhbC4KK0lmCisuSSB0aW1lb3V0Cit3b3VsZCBoYXZlIGJlZW4gcGFzc2VkIGFzIE5VTEwsCisuSSBibG9jaworaXMgc2V0IHRvIHRydWUsIGFuZAorLkkgdGltZW91dAoraXMgdHJlYXRlZCBhcyB1bmRlZmluZWQuICBUaGlzIHNhbWUgcnVsZSBhcHBsaWVzIHVwb24gcmV0dXJuIGZyb20KKy5JIHNubXBfc2VsZWN0X2luZm8uCisuUFAKK0FmdGVyIGNhbGxpbmcKKy5JIHNubXBfc2VsZWN0X2luZm8sIHNlbGVjdAoraXMgY2FsbGVkIHdpdGggdGhlIHJldHVybmVkIGRhdGEuICBXaGVuIHNlbGVjdCByZXR1cm5zLAorLkkgc25tcF9yZWFkCitzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlCisuSSBmZF9zZXQKK3JldHVybmVkIGZyb20KKy5JIHNlbGVjdAordG8gcmVhZCBlYWNoIFNOTVAgc29ja2V0IHRoYXQgaGFzIGlucHV0LgorSWYKKy5JIHNlbGVjdAordGltZXMgb3V0LAorLkkgc25tcF90aW1lb3V0CitzaG91bGQgYmUgY2FsbGVkIHRvIHNlZSBpZiB0aGUgdGltZW91dCB3YXMgaW50ZW5kZWQgZm9yIFNOTVAuCisuUFAKKy5JIHNubXBfc3luY2hfcmVzcG9uc2UKK2lzIGEgY29udmVuaWVuY2Ugcm91dGluZSB0aGF0IHdpbGwgc2VuZCB0aGUgcmVxdWVzdCwKK3dhaXQgZm9yIHRoZSByZXNwb25zZSBhbmQgcHJvY2VzcyBpdCBiZWZvcmUgcmV0dXJuaW5nLgorU2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YKKy5JICJzbm1wX3NlbmQiICIsICIgInNubXBfcmVhZCIKK2V0YyBmb3IgZGV0YWlscy4KKy5TSCBESUFHTk9TVElDUworLlBQCitQcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSB1c2VkCisuSVIgc25tcF9nZXRfZXJybm8KK3RvIHJlYWQgdGhlIGdsb2JhbCB2YXJpYWJsZQorLkkgc25tcF9lcnJubword2hpY2ggbWF5IGhhdmUgaGVsZCB0aGUgZXJyb3Igc3RhdHVzIHdpdGhpbiB0aGUgU05NUCBsaWJyYXJ5LgorVGhlIGV4aXN0aW5nIG1ldGhvZAorLkkgc25tcF9wZXJyb3IKK3Nob3VsZCBiZSB1c2VkIHRvIGxvZyBBU04uMSBjb2RpbmcgZXJyb3JzIG9ubHkuCisuUFAKK1RoZSBuZXcgbWV0aG9kCisuSSBzbm1wX3Nlc3NfcGVycm9yCitpcyBwcm92aWRlZCB0byBjYXB0dXJlIGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyB0aGUgcHJvY2Vzc2luZworb2YgYSBwYXJ0aWN1bGFyIFNOTVAgc2Vzc2lvbi4KKy5JIFNubXBfc2Vzc19wZXJyb3IKK2NhbGxzCisuSVIgc25tcF9lcnJvcgorZnVuY3Rpb24gdG8gb2J0YWluIHRoZSAiQyIgbGlicmFyeSBlcnJvcgorLkkgZXJybm8KKywgdGhlIFNOTVAgbGlicmFyeSBlcnJvcgorLkkgc25tcGVycgorLCBhbmQgdGhlIFNOTVAgbGlicmFyeSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlCit0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBlcnJvciB0aGF0IG9jY3VycmVkIGR1cmluZyBhIGdpdmVuIHNlc3Npb24uCisuUFAKK05vdGUgdGhhdCBpbiBhbGwgY2FzZXMgZXhjZXB0IG9uZSwKKy5JUiBzbm1wX3Nlc3NfcGVycm9yCitzaG91bGQgYmUgaGFuZGVkIHRoZQorLkkgbmV0c25tcF9zZXNzaW9uICoKK3BvaW50ZXIgcmV0dXJuZWQgZnJvbQorLklSIHNubXBfb3Blbi4KK0lmCisuSVIgc25tcF9vcGVuCityZXR1cm5zIGEgbnVsbCBwb2ludGVyLCBwYXNzIHRoZSBJTlBVVAorLkkgbmV0c25tcF9zZXNzaW9uICoKK3BvaW50ZXIgdXNlZCB0byBjYWxsCisuSVIgc25tcF9vcGVuLgorLlBQCitFcnJvciByZXR1cm4gc3RhdHVzIGZyb20gCisuSSBzbm1wX2Nsb3NlCithbmQKKy5JIHNubXBfc2VuZAoraXMgaW5kaWNhdGVkIGJ5IHJldHVybiBvZiAwLiAgQSBzdWNjZXNzZnVsIHN0YXR1cyB3aWxsIHJldHVybiBhIDEgZm9yCisuSSBzbm1wX2Nsb3NlCithbmQgdGhlIHJlcXVlc3QgaWQgb2YgdGhlIHBhY2tldCBmb3IKKy5JIHNubXBfc2VuZC4KK1Vwb24gc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbQorLkkgc25tcF9zZW5kCit0aGUgcGR1IHdpbGwgYmUgZnJlZWQgYnkgdGhlIGxpYnJhcnkuCisuUFAKK0NvbnN1bHQgc25tcF9hcGkuaCBmb3IgdGhlIGNvbXBsZXRlIHNldCBvZiBTTk1QIGxpYnJhcnkKK2Vycm9yIHZhbHVlcy4KK1RoZSBTTk1QIGxpYnJhcnkgZXJyb3IgdmFsdWUKKy5JUiBzbm1wZXJyCitjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlJTIDJuCisuSVAgU05NUEVSUl9HRU5FUlIgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorQSBnZW5lcmljIGVycm9yIG9jY3VycmVkLgorLklQIFNOTVBFUlJfQkFEX0xPQ1BPUlQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorVGhlIGxvY2FsIHBvcnQgd2FzIGJhZCBiZWNhdXNlIGl0IGhhZCBhbHJlYWR5IGJlZW4KK2FsbG9jYXRlZCBvciBwZXJtaXNzaW9uIHdhcyBkZW5pZWQuCisuSVAgU05NUEVSUl9CQURfQUREUkVTUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCitUaGUgaG9zdCBuYW1lIG9yIGFkZHJlc3MgZ2l2ZW4gd2FzIG5vdCB1c2VhYmxlLgorLklQIFNOTVBFUlJfQkFEX1NFU1NJT04gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorVGhlIHNwZWNpZmllZCBzZXNzaW9uIHdhcyBub3Qgb3Blbi4KKy5JUCBTTk1QRVJSX1RPT19MT05HIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX05PX1NPQ0tFVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9WMl9JTl9WMSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9WMV9JTl9WMiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfUkVQRUFURVJTIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfQVNOMV9CVUlMRCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfU0VORFRPIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9QQVJTRSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfVkVSU0lPTiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9OT0FVVEhfREVTUFJJViBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9BQk9SVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9VTktOT1dOX1BEVSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9USU1FT1VUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5SRQorLlBQCitBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgY29kZSBjYW4gYmUgb2J0YWluZWQgd2l0aAorLklSIHNubXBfYXBpX2VycnN0cmluZyAsCithbmQgYSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIG1heSBiZSBwcmludGVkIHVzaW5nCisuSSBzbm1wX3BlcnJvcgordGhhdCBmdW5jdGlvbnMgbGlrZSB0aGUKKy5JIHBlcnJvcgorc3RhbmRhcmQgcm91dGluZS4KKy5TSCAiU0VFIEFMU08iCitzZWxlY3QoMiksIG5ldHNubXBfc2Vzc19hcGkoMyksIG5ldHNubXBfbWliX2FwaSgzKSwgbmV0c25tcF9wZHVfYXBpKDMpLAorbmV0c25tcF92YXJiaW5kX2FwaSgzKSwgc25tcF9hcGkuaApkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc2V0X2RhdGEuMyBiL21hbi9uZXRzbm1wX3NldF9kYXRhLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYjQyYTQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc2V0X2RhdGEuMworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS5USCAic2V0X2RhdGE6IGhlbHBzIHN0b3JpbmcgYW5kIHJldHJpdmluZyBvZiBkYXRhIGR1cmluZyBzZXQgdHJhbnNhY3Rpb25zIiAzICIxNyBPY3QgMjAwMyIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc2V0X2RhdGE6IGhlbHBzIHN0b3JpbmcgYW5kIHJldHJpdmluZyBvZiBkYXRhIGR1cmluZyBzZXQgdHJhbnNhY3Rpb25zIFwtIFRoZSBzZXRfZGF0YSBoZWxwZXIuIAotTW9yZS4uLgotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfc2V0X2RhdGFfbWFzdGVyX3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfc2V0X2RhdGFfc3RvcmVfc1xmUCIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3NldF9kYXRhX2NhY2hlXGZQIChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwgdW5zaWduZWQgaW50IG1hZ2ljX251bSwgdm9pZCAqbmV3X2RhdGEsIHNpemVfdCBuZXdfZGF0YV9sZW4sIHZvaWQgKm9sZF9kYXRhLCBzaXplX3Qgb2xkX2RhdGFfbGVuKSIKLS5icgotLlJJICJcZklzdG9yZXMgbmV3IGFuZCBvbGQgaW5mb3JtYXRpb24gYmFzZWQgb24gdGhlIG1hZ2ljIG51bWJlci5cZlAiCi0udGkgLTFjCi0uUkkgIm5ldHNubXBfc2V0X2RhdGFfIG5ldHNubXBfbWliX2hhbmRsZXIgKiBcZkJuZXRzbm1wX2dldF9tdWx0aXBsZXhlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHNcZlAgKnJlcSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIG11bHRpcGxpeGVyIGhhbmRsZXIgZ2l2ZW4gYSBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHNcZlAgc3RydWN0dXJlIG9mIHN1YmhhbmRsZXJzLlxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfbXVsdGlwbGV4ZXJfaGVscGVyX2hhbmRsZXJcZlAgKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLCBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSWltcGxlbWVudHMgdGhlIG11bHRpcGxleGVyIGhlbHBlclxmUCIKLS5pbiAtMWMKLS5TSCAiREVUQUlMRUQgREVTQ1JJUFRJT04iCi0uUFAgCi1UaGUgc2V0X2RhdGEgaGVscGVyLgotLlBQCi0uU0ggIkZVTkNUSU9OIERPQ1VNRU5UQVRJT04iCi0uUFAgCi0uU1MgIm5ldHNubXBfc2V0X2RhdGFfIG5ldHNubXBfbWliX2hhbmRsZXIqIG5ldHNubXBfZ2V0X211bHRpcGxleGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kc1xmUCAqIHJlcSkiCi0uUFAKLXJldHVybnMgYSBtdWx0aXBsaXhlciBoYW5kbGVyIGdpdmVuIGEgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzXGZQIHN0cnVjdHVyZSBvZiBzdWJoYW5kbGVycy4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg0IG9mIGZpbGUgc2V0X2RhdGEuYy4KLS5QUAotUmVmZXJlbmNlcyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCksIGFuZCBuZXRzbm1wX211bHRpcGxleGVyX2hlbHBlcl9oYW5kbGVyKCkuCi0uU1MgImludCBuZXRzbm1wX211bHRpcGxleGVyX2hlbHBlcl9oYW5kbGVyIChuZXRzbm1wX21pYl9oYW5kbGVyICogaGFuZGxlciwgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqIHJlZ2luZm8sIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICogcmVxaW5mbywgbmV0c25tcF9yZXF1ZXN0X2luZm8gKiByZXF1ZXN0cykiCi0uUFAKLWltcGxlbWVudHMgdGhlIG11bHRpcGxleGVyIGhlbHBlcgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA1IG9mIGZpbGUgc2V0X2RhdGEuYy4KLS5QUAotUmVmZXJlbmNlcyBuZXRzbm1wX2NhbGxfaGFuZGxlcigpLCBhbmQgbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQoKS4KLS5QUAotUmVmZXJlbmNlZCBieSBuZXRzbm1wX2dldF9tdWx0aXBsZXhlcl9oYW5kbGVyKCkuCi0uU1MgInZvaWQgbmV0c25tcF9zZXRfZGF0YV9jYWNoZSAobmV0c25tcF9yZXF1ZXN0X2luZm8gKiByZXF1ZXN0LCB1bnNpZ25lZCBpbnQgbWFnaWNfbnVtLCB2b2lkICogbmV3X2RhdGEsIHNpemVfdCBuZXdfZGF0YV9sZW4sIHZvaWQgKiBvbGRfZGF0YSwgc2l6ZV90IG9sZF9kYXRhX2xlbikiCi0uUFAKLXN0b3JlcyBuZXcgYW5kIG9sZCBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgbWFnaWMgbnVtYmVyLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDUgb2YgZmlsZSBzZXRfZGF0YS5jLgotLlBQCi1SZWZlcmVuY2VzIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdCgpLCBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbygpLCBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSgpLCBhbmQgU05NUF9NSU4uCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zbm1wX2FnZW50LjMgYi9tYW4vbmV0c25tcF9zbm1wX2FnZW50LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjFkYWQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc25tcF9hZ2VudC4zCisrKyAvZGV2L251bGwKQEAgLTEsNTcxICswLDAgQEAKLS5USCAibmV0LXNubXAgYWdlbnQgcmVsYXRlZCBwcm9jZXNzaW5nIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0LXNubXAgYWdlbnQgcmVsYXRlZCBwcm9jZXNzaW5nIFwtIAotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmFkZHJDYWNoZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCX2FnZW50X25zYXBcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmFnZW50X3NldF9jYWNoZV9zXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX05FRURfUkVRVUVTVF9MSVNUXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9BRERSQ0FDSEVfU0laRVxmUCAgIDEwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9BRERSQ0FDSEVfTUFYQUdFXGZQICAgMzAwIgotLmJyCi0uaW4gLTFjCi0uU1MgIlR5cGVkZWZzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQl9hZ2VudF9uc2FwXGZQIFxmQmFnZW50X25zYXBcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCYWdlbnRfc2V0X2NhY2hlX3NcZlAgXGZCYWdlbnRfc2V0X2NhY2hlXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkVudW1lcmF0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJlbnVtIHsgXGZCU05NUF9BRERSQ0FDSEVfVU5VU0VEXGZQID0gIDAsIFxmQlNOTVBfQUREUkNBQ0hFX1VTRURcZlAgPSAgMSB9IgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9hZ2VudF9jaGVja19wYWNrZXRcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF90cmFuc3BvcnRfc1xmUCAqLCB2b2lkICosIGludCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYWdlbnRfY2hlY2tfcGFyc2VcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCBpbnQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZGVsZXRlX3N1Ym5ldHNubXBfdHJlZV9jYWNoZVxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJoYW5kbGVfcGR1XGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiBjYWxscyBpbnRvIG5ldHNubXBfc2V0X21vZGVfcmVxdWVzdF9lcnJvciwgc2V0cyBlcnJvcl92YWx1ZSBnaXZlbiBhIHJlcWluZm8tPm1vZGUgdmFsdWUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaGFuZGxlX3JlcXVlc3RcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwLCBpbnQgc3RhdHVzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF93cmFwX3VwX3JlcXVlc3RcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwLCBpbnQgc3RhdHVzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCY2hlY2tfZGVsYXllZF9yZXF1ZXN0XGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmhhbmRsZV9nZXRuZXh0X2xvb3BcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLlJJICJcZklyZXBlYXRlZGx5IGNhbGxzIGdldG5leHQgaGFuZGxlcnMgbG9va2luZyBmb3IgYW4gYW5zd2VyIHRpbGwgYWxsIHJlcXVlc3RzIGFyZSBzYXRpc2lmaWVkLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJoYW5kbGVfc2V0X2xvb3BcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19xdWV1ZWRfY2hhaW5fZm9yXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYWRkX3F1ZXVlZFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlbW92ZV9mcm9tX2RlbGVnYXRlZFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2FsbG9jYXRlX2dsb2JhbGNhY2hlaWRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dldF9sb2NhbF9jYWNoaWRcZlAgKFxmQm5ldHNubXBfY2FjaGVtYXBcZlAgKmNhY2hlX3N0b3JlLCBpbnQgZ2xvYmFsaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY2FjaGVtYXBcZlAgKiBcZkJuZXRzbm1wX2dldF9vcl9hZGRfbG9jYWxfY2FjaGlkXGZQIChcZkJuZXRzbm1wX2NhY2hlbWFwXGZQICoqY2FjaGVfc3RvcmUsIGludCBnbG9iYWxpZCwgaW50IGxvY2FsaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9mcmVlX2NhY2hlbWFwXGZQIChcZkJuZXRzbm1wX2NhY2hlbWFwXGZQICpjYWNoZV9zdG9yZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCYWdlbnRfc2V0X2NhY2hlXGZQICogXGZCc2F2ZV9zZXRfY2FjaGVcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZ2V0X3NldF9jYWNoZVxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkIFxmQl9yZW9yZGVyX2dldGJ1bGtcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZCBcZkJfZml4X2VuZG9mbWlidmlld1xmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJnZXROZXh0U2Vzc0lEXGZQICgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhZ2VudF9jaGVja19hbmRfcHJvY2Vzc1xmUCAoaW50IGJsb2NrKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgcGFja2V0cyBhcnJpdmluZyBvbiB0aGUgU05NUCBwb3J0IGFuZCBwcm9jZXNzZXMgdGhlbShzbm1wX3JlYWQpIGlmIHNvbWUgYXJlIGZvdW5kLCB1c2luZyB0aGUgc2VsZWN0KCkuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2FkZHJjYWNoZV9pbml0aWFsaXNlXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfYWRkcmNhY2hlX2Rlc3Ryb3lcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2FkZHJjYWNoZV9hZGRcZlAgKGNvbnN0IGNoYXIgKmFkZHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9hZGRyY2FjaGVfYWdlXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9hZ2VudF9uc2FwXGZQIChcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2RlcmVnaXN0ZXJfYWdlbnRfbnNhcFxmUCAoaW50IGhhbmRsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmluaXRfbWFzdGVyX2FnZW50XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmNsZWFyX25zYXBfbGlzdFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzaHV0ZG93bl9tYXN0ZXJfYWdlbnRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIFxmQmluaXRfYWdlbnRfc25tcF9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZnJlZV9hZ2VudF9zbm1wX3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19mb3JfZGVsZWdhdGVkXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfZGVsZWdhdGVkX2NoYWluX2ZvclxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX2Zvcl9kZWxlZ2F0ZWRfYW5kX2FkZFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlbW92ZV9kZWxlZ2F0ZWRfcmVxdWVzdHNfZm9yX3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2VzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJkdW1wX3Nlc3NfbGlzdFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3JlbW92ZV9hbmRfZnJlZV9hZ2VudF9zbm1wX3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZnJlZV9hZ2VudF9zbm1wX3Nlc3Npb25fYnlfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzLCB2b2lkKCpmcmVlX3JlcXVlc3QpKFxmQm5ldHNubXBfcmVxdWVzdF9saXN0XGZQICopKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaGFuZGxlX3NubXBfcGFja2V0XGZQIChpbnQgb3AsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgaW50IHJlcWlkLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCB2b2lkICptYWdpYykiCi0uYnIKLS5SSSAiXGZJaGFuZGxlcyBhbiBpbmNvbWluZyBTTk1QIHBhY2tldCBpbnRvIHRoZSBhZ2VudCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogXGZCbmV0c25tcF9hZGRfdmFyYmluZF90b19jYWNoZVxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3AsIGludCB2YmNvdW50LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcmJpbmRfcHRyLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnRwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCY2hlY2tfYWNtXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCwgdV9jaGFyIHR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NyZWF0ZV9zdWJ0cmVlX2NhY2hlXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVhc3NpZ25fcmVxdWVzdHNcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZGVsZXRlX3JlcXVlc3RfaW5mb3NcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXFsaXN0KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZGVsZXRlX3N1YnRyZWVfY2FjaGVcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfZXJyb3JcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwLCBpbnQgbG9va19mb3Jfc3BlY2lmaWMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX3JlcXVlc3RzX2Vycm9yXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX3JlcXVlc3RzX3N0YXR1c1xmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3AsIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cywgaW50IGxvb2tfZm9yX3NwZWNpZmljKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfc3RhdHVzXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCwgaW50IGxvb2tfZm9yX3NwZWNpZmljKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaGFuZGxlX3Zhcl9yZXF1ZXN0c1xmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jaGVja19vdXRzdGFuZGluZ19hZ2VudF9yZXF1ZXN0c1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfdHJhbnNhY3Rpb25faWRcZlAgKGludCB0cmFuc2FjdGlvbl9pZCkiCi0uYnIKLS5SSSAiXGZJRGVjaWRlIGlmIHRoZSByZXF1ZXN0ZWQgdHJhbnNhY3Rpb25faWQgaXMgc3RpbGwgYmVpbmcgcHJvY2Vzc2VkIHdpdGhpbiB0aGUgYWdlbnQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNoZWNrX2dldG5leHRfcmVzdWx0c1xmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0uUkkgIlxmSXJldHVybnMgMSBpZiB0aGVyZSBhcmUgdmFsaWQgR0VUTkVYVCByZXF1ZXN0cyBsZWZ0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJoYW5kbGVfc2V0XGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludCBcZkJfcmVxdWVzdF9zZXRfZXJyb3JcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBpbnQgbW9kZSwgaW50IGVycm9yX3ZhbHVlKSIKLS5icgotLlJJICJcZklzZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgaW50IGVycm9yX3ZhbHVlKSIKLS5icgotLlJJICJcZklzZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2lkeFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIGludCBlcnJvcl92YWx1ZSwgaW50IGlkeCkiCi0uYnIKLS5SSSAiXGZJc2V0IGVycm9yIGZvciBhIHJlcXVlc3Qgd2l0aGluIGEgcmVxdWVzdCBsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgaW50IFxmQm5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMsIGludCBlcnJvcikiCi0uYnIKLS5SSSAiXGZJc2V0IGVycm9yIGZvciBhbGwgcmVxdWVzdHMgXGZQIgotLnRpIC0xYwotLlJJICJ1X2xvbmcgXGZCbmV0c25tcF9tYXJrZXJfdXB0aW1lXGZQIChtYXJrZXJfdCBwbSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9sb25nIFxmQm5ldHNubXBfdGltZXZhbF91cHRpbWVcZlAgKHN0cnVjdCB0aW1ldmFsICp0dikiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9sb25nIFxmQm5ldHNubXBfZ2V0X2FnZW50X3VwdGltZVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2FnZW50X2FkZF9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICphcmksIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpcZkJub2RlXGZQKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBpbnQgXGZCbmV0c25tcF9hZ2VudF9yZW1vdmVfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqYXJpLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkICogXGZCbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqYXJpLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZnJlZV9hZ2VudF9kYXRhX3NldFxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKmFyaSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2ZyZWVfYWdlbnRfZGF0YV9zZXRzXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqYXJpKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZnJlZV9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICphcmkpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIGludCBlcnJvcl92YWx1ZSkiCi0uYnIKLS5SSSAiXGZJc2V0IGVycm9yIGZvciBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zZXRfbW9kZV9yZXF1ZXN0X2Vycm9yXGZQIChpbnQgbW9kZSwgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIGludCBlcnJvcl92YWx1ZSkiCi0uYnIKLS5SSSAiXGZJc2V0IGVycm9yIGZvciBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zZXRfYWxsX3JlcXVlc3RzX2Vycm9yXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzLCBpbnQgZXJyb3JfdmFsdWUpIgotLmJyCi0uUkkgIlxmSXNldCBlcnJvciBmb3IgYWxsIHJlcXVlc3QgXGZQIgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAib2lkIFxmQnZlcnNpb25fc3lzb2lkXGZQIFtdID0geyBORVRTTk1QX1NZU1RFTV9NSUIgfSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdmVyc2lvbl9zeXNvaWRfbGVuXGZQID0gT0lEX0xFTkdUSCh2ZXJzaW9uX3N5c29pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmxvZ19hZGRyZXNzZXNcZlAgPSAwIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIFxmQm5ldHNubXBfcHJvY2Vzc2luZ19zZXRcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIFxmQmFnZW50X2RlbGVnYXRlZF9saXN0XGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBcZkJuZXRzbm1wX2FnZW50X3F1ZXVlZF9saXN0XGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9ydW5uaW5nXGZQID0gMSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJtYWluX3Nlc3Npb25cZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCB0aW1ldmFsIFxmQnN0YXJ0dGltZVxmUCIKLS5icgotLmluIC0xYwotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50IF9yZXF1ZXN0X3NldF9lcnJvciAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBpbnQgbW9kZSwgaW50IGVycm9yX3ZhbHVlKSIKLS5QUAotc2V0IGVycm9yIGZvciBhIHJlcXVlc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNDE3IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MgKGludCBibG9jaykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBwYWNrZXRzIGFycml2aW5nIG9uIHRoZSBTTk1QIHBvcnQgYW5kIHByb2Nlc3NlcyB0aGVtKHNubXBfcmVhZCkgaWYgc29tZSBhcmUgZm91bmQsIHVzaW5nIHRoZSBzZWxlY3QoKS4gSWYgYmxvY2sgaXMgbm9uIHplcm8sIHRoZSBmdW5jdGlvbiBjYWxsIGJsb2NrcyB1bnRpbCBhIHBhY2tldCBhcnJpdmVzCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYmxvY2tcZlAgdXNlZCB0byBjb250cm9sIGJsb2NraW5nIGluIHRoZSBzZWxlY3QoKSBmdW5jdGlvbiwgMSA9IGJsb2NrIGZvcmV2ZXIsIGFuZCAwID0gZG9uJ3QgYmxvY2sKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHBhY2tldHMgd2VyZSBwcm9jZXNzZWQsIGFuZCAtMSBpZiBhbiBlcnJvciB3YXMgZm91bmQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTY2IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgY2hlY2tfZ2V0bmV4dF9yZXN1bHRzIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBhc3ApIgotLlBQCi1yZXR1cm5zIDEgaWYgdGhlcmUgYXJlIHZhbGlkIEdFVE5FWFQgcmVxdWVzdHMgbGVmdC4gUmV0dXJucyAwIGlmIG5vdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODE4IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgaGFuZGxlX2dldG5leHRfbG9vcCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogYXNwKSIKLS5QUAotcmVwZWF0ZWRseSBjYWxscyBnZXRuZXh0IGhhbmRsZXJzIGxvb2tpbmcgZm9yIGFuIGFuc3dlciB0aWxsIGFsbCByZXF1ZXN0cyBhcmUgc2F0aXNpZmllZC4gSXQncyBleHBlY3RlZCB0aGF0IG9uZSBwYXNzIGhhcyBiZWVuIG1hZGUgYmVmb3JlIGVudGVyaW5nIHRoaXMgZnVuY3Rpb24gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOTM1IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgaGFuZGxlX3BkdSAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogYXNwKSIKLS5QUAotVGhpcyBmdW5jdGlvbiBjYWxscyBpbnRvIG5ldHNubXBfc2V0X21vZGVfcmVxdWVzdF9lcnJvciwgc2V0cyBlcnJvcl92YWx1ZSBnaXZlbiBhIHJlcWluZm8tPm1vZGUgdmFsdWUuIEl0J3MgdXNlZCB0byBzZW5kIHNwZWNpZmljIGVycm9ycyBiYWNrIHRvIHRoZSBhZ2VudCB0byBwcm9jZXNzIGFjY29yZGluZ2x5LgotLlBQCi1JZiBlcnJvcl92YWx1ZSBpcyBzZXQgdG8gU05NUF9OT1NVQ0hPQkpFQ1QsIFNOTVBfTk9TVUNISU5TVEFOQ0UsIG9yIFNOTVBfRU5ET0ZNSUJWSUVXIHRoZSBmb2xsb3dpbmcgaXMgYXBwbGljYWJsZTogU2V0cyB0aGUgZXJyb3JfdmFsdWUgdG8gcmVxdWVzdC0+cmVxdWVzdHZiLT50eXBlIGlmIHJlcWluZm8tPm1vZGUgdmFsdWUgaXMgc2V0IHRvIE1PREVfR0VULiBJZiB0aGUgcmVxaW5mby0+bW9kZSB2YWx1ZSBpcyBzZXQgdG8gTU9ERV9HRVRORVhUIG9yIE1PREVfR0VUQlVMSyB0aGUgY29kZSBjYWxscyBzbm1wX2xvZyBsb2dnaW5nIGFuIGVycm9yIG1lc3NhZ2UuCi0uUFAKLU90aGVyd2lzZSwgdGhlIHJlcXVlc3QtPnN0YXR1cyB2YWx1ZSBpcyBjaGVja2VkLCBpZiBpdCdzIDwgMCBzbm1wX2xvZyBpcyBjYWxsZWQgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGFuZCBTTk1QX0VSUl9HRU5FUlIgaXMgYXNzaWduZWQgdG8gcmVxdWVzdC0+c3RhdHVzLiBJZiB0aGUgcmVxdWVzdC0+c3RhdHVzIHZhbHVlIGlzID49IDAgdGhlIGVycm9yX3ZhbHVlIGlzIHNldCB0byByZXF1ZXN0LT5zdGF0dXMuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxaW5mb1xmUCBpcyBhIHBvaW50ZXIgdG8gdGhlIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvIHN0cnVjdC4gSXQgY29udGFpbnMgdGhlIHJlcWluZm8tPm1vZGUgd2hpY2ggaXMgcmVxdWlyZWQgdG8gc2V0IGVycm9yX3ZhbHVlIG9yIGxvZyBlcnJvciBtZXNzYWdlcy4KLS5icgotXGZJcmVxdWVzdFxmUCBpcyBhIHBvaW50ZXIgdG8gdGhlIG5ldHNubXBfcmVxdWVzdF9pbmZvIHN0cnVjdC4gVGhlIGVycm9yX3ZhbHVlIGlzIHNldCB0byByZXF1ZXN0LT5yZXF1ZXN0dmItPnR5cGUKLS5icgotXGZJZXJyb3JfdmFsdWVcZlAgaXMgdGhlIGV4Y2VwdGlvbiB2YWx1ZSB5b3Ugd2FudCB0byBzZXQsIGJlbG93IGFyZSBwb3NzaWJsZSB2YWx1ZXMuCi0uSVAgIlwoYnUiIDIKLVNOTVBfTk9TVUNIT0JKRUNUCi0uSVAgIlwoYnUiIDIKLVNOTVBfTk9TVUNISU5TVEFOQ0UKLS5JUCAiXChidSIgMgotU05NUF9FTkRPRk1JQlZJRVcKLS5JUCAiXChidSIgMgotU05NUF9FUlJfTk9FUlJPUgotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9UT09CSUcKLS5JUCAiXChidSIgMgotU05NUF9FUlJfTk9TVUNITkFNRQotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9CQURWQUxVRQotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9SRUFET05MWQotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9HRU5FUlIKLS5JUCAiXChidSIgMgotU05NUF9FUlJfTk9BQ0NFU1MKLS5JUCAiXChidSIgMgotU05NUF9FUlJfV1JPTkdUWVBFCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX1dST05HTEVOR1RICi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX1dST05HRU5DT0RJTkcKLS5JUCAiXChidSIgMgotU05NUF9FUlJfV1JPTkdWQUxVRQotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9OT0NSRUFUSU9OCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUKLS5JUCAiXChidSIgMgotU05NUF9FUlJfQ09NTUlURkFJTEVECi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX1VORE9GQUlMRUQKLS5JUCAiXChidSIgMgotU05NUF9FUlJfQVVUSE9SSVpBVElPTkVSUk9SCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX05PVFdSSVRBQkxFCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUUKLS5QUAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBlcnJvcl92YWx1ZSB1bmRlciBhbGwgY29uZGl0aW9ucy4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMjI5IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgaGFuZGxlX3NubXBfcGFja2V0IChpbnQgb3AsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIHNlc3Npb24sIGludCByZXFpZCwgXGZCbmV0c25tcF9wZHVcZlAgKiBwZHUsIHZvaWQgKiBtYWdpYykiCi0uUFAKLWhhbmRsZXMgYW4gaW5jb21pbmcgU05NUCBwYWNrZXQgaW50byB0aGUgYWdlbnQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNzc0IG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCogbmV0c25tcF9hZGRfdmFyYmluZF90b19jYWNoZSAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogYXNwLCBpbnQgdmJjb3VudCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyYmluZF9wdHIsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqIHRwKSIKLS5QUAotXGZCVG9kb1xmUAotLlJTIDQKLW1ha2UgdGhpcyBiZSBtb3JlIGludGVsbGlnZW50IGFib3V0IHJhbmdlcy4gUmlnaHQgbm93IHdlIG1lcmVseSB0YWtlIHRoZSBoaWdoZXN0IGxldmVsIGNvbW1vbmFsaXR5IG9mIGEgcmVnaXN0cmF0aW9uIHJhbmdlIGFuZCB1c2UgdGhhdC4gQXQgdGltZXMgd2UgbWlnaHQgYmUgYWJsZSB0byBiZSBzbWFydGVyIGFib3V0IGNoZWNraW5nIHRoZSByYW5nZSBpdHNlbGYgYXMgb3Bwb3NlZCB0byB0aGUgXGZCbm9kZVxmUCBhYm92ZSB3aGVyZSB0aGUgcmFuZ2UgZXhpc3RzLCBidXQgSSBkb3VidCB0aGlzIHdpbGwgY29tZSB1cCBhbGwgdGhhdCBmcmVxdWVudGx5LiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4ODMgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBuZXRzbm1wX2NoZWNrX3RyYW5zYWN0aW9uX2lkIChpbnQgdHJhbnNhY3Rpb25faWQpIgotLlBQCi1EZWNpZGUgaWYgdGhlIHJlcXVlc3RlZCB0cmFuc2FjdGlvbl9pZCBpcyBzdGlsbCBiZWluZyBwcm9jZXNzZWQgd2l0aGluIHRoZSBhZ2VudC4gVGhpcyBpcyB1c2VkIHRvIHZhbGlkYXRlIHdoZXRoZXIgYSBkZWxheWVkIGNhY2hlIChjb250YWluaW5nIHBvc3NpYmx5IGZyZWVkIHBvaW50ZXJzKSBpcyBzdGlsbCB1c2FibGUuCi0uUFAKLXJldHVybnMgU05NUEVSUl9TVUNDRVNTIGlmIGl0J3Mgc3RpbGwgdmFsaWQsIG9yIFNOTVBFUlJfR0VORVJSIGlmIG5vdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzIxIG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvciAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBpbnQgZXJyb3JfdmFsdWUpIgotLlBQCi1zZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcXVlc3RcZlAgcmVxdWVzdCB3aGljaCBoYXMgZXJyb3IgCi0uYnIKLVxmSWVycm9yX3ZhbHVlXGZQIGVycm9yIHZhbHVlIGZvciByZXF1ZXN0IAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzQ4NSBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgaW50IG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzLCBpbnQgZXJyb3IpIgotLlBQCi1zZXQgZXJyb3IgZm9yIGFsbCByZXF1ZXN0cyBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcXVlc3RzXGZQIHJlcXVlc3QgbGlzdCAKLS5icgotXGZJZXJyb3JcZlAgZXJyb3IgdmFsdWUgZm9yIHJlcXVlc3RzIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotU05NUEVSUl9TVUNDRVNTLCBvciBhbiBlcnJvciBjb2RlIAotLlJFCi0uUFAKLQotLlBQCi1wYXJhbm9pZCBzYW5pdHkgY2hlY2tzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzUyOCBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfaWR4IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIGludCBlcnJvcl92YWx1ZSwgaW50IGlkeCkiCi0uUFAKLXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IHdpdGhpbiBhIHJlcXVlc3QgbGlzdCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcXVlc3RcZlAgaGVhZCBvZiB0aGUgcmVxdWVzdCBsaXN0IAotLmJyCi1cZkllcnJvcl92YWx1ZVxmUCBlcnJvciB2YWx1ZSBmb3IgcmVxdWVzdCAKLS5icgotXGZJaWR4XGZQIGluZGV4IG9mIHRoZSByZXF1ZXN0IHdoaWNoIGhhcyB0aGUgZXJyb3IgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNTAwIG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgbmV0c25tcF9zZXRfYWxsX3JlcXVlc3RzX2Vycm9yIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMsIGludCBlcnJvcl92YWx1ZSkiCi0uUFAKLXNldCBlcnJvciBmb3IgYWxsIHJlcXVlc3QgXGZCRGVwcmVjYXRlZFxmUAotLlJTIDQKLXVzZSBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbCAKLS5SRQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcWluZm9cZlAgYWdlbnRfcmVxdWVzdF9pbmZvIHBvaW50ZXIgZm9yIHJlcXVlc3RzIAotLmJyCi1cZklyZXF1ZXN0c1xmUCByZXF1ZXN0IGxpc3QgCi0uYnIKLVxmSWVycm9yX3ZhbHVlXGZQIGVycm9yIHZhbHVlIGZvciByZXF1ZXN0cyAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWVycm9yX3ZhbHVlIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzcwMiBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IG5ldHNubXBfc2V0X21vZGVfcmVxdWVzdF9lcnJvciAoaW50IG1vZGUsIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgaW50IGVycm9yX3ZhbHVlKSIKLS5QUAotc2V0IGVycm9yIGZvciBhIHJlcXVlc3QgZGVwcmVjYXRlZCwgdXNlIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IgaW5zdGVhZAotLlBQCi1cZkJEZXByZWNhdGVkXGZQCi0uUlMgNAotLCB1c2UgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvciBpbnN0ZWFkIAotLlJFCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbW9kZVxmUCBOZXQtU05NUCBhZ2VudCBwcm9jZXNzaW5nIG1vZGUgCi0uYnIKLVxmSXJlcXVlc3RcZlAgcmVxdWVzdF9pbmZvIHBvaW50ZXIgCi0uYnIKLVxmSWVycm9yX3ZhbHVlXGZQIGVycm9yIHZhbHVlIGZvciByZXF1ZXN0cyAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWVycm9yX3ZhbHVlIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzY4NiBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBpbnQgZXJyb3JfdmFsdWUpIgotLlBQCi1zZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCBkZXByZWNhdGVkLCB1c2UgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvciBpbnN0ZWFkCi0uUFAKLVxmQkRlcHJlY2F0ZWRcZlAKLS5SUyA0Ci0sIHVzZSBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yIGluc3RlYWQgCi0uUkUKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXFpbmZvXGZQIGFnZW50X3JlcXVlc3RfaW5mbyBwb2ludGVyIGZvciByZXF1ZXN0IAotLmJyCi1cZklyZXF1ZXN0XGZQIHJlcXVlc3RfaW5mbyBwb2ludGVyIAotLmJyCi1cZkllcnJvcl92YWx1ZVxmUCBlcnJvciB2YWx1ZSBmb3IgcmVxdWVzdHMgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1lcnJvcl92YWx1ZSAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzY2NyBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IG5ldHNubXBfd3JhcF91cF9yZXF1ZXN0IChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBhc3AsIGludCBzdGF0dXMpIgotLlBQCi1pZiBhc3AtPnBkdSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1MjAgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc25tcF9hbGFybS4zIGIvbWFuL25ldHNubXBfc25tcF9hbGFybS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjgzZDU4Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NubXBfYWxhcm0uMworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS5USCAic25tcF9hbGFybSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXNubXBfYWxhcm0gXC0gCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCB0aW1ldmFsIFxmQnRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgaW50IFxmQmZsYWdzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGludCBcZkJjbGllbnRyZWdcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IHRpbWV2YWwgXGZCdF9sYXN0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCB0aW1ldmFsIFxmQnRfbmV4dFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCY2xpZW50YXJnXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlNOTVBBbGFybUNhbGxiYWNrICogXGZCdGhlY2FsbGJhY2tcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnNubXBfYWxhcm1cZlAgKiBcZkJuZXh0XGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2IG9mIGZpbGUgc25tcF9hbGFybS5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc25tcF9jbGllbnQuMyBiL21hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZmYxYzUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc25tcF9jbGllbnQuMworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0uVEggInZhcmlvdXMgUERVIHByb2Nlc3Npbmcgcm91dGluZXMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi12YXJpb3VzIFBEVSBwcm9jZXNzaW5nIHJvdXRpbmVzIFwtIAotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9wZHVcZlAgKiBcZkJzbm1wX3BkdV9jcmVhdGVcZlAgKGludCBjb21tYW5kKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJzbm1wX2FkZF9udWxsX3ZhclxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2Nsb25lX3ZhclxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqbmV3dmFyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9jbG9uZV9tZW1cZlAgKHZvaWQgKipkc3RQdHIsIHZvaWQgKnNyY1B0ciwgdW5zaWduZWQgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfcmVzZXRfdmFyX2J1ZmZlcnNcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJzbm1wX2Nsb25lX3ZhcmJpbmRcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFybGlzdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9wZHVcZlAgKiBcZkJzbm1wX2Nsb25lX3BkdVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9wZHVcZlAgKiBcZkJzbm1wX3NwbGl0X3BkdVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgaW50IHNraXBfY291bnQsIGludCBjb3B5X2NvdW50KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3BkdVxmUCAqIFxmQnNubXBfZml4X3BkdVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgaW50IGNvbW1hbmQpIgotLmJyCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGxvbmcgXGZCc25tcF92YXJiaW5kX2xlblxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2V0X3Zhcl9vYmppZFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2cCwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG5hbWVfbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKm5ld3ZhciwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqdmFsX3N0ciwgc2l6ZV90IHZhbF9sZW4pIgotLmJyCi0uUkkgIlxmSXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSBpcyB1c2VkIHRvIHNldCBkYXRhIGludG8gdGhlIG5ldHNubXBfdmFyaWFibGVfbGlzdCBzdHJ1Y3R1cmUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKm5ld3ZhciwgdV9jaGFyIHR5cGUsIGxvbmcgdmFsKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCY291bnRfdmFyYmluZHNcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyX3B0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNvdW50X3ZhcmJpbmRzX29mX3R5cGVcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyX3B0ciwgdV9jaGFyIHR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQmZpbmRfdmFyYmluZF9vZl90eXBlXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcl9wdHIsIHVfY2hhciB0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJmaW5kX3ZhcmJpbmRfaW5fbGlzdFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2Ymxpc3QsIG9pZCAqbmFtZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2V0X3Zhcl92YWx1ZVxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJzLCBjb25zdCB1X2NoYXIgKnZhbHVlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfcmVwbGFjZV92YXJfdHlwZXNcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmJsLCB1X2NoYXIgb2xkX3R5cGUsIHVfY2hhciBuZXdfdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3Jlc2V0X3Zhcl90eXBlc1xmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YmwsIHVfY2hhciBuZXdfdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc3luY2hfcmVzcG9uc2VfY2JcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIFxmQm5ldHNubXBfcGR1XGZQICoqcmVzcG9uc2UsIHNubXBfY2FsbGJhY2sgcGNiKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zeW5jaF9yZXNwb25zZVxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcywgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgXGZCbmV0c25tcF9wZHVcZlAgKipyZXNwb25zZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2Vzc19zeW5jaF9yZXNwb25zZVxmUCAodm9pZCAqc2Vzc3AsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIFxmQm5ldHNubXBfcGR1XGZQICoqcmVzcG9uc2UpIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJzbm1wX2VycnN0cmluZ1xmUCAoaW50IGVycnN0YXQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9xdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQm5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvblxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcXVlcnlfZ2V0XGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmxpc3QsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcXVlcnlfZ2V0bmV4dFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpsaXN0LCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3F1ZXJ5X3NldFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpsaXN0LCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3F1ZXJ5X3dhbGtcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqbGlzdCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLmluIC0xYwotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBuZXd2YXIsIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKiB2YWxfc3RyLCBzaXplX3QgdmFsX2xlbikiCi0uUFAKLXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSBpcyB1c2VkIHRvIHNldCBkYXRhIGludG8gdGhlIG5ldHNubXBfdmFyaWFibGVfbGlzdCBzdHJ1Y3R1cmUuIFVzZWQgdG8gcmV0dXJuIGRhdGEgdG8gdGhlIHNubXAgcmVxdWVzdCB2aWEgdGhlIG5ldHNubXBfcmVxdWVzdF9pbmZvIHN0cnVjdHVyZSdzIHJlcXVlc3R2YiBwb2ludGVyLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW5ld3ZhclxmUCB0aGUgc3RydWN0dXJlIGdldHMgcG9wdWxhdGVkIHdpdGggdGhlIGdpdmVuIGRhdGEsIHR5cGUsIHZhbF9zdHIsIGFuZCB2YWxfbGVuLiAKLS5icgotXGZJdHlwZVxmUCBpcyB0aGUgYXNuIGRhdGEgdHlwZSB0byBiZSBjb3BpZWQgCi0uYnIKLVxmSXZhbF9zdHJcZlAgaXMgYSBidWZmZXIgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gYmUgY29waWVkIGludG8gdGhlIG5ld3ZhciBzdHJ1Y3R1cmUuIAotLmJyCi1cZkl2YWxfbGVuXGZQIHRoZSBsZW5ndGggb2YgdmFsX3N0cgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIDEgb24gYSBtYWxsb2MgZXJyb3IgCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY4NyBvZiBmaWxlIHNubXBfY2xpZW50LmMuCi0uU1MgImludCBzbm1wX3NldF92YXJfdmFsdWUgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhcnMsIGNvbnN0IHVfY2hhciAqIHZhbHVlLCBzaXplX3QgbGVuKSIKLS5QUAotRkFMTCBUSFJPVUdIIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzU0IG9mIGZpbGUgc25tcF9jbGllbnQuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMyBiL21hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGZjZmJhLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS5USCAiZ2VuZXJpYyBsb2dnaW5nIGZvciBuZXQtc25tcCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWdlbmVyaWMgbG9nZ2luZyBmb3IgbmV0LXNubXAgXC0gCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJMT0dMRU5HVEhcZlAgICAxMDI0IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCdmFfY29weVxmUChkZXN0LCBzcmMpICAgbWVtY3B5ICgmZGVzdCwgJnNyYywgc2l6ZW9mICh2YV9saXN0KSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJMT0dfVVNFUlxmUCAgIDAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9lbmFibGVfZmlsZWxvZ1xmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCwgaW50IGRvbnRfemVyb19sb2cpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ2c25wcmludGZcZlAgKGNoYXIgKnN0ciwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJnKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmluaXRfc25tcF9sb2dnaW5nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNodXRkb3duX3NubXBfbG9nZ2luZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmRlY29kZV9wcmlvcml0eVxmUCAoY2hhciAqKm9wdGFyZywgaW50ICpwcmlfbWF4KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZGVjb2RlX2ZhY2lsaXR5XGZQIChjaGFyICpvcHRhcmcpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2xvZ19vcHRpb25zXGZQIChjaGFyICpvcHRhcmcsIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNubXBfbG9nX3N5c2xvZ25hbWVcZlAgKGNvbnN0IGNoYXIgKnBzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9sb2dfb3B0aW9uc191c2FnZVxmUCAoY29uc3QgY2hhciAqbGVhZCwgRklMRSAqb3V0ZikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfZ2V0X2RvX2xvZ2dpbmdcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSUlzIGxvZ2dpbmcgZG9uZT8gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZGlzYWJsZV9zeXNsb2dfZW50cnlcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9kaXNhYmxlX3N5c2xvZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2Rpc2FibGVfZmlsZWxvZ19lbnRyeVxmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2Rpc2FibGVfZmlsZWxvZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc3RkZXJybG9nX3N0YXR1c1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2Rpc2FibGVfc3RkZXJybG9nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZGlzYWJsZV9jYWxsbG9nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZGlzYWJsZV9sb2dcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9sb2dnaW5nX3Jlc3RhcnRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9lbmFibGVfc3lzbG9nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZW5hYmxlX3N5c2xvZ19pZGVudFxmUCAoY29uc3QgY2hhciAqaWRlbnQsIGNvbnN0IGludCBmYWNpbGl0eSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2VuYWJsZV9maWxlbG9nXGZQIChjb25zdCBjaGFyICpsb2dmaWxlbmFtZSwgaW50IGRvbnRfemVyb19sb2cpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9lbmFibGVfc3RkZXJybG9nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZW5hYmxlX2NhbGxsb2dcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2ZpbmRfbG9naGFuZGxlclxmUCAoY29uc3QgY2hhciAqdG9rZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2FkZF9sb2doYW5kbGVyXGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICogXGZCbmV0c25tcF9yZWdpc3Rlcl9sb2doYW5kbGVyXGZQIChpbnQgdHlwZSwgaW50IHByaW9yaXR5KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9lbmFibGVfbG9naGFuZGxlclxmUCAoY29uc3QgY2hhciAqdG9rZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2Rpc2FibGVfbG9naGFuZGxlclxmUCAoY29uc3QgY2hhciAqdG9rZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlbW92ZV9sb2doYW5kbGVyXGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyXGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJsb2dfaGFuZGxlcl9zeXNsb2dcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmxvZ19oYW5kbGVyX2ZpbGVcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmxvZ19oYW5kbGVyX2NhbGxiYWNrXGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJsb2dfaGFuZGxlcl9udWxsXGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9sb2dfc3RyaW5nXGZQIChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKnN0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfdmxvZ1xmUCAoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApIgotLmJyCi0uUkkgIlxmSVRoaXMgc25tcCBsb2dnaW5nIGZ1bmN0aW9uIGFsbG93cyBcZkJ2YXJpYWJsZVxmUCBhcmd1bWVudCBsaXN0IGdpdmVuIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHksIGZvcm1hdCBhbmQgYSBwb3B1bGF0ZWQgdmFfbGlzdCBzdHJ1Y3R1cmUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfbG9nXGZQIChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwuLi4pIgotLmJyCi0uUkkgIlxmSVRoaXMgc25tcCBsb2dnaW5nIGZ1bmN0aW9uIGFsbG93cyBcZkJ2YXJpYWJsZVxmUCBhcmd1bWVudCBsaXN0IGdpdmVuIHRoZSBzcGVjaWZpZWQgZm9ybWF0IGFuZCBwcmlvcml0eS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfbG9nX3BlcnJvclxmUCAoY29uc3QgY2hhciAqcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqIFxmQmdldF9sb2doX2hlYWRcZlAgKHZvaWQpIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICogXGZCbG9naF9oZWFkXGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICogXGZCbG9naF9wcmlvcml0aWVzXGZQIFtMT0dfREVCVUcrMV0iCi0uYnIKLS5pbiAtMWMKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidm9pZCBuZXRzbm1wX2xvZ2dpbmdfcmVzdGFydCAodm9pZCkiCi0uUFAKLWhtbSwgZG9uJ3QgemVybyBzdGF0dXMgaXNuJ3Qgc2F2ZWQuLiBpIHRoaW5rIGl0J3Mgc2FmZXIgbm90IHRvIG92ZXJ3cml0ZSwgaW4gY2FzZSBhIGh1cCBpcyBqdXN0IHRvIHJlLXJlYWQgY29uZmlnIGZpbGVzLi4uCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2Mzkgb2YgZmlsZSBzbm1wX2xvZ2dpbmcuYy4KLS5TUyAiaW50IHNubXBfZ2V0X2RvX2xvZ2dpbmcgKHZvaWQpIgotLlBQCi1JcyBsb2dnaW5nIGRvbmU/IFxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyAwIGlmIGxvZ2dpbmcgaXMgb2ZmLCAxIHdoZW4gaXQgaXMgZG9uZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0OTYgb2YgZmlsZSBzbm1wX2xvZ2dpbmcuYy4KLS5TUyAiaW50IHNubXBfbG9nIChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKiBmb3JtYXQsICAuLi4pIgotLlBQCi1UaGlzIHNubXAgbG9nZ2luZyBmdW5jdGlvbiBhbGxvd3MgXGZCdmFyaWFibGVcZlAgYXJndW1lbnQgbGlzdCBnaXZlbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCBhbmQgcHJpb3JpdHkuIENhbGxzIHRoZSBzbm1wX3Zsb2cgZnVuY3Rpb24uIFRoZSBkZWZhdWx0IGxvZ2ZpbGUgdGhpcyBmdW5jdGlvbiB3cml0ZXMgdG8gaXMgL3Zhci9sb2cvc25tcGQubG9nLgotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJzbm1wX3Zsb2dcZlAgCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNzggb2YgZmlsZSBzbm1wX2xvZ2dpbmcuYy4KLS5TUyAiaW50IHNubXBfdmxvZyAoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICogZm9ybWF0LCB2YV9saXN0IGFwKSIKLS5QUAotVGhpcyBzbm1wIGxvZ2dpbmcgZnVuY3Rpb24gYWxsb3dzIFxmQnZhcmlhYmxlXGZQIGFyZ3VtZW50IGxpc3QgZ2l2ZW4gdGhlIHNwZWNpZmllZCBwcmlvcml0eSwgZm9ybWF0IGFuZCBhIHBvcHVsYXRlZCB2YV9saXN0IHN0cnVjdHVyZS4gVGhlIGRlZmF1bHQgbG9nZmlsZSB0aGlzIGZ1bmN0aW9uIHdyaXRlcyB0byBpcyAvdmFyL2xvZy9zbm1wZC5sb2cuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcHJpb3JpdHlcZlAgaXMgYW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHR5cGUgb2YgbWVzc2FnZSB0byBiZSB3cml0dGVuIHRvIHRoZSBzbm1wIGxvZyBmaWxlLiBUaGUgdHlwZXMgYXJlIGVycm9ycywgd2FybmluZywgYW5kIGluZm9ybWF0aW9uLgotLklQICJcKGJ1IiAyCi1UaGUgZXJyb3IgdHlwZXMgYXJlOgotLklQICIgIFwoYnUiIDQKLUxPR19FTUVSRyBzeXN0ZW0gaXMgdW51c2FibGUKLS5JUCAiICBcKGJ1IiA0Ci1MT0dfQUxFUlQgYWN0aW9uIG11c3QgYmUgdGFrZW4gaW1tZWRpYXRlbHkKLS5JUCAiICBcKGJ1IiA0Ci1MT0dfQ1JJVCBjcml0aWNhbCBjb25kaXRpb25zCi0uSVAgIiAgXChidSIgNAotTE9HX0VSUiBlcnJvciBjb25kaXRpb25zCi0uUFAKLQotLklQICJcKGJ1IiAyCi1UaGUgd2FybmluZyB0eXBlIGlzOgotLklQICIgIFwoYnUiIDQKLUxPR19XQVJOSU5HIHdhcm5pbmcgY29uZGl0aW9ucwotLlBQCi0KLS5JUCAiXChidSIgMgotVGhlIGluZm9ybWF0aW9uIHR5cGVzIGFyZToKLS5JUCAiICBcKGJ1IiA0Ci1MT0dfTk9USUNFIG5vcm1hbCBidXQgc2lnbmlmaWNhbnQgY29uZGl0aW9uCi0uSVAgIiAgXChidSIgNAotTE9HX0lORk8gaW5mb3JtYXRpb25hbAotLklQICIgIFwoYnUiIDQKLUxPR19ERUJVRyBkZWJ1Zy1sZXZlbCBtZXNzYWdlcwotLlBQCi0KLS5QUAotLmJyCi1cZklmb3JtYXRcZlAgaXMgYSBwb2ludGVyIHRvIGEgY2hhciByZXByZXNlbnRpbmcgdGhlIFxmQnZhcmlhYmxlXGZQIGFyZ3VtZW50IGxpc3QgZm9ybWF0IHVzZWQuCi0uYnIKLVxmSWFwXGZQIGlzIGEgdmFfbGlzdCB0eXBlIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGxpc3Qgb2YgYXJndW1lbnRzLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIHdoZW4gdGhlIGNvZGUgY291bGQgbm90IGZvcm1hdCB0aGUgbG9nLSBzdHJpbmcsIC0yIHdoZW4gZHluYW1pYyBtZW1vcnkgY291bGQgbm90IGJlIGFsbG9jYXRlZCBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBsb2cgYnVmZmVyIGlzIGdyZWF0ZXIgdGhlbiAxMDI0IGJ5dGVzLiBGb3IgZWFjaCBvZiB0aGVzZSBlcnJvcnMgYSBMT0dfRVJSIG1lc3NnYWUgaXMgd3JpdHRlbiB0byB0aGUgbG9nZmlsZS4KLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJzbm1wX2xvZ1xmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyMTcgb2YgZmlsZSBzbm1wX2xvZ2dpbmcuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zbm1wX3BkdS4zIGIvbWFuL25ldHNubXBfc25tcF9wZHUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk2NDgyNy4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zbm1wX3BkdS4zCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS5USCAic25tcF9wZHUiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zbm1wX3BkdSBcLSAKLS5QUAotVGhlIHNubXAgcHJvdG9jb2wgZGF0YSB1bml0LiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHNubXBfYXBpLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCdmVyc2lvblxmUCIKLS5icgotLlJJICJcZklzbm1wIHZlcnNpb24gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCY29tbWFuZFxmUCIKLS5icgotLlJJICJcZklUeXBlIG9mIHRoaXMgUERVLiBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCcmVxaWRcZlAiCi0uYnIKLS5SSSAiXGZJUmVxdWVzdCBpZCAtIG5vdGU6IG5vdCBpbmNyZW1lbnRlZCBvbiByZXRyaWVzLiBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCbXNnaWRcZlAiCi0uYnIKLS5SSSAiXGZJTWVzc2FnZSBpZCBmb3IgVjMgbWVzc2FnZXMgbm90ZTogaW5jcmVtZW50ZWQgZm9yIGVhY2ggcmV0cnkuIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJ0cmFuc2lkXGZQIgotLmJyCi0uUkkgIlxmSVVuaXF1ZSBJRCBmb3IgaW5jb21pbmcgdHJhbnNhY3Rpb25zLiBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCc2Vzc2lkXGZQIgotLmJyCi0uUkkgIlxmSVNlc3Npb24gaWQgZm9yIEFnZW50WCBtZXNzYWdlcy4gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQmVycnN0YXRcZlAiCi0uYnIKLS5SSSAiXGZJRXJyb3Igc3RhdHVzIChub25fcmVwZWF0ZXJzIGluIEdldEJ1bGspLiBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCZXJyaW5kZXhcZlAiCi0uYnIKLS5SSSAiXGZJRXJyb3IgaW5kZXggKG1heF9yZXBldGl0aW9ucyBpbiBHZXRCdWxrKS4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2xvbmcgXGZCdGltZVxmUCIKLS5icgotLlJJICJcZklVcHRpbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9sb25nIFxmQmZsYWdzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzZWN1cml0eU1vZGVsXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzZWN1cml0eUxldmVsXGZQIgotLmJyCi0uUkkgIlxmSW5vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXYgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbXNnUGFyc2VNb2RlbFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCdHJhbnNwb3J0X2RhdGFcZlAiCi0uYnIKLS5SSSAiXGZJVHJhbnNwb3J0LXNwZWNpZmljIG9wYXF1ZSBkYXRhLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJ0cmFuc3BvcnRfZGF0YV9sZW5ndGhcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3Qgb2lkICogXGZCdERvbWFpblxmUCIKLS5icgotLlJJICJcZklUaGUgYWN0dWFsIHRyYW5zcG9ydCBkb21haW4uIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnREb21haW5MZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCdmFyaWFibGVzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmNvbW11bml0eVxmUCIKLS5icgotLlJJICJcZkljb21tdW5pdHkgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJjb21tdW5pdHlfbGVuXGZQIgotLmJyCi0uUkkgIlxmSWxlbmd0aCBvZiBjb21tdW5pdHkgbmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJvaWQgKiBcZkJlbnRlcnByaXNlXGZQIgotLmJyCi0uUkkgIlxmSVN5c3RlbSBPSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmVudGVycHJpc2VfbGVuZ3RoXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCdHJhcF90eXBlXGZQIgotLmJyCi0uUkkgIlxmSXRyYXAgdHlwZSBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCc3BlY2lmaWNfdHlwZVxmUCIKLS5icgotLlJJICJcZklzcGVjaWZpYyB0eXBlIFxmUCIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgY2hhciBcZkJhZ2VudF9hZGRyXGZQIFs0XSIKLS5icgotLlJJICJcZklUaGlzIGlzIE9OTFkgdXNlZCBmb3IgdjEgVFJBUHMuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCY29udGV4dEVuZ2luZUlEXGZQIgotLmJyCi0uUkkgIlxmSWNvbnRleHQgc25tcEVuZ2luZUlEIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmNvbnRleHRFbmdpbmVJRExlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgY29udGV4dEVuZ2luZUlELiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJjb250ZXh0TmFtZVxmUCIKLS5icgotLlJJICJcZklhdXRob3JpdGF0aXZlIGNvbnRleHROYW1lIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmNvbnRleHROYW1lTGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBjb250ZXh0TmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJzZWN1cml0eUVuZ2luZUlEXGZQIgotLmJyCi0uUkkgIlxmSWF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEIGZvciBzZWN1cml0eSBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eUVuZ2luZUlETGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBzZWN1cml0eUVuZ2luZUlELiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJzZWN1cml0eU5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJb24gYmVoYWxmIG9mIHRoaXMgcHJpbmNpcGFsIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5TmFtZUxlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2Ygc2VjdXJpdHlOYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJwcmlvcml0eVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmFuZ2Vfc3ViaWRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQnNlY3VyaXR5U3RhdGVSZWZcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgc25tcCBwcm90b2NvbCBkYXRhIHVuaXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ1bnNpZ25lZCBjaGFyIFxmQnNubXBfcGR1OjphZ2VudF9hZGRyXGZQWzRdIgotLlBQCi1UaGlzIGlzIE9OTFkgdXNlZCBmb3IgdjEgVFJBUHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTQyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiaW50IFxmQnNubXBfcGR1Ojpjb21tYW5kXGZQIgotLlBQCi1UeXBlIG9mIHRoaXMgUERVLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgzIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyKiBcZkJzbm1wX3BkdTo6Y29tbXVuaXR5XGZQIgotLlBQCi1jb21tdW5pdHkgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3BkdTo6Y29tbXVuaXR5X2xlblxmUCIKLS5QUAotbGVuZ3RoIG9mIGNvbW11bml0eSBuYW1lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyOSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciogXGZCc25tcF9wZHU6OmNvbnRleHRFbmdpbmVJRFxmUCIKLS5QUAotY29udGV4dCBzbm1wRW5naW5lSUQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNDggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9wZHU6OmNvbnRleHRFbmdpbmVJRExlblxmUCIKLS5QUAotTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJjaGFyKiBcZkJzbm1wX3BkdTo6Y29udGV4dE5hbWVcZlAiCi0uUFAKLWF1dGhvcml0YXRpdmUgY29udGV4dE5hbWUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9wZHU6OmNvbnRleHROYW1lTGVuXGZQIgotLlBQCi1MZW5ndGggb2YgY29udGV4dE5hbWUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAib2lkKiBcZkJzbm1wX3BkdTo6ZW50ZXJwcmlzZVxmUCIKLS5QUAotU3lzdGVtIE9JRC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1OjplcnJpbmRleFxmUCIKLS5QUAotRXJyb3IgaW5kZXggKG1heF9yZXBldGl0aW9ucyBpbiBHZXRCdWxrKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5NSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6OmVycnN0YXRcZlAiCi0uUFAKLUVycm9yIHN0YXR1cyAobm9uX3JlcGVhdGVycyBpbiBHZXRCdWxrKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6Om1zZ2lkXGZQIgotLlBQCi1NZXNzYWdlIGlkIGZvciBWMyBtZXNzYWdlcyBub3RlOiBpbmNyZW1lbnRlZCBmb3IgZWFjaCByZXRyeS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6OnJlcWlkXGZQIgotLlBQCi1SZXF1ZXN0IGlkIC0gbm90ZTogbm90IGluY3JlbWVudGVkIG9uIHJldHJpZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIqIFxmQnNubXBfcGR1OjpzZWN1cml0eUVuZ2luZUlEXGZQIgotLlBQCi1hdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCBmb3Igc2VjdXJpdHkgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTYgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9wZHU6OnNlY3VyaXR5RW5naW5lSURMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBzZWN1cml0eUVuZ2luZUlELiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1OCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImludCBcZkJzbm1wX3BkdTo6c2VjdXJpdHlMZXZlbFxmUCIKLS5QUAotbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwMiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImNoYXIqIFxmQnNubXBfcGR1OjpzZWN1cml0eU5hbWVcZlAiCi0uUFAKLW9uIGJlaGFsZiBvZiB0aGlzIHByaW5jaXBhbCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2MCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3BkdTo6c2VjdXJpdHlOYW1lTGVuXGZQIgotLlBQCi1MZW5ndGggb2Ygc2VjdXJpdHlOYW1lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2MiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6OnNlc3NpZFxmUCIKLS5QUAotU2Vzc2lvbiBpZCBmb3IgQWdlbnRYIG1lc3NhZ2VzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkxIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6c3BlY2lmaWNfdHlwZVxmUCIKLS5QUAotc3BlY2lmaWMgdHlwZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE0MCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImNvbnN0IG9pZCogXGZCc25tcF9wZHU6OnREb21haW5cZlAiCi0uUFAKLVRoZSBhY3R1YWwgdHJhbnNwb3J0IGRvbWFpbi4gVGhpcyBTSE9VTEQgTk9UIEJFIEZSRUUoKUQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTE3IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9sb25nIFxmQnNubXBfcGR1Ojp0aW1lXGZQIgotLlBQCi1VcHRpbWUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTcgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1Ojp0cmFuc2lkXGZQIgotLlBQCi1VbmlxdWUgSUQgZm9yIGluY29taW5nIHRyYW5zYWN0aW9ucy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4OSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInZvaWQqIFxmQnNubXBfcGR1Ojp0cmFuc3BvcnRfZGF0YVxmUCIKLS5QUAotVHJhbnNwb3J0LXNwZWNpZmljIG9wYXF1ZSBkYXRhLiBUaGlzIHJlcGxhY2VzIHRoZSBJUC1jZW50cmljIGFkZHJlc3MgZmllbGQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTEwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6dHJhcF90eXBlXGZQIgotLlBQCi10cmFwIHR5cGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1Ojp2ZXJzaW9uXGZQIgotLlBQCi1zbm1wIHZlcnNpb24gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MSBvZiBmaWxlIHNubXBfYXBpLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMyBiL21hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGUzODNmLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zCisrKyAvZGV2L251bGwKQEAgLTEsNDQwICswLDAgQEAKLS5USCAic25tcF9zZXNzaW9uIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc25tcF9zZXNzaW9uIFwtIAotLlBQCi1UaGUgc25tcCBzZXNzaW9uIHN0cnVjdHVyZS4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxzbm1wX2FwaS5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJsb25nIFxmQnZlcnNpb25cZlAiCi0uYnIKLS5SSSAiXGZJc25tcCB2ZXJzaW9uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJldHJpZXNcZlAiCi0uYnIKLS5SSSAiXGZJTnVtYmVyIG9mIHJldHJpZXMgYmVmb3JlIHRpbWVvdXQuIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJ0aW1lb3V0XGZQIgotLmJyCi0uUkkgIlxmSU51bWJlciBvZiB1UyB1bnRpbCBmaXJzdCB0aW1lb3V0LCB0aGVuIGV4cG9uZW50aWFsIGJhY2tvZmYuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9sb25nIFxmQmZsYWdzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJzbm1wX3Nlc3Npb25cZlAgKiBcZkJzdWJzZXNzaW9uXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJzbm1wX3Nlc3Npb25cZlAgKiBcZkJuZXh0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJwZWVybmFtZVxmUCIKLS5icgotLlJJICJcZkluYW1lIG9yIGFkZHJlc3Mgb2YgZGVmYXVsdCBwZWVyIChtYXkgaW5jbHVkZSB0cmFuc3BvcnQgc3BlY2lmaWVyIGFuZC9vciBwb3J0IG51bWJlcikgXGZQIgotLnRpIC0xYwotLlJJICJ1X3Nob3J0IFxmQnJlbW90ZV9wb3J0XGZQIgotLmJyCi0uUkkgIlxmSVVEUCBwb3J0IG51bWJlciBvZiBwZWVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJsb2NhbG5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJTXkgRG9tYWluIG5hbWUgb3IgZG90dGVkIElQIGFkZHJlc3MsIDAgZm9yIGRlZmF1bHQuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9zaG9ydCBcZkJsb2NhbF9wb3J0XGZQIgotLmJyCi0uUkkgIlxmSU15IFVEUCBwb3J0IG51bWJlciwgMCBmb3IgZGVmYXVsdCwgcGlja2VkIHJhbmRvbWx5LiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqKCogXGZCYXV0aGVudGljYXRvclxmUCApKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosIHNpemVfdCkiCi0uYnIKLS5SSSAiXGZJQXV0aGVudGljYXRpb24gZnVuY3Rpb24gb3IgTlVMTCBpZiBudWxsIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAibmV0c25tcF9jYWxsYmFjayBcZkJjYWxsYmFja1xmUCIKLS5icgotLlJJICJcZklGdW5jdGlvbiB0byBpbnRlcnByZXQgaW5jb21pbmcgZGF0YS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCY2FsbGJhY2tfbWFnaWNcZlAiCi0uYnIKLS5SSSAiXGZJUG9pbnRlciB0byBkYXRhIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG1heSBjb25zaWRlciBpbXBvcnRhbnQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNfZXJybm9cZlAiCi0uYnIKLS5SSSAiXGZJY29weSBvZiBzeXN0ZW0gZXJybm8gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc19zbm1wX2Vycm5vXGZQIgotLmJyCi0uUkkgIlxmSWNvcHkgb2YgbGlicmFyeSBlcnJubyBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCc2Vzc2lkXGZQIgotLmJyCi0uUkkgIlxmSVNlc3Npb24gaWQgLSBBZ2VudFggb25seS4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJjb21tdW5pdHlcZlAiCi0uYnIKLS5SSSAiXGZJY29tbXVuaXR5IGZvciBvdXRnb2luZyByZXF1ZXN0cy4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCY29tbXVuaXR5X2xlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgY29tbXVuaXR5IG5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnJjdk1zZ01heFNpemVcZlAiCi0uYnIKLS5SSSAiXGZJTGFyZ2VzdCBtZXNzYWdlIHRvIHRyeSB0byByZWNlaXZlLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzbmRNc2dNYXhTaXplXGZQIgotLmJyCi0uUkkgIlxmSUxhcmdlc3QgbWVzc2FnZSB0byB0cnkgdG8gc2VuZC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgXGZCaXNBdXRob3JpdGF0aXZlXGZQIgotLmJyCi0uUkkgIlxmSWFyZSB3ZSB0aGUgYXV0aG9yaXRhdGl2ZSBlbmdpbmU/IFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCY29udGV4dEVuZ2luZUlEXGZQIgotLmJyCi0uUkkgIlxmSWF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmNvbnRleHRFbmdpbmVJRExlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgY29udGV4dEVuZ2luZUlELiBcZlAiCi0udGkgLTFjCi0uUkkgInVfaW50IFxmQmVuZ2luZUJvb3RzXGZQIgotLmJyCi0uUkkgIlxmSWluaXRpYWwgZW5naW5lQm9vdHMgZm9yIHJlbW90ZSBlbmdpbmUgXGZQIgotLnRpIC0xYwotLlJJICJ1X2ludCBcZkJlbmdpbmVUaW1lXGZQIgotLmJyCi0uUkkgIlxmSWluaXRpYWwgZW5naW5lVGltZSBmb3IgcmVtb3RlIGVuZ2luZSBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJjb250ZXh0TmFtZVxmUCIKLS5icgotLlJJICJcZklhdXRob3JpdGF0aXZlIGNvbnRleHROYW1lIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmNvbnRleHROYW1lTGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBjb250ZXh0TmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJzZWN1cml0eUVuZ2luZUlEXGZQIgotLmJyCi0uUkkgIlxmSWF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5RW5naW5lSURMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRC4gXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc2VjdXJpdHlOYW1lXGZQIgotLmJyCi0uUkkgIlxmSW9uIGJlaGFsZiBvZiB0aGlzIHByaW5jaXBhbCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eU5hbWVMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIHNlY3VyaXR5TmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJvaWQgKiBcZkJzZWN1cml0eUF1dGhQcm90b1xmUCIKLS5icgotLlJJICJcZklhdXRoIHByb3RvY29sIG9pZCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eUF1dGhQcm90b0xlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgYXV0aCBwcm90b2NvbCBvaWQuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyIFxmQnNlY3VyaXR5QXV0aEtleVxmUCBbVVNNX0FVVEhfS1VfTEVOXSIKLS5icgotLlJJICJcZklLdSBmb3IgYXV0aCBwcm90b2NvbCBYWFguIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5QXV0aEtleUxlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgS3UgZm9yIGF1dGggcHJvdG9jb2wuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCc2VjdXJpdHlBdXRoTG9jYWxLZXlcZlAiCi0uYnIKLS5SSSAiXGZJS3VsIGZvciBhdXRoIHByb3RvY29sLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eUF1dGhMb2NhbEtleUxlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgS3VsIGZvciBhdXRoIHByb3RvY29sIFhYWC4gXGZQIgotLnRpIC0xYwotLlJJICJvaWQgKiBcZkJzZWN1cml0eVByaXZQcm90b1xmUCIKLS5icgotLlJJICJcZklwcml2IHByb3RvY29sIG9pZCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eVByaXZQcm90b0xlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgcHJpdiBwcm90b2NvbCBvaWQuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyIFxmQnNlY3VyaXR5UHJpdktleVxmUCBbVVNNX1BSSVZfS1VfTEVOXSIKLS5icgotLlJJICJcZklLdSBmb3IgcHJpdmFjeSBwcm90b2NvbCBYWFguIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNlY3VyaXR5UHJpdktleUxlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgS3UgZm9yIHByaXYgcHJvdG9jb2wuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCc2VjdXJpdHlQcml2TG9jYWxLZXlcZlAiCi0uYnIKLS5SSSAiXGZJS3VsIGZvciBwcml2IHByb3RvY29sLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eVByaXZMb2NhbEtleUxlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgS3VsIGZvciBwcml2IHByb3RvY29sIFhYWC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc2VjdXJpdHlNb2RlbFxmUCIKLS5icgotLlJJICJcZklzbm1wIHNlY3VyaXR5IG1vZGVsLCB2MSwgdjJjLCB1c20gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc2VjdXJpdHlMZXZlbFxmUCIKLS5icgotLlJJICJcZklub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2IFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnBhcmFtTmFtZVxmUCIKLS5icgotLlJJICJcZkl0YXJnZXQgcGFyYW0gbmFtZSBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJzZWN1cml0eUluZm9cZlAiCi0uYnIKLS5SSSAiXGZJc2VjdXJpdHkgXGZCbW9kdWxlXGZQIHNwZWNpZmljIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm15dm9pZFxmUCIKLS5icgotLlJJICJcZkl1c2UgYXMgeW91IHdhbnQgZGF0YSBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIHNubXAgc2Vzc2lvbiBzdHJ1Y3R1cmUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTg3IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidV9jaGFyKigqIFxmQnNubXBfc2Vzc2lvbjo6YXV0aGVudGljYXRvclxmUCkodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwgc2l6ZV90KSIKLS5QUAotQXV0aGVudGljYXRpb24gZnVuY3Rpb24gb3IgTlVMTCBpZiBudWxsIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQuIAotLlNTICJuZXRzbm1wX2NhbGxiYWNrIFxmQnNubXBfc2Vzc2lvbjo6Y2FsbGJhY2tcZlAiCi0uUFAKLUZ1bmN0aW9uIHRvIGludGVycHJldCBpbmNvbWluZyBkYXRhLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIxNCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInZvaWQqIFxmQnNubXBfc2Vzc2lvbjo6Y2FsbGJhY2tfbWFnaWNcZlAiCi0uUFAKLVBvaW50ZXIgdG8gZGF0YSB0aGF0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBtYXkgY29uc2lkZXIgaW1wb3J0YW50LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIxOCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciogXGZCc25tcF9zZXNzaW9uOjpjb21tdW5pdHlcZlAiCi0uUFAKLWNvbW11bml0eSBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjMwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6Y29tbXVuaXR5X2xlblxmUCIKLS5QUAotTGVuZ3RoIG9mIGNvbW11bml0eSBuYW1lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzMiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciogXGZCc25tcF9zZXNzaW9uOjpjb250ZXh0RW5naW5lSURcZlAiCi0uUFAKLWF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQ0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6Y29udGV4dEVuZ2luZUlETGVuXGZQIgotLlBQCi1MZW5ndGggb2YgY29udGV4dEVuZ2luZUlELiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0NiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImNoYXIqIFxmQnNubXBfc2Vzc2lvbjo6Y29udGV4dE5hbWVcZlAiCi0uUFAKLWF1dGhvcml0YXRpdmUgY29udGV4dE5hbWUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpjb250ZXh0TmFtZUxlblxmUCIKLS5QUAotTGVuZ3RoIG9mIGNvbnRleHROYW1lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1NCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfaW50IFxmQnNubXBfc2Vzc2lvbjo6ZW5naW5lQm9vdHNcZlAiCi0uUFAKLWluaXRpYWwgZW5naW5lQm9vdHMgZm9yIHJlbW90ZSBlbmdpbmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2ludCBcZkJzbm1wX3Nlc3Npb246OmVuZ2luZVRpbWVcZlAiCi0uUFAKLWluaXRpYWwgZW5naW5lVGltZSBmb3IgcmVtb3RlIGVuZ2luZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1MCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciBcZkJzbm1wX3Nlc3Npb246OmlzQXV0aG9yaXRhdGl2ZVxmUCIKLS5QUAotYXJlIHdlIHRoZSBhdXRob3JpdGF0aXZlIGVuZ2luZT8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X3Nob3J0IFxmQnNubXBfc2Vzc2lvbjo6bG9jYWxfcG9ydFxmUCIKLS5QUAotTXkgVURQIHBvcnQgbnVtYmVyLCAwIGZvciBkZWZhdWx0LCBwaWNrZWQgcmFuZG9tbHkuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjA4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiY2hhciogXGZCc25tcF9zZXNzaW9uOjpsb2NhbG5hbWVcZlAiCi0uUFAKLU15IERvbWFpbiBuYW1lIG9yIGRvdHRlZCBJUCBhZGRyZXNzLCAwIGZvciBkZWZhdWx0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwNiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInZvaWQqIFxmQnNubXBfc2Vzc2lvbjo6bXl2b2lkXGZQIgotLlBQCi11c2UgYXMgeW91IHdhbnQgZGF0YSB1c2VkIGJ5ICdTTk1QX0ZMQUdTX1JFU1BfQ0FMTEJBQ0snIGhhbmRsaW5nIGluIHRoZSBhZ2VudCBYWFg6IG9yIHNob3VsZCB3ZSBhZGQgYSBuZXcgZmllbGQgaW50byB0aGlzIHN0cnVjdHVyZT8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMDggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJjaGFyKiBcZkJzbm1wX3Nlc3Npb246OnBhcmFtTmFtZVxmUCIKLS5QUAotdGFyZ2V0IHBhcmFtIG5hbWUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOTUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJjaGFyKiBcZkJzbm1wX3Nlc3Npb246OnBlZXJuYW1lXGZQIgotLlBQCi1uYW1lIG9yIGFkZHJlc3Mgb2YgZGVmYXVsdCBwZWVyIChtYXkgaW5jbHVkZSB0cmFuc3BvcnQgc3BlY2lmaWVyIGFuZC9vciBwb3J0IG51bWJlcikgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpyY3ZNc2dNYXhTaXplXGZQIgotLlBQCi1MYXJnZXN0IG1lc3NhZ2UgdG8gdHJ5IHRvIHJlY2VpdmUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjM0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9zaG9ydCBcZkJzbm1wX3Nlc3Npb246OnJlbW90ZV9wb3J0XGZQIgotLlBQCi1VRFAgcG9ydCBudW1iZXIgb2YgcGVlci4gKE5PIExPTkdFUiBVU0VEIC0gVVNFIHBlZXJuYW1lIElOU1RFQUQpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjA0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiaW50IFxmQnNubXBfc2Vzc2lvbjo6cmV0cmllc1xmUCIKLS5QUAotTnVtYmVyIG9mIHJldHJpZXMgYmVmb3JlIHRpbWVvdXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTk0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiaW50IFxmQnNubXBfc2Vzc2lvbjo6c19lcnJub1xmUCIKLS5QUAotY29weSBvZiBzeXN0ZW0gZXJybm8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJpbnQgXGZCc25tcF9zZXNzaW9uOjpzX3NubXBfZXJybm9cZlAiCi0uUFAKLWNvcHkgb2YgbGlicmFyeSBlcnJubyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyMiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5QXV0aEtleVxmUFtVU01fQVVUSF9LVV9MRU5dIgotLlBQCi1LdSBmb3IgYXV0aCBwcm90b2NvbCBYWFguIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjY5IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlBdXRoS2V5TGVuXGZQIgotLlBQCi1MZW5ndGggb2YgS3UgZm9yIGF1dGggcHJvdG9jb2wuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjcxIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyKiBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5QXV0aExvY2FsS2V5XGZQIgotLlBQCi1LdWwgZm9yIGF1dGggcHJvdG9jb2wuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjczIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlBdXRoTG9jYWxLZXlMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBLdWwgZm9yIGF1dGggcHJvdG9jb2wgWFhYLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3NSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgIm9pZCogXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUF1dGhQcm90b1xmUCIKLS5QUAotYXV0aCBwcm90b2NvbCBvaWQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNjUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUF1dGhQcm90b0xlblxmUCIKLS5QUAotTGVuZ3RoIG9mIGF1dGggcHJvdG9jb2wgb2lkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2NyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciogXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUVuZ2luZUlEXGZQIgotLlBQCi1hdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1NiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5RW5naW5lSURMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjU4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidm9pZCogXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUluZm9cZlAiCi0uUFAKLXNlY3VyaXR5IFxmQm1vZHVsZVxmUCBzcGVjaWZpYyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMwMCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImludCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5TGV2ZWxcZlAiCi0uUFAKLW5vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXYgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOTMgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJpbnQgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eU1vZGVsXGZQIgotLlBQCi1zbm1wIHNlY3VyaXR5IG1vZGVsLCB2MSwgdjJjLCB1c20gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOTEgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJjaGFyKiBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5TmFtZVxmUCIKLS5QUAotb24gYmVoYWxmIG9mIHRoaXMgcHJpbmNpcGFsIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjYwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlOYW1lTGVuXGZQIgotLlBQCi1MZW5ndGggb2Ygc2VjdXJpdHlOYW1lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2MiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5UHJpdktleVxmUFtVU01fUFJJVl9LVV9MRU5dIgotLlBQCi1LdSBmb3IgcHJpdmFjeSBwcm90b2NvbCBYWFguIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjgyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlQcml2S2V5TGVuXGZQIgotLlBQCi1MZW5ndGggb2YgS3UgZm9yIHByaXYgcHJvdG9jb2wuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjg0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyKiBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5UHJpdkxvY2FsS2V5XGZQIgotLlBQCi1LdWwgZm9yIHByaXYgcHJvdG9jb2wuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjg2IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlQcml2TG9jYWxLZXlMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBLdWwgZm9yIHByaXYgcHJvdG9jb2wgWFhYLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4OCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgIm9pZCogXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eVByaXZQcm90b1xmUCIKLS5QUAotcHJpdiBwcm90b2NvbCBvaWQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eVByaXZQcm90b0xlblxmUCIKLS5QUAotTGVuZ3RoIG9mIHByaXYgcHJvdG9jb2wgb2lkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4MCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9zZXNzaW9uOjpzZXNzaWRcZlAiCi0uUFAKLVNlc3Npb24gaWQgLSBBZ2VudFggb25seS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzbmRNc2dNYXhTaXplXGZQIgotLlBQCi1MYXJnZXN0IG1lc3NhZ2UgdG8gdHJ5IHRvIHNlbmQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjM2IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3Nlc3Npb246OnRpbWVvdXRcZlAiCi0uUFAKLU51bWJlciBvZiB1UyB1bnRpbCBmaXJzdCB0aW1lb3V0LCB0aGVuIGV4cG9uZW50aWFsIGJhY2tvZmYuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTk2IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3Nlc3Npb246OnZlcnNpb25cZlAiCi0uUFAKLXNubXAgdmVyc2lvbiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5MiBvZiBmaWxlIHNubXBfYXBpLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zIGIvbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYzYTQ3NC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLlRIICJzdGFzaF9jYWNoZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXN0YXNoX2NhY2hlIFwtIAotLlBQCi1BdXRvbWF0aWNhbGx5IGNhY2hlcyBkYXRhIGZvciBjZXJ0YWluIGhhbmRsZXJzLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc3Rhc2hfY2FjaGVfaW5mb1xmUCAqIFxmQm5ldHNubXBfZ2V0X25ld19zdGFzaF9jYWNoZVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3RpbWVkX2JhcmVfc3Rhc2hfY2FjaGVfaGFuZGxlclxmUCAoaW50IHRpbWVvdXQsIG9pZCAqcm9vdG9pZCwgc2l6ZV90IHJvb3RvaWRfbGVuKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbiAod2l0aCB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgYW5kIHJvb3QgT0lEIHZhbHVlcyksIGJ1dCAqb25seSogaWYgdGhhdCBoYW5kbGVyIGNoYWluIGV4cGxpY2l0bHkgc3VwcG9ydHMgc3Rhc2ggY2FjaGUgcHJvY2Vzc2luZy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfYmFyZV9zdGFzaF9jYWNoZV9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgc2luZ2xlIHN0YXNoX2NhY2hlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4gKHdpdGggYSBmaXhlZCB0aW1lb3V0KSwgYnV0ICpvbmx5KiBpZiB0aGF0IGhhbmRsZXIgY2hhaW4gZXhwbGljaXRseSBzdXBwb3J0cyBzdGFzaCBjYWNoZSBwcm9jZXNzaW5nLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9zdGFzaF9jYWNoZV9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciBzdWItY2hhaW4gdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIChhcmJpdHJhcnkpIGhhbmRsZXIgY2hhaW4sIHVzaW5nIGEgZml4ZWQgY2FjaGUgdGltZW91dC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfdGltZWRfc3Rhc2hfY2FjaGVfaGFuZGxlclxmUCAoaW50IHRpbWVvdXQsIG9pZCAqcm9vdG9pZCwgc2l6ZV90IHJvb3RvaWRfbGVuKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciBzdWItY2hhaW4gdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIChhcmJpdHJhcnkpIGhhbmRsZXIgY2hhaW4sIHVzaW5nIGEgY29uZmlndXJhYmxlIGNhY2hlIHRpbWVvdXQuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqKiBcZkJuZXRzbm1wX2V4dHJhY3Rfc3Rhc2hfY2FjaGVcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvKSIKLS5icgotLlJJICJcZklleHRyYWN0cyBhIHBvaW50ZXIgdG8gdGhlIHN0YXNoX2NhY2hlIGluZm8gZnJvbSB0aGUgcmVxaW5mbyBzdHJ1Y3R1cmUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc3Rhc2hfY2FjaGVfaGVscGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCX25ldHNubXBfc3Rhc2hfY2FjaGVfbG9hZFxmUCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUsIHZvaWQgKm1hZ2ljKSIKLS5icgotLlJJICJcZkl1cGRhdGVzIGEgZ2l2ZW4gY2FjaGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgbmVlZHMgdG8gb3Igbm90LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCX25ldHNubXBfc3Rhc2hfY2FjaGVfZnJlZVxmUCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUsIHZvaWQgKm1hZ2ljKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9zdGFzaF9jYWNoZV9oZWxwZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSBzdGFzaF9jYWNoZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotQXV0b21hdGljYWxseSBjYWNoZXMgZGF0YSBmb3IgY2VydGFpbiBoYW5kbGVycy4gCi0KLVRoaXMgaGFuZGxlciBjYWNoZXMgZGF0YSBpbiBhbiBvcHRpbWl6ZWQgd2F5IHdoaWNoIG1heSBhbGxldmlhdGUgdGhlIG5lZWQgZm9yIHRoZSBsb3dlciBsZXZlbCBoYW5kbGVycyB0byBwZXJmb3JtIGFzIG11Y2ggb3B0aW1pemF0aW9uLiBTcGVjaWZpY2FsbHksIHNvbWV3aGVyZSBpbiB0aGUgbG93ZXIgbGV2ZWwgaGFuZGxlcnMgbXVzdCBiZSBhIGhhbmRsZXIgdGhhdCBzdXBwb3J0cyB0aGUgTU9ERV9HRVRfU1RBU0ggb3BlcmF0aW9uLiBOb3RlIHRoYXQgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBlciBzdXBwb3J0cyB0aGlzLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IF9uZXRzbm1wX3N0YXNoX2NhY2hlX2xvYWQgKFxmQm5ldHNubXBfY2FjaGVcZlAgKiBjYWNoZSwgdm9pZCAqIG1hZ2ljKSIKLS5QUAotdXBkYXRlcyBhIGdpdmVuIGNhY2hlIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IG5lZWRzIHRvIG9yIG5vdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTUgb2YgZmlsZSBzdGFzaF9jYWNoZS5jLgotLlNTICJcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQKiogbmV0c25tcF9leHRyYWN0X3N0YXNoX2NhY2hlIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8pIgotLlBQCi1leHRyYWN0cyBhIHBvaW50ZXIgdG8gdGhlIHN0YXNoX2NhY2hlIGluZm8gZnJvbSB0aGUgcmVxaW5mbyBzdHJ1Y3R1cmUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTEzIG9mIGZpbGUgc3Rhc2hfY2FjaGUuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfYmFyZV9zdGFzaF9jYWNoZV9oYW5kbGVyICh2b2lkKSIKLS5QUAotcmV0dXJucyBhIHNpbmdsZSBzdGFzaF9jYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluICh3aXRoIGEgZml4ZWQgdGltZW91dCksIGJ1dCAqb25seSogaWYgdGhhdCBoYW5kbGVyIGNoYWluIGV4cGxpY2l0bHkgc3VwcG9ydHMgc3Rhc2ggY2FjaGUgcHJvY2Vzc2luZy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3OSBvZiBmaWxlIHN0YXNoX2NhY2hlLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3N0YXNoX2NhY2hlX2hhbmRsZXIgKHZvaWQpIgotLlBQCi1yZXR1cm5zIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciBzdWItY2hhaW4gdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIChhcmJpdHJhcnkpIGhhbmRsZXIgY2hhaW4sIHVzaW5nIGEgZml4ZWQgY2FjaGUgdGltZW91dC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4OCBvZiBmaWxlIHN0YXNoX2NhY2hlLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3RpbWVkX2JhcmVfc3Rhc2hfY2FjaGVfaGFuZGxlciAoaW50IHRpbWVvdXQsIG9pZCAqIHJvb3RvaWQsIHNpemVfdCByb290b2lkX2xlbikiCi0uUFAKLXJldHVybnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluICh3aXRoIHRoZSBzcGVjaWZpZWQgdGltZW91dCBhbmQgcm9vdCBPSUQgdmFsdWVzKSwgYnV0ICpvbmx5KiBpZiB0aGF0IGhhbmRsZXIgY2hhaW4gZXhwbGljaXRseSBzdXBwb3J0cyBzdGFzaCBjYWNoZSBwcm9jZXNzaW5nLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ0IG9mIGZpbGUgc3Rhc2hfY2FjaGUuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfdGltZWRfc3Rhc2hfY2FjaGVfaGFuZGxlciAoaW50IHRpbWVvdXQsIG9pZCAqIHJvb3RvaWQsIHNpemVfdCByb290b2lkX2xlbikiCi0uUFAKLXJldHVybnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIHN1Yi1jaGFpbiB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gKGFyYml0cmFyeSkgaGFuZGxlciBjaGFpbiwgdXNpbmcgYSBjb25maWd1cmFibGUgY2FjaGUgdGltZW91dC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDEgb2YgZmlsZSBzdGFzaF9jYWNoZS5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9zdGFzaF9jYWNoZV9oZWxwZXIgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgc3Rhc2hfY2FjaGUgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzggb2YgZmlsZSBzdGFzaF9jYWNoZS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMyBiL21hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc4MjIwZS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0uVEggInN0YXNoX3RvX25leHQiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zdGFzaF90b19uZXh0IFwtIAotLlBQCi1Db252ZXJ0IEdFVF9TVEFTSCByZXF1ZXN0cyBpbnRvIEdFVE5FWFQgcmVxdWVzdHMgZm9yIHRoZSBoYW5kbGVyLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9zdGFzaF90b19uZXh0X2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBzdGFzaF90b19uZXh0IGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc3Rhc2hfdG9fbmV4dF9oZWxwZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotQ29udmVydCBHRVRfU1RBU0ggcmVxdWVzdHMgaW50byBHRVRORVhUIHJlcXVlc3RzIGZvciB0aGUgaGFuZGxlci4gCi0KLVRoZSBwdXJwb3NlIG9mIHRoaXMgaGFuZGxlciBpcyB0byBjb252ZXJ0IGEgR0VUX1NUQVNIIGF1dG8tY2FjaGUgcmVxdWVzdCB0byBhIHNlcmllcyBvZiBHRVRORVhUIHJlcXVlc3RzLiBJdCBjYW4gYmUgaW5zZXJ0ZWQgaW50byBhIGhhbmRsZXIgY2hhaW4gd2hlcmUgdGhlIGxvd2VyLWxldmVsIGhhbmRsZXJzIGRvbid0IHByb2Nlc3Mgc3VjaCByZXF1ZXN0cyB0aGVtc2VsdmVzLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfc3Rhc2hfdG9fbmV4dF9oYW5kbGVyICh2b2lkKSIKLS5QUAotcmV0dXJucyBhIHN0YXNoX3RvX25leHQgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOCBvZiBmaWxlIHN0YXNoX3RvX25leHQuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZS4zIGIvbWFuL25ldHNubXBfdGFibGUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDllNTUxNS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZS4zCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS5USCAidGFibGUiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZSBcLSAKLS5QUAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlLiAgCi0KLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9hcnJheVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZW4gZGF0YSBjYW4gYmUgc3RvcmVkIGxvY2FsbHkuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfY29udGFpbmVyXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklIZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlbiBkYXRhIGNhbiBiZSBmb3VuZCB2aWEgYSBuZXRzbm1wX2NvbnRhaW5lci4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9kYXRhXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklIZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCZ2VuZXJpY190YWJsZV9BUElcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUdlbmVyYWwgcmVxdWlyZW1lbnRzIGZvciBhIHRhYmxlIGhlbHBlci4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9pdGVyYXRvclxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJVGhlIHRhYmxlIGl0ZXJhdG9yIGhlbHBlciBpcyBkZXNpZ25lZCB0byBzaW1wbGlmeSB0aGUgdGFzayBvZiB3cml0aW5nIGEgdGFibGUgaGFuZGxlciBmb3IgdGhlIG5ldC1zbm1wIGFnZW50IHdoZW4gdGhlIGRhdGEgYmVpbmcgYWNjZXNzZWQgaXMgbm90IGluIGFuIG9pZCBzb3J0ZWQgZm9ybSBhbmQgbXVzdCBiZSBhY2Nlc3NlZCBleHRlcm5hbGx5LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX3Jvd1xmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHNoYXJlZCBhY3Jvc3MgdHdvIG9yIG1vcmUgc3ViYWdlbnRzLCBvciBvdGhlcndpc2Ugc3BsaXQgaW50byBpbmRpdmlkdWFsIHJvdyBzbGljZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCdGRhdGFcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUltcGxlbWVudCBhIHRhYmxlIHdpdGggZGF0YW1hdHRlZCBzdG9yYWdlLiBcZlAiCi0uaW4gLTFjCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTUEFSU0VfVEFCTEVfSEFORExFUl9OQU1FXGZQICAgJ3NwYXJzZV90YWJsZSciCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJyZXEpIgotLmJyCi0uUkkgIlxmSUdpdmVuIGEgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QsIGNyZWF0ZXMgYSB0YWJsZSBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJyZXEpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYSB0YWJsZSBoYW5kbGVyIGdpdmVuIHRoZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCwgaW5zZXJ0cyBpdCBpbnRvIHRoZSByZXF1ZXN0IGNoYWluIGFuZCB0aGVuIGNhbGxzIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIHRvIHJlZ2lzdGVyIHRoZSB0YWJsZSBpbnRvIHRoZSBhZ2VudC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqIFxmQm5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJRXh0cmFjdHMgdGhlIHByb2Nlc3NlZCB0YWJsZSBpbmZvcm1hdGlvbiBmcm9tIGEgZ2l2ZW4gcmVxdWVzdC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogXGZCbmV0c25tcF9maW5kX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgcmVnaXN0ZXJlZCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCBmcm9tIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBvYmplY3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCdGFibGVfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSWltcGxlbWVudHMgdGhlIHRhYmxlIGhlbHBlciBoYW5kbGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfc3BhcnNlX3RhYmxlX2hhbmRsZXJfZ2V0XGZQICh2b2lkKSIKLS5icgotLlJJICJcZkljcmVhdGUgc3BhcnNlIHRhYmxlIGhhbmRsZXIgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zcGFyc2VfdGFibGVfcmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYnJlcSkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhIHRhYmxlIGhhbmRsZXIgZ2l2ZW4gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0LCBpbnNlcnRzIGl0IGludG8gdGhlIHJlcXVlc3QgY2hhaW4gYW5kIHRoZW4gY2FsbHMgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgdG8gcmVnaXN0ZXIgdGhlIHRhYmxlIGludG8gdGhlIGFnZW50LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2J1aWxkX3Jlc3VsdFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICp0YWJsZV9pbmZvLCB1X2NoYXIgdHlwZSwgdV9jaGFyICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuKSIKLS5icgotLlJJICJcZklCdWlsZHMgdGhlIHJlc3VsdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYWdlbnQgZ2l2ZW4gdGhlIHRhYmxlIGluZm9ybWF0aW9uLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2J1aWxkX29pZFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICp0YWJsZV9pbmZvKSIKLS5icgotLlJJICJcZklnaXZlbiBhIHJlZ2lzdHJhdGlvbiBpbmZvIG9iamVjdCwgYSByZXF1ZXN0IG9iamVjdCBhbmQgdGhlIHRhYmxlIGluZm8gb2JqZWN0IGl0IGJ1aWxkcyB0aGUgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lIG9pZCBmcm9tIHRoZSBpbmRleCB2YWx1ZXMgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3VuZCBpbiB0aGUgdGFibGVfaW5mbyBvYmplY3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfYnVpbGRfb2lkX2Zyb21faW5kZXhcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqdGFibGVfaW5mbykiCi0uYnIKLS5SSSAiXGZJZ2l2ZW4gYSByZWdpc3RyYXRpb24gaW5mbyBvYmplY3QsIGEgcmVxdWVzdCBvYmplY3QgYW5kIHRoZSB0YWJsZSBpbmZvIG9iamVjdCBpdCBidWlsZHMgdGhlIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSBvaWQgZnJvbSB0aGUgaW5kZXggdmFsdWVzIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIHRhYmxlX2luZm8gb2JqZWN0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3VwZGF0ZV92YXJpYWJsZV9saXN0X2Zyb21faW5kZXhcZlAgKFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICp0cmkpIgotLmJyCi0uUkkgIlxmSXBhcnNlcyBhbiBPSUQgaW50byB0YWJsZSBpbmRleHNlcyBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3VwZGF0ZV9pbmRleGVzX2Zyb21fdmFyaWFibGVfbGlzdFxmUCAoXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKnRyaSkiCi0uYnIKLS5SSSAiXGZJYnVpbGRzIGFuIG9pZCBnaXZlbiBhIHNldCBvZiBpbmRleGVzLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX2dldG5leHRfcmVwbHlcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBvaWQgKnByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqbmV3dmFyLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKipvdXR2YXIpIgotLmJyCi0uUkkgIlxmSWNoZWNrcyB0aGUgb3JpZ2luYWwgcmVxdWVzdCBhZ2FpbnN0IHRoZSBjdXJyZW50IGRhdGEgYmVpbmcgcGFzc2VkIGluIGlmIGl0cyBncmVhdGVyIHRoYW4gdGhlIHJlcXVlc3Qgb2lkIGJ1dCBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdmFsaWQgcmV0dXJuLCBzZXQgdGhlIGN1cnJlbnQgdmFsaWQgcmV0dXJuIHRvIHRoZSBuZXcgdmFsdWUuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUuIAotCi1UaGlzIGhhbmRsZXIgaGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIGJ5IGRvaW5nIHNvbWUgb2YgdGhlIHByb2Nlc3NpbmcgZm9yIHlvdS4KLS5QUAotVGhpcyBoYW5kbGVyIHRydWx5IHNob3dzIHRoZSBwb3dlciBvZiB0aGUgbmV3IGhhbmRsZXIgbWVjaGFuaXNtLiBCeSBjcmVhdGluZyBhIHRhYmxlIGhhbmRsZXIgYW5kIGluamVjdGluZyBpdCBpbnRvIHlvdXIgY2FsbGluZyBjaGFpbiwgb3IgYnkgdXNpbmcgdGhlIFxmQm5ldHNubXBfcmVnaXN0ZXJfdGFibGUoKVxmUCBmdW5jdGlvbiB0byByZWdpc3RlciB5b3VyIHRhYmxlLCB5b3UgZ2V0IGFjY2VzcyB0byBzb21lIHByZS1wYXJzZWQgaW5mb3JtYXRpb24uIFNwZWNpZmljYWxseSwgdGhlIHRhYmxlIGhhbmRsZXIgcHVsbHMgb3V0IHRoZSBjb2x1bW4gbnVtYmVyIGFuZCBpbmRleGVzIGZyb20gdGhlIHJlcXVlc3Qgb2lkIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZG8gdGhlIGNvbXBsZXggd29yayB0byBkbyB0aGF0IHBhcnNpbmcgd2l0aGluIHlvdXIgb3duIGNvZGUuCi0uUFAKLVRvIGRvIHRoaXMsIHRoZSB0YWJsZSBoYW5kbGVyIG5lZWRzIHRvIGtub3cgdXAgZnJvbnQgaG93IHlvdXIgdGFibGUgaXMgc3RydWN0dXJlZC4gVG8gaW5mb3JtIGl0IGFib3V0IHRoaXMsIHlvdSBmaWxsIGluIGEgdGFibGVfcmVnaXN0ZXJhdGlvbl9pbmZvIHN0cnVjdHVyZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgdGFibGUgaGFuZGxlci4gSXQgY29udGFpbnMgdGhlIGFzbiBpbmRleCB0eXBlcyBmb3IgdGhlIHRhYmxlIGFzIHdlbGwgYXMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gY29sdW1uIHRoYXQgc2hvdWxkIGJlIHVzZWQuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9jaGVja19nZXRuZXh0X3JlcGx5IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIG9pZCAqIHByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIG5ld3ZhciwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICoqIG91dHZhcikiCi0uUFAKLWNoZWNrcyB0aGUgb3JpZ2luYWwgcmVxdWVzdCBhZ2FpbnN0IHRoZSBjdXJyZW50IGRhdGEgYmVpbmcgcGFzc2VkIGluIGlmIGl0cyBncmVhdGVyIHRoYW4gdGhlIHJlcXVlc3Qgb2lkIGJ1dCBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdmFsaWQgcmV0dXJuLCBzZXQgdGhlIGN1cnJlbnQgdmFsaWQgcmV0dXJuIHRvIHRoZSBuZXcgdmFsdWUuIHJldHVybnMgMSBpZiBvdXR2YXIgd2FzIHJlcGxhY2VkIHdpdGggdGhlIG9pZCBmcm9tIG5ld3ZhciAoc3VjY2VzcykuIHJldHVybnMgMCBpZiBub3QuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODgxIG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAqIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1FeHRyYWN0cyB0aGUgcHJvY2Vzc2VkIHRhYmxlIGluZm9ybWF0aW9uIGZyb20gYSBnaXZlbiByZXF1ZXN0LiBDYWxsIHRoaXMgZnJvbSBzdWJoYW5kbGVycyBvbiBhIHJlcXVlc3QgdG8gZXh0cmFjdCB0aGUgcHJvY2Vzc2VkIG5ldHNubXBfcmVxdWVzdF9pbmZvIGluZm9ybWF0aW9uLiBUaGUgcmVzdWx0aW5nIGluZm9ybWF0aW9uIGluY2x1ZGVzIHRoZSBpbmRleCB2YWx1ZXMgYW5kIHRoZSBjb2x1bW4gbnVtYmVyLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcXVlc3RcZlAgcG9wdWxhdGVkIG5ldHNubXAgcmVxdWVzdCBzdHJ1Y3R1cmUKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXBvcHVsYXRlZCBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyBzdHJ1Y3R1cmUgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjUgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQKiBuZXRzbm1wX2ZpbmRfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotZXh0cmFjdHMgdGhlIHJlZ2lzdGVyZWQgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QgZnJvbSBhIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gb2JqZWN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM0IG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlciAoXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYnJlcSkiCi0uUFAKLUdpdmVuIGEgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QsIGNyZWF0ZXMgYSB0YWJsZSBoYW5kbGVyLiBZb3UgY2FuIHVzZSB0aGlzIHRhYmxlIGhhbmRsZXIgYnkgaW5qZWN0aW5nIGl0IGludG8gYSBjYWxsaW5nIGNoYWluLiBXaGVuIHRoZSBoYW5kbGVyIGdldHMgY2FsbGVkLCBpdCdsbCBkbyBwcm9jZXNzaW5nIGFuZCBzdG9yZSBpdCdzIGluZm9ybWF0aW9uIGludG8gdGhlIHJlcXVlc3QtPnBhcmVudF9kYXRhIHN0cnVjdHVyZS4KLS5QUAotVGhlIHRhYmxlIGhlbHBlciBoYW5kbGVyIHB1bGxzIG91dCB0aGUgY29sdW1uIG51bWJlciBhbmQgaW5kZXhlcyBmcm9tIHRoZSByZXF1ZXN0IG9pZCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGRvIHRoZSBjb21wbGV4IHdvcmsgb2YgcGFyc2luZyB3aXRoaW4geW91ciBvd24gY29kZS4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0YWJyZXFcZlAgaXMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBzdHJ1Y3QuIFRoZSB0YWJsZSBoYW5kbGVyIG5lZWRzIHRvIGtub3cgdXAgZnJvbnQgaG93IHlvdXIgdGFibGUgaXMgc3RydWN0dXJlZC4gQSBuZXRzbm1wX3RhYmxlX3JlZ2lzdGVyYXRpb25faW5mbyBzdHJ1Y3R1cmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHRhYmxlIGhhbmRsZXIgc2hvdWxkIGNvbnRhaW4gdGhlIGFzbiBpbmRleCB0eXBlcyBmb3IgdGhlIHRhYmxlIGFzIHdlbGwgYXMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gY29sdW1uIHRoYXQgc2hvdWxkIGJlIHVzZWQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldHNubXBfbWliX2hhbmRsZXIgc3RydWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBoYW5kbGVyJ3MgbmFtZSBhbmQgdGhlIGFjY2VzcyBtZXRob2QgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NSBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYnJlcSkiCi0uUFAKLWNyZWF0ZXMgYSB0YWJsZSBoYW5kbGVyIGdpdmVuIHRoZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCwgaW5zZXJ0cyBpdCBpbnRvIHRoZSByZXF1ZXN0IGNoYWluIGFuZCB0aGVuIGNhbGxzIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIHRvIHJlZ2lzdGVyIHRoZSB0YWJsZSBpbnRvIHRoZSBhZ2VudC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDggb2YgZmlsZSB0YWJsZS5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX3NwYXJzZV90YWJsZV9oYW5kbGVyX2dldCAodm9pZCkiCi0uUFAKLWNyZWF0ZSBzcGFyc2UgdGFibGUgaGFuZGxlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDcyMiBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgImludCBuZXRzbm1wX3NwYXJzZV90YWJsZV9yZWdpc3RlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJyZXEpIgotLlBQCi1jcmVhdGVzIGEgdGFibGUgaGFuZGxlciBnaXZlbiB0aGUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QsIGluc2VydHMgaXQgaW50byB0aGUgcmVxdWVzdCBjaGFpbiBhbmQgdGhlbiBjYWxscyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCB0byByZWdpc3RlciB0aGUgdGFibGUgaW50byB0aGUgYWdlbnQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzMzIG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiaW50IG5ldHNubXBfdGFibGVfYnVpbGRfb2lkIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqIHRhYmxlX2luZm8pIgotLlBQCi1naXZlbiBhIHJlZ2lzdHJhdGlvbiBpbmZvIG9iamVjdCwgYSByZXF1ZXN0IG9iamVjdCBhbmQgdGhlIHRhYmxlIGluZm8gb2JqZWN0IGl0IGJ1aWxkcyB0aGUgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lIG9pZCBmcm9tIHRoZSBpbmRleCB2YWx1ZXMgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3VuZCBpbiB0aGUgdGFibGVfaW5mbyBvYmplY3QuIEluZGV4IHZhbHVlcyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlIHRhYmxlX2luZm8gdmFyYmluZHMuIAotLlBQCi0uRW50cnkKLS5QUAotLmNvbHVtbiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc4NCBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgImludCBuZXRzbm1wX3RhYmxlX2J1aWxkX29pZF9mcm9tX2luZGV4IChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqIHRhYmxlX2luZm8pIgotLlBQCi1naXZlbiBhIHJlZ2lzdHJhdGlvbiBpbmZvIG9iamVjdCwgYSByZXF1ZXN0IG9iamVjdCBhbmQgdGhlIHRhYmxlIGluZm8gb2JqZWN0IGl0IGJ1aWxkcyB0aGUgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lIG9pZCBmcm9tIHRoZSBpbmRleCB2YWx1ZXMgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3VuZCBpbiB0aGUgdGFibGVfaW5mbyBvYmplY3QuIEluZGV4IHZhbHVlcyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlIHRhYmxlX2luZm8gaW5kZXggb2lkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgyMSBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgImludCBuZXRzbm1wX3RhYmxlX2J1aWxkX3Jlc3VsdCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKiB0YWJsZV9pbmZvLCB1X2NoYXIgdHlwZSwgdV9jaGFyICogcmVzdWx0LCBzaXplX3QgcmVzdWx0X2xlbikiCi0uUFAKLUJ1aWxkcyB0aGUgcmVzdWx0IHRvIGJlIHJldHVybmVkIHRvIHRoZSBhZ2VudCBnaXZlbiB0aGUgdGFibGUgaW5mb3JtYXRpb24uIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiByZXN1bHRzIGZyb20gbG93ZWwgbGV2ZWwgaGFuZGxlcnMgdG8gdGhlIGFnZW50LiBJdCB0YWtlcyBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBwcm9wZXIgcmVzdWx0aW5nIG9pZCAoY29udGFpbmluZyBwcm9wZXIgaW5kZXhpbmcpIGFuZCBpbnNlcnRzIHRoZSByZXN1bHQgdmFsdWUgaW50byB0aGUgcmV0dXJuaW5nIHZhcmJpbmQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzUxIG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiaW50IG5ldHNubXBfdXBkYXRlX2luZGV4ZXNfZnJvbV92YXJpYWJsZV9saXN0IChcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqIHRyaSkiCi0uUFAKLWJ1aWxkcyBhbiBvaWQgZ2l2ZW4gYSBzZXQgb2YgaW5kZXhlcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NjMgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJpbnQgbmV0c25tcF91cGRhdGVfdmFyaWFibGVfbGlzdF9mcm9tX2luZGV4IChcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqIHRyaSkiCi0uUFAKLXBhcnNlcyBhbiBPSUQgaW50byB0YWJsZSBpbmRleHNlcyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg0NyBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgImludCB0YWJsZV9oZWxwZXJfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi1pbXBsZW1lbnRzIHRoZSB0YWJsZSBoZWxwZXIgaGFuZGxlciAKLS5QUAotWFhYLXJrczogbWVtb3J5IGxlYWsuIGFkZCBjbGVhbnVwIGhhbmRsZXI/Ci0uUFAKLW5vbmUgYXZhaWxhYmxlCi0uUFAKLWdvdCBvbmUgb2sKLS5QUAotZm9yIGxvb3AgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNDIgb2YgZmlsZSB0YWJsZS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMgYi9tYW4vbmV0c25tcF90YWJsZV9hcnJheS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGViNDA0Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0uVEggInRhYmxlX2FycmF5IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfYXJyYXkgXC0gCi0uUFAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVuIGRhdGEgY2FuIGJlIHN0b3JlZCBsb2NhbGx5LiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2NvbnRhaW5lcl9yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFicmVnLCBcZkJuZXRzbm1wX3RhYmxlX2FycmF5X2NhbGxiYWNrc1xmUCAqY2IsIFxmQm5ldHNubXBfY29udGFpbmVyXGZQICpjb250YWluZXIsIGludCBncm91cF9yb3dzKSIKLS5icgotLlJJICJcZklyZWdpc3RlciBzcGVjaWZpZWQgY2FsbGJhY2tzIGZvciB0aGUgc3BlY2lmaWVkIHRhYmxlL29pZC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9hcnJheV9yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFicmVnLCBcZkJuZXRzbm1wX3RhYmxlX2FycmF5X2NhbGxiYWNrc1xmUCAqY2IsIFxmQm5ldHNubXBfY29udGFpbmVyXGZQICpjb250YWluZXIsIGludCBncm91cF9yb3dzKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9maW5kX3RhYmxlX2FycmF5X2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSWZpbmQgdGhlIGhhbmRsZXIgZm9yIHRoZSB0YWJsZV9hcnJheSBoZWxwZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jb250YWluZXJcZlAgKiBcZkJuZXRzbm1wX2V4dHJhY3RfYXJyYXlfY29udGV4dFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWZpbmQgdGhlIGNvbnRleHQgZGF0YSB1c2VkIGJ5IHRoZSB0YWJsZV9hcnJheSBoZWxwZXIgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9hcnJheV9jaGVja19yb3dfc3RhdHVzXGZQIChcZkJuZXRzbm1wX3RhYmxlX2FycmF5X2NhbGxiYWNrc1xmUCAqY2IsIFxmQm5ldHNubXBfcmVxdWVzdF9ncm91cFxmUCAqYWcsIGxvbmcgKnJzX25ldywgbG9uZyAqcnNfb2xkKSIKLS5icgotLlJJICJcZkl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byB2YWxpZGF0ZSBSb3dTdGF0dXMgdHJhbnNpdGlvbnMuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlbiBkYXRhIGNhbiBiZSBzdG9yZWQgbG9jYWxseS4gCi0KLVRoZSBkYXRhIGlzIHN0b3JlZCBpbiBhIHNvcnRlZCBhcnJheSwgdXNpbmcgYSBiaW5hcnkgc2VhcmNoIGZvciBsb29rdXBzLgotLlBQCi1UaGUgdGFibGVfYXJyYXkgaGFuZGxlciBpcyB1c2VkIChhdXRvbWF0aWNhbGx5KSBpbiBjb25qdW50aW9uIHdpdGggdGhlIFxmQnRhYmxlXGZQIGhhbmRsZXIuIEl0IGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggdGhlIG1pYjJjIGNvbmZpZ3VyYXRpb24gZmlsZSBtaWIyYy5hcnJheS11c2VyLmNvbmYuCi0uUFAKLVRoZSBjb2RlIGdlbmVyYXRlZCBieSBtaWIyYyBpcyB1c2VmdWwgd2hlbiB5b3UgaGF2ZSBjb250cm9sIG9mIHRoZSBkYXRhIGZvciBlYWNoIHJvdy4gSWYgeW91IGNhbm5vdCBjb250cm9sIHdoZW4gcm93cyBhcmUgYWRkZWQgYW5kIGRlbGV0ZWQgKG9yIGF0IGxlYXN0IGJlIG5vdGlmaWVkIG9mIGNoYW5nZXMgdG8gcm93IGRhdGEpLCB0aGVuIHRoaXMgaGFuZGxlciBpcyBwcm9iYWJseSBub3QgZm9yIHlvdS4KLS5QUAotVGhpcyBoYW5kbGVyIG1ha2VzIHVzZSBvZiBjYWxsYmFja3MgKGZ1bmN0aW9uIHBvaW50ZXJzKSB0byBoYW5kbGUgdmFyaW91cyB0YXNrcy4gQ29kZSBpcyBnZW5lcmF0ZWQgZm9yIGVhY2ggY2FsbGJhY2ssIGJ1dCB3aWxsIG5lZWQgdG8gYmUgcmV2aWV3ZWQgYW5kIGZsdXNoZWQgb3V0IGJ5IHRoZSB1c2VyLgotLlBQCi1OT1RFIE5PVEUgTk9URTogT25jZSBwbGFjZSB3aGVyZSBtaWIyYyBpcyBzb21ld2hhdCBsYWNraW5nIGlzIHdpdGggcmVnYXJkcyB0byB0YWJsZXMgd2l0aCBleHRlcm5hbCBpbmRpY2VzLiBJZiB5b3VyIHRhYmxlIG1ha2VzIHVzZSBvZiBvbmUgb3IgbW9yZSBleHRlcm5hbCBpbmRpY2VzLCBwbGVhc2UgcmV2aWV3IHRoZSBnZW5lcmF0ZWQgY29kZSB2ZXJ5IGNhcmVmdWxseSBmb3IgY29tbWVudHMgcmVnYXJkaW5nIGV4dGVybmFsIGluZGljZXMuCi0uUFAKLU5PVEUgTk9URSBOT1RFOiBUaGlzIGhlbHBlciwgdGhlIEFQSSBhbmQgY2FsbGJhY2tzIGFyZSBzdGlsbCBiZWluZyB0ZXN0ZWQgYW5kIG1heSBjaGFuZ2UuCi0uUFAKLVRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGRlZmluZSBhIHN0cnVjdHVyZSBmb3Igc3RvcmFnZSBvZiB0YWJsZSByZWxhdGVkIGRhdGEuIFRoaXMgc3RydWN0dXJlIG11c3QgYmUgdXNlZCwgYXMgaXQgY29udGFpbnMgdGhlIGluZGV4IE9JRCBmb3IgdGhlIHJvdywgd2hpY2ggaXMgdXNlZCBmb3Iga2VlcGluZyB0aGUgYXJyYXkgc29ydGVkLiBZb3UgY2FuIGFkZCBhZGRpdGlvbiBmaWVsZHMgb3IgZGF0YSB0byB0aGUgc3RydWN0dXJlIGZvciB5b3VyIG93biB1c2UuCi0uUFAKLVRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGFsc28gaGF2ZSBjb2RlIHRvIGhhbmRsZSBTTk1QLVNFVCBwcm9jZXNzaW5nLiBJZiB5b3VyIHRhYmxlIGRvZXMgbm90IHN1cHBvcnQgYW55IFNFVCBvcGVyYXRpb25zLCBzaW1wbHkgY29tbWVudCBvdXQgdGhlICNkZWZpbmUgPFBSRUZJWD5fU0VUX0hBTkRMSU5HICh3aGVyZSA8UFJFRklYPiBpcyB5b3VyIHRhYmxlIG5hbWUpIGluIHRoZSBoZWFkZXIgZmlsZS4KLS5QUAotU0VUIHByb2Nlc3NpbmcgbW9kaWZpZXMgdGhlIHJvdyBpbi1wbGFjZS4gVGhlIGR1cGxpY2F0ZV9yb3cgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgdG8gc2F2ZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHJvdy4gSW4gdGhlIGV2ZW50IG9mIGEgZmFpbHVyZSBiZWZvcmUgdGhlIGNvbW1pdGUgcGhhc2UsIHRoZSByb3dfY29weSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCByb3cgZnJvbSB0aGUgY29weS4KLS5QUAotQ29kZSB3aWxsIGJlIGdlbmVyYXRlZCB0byBoYW5kbGUgcm93IGNyZWF0aW9uLiBUaGlzIGNvZGUgbWF5IGJlIGRpc2FibGVkIGJ5IGNvbW1lbnRpbmcgb3V0IHRoZSAjZGVmaW5lIDxQUkVGSVg+X1JPV19DUkVBVElPTiBpbiB0aGUgaGVhZGVyIGZpbGUuCi0uUFAKLUlmIHlvdXIgdGFibGUgY29udGFpbnMgYSBSb3dTdGF0dXMgb2JqZWN0LCBieSBkZWZhdWx0IHRoZSBjb2RlIHdpbGwgbm90IGFsbG93IG9iamVjdCBpbiBhbiBhY3RpdmUgcm93IHRvIGJlIG1vZGlmaWVkLiBUbyBhbGxvdyBhY3RpdmUgcm93cyB0byBiZSBtb2RpZmllZCwgcmVtb3ZlIHRoZSBjb21tZW50IGJsb2NrIGFyb3VuZCB0aGUgI2RlZmluZSA8UFJFRklYPl9DQU5fTU9ESUZZX0FDVElWRV9ST1cgaW4gdGhlIGhlYWRlciBmaWxlLgotLlBQCi1Db2RlIHdpbGwgYmUgZ2VuZXJhdGVkIHRvIG1haW50YWluIGEgc2Vjb25kYXJ5IGluZGV4IGZvciBhbGwgcm93cywgc3RvcmVkIGluIGEgYmluYXJ5IFxmQnRyZWVcZlAuIFRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIGZpbmRpbmcgcm93cyBieSBhIGtleSBvdGhlciB0aGFuIHRoZSBPSUQgaW5kZXguIEJ5IGRlZmF1bHQsIHRoZSBmdW5jdGlvbnMgZm9yIG1haW50YWluaW5nIHRoaXMgXGZCdHJlZVxmUCB3aWxsIGJlIGJhc2VkIG9uIGEgY2hhcmFjdGVyIHN0cmluZy4gTk9URTogdGhpcyB3aWxsIGxpa2VseSBiZSBtYWRlIGludG8gYSBtb3JlIGdlbmVyaWMgbWVjaGFuaXNtLCB1c2luZyBuZXcgY2FsbGJhY2sgbWV0aG9kcywgaW4gdGhlIG5lYXIgZnV0dXJlLgotLlBQCi1UaGUgZ2VuZXJhdGVkIGNvZGUgY29udGFpbnMgbWFueSBUT0RPIGNvbW1lbnRzLiBNYWtlIHN1cmUgeW91IGNoZWNrIGVhY2ggb25lIHRvIHNlZSBpZiBpdCBhcHBsaWVzIHRvIHlvdXIgY29kZS4gRXhhbXBsZXMgaW5jbHVkZSBjaGVja2luZyBpbmRpY2VzIGZvciBzeW50YXggKHJhbmdlcywgZXRjKSwgaW5pdGlhbGl6aW5nIGRlZmF1bHQgdmFsdWVzIGluIG5ld2x5IGNyZWF0ZWQgcm93cywgY2hlY2tpbmcgZm9yIHJvdyBhY3RpdmF0aW9uIGFuZCBkZWFjdGl2YXRpb24gcmVxdWlyZW1lbnRzLCBldGMuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCogbmV0c25tcF9leHRyYWN0X2FycmF5X2NvbnRleHQgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWZpbmQgdGhlIGNvbnRleHQgZGF0YSB1c2VkIGJ5IHRoZSB0YWJsZV9hcnJheSBoZWxwZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjkgb2YgZmlsZSB0YWJsZV9hcnJheS5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2ZpbmRfdGFibGVfYXJyYXlfaGFuZGxlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1maW5kIHRoZSBoYW5kbGVyIGZvciB0aGUgdGFibGVfYXJyYXkgaGVscGVyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIxMiBvZiBmaWxlIHRhYmxlX2FycmF5LmMuCi0uU1MgImludCBuZXRzbm1wX3RhYmxlX2FycmF5X2NoZWNrX3Jvd19zdGF0dXMgKFxmQm5ldHNubXBfdGFibGVfYXJyYXlfY2FsbGJhY2tzXGZQICogY2IsIFxmQm5ldHNubXBfcmVxdWVzdF9ncm91cFxmUCAqIGFnLCBsb25nICogcnNfbmV3LCBsb25nICogcnNfb2xkKSIKLS5QUAotdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gdmFsaWRhdGUgUm93U3RhdHVzIHRyYW5zaXRpb25zLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzNiBvZiBmaWxlIHRhYmxlX2FycmF5LmMuCi0uU1MgImludCBuZXRzbm1wX3RhYmxlX2NvbnRhaW5lcl9yZWdpc3RlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJyZWcsIFxmQm5ldHNubXBfdGFibGVfYXJyYXlfY2FsbGJhY2tzXGZQICogY2IsIFxmQm5ldHNubXBfY29udGFpbmVyXGZQICogY29udGFpbmVyLCBpbnQgZ3JvdXBfcm93cykiCi0uUFAKLXJlZ2lzdGVyIHNwZWNpZmllZCBjYWxsYmFja3MgZm9yIHRoZSBzcGVjaWZpZWQgdGFibGUvb2lkLiBJZiB0aGUgZ3JvdXBfcm93cyBwYXJhbWV0ZXIgaXMgc2V0LCB0aGUgcm93IHJlbGF0ZWQgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggdW5pcXVlIHJvdyBpbmRleC4gT3RoZXJ3aXNlLCBlYWNoIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSwgZm9yIGFsbCBvYmplY3RzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE0OSBvZiBmaWxlIHRhYmxlX2FycmF5LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMgYi9tYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA4NzI1OC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMworKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0uVEggInRhYmxlX2NvbnRhaW5lciIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX2NvbnRhaW5lciBcLSAKLS5QUAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZW4gZGF0YSBjYW4gYmUgZm91bmQgdmlhIGEgbmV0c25tcF9jb250YWluZXIuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCY29udGFpbmVyX3RhYmxlX2RhdGFcZlAgKiBcZkJuZXRzbm1wX3Rjb250YWluZXJfY3JlYXRlX3RhYmxlXGZQIChjb25zdCBjaGFyICpuYW1lLCBcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqY29udGFpbmVyLCBsb25nIGZsYWdzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfdGNvbnRhaW5lcl9kZWxldGVfdGFibGVcZlAgKFxmQmNvbnRhaW5lcl90YWJsZV9kYXRhXGZQICp0YWJsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGNvbnRhaW5lcl9hZGRfcm93XGZQIChcZkJjb250YWluZXJfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfaW5kZXhcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9pbmRleFxmUCAqIFxmQm5ldHNubXBfdGNvbnRhaW5lcl9yZW1vdmVfcm93XGZQIChcZkJjb250YWluZXJfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfaW5kZXhcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGNvbnRhaW5lcl9yZXBsYWNlX3Jvd1xmUCAoXGZCY29udGFpbmVyX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX2luZGV4XGZQICpvbGRfcm93LCBcZkJuZXRzbm1wX2luZGV4XGZQICpuZXdfcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXRcZlAgKFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYnJlZywgXGZCbmV0c25tcF9jb250YWluZXJcZlAgKmNvbnRhaW5lciwgY2hhciBrZXlfdHlwZSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFicmVnLCBcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqY29udGFpbmVyLCBjaGFyIGtleV90eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqIFxmQm5ldHNubXBfY29udGFpbmVyX3RhYmxlX2NvbnRhaW5lcl9leHRyYWN0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJcmV0cmlldmUgdGhlIGNvbnRhaW5lciB1c2VkIGJ5IHRoZSB0YWJsZV9jb250YWluZXIgaGVscGVyIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfaW5zZXJ0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgXGZCbmV0c25tcF9pbmRleFxmUCAqcm93KSIKLS5icgotLlJJICJcZklpbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0YWJsZV9jb250YWluZXIgZW50cnkgaW50byBhIHJlcXVlc3QgbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfaW5kZXhcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2luZGV4X2ZpbmRfbmV4dF9yb3dcZlAgKFxmQm5ldHNubXBfY29udGFpbmVyXGZQICpjLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqdGJscmVxKSIKLS5icgotLlJJICJcZklkZXByZWNhdGVkLCBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSBvbmx5IFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlbiBkYXRhIGNhbiBiZSBmb3VuZCB2aWEgYSBuZXRzbm1wX2NvbnRhaW5lci4gCi0KLVRoZSB0YWJsZV9jb250YWluZXIgaGFuZGxlciBpcyB1c2VkIChhdXRvbWF0aWNhbGx5KSBpbiBjb25qdW50aW9uIHdpdGggdGhlIFxmQnRhYmxlXGZQIGhhbmRsZXIuCi0uUFAKLVRoaXMgaGFuZGxlciB3aWxsIHVzZSB0aGUgaW5kZXggaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIFxmQnRhYmxlXGZQIGhhbmRsZXIgdG8gZmluZCB0aGUgcm93IG5lZWRlZCB0byBwcm9jZXNzIHRoZSByZXF1ZXN0LgotLlBQCi1UaGUgY29udGFpbmVyIG11c3QgdXNlIG9uZSBvZiAzIGtleSB0eXBlcy4gSXQgaXMgdGhlIHN1Yi1oYW5kbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRhaW5lciBhbmQga2V5IHR5cGUgbWF0Y2ggKHVubGVzcyBuZWl0aGVyIGlzIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZSBhIGRlZmF1bHQgd2lsbCBiZSB1c2VkLikKLS5QUAotVGhlIGN1cnJlbnQga2V5IHR5cGVzIGFyZToKLS5QUAotVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYIFRoZSBjb250YWluZXIgc2hvdWxkIGRvIGNvbXBhcmlzb25zIGJhc2VkIG9uIGEga2V5IHRoYXQgbWF5IGJlIGNhc3QgdG8gYSBuZXRzbm1wIGluZGV4IChuZXRzbm1wX2luZGV4ICopLiBUaGlzIGluZGV4IGNvbnRhaW5zIG9ubHkgdGhlIGluZGV4IHBvcnRpb24gb2YgdGhlIE9JRCwgbm90IHRoZSBlbnRpcmUgT0lELgotLlBQCi1UQUJMRV9DT05UQUlORVJfS0VZX1ZBUkJJTkRfSU5ERVggVGhlIGNvbnRhaW5lciBzaG91bGQgZG8gY29tcGFyaXNvbnMgYmFzZWQgb24gYSBrZXkgdGhhdCBtYXkgYmUgY2FzdCB0byBhIG5ldHNubXAgXGZCdmFyaWFibGVcZlAgbGlzdCAobmV0c25tcF92YXJpYWJsZV9saXN0ICopLiBUaGlzIFxmQnZhcmlhYmxlXGZQIGxpc3Qgd2lsbCBjb250YWluIG9uZSB2YXJiaW5kIGZvciBlYWNoIGluZGV4IGNvbXBvbmVudC4KLS5QUAotVEFCTEVfQ09OVEFJTkVSX0tFWV9WQVJCSU5EX1JBVyAoTk9URTogdW5pbXBsZW1lbnRlZCkgV2hpbGUgbm90IHlldCBpbXBsZW1lbnRlZCwgZnV0dXJlIHBsYW5zIGluY2x1ZGUgcGFzc2luZyB0aGUgcmVxdWVzdCB2YXJiaW5kIHdpdGggdGhlIGZ1bGwgT0lEIHRvIGEgY29udGFpbmVyLgotLlBQCi1JZiBhIGtleSB0eXBlIGlzIG5vdCBzcGVjaWZpZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWUsIHRoZSBkZWZhdWx0IGtleSB0eXBlIG9mIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCB3aWxsIGJlIHVzZWQuIElmIGEgY29udGFpbmVyIGlzIHByb3ZpZGVkLCBvciB0aGUgaGFuZGxlciBuYW1lIGlzIGFsaWFzZWQgdG8gYSBjb250YWluZXIgdHlwZSwgdGhlIGNvbnRhaW5lciBtdXN0IHVzZSBhIG5ldHNubXAgaW5kZXguCi0uUFAKLUlmIG5vIGNvbnRhaW5lciBpcyBwcm92aWRlZCwgYSBsb29rdXAgd2lsbCBiZSBtYWRlIGJhc2VkIG9uIHRoZSBzdWItaGFuZGxlcidzIG5hbWUsIG9yIGlmIHRoYXQgaXNuJ3QgZm91bmQsICd0YWJsZV9jb250YWluZXInLiBUaGUgdGFibGVfY29udGFpbmVyIGtleSB0eXBlIHdpbGwgYmUgbmV0c25tcF9pbmRleC4KLS5QUAotVGhlIGNvbnRhaW5lciBtdXN0LCBhdCBhIG1pbmltdW0sIGltcGxlbWVudCBmaW5kIGFuZCBmaW5kX25leHQuIElmIGEgTlVMTCBrZXkgaXMgcGFzc2VkIHRvIHRoZSBjb250YWluZXIsIGl0IG11c3QgcmV0dXJuIHRoZSBmaXJzdCBpdGVtLCBpZiBhbnkuIEFsbCBjb250YWluZXJzIHByb3ZpZGVkIGJ5IG5ldC1zbm1wIGZ1bGZpbCB0aGlzIHJlcXVpcmVtZW50LgotLlBQCi1UaGlzIGhhbmRsZXIgd2lsbCBvbmx5IHJlZ2lzdGVyIHRvIHByb2Nlc3MgJ2RhdGEgbG9va3VwJyBtb2Rlcy4gSW4gdHJhZGl0aW9uYWwgbmV0LXNubXAgbW9kZXMsIHRoYXQgaXMgYW55IEdFVC1saWtlIG1vZGUgKEdFVCwgR0VULU5FWFQsIEdFVC1CVUxLKSBvciB0aGUgZmlyc3QgcGhhc2Ugb2YgYSBTRVQgKFJFU0VSVkUxKS4gSW4gdGhlIG5ldyBiYWJ5LXN0ZXBzIG1vZGUsIERBVEFfTE9PS1VQIGlzIGl0J3Mgb3duIG1vZGUsIGFuZCBpcyBhIHByZS1jdXJzb3IgdG8gb3RoZXIgbW9kZXMuCi0uUFAKLVdoZW4gY2FsbGVkLCB0aGUgaGFuZGxlciB3aWxsIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGNvbnRhaW5lciBtZXRob2Qgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2V5IHR5cGUuIElmIGEgcm93IHdhcyBub3QgZm91bmQsIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgbW9kZS4KLS5QUAotR0VUIFByb2Nlc3NpbmcgQW4gZXhhY3QgbWF0Y2ggbXVzdCBiZSBmb3VuZC4gSWYgb25lIGlzIG5vdCwgdGhlIGVycm9yIE5PU1VDSElOU1RBTkNFIGlzIHNldC4KLS5QUAotR0VULU5FWFQgLyBHRVQtQlVMSyBJZiBubyByb3cgaXMgZm91bmQsIHRoZSBjb2x1bW4gbnVtYmVyIHdpbGwgYmUgaW5jcmVhc2VkICh1c2luZyBhbnkgdmFsaWRfY29sdW1ucyBzdHJ1Y3R1cmUgdGhhdCBtYXkgaGF2ZSBiZWVuIHByb3ZpZGVkKSwgYW5kIHRoZSBmaXJzdCByb3cgd2lsbCBiZSByZXRyaWV2ZWQuIElmIG5vIGZpcnN0IHJvdyBpcyBmb3VuZCwgdGhlIHByb2Nlc3NlZCBmbGFnIHdpbGwgYmUgc2V0LCBzbyB0aGF0IHRoZSBzdWItaGFuZGxlciBjYW4gc2tpcCBhbnkgcHJvY2Vzc2luZyByZWxhdGVkIHRvIHRoZSByZXF1ZXN0LiBUaGUgYWdlbnQgd2lsbCBub3RpY2UgdGhpcyB1bnNhdGlzZmllZCByZXF1ZXN0LCBhbmQgYXR0ZW1wdCB0byBwYXNzIGl0IHRvIHRoZSBuZXh0IGFwcHJvcHJpYXRlIGhhbmRsZXIuCi0uUFAKLVNFVCBJZiB0aGUgaGFuZGVyIGRpZCBub3QgcmVnaXN0ZXIgd2l0aCB0aGUgSEFORExFUl9DQU5fTk9UX0NSRUFURSBmbGFnIHNldCBpbiB0aGUgcmVnaXN0cmF0aW9uIG1vZGVzLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBpcyBhIHJvdyBjcmVhdGlvbiByZXF1ZXN0IGFuZCBhIE5VTEwgcm93IGlzIGFkZGVkIHRvIHRoZSByZXF1ZXN0J3MgZGF0YSBsaXN0LiBUaGUgc3ViLWhhbmRsZXIgaXMgcmVzcG9uc2JpbGUgZm9yIGRlYWxpbmcgd2l0aCBhbnkgcm93IGNyZWF0aW9uIGNvbnRyYWludHMgYW5kIGluc2VydGluZyBhbnkgbmV3bHkgY3JlYXRlZCByb3dzIGludG8gdGhlIGNvbnRhaW5lciBhbmQgdGhlIHJlcXVlc3QncyBkYXRhIGxpc3QuCi0uUFAKLUlmIGEgcm93IGlzIGZvdW5kLCBpdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIHJlcXVlc3QncyBkYXRhIGxpc3QuIFRoZSBzdWItaGFuZGxlciBtYXkgcmV0cmlldmUgaXQgYnkgY2FsbGluZyBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7ICogTk9URSBOT1RFIE5PVEU6Ci0uUFAKLVRoaXMgaGVscGVyIGFuZCBpdCdzIEFQSSBhcmUgc3RpbGwgYmVpbmcgdGVzdGVkIGFuZCBhcmUgc3ViamVjdCB0byBjaGFuZ2UuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCogbmV0c25tcF9jb250YWluZXJfdGFibGVfY29udGFpbmVyX2V4dHJhY3QgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLXJldHJpZXZlIHRoZSBjb250YWluZXIgdXNlZCBieSB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMyMCBvZiBmaWxlIHRhYmxlX2NvbnRhaW5lci5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCAoXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYnJlZywgXGZCbmV0c25tcF9jb250YWluZXJcZlAgKiBjb250YWluZXIsIGNoYXIga2V5X3R5cGUpIgotLlBQCi1yZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9jb250YWluZXIgaGVscGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjU0IG9mIGZpbGUgdGFibGVfY29udGFpbmVyLmMuCi0uU1MgInZvaWQgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2luc2VydCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBcZkJuZXRzbm1wX2luZGV4XGZQICogcm93KSIKLS5QUAotaW5zZXJ0cyBhIG5ld2x5IGNyZWF0ZWQgdGFibGVfY29udGFpbmVyIGVudHJ5IGludG8gYSByZXF1ZXN0IGxpc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNTEgb2YgZmlsZSB0YWJsZV9jb250YWluZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9pbmRleFxmUCogbmV0c25tcF90YWJsZV9pbmRleF9maW5kX25leHRfcm93IChcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqIGMsIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICogdGJscmVxKSIKLS5QUAotZGVwcmVjYXRlZCwgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgb25seSBleHBlY3RlZCBpbXBhY3QgdG8gcmVtb3ZlOiBub25lCi0uSVAgIlwoYnUiIDIKLXVzZWQgYmV0d2VlbiBoZWxwZXJzLCBzaG91bGRuJ3QgaGF2ZSBiZWVuIHVzZWQgYnkgZW5kIHVzZXJzCi0uUFAKLS5QUAotcmVwbGFjZW1lbnQ6IG5vbmUKLS5JUCAiXChidSIgMgotbmV2ZXIgc2hvdWxkIGhhdmUgYmVlbiBhIHB1YmxpYyBtZXRob2QgaW4gdGhlIGZpcnN0IHBsYWNlIAotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDcyMSBvZiBmaWxlIHRhYmxlX2NvbnRhaW5lci5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMyBiL21hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzMjkwYi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9kYXRhLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLlRIICJ0YWJsZV9kYXRhIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfZGF0YSBcLSAKLS5QUAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdpdGggZGF0YW1hdHRlZCBzdG9yYWdlLiAgCi0KLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9kYXRhc2V0XGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklIZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2l0aCBhdXRvbWF0dGVkIHN0b3JhZ2UuIFxmUCIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhX2dlbmVyYXRlX2luZGV4X29pZFxmUCAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogXGZCbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YVxmUCAoY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGFibGUgZGF0YSBzZXQgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfcm93XGZQICh2b2lkKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0YWJsZSBkYXRhIHNldCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2Nsb25lX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJY2xvbmVzIGEgZGF0YSByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklkZWxldGVzIGEgcm93J3MgbWVtb3J5LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfYWRkX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJQWRkcyBhIHJvdyBvZiBkYXRhIHRvIGEgZ2l2ZW4gdGFibGUgKHN0b3JlZCBpbiBwcm9wZXIgbGV4b2dyYXBoaWNhbCBvcmRlcikuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcmVwbGFjZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpvcmlncm93LCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqbmV3cm93KSIKLS5icgotLlJJICJcZklzd2FwcyBvdXQgb3JpZ3JvdyB3aXRoIG5ld3Jvdy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZW1vdmVzIGEgcm93IG9mIGRhdGEgdG8gYSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyBpdCAobm8gZnJlZSdzIGNhbGxlZCkgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmVtb3ZlcyBhbmQgZnJlZXMgYSByb3cgb2YgZGF0YSB0byBhIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIHRoZSB2b2lkICogXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfY3JlYXRlX3RhYmxlXGZQIChjb25zdCBjaGFyICpuYW1lLCBsb25nIGZsYWdzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGVcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2NyZWF0ZV9yb3dcZlAgKHZvaWQgKmVudHJ5KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9kYXRhX2NvcHlfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqb2xkX3JvdywgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKm5ld19yb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcmVtb3ZlX2RlbGV0ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF90YWJsZV9kYXRhX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZXMgYSB0YWJsZV9kYXRhIGhhbmRsZXIgYW5kIHJldHVybnMgaXQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFibGVfaW5mbykiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXJzIGEgaGFuZGxlciBhcyBhIGRhdGEgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3RhYmxlX2RhdGFcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYmxlX2luZm8pIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVycyBhIGhhbmRsZXIgYXMgYSByZWFkLW9ubHkgZGF0YSB0YWJsZSBJZiB0YWJsZV9pbmZvICE9IE5VTEwsIGl0IHJlZ2lzdGVycyBpdCBhcyBhIG5vcm1hbCB0YWJsZSB0b28uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfZGF0YV9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogXGZCbmV0c25tcF9leHRyYWN0X3RhYmxlXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIHRhYmxlIGJlaW5nIGFjY2Vzc2VkIHBhc3NlZCBmcm9tIHRoZSB0YWJsZV9kYXRhIGhlbHBlciBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF9leHRyYWN0X3RhYmxlX3Jvd1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSByb3cgYmVpbmcgYWNjZXNzZWQgcGFzc2VkIGZyb20gdGhlIHRhYmxlX2RhdGEgaGVscGVyIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZXh0cmFjdF90YWJsZV9yb3dfZGF0YVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSBkYXRhIGZyb20gdGhlIHJvdyBiZWluZyBhY2Nlc3NlZCBwYXNzZWQgZnJvbSB0aGUgdGFibGVfZGF0YSBoZWxwZXIgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfaW5zZXJ0X3RhYmxlX3Jvd1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRhYmxlX2RhdGEgcm93IGludG8gYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfZGF0YV9idWlsZF9yZXN1bHRcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdywgaW50IGNvbHVtbiwgdV9jaGFyIHR5cGUsIHVfY2hhciAqcmVzdWx0X2RhdGEsIHNpemVfdCByZXN1bHRfZGF0YV9sZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2dldF9maXJzdF9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgdGhlIGZpcnN0IHJvdyBpbiB0aGUgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9nZXRfbmV4dF9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgdGhlIG5leHQgcm93IGluIHRoZSB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2dldFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLlJJICJcZklmaW5kcyB0aGUgZGF0YSBpbiAnZGF0YWxpc3QnIHN0b3JlZCBhdCAnaW5kZXhlcycgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9nZXRfZnJvbV9vaWRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIG9pZCAqc2VhcmNoZm9yLCBzaXplX3Qgc2VhcmNoZm9yX2xlbikiCi0uYnIKLS5SSSAiXGZJZmluZHMgdGhlIGRhdGEgaW4gJ2RhdGFsaXN0JyBzdG9yZWQgYXQgdGhlIHNlYXJjaGZvciBvaWQgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9kYXRhX251bV9yb3dzXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yb3dfZmlyc3RcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3Jvd19nZXRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3Jvd19uZXh0XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yb3dfZ2V0X2J5b2lkXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yb3dfbmV4dF9ieW9pZFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcm93X2dldF9ieWlkeFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yb3dfbmV4dF9ieWlkeFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9kYXRhX3Jvd19jb3VudFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9lbnRyeV9maXJzdFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9lbnRyeV9nZXRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfbmV4dFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9lbnRyeV9nZXRfYnlpZHhcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9lbnRyeV9uZXh0X2J5aWR4XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfZ2V0X2J5b2lkXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2VudHJ5X25leHRfYnlvaWRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdpdGggZGF0YW1hdHRlZCBzdG9yYWdlLiAKLQotVGhpcyBoZWxwZXIgaXMgb2Jzb2xldGUuIElmIHlvdSBhcmUgd3JpdGluZyBhIG5ldyBcZkJtb2R1bGVcZlAsIHBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgdGFibGVfdGRhdGEgaGVscGVyIGluc3RlYWQuCi0uUFAKLVRoaXMgaGVscGVyIGhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVyZSBhbGwgdGhlIGluZGV4ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHN0b3JlZCB3aXRoaW4gdGhlIGFnZW50IGl0c2VsZiBhbmQgbm90IGluIHNvbWUgZXh0ZXJuYWwgc3RvcmFnZSBsb2NhdGlvbi4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBsaXN0IG9mIHJvd3MsIHdoZXJlIGEgcm93IGNvbnNpc3RzIG9mIHRoZSBpbmRleGVzIHRvIHRoZSB0YWJsZSBhbmQgYSBnZW5lcmljIGRhdGEgcG9pbnRlci4gWW91IGNhbiB0aGVuIGltcGxlbWVudCBhIHN1YmhhbmRsZXIgd2hpY2ggaXMgcGFzc2VkIHRoZSBleGFjdCByb3cgZGVmaW5pdGlvbiBhbmQgZGF0YSBpdCBtdXN0IHJldHVybiBkYXRhIGZvciBvciBhY2NlcHQgZGF0YSBmb3IuIENvbXBsZXggR0VUTkVYVCBoYW5kbGluZyBpcyBncmVhdGx5IHNpbXBsaWZpZWQgaW4gdGhpcyBjYXNlLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQKiBuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhIChjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLWNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRhYmxlIGRhdGEgc2V0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTIgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhX3JvdyAodm9pZCkiCi0uUFAKLWNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRhYmxlIGRhdGEgc2V0IAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjIgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCogbmV0c25tcF9leHRyYWN0X3RhYmxlIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyB0aGUgdGFibGUgYmVpbmcgYWNjZXNzZWQgcGFzc2VkIGZyb20gdGhlIHRhYmxlX2RhdGEgaGVscGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjU2IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF9leHRyYWN0X3RhYmxlX3JvdyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgdGhlIHJvdyBiZWluZyBhY2Nlc3NlZCBwYXNzZWQgZnJvbSB0aGUgdGFibGVfZGF0YSBoZWxwZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NjQgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZXh0cmFjdF90YWJsZV9yb3dfZGF0YSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgdGhlIGRhdGEgZnJvbSB0aGUgcm93IGJlaW5nIGFjY2Vzc2VkIHBhc3NlZCBmcm9tIHRoZSB0YWJsZV9kYXRhIGhlbHBlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY3MyBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfdGFibGVfZGF0YV9oYW5kbGVyIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSkiCi0uUFAKLUNyZWF0ZXMgYSB0YWJsZV9kYXRhIGhhbmRsZXIgYW5kIHJldHVybnMgaXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzc4IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfaW5zZXJ0X3RhYmxlX3JvdyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRhYmxlX2RhdGEgcm93IGludG8gYSByZXF1ZXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjg1IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdGFibGVfZGF0YSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFibGVfaW5mbykiCi0uUFAKLXJlZ2lzdGVycyBhIGhhbmRsZXIgYXMgYSByZWFkLW9ubHkgZGF0YSB0YWJsZSBJZiB0YWJsZV9pbmZvICE9IE5VTEwsIGl0IHJlZ2lzdGVycyBpdCBhcyBhIG5vcm1hbCB0YWJsZSB0b28uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDEyIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJsZV9pbmZvKSIKLS5QUAotcmVnaXN0ZXJzIGEgaGFuZGxlciBhcyBhIGRhdGEgdGFibGUuIElmIHRhYmxlX2luZm8gIT0gTlVMTCwgaXQgcmVnaXN0ZXJzIGl0IGFzIGEgbm9ybWFsIHRhYmxlIHRvby4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MDEgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgImludCBuZXRzbm1wX3RhYmxlX2RhdGFfYWRkX3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotQWRkcyBhIHJvdyBvZiBkYXRhIHRvIGEgZ2l2ZW4gdGFibGUgKHN0b3JlZCBpbiBwcm9wZXIgbGV4b2dyYXBoaWNhbCBvcmRlcikuIHJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9uIHN1Y2Nlc3NmdWwgYWRkaXRpb24uIG9yIFNOTVBFUlJfR0VORVJSIG9uIGZhaWx1cmUgKEUuRy4sIGluZGV4ZXMgYWxyZWFkeSBleGlzdGVkKSAKLS5QUAoteHh4LXJrczogcmVtb3ZlIGludmFsaWQgcm93PyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzNCBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9jbG9uZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotY2xvbmVzIGEgZGF0YSByb3cuIERPRVMgTk9UIENMT05FIFRIRSBDT05UQUlORUQgREFUQS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3MCBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAidm9pZCogbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotZGVsZXRlcyBhIHJvdydzIG1lbW9yeS4gcmV0dXJucyB0aGUgdm9pZCBkYXRhIHRoYXQgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWxldGUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA1IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX2dldCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4ZXMpIgotLlBQCi1maW5kcyB0aGUgZGF0YSBpbiAnZGF0YWxpc3QnIHN0b3JlZCBhdCAnaW5kZXhlcycgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MTEgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfZ2V0X2ZpcnN0X3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUpIgotLlBQCi1yZXR1cm5zIHRoZSBmaXJzdCByb3cgaW4gdGhlIHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzkyIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX2dldF9mcm9tX29pZCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIG9pZCAqIHNlYXJjaGZvciwgc2l6ZV90IHNlYXJjaGZvcl9sZW4pIgotLlBQCi1maW5kcyB0aGUgZGF0YSBpbiAnZGF0YWxpc3QnIHN0b3JlZCBhdCB0aGUgc2VhcmNoZm9yIG9pZCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgyNSBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9nZXRfbmV4dF9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJldHVybnMgdGhlIG5leHQgcm93IGluIHRoZSB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgwMSBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAidm9pZCogbmV0c25tcF90YWJsZV9kYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotcmVtb3ZlcyBhbmQgZnJlZXMgYSByb3cgb2YgZGF0YSB0byBhIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIHRoZSB2b2lkICogcmV0dXJucyB0aGUgdm9pZCAqIGRhdGEgb24gc3VjY2Vzc2Z1bCBkZWxldGlvbi4gb3IgTlVMTCBvbiBmYWlsdXJlIChiYWQgYXJndW1lbnRzKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3NCBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZW1vdmVzIGEgcm93IG9mIGRhdGEgdG8gYSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyBpdCAobm8gZnJlZSdzIGNhbGxlZCkgcmV0dXJucyB0aGUgcm93IHBvaW50ZXIgaXRzZWxmIG9uIHN1Y2Nlc3NmdWwgcmVtb3ZpbmcuIG9yIE5VTEwgb24gZmFpbHVyZSAoYmFkIGFyZ3VtZW50cykgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDggb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF90YWJsZV9kYXRhX3JlcGxhY2Vfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBvcmlncm93LCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIG5ld3JvdykiCi0uUFAKLXN3YXBzIG91dCBvcmlncm93IHdpdGggbmV3cm93LiBUaGlzIGRvZXMgKm5vdCogZGVsZXRlL2ZyZWUgYW55dGhpbmchIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjMzIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMyBiL21hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEwMWMzYy4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLlRIICJ0YWJsZV9kYXRhc2V0IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfZGF0YXNldCBcLSAKLS5QUAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdpdGggYXV0b21hdHRlZCBzdG9yYWdlLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3RhYmxlX2RhdGFzZXRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiBcZkJuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhX3NldFxmUCAoY29uc3QgY2hhciAqdGFibGVfbmFtZSkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBzdHJ1Y3R1cmUgZ2l2ZW4gYSB0YWJsZV9kYXRhIGRlZmluaXRpb24uIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGVfc2V0KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfY2xvbmVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZkljbG9uZXMgYSBkYXRhc2V0IHJvdywgaW5jbHVkaW5nIGFsbCBkYXRhLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfZGF0YVxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICpkYXRhKSIKLS5icgotLlJJICJcZklkZWxldGVzIGEgc2luZ2xlIGRhdGFzZXQgdGFibGUgZGF0YS4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfYWxsX2RhdGFcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqZGF0YSkiCi0uYnIKLS5SSSAiXGZJZGVsZXRlcyBhbGwgdGhlIGRhdGEgZnJvbSB0aGlzIFxmQm5vZGVcZlAgYW5kIGJleW9uZCBpbiB0aGUgbGlua2VkIGxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklkZWxldGVzIGFsbCB0aGUgZGF0YSBmcm9tIHRoaXMgXGZCbm9kZVxmUCBhbmQgYmV5b25kIGluIHRoZSBsaW5rZWQgbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklhZGRzIGEgbmV3IHJvdyB0byBhIGRhdGFzZXQgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YXNldF9yZXBsYWNlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpvcmlncm93LCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqbmV3cm93KSIKLS5icgotLlJJICJcZklhZGRzIGEgbmV3IHJvdyB0byBhIGRhdGFzZXQgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YXNldF9yZW1vdmVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSB0YWJsZSwgYnV0IGRvZXNuJ3QgZGVsZXRlL2ZyZWUgdGhlIGNvbHVtbiB2YWx1ZXMgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YXNldF9yZW1vdmVfYW5kX2RlbGV0ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZW1vdmVzIGEgcm93IGZyb20gdGhlIHRhYmxlIGFuZCB0aGVuIGRlbGV0ZXMgaXQgKGFuZCBhbGwgaXRzIGRhdGEpIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2NyZWF0ZV9yb3dfZnJvbV9kZWZhdWx0c1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICpkZWZyb3cpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYSBuZXcgcm93IGZyb20gYW4gZXhpc3RpbmcgZGVmaW5lZCBkZWZhdWx0IHNldCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlX3NldCwgdW5zaWduZWQgaW50IGNvbHVtbiwgaW50IHR5cGUsIGludCB3cml0YWJsZSwgdm9pZCAqZGVmYXVsdF92YWx1ZSwgc2l6ZV90IGRlZmF1bHRfdmFsdWVfbGVuKSIKLS5icgotLlJJICJcZklhZGRzIGEgbmV3IGRlZmF1bHQgcm93IHRvIGEgdGFibGVfc2V0LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF90YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0c2V0LC4uLikiCi0uYnIKLS5SSSAiXGZJYWRkcyBtdWx0aXBsZSBkYXRhIGNvbHVtbiBkZWZpbml0aW9ucyB0byBlYWNoIHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfdGFibGVfZGF0YV9zZXRfaGFuZGxlclxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqZGF0YV9zZXQpIgotLmJyCi0uUkkgIlxmSUdpdmVuIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBkZWZpbml0aW9uLCBjcmVhdGUgYSBoYW5kbGVyIGZvciBpdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhX3NldFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqZGF0YV9zZXQsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYmxlX2luZm8pIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVyIGEgZ2l2ZW4gZGF0YV9zZXQgYXQgYSBnaXZlbiBvaWQgKHNwZWNpZmllZCBpbiB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyKS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXdyb3dfc3Rhc2hcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2NyZWF0ZV9uZXdyb3dzdGFzaFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqZGF0YXRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqdGFibGVfaW5mbykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiBcZkJuZXRzbm1wX2V4dHJhY3RfdGFibGVfZGF0YV9zZXRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgcG9pbnRlciBmcm9tIGEgZ2l2ZW4gcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqIFxmQm5ldHNubXBfZXh0cmFjdF90YWJsZV9kYXRhX3NldF9jb2x1bW5cZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCB1bnNpZ25lZCBpbnQgY29sdW1uKSIKLS5icgotLlJJICJcZklleHRyYWN0cyBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgcG9pbnRlciBmcm9tIGEgZ2l2ZW4gcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGVcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlX3NldCwgY2hhciAqcmVnaXN0cmF0aW9uX25hbWUpIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVycyBhIHRhYmxlX2RhdGFzZXQgc28gdGhhdCB0aGUgJ2FkZF9yb3cnIHNubXBkLmNvbmYgdG9rZW4gY2FuIGJlIHVzZWQgdG8gYWRkIGRhdGEgdG8gdGhpcyB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29uZmlnX3BhcnNlX3RhYmxlX3NldFxmUCAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb25maWdfcGFyc2VfYWRkX3Jvd1xmUCAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9nZXRfZmlyc3Rfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyB0aGUgZmlyc3Qgcm93IGluIHRoZSB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9nZXRfbmV4dF9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZXR1cm5zIHRoZSBuZXh0IHJvdyBpbiB0aGUgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9zZXRfbnVtX3Jvd3NcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2ZpbmRfY29sdW1uXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgY29sdW1uKSIKLS5icgotLlJJICJcZklGaW5kcyBhIGNvbHVtbiB3aXRoaW4gYSBnaXZlbiBzdG9yYWdlIHNldCwgZ2l2ZW4gdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdG9yYWdlIHNldCBsaXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX21hcmtfcm93X2NvbHVtbl93cml0YWJsZVxmUCAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdywgaW50IGNvbHVtbiwgaW50IHdyaXRhYmxlKSIKLS5icgotLlJJICJcZkltYXJrcyBhIGdpdmVuIGNvbHVtbiBpbiBhIHJvdyBhcyB3cml0YWJsZSBvciBub3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2V0X3Jvd19jb2x1bW5cZlAgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3csIHVuc2lnbmVkIGludCBjb2x1bW4sIGludCB0eXBlLCBjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbikiCi0uYnIKLS5SSSAiXGZJc2V0cyBhIGdpdmVuIGNvbHVtbiBpbiBhIHJvdyB3aXRoIGRhdGEgZ2l2ZW4gYSB0eXBlLCB2YWx1ZSwgYW5kIGxlbmd0aC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfaW5kZXhcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlLCB1X2NoYXIgdHlwZSkiCi0uYnIKLS5SSSAiXGZJYWRkcyBhbiBpbmRleCB0byB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3RhYmxlX3NldF9hZGRfaW5kZXhlc1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdHNldCwuLi4pIgotLmJyCi0uUkkgIlxmSWFkZHMgbXVsdGlwbGUgaW5kZXhlcyB0byBhIHRhYmxlX2RhdGFzZXQgaGVscGVyIG9iamVjdC4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGF1dG9tYXR0ZWQgc3RvcmFnZS4gCi0KLVRoaXMgaGFuZGxlciBoZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlcmUgYWxsIHRoZSBkYXRhIGlzIGV4cGVjdGVkIHRvIGJlIHN0b3JlZCB3aXRoaW4gdGhlIGFnZW50IGl0c2VsZiBhbmQgbm90IGluIHNvbWUgZXh0ZXJuYWwgc3RvcmFnZSBsb2NhdGlvbi4gSXQgaGFuZGxlcyBhbGwgTUlCIHJlcXVlc3RzIGluY2x1ZGluZyBHRVRzLCBHRVRORVhUcyBhbmQgU0VUcy4gSXQncyBwb3NzaWJsZSB0byBzaW1wbHkgY3JlYXRlIGEgdGFibGUgd2l0aG91dCBhY3R1YWxseSBldmVyIGRlZmluaW5nIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBTTk1QIHJlcXVlc3RzIGNvbWUgaW4uIFRvIHVzZSB0aGUgZGF0YSwgeW91IGNhbiBlaXRoZXIgYXR0YWNoIGEgc3ViLWhhbmRsZXIgdGhhdCBtZXJlbHkgdXNlcy9tYW5pcHVsYXRlcyB0aGUgZGF0YSBmdXJ0aGVyIHdoZW4gcmVxdWVzdHMgY29tZSBpbiwgb3IgeW91IGNhbiBsb29wIHRocm91Z2ggaXQgZXh0ZXJuYWxseSB3aGVuIGl0J3MgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIGhhbmRsZXIgaXMgbW9zdCB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgYSB0YWJsZSBpcyBob2xkaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3Igc29tZXRoaW5nIHdoaWNoIGdldHMgdHJpZ2dlcmVkIHZpYSBhbm90aGVyIGV2ZW50LgotLlBQCi1OT1RFIE5PVEUgTk9URTogVGhpcyBoZWxwZXIgaXNuJ3QgY29tcGxldGUgYW5kIGlzIGxpa2VseSB0byBjaGFuZ2Ugc29tZXdoYXQgb3ZlciB0aW1lLiBTcGVjaWZpY2FsbHksIHRoZSB3YXkgaXQgc3RvcmVzIGRhdGEgaW50ZXJuYWxseSBtYXkgY2hhbmdlIGRyYXN0aWNhbGx5LiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCogbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YV9zZXQgKGNvbnN0IGNoYXIgKiB0YWJsZV9uYW1lKSIKLS5QUAotQ3JlYXRlIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBzdHJ1Y3R1cmUgZ2l2ZW4gYSB0YWJsZV9kYXRhIGRlZmluaXRpb24uIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzcgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAqIG5ldHNubXBfZXh0cmFjdF90YWJsZV9kYXRhX3NldCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IHBvaW50ZXIgZnJvbSBhIGdpdmVuIHJlcXVlc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4Mzggb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCogbmV0c25tcF9leHRyYWN0X3RhYmxlX2RhdGFfc2V0X2NvbHVtbiAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCB1bnNpZ25lZCBpbnQgY29sdW1uKSIKLS5QUAotZXh0cmFjdHMgYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IHBvaW50ZXIgZnJvbSBhIGdpdmVuIHJlcXVlc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NDggb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3RhYmxlX2RhdGFfc2V0X2hhbmRsZXIgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiBkYXRhX3NldCkiCi0uUFAKLUdpdmVuIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBkZWZpbml0aW9uLCBjcmVhdGUgYSBoYW5kbGVyIGZvciBpdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNzIgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgImludCBuZXRzbm1wX21hcmtfcm93X2NvbHVtbl93cml0YWJsZSAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3csIGludCBjb2x1bW4sIGludCB3cml0YWJsZSkiCi0uUFAKLW1hcmtzIGEgZ2l2ZW4gY29sdW1uIGluIGEgcm93IGFzIHdyaXRhYmxlIG9yIG5vdC4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjE0IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJ2b2lkIG5ldHNubXBfcmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGVfc2V0LCBjaGFyICogcmVnaXN0cmF0aW9uX25hbWUpIgotLlBQCi1yZWdpc3RlcnMgYSB0YWJsZV9kYXRhc2V0IHNvIHRoYXQgdGhlICdhZGRfcm93JyBzbm1wZC5jb25mIHRva2VuIGNhbiBiZSB1c2VkIHRvIGFkZCBkYXRhIHRvIHRoaXMgdGFibGUuIElmIHJlZ2lzdHJhdGlvbl9uYW1lIGlzIE5VTEwgdGhlbiB0aGUgbmFtZSB1c2VkIHdoZW4gdGhlIHRhYmxlIHdhcyBjcmVhdGVkIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgotLlBQCi1cZkJUb2RvXGZQCi0uUlMgNAotY3JlYXRlIGEgcHJvcGVybHkgZnJlZSdpbmcgcmVnaXN0ZXJhdGlvbiBwb2ludGVyIGZvciB0aGUgZGF0YWxpc3QsIGFuZCBnZXQgdGhlIGRhdGFsaXN0IGZyZWVkIGF0IHNodXRkb3duLiAKLS5SRQotLlBQCi0KLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg3NSBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YV9zZXQgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogZGF0YV9zZXQsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJsZV9pbmZvKSIKLS5QUAotcmVnaXN0ZXIgYSBnaXZlbiBkYXRhX3NldCBhdCBhIGdpdmVuIG9pZCAoc3BlY2lmaWVkIGluIHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIpLiBUaGUgcmVnaW5mby0+aGFuZGxlci0+YWNjZXNzX21ldGhvZCAqbWF5KiBiZSBudWxsIGlmIHRoZSBjYWxsIGRvZXNuJ3QgZXZlciB3YW50IHRvIGJlIGNhbGxlZCBmb3IgU05NUCBvcGVyYXRpb25zLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM5OCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiaW50IG5ldHNubXBfc2V0X3Jvd19jb2x1bW4gKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93LCB1bnNpZ25lZCBpbnQgY29sdW1uLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqIHZhbHVlLCBzaXplX3QgdmFsdWVfbGVuKSIKLS5QUAotc2V0cyBhIGdpdmVuIGNvbHVtbiBpbiBhIHJvdyB3aXRoIGRhdGEgZ2l2ZW4gYSB0eXBlLCB2YWx1ZSwgYW5kIGxlbmd0aC4gRGF0YSBpcyBtZW1kdXAnZWQgYnkgdGhlIGZ1bmN0aW9uLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNDkgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2Nsb25lX3JvdyAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1jbG9uZXMgYSBkYXRhc2V0IHJvdywgaW5jbHVkaW5nIGFsbCBkYXRhLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwOCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfY3JlYXRlX3Jvd19mcm9tX2RlZmF1bHRzIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKiBkZWZyb3cpIgotLlBQCi1jcmVhdGVzIGEgbmV3IHJvdyBmcm9tIGFuIGV4aXN0aW5nIGRlZmluZWQgZGVmYXVsdCBzZXQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDIgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCogbmV0c25tcF90YWJsZV9kYXRhX3NldF9maW5kX2NvbHVtbiAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICogc3RhcnQsIHVuc2lnbmVkIGludCBjb2x1bW4pIgotLlBQCi1GaW5kcyBhIGNvbHVtbiB3aXRoaW4gYSBnaXZlbiBzdG9yYWdlIHNldCwgZ2l2ZW4gdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdG9yYWdlIHNldCBsaXN0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyMDIgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2dldF9maXJzdF9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZSkiCi0uUFAKLXJldHVybnMgdGhlIGZpcnN0IHJvdyBpbiB0aGUgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTcxIG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX3NldF9nZXRfbmV4dF9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZXR1cm5zIHRoZSBuZXh0IHJvdyBpbiB0aGUgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTc4IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJ2b2lkIG5ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfaW5kZXggKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZSwgdV9jaGFyIHR5cGUpIgotLlBQCi1hZGRzIGFuIGluZGV4IHRvIHRoZSB0YWJsZS4gQ2FsbCB0aGlzIHJlcGVhdGx5IGZvciBlYWNoIGluZGV4LiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzMDMgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1hZGRzIGEgbmV3IHJvdyB0byBhIGRhdGFzZXQgdGFibGUgCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODcgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9hbGxfZGF0YSAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICogZGF0YSkiCi0uUFAKLWRlbGV0ZXMgYWxsIHRoZSBkYXRhIGZyb20gdGhpcyBcZkJub2RlXGZQIGFuZCBiZXlvbmQgaW4gdGhlIGxpbmtlZCBsaXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTY0IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAqIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfZGF0YSAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICogZGF0YSkiCi0uUFAKLWRlbGV0ZXMgYSBzaW5nbGUgZGF0YXNldCB0YWJsZSBkYXRhLiByZXR1cm5zIHRoZSAocG9zc2libHkgc3RpbGwgZ29vZCkgbmV4dCBwb2ludGVyIG9mIHRoZSBkZWxldGVkIGRhdGEgb2JqZWN0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1MSBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX3JvdyAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1kZWxldGVzIGFsbCB0aGUgZGF0YSBmcm9tIHRoaXMgXGZCbm9kZVxmUCBhbmQgYmV5b25kIGluIHRoZSBsaW5rZWQgbGlzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE3NCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVtb3ZlX2FuZF9kZWxldGVfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSB0YWJsZSBhbmQgdGhlbiBkZWxldGVzIGl0IChhbmQgYWxsIGl0cyBkYXRhKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIxOSBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVtb3ZlX3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJlbW92ZXMgYSByb3cgZnJvbSB0aGUgdGFibGUsIGJ1dCBkb2Vzbid0IGRlbGV0ZS9mcmVlIHRoZSBjb2x1bW4gdmFsdWVzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjA4IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfdGFibGVfZGF0YXNldF9yZXBsYWNlX3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIG9yaWdyb3csIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogbmV3cm93KSIKLS5QUAotYWRkcyBhIG5ldyByb3cgdG8gYSBkYXRhc2V0IHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTk3IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJpbnQgbmV0c25tcF90YWJsZV9zZXRfYWRkX2RlZmF1bHRfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGVfc2V0LCB1bnNpZ25lZCBpbnQgY29sdW1uLCBpbnQgdHlwZSwgaW50IHdyaXRhYmxlLCB2b2lkICogZGVmYXVsdF92YWx1ZSwgc2l6ZV90IGRlZmF1bHRfdmFsdWVfbGVuKSIKLS5QUAotYWRkcyBhIG5ldyBkZWZhdWx0IHJvdyB0byBhIHRhYmxlX3NldC4gQXJndW1lbnRzIHNob3VsZCBiZSB0aGUgdGFibGVfc2V0LCBjb2x1bW4gbnVtYmVyLCBcZkJ2YXJpYWJsZVxmUCB0eXBlIGFuZCBmaW5hbGx5IGEgMSBpZiBpdCBpcyBhbGxvd2VkIHRvIGJlIHdyaXRhYmxlLCBvciBhIDAgaWYgbm90LiBJZiB0aGUgZGVmYXVsdF92YWx1ZSBmaWVsZCBpcyBub3QgTlVMTCwgaXQgd2lsbCBiZSB1c2VkIHRvIHBvcHVsYXRlIG5ldyB2YWx1c2UgaW4gdGhhdCBjb2x1bW4gZnJvIG5ld2x5IGNyZWF0ZWQgcm93cy4gSXQgaXMgY29waWVkIGludG8gdGhlIHN0b3JhZ2UgdGVtcGxhdGUgKGZyZWUgeW91ciBjYWxsaW5nIGFyZ3VtZW50KS4KLS5QUAotcmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl9GQUlMVVJFIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjY4IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJ2b2lkIG5ldHNubXBfdGFibGVfc2V0X2FkZF9pbmRleGVzIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdHNldCwgIC4uLikiCi0uUFAKLWFkZHMgbXVsdGlwbGUgaW5kZXhlcyB0byBhIHRhYmxlX2RhdGFzZXQgaGVscGVyIG9iamVjdC4gVG8gZW5kIHRoZSBsaXN0LCB1c2UgYSAwIGFmdGVyIHRoZSBsaXN0IG9mIEFTTiBpbmRleCB0eXBlcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzE0IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJ2b2lkIG5ldHNubXBfdGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRzZXQsICAuLi4pIgotLlBQCi1hZGRzIG11bHRpcGxlIGRhdGEgY29sdW1uIGRlZmluaXRpb25zIHRvIGVhY2ggcm93LiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBjYWxsaW5nIG5ldHNubXBfdGFibGVfc2V0X2FkZF9kZWZhdWx0X3JvdyByZXBlYXRlZGx5IGZvciB5b3UuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzI5IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMyBiL21hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViYzg5ZS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0uVEggImdlbmVyaWNfdGFibGVfQVBJIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotZ2VuZXJpY190YWJsZV9BUEkgXC0gCi0uUFAKLUdlbmVyYWwgcmVxdWlyZW1lbnRzIGZvciBhIHRhYmxlIGhlbHBlci4gIAotCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfbWFpbnRlbmFuY2VcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVJvdXRpbmVzIGZvciBtYWludGFpbmluZyB0aGUgY29udGVudHMgb2YgYSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJtaWJfbWFpbnRlbmFuY2VcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVJvdXRpbmVzIGZvciBtYWludGFpbmluZyBhIE1JQiB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9yb3dzXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklSb3V0aW5lcyBmb3Igd29ya2luZyB3aXRoIHRoZSByb3dzIG9mIGEgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfaW5kZXhlc1xmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUm91dGluZXMgZm9yIHdvcmtpbmcgd2l0aCByb3cgaW5kZXhlcy4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUdlbmVyYWwgcmVxdWlyZW1lbnRzIGZvciBhIHRhYmxlIGhlbHBlci4gCi0KLUEgZ2l2ZW4gdGFibGUgaGVscGVyIG5lZWQgbm90IGltcGxlbWVudCB0aGUgd2hvbGUgb2YgdGhpcyBBUEksIGFuZCBtYXkgbmVlZCB0byBhZGp1c3QgdGhlIHByb3RvdHlwZSBvZiBjZXJ0YWluIHJvdXRpbmVzLiBCdXQgdGhpcyBkZXNjcmlwdGlvbiBwcm92aWRlcyBhIHN1aXRhYmxlIHN0YW5kYXJkIGRlc2lnbiBmcmFtZXdvcmsuIAotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMyBiL21hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5NDY2Ny4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0uVEggInRhYmxlX2luZGV4ZXMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9pbmRleGVzIFwtIAotLlBQCi1Sb3V0aW5lcyBmb3Igd29ya2luZyB3aXRoIHJvdyBpbmRleGVzLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQm5ldHNubXBfZ2VuZXJpY19pZHhcZlAgKHZvaWQgKnRhYmxlKSIKLS5icgotLlJJICJcZklSZXRyaWV2ZSB0aGUgaW5kZXhpbmcgc3RydWN0dXJlIG9mIHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X2lkeFxmUCAodm9pZCAqcm93KSIKLS5icgotLlJJICJcZklSZXBvcnQgdGhlIGluZGV4IHZhbHVlcyBmb3IgYSByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfb2lkXGZQICh2b2lkICpyb3csIG9pZCAqaW5zdGFuY2VzKSIKLS5icgotLlJJICJcZklSZXBvcnQgdGhlIGluc3RhbmNlIE9JRHMgZm9yIGEgcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfY29tcGFyZV9pZHhcZlAgKHZvaWQgKnJvdywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleCkiCi0uYnIKLS5SSSAiXGZJQ29tcGFyZSBhIHJvdyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaW5kZXggdmFsdWVzLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfY29tcGFyZV9vaWRcZlAgKHZvaWQgKnJvdywgb2lkICppbnN0YW5jZXMsIHNpemVfdCBsZW4pIgotLmJyCi0uUkkgIlxmSUNvbXBhcmUgYSByb3cgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGluc3RhbmNlIE9JRHMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19jb21wYXJlX3N1YnRyZWVfaWR4XGZQICh2b2lkICpyb3csIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXgpIgotLmJyCi0uUkkgIlxmSUNoZWNrIGlmIGEgcm93IGxpZXMgd2l0aGluIGEgc3VidHJlZSBvZiBpbmRleCB2YWx1ZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19jb21wYXJlX3N1YnRyZWVfb2lkXGZQICh2b2lkICpyb3csIG9pZCAqaW5zdGFuY2VzLCBzaXplX3QgbGVuKSIKLS5icgotLlJJICJcZklDaGVjayBpZiBhIHJvdyBsaWVzIHdpdGhpbiBhIHN1YnRyZWUgb2YgaW5zdGFuY2UgT0lEcy4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVJvdXRpbmVzIGZvciB3b3JraW5nIHdpdGggcm93IGluZGV4ZXMuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX2NvbXBhcmVfaWR4ICh2b2lkICogcm93LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleCkiCi0uUFAKLUNvbXBhcmUgYSByb3cgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGluZGV4IHZhbHVlcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMjUgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfY29tcGFyZV9vaWQgKHZvaWQgKiByb3csIG9pZCAqIGluc3RhbmNlcywgc2l6ZV90IGxlbikiCi0uUFAKLUNvbXBhcmUgYSByb3cgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGluc3RhbmNlIE9JRHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzMxIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX2NvbXBhcmVfc3VidHJlZV9pZHggKHZvaWQgKiByb3csIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4KSIKLS5QUAotQ2hlY2sgaWYgYSByb3cgbGllcyB3aXRoaW4gYSBzdWJ0cmVlIG9mIGluZGV4IHZhbHVlcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMzcgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfY29tcGFyZV9zdWJ0cmVlX29pZCAodm9pZCAqIHJvdywgb2lkICogaW5zdGFuY2VzLCBzaXplX3QgbGVuKSIKLS5QUAotQ2hlY2sgaWYgYSByb3cgbGllcyB3aXRoaW4gYSBzdWJ0cmVlIG9mIGluc3RhbmNlIE9JRHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzQzIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAqIG5ldHNubXBfZ2VuZXJpY19pZHggKHZvaWQgKiB0YWJsZSkiCi0uUFAKLVJldHJpZXZlIHRoZSBpbmRleGluZyBzdHJ1Y3R1cmUgb2YgdGhlIHRhYmxlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMwNyBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQKiBuZXRzbm1wX2dlbmVyaWNfcm93X2lkeCAodm9pZCAqIHJvdykiCi0uUFAKLVJlcG9ydCB0aGUgaW5kZXggdmFsdWVzIGZvciBhIHJvdy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMTMgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInNpemVfdCBuZXRzbm1wX2dlbmVyaWNfcm93X29pZCAodm9pZCAqIHJvdywgb2lkICogaW5zdGFuY2VzKSIKLS5QUAotUmVwb3J0IHRoZSBpbnN0YW5jZSBPSURzIGZvciBhIHJvdy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMTkgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMyBiL21hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NjVhZWEuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMworKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0uVEggInRhYmxlX2l0ZXJhdG9yIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfaXRlcmF0b3IgXC0gCi0uUFAKLVRoZSB0YWJsZSBpdGVyYXRvciBoZWxwZXIgaXMgZGVzaWduZWQgdG8gc2ltcGxpZnkgdGhlIHRhc2sgb2Ygd3JpdGluZyBhIHRhYmxlIGhhbmRsZXIgZm9yIHRoZSBuZXQtc25tcCBhZ2VudCB3aGVuIHRoZSBkYXRhIGJlaW5nIGFjY2Vzc2VkIGlzIG5vdCBpbiBhbiBvaWQgc29ydGVkIGZvcm0gYW5kIG11c3QgYmUgYWNjZXNzZWQgZXh0ZXJuYWxseS4gIAotCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdGlfY2FjaGVfaW5mb19zXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCIKLS5icgotLlJJICJcZklIb2xkcyBpdGVyYXRvciBpbmZvcm1hdGlvbiBjb250YWluaW5nIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBpdGVyYXRvcl9oYW5kbGVyIHRvIGxvb3Agb3ZlciB5b3VyIGRhdGEgc2V0IGFuZCBzb3J0IGl0IGluIGEgU05NUCBzcGVjaWZpYyBtYW5uZXIuIFxmUCIKLS5pbiAtMWMKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlRJX1JFUVVFU1RfQ0FDSEVcZlAgICAndGlfY2FjaGUnIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCVEFCTEVfSVRFUkFUT1JfTk9UQUdBSU5cZlAgICAyNTUiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJUQUJMRV9JVEVSQVRPUl9OQU1FXGZQICAgJ3RhYmxlX2l0ZXJhdG9yJyIKLS5icgotLmluIC0xYwotLlNTICJUeXBlZGVmcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJ0aV9jYWNoZV9pbmZvX3NcZlAgXGZCdGlfY2FjaGVfaW5mb1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqKCBcZkJOZXRzbm1wX0ZpcnN0X0RhdGFfUG9pbnRcZlAgKSh2b2lkICoqbG9vcF9jb250ZXh0LCB2b2lkICoqZGF0YV9jb250ZXh0LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICooIFxmQk5ldHNubXBfTmV4dF9EYXRhX1BvaW50XGZQICkodm9pZCAqKmxvb3BfY29udGV4dCwgdm9pZCAqKmRhdGFfY29udGV4dCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHZvaWQgKiggXGZCTmV0c25tcF9NYWtlX0RhdGFfQ29udGV4dFxmUCApKHZvaWQgKmxvb3BfY29udGV4dCwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgdm9pZCggXGZCTmV0c25tcF9GcmVlX0xvb3BfQ29udGV4dFxmUCApKHZvaWQgKiwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgdm9pZCggXGZCTmV0c25tcF9GcmVlX0RhdGFfQ29udGV4dFxmUCApKHZvaWQgKiwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCIKLS5icgotLlJJICJcZklUeXBlZGVmcyB0aGUgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgc3RydWN0IGludG8gbmV0c25tcF9pdGVyYXRvcl9pbmZvLiBcZlAiCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2NyZWF0ZV90YWJsZVxmUCAoTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50ICpmaXJzdERQLCBOZXRzbm1wX05leHRfRGF0YV9Qb2ludCAqbmV4dERQLCBOZXRzbm1wX0ZpcnN0X0RhdGFfUG9pbnQgKmdldGlkeCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaXRlcmF0b3JfZGVsZXRlX3RhYmxlXGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3JfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3JcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0uUkkgIlxmSUNyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIHRhYmxlIGl0ZXJhdG9yIGhlbHBlciBoYW5kbGVyIGNhbGxpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlciB3aXRoIGEgaGFuZGxlciBuYW1lIHNldCB0byBUQUJMRV9JVEVSQVRPUl9OQU1FIGFuZCBhY2Nlc3MgbWV0aG9kLCBuZXRzbm1wX3RhYmxlX2l0ZXJhdG9yX2hlbHBlcl9oYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgKiBcZkJuZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSB0YWJsZV9pdGVyYXRvciBzcGVjaWZpYyBkYXRhIGZyb20gYSByZXF1ZXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9pbnNlcnRfaXRlcmF0b3JfY29udGV4dFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIHZvaWQgKmRhdGEpIgotLmJyCi0uUkkgIlxmSWluc2VydHMgdGFibGVfaXRlcmF0b3Igc3BlY2lmaWMgZGF0YSBmb3IgYSBuZXdseSBjcmVhdGVkIHJvdyBpbnRvIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2l0ZXJhdG9yX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfZmlyc3RcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19nZXRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIHZvaWQgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X25leHRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIHZvaWQgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2dldF9ieWlkeFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfbmV4dF9ieWlkeFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfZ2V0X2J5b2lkXGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfbmV4dF9ieW9pZFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2NvdW50XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9Ob2RlX0hhbmRsZXIgXGZCbmV0c25tcF90YWJsZV9pdGVyYXRvcl9oZWxwZXJfaGFuZGxlclxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSB0YWJsZSBpdGVyYXRvciBoZWxwZXIgaXMgZGVzaWduZWQgdG8gc2ltcGxpZnkgdGhlIHRhc2sgb2Ygd3JpdGluZyBhIHRhYmxlIGhhbmRsZXIgZm9yIHRoZSBuZXQtc25tcCBhZ2VudCB3aGVuIHRoZSBkYXRhIGJlaW5nIGFjY2Vzc2VkIGlzIG5vdCBpbiBhbiBvaWQgc29ydGVkIGZvcm0gYW5kIG11c3QgYmUgYWNjZXNzZWQgZXh0ZXJuYWxseS4gCi0KLUZ1bmN0aW9uYWxseSwgaXQgaXMgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBtb3JlIGdlbmVyaWMgdGFibGUgaGVscGVyIGJ1dCBlYXNpZXMgdGhlIGJ1cmRlbiBvZiBHRVRORVhUIHByb2Nlc3NpbmcgYnkgbWFudWFsbHkgbG9vcGluZyB0aHJvdWdoIGFsbCB0aGUgZGF0YSBpbmRleGVzIHJldHJpZXZlZCB0aHJvdWdoIGZ1bmN0aW9uIGNhbGxzIHdoaWNoIHNob3VsZCBiZSBzdXBwbGllZCBieSB0aGUgXGZCbW9kdWxlXGZQIHRoYXQgd2lzaGVzIGhlbHAuIFRoZSBcZkJtb2R1bGVcZlAgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBzIHNob3VsZCwgYWZ0ZXJ3YXJkcywgbmV2ZXIgYmUgY2FsbGVkIGZvciB0aGUgY2FzZSBvZiAnTU9ERV9HRVRORVhUJyBhbmQgb25seSBmb3IgdGhlIEdFVCBhbmQgU0VUIHJlbGF0ZWQgbW9kZXMgaW5zdGVhZC4KLS5QUAotVGhlIGZ1bmRhbWVudGFsIG5vdGlvbiBiZXR3ZWVuIHRoZSB0YWJsZSBpdGVyYXRvciBpcyB0aGF0IGl0IGFsbG93cyB5b3VyIGNvZGUgdG8gaXRlcmF0ZSBvdmVyIGVhY2ggJ3Jvdycgd2l0aGluIHlvdXIgZGF0YSBzdG9yYWdlIG1lY2hhbmlzbSwgd2l0aG91dCByZXF1aXJpbmcgdGhhdCBpdCBiZSBzb3J0ZWQgaW4gYSBTTk1QLWluZGV4LWNvbXBsaWFudCBtYW5uZXIuIFRocm91Z2ggdGhlIGdldF9maXJzdF9kYXRhX3BvaW50IGFuZCBnZXRfbmV4dF9kYXRhX3BvaW50IGhvb2tzLCB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyIHdpbGwgcmVwZWF0ZWRseSBjYWxsIHlvdXIgaG9va3MgdG8gZmluZCB0aGUgJ3Byb3Blcicgcm93IG9mIGRhdGEgdGhhdCBuZWVkcyBwcm9jZXNzaW5nLiBUaGUgZm9sbG93aW5nIGNvbmNlcHRzIGFyZSBpbXBvcnRhbnQ6Ci0uUFAKLS5JUCAiXChidSIgMgotQSBsb29wIGNvbnRleHQgaXMgYSBwb2ludGVyIHdoaWNoIGluZGljYXRlcyB3aGVyZSBpbiB0aGUgY3VycmVudCBwcm9jZXNzaW5nIG9mIGEgc2V0IG9mIHJvd3MgeW91IGN1cnJlbnRseSBhcmUuIEFsbG93cyB0aGUgZ2V0XypfZGF0YV9wb2ludCByb3V0aW5lcyB0byBtb3ZlIGZyb20gb25lIHJvdyB0byB0aGUgbmV4dCwgb25jZSB0aGUgaXRlcmF0b3IgaGFuZGxlciBoYXMgaWRlbnRpZmllZCB0aGUgYXBwcm9wcmlhdGUgcm93IGZvciB0aGlzIHJlcXVlc3QsIHRoZSBqb2Igb2YgdGhlIGxvb3AgY29udGV4dCBpcyBkb25lLiBUaGUgbW9zdCBzaW1wbGUgZXhhbXBsZSB3b3VsZCBiZSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB3aGljaCBzaW1wbHkgY291bnRzIHJvd3MgZnJvbSAxIHRvIFguIE1vcmUgY29tbW9ubHksIGl0IG1pZ2h0IGJlIGEgcG9pbnRlciB0byBhIGxpbmtlZCBsaXN0IFxmQm5vZGVcZlAsIG9yIHNvbWVvdGhlciBpbnRlcm5hbCBvciBleHRlcm5hbCByZWZlcmVuY2UgdG8gYSBkYXRhIHNldCAoZmlsZSBzZWVrIHZhbHVlLCBhcnJheSBwb2ludGVyLCAuLi4pLiBJZiBhbGxvY2F0ZWQgZHVyaW5nIGl0ZXJhdGlvbiwgZWl0aGVyIHRoZSBmcmVlX2xvb3BfY29udGV4dF9hdF9lbmQgKHByZWZlcmFibHkpIG9yIHRoZSBmcmVlX2xvb3BfY29udGV4dCBwb2ludGVycyBzaG91bGQgYmUgc2V0LgotLlBQCi0uUFAKLS5JUCAiXChidSIgMgotQSBkYXRhIGNvbnRleHQgaXMgc29tZXRoaW5nIHRoYXQgeW91ciBoYW5kbGVyIGNvZGUgY2FuIHVzZSBpbiBvcmRlciB0byByZXRyaWV2ZSB0aGUgcmVzdCBvZiB0aGUgZGF0YSBmb3IgdGhlIG5lZWRlZCByb3cuIFRoaXMgZGF0YSBjYW4gYmUgYWNjZXNzZWQgaW4geW91ciBoYW5kbGVyIHZpYSBuZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dCBhcGkgd2l0aCB0aGUgbmV0c25tcF9yZXF1ZXN0X2luZm8gc3RydWN0dXJlIHRoYXQncyBwYXNzZWQgaW4uIFRoZSBpbXBvcnRhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgbG9vcCBjb250ZXh0IGFuZCBhIGRhdGEgY29udGV4dCBpcyB0aGF0IG11bHRpcGxlIGRhdGEgY29udGV4dHMgY2FuIGJlIGtlcHQgYnkgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBlciwgd2hlcmUgYXMgb25seSBvbmUgbG9vcCBjb250ZXh0IHdpbGwgZXZlciBiZSBoZWxkIGJ5IHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIuIElmIGFsbG9jYXRlZCBkdXJpbmcgaXRlcmF0aW9uIHRoZSBmcmVlX2RhdGFfY29udGV4dCBwb2ludGVyIHNob3VsZCBiZSBzZXQgdG8gYW4gYXBwcm9wcmlhdGUgZnVuY3Rpb24uCi0uUFAKLS5QUAotVGhlIHRhYmxlIGl0ZXJhdG9yIG9wZXJhdGVzIGluIGEgc2VyaWVzIG9mIHN0ZXBzIHRoYXQgY2FsbCB5b3VyIGNvZGUgaG9va3MgZnJvbSB5b3VyIG5ldHNubXBfaXRlcmF0b3JfaW5mbyByZWdpc3RyYXRpb24gcG9pbnRlci4KLS5QUAotLklQICJcKGJ1IiAyCi10aGUgZ2V0X2ZpcnN0X2RhdGFfcG9pbnQgaG9vayBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBwcm9jZXNzaW5nLiBJdCBzaG91bGQgc2V0IHRoZSBcZkJ2YXJpYWJsZVxmUCBsaXN0IHRvIGEgbGlzdCBvZiBpbmRleGVzIGZvciB0aGUgZ2l2ZW4gdGFibGUuIEl0IHNob3VsZCBhbHNvIHNldCB0aGUgbG9vcF9jb250ZXh0IGFuZCBtYXliZSBhIGRhdGFfY29udGV4dCB3aGljaCB5b3Ugd2lsbCBnZXQgYSBwb2ludGVyIGJhY2sgdG8gd2hlbiBpdCBuZWVkcyB0byBjYWxsIHlvdXIgY29kZSB0byByZXRyaWV2ZSBhY3R1YWwgZGF0YSBsYXRlci4gVGhlIGxpc3Qgb2YgaW5kZXhlcyBzaG91bGQgYmUgcmV0dXJuZWQgYWZ0ZXIgYmVpbmcgdXBkYXRlLgotLlBQCi0uUFAKLS5JUCAiXChidSIgMgotdGhlIGdldF9uZXh0X2RhdGFfcG9pbnQgaG9vayBpcyB0aGVuIGNhbGxlZCByZXBlYXRlZGx5IGFuZCBpcyBwYXNzZWQgdGhlIGxvb3AgY29udGV4dCBhbmQgdGhlIGRhdGEgY29udGV4dCBmb3IgaXQgdG8gdXBkYXRlLiBUaGUgaW5kZXhlcywgbG9vcCBjb250ZXh0IGFuZCBkYXRhIGNvbnRleHQgc2hvdWxkIGFsbCBiZSB1cGRhdGVkIGlmIG1vcmUgZGF0YSBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSB0aGV5IHNob3VsZCBiZSBsZWZ0IGFsb25lIGFuZCBhIE5VTEwgc2hvdWxkIGJlIHJldHVybmVkLiBJZGVhbGx5LCBpdCBzaG91bGQgdXBkYXRlIHRoZSBsb29wIGNvbnRleHQgd2l0aG91dCB0aGUgbmVlZCB0byByZWFsbG9jYXRlIGl0LiBJZiByZWFsbG9jYXRpb24gaXMgbmVjZXNzYXJ5IGZvciBldmVyeSBpdGVyYXRpdmUgc3RlcCwgdGhlbiB0aGUgZnJlZV9sb29wX2NvbnRleHQgZnVuY3Rpb24gcG9pbnRlciBzaG91bGQgYmUgc2V0LiBJZiBub3QsIHRoZW4gdGhlIGZyZWVfbG9vcF9jb250ZXh0X2F0X2VuZCBwb2ludGVyIHNob3VsZCBiZSBzZXQsIHdoaWNoIGlzIG1vcmUgZWZmaWNpZW50IHNpbmNlIGEgbWFsbG9jL2ZyZWUgd2lsbCBvbmx5IGJlIHBlcmZvcm1lZCBvbmNlIGZvciBldmVyeSBpdGVyYXRpb24uIAotLlBQCi0KLS5TSCAiVHlwZWRlZiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQIgotLlBQCi1UeXBlZGVmcyB0aGUgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgc3RydWN0IGludG8gbmV0c25tcF9pdGVyYXRvcl9pbmZvLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidm9pZCAqIG5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyB0aGUgdGFibGVfaXRlcmF0b3Igc3BlY2lmaWMgZGF0YSBmcm9tIGEgcmVxdWVzdC4gVGhpcyBmdW5jdGlvbiBleHRyYWN0cyB0aGUgdGFibGUgaXRlcmF0b3Igc3BlY2lmaWMgZGF0YSBmcm9tIGEgbmV0c25tcF9yZXF1ZXN0X2luZm8gb2JqZWN0LiBDYWxscyBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YSB3aXRoIHJlcXVlc3QtPnBhcmVudF9kYXRhIHNldCB3aXRoIGRhdGEgZnJvbSBhIHJlcXVlc3QgdGhhdCB3YXMgYWRkZWQgcHJldmlvdXNseSBieSBhIFxmQm1vZHVsZVxmUCBhbmQgVEFCTEVfSVRFUkFUT1JfTkFNRSBoYW5kbGVyIG5hbWUuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxdWVzdFxmUCB0aGUgbmV0c25tcCByZXF1ZXN0IGluZm8gc3RydWN0dXJlCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1hIHZvaWQgcG9pbnRlcihyZXF1ZXN0LT5wYXJlbnRfZGF0YS0+ZGF0YSksIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkIGlmIHJlcXVlc3QgaXMgTlVMTCBvciByZXF1ZXN0LT5wYXJlbnRfZGF0YSBpcyBOVUxMIG9yIHJlcXVlc3QtPnBhcmVudF9kYXRhIG9iamVjdCBpcyBub3QgZm91bmQudGhlIG5ldCAKLS5SRQotLlBQCi0KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqIGlpbmZvKSIKLS5QUAotcmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyIAotLlNTICJ2b2lkIG5ldHNubXBfaW5zZXJ0X2l0ZXJhdG9yX2NvbnRleHQgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgdm9pZCAqIGRhdGEpIgotLlBQCi1pbnNlcnRzIHRhYmxlX2l0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZm9yIGEgbmV3bHkgY3JlYXRlZCByb3cgaW50byBhIHJlcXVlc3QgCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICogaWluZm8pIgotLlBQCi1DcmVhdGVzIGFuZCByZWdpc3RlcnMgYSB0YWJsZSBpdGVyYXRvciBoZWxwZXIgaGFuZGxlciBjYWxsaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIgd2l0aCBhIGhhbmRsZXIgbmFtZSBzZXQgdG8gVEFCTEVfSVRFUkFUT1JfTkFNRSBhbmQgYWNjZXNzIG1ldGhvZCwgbmV0c25tcF90YWJsZV9pdGVyYXRvcl9oZWxwZXJfaGFuZGxlci4gSWYgTk9UX1NFUklBTElaRUQgaXMgbm90IGRlZmluZWQgdGhlIGZ1bmN0aW9uIGluamVjdHMgdGhlIHNlcmlhbGl6ZSBoYW5kbGVyIGludG8gdGhlIGNhbGxpbmcgY2hhaW4gcHJpb3IgdG8gY2FsbGluZyBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlZ2luZm9cZlAgaXMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QKLS5icgotXGZJaWluZm9cZlAgaXMgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9pdGVyYXRvcl9pbmZvIHN0cnVjdAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotTUlCX1JFR0lTVEVSRURfT0sgaXMgcmV0dXJuZWQgaWYgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgYSBzdWNjZXNzLiBGYWlsdXJlcyBhcmUgTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQsIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLiBJZiBpaW5mbyBpcyBOVUxMLCBTTk1QRVJSX0dFTkVSUiBpcyByZXR1cm5lZC4gCi0uUkUKLS5QUAotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zIGIvbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzA2ZGI0Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMworKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0uVEggInRhYmxlX2l0ZXJhdG9yLmgiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9pdGVyYXRvci5oIFwtIAotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQIgotLmJyCi0uUkkgIlxmSUhvbGRzIGl0ZXJhdG9yIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIGl0ZXJhdG9yX2hhbmRsZXIgdG8gbG9vcCBvdmVyIHlvdXIgZGF0YSBzZXQgYW5kIHNvcnQgaXQgaW4gYSBTTk1QIHNwZWNpZmljIG1hbm5lci4gXGZQIgotLmluIC0xYwotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTkVUU05NUF9JVEVSQVRPUl9GTEFHX1NPUlRFRFxmUCAgIDB4MDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJUQUJMRV9JVEVSQVRPUl9OQU1FXGZQICAgJ3RhYmxlX2l0ZXJhdG9yJyIKLS5icgotLmluIC0xYwotLlNTICJUeXBlZGVmcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ0eXBlZGVmIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqKCBcZkJOZXRzbm1wX0ZpcnN0X0RhdGFfUG9pbnRcZlAgKSh2b2lkICoqbG9vcF9jb250ZXh0LCB2b2lkICoqZGF0YV9jb250ZXh0LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICooIFxmQk5ldHNubXBfTmV4dF9EYXRhX1BvaW50XGZQICkodm9pZCAqKmxvb3BfY29udGV4dCwgdm9pZCAqKmRhdGFfY29udGV4dCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHZvaWQgKiggXGZCTmV0c25tcF9NYWtlX0RhdGFfQ29udGV4dFxmUCApKHZvaWQgKmxvb3BfY29udGV4dCwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgdm9pZCggXGZCTmV0c25tcF9GcmVlX0xvb3BfQ29udGV4dFxmUCApKHZvaWQgKiwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgdm9pZCggXGZCTmV0c25tcF9GcmVlX0RhdGFfQ29udGV4dFxmUCApKHZvaWQgKiwgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQICopIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCIKLS5icgotLlJJICJcZklUeXBlZGVmcyB0aGUgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgc3RydWN0IGludG8gbmV0c25tcF9pdGVyYXRvcl9pbmZvLiBcZlAiCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3JfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3JcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0uUkkgIlxmSUNyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIHRhYmxlIGl0ZXJhdG9yIGhlbHBlciBoYW5kbGVyIGNhbGxpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlciB3aXRoIGEgaGFuZGxlciBuYW1lIHNldCB0byBUQUJMRV9JVEVSQVRPUl9OQU1FIGFuZCBhY2Nlc3MgbWV0aG9kLCBuZXRzbm1wX3RhYmxlX2l0ZXJhdG9yX2hlbHBlcl9oYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pdGVyYXRvcl9kZWxldGVfdGFibGVcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgKiBcZkJuZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSB0YWJsZV9pdGVyYXRvciBzcGVjaWZpYyBkYXRhIGZyb20gYSByZXF1ZXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9pbnNlcnRfaXRlcmF0b3JfY29udGV4dFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIHZvaWQgKmRhdGEpIgotLmJyCi0uUkkgIlxmSWluc2VydHMgdGFibGVfaXRlcmF0b3Igc3BlY2lmaWMgZGF0YSBmb3IgYSBuZXdseSBjcmVhdGVkIHJvdyBpbnRvIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19maXJzdFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2dldFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgdm9pZCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfbmV4dFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgdm9pZCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfZ2V0X2J5aWR4XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19uZXh0X2J5aWR4XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19nZXRfYnlvaWRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19uZXh0X2J5b2lkXGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfY291bnRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJOZXRzbm1wX05vZGVfSGFuZGxlciBcZkJuZXRzbm1wX3RhYmxlX2l0ZXJhdG9yX2hlbHBlcl9oYW5kbGVyXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotCi0uUFAKLURlZmluaXRpb24gaW4gZmlsZSBcZkJ0YWJsZV9pdGVyYXRvci5oXGZQLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMgYi9tYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDQ2M2FmLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLlRIICJ0YWJsZV9tYWludGVuYW5jZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX21haW50ZW5hbmNlIFwtIAotLlBQCi1Sb3V0aW5lcyBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGEgdGFibGUuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19jcmVhdGVfdGFibGVcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncykiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlIGEgc3RydWN0dXJlIHRvIHJlcHJlc2VudCB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2dlbmVyaWNfZGVsZXRlX3RhYmxlXGZQICh2b2lkICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJUmVsZWFzZSB0aGUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfY3JlYXRlX3Jvd1xmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlIGEgbmV3IHJvdyBzdHJ1Y3R1cmUgc3VpdGFibGUgZm9yIHRoaXMgc3R5bGUgb2YgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19jbG9uZV9yb3dcZlAgKHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlIGEgbmV3IGNvcHkgb2YgdGhlIHNwZWNpZmllZCByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19jb3B5X3Jvd1xmUCAodm9pZCAqZHN0X3Jvdywgdm9pZCAqc3JjX3JvdykiCi0uYnIKLS5SSSAiXGZJQ29weSB0aGUgY29udGVudHMgb2Ygb25lIHJvdyBpbnRvIGFub3RoZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2dlbmVyaWNfZGVsZXRlX3Jvd1xmUCAodm9pZCAqcm93KSIKLS5icgotLlJJICJcZklEZWxldGUgYSByb3cgZGF0YSBzdHJ1Y3R1cmUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19hZGRfcm93XGZQICh2b2lkICp0YWJsZSwgdm9pZCAqcm93KSIKLS5icgotLlJJICJcZklBZGQgYSByb3cgdG8gdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfcmVwbGFjZV9yb3dcZlAgKHZvaWQgKnRhYmxlLCB2b2lkICpvbGRfcm93LCB2b2lkICpuZXdfcm93KSIKLS5icgotLlJJICJcZklSZXBsYWNlIG9uZSByb3cgd2l0aCBhbm90aGVyIGluIHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX3JlbW92ZV9yb3dcZlAgKHZvaWQgKnRhYmxlLCB2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSVJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZ2VuZXJpY19yZW1vdmVfZGVsZXRlX3Jvd1xmUCAodm9pZCAqdGFibGUsIHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJUmVtb3ZlIGFuZCBkZWxldGUgYSByb3cgZnJvbSB0aGUgdGFibGUuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Sb3V0aW5lcyBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGEgdGFibGUuIAotCi1UaGlzIHdvdWxkIHR5cGljYWxseSBiZSBwYXJ0IG9mIGltcGxlbWVudGluZyBhbiBTTk1QIE1JQiwgYnV0IGNvdWxkIHBvdGVudGlhbGx5IGFsc28gYmUgdXNlZCBmb3IgYSBzdGFuZGFsb25lIHRhYmxlLgotLlBQCi1UaGlzIHNlY3Rpb24gb2YgdGhlIGdlbmVyaWMgQVBJIGlzIHByaW1hcmlseSByZWxldmFudCB0byB0YWJsZSBoZWxwZXJzIHdoZXJlIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFibGUgaXMgY29uc3RydWN0ZWQgYW5kIG1haW50YWluZWQgd2l0aGluIHRoZSBoZWxwZXIgaXRzZWxmLiAnRXh0ZXJuYWwnIHRhYmxlcyB3aWxsIHR5cGljYWxseSBsb29rIGFmdGVyIHN1Y2ggYXNwZWN0cyBkaXJlY3RseSwgYWx0aG91Z2ggdGhpcyBzZWN0aW9uIG9mIHRoZSBhYnN0cmFjdCBBUEkgZnJhbWV3b3JrIGNvdWxkIGFsc28gaGVscCBkaXJlY3QgdGhlIGRlc2lnbiBvZiBzdWNoIHRhYmxlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfYWRkX3JvdyAodm9pZCAqIHRhYmxlLCB2b2lkICogcm93KSIKLS5QUAotQWRkIGEgcm93IHRvIHRoZSB0YWJsZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDQgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19jbG9uZV9yb3cgKHZvaWQgKiByb3cpIgotLlBQCi1DcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgc3BlY2lmaWVkIHJvdy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MiBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19jb3B5X3JvdyAodm9pZCAqIGRzdF9yb3csIHZvaWQgKiBzcmNfcm93KSIKLS5QUAotQ29weSB0aGUgY29udGVudHMgb2Ygb25lIHJvdyBpbnRvIGFub3RoZXIuIFRoZSBkZXN0aW5hdGlvbiByb3cgc3RydWN0dXJlIHNob3VsZCBiZSBjcmVhdGVkIGJlZm9yZSB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkwIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfY3JlYXRlX3JvdyAodm9pZCkiCi0uUFAKLUNyZWF0ZSBhIG5ldyByb3cgc3RydWN0dXJlIHN1aXRhYmxlIGZvciB0aGlzIHN0eWxlIG9mIHRhYmxlLiBOb3RlIHRoYXQgdGhpcyB3b3VsZCB0eXBpY2FsbHkgYmUgYSAnc3RhbmRhbG9uZScgcm93LCBhbmQgd291bGQgbm90IGF1dG9tYXRpY2FsbHkgYmUgaW5zZXJ0ZWQgaW50byBhbiBhY3R1YWwgdGFibGUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzYgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19jcmVhdGVfdGFibGUgKGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgZmxhZ3MpIgotLlBQCi1DcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IHRoZSB0YWJsZS4gVGhpcyBjb3VsZCBiZSBhcyBzaW1wbGUgYXMgdGhlIGhlYWQgb2YgYSBsaW5rZWQgbGlzdCwgb3IgYSBtb3JlIGNvbXBsZXggY29udGFpbmVyIHN0cnVjdHVyZS4gVGhlICduYW1lJyBmaWVsZCB3b3VsZCB0eXBpY2FsbHkgYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHNldmVyYWwgdGFibGVzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBzYW1lIHRhYmxlIGhlbHBlci4gVGhlICdmbGFncycgZmllbGQgd291bGQgYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgKGhlbHBlci1zcGVjaWZpYykgYXNwZWN0cyBvZiB0YWJsZSBiZWhhdmlvdXIuCi0uUFAKLVRoZSB0YWJsZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgc2hvdWxkIHR5cGljYWxseSBiZSByZWdhcmRlZCBhcyBhbiBvcGFxdWUsIHByaXZhdGUgc3RydWN0dXJlLiBBbGwgb3BlcmF0aW9ucyBvbiB0aGUgY29udGVudCBvZiB0aGUgdGFibGUgc2hvdWxkIGlkZWFsbHkgdXNlIHRoZSBhcHByb3ByaWF0ZSByb3V0aW5lcyBmcm9tIHRoaXMgQVBJLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYwIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkIG5ldHNubXBfZ2VuZXJpY19kZWxldGVfcm93ICh2b2lkICogcm93KSIKLS5QUAotRGVsZXRlIGEgcm93IGRhdGEgc3RydWN0dXJlLiBUaGUgcm93IHNob3VsZCBiZSByZW1vdmVkIGZyb20gYW55IHJlbGV2YW50IHRhYmxlKHMpIGJlZm9yZSB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk4IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkIG5ldHNubXBfZ2VuZXJpY19kZWxldGVfdGFibGUgKHZvaWQgKiB0YWJsZSkiCi0uUFAKLVJlbGVhc2UgdGhlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSB0YWJsZS4gQW55IHJvd3Mgc3RpbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgdGFibGUgc2hvdWxkIGFsc28gYmUgcmVtb3ZlZCBhbmQgZGVsZXRlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2OCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2dlbmVyaWNfcmVtb3ZlX2RlbGV0ZV9yb3cgKHZvaWQgKiB0YWJsZSwgdm9pZCAqIHJvdykiCi0uUFAKLVJlbW92ZSBhbmQgZGVsZXRlIGEgcm93IGZyb20gdGhlIHRhYmxlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNyBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX3JlbW92ZV9yb3cgKHZvaWQgKiB0YWJsZSwgdm9pZCAqIHJvdykiCi0uUFAKLVJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZS4gVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgcm93IHNob3VsZCBub3QgYmUgcmVsZWFzZWQsIGFuZCB3b3VsZCBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgcm91dGluZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjEgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfcmVwbGFjZV9yb3cgKHZvaWQgKiB0YWJsZSwgdm9pZCAqIG9sZF9yb3csIHZvaWQgKiBuZXdfcm93KSIKLS5QUAotUmVwbGFjZSBvbmUgcm93IHdpdGggYW5vdGhlciBpbiB0aGUgdGFibGUuIFRoaXMgd2lsbCB0eXBpY2FsbHkgKGJ1dCBub3QgbmVjZXNzYXJpbHkpIGludm9sdmUgdHdvIHJvd3Mgc2hhcmluZyB0aGUgc2FtZSBpbmRleCBpbmZvcm1hdGlvbiAoZS5nLiB0byBpbXBsZW1lbnQgdXBkYXRlL3Jlc3RvcmUtc3R5bGUgU0VUIGJlaGF2aW91cikuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTEzIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMyBiL21hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YzN2IyZC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9yb3dzLjMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0uVEggInRhYmxlX3Jvd3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9yb3dzIFwtIAotLlBQCi1Sb3V0aW5lcyBmb3Igd29ya2luZyB3aXRoIHRoZSByb3dzIG9mIGEgdGFibGUuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfZmlyc3RcZlAgKHZvaWQgKnRhYmxlKSIKLS5icgotLlJJICJcZklSZXRyaWV2ZSB0aGUgZmlyc3Qgcm93IG9mIHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX3Jvd19nZXRcZlAgKHZvaWQgKnRhYmxlLCB2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlIHRoZSBnaXZlbiByb3cgZnJvbSB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfbmV4dFxmUCAodm9pZCAqdGFibGUsIHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmUgdGhlIGZvbGxvd2luZyByb3cgZnJvbSB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfZ2V0X2J5aWR4XGZQICh2b2lkICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLlJJICJcZklSZXRyaWV2ZSB0aGUgcm93IHdpdGggdGhlIHNwZWNpZmllZCBpbmRleCB2YWx1ZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfbmV4dF9ieWlkeFxmUCAodm9pZCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmUgdGhlIG5leHQgcm93IGFmdGVyIHRoZSBzcGVjaWZpZWQgaW5kZXggdmFsdWVzLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X2dldF9ieW9pZFxmUCAodm9pZCAqdGFibGUsIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlIHRoZSByb3cgd2l0aCB0aGUgc3BlY2lmaWVkIGluc3RhbmNlIE9JRHMuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfbmV4dF9ieW9pZFxmUCAodm9pZCAqdGFibGUsIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlIHRoZSBuZXh0IHJvdyBhZnRlciB0aGUgc3BlY2lmaWVkIGluc3RhbmNlIE9JRHMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfY291bnRcZlAgKHZvaWQgKnRhYmxlKSIKLS5icgotLlJJICJcZklSZXBvcnQgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVJvdXRpbmVzIGZvciB3b3JraW5nIHdpdGggdGhlIHJvd3Mgb2YgYSB0YWJsZS4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfcm93X2NvdW50ICh2b2lkICogdGFibGUpIgotLlBQCi1SZXBvcnQgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODIgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19yb3dfZmlyc3QgKHZvaWQgKiB0YWJsZSkiCi0uUFAKLVJldHJpZXZlIHRoZSBmaXJzdCByb3cgb2YgdGhlIHRhYmxlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyOCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX3Jvd19nZXQgKHZvaWQgKiB0YWJsZSwgdm9pZCAqIHJvdykiCi0uUFAKLVJldHJpZXZlIHRoZSBnaXZlbiByb3cgZnJvbSB0aGUgdGFibGUuIFRoaXMgY291bGQgZWl0aGVyIGJlIHRoZSBzYW1lIGRhdGEgcG9pbnRlciwgcGFzc2VkIGluLCBvciBhIHNlcGFyYXRlIHJvdyBzdHJ1Y3R1cmUgc2hhcmluZyB0aGUgc2FtZSBpbmRleCB2YWx1ZXMgKG9yIE5VTEwpLgotLlBQCi1UaGlzIHJvdXRpbmUgYWxzbyBwcm92aWRlcyBhIG1lYW5zIHRvIHRlbGwgd2hldGhlciBhIGdpdmVuIHJvdyBpcyBwcmVzZW50IGluIHRoZSB0YWJsZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDAgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19yb3dfZ2V0X2J5aWR4ICh2b2lkICogdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4ZXMpIgotLlBQCi1SZXRyaWV2ZSB0aGUgcm93IHdpdGggdGhlIHNwZWNpZmllZCBpbmRleCB2YWx1ZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjU1IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfcm93X2dldF9ieW9pZCAodm9pZCAqIHRhYmxlLCBvaWQgKiBpbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uUFAKLVJldHJpZXZlIHRoZSByb3cgd2l0aCB0aGUgc3BlY2lmaWVkIGluc3RhbmNlIE9JRHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjcwIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfcm93X25leHQgKHZvaWQgKiB0YWJsZSwgdm9pZCAqIHJvdykiCi0uUFAKLVJldHJpZXZlIHRoZSBmb2xsb3dpbmcgcm93IGZyb20gdGhlIHRhYmxlLiBJZiB0aGUgc3BlY2lmaWVkIHJvdyBpcyBub3QgcHJlc2VudCwgdGhpcyByb3V0aW5lIHNob3VsZCByZXR1cm4gdGhlIGVudHJ5IG5leHQgYWZ0ZXIgdGhlIHBvc2l0aW9uIHRoaXMgcm93IHdvdWxkIGhhdmUgb2NjdXBpZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQ5IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfcm93X25leHRfYnlpZHggKHZvaWQgKiB0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXhlcykiCi0uUFAKLVJldHJpZXZlIHRoZSBuZXh0IHJvdyBhZnRlciB0aGUgc3BlY2lmaWVkIGluZGV4IHZhbHVlcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNjIgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19yb3dfbmV4dF9ieW9pZCAodm9pZCAqIHRhYmxlLCBvaWQgKiBpbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uUFAKLVJldHJpZXZlIHRoZSBuZXh0IHJvdyBhZnRlciB0aGUgc3BlY2lmaWVkIGluc3RhbmNlIE9JRHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjc2IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RkYXRhLjMgYi9tYW4vbmV0c25tcF90ZGF0YS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmJkNmEyLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RkYXRhLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotLlRIICJ0ZGF0YSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRkYXRhIFwtIAotLlBQCi1JbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGRhdGFtYXR0ZWQgc3RvcmFnZS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQl9uZXRzbm1wX3RkYXRhX2dlbmVyYXRlX2luZGV4X29pZFxmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YVxmUCAqIFxmQm5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlXGZQIChjb25zdCBjaGFyICpuYW1lLCBsb25nIGZsYWdzKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGFuZCByZXR1cm5zIGEgJ3RkYXRhJyB0YWJsZSBkYXRhIHN0cnVjdHVyZSBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF90ZGF0YV9kZWxldGVfdGFibGVcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGFuZCByZXR1cm5zIGEgJ3RkYXRhJyB0YWJsZSBkYXRhIHN0cnVjdHVyZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9jcmVhdGVfcm93XGZQICh2b2lkKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBuZXcgcm93IGRhdGEgc3RydWN0dXJlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX2Nsb25lX3Jvd1xmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJY2xvbmVzIGEgJ3RkYXRhJyByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGRhdGFfY29weV9yb3dcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpkc3Rfcm93LCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqc3JjX3JvdykiCi0uYnIKLS5SSSAiXGZJY29weSB0aGUgY29udGVudHMgb2YgYSAndGRhdGEnIHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90ZGF0YV9kZWxldGVfcm93XGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklkZWxldGVzIHRoZSBtZW1vcnkgdXNlZCBieSB0aGUgc3BlY2lmaWVkIHJvdyByZXR1cm5zIHRoZSB0YWJsZS1zcGVjaWZpYyBlbnRyeSBkYXRhICh0aGF0IGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVsZXRlKSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RkYXRhX2FkZF9yb3dcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklBZGRzIGEgcm93IHRvIHRoZSBnaXZlbiB0YWJsZSAoc3RvcmVkIGluIHByb3BlciBsZXhvZ3JhcGhpY2FsIG9yZGVyKS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfdGRhdGFfcmVwbGFjZV9yb3dcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqb3JpZ3JvdywgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKm5ld3JvdykiCi0uYnIKLS5SSSAiXGZJc3dhcHMgb3V0IG9yaWdyb3cgd2l0aCBuZXdyb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX3JlbW92ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZW1vdmVzIGEgcm93IGZyb20gdGhlIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIGl0IChubyBmcmVlJ3MgY2FsbGVkKSBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3Jvd1xmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJlbW92ZXMgYW5kIGZyZWVzIGEgcm93IG9mIHRoZSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyB0aGUgdGFibGUtc3BlY2lmaWMgZW50cnkgZGF0YSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF90ZGF0YV9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlcyBhIHRkYXRhIGhhbmRsZXIgYW5kIHJldHVybnMgaXQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQl9uZXRzbm1wX3RkYXRhX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90ZGF0YV9yZWdpc3RlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYmxlX2luZm8pIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVycyBhIHRkYXRhLWJhc2VkIE1JQiB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGVcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgdGRhdGEgdGFibGUgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqIFxmQm5ldHNubXBfdGRhdGFfZXh0cmFjdF9jb250YWluZXJcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgdGRhdGEgY29udGFpbmVyIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIHRkYXRhIHJvdyBiZWluZyBhY2Nlc3NlZCBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnlcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgKHRhYmxlLXNwZWNpZmljKSBlbnRyeSBiZWluZyBhY2Nlc3NlZCBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9pbnNlcnRfdGRhdGFfcm93XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJaW5zZXJ0cyBhIG5ld2x5IGNyZWF0ZWQgdGRhdGEgcm93IGludG8gYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGRhdGFfcm93X2VudHJ5XGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZXR1cm5zIHRoZSAodGFibGUtc3BlY2lmaWMpIGVudHJ5IGRhdGEgZm9yIGEgZ2l2ZW4gcm93IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX3Jvd19maXJzdFxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgdGhlIGZpcnN0IHJvdyBpbiB0aGUgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfcm93X2dldFxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWZpbmRzIGEgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIGFub3RoZXIgcm93IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX3Jvd19uZXh0XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX3Jvd19nZXRfYnlpZHhcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0uUkkgIlxmSWZpbmRzIGEgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIHRoZSBpbmRleCB2YWx1ZXMgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfcm93X2dldF9ieW9pZFxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIG9pZCAqc2VhcmNoZm9yLCBzaXplX3Qgc2VhcmNoZm9yX2xlbikiCi0uYnIKLS5SSSAiXGZJZmluZHMgYSByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gdGhlIGluZGV4IE9JRCBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9yb3dfbmV4dF9ieWlkeFxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS5SSSAiXGZJZmluZHMgdGhlIGxleGljYWxseSBuZXh0IHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiB0aGUgaW5kZXggdmFsdWVzIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX3Jvd19uZXh0X2J5b2lkXGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgb2lkICpzZWFyY2hmb3IsIHNpemVfdCBzZWFyY2hmb3JfbGVuKSIKLS5icgotLlJJICJcZklmaW5kcyB0aGUgbGV4aWNhbGx5IG5leHQgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIHRoZSBpbmRleCBPSUQgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90ZGF0YV9yb3dfY291bnRcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90ZGF0YV9jb21wYXJlX2lkeFxmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLlJJICJcZkljb21wYXJlIGEgcm93IHdpdGggdGhlIGdpdmVuIGluZGV4IHZhbHVlcyBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RkYXRhX2NvbXBhcmVfb2lkXGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93LCBvaWQgKmNvbXBhcmV0bywgc2l6ZV90IGNvbXBhcmV0b19sZW4pIgotLmJyCi0uUkkgIlxmSWNvbXBhcmUgYSByb3cgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggT0lEIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGRhdGFfY29tcGFyZV9zdWJ0cmVlX2lkeFxmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90ZGF0YV9jb21wYXJlX3N1YnRyZWVfb2lkXGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93LCBvaWQgKmNvbXBhcmV0bywgc2l6ZV90IGNvbXBhcmV0b19sZW4pIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJOZXRzbm1wX05vZGVfSGFuZGxlciBcZkJfbmV0c25tcF90ZGF0YV9oZWxwZXJfaGFuZGxlclxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUltcGxlbWVudCBhIHRhYmxlIHdpdGggZGF0YW1hdHRlZCBzdG9yYWdlLiAKLQotVGhpcyBoZWxwZXIgaGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZXJlIGFsbCB0aGUgcm93cyBhcmUgZXhwZWN0ZWQgdG8gYmUgc3RvcmVkIHdpdGhpbiB0aGUgYWdlbnQgaXRzZWxmIGFuZCBub3QgaW4gc29tZSBleHRlcm5hbCBzdG9yYWdlIGxvY2F0aW9uLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhIGxpc3Qgb2Ygcm93cywgd2hlcmUgYSByb3cgY29uc2lzdHMgb2YgdGhlIGluZGV4ZXMgdG8gdGhlIHRhYmxlIGFuZCBhIGdlbmVyaWMgZGF0YSBwb2ludGVyLiBZb3UgY2FuIHRoZW4gaW1wbGVtZW50IGEgc3ViaGFuZGxlciB3aGljaCBpcyBwYXNzZWQgdGhlIGV4YWN0IHJvdyBkZWZpbml0aW9uIGFuZCBkYXRhIGl0IG11c3QgcmV0dXJuIGRhdGEgZm9yIG9yIGFjY2VwdCBkYXRhIGZvci4gQ29tcGxleCBHRVRORVhUIGhhbmRsaW5nIGlzIGdyZWF0bHkgc2ltcGxpZmllZCBpbiB0aGlzIGNhc2UuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF90ZGF0YV9oYW5kbGVyIChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUpIgotLlBQCi1DcmVhdGVzIGEgdGRhdGEgaGFuZGxlciBhbmQgcmV0dXJucyBpdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODQgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfaW5zZXJ0X3RkYXRhX3JvdyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRkYXRhIHJvdyBpbnRvIGEgcmVxdWVzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM5OSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgImludCBuZXRzbm1wX3RkYXRhX2FkZF9yb3cgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1BZGRzIGEgcm93IHRvIHRoZSBnaXZlbiB0YWJsZSAoc3RvcmVkIGluIHByb3BlciBsZXhvZ3JhcGhpY2FsIG9yZGVyKS4gcmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb24gc3VjY2Vzc2Z1bCBhZGRpdGlvbi4gb3IgU05NUEVSUl9HRU5FUlIgb24gZmFpbHVyZSAoRS5HLiwgaW5kZXhlcyBhbHJlYWR5IGV4aXN0ZWQpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTg2IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfY2xvbmVfcm93IChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWNsb25lcyBhICd0ZGF0YScgcm93LiBET0VTIE5PVCBDTE9ORSBUSEUgVEFCTEUtU1BFQ0lGSUMgRU5UUlkgREFUQS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MiBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgImludCBuZXRzbm1wX3RkYXRhX2NvbXBhcmVfaWR4IChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXhlcykiCi0uUFAKLWNvbXBhcmUgYSByb3cgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggdmFsdWVzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTE4IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiaW50IG5ldHNubXBfdGRhdGFfY29tcGFyZV9vaWQgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93LCBvaWQgKiBjb21wYXJldG8sIHNpemVfdCBjb21wYXJldG9fbGVuKSIKLS5QUAotY29tcGFyZSBhIHJvdyB3aXRoIHRoZSBnaXZlbiBpbmRleCBPSUQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MzEgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJpbnQgbmV0c25tcF90ZGF0YV9jb3B5X3JvdyAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBkc3Rfcm93LCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHNyY19yb3cpIgotLlBQCi1jb3B5IHRoZSBjb250ZW50cyBvZiBhICd0ZGF0YScgcm93LiBET0VTIE5PVCBDT1BZIFRIRSBUQUJMRS1TUEVDSUZJQyBFTlRSWSBEQVRBLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyOSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX2NyZWF0ZV9yb3cgKHZvaWQpIgotLlBQCi1jcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBuZXcgcm93IGRhdGEgc3RydWN0dXJlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODQgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhXGZQKiBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSAoY29uc3QgY2hhciAqIG5hbWUsIGxvbmcgZmxhZ3MpIgotLlBQCi1jcmVhdGVzIGFuZCByZXR1cm5zIGEgJ3RkYXRhJyB0YWJsZSBkYXRhIHN0cnVjdHVyZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAidm9pZCogbmV0c25tcF90ZGF0YV9kZWxldGVfcm93IChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWRlbGV0ZXMgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZSBzcGVjaWZpZWQgcm93IHJldHVybnMgdGhlIHRhYmxlLXNwZWNpZmljIGVudHJ5IGRhdGEgKHRoYXQgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWxldGUpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU3IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZSAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlKSIKLS5QUAotY3JlYXRlcyBhbmQgcmV0dXJucyBhICd0ZGF0YScgdGFibGUgZGF0YSBzdHJ1Y3R1cmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2OCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfY29udGFpbmVyXGZQKiBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfY29udGFpbmVyIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyB0aGUgdGRhdGEgY29udGFpbmVyIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzcwIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAidm9pZCogbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyB0aGUgKHRhYmxlLXNwZWNpZmljKSBlbnRyeSBiZWluZyBhY2Nlc3NlZCBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM4NyBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyB0aGUgdGRhdGEgcm93IGJlaW5nIGFjY2Vzc2VkIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzc5IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YVxmUCogbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1leHRyYWN0cyB0aGUgdGRhdGEgdGFibGUgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNjIgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJpbnQgbmV0c25tcF90ZGF0YV9yZWdpc3RlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYmxlX2luZm8pIgotLlBQCi1yZWdpc3RlcnMgYSB0ZGF0YS1iYXNlZCBNSUIgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNTEgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3JvdyAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJlbW92ZXMgYW5kIGZyZWVzIGEgcm93IG9mIHRoZSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyB0aGUgdGFibGUtc3BlY2lmaWMgZW50cnkgZGF0YSByZXR1cm5zIHRoZSB2b2lkICogcG9pbnRlciBvbiBzdWNjZXNzZnVsIGRlbGV0aW9uLiBvciBOVUxMIG9uIGZhaWx1cmUgKGJhZCBhcmd1bWVudHMpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjYwIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfcmVtb3ZlX3JvdyAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJlbW92ZXMgYSByb3cgZnJvbSB0aGUgZ2l2ZW4gdGFibGUgYW5kIHJldHVybnMgaXQgKG5vIGZyZWUncyBjYWxsZWQpIHJldHVybnMgdGhlIHJvdyBwb2ludGVyIGl0c2VsZiBvbiBzdWNjZXNzZnVsIHJlbW92aW5nLiBvciBOVUxMIG9uIGZhaWx1cmUgKGJhZCBhcmd1bWVudHMpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQyIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3RkYXRhX3JlcGxhY2Vfcm93IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogb3JpZ3JvdywgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBuZXdyb3cpIgotLlBQCi1zd2FwcyBvdXQgb3JpZ3JvdyB3aXRoIG5ld3Jvdy4gVGhpcyBkb2VzICpub3QqIGRlbGV0ZS9mcmVlIGFueXRoaW5nISAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyNyBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfdGRhdGFfcm93X2VudHJ5IChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJldHVybnMgdGhlICh0YWJsZS1zcGVjaWZpYykgZW50cnkgZGF0YSBmb3IgYSBnaXZlbiByb3cgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MTQgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9yb3dfZmlyc3QgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSkiCi0uUFAKLXJldHVybnMgdGhlIGZpcnN0IHJvdyBpbiB0aGUgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MjQgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9yb3dfZ2V0IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotZmluZHMgYSByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gYW5vdGhlciByb3cgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MzEgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9yb3dfZ2V0X2J5aWR4IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4ZXMpIgotLlBQCi1maW5kcyBhIHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiB0aGUgaW5kZXggdmFsdWVzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDQ3IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfcm93X2dldF9ieW9pZCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBvaWQgKiBzZWFyY2hmb3IsIHNpemVfdCBzZWFyY2hmb3JfbGVuKSIKLS5QUAotZmluZHMgYSByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gdGhlIGluZGV4IE9JRCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ2MCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX3Jvd19uZXh0IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotcmV0dXJucyB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDM5IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfcm93X25leHRfYnlpZHggKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXhlcykiCi0uUFAKLWZpbmRzIHRoZSBsZXhpY2FsbHkgbmV4dCByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gdGhlIGluZGV4IHZhbHVlcyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ3NSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX3Jvd19uZXh0X2J5b2lkIChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIG9pZCAqIHNlYXJjaGZvciwgc2l6ZV90IHNlYXJjaGZvcl9sZW4pIgotLlBQCi1maW5kcyB0aGUgbGV4aWNhbGx5IG5leHQgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIHRoZSBpbmRleCBPSUQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0ODkgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmIGIvbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0ZWI2ZAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmCkBAIC0wLDAgKzEsNTggQEAKKy5USCBORVRTTk1QX1RSQVBfQVBJIDMgIjEzIEF1ZyAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK3NlbmRfZWFzeV90cmFwLAorc2VuZF90cmFwX3ZhcnMsCitzZW5kX3YydHJhcCAtIHNlbmQgVFJBUHMgb3IgSU5GT1JNcyBmcm9tIGEgTmV0LVNOTVAgTUlCIG1vZHVsZQorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oPgorLlBQCisuQkkgInZvaWQgc2VuZF9lYXN5X3RyYXAoaW50ICIgdHJhcCAiLCBpbnQgIiBzcGVjaWZpYyAiKTsiCisuUFAKKy5CSSAidm9pZCBzZW5kX3RyYXBfdmFycyhpbnQgIiB0cmFwICIsIGludCAiIHNwZWNpZmljICIsIHN0cnVjdCB2YXJpYWJsZV9saXN0ICoiIHZhcnMgIik7IgorLlBQCisuQkkgInZvaWQgc2VuZF92MnRyYXAoc3RydWN0IHZhcmlhYmxlX2xpc3QgKiIgdmFycyAiKTsiCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHRocmVlIHJvdXRpbmVzIG1heSBiZSB1c2VkIHRvIHNlbmQgdHJhcHMgZnJvbSBhIE1JQiBtb2R1bGUKK3dpdGhpbiB0aGUgTmV0LVNOTVAgYWdlbnQgKGluY2x1ZGluZyBhbiBBZ2VudFggc3ViYWdlbnQpLgorLlBQCisuQiBzZW5kX2Vhc3lfdHJhcCgpCitzZW5kcyBhbiBTTk1QdjEgdHJhcCAob3IgdGhlIFNOTVB2MiBlcXVpdmFsZW50KSB0byB0aGUgbGlzdCBvZgorY29uZmlndXJlZCB0cmFwIGRlc3RpbmF0aW9ucyAob3IgInNpbmtzIiksIHVzaW5nIHRoZSBwcm92aWRlZCB2YWx1ZXMKK2ZvciB0aGUgZ2VuZXJpYyB0cmFwIHR5cGUsIGFuZCBzcGVjaWZpYyB0cmFwIHZhbHVlLgorLlBQCisuQiBzZW5kX3RyYXBfdmFycygpCitpcyBzaW1pbGFyLCBidXQgYXBwZW5kcyB0aGUgc3VwcGxpZWQgbGlzdCBvZiB2YXJpYWJsZSBiaW5kaW5ncyB0byB0aGUKK3RyYXBzIHRoYXQgYXJlIHNlbnQuCisuUFAKKy5CIHNlbmRfdjJ0cmFwKCkKK3VzZXMgdGhlIHN1cHBsaWVkIGxpc3Qgb2YgdmFyaWFibGUgYmluZGluZ3MgdG8gZm9ybSBhbiBTTk1QdjIgdHJhcCwKK3doaWNoIGlzIHNlbnQgdG8gU05NUHYyLWNhcGFibGUgc2lua3Mgb24gdGhlIGNvbmZpZ3VyZWQgbGlzdC4gIEFuCitlcXVpdmFsZW50IElORk9STSBpcyBzZW50IHRvIHRoZSBjb25maWd1cmVkcSBsaXN0IG9mIGluZm9ybSBzaW5rcy4KK1NpbmtzIHRoYXQgY2FuIG9ubHkgaGFuZGxlIFNOTVB2MSB0cmFwcyBhcmUgc2tpcHBlZC4KKy5QUAorVGhlIHZhcmlvdXMgInNlbmRfdHJhcCgpIiBjYWxscyBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0cmFwcyBpbiBkaWZmZXJlbnQKK2Zvcm1hdHMuICBBbmQgdGhlIHZhcmlvdXMgInRyYXBzaW5rIiBkaXJlY3RpdmVzIGFsbG93IHlvdSB0byBzcGVjaWZ5CitkZXN0aW5hdGlvbnMgdG8gcmVjZWl2ZSBkaWZmZXJlbnQgZm9ybWF0cy4KK0J1dCAqYWxsKiB0cmFwcyBhcmUgc2VudCB0byAqYWxsKiBkZXN0aW5hdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkKK3dlcmUgc3BlY2lmaWVkLgorLm5mCitJLmUuIGl0J3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fICB0cmFwc2luaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICBzZW5kX2Vhc3lfdHJhcCBcX19fICBbICBUcmFwICAgICAgXSBfX19fICB0cmFwMnNpbmsKKyAgICAgICAgICAgICAgICAgICAgX19fICBbIEdlbmVyYXRvciAgXQorICAgIHNlbmRfdjJ0cmFwICAgIC8gICAgIFsgICAgICAgICAgICBdIC0tLS0tIGluZm9ybXNpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXBzZXNzCisKKypOb3QqCisgICAgIHNlbmRfZWFzeV90cmFwICAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgdHJhcHNpbmsKKyAgICAgc2VuZF92MnRyYXAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0+ICB0cmFwMnNpbmsKKyAgICAgPz8/PyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0+ICBpbmZvcm1zaW5rCisgICAgID8/Pz8gICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgdHJhcHNlc3MKKy5maQorLlNIIFdBUk5JTkdTCitUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBzZW5kIHRoZSB0cmFwcyBpbW1lZGlhdGVseSB0aGV5IGFyZSBjYWxsZWQuCitJbnZva2luZyB0aGVtIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lIGlzIGxlZnQgdG8gdGhlIE1JQiBtb2R1bGUgcHJvZ3JhbW1lci4KKy5TSCAiU0VFIEFMU08iCisuQlIgc25tcGQuY29uZiAiKDUpLCAiIHNubXB0cmFwZCAiKDgpIgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdXRpbC4zIGIvbWFuL25ldHNubXBfdXRpbC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDQ2ZDkwLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3V0aWwuMworKysgL2Rldi9udWxsCkBAIC0xLDUwMyArMCwwIEBACi0uVEggIk1lbW9yeSBVdGlsaXR5IFJvdXRpbmVzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotTWVtb3J5IFV0aWxpdHkgUm91dGluZXMgXC0gCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BWFBBVEhcZlAgICBQQVRIX01BWCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFYQlVGXGZQICAgKDEwMjQgKiA0KSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFYQlVGX01FRElVTVxmUCAgIDEwMjQiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BWEJVRl9TTUFMTFxmUCAgIDUxMiIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFYQlVGX01FU1NBR0VcZlAgICAxNTAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQVhPSURcZlAgICA2NCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFYX0NNRExJTkVfT0lEU1xmUCAgIDEyOCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfRklMRU1PREVfQ0xPU0VEXGZQICAgMDYwMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfRklMRU1PREVfT1BFTlxmUCAgIDA2NDQiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJCWVRFU0laRVxmUChiaXRzaXplKSAgICgoYml0c2l6ZSArIDcpID4+IDMpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCUk9VTkRVUDhcZlAoeCkgICAoICggKHgrNykgPj4gMyApICogOCApIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9TVFJPUk5VTExcZlAoeCkgICAoIHggPyB4IDogJyhudWxsKScpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9GUkVFXGZQKHMpICAgZG8geyBpZiAocykgeyBmcmVlKCh2b2lkICopcyk7IHM9TlVMTDsgfSB9IHdoaWxlKDApIgotLmJyCi0uUkkgIlxmSUZyZWVzIGEgcG9pbnRlciBvbmx5IGlmIGl0IGlzICFOVUxMIGFuZCBzZXRzIGl0cyB2YWx1ZSB0byBOVUxMLiBcZlAiCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9TV0lQRV9NRU1cZlAobiwgcykgICBkbyB7IGlmIChuKSBmcmVlKCh2b2lkICopbik7IG4gPSBzOyBzPU5VTEw7IH0gd2hpbGUoMCkiCi0uYnIKLS5SSSAiXGZJRnJlZXMgcG9pbnRlciBuIG9ubHkgaWYgaXQgaXMgIU5VTEwsIHNldHMgbiB0byBzIGFuZCBzZXRzIHMgdG8gTlVMTC4gXGZQIgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFMTE9DX1NUUlVDVFxmUChzKSAgIChzdHJ1Y3QgcyAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzKSkiCi0uYnIKLS5SSSAiXGZJTWFsbG9jcyBtZW1vcnkgb2Ygc2l6ZW9mKHN0cnVjdCBzKSwgemVyb3MgaXQgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGl0LiBcZlAiCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQUxMT0NfVFlQRURFRlxmUCh0ZCkgICAodGQgKikgY2FsbG9jKDEsIHNpemVvZih0ZCkpIgotLmJyCi0uUkkgIlxmSU1hbGxvY3MgbWVtb3J5IG9mIHNpemVvZih0KSwgemVyb3MgaXQgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGl0LiBcZlAiCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9aRVJPXGZQKHMsIGwpICAgZG8geyBpZiAocykgbWVtc2V0KHMsIDAsIGwpOyB9IHdoaWxlKDApIgotLmJyCi0uUkkgIlxmSVplcm9zIGwgYnl0ZXMgb2YgbWVtb3J5IHN0YXJ0aW5nIGF0IHMuIFxmUCIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJUT1VQUEVSXGZQKGMpICAgKGMgPj0gJ2EnICYmIGMgPD0gJ3onID8gYyAtICgnYScgLSAnQScpIDogYykiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJUT0xPV0VSXGZQKGMpICAgKGMgPj0gJ0EnICYmIGMgPD0gJ1onID8gYyArICgnYScgLSAnQScpIDogYykiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIRVgyVkFMXGZQKHMpICAgKChpc2FscGhhKHMpID8gKFRPTE9XRVIocyktJ2EnKzEwKSA6IChUT0xPV0VSKHMpLScwJykpICYgMHhmKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlZBTDJIRVhcZlAocykgICAoIChzKSArICgoKHMpID49IDEwKSA/ICgnYSctMTApIDogJzAnKSApIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQVhcZlAoYSwgYikgICAoKGEpID4gKGIpID8gKGEpIDogKGIpKSIKLS5icgotLlJJICJcZklDb21wdXRlcnMgdGhlIG1heGltdW0gb2YgYSBhbmQgYi4gXGZQIgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUlOXGZQKGEsIGIpICAgKChhKSA+IChiKSA/IChiKSA6IChhKSkiCi0uYnIKLS5SSSAiXGZJQ29tcHV0ZXJzIHRoZSBtaW5pbXVtIG9mIGEgYW5kIGIuIFxmUCIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BQ1JPX1ZBTF9UT19TVFJcZlAocykgICBTTk1QX01BQ1JPX1ZBTF9UT19TVFJfUFJJVihzKSIKLS5icgotLlJJICJcZklFeHBhbmRzIHRvIHN0cmluZyB3aXRoIHZhbHVlIG9mIHRoZSBzLiBcZlAiCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQUNST19WQUxfVE9fU1RSX1BSSVZcZlAocykgICAjcyIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlFVSVRGVU5cZlAoZSwgbCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJESUZGVElNRVZBTFxmUChub3csIHRoZW4sIGRpZmYpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNXGZQICAgMTAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJJU1RSQU5TRk9STVxmUCh0dHlwZSwgdG9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJFTkdJTkVUSU1FX01BWFxmUCAgIDIxNDc0ODM2NDciCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJFTkdJTkVCT09UX01BWFxmUCAgIDIxNDc0ODM2NDciCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJzbm1wX2NzdHJjYXRcZlAoYiwgbCwgbywgYSwgcykgICBzbm1wX3N0cmNhdChiLGwsbyxhLChjb25zdCB1X2NoYXIgKilzKSIKLS5icgotLmluIC0xYwotLlNTICJUeXBlZGVmcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHZvaWQgKiBcZkJtYXJrZXJfdFxmUCIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfcmVhbGxvY1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4pIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBwb2ludGVkIGF0IGJ5ICpidWYsIHdoaWNoIGlzIGluaXRpYWxseSBvZiBzaXplICpidWZfbGVuLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZnJlZV96ZXJvXGZQICh2b2lkICpidWYsIHNpemVfdCBzaXplKSIKLS5icgotLlJJICJcZkl6ZXJvcyBtZW1vcnkgYmVmb3JlIGZyZWVpbmcgaXQuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCbWFsbG9jX3JhbmRvbVxmUCAoc2l6ZV90ICpzaXplKSIKLS5icgotLlJJICJcZklSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhZWQgJiBzZXQgYnVmZmVyIG9uIHN1Y2Nlc3MsIHNpemUgY29udGFpbnMgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyBmaWxsZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCbWFsbG9jX3plcm9cZlAgKHNpemVfdCBzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbWVtZHVwXGZQICh1X2NoYXIgKip0bywgY29uc3QgdV9jaGFyICpmcm9tLCBzaXplX3Qgc2l6ZSkiCi0uYnIKLS5SSSAiXGZJRHVwbGljYXRlcyBhIG1lbW9yeSBibG9jay4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2ludCBcZkJiaW5hcnlfdG9faGV4XGZQIChjb25zdCB1X2NoYXIgKmlucHV0LCBzaXplX3QgbGVuLCBjaGFyICoqb3V0cHV0KSIKLS5icgotLlJJICJcZkljb252ZXJ0cyBiaW5hcnkgdG8gaGV4aWRlY2ltYWwgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9oZXhfdG9fYmluYXJ5XGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBjaGFyICpoZXgsIGNvbnN0IGNoYXIgKmRlbGltKSIKLS5icgotLlJJICJcZkljb252ZXJ0IGFuIEFTQ0lJIGhleCBzdHJpbmcgKHdpdGggc3BlY2lmaWVkIGRlbGltaXRlcnMpIHRvIGJpbmFyeSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2hleF90b19iaW5hcnlcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IGNoYXIgKmhleCkiCi0uYnIKLS5SSSAiXGZJY29udmVydCBhbiBBU0NJSSBoZXggc3RyaW5nIHRvIGJpbmFyeSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJoZXhfdG9fYmluYXJ5MlxmUCAoY29uc3QgdV9jaGFyICppbnB1dCwgc2l6ZV90IGxlbiwgY2hhciAqKm91dHB1dCkiCi0uYnIKLS5SSSAiXGZJaGV4X3RvX2JpbmFyeTIgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9kZWNpbWFsX3RvX2JpbmFyeVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IGNoYXIgKmRlY2ltYWwpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3N0cmNhdFxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IHVfY2hhciAqcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQm5ldHNubXBfc3RyZHVwX2FuZF9udWxsXGZQIChjb25zdCB1X2NoYXIgKmZyb20sIHNpemVfdCBmcm9tX2xlbikiCi0uYnIKLS5SSSAiXGZJY29waWVzIGEgKHBvc3NpYmxlKSB1bnRlcm1pbmF0ZWQgc3RyaW5nIG9mIGEgZ2l2ZW4gbGVuZ3RoIGludG8gYSBuZXcgYnVmZmVyIGFuZCBudWxsIHRlcm1pbmF0ZXMgaXQgYXMgd2VsbCAobmV3IGJ1ZmZlciBNQVkgYmUgb25lIGJ5dGUgbG9uZ2VyIHRvIGFjY291bnQgZm9yIHRoaXMgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmR1bXBfY2h1bmtcZlAgKGNvbnN0IGNoYXIgKmRlYnVndG9rZW4sIGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IHNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJkdW1wX3NubXBFbmdpbmVJRFxmUCAoY29uc3QgdV9jaGFyICpidWYsIHNpemVfdCAqYnVmbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJtYXJrZXJfdCBcZkJhdGltZV9uZXdNYXJrZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZSBhIG5ldyB0aW1lIG1hcmtlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmF0aW1lX3NldE1hcmtlclxmUCAobWFya2VyX3QgcG0pIgotLmJyCi0uUkkgIlxmSXNldCBhIHRpbWUgbWFya2VyLiBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCYXRpbWVfZGlmZlxmUCAobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkiCi0uYnIKLS5SSSAiXGZJUmV0dXJucyB0aGUgZGlmZmVyZW5jZSAoaW4gbXNlYykgYmV0d2VlbiB0aGUgdHdvIG1hcmtlcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9sb25nIFxmQnVhdGltZV9kaWZmXGZQIChtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKSIKLS5icgotLlJJICJcZklSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIChpbiB1X2xvbmcgbXNlYykgYmV0d2VlbiB0aGUgdHdvIG1hcmtlcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9sb25nIFxmQnVhdGltZV9oZGlmZlxmUCAobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkiCi0uYnIKLS5SSSAiXGZJUmV0dXJucyB0aGUgZGlmZmVyZW5jZSAoaW4gdV9sb25nIDEvMTAwdGggc2VjcykgYmV0d2VlbiB0aGUgdHdvIG1hcmtlcnMgKGZ1bmN0aW9uYWxseSB0aGlzIGlzIHdoYXQgc3lzVXBUaW1lIG5lZWRzKS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXRpbWVfcmVhZHlcZlAgKG1hcmtlcl90IHBtLCBpbnQgZGVsdGFUKSIKLS5icgotLlJJICJcZklUZXN0OiBIYXMgKG1hcmtlZCB0aW1lIHBsdXMgZGVsdGEpIGV4Y2VlZGVkIGN1cnJlbnQgdGltZSAoaW4gbXNlYykgPyBSZXR1cm5zIDAgaWYgdGVzdCBmYWlscyBvciBjYW5ub3QgYmUgdGVzdGVkIChubyBtYXJrZXIpLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJ1YXRpbWVfcmVhZHlcZlAgKG1hcmtlcl90IHBtLCB1bnNpZ25lZCBpbnQgZGVsdGFUKSIKLS5icgotLlJJICJcZklUZXN0OiBIYXMgKG1hcmtlZCB0aW1lIHBsdXMgZGVsdGEpIGV4Y2VlZGVkIGN1cnJlbnQgdGltZSAoaW4gbXNlYykgPyBSZXR1cm5zIDAgaWYgdGVzdCBmYWlscyBvciBjYW5ub3QgYmUgdGVzdGVkIChubyBtYXJrZXIpLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJtYXJrZXJfdHRpY2tzXGZQIChtYXJrZXJfdCBwbSkiCi0uYnIKLS5SSSAiXGZJUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZVRpY2tzIHNpbmNlIHRoZSBnaXZlbiBtYXJrZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnRpbWV2YWxfdHRpY2tzXGZQIChzdHJ1Y3QgdGltZXZhbCAqdHYpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJuZXRzbm1wX2dldGVudlxmUCAoY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJTm9uIFdpbmRvd3M6IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVudmlyb25tZW50IFxmQnZhcmlhYmxlXGZQIG9yIE5VTEwgaWYgdGhlIGVudmlyb25tZW50IFxmQnZhcmlhYmxlXGZQIGRvZXMgbm90IGV4aXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2FkZHJzdHJfaHRvblxmUCAoY2hhciAqcHRyLCBzaXplX3QgbGVuKSIKLS5icgotLmluIC0xYwotLlNIICJEZWZpbmUgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiI2RlZmluZSBESUZGVElNRVZBTChub3csIHRoZW4sIGRpZmYpIlxmQlZhbHVlOlxmUAotLlBQCi0ubmYKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBub3cudHZfc2VjLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG5vdy50dl91c2VjICs9IDEwMDAwMDBMOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZGlmZi50dl9zZWMgID0gbm93LnR2X3NlYyAgLSB0aGVuLnR2X3NlYzsgICAgICAgXAotICAgICAgICBkaWZmLnR2X3VzZWMgPSBub3cudHZfdXNlYyAtIHRoZW4udHZfdXNlYzsgICAgICBcCi0gICAgICAgIGlmIChkaWZmLnR2X3VzZWMgPiAxMDAwMDAwTCl7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBkaWZmLnR2X3VzZWMgLT0gMTAwMDAwMEw7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGRpZmYudHZfc2VjKys7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLS5maQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTMxIG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBJU1RSQU5TRk9STSh0dHlwZSwgdG9pZCkiXGZCVmFsdWU6XGZQCi0uUFAKLS5uZgotIXNubXBfb2lkX2NvbXBhcmUodHR5cGUsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdXNtICMjIHRvaWQgIyMgUHJvdG9jb2wsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSkKLS5maQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTUwIG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBRVUlURlVOKGUsIGwpIlxmQlZhbHVlOlxmUAotLlBQCi0ubmYKLWlmICggKGUpICE9IFNOTVBFUlJfU1VDQ0VTUykgeyAgIFwKLSAgICAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9HRU5FUlI7ICBcCi0gICAgICAgICAgICAgICAgZ290byBsIDsgICAgICAgICAgICAgICAgXAotICAgICAgICB9Ci0uZmkKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExOCBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgU05NUF9GUkVFKHMpICAgZG8geyBpZiAocykgeyBmcmVlKCh2b2lkICopcyk7IHM9TlVMTDsgfSB9IHdoaWxlKDApIgotLlBQCi1GcmVlcyBhIHBvaW50ZXIgb25seSBpZiBpdCBpcyAhTlVMTCBhbmQgc2V0cyBpdHMgdmFsdWUgdG8gTlVMTC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MyBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgU05NUF9NQUNST19WQUxfVE9fU1RSKHMpICAgU05NUF9NQUNST19WQUxfVE9fU1RSX1BSSVYocykiCi0uUFAKLUV4cGFuZHMgdG8gc3RyaW5nIHdpdGggdmFsdWUgb2YgdGhlIHMuIElmIHMgaXMgbWFjcm8sIHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIHZhbHVlIG9mIHRoZSBtYWNyby4gRXhhbXBsZTogZGVmaW5lIFRFU1QgMTIzNCBcZkJTTk1QX01BQ1JPX1ZBTF9UT19TVFIoVEVTVClcZlAgZXhwYW5kcyB0byAnMTIzNCcgU05NUF9NQUNST19WQUxfVE9fU1RSKFRFU1QrMSkgZXhwYW5kcyB0byAnMTIzNCsxJyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk5IG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBTTk1QX01BTExPQ19TVFJVQ1QocykgICAoc3RydWN0IHMgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcykpIgotLlBQCi1NYWxsb2NzIG1lbW9yeSBvZiBzaXplb2Yoc3RydWN0IHMpLCB6ZXJvcyBpdCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjQgb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFNOTVBfTUFMTE9DX1RZUEVERUYodGQpICAgKHRkICopIGNhbGxvYygxLCBzaXplb2YodGQpKSIKLS5QUAotTWFsbG9jcyBtZW1vcnkgb2Ygc2l6ZW9mKHQpLCB6ZXJvcyBpdCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjggb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFNOTVBfTUFYKGEsIGIpICAgKChhKSA+IChiKSA/IChhKSA6IChiKSkiCi0uUFAKLUNvbXB1dGVycyB0aGUgbWF4aW11bSBvZiBhIGFuZCBiLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg1IG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBTTk1QX01JTihhLCBiKSAgICgoYSkgPiAoYikgPyAoYikgOiAoYSkpIgotLlBQCi1Db21wdXRlcnMgdGhlIG1pbmltdW0gb2YgYSBhbmQgYi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4OSBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgU05NUF9TV0lQRV9NRU0obiwgcykgICBkbyB7IGlmIChuKSBmcmVlKCh2b2lkICopbik7IG4gPSBzOyBzPU5VTEw7IH0gd2hpbGUoMCkiCi0uUFAKLUZyZWVzIHBvaW50ZXIgbiBvbmx5IGlmIGl0IGlzICFOVUxMLCBzZXRzIG4gdG8gcyBhbmQgc2V0cyBzIHRvIE5VTEwuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTcgb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFNOTVBfWkVSTyhzLCBsKSAgIGRvIHsgaWYgKHMpIG1lbXNldChzLCAwLCBsKTsgfSB3aGlsZSgwKSIKLS5QUAotWmVyb3MgbCBieXRlcyBvZiBtZW1vcnkgc3RhcnRpbmcgYXQgcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3MiBvZiBmaWxlIHRvb2xzLmguCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImxvbmcgYXRpbWVfZGlmZiAobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkiCi0uUFAKLVJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIG1zZWMpIGJldHdlZW4gdGhlIHR3byBtYXJrZXJzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc5OCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgIm1hcmtlcl90IGF0aW1lX25ld01hcmtlciAodm9pZCkiCi0uUFAKLWNyZWF0ZSBhIG5ldyB0aW1lIG1hcmtlci4gTk9URTogQ2FsbGVyIG11c3QgZnJlZSB0aW1lIG1hcmtlciB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzc0IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiaW50IGF0aW1lX3JlYWR5IChtYXJrZXJfdCBwbSwgaW50IGRlbHRhVCkiCi0uUFAKLVRlc3Q6IEhhcyAobWFya2VkIHRpbWUgcGx1cyBkZWx0YSkgZXhjZWVkZWQgY3VycmVudCB0aW1lIChpbiBtc2VjKSA/IFJldHVybnMgMCBpZiB0ZXN0IGZhaWxzIG9yIGNhbm5vdCBiZSB0ZXN0ZWQgKG5vIG1hcmtlcikuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODUzIG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAidm9pZCBhdGltZV9zZXRNYXJrZXIgKG1hcmtlcl90IHBtKSIKLS5QUAotc2V0IGEgdGltZSBtYXJrZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzg1IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAidV9pbnQgYmluYXJ5X3RvX2hleCAoY29uc3QgdV9jaGFyICogaW5wdXQsIHNpemVfdCBsZW4sIGNoYXIgKiogb3V0cHV0KSIKLS5QUAotY29udmVydHMgYmluYXJ5IHRvIGhleGlkZWNpbWFsIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJKmlucHV0XGZQIEJpbmFyeSBkYXRhLiAKLS5icgotXGZJbGVuXGZQIExlbmd0aCBvZiBiaW5hcnkgZGF0YS4gCi0uYnIKLVxmSSoqb3V0cHV0XGZQIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgZXF1aXZhbGVudCBpbiBoZXguCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1vbGVuIExlbmd0aCBvZiBvdXRwdXQgc3RyaW5nIG5vdCBpbmNsdWRpbmcgTlVMTCB0ZXJtaW5hdG9yLgotLlJFCi0uUFAKLUZJWCBJcyB0aGVyZSBhbHJlYWR5IG9uZSBvZiB0aGVzZSBpbiB0aGUgVUNEIFNOTVAgY29kZWJhc2U/IFRoZSBvbGQgb25lIHNob3VsZCBiZSB1c2VkLCBvciB0aGlzIG9uZSBzaG91bGQgYmUgbW92ZWQgdG8gXGZCc25tcGxpYi9zbm1wX2FwaS5jXGZQLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI5MCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgInZvaWQgZnJlZV96ZXJvICh2b2lkICogYnVmLCBzaXplX3Qgc2l6ZSkiCi0uUFAKLXplcm9zIG1lbW9yeSBiZWZvcmUgZnJlZWluZyBpdC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkkqYnVmXGZQIFBvaW50ZXIgYXQgYnl0ZXMgdG8gZnJlZS4gCi0uYnIKLVxmSXNpemVcZlAgTnVtYmVyIG9mIGJ5dGVzIGluIGJ1Zi4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODggb2YgZmlsZSB0b29scy5jLgotLlNTICJpbnQgaGV4X3RvX2JpbmFyeTIgKGNvbnN0IHVfY2hhciAqIGlucHV0LCBzaXplX3QgbGVuLCBjaGFyICoqIG91dHB1dCkiCi0uUFAKLWhleF90b19iaW5hcnkyIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJKmlucHV0XGZQIFByaW50YWJsZSBkYXRhIGluIGJhc2UxNi4gCi0uYnIKLVxmSWxlblxmUCBMZW5ndGggaW4gYnl0ZXMgb2YgZGF0YS4gCi0uYnIKLVxmSSoqb3V0cHV0XGZQIEJpbmFyeSBkYXRhIGVxdWl2YWxlbnQgdG8gaW5wdXQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1TTk1QRVJSX0dFTkVSUiBvbiBmYWlsdXJlLCBvdGhlcndpc2UgbGVuZ3RoIG9mIGFsbG9jYXRlZCBzdHJpbmcuCi0uUkUKLS5QUAotSW5wdXQgb2YgYW4gb2RkIGxlbmd0aCBpcyByaWdodCBhbGlnbmVkLgotLlBQCi1GSVggQW5vdGhlciB2ZXJzaW9uIG9mICdoZXgtdG8tYmluYXJ5JyB3aGljaCB0YWtlcyBvZGQgbGVuZ3RoIGlucHV0IHN0cmluZ3MuIEl0IGFsc28gYWxsb2NhdGVzIHRoZSBtZW1vcnkgdG8gaG9sZCB0aGUgYmluYXJ5IGRhdGEuIFNob3VsZCBiZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG9mZmljaWFsIGhleF90b19iaW5hcnkoKSBmdW5jdGlvbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMjcgb2YgZmlsZSB0b29scy5jLgotLlNTICJ1X2NoYXIqIG1hbGxvY19yYW5kb20gKHNpemVfdCAqIHNpemUpIgotLlBQCi1SZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhZWQgJiBzZXQgYnVmZmVyIG9uIHN1Y2Nlc3MsIHNpemUgY29udGFpbnMgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyBmaWxsZWQuIGJ1ZiBpcyBOVUxMIGFuZCAqc2l6ZSBzZXQgdG8gS01UIGVycm9yIHZhbHVlIHVwb24gZmFpbHVyZS4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklzaXplXGZQIE51bWJlciBvZiBieXRlcyB0byBtYWxsb2MoKSBhbmQgZmlsbCB3aXRoIHJhbmRvbSBieXRlcy4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWEgbWFsbG9jZWQgYnVmZmVyIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjA4IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiaW50IG1hcmtlcl90dGlja3MgKG1hcmtlcl90IHBtKSIKLS5QUAotUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZVRpY2tzIHNpbmNlIHRoZSBnaXZlbiBtYXJrZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTAxIG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAidm9pZCAqIG5ldHNubXBfbWVtZHVwIChjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IHNpemUpIgotLlBQCi1EdXBsaWNhdGVzIGEgbWVtb3J5IGJsb2NrLiBDb3BpZXMgYSBleGlzdGluZyBtZW1vcnkgbG9jYXRpb24gZnJvbSBhIHBvaW50ZXIgdG8gYW5vdGhlciwgbmV3bHkgbWFsbG9jZWQsIHBvaW50ZXIuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdG9cZlAgUG9pbnRlciB0byBhbGxvY2F0ZSBhbmQgY29weSBtZW1vcnkgdG8uIAotLmJyCi1cZklmcm9tXGZQIFBvaW50ZXIgdG8gY29weSBtZW1vcnkgZnJvbS4gCi0uYnIKLVxmSXNpemVcZlAgU2l6ZSBvZiB0aGUgZGF0YSB0byBiZSBjb3BpZWQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1TTk1QRVJSX1NVQ0NFU1Mgb24gc3VjY2VzcywgU05NUEVSUl9HRU5FUlIgb24gZmFpbHVyZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzkgb2YgZmlsZSB0b29scy5jLgotLlNTICJjaGFyKiBuZXRzbm1wX2dldGVudiAoY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1Ob24gV2luZG93czogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZW52aXJvbm1lbnQgXGZCdmFyaWFibGVcZlAgb3IgTlVMTCBpZiB0aGUgZW52aXJvbm1lbnQgXGZCdmFyaWFibGVcZlAgZG9lcyBub3QgZXhpc3QuIFdpbmRvd3M6IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVudmlyb25tZW50IFxmQnZhcmlhYmxlXGZQIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBub3QsIHRoZSBcZkJ2YXJpYWJsZVxmUCBpcyBsb29rZWQgdXAgaW4gdGhlIHJlZ2lzdHJ5IGluIEhLQ1VcXE5ldC1TTk1QIG9yIEhLTE1cXE5ldC1TTk1QICh3aGljaGV2ZXIgaXQgZmluZHMgZmlyc3QpIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZW52aXJvbm1lbnQgXGZCdmFyaWFibGVcZlAuIEl0IHRoZW4gcmV0dXJucyBhIHBvaW50ZXIgdG8gZW52aXJvbm1lbnQgXGZCdmFyaWFibGVcZlAuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTI5IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiaW50IG5ldHNubXBfaGV4X3RvX2JpbmFyeSAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb2Zmc2V0LCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgY2hhciAqIGhleCwgY29uc3QgY2hhciAqIGRlbGltKSIKLS5QUAotY29udmVydCBhbiBBU0NJSSBoZXggc3RyaW5nICh3aXRoIHNwZWNpZmllZCBkZWxpbWl0ZXJzKSB0byBiaW5hcnkgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgYWRkcmVzcyBvZiBhIHBvaW50ZXIgKHBvaW50ZXIgdG8gcG9pbnRlcikgZm9yIHRoZSBvdXRwdXQgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHNldCwgdGhlIGJ1ZmZlciBtYXkgYmUgZ3Jvd24gdmlhIHNubXBfcmVhbGxvYyB0byBhY2NvbW9kYXRlIHRoZSBkYXRhLgotLmJyCi1cZklidWZfbGVuXGZQIHBvaW50ZXIgdG8gYSBzaXplX3QgY29udGFpbmluZyB0aGUgaW5pdGlhbCBzaXplIG9mIGJ1Zi4KLS5icgotXGZJb2Zmc2V0XGZQIE9uIGlucHV0LCBhIHBvaW50ZXIgdG8gYSBzaXplX3QgaW5kaWNhdGluZyBhbiBvZmZzZXQgaW50byBidWYuIFRoZSBiaW5hcnkgZGF0YSB3aWxsIGJlIHN0b3JlZCBhdCB0aGlzIG9mZnNldC4gT24gb3V0cHV0LCB0aGlzIHBvaW50ZXIgd2lsbCBoYXZlIHVwZGF0ZWQgdGhlIG9mZnNldCB0byBiZSB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgY29udmVydGVkIGRhdGEuCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgSWYgdHJ1ZSwgdGhlIGJ1ZmZlciBjYW4gYmUgcmVhbGxvY2F0ZWQuIElmIGZhbHNlLCBhbmQgdGhlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHN0cmluZywgYW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KLS5icgotXGZJaGV4XGZQIHBvaW50ZXIgdG8gaGV4IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuIE1heSBiZSBwcmVmaXhlZCBieSAnMHgnIG9yICcwWCcuCi0uYnIKLVxmSWRlbGltXGZQIHBvaW50IHRvIGEgc3RyaW5nIG9mIGFsbG93ZWQgZGVsaW1pdGVycyBiZXR3ZWVuIGJ5dGVzLiBJZiBub3Qgc3BlY2lmaWVkLCBhbnkgbm9uLWhleCBjaGFyYWN0ZXJzIHdpbGwgYmUgYW4gZXJyb3IuCi0uUkUKLS5QUAotXGZCUmV0dXJuIHZhbHVlczpcZlAKLS5SUyA0Ci1cZkkxXGZQIHN1Y2Nlc3MgCi0uYnIKLVxmSTBcZlAgZXJyb3IgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0Mjggb2YgZmlsZSB0b29scy5jLgotLlNTICJjaGFyKiBuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbCAoY29uc3QgdV9jaGFyICogZnJvbSwgc2l6ZV90IGZyb21fbGVuKSIKLS5QUAotY29waWVzIGEgKHBvc3NpYmxlKSB1bnRlcm1pbmF0ZWQgc3RyaW5nIG9mIGEgZ2l2ZW4gbGVuZ3RoIGludG8gYSBuZXcgYnVmZmVyIGFuZCBudWxsIHRlcm1pbmF0ZXMgaXQgYXMgd2VsbCAobmV3IGJ1ZmZlciBNQVkgYmUgb25lIGJ5dGUgbG9uZ2VyIHRvIGFjY291bnQgZm9yIHRoaXMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTggb2YgZmlsZSB0b29scy5jLgotLlNTICJpbnQgc25tcF9oZXhfdG9fYmluYXJ5ICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvZmZzZXQsIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBjaGFyICogaGV4KSIKLS5QUAotY29udmVydCBhbiBBU0NJSSBoZXggc3RyaW5nIHRvIGJpbmFyeSBcZkJOb3RlOlxmUAotLlJTIDQKLVRoaXMgaXMgYSB3cmFwcGVyIHdoaWNoIGNhbGxzIG5ldHNubXBfaGV4X3RvX2JpbmFyeSB3aXRoIGEgZGVsaW1pdGVyIHN0cmluZyBvZiAnICcuCi0uUkUKLS5QUAotU2VlIG5ldHNubXBfaGV4X3RvX2JpbmFyeSBmb3IgcGFyYW1ldGVyIGRlc2NyaXB0aW9ucy4KLS5QUAotXGZCUmV0dXJuIHZhbHVlczpcZlAKLS5SUyA0Ci1cZkkxXGZQIHN1Y2Nlc3MgCi0uYnIKLVxmSTBcZlAgZXJyb3IgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0ODggb2YgZmlsZSB0b29scy5jLgotLlNTICJpbnQgc25tcF9yZWFsbG9jICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuKSIKLS5QUAotVGhpcyBmdW5jdGlvbiBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgYXQgYnkgKmJ1Ziwgd2hpY2ggaXMgaW5pdGlhbGx5IG9mIHNpemUgKmJ1Zl9sZW4uIENvbnRlbnRzIGFyZSBwcmVzZXJ2ZWQgKipBVCBUSEUgQk9UVE9NIEVORCBPRiBUSEUgQlVGRkVSKiouIElmIG1lbW9yeSBjYW4gYmUgKHJlLSlhbGxvY2F0ZWQgdGhlbiBpdCByZXR1cm5zIDEsIGVsc2UgaXQgcmV0dXJucyAwLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBwb2ludGVyIHRvIGEgYnVmZmVyIHBvaW50ZXIgCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgcG9pbnRlciB0byBjdXJyZW50IHNpemUgb2YgYnVmZmVyIGluIGJ5dGVzCi0uUkUKLS5QUAotXGZCTm90ZTpcZlAKLS5SUyA0Ci1UaGUgY3VycmVudCByZS1hbGxvY2F0aW9uIGFsZ29yaXRobSBpcyB0byBpbmNyZWFzZSB0aGUgYnVmZmVyIHNpemUgYnkgd2hpY2hldmVyIGlzIHRoZSBncmVhdGVyIG9mIDI1NiBieXRlcyBvciB0aGUgY3VycmVudCBidWZmZXIgc2l6ZSwgdXAgdG8gYSBtYXhpbXVtIGluY3JlYXNlIG9mIDgxOTIgYnl0ZXMuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI0IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAidV9sb25nIHVhdGltZV9kaWZmIChtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKSIKLS5QUAotUmV0dXJucyB0aGUgZGlmZmVyZW5jZSAoaW4gdV9sb25nIG1zZWMpIGJldHdlZW4gdGhlIHR3byBtYXJrZXJzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgxNSBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgInVfbG9uZyB1YXRpbWVfaGRpZmYgKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpIgotLlBQCi1SZXR1cm5zIHRoZSBkaWZmZXJlbmNlIChpbiB1X2xvbmcgMS8xMDB0aCBzZWNzKSBiZXR3ZWVuIHRoZSB0d28gbWFya2VycyAoZnVuY3Rpb25hbGx5IHRoaXMgaXMgd2hhdCBzeXNVcFRpbWUgbmVlZHMpLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgzMyBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImludCB1YXRpbWVfcmVhZHkgKG1hcmtlcl90IHBtLCB1bnNpZ25lZCBpbnQgZGVsdGFUKSIKLS5QUAotVGVzdDogSGFzIChtYXJrZWQgdGltZSBwbHVzIGRlbHRhKSBleGNlZWRlZCBjdXJyZW50IHRpbWUgKGluIG1zZWMpID8gUmV0dXJucyAwIGlmIHRlc3QgZmFpbHMgb3IgY2Fubm90IGJlIHRlc3RlZCAobm8gbWFya2VyKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NzUgb2YgZmlsZSB0b29scy5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3V0aWxpdGllcy4zIGIvbWFuL25ldHNubXBfdXRpbGl0aWVzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YmY1MzMuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdXRpbGl0aWVzLjMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0uVEggInV0aWxpdHlfaGFuZGxlcnMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi11dGlsaXR5X2hhbmRsZXJzIFwtIAotLlBQCi1TaW1wbGlmeSByZXF1ZXN0IHByb2Nlc3NpbmcgQSBncm91cCBvZiBoYW5kbGVycyBpbnRlbmRlZCB0byBzaW1wbGlmeSBjZXJ0YWluIGFzcGVjdHMgb2YgcHJvY2Vzc2luZyBhIHJlcXVlc3QgZm9yIGEgTUlCIG9iamVjdC4gIAotCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCYnVsa190b19uZXh0XGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklDb252ZXJ0IEdFVEJVTEsgcmVxdWVzdHMgaW50byBHRVRORVhUIHJlcXVlc3RzIGZvciB0aGUgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJjYWNoZV9oYW5kbGVyXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklNYWludGFpbnMgYSBjYWNoZSBvZiBkYXRhIGZvciB1c2UgYnkgbG93ZXIgbGV2ZWwgaGFuZGxlcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCZGVidWdcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVByaW50IG91dCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhbmRsZXIgY2hhaW4gYmVpbmcgY2FsbGVkLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm1vZGVfZW5kX2NhbGxcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgcmVxdWVzdHMsIGNhbGwgYW5vdGhlciBoYW5kbGVyIGhvb2suIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbXVsdGlwbGV4ZXJcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVNwbGl0cyBtb2RlIHJlcXVlc3RzIGludG8gY2FsbHMgdG8gZGlmZmVyZW50IGhhbmRsZXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnJlYWRfb25seVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJTWFrZSB5b3VyIGhhbmRsZXIgcmVhZF9vbmx5IGF1dG9tYXRpY2FsbHkgVGhlIG9ubHkgcHVycG9zZSBvZiB0aGlzIGhhbmRsZXIgaXMgdG8gcmV0dXJuIGFuIGFwcHJvcHJpYXRlIGVycm9yIGZvciBhbnkgcmVxdWVzdHMgcGFzc2VkIHRvIGl0IGluIGEgU0VUIG1vZGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCcm93X21lcmdlXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklDYWxscyBzdWIgaGFuZGxlcnMgd2l0aCByZXF1ZXN0IGZvciBvbmUgcm93IGF0IGEgdGltZS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJzZXJpYWxpemVcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUNhbGxzIHN1YiBoYW5kbGVycyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCc3Rhc2hfdG9fbmV4dFxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJQ29udmVydCBHRVRfU1RBU0ggcmVxdWVzdHMgaW50byBHRVRORVhUIHJlcXVlc3RzIGZvciB0aGUgaGFuZGxlci4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVNpbXBsaWZ5IHJlcXVlc3QgcHJvY2Vzc2luZyBBIGdyb3VwIG9mIGhhbmRsZXJzIGludGVuZGVkIHRvIHNpbXBsaWZ5IGNlcnRhaW4gYXNwZWN0cyBvZiBwcm9jZXNzaW5nIGEgcmVxdWVzdCBmb3IgYSBNSUIgb2JqZWN0LiAKLQotVGhlc2UgaGVscGVycyBkbyBub3QgaW1wbGVtZW50IGFueSBNSUIgb2JqZWN0cyB0aGVtc2VsdmVzLiBSYXRoZXIgdGhleSBoYW5kbGUgc3BlY2lmaWMgZ2VuZXJpYyBzaXR1YXRpb25zLCBlaXRoZXIgcmV0dXJuaW5nIGFuIGVycm9yLCBvciBwYXNzaW5nIGEgKHBvc3NpYmx5IHNpbXBsZXIpIHJlcXVlc3QgZG93biB0byBsb3dlciBsZXZlbCBoYW5kbGVycy4gCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYgYi9tYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQxZjlmCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYKQEAgLTAsMCArMSwyMTYgQEAKKy5USCBORVRTTk1QX1ZBUkJJTkRfQVBJIDMgIjEzIEF1ZyAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK3NubXBfcGR1X2FkZF92YXJpYWJsZSwKK3NubXBfdmFybGlzdF9hZGRfdmFyaWFibGUsCitzbm1wX2FkZF9udWxsX3ZhciwKK3NubXBfY2xvbmVfdmFyYmluZCwKK3NubXBfc2V0X3Zhcl9vYmppZCwKK3NubXBfc2V0X3Zhcl92YWx1ZSwKK3NubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSwKK3NubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyLAorcHJpbnRfdmFyaWFibGUsCitmcHJpbnRfdmFyaWFibGUsCitzbnByaW50X3ZhcmlhYmxlLAorcHJpbnRfdmFsdWUsCitmcHJpbnRfdmFsdWUsCitzbnByaW50X3ZhbHVlLAorc25tcF9mcmVlX3ZhciwKK3NubXBfZnJlZV92YXJiaW5kIC0gbmV0c25tcF92YXJiaW5kX2FwaSBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPG5ldC1zbm1wL3ZhcmJpbmRfYXBpLmg+CisuU1MgQ3JlYXRpb24KKy5QUAorLkIgIm5ldHNubXBfdmFyaWFibGVfbGlzdCAqc25tcF9wZHVfYWRkX3ZhcmlhYmxlKCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqIiBwZHUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAiIHR5cGUgIiwgY29uc3Qgdm9pZCAqIiB2YWx1ZSAiLCBzaXplX3QgIiBsZW4gIik7IgorLmJyCisuQiAibmV0c25tcF92YXJpYWJsZV9saXN0ICpzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFybGlzdCAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICIgdHlwZSAiLCBjb25zdCB2b2lkICoiIHZhbHVlICIsIHNpemVfdCAiIGxlbiAiKTsiCisuYnIKKy5CICJuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnNubXBfYWRkX251bGxfdmFyKCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqIiBwZHUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIpOyIKKy5QUAorLkIgIm5ldHNubXBfdmFyaWFibGVfbGlzdCAqc25tcF9jbG9uZV92YXJiaW5kKCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFybGlzdCAiKTsiCisuU1MgU2V0dGluZyBWYWx1ZXMKKy5QUAorLkJJICJpbnQgIHNubXBfc2V0X3Zhcl9vYmppZCggbmV0c25tcF92YXJpYWJsZV9saXN0KiAiIHZhcmlhYmxlICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqICIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIik7IgorLmJyCisuQkkgImludCAgc25tcF9zZXRfdmFyX3ZhbHVlKCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QqICIgdmFyaWFibGUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqICIgdmFsdWUgIiwgc2l6ZV90ICIgdmFsbGVuICIpOyIKKy5icgorLkJJICJpbnQgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggbmV0c25tcF92YXJpYWJsZV9saXN0KiAiIHZhcmlhYmxlICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAiIHR5cGUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqICIgdmFsdWUgIiwgc2l6ZV90ICIgdmFsbGVuICIpOyIKKy5icgorLkJJICJpbnQgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QqICIgdmFyaWFibGUgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICIgdHlwZSAiLCBsb25nICIgdmFsdWUgIik7IgorLmJyCisuU1MgT3V0cHV0CisuUFAKKy5CSSAidm9pZCAgcHJpbnRfdmFyaWFibGUoY29uc3Qgb2lkICoiICJvYmppZCIgIiwgc2l6ZV90ICIgIm9iamlkbGVuIiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgIik7IgorLmJyCisuQkkgInZvaWQgZnByaW50X3ZhcmlhYmxlKEZJTEUgKiIgZnAgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSAiKTsiCisuYnIKKy5CSSAiaW50IHNucHJpbnRfdmFyaWFibGUoY2hhciAqIiAiYnVmIiAiLCBzaXplX3QgIiAibGVuIiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICIpOyIKKy5QUAorLkJJICJ2b2lkICBwcmludF92YWx1ZShjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICIpOyIKKy5icgorLkJJICJ2b2lkIGZwcmludF92YWx1ZShGSUxFICoiIGZwICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgIik7IgorLmJyCisuQkkgImludCBzbnByaW50X3ZhbHVlKGNoYXIgKiIgYnVmICIsIHNpemVfdCAiICJsZW4iICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgIik7IgorLmJyCisuYnIKKy5TUyBEZWxldGlvbgorLlBQCisuQkkgInZvaWQgc25tcF9mcmVlX3ZhciggICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICIpOyIKKy5icgorLkJJICJ2b2lkIHNubXBfZnJlZV92YXJiaW5kKCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGVzICIpOyIKKy5icgorLlBQCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIHZhcmlhYmxlIGJpbmRpbmdzIGZhbGwgaW50byBmb3VyIGdyb3VwcyAtIAorZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiwgc2V0dGluZyBvZiB2YWx1ZXMsIG91dHB1dCBhbmQgZGVsZXRpb24gb2YgdmFyYmluZHMuCisuU1MgQ3JlYXRpb24KKy5CIHNubXBfcGR1X2FkZF92YXJpYWJsZQord2lsbCBjcmVhdGUgYSBuZXcgdmFyYmluZCBzdHJ1Y3R1cmUsIGluaXRpYWxpc2VkIHdpdGggdGhlIG5hbWUgKAorLklSIG9iamlkICIsICIgb2JqaWRsZW4KKyksIHN5bnRheCAoCisuSSB0eXBlCispIGFuZCB2YWx1ZSAoCisuSSB2YWx1ZSAiLCAiIGxlbgorKSBwcm92aWRlZC4KK1RoaXMgdmFyYmluZCBpcyB0aGVuIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHZhcmJpbmQgbGlzdCBpbgordGhlIGdpdmVuIFBEVS4KKy5QUAorLkIgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZQoraXMgc2ltaWxhciwgYnV0IGFwcGVuZHMgdGhlIG5ldyB2YXJiaW5kIHRvIHRoZSBlbmQgb2YgdGhlCit2YXJiaW5kIGxpc3QgcHJvdmlkZWQuCitXaGVuIGFkZGluZyB0aGUgZmlyc3QgdmFyYmluZCB0byBhbiBlbXB0eSBsaXN0LCBzaW1wbHkKK3Bhc3MgdGhlIGFkZHJlc3Mgb2YgdGhlIGhlYWQgb2YgdGhlIGxpc3Q6CisuSVAKKyAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2bCA9IE5VTEw7CisgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoCisgICAgICAgICAgICAmdmwsIG5hbWUxLCBuYW1lMV9sZW4sCisgICAgICAgICAgICBBU05fXGZJVFlQRVxmUCwgJnZhbDEsIHZhbDFfbGVuKTsKKyAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgKKyAgICAgICAgICAgICZ2bCwgbmFtZTIsIG5hbWUyX2xlbiwKKyAgICAgICAgICAgIEFTTl9cZklUWVBFXGZQLCAmdmFsMiwgdmFsMl9sZW4pOworLlBQCitJbiBib3RoIGNhc2VzLCB0aGUgcm91dGluZSB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ldwordmFyYmluZCBzdHJ1Y3R1cmUgKG9yIE5VTEwgaWYgdGhlIHZhcmJpbmQgY3JlYXRpb24gZmFpbHMpLgorLlBQCisuQiBzbm1wX2FkZF9udWxsX3ZhcgoraXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBhZGQgYW4gZW1wdHkgdmFyYmluZCB0byB0aGUgUERVLgord2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgdGhlIE5VTEwgdmFsdWUgZXhwbGljaXRseS4KK1RoaXMgaXMgdGhlIG5vcm1hbCBtZWNoYW5pc20gZm9yIGNvbnN0cnVjdGluZyBhIEdFVCAob3Igc2ltaWxhcikKK2luZm9ybWF0aW9uIHJldHJpZXZhbCByZXF1ZXN0LgorLmJyCitBZ2FpbiwgdGhpcyByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3IHZhcmJpbmQsIG9yIE5VTEwuCisuUFAKKy5CIHNubXBfY2xvbmVfdmFyYmluZAorY3JlYXRlcyBhIGNvcHkgb2YgZWFjaCB2YXJiaW5kIGluIHRoZSBzcGVjaWZpZWQgbGlzdCwKK3JldHVybmluZyBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgb2YgdGhlIG5ldyBsaXN0Cisob3IgTlVMTCBpZiB0aGUgY2xvbmluZyBmYWlscykuCisuYnIKKy5TUyBTZXR0aW5nIG9mIHZhbHVlcworLkIgc25tcF9zZXRfdmFyX29iamlkCitzZXRzIHRoZSBuYW1lIG9mIHRoZSB2YXJiaW5kIHN0cnVjdHVyZSB0byB0aGUgc3BlY2lmaWVkIE9JRC4KKy5icgorLkIgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlCitzZXRzIHRoZSBzeW50YXggdHlwZSBhbmQgdmFsdWUgb2YgdGhlIHZhcmJpbmQgc3RydWN0dXJlLgorLmJyCisuQiBzbm1wX3NldF92YXJfdmFsdWUKK3NldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJiaW5kIHN0cnVjdHVyZSwgbGVhdmluZyB0aGUgc3ludGF4IHR5cGUgdW5jaGFuZ2VkLgorLmJyCisuQiBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcgoraXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHN5bnRheCB0eXBlIGFuZCB2YWx1ZSBmb3IKK2EgMzItYml0IGludGVnZXItYmFzZWQgdmFyYmluZC4KKy5QUAorQWxsIGZvdXIgb2YgdGhlc2UgcmV0dXJuIDAgaWYgdGhlIGFzc2lnbm1lbnQgaXMgc3VjY2Vzc2Z1bCwKK29yIDEgaWYgaXQgaXMgbm90LgorLlNTIE91dHB1dAorLkIgcHJpbnRfdmFyaWFibGUKK3dpbGwgdGFrZSBhbiBvYmplY3QgaWRlbnRpZmllciAoYXMgcmV0dXJuZWQgYnkKKy5CUiByZWFkX29iamlkICIsICIgc25tcF9wYXJzZV9vaWQgIiBvciAiIGdldF9tb2R1bGVfbm9kZSApCithbmQgYW4gaW5zdGFuY2Ugb2Ygc3VjaCBhIHZhcmlhYmxlLCBhbmQgcHJpbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQKK3RoZSB0ZXh0dWFsIGZvcm0gb2YgdGhlIG9iamVjdCBpZGVudGlmaWVyIHRvZ2V0aGVyIHdpdGggdGhlIHZhbHVlCitvZiB0aGUgdmFyaWFibGUuCisuUFAKKy5CIGZwcmludF92YXJpYWJsZQorZG9lcyB0aGUgc2FtZSwgYnV0IHByaW50cyB0byB0aGUgRklMRSBwb2ludGVyIHNwZWNpZmllZCBieSB0aGUgaW5pdGlhbAorcGFyYW1ldGVyLgorLlBQCisuQiBzbnByaW50X3ZhcmlhYmxlCitwcmludHMgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW50byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkKKy5JIGJ1Zgord2hpY2ggaXMgb2YgbGVuZ3RoCisuSVIgbGVuIC4KK0l0IHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQsIG9yIC0xIGlmIHRoZQorYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLiAgSW4gdGhlIGxhdHRlciBjYXNlLAorLkkgYnVmCit3aWxsIHR5cGljYWxseSBjb250YWluZWQgYSB0cnVuY2F0ZWQgdmVyc2lvbiBvZiB0aGUgaW5mb3JtYXRpb24gKGJ1dAordGhpcyBiZWhhdmlvdXIgaXMgbm90IGd1YXJhbnRlZWQpLiAgVGhpcyBmdW5jdGlvbiByZXBsYWNlcyB0aGUKK29ic29sZXRlIGZ1bmN0aW9uCisuQlIgc3ByaW50X3ZhcmlhYmxlIC4KKy5QUAorLkJSIHByaW50X3ZhbHVlICwKKy5CUiBmcHJpbnRfdmFsdWUgLAorYW5kCisuQiBzbnByaW50X3ZhbHVlCitkbyB0aGUgc2FtZSBhcyB0aGUgZXF1aXZhbGVudAorLkIgcHJpbnRfdmFyaWFibGUKK3JvdXRpbmVzLCBidXQgb25seSBkaXNwbGF5aW5nIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIHdpdGhvdXQgdGhlCitjb3JyZXNwb25kaW5nIG9iamVjdCBpZGVudGlmaWVyLgorLlBQCitGb3IgZGlzcGxheWluZyB0aGUgT0lEIG9mIGEgdmFyYmluZCwgc2VlIFxmQm5ldHNubXBfbWliX2FwaVxmUCgzKS4KKy5icgorLlNTIERlbGV0aW9uCisuQiBzbm1wX2ZyZWVfdmFyCityZWxlYXNlcyBhbGwgbWVtb3J5IHVzZWQgYnkgdGhlIGdpdmVuIHZhcmJpbmQgc3RydWN0dXJlLgorLmJyCisuQiBzbm1wX2ZyZWVfdmFyYmluZAorcmVsZWFzZXMgYWxsIG1lbW9yeSB1c2VkIGJ5IGVhY2ggdmFyYmluZCBzdHJ1Y3R1cmUgaW4gdGhlIHZhcmJpbmQgbGlzdCBwcm92aWRlZC4KKy5icgorLlNIICJTRUUgQUxTTyIKKy5CUiBuZXRzbm1wX3BkdV9hcGkgIigzKSIKKy5CUiBuZXRzbm1wX21pYl9hcGkgIigzKSIKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMyBiL21hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg5N2M1ZS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLlRIICJ2YXJpYWJsZV9saXN0IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdmFyaWFibGVfbGlzdCBcLSAKLS5QUAotVGhlIG5ldHNubXAgXGZCdmFyaWFibGVcZlAgbGlzdCBiaW5kaW5nIHN0cnVjdHVyZSwgaXQncyB0eXBlZGVmJ2QgdG8gbmV0c25tcF92YXJpYWJsZV9saXN0LiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHNubXBfYXBpLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ2YXJpYWJsZV9saXN0XGZQICogXGZCbmV4dF92YXJpYWJsZVxmUCIKLS5icgotLlJJICJcZklOVUxMIGZvciBsYXN0IFxmQnZhcmlhYmxlXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgIm9pZCAqIFxmQm5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJT2JqZWN0IGlkZW50aWZpZXIgb2YgXGZCdmFyaWFibGVcZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQm5hbWVfbGVuZ3RoXGZQIgotLmJyCi0uUkkgIlxmSW51bWJlciBvZiBzdWJpZCdzIGluIG5hbWUgXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgXGZCdHlwZVxmUCIKLS5icgotLlJJICJcZklBU04gdHlwZSBvZiBcZkJ2YXJpYWJsZVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmRhdGFcZlAgXGZCdmFsXGZQIgotLmJyCi0uUkkgIlxmSXZhbHVlIG9mIFxmQnZhcmlhYmxlXGZQIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnZhbF9sZW5cZlAiCi0uYnIKLS5SSSAiXGZJdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgdG8gYmUgY29waWVkIGludG8gYnVmIFxmUCIKLS50aSAtMWMKLS5SSSAib2lkIFxmQm5hbWVfbG9jXGZQIFtNQVhfT0lEX0xFTl0iCi0uYnIKLS5SSSAiXGZJYnVmZmVyIHRvIGhvbGQgdGhlIE9JRCBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciBcZkJidWZcZlAgWzQwXSIKLS5icgotLlJJICJcZkk5MCBwZXJjZW50aWxlIDwgNDAuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQmRhdGFcZlAiCi0uYnIKLS5SSSAiXGZJKE9wYXF1ZSkgaG9vayBmb3IgYWRkaXRpb25hbCBkYXRhIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCgqIFxmQmRhdGFGcmVlSG9va1xmUCApKHZvaWQgKikiCi0uYnIKLS5SSSAiXGZJY2FsbGJhY2sgdG8gZnJlZSBhYm92ZSBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJpbmRleFxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSBuZXRzbm1wIFxmQnZhcmlhYmxlXGZQIGxpc3QgYmluZGluZyBzdHJ1Y3R1cmUsIGl0J3MgdHlwZWRlZidkIHRvIG5ldHNubXBfdmFyaWFibGVfbGlzdC4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLS5QUAotXGZCbm90aWZpY2F0aW9uLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1Mjkgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJ1X2NoYXIgXGZCdmFyaWFibGVfbGlzdDo6YnVmXGZQWzQwXSIKLS5QUAotOTAgcGVyY2VudGlsZSA8IDQwLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0NSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInZvaWQqIFxmQnZhcmlhYmxlX2xpc3Q6OmRhdGFcZlAiCi0uUFAKLShPcGFxdWUpIGhvb2sgZm9yIGFkZGl0aW9uYWwgZGF0YSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0NyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInZvaWQoKiBcZkJ2YXJpYWJsZV9saXN0OjpkYXRhRnJlZUhvb2tcZlApKHZvaWQgKikiCi0uUFAKLWNhbGxiYWNrIHRvIGZyZWUgYWJvdmUgCi0uU1MgIm9pZCogXGZCdmFyaWFibGVfbGlzdDo6bmFtZVxmUCIKLS5QUAotT2JqZWN0IGlkZW50aWZpZXIgb2YgXGZCdmFyaWFibGVcZlAuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTMzIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnZhcmlhYmxlX2xpc3Q6Om5hbWVfbGVuZ3RoXGZQIgotLlBQCi1udW1iZXIgb2Ygc3ViaWQncyBpbiBuYW1lIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTM1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAib2lkIFxmQnZhcmlhYmxlX2xpc3Q6Om5hbWVfbG9jXGZQW01BWF9PSURfTEVOXSIKLS5QUAotYnVmZmVyIHRvIGhvbGQgdGhlIE9JRCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0MyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInN0cnVjdCBcZkJ2YXJpYWJsZV9saXN0XGZQKiBcZkJ2YXJpYWJsZV9saXN0OjpuZXh0X3ZhcmlhYmxlXGZQXGZDIFtyZWFkXVxmUCIKLS5QUAotTlVMTCBmb3IgbGFzdCBcZkJ2YXJpYWJsZVxmUC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MzEgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIgXGZCdmFyaWFibGVfbGlzdDo6dHlwZVxmUCIKLS5QUAotQVNOIHR5cGUgb2YgXGZCdmFyaWFibGVcZlAuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1Mzcgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJcZkJuZXRzbm1wX3ZhcmRhdGFcZlAgXGZCdmFyaWFibGVfbGlzdDo6dmFsXGZQIgotLlBQCi12YWx1ZSBvZiBcZkJ2YXJpYWJsZVxmUCAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTM5IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnZhcmlhYmxlX2xpc3Q6OnZhbF9sZW5cZlAiCi0uUFAKLXRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHRvIGJlIGNvcGllZCBpbnRvIGJ1ZiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU0MSBvZiBmaWxlIHNubXBfYXBpLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF93YXRjaGVyLjMgYi9tYW4vbmV0c25tcF93YXRjaGVyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGY0ZjYuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfd2F0Y2hlci4zCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLlRIICJ3YXRjaGVyIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotd2F0Y2hlciBcLSAKLS5QUAotV2F0Y2ggYSBzcGVjaWZpZWQgXGZCdmFyaWFibGVcZlAgYW5kIHByb2Nlc3MgaXQgYXMgYW4gaW5zdGFuY2Ugb3Igc2NhbGFyIG9iamVjdC4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfd2F0Y2hlcl9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3dhdGNoZXJfaW5mb1xmUCAqIFxmQm5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mb1xmUCAodm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHVfY2hhciB0eXBlLCBpbnQgZmxhZ3MpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2VcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfd2F0Y2hlcl9pbmZvXGZQICp3YXRjaGluZm8pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3dhdGNoZXJfaW5mb1xmUCAqd2F0Y2hpbmZvKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF93YXRjaGVyX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfd2F0Y2hlZF90aW1lc3RhbXBfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfd2F0Y2hlZF90aW1lc3RhbXBfcmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKndoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBtYXJrZXJfdCB0aW1lc3RhbXApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfdGltZXN0YW1wXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBtYXJrZXJfdCB0aW1lc3RhbXApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3dhdGNoZWRfdGltZXN0YW1wX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF93YXRjaGVkX3NwaW5sb2NrX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc3BpbmxvY2tcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIGludCAqc3BpbmxvY2spIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3dhdGNoZWRfc3BpbmxvY2tfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdWxvbmdfc2NhbGFyXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19zY2FsYXJcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfbG9uZ19zY2FsYXJcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBsb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX3NjYWxhclxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGxvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfaW50X3NjYWxhclxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X3NjYWxhclxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX3NjYWxhclxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVdhdGNoIGEgc3BlY2lmaWVkIFxmQnZhcmlhYmxlXGZQIGFuZCBwcm9jZXNzIGl0IGFzIGFuIGluc3RhbmNlIG9yIHNjYWxhciBvYmplY3QuIAotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9wcmludF9kZXNjcmlwdGlvbi4zIGIvbWFuL3ByaW50X2Rlc2NyaXB0aW9uLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3ByaW50X2Rlc2NyaXB0aW9uLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9wcmludF9taWIuMyBiL21hbi9wcmludF9taWIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcHJpbnRfbWliLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9wcmludF9vYmppZC4zIGIvbWFuL3ByaW50X29iamlkLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3ByaW50X29iamlkLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9wcmludF92YWx1ZS4zIGIvbWFuL3ByaW50X3ZhbHVlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3ByaW50X3ZhbHVlLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9wcmludF92YXJpYWJsZS4zIGIvbWFuL3ByaW50X3ZhcmlhYmxlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3ByaW50X3ZhcmlhYmxlLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9yZWFkX2FsbF9taWJzLjMgYi9tYW4vcmVhZF9hbGxfbWlicy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9yZWFkX2FsbF9taWJzLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9yZWFkX2NvbmZpZy4zLmRlZiBiL21hbi9yZWFkX2NvbmZpZy4zLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI4MGQyMS4uMDAwMDAwMAotLS0gYS9tYW4vcmVhZF9jb25maWcuMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotLlRIIFJFQURfQ09ORklHIDMgIjIzIEZlYiAyMDAzIiAiIiAiTmV0LVNOTVAiCi0uU0ggTkFNRQotcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIsIHJlZ2lzdGVyX3ByZW1pYl9oYW5kbGVyCi11bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyLCByZWdpc3Rlcl9taWJfaGFuZGxlcnMsIHJlYWRfY29uZmlncywKLXJlYWRfcHJlbWliX2NvbmZpZ3MsIGNvbmZpZ19wZXJyb3IsIGNvbmZpZ19wd2FybiAtIHJlYWRfY29uZmlnIGZ1bmN0aW9ucwotLlNIIFNZTk9QU0lTCi0uQiAjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgotLlBQCi0uQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgotLmJyCi0uQkkgIiAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiBmaWxlUHJlZml4ICIsCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB0b2tlbiAsCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiJ1c2FnZUxpbmUgIik7IgotLlBQCi0uQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgotLmJyCi0uQkkgIiAgcmVnaXN0ZXJfcHJlbWliX2hhbmRsZXIoY29uc3QgY2hhciAqIiBmaWxlUHJlZml4ICIsIAotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdG9rZW4gLAotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNoYXIgKiksIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHVzYWdlTGluZSAiKTsiCi0uUFAKLS5CSSAidm9pZCB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgZmlsZVByZWZpeCAiLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHRva2VuICIpOyIKLS5QUAotLkIgc3RydWN0IGNvbmZpZ19saW5lICoKLS5icgotLkJJICIgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICwKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjaGFyICopLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqInVzYWdlTGluZSAiKTsiCi0uUFAKLS5CIHN0cnVjdCBjb25maWdfbGluZSAqCi0uYnIKLS5CSSAiICByZWdpc3Rlcl9hcHBfcHJlbWliX2hhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAsCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdXNhZ2VMaW5lICIpOyIKLS5QUAotLkJJICJ2b2lkIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gIik7IgotLlBQCi0uQkkgInZvaWQgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoY2hhciAqIiBsZWFkICIpOyIKLS5QUAotLkIgInZvaWQgcmVhZF9jb25maWdzKHZvaWQpOyIKLS5QUAotLkIgInZvaWQgcmVhZF9wcmVtaWJfY29uZmlncyh2b2lkKTsiCi0uUFAKLS5CSSAidm9pZCBjb25maWdfcHdhcm4oY29uc3QgY2hhciAqIiBzdHJpbmcgIik7IgotLmJyCi0uQkkgInZvaWQgY29uZmlnX3BlcnJvcihjb25zdCBjaGFyICoiIHN0cmluZyAiKTsiCi0KLS5TSCBERVNDUklQVElPTgotVGhlIGZ1bmN0aW9ucyBhcmUgYSBmYWlybHkgZXh0ZW5zaWJsZSBzeXN0ZW0gb2YgcGFyc2luZyB2YXJpb3VzCi1jb25maWd1cmF0aW9uIGZpbGVzIGF0IHRoZSBydW4gdGltZSBvZiBhbiBhcHBsaWNhdGlvbi4gIFRoZQotY29uZmlndXJhdGlvbiBmaWxlIGZsb3cgaXMgYnJva2VuIGludG8gdGhlIGZvbGxvd2luZyBwaGFzZXM6Ci0uUlMgNAotLlRQIDQKLTEuCi1SZWdpc3RyYXRpb24gb2YgaGFuZGxlcnMuCi0uVFAKLTIuCi1SZWFkaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBwcmUtTUlCIHBhcnNpbmcgcmVxdWlyZW1lbnRzLgotLlRQCi0zLgotUmVhZGluZyBhbmQgcGFyc2luZyBvZiB0aGUgdGV4dHVhbCBNSUIgZmlsZXMuCi0uVFAKLTQuCi1SZWFkaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMuCi0uVFAKLTUuCi1PcHRpb25hbGx5IHJlLXJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgYSBmdXR1cmUgZGF0ZS4KLS5SRQotLlBQCi1UaGUgaWRlYSBpcyB0aGF0IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIGlzIGFibGUgdG8gcmVnaXN0ZXIKLS5JIGhhbmRsZXJzCi1mb3IgY2VydGFpbgotLkkgdG9rZW5zCi1zcGVjaWZpZWQgaW4gY2VydGFpbiB0eXBlcyBvZgotLkkgZmlsZXMuCi1UaGUgCi0uQiByZWFkX2NvbmZpZ3MoKQotZnVuY3Rpb24gY2FuIHRoZW4gYmUgY2FsbGVkIHRvIGxvb2sgZm9yIGFsbCB0aGUgZmlsZXMgdGhhdCBpdCBoYXMKLXJlZ2lzdHJhdGlvbnMgZm9yLCBmaW5kIHRoZSBmaXJzdCB3b3JkIG9uIGVhY2ggbGluZSwgYW5kIHBhc3MgdGhlCi1yZW1haW5kZXIgdG8gdGhlIGFwcHJvcHJpYXRlbHkgcmVnaXN0ZXJlZCBoYW5kbGVyLgotLlNIIFRPS0VOIEhBTkRMRVJTCi0uUFAKLUhhbmRsZXIgZnVuY3Rpb25zIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgotLlBQCi0uUlMKLS5CSSAidm9pZCBoYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gIiwgY2hhciAqIiBsaW5lICIpOyIKLS5SRQotLlBQCi1UaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzLCB0aGUgZmlyc3QgYmVpbmcgdGhlCi10b2tlbiB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uICh3aGljaCB3b3VsZCBiZSBvbmUgb2YKLXRoZSB0b2tlbnMgdGhhdCB0aGUgZnVuY3Rpb24gaGFkIGJlZW4gcmVnaXN0ZXJlZCBmb3IpLCBhbmQgdGhlIHNlY29uZAotYmVpbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGxpbmUgYmV5b25kIHRoZSB3aGl0ZQotc3BhY2UgZm9sbG93aW5nIHRoZSB0b2tlbi4KLS5TSCBSRVNPVVJDRSBGUkVFSU5HIEhBTkRMRVJTCi0uUFAKLUlmIHRoZSBwYXJhbWV0ZXIKLS5JIHJlbGVhc2VyCi1wYXNzZWQgdG8KLS5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyCi1pcyBub24tTlVMTCwgdGhlbiB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkIGlzIGNhbGxlZCBpZiBhbmQgd2hlbiB0aGUKLWNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHJlLXJlYWQuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmcmVlIGFueQotcmVzb3VyY2VzIGFsbG9jYXRlZCBieSB0aGUgdG9rZW4gaGFuZGxlciBmdW5jdGlvbiBhbmQgcmVzZXQgaXRzIG5vdGlvbgotb2YgdGhlIGNvbmZpZ3VyYXRpb24gdG8gaXRzIGRlZmF1bHQuICBUaGUgdG9rZW4gaGFuZGxlciBmdW5jdGlvbiB3aWxsCi10aGVuIGJlIGNhbGxlZCBhZ2Fpbi4gIE5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSByZXNvdXJjZSBmcmVlaW5nCi1oYW5kbGVyLgotLlNIIFJFR0lTVEVSSU5HIEEgSEFORExFUgotLlRQCi0uQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCi1UaGUKLS5CIGhhbmRsZXIoKQotZnVuY3Rpb24gYWJvdmUgY291bGQgYmUgcmVnaXN0ZXJlZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQotLkkgc25tcC5jb25mLAotd2l0aCB0aGUgdG9rZW4KLS5JIGdlbmVyaWNUb2tlbgotYW5kIHRoZSBoZWxwIHN0cmluZyAoZGlzY3Vzc2VkIGxhdGVyKQotLkkgIiIiQVJHMSBbQVJHMl0iIiIKLXVzaW5nIHRoZSBmb2xsb3dpbmcgY2FsbCB0byB0aGUgCi0uQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCi1mdW5jdGlvbjoKLS5QUAotLlJTCi0uUlMKLXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImdlbmVyaWNUb2tlbiIsIGhhbmRsZXIsIE5VTEwsICJBUkcxIFtBUkcyXSIpOwotLlJFCi0uUkUKLS5JUAotVGhpcyB3b3VsZCByZWdpc3RlciB0aGUKLS5CIGhhbmRsZXIoKQotZnVuY3Rpb24gc28gdGhhdCBpdCB3aWxsIGdldCBjYWxsZWQgZXZlcnkgdGltZSB0aGUgZmlyc3Qgd29yZCBvZiBhCi1saW5lIGluIHRoZSAKLS5JIHNubXAuY29uZgotY29uZmlndXJhdGlvbiBmaWxlKHMpIG1hdGNoZXMgImdlbmVyaWNUb2tlbiIgKHNlZSAKLS5CIHJlYWRfY29uZmlncygpIAotYmVsb3cpLgotLlRQCi0uQiByZWdpc3Rlcl9wcmVtaWJfaGFuZGxlcigpCi1UaGUgCi0uQiByZWdpc3Rlcl9wcmVtaWJfaGFuZGxlcigpCi1mdW5jdGlvbiB3b3JrcyBpZGVudGljYWxseSB0byB0aGUgCi0uQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCi1mdW5jdGlvbiBidXQgaXMgaW50ZW5kZWQgZm9yIGNvbmZpZyBmaWxlIHRva2VucyB0aGF0IG5lZWQgdG8gYmUgcmVhZAotaW4gYmVmb3JlIHRoZSB0ZXh0dWFsIE1JQnMgYXJlIHJlYWQgaW4sIHByb2JhYmx5IGJlY2F1c2UgdGhleSB3aWxsIGJlCi11c2VkIHRvIGNvbmZpZ3VyZSB0aGUgTUlCIHBhcnNlci4gIEl0IGlzIHJhcmVseSB0aGUgY2FzZSB0aGF0IGFueXRoaW5nIAotYnV0IHRoZSBTTk1QIGxpYnJhcnkgaXRzZWxmIHNob3VsZCBuZWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgotLlRQCi0uQiB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKLVJlbW92ZXMgdGhlIHJlZ2lzdGVyZWQgY29uZmlndXJhdGlvbiBoYW5kbGVyIGZvciB0aGUKLS5JIGZpbGVQcmVmaXgKLWFuZAotLklSIHRva2VuIC4KLQotLlRQCi0uQiByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoKQotLlRQCi0uQiByZWdpc3Rlcl9hcHBfcHJlbWliX2hhbmRsZXIoKQotLlRQCi0uQiB1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigpCi1UaGVzZSBmdW5jdGlvbnMgYXJlIGFuYWxhZ291cyB0byAKLS5CUiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpICIsICIgcmVnaXN0ZXJfcHJlbWliX2hhbmRsZXIoKSAiIGFuZCAiCi0uQiB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKLWJ1dCBkb24ndCByZXF1aXJlIHRoZSBmaWxlIHR5cGUgYXJndW1lbnQgKHdoaWNoIGlzIGZpbGxlZCBpbiBieSB0aGUKLWFwcGxpY2F0aW9uKS4gIEl0IGlzIGludGVuZGVkIHRoYXQgTUlCIG1vZHVsZXMgd3JpdHRlbiBmb3IgdGhlIGFnZW50Ci11c2UgdGhlc2UgZnVuY3Rpb25zIHRvIGFsbG93IHRoZSBhZ2VudCB0byBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHdoaWNoCi1jb25maWd1cmF0aW9uIGZpbGVzIGFyZSByZWFkICh0eXBpY2FsbHkgdGhlCi0uSSBzbm1wZC5jb25mCi1maWxlcykuCi0uU0ggSEVMUCBTVFJJTkdTCi0uUFAKLVRoZQotLkkgdXNhZ2VMaW5lCi1wYXJhbWV0ZXIgcGFzc2VkIHRvCi0uQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCi1hbmQgc2ltaWxhciBjYWxscywgaXMgdXNlZCB0byBkaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gd2hlbiB0aGUKLS5CIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKCkKLWZ1bmN0aW9uIGlzIGNhbGxlZC4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBhbGwgb2YgdGhlIGFwcGxpY2F0aW9ucwotd2hlbiB0aGUgCi0uQiAtSAotZmxhZyBpcyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIEl0IHByaW50cyBhIHN1bW1hcnkgb2YgYWxsIG9mIHRoZQotY29uZmlndXJhdGlvbiBmaWxlIGxpbmVzLCBhbmQgdGhlIGFzc29jaWF0ZWQgZmlsZXMsIHRoYXQgdGhlCi1jb25maWd1cmF0aW9uIHN5c3RlbSB1bmRlcnN0YW5kcy4gIFRoZQotLkkgdXNhZ2VMaW5lCi1wYXJhbWV0ZXIgc2hvdWxkIGJlIGEgbGlzdCBvZiBhcmd1bWVudHMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIHRva2VuLCBhbmQKLW5vdCBhIGxlbmd0aHkgZGVzY3JpcHRpb24gKHdoaWNoIHNob3VsZCBnbyBpbnRvIGEgbWFudWFsIHBhZ2UKLWluc3RlYWQpLiAgVGhlCi0uSSBsZWFkCi1wcmVmaXggd2lsbCBiZSBwcmVwZW5kZWQgdG8gZWFjaCBsaW5lIHRoYXQgdGhlIGZ1bmN0aW9uIHByaW50cyB0bwotc3RkZXJyLCB3aGVyZSBpdCBkaXNwbGF5cyBpdHMgb3V0cHV0LgotLlBQCi1UaGUKLS5CIGluaXRfc25tcCgpCi1mdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUKLS5CIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKCkKLWZ1bmN0aW9uIGlzIGNhbGxlZCwgc28gdGhhdCB0aGUgbGlicmFyeSBjYW4gcmVnaXN0ZXIgaXRzIGNvbmZpZ3VyYXRpb24gCi1maWxlIGRpcmVjdGl2ZXMgYXMgd2VsbCBmb3IgdGhlIAotLkIgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoKQotZnVuY3Rpb24gdG8gZGlzcGxheS4KLS5TSCBSRUFESU5HIENPTkZJR1VSQVRJT04gRklMRVMKLS5UUAotLkIgaW5pdF9zbm1wKCkKLU9uY2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gdG9rZW4gcGFyc2VycyBoYXZlIGJlZW4gcmVnaXN0ZXJlZCwKLS5CIGluaXRfc25tcCgpCi1zaG91bGQgYmUgY2FsbGVkLiAgSXQgd2lsbCBwYXJzZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRva2VucwotcmVnaXN0ZXJlZCB3aXRoCi0uQiByZWdpc3Rlcl9wcmVtaWJfaGFuZGxlcigpLAotcmVhZCBpbiB0aGUgdGV4dHVhbCBNSUIgZmlsZXMgdXNpbmcKLS5CIGluaXRfbWliKCksCi1hbmQgZmluYWxseSBwYXJzZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRva2VucyByZWdpc3RlcmVkIHdpdGggCi0uQlIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKSAuCi0uUFAKLUlmIHRoZSAKLS5CIGluaXRfc25tcCgpCi1mdW5jdGlvbiBpcyB1c2VkLCBub25lIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG5lZWQgdG8gYmUgY2FsbGVkIGJ5IAotdGhlIGFwcGxpY2F0aW9uOgotLlRQCi0uQiByZWdpc3Rlcl9taWJfaGFuZGxlcnMoKQotVGhlIFNOTVAgbGlicmFyeSdzIHJvdXRpbmUgdG8gcmVnaXN0ZXIgaXRzIGNvbmZpZ3VyYXRpb24gZmlsZQotaGFuZGxlcnMuCi0uVFAKLS5CIHJlYWRfcHJlbWliX2NvbmZpZ3MoKQotVGhlIHJvdXRpbmUgdGhhdCBwYXJzZXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRva2VucyByZWdpc3RlcmVkCi10byBiZSBkZWFsdCB3aXRoIGJlZm9yZSB0aGUgdGV4dHVhbCBNSUJzIGFyZSByZWFkIGluLiAgU2VlIAotLkIgcmVhZF9jb25maWdzKCkKLWJlbG93LgotLlRQCi0uQiByZWFkX2NvbmZpZ3MoKQotUmVhZHMgYWxsIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGl0IGNhbiBmaW5kIGluIHRoZSAKLS5JIFNOTVBDT05GUEFUSAotZW52aXJvbm1lbnQgdmFyaWFibGUgKG9yIGl0cyBkZWZhdWx0IHZhbHVlKSBmb3IgdG9rZW5zIGFuZAotYXBwcm9wcmlhdGVseSBjYWxscyB0aGUgaGFuZGxlcnMgcmVnaXN0ZXJlZCB0byBpdCwgb3IgcHJpbnRzIGEKLSJVbmtub3duIHRva2VuIiB3YXJuaW5nIG1lc3NhZ2UuICBJdCBsb29rcyBmb3IgYW55IGZpbGUgdGhhdCBpdCBoYXMKLXByZXZpb3VzbHkgcmVjZWl2ZWQgYSByZWdpc3RyYXRpb24gcmVxdWVzdCBmb3IuCi0uU0ggQ09ORklHVVJBVElPTiBGSUxFUyBSRUFECi0uUFAKLVRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHJlYWQgYXJlIGZvdW5kIGJ5IHVzaW5nIHRoZSBjb2xvbiBzZXBhcmF0ZWQKLS5JIFNOTVBDT05GUEFUSAotZW52aXJvbm1lbnQgdmFyaWFibGUgKG9yIGl0cyBkZWZhdWx0IHZhbHVlLCB3aGljaCB3aWxsIGJlCi1TWVNDT05GRElSL3NubXAsIGZvbGxvd2VkIGJ5Ci1EQVRBRElSL3NubXAsIGZvbGxvd2VkIGJ5IExJQkRJUi9zbm1wLCBmb2xsb3dlZCBieSAkSE9NRS8uc25tcCkgYW5kCi1yZWFkaW5nIGluIHRoZSBmaWxlcyBmb3VuZCB0aGF0IG1hdGNoIGJvdGggdGhlIHByZWZpeCByZWdpc3RlcmVkIGFuZAotdGhlIHR3byBzdWZmaXhlcwotLkkgLmNvbmYKLWFuZAotLkkgLmxvY2FsLmNvbmYuCi1UaGUgaWRlYSBiZWhpbmQgdGhlIHR3byBkaWZmZXJlbnQgc3VmZml4ZXMgaXMgdGhhdCB0aGUgZmlyc3QgZmlsZSBjYW4KLWJlIHNoYXJlZCAodmlhIHJkaXN0IG9yIGFuIE5GUyBtb3VudCkgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mCi1tYWNoaW5lcyBhbmQgdGhlIHNlY29uZCBmaWxlIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBsb2NhbCBzZXR0aW5ncwotZm9yIG9uZSBwYXJ0aWN1bGFyIG1hY2hpbmUuICBUaGV5IGRvIG5vdCBuZWVkIHRvIGJlIHByZXNlbnQsIGFuZCB3aWxsCi1vbmx5IGJlIHJlYWQgaWYgZm91bmQuCi0uU0ggRVJST1IgSEFORExJTkcgRlVOQ1RJT05TCi0uUFAKLVRoZSB0d28gZnVuY3Rpb25zCi0uQiBjb25maWdfcHdhcm4oKQotYW5kCi0uQiBjb25maWdfcGVycm9yKCkKLWJvdGggdGFrZSBhbiBlcnJvciBzdHJpbmcgYXMgYW4gYXJndW1lbnQgYW5kIHByaW50IGl0IHRvIHN0ZGVyciBhbG9uZwotd2l0aCB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgdGhhdCBjYXVzZWQgdGhlIGVycm9yLiAgQSBjYWxsIHRvIHRoZQotc2Vjb25kIGZ1bmN0aW9uIHdpbGwgYWxzbyBmb3JjZSAKLS5CIHJlYWRfY29uZmlncygpIAotdG8gZXZlbnR1YWxseSByZXR1cm4gd2l0aCBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcgdG8gaXQncyBjYWxsaW5nCi1mdW5jdGlvbiB0aGF0IGl0IHNob3VsZCBhYm9ydCB0aGUgb3BlcmF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi4KLS5TSCAiRU5WSVJPTk1FTlQgVkFSSUFCTEVTIgotLlRQIDEwCi1TTk1QQ09ORlBBVEgKLUEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBjb25maWd1cmF0aW9uCi1maWxlcyBpbi4KLURlZmF1bHQ6IFNZU0NPTkZESVIvc25tcDpEQVRBRElSL3NubXA6TElCRElSL3NubXA6JEhPTUUvLnNubXAKLS5TSCAiU0VFIEFMU08iCi0uQlIgbWliX2FwaSAiKDMpLCAiIHNubXBfYXBpICgzKQotLlwiIExvY2FsIFZhcmlhYmxlczoKLS5cIiAgbW9kZTogbnJvZmYKLS5cIiBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vcmVhZF9taWIuMyBiL21hbi9yZWFkX21pYi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9yZWFkX21pYi4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcmVhZF9tb2R1bGUuMyBiL21hbi9yZWFkX21vZHVsZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9yZWFkX21vZHVsZS4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcmVhZF9tb2R1bGVfbm9kZS4zIGIvbWFuL3JlYWRfbW9kdWxlX25vZGUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcmVhZF9tb2R1bGVfbm9kZS4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcmVhZF9vYmppZC4zIGIvbWFuL3JlYWRfb2JqaWQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcmVhZF9vYmppZC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc2h1dGRvd25fbWliLjMgYi9tYW4vc2h1dGRvd25fbWliLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3NodXRkb3duX21pYi4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcC1icmlkZ2UtbWliLjEgYi9tYW4vc25tcC1icmlkZ2UtbWliLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmMmI1ZQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9zbm1wLWJyaWRnZS1taWIuMQpAQCAtMCwwICsxLDIwOCBAQAorJ1wiIHQKKy5cIiAgICAgVGl0bGU6IHNubXAtYnJpZGdlLW1pYgorLlwiICAgIEF1dGhvcjogSmVucyBPc3RlcmthbXAgPGplbnNAbGludXgudm5ldC5pYm0uY29tPgorLlwiIEdlbmVyYXRvcjogRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgdjEuNzUuMiA8aHR0cDovL2RvY2Jvb2suc2YubmV0Lz4KKy5cIiAgICAgIERhdGU6IDAzLzI2LzIwMTAKKy5cIiAgICBNYW51YWw6IE5ldC1TTk1QCisuXCIgICAgU291cmNlOiBodHRwOi8vd3d3LmlibS5jb20vIHY2CisuXCIgIExhbmd1YWdlOiBFbmdsaXNoCisuXCIKKy5USCAiU05NUFwtQlJJREdFXC1NSUIiIDEgIjI2IE1hciAyMDEwIiAiaHR0cDovL3d3d1wmLmlibVwmLmNvbS8gdjYiICJOZXRcLVNOTVAiCisuXCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy5cIiAqIHNldCBkZWZhdWx0IGZvcm1hdHRpbmcKKy5cIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLlwiIGRpc2FibGUgaHlwaGVuYXRpb24KKy5uaAorLlwiIGRpc2FibGUganVzdGlmaWNhdGlvbiAoYWRqdXN0IHRleHQgdG8gbGVmdCBtYXJnaW4gb25seSkKKy5hZCBsCisuXCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy5cIiAqIE1BSU4gQ09OVEVOVCBTVEFSVFMgSEVSRSAqCisuXCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy5TSCAiTkFNRSIKK3NubXAtYnJpZGdlLW1pYiBcLSBwcm92aWRlIExpbnV4IGJyaWRnZSBpbmZvcm1hdGlvbiB2aWEgU05NUAorLlNIICJTWU5PUFNJUyIKKy5IUCBcdydcZkJzbm1wXC1icmlkZ2VcLW1pYlxmUlwgJ3UKK1xmQnNubXBcLWJyaWRnZVwtbWliXGZSIHticmlkZ2V9CisuU0ggIkFSR1VNRU5UUyIKKy5QUAorVGhlIGZvbGxvd2luZyBhcmd1bWVudHMgYXJlIHJlcXVpcmVkOgorLlBQCitcZkJicmlkZ2VcZlIKKy5SUyA0CitUaGUgbmFtZSBvZiB0aGUgTGludXggYnJpZGdlIGZvciB3aGljaCB5b3Ugd2FudCB0byBwcm92aWRlIGluZm9ybWF0aW9uIHZpYSBTTk1QLCBlXCYuZ1wmLiBicjBcJi4KKy5SRQorLlNIICJERVNDUklQVElPTiIKKy5QUAorVGhlIHNubXBcLWJyaWRnZVwtbWliIGlzIGFuIGV4dGVuc2lvbiB0byBuZXRcLXNubXBcJi4gSXQgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgYSBicmlkZ2UgaW4gYSBMaW51eCBzeXN0ZW0gYW5kIGV4cG9ydHMgdGhlbSBmb3IgcXVlcnkgZnJvbSBvdGhlciAocmVtb3RlKSBzeXN0ZW1zIGZvciBtYW5hZ2VtZW50IHB1cnBvc2VzXCYuCisuU0ggIkNPTkZJR1VSQVRJT046IgorLlBQCitUaGUgcHJlZmVycmVkIG1ldGhvZCBvZiBzbm1wXC1icmlkZ2VcLW1pYiB0byBhdHRhY2ggdG8gbmV0XC1zbm1wIGlzIGFnZW50eFwmLiBGb3IgdGhpcyB0byB3b3JrLCB5b3Ugd2lsbCBoYXZlIHRvIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gL2V0Yy9zbm1wL3NubXBkXCYuY29uZiwKKy5zcAorLmlmIG4gXHtcCisuUlMgNAorLlx9CisubmYKKyAgICBtYXN0ZXIgYWdlbnR4CisgICAgCisuZmkKKy5pZiBuIFx7XAorLlJFCisuXH0KKy5QUAorcmVzdGFydCBzbm1wZCBhbmQgc3RhcnQgc25tcFwtYnJpZGdlXC1taWJcJi4gc25tcFwtYnJpZGdlXC1taWIgd2lsbCB0aGVuIGNvbm5lY3QgdG8gdGhlIHJ1bm5pbmcgc25tcGQgZGFlbW9uXCYuCisuUFAKK0Fub3RoZXIgd2F5IG9mIGF0dGFjaGluZyBzbm1wXC1icmlkZ2VcLW1pYiB0byBpcyB0byBydW4gaXQgYXMgYW4gZW1iZWRkZWQgcGVybCBtb2R1bGVcJi4gWW91IGhhdmUgdG8gYWRkCisuc3AKKy5pZiBuIFx7XAorLlJTIDQKKy5cfQorLm5mCisgICAgcGVybCBkbyAicGF0aCB0byBsb2NhdGlvbiBvZiBzbm1wXC1icmlkZ2VcLW1pYiIKKyAgICAKKy5maQorLmlmIG4gXHtcCisuUkUKKy5cfQorLlBQCithbmQgcmVzdGFydCBzbm1wZFwmLgorLlNIICJFWEFNUExFOiIKKy5QUAorRm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhpcyBtYW5wYWdlIGFuZCB0eXBlCisuc3AKKy5pZiBuIFx7XAorLlJTIDQKKy5cfQorLm5mCisgICAgcGVybCAvdXNyL2Jpbi9zbm1wXC1icmlkZ2VcLW1pYiBicjAKKyAgICAKKy5maQorLmlmIG4gXHtcCisuUkUKKy5cfQorLlBQCitZb3VcJ2xsIGdldCB0aGUgZm9sbG93aW5nIG91dHB1dDoKKy5zcAorLmlmIG4gXHtcCisuUlMgNAorLlx9CisubmYKKyAgICAgcmVnaXN0ZXJpbmcgYXQgXCYuMVwmLjNcJi42XCYuMVwmLjJcJi4xXCYuMTcKKyAgICAgcnVubmluZyBhcyBhIHN1YmFnZW50XCYuCisgICAgIGRvdDFxYnJpZGdlIGFnZW50IHN0YXJ0ZWRcJi4KKyAgICAgTkVUXC1TTk1QIHZlcnNpb24gNVwmLjRcJi4yXCYuMSBBZ2VudFggc3ViYWdlbnQgY29ubmVjdGVkCisgICAgIAorLmZpCisuaWYgbiBce1wKKy5SRQorLlx9CisuUFAKK05vdyBpdFwncyB0aW1lIGZvciBhIGZpcnN0IHRlc3Q6Cisuc3AKKy5pZiBuIFx7XAorLlJTIDQKKy5cfQorLm5mCisgICAgJCBleHBvcnQgTUlCUz0rQlJJREdFXC1NSUIKKyAgICAkIHNubXB3YWxrIGxvY2FsaG9zdCBcJi4xXCYuM1wmLjZcJi4xXCYuMlwmLjFcJi4xNworICAgIAorLmZpCisuaWYgbiBce1wKKy5SRQorLlx9CisuUFAKK1RoZSBvdXRwdXQgcHJvZHVjZWQgc2hvdWxkIGxvb2sgbGlrZQorLnNwCisuaWYgbiBce1wKKy5SUyA0CisuXH0KKy5uZgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cEJyaWRnZUhlbGxvVGltZSA9IElOVEVHRVI6IDE5OSBjZW50aVwtc2Vjb25kcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cEJyaWRnZUZvcndhcmREZWxheSA9IElOVEVHRVI6IDE0OTkgY2VudGlcLXNlY29uZHMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0XCYuMSA9IElOVEVHRVI6IDEKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0XCYuMyA9IElOVEVHRVI6IDMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0UHJpb3JpdHlcJi4xID0gSU5URUdFUjogMzIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0UHJpb3JpdHlcJi4zID0gSU5URUdFUjogMzIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0U3RhdGVcJi4xID0gSU5URUdFUjogZGlzYWJsZWQoMSkKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0U3RhdGVcJi4zID0gSU5URUdFUjogZGlzYWJsZWQoMSkKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RW5hYmxlXCYuMSA9IElOVEVHRVI6IGRpc2FibGVkKDIpCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydEVuYWJsZVwmLjMgPSBJTlRFR0VSOiBkaXNhYmxlZCgyKQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRQYXRoQ29zdFwmLjEgPSBJTlRFR0VSOiAyCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFBhdGhDb3N0XCYuMyA9IElOVEVHRVI6IDQKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RGVzaWduYXRlZFJvb3RcJi4xID0gU1RSSU5HOiAiODAwMFwmLjAwMTAxODM4MmM3OCIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RGVzaWduYXRlZFJvb3RcJi4zID0gU1RSSU5HOiAiODAwMFwmLjAwMTAxODM4MmM3OCIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RGVzaWduYXRlZENvc3RcJi4xID0gSU5URUdFUjogMAorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnREZXNpZ25hdGVkQ29zdFwmLjMgPSBJTlRFR0VSOiAwCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydERlc2lnbmF0ZWRCcmlkZ2VcJi4xID0gU1RSSU5HOiAiODAwMFwmLjAwMTAxODM4MmM3OCIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RGVzaWduYXRlZEJyaWRnZVwmLjMgPSBTVFJJTkc6ICI4MDAwXCYuMDAxMDE4MzgyYzc4IgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnREZXNpZ25hdGVkUG9ydFwmLjEgPSBTVFJJTkc6ICIzMjc2OSIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RGVzaWduYXRlZFBvcnRcJi4zID0gU1RSSU5HOiAiMzI3NzAiCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFBhdGhDb3N0MzJcJi4xID0gSU5URUdFUjogMgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRQYXRoQ29zdDMyXCYuMyA9IElOVEVHRVI6IDQKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcExlYXJuZWRFbnRyeURpc2NhcmRzID0gQ291bnRlcjMyOiAwCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBBZ2luZ1RpbWUgPSBJTlRFR0VSOiAzMDAgc2Vjb25kcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwRmRiQWRkcmVzc1wmLlwnXCYuXCYuXCYuOCx4XCcgPSBTVFJJTkc6IDA6MTA6MTg6Mzg6MmM6NzgKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcEZkYkFkZHJlc3NcJi5cJ1wmLiFeL0J8XCcgPSBTVFJJTkc6IDA6MjE6NWU6MmY6NDI6N2MKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcEZkYlBvcnRcJi5cJ1wmLlwmLlwmLjgseFwnID0gSU5URUdFUjogMQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwRmRiUG9ydFwmLlwnXCYuIV4vQnxcJyA9IElOVEVHRVI6IDMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcEZkYlN0YXR1c1wmLlwnXCYuXCYuXCYuOCx4XCcgPSBJTlRFR0VSOiBsZWFybmVkKDMpCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBGZGJTdGF0dXNcJi5cJ1wmLiFeL0J8XCcgPSBJTlRFR0VSOiBsZWFybmVkKDMpCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0XCYuMSA9IElOVEVHRVI6IDEKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRcJi4zID0gSU5URUdFUjogMworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydE1heEluZm9cJi4xID0gSU5URUdFUjogMTUwMCBieXRlcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydE1heEluZm9cJi4zID0gSU5URUdFUjogMTUwMCBieXRlcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydEluRnJhbWVzXCYuMSA9IENvdW50ZXIzMjogMTgwODIgZnJhbWVzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0SW5GcmFtZXNcJi4zID0gQ291bnRlcjMyOiAxNTQ2MDcyIGZyYW1lcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydE91dEZyYW1lc1wmLjEgPSBDb3VudGVyMzI6IDExNjAxIGZyYW1lcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydE91dEZyYW1lc1wmLjMgPSBDb3VudGVyMzI6IDEwOTg4IGZyYW1lcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydEluRGlzY2FyZHNcJi4xID0gQ291bnRlcjMyOiAwIGZyYW1lcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydEluRGlzY2FyZHNcJi4zID0gQ291bnRlcjMyOiAwIGZyYW1lcworICAgIAorLmZpCisuaWYgbiBce1wKKy5SRQorLlx9CisuU0ggIkJVR1MiCisuc3AKKy5SUyA0CisuaWUgbiBce1wKK1xoJy0wNCcgMS5caCcrMDEnXGMKKy5cfQorLmVsIFx7XAorLnNwIC0xCisuSVAgIiAgMS4iIDQuMgorLlx9Citzbm1wXC1icmlkZ2VcLW1pYiBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBvbmUgYnJpZGdlIHdoaWNoIGhhcyB0byBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lXCYuCisuUkUKKy5zcAorLlJTIDQKKy5pZSBuIFx7XAorXGgnLTA0JyAyLlxoJyswMSdcYworLlx9CisuZWwgXHtcCisuc3AgLTEKKy5JUCAiICAyLiIgNC4yCisuXH0KK05vdCBhbGwgZWxlbWVudHMgb2YgUkZDIDQxODggYmVjYXVzZSB0aGV5IGFyZSBlaXRoZXIgbm90IGF2YWlsYWJsZSBpbiBzeXNmcyBvciBkaWZmaWN1bHQgdG8gZXh0cmFjdCBmcm9tIHRoZSBleGlzdGluZyBkYXRhXCYuCisuUkUKKy5QUAorLlNIICJTRUUgQUxTTyIKKy5QUAorXGZCc25tcGQuY29uZlxmUig1KSwKK1xmQk5ldDo6U05NUFxmUigzKQorLlNIICJBVVRIT1IiCisuUFAKK1xmQkplbnMgT3N0ZXJrYW1wXGZSIDxcJmplbnNAbGludXhcJi52bmV0XCYuaWJtXCYuY29tXCY+CisuUlMgNAorRGV2ZWxvcGVyCisuUkUKKy5TSCAiQ09QWVJJR0hUIgorLmJyCitDb3B5cmlnaHQgXChjbyAyMDA5LCAyMDEwIElCTSBDb3JwLiwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorLmJyCisuUFAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorLlBQCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZVwmLgorLlBQCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVFwmLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRVwmLgorLnNwCmRpZmYgLS1naXQgYS9tYW4vc25tcC5jb25mLjUuZGVmIGIvbWFuL3NubXAuY29uZi41LmRlZgppbmRleCA0MzJlMDRiLi40NjIwM2QwIDEwMDY0NAotLS0gYS9tYW4vc25tcC5jb25mLjUuZGVmCisrKyBiL21hbi9zbm1wLmNvbmYuNS5kZWYKQEAgLTEsNCArMSw0IEBACi0uVEggU05NUC5DT05GIDUgIjIxIEZlYiAyMDA3IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVAuQ09ORiA1ICIyMSBBcHIgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wLmNvbmYgLSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgTmV0LVNOTVAgYXBwbGljYXRpb25zCiAuU0ggREVTQ1JJUFRJT04KQEAgLTEyLDYgKzEyLDMyIEBACiBjb250YWluaW5nIHRoZSBzZXR0aW5ncyBzaGFyZWQgYnkgYWxsIHVzZXJzIG9mIHRoZSBzeXN0ZW0uCiBcZkN+Ly5zbm1wL3NubXAuY29uZlxmUiBpcyBhIHBlcnNvbmFsIGZpbGUsIHdpdGggdGhlIHNldHRpbmdzCiBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgdXNlci4KKy5TSCBIT1NULVNQRUNJRklDIEZJTEVTCitIb3N0LXNwZWNpZmljIGZpbGVzIG1heSBhbHNvIGJlIGxvYWRlZCBhbmQgd2lsbCBiZSBzZWFyY2hlZCBmb3IgaWYgYQordHJhbnNwb3J0IG5hbWUgaXMgc3BlY2lmaWVkIHRoYXQgbWF0Y2hlcyBhIFxmSVBBVEgvaG9zdHMvSE9TVC5jb25mXGZSCitmaWxlLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgYSBwYXJ0aWN1bGFyIGhvc3QgdG8gdXNlIFNOTVB2MmMgYnkKK2RlZmF1bHQgeW91IGNvdWxkIGNyZWF0ZSBhIH4vLnNubXAvaG9zdHMvTkFNRS5jb25mIGZpbGUgYW5kIGluIGl0IHB1dDoKKy5SUworLlBQCitkZWZWZXJzaW9uIDJjCisuUkUKKy5QUAorQW55IGNvbm5lY3Rpb25zIHNldCB0byBjb25uZWN0IHRvIHRoZSBob3N0bmFtZSBcZklOQU1FXGZSIHdpbGwgdXNlCitTTk1QdjJjLiAgQWxzbyBzZWUgdGhlIFxmSXRyYW5zcG9ydFxmUiB0b2tlbiBiZWxvdyBmb3IgYWRkaXRpb25hbAoraG9zdC1zcGVjaWZpYyBleGFtcGxlcy4KKy5QUAorSG9zdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBsb2FkZWQgYXQgdGhlIHRpbWUgdGhlCitjb25uZWN0aW9uIGlzIG9wZW5lZC4gIFRodXMgdGhleSdyZSBnZW5lcmFsbHkgbG9hZGVkIGFmdGVyIGFsbCBvdGhlcgorY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgc2V0dGluZ3MgZnJvbSB0aGUKK2dlbmVyaWMgZmlsZXMuCisuUFAKK1RvIGF2b2lkIGxvYWRpbmcgYW55IGhvc3Qtc3BlY2lmaWMgY29uZmlnIGZpbGVzIHNldAorImRvbnRMb2FkSG9zdENvbmZpZyB0cnVlIiBpbiB5b3VyIHNubXAuY29uZiBmaWxlLgorLlNIIENPTU1BTkQtTElORSBPUFRJT05TCitBbGwgb2YgdGhlIHRva2VucyBkZXNjcmliZWQgaW4gdGhpcyBmaWxlIGNhbiBiZSB1c2VkIG9uIHRoZSBjb21tYW5kCitsaW5lIG9mIE5ldC1TTk1QIGFwcGxpY2F0aW9ucyBhcyB3ZWxsIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggIlwtXC0iLgorRUcsIHNwZWNpZnlpbmcgXGZJXC1cLWRvbnRMb2FkSG9zdENvbmZpZz10cnVlXGZSIG9uIHRoZSBjb21tYW5kIGxpbmUgd2lsbAordHVybiBvZiBsb2FkaW5nIG9mIHRoZSBob3N0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAuU0ggSU1QT1JUQU5UIE5PVEUKIFNldmVyYWwgb2YgdGhlc2UgZGlyZWN0aXZlcyBtYXkgY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24KIChzdWNoIGFzIHBhc3MgcGhyYXNlcykuICBDb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgaW5jbHVkZSBzdWNoCkBAIC0zOCwxNyArNjQsNDAgQEAKIFNlZSB0aGUgXGZJc25tcGNtZCgxKVxmUiBtYW51YWwgcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgogLklQCiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0b2tlbiBpcyAxNjEuCisuSVAgInRyYW5zcG9ydCBIT1NUU1BFQ0lGSUVSIgorVGhpcyBzcGVjaWFsIHRva2VuIHNob3VsZCBnbyBpbnRvIGEgaG9zdG5hbWUtc3BlY2lmaWMgY29uZmlndXJhdGlvbgorZmlsZSBpbiBhIFxmSWhvc3RzXGZSIHN1Yi1kaXJlY3RvcnkuICBGb3IgZXhhbXBsZSBpZiB0aGUgZmlsZQorXGZJaG9zdHMvZm9vLmNvbmZcZlIgZXhpc3RzIGluIHRoZSBzZWFyY2ggcGF0aCBpdCB3aWxsIGJlIGxvYWRlZCBpZiBhCit0cmFuc3BvcnQgbmFtZSBvZiBcZklmb29cZlIgd2FzIHVzZWQuICBXaXRoaW4gdGhlIGZvby5jb25mIGZpbGUgeW91IG1heQorcHV0IGJvdGggZ2VuZXJhbCBzbm1wLmNvbmYgc2V0dGluZ3MgYXMgd2VsbCBhcyBhIHNwZWNpYWwKK1xmSXRyYW5zcG9ydFxmUiBzdHJpbmcgdG8gc3BlY2lmeSB0aGUgZGVzdGluYXRpb24gdG8gY29ubmVjdCB0by4gIEZvcgorZXhhbXBsZSwgcHV0dGluZzoKKy5SUworLklQCit0cmFuc3BvcnQgdGNwOmZvby5leGFtcGxlLmNvbTo5ODc2CisuUkUKKy5JUAoraW4gdGhlIFxmSWhvc3RzL2Zvby5jb25mXGZSIGZpbGUgd2lsbCBtYWtlIGFwcGxpY2F0aW9ucyByZWZlcmVuY2luZwordGhlIFxmSWZvb1xmUiBob3N0bmFtZSAoZS5nLiBcZklzbm1wZ2V0XGZSKSB0byBhY3R1YWxseSBjb25uZWN0IHZpYQorVENQIHRvIFxmSWZvby5leG1hcGxlLmNvbVxmUiBvbiBwb3J0IDk4NzYuCiAuSVAgImRlZlZlcnNpb24gKDF8MmN8MykiCiBkZWZpbmVzIHRoZSBkZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2UuCi1UaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkItdlxmUiBvcHRpb24uCitUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkJcLXZcZlIgb3B0aW9uLgogLklQICJkZWZDb21tdW5pdHkgU1RSSU5HIgogZGVmaW5lcyB0aGUgZGVmYXVsdCBjb21tdW5pdHkgdG8gdXNlIGZvciBTTk1QdjEgYW5kIFNOTVB2MmMgcmVxdWVzdHMuCi1UaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkItY1xmUiBvcHRpb24uCitUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkJcLWNcZlIgb3B0aW9uLgogLlwiLklQICJkdW1wUGFja2V0ICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgorLklQICJhbGlhcyBOQU1FIERFRklOSVRJT04iCitDcmVhdGVzIGFuIGFsaWFzZWQgdGllZCB0byBOQU1FIGZvciBhIGdpdmVuIHRyYW5zcG9ydCBkZWZpbml0aW9uLiAgVGhlCithbGlhcyBjYW4gdGhlIGJlIHJlZmVycmVkIHRvIHVzaW5nIGFuIGFsaWFzOiBwcmVmaXguICBFZywgYSBsaW5lIG9mCisiYWxpYXMgaGVyZSB1ZHA6MTI3LjAuMC4xOjYxNjEiIHdvdWxkIGFsbG93IHlvdSB0byB1c2UgYSBkZXN0aW5hdGlvbgoraG9zdCBvZiAiYWxpYXM6aGVyZSIgaW5zdGVhZCBvZiAidWRwOjEyNy4wLjAuMTo2MTYxIi4gIFRoaXMgYmVjb21lcworbW9yZSB1c2VmdWwgd2l0aCBjb21wbGV4IHRyYW5zcG9ydCBhZGRyZXNzZXMgaW52b2x2aW5nIElQdjYgYWRkcmVzc2VzLAorZXRjLgogLklQICJkdW1wUGFja2V0IHllcyIKIGRlZmluZXMgd2hldGhlciB0byBkaXNwbGF5IGEgaGV4YWRlY2ltYWwgZHVtcCBvZiB0aGUgcmF3IFNOTVAgcmVxdWVzdHMKIHNlbnQgYW5kIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KLVRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgXGZCLWRcZlIgb3B0aW9uLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBcZkJcLWRcZlIgb3B0aW9uLgogLklQICJkb0RlYnVnZ2luZyAoMXwwKSIKIHR1cm5zIG9uIGRlYnVnZ2luZyBmb3IgYWxsIGFwcGxpY2F0aW9ucyBydW4gaWYgc2V0IHRvIDEuCiAuXCIKQEAgLTU4LDcgKzEwNyw3IEBACiAuSVAgImRlYnVnVG9rZW5zIFRPS0VOWyxUT0tFTi4uLl0iCiBkZWZpbmVzIHRoZSBkZWJ1Z2dpbmcgdG9rZW5zIHRoYXQgc2hvdWxkIGJlIHR1cm5lZCBvbiB3aGVuCiBcZklkb0RlYnVnZ2luZ1xmUiBpcyBzZXQuCi1UaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFxmQi1EXGZSIG9wdGlvbi4KK1RoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgXGZCXC1EXGZSIG9wdGlvbi4KIC5cIi5JUCAiMTZiaXRJRHMgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiAuSVAgIjE2Yml0SURzIHllcyIKIHJlc3RyaWN0cyByZXF1ZXN0SURzLCBldGMgdG8gMTYtYml0IHZhbHVlcy4KQEAgLTk0LDcgKzE0Myw3IEBACiAuSVAgIm5vUmFuZ2VDaGVjayB5ZXMiCiBkaXNhYmxlcyB0aGUgdmFsaWRhdGlvbiBvZiB2YXJiaW5kIHZhbHVlcyBhZ2FpbnN0IHRoZSBNSUIgZGVmaW5pdGlvbgogZm9yIHRoZSByZWxldmFudCBPSUQuCi1UaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFxmQi1JclxmUiBvcHRpb24uCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFxmQlwtSXJcZlIgb3B0aW9uLgogLklQCiBUaGlzIGRpcmVjdGl2ZSBpcyBwcmltYXJpbHkgcmVsZXZhbnQgdG8gdGhlIFxmQnNubXBzZXRcZlIgY29tbWFuZCwKIGJ1dCB3aWxsIGFsc28gYXBwbHkgdG8gYW55IGFwcGxpY2F0aW9uIHRoYXQgY2FsbHMgXGZJc25tcF9hZGRfdmFyKClcZlIKQEAgLTExNywxNiArMTY2LDI0IEBACiB0aGUgZW5jb2RpbmcgaXMgYmFzaWNhbGx5IHRoZSBzYW1lIGluIGVpdGhlciBjYXNlIC0gYnV0IHdvcmtpbmcKIGJhY2t3YXJkcyB0eXBpY2FsbHkgcHJvZHVjZXMgYSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBlbmNvZGluZywKIGFuZCBoZW5jZSBhIHNtYWxsZXIgbmV0d29yayBkYXRhZ3JhbS4KKy5JUCAiZG9udExvYWRIb3N0Q29uZmlnICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgorU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBob3N0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlCitsb2FkZWQuICBTZXQgdG8gInRydWUiIHRvIHR1cm4gb2ZmIHRoZSBsb2FkaW5nIG9mIHRoZSBob3N0IHNwZWNpZmljCitjb25maWd1cmF0aW9uIGZpbGVzLgorLklQICJyZXRyaWVzIElOVEVHRVIiCitTcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZXRyaWVzIHRvIGJlIHVzZWQgaW4gdGhlIHJlcXVlc3RzLgorLklQICJ0aW1lb3V0IElOVEVHRVIiCitTcGVjaWZpZXMgdGhlIHRpbWVvdXQgaW4gc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMuCiAuXCIKIC5cIiBYWFggLSBJdCBpcyBwcm9iYWJseSBhYm91dCB0aW1lIHRvIHJlbW92ZSB0aGlzIGNob2ljZSEKIC5cIgogLlNIIFNOTVB2MyBTRVRUSU5HUwogLklQICJkZWZTZWN1cml0eU5hbWUgU1RSSU5HIgogZGVmaW5lcyB0aGUgZGVmYXVsdCBzZWN1cml0eSBuYW1lIHRvIHVzZSBmb3IgU05NUHYzIHJlcXVlc3RzLgotVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCLXVcZlIgb3B0aW9uLgorVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCXC11XGZSIG9wdGlvbi4KIC5JUCAiZGVmU2VjdXJpdHlMZXZlbCBub0F1dGhOb1ByaXZ8YXV0aE5vUHJpdnxhdXRoUHJpdiIKIGRlZmluZXMgdGhlIGRlZmF1bHQgc2VjdXJpdHkgbGV2ZWwgdG8gdXNlIGZvciBTTk1QdjMgcmVxdWVzdHMuCi1UaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkItbFxmUiBvcHRpb24uCitUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkJcLWxcZlIgb3B0aW9uLgogLklQCiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0b2tlbiBpcyBcZklub0F1dGhOb1ByaXZcZlIuCiAuXCIKQEAgLTE0Miw3ICsxOTksNyBAQAogLklQICJkZWZQcml2UGFzc3BocmFzZSBTVFJJTkciCiBkZWZpbmUgdGhlIGRlZmF1bHQgYXV0aGVudGljYXRpb24gYW5kIHByaXZhY3kgcGFzcyBwaHJhc2VzIHRvIHVzZQogZm9yIFNOTVB2MyByZXF1ZXN0cy4KLVRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkItQVxmUiBhbmQgXGZCLVhcZlIgb3B0aW9ucyByZXNwZWN0aXZlbHkuCitUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCXC1BXGZSIGFuZCBcZkJcLVhcZlIgb3B0aW9ucyByZXNwZWN0aXZlbHkuCiAuSVAKIFRoZSAKIC5CIGRlZlBhc3NwaHJhc2UKQEAgLTE1Miw3ICsyMDksNyBAQAogLklQICJkZWZQcml2VHlwZSBERVN8QUVTIgogZGVmaW5lIHRoZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIGFuZCBwcml2YWN5IHByb3RvY29scyB0byB1c2UgZm9yCiBTTk1QdjMgcmVxdWVzdHMuCi1UaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCLWFcZlIgYW5kIFxmQi14XGZSIG9wdGlvbnMgcmVzcGVjdGl2ZWx5LgorVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQlwtYVxmUiBhbmQgXGZCXC14XGZSIG9wdGlvbnMgcmVzcGVjdGl2ZWx5LgogLklQCiBJZiBub3Qgc3BlY2lmaWVkLCBTTk1QdjMgcmVxdWVzdHMgd2lsbCBkZWZhdWx0IHRvIE1ENSBhdXRoZW50aWNhdGlvbgogYW5kIERFUyBlbmNyeXB0aW9uLgpAQCAtMTY0LDcgKzIyMSw3IEBACiAuUkUKIC5JUCAiZGVmQ29udGV4dCBTVFJJTkciCiBkZWZpbmVzIHRoZSBkZWZhdWx0IGNvbnRleHQgdG8gdXNlIGZvciBTTk1QdjMgcmVxdWVzdHMuCi1UaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkItblxmUiBvcHRpb24uCitUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkJcLW5cZlIgb3B0aW9uLgogLklQCiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0b2tlbiBpcyB0aGUgZGVmYXVsdCBjb250ZXh0CiAoaS5lLiB0aGUgZW1wdHkgc3RyaW5nICIiKS4KQEAgLTE4Myw3ICsyNDAsNyBAQAogbm9ybWFsbHkgaGFzIGJldHRlciBlbnRyb3B5IHRoYW4gYSBwYXNzd29yZCB1bmxlc3MgaXQgaXMKIGFtYXppbmdseSBsb25nKS4KIFRoZSBkaXJlY3RpdmVzIGFyZSBlcXVpdmFsZW50IHRvIHRoZSBzaG9ydC1mb3JtCi1jb21tYW5kIGxpbmUgb3B0aW9ucyBcZkItM21cZlIsIFxmQi0zTVxmUiwgXGZCLTNrXGZSLCBhbmQgXGZCLTNLXGZSLgorY29tbWFuZCBsaW5lIG9wdGlvbnMgXGZCXC0zbVxmUiwgXGZCXC0zTVxmUiwgXGZCXC0za1xmUiwgYW5kIFxmQlwtM0tcZlIuCiAuSVAKIExvY2FsaXplZCBrZXlzIGFyZQogbWFzdGVyIGtleXMgd2hpY2ggaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBhIHVuaXF1ZSBrZXkgd2hpY2ggaXMgb25seQpAQCAtMTkyLDYgKzI0OSwyMyBAQAogYmVpbmcgdXNlZCAoYXV0aCBrZXlzOiBNRDU9MTYgYnl0ZXMsIFNIQTE9MjAgYnl0ZXM7CiBwcml2IGtleXM6IERFUz0xNiBieXRlcyAoOAogYnl0ZXMgb2Ygd2hpY2ggaXMgdXNlZCBhcyBhbiBJViBhbmQgbm90IGEga2V5KSwgYW5kIEFFUz0xNiBieXRlcykuCisuSVAgInNzaHRvc25tcHNvY2tldCBQQVRIIgorU2V0cyB0aGUgcGF0aCBvZiB0aGUgXGZCc3NodG9zbm1wXGZSIHNvY2tldCBjcmVhdGVkIGJ5IGFuIGFwcGxpY2F0aW9uCisoZS5nLiBzbm1wZCkgbGlzdGVuaW5nIGZvciBpbmNvbWluZyBzc2ggY29ubmVjdGlvbnMgdGhyb3VnaCB0aGUKK1xmQnNzaHRvc25tcFxmUiB1bml4IHNvY2tldC4KKy5JUCAic3NodG9zbm1wc29ja2V0cGVybXMgTU9ERSBbT1dORVIgW0dST1VQXV0iCitTZXRzIHRoZSBtb2RlLCBvd25lciBhbmQgZ3JvdXAgb2YgdGhlIFxmQnNzaHRvc25tcFxmUiBzb2NrZXQgY3JlYXRlZCBieQorYW4gYXBwbGljYXRpb24gKGUuZy4gXGZCc25tcGRcZlIpIGxpc3RlbmluZyBmb3IgaW5jb21pbmcgc3NoIGNvbm5lY3Rpb25zCit0aHJvdWdoIHRoZSBcZkJzc2h0b3NubXBcZlIgdW5peCBzb2NrZXQuICBUaGUgc29ja2V0IG5lZWRzIHRvIGJlIHJlYWQvd3JpdGUKK3ByaXZpbGVnZWQgZm9yIFNTSCB1c2VycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGNvbm5lY3QgdG8gdGhlIFNOTVAKK3NlcnZpY2UgKFZBQ00gYWNjZXNzIHN0aWxsIG5lZWRzIHRvIGJlIGdyYW50ZWQgYXMgd2VsbCwgbW9zdCBsaWtlbHkKK3Rocm91Z2ggdGhlIFRTTSBzZWN1cml0eSBtb2RlbCkuCisuSVAgInNzaHVzZXJuYW1lIE5BTUUiCitTZXRzIHRoZSBTU0ggdXNlciBuYW1lIGZvciBsb2dnaW5nIGludG8gdGhlIHJlbW90ZSBzeXN0ZW0uCisuSVAgInNzaHB1YmtleSBGSUxFIgorU2V0IHRoZSBwdWJsaWMga2V5IGZpbGUgdG8gdXNlIHdoZW4gY29ubmVjdGluZyB0byBhIHJlbW90ZSBzeXN0ZW0uCisuSVAgInNzaHByaXZrZXkgRklMRSIKK1NldCB0aGUgcHJpdmF0ZSBrZXkgZmlsZSB0byB1c2Ugd2hlbiBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIHN5c3RlbS4KIC5cIgogLlwiIFhYWCAtIGFyZSB0aGVzZSBsZW5ndGhzIHN0aWxsIGNvcnJlY3QgPwogLlwiCkBAIC0yMTUsNyArMjg5LDcgQEAKIGZvciBoYW5kbGluZyBpbnB1dCB0byBhbmQgb3V0cHV0IGZyb20gZXh0ZXJuYWwgc2hlbGwgY29tbWFuZHMuCiBVc2VkIGJ5IHRoZSBcZklta3N0ZW1wKClcZlIgYW5kIFxmSW1rdGVtcCgpXGZSIGZ1bmN0aW9ucy4KIC5JUAotSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgcGF0dGVybiBpcyBcZkMvdG1wL3NubXBkWFhYWFhYXGZSLgorSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgcGF0dGVybiBpcyBcZkNORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOXGZSLgogLklQICJzZXJ2ZXJSZWN2QnVmIElOVEVHRVIiCiBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHVzZWQgd2hlbiByZWNlaXZpbmcKIGluY29taW5nIFNOTVAgcmVxdWVzdHMuCkBAIC0yMzIsMTggKzMwNiwxOCBAQAogLlNIIE1JQiBIQU5ETElORwogLklQICJtaWJkaXJzIERJUkxJU1QiCiBzcGVjaWZpZXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgTUlCIGZpbGVzLgotVGhpcyBvcGVyYXRlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIFxmQi1NXGZSIG9wdGlvbiAtCitUaGlzIG9wZXJhdGVzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgXGZCXC1NXGZSIG9wdGlvbiAtCiBzZWUgXGZJc25tcGNtZCgxKVxmUiBmb3IgZGV0YWlscy4KIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZQogLkIgTUlCRElSUwotZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCB0aGUgXGZCLU1cZlIgb3B0aW9uLgorZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCB0aGUgXGZCXC1NXGZSIG9wdGlvbi4KIC5JUCAibWlicyBNSUJMSVNUIgogc3BlY2lmaWVzIGEgbGlzdCBvZiBNSUIgbW9kdWxlcyAobm90IGZpbGVzKSB0aGF0IHNob3VsZCBiZSBsb2FkZWQuCi1UaGlzIG9wZXJhdGVzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgXGZCLW1cZlIgb3B0aW9uIC0KK1RoaXMgb3BlcmF0ZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBcZkJcLW1cZlIgb3B0aW9uIC0KIHNlZSBcZklzbm1wY21kKDEpXGZSIGZvciBkZXRhaWxzLgogTm90ZSB0aGF0IHRoaXMgbGlzdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKIC5CIE1JQlMKLWVudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgdGhlIFxmQi1tXGZSIG9wdGlvbi4KK2Vudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgdGhlIFxmQlwtbVxmUiBvcHRpb24uCiAuSVAgIm1pYmZpbGUgRklMRSIKIHNwZWNpZmllcyBhIChzaW5nbGUpIE1JQiBmaWxlIHRvIGxvYWQsIGluIGFkZGl0aW9uIHRvIHRoZQogbGlzdCByZWFkIGZyb20gdGhlIFxmSW1pYnNcZlIgdG9rZW4gKG9yIGVxdWl2YWxlbnQgY29uZmlndXJhdGlvbikuCkBAIC0yNTIsMTQgKzMyNiwxNSBAQAogZW52aXJvbm1lbnQgdmFyaWFibGUuCiAuSVAgInNob3dNaWJFcnJvcnMgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiB3aGV0aGVyIHRvIGRpc3BsYXkgTUlCIHBhcnNpbmcgZXJyb3JzLgotLklQICJzdHJpY3RDb21tZW50VGVybSAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKKy5JUCAiY29tbWVudFRvRU9MICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogd2hldGhlciBNSUIgcGFyc2luZyBzaG91bGQgYmUgc3RyaWN0IGFib3V0IGNvbW1lbnQgdGVybWluYXRpb24uCiBNYW55IE1JQiB3cml0ZXJzIGFzc3VtZSB0aGF0IEFTTi4xIGNvbW1lbnRzIGV4dGVuZCB0byB0aGUgZW5kIG9mCi10aGUgdGV4dCBsaW5lLCByYXRoZXIgdGhhbiBiZWluZyB0ZXJtaW5hdGVkIGJ5IHRoZSBuZXh0ICItLSIgdG9rZW4uCit0aGUgdGV4dCBsaW5lLCByYXRoZXIgdGhhbiBiZWluZyB0ZXJtaW5hdGVkIGJ5IHRoZSBuZXh0ICJcLVwtIiB0b2tlbi4KIFRoaXMgdG9rZW4gY2FuIGJlIHVzZWQgdG8gYWNjZXB0IHN1Y2ggKHN0cmljdGx5IGluY29ycmVjdCkgTUlCcy4KIC5icgotTm90ZSB0aGF0IHRoaXMgZGlyZWN0aXZlIGlzIHBvb3JseSBuYW1lZCwgc2luY2UgYSB2YWx1ZSBvZiAidHJ1ZSIKLXdpbGwgdHVybiBcZklvZmZcZlAgdGhlIHN0cmljdCBpbnRlcnByZXRhdGlvbiBvZiBNSUIgY29tbWVudHMuCitOb3RlIHRoYXQgdGhpcyBkaXJlY3RpdmUgd2FzIHByZXZpb3VzIChtaXMtKW5hbWVkIFxmSXN0cmljdENvbW1lbnRUZXJtXGZSLAorYnV0IHdpdGggdGhlIHJldmVyc2UgYmVoYXZpb3VyIGZyb20gdGhhdCBpbXBsaWVkIGJ5IHRoZSBuYW1lLgorVGhpcyBlYXJsaWVyIHRva2VuIGlzIHN0aWxsIGFjY2VwdGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KIC5JUCAibWliQWxsb3dVbmRlcmxpbmUgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiB3aGV0aGVyIHRvIGFsbG93IHVuZGVybGluZSBjaGFyYWN0ZXJzIGluIE1JQiBvYmplY3QgbmFtZXMgYW5kCiBlbnVtZXJhdGlvbiB2YWx1ZXMuCkBAIC0yNzUsNTYgKzM1MCw2NSBAQAogYmVpbmcgcGFzc2VkIHRvIHRoZSBsb2dnaW5nIHJvdXRpbmVzLiAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VkIHdoZW4gZmlsZSBsb2dnaW5nIGlzIGFjdGl2ZS4gCiAuSVAgInByaW50TnVtZXJpY0VudW1zICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PZSAuCisuQlIgXC1PZSAuCiAuSVAgInByaW50TnVtZXJpY09pZHMgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU9uIC4KKy5CUiBcLU9uIC4KIC5JUCAiZG9udEJyZWFrZG93bk9pZHMgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU9iIC4KKy5CUiBcLU9iIC4KIC5JUCAiZXNjYXBlUXVvdGVzICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PRSAuCisuQlIgXC1PRSAuCiAuSVAgInF1aWNrUHJpbnRpbmcgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU9xIC4KKy5CUiBcLU9xIC4KIC5JUCAicHJpbnRWYWx1ZU9ubHkgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU92IC4KKy5CUiBcLU92IC4KIC5JUCAiZG9udFByaW50VW5pdHMgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU9VIC4KKy5CUiBcLU9VIC4KIC5JUCAibnVtZXJpY1RpbWV0aWNrcyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT3QgLgorLkJSIFwtT3QgLgogLklQICJwcmludEhleFRleHQgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU9UIC4KKy5CUiBcLU9UIC4KIC5JUCAiaGV4T3V0cHV0TGVuZ3RoIGludGVnZXIiCiBTcGVjaWZpZXMgd2hlcmUgdG8gYnJlYWsgdXAgdGhlIG91dHB1dCBvZiBoZXhhZGVjaW1hbCBzdHJpbmdzLiAgCiBTZXQgdG8gMCB0byBkaXNhYmxlIGxpbmUgYnJlYWtzLiAgRGVmYXVsdHMgdG8gMTYuCiAuSVAgInN1ZmZpeFByaW50aW5nICgwfDF8MikiCiBUaGUgdmFsdWUgMSBpcyBlcXVpdmFsZW50IHRvCi0uQiAtT3MKKy5CIFwtT3MKIGFuZCB0aGUgdmFsdWUgMiBpcyBlcXVpdmFsZW50IHRvCi0uQlIgLU9TIC4KKy5CUiBcLU9TIC4KIC5JUCAib2lkT3V0cHV0Rm9ybWF0ICgxfDJ8M3w0fDV8NikiCi1NYXBzIC1PIG9wdGlvbnMgYXMgZm9sbG93OiAtT3M9MSwgLU9TPTIsIC1PZj0zLCAtT249NCwgLU91PTUuCi1UaGUgdmFsdWUgNiBoYXMgbm8gbWF0Y2hpbmcgLU8gb3B0aW9uLiBJdCBzdXBwcmVzc2VzIG91dHB1dC4KK01hcHMgXC1PIG9wdGlvbnMgYXMgZm9sbG93OiBcLU9zPTEsIFwtT1M9MiwgXC1PZj0zLCBcLU9uPTQsIFwtT3U9NS4KK1RoZSB2YWx1ZSA2IGhhcyBubyBtYXRjaGluZyBcLU8gb3B0aW9uLiBJdCBzdXBwcmVzc2VzIG91dHB1dC4KIC5JUCAiZXh0ZW5kZWRJbmRleCAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT1ggLgorLkJSIFwtT1ggLgogLklQICJub0Rpc3BsYXlIaW50ICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRGlzYWJsZXMgdGhlIHVzZSBvZiBESVNQTEFZLUhJTlQgaW5mb3JtYXRpb24gd2hlbiBwYXJzaW5nIGluZGljZXMgYW5kCiB2YWx1ZXMgdG8gc2V0LiBFcXVpdmFsZW50IHRvCi0uQlIgLUloIC4KKy5CUiBcLUloIC4KIC5TSCBGSUxFUwotU1lTQ09ORkRJUi9zbm1wL3NubXAuY29uZiwKLVNZU0NPTkZESVIvc25tcC9zbm1wLmxvY2FsLmNvbmYgLSBjb21tb24gY29uZmlndXJhdGlvbiBzZXR0aW5ncworLklQICJTeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGVzOiIKK1NZU0NPTkZESVIvc25tcC9zbm1wLmNvbmYKIC5icgotfi8uc25tcC9zbm1wLmNvbmYgLSB1c2VyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKK1NZU0NPTkZESVIvc25tcC9zbm1wLmxvY2FsLmNvbmYKKy5JUCAiVXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzOiIKKyRIT01FLy5zbm1wL3NubXAuY29uZgorLmJyCiskSE9NRS8uc25tcC9zbm1wLmxvY2FsLmNvbmYKKy5JUCAiRGVzdGluYXRpb24gaG9zdCBzcGVjaWZpYyBmaWxlczoKK1NZU0NPTkZESVIvc25tcC9ob3N0cy9IT1NUTkFNRS5jb25mCisuYnIKKyRIT01FLy5zbm1wL2hvc3RzL0hPU1ROQU1FLmNvbmYKKwogLlNIICJTRUUgQUxTTyIKLXNubXBfY29uZmlnKDUpLCByZWFkX2NvbmZpZygzKSwgc25tcGNtZCgxKS4KK3NubXBfY29uZmlnKDUpLCBuZXRzbm1wX2NvbmZpZ19hcGkoMyksIHNubXBjbWQoMSkuCiAuXCIgTG9jYWwgVmFyaWFibGVzOgogLlwiICBtb2RlOiBucm9mZgogLlwiIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9zbm1wX2FnZW50X2FwaS4zLmRlZiBiL21hbi9zbm1wX2FnZW50X2FwaS4zLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNlNDBkZS4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9hZ2VudF9hcGkuMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLlRIIFNOTVBfQUdFTlRfQVBJIDMgIjAxIEF1ZyAyMDAyIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgotLlNIIE5BTUUKLXNubXBfYWdlbnRfYXBpIFwtIGVtYmVkZGluZyBhbiBhZ2VudCBpbnRvIGEgZXh0ZXJuYWwgYXBwbGljYXRpb24KLS5TSCBTWU5PUFNJUwotLm5mCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIGludCBhZ2VudHhfc3ViYWdlbnQgPSAxOyAgLyogQ2hhbmdlIHRoaXMgaWYgeW91J3JlIGEgbWFzdGVyIGFnZW50LiAgKi8KLQotICBzbm1wX2VuYWJsZV9zdGRlcnJsb2coKTsKLQotICAvKiAgSWYgd2UncmUgYW4gQWdlbnRYIHN1YmFnZW50Li4uICAqLwotICBpZiAoYWdlbnR4X3N1YmFnZW50KSB7Ci0gICAgICAvKiAuLi5tYWtlIHVzIGFuIEFnZW50WCBjbGllbnQuICAqLwotICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JPTEUsIDEpOwotICB9Ci0KLSAgaW5pdF9hZ2VudCgieW91cmFwcG5hbWUiKTsKLQotICAvKiAgSW5pdGlhbGl6ZSB5b3VyIE1JQiBjb2RlIGhlcmUuICAqLwotICBpbml0X215X21pYl9jb2RlKCk7Ci0KLSAgLyogIGB5b3VyYXBwbmFtZScgd2lsbCBiZSB1c2VkIHRvIHJlYWQgeW91cmFwcG5hbWUuY29uZiBmaWxlcy4gICovCi0gIGluaXRfc25tcCgieW91cmFwcG5hbWUiKTsKLQotICAvKiAgSWYgd2UncmUgZ29pbmcgdG8gYmUgYSBTTk1QIG1hc3RlciBhZ2VudC4uLiAgKi8KLSAgaWYgKCFhZ2VudHhfc3ViYWdlbnQpCi0gICAgICBpbml0X21hc3Rlcl9hZ2VudCgpOyAgLyogIExpc3RlbiBvbiBkZWZhdWx0IHBvcnQgKDE2MSkuICAqLwotCi0gIC8qICBZb3VyIG1haW4gbG9vcCBoZXJlLi4uICAqLwotICB3aGlsZSAod2hhdGV2ZXIpIHsKLSAgICAgIC8qIGlmIHlvdSB1c2Ugc2VsZWN0KCksIHNlZSBzbm1wX2FwaSgzKSAqLwotICAgICAgLyogICAgIC0tLSBPUiAtLS0gICovCi0gICAgICBhZ2VudF9jaGVja19hbmRfcHJvY2VzcygwKTsgLyogMCA9PSBkb24ndCBibG9jayAqLwotICB9Ci0KLSAgLyogIEF0IHNodXRkb3duIHRpbWU6ICAqLwotICBzbm1wX3NodXRkb3duKCJ5b3VyYXBwbmFtZSIpOwotfQotCi1UaGVuOgotJChDQykgLi4uIGBuZXQtc25tcC1jb25maWcgLS1hZ2VudC1saWJzYAotCi0uZmkKLS5TSCBERVNDUklQVElPTgotLlBQCi1PdXIgZ29hbCBpcyB0byBjcmVhdGUgYSBlYXN5IHRvIHVzZSBpbnRlcmZhY2UgdG8gdGhlIE5ldC1TTk1QIHBhY2thZ2UKLXN1Y2ggdGhhdCB5b3UgY2FuIHRha2UgY29kZSB0aGF0IHlvdSBoYXZlIHdyaXR0ZW4gdGhhdCBoYXMgYmVlbgotZGVzaWduZWQgdG8gYmUgYSBOZXQtU05NUCBNSUIgbW9kdWxlIGFuZCBlbWJlZCBpdCBpbnRvIGFuIGV4dGVybmFsCi1hcHBsaWNhdGlvbiB3aGVyZSB5b3UgY2FuIGVpdGhlciBjaG9zZSB0byBiZSBhIFNOTVAgbWFzdGVyIGFnZW50IG9yIGFuCi1BZ2VudFggc3ViLWFnZW50IHVzaW5nIHRoZSBzYW1lIE1JQiBtb2R1bGUgY29kZS4gIE91ciBzdWdnZXN0aW9uIGlzCi10aGF0IHlvdSB1c2Ugb3VyIChvciBhbm90aGVyKSBTTk1QIGFnZW50IGFzIHRoZSBBZ2VudFggbWFzdGVyIGFnZW50Ci1hbmQgY2hvc2UgdG8gYmVjb21lIGFuIEFnZW50WCBzdWJhZ2VudCB3aGljaCB0aGVuIGF0dGFjaGVzIHRvIHRoZQotbWFzdGVyLgotLlBQCi1UaGUgTmV0LVNOTVAgcGFja2FnZSBwcm92aWRlcyBhIHBhaXIgb2YgbGlicmFyaWVzIHRoYXQgZW5hYmxlcyBlYXN5Ci1lbWJlZGRpbmcgb2YgYW4gU05NUCBvciBBZ2VudFggYWdlbnQgaW50byBhbiBleHRlcm5hbCBzb2Z0d2FyZQotcGFja2FnZS4gQWdlbnRYIGlzIGFuIGV4dGVuc2libGUgcHJvdG9jb2wgZGVzaWduZWQgdG8gYWxsb3cgbXVsdGlwbGUKLVNOTVAgc3ViLWFnZW50cyBhbGwgcnVuIG9uIG9uZSBtYWNoaW5lIHVuZGVyIGEgc2luZ2xlIFNOTVAgbWFzdGVyCi1hZ2VudC4gIEl0IGlzIGRlZmluZWQgaW4gUkZDIDI3NDEuCi0uUFAKLVlvdSB3aWxsIG5lZWQgdG8gcGVyZm9ybSBhIGZldyB0YXNrcyBpbiBvcmRlciB0byBhY2NvbXBsaXNoCi10aGlzLiBGaXJzdCBvZmYsIHlvdSB3aWxsIG5lZWQgdG8gaW5pdGlhbGl6ZSBib3RoIHRoZSBTTk1QIGxpYnJhcnkgYW5kCi10aGUgU05NUCBhZ2VudCBsaWJyYXJ5LiBBcyBpbmRpY2F0ZWQgYWJvdmUsIHRoaXMgaXMgZG9uZSBzbGlnaHRseQotZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHlvdSBhcmUgZ29pbmcgdG8gcGVyZm9ybSBhcyBhCi1tYXN0ZXIgYWdlbnQgb3IgYW4gQWdlbnRYIHN1Yi1hZ2VudC4KLS5TSCBDT05GSUdVUkFUSU9OCi0uUFAKLUlmIHlvdSBpbnRlbmQgdG8gb3BlcmF0ZSBhcyBhbiBBZ2VudFggc3ViLWFnZW50LCB5b3Ugd2lsbCBoYXZlIHRvCi1jb25maWd1cmVkIHRoZSBOZXQtU05NUCBwYWNrYWdlIHdpdGggYWdlbnR4IHN1cHBvcnQgKHdoaWNoIGlzIHR1cm5lZAotb24gYnkgZGVmYXVsdCwgc28ganVzdCBkb24ndCB0dXJuIGl0IG9mZikKLS5QUAotQWRkaXRpb25hbGx5LCB5b3Ugd2lsbCBuZWVkIHRvIGxpbmsgYWdhaW5zdCB0aGUgbmV0LXNubXAgbGlicmFyaWVzCi0odXNlIHRoZSBvdXRwdXQgb2YgIm5ldC1zbm1wLWNvbmZpZyAtLWFnZW50LWxpYnMiIHRvIGdldCBhIGxpYnJhcnkKLWxpc3QpIGFuZCBjYWxsIHN1YmFnZW50X3ByZV9pbml0KCkgYXMgaW5kaWNhdGVkIGFib3ZlLgotLlNIIENPTVBJTElORwotLlBQCi1JbiBvcmRlciB0byBtYWtlIHVzZSBvZiBhbnkgb2YgdGhlIGFib3ZlIEFQSSwgeW91IHdpbGwgbmVlZCB0byBsaW5rCi1hZ2FpbnN0IGF0IGxlYXN0IHRoZSBmb3VyIGxpYnJhcmllcyBsaXN0ZWQgYWJvdmUuCi0uU0ggRlVOQ1RJT05TCi0uUFAgVGhpcyBpcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGFib3ZlIGFuZAotd2hlcmUgdG8gZmluZCBvdXQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVtLiAgSXQgaXMgY2VydGFpbmx5IG5vdCBhCi1jb21wbGV0ZSBsaXN0IG9mIHdoYXQgaXMgYXZhaWxhYmxlIHdpdGhpbiBhbGwgdGhlIG5ldC1zbm1wIGxpYnJhcmllcy4gCi0uSVAgInNubXBfZW5hYmxlX3N0ZGVycmxvZygpIgotTG9ncyBlcnJvciBvdXRwdXQgZnJvbSB0aGUgU05NUCBhZ2VudCB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgotLklQICJuZXRzbm1wX2RzX3NldF9ib29sZWFuKCkiCi1QbGVhc2Ugc2VlIHRoZQotLklSIGRlZmF1bHRfc3RvcmUoMykKLW1hbnVhbCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uCi1hYm91dCB0aGlzIEFQSS4KLS5JUCAiaW5pdF9hZ2VudChjaGFyICpuYW1lKSIKLUluaXRpYWxpemVzIHRoZSBlbWJlZGRlZCBhZ2VudC4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlCi0uQlIgImluaXRfc25tcCgpIgotY2FsbC4gIAotLkkgbmFtZQotaXMgdXNlZCB0byBkaWN0YXRlIHdoYXQgLmNvbmYgZmlsZSB0byByZWFkIHdoZW4KLS5CUiAiaW5pdF9zbm1wKCkiCi1pcyBjYWxsZWQgbGF0ZXIuCi0uSVAgImluaXRfc25tcChjaGFyICpuYW1lKSIKLUluaXRpYWxpemVzIHRoZSBTTk1QIGxpYnJhcnkuICBOb3RlIHRoYXQgb25lIG9mIHRoZSB0aGluZ3MgdGhpcyB3aWxsCi1kbyB3aWxsIGJlIHRvIHJlYWQgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBhbiBlZmZvcnQgdG8gY29uZmlndXJlIHlvdXIKLWFwcGxpY2F0aW9uLiBJdCB3aWxsIGF0dGVtcHQgdG8gcmVhZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBuYW1lZCBieQotdGhlCi0uSSBuYW1lCi1zdHJpbmcgdGhhdCB5b3UgcGFzc2VkIGluLiAgSXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGFjY2VzcwotY29udHJvbCwgZm9yIGluc3RhbmNlLiAgIFBsZWFzZSBzZWUgdGhlCi0uSVIgcmVhZF9jb25maWcoMykgIiwgIiBzbm1wX2NvbmZpZyg1KSAiLCBhbmQgIiBzbm1wZC5jb25mKDUpCi1tYW51YWwgcGFnZXMgZm9yIGZ1cnRoZXIgZGV0YWlscyBvbiB0aGlzIHN1YmplY3QuCi0uSVAgImluaXRfbWFzdGVyX2FnZW50KHZvaWQpIgotSW5pdGlhbGl6ZXMgdGhlIG1hc3RlciBhZ2VudCBhbmQgY2F1c2VzIGl0IHRvIGxpc3RlbiBmb3IgU05NUCByZXF1ZXN0cyAKLW9uIGl0cyBkZWZhdWx0IFVEUCBwb3J0IG9mIDE2MS4KLS5JUCAiYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoaW50IGJsb2NrKSIKLVRoaXMgY2hlY2tzIGZvciBwYWNrZXRzIGFycml2aW5nIG9uIHRoZSBTTk1QIHBvcnQgYW5kIHByb2Nlc3NlcyB0aGVtCi1pZiBzb21lIGFyZSBmb3VuZC4gIElmIAotLkkgYmxvY2sKLWlzIG5vbi16ZXJvLCB0aGUgZnVuY3Rpb24gY2FsbCB3aWxsIGJsb2NrIHVudGlsIGEgcGFja2V0IGFycml2ZXMgb3IgYW4gCi1hbGFybSBtdXN0IGJlIHJ1biAoc2VlCi0uSVIgc25tcF9hbGFybSgzKSApLgotVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHBhY2tldHMKLXdlcmUgcHJvY2Vzc2VkLCB6ZXJvIGlmIGFuIGFsYXJtIG9jY3VycmVkIGFuZCAtMSBpZiBhbiBlcnJvciBvY2N1cmVkLgotLklQICJzbm1wX3NodXRkb3duKGNoYXIgKm5hbWUpOyIKLVRoaXMgc2h1dHMgZG93biB0aGUgYWdlbnQsIHNhdmluZyBhbnkgbmVlZGVkIHBlcnNpc3RlbnQgc3RvcmFnZSwgZXRjLgotLlNIICJTRUUgQUxTTyIKLWh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvdG9vbGtpdC8sIHNlbGVjdCgyKSwgc25tcF9hcGkoMyksCi1kZWZhdWx0X3N0b3JlKDMpLCBzbm1wX2FsYXJtKDMpLCByZWFkX2NvbmZpZygzKSwgc25tcF9jb25maWcoNSksCi1zbm1wZC5jb25mKDUpCmRpZmYgLS1naXQgYS9tYW4vc25tcF9hbGFybS4zLmRlZiBiL21hbi9zbm1wX2FsYXJtLjMuZGVmCmluZGV4IDA5MWYyMjAuLjZjNzlhMjAgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wX2FsYXJtLjMuZGVmCisrKyBiL21hbi9zbm1wX2FsYXJtLjMuZGVmCkBAIC0xLDYgKzEsOCBAQAogLlRIIFNOTVBfQUxBUk0gMyAiMDEgQXVnIDIwMDIiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQotc25tcF9hbGFybV9yZWdpc3Rlciwgc25tcF9hbGFybV9yZWdpc3Rlcl9ociwgc25tcF9hbGFybV91bnJlZ2lzdGVyIC0gYWxhcm0gZnVuY3Rpb25zCitzbm1wX2FsYXJtX3JlZ2lzdGVyLAorc25tcF9hbGFybV9yZWdpc3Rlcl9ociwKK3NubXBfYWxhcm1fdW5yZWdpc3RlciAtIGFsYXJtIGZ1bmN0aW9ucwogLlNIIFNZTk9QU0lTCiAuQiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAuUFAKQEAgLTE2MSw3ICsxNjMsNyBAQAogc3lzdGVtIGNhbGwsIGFsdGhvdWdoIG92ZXJhbGwgcHJlY2lzaW9uIGlzIG9mIGNvdXJzZSBzdGlsbCBkZXRlcm1pbmVkCiBieSB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLiAgUmVjb21tZW5kZWQuCiAuU0ggIlNFRSBBTFNPIgotLkJSIHNubXBfYXBpICIoMyksICIgZGVmYXVsdF9zdG9yZSAiKDMpLCAiIHNubXBfc2VsZWN0X2luZm8gIigzKSwgIgorLkJSIG5ldHNubXBfc2Vzc2lvbl9hcGkgIigzKSwgIiBkZWZhdWx0X3N0b3JlICIoMyksICIKIC5CUiBhbGFybSAiKDIpLCAiIHNldGl0aW1lciAiKDIpLCAiIHNlbGVjdCAiKDIpIgogLlwiIExvY2FsIFZhcmlhYmxlczoKIC5cIiAgbW9kZTogbnJvZmYKZGlmZiAtLWdpdCBhL21hbi9zbm1wX2FwaS4zLmRlZiBiL21hbi9zbm1wX2FwaS4zLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFjYjk5MS4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9hcGkuMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLlwiIAlDb3B5cmlnaHQgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQotLlwiIAotLlwiICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0uXCIgCi0uXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIAotLlwiIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgCi0uXCIgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotLlwiIGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiAKLS5cIiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIENNVSBub3QgYmUKLS5cIiB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKLS5cIiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICAKLS5cIiAKLS5cIiBDTVUgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORwotLlwiIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTAotLlwiIENNVSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IKLS5cIiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsCi0uXCIgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAotLlwiIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLS5cIiBTT0ZUV0FSRS4KLS5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUF9BUEkgMyAiMTkgTWF5IDIwMTEiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCi0uU0ggTkFNRQotc25tcF9zZXNzX2luaXQsIHNubXBfb3Blbiwgc25tcF9zZW5kLCBzbm1wX2FzeW5jX3NlbmQsIHNubXBfZnJlZV9wZHUsIHNubXBfc2VsZWN0X2luZm8sIHNubXBfcmVhZCwgc25tcF90aW1lb3V0LCBzbm1wX3N5bmNoX3Jlc3BvbnNlLCBzbm1wX2Nsb3NlLCBzbm1wX3BlcnJvciwgc25tcF9zZXNzX3BlcnJvciwgc25tcF9lcnJvciwgc25tcF9hcGlfZXJyc3RyaW5nIFwtIHNlbmQgYW5kIHJlY2VpdmUgU05NUCBtZXNzYWdlcwotLlNIIFNZTk9QU0lTCi0jaW5jbHVkZSA8bmV0LXNubXAvc2Vzc2lvbl9hcGkuaD4KLS5QUAotdm9pZCBzbm1wX3Nlc3NfaW5pdCAoIHN0cnVjdCBzbm1wX3Nlc3Npb24gKiApOwotLlBQCi1zdHJ1Y3Qgc25tcF9zZXNzaW9uICogc25tcF9vcGVuICggc3RydWN0IHNubXBfc2Vzc2lvbiAqKTsKLS5SUwotLkIgLyogSW5wdXQgcGFyYW1ldGVyIG5vdCB1c2VkIGluIGFjdGl2ZSBzZXNzaW9ucyAqLwotLlJFCi0uUFAKLWludCBzbm1wX3NlbmQgKCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzaW9uLAotLlJTCi1zdHJ1Y3Qgc25tcF9wZHUgKnBkdSApOwotLlJFCi0uUFAKLWludCBzbm1wX2FzeW5jX3NlbmQgKCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzaW9uLAotLlJTCi1zdHJ1Y3Qgc25tcF9wZHUgKnBkdSwKLXNubXBfY2FsbGJhY2sgY2FsbGJhY2ssCi12b2lkICpjYWxsYmFja0RhdGEgKTsKLS5SRQotLlBQCi1pbnQgc25tcF9zZWxlY3RfaW5mbyAoIGludCAqbnVtZmRzLCBmZF9zZXQgKmZkc2V0LAotLlJTCi1zdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jayApOwotLlJFCi0uUFAKLXZvaWQgc25tcF9yZWFkICggZmRfc2V0ICpmZHNldCApOwotLlBQCi12b2lkIHNubXBfdGltZW91dCAoIHZvaWQgKTsKLS5QUAotaW50IHNubXBfc3luY2hfcmVzcG9uc2UgKCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzaW9uLAotLlJTCi1zdHJ1Y3Qgc25tcF9wZHUgKnBkdSwKLXN0cnVjdCBzbm1wX3BkdSAqKnJlc3BvbnNlKTsKLS5SRQotLlBQCi1pbnQgc25tcF9jbG9zZSAoIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3Npb24gKTsKLS5QUAotdm9pZCBzbm1wX2ZyZWVfcGR1ICgKLXN0cnVjdCBzbm1wX3BkdSAqcGR1ICk7Ci0uUFAKLXZvaWQgc25tcF9lcnJvciAoCi1zdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzaW9uLAotLlJTCi1pbnQgKnBjbGliZXJyLAotaW50ICpwc25tcGVyciwKLWNoYXIgKipwcGVycnN0cmluZyApOwotLlJFCi0uUFAKLWNoYXIgKnNubXBfYXBpX2VycnN0cmluZyAoIGludCBzbm1wZXJyICk7Ci0uUFAKLXZvaWQgc25tcF9wZXJyb3IgKCBjaGFyICogbXNnICk7Ci0uUlMKLS5CIC8qIGZvciBwYXJzaW5nIGVycm9ycyBvbmx5ICovCi0uUkUKLS5QUAotdm9pZCBzbm1wX3Nlc3NfcGVycm9yIChjaGFyICogbXNnLCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICopOwotLlJTCi0uQiAvKiBhbGwgb3RoZXIgU05NUCBsaWJyYXJ5IGVycm9ycyAqLwotLlJFCi0uUFAKLS5TSCBERVNDUklQVElPTgotLkkgU25tcF9zZXNzX2luaXQKLXByZXBhcmVzIGEgc3RydWN0IHNubXBfc2Vzc2lvbiB0aGF0IHNvdXJjZXMgdHJhbnNwb3J0IGNoYXJhY3RlcmlzdGljcwotYW5kIGNvbW1vbiBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYSBzZXQgb2YgU05NUCB0cmFuc2FjdGlvbnMuCi1BZnRlciB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8KLS5JIHNubXBfb3BlbgotdG8gY3JlYXRlIGFuIFNOTVAgc2Vzc2lvbiwgdGhlIHN0cnVjdHVyZSBpcyBub3QgdXNlZC4KLS5QUAotLkkgU25tcF9vcGVuCi1yZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5LWZvcm1lZAotLkkgc3RydWN0IHNubXBfc2Vzc2lvbgotb2JqZWN0LCB3aGljaCB0aGUgYXBwbGljYXRpb24gbXVzdCB1c2UgdG8gcmVmZXJlbmNlIHRoZQotYWN0aXZlIFNOTVAgc2Vzc2lvbi4KLS5QUAotLkkgU25tcF9zZW5kLCBzbm1wX2FzeW5jX3NlbmQKLWFuZAotLkkgc25tcF9mcmVlX3BkdQotZWFjaCB0YWtlIGFzIGlucHV0IGEgcG9pbnRlciB0byBhCi0uSSBzdHJ1Y3Qgc25tcF9wZHUKLW9iamVjdC4KLVRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgZGVzY3JpYmVzIGEgdHJhbnNhY3Rpb24KLXRoYXQgd2lsbCBiZSBwZXJmb3JtZWQgb3ZlciBhbiBvcGVuIHNlc3Npb24uCi0uUFAKLUNvbnN1bHQgc25tcF9hcGkuaCBmb3IgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIHN0cnVjdHVyZXMuCi0uUFAKLVdpdGggdGhlCi0uSSBzbm1wX2FzeW5jX3NlbmQoKQotY2FsbCwKLS5JIHNubXBfcmVhZCgpCi13aWxsIGludm9rZSB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgotLlBQCi0uSSBTbm1wX3JlYWQsIHNubXBfc2VsZWN0X2luZm8sCi1hbmQKLS5JIHNubXBfdGltZW91dAotcHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIHRoZSB1c2Ugb2YgdGhlCi0uSVIgc2VsZWN0KDIpCi1zeXN0ZW0gY2FsbCBzbyB0aGF0IFNOTVAgdHJhbnNhY3Rpb25zIGNhbiBvY2N1ciBhc3luY2hyb25vdXNseS4KLS5QUAotLkkgU25tcF9zZWxlY3RfaW5mbwotaXMgZ2l2ZW4gdGhlIGluZm9ybWF0aW9uIHRoYXQgd291bGQgaGF2ZSBiZWVuIHBhc3NlZCB0bwotLkkgc2VsZWN0Ci1pbiB0aGUgYWJzZW5jZSBvZiBTTk1QLiAgRm9yIGV4YW1wbGUsIHRoaXMgbWlnaHQgaW5jbHVkZSB3aW5kb3cgdXBkYXRlIGluZm9ybWF0aW9uLgotVGhpcyBpbmZvcm1hdGlvbiBpcyBtb2RpZmllZCBzbyB0aGF0IFNOTVAgd2lsbCBnZXQgdGhlIHNlcnZpY2UgaXQgcmVxdWlyZXMgZnJvbSB0aGUKLWNhbGwgdG8KLS5JIHNlbGVjdC4KLUluIHRoaXMgY2FzZSwKLS5JIG51bWZkcywgZmRzZXQsCi1hbmQKLS5JIHRpbWVvdXQKLWNvcnJlc3BvbmQgdG8gdGhlCi0uSSBuZmRzLCByZWFkZmRzLAotYW5kCi0uSSB0aW1lb3V0Ci1hcmd1bWVudHMgdG8KLS5JIHNlbGVjdCwKLXJlc3BlY3RpdmVseS4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGF0IHRpbWVvdXQgbXVzdCBhbHdheXMgcG9pbnQgdG8gYW4gYWxsb2NhdGVkIChidXQgcGVyaGFwcyB1bmluaXRpYWxpemVkKQotLkkgc3RydWN0IHRpbWV2YWwuCi1JZgotLkkgdGltZW91dAotd291bGQgaGF2ZSBiZWVuIHBhc3NlZCBhcyBOVUxMLAotLkkgYmxvY2sKLWlzIHNldCB0byB0cnVlLCBhbmQKLS5JIHRpbWVvdXQKLWlzIHRyZWF0ZWQgYXMgdW5kZWZpbmVkLiAgVGhpcyBzYW1lIHJ1bGUgYXBwbGllcyB1cG9uIHJldHVybiBmcm9tCi0uSSBzbm1wX3NlbGVjdF9pbmZvLgotLlBQCi1BZnRlciBjYWxsaW5nCi0uSSBzbm1wX3NlbGVjdF9pbmZvLCBzZWxlY3QKLWlzIGNhbGxlZCB3aXRoIHRoZSByZXR1cm5lZCBkYXRhLiAgV2hlbiBzZWxlY3QgcmV0dXJucywKLS5JIHNubXBfcmVhZAotc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZQotLkkgZmRfc2V0Ci1yZXR1cm5lZCBmcm9tCi0uSSBzZWxlY3QKLXRvIHJlYWQgZWFjaCBTTk1QIHNvY2tldCB0aGF0IGhhcyBpbnB1dC4KLUlmCi0uSSBzZWxlY3QKLXRpbWVzIG91dCwKLS5JIHNubXBfdGltZW91dAotc2hvdWxkIGJlIGNhbGxlZCB0byBzZWUgaWYgdGhlIHRpbWVvdXQgd2FzIGludGVuZGVkIGZvciBTTk1QLgotLlBQCi0uSSBzbm1wX3N5bmNoX3Jlc3BvbnNlCi1pcyBhIGNvbnZlbmllbmNlIHJvdXRpbmUgdGhhdCB3aWxsIHNlbmQgdGhlIHJlcXVlc3QsCi13YWl0IGZvciB0aGUgcmVzcG9uc2UgYW5kIHByb2Nlc3MgaXQgYmVmb3JlIHJldHVybmluZy4KLVNlZSB0aGUgZGVzY3JpcHRpb25zIG9mCi0uSSBzbm1wX3NlbmQsIHNubXBfcmVhZAotZXRjIGZvciBkZXRhaWxzLgotLlNIIERJQUdOT1NUSUNTCi0uUFAKLVByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5IHVzZWQKLS5JUiBzbm1wX2dldF9lcnJubwotdG8gcmVhZCB0aGUgZ2xvYmFsIHZhcmlhYmxlCi0uSSBzbm1wX2Vycm5vCi13aGljaCBtYXkgaGF2ZSBoZWxkIHRoZSBlcnJvciBzdGF0dXMgd2l0aGluIHRoZSBTTk1QIGxpYnJhcnkuCi1UaGUgZXhpc3RpbmcgbWV0aG9kCi0uSSBzbm1wX3BlcnJvcgotc2hvdWxkIGJlIHVzZWQgdG8gbG9nIEFTTi4xIGNvZGluZyBlcnJvcnMgb25seS4KLS5QUAotVGhlIG5ldyBtZXRob2QKLS5JIHNubXBfc2Vzc19wZXJyb3IKLWlzIHByb3ZpZGVkIHRvIGNhcHR1cmUgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIHRoZSBwcm9jZXNzaW5nCi1vZiBhIHBhcnRpY3VsYXIgU05NUCBzZXNzaW9uLgotLkkgU25tcF9zZXNzX3BlcnJvcgotY2FsbHMKLS5JUiBzbm1wX2Vycm9yCi1mdW5jdGlvbiB0byBvYnRhaW4gdGhlICJDIiBsaWJyYXJ5IGVycm9yCi0uSSBlcnJubwotLCB0aGUgU05NUCBsaWJyYXJ5IGVycm9yCi0uSSBzbm1wZXJyCi0sIGFuZCB0aGUgU05NUCBsaWJyYXJ5IGRldGFpbGVkIGVycm9yIG1lc3NhZ2UKLXRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVycm9yIHRoYXQgb2NjdXJyZWQgZHVyaW5nIGEgZ2l2ZW4gc2Vzc2lvbi4KLS5QUAotTm90ZSB0aGF0IGluIGFsbCBjYXNlcyBleGNlcHQgb25lLAotLklSIHNubXBfc2Vzc19wZXJyb3IKLXNob3VsZCBiZSBoYW5kZWQgdGhlCi0uSSBzdHJ1Y3Qgc25tcF9zZXNzaW9uICoKLXBvaW50ZXIgcmV0dXJuZWQgZnJvbQotLklSIHNubXBfb3Blbi4KLUlmCi0uSVIgc25tcF9vcGVuCi1yZXR1cm5zIGEgbnVsbCBwb2ludGVyLCBwYXNzIHRoZSBJTlBVVAotLkkgc3RydWN0IHNubXBfc2Vzc2lvbiAqCi1wb2ludGVyIHVzZWQgdG8gY2FsbAotLklSIHNubXBfb3Blbi4KLS5QUAotRXJyb3IgcmV0dXJuIHN0YXR1cyBmcm9tIAotLkkgc25tcF9jbG9zZQotYW5kCi0uSSBzbm1wX3NlbmQKLWlzIGluZGljYXRlZCBieSByZXR1cm4gb2YgMC4gIEEgc3VjY2Vzc2Z1bCBzdGF0dXMgd2lsbCByZXR1cm4gYSAxIGZvcgotLkkgc25tcF9jbG9zZQotYW5kIHRoZSByZXF1ZXN0IGlkIG9mIHRoZSBwYWNrZXQgZm9yCi0uSSBzbm1wX3NlbmQuCi1VcG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIGZyb20KLS5JIHNubXBfc2VuZAotdGhlIHBkdSB3aWxsIGJlIGZyZWVkIGJ5IHRoZSBsaWJyYXJ5LgotLlBQCi1Db25zdWx0IHNubXBfYXBpLmggZm9yIHRoZSBjb21wbGV0ZSBzZXQgb2YgU05NUCBsaWJyYXJ5Ci1lcnJvciB2YWx1ZXMuCi1UaGUgU05NUCBsaWJyYXJ5IGVycm9yIHZhbHVlCi0uSVIgc25tcGVycgotY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLS5SUyAybgotLklQIFNOTVBFUlJfR0VORVJSIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLUEgZ2VuZXJpYyBlcnJvciBvY2N1cnJlZC4KLS5JUCBTTk1QRVJSX0JBRF9MT0NQT1JUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLVRoZSBsb2NhbCBwb3J0IHdhcyBiYWQgYmVjYXVzZSBpdCBoYWQgYWxyZWFkeSBiZWVuCi1hbGxvY2F0ZWQgb3IgcGVybWlzc2lvbiB3YXMgZGVuaWVkLgotLklQIFNOTVBFUlJfQkFEX0FERFJFU1MgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotVGhlIGhvc3QgbmFtZSBvciBhZGRyZXNzIGdpdmVuIHdhcyBub3QgdXNlYWJsZS4KLS5JUCBTTk1QRVJSX0JBRF9TRVNTSU9OIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLVRoZSBzcGVjaWZpZWQgc2Vzc2lvbiB3YXMgbm90IG9wZW4uCi0uSVAgU05NUEVSUl9UT09fTE9ORyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9OT19TT0NLRVQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfVjJfSU5fVjEgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfVjFfSU5fVjIgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1JFUEVBVEVSUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfUkVQRVRJVElPTlMgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX0FTTjFfQlVJTEQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1NFTkRUTyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfUEFSU0UgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1ZFUlNJT04gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfTk9BVVRIX0RFU1BSSVYgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQUJPUlQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfVU5LTk9XTl9QRFUgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfVElNRU9VVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uUkUKLS5QUAotQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGNvZGUgY2FuIGJlIG9idGFpbmVkIHdpdGgKLS5JUiBzbm1wX2FwaV9lcnJzdHJpbmcgLAotYW5kIGEgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBtYXkgYmUgcHJpbnRlZCB1c2luZwotLkkgc25tcF9wZXJyb3IKLXRoYXQgZnVuY3Rpb25zIGxpa2UgdGhlCi0uSSBwZXJyb3IKLXN0YW5kYXJkIHJvdXRpbmUuCi0uU0ggIlNFRSBBTFNPIgotc2VsZWN0KDIpLCBzbm1wX2FwaS5oCmRpZmYgLS1naXQgYS9tYW4vc25tcF9hcGlfZXJyc3RyaW5nLjMgYi9tYW4vc25tcF9hcGlfZXJyc3RyaW5nLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfYXBpX2VycnN0cmluZy4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfY2xvc2UuMyBiL21hbi9zbm1wX2Nsb3NlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfY2xvc2UuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX2NvbmZpZy41LmRlZiBiL21hbi9zbm1wX2NvbmZpZy41LmRlZgppbmRleCBlN2FjNGE2Li5mZDMwODczIDEwMDY0NAotLS0gYS9tYW4vc25tcF9jb25maWcuNS5kZWYKKysrIGIvbWFuL3NubXBfY29uZmlnLjUuZGVmCkBAIC0xLDQgKzEsNCBAQAotLlRIIFNOTVBfQ09ORklHIDUgIjUgTWF5IDIwMDUiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUF9DT05GSUcgNSAiMDggTWFyIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcF9jb25maWcgLSBoYW5kbGluZyBvZiBOZXQtU05NUCBjb25maWd1cmF0aW9uIGZpbGVzCiAuU0ggREVTQ1JJUFRJT04KQEAgLTExLDkgKzExLDEwIEBACiBjb25maWd1cmF0aW9uIGZpbGVzIGluIHRoZSBmb2xsb3dpbmcgNCBkaXJlY3RvcmllcywgaW4gb3JkZXI6CiBTWVNDT05GRElSL3NubXAsCiBEQVRBRElSL3NubXAsIExJQkRJUi9zbm1wLCBhbmQgJEhPTUUvLnNubXAuICBJbiBlYWNoIG9mIHRoZXNlCi1kaXJlY3RvcmllcywgaXQgbG9va3MgZm9yIGZpbGVzIHdpdGggdGhlIGV4dGVuc2lvbiBvZiBib3RoCi0uSVIgY29uZiAiIGFuZCAiIGxvY2FsLmNvbmYKLShyZWFkaW5nIHRoZSBzZWNvbmQgb25lcyBsYXN0KS4gIEluIHRoaXMgbWFubmVyLCB0aGVyZSBhcmUKK2RpcmVjdG9yaWVzLCBpdCBsb29rcyBmb3IgZmlsZXMgc25tcC5jb25mLCBzbm1wZC5jb25mIGFuZC9vcgorc25tcHRyYXBkLmNvbmYsIGFzIHdlbGwgYXMgc25tcC5sb2NhbC5jb25mLCBzbm1wZC5sb2NhbC5jb25mCithbmQvb3Igc25tcHRyYXBkLmxvY2FsLmNvbmYuICoubG9jYWwuY29uZiBhcmUgYWx3YXlzCityZWFkIGxhc3QuIEluIHRoaXMgbWFubmVyLCB0aGVyZSBhcmUKIDggZGVmYXVsdCBwbGFjZXMgYSBjb25maWd1cmF0aW9uIGZpbGUgY2FuIGV4aXN0IGZvciBhbnkgZ2l2ZW4KIGNvbmZpZ3VyYXRpb24gZmlsZSB0eXBlLgogLlBQCkBAIC0xNzEsMTUgKzE3Miw0NCBAQAogLlBQCiBBbnkgbGluZXMgYmVnaW5uaW5nIHdpdGggdGhlIGNoYXJhY3RlciAnIycgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKIGFyZSB0cmVhdGVkIGFzIGEgY29tbWVudCBhbmQgYXJlIG5vdCBwYXJzZWQuCisuU0ggIklOQ0xVRElORyBPVEhFUiBDT05GSUdVUkFUSU9OIEZJTEVTIgorSXQgaXMgcG9zc2libGUgdG8gaW5jbHVkZSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBwcm9jZXNzaW5nCitkdXJpbmcgbm9ybWFsIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm9jZXNzaW5nLjoKKy5QUAorLlJTCisubmYKKyMgaW5jbHVkZSBzaXRlIHNwZWNpZmljIGNvbmZpZworaW5jbHVkZUZpbGUgc2l0ZS5jb25mCisuUkUKKy5QUAorVGhpcyB3aWxsIGxvYWQgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIGZpbGUuIFRoZQorcGF0aCB0byBmaWxlIG11c3QgYmUgZWl0aGVyIGFic29sdXRlLCBzdGFydGluZyB3aXRoICcvJywKK29yIHJlbGF0aXZlLiBUaGUgcmVsYXRpdmUgcGF0aCBpcyB0aGVuIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkKK3doZXJlIHRoZSBwYXJlbnQgZmlsZSB3aXRoICdpbmNsdWRlRmlsZScgZGlyZWN0aXZlIHJlc2lkZXMuCisuUFAKK1RoZSBpbmNsdWRlZCBmaWxlIG5hbWUgZG9lcyBub3QgbmVlZCB0byBoYXZlICcuY29uZicgc3VmZml4LgorLlBQCisuUlMKKy5uZgorIyBpbmNsdWRlIGEgYWxsICouY29uZiBmaWxlcyBpbiBhIGRpcmVjdG9yeQoraW5jbHVkZURpciAvZXRjL3NubXAvY29uZmlnLmQKKy5SRQorLlBQCitUaGlzIHdpbGwgc2VhcmNoIHNwZWNpZmllZCBkaXJlY3RvcnkgZm9yIGFsbCBmaWxlcyB3aXRoICcuY29uZicKK3N1ZmZpeCBhbmQgcHJvY2VzcyB0aGVtIGFzIGlmIHRoZXkgd2VyZSBpbmNsdWRlZCB1c2luZyBpbmNsdWRlRmlsZQorZGlyZWN0aXZlLiBUaGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbm90IHByb2Nlc3NlZCBpbiBhbnkgcGFydGljdWxhcgorb3JkZXIuCisuUFAKK1RoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IG11c3QgYmUgYWJzb2x1dGUgZGlyZWN0b3J5IHBhdGguCiAuU0ggIkFQSSBJTlRFUkZBQ0UiCiAuUFAKIEluZm9ybWF0aW9uIGFib3V0IHdyaXRpbmcgQyBjb2RlIHRoYXQgbWFrZXMgdXNlIG9mIHRoaXMgc3lzdGVtIGluCiBlaXRoZXIgdGhlIGFnZW50J3MgTUlCIG1vZHVsZXMgb3IgaW4gYXBwbGljYXRpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUKLS5JIHJlYWRfY29uZmlnKDMpCisuSSBuZXRzbm1wX2NvbmZpZ19hcGkoMykKIG1hbnVhbCBwYWdlLgogLlNIICJTRUUgQUxTTyIKIHNubXBjb25mKDEpLAotcmVhZF9jb25maWcoMyksCituZXRzbm1wX2NvbmZpZ19hcGkoMyksCiBzbm1wLmNvbmYoNSksCiBzbm1wZC5jb25mKDUpCiAuXCIgTG9jYWwgVmFyaWFibGVzOgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfZXJyb3IuMyBiL21hbi9zbm1wX2Vycm9yLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfZXJyb3IuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX2ZyZWVfcGR1LjMgYi9tYW4vc25tcF9mcmVlX3BkdS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX2ZyZWVfcGR1LjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9vcGVuLjMgYi9tYW4vc25tcF9vcGVuLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfb3Blbi4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfcGVycm9yLjMgYi9tYW4vc25tcF9wZXJyb3IuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9wZXJyb3IuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3JlYWQuMyBiL21hbi9zbm1wX3JlYWQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9yZWFkLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZWxlY3RfaW5mby4zIGIvbWFuL3NubXBfc2VsZWN0X2luZm8uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZWxlY3RfaW5mby4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2VuZC4zIGIvbWFuL3NubXBfc2VuZC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3NlbmQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmIGIvbWFuL3NubXBfc2Vzc19hcGkuMy5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NDE0ZmMuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19hcGkuMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLlRIIFNOTVBfU0VTU19BUEkgMyAiMTkgTWF5IDIwMTEiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCi0uU0ggTkFNRQotc25tcF9zZXNzX2luaXQsIHNubXBfc2Vzc19vcGVuLCBzbm1wX3Nlc3Nfc2Vzc2lvbiwKLXNubXBfc2Vzc19zZW5kLCBzbm1wX3Nlc3NfYXN5bmNfc2VuZCwKLXNubXBfc2Vzc19zZWxlY3RfaW5mbywgc25tcF9zZXNzX3JlYWQsCi1zbm1wX3Nlc3NfdGltZW91dCwgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlLAotc25tcF9zZXNzX2Nsb3NlLCBzbm1wX3Nlc3NfZXJyb3IgLSBzZXNzaW9uIGZ1bmN0aW9ucwotLlNIIFNZTk9QU0lTCi0uQiAjaW5jbHVkZSA8bmV0LXNubXAvc2Vzc2lvbl9hcGkuaD4KLS5QUAotLkJJICJ2b2lkIHNubXBfc2Vzc19pbml0KHN0cnVjdCBzbm1wX3Nlc3Npb24gKiIgc2Vzc2lvbiAiKTsiCi0uUFAKLS5CSSAidm9pZCAqc25tcF9zZXNzX29wZW4oc3RydWN0IHNubXBfc2Vzc2lvbiAqIiBzZXNzaW9uICIpOyIKLS5QUAotLkJJICJzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzbm1wX3Nlc3Nfc2Vzc2lvbih2b2lkICoiIGhhbmRsZSAiKTsiCi0uUFAKLS5CSSAiaW50IHNubXBfc2Vzc19zZW5kKHZvaWQgKiIgaGFuZGxlICIsIHN0cnVjdCBzbm1wX3BkdSAqIiBwZHUgIik7IgotLlBQCi0uQkkgImludCBzbm1wX3Nlc3NfYXN5bmNfc2VuZCh2b2lkICoiIGhhbmRsZSAiLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfcGR1ICoiIHBkdSAiLCAiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfY2FsbGJhY2sgIiBjYWxsYmFjayAiLCAiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiIgY2FsbGJhY2tEYXRhICIpOyIKLS5QUAotLkJJICJpbnQgc25tcF9zZXNzX3NlbGVjdF9pbmZvKHZvaWQgKiIgaGFuZGxlICIsIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICoiIG51bWZkcyAiLCBmZF9zZXQgKiIgZmRzZXQgIiwgIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKiIgdGltZW91dCAiLCAiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiIgYmxvY2sgIik7IgotLlBQCi0uQkkgImludCBzbm1wX3Nlc3NfcmVhZCh2b2lkICoiIGhhbmRsZSAiLCBmZF9zZXQgKiIgZmRzZXQgIik7IgotLlBQCi0uQkkgInZvaWQgc25tcF9zZXNzX3RpbWVvdXQodm9pZCAqIiBoYW5kbGUgIik7IgotLlBQCi0uQkkgImludCBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uodm9pZCAqIiBoYW5kbGUgIiwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqIiBwZHUgIiwgIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9wZHUgKioiIHJlc3BvbnNlICIpOyIKLS5QUAotLkJJICJpbnQgc25tcF9zZXNzX2Nsb3NlKHZvaWQgKiIgaGFuZGxlICIpOyIKLS5QUAotLkJJICJ2b2lkIHNubXBfc2Vzc19lcnJvcih2b2lkICoiIGhhbmRsZSAiLCBpbnQgKiIgcGNsaWJlcnIgIiwgIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgaW50ICoiIHBzbm1wZXJyICIsIGNoYXIgKioiIHBwZXJyc3RyaW5nICIpOyIKLS5TSCBERVNDUklQVElPTgotVGhlc2UgZnVuY3Rpb25zIGRlZmluZSBhIHN1YnNldCBvZiB0aGUgQVBJIHRoYXQgY2FuIGJlIHVzZWQKLXRvIG1hbmFnZSBzaW5nbGUgU05NUCBzZXNzaW9ucyBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLgotRXhjZXB0IGZvcgotLkJSIHNubXBfc2Vzc19zZXNzaW9uKCkgLAotdGhlc2UgZnVuY3Rpb25zIGFyZSBzaW5nbGUgc2Vzc2lvbiB2ZXJzaW9ucyBvZiB0aGUgdHJhZGl0aW9uYWwKLVNOTVAgbGlicmFyeSBBUEkuCi0uUFAKLU5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgdXNlIGFuIG9wYXF1ZSBwb2ludGVyCi0uUkkgKCBoYW5kbGUKLWluIHRoZSBhYm92ZSBwcm90b3R5cGVzKSB0byBpZGVudGlmeSBhIHNpbmdsZSBzZXNzaW9uIGluIGxpZXUgb2YgYQotLkkgc2Vzc2lvbgotcG9pbnRlciAoYXMgaW4gdGhlIHRyYWRpdGlvbmFsIEFQSSkuCi0uUFAKLS5CIHNubXBfc2Vzc19pbml0KCkKLXByZXBhcmVzIGEgc3RydWN0IHNubXBfc2Vzc2lvbiB0aGF0IHNvdXJjZXMgdHJhbnNwb3J0IGNoYXJhY3RlcmlzdGljcwotYW5kIGNvbW1vbiBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYSBzZXQgb2YgU05NUCB0cmFuc2FjdGlvbnMuCi1BZnRlciB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8KLS5CIHNubXBfc2Vzc19vcGVuKCkKLXRvIGNyZWF0ZSBhbiBTTk1QIHNlc3Npb24sIHRoZSBzdHJ1Y3R1cmUgaXMgbm8gbG9uZ2VyIHVzZWQuICBJbnN0ZWFkCi10aGUgb3BhcXVlIHBvaW50ZXIgcmV0dXJuZWQgYnkKLS5CIHNubXBfc2Vzc19vcGVuKCkKLWlzIHVzZWQgdG8gcmVmZXIgdG8gdGhhdCBzZXNzaW9uIGhlbmNlZm9ydGguCi0uUFAKLVNOTVAgc2Vzc2lvbnMgdGhhdCBhcmUgY3JlYXRlZCB3aXRoCi0uQiBzbm1wX3Nlc3Nfb3BlbigpCi1hcmUgbm90IGFmZmVjdGVkIGJ5LCBhbmQgU0hPVUxEIE5PVCBCRSBVU0VEIFdJVEgsCi0uQlIgc25tcF9zZWxlY3RfaW5mbygpICIsICIgc25tcF9yZWFkKCkgIiwgIiBzbm1wX3RpbWVvdXQoKSAiIG5vciIKLS5CUiBzbm1wX2Nsb3NlKCkgLgotUmF0aGVyIHRoZSBlcXVpdmFsZW50IHNpbmdsZSBzZXNzaW9uIGZ1bmN0aW9ucyBkZXNjcmliZWQgaGVyZSBzaG91bGQKLWJlIHVzZWQuCi0uUFAKLS5CIHNubXBfc2Vzc19pbml0KCkKLWFuZAotLkIgc25tcF9zZXNzX29wZW4oKQotZWFjaCB0YWtlIGFzIGlucHV0IGEgcG9pbnRlciB0byBhIHN0cnVjdCBzbm1wX3Nlc3Npb24gb2JqZWN0LgotVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGEgc2V0IG9mIHRyYW5zYWN0aW9ucyB0aGF0Ci13aWxsIHNoYXJlIHNpbWlsYXIgdHJhbnNwb3J0IGNoYXJhY3RlcmlzdGljcy4KLS5CIHNubXBfc2Vzc19zZXNzaW9uKCkKLXRha2VzIHRoZSBvcGFxdWUgc2Vzc2lvbiBoYW5kbGUgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvCi1pdHMgYXNzb2NpYXRlZCBzdHJ1Y3Qgc25tcF9zZXNzaW9uLgotLlBQCi0uQiBzbm1wX3Nlc3Nfc2VuZCgpCi1hbmQKLS5CIHNubXBfc2Vzc19hc3luY19zZW5kKCkKLWVhY2ggdGFrZSBhCi0uSSBwZHUKLXBhcmFtZXRlciwgd2hpY2ggcG9pbnRzIHRvIGEgc3RydWN0IHNubXBfcGR1IG9iamVjdCBjb250YWluaW5nCi1pbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyBhIHRyYW5zYWN0aW9uIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQgb3ZlcgotYW4gb3BlbiBzZXNzaW9uLgotLlBQCi1Db25zdWx0IHNubXBfYXBpLmggZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgotLlBQCi1XaXRoIHRoZQotLkkgc25tcF9zZXNzX2FzeW5jX3NlbmQoKQotY2FsbCwKLS5JIHNubXBfc2Vzc19yZWFkKCkKLXdpbGwgaW52b2tlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgd2hlbiB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCi0uUFAKLS5CUiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oKSAiLCAiIHNubXBfc2Vzc19yZWFkKCkgIiBhbmQgIiBzbm1wX3Nlc3NfdGltZW91dCgpCi1wcm92aWRlIGFuIGludGVyZmFjZSBmb3IgdGhlIHVzZSBvZiB0aGUKLS5CUiBzZWxlY3QgKDIpCi1zeXN0ZW0gY2FsbCBzbyB0aGF0IFNOTVAgdHJhbnNhY3Rpb25zIGZvciBhIHNpbmdsZSBzZXNzaW9uIGNhbiBvY2N1cgotYXN5bmNocm9ub3VzbHkuCi0uUFAKLS5CIHNubXBfc2Vzc19zZWxlY3RfaW5mbygpCi1pcyBwYXNzZWQgdGhlIGluZm9ybWF0aW9uIHRoYXQgd291bGQgaGF2ZSBiZWVuIHBhc3NlZCB0bwotLkJSIHNlbGVjdCAoMikKLWluIHRoZSBhYnNlbmNlIG9mIFNOTVAuICBGb3IgZXhhbXBsZSwgdGhpcyBtaWdodCBpbmNsdWRlIGZpbGUKLWRlc2NyaXB0b3JzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBsb29wIG9mIGEgZ3JhcGhpY2FsCi1hcHBsaWNhdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBpcyBtb2RpZmllZCBzbyB0aGF0IFNOTVAgd2lsbCBnZXQgdGhlCi1zZXJ2aWNlIGl0IHJlcXVpcmVzIGZyb20gdGhlIGNhbGwgdG8KLS5CUiBzZWxlY3QgKDIpLgotSW4gdGhpcyBjYXNlLAotLklSIG51bWZkcyAiLCAiIGZkc2V0ICIgYW5kICIgdGltZW91dAotY29ycmVzcG9uZCB0byB0aGUKLS5JUiBuZmRzICIsICIgcmVhZGZkcyAiIGFuZCAiIHRpbWVvdXQKLWFyZ3VtZW50cyB0bwotLkJSIHNlbGVjdCAoMikKLXJlc3BlY3RpdmVseS4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGF0IHRpbWVvdXQgbXVzdCBBTFdBWVMgcG9pbnQgdG8KLWFuIGFsbG9jYXRlZCAoYnV0IHBlcmhhcHMgdW5pbml0aWFsaXplZCkKLS5JIHN0cnVjdCB0aW1ldmFsCi0oaXQgY2Fubm90IGJlIE5VTEwgYXMgZm9yCi0uQlIgc2VsZWN0ICgyKSkuCi1JZgotLkkgdGltZW91dAotd291bGQgaGF2ZSBiZWVuIHBhc3NlZCBhcyBOVUxMLAotLkkgYmxvY2sKLWlzIGluc3RlYWQgc2V0IHRvIHRydWUsIGFuZAotLkkgdGltZW91dAotaXMgdHJlYXRlZCBhcyB1bmRlZmluZWQuICBUaGlzIHNhbWUgcnVsZSBhcHBsaWVzIHVwb24gcmV0dXJuIGZyb20KLS5CUiBzbm1wX3NlbGVjdF9pbmZvKCkgLgotLlBQCi1BZnRlciBjYWxsaW5nCi0uQiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oKSAsCi0uQlIgc2VsZWN0ICgyKQotc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSByZXR1cm5lZCBkYXRhLiAgV2hlbiBpdCByZXR1cm5zLAotLkIgc25tcF9zZXNzX3JlYWQoKQotc2hvdWxkIHRoZW4gYmUgY2FsbGVkIHdpdGggdGhlCi0uSSBmZF9zZXQKLXJldHVybmVkIGZyb20KLS5CUiBzZWxlY3QgKDIpLgotVGhpcyB3aWxsIHJlYWQgYW55IGlucHV0IGZyb20gdGhpcyBzZXNzaW9uJ3MgU05NUCBzb2NrZXQuICBJZgotLkJSIHNlbGVjdCAoMikKLXRpbWVzIG91dCAodGhhdCBpcywgaXQgcmV0dXJucyB6ZXJvKSwKLS5CIHNubXBfc2Vzc190aW1lb3V0KCkKLXNob3VsZCBiZSBjYWxsZWQgdG8gc2VlIGlmIGEgdGltZW91dCBoYXMgb2NjdXJyZWQgb24gdGhlIFNOTVAKLXNlc3Npb24uCi0uUFAKLS5JIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZQotaXMgYSBjb252ZW5pZW5jZSByb3V0aW5lIHRoYXQgd2lsbCBzZW5kIHRoZSByZXF1ZXN0LAotd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGFuZCBwcm9jZXNzIGl0IGJlZm9yZSByZXR1cm5pbmcuCi1TZWUgdGhlIGRlc2NyaXB0aW9ucyBvZgotLkkgInNubXBfc2Vzc19zZW5kIiAiLCAiICJzbm1wX3Nlc3NfcmVhZCIKLWV0YyBmb3IgZGV0YWlscy4KLS5TSCBESUFHTk9TVElDUwotLlBQCi1FcnJvciByZXR1cm4gc3RhdHVzIGZyb20gCi0uQiBzbm1wX3Nlc3Nfb3BlbigpCi1pcyBpbmRpY2F0ZWQgYnkgcmV0dXJuIG9mIGEgTlVMTCBwb2ludGVyLgotRXJyb3IgcmV0dXJuIHN0YXR1cyBmcm9tIAotLkIgc25tcF9zZXNzX2Nsb3NlKCkKLWFuZAotLkIgc25tcF9zZXNzX3NlbmQoKQotaXMgaW5kaWNhdGVkIGJ5IGEgcmV0dXJuIHZhbHVlIG9mIDAuICBBIHN1Y2Nlc3NmdWwgc3RhdHVzIHdpbGwgcmV0dXJuCi0xLgotLlBQCi1GdXJ0aGVyIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSB1c2luZwotLkIgc25tcF9zZXNzX2Vycm9yKCkKLXRvIHNlZSB3aGF0IHR5cGUgb2YgZXJyb3IgaGFzIG9jY3VycmVkLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZQotU05NUAotLkkgc25tcF9lcnJubwotdmFyaWFibGUsIHRoZSB2YWx1ZSBvZiB0aGUgc3lzdGVtCi0uSSBlcnJubwotdmFyaWFibGUsIGFuZCBhIHN0cmluZyBpbnRlcnByZXRhdGlvbiBvZiBib3RoIHZhcmlhYmxlcy4gIFRoZSBzdHJpbmcKLW11c3QgYmUgZnJlZWQgYWZ0ZXIgdXNlIGJ5IHRoZSBjYWxsZXIuCi0uUFAKLUZvciBlcnJvcnMgcmV0dXJuZWQgYnkKLS5CUiBzbm1wX3Nlc3Nfb3BlbigpICwKLXVzZSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbgotLkIgc25tcF9lcnJvcigpCi1pbnN0ZWFkIG9mCi0uQlIgc25tcF9zZXNzX2Vycm9yKCkgLgotLlBQCi1Db25zdWx0IHNubXBfYXBpLmggZm9yIHRoZSBjb21wbGV0ZSBzZXQgb2YgU05NUCBsaWJyYXJ5Ci1lcnJvciB2YWx1ZXMuCi1UaGUgU05NUCBsaWJyYXJ5IGVycm9yIHZhbHVlCi0uSVIgc25tcGVycgotY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLS5SUyAybgotLklQIFNOTVBFUlJfR0VORVJSIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLUEgZ2VuZXJpYyBlcnJvciBvY2N1cnJlZC4KLS5JUCBTTk1QRVJSX0JBRF9MT0NQT1JUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLVRoZSBsb2NhbCBwb3J0IHdhcyBiYWQgYmVjYXVzZSBpdCBoYWQgYWxyZWFkeSBiZWVuCi1hbGxvY2F0ZWQgb3IgcGVybWlzc2lvbiB3YXMgZGVuaWVkLgotLklQIFNOTVBFUlJfQkFEX0FERFJFU1MgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotVGhlIGhvc3QgbmFtZSBvciBhZGRyZXNzIGdpdmVuIHdhcyBub3QgdXNlYWJsZS4KLS5JUCBTTk1QRVJSX0JBRF9TRVNTSU9OIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLVRoZSBzcGVjaWZpZWQgc2Vzc2lvbiB3YXMgbm90IG9wZW4uCi0uSVAgU05NUEVSUl9UT09fTE9ORyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9OT19TT0NLRVQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfVjJfSU5fVjEgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfVjFfSU5fVjIgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1JFUEVBVEVSUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfUkVQRVRJVElPTlMgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX0FTTjFfQlVJTEQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1NFTkRUTyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfUkNWRlJPTSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9CQURfUEFSU0UgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1ZFUlNJT04gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX0NPTU1VTklUWSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9OT0FVVEhfREVTUFJJViBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9BQk9SVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9VTktOT1dOX1BEVSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uSVAgU05NUEVSUl9USU1FT1VUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5SRQotLlBQCi0uU0ggIlNFRSBBTFNPIgotLkJSIHNlbGVjdCAiKDIpLCAiIHNubXBfYXBpICIoMyksICIgc25tcF9hcGkuaApkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19hc3luY19zZW5kLjMgYi9tYW4vc25tcF9zZXNzX2FzeW5jX3NlbmQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX2FzeW5jX3NlbmQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19jbG9zZS4zIGIvbWFuL3NubXBfc2Vzc19jbG9zZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3NfY2xvc2UuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19lcnJvci4zIGIvbWFuL3NubXBfc2Vzc19lcnJvci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3NfZXJyb3IuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19pbml0LjMgYi9tYW4vc25tcF9zZXNzX2luaXQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX2luaXQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19vcGVuLjMgYi9tYW4vc25tcF9zZXNzX29wZW4uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX29wZW4uMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfc2Vzc19hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2Vzc19wZXJyb3IuMyBiL21hbi9zbm1wX3Nlc3NfcGVycm9yLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19wZXJyb3IuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3NfcmVhZC4zIGIvbWFuL3NubXBfc2Vzc19yZWFkLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19yZWFkLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3Nfc2VsZWN0X2luZm8uMyBiL21hbi9zbm1wX3Nlc3Nfc2VsZWN0X2luZm8uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX3NlbGVjdF9pbmZvLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3Nfc2VuZC4zIGIvbWFuL3NubXBfc2Vzc19zZW5kLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19zZW5kLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3Nfc2Vzc2lvbi4zIGIvbWFuL3NubXBfc2Vzc19zZXNzaW9uLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19zZXNzaW9uLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3NfdGltZW91dC4zIGIvbWFuL3NubXBfc2Vzc190aW1lb3V0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc190aW1lb3V0LjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3NldF9taWJfd2FybmluZ3MuMyBiL21hbi9zbm1wX3NldF9taWJfd2FybmluZ3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXRfbWliX3dhcm5pbmdzLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zIGIvbWFuL3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9taWJfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3RpbWVvdXQuMyBiL21hbi9zbm1wX3RpbWVvdXQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF90aW1lb3V0LjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF90cmFwX2FwaS4zLmRlZiBiL21hbi9zbm1wX3RyYXBfYXBpLjMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTNkNjc3Li4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3RyYXBfYXBpLjMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLlRIIFNOTVBfVFJBUF9BUEkgMyAiMjkgU2VwIDIwMDMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCi0uU0ggTkFNRQotc2VuZF9lYXN5X3RyYXAsIHNlbmRfdHJhcF92YXJzLCBzZW5kX3YydHJhcCAtIHNlbmQgVFJBUHMgb3IgSU5GT1JNcyBmcm9tIGEgTmV0LVNOTVAgTUlCIG1vZHVsZQotLlNIIFNZTk9QU0lTCi0uQiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oPgotLlBQCi0uQkkgInZvaWQgc2VuZF9lYXN5X3RyYXAoaW50ICIgdHJhcCAiLCBpbnQgIiBzcGVjaWZpYyAiKTsiCi0uUFAKLS5CSSAidm9pZCBzZW5kX3RyYXBfdmFycyhpbnQgIiB0cmFwICIsIGludCAiIHNwZWNpZmljICIsIHN0cnVjdCB2YXJpYWJsZV9saXN0ICoiIHZhcnMgIik7IgotLlBQCi0uQkkgInZvaWQgc2VuZF92MnRyYXAoc3RydWN0IHZhcmlhYmxlX2xpc3QgKiIgdmFycyAiKTsiCi0uU0ggREVTQ1JJUFRJT04KLVRoZXNlIHRocmVlIHJvdXRpbmVzIG1heSBiZSB1c2VkIHRvIHNlbmQgdHJhcHMgZnJvbSBhIE1JQiBtb2R1bGUKLXdpdGhpbiB0aGUgTmV0LVNOTVAgYWdlbnQgKGluY2x1ZGluZyBhbiBBZ2VudFggc3ViYWdlbnQpLgotLlBQCi0uQiBzZW5kX2Vhc3lfdHJhcCgpCi1zZW5kcyBhbiBTTk1QdjEgdHJhcCAob3IgdGhlIFNOTVB2MiBlcXVpdmFsZW50KSB0byB0aGUgbGlzdCBvZgotY29uZmlndXJlZCB0cmFwIGRlc3RpbmF0aW9ucyAob3IgInNpbmtzIiksIHVzaW5nIHRoZSBwcm92aWRlZCB2YWx1ZXMKLWZvciB0aGUgZ2VuZXJpYyB0cmFwIHR5cGUsIGFuZCBzcGVjaWZpYyB0cmFwIHZhbHVlLgotLlBQCi0uQiBzZW5kX3RyYXBfdmFycygpCi1pcyBzaW1pbGFyLCBidXQgYXBwZW5kcyB0aGUgc3VwcGxpZWQgbGlzdCBvZiB2YXJpYWJsZSBiaW5kaW5ncyB0byB0aGUKLXRyYXBzIHRoYXQgYXJlIHNlbnQuCi0uUFAKLS5CIHNlbmRfdjJ0cmFwKCkKLXVzZXMgdGhlIHN1cHBsaWVkIGxpc3Qgb2YgdmFyaWFibGUgYmluZGluZ3MgdG8gZm9ybSBhbiBTTk1QdjIgdHJhcCwKLXdoaWNoIGlzIHNlbnQgdG8gU05NUHYyLWNhcGFibGUgc2lua3Mgb24gdGhlIGNvbmZpZ3VyZWQgbGlzdC4gIEFuCi1lcXVpdmFsZW50IElORk9STSBpcyBzZW50IHRvIHRoZSBjb25maWd1cmVkcSBsaXN0IG9mIGluZm9ybSBzaW5rcy4KLVNpbmtzIHRoYXQgY2FuIG9ubHkgaGFuZGxlIFNOTVB2MSB0cmFwcyBhcmUgc2tpcHBlZC4KLS5QUAotVGhlIHZhcmlvdXMgInNlbmRfdHJhcCgpIiBjYWxscyBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0cmFwcyBpbiBkaWZmZXJlbnQKLWZvcm1hdHMuICBBbmQgdGhlIHZhcmlvdXMgInRyYXBzaW5rIiBkaXJlY3RpdmVzIGFsbG93IHlvdSB0byBzcGVjaWZ5Ci1kZXN0aW5hdGlvbnMgdG8gcmVjZWl2ZSBkaWZmZXJlbnQgZm9ybWF0cy4KLUJ1dCAqYWxsKiB0cmFwcyBhcmUgc2VudCB0byAqYWxsKiBkZXN0aW5hdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkKLXdlcmUgc3BlY2lmaWVkLgotLm5mCi1JLmUuIGl0J3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fICB0cmFwc2luawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8KLSAgICBzZW5kX2Vhc3lfdHJhcCBcX19fICBbICBUcmFwICAgICAgXSBfX19fICB0cmFwMnNpbmsKLSAgICAgICAgICAgICAgICAgICAgX19fICBbIEdlbmVyYXRvciAgXQotICAgIHNlbmRfdjJ0cmFwICAgIC8gICAgIFsgICAgICAgICAgICBdIC0tLS0tIGluZm9ybXNpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19fXwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXBzZXNzCi0KLSpOb3QqCi0gICAgIHNlbmRfZWFzeV90cmFwICAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgdHJhcHNpbmsKLSAgICAgc2VuZF92MnRyYXAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0+ICB0cmFwMnNpbmsKLSAgICAgPz8/PyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0+ICBpbmZvcm1zaW5rCi0gICAgID8/Pz8gICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgdHJhcHNlc3MKLS5maQotLlNIIFdBUk5JTkdTCi1UaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBzZW5kIHRoZSB0cmFwcyBpbW1lZGlhdGVseSB0aGV5IGFyZSBjYWxsZWQuCi1JbnZva2luZyB0aGVtIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lIGlzIGxlZnQgdG8gdGhlIE1JQiBtb2R1bGUgcHJvZ3JhbW1lci4KLS5TSCAiU0VFIEFMU08iCi0uQlIgc25tcGQuY29uZiAiKDUpLCAiIHNubXB0cmFwZCAiKDgpIgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBidWxrZ2V0LjEuZGVmIGIvbWFuL3NubXBidWxrZ2V0LjEuZGVmCmluZGV4IGI0ZTA2MmQuLjI1MjEwZjMgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wYnVsa2dldC4xLmRlZgorKysgYi9tYW4vc25tcGJ1bGtnZXQuMS5kZWYKQEAgLTE3LDEzICsxNywxMyBAQAogcGlucG9pbnQgd2h5IHRoZSByZXF1ZXN0IHdhcyBtYWxmb3JtZWQuCiAuU0ggT1BUSU9OUwogLlRQIDgKLS5CSSAtQ24gPE5VTT4KKy5CSSBcLUNuIDxOVU0+CiBTZXQgdGhlCiAuSSBub24tcmVwZWF0ZXJzCiBmaWVsZCBpbiB0aGUgR0VUQlVMSyBQRFUuICBUaGlzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHN1cHBsaWVkCiB2YXJpYWJsZXMgdGhhdCBzaG91bGQgbm90IGJlIGl0ZXJhdGVkIG92ZXIuICBUaGUgZGVmYXVsdCBpcyAwLgogLlRQCi0uQkkgLUNyIDxOVU0+CisuQkkgXC1DciA8TlVNPgogU2V0IHRoZQogLkkgbWF4LXJlcGV0aXRpb25zCiBmaWVsZCBpbiB0aGUgR0VUQlVMSyBQRFUuICBUaGlzIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YKQEAgLTQxLDcgKzQxLDcgQEAKIC5TSCBFWEFNUExFCiBUaGUgY29tbWFuZDoKIC5QUAotc25tcGJ1bGtnZXQgLXYyYyAtQ24xIC1DcjUgLU9zIC1jIHB1YmxpYyB6ZXVzIHN5c3RlbSBpZlRhYmxlCitzbm1wYnVsa2dldCBcLXYyYyBcLUNuMSBcLUNyNSBcLU9zIFwtYyBwdWJsaWMgemV1cyBzeXN0ZW0gaWZUYWJsZQogLlBQCiB3aWxsIHJldHJpZXZlIHRoZSB2YXJpYWJsZSBzeXN0ZW0uc3lzRGVzY3IuMCAod2hpY2ggaXMgdGhlCiBsZXhpY29ncmFwaGljYWxseSBuZXh0IG9iamVjdCB0byBzeXN0ZW0pIGFuZCB0aGUgZmlyc3QgNSBvYmplY3RzIGluCmRpZmYgLS1naXQgYS9tYW4vc25tcGJ1bGt3YWxrLjEuZGVmIGIvbWFuL3NubXBidWxrd2Fsay4xLmRlZgppbmRleCBlNmM3YTY5Li5jNWY0YTA2IDEwMDY0NAotLS0gYS9tYW4vc25tcGJ1bGt3YWxrLjEuZGVmCisrKyBiL21hbi9zbm1wYnVsa3dhbGsuMS5kZWYKQEAgLTEsNyArMSw3IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gCi0uXCIgU2VlIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIKLS5cIiBjb3B5cmlnaHRzIHRoYXQgbWF5IGFwcGx5OgorLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQorLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworLlwiIHRoYXQgbWF5IGFwcGx5OgogLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLlwiIAlDb3B5cmlnaHQgMTk4OCwgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQogLlwiIApAQCAtNDIsNyArNDIsNyBAQAogLklSIHZhcmlhYmxlcyg1KSAuCiBJZiBubyBPSUQgYXJndW1lbnQgaXMgcHJlc2VudCwKIC5CIHNubXBidWxrd2Fsawotd2lsbCBzZWFyY2ggTUlCLTIuCit3aWxsIHNlYXJjaCBNSUJcLTIuCiAuUFAKIElmIHRoZSBuZXR3b3JrIGVudGl0eSBoYXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdCBwYWNrZXQsIGFuCiBlcnJvciBwYWNrZXQgd2lsbCBiZSByZXR1cm5lZCBhbmQgYSBtZXNzYWdlIHdpbGwgYmUgc2hvd24sIGhlbHBpbmcgdG8KQEAgLTUyLDcgKzUyLDcgQEAKIE1JQiwgdGhlIG1lc3NhZ2UgIkVuZCBvZiBNSUIiIHdpbGwgYmUgZGlzcGxheWVkLgogLlNIIE9QVElPTlMKIC5UUCA4Ci0uQiAtQ2MKKy5CIFwtQ2MKIERvIG5vdCBjaGVjayB3aGV0aGVyIHRoZSByZXR1cm5lZCBPSURzIGFyZSBpbmNyZWFzaW5nLiAgU29tZSBhZ2VudHMKIChMYXNlckpldHMgYXJlIGFuIGV4YW1wbGUpIHJldHVybiBPSURzIG91dCBvZiBvcmRlciwgYnV0IGNhbgogY29tcGxldGUgdGhlIHdhbGsgYW55d2F5LiAgT3RoZXIgYWdlbnRzIHJldHVybiBPSURzIHRoYXQgYXJlIG91dCBvZgpAQCAtNjIsMTAgKzYyLDEwIEBACiAuQiBzbm1wYnVsa3dhbGsKIHRyaWVzIHRvIGRldGVjdCB0aGlzIGJlaGF2aW9yIGFuZCB3YXJucyB5b3Ugd2hlbiBpdCBoaXRzIGFuIGFnZW50CiBhY3RpbmcgaWxsZWdhbGx5LiAgVXNlCi0uQiAtQ2MKKy5CIFwtQ2MKIHRvIHR1cm4gb2ZmIHRoaXMgYmVoYXZpb3VyLgogLlRQCi0uQiAtQ2kKKy5CIFwtQ2kKIEluY2x1ZGUgdGhlIGdpdmVuIE9JRCBpbiB0aGUgc2VhcmNoIHJhbmdlLiAgTm9ybWFsbHkKIC5CIHNubXBidWxrd2FsawogdXNlcyBHRVRCVUxLIHJlcXVlc3RzIHN0YXJ0aW5nIHdpdGggdGhlIE9JRCB5b3Ugc3BlY2lmaWVkIGFuZCByZXR1cm5zCkBAIC03NCwxNiArNzQsMTYgQEAKIHJlc3VsdHMgaWYgaXQgaXMgYSB2YWxpZCBPSUQgaW4gdGhlIHRyZWUgaXRzZWxmLiAgVGhpcyBvcHRpb24gbGV0cyB5b3UKIGRvIHRoaXMuCiAuVFAKLS5CSSAtQ24gPE5VTT4KKy5CSSBcLUNuIDxOVU0+CiBTZXQgdGhlCiAuSSBub24tcmVwZWF0ZXJzCiBmaWVsZCBpbiB0aGUgR0VUQlVMSyBQRFVzLiAgVGhpcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdXBwbGllZAogdmFyaWFibGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBpdGVyYXRlZCBvdmVyLiAgVGhlIGRlZmF1bHQgaXMgMC4KIC5UUAotLkIgLUNwCisuQiBcLUNwCiBVcG9uIGNvbXBsZXRpb24gb2YgdGhlIHdhbGssIHByaW50IHRoZSBudW1iZXIgb2YgdmFyaWFibGVzIGZvdW5kLgogLlRQCi0uQkkgLUNyIDxOVU0+CisuQkkgXC1DciA8TlVNPgogU2V0IHRoZQogLkkgbWF4LXJlcGV0aXRpb25zCiBmaWVsZCBpbiB0aGUgR0VUQlVMSyBQRFVzLiAgVGhpcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mCkBAIC0xMDEsNyArMTAxLDcgQEAKIC5TSCBFWEFNUExFCiBUaGUgY29tbWFuZDoKIC5QUAotc25tcGJ1bGt3YWxrIC12MmMgLU9zIC1jIHB1YmxpYyB6ZXVzIHN5c3RlbQorc25tcGJ1bGt3YWxrIFwtdjJjIFwtT3MgXC1jIHB1YmxpYyB6ZXVzIHN5c3RlbQogLlBQCiB3aWxsIHJldHJpZXZlIGFsbCBvZiB0aGUgdmFyaWFibGVzIHVuZGVyIHN5c3RlbToKIC5QUApkaWZmIC0tZ2l0IGEvbWFuL3NubXBjbWQuMS5kZWYgYi9tYW4vc25tcGNtZC4xLmRlZgppbmRleCA0ODUzY2FmLi5lNGRmOGIyIDEwMDY0NAotLS0gYS9tYW4vc25tcGNtZC4xLmRlZgorKysgYi9tYW4vc25tcGNtZC4xLmRlZgpAQCAtMSwzICsxLDQgQEAKKy5cIiAtKi0gbnJvZmYgLSotCiAuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCiAuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCiAuXCIgdGhhdCBtYXkgYXBwbHk6CkBAIC0yNyw3ICsyOCw3IEBACiAuXCIgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogLlwiIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBDTUQgMSAiMDEgU2VwIDIwMDYiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUENNRCAxICIyMCBKdWwgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wY21kIC0gb3B0aW9ucyBhbmQgYmVoYXZpb3VyIGNvbW1vbiB0byBtb3N0IG9mIHRoZSBOZXQtU05NUCBjb21tYW5kLWxpbmUgdG9vbHMKIC5TSCBTWU5PUFNJUwpAQCAtNDQsOTIgKzQ1LDU0IEBACiBhcHBsaWNhdGlvbnMgdHlwaWNhbGx5IChidXQgbm90IG5lY2Vzc2FyaWx5KSB0YWtlIGFkZGl0aW9uYWwKIHBhcmFtZXRlcnMgdGhhdCBhcmUgZ2l2ZW4gYWZ0ZXIgdGhlIGFnZW50IHNwZWNpZmljYXRpb24uICBUaGVzZQogcGFyYW1ldGVycyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgbWFudWFsIHBhZ2VzIGZvciBlYWNoIGFwcGxpY2F0aW9uLgotCi0uU0ggT1BUSU9OUworLlNIIENPTU1BTkQtTElORSBDT05GSUcgT1BUSU9OUworSW4gYWRkaXRpb24gdG8gdGhlIG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoaXMgbWFudWFsIHBhZ2UsIGFsbCBvZiB0aGUKK3Rva2VucyBkZXNjcmliZWQgaW4gdGhlIFxmSXNubXAuY29uZlxmUiBhbmQgb3RoZXIgLmNvbmYgbWFudWFsIHBhZ2VzCitjYW4gYmUgdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9mIE5ldC1TTk1QIGFwcGxpY2F0aW9ucyBhcyB3ZWxsIGJ5CitwcmVmaXhpbmcgdGhlbSB3aXRoICJcLVwtIi4gIEVHLCBzcGVjaWZ5aW5nCitcZklcLVwtZG9udExvYWRIb3N0Q29uZmlnPXRydWVcZlIgb24gdGhlIGNvbW1hbmQgbGluZSB3aWxsIHR1cm4gb2YKK2xvYWRpbmcgb2YgdGhlIGhvc3Qgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcy4KKy5QUAorVGhlIHNubXAuY29uZiBmaWxlIHNldHRpbmdzIGFuZCB0aGUgZG91YmxlLWRhc2ggYXJndW1lbnRzIG92ZXItcmlkZQordGhlIHNpbmdsZS1kYXNoIGFyZ3VtZW50cy4gIFNvIGl0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpZgorc2luZ2xlLWRhc2ggYXJndW1lbnRzIGFyZW4ndCB3b3JraW5nIGJlY2F1c2UgeW91IGhhdmUgc2V0dGluZ3MgaW4gdGhlCitcZklzbm1wLmNvbmZcZlIgZmlsZSB0aGF0IGNvbmZsaWN0IHdpdGggdGhlbSB0aGVuIHlvdSdsbCBuZWVkIHRvIHVzZQordGhlIGxvbmdlci1mb3JtIGRvdWJsZS1kYXNoIGFyZ3VtZW50cyB0byBzdWNjZXNzZnVsbHkgdHJ1bXAgdGhlCitcZklzbm1wLmNvbmZcZlIgZmlsZSBzZXR0aW5ncy4KKy5TSCBHZW5lcmljIE9wdGlvbnMKK1RoZXNlIG9wdGlvbnMgY29udHJvbCBob3cgdGhlIE5ldC1TTk1QIGNvbW1hbmRzIGJlaGF2ZSByZWdhcmRsZXNzIG9mCit3aGF0IHZlcnNpb24gb2YgU05NUCB5b3UgYXJlIHVzaW5nLiAgU2VlIGZ1cnRoZXIgYmVsb3cgZm9yIG9wdGlvbnMKK3RoYXQgY29udHJvbCBzcGVjaWZpYyB2ZXJzaW9ucyBvciBzdWItbW9kdWxlcyBvZiB0aGUgU05NUCBwcm90b2NvbC4gCiAuVFAKLS5CSSAiLTNbTW1La10gIDB4SEVYS0VZIgotU2V0cyB0aGUga2V5cyB0byBiZSB1c2VkIGZvciBTTk1QdjMgdHJhbnNhY3Rpb25zLiAgVGhlc2Ugb3B0aW9ucyBhbGxvdwoteW91IHRvIHNldCB0aGUgbWFzdGVyIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIGtleXMgKC0zbSBhbmQgLTNNCi1yZXNwZWN0aXZlbHkpIG9yIHNldCB0aGUgbG9jYWxpemVkIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIGtleXMKLSgtM2sgYW5kIC0zSyByZXNwZWN0aXZlbHkpLiAgU05NUHYzIGtleXMgY2FuIGJlIGVpdGhlciBwYXNzZWQgaW4gYnkKLWhhbmQgdXNpbmcgdGhlc2UgZmxhZ3MsIG9yIGJ5IHRoZSB1c2Ugb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSBwYXNzd29yZHMKLXVzaW5nIHRoZSAtQSBhbmQgLVggZmxhZ3MgZGlzY3Vzc2VkIGJlbG93LiAgRm9yIGZ1cnRoZXIgZGV0YWlscyBvbgotU05NUHYzIGFuZCBpdHMgdXNhZ2Ugb2Yga2V5aW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIE5ldC1TTk1QIHR1dG9yaWFsCi13ZWIgc2l0ZSAoIGh0dHA6Ly93d3cuTmV0LVNOTVAub3JnL3R1dG9yaWFsLTUvY29tbWFuZHMvICkuIAotT3ZlcnJpZGVzIHRoZSBkZWZBdXRoTWFzdGVyS2V5ICgtM20pLCBkZWZQcml2TWFzdGVyS2V5ICgtM00pLCAKLWRlZkF1dGhMb2NhbGl6ZWRLZXkgKC0zaykgb3IgZGVmUHJpdkxvY2FsaXplZEtleSAoLTNLKSB0b2tlbnMsIHJlc3BlY3RpdmVseSwgCi1pbiB0aGUKLS5JIHNubXAuY29uZgotZmlsZSwgc2VlCi0uSSBzbm1wLmNvbmYoNSkuCi0uVFAKLS5CSSAtYSAiIGF1dGhQcm90b2NvbCIKLVNldCB0aGUgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgKE1ENSBvciBTSEEpIHVzZWQgZm9yIGF1dGhlbnRpY2F0ZWQgU05NUHYzCi1tZXNzYWdlcy4gT3ZlcnJpZGVzIHRoZSBcZklkZWZBdXRoVHlwZVxmUiB0b2tlbiBpbiB0aGUKLS5JIHNubXAuY29uZgotZmlsZS4KLS5UUAotLkJJIC1BICIgYXV0aFBhc3N3b3JkIgotU2V0IHRoZSBhdXRoZW50aWNhdGlvbiBwYXNzIHBocmFzZSB1c2VkIGZvciBhdXRoZW50aWNhdGVkIFNOTVB2MwotbWVzc2FnZXMuICBPdmVycmlkZXMgdGhlIFxmSWRlZkF1dGhQYXNzcGhyYXNlXGZSIHRva2VuIGluIHRoZQotLkkgc25tcC5jb25mCi1maWxlLiBJdCBpcyBpbnNlY3VyZSB0byBzcGVjaWZ5IHBhc3MgcGhyYXNlcyBvbiB0aGUgY29tbWFuZCBsaW5lLAotc2VlCi0uSSBzbm1wLmNvbmYoNSkuCi0uVFAKLS5CSSAtYyAiIGNvbW11bml0eSIKLVNldCB0aGUgY29tbXVuaXR5IHN0cmluZyBmb3IgU05NUHYxL3YyYyB0cmFuc2FjdGlvbnMuCi1PdmVycmlkZXMgdGhlIFxmSWRlZkNvbW11bml0eVxmUiB0b2tlbiBpbiB0aGUKLS5JIHNubXAuY29uZgotZmlsZS4KLS5UUAotLkIgLWQKKy5CIFwtZAogRHVtcCAoaW4gaGV4YWRlY2ltYWwpIHRoZSByYXcgU05NUCBwYWNrZXRzIHNlbnQgYW5kIHJlY2VpdmVkLgogLlRQCi0uQiAtRFxmSVtUT0tFTlssLi4uXV0KKy5CIFwtRFxmSVtUT0tFTlssLi4uXV0KIFR1cm4gb24gZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIGdpdmVuCiAuSVIgIlRPS0VOIiAiKHMpLiIKIFRyeQogLklSIEFMTAogZm9yIGV4dHJlbWVseSB2ZXJib3NlIG91dHB1dC4KIC5UUAotLkJJIC1lICIgZW5naW5lSUQiCi1TZXQgdGhlIGF1dGhvcml0YXRpdmUgKHNlY3VyaXR5KSBlbmdpbmVJRCB1c2VkIGZvciBTTk1QdjMgUkVRVUVTVAotbWVzc2FnZXMsIGdpdmVuIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nIChvcHRpb25hbGx5IHByZWZpeGVkIGJ5ICIweCIpLgotSXQgaXMgdHlwaWNhbGx5IG5vdCBuZWNlc3NhcnkgdG8gc3BlY2lmeSB0aGlzIGVuZ2luZSBJRCwgYXMgaXQgd2lsbAotdXN1YWxseSBiZSBkaXNjb3ZlcmVkIGF1dG9tYXRpY2FsbHkuCiAuVFAKLS5CSSAtRSAiIGVuZ2luZUlEIgotU2V0IHRoZSBjb250ZXh0IGVuZ2luZUlEIHVzZWQgZm9yIFNOTVB2MyBSRVFVRVNUIG1lc3NhZ2VzIHNjb3BlZFBkdSwKLWdpdmVuIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLgotSWYgbm90IHNwZWNpZmllZCwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlIGF1dGhvcml0YXRpdmUgZW5naW5lSUQuCi0uVFAKLS5CIC1oLCAtLWhlbHAKKy5CIFwtaCwgXC1cLWhlbHAKIERpc3BsYXkgYSBicmllZiB1c2FnZSBtZXNzYWdlIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CIC1ICisuQiBcLUgKIERpc3BsYXkgYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmVzIHVuZGVyc3Rvb2QgYnkgdGhlCiBjb21tYW5kIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CSSAtSSAiIFticlJodV0iCisuQkkgXC1JICIgW2JyUmh1XSIKIFNwZWNpZmllcyBpbnB1dCBwYXJzaW5nIG9wdGlvbnMuIFNlZSAKIC5CIElOUFVUIE9QVElPTlMgCiBiZWxvdy4KIC5UUAotLkJJIC1sICIgc2VjTGV2ZWwiCi1TZXQgdGhlIHNlY3VyaXR5TGV2ZWwgdXNlZCBmb3IgU05NUHYzIG1lc3NhZ2VzCi0obm9BdXRoTm9Qcml2fGF1dGhOb1ByaXZ8YXV0aFByaXYpLiAgQXBwcm9wcmlhdGUgcGFzcyBwaHJhc2UocykgbXVzdAotcHJvdmlkZWQgd2hlbiB1c2luZyBhbnkgbGV2ZWwgaGlnaGVyIHRoYW4gbm9BdXRoTm9Qcml2LgotT3ZlcnJpZGVzIHRoZSBcZklkZWZTZWN1cml0eUxldmVsXGZSIHRva2VuIGluIHRoZQotLkkgc25tcC5jb25mCi1maWxlLgotLlRQCi0uQkkgLUwgIiBbZUVmRm9Pc1NdIgorLkJJIFwtTCAiIFtlRWZGb09zU10iCiBTcGVjaWZpZXMgb3V0cHV0IGxvZ2dpbmcgb3B0aW9ucy4gU2VlIAogLkIgTE9HR0lORyBPUFRJT05TIAogYmVsb3cuCiAuVFAKLS5CSSAtbSAiIE1JQkxJU1QiCisuQkkgXC1tICIgTUlCTElTVCIKIFNwZWNpZmllcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIE1JQiBtb2R1bGVzIChub3QgZmlsZXMpIHRvIGxvYWQgZm9yCiB0aGlzIGFwcGxpY2F0aW9uLiAgVGhpcyBvdmVycmlkZXMgKG9yIGF1Z21lbnRzKSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKIE1JQlMsIHRoZSBcZklzbm1wLmNvbmZcZlIgZGlyZWN0aXZlIFxmSW1pYnNcZlIsIGFuZCB0aGUgbGlzdCBvZiBNSUJzCkBAIC0xMzcsNyArMTAwLDcgQEAKIC5JUAogSWYgCiAuSSBNSUJMSVNUCi1oYXMgYSBsZWFkaW5nICctJyBvciAnKycgY2hhcmFjdGVyLCB0aGVuIHRoZSBNSUIgbW9kdWxlcyBsaXN0ZWQgYXJlCitoYXMgYSBsZWFkaW5nICdcLScgb3IgJysnIGNoYXJhY3RlciwgdGhlbiB0aGUgTUlCIG1vZHVsZXMgbGlzdGVkIGFyZQogbG9hZGVkIGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGxpc3QsIGNvbWluZyBiZWZvcmUgb3IgYWZ0ZXIKIHRoaXMgbGlzdCByZXNwZWN0aXZlbHkuCiBPdGhlcndpc2UsIHRoZSBzcGVjaWZpZWQgTUlCcyBhcmUgbG9hZGVkIFxmSWluc3RlYWRcZlIgb2YgdGhpcwpAQCAtMTQ5LDcgKzExMiw3IEBACiBFdmVyeSBmaWxlIHdob3NlIG5hbWUgZG9lcyBub3QgYmVnaW4gd2l0aCAiLiIgd2lsbCBiZSBwYXJzZWQgYXMKIGlmIGl0IHdlcmUgYSBNSUIgZmlsZS4KIC5UUAotLkJJIC1NICIgRElSTElTVCIKKy5CSSBcLU0gIiBESVJMSVNUIgogU3BlY2lmaWVzIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBNSUJzLgogVGhpcyBvdmVycmlkZXMgKG9yIGF1Z21lbnRzKSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUlCRElSUywKIHRoZSBcZklzbm1wLmNvbmZcZlIgZGlyZWN0aXZlIFxmSW1pYmRpcnNcZlIsIGFuZCB0aGUgZGVmYXVsdApAQCAtMTU4LDcgKzEyMSw3IEBACiAuSVAKIElmIAogLkkgRElSTElTVAotaGFzIGEgbGVhZGluZyAnLScgb3IgJysnIGNoYXJhY3RlciwgdGhlbiB0aGUgZ2l2ZW4gZGlyZWN0b3JpZXMgYXJlCitoYXMgYSBsZWFkaW5nICdcLScgb3IgJysnIGNoYXJhY3RlciwgdGhlbiB0aGUgZ2l2ZW4gZGlyZWN0b3JpZXMgYXJlCiBhZGRlZCB0byB0aGUgZGVmYXVsdCBsaXN0LCBiZWluZyBzZWFyY2hlZCBiZWZvcmUgb3IgYWZ0ZXIgdGhlCiBkaXJlY3RvcmllcyBvbiB0aGlzIGxpc3QgcmVzcGVjdGl2ZWx5LgogT3RoZXJ3aXNlLCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBcZklpbnN0ZWFkXGZSCkBAIC0xNzIsNjMgKzEzNSwxODggQEAKIFRvIGF2b2lkIHNlYXJjaGluZyBhbnkgTUlCIGRpcmVjdG9yaWVzLCBzZXQgdGhlIE1JQkRJUlMKIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBlbXB0eSBzdHJpbmcgKCIiKS4KIC5cIgotLlwiIFhYWCAtIG9yICAgICAtTSAiIiAgICA/PworLlwiIFhYWCAtIG9yICAgICBcLU0gIiIgICAgPz8KIC5cIgogCi1Ob3RlIHRoYXQgTUlCcyBzcGVjaWZpZWQgdXNpbmcgdGhlIC1tIG9wdGlvbiBvciB0aGUgXGZJbWlic1xmUgorTm90ZSB0aGF0IE1JQnMgc3BlY2lmaWVkIHVzaW5nIHRoZSBcLW0gb3B0aW9uIG9yIHRoZSBcZkltaWJzXGZSCiBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSB3aWxsIGJlIGxvYWRlZCBmcm9tIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMKLWxpc3RlZCBieSB0aGUgLU0gb3B0aW9uIChvciBlcXVpdmFsZW50cykuCitsaXN0ZWQgYnkgdGhlIFwtTSBvcHRpb24gKG9yIGVxdWl2YWxlbnRzKS4KIFRoZSBcZkltaWJmaWxlXGZSIGRpcmVjdGl2ZSB0YWtlcyBhIGZ1bGwgcGF0aCB0byB0aGUgc3BlY2lmaWVkIE1JQgogZmlsZSwgc28gdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBNSUIgZGlyZWN0b3J5IHNlYXJjaCBsaXN0LgogLlRQCi0uQkkgLW4gIiBjb250ZXh0TmFtZSIKLVNldCB0aGUgY29udGV4dE5hbWUgdXNlZCBmb3IgU05NUHYzIG1lc3NhZ2VzLiAgVGhlIGRlZmF1bHQKLWNvbnRleHROYW1lIGlzIHRoZSBlbXB0eSBzdHJpbmcgIiIuICBPdmVycmlkZXMgdGhlIFxmSWRlZkNvbnRleHRcZlIgdG9rZW4KLWluIHRoZQotLkkgc25tcC5jb25mCi1maWxlLiAKLS5UUAotLkJJIC1PICIgW2FiZUVmbnFRc1N0VHVVdnhYXSIKLVNwZWNpZmllcyBvdXRwdXQgcHJpbnRpbmcgb3B0aW9ucy4gU2VlIAotLkIgT1VUUFVUIE9QVElPTlMKLWJlbG93LgotLlRQCi0uQkkgLVAgIiBbY2RlUnV3V10iCi1TcGVjaWZpZXMgTUlCIHBhcnNpbmcgb3B0aW9ucy4gIFNlZQotLkIgTUlCIFBBUlNJTkcgT1BUSU9OUwotYmVsb3cuCi0uVFAKLS5CSSAtciAiIHJldHJpZXMiCi1TcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZXRyaWVzIHRvIGJlIHVzZWQgaW4gdGhlIHJlcXVlc3RzLiBUaGUgZGVmYXVsdAotaXMgNS4KLS5UUAotLkJJIC10ICIgdGltZW91dCIKLVNwZWNpZmllcyB0aGUgdGltZW91dCBpbiBzZWNvbmRzIGJldHdlZW4gcmV0cmllcy4gVGhlIGRlZmF1bHQgaXMgMS4KLS5UUAotLkJJIC11ICIgc2VjTmFtZSIKLVNldCB0aGUgc2VjdXJpdHlOYW1lIHVzZWQgZm9yIGF1dGhlbnRpY2F0ZWQgU05NUHYzIG1lc3NhZ2VzLgotT3ZlcnJpZGVzIHRoZSBcZklkZWZTZWN1cml0eU5hbWVcZlIgdG9rZW4gaW4gdGhlCi0uSSBzbm1wLmNvbmYKLWZpbGUuCi0uVFAKLS5CIC12IFxmSTFcZlIgfCBcZkkyY1xmUiB8IFxmSTMKKy5CIFwtdiBcZkkxXGZSIHwgXGZJMmNcZlIgfCBcZkkzCiBTcGVjaWZpZXMgdGhlIHByb3RvY29sIHZlcnNpb24gdG8gdXNlOiAxIChSRkNzIDExNTUtMTE1NyksIDJjIChSRkNzIDE5MDEtMTkwOCksCiBvciAzIChSRkNzIDI1NzEtMjU3NCkuICBUaGUgZGVmYXVsdCBpcyB0eXBpY2FsbHkgdmVyc2lvbiAzLgogT3ZlcnJpZGVzIHRoZSBcZklkZWZWZXJzaW9uXGZSIHRva2VuIGluIHRoZQogLkkgc25tcC5jb25mCiBmaWxlLgorLkJJIFwtTyAiIFthYmVFZm5xUXNTdFR1VXZ4WF0iCitTcGVjaWZpZXMgb3V0cHV0IHByaW50aW5nIG9wdGlvbnMuIFNlZSAKKy5CIE9VVFBVVCBPUFRJT05TCitiZWxvdy4KIC5UUAotLkIgLVYsIC0tdmVyc2lvbgorLkJJIFwtUCAiIFtjZGVSdXdXXSIKK1NwZWNpZmllcyBNSUIgcGFyc2luZyBvcHRpb25zLiAgU2VlCisuQiBNSUIgUEFSU0lORyBPUFRJT05TCitiZWxvdy4KKy5UUAorLkJJIFwtciAiIHJldHJpZXMiCitTcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZXRyaWVzIHRvIGJlIHVzZWQgaW4gdGhlIHJlcXVlc3RzLiBUaGUgZGVmYXVsdAoraXMgNS4KKy5UUAorLkJJIFwtdCAiIHRpbWVvdXQiCitTcGVjaWZpZXMgdGhlIHRpbWVvdXQgaW4gc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMuIFRoZSBkZWZhdWx0IGlzIDEuCitGbG9hdGluZyBwb2ludCBudW1iZXJzIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZnJhY3Rpb25zIG9mIHNlY29uZHMuCisuVFAKKy5CIFwtViwgXC1cLXZlcnNpb24KIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CSSAteCAiIHByaXZQcm90b2NvbCIKKy5CSSBcLVkgIm5hbWUiPSJ2YWx1ZSIKKy5UUAorLkJJIFwtXC0gIm5hbWUiPSJ2YWx1ZSIKK0FsbG93cyBvbmUgdG8gc3BlY2lmeSBhbnkgdG9rZW4gKCJuYW1lIikgc3VwcG9ydGVkIGluIHRoZQorLkkgc25tcC5jb25mCitmaWxlIGFuZCBzZXRzIGl0cyB2YWx1ZSB0byAidmFsdWUiLiBPdmVycmlkZXMgdGhlIGNvcnJlc3BvbmRpbmcgdG9rZW4gaW4gdGhlCisuSSBzbm1wLmNvbmYKK2ZpbGUuIFNlZQorLkkgc25tcC5jb25mKDUpCitmb3IgdGhlIGZ1bGwgbGlzdCBvZiB0b2tlbnMuCisKKworLlNIIFNOTVB2MyBPcHRpb25zCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGdlbmVyaWMgdG8gYWxsIGZvcm1zIG9mIFNOTVB2MywgcmVnYXJkbGVzcworb2Ygd2hldGhlciBpdCdzIHRoZSBvcmlnaW5hbCBTTk1QdjMgd2l0aCBVU00gb3IgdGhlIG5ld2VyIFNOTVB2MyBvdmVyCisoRClUTFMgc3VwcG9ydC4KKworLlRQCisuQkkgXC1sICIgc2VjTGV2ZWwiCitTZXQgdGhlIHNlY3VyaXR5TGV2ZWwgdXNlZCBmb3IgU05NUHYzIG1lc3NhZ2VzCisobm9BdXRoTm9Qcml2fGF1dGhOb1ByaXZ8YXV0aFByaXYpLiAgQXBwcm9wcmlhdGUgcGFzcyBwaHJhc2UocykgbXVzdAorcHJvdmlkZWQgd2hlbiB1c2luZyBhbnkgbGV2ZWwgaGlnaGVyIHRoYW4gbm9BdXRoTm9Qcml2LgorT3ZlcnJpZGVzIHRoZSBcZklkZWZTZWN1cml0eUxldmVsXGZSIHRva2VuIGluIHRoZQorLkkgc25tcC5jb25mCitmaWxlLgorLlRQCisuQkkgXC1uICIgY29udGV4dE5hbWUiCitTZXQgdGhlIGNvbnRleHROYW1lIHVzZWQgZm9yIFNOTVB2MyBtZXNzYWdlcy4gIFRoZSBkZWZhdWx0Citjb250ZXh0TmFtZSBpcyB0aGUgZW1wdHkgc3RyaW5nICIiLiAgT3ZlcnJpZGVzIHRoZSBcZklkZWZDb250ZXh0XGZSIHRva2VuCitpbiB0aGUKKy5JIHNubXAuY29uZgorZmlsZS4gCisKKy5TSCBTTk1QdjMgb3ZlciBUTFMgT3B0aW9ucworVGhlc2Ugb3B0aW9ucyBwYXNzIHRyYW5zcG9ydC1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIHRoZSBUTFMgbGF5ZXIuICBJZgoreW91J3JlIHVzaW5nIFNOTVAgb3ZlciBUTFMgb3IgRFRMUyB5b3UnbGwgbmVlZCB0byBwYXNzIGEgY29tYmluYXRpb24KK29mIHRoZXNlIGVpdGhlciB0aHJvdWdoIHRoZXNlIGNvbW1hbmQgbGluZSBvcHRpb25zIG9yIHRocm91Z2gKK3NubXAuY29uZiBjb25maWd1cmF0aW9uIHRva2Vucy4KKy5QUAorQSBub3RlIGFib3V0CisuSSAiPGNlcnRpZmljYXRlLXNwZWNpZmllcj5zIjoKK05ldC1TTk1QIGxvb2tzIGZvciBYLjUwOSBjZXJ0aWZpY2F0ZXMgaW4gZWFjaCBvZiB0aGUgbm9ybWFsIFNOTVAKK2NvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHNlYXJjaCBwYXRocyB1bmRlciBhICJ0bHMiIHN1YmRpcmVjdG9yeS4gIElFLAoraXQgd2lsbCBsb29rIGluIH4vLnNubXAvdGxzIGFuZCBpbiAvdXNyL2xvY2FsL3NoYXJlL3NubXAvdGxzIGZvcgorY2VydGlmaWNhdGVzLiAgVGhlIGNlcnRpZmljYXRlIGNvbXBvbmVudHMgKGVnLCB0aGUgcHVibGljIGFuZCBwcml2YXRlCitoYWx2ZXMpIGFyZSBzdG9yZWQgaW4gc3ViLWRpcmVjdG9yaWVzIHVuZGVybmVhdGggdGhpcyByb290IHNldCBvZgorZGlyZWN0b3JpZXMuICBTZWUgdGhlIG5ldFwtc25tcFwtY2VydCB0b29sIGZvciBoZWxwIGluIGltcG9ydGluZywKK2NyZWF0aW5nIGFuZCBtYW5hZ2luZyBOZXQtU05NUCBjZXJ0aWZpY2F0ZXMuCisuSSAiPGNlcnRpZmljYXRlLXNwZWNpZmllcj5zIgorY2FuIHJlZmVyZW5jZSBlaXRoZXIgYSBmaW5nZXJwcmludCBvZiB0aGUgY2VydGlmaWNhdGUgdG8gdXNlICh0aGUKK25ldFwtc25tcFwtY2VydCB0b29sIGNhbiBoZWxwIHlvdSBmaWd1cmUgb3V0IHRoZSBjZXJ0aWZpY2F0ZXMpIG9yIHRoZQorZmlsZW5hbWUncyBwcmVmaXggY2FuIGJlIHVzZWQuICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhICJzbm1wZC5jcnQiCitjZXJ0aWZpY2F0ZSBmaWxlIHRoZW4geW91IGNvdWxkIHNpbXBseSByZWZlciB0byB0aGUgY2VydGlmaWNhdGUgdmlhCit0aGUgInNubXBkIiBzcGVjaWZpZXIuCisuVFAKKy5CSSAiXC1UIGxvY2FsQ2VydD08Y2VydGlmaWNhdGUtc3BlY2lmaWVyPiIKK0luZGljYXRlcyB0byB0aGUgdHJhbnNwb3J0IHdoaWNoIGtleSBzaG91bGQgYmUgdXNlZCB0byBpbml0aWF0ZSAoRClUTFMKK2NsaWVudCBjb25uZWN0aW9ucy4gIFRoaXMgd291bGQgdHlwaWNhbGx5IGJlIGEgY2VydGlmaWNhdGUgZm91bmQgdXNpbmcKK3RoZSBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCwgdGhlIGFwcGxpY2F0aW9uIG5hbWUgKGVnIHNubXBkLCBzbm1wdHJhcGQsIHBlcmwsIHB5dGhvbikgb3IKK2dlbmVyaWNpemVkIG5hbWUgInNubXBhcHAiIGlmIHVzaW5nIG9uZSBvZiB0aGUgZ2VuZXJpYyBhcHBsaWNhdGlvbnMKKyhzbm1wZ2V0LCBzbm1wd2FsaywgZXRjKS4gIFRoaXMgY2FuIGFsc28gYmUgc2V0IHVzaW5nIHRoZQorbG9jYWxDZXJ0IHNwZWNpZmllciBpbiBhIHNubXAuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuCisuVFAKKy5CSSAiXC1UIHBlZXJDZXJ0PTxjZXJ0aWZpY2F0ZS1zcGVjaWZpZXI+IgorSWYgeW91IGV4cGVjdCBhIHBhcnRpY3VsYXIgY2VydGlmaWNhdGUgdG8gYmUgcHJlc2VudGVkIGJ5IHRoZSBvdGhlcgorc2lkZSB0aGVuIHlvdSBjYW4gdXNlIHRoaXMgc3BlY2lmaWVyIHRvIGluZGljYXRlIHRoZSBjZXJ0aWZpY2F0ZSBpdAorc2hvdWxkIHByZXNlbnQuICBJZiBpdCBmYWlscyB0byBwcmVzZW50IHRoZSBleHBlY3RlZCBjZXJ0aWZpY2F0ZSB0aGUKK2NsaWVudCB3aWxsIHJlZnVzZSB0byBvcGVuIHRoZSBjb25uZWN0aW9uIChiZWNhdXNlIGRvaW5nIG90aGVyd2lzZQorY291bGQgbGVhZCB0byBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzKS4gIFRoaXMgY2FuIGFsc28gYmUgc2V0IHVzaW5nCit0aGUgcGVlckNlcnQgc3BlY2lmaWVyIGluIGEgc25tcC5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZS4KKy5UUAorLkJJICJcLVQgdHJ1c3RfY2VydD08Y2VydGlmaWNhdGUtc3BlY2lmaWVyPiIKK0lmIHlvdSBoYXZlIGEgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZSB5b3Ugd2lzaCB0byBhbmNob3IgdHJ1c3Qgd2l0aCwKK3lvdSBjYW4gdXNlIHRoaXMgZmxhZyB0byBsb2FkIGEgZ2l2ZW4gY2VydGlmaWNhdGUgYXMgYSB0cnVzdCBhbmNob3IuCitBIGNvcHkgb2YgdGhlIGNlcnRpZmljYXRlIG11c3QgZXhpc3Qgd2l0aGluIHRoZSBOZXQtU05NUCBjZXJ0aWZpY2F0ZQorc3RvcmFnZSBzeXN0ZW0gb3IgdGhpcyBtdXN0IHBvaW50IHRvIGEgY29tcGxldGUgcGF0aCBuYW1lLiAgQWxzbyBzZWUKK3RoZSAidHJ1c3RDZXJ0IiBzbm1wLmNvbmYgY29uZmlndXJhdGlvbiB0b2tlbi4KKy5UUAorLkJJICJcLVQgdGhlaXJfaG9zdG5hbWU9PG5hbWU+IgorSWYgdGhlIHNlcnZlcidzIHByZXNlbnRlZCBjZXJ0aWZpY2F0ZSBjYW4gYmUgdmFsaWRhdGluZyB1c2luZyBhIHRydXN0CithbmNob3IgdGhlbiB0aGVpciBob3N0bmFtZSB3aWxsIGJlIGNoZWNrZWQgdG8gZW5zdXJlIHRoZWlyIHByZXNlbnRlZAoraG9zdG5hbWUgbWF0Y2hlcyBvbmUgdGhhdCBpcyBleHBlY3RlZCAoeW91IGRvbid0IHdhbnQgdG8gY29ubmVjdCB0bworZ29vZGhvc3QuZXhhbXBsZS5jb20gYW5kIGFjY2VwdCBhIGNlcnRpZmljYXRlIHByZXNlbnRlZCBieQorYmFkaG9zdC5leGFtcGxlLmNvbSBkbyB5b3U/KS4gIFRoaXMgdG9rZW4gY2FuIHNwZWNpZnkgdGhlIGV4YWN0IGhvc3QKK25hbWUgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudGVkIGJ5IHRoZSByZW1vdGUgc2lkZSwgZWl0aGVyIGluIGEKK3N1YmplY3RBbHROYW1lIGZpZWxkIG9yIGluIHRoZSBDb21tb25OYW1lIGZpZWxkIG9mIHRoZSBzZXJ2ZXIncyBYLjUwOQorY2VydGlmaWNhdGUuCisuU0ggU05NUHYzIHdpdGggVVNNIE9wdGlvbnMKK1RoZXNlIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHVzaW5nIFNOTVB2MyB3aXRoIHRoZSBvcmlnaW5hbAorVXNlci1iYXNlZCBTZWN1cml0eSBNb2RlbCAoVVNNKS4KKy5UUAorLkJJICJcLTNbTW1La10gIDB4SEVYS0VZIgorU2V0cyB0aGUga2V5cyB0byBiZSB1c2VkIGZvciBTTk1QdjMgdHJhbnNhY3Rpb25zLiAgVGhlc2Ugb3B0aW9ucyBhbGxvdworeW91IHRvIHNldCB0aGUgbWFzdGVyIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIGtleXMgKFwtM20gYW5kIFwtM00KK3Jlc3BlY3RpdmVseSkgb3Igc2V0IHRoZSBsb2NhbGl6ZWQgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24ga2V5cworKFwtM2sgYW5kIFwtM0sgcmVzcGVjdGl2ZWx5KS4gIFNOTVB2MyBrZXlzIGNhbiBiZSBlaXRoZXIgcGFzc2VkIGluIGJ5CitoYW5kIHVzaW5nIHRoZXNlIGZsYWdzLCBvciBieSB0aGUgdXNlIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gcGFzc3dvcmRzCit1c2luZyB0aGUgXC1BIGFuZCBcLVggZmxhZ3MgZGlzY3Vzc2VkIGJlbG93LiAgRm9yIGZ1cnRoZXIgZGV0YWlscyBvbgorU05NUHYzIGFuZCBpdHMgdXNhZ2Ugb2Yga2V5aW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIE5ldC1TTk1QIHR1dG9yaWFsCit3ZWIgc2l0ZSAoIGh0dHA6Ly93d3cuTmV0XC1TTk1QLm9yZy90dXRvcmlhbFwtNS9jb21tYW5kcy8gKS4gCitPdmVycmlkZXMgdGhlIGRlZkF1dGhNYXN0ZXJLZXkgKFwtM20pLCBkZWZQcml2TWFzdGVyS2V5IChcLTNNKSwgCitkZWZBdXRoTG9jYWxpemVkS2V5IChcLTNrKSBvciBkZWZQcml2TG9jYWxpemVkS2V5IChcLTNLKSB0b2tlbnMsIHJlc3BlY3RpdmVseSwgCitpbiB0aGUKKy5JIHNubXAuY29uZgorZmlsZSwgc2VlCisuSSBzbm1wLmNvbmYoNSkuCisuVFAKKy5CSSBcLWEgIiBhdXRoUHJvdG9jb2wiCitTZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIChNRDUgb3IgU0hBKSB1c2VkIGZvciBhdXRoZW50aWNhdGVkIFNOTVB2MworbWVzc2FnZXMuIE92ZXJyaWRlcyB0aGUgXGZJZGVmQXV0aFR5cGVcZlIgdG9rZW4gaW4gdGhlCisuSSBzbm1wLmNvbmYKK2ZpbGUuCisuVFAKKy5CSSBcLUEgIiBhdXRoUGFzc3dvcmQiCitTZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHBhc3MgcGhyYXNlIHVzZWQgZm9yIGF1dGhlbnRpY2F0ZWQgU05NUHYzCittZXNzYWdlcy4gIE92ZXJyaWRlcyB0aGUgXGZJZGVmQXV0aFBhc3NwaHJhc2VcZlIgdG9rZW4gaW4gdGhlCisuSSBzbm1wLmNvbmYKK2ZpbGUuIEl0IGlzIGluc2VjdXJlIHRvIHNwZWNpZnkgcGFzcyBwaHJhc2VzIG9uIHRoZSBjb21tYW5kIGxpbmUsCitzZWUKKy5JIHNubXAuY29uZig1KS4KKy5UUAorLkJJIFwtZSAiIGVuZ2luZUlEIgorU2V0IHRoZSBhdXRob3JpdGF0aXZlIChzZWN1cml0eSkgZW5naW5lSUQgdXNlZCBmb3IgU05NUHYzIFJFUVVFU1QKK21lc3NhZ2VzLCBnaXZlbiBhcyBhIGhleGFkZWNpbWFsIHN0cmluZyAob3B0aW9uYWxseSBwcmVmaXhlZCBieSAiMHgiKS4KK0l0IGlzIHR5cGljYWxseSBub3QgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgdGhpcyBlbmdpbmUgSUQsIGFzIGl0IHdpbGwKK3VzdWFsbHkgYmUgZGlzY292ZXJlZCBhdXRvbWF0aWNhbGx5LgorLlRQCisuQkkgXC1FICIgZW5naW5lSUQiCitTZXQgdGhlIGNvbnRleHQgZW5naW5lSUQgdXNlZCBmb3IgU05NUHYzIFJFUVVFU1QgbWVzc2FnZXMgc2NvcGVkUGR1LAorZ2l2ZW4gYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuCitJZiBub3Qgc3BlY2lmaWVkLCB0aGlzIHdpbGwgZGVmYXVsdCB0byB0aGUgYXV0aG9yaXRhdGl2ZSBlbmdpbmVJRC4KKy5UUAorLkJJIFwtdSAiIHNlY05hbWUiCitTZXQgdGhlIHNlY3VyaXR5TmFtZSB1c2VkIGZvciBhdXRoZW50aWNhdGVkIFNOTVB2MyBtZXNzYWdlcy4KK092ZXJyaWRlcyB0aGUgXGZJZGVmU2VjdXJpdHlOYW1lXGZSIHRva2VuIGluIHRoZQorLkkgc25tcC5jb25mCitmaWxlLgorLlRQCisuQkkgXC14ICIgcHJpdlByb3RvY29sIgogU2V0IHRoZSBwcml2YWN5IHByb3RvY29sIChERVMgb3IgQUVTKSB1c2VkIGZvciBlbmNyeXB0ZWQgU05NUHYzIG1lc3NhZ2VzLiAKIE92ZXJyaWRlcyB0aGUgXGZJZGVmUHJpdlR5cGVcZlIgdG9rZW4gaW4gdGhlCiAuSSBzbm1wLmNvbmYKIGZpbGUuIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgaWYgdGhlIE5ldC1TTk1QIHNvZnR3YXJlIHdhcyBidWlsZAogdG8gdXNlIE9wZW5TU0wuCiAuVFAKLS5CSSAtWCAiIHByaXZQYXNzd29yZCIKKy5CSSBcLVggIiBwcml2UGFzc3dvcmQiCiBTZXQgdGhlIHByaXZhY3kgcGFzcyBwaHJhc2UgdXNlZCBmb3IgZW5jcnlwdGVkIFNOTVB2MyBtZXNzYWdlcy4KIE92ZXJyaWRlcyB0aGUgXGZJZGVmUHJpdlBhc3NwaHJhc2VcZlIgdG9rZW4gaW4gdGhlCiAuSSBzbm1wLmNvbmYKQEAgLTIzNiwyMyArMzI0LDIxIEBACiBJdCBpcyBpbnNlY3VyZSB0byBzcGVjaWZ5IHBhc3MgcGhyYXNlcyBvbiB0aGUgY29tbWFuZCBsaW5lLCBzZWUKIC5JIHNubXAuY29uZig1KS4KIC5UUAotLkJJIC1aICIgYm9vdHMsdGltZSIKKy5CSSBcLVogIiBib290cyx0aW1lIgogU2V0IHRoZSBlbmdpbmVCb290cyBhbmQgZW5naW5lVGltZSB1c2VkIGZvciBhdXRoZW50aWNhdGVkIFNOTVB2MwogbWVzc2FnZXMuICBUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgbG9jYWwgbm90aW9uIG9mIHRoZSBhZ2VudHMKIGJvb3RzL3RpbWUgd2l0aCBhbiBhdXRoZW50aWNhdGVkIHZhbHVlIHN0b3JlZCBpbiB0aGUgTENELgogSXQgaXMgdHlwaWNhbGx5IG5vdCBuZWNlc3NhcnkgdG8gc3BlY2lmeSB0aGlzIG9wdGlvbiwgYXMgdGhlc2UgdmFsdWVzCiB3aWxsIHVzdWFsbHkgYmUgZGlzY292ZXJlZCBhdXRvbWF0aWNhbGx5LgorCisKKy5TSCBTTk1QdjEgYW5kIFNOTVB2MmMgT3B0aW9ucyAKIC5UUAotLkJJIC1ZICJuYW1lIj0idmFsdWUiCi0uVFAKLS5CSSAtLSAibmFtZSI9InZhbHVlIgotQWxsb3dzIHRvIHNwZWNpZnkgYW55IHRva2VuICgibmFtZSIpIHN1cHBvcnRlZCBpbiB0aGUKKy5CSSBcLWMgIiBjb21tdW5pdHkiCitTZXQgdGhlIGNvbW11bml0eSBzdHJpbmcgZm9yIFNOTVB2MS92MmMgdHJhbnNhY3Rpb25zLgorT3ZlcnJpZGVzIHRoZSBcZklkZWZDb21tdW5pdHlcZlIgdG9rZW4gaW4gdGhlCiAuSSBzbm1wLmNvbmYKLWZpbGUgYW5kIHNldHMgaXRzIHZhbHVlIHRvICJ2YWx1ZSIuIE92ZXJyaWRlcyB0aGUgY29ycmVzcG9uZGluZyB0b2tlbiBpbiB0aGUKLS5JIHNubXAuY29uZgotZmlsZS4gU2VlCi0uSSBzbm1wLmNvbmYoNSkKLWZvciB0aGUgZnVsbCBsaXN0IG9mIHRva2Vucy4KK2ZpbGUuCiAKIC5TSCBBR0VOVCBTUEVDSUZJQ0FUSU9OCiAuUFAKQEAgLTMyNyw0MSArNDEzLDYgQEAKIG9uIHBvcnQKIC5JIDExNjEKIHVzaW5nIFRDUC9JUHY0IGFuZCBwZXJmb3JtIHF1ZXJ5IG92ZXIgdGhhdCBjb25uZWN0aW9uLgotLlRQIDI0Ci0uSVIgImlweDo6MDBEMEI3QUFFMzA4IgotcGVyZm9ybSBxdWVyeSB1c2luZyBJUFggZGF0YWdyYW1zIHRvIG5vZGUgbnVtYmVyIAotLkkgMDBEMEI3QUFFMzA4Ci1vbiB0aGUgZGVmYXVsdCBuZXR3b3JrLCBhbmQgdXNpbmcgdGhlIGRlZmF1bHQgSVBYIHBvcnQgb2YgMzY4NzkgKDkwMEYKLWhleGFkZWNpbWFsKSwgYXMgc3VnZ2VzdGVkIGluIFJGQyAxOTA2LgotLlRQIDI0Ci0uSVIgImlweDowQUU0MzQwOTowMEQwQjcyMUM2QzAvMTE2MSIKLXBlcmZvcm0gcXVlcnkgdXNpbmcgSVBYIGRhdGFncmFtcyB0byBwb3J0Ci0uSSAxMTYxCi1vbiBub2RlIG51bWJlcgotLkkgMDBEMEI3MjFDNkMwCi1vbiBuZXR3b3JrIG51bWJlcgotLklSIDBBRTQzNDA5IC4KLS5UUCAyNAotLklSICJ1bml4Oi90bXAvbG9jYWwtYWdlbnQiCi1jb25uZWN0IHRvIHRoZSBVbml4IGRvbWFpbiBzb2NrZXQgCi0uSVIgL3RtcC9sb2NhbC1hZ2VudCAsCi1hbmQgcGVyZm9ybSB0aGUgcXVlcnkgb3ZlciB0aGF0IGNvbm5lY3Rpb24uCi0uVFAgMjQKLS5JUiAiL3RtcC9sb2NhbC1hZ2VudCIKLWlkZW50aWNhbCB0byB0aGUgcHJldmlvdXMgc3BlY2lmaWNhdGlvbiwgc2luY2UgdGhlIFVuaXggZG9tYWluIGlzIHRoZQotZGVmYXVsdCB0cmFuc3BvcnQgaWZmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIDx0cmFuc3BvcnQtYWRkcmVzcz4KLWlzIGEgJy8nLgotLlRQIDI0Ci0uSVIgIkFBTDVQVkM6MTAwIgotcGVyZm9ybSB0aGUgcXVlcnkgdXNpbmcgQUFMNSBQRFVzIHNlbnQgb24gdGhlIHBlcm1hbmVudCB2aXJ0dWFsCi1jaXJjdWl0IHdpdGggVlBJPTAgYW5kIFZDST0xMDAgKGRlY2ltYWwpIG9uIHRoZSBmaXJzdCBBVE0gYWRhcHRlciBpbiB0aGUKLW1hY2hpbmUuCi0uVFAgMjQKLS5JUiAiUFZDOjEuMTAuMzIiCi1wZXJmb3JtIHRoZSBxdWVyeSB1c2luZyBBQUw1IFBEVXMgc2VudCBvbiB0aGUgcGVybWFuZW50IHZpcnR1YWwKLWNpcmN1aXQgd2l0aCBWUEk9MTAgKGRlY2ltYWwpIGFuZCBWQ0k9MzIgKGRlY2ltYWwpIG9uIHRoZSBzZWNvbmQgQVRNCi1hZGFwdGVyIGluIHRoZSBtYWNoaW5lLiAgTm90ZSB0aGF0ICJQVkMiIGlzIGEgc3lub255bSBmb3IgIkFBTDVQVkMiLgotLlRQIDI0CiAuSVIgInVkcDY6aG9zdG5hbWU6MTAxNjEiCiBwZXJmb3JtIHRoZSBxdWVyeSB1c2luZyBVRFAvSVB2NiBkYXRhZ3JhbXMgdG8gcG9ydAogLkkgMTAxNjEKQEAgLTM3Nyw2ICs0MjgsNjQgQEAKIGNvbm5lY3QgdG8gcG9ydCAxNjExIG9uIHRoZSBsb2NhbCBob3N0CiAuSVIgIiIgKCA6OjEgCiBpbiBJUHY2IHBhcmxhbmNlKSB1c2luZyBUQ1AvSVB2NiBhbmQgcGVyZm9ybSBxdWVyeSBvdmVyIHRoYXQgY29ubmVjdGlvbi4KKy5UUCAyNAorLklSICJ0bHM6aG9zdG5hbWU6MTAxNjEiCisuVFAgMjQKKy5JUiAiZHRsczpob3N0bmFtZToxMDE2MSIKK0Nvbm5lY3RzIHVzaW5nIFNOTVAgb3ZlciBEVExTIG9yIFRMUyBhcyBkb2N1bWVudGVkIGJ5IHRoZSBJU01TIHdvcmtpbmcKK2dyb3VwIChSRkNzIG5vdCB5ZXQgcHVibGlzaGVkIGFzIG9mIHRoaXMgZGF0ZSkuICBUaGlzIHdpbGwgcmVxdWlyZQorKGFuZCBhdXRvbWF0aWNhbGx5IGVuc3VyZXMpIHRoYXQgdGhlIFRTTSBzZWN1cml0eSBtb2RlbCBpcyBpbiB1c2UuCitZb3UnbGwgYWxzbyBuZWVkIHRvIHNldCB1cCB0cnVzdCBwYXRocyBmb3IgdGhlIGNlcnRpZmljYXRlcyBwcmVzZW50ZWQKK2J5IHRoZSBzZXJ2ZXIgKHNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb25zIG9mIHRoaXMpLgorLlRQIDI0CisuSVIgInNzaDpob3N0bmFtZToyMiIKK0Nvbm5lY3RzIHVzaW5nIFNOTVAgb3ZlciBTU0ggYXMgZG9jdW1lbnRlZCBieSB0aGUgSVNNUyB3b3JraW5nIGdyb3VwCisoUkZDcyBub3QgeWV0IHB1Ymxpc2hlZCBhcyBvZiB0aGlzIGRhdGUpLiAgVGhpcyB3aWxsIHJlcXVpcmUgdGhhdCB0aGUKK1RTTSBzZWN1cml0eSBtb2RlbCBpcyBpbiB1c2UgKFwtXC1kZWZTZWN1cml0eU1vZGVsPXRzbSkuCisuVFAgMjQKKy5JUiAiaXB4OjowMEQwQjdBQUUzMDgiCitwZXJmb3JtIHF1ZXJ5IHVzaW5nIElQWCBkYXRhZ3JhbXMgdG8gbm9kZSBudW1iZXIgCisuSSAwMEQwQjdBQUUzMDgKK29uIHRoZSBkZWZhdWx0IG5ldHdvcmssIGFuZCB1c2luZyB0aGUgZGVmYXVsdCBJUFggcG9ydCBvZiAzNjg3OSAoOTAwRgoraGV4YWRlY2ltYWwpLCBhcyBzdWdnZXN0ZWQgaW4gUkZDIDE5MDYuCisuVFAgMjQKKy5JUiAiaXB4OjBBRTQzNDA5OjAwRDBCNzIxQzZDMC8xMTYxIgorcGVyZm9ybSBxdWVyeSB1c2luZyBJUFggZGF0YWdyYW1zIHRvIHBvcnQKKy5JIDExNjEKK29uIG5vZGUgbnVtYmVyCisuSSAwMEQwQjcyMUM2QzAKK29uIG5ldHdvcmsgbnVtYmVyCisuSVIgMEFFNDM0MDkgLgorLlRQIDI0CisuSVIgInVuaXg6L3RtcC9sb2NhbFwtYWdlbnQiCitjb25uZWN0IHRvIHRoZSBVbml4IGRvbWFpbiBzb2NrZXQgCisuSVIgL3RtcC9sb2NhbFwtYWdlbnQgLAorYW5kIHBlcmZvcm0gdGhlIHF1ZXJ5IG92ZXIgdGhhdCBjb25uZWN0aW9uLgorLlRQIDI0CisuSVIgIi90bXAvbG9jYWxcLWFnZW50IgoraWRlbnRpY2FsIHRvIHRoZSBwcmV2aW91cyBzcGVjaWZpY2F0aW9uLCBzaW5jZSB0aGUgVW5peCBkb21haW4gaXMgdGhlCitkZWZhdWx0IHRyYW5zcG9ydCBpZmYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgPHRyYW5zcG9ydC1hZGRyZXNzPgoraXMgYSAnLycuCisuVFAgMjQKKy5JUiAiYWxpYXM6bXluYW1lIgorcGVyZm9ybSBhIGNvbm5lY3Rpb24gdG8gdGhlCisuSSBteW5hbWUKK2FsaWFzIHdoaWNoIG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIHNubXAuY29uZiBmaWxlIHVzaW5nIGEgbGluZQorbGlrZSAiCisuSSAiYWxpYXMgbXluYW1lIHVkcDoxMjcuMC4wLjE6OTE2MSIKKyIuICBBbnkgdHlwZSBvZiB0cmFuc3BvcnQgZGVmaW5pdGlvbiBjYW4gYmUgdXNlZCBhcyB0aGUgYWxpYXMgZXhwYW5zaW9uCitwYXJhbWV0ZXIuICBBbGlhc2VzIGFyZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciB1c2luZyByZXBlYXRlZCBjb21wbGV4Cit0cmFuc3BvcnQgc3RyaW5ncy4KKy5UUCAyNAorLklSICJBQUw1UFZDOjEwMCIKK3BlcmZvcm0gdGhlIHF1ZXJ5IHVzaW5nIEFBTDUgUERVcyBzZW50IG9uIHRoZSBwZXJtYW5lbnQgdmlydHVhbAorY2lyY3VpdCB3aXRoIFZQST0wIGFuZCBWQ0k9MTAwIChkZWNpbWFsKSBvbiB0aGUgZmlyc3QgQVRNIGFkYXB0ZXIgaW4gdGhlCittYWNoaW5lLgorLlRQIDI0CisuSVIgIlBWQzoxLjEwLjMyIgorcGVyZm9ybSB0aGUgcXVlcnkgdXNpbmcgQUFMNSBQRFVzIHNlbnQgb24gdGhlIHBlcm1hbmVudCB2aXJ0dWFsCitjaXJjdWl0IHdpdGggVlBJPTEwIChkZWNpbWFsKSBhbmQgVkNJPTMyIChkZWNpbWFsKSBvbiB0aGUgc2Vjb25kIEFUTQorYWRhcHRlciBpbiB0aGUgbWFjaGluZS4gIE5vdGUgdGhhdCAiUFZDIiBpcyBhIHN5bm9ueW0gZm9yICJBQUw1UFZDIi4KIC5QUAogTm90ZSB0aGF0IG5vdCBhbGwgdGhlIHRyYW5zcG9ydCBkb21haW5zIGxpc3RlZCBhYm92ZSB3aWxsIGFsd2F5cyBiZQogYXZhaWxhYmxlOyBmb3IgaW5zdGFuY2UsIGhvc3RzIHdpdGggbm8gSVB2NiBzdXBwb3J0IHdpbGwgbm90IGJlIGFibGUKQEAgLTM4NCwzMyArNDkzLDMyIEBACiB0aGUgZXJyb3IgIlVua25vd24gaG9zdCIuICBMaWtld2lzZSwgc2luY2UgQUFMNSBQVkMgc3VwcG9ydCBpcyBvbmx5CiBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIExpbnV4LCBpdCB3aWxsIGZhaWwgd2l0aCB0aGUgc2FtZSBlcnJvciBvbgogb3RoZXIgcGxhdGZvcm1zLgotCiAuU0ggIk1JQiBQQVJTSU5HIE9QVElPTlMiCiBUaGUgTmV0LVNOTVAgTUlCIHBhcnNlciBtb3N0bHkgYWRoZXJlcyB0byB0aGUgU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQKIEluZm9ybWF0aW9uIChTTUkpLiAgQXMgdGhhdCBzcGVjaWZpY2F0aW9uIGhhcyBjaGFuZ2VkIHRocm91Z2ggdGltZSwgYW5kCiBpbiByZWNvZ25pdGlvbiBvZiB0aGUgKGFoZW0pIGRpdmVyc2l0eSBpbiBjb21wbGlhbmNlIGV4cHJlc3NlZCBpbiBNSUIKIGZpbGVzLCBhZGRpdGlvbmFsIG9wdGlvbnMgcHJvdmlkZSBtb3JlIGZsZXhpYmlsaXR5IGluIHJlYWRpbmcgTUlCIGZpbGVzLgogLlRQCi0uQiAiLVBjIgorLkIgIlwtUGMiCiBUb2dnbGVzIHdoZXRoZXIgQVNOLjEgY29tbWVudHMgc2hvdWxkIGV4dGVuZCB0byB0aGUgZW5kIG9mIHRoZSBNSUIKIHNvdXJjZSBsaW5lLgotU3RyaWN0bHkgc3BlYWtpbmcsIGEgc2Vjb25kIGFwcGVhcmFuY2Ugb2YgIi0tIiBzaG91bGQgdGVybWluYXRlIHRoZQorU3RyaWN0bHkgc3BlYWtpbmcsIGEgc2Vjb25kIGFwcGVhcmFuY2Ugb2YgIlwtXC0iIHNob3VsZCB0ZXJtaW5hdGUgdGhlCiBjb21tZW50LCBidXQgdGhpcyBicmVha3Mgc29tZSBNSUIgZmlsZXMuCiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgKHRvIGludGVycHJldCBjb21tZW50cyBjb3JyZWN0bHkpIGNhbiBhbHNvCi1iZSBzZXQgd2l0aCB0aGUgKG1pc25hbWVkKSBjb25maWd1cmF0aW9uIHRva2VuIFxmSXN0cmljdENvbW1lbnRUZXJtXGZSLgorYmUgc2V0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gdG9rZW4gXGZJY29tbWVudFRvRU9MXGZSLgogLlRQCi0uQiAiLVBkIgorLkIgIlwtUGQiCiBEaXNhYmxlcyB0aGUgbG9hZGluZyBvZiBNSUIgb2JqZWN0IERFU0NSSVBUSU9OcyB3aGVuIHBhcnNpbmcgTUlCIGZpbGVzLgogVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIHJ1bm5pbmcgYXBwbGljYXRpb24uCiAuVFAKLS5CICItUGUiCisuQiAiXC1QZSIKIFRvZ2dsZXMgd2hldGhlciB0byBzaG93IGVycm9ycyBlbmNvdW50ZXJlZCB3aGVuIHBhcnNpbmcgTUlCIGZpbGVzLgogVGhlc2UgaW5jbHVkZQogcmVmZXJlbmNlcyB0byBJTVBPUlRlZCBtb2R1bGVzIGFuZCBNSUIgb2JqZWN0cyB0aGF0IGNhbm5vdCBiZQogbG9jYXRlZCBpbiB0aGUgTUlCIGRpcmVjdG9yeSBzZWFyY2ggbGlzdC4KIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiB0b2tlbiBcZklzaG93TWliRXJyb3JzXGZSLgogLlRQCi0uQiAiLVBSIgorLkIgIlwtUFIiCiBJZiB0aGUgc2FtZSBNSUIgb2JqZWN0IChwYXJlbnQgbmFtZSBhbmQgc3ViLWlkZW50aWZpZXIpIGFwcGVhcnMgbXVsdGlwbGUKIHRpbWVzIGluIHRoZSBsaXN0IG9mIE1JQiBkZWZpbml0aW9ucyBsb2FkZWQsIHVzZSB0aGUgbGFzdCB2ZXJzaW9uIHRvIGJlCiByZWFkIGluLiAgQnkgZGVmYXVsdCwgdGhlIGZpcnN0IHZlcnNpb24gd2lsbCBiZSB1c2VkLCBhbmQgYW55IGR1cGxpY2F0ZXMKQEAgLTQyNCwyMCArNTMyLDIwIEBACiAuXCIgU2V0dGluZyB0aGlzIG9wdGlvbiBtYXkgcmVzdWx0IGluIGFuIGluY29ycmVjdCBoaWVyYXJjaHkuCiAuXCIgWFhYIC0gV2h5PwogLlRQCi0uQiAiLVB1IgorLkIgIlwtUHUiCiBUb2dnbGVzIHdoZXRoZXIgdG8gYWxsb3cgdGhlIHVuZGVybGluZSBjaGFyYWN0ZXIgaW4gTUlCIG9iamVjdCBuYW1lcwogYW5kIG90aGVyIHN5bWJvbHMuCiBTdHJpY3RseSBzcGVha2luZywgdGhpcyBpcyBub3QgdmFsaWQgU01JIHN5bnRheCwgYnV0IHNvbWUgdmVuZG9yIE1JQgogZmlsZXMgZGVmaW5lIHN1Y2ggbmFtZXMuCiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gdG9rZW4gXGZJbWliQWxsb3dVbmRlcmxpbmVcZlIuCiAuVFAKLS5CICItUHciCisuQiAiXC1QdyIKIFNob3cgdmFyaW91cyB3YXJuaW5nIG1lc3NhZ2VzIGluIHBhcnNpbmcgTUlCIGZpbGVzIGFuZCBidWlsZGluZwogdGhlIG92ZXJhbGwgT0lEIHRyZWUuCiBUaGlzIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZQogXGZJbWliV2FybmluZ0xldmVsIDFcZlIKIC5UUAotLkIgIi1QVyIKKy5CICJcLVBXIgogU2hvdyBzb21lIGFkZGl0aW9uYWwgd2FybmluZyBtZXNzYWdlcywgbW9zdGx5IHJlbGF0aW5nIHRvIHBhcnNpbmcKIGluZGl2aWR1YWwgTUlCIG9iamVjdHMuCiBUaGlzIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZQpAQCAtNDQ1LDEwNyArNTUzLDEwNyBAQAogCiAuU0ggIk9VVFBVVCBPUFRJT05TIgogVGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGZyb20gU05NUCBjb21tYW5kcyBjYW4gYmUgY29udHJvbGxlZCB1c2luZwotdmFyaW91cyBwYXJhbWV0ZXJzIG9mIHRoZSBcZkItT1xmUiBmbGFnLgordmFyaW91cyBwYXJhbWV0ZXJzIG9mIHRoZSBcZkJcLU9cZlIgZmxhZy4KIFRoZSBlZmZlY3RzIG9mIHRoZXNlIHN1Yi1vcHRpb25zIGNhbiBiZSBzZWVuIGJ5IGNvbXBhcmlzb24gd2l0aAogdGhlIGZvbGxvd2luZyBkZWZhdWx0IG91dHB1dCAodW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQpOgogLlJTCiAubmYKLVxmQyQgc25tcGdldCAtYyBwdWJsaWMgLXYgMSBsb2NhbGhvc3Qgc3lzVXBUaW1lLjAKLVNOTVB2Mi1NSUI6OnN5c1VwVGltZS4wID0gVGltZXRpY2tzOiAoMTQwOTY3NjMpIDEgZGF5LCAxNTowOToyNy42M1xmUgorXGZDJCBzbm1wZ2V0IFwtYyBwdWJsaWMgXC12IDEgbG9jYWxob3N0IHN5c1VwVGltZS4wCitTTk1QdjJcLU1JQjo6c3lzVXBUaW1lLjAgPSBUaW1ldGlja3M6ICgxNDA5Njc2MykgMSBkYXksIDE1OjA5OjI3LjYzXGZSCiAuZmkKIC5SRQogCiAuVFAKLS5CIC1PYQorLkIgXC1PYQogRGlzcGxheSBzdHJpbmcgdmFsdWVzIGFzIEFTQ0lJIHN0cmluZ3MgKHVubGVzcyB0aGVyZSBpcyBhIAotXGZDRElTUExBWS1ISU5UXGZSIGRlZmluZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIE1JQiBvYmplY3QpLgorXGZDRElTUExBWVwtSElOVFxmUiBkZWZpbmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBNSUIgb2JqZWN0KS4KIEJ5IGRlZmF1bHQsIHRoZSBsaWJyYXJ5IGF0dGVtcHRzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB2YWx1ZSBpcwogYSBwcmludGFibGUgb3IgYmluYXJ5IHN0cmluZywgYW5kIGRpc3BsYXlzIGl0IGFjY29yZGluZ2x5LgogCiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3Qgb2JqZWN0cyB0aGF0IFxmSWRvXGZSIGhhdmUgYSBEaXNwbGF5IEhpbnQuCiAuVFAKLS5CIC1PYgorLkIgXC1PYgogRGlzcGxheSB0YWJsZSBpbmRleGVzIG51bWVyaWNhbGx5LCByYXRoZXIgdGhhbiB0cnlpbmcgdG8gaW50ZXJwcmV0CiB0aGUgaW5zdGFuY2Ugc3ViaWRlbnRpZmllcnMgYXMgc3RyaW5nIG9yIE9JRCB2YWx1ZXM6CiAuUlMKIC5uZgotXGZDICAgICQgc25tcGdldG5leHQgLWMgcHVibGljIC12IDEgbG9jYWxob3N0IHZhY21TZWN1cml0eU1vZGVsCi0gICAgU05NUC1WSUVXLUJBU0VELUFDTS1NSUI6OnZhY21TZWN1cml0eU1vZGVsLjAuIndlcyIgPSB4eHgKLSAgICAkIHNubXBnZXRuZXh0IC1jIHB1YmxpYyAtdiAxIFxmQi1PYlxmUCBsb2NhbGhvc3QgdmFjbVNlY3VyaXR5TW9kZWwKLSAgICBTTk1QLVZJRVctQkFTRUQtQUNNLU1JQjo6dmFjbVNlY3VyaXR5TW9kZWwuMC4zLjExOS4xMDEuMTE1ID0geHh4XGZSCitcZkMgICAgJCBzbm1wZ2V0bmV4dCBcLWMgcHVibGljIFwtdiAxIGxvY2FsaG9zdCB2YWNtU2VjdXJpdHlNb2RlbAorICAgIFNOTVBcLVZJRVdcLUJBU0VEXC1BQ01cLU1JQjo6dmFjbVNlY3VyaXR5TW9kZWwuMC4id2VzIiA9IHh4eAorICAgICQgc25tcGdldG5leHQgXC1jIHB1YmxpYyBcLXYgMSBcZkJcLU9iXGZQIGxvY2FsaG9zdCB2YWNtU2VjdXJpdHlNb2RlbAorICAgIFNOTVBcLVZJRVdcLUJBU0VEXC1BQ01cLU1JQjo6dmFjbVNlY3VyaXR5TW9kZWwuMC4zLjExOS4xMDEuMTE1ID0geHh4XGZSCiAuZmkKIC5SRQogLlRQCi0uQiAtT2UKKy5CIFwtT2UKIFJlbW92ZXMgdGhlIHN5bWJvbGljIGxhYmVscyBmcm9tIGVudW1lcmF0aW9uIHZhbHVlczoKIC5SUwogLm5mCi1cZkMgICAgJCBzbm1wZ2V0IC1jIHB1YmxpYyAtdiAxIGxvY2FsaG9zdCBpcEZvcndhcmRpbmcuMAotICAgIElQLU1JQjo6aXBGb3J3YXJkaW5nLjAgPSBJTlRFR0VSOiBmb3J3YXJkaW5nKDEpCi1cZkMgICAgJCBzbm1wZ2V0IC1jIHB1YmxpYyAtdiAxIFxmQi1PZVxmUCBsb2NhbGhvc3QgaXBGb3J3YXJkaW5nLjAKLSAgICBJUC1NSUI6OmlwRm9yd2FyZGluZy4wID0gSU5URUdFUjogMVxmUgorXGZDICAgICQgc25tcGdldCBcLWMgcHVibGljIFwtdiAxIGxvY2FsaG9zdCBpcEZvcndhcmRpbmcuMAorICAgIElQXC1NSUI6OmlwRm9yd2FyZGluZy4wID0gSU5URUdFUjogZm9yd2FyZGluZygxKQorXGZDICAgICQgc25tcGdldCBcLWMgcHVibGljIFwtdiAxIFxmQlwtT2VcZlAgbG9jYWxob3N0IGlwRm9yd2FyZGluZy4wCisgICAgSVBcLU1JQjo6aXBGb3J3YXJkaW5nLjAgPSBJTlRFR0VSOiAxXGZSCiAuZmkKIC5SRQogLlRQCi0uQiAtT0UKKy5CIFwtT0UKIE1vZGlmaWVzIGluZGV4IHN0cmluZ3MgdG8gZXNjYXBlIHRoZSBxdW90ZSBjaGFyYWN0ZXJzOgogLlJTCiAubmYKLVxmQyAgICAkIHNubXBnZXRuZXh0IC1jIHB1YmxpYyAtdiAxIGxvY2FsaG9zdCB2YWNtU2VjdXJpdHlNb2RlbAotICAgIFNOTVAtVklFVy1CQVNFRC1BQ00tTUlCOjp2YWNtU2VjdXJpdHlNb2RlbC4wLiJ3ZXMiID0geHh4Ci0gICAgJCBzbm1wZ2V0bmV4dCAtYyBwdWJsaWMgLXYgMSBcZkItT0VcZlAgbG9jYWxob3N0IHZhY21TZWN1cml0eU1vZGVsCi0gICAgU05NUC1WSUVXLUJBU0VELUFDTS1NSUI6OnZhY21TZWN1cml0eU1vZGVsLjAuXFwid2VzXFwiID0geHh4XGZSCitcZkMgICAgJCBzbm1wZ2V0bmV4dCBcLWMgcHVibGljIFwtdiAxIGxvY2FsaG9zdCB2YWNtU2VjdXJpdHlNb2RlbAorICAgIFNOTVBcLVZJRVdcLUJBU0VEXC1BQ01cLU1JQjo6dmFjbVNlY3VyaXR5TW9kZWwuMC4id2VzIiA9IHh4eAorICAgICQgc25tcGdldG5leHQgXC1jIHB1YmxpYyBcLXYgMSBcZkJcLU9FXGZQIGxvY2FsaG9zdCB2YWNtU2VjdXJpdHlNb2RlbAorICAgIFNOTVBcLVZJRVdcLUJBU0VEXC1BQ01cLU1JQjo6dmFjbVNlY3VyaXR5TW9kZWwuMC5cXCJ3ZXNcXCIgPSB4eHhcZlIKIC5maQogLlJFCiAuSVAKIFRoaXMgYWxsb3dzIHRoZSBvdXRwdXQgdG8gYmUgcmV1c2VkIGluIHNoZWxsIGNvbW1hbmRzLgogLlRQCi0uQiAtT2YKKy5CIFwtT2YKIEluY2x1ZGUgdGhlIGZ1bGwgbGlzdCBvZiBNSUIgb2JqZWN0cyB3aGVuIGRpc3BsYXlpbmcgYW4gT0lEOgogLlJTCi1cZkMgICAgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIuc3lzdGVtLnN5c1VwVGltZS4wID1cZlIKK1xmQyAgICAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWJcLTIuc3lzdGVtLnN5c1VwVGltZS4wID1cZlIKIC5SUwogXGZDICAgICAgICBUaW1ldGlja3M6ICgxNDA5Njc2MykgMSBkYXksIDE1OjA5OjI3LjYzXGZSCiAuUkUKIC5SRQogLlRQCi0uQiAtT24KKy5CIFwtT24KIERpc3BsYXlzIHRoZSBPSUQgbnVtZXJpY2FsbHk6CiAuYnIKIFxmQyAgICAuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6ICgxNDA5Njc2MykgMSBkYXksIDE1OjA5OjI3LjYzXGZSCiAuVFAKLS5CIC1PcQorLkIgXC1PcQogUmVtb3ZlcyB0aGUgZXF1YWwgc2lnbiBhbmQgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIGRpc3BsYXlpbmcgdmFyYmluZCB2YWx1ZXM6CiAuYnIKLVxmQyAgICBTTk1QdjItTUlCOjpzeXNVcFRpbWUuMCAxOjE1OjA5OjI3LjYzXGZSCitcZkMgICAgU05NUHYyXC1NSUI6OnN5c1VwVGltZS4wIDE6MTU6MDk6MjcuNjNcZlIKIC5UUAotLkIgLU9RCisuQiBcLU9RCiBSZW1vdmVzIHRoZSB0eXBlIGluZm9ybWF0aW9uIHdoZW4gZGlzcGxheWluZyB2YXJiaW5kIHZhbHVlczoKIC5icgotXGZDICAgIFNOTVB2Mi1NSUI6OnN5c1VwVGltZS4wID0gMToxNTowOToyNy42M1xmUgorXGZDICAgIFNOTVB2MlwtTUlCOjpzeXNVcFRpbWUuMCA9IDE6MTU6MDk6MjcuNjNcZlIKIC5UUAotLkIgLU9zCisuQiBcLU9zCiBEaXNwbGF5IHRoZSBNSUIgb2JqZWN0IG5hbWUgKHBsdXMgYW55IGluc3RhbmNlIG9yIG90aGVyIHN1YmlkZW50aWZpZXJzKToKIC5icgogXGZDICAgIHN5c1VwVGltZS4wID0gVGltZXRpY2tzOiAoMTQwOTY3NjMpIDEgZGF5LCAxNTowOToyNy42M1xmUgogLlRQCi0uQiAtT1MKKy5CIFwtT1MKIERpc3BsYXkgdGhlIG5hbWUgb2YgdGhlIE1JQiwgYXMgd2VsbCBhcyB0aGUgb2JqZWN0IG5hbWU6CiAuYnIKLVxmQyAgICBTTk1QdjItTUlCOjpzeXNVcFRpbWUuMCA9IFRpbWV0aWNrczogKDE0MDk2NzYzKSAxIGRheSwgMTU6MDk6MjcuNjNcZlIKK1xmQyAgICBTTk1QdjJcLU1JQjo6c3lzVXBUaW1lLjAgPSBUaW1ldGlja3M6ICgxNDA5Njc2MykgMSBkYXksIDE1OjA5OjI3LjYzXGZSCiAuSVAKIFRoaXMgaXMgdGhlIGRlZmF1bHQgT0lEIG91dHB1dCBmb3JtYXQuCiAuVFAKLS5CIC1PdAorLkIgXC1PdAogRGlzcGxheSBcZkNUaW1lVGlja3NcZlIgdmFsdWVzIGFzIHJhdyBudW1iZXJzOgogLmJyCi1cZkMgICAgU05NUHYyLU1JQjo6c3lzVXBUaW1lLjAgPSAxNDA5Njc2M1xmUgorXGZDICAgIFNOTVB2MlwtTUlCOjpzeXNVcFRpbWUuMCA9IDE0MDk2NzYzXGZSCiAuVFAKLS5CIC1PVAorLkIgXC1PVAogSWYgdmFsdWVzIGFyZSBwcmludGVkIGFzIEhleCBzdHJpbmdzLAogZGlzcGxheSBhIHByaW50YWJsZSB2ZXJzaW9uIGFzIHdlbGwuCiAuVFAKLS5CIC1PdQorLkIgXC1PdQogRGlzcGxheSB0aGUgT0lEIGluIHRoZSB0cmFkaXRpb25hbCBVQ0Qtc3R5bGUgKGluaGVyaXRlZCBmcm9tIHRoZSBvcmlnaW5hbAogQ01VIGNvZGUpLgogVGhhdCBtZWFucyByZW1vdmluZyBhIHNlcmllcyBvZiAic3RhbmRhcmQiIHByZWZpeGVzIGZyb20gdGhlIE9JRCwKQEAgLTU1NCwzNSArNjYyLDM1IEBACiAuYnIKIFxmQyAgICBzeXN0ZW0uc3lzVXBUaW1lLjAgPSBUaW1ldGlja3M6ICgxNDA5Njc2MykgMSBkYXksIDE1OjA5OjI3LjYzXGZSCiAuVFAKLS5CIC1PVQorLkIgXC1PVQogRG8gbm90IHByaW50IHRoZSBVTklUUyBzdWZmaXggYXQgdGhlIGVuZCBvZiB0aGUgdmFsdWUuCiAuVFAKLS5CIC1PdgorLkIgXC1PdgogRGlzcGxheSB0aGUgdmFyYmluZCB2YWx1ZSBvbmx5LCBub3QgdGhlIE9JRDoKIC5SUwogLm5mCi1cZkMgICAgJCBzbm1wZ2V0IC1jIHB1YmxpYyAtdiAxIFxmQi1PdlxmUCBsb2NhbGhvc3QgaXBGb3J3YXJkaW5nLjAKK1xmQyAgICAkIHNubXBnZXQgXC1jIHB1YmxpYyBcLXYgMSBcZkJcLU92XGZQIGxvY2FsaG9zdCBpcEZvcndhcmRpbmcuMAogICAgIElOVEVHRVI6IGZvcndhcmRpbmcoMSlcZlIKIC5maQogLlJFCiAuVFAKLS5CIC1PeAorLkIgXC1PeAogRGlzcGxheSBzdHJpbmcgdmFsdWVzIGFzIEhleCBzdHJpbmdzICh1bmxlc3MgdGhlcmUgaXMgYSAKLVxmQ0RJU1BMQVktSElOVFxmUiBkZWZpbmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBNSUIgb2JqZWN0KS4KK1xmQ0RJU1BMQVlcLUhJTlRcZlIgZGVmaW5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgTUlCIG9iamVjdCkuCiBCeSBkZWZhdWx0LCB0aGUgbGlicmFyeSBhdHRlbXB0cyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdmFsdWUgaXMKIGEgcHJpbnRhYmxlIG9yIGJpbmFyeSBzdHJpbmcsIGFuZCBkaXNwbGF5cyBpdCBhY2NvcmRpbmdseS4KIAogVGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0IG9iamVjdHMgdGhhdCBcZklkb1xmUiBoYXZlIGEgRGlzcGxheSBIaW50LgogLlRQCi0uQiAtT1gKKy5CIFwtT1gKIERpc3BsYXkgdGFibGUgaW5kZXhlcyBpbiBhIG1vcmUgInByb2dyYW0gbGlrZSIgb3V0cHV0LCBpbWl0YXRpbmcKIGEgdHJhZGl0aW9uYWwgYXJyYXktc3R5bGUgaW5kZXggZm9ybWF0OgogLlJTCiAubmYKLVxmQyAgICAkIHNubXBnZXRuZXh0IC1jIHB1YmxpYyAtdiAxIGxvY2FsaG9zdCBpcHY2Um91dGVUYWJsZQotICAgIElQdjYtTUlCOjppcHY2Um91dGVJZkluZGV4LjYzLjI1NC4xLjAuMjU1LjAuMC4wLjAuMC4wLjAuMC4wLjAuMC42NC4xID0gSU5URUdFUjogMgotICAgICQgc25tcGdldG5leHQgLWMgcHVibGljIC12IDEgXGZCLU9YXGZQIGxvY2FsaG9zdCBpcHY2Um91dGVUYWJsZQotICAgIElQdjYtTUlCOjppcHY2Um91dGVJZkluZGV4WzNmZmU6MTAwOmZmMDA6MDowOjA6MDowXVs2NF1bMV0gPSBJTlRFR0VSOiAyCitcZkMgICAgJCBzbm1wZ2V0bmV4dCBcLWMgcHVibGljIFwtdiAxIGxvY2FsaG9zdCBpcHY2Um91dGVUYWJsZQorICAgIElQdjZcLU1JQjo6aXB2NlJvdXRlSWZJbmRleC42My4yNTQuMS4wLjI1NS4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuNjQuMSA9IElOVEVHRVI6IDIKKyAgICAkIHNubXBnZXRuZXh0IFwtYyBwdWJsaWMgXC12IDEgXGZCXC1PWFxmUCBsb2NhbGhvc3QgaXB2NlJvdXRlVGFibGUKKyAgICBJUHY2XC1NSUI6OmlwdjZSb3V0ZUlmSW5kZXhbM2ZmZToxMDA6ZmYwMDowOjA6MDowOjBdWzY0XVsxXSA9IElOVEVHRVI6IDIKIC5maQogLlJFCiAuUFAKQEAgLTU5NCwxOSArNzAyLDE5IEBACiAuU0ggIkxPR0dJTkcgT1BUSU9OUyIKIFRoZSBtZWNoYW5pc20gYW5kIGRlc3RpbmF0aW9uIHRvIHVzZSBmb3IgbG9nZ2luZyBvZiB3YXJuaW5nIGFuZCBlcnJvcgogbWVzc2FnZXMgY2FuIGJlIGNvbnRyb2xsZWQgYnkgcGFzc2luZyB2YXJpb3VzIHBhcmFtZXRlcnMgdG8gdGhlCi0uQiAtTAorLkIgXC1MCiBmbGFnLgogLlRQCi0uQiAtTGUKKy5CIFwtTGUKIExvZyBtZXNzYWdlcyB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgogLlRQCi0uQiAtTGYgRklMRQorLkIgXC1MZiBGSUxFCiBMb2cgbWVzc2FnZXMgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgogLlRQCi0uQiAtTG8KKy5CIFwtTG8KIExvZyBtZXNzYWdlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbS4KIC5UUAotLkIgLUxzIEZBQ0lMSVRZCisuQiBcLUxzIEZBQ0lMSVRZCiBMb2cgbWVzc2FnZXMgdmlhIHN5c2xvZywgdXNpbmcgdGhlIHNwZWNpZmllZCBmYWNpbGl0eQogKCdkJyBmb3IgTE9HX0RBRU1PTiwgJ3UnIGZvciBMT0dfVVNFUiwKIG9yICcwJy0nNycgZm9yIExPR19MT0NBTDAgdGhyb3VnaCBMT0dfTE9DQUw3KS4KQEAgLTYxNiwxNyArNzI0LDE3IEBACiBhbGxvdyB0aGUgY29ycmVzcG9uZGluZyBsb2dnaW5nIG1lY2hhbmlzbSB0byBiZSByZXN0cmljdGVkIHRvIGNlcnRhaW4KIHByaW9yaXRpZXMgb2YgbWVzc2FnZS4gIFVzaW5nIHN0YW5kYXJkIGVycm9yIGxvZ2dpbmcgYXMgYW4gZXhhbXBsZToKIC5UUAotLkIgLUxFIHByaQorLkIgXC1MRSBwcmkKIHdpbGwgbG9nIG1lc3NhZ2VzIG9mIHByaW9yaXR5ICdwcmknIGFuZCBhYm92ZSB0byBzdGFuZGFyZCBlcnJvci4KIC5UUAotLkIgLUxFIHAxLXAyCisuQiBcLUxFIHAxXC1wMgogd2lsbCBsb2cgbWVzc2FnZXMgd2l0aCBwcmlvcml0eSBiZXR3ZWVuICdwMScgYW5kICdwMicgKGluY2x1c2l2ZSkgdG8KIHN0YW5kYXJkIGVycm9yLgogLlBQCiBGb3IKLS5CIC1MRgorLkIgXC1MRgogYW5kCi0uQiAtTFMKKy5CIFwtTFMKIHRoZSBwcmlvcml0eSBzcGVjaWZpY2F0aW9uIGNvbWVzIGJlZm9yZSB0aGUgZmlsZSBvciBmYWNpbGl0eSB0b2tlbi4KIFRoZSBwcmlvcml0aWVzIHJlY29nbmlzZWQgYXJlOgogLklQCkBAIC02NzUsMTAgKzc4MywxMCBAQAogCiAuU0ggIklOUFVUIE9QVElPTlMiCiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgaW5wdXQgb2JqZWN0IG5hbWVzIGFuZCB0aGUgdmFsdWVzIHRvIGJlIGFzc2lnbmVkCi1jYW4gYmUgY29udHJvbGxlZCB1c2luZyB2YXJpb3VzIHBhcmFtZXRlcnMgb2YgdGhlIFxmQi1JXGZSIGZsYWcuCitjYW4gYmUgY29udHJvbGxlZCB1c2luZyB2YXJpb3VzIHBhcmFtZXRlcnMgb2YgdGhlIFxmQlwtSVxmUiBmbGFnLgogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIHdpbGwgYmUgZGVzY3JpYmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBzZWN0aW9uLgogLlRQCi0uQiAtSWIKKy5CIFwtSWIKIHNwZWNpZmllcyB0aGF0IHRoZSBnaXZlbiBuYW1lIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwKIHRvIG1hdGNoIChjYXNlLWluc2Vuc2l0aXZlbHkpIGFnYWluc3Qgb2JqZWN0IG5hbWVzIGluIHRoZSBNSUIgdHJlZS4KIFRoZSAiYmVzdCIgbWF0Y2ggd2lsbCBiZSB1c2VkIC0gY2FsY3VsYXRlZCBhcyB0aGUgb25lIHRoYXQgbWF0Y2hlcyB0aGUKQEAgLTY5OSwyMyArODA3LDIzIEBACiBpbnN0YW5jZSBcZkNzeXNDb250YWN0LjBcZlIgKGFsdGhvdWdoIFxmSXN5cypvbnRhY3RcZlIgd291bGQgbWF0Y2gKIFxmQ3N5c0NvbnRhY3RcZlIpLgogU2ltaWxhcmx5LCBzcGVjaWZ5aW5nIGEgTUlCIG1vZHVsZSBuYW1lIHdpbGwgbm90IHN1Y2NlZWQKLShzbyBcZklTTk1QdjItTUlCOjpzeXMuKm9udGFjdFxmUiB3b3VsZCBub3QgbWF0Y2ggZWl0aGVyKS4KKyhzbyBcZklTTk1QdjJcLU1JQjo6c3lzLipvbnRhY3RcZlIgd291bGQgbm90IG1hdGNoIGVpdGhlcikuCiAuVFAKLS5CIC1JaAotZGlzYWJsZXMgdGhlIHVzZSBvZiBESVNQTEFZLUhJTlQgaW5mb3JtYXRpb24gd2hlbiBhc3NpZ25pbmcgdmFsdWVzLgorLkIgXC1JaAorZGlzYWJsZXMgdGhlIHVzZSBvZiBESVNQTEFZXC1ISU5UIGluZm9ybWF0aW9uIHdoZW4gYXNzaWduaW5nIHZhbHVlcy4KIFRoaXMgd291bGQgdGhlbiByZXF1aXJlIHByb3ZpZGluZyB0aGUgcmF3IHZhbHVlOgogLmJyCi1cZkMgICAgc25tcHNldCAuLi4gSE9TVC1SRVNPVVJDRVMtTUlCOjpoclN5c3RlbURhdGUuMAorXGZDICAgIHNubXBzZXQgLi4uIEhPU1RcLVJFU09VUkNFU1wtTUlCOjpoclN5c3RlbURhdGUuMAogLmJyCiAgICAgICAgICAgICAgICAgICAgIHggIjA3IEQyIDBDIDBBIDAyIDA0IDA2IDA4IlxmUgogLmJyCiBpbnN0ZWFkIG9mIGEgZm9ybWF0dGVkIHZlcnNpb246CiAuYnIKLVxmQyAgICBzbm1wc2V0IC4uLiBIT1NULVJFU09VUkNFUy1NSUI6OmhyU3lzdGVtRGF0ZS4wCitcZkMgICAgc25tcHNldCAuLi4gSE9TVFwtUkVTT1VSQ0VTXC1NSUI6OmhyU3lzdGVtRGF0ZS4wCiAuYnIKLSAgICAgICAgICAgICAgICAgICAgPSAyMDAyLTEyLTEwLDI6NDo2LjhcZlIKKyAgICAgICAgICAgICAgICAgICAgPSAyMDAyXC0xMlwtMTAsMjo0OjYuOFxmUgogLlRQCi0uQiAtSXIKKy5CIFwtSXIKIGRpc2FibGVzIGNoZWNraW5nIHRhYmxlIGluZGV4ZXMgYW5kIHRoZSB2YWx1ZSB0byBiZSBhc3NpZ25lZCBhZ2FpbnN0IHRoZQogcmVsZXZhbnQgTUlCIGRlZmluaXRpb25zLiAgVGhpcyB3aWxsIChob3BlZnVsbHkpIHJlc3VsdCBpbiB0aGUgcmVtb3RlCiBhZ2VudCByZXBvcnRpbmcgYW4gaW52YWxpZCByZXF1ZXN0LCByYXRoZXIgdGhhbiBjaGVja2luZyAoYW5kIHJlamVjdGluZykKQEAgLTcyNSwxMyArODMzLDEzIEBACiB0ZW5kIHRvIGJlIG1vcmUgcHJlY2lzZSksIGJ1dCBkaXNhYmxpbmcgdGhpcyBiZWhhdmlvdXIgaXMgcGFydGljdWxhcmx5CiB1c2VmdWwgd2hlbiB0ZXN0aW5nIHRoZSByZW1vdGUgYWdlbnQuCiAuVFAKLS5CIC1JUgorLkIgXC1JUgogZW5hYmxlcyAicmFuZG9tIGFjY2VzcyIgbG9va3VwIG9mIE1JQiBuYW1lcy4KIFJhdGhlciB0aGFuIHByb3ZpZGluZyBhIGZ1bGwgT0lEIHBhdGggdG8gdGhlIGRlc2lyZWQgTUlCIG9iamVjdAogKG9yIHF1YWxpZnlpbmcgdGhpcyBvYmplY3Qgd2l0aCBhbiBleHBsaWNpdCBNSUIgbW9kdWxlIG5hbWUpLAogdGhlIE1JQiB0cmVlIHdpbGwgYmUgc2VhcmNoZWQgZm9yIHRoZSBtYXRjaGluZyBvYmplY3QgbmFtZS4KLVRodXMgXGZDLmlzby5vcmcuZG9kLmludGVybmV0Lm1pYi0yLnN5c3RlbS5zeXNEZXNjci4wXGZSCi0ob3IgXGZDU05NUHYyLU1JQjo6c3lzRGVzY3IuMFxmUikgY2FuIGJlIHNwZWNpZmllZCBzaW1wbHkKK1RodXMgXGZDLmlzby5vcmcuZG9kLmludGVybmV0Lm1pYlwtMi5zeXN0ZW0uc3lzRGVzY3IuMFxmUgorKG9yIFxmQ1NOTVB2MlwtTUlCOjpzeXNEZXNjci4wXGZSKSBjYW4gYmUgc3BlY2lmaWVkIHNpbXBseQogYXMgXGZDc3lzRGVzY3IuMFxmUi4KIC5SUwogLklQICJXYXJuaW5nOiIKQEAgLTc0MCwyNCArODQ4LDI0IEBACiBoYXZlIGJlZW4gbG9hZGVkLgogLlJFCiAuSVAKLVRoZSBcZklNSUItTU9EVUxFOjpvYmplY3ROYW1lXGZSIHN5bnRheCBoYXMKK1RoZSBcZklNSUJcLU1PRFVMRTo6b2JqZWN0TmFtZVxmUiBzeW50YXggaGFzCiB0aGUgYWR2YW50YWdlIG9mIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGEgcGFydGljdWxhciBNSUIgb2JqZWN0LAogYXMgd2VsbCBhcyBiZWluZyBzbGlnaHRseSBtb3JlIGVmZmljaWVudCAoYW5kIGF1dG9tYXRpY2FsbHkKIGxvYWRpbmcgdGhlIG5lY2Vzc2FyeSBNSUIgZmlsZSBpZiBuZWNlc3NhcnkpLgogLlRQCi0uQiAtSXMgU1VGRklYCisuQiBcLUlzIFNVRkZJWAogYWRkcyB0aGUgc3BlY2lmaWVkIHN1ZmZpeCB0byBlYWNoIHRleHR1YWwgT0lEIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCiBUaGlzIGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIG11bHRpcGxlIG9iamVjdHMgZnJvbSB0aGUgc2FtZSByb3cgb2YKIGEgdGFibGUsIGJ5IHNwZWNpZnlpbmcgYSBjb21tb24gaW5kZXggdmFsdWUuCiAuVFAKLS5CIC1JUyBQUkVGSVgKKy5CIFwtSVMgUFJFRklYCiBhZGRzIHRoZSBzcGVjaWZpZWQgcHJlZml4IHRvIGVhY2ggdGV4dHVhbCBPSUQgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBleHBsaWNpdCBNSUIgbW9kdWxlIG5hbWUgZm9yIGFsbCBvYmplY3RzCiBiZWluZyByZXRyaWV2ZWQgKG9yIGZvciBpbmN1cmFibHkgbGF6eSB0eXBpc3RzKS4KIC5UUAotLkIgLUl1CisuQiBcLUl1CiBlbmFibGVzIHRoZSB0cmFkaXRpb25hbCBVQ0Qtc3R5bGUgYXBwcm9hY2ggdG8gaW50ZXJwcmV0aW5nIGlucHV0IE9JRHMuCi1UaGlzIGFzc3VtZXMgdGhhdCBPSURzIGFyZSByb290ZWQgYXQgdGhlICdtaWItMicgcG9pbnQgaW4gdGhlIHRyZWUKK1RoaXMgYXNzdW1lcyB0aGF0IE9JRHMgYXJlIHJvb3RlZCBhdCB0aGUgJ21pYlwtMicgcG9pbnQgaW4gdGhlIHRyZWUKICh1bmxlc3MgdGhleSBzdGFydCB3aXRoIGFuIGV4cGxpY2l0ICcuJyBvciBpbmNsdWRlIGEgTUlCIG1vZHVsZSBuYW1lKS4KIFNvIHRoZSBcZkNzeXNEZXNjclxmUiBpbnN0YW5jZSBhYm92ZSB3b3VsZCBiZSByZWZlcmVuY2VkIGFzCiBcZkNzeXN0ZW0uc3lzRGVzY3IuMFxmUi4gCkBAIC03NjYsMjggKzg3NCwyOCBAQAogT2JqZWN0IG5hbWVzIHNwZWNpZmllZCB3aXRoIGEgbGVhZGluZyAnLicgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCBhcwogImZ1bGx5IHF1YWxpZmllZCIgT0lEcywgbGlzdGluZyB0aGUgc2VxdWVuY2Ugb2YgTUlCIG9iamVjdHMgZnJvbSB0aGUKIHJvb3Qgb2YgdGhlIE1JQiB0cmVlLiAgU3VjaCBvYmplY3RzIGFuZCB0aG9zZSBxdWFsaWZpZWQgYnkgYW4gZXhwbGljaXQKLU1JQiBtb2R1bGUgbmFtZSBhcmUgdW5hZmZlY3RlZCBieSB0aGUgXGZCLUliXGZSLCBcZkItSVJcZlIgYW5kIFxmQi1JdVxmUiBmbGFncy4KK01JQiBtb2R1bGUgbmFtZSBhcmUgdW5hZmZlY3RlZCBieSB0aGUgXGZCXC1JYlxmUiwgXGZCXC1JUlxmUiBhbmQgXGZCXC1JdVxmUiBmbGFncy4KIAogT3RoZXJ3aXNlLCBpZiBub25lIG9mIHRoZSBhYm92ZSBpbnB1dCBvcHRpb25zIGFyZSBzcGVjaWZpZWQsIHRoZQogZGVmYXVsdCBiZWhhdmlvdXIgZm9yIGEgInJlbGF0aXZlIiBPSUQgaXMgdG8gdHJ5IGFuZCBpbnRlcnByZXQgaXQKIGFzIGFuIChpbXBsaWNpdGx5KSBmdWxseSBxdWFsaWZpZWQgT0lELAotdGhlbiBhcHBseSAicmFuZG9tIGFjY2VzcyIgbG9va3VwIChcZkItSVJcZlIpLAotZm9sbG93ZWQgYnkgImJlc3QgbWF0Y2giIHBhdHRlcm4gbWF0Y2hpbmcgKFxmQi1JYlxmUikuCit0aGVuIGFwcGx5ICJyYW5kb20gYWNjZXNzIiBsb29rdXAgKFxmQlwtSVJcZlIpLAorZm9sbG93ZWQgYnkgImJlc3QgbWF0Y2giIHBhdHRlcm4gbWF0Y2hpbmcgKFxmQlwtSWJcZlIpLgogCiAuU0ggIkVOVklST05NRU5UIFZBUklBQkxFUyIKIC5JUCBQUkVGSVgKIFRoZSBzdGFuZGFyZCBwcmVmaXggZm9yIG9iamVjdCBpZGVudGlmaWVycyAod2hlbiB1c2luZyBVQ0Qtc3R5bGUgb3V0cHV0KS4KLURlZmF1bHRzIHRvIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yCitEZWZhdWx0cyB0byAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWJcLTIKIC5JUCBNSUJTCiBUaGUgbGlzdCBvZiBNSUJzIHRvIGxvYWQuIERlZmF1bHRzIHRvCi1TTk1QdjItVEM6U05NUHYyLU1JQjpJRi1NSUI6SVAtTUlCOlRDUC1NSUI6VURQLU1JQjpTTk1QLVZBQ00tTUlCLgorU05NUHYyXC1UQzpTTk1QdjJcLU1JQjpJRlwtTUlCOklQXC1NSUI6VENQXC1NSUI6VURQXC1NSUI6U05NUFwtVkFDTVwtTUlCLgogT3ZlcnJpZGRlbiBieSB0aGUKLS5CIC1tCisuQiBcLW0KIG9wdGlvbi4KIC5JUCBNSUJESVJTCiBUaGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIE1JQnMuIERlZmF1bHRzIHRvIERBVEFESVIvc25tcC9taWJzLgogT3ZlcnJpZGRlbiBieSB0aGUKLS5CIC1NCisuQiBcLU0KIG9wdGlvbi4KIAogLlNIIEZJTEVTCmRpZmYgLS1naXQgYS9tYW4vc25tcGNvbmYuMS5kZWYgYi9tYW4vc25tcGNvbmYuMS5kZWYKaW5kZXggODQ4OGFhNS4uY2QwYzEwNCAxMDA2NDQKLS0tIGEvbWFuL3NubXBjb25mLjEuZGVmCisrKyBiL21hbi9zbm1wY29uZi4xLmRlZgpAQCAtNiw3ICs2LDcgQEAKIFtPUFRJT05TXSBbZmlsZVRvQ3JlYXRlXQogLklQICJTdGFydCB3aXRoOiIKIC5CIHNubXBjb25mCi0tZyBiYXNpY19zZXR1cAorXC1nIGJhc2ljX3NldHVwCiAuSVAgIk9yIGV2ZW4ganVzdDoiCiAuQiBzbm1wY29uZgogLlNIIERFU0NSSVBUSU9OCkBAIC0yNywzNSArMjcsMzUgQEAKIGNvbW1lbnRlZC4KIC5QUAogQSBwYXJ0aWN1bGFybHkgdXNlZnVsIG9wdGlvbiBpcyB0aGUKLS5CIC1nCisuQiBcLWcKIHN3aXRjaCwgd2hpY2ggd2Fsa3MgYSB1c2VyIHRocm91Z2ggYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbgogcXVlc3Rpb25zLiAgUnVuOgogLlJTCiAuUFAKLXNubXBjb25mIC1nIGJhc2ljX3NldHVwCitzbm1wY29uZiBcLWcgYmFzaWNfc2V0dXAKIC5SRQogLlBQCiBmb3IgYW4gZXhhbXBsZS4KIC5TSCAiT1BUSU9OUyIKIC5UUCA4Ci0uQiAtZgorLkIgXC1mCiBGb3JjZSBvdmVyd3JpdGluZyBleGlzdGluZyBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2l0aG91dAogcHJvbXB0aW5nIHRoZSB1c2VyIGlmIHRoaXMgaXMgYSBkZXNpcmVkIHRoaW5nIHRvIGRvLgogLlRQIAotLkIgLWkKKy5CIFwtaQogV2hlbiBmaW5pc2hlZCwgaW5zdGFsbCB0aGUgZmlsZXMgaW50byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGdsb2JhbAogc3lzdGVtIGNvbW1hbmRzIGV4cGVjdCB0byBmaW5kIHRoZW0uCiAuVFAKLS5CIC1wCisuQiBcLXAKIFdoZW4gZmluaXNoZWQsIGluc3RhbGwgdGhlIGZpbGVzIGludG8gdGhlIHVzZXJzIGhvbWUgZGlyZWN0b3J5J3MgLnNubXAKIHN1YmRpcmVjdG9yeSAod2hlcmUgdGhlIGFwcGxpY2F0aW9ucyB3aWxsIGFsc28gc2VhcmNoIGZvcgogY29uZmlndXJhdGlvbiBmaWxlcykuCiAuVFAKLS5CSSAtSSAiIERJUkVDVE9SWSIKKy5CSSBcLUkgIiBESVJFQ1RPUlkiCiBXaGVuIGZpbmlzaGVkLCBpbnN0YWxsIHRoZSBmaWxlcyBpbnRvIHRoZSBkaXJlY3RvcnkgCiAuSVIgRElSRUNUT1JZIC4KIC5UUAotLkIgLWEKKy5CIFwtYQogRG9uJ3QgYXNrIGFueSBxdWVzdGlvbnMuICBTaW1wbHkgcmVhZCBpbiB0aGUgdmFyaW91cyBrbm93bgogY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgd3JpdGUgdGhlbSBiYWNrIG91dCBhZ2Fpbi4gIFRoaXMgaGFzIHRoZQogZWZmZWN0IG9mICJhdXRvLWNvbW1lbnRpbmciIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB5b3UuICBTZWUKQEAgLTYzLDE3ICs2MywxNyBAQAogLkIgTkVBVCBUUklDS1MKIHNlY3Rpb24gYmVsb3cuCiAuVFAKLS5CSSAtciBhbGx8bm9uZQorLkJJIFwtciBhbGx8bm9uZQogUmVhZCBpbiBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZvdW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBOb3JtYWxseQogLkIgc25tcGNvbmYKIHByb21wdHMgeW91IGZvciB3aGljaCBmaWxlcyB5b3Ugd2lzaCB0byByZWFkIGluLiAgUmVhZGluZyBpbgogdGhlc2UgY29uZmlndXJhdGlvbiBmaWxlcyB3aWxsIG1lcmdlIHRoZXNlIGZpbGVzIHdpdGggdGhlIHJlc3VsdHMgb2YKIHRoZSBxdWVzdGlvbnMgdGhhdCBpdCBhc2tzIG9mIHlvdS4KIC5UUAotLkJJIC1SICIgRklMRSwuLi4iCisuQkkgXC1SICIgRklMRSwuLi4iCiBSZWFkIGluIGEgc3BlY2lmaWMgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzLgogLlRQCi0uQkkgLWcgIiBHUk9VUE5BTUUiCisuQkkgXC1nICIgR1JPVVBOQU1FIgogR3JvdXBzIG9mIGNvbmZpZ3VyYXRpb24gZW50cmllcyBjYW4gYmUgY3JlYXRlZCB0aGF0IGNhbiBiZSB1c2VkIHRvCiB3YWxrIGEgdXNlciB0aHJvdWdoIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyB0byBjcmVhdGUgYW4gaW5pdGlhbAogY29uZmlndXJhdGlvbiBmaWxlLiAgVGhlcmUgYXJlIG5vIG1lbnVzIHRvIG5hdmlnYXRlLCBqdXN0IGEgbGlzdCBvZgpAQCAtODEsNDQgKzgxLDQ0IEBACiAuUlMKIC5SUwogLlBQCi1zbm1wY29uZiAtZyBiYXNpY19zZXR1cAorc25tcGNvbmYgXC1nIGJhc2ljX3NldHVwCiAuUkUKIC5QUAogZm9yIGEgZ29vZCBleGFtcGxlLgogLlJFCiAuVFAKLS5CIC1HCisuQiBcLUcKIExpc3QgYWxsIHRoZSBrbm93biBncm91cHMuCiAuVFAKLS5CSSAtYyAiIENPTkZJR0RJUiIKKy5CSSBcLWMgIiBDT05GSUdESVIiCiAuQiBzbm1wY29uZgogdXNlcyBhIGRpcmVjdG9yeSBvZiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHRvIGxlYXJuIGFib3V0CiB0aGUgZmlsZXMgYW5kIHF1ZXN0aW9ucyB0aGF0IGl0IHNob3VsZCBiZSBhc2tpbmcuICBUaGlzIG9wdGlvbiB0ZWxscwogLkIgc25tcGNvbmYKIHRvIHVzZSBhIGRpZmZlcmVudCBsb2NhdGlvbiBmb3IgY29uZmlndXJpbmcgaXRzZWxmLgogLlRQCi0uQiAtcQorLkIgXC1xCiBSdW4gc2xpZ2h0bHkgbW9yZSBxdWlldGx5LiAgU2luY2UgdGhpcyBpcyBhbiBpbnRlcmFjdGl2ZSBwcm9ncmFtLCBJCiBkb24ndCByZWNvbW1lbmQgdGhpcyBvcHRpb24gc2luY2UgaXQgb25seSByZW1vdmVzIGluZm9ybWF0aW9uIGZyb20gdGhlCiBvdXRwdXQgdGhhdCBpcyBkZXNpZ25lZCB0byBoZWxwIHlvdS4KIC5UUAotLkIgLWQKKy5CIFwtZAogVHVybiBvbiAKIC5CIGxvdHMKIG9mIGRlYnVnZ2luZyBvdXRwdXQuCiAuVFAKLS5CIC1ECisuQiBcLUQKIEFkZCAKIC5CIGV2ZW4gbW9yZQogZGVidWdnaW5nIG91dHB1dCBpbiB0aGUgZm9ybSBvZiBQZXJsIHZhcmlhYmxlIGR1bXBzLgogLklQCiAuU0ggIk5FQVQgVFJJQ0tTIgotLklQICJzbm1wY29uZiAtZyBiYXNpY19zZXR1cCIKKy5JUCAic25tcGNvbmYgXC1nIGJhc2ljX3NldHVwIgogSGF2ZSBJIG1lbnRpb25lZCB0aGlzIGNvbW1hbmQgZW5vdWdoIHlldD8gIEl0J3MgZGVzaWduZWQgdG8gd2Fsawogc29tZW9uZSB0aHJvdWdoIGFuIGluaXRpYWwgc2V0dXAgZm9yIHRoZQogLkkgc25tcGQoOCkKIGRhZW1vbi4gIFJlYWxseSwgeW91IHNob3VsZCB0cnkgaXQuCi0uSVAgInNubXBjb25mIC1SIC91c3IvbG9jYWwvc25tcC9zbm1wZC5jb25mIC1hIC1mIHNubXBkLmNvbmYiCisuSVAgInNubXBjb25mIFwtUiAvdXNyL2xvY2FsL3NubXAvc25tcGQuY29uZiBcLWEgXC1mIHNubXBkLmNvbmYiCiBBdXRvbWF0aWNhbGx5IHJlYWRzIGluIGFuIHNubXBkLmNvbmYgZmlsZSAoZm9yIGV4YW1wbGUpIGFuZCBhZGRzCiBjb21tZW50cyB0byB0aGVtIGRlc2NyaWJpbmcgd2hhdCBlYWNoIHRva2VuIGRvZXMuICBUcnkgaXQuICBJdCdzIGNvb2wuCiAuU0ggIk5PVEVTIgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBkLjguZGVmIGIvbWFuL3NubXBkLjguZGVmCmluZGV4IDJhMjA4NmYuLmYxNzMzOTYgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wZC44LmRlZgorKysgYi9tYW4vc25tcGQuOC5kZWYKQEAgLTEsNCArMSw0IEBACi0uVEggU05NUEQgOCAiMTAgSmFuIDIwMDciIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUEQgOCAiMzAgSnVuIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcGQgLSBkYWVtb24gdG8gcmVzcG9uZCB0byBTTk1QIHJlcXVlc3QgcGFja2V0cy4KIC5TSCBTWU5PUFNJUwpAQCAtMTIsMTMgKzEyLDEzIEBACiByZXF1ZXN0ZWQgb3BlcmF0aW9uKHMpIGFuZCByZXR1cm5zIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgc2VuZGVyLgogLlNIIE9QVElPTlMKIC5UUCA4Ci0uQiAtYQorLkIgXC1hCiBMb2cgdGhlIHNvdXJjZSBhZGRyZXNzZXMgb2YgaW5jb21pbmcgcmVxdWVzdHMuCiAuVFAKLS5CIC1BCisuQiBcLUEKIEFwcGVuZCB0byB0aGUgbG9nIGZpbGUgcmF0aGVyIHRoYW4gdHJ1bmNhdGluZyBpdC4KIC5UUAotLkIgIi1jIiBcZklGSUxFCisuQiAiXC1jIiBcZklGSUxFCiBSZWFkIAogLkkgRklMRQogYXMgYSBjb25maWd1cmF0aW9uIGZpbGUKQEAgLTI3LDIxICsyNywyMSBAQAogaXMgc3BlY2lmaWVkIGluIHRoZSBmaWxlIGFzIGRlc2NyaWJlZCBpbiB0aGUgc25tcF9jb25maWcgbWFuIHBhZ2UgdW5kZXIKIFNXSVRDSElORyBDT05GSUdVUkFUSU9OIFRZUEVTIElOIE1JRC1GSUxFLgogLlRQCi0uQiAtQworLkIgXC1DCiBEbyBub3QgcmVhZCBhbnkgY29uZmlndXJhdGlvbiBmaWxlcyBleGNlcHQgdGhlIG9uZXMgb3B0aW9uYWxseSBzcGVjaWZpZWQgYnkgdGhlIAotLkIgLWMgCisuQiBcLWMgCiBvcHRpb24uCiBOb3RlIHRoYXQgdGhpcyBiZWhhdmlvdXIgYWxzbyBjb3ZlcnMgdGhlIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbiBmaWxlcy4KIFRoaXMgbWF5IHJlc3VsdCBpbiBkeW5hbWljYWxseS1hc3NpZ25lZCB2YWx1ZXMgYmVpbmcgcmVzZXQgZm9sbG93aW5nIGFuCiBhZ2VudCByZXN0YXJ0LCB1bmxlc3MgdGhlIHJlbGV2YW50IHBlcnNpc3RlbnQgY29uZmlnIGZpbGVzIGFyZQogZXhwbGljaXRseSBsb2FkZWQgdXNpbmcgdGhlCi0uQiAtYyAKKy5CIFwtYyAKIG9wdGlvbi4KIC5UUAotLkIgLWQKKy5CIFwtZAogRHVtcCAoaW4gaGV4YWRlY2ltYWwpIHRoZSBzZW50IGFuZCByZWNlaXZlZCBTTk1QIHBhY2tldHMuCiAuVFAKLS5CIC1EXGZJW1RPS0VOWywuLi5dXQorLkIgXC1EXGZJW1RPS0VOWywuLi5dXQogVHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KIC5JUiAiVE9LRU4iICIocykuIgogV2l0aG91dCBhbnkgdG9rZW5zIHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gcHJpbnRpbmcgYWxsIHRoZSB0b2tlbnMKQEAgLTQ5LDk5ICs0OSw5OSBAQAogWW91IG1pZ2h0IHdhbnQgdG8gdHJ5CiAuSVIgQUxMCiBmb3IgZXh0cmVtZWx5IHZlcmJvc2Ugb3V0cHV0LiAgTm90ZTogWW91IGNhbiBub3QgcHV0IGEgc3BhY2UgYmV0d2VlbgotdGhlIC1EIGZsYWcgYW5kIHRoZSBsaXN0ZWQgVE9LRU5zLgordGhlIFwtRCBmbGFnIGFuZCB0aGUgbGlzdGVkIFRPS0VOcy4KIC5UUAotLkIgLWYKKy5CIFwtZgogRG8gbm90IGZvcmsoKSBmcm9tIHRoZSBjYWxsaW5nIHNoZWxsLgogLlRQCi0uQiAtZyBcZklHSUQKKy5CIFwtZyBcZklHSUQKIENoYW5nZSB0byB0aGUgbnVtZXJpY2FsIGdyb3VwIElECiAuSSBHSUQKIGFmdGVyIG9wZW5pbmcgbGlzdGVuaW5nIHNvY2tldHMuCiAuVFAKLS5CIC1oLCAtLWhlbHAKKy5CIFwtaCwgXC1cLWhlbHAKIERpc3BsYXkgYSBicmllZiB1c2FnZSBtZXNzYWdlIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CIC1ICisuQiBcLUgKIERpc3BsYXkgYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmVzIHVuZGVyc3Rvb2QgYnkgdGhlCiBhZ2VudCBhbmQgdGhlbiBleGl0LgogLlRQCi0uQiAtSSBcZklbLV1JTklUTElTVAorLkIgXC1JIFxmSVtcLV1JTklUTElTVAogU3BlY2lmaWVzIHdoaWNoIG1vZHVsZXMgc2hvdWxkIChvciBzaG91bGQgbm90KSBiZSBpbml0aWFsaXplZAogd2hlbiB0aGUgYWdlbnQgc3RhcnRzIHVwLiAgSWYgdGhlIGNvbW1hLXNlcGFyYXRlZAogLkkgSU5JVExJU1QKIGlzIHByZWNlZGVkCi13aXRoIGEgJy0nLCBpdCBpcyB0aGUgbGlzdCBvZiBtb2R1bGVzIHRoYXQgc2hvdWxkIFxmSW5vdFxmUiBiZSBzdGFydGVkLgord2l0aCBhICdcLScsIGl0IGlzIHRoZSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBzaG91bGQgXGZJbm90XGZSIGJlIHN0YXJ0ZWQuCiBPdGhlcndpc2UgdGhpcyBpcyB0aGUgbGlzdCBvZiB0aGUgXGZJb25seVxmUiBtb2R1bGVzIHRoYXQgc2hvdWxkIGJlIHN0YXJ0ZWQuCiAKIFRvIGdldCBhIGxpc3Qgb2YgY29tcGlsZWQgbW9kdWxlcywgcnVuIHRoZSBhZ2VudCB3aXRoIHRoZSBhcmd1bWVudHMKLS5JICItRG1pYl9pbml0IC1IIgorLkkgIlwtRG1pYl9pbml0IFwtSCIKIChhc3N1bWluZyBkZWJ1Z2dpbmcgc3VwcG9ydCBoYXMgYmVlbiBjb21waWxlZCBpbikuCiAuVFAKLS5CIC1MW2Vmb3NdCisuQiBcLUxbZWZvc10KIFNwZWNpZnkgd2hlcmUgbG9nZ2luZyBvdXRwdXQgc2hvdWxkIGJlIGRpcmVjdGVkIChzdGFuZGFyZCBlcnJvciBvciBvdXRwdXQsCiB0byBhIGZpbGUgb3IgdmlhIHN5c2xvZykuICBTZWUgTE9HR0lORyBPUFRJT05TIGluIHNubXBjbWQoNSkgZm9yIGRldGFpbHMuCiAuVFAKLS5CUiAtbSAiIFxmSU1JQkxJU1QiCisuQlIgXC1tICIgXGZJTUlCTElTVCIKIFNwZWNpZmllcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIE1JQiBtb2R1bGVzIHRvIGxvYWQgZm9yIHRoaXMKIGFwcGxpY2F0aW9uLiAgVGhpcyBvdmVycmlkZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE1JQlMuCiBTZWUgXGZJc25tcGNtZCgxKVxmUiBmb3IgZGV0YWlscy4KIC5UUAotLkJSIC1NICIgXGZJRElSTElTVCIKKy5CUiBcLU0gIiBcZklESVJMSVNUIgogU3BlY2lmaWVzIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBNSUJzLgogVGhpcyBvdmVycmlkZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE1JQkRJUlMuCiBTZWUgXGZJc25tcGNtZCgxKVxmUiBmb3IgZGV0YWlscy4KIC5UUAotLkIgLW4gXGZJTkFNRQorLkIgXC1uIFxmSU5BTUUKIFNldCBhbiBhbHRlcm5hdGl2ZSBhcHBsaWNhdGlvbiBuYW1lICh3aGljaCB3aWxsIGFmZmVjdCB0aGUKIGNvbmZpZ3VyYXRpb24gZmlsZXMgbG9hZGVkKS4KIEJ5IGRlZmF1bHQgdGhpcyB3aWxsIGJlIFxmSXNubXBkXGZSLCByZWdhcmRsZXNzIG9mIHRoZSBuYW1lCiBvZiB0aGUgYWN0dWFsIGJpbmFyeS4KIC5UUAotLkIgLXAgXGZJRklMRQorLkIgXC1wIFxmSUZJTEUKIFNhdmUgdGhlIHByb2Nlc3MgSUQgb2YgdGhlIGRhZW1vbiBpbgogLklSIEZJTEUgIi4iCiAuVFAgCi0uQiAtcQorLkIgXC1xCiBQcmludCBzaW1wbGVyIG91dHB1dCBmb3IgZWFzaWVyIGF1dG9tYXRlZCBwYXJzaW5nLgogLlRQCi0uQiAtcgorLkIgXC1yCiBEbyBub3QgcmVxdWlyZSByb290IGFjY2VzcyB0byBydW4gdGhlIGRhZW1vbi4gIFNwZWNpZmljYWxseSwgZG8gbm90IGV4aXQKIGlmIGZpbGVzIG9ubHkgYWNjZXNzaWJsZSB0byByb290IChzdWNoIGFzIC9kZXYva21lbSBldGMuKSBjYW5ub3QgYmUKIG9wZW5lZC4KIC5UUAotLkIgLXUgXGZJVUlECisuQiBcLXUgXGZJVUlECiBDaGFuZ2UgdG8gdGhlIHVzZXIgSUQKIC5JIFVJRAogKHdoaWNoIGNhbiBiZSBnaXZlbiBpbiBudW1lcmljYWwgb3IgdGV4dHVhbCBmb3JtKSBhZnRlciBvcGVuaW5nCiBsaXN0ZW5pbmcgc29ja2V0cy4KIC5UUAotLkIgLVUKKy5CIFwtVQogSW5zdHJ1Y3RzIHRoZSBhZ2VudCB0byBub3QgcmVtb3ZlIGl0cyBwaWQgZmlsZSAoc2VlIHRoZQotLkIgLXAKKy5CIFwtcAogb3B0aW9uKSBvbiBzaHV0ZG93bi4gT3ZlcnJpZGVzIHRoZSBsZWF2ZV9waWRmaWxlIHRva2VuIGluIHRoZQogLkkgc25tcGQuY29uZgogZmlsZSwgc2VlCiAuSSBzbm1wZC5jb25mKDUpLgogLlRQCi0uQiAtdiwgLS12ZXJzaW9uCisuQiBcLXYsIFwtXC12ZXJzaW9uCiBQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgYWdlbnQgYW5kIHRoZW4gZXhpdC4KIC5UUAotLkIgLVYKKy5CIFwtVgogU3ltYm9saWNhbGx5IGR1bXAgU05NUCB0cmFuc2FjdGlvbnMuCiAuVFAKLS5CIC14IFxmSUFERFJFU1MKKy5CIFwteCBcZklBRERSRVNTCiBMaXN0ZW5zIGZvciBBZ2VudFggY29ubmVjdGlvbnMgb24gdGhlIHNwZWNpZmllZCBhZGRyZXNzCiByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBBR0VOVFhfU09DS0VULgogVGhlIGFkZHJlc3MgY2FuIGVpdGhlciBiZSBhIFVuaXggZG9tYWluIHNvY2tldCBwYXRoLAogb3IgdGhlIGFkZHJlc3Mgb2YgYSBuZXR3b3JrIGludGVyZmFjZS4gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgdGhlCiBmb3JtYXQgb2YgbGlzdGVuaW5nIGFkZHJlc3NlcyBkZXNjcmliZWQgYmVsb3cuCiAuVFAKLS5CIC1YCisuQiBcLVgKIFJ1biBhcyBhbiBBZ2VudFggc3ViYWdlbnQgcmF0aGVyIHRoYW4gYXMgYW4gU05NUCBtYXN0ZXIgYWdlbnQuCiAuVFAKLS5CSSAtLSAibmFtZSI9InZhbHVlIgotQWxsb3dzIHRvIHNwZWNpZnkgYW55IHRva2VuICgibmFtZSIpIHN1cHBvcnRlZCBpbiB0aGUKKy5CSSBcLVwtICJuYW1lIj0idmFsdWUiCitBbGxvd3Mgb25lIHRvIHNwZWNpZnkgYW55IHRva2VuICgibmFtZSIpIHN1cHBvcnRlZCBpbiB0aGUKIC5JIHNubXBkLmNvbmYKIGZpbGUgYW5kIHNldHMgaXRzIHZhbHVlIHRvICJ2YWx1ZSIuIE92ZXJyaWRlcyB0aGUgY29ycmVzcG9uZGluZyB0b2tlbiBpbiB0aGUKIC5JIHNubXBkLmNvbmYKQEAgLTE5Myw2ICsxOTMsMTIgQEAKIGhvc3RuYW1lWzpwb3J0XQogLkkgb3IKIElQdjYtYWRkcmVzc1s6cG9ydF0KKy5UUCAyOAorLklSICIiICJzc2giCitob3N0bmFtZTpwb3J0CisuVFAgMjgKKy5JUiAiIiAiZHRsc3VkcCIKK2hvc3RuYW1lOnBvcnQKIC5SRQogLlBQCiBOb3RlIHRoYXQgPHRyYW5zcG9ydC1zcGVjaWZpZXI+IHN0cmluZ3MgYXJlIGNhc2UtaW5zZW5zaXRpdmUgc28gdGhhdCwKQEAgLTIxMiwxMCArMjE4LDEwIEBACiAuSVIgImlweDovNDAwMDAiCiBsaXN0ZW4gb24gSVBYIHBvcnQgNDAwMDAgb24gYWxsIElQWCBpbnRlcmZhY2VzLgogLlRQIDI0Ci0uSVIgInVuaXg6L3RtcC9sb2NhbC1hZ2VudCIKLWxpc3RlbiBvbiB0aGUgVW5peCBkb21haW4gc29ja2V0IFxmSS90bXAvbG9jYWwtYWdlbnRcZlIuCisuSVIgInVuaXg6L3RtcC9sb2NhbFwtYWdlbnQiCitsaXN0ZW4gb24gdGhlIFVuaXggZG9tYWluIHNvY2tldCBcZkkvdG1wL2xvY2FsXC1hZ2VudFxmUi4KIC5UUCAyNAotLklSICIvdG1wL2xvY2FsLWFnZW50IgorLklSICIvdG1wL2xvY2FsXC1hZ2VudCIKIGlzIGlkZW50aWNhbCB0byB0aGUgcHJldmlvdXMgc3BlY2lmaWNhdGlvbiwgc2luY2UgdGhlIFVuaXggZG9tYWluIGlzCiBhc3N1bWVkIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIDx0cmFuc3BvcnQtYWRkcmVzcz4gaXMgJy8nLgogLlRQIDI0CkBAIC0yMjUsNiArMjMxLDE2IEBACiAuVFAgMjQKIC5JUiAidWRwNjoxMDE2MSIKIGxpc3RlbiBvbiBwb3J0IDEwMTYxIG9uIGFsbCBJUHY2IGludGVyZmFjZXMuCisuVFAgMjQKKy5JUiAic3NoOjEyNy4wLjAuMToyMiIKK0FsbG93cyBjb25uZWN0aW9ucyBmcm9tIHRoZSBzbm1wIHN1YnN5c3RlbSBvbiB0aGUgc3NoIHNlcnZlciBvbiBwb3J0CisyMi4gIFRoZSBkZXRhaWxzIG9mIHVzaW5nIFNOTVAgb3ZlciBTU0ggYXJlIGRlZmluZWQgYmVsb3cuCisuVFAgMjQKKy5JUiAiZHRsc3VkcDoxMjcuMC4wLjE6OTE2MSIKK0xpc3RlbiBmb3IgY29ubmVjdGlvbnMgb3ZlciBEVExTIG9uIFVEUCBwb3J0IDkxNjEuICBUaGUgc25tcC5jb25mIGZpbGUKK211c3QgaGF2ZSB0aGUKKy5JUiBzZXJ2ZXJDZXJ0LAorY29uZmlndXJhdGlvbiB0b2tlbnMgZGVmaW5lZC4KIC5QUAogTm90ZSB0aGF0IG5vdCBhbGwgdGhlIHRyYW5zcG9ydCBkb21haW5zIGxpc3RlZCBhYm92ZSB3aWxsIGFsd2F5cyBiZQogYXZhaWxhYmxlOyBmb3IgaW5zdGFuY2UsIGhvc3RzIHdpdGggbm8gSVB2NiBzdXBwb3J0IHdpbGwgbm90IGJlIGFibGUKQEAgLTIzMiw2ICsyNDgsNzEgQEAKIHRoZSBlcnJvciAiRXJyb3Igb3BlbmluZyBzcGVjaWZpZWQgZW5kcG9pbnQiLiAgTGlrZXdpc2UsIHNpbmNlIEFBTDUKIFBWQyBzdXBwb3J0IGlzIG9ubHkgY3VycmVudGx5IGF2YWlsYWJsZSBvbiBMaW51eCwgaXQgd2lsbCBmYWlsIHdpdGgKIHRoZSBzYW1lIGVycm9yIG9uIG90aGVyIHBsYXRmb3Jtcy4KKy5TSCBUcmFuc3BvcnQgU3BlY2lmaWMgTm90ZXMKKy5SUyAwCisuVFAgOAorc3NoCitUaGUgU1NIIHRyYW5zcG9ydCwgb24gdGhlIHNlcnZlciBzaWRlLCBpcyBhY3R1YWxseSBqdXN0IGEgdW5peAorbmFtZWQgcGlwZSB0aGF0IGNhbiBiZSBjb25uZWN0ZWQgdG8gdmlhIGEgc3NoIHN1YnN5c3RlbSBjb25maWd1cmVkIGluCit0aGUgbWFpbiBzc2ggc2VydmVyLiAgVGhlIHBpcGUgbG9jYXRpb24gKGNvbmZpZ3VyYWJsZSB3aXRoIHRoZQorc3NodG9zbm1wc29ja2V0IHRva2VuIGluIHNubXAuY29uZikgaXMKKy5JIC92YXIvbmV0XC1zbm1wL3NzaHRvc25tcC4KK1BhY2tldHMgc2hvdWxkIGJlIHN1Ym1pdHRlZCB0byBpdCB2aWEgdGhlIHNzaHRvc25tcCBhcHBsaWNhdGlvbiwgd2hpY2gKK2Fsc28gc2VuZHMgdGhlIHVzZXIgSUQgYXMgd2VsbCB3aGVuIHN0YXJ0aW5nIHRoZSBjb25uZWN0aW9uLiAgVGhlIFRTTQorc2VjdXJpdHkgbW9kZWwgc2hvdWxkIGJlIHVzZWQgd2hlbiBwYWNrZXRzIHNob3VsZCBwcm9jZXNzIGl0LgorLklQCitUaGUKKy5JIHNzaHRvc25tcAorY29tbWFuZCBrbm93cyBob3cgdG8gY29ubmVjdCB0byB0aGlzIHBpcGUgYW5kIHRhbGsgdG8KK2l0LiAgSXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gdGhlCisuSVIgIk9wZW5TU0ggc3NoZCIKK2NvbmZpZ3VyYXRpb24gZmlsZSAod2hpY2ggaXMgbm9ybWFsbHkKKy5JUiAiL2V0Yy9zc2gvc3NoZF9jb25maWciCit1c2luZyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gbGluZToKKy5UUCA4CisuSVAKK1N1YnN5c3RlbSBzbm1wIC91c3IvbG9jYWwvYmluL3NzaHRvc25tcAorLklQCitUaGUKKy5JIHNzaHRvc25tcAorY29tbWFuZCB3aWxsIG5lZWQgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIAorLkkgL3Zhci9uZXRcLXNubXAvc3NodG9zbm1wCitwaXBlLiAgQWx0aG91Z2ggaXQgc2hvdWxkIGJlIGZhaXJseSBzYWZlIHRvIGdyYW50IGFjY2VzcyB0byB0aGUKK2F2ZXJhZ2UgdXNlciBzaW5jZSBpdCBzdGlsbCByZXF1aXJlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBBQ00gc2V0dGluZ3MKK2JlZm9yZSB0aGUgdXNlciBjYW4gcGVyZm9ybSBvcGVyYXRpb25zLCBwYXJhbm9pZCBhZG1pbmlzdHJhdG9ycyBtYXkKK3dhbnQgdG8gbWFrZSB0aGUgL3Zhci9uZXRcLXNubXAgZGlyZWN0b3J5IGFjY2Vzc2libGUgb25seSBieSB1c2VycyBpbiBhCitwYXJ0aWN1bGFyIGdyb3VwLiAgVXNlIHRoZQorLkkgc3NodG9zbm1wc29ja2V0cGVybXMKK3NubXAuY29uZiBjb25maWd1cmUgb3B0aW9uIHRvIHNldCB0aGUgcGVybWlzc2lvbnMsIG93bmVyIGFuZCBncm91cCBvZgordGhlIGNyZWF0ZWQgc29ja2V0LgorLklQCitBY2Nlc3MgY29udHJvbCBjYW4gYmUgZ3JhbnRlZCB0byB0aGUgdXNlciAiZm9vIiB1c2luZyB0aGUgZm9sbG93aW5nCitzdHlsZSBvZiBzaW1wbGUgc25tcGQuY29uZiBzZXR0aW5nczoKKy5UUCA4CisuSVAKK3JvdXNlciBcLXMgdHNtIGZvbyBhdXRocHJpdgorLklQCitOb3RlIHRoYXQgImF1dGhwcml2IiBpcyBhY2NlcHRhYmxlIGFzc3VtaW5nIGFzIFNTSCBwcm90ZWN0cyBldmVyeXRoaW5nCit0aGF0IHdheSAoYXNzdW1pbmcgeW91IGhhdmUgYSBub24taW5zYW5lIHNldHVwKS4KK3NubXBkIGhhcyBubyBub3Rpb24gb2YgaG93IFNTSCBoYXMgYWN0dWFsbHkgcHJvdGVjdGVkIGEgcGFja2V0IGFuZAordGh1cyB0aGUgc25tcCBhZ2VudCBhc3N1bWVzIGFsbCBwYWNrZXRzIHBhc3NlZCB0aHJvdWdoIHRoZSBTU0gKK3RyYW5zcG9ydCBoYXZlIGJlZW4gcHJvdGVjdGVkIGF0IHRoZSBhdXRocHJpdiBsZXZlbC4KKy5UUCA4CitkdGxzdWRwCitUaGUgRFRMUyBwcm90b2NvbCwgd2hpY2ggaXMgYmFzZWQgb2ZmIG9mIFRMUywgcmVxdWlyZXMgYm90aCBjbGllbnQgYW5kCitzZXJ2ZXIgY2VydGlmaWNhdGVzIHRvIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiBhbmQgYXV0aGVudGljYXRlIGJvdGgKK3NpZGVzLiAgSW4gb3JkZXIgdG8gZG8gdGhpcywgdGhlIGNsaWVudCB3aWxsIG5lZWQgdG8gY29uZmlndXJlIHRoZQorc25tcC5jb25mIGZpbGUKK3dpdGggdGhlCisuSVIgY2xpZW50Q2VydAorY29uZmlndXJhdGlvbiB0b2tlbnMuICBUaGUgc2VydmVyIHdpbGwgbmVlZCB0byBjb25maWd1cmUgdGhlIHNubXAuY29uZgorZmlsZSB3aXRoIHRoZQorLklSIHNlcnZlckNlcnQKK2NvbmZpZ3VyYXRpb24gdG9rZW5zIGRlZmluZWQuCisuSVAKK0FjY2VzcyBjb250cm9sIHNldHVwIGlzIHNpbWlsYXIgdG8gdGhlIHNzaCB0cmFuc3BvcnQgYXMgdGhlIFRTTQorc2VjdXJpdHkgbW9kZWwgc2hvdWxkIGJlIHVzZWQgdG8gcHJvdGVjdCB0aGUgcGFja2V0LgorLlJFCiAuU0ggQ09ORklHVVJBVElPTiBGSUxFUwogLlBQCiAuQiBzbm1wZApkaWZmIC0tZ2l0IGEvbWFuL3NubXBkLmNvbmYuNS5kZWYgYi9tYW4vc25tcGQuY29uZi41LmRlZgppbmRleCAxZTdjYjJjLi4yYThhM2QzIDEwMDY0NAotLS0gYS9tYW4vc25tcGQuY29uZi41LmRlZgorKysgYi9tYW4vc25tcGQuY29uZi41LmRlZgpAQCAtMSw0ICsxLDQgQEAKLS5USCBTTk1QRC5DT05GIDUgIjAxIEp1biAyMDA5IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBELkNPTkYgNSAiMzAgSnVuIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcGQuY29uZiAtIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIE5ldC1TTk1QIFNOTVAgYWdlbnQKIC5TSCBERVNDUklQVElPTgpAQCAtMTgsNyArMTgsNyBAQAogbWFudWFsIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sIG9yIHRyeSBydW5uaW5nIHRoZQogY29tbWFuZDoKIC5SUwotLklQICJzbm1wY29uZiAtZyBiYXNpY19zZXR1cCIKKy5JUCAic25tcGNvbmYgXC1nIGJhc2ljX3NldHVwIgogLlJFCiAuUFAKIFRoZXJlIGFyZSBhIGxhcmdlIG51bWJlciBvZiBkaXJlY3RpdmVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCwKQEAgLTQwLDcgKzQwLDcgQEAKIEEgZnVsbCBsaXN0IG9mIHJlY29nbmlzZWQgZGlyZWN0aXZlcyBjYW4gYmUgb2J0YWluZWQgYnkgcnVubmluZwogdGhlIGNvbW1hbmQ6CiAuUlMKLS5JUCAic25tcGQgLUgiCisuSVAgInNubXBkIFwtSCIKIC5SRQogLlNIIEFHRU5UIEJFSEFWSU9VUgogQWx0aG91Z2ggbW9zdCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBNSUIKQEAgLTY5LDExICs2OSwxMSBAQAogc3RhcnRpbmcgd2l0aCAnIycgKCNVSUQpLgogLklQICJsZWF2ZV9waWRmaWxlIHllcyIKIGluc3RydWN0cyB0aGUgYWdlbnQgdG8gbm90IHJlbW92ZSBpdHMgcGlkIGZpbGUgb24gc2h1dGRvd24uIEVxdWl2YWxlbnQgdG8KLXNwZWNpZnlpbmcgIi1VIiBvbiB0aGUgY29tbWFuZCBsaW5lLgorc3BlY2lmeWluZyAiXC1VIiBvbiB0aGUgY29tbWFuZCBsaW5lLgogLklQICJtYXhHZXRidWxrUmVwZWF0cyBOVU0iCiBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNwb25zZXMgYWxsb3dlZCBmb3IgYSBzaW5nbGUgdmFyaWFibGUgaW4KLWEgZ2V0YnVsayByZXF1ZXN0LiAgU2V0IHRvIDAgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IGFuZCBzZXQgaXQgdG8gLTEgdG8KLWVuYWJsZSB1bmxpbWl0ZWQuICBCZWNhdXNlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYWhlYWQgb2YgdGltZSwgc2l0dGluZworYSBnZXRidWxrIHJlcXVlc3QuICBTZXQgdG8gMCB0byBlbmFibGUgdGhlIGRlZmF1bHQgYW5kIHNldCBpdCB0byBcLTEgdG8KK2VuYWJsZSB1bmxpbWl0ZWQuICBCZWNhdXNlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYWhlYWQgb2YgdGltZSwgc2V0dGluZwogdGhpcyB0byB1bmxpbWl0ZWQgaXMgbm90IGNvbnNpZGVyZWQgc2FmZSBpZiB5b3VyIHVzZXIgcG9wdWxhdGlvbiBjYW4KIG5vdCBiZSB0cnVzdGVkLiAgQSByZXBlYXQgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzIHdpbGwgYmUgdHJ1bmNhdGVkCiB0byB0aGlzIHZhbHVlLgpAQCAtODIsOCArODIsOCBAQAogLklQICJtYXhHZXRidWxrUmVzcG9uc2VzIE5VTSIKIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc3BvbnNlcyBhbGxvd2VkIGZvciBhIGdldGJ1bGsgcmVxdWVzdC4KIFRoaXMgaXMgc2V0IGJ5IGRlZmF1bHQgdG8gMTAwLiAgU2V0IHRvIDAgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IGFuZCBzZXQKLWl0IHRvIC0xIHRvIGVuYWJsZSB1bmxpbWl0ZWQuICBCZWNhdXNlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYWhlYWQgb2YKLXRpbWUsIHNpdHRpbmcgdGhpcyB0byB1bmxpbWl0ZWQgaXMgbm90IGNvbnNpZGVyZWQgc2FmZSBpZiB5b3VyIHVzZXIKK2l0IHRvIFwtMSB0byBlbmFibGUgdW5saW1pdGVkLiAgQmVjYXVzZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFoZWFkIG9mCit0aW1lLCBzZXR0aW5nIHRoaXMgdG8gdW5saW1pdGVkIGlzIG5vdCBjb25zaWRlcmVkIHNhZmUgaWYgeW91ciB1c2VyCiBwb3B1bGF0aW9uIGNhbiBub3QgYmUgdHJ1c3RlZC4KIC5JUAogSW4gZ2VuZXJhbCwgdGhlIHRvdGFsIG51bWJlciBvZiByZXNwb25zZXMgd2lsbCBub3QgYmUgYWxsb3dlZCB0bwpAQCAtOTIsMTMgKzkyLDQyIEBACiB0aGUgY2FsY3VsYXRlZCBudW1iZXIgb2YgcmVwZWF0cyBhbGxvdyB0byBmaXQgYmVsb3cgdGhpcyBudW1iZXIuCiAuSVAKIEFsc28gbm90IHRoYXQgcHJvY2Vzc2luZyBvZiBtYXhHZXRidWxrUmVwZWF0cyBpcyBoYW5kbGVkIGZpcnN0LgotLlNTIFNOTVB2MyBDb25maWd1cmF0aW9uCi1TTk1QdjMgcmVxdWlyZXMgYW4gU05NUCBhZ2VudCB0byBkZWZpbmUgYSB1bmlxdWUgImVuZ2luZSBJRCIKLWluIG9yZGVyIHRvIHJlc3BvbmQgdG8gU05NUHYzIHJlcXVlc3RzLgotVGhpcyBJRCB3aWxsIG5vcm1hbGx5IGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSwgdXNpbmcgdHdvIHJlYXNvbmFibHkKLW5vbi1wcmVkaWN0YWJsZSB2YWx1ZXMgLSBhIChwc2V1ZG8tKXJhbmRvbSBudW1iZXIgYW5kIHRoZSBjdXJyZW50Ci11cHRpbWUgaW4gc2Vjb25kcy4gVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2guIEhvd2V2ZXIgdGhlCi1jYXBhY2l0eSBleGlzdHMgdG8gZGVmaW5lIHRoZSBlbmdpbmVJRCBpbiBvdGhlciB3YXlzOgorLlNTIFNOTVB2MyBDb25maWd1cmF0aW9uIC0gUmVhbCBTZWN1cml0eQorU05NUHYzIGlzIGFkZGVkIGZsZXhpYmxlIHNlY3VyaXR5IG1vZGVscyB0byB0aGUgU05NUCBwYWNrZXQgc3RydWN0dXJlCitzbyB0aGF0IG11bHRpcGxlIHNlY3VyaXR5IHNvbHV0aW9ucyBjb3VsZCBiZSB1c2VkLiAgU05NUHYzIHdhcworb3JpZ2luYWwgZGVmaW5lZCB3aXRoIGEgIlVzZXItYmFzZWQgU2VjdXJpdHkgTW9kZWwiIChVU00pIFtSRkMzNDE0XQordGhhdCByZXF1aXJlZCBtYWludGFpbmluZyBhIFNOTVAtc3BlY2lmaWMgdXNlciBkYXRhYmFzZS4gIFRoaXMgd2FzCitsYXRlciBkZXRlcm1pbmVkIHRvIGJlIHRyb3VibGVzb21lIHRvIG1haW50YWluIGFuZCBoYWQgc29tZSBtaW5vcgorc2VjdXJpdHkgaXNzdWVzLiAgVGhlIElFVEYgaGFzIHNpbmNlIGFkZGVkIGFkZGl0aW9uYWwgc2VjdXJpdHkgbW9kZWxzCit0byB0dW5uZWwgU05NUCBvdmVyIFNTSCBbUkZDNTU5Ml0gYW5kIERUTFMvVExTIFtSRkMtdG8tYmVdLiAgTmV0LVNOTVAKK2NvbnRhaW5zIHJvYnVzdCBzdXBwb3J0IGZvciBTTk1QdjMvVVNNLCBTTk1QdjMvVExTLCBhbmQgU05NUHYzL0RUTFMuCitJdCBjb250YWlucyBwYXJ0aWFsIHN1cHBvcnQgZm9yIFNOTVB2My9TU0ggYXMgd2VsbCBidXQgaGFzIG5vdCBiZWVuIGFzCitleHRlbnNpdmVseSB0ZXN0ZWQuICBJdCBhbHNvIGNvbnRhaW5zIGNvZGUgZm9yIHN1cHBvcnQgZm9yIGFuCitleHBlcmltZW50YWwgS2VyYmVyb3MgYmFzZWQgU05NUHYzIHRoYXQgbmV2ZXIgZ290IHN0YW5kYXJkaXplZC4KKy5QUAorSG9wZWZ1bGx5IG1vcmUgU05NUCBzb2Z0d2FyZSBhbmQgZGV2aWNlcyB3aWxsIGV2ZW50dWFsbHkgc3VwcG9ydCBTTk1QCitvdmVyIChEKVRMUyBvciBTU0gsIGJ1dCBpdCBpcyBsaWtlbHkgdGhhdCBkZXZpY2VzIHdpdGggb3JpZ2luYWwKK3N1cHBvcnQgZm9yIFNOTVAgd2lsbCBvbmx5IGNvbnRhaW4gc3VwcG9ydCBmb3IgVVNNIHVzZXJzLiAgSWYgeW91cgorbmV0d29yayBtYW5hZ2VyIHN1cHBvcnRzIFNOTVAgb3ZlciAoRClUTFMgb3IgU05NUCBvdmVyIFNTSCB3ZSBzdWdnZXN0Cit5b3UgdXNlIG9uZSBvZiB0aGVzZSBtZWNoYW5pc21zIGluc3RlYWQgb2YgdXNpbmcgVVNNLCBidXQgYXMgYWx3YXlzCit3aXRoIE5ldC1TTk1QIHdlIGdpdmUgeW91IHRoZSBvcHRpb25zIHRvIHBpY2sgZnJvbSBzbyB5b3UgY2FuIG1ha2UgdGhlCitjaG9pY2UgdGhhdCBpcyBiZXN0IGZvciB5b3UuCisuU1MgU05NUHYzIGdlbmVyaWMgcGFyYW1ldGVycworVGhlc2UgcGFyYW1ldGVycyBhcmUgZ2VuZXJpYyB0byBhbGwgdGhlIGZvcm1zIG9mIFNOTVB2My4gIFRoZSBTTk1QdjMKK3Byb3RvY29sIGRlZmluZXMgImVuZ2luZUlEcyIgdGhhdCB1bmlxdWVseSBpZGVudGlmeSBhbiBhZ2VudC4gIFRoZQorc3RyaW5nIG11c3QgYmUgY29uc2lzdGVudCB0aHJvdWdoIHRpbWUgYW5kIHNob3VsZCBub3QgY2hhbmdlIG9yCitjb25mbGljdCB3aXRoIGFub3RoZXIgYWdlbnQncyBlbmdpbmVJRC4gIEV2ZXIuICBJbnRlcm5hbGx5LCBOZXQtU05NUAorYnkgZGVmYXVsdCBjcmVhdGVzIGEgdW5pcXVlIGVuZ2luZUlEIHRoYXQgaXMgYmFzZWQgb2ZmIG9mIHRoZSBjdXJyZW50IHN5c3RlbQordGltZSBhbmQgYSByYW5kb20gbnVtYmVyLiAgVGhpcyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbW9zdCB1c2VycwordW5sZXNzIHlvdSdyZSBlbWJlZGRpbmcgb3VyIGFnZW50IGluIGEgZGV2aWNlIHdoZXJlIHRoZXNlIG51bWJlcnMKK3dvbid0IHZhcnkgYmV0d2VlbiBib3hlcyBvbiB0aGUgZGV2aWNlcyBpbml0aWFsIGJvb3QuCisuSVAKK0VuZ2luZUlEcyBhcmUgdXNlZCBib3RoIGFzIGEgImNvbnRleHQiIGZvciBzZWxlY3RpbmcgaW5mb3JtYXRpb24gZnJvbQordGhlIGRldmljZSBhbmQgU05NUHYzIHdpdGggVVNNIHVzZXMgaXQgdG8gY3JlYXRlIHVuaXF1ZSBlbnRyaWVzIGZvcgordXNlcnMgaW4gaXRzIHVzZXIgdGFibGUuCisuSVAKK1RoZSBOZXQtU05NUCBhZ2VudCBvZmZlcnMgdGhlIGZvbGxvd2luZyBtZWNoYW5pc21zIGZvciBzZXR0aW5nIHRoZQorZW5naW5lSUQsIGJ1dCBhZ2FpbiB5b3Ugc2hvdWxkIG9ubHkgdXNlIHRoZW0gaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmc6CiAuSVAgImVuZ2luZUlEIFNUUklORyIKIHNwZWNpZmllcyB0aGF0IHRoZSBlbmdpbmVJRCBzaG91bGQgYmUgYnVpbHQgZnJvbSB0aGUgZ2l2ZW4gdGV4dCBTVFJJTkcuCiAuSVAgImVuZ2luZUlEVHlwZSAxfDJ8MyIKQEAgLTExNCwxNCArMTQzLDEyNiBAQAogLlwiCiAuXCIgV2hhdCBpZiB0aGlzIGRvZXNuJ3QgZXhpc3QgPwogLlwiCi0uU0ggQUNDRVNTIENPTlRST0wKLS5CIHNubXBkCi1zdXBwb3J0cyB0aGUgVmlldy1CYXNlZCBBY2Nlc3MgQ29udHJvbCBNb2RlbCAoVkFDTSkgYXMgZGVmaW5lZCBpbiBSRkMKLTI1NzUsIHRvIGNvbnRyb2wgd2hvIGNhbiByZXRyaWV2ZSBvciB1cGRhdGUgaW5mb3JtYXRpb24uICBUbyB0aGlzIGVuZCwKLWl0IHJlY29nbml6ZXMgdmFyaW91cyBkaXJlY3RpdmVzIHJlbGF0aW5nIHRvIGFjY2VzcyBjb250cm9sLgotVGhlc2UgZmFsbCBpbnRvIGZvdXIgYmFzaWMgZ3JvdXBzLgotLlNTIFNOTVB2MyBVc2VycwotLklQICJjcmVhdGVVc2VyIFstZSBFTkdJTkVJRF0gdXNlcm5hbWUgKE1ENXxTSEEpIGF1dGhwYXNzcGhyYXNlIFtERVN8QUVTXSBbcHJpdnBhc3NwaHJhc2VdIgorLlNTIFNOTVB2MyBvdmVyIFRMUworU05NUHYzIG1heSBiZSB0dW5uZWxlZCBvdmVyIFRMUyBhbmQgRFRMUy4gIFRMUyBydW5zIG92ZXIgVENQIGFuZCBEVExTCitpcyB0aGUgVURQIGVxdWl2YWxlbnQuICBXZXMgSGFyZGFrZXIgKHRoZSBmb3VuZGVyIG9mIE5ldC1TTk1QKQorcGVyZm9ybWVkIGEgc3R1ZHkgYW5kIHByZXNlbnRlZCBpdCBhdCBhbiBJRVRGIG1lZXRpbmcgdGhhdCBzaG93ZWQgdGhhdAorVENQIGJhc2VkIHByb3RvY29scyBhcmUgc3VmZmljaWVudCBmb3Igc3RhYmxlIG5ldHdvcmtzIGJ1dCBxdWlja2x5CitiZWNvbWVzIGEgcHJvYmxlbSBpbiB1bnN0YWJsZSBuZXR3b3JrcyB3aXRoIGV2ZW4gbW9kZXJhdGUgbGV2ZWxzIG9mCitwYWNrZXQgbG9zcyAofiAyMC0zMCUpLiAgSWYgeW91IGFyZSBnb2luZyB0byB1c2UgVExTIG9yIERUTFMsIHlvdQorc2hvdWxkIHVzZSB0aGUgb25lIGFwcHJvcHJpYXRlIGZvciB5b3VyIG5ldHdvcmtpbmcgZW52aXJvbm1lbnQuICBZb3UKK3Nob3VsZCBwb3RlbnRpYWxseSB0dXJuIHRoZW0gYm90aCBvbiBzbyB5b3VyIG1hbmFnZW1lbnQgc3lzdGVtIGNhbgorYWNjZXNzIGVpdGhlciB0aGUgVURQIG9yIHRoZSBUQ1AgcG9ydCBhcyBuZWVkZWQuCisuUFAKK01hbnkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdG9rZW5zIGRlc2NyaWJlZCBiZWxvdyBhcmUgcHJlZml4ZWQgd2l0aAorYSAnW3NubXBdJyB0YWcuICBJZiB5b3UgcGxhY2UgdGhlc2UgdG9rZW5zIGluIHlvdXIgc25tcGQuY29uZiBmaWxlLAordGhpcyB0YWtlIGlzIHJlcXVpcmVkLiAgU2VlIHRoZSBzbm1wX2NvbmZpZyg1KSBtYW51YWwgcGFnZSBmb3IgdGhlCittZWFuaW5nIG9mIHRoaXMgY29udGV4dCBzd2l0Y2guCisuSVAgIltzbm1wXSBsb2NhbENlcnQgPHNwZWNpZmllcj4iCitUaGlzIHRva2VuIGRlZmluZXMgdGhlIGRlZmF1bHQgWC41MDkgcHVibGljIGtleSB0byB1c2UgYXMgdGhlIHNlcnZlcidzCitpZGVudGl0eS4gIEl0IHNob3VsZCBlaXRoZXIgYmUgYSBmaW5nZXJwcmludCBvciBhIGZpbGVuYW1lLiAgVG8gY3JlYXRlCithIHB1YmxpYyBrZXkgZm9yIHVzZSwgcGxlYXNlIHJ1biB0aGUgIm5ldFwtc25tcFwtY2VydCIgdXRpbGl0eSB3aGljaAord2lsbCBoZWxwIHlvdSBjcmVhdGUgdGhlIHJlcXVpcmVkIGNlcnRpZmljYXRlLgorLklQCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBpcyB0aGUgY2VydGlmaWNhdGUgaW4gdGhlICJzbm1wZCIgbmFtZWQKK2NlcnRpZmljYXRlIGZpbGUuCisuSVAgIltzbm1wXSB0bHNBbGdvcml0aG1zIDxhbGdvcml0aG1zPiIKK1RoaXMgc3RyaW5nIHdpbGwgc2VsZWN0IHRoZSBhbGdvcml0aG1zIHRvIHVzZSB3aGVuIG5lZ290aWF0aW5nCitzZWN1cml0eSBkdXJpbmcgKEQpVExTIHNlc3Npb24gZXN0YWJsaXNobWVudC4gIFNlZSB0aGUgb3BlbnNzbCBtYW51YWwKK3BhZ2UgY2lwaGVycygxKSBmb3IgZGV0YWlscyBvbiB0aGUgZm9ybWF0LiAgRXhhbXBsZXMgc3RyaW5ncyBpbmNsdWRlOgorLlJTCisubmYKKworREVGQVVMVAorQUxMCitISUdICitISUdIOiFBRVMxMjhcLVNIQQorLmZpCisuUkUKKy5JUAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgd2hhdGV2ZXIgb3BlbnNzbCBpdHNlbGYgd2FzIGNvbmZpZ3VyZWQgd2l0aC4KKy5JUCAiW3NubXBdIHg1MDlDUkxGaWxlIgorSWYgeW91IGFyZSB1c2luZyBhIENlcnRpZmljYXRlIEF1dGhvcml0eSAoQ0EpIHRoYXQgcHVibGlzaGVzIGEKK0NlcnRpZmljYXRlIFJldm9jYXRpb24gTGlzdCAoQ1JMKSB0aGVuIHRoaXMgdG9rZW4gY2FuIGJlIHVzZWQgdG8KK3NwZWNpZnkgdGhlIGxvY2F0aW9uIGluIHRoZSBmaWxlc3lzdGVtIG9mIGEgY29weSBvZiB0aGUgQ1JMIGZpbGUuCitOb3RlIHRoYXQgTmV0LVNOTVAgd2lsbCBub3QgcHVsbCBhIENSTCBvdmVyIGh0dHAgYW5kIHRoaXMgbXVzdCBiZSBhCitmaWxlLCBub3QgYSBVUkwuICBBZGRpdGlvbmFsbHksIE9wZW5TU0wgZG9lcyBub3QgcmVsb2FkIGEgQ1JMIGZpbGUKK3doZW4gaXQgaGFzIGNoYW5nZWQgc28gbW9kaWZpY2F0aW9ucyBvciB1cGRhdGVzIHRvIHRoZSBmaWxlIHdpbGwgb25seQorYmUgbm90aWNlZCB1cG9uIGEgcmVzdGFydCBvZiB0aGUgc25tcGQgYWdlbnQuCisKKy5JUCAiY2VydFNlY05hbWUgUFJJT1JJVFkgRklOR0VSUFJJTlQgT1BUSU9OUyIKK09QVElPTlMgY2FuIGJlIG9uZSBvZiA8XC1cLXNuIFNFQ05BTUUgfCBcLVwtcmZjODIyIHwgXC1cLWRucyB8IFwtXC1pcCB8IFwtXC1jbiB8IFwtXC1hbnk+LgorLklQCitUaGUgY2VydFNlY05hbWUgdG9rZW4gd2lsbCBzcGVjaWZ5IGhvdyB0byBtYXAgYSBjZXJ0aWZpY2F0ZSBmaWVsZCBmcm9tCit0aGUgY2xpZW50J3MgWC41MDkgY2VydGlmaWNhdGUgdG8gYSBTTk1QdjMgdXNlcm5hbWUuICBVc2UgdGhlIFwtXC1zbgorU0VDTkFNRSBmbGFnIHRvIGRpcmVjdGx5IHNwZWNpZnkgYSBzZWN1cml0eU5hbWUgZm9yIGEgZ2l2ZW4KK2NlcnRpZmljYXRlLiAgVGhlIG90aGVyIGZsYWdzIGV4dHJhY3QgYSBwYXJ0aWN1bGFyIGNvbXBvbmVudCBvZiB0aGUKK2NlcnRpZmljYXRlIGZvciB1c2UgYXMgYSBzbm1wdjMgc2VjdXJpdHlOYW1lLiAgVGhlc2UgZmllbGRzIGFyZSBvbmUKK29mOiBBIFN1YmplY3RBbHROYW1lIGNvbnRhaW5pbmcgYW4gcmZjODIyIHZhbHVlIChlZyBoYXJkYWtlckBuZXRcLXNubXAub3JnKSwKK0EgU3ViamVjdEFsdE5hbWUgY29udGFpbmluZyBhIGRucyBuYW1lIHZhbHVlIChlZyBmb28ubmV0XC1zbm1wLm9yZyksCithbiBJUCBhZGRyZXNzIChlZyAxOTIuMC4yLjEpIG9yIGEgY29tbW9uIG5hbWUgIldlcyBIYXJkYWtlciIuICBUaGUKK1wtXC1hbnkgZmxhZyBzcGVjaWZpZXMgdGhhdCBhbnkgb2YgdGhlIHN1YmplY0FsdE5hbWUgZmllbGRzIG1heSBiZQordXNlZC4gIE1ha2Ugc3VyZSBvbmNlIGEgc2VjdXJpdHlOYW1lIGhhcyBiZWVuIHNlbGVjdGVkIHRoYXQgaXQgaXMKK2dpdmVuIGF1dGhvcml6YXRpb24gdmlhIHRoZSBWQUNNIGNvbnRyb2xzIGRpc2N1c3NlZCBsYXRlciBpbiB0aGlzCittYW51YWwgcGFnZS4KKy5JUAorU2VlIHRoZSBodHRwOi8vd3d3Lm5ldFwtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVXNpbmdfRFRMUyB3ZWIgcGFnZSBmb3IKK21vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIGZvciBzZXR0aW5nIHVwIChEKVRMUy4KKy5JUCAidHJ1c3RDZXJ0IDxzcGVjaWZpZXI+IgorRm9yIFg1MDkgdG8gcHJvcGVybHkgdmVyaWZ5IGEgY2VydGlmaWNhdGUsIGl0IHNob3VsZCBiZSB2ZXJpZmlhYmxlIHVwCit1bnRpbCBhIHRydXN0IGFuY2hvciBmb3IgaXQuICBUaGlzIHRydXN0IGFuY2hvciBpcyB0eXBpY2FsbHkgYSBDQQorY2VydGlmaWNhdGUgYnV0IGl0IGNvdWxkIGFsc28gYmUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4gIFRoZQorInRydXN0Q2VydCIgdG9rZW4gc2hvdWxkIGJlIHVzZWQgdG8gbG9hZCBzcGVjaWZpYyB0cnVzdCBhbmNob3JzIGludG8gdGhlCit2ZXJpZmljYXRpb24gZW5naW5lLgorLlBQCitTTk1QIG92ZXIgKEQpVExTIHJlcXVpcmVzIHRoZSB1c2Ugb2YgdGhlIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbAorKFRTTSksIHNvIHJlYWQgdGhlIHNlY3Rpb24gb24gdGhlIHVzYWdlIG9mIHRoZSBUcmFuc3BvcnQgU2VjdXJpdHkKK01vZGVsIGFzIHdlbGwuICBNYWtlIHN1cmUgd2hlbiB5b3UgY29uZmlndXJlIHRoZSBWQUNNIHRvIGFjY2VwdAorY29ubmVjdGlvbnMgZnJvbSAoRClUTFMgdGhhdCB5b3UgdXNlIHRoZSAidHNtIiBzZWN1cml0eSBtb2RlbC4gIEUuRy46CisuZmkKKworcnd1c2VyIFwtcyB0c20gaGFyZGFrZXJAbmV0XC1zbm1wLm9yZworLmZpCisuU1MgU05NUHYzIG92ZXIgU1NIIFN1cHBvcnQKK1RvIHVzZSBTU0gsIHlvdSdsbCBuZWVkIHRvIGNvbmZpZ3VyZSBzc2hkIHRvIGludm9rZSB0aGUgc3NodG9zbm1wCitwcm9ncmFtIGFzIHdlbGwgYXMgY29uZmlndXJlIHRoZSBhY2Nlc3MgY29udHJvbCBzZXR0aW5ncyB0byBhbGxvdworYWNjZXNzIHRocm91Z2ggdGhlIHRzbSBzZWN1cml0eSBtb2RlbCB1c2luZyB0aGUgdXNlciBuYW1lIHByb3ZpZGVkIHRvCitzbm1wZCBieSB0aGUgc3NoIHRyYW5zcG9ydC4KKy5TUyBTTk1QdjMgd2l0aCB0aGUgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsIChUU00pCitUaGUgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsIFtSRkM1NTkxXSBkZWZpbmVzIGEgU05NUHYzIHNlY3VyaXR5CitzeXN0ZW0gZm9yIHVzZSB3aXRoICJ0dW5uZWxlZCIgc2VjdXJpdHkgcHJvdG9jb2xzIGxpa2UgVExTLCBEVExTIGFuZAorU1NILiAgSXQgaXMgYSB2ZXJ5IHNpbXBsZSBzZWN1cml0eSBtb2RlbCB0aGF0IHNpbXBseSBsZXRzIHByb3Blcmx5Citwcm90ZWN0ZWQgcGFja2V0cyB0byBwYXNzIHRocm91Z2ggaW50byB0aGUgc25tcCBhcHBsaWNhdGlvbi4gIFRoZQordHJhbnNwb3J0IGlzIHJlcXVpcmVkIHRvIHBhc3MgYSBzZWN1cml0eU5hbWUgdG8gdXNlIHRvIHRoZSBUU00gYW5kIHRoZQorVFNNIG1heSBvcHRpb25hbGx5IHByZWZpeCB0aGlzIHdpdGggYSB0cmFuc3BvcnQgc3RyaW5nIChzZWUgYmVsb3cpLgorLklQICJ0c21Vc2VUcmFuc3BvcnRQcmVmaXggKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCitJZiBzZXQgdG8gdHJ1ZSwgdGhlIFRTTSBtb2R1bGUgd2lsbCB0YWtlIGV2ZXJ5IHNlY3VyaXR5TmFtZSBwYXNzZWQgdG8KK2l0IGZyb20gdGhlIHRyYW5zcG9ydHMgdW5kZXJuZWF0aCBhbmQgcHJlZml4IGl0IHdpdGggYSBzdHJpbmcgdGhhdAorc3BlY2lmaWNhbGx5IGlkZW50aXRpZXMgdGhlIHRyYW5zcG9ydCBpdCBjYW1lIGZyb20uICBUaGlzIGlzIHVzZWZ1bCB0bworYXZvaWQgc2VjdXJpdHlOYW1lIGNsYXNoZXMgd2l0aCB0cmFuc3BvcnRzIHRoYXQgZ2VuZXJhdGUgaWRlbnRpY2FsCitzZWN1cml0eSBuYW1lcy4gIEZvciBleGFtcGxlLCBpZiB0aGUgc3NoIHNlY3VyaXR5IHRyYW5zcG9ydCBkZWxpdmVyZWQKK3RoZSBzZWN1cml0eSBuYW1lIG9mICJoYXJkYWtlciIgZm9yIGEgU1NIIGNvbm5lY3Rpb24gYW5kIHRoZSBUTFMKK3NlY3VyaXR5IHRyYW5zcG9ydCBhbHNvIGRlbGl2ZXJlZCB0aGUgc2VjdXJpdHkgbmFtZSBvZiAiaGFyZGFrZXIiIGZvcgorYSBUTFMgY29ubmVjdGlvbiB0aGVuIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gc2VwYXJhdGUgb3V0IHRoZXNlIHR3bwordXNlcnMgdG8gcHJvdmlkZSBzZXBhcmF0ZSBhY2Nlc3MgY29udHJvbCByaWdodHMuICBXaXRoIHRoZQordHNtVXNlVHJhbnNwb3J0UHJlZml4IHNldCB0byB0cnVlLCBob3dldmVyLCB0aGUgc2VjdXJpdHlOYW1lcyB3b3VsZCBiZQorcHJlZml4ZWQgYXBwcm9wcmlhdGVseSB3aXRoIG9uZSBvZjogInRsczoiLCAiZHRsczoiIG9yICJzc2g6Ii4KKy5TUyBTTk1QdjMgd2l0aCB0aGUgVXNlci1iYXNlZCBTZWN1cml0eSBNb2RlbCAoVVNNKQorU05NUHYzIHdhcyBvcmlnaW5hbGx5IGRlZmluZWQgdXNpbmcgdGhlIFVzZXItQmFzZWQgU2VjdXJpdHkgTW9kZWwKKyhVU00pLCB3aGljaCBjb250YWlucyBhIHByaXZhdGUgbGlzdCBvZiB1c2VycyBhbmQga2V5cyBzcGVjaWZpYyB0byB0aGUKK1NOTVB2MyBwcm90b2NvbC4gIFRoZSBvcGVyYXRpb25hbCBjb21tdW5pdHksIGhvd2V2ZXIsIGRlY2xhcmVkIGl0IGEKK3BhaW4gdG8gbWFuaXB1bGF0ZSB5ZXQgYW5vdGhlciBkYXRhYmFzZSBhbmQgd291bGQgcHJlZmVyIHRvIHVzZQorZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuICBUbyB0aGF0IGVuZCB0aGUgSUVURiBjcmVhdGVkIHRoZSBJU01TCit3b3JraW5nIGdyb3VwIHRvIGJhdHRsZSB0aGF0IHByb2JsZW0sIGFuZCB0aGUgSVNNUyB3b3JraW5nIGdyb3VwCitkZWNpZGVkIHRvIHR1bm5lbCBTTk1QIG92ZXIgU1NIIGFuZCBEVExTIHRvIG1ha2UgdXNlIGV4aXN0aW5nIHVzZXIgYW5kCithdXRoZW50aWNhdGlvbiBpbmZyYXN0cnVjdHVyZXMuCisuU1MgU05NUHYzIFVTTSBVc2VycworVG8gdXNlIHRoZSBVU00gYmFzZWQgU05NUHYzLXNwZWNpZmljIHVzZXJzLCB5b3UnbGwgbmVlZCB0byBjcmVhdGUKK3RoZW0uICBJdCBpcyByZWNvbW1lbmRlZCB5b3UKKy5CICJ1c2UgdGhlIG5ldFwtc25tcFwtY29uZmlnIGNvbW1hbmQiCit0byBkbyB0aGlzLCBidXQgeW91IGNhbiBhbHNvIGRvIGl0IGJ5IGRpcmVjdGx5IHNwZWNpZnlpbmcgY3JlYXRlVXNlcgorZGlyZWN0aXZlcyB5b3Vyc2VsZiBpbnN0ZWFkOgorLklQICJjcmVhdGVVc2VyIFtcLWUgRU5HSU5FSURdIHVzZXJuYW1lIChNRDV8U0hBKSBhdXRocGFzc3BocmFzZSBbREVTfEFFU10gW3ByaXZwYXNzcGhyYXNlXSIKIC5JUAogTUQ1IGFuZCBTSEEgYXJlIHRoZSBhdXRoZW50aWNhdGlvbiB0eXBlcyB0byB1c2UuICBERVMgYW5kIEFFUyBhcmUgdGhlCiBwcml2YWN5IHByb3RvY29scyB0byB1c2UuICBJZiB0aGUgcHJpdmFjeQpAQCAtMTQxLDcgKzI4Miw3IEBACiBjb21tYW5kLgogLklQCiBJbnN0ZWFkIG9mIGZpZ3VyaW5nIG91dCBob3cgdG8gdXNlIHRoaXMgZGlyZWN0aXZlIGFuZCB3aGVyZSB0byBwdXQgaXQKLShzZWUgYmVsb3cpLCBqdXN0IHJ1biAibmV0LXNubXAtY29uZmlnIC0tY3JlYXRlLXNubXB2My11c2VyIiBpbnN0ZWFkLAorKHNlZSBiZWxvdyksIGp1c3QgcnVuICJuZXRcLXNubXBcLWNvbmZpZyBcLVwtY3JlYXRlXC1zbm1wdjNcLXVzZXIiIGluc3RlYWQsCiB3aGljaCB3aWxsIGFkZCBvbmUgb2YgdGhlc2UgbGluZXMgdG8gdGhlIHJpZ2h0IHBsYWNlLgogLklQCiBUaGlzIGRpcmVjdGl2ZSBzaG91bGQgYmUgcGxhY2VkIGludG8gdGhlCkBAIC0xNTQsMTIgKzI5NSwxMiBAQAogaXQgY2FuIGJlLgogLklQCiBJZiB5b3UgbmVlZCB0byBsb2NhbGl6ZSB0aGUgdXNlciB0byBhIHBhcnRpY3VsYXIgRW5naW5lSUQgKHRoaXMgaXMKLXVzZWZ1bCBtb3N0bHkgaW4gdGhlIHNpbWlsYXIgc25tcHRyYXBkLmNvbmYgZmlsZSksIHlvdSBjYW4gdXNlIHRoZSAtZQordXNlZnVsIG1vc3RseSBpbiB0aGUgc2ltaWxhciBzbm1wdHJhcGQuY29uZiBmaWxlKSwgeW91IGNhbiB1c2UgdGhlIFwtZQogYXJndW1lbnQgdG8gc3BlY2lmeSBhbiBFbmdpbmVJRCBhcyBhIGhleCB2YWx1ZSAoRUcsICIweDAxMDIwMzA0IikuCiAuSVAKIElmIHlvdSB3YW50IHRvIGdlbmVyYXRlIGVpdGhlciB5b3VyIG1hc3RlciBvciBsb2NhbGl6ZWQga2V5cyBkaXJlY3RseSwKLXJlcGxhY2UgdGhlIGdpdmVuIHBhc3N3b3JkIHdpdGggYSBoZXhzdHJpbmcgKHByZWNlZWRlZCBieSBhICIweCIpIGFuZAotcHJlY2VkZSB0aGUgaGV4IHN0cmluZyBieSBhIC1tIG9yIC1sIHRva2VuIChyZXNwZWN0aXZlbHkpLiAgRUdzOgorcmVwbGFjZSB0aGUgZ2l2ZW4gcGFzc3dvcmQgd2l0aCBhIGhleHN0cmluZyAocHJlY2VkZWQgYnkgYSAiMHgiKSBhbmQKK3ByZWNlZGUgdGhlIGhleCBzdHJpbmcgYnkgYSBcLW0gb3IgXC1sIHRva2VuIChyZXNwZWN0aXZlbHkpLiAgRUdzOgogLklQCiAuUlMKIC5uZgpAQCAtMTY3LDggKzMwOCw4IEBACiBjb3VudGluZyBwdXJwb3Nlcy4gIFBsZWFzZSBnZW5lcmF0ZSByYW5kb20ga2V5cyBpbnN0ZWFkIG9mIHVzaW5nCiB0aGVzZSBleGFtcGxlc10KIAotY3JlYXRlVXNlciBteXVzZXIgU0hBIC1sIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwMDAxMDIwMzA0MDUwNjA3MDgwOSBBRVMgLWwgMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTAwMDEwMjAzMDQwNQotY3JlYXRlVXNlciBteXVzZXIgU0hBIC1tIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwMDAxMDIwMzA0MDUwNjA3MDgwOSBBRVMgLW0gMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTAwMDEwMjAzMDQwNTA2MDcwODA5CitjcmVhdGVVc2VyIG15dXNlciBTSEEgXC1sIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwMDAxMDIwMzA0MDUwNjA3MDgwOSBBRVMgXC1sIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwMDAxMDIwMzA0MDUKK2NyZWF0ZVVzZXIgbXl1c2VyIFNIQSBcLW0gMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTAwMDEwMjAzMDQwNTA2MDcwODA5IEFFUyBcLW0gMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTAwMDEwMjAzMDQwNTA2MDcwODA5CiAuZmkKIC5SRQogLklQCkBAIC0xNzcsMTIgKzMxOCwxNyBAQAogc3VwcG9ydGVkIGFsZ29yaXRobXMpLiAgTWFzdGVyIGVuY3J5cHRpb24ga2V5cywgdGhvdWdoLCBuZWVkIHRvIGJlIHRoZQogbGVuZ3RoIHJlcXVpcmVkIGJ5IHRoZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gbm90IHRoZSBsZW5ndGgKIHJlcXVpcmVkIGJ5IHRoZSBlbmNyeXB0aW5nIGFsZ29yaXRobSAoTUQ1OiAxNiBieXRlcywgU0hBOiAyMCBieXRlcykuCisuU0ggQUNDRVNTIENPTlRST0wKKy5CIHNubXBkCitzdXBwb3J0cyB0aGUgVmlldy1CYXNlZCBBY2Nlc3MgQ29udHJvbCBNb2RlbCAoVkFDTSkgYXMgZGVmaW5lZCBpbiBSRkMKKzI1NzUsIHRvIGNvbnRyb2wgd2hvIGNhbiByZXRyaWV2ZSBvciB1cGRhdGUgaW5mb3JtYXRpb24uICBUbyB0aGlzIGVuZCwKK2l0IHJlY29nbml6ZXMgdmFyaW91cyBkaXJlY3RpdmVzIHJlbGF0aW5nIHRvIGFjY2VzcyBjb250cm9sLgogLlNTIFRyYWRpdGlvbmFsIEFjY2VzcyBDb250cm9sCiBNb3N0IHNpbXBsZSBhY2Nlc3MgY29udHJvbCByZXF1aXJlbWVudHMgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUKIGRpcmVjdGl2ZXMgXGZJcm91c2VyXGZSL1xmSXJ3dXNlclxmUiAoZm9yIFNOTVB2Mykgb3IKIFxmSXJvY29tbXVuaXR5XGZSL1xmSXJ3Y29tbXVuaXR5XGZSIChmb3IgU05NUHYxIG9yIFNOTVB2MmMpLgotLklQICJyb3VzZXIgVVNFUiBbbm9hdXRofGF1dGh8cHJpdiBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKLS5JUCAicnd1c2VyIFVTRVIgW25vYXV0aHxhdXRofHByaXYgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAgInJvdXNlciBbXC1zIFNFQ01PREVMXSBVU0VSIFtub2F1dGh8YXV0aHxwcml2IFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUCAicnd1c2VyIFtcLXMgU0VDTU9ERUxdICBVU0VSIFtub2F1dGh8YXV0aHxwcml2IFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKIHNwZWNpZnkgYW4gU05NUHYzIHVzZXIgdGhhdCB3aWxsIGJlIGFsbG93ZWQgcmVhZC1vbmx5IChHRVQgYW5kIEdFVE5FWFQpCiBvciByZWFkLXdyaXRlIChHRVQsIEdFVE5FWFQgYW5kIFNFVCkgYWNjZXNzIHJlc3BlY3RpdmVseS4KIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBwcm92aWRlIGFjY2VzcyB0byB0aGUgZnVsbCBPSUQgdHJlZSBmb3IgYXV0aGVudGljYXRlZApAQCAtMTk0LDggKzM0MCwxNSBAQAogQW4gb3B0aW9uYWwgY29udGV4dCBjYW4gYWxzbyBiZSBzcGVjaWZpZWQsIG9yICJjb250ZXh0KiIgdG8gZGVub3RlIGEgY29udGV4dAogcHJlZml4LiAgSWYgbm8gY29udGV4dCBmaWVsZCBpcyBzcGVjaWZpZWQgKG9yIHRoZSB0b2tlbiAiKiIgaXMgdXNlZCksIHRoZQogZGlyZWN0aXZlIHdpbGwgbWF0Y2ggYWxsIHBvc3NpYmxlIGNvbnRleHRzLgotLklQICJyb2NvbW11bml0eSBDT01NVU5JVFkgW1NPVVJDRSBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKLS5JUCAicndjb21tdW5pdHkgQ09NTVVOSVRZIFtTT1VSQ0UgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAKK0lmIFNFQ01PREVMIGlzIHNwZWNpZmllZCB0aGVuIGl0IHdpbGwgYmUgdGhlIHNlY3VyaXR5IG1vZGVsIHJlcXVpcmVkCitmb3IgdGhhdCB1c2VyIChub3RlIHRoYXQgaWRlbnRpY2FsIHVzZXIgbmFtZXMgbWF5IGNvbWUgaW4gb3ZlcgorZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVscyBhbmQgd2lsbCBiZSBhcHByb3ByaWF0ZWx5IHNlcGFyYXRlZCB2aWEgdGhlCithY2Nlc3MgY29udHJvbCBzZXR0aW5ncykuICBUaGUgZGVmYXVsdCBzZWN1cml0eSBtb2RlbCBpcyAidXNtIiBhbmQgdGhlCitvdGhlciBjb21tb24gc2VjdXJpdHkgbW9kZWxzIGFyZSBsaWtlbHkgInRzbSIgd2hlbiB1c2luZyAoRClUTFMgb3IgU1NICitzdXBwb3J0IGFuZCAia3NtIiBpZiB0aGUgS2VyYmVyb3Mgc3VwcG9ydCBoYXMgYmVlbiBjb21waWxlZCBpbi4KKy5JUCAicm9jb21tdW5pdHkgQ09NTVVOSVRZIFtTT1VSQ0UgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgorLklQICJyd2NvbW11bml0eSBDT01NVU5JVFkgW1NPVVJDRSBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCiBzcGVjaWZ5IGFuIFNOTVB2MSBvciBTTk1QdjJjIGNvbW11bml0eSB0aGF0IHdpbGwgYmUgYWxsb3dlZCByZWFkLW9ubHkKIChHRVQgYW5kIEdFVE5FWFQpIG9yIHJlYWQtd3JpdGUgKEdFVCwgR0VUTkVYVCBhbmQgU0VUKSBhY2Nlc3MgcmVzcGVjdGl2ZWx5LgogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBmdWxsIE9JRCB0cmVlIGZvciBzdWNoIHJlcXVlc3RzLApAQCAtMjA1LDggKzM1OCw4IEBACiB0aGF0IGNvbW11bml0eSB0byB0aGUgc3VidHJlZSByb290ZWQgYXQgdGhlIGdpdmVuIE9JRCwgb3IgbmFtZWQgdmlldy4KIENvbnRleHRzIGFyZSB0eXBpY2FsbHkgbGVzcyByZWxldmFudCB0byBjb21tdW5pdHktYmFzZWQgU05NUCB2ZXJzaW9ucywKIGJ1dCB0aGUgc2FtZSBiZWhhdmlvdXIgYXBwbGllcyBoZXJlLgotLklQICJyb2NvbW11bml0eTYgQ09NTVVOSVRZIFtTT1VSQ0UgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCi0uSVAgInJ3Y29tbXVuaXR5NiBDT01NVU5JVFkgW1NPVVJDRSBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUCAicm9jb21tdW5pdHk2IENPTU1VTklUWSBbU09VUkNFIFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUCAicndjb21tdW5pdHk2IENPTU1VTklUWSBbU09VUkNFIFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKIGFyZSBkaXJlY3RpdmVzIHJlbGF0aW5nIHRvIHJlcXVlc3RzIHJlY2VpdmVkIHVzaW5nIElQdjYKIChpZiB0aGUgYWdlbnQgc3VwcG9ydHMgc3VjaCB0cmFuc3BvcnQgZG9tYWlucykuCiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIFNPVVJDRSwgT0lELCBWSUVXIGFuZCBDT05URVhUIHRva2VucyBhcmUgZXhhY3RseQpAQCAtMjI4LDEwICszODEsMTAgQEAKIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcy4KIC5TUyBWQUNNIENvbmZpZ3VyYXRpb24KIFRoZSBmdWxsIGZsZXhpYmlsaXR5IG9mIHRoZSBWQUNNIGlzIGF2YWlsYWJsZSB1c2luZyBmb3VyIGNvbmZpZ3VyYXRpb24KLWRpcmVjdGl2ZXMgLSBcZkljb20yc2VjXGZSLCBcZklncm91cFxmUiwgXGZJdmlld1xmUiBhbmQgXGZJYWNjZXNzXGZSLgorZGlyZWN0aXZlcyBcLSBcZkljb20yc2VjXGZSLCBcZklncm91cFxmUiwgXGZJdmlld1xmUiBhbmQgXGZJYWNjZXNzXGZSLgogVGhlc2UgcHJvdmlkZSBkaXJlY3QgY29uZmlndXJhdGlvbiBvZiB0aGUgdW5kZXJseWluZyBWQUNNIHRhYmxlcy4KLS5JUCAiY29tMnNlYyAgWy1DbiBDT05URVhUXSBTRUNOQU1FIFNPVVJDRSBDT01NVU5JVFkiCi0uSVAgImNvbTJzZWM2IFstQ24gQ09OVEVYVF0gU0VDTkFNRSBTT1VSQ0UgQ09NTVVOSVRZIgorLklQICJjb20yc2VjICBbXC1DbiBDT05URVhUXSBTRUNOQU1FIFNPVVJDRSBDT01NVU5JVFkiCisuSVAgImNvbTJzZWM2IFtcLUNuIENPTlRFWFRdIFNFQ05BTUUgU09VUkNFIENPTU1VTklUWSIKIG1hcCBhbiBTTk1QdjEgb3IgU05NUHYyYyBjb21tdW5pdHkgc3RyaW5nIHRvIGEgc2VjdXJpdHkgbmFtZSAtIGVpdGhlciBmcm9tCiBhIHBhcnRpY3VsYXIgcmFuZ2Ugb2Ygc291cmNlIGFkZHJlc3Nlcywgb3IgZ2xvYmFsbHkgKFxmSSJkZWZhdWx0IlxmUikuCiBBIHJlc3RyaWN0ZWQgc291cmNlIGNhbiBlaXRoZXIgYmUgYSBzcGVjaWZpYyBob3N0bmFtZSAob3IgYWRkcmVzcyksIG9yCkBAIC0yNDMsMTIgKzM5NiwxMiBAQAogY29tYmluYXRpb24gdGhhdCBtYXRjaGVzIHRoZSBpbmNvbWluZyByZXF1ZXN0IHdpbGwgYmUgc2VsZWN0ZWQuCiBWYXJpb3VzIHNvdXJjZS9jb21tdW5pdHkgY29tYmluYXRpb25zIGNhbiBhbHNvIG1hcCB0byB0aGUgc2FtZSBzZWN1cml0eSBuYW1lLgogLklQCi1JZiBhIENPTlRFWFQgaXMgc3BlY2lmaWVkICh1c2luZyBcZkktQ25cZlIpLCB0aGUgY29tbXVuaXR5IHN0cmluZyB3aWxsIGJlCitJZiBhIENPTlRFWFQgaXMgc3BlY2lmaWVkICh1c2luZyBcZklcLUNuXGZSKSwgdGhlIGNvbW11bml0eSBzdHJpbmcgd2lsbCBiZQogbWFwcGVkIHRvIGEgc2VjdXJpdHkgbmFtZSBpbiB0aGUgbmFtZWQgU05NUHYzIGNvbnRleHQuIE90aGVyd2lzZSB0aGUKIGRlZmF1bHQgY29udGV4dCAoIiIpIHdpbGwgYmUgdXNlZC4KLS5JUCAiY29tMnNlY3VuaXggWy1DbiBDT05URVhUXSBTRUNOQU1FIFNPQ0tQQVRIIENPTU1VTklUWSIKKy5JUCAiY29tMnNlY3VuaXggW1wtQ24gQ09OVEVYVF0gU0VDTkFNRSBTT0NLUEFUSCBDT01NVU5JVFkiCiBpcyB0aGUgVW5peCBkb21haW4gc29ja2V0cyB2ZXJzaW9uIG9mIFxmSWNvbTJzZWNcZlIuCi0uSVAgImdyb3VwIEdST1VQIHt2MXx2MmN8dXNtfSBTRUNOQU1FIgorLklQICJncm91cCBHUk9VUCB7djF8djJjfHVzbXx0c218a3NtfSBTRUNOQU1FIgogbWFwcyBhIHNlY3VyaXR5IG5hbWUgKGluIHRoZSBzcGVjaWZpZWQgc2VjdXJpdHkgbW9kZWwpIGludG8KIGEgbmFtZWQgZ3JvdXAuICBTZXZlcmFsIFxmSWdyb3VwXGZSIGRpcmVjdGl2ZXMgY2FuIHNwZWNpZnkgdGhlCiBzYW1lIGdyb3VwIG5hbWUsIGFsbG93aW5nIGEgc2luZ2xlIGFjY2VzcyBzZXR0aW5nIHRvIGFwcGx5IHRvIHNldmVyYWwgCkBAIC0yOTMsNyArNDQ2LDcgQEAKIC5JUAogTm90ZSB0aGF0IGEgbWFzayBsb25nZXIgdGhhbiA4IGJpdHMgbXVzdCB1c2UgJzonIHRvIHNlcGFyYXRlIHRoZSBpbmRpdmlkdWFsCiBvY3RldHMuCi0uSVAgImFjY2VzcyBHUk9VUCBDT05URVhUIHthbnl8djF8djJjfHVzbX0gTEVWRUwgUFJFRlggUkVBRCBXUklURSBOT1RJRlkiCisuSVAgImFjY2VzcyBHUk9VUCBDT05URVhUIHthbnl8djF8djJjfHVzbXx0c218a3NtfSBMRVZFTCBQUkVGWCBSRUFEIFdSSVRFIE5PVElGWSIKIG1hcHMgZnJvbSBhIGdyb3VwIG9mIHVzZXJzL2NvbW11bml0aWVzICh3aXRoIGEgcGFydGljdWxhciBzZWN1cml0eSBtb2RlbAogYW5kIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwsIGFuZCBpbiBhIHNwZWNpZmljIGNvbnRleHQpIHRvIG9uZSBvZiB0aHJlZSB2aWV3cywKIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQuCkBAIC0zMTIsNyArNDY1LDcgQEAKIGNvbmNlcm5lZCwgdGhlIHR3byBtYWluIHZpZXcgdHlwZXMgYXJlIFxmSXJlYWRcZlIgYW5kIFxmSXdyaXRlXGZSLAogY29ycmVzcG9uZGluZyB0byB0aGUgUkVBRCBhbmQgV1JJVEUgdmlld3Mgb2YgdGhlIG1haW4gXGZJYWNjZXNzXGZSIGRpcmVjdGl2ZS4KIFNlZSB0aGUgJ3NubXB0cmFwZC5jb25mKDUpJyBtYW4gcGFnZSBmb3IgZGlzY3Vzc2lvbiBvZiBvdGhlciB2aWV3IHR5cGVzLgotLklQICJhdXRoY29tbXVuaXR5IFRZUEVTICBDT01NVU5JVFkgICBbU09VUkNFIFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgorLklQICJhdXRoY29tbXVuaXR5IFRZUEVTICBDT01NVU5JVFkgICBbU09VUkNFIFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKIGlzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBcZklyb2NvbW11bml0eVxmUi9cZklyd2NvbW11bml0eVxmUiBkaXJlY3RpdmVzLgogVFlQRVMgd2lsbCB1c3VhbGx5IGJlIFxmSXJlYWRcZlIgb3IgXGZJcmVhZCx3cml0ZVxmUiByZXNwZWN0aXZlbHkuCiBUaGUgdmlldyBzcGVjaWZpY2F0aW9uIGNhbiBlaXRoZXIgYmUgYW4gT0lEIHN1YnRyZWUgKGFzIGJlZm9yZSksCkBAIC0zMjEsMjAgKzQ3NCwyMCBAQAogdGhlbiBhY2Nlc3Mgd2lsbCBiZSBhbGxvd2VkIHRvIHRoZSBmdWxsIE9JRCB0cmVlLgogSWYgQ09OVEVYVCBpcyBzcGVjaWZpZWQsIGFjY2VzcyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIFNOTVB2MyBjb250ZXh0LgogT3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgKCIiKSBpcyB1c2VkLgotLklQICJhdXRodXNlciAgIFRZUEVTIFstcyBNT0RFTF0gVVNFUiAgW0xFVkVMIFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgorLklQICJhdXRodXNlciAgIFRZUEVTIFtcLXMgTU9ERUxdIFVTRVIgIFtMRVZFTCBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCiBpcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgXGZJcm91c2VyXGZSL1xmSXJ3dXNlclxmUiBkaXJlY3RpdmVzLgogVGhlIGZpZWxkcyBUWVBFUywgT0lELCBWSUVXIGFuZCBDT05URVhUIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IKIFxmSWF1dGhjb21tdW5pdHlcZlIuCi0uSVAgImF1dGhncm91cCAgVFlQRVMgWy1zIE1PREVMXSBHUk9VUCBbTEVWRUwgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAgImF1dGhncm91cCAgVFlQRVMgW1wtcyBNT0RFTF0gR1JPVVAgW0xFVkVMIFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKIGlzIGEgY29tcGFuaW9uIHRvIHRoZSBcZklhdXRodXNlclxmUiBkaXJlY3RpdmUsIHNwZWNpZnlpbmcgYWNjZXNzCiBmb3IgYSBwYXJ0aWN1bGFyIGdyb3VwIChkZWZpbmVkIHVzaW5nIHRoZSBcZklncm91cFxmUiBkaXJlY3RpdmUgYXMgdXN1YWwpLgogQm90aCBcZklhdXRodXNlclxmUiBhbmQgXGZJYXV0aGdyb3VwXGZSIGRlZmF1bHQgdG8gYXV0aGVudGljYXRlZCByZXF1ZXN0cyAtCiBMRVZFTCBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYXMgXGZJbm9hdXRoXGZSIG9yIFxmSXByaXZcZlIgdG8gYWxsb3cKIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0cywgb3IgcmVxdWlyZSBlbmNyeXB0aW9uIHJlc3BlY3RpdmVseS4KIEJvdGggXGZJYXV0aHVzZXJcZlIgYW5kIFxmSWF1dGhncm91cFxmUiBkaXJlY3RpdmVzIGFsc28gZGVmYXVsdCB0byBjb25maWd1cmluZwotYWNjZXNzIGZvciBTTk1QdjMvVVNNIHJlcXVlc3RzIC0gdXNlIHRoZSAnLXMnIGZsYWcgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZQorYWNjZXNzIGZvciBTTk1QdjMvVVNNIHJlcXVlc3RzIC0gdXNlIHRoZSAnXC1zJyBmbGFnIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUKIHNlY3VyaXR5IG1vZGVsICh1c2luZyB0aGUgc2FtZSB2YWx1ZXMgYXMgZm9yIFxmSWFjY2Vzc1xmUiBhYm92ZSkuCi0uSVAgImF1dGhhY2Nlc3MgVFlQRVMgWy1zIE1PREVMXSBHUk9VUCBWSUVXIFtMRVZFTCBbQ09OVEVYVF1dIgorLklQICJhdXRoYWNjZXNzIFRZUEVTIFtcLXMgTU9ERUxdIEdST1VQIFZJRVcgW0xFVkVMIFtDT05URVhUXV0iCiBhbHNvIGNvbmZpZ3VyZXMgdGhlIGFjY2VzcyBmb3IgYSBwYXJ0aWN1bGFyIGdyb3VwLAogc3BlY2lmeWluZyB0aGUgbmFtZSBhbmQgdHlwZSBvZiB2aWV3IHRvIGFwcGx5LiBUaGUgTU9ERUwgYW5kIExFVkVMIGZpZWxkcwogYXJlIGludGVycHJldGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgXGZJYXV0aGdyb3VwXGZSLgpAQCAtMzYwLDcgKzUxMyw3IEBACiAuSVAgInN5c05hbWUgU1RSSU5HIgogc2V0IHRoZSBzeXN0ZW0gbG9jYXRpb24sIHN5c3RlbSBjb250YWN0IG9yIHN5c3RlbSBuYW1lCiAoXGZDc3lzTG9jYXRpb24uMFxmUiwgXGZDc3lzQ29udGFjdC4wXGZSIGFuZCBcZkNzeXNOYW1lLjBcZlIpIGZvciB0aGUgYWdlbnQgcmVzcGVjdGl2ZWx5LgotT3JkaW5hcmlseSB0aGVzZSBvYmplY3RzIGFyZSB3cml0ZWFibGUgdmlhIHN1aXRhYmx5IGF1dGhvcml6ZWQgU05NUCBTRVQKK09yZGluYXJpbHkgdGhlc2Ugb2JqZWN0cyBhcmUgd3JpdGFibGUgdmlhIHN1aXRhYmx5IGF1dGhvcml6ZWQgU05NUCBTRVQKIHJlcXVlc3RzLiAgSG93ZXZlciwgc3BlY2lmeWluZyBvbmUgb2YgdGhlc2UgZGlyZWN0aXZlcyBtYWtlcyB0aGUKIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHJlYWQtb25seSwgYW5kIGF0dGVtcHRzIHRvIFNFVCBpdCB3aWxsIHJlc3VsdCBpbgogYSBcZklub3RXcml0YWJsZVxmUiBlcnJvciByZXNwb25zZS4KQEAgLTM3OCw4ICs1MzEsMjAgQEAKIC5JUCAiaW50ZXJmYWNlIE5BTUUgVFlQRSBTUEVFRCIKIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYXBwcm9wcmlhdGUgdHlwZSBhbmQgc3BlZWQgc2V0dGluZ3MgZm9yCiBpbnRlcmZhY2VzIHdoZXJlIHRoZSBhZ2VudCBmYWlscyB0byBkZXRlcm1pbmUgdGhpcyBpbmZvcm1hdGlvbiBjb3JyZWN0bHkuCi1UWVBFIGlzIGEgdHlwZSB2YWx1ZSBhcyBnaXZlbiBpbiB0aGUgSUFOQWlmVHlwZS1NSUIsCitUWVBFIGlzIGEgdHlwZSB2YWx1ZSBhcyBnaXZlbiBpbiB0aGUgSUFOQWlmVHlwZVwtTUlCLAogYW5kIGNhbiBiZSBzcGVjaWZpZWQgbnVtZXJpY2FsbHkgb3IgYnkgbmFtZSAoYXNzdW1pbmcgdGhpcyBNSUIgaXMgbG9hZGVkKS4KKy5JUCAiaW50ZXJmYWNlX2ZhZGVvdXQgVElNRU9VVCIKK3NwZWNpZmllcywgZm9yIGhvdyBsb25nIHRoZSBhZ2VudCBrZWVwcyBlbnRyaWVzIGluIFxmQ2lmVGFibGVcZlIgYWZ0ZXIKK2FwcHJvcHJpYXRlIGludGVyZmFjZXMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBzeXN0ZW0gKHR5cGljYWxseSB2YXJpb3VzIHBwcCwKK3RhcCBvciB0dW4gaW50ZXJmYWNlcykuIFRpbWVvdXQgdmFsdWUgaXMgaW4gc2Vjb25kcy4gRGVmYXVsdCB2YWx1ZSBpcyAzMDAKKyg9NSBtaW51dGVzKS4KKy5JUCAiaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIHllcyIKK2NhbiBiZSB1c2VkIHRvIHJlbW92ZSBhbHJlYWR5IGV4aXN0aW5nIGVudHJpZXMgaW4gXGZDaWZUYWJsZVxmUiB3aGVuIGFuCitpbnRlcmZhY2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFwcGVhcnMgb24gdGhlIHN5c3RlbS4gRS5nLiB3aGVuIHBwcDAgaW50ZXJmYWNlCitpcyByZW1vdmVkLCBpdCBpcyBzdGlsbCBsaXN0ZWQgaW4gdGhlIHRhYmxlIGZvciBcZklpbnRlcmZhY2VfZmFkZW91dFxmUgorc2Vjb25kcy4gVGhpcyBvcHRpb24gZW5zdXJlcywgdGhhdCB0aGUgb2xkIHBwcDAgaW50ZXJmYWNlIGlzIHJlbW92ZWQgZXZlbgorYmVmb3JlIHRoZSBcZklpbnRlcmZhY2VfZmFkZW91dFxmUiB0aW1lb3VyIHdoZW4gbmV3IHBwcDAgKHdpdGggZGlmZmVyZW50CitcZkNpZkluZGV4XGZSKSBzaG93cyB1cC4KIC5TUyBIb3N0IFJlc291cmNlcyBHcm91cAogVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKIFxmSWhvc3RcZlIgbW9kdWxlICh3aGljaCBpcyBub3cgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZCAKQEAgLTQxOSwxMyArNTg0LDMyIEBACiBhcyAnRml4ZWQgRGlza3MnLCBhbmQgdGhpcyBpcyBzdGlsbCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCiBTZXR0aW5nIHRoaXMgZGlyZWN0aXZlIHRvICcxJyByZXBvcnRzIHN1Y2ggZmlsZSBzeXN0ZW1zIGFzCiBcJ05ldHdvcmsgRGlza3MnLCBhcyByZXF1aXJlZCBieSB0aGUgSG9zdCBSZXNvdXJjZXMgTUlCLgorLklQICJyZWFsU3RvcmFnZVVuaXRzIgorY29udHJvbGxzIGhvdyB0aGUgYWdlbnQgcmVwb3J0cyBoclN0b3JhZ2VBbGxvY2F0aW9uVW5pdHMsIGhyU3RvcmFnZVNpemUgYW5kCitoclN0b3JhZ2VVc2VkIGluIGhyU3RvcmFnZVRhYmxlLgorRm9yIGJpZyBzdG9yYWdlIGRyaXZlcyB3aXRoIHNtYWxsIGFsbG9jYXRpb24gdW5pdHMgdGhlIGFnZW50IHJlLWNhbGN1bGF0ZXMKK3RoZXNlIHZhbHVlcyBzbyB0aGV5IGFsbCBmaXQgSW50ZWdlcjMyIGFuZAoraHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzIHggaHJTdG9yYWdlU2l6ZQorZ2l2ZXMgcmVhbCBzaXplIG9mIHRoZSBzdG9yYWdlLgorLlJTCisuSVAgIkV4YW1wbGU6IgorTGludXggeGZzIDE2VEIgZmlsZXN5c3RlbSB3aXRoIDQwOTYgYnl0ZXMgbGFyZ2UgYmxvY2tzIHdpbGwgYmUKK3JlcG9ydGVkIGFzICBoclN0b3JhZ2VBbGxvY2F0aW9uVW5pdHMgPSA4MTkyIGFuZCBoclN0b3JhZ2VTaXplID0gMjE0NzQ4MzY0NywKK3NvIDgxOTIgeCAyMTQ3NDgzNjQ3IGdpdmVzIHJlYWwgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSAoPTE2IFRCKS4KKy5SRQorLklQCitTZXR0aW5nIHRoaXMgZGlyZWN0aXZlIHRvICcxJyB0dXJucyBvZmYKK3RoaXMgY2FsY3VsYXRpb24gYW5kIHRoZSBhZ2VudCByZXBvcnRzIHJlYWwgaHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzLCBidXQgaXQKK21pZ2h0IHJlcG9ydCB3cm9uZyBoclN0b3JhZ2VTaXplIGZvciBiaWcgZHJpdmVzIGJlY2F1c2UgdGhlIHZhbHVlIHdvbid0IGZpdCBpbnRvCitJbnRlZ2VyMzIuIEluIHRoaXMgY2FzZSwgaHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzIHggaHJTdG9yYWdlU2l6ZSB3b24ndCBnaXZlCityZWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UuCiAuU1MgUHJvY2VzcyBNb25pdG9yaW5nIAogVGhlIFxmQ2hyU1dSdW5cZlIgZ3JvdXAgb2YgdGhlIEhvc3QgUmVzb3VyY2VzIE1JQiBwcm92aWRlcwogaW5mb3JtYXRpb24gYWJvdXQgaW5kaXZpZHVhbCBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgbG9jYWwgc3lzdGVtLgotVGhlIFxmQ3ByVGFibGVcZlIgb2YgdGhlIFVDRC1TTk1QLU1JQiBjb21wbGVtZW50cyB0aGlzIGJ5IHJlcG9ydGluZworVGhlIFxmQ3ByVGFibGVcZlIgb2YgdGhlIFVDRFwtU05NUFwtTUlCIGNvbXBsZW1lbnRzIHRoaXMgYnkgcmVwb3J0aW5nCiBvbiBzZWxlY3RlZCBzZXJ2aWNlcyAod2hpY2ggbWF5IGludm9sdmUgbXVsdGlwbGUgcHJvY2Vzc2VzKS4KIFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCi1cZkl1Y2Qtc25tcC9wcm9jXGZSIG1vZHVsZSAod2hpY2ggaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKK1xmSXVjZFwtc25tcC9wcm9jXGZSIG1vZHVsZSAod2hpY2ggaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbikuCiAuSVAgInByb2MgTkFNRSBbTUFYIFtNSU5dXSIKIG1vbml0b3JzIHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIGNhbGxlZCBOQU1FIChhcyByZXBvcnRlZCBieSBQU0NNRCkKQEAgLTQ0MSw5ICs2MjUsMTIgQEAKIHRoZSBwcm9ibGVtIC0gc2VlIHRoZSBEaXNNYW4gRXZlbnQgTUlCIHNlY3Rpb24gbGF0ZXIuCiAuUkUKIC5JUAotSWYgbmVpdGhlciBNQVggbm9yIE1JTiBhcmUgc3BlY2lmaWVkIChvciBhcmUgYm90aCAwKSwgdGhleSB3aWxsCitJZiBuZWl0aGVyIE1BWCBub3IgTUlOIGFyZSBzcGVjaWZpZWQsIHRoZXkgd2lsbAogZGVmYXVsdCB0byBcZkJpbmZpbml0eVxmUiBhbmQgMSByZXNwZWN0aXZlbHkgKCJhdCBsZWFzdCBvbmUiKS4KIElmIG9ubHkgTUFYIGlzIHNwZWNpZmllZCwgTUlOIHdpbGwgZGVmYXVsdCB0byAwICgibm8gbW9yZSB0aGFuIE1BWCIpLgorSWYgTUFYIGlzIDAgKGFuZCBNSU4gaXMgbm90KSwgdGhpcyBpbmRpY2F0ZXMgaW5maW5pdHkgKCJhdCBsZWFzdCBNSU4iKS4KK0lmIGJvdGggTUFYIGFuZCBNSU4gYXJlIDAsIHRoaXMgaW5kaWNhdGVzIGEgcHJvY2VzcyB0aGF0IHNob3VsZCBcZkJub3RcZlAKK2JlIHJ1bm5pbmcuCiAuSVAgInByb2NmaXggTkFNRSBQUk9HIEFSR1MiCiByZWdpc3RlcnMgYSBjb21tYW5kIHRoYXQgY2FuIGJlIHJ1biB0byBmaXggZXJyb3JzIHdpdGggdGhlIGdpdmVuCiBwcm9jZXNzIE5BTUUuICBUaGlzIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nCkBAIC00NjEsNyArNjQ4LDcgQEAKIFxmQ3ByVGFibGVcZlIgd2lsbCBmYWlsIChcZklub1N1Y2hPYmplY3RcZkkpLgogLlNTIERpc2sgVXNhZ2UgTW9uaXRvcmluZwogVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKLVxmSXVjZC1zbm1wL2Rpc2tcZlIgbW9kdWxlICh3aGljaCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQorXGZJdWNkXC1zbm1wL2Rpc2tcZlIgbW9kdWxlICh3aGljaCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQogZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9uKS4KIC5JUCAiZGlzayBQQVRIIFsgTUlOU1BBQ0UgfCBNSU5QRVJDRU5UJSBdIgogbW9uaXRvcnMgdGhlIGRpc2sgbW91bnRlZCBhdCBQQVRIIGZvciBhdmFpbGFibGUgZGlzayBzcGFjZS4KQEAgLTUwNSw5ICs2OTIsMzEgQEAKIC5QUAogSWYgbmVpdGhlciBhbnkgXGZJZGlza1xmUiBkaXJlY3RpdmVzIG9yIFxmSWluY2x1ZGVBbGxEaXNrc1xmUiBhcmUgZGVmaW5lZCwKIHRoZW4gd2Fsa2luZyB0aGUgXGZDZHNrVGFibGVcZlIgd2lsbCBmYWlsIChcZklub1N1Y2hPYmplY3RcZkkpLgorLlNTIERpc2sgSS9PIE1vbml0b3JpbmcKK1RoaXMgcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCitcZkl1Y2RcLXNubXAvZGlza2lvXGZSIG1vZHVsZSAod2hpY2ggaXMgbm90IGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCitkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgorLlBQCitCeSBkZWZhdWx0LCBhbGwgYmxvY2sgZGV2aWNlcyBrbm93biB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhcmUKK2luY2x1ZGVkIGluIHRoZSBkaXNrSU9UYWJsZS4gT24gcGxhdGZvcm1zIG90aGVyIHRoYW4gTGludXgsIHRoaXMgbW9kdWxlCitoYXMgbm8gY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzLgorLlBQCitPbiBMaW51eCBzeXN0ZW1zLCBpdCBpcyBwb3NzaWJsZSB0byBleGNsdWRlIHNldmVyYWwgY2xhc3NlcyBvZiBibG9jaworZGV2aWNlcyBmcm9tIHRoZSBkaXNrSU9UYWJsZSBpbiBvcmRlciB0byBhdm9pZCBjbHV0dGVyaW5nIHRoZSB0YWJsZSB3aXRoCit1c2VsZXNzIHplcm8gc3RhdGlzdGljcyBmb3IgcHNldWRvLWRldmljZXMgdGhhdCBvZnRlbiBhcmUgbm90IGluIHVzZSBidXQKK2FyZSBjb25maWd1cmVkIGJ5IGRlZmF1bHQgdG8gZXhpc3QgaW4gbW9zdCByZWNlbnQgTGludXggZGlzdHJpYnV0aW9ucy4KKy5JUCAiZGlza2lvX2V4Y2x1ZGVfZmQgeWVzIgorRXhjbHVkZXMgYWxsIExpbnV4IGZsb3BweSBkaXNrIGJsb2NrIGRldmljZXMsIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggImZkIiwKK2UuZy4gImZkMCIKKy5JUCAiZGlza2lvX2V4Y2x1ZGVfbG9vcCB5ZXMiCitFeGNsdWRlcyBhbGwgTGludXggbG9vcGJhY2sgYmxvY2sgZGV2aWNlcywgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAibG9vcCIsCitlLmcuICJsb29wMCIKKy5JUCAiZGlza2lvX2V4Y2x1ZGVfcmFtIHllcyIKK0V4Y2x1ZGVzIGFsbCBMSW51eCByYW1kaXNrIGJsb2NrIGRldmljZXMsIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggInJhbSIsIGUuZy4KKyJyYW0wIgogLlNTIFN5c3RlbSBMb2FkIE1vbml0b3JpbmcKIFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgZWl0aGVyIHRoZQotXGZJdWNkLXNubXAvbG9hZGF2ZVxmUiBtb2R1bGUgb3IgdGhlIFxmSXVjZC1zbm1wL21lbW9yeVxmUiBtb2R1bGUKK1xmSXVjZFwtc25tcC9sb2FkYXZlXGZSIG1vZHVsZSBvciB0aGUgXGZJdWNkXC1zbm1wL21lbW9yeVxmUiBtb2R1bGUKIHJlc3BlY3RpdmVseSAoYm90aCBvZiB3aGljaCBhcmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbikuCiAuSVAgImxvYWQgTUFYMSBbTUFYNSBbTUFYMTVdXSIKQEAgLTUzNCw3ICs3NDMsNyBAQAogLlBQCiBVbmxpa2UgdGhlIFxmSXByb2NcZlIgYW5kIFxmSWRpc2tcZlIgZGlyZWN0aXZlcywgd2Fsa2luZyB0aGUKIHdhbGtpbmcgdGhlIFxmQ2xhVGFibGVcZlIgd2lsbCBzdWNjZWVkIChhc3N1bWluZyB0aGUKLVxmSXVjZC1zbm1wL2xvYWRhdmVcZlIgbW9kdWxlIHdhcyBjb25maWd1cmVkIGludG8gdGhlIGFnZW50KSwKK1xmSXVjZFwtc25tcC9sb2FkYXZlXGZSIG1vZHVsZSB3YXMgY29uZmlndXJlZCBpbnRvIHRoZSBhZ2VudCksCiBldmVuIGlmIHRoZSBcZklsb2FkXGZSIGRpcmVjdGl2ZSBpcyBub3QgcHJlc2VudC4KIC5JUCAic3dhcCBNSU4gIgogbW9uaXRvcnMgdGhlIGFtb3VudCBvZiBzd2FwIHNwYWNlIGF2YWlsYWJsZSBvbiB0aGUgbG9jYWwgc3lzdGVtLgpAQCAtNTQ5LDcgKzc1OCw3IEBACiBJZiB0aGlzIGRpcmVjdGl2ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgaXMgMTYgTUIuCiAuU1MgTG9nIEZpbGUgTW9uaXRvcmluZwogVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBlaXRoZXIgdGhlCi1cZkl1Y2Qtc25tcC9maWxlXGZSIG9yIFxmSXVjZC1zbm1wL2xvZ21hdGNoXGZSIG1vZHVsZXMgcmVzcGVjdGl2ZWx5CitcZkl1Y2RcLXNubXAvZmlsZVxmUiBvciBcZkl1Y2RcLXNubXAvbG9nbWF0Y2hcZlIgbW9kdWxlcyByZXNwZWN0aXZlbHkKIChib3RoIG9mIHdoaWNoIGFyZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQogZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9uKS4KIC5JUCAiZmlsZSBGSUxFIFtNQVhTSVpFXSIKQEAgLTU3Niw3ICs3ODUsNyBAQAogLlJTCiAuSVAgTkFNRQogbmFtZSBvZiB0aGUgbG9nbWF0Y2ggaW5zdGFuY2UgKHdpbGwgYXBwZWFyIGFzIGxvZ01hdGNoTmFtZSB1bmRlcgotbG9nTWF0Y2gvbG9nTWF0Y2hUYWJsZS9sb2dNYXRjaEVudHJ5L2xvZ01hdGNoTmFtZSBpbiB0aGUgdWNkLXNubXAgTUlCIHRyZWUpCitsb2dNYXRjaC9sb2dNYXRjaFRhYmxlL2xvZ01hdGNoRW50cnkvbG9nTWF0Y2hOYW1lIGluIHRoZSB1Y2RcLXNubXAgTUlCIHRyZWUpCiAuSVAgRklMRQogYWJzb2x1dGUgcGF0aCB0byB0aGUgbG9nZmlsZSB0byBiZSBtb25pdG9yZWQuIE5vdGUgdGhhdCB0aGlzIHBhdGgKIGNhbiBjb250YWluIGRhdGUvdGltZSBkaXJlY3RpdmVzIChsaWtlIGluIHRoZSBVTklYICdkYXRlJyBjb21tYW5kKS4gU2VlIHRoZQpAQCAtNTk0LDEyICs4MDMsMTIgQEAKIEV4YW1wbGU6CiAuUlMKIC5JUAotbG9nbWF0Y2ggYXBhY2hlLUdFVHMgL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nLSVZLSVtLSVkIDYwIEdFVC4qSFRUUC4qCitsb2dtYXRjaCBhcGFjaGVcLUdFVHMgL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nXC0lWVwtJW1cLSVkIDYwIEdFVC4qSFRUUC4qCiAuSVAKLVRoaXMgbG9nbWF0Y2ggaW5zdGFuY2UgaXMgbmFtZWQgJ2FwYWNoZS1HRVRzJywgdXNlcyAnR0VULipIVFRQLionIGFzIGl0cworVGhpcyBsb2dtYXRjaCBpbnN0YW5jZSBpcyBuYW1lZCAnYXBhY2hlXC1HRVRzJywgdXNlcyAnR0VULipIVFRQLionIGFzIGl0cwogcmVndWxhciBleHByZXNzaW9uIGFuZCBpdCB3aWxsIG1vbml0b3IgdGhlIGZpbGUgbmFtZWQKLShhc3N1bWluZyB0b2RheSBpcyBNYXkgNnRoIDIwMDkpOiAnL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nLTIwMDktMDUtMDYnLAotdG9tb3Jyb3cgaXQgd2lsbCBsb29rIGZvciAnYWNjZXNzLmxvZy0yMDA5LTA1LTA3Jy4gVGhlIGxvZ2ZpbGUgaXMgcmVhZCBldmVyeSA2MAorKGFzc3VtaW5nIHRvZGF5IGlzIE1heSA2dGggMjAwOSk6ICcvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzcy5sb2dcLTIwMDlcLTA1XC0wNicsCit0b21vcnJvdyBpdCB3aWxsIGxvb2sgZm9yICdhY2Nlc3MubG9nXC0yMDA5XC0wNVwtMDcnLiBUaGUgbG9nZmlsZSBpcyByZWFkIGV2ZXJ5IDYwCiBzZWNvbmRzLgogLlJFCiAuSVAKQEAgLTY1NCwxMiArODYzLDEyIEBACiAuSSAiU05NUENNRF9BUkdTIgogc2hvdWxkIGJlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyByZXF1aXJlZCBmb3IgYW4gZXF1aXZhbGVudAogXGZJc25tcHRyYXBcZlIgKG9yIFxmSXNubXBpbmZvcm1cZlIpIGNvbW1hbmQgdG8gc2VuZCB0aGUgZGVzaXJlZCBub3RpZmljYXRpb24uCi1UaGUgb3B0aW9uIFxmSS1DaVxmUiBjYW4gYmUgdXNlZCAod2l0aCBcZkktdjJjXGZSIG9yIFxmSS12M1xmUikgdG8gZ2VuZXJhdGUKK1RoZSBvcHRpb24gXGZJXC1DaVxmUiBjYW4gYmUgdXNlZCAod2l0aCBcZklcLXYyY1xmUiBvciBcZklcLXYzXGZSKSB0byBnZW5lcmF0ZQogYW4gSU5GT1JNIG5vdGlmaWNhdGlvbiByYXRoZXIgdGhhbiBhbiB1bmFja25vd2xlZGdlZCBUUkFQLgogLklQCiBUaGlzIGlzIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RpdmUgZm9yIGRlZmluaW5nIFNOTVB2MyB0cmFwIHJlY2VpdmVycy4KIFNlZQotaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwvdHV0b3JpYWwtNS9jb21tYW5kcy9zbm1wdHJhcC12My5odG1sCitodHRwOi8vd3d3Lm5ldFwtc25tcC5vcmcvdHV0b3JpYWwvdHV0b3JpYWxcLTUvY29tbWFuZHMvc25tcHRyYXBcLXYzLmh0bWwKIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFNOTVB2MyBub3RpZmljYXRpb24gYmVoYXZpb3VyLgogLklQICJhdXRodHJhcGVuYWJsZSB7MXwyfSIKIGRldGVybWluZXMgd2hldGhlciB0byBnZW5lcmF0ZSBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIHRyYXBzCkBAIC02NjgsNiArODc3LDEyIEBACiBvYmplY3QgKFxmQ3NubXBFbmFibGVBdXRoZW5UcmFwcy4wXGZSKSBpcyByZWFkLXdyaXRlLCBidXQgc3BlY2lmeWluZwogdGhpcyBkaXJlY3RpdmUgbWFrZXMgdGhpcyBvYmplY3QgcmVhZC1vbmx5LCBhbmQgYXR0ZW1wdHMgdG8gc2V0IHRoZQogdmFsdWUgdmlhIFNFVCByZXF1ZXN0cyB3aWxsIHJlc3VsdCBpbiBhIFxmSW5vdFdyaXRhYmxlXGZSIGVycm9yIHJlc3BvbnNlLgorLlJFCisuSVAgInYxdHJhcGFkZHJlc3MgSE9TVCIKK2RlZmluZXMgdGhlIGFnZW50IGFkZHJlc3MsIHdoaWNoIGlzIGluc2VydGVkIGludG8gU05NUHYxIFRSQVBzLiBBcmJpdHJhcnkgbG9jYWwgCitJUHY0IGFkZHJlc3MgaXMgY2hvc2VuIGlmIHRoaXMgb3B0aW9uIGlzIG9tbWl0ZWQuIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBtYWlubHkgCit3aGVuIHRoZSBhZ2VudCBpcyB2aXNpYmxlIGZyb20gb3V0c2lkZSB3b3JsZCBieSBzcGVjaWZpYyBhZGRyZXNzIG9ubHkgKGUuZy4gCitiZWNhdXNlIG9mIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiBvciBmaXJld2FsbCkuCiAuU1MgIkRpc01hbiBFdmVudCBNSUIiCiBUaGUgcHJldmlvdXMgZGlyZWN0aXZlcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgd2hlcmUgdHJhcHMgc2hvdWxkCiBiZSBzZW50LCBidXQgYXJlIG5vdCBjb25jZXJuZWQgd2l0aCBcZkl3aGVuXGZSIHRvIHNlbmQgc3VjaCB0cmFwcwpAQCAtNzU1LDQ3ICs5NzAsNDkgQEAKIFRoZXJlIGFyZSB2YXJpb3VzIG9wdGlvbnMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBtb25pdG9yZWQKIGV4cHJlc3Npb24uICBUaGVzZSBpbmNsdWRlOgogLlJTCi0uSVAgIi1EIgorLklQICJcLUQiCiBpbmRpY2F0ZXMgdGhhdCB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgZXZhbHVhdGVkIHVzaW5nIGRlbHRhIGRpZmZlcmVuY2VzCiBiZXR3ZWVuIHNhbXBsZSB2YWx1ZXMgKHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgdGhlbXNlbHZlcykuCi0uSVAgIi1kIE9JRCIKLS5JUCAiLWRpIE9JRCIKKy5JUCAiXC1kIE9JRCIKKy5JUCAiXC1kaSBPSUQiCiBzcGVjaWZpZXMgYSBkaXNjb250aW51aXR5IG1hcmtlciBmb3IgdmFsaWRhdGluZyBkZWx0YSBkaWZmZXJlbmNlcy4KLUEgXGZJLWRpXGZSIG9iamVjdCBpbnN0YW5jZSB3aWxsIGJlIHVzZWQgZXhhY3RseSBhcyBnaXZlbi4KLUEgXGZJLWRcZlIgb2JqZWN0IHdpbGwgaGF2ZSB0aGUgaW5zdGFuY2Ugc3ViaWRlbnRpZmllcnMgZnJvbSB0aGUKK0EgXGZJXC1kaVxmUiBvYmplY3QgaW5zdGFuY2Ugd2lsbCBiZSB1c2VkIGV4YWN0bHkgYXMgZ2l2ZW4uCitBIFxmSVwtZFxmUiBvYmplY3Qgd2lsbCBoYXZlIHRoZSBpbnN0YW5jZSBzdWJpZGVudGlmaWVycyBmcm9tIHRoZQogY29ycmVzcG9uZGluZyAod2lsZGNhcmRlZCkgZXhwcmVzc2lvbiBvYmplY3QgYXBwZW5kZWQuCi1JZiB0aGUgXGZJLUlcZlIgZmxhZyBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gZGlmZmVyZW5jZQorSWYgdGhlIFxmSVwtSVxmUiBmbGFnIGlzIHNwZWNpZmllZCwgdGhlbiB0aGVyZSBpcyBubyBkaWZmZXJlbmNlCiBiZXR3ZWVuIHRoZXNlIHR3byBvcHRpb25zLgogLklQCi1UaGlzIG9wdGlvbiBhbHNvIGltcGxpZXMgXGZJLURcZlIuCi0uSVAgIi1lIEVWRU5UIgorVGhpcyBvcHRpb24gYWxzbyBpbXBsaWVzIFxmSVwtRFxmUi4KKy5JUCAiXC1lIEVWRU5UIgogc3BlY2lmaWVzIHRoZSBldmVudCB0byBiZSBpbnZva2VkIHdoZW4gdGhpcyBtb25pdG9yIGVudHJ5IGlzIHRyaWdnZXJlZC4KIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBnaXZlbiwgdGhlIG1vbml0b3IgZW50cnkgd2lsbCBnZW5lcmF0ZSBvbmUKLW9mIHRoZSBzdGFuZGFyZCBub3RpZmljYXRpb25zIGRlZmluZWQgaW4gdGhlIERJU01BTi1FVkVOVC1NSUIuCi0uSVAgIi1JIgorb2YgdGhlIHN0YW5kYXJkIG5vdGlmaWNhdGlvbnMgZGVmaW5lZCBpbiB0aGUgRElTTUFOXC1FVkVOVFwtTUlCLgorLklQICJcLUkiCiBpbmRpY2F0ZXMgdGhhdCB0aGUgbW9uaXRvcmVkIGV4cHJlc3Npb24gc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlCiBzcGVjaWZpZWQgT0lEIGFzIGEgc2luZ2xlIGluc3RhbmNlLiAgQnkgZGVmYXVsdCwgdGhlIE9JRCB3aWxsCiBiZSB0cmVhdGVkIGFzIGEgd2lsZGNhcmRlZCBvYmplY3QsIGFuZCB0aGUgbW9uaXRvciBleHBhbmRlZAogdG8gY292ZXIgYWxsIG1hdGNoaW5nIGluc3RhbmNlcy4KLS5JUCAiLWkgT0lEIgotLklQICItbyBPSUQiCisuSVAgIlwtaSBPSUQiCisuSVAgIlwtbyBPSUQiCiBkZWZpbmUgYWRkaXRpb25hbCB2YXJiaW5kcyB0byBiZSBhZGRlZCB0byB0aGUgbm90aWZpY2F0aW9uIHBheWxvYWQKIHdoZW4gdGhpcyBtb25pdG9yIHRyaWdnZXIgZmlyZXMuCiBGb3IgYSB3aWxkY2FyZGVkIGV4cHJlc3Npb24sIHRoZSBzdWZmaXggb2YgdGhlIG1hdGNoZWQgaW5zdGFuY2UKLXdpbGwgYmUgYWRkZWQgdG8gYW55IE9JRHMgc3BlY2lmaWVkIHVzaW5nIFxmSS1vXGZSLCB3aGlsZSBPSURzCi1zcGVjaWZpZWQgdXNpbmcgXGZJLWlcZlIgd2lsbCBiZSB0cmVhdGVkIGFzIGV4YWN0IGluc3RhbmNlcy4KLUlmIHRoZSBcZkktSVxmUiBmbGFnIGlzIHNwZWNpZmllZCwgdGhlbiB0aGVyZSBpcyBubyBkaWZmZXJlbmNlCit3aWxsIGJlIGFkZGVkIHRvIGFueSBPSURzIHNwZWNpZmllZCB1c2luZyBcZklcLW9cZlIsIHdoaWxlIE9JRHMKK3NwZWNpZmllZCB1c2luZyBcZklcLWlcZlIgd2lsbCBiZSB0cmVhdGVkIGFzIGV4YWN0IGluc3RhbmNlcy4KK0lmIHRoZSBcZklcLUlcZlIgZmxhZyBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gZGlmZmVyZW5jZQogYmV0d2VlbiB0aGVzZSB0d28gb3B0aW9ucy4KIC5JUAogU2VlIFxmSXN0cmljdERpc21hblxmUiBmb3IgZGV0YWlscyBvZiB0aGUgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9uIHBheWxvYWRzLgotLklQICItciBGUkVRVUVOQ1kiCi1tb25pdG9ycyB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBldmVyeSBGUkVRVUVOQ1kgc2Vjb25kcy4KLUJ5IGRlZmF1bHQsIHRoZSBleHByZXNzaW9uIHdpbGwgYmUgZXZhbHVhdGVkIGV2ZXJ5IDYwMHMgKDEwIG1pbnV0ZXMpLiAKLS5JUCAiLVMiCisuSVAgIlwtciBGUkVRVUVOQ1kiCittb25pdG9ycyB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBldmVyeSBGUkVRVUVOQ1ksIHdoZXJlIEZSRVFVRU5DWSBpcyBpbgorc2Vjb25kcyBvciBvcHRpb25hbGx5IHN1ZmZpeGVkIGJ5IG9uZSBvZiBzIChmb3Igc2Vjb25kcyksIG0gKGZvcgorbWludXRlcyksIGggKGZvciBob3VycyksIGQgKGZvciBkYXlzKSwgb3IgdyAoZm9yIHdlZWtzKS4gIEJ5IGRlZmF1bHQsCit0aGUgZXhwcmVzc2lvbiB3aWxsIGJlIGV2YWx1YXRlZCBldmVyeSA2MDBzICgxMCBtaW51dGVzKS4KKy5JUCAiXC1TIgogaW5kaWNhdGVzIHRoYXQgdGhlIG1vbml0b3IgZXhwcmVzc2lvbiBzaG91bGQgXGZJbm90XGZSIGJlIGV2YWx1YXRlZAogd2hlbiB0aGUgYWdlbnQgZmlyc3Qgc3RhcnRzIHVwLiAgVGhlIGZpcnN0IGV2YWx1YXRpb24gd2lsbCBiZSBkb25lCiBvbmNlIHRoZSBmaXJzdCByZXBlYXQgaW50ZXJ2YWwgaGFzIGV4cGlyZWQuCi0uSVAgIi1zIgorLklQICJcLXMiCiBpbmRpY2F0ZXMgdGhhdCB0aGUgbW9uaXRvciBleHByZXNzaW9uIFxmSXNob3VsZFxmUiBiZSBldmFsdWF0ZWQgd2hlbiB0aGUKIGFnZW50IGZpcnN0IHN0YXJ0cyB1cC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgogLlJTCkBAIC04MDMsMjAgKzEwMjAsMjAgQEAKIE5vdGlmaWNhdGlvbnMgdHJpZ2dlcmVkIGJ5IHRoaXMgaW5pdGlhbCBldmFsdWF0aW9uIHdpbGwgYmUgc2VudAogXGZJYmVmb3JlXGZSIHRoZSBcZkNjb2xkU3RhcnRcZlIgdHJhcC4KIC5SRQotLklQICItdSBTRUNOQU1FIgorLklQICJcLXUgU0VDTkFNRSIKIHNwZWNpZmllcyBhIHNlY3VyaXR5IG5hbWUgdG8gdXNlIGZvciBzY2FubmluZyB0aGUgbG9jYWwgaG9zdCwKIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXGZJaXF1ZXJ5U2VjTmFtZVxmUi4KIE9uY2UgYWdhaW4sIHRoaXMgdXNlciBtdXN0IGJlIGV4cGxpY2l0bHkgY3JlYXRlZCBhbmQgZ2l2ZW4KIHN1aXRhYmxlIGFjY2VzcyByaWdodHMuCiAuUkUKLS5JUCAibm90aWZpY2F0aW9uRXZlbnQgRU5BTUUgTk9USUZJQ0FUSU9OIFstbV0gWy1pIE9JRCB8IC1vIE9JRCBdKiIKKy5JUCAibm90aWZpY2F0aW9uRXZlbnQgRU5BTUUgTk9USUZJQ0FUSU9OIFtcLW1dIFtcLWkgT0lEIHwgXC1vIE9JRCBdKiIKIGRlZmluZXMgYSBub3RpZmljYXRpb24gZXZlbnQgbmFtZWQgRU5BTUUuCiBUaGlzIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSBhIGdpdmVuIFxmSW1vbml0b3JcZlIgZW50cnkgYnkgc3BlY2lmeWluZwotdGhlIG9wdGlvbiBcZkktZSBFTkFNRVxmUiAoc2VlIGFib3ZlKS4KLU5PVElGSUNBVElPTiBzaG91bGQgYmUgdGhlIE9JRCBvZiB0aGUgTk9USUZJQ0FUSU9OLVRZUEUgZGVmaW5pdGlvbgordGhlIG9wdGlvbiBcZklcLWUgRU5BTUVcZlIgKHNlZSBhYm92ZSkuCitOT1RJRklDQVRJT04gc2hvdWxkIGJlIHRoZSBPSUQgb2YgdGhlIE5PVElGSUNBVElPTlwtVFlQRSBkZWZpbml0aW9uCiBmb3IgdGhlIG5vdGlmaWNhdGlvbiB0byBiZSBnZW5lcmF0ZWQuCiAuSVAKLUlmIHRoZSBcZkktbVxmUiBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBub3RpZmljYXRpb24gcGF5bG9hZCB3aWxsCitJZiB0aGUgXGZJXC1tXGZSIG9wdGlvbiBpcyBnaXZlbiwgdGhlIG5vdGlmaWNhdGlvbiBwYXlsb2FkIHdpbGwKIGluY2x1ZGUgdGhlIHN0YW5kYXJkIHZhcmJpbmRzIGFzIHNwZWNpZmllZCBpbiB0aGUgT0JKRUNUUyBjbGF1c2UKIG9mIHRoZSBub3RpZmljYXRpb24gTUlCIGRlZmluaXRpb24uCiBUaGlzIG9wdGlvbiBtdXN0IGNvbWUgXGZCYWZ0ZXJcZlIgdGhlIE5PVElGSUNBVElPTiBPSUQKQEAgLTgyNSwyNSArMTA0MiwyNSBAQAogYmUgbGlzdGVkIGV4cGxpY2l0bHkgKGVpdGhlciBoZXJlIG9yIGluIHRoZSBjb3JyZXNwb25kaW5nCiBcZkltb25pdG9yXGZSIGRpcmVjdGl2ZSkuCiAuSVAKLVRoZSBcZkktaSBPSURcZlIgYW5kIFxmSS1vIE9JRFxmUiBvcHRpb25zIHNwZWNpZnkgYWRkaXRpb25hbAorVGhlIFxmSVwtaSBPSURcZlIgYW5kIFxmSVwtbyBPSURcZlIgb3B0aW9ucyBzcGVjaWZ5IGFkZGl0aW9uYWwKIHZhcmJpbmRzIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBub3RpZmljYXRpb24gcGF5bG9hZCwgYWZ0ZXIgdGhlCiBzdGFuZGFyZCBsaXN0LgogSWYgdGhlIG1vbml0b3IgZW50cnkgdGhhdCB0cmlnZ2VyZWQgdGhpcyBldmVudCBpbnZvbHZlZCBhCiB3aWxkY2FyZGVkIGV4cHJlc3Npb24sIHRoZSBzdWZmaXggb2YgdGhlIG1hdGNoZWQgaW5zdGFuY2UKLXdpbGwgYmUgYWRkZWQgdG8gYW55IE9JRHMgc3BlY2lmaWVkIHVzaW5nIFxmSS1vXGZSLCB3aGlsZSBPSURzCi1zcGVjaWZpZWQgdXNpbmcgXGZJLWlcZlIgd2lsbCBiZSB0cmVhdGVkIGFzIGV4YWN0IGluc3RhbmNlcy4KLUlmIHRoZSBcZkktSVxmUiBmbGFnIHdhcyBzcGVjaWZpZWQgdG8gdGhlIFxmSW1vbml0b3JcZlIgZGlyZWN0aXZlLAord2lsbCBiZSBhZGRlZCB0byBhbnkgT0lEcyBzcGVjaWZpZWQgdXNpbmcgXGZJXC1vXGZSLCB3aGlsZSBPSURzCitzcGVjaWZpZWQgdXNpbmcgXGZJXC1pXGZSIHdpbGwgYmUgdHJlYXRlZCBhcyBleGFjdCBpbnN0YW5jZXMuCitJZiB0aGUgXGZJXC1JXGZSIGZsYWcgd2FzIHNwZWNpZmllZCB0byB0aGUgXGZJbW9uaXRvclxmUiBkaXJlY3RpdmUsCiB0aGVuIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28gb3B0aW9ucy4KLS5JUCAic2V0RXZlbnQgRU5BTUUgWy1JXSBPSUQgPSBWQUxVRSAiCisuSVAgInNldEV2ZW50IEVOQU1FIFtcLUldIE9JRCA9IFZBTFVFICIKIGRlZmluZXMgYSBzZXQgZXZlbnQgbmFtZWQgRU5BTUUsIGFzc2lnbmluZyB0aGUgKGludGVnZXIpIFZBTFVFCiB0byB0aGUgc3BlY2lmaWVkIE9JRC4KIFRoaXMgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIGEgZ2l2ZW4gXGZJbW9uaXRvclxmUiBlbnRyeSBieSBzcGVjaWZ5aW5nCi10aGUgb3B0aW9uIFxmSS1lIEVOQU1FXGZSIChzZWUgYWJvdmUpLgordGhlIG9wdGlvbiBcZklcLWUgRU5BTUVcZlIgKHNlZSBhYm92ZSkuCiAuSVAKIElmIHRoZSBtb25pdG9yIGVudHJ5IHRoYXQgdHJpZ2dlcmVkIHRoaXMgZXZlbnQgaW52b2x2ZWQgYQogd2lsZGNhcmRlZCBleHByZXNzaW9uLCB0aGUgc3VmZml4IG9mIHRoZSBtYXRjaGVkIGluc3RhbmNlCiB3aWxsIG5vcm1hbGx5IGJlIGFkZGVkIHRvIHRoZSBPSUQuCi1JZiB0aGUgXGZJLUlcZlIgZmxhZyB3YXMgc3BlY2lmaWVkIHRvIGVpdGhlciBvZiB0aGUKK0lmIHRoZSBcZklcLUlcZlIgZmxhZyB3YXMgc3BlY2lmaWVkIHRvIGVpdGhlciBvZiB0aGUKIFxmSW1vbml0b3JcZlIgb3IgXGZJc2V0RXZlbnRcZlIgZGlyZWN0aXZlcywgdGhlCiBzcGVjaWZpZWQgT0lEIHdpbGwgYmUgcmVnYXJkZWQgYXMgYW4gZXhhY3Qgc2luZ2xlIGluc3RhbmNlLgogLklQICJzdHJpY3REaXNtYW4geWVzIgpAQCAtODY0LDggKzEwODEsOCBAQAogLlJTCiAuSVAgIk5vdGU6IgogU3RyaWN0IERpc01hbiBvcmRlcmluZyBtYXkgcmVzdWx0IGluIGdlbmVyYXRpbmcgaW52YWxpZCBub3RpZmljYXRpb25zCi1wYXlsb2FkIGxpc3RzIGlmIHRoZSBcZklub3RpZmljYXRpb25FdmVudCAtblxmUiBmbGFnIGlzIHVzZWQgdG9nZXRoZXIKLXdpdGggXGZJbW9uaXRvciAtb1xmUiAob3IgXGZJLWlcZlIpIHZhcmJpbmQgb3B0aW9ucy4KK3BheWxvYWQgbGlzdHMgaWYgdGhlIFxmSW5vdGlmaWNhdGlvbkV2ZW50IFwtblxmUiBmbGFnIGlzIHVzZWQgdG9nZXRoZXIKK3dpdGggXGZJbW9uaXRvciBcLW9cZlIgKG9yIFxmSVwtaVxmUikgdmFyYmluZCBvcHRpb25zLgogLlJFCiAuSVAKIElmIG5vIFxmSW1vbml0b3JcZlIgZW50cmllcyBzcGVjaWZ5IHBheWxvYWQgdmFyYmluZHMsCkBAIC04ODIsMjUgKzEwOTksMjUgQEAKIG5vdGlmaWNhdGlvbkV2ZW50ICBsaW5rVXBUcmFwICAgIGxpbmtVcCAgIGlmSW5kZXggaWZBZG1pblN0YXR1cyBpZk9wZXJTdGF0dXMKIG5vdGlmaWNhdGlvbkV2ZW50ICBsaW5rRG93blRyYXAgIGxpbmtEb3duIGlmSW5kZXggaWZBZG1pblN0YXR1cyBpZk9wZXJTdGF0dXMKIAotbW9uaXRvciAgLXIgNjAgLWUgbGlua1VwVHJhcCAgICJHZW5lcmF0ZSBsaW5rVXAiIGlmT3BlclN0YXR1cyAhPSAyCi1tb25pdG9yICAtciA2MCAtZSBsaW5rRG93blRyYXAgIkdlbmVyYXRlIGxpbmtEb3duIiBpZk9wZXJTdGF0dXMgPT0gMgorbW9uaXRvciAgXC1yIDYwIFwtZSBsaW5rVXBUcmFwICAgIkdlbmVyYXRlIGxpbmtVcCIgaWZPcGVyU3RhdHVzICE9IDIKK21vbml0b3IgIFwtciA2MCBcLWUgbGlua0Rvd25UcmFwICJHZW5lcmF0ZSBsaW5rRG93biIgaWZPcGVyU3RhdHVzID09IDIKIC5maQogLlJFCiAuSVAgImRlZmF1bHRNb25pdG9ycyB5ZXMiCiB3aWxsIGNvbmZpZ3VyZSB0aGUgRXZlbnQgTUlCIHRhYmxlcyB0byBtb25pdG9yIHRoZSB2YXJpb3VzCi1cZkNVQ0QtU05NUC1NSUJcZlIgdGFibGVzIGZvciBwcm9ibGVtcyAoYXMgaW5kaWNhdGVkIGJ5CitcZkNVQ0RcLVNOTVBcLU1JQlxmUiB0YWJsZXMgZm9yIHByb2JsZW1zIChhcyBpbmRpY2F0ZWQgYnkKIHRoZSBhcHByb3ByaWF0ZSBcZkN4eEVyckZsYWdcZlIgY29sdW1uIG9iamVjdHMpLgogLklQCiBUaGlzIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgY29uZmlndXJhdGlvbjoKIC5SUwogLklQCiAubmYKLW1vbml0b3IJLW8gcHJOYW1lcyAtbyBwckVyck1lc3NhZ2UgInByb2Nlc3MgdGFibGUiIHByRXJyb3JGbGFnICE9IDAKLW1vbml0b3IJLW8gbWVtRXJyb3JOYW1lIC1vIG1lbVN3YXBFcnJvck1zZyAibWVtb3J5IiBtZW1Td2FwRXJyb3IgIT0gMAotbW9uaXRvcgktbyBleHROYW1lcyAtbyBleHRPdXRwdXQgImV4dFRhYmxlIiBleHRSZXN1bHQgIT0gMAotbW9uaXRvcgktbyBkc2tQYXRoIC1vIGRza0Vycm9yTXNnICJkc2tUYWJsZSIgZHNrRXJyb3JGbGFnICE9IDAKLW1vbml0b3IJLW8gbGFOYW1lcyAtbyBsYUVyck1lc3NhZ2UgICJsYVRhYmxlIiBsYUVycm9yRmxhZyAhPSAwCi1tb25pdG9yCS1vIGZpbGVOYW1lIC1vIGZpbGVFcnJvck1zZyAgImZpbGVUYWJsZSIgZmlsZUVycm9yRmxhZyAhPSAwCittb25pdG9yCVwtbyBwck5hbWVzIFwtbyBwckVyck1lc3NhZ2UgInByb2Nlc3MgdGFibGUiIHByRXJyb3JGbGFnICE9IDAKK21vbml0b3IJXC1vIG1lbUVycm9yTmFtZSBcLW8gbWVtU3dhcEVycm9yTXNnICJtZW1vcnkiIG1lbVN3YXBFcnJvciAhPSAwCittb25pdG9yCVwtbyBleHROYW1lcyBcLW8gZXh0T3V0cHV0ICJleHRUYWJsZSIgZXh0UmVzdWx0ICE9IDAKK21vbml0b3IJXC1vIGRza1BhdGggXC1vIGRza0Vycm9yTXNnICJkc2tUYWJsZSIgZHNrRXJyb3JGbGFnICE9IDAKK21vbml0b3IJXC1vIGxhTmFtZXMgXC1vIGxhRXJyTWVzc2FnZSAgImxhVGFibGUiIGxhRXJyb3JGbGFnICE9IDAKK21vbml0b3IJXC1vIGZpbGVOYW1lIFwtbyBmaWxlRXJyb3JNc2cgICJmaWxlVGFibGUiIGZpbGVFcnJvckZsYWcgIT0gMAogLmZpCiAuUkUKIC5QUApAQCAtOTE3LDcgKzExMzQsOSBAQAogVGhlcmUgYXJlIHRocmVlIHdheXMgb2Ygc3BlY2lmeWluZyB0aGUgc2NoZWR1bGVkIGFjdGlvbjoKIC5JUCAicmVwZWF0IEZSRVFVRU5DWSBPSUQgPSBWQUxVRSIKIGNvbmZpZ3VyZXMgYSBTRVQgYXNzaWdubWVudCBvZiB0aGUgKGludGVnZXIpIFZBTFVFIHRvIHRoZSBNSUIgaW5zdGFuY2UKLU9JRCwgdG8gYmUgcnVuIGV2ZXJ5IEZSRVFVRU5DWSBzZWNvbmRzLgorT0lELCB0byBiZSBydW4gZXZlcnkgRlJFUVVFTkNZIHNlY29uZHMsIHdoZXJlIEZSRVFVRU5DWSBpcyBpbgorc2Vjb25kcyBvciBvcHRpb25hbGx5IHN1ZmZpeGVkIGJ5IG9uZSBvZiBzIChmb3Igc2Vjb25kcyksIG0gKGZvcgorbWludXRlcyksIGggKGZvciBob3VycyksIGQgKGZvciBkYXlzKSwgb3IgdyAoZm9yIHdlZWtzKS4KIC5JUCAiY3JvbiBNSU5VVEUgSE9VUiBEQVkgTU9OVEggV0VFS0RBWSAgT0lEID0gVkFMVUUiCiBjb25maWd1cmVzIGEgU0VUIGFzc2lnbm1lbnQgb2YgdGhlIChpbnRlZ2VyKSBWQUxVRSB0byB0aGUgTUlCIGluc3RhbmNlCiBPSUQsIHRvIGJlIHJ1biBhdCB0aGUgdGltZXMgc3BlY2lmaWVkIGJ5IHRoZSBmaWVsZHMgTUlOVVRFIHRvIFdFRUtEQVkuCkBAIC05MzUsNiArMTE1NCw3MCBAQAogY29uZmlndXJlcyBhIG9uZS1zaG90IFNFVCBhc3NpZ25tZW50LCB0byBiZSBydW4gYXQgdGhlIGZpcnN0IG1hdGNoaW5nCiB0aW1lIGFzIHNwZWNpZmllZCBieSB0aGUgZmllbGRzIE1JTlVURSB0byBXRUVLREFZLiAgVGhlIGludGVycHJldGF0aW9uCiBvZiB0aGVzZSBmaWVsZHMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBmb3IgdGhlIFxmSWNyb25cZlIgZGlyZWN0aXZlLgorLlNTICJEYXRhIERlbGl2ZXJ5IHZpYSBOb3RmaWljYXRpb25zIgorTm90ZTogdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZQorXGZJZGVsaXZlci9kZWxpdmVyQnlOb3RpZnlcZlIgbWliIG1vZHVsZSB3YXMgY29tcGxpZWQgaW4gdG8gdGhlIGFnZW50CisuUFAKK0luIHNvbWUgc2l0dWF0aW9ucyBpdCBtYXkgYmUgYWR2YW50YWdlb3VzIHRvIGRlbGl2ZXIgU05NUCBkYXRhIG92ZXIKK1NOTVAgTm90aWZpY2F0aW9ucyAoVFJBUHMgYW5kIElORk9STXMpIHJhdGhlciB0aGFuIHRoZSB0eXBpY2FsIHByb2Nlc3MKK29mIGhhdmluZyB0aGUgbWFuYWdlciBpc3N1ZSByZXF1ZXN0cyBmb3IgdGhlIGRhdGEgKHZpYSBHRVRzIGFuZAorR0VUTkVYVHMpLiAgUmVhc29ucyBmb3IgZG9pbmcgdGhpcyBhcmUgbnVtZXJvdXMsIGJ1dCBmcmVxdWVudGx5IGNvcm5lcgorY2FzZXMuICBUaGUgbW9zdCBjb21tb24gcmVhc29uIGZvciB3YW50aW5nIHRoaXMgYmVoYXZpb3VyIG1pZ2h0IGJlIHRvCittb25pdG9yIGRldmljZXMgdGhhdCByZXNpZGUgYmVoaW5kIE5BVHMgb3IgRmlyZXdhbGxzIHRoYXQgcHJldmVudAoraW5jb21pbmcgU05NUCB0cmFmZmljLgorLlBQCitJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBhbHRob3VnaCBtb3N0IG1hbmFnZW1lbnQgc29mdHdhcmUgaXMgY2FwYWJsZQorb2YgbG9nZ2luZyBub3RpZmljYXRpb25zLCB2ZXJ5IGxpdHRsZSAoaWYgYW55KSBtYW5hZ2VtZW50IHNvZnR3YXJlCit3aWxsIHVwZGF0ZWQgdGhlaXIgImtub3dsZWRnZSBkYXRhYmFzZSIgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIFNOTVAKK25vdGlmaWNhdGlvbnMuICBJRSwgaXQgd29uJ3QgKGZvciBleGFtcGxlKSB1cGRhdGUgdGhlIGludGVyZmFjZQordHJhZmZpYyBjb3VudGVyIGhpc3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb2R1Y2UgZ3JhcGhzLiAgTW9zdCBsYXJnZXIKK25ldHdvcmsgbWFuYWdlbWVudCBwYWNrYWdlcyBoYXZlIGEgc2VwYXJhdGUgZGF0YWJhc2UgZm9yIHN0b3JpbmcgZGF0YQorcmVjZWl2ZWQgdmlhIFNOTVAgcmVxdWVzdHMgKEdFVHMgYW5kIEdFVE5FWFRzKSB2cyB0aG9zZSByZWNlaXZlZCBmcm9tCitub3RpZmljYXRpb25zLiAgUmVzZWFyY2hpbmcgdGhlIGNhcGFiaWxpdGllcyBvZiB5b3VyIG1hbmFnZW1lbnQKK3N0YXRpb24gc29mdHdhcmUgaXMgcmVxdWlyZWQgYmVmb3JlIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3aWxsCitzb2x2ZSB5b3VyIGRhdGEgZGVsaXZlcnkgcmVxdWlyZW1lbnRzLgorLlBQCitOb3RpZmljYXRpb25zIGdlbmVyYXRlZCB2aWEgdGhpcyBtZWNoYW5pc20gd2lsbCBiZSBzZW50IHRvIHRoZQorc3RhbmRhcmQgc2V0IG9mIGNvbmZpZ3VyZWQgbm90aWZpY2F0aW9uIHRhcmdldHMuICBTZWUgdGhlCisiTm90aWZpY2F0aW9uIEhhbmRsaW5nIiBzZWN0aW9uIG9mIHRoaXMgZG9jdW1lbnQgZm9yIGZ1cnRoZXIKK2luZm9ybWF0aW9uLgorLklQICJkZWxpdmVyQnlOb3RpZnkgW1wtcF0gW1wtbV0gW1wtcyBNQVhTSVpFXSBGUkVRVUVOQ1kgT0lEIgorVGhpcyBkaXJlY3RpdmUgdGVsbHMgdGhlIFNOTVAgYWdlbnQgdG8gc2VsZi13YWxrIHRoZSBcZklPSURcZlIsCitjb2xsZWN0IGFsbCB0aGUgZGF0YSBhbmQgc2VuZCBpdCBvdXQgZXZlcnkgXGZJRlJFUVVFTkNZXGZSIHNlY29uZHMsCit3aGVyZSBGUkVRVUVOQ1kgaXMgaW4gc2Vjb25kcyBvciBvcHRpb25hbGx5IHN1ZmZpeGVkIGJ5IG9uZSBvZiBzIChmb3IKK3NlY29uZHMpLCBtIChmb3IgbWludXRlcyksIGggKGZvciBob3VycyksIGQgKGZvciBkYXlzKSwgb3IgdyAoZm9yCit3ZWVrcykuICBCeSBkZWZhdWx0IHNjYWxhcnMgYXJlIGluY2x1ZGVkIGluIHRoZSBub3RpZmljYXRpb24gdGhhdAorc3BlY2lmeSB0aGUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb24gd2lsbCBiZSBzZW50ICh1bmxlc3MgdGhlCitcZklcLXBcZlIgb3B0aW9uIGlzIHNwZWNpZmllZCkgYW5kIHdoaWNoIG1lc3NhZ2UgbnVtYmVyIG9mIGhvdyBtYW55CittZXNzYWdlcyBhIHBhcnRpY3VsYXIgbm90aWZpY2F0aW9uIGlzICh1bmxlc3MgXGZJXC1tXGZSIGlzIHNwZWNpZmllZCkuCitUbyBicmVhayB0aGUgbm90aWZpY2F0aW9ucyBpbnRvIG1hbmFnZWFibGUgcGFja2V0IHNpemVzLCB1c2UgdGhlCitcZklcLXNcZlIgZmxhZyB0byBzcGVjaWZ5IHRoZSBhcHByb3hpbWF0ZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0CithIG5vdGlmaWNhdGlvbiBtZXNzYWdlIHNob3VsZCBiZSBsaW1pdGVkIHRvLiAgSWYgbW9yZSB0aGFuCitcZklNQVhTSVpFXGZSIG9mIGJ5dGVzIGlzIG5lZWRlZCB0aGVuIG11bHRpcGxlIG5vdGlmaWNhdGlvbnMgd2lsbCBiZQorc2VudCB0byBkZWxpdmVyIHRoZSBkYXRhLiAgTm90ZSB0aGF0IHRoZSBjYWxjdWxhdGlvbnMgZm9yIGVuc3VyaW5nIHRoZQorbWF4aW11bSBzaXplIGlzIG1ldCBhcmUgYXBwcm94aW1hdGlvbnMgYW5kIHRodXMgaXQgY2FuIGJlIGFic29sdXRlbHkKK2d1YXJhbnRlZWQgdGhleSdsbCBiZSB1bmRlciB0aGF0IHNpemUsIHNvIGxlYXZlIGEgcGFkZGluZyBidWZmZXIgaWYgaXQKK2lzIGNyaXRpY2FsIHRoYXQgeW91IGF2b2lkIGZyYWdtZW50YXRpb24uICBBIHZhbHVlIG9mIFwtMSBpbmRpY2F0ZXMKK2ZvcmNlIGV2ZXJ5dGhpbmcgaW50byBhIHNpbmdsZSBtZXNzYWdlIG5vIG1hdHRlciBob3cgYmlnIGl0IGlzLgorLklQCitFeGFtcGxlIHVzYWdlOiB0aGUgZm9sbG93aW5nIHdpbGwgZGVsaXZlciB0aGUgY29udGVudHMgb2YgdGhlIGlmVGFibGUKK29uY2UgYW4gaG91ciBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzeXN0ZW0gZ3JvdXAgb25jZSBldmVyeSAyIGhvdXJzOgorLlJTCisubmYKKworZGVsaXZlckJ5Tm90aWZ5IDM2MDAgaWZUYWJsZQorZGVsaXZlckJ5Tm90aWZ5IDcyMDAgc3lzdGVtCisuZmkKKy5SRQorLklQICJkZWxpdmVyQnlOb3RpZnlNYXhQYWNrZXRTaXplIFNJWkVJTkJZVEVTIgorU2V0cyB0aGUgZGVmYXVsdCBub3RpZmljYXRpb24gc2l6ZSBsaW1pdCAoc2VlIHRoZSBcZklcLXNcZlIgZmxhZyBhYm92ZSkuCisuSVAgImRlbGl2ZXJCeU5vdGlmeU9pZCBPSUQiCisuSVAgImRlbGl2ZXJCeU5vdGlmeUZyZXF1ZW5jeU9pZCBPSUQiCisuSVAgImRlbGl2ZXJCeU5vdGlmeU1lc3NhZ2VOdW1iZXJPaWQgT0lEIgorLklQICJkZWxpdmVyQnlOb3RpZnlNYXhNZXNzYWdlTnVtYmVyT2lkIE9JRCIKK1RoZXNlIHNldCB0aGUgZGF0YSBPSUQgdGhhdCB0aGUgbm90aWZpY2F0aW9uIHdpbGwgYmUgc2VudCB1bmRlciwgdGhlCitzY2FsYXIgT0lELCB0aGUgbWVzc2FnZSBudW1iZXIgT0lELCBhbmQgdGhlIG1heGltdW0gbWVzc2FnZSBudW1iZXIKK09JRC4gIFRoZXNlIGRlZmF1bHQgdG8gb2JqZWN0cyBpbiB0aGUgTkVUXC1TTk1QXC1QRVJJT0RJQ1wtTk9USUZZXC1NSUIuCiAuU0ggIkVYVEVORElORyBBR0VOVCBGVU5DVElPTkFMSVRZIgogT25lIG9mIHRoZSBmaXJzdCBkaXN0aW5ndWlzaGluZyBmZWF0dXJlcyBvZiB0aGUgb3JpZ2luYWwgVUNEIHN1aXRlIHdhcwogdGhlIGFiaWxpdHkgdG8gZXh0ZW5kIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBhZ2VudCAtIG5vdCBqdXN0IGJ5CkBAIC05NTMsNyArMTIzNiw3IEBACiBTTk1QIG9wZXJhdGlvbnMsIG9yIGNvbmZvcm0gdG8gYW55IHBhcnRpY3VsYXIgYmVoYXZpb3VyIC0gdGhlIE1JQgogc3RydWN0dXJlcyBhcmUgZGVzaWduZWQgdG8gYWNjb21tb2RhdGUgYW55IGZvcm0gb2YgY29tbWFuZCBvdXRwdXQuCiBVc2Ugb2YgdGhpcyBtZWNoYW5pc20gcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCi1cZkl1Y2Qtc25tcC9leHRlbnNpYmxlXGZSIGFuZC9vciBcZklhZ2VudC9leHRlbmRcZlIgbW9kdWxlcyAod2hpY2gKK1xmSXVjZFwtc25tcC9leHRlbnNpYmxlXGZSIGFuZC9vciBcZklhZ2VudC9leHRlbmRcZlIgbW9kdWxlcyAod2hpY2gKIGFyZSBib3RoIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbikuCiAuSVAgImV4ZWMgW01JQk9JRF0gTkFNRSBQUk9HIEFSR1MiCiAuSVAgInNoIFtNSUJPSURdIE5BTUUgUFJPRyBBUkdTIgpAQCAtMTAyNyw3ICsxMzEwLDcgQEAKIFxmSWV4dGVuZFxmUiBlbnRyeSwgYW5kIGNhbiBhcHBlYXIgb24gaXRzIG93bi4KIC5QUAogQm90aCBcZklleHRlbmRcZlIgYW5kIFxmSWV4dGVuZGZpeFxmUiBkaXJlY3RpdmVzIGNhbiBiZSBjb25maWd1cmVkCi1keW5hbWljYWxseSwgdXNpbmcgU05NUCBTRVQgcmVxdWVzdHMgdG8gdGhlIE5FVC1TTk1QLUVYVEVORC1NSUIuCitkeW5hbWljYWxseSwgdXNpbmcgU05NUCBTRVQgcmVxdWVzdHMgdG8gdGhlIE5FVFwtU05NUFwtRVhURU5EXC1NSUIuCiAuU1MgIk1JQi1TcGVjaWZpYyBFeHRlbnNpb24gQ29tbWFuZHMiCiBUaGUgZmlyc3QgZ3JvdXAgb2YgZXh0ZW5zaW9uIGRpcmVjdGl2ZXMgaW52b2tlIGFyYml0cmFyeSBjb21tYW5kcywKIGFuZCByZWx5IG9uIHRoZSBNSUIgc3RydWN0dXJlIChhbmQgbWFuYWdlbWVudCBhcHBsaWNhdGlvbnMpIGhhdmluZwpAQCAtMTAzOCwxNyArMTMyMSwxNyBAQAogVGhlIHJlbWFpbmluZyBleHRlbnNpb24gbWVjaGFuaXNtcyBhcmUgYWxsIGNvbmNlcm5lZCB3aXRoIHN1Y2gKIE1JQi1zcGVjaWZpYyBzaXR1YXRpb25zIC0gc3RhcnRpbmcgd2l0aCAicGFzcy10aHJvdWdoIiBzY3JpcHRzLgogVXNlIG9mIHRoaXMgbWVjaGFuaXNtIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQotXGZJdWNkLXNubXAvcGFzc1xmUiBhbmQgXGZJdWNkLXNubXAvcGFzc19wZXJzaXN0XGZSIG1vZHVsZXMgKHdoaWNoCitcZkl1Y2RcLXNubXAvcGFzc1xmUiBhbmQgXGZJdWNkXC1zbm1wL3Bhc3NfcGVyc2lzdFxmUiBtb2R1bGVzICh3aGljaAogYXJlIGJvdGggaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9uKS4KLS5JUCAicGFzcyBbLXAgcHJpb3JpdHldIE1JQk9JRCBQUk9HIgorLklQICJwYXNzIFtcLXAgcHJpb3JpdHldIE1JQk9JRCBQUk9HIgogd2lsbCBwYXNzIGNvbnRyb2wgb2YgdGhlIHN1YnRyZWUgcm9vdGVkIGF0IE1JQk9JRCB0byB0aGUgc3BlY2lmaWVkCiBQUk9HIGNvbW1hbmQuICBHRVQgYW5kIEdFVE5FWFQgcmVxdWVzdHMgZm9yIE9JRHMgd2l0aGluIHRoaXMgdHJlZSB3aWxsCiB0cmlnZ2VyIHRoaXMgY29tbWFuZCwgY2FsbGVkIGFzOgogLlJTCiAuSVAKLVBST0cgLWcgT0lECitQUk9HIFwtZyBPSUQKIC5JUAotUFJPRyAtbiBPSUQKK1BST0cgXC1uIE9JRAogLlJFCiAuSVAKIHJlc3BlY3RpdmVseSwgd2hlcmUgT0lEIGlzIHRoZSByZXF1ZXN0ZWQgT0lELgpAQCAtMTA3Niw3ICsxMzU5LDcgQEAKIEEgU0VUIHJlcXVlc3Qgd2lsbCByZXN1bHQgaW4gdGhlIGNvbW1hbmQgYmVpbmcgY2FsbGVkIGFzOgogLlJTCiAuSVAKLVBST0cgLXMgT0lEIFRZUEUgVkFMVUUKK1BST0cgXC1zIE9JRCBUWVBFIFZBTFVFCiAuUkUKIC5JUAogd2hlcmUgVFlQRSBpcyBvbmUgb2YgdGhlIHRva2VucyBsaXN0ZWQgYWJvdmUsIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgdGhlCkBAIC0xMTEwLDkgKzEzOTMsOSBAQAogYSBzZXBhcmF0ZSBpbnZvY2F0aW9uIG9mIHRoZSBjb21tYW5kLgogLklQCiBUaGUgZGVmYXVsdCByZWdpc3RyYXRpb24gcHJpb3JpdHkgaXMgMTI3LiAgVGhpcyBjYW4gYmUKLWNoYW5nZWQgYnkgc3VwcGx5aW5nIHRoZSBvcHRpb25hbCAtcCBmbGFnLCB3aXRoIGxvd2VyIHByaW9yaXR5CitjaGFuZ2VkIGJ5IHN1cHBseWluZyB0aGUgb3B0aW9uYWwgXC1wIGZsYWcsIHdpdGggbG93ZXIgcHJpb3JpdHkKIHJlZ2lzdHJhdGlvbnMgYmVpbmcgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIGhpZ2hlciBwcmlvcml0eSB2YWx1ZXMuCi0uSVAgInBhc3NfcGVyc2lzdCBbLXAgcHJpb3JpdHldIE1JQk9JRCBQUk9HIgorLklQICJwYXNzX3BlcnNpc3QgW1wtcCBwcmlvcml0eV0gTUlCT0lEIFBST0ciCiB3aWxsIGFsc28gcGFzcyBjb250cm9sIG9mIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCBNSUJPSUQgdG8gdGhlIHNwZWNpZmllZAogUFJPRyBjb21tYW5kLiAgSG93ZXZlciB0aGlzIGNvbW1hbmQgd2lsbCBjb250aW51ZSB0byBydW4gYWZ0ZXIgdGhlIGluaXRpYWwKIHJlcXVlc3QgaGFzIGJlZW4gYW5zd2VyZWQsIHNvIHN1YnNlcXVlbnQgcmVxdWVzdHMgY2FuIGJlIHByb2Nlc3NlZCB3aXRob3V0CkBAIC0xMTM1LDE4ICsxNDE4LDE4IEBACiBJZiB0aGUgYXNzaWdubWVudCBpcyBzdWNjZXNzZnVsLCB0aGUgY29tbWFuZCBzaG91bGQgcHJpbnQKICJET05FXFxuIiB0byBzdGRvdXQuCiBFcnJvcnMgc2hvdWxkIGJlIGluZGljYXRlZCBieSB3cml0aW5nIG9uZSBvZiB0aGUgc3RyaW5ncwotLkIgbm90LXdyaXRhYmxlLCAKLS5CIHdyb25nLXR5cGUsCi0uQiB3cm9uZy1sZW5ndGgsCi0uQiB3cm9uZy12YWx1ZQorLkIgbm90XC13cml0YWJsZSwgCisuQiB3cm9uZ1wtdHlwZSwKKy5CIHdyb25nXC1sZW5ndGgsCisuQiB3cm9uZ1wtdmFsdWUKIG9yCi0uQiBpbmNvbnNpc3RlbnQtdmFsdWUKKy5CIGluY29uc2lzdGVudFwtdmFsdWUKIHRvIHN0ZG91dCwKIGFuZCB0aGUgYWdlbnQgd2lsbCBnZW5lcmF0ZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgcmVzcG9uc2UuCiBJbiBlaXRoZXIgY2FzZSwgdGhlIGNvbW1hbmQgc2hvdWxkIGNvbnRpbnVlIHJ1bm5pbmcuCiAuSVAKIFRoZSByZWdpc3RyYXRpb24gcHJpb3JpdHkgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIG9wdGlvbmFsCi0tcCBmbGFnLCBqdXN0IGFzIGZvciB0aGUgXGZJcGFzc1xmUiBkaXJlY3RpdmUuCitcLXAgZmxhZywganVzdCBhcyBmb3IgdGhlIFxmSXBhc3NcZlIgZGlyZWN0aXZlLgogLlBQCiBcZklwYXNzXGZSIGFuZCBcZklwYXNzX3BlcnNpc3RcZlIgZXh0ZW5zaW9ucyBjYW4gb25seSBiZSBjb25maWd1cmVkIHZpYSB0aGUKIHNubXBkLmNvbmYgZmlsZS4gIFRoZXkgY2Fubm90IGJlIHNldCB1cCB2aWEgU05NUCBTRVQgcmVxdWVzdHMuCkBAIC0xMTY0LDcgKzE0NDcsNyBAQAogLlBQCiBVc2Ugb2YgdGhpcyBtZWNoYW5pc20gcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlIGVtYmVkZGVkCiBwZXJsIG1lY2hhbmlzbSwgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQgZW52aXJvbm1lbnQuIEl0Ci1tdXN0IGJlIGV4cGxpY2l0bHkgaW5jbHVkZWQgYnkgc3BlY2lmeWluZyB0aGUgJy0tZW5hYmxlLWVtYmVkZGVkLXBlcmwnCittdXN0IGJlIGV4cGxpY2l0bHkgaW5jbHVkZWQgYnkgc3BlY2lmeWluZyB0aGUgJ1wtXC1lbmFibGVcLWVtYmVkZGVkXC1wZXJsJwogb3B0aW9uIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IHdoZW4gdGhlIHBhY2thZ2UgaXMgZmlyc3QgYnVpbHQuCiAuUFAKIElmIGVuYWJsZWQsIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlcyB3aWxsIGJlIHJlY29nbmlzZWQ6CkBAIC0xMTg5LDcgKzE0NzIsNyBAQAogLm5mCiBcZkNwZXJsIHVzZSBEYXRhOjpEdW1wZXI7CiBwZXJsIHN1YiBteXJvdXRpbmUgIHsgcHJpbnQgImdvdCBjYWxsZWQ6ICIsRHVtcGVyKEBfKSwiXFxuIjsgfQotcGVybCAkYWdlbnQtPnJlZ2lzdGVyKCdteWxpbmsnLCAnLjEuMy42LjEuODc2NScsIFxcJm15cm91dGluZSk7XGZSCitwZXJsICRhZ2VudFwtPnJlZ2lzdGVyKCdteWxpbmsnLCAnLjEuMy42LjEuODc2NScsIFxcJm15cm91dGluZSk7XGZSCiAuZmkKIC5SRQogLlJFCkBAIC0xMjExLDcgKzE0OTQsNyBAQAogd2hlbiB0aGUgc3VpdGUgd2FzIGZpcnN0IGJ1aWx0LiAgU3VjaCBpbXBsZW1lbnRhdGlvbiBtb2R1bGVzIGNhbiBhbHNvIGJlCiBjb21waWxlZCBpbmRlcGVuZGVudGx5IGFuZCBsb2FkZWQgaW50byB0aGUgcnVubmluZyBhZ2VudCBvbmNlIGl0IGhhcwogc3RhcnRlZC4gIFVzZSBvZiB0aGlzIG1lY2hhbmlzbSByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKLVxmSXVjZC1zbm1wL2RsbW9kXGZSIG1vZHVsZSAod2hpY2ggaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgZGVmYXVsdAorXGZJdWNkXC1zbm1wL2RsbW9kXGZSIG1vZHVsZSAod2hpY2ggaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgZGVmYXVsdAogYnVpbGQgY29uZmlndXJhdGlvbikuCiAuSVAgImRsbW9kIE5BTUUgUEFUSCIKIHdpbGwgbG9hZCB0aGUgc2hhcmVkIG9iamVjdCBtb2R1bGUgZnJvbSB0aGUgZmlsZSBQQVRIIChhbiBhYnNvbHV0ZQpAQCAtMTIyNCw3ICsxNTA3LDcgQEAKIC5SRQogLlBQCiBUaGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGFsc28gYmUgY29uZmlndXJlZCB1c2luZyBTTk1QIFNFVCByZXF1ZXN0cwotdG8gdGhlIFVDRC1ETE1PRC1NSUIuCit0byB0aGUgVUNEXC1ETE1PRFwtTUlCLgogLlNTICJQcm94eSBTdXBwb3J0IgogQW5vdGhlciBtZWNoYW5pc20gZm9yIGV4dGVuZGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYWdlbnQKIGlzIHRvIHBhc3Mgc2VsZWN0ZWQgcmVxdWVzdHMgKG9yIHNlbGVjdGVkIHZhcmJpbmRzKSB0byBhbm90aGVyCkBAIC0xMjMzLDkgKzE1MTYsOSBAQAogVGhpcyBjYW4gYmUgdmlld2VkIGVpdGhlciBhcyB0aGUgbWFpbiBhZ2VudCBkZWxlZ2F0aW5nIHJlcXVlc3RzIHRvCiB0aGUgcmVtb3RlIG9uZSwgb3IgYWN0aW5nIGFzIGEgcHJveHkgZm9yIGl0LgogVXNlIG9mIHRoaXMgbWVjaGFuaXNtIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQotXGZJdWNkLXNubXAvcHJveHlcZlIgbW9kdWxlICh3aGljaCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQorXGZJdWNkXC1zbm1wL3Byb3h5XGZSIG1vZHVsZSAod2hpY2ggaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbikuCi0uSVAgInByb3h5IFstQ24gQ09OVEVYVE5BTUVdIFtTTk1QQ01EX0FSR1NdIEhPU1QgT0lEIFtSRU1PVEVPSURdIgorLklQICJwcm94eSBbXC1DbiBDT05URVhUTkFNRV0gW1NOTVBDTURfQVJHU10gSE9TVCBPSUQgW1JFTU9URU9JRF0iCiB3aWxsIHBhc3MgYW55IGluY29taW5nIHJlcXVlc3RzIHVuZGVyIE9JRCB0byB0aGUgYWdlbnQgbGlzdGVuaW5nCiBvbiB0aGUgcG9ydCBzcGVjaWZpZWQgYnkgdGhlIHRyYW5zcG9ydCBhZGRyZXNzIEhPU1QuCiBTZWUgdGhlIHNlY3Rpb24gCkBAIC0xMjc0LDcgKzE1NTcsNyBAQAogd2l0aCBTTVVYLWJhc2VkIHN1YmFnZW50cyAoc3VjaCBhcyBcZklnYXRlZFxmUiwgXGZJemVicmFcZlIgb3IgXGZJcXVhZ2dhXGZSKS4KIFVzZSBvZiB0aGlzIG1lY2hhbmlzbSByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKIFxmSXNtdXhcZlIgbW9kdWxlLCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZCBlbnZpcm9ubWVudCwgYW5kCi1tdXN0IGJlIGV4cGxpY2l0bHkgaW5jbHVkZWQgYnkgc3BlY2lmeWluZyB0aGUgJy0td2l0aC1taWItbW9kdWxlcz1zbXV4JworbXVzdCBiZSBleHBsaWNpdGx5IGluY2x1ZGVkIGJ5IHNwZWNpZnlpbmcgdGhlICdcLVwtd2l0aFwtbWliXC1tb2R1bGVzPXNtdXgnCiBvcHRpb24gdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2hlbiB0aGUgcGFja2FnZSBpcyBmaXJzdCBidWlsdC4KIC5SUwogLklQICJOb3RlOiIKQEAgLTEzMDEsNyArMTU4NCw3IEBACiAuSVAgInNtdXhzb2NrZXQgPElQdjQtYWRkcmVzcz4iCiBkZWZpbmVzIHRoZSBJUHY0IGFkZHJlc3MgZm9yIFNNVVggcGVlcnMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgTmV0LVNOTVAgYWdlbnQuCiBUaGUgZGVmYXVsdCBpcyB0byBsaXN0ZW4gb24gYWxsIElQdjQgaW50ZXJmYWNlcyAoIjAuMC4wLjAiKSwgdW5sZXNzIHRoZSAKLXBhY2thZ2UgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoICItLWVuYWJsZS1sb2NhbC1zbXV4IiBhdCBidWlsZCB0aW1lLCB3aGljaCAKK3BhY2thZ2UgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoICJcLVwtZW5hYmxlXC1sb2NhbFwtc211eCIgYXQgYnVpbGQgdGltZSwgd2hpY2ggCiBjYXVzZXMgaXQgdG8gb25seSBsaXN0ZW4gb24gMTI3LjAuMC4xIGJ5IGRlZmF1bHQuIFNNVVggdXNlcyB0aGUgd2VsbC1rbm93bgogVENQIHBvcnQgMTk5LgogLlBQCkBAIC0xMzIwLDcgKzE2MDMsNyBAQAogLklQICJtYXN0ZXIgYWdlbnR4Igogd2lsbCBlbmFibGUgdGhlIEFnZW50WCBmdW5jdGlvbmFsaXR5IGFuZCBjYXVzZSB0aGUgYWdlbnQgdG8KIHN0YXJ0IGxpc3RlbmluZyBmb3IgaW5jb21pbmcgQWdlbnRYIHJlZ2lzdHJhdGlvbnMuCi1UaGlzIGNhbiBhbHNvIGJlIGFjdGl2YXRlZCBieSBzcGVjaWZ5aW5nIHRoZSAnLXgnIGNvbW1hbmQtbGluZQorVGhpcyBjYW4gYWxzbyBiZSBhY3RpdmF0ZWQgYnkgc3BlY2lmeWluZyB0aGUgJ1wteCcgY29tbWFuZC1saW5lCiBvcHRpb24gKHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgbGlzdGVuaW5nIHNvY2tldCkuCiAuSVAgImFnZW50WFBlcm1zIFNPQ0tQRVJNUyBbRElSUEVSTVMgW1VTRVJ8VUlEIFtHUk9VUHxHSURdXV0iCiBEZWZpbmVzIHRoZSBwZXJtaXNzaW9ucyBhbmQgb3duZXJzaGlwIG9mIHRoZSBBZ2VudFggVW5peCBEb21haW4gc29ja2V0LApAQCAtMTM1MSwxMSArMTYzNCwxMyBAQAogLlJTCiAuSVAgIk5vdGU6IgogU3BlY2lmeWluZyBhbiBBZ2VudFggc29ja2V0IGRvZXMgXGZCbm90XGZSIGF1dG9tYXRpY2FsbHkgZW5hYmxlCi1BZ2VudFggZnVuY3Rpb25hbGl0eSAodW5saWtlIHRoZSAnLXgnIGNvbW1hbmQtbGluZSBvcHRpb24pLgorQWdlbnRYIGZ1bmN0aW9uYWxpdHkgKHVubGlrZSB0aGUgJ1wteCcgY29tbWFuZC1saW5lIG9wdGlvbikuCiAuUkUKIC5JUCAiYWdlbnRYVGltZW91dCBOVU0iCiBkZWZpbmVzIHRoZSB0aW1lb3V0IHBlcmlvZCAoTlVNIHNlY29uZHMpIGZvciBhbiBBZ2VudFggcmVxdWVzdC4KLURlZmF1bHQgaXMgMSBzZWNvbmQuCitEZWZhdWx0IGlzIDEgc2Vjb25kLiAgTlVNIGFsc28gYmUgc3BlY2lmaWVkIHdpdGggYSBzdWZmaXggb2Ygb25lIG9mIHMKKyhmb3Igc2Vjb25kcyksIG0gKGZvciBtaW51dGVzKSwgaCAoZm9yIGhvdXJzKSwgZCAoZm9yIGRheXMpLCBvciB3IChmb3IKK3dlZWtzKS4KIC5JUCAiYWdlbnRYUmV0cmllcyBOVU0iCiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgcmV0cmllcyBmb3IgYW4gQWdlbnRYIHJlcXVlc3QuCiBEZWZhdWx0IGlzIDUgcmV0cmllcy4KQEAgLTEzNjMsOSArMTY0OCw5IEBACiBuZXQtc25tcCBzaGlwcyB3aXRoIGJvdGggQyBhbmQgUGVybCBBUElzIHRvIGRldmVsb3AgeW91ciBvd24gQWdlbnRYCiBzdWJhZ2VudC4KIC5TSCAiT1RIRVIgQ09ORklHVVJBVElPTiIKLS5JUCAib3ZlcnJpZGUgWy1yd10gT0lEIFRZUEUgVkFMVUUiCisuSVAgIm92ZXJyaWRlIFtcLXJ3XSBPSUQgVFlQRSBWQUxVRSIKIFRoaXMgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgYSBwYXJ0aWN1bGFyIE9JRCB3aXRoIGEKLWRpZmZlcmVudCB2YWx1ZSAoYW5kIHBvc3NpYmx5IGEgZGlmZmVyZW50IHR5cGUgb2YgdmFsdWUpLiAgVGhlIC1ydworZGlmZmVyZW50IHZhbHVlIChhbmQgcG9zc2libHkgYSBkaWZmZXJlbnQgdHlwZSBvZiB2YWx1ZSkuICBUaGUgXC1ydwogZmxhZyB3aWxsIGFsbG93IHNubXAgU0VUcyB0byBtb2RpZnkgaXQncyB2YWx1ZSBhcyB3ZWxsLiAobm90ZSB0aGF0IGlmCiB5b3UncmUgb3ZlcnJpZGluZyBvcmlnaW5hbCBmdW5jdGlvbmFsaXR5LCB0aGF0IGZ1bmN0aW9uYWxpdHkgd2lsbCBiZQogZW50aXJlbHkgbG9zdC4gIFRodXMgU0VUUyB3aWxsIGRvIG5vdGhpbmcgbW9yZSB0aGFuIG1vZGlmeSB0aGUKQEAgLTEzOTcsOCArMTY4Miw4IEBACiBJZiB5b3UncmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgYXNwZWN0cyBvZiB0aGUgdmFyaW91cyBtaWIgbW9kdWxlcwogKHBvc3NpYmx5IHNvbWUgdGhhdCB5b3UndmUgYWRkZWQgeW91cnNlbGYpLCB0aGUgZm9sbG93aW5nIG1heSBoZWxwIHlvdQogc3BpdCBvdXQgc29tZSB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgRmlyc3Qgb2ZmLCBwbGVhc2UgcmVhZAotdGhlIHNubXBkIG1hbnVhbCBwYWdlIG9uIHRoZSAtRCBmbGFnLiAgVGhlbiB0aGUgZm9sbG93aW5nCi1jb25maWd1cmF0aW9uIHNubXBkLmNvbmYgdG9rZW4sIGNvbWJpbmVkIHdpdGggdGhlIC1EIGZsYWcsIGNhbiBwcm9kdWNlCit0aGUgc25tcGQgbWFudWFsIHBhZ2Ugb24gdGhlIFwtRCBmbGFnLiAgVGhlbiB0aGUgZm9sbG93aW5nCitjb25maWd1cmF0aW9uIHNubXBkLmNvbmYgdG9rZW4sIGNvbWJpbmVkIHdpdGggdGhlIFwtRCBmbGFnLCBjYW4gcHJvZHVjZQogdXNlZnVsIG91dHB1dDoKIC5JUCAiaW5qZWN0SGFuZGxlciBIQU5ETEVSIG1vZHVsZW5hbWUgW2JlZm9yZVRoaXNdIgogVGhpcyB3aWxsIGluc2VydCBuZXcgaGFuZGxlcnMgaW50byB0aGUgc2VjdGlvbiBvZiB0aGUgbWliIHRyZWUKQEAgLTE0MjcsNyArMTcxMiw3IEBACiAKIC5JUCBkZWJ1ZwogUHJpbnRzIG91dCBsb3RzIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB3aGVuCi10aGUgLURoZWxwZXI6ZGVidWcgZmxhZyBpcyBwYXNzZWQgdG8gdGhlIHNubXBkCit0aGUgXC1EaGVscGVyOmRlYnVnIGZsYWcgaXMgcGFzc2VkIHRvIHRoZSBzbm1wZAogYXBwbGljYXRpb24uCiAKIC5JUCByZWFkX29ubHkKQEAgLTE0NjIsOCArMTc0Nyw4IEBACiAuSVAgbwogVGhlIE5ldC1TTk1QIGFnZW50IGNhbiBiZSBpbnN0cnVjdGVkIHRvIHJlLXJlYWQgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcywKIGVpdGhlciB2aWEgYW4gXGZCc25tcHNldFxmUiBhc3NpZ25tZW50IG9mIGludGVnZXIoMSkgdG8KLVxmQ1VDRC1TTk1QLU1JQjo6dmVyc2lvblVwZGF0ZUNvbmZpZy4wXGZSICguMS4zLjYuMS40LjEuMjAyMS4xMDAuMTEuMCksCi1vciBieSBzZW5kaW5nIGEgXGZCa2lsbCAtSFVQXGZSIHNpZ25hbCB0byB0aGUgYWdlbnQgcHJvY2Vzcy4KK1xmQ1VDRFwtU05NUFwtTUlCOjp2ZXJzaW9uVXBkYXRlQ29uZmlnLjBcZlIgKC4xLjMuNi4xLjQuMS4yMDIxLjEwMC4xMS4wKSwKK29yIGJ5IHNlbmRpbmcgYSBcZkJraWxsIFwtSFVQXGZSIHNpZ25hbCB0byB0aGUgYWdlbnQgcHJvY2Vzcy4KIC5JUCBvCiBBbGwgZGlyZWN0aXZlcyBsaXN0ZWQgd2l0aCBhIHZhbHVlIG9mICJ5ZXMiIGFjdHVhbGx5IGFjY2VwdCBhIHJhbmdlCiBvZiBib29sZWFuIHZhbHVlcy4gIFRoZXNlIHdpbGwgYWNjZXB0IGFueSBvZiBcZkkxXGZSLCBcZkl5ZXNcZlIgb3IKQEAgLTE0NzgsNyArMTc2Myw3IEBACiAuU0ggIkZJTEVTIgogU1lTQ09ORkRJUi9zbm1wL3NubXBkLmNvbmYKIC5TSCAiU0VFIEFMU08iCi1zbm1wY29uZigxKSwgc25tcHVzbSgxKSwgc25tcC5jb25mKDUpLCBzbm1wX2NvbmZpZyg1KSwgc25tcGQoOCksIEVYQU1QTEUuY29uZiwgcmVhZF9jb25maWcoMykuCitzbm1wY29uZigxKSwgc25tcHVzbSgxKSwgc25tcC5jb25mKDUpLCBzbm1wX2NvbmZpZyg1KSwgc25tcGQoOCksIEVYQU1QTEUuY29uZiwgbmV0c25tcF9jb25maWdfYXBpKDMpLgogLlwiIExvY2FsIFZhcmlhYmxlczoKIC5cIiAgbW9kZTogbnJvZmYKIC5cIiBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYgYi9tYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYKaW5kZXggNjg5MGIyMC4uMzYwMjg2OSAxMDA2NDQKLS0tIGEvbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmCisrKyBiL21hbi9zbm1wZC5leGFtcGxlcy41LmRlZgpAQCAtMTA0LDcgKzEwNCw3IEBACiBQRVJTSVNURU5UX0RJUkVDVE9SWS9zbm1wZC5jb25mIGZpbGUsIHJhdGhlciB0aGFuIHRoZSB1c3VhbCBsb2NhdGlvbi4KIC5SRQogLlwiCi0uXCIgID8/PyBJbGx1c3RyYXRlICItZSIsICItbCIgYW5kICItbSIgZm9ybXMgPz8KKy5cIiAgPz8/IElsbHVzdHJhdGUgIlwtZSIsICJcLWwiIGFuZCAiXC1tIiBmb3JtcyA/PwogLlwiCiAuU1MgVHJhZGl0aW9uYWwgQWNjZXNzIENvbnRyb2wKIFRoZSBTTk1QdjMgdXNlcnMgZGVmaW5lZCBhYm92ZSBjYW4gYmUgZ3JhbnRlZCBhY2Nlc3MgdG8gdGhlIGZ1bGwKQEAgLTIxOSw3ICsyMTksNyBAQAogdmlldyAgIHN5czJWaWV3IGluY2x1ZGVkICAgIHN5c3RlbQogdmlldyAgIHN5czJWaWV3IGluY2x1ZGVkICAgIC4xLjMuNi4xLjIuMS4yNS4xCiAKLWF1dGhjb21tdW5pdHkgcmVhZCAgICAgICBwdWJsaWMgIGRlZmF1bHQgICAgICAtdiBzeXMyVmlldworYXV0aGNvbW11bml0eSByZWFkICAgICAgIHB1YmxpYyAgZGVmYXVsdCAgICAgIFwtdiBzeXMyVmlldwogYXV0aGNvbW11bml0eSByZWFkLHdyaXRlIHByaXZhdGUgMTAuMTAuMTAuMC84CiAuZmkKIC5SRQpAQCAtMjM4LDEyICsyMzgsMTIgQEAKIGNhbiBiZSBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgdXNpbmc6CiAuUlMKIC5uZgotXGZJIyBPdmVycmlkZSAndW5hbWUgLWEnIGFuZCBoYXJkY29kZWQgc3lzdGVtIE9JRCAtIGluaGVyZW50bHkgcmVhZC1vbmx5IHZhbHVlc1xmUgorXGZJIyBPdmVycmlkZSAndW5hbWUgXC1hJyBhbmQgaGFyZGNvZGVkIHN5c3RlbSBPSUQgLSBpbmhlcmVudGx5IHJlYWQtb25seSB2YWx1ZXNcZlIKIHN5c0Rlc2NyICAgICBVbml2ZXJzYWwgVHVyaW5nIE1hY2hpbmUgbWsgSQogc3lzT2JqZWN0SUQgIC4xLjMuNi4xLjQuMS44MDcyLjMuMi4xMDY2CiAKIFxmSSMgT3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZXMgZnJvbSAnY29uZmlndXJlJyAtIG1ha2VzIHRoZXNlIG9iamVjdHMgcmVhZC1vbmx5XGZSCi1zeXNDb250YWN0ICAgQWxhbi5UdXJpbmdAcHJlLWNzLm1hbi5hYy51aworc3lzQ29udGFjdCAgIEFsYW4uVHVyaW5nQHByZVwtY3MubWFuLmFjLnVrCiBzeXNOYW1lICAgICAgdG9ydG9pc2UudHVyaW5nLmNvbQogc3lzTG9jYXRpb24gIEFuIGlkZWEgaW4gdGhlIG1pbmQgb2YgQVQKIApAQCAtMjYyLDcgKzI2Miw3IEBACiAuUlMKIC5uZgogaWdub3JlZGlzayAvZGV2L3Jkc2svYzB0WyE2XWQwCi1pZ25vcmVkaXNrIC9kZXYvcmRzay9jMHRbMC01Ny05YS1mXWQwCitpZ25vcmVkaXNrIC9kZXYvcmRzay9jMHRbMFwtNTdcLTlhXC1mXWQwCiAuZmkKIC5SRQogZWl0aGVyIG9mIHdoaWNoIHByZXZlbnRzIGFsbCBkZXZpY2VzIFxmSS9kZXYvcmRzay9jMHRcZlJYXGZJZDBcZlIKQEAgLTM4OCw3ICszODgsNyBAQAogLlBQCiBBIG1vcmUgZGV0YWlsZWQgbW9uaXRvciBleGFtcGxlIGlzIGdpdmVuIGJ5OgogLlJTCi1tb25pdG9yIC11IG1lIC1vIGhyU1dSdW5OYW1lICJoaWdoIHByb2Nlc3MgbWVtb3J5IiBoclNXUnVuUGVyZk1lbSA+IDEwMDAwCittb25pdG9yIFwtdSBtZSBcLW8gaHJTV1J1bk5hbWUgImhpZ2ggcHJvY2VzcyBtZW1vcnkiIGhyU1dSdW5QZXJmTWVtID4gMTAwMDAKIC5SRQogLlBQCiBUaGlzIGRlZmluZXMgYW4gZXhwbGljaXQgYm9vbGVhbiBtb25pdG9yIGVudHJ5LCBsb29raW5nIGZvciBhbnkgcHJvY2VzcwpAQCAtNDAyLDcgKzQwMiw3IEBACiBPYmplY3RzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgZmx1Y3R1YXRlIGFyb3VuZCB0aGUgc3BlY2lmaWVkIGxldmVsCiBhcmUgYmV0dGVyIG1vbml0b3JlZCB1c2luZyBhIHRocmVzaG9sZCBtb25pdG9yIGVudHJ5OiAKIC5SUwotbW9uaXRvciAtRCAtciAxMCAibmV0d29yayB0cmFmZmljIiBpZkluT2N0ZXRzIDEwMDAwMDAgNTAwMDAwMAorbW9uaXRvciBcLUQgXC1yIDEwICJuZXR3b3JrIHRyYWZmaWMiIGlmSW5PY3RldHMgMTAwMDAwMCA1MDAwMDAwCiAuUkUKIC5QUAogVGhpcyB3aWxsIHNlbmQgYSBcZkNtdGVUcmlnZ2VyUmlzaW5nXGZSIHRyYXAgd2hlbmV2ZXIgdGhlIGluY29taW5nCkBAIC00MTAsMTEgKzQxMCwxMSBAQAogYW5kIGEgY29ycmVzcG9uZGluZyBcZkNtdGVUcmlnZ2VyRmFsbGluZ1xmUiB0cmFwIHdoZW4gaXQgZmFsbHMgYmVsb3cKIDEwMCBrQi9zIGFnYWluLgogLlBQCi1Ob3RlIHRoYXQgdGhpcyBtb25pdG9ycyB0aGUgZGVsdGFzIGJldHdlZW4gc3VjY2Vzc2l2ZSBzYW1wbGVzIChcZkktRFxmUikKK05vdGUgdGhhdCB0aGlzIG1vbml0b3JzIHRoZSBkZWx0YXMgYmV0d2VlbiBzdWNjZXNzaXZlIHNhbXBsZXMgKFxmSVwtRFxmUikKIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2FtcGxlIHZhbHVlcyB0aGVtc2VsdmVzLiAgVGhlIHNhbWUgZWZmZWN0CiBjb3VsZCBiZSBvYnRhaW5lZCB1c2luZzoKIC5SUwotbW9uaXRvciAtciAxMCAibmV0d29yayB0cmFmZmljIiBpZkluT2N0ZXRzIC0gLSAxMDAwMDAwIDUwMDAwMDAKK21vbml0b3IgXC1yIDEwICJuZXR3b3JrIHRyYWZmaWMiIGlmSW5PY3RldHMgXC0gXC0gMTAwMDAwMCA1MDAwMDAwCiAuUkUKIC5QUAogVGhlIFxmSWxpbmtVcERvd25Ob3RpZmljYXRpb25zXGZSIGRpcmVjdGl2ZSBhYm92ZSBpcyBicm9hZGx5CkBAIC00MjQsOCArNDI0LDggQEAKIG5vdGlmaWNhdGlvbkV2ZW50ICBsaW5rVXBUcmFwICAgIGxpbmtVcCAgIGlmSW5kZXggaWZBZG1pblN0YXR1cyBpZk9wZXJTdGF0dXMKIG5vdGlmaWNhdGlvbkV2ZW50ICBsaW5rRG93blRyYXAgIGxpbmtEb3duIGlmSW5kZXggaWZBZG1pblN0YXR1cyBpZk9wZXJTdGF0dXMKIAotbW9uaXRvciAgLXIgNjAgLWUgbGlua1VwVHJhcCAgICJHZW5lcmF0ZSBsaW5rVXAiICAgaWZPcGVyU3RhdHVzICE9IDIKLW1vbml0b3IgIC1yIDYwIC1lIGxpbmtEb3duVHJhcCAiR2VuZXJhdGUgbGlua0Rvd24iIGlmT3BlclN0YXR1cyA9PSAyCittb25pdG9yICBcLXIgNjAgXC1lIGxpbmtVcFRyYXAgICAiR2VuZXJhdGUgbGlua1VwIiAgIGlmT3BlclN0YXR1cyAhPSAyCittb25pdG9yICBcLXIgNjAgXC1lIGxpbmtEb3duVHJhcCAiR2VuZXJhdGUgbGlua0Rvd24iIGlmT3BlclN0YXR1cyA9PSAyCiAuZmkKIC5SRQogLlBQCkBAIC00MzcsMTIgKzQzNywxMiBAQAogb2YgKGJvb2xlYW4pIG1vbml0b3IgZW50cmllczoKIC5SUwogLm5mCi1tb25pdG9yCS1vIHByTmFtZXMgICAgICAtbyBwckVyck1lc3NhZ2UgICJwcm9jVGFibGUiIHByRXJyb3JGbGFnICAgIT0gMAotbW9uaXRvcgktbyBtZW1FcnJvck5hbWUgLW8gbWVtU3dhcEVycm9yTXNnICJtZW1vcnkiICBtZW1Td2FwRXJyb3IgICE9IDAKLW1vbml0b3IJLW8gZXh0TmFtZXMgICAgIC1vIGV4dE91dHB1dCAgICAgImV4dFRhYmxlIiAgZXh0UmVzdWx0ICAgICAhPSAwCi1tb25pdG9yCS1vIGRza1BhdGggICAgICAtbyBkc2tFcnJvck1zZyAgICJkc2tUYWJsZSIgIGRza0Vycm9yRmxhZyAgIT0gMAotbW9uaXRvcgktbyBsYU5hbWVzICAgICAgLW8gbGFFcnJNZXNzYWdlICAibGFUYWJsZSIgICBsYUVycm9yRmxhZyAgICE9IDAKLW1vbml0b3IJLW8gZmlsZU5hbWUgICAgIC1vIGZpbGVFcnJvck1zZyAgImZpbGVUYWJsZSIgZmlsZUVycm9yRmxhZyAhPSAwCittb25pdG9yCVwtbyBwck5hbWVzICAgICAgXC1vIHByRXJyTWVzc2FnZSAgInByb2NUYWJsZSIgcHJFcnJvckZsYWcgICAhPSAwCittb25pdG9yCVwtbyBtZW1FcnJvck5hbWUgXC1vIG1lbVN3YXBFcnJvck1zZyAibWVtb3J5IiAgbWVtU3dhcEVycm9yICAhPSAwCittb25pdG9yCVwtbyBleHROYW1lcyAgICAgXC1vIGV4dE91dHB1dCAgICAgImV4dFRhYmxlIiAgZXh0UmVzdWx0ICAgICAhPSAwCittb25pdG9yCVwtbyBkc2tQYXRoICAgICAgXC1vIGRza0Vycm9yTXNnICAgImRza1RhYmxlIiAgZHNrRXJyb3JGbGFnICAhPSAwCittb25pdG9yCVwtbyBsYU5hbWVzICAgICAgXC1vIGxhRXJyTWVzc2FnZSAgImxhVGFibGUiICAgbGFFcnJvckZsYWcgICAhPSAwCittb25pdG9yCVwtbyBmaWxlTmFtZSAgICAgXC1vIGZpbGVFcnJvck1zZyAgImZpbGVUYWJsZSIgZmlsZUVycm9yRmxhZyAhPSAwCiAuZmkKIC5SRQogYW5kIHdpbGwgc2VuZCBhIHRyYXAgd2hlbmV2ZXIgYW55IG9mIHRoZXNlIGVudHJpZXMgaW5kaWNhdGUgYSBwcm9ibGVtLgpAQCAtNDUyLDcgKzQ1Miw3IEBACiAuUlMKIC5uZgogc2V0RXZlbnQgICBwckZpeEl0ICBwckVyckZpeCA9IDEKLW1vbml0b3IgLWUgcHJGaXhJdCAicHJvY1RhYmxlIiBwckVycm9yRmxhZyAgICE9IDAKK21vbml0b3IgXC1lIHByRml4SXQgInByb2NUYWJsZSIgcHJFcnJvckZsYWcgICAhPSAwCiAuZmkKIC5SRQogKGFuZCBzaW1pbGFybHkgZm9yIGFueSBvZiB0aGUgb3RoZXIgXGZJZGVmYXVsdE1vbml0b3JcZlIgZW50cmllcykuCkBAIC00OTQsMTIgKzQ5NCwxMiBAQAogLlNTICJNSUItU3BlY2lmaWMgRXh0ZW5zaW9uIENvbW1hbmRzIgogLkkgT25lLVNob3QKIC5SUwotInBhc3MgWy1wIHByaW9yaXR5XSBNSUJPSUQgUFJPRyIKKyJwYXNzIFtcLXAgcHJpb3JpdHldIE1JQk9JRCBQUk9HIgogLlJFCiAuSVAKIC5JIFBlcnNpc3RlbnQKIC5SUwotInBhc3NfcGVyc2lzdCBbLXAgcHJpb3JpdHldIE1JQk9JRCBQUk9HIgorInBhc3NfcGVyc2lzdCBbXC1wIHByaW9yaXR5XSBNSUJPSUQgUFJPRyIKIC5SRQogLlNTICJFbWJlZGRlZCBQZXJsIFN1cHBvcnQiCiBJZiBlbWJlZGRlZCBwZXJsIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiB0aGUgYWdlbnQsIHRoZSBkZWZhdWx0CkBAIC01MTcsNyArNTE3LDcgQEAKIC5uZgogcGVybCB1c2UgRGF0YTo6RHVtcGVyOwogcGVybCBzdWIgbXlyb3V0aW5lICB7IHByaW50ICJnb3QgY2FsbGVkOiAiLER1bXBlcihAXyksIlxcbiI7IH0KLXBlcmwgJGFnZW50LT5yZWdpc3RlcignbXlsaW5rJywgJy4xLjMuNi4xLjg3NjUnLCBcXCZteXJvdXRpbmUpOworcGVybCAkYWdlbnRcLT5yZWdpc3RlcignbXlsaW5rJywgJy4xLjMuNi4xLjg3NjUnLCBcXCZteXJvdXRpbmUpOwogLmZpCiAuUkUKIC5QUApAQCAtNTQ4LDExICs1NDgsMTEgQEAKIFNOTVAgYWdlbnRzIChydW5uaW5nIG9uIHJlbW90ZSBzeXN0ZW1zKSBtaWdodCBiZToKIC5SUwogLm5mCi1jb20yc2VjIC1DbiByZW0xY29udGV4dCAgcmVtMXVzZXIgZGVmYXVsdCAgcmVtb3RlaG9zdDEKLWNvbTJzZWMgLUNuIHJlbTJjb250ZXh0ICByZW0ydXNlciBkZWZhdWx0ICByZW1vdGVob3N0MgorY29tMnNlYyBcLUNuIHJlbTFjb250ZXh0ICByZW0xdXNlciBkZWZhdWx0ICByZW1vdGVob3N0MQorY29tMnNlYyBcLUNuIHJlbTJjb250ZXh0ICByZW0ydXNlciBkZWZhdWx0ICByZW1vdGVob3N0MgogCi1wcm94eSAtQ24gcmVtMWNvbnRleHQgIC12IDEgLWMgcHVibGljICByZW1vdGVob3N0MSAgLjEuMwotcHJveHkgLUNuIHJlbTJjb250ZXh0ICAtdiAxIC1jIHB1YmxpYyAgcmVtb3RlaG9zdDIgIC4xLjMKK3Byb3h5IFwtQ24gcmVtMWNvbnRleHQgIFwtdiAxIC1jIHB1YmxpYyAgcmVtb3RlaG9zdDEgIC4xLjMKK3Byb3h5IFwtQ24gcmVtMmNvbnRleHQgIFwtdiAxIC1jIHB1YmxpYyAgcmVtb3RlaG9zdDIgIC4xLjMKIC5maQogLlJFCiAocGx1cyBzdWl0YWJsZSBhY2Nlc3MgY29udHJvbCBlbnRyaWVzKS4KQEAgLTU3Miw3ICs1NzIsNyBAQAogb3IgbGlzdGVuaW5nIG9uIGEgZGlmZmVyZW50IHBvcnQgb24gdGhlIHNhbWUgc3lzdGVtKSwKIHdoaWxlIGhhbmRsaW5nIHRoZSByZXN0IGludGVybmFsbHk6CiAuUlMKLXByb3h5IC12IDEgLWMgcHVibGljICBsb2NhbGhvc3Q6NjE2MSAgLjEuMy42LjEuNC4xLjk5Citwcm94eSBcLXYgMSBcLWMgcHVibGljICBsb2NhbGhvc3Q6NjE2MSAgLjEuMy42LjEuNC4xLjk5CiAuUkUKIFRoaXMgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIGxpbmsgdG9nZXRoZXIgdHdvIHNlcGFyYXRlIFNOTVAgYWdlbnRzLgogLlBQCkBAIC01ODIsNyArNTgyLDcgQEAKIC5uZgogXGZJIyB1c2VzIFNOTVB2MyB0byBhY2Nlc3MgdGhlIE1JQiB0cmVlIC4xLjMuNi4xLjIuMS4xIG9uICdyZW1vdGVob3N0JwogIyBhbmQgbWFwcyB0aGlzIHRvIHRoZSBsb2NhbCB0cmVlIC4xLjMuNi4xLjMuMTBcZlIKLXByb3h5IC12IDMgLWwgbm9BdXRoTm9Qcml2IC11IHVzZXIgcmVtb3RlaG9zdCAuMS4zLjYuMS4zLjEwIC4xLjMuNi4xLjIuMS4xCitwcm94eSBcLXYgMyBcLWwgbm9BdXRoTm9Qcml2IFwtdSB1c2VyIHJlbW90ZWhvc3QgLjEuMy42LjEuMy4xMCAuMS4zLjYuMS4yLjEuMQogLmZpCiAuUkUKIC5TUyBTTVVYIFN1Yi1BZ2VudHMKQEAgLTY0OSw3ICs2NDksNyBAQAogLlNIICJGSUxFUyIKIFNZU0NPTkZESVIvc25tcC9zbm1wZC5jb25mCiAuU0ggIlNFRSBBTFNPIgotc25tcGNvbmYoMSksIHNubXBkLmNvbmYoNSksIHNubXAuY29uZig1KSwgc25tcF9jb25maWcoNSksIHNubXBkKDgpLCBFWEFNUExFLmNvbmYsIHJlYWRfY29uZmlnKDMpLgorc25tcGNvbmYoMSksIHNubXBkLmNvbmYoNSksIHNubXAuY29uZig1KSwgc25tcF9jb25maWcoNSksIHNubXBkKDgpLCBFWEFNUExFLmNvbmYsIG5ldHNubXBfY29uZmlnX2FwaSgzKS4KIC5cIiBMb2NhbCBWYXJpYWJsZXM6CiAuXCIgIG1vZGU6IG5yb2ZmCiAuXCIgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBkLmludGVybmFsLjUuZGVmIGIvbWFuL3NubXBkLmludGVybmFsLjUuZGVmCmluZGV4IGQxZGE4YjMuLjgxMTQ3YzcgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wZC5pbnRlcm5hbC41LmRlZgorKysgYi9tYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYKQEAgLTEsNCArMSw0IEBACi0uVEggU05NUEQuSU5URVJOQUwgNSAiMDUgRGVjIDIwMDUiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUEQuSU5URVJOQUwgNSAiMDYgRGVjIDIwMDUiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcGQuaW50ZXJuYWwgLSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9mIHRoZSBOZXQtU05NUCBhZ2VudAogLlNIIERFU0NSSVBUSU9OCkBAIC04Niw3ICs4Niw3IEBACiAuU0ggIkZJTEVTIgogU1lTQ09ORkRJUi9zbm1wL3NubXBkLmNvbmYKIC5TSCAiU0VFIEFMU08iCi1zbm1wY29uZigxKSwgc25tcGQuY29uZig1KSwgc25tcC5jb25mKDUpLCBzbm1wX2NvbmZpZyg1KSwgc25tcGQoOCksIEVYQU1QTEUuY29uZiwgcmVhZF9jb25maWcoMykuCitzbm1wY29uZigxKSwgc25tcGQuY29uZig1KSwgc25tcC5jb25mKDUpLCBzbm1wX2NvbmZpZyg1KSwgc25tcGQoOCksIEVYQU1QTEUuY29uZiwgbmV0c25tcF9jb25maWdfYXBpKDMpLgogLlwiIExvY2FsIFZhcmlhYmxlczoKIC5cIiAgbW9kZTogbnJvZmYKIC5cIiBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vc25tcGRlbHRhLjEuZGVmIGIvbWFuL3NubXBkZWx0YS4xLmRlZgppbmRleCA2ZmIwMzI2Li5lOTVhNjliIDEwMDY0NAotLS0gYS9tYW4vc25tcGRlbHRhLjEuZGVmCisrKyBiL21hbi9zbm1wZGVsdGEuMS5kZWYKQEAgLTEyLDcgKzEyLDcgQEAKIHNubXBkZWx0YSBcLSBNb25pdG9yIGRlbHRhIGRpZmZlcmVuY2VzIGluIFNOTVAgQ291bnRlciB2YWx1ZXMKIC5TSCBTWU5PUFNJUwogLkIgc25tcGRlbHRhCi1bIENPTU1PTiBPUFRJT05TIF0gWy1DZl0gWyAtQ3QgXSBbIC1DcyBdIFsgLUNTIF0gWyAtQ20gXSBbIC1DRiBjb25maWdmaWxlIF0gWyAtQ2wgXSBbIC1DcCBwZXJpb2QgXSBbIC1DUCBQZWFrcyBdIFsgLUNrIF0gWyAtQ1QgXSBBR0VOVCBPSUQgWyBPSUQgLi4uIF0KK1sgQ09NTU9OIE9QVElPTlMgXSBbXC1DZl0gWyBcLUN0IF0gWyBcLUNzIF0gWyBcLUNTIF0gWyBcLUNtIF0gWyBcLUNGIGNvbmZpZ2ZpbGUgXSBbIFwtQ2wgXSBbIFwtQ3AgcGVyaW9kIF0gWyBcLUNQIFBlYWtzIF0gWyBcLUNrIF0gWyBcLUNUIF0gQUdFTlQgT0lEIFsgT0lEIC4uLiBdCiAuU0ggIkRFU0NSSVBUSU9OIgogLkIgc25tcGRlbHRhCiB3aWxsIG1vbml0b3IgdGhlIHNwZWNpZmllZCBpbnRlZ2VyIHZhbHVlZCBPSURzLCBhbmQgcmVwb3J0IGNoYW5nZXMKQEAgLTM4LDUxICszOCw1MSBAQAogZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIENPTU1PTiBPUFRJT05TCiBhcyB3ZWxsIGFzIHRoZWlyIGRlc2NyaXB0aW9ucy4KIC5UUAotLkIgLUNmCisuQiBcLUNmCiBEb24ndCBmaXggZXJyb3JzIGFuZCByZXRyeSB0aGUgcmVxdWVzdC4KIFdpdGhvdXQgdGhpcyBvcHRpb24sIGlmIG11bHRpcGxlIG9pZHMgaGF2ZSBiZWVuIHNwZWNpZmllZCBmb3IKIGEgc2luZ2xlIHJlcXVlc3QgYW5kIGlmIHRoZSByZXF1ZXN0IGZvciBvbmUgb3IgbW9yZSBvZiB0aGUKIG9pZHMgZmFpbHMsIHNubXBkZWx0YSB3aWxsIHJldHJ5IHRoZSByZXF1ZXN0IHNvIHRoYXQgZGF0YSBmb3IKIG9pZHMgYXBhcnQgZnJvbSB0aGUgb25lcyB0aGF0IGZhaWxlZCB3aWxsIHN0aWxsIGJlIHJldHVybmVkLiAKLVNwZWNpZnlpbmcgLUNmIHRlbGxzCitTcGVjaWZ5aW5nIFwtQ2YgdGVsbHMKIC5JICBzbm1wZGVsdGEKIG5vdCB0byByZXRyeSBhIHJlcXVlc3QsIGV2ZW4KIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvaWRzIHNwZWNpZmllZC4KIC5UUAotLkIgLUN0CisuQiBcLUN0CiBGbGFnIHdpbGwgZGV0ZXJtaW5lIHRpbWUgaW50ZXJ2YWwgZnJvbSB0aGUgbW9uaXRvcmVkIGVudGl0eS4KIC5UUAotLkIgLUNzCisuQiBcLUNzCiBGbGFnIHdpbGwgZGlzcGxheSBhIHRpbWVzdGFtcC4KIC5UUAotLkIgLUNTCisuQiBcLUNTCiBHZW5lcmF0ZXMgYSAic3VtIGNvdW50IiBpbiBhZGRpdGlvbiB0byB0aGUgaW5kaXZpZHVhbCBpbnN0YW5jZQogY291bnRzLiAgVGhlICJzdW0gY291bnQiIGlzIHRoZSB0b3RhbCBvZiBhbGwgdGhlIGluZGl2aWR1YWwKIGRlbHRhcyBmb3IgZWFjaCB0aW1lIHBlcmlvZC4KIC5UUAotLkIgLUNtCisuQiBcLUNtCiBQcmludHMgdGhlIG1heCB2YWx1ZSBldmVyIGF0dGFpbmVkLgogLlRQCi0uQiAtQ0YgY29uZmlnZmlsZQorLkIgXC1DRiBjb25maWdmaWxlCiBUZWxscwogLkIgc25tcGRlbHRhCiB0byByZWFkIGl0J3MgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZS4KIFRoaXMgb3B0aW9ucyBhbGxvd3MgdGhlIGlucHV0IHRvIGJlIHNldCB1cCBpbiBhZHZhbmNlIHJhdGhlcgogdGhhbiBoYXZpbmcgdG8gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAuVFAKLS5CIC1DbAorLkIgXC1DbAogVGVsbHMKIC5CIHNubXBkZWx0YQogdG8gd3JpdGUgaXQncyBjb25maWd1cmF0aW9uIHRvIGZpbGVzIHdob3NlIG5hbWVzIGNvcnJlc3BvbmQgdG8gdGhlIE1JQgotaW5zdGFuY2VzIG1vbml0b3JlZC4gIEZvciBleGFtcGxlLCBzbm1wZGVsdGEgLUNsIGxvY2FsaG9zdCBpZkluT2N0ZXRzLjEKLXdpbGwgY3JlYXRlIGEgZmlsZSAibG9jYWxob3N0LWlmSW5PY3RldHMuMSIuCitpbnN0YW5jZXMgbW9uaXRvcmVkLiAgRm9yIGV4YW1wbGUsIHNubXBkZWx0YSBcLUNsIGxvY2FsaG9zdCBpZkluT2N0ZXRzLjEKK3dpbGwgY3JlYXRlIGEgZmlsZSAibG9jYWxob3N0XC1pZkluT2N0ZXRzLjEiLgogLlRQCi0uQiAtQ3AKKy5CIFwtQ3AKIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBwb2xsaW5nIHBlcmlvZHMuCiBQb2xsaW5nIGNvbnN0aXR1dGVzIHNlbmRpbmcgYSByZXF1ZXN0IHRvIHRoZSBhZ2VudC4gVGhlCiBkZWZhdWx0IHBvbGxpbmcgcGVyaW9kIGlzIG9uZSBzZWNvbmQuCiAuVFAKLS5CIC1DUCBwZWFrcworLkIgXC1DUCBwZWFrcwogU3BlY2lmaWVzIHRoZSByZXBvcnRpbmcgcGVyaW9kIGluIG51bWJlciBvZiBwb2xsaW5nIHBlcmlvZHMuCiBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHNubXBkZWx0YSBwb2xscyB0aGUgYWdlbnQKIC5JIHBlYWtzCkBAIC05MSwyNCArOTEsMjQgQEAKIHRoZSByZXBvcnRpbmcgcGVyaW9kLiBJbiBhZGRpdGlvbiwgdGhlIGhpZ2hlc3QgcG9sbGVkCiB2YWx1ZSB3aXRoaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QgaXMgc2hvd24uCiAuVFAKLS5CIC1DawotV2hlbiB0aGUgcG9sbGluZyBwZXJpb2QgKC1DcCkgaXMgYW4gaW5jcmVtZW50IG9mIDYwIHNlY29uZHMKLWFuZCB0aGUgdGltZXN0YW1wIGlzIGRpc3BsYXllZCBpbiB0aGUgb3V0cHV0ICgtQ3MpLCB0aGVuCisuQiBcLUNrCitXaGVuIHRoZSBwb2xsaW5nIHBlcmlvZCAoXC1DcCkgaXMgYW4gaW5jcmVtZW50IG9mIDYwIHNlY29uZHMKK2FuZCB0aGUgdGltZXN0YW1wIGlzIGRpc3BsYXllZCBpbiB0aGUgb3V0cHV0IChcLUNzKSwgdGhlbgogdGhlIGRlZmF1bHQgZGlzcGxheSBzaG93cyB0aGUgdGltZXN0YW1wIGluIHRoZSBmb3JtYXQKIGhoOm1tIG1tL2RkLiBUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIHRpbWVzdGFtcCBmb3JtYXQKIHRvIGJlIGhoOm1tOnNzIG1tL2RkLgogLlRQCi0uQiAtQ1QKKy5CIFwtQ1QKIE1ha2VzIAogLkIgc25tcGRlbHRhCiBwcmludCBpdHMgb3V0cHV0IGluIHRhYnVsYXIgZm9ybS4KIC5UUAotLkIgLUN2IHZhcnMvcGt0CisuQiBcLUN2IHZhcnMvcGt0CiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG9pZHMgYWxsb3dlZCB0byBiZSBwYWNrYWdlZAogaW4gYSBzaW5nbGUgUERVLiBNdWx0aXBsZSBQRFVzIGNhbiBiZSBjcmVhdGVkIGluIGEgc2luZ2xlCiByZXF1ZXN0LiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB2YXJpYWJsZXMgcGVyIHBhY2tldCBpcyA2MC4KIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiBhIHJlcXVlc3QgcmVzcG9uc2UgcmVzdWx0cyBpbiBhbgotZXJyb3IgYmVjYXVlcyB0aGUgcGFja2V0IGlzIHRvbyBiaWcuCitlcnJvciBiZWNhdXNlIHRoZSBwYWNrZXQgaXMgdG9vIGJpZy4KIC5QUAogTm90ZSB0aGF0CiAuQiBzbm1wZGVsdGEKQEAgLTExOCw3ICsxMTgsNyBAQAogbWFudWFsIHBhZ2UuCiAuU0ggRVhBTVBMRVMKIC5uZgotJCBzbm1wZGVsdGEgLWMgcHVibGljIC12IDEgLUNzIGxvY2FsaG9zdCBJRi1NSUI6OmlmSW5VY2FzdFBrdHMuMyBJRi1NSUI6OmlmT3V0VWNhc3RQa3RzLjMKKyQgc25tcGRlbHRhIFwtYyBwdWJsaWMgXC12IDEgXC1DcyBsb2NhbGhvc3QgSUZcLU1JQjo6aWZJblVjYXN0UGt0cy4zIElGXC1NSUI6OmlmT3V0VWNhc3RQa3RzLjMKIFsyMDoxNTo0MyA2LzE0XSBpZkluVWNhc3RQa3RzLjMgLzEgc2VjOiAxNTgKIFsyMDoxNTo0MyA2LzE0XSBpZk91dFVjYXN0UGt0cy4zIC8xIHNlYzogMTU4CiBbMjA6MTU6NDQgNi8xNF0gaWZJblVjYXN0UGt0cy4zIC8xIHNlYzogMTg0CkBAIC0xMzQsNyArMTM0LDcgQEAKIFsyMDoxNTo0OSA2LzE0XSBpZkluVWNhc3RQa3RzLjMgLzEgc2VjOiAxNTgKIFsyMDoxNTo0OSA2LzE0XSBpZk91dFVjYXN0UGt0cy4zIC8xIHNlYzogMTU4CiBeQwotJCBzbm1wZGVsdGEgLWMgcHVibGljIC12IDEgLUNzIC1DVCBsb2NhbGhvc3QgSUYtTUlCOmlmSW5VY2FzdFBrdHMuMyBJRi1NSUI6aWZPdXRjYXN0UGt0cy4zCiskIHNubXBkZWx0YSBcLWMgcHVibGljIFwtdiAxIFwtQ3MgXC1DVCBsb2NhbGhvc3QgSUZcLU1JQjppZkluVWNhc3RQa3RzLjMgSUZcLU1JQjppZk91dGNhc3RQa3RzLjMKIGxvY2FsaG9zdAlpZkluVWNhc3RQa3RzLjMJaWZPdXRVY2FzdFBrdHMuMwogWzIwOjE1OjU5IDYvMTRdCTE4NC4wMAkxODQuMDAKIFsyMDoxNjowMCA2LzE0XQkxNTguMDAJMTU4LjAwCkBAIC0xNTMsOCArMTUzLDggQEAKIHNjcmVlbi4KIC5QUAogLm5mCi0kIHNubXBkZWx0YSAtYyBwdWJsaWMgLXYgMSAtQ3QgLUNzIC1DUyAtQ20gLUNsIC1DcCA2MCAtQ1AgNjAKKyQgc25tcGRlbHRhIFwtYyBwdWJsaWMgXC12IDEgXC1DdCBcLUNzIFwtQ1MgXC1DbSBcLUNsIFwtQ3AgNjAgXC1DUCA2MAogICBpbnRlcmxpbmsuc3cubmV0LmNtdS5lZHUgLjEuMy42LjEuMi4xLjIuMi4xLjE2LjMgLjEuMy42LjEuMi4xLjIuMi4xLjE2LjQKLWZpCisuZmkKIC5TSCAiU0VFIEFMU08iCiBzbm1wY21kKDEpLCB2YXJpYWJsZXMoNSkuCmRpZmYgLS1naXQgYS9tYW4vc25tcGRmLjEuZGVmIGIvbWFuL3NubXBkZi4xLmRlZgppbmRleCA3NjUzMzQ3Li40MDY4NDVhIDEwMDY0NAotLS0gYS9tYW4vc25tcGRmLjEuZGVmCisrKyBiL21hbi9zbm1wZGYuMS5kZWYKQEAgLTcsMTkgKzcsMTkgQEAKIC5cIiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAuXCIgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUERGIDEgIjI1IEp1bCAyMDAzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBERiAxICIyOCBKYW4gMjAxMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wZGYgLSBkaXNwbGF5IGRpc2sgc3BhY2UgdXNhZ2Ugb24gYSBuZXR3b3JrIGVudGl0eSB2aWEgU05NUAogLlNIIFNZTk9QU0lTCiAuQiBzbm1wZGYKLVtDT01NT04gT1BUSU9OU10gWy1DdV0gQUdFTlQKK1tDT01NT04gT1BUSU9OU10gW1wtQ3VdIFtcLUNoXSBBR0VOVAogLlNIIERFU0NSSVBUSU9OCiAuQiBzbm1wZGYKLWlzIHNpbXBseSBhIG5ldHdvcmtlZCB2ZXJpc29uIG9mIHRoZSB0eXBpY2FsIGRmIGNvbW1hbmQuICBJdAoraXMgc2ltcGx5IGEgbmV0d29ya2VkIHZlcnNpb24gb2YgdGhlIHR5cGljYWwgZGYgY29tbWFuZC4gIEl0CiBjaGVja3MgdGhlIGRpc2sgc3BhY2Ugb24gdGhlIHJlbW90ZSBtYWNoaW5lIGJ5IGV4YW1pbmluZyB0aGUKLUhPU1QtUkVTT1VSQ0VTLU1JQidzIGhyU3RvcmFnZVRhYmxlIG9yIHRoZSBVQ0QtU05NUC1NSUIncyBkc2tUYWJsZS4KK0hPU1RcLVJFU09VUkNFU1wtTUlCJ3MgaHJTdG9yYWdlVGFibGUgb3IgdGhlIFVDRFwtU05NUFwtTUlCJ3MgZHNrVGFibGUuCiBCeSBkZWZhdWx0LCB0aGUgaHJTdG9yYWdlVGFibGUgaXMgcHJlZmVycmVkIGFzIGl0IHR5cGljYWxseSBjb250YWlucwotbW9yZSBpbmZvcm1hdGlvbi4gIEhvd2V2ZXIsIHRoZSAtQ3UgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCB0byBzbm1wZGYKK21vcmUgaW5mb3JtYXRpb24uICBIb3dldmVyLCB0aGUgXC1DdSBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIHRvIHNubXBkZgogdG8gZm9yY2UgdGhlIHVzYWdlIG9mIHRoZSBkc2tUYWJsZS4KIC5QUAogQUdFTlQgaWRlbnRpZmllcyBhIHRhcmdldCBTTk1QIGFnZW50LCB3aGljaCBpcyBpbnN0cnVtZW50ZWQKQEAgLTQ0LDE2ICs0NCwyMiBAQAogZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIENPTU1PTiBPUFRJT05TCiBhcyB3ZWxsIGFzIHRoZWlyIGRlc2NyaXB0aW9ucy4KIC5UUAotLkIgLUN1CisuQiBcLUN1CiBGb3JjZXMgdGhlIGNvbW1hbmQgdG8gdXNlIGRza1RhYmxlIGluIG1pYgotVUNELVNOTVAtTUlCIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgdG8gZGV0ZXJtaW5lCitVQ0RcLVNOTVBcLU1JQiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHRvIGRldGVybWluZQogdGhlIHN0b3JhZ2UgaW5mb3JtYXRpb24uIEdlbmVyYWxseSwgdGhlIGRlZmF1bHQKLXVzZSBvZiBoclN0b3JhZ2VUYWJsZSBpbiBtaWIgSE9TVC1SRVNPVVJDRVMtTUlCCit1c2Ugb2YgaHJTdG9yYWdlVGFibGUgaW4gbWliIEhPU1RcLVJFU09VUkNFU1wtTUlCCiBpcyBwcmVmZXJyZWQgYmVjYXVzZSBpdCB0eXBpY2FsbHkgY29udGFpbnMKIG1vcmUgaW5mb3JtYXRpb24uCisuVFAKKy5CIFwtQ2gKK1ByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCAoaS5lLiBNaUIsIEdpQiwgVGlCKQorLlRQCisuQiBcLUNICitQcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBTSSBmb3JtYXQgKGkuZS4gTUIsIEdCLCBUQikKIC5TSCAiRVhBTVBMRVMiCiAuUFAKLSUgc25tcGRmIC12IDJjIC1jIHB1YmxpYyBsb2NhbGhvc3QKKyUgc25tcGRmIFwtdiAyYyBcLWMgcHVibGljIGxvY2FsaG9zdAogLlBQCiAubmYKIERlc2NyaXB0aW9uICAgICAgIHNpemUgKGtCKSAgICAgICAgIFVzZWQgICAgQXZhaWxhYmxlIFVzZWQlCmRpZmYgLS1naXQgYS9tYW4vc25tcGdldC4xLmRlZiBiL21hbi9zbm1wZ2V0LjEuZGVmCmluZGV4IGVhYmU5MDIuLjBlY2FjMTkgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wZ2V0LjEuZGVmCisrKyBiL21hbi9zbm1wZ2V0LjEuZGVmCkBAIC0xLDcgKzEsNyBAQAogLlwiIC0qLSBucm9mZiAtKi0KLS5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuIAotLlwiIFNlZSB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyCi0uXCIgY29weXJpZ2h0cyB0aGF0IG1heSBhcHBseToKKy5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKy5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKy5cIiB0aGF0IG1heSBhcHBseToKIC5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC5cIiAJQ29weXJpZ2h0IDE5ODgsIDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIC5cIiAKQEAgLTI4LDcgKzI4LDcgQEAKIHNubXBnZXQgLSBjb21tdW5pY2F0ZXMgd2l0aCBhIG5ldHdvcmsgZW50aXR5IHVzaW5nIFNOTVAgR0VUIHJlcXVlc3RzCiAuU0ggU1lOT1BTSVMKIC5CIHNubXBnZXQKLVtDT01NT04gT1BUSU9OU10gWy1DZl0gQUdFTlQgT0lEIFtPSURdLi4uCitbQ09NTU9OIE9QVElPTlNdIFtcLUNmXSBBR0VOVCBPSUQgW09JRF0uLi4KIC5TSCBERVNDUklQVElPTgogLkIgc25tcGdldAogaXMgYW4gU05NUCBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIFNOTVAgR0VUIHJlcXVlc3QgdG8gcXVlcnkgZm9yCkBAIC0zOCw5ICszOCw5IEBACiAuSVIgdmFyaWFibGVzKDUpIC4KIC5TSCAiT1BUSU9OUyIKIC5UUCA4Ci0uQiAtQ2YKKy5CIFwtQ2YKIElmCi0uQiAtQ2YKKy5CIFwtQ2YKIGlzCiAuSSBub3QKIHNwZWNpZmllZCwgc29tZSBhcHBsaWNhdGlvbnMKQEAgLTU1LDE0ICs1NSwxNCBAQAogdGFrZXMgdGhlIGNvbW1vbiBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGUKIC5JIHNubXBjbWQoMSkKIG1hbnVhbCBwYWdlLiAgCi1Ob3RlIHRoYXQKK05vdGUgdGhhdCAKIC5CIHNubXBnZXQKLVJFUVVJUkVTICBhbiBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSBhZ2VudCB0byBxdWVyeQotYW5kIGF0IGxlYXN0IG9uZSBPSUQgYXJndW1lbnQsIGFzIGRlc2NyaWJlZCB0aGVyZS4KK1JFUVVJUkVTIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIGFnZW50IHRvIHF1ZXJ5CithbmQgYXQgbGVhc3Qgb25lIE9JRCBhcmd1bWVudCwgYXMgZGVzY3JpYmVkIHRoZXJlLiAKIC5TSCAiRVhBTVBMRVMiCiBUaGUgY29tbWFuZDoKIC5QUAotICAgIHNubXBnZXQgLWMgcHVibGljIHpldXMgc3lzdGVtLnN5c0Rlc2NyLjAKKyAgICBzbm1wZ2V0IFwtYyBwdWJsaWMgemV1cyBzeXN0ZW0uc3lzRGVzY3IuMAogLlBQCiB3aWxsIHJldHJpZXZlIHRoZSB2YXJpYWJsZSBzeXN0ZW0uc3lzRGVzY3IuMCBmcm9tIHRoZSBob3N0IAogLkIgemV1cyAKQEAgLTc4LDEzICs3OCwxMyBAQAogdmFyaWFibGVzIGluIHRoZSByZXF1ZXN0LCB0aGUgcmVxdWVzdCB3aWxsIGJlIHJlc2VudCB3aXRob3V0IHRoZSBiYWQKIHZhcmlhYmxlLgogLlBQCi1IZXJlIGlzIGFub3RoZXIgZXhhbXBsZS4gVGhlIC1jIGFuZCAtdiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoZSAKK0hlcmUgaXMgYW5vdGhlciBleGFtcGxlLiBUaGUgXC1jIGFuZCBcLXYgb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgCiAuSSBzbm1wY21kKDEpCiBtYW51YWwgcGFnZS4gKE5vdGUgdGhhdCBzeXN0ZW0uc3lzVXBUaW1lIGlzIGFuIGluY29tcGxldGUKIE9JRCwgYXMgaXQgbmVlZHMgdGhlIC4wIGluZGV4IGFwcGVuZGVkIHRvIGl0KToKIC5QUAogLm5mCi0gICAgc25tcGdldCAtdjEgLUNmIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzdGVtLnN5c1VwVGltZSBzeXN0ZW0uc3lzQ29udGFjdC4wCisgICAgc25tcGdldCBcLXYxIFwtQ2YgXC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzdGVtLnN5c1VwVGltZSBzeXN0ZW0uc3lzQ29udGFjdC4wCiAuZmkKIC5QUAogVGhpcyBleGFtcGxlIHdpbGwgcmV0dXJuIHRoZSBmb2xsb3dpbmc6CkBAIC05Nyw3ICs5Nyw3IEBACiAuUFAKIFNpbWlsYXJseSwgdGhlIGNvbW1hbmQ6CiAubmYKLSAgICBzbm1wZ2V0IC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c3RlbS5zeXNVcFRpbWUgc3lzdGVtLnN5c0NvbnRhY3QuMAorICAgIHNubXBnZXQgXC12MSBcLWMgcHVibGljIGxvY2FsaG9zdCBzeXN0ZW0uc3lzVXBUaW1lIHN5c3RlbS5zeXNDb250YWN0LjAKIC5maQogLlBQCiBXaWxsIHJldHVybjoKQEAgLTExMiw3ICsxMTIsNyBAQAogLlBQCiBXaXRoIHRoZQogLkIKLS1DZgorXC1DZgogZmxhZyBzcGVjaWZpZWQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IHRyeSB0byBmaXggdGhlIFBEVSBmb3IgeW91LgogLlNIICJTRUUgQUxTTyIKIHNubXBjbWQoMSksIHNubXB3YWxrKDEpLCB2YXJpYWJsZXMoNSkuCmRpZmYgLS1naXQgYS9tYW4vc25tcGdldG5leHQuMS5kZWYgYi9tYW4vc25tcGdldG5leHQuMS5kZWYKaW5kZXggM2IxM2Q0ZC4uZTZjNmU2MCAxMDA2NDQKLS0tIGEvbWFuL3NubXBnZXRuZXh0LjEuZGVmCisrKyBiL21hbi9zbm1wZ2V0bmV4dC4xLmRlZgpAQCAtMSw3ICsxLDcgQEAKIC5cIiAtKi0gbnJvZmYgLSotCi0uXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAKLS5cIiBTZWUgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlcgotLlwiIGNvcHlyaWdodHMgdGhhdCBtYXkgYXBwbHk6CisuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisuXCIgdGhhdCBtYXkgYXBwbHk6CiAuXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAuXCIgCUNvcHlyaWdodCAxOTg4LCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CiAuXCIgCkBAIC0yOCw5ICsyOCw5IEBACiBzbm1wZ2V0bmV4dCAtIGNvbW11bmljYXRlcyB3aXRoIGEgbmV0d29yayBlbnRpdHkgdXNpbmcgU05NUCBHRVRORVhUIHJlcXVlc3RzCiAuU0ggU1lOT1BTSVMKIC5CIHNubXBnZXRuZXh0Ci1bQ09NTU9OIE9QVElPTlNdIFstQ2ZdIEFHRU5UIE9JRCBbT0lEXS4uLgorW0NPTU1PTiBPUFRJT05TXSBbXC1DZl0gQUdFTlQgT0lEIFtPSURdLi4uCiAuU0ggREVTQ1JJUFRJT04KLS5CIHNubXBnZXQKKy5CIHNubXBnZXRuZXh0CiBpcyBhbiBTTk1QIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgU05NUCBHRVRORVhUIHJlcXVlc3QgdG8gcXVlcnkgZm9yCiBpbmZvcm1hdGlvbiBvbiBhIG5ldHdvcmsgZW50aXR5LiAgT25lIG9yIG1vcmUgb2JqZWN0IGlkZW50aWZpZXJzCiAoT0lEcykgbWF5IGJlIGdpdmVuIGFzIGFyZ3VtZW50cyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRWFjaCB2YXJpYWJsZQpAQCAtNDEsNyArNDEsNyBAQAogLlBQCiBGb3IgZXhhbXBsZToKIC5QUAotc25tcGdldG5leHQgLWMgcHVibGljIHpldXMgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZUeXBlLjEKK3NubXBnZXRuZXh0IFwtYyBwdWJsaWMgemV1cyBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZlR5cGUuMQogLlBQCiB3aWxsIHJldHJpZXZlIHRoZSB2YXJpYWJsZSBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZlR5cGUuMjoKIC5QUApAQCAtNTAsMTEgKzUwLDExIEBACiBJZiB0aGUgbmV0d29yayBlbnRpdHkgaGFzIGFuIGVycm9yIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QgcGFja2V0LCBhbgogZXJyb3IgbWVzc2FnZSB3aWxsIGJlIHNob3duLCBoZWxwaW5nIHRvIHBpbnBvaW50IGluIHdoYXQgd2F5IHRoZQogcmVxdWVzdCB3YXMgbWFsZm9ybWVkLgotLlNIIE9QVElPTlMKKy5TSCAiT1BUSU9OUyIKIC5UUCA4Ci0uQiAtQ2YKKy5CIFwtQ2YKIElmCi0uQiAtQ2YKKy5CIFwtQ2YKIGlzCiAuSSBub3QKIHNwZWNpZmllZCwgc29tZSBhcHBsaWNhdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAKIHRha2VzIHRoZSBjb21tb24gb3B0aW9ucyBkZXNjcmliZWQgaW4gdGhlCiAuSSBzbm1wY21kKDEpCiBtYW51YWwgcGFnZS4KLU5vdGUgdGhhdAorTm90ZSB0aGF0IAogLkIgc25tcGdldG5leHQKIFJFUVVJUkVTIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIGFnZW50IHRvIHF1ZXJ5CiBhbmQgYXQgbGVhc3Qgb25lIE9JRCBhcmd1bWVudCwgYXMgZGVzY3JpYmVkIHRoZXJlLgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBuZXRzdGF0LjEuZGVmIGIvbWFuL3NubXBuZXRzdGF0LjEuZGVmCmluZGV4IDhlMTQ1MGEuLjQ1MGFiN2YgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wbmV0c3RhdC4xLmRlZgorKysgYi9tYW4vc25tcG5ldHN0YXQuMS5kZWYKQEAgLTEyLDcgKzEyLDcgQEAKIC5cIiBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gCiAuXCIgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBDTVUgbm90IGJlCiAuXCIgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCi0uXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgCisuXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgogLlwiIAogLlwiIENNVSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HCiAuXCIgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMCkBAIC01OCwyMSArNTgsMjEgQEAKIC5cIiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAuXCIgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUE5FVFNUQVQgMSAiMjAgSmFuIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUE5FVFNUQVQgMSAiMDQgTm92IDIwMTMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcG5ldHN0YXQgXC0gZGlzcGxheSBuZXR3b3JraW5nIHN0YXR1cyBhbmQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgbmV0d29yayBlbnRpdHkgdmlhIFNOTVAKIC5TSCBTWU5PUFNJUwogLkIgc25tcG5ldHN0YXQKLVtDT01NT04gT1BUSU9OU10gWy1DYV0gWy1Dbl0gQUdFTlQKK1tDT01NT04gT1BUSU9OU10gW1wtQ2FdIFtcLUNuXSBbXC1Ddl0gW1wtQ2YgYWRkcmVzc19mYW1pbHldIEFHRU5UCiAuYnIKIC5CIHNubXBuZXRzdGF0Ci1bQ09NTU9OIE9QVElPTlNdIFstQ2ldIFstQ29dIFstQ3JdIFstQ25dIFstQ3NdIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIFtcLUNyXSBbXC1Dbl0gW1wtQ3ZdIFtcLUNmIGFkZHJlc3NfZmFtaWx5XSBBR0VOVAogLmJyCiAuQiBzbm1wbmV0c3RhdAotW0NPTU1PTiBPUFRJT05TXSBbLUNpXSBbLUNuXSBbLUNJIGludGVyZmFjZV0gQUdFTlQgW2ludGVydmFsXQorW0NPTU1PTiBPUFRJT05TXSBbXC1DaV0gW1wtQyBvIHwgYiB8IGRdIFtcLUNuXSBbXC1Ddl0gW1wtQ0kgaW50ZXJmYWNlXSBbXC1DdyBpbnRlcnZhbF0gQUdFTlQKIC5icgogLkIgc25tcG5ldHN0YXQKLVtDT01NT04gT1BUSU9OU10gWy1DYV0gWy1Dbl0gWy1Dc10gWy1DcCBwcm90b2NvbF0gQUdFTlQKK1tDT01NT04gT1BUSU9OU10gW1wtQ3Nbc11dIFtcLUNwIHByb3RvY29sXSBBR0VOVAogLlNIIERFU0NSSVBUSU9OCiBUaGUKIC5CIHNubXBuZXRzdGF0IApAQCAtOTEsNiArOTEsMTIgQEAKIHRyYWZmaWMgb24gdGhlIGNvbmZpZ3VyZWQgbmV0d29yayBpbnRlcmZhY2VzLgogVGhlIGZvdXJ0aCBmb3JtIGRpc3BsYXlzIHN0YXRpc3RpY3MgYWJvdXQgdGhlIG5hbWVkIHByb3RvY29sLgogLlBQCisuQiBzbm1wbmV0c3RhdAord2lsbCBpc3N1ZSBHRVRCVUxLIHJlcXVlc3RzIHRvIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbgoraWYgYXQgbGVhc3QgcHJvdG9jb2wgdmVyc2lvbgorLkkgdjIKK2lzIHVzZWQuCisuUFAKIEFHRU5UIGlkZW50aWZpZXMgYSB0YXJnZXQgU05NUCBhZ2VudCwgd2hpY2ggaXMKIGluc3RydW1lbnRlZCB0byBtb25pdG9yIHRoZSBnaXZlbiBvYmplY3RzLgogQXQgaXRzIHNpbXBsZXN0LCB0aGUgQUdFTlQgc3BlY2lmaWNhdGlvbiB3aWxsCkBAIC0xMDksMTggKzExNSwzMiBAQAogZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGNvbW1vbiBvcHRpb25zCiBhcyB3ZWxsIGFzIHRoZWlyIGRlc2NyaXB0aW9ucy4KIC5QUAorLkIgXC1DTAordXNlIHRoZSBsZWdhY3kgU05NUCBNSUIgZWxlbWVudHMsIG5vdCB0aGUgbW9kZXJuIElQIHZlcnNpb24gYWdub3N0aWMKK3RhYmxlcy4gXGZJc25tcG5ldHN0YXRcZlIgIHdpbGwgYXV0b21hdGljYWxseSBmYWxsIGJhY2sgdG8gdGhlIGxlZ2FjeQordGFibGVzIGlmIHRoZSBtb2Rlcm4gb25lcyBhcmUgbm90IGF2YWlsYWJsZS4KKy5QUAogLkIgXC1DYQogV2l0aCB0aGUgZGVmYXVsdCBkaXNwbGF5LAogc2hvdyB0aGUgc3RhdGUgb2YgYWxsIHNvY2tldHM7IG5vcm1hbGx5IHNvY2tldHMgdXNlZCBieQogc2VydmVyIHByb2Nlc3NlcyBhcmUgbm90IHNob3duLgogLlBQCisuQkkgXC1DZiAiIGFkZHJlc3NfZmFtaWx5IgorT25seSBzaG93IGVudHJpZXMgZm9yIHRoZSBzZWxlY3RlZCBhZGRyZXNzIGZhbWlseSAoaW5ldCwgaW5ldDYpCisuUFAKIC5CIFwtQ2kKIFNob3cgdGhlIHN0YXRlIG9mIGFsbCBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2VzLgotVGhlICBpbnRlcmZhY2UgIGRpc3BsYXkgIHByb3ZpZGVzICBhICB0YWJsZSAgb2YgY3VtdWxhdGl2ZQorVGhlIGludGVyZmFjZSBkaXNwbGF5IHByb3ZpZGVzIGEgdGFibGUgb2YgY3VtdWxhdGl2ZQogc3RhdGlzdGljcyByZWdhcmRpbmcgcGFja2V0cyB0cmFuc2ZlcnJlZCwgZXJyb3JzLCBhbmQgY29sbGlzaW9ucy4KLVRoZSAgbmV0d29yayBhZGRyZXNzZXMgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIG1heGltdW0gdHJhbnNtaXNzaW9uIAorVGhlIG5ldHdvcmsgYWRkcmVzc2VzIG9mIHRoZSBpbnRlcmZhY2UgYW5kIHRoZSBtYXhpbXVtIHRyYW5zbWlzc2lvbiAKIHVuaXQgKGBgbXR1JycpIGFyZSBhbHNvIGRpc3BsYXllZC4KIC5QUAorLkIgXC1DZAorQWRkIGRyb3BwZWQgcGFja2V0cyB0byB0aGUgaW50ZXJmYWNlIGRpc3BsYXkuCisuUFAKKy5CIFwtQ2IKK1Nob3cgYW4gZXh0ZW5kZWQgaW50ZXJmYWNlIHN0YXR1cywgZ2l2aW5nIG9jdGV0cyBpbiBhZGRpdGlvbiB0byBwYWNrZXRzLgorLlBQCiAuQiBcLUNvCiBTaG93IGFuIGFiYnJldmlhdGVkIGludGVyZmFjZSBzdGF0dXMsIGdpdmluZyBvY3RldHMgaW4gcGxhY2Ugb2YgcGFja2V0cy4KIFRoaXMgaXMgdXNlZnVsIHdoZW4gZW5xdWlyaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyAoc3VjaCBhcyBGcmFtZS1SZWxheSBjaXJjdWl0cykKQEAgLTEzOSw2ICsxNTksMTAgQEAKIHN5bWJvbGljYWxseSkuCiBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgZGlzcGxheSBmb3JtYXRzLgogLlBQCisuQiBcLUN2CitBbGxvdyBsb25nIGhvc3Qgb3Igc2VydmljZSBuYW1lcyB0byBicmVhayB0aGUgY29sdW1uYXIgb3V0cHV0LgorVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIGRpc3BsYXkgZm9ybWF0cy4KKy5QUAogLkJJIFwtQ3AgIiBwcm90b2NvbCIKIFNob3cgc3RhdGlzdGljcyBhYm91dCAKIC5JUiBwcm90b2NvbCwKQEAgLTE1MiwxOSArMTc2LDIwIEBACiBpcyB1bmtub3duIG9yIGlmIHRoZXJlIGlzIG5vIHN0YXRpc3RpY3Mgcm91dGluZSBmb3IgaXQuCiAuUFAKIC5CIFwtQ3MKLVNob3cgcGVyLXByb3RvY29sIHN0YXRpc3RpY3MuICBXaGVuIHVzZWQgd2l0aCB0aGUKLS5CIFwtQ3IKLW9wdGlvbiwgc2hvdyByb3V0aW5nIHN0YXRpc3RpY3MgaW5zdGVhZC4KK1Nob3cgcGVyLXByb3RvY29sIHN0YXRpc3RpY3MuCitJZiB0aGlzIGlzIGR1cGxpY2F0ZWQgKC1Dc3MpIHN0YXRpc3RpY3MgZW50cmllcyB3aGljaCBhcmUgemVybyB3aWxsCitiZSBzdXBwcmVzc2VkLgogLlBQCiAuQiBcLUNyCiBTaG93IHRoZSByb3V0aW5nIHRhYmxlcy4KLVdoZW4KLS5CIFwtQ3MKLWlzIGFsc28gcHJlc2VudCwgc2hvdyBwZXItcHJvdG9jb2wgcm91dGluZyBzdGF0aXN0aWNzIGluc3RlYWQgb2YgCi10aGUgcm91dGluZyB0YWJsZXMuCiAuUFAKLVdoZW4gIHNubXBuZXRzdGF0IGlzIGludm9rZWQgd2l0aCBhbiBpbnRlcnZhbCBhcmd1bWVudCwgaXQKLWRpc3BsYXlzIGEgcnVubmluZyBjb3VudCBvZiBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gIG5ldHdvcmsKKy5CSSBcLUNSICIgcmVwZWF0ZXJzIgorRm9yIEdFVEJVTEsgcmVxdWVzdHMsCisuSSByZXBlYXRlcnMKK3NwZWNpZmllcyB0aGUgbWF4LXJlcGVhdGVycyB2YWx1ZSB0byB1c2UuCisuUFAKK1doZW4gc25tcG5ldHN0YXQgaXMgaW52b2tlZCB3aXRoIGFuIGludGVydmFsIGFyZ3VtZW50LCBpdAorZGlzcGxheXMgYSBydW5uaW5nIGNvdW50IG9mIHN0YXRpc3RpY3MgcmVsYXRlZCB0byBuZXR3b3JrCiBpbnRlcmZhY2VzLgogLkkgaW50ZXJ2YWwKIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuCkBAIC0xNzMsNDMgKzE5OCw0MyBAQAogLkkgVGhlIEFjdGl2ZSBTb2NrZXRzIERpc3BsYXkgKGRlZmF1bHQpCiAuUFAKIFRoZSBkZWZhdWx0IGRpc3BsYXksIGZvciBhY3RpdmUgc29ja2V0cywgc2hvd3MgdGhlIGxvY2FsCi1hbmQgcmVtb3RlIGFkZHJlc3NlcywgcHJvdG9jb2wsIGFuZCB0aGUgaW50ZXJuYWwgc3RhdGUgIG9mCi10aGUgICBwcm90b2NvbC4gICAgQWRkcmVzcyAgIGZvcm1hdHMgICBhcmUgICBvZiAgdGhlICBmb3JtCi1gYGhvc3QucG9ydCcnIG9yIGBgbmV0d29yay5wb3J0JycgaWYgIGEgIHNvY2tldCdzICBhZGRyZXNzCi1zcGVjaWZpZXMgIGEgIG5ldHdvcmsgIGJ1dCBubyBzcGVjaWZpYyBob3N0IGFkZHJlc3MuICBXaGVuCithbmQgcmVtb3RlIGFkZHJlc3NlcywgcHJvdG9jb2wsIGFuZCB0aGUgaW50ZXJuYWwgc3RhdGUgb2YKK3RoZSBwcm90b2NvbC4gIEFkZHJlc3MgZm9ybWF0cyBhcmUgb2YgdGhlIGZvcm0KK2BgaG9zdC5wb3J0Jycgb3IgYGBuZXR3b3JrLnBvcnQnJyBpZiBhIHNvY2tldCdzIGFkZHJlc3MKK3NwZWNpZmllcyBhIG5ldHdvcmsgYnV0IG5vIHNwZWNpZmljIGhvc3QgYWRkcmVzcy4gIFdoZW4KIGtub3duLCB0aGUgaG9zdCBhbmQgbmV0d29yayBhZGRyZXNzZXMgYXJlIGRpc3BsYXllZCBzeW1ib2xpY2FsbHkKLWFjY29yZGluZyAgIHRvICB0aGUgIGRhdGEgIGJhc2VzIAotLkkgL2V0Yy9ob3N0cyAgYW5kCithY2NvcmRpbmcgdG8gdGhlIGRhdGFiYXNlcyAKKy5JIC9ldGMvaG9zdHMgYW5kCiAuSVIgL2V0Yy9uZXR3b3JrcywKLXJlc3BlY3RpdmVseS4gIElmIGEgc3ltYm9saWMgIG5hbWUgIGZvciAgYW4KLWFkZHJlc3MgIGlzIHVua25vd24sIG9yIGlmIHRoZQorcmVzcGVjdGl2ZWx5LiAgSWYgYSBzeW1ib2xpYyBuYW1lIGZvciBhbgorYWRkcmVzcyBpcyB1bmtub3duLCBvciBpZiB0aGUKIC5CIFwtQ24KIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZQotYWRkcmVzcyBpcyBwcmludGVkIG51bWVyaWNhbGx5LCBhY2NvcmRpbmcgdG8gIHRoZSAgYWRkcmVzcworYWRkcmVzcyBpcyBwcmludGVkIG51bWVyaWNhbGx5LCBhY2NvcmRpbmcgdG8gdGhlIGFkZHJlc3MKIGZhbWlseS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgSW50ZXJuZXQgYGBkb3QKLWZvcm1hdCwnJyByZWZlciAgdG8KK2Zvcm1hdCwnJyByZWZlciB0bwogLklSIGluZXQoM04pLgotVW5zcGVjaWZpZWQsICBvciAgYGB3aWxkY2FyZCcnLCBhZGRyZXNzZXMgYW5kIHBvcnRzIGFwcGVhciBhcyBgYConJy4KK1Vuc3BlY2lmaWVkLCBvciBgYHdpbGRjYXJkJycsIGFkZHJlc3NlcyBhbmQgcG9ydHMgYXBwZWFyIGFzIGBgKicnLgogLlBQCiAuSSBUaGUgSW50ZXJmYWNlIERpc3BsYXkKIC5QUAotVGhlICBpbnRlcmZhY2UgIGRpc3BsYXkgIHByb3ZpZGVzICBhICB0YWJsZSAgb2YgY3VtdWxhdGl2ZQorVGhlIGludGVyZmFjZSBkaXNwbGF5IHByb3ZpZGVzIGEgdGFibGUgb2YgY3VtdWxhdGl2ZQogc3RhdGlzdGljcyByZWdhcmRpbmcgcGFja2V0cyB0cmFuc2ZlcnJlZCwgZXJyb3JzLCBhbmQgY29sLQotbGlzaW9ucy4gICBUaGUgIG5ldHdvcmsgYWRkcmVzc2VzIG9mIHRoZSBpbnRlcmZhY2UgYW5kIHRoZQorbGlzaW9ucy4gIFRoZSBuZXR3b3JrIGFkZHJlc3NlcyBvZiB0aGUgaW50ZXJmYWNlIGFuZCB0aGUKIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKGBgbXR1JycpIGFyZSBhbHNvIGRpc3BsYXllZC4KIC5QUAogLkkgVGhlIFJvdXRpbmcgVGFibGUgRGlzcGxheQogLlBQCi1UaGUgcm91dGluZyB0YWJsZSBkaXNwbGF5IGluZGljYXRlcyB0aGUgIGF2YWlsYWJsZSAgcm91dGVzCi1hbmQgIHRoZWlyICBzdGF0dXMuICAgRWFjaCByb3V0ZSBjb25zaXN0cyBvZiBhIGRlc3RpbmF0aW9uCi1ob3N0IG9yIG5ldHdvcmsgYW5kIGEgZ2F0ZXdheSB0byB1c2UgaW4gIGZvcndhcmRpbmcgIHBhY2stCi1ldHMuICAgVGhlIGZsYWdzIGZpZWxkIHNob3dzIHRoZSBzdGF0ZSBvZiB0aGUgcm91dGUgKGBgVScnCi1pZiBgYHVwJycpLCB3aGV0aGVyIHRoZSByb3V0ZSBpcyAgdG8gIGEgIGdhdGV3YXkgIChgYEcnJyksCi13aGV0aGVyICB0aGUgIHJvdXRlICB3YXMgY3JlYXRlZCBkeW5hbWljYWxseSBieSBhIHJlZGlyZWN0Ci0oYGBEJycpLCBhbmQgd2hldGhlciB0aGUgcm91dGUgIGhhcyAgYmVlbiAgbW9kaWZpZWQgIGJ5ICBhCi1yZWRpcmVjdCAgKGBgTScnKS4gICBEaXJlY3QgIHJvdXRlcyAgYXJlICBjcmVhdGVkIGZvciBlYWNoCi1pbnRlcmZhY2UgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGhvc3Q7ICB0aGUgIGdhdGV3YXkgIGZpZWxkCi1mb3IgIHN1Y2ggZW50cmllcyBzaG93cyB0aGUgYWRkcmVzcyBvZiB0aGUgb3V0Z29pbmcgaW50ZXItCitUaGUgcm91dGluZyB0YWJsZSBkaXNwbGF5IGluZGljYXRlcyB0aGUgYXZhaWxhYmxlIHJvdXRlcworYW5kIHRoZWlyIHN0YXR1cy4gIEVhY2ggcm91dGUgY29uc2lzdHMgb2YgYSBkZXN0aW5hdGlvbgoraG9zdCBvciBuZXR3b3JrIGFuZCBhIGdhdGV3YXkgdG8gdXNlIGluIGZvcndhcmRpbmcgcGFjay0KK2V0cy4gIFRoZSBmbGFncyBmaWVsZCBzaG93cyB0aGUgc3RhdGUgb2YgdGhlIHJvdXRlIChgYFUnJworaWYgYGB1cCcnKSwgd2hldGhlciB0aGUgcm91dGUgaXMgdG8gYSBnYXRld2F5IChgYEcnJyksCit3aGV0aGVyIHRoZSByb3V0ZSB3YXMgY3JlYXRlZCBkeW5hbWljYWxseSBieSBhIHJlZGlyZWN0CisoYGBEJycpLCBhbmQgd2hldGhlciB0aGUgcm91dGUgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYQorcmVkaXJlY3QgKGBgTScnKS4gIERpcmVjdCByb3V0ZXMgYXJlIGNyZWF0ZWQgZm9yIGVhY2gKK2ludGVyZmFjZSBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaG9zdDsgdGhlIGdhdGV3YXkgZmllbGQKK2ZvciBzdWNoIGVudHJpZXMgc2hvd3MgdGhlIGFkZHJlc3Mgb2YgdGhlIG91dGdvaW5nIGludGVyLQogZmFjZS4gIFRoZSBpbnRlcmZhY2UgZW50cnkgaW5kaWNhdGVzIHRoZSBuZXR3b3JrIGludGVyZmFjZQogdXRpbGl6ZWQgZm9yIHRoZSByb3V0ZS4KIC5QUApAQCAtMjIwLDEwICsyNDUsMTAgQEAKIGlzIGludm9rZWQgd2l0aCBhbgogLkkgaW50ZXJ2YWwKIGFyZ3VtZW50LCBpdAotZGlzcGxheXMgYSBydW5uaW5nIGNvdW50IG9mIHN0YXRpc3RpY3MgcmVsYXRlZCB0byAgbmV0d29yawotaW50ZXJmYWNlcy4gICBUaGlzICBkaXNwbGF5ICBjb25zaXN0cyAgb2YgYSBjb2x1bW4gZm9yIHRoZQorZGlzcGxheXMgYSBydW5uaW5nIGNvdW50IG9mIHN0YXRpc3RpY3MgcmVsYXRlZCB0byBuZXR3b3JrCitpbnRlcmZhY2VzLiAgVGhpcyBkaXNwbGF5IGNvbnNpc3RzIG9mIGEgY29sdW1uIGZvciB0aGUKIHByaW1hcnkgaW50ZXJmYWNlIGFuZCBhIGNvbHVtbiBzdW1tYXJpemluZyBpbmZvcm1hdGlvbiBmb3IKLWFsbCAgaW50ZXJmYWNlcy4gICBUaGUgIHByaW1hcnkgIGludGVyZmFjZSBtYXkgYmUgcmVwbGFjZWQKK2FsbCBpbnRlcmZhY2VzLiAgVGhlIHByaW1hcnkgaW50ZXJmYWNlIG1heSBiZSByZXBsYWNlZAogd2l0aCBhbm90aGVyIGludGVyZmFjZSB3aXRoIHRoZQogLkIgXC1DSQogb3B0aW9uLiAgVGhlIGZpcnN0IGxpbmUKQEAgLTI0Myw3ICsyNjgsNyBAQAogLlNIIEVYQU1QTEVTCiBFeGFtcGxlIG9mIHVzaW5nIHNubXBuZXRzdGF0IHRvIGRpc3BsYXkgYWN0aXZlIHNvY2tldHMgKGRlZmF1bHQpOgogLlBQCi0lIHNubXBuZXRzdGF0IC12IDJjIC1jIHB1YmxpYyAtQ2EgdGVzdGhvc3QKKyUgc25tcG5ldHN0YXQgXC12IDJjIFwtYyBwdWJsaWMgXC1DYSB0ZXN0aG9zdAogLlBQCiAubmYKIEFjdGl2ZSBJbnRlcm5ldCAodGNwKSBDb25uZWN0aW9ucyAoaW5jbHVkaW5nIHNlcnZlcnMpCkBAIC0yNjcsNyArMjkyLDcgQEAKIFwmLi4uCiAuZmkKIC5QUAotJSBzbm1wbmV0c3RhdCAtdiAyYyAtYyBwdWJsaWMgLUNpIHRlc3Rob3N0CislIHNubXBuZXRzdGF0IFwtdiAyYyBcLWMgcHVibGljIFwtQ2kgdGVzdGhvc3QKIC5QUAogLm5mCiBOYW1lICAgICBNdHUgTmV0d29yayAgICBBZGRyZXNzICAgICAgICAgIElwa3RzICAgSWVycnMgICAgT3BrdHMgT2VycnMgUXVldWUKQEAgLTI3OCw3ICszMDMsNyBAQAogRXhhbXBsZSBvZiB1c2luZyBzbm1wbmV0c3RhdCB0byBzaG93IHN0YXRpc3RpY3MgYWJvdXQgYSBzcGVjaWZpYyBwcm90b2NvbDoKIC5QUAogLm5mCi0lIHNubXBuZXRzdGF0IC12IDJjIC1jIHB1YmxpYyAtQ3AgdGNwIHRlc3Rob3N0CislIHNubXBuZXRzdGF0IFwtdiAyYyBcLWMgcHVibGljIFwtQ3AgdGNwIHRlc3Rob3N0CiAKIEFjdGl2ZSBJbnRlcm5ldCAodGNwKSBDb25uZWN0aW9ucwogUHJvdG8gTG9jYWwgQWRkcmVzcyAgICAgICAgICAgICAgICBGb3JlaWduIEFkZHJlc3MgICAgICAgICAgICAgICAgIChzdGF0ZSkKZGlmZiAtLWdpdCBhL21hbi9zbm1wc2V0LjEuZGVmIGIvbWFuL3NubXBzZXQuMS5kZWYKaW5kZXggMzQ2YWUzYS4uYjBjNGUwNyAxMDA2NDQKLS0tIGEvbWFuL3NubXBzZXQuMS5kZWYKKysrIGIvbWFuL3NubXBzZXQuMS5kZWYKQEAgLTEsNyArMSw3IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gCi0uXCIgU2VlIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIKLS5cIiBjb3B5cmlnaHRzIHRoYXQgbWF5IGFwcGx5OgorLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQorLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworLlwiIHRoYXQgbWF5IGFwcGx5OgogLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLlwiIAlDb3B5cmlnaHQgMTk4OCwgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQogLlwiIApAQCAtODYsMTMgKzg2LDEzIEBACiAuUFAKIEZvciBleGFtcGxlOgogLlBQCi1zbm1wc2V0IC1jIHByaXZhdGUgLXYgMSB0ZXN0LWh1YiBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgZHB6QG5vYy5ydXRnZXJzLmVkdSBpcC5pcGZvcndhcmRpbmcuMCA9IDIKK3NubXBzZXQgXC1jIHByaXZhdGUgXC12IDEgdGVzdFwtaHViIHN5c3RlbS5zeXNDb250YWN0LjAgcyBkcHpAbm9jLnJ1dGdlcnMuZWR1IGlwLmlwZm9yd2FyZGluZy4wID0gMgogLlBQCiB3aWxsIHNldCB0aGUgdmFyaWFibGVzIHN5c0NvbnRhY3QuMCBhbmQgaXBGb3J3YXJkaW5nLjA6CiAuUFAKIHN5c3RlbS5zeXNDb250YWN0LjAgPSBTVFJJTkc6ICJkcHpAbm9jLnJ1dGdlcnMuZWR1IgogLmJyCi1pcC5pcEZvcndhcmRpbmcuMCA9IElOVEVHRVI6IG5vdC1mb3J3YXJkaW5nKDIpCitpcC5pcEZvcndhcmRpbmcuMCA9IElOVEVHRVI6IG5vdFwtZm9yd2FyZGluZygyKQogLlBQCiBJZiB0aGUgbmV0d29yayBlbnRpdHkgaGFzIGFuIGVycm9yIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QgcGFja2V0LCBhbgogZXJyb3IgcGFja2V0IHdpbGwgYmUgcmV0dXJuZWQgYW5kIGEgbWVzc2FnZSB3aWxsIGJlIHNob3duLCBoZWxwaW5nIHRvCmRpZmYgLS1naXQgYS9tYW4vc25tcHN0YXR1cy4xLmRlZiBiL21hbi9zbm1wc3RhdHVzLjEuZGVmCmluZGV4IGJiYTQ4YjMuLjExMjYxNDYgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wc3RhdHVzLjEuZGVmCisrKyBiL21hbi9zbm1wc3RhdHVzLjEuZGVmCkBAIC0zMiw3ICszMiw3IEBACiBzbm1wc3RhdHVzIC0gcmV0cmlldmVzIGEgZml4ZWQgc2V0IG9mIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gZnJvbSBhIG5ldHdvcmsgZW50aXR5CiAuU0ggU1lOT1BTSVMKIC5CIHNubXBzdGF0dXMKLVtDT01NT04gT1BUSU9OU10gWy1DZl0gQUdFTlQKK1tDT01NT04gT1BUSU9OU10gW1wtQ2ZdIEFHRU5UCiAuU0ggREVTQ1JJUFRJT04KIC5CIHNubXBzdGF0dXMKIGlzIGFuIFNOTVAgYXBwbGljYXRpb24gdGhhdCByZXRyaWV2ZXMgc2V2ZXJhbCBpbXBvcnRhbnQgc3RhdGlzdGljcwpAQCAtNjgsNyArNjgsNyBAQAogLlBQCiBGb3IgZXhhbXBsZToKIC5QUAotc25tcHN0YXR1cyAtYyBwdWJsaWMgLXYgMSBuZXRkZXYta2JveC5jYy5jbXUuZWR1Citzbm1wc3RhdHVzIFwtYyBwdWJsaWMgXC12IDEgbmV0ZGV2XC1rYm94LmNjLmNtdS5lZHUKIC5QUAogd2lsbCBwcm9kdWNlIG91dHB1dCBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmc6CiAuUFAKQEAgLTkwLDcgKzkwLDcgQEAKIC5CIHNubXBzdGF0dXMKIHdpbGwgYXR0ZW1wdCB0byByZWZvcm0gaXRzIHJlcXVlc3QgdG8gZWxpbWluYXRlIHRoZSBtYWxmb3JtZWQKIHZhcmlhYmxlICh1bmxlc3MgdGhlCi0uQiAtQ2YKKy5CIFwtQ2YKIG9wdGlvbiBpcyBnaXZlbiwgc2VlIGJlbG93KSwgYnV0IHRoaXMgdmFyaWFibGUgd2lsbCB0aGVuIGJlIG1pc3NpbmcKIGZyb20gdGhlIGRpc3BsYXllZCBkYXRhLgogLlBQCkBAIC0xMDIsMTAgKzEwMiwxMCBAQAogZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIENPTU1PTiBPUFRJT05TCiBhcyB3ZWxsIGFzIHRoZWlyIGRlc2NyaXB0aW9ucy4KIC5UUAotLkIgLUNmCisuQiBcLUNmCiBCeSBkZWZhdWx0LCBzbm1wc3RhdHVzIHdpbGwgdHJ5IHRvIGZpeCBlcnJvcnMgcmV0dXJuZWQKIGJ5IHRoZSBhZ2VudCBhbmQgcmV0cnkgYSByZXF1ZXN0LiBJbiB0aGlzIHNpdHVhdGlvbiwKLXRoZSBjb21tYW5kIHdpbGwgZGlzcGxheSB0aGUgZGF0YSB0aGF0IGl0IGNhbi4gSWYgdGhlIC1DZiBvcHRpb24KK3RoZSBjb21tYW5kIHdpbGwgZGlzcGxheSB0aGUgZGF0YSB0aGF0IGl0IGNhbi4gSWYgdGhlIFwtQ2Ygb3B0aW9uCiBpcyBzcGVjaWZpZWQsIHRoZW4gc25tcHN0YXR1cyB3aWxsIG5vdCB0cnkgdG8gZml4CiBlcnJvcnMsIGFuZCB0aGUgZXJyb3Igd2lsbCBjYXVzZSB0aGUgY29tbWFuZCB0byB0ZXJtaW5hdGUuCiAuU0ggIlNFRSBBTFNPIgpkaWZmIC0tZ2l0IGEvbWFuL3NubXB0YWJsZS4xLmRlZiBiL21hbi9zbm1wdGFibGUuMS5kZWYKaW5kZXggNTc1YjAzNC4uNGU2NWNiNCAxMDA2NDQKLS0tIGEvbWFuL3NubXB0YWJsZS4xLmRlZgorKysgYi9tYW4vc25tcHRhYmxlLjEuZGVmCkBAIC0yMCwyOCArMjAsMjEgQEAKIC5cIiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAuXCIgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUFRBQkxFIDEgIjA2IFNlcCAyMDAzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBUQUJMRSAxICIyNSBKdWwgMjAwMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wdGFibGUgLSByZXRyaWV2ZSBhbiBTTk1QIHRhYmxlIGFuZCBkaXNwbGF5IGl0IGluIHRhYnVsYXIgZm9ybQogLlNIIFNZTk9QU0lTCiAuQiBzbm1wdGFibGUKLVtDT01NT04gT1BUSU9OU10gWy1DYl0gWy1DQl0gWy1DaF0gWy1DSF0gWy1DaV0gWy1DZiBTVFJJTkddIFstQ3cgV0lEVEhdCi1BR0VOVCBUQUJMRS1PSUQKK1tDT01NT04gT1BUSU9OU10gW1wtQ2JdIFtcLUNCXSBbXC1DaF0gW1wtQ0hdIFtcLUNpXSBbXC1DZiBTVFJJTkddIFtcLUN3IFdJRFRIXQorQUdFTlQgVEFCTEVcLU9JRAogLlNIIERFU0NSSVBUSU9OCiAuQiBzbm1wdGFibGUKIGlzIGFuIFNOTVAgYXBwbGljYXRpb24gdGhhdCByZXBlYXRlZGx5IHVzZXMgdGhlIFNOTVAgR0VUTkVYVCBvcgogR0VUQlVMSyByZXF1ZXN0cyB0byBxdWVyeSBmb3IgaW5mb3JtYXRpb24gb24gYSBuZXR3b3JrIGVudGl0eS4gIFRoZQotcGFyYW1ldGVyCi0uSSBUQUJMRS1PSUQKLW11c3Qgc3BlY2lmeSBhbiBTTk1QIHRhYmxlLgotLlBQCi1zbm1wdGFibGUgaXMgYW4gU05NUCBhcHBsaWNhdGlvbiB0aGF0IHJlcGVhdGVkbHkgdXNlcyB0aGUKLVNOTVAgR0VUTkVYVCBvciBHRVRCVUxLIHJlcXVlc3RzIHRvIHF1ZXJ5IGZvciAgaW5mb3JtYXRpb24KLW9uIGEgbmV0d29yayBlbnRpdHkuICBUaGUgcGFyYW1ldGVyIFRBQkxFLU9JRCBtdXN0IHNwZWNpZnkKLWFuIFNOTVAgdGFibGUuCitwYXJhbWV0ZXIgVEFCTEVcLU9JRCBtdXN0IHNwZWNpZnkgYW4gU05NUCB0YWJsZS4KIAogQUdFTlQgaWRlbnRpZmllcyBhIHRhcmdldCBTTk1QIGFnZW50LCB3aGljaCBpcyBpbnN0cnVtZW50ZWQKLXRvIG1vbml0b3IgdGhlIGdpZXZuIG9iamVjdHMuICBBdCBpdHMgc2ltcGxlc3QsIHRoZSBBR0VOVAordG8gbW9uaXRvciB0aGUgZ2l2ZW4gb2JqZWN0cy4gIEF0IGl0cyBzaW1wbGVzdCwgdGhlIEFHRU5UCiBzcGVjaWZpY2F0aW9uIHdpbGwgY29uc2lzdCBvZiBhIGhvc3RuYW1lIG9yIGFuIElQdjQKIGFkZHJlc3MuICBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGNvbW1hbmQgd2lsbCBhdHRlbXB0CiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGFnZW50LCB1c2luZyBVRFAvSVB2NCB0byBwb3J0IDE2MQpAQCAtNTcsMTkgKzUwLDE5IEBACiBmb3IgYSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgQ09NTU9OIE9QVElPTlMKIGFzIHdlbGwgYXMgdGhlaXIgZGVzY3JpcHRpb25zLgogLlRQCi0uQiAtQ2IKKy5CIFwtQ2IKIERpc3BsYXkgb25seSBhIGJyaWVmIGhlYWRpbmcuIEFueSBjb21tb24gcHJlZml4IG9mIHRoZSB0YWJsZSBmaWVsZAogbmFtZXMgd2lsbCBiZSBkZWxldGVkLgogLlRQIAotLkIgLUNCCisuQiBcLUNCCiBEbyBub3QgdXNlIEdFVEJVTEsgcmVxdWVzdHMgdG8gcmV0cmlldmUgZGF0YSwgb25seSBHRVRORVhULgogLlRQIAotLkJJIC1DYyAiIENIQVJTIgorLkJJIFwtQ2MgIiBDSEFSUyIKIFByaW50IHRhYmxlIGluIGNvbHVtbnMgb2YKIC5JIENIQVJTCiBjaGFyYWN0ZXJzIHdpZHRoLgogLlRQCi0uQkkgLUNmICIgU1RSSU5HIgorLkJJIFwtQ2YgIiBTVFJJTkciCiBUaGUgc3RyaW5nCiAuSSBTVFJJTkcKIGlzIHVzZWQgdG8gc2VwYXJhdGUgdGFibGUgY29sdW1ucy4gIFdpdGggdGhpcyBvcHRpb24sIGVhY2ggdGFibGUgZW50cnkKQEAgLTc3LDI4ICs3MCwyOCBAQAogc2VwYXJhdGUgdGhlIGNvbHVtbnMgKHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBpbXBvcnQgaXQgaW50byBhCiBkYXRhYmFzZSkuICBPdGhlcndpc2UgaXQgaXMgcHJpbnRlZCBpbiBuaWNlbHkgYWxpZ25lZCBjb2x1bW5zLgogLlRQCi0uQiAtQ2gKKy5CIFwtQ2gKIERpc3BsYXkKIC5JIG9ubHkKIHRoZSBjb2x1bW4gaGVhZGluZ3MuCiAuVFAKLS5CIC1DSAorLkIgXC1DSAogRG8gbm90IGRpc3BsYXkgdGhlIGNvbHVtbiBoZWFkaW5ncy4KIC5UUAotLkIgLUNpCisuQiBcLUNpCiBUaGlzIG9wdGlvbiBwcmVwZW5kcyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IHRvIGFsbCBwcmludGVkIGxpbmVzLgogLlRQCi0uQiAtQ2wKKy5CIFwtQ2wKIExlZnQganVzdGlmeSB0aGUgZGF0YSBpbiBlYWNoIGNvbHVtbi4KIC5UUCAKLS5CSSAtQ3IgIiBSRVBFQVRFUlMiCisuQkkgXC1DciAiIFJFUEVBVEVSUyIKIEZvciBHRVRCVUxLIHJlcXVlc3RzLCAKIC5JIFJFUEVBVEVSUwogc3BlY2lmaWVzIHRoZSBtYXgtcmVwZWF0ZXJzIHZhbHVlIHRvIHVzZS4gIEZvciBHRVRORVhUIHJlcXVlc3RzLAogLkkgUkVQRUFURVJTCiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIHJldHJpZXZlIGF0IGEgdGltZS4KIC5UUCAKLS5CSSAtQ3cgIiBXSURUSCIKKy5CSSBcLUN3ICIgV0lEVEgiCiBTcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lcyB3aGVuIHRoZSB0YWJsZSBpcyBwcmludGVkLgogSWYgdGhlIGxpbmVzIHdpbGwgYmUgbG9uZ2VyLCB0aGUgdGFibGUgd2lsbCBiZSBwcmludGVkIGluIHNlY3Rpb25zIG9mCiBhdCBtb3N0IApAQCAtMTE1LDE0ICsxMDgsMTQgQEAKIC5JIHNubXBjbWQoMSkKIG1hbnVhbCBwYWdlLiAgVGhpcyBPSUQgXGZCbXVzdFxmUCBiZSB0aGF0IG9mIGEgTUlCIHRhYmxlIG9iamVjdC4KIC5TSCBFWEFNUExFUwotJCBzbm1wdGFibGUgLXYgMmMgLWMgcHVibGljIGxvY2FsaG9zdCBhdC5hdFRhYmxlCiskIHNubXB0YWJsZSBcLXYgMmMgXC1jIHB1YmxpYyBsb2NhbGhvc3QgYXQuYXRUYWJsZQogCi1TTk1QIHRhYmxlOiBhdC5hdFRhYmxlIFJGQzEyMTMtTUlCOjphdFRhYmxlCitTTk1QIHRhYmxlOiBhdC5hdFRhYmxlIFJGQzEyMTNcLU1JQjo6YXRUYWJsZQogCiBhdElmSW5kZXggICBhdFBoeXNBZGRyZXNzICAgYXROZXRBZGRyZXNzCiAgICAgICAgIDEgIDg6MDoyMDoyMDowOmFiIDEzMC4yMjUuMjQzLjMzCiAuUFAKLSQgc25tcHRhYmxlIC12IDJjIC1jIHB1YmxpYyAtQ2YgKyBsb2NhbGhvc3QgYXQuYXRUYWJsZQorJCBzbm1wdGFibGUgXC12IDJjIFwtYyBwdWJsaWMgXC1DZiArIGxvY2FsaG9zdCBhdC5hdFRhYmxlCiAKIFNOTVAgdGFibGU6IGF0LmF0VGFibGUKIApAQCAtMTMwLDcgKzEyMyw3IEBACiAxKzg6MDoyMDoyMDowOmFiKzEzMC4yMjUuMjQzLjMzCiAuUFAKIC5uZgotJCBzbm1wdGFibGUgbG9jYWxob3N0IC1DbCAtQ0IgLUNpIC1PWCAtQ2IgLUNjIDE2IC1DdyA2NCBpZlRhYmxlCiskIHNubXB0YWJsZSBsb2NhbGhvc3QgXC1DbCBcLUNCIFwtQ2kgXC1PWCBcLUNiIFwtQ2MgMTYgXC1DdyA2NCBpZlRhYmxlCiAKIFNOTVAgdGFibGU6IGlmVGFibGUKIApAQCAtMTU5LDcgKzE1Miw3IEBACiAuUFAKIC5TSCAiQlVHUyIKIFRoZSB0ZXN0IGZvcgotLkkgVEFCTEUtT0lECisuSSBUQUJMRVwtT0lECiBhY3R1YWxseSBzcGVjaWZ5aW5nIGEgdGFibGUgaXMgcmF0aGVyIGhldXJpc3RpYy4gIE5vdGUgYWxzbyB0aGF0IHRoZQogdGVzdCByZXF1aXJlcyB0aGUgZGVmaW5pbmcgTUlCIGZpbGUgdG8gYmUgbG9hZGVkLgogLlBQCmRpZmYgLS1naXQgYS9tYW4vc25tcHRlc3QuMS5kZWYgYi9tYW4vc25tcHRlc3QuMS5kZWYKaW5kZXggYzFlZGI0OC4uZGZkYWVkOCAxMDA2NDQKLS0tIGEvbWFuL3NubXB0ZXN0LjEuZGVmCisrKyBiL21hbi9zbm1wdGVzdC4xLmRlZgpAQCAtMjcsNyArMjcsNyBAQAogLlwiIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKIC5cIiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QVEVTVCAxICIwNiBTZXAgMjAwMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QVEVTVCAxICIyNSBKdWwgMjAwMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wdGVzdCAtIGNvbW11bmljYXRlcyB3aXRoIGEgbmV0d29yayBlbnRpdHkgdXNpbmcgU05NUCByZXF1ZXN0cwogLlNIIFNZTk9QU0lTCkBAIC02Miw3ICs2Miw3IEBACiAuSVIgdmFyaWFibGVzKDUpIC4KIEZvciBleGFtcGxlOgogLlBQCi1zbm1wdGVzdCAtYyBwdWJsaWMgLXYgMSB6ZXVzCitzbm1wdGVzdCBcLWMgcHVibGljIFwtdiAxIHpldXMKIC5icgogLkJSIFZhcmlhYmxlOiAiIHN5c3RlbS5zeXNEZXNjci4wIgogLmJyCkBAIC0xMTQsNyArMTE0LDcgQEAKIC5QUAogR0VUTkVYVCBSZXF1ZXN0OgogLlBQCi1UaGUgIkdFVE5FWFQgcmVxdWVzdCIgbW9kZSAoJE4pIGlzIHNpbWxhciB0byB0aGUgIkdldCByZXF1ZXN0IgorVGhlICJHRVRORVhUIHJlcXVlc3QiIG1vZGUgKCROKSBpcyBzaW1pbGFyIHRvIHRoZSAiR2V0IHJlcXVlc3QiCiBtb2RlLCBkZXNjcmliZWQgYWJvdmUuCiAuUFAKIFNFVCBSZXF1ZXN0OgpAQCAtMTc1LDcgKzE3NSw3IEBACiAuUFAKIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBzZW5kaW5nIGEgR0VUIHJlcXVlc3QgZm9yIHR3byBPSURzOgogLlBQCi0lIHNubXB0ZXN0IC12IDJjIC1jIHB1YmxpYyB0ZXN0aG9zdDo5OTk5CislIHNubXB0ZXN0IFwtdiAyYyBcLWMgcHVibGljIHRlc3Rob3N0Ojk5OTkKIC5QUAogLm5mCiBWYXJpYWJsZTogc3lzdGVtLnN5c0Rlc2NyLjAKQEAgLTE4MywxOCArMTgzLDE4IEBACiBWYXJpYWJsZToKIFJlY2VpdmVkIEdldCBSZXNwb25zZSBmcm9tIDEyOC4yLjU2LjIyMAogcmVxdWVzdGlkIDB4N0Q5RkNENjMgZXJyc3RhdCAweDAgZXJyaW5kZXggMHgwCi1TTk1QdjItTUlCOjpzeXNEZXNjci4wID0gU1RSSU5HOiBTdW5PUyB0ZXN0aG9zdCA1LjkgR2VuZXJpY18xMTIyMzMtMDIgc3VuNHUKLVNOTVB2Mi1NSUI6OnN5c0NvbnRhY3QuMCA9IFNUUklORzogeDExMTEKK1NOTVB2MlwtTUlCOjpzeXNEZXNjci4wID0gU1RSSU5HOiBTdW5PUyB0ZXN0aG9zdCA1LjkgR2VuZXJpY18xMTIyMzNcLTAyIHN1bjR1CitTTk1QdjJcLU1JQjo6c3lzQ29udGFjdC4wID0gU1RSSU5HOiB4MTExMQogLmZpCiAuUFAKIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBzZW5kaW5nIGEgR0VUTkVYVCByZXF1ZXN0OgogLlBQCiAubmYKLVZhcmlhYmxlOiBTTk1QdjItTUlCOjpzeXNPUlVwVGltZQorVmFyaWFibGU6IFNOTVB2MlwtTUlCOjpzeXNPUlVwVGltZQogVmFyaWFibGU6CiBSZWNlaXZlZCBHZXQgUmVzcG9uc2UgZnJvbSAxMjguMi41Ni4yMjAKIHJlcXVlc3RpZCAweDdEOUZDRDY0IGVycnN0YXQgMHgwIGVycmluZGV4IDB4MAotU05NUHYyLU1JQjo6c3lzT1JVcFRpbWUuMSA9IFRpbWV0aWNrczogKDYpIDA6MDA6MDAuMDYKK1NOTVB2MlwtTUlCOjpzeXNPUlVwVGltZS4xID0gVGltZXRpY2tzOiAoNikgMDowMDowMC4wNgogVmFyaWFibGU6CiAuZmkKIC5QUApAQCAtMjA5LDcgKzIwOSw3IEBACiBWYXJpYWJsZToKIFJlY2VpdmVkIEdldCBSZXNwb25zZSBmcm9tIDEyOC4yLjU2LjIyMAogcmVxdWVzdGlkIDB4N0Q5RkNENjUgZXJyc3RhdCAweDAgZXJyaW5kZXggMHgwCi1TTk1QdjItTUlCOjpzeXNMb2NhdGlvbi4wID0gU1RSSU5HOiBidWlsZGluZyBBCitTTk1QdjJcLU1JQjo6c3lzTG9jYXRpb24uMCA9IFNUUklORzogYnVpbGRpbmcgQQogVmFyaWFibGU6CiAuZmkKIC5QUApAQCAtMjI4LDE3ICsyMjgsMTcgQEAKIFdoYXQgcmVwZWF0IGNvdW50PyAyCiBSZWNlaXZlZCBHZXQgUmVzcG9uc2UgZnJvbSAxMjguMi41Ni4yMjAKIHJlcXVlc3RpZCAweDJFQTc5NDJBIGVycnN0YXQgMHgwIGVycmluZGV4IDB4MAotU05NUHYyLU1JQjo6c3lzTmFtZS4wID0gU1RSSU5HOiB0ZXN0aG9zdAotU05NUHYyLU1JQjo6c3lzT1JMYXN0Q2hhbmdlLjAgPSBUaW1ldGlja3M6ICg1OCkgMDowMDowMC41OAotU05NUHYyLU1JQjo6c3lzTG9jYXRpb24uMCA9IFNUUklORzogYmxkZyBBCi1TTk1QdjItTUlCOjpzeXNPUklELjEgPSBPSUQ6IElGLU1JQjo6aWZNSUIKK1NOTVB2MlwtTUlCOjpzeXNOYW1lLjAgPSBTVFJJTkc6IHRlc3Rob3N0CitTTk1QdjJcLU1JQjo6c3lzT1JMYXN0Q2hhbmdlLjAgPSBUaW1ldGlja3M6ICg1OCkgMDowMDowMC41OAorU05NUHYyXC1NSUI6OnN5c0xvY2F0aW9uLjAgPSBTVFJJTkc6IGJsZGcgQQorU05NUHYyXC1NSUI6OnN5c09SSUQuMSA9IE9JRDogSUZcLU1JQjo6aWZNSUIKIFZhcmlhYmxlOgogLmZpCiAuUFAKIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBzZW5kaW5nIGFuIEluZm9ybSByZXF1ZXN0OgogLlBQCiAubmYKLXNubXB0ZXN0IC12IDJjIC1jIHB1YmxpYyBzbm1wdHJhcGRfaG9zdAorc25tcHRlc3QgXC12IDJjIFwtYyBwdWJsaWMgc25tcHRyYXBkX2hvc3QKIFZhcmlhYmxlOiAkSQogUmVxdWVzdCB0eXBlIGlzIEluZm9ybSBSZXF1ZXN0CiAoQXJlIHlvdSBzZW5kaW5nIHRvIHRoZSByaWdodCBwb3J0PykKQEAgLTI1MiwxMyArMjUyLDEzIEBACiAuUFAKIFRoZSBzbm1wdHJhcGRfaG9zdCB3aWxsIHNob3c6CiAuUFAKLXNubXB0cmFwZF9ob3N0IFs8aXAgYWRkcmVzcz5dOiBUcmFwIFNOTVB2Mi1NSUI6OnN5c0NvbnRhY3QuMCA9IFNUUklORzoKK3NubXB0cmFwZF9ob3N0IFs8aXAgYWRkcmVzcz5dOiBUcmFwIFNOTVB2MlwtTUlCOjpzeXNDb250YWN0LjAgPSBTVFJJTkc6CiB4MTIzNDUKIC5QUAogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHNlbmRpbmcgYW4gU05NUHYyIFRyYXAgcmVxdWVzdDoKIC5QUAogLm5mCi1zbm1wdGVzdCAtdiAyYyAtYyBwdWJsaWMgc25tcHRyYXBkX2hvc3QKK3NubXB0ZXN0IFwtdiAyYyBcLWMgcHVibGljIHNubXB0cmFwZF9ob3N0CiBWYXJpYWJsZTogJFQKIFJlcXVlc3QgdHlwZSBpcyBTTk1QdjIgVHJhcCBSZXF1ZXN0CiAoQXJlIHlvdSBzZW5kaW5nIHRvIHRoZSByaWdodCBwb3J0PykKQEAgLTI3MSw3ICsyNzEsNyBAQAogVGhlIHNubXB0cmFwZF9ob3N0IHdpbGwgc2hvdzoKIC5QUAogLm5mCi1zbm1wdHJhcGRfaG9zdCBbPGlwIGFkZHJlc3M+XTogVHJhcCBTTk1QdjItTUlCOjpzeXMuMCA9IFNUUklORzoKK3NubXB0cmFwZF9ob3N0IFs8aXAgYWRkcmVzcz5dOiBUcmFwIFNOTVB2MlwtTUlCOjpzeXMuMCA9IFNUUklORzoKIGJ1aWxkaW5nIGEKIC5maQogLlNIICJTRUUgQUxTTyIKZGlmZiAtLWdpdCBhL21hbi9zbm1wdHJhbnNsYXRlLjEuZGVmIGIvbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYKaW5kZXggMGYzMWE1NS4uNzIxYWY5OSAxMDA2NDQKLS0tIGEvbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYKKysrIGIvbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYKQEAgLTI3LDcgKzI3LDcgQEAKIC5cIiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAuXCIgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUFRSQU5TTEFURSAxICIyMCBKdWwgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QVFJBTlNMQVRFIDEgIjEzIE5vdiAyMDEzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXB0cmFuc2xhdGUgLSB0cmFuc2xhdGUgTUlCIE9JRCBuYW1lcyBiZXR3ZWVuIG51bWVyaWMgYW5kIHRleHR1YWwgZm9ybXMKIC5TSCBTWU5PUFNJUwpAQCAtNDIsMTcgKzQyLDE3IEBACiBPSUQgaXMgZWl0aGVyIGEgbnVtZXJpYyBvciB0ZXh0dWFsIG9iamVjdCBpZGVudGlmaWVyLgogLlNIIE9QVElPTlMKIC5UUCA4Ci0uQiAtRFxmSVtUT0tFTlssLi4uXV0KKy5CIFwtRFxmSVtUT0tFTlssLi4uXV0KIFR1cm4gb24gZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIGdpdmVuCiAuSVIgIlRPS0VOIiAiKHMpLiIKIFRyeQogLklSIEFMTAogZm9yIGV4dHJlbWVseSB2ZXJib3NlIG91dHB1dC4KIC5UUAotLkIgLWgKKy5CIFwtaAogRGlzcGxheSBhIGJyaWVmIHVzYWdlIG1lc3NhZ2UgYW5kIHRoZW4gZXhpdC4KIC5UUAotLkJJIC1tICIgTUlCTElTVCIKKy5CSSBcLW0gIiBNSUJMSVNUIgogU3BlY2lmaWVzIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgTUlCIG1vZHVsZXMgdG8gbG9hZCBmb3IgdGhpcwogYXBwbGljYXRpb24uICBUaGlzIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUlCUy4KIC5JUApAQCAtNjIsMTcgKzYyLDIwIEBACiBmaWxlcy4gIEV2ZXJ5IGZpbGUgd2hvc2UgbmFtZSBkb2VzIG5vdCBiZWdpbiB3aXRoICIuIiB3aWxsIGJlIHBhcnNlZCBhcwogaWYgaXQgd2VyZSBhIE1JQiBmaWxlLgogLlRQCi0uQkkgLU0gIiBESVJMSVNUIgorLkJJIFwtTSAiIERJUkxJU1QiCiBTcGVjaWZpZXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIE1JQnMuCiBUaGlzIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUlCRElSUy4KIC5UUAotLkJJIC1UICIgVFJBTlNPUFRTIgorLkJJIFwtVCAiIFRSQU5TT1BUUyIKIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIE9JRCB2YWx1ZXMuICBUaGUKIGZvbGxvd2luZwogLkkgVFJBTlNPUFRTCiBhcmUgYXZhaWxhYmxlOgogLlJTCiAuVFAgNgorLkIgXC1UQgorUHJpbnQgYWxsIG1hdGNoaW5nIG9iamVjdHMgZm9yIGEgcmVnZXggc2VhcmNoLgorLlRQCiAuQiBcLVRkCiBQcmludCBmdWxsIGRldGFpbHMgb2YgdGhlIHNwZWNpZmllZCBPSUQuCiAuVFAKQEAgLTk4LDI0ICsxMDEsMjQgQEAKIER1bXAgYSBudW1lcmljIGFuZCBsYWJlbGVkIGZvcm0gb2YgYWxsIG9iamVjdHMgKGNvbXBhdGlibGUgd2l0aCBNSUIyU0NIRU1BIGZvcm1hdCkuCiAuUkUKIC5UUAotLkIgLVYKKy5CIFwtVgogRGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24gYW5kIHRoZW4gZXhpdC4KIC5UUAotLkJJIC13ICIgV0lEVEgiCisuQkkgXC13ICIgV0lEVEgiCiBTcGVjaWZpZXMgdGhlIHdpZHRoIG9mCi0uQiAtVHAKKy5CIFwtVHAKIGFuZAotLkIgLVRkCisuQiBcLVRkCiBvdXRwdXQuIFRoZSBkZWZhdWx0IGlzIHZlcnkgbGFyZ2UuCiAuUFAKIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBvcHRpb25zLCAKIC5CIHNubXB0cmFuc2xhdGUKIHRha2VzIHRoZSBPSUQgaW5wdXQgCi0uUkIgKCAtSSApLAorLlJCICggXC1JICksCiBNSUIgcGFyc2luZwotLlJCICggLU0gKQorLlJCICggXC1NICkKIGFuZCBPSUQgb3V0cHV0Ci0uUkIgKCAtTyApCisuUkIgKCBcLU8gKQogb3B0aW9ucyBkZXNjcmliZWQgaW4gdGhlIAogLkJSICJJTlBVVCBPUFRJT05TIiAiLCAiICJNSUIgUEFSU0lORyBPUFRJT05TIiAiIGFuZCAiICJPVVRQVVQgT1BUSU9OUyIKIHNlY3Rpb25zIG9mIHRoZQpAQCAtMTIzLDQwICsxMjYsNDAgQEAKIG1hbnVhbCBwYWdlLgogLlNIIEVYQU1QTEVTCiAuSVAgXChidSA0Ci1zbm1wdHJhbnNsYXRlIC1PbiAtSVIgc3lzRGVzY3IKK3NubXB0cmFuc2xhdGUgXC1PbiBcLUlSIHN5c0Rlc2NyCiAuYnIKIHdpbGwgdHJhbnNsYXRlICJzeXNEZXNjciIgdG8gYSBtb3JlIHF1YWxpZmllZCBmb3JtOgogLklQCiBzeXN0ZW0uc3lzRGVzY3IKIC5JUCBcKGJ1IDQKLXNubXB0cmFuc2xhdGUgLU9uZiAtSVIgc3lzRGVzY3IKK3NubXB0cmFuc2xhdGUgXC1PbmYgXC1JUiBzeXNEZXNjcgogLmJyCiB3aWxsIHRyYW5zbGF0ZSAic3lzRGVjciIgdG86CiAuSVAKLS5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMi5zeXN0ZW0uc3lzRGVzY3IKKy5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWJcLTIuc3lzdGVtLnN5c0Rlc2NyCiAuSVAgXChidSA0IAotc25tcHRyYW5zbGF0ZSAtVGQgLU9TIHN5c3RlbS5zeXNEZXNjcgorc25tcHRyYW5zbGF0ZSBcLVRkIFwtT1Mgc3lzdGVtLnN5c0Rlc2NyCiAuYnIKIHdpbGwgdHJhbnNsYXRlICJzeXNEZWNyIiBpbnRvOgogLklQCiAubmYKLVNOTVB2Mi1NSUI6OnN5c0Rlc2NyCi1zeXNEZXNjciBPQkpFQ1QtVFlQRQotICAtLSBGUk9NIFNOTVB2Mi1NSUIKLSAgLS0gVEVYVFVBTCBDT05WRU5USU9OIERpc3BsYXlTdHJpbmcKK1NOTVB2MlwtTUlCOjpzeXNEZXNjcgorc3lzRGVzY3IgT0JKRUNUXC1UWVBFCisgIFwtXC0gRlJPTSBTTk1QdjJcLU1JQgorICBcLVwtIFRFWFRVQUwgQ09OVkVOVElPTiBEaXNwbGF5U3RyaW5nCiAgIFNZTlRBWCBPQ1RFVCBTVFJJTkcgKDAuLjI1NSkKLSAgRElTUExBWS1ISU5UICIyNTVhIgotICBNQVgtQUNDRVNTIHJlYWQtb25seQorICBESVNQTEFZXC1ISU5UICIyNTVhIgorICBNQVhcLUFDQ0VTUyByZWFkXC1vbmx5CiAgIFNUQVRVUyBjdXJyZW50CiAgIERFU0NSSVBUSU9OICJBIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIGVudGl0eS4gVGhpcwogICAgICAgICAgICAgICAgdmFsdWUgc2hvdWxkIGluY2x1ZGUgdGhlIGZ1bGwgbmFtZSBhbmQKICAgICAgICAgICAgICAgIHZlcnNpb24gaWRlbnRpZmljYXRpb24gb2YgdGhlIHN5c3RlbSdzCi0gICAgICAgICAgICAgICBoYXJkd2FyZSB0eXBlLCBzb2Z0d2FyZSBvcGVyYXRpbmctc3lzdGVtLAorICAgICAgICAgICAgICAgaGFyZHdhcmUgdHlwZSwgc29mdHdhcmUgb3BlcmF0aW5nXC1zeXN0ZW0sCiAgICAgICAgICAgICAgICBhbmQgbmV0d29ya2luZyBzb2Z0d2FyZS4iCi06Oj0geyBpc28oMSkgb3JnKDMpIGRvZCg2KSBpbnRlcm5ldCgxKSBtZ210KDIpIG1pYi0yKDEpIHN5c3RlbSgxKSAxIH0KKzo6PSB7IGlzbygxKSBvcmcoMykgZG9kKDYpIGludGVybmV0KDEpIG1nbXQoMikgbWliXC0yKDEpIHN5c3RlbSgxKSAxIH0KIC5maQogLklQIFwoYnUgNCAKLXNubXB0cmFuc2xhdGUgLVRwIC1PUyBzeXN0ZW0KK3NubXB0cmFuc2xhdGUgXC1UcCBcLU9TIHN5c3RlbQogLmJyCiB3aWxsIHByaW50IHRoZSBmb2xsb3dpbmcgdHJlZToKIC5JUApAQCAtMTk2LDcgKzE5OSw3IEBACiAuZmkKIC5QUAogLklQIFwoYnUgNAotc25tcHRyYW5zbGF0ZSAtVGEgfCBoZWFkCitzbm1wdHJhbnNsYXRlIFwtVGEgfCBoZWFkCiAuYnIKIHdpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIGR1bXA6CiAuSVAKQEAgLTIxNCw3ICsyMTcsNyBAQAogLmZpCiAuUFAKIC5JUCBcKGJ1IDQKLXNubXB0cmFuc2xhdGUgLVRsIHwgaGVhZAorc25tcHRyYW5zbGF0ZSBcLVRsIHwgaGVhZAogLmJyCiB3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBkdW1wOgogLklQCkBAIC0yMjQsMTUgKzIyNywxNSBAQAogLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKQogLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5kaXJlY3RvcnkoMSkKIC5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKQotLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYi0yKDEpCi0uUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliLTIoMSkuc3lzdGVtKDEpCi0uUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliLTIoMSkuc3lzdGVtKDEpLnN5c0Rlc2NyKDEpCi0uUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliLTIoMSkuc3lzdGVtKDEpLnN5c09iamVjdElEKDIpCi0uUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliLTIoMSkuc3lzdGVtKDEpLnN5c1VwVGltZSgzKQorLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYlwtMigxKQorLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYlwtMigxKS5zeXN0ZW0oMSkKKy5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWJcLTIoMSkuc3lzdGVtKDEpLnN5c0Rlc2NyKDEpCisuUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliXC0yKDEpLnN5c3RlbSgxKS5zeXNPYmplY3RJRCgyKQorLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYlwtMigxKS5zeXN0ZW0oMSkuc3lzVXBUaW1lKDMpCiAuZmkKIC5QUAogLklQIFwoYnUgNAotc25tcHRyYW5zbGF0ZSAtVG8gfCBoZWFkCitzbm1wdHJhbnNsYXRlIFwtVG8gfCBoZWFkCiAuYnIKIHdpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIGR1bXAKIC5JUApAQCAtMjUwLDcgKzI1Myw3IEBACiAuZmkKIC5QUAogLklQIFwoYnUgNAotc25tcHRyYW5zbGF0ZSAtVHMgfCBoZWFkCitzbm1wdHJhbnNsYXRlIFwtVHMgfCBoZWFkCiAuYnIKIHdpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIGR1bXAKIC5JUApAQCAtMjYwLDE1ICsyNjMsMTUgQEAKIC5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQKIC5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQuZGlyZWN0b3J5CiAuUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQKLS5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMgotLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yLnN5c3RlbQotLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yLnN5c3RlbS5zeXNEZXNjcgotLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yLnN5c3RlbS5zeXNPYmplY3RJRAotLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yLnN5c3RlbS5zeXNVcFRpbWUKKy5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWJcLTIKKy5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWJcLTIuc3lzdGVtCisuUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliXC0yLnN5c3RlbS5zeXNEZXNjcgorLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYlwtMi5zeXN0ZW0uc3lzT2JqZWN0SUQKKy5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWJcLTIuc3lzdGVtLnN5c1VwVGltZQogLmZpCiAuUFAKIC5JUCBcKGJ1IDQKLXNubXB0cmFuc2xhdGUgLVR0IHwgaGVhZAorc25tcHRyYW5zbGF0ZSBcLVR0IHwgaGVhZAogLmJyCiB3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBkdW1wCiAuSVAKQEAgLTI3OCw3ICsyODEsNyBAQAogICAgICAgaW50ZXJuZXQoMSkgdHlwZT0wCiAgICAgICAgIGRpcmVjdG9yeSgxKSB0eXBlPTAKICAgICAgICAgbWdtdCgyKSB0eXBlPTAKLSAgICAgICAgICBtaWItMigxKSB0eXBlPTAKKyAgICAgICAgICBtaWJcLTIoMSkgdHlwZT0wCiAgICAgICAgICAgICBzeXN0ZW0oMSkgdHlwZT0wCiAgICAgICAgICAgICAgIHN5c0Rlc2NyKDEpIHR5cGU9MiB0Yz00IGhpbnQ9MjU1YQogICAgICAgICAgICAgICBzeXNPYmplY3RJRCgyKSB0eXBlPTEKZGlmZiAtLWdpdCBhL21hbi9zbm1wdHJhcC4xLmRlZiBiL21hbi9zbm1wdHJhcC4xLmRlZgppbmRleCAwOWFlYzc5Li41NWMxOWQxIDEwMDY0NAotLS0gYS9tYW4vc25tcHRyYXAuMS5kZWYKKysrIGIvbWFuL3NubXB0cmFwLjEuZGVmCkBAIC0xLDcgKzEsNyBAQAogLlwiIC0qLSBucm9mZiAtKi0KLS5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuIAotLlwiIFNlZSB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyCi0uXCIgY29weXJpZ2h0cyB0aGF0IG1heSBhcHBseToKKy5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKy5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKy5cIiB0aGF0IG1heSBhcHBseToKIC5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC5cIiAJQ29weXJpZ2h0IDE5ODgsIDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIC5cIiAKQEAgLTI3LDEzICsyNywxMyBAQAogLlNIIE5BTUUKIHNubXB0cmFwLCBzbm1waW5mb3JtIC0gc2VuZHMgYW4gU05NUCBub3RpZmljYXRpb24gdG8gYSBtYW5hZ2VyCiAuU0ggU1lOT1BTSVMKLS5CIHNubXB0cmFwIC12IDEKKy5CIHNubXB0cmFwIFwtdiAxCiBbQ09NTU9OIE9QVElPTlNdIEFHRU5UIGVudGVycHJpc2Utb2lkIGFnZW50IGdlbmVyaWMtdHJhcCBzcGVjaWZpYy10cmFwIHVwdGltZSBbT0lEIFRZUEUgVkFMVUVdLi4uCiAuUFAKLS5CIHNubXB0cmFwIC12IFsyY3wzXQotW0NPTU1PTiBPUFRJT05TXSBbLUNpXSBBR0VOVCB1cHRpbWUgdHJhcC1vaWQgW09JRCBUWVBFIFZBTFVFXS4uLgorLkIgc25tcHRyYXAgXC12IFsyY3wzXQorW0NPTU1PTiBPUFRJT05TXSBbXC1DaV0gQUdFTlQgdXB0aW1lIHRyYXAtb2lkIFtPSUQgVFlQRSBWQUxVRV0uLi4KIC5QUAotLkIgc25tcGluZm9ybSAtdiBbMmN8M10KKy5CIHNubXBpbmZvcm0gXC12IFsyY3wzXQogW0NPTU1PTiBPUFRJT05TXSBBR0VOVCB1cHRpbWUgdHJhcC1vaWQgW09JRCBUWVBFIFZBTFVFXS4uLgogLlNIIERFU0NSSVBUSU9OCiAuQiBzbm1wdHJhcApAQCAtNDcsNyArNDcsNyBAQAogV2hlbiBpbnZva2VkIGFzCiAuQiBzbm1waW5mb3JtLAogb3Igd2hlbgotLkIgLUNpCisuQiBcLUNpCiBpcyBhZGRlZCB0byB0aGUgY29tbWFuZCBsaW5lIGZsYWdzIG9mIHNubXB0cmFwLCBpdCBzZW5kcyBhbgogSU5GT1JNLVBEVSwgZXhwZWN0aW5nIGEgcmVzcG9uc2UgZnJvbSB0aGUgdHJhcCByZWNlaXZlciwKIHJldHJhbnNtaXR0aW5nIGlmIHJlcXVpcmVkLiAgT3RoZXJ3aXNlIGl0IHNlbmRzIGFuIFRSQVAtUERVIG9yCkBAIC0xMTEsNyArMTExLDcgQEAKIC5QUAogRm9yIGV4YW1wbGU6CiAuUFAKLXNubXB0cmFwIC12IDEgLWMgcHVibGljIG1hbmFnZXIgZW50ZXJwcmlzZXMuc3BpZGVyIHRlc3QtaHViIDMgMCAnJyBpbnRlcmZhY2VzLmlmdGFibGUuaWZlbnRyeS5pZmluZGV4LjEgaSAxCitzbm1wdHJhcCBcLXYgMSBcLWMgcHVibGljIG1hbmFnZXIgZW50ZXJwcmlzZXMuc3BpZGVyIHRlc3RcLWh1YiAzIDAgJycgaW50ZXJmYWNlcy5pZnRhYmxlLmlmZW50cnkuaWZpbmRleC4xIGkgMQogLlBQCiB3aWxsIHNlbmQgYSBnZW5lcmljIGxpbmtVcCB0cmFwIHRvIG1hbmFnZXIsIGZvciBpbnRlcmZhY2UgMS4KIC5TSCBPUFRJT05TCkBAIC0xMjAsNyArMTIwLDcgQEAKIC5JIHNubXBjbWQoMSkgCiBtYW51YWwgcGFnZSBpbgogYWRkaXRpb24gdG8gdGhlIAotLkIgLUNpCisuQiBcLUNpCiBvcHRpb24gZGVzY3JpYmVkIGFib3ZlLgogTm90ZSB0aGF0CiAuQiBzbm1wdHJhcApkaWZmIC0tZ2l0IGEvbWFuL3NubXB0cmFwZC44LmRlZiBiL21hbi9zbm1wdHJhcGQuOC5kZWYKaW5kZXggMjlkNTY1YS4uNDViZDAzNCAxMDA2NDQKLS0tIGEvbWFuL3NubXB0cmFwZC44LmRlZgorKysgYi9tYW4vc25tcHRyYXBkLjguZGVmCkBAIC0xLDcgKzEsNyBAQAogLlwiIC0qLSBucm9mZiAtKi0KLS5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuCi0uXCIgU2VlIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIKLS5cIiBjb3B5cmlnaHRzIHRoYXQgbWF5IGFwcGx5OgorLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQorLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworLlwiIHRoYXQgbWF5IGFwcGx5OgogLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLlwiIAlDb3B5cmlnaHQgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQogLlwiIApAQCAtMjMsNyArMjMsNyBAQAogLlwiIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKIC5cIiBTT0ZUV0FSRS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUFRSQVBEIDggIjMwIE1hciAyMDExIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBUUkFQRCA4ICIyNyBBcHIgMjAxNCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wdHJhcGQgLSBSZWNlaXZlIGFuZCBsb2cgU05NUCB0cmFwIG1lc3NhZ2VzLgogLlNIIFNZTk9QU0lTCkBAIC0zOSw5MiArMzksODggQEAKIG11c3QgdHlwaWNhbGx5IGJlIHJ1biBhcyByb290LgogLlNIIE9QVElPTlMKIC5UUCA4Ci0uQiAtYQorLkIgXC1hCiBJZ25vcmUgYXV0aGVudGljYXRpb25GYWlsdXJlIHRyYXBzLgogLlRQCi0uQiAtQQorLkIgXC1BCiBBcHBlbmQgdG8gdGhlIGxvZyBmaWxlIHJhdGhlciB0aGFuIHRydW5jYXRpbmcgaXQuCiAKLU5vdGUgdGhhdCB0aGlzIG5lZWRzIHRvIGNvbWUgXGZJYmVmb3JlXGZQIGFueSAtTGYgb3B0aW9ucworTm90ZSB0aGF0IHRoaXMgbmVlZHMgdG8gY29tZSBcZkliZWZvcmVcZlAgYW55IFwtTGYgb3B0aW9ucwogdGhhdCBpdCBzaG91bGQgYXBwbHkgdG8uCiAuVFAKLS5CSSAiLWMiICIgRklMRSIKKy5CSSAiXC1jIiAiIEZJTEUiCiBSZWFkIAogLkkgRklMRQotYXMgYSBjb25maWd1cmF0aW9uIGZpbGUuCithcyBhIGNvbmZpZ3VyYXRpb24gZmlsZQorKG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcykuCiAuVFAKLS5CIC1DCisuQiBcLUMKIERvIG5vdCByZWFkIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIGV4Y2VwdCB0aGUgb25lIG9wdGlvbmFsbHkgc3BlY2lmaWVkIGJ5IHRoZSAKLS5CIC1jIAorLkIgXC1jIAogb3B0aW9uLgogLlRQCi0uQiAtZAorLkIgXC1kCiBEdW1wIChpbiBoZXhhZGVjaW1hbCkgdGhlIHNlbnQgYW5kIHJlY2VpdmVkIFNOTVAgcGFja2V0cy4KIC5UUAotLkJJIC1EW1RPS0VOWywuLi5dXQorLkJJIFwtRFtUT0tFTlssLi4uXV0KIFR1cm4gb24gZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIGdpdmVuCiAuSVIgIlRPS0VOIiAiKHMpLiIKIFRyeQogLklSIEFMTAogZm9yIGV4dHJlbWVseSB2ZXJib3NlIG91dHB1dC4KIC5UUAotLkIgLWUKLVByaW50IGV2ZW50IG51bWJlcnMgKHJpc2luZy9mYWxsaW5nIGFsYXJtIGV0Yy4pIGZyb20gdGhlIChvYnNvbGV0ZSkgTTJNLU1JQi4KLS5icgotVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBkdWUgY291cnNlLgotLlRQCi0uQiAtZgorLkIgXC1mCiBEbyBub3QgZm9yaygpIGZyb20gdGhlIGNhbGxpbmcgc2hlbGwuCiAuVFAKLS5CSSAtRiAiIEZPUk1BVCIKKy5CSSBcLUYgIiBGT1JNQVQiCiBXaGVuIGxvZ2dpbmcgdG8gc3RhbmRhcmQgb3V0cHV0LCB1c2UgdGhlIGZvcm1hdCBpbiB0aGUgc3RyaW5nCiAuSVIgRk9STUFUIC4KIFNlZSB0aGUgc2VjdGlvbgogLkIgRk9STUFUIFNQRUNJRklDQVRJT05TCiBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgogLlRQCi0uQiAtaCwgLS1oZWxwCisuQiBcLWgsIFwtXC1oZWxwCiBEaXNwbGF5IGEgYnJpZWYgdXNhZ2UgbWVzc2FnZSBhbmQgdGhlbiBleGl0LgogLlRQCi0uQiAtSAorLkIgXC1ICiBEaXNwbGF5IGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlcyB1bmRlcnN0b29kIGJ5IHRoZQogdHJhcCBkYWVtb24gYW5kIHRoZW4gZXhpdC4KIC5UUAotLkIgLUkgXGZJWy1dSU5JVExJU1QKKy5CIFwtSSBcZklbXC1dSU5JVExJU1QKIFNwZWNpZmllcyB3aGljaCBtb2R1bGVzIHNob3VsZCAob3Igc2hvdWxkIG5vdCkgYmUgaW5pdGlhbGl6ZWQKIHdoZW4gc25tcHRyYXBkIHN0YXJ0cyB1cC4gIElmIHRoZSBjb21tYS1zZXBhcmF0ZWQKIC5JIElOSVRMSVNUCiBpcyBwcmVjZWRlZAotd2l0aCBhICctJywgaXQgaXMgdGhlIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IHNob3VsZCBcZklub3RcZlIgYmUgc3RhcnRlZC4KK3dpdGggYSAnXC0nLCBpdCBpcyB0aGUgbGlzdCBvZiBtb2R1bGVzIHRoYXQgc2hvdWxkIFxmSW5vdFxmUiBiZSBzdGFydGVkLgogT3RoZXJ3aXNlIHRoaXMgaXMgdGhlIGxpc3Qgb2YgdGhlIFxmSW9ubHlcZlIgbW9kdWxlcyB0aGF0IHNob3VsZCBiZSBzdGFydGVkLgogCiBUbyBnZXQgYSBsaXN0IG9mIGNvbXBpbGVkIG1vZHVsZXMsIHJ1biBzbm1wdHJhcGQgd2l0aCB0aGUgYXJndW1lbnRzCi0uSSAiLURtaWJfaW5pdCAtSCIKKy5JICJcLURtaWJfaW5pdCBcLUgiCiAoYXNzdW1pbmcgZGVidWdnaW5nIHN1cHBvcnQgaGFzIGJlZW4gY29tcGlsZWQgaW4pLgogLlRQCi0uQiAtTFtlZm9zXQorLkIgXC1MW2Vmb3NdCiBTcGVjaWZ5IHdoZXJlIGxvZ2dpbmcgb3V0cHV0IHNob3VsZCBiZSBkaXJlY3RlZCAoc3RhbmRhcmQgZXJyb3Igb3Igb3V0cHV0LAogdG8gYSBmaWxlIG9yIHZpYSBzeXNsb2cpLiAgU2VlIExPR0dJTkcgT1BUSU9OUyBpbiBcZklzbm1wY21kKDEpXGZSIGZvciBkZXRhaWxzLgogLlRQCi0uQlIgLW0gIiBcZklNSUJMSVNUIgorLkJSIFwtbSAiIFxmSU1JQkxJU1QiCiBTcGVjaWZpZXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBNSUIgbW9kdWxlcyB0byBsb2FkIGZvciB0aGlzCiBhcHBsaWNhdGlvbi4gIFRoaXMgb3ZlcnJpZGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNSUJTLgogU2VlIFxmSXNubXBjbWQoMSlcZlIgZm9yIGRldGFpbHMuCiAuVFAKLS5CUiAtTSAiIFxmSURJUkxJU1QiCisuQlIgXC1NICIgXGZJRElSTElTVCIKIFNwZWNpZmllcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgTUlCcy4KIFRoaXMgb3ZlcnJpZGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNSUJESVJTLgogU2VlIFxmSXNubXBjbWQoMSlcZlIgZm9yIGRldGFpbHMuCiAuVFAKLS5CUiAtbgorLkJSIFwtbgogRG8gbm90IGF0dGVtcHQgdG8gdHJhbnNsYXRlIHNvdXJjZSBhZGRyZXNzZXMgb2YgaW5jb21pbmcgcGFja2V0cyBpbnRvCiBob3N0bmFtZXMuCiAuVFAKLS5CSSAtcCAiIEZJTEUiCisuQkkgXC1wICIgRklMRSIKIFNhdmUgdGhlIHByb2Nlc3MgSUQgb2YgdGhlIHRyYXAgZGFlbW9uIGluCiAuSVIgRklMRSAiLiIKIC5UUAotLkJJIC1PICIgW2FiZUVmbnFRc1N0VHVVdnhYXSIKKy5CSSBcLU8gIiBbYWJlRWZucVFzU3RUdVV2eFhdIgogU3BlY2lmaWVzIGhvdyBNSUIgb2JqZWN0cyBhbmQgb3RoZXIgb3V0cHV0IHNob3VsZCBiZSBkaXNwbGF5ZWQuCiBTZWUgdGhlIHNlY3Rpb24KIC5CIE9VVFBVVCBPUFRJT05TCkBAIC0xMzIsMjIgKzEyOCwyNSBAQAogLkkgc25tcGNtZCgxKQogbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCiAuVFAKLS5CSSAtdAorLkJJIFwtdAogRG8gbm90IGxvZyB0cmFwcyB0byBzeXNsb2cuICBUaGlzIGRpc2FibGVzIGxvZ2dpbmcgdG8gc3lzbG9nLiAgVGhpcyBpcwogdXNlZnVsIGlmIHlvdSB3YW50IHRoZSBzbm1wdHJhcGQgYXBwbGljYXRpb24gdG8KIC5CIG9ubHkKIHJ1biB0cmFwaGFuZGxlIGhvb2tzIGFuZCBub3QgdG8gbG9nIGFueSB0cmFwcyB0byBhbnkgbG9jYXRpb24uCiAuVFAKLS5CIC12LCAtLXZlcnNpb24KKy5CIFwtdiwgXC1cLXZlcnNpb24KIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSB0cmFwIGRhZW1vbiBhbmQgdGhlbiBleGl0LgogLlRQCi0uQiAteCBcZklBRERSRVNTCisuQiBcLXggXGZJQUREUkVTUwogQ29ubmVjdCB0byB0aGUgQWdlbnRYIG1hc3RlciBhZ2VudCBvbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MsCiByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBBR0VOVFhfU09DS0VULgogU2VlIFxmSXNubXBkKDgpXGZSIGZvciBkZXRhaWxzIG9mIHRoZSBmb3JtYXQgb2Ygc3VjaCBhZGRyZXNzZXMuCiAuVFAKLS5CSSAtLSAibmFtZSI9InZhbHVlIgotQWxsb3dzIHRvIHNwZWNpZnkgYW55IHRva2VuICgibmFtZSIpIHN1cHBvcnRlZCBpbiB0aGUKKy5CIFwtWAorRG8gbm90IGNvbm5lY3QgdG8gYSBBZ2VudFggbWFzdGVyIGFnZW50CisuVFAKKy5CSSBcLVwtICJuYW1lIj0idmFsdWUiCitBbGxvd3Mgb25lIHRvIHNwZWNpZnkgYW55IHRva2VuICgibmFtZSIpIHN1cHBvcnRlZCBpbiB0aGUKIC5JIHNubXB0cmFwZC5jb25mCiBmaWxlIGFuZCBzZXRzIGl0cyB2YWx1ZSB0byAidmFsdWUiLiBPdmVycmlkZXMgdGhlIGNvcnJlc3BvbmRpbmcgdG9rZW4gaW4gdGhlCiAuSSBzbm1wdHJhcGQuY29uZgpAQCAtMTY2LDIxICsxNjUsMjYgQEAKIGEgbGl0ZXJhbCAlCiAuVFAKIC5CICVhCi10aGUgY29udGVudHMgb2YgdGhlIGFnZW50LWFkZHIgZmllbGQgb2YgdGhlIFBEVSAodjEgVFJBUHMgb25seSkKK3RoZSBjb250ZW50cyBvZiB0aGUgYWdlbnRcLWFkZHIgZmllbGQgb2YgdGhlIFBEVSAodjEgVFJBUHMgb25seSkKIC5UUAogLkIgJUEKLXRoZSBob3N0bmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgYWdlbnQtYWRkciBmaWVsZCBvZgotdGhlIFBEVSwgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBhZ2VudC1hZGRyIGZpZWxkCit0aGUgaG9zdG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgY29udGVudHMgb2YgdGhlIGFnZW50XC1hZGRyIGZpZWxkIG9mCit0aGUgUERVLCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB0aGUgY29udGVudHMgb2YgdGhlIGFnZW50XC1hZGRyIGZpZWxkCiBvZiB0aGUgUERVICh2MSBUUkFQcyBvbmx5KS4KIC5UUAogLkIgJWIKLVBEVSBzb3VyY2UgYWRkcmVzcyAoTm90ZTogdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYW4gSVB2NAotYWRkcmVzcykKK1BEVSB0cmFuc3BvcnQgYWRkcmVzcyAoTm90ZTogdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYW4gSVB2NAorYWRkcmVzcykuCisuYnIKK1NvbWV0aGluZyBsaWtlICJbVURQOiBbMTcyLjE2LjEwLjEyXToyMzQ1Ni0+WzEwLjE1MC4wLjhdXSIKIC5UUAogLkIgJUIKIFBEVSBzb3VyY2UgaG9zdG5hbWUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgUERVIHNvdXJjZSBhZGRyZXNzIChzZWUKIG5vdGUgYWJvdmUpIAogLlRQCisuQiAlRQorU05NUHYzIGNvbnRleHQgZW5naW5lIGlkCisuVFAKIC5CICVoCiBjdXJyZW50IGhvdXIgb24gdGhlIGxvY2FsIHN5c3RlbQogLlRQCkBAIC0yMTQsMTMgKzIxOCwxOSBAQAogLkIgJU4KIGVudGVycHJpc2Ugc3RyaW5nCiAuVFAKLS5CICVxCi10cmFwIHN1Yi10eXBlIChudW1lcmljLCBpbiBkZWNpbWFsKQotLlRQCiAuQiAlUAogc2VjdXJpdHkgaW5mb3JtYXRpb24gZnJvbSB0aGUgUERVIChjb21tdW5pdHkgbmFtZSBmb3IgdjEvdjJjLAogdXNlciBhbmQgY29udGV4dCBmb3IgdjMpCiAuVFAKKy5CICVxCit0cmFwIHN1Yi10eXBlIChudW1lcmljLCBpbiBkZWNpbWFsKQorLlRQCisuQiAlcworU05NUCB2ZXJzaW9uIG51bWJlciAoMDogdjEsIDE6IHYyYywgMjogdjMpCisuVFAKKy5CICVTCitTTk1QdjMgc2VjdXJpdHkgbW9kZWwgdmVyc2lvbiBudW1iZXIKKy5UUAogLkIgJXQKIGRlY2ltYWwgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZXBvY2ggKGFzCiByZXR1cm5lZCBieQpAQCAtMjI5LDYgKzIzOSw5IEBACiAuQiAlVAogdGhlIHZhbHVlIG9mIHRoZSBcZkNzeXNVcFRpbWUuMFxmUiB2YXJiaW5kIGluIHNlY29uZHMKIC5UUAorLkIgJXUKK1NOTVB2MyBzZWN1cml0eSBuYW1lLCBvciB2MS92MmMgY29tbXVuaXR5IG5hbWUKKy5UUAogLkIgJXYKIGxpc3Qgb2YgdmFyaWFibGUtYmluZGluZ3MgZnJvbSB0aGUgbm90aWZpY2F0aW9uIHBheWxvYWQuCiBUaGVzZSB3aWxsIGJlIHNlcGFyYXRlZCBieSBhIHRhYiwgCkBAIC0yNTgsNyArMjcxLDcgQEAKIGFuZCBhIGZsYWcgdmFsdWUuIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIHN1cHBvcnRlZDoKIC5SUyA0IAogLlRQIDQKLS5CIC0KKy5CIFwtCiBsZWZ0IGp1c3RpZnkKIC5UUAogLkIgMApAQCAtMjgzLDcgKzI5Niw3IEBACiAuUFAKIC5SUwogLm5mCi1zbm1wdHJhcGQgLVAgLUYgIiUwMi4yaDolMDIuMmogVFJBUCV3LiVxIGZyb20gJUFcZW4iCitzbm1wdHJhcGQgXC1QIFwtRiAiJTAyLjJoOiUwMi4yaiBUUkFQJXcuJXEgZnJvbSAlQVxlbiIKIC5maQogLlJFCiAuUFAKQEAgLTI5MSw3ICszMDQsNyBAQAogLlBQCiAuUlMKIC5uZgotc25tcHRyYXBkIC1QIC1GICIlIzAyLjJoOiUjMDIuMmogVFJBUCV3LiVxIGZyb20gJUFcZW4iCitzbm1wdHJhcGQgXC1QIFwtRiAiJSMwMi4yaDolIzAyLjJqIFRSQVAldy4lcSBmcm9tICVBXGVuIgogLmZpCiAuUkUKIC5TSCBMSVNURU5JTkcgQUREUkVTU0VTCkBAIC0zMDUsMjAgKzMxOCwyMCBAQAogLkkgc25tcGQoOCkKIG1hbnVhbCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtYXQgb2YgbGlzdGVuaW5nCiBhZGRyZXNzZXMuCi0uU0ggTk9USUZJQ0FUSU9OLUxPRy1NSUIgU1VQUE9SVAorLlNIIE5PVElGSUNBVElPTlwtTE9HXC1NSUIgU1VQUE9SVAogQXMgb2YgbmV0LXNubXAgNS4wLCB0aGUgc25tcHRyYXBkIGFwcGxpY2F0aW9uIHN1cHBvcnRzIHRoZQotTk9USUZJQ0FUSU9OLUxPRy1NSUIuICBJdCBkb2VzIHRoaXMgYnkgb3BlbmluZyBhbiBBZ2VudFggc3ViYWdlbnQKK05PVElGSUNBVElPTlwtTE9HXC1NSUIuICBJdCBkb2VzIHRoaXMgYnkgb3BlbmluZyBhbiBBZ2VudFggc3ViYWdlbnQKIGNvbm5lY3Rpb24gdG8gdGhlIG1hc3RlciBzbm1wZCBhZ2VudCBhbmQgcmVnaXN0ZXJpbmcgdGhlIG5vdGlmaWNhdGlvbgogbG9nIHRhYmxlcy4gIEFzIGxvbmcgYXMgdGhlIHNubXBkIGFwcGxpY2F0aW9uIGlzIHN0YXJ0ZWQgZmlyc3QsIGl0CiB3aWxsIGF0dGFjaCBpdHNlbGYgdG8gaXQgYW5kIHRodXMgeW91IHNob3VsZCBiZSBhYmxlIHRvIHZpZXcgdGhlIGxhc3QKIHJlY29yZGVkIG5vdGlmaWNhdGlvbnMgdmlhIHRoZSBubG1Mb2dUYWJsZSBhbmQgbmxtTG9nVmFyaWFibGVUYWJsZS4KIFNlZSB0aGUgc25tcHRyYXBkLmNvbmYgZmlsZSBhbmQgdGhlICJkb05vdFJldGFpbk5vdGlmaWNhdGlvbkxvZ3MiIHRva2VuCiBmb3IgdHVybmluZwotb2ZmIHRoaXMgc3VwcG9ydC4gIFNlZSB0aGUgTk9USUZJQ0FUSU9OLUxPRy1NSUIgZm9yIG1vcmUgZGV0YWlscyBhYm91dAorb2ZmIHRoaXMgc3VwcG9ydC4gIFNlZSB0aGUgTk9USUZJQ0FUSU9OXC1MT0dcLU1JQiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0CiB0aGUgTUlCIGl0c2VsZi4KIC5TSCBFWFRFTlNJQklMSVRZIEFORCBDT05GSUdVUkFUSU9OCiBTZWUgdGhlCiAuSSBzbm1wdHJhcGQuY29uZig1KQogbWFudWFsIHBhZ2UuCiAuU0ggIlNFRSBBTFNPIgotc25tcGNtZCgxKSwgc25tcGQoOCksIHByaW50ZigzKSwgc25tcHRyYXBkLmNvbmYoNSksIHN5c2xvZyg4KSwgdmFyaWFibGVzKDUpCitzbm1wY21kKDEpLCBzbm1wZCg4KSwgcHJpbnRmKDMpLCBzbm1wdHJhcGQuY29uZig1KSwgc3lzbG9nKDgpLCB0cmFwdG9lbWFpbCgxKSwgdmFyaWFibGVzKDUpCmRpZmYgLS1naXQgYS9tYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYgYi9tYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYKaW5kZXggMzJlM2FmNS4uMWJiYmZiYiAxMDA2NDQKLS0tIGEvbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmCisrKyBiL21hbi9zbm1wdHJhcGQuY29uZi41LmRlZgpAQCAtMSw0ICsxLDQgQEAKLS5USCBTTk1QVFJBUEQuQ09ORiA1ICIyNSBTZXAgMjAwNiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QVFJBUEQuQ09ORiA1ICIxMyBNYXIgMjAxNCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wdHJhcGQuY29uZiAtIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIE5ldC1TTk1QIG5vdGlmaWNhdGlvbiByZWNlaXZlcgogLlNIIERFU0NSSVBUSU9OCkBAIC03LDcgKzcsNyBAQAogKGFuZCBJTkZPUk0gcmVxdWVzdHMpIHNob3VsZCBiZSBwcm9jZXNzZWQuCiBUaGlzIGZpbGUgKFxmQnNubXB0cmFwZC5jb25mXGZSKSBjYW4gYmUgbG9jYXRlZCBpbgogb25lIG9mIHNldmVyYWwgbG9jYXRpb25zLCBhcyBkZXNjcmliZWQgaW4gdGhlCi0uSSBzbm1wX2NvbmZpZyg1KQorLklSIHNubXBfY29uZmlnICg1KQogbWFudWFsIHBhZ2UuCiAuU0ggSU1QT1JUQU5UCiBQcmV2aW91c2x5LApAQCAtMzIsMjIgKzMyLDIyIEBACiBTZWUgdGhlIHNlY3Rpb24gCiAuQiBMSVNURU5JTkcgQUREUkVTU0VTCiBpbiB0aGUKLS5JIHNubXBkKDgpCisuSVIgc25tcGQgKDgpCiBtYW51YWwgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGxpc3RlbmluZwogYWRkcmVzc2VzLgogLklQCiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8KIGxpc3RlbiBvbiBVRFAgcG9ydCAxNjIgb24gYWxsIElQdjQgaW50ZXJmYWNlcy4KIC5JUCAiZG9Ob3RSZXRhaW5Ob3RpZmljYXRpb25Mb2dzIHllcyIKLWRpc2FibGVzIHN1cHBvcnQgZm9yIHRoZSBOT1RJRklDQVRJT04tTE9HLU1JQi4KK2Rpc2FibGVzIHN1cHBvcnQgZm9yIHRoZSBOT1RJRklDQVRJT05cLUxPR1wtTUlCLgogTm9ybWFsbHkgdGhlIHNubXB0cmFwZCBwcm9ncmFtIGtlZXBzIGEgcmVjb3JkIG9mIHRoZSB0cmFwcwogcmVjZWl2ZWQsIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgYnkgcXVlcnlpbmcKIHRoZSBcZkNubG1Mb2dUYWJsZVxmUiBhbmQgXGZDbmxtTG9ndmFyaWFibGVUYWJsZVxmUiB0YWJsZXMuICAKIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSB1c2VkIHRvIHN1cHByZXNzIHRoaXMgYmVoYXZpb3VyLgogLklQCiBTZWUgdGhlIAotLkkgc25tcHRyYXBkKDgpIAotbWFudWFsIHBhZ2UgYW5kIHRoZSBOT1RJRklDQVRJT04tTE9HLU1JQiBmb3IgZGV0YWlscy4KKy5JUiBzbm1wdHJhcGQgKDgpIAorbWFudWFsIHBhZ2UgYW5kIHRoZSBOT1RJRklDQVRJT05cLUxPR1wtTUlCIGZvciBkZXRhaWxzLgogLklQICJkb05vdExvZ1RyYXBzIHllcyIKIGRpc2FibGVzIHRoZSBsb2dnaW5nIG9mIG5vdGlmaWNhdGlvbnMgYWx0b2dldGhlci4KIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBcZkJzbm1wdHJhcGRcZlIgYXBwbGljYXRpb24gc2hvdWxkCkBAIC04MSwxNCArODEsMTYgQEAKIGZvciBhIHBhcnRpY3VsYXIgY2F0ZWdvcnkgb2Ygbm90aWZpY2F0aW9uLiBCdXQgaXQgaXMgcGVyZmVjdGx5CiBwb3NzaWJsZSAoZXZlbiBkZXNpcmFibGUpIHRvIGxpbWl0IGNlcnRhaW4gbm90aWZpY2F0aW9uIHNvdXJjZXMgdG8KIHNlbGVjdGVkIHByb2Nlc3Npbmcgb25seS4KLS5JUCAiYXV0aENvbW11bml0eSAgIFRZUEVTIENPTU1VTklUWSAgW1NPVVJDRSBbT0lEIHwgLXYgVklFVyBdXSIKKy5JUCAiYXV0aENvbW11bml0eSAgIFRZUEVTIENPTU1VTklUWSAgW1NPVVJDRSBbT0lEIHwgXC12IFZJRVcgXV0iCiBhdXRob3Jpc2VzIHRyYXBzIChhbmQgU05NUHYyYyBJTkZPUk0gcmVxdWVzdHMpIHdpdGggdGhlIHNwZWNpZmllZAogY29tbXVuaXR5IHRvIHRyaWdnZXIgdGhlIHR5cGVzIG9mIHByb2Nlc3NpbmcgbGlzdGVkLgogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIGFsbG93IGFueSBub3RpZmljYXRpb24gdXNpbmcgdGhpcyBjb21tdW5pdHkKIHRvIGJlIHByb2Nlc3NlZC4gIFRoZSBTT1VSQ0UgZmllbGQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGF0IHRoZQogY29uZmlndXJhdGlvbiBzaG91bGQgb25seSBhcHBseSB0byBub3RpZmljYXRpb25zIHJlY2VpdmVkIGZyb20KLXBhcnRpY3VsYXIgc291cmNlcyAtIHNlZSBcZklzbm1wZC5jb25mKDUpXGZSIGZvciBtb3JlIGRldGFpbHMuCi0uSVAgImF1dGhVc2VyICAgVFlQRVMgWy1zIE1PREVMXSBVU0VSICBbTEVWRUwgW09JRCB8IC12IFZJRVcgXV0iCitwYXJ0aWN1bGFyIHNvdXJjZXMgLSBzZWUKKy5JUiBzbm1wZC5jb25mICg1KQorZm9yIG1vcmUgZGV0YWlscy4KKy5JUCAiYXV0aFVzZXIgICBUWVBFUyBbXC1zIE1PREVMXSBVU0VSICBbTEVWRUwgW09JRCB8IFwtdiBWSUVXIF1dIgogYXV0aG9yaXNlcyBTTk1QdjMgbm90aWZpY2F0aW9ucyB3aXRoIHRoZSBzcGVjaWZpZWQKIHVzZXIgdG8gdHJpZ2dlciB0aGUgdHlwZXMgb2YgcHJvY2Vzc2luZyBsaXN0ZWQuCiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgYWNjZXB0IGF1dGhlbnRpY2F0ZWQgcmVxdWVzdHMuCkBAIC05Niw3ICs5OCw3IEBACiBiZSB1c2VkIHRvIGFsbG93IHVuYXV0aGVudGljYXRlZCBub3RpZmljYXRpb25zIChcZklub2F1dGhcZlIpLAogb3IgdG8gcmVxdWlyZSBlbmNyeXB0aW9uIChcZklwcml2XGZSKSwganVzdCBhcyBmb3IgdGhlIFNOTVAgYWdlbnQuCiAuSVAKLVdpdGggYm90aCBvZiB0aGVzZSBkaXJlY3RpdmVzLCB0aGUgT0lEIChvciBcZkktdiBWSUVXXGZSKSBmaWVsZAorV2l0aCBib3RoIG9mIHRoZXNlIGRpcmVjdGl2ZXMsIHRoZSBPSUQgKG9yIFxmSVwtdiBWSUVXXGZSKSBmaWVsZAogY2FuIGJlIHVzZWQgdG8gcmV0cmljdCB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHByb2Nlc3Npbmcgb2YKIHBhcnRpY3VsYXIgbm90aWZpY2F0aW9ucy4KIC5SUwpAQCAtMTA2LDE2ICsxMDgsMTggQEAKIGluY29taW5nIG5vdGlmaWNhdGlvbi4gIEl0IGlzIG5vdCBhcHBsaWVkIHRvIHRoZSBwYXlsb2FkIHZhcmJpbmRzCiBoZWxkIHdpdGhpbiB0aGF0IG5vdGlmaWNhdGlvbi4KIC5SRQotLklQICJhdXRoR3JvdXAgIFRZUEVTIFstcyBNT0RFTF0gR1JPVVAgIFtMRVZFTCBbT0lEIHwgLXYgVklFVyBdXSIKLS5JUCAiYXV0aEFjY2VzcyBUWVBFUyBbLXMgTU9ERUxdIEdST1VQIFZJRVcgIFtMRVZFTCBbQ09OVEVYVF1dIgorLklQICJhdXRoR3JvdXAgIFRZUEVTIFtcLXMgTU9ERUxdIEdST1VQICBbTEVWRUwgW09JRCB8IFwtdiBWSUVXIF1dIgorLklQICJhdXRoQWNjZXNzIFRZUEVTIFtcLXMgTU9ERUxdIEdST1VQIFZJRVcgIFtMRVZFTCBbQ09OVEVYVF1dIgogLklQICJzZXRBY2Nlc3MgR1JPVVAgQ09OVEVYVCBNT0RFTCBMRVZFTCBQUkVGSVggVklFVyBUWVBFUyIKIGF1dGhvcmlzZSBub3RpZmljYXRpb25zIGluIHRoZSBzcGVjaWZpZWQgR1JPVVAKIChjb25maWd1cmVkIHVzaW5nIHRoZSBcZklncm91cFxmUiBkaXJlY3RpdmUpCiB0byB0cmlnZ2VyIHRoZSB0eXBlcyBvZiBwcm9jZXNzaW5nIGxpc3RlZC4KLVNlZSBcZklzbm1wZC5jb25mKDUpXGZSIGZvciBtb3JlIGRldGFpbHMuCitTZWUKKy5JUiBzbm1wZC5jb25mICg1KQorZm9yIG1vcmUgZGV0YWlscy4KIC5JUCAiY3JlYXRlVXNlciBbLWUgIEVOR0lORUlEXSB1c2VybmFtZSAoTUQ1fFNIQSkgYXV0aHBhc3NwaHJhc2UgW0RFU3xBRVNdIgogU2VlIHRoZSAKLS5JIHNubXBkLmNvbmYoNSkKKy5JUiBzbm1wZC5jb25mICg1KQogbWFudWFsIHBhZ2UgZm9yIGEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGNyZWF0ZSBTTk1QdjMgdXNlcnMuICBUaGlzCiBpcyByb3VnaGx5IHRoZSBzYW1lLCBidXQgdGhlIGZpbGUgbmFtZSBjaGFuZ2VzIHRvIHNubXB0cmFwZC5jb25mIGZyb20KIHNubXBkLmNvbmYuCkBAIC0xMzEsOSArMTM1LDM4IEBACiBzcGVjaWZ5IHRoZSBmb3JtYXQgdXNlZCB0byBkaXNwbGF5IFNOTVB2MSBUUkFQcyBhbmQgU05NUHYyCiBub3RpZmljYXRpb25zIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhhdCBTTk1QdjJjIGFuZCBTTk1QdjMKIGJvdGggdXNlIHRoZSBzYW1lIFNOTVB2MiBQRFUgZm9ybWF0LgorLklQICJmb3JtYXQgREVTVElOQVRJT04gRk9STUFUIgorc3BlY2lmeSB0aGUgZm9ybWF0IHVzZWQgZm9yIGRpZmZlcmVudCBkZXN0aW5hdGlvbnMuCitERVNUSU5BVElPTiBpcyBvbmUgb2Y6CisuSVIgcHJpbnQgIiwgIiBwcmludDEgIiwgIiBwcmludDIgIiwgIiAKKy5JUiBzeXNsb2cgIiwgIiBzeXNsb2cxICIsICIgc3lzbG9nMiAiLCAiIAorLklSIGV4ZWN1dGUgIiwgIiBleGVjdXRlMSAiLCAiIGV4ZWN1dGUyIC4KKy5JIHByaW50MQoraXMgdXNlZCBmb3IgcHJpbnRpbmcgU05NUHYxIHRyYXBzLAorLkkgcHJpbnQyCitpcyBmb3IgU05NUHYyLgorLkkgcHJpbnQKK2lzIHVzZWQgZm9yIGJvdGggdmVyc2lvbnMuCisuSSBzeXNsb2cKK2lzIHNpbWlsYXJseSB1c2VkIHdoZW4gc2VuZGluZyB0cmFwcyB0byBzeXNsb2csIGFuZAorLkkgZXhlY3V0ZQordXNlZCB3aGVuIHNlbmRpbmcgdHJhcHMgdG8gYSBwcm9ncmFtIHN1Y2ggYXMKKy5JUiB0cmFwdG9lbWFpbCAoMSkuCisuSVAKK1RoZSBkZWZhdWx0IGZvcm1hdHMgYXJlCisuYnIKKy5JIGZvcm1hdCBwcmludDEgJS40eS0lLjJtLSUuMmwgJS4yaDolLjJqOiUuMmsgJUIgWyViXSAodmlhICVBIFslYV0pOiAlTlxlblxldCVXIFRyYXAgKCVxKSBVcHRpbWU6ICUjVFxlbiV2XGVuCisuYnIKKy5JIGZvcm1hdCBwcmludDIgJS40eS0lLjJtLSUuMmwgJS4yaDolLjJqOiUuMmsgJUIgWyViXTpcZW4ldlxlbgorLmJyCisuSSBmb3JtYXQgc3lzbG9nMSAlYTogJVcgVHJhcCAoJXEpIFVwdGltZTogJSNUJSN2XGVuCisuYnIKKy5JIGZvcm1hdCBzeXNsb2cyICVCIFslYl06IFRyYXAgJSN2XGVuCisuYnIKKy5JIGZvcm1hdCBleGVjdXRlICVCXGVuJWJcZW4lVlxlbiV2XGVuCiAuSVAKIFNlZQotLklSIHNubXB0cmFwZCg4KQorLklSIHNubXB0cmFwZCAoOCkKIGZvciB0aGUgbGF5b3V0IGNoYXJhY3RlcnMgYXZhaWxhYmxlLgogLklQICJpZ25vcmVBdXRoRmFpbHVyZSB5ZXMiCiBpbnN0cnVjdHMgdGhlIHJlY2VpdmVyIHRvIGlnbm9yZSBcZklhdXRoZW50aWNhdGlvbkZhaWx1cmVcZlIgdHJhcHMuCkBAIC0xNDksMTkgKzE4MiwyNiBAQAogc3BlY2lmaWVzIHdoZXJlIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIGxvZ2dlZCAtIHRvIHN0YW5kYXJkCiBvdXRwdXQsIHN0YW5kYXJkIGVycm9yLCBhIHNwZWNpZmllZCBmaWxlIG9yIHZpYSBcZklzeXNsb2dcZlIuCiBTZWUgdGhlIHNlY3Rpb24gTE9HR0lORyBPUFRJT05TIGluIHRoZQotXGZJc25tcGNtZCgxKVxmUiBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5JUiBzbm1wY21kICgxKQorbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCiAuSVAgIm91dHB1dE9wdGlvbiBzdHJpbmciCiBzcGVjaWZpZXMgdmFyaW91cyBjaGFyYWN0ZXJpc3RpY3Mgb2YgaG93IE9JRHMgYW5kIG90aGVyIHZhbHVlcwogc2hvdWxkIGJlIGRpc3BsYXllZC4KIFNlZSB0aGUgc2VjdGlvbiBPVVRQVVQgT1BUSU9OUyBpbiB0aGUKLVxmSXNubXBjbWQoMSlcZlIgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCi0uSVAgInByaW50RXZlbnROdW1iZXJzIHllcyIKLWVuYWJsZXMgc3BlY2lhbGlzZWQgbG9nZ2luZyBvZiBldmVudC1yZWxhdGVkIG5vdGlmaWNhdGlvbnMgZnJvbQotdGhlIChsb25nIG9ic29sZXRlKSBNMk0tTUlCLgotLlwiCi0uXCIgWFhYIC0gQ0hFQ0sgRVhBQ1RMWSBXSElDSCBUUkFQUwotLlwiIFhYWCAtIFRISVMgRkVFTFMgT0JTT0xFVEUgVE8gTUUhCi0uXCIKKy5JUiBzbm1wY21kICgxKQorbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisuU0ggTXlTUUwgTG9nZ2luZworVGhlcmUgYXJlIHR3byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IHdvcmsgdG9nZXRoZXIgdG8gY29udHJvbAord2hlbiBxdWV1ZWQgdHJhcHMgYXJlIGxvZ2dlZCB0byB0aGUgTXlTUUwgZGF0YWJhc2UuIEEgbm9uLXplcm8KK3ZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIGZvciBzcWxTYXZlSW50ZXJ2YWwgdG8gZW5hYmxlIE15U1FMIGxvZ2dpbmcuCisuUkUKKy5JUCAic3FsTWF4UXVldWUgbWF4Igorc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmFwcyB0byBxdWV1ZSBiZWZvcmUgYSBmb3JjZWQgZmx1c2gKK3RvIHRoZSBNeVNRTCBkYXRhYmFzZS4KKy5SRQorLklQICJzcWxTYXZlSW50ZXJ2YWwgc2Vjb25kcyIKK3NwZWNpZmllZCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBwZXJpb2RpYyBxdWV1ZSBmbHVzaGVzLgorQSB2YWx1ZSBvZiAwIGZvciB3aWxsIGRpc2FibGUgTXlTUUwgbG9nZ2luZy4KIC5TSCBOT1RJRklDQVRJT04gUFJPQ0VTU0lORwogQXMgd2VsbCBhcyBsb2dnaW5nIGluY29taW5nIG5vdGlmaWNhdGlvbnMsIHRoZXkgY2FuIGFsc28KIGJlIGZvcndhcmRlZCBvbiB0byBhbm90aGVyIG5vdGlmaWNhdGlvbiByZWNlaXZlciwgb3IgcGFzc2VkCkBAIC0xOTYsMTQgKzIzNiwxNyBAQAogTm90ZSB0aGF0IHRoaXMgd2lsbCBhbHdheXMgdXNlIHRoZSBTTk1QdjItc3R5bGUgbm90aWZpY2F0aW9uIGZvcm1hdCwgd2l0aAogU05NUHYxIHRyYXBzIGJlaW5nIGNvbnZlcnRlZCBhcyBwZXIgUkZDIDI1NzYsIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gdGhlCiBwcm9ncmFtLgotVGhlIGlucHV0IGZvcm1hdCBpcyBhcyBmb2xsb3dzLCBvbmUgZW50cnkgcGVyIGxpbmU6CitUaGUgaW5wdXQgZm9ybWF0IGlzLCBpZiB5b3UgdXNlIHRoZSBkZWZhdWx0IHNldCBieQordGhlICJmb3JtYXQgZXhlY3V0ZSAlQlxlbiViXGVuJVZcZW4ldlxlbiIsIG9uZSBlbnRyeSBwZXIgbGluZToKIC5SUwogLklQIEhPU1ROQU1FCiBUaGUgbmFtZSBvZiB0aGUgaG9zdCB0aGF0IHNlbnQgdGhlIG5vdGlmaWNhdGlvbiwgYXMgZGV0ZXJtaW5lZCBieQotLklSIGdldGhvc3RieWFkZHIoMykgLgorLklSIGdldGhvc3RieWFkZHIgKDMpLgogLmJyCi0uSVAgSVBBRERSRVNTCi1UaGUgSVAgYWRkcmVzcyBvZiB0aGUgaG9zdCB0aGF0IHNlbnQgdGhlIG5vdGlmaWNhdGlvbi4KKy5JUCBBRERSRVNTCitUaGUgdHJhbnNwb3J0IGFkZHJlc3MsIGxpa2UKKy5icgorIltVRFA6IFsxNzIuMTYuMTAuMTJdOjIzNDU2LT5bMTAuMTUwLjAuOF1dIgogLlwiCiAuXCIgWFhYIC0gV2hhdCBhYm91dCBub24tSVB2NCB0cmFuc3BvcnRzPwogLlwiCkBAIC0yMTQsMTAgKzI1NywxMCBAQAogVGhlIGZvcm1hdCBvZiBib3RoIG9mIHRoZXNlIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBcZklvdXRwdXRPcHRpb25cZlIKIGRpcmVjdGl2ZSAob3Igc2ltaWxhciBjb25maWd1cmF0aW9uKS4KIC5JUAotVGhlIGZpcnN0IE9JRCBzaG91bGQgYWx3YXlzIGJlIFxmQ1NOTVB2Mi1NSUI6OnN5c1VwVGltZS4wXGZSLAotYW5kIHRoZSBzZWNvbmQgc2hvdWxkIGJlIFxmQ1NOTVB2Mi1NSUI6OnNubXBUcmFwT0lELjBcZlIuCitUaGUgZmlyc3QgT0lEIHNob3VsZCBhbHdheXMgYmUgXGZDU05NUHYyXC1NSUI6OnN5c1VwVGltZS4wXGZSLAorYW5kIHRoZSBzZWNvbmQgc2hvdWxkIGJlIFxmQ1NOTVB2MlwtTUlCOjpzbm1wVHJhcE9JRC4wXGZSLgogVGhlIHJlbWFpbmluZyBsaW5lcyB3aWxsIGNvbnRhaW4gdGhlIHBheWxvYWQgdmFyYmluZCBsaXN0LgotRm9yIFNOTVB2MSB0cmFwcywgdGhlIGZpbmFsIE9JRCB3aWxsIGJlIFxmQ1NOTVB2Mi1NSUI6OnNubXBUcmFwRW50ZXJwcmlzZS4wXGZSLgorRm9yIFNOTVB2MSB0cmFwcywgdGhlIGZpbmFsIE9JRCB3aWxsIGJlIFxmQ1NOTVB2MlwtTUlCOjpzbm1wVHJhcEVudGVycHJpc2UuMFxmUi4KIC5icgogLklQIEV4YW1wbGU6CiBBIFxmQnRyYXB0b2VtYWlsXGZSIHNjcmlwdCBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgTmV0LVNOTVAgcGFja2FnZSB0aGF0CkBAIC0yMjUsNyArMjY4LDcgQEAKIC5icgogLlJTCiAuUAotdHJhcGhhbmRsZSBkZWZhdWx0IC91c3IvYmluL3BlcmwgQklORElSL3RyYXB0b2VtYWlsIC1zIG15c210cC5zb21ld2hlcmUuY29tIC1mIGFkbWluQHNvbWV3aGVyZS5jb20gbWVAc29tZXdoZXJlLmNvbQordHJhcGhhbmRsZSBkZWZhdWx0IC91c3IvYmluL3BlcmwgQklORElSL3RyYXB0b2VtYWlsIFwtcyBteXNtdHAuc29tZXdoZXJlLmNvbSBcLWYgYWRtaW5Ac29tZXdoZXJlLmNvbSBtZUBzb21ld2hlcmUuY29tCiAuUkUKIC5SRQogLklQICJmb3J3YXJkIE9JRHxkZWZhdWx0IERFU1RJTkFUSU9OIgpAQCAtMjM3LDcgKzI4MCw3IEBACiBTZWUgdGhlIHNlY3Rpb24gCiAuQiBMSVNURU5JTkcgQUREUkVTU0VTCiBpbiB0aGUKLS5JIHNubXBkKDgpCisuSVIgc25tcGQgKDgpCiBtYW51YWwgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGxpc3RlbmluZwogYWRkcmVzc2VzLgogLlJFCkBAIC0yNTcsNSArMzAwLDUgQEAKIC5TSCBGSUxFUwogU1lTQ09ORkRJUi9zbm1wL3NubXB0cmFwZC5jb25mCiAuU0ggIlNFRSBBTFNPIgotc25tcF9jb25maWcoNSksIHNubXB0cmFwZCg4KSwgc3lzbG9nKDgpLCB2YXJpYWJsZXMoNSksIHNubXBkLmNvbmYoNSksIHJlYWRfY29uZmlnKDMpLgorc25tcF9jb25maWcoNSksIHNubXB0cmFwZCg4KSwgc3lzbG9nKDgpLCB0cmFwdG9lbWFpbCgxKSwgdmFyaWFibGVzKDUpLCBuZXRzbm1wX2NvbmZpZ19hcGkoMykuCiAKZGlmZiAtLWdpdCBhL21hbi9zbm1wdXNtLjEuZGVmIGIvbWFuL3NubXB1c20uMS5kZWYKaW5kZXggNjM1MjczZi4uOTA2MTIxMyAxMDA2NDQKLS0tIGEvbWFuL3NubXB1c20uMS5kZWYKKysrIGIvbWFuL3NubXB1c20uMS5kZWYKQEAgLTEsOSArMSw5IEBACi0uVEggU05NUFVTTSAxICIyMCBKYW4gMjAwNiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QVVNNIDEgIjExIERlYyAyMDA5IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXB1c20gLSBjcmVhdGVzIGFuZCBtYWludGFpbnMgU05NUHYzIHVzZXJzIG9uIGEgbmV0d29yayBlbnRpdHkKIC5TSCBTWU5PUFNJUwogLkIgc25tcHVzbQotW0NPTU1PTiBPUFRJT05TXSBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSBbXC1Dd10gQUdFTlQKIC5CIGNyZWF0ZQogVVNFUiBbQ0xPTkVGUk9NLVVTRVJdCiAuYnIKQEAgLTE4LDE3ICsxOCwxNyBAQAogVVNFUiBDTE9ORUZST00tVVNFUgogLmJyCiAuQiBzbm1wdXNtCi1bQ09NTU9OIE9QVElPTlNdIFstQ2FdIFstQ3hdIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIFtcLUNhXSBbXC1DeF0gQUdFTlQKIC5CIHBhc3N3ZAogT0xELVBBU1NQSFJBU0UgTkVXLVBBU1NQSFJBU0UgW1VTRVJdCiAuYnIKIC5CIHNubXB1c20KLVtDT01NT04gT1BUSU9OU10gPC1DYSB8IC1DeD4gLUNrIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIDxcLUNhIHwgXC1DeD4gXC1DayBBR0VOVAogLkIgcGFzc3dkCiBPTEQtS0VZLU9SLVBBU1NQSFJBU0UgTkVXLUtFWS1PUi1QQVNTUEhSQVNFIFtVU0VSXQogLmJyCiAuQiBzbm1wdXNtCi1bQ09NTU9OIE9QVElPTlNdIFstQ2FdIFstQ3hdIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIFtcLUNhXSBbXC1DeF0gQUdFTlQKIC5CIGNoYW5nZWtleQogW1VTRVJdCiAKQEAgLTQ2LDEyICs0NiwxMiBAQAogLkIgc25tcHVzbQogY29tbWFuZHM6CiAuVFAKLS5CSSAtQ0UgIiBFTkdJTkUtSUQiCisuQkkgXC1DRSAiIEVOR0lORS1JRCIKIFNldCB1c21Vc2VyRW5naW5lSUQgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBpbmRleCBvZiB0aGUgdXNtVXNlclRhYmxlLgotRGVmYXVsdCBpcyB0byB1c2UgdGhlIGNvbnRleHRFbmdpbmVJRCAoc2V0IHZpYSAtRSBvciBwcm9iZWQpIGFzIHRoZSAKK0RlZmF1bHQgaXMgdG8gdXNlIHRoZSBjb250ZXh0RW5naW5lSUQgKHNldCB2aWEgXC1FIG9yIHByb2JlZCkgYXMgdGhlIAogdXNtVXNlckVuZ2luZUlELgogLlRQCi0uQkkgLUNwICIgU1RSSU5HIgorLkJJIFwtQ3AgIiBTVFJJTkciCiBTZXQgdGhlIHVzbVVzZXJQdWJsaWMgdmFsdWUgb2YgdGhlIChuZXcpIHVzZXIgdG8gdGhlIHNwZWNpZmllZCBTVFJJTkcuCiAuUFAKIE9wdGlvbnMgZm9yIHRoZQpAQCAtNjAsMTUgKzYwLDE1IEBACiAuQiBjaGFuZ2VrZXkKIGNvbW1hbmRzOgogLlRQCi0uQkkgLUNhCisuQkkgXC1DYQogQ2hhbmdlIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkuCiAuVFAKLS5CSSAtQ3gKKy5CSSBcLUN4CiBDaGFuZ2UgdGhlIHByaXZhY3kga2V5LgogLlRQCi0uQkkgLUNrCi1BbGxvd3MgdG8gdXNlIGxvY2FsaXplZCBrZXkgKG11c3Qgc3RhcnQgd2l0aCAweCkgaW5zdGVhZCBvZiBwYXNzcGhyYXNlLgotV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBlaXRoZXIgdGhlIC1DYSBvciAtQ3ggb3B0aW9uIChidXQgbm90IGJvdGgpIG11c3QgYWxzbworLkJJIFwtQ2sKK0FsbG93cyBvbmUgdG8gdXNlIGxvY2FsaXplZCBrZXkgKG11c3Qgc3RhcnQgd2l0aCAweCkgaW5zdGVhZCBvZiBwYXNzcGhyYXNlLgorV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBlaXRoZXIgdGhlIFwtQ2Egb3IgXC1DeCBvcHRpb24gKGJ1dCBub3QgYm90aCkgbXVzdCBhbHNvCiBiZSB1c2VkLgogCiAuU0ggQ1JFQVRJTkcgVVNFUlMKQEAgLTc2LDIwICs3NiwyMyBAQAogQW4gdW5hdXRoZW50aWNhdGVkIFNOTVB2MyB1c2VyIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBjb21tYW5kCiAuSVAKIC5CIHNubXB1c20KLVtPUFRJT05TXSBBR0VOVCBjcmVhdGUgVVNFUgorW0NPTU1PTiBPUFRJT05TXSBBR0VOVCBjcmVhdGUgVVNFUgogLlBQCiBUaGlzIGNvbnN0cnVjdHMgYW4gKGluYWN0aXZlKSBlbnRyeSBpbiB0aGUgdXNtVXNlclRhYmxlLAogd2l0aCBubyBhdXRoZW50aWNhdGlvbiBvciBwcml2YWN5IHNldHRpbmdzLgogSW4gcHJpbmNpcGxlLCB0aGlzIHVzZXIgc2hvdWxkIGJlIHVzZWFibGUgZm9yICdub0F1dGhOb1ByaXYnIHJlcXVlc3RzLAogYnV0IGluIHByYWN0aXNlIHRoZSBOZXQtU05NUCBhZ2VudCB3aWxsIG5vdCBhbGxvdyBzdWNoIGFuIGVudHJ5Ci10byBiZSBtYWRlIGFjdGl2ZS4KK3RvIGJlIG1hZGUgYWN0aXZlLiAgVGhlIHVzZXIgY2FuIGJlIGNyZWF0ZWQgdmlhIHRoZSBjcmVhdGVBbmRXYWl0CitvcGVyYXRpb24gaW5zdGVhZCBieSB1c2luZyB0aGUgXC1DYSBmbGFnLiAgVGhpcyB3aWxsIHByZXZlbnQgdGhlIHVzZXIKK2Zyb20gYmVpbmcgbWFya2VkIGFzIGFjdGl2ZSBpbiBhbnkgYWdlbnQgdW50aWwgZXhwbGljaXRseSBhY3RpdmF0ZWQKK2xhdGVyIHZpYSB0aGUgYWN0aXZhdGUgY29tbWFuZC4KIAogLlBQCiBJbiBvcmRlciB0byBhY3RpdmF0ZSB0aGlzIGVudHJ5LCBpdCBpcyBuZWNlc3NhcnkgdG8gImNsb25lIiBhbiBleGlzdGluZwogdXNlciwgdXNpbmcgdGhlIGNvbW1hbmQKIC5JUAogLkIgc25tcHVzbQotW09QVElPTlNdIEFHRU5UIGNsb25lRnJvbSBVU0VSIENMT05FRlJPTS1VU0VSCitbQ09NTU9OIE9QVElPTlNdIEFHRU5UIGNsb25lRnJvbSBVU0VSIENMT05FRlJPTS1VU0VSCiAuUFAKIFRoZSBVU0VSIGVudHJ5IHRoZW4gaW5oZXJpdHMgdGhlIHNhbWUgYXV0aGVudGljYXRpb24gYW5kIHByaXZhY3kKIHNldHRpbmdzIChpbmNsdWRpbmcgcGFzcyBwaHJhc2VzKSBhcyB0aGUgQ0xPTkVGUk9NIHVzZXIuCkBAIC05OCw3ICsxMDEsNyBAQAogVGhlc2UgdHdvIHN0ZXBzIGNhbiBiZSBjb21iaW5lZCBpbnRvIG9uZSwgYnkgdXNpbmcgdGhlIGNvbW1hbmQKIC5JUAogLkIgc25tcHVzbQotW09QVElPTlNdIEFHRU5UIGNyZWF0ZSBVU0VSIENMT05FRlJPTS1VU0VSCitbQ09NTU9OIE9QVElPTlNdIEFHRU5UIGNyZWF0ZSBVU0VSIENMT05FRlJPTS1VU0VSCiAKIC5QUAogVGhlIHR3byBmb3JtcyBvZiB0aGUKQEAgLTEzNCw3ICsxMzcsNyBAQAogQSB1c2VyIGNhbiBiZSBkZWxldGVkIGZyb20gdGhlIHVzbVVzZXJUYWJsZSB1c2luZyB0aGUgY29tbWFuZAogLklQCiAuQiBzbm1wdXNtCi1bT1BUSU9OU10gQUdFTlQgZGVsZXRlIFVTRVIKK1tDT01NT04gT1BUSU9OU10gQUdFTlQgZGVsZXRlIFVTRVIKIAogLlNIIENIQU5HSU5HIFBBU1MgUEhSQVNFUwogVXNlciBwcm9maWxlcyBjb250YWluIHByaXZhdGUga2V5cyB0aGF0IGFyZSBuZXZlcgpAQCAtMTQ1LDcgKzE0OCw3IEBACiBUaGlzIHVzZXMgdGhlIGNvbW1hbmQKIC5JUAogLkIgc25tcHVzbQotW09QVElPTlNdIFstQ2FdIFstQ3hdIEFHRU5UIHBhc3N3ZCBPTEQtUEFTU1BIUkFTRSBORVctUEFTU1BIUkFTRSBbVVNFUl0KK1tDT01NT04gT1BUSU9OU10gW1wtQ2FdIFtcLUN4XSBBR0VOVCBwYXNzd2QgT0xELVBBU1NQSFJBU0UgTkVXLVBBU1NQSFJBU0UgW1VTRVJdCiAKIC5QUAogQWZ0ZXIgY2xvbmluZyBhIG5ldyB1c2VyIGVudHJ5IGZyb20gdGhlIGFwcHJvcHJpYXRlIHRlbXBsYXRlLApAQCAtMTUzLDIxICsxNTYsMjEgQEAKIAogLlBQCiBJZiBVU0VSIGlzIG5vdCBzcGVjaWZpZWQsIHRoaXMgY29tbWFuZCB3aWxsIGNoYW5nZSB0aGUgcGFzc3BocmFzZQotb2YgdGhlIChTTk1QdjMpIHVzZXIgaXNzdWluZyB0aGUgY29tbWFuZC4gIElmIHRoZSAtQ2Egb3IgLUN4IG9wdGlvbnMKK29mIHRoZSAoU05NUHYzKSB1c2VyIGlzc3VpbmcgdGhlIGNvbW1hbmQuICBJZiB0aGUgXC1DYSBvciBcLUN4IG9wdGlvbnMKIGFyZSBzcGVjaWZpZWQsIHRoZW4gb25seSB0aGUgYXV0aGVudGljYXRpb24gb3IgcHJpdmFjeSBrZXlzIGFyZSBjaGFuZ2VkLiAgSWYKIHRoZXNlIG9wdGlvbnMgYXJlIG5vdCBzcGVjaWZpZWQsIHRoZW4gYm90aCB0aGUgYXV0aGVudGljYXRpb24gYW5kIHByaXZhY3kga2V5cwogYXJlIGNoYW5nZWQuCiAKIC5JUAogLkIgc25tcHVzbQotW09QVElPTlNdIFstQ2FdIFstQ3hdIEFHRU5UIGNoYW5nZWtleSBbVVNFUl0KK1tDT01NT04gT1BUSU9OU10gW1wtQ2FdIFtcLUN4XSBBR0VOVCBjaGFuZ2VrZXkgW1VTRVJdCiAKIC5QUAogVGhpcyBjb21tYW5kIGNoYW5nZXMgdGhlIGtleSBpbiBhIHBlcmZlY3QtZm9yd2FyZC1zZWNyZWN5IGNvbXBsaWFudAogd2F5IHRocm91Z2ggYSBkaWZmaWUtaGVsbWFuIGV4Y2hhbmdlLiAgVGhlIHJlbW90ZSBhZ2VudCBtdXN0IHN1cHBvcnQKLXRoZSBTTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQiBmb3IgdGhpcyBjb21tYW5kIHRvIHdvcmsuICBUaGUgcmVzdWx0aW5nCit0aGUgU05NUFwtVVNNXC1ESFwtT0JKRUNUU1wtTUlCIGZvciB0aGlzIGNvbW1hbmQgdG8gd29yay4gIFRoZSByZXN1bHRpbmcKIGtleXMgYXJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUgYW5kIG1heSBiZSB0aGVuIHNldCBpbiBmdXR1cmUgY29tbWFuZAotaW52b2NhdGlvbnMgdXNpbmcgdGhlIC0tZGVmQXV0aExvY2FsaXplZEtleSBhbmQgLS1kZWZQcml2TG9jYWxpemVkS2V5CitpbnZvY2F0aW9ucyB1c2luZyB0aGUgXC1cLWRlZkF1dGhMb2NhbGl6ZWRLZXkgYW5kIFwtXC1kZWZQcml2TG9jYWxpemVkS2V5CiBvcHRpb25zIG9yIGluIHlvdXIgc25tcC5jb25mIGZpbGUgdXNpbmcgdGhlIGRlZkF1dGhMb2NhbGl6ZWRLZXkgYW5kCiBkZWZQcml2TG9jYWxpemVkS2V5IGtleXdvcmRzLgogCkBAIC0xODQsMTAgKzE4NywxMCBAQAogCiAuSVAKIC5CIHNubXB1c20KLVtPUFRJT05TXSA8LUNhIHwgLUN4PiAtQ2sgQUdFTlQgcGFzc3dkIE9MRC1LRVktT1ItUEFTU1BIUkFTRSBORVctS0VZLU9SLVBBU1NQSFJBU0UgW1VTRVJdCitbQ09NTU9OIE9QVElPTlNdIDxcLUNhIHwgXC1DeD4gXC1DayBBR0VOVCBwYXNzd2QgT0xELUtFWS1PUi1QQVNTUEhSQVNFIE5FVy1LRVktT1ItUEFTU1BIUkFTRSBbVVNFUl0KIAogLlBQCi1FaXRoZXIgdGhlIC1DYSBvciB0aGUgLUN4IG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZC4gIFRoZSBPTEQtS0VZLU9SLVBBU1NQSFJBU0UKK0VpdGhlciB0aGUgXC1DYSBvciB0aGUgXC1DeCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQuICBUaGUgT0xELUtFWS1PUi1QQVNTUEhSQVNFCiBhbmQvb3IgTkVXLUtFWS1PUi1QQVNTUEhSQVNFIGFyZ3VtZW50cyBjYW4gZWl0aGVyIGJlIGEgcGFzc3BocmFzZSBvciBhCiBsb2NhbGl6ZWQga2V5IHN0YXJ0aW5nIHdpdGggIjB4IiwgZS5nLiBhcyBwcmludGVkIG91dCBieSB0aGUKIC5CIGNoYW5nZWtleQpAQCAtMjI2LDcgKzIyOSw3IEBACiBpbiBsZW5ndGguCiAuU1MgQ3JlYXRlIGEgbmV3IHVzZXIKIC5QUAotc25tcHVzbSAtdjMgLXUgaW5pdGlhbCAtbiAiIiAtbCBhdXRoTm9Qcml2IC1hIE1ENSAtQSBzZXR1cF9wYXNzcGhyYXNlCitzbm1wdXNtIFwtdjMgXC11IGluaXRpYWwgXC1uICIiIFwtbCBhdXRoTm9Qcml2IFwtYSBNRDUgXC1BIHNldHVwX3Bhc3NwaHJhc2UKIGxvY2FsaG9zdCBjcmVhdGUgd2VzIGluaXRpYWwKIC5JUAogQ3JlYXRlcyBhIG5ldyB1c2VyLCBoZXJlIG5hbWVkICJ3ZXMiIHVzaW5nIHRoZSB1c2VyICJpbml0aWFsIiB0byBkbwpAQCAtMjM0LDcgKzIzNyw3IEBACiB0aGF0IHVzZXIncyBwYXNzcGhyYXNlICgic2V0dXBfcGFzc3BocmFzZSIpLgogLlNTIENoYW5nZSB0aGUgdXNlcidzIHBhc3NwaHJhc2UKIC5QUAotc25tcHVzbSAtdiAzIC11IHdlcyAtbiAiIiAtbCBhdXRoTm9Qcml2IC1hIE1ENSAtQSBzZXR1cF9wYXNzcGhyYXNlCitzbm1wdXNtIFwtdiAzIFwtdSB3ZXMgXC1uICIiIFwtbCBhdXRoTm9Qcml2IFwtYSBNRDUgXC1BIHNldHVwX3Bhc3NwaHJhc2UKIGxvY2FsaG9zdCBwYXNzd2Qgc2V0dXBfcGFzc3BocmFzZSBuZXdfcGFzc3BocmFzZQogLklQCiBBZnRlciBjcmVhdGluZyB0aGUgdXNlciAid2VzIiB3aXRoIHRoZSBzYW1lIHBhc3NwaHJhc2UgYXMgdGhlCkBAIC0yNDMsNyArMjQ2LDcgQEAKIHRoZSBpbml0aWFsIHVzZXIsIHRvICJuZXdfcGFzc3BocmFzZSIuCiAuU1MgVGVzdCB0aGUgbmV3IHVzZXIKIC5QUAotc25tcGdldCAtdiAzIC11IHdlcyAtbiAiIiAtbCBhdXRoTm9Qcml2IC1hIE1ENSAtQSBuZXdfcGFzc3BocmFzZQorc25tcGdldCBcLXYgMyBcLXUgd2VzIFwtbiAiIiBcLWwgYXV0aE5vUHJpdiBcLWEgTUQ1IFwtQSBuZXdfcGFzc3BocmFzZQogbG9jYWxob3N0IHN5c1VwVGltZS4wCiAuSVAKIElmIHRoZSBhYm92ZSBjb21tYW5kcyB3ZXJlIHN1Y2Nlc3NmdWwsIHRoaXMgY29tbWFuZCBzaG91bGQgaGF2ZQpkaWZmIC0tZ2l0IGEvbWFuL3NubXB2YWNtLjEuZGVmIGIvbWFuL3NubXB2YWNtLjEuZGVmCmluZGV4IDZhZTFmMDMuLjcwYjA4OWUgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wdmFjbS4xLmRlZgorKysgYi9tYW4vc25tcHZhY20uMS5kZWYKQEAgLTE1LDcgKzE1LDcgQEAKIC5CIHNubXB2YWNtCiBbQ09NTU9OIE9QVElPTlNdIEFHRU5UCiAuQiBjcmVhdGVWaWV3Ci1bLUNlXSBOQU1FIFNVQlRSRUUgTUFTSworW1wtQ2VdIE5BTUUgU1VCVFJFRSBNQVNLCiAuYnIKIC5CIHNubXB2YWNtCiBbQ09NTU9OIE9QVElPTlNdIEFHRU5UCkBAIC0xMDIsNyArMTAyLDcgQEAKIC5CIGNyZWF0ZVNlYzJHcm91cAogY29tbWFuZCAob3IgZXF1aXZhbGVudCkuCiAKLS5TUyBjcmVhdGVWaWV3IFxmUlstQ2VdIE5BTUUgU1VCVFJFRSBNQVNLXGZQCisuU1MgY3JlYXRlVmlldyBcZlJbXC1DZV0gTkFNRSBTVUJUUkVFIE1BU0tcZlAKIC5QUAogQ3JlYXRlIGFuIGVudHJ5IGluIHRoZSBTTk1QdjMgTUlCIHZpZXcgdGFibGUuCiBBIE1JQiB2aWV3IGNvbnNpc3RzIG9mIGEgZmFtaWx5IG9mIHZpZXcgc3VidHJlZXMgd2hpY2ggbWF5IGJlIGluZGl2aWR1YWxseQpAQCAtMTEwLDcgKzExMCw3IEBACiBkZWZpbmVkIGJ5IGEgY29tYmluYXRpb24gb2YgYW4gT0lEIHN1YnRyZWUgdG9nZXRoZXIgd2l0aCBhIGJpdCBzdHJpbmcgbWFzay4KIFRoZSB2aWV3IHRhYmxlIGlzIGluZGV4ZWQgYnkgdGhlIHZpZXcgbmFtZSBhbmQgc3VidHJlZSBPSUQgdmFsdWVzLgogLlBQCi1bLUNlXQorW1wtQ2VdCiAuSVAKIEFuIG9wdGlvbmFsIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHZpZXcgc3VidHJlZSBzaG91bGQgYmUgZXhjbHVkZWQKIGZyb20gdGhlIG5hbWVkIHZpZXcuCkBAIC0zMjcsNyArMzI3LDcgQEAKIC5QUAogVGhpcyBjcmVhdGVzIGEgbmV3IHNlY3VyaXR5IGdyb3VwIG5hbWVkICJST0dyb3VwIiBjb250YWluaW5nIHRoZSAocHJlLWV4aXN0aW5nKQogdXNlciAid2VzIiwgYSBuZXcgdmlldyAic3lzVmlldyIgY29udGFpbmluZyBqdXN0IHRoZSBPSUQgdHJlZSBiYXNlZCBvbgotLkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmluZXQoMSkubWdtdCgyKS5taWItMigxKS5zeXN0ZW0oMSkKKy5JIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbmV0KDEpLm1nbXQoMikubWliXC0yKDEpLnN5c3RlbSgxKQogLCBhbmQgdGhlbiBhbGxvd3MgdGhvc2UgdXNlcnMgaW4gdGhlIGdyb3VwICJST0dyb3VwIiAoaS5lLiAid2VzIikKIHJlYWQtYWNjZXNzLCBidXQgbm90IHdyaXRlLWFjY2VzcyB0byB0aGUgdmlldyAic3lzVmlldyIgKGkuZS4gdGhlIHN5c3RlbSBncm91cCkuCiAKZGlmZiAtLWdpdCBhL21hbi9zbm1wd2Fsay4xLmRlZiBiL21hbi9zbm1wd2Fsay4xLmRlZgppbmRleCAwYzU1ZDcyLi5kOWYzZDVjIDEwMDY0NAotLS0gYS9tYW4vc25tcHdhbGsuMS5kZWYKKysrIGIvbWFuL3NubXB3YWxrLjEuZGVmCkBAIC0xLDcgKzEsNyBAQAogLlwiIC0qLSBucm9mZiAtKi0KLS5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuIAotLlwiIFNlZSB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyCi0uXCIgY29weXJpZ2h0cyB0aGF0IG1heSBhcHBseToKKy5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKy5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKy5cIiB0aGF0IG1heSBhcHBseToKIC5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC5cIiAJQ29weXJpZ2h0IDE5ODgsIDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIC5cIiAKQEAgLTIzLDcgKzIzLDcgQEAKIC5cIiBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCiAuXCIgU09GVFdBUkUuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBXQUxLIDEgIjIzIEF1ZyAyMDA0IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBXQUxLIDEgIjI4IE1heSAyMDA3IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXB3YWxrIC0gcmV0cmlldmUgYSBzdWJ0cmVlIG9mIG1hbmFnZW1lbnQgdmFsdWVzIHVzaW5nIFNOTVAgR0VUTkVYVCByZXF1ZXN0cwogLlNIIFNZTk9QU0lTCkBAIC00Myw3ICs0Myw3IEBACiAuUFAKIElmIG5vIE9JRCBhcmd1bWVudCBpcyBwcmVzZW50LAogLkIgc25tcHdhbGsKLXdpbGwgc2VhcmNoIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCBTTk1QdjItU01JOjptaWItMgord2lsbCBzZWFyY2ggdGhlIHN1YnRyZWUgcm9vdGVkIGF0IFNOTVB2MlwtU01JOjptaWJcLTIKIChpbmNsdWRpbmcgYW55IE1JQiBvYmplY3QgdmFsdWVzIGZyb20gb3RoZXIgTUlCIG1vZHVsZXMsCiB0aGF0IGFyZSBkZWZpbmVkIGFzIGx5aW5nIHdpdGhpbiB0aGlzIHN1YnRyZWUpLgogSWYgdGhlIG5ldHdvcmsgZW50aXR5IGhhcyBhbiBlcnJvciBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0IHBhY2tldCwgYW4KQEAgLTU0LDcgKzU0LDcgQEAKIE1JQiwgdGhlIG1lc3NhZ2UgIkVuZCBvZiBNSUIiIHdpbGwgYmUgZGlzcGxheWVkLgogLlNIIE9QVElPTlMKIC5UUCA4Ci0uQiAtQ2MKKy5CIFwtQ2MKIERvIG5vdCBjaGVjayB3aGV0aGVyIHRoZSByZXR1cm5lZCBPSURzIGFyZSBpbmNyZWFzaW5nLiAgU29tZSBhZ2VudHMKIChMYXNlckpldHMgYXJlIGFuIGV4YW1wbGUpIHJldHVybiBPSURzIG91dCBvZiBvcmRlciwgYnV0IGNhbgogY29tcGxldGUgdGhlIHdhbGsgYW55d2F5LiAgT3RoZXIgYWdlbnRzIHJldHVybiBPSURzIHRoYXQgYXJlIG91dCBvZgpAQCAtNjQsMTAgKzY0LDE1IEBACiAuQiBzbm1wd2FsawogdHJpZXMgdG8gZGV0ZWN0IHRoaXMgYmVoYXZpb3IgYW5kIHdhcm5zIHlvdSB3aGVuIGl0IGhpdHMgYW4gYWdlbnQKIGFjdGluZyBpbGxlZ2FsbHkuICBVc2UKLS5CIC1DYworLkIgXC1DYwogdG8gdHVybiBvZmYgdGhpcyBjaGVjay4KIC5UUAotLkIgLUNpCisuQiBcLUNFIHtPSUR9CitFbmQgdGhlIHdhbGsgYXQgdGhlIHNwZWNpZmllZCBPSUQsIHJhdGhlciB0aGFuIGEgc2ltcGxlIHN1YnRyZWUuCitUaGlzIGNhbiBiZSB1c2VkIHRvIHdhbGsgYSBwYXJ0aWFsIHN1YnRyZWUsIHNlbGVjdGVkIGNvbHVtbnMgb2YKK2EgdGFibGUsIG9yIGV2ZW4gdHdvIG9yIG1vcmUgdGFibGVzIHdpdGhpbiBhIHNpbmdsZSBjb21tYW5kLgorLlRQCisuQiBcLUNpCiBJbmNsdWRlIHRoZSBnaXZlbiBPSUQgaW4gdGhlIHNlYXJjaCByYW5nZS4gIE5vcm1hbGx5CiAuQiBzbm1wd2FsawogdXNlcyBHRVRORVhUIHJlcXVlc3RzIHN0YXJ0aW5nIHdpdGggdGhlIE9JRCB5b3Ugc3BlY2lmaWVkIGFuZCByZXR1cm5zCkBAIC03Niw3ICs4MSw3IEBACiByZXN1bHRzIGlmIGl0IGlzIGEgdmFsaWQgT0lEIGluIHRoZSB0cmVlIGl0c2VsZi4gIFRoaXMgb3B0aW9uIGxldHMgeW91CiBkbyB0aGlzIGV4cGxpY2l0bHkuCiAuVFAKLS5CIC1DSQorLkIgXC1DSQogSW4gZmFjdCwgdGhlIGdpdmVuIE9JRCB3aWxsIGJlIHJldHJpZXZlZCBhdXRvbWF0aWNhbGx5IGlmIHRoZSBtYWluCiBzdWJ0cmVlIHdhbGsgcmV0dXJucyBubyB1c2VhYmxlIHZhbHVlcy4gIFRoaXMgYWxsb3dzIGEgd2FsayBvZiBhCiBzaW5nbGUgaW5zdGFuY2UgdG8gYmVoYXZlIGFzIGdlbmVyYWxseSBleHBlY3RlZCwgYW5kIHJldHVybiB0aGUKQEAgLTg0LDEwICs4OSwxMCBAQAogVGhpcyBvcHRpb24gdHVybnMgb2ZmIHRoaXMgZmluYWwgR0VUIHJlcXVlc3QsIHNvIGEgd2FsayBvZiBhCiBzaW5nbGUgaW5zdGFuY2Ugd2lsbCByZXR1cm4gbm90aGluZy4KIC5UUAotLkIgLUNwCisuQiBcLUNwCiBVcG9uIGNvbXBsZXRpb24gb2YgdGhlIHdhbGssIHByaW50IHRoZSBudW1iZXIgb2YgdmFyaWFibGVzIGZvdW5kLgogLlRQCi0uQiAtQ3QKKy5CIFwtQ3QKIFVwb24gY29tcGxldGlvbiBvZiB0aGUgd2FsaywgcHJpbnQgdGhlIHRvdGFsIHdhbGwtY2xvY2sgdGltZSBpdCB0b29rCiB0byBjb2xsZWN0IHRoZSBkYXRhIChpbiBzZWNvbmRzKS4gIE5vdGUgdGhhdCB0aGUgdGltZXIgaXMgc3RhcnRlZCBqdXN0CiBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YSByZXF1ZXN0IHNlcmllcyBhbmQgc3RvcHBlZCBqdXN0IGFmdGVyCkBAIC0xMDAsMTUgKzEwNSwxNSBAQAogdGFrZXMgdGhlIGNvbW1vbiBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGUgCiAuSSBzbm1wY21kKDEpCiBtYW51YWwgcGFnZS4KKy5TSCBFWEFNUExFUwogLmJyCiBOb3RlIHRoYXQKLS5CIHNubXBidWxrZ2V0CisuQiBzbm1wd2FsawogUkVRVUlSRVMgIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIGFnZW50IHRvIHF1ZXJ5CiBhbmQgYXQgbW9zdCBvbmUgT0lEIGFyZ3VtZW50LCBhcyBkZXNjcmliZWQgdGhlcmUuCi0uU0ggRVhBTVBMRQogVGhlIGNvbW1hbmQ6CiAuUFAKLXNubXB3YWxrIC1PcyAtYyBwdWJsaWMgLXYgMSB6ZXVzIHN5c3RlbQorc25tcHdhbGsgXC1PcyBcLWMgcHVibGljIFwtdiAxIHpldXMgc3lzdGVtCiAuUFAKIHdpbGwgcmV0cmlldmUgYWxsIG9mIHRoZSB2YXJpYWJsZXMgdW5kZXIgc3lzdGVtOgogLlBQCkBAIC0xMjUsNSArMTMwLDEzIEBACiBzeXNMb2NhdGlvbi4wID0gU1RSSU5HOiAiIgogLmJyCiBzeXNTZXJ2aWNlcy4wID0gSU5URUdFUjogNzIKKy5icgorKHBsdXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzeXNPUlRhYmxlKS4KKworVGhlIGNvbW1hbmQ6CisuUFAKK3NubXB3YWxrIFwtT3MgXC1jIHB1YmxpYyBcLXYgMSBcLUNFIHN5c09SVGFibGUgemV1cyBzeXN0ZW0KKy5QUAord2lsbCByZXRyaWV2ZSB0aGUgc2NhbGFyIHZhbHVlcywgYnV0IG9taXQgdGhlIHN5c09SVGFibGUuCiAuU0ggIlNFRSBBTFNPIgogc25tcGNtZCgxKSwgc25tcGJ1bGt3YWxrKDEpLCB2YXJpYWJsZXMoNSkuCmRpZmYgLS1naXQgYS9tYW4vdGttaWIuMS5kZWYgYi9tYW4vdGttaWIuMS5kZWYKaW5kZXggZmE0NWRjZS4uZjAyNTNiOSAxMDA2NDQKLS0tIGEvbWFuL3RrbWliLjEuZGVmCisrKyBiL21hbi90a21pYi4xLmRlZgpAQCAtMSw0ICsxLDQgQEAKLS5USCB0a21pYiAxICIxNiBOb3YgMjAwNiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCB0a21pYiAiMSIgIjE2IE5vdiAyMDA2IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHRrbWliIC0gYW4gaW50ZXJhY3RpdmUgZ3JhcGhpY2FsIE1JQiBicm93c2VyIGZvciBTTk1QCiAuU0ggU1lOT1BTSVMKZGlmZiAtLWdpdCBhL21pYnMvQlJJREdFLU1JQi50eHQgYi9taWJzL0JSSURHRS1NSUIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNzdhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9taWJzL0JSSURHRS1NSUIudHh0CkBAIC0wLDAgKzEsMTQ3MiBAQAorQlJJREdFLU1JQiBERUZJTklUSU9OUyA6Oj0gQkVHSU4KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gTUlCIGZvciBJRUVFIDgwMi4xRCBkZXZpY2VzCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCitJTVBPUlRTCisgICAgTU9EVUxFLUlERU5USVRZLCBPQkpFQ1QtVFlQRSwgTk9USUZJQ0FUSU9OLVRZUEUsCisgICAgQ291bnRlcjMyLCBJbnRlZ2VyMzIsIFRpbWVUaWNrcywgbWliLTIKKyAgICAgICAgRlJPTSBTTk1QdjItU01JCisgICAgVEVYVFVBTC1DT05WRU5USU9OLCBNYWNBZGRyZXNzCisgICAgICAgIEZST00gU05NUHYyLVRDCisgICAgTU9EVUxFLUNPTVBMSUFOQ0UsIE9CSkVDVC1HUk9VUCwgTk9USUZJQ0FUSU9OLUdST1VQCisgICAgICAgIEZST00gU05NUHYyLUNPTkYKKyAgICBJbnRlcmZhY2VJbmRleCBGUk9NIElGLU1JQgorICAgIDsKKworZG90MWRCcmlkZ2UgTU9EVUxFLUlERU5USVRZCisgICAgTEFTVC1VUERBVEVEICIyMDA1MDkxOTAwMDBaIgorICAgIE9SR0FOSVpBVElPTiAiSUVURiBCcmlkZ2UgTUlCIFdvcmtpbmcgR3JvdXAiCisgICAgQ09OVEFDVC1JTkZPCisgICAgICAgICJFbWFpbDogYnJpZGdlLW1pYkBpZXRmLm9yZworCisgICAgICAgICAgICAgICAgIEsuQy4gTm9yc2V0aCAoRWRpdG9yKQorICAgICAgICAgICAgICAgICBMLTMgQ29tbXVuaWNhdGlvbnMKKyAgICAgICAgICAgIFRlbDogKzEgODAxLTU5NC0yODA5CisgICAgICAgICAgRW1haWw6IGtlbnlvbi5jLm5vcnNldGhATC0zY29tLmNvbQorICAgICAgICAgUG9zdGFsOiA2NDAgTi4gMjIwMCBXZXN0LgorICAgICAgICAgICAgICAgICBTYWx0IExha2UgQ2l0eSwgVXRhaCA4NDExNi0wODUwCisKKyAgICAgICAgICAgICAgICAgTGVzIEJlbGwgKEVkaXRvcikKKyAgICAgICAgICAgICAgICAgM0NvbSBFdXJvcGUgTGltaXRlZAorICAgICAgICAgIFBob25lOiArNDQgMTQ0MiA0MzgwMjUKKyAgICAgICAgICBFbWFpbDogZWxiZWxsQG50bHdvcmxkLmNvbQorICAgICAgICAgUG9zdGFsOiAzQ29tIENlbnRyZSwgQm91bmRhcnkgV2F5CisgICAgICAgICAgICAgICAgIEhlbWVsIEhlbXBzdGVhZAorICAgICAgICAgICAgICAgICBIZXJ0cy4gIEhQMiA3WVUKKyAgICAgICAgICAgICAgICAgVUsKKworICAgICAgICAgU2VuZCBjb21tZW50cyB0byA8YnJpZGdlLW1pYkBpZXRmLm9yZz4iCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBCcmlkZ2UgTUlCIG1vZHVsZSBmb3IgbWFuYWdpbmcgZGV2aWNlcyB0aGF0IHN1cHBvcnQKKyAgICAgICAgSUVFRSA4MDIuMUQuCisKKyAgICAgICAgQ29weXJpZ2h0IChDKSBUaGUgSW50ZXJuZXQgU29jaWV0eSAoMjAwNSkuICBUaGlzIHZlcnNpb24gb2YKKyAgICAgICAgdGhpcyBNSUIgbW9kdWxlIGlzIHBhcnQgb2YgUkZDIDQxODg7IHNlZSB0aGUgUkZDIGl0c2VsZiBmb3IKKyAgICAgICAgZnVsbCBsZWdhbCBub3RpY2VzLiIKKyAgICBSRVZJU0lPTiAgICAgIjIwMDUwOTE5MDAwMFoiCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgICJUaGlyZCByZXZpc2lvbiwgcHVibGlzaGVkIGFzIHBhcnQgb2YgUkZDIDQxODguCisKKyAgICAgICAgIFRoZSBNSUIgbW9kdWxlIGhhcyBiZWVuIGNvbnZlcnRlZCB0byBTTUl2MiBmb3JtYXQuCisgICAgICAgICBDb25mb3JtYW5jZSBzdGF0ZW1lbnRzIGhhdmUgYmVlbiBhZGRlZCBhbmQgc29tZQorICAgICAgICAgZGVzY3JpcHRpb24gYW5kIHJlZmVyZW5jZSBjbGF1c2VzIGhhdmUgYmVlbiB1cGRhdGVkLgorCisgICAgICAgICBUaGUgb2JqZWN0IGRvdDFkU3RwUG9ydFBhdGhDb3N0MzIgd2FzIGFkZGVkIHRvCisgICAgICAgICBzdXBwb3J0IElFRUUgODAyLjF0IGFuZCB0aGUgcGVybWlzc2libGUgdmFsdWVzIG9mCisgICAgICAgICBkb3QxZFN0cFByaW9yaXR5IGFuZCBkb3QxZFN0cFBvcnRQcmlvcml0eSBoYXZlIGJlZW4KKyAgICAgICAgIGNsYXJpZmllZCBmb3IgYnJpZGdlcyBzdXBwb3J0aW5nIElFRUUgODAyLjF0IG9yCisgICAgICAgICBJRUVFIDgwMi4xdy4KKworICAgICAgICAgVGhlIGludGVycHJldGF0aW9uIG9mIGRvdDFkU3RwVGltZVNpbmNlVG9wb2xvZ3lDaGFuZ2UKKyAgICAgICAgIGhhcyBiZWVuIGNsYXJpZmllZCBmb3IgYnJpZGdlcyBzdXBwb3J0aW5nIHRoZSBSYXBpZAorICAgICAgICAgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbCAoUlNUUCkuIgorICAgIFJFVklTSU9OICAgICAiMTk5MzA3MzEwMDAwWiIKKyAgICBERVNDUklQVElPTgorICAgICAgICAgIlNlY29uZCByZXZpc2lvbiwgcHVibGlzaGVkIGFzIHBhcnQgb2YgUkZDIDE0OTMuIgorICAgIFJFVklTSU9OICAgICAiMTk5MTEyMzEwMDAwWiIKKyAgICBERVNDUklQVElPTgorICAgICAgICAgIkluaXRpYWwgcmV2aXNpb24sIHB1Ymxpc2hlZCBhcyBwYXJ0IG9mIFJGQyAxMjg2LiIKKyAgICA6Oj0geyBtaWItMiAxNyB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIFRleHR1YWwgQ29udmVudGlvbnMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworQnJpZGdlSWQgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIEJyaWRnZS1JZGVudGlmaWVyLCBhcyB1c2VkIGluIHRoZSBTcGFubmluZyBUcmVlCisgICAgICAgIFByb3RvY29sLCB0byB1bmlxdWVseSBpZGVudGlmeSBhIGJyaWRnZS4gIEl0cyBmaXJzdCB0d28KKyAgICAgICAgb2N0ZXRzIChpbiBuZXR3b3JrIGJ5dGUgb3JkZXIpIGNvbnRhaW4gYSBwcmlvcml0eSB2YWx1ZSwKKyAgICAgICAgYW5kIGl0cyBsYXN0IDYgb2N0ZXRzIGNvbnRhaW4gdGhlIE1BQyBhZGRyZXNzIHVzZWQgdG8KKyAgICAgICAgcmVmZXIgdG8gYSBicmlkZ2UgaW4gYSB1bmlxdWUgZmFzaGlvbiAodHlwaWNhbGx5LCB0aGUKKyAgICAgICAgbnVtZXJpY2FsbHkgc21hbGxlc3QgTUFDIGFkZHJlc3Mgb2YgYWxsIHBvcnRzIG9uIHRoZQorICAgICAgICBicmlkZ2UpLiIKKyAgICBTWU5UQVggICAgICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDgpKQorCitUaW1lb3V0IDo6PSBURVhUVUFMLUNPTlZFTlRJT04KKyAgICBESVNQTEFZLUhJTlQgImQiCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wgKFNUUCkgdGltZXIgaW4gdW5pdHMgb2YgMS8xMDAKKyAgICAgICAgc2Vjb25kcy4gIFNldmVyYWwgb2JqZWN0cyBpbiB0aGlzIE1JQiBtb2R1bGUgcmVwcmVzZW50CisgICAgICAgIHZhbHVlcyBvZiB0aW1lcnMgdXNlZCBieSB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbC4KKyAgICAgICAgSW4gdGhpcyBNSUIsIHRoZXNlIHRpbWVycyBoYXZlIHZhbHVlcyBpbiB1bml0cyBvZgorICAgICAgICBodW5kcmVkdGhzIG9mIGEgc2Vjb25kIChpLmUuLCAxLzEwMCBzZWNzKS4KKworICAgICAgICBUaGVzZSB0aW1lcnMsIHdoZW4gc3RvcmVkIGluIGEgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbCdzCisgICAgICAgIEJQRFUsIGFyZSBpbiB1bml0cyBvZiAxLzI1NiBzZWNvbmRzLiAgTm90ZSwgaG93ZXZlciwgdGhhdAorICAgICAgICA4MDIuMUQtMTk5OCBzcGVjaWZpZXMgYSBzZXR0YWJsZSBncmFudWxhcml0eSBvZiBubyBtb3JlCisgICAgICAgIHRoYW4gb25lIHNlY29uZCBmb3IgdGhlc2UgdGltZXJzLiAgVG8gYXZvaWQgYW1iaWd1aXR5LAorICAgICAgICBhIGNvbnZlcnNpb24gYWxnb3JpdGhtIGlzIGRlZmluZWQgYmVsb3cgZm9yIGNvbnZlcnRpbmcKKyAgICAgICAgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHVuaXRzLCB3aGljaCBlbnN1cmVzIGEgdGltZXIncworICAgICAgICB2YWx1ZSBpcyBub3QgZGlzdG9ydGVkIGJ5IG11bHRpcGxlIGNvbnZlcnNpb25zLgorCisgICAgICAgIFRvIGNvbnZlcnQgYSBUaW1lb3V0IHZhbHVlIGludG8gYSB2YWx1ZSBpbiB1bml0cyBvZgorICAgICAgICAxLzI1NiBzZWNvbmRzLCB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSBzaG91bGQgYmUgdXNlZDoKKworICAgICAgICAgICAgYiA9IGZsb29yKCAobiAqIDI1NikgLyAxMDApCisKKyAgICAgICAgd2hlcmU6CisgICAgICAgICAgICBmbG9vciAgID0gIHF1b3RpZW50IFtpZ25vcmUgcmVtYWluZGVyXQorICAgICAgICAgICAgbiBpcyB0aGUgdmFsdWUgaW4gMS8xMDAgc2Vjb25kIHVuaXRzCisgICAgICAgICAgICBiIGlzIHRoZSB2YWx1ZSBpbiAxLzI1NiBzZWNvbmQgdW5pdHMKKworICAgICAgICBUbyBjb252ZXJ0IHRoZSB2YWx1ZSBmcm9tIDEvMjU2IHNlY29uZCB1bml0cyBiYWNrIHRvCisgICAgICAgIDEvMTAwIHNlY29uZHMsIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIHNob3VsZCBiZSB1c2VkOgorCisgICAgICAgICAgICBuID0gY2VpbGluZyggKGIgKiAxMDApIC8gMjU2KQorCisgICAgICAgIHdoZXJlOgorICAgICAgICAgICAgY2VpbGluZyA9IHF1b3RpZW50IFtpZiByZW1haW5kZXIgaXMgMF0sIG9yCisgICAgICAgICAgICAgICAgICAgICAgcXVvdGllbnQgKyAxIFtpZiByZW1haW5kZXIgaXMgbm9uemVyb10KKyAgICAgICAgICAgIG4gaXMgdGhlIHZhbHVlIGluIDEvMTAwIHNlY29uZCB1bml0cworCisgICAgICAgICAgICBiIGlzIHRoZSB2YWx1ZSBpbiAxLzI1NiBzZWNvbmQgdW5pdHMKKworICAgICAgICBOb3RlOiBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGFyZQorICAgICAgICBkb25lIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgKGkuZS4sIG11bHRpcGx5IGZpcnN0LAorICAgICAgICBkaXZpZGUgc2Vjb25kKS4iCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHN1YnRyZWVzIGluIHRoZSBCcmlkZ2UgTUlCCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkTm90aWZpY2F0aW9ucyAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRCcmlkZ2UgMCB9CisKK2RvdDFkQmFzZSAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRCcmlkZ2UgMSB9Citkb3QxZFN0cCAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQnJpZGdlIDIgfQorCitkb3QxZFNyICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQnJpZGdlIDMgfQorLS0gZG9jdW1lbnRlZCBpbiBSRkMgMTUyNQorCitkb3QxZFRwICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQnJpZGdlIDQgfQorZG90MWRTdGF0aWMgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZEJyaWRnZSA1IH0KKworLS0gU3VidHJlZXMgdXNlZCBieSBCcmlkZ2UgTUlCIEV4dGVuc2lvbnM6CistLSAgICAgIHBCcmlkZ2VNSUIgIE1PRFVMRS1JREVOVElUWSAgIDo6PSB7IGRvdDFkQnJpZGdlIDYgfQorLS0gICAgICBxQnJpZGdlTUlCICBNT0RVTEUtSURFTlRJVFkgICA6Oj0geyBkb3QxZEJyaWRnZSA3IH0KKy0tIE5vdGUgdGhhdCB0aGUgcHJhY3RpY2Ugb2YgcmVnaXN0ZXJpbmcgcmVsYXRlZCBNSUIgbW9kdWxlcworLS0gYmVsb3cgZG90MWRCcmlkZ2UgaGFzIGJlZW4gZGlzY291cmFnZWQgc2luY2UgdGhlcmUgaXMgbm8KKy0tIHJvYnVzdCBtZWNoYW5pc20gdG8gdHJhY2sgc3VjaCByZWdpc3RyYXRpb25zLgorCitkb3QxZENvbmZvcm1hbmNlICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQnJpZGdlIDggfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSB0aGUgZG90MWRCYXNlIHN1YnRyZWUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkb3QxZEJhc2Ugc3VidHJlZSBpcyBtYW5kYXRvcnkgZm9yIGFsbAorLS0gYnJpZGdlcy4KKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRCYXNlQnJpZGdlQWRkcmVzcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIE1hY0FkZHJlc3MKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBNQUMgYWRkcmVzcyB1c2VkIGJ5IHRoaXMgYnJpZGdlIHdoZW4gaXQgbXVzdCBiZQorICAgICAgICByZWZlcnJlZCB0byBpbiBhIHVuaXF1ZSBmYXNoaW9uLiAgSXQgaXMgcmVjb21tZW5kZWQKKyAgICAgICAgdGhhdCB0aGlzIGJlIHRoZSBudW1lcmljYWxseSBzbWFsbGVzdCBNQUMgYWRkcmVzcyBvZgorICAgICAgICBhbGwgcG9ydHMgdGhhdCBiZWxvbmcgdG8gdGhpcyBicmlkZ2UuICBIb3dldmVyLCBpdCBpcyBvbmx5CisKKyAgICAgICAgcmVxdWlyZWQgdG8gYmUgdW5pcXVlLiAgV2hlbiBjb25jYXRlbmF0ZWQgd2l0aAorICAgICAgICBkb3QxZFN0cFByaW9yaXR5LCBhIHVuaXF1ZSBCcmlkZ2VJZGVudGlmaWVyIGlzIGZvcm1lZCwKKyAgICAgICAgd2hpY2ggaXMgdXNlZCBpbiB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2VzIDE0LjQuMS4xLjMgYW5kIDcuMTIuNSIKKyAgICA6Oj0geyBkb3QxZEJhc2UgMSB9CisKK2RvdDFkQmFzZU51bVBvcnRzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisgICAgVU5JVFMgICAgICAgInBvcnRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiBwb3J0cyBjb250cm9sbGVkIGJ5IHRoaXMgYnJpZGdpbmcKKyAgICAgICAgZW50aXR5LiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC40LjEuMS4zIgorICAgIDo6PSB7IGRvdDFkQmFzZSAyIH0KKworZG90MWRCYXNlVHlwZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIElOVEVHRVIgeworICAgICAgICAgICAgICAgICAgICB1bmtub3duKDEpLAorICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudC1vbmx5KDIpLAorICAgICAgICAgICAgICAgICAgICBzb3VyY2Vyb3V0ZS1vbmx5KDMpLAorICAgICAgICAgICAgICAgICAgICBzcnQoNCkKKyAgICAgICAgICAgICAgICB9CisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbmRpY2F0ZXMgd2hhdCB0eXBlIG9mIGJyaWRnaW5nIHRoaXMgYnJpZGdlIGNhbgorICAgICAgICBwZXJmb3JtLiAgSWYgYSBicmlkZ2UgaXMgYWN0dWFsbHkgcGVyZm9ybWluZyBhCisgICAgICAgIGNlcnRhaW4gdHlwZSBvZiBicmlkZ2luZywgdGhpcyB3aWxsIGJlIGluZGljYXRlZCBieQorICAgICAgICBlbnRyaWVzIGluIHRoZSBwb3J0IHRhYmxlIGZvciB0aGUgZ2l2ZW4gdHlwZS4iCisgICAgOjo9IHsgZG90MWRCYXNlIDMgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBUaGUgR2VuZXJpYyBCcmlkZ2UgUG9ydCBUYWJsZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorZG90MWRCYXNlUG9ydFRhYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgRG90MWRCYXNlUG9ydEVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgdGFibGUgdGhhdCBjb250YWlucyBnZW5lcmljIGluZm9ybWF0aW9uIGFib3V0IGV2ZXJ5CisgICAgICAgIHBvcnQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBicmlkZ2UuICBUcmFuc3BhcmVudCwKKyAgICAgICAgc291cmNlLXJvdXRlLCBhbmQgc3J0IHBvcnRzIGFyZSBpbmNsdWRlZC4iCisgICAgOjo9IHsgZG90MWRCYXNlIDQgfQorCitkb3QxZEJhc2VQb3J0RW50cnkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBEb3QxZEJhc2VQb3J0RW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBsaXN0IG9mIGluZm9ybWF0aW9uIGZvciBlYWNoIHBvcnQgb2YgdGhlIGJyaWRnZS4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNC4yLCAxNC42LjEiCisgICAgSU5ERVggIHsgZG90MWRCYXNlUG9ydCB9CisgICAgOjo9IHsgZG90MWRCYXNlUG9ydFRhYmxlIDEgfQorCitEb3QxZEJhc2VQb3J0RW50cnkgOjo9CisgICAgU0VRVUVOQ0UgeworICAgICAgICBkb3QxZEJhc2VQb3J0CisgICAgICAgICAgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkQmFzZVBvcnRJZkluZGV4CisgICAgICAgICAgICBJbnRlcmZhY2VJbmRleCwKKyAgICAgICAgZG90MWRCYXNlUG9ydENpcmN1aXQKKyAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSLAorICAgICAgICBkb3QxZEJhc2VQb3J0RGVsYXlFeGNlZWRlZERpc2NhcmRzCisgICAgICAgICAgICBDb3VudGVyMzIsCisgICAgICAgIGRvdDFkQmFzZVBvcnRNdHVFeGNlZWRlZERpc2NhcmRzCisgICAgICAgICAgICBDb3VudGVyMzIKKyAgICB9CisKK2RvdDFkQmFzZVBvcnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDEuLjY1NTM1KQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwb3J0IGZvciB3aGljaCB0aGlzIGVudHJ5CisgICAgICAgIGNvbnRhaW5zIGJyaWRnZSBtYW5hZ2VtZW50IGluZm9ybWF0aW9uLiIKKyAgICA6Oj0geyBkb3QxZEJhc2VQb3J0RW50cnkgMSB9CisKK2RvdDFkQmFzZVBvcnRJZkluZGV4IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZXJmYWNlSW5kZXgKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2Ugb2YgdGhlIGlmSW5kZXggb2JqZWN0LAorICAgICAgICBkZWZpbmVkIGluIElGLU1JQiwgZm9yIHRoZSBpbnRlcmZhY2UgY29ycmVzcG9uZGluZworICAgICAgICB0byB0aGlzIHBvcnQuIgorICAgIDo6PSB7IGRvdDFkQmFzZVBvcnRFbnRyeSAyIH0KKworZG90MWRCYXNlUG9ydENpcmN1aXQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBPQkpFQ1QgSURFTlRJRklFUgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiRm9yIGEgcG9ydCB0aGF0IChwb3RlbnRpYWxseSkgaGFzIHRoZSBzYW1lIHZhbHVlIG9mCisgICAgICAgIGRvdDFkQmFzZVBvcnRJZkluZGV4IGFzIGFub3RoZXIgcG9ydCBvbiB0aGUgc2FtZSBicmlkZ2UuCisgICAgICAgIFRoaXMgb2JqZWN0IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFuIG9iamVjdCBpbnN0YW5jZQorICAgICAgICB1bmlxdWUgdG8gdGhpcyBwb3J0LiAgRm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlIHdoZXJlCisgICAgICAgIG11bHRpcGxlIHBvcnRzIGNvcnJlc3BvbmQgb25lLXRvLW9uZSB3aXRoIG11bHRpcGxlIFguMjUKKyAgICAgICAgdmlydHVhbCBjaXJjdWl0cywgdGhpcyB2YWx1ZSBtaWdodCBpZGVudGlmeSBhbiAoZS5nLiwKKyAgICAgICAgdGhlIGZpcnN0KSBvYmplY3QgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBYLjI1CisgICAgICAgIHZpcnR1YWwgY2lyY3VpdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcG9ydC4KKworICAgICAgICBGb3IgYSBwb3J0IHdoaWNoIGhhcyBhIHVuaXF1ZSB2YWx1ZSBvZgorICAgICAgICBkb3QxZEJhc2VQb3J0SWZJbmRleCwgdGhpcyBvYmplY3QgY2FuIGhhdmUgdGhlIHZhbHVlCisgICAgICAgIHsgMCAwIH0uIgorICAgIDo6PSB7IGRvdDFkQmFzZVBvcnRFbnRyeSAzIH0KKworZG90MWRCYXNlUG9ydERlbGF5RXhjZWVkZWREaXNjYXJkcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoaXMgcG9ydCBkdWUKKyAgICAgICAgdG8gZXhjZXNzaXZlIHRyYW5zaXQgZGVsYXkgdGhyb3VnaCB0aGUgYnJpZGdlLiAgSXQKKyAgICAgICAgaXMgaW5jcmVtZW50ZWQgYnkgYm90aCB0cmFuc3BhcmVudCBhbmQgc291cmNlCisgICAgICAgIHJvdXRlIGJyaWRnZXMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjYuMS4xLjMiCisgICAgOjo9IHsgZG90MWRCYXNlUG9ydEVudHJ5IDQgfQorCitkb3QxZEJhc2VQb3J0TXR1RXhjZWVkZWREaXNjYXJkcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoaXMgcG9ydCBkdWUKKyAgICAgICAgdG8gYW4gZXhjZXNzaXZlIHNpemUuICBJdCBpcyBpbmNyZW1lbnRlZCBieSBib3RoCisgICAgICAgIHRyYW5zcGFyZW50IGFuZCBzb3VyY2Ugcm91dGUgYnJpZGdlcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNi4xLjEuMyIKKyAgICA6Oj0geyBkb3QxZEJhc2VQb3J0RW50cnkgNSB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHRoZSBkb3QxZFN0cCBzdWJ0cmVlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG90MWRTdHAgc3VidHJlZSBpcyBvcHRpb25hbC4gIEl0IGlzCistLSBpbXBsZW1lbnRlZCBieSB0aG9zZSBicmlkZ2VzIHRoYXQgc3VwcG9ydCB0aGUgU3Bhbm5pbmcgVHJlZQorLS0gUHJvdG9jb2wuCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkU3RwUHJvdG9jb2xTcGVjaWZpY2F0aW9uIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSU5URUdFUiB7CisgICAgICAgICAgICAgICAgICAgIHVua25vd24oMSksCisgICAgICAgICAgICAgICAgICAgIGRlY0xiMTAwKDIpLAorICAgICAgICAgICAgICAgICAgICBpZWVlODAyMWQoMykKKyAgICAgICAgICAgICAgICB9CisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBbiBpbmRpY2F0aW9uIG9mIHdoYXQgdmVyc2lvbiBvZiB0aGUgU3Bhbm5pbmcgVHJlZQorICAgICAgICBQcm90b2NvbCBpcyBiZWluZyBydW4uICBUaGUgdmFsdWUgJ2RlY0xiMTAwKDIpJworICAgICAgICBpbmRpY2F0ZXMgdGhlIERFQyBMQU5icmlkZ2UgMTAwIFNwYW5uaW5nIFRyZWUgcHJvdG9jb2wuCisgICAgICAgIElFRUUgODAyLjFEIGltcGxlbWVudGF0aW9ucyB3aWxsIHJldHVybiAnaWVlZTgwMjFkKDMpJy4KKyAgICAgICAgSWYgZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBJRUVFIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wKKyAgICAgICAgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbgorICAgICAgICBhcmUgcmVsZWFzZWQgYSBuZXcgdmFsdWUgd2lsbCBiZSBkZWZpbmVkLiIKKyAgICA6Oj0geyBkb3QxZFN0cCAxIH0KKworZG90MWRTdHBQcmlvcml0eSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMC4uNjU1MzUpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIG9mIHRoZSB3cml0ZS1hYmxlIHBvcnRpb24gb2YgdGhlIEJyaWRnZSBJRAorICAgICAgICAoaS5lLiwgdGhlIGZpcnN0IHR3byBvY3RldHMgb2YgdGhlICg4IG9jdGV0IGxvbmcpIEJyaWRnZQorICAgICAgICBJRCkuICBUaGUgb3RoZXIgKGxhc3QpIDYgb2N0ZXRzIG9mIHRoZSBCcmlkZ2UgSUQgYXJlCisgICAgICAgIGdpdmVuIGJ5IHRoZSB2YWx1ZSBvZiBkb3QxZEJhc2VCcmlkZ2VBZGRyZXNzLgorICAgICAgICBPbiBicmlkZ2VzIHN1cHBvcnRpbmcgSUVFRSA4MDIuMXQgb3IgSUVFRSA4MDIuMXcsCisgICAgICAgIHBlcm1pc3NpYmxlIHZhbHVlcyBhcmUgMC02MTQ0MCwgaW4gc3RlcHMgb2YgNDA5Ni4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4IGNsYXVzZSA4LjEwLjIsIFRhYmxlIDgtNCwKKyAgICAgICAgSUVFRSA4MDIuMXQgY2xhdXNlIDguMTAuMiwgVGFibGUgOC00LCBjbGF1c2UgMTQuMy4iCisgICAgOjo9IHsgZG90MWRTdHAgMiB9CisKK2RvdDFkU3RwVGltZVNpbmNlVG9wb2xvZ3lDaGFuZ2UgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lVGlja3MKKyAgICBVTklUUyAgICAgICAiY2VudGktc2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB0aW1lIChpbiBodW5kcmVkdGhzIG9mIGEgc2Vjb25kKSBzaW5jZSB0aGUKKyAgICAgICAgbGFzdCB0aW1lIGEgdG9wb2xvZ3kgY2hhbmdlIHdhcyBkZXRlY3RlZCBieSB0aGUKKyAgICAgICAgYnJpZGdlIGVudGl0eS4KKyAgICAgICAgRm9yIFJTVFAsIHRoaXMgcmVwb3J0cyB0aGUgdGltZSBzaW5jZSB0aGUgdGNXaGlsZQorICAgICAgICB0aW1lciBmb3IgYW55IHBvcnQgb24gdGhpcyBCcmlkZ2Ugd2FzIG5vbnplcm8uIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5OCBjbGF1c2UgMTQuOC4xLjEuLAorICAgICAgICBJRUVFIDgwMi4xdyBjbGF1c2UgMTQuOC4xLjEuIgorICAgIDo6PSB7IGRvdDFkU3RwIDMgfQorCitkb3QxZFN0cFRvcENoYW5nZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB0b3RhbCBudW1iZXIgb2YgdG9wb2xvZ3kgY2hhbmdlcyBkZXRlY3RlZCBieQorICAgICAgICB0aGlzIGJyaWRnZSBzaW5jZSB0aGUgbWFuYWdlbWVudCBlbnRpdHkgd2FzIGxhc3QKKyAgICAgICAgcmVzZXQgb3IgaW5pdGlhbGl6ZWQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5OCBjbGF1c2UgMTQuOC4xLjEuIgorICAgIDo6PSB7IGRvdDFkU3RwIDQgfQorCitkb3QxZFN0cERlc2lnbmF0ZWRSb290IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQnJpZGdlSWQKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBicmlkZ2UgaWRlbnRpZmllciBvZiB0aGUgcm9vdCBvZiB0aGUgc3Bhbm5pbmcKKyAgICAgICAgdHJlZSwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbCwKKyAgICAgICAgYXMgZXhlY3V0ZWQgYnkgdGhpcyBub2RlLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGFzCisgICAgICAgIHRoZSBSb290IElkZW50aWZpZXIgcGFyYW1ldGVyIGluIGFsbCBDb25maWd1cmF0aW9uCisgICAgICAgIEJyaWRnZSBQRFVzIG9yaWdpbmF0ZWQgYnkgdGhpcyBub2RlLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy4xIgorICAgIDo6PSB7IGRvdDFkU3RwIDUgfQorCitkb3QxZFN0cFJvb3RDb3N0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgY29zdCBvZiB0aGUgcGF0aCB0byB0aGUgcm9vdCBhcyBzZWVuIGZyb20KKyAgICAgICAgdGhpcyBicmlkZ2UuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjIiCisgICAgOjo9IHsgZG90MWRTdHAgNiB9CisKK2RvdDFkU3RwUm9vdFBvcnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBwb3J0IG51bWJlciBvZiB0aGUgcG9ydCB0aGF0IG9mZmVycyB0aGUgbG93ZXN0CisgICAgICAgIGNvc3QgcGF0aCBmcm9tIHRoaXMgYnJpZGdlIHRvIHRoZSByb290IGJyaWRnZS4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuMyIKKyAgICA6Oj0geyBkb3QxZFN0cCA3IH0KKworZG90MWRTdHBNYXhBZ2UgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lb3V0CisgICAgVU5JVFMgICAgICAgImNlbnRpLXNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbWF4aW11bSBhZ2Ugb2YgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbCBpbmZvcm1hdGlvbgorICAgICAgICBsZWFybmVkIGZyb20gdGhlIG5ldHdvcmsgb24gYW55IHBvcnQgYmVmb3JlIGl0IGlzCisgICAgICAgIGRpc2NhcmRlZCwgaW4gdW5pdHMgb2YgaHVuZHJlZHRocyBvZiBhIHNlY29uZC4gIFRoaXMgaXMKKyAgICAgICAgdGhlIGFjdHVhbCB2YWx1ZSB0aGF0IHRoaXMgYnJpZGdlIGlzIGN1cnJlbnRseSB1c2luZy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuNCIKKyAgICA6Oj0geyBkb3QxZFN0cCA4IH0KKworZG90MWRTdHBIZWxsb1RpbWUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lb3V0CisgICAgVU5JVFMgICAgICAgImNlbnRpLXNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0aGUgdHJhbnNtaXNzaW9uIG9mCisgICAgICAgIENvbmZpZ3VyYXRpb24gYnJpZGdlIFBEVXMgYnkgdGhpcyBub2RlIG9uIGFueSBwb3J0IHdoZW4KKyAgICAgICAgaXQgaXMgdGhlIHJvb3Qgb2YgdGhlIHNwYW5uaW5nIHRyZWUsIG9yIHRyeWluZyB0byBiZWNvbWUKKyAgICAgICAgc28sIGluIHVuaXRzIG9mIGh1bmRyZWR0aHMgb2YgYSBzZWNvbmQuICBUaGlzIGlzIHRoZQorICAgICAgICBhY3R1YWwgdmFsdWUgdGhhdCB0aGlzIGJyaWRnZSBpcyBjdXJyZW50bHkgdXNpbmcuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjUiCisgICAgOjo9IHsgZG90MWRTdHAgOSB9CisKK2RvdDFkU3RwSG9sZFRpbWUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKyAgICBVTklUUyAgICAgICAiY2VudGktc2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoaXMgdGltZSB2YWx1ZSBkZXRlcm1pbmVzIHRoZSBpbnRlcnZhbCBsZW5ndGgKKyAgICAgICAgZHVyaW5nIHdoaWNoIG5vIG1vcmUgdGhhbiB0d28gQ29uZmlndXJhdGlvbiBicmlkZ2UKKyAgICAgICAgUERVcyBzaGFsbCBiZSB0cmFuc21pdHRlZCBieSB0aGlzIG5vZGUsIGluIHVuaXRzCisgICAgICAgIG9mIGh1bmRyZWR0aHMgb2YgYSBzZWNvbmQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjE0IgorICAgIDo6PSB7IGRvdDFkU3RwIDEwIH0KKworZG90MWRTdHBGb3J3YXJkRGVsYXkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lb3V0CisgICAgVU5JVFMgICAgICAgImNlbnRpLXNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGlzIHRpbWUgdmFsdWUsIG1lYXN1cmVkIGluIHVuaXRzIG9mIGh1bmRyZWR0aHMgb2YgYQorICAgICAgICBzZWNvbmQsIGNvbnRyb2xzIGhvdyBmYXN0IGEgcG9ydCBjaGFuZ2VzIGl0cyBzcGFubmluZworICAgICAgICBzdGF0ZSB3aGVuIG1vdmluZyB0b3dhcmRzIHRoZSBGb3J3YXJkaW5nIHN0YXRlLiAgVGhlCisgICAgICAgIHZhbHVlIGRldGVybWluZXMgaG93IGxvbmcgdGhlIHBvcnQgc3RheXMgaW4gZWFjaCBvZiB0aGUKKyAgICAgICAgTGlzdGVuaW5nIGFuZCBMZWFybmluZyBzdGF0ZXMsIHdoaWNoIHByZWNlZGUgdGhlCisgICAgICAgIEZvcndhcmRpbmcgc3RhdGUuICBUaGlzIHZhbHVlIGlzIGFsc28gdXNlZCB3aGVuIGEKKyAgICAgICAgdG9wb2xvZ3kgY2hhbmdlIGhhcyBiZWVuIGRldGVjdGVkIGFuZCBpcyB1bmRlcndheSwgdG8KKyAgICAgICAgYWdlIGFsbCBkeW5hbWljIGVudHJpZXMgaW4gdGhlIEZvcndhcmRpbmcgRGF0YWJhc2UuCisgICAgICAgIFtOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyB0aGUgb25lIHRoYXQgdGhpcyBicmlkZ2UgaXMKKyAgICAgICAgY3VycmVudGx5IHVzaW5nLCBpbiBjb250cmFzdCB0bworICAgICAgICBkb3QxZFN0cEJyaWRnZUZvcndhcmREZWxheSwgd2hpY2ggaXMgdGhlIHZhbHVlIHRoYXQgdGhpcworICAgICAgICBicmlkZ2UgYW5kIGFsbCBvdGhlcnMgd291bGQgc3RhcnQgdXNpbmcgaWYvd2hlbiB0aGlzCisgICAgICAgIGJyaWRnZSB3ZXJlIHRvIGJlY29tZSB0aGUgcm9vdC5dIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjYiCisgICAgOjo9IHsgZG90MWRTdHAgMTEgfQorCitkb3QxZFN0cEJyaWRnZU1heEFnZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVvdXQgKDYwMC4uNDAwMCkKKyAgICBVTklUUyAgICAgICAiY2VudGktc2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgdGhhdCBhbGwgYnJpZGdlcyB1c2UgZm9yIE1heEFnZSB3aGVuIHRoaXMKKyAgICAgICAgYnJpZGdlIGlzIGFjdGluZyBhcyB0aGUgcm9vdC4gIE5vdGUgdGhhdCA4MDIuMUQtMTk5OAorICAgICAgICBzcGVjaWZpZXMgdGhhdCB0aGUgcmFuZ2UgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIHJlbGF0ZWQKKyAgICAgICAgdG8gdGhlIHZhbHVlIG9mIGRvdDFkU3RwQnJpZGdlSGVsbG9UaW1lLiAgVGhlCisgICAgICAgIGdyYW51bGFyaXR5IG9mIHRoaXMgdGltZXIgaXMgc3BlY2lmaWVkIGJ5IDgwMi4xRC0xOTk4IHRvCisgICAgICAgIGJlIDEgc2Vjb25kLiAgQW4gYWdlbnQgbWF5IHJldHVybiBhIGJhZFZhbHVlIGVycm9yIGlmIGEKKyAgICAgICAgc2V0IGlzIGF0dGVtcHRlZCB0byBhIHZhbHVlIHRoYXQgaXMgbm90IGEgd2hvbGUgbnVtYmVyCisgICAgICAgIG9mIHNlY29uZHMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjgiCisgICAgOjo9IHsgZG90MWRTdHAgMTIgfQorCitkb3QxZFN0cEJyaWRnZUhlbGxvVGltZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVvdXQgKDEwMC4uMTAwMCkKKyAgICBVTklUUyAgICAgICAiY2VudGktc2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgdGhhdCBhbGwgYnJpZGdlcyB1c2UgZm9yIEhlbGxvVGltZSB3aGVuIHRoaXMKKyAgICAgICAgYnJpZGdlIGlzIGFjdGluZyBhcyB0aGUgcm9vdC4gIFRoZSBncmFudWxhcml0eSBvZiB0aGlzCisgICAgICAgIHRpbWVyIGlzIHNwZWNpZmllZCBieSA4MDIuMUQtMTk5OCB0byBiZSAxIHNlY29uZC4gIEFuCisgICAgICAgIGFnZW50IG1heSByZXR1cm4gYSBiYWRWYWx1ZSBlcnJvciBpZiBhIHNldCBpcyBhdHRlbXB0ZWQKKworICAgICAgICB0byBhIHZhbHVlIHRoYXQgaXMgbm90IGEgd2hvbGUgbnVtYmVyIG9mIHNlY29uZHMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjkiCisgICAgOjo9IHsgZG90MWRTdHAgMTMgfQorCitkb3QxZFN0cEJyaWRnZUZvcndhcmREZWxheSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVvdXQgKDQwMC4uMzAwMCkKKyAgICBVTklUUyAgICAgICAiY2VudGktc2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgdGhhdCBhbGwgYnJpZGdlcyB1c2UgZm9yIEZvcndhcmREZWxheSB3aGVuCisgICAgICAgIHRoaXMgYnJpZGdlIGlzIGFjdGluZyBhcyB0aGUgcm9vdC4gIE5vdGUgdGhhdAorICAgICAgICA4MDIuMUQtMTk5OCBzcGVjaWZpZXMgdGhhdCB0aGUgcmFuZ2UgZm9yIHRoaXMgcGFyYW1ldGVyCisgICAgICAgIGlzIHJlbGF0ZWQgdG8gdGhlIHZhbHVlIG9mIGRvdDFkU3RwQnJpZGdlTWF4QWdlLiAgVGhlCisgICAgICAgIGdyYW51bGFyaXR5IG9mIHRoaXMgdGltZXIgaXMgc3BlY2lmaWVkIGJ5IDgwMi4xRC0xOTk4IHRvCisgICAgICAgIGJlIDEgc2Vjb25kLiAgQW4gYWdlbnQgbWF5IHJldHVybiBhIGJhZFZhbHVlIGVycm9yIGlmIGEKKyAgICAgICAgc2V0IGlzIGF0dGVtcHRlZCB0byBhIHZhbHVlIHRoYXQgaXMgbm90IGEgd2hvbGUgbnVtYmVyCisgICAgICAgIG9mIHNlY29uZHMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjEwIgorICAgIDo6PSB7IGRvdDFkU3RwIDE0IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gVGhlIFNwYW5uaW5nIFRyZWUgUG9ydCBUYWJsZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFN0cFBvcnRUYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIERvdDFkU3RwUG9ydEVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgdGFibGUgdGhhdCBjb250YWlucyBwb3J0LXNwZWNpZmljIGluZm9ybWF0aW9uCisgICAgICAgIGZvciB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbC4iCisgICAgOjo9IHsgZG90MWRTdHAgMTUgfQorCitkb3QxZFN0cFBvcnRFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIERvdDFkU3RwUG9ydEVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgbGlzdCBvZiBpbmZvcm1hdGlvbiBtYWludGFpbmVkIGJ5IGV2ZXJ5IHBvcnQgYWJvdXQKKyAgICAgICAgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wgc3RhdGUgZm9yIHRoYXQgcG9ydC4iCisgICAgSU5ERVggICB7IGRvdDFkU3RwUG9ydCB9CisgICAgOjo9IHsgZG90MWRTdHBQb3J0VGFibGUgMSB9CisKK0RvdDFkU3RwUG9ydEVudHJ5IDo6PQorICAgIFNFUVVFTkNFIHsKKworICAgICAgICBkb3QxZFN0cFBvcnQKKyAgICAgICAgICAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRTdHBQb3J0UHJpb3JpdHkKKyAgICAgICAgICAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRTdHBQb3J0U3RhdGUKKyAgICAgICAgICAgIElOVEVHRVIsCisgICAgICAgIGRvdDFkU3RwUG9ydEVuYWJsZQorICAgICAgICAgICAgSU5URUdFUiwKKyAgICAgICAgZG90MWRTdHBQb3J0UGF0aENvc3QKKyAgICAgICAgICAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZFJvb3QKKyAgICAgICAgICAgIEJyaWRnZUlkLAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkQ29zdAorICAgICAgICAgICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkQnJpZGdlCisgICAgICAgICAgICBCcmlkZ2VJZCwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZFBvcnQKKyAgICAgICAgICAgIE9DVEVUIFNUUklORywKKyAgICAgICAgZG90MWRTdHBQb3J0Rm9yd2FyZFRyYW5zaXRpb25zCisgICAgICAgICAgICBDb3VudGVyMzIsCisgICAgICAgIGRvdDFkU3RwUG9ydFBhdGhDb3N0MzIKKyAgICAgICAgICAgIEludGVnZXIzMgorICAgIH0KKworZG90MWRTdHBQb3J0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgxLi42NTUzNSkKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBwb3J0IG51bWJlciBvZiB0aGUgcG9ydCBmb3Igd2hpY2ggdGhpcyBlbnRyeQorICAgICAgICBjb250YWlucyBTcGFubmluZyBUcmVlIFByb3RvY29sIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24uIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjguMi4xLjIiCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgMSB9CisKK2RvdDFkU3RwUG9ydFByaW9yaXR5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgwLi4yNTUpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIG9mIHRoZSBwcmlvcml0eSBmaWVsZCB0aGF0IGlzIGNvbnRhaW5lZCBpbgorICAgICAgICB0aGUgZmlyc3QgKGluIG5ldHdvcmsgYnl0ZSBvcmRlcikgb2N0ZXQgb2YgdGhlICgyIG9jdGV0CisgICAgICAgIGxvbmcpIFBvcnQgSUQuICBUaGUgb3RoZXIgb2N0ZXQgb2YgdGhlIFBvcnQgSUQgaXMgZ2l2ZW4KKyAgICAgICAgYnkgdGhlIHZhbHVlIG9mIGRvdDFkU3RwUG9ydC4KKyAgICAgICAgT24gYnJpZGdlcyBzdXBwb3J0aW5nIElFRUUgODAyLjF0IG9yIElFRUUgODAyLjF3LAorICAgICAgICBwZXJtaXNzaWJsZSB2YWx1ZXMgYXJlIDAtMjQwLCBpbiBzdGVwcyBvZiAxNi4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4IGNsYXVzZSA4LjEwLjIsIFRhYmxlIDgtNCwKKyAgICAgICAgSUVFRSA4MDIuMXQgY2xhdXNlIDguMTAuMiwgVGFibGUgOC00LCBjbGF1c2UgMTQuMy4iCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgMiB9CisKK2RvdDFkU3RwUG9ydFN0YXRlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSU5URUdFUiB7CisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkKDEpLAorICAgICAgICAgICAgICAgICAgICBibG9ja2luZygyKSwKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nKDMpLAorICAgICAgICAgICAgICAgICAgICBsZWFybmluZyg0KSwKKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZGluZyg1KSwKKyAgICAgICAgICAgICAgICAgICAgYnJva2VuKDYpCisgICAgICAgICAgICAgICAgfQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHBvcnQncyBjdXJyZW50IHN0YXRlLCBhcyBkZWZpbmVkIGJ5IGFwcGxpY2F0aW9uIG9mCisgICAgICAgIHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLiAgVGhpcyBzdGF0ZSBjb250cm9scyB3aGF0CisgICAgICAgIGFjdGlvbiBhIHBvcnQgdGFrZXMgb24gcmVjZXB0aW9uIG9mIGEgZnJhbWUuICBJZiB0aGUKKyAgICAgICAgYnJpZGdlIGhhcyBkZXRlY3RlZCBhIHBvcnQgdGhhdCBpcyBtYWxmdW5jdGlvbmluZywgaXQKKyAgICAgICAgd2lsbCBwbGFjZSB0aGF0IHBvcnQgaW50byB0aGUgYnJva2VuKDYpIHN0YXRlLiAgRm9yCisgICAgICAgIHBvcnRzIHRoYXQgYXJlIGRpc2FibGVkIChzZWUgZG90MWRTdHBQb3J0RW5hYmxlKSwgdGhpcworICAgICAgICBvYmplY3Qgd2lsbCBoYXZlIGEgdmFsdWUgb2YgZGlzYWJsZWQoMSkuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS41LjIiCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgMyB9CisKK2RvdDFkU3RwUG9ydEVuYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIElOVEVHRVIgeworICAgICAgICAgICAgICAgICAgICBlbmFibGVkKDEpLAorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCgyKQorICAgICAgICAgICAgICAgIH0KKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgZW5hYmxlZC9kaXNhYmxlZCBzdGF0dXMgb2YgdGhlIHBvcnQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS41LjIiCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgNCB9CisKK2RvdDFkU3RwUG9ydFBhdGhDb3N0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgxLi42NTUzNSkKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgY29udHJpYnV0aW9uIG9mIHRoaXMgcG9ydCB0byB0aGUgcGF0aCBjb3N0IG9mCisgICAgICAgIHBhdGhzIHRvd2FyZHMgdGhlIHNwYW5uaW5nIHRyZWUgcm9vdCB3aGljaCBpbmNsdWRlCisgICAgICAgIHRoaXMgcG9ydC4gIDgwMi4xRC0xOTk4IHJlY29tbWVuZHMgdGhhdCB0aGUgZGVmYXVsdAorICAgICAgICB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBiZSBpbiBpbnZlcnNlIHByb3BvcnRpb24gdG8KKworICAgICAgICB0aGUgc3BlZWQgb2YgdGhlIGF0dGFjaGVkIExBTi4KKworICAgICAgICBOZXcgaW1wbGVtZW50YXRpb25zIHNob3VsZCBzdXBwb3J0IGRvdDFkU3RwUG9ydFBhdGhDb3N0MzIuCisgICAgICAgIElmIHRoZSBwb3J0IHBhdGggY29zdHMgZXhjZWVkcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGlzCisgICAgICAgIG9iamVjdCB0aGVuIHRoaXMgb2JqZWN0IHNob3VsZCByZXBvcnQgdGhlIG1heGltdW0gdmFsdWUsCisgICAgICAgIG5hbWVseSA2NTUzNS4gIEFwcGxpY2F0aW9ucyBzaG91bGQgdHJ5IHRvIHJlYWQgdGhlCisgICAgICAgIGRvdDFkU3RwUG9ydFBhdGhDb3N0MzIgb2JqZWN0IGlmIHRoaXMgb2JqZWN0IHJlcG9ydHMKKyAgICAgICAgdGhlIG1heGltdW0gdmFsdWUuIgorICAgIFJFRkVSRU5DRSAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS41LjMiCisgICAgICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDUgfQorCitkb3QxZFN0cFBvcnREZXNpZ25hdGVkUm9vdCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEJyaWRnZUlkCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdW5pcXVlIEJyaWRnZSBJZGVudGlmaWVyIG9mIHRoZSBCcmlkZ2UKKyAgICAgICAgcmVjb3JkZWQgYXMgdGhlIFJvb3QgaW4gdGhlIENvbmZpZ3VyYXRpb24gQlBEVXMKKyAgICAgICAgdHJhbnNtaXR0ZWQgYnkgdGhlIERlc2lnbmF0ZWQgQnJpZGdlIGZvciB0aGUKKyAgICAgICAgc2VnbWVudCB0byB3aGljaCB0aGUgcG9ydCBpcyBhdHRhY2hlZC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjUuNCIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSA2IH0KKworZG90MWRTdHBQb3J0RGVzaWduYXRlZENvc3QgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBwYXRoIGNvc3Qgb2YgdGhlIERlc2lnbmF0ZWQgUG9ydCBvZiB0aGUgc2VnbWVudAorICAgICAgICBjb25uZWN0ZWQgdG8gdGhpcyBwb3J0LiAgVGhpcyB2YWx1ZSBpcyBjb21wYXJlZCB0byB0aGUKKyAgICAgICAgUm9vdCBQYXRoIENvc3QgZmllbGQgaW4gcmVjZWl2ZWQgYnJpZGdlIFBEVXMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS41LjUiCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgNyB9CisKK2RvdDFkU3RwUG9ydERlc2lnbmF0ZWRCcmlkZ2UgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBCcmlkZ2VJZAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIEJyaWRnZSBJZGVudGlmaWVyIG9mIHRoZSBicmlkZ2UgdGhhdCB0aGlzCisgICAgICAgIHBvcnQgY29uc2lkZXJzIHRvIGJlIHRoZSBEZXNpZ25hdGVkIEJyaWRnZSBmb3IKKyAgICAgICAgdGhpcyBwb3J0J3Mgc2VnbWVudC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjUuNiIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSA4IH0KKworZG90MWRTdHBQb3J0RGVzaWduYXRlZFBvcnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIFBvcnQgSWRlbnRpZmllciBvZiB0aGUgcG9ydCBvbiB0aGUgRGVzaWduYXRlZAorICAgICAgICBCcmlkZ2UgZm9yIHRoaXMgcG9ydCdzIHNlZ21lbnQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS41LjciCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgOSB9CisKK2RvdDFkU3RwUG9ydEZvcndhcmRUcmFuc2l0aW9ucyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIHRyYW5zaXRpb25lZAorICAgICAgICBmcm9tIHRoZSBMZWFybmluZyBzdGF0ZSB0byB0aGUgRm9yd2FyZGluZyBzdGF0ZS4iCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgMTAgfQorCitkb3QxZFN0cFBvcnRQYXRoQ29zdDMyIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgxLi4yMDAwMDAwMDApCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGNvbnRyaWJ1dGlvbiBvZiB0aGlzIHBvcnQgdG8gdGhlIHBhdGggY29zdCBvZgorICAgICAgICBwYXRocyB0b3dhcmRzIHRoZSBzcGFubmluZyB0cmVlIHJvb3Qgd2hpY2ggaW5jbHVkZQorICAgICAgICB0aGlzIHBvcnQuICA4MDIuMUQtMTk5OCByZWNvbW1lbmRzIHRoYXQgdGhlIGRlZmF1bHQKKyAgICAgICAgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgYmUgaW4gaW52ZXJzZSBwcm9wb3J0aW9uIHRvCisgICAgICAgIHRoZSBzcGVlZCBvZiB0aGUgYXR0YWNoZWQgTEFOLgorCisgICAgICAgIFRoaXMgb2JqZWN0IHJlcGxhY2VzIGRvdDFkU3RwUG9ydFBhdGhDb3N0IHRvIHN1cHBvcnQKKyAgICAgICAgSUVFRSA4MDIuMXQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMXQgY2xhdXNlIDguMTAuMiwgVGFibGUgOC01LiIKKyAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSAxMSB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHRoZSBkb3QxZFRwIHN1YnRyZWUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkb3QxZFRwIHN1YnRyZWUgaXMgb3B0aW9uYWwuICBJdCBpcworLS0gaW1wbGVtZW50ZWQgYnkgdGhvc2UgYnJpZGdlcyB0aGF0IHN1cHBvcnQgdGhlIHRyYW5zcGFyZW50CistLSBicmlkZ2luZyBtb2RlLiAgQSB0cmFuc3BhcmVudCBvciBTUlQgYnJpZGdlIHdpbGwgaW1wbGVtZW50CistLSB0aGlzIHN1YnRyZWUuCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkVHBMZWFybmVkRW50cnlEaXNjYXJkcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHRvdGFsIG51bWJlciBvZiBGb3J3YXJkaW5nIERhdGFiYXNlIGVudHJpZXMgdGhhdAorICAgICAgICBoYXZlIGJlZW4gb3Igd291bGQgaGF2ZSBiZWVuIGxlYXJuZWQsIGJ1dCBoYXZlIGJlZW4KKyAgICAgICAgZGlzY2FyZGVkIGR1ZSB0byBhIGxhY2sgb2Ygc3RvcmFnZSBzcGFjZSBpbiB0aGUKKyAgICAgICAgRm9yd2FyZGluZyBEYXRhYmFzZS4gIElmIHRoaXMgY291bnRlciBpcyBpbmNyZWFzaW5nLCBpdAorICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgRm9yd2FyZGluZyBEYXRhYmFzZSBpcyByZWd1bGFybHkKKyAgICAgICAgYmVjb21pbmcgZnVsbCAoYSBjb25kaXRpb24gdGhhdCBoYXMgdW5wbGVhc2FudAorICAgICAgICBwZXJmb3JtYW5jZSBlZmZlY3RzIG9uIHRoZSBzdWJuZXR3b3JrKS4gIElmIHRoaXMgY291bnRlcgorICAgICAgICBoYXMgYSBzaWduaWZpY2FudCB2YWx1ZSBidXQgaXMgbm90IHByZXNlbnRseSBpbmNyZWFzaW5nLAorICAgICAgICBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvYmxlbSBoYXMgYmVlbiBvY2N1cnJpbmcgYnV0IGlzCisgICAgICAgIG5vdCBwZXJzaXN0ZW50LiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC43LjEuMS4zIgorICAgIDo6PSB7IGRvdDFkVHAgMSB9CisKK2RvdDFkVHBBZ2luZ1RpbWUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDEwLi4xMDAwMDAwKQorICAgIFVOSVRTICAgICAgICJzZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB0aW1lb3V0IHBlcmlvZCBpbiBzZWNvbmRzIGZvciBhZ2luZyBvdXQKKyAgICAgICAgZHluYW1pY2FsbHktbGVhcm5lZCBmb3J3YXJkaW5nIGluZm9ybWF0aW9uLgorICAgICAgICA4MDIuMUQtMTk5OCByZWNvbW1lbmRzIGEgZGVmYXVsdCBvZiAzMDAgc2Vjb25kcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNy4xLjEuMyIKKyAgICA6Oj0geyBkb3QxZFRwIDIgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSAgVGhlIEZvcndhcmRpbmcgRGF0YWJhc2UgZm9yIFRyYW5zcGFyZW50IEJyaWRnZXMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRUcEZkYlRhYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgRG90MWRUcEZkYkVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgdGFibGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB1bmljYXN0CisgICAgICAgIGVudHJpZXMgZm9yIHdoaWNoIHRoZSBicmlkZ2UgaGFzIGZvcndhcmRpbmcgYW5kL29yCisgICAgICAgIGZpbHRlcmluZyBpbmZvcm1hdGlvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZAorICAgICAgICBieSB0aGUgdHJhbnNwYXJlbnQgYnJpZGdpbmcgZnVuY3Rpb24gaW4KKyAgICAgICAgZGV0ZXJtaW5pbmcgaG93IHRvIHByb3BhZ2F0ZSBhIHJlY2VpdmVkIGZyYW1lLiIKKyAgICA6Oj0geyBkb3QxZFRwIDMgfQorCitkb3QxZFRwRmRiRW50cnkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBEb3QxZFRwRmRiRW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyB1bmljYXN0IE1BQyBhZGRyZXNzCisgICAgICAgIGZvciB3aGljaCB0aGUgYnJpZGdlIGhhcyBzb21lIGZvcndhcmRpbmcgYW5kL29yCisgICAgICAgIGZpbHRlcmluZyBpbmZvcm1hdGlvbi4iCisgICAgSU5ERVggICB7IGRvdDFkVHBGZGJBZGRyZXNzIH0KKyAgICA6Oj0geyBkb3QxZFRwRmRiVGFibGUgMSB9CisKK0RvdDFkVHBGZGJFbnRyeSA6Oj0KKyAgICBTRVFVRU5DRSB7CisgICAgICAgIGRvdDFkVHBGZGJBZGRyZXNzCisgICAgICAgICAgICBNYWNBZGRyZXNzLAorICAgICAgICBkb3QxZFRwRmRiUG9ydAorICAgICAgICAgICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZFRwRmRiU3RhdHVzCisgICAgICAgICAgICBJTlRFR0VSCisgICAgfQorCitkb3QxZFRwRmRiQWRkcmVzcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIE1hY0FkZHJlc3MKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgdW5pY2FzdCBNQUMgYWRkcmVzcyBmb3Igd2hpY2ggdGhlIGJyaWRnZSBoYXMKKyAgICAgICAgZm9yd2FyZGluZyBhbmQvb3IgZmlsdGVyaW5nIGluZm9ybWF0aW9uLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA3LjkuMSwgNy45LjIiCisgICAgOjo9IHsgZG90MWRUcEZkYkVudHJ5IDEgfQorCitkb3QxZFRwRmRiUG9ydCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiRWl0aGVyIHRoZSB2YWx1ZSAnMCcsIG9yIHRoZSBwb3J0IG51bWJlciBvZiB0aGUgcG9ydCBvbgorICAgICAgICB3aGljaCBhIGZyYW1lIGhhdmluZyBhIHNvdXJjZSBhZGRyZXNzIGVxdWFsIHRvIHRoZSB2YWx1ZQorICAgICAgICBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZiBkb3QxZFRwRmRiQWRkcmVzcyBoYXMKKyAgICAgICAgYmVlbiBzZWVuLiAgQSB2YWx1ZSBvZiAnMCcgaW5kaWNhdGVzIHRoYXQgdGhlIHBvcnQKKyAgICAgICAgbnVtYmVyIGhhcyBub3QgYmVlbiBsZWFybmVkLCBidXQgdGhhdCB0aGUgYnJpZGdlIGRvZXMKKyAgICAgICAgaGF2ZSBzb21lIGZvcndhcmRpbmcvZmlsdGVyaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKKyAgICAgICAgYWRkcmVzcyAoZS5nLiwgaW4gdGhlIGRvdDFkU3RhdGljVGFibGUpLiAgSW1wbGVtZW50b3JzCisgICAgICAgIGFyZSBlbmNvdXJhZ2VkIHRvIGFzc2lnbiB0aGUgcG9ydCB2YWx1ZSB0byB0aGlzIG9iamVjdAorICAgICAgICB3aGVuZXZlciBpdCBpcyBsZWFybmVkLCBldmVuIGZvciBhZGRyZXNzZXMgZm9yIHdoaWNoIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIHZhbHVlIG9mIGRvdDFkVHBGZGJTdGF0dXMgaXMgbm90CisgICAgICAgIGxlYXJuZWQoMykuIgorICAgIDo6PSB7IGRvdDFkVHBGZGJFbnRyeSAyIH0KKworZG90MWRUcEZkYlN0YXR1cyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIElOVEVHRVIgeworICAgICAgICAgICAgICAgICAgICBvdGhlcigxKSwKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZCgyKSwKKyAgICAgICAgICAgICAgICAgICAgbGVhcm5lZCgzKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZig0KSwKKyAgICAgICAgICAgICAgICAgICAgbWdtdCg1KQorICAgICAgICAgICAgICAgIH0KKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBzdGF0dXMgb2YgdGhpcyBlbnRyeS4gIFRoZSBtZWFuaW5ncyBvZiB0aGUKKyAgICAgICAgdmFsdWVzIGFyZToKKyAgICAgICAgICAgIG90aGVyKDEpIC0gbm9uZSBvZiB0aGUgZm9sbG93aW5nLiAgVGhpcyB3b3VsZAorICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGNhc2Ugd2hlcmUgc29tZSBvdGhlciBNSUIgb2JqZWN0CisgICAgICAgICAgICAgICAgKG5vdCB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgIGRvdDFkVHBGZGJQb3J0LCBub3IgYW4gZW50cnkgaW4gdGhlCisgICAgICAgICAgICAgICAgZG90MWRTdGF0aWNUYWJsZSkgaXMgYmVpbmcgdXNlZCB0byBkZXRlcm1pbmUgaWYKKyAgICAgICAgICAgICAgICBhbmQgaG93IGZyYW1lcyBhZGRyZXNzZWQgdG8gdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YgZG90MWRUcEZkYkFkZHJlc3MgYXJlCisgICAgICAgICAgICAgICAgYmVpbmcgZm9yd2FyZGVkLgorICAgICAgICAgICAgaW52YWxpZCgyKSAtIHRoaXMgZW50cnkgaXMgbm8gbG9uZ2VyIHZhbGlkIChlLmcuLAorICAgICAgICAgICAgICAgIGl0IHdhcyBsZWFybmVkIGJ1dCBoYXMgc2luY2UgYWdlZCBvdXQpLCBidXQgaGFzCisgICAgICAgICAgICAgICAgbm90IHlldCBiZWVuIGZsdXNoZWQgZnJvbSB0aGUgdGFibGUuCisgICAgICAgICAgICBsZWFybmVkKDMpIC0gdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlCisgICAgICAgICAgICAgICAgb2YgZG90MWRUcEZkYlBvcnQgd2FzIGxlYXJuZWQsIGFuZCBpcyBiZWluZworICAgICAgICAgICAgICAgIHVzZWQuCisgICAgICAgICAgICBzZWxmKDQpIC0gdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgZG90MWRUcEZkYkFkZHJlc3MgcmVwcmVzZW50cyBvbmUgb2YgdGhlIGJyaWRnZSdzCisgICAgICAgICAgICAgICAgYWRkcmVzc2VzLiAgVGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICAgICBkb3QxZFRwRmRiUG9ydCBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIGJyaWRnZSdzCisgICAgICAgICAgICAgICAgcG9ydHMgaGFzIHRoaXMgYWRkcmVzcy4KKyAgICAgICAgICAgIG1nbXQoNSkgLSB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICAgICBkb3QxZFRwRmRiQWRkcmVzcyBpcyBhbHNvIHRoZSB2YWx1ZSBvZiBhbgorICAgICAgICAgICAgICAgIGV4aXN0aW5nIGluc3RhbmNlIG9mIGRvdDFkU3RhdGljQWRkcmVzcy4iCisgICAgOjo9IHsgZG90MWRUcEZkYkVudHJ5IDMgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSAgUG9ydCBUYWJsZSBmb3IgVHJhbnNwYXJlbnQgQnJpZGdlcworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFRwUG9ydFRhYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgRG90MWRUcFBvcnRFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHRhYmxlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgZXZlcnkgcG9ydCB0aGF0CisgICAgICAgIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRyYW5zcGFyZW50IGJyaWRnZS4iCisgICAgOjo9IHsgZG90MWRUcCA0IH0KKworZG90MWRUcFBvcnRFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIERvdDFkVHBQb3J0RW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBsaXN0IG9mIGluZm9ybWF0aW9uIGZvciBlYWNoIHBvcnQgb2YgYSB0cmFuc3BhcmVudAorICAgICAgICBicmlkZ2UuIgorICAgIElOREVYICAgeyBkb3QxZFRwUG9ydCB9CisgICAgOjo9IHsgZG90MWRUcFBvcnRUYWJsZSAxIH0KKworRG90MWRUcFBvcnRFbnRyeSA6Oj0KKyAgICBTRVFVRU5DRSB7CisgICAgICAgIGRvdDFkVHBQb3J0CisgICAgICAgICAgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkVHBQb3J0TWF4SW5mbworICAgICAgICAgICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZFRwUG9ydEluRnJhbWVzCisgICAgICAgICAgICBDb3VudGVyMzIsCisgICAgICAgIGRvdDFkVHBQb3J0T3V0RnJhbWVzCisgICAgICAgICAgICBDb3VudGVyMzIsCisgICAgICAgIGRvdDFkVHBQb3J0SW5EaXNjYXJkcworICAgICAgICAgICAgQ291bnRlcjMyCisgICAgfQorCitkb3QxZFRwUG9ydCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMS4uNjU1MzUpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcG9ydCBudW1iZXIgb2YgdGhlIHBvcnQgZm9yIHdoaWNoIHRoaXMgZW50cnkKKyAgICAgICAgY29udGFpbnMgVHJhbnNwYXJlbnQgYnJpZGdpbmcgbWFuYWdlbWVudCBpbmZvcm1hdGlvbi4iCisgICAgOjo9IHsgZG90MWRUcFBvcnRFbnRyeSAxIH0KKworLS0gSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB1c2UgaWZNdHUgYXMgdGhlIHNpemUgb2YgdGhlCistLSBsYXJnZXN0IElORk8gZmllbGQsIGJ1dCB3ZSBjYW4ndCBiZWNhdXNlIGlmTXR1IGlzIGRlZmluZWQKKy0tIHRvIGJlIHRoZSBzaXplIHRoYXQgdGhlIChpbnRlci0pbmV0d29yayBsYXllciBjYW4gdXNlLCB3aGljaAorLS0gY2FuIGRpZmZlciBmcm9tIHRoZSBNQUMgbGF5ZXIgKGVzcGVjaWFsbHkgaWYgc2V2ZXJhbCBsYXllcnMKKy0tIG9mIGVuY2Fwc3VsYXRpb24gYXJlIHVzZWQpLgorCitkb3QxZFRwUG9ydE1heEluZm8gT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKyAgICBVTklUUyAgICAgICAiYnl0ZXMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBJTkZPIChub24tTUFDKSBmaWVsZCB0aGF0CisKKyAgICAgICAgdGhpcyBwb3J0IHdpbGwgcmVjZWl2ZSBvciB0cmFuc21pdC4iCisgICAgOjo9IHsgZG90MWRUcFBvcnRFbnRyeSAyIH0KKworZG90MWRUcFBvcnRJbkZyYW1lcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIFVOSVRTICAgICAgICJmcmFtZXMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBieSB0aGlzCisgICAgICAgIHBvcnQgZnJvbSBpdHMgc2VnbWVudC4gIE5vdGUgdGhhdCBhIGZyYW1lIHJlY2VpdmVkIG9uIHRoZQorICAgICAgICBpbnRlcmZhY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIHBvcnQgaXMgb25seSBjb3VudGVkIGJ5CisgICAgICAgIHRoaXMgb2JqZWN0IGlmIGFuZCBvbmx5IGlmIGl0IGlzIGZvciBhIHByb3RvY29sIGJlaW5nCisgICAgICAgIHByb2Nlc3NlZCBieSB0aGUgbG9jYWwgYnJpZGdpbmcgZnVuY3Rpb24sIGluY2x1ZGluZworICAgICAgICBicmlkZ2UgbWFuYWdlbWVudCBmcmFtZXMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjYuMS4xLjMiCisgICAgOjo9IHsgZG90MWRUcFBvcnRFbnRyeSAzIH0KKworZG90MWRUcFBvcnRPdXRGcmFtZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBVTklUUyAgICAgICAiZnJhbWVzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgYnkgdGhpcworICAgICAgICBwb3J0IHRvIGl0cyBzZWdtZW50LiAgTm90ZSB0aGF0IGEgZnJhbWUgdHJhbnNtaXR0ZWQgb24KKyAgICAgICAgdGhlIGludGVyZmFjZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcG9ydCBpcyBvbmx5IGNvdW50ZWQKKyAgICAgICAgYnkgdGhpcyBvYmplY3QgaWYgYW5kIG9ubHkgaWYgaXQgaXMgZm9yIGEgcHJvdG9jb2wgYmVpbmcKKyAgICAgICAgcHJvY2Vzc2VkIGJ5IHRoZSBsb2NhbCBicmlkZ2luZyBmdW5jdGlvbiwgaW5jbHVkaW5nCisgICAgICAgIGJyaWRnZSBtYW5hZ2VtZW50IGZyYW1lcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNi4xLjEuMyIKKyAgICA6Oj0geyBkb3QxZFRwUG9ydEVudHJ5IDQgfQorCitkb3QxZFRwUG9ydEluRGlzY2FyZHMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBVTklUUyAgICAgICAiZnJhbWVzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQ291bnQgb2YgcmVjZWl2ZWQgdmFsaWQgZnJhbWVzIHRoYXQgd2VyZSBkaXNjYXJkZWQKKyAgICAgICAgKGkuZS4sIGZpbHRlcmVkKSBieSB0aGUgRm9yd2FyZGluZyBQcm9jZXNzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC42LjEuMS4zIgorICAgIDo6PSB7IGRvdDFkVHBQb3J0RW50cnkgNSB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworLS0gVGhlIFN0YXRpYyAoRGVzdGluYXRpb24tQWRkcmVzcyBGaWx0ZXJpbmcpIERhdGFiYXNlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHN1YnRyZWUgaXMgb3B0aW9uYWwuCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkU3RhdGljVGFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBEb3QxZFN0YXRpY0VudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgdGFibGUgY29udGFpbmluZyBmaWx0ZXJpbmcgaW5mb3JtYXRpb24gY29uZmlndXJlZAorICAgICAgICBpbnRvIHRoZSBicmlkZ2UgYnkgKGxvY2FsIG9yIG5ldHdvcmspIG1hbmFnZW1lbnQKKyAgICAgICAgc3BlY2lmeWluZyB0aGUgc2V0IG9mIHBvcnRzIHRvIHdoaWNoIGZyYW1lcyByZWNlaXZlZAorICAgICAgICBmcm9tIHNwZWNpZmljIHBvcnRzIGFuZCBjb250YWluaW5nIHNwZWNpZmljIGRlc3RpbmF0aW9uCisgICAgICAgIGFkZHJlc3NlcyBhcmUgYWxsb3dlZCB0byBiZSBmb3J3YXJkZWQuICBUaGUgdmFsdWUgb2YKKyAgICAgICAgemVybyBpbiB0aGlzIHRhYmxlLCBhcyB0aGUgcG9ydCBudW1iZXIgZnJvbSB3aGljaCBmcmFtZXMKKyAgICAgICAgd2l0aCBhIHNwZWNpZmljIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXJlIHJlY2VpdmVkLCBpcworICAgICAgICB1c2VkIHRvIHNwZWNpZnkgYWxsIHBvcnRzIGZvciB3aGljaCB0aGVyZSBpcyBubyBzcGVjaWZpYworICAgICAgICBlbnRyeSBpbiB0aGlzIHRhYmxlIGZvciB0aGF0IHBhcnRpY3VsYXIgZGVzdGluYXRpb24KKyAgICAgICAgYWRkcmVzcy4gIEVudHJpZXMgYXJlIHZhbGlkIGZvciB1bmljYXN0IGFuZCBmb3IKKyAgICAgICAgZ3JvdXAvYnJvYWRjYXN0IGFkZHJlc3Nlcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNy4yIgorICAgIDo6PSB7IGRvdDFkU3RhdGljIDEgfQorCitkb3QxZFN0YXRpY0VudHJ5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgRG90MWRTdGF0aWNFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJGaWx0ZXJpbmcgaW5mb3JtYXRpb24gY29uZmlndXJlZCBpbnRvIHRoZSBicmlkZ2UgYnkKKyAgICAgICAgKGxvY2FsIG9yIG5ldHdvcmspIG1hbmFnZW1lbnQgc3BlY2lmeWluZyB0aGUgc2V0IG9mCisgICAgICAgIHBvcnRzIHRvIHdoaWNoIGZyYW1lcyByZWNlaXZlZCBmcm9tIGEgc3BlY2lmaWMgcG9ydCBhbmQKKyAgICAgICAgY29udGFpbmluZyBhIHNwZWNpZmljIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXJlIGFsbG93ZWQgdG8KKyAgICAgICAgYmUgZm9yd2FyZGVkLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC43LjIiCisgICAgSU5ERVggICB7IGRvdDFkU3RhdGljQWRkcmVzcywgZG90MWRTdGF0aWNSZWNlaXZlUG9ydCB9CisgICAgOjo9IHsgZG90MWRTdGF0aWNUYWJsZSAxIH0KKworRG90MWRTdGF0aWNFbnRyeSA6Oj0KKyAgICBTRVFVRU5DRSB7CisgICAgICAgIGRvdDFkU3RhdGljQWRkcmVzcyAgICAgICBNYWNBZGRyZXNzLAorICAgICAgICBkb3QxZFN0YXRpY1JlY2VpdmVQb3J0ICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZFN0YXRpY0FsbG93ZWRUb0dvVG8gT0NURVQgU1RSSU5HLAorICAgICAgICBkb3QxZFN0YXRpY1N0YXR1cyAgICAgICAgSU5URUdFUgorICAgIH0KKworZG90MWRTdGF0aWNBZGRyZXNzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgTWFjQWRkcmVzcworICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgaW4gYSBmcmFtZSB0byB3aGljaCB0aGlzCisgICAgICAgIGVudHJ5J3MgZmlsdGVyaW5nIGluZm9ybWF0aW9uIGFwcGxpZXMuICBUaGlzIG9iamVjdCBjYW4KKyAgICAgICAgdGFrZSB0aGUgdmFsdWUgb2YgYSB1bmljYXN0IGFkZHJlc3MsIGEgZ3JvdXAgYWRkcmVzcywgb3IKKyAgICAgICAgdGhlIGJyb2FkY2FzdCBhZGRyZXNzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA3LjkuMSwgNy45LjIiCisgICAgOjo9IHsgZG90MWRTdGF0aWNFbnRyeSAxIH0KKworZG90MWRTdGF0aWNSZWNlaXZlUG9ydCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMC4uNjU1MzUpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkVpdGhlciB0aGUgdmFsdWUgJzAnLCBvciB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHBvcnQKKyAgICAgICAgZnJvbSB3aGljaCBhIGZyYW1lIG11c3QgYmUgcmVjZWl2ZWQgaW4gb3JkZXIgZm9yIHRoaXMKKyAgICAgICAgZW50cnkncyBmaWx0ZXJpbmcgaW5mb3JtYXRpb24gdG8gYXBwbHkuICBBIHZhbHVlIG9mIHplcm8KKyAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhpcyBlbnRyeSBhcHBsaWVzIG9uIGFsbCBwb3J0cyBvZiB0aGUKKyAgICAgICAgYnJpZGdlIGZvciB3aGljaCB0aGVyZSBpcyBubyBvdGhlciBhcHBsaWNhYmxlIGVudHJ5LiIKKyAgICA6Oj0geyBkb3QxZFN0YXRpY0VudHJ5IDIgfQorCitkb3QxZFN0YXRpY0FsbG93ZWRUb0dvVG8gT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDAuLjUxMikpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBzZXQgb2YgcG9ydHMgdG8gd2hpY2ggZnJhbWVzIHJlY2VpdmVkIGZyb20gYQorICAgICAgICBzcGVjaWZpYyBwb3J0IGFuZCBkZXN0aW5lZCBmb3IgYSBzcGVjaWZpYyBNQUMgYWRkcmVzcywKKyAgICAgICAgYXJlIGFsbG93ZWQgdG8gYmUgZm9yd2FyZGVkLiAgRWFjaCBvY3RldCB3aXRoaW4gdGhlCisgICAgICAgIHZhbHVlIG9mIHRoaXMgb2JqZWN0IHNwZWNpZmllcyBhIHNldCBvZiBlaWdodCBwb3J0cywKKyAgICAgICAgd2l0aCB0aGUgZmlyc3Qgb2N0ZXQgc3BlY2lmeWluZyBwb3J0cyAxIHRocm91Z2ggOCwgdGhlCisgICAgICAgIHNlY29uZCBvY3RldCBzcGVjaWZ5aW5nIHBvcnRzIDkgdGhyb3VnaCAxNiwgZXRjLiAgV2l0aGluCisgICAgICAgIGVhY2ggb2N0ZXQsIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCByZXByZXNlbnRzIHRoZQorICAgICAgICBsb3dlc3QgbnVtYmVyZWQgcG9ydCwgYW5kIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKKyAgICAgICAgcmVwcmVzZW50cyB0aGUgaGlnaGVzdCBudW1iZXJlZCBwb3J0LiAgVGh1cywgZWFjaCBwb3J0CisgICAgICAgIG9mIHRoZSBicmlkZ2UgaXMgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgYml0IHdpdGhpbiB0aGUKKyAgICAgICAgdmFsdWUgb2YgdGhpcyBvYmplY3QuICBJZiB0aGF0IGJpdCBoYXMgYSB2YWx1ZSBvZiAnMScsCisgICAgICAgIHRoZW4gdGhhdCBwb3J0IGlzIGluY2x1ZGVkIGluIHRoZSBzZXQgb2YgcG9ydHM7IHRoZSBwb3J0CisgICAgICAgIGlzIG5vdCBpbmNsdWRlZCBpZiBpdHMgYml0IGhhcyBhIHZhbHVlIG9mICcwJy4gIChOb3RlCisgICAgICAgIHRoYXQgdGhlIHNldHRpbmcgb2YgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwb3J0CisgICAgICAgIGZyb20gd2hpY2ggYSBmcmFtZSBpcyByZWNlaXZlZCBpcyBpcnJlbGV2YW50LikgIFRoZQorICAgICAgICBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgb2JqZWN0IGlzIGEgc3RyaW5nIG9mIG9uZXMgb2YKKyAgICAgICAgYXBwcm9wcmlhdGUgbGVuZ3RoLgorCisgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGlzIG9iamVjdCBtYXkgZXhjZWVkIHRoZSByZXF1aXJlZCBtaW5pbXVtCisgICAgICAgIG1heGltdW0gbWVzc2FnZSBzaXplIG9mIHNvbWUgU05NUCB0cmFuc3BvcnQgKDQ4NCBieXRlcywKKyAgICAgICAgaW4gdGhlIGNhc2Ugb2YgU05NUCBvdmVyIFVEUCwgc2VlIFJGQyAzNDE3LCBzZWN0aW9uIDMuMikuCisgICAgICAgIFNOTVAgZW5naW5lcyBvbiBicmlkZ2VzIHN1cHBvcnRpbmcgYSBsYXJnZSBudW1iZXIgb2YKKyAgICAgICAgcG9ydHMgbXVzdCBzdXBwb3J0IGFwcHJvcHJpYXRlIG1heGltdW0gbWVzc2FnZSBzaXplcy4iCisgICAgOjo9IHsgZG90MWRTdGF0aWNFbnRyeSAzIH0KKworZG90MWRTdGF0aWNTdGF0dXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJTlRFR0VSIHsKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIoMSksCisgICAgICAgICAgICAgICAgICAgIGludmFsaWQoMiksCisgICAgICAgICAgICAgICAgICAgIHBlcm1hbmVudCgzKSwKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlT25SZXNldCg0KSwKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlT25UaW1lb3V0KDUpCisgICAgICAgICAgICAgICAgfQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGlzIG9iamVjdCBpbmRpY2F0ZXMgdGhlIHN0YXR1cyBvZiB0aGlzIGVudHJ5LgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBwZXJtYW5lbnQoMykuCisgICAgICAgICAgICBvdGhlcigxKSAtIHRoaXMgZW50cnkgaXMgY3VycmVudGx5IGluIHVzZSBidXQgdGhlCisgICAgICAgICAgICAgICAgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCB3aWxsIHJlbWFpbiBzbyBhcmUKKyAgICAgICAgICAgICAgICBkaWZmZXJlbnQgZnJvbSBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLgorICAgICAgICAgICAgaW52YWxpZCgyKSAtIHdyaXRpbmcgdGhpcyB2YWx1ZSB0byB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgcmVtb3ZlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeS4KKyAgICAgICAgICAgIHBlcm1hbmVudCgzKSAtIHRoaXMgZW50cnkgaXMgY3VycmVudGx5IGluIHVzZSBhbmQKKyAgICAgICAgICAgICAgICB3aWxsIHJlbWFpbiBzbyBhZnRlciB0aGUgbmV4dCByZXNldCBvZiB0aGUKKyAgICAgICAgICAgICAgICBicmlkZ2UuCisgICAgICAgICAgICBkZWxldGVPblJlc2V0KDQpIC0gdGhpcyBlbnRyeSBpcyBjdXJyZW50bHkgaW4gdXNlCisgICAgICAgICAgICAgICAgYW5kIHdpbGwgcmVtYWluIHNvIHVudGlsIHRoZSBuZXh0IHJlc2V0IG9mIHRoZQorICAgICAgICAgICAgICAgIGJyaWRnZS4KKyAgICAgICAgICAgIGRlbGV0ZU9uVGltZW91dCg1KSAtIHRoaXMgZW50cnkgaXMgY3VycmVudGx5IGluIHVzZQorICAgICAgICAgICAgICAgIGFuZCB3aWxsIHJlbWFpbiBzbyB1bnRpbCBpdCBpcyBhZ2VkIG91dC4iCisgICAgOjo9IHsgZG90MWRTdGF0aWNFbnRyeSA0IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gTm90aWZpY2F0aW9ucyBmb3IgdXNlIGJ5IEJyaWRnZXMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIE5vdGlmaWNhdGlvbnMgZm9yIHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK25ld1Jvb3QgTk9USUZJQ0FUSU9OLVRZUEUKKyAgICAtLSBPQkpFQ1RTICAgICB7IH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBuZXdSb290IHRyYXAgaW5kaWNhdGVzIHRoYXQgdGhlIHNlbmRpbmcgYWdlbnQgaGFzCisgICAgICAgIGJlY29tZSB0aGUgbmV3IHJvb3Qgb2YgdGhlIFNwYW5uaW5nIFRyZWU7IHRoZSB0cmFwIGlzCisgICAgICAgIHNlbnQgYnkgYSBicmlkZ2Ugc29vbiBhZnRlciBpdHMgZWxlY3Rpb24gYXMgdGhlIG5ldworCisgICAgICAgIHJvb3QsIGUuZy4sIHVwb24gZXhwaXJhdGlvbiBvZiB0aGUgVG9wb2xvZ3kgQ2hhbmdlIFRpbWVyLAorICAgICAgICBpbW1lZGlhdGVseSBzdWJzZXF1ZW50IHRvIGl0cyBlbGVjdGlvbi4gIEltcGxlbWVudGF0aW9uCisgICAgICAgIG9mIHRoaXMgdHJhcCBpcyBvcHRpb25hbC4iCisgICAgOjo9IHsgZG90MWROb3RpZmljYXRpb25zIDEgfQorCit0b3BvbG9neUNoYW5nZSBOT1RJRklDQVRJT04tVFlQRQorICAgIC0tIE9CSkVDVFMgICAgIHsgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSB0b3BvbG9neUNoYW5nZSB0cmFwIGlzIHNlbnQgYnkgYSBicmlkZ2Ugd2hlbiBhbnkgb2YKKyAgICAgICAgaXRzIGNvbmZpZ3VyZWQgcG9ydHMgdHJhbnNpdGlvbnMgZnJvbSB0aGUgTGVhcm5pbmcgc3RhdGUKKyAgICAgICAgdG8gdGhlIEZvcndhcmRpbmcgc3RhdGUsIG9yIGZyb20gdGhlIEZvcndhcmRpbmcgc3RhdGUgdG8KKyAgICAgICAgdGhlIEJsb2NraW5nIHN0YXRlLiAgVGhlIHRyYXAgaXMgbm90IHNlbnQgaWYgYSBuZXdSb290CisgICAgICAgIHRyYXAgaXMgc2VudCBmb3IgdGhlIHNhbWUgdHJhbnNpdGlvbi4gIEltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIHRoaXMgdHJhcCBpcyBvcHRpb25hbC4iCisgICAgOjo9IHsgZG90MWROb3RpZmljYXRpb25zIDIgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBJRUVFIDgwMi4xRCBNSUIgLSBDb25mb3JtYW5jZSBJbmZvcm1hdGlvbgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZEdyb3VwcyAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQ29uZm9ybWFuY2UgMSB9Citkb3QxZENvbXBsaWFuY2VzICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQ29uZm9ybWFuY2UgMiB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHVuaXRzIG9mIGNvbmZvcm1hbmNlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHRoZSBkb3QxZEJhc2UgZ3JvdXAKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRCYXNlQnJpZGdlR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkQmFzZUJyaWRnZUFkZHJlc3MsCisgICAgICAgIGRvdDFkQmFzZU51bVBvcnRzLAorICAgICAgICBkb3QxZEJhc2VUeXBlCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQnJpZGdlIGxldmVsIGluZm9ybWF0aW9uIGZvciB0aGlzIGRldmljZS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgMSB9CisKK2RvdDFkQmFzZVBvcnRHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRCYXNlUG9ydCwKKyAgICAgICAgZG90MWRCYXNlUG9ydElmSW5kZXgsCisgICAgICAgIGRvdDFkQmFzZVBvcnRDaXJjdWl0LAorICAgICAgICBkb3QxZEJhc2VQb3J0RGVsYXlFeGNlZWRlZERpc2NhcmRzLAorICAgICAgICBkb3QxZEJhc2VQb3J0TXR1RXhjZWVkZWREaXNjYXJkcworICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkluZm9ybWF0aW9uIGZvciBlYWNoIHBvcnQgb24gdGhpcyBkZXZpY2UuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDIgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSB0aGUgZG90MWRTdHAgZ3JvdXAKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRTdHBCcmlkZ2VHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRTdHBQcm90b2NvbFNwZWNpZmljYXRpb24sCisgICAgICAgIGRvdDFkU3RwUHJpb3JpdHksCisgICAgICAgIGRvdDFkU3RwVGltZVNpbmNlVG9wb2xvZ3lDaGFuZ2UsCisgICAgICAgIGRvdDFkU3RwVG9wQ2hhbmdlcywKKyAgICAgICAgZG90MWRTdHBEZXNpZ25hdGVkUm9vdCwKKyAgICAgICAgZG90MWRTdHBSb290Q29zdCwKKyAgICAgICAgZG90MWRTdHBSb290UG9ydCwKKyAgICAgICAgZG90MWRTdHBNYXhBZ2UsCisgICAgICAgIGRvdDFkU3RwSGVsbG9UaW1lLAorICAgICAgICBkb3QxZFN0cEhvbGRUaW1lLAorICAgICAgICBkb3QxZFN0cEZvcndhcmREZWxheSwKKyAgICAgICAgZG90MWRTdHBCcmlkZ2VNYXhBZ2UsCisgICAgICAgIGRvdDFkU3RwQnJpZGdlSGVsbG9UaW1lLAorICAgICAgICBkb3QxZFN0cEJyaWRnZUZvcndhcmREZWxheQorICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkJyaWRnZSBsZXZlbCBTcGFubmluZyBUcmVlIGRhdGEgZm9yIHRoaXMgZGV2aWNlLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyAzIH0KKworZG90MWRTdHBQb3J0R3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkU3RwUG9ydCwKKyAgICAgICAgZG90MWRTdHBQb3J0UHJpb3JpdHksCisgICAgICAgIGRvdDFkU3RwUG9ydFN0YXRlLAorICAgICAgICBkb3QxZFN0cFBvcnRFbmFibGUsCisgICAgICAgIGRvdDFkU3RwUG9ydFBhdGhDb3N0LAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkUm9vdCwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZENvc3QsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRCcmlkZ2UsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRQb3J0LAorICAgICAgICBkb3QxZFN0cFBvcnRGb3J3YXJkVHJhbnNpdGlvbnMKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJTcGFubmluZyBUcmVlIGRhdGEgZm9yIGVhY2ggcG9ydCBvbiB0aGlzIGRldmljZS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgNCB9CisKK2RvdDFkU3RwUG9ydEdyb3VwMiBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRTdHBQb3J0LAorICAgICAgICBkb3QxZFN0cFBvcnRQcmlvcml0eSwKKyAgICAgICAgZG90MWRTdHBQb3J0U3RhdGUsCisgICAgICAgIGRvdDFkU3RwUG9ydEVuYWJsZSwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZFJvb3QsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRDb3N0LAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkQnJpZGdlLAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkUG9ydCwKKyAgICAgICAgZG90MWRTdHBQb3J0Rm9yd2FyZFRyYW5zaXRpb25zLAorICAgICAgICBkb3QxZFN0cFBvcnRQYXRoQ29zdDMyCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiU3Bhbm5pbmcgVHJlZSBkYXRhIGZvciBlYWNoIHBvcnQgb24gdGhpcyBkZXZpY2UuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDUgfQorCitkb3QxZFN0cFBvcnRHcm91cDMgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkU3RwUG9ydFBhdGhDb3N0MzIKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJTcGFubmluZyBUcmVlIGRhdGEgZm9yIGRldmljZXMgc3VwcG9ydGluZyAzMi1iaXQKKyAgICAgICAgIHBhdGggY29zdHMuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDYgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSB0aGUgZG90MWRUcCBncm91cAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFRwQnJpZGdlR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkVHBMZWFybmVkRW50cnlEaXNjYXJkcywKKyAgICAgICAgZG90MWRUcEFnaW5nVGltZQorICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkJyaWRnZSBsZXZlbCBUcmFuc3BhcmVudCBCcmlkZ2luZyBkYXRhLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyA3IH0KKworZG90MWRUcEZkYkdyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworCisgICAgICAgIGRvdDFkVHBGZGJBZGRyZXNzLAorICAgICAgICBkb3QxZFRwRmRiUG9ydCwKKyAgICAgICAgZG90MWRUcEZkYlN0YXR1cworICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkZpbHRlcmluZyBEYXRhYmFzZSBpbmZvcm1hdGlvbiBmb3IgdGhlIEJyaWRnZS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgOCB9CisKK2RvdDFkVHBHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRUcFBvcnQsCisgICAgICAgIGRvdDFkVHBQb3J0TWF4SW5mbywKKyAgICAgICAgZG90MWRUcFBvcnRJbkZyYW1lcywKKyAgICAgICAgZG90MWRUcFBvcnRPdXRGcmFtZXMsCisgICAgICAgIGRvdDFkVHBQb3J0SW5EaXNjYXJkcworICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkR5bmFtaWMgRmlsdGVyaW5nIERhdGFiYXNlIGluZm9ybWF0aW9uIGZvciBlYWNoIHBvcnQgb2YKKyAgICAgICAgdGhlIEJyaWRnZS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgOSB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIFRoZSBTdGF0aWMgKERlc3RpbmF0aW9uLUFkZHJlc3MgRmlsdGVyaW5nKSBEYXRhYmFzZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFN0YXRpY0dyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZFN0YXRpY0FkZHJlc3MsCisgICAgICAgIGRvdDFkU3RhdGljUmVjZWl2ZVBvcnQsCisgICAgICAgIGRvdDFkU3RhdGljQWxsb3dlZFRvR29UbywKKyAgICAgICAgZG90MWRTdGF0aWNTdGF0dXMKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJTdGF0aWMgRmlsdGVyaW5nIERhdGFiYXNlIGluZm9ybWF0aW9uIGZvciBlYWNoIHBvcnQgb2YKKyAgICAgICAgdGhlIEJyaWRnZS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgMTAgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBUaGUgVHJhcCBOb3RpZmljYXRpb24gR3JvdXAKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWROb3RpZmljYXRpb25Hcm91cCBOT1RJRklDQVRJT04tR1JPVVAKKyAgICBOT1RJRklDQVRJT05TIHsKKyAgICAgICAgbmV3Um9vdCwKKyAgICAgICAgdG9wb2xvZ3lDaGFuZ2UKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJHcm91cCBvZiBvYmplY3RzIGRlc2NyaWJpbmcgbm90aWZpY2F0aW9ucyAodHJhcHMpLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyAxMSB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIGNvbXBsaWFuY2Ugc3RhdGVtZW50cworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCiticmlkZ2VDb21wbGlhbmNlMTQ5MyBNT0RVTEUtQ09NUExJQU5DRQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGNvbXBsaWFuY2Ugc3RhdGVtZW50IGZvciBkZXZpY2Ugc3VwcG9ydCBvZiBicmlkZ2luZworICAgICAgICBzZXJ2aWNlcywgYXMgcGVyIFJGQzE0OTMuIgorCisgICAgTU9EVUxFCisgICAgICAgIE1BTkRBVE9SWS1HUk9VUFMgeworICAgICAgICAgICAgZG90MWRCYXNlQnJpZGdlR3JvdXAsCisgICAgICAgICAgICBkb3QxZEJhc2VQb3J0R3JvdXAKKyAgICAgICAgfQorCisgICAgR1JPVVAgICBkb3QxZFN0cEJyaWRnZUdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvciBicmlkZ2VzCisgICAgICAgIHRoYXQgc3VwcG9ydCB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbC4iCisKKyAgICBHUk9VUCAgIGRvdDFkU3RwUG9ydEdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvciBicmlkZ2VzCisgICAgICAgIHRoYXQgc3VwcG9ydCB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbC4iCisKKyAgICBHUk9VUCAgIGRvdDFkVHBCcmlkZ2VHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IgYnJpZGdlcworICAgICAgICB0aGF0IHN1cHBvcnQgdGhlIHRyYW5zcGFyZW50IGJyaWRnaW5nIG1vZGUuICBBCisgICAgICAgIHRyYW5zcGFyZW50IG9yIFNSVCBicmlkZ2Ugd2lsbCBpbXBsZW1lbnQgdGhpcyBncm91cC4iCisKKyAgICBHUk9VUCAgIGRvdDFkVHBGZGJHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IgYnJpZGdlcworICAgICAgICB0aGF0IHN1cHBvcnQgdGhlIHRyYW5zcGFyZW50IGJyaWRnaW5nIG1vZGUuICBBCisgICAgICAgIHRyYW5zcGFyZW50IG9yIFNSVCBicmlkZ2Ugd2lsbCBpbXBsZW1lbnQgdGhpcyBncm91cC4iCisKKyAgICBHUk9VUCAgIGRvdDFkVHBHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IgYnJpZGdlcworCisgICAgICAgIHRoYXQgc3VwcG9ydCB0aGUgdHJhbnNwYXJlbnQgYnJpZGdpbmcgbW9kZS4gIEEKKyAgICAgICAgdHJhbnNwYXJlbnQgb3IgU1JUIGJyaWRnZSB3aWxsIGltcGxlbWVudCB0aGlzIGdyb3VwLiIKKworICAgIEdST1VQICAgZG90MWRTdGF0aWNHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG9wdGlvbmFsLiIKKworICAgIEdST1VQIGRvdDFkTm90aWZpY2F0aW9uR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBvcHRpb25hbC4iCisgICAgOjo9IHsgZG90MWRDb21wbGlhbmNlcyAxIH0KKworYnJpZGdlQ29tcGxpYW5jZTQxODggTU9EVUxFLUNPTVBMSUFOQ0UKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBjb21wbGlhbmNlIHN0YXRlbWVudCBmb3IgZGV2aWNlIHN1cHBvcnQgb2YgYnJpZGdpbmcKKyAgICAgICAgc2VydmljZXMuICBUaGlzIHN1cHBvcnRzIDMyLWJpdCBQYXRoIENvc3QgdmFsdWVzIGFuZCB0aGUKKyAgICAgICAgbW9yZSByZXN0cmljdGVkIGJyaWRnZSBhbmQgcG9ydCBwcmlvcml0aWVzLCBhcyBwZXIgSUVFRQorICAgICAgICA4MDIuMXQuCisKKyAgICAgICAgRnVsbCBzdXBwb3J0IGZvciB0aGUgODAyLjFEIG1hbmFnZW1lbnQgb2JqZWN0cyByZXF1aXJlcyB0aGF0CisgICAgICAgIHRoZSBTTk1QdjItTUlCIFtSRkMzNDE4XSBvYmplY3RzIHN5c0Rlc2NyLCBhbmQgc3lzVXBUaW1lLCBhcworICAgICAgICB3ZWxsIGFzIHRoZSBJRi1NSUIgW1JGQzI4NjNdIG9iamVjdHMgaWZJbmRleCwgaWZUeXBlLAorICAgICAgICBpZkRlc2NyLCBpZlBoeXNBZGRyZXNzLCBhbmQgaWZMYXN0Q2hhbmdlIGFyZSBpbXBsZW1lbnRlZC4iCisKKyAgICBNT0RVTEUKKyAgICAgICAgTUFOREFUT1JZLUdST1VQUyB7CisgICAgICAgICAgICBkb3QxZEJhc2VCcmlkZ2VHcm91cCwKKyAgICAgICAgICAgIGRvdDFkQmFzZVBvcnRHcm91cAorICAgICAgICB9CisKKyAgICBHUk9VUCAgIGRvdDFkU3RwQnJpZGdlR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yCisgICAgICAgIGJyaWRnZXMgdGhhdCBzdXBwb3J0IHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLiIKKworICAgIE9CSkVDVCBkb3QxZFN0cFByaW9yaXR5CisgICAgU1lOVEFYIEludGVnZXIzMiAoMHw0MDk2fDgxOTJ8MTIyODh8MTYzODR8MjA0ODB8MjQ1NzYKKyAgICAgICAgICAgICAgICAgICAgIHwyODY3MnwzMjc2OHwzNjg2NHw0MDk2MHw0NTA1Nnw0OTE1MgorICAgICAgICAgICAgICAgICAgICAgfDUzMjQ4fDU3MzQ0fDYxNDQwKQorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcG9zc2libGUgdmFsdWVzIGRlZmluZWQgYnkgSUVFRSA4MDIuMXQuIgorCisgICAgR1JPVVAgICBkb3QxZFN0cFBvcnRHcm91cDIKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yCisgICAgICAgIGJyaWRnZXMgdGhhdCBzdXBwb3J0IHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sLiIKKworICAgIEdST1VQICAgZG90MWRTdHBQb3J0R3JvdXAzCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvciBicmlkZ2VzCisgICAgICAgICB0aGF0IHN1cHBvcnQgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wgYW5kIDMyLWJpdCBwYXRoCisgICAgICAgICBjb3N0cy4gIEluIHBhcnRpY3VsYXIsIHRoaXMgaW5jbHVkZXMgZGV2aWNlcyBzdXBwb3J0aW5nCisgICAgICAgICBJRUVFIDgwMi4xdCBhbmQgSUVFRSA4MDIuMXcuIgorCisgICAgT0JKRUNUIGRvdDFkU3RwUG9ydFByaW9yaXR5CisgICAgU1lOVEFYIEludGVnZXIzMiAoMHwxNnwzMnw0OHw2NHw4MHw5NnwxMTJ8MTI4CisgICAgICAgICAgICAgICAgICAgICB8MTQ0fDE2MHwxNzZ8MTkyfDIwOHwyMjR8MjQwKQorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcG9zc2libGUgdmFsdWVzIGRlZmluZWQgYnkgSUVFRSA4MDIuMXQuIgorCisgICAgR1JPVVAgICBkb3QxZFRwQnJpZGdlR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yCisgICAgICAgIGJyaWRnZXMgdGhhdCBzdXBwb3J0IHRoZSB0cmFuc3BhcmVudCBicmlkZ2luZworICAgICAgICBtb2RlLiAgQSB0cmFuc3BhcmVudCBvciBTUlQgYnJpZGdlIHdpbGwgaW1wbGVtZW50CisgICAgICAgIHRoaXMgZ3JvdXAuIgorCisgICAgR1JPVVAgICBkb3QxZFRwRmRiR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yCisgICAgICAgIGJyaWRnZXMgdGhhdCBzdXBwb3J0IHRoZSB0cmFuc3BhcmVudCBicmlkZ2luZworICAgICAgICBtb2RlLiAgQSB0cmFuc3BhcmVudCBvciBTUlQgYnJpZGdlIHdpbGwgaW1wbGVtZW50CisgICAgICAgIHRoaXMgZ3JvdXAuIgorCisgICAgR1JPVVAgICBkb3QxZFRwR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yCisgICAgICAgIGJyaWRnZXMgdGhhdCBzdXBwb3J0IHRoZSB0cmFuc3BhcmVudCBicmlkZ2luZworICAgICAgICBtb2RlLiAgQSB0cmFuc3BhcmVudCBvciBTUlQgYnJpZGdlIHdpbGwgaW1wbGVtZW50CisgICAgICAgIHRoaXMgZ3JvdXAuIgorCisgICAgR1JPVVAgICBkb3QxZFN0YXRpY0dyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgb3B0aW9uYWwuIgorCisgICAgR1JPVVAgZG90MWROb3RpZmljYXRpb25Hcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG9wdGlvbmFsLiIKKyAgICA6Oj0geyBkb3QxZENvbXBsaWFuY2VzIDIgfQorCitFTkQKZGlmZiAtLWdpdCBhL21pYnMvRElTTUFOLUVWRU5ULU1JQi50eHQgYi9taWJzL0RJU01BTi1FVkVOVC1NSUIudHh0CmluZGV4IGJkZTFjZGIuLmYwMGM3Y2MgMTAwNjQ0Ci0tLSBhL21pYnMvRElTTUFOLUVWRU5ULU1JQi50eHQKKysrIGIvbWlicy9ESVNNQU4tRVZFTlQtTUlCLnR4dApAQCAtOCw3ICs4LDYgQEAKICAgICBURVhUVUFMLUNPTlZFTlRJT04sIFJvd1N0YXR1cywKICAgICBUcnV0aFZhbHVlICAgICAgICAgICAgICAgIEZST00gU05NUHYyLVRDCiAKLQogICAgIE1PRFVMRS1DT01QTElBTkNFLCBPQkpFQ1QtR1JPVVAsCiAgICAgTk9USUZJQ0FUSU9OLUdST1VQICAgICAgICAgICAgIEZST00gU05NUHYyLUNPTkYKICAgICBzeXNVcFRpbWUgICAgICAgICAgICAgICAgIEZST00gU05NUHYyLU1JQgpAQCAtNTgsNyArNTcsNiBAQAogICAgICAgICBwYXJ0aWN1bGFyIGVycm9yIGNvZGUgaGVyZSBkb2VzIG5vdCBpbXBseSB0aGF0IGFsbAogICAgICAgICBpbXBsZW1lbnRhdGlvbnMgYXJlIGNhcGFibGUgb2Ygc2Vuc2luZyB0aGF0IGVycm9yIGFuZAogCi0KICAgICAgICAgcmV0dXJuaW5nIHRoYXQgY29kZS4KIAogICAgICAgICBUaGUgc2Vjb25kIGdyb3VwLCBudW1iZXJlZCBncmVhdGVyIHRoYW4gMCwgYXJlIGNvcGllZApAQCAtNzgsMTYgKzc2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIG5vdCBhcyBleHBlY3RlZAogICAgICAgICBzYW1wbGVPdmVycnVuICAgICAgICAgICBhbm90aGVyIHNhbXBsZSBhdHRlbXB0IG9jY3VycmVkIGJlZm9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJldmlvdXMgb25lIGNvbXBsZXRlZCIKLQogICAgIFNZTlRBWCAgICAgIElOVEVHRVIgeyBsb2NhbFJlc291cmNlTGFjaygtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZERlc3RpbmF0aW9uKC0yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25VbnJlYWNoYWJsZSgtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vUmVzcG9uc2UoLTQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRUeXBlKC01KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlT3ZlcnJ1bigtNiksCi0KICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9FcnJvcigwKSwKLQogICAgICAgICAgICAgICAgICAgICAgICAgICB0b29CaWcoMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vU3VjaE5hbWUoMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZFZhbHVlKDMpLApAQCAtMTA4LDcgKzEwMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29uc2lzdGVudE5hbWUoMTgpIH0KIC0tCiAKLQogLS0gUmVzb3VyY2UgQ29udHJvbCBTZWN0aW9uCiAtLQogCkBAIC0xNTcsOCArMTUxLDYgQEAKICAgICAgICAgQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsIG5vdCBlbGltaW5hdGUgb3IgaW5oaWJpdCBleGlzdGluZwogICAgICAgICBzYW1wbGUgc3RhdGUgYnV0IGNvdWxkIHByZXZlbnQgYWxsb2NhdGlvbiBvZiBhZGRpdGlvbmFsIHN0YXRlCiAgICAgICAgIGluZm9ybWF0aW9uLiIKLQotCiAgICAgOjo9IHsgbXRlUmVzb3VyY2UgMiB9CiAKIG10ZVJlc291cmNlU2FtcGxlSW5zdGFuY2VzIE9CSkVDVC1UWVBFCkBAIC0yMDgsNyArMjAwLDYgQEAKICAgICAgICAgY29uZGl0aW9uIGhhcyBmYWlsZWQuICBUaGlzIGNvdW50cyBpbmRpdmlkdWFsbHkgZm9yIGVhY2gKICAgICAgICAgYXR0ZW1wdCBpbiBhIGdyb3VwIG9mIHRhcmdldHMgb3IgZWFjaCBhdHRlbXB0IGZvciBhCiAKLQogICAgICAgICB3aWxkY2FyZGVkIG9iamVjdC4iCiAgICAgOjo9IHsgbXRlVHJpZ2dlciAxIH0KIApAQCAtMjU3LDggKzI0OCw2IEBACiAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQogICAgU1RBVFVTICAgICAgY3VycmVudAogICAgREVTQ1JJUFRJT04KLQotCiAgICAgICAgICJUaGUgb3duZXIgb2YgdGhpcyBlbnRyeS4gVGhlIGV4YWN0IHNlbWFudGljcyBvZiB0aGlzCiAgICAgICAgIHN0cmluZyBhcmUgc3ViamVjdCB0byB0aGUgc2VjdXJpdHkgcG9saWN5IGRlZmluZWQgYnkgdGhlCiAgICAgICAgIHNlY3VyaXR5IGFkbWluaXN0cmF0b3IuIgpAQCAtMzA4LDcgKzI5Nyw2IEBACiAKICAgICAgICAgRm9yICd0aHJlc2hvbGQnIHRoZSB0ZXN0IHdvcmtzIGFzIGRlc2NyaWJlZCBiZWxvdyBmb3IKIAotCiAgICAgICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRTdGFydHVwLCBtdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nLCBhbmQKICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmcuCiAKQEAgLTM1OCw3ICszNDYsNiBAQAogICAgICAgICBpbnN0YW5jZSBwb3J0aW9uLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZAogICAgICAgICBhcyBpZiB3aXRoIGEgR2V0TmV4dCBmdW5jdGlvbiwgY2hlY2tpbmcgbXVsdGlwbGUgdmFsdWVzCiAKLQogICAgICAgICBpZiB0aGV5IGV4aXN0LiAgSWYgc3VjaCB3aWxkY2FyZGluZyBpcyBhcHBsaWVkLAogICAgICAgICBtdGVUcmlnZ2VyVmFsdWVJRFdpbGRjYXJkIG11c3QgYmUgJ3RydWUnIGFuZCBpZiBub3QgaXQgbXVzdAogICAgICAgICBiZSAnZmFsc2UnLgpAQCAtNDA4LDcgKzM5NSw2IEBACiAKICAgICAgICAgT3RoZXJ3aXNlIGFjY2VzcyByaWdodHMgYXJlIGNoZWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBzZWN1cml0eQogCi0KICAgICAgICAgcGFyYW1ldGVycyByZXN1bHRpbmcgZnJvbSB0aGUgdGFnLiIKICAgICBERUZWQUwgeyAnJ0ggfQogICAgIDo6PSB7IG10ZVRyaWdnZXJFbnRyeSA4IH0KQEAgLTQ1Nyw4ICs0NDMsNiBAQAogICAgIFVOSVRTICAgICAgICJzZWNvbmRzIgogICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCiAgICAgU1RBVFVTICAgICAgY3VycmVudAotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAiVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiB0cmlnZ2VyIHNhbXBsZXMuICBUbwogICAgICAgICBlbmNvdXJhZ2UgY29uc2lzdGVuY3kgaW4gc2FtcGxpbmcsIHRoZSBpbnRlcnZhbCBpcyBtZWFzdXJlZApAQCAtNTA3LDggKzQ5MSw2IEBACiAgICAgICAgIEEgbGlzdCBvZiBvYmplY3RzIG1heSBhbHNvIGJlIGFkZGVkIGJhc2VkIG9uIHRoZSBldmVudCBvciBvbgogICAgICAgICB0aGUgdmFsdWUgb2YgbXRlVHJpZ2dlclRlc3QuCiAKLQotCiAgICAgICAgIEEgbGVuZ3RoIG9mIDAgaW5kaWNhdGVzIG5vIGFkZGl0aW9uYWwgb2JqZWN0cy4iCiAgICAgREVGVkFMIHsgJydIIH0KICAgICA6Oj0geyBtdGVUcmlnZ2VyRW50cnkgMTMgfQpAQCAtNTU3LDggKzUzOSw2IEBACiAgICAgSU5ERVggICAgICAgeyBtdGVPd25lciwgSU1QTElFRCBtdGVUcmlnZ2VyTmFtZSB9CiAgICAgOjo9IHsgbXRlVHJpZ2dlckRlbHRhVGFibGUgMSB9CiAKLQotCiBNdGVUcmlnZ2VyRGVsdGFFbnRyeSA6Oj0gU0VRVUVOQ0UgewogICAgIG10ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRCAgICAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKICAgICBtdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZCAgICAgICAgVHJ1dGhWYWx1ZSwKQEAgLTYwOCw3ICs1ODgsNiBAQAogICAgICAgICBiZSB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mCiAgICAgICAgIG10ZVRyaWdnZXJWYWx1ZUlEV2lsZGNhcmQgd2hlbiB0aGUgY29ycmVzcG9uZGluZwogCi0KICAgICAgICAgbXRlVHJpZ2dlclNhbXBsZVR5cGUgaXMgJ2RlbHRhVmFsdWUnLiIKICAgICBERUZWQUwgeyBmYWxzZSB9CiAgICAgOjo9IHsgbXRlVHJpZ2dlckRlbHRhRW50cnkgMiB9CkBAIC02NTgsNyArNjM3LDYgQEAKICAgICBtdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnQgICAgICAgICAgICAgU25tcEFkbWluU3RyaW5nCiB9CiAKLQogbXRlVHJpZ2dlckV4aXN0ZW5jZVRlc3QgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBCSVRTIHsgcHJlc2VudCgwKSwgYWJzZW50KDEpLCBjaGFuZ2VkKDIpIH0KICAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCkBAIC03MDcsOCArNjg1LDYgQEAKIAogbXRlVHJpZ2dlckV4aXN0ZW5jZU9iamVjdHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBTbm1wQWRtaW5TdHJpbmcgKFNJWkUgKDAuLjMyKSkKLQotCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtNzU4LDcgKzczNCw2IEBACiAgICAgICAgIHRyaWdnZXJzLiIKICAgICA6Oj0geyBtdGVUcmlnZ2VyIDUgfQogCi0KIG10ZVRyaWdnZXJCb29sZWFuRW50cnkgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBNdGVUcmlnZ2VyQm9vbGVhbkVudHJ5CiAgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKQEAgLTgwNyw4ICs3ODIsNiBAQAogICAgIERFRlZBTCB7IDAgfQogICAgIDo6PSB7IG10ZVRyaWdnZXJCb29sZWFuRW50cnkgMiB9CiAKLQotCiBtdGVUcmlnZ2VyQm9vbGVhblN0YXJ0dXAgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBUcnV0aFZhbHVlCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQpAQCAtODU3LDggKzgzMCw2IEBACiAgICAgICAgICJUbyBnbyB3aXRoIG10ZVRyaWdnZXJCb29sZWFuRXZlbnQsIHRoZSBtdGVPd25lciBvZiBhbiBldmVudAogICAgICAgICBlbnRyeSBmcm9tIG10ZUV2ZW50VGFibGUuIgogICAgIERFRlZBTCB7ICcnSCB9Ci0KLQogICAgIDo6PSB7IG10ZVRyaWdnZXJCb29sZWFuRW50cnkgNiB9CiAKIG10ZVRyaWdnZXJCb29sZWFuRXZlbnQgT0JKRUNULVRZUEUKQEAgLTkwNyw4ICs4NzgsNiBAQAogICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmdFdmVudE93bmVyICAgICAgICAgU25tcEFkbWluU3RyaW5nLAogICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmdFdmVudCAgICAgICAgICAgICAgU25tcEFkbWluU3RyaW5nLAogICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nRXZlbnRPd25lciAgICAgICAgU25tcEFkbWluU3RyaW5nLAotCi0KICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50ICAgICAgICAgICAgIFNubXBBZG1pblN0cmluZywKICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudE93bmVyICAgIFNubXBBZG1pblN0cmluZywKICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudCAgICAgICAgIFNubXBBZG1pblN0cmluZywKQEAgLTk1Nyw4ICs5MjYsNiBAQAogICAgICAgICB0cmlnZ2VyZWQgdW50aWwgdGhlIHNhbXBsZWQgdmFsdWUgZmFsbHMgYmVsb3cgdGhpcyB0aHJlc2hvbGQKICAgICAgICAgYW5kIHJlYWNoZXMgbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmcuIgogICAgIERFRlZBTCB7IDAgfQotCi0KICAgICA6Oj0geyBtdGVUcmlnZ2VyVGhyZXNob2xkRW50cnkgMiB9CiAKIG10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nIE9CSkVDVC1UWVBFCkBAIC0xMDA3LDggKzk3NCw2IEBACiAgICAgICAgIHRyaWdnZXJlZCB1bnRpbCB0aGUgZGVsdGEgdmFsdWUgZmFsbHMgYmVsb3cgdGhpcyB0aHJlc2hvbGQgYW5kCiAgICAgICAgIHJlYWNoZXMgbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZy4iCiAgICAgREVGVkFMIHsgMCB9Ci0KLQogICAgIDo6PSB7IG10ZVRyaWdnZXJUaHJlc2hvbGRFbnRyeSA0IH0KIAogbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZyBPQkpFQ1QtVFlQRQpAQCAtMTA1OCw3ICsxMDIzLDYgQEAKIAogICAgICAgICBBIGxpc3Qgb2Ygb2JqZWN0cyBtYXkgYWxzbyBiZSBhZGRlZCBiYXNlZCBvbiB0aGUgb3ZlcmFsbAogCi0KICAgICAgICAgdHJpZ2dlciwgdGhlIGV2ZW50IG9yIG90aGVyIHNldHRpbmdzIGluIG10ZVRyaWdnZXJUZXN0LgogCiAgICAgICAgIEEgbGVuZ3RoIG9mIDAgaW5kaWNhdGVzIG5vIGFkZGl0aW9uYWwgb2JqZWN0cy4iCkBAIC0xMTA3LDggKzEwNzEsNiBAQAogICAgIERFRlZBTCB7ICcnSCB9CiAgICAgOjo9IHsgbXRlVHJpZ2dlclRocmVzaG9sZEVudHJ5IDExIH0KIAotCi0KIG10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50T3duZXIgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBTbm1wQWRtaW5TdHJpbmcgKFNJWkUgKDAuLjMyKSkKICAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCkBAIC0xMTU3LDggKzExMTksNiBAQAogLS0gT2JqZWN0cyBUYWJsZQogLS0KIAotCi0KIG10ZU9iamVjdHNUYWJsZSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIE10ZU9iamVjdHNFbnRyeQogICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCkBAIC0xMjA4LDcgKzExNjgsNiBAQAogICAgICAgICAiQW4gYXJiaXRyYXJ5IGludGVnZXIgZm9yIHRoZSBwdXJwb3NlIG9mIGlkZW50aWZ5aW5nCiAgICAgICAgIGluZGl2aWR1YWwgb2JqZWN0cyB3aXRoaW4gYSBtdGVPYmplY3RzTmFtZSBncm91cC4KIAotCiAgICAgICAgIE9iamVjdHMgd2l0aGluIGEgZ3JvdXAgYXJlIHBsYWNlZCBpbiB0aGUgbm90aWZpY2F0aW9uIGluIHRoZQogICAgICAgICBudW1lcmljYWwgb3JkZXIgb2YgdGhpcyBpbmRleC4KIApAQCAtMTI1OCw3ICsxMjE3LDYgQEAKICAgICBERUZWQUwgeyBmYWxzZSB9CiAgICAgOjo9IHsgbXRlT2JqZWN0c0VudHJ5IDQgfQogCi0KIG10ZU9iamVjdHNFbnRyeVN0YXR1cyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFJvd1N0YXR1cwogICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCkBAIC0xMzA4LDcgKzEyNjYsNiBAQAogICAgIElOREVYICAgICAgIHsgbXRlT3duZXIsIElNUExJRUQgbXRlRXZlbnROYW1lIH0KICAgICA6Oj0geyBtdGVFdmVudFRhYmxlIDEgfQogCi0KIE10ZUV2ZW50RW50cnkgOjo9IFNFUVVFTkNFIHsKICAgICBtdGVFdmVudE5hbWUgICAgICAgICAgICAgICAgICAgICAgICBTbm1wQWRtaW5TdHJpbmcsCiAgICAgbXRlRXZlbnRDb21tZW50ICAgICAgICAgICAgICAgICAgICAgU25tcEFkbWluU3RyaW5nLApAQCAtMTM1OCw3ICsxMzE1LDYgQEAKICAgICAgICAgIkEgY29udHJvbCB0byBhbGxvdyBhbiBldmVudCB0byBiZSBjb25maWd1cmVkIGJ1dCBub3QgdXNlZC4KICAgICAgICAgV2hlbiB0aGUgdmFsdWUgaXMgJ2ZhbHNlJyB0aGUgZXZlbnQgZG9lcyBub3QgZXhlY3V0ZSBldmVuIGlmCiAKLQogICAgICAgICB0cmlnZ2VyZWQuIgogICAgIERFRlZBTCB7IGZhbHNlIH0KICAgICA6Oj0geyBtdGVFdmVudEVudHJ5IDQgfQpAQCAtMTQwNyw4ICsxMzYzLDYgQEAKICAgICBTWU5UQVggICAgICBPQkpFQ1QgSURFTlRJRklFUgogICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKICAgICBTVEFUVVMgICAgICBjdXJyZW50Ci0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICJUaGUgb2JqZWN0IGlkZW50aWZpZXIgZnJvbSB0aGUgTk9USUZJQ0FUSU9OLVRZUEUgZm9yIHRoZQogICAgICAgICBub3RpZmljYXRpb24gdG8gdXNlIGlmIG1ldEV2ZW50QWN0aW9ucyBoYXMgJ25vdGlmaWNhdGlvbicgc2V0LiIKQEAgLTE0NTcsOCArMTQxMSw2IEBACiBtdGVFdmVudFNldEVudHJ5IE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgTXRlRXZlbnRTZXRFbnRyeQogICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCi0KLQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAiSW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgZXZlbnQncyBzZXQgb3B0aW9uLiAgRW50cmllcwpAQCAtMTUwOCw3ICsxNDYwLDYgQEAKICAgICBERUZWQUwgeyB6ZXJvRG90WmVybyB9CiAgICAgOjo9IHsgbXRlRXZlbnRTZXRFbnRyeSAxIH0KIAotCiBtdGVFdmVudFNldE9iamVjdFdpbGRjYXJkIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgVHJ1dGhWYWx1ZQogICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKQEAgLTE1NTcsOCArMTUwOCw2IEBACiBtdGVFdmVudFNldENvbnRleHROYW1lIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgU25tcEFkbWluU3RyaW5nCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQotCi0KICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgIlRoZSBtYW5hZ2VtZW50IGNvbnRleHQgaW4gd2hpY2ggdG8gc2V0IG10ZUV2ZW50T2JqZWN0SUQuCkBAIC0xNjA3LDggKzE1NTYsNiBAQAogICAgICAgICAiVGhlIG5hbWUgb2YgdGhlIHRyaWdnZXIgY2F1c2luZyB0aGUgbm90aWZpY2F0aW9uLiIKICAgICA6Oj0geyBkaXNtYW5FdmVudE1JQk5vdGlmaWNhdGlvbk9iamVjdHMgMSB9CiAKLQotCiBtdGVIb3RUYXJnZXROYW1lIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgU25tcEFkbWluU3RyaW5nCiAgICAgTUFYLUFDQ0VTUyAgYWNjZXNzaWJsZS1mb3Itbm90aWZ5CkBAIC0xNjU3LDggKzE2MDQsNiBAQAogICAgIFNZTlRBWCAgICAgIEZhaWx1cmVSZWFzb24KICAgICBNQVgtQUNDRVNTICBhY2Nlc3NpYmxlLWZvci1ub3RpZnkKICAgICBTVEFUVVMgICAgICBjdXJyZW50Ci0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICJUaGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZSBvZiBhbiBhdHRlbXB0IHRvIGNoZWNrIGZvciBhCiAgICAgICAgIHRyaWdnZXIgY29uZGl0aW9uIG9yIHNldCBhbiBvYmplY3QgaW4gcmVzcG9uc2UgdG8gYW4gZXZlbnQuIgpAQCAtMTcwNyw4ICsxNjUyLDYgQEAKIAogbXRlVHJpZ2dlckZhaWx1cmUgTk9USUZJQ0FUSU9OLVRZUEUKICAgICBPQkpFQ1RTIHsgbXRlSG90VHJpZ2dlciwKLQotCiAgICAgICAgICAgICAgIG10ZUhvdFRhcmdldE5hbWUsCiAgICAgICAgICAgICAgIG10ZUhvdENvbnRleHROYW1lLAogICAgICAgICAgICAgICBtdGVIb3RPSUQsCkBAIC0xNzU3LDggKzE3MDAsNiBAQAogZGlzbWFuRXZlbnRNSUJDb21wbGlhbmNlIE1PRFVMRS1DT01QTElBTkNFCiAgICAgICAgIFNUQVRVUyBjdXJyZW50CiAgICAgICAgIERFU0NSSVBUSU9OCi0KLQogICAgICAgICAgICAgICAgICJUaGUgY29tcGxpYW5jZSBzdGF0ZW1lbnQgZm9yIGVudGl0aWVzIHdoaWNoIGltcGxlbWVudAogICAgICAgICAgICAgICAgIHRoZSBFdmVudCBNSUIuIgogICAgICAgICBNT0RVTEUgIC0tIHRoaXMgbW9kdWxlCkBAIC0xNzk3LDcgKzE3MzgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIldyaXRlIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQsIHRodXMgYWxsb3dpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzeXN0ZW0gbm90IHRvIGltcGxlbWVudCB3aWxkY2FyZGluZy4iCiAKLQogICAgICAgICAgICAgICAgIE9CSkVDVCBtdGVPYmplY3RzSURXaWxkY2FyZAogICAgICAgICAgICAgICAgIE1JTi1BQ0NFU1MgIHJlYWQtb25seQogICAgICAgICAgICAgICAgIERFU0NSSVBUSU9OCkBAIC0xODA3LDExICsxNzQ3LDggQEAKICAgICAgICAgICAgICAgICBPQkpFQ1QgbXRlRXZlbnRTZXRDb250ZXh0TmFtZVdpbGRjYXJkCiAgICAgICAgICAgICAgICAgTUlOLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICAgICAgICAgICAgICAgREVTQ1JJUFRJT04KLQotCiAgICAgICAgICAgICAgICAgICAgICAgICAiV3JpdGUgYWNjZXNzIGlzIG5vdCByZXF1aXJlZCwgdGh1cyBhbGxvd2luZwogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSBub3QgdG8gaW1wbGVtZW50IHdpbGRjYXJkaW5nLiIKLQogICAgICAgICA6Oj0geyBkaXNtYW5FdmVudE1JQkNvbXBsaWFuY2VzIDEgfQogCiAtLSBVbml0cyBvZiBDb25mb3JtYW5jZQpAQCAtMTgzMiw3ICsxNzY5LDYgQEAKIGRpc21hbkV2ZW50VHJpZ2dlckdyb3VwIE9CSkVDVC1HUk9VUAogICAgICAgICBPQkpFQ1RTIHsKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRmFpbHVyZXMsCi0KICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyQ29tbWVudCwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGVzdCwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyU2FtcGxlVHlwZSwKQEAgLTE4NDYsNyArMTc4Miw2IEBACiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlck9iamVjdHMsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckVuYWJsZWQsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckVudHJ5U3RhdHVzLAotCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlELAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRFdpbGRjYXJkLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRFR5cGUsCkBAIC0xODU2LDkgKzE3OTEsNiBAQAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFeGlzdGVuY2VFdmVudE93bmVyLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFeGlzdGVuY2VFdmVudCwKLQotCi0KICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyQm9vbGVhbkNvbXBhcmlzb24sCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5WYWx1ZSwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyQm9vbGVhblN0YXJ0dXAsCkBAIC0xODY2LDcgKzE3OTgsNiBAQAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJCb29sZWFuT2JqZWN0cywKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyQm9vbGVhbkV2ZW50T3duZXIsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5FdmVudCwKLQogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRTdGFydHVwLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzT3duZXIsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZE9iamVjdHMsCkBAIC0xOTAyLDE3ICsxODMzLDEzIEBACiBkaXNtYW5FdmVudEV2ZW50R3JvdXAgT0JKRUNULUdST1VQCiAgICAgICAgIE9CSkVDVFMgewogICAgICAgICAgICAgICAgIG10ZUV2ZW50RmFpbHVyZXMsCi0KICAgICAgICAgICAgICAgICBtdGVFdmVudENvbW1lbnQsCiAgICAgICAgICAgICAgICAgbXRlRXZlbnRBY3Rpb25zLAogICAgICAgICAgICAgICAgIG10ZUV2ZW50RW5hYmxlZCwKICAgICAgICAgICAgICAgICBtdGVFdmVudEVudHJ5U3RhdHVzLAotCi0KICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvbiwKICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvbk9iamVjdHNPd25lciwKICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvbk9iamVjdHMsCi0KICAgICAgICAgICAgICAgICBtdGVFdmVudFNldE9iamVjdCwKICAgICAgICAgICAgICAgICBtdGVFdmVudFNldE9iamVjdFdpbGRjYXJkLAogICAgICAgICAgICAgICAgIG10ZUV2ZW50U2V0VmFsdWUsCmRpZmYgLS1naXQgYS9taWJzL0RJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQgYi9taWJzL0RJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQKaW5kZXggNDk5ZWU4Ni4uZjczZTViZiAxMDA2NDQKLS0tIGEvbWlicy9ESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0CisrKyBiL21pYnMvRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dApAQCAtMjksNyArMjksNiBAQAogICAgICAgICAgICAgICAgICAgICBQdWJsaXNoZWQgYXMgUkZDIDI5ODIiCiAgICAgOjo9IHsgbWliLTIgOTAgfQogCi0KIGRpc21hbkV4cHJlc3Npb25NSUJPYmplY3RzIE9CSkVDVCBJREVOVElGSUVSIDo6PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRpc21hbkV4cHJlc3Npb25NSUIgMSB9CiAKQEAgLTQxLDcgKzQwLDYgQEAKIC0tIFJlc291cmNlIENvbnRyb2wKIC0tCiAKLQogZXhwUmVzb3VyY2VEZWx0YU1pbmltdW0gT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKC0xIHwgMS4uNjAwKQogICAgIFVOSVRTICAgICAgICJzZWNvbmRzIgpAQCAtOTAsNyArODgsNiBAQAogICAgICBVbmxlc3MgZXhwbGljaXRseSByZXNvdXJjZSBsaW1pdGVkLCBhIHN5c3RlbSdzIHZhbHVlIGZvcgogICAgICB0aGlzIG9iamVjdCBzaG91bGQgYmUgMC4KIAotCiAgICAgIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbCBub3QgZWxpbWluYXRlIG9yIGluaGliaXQgZXhpc3RpbmcgZGVsdGEKICAgICAgd2lsZGNhcmQgaW5zdGFuY2Ugb2JqZWN0cyBidXQgd2lsbCBwcmV2ZW50IHRoZSBjcmVhdGlvbiBvZiBtb3JlCiAgICAgIHN1Y2ggb2JqZWN0cy4KQEAgLTEzOSw3ICsxMzYsNiBAQAogLS0KIAogZXhwRXhwcmVzc2lvblRhYmxlIE9CSkVDVC1UWVBFCi0KICAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBFeHBFeHByZXNzaW9uRW50cnkKICAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKQEAgLTMzNSw3ICszMzEsNiBAQAogCiAgICAgICAgICAgSWYgZWl0aGVyIHNpZGUgaXMgSXBBZGRyZXNzLCB1c2UgdGhhdC4KIAotCiAgICAgICAgICAgSWYgZWl0aGVyIHNpZGUgaXMgVGltZVRpY2tzLCB1c2UgdGhhdC4KIAogICAgICAgICAgIElmIGVpdGhlciBzaWRlIGlzIENvdW50ZXIzMiwgdXNlIHRoYXQuCkBAIC0zODQsNyArMzc5LDYgQEAKICAgICAgICAgICBzdW0KICAgICAgICAgICBleGlzdHMKIAotCiAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZGVmaW5pdGlvbnMgaW5kaWNhdGUgdGhlaXIgcGFyYW1ldGVycyBieQogICAgICBuYW1pbmcgdGhlIGRhdGEgdHlwZSBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSBwYXJhbWV0ZXIncyBwb3NpdGlvbgogICAgICBpbiB0aGUgcGFyYW1ldGVyIGxpc3QuICBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb2YgdGhlIHR5cGUgaW5kaWNhdGVkCkBAIC00MzMsNyArNDI3LDYgQEAKICAgICAgZXhpc3RzKGFueVR5cGVPYmplY3QpIC0gdmVyaWZpZXMgdGhlIG9iamVjdCBpbnN0YW5jZSBleGlzdHMuIEEKICAgICAgcmV0dXJuIHZhbHVlIG9mIDAgaW5kaWNhdGVzIE5vU3VjaEluc3RhbmNlIChpLmUuIGJvb2xlYW4KICAgICAgZmFsc2UpLiIKLQogICAgIDo6PSB7IGV4cEV4cHJlc3Npb25FbnRyeSAzIH0KIAogZXhwRXhwcmVzc2lvblZhbHVlVHlwZSBPQkpFQ1QtVFlQRQpAQCAtNTMxLDcgKzUyNCw2IEBACiAgICAgOjo9IHsgZXhwRXhwcmVzc2lvbkVudHJ5IDcgfQogCiBleHBFeHByZXNzaW9uRXJyb3JzIE9CSkVDVC1UWVBFCi0KICAgICBTWU5UQVggICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgICBjdXJyZW50CkBAIC01ODAsNyArNTcyLDYgQEAKICAgICAgZXJyb3IgZm9yIHRoYXQgZXhwcmVzc2lvbiBhcyByZWZsZWN0ZWQgYnkgdGhlIGVycm9yIGNvZGVzCiAgICAgIGRlZmluZWQgZm9yIGV4cEVycm9yQ29kZS4iCiAgICAgSU5ERVggICAgICAgeyBleHBFeHByZXNzaW9uT3duZXIsIGV4cEV4cHJlc3Npb25OYW1lIH0KLQogICAgIDo6PSB7IGV4cEVycm9yVGFibGUgMSB9CiAKIEV4cEVycm9yRW50cnkgOjo9IFNFUVVFTkNFIHsKQEAgLTY3OCw3ICs2NjksNiBAQAogZXhwRXJyb3JJbnN0YW5jZSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIE9CSkVDVCBJREVOVElGSUVSCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5Ci0KICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgIlRoZSBleHBWYWx1ZUluc3RhbmNlIGJlaW5nIGV2YWx1YXRlZCB3aGVuIHRoZSBlcnJvcgpAQCAtNzI3LDcgKzcxNyw2IEBACiAgICAgZXhwT2JqZWN0SW5kZXggICAgICAgICAgICAgICAgICAgICBVbnNpZ25lZDMyLAogICAgIGV4cE9iamVjdElEICAgICAgICAgICAgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIsCiAgICAgZXhwT2JqZWN0SURXaWxkY2FyZCAgICAgICAgICAgICAgICBUcnV0aFZhbHVlLAotCiAgICAgZXhwT2JqZWN0U2FtcGxlVHlwZSAgICAgICAgICAgICAgICBJTlRFR0VSLAogICAgIGV4cE9iamVjdERlbHRhRGlzY29udGludWl0eUlEICAgICAgT0JKRUNUIElERU5USUZJRVIsCiAgICAgZXhwT2JqZWN0RGlzY29udGludWl0eUlEV2lsZGNhcmQgICBUcnV0aFZhbHVlLApAQCAtNzc2LDcgKzc2NSw2IEBACiAgICAgICAgICJBIHRydWUgdmFsdWUgaW5kaWNhdGVzIHRoZSBleHBPYmplY0lEIG9mIHRoaXMgcm93IGlzIGEgd2lsZGNhcmQKICAgICAgICAgb2JqZWN0LiBGYWxzZSBpbmRpY2F0ZXMgdGhhdCBleHBPYmplY3RJRCBpcyBmdWxseSBpbnN0YW5jZWQuCiAgICAgICAgIElmIGFsbCBleHBPYmplY3RXaWxkY2FyZCB2YWx1ZXMgZm9yIGEgZ2l2ZW4gZXhwcmVzc2lvbiBhcmUgRkFMU0UsCi0KICAgICAgICAgZXhwRXhwcmVzc2lvblByZWZpeCB3aWxsIHJlZmxlY3QgYSBzY2FsYXIgb2JqZWN0IChpLmUuIHdpbGwKICAgICAgICAgYmUgMC4wKS4KIApAQCAtODI1LDcgKzgxMyw2IEBACiAgICAgIERhdGVBbmRUaW1lIG9iamVjdCB0aGF0IGluZGljYXRlcyBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHZhbHVlCiAgICAgIGF0IGV4cE9iamVjdElELgogCi0KICAgICAgVGhpcyBvYmplY3QgaXMgaW5zdGFudGlhdGVkIG9ubHkgaWYgZXhwT2JqZWN0U2FtcGxlVHlwZSBpcwogICAgICAnZGVsdGFWYWx1ZScgb3IgJ2NoYW5nZWRWYWx1ZScuCiAKQEAgLTg3NCw3ICs4NjEsNiBAQAogICAgIERFRlZBTCAgICAgIHsgdGltZVRpY2tzIH0KICAgICAgOjo9IHsgZXhwT2JqZWN0RW50cnkgNyB9CiAKLQogZXhwT2JqZWN0Q29uZGl0aW9uYWwgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBPQkpFQ1QgSURFTlRJRklFUgogICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCkBAIC05MTAsNyArODk2LDYgQEAKICAgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKICAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgICBERVNDUklQVElPTgotCiAgICAgICJBIHRydWUgdmFsdWUgaW5kaWNhdGVzIHRoZSBleHBPYmplY3RDb25kaXRpb25hbCBvZiB0aGlzIHJvdyBpcwogICAgICBhIHdpbGRjYXJkIG9iamVjdC4gRmFsc2UgaW5kaWNhdGVzIHRoYXQgZXhwT2JqZWN0Q29uZGl0aW9uYWwgaXMKICAgICAgZnVsbHkgaW5zdGFuY2VkLgpAQCAtOTIzLDcgKzkwOCw2IEBACiBleHBPYmplY3RFbnRyeVN0YXR1cyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFJvd1N0YXR1cwogICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCi0KICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgIlRoZSBjb250cm9sIHRoYXQgYWxsb3dzIGNyZWF0aW9uL2RlbGV0aW9uIG9mIGVudHJpZXMuCkBAIC0xMDIxLDcgKzEwMDUsNiBAQAogZXhwVmFsdWVDb3VudGVyMzJWYWwgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKLQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAiVGhlIHZhbHVlIHdoZW4gZXhwRXhwcmVzc2lvblZhbHVlVHlwZSBpcyAnY291bnRlcjMyJy4iCkBAIC0xMDYwLDcgKzEwNDMsNyBAQAogICAgIDo6PSB7IGV4cFZhbHVlRW50cnkgNiB9CiAKIGV4cFZhbHVlT2N0ZXRTdHJpbmdWYWwgT0JKRUNULVRZUEUKLSAgICBTWU5UQVggICAgICBPQ1RFVCBTVFJJTkcgLS0gKFNJWkUgKDAuLjY1NTM2KSkKKyAgICBTWU5UQVggICAgICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDAuLjY1NTM2KSkKICAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTEwNzAsNyArMTA1Myw2IEBACiBleHBWYWx1ZU9pZFZhbCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIE9CSkVDVCBJREVOVElGSUVSCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5Ci0KICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgIlRoZSB2YWx1ZSB3aGVuIGV4cEV4cHJlc3Npb25WYWx1ZVR5cGUgaXMgJ29iamVjdElkJy4iCkBAIC0xMTM2LDcgKzExMTgsNiBAQAogICAgICBXUklURS1TWU5UQVggICBJTlRFR0VSIHsgZmFsc2UoMikgfQogICAgICBERVNDUklQVElPTgogICAgICAgICAgICJJbXBsZW1lbnRhdGlvbiBuZWVkIG5vdCBhbGxvdyBkZWx0YXMgd2lsZGNhcmRzLiIKLQogICAgICA6Oj0geyBkaXNtYW5FeHByZXNzaW9uTUlCQ29tcGxpYW5jZXMgMSB9CiAKIC0tIFVuaXRzIG9mIENvbmZvcm1hbmNlCkBAIC0xMTYzLDEyICsxMTQ0LDEwIEBACiAgICAgICAgICAgZXhwRXhwcmVzc2lvblByZWZpeCwKICAgICAgICAgICBleHBFeHByZXNzaW9uRXJyb3JzLAogICAgICAgICAgIGV4cEV4cHJlc3Npb25FbnRyeVN0YXR1cywKLQogICAgICAgICAgIGV4cEVycm9yVGltZSwKICAgICAgICAgICBleHBFcnJvckluZGV4LAogICAgICAgICAgIGV4cEVycm9yQ29kZSwKICAgICAgICAgICBleHBFcnJvckluc3RhbmNlLAotCiAgICAgICAgICAgZXhwT2JqZWN0SUQsCiAgICAgICAgICAgZXhwT2JqZWN0SURXaWxkY2FyZCwKICAgICAgICAgICBleHBPYmplY3RTYW1wbGVUeXBlLApAQCAtMTIwMSw1ICsxMTgwLDMgQEAKICAgICAgOjo9IHsgZGlzbWFuRXhwcmVzc2lvbk1JQkdyb3VwcyAzIH0KIAogRU5ECi0KLQpkaWZmIC0tZ2l0IGEvbWlicy9JQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCLnR4dCBiL21pYnMvSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQi50eHQKaW5kZXggMTY4MGFjZS4uNzk5NWZjNCAxMDA2NDQKLS0tIGEvbWlicy9JQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCLnR4dAorKysgYi9taWJzL0lBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIudHh0CkBAIC02LDI0ICs2LDM3IEBACiAgICAgICBURVhUVUFMLUNPTlZFTlRJT04gICAgICAgICAgICAgICAgICBGUk9NIFNOTVB2Mi1UQzsKIAogICBpYW5hQWRkcmVzc0ZhbWlseU51bWJlcnMgTU9EVUxFLUlERU5USVRZCi0gICAgICBMQVNULVVQREFURUQgIjIwMDIwMzE0MDAwMFoiICAtLSBNYXJjaCAxNCwgMjAwMgorICAgICAgTEFTVC1VUERBVEVEICIyMDEzMDkyNTAwMDBaIiAgLS0gU2VwdGVtYmVyIDI1LCAyMDEzCiAgICAgICBPUkdBTklaQVRJT04gIklBTkEiCiAgICAgICBDT05UQUNULUlORk8KICAgICAgICAgICAiUG9zdGFsOiAgICBJbnRlcm5ldCBBc3NpZ25lZCBOdW1iZXJzIEF1dGhvcml0eQogICAgICAgICAgICAgICAgICAgICAgIEludGVybmV0IENvcnBvcmF0aW9uIGZvciBBc3NpZ25lZCBOYW1lcwogCQkgICAgICBhbmQgTnVtYmVycwotICAgICAgICAgICAgICAgICAgICAgIDQ2NzYgQWRtaXJhbHR5IFdheSwgU3VpdGUgMzMwCi0gICAgICAgICAgICAgICAgICAgICAgTWFyaW5hIGRlbCBSZXksIENBIDkwMjkyLTY2MDEKKyAgICAgICAgICAgICAgICAgICAgICAxMjAyNSBXYXRlcmZyb250IERyaXZlLCBTdWl0ZSAzMDAKKyAgICAgICAgICAgICAgICAgICAgICBMb3MgQW5nZWxlcywgQ0EgOTAwOTQtMjUzNgogICAgICAgICAgICAgICAgICAgICAgIFVTQQogCi0gICAgICAgICAgVGVsOiAgICArMSAgMzEwLTgyMy05MzU4Ci0gICAgICAgICAgRS1NYWlsOiBpYW5hQGlhbmEub3JnIgorICAgICAgICAgIFRlbDogICAgKzEgIDMxMC0zMDEtNTgwMAorICAgICAgICAgIEUtTWFpbDogaWFuYSZpYW5hLm9yZyIKICAgICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgIlRoZSBNSUIgbW9kdWxlIGRlZmluZXMgdGhlIEFkZHJlc3NGYW1pbHlOdW1iZXJzCiAgICAgICAgICAgdGV4dHVhbCBjb252ZW50aW9uLiIKIAogICAgICAgLS0gcmV2aXNpb24gaGlzdG9yeQogCisgICAgICBSRVZJU0lPTiAgICAgIjIwMTMwOTI1MDAwMFoiICAtLSBTZXB0ZW1iZXIgMjUsIDIwMTMKKyAgICAgIERFU0NSSVBUSU9OICAiRml4ZWQgbGFiZWxzIGZvciAxNjM4OS0xNjM5MC4iCisKKyAgICAgIFJFVklTSU9OICAgICAiMjAxMzA3MTYwMDAwWiIgIC0tIEp1bHkgMTYsIDIwMTMKKyAgICAgIERFU0NSSVBUSU9OICAiRml4ZWQgbGFiZWxzIGZvciAxNjM4OS0xNjM5MC4iCisKKyAgICAgIFJFVklTSU9OICAgICAiMjAxMzA2MjYwMDAwWiIgIC0tIEp1bmUgMjYsIDIwMTMKKyAgICAgIERFU0NSSVBUSU9OICAiQWRkZWQgYXNzaWdubWVudHMgMjYtMjguIgorCisgICAgICBSRVZJU0lPTiAgICAgIjIwMTMwNjE4MDAwMFoiICAtLSBKdW5lIDE4LCAyMDEzCisgICAgICBERVNDUklQVElPTiAgIkFkZGVkIGFzc2lnbm1lbnRzIDE2Mzg0LTE2MzkwLiBBc3NpZ25tZW50IAorICAgICAgICAgICAgICAgICAgICAyNSBhZGRlZCBpbiAyMDA3IHJldmlzaW9uLiIKKwogICAgICAgUkVWSVNJT04gICAgICIyMDAyMDMxNDAwMDBaIiAgLS0gTWFyY2ggMTQsIDIwMDIKICAgICAgIERFU0NSSVBUSU9OICAiQWRkcmVzc0ZhbWlseU51bWJlcnMgYXNzaWdubWVudCAyMiB0byAKICAgICAgICAgICAgICAgICAgICBmaWJyZUNoYW5uZWxXV1BOLiBBZGRyZXNzRmFtaWx5TnVtYmVycyAKQEAgLTg2LDEwICs5OSwyNiBAQAogICAgICAgICAgIGZpYnJlQ2hhbm5lbFdXUE4oMjIpLCAgLS0gRmlicmUgQ2hhbm5lbCBXb3JsZC1XaWRlIFBvcnQgTmFtZSAKICAgICAgICAgICBmaWJyZUNoYW5uZWxXV05OKDIzKSwgIC0tIEZpYnJlIENoYW5uZWwgV29ybGQtV2lkZSBOb2RlIE5hbWUKICAgICAgICAgICBnd2lkKDI0KSwgICAgLS0gR2F0ZXdheSBJZGVudGlmaWVyIAorICAgICAgICAgIGFmaSgyNSksICAtLSBBRkkgZm9yIEwyVlBOIGluZm9ybWF0aW9uCisgICAgICAgICAgbXBsc1RwU2VjdGlvbkVuZHBvaW50SWRlbnRpZmllcigyNiksICAtLSBNUExTLVRQIFNlY3Rpb24gRW5kcG9pbnQgSWRlbnRpZmllcgorICAgICAgICAgIG1wbHNUcExzcEVuZHBvaW50SWRlbnRpZmllcigyNyksICAtLSBNUExTLVRQIExTUCBFbmRwb2ludCBJZGVudGlmaWVyCisgICAgICAgICAgbXBsc1RwUHNldWRvd2lyZUVuZHBvaW50SWRlbnRpZmllcigyOCksICAtLSBNUExTLVRQIFBzZXVkb3dpcmUgRW5kcG9pbnQgSWRlbnRpZmllcgorICAgICAgICAgIGVpZ3JwQ29tbW9uU2VydmljZUZhbWlseSgxNjM4NCksICAtLSBFSUdSUCBDb21tb24gU2VydmljZSBGYW1pbHkKKyAgICAgICAgICBlaWdycElwdjRTZXJ2aWNlRmFtaWx5KDE2Mzg1KSwgIC0tIEVJR1JQIElQdjQgU2VydmljZSBGYW1pbHkKKyAgICAgICAgICBlaWdycElwdjZTZXJ2aWNlRmFtaWx5KDE2Mzg2KSwgIC0tIEVJR1JQIElQdjYgU2VydmljZSBGYW1pbHkKKyAgICAgICAgICBsaXNwQ2Fub25pY2FsQWRkcmVzc0Zvcm1hdCgxNjM4NyksICAtLSBMSVNQIENhbm9uaWNhbCBBZGRyZXNzIEZvcm1hdCAoTENBRikKKyAgICAgICAgICBiZ3BMcygxNjM4OCksICAtLSBCR1AtTFMKKyAgICAgICAgICBmb3J0eWVpZ2h0Qml0TWFjQml0TWFjKDE2Mzg5KSwgIC0tIDQ4LWJpdCBNQUMKKyAgICAgICAgICBzaXh0eWZvdXJCaXRNYWMoMTYzOTApLCAgLS0gNjQtYml0IE1BQworICAgICAgICAgIG91aSgxNjM5MSksICAtLSBPVUkKKyAgICAgICAgICBtYWMyNCgxNjM5MiksICAtLSBNQUMvMjQKKyAgICAgICAgICBtYWM0MCgxNjM5MyksICAtLSBNQUMvNDAKKyAgICAgICAgICBpcHY2NjQoMTYzOTQpLCAgLS0gSVB2Ni82NAorICAgICAgICAgIHJCcmlkZ2VQb3J0SUQoMTYzOTUpLCAgLS0gUkJyaWRnZSBQb3J0IElECiAgICAgICAgICAgcmVzZXJ2ZWQoNjU1MzUpCiAKICAgICAgICAgICBSZXF1ZXN0cyBmb3IgbmV3IHZhbHVlcyBzaG91bGQgYmUgbWFkZSB0byBJQU5BIHZpYQotICAgICAgICAgIGVtYWlsIChpYW5hQGlhbmEub3JnKS4iCisgICAgICAgICAgZW1haWwgKGlhbmEmaWFuYS5vcmcpLiIKICAgICAgIFNZTlRBWCAgSU5URUdFUiB7CiAgICAgICAgICAgICAgICAgICBvdGhlcigwKSwKICAgICAgICAgICAgICAgICAgIGlwVjQoMSksCkBAIC0xMTYsNiArMTQ1LDIyIEBACiAgICAgICAgICAgICAgICAgICBmaWJyZUNoYW5uZWxXV1BOKDIyKSwKICAgICAgICAgICAgICAgICAgIGZpYnJlQ2hhbm5lbFdXTk4oMjMpLAogICAgICAgICAgICAgICAgICAgZ3dpZCgyNCksCisgICAgICAgICAgICAgICAgICBhZmkoMjUpLAorICAgICAgICAgICAgICAgICAgbXBsc1RwU2VjdGlvbkVuZHBvaW50SWRlbnRpZmllcigyNiksCisgICAgICAgICAgICAgICAgICBtcGxzVHBMc3BFbmRwb2ludElkZW50aWZpZXIoMjcpLAorICAgICAgICAgICAgICAgICAgbXBsc1RwUHNldWRvd2lyZUVuZHBvaW50SWRlbnRpZmllcigyOCksCisgICAgICAgICAgICAgICAgICBlaWdycENvbW1vblNlcnZpY2VGYW1pbHkoMTYzODQpLAorICAgICAgICAgICAgICAgICAgZWlncnBJcHY0U2VydmljZUZhbWlseSgxNjM4NSksCisgICAgICAgICAgICAgICAgICBlaWdycElwdjZTZXJ2aWNlRmFtaWx5KDE2Mzg2KSwKKyAgICAgICAgICAgICAgICAgIGxpc3BDYW5vbmljYWxBZGRyZXNzRm9ybWF0KDE2Mzg3KSwKKyAgICAgICAgICAgICAgICAgIGJncExzKDE2Mzg4KSwKKyAgICAgICAgICAgICAgICAgIGZvcnR5ZWlnaHRCaXRNYWMoMTYzODkpLAorICAgICAgICAgICAgICAgICAgc2l4dHlmb3VyQml0TWFjKDE2MzkwKSwKKyAgICAgICAgICAgICAgICAgIG91aSgxNjM5MSksCisgICAgICAgICAgICAgICAgICBtYWMyNCgxNjM5MiksCisgICAgICAgICAgICAgICAgICBtYWM0MCgxNjM5MyksCisgICAgICAgICAgICAgICAgICBpcHY2NjQoMTYzOTQpLAorICAgICAgICAgICAgICAgICAgckJyaWRnZVBvcnRJRCgxNjM5NSksCiAgICAgICAgICAgICAgICAgICByZXNlcnZlZCg2NTUzNSkKICAgICAgICAgICAgICAgfQogICAgICAgRU5ECmRpZmYgLS1naXQgYS9taWJzL0lBTkEtTEFOR1VBR0UtTUlCLnR4dCBiL21pYnMvSUFOQS1MQU5HVUFHRS1NSUIudHh0CmluZGV4IGIwYWQzZWQuLjRiOTdiZGQgMTAwNjQ0Ci0tLSBhL21pYnMvSUFOQS1MQU5HVUFHRS1NSUIudHh0CisrKyBiL21pYnMvSUFOQS1MQU5HVUFHRS1NSUIudHh0CkBAIC01LDE3ICs1LDE3IEBACiAgICAgICAgIEZST00gU05NUHYyLVNNSTsKIAogaWFuYUxhbmd1YWdlcyBNT0RVTEUtSURFTlRJVFkKLSAgICBMQVNULVVQREFURUQgIjIwMDAwNTEwMDAwMFoiICAtLSBNYXkgMTAsIDIwMDAKKyAgICBMQVNULVVQREFURUQgIjIwMTQwNTIyMDAwMFoiIC0tIE1heSAyMiwgMjAxNAogICAgIE9SR0FOSVpBVElPTiAiSUFOQSIKICAgICBDT05UQUNULUlORk8KICAgICAgICAgIkludGVybmV0IEFzc2lnbmVkIE51bWJlcnMgQXV0aG9yaXR5IChJQU5BKQogCiAgICAgICAgICBQb3N0YWw6IElDQU5OCi0gICAgICAgICAgICAgICAgIDQ2NzYgQWRtaXJhbHR5IFdheSwgU3VpdGUgMzMwCi0gICAgICAgICAgICAgICAgIE1hcmluYSBkZWwgUmV5LCBDQSA5MDI5MgorICAgICAgICAgICAgICAgICAxMjAyNSBXYXRlcmZyb250IERyaXZlLCBTdWl0ZSAzMDAKKyAgICAgICAgICAgICAgICAgTG9zIEFuZ2VsZXMsIENBIDkwMDk0LTI1MzYKIAotICAgICAgICAgVGVsOiAgICArMSAzMTAgODIzIDkzNTggeDIwCi0gICAgICAgICBFLU1haWw6IGlhbmFAaWFuYS5vcmciCisgICAgICAgICBUZWw6ICAgICsxIDMxMC0zMDEtNTgwMAorICAgICAgICAgRS1NYWlsOiBpYW5hJmlhbmEub3JnIgogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICJUaGUgTUlCIG1vZHVsZSByZWdpc3RlcnMgb2JqZWN0IGlkZW50aWZpZXIgdmFsdWVzIGZvcgogICAgICAgICAgd2VsbC1rbm93biBwcm9ncmFtbWluZyBhbmQgc2NyaXB0aW5nIGxhbmd1YWdlcy4gRXZlcnkKQEAgLTM5LDYgKzM5LDkgQEAKIAogIC0tIFJldmlzaW9uIGxvZywgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyCiAKKyAgICBSRVZJU0lPTiAgICAiMjAxNDA1MjIwMDAwWiIgLS0gTWF5IDIyLCAyMDE0CisgICAgREVTQ1JJUFRJT04gIlVwZGF0ZWQgY29udGFjdCBpbmZvLiIKKwogICAgIFJFVklTSU9OICAgICIyMDAwMDUxMDAwMDBaIiAtLSBNYXkgMTAsIDIwMDAKICAgICBERVNDUklQVElPTiAiSW1wb3J0IG1pYi0yIGluc3RlYWQgb2YgZXhwZXJpbWVudGFsLCBzbyB0aGF0CiAgICAgICAgICAgICAgICAgIHRoaXMgbW9kdWxlIGNvbXBpbGVzIgpkaWZmIC0tZ2l0IGEvbWlicy9JQU5BLVJUUFJPVE8tTUlCLnR4dCBiL21pYnMvSUFOQS1SVFBST1RPLU1JQi50eHQKaW5kZXggNTdlNzNhMi4uZjdiYzFlYiAxMDA2NDQKLS0tIGEvbWlicy9JQU5BLVJUUFJPVE8tTUlCLnR4dAorKysgYi9taWJzL0lBTkEtUlRQUk9UTy1NSUIudHh0CkBAIC0xLDQgKzEsMyBAQAotCiBJQU5BLVJUUFJPVE8tTUlCIERFRklOSVRJT05TIDo6PSBCRUdJTgogCiBJTVBPUlRTCkBAIC02LDE2ICs1LDE2IEBACiAgICAgVEVYVFVBTC1DT05WRU5USU9OICAgICAgICAgICAgICAgRlJPTSBTTk1QdjItVEM7CiAKIGlhbmFSdFByb3RvTUlCICBNT0RVTEUtSURFTlRJVFkKLSAgICBMQVNULVVQREFURUQgIjIwMDAwOTI2MDAwMFoiIC0tIFNlcHRlbWJlciAyNiwgMjAwMAorICAgIExBU1QtVVBEQVRFRCAiMjAxMjA4MzAwMDAwWiIgLS0gQXVndXN0IDMwLCAyMDEyCiAgICAgT1JHQU5JWkFUSU9OICJJQU5BIgogICAgIENPTlRBQ1QtSU5GTwogICAgICAgICAgICAgIiBJbnRlcm5ldCBBc3NpZ25lZCBOdW1iZXJzIEF1dGhvcml0eQogICAgICAgICAgICAgICBJbnRlcm5ldCBDb3Jwb3JhdGlvbiBmb3IgQXNzaWduZWQgTmFtZXMgYW5kIE51bWJlcnMKLSAgICAgICAgICAgICAgNDY3NiBBZG1pcmFsdHkgV2F5LCBTdWl0ZSAzMzAKLSAgICAgICAgICAgICAgTWFyaW5hIGRlbCBSZXksIENBIDkwMjkyLTY2MDEKKyAgICAgICAgICAgICAgMTIwMjUgV2F0ZXJmcm9udCBEcml2ZSwgU3VpdGUgMzAwCisgICAgICAgICAgICAgIExvcyBBbmdlbGVzLCBDQSA5MDA5NC0yNTM2CiAKLSAgICAgICAgICAgICAgUGhvbmU6ICsxIDMxMCA4MjMgOTM1OAotICAgICAgICAgICAgICBFTWFpbDogaWFuYUBpYW5hLm9yZyIKKyAgICAgICAgICAgICAgUGhvbmU6ICsxIDMxMCAzMDEgNTgwMAorICAgICAgICAgICAgICBFTWFpbDogaWFuYSZpYW5hLm9yZyIKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIlRoaXMgTUlCIG1vZHVsZSBkZWZpbmVzIHRoZSBJQU5BaXBSb3V0ZVByb3RvY29sIGFuZAogICAgICAgICAgICAgSUFOQWlwTVJvdXRlUHJvdG9jb2wgdGV4dHVhbCBjb252ZW50aW9ucyBmb3IgdXNlIGluIE1JQnMKQEAgLTI5LDE1ICsyOCwxOSBAQAogICAgICAgICAgICAgd2lsbCBiZSBzZWxlY3RlZCBieSB0aGUgSUVTRyBBcmVhIERpcmVjdG9yKHMpIG9mIHRoZSBSb3V0aW5nCiAgICAgICAgICAgICBBcmVhLiIKIAorICAgIFJFVklTSU9OICAgICAiMjAxMjA4MzAwMDAwWiIgIC0tIEF1Z3VzdCAzMCwgMjAxMiAKKyAgICBERVNDUklQVElPTiAgIkFkZGVkIGRoY3AoMTkpLiIKKworICAgIFJFVklTSU9OICAgICAiMjAxMTA3MjIwMDAwWiIgIC0tIEp1bHkgMjIsIDIwMTEgCisgICAgREVTQ1JJUFRJT04gICJBZGRlZCBycGwoMTgpIC4iCisKICAgICBSRVZJU0lPTiAgICAgIjIwMDAwOTI2MDAwMFoiICAtLSBTZXB0ZW1iZXIgMjYsIDIwMDAgCiAgICAgREVTQ1JJUFRJT04gICJPcmlnaW5hbCB2ZXJzaW9uLCBwdWJsaXNoZWQgaW4gY29vcmRpbmF0aW9uCiAgICAgICAgICAgICAgICAgIHdpdGggUkZDIDI5MzIuIgotCiAgICAgOjo9IHsgbWliLTIgODQgfQogCiBJQU5BaXBSb3V0ZVByb3RvY29sIDo6PSBURVhUVUFMLUNPTlZFTlRJT04KICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKLQogICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJBIG1lY2hhbmlzbSBmb3IgbGVhcm5pbmcgcm91dGVzLiAgSW5jbHVzaW9uIG9mIHZhbHVlcyBmb3IKICAgICAgICAgICAgIHJvdXRpbmcgcHJvdG9jb2xzIGlzIG5vdCBpbnRlbmRlZCB0byBpbXBseSB0aGF0IHRob3NlCkBAIC02Myw3ICs2Niw5IEBACiAgICAgICAgICAgICAgICAgYmdwICAgICAgICAoMTQpLCAtLSBCb3JkZXIgR2F0ZXdheSBQcm90b2NvbAogICAgICAgICAgICAgICAgIGlkcHIgICAgICAgKDE1KSwgLS0gSW50ZXJEb21haW4gUG9saWN5IFJvdXRpbmcKICAgICAgICAgICAgICAgICBjaXNjb0VpZ3JwICgxNiksIC0tIENpc2NvIEVJR1JQCi0gICAgICAgICAgICAgICAgZHZtcnAgICAgICAoMTcpICAtLSBEVk1SUAorICAgICAgICAgICAgICAgIGR2bXJwICAgICAgKDE3KSwgLS0gRFZNUlAKKyAgICAgICAgICAgICAgICBycGwgICAgICAgICgxOCksIC0tIFJQTCBbUkZDLWlldGYtcm9sbC1ycGwtMTldCisgICAgICAgICAgICAgICAgZGhjcCAgICAgICAoMTkpICAtLSBESENQIFtSRkMyMTMyXQogICAgICAgICAgICAgICAgfQogCiBJQU5BaXBNUm91dGVQcm90b2NvbCA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCkBAIC04OCw1ICs5MywzIEBACiAgICAgICAgICAgICAgICB9CiAKIEVORAotCi0KZGlmZiAtLWdpdCBhL21pYnMvSUFOQWlmVHlwZS1NSUIudHh0IGIvbWlicy9JQU5BaWZUeXBlLU1JQi50eHQKaW5kZXggNTQyZTI0Ny4uMDI3YTE1MyAxMDA2NDQKLS0tIGEvbWlicy9JQU5BaWZUeXBlLU1JQi50eHQKKysrIGIvbWlicy9JQU5BaWZUeXBlLU1JQi50eHQKQEAgLTUsMjEgKzUsMTIzIEBACiAgICAgICAgVEVYVFVBTC1DT05WRU5USU9OICAgICAgICAgIEZST00gU05NUHYyLVRDOwogCiAgICBpYW5haWZUeXBlIE1PRFVMRS1JREVOVElUWQotICAgICAgIExBU1QtVVBEQVRFRCAiMjAwNTEwMTAwMDAwWiIgIC0tIE9jdG9iZXIgMTAsIDIwMDUKKyAgICAgICBMQVNULVVQREFURUQgIjIwMTQwNzAzMDAwMFoiIC0tIEp1bHkgMywgMjAxNAogICAgICAgIE9SR0FOSVpBVElPTiAiSUFOQSIKICAgICAgICBDT05UQUNULUlORk8gIiAgICAgICAgSW50ZXJuZXQgQXNzaWduZWQgTnVtYmVycyBBdXRob3JpdHkKIAogICAgICAgICAgICAgICAgICAgICAgUG9zdGFsOiBJQ0FOTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Njc2IEFkbWlyYWx0eSBXYXksIFN1aXRlIDMzMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJpbmEgZGVsIFJleSwgQ0EgOTAyOTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIwMjUgV2F0ZXJmcm9udCBEcml2ZSwgU3VpdGUgMzAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvcyBBbmdlbGVzLCBDQSA5MDA5NC0yNTM2CiAKLSAgICAgICAgICAgICAgICAgICAgIFRlbDogICAgKzEgMzEwIDgyMyA5MzU4Ci0gICAgICAgICAgICAgICAgICAgICBFLU1haWw6IGlhbmFAaWFuYS5vcmciCi0KKyAgICAgICAgICAgICAgICAgICAgIFRlbDogICAgKzEgMzEwLTMwMS01ODAwCisgICAgICAgICAgICAgICAgICAgICBFLU1haWw6IGlhbmEmaWFuYS5vcmciCiAgICAgICAgREVTQ1JJUFRJT04gICJUaGlzIE1JQiBtb2R1bGUgZGVmaW5lcyB0aGUgSUFOQWlmVHlwZSBUZXh0dWFsCiAgICAgICAgICAgICAgICAgICAgICBDb252ZW50aW9uLCBhbmQgdGh1cyB0aGUgZW51bWVyYXRlZCB2YWx1ZXMgb2YKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpZlR5cGUgb2JqZWN0IGRlZmluZWQgaW4gTUlCLUlJJ3MgaWZUYWJsZS4iCiAKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTQwNzAzMDAwMFoiICAtLSBKdWx5IDMsIDIwMTQKKwkgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjc3LTI3OC4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTQwNTIyMDAwMFoiIC0tIE1heSAyMiwgMjAxNAorICAgICAgIERFU0NSSVBUSU9OICAiVXBkYXRlZCBjb250YWN0IGluZm8uIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDEyMDUxNzAwMDBaIiAgLS0gTWF5IDE3LCAyMDEyCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjcyLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMjAxMTEwMDAwWiIgIC0tIEphbnVhcnkgMTEsIDIwMTIKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjY2LTI3MS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTExMjE4MDAwMFoiICAtLSBEZWNlbWJlciAxOCwgMjAxMQorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyNjMtMjY1LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMTEwMjYwMDAwWiIgIC0tIE9jdG9iZXIgMjYsIDIwMTEKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNjIuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDExMDkwNzAwMDBaIiAgLS0gU2VwdGVtYmVyIDcsIDIwMTEKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjYwIGFuZCAyNjEuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDExMDcyMjAwMDBaIiAgLS0gSnVseSAyMiwgMjAxMQorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI1OS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTEwNjAzMDAwMFoiICAtLSBKdW5lIDAzLCAyMDExCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjU4LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMDA5MjEwMDAwWiIgIC0tIFNlcHRlbWJlciAyMSwgMjAxMAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyNTYgYW5kIDI1Ny4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTAwNzIxMDAwMFoiICAtLSBKdWx5IDIxLCAyMDEwCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjU1LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMDAyMTEwMDAwWiIgIC0tIEZlYnJ1YXJ5IDExLCAyMDEwCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjU0LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMDAyMDgwMDAwWiIgIC0tIEZlYnJ1YXJ5IDA4LCAyMDEwCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDI1MiBhbmQgMjUzLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwOTA1MDYwMDAwWiIgIC0tIE1heSAwNiwgMjAwOQorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI1MS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDkwMjA2MDAwMFoiICAtLSBGZWJydWFyeSAwNiwgMjAwOQorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BdHVubmVsVHlwZSAxNS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDgxMDA5MDAwMFoiICAtLSBPY3RvYmVyIDA5LCAyMDA4CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjUwLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwODA4MTIwMDAwWiIgIC0tIEF1Z3VzdCAxMiwgMjAwOAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI0OS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDgwNzIyMDAwMFoiICAtLSBKdWx5IDIyLCAyMDA4CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDI0NyBhbmQgMjQ4LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwODA2MjQwMDAwWiIgIC0tIEp1bmUgMjQsIDIwMDgKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNDYuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA4MDUyOTAwMDBaIiAgLS0gTWF5IDI5LCAyMDA4CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjQ1LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNzA5MTMwMDAwWiIgIC0tIFNlcHRlbWJlciAxMywgMjAwNworICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyNDMgYW5kIDI0NC4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDcwNTI5MDAwMFoiICAtLSBNYXkgMjksIDIwMDcKKyAgICAgICBERVNDUklQVElPTiAgIkNoYW5nZWQgdGhlIGRlc2NyaXB0aW9uIGZvciBJQU5BaWZUeXBlIDIyOC4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDcwMzA4MDAwMFoiICAtLSBNYXJjaCAwOCwgMjAwNworICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI0Mi4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDcwMTIzMDAwMFoiICAtLSBKYW51YXJ5IDIzLCAyMDA3CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDIzOSwgMjQwLCBhbmQgMjQxLiIgCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDYxMDE3MDAwMFoiICAtLSBPY3RvYmVyIDE3LCAyMDA2CisgICAgICAgREVTQ1JJUFRJT04gICJEZXByZWNhdGVkL09ic29sZXRlZCBJQU5BaWZUeXBlIDIzMC4gIFJlZ2lzdHJhdGlvbiBvZiAKKyAgICAgICAgICAgICAgICAgICAgIElBTkFpZlR5cGUgMjM4LiIgCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDYwOTI1MDAwMFoiICAtLSBTZXB0ZW1iZXIgMjUsIDIwMDYKKyAgICAgICBERVNDUklQVElPTiAgIkNoYW5nZWQgdGhlIGRlc2NyaXB0aW9uIGZvciBJQU5BIGlmVHlwZSAKKyAgICAgICAgICAgICAgICAgICAgIDE4NCBhbmQgYWRkZWQgbmV3IElBTkEgaWZUeXBlIDIzNy4iICAKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNjA4MTcwMDAwWiIgIC0tIEF1Z3VzdCAxNywgMjAwNgorICAgICAgIERFU0NSSVBUSU9OICAiQ2hhbmdlZCB0aGUgZGVzY3JpcHRpb25zIGZvciBJQU5BaWZUeXBlcworICAgICAgICAgICAgICAgICAgICAgMjAgYW5kIDIxLiIgICAKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNjA4MTEwMDAwWiIgIC0tIEF1Z3VzdCAxMSwgMjAwNgorICAgICAgIERFU0NSSVBUSU9OICAiQ2hhbmdlZCB0aGUgZGVzY3JpcHRpb25zIGZvciBJQU5BaWZUeXBlcworICAgICAgICAgICAgICAgICAgICAgNywgMTEsIDYyLCA2OSwgYW5kIDExNy4iICAgCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDYwNzI1MDAwMFoiICAtLSBKdWx5IDI1LCAyMDA2CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlIDIzNi4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDYwNjE0MDAwMFoiICAtLSBKdW5lIDE0LCAyMDA2CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlIDIzNS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDYwMzMxMDAwMFoiICAtLSBNYXJjaCAzMSwgMjAwNgorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZSAyMzQuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA2MDMzMDAwMDBaIiAgLS0gTWFyY2ggMzAsIDIwMDYKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGUgMjMzLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNTEyMjIwMDAwWiIgIC0tIERlY2VtYmVyIDIyLCAyMDA1CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlcyAyMzEgYW5kIDIzMi4iCisKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDUxMDEwMDAwMFoiICAtLSBPY3RvYmVyIDEwLCAyMDA1CiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlIDIzMC4iCiAKQEAgLTMxLDExICsxMzMsMTAgQEAKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwNTAzMDMwMDAwWiIgIC0tIE1hcmNoIDMsIDIwMDUKICAgICAgICBERVNDUklQVElPTiAgIkFkZGVkIHRoZSBJQU5BdHVubmVsVHlwZSBUQyBhbmQgZGVwcmVjYXRlZAotCSAgICAgICAgICAgICAgICAgSUFOQWlmVHlwZSBzaXhUb0ZvdXIgKDIxNSkgcGVyIAotCSAgICAgICAgICAgICAgICAgUkZDNDA4Ny4iCisJICAgICAgICAgICAgICAgICBJQU5BaWZUeXBlIHNpeFRvRm91ciAoMjE1KSBwZXIgUkZDNDA4Ny4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDQxMTIyMDAwMFoiICAtLSBOb3ZlbWJlciAyMiwgMjAwNAotICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZSAyMjcuIgorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZSAyMjcgcGVyIFJGQzQ2MzEuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDA0MDYxNzAwMDBaIiAgLS0gSnVuZSAxNywgMjAwNAogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZSAyMjYuIgpAQCAtNTAsOTIgKzE1MSw5MiBAQAogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAzMDgyNTAwMDBaIiAgLS0gQXVnIDI1LCAyMDAzCiAgICAgICAgREVTQ1JJUFRJT04gICJEZXByZWNhdGVkIElBTkFpZlR5cGVzIDcgYW5kIDExLiBPYnNvbGV0ZWQKLSAgICAgICAgICAgICAgICAgICAgSUFOQWlmVHlwZXMgNjIsIDY5LCBhbmQgMTE3LiAgZXRoZXJuZXRDc21hY2QgKDYpCi0gICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlc2UgdmFsdWVzIgorICAgICAgICAgICAgICAgICAgICAgSUFOQWlmVHlwZXMgNjIsIDY5LCBhbmQgMTE3LiAgZXRoZXJuZXRDc21hY2QgKDYpCisgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZXNlIHZhbHVlcyIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMzA4MTgwMDAwWiIgIC0tIEF1ZyAxOCwgMjAwMwogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDIyNC4iCisgICAgICAgICAgICAgICAgICAgICAyMjQuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAzMDgwNzAwMDBaIiAgLS0gQXVnIDcsIDIwMDMKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMjIyIGFuZCAyMjMuIgorICAgICAgICAgICAgICAgICAgICAgMjIyIGFuZCAyMjMuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAzMDMxODAwMDBaIiAgLS0gTWFyIDE4LCAyMDAzCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMjIxLiIKKyAgICAgICAgICAgICAgICAgICAgIDIyMS4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDMwMTEzMDAwMFoiICAtLSBKYW4gMTMsIDIwMDMKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAyMjAuIgorICAgICAgICAgICAgICAgICAgICAgMjIwLiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMjEwMTcwMDAwWiIgIC0tIE9jdCAxNywgMjAwMgogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDIxOS4iCisgICAgICAgICAgICAgICAgICAgICAyMTkuIgogCi0JICAgUkVWSVNJT04gICAgICIyMDAyMDcxNjAwMDBaIiAgLS0gSnVsIDE2LCAyMDAyCisgICAgICAgUkVWSVNJT04gICAgICIyMDAyMDcxNjAwMDBaIiAgLS0gSnVsIDE2LCAyMDAyCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDIxNyBhbmQgMjE4LiIKKyAgICAgICAgICAgICAgICAgICAgIDIxNyBhbmQgMjE4LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMjA3MTAwMDAwWiIgIC0tIEp1bCAxMCwgMjAwMgogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAyMTUgYW5kIDIxNi4iCisgICAgICAgICAgICAgICAgICAgICAyMTUgYW5kIDIxNi4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDIwNjE5MDAwMFoiICAtLSBKdW4gMTksIDIwMDIKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAyMTQuIgorICAgICAgICAgICAgICAgICAgICAgMjE0LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMjAxMDQwMDAwWiIgIC0tIEphbiA0LCAyMDAyCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDIxMSwgMjEyIGFuZCAyMTMuIgorICAgICAgICAgICAgICAgICAgICAgMjExLCAyMTIgYW5kIDIxMy4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDExMjIwMDAwMFoiICAtLSBEZWMgMjAsIDIwMDEKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMjA5IGFuZCAyMTAuIgorICAgICAgICAgICAgICAgICAgICAgMjA5IGFuZCAyMTAuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAxMTExNTAwMDBaIiAgLS0gTm92IDE1LCAyMDAxCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDIwNyBhbmQgMjA4LiIKKyAgICAgICAgICAgICAgICAgICAgIDIwNyBhbmQgMjA4LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMTExMDYwMDAwWiIgIC0tIE5vdiA2LCAyMDAxCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMjA2LiIKKyAgICAgICAgICAgICAgICAgICAgIDIwNi4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDExMTAyMDAwMFoiICAtLSBOb3YgMiwgMjAwMQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDIwNS4iCisgICAgICAgICAgICAgICAgICAgICAyMDUuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAxMTAxNjAwMDBaIiAgLS0gT2N0IDE2LCAyMDAxCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCBhbmQgMjA0LiIKKyAgICAgICAgICAgICAgICAgICAgIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCBhbmQgMjA0LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMTA5MTkwMDAwWiIgIC0tIFNlcHQgMTksIDIwMDEKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAxOTguIgorICAgICAgICAgICAgICAgICAgICAgMTk4LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMTA1MTEwMDAwWiIgIC0tIE1heSAxMSwgMjAwMQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDE5Ny4iCisgICAgICAgICAgICAgICAgICAgICAxOTcuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAxMDExMjAwMDBaIiAgLS0gSmFuIDEyLCAyMDAxCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDE5NSBhbmQgMTk2LiIKKyAgICAgICAgICAgICAgICAgICAgIDE5NSBhbmQgMTk2LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMDEyMTkwMDAwWiIgIC0tIERlYyAxOSwgMjAwMAogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAxOTMgYW5kIDE5NC4iCisgICAgICAgICAgICAgICAgICAgICAxOTMgYW5kIDE5NC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDAxMjA3MDAwMFoiICAtLSBEZWMgMDcsIDIwMDAKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMTkxIGFuZCAxOTIuIgorICAgICAgICAgICAgICAgICAgICAgMTkxIGFuZCAxOTIuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAwMTIwNDAwMDBaIiAgLS0gRGVjIDA0LCAyMDAwCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMTkwLiIKKyAgICAgICAgICAgICAgICAgICAgIDE5MC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDAxMDE3MDAwMFoiICAtLSBPY3QgMTcsIDIwMDAKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMTg4IGFuZCAxODkuIiAgCisgICAgICAgICAgICAgICAgICAgICAxODggYW5kIDE4OS4iICAKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMDEwMDIwMDAwWiIgIC0tIE9jdCAwMiwgMjAwMAogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDE4Ny4iIApAQCAtMTkxLDcgKzI5Miw3IEBACiAgICAgICAgICAgICAgICBJQU5BLikKIAogICAgICAgICAgICAgICAgUmVxdWVzdHMgZm9yIG5ldyB2YWx1ZXMgc2hvdWxkIGJlIG1hZGUgdG8gSUFOQSB2aWEKLSAgICAgICAgICAgICAgIGVtYWlsIChpYW5hQGlhbmEub3JnKS4KKyAgICAgICAgICAgICAgIGVtYWlsIChpYW5hJmlhbmEub3JnKS4KIAogICAgICAgICAgICAgICAgVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBhc3NpZ25tZW50IG9mIGlmVHlwZQogICAgICAgICAgICAgICAgdmFsdWVzIGFuZCBvZiBPSURzIHRvIHBhcnRpY3VsYXIgbWVkaWEtc3BlY2lmaWMgTUlCcwpAQCAtMjExLDExICszMTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICByZmM4Nzd4MjUoNSksCiAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXRDc21hY2QoNiksIC0tIGZvciBhbGwgZXRoZXJuZXQtbGlrZSBpbnRlcmZhY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSByZWdhcmRsZXNzIG9mIHNwZWVkLCBhcyBwZXIgUkZDMzYzNQotICAgICAgICAgICAgICAgICAgIGlzbzg4MDIzQ3NtYWNkKDcpLCAtLSBEZXByZWNhdGVkIHZpYSBSRkMtZHJhZnQtaWV0Zi1odWJtaWItZXRoZXJpZi1taWItdjMgIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgaXNvODgwMjNDc21hY2QoNyksIC0tIERlcHJlY2F0ZWQgdmlhIFJGQzM2MzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKICAgICAgICAgICAgICAgICAgICBpc284ODAyNFRva2VuQnVzKDgpLAogICAgICAgICAgICAgICAgICAgIGlzbzg4MDI1VG9rZW5SaW5nKDkpLAogICAgICAgICAgICAgICAgICAgIGlzbzg4MDI2TWFuKDEwKSwKLSAgICAgICAgICAgICAgICAgICBzdGFyTGFuKDExKSwgLS0gRGVwcmVjYXRlZCB2aWEgUkZDLWRyYWZ0LWlldGYtaHVibWliLWV0aGVyaWYtbWliLXYzICBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgIHN0YXJMYW4oMTEpLCAtLSBEZXByZWNhdGVkIHZpYSBSRkMzNjM1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCiAgICAgICAgICAgICAgICAgICAgcHJvdGVvbjEwTWJpdCgxMiksCiAgICAgICAgICAgICAgICAgICAgcHJvdGVvbjgwTWJpdCgxMyksCiAgICAgICAgICAgICAgICAgICAgaHlwZXJjaGFubmVsKDE0KSwKQEAgLTIyNCw4ICszMjcsMTAgQEAKICAgICAgICAgICAgICAgICAgICBzZGxjKDE3KSwKICAgICAgICAgICAgICAgICAgICBkczEoMTgpLCAgICAgICAgICAgIC0tIERTMS1NSUIKICAgICAgICAgICAgICAgICAgICBlMSgxOSksICAgICAgICAgICAgIC0tIE9ic29sZXRlIHNlZSBEUzEtTUlCCi0gICAgICAgICAgICAgICAgICAgYmFzaWNJU0ROKDIwKSwKLSAgICAgICAgICAgICAgICAgICBwcmltYXJ5SVNETigyMSksCisgICAgICAgICAgICAgICAgICAgYmFzaWNJU0ROKDIwKSwgICAgICAgICAgICAgIC0tIG5vIGxvbmdlciB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHNlZSBhbHNvIFJGQzIxMjcKKyAgICAgICAgICAgICAgICAgICBwcmltYXJ5SVNETigyMSksICAgICAgICAgICAgLS0gbm8gbG9uZ2VyIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gc2VlIGFsc28gUkZDMjEyNwogICAgICAgICAgICAgICAgICAgIHByb3BQb2ludFRvUG9pbnRTZXJpYWwoMjIpLCAtLSBwcm9wcmlldGFyeSBzZXJpYWwKICAgICAgICAgICAgICAgICAgICBwcHAoMjMpLAogICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlTG9vcGJhY2soMjQpLApAQCAtMjYyLDIzICszNjcsMjUgQEAKICAgICAgICAgICAgICAgICAgICBpZWVlODAyMTIoNTUpLCAgICAgIC0tIDEwMEJhc2VWRwogICAgICAgICAgICAgICAgICAgIGZpYnJlQ2hhbm5lbCg1NiksICAgLS0gRmlicmUgQ2hhbm5lbAogICAgICAgICAgICAgICAgICAgIGhpcHBpSW50ZXJmYWNlKDU3KSwgLS0gSElQUEkgaW50ZXJmYWNlcyAgICAgCi0gICAgICAgICAgICAgICAgICAgZnJhbWVSZWxheUludGVyY29ubmVjdCg1OCksIC0tIE9ic29sZXRlIHVzZSBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICBmcmFtZVJlbGF5SW50ZXJjb25uZWN0KDU4KSwgLS0gT2Jzb2xldGUsIHVzZSBlaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGZyYW1lUmVsYXkoMzIpIG9yIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZnJhbWVSZWxheVNlcnZpY2UoNDQpLgogICAgICAgICAgICAgICAgICAgIGFmbGFuZTgwMjMoNTkpLCAgICAgLS0gQVRNIEVtdWxhdGVkIExBTiBmb3IgODAyLjMKICAgICAgICAgICAgICAgICAgICBhZmxhbmU4MDI1KDYwKSwgICAgIC0tIEFUTSBFbXVsYXRlZCBMQU4gZm9yIDgwMi41CiAgICAgICAgICAgICAgICAgICAgY2N0RW11bCg2MSksICAgICAgICAtLSBBVE0gRW11bGF0ZWQgY2lyY3VpdCAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICBmYXN0RXRoZXIoNjIpLCAgICAgIC0tIE9ic29sZXRlZCB2aWEgUkZDLWRyYWZ0LWlldGYtaHVibWliLWV0aGVyaWYtbWliLXYzICBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgIGZhc3RFdGhlcig2MiksICAgICAgLS0gT2Jzb2xldGVkIHZpYSBSRkMzNjM1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAogICAgICAgICAgICAgICAgICAgIGlzZG4oNjMpLCAgICAgICAgICAgLS0gSVNETiBhbmQgWC4yNSAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdjExKDY0KSwgICAgICAgICAgICAtLSBDQ0lUVCBWLjExL1guMjEgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdjM2KDY1KSwgICAgICAgICAgICAtLSBDQ0lUVCBWLjM2ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZzcwM2F0NjRrKDY2KSwgICAgICAtLSBDQ0lUVCBHNzAzIGF0IDY0S2JwcwogICAgICAgICAgICAgICAgICAgIGc3MDNhdDJtYig2NyksICAgICAgLS0gT2Jzb2xldGUgc2VlIERTMS1NSUIKICAgICAgICAgICAgICAgICAgICBxbGxjKDY4KSwgICAgICAgICAgIC0tIFNOQSBRTExDICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICBmYXN0RXRoZXJGWCg2OSksICAgIC0tIE9ic29sZXRlZCB2aWEgUkZDLWRyYWZ0LWlldGYtaHVibWliLWV0aGVyaWYtbWliLXYzICBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgIGZhc3RFdGhlckZYKDY5KSwgICAgLS0gT2Jzb2xldGVkIHZpYSBSRkMzNjM1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAogICAgICAgICAgICAgICAgICAgIGNoYW5uZWwoNzApLCAgICAgICAgLS0gY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGllZWU4MDIxMSg3MSksICAgICAgLS0gcmFkaW8gc3ByZWFkIHNwZWN0cnVtICAgICAgIAotCSAgICAgICAgICAgaWJtMzcwcGFyQ2hhbig3MiksICAtLSBJQk0gU3lzdGVtIDM2MC8zNzAgT0VNSSBDaGFubmVsCisgICAgICAgICAgICAgICAgICAgaWJtMzcwcGFyQ2hhbig3MiksICAtLSBJQk0gU3lzdGVtIDM2MC8zNzAgT0VNSSBDaGFubmVsCiAgICAgICAgICAgICAgICAgICAgZXNjb24oNzMpLCAgICAgICAgICAtLSBJQk0gRW50ZXJwcmlzZSBTeXN0ZW1zIENvbm5lY3Rpb24KICAgICAgICAgICAgICAgICAgICBkbHN3KDc0KSwgICAgICAgICAgIC0tIERhdGEgTGluayBTd2l0Y2hpbmcKICAgICAgICAgICAgICAgICAgICBpc2Rucyg3NSksICAgICAgICAgIC0tIElTRE4gUy9UIGludGVyZmFjZQpAQCAtMzEzLDYxICs0MjAsNjIgQEAKICAgICAgICAgICAgICAgICAgICB2b2ljZU92ZXJJcCgxMDQpLCAgIC0tIHZvaWNlIG92ZXIgSVAgZW5jYXBzdWxhdGlvbgogICAgICAgICAgICAgICAgICAgIGF0bUR4aSgxMDUpLCAgICAgICAgLS0gQVRNIERYSQogICAgICAgICAgICAgICAgICAgIGF0bUZ1bmkoMTA2KSwgICAgICAgLS0gQVRNIEZVTkkKLQkJICAgYXRtSW1hICgxMDcpLCAgICAgICAtLSBBVE0gSU1BCQkgICAKKyAgICAgICAgICAgICAgICAgICBhdG1JbWEgKDEwNyksICAgICAgIC0tIEFUTSBJTUEJCSAgIAogICAgICAgICAgICAgICAgICAgIHBwcE11bHRpbGlua0J1bmRsZSgxMDgpLCAtLSBQUFAgTXVsdGlsaW5rIEJ1bmRsZQogICAgICAgICAgICAgICAgICAgIGlwT3ZlckNkbGMgKDEwOSksICAgLS0gSUJNIGlwT3ZlckNkbGMKLQkJICAgaXBPdmVyQ2xhdyAoMTEwKSwgICAtLSBJQk0gQ29tbW9uIExpbmsgQWNjZXNzIHRvIFdvcmtzdG4KKyAgICAgICAgICAgICAgICAgICBpcE92ZXJDbGF3ICgxMTApLCAgIC0tIElCTSBDb21tb24gTGluayBBY2Nlc3MgdG8gV29ya3N0bgogICAgICAgICAgICAgICAgICAgIHN0YWNrVG9TdGFjayAoMTExKSwgLS0gSUJNIHN0YWNrVG9TdGFjawogICAgICAgICAgICAgICAgICAgIHZpcnR1YWxJcEFkZHJlc3MgKDExMiksIC0tIElCTSBWSVBBCi0JCSAgIG1wYyAoMTEzKSwgICAgICAgICAgLS0gSUJNIG11bHRpLXByb3RvY29sIGNoYW5uZWwgc3VwcG9ydAotCQkgICBpcE92ZXJBdG0gKDExNCksICAgIC0tIElCTSBpcE92ZXJBdG0KLQkJICAgaXNvODgwMjVGaWJlciAoMTE1KSwgLS0gSVNPIDgwMi41aiBGaWJlciBUb2tlbiBSaW5nCi0JCSAgIHRkbGMgKDExNiksCSAgICAgICAtLSBJQk0gdHdpbmF4aWFsIGRhdGEgbGluayBjb250cm9sCi0JCSAgIGdpZ2FiaXRFdGhlcm5ldCAoMTE3KSwgLS0gT2Jzb2xldGVkIHZpYSBSRkMtZHJhZnQtaWV0Zi1odWJtaWItZXRoZXJpZi1taWItdjMgIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCi0JCSAgIGhkbGMgKDExOCksICAgICAgICAgLS0gSERMQwotCQkgICBsYXBmICgxMTkpLAkgICAgICAgLS0gTEFQIEYKLQkJICAgdjM3ICgxMjApLAkgICAgICAgLS0gVi4zNwotCQkgICB4MjVtbHAgKDEyMSksICAgICAgIC0tIE11bHRpLUxpbmsgUHJvdG9jb2wKLQkJICAgeDI1aHVudEdyb3VwICgxMjIpLCAtLSBYMjUgSHVudCBHcm91cAotCQkgICB0cmFzbnBIZGxjICgxMjMpLCAgIC0tIFRyYW5zcCBIRExDCi0JCSAgIGludGVybGVhdmUgKDEyNCksICAgLS0gSW50ZXJsZWF2ZSBjaGFubmVsCi0JCSAgIGZhc3QgKDEyNSksICAgICAgICAgLS0gRmFzdCBjaGFubmVsCi0JCSAgIGlwICgxMjYpLAkgICAgICAgLS0gSVAgKGZvciBBUFBOIEhQUiBpbiBJUCBuZXR3b3JrcykKLQkJICAgZG9jc0NhYmxlTWFjbGF5ZXIgKDEyNyksICAtLSBDQVRWIE1hYyBMYXllcgotCQkgICBkb2NzQ2FibGVEb3duc3RyZWFtICgxMjgpLCAtLSBDQVRWIERvd25zdHJlYW0gaW50ZXJmYWNlCi0JCSAgIGRvY3NDYWJsZVVwc3RyZWFtICgxMjkpLCAgLS0gQ0FUViBVcHN0cmVhbSBpbnRlcmZhY2UKLQkJICAgYTEyTXBwU3dpdGNoICgxMzApLCAtLSBBdmFsb24gUGFyYWxsZWwgUHJvY2Vzc29yCi0JCSAgIHR1bm5lbCAoMTMxKSwgICAgICAgLS0gRW5jYXBzdWxhdGlvbiBpbnRlcmZhY2UKLQkJICAgY29mZmVlICgxMzIpLCAgICAgICAtLSBjb2ZmZWUgcG90Ci0JCSAgIGNlcyAoMTMzKSwgICAgICAgICAgLS0gQ2lyY3VpdCBFbXVsYXRpb24gU2VydmljZQotCQkgICBhdG1TdWJJbnRlcmZhY2UgKDEzNCksIC0tIEFUTSBTdWIgSW50ZXJmYWNlCi0JCSAgIGwydmxhbiAoMTM1KSwgICAgICAgLS0gTGF5ZXIgMiBWaXJ0dWFsIExBTiB1c2luZyA4MDIuMVEKLQkJICAgbDNpcHZsYW4gKDEzNiksICAgICAtLSBMYXllciAzIFZpcnR1YWwgTEFOIHVzaW5nIElQCi0JCSAgIGwzaXB4dmxhbiAoMTM3KSwgICAgLS0gTGF5ZXIgMyBWaXJ0dWFsIExBTiB1c2luZyBJUFgKLQkJICAgZGlnaXRhbFBvd2VybGluZSAoMTM4KSwgLS0gSVAgb3ZlciBQb3dlciBMaW5lcwkKLQkJICAgbWVkaWFNYWlsT3ZlcklwICgxMzkpLCAtLSBNdWx0aW1lZGlhIE1haWwgb3ZlciBJUAotCQkgICBkdG0gKDE0MCksICAgICAgICAtLSBEeW5hbWljIHN5bmNyb25vdXMgVHJhbnNmZXIgTW9kZQotCQkgICBkY24gKDE0MSksICAgIC0tIERhdGEgQ29tbXVuaWNhdGlvbnMgTmV0d29yawotCQkgICBpcEZvcndhcmQgKDE0MiksICAgIC0tIElQIEZvcndhcmRpbmcgSW50ZXJmYWNlCi0JCSAgIG1zZHNsICgxNDMpLCAgICAgICAtLSBNdWx0aS1yYXRlIFN5bW1ldHJpYyBEU0wKLQkJICAgaWVlZTEzOTQgKDE0NCksIC0tIElFRUUxMzk0IEhpZ2ggUGVyZm9ybWFuY2UgU2VyaWFsIEJ1cwotCQkgICBpZi1nc24gKDE0NSksICAgICAgIC0tICAgSElQUEktNjQwMCAKLQkJICAgZHZiUmNjTWFjTGF5ZXIgKDE0NiksIC0tIERWQi1SQ0MgTUFDIExheWVyCi0JCSAgIGR2YlJjY0Rvd25zdHJlYW0gKDE0NyksICAtLSBEVkItUkNDIERvd25zdHJlYW0gQ2hhbm5lbAotCQkgICBkdmJSY2NVcHN0cmVhbSAoMTQ4KSwgIC0tIERWQi1SQ0MgVXBzdHJlYW0gQ2hhbm5lbAotCQkgICBhdG1WaXJ0dWFsICgxNDkpLCAgIC0tIEFUTSBWaXJ0dWFsIEludGVyZmFjZQotCQkgICBtcGxzVHVubmVsICgxNTApLCAgIC0tIE1QTFMgVHVubmVsIFZpcnR1YWwgSW50ZXJmYWNlCi0JCSAgIHNycCAoMTUxKSwJLS0gU3BhdGlhbCBSZXVzZSBQcm90b2NvbAkKLQkJICAgdm9pY2VPdmVyQXRtICgxNTIpLCAgLS0gVm9pY2UgT3ZlciBBVE0KLQkJICAgdm9pY2VPdmVyRnJhbWVSZWxheSAoMTUzKSwgICAtLSBWb2ljZSBPdmVyIEZyYW1lIFJlbGF5IAotCQkgICBpZHNsICgxNTQpLAkJLS0gRGlnaXRhbCBTdWJzY3JpYmVyIExvb3Agb3ZlciBJU0ROCi0JCSAgIGNvbXBvc2l0ZUxpbmsgKDE1NSksICAtLSBBdmljaSBDb21wb3NpdGUgTGluayBJbnRlcmZhY2UKLQkJICAgc3M3U2lnTGluayAoMTU2KSwgICAgIC0tIFNTNyBTaWduYWxpbmcgTGluayAKLQkJICAgcHJvcFdpcmVsZXNzUDJQICgxNTcpLCAgLS0gIFByb3AuIFAyUCB3aXJlbGVzcyBpbnRlcmZhY2UKLQkJICAgZnJGb3J3YXJkICgxNTgpLCAgICAtLSBGcmFtZSBGb3J3YXJkIEludGVyZmFjZQotCQkgICByZmMxNDgzICgxNTkpLAktLSBNdWx0aXByb3RvY29sIG92ZXIgQVRNIEFBTDUKLQkJICAgdXNiICgxNjApLAkJLS0gVVNCIEludGVyZmFjZQotCQkgICBpZWVlODAyM2FkTGFnICgxNjEpLCAgLS0gSUVFRSA4MDIuM2FkIExpbmsgQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgbXBjICgxMTMpLCAgICAgICAgICAtLSBJQk0gbXVsdGktcHJvdG9jb2wgY2hhbm5lbCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgaXBPdmVyQXRtICgxMTQpLCAgICAtLSBJQk0gaXBPdmVyQXRtCisgICAgICAgICAgICAgICAgICAgaXNvODgwMjVGaWJlciAoMTE1KSwgLS0gSVNPIDgwMi41aiBGaWJlciBUb2tlbiBSaW5nCisgICAgICAgICAgICAgICAgICAgdGRsYyAoMTE2KSwJICAgICAgIC0tIElCTSB0d2luYXhpYWwgZGF0YSBsaW5rIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICBnaWdhYml0RXRoZXJuZXQgKDExNyksIC0tIE9ic29sZXRlZCB2aWEgUkZDMzYzNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICBoZGxjICgxMTgpLCAgICAgICAgIC0tIEhETEMKKyAgICAgICAgICAgICAgICAgICBsYXBmICgxMTkpLAkgICAgICAgLS0gTEFQIEYKKyAgICAgICAgICAgICAgICAgICB2MzcgKDEyMCksCSAgICAgICAtLSBWLjM3CisgICAgICAgICAgICAgICAgICAgeDI1bWxwICgxMjEpLCAgICAgICAtLSBNdWx0aS1MaW5rIFByb3RvY29sCisgICAgICAgICAgICAgICAgICAgeDI1aHVudEdyb3VwICgxMjIpLCAtLSBYMjUgSHVudCBHcm91cAorICAgICAgICAgICAgICAgICAgIHRyYW5zcEhkbGMgKDEyMyksICAgLS0gVHJhbnNwIEhETEMKKyAgICAgICAgICAgICAgICAgICBpbnRlcmxlYXZlICgxMjQpLCAgIC0tIEludGVybGVhdmUgY2hhbm5lbAorICAgICAgICAgICAgICAgICAgIGZhc3QgKDEyNSksICAgICAgICAgLS0gRmFzdCBjaGFubmVsCisgICAgICAgICAgICAgICAgICAgaXAgKDEyNiksCSAgICAgICAtLSBJUCAoZm9yIEFQUE4gSFBSIGluIElQIG5ldHdvcmtzKQorICAgICAgICAgICAgICAgICAgIGRvY3NDYWJsZU1hY2xheWVyICgxMjcpLCAgLS0gQ0FUViBNYWMgTGF5ZXIKKyAgICAgICAgICAgICAgICAgICBkb2NzQ2FibGVEb3duc3RyZWFtICgxMjgpLCAtLSBDQVRWIERvd25zdHJlYW0gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgZG9jc0NhYmxlVXBzdHJlYW0gKDEyOSksICAtLSBDQVRWIFVwc3RyZWFtIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGExMk1wcFN3aXRjaCAoMTMwKSwgLS0gQXZhbG9uIFBhcmFsbGVsIFByb2Nlc3NvcgorICAgICAgICAgICAgICAgICAgIHR1bm5lbCAoMTMxKSwgICAgICAgLS0gRW5jYXBzdWxhdGlvbiBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBjb2ZmZWUgKDEzMiksICAgICAgIC0tIGNvZmZlZSBwb3QKKyAgICAgICAgICAgICAgICAgICBjZXMgKDEzMyksICAgICAgICAgIC0tIENpcmN1aXQgRW11bGF0aW9uIFNlcnZpY2UKKyAgICAgICAgICAgICAgICAgICBhdG1TdWJJbnRlcmZhY2UgKDEzNCksIC0tIEFUTSBTdWIgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgbDJ2bGFuICgxMzUpLCAgICAgICAtLSBMYXllciAyIFZpcnR1YWwgTEFOIHVzaW5nIDgwMi4xUQorICAgICAgICAgICAgICAgICAgIGwzaXB2bGFuICgxMzYpLCAgICAgLS0gTGF5ZXIgMyBWaXJ0dWFsIExBTiB1c2luZyBJUAorICAgICAgICAgICAgICAgICAgIGwzaXB4dmxhbiAoMTM3KSwgICAgLS0gTGF5ZXIgMyBWaXJ0dWFsIExBTiB1c2luZyBJUFgKKyAgICAgICAgICAgICAgICAgICBkaWdpdGFsUG93ZXJsaW5lICgxMzgpLCAtLSBJUCBvdmVyIFBvd2VyIExpbmVzCQorICAgICAgICAgICAgICAgICAgIG1lZGlhTWFpbE92ZXJJcCAoMTM5KSwgLS0gTXVsdGltZWRpYSBNYWlsIG92ZXIgSVAKKyAgICAgICAgICAgICAgICAgICBkdG0gKDE0MCksICAgICAgICAtLSBEeW5hbWljIHN5bmNyb25vdXMgVHJhbnNmZXIgTW9kZQorICAgICAgICAgICAgICAgICAgIGRjbiAoMTQxKSwgICAgLS0gRGF0YSBDb21tdW5pY2F0aW9ucyBOZXR3b3JrCisgICAgICAgICAgICAgICAgICAgaXBGb3J3YXJkICgxNDIpLCAgICAtLSBJUCBGb3J3YXJkaW5nIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIG1zZHNsICgxNDMpLCAgICAgICAtLSBNdWx0aS1yYXRlIFN5bW1ldHJpYyBEU0wKKyAgICAgICAgICAgICAgICAgICBpZWVlMTM5NCAoMTQ0KSwgLS0gSUVFRTEzOTQgSGlnaCBQZXJmb3JtYW5jZSBTZXJpYWwgQnVzCisgICAgICAgICAgICAgICAgICAgaWYtZ3NuICgxNDUpLCAgICAgICAtLSAgIEhJUFBJLTY0MDAgCisgICAgICAgICAgICAgICAgICAgZHZiUmNjTWFjTGF5ZXIgKDE0NiksIC0tIERWQi1SQ0MgTUFDIExheWVyCisgICAgICAgICAgICAgICAgICAgZHZiUmNjRG93bnN0cmVhbSAoMTQ3KSwgIC0tIERWQi1SQ0MgRG93bnN0cmVhbSBDaGFubmVsCisgICAgICAgICAgICAgICAgICAgZHZiUmNjVXBzdHJlYW0gKDE0OCksICAtLSBEVkItUkNDIFVwc3RyZWFtIENoYW5uZWwKKyAgICAgICAgICAgICAgICAgICBhdG1WaXJ0dWFsICgxNDkpLCAgIC0tIEFUTSBWaXJ0dWFsIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIG1wbHNUdW5uZWwgKDE1MCksICAgLS0gTVBMUyBUdW5uZWwgVmlydHVhbCBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBzcnAgKDE1MSksCS0tIFNwYXRpYWwgUmV1c2UgUHJvdG9jb2wJCisgICAgICAgICAgICAgICAgICAgdm9pY2VPdmVyQXRtICgxNTIpLCAgLS0gVm9pY2UgT3ZlciBBVE0KKyAgICAgICAgICAgICAgICAgICB2b2ljZU92ZXJGcmFtZVJlbGF5ICgxNTMpLCAgIC0tIFZvaWNlIE92ZXIgRnJhbWUgUmVsYXkgCisgICAgICAgICAgICAgICAgICAgaWRzbCAoMTU0KSwJCS0tIERpZ2l0YWwgU3Vic2NyaWJlciBMb29wIG92ZXIgSVNETgorICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZUxpbmsgKDE1NSksICAtLSBBdmljaSBDb21wb3NpdGUgTGluayBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBzczdTaWdMaW5rICgxNTYpLCAgICAgLS0gU1M3IFNpZ25hbGluZyBMaW5rIAorICAgICAgICAgICAgICAgICAgIHByb3BXaXJlbGVzc1AyUCAoMTU3KSwgIC0tICBQcm9wLiBQMlAgd2lyZWxlc3MgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgZnJGb3J3YXJkICgxNTgpLCAgICAtLSBGcmFtZSBGb3J3YXJkIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIHJmYzE0ODMgKDE1OSksCS0tIE11bHRpcHJvdG9jb2wgb3ZlciBBVE0gQUFMNQorICAgICAgICAgICAgICAgICAgIHVzYiAoMTYwKSwJCS0tIFVTQiBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBpZWVlODAyM2FkTGFnICgxNjEpLCAgLS0gSUVFRSA4MDIuM2FkIExpbmsgQWdncmVnYXRlCiAgICAgICAgICAgICAgICAgICAgYmdwcG9saWN5YWNjb3VudGluZyAoMTYyKSwgLS0gQkdQIFBvbGljeSBBY2NvdW50aW5nCiAgICAgICAgICAgICAgICAgICAgZnJmMTZNZnJCdW5kbGUgKDE2MyksIC0tIEZSRiAuMTYgTXVsdGlsaW5rIEZyYW1lIFJlbGF5IAogICAgICAgICAgICAgICAgICAgIGgzMjNHYXRla2VlcGVyICgxNjQpLCAtLSBIMzIzIEdhdGVrZWVwZXIKQEAgLTM5MSw2ICs0OTksOSBAQAogICAgICAgICAgICAgICAgICAgIHByb3BEb2NzV2lyZWxlc3NVcHN0cmVhbSAoMTgyKSwgLS0gQ2lzY28gcHJvcHJpZXRhcnkgVXBzdHJlYW0KICAgICAgICAgICAgICAgICAgICBoaXBlcmxhbjIgKDE4MyksIC0tIEhJUEVSTEFOIFR5cGUgMiBSYWRpbyBJbnRlcmZhY2UKICAgICAgICAgICAgICAgICAgICBwcm9wQldBcDJNcCAoMTg0KSwgLS0gUHJvcEJyb2FkYmFuZFdpcmVsZXNzQWNjZXNzcHQybXVsdGlwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSB1c2Ugb2YgdGhpcyBpZnR5cGUgZm9yIElFRUUgODAyLjE2IFdNQU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gaW50ZXJmYWNlcyBhcyBwZXIgSUVFRSBTdGQgODAyLjE2ZiBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBkZXByZWNhdGVkIGFuZCBpZlR5cGUgMjM3IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCiAgICAgICAgICAgICAgICAgICAgc29uZXRPdmVyaGVhZENoYW5uZWwgKDE4NSksIC0tIFNPTkVUIE92ZXJoZWFkIENoYW5uZWwKICAgICAgICAgICAgICAgICAgICBkaWdpdGFsV3JhcHBlck92ZXJoZWFkQ2hhbm5lbCAoMTg2KSwgLS0gRGlnaXRhbCBXcmFwcGVyCiAgICAgICAgICAgICAgICAgICAgYWFsMiAoMTg3KSwgLS0gQVRNIGFkYXB0YXRpb24gbGF5ZXIgMgpAQCAtNDE2LDcgKzUyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgcG9uMTU1ICgyMDcpLCAtLSBGU0FOIDE1NU1iIFN5bWV0cmljYWwgUE9OIGludGVyZmFjZQogICAgICAgICAgICAgICAgICAgIHBvbjYyMiAoMjA4KSwgLS0gRlNBTjYyMk1iIFN5bWV0cmljYWwgUE9OIGludGVyZmFjZQogICAgICAgICAgICAgICAgICAgIGJyaWRnZSAoMjA5KSwgLS0gVHJhbnNwYXJlbnQgYnJpZGdlIGludGVyZmFjZQotICAgICAgICAgICAgICAgICAgIGxpbmVncm91cCAoMjEwKSwgLS0gSW50ZXJmYWNlIGNvbW1vbiB0byBtdWx0aXBsZSBsaW5lcwkJICAgCisgICAgICAgICAgICAgICAgICAgbGluZWdyb3VwICgyMTApLCAtLSBJbnRlcmZhY2UgY29tbW9uIHRvIG11bHRpcGxlIGxpbmVzICAgCiAgICAgICAgICAgICAgICAgICAgdm9pY2VFTUZHRCAoMjExKSwgLS0gdm9pY2UgRSZNIEZlYXR1cmUgR3JvdXAgRAogICAgICAgICAgICAgICAgICAgIHZvaWNlRkdERUFOQSAoMjEyKSwgLS0gdm9pY2UgRkdEIEV4Y2hhbmdlIEFjY2VzcyBOb3J0aCBBbWVyaWNhbgogICAgICAgICAgICAgICAgICAgIHZvaWNlRElEICgyMTMpLCAtLSB2b2ljZSBEaXJlY3QgSW53YXJkIERpYWxpbmcKQEAgLTQyNiw3ICs1MzcsNyBAQAogICAgICAgICAgICAgICAgICAgIHBkbkV0aGVyTG9vcDEgKDIxNyksIC0tIFBhcmFkeW5lIEV0aGVyTG9vcCAxCiAgICAgICAgICAgICAgICAgICAgcGRuRXRoZXJMb29wMiAoMjE4KSwgLS0gUGFyYWR5bmUgRXRoZXJMb29wIDIKICAgICAgICAgICAgICAgICAgICBvcHRpY2FsQ2hhbm5lbEdyb3VwICgyMTkpLCAtLSBPcHRpY2FsIENoYW5uZWwgR3JvdXAKLSAgICAgICAgICAgICAgICAgICBob21lcG5hICgyMjApLCAtLSBIb21lUE5BIElUVS1UIEcuOTg5CQkJCSAgIAorICAgICAgICAgICAgICAgICAgIGhvbWVwbmEgKDIyMCksIC0tIEhvbWVQTkEgSVRVLVQgRy45ODkKICAgICAgICAgICAgICAgICAgICBnZnAgKDIyMSksIC0tIEdlbmVyaWMgRnJhbWluZyBQcm9jZWR1cmUgKEdGUCkKICAgICAgICAgICAgICAgICAgICBjaXNjb0lTTHZsYW4gKDIyMiksIC0tIExheWVyIDIgVmlydHVhbCBMQU4gdXNpbmcgQ2lzY28gSVNMCiAgICAgICAgICAgICAgICAgICAgYWN0ZWxpc01ldGFMT09QICgyMjMpLCAtLSBBY3RlbGVpcyBwcm9wcmlldGFyeSBNZXRhTE9PUCBIaWdoIFNwZWVkIExpbmsgCkBAIC00MzQsMTAgKzU0NSw1NyBAQAogICAgICAgICAgICAgICAgICAgIHJwciAoMjI1KSwgLS0gUmVzaWxpZW50IFBhY2tldCBSaW5nIEludGVyZmFjZSBUeXBlCiAgICAgICAgICAgICAgICAgICAgcWFtICgyMjYpLCAtLSBSRiBRYW0gSW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgICAgbG1wICgyMjcpLCAtLSBMaW5rIE1hbmFnZW1lbnQgUHJvdG9jb2wKLSAgICAgICAgICAgICAgICAgICBjYmxWZWN0YVN0YXIgKDIyOCksIC0tIENhbWJyaWRnZSBCcm9hZGJhbmQgTGltaXRlZCBWZWN0YVN0YXIKKyAgICAgICAgICAgICAgICAgICBjYmxWZWN0YVN0YXIgKDIyOCksIC0tIENhbWJyaWRnZSBCcm9hZGJhbmQgTmV0d29ya3MgTGltaXRlZCBWZWN0YVN0YXIKICAgICAgICAgICAgICAgICAgICBkb2NzQ2FibGVNQ210c0Rvd25zdHJlYW0gKDIyOSksIC0tIENBVFYgTW9kdWxhciBDTVRTIERvd25zdHJlYW0gSW50ZXJmYWNlCi0gICAgICAgICAgICAgICAgICAgYWRzbDIgKDIzMCkgLS0gQXN5bW1ldHJpYyBEaWdpdGFsIFN1YnNjcmliZXIgTG9vcCBWZXJzaW9uIDIKLSAgICAJCQkgICB9CisgICAgICAgICAgICAgICAgICAgYWRzbDIgKDIzMCksIC0tIEFzeW1tZXRyaWMgRGlnaXRhbCBTdWJzY3JpYmVyIExvb3AgVmVyc2lvbiAyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAoREVQUkVDQVRFRC9PQlNPTEVURUQgLSBwbGVhc2UgdXNlIGFkc2wycGx1cyAyMzggaW5zdGVhZCkKKyAgICAgICAgICAgICAgICAgICBtYWNTZWNDb250cm9sbGVkSUYgKDIzMSksIC0tIE1BQ1NlY0NvbnRyb2xsZWQgCisgICAgICAgICAgICAgICAgICAgbWFjU2VjVW5jb250cm9sbGVkSUYgKDIzMiksIC0tIE1BQ1NlY1VuY29udHJvbGxlZAorICAgICAgICAgICAgICAgICAgIGF2aWNpT3B0aWNhbEV0aGVyICgyMzMpLCAtLSBBdmljaSBPcHRpY2FsIEV0aGVybmV0IEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgIGF0bWJvbmQgKDIzNCksIC0tIGF0bWJvbmQKKyAgICAgICAgICAgICAgICAgICB2b2ljZUZHRE9TICgyMzUpLCAtLSB2b2ljZSBGR0QgT3BlcmF0b3IgU2VydmljZXMKKyAgICAgICAgICAgICAgICAgICBtb2NhVmVyc2lvbjEgKDIzNiksIC0tIE11bHRpTWVkaWEgb3ZlciBDb2F4IEFsbGlhbmNlIChNb0NBKSBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gYXMgZG9jdW1lbnRlZCBpbiBpbmZvcm1hdGlvbiBwcm92aWRlZCBwcml2YXRlbHkgdG8gSUFOQQorICAgICAgICAgICAgICAgICAgIGllZWU4MDIxNldNQU4gKDIzNyksIC0tIElFRUUgODAyLjE2IFdNQU4gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgYWRzbDJwbHVzICgyMzgpLCAtLSBBc3ltbWV0cmljIERpZ2l0YWwgU3Vic2NyaWJlciBMb29wIFZlcnNpb24gMiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIFZlcnNpb24gMiBQbHVzIGFuZCBhbGwgdmFyaWFudHMKKyAgICAgICAgICAgICAgICAgICBkdmJSY3NNYWNMYXllciAoMjM5KSwgLS0gRFZCLVJDUyBNQUMgTGF5ZXIKKyAgICAgICAgICAgICAgICAgICBkdmJUZG0gKDI0MCksIC0tIERWQiBTYXRlbGxpdGUgVERNCisgICAgICAgICAgICAgICAgICAgZHZiUmNzVGRtYSAoMjQxKSwgLS0gRFZCLVJDUyBURE1BCisgICAgICAgICAgICAgICAgICAgeDg2TGFwcyAoMjQyKSwgLS0gTEFQUyBiYXNlZCBvbiBJVFUtVCBYLjg2L1kuMTMyMworICAgICAgICAgICAgICAgICAgIHd3YW5QUCAoMjQzKSwgLS0gM0dQUCBXV0FOCisgICAgICAgICAgICAgICAgICAgd3dhblBQMiAoMjQ0KSwgLS0gM0dQUDIgV1dBTgorICAgICAgICAgICAgICAgICAgIHZvaWNlRUJTICgyNDUpLCAtLSB2b2ljZSBQLXBob25lIEVCUyBwaHlzaWNhbCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBpZlB3VHlwZSAoMjQ2KSwgLS0gUHNldWRvd2lyZSBpbnRlcmZhY2UgdHlwZQorICAgICAgICAgICAgICAgICAgIGlsYW4gKDI0NyksIC0tIEludGVybmFsIExBTiBvbiBhIGJyaWRnZSBwZXIgSUVFRSA4MDIuMWFwCisgICAgICAgICAgICAgICAgICAgcGlwICgyNDgpLCAtLSBQcm92aWRlciBJbnN0YW5jZSBQb3J0IG9uIGEgYnJpZGdlIHBlciBJRUVFIDgwMi4xYWggUEJCCisgICAgICAgICAgICAgICAgICAgYWx1RUxQICgyNDkpLCAtLSBBbGNhdGVsLUx1Y2VudCBFdGhlcm5ldCBMaW5rIFByb3RlY3Rpb24KKyAgICAgICAgICAgICAgICAgICBncG9uICgyNTApLCAtLSBHaWdhYml0LWNhcGFibGUgcGFzc2l2ZSBvcHRpY2FsIG5ldHdvcmtzIChHLVBPTikgYXMgcGVyIElUVS1UIEcuOTQ4CisgICAgICAgICAgICAgICAgICAgdmRzbDIgKDI1MSksIC0tIFZlcnkgaGlnaCBzcGVlZCBkaWdpdGFsIHN1YnNjcmliZXIgbGluZSBWZXJzaW9uIDIgKGFzIHBlciBJVFUtVCBSZWNvbW1lbmRhdGlvbiBHLjk5My4yKQorICAgICAgICAgICAgICAgICAgIGNhcHdhcERvdDExUHJvZmlsZSAoMjUyKSwgLS0gV0xBTiBQcm9maWxlIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGNhcHdhcERvdDExQnNzICgyNTMpLCAtLSBXTEFOIEJTUyBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBjYXB3YXBXdHBWaXJ0dWFsUmFkaW8gKDI1NCksIC0tIFdUUCBWaXJ0dWFsIFJhZGlvIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGJpdHMgKDI1NSksIC0tIGJpdHNwb3J0CisgICAgICAgICAgICAgICAgICAgZG9jc0NhYmxlVXBzdHJlYW1SZlBvcnQgKDI1NiksIC0tIERPQ1NJUyBDQVRWIFVwc3RyZWFtIFJGIFBvcnQKKyAgICAgICAgICAgICAgICAgICBjYWJsZURvd25zdHJlYW1SZlBvcnQgKDI1NyksIC0tIENBVFYgZG93bnN0cmVhbSBSRiBwb3J0CisgICAgICAgICAgICAgICAgICAgdm13YXJlVmlydHVhbE5pYyAoMjU4KSwgLS0gVk13YXJlIFZpcnR1YWwgTmV0d29yayBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBpZWVlODAyMTU0ICgyNTkpLCAtLSBJRUVFIDgwMi4xNS40IFdQQU4gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgb3RuT2R1ICgyNjApLCAtLSBPVE4gT3B0aWNhbCBEYXRhIFVuaXQKKyAgICAgICAgICAgICAgICAgICBvdG5PdHUgKDI2MSksIC0tIE9UTiBPcHRpY2FsIGNoYW5uZWwgVHJhbnNwb3J0IFVuaXQKKyAgICAgICAgICAgICAgICAgICBpZlZmaVR5cGUgKDI2MiksIC0tIFZQTFMgRm9yd2FyZGluZyBJbnN0YW5jZSBJbnRlcmZhY2UgVHlwZQorICAgICAgICAgICAgICAgICAgIGc5OTgxICgyNjMpLCAtLSBHLjk5OC4xIGJvbmRlZCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBnOTk4MiAoMjY0KSwgLS0gRy45OTguMiBib25kZWQgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgZzk5ODMgKDI2NSksIC0tIEcuOTk4LjMgYm9uZGVkIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGFsdUVwb24gKDI2NiksIC0tIEV0aGVybmV0IFBhc3NpdmUgT3B0aWNhbCBOZXR3b3JrcyAoRS1QT04pCisgICAgICAgICAgICAgICAgICAgYWx1RXBvbk9udSAoMjY3KSwgLS0gRVBPTiBPcHRpY2FsIE5ldHdvcmsgVW5pdAorICAgICAgICAgICAgICAgICAgIGFsdUVwb25QaHlzaWNhbFVuaSAoMjY4KSwgLS0gRVBPTiBwaHlzaWNhbCBVc2VyIHRvIE5ldHdvcmsgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgYWx1RXBvbkxvZ2ljYWxMaW5rICgyNjkpLCAtLSBUaGUgZW11bGF0aW9uIG9mIGEgcG9pbnQtdG8tcG9pbnQgbGluayBvdmVyIHRoZSBFUE9OIGxheWVyCisgICAgICAgICAgICAgICAgICAgYWx1R3Bvbk9udSAoMjcwKSwgLS0gR1BPTiBPcHRpY2FsIE5ldHdvcmsgVW5pdAorICAgICAgICAgICAgICAgICAgIGFsdUdwb25QaHlzaWNhbFVuaSAoMjcxKSwgLS0gR1BPTiBwaHlzaWNhbCBVc2VyIHRvIE5ldHdvcmsgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgdm13YXJlTmljVGVhbSAoMjcyKSwgLS0gVk13YXJlIE5JQyBUZWFtCisgICAgICAgICAgICAgICAgICAgZG9jc09mZG1Eb3duc3RyZWFtICgyNzcpLCAtLSBDQVRWIERvd25zdHJlYW0gT0ZETSBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBkb2NzT2ZkbWFVcHN0cmVhbSAoMjc4KSAtLSBDQVRWIFVwc3RyZWFtIE9GRE1BIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIH0KIAogSUFOQXR1bm5lbFR5cGUgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgogICAgIFNUQVRVUyAgICAgY3VycmVudApAQCAtNDgxLDcgKzYzOSw4IEBACiAgICAgICAgICAgICAgICAgICAgc2l4VG9Gb3VyKDExKSwgICAtLSA2dG80IGVuY2Fwc3VsYXRpb24KICAgICAgICAgICAgICAgICAgICBzaXhPdmVyRm91cigxMiksIC0tIDZvdmVyNCBlbmNhcHN1bGF0aW9uCiAgICAgICAgICAgICAgICAgICAgaXNhdGFwKDEzKSwgICAgICAtLSBJU0FUQVAgZW5jYXBzdWxhdGlvbgotICAgICAgICAgICAgICAgICAgIHRlcmVkbygxNCkgICAgICAgLS0gVGVyZWRvIGVuY2Fwc3VsYXRpb24KKyAgICAgICAgICAgICAgICAgICB0ZXJlZG8oMTQpLCAgICAgIC0tIFRlcmVkbyBlbmNhcHN1bGF0aW9uCisgICAgICAgICAgICAgICAgICAgaXBIdHRwcygxNSkgICAgICAtLSBJUEhUVFBTCiAgICAgICAgICAgICAgICB9CiAKICAgIEVORApkaWZmIC0tZ2l0IGEvbWlicy9JUC1GT1JXQVJELU1JQi50eHQgYi9taWJzL0lQLUZPUldBUkQtTUlCLnR4dAppbmRleCAzMDkwZmY3Li4zNDdiNWUwIDEwMDY0NAotLS0gYS9taWJzL0lQLUZPUldBUkQtTUlCLnR4dAorKysgYi9taWJzL0lQLUZPUldBUkQtTUlCLnR4dApAQCAtNiw4ICs2LDYgQEAKICAgICBDb3VudGVyMzIgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gU05NUHYyLVNNSQogICAgIFJvd1N0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBTTk1QdjItVEMKIAotCi0KICAgICBNT0RVTEUtQ09NUExJQU5DRSwgT0JKRUNULUdST1VQICAgIEZST00gU05NUHYyLUNPTkYKICAgICBJbnRlcmZhY2VJbmRleE9yWmVybyAgICAgICAgICAgICAgIEZST00gSUYtTUlCCiAgICAgaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIElQLU1JQgpAQCAtNTYsOSArNTQsNiBAQAogICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIElQIEZvcndhcmRpbmcgTUlCIGluIGEKICAgICAgICAgICAgIHJlYWQtb25seSBtb2RlLgogCi0KLQotCiAgICAgICAgICAgICBUaGUgaW5ldENpZHJSb3V0ZVRhYmxlIHJlcGxhY2VzIHRoZSBJUHY0LXNwZWNpZmljCiAgICAgICAgICAgICBpcENpZHJSb3V0ZVRhYmxlLCBpdHMgcmVsYXRlZCBvYmplY3RzLCBhbmQgcmVsYXRlZAogICAgICAgICAgICAgY29uZm9ybWFuY2Ugc3RhdGVtZW50cy4KQEAgLTEwNyw5ICsxMDIsNiBAQAogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhpcyBlbnRpdHkncyBJUCBSb3V0aW5nIHRhYmxlLiIKICAgICBSRUZFUkVOQ0UKICAgICAgICAgICAgIlJGQyAxMjEzIFNlY3Rpb24gNi42LCBUaGUgSVAgR3JvdXAiCkBAIC0xNTgsOSArMTUwLDYgQEAKICAgICAgICAgaW5ldENpZHJSb3V0ZU1ldHJpYzEgICAgICBJbnRlZ2VyMzIsCiAgICAgICAgIGluZXRDaWRyUm91dGVNZXRyaWMyICAgICAgSW50ZWdlcjMyLAogICAgICAgICBpbmV0Q2lkclJvdXRlTWV0cmljMyAgICAgIEludGVnZXIzMiwKLQotCi0KICAgICAgICAgaW5ldENpZHJSb3V0ZU1ldHJpYzQgICAgICBJbnRlZ2VyMzIsCiAgICAgICAgIGluZXRDaWRyUm91dGVNZXRyaWM1ICAgICAgSW50ZWdlcjMyLAogICAgICAgICBpbmV0Q2lkclJvdXRlU3RhdHVzICAgICAgIFJvd1N0YXR1cwpAQCAtMTk4LDcgKzE4Nyw2IEBACiAgICAgICAgICAgICBlcXVhbCB0byB4LiAgSWYgbm90LCB0aGVuIHRoZSBpbmRleCBwYWlyIGlzIG5vdAogICAgICAgICAgICAgY29uc2lzdGVudCBhbmQgYW4gaW5jb25zaXN0ZW50TmFtZSBlcnJvciBtdXN0IGJlCiAgICAgICAgICAgICByZXR1cm5lZCBvbiBTRVQgb3IgQ1JFQVRFIHJlcXVlc3RzLiIKLQogICAgIDo6PSB7IGluZXRDaWRyUm91dGVFbnRyeSAyIH0KIAogaW5ldENpZHJSb3V0ZVBmeExlbiBPQkpFQ1QtVFlQRQpAQCAtMjEwLDggKzE5OCw2IEBACiAgICAgICAgICAgICBtYXNrIHRvIGJlIGxvZ2ljYWwtQU5EZWQgd2l0aCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcwogICAgICAgICAgICAgYmVmb3JlIGJlaW5nIGNvbXBhcmVkIHRvIHRoZSB2YWx1ZSBpbiB0aGUKIAotCi0KICAgICAgICAgICAgIGluZXRDaWRyUm91dGVEZXN0IGZpZWxkLgogCiAgICAgICAgICAgICBUaGUgdmFsdWVzIGZvciB0aGUgaW5kZXggb2JqZWN0cyBpbmV0Q2lkclJvdXRlRGVzdCBhbmQKQEAgLTIyMyw3ICsyMDksNiBAQAogICAgICAgICAgICAgZXF1YWwgdG8geC4gIElmIG5vdCwgdGhlbiB0aGUgaW5kZXggcGFpciBpcyBub3QKICAgICAgICAgICAgIGNvbnNpc3RlbnQgYW5kIGFuIGluY29uc2lzdGVudE5hbWUgZXJyb3IgbXVzdCBiZQogICAgICAgICAgICAgcmV0dXJuZWQgb24gU0VUIG9yIENSRUFURSByZXF1ZXN0cy4iCi0KICAgICA6Oj0geyBpbmV0Q2lkclJvdXRlRW50cnkgMyB9CiAKIGluZXRDaWRyUm91dGVQb2xpY3kgT0JKRUNULVRZUEUKQEAgLTI2MSw4ICsyNDYsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJPbiByZW1vdGUgcm91dGVzLCB0aGUgYWRkcmVzcyBvZiB0aGUgbmV4dCBzeXN0ZW0gZW4KIAotCi0KICAgICAgICAgICAgIHJvdXRlLiAgRm9yIG5vbi1yZW1vdGUgcm91dGVzLCBhIHplcm8gbGVuZ3RoIHN0cmluZy4KIAogICAgICAgICAgICAgVGhlIHR5cGUgb2YgdGhpcyBhZGRyZXNzIGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mCkBAIC0zMTIsOSArMjk1LDYgQEAKICAgICAgICAgICAgIGRpc2NhcmRzIHRoZSBtZXNzYWdlIHNpbGVudGx5LiIKICAgICA6Oj0geyBpbmV0Q2lkclJvdXRlRW50cnkgOCB9CiAKLQotCi0KIGluZXRDaWRyUm91dGVQcm90byBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSUFOQWlwUm91dGVQcm90b2NvbAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CkBAIC0zNjIsOSArMzQyLDYgQEAKICAgICAgICAgICAgIHZhbHVlLiAgSWYgdGhpcyBtZXRyaWMgaXMgbm90IHVzZWQsIGl0cyB2YWx1ZSBzaG91bGQgYmUKICAgICAgICAgICAgIHNldCB0byAtMS4iCiAgICAgREVGVkFMIHsgLTEgfQotCi0KLQogICAgIDo6PSB7IGluZXRDaWRyUm91dGVFbnRyeSAxMiB9CiAKIGluZXRDaWRyUm91dGVNZXRyaWMyIE9CSkVDVC1UWVBFCkBAIC00MTQsOCArMzkxLDYgQEAKICAgICAgICAgICAgIkFuIGFsdGVybmF0ZSByb3V0aW5nIG1ldHJpYyBmb3IgdGhpcyByb3V0ZS4gIFRoZQogICAgICAgICAgICAgc2VtYW50aWNzIG9mIHRoaXMgbWV0cmljIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSByb3V0aW5nLQogCi0KLQogICAgICAgICAgICAgcHJvdG9jb2wgc3BlY2lmaWVkIGluIHRoZSByb3V0ZSdzIGluZXRDaWRyUm91dGVQcm90bwogICAgICAgICAgICAgdmFsdWUuICBJZiB0aGlzIG1ldHJpYyBpcyBub3QgdXNlZCwgaXRzIHZhbHVlIHNob3VsZCBiZQogICAgICAgICAgICAgc2V0IHRvIC0xLiIKQEAgLTQ2NSw4ICs0NDAsNiBAQAogICAgICAgICAgICAgLS0gICAgIFRoaXMgTUlCIHJlcXVpcmVzIHN1cHBvcnQgZm9yIGdsb2JhbCBhbmQKICAgICAgICAgICAgIC0tICAgICBub24tZ2xvYmFsIGlwdjQgYW5kIGlwdjYgYWRkcmVzc2VzLgogCi0KLQogICAgICAgICAgICAgLS0KICAgICAgICAgICAgIC0tIE9CSkVDVCAgICAgIGluZXRDaWRyUm91dGVEZXN0CiAgICAgICAgICAgICAtLSBTWU5UQVggICAgICBJbmV0QWRkcmVzcyAoU0laRSAoNCB8IDggfCAxNiB8IDIwKSkKQEAgLTQ5Nyw3ICs0NzAsNiBAQAogICAgV1JJVEUtU1lOVEFYICBSb3dTdGF0dXMgeyBhY3RpdmUoMSksIG5vdEluU2VydmljZSAoMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEdvKDQpLCBkZXN0cm95KDYpIH0KICAgIERFU0NSSVBUSU9OICAiU3VwcG9ydCBmb3IgY3JlYXRlQW5kV2FpdCBpcyBub3QgcmVxdWlyZWQuIgotCiAgICA6Oj0geyBpcEZvcndhcmRDb21wbGlhbmNlcyAzIH0KIAogaXBGb3J3YXJkUmVhZE9ubHlDb21wbGlhbmNlIE1PRFVMRS1DT01QTElBTkNFCkBAIC01MTUsOSArNDg3LDYgQEAKICAgICAgICJXcml0ZSBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLiIKIAogICAgT0JKRUNUICAgICAgaW5ldENpZHJSb3V0ZVR5cGUKLQotCi0KICAgIE1JTi1BQ0NFU1MgIHJlYWQtb25seQogICAgREVTQ1JJUFRJT04KICAgICAgICJXcml0ZSBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLiIKQEAgLTU1Nyw3ICs1MjYsNiBAQAogICAgTUlOLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICBERVNDUklQVElPTgogICAgICAgIldyaXRlIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQuIgotCiAgICA6Oj0geyBpcEZvcndhcmRDb21wbGlhbmNlcyA0IH0KIAogLS0gdW5pdHMgb2YgY29uZm9ybWFuY2UKQEAgLTU2Niw5ICs1MzQsNiBAQAogICAgIE9CSkVDVFMgeyBpbmV0Q2lkclJvdXRlRGlzY2FyZHMsCiAgICAgICAgICAgICAgIGluZXRDaWRyUm91dGVJZkluZGV4LCBpbmV0Q2lkclJvdXRlVHlwZSwKICAgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZVByb3RvLCBpbmV0Q2lkclJvdXRlQWdlLAotCi0KLQogICAgICAgICAgICAgICBpbmV0Q2lkclJvdXRlTmV4dEhvcEFTLCBpbmV0Q2lkclJvdXRlTWV0cmljMSwKICAgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZU1ldHJpYzIsIGluZXRDaWRyUm91dGVNZXRyaWMzLAogICAgICAgICAgICAgICBpbmV0Q2lkclJvdXRlTWV0cmljNCwgaW5ldENpZHJSb3V0ZU1ldHJpYzUsCkBAIC02MTgsOCArNTgzLDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiQSBwYXJ0aWN1bGFyIHJvdXRlIHRvIGEgcGFydGljdWxhciBkZXN0aW5hdGlvbiwgdW5kZXIgYQogCi0KLQogICAgICAgICAgICAgcGFydGljdWxhciBwb2xpY3kuIgogICAgIElOREVYIHsKICAgICAgICAgaXBDaWRyUm91dGVEZXN0LApAQCAtNjY4LDkgKzYzMSw2IEBACiBpcENpZHJSb3V0ZU1hc2sgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIElwQWRkcmVzcwogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5Ci0KLQotCiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIkluZGljYXRlIHRoZSBtYXNrIHRvIGJlIGxvZ2ljYWwtQU5EZWQgd2l0aCB0aGUKQEAgLTcyMCw4ICs2ODAsNiBAQAogICAgICAgICAgICAgICAgMSAwIDAgMCAgPT0+ICAxNiAgICAgIDEgMCAwIDEgID09PiAgMTgKICAgICAgICAgICAgICAgIDEgMCAxIDAgID09PiAgMjAgICAgICAxIDAgMSAxICA9PT4gIDIyCiAKLQotCiAgICAgICAgICAgICAgICAxIDEgMCAwICA9PT4gIDI0ICAgICAgMSAxIDAgMSAgPT0+ICAyNgogICAgICAgICAgICAgICAgMSAxIDEgMCAgPT0+ICAyOCAgICAgIDEgMSAxIDEgID09PiAgMzAiCiAgICAgOjo9IHsgaXBDaWRyUm91dGVFbnRyeSAzIH0KQEAgLTc3MSw5ICs3MjksNiBAQAogICAgICAgICAgICAgcm91dGVzLiIKICAgICA6Oj0geyBpcENpZHJSb3V0ZUVudHJ5IDYgfQogCi0KLQotCiBpcENpZHJSb3V0ZVByb3RvIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJTlRFR0VSIHsKICAgICAgICAgICAgICAgICBvdGhlciAgICAgKDEpLCAgLS0gbm90IHNwZWNpZmllZApAQCAtODIxLDkgKzc3Niw2IEBACiBpcENpZHJSb3V0ZUluZm8gT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIE9CSkVDVCBJREVOVElGSUVSCiAgICAgTUFYLUFDQ0VTUyByZWFkLWNyZWF0ZQotCi0KLQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJBIHJlZmVyZW5jZSB0byBNSUIgZGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gdGhlCkBAIC04NzMsOCArODI1LDYgQEAKICAgICAgICAgICAgIHByb3RvY29sIHNwZWNpZmllZCBpbiB0aGUgcm91dGUncyBpcENpZHJSb3V0ZVByb3RvCiAgICAgICAgICAgICB2YWx1ZS4gIElmIHRoaXMgbWV0cmljIGlzIG5vdCB1c2VkLCBpdHMgdmFsdWUgc2hvdWxkIGJlCiAKLQotCiAgICAgICAgICAgICBzZXQgdG8gLTEuIgogICAgIERFRlZBTCB7IC0xIH0KICAgICA6Oj0geyBpcENpZHJSb3V0ZUVudHJ5IDEyIH0KQEAgLTkyMyw5ICs4NzMsNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC1jcmVhdGUKICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIHJvdyBzdGF0dXMgdmFyaWFibGUsIHVzZWQgYWNjb3JkaW5nIHRvIHJvdwogICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGFuZCByZW1vdmFsIGNvbnZlbnRpb25zLiIKICAgICA6Oj0geyBpcENpZHJSb3V0ZUVudHJ5IDE2IH0KQEAgLTk0NCw3ICs4OTEsNiBAQAogCiAgICBNT0RVTEUgIC0tIHRoaXMgbW9kdWxlCiAgICBNQU5EQVRPUlktR1JPVVBTIHsgaXBGb3J3YXJkQ2lkclJvdXRlR3JvdXAgfQotCiAgICA6Oj0geyBpcEZvcndhcmRDb21wbGlhbmNlcyAxIH0KIAogLS0gdW5pdHMgb2YgY29uZm9ybWFuY2UKQEAgLTk3NCw5ICs5MjAsNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBvYnNvbGV0ZQogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgbnVtYmVyIG9mIGN1cnJlbnQgaXBGb3J3YXJkVGFibGUgZW50cmllcyB0aGF0IGFyZQogICAgICAgICAgICAgbm90IGludmFsaWQuIgogICAgIDo6PSB7IGlwRm9yd2FyZCAxIH0KQEAgLTEwMjUsOSArOTY4LDYgQEAKICAgICAgICAgaXBGb3J3YXJkSW5mbyAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKICAgICAgICAgaXBGb3J3YXJkTmV4dEhvcEFTICBJbnRlZ2VyMzIsCiAgICAgICAgIGlwRm9yd2FyZE1ldHJpYzEgICAgSW50ZWdlcjMyLAotCi0KLQogICAgICAgICBpcEZvcndhcmRNZXRyaWMyICAgIEludGVnZXIzMiwKICAgICAgICAgaXBGb3J3YXJkTWV0cmljMyAgICBJbnRlZ2VyMzIsCiAgICAgICAgIGlwRm9yd2FyZE1ldHJpYzQgICAgSW50ZWdlcjMyLApAQCAtMTA3Nyw4ICsxMDE3LDYgQEAKIC0tIGFuZCB0aGUgUm91dGVyIFJlcXVpcmVtZW50cyBkb2N1bWVudHMgZGlzYWdyZWUgb24gdGhlIHdpZHRoCiAtLSBvZiB0aGUgVE9TIGZpZWxkLiAgVGhpcyBtYXBwaW5nIGRlc2NyaWJlcyB0aGUgUm91dGVyCiAKLQotCiAtLSBSZXF1aXJlbWVudHMgbWFwcGluZywgYW5kIGxlYXZlcyByb29tIHRvIHdpZGVuIHRoZSBUT1MgZmllbGQKIC0tIHdpdGhvdXQgaW1wYWN0IHRvIGZpZWxkZWQgc3lzdGVtcy4KIApAQCAtMTEwNSw4ICsxMDQzLDYgQEAKICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwKICAgICAgICAgICAgICstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKIAotCi0KICAgICAgICAgICAgICAgICAgICAgICAgICBJUCBUT1MgICAgICAgICAgICAgICAgSVAgVE9TCiAgICAgICAgICAgICAgICBGaWVsZCAgICAgUG9saWN5ICAgICAgRmllbGQgICAgIFBvbGljeQogICAgICAgICAgICAgICAgQ29udGVudHMgICAgQ29kZSAgICAgIENvbnRlbnRzICAgIENvZGUKQEAgLTExMjcsOSArMTA2Myw2IEBACiAgICAgOjo9IHsgaXBGb3J3YXJkRW50cnkgMyB9CiAKIGlwRm9yd2FyZE5leHRIb3AgT0JKRUNULVRZUEUKLQotCi0KICAgICBTWU5UQVggICAgIElwQWRkcmVzcwogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBvYnNvbGV0ZQpAQCAtMTE3OSw5ICsxMTEyLDYgQEAKICAgICBERUZWQUwgeyBpbnZhbGlkIH0KICAgICA6Oj0geyBpcEZvcndhcmRFbnRyeSA2IH0KIAotCi0KLQogaXBGb3J3YXJkUHJvdG8gT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIElOVEVHRVIgewogICAgICAgICAgICAgICAgIG90aGVyICAgICAoMSksICAtLSBub3Qgc3BlY2lmaWVkCkBAIC0xMjI5LDkgKzExNTksNiBAQAogICAgIFNZTlRBWCAgICAgT0JKRUNUIElERU5USUZJRVIKICAgICBNQVgtQUNDRVNTIHJlYWQtY3JlYXRlCiAgICAgU1RBVFVTICAgICBvYnNvbGV0ZQotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJBIHJlZmVyZW5jZSB0byBNSUIgZGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gdGhlCiAgICAgICAgICAgICBwYXJ0aWN1bGFyIHJvdXRpbmcgcHJvdG9jb2wgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IKQEAgLTEyODEsOSArMTIwOCw2IEBACiAgICAgREVGVkFMIHsgLTEgfQogICAgIDo6PSB7IGlwRm9yd2FyZEVudHJ5IDEyIH0KIAotCi0KLQogaXBGb3J3YXJkTWV0cmljMyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSW50ZWdlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLWNyZWF0ZQpAQCAtMTMzMiwxMiArMTI1Niw4IEBACiAgICAgICAgICAgICJUaGUgY29tcGxpYW5jZSBzdGF0ZW1lbnQgZm9yIFNOTVAgZW50aXRpZXMgdGhhdAogICAgICAgICAgICAgaW1wbGVtZW50IHRoZSBpcEZvcndhcmQgTUlCLiIKIAotCi0KLQogICAgTU9EVUxFICAtLSB0aGlzIG1vZHVsZQogICAgTUFOREFUT1JZLUdST1VQUyB7IGlwRm9yd2FyZE11bHRpUGF0aEdyb3VwIH0KLQogICAgOjo9IHsgaXBGb3J3YXJkQ29tcGxpYW5jZXMgMiB9CiAKIGlwRm9yd2FyZE11bHRpUGF0aEdyb3VwIE9CSkVDVC1HUk9VUApkaWZmIC0tZ2l0IGEvbWlicy9JUC1NSUIudHh0IGIvbWlicy9JUC1NSUIudHh0CmluZGV4IDBhOTM1MDEuLmZlMmRiNWYgMTAwNjQ0Ci0tLSBhL21pYnMvSVAtTUlCLnR4dAorKysgYi9taWJzL0lQLU1JQi50eHQKQEAgLTIxLDggKzIxLDYgQEAKICAgICBDT05UQUNULUlORk8KICAgICAgICAgICAgIkVkaXRvcjoKIAotCi0KICAgICAgICAgICAgIFNoYXduIEEuIFJvdXRoaWVyCiAgICAgICAgICAgICBJbnRlcndvcmtpbmcgTGFicwogICAgICAgICAgICAgMTA4IFdoaXNwZXJpbmcgUGluZXMgRHIuIFN1aXRlIDIzNQpAQCAtNzIsOCArNzAsNiBAQAogCiAgICAgICAgICAgICBsaW5rbGF5ZXIoNSkgaW5kaWNhdGVzIGFuIGFkZHJlc3MgY3JlYXRlZCBieSBJUHY2IHN0YXRlbGVzcwogCi0KLQogICAgICAgICAgICAgYXV0by1jb25maWd1cmF0aW9uLgogCiAgICAgICAgICAgICByYW5kb20oNikgaW5kaWNhdGVzIGFuIGFkZHJlc3MgY2hvc2VuIGJ5IHRoZSBzeXN0ZW0gYXQKQEAgLTEyMyw4ICsxMTksNiBAQAogICAgICAgICAgICAgVGhlIGR1cGxpY2F0ZSg3KSBzdGF0ZSBpbmRpY2F0ZXMgdGhlIGFkZHJlc3MgaGFzIGJlZW4KICAgICAgICAgICAgIGRldGVybWluZWQgdG8gYmUgbm9uLXVuaXF1ZSBvbiB0aGUgbGluayBhbmQgc28gbXVzdCBub3QgYmUKIAotCi0KICAgICAgICAgICAgIHVzZWQuCiAKICAgICAgICAgICAgIFRoZSBvcHRpbWlzdGljKDgpIHN0YXRlIGluZGljYXRlcyB0aGUgYWRkcmVzcyBpcyBhdmFpbGFibGUKQEAgLTE3Myw5ICsxNjcsNiBAQAogICAgICAgICBtYW51YWwoMiksCiAgICAgICAgIHdlbGxrbm93bigzKSwKICAgICAgICAgZGhjcCg0KSwKLQotCi0KICAgICAgICAgcm91dGVyYWR2KDUpCiAgICAgfQogCkBAIC0yMjUsOCArMjE2LDYgQEAKICAgICAgICAgICAgIHRoZSBJUHY0IGhlYWRlciBvZiBkYXRhZ3JhbXMgb3JpZ2luYXRlZCBhdCB0aGlzIGVudGl0eSwKICAgICAgICAgICAgIHdoZW5ldmVyIGEgVFRMIHZhbHVlIGlzIG5vdCBzdXBwbGllZCBieSB0aGUgdHJhbnNwb3J0IGxheWVyCiAKLQotCiAgICAgICAgICAgICBwcm90b2NvbC4KIAogICAgICAgICAgICAgV2hlbiB0aGlzIG9iamVjdCBpcyB3cml0dGVuLCB0aGUgZW50aXR5IHNob3VsZCBzYXZlIHRoZQpAQCAtMjc1LDkgKzI2NCw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLXdyaXRlCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSBkZWZhdWx0IHZhbHVlIGluc2VydGVkIGludG8gdGhlIEhvcCBMaW1pdCBmaWVsZCBvZiB0aGUKICAgICAgICAgICAgIElQdjYgaGVhZGVyIG9mIGRhdGFncmFtcyBvcmlnaW5hdGVkIGF0IHRoaXMgZW50aXR5IHdoZW5ldmVyCiAgICAgICAgICAgICBhIEhvcCBMaW1pdCB2YWx1ZSBpcyBub3Qgc3VwcGxpZWQgYnkgdGhlIHRyYW5zcG9ydCBsYXllcgpAQCAtMzI2LDkgKzMxMiw2IEBACiAgICAgICAgICAgICJBbiBlbnRyeSBjb250YWluaW5nIElQdjQtc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIGEgc3BlY2lmaWMKICAgICAgICAgICAgIGludGVyZmFjZS4iCiAgICAgSU5ERVggeyBpcHY0SW50ZXJmYWNlSWZJbmRleCB9Ci0KLQotCiAgICAgOjo9IHsgaXB2NEludGVyZmFjZVRhYmxlIDEgfQogCiBJcHY0SW50ZXJmYWNlRW50cnkgOjo9IFNFUVVFTkNFIHsKQEAgLTM3Nyw5ICszNjAsNiBAQAogaXB2NEludGVyZmFjZVJldHJhbnNtaXRUaW1lIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBVbnNpZ25lZDMyCiAgICAgVU5JVFMgICAgICAibWlsbGlzZWNvbmRzIgotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTQyOCw5ICs0MDgsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJBbiBlbnRyeSBjb250YWluaW5nIElQdjYtc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4KICAgICAgICAgICAgIGludGVyZmFjZS4iCi0KLQotCiAgICAgSU5ERVggeyBpcHY2SW50ZXJmYWNlSWZJbmRleCB9CiAgICAgOjo9IHsgaXB2NkludGVyZmFjZVRhYmxlIDEgfQogCkBAIC00NzksOSArNDU2LDYgQEAKICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxpbmsgdHlwZSB0byB3aGljaCB0aGlzCiAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgYXR0YWNoZWQuCiAKLQotCi0KICAgICAgICAgICAgIEEgemVybyBsZW5ndGggaWRlbnRpZmllciBtYXkgYmUgdXNlZCB3aGVyZSBhcHByb3ByaWF0ZS4gIE9uZQogICAgICAgICAgICAgcG9zc2libGUgZXhhbXBsZSBpcyBhIGxvb3BiYWNrIGludGVyZmFjZS4iCiAgICAgOjo9IHsgaXB2NkludGVyZmFjZUVudHJ5IDMgfQpAQCAtNTMwLDkgKzUwNCw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIHRpbWUgYmV0d2VlbiByZXRyYW5zbWlzc2lvbnMgb2YgTmVpZ2hib3IgU29saWNpdGF0aW9uCiAgICAgICAgICAgICBtZXNzYWdlcyB0byBhIG5laWdoYm9yIHdoZW4gcmVzb2x2aW5nIHRoZSBhZGRyZXNzIG9yIHdoZW4KICAgICAgICAgICAgIHByb2JpbmcgdGhlIHJlYWNoYWJpbGl0eSBvZiBhIG5laWdoYm9yLiIKQEAgLTU4Miw4ICs1NTMsNiBAQAogLS0KIC0tIE5vdGUgd2VsbDogQm90aCBvZiB0aGVzZSB0YWJsZXMgY29udGFpbiBzb21lIGl0ZW1zIHRoYXQgYXJlCiAKLQotCiAtLSByZXByZXNlbnRlZCBieSB0d28gb2JqZWN0cywgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBpbiBlaXRoZXIgMzIKIC0tIG9yIDY0IGJpdHMuICBGb3IgdGhvc2Ugb2JqZWN0cywgdGhlIDMyLWJpdCB2YWx1ZSBNVVNUIGJlIHRoZSBsb3cKIC0tIG9yZGVyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCB2YWx1ZS4gIEFsc28gbm90ZSB0aGF0IHRoZSAzMi1iaXQKQEAgLTYzMiw5ICs2MDEsNiBAQAogICAgICAgICBpcFN5c3RlbVN0YXRzUmVhc21GYWlscyAgICAgICAgICBDb3VudGVyMzIsCiAgICAgICAgIGlwU3lzdGVtU3RhdHNJbkRpc2NhcmRzICAgICAgICAgIENvdW50ZXIzMiwKICAgICAgICAgaXBTeXN0ZW1TdGF0c0luRGVsaXZlcnMgICAgICAgICAgQ291bnRlcjMyLAotCi0KLQogICAgICAgICBpcFN5c3RlbVN0YXRzSENJbkRlbGl2ZXJzICAgICAgICBDb3VudGVyNjQsCiAgICAgICAgIGlwU3lzdGVtU3RhdHNPdXRSZXF1ZXN0cyAgICAgICAgIENvdW50ZXIzMiwKICAgICAgICAgaXBTeXN0ZW1TdGF0c0hDT3V0UmVxdWVzdHMgICAgICAgQ291bnRlcjY0LApAQCAtNjgzLDkgKzY0OSw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIHRvdGFsIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgcmVjZWl2ZWQsIGluY2x1ZGluZwogICAgICAgICAgICAgdGhvc2UgcmVjZWl2ZWQgaW4gZXJyb3IuCiAKQEAgLTczNSw4ICs2OTgsNiBAQAogICAgICAgICAgICAgaW5jbHVkaW5nIHRob3NlIHJlY2VpdmVkIGluIGVycm9yLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZQogICAgICAgICAgICAgc2FtZSBvY3RldHMgYXMgaXBTeXN0ZW1TdGF0c0luT2N0ZXRzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIKIAotCi0KICAgICAgICAgICAgIHZhbHVlcy4KIAogICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CkBAIC03ODYsOCArNzQ3LDYgQEAKICAgICAgICAgICAgIGluY2x1ZGVzIGludmFsaWQgYWRkcmVzc2VzIChlLmcuLCA6OjApLiAgRm9yIGVudGl0aWVzCiAgICAgICAgICAgICB0aGF0IGFyZSBub3QgSVAgcm91dGVycyBhbmQgdGhlcmVmb3JlIGRvIG5vdCBmb3J3YXJkCiAKLQotCiAgICAgICAgICAgICBkYXRhZ3JhbXMsIHRoaXMgY291bnRlciBpbmNsdWRlcyBkYXRhZ3JhbXMgZGlzY2FyZGVkCiAgICAgICAgICAgICBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdhcyBub3QgYSBsb2NhbCBhZGRyZXNzLgogCkBAIC04MzYsOSArNzk1LDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgbnVtYmVyIG9mIGlucHV0IGRhdGFncmFtcyBmb3Igd2hpY2ggdGhpcyBlbnRpdHkgd2FzIG5vdAogICAgICAgICAgICAgdGhlaXIgZmluYWwgSVAgZGVzdGluYXRpb24gYW5kIGZvciB3aGljaCB0aGlzIGVudGl0eQogICAgICAgICAgICAgYXR0ZW1wdGVkIHRvIGZpbmQgYSByb3V0ZSB0byBmb3J3YXJkIHRoZW0gdG8gdGhhdCBmaW5hbApAQCAtODg4LDggKzg0NCw2IEBACiAKICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAogCi0KLQogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKICAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZS4iCkBAIC05MzgsOSArODkyLDYgQEAKIAogaXBTeXN0ZW1TdGF0c0luRGlzY2FyZHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTk4OSw5ICs5NDAsNiBAQAogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKICAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZS4iCi0KLQotCiAgICAgOjo9IHsgaXBTeXN0ZW1TdGF0c0VudHJ5IDE5IH0KIAogaXBTeXN0ZW1TdGF0c091dFJlcXVlc3RzIE9CSkVDVC1UWVBFCkBAIC0xMDQxLDggKzk4OSw2IEBACiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzRGlzY29udGludWl0eVRpbWUuIgogICAgIDo6PSB7IGlwU3lzdGVtU3RhdHNFbnRyeSAyMiB9CiAKLQotCiBpcFN5c3RlbVN0YXRzT3V0Rm9yd0RhdGFncmFtcyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKQEAgLTEwOTIsOCArMTAzOCw2IEBACiAgICAgICAgICAgICBkZXN0aW5hdGlvbiwgYnV0IHdlcmUgZGlzY2FyZGVkIChlLmcuLCBmb3IgbGFjayBvZgogICAgICAgICAgICAgYnVmZmVyIHNwYWNlKS4gIE5vdGUgdGhhdCB0aGlzIGNvdW50ZXIgd291bGQgaW5jbHVkZQogCi0KLQogICAgICAgICAgICAgZGF0YWdyYW1zIGNvdW50ZWQgaW4gaXBTeXN0ZW1TdGF0c091dEZvcndEYXRhZ3JhbXMgaWYgYW55CiAgICAgICAgICAgICBzdWNoIGRhdGFncmFtcyBtZXQgdGhpcyAoZGlzY3JldGlvbmFyeSkgZGlzY2FyZCBjcml0ZXJpb24uCiAKQEAgLTExNDIsOSArMTA4Niw2IEBACiBpcFN5c3RlbVN0YXRzT3V0RnJhZ0ZhaWxzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQotCi0KLQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgbnVtYmVyIG9mIElQIGRhdGFncmFtcyB0aGF0IGhhdmUgYmVlbiBkaXNjYXJkZWQgYmVjYXVzZQpAQCAtMTE5NCw4ICsxMTM1LDYgQEAKICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKIAotCi0KICAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZS4iCiAgICAgOjo9IHsgaXBTeXN0ZW1TdGF0c0VudHJ5IDMwIH0KQEAgLTEyNDUsOCArMTE4NCw2IEBACiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgogICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgogCi0KLQogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKICAgICA6Oj0geyBpcFN5c3RlbVN0YXRzRW50cnkgMzMgfQogCkBAIC0xMjk1LDkgKzEyMzIsNiBAQAogCiBpcFN5c3RlbVN0YXRzSENJbk1jYXN0T2N0ZXRzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyNjQKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC0xMzQ3LDggKzEyODEsNiBAQAogICAgICAgICAgICAiVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgdHJhbnNtaXR0ZWQgaW4gSVAgbXVsdGljYXN0CiAgICAgICAgICAgICBkYXRhZ3JhbXMuICBPY3RldHMgZnJvbSBkYXRhZ3JhbXMgY291bnRlZCBpbgogCi0KLQogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c091dE1jYXN0UGt0cyBNVVNUIGJlIGNvdW50ZWQgaGVyZS4KIAogICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CkBAIC0xMzk4LDggKzEzMzAsNiBAQAogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKICAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKIAotCi0KICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZS4iCiAgICAgOjo9IHsgaXBTeXN0ZW1TdGF0c0VudHJ5IDQzIH0KIApAQCAtMTQ0OCw5ICsxMzc4LDYgQEAKIGlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgVW5zaWduZWQzMgogICAgIFVOSVRTICAgICAgIm1pbGxpLXNlY29uZHMiCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtMTQ5OSw5ICsxNDI2LDYgQEAKIElwSWZTdGF0c0VudHJ5IDo6PSBTRVFVRU5DRSB7CiAgICAgICAgIGlwSWZTdGF0c0lQVmVyc2lvbiAgICAgICAgICAgSW5ldFZlcnNpb24sCiAgICAgICAgIGlwSWZTdGF0c0lmSW5kZXggICAgICAgICAgICAgSW50ZXJmYWNlSW5kZXgsCi0KLQotCiAgICAgICAgIGlwSWZTdGF0c0luUmVjZWl2ZXMgICAgICAgICAgQ291bnRlcjMyLAogICAgICAgICBpcElmU3RhdHNIQ0luUmVjZWl2ZXMgICAgICAgIENvdW50ZXI2NCwKICAgICAgICAgaXBJZlN0YXRzSW5PY3RldHMgICAgICAgICAgICBDb3VudGVyMzIsCkBAIC0xNTUwLDkgKzE0NzQsNiBAQAogCiBpcElmU3RhdHNJUFZlcnNpb24gT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIEluZXRWZXJzaW9uCi0KLQotCiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC0xNjAxLDkgKzE1MjIsNiBAQAogICAgIDo6PSB7IGlwSWZTdGF0c0VudHJ5IDQgfQogCiBpcElmU3RhdHNJbk9jdGV0cyBPQkpFQ1QtVFlQRQotCi0KLQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKQEAgLTE2NTIsOSArMTU3MCw2IEBACiAKIGlwSWZTdGF0c0luTm9Sb3V0ZXMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTE3MDQsOCArMTYxOSw2IEBACiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgogICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgogCi0KLQogICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuIgogICAgIDo6PSB7IGlwSWZTdGF0c0VudHJ5IDEwIH0KIApAQCAtMTc1NSw4ICsxNjY4LDYgQEAKICAgICAgICAgICAgIGF0dGVtcHRlZCB0byBmaW5kIGEgcm91dGUgdG8gZm9yd2FyZCB0aGVtIHRvIHRoYXQgZmluYWwKICAgICAgICAgICAgIGRlc3RpbmF0aW9uLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZSBzYW1lIHBhY2tldHMgYXMKIAotCi0KICAgICAgICAgICAgIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KIAogICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CkBAIC0xODA1LDkgKzE3MTYsNiBAQAogaXBJZlN0YXRzUmVhc21GYWlscyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKLQotCi0KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIG51bWJlciBvZiBmYWlsdXJlcyBkZXRlY3RlZCBieSB0aGUgSVAgcmUtYXNzZW1ibHkKQEAgLTE4NTcsOCArMTc2NSw2IEBACiAgICAgICAgICAgICBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlc2UgZGF0YWdyYW1zIHdlcmUgYWRkcmVzc2VkIGlzCiAgICAgICAgICAgICBpbmNyZW1lbnRlZC4gIFRoaXMgaW50ZXJmYWNlIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKIAotCi0KICAgICAgICAgICAgIGlucHV0IGludGVyZmFjZSBmb3Igc29tZSBvZiB0aGUgZGF0YWdyYW1zLgogCiAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKQEAgLTE5MDgsOCArMTgxNCw2IEBACiAgICAgICAgICAgICBwcm90b2NvbHMgKGluY2x1ZGluZyBJQ01QKSBzdXBwbGllZCB0byBJUCBpbiByZXF1ZXN0cyBmb3IKICAgICAgICAgICAgIHRyYW5zbWlzc2lvbi4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBwYWNrZXRzIGFzCiAKLQotCiAgICAgICAgICAgICBpcElmU3RhdHNPdXRSZXF1ZXN0cywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KIAogICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CkBAIC0xOTU5LDggKzE4NjMsNiBAQAogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKICAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKIAotCi0KICAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKICAgICA6Oj0geyBpcElmU3RhdHNFbnRyeSAyNCB9CiAKQEAgLTIwMTAsOCArMTkxMiw2IEBACiAKICAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQogCi0KLQogICAgICAgICAgICAgb3V0Z29pbmcgaW50ZXJmYWNlIGlzIGluY3JlbWVudGVkIGZvciBhIHN1Y2Nlc3NmdWxseQogICAgICAgICAgICAgZnJhZ21lbnRlZCBkYXRhZ3JhbS4KIApAQCAtMjA2MCw5ICsxOTYwLDYgQEAKICAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKICAgICA6Oj0geyBpcElmU3RhdHNFbnRyeSAyOSB9CiAKLQotCi0KIGlwSWZTdGF0c091dFRyYW5zbWl0cyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKQEAgLTIxMTEsOSArMjAwOCw2IEBACiAgICAgOjo9IHsgaXBJZlN0YXRzRW50cnkgMzIgfQogCiBpcElmU3RhdHNIQ091dE9jdGV0cyBPQkpFQ1QtVFlQRQotCi0KLQogICAgIFNZTlRBWCAgICAgQ291bnRlcjY0CiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKQEAgLTIxNjMsOCArMjA1Nyw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkIGluIElQIG11bHRpY2FzdAogCi0KLQogICAgICAgICAgICAgZGF0YWdyYW1zLiAgT2N0ZXRzIGZyb20gZGF0YWdyYW1zIGNvdW50ZWQgaW4KICAgICAgICAgICAgIGlwSWZTdGF0c0luTWNhc3RQa3RzIE1VU1QgYmUgY291bnRlZCBoZXJlLgogCkBAIC0yMjE0LDggKzIxMDYsNiBAQAogICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgogCi0KLQogICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgogICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuIgogICAgIDo6PSB7IGlwSWZTdGF0c0VudHJ5IDM5IH0KQEAgLTIyNjQsOSArMjE1NCw2IEBACiAgICAgOjo9IHsgaXBJZlN0YXRzRW50cnkgNDIgfQogCiBpcElmU3RhdHNIQ0luQmNhc3RQa3RzIE9CSkVDVC1UWVBFCi0KLQotCiAgICAgU1lOVEFYICAgICBDb3VudGVyNjQKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudApAQCAtMjMxNiw4ICsyMjAzLDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIHZhbHVlIG9mIHN5c1VwVGltZSBvbiB0aGUgbW9zdCByZWNlbnQgb2NjYXNpb24gYXQgd2hpY2gKIAotCi0KICAgICAgICAgICAgIGFueSBvbmUgb3IgbW9yZSBvZiB0aGlzIGVudHJ5J3MgY291bnRlcnMgc3VmZmVyZWQgYQogICAgICAgICAgICAgZGlzY29udGludWl0eS4KIApAQCAtMjM2Nyw4ICsyMjUyLDYgQEAKICAgICAgICAgICAgIHRhYmxlIGluZGVwZW5kZW50IG9mIGhvdyB0aGUgZW50aXR5IGxlYXJuZWQgdGhlIHByZWZpeC4KICAgICAgICAgICAgIChUaGlzIHRhYmxlIGlzbid0IGxpbWl0ZWQgdG8gcHJlZml4ZXMgbGVhcm5lZCBmcm9tIHJvdXRlcgogCi0KLQogICAgICAgICAgICAgYWR2ZXJ0aXNlbWVudHMuKSIKICAgICA6Oj0geyBpcCAzMiB9CiAKQEAgLTI0MTcsOSArMjMwMCw2IEBACiAgICAgU1lOVEFYICAgICBJbmV0QWRkcmVzcwogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIGFkZHJlc3MgcHJlZml4LiAgVGhlIGFkZHJlc3MgdHlwZSBvZiB0aGlzIG9iamVjdCBpcwogICAgICAgICAgICAgc3BlY2lmaWVkIGluIGlwQWRkcmVzc1ByZWZpeFR5cGUuICBUaGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0CkBAIC0yNDY4LDkgKzIzNDgsNiBAQAogCiBpcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgVHJ1dGhWYWx1ZQotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTI1MTksOSArMjM5Niw2IEBACiAgICAgICAgICAgICBUaGUgYWRkcmVzcyBnZW5lcmF0ZWQgZnJvbSBhbiBpbnZhbGlkYXRlZCBwcmVmaXggc2hvdWxkIG5vdAogICAgICAgICAgICAgYXBwZWFyIGFzIHRoZSBkZXN0aW5hdGlvbiBvciBzb3VyY2UgYWRkcmVzcyBvZiBhIHBhY2tldC4KIAotCi0KLQogICAgICAgICAgICAgVGhlIGRlZmF1bHQgZm9yIElQdjQgcHJlZml4ZXMgaXMgNCwyOTQsOTY3LDI5NSAoaW5maW5pdHkpLiIKICAgICBSRUZFUkVOQ0UgIkZvciBJUHY2IFJGQyAyNDYxLCBlc3BlY2lhbGx5IHNlY3Rpb25zIDIgYW5kIDQuNi4yIGFuZAogICAgICAgICAgICAgICAgUkZDIDI0NjIiCkBAIC0yNTcxLDggKzI0NDUsNiBAQAogICAgICAgICAgICAgaW50ZW50aW9uIGluIGFsbG93aW5nIGEgdXNlciB0byB3cml0ZSB0byB0aGlzIHRhYmxlIGlzIHRvCiAgICAgICAgICAgICBhbGxvdyB0aGVtIHRvIGFkZCBvciByZW1vdmUgYW55IGVudHJ5IHRoYXQgaXNuJ3QKIAotCi0KICAgICAgICAgICAgIHBlcm1hbmVudC4gIFRoZSB1c2VyIHNob3VsZCBiZSBhbGxvd2VkIHRvIG1vZGlmeSBvYmplY3RzCiAgICAgICAgICAgICBhbmQgZW50cmllcyB3aGVuIHRoYXQgd291bGQgbm90IGNhdXNlIGluY29uc2lzdGVuY2llcwogICAgICAgICAgICAgd2l0aGluIHRoZSB0YWJsZS4gIEFsbG93aW5nIHdyaXRlIGFjY2VzcyB0byBvYmplY3RzLCBzdWNoCkBAIC0yNjIyLDggKzI0OTQsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgSVAgYWRkcmVzcyB0byB3aGljaCB0aGlzIGVudHJ5J3MgYWRkcmVzc2luZyBpbmZvcm1hdGlvbgogCi0KLQogICAgICAgICAgICAgcGVydGFpbnMuICBUaGUgYWRkcmVzcyB0eXBlIG9mIHRoaXMgb2JqZWN0IGlzIHNwZWNpZmllZCBpbgogICAgICAgICAgICAgaXBBZGRyZXNzQWRkclR5cGUuCiAKQEAgLTI2NzIsOSArMjU0Miw2IEBACiAgICAgU1lOVEFYICAgICBJcEFkZHJlc3NPcmlnaW5UQwogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50Ci0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBvcmlnaW4gb2YgdGhlIGFkZHJlc3MuIgogICAgIDo6PSB7IGlwQWRkcmVzc0VudHJ5IDYgfQpAQCAtMjcyNCw4ICsyNTkxLDYgQEAKICAgICAgICAgICAgIFRoZSBSb3dTdGF0dXMgVEMgcmVxdWlyZXMgdGhhdCB0aGlzIERFU0NSSVBUSU9OIGNsYXVzZQogICAgICAgICAgICAgc3RhdGVzIHVuZGVyIHdoaWNoIGNpcmN1bXN0YW5jZXMgb3RoZXIgb2JqZWN0cyBpbiB0aGlzIHJvdwogCi0KLQogICAgICAgICAgICAgY2FuIGJlIG1vZGlmaWVkLiAgVGhlIHZhbHVlIG9mIHRoaXMgb2JqZWN0IGhhcyBubyBlZmZlY3Qgb24KICAgICAgICAgICAgIHdoZXRoZXIgb3RoZXIgb2JqZWN0cyBpbiB0aGlzIGNvbmNlcHR1YWwgcm93IGNhbiBiZQogICAgICAgICAgICAgbW9kaWZpZWQuCkBAIC0yNzc0LDkgKzI2MzksNiBAQAogICAgIFNZTlRBWCAgICAgSXBOZXRUb1BoeXNpY2FsRW50cnkKICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICBjdXJyZW50Ci0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIkVhY2ggZW50cnkgY29udGFpbnMgb25lIElQIGFkZHJlc3MgdG8gYHBoeXNpY2FsJyBhZGRyZXNzCiAgICAgICAgICAgICBlcXVpdmFsZW5jZS4iCkBAIC0yODI2LDggKzI2ODgsNiBAQAogCiAgICAgICAgICAgICBJbXBsZW1lbnRvcnMgbmVlZCB0byBiZSBhd2FyZSB0aGF0IGlmIHRoZSBzaXplIG9mCiAKLQotCiAgICAgICAgICAgICBpcE5ldFRvUGh5c2ljYWxOZXRBZGRyZXNzIGV4Y2VlZHMgMTE1IG9jdGV0cywgdGhlbiBPSURTIG9mCiAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgY29sdW1ucyBpbiB0aGlzIHJvdyB3aWxsIGhhdmUgbW9yZSB0aGFuIDEyOAogICAgICAgICAgICAgc3ViLWlkZW50aWZpZXJzIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgdXNpbmcgU05NUHYxLApAQCAtMjg3Nyw4ICsyNzM3LDYgQEAKICAgICAgICAgICAgIG1hcHBpbmcgaWRlbnRpZmllZCB3aXRoIHNhaWQgZW50cnkuICBJdCBpcyBhbgogICAgICAgICAgICAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgbWF0dGVyIGFzIHRvIHdoZXRoZXIgdGhlIGFnZW50CiAKLQotCiAgICAgICAgICAgICByZW1vdmVzIGFuIGludmFsaWRhdGVkIGVudHJ5IGZyb20gdGhlIHRhYmxlLiAgQWNjb3JkaW5nbHksCiAgICAgICAgICAgICBtYW5hZ2VtZW50IHN0YXRpb25zIG11c3QgYmUgcHJlcGFyZWQgdG8gcmVjZWl2ZSB0YWJ1bGFyCiAgICAgICAgICAgICBpbmZvcm1hdGlvbiBmcm9tIGFnZW50cyB0aGF0IGNvcnJlc3BvbmRzIHRvIGVudHJpZXMgbm90CkBAIC0yOTI3LDkgKzI3ODUsNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSBOZWlnaGJvciBVbnJlYWNoYWJpbGl0eSBEZXRlY3Rpb24gc3RhdGUgZm9yIHRoZQogICAgICAgICAgICAgaW50ZXJmYWNlIHdoZW4gdGhlIGFkZHJlc3MgbWFwcGluZyBpbiB0aGlzIGVudHJ5IGlzIHVzZWQuCiAgICAgICAgICAgICBJZiBOZWlnaGJvciBVbnJlYWNoYWJpbGl0eSBEZXRlY3Rpb24gaXMgbm90IGluIHVzZSAoZS5nLiBmb3IKQEAgLTI5NzgsOSArMjgzMyw2IEBACiAKIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5IE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJcHY2U2NvcGVab25lSW5kZXhFbnRyeQotCi0KLQogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtMzAyOSw5ICsyODgxLDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgMyBvbiB0aGlzIGludGVyZmFjZS4iCiAgICAgOjo9IHsgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkgMyB9CiAKQEAgLTMwODAsOSArMjkyOSw2IEBACiAgICAgU1lOVEFYICAgICBJbmV0Wm9uZUluZGV4CiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIDkgb24gdGhpcyBpbnRlcmZhY2UuIgogICAgIDo6PSB7IGlwdjZTY29wZVpvbmVJbmRleEVudHJ5IDkgfQpAQCAtMzEzMiw4ICsyOTc4LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIHRhYmxlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGRlZmF1bHQgcm91dGVycyBrbm93biB0byB0aGlzCiAKLQotCiAgICAgICAgICAgICBlbnRpdHkuIgogICAgIDo6PSB7IGlwIDM3IH0KIApAQCAtMzE4Miw5ICszMDI2LDYgQEAKIAogaXBEZWZhdWx0Um91dGVySWZJbmRleCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSW50ZXJmYWNlSW5kZXgKLQotCi0KICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTMyMzQsOCArMzA3NSw2IEBACiAgICAgUkVGRVJFTkNFICJSRkMgNDI5MSwgc2VjdGlvbiAyLjEiCiAgICAgOjo9IHsgaXBEZWZhdWx0Um91dGVyRW50cnkgNSB9CiAKLQotCiAtLQogLS0gQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgY29uc3RydWN0aW5nIHJvdXRlciBhZHZlcnRpc2VtZW50cwogLS0KQEAgLTMyODQsOSArMzEyMyw2IEBACiAgICAgICAgICAgICBvYmplY3QgaXMgd3JpdHRlbiwgdGhlIGVudGl0eSBTSE9VTEQgc2F2ZSB0aGUgY2hhbmdlIHRvCiAgICAgICAgICAgICBub24tdm9sYXRpbGUgc3RvcmFnZS4iCiAgICAgSU5ERVggeyBpcHY2Um91dGVyQWR2ZXJ0SWZJbmRleCB9Ci0KLQotCiAgICAgOjo9IHsgaXB2NlJvdXRlckFkdmVydFRhYmxlIDEgfQogCiBJcHY2Um91dGVyQWR2ZXJ0RW50cnkgOjo9IFNFUVVFTkNFIHsKQEAgLTMzMzYsOCArMzE3Miw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBtYXhpbXVtIHRpbWUgYWxsb3dlZCBiZXR3ZWVuIHNlbmRpbmcgdW5zb2xpY2l0ZWQgcm91dGVyCiAKLQotCiAgICAgICAgICAgICBhZHZlcnRpc2VtZW50cyBmcm9tIHRoaXMgaW50ZXJmYWNlLiIKICAgICBSRUZFUkVOQ0UgIlJGQyAyNDYxIFNlY3Rpb24gNi4yLjEiCiAgICAgREVGVkFMIHsgNjAwIH0KQEAgLTMzODYsOSArMzIyMCw2IEBACiAgICAgU1lOVEFYICAgICBVbnNpZ25lZDMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLWNyZWF0ZQogICAgIFNUQVRVUyAgICAgY3VycmVudAotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgdmFsdWUgdG8gYmUgcGxhY2VkIGluIE1UVSBvcHRpb25zIHNlbnQgYnkgdGhlIHJvdXRlciBvbgogICAgICAgICAgICAgdGhpcyBpbnRlcmZhY2UuCkBAIC0zNDM4LDggKzMyNjksNiBAQAogICAgICAgICAgICAiVGhlIGRlZmF1bHQgdmFsdWUgdG8gYmUgcGxhY2VkIGluIHRoZSBjdXJyZW50IGhvcCBsaW1pdAogICAgICAgICAgICAgZmllbGQgaW4gcm91dGVyIGFkdmVydGlzZW1lbnRzIHNlbnQgZnJvbSB0aGlzIGludGVyZmFjZS4KIAotCi0KICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIHRoZSBjdXJyZW50IGRpYW1ldGVyIG9mIHRoZQogICAgICAgICAgICAgSW50ZXJuZXQuCiAKQEAgLTM0ODksOCArMzMxOCw2IEBACiAKIC0tCiAKLQotCiAtLSBJQ01QIHNlY3Rpb24KIC0tCiAKQEAgLTM1MzksOSArMzM2Niw2IEBACiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBJUCB2ZXJzaW9uIG9mIHRoZSBzdGF0aXN0aWNzLiIKLQotCi0KICAgICA6Oj0geyBpY21wU3RhdHNFbnRyeSAxIH0KIAogaWNtcFN0YXRzSW5Nc2dzIE9CSkVDVC1UWVBFCkBAIC0zNTkxLDggKzM0MTUsNiBAQAogLS0KIC0tIHBlci12ZXJzaW9uLCBwZXItbWVzc2FnZSB0eXBlIElDTVAgY291bnRlcnMKIAotCi0KIC0tCiAKIGljbXBNc2dTdGF0c1RhYmxlIE9CSkVDVC1UWVBFCkBAIC0zNjQxLDkgKzM0NjMsNiBAQAogaWNtcE1zZ1N0YXRzVHlwZSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSW50ZWdlcjMyICgwLi4yNTUpCiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQotCi0KLQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgSUNNUCB0eXBlIGZpZWxkIG9mIHRoZSBtZXNzYWdlIHR5cGUgYmVpbmcgY291bnRlZCBieQpAQCAtMzY5Miw5ICszNTExLDYgQEAKICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiBPQkpFQ1QgY2xhdXNlIGZvcm0gaW4gdGhpcyBkZXNjcmlwdGlvbgogICAgICAgICAgICAgY2xhdXNlOgogCi0KLQotCiAgICAgICAgICAgICAtLSBPQkpFQ1QgICAgICAgIGlwU3lzdGVtU3RhdHNJUFZlcnNpb24KICAgICAgICAgICAgIC0tIFNZTlRBWCAgICAgICAgSW5ldFZlcnNpb24ge2lwdjQoMSksIGlwdjYoMil9CiAgICAgICAgICAgICAtLSBERVNDUklQVElPTgpAQCAtMzc0NCw4ICszNTYwLDYgQEAKICAgICAgICAgICAgIC0tIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAtLSAgICAgVGhpcyBNSUIgcmVxdWlyZXMgc3VwcG9ydCBmb3Igb25seSBnbG9iYWwgYW5kCiAKLQotCiAgICAgICAgICAgICAtLSAgICAgbm9uLWdsb2JhbCBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhbmQgc28gdGhlIHNpemUKICAgICAgICAgICAgIC0tICAgICBjYW4gYmUgNCwgOCwgMTYsIG9yIDIwIGJ5dGVzLgogICAgICAgICAgICAgLS0KQEAgLTM3OTUsOCArMzYwOSw2IEBACiAgICAgICAgICAgICJUaGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3Igc3lzdGVtcyB0aGF0IGhhdmUgYW4gYWdncmVnYXRlCiAgICAgICAgICAgICBiYW5kd2lkdGggb2YgZ3JlYXRlciB0aGFuIDY1ME1CLiAgSW5jbHVkaW5nIHRoaXMgZ3JvdXAKIAotCi0KICAgICAgICAgICAgIGRvZXMgbm90IGFsbG93IGFuIGVudGl0eSB0byBuZWdsZWN0IHRoZSAzMiBiaXQgdmVyc2lvbnMgb2YKICAgICAgICAgICAgIHRoZXNlIG9iamVjdHMuIgogCkBAIC0zODQ2LDggKzM2NTgsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IgYWxsIHN5c3RlbXMgc3VwcG9ydGluZyBJUHY0IGFuZAogCi0KLQogICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBpcElmU3RhdHNIQ1BhY2tldEdyb3VwLiAgSW5jbHVkaW5nIHRoaXMgZ3JvdXAKICAgICAgICAgICAgIGRvZXMgbm90IGFsbG93IGFuIGVudGl0eSB0byBuZWdsZWN0IHRoZSAzMiBiaXQgdmVyc2lvbnMgb2YKICAgICAgICAgICAgIHRoZXNlIG9iamVjdHMuIgpAQCAtMzg5Niw5ICszNzA2LDYgQEAKIAogICAgIE9CSkVDVCAgICAgaXB2NkludGVyZmFjZUVuYWJsZVN0YXR1cwogICAgIE1JTi1BQ0NFU1MgcmVhZC1vbmx5Ci0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIkFuIGFnZW50IGlzIG5vdCByZXF1aXJlZCB0byBwcm92aWRlIHdyaXRlIGFjY2VzcyB0byB0aGlzCiAgICAgICAgICAgICBvYmplY3QuIgpAQCAtMzk0OCw4ICszNzU1LDYgQEAKICAgICAgICAgICAgIkFuIGFnZW50IGlzIG5vdCByZXF1aXJlZCB0byBwcm92aWRlIHdyaXRlIG9yIGNyZWF0ZSBhY2Nlc3MKICAgICAgICAgICAgIHRvIHRoaXMgb2JqZWN0LgogCi0KLQogICAgICAgICAgICAgSWYgYW4gYWdlbnQgYWxsb3dzIHRoaXMgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gb3IgY3JlYXRlZCwgaXQKICAgICAgICAgICAgIGlzIG5vdCByZXF1aXJlZCB0byBhbGxvdyB0aGlzIG9iamVjdCB0byBiZSBzZXQgdG8gcmVhZE9ubHksCiAgICAgICAgICAgICBwZXJtYW5lbnQsIG9yIG5vblZvbGF0aWxlLiIKQEAgLTM5OTgsOSArMzgwMyw2IEBACiAgICAgICAgICAgICJBbiBhZ2VudCBpcyBub3QgcmVxdWlyZWQgdG8gcHJvdmlkZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcwogICAgICAgICAgICAgb2JqZWN0LiIKIAotCi0KLQogICAgIE9CSkVDVCAgICAgaXB2NlJvdXRlckFkdmVydE90aGVyQ29uZmlnRmxhZwogICAgIE1JTi1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgREVTQ1JJUFRJT04KQEAgLTQwNDIsMTYgKzM4NDQsMTIgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiQW4gYWdlbnQgaXMgbm90IHJlcXVpcmVkIHRvIHByb3ZpZGUgd3JpdGUgb3IgY3JlYXRlIGFjY2VzcwogICAgICAgICAgICAgdG8gdGhpcyBvYmplY3QuIgotCiAgICAgOjo9IHsgaXBNSUJDb21wbGlhbmNlcyAyIH0KIAogLS0gdW5pdHMgb2YgY29uZm9ybWFuY2UKIAogaXB2NEdlbmVyYWxHcm91cCBPQkpFQ1QtR1JPVVAKICAgICBPQkpFQ1RTICAgeyBpcEZvcndhcmRpbmcsIGlwRGVmYXVsdFRUTCwgaXBSZWFzbVRpbWVvdXQgfQotCi0KLQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgZ3JvdXAgb2YgSVB2NC1zcGVjaWZpYyBvYmplY3RzIGZvciBiYXNpYyBtYW5hZ2VtZW50IG9mCkBAIC00MTAxLDggKzM4OTksNiBAQAogICAgICAgICAgICAgdmFsdWUuIgogICAgIDo6PSB7IGlwTUlCR3JvdXBzIDcgfQogCi0KLQogaXBTeXN0ZW1TdGF0c0dyb3VwIE9CSkVDVC1HUk9VUAogICAgIE9CSkVDVFMgICB7IGlwU3lzdGVtU3RhdHNJblJlY2VpdmVzLAogICAgICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNJbk9jdGV0cywKQEAgLTQxNTEsOSArMzk0Nyw2IEBACiAgICAgICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdE9jdGV0cywKICAgICAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0cwogfQotCi0KLQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJJUCBzeXN0ZW0gd2lkZSBzdGF0aXN0aWNzIGZvciBzeXN0ZW1zIHRoYXQgbWF5IG92ZXJmbG93IHRoZQpAQCAtNDIwMiw5ICszOTk1LDYgQEAKICAgICAgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZSwgaXBJZlN0YXRzUmVmcmVzaFJhdGUgfQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJJUCBwZXItaW50ZXJmYWNlIHN0YXRpc3RpY3MuIgogICAgIDo6PSB7IGlwTUlCR3JvdXBzIDEzIH0KIApAQCAtNDI1Myw5ICs0MDQzLDYgQEAKICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZSwKICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lIH0KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIGdyb3VwIG9mIG9iamVjdHMgZm9yIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCBhZGRyZXNzCiAgICAgICAgICAgICBwcmVmaXhlcyB1c2VkIGJ5IHRoaXMgbm9kZS4iCkBAIC00MzA0LDkgKzQwOTEsNiBAQAogCiBpcERlZmF1bHRSb3V0ZXJHcm91cCBPQkpFQ1QtR1JPVVAKICAgICBPQkpFQ1RTICAgeyBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSwgaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZSB9Ci0KLQotCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBncm91cCBvZiBvYmplY3RzIGZvciBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdApAQCAtNDM1Niw4ICs0MTQwLDYgQEAKIAogICAgICAgICAgICAgVGhpcyBvYmplY3QgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYXMgYSBuZXcgSVAgdmVyc2lvbi1uZXV0cmFsCiAKLQotCiAgICAgICAgICAgICB0YWJsZSBoYXMgYmVlbiBhZGRlZC4gIEl0IGlzIGxvb3NlbHkgcmVwbGFjZWQgYnkKICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNJblJlY2lldmVzLiIKICAgICA6Oj0geyBpcCAzIH0KQEAgLTQ0MDcsOCArNDE4OSw2IEBACiAgICAgICAgICAgICBmaW5hbCBkZXN0aW5hdGlvbi4gIEluIGVudGl0aWVzIHdoaWNoIGRvIG5vdCBhY3QgYXMgSVB2NAogICAgICAgICAgICAgcm91dGVycywgdGhpcyBjb3VudGVyIHdpbGwgaW5jbHVkZSBvbmx5IHRob3NlIHBhY2tldHMgd2hpY2gKIAotCi0KICAgICAgICAgICAgIHdlcmUgU291cmNlLVJvdXRlZCB2aWEgdGhpcyBlbnRpdHksIGFuZCB0aGUgU291cmNlLVJvdXRlCiAgICAgICAgICAgICBvcHRpb24gcHJvY2Vzc2luZyB3YXMgc3VjY2Vzc2Z1bC4KIApAQCAtNDQ1OCw4ICs0MjM4LDYgQEAKICAgICAgICAgICAgIFRoaXMgb2JqZWN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgYXMgYSBuZXcgSVAgdmVyc2lvbiBuZXV0cmFsCiAgICAgICAgICAgICB0YWJsZSBoYXMgYmVlbiBhZGRlZC4gIEl0IGlzIGxvb3NlbHkgcmVwbGFjZWQgYnkKIAotCi0KICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNJbmRlbGl2ZXJzLiIKICAgICA6Oj0geyBpcCA5IH0KIApAQCAtNDUwOSw4ICs0Mjg3LDYgQEAKIAogICAgICAgICAgICAgVGhpcyBvYmplY3QgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYXMgYSBuZXcgSVAgdmVyc2lvbi1uZXV0cmFsCiAKLQotCiAgICAgICAgICAgICB0YWJsZSBoYXMgYmVlbiBhZGRlZC4gIEl0IGlzIGxvb3NlbHkgcmVwbGFjZWQgYnkKICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNPdXROb1JvdXRlcy4iCiAgICAgOjo9IHsgaXAgMTIgfQpAQCAtNDU1OSw5ICs0MzM1LDYgQEAKIAogaXBGcmFnT0tzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAogICAgIERFU0NSSVBUSU9OCkBAIC00NjExLDggKzQzODQsNiBAQAogICAgICAgICAgICAgZm9yIGRpc2NhcmRpbmcgc3VjaCBhbiBlbnRyeSBjb3VsZCBiZSB0byBmcmVlLXVwIGJ1ZmZlcgogICAgICAgICAgICAgc3BhY2UgZm9yIG90aGVyIHJvdXRpbmcgZW50cmllcy4KIAotCi0KICAgICAgICAgICAgIFRoaXMgb2JqZWN0IHdhcyBkZWZpbmVkIGluIHByZS1JUHY2IHZlcnNpb25zIG9mIHRoZSBJUCBNSUIuCiAgICAgICAgICAgICBJdCB3YXMgaW1wbGljaXRseSBJUHY0IG9ubHksIGJ1dCB0aGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbnMKICAgICAgICAgICAgIGRpZCBub3QgaW5kaWNhdGUgdGhpcyBwcm90b2NvbCByZXN0cmljdGlvbi4gIEluIG9yZGVyIHRvCkBAIC00NjYxLDkgKzQ0MzIsNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSBJUHY0IGFkZHJlc3MgdG8gd2hpY2ggdGhpcyBlbnRyeSdzIGFkZHJlc3NpbmcKICAgICAgICAgICAgIGluZm9ybWF0aW9uIHBlcnRhaW5zLiIKICAgICA6Oj0geyBpcEFkZHJFbnRyeSAxIH0KQEAgLTQ3MTMsOCArNDQ4MSw2IEBACiAgICAgICAgICAgICBvbiB0aGlzIGludGVyZmFjZS4iCiAgICAgOjo9IHsgaXBBZGRyRW50cnkgNSB9CiAKLQotCiAtLSB0aGUgZGVwcmVjYXRlZCBJUHY0IEFkZHJlc3MgVHJhbnNsYXRpb24gdGFibGUKIAogLS0gVGhlIEFkZHJlc3MgVHJhbnNsYXRpb24gdGFibGVzIGNvbnRhaW4gdGhlIElwQWRkcmVzcyB0bwpAQCAtNDc2NCw4ICs0NTMwLDYgQEAKICAgICAgICAgICAgIGVmZmVjdGl2ZS4gIFRoZSBpbnRlcmZhY2UgaWRlbnRpZmllZCBieSBhIHBhcnRpY3VsYXIgdmFsdWUKICAgICAgICAgICAgIG9mIHRoaXMgaW5kZXggaXMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIGlkZW50aWZpZWQgYnkgdGhlCiAKLQotCiAgICAgICAgICAgICBzYW1lIHZhbHVlIG9mIHRoZSBJRi1NSUIncyBpZkluZGV4LgogCiAgICAgICAgICAgICBUaGlzIG9iamVjdCBwcmVkYXRlcyB0aGUgcnVsZSBsaW1pdGluZyBpbmRleCBvYmplY3RzIHRvIGEKQEAgLTQ4MTUsOCArNDU3OSw2IEBACiAKICAgICAgICAgICAgIFNldHRpbmcgdGhpcyBvYmplY3QgdG8gdGhlIHZhbHVlIGludmFsaWQoMikgaGFzIHRoZSBlZmZlY3QKIAotCi0KICAgICAgICAgICAgIG9mIGludmFsaWRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUKICAgICAgICAgICAgIGlwTmV0VG9NZWRpYVRhYmxlLiAgVGhhdCBpcywgaXQgZWZmZWN0aXZlbHkgZGlzLWFzc29jaWF0ZXMKICAgICAgICAgICAgIHRoZSBpbnRlcmZhY2UgaWRlbnRpZmllZCB3aXRoIHNhaWQgZW50cnkgZnJvbSB0aGUgbWFwcGluZwpAQCAtNDg2NSw5ICs0NjI3LDYgQEAKICAgICAgICAgICAgIGljbXBTdGF0c0luRXJyb3JzLiIKICAgICA6Oj0geyBpY21wIDIgfQogCi0KLQotCiBpY21wSW5EZXN0VW5yZWFjaHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CkBAIC00OTE3LDggKzQ2NzYsNiBAQAogICAgICAgICAgICAgdGhlIGljbXBNc2dTdGF0c1RhYmxlLiIKICAgICA6Oj0geyBpY21wIDYgfQogCi0KLQogaWNtcEluUmVkaXJlY3RzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQpAQCAtNDk2Nyw5ICs0NzI0LDYgQEAKICAgICAgICAgICAgIHRoZSBpY21wTXNnU3RhdHNUYWJsZS4iCiAgICAgOjo9IHsgaWNtcCAxMCB9CiAKLQotCi0KIGljbXBJblRpbWVzdGFtcFJlcHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CkBAIC01MDE4LDkgKzQ3NzIsNiBAQAogICAgICAgICAgICAgVGhpcyBvYmplY3QgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYXMgYSBuZXcgSVAgdmVyc2lvbi1uZXV0cmFsCiAgICAgICAgICAgICB0YWJsZSBoYXMgYmVlbiBhZGRlZC4gIEl0IGlzIGxvb3NlbHkgcmVwbGFjZWQgYnkKICAgICAgICAgICAgIGljbXBTdGF0c091dE1zZ3MuIgotCi0KLQogICAgIDo6PSB7IGljbXAgMTQgfQogCiBpY21wT3V0RXJyb3JzIE9CSkVDVC1UWVBFCkBAIC01MDY5LDkgKzQ4MjAsNiBAQAogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIG51bWJlciBvZiBJQ01QIFBhcmFtZXRlciBQcm9ibGVtIG1lc3NhZ2VzIHNlbnQuCiAKQEAgLTUxMjAsOSArNDg2OCw2IEBACiAKIGljbXBPdXRFY2hvUmVwcyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKICAgICBERVNDUklQVElPTgpAQCAtNTE3MSw5ICs0OTE2LDYgQEAKIAogaWNtcE91dEFkZHJNYXNrUmVwcyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKICAgICBERVNDUklQVElPTgpAQCAtNTIyMiw5ICs0OTY0LDYgQEAKICAgICAgICAgICAgIlRoZSBpcCBncm91cCBvZiBvYmplY3RzIHByb3ZpZGluZyBmb3IgYmFzaWMgbWFuYWdlbWVudCBvZiBJUAogICAgICAgICAgICAgZW50aXRpZXMsIGV4Y2x1c2l2ZSBvZiB0aGUgbWFuYWdlbWVudCBvZiBJUCByb3V0ZXMuCiAKLQotCi0KICAgICAgICAgICAgIEFzIHBhcnQgb2YgdGhlIHZlcnNpb24gaW5kZXBlbmRlbmNlLCB0aGlzIGdyb3VwIGhhcyBiZWVuCiAgICAgICAgICAgICBkZXByZWNhdGVkLiAgIgogICAgIDo6PSB7IGlwTUlCR3JvdXBzIDEgfQpkaWZmIC0tZ2l0IGEvbWlicy9JUFY2LUZMT1ctTEFCRUwtTUlCLnR4dCBiL21pYnMvSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQKaW5kZXggZjMwZjRjYS4uNmZiMzY1OSAxMDA2NDQKLS0tIGEvbWlicy9JUFY2LUZMT1ctTEFCRUwtTUlCLnR4dAorKysgYi9taWJzL0lQVjYtRkxPVy1MQUJFTC1NSUIudHh0CkBAIC0xNSwxMCArMTUsNiBAQAogICAgICAgICAgICAgICAgICAgIDM0NjEgR0wgTGluc2Nob3RlbgogICAgICAgICAgICAgICAgICAgIE5ldGhlcmxhbmRzCiAKLQotCi0KLQogICAgICAgICAgICAgICAgICAgIFBob25lOiArMzEgMzQ4LTQwNy03NzUKICAgICAgICAgICAgICAgICAgICBFTWFpbDogYndpam5lbkBsdWNlbnQuY29tCiAKQEAgLTM1LDcgKzMxLDYgQEAKIAogICAgIFJFVklTSU9OICAgICAgIjIwMDMwODI4MDAwMFoiICAtLSAyOCBBdWd1c3QgMjAwMwogICAgIERFU0NSSVBUSU9OICAgIkluaXRpYWwgdmVyc2lvbiwgcHVibGlzaGVkIGFzIFJGQyAzNTk1LiIKLQogICAgIDo6PSB7IG1pYi0yIDEwMyB9CiAKIElQdjZGbG93TGFiZWwgICAgICA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCmRpZmYgLS1naXQgYS9taWJzL01ha2VmaWxlLmluIGIvbWlicy9NYWtlZmlsZS5pbgppbmRleCBlYTk3ZTY3Li5mMTg1MDAyIDEwMDY0NAotLS0gYS9taWJzL01ha2VmaWxlLmluCisrKyBiL21pYnMvTWFrZWZpbGUuaW4KQEAgLTM2LDExICszNiwxMiBAQAogCUhPU1QtUkVTT1VSQ0VTLU1JQi50eHQgSE9TVC1SRVNPVVJDRVMtVFlQRVMudHh0IFwKIAlSTU9OLU1JQi50eHQgXAogCUlQVjYtVEMudHh0IElQVjYtTUlCLnR4dCBJUFY2LUlDTVAtTUlCLnR4dCBJUFY2LVRDUC1NSUIudHh0IFwKLQlJUFY2LVVEUC1NSUIudHh0IFwKKwlJUFY2LVVEUC1NSUIudHh0IElQVjYtRkxPVy1MQUJFTC1NSUIudHh0IFRVTk5FTC1NSUIudHh0IFwKIAlESVNNQU4tRVZFTlQtTUlCLnR4dCBESVNNQU4tU0NSSVBULU1JQi50eHQgRElTTUFOLVNDSEVEVUxFLU1JQi50eHQgXAogCU5PVElGSUNBVElPTi1MT0ctTUlCLnR4dCBTTk1QLVVTTS1BRVMtTUlCLnR4dCBcCiAJU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0IFwKLQlTQ1RQLU1JQi50eHQKKwlTTk1QLVRMUy1UTS1NSUIudHh0IFNOTVAtVFNNLU1JQi50eHQgXAorCVNDVFAtTUlCLnR4dCBCUklER0UtTUlCLnR4dAogCiBORVRTTk1QTUlCUyA9IE5FVC1TTk1QLVRDLnR4dCBORVQtU05NUC1NSUIudHh0IE5FVC1TTk1QLUFHRU5ULU1JQi50eHQgXAogCU5FVC1TTk1QLUVYQU1QTEVTLU1JQi50eHQgTkVULVNOTVAtRVhURU5ELU1JQi50eHQgTkVULVNOTVAtUEFTUy1NSUIudHh0CmRpZmYgLS1naXQgYS9taWJzL01ha2VmaWxlLm1pYiBiL21pYnMvTWFrZWZpbGUubWliCmluZGV4IDEzNjE5OWMuLjZkMzEyNDIgMTAwNjQ0Ci0tLSBhL21pYnMvTWFrZWZpbGUubWliCisrKyBiL21pYnMvTWFrZWZpbGUubWliCkBAIC0xNCwxOSArMTQsMjYgQEAKIAlTTk1QLUZSQU1FV09SSy1NSUIudHh0IFNOTVAtTVBELU1JQi50eHQgU05NUC1VU0VSLUJBU0VELVNNLU1JQi50eHQgXAogCVNOTVAtVklFVy1CQVNFRC1BQ00tTUlCLnR4dCBTTk1QLUNPTU1VTklUWS1NSUIudHh0IFwKIAlTTk1QLVRBUkdFVC1NSUIudHh0IFNOTVAtTk9USUZJQ0FUSU9OLU1JQi50eHQgU05NUC1QUk9YWS1NSUIudHh0IFwKKwlTTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQgU05NUC1VU00tQUVTLU1JQi50eHQgXAorCVNOTVAtVExTLVRNLU1JQi50eHQgXAogCUFHRU5UWC1NSUIudHh0IFNNVVgtTUlCLnR4dCBcCi0JRElTTUFOLVNDUklQVC1NSUIudHh0ICBESVNNQU4tU0NIRURVTEUtTUlCLnR4dCBcCisJRElTTUFOLVNDUklQVC1NSUIudHh0IERJU01BTi1TQ0hFRFVMRS1NSUIudHh0IFwKKwlESVNNQU4tUElORy1NSUIudHh0IERJU01BTi1UUkFDRVJPVVRFLU1JQi50eHQgXAorCURJU01BTi1OU0xPT0tVUC1NSUIudHh0IERJU01BTi1FVkVOVC1NSUIudHh0IFwKKwlESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0IE5PVElGSUNBVElPTi1MT0ctTUlCLnR4dCBcCiAJSUFOQS1MQU5HVUFHRS1NSUIudHh0IElBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIudHh0IFwKIAlJRi1NSUIudHh0IElGLUlOVkVSVEVELVNUQUNLLU1JQi50eHQgXAogCUlQLU1JQi50eHQgSVAtRk9SV0FSRC1NSUIudHh0IFRDUC1NSUIudHh0IFVEUC1NSUIudHh0IFwKLQlJQU5BaWZUeXBlLU1JQi50eHQgRXRoZXJMaWtlLU1JQi50eHQgXAorCUlBTkFpZlR5cGUtTUlCLnR4dCBJQU5BLVJUUFJPVE8tTUlCLnR4dCBFdGhlckxpa2UtTUlCLnR4dCBcCiAJSVBWNi1UQy50eHQgSVBWNi1NSUIudHh0IElQVjYtSUNNUC1NSUIudHh0IFwKLQlJUFY2LVRDUC1NSUIudHh0IElQVjYtVURQLU1JQi50eHQgXAorCUlQVjYtVENQLU1JQi50eHQgSVBWNi1VRFAtTUlCLnR4dCBJUFY2LUZMT1ctTEFCRUwtTUlCLnR4dCBcCiAJSE9TVC1SRVNPVVJDRVMtTUlCLnR4dCBIT1NULVJFU09VUkNFUy1UWVBFUy50eHQgXAogCU5FVFdPUkstU0VSVklDRVMtTUlCLnR4dCBNVEEtTUlCLnR4dCBcCiAJUk1PTi1NSUIudHh0IFwKLQlSRkMxMTU1LVNNSS50eHQgUkZDMTIxMy1NSUIudHh0IFwKLQlTQ1RQLU1JQi50eHQKKwlUVU5ORUwtTUlCLnR4dCBcCisJVFJBTlNQT1JULUFERFJFU1MtTUlCLnR4dCBcCisJUkZDMTE1NS1TTUkudHh0IFJGQzEyMTMtTUlCLnR4dFwKKwlTQ1RQLU1JQi50eHQgQlJJREdFLU1JQi50eHQKIAogTUlCREVQUyA9IE1ha2VmaWxlLm1pYiBtaWJmZXRjaCBzbWlzdHJpcAogCkBAIC02NSw2ICs3MiwxNSBAQAogU05NUC1DT01NVU5JVFktTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjU3NgogCitTTk1QLVVTTS1BRVMtTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMzgyNgorCitTTk1QLVRMUy1UTS1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSA2MzUzCisKK1NOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjc4NgorCiBTTk1QdjItU01JLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjU3OCBTTk1QdjItU01JCiAKQEAgLTkyLDYgKzEwOCwxOCBAQAogRElTTUFOLVNDUklQVC1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAzMTY1CiAKK0RJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI5ODIKKworRElTTUFOLUVWRU5ULU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI5ODEKKworRElTTUFOLU5TTE9PS1VQLU1JQi50eHQgRElTTUFOLVRSQUNFUk9VVEUtTUlCLnR4dCBESVNNQU4tUElORy1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSA0NTYwCisKK05PVElGSUNBVElPTi1MT0ctTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMzAxNAorCiBJRi1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyODYzCiAKQEAgLTExMCw2ICsxMzgsOSBAQAogSUFOQWlmVHlwZS1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAteCAkKElBTkFIT1NUKSAkKElBTkFESVIpIGlhbmFpZnR5cGUtbWliCiAKK0lBTkEtUlRQUk9UTy1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAteCAkKElBTkFIT1NUKSAkKElBTkFESVIpIGlhbmFpcHJvdXRlcHJvdG9jb2wtbWliCisKIElBTkEtTEFOR1VBR0UtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggLXggJChJQU5BSE9TVCkgJChJQU5BRElSKSBpYW5hbGFuZ3VhZ2UtbWliCiAKQEAgLTExNywxNiArMTQ4LDIyIEBACiAJLi9taWJmZXRjaCAteCAkKElBTkFIT1NUKSAkKElBTkFESVIpIGlhbmFhZGRyZXNzZmFtaWx5bnVtYmVycy1taWIKIAogSVAtTUlCLnR4dDoJJChNSUJERVBTKQotCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjAxMQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgNDI5MwogCiBJUC1GT1JXQVJELU1JQi50eHQ6CSQoTUlCREVQUykKLQkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDIwOTYKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDQyOTIKIAogVENQLU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDQwMjIKIAogVURQLU1JQi50eHQ6CSQoTUlCREVQUykKLQkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDIwMTMKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDQxMTMKKworVFVOTkVMLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDQwODcKKworVFJBTlNQT1JULUFERFJFU1MtTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMzQxOQogCiBJUFY2LVRDLnR4dCBJUFY2LU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI0NjUKQEAgLTE0MCw2ICsxNzcsOSBAQAogSVBWNi1VRFAtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjQ1NAogCitJUFY2LUZMT1ctTEFCRUwtTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMzU5NQorCiBIT1NULVJFU09VUkNFUy1NSUIudHh0IEhPU1QtUkVTT1VSQ0VTLVRZUEVTLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjc5MAogCkBAIC0xNTgsOSArMTk4LDEyIEBACiBSRkMxMjEzLU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDEyMTMKIAotU0NUUC50eHQ6CSQoTUlCREVQUykKK1NDVFAtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMzg3MwogCitCUklER0UtTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgNDE4OAorCiBpYW5hbWliczoJaWFuYWxpc3QKIAlbIC1kICQoQUxMRElSKSBdIHx8IG1rZGlyICQoQUxMRElSKQogCWNhdCBpYW5hbGlzdCB8IHdoaWxlIHJlYWQgZmlsZSBtaWJzOyBcCmRpZmYgLS1naXQgYS9taWJzL05FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIudHh0IGIvbWlicy9ORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2VhY2FkCi0tLSAvZGV2L251bGwKKysrIGIvbWlicy9ORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCLnR4dApAQCAtMCwwICsxLDgzIEBACitORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCIERFRklOSVRJT05TIDo6PSBCRUdJTgorCistLQorLS0gT2JqZWN0cyBmb3IgcGVyaW9kaWMgbm90aWZpY2F0aW9ucyBjb250YWluaW5nIGRhdGEgcGF5bG9hZHMKKy0tCisKK0lNUE9SVFMKKyAgICBuZXRTbm1wTW9kdWxlSURzLCBuZXRTbm1wT2JqZWN0cywgbmV0U25tcE5vdGlmaWNhdGlvbnMgRlJPTSBORVQtU05NUC1NSUIKKworICAgIE9CSkVDVC1UWVBFLCBOT1RJRklDQVRJT04tVFlQRSwgTU9EVUxFLUlERU5USVRZLCBJbnRlZ2VyMzIsIFVuc2lnbmVkMzIKKyAgICAgICAgRlJPTSBTTk1QdjItU01JCisKKyAgICBEaXNwbGF5U3RyaW5nIEZST00gU05NUHYyLVRDOworCisKK25ldFNubXBQZXJpb2RpY05vdGlmeU1pYiBNT0RVTEUtSURFTlRJVFkKKyAgICBMQVNULVVQREFURUQgIjIwMTEwNDIwMDAwMFoiCisgICAgT1JHQU5JWkFUSU9OICJ3d3cubmV0LXNubXAub3JnIgorICAgIENPTlRBQ1QtSU5GTyAgICAKKwkgInBvc3RhbDogICBXZXMgSGFyZGFrZXIKKyAgICAgICAgICAgICAgICAgICAgUC5PLiBCb3ggMzgyCisgICAgICAgICAgICAgICAgICAgIERhdmlzIENBICA5NTYxNworCisgICAgICAgICAgZW1haWw6ICAgIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiCisgICAgREVTQ1JJUFRJT04KKwkiT2JqZWN0cyBmb3IgcGVyaW9kaWMgbm90aWZpY2F0aW9ucyBjb250YWluaW5nIGRhdGEgcGF5bG9hZHMiCisgICAgUkVWSVNJT04gICAgICIyMDExMDQyMDAwMDBaIgorICAgIERFU0NSSVBUSU9OCisJIkZpcnN0IHJldmlzaW9uLiIKKyAgICA6Oj0geyBuZXRTbm1wTW9kdWxlSURzIDUgfQorCituc1BOU2NhbGFycyAgICAgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHtuZXRTbm1wUGVyaW9kaWNOb3RpZnlNaWIgMX0KK25zUE5UYWJsZXMgICAgICAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge25ldFNubXBQZXJpb2RpY05vdGlmeU1pYiAyfQorbnNQTm90aWZ5T2JqZWN0cyAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7bmV0U25tcFBlcmlvZGljTm90aWZ5TWliIDN9Cituc1BOb3RpZmljYXRpb25QcmVmaXggICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHtuZXRTbm1wUGVyaW9kaWNOb3RpZnlNaWIgNH0KK25zUE5vdGlmaWNhdGlvbnMgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge25zUE5vdGlmaWNhdGlvblByZWZpeCAwfQorbnNQTm90aWZpY2F0aW9uT2JqZWN0cyAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7bnNQTm90aWZpY2F0aW9uUHJlZml4IDF9CisKKy0tCistLSBOb3RpZmljYXRpb24gRGVmaW5pdGlvbnMKKy0tCisKK25zTm90aWZ5UGVyaW9kaWNOb3RpZmljYXRpb24gICAgICAgIE5PVElGSUNBVElPTi1UWVBFCisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTgorCSJEYXRhIGRlbGl2ZXJ5IG5vdGlmaWNhdGlvbiBmcm9tIGEgY29uZmlndXJlZCBsaXN0IG9mIHBlcmlvZGljCisJZGF0YSBzZXRzIHRvIGRlbGl2ZXIuICBTZWUgdGhlIHNubXBkLmNvbmYgbWFudWFsIHBhZ2UgZm9yCisJZGV0YWlscyBhYm91dCBjb25maWd1cmluZyBOZXQtU05NUCBhZ2VudHMgZm9yIHNlbmRpbmcgdGhlc2UKKwlub3RpZmljYXRpb25zIG91dCBvbiBhIHJlZ3VsYXIgYmFzaXMuIgorICAgIDo6PSB7IG5zUE5vdGlmaWNhdGlvbnMgMSB9CisKKy0tCistLSBPYmplY3RzIHRoYXQgY2FuIGJlIHB1dCBpbnRvIHRoZSBub3RpZmljYXRpb25zCistLQorCituc1BOUGVyaW9kaWNUaW1lIE9CSkVDVC1UWVBFCisgICAgIFNZTlRBWCAgICAgIFVuc2lnbmVkMzIKKyAgICAgTUFYLUFDQ0VTUyAgYWNjZXNzaWJsZS1mb3Itbm90aWZ5CisgICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICAgREVTQ1JJUFRJT04KKyAgICAgICAgICJUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBub3RpZmljYXRpb25zIGNvbnRhaW5pbmcgdGhpcyBkYXRhIHNldC4iCisgICAgIDo6PSB7IG5zUE5vdGlmeU9iamVjdHMgMSB9CisKK25zUE5vdGlmeU1lc3NhZ2VOdW1iZXIgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBVbnNpZ25lZDMyCisgICAgTUFYLUFDQ0VTUyAgYWNjZXNzaWJsZS1mb3Itbm90aWZ5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbmRpY2F0ZXMgdGhpcyBpcyB0aGUgTnRoIG5vdGlmaWNhdGlvbiBpbiBhIGxvbmdlciBzZXF1ZW5jZQorICAgICAgICBvZiBub3RpZmljYXRpb25zIgorICAgIDo6PSB7IG5zUE5vdGlmeU9iamVjdHMgMiB9CisKK25zUE5vdGlmeU1heE1lc3NhZ2VOdW1iZXIgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBVbnNpZ25lZDMyCisgICAgTUFYLUFDQ0VTUyAgYWNjZXNzaWJsZS1mb3Itbm90aWZ5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgdGhpcyBub3RpZmljYXRpb24gc2VxdWVuY2UKKyAgICAgICAgd2lsbCBjb250YWluLiIKKyAgICA6Oj0geyBuc1BOb3RpZnlPYmplY3RzIDMgfQorCisKK0VORApkaWZmIC0tZ2l0IGEvbWlicy9ORVQtU05NUC1UQy50eHQgYi9taWJzL05FVC1TTk1QLVRDLnR4dAppbmRleCBmM2ZmNWRmLi40NmY3MzAyIDEwMDY0NAotLS0gYS9taWJzL05FVC1TTk1QLVRDLnR4dAorKysgYi9taWJzL05FVC1TTk1QLVRDLnR4dApAQCAtMTIwLDUgKzEyMCw5IEBACiBuZXRTbm1wVURQSVB2NkRvbWFpbglPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBuZXRTbm1wRG9tYWlucyA0IH0gLS0gb2Jzb2xldGUKIG5ldFNubXBUQ1BJUHY2RG9tYWluCU9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5ldFNubXBEb21haW5zIDUgfSAtLSBvYnNvbGV0ZQogbmV0U25tcENhbGxiYWNrRG9tYWluCU9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5ldFNubXBEb21haW5zIDYgfQorbmV0U25tcEFsaWFzRG9tYWluCU9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5ldFNubXBEb21haW5zIDcgfQorbmV0U25tcERUTFNVRFBEb21haW4JT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbmV0U25tcERvbWFpbnMgOCB9CituZXRTbm1wRFRMU1NDVFBEb21haW4JT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbmV0U25tcERvbWFpbnMgOSB9CituZXRTbm1wVExTVENQRG9tYWluCU9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5ldFNubXBEb21haW5zIDEwIH0KIAogRU5ECmRpZmYgLS1naXQgYS9taWJzL05PVElGSUNBVElPTi1MT0ctTUlCLnR4dCBiL21pYnMvTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0CmluZGV4IGM2MGI3ZDIuLmM3ZGE5MzQgMTAwNjQ0Ci0tLSBhL21pYnMvTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0CisrKyBiL21pYnMvTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0CkBAIC0yMyw3ICsyMyw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgIlRoZSBNSUIgbW9kdWxlIGZvciBsb2dnaW5nIFNOTVAgTm90aWZpY2F0aW9ucywgdGhhdCBpcywgVHJhcHMKIAotCiAgICAgIGFuZCBJbmZvcm1zLiIKIC0tIFJldmlzaW9uIEhpc3RvcnkKIApAQCAtMzIsNyArMzEsNiBAQAogICAgICAgICAgICAgICAgUHVibGlzaGVkIGFzIFJGQyAzMDE0IgogICAgIDo6PSB7IG1pYi0yIDkyIH0KIAotCiBub3RpZmljYXRpb25Mb2dNSUJPYmplY3RzIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5vdGlmaWNhdGlvbkxvZ01JQiAxIH0KIAogbmxtQ29uZmlnIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5vdGlmaWNhdGlvbkxvZ01JQk9iamVjdHMgMSB9CkBAIC03Miw4ICs3MCw2IEBACiAKIG5sbUNvbmZpZ0dsb2JhbEFnZU91dCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFVuc2lnbmVkMzIKLQotCiAgICAgVU5JVFMgICAgICAgIm1pbnV0ZXMiCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKQEAgLTkzLDcgKzg5LDYgQEAKICAgICBERUZWQUwgeyAxNDQwIH0gIC0tIDI0IGhvdXJzCiAgICAgOjo9IHsgbmxtQ29uZmlnIDIgfQogCi0KIC0tCiAtLSBCYXNpYyBMb2cgQ29uZmlndXJhdGlvbiBUYWJsZQogLS0KQEAgLTEyMiw4ICsxMTcsNiBAQAogICAgIG5sbUNvbmZpZ0xvZ0ZpbHRlck5hbWUgICAgU25tcEFkbWluU3RyaW5nLAogICAgIG5sbUNvbmZpZ0xvZ0VudHJ5TGltaXQgICAgVW5zaWduZWQzMiwKICAgICBubG1Db25maWdMb2dBZG1pblN0YXR1cyAgIElOVEVHRVIsCi0KLQogICAgIG5sbUNvbmZpZ0xvZ09wZXJTdGF0dXMgICAgSU5URUdFUiwKICAgICBubG1Db25maWdMb2dTdG9yYWdlVHlwZSAgIFN0b3JhZ2VUeXBlLAogICAgIG5sbUNvbmZpZ0xvZ0VudHJ5U3RhdHVzICAgUm93U3RhdHVzCkBAIC0xNzIsOCArMTY1LDYgQEAKICAgICAgTm90aWZpY2F0aW9ucyBpbiB0aGUgbG9nLCB0aGUgb2xkZXN0IE5vdGlmaWNhdGlvbnMgYXJlIGRpc2NhcmRlZAogICAgICB0byBicmluZyB0aGUgbG9nIGRvd24gdG8gdGhlIG5ldyBsaW1pdC4KIAotCi0KICAgICAgQSB2YWx1ZSBvZiAwIGluZGljYXRlcyBubyBsaW1pdC4KIAogICAgICBQbGVhc2UgYmUgYXdhcmUgdGhhdCBjb250ZW50aW9uIGJldHdlZW4gbXVsdGlwbGUgbWFuYWdlcnMKQEAgLTIyMiw4ICsyMTMsNiBAQAogICAgIDo6PSB7IG5sbUNvbmZpZ0xvZ0VudHJ5IDYgfQogCiBubG1Db25maWdMb2dFbnRyeVN0YXR1cyBPQkpFQ1QtVFlQRQotCi0KICAgICBTWU5UQVggICAgIFJvd1N0YXR1cwogICAgIE1BWC1BQ0NFU1MgcmVhZC1jcmVhdGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKQEAgLTI3Miw4ICsyNjEsNiBAQAogbmxtU3RhdHNMb2dUYWJsZSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIE5sbVN0YXRzTG9nRW50cnkKICAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQotCi0KICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgIkEgdGFibGUgb2YgTm90aWZpY2F0aW9uIGxvZyBzdGF0aXN0aWNzIGVudHJpZXMuIgpAQCAtMzE1LDEzICszMDIsMTMgQEAKICAgICAgbmxtQ29uZmlnR2xvYmFsQWdlT3V0LiIKICAgICA6Oj0geyBubG1TdGF0c0xvZ0VudHJ5IDIgfQogCi0KIC0tCiAtLSBMb2cgU2VjdGlvbgogLS0KIAogLS0KIC0tIExvZyBUYWJsZQorCiAtLQogCiBubG1Mb2dUYWJsZSBPQkpFQ1QtVFlQRQpAQCAtMzcwLDggKzM1Nyw2IEBACiAgICAgSU5ERVggICAgICAgeyBubG1Mb2dOYW1lLCBubG1Mb2dJbmRleCB9CiAgICAgOjo9IHsgbmxtTG9nVGFibGUgMSB9CiAKLQotCiBObG1Mb2dFbnRyeSA6Oj0gU0VRVUVOQ0UgewogICAgIG5sbUxvZ0luZGV4ICAgICAgICAgICAgICAgIFVuc2lnbmVkMzIsCiAgICAgbmxtTG9nVGltZSAgICAgICAgICAgICAgICAgVGltZVN0YW1wLApAQCAtNDIxLDcgKzQwNiw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgIlRoZSBpZGVudGlmaWNhdGlvbiBvZiB0aGUgU05NUCBlbmdpbmUgYXQgd2hpY2ggdGhlIE5vdGlmaWNhdGlvbgogCi0KICAgICAgb3JpZ2luYXRlZC4KIAogICAgICBJZiB0aGUgbG9nIGNhbiBjb250YWluIE5vdGlmaWNhdGlvbnMgZnJvbSBvbmx5IG9uZSBlbmdpbmUKQEAgLTQ3MCw4ICs0NTQsNiBAQAogICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KICAgICAgIklmIHRoZSBOb3RpZmljYXRpb24gd2FzIHJlY2VpdmVkIGluIGEgcHJvdG9jb2wgd2hpY2ggaGFzIGEKICAgICAgIGNvbnRleHRFbmdpbmVJRCBlbGVtZW50IGxpa2UgU05NUHYzLCB0aGlzIG9iamVjdCBoYXMgdGhhdCB2YWx1ZS4KICAgICAgIE90aGVyd2lzZSBpdHMgdmFsdWUgaXMgYSB6ZXJvLWxlbmd0aCBzdHJpbmcuIgpAQCAtNTIxLDcgKzUwMyw2IEBACiAKIE5sbUxvZ1ZhcmlhYmxlRW50cnkgOjo9IFNFUVVFTkNFIHsKIAotCiAgICAgbmxtTG9nVmFyaWFibGVJbmRleCAgICAgICAgICAgICAgVW5zaWduZWQzMiwKICAgICBubG1Mb2dWYXJpYWJsZUlEICAgICAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKICAgICBubG1Mb2dWYXJpYWJsZVZhbHVlVHlwZSAgICAgICAgICBJTlRFR0VSLApAQCAtNTcwLDggKzU1MSw2IEBACiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQogICAgICAiVGhlIHZhbHVlIHdoZW4gbmxtTG9nVmFyaWFibGVUeXBlIGlzICdjb3VudGVyMzInLiIKICAgICA6Oj0geyBubG1Mb2dWYXJpYWJsZUVudHJ5IDQgfQogCkBAIC02MjEsNyArNjAwLDYgQEAKICAgICAgSVB2NiBhZGRyZXNzZXMgYXJlIHJlcHJlc2VudGVkIHVzaW5nIFRBZGRyZXNzIG9yCiAgICAgIEluZXRBZGRyZXNzLCBhbmQgc28gdGhlIHVuZGVybHlpbmcgZGF0YXR5cGUgaXMKIAotCiAgICAgIE9DVEVUIFNUUklORywgYW5kIHRoZWlyIHZhbHVlIHdvdWxkIGJlIHN0b3JlZCBpbgogICAgICB0aGUgbmxtTG9nVmFyaWFibGVPY3RldFN0cmluZ1ZhbCBjb2x1bW4uIgogICAgIDo6PSB7IG5sbUxvZ1ZhcmlhYmxlRW50cnkgOSB9CkBAIC02NTAsNyArNjI4LDYgQEAKICAgICAgIlRoZSB2YWx1ZSB3aGVuIG5sbUxvZ1ZhcmlhYmxlVHlwZSBpcyAnb3BhcXVlJy4iCiAgICAgOjo9IHsgbmxtTG9nVmFyaWFibGVFbnRyeSAxMiB9CiAKLQogLS0KIC0tIENvbmZvcm1hbmNlCiAtLQpAQCAtNjcxLDcgKzY0OCw2IEBACiAgICAgICAgICAgdGhlIE5vdGlmaWNhdGlvbiBMb2cgTUlCLiIKICAgICAgTU9EVUxFICAgIC0tIHRoaXMgbW9kdWxlCiAKLQogICAgICAgICAgIE1BTkRBVE9SWS1HUk9VUFMgewogICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uTG9nQ29uZmlnR3JvdXAsCiAgICAgICAgICAgICAgICBub3RpZmljYXRpb25Mb2dTdGF0c0dyb3VwLApAQCAtNzA0LDcgKzY4MCw2IEBACiAgICAgICAgICAgIlRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IG9uIHN5c3RlbXMgdGhhdCBrZWVwIHdhbGwgY2xvY2sKICAgICAgICAgICBkYXRlIGFuZCB0aW1lIGFuZCBzaG91bGQgbm90IGJlIGltcGxlbWVudGVkIG9uIHN5c3RlbXMgdGhhdAogICAgICAgICAgIGRvIG5vdCBoYXZlIGEgd2FsbCBjbG9jayBkYXRlLiIKLQogICAgICA6Oj0geyBub3RpZmljYXRpb25Mb2dNSUJDb21wbGlhbmNlcyAxIH0KIAogLS0gVW5pdHMgb2YgQ29uZm9ybWFuY2UKQEAgLTcyMCw4ICs2OTUsNiBAQAogICAgICAgICAgIG5sbUNvbmZpZ0xvZ1N0b3JhZ2VUeXBlLAogICAgICAgICAgIG5sbUNvbmZpZ0xvZ0VudHJ5U3RhdHVzCiAgICAgIH0KLQotCiAgICAgIFNUQVRVUyBjdXJyZW50CiAgICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgIk5vdGlmaWNhdGlvbiBsb2cgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50LiIKQEAgLTc3MCw4ICs3NDMsNiBAQAogICAgICAgICAgIG5sbUxvZ0RhdGVBbmRUaW1lCiAgICAgIH0KICAgICAgU1RBVFVTIGN1cnJlbnQKLQotCiAgICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgIkNvbmRpdGlvbmFsbHkgbWFuZGF0b3J5IG5vdGlmaWNhdGlvbiBsb2cgZGF0YS4KICAgICAgICAgICBUaGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBvbiBzeXN0ZW1zIHRoYXQga2VlcCB3YWxsCmRpZmYgLS1naXQgYS9taWJzL1NOTVAtVExTLVRNLU1JQi50eHQgYi9taWJzL1NOTVAtVExTLVRNLU1JQi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4ZGZmMQotLS0gL2Rldi9udWxsCisrKyBiL21pYnMvU05NUC1UTFMtVE0tTUlCLnR4dApAQCAtMCwwICsxLDEwNjUgQEAKK1NOTVAtVExTLVRNLU1JQiBERUZJTklUSU9OUyA6Oj0gQkVHSU4KKworSU1QT1JUUworICAgIE1PRFVMRS1JREVOVElUWSwgT0JKRUNULVRZUEUsCisgICAgT0JKRUNULUlERU5USVRZLCBtaWItMiwgc25tcERvbWFpbnMsCisgICAgQ291bnRlcjMyLCBVbnNpZ25lZDMyLCBHYXVnZTMyLCBOT1RJRklDQVRJT04tVFlQRQorICAgICAgRlJPTSBTTk1QdjItU01JICAgICAgICAgICAgICAgICAtLSBSRkMgMjU3OCBvciBhbnkgdXBkYXRlIHRoZXJlb2YKKyAgICBURVhUVUFMLUNPTlZFTlRJT04sIFRpbWVTdGFtcCwgUm93U3RhdHVzLCBTdG9yYWdlVHlwZSwKKyAgICBBdXRvbm9tb3VzVHlwZQorICAgICAgRlJPTSBTTk1QdjItVEMgICAgICAgICAgICAgICAgICAtLSBSRkMgMjU3OSBvciBhbnkgdXBkYXRlIHRoZXJlb2YKKyAgICBNT0RVTEUtQ09NUExJQU5DRSwgT0JKRUNULUdST1VQLCBOT1RJRklDQVRJT04tR1JPVVAKKyAgICAgIEZST00gU05NUHYyLUNPTkYgICAgICAgICAgICAgICAgLS0gUkZDIDI1ODAgb3IgYW55IHVwZGF0ZSB0aGVyZW9mCisgICAgU25tcEFkbWluU3RyaW5nCisgICAgICBGUk9NIFNOTVAtRlJBTUVXT1JLLU1JQiAgICAgICAgIC0tIFJGQyAzNDExIG9yIGFueSB1cGRhdGUgdGhlcmVvZgorICAgIHNubXBUYXJnZXRQYXJhbXNOYW1lLCBzbm1wVGFyZ2V0QWRkck5hbWUKKyAgICAgIEZST00gU05NUC1UQVJHRVQtTUlCICAgICAgICAgICAgLS0gUkZDIDM0MTMgb3IgYW55IHVwZGF0ZSB0aGVyZW9mCisgICAgOworCitzbm1wVGxzdG1NSUIgTU9EVUxFLUlERU5USVRZCisgICAgTEFTVC1VUERBVEVEICIyMDExMDcxOTAwMDBaIgorCisgICAgT1JHQU5JWkFUSU9OICJJU01TIFdvcmtpbmcgR3JvdXAiCisgICAgQ09OVEFDVC1JTkZPICJXRy1FTWFpbDogICBpc21zQGxpc3RzLmlldGYub3JnCisgICAgICAgICAgICAgICAgICBTdWJzY3JpYmU6ICBpc21zLXJlcXVlc3RAbGlzdHMuaWV0Zi5vcmcKKworICAgICAgICAgICAgICAgICAgQ2hhaXJzOgorICAgICAgICAgICAgICAgICAgICAgSnVlcmdlbiBTY2hvZW53YWVsZGVyCisgICAgICAgICAgICAgICAgICAgICBKYWNvYnMgVW5pdmVyc2l0eSBCcmVtZW4KKyAgICAgICAgICAgICAgICAgICAgIENhbXB1cyBSaW5nIDEKKyAgICAgICAgICAgICAgICAgICAgIDI4NzI1IEJyZW1lbgorICAgICAgICAgICAgICAgICAgICAgR2VybWFueQorICAgICAgICAgICAgICAgICAgICAgKzQ5IDQyMSAyMDAtMzU4NworICAgICAgICAgICAgICAgICAgICAgai5zY2hvZW53YWVsZGVyQGphY29icy11bml2ZXJzaXR5LmRlCisKKyAgICAgICAgICAgICAgICAgICAgIFJ1c3MgTXVuZHkKKyAgICAgICAgICAgICAgICAgICAgIFNQQVJUQSwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgNzExMCBTYW11ZWwgTW9yc2UgRHJpdmUKKyAgICAgICAgICAgICAgICAgICAgIENvbHVtYmlhLCBNRCAgMjEwNDYKKyAgICAgICAgICAgICAgICAgICAgIFVTQQorCisgICAgICAgICAgICAgICAgICBFZGl0b3I6CisgICAgICAgICAgICAgICAgICAgICBXZXMgSGFyZGFrZXIKKyAgICAgICAgICAgICAgICAgICAgIFNQQVJUQSwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgUC5PLiBCb3ggMzgyCisgICAgICAgICAgICAgICAgICAgICBEYXZpcywgQ0EgIDk1NjE3CisgICAgICAgICAgICAgICAgICAgICBVU0EKKyAgICAgICAgICAgICAgICAgICAgIGlldGZAaGFyZGFrZXJzLm5ldAorICAgICAgICAgICAgICAgICAgIgorICAgIERFU0NSSVBUSU9OICAiCisgICAgICAgIFRoZSBUTFMgVHJhbnNwb3J0IE1vZGVsIE1JQgorCisgICAgICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDExIElFVEYgVHJ1c3QgYW5kIHRoZSBwZXJzb25zIGlkZW50aWZpZWQKKyAgICAgICAgYXMgYXV0aG9ycyBvZiB0aGUgY29kZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICAgICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaXMgcGVybWl0dGVkIHB1cnN1YW50IHRvLCBhbmQgc3ViamVjdAorICAgICAgICB0byB0aGUgbGljZW5zZSB0ZXJtcyBjb250YWluZWQgaW4sIHRoZSBTaW1wbGlmaWVkIEJTRCBMaWNlbnNlCisgICAgICAgIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUgSUVURiBUcnVzdCdzIExlZ2FsIFByb3Zpc2lvbnMKKyAgICAgICAgUmVsYXRpbmcgdG8gSUVURiBEb2N1bWVudHMKKyAgICAgICAgKGh0dHA6Ly90cnVzdGVlLmlldGYub3JnL2xpY2Vuc2UtaW5mbykuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDExMDcxOTAwMDBaIgorICAgICAgIERFU0NSSVBUSU9OICAiVGhpcyB2ZXJzaW9uIG9mIHRoaXMgTUlCIG1vZHVsZSBpcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgICBSRkMgNjM1Mzsgc2VlIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsCisgICAgICAgICAgICAgICAgICAgICBub3RpY2VzLiAgVGhlIG9ubHkgY2hhbmdlIHdhcyB0byBpbnRyb2R1Y2UKKyAgICAgICAgICAgICAgICAgICAgIG5ldyB3b3JkaW5nIHRvIHJlZmxlY3QgcmVxdWlyZSBjaGFuZ2VzIGZvcgorICAgICAgICAgICAgICAgICAgICAgSUROQSBhZGRyZXNzZXMgaW4gdGhlIFNubXBUTFNBZGRyZXNzIFRDLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMDA1MDcwMDAwWiIKKyAgICAgICBERVNDUklQVElPTiAgIlRoaXMgdmVyc2lvbiBvZiB0aGlzIE1JQiBtb2R1bGUgaXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICAgUkZDIDU5NTM7IHNlZSB0aGUgUkZDIGl0c2VsZiBmb3IgZnVsbCBsZWdhbAorICAgICAgICAgICAgICAgICAgICAgbm90aWNlcy4iCisgICAgOjo9IHsgbWliLTIgMTk4IH0KKworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLSBzdWJ0cmVlcyBvZiB0aGUgU05NUC1UTFMtVE0tTUlCCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc25tcFRsc3RtTm90aWZpY2F0aW9ucyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1NSUIgMCB9Citzbm1wVGxzdG1JZGVudGl0aWVzICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bU1JQiAxIH0KK3NubXBUbHN0bU9iamVjdHMgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtTUlCIDIgfQorc25tcFRsc3RtQ29uZm9ybWFuY2UgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1NSUIgMyB9CisKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0gc25tcFRsc3RtT2JqZWN0cyAtIE9iamVjdHMKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitzbm1wVExTVENQRG9tYWluIE9CSkVDVC1JREVOVElUWQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIFNOTVAgb3ZlciBUTFMgdmlhIFRDUCB0cmFuc3BvcnQgZG9tYWluLiAgVGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgdHJhbnNwb3J0IGFkZHJlc3MgaXMgb2YgdHlwZSBTbm1wVExTQWRkcmVzcy4KKworICAgICAgICBUaGUgc2VjdXJpdHlOYW1lIHByZWZpeCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgIHNubXBUTFNUQ1BEb21haW4gaXMgJ3RscycuICBUaGlzIHByZWZpeCBtYXkgYmUgdXNlZCBieQorICAgICAgICBzZWN1cml0eSBtb2RlbHMgb3Igb3RoZXIgY29tcG9uZW50cyB0byBpZGVudGlmeSB3aGljaCBzZWN1cmUKKyAgICAgICAgdHJhbnNwb3J0IGluZnJhc3RydWN0dXJlIGF1dGhlbnRpY2F0ZWQgYSBzZWN1cml0eU5hbWUuIgorICAgIFJFRkVSRU5DRQorICAgICAgIlJGQyAyNTc5OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBTTUl2MiIKKyAgICA6Oj0geyBzbm1wRG9tYWlucyA4IH0KKworc25tcERUTFNVRFBEb21haW4gT0JKRUNULUlERU5USVRZCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgU05NUCBvdmVyIERUTFMgdmlhIFVEUCB0cmFuc3BvcnQgZG9tYWluLiAgVGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgdHJhbnNwb3J0IGFkZHJlc3MgaXMgb2YgdHlwZSBTbm1wVExTQWRkcmVzcy4KKworICAgICAgICBUaGUgc2VjdXJpdHlOYW1lIHByZWZpeCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgIHNubXBEVExTVURQRG9tYWluIGlzICdkdGxzJy4gIFRoaXMgcHJlZml4IG1heSBiZSB1c2VkIGJ5CisgICAgICAgIHNlY3VyaXR5IG1vZGVscyBvciBvdGhlciBjb21wb25lbnRzIHRvIGlkZW50aWZ5IHdoaWNoIHNlY3VyZQorICAgICAgICB0cmFuc3BvcnQgaW5mcmFzdHJ1Y3R1cmUgYXV0aGVudGljYXRlZCBhIHNlY3VyaXR5TmFtZS4iCisgICAgUkVGRVJFTkNFCisgICAgICAiUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyIgorICAgIDo6PSB7IHNubXBEb21haW5zIDkgfQorCitTbm1wVExTQWRkcmVzcyA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCisgICAgRElTUExBWS1ISU5UICIxYSIKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJSZXByZXNlbnRzIGFuIElQdjQgYWRkcmVzcywgYW4gSVB2NiBhZGRyZXNzLCBvciBhCisgICAgICAgICBVUy1BU0NJSS1lbmNvZGVkIGhvc3RuYW1lIGFuZCBwb3J0IG51bWJlci4KKworICAgICAgICBBbiBJUHY0IGFkZHJlc3MgbXVzdCBiZSBpbiBkb3R0ZWQgZGVjaW1hbCBmb3JtYXQgZm9sbG93ZWQgYnkgYQorICAgICAgICBjb2xvbiAnOicgKFVTLUFTQ0lJIGNoYXJhY3RlciAweDNBKSBhbmQgYSBkZWNpbWFsIHBvcnQgbnVtYmVyCisgICAgICAgIGluIFVTLUFTQ0lJLgorCisgICAgICAgIEFuIElQdjYgYWRkcmVzcyBtdXN0IGJlIGEgY29sb24tc2VwYXJhdGVkIGZvcm1hdCAoYXMgZGVzY3JpYmVkCisgICAgICAgIGluIFJGQyA1OTUyKSwgc3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgKCdbJywgVVMtQVNDSUkKKyAgICAgICAgY2hhcmFjdGVyIDB4NUIsIGFuZCAnXScsIFVTLUFTQ0lJIGNoYXJhY3RlciAweDVEKSwgZm9sbG93ZWQgYnkKKyAgICAgICAgYSBjb2xvbiAnOicgKFVTLUFTQ0lJIGNoYXJhY3RlciAweDNBKSBhbmQgYSBkZWNpbWFsIHBvcnQgbnVtYmVyCisgICAgICAgIGluIFVTLUFTQ0lJLgorCisgICAgICAgIEEgaG9zdG5hbWUgaXMgYWx3YXlzIGluIFVTLUFTQ0lJIChhcyBwZXIgUkZDIDExMjMpOworICAgICAgICBpbnRlcm5hdGlvbmFsaXplZCBob3N0bmFtZXMgYXJlIGVuY29kZWQgYXMgQS1sYWJlbHMgYXMgc3BlY2lmaWVkCisgICAgICAgIGluICBSRkMgNTg5MC4gIFRoZSBob3N0bmFtZSBpcyBmb2xsb3dlZCBieSBhCisgICAgICAgIGNvbG9uICc6JyAoVVMtQVNDSUkgY2hhcmFjdGVyIDB4M0EpIGFuZCBhIGRlY2ltYWwgcG9ydCBudW1iZXIKKyAgICAgICAgaW4gVVMtQVNDSUkuICBUaGUgbmFtZSBTSE9VTEQgYmUgZnVsbHkgcXVhbGlmaWVkIHdoZW5ldmVyCisgICAgICAgIHBvc3NpYmxlLgorCisgICAgICAgIFZhbHVlcyBvZiB0aGlzIHRleHR1YWwgY29udmVudGlvbiBtYXkgbm90IGJlIGRpcmVjdGx5IHVzYWJsZQorICAgICAgICBhcyB0cmFuc3BvcnQtbGF5ZXIgYWRkcmVzc2luZyBpbmZvcm1hdGlvbiwgYW5kIG1heSByZXF1aXJlCisgICAgICAgIHJ1bi10aW1lIHJlc29sdXRpb24uICBBcyBzdWNoLCBhcHBsaWNhdGlvbnMgdGhhdCB3cml0ZSB0aGVtCisgICAgICAgIG11c3QgYmUgcHJlcGFyZWQgZm9yIGhhbmRsaW5nIGVycm9ycyBpZiBzdWNoIHZhbHVlcyBhcmUgbm90CisgICAgICAgIHN1cHBvcnRlZCwgb3IgY2Fubm90IGJlIHJlc29sdmVkIChpZiByZXNvbHV0aW9uIG9jY3VycyBhdCB0aGUKKyAgICAgICAgdGltZSBvZiB0aGUgbWFuYWdlbWVudCBvcGVyYXRpb24pLgorCisgICAgICAgIFRoZSBERVNDUklQVElPTiBjbGF1c2Ugb2YgVHJhbnNwb3J0QWRkcmVzcyBvYmplY3RzIHRoYXQgbWF5CisgICAgICAgIGhhdmUgU25tcFRMU0FkZHJlc3MgdmFsdWVzIG11c3QgZnVsbHkgZGVzY3JpYmUgaG93IChhbmQKKyAgICAgICAgd2hlbikgc3VjaCBuYW1lcyBhcmUgdG8gYmUgcmVzb2x2ZWQgdG8gSVAgYWRkcmVzc2VzIGFuZCB2aWNlCisgICAgICAgIHZlcnNhLgorCisgICAgICAgIFRoaXMgdGV4dHVhbCBjb252ZW50aW9uIFNIT1VMRCBOT1QgYmUgdXNlZCBkaXJlY3RseSBpbiBvYmplY3QKKyAgICAgICAgZGVmaW5pdGlvbnMgc2luY2UgaXQgcmVzdHJpY3RzIGFkZHJlc3NlcyB0byBhIHNwZWNpZmljCisgICAgICAgIGZvcm1hdC4gIEhvd2V2ZXIsIGlmIGl0IGlzIHVzZWQsIGl0IE1BWSBiZSB1c2VkIGVpdGhlciBvbiBpdHMKKyAgICAgICAgb3duIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggVHJhbnNwb3J0QWRkcmVzc1R5cGUgb3IKKyAgICAgICAgVHJhbnNwb3J0RG9tYWluIGFzIGEgcGFpci4KKworICAgICAgICBXaGVuIHRoaXMgdGV4dHVhbCBjb252ZW50aW9uIGlzIHVzZWQgYXMgYSBzeW50YXggb2YgYW4gaW5kZXgKKyAgICAgICAgb2JqZWN0LCB0aGVyZSBtYXkgYmUgaXNzdWVzIHdpdGggdGhlIGxpbWl0IG9mIDEyOAorICAgICAgICBzdWItaWRlbnRpZmllcnMgc3BlY2lmaWVkIGluIFNNSXYyIChTVEQgNTgpLiAgSXQgaXMgUkVDT01NRU5ERUQKKyAgICAgICAgdGhhdCBhbGwgTUlCIGRvY3VtZW50cyB1c2luZyB0aGlzIHRleHR1YWwgY29udmVudGlvbiBtYWtlCisgICAgICAgIGV4cGxpY2l0IGFueSBsaW1pdGF0aW9ucyBvbiBpbmRleCBjb21wb25lbnQgbGVuZ3RocyB0aGF0CisgICAgICAgIG1hbmFnZW1lbnQgc29mdHdhcmUgbXVzdCBvYnNlcnZlLiAgVGhpcyBtYXkgYmUgZG9uZSBlaXRoZXIgYnkKKworICAgICAgICBpbmNsdWRpbmcgU0laRSBjb25zdHJhaW50cyBvbiB0aGUgaW5kZXggY29tcG9uZW50cyBvciBieQorICAgICAgICBzcGVjaWZ5aW5nIGFwcGxpY2FibGUgY29uc3RyYWludHMgaW4gdGhlIGNvbmNlcHR1YWwgcm93CisgICAgICAgIERFU0NSSVBUSU9OIGNsYXVzZSBvciBpbiB0aGUgc3Vycm91bmRpbmcgZG9jdW1lbnRhdGlvbi4iCisgICAgUkVGRVJFTkNFCisgICAgICAiUkZDIDExMjM6IFJlcXVpcmVtZW50cyBmb3IgSW50ZXJuZXQgSG9zdHMgLSBBcHBsaWNhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICAgU3VwcG9ydAorICAgICAgIFJGQyA1ODkwOiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgZm9yIEFwcGxpY2F0aW9ucyAoSUROQSk6CisgICAgICAgICAgICAgICAgIERlZmluaXRpb25zIGFuZCBEb2N1bWVudCBGcmFtZXdvcmsKKyAgICAgICBSRkMgNTk1MjogQSBSZWNvbW1lbmRhdGlvbiBmb3IgSVB2NiBBZGRyZXNzIFRleHQgUmVwcmVzZW50YXRpb24KKyAgICAgICIKKyAgICBTWU5UQVggICAgICAgT0NURVQgU1RSSU5HIChTSVpFICgxLi4yNTUpKQorCitTbm1wVExTRmluZ2VycHJpbnQgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgorICAgIERJU1BMQVktSElOVCAiMXg6MXgiCisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICJBIGZpbmdlcnByaW50IHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gdW5pcXVlbHkgcmVmZXJlbmNlCisgICAgICAgb3RoZXIgZGF0YSBvZiBwb3RlbnRpYWxseSBhcmJpdHJhcnkgbGVuZ3RoLgorCisgICAgICAgQW4gU25tcFRMU0ZpbmdlcnByaW50IHZhbHVlIGlzIGNvbXBvc2VkIG9mIGEgMS1vY3RldCBoYXNoaW5nCisgICAgICAgYWxnb3JpdGhtIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgdGhlIGZpbmdlcnByaW50IHZhbHVlLiAgVGhlCisgICAgICAgb2N0ZXQgdmFsdWUgZW5jb2RlZCBpcyB0YWtlbiBmcm9tIHRoZSBJQU5BIFRMUyBIYXNoQWxnb3JpdGhtCisgICAgICAgUmVnaXN0cnkgKFJGQyA1MjQ2KS4gIFRoZSByZW1haW5pbmcgb2N0ZXRzIGFyZSBmaWxsZWQgdXNpbmcgdGhlCisgICAgICAgcmVzdWx0cyBvZiB0aGUgaGFzaGluZyBhbGdvcml0aG0uCisKKyAgICAgICBUaGlzIFRFWFRVQUwtQ09OVkVOVElPTiBhbGxvd3MgZm9yIGEgemVyby1sZW5ndGggKGJsYW5rKQorICAgICAgIFNubXBUTFNGaW5nZXJwcmludCB2YWx1ZSBmb3IgdXNlIGluIHRhYmxlcyB3aGVyZSB0aGUKKyAgICAgICBmaW5nZXJwcmludCB2YWx1ZSBtYXkgYmUgb3B0aW9uYWwuICBNSUIgZGVmaW5pdGlvbnMgb3IKKyAgICAgICBpbXBsZW1lbnRhdGlvbnMgbWF5IHJlZnVzZSB0byBhY2NlcHQgYSB6ZXJvLWxlbmd0aCB2YWx1ZSBhcworICAgICAgIGFwcHJvcHJpYXRlLiIKKyAgICAgICBSRUZFUkVOQ0UgIlJGQyA1MjQ2OiBUaGUgVHJhbnNwb3J0IExheWVyCisgICAgICAgICAgICAgICAgICBTZWN1cml0eSAoVExTKSBQcm90b2NvbCBWZXJzaW9uIDEuMgorICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy8KKyAgICAgICAiCisgICAgU1lOVEFYIE9DVEVUIFNUUklORyAoU0laRSAoMC4uMjU1KSkKKworLS0gSWRlbnRpdGllcyBmb3IgdXNlIGluIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZQorCitzbm1wVGxzdG1DZXJ0VG9UU05NSWRlbnRpdGllcyBPQkpFQ1QgSURFTlRJRklFUgorICAgIDo6PSB7IHNubXBUbHN0bUlkZW50aXRpZXMgMSB9CisKK3NubXBUbHN0bUNlcnRTcGVjaWZpZWQgT0JKRUNULUlERU5USVRZCisgICAgU1RBVFVTICAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gICJEaXJlY3RseSBzcGVjaWZpZXMgdGhlIHRtU2VjdXJpdHlOYW1lIHRvIGJlIHVzZWQgZm9yCisgICAgICAgICAgICAgICAgICB0aGlzIGNlcnRpZmljYXRlLiAgVGhlIHZhbHVlIG9mIHRoZSB0bVNlY3VyaXR5TmFtZQorICAgICAgICAgICAgICAgICAgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiB0aGUgc25tcFRsc3RtQ2VydFRvVFNORGF0YQorICAgICAgICAgICAgICAgICAgY29sdW1uLiAgVGhlIHNubXBUbHN0bUNlcnRUb1RTTkRhdGEgY29sdW1uIG11c3QKKyAgICAgICAgICAgICAgICAgIGNvbnRhaW4gYSBub24temVybyBsZW5ndGggU25tcEFkbWluU3RyaW5nIGNvbXBsaWFudAorCisgICAgICAgICAgICAgICAgICB2YWx1ZSBvciB0aGUgbWFwcGluZyBkZXNjcmliZWQgaW4gdGhpcyByb3cgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgY29uc2lkZXJlZCBhIGZhaWx1cmUuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTk1JZGVudGl0aWVzIDEgfQorCitzbm1wVGxzdG1DZXJ0U0FOUkZDODIyTmFtZSBPQkpFQ1QtSURFTlRJVFkKKyAgICBTVEFUVVMgICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgIk1hcHMgYSBzdWJqZWN0QWx0TmFtZSdzIHJmYzgyMk5hbWUgdG8gYQorICAgICAgICAgICAgICAgICAgdG1TZWN1cml0eU5hbWUuICBUaGUgbG9jYWwgcGFydCBvZiB0aGUgcmZjODIyTmFtZSBpcworICAgICAgICAgICAgICAgICAgcGFzc2VkIHVuYWx0ZXJlZCBidXQgdGhlIGhvc3QtcGFydCBvZiB0aGUgbmFtZSBtdXN0CisgICAgICAgICAgICAgICAgICBiZSBwYXNzZWQgaW4gbG93ZXJjYXNlLiAgVGhpcyBtYXBwaW5nIHJlc3VsdHMgaW4gYQorICAgICAgICAgICAgICAgICAgMToxIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gZXF1aXZhbGVudCBzdWJqZWN0QWx0TmFtZQorICAgICAgICAgICAgICAgICAgcmZjODIyTmFtZSB2YWx1ZXMgYW5kIHRtU2VjdXJpdHlOYW1lIHZhbHVlcyBleGNlcHQKKyAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGhvc3QtcGFydCBvZiB0aGUgbmFtZSBNVVNUIGJlIHBhc3NlZCBpbgorICAgICAgICAgICAgICAgICAgbG93ZXJjYXNlLgorCisgICAgICAgICAgICAgICAgICBFeGFtcGxlIHJmYzgyMk5hbWUgRmllbGQ6ICBGb29CYXJARXhhbXBsZS5DT00KKyAgICAgICAgICAgICAgICAgIGlzIG1hcHBlZCB0byB0bVNlY3VyaXR5TmFtZTogRm9vQmFyQGV4YW1wbGUuY29tLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05NSWRlbnRpdGllcyAyIH0KKworc25tcFRsc3RtQ2VydFNBTkROU05hbWUgT0JKRUNULUlERU5USVRZCisgICAgU1RBVFVTICAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gICJNYXBzIGEgc3ViamVjdEFsdE5hbWUncyBkTlNOYW1lIHRvIGEKKyAgICAgICAgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lIGFmdGVyIGZpcnN0IGNvbnZlcnRpbmcgaXQgdG8gYWxsCisgICAgICAgICAgICAgICAgICBsb3dlcmNhc2UgKFJGQyA1MjgwIGRvZXMgbm90IHNwZWNpZnkgY29udmVydGluZyB0bworICAgICAgICAgICAgICAgICAgbG93ZXJjYXNlIHNvIHRoaXMgaW52b2x2ZXMgYW4gZXh0cmEgc3RlcCkuICBUaGlzCisgICAgICAgICAgICAgICAgICBtYXBwaW5nIHJlc3VsdHMgaW4gYSAxOjEgY29ycmVzcG9uZGVuY2UgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgc3ViamVjdEFsdE5hbWUgZE5TTmFtZSB2YWx1ZXMgYW5kIHRoZSB0bVNlY3VyaXR5TmFtZQorICAgICAgICAgICAgICAgICAgdmFsdWVzLiIKKyAgICBSRUZFUkVOQ0UgIlJGQyA1MjgwIC0gSW50ZXJuZXQgWC41MDkgUHVibGljIEtleSBJbmZyYXN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgIENlcnRpZmljYXRlIGFuZCBDZXJ0aWZpY2F0ZSBSZXZvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCAoQ1JMKSBQcm9maWxlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05NSWRlbnRpdGllcyAzIH0KKworc25tcFRsc3RtQ2VydFNBTklwQWRkcmVzcyBPQkpFQ1QtSURFTlRJVFkKKyAgICBTVEFUVVMgICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgIk1hcHMgYSBzdWJqZWN0QWx0TmFtZSdzIGlQQWRkcmVzcyB0byBhCisgICAgICAgICAgICAgICAgICB0bVNlY3VyaXR5TmFtZSBieSB0cmFuc2Zvcm1pbmcgdGhlIGJpbmFyeSBlbmNvZGVkCisgICAgICAgICAgICAgICAgICBhZGRyZXNzIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgICAgICAgIDEpIGZvciBJUHY0LCB0aGUgdmFsdWUgaXMgY29udmVydGVkIGludG8gYQorICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbC1kb3R0ZWQgcXVhZCBhZGRyZXNzIChlLmcuLCAnMTkyLjAuMi4xJykuCisKKyAgICAgICAgICAgICAgICAgIDIpIGZvciBJUHY2IGFkZHJlc3NlcywgdGhlIHZhbHVlIGlzIGNvbnZlcnRlZCBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgIDMyLWNoYXJhY3RlciBhbGwgbG93ZXJjYXNlIGhleGFkZWNpbWFsIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBhbnkgY29sb24gc2VwYXJhdG9ycy4KKworICAgICAgICAgICAgICAgICAgVGhpcyBtYXBwaW5nIHJlc3VsdHMgaW4gYSAxOjEgY29ycmVzcG9uZGVuY2UgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgc3ViamVjdEFsdE5hbWUgaVBBZGRyZXNzIHZhbHVlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICB0bVNlY3VyaXR5TmFtZSB2YWx1ZXMuCisKKyAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgbGVuZ3RoIG9mIGFuIGVuY29kZWQgSVB2NiBhZGRyZXNzIGlzCisgICAgICAgICAgICAgICAgICB0aGUgbWF4aW11bSBsZW5ndGggc3VwcG9ydGVkIGJ5IHRoZSBWaWV3LUJhc2VkCisgICAgICAgICAgICAgICAgICBBY2Nlc3MgQ29udHJvbCBNb2RlbCAoVkFDTSkuICBVc2luZyBib3RoIHRoZQorICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsJ3Mgc3VwcG9ydCBmb3IgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgICBwcmVmaXhlcyAoc2VlIHRoZSBTTk1QLVRTTS1NSUIncworICAgICAgICAgICAgICAgICAgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXggb2JqZWN0IGZvciBkZXRhaWxzKQorICAgICAgICAgICAgICAgICAgd2lsbCByZXN1bHQgaW4gc2VjdXJpdHlOYW1lIGxlbmd0aHMgdGhhdCBleGNlZWQgd2hhdAorICAgICAgICAgICAgICAgICAgVkFDTSBjYW4gaGFuZGxlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05NSWRlbnRpdGllcyA0IH0KKworc25tcFRsc3RtQ2VydFNBTkFueSBPQkpFQ1QtSURFTlRJVFkKKyAgICBTVEFUVVMgICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgIk1hcHMgYW55IG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBtYXBwaW5nIGFsZ29yaXRobXM6CisKKyAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICB8IEFsZ29yaXRobSAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgICAgICAgICAgIHwgcmZjODIyTmFtZSB8IHNubXBUbHN0bUNlcnRTQU5SRkM4MjJOYW1lIHwKKyAgICAgICAgICAgICAgICAgIHwgZE5TTmFtZSAgICB8IHNubXBUbHN0bUNlcnRTQU5ETlNOYW1lICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgaVBBZGRyZXNzICB8IHNubXBUbHN0bUNlcnRTQU5JcEFkZHJlc3MgIHwKKyAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKworICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG1hdGNoaW5nIHN1YmplY3RBbHROYW1lIHZhbHVlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgb2YgdGhlIGFib3ZlIHR5cGVzIE1VU1QgYmUgdXNlZCB3aGVuCisgICAgICAgICAgICAgICAgICBkZXJpdmluZyB0aGUgdG1TZWN1cml0eU5hbWUuICBUaGUgbWFwcGluZyBhbGdvcml0aG0KKyAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgJ0FsZ29yaXRobScgY29sdW1uIE1VU1QgYmUgdXNlZCB0bworICAgICAgICAgICAgICAgICAgZGVyaXZlIHRoZSB0bVNlY3VyaXR5TmFtZS4KKworICAgICAgICAgICAgICAgICAgVGhpcyBtYXBwaW5nIHJlc3VsdHMgaW4gYSAxOjEgY29ycmVzcG9uZGVuY2UgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgc3ViamVjdEFsdE5hbWUgdmFsdWVzIGFuZCB0bVNlY3VyaXR5TmFtZSB2YWx1ZXMuICBUaGUKKyAgICAgICAgICAgICAgICAgIHRocmVlIHN1Yi1tYXBwaW5nIGFsZ29yaXRobXMgcHJvZHVjZWQgYnkgdGhpcworICAgICAgICAgICAgICAgICAgY29tYmluZWQgYWxnb3JpdGhtIGNhbm5vdCBwcm9kdWNlIGNvbmZsaWN0aW5nCisgICAgICAgICAgICAgICAgICByZXN1bHRzIGJldHdlZW4gdGhlbXNlbHZlcy4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNOTUlkZW50aXRpZXMgNSB9CisKK3NubXBUbHN0bUNlcnRDb21tb25OYW1lIE9CSkVDVC1JREVOVElUWQorICAgIFNUQVRVUyAgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICAiTWFwcyBhIGNlcnRpZmljYXRlJ3MgQ29tbW9uTmFtZSB0byBhIHRtU2VjdXJpdHlOYW1lCisgICAgICAgICAgICAgICAgICBhZnRlciBjb252ZXJ0aW5nIGl0IHRvIGEgVVRGLTggZW5jb2RpbmcuICBUaGUgdXNhZ2UKKyAgICAgICAgICAgICAgICAgIG9mIENvbW1vbk5hbWVzIGlzIGRlcHJlY2F0ZWQgYW5kIHVzZXJzIGFyZQorICAgICAgICAgICAgICAgICAgZW5jb3VyYWdlZCB0byB1c2Ugc3ViamVjdEFsdE5hbWUgbWFwcGluZyBtZXRob2RzCisgICAgICAgICAgICAgICAgICBpbnN0ZWFkLiAgVGhpcyBtYXBwaW5nIHJlc3VsdHMgaW4gYSAxOjEKKworICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBjZXJ0aWZpY2F0ZSBDb21tb25OYW1lIHZhbHVlcworICAgICAgICAgICAgICAgICAgYW5kIHRtU2VjdXJpdHlOYW1lIHZhbHVlcy4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNOTUlkZW50aXRpZXMgNiB9CisKKy0tIFRoZSBzbm1wVGxzdG1TZXNzaW9uIEdyb3VwCisKK3NubXBUbHN0bVNlc3Npb24gICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bU9iamVjdHMgMSB9CisKK3NubXBUbHN0bVNlc3Npb25PcGVucyAgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhbiBvcGVuU2Vzc2lvbigpIHJlcXVlc3QgaGFzIGJlZW4gZXhlY3V0ZWQKKyAgICAgICBhcyBhIChEKVRMUyBjbGllbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBzdWNjZWVkZWQgb3IKKyAgICAgICBmYWlsZWQuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gMSB9CisKK3NubXBUbHN0bVNlc3Npb25DbGllbnRDbG9zZXMgIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGEgY2xvc2VTZXNzaW9uKCkgcmVxdWVzdCBoYXMgYmVlbgorICAgICAgICBleGVjdXRlZCBhcyBhIChEKVRMUyBjbGllbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdAorICAgICAgICBzdWNjZWVkZWQgb3IgZmFpbGVkLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDIgfQorCitzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycyAgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYW4gb3BlblNlc3Npb24oKSByZXF1ZXN0IGZhaWxlZCB0byBvcGVuIGEKKyAgICAgICAgc2Vzc2lvbiBhcyBhIChEKVRMUyBjbGllbnQsIGZvciBhbnkgcmVhc29uLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDMgfQorCitzbm1wVGxzdG1TZXNzaW9uQWNjZXB0cyAgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhIChEKVRMUyBzZXJ2ZXIgaGFzIGFjY2VwdGVkIGEgbmV3CisgICAgICAgY29ubmVjdGlvbiBmcm9tIGEgY2xpZW50IGFuZCBoYXMgcmVjZWl2ZWQgYXQgbGVhc3Qgb25lIFNOTVAKKyAgICAgICBtZXNzYWdlIHRocm91Z2ggaXQuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gNCB9CisKK3NubXBUbHN0bVNlc3Npb25TZXJ2ZXJDbG9zZXMgIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGEgY2xvc2VTZXNzaW9uKCkgcmVxdWVzdCBoYXMgYmVlbgorICAgICAgICBleGVjdXRlZCBhcyBhIChEKVRMUyBzZXJ2ZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdAorICAgICAgICBzdWNjZWVkZWQgb3IgZmFpbGVkLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDUgfQorCitzbm1wVGxzdG1TZXNzaW9uTm9TZXNzaW9ucyAgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYW4gb3V0Z29pbmcgbWVzc2FnZSB3YXMgZHJvcHBlZCBiZWNhdXNlCisgICAgICAgIHRoZSBzZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFzc2VkIHRtU3RhdGVSZWZlcmVuY2Ugd2FzIG5vCisgICAgICAgIGxvbmdlciAob3Igd2FzIG5ldmVyKSBhdmFpbGFibGUuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gNiB9CisKK3NubXBUbHN0bVNlc3Npb25JbnZhbGlkQ2xpZW50Q2VydGlmaWNhdGVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGFuIGluY29taW5nIHNlc3Npb24gd2FzIG5vdCBlc3RhYmxpc2hlZAorICAgICAgICBvbiBhIChEKVRMUyBzZXJ2ZXIgYmVjYXVzZSB0aGUgcHJlc2VudGVkIGNsaWVudCBjZXJ0aWZpY2F0ZQorICAgICAgICB3YXMgaW52YWxpZC4gIFJlYXNvbnMgZm9yIGludmFsaWRhdGlvbiBpbmNsdWRlLCBidXQgYXJlIG5vdAorICAgICAgICBsaW1pdGVkIHRvLCBjcnlwdG9ncmFwaGljIHZhbGlkYXRpb24gZmFpbHVyZXMgb3IgbGFjayBvZiBhCisgICAgICAgIHN1aXRhYmxlIG1hcHBpbmcgcm93IGluIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiA3IH0KKworc25tcFRsc3RtU2Vzc2lvblVua25vd25TZXJ2ZXJDZXJ0aWZpY2F0ZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhbiBvdXRnb2luZyBzZXNzaW9uIHdhcyBub3QgZXN0YWJsaXNoZWQKKyAgICAgICAgIG9uIGEgKEQpVExTIGNsaWVudCBiZWNhdXNlIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgcHJlc2VudGVkCisgICAgICAgICBieSBhbiBTTk1QIG92ZXIgKEQpVExTIHNlcnZlciB3YXMgaW52YWxpZCBiZWNhdXNlIG5vCisgICAgICAgICBjb25maWd1cmVkIGZpbmdlcnByaW50IG9yIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IChDQSkgd2FzCisgICAgICAgICBhY2NlcHRhYmxlIHRvIHZhbGlkYXRlIGl0LgorICAgICAgICAgVGhpcyBtYXkgcmVzdWx0IGJlY2F1c2UgdGhlcmUgd2FzIG5vIGVudHJ5IGluIHRoZQorICAgICAgICAgc25tcFRsc3RtQWRkclRhYmxlIG9yIGJlY2F1c2Ugbm8gcGF0aCBjb3VsZCBiZSBmb3VuZCB0byBhCisgICAgICAgICBrbm93biBDQS4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiA4IH0KKworc25tcFRsc3RtU2Vzc2lvbkludmFsaWRTZXJ2ZXJDZXJ0aWZpY2F0ZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYW4gb3V0Z29pbmcgc2Vzc2lvbiB3YXMgbm90IGVzdGFibGlzaGVkCisgICAgICAgICBvbiBhIChEKVRMUyBjbGllbnQgYmVjYXVzZSB0aGUgc2VydmVyIGNlcnRpZmljYXRlIHByZXNlbnRlZAorICAgICAgICAgYnkgYW4gU05NUCBvdmVyIChEKVRMUyBzZXJ2ZXIgY291bGQgbm90IGJlIHZhbGlkYXRlZCBldmVuIGlmCisgICAgICAgICB0aGUgZmluZ2VycHJpbnQgb3IgZXhwZWN0ZWQgdmFsaWRhdGlvbiBwYXRoIHdhcyBrbm93bi4gIFRoYXQKKyAgICAgICAgIGlzLCBhIGNyeXB0b2dyYXBoaWMgdmFsaWRhdGlvbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcKKyAgICAgICAgIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gcHJvY2Vzc2luZy4KKworICAgICAgICBSZWFzb25zIGZvciBpbnZhbGlkYXRpb24gaW5jbHVkZSwgYnV0IGFyZSBub3QKKyAgICAgICAgbGltaXRlZCB0bywgY3J5cHRvZ3JhcGhpYyB2YWxpZGF0aW9uIGZhaWx1cmVzLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDkgfQorCitzbm1wVGxzdG1TZXNzaW9uSW52YWxpZENhY2hlcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiBvdXRnb2luZyBtZXNzYWdlcyBkcm9wcGVkIGJlY2F1c2UgdGhlCisgICAgICAgIHRtU3RhdGVSZWZlcmVuY2UgcmVmZXJyZWQgdG8gYW4gaW52YWxpZCBjYWNoZS4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiAxMCB9CisKKy0tIENvbmZpZ3VyYXRpb24gT2JqZWN0cworCitzbm1wVGxzdG1Db25maWcgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtT2JqZWN0cyAyIH0KKworLS0gQ2VydGlmaWNhdGUgbWFwcGluZworCitzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtQ29uZmlnIDEgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05Db3VudCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEdhdWdlMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY291bnQgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZQorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDEgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZUxhc3RDaGFuZ2VkIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZVN0YW1wCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgb2Ygc3lzVXBUaW1lLjAgd2hlbiB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUgd2FzCisgICAgICAgIGxhc3QgbW9kaWZpZWQgdGhyb3VnaCBhbnkgbWVhbnMsIG9yIDAgaWYgaXQgaGFzIG5vdCBiZWVuCisgICAgICAgIG1vZGlmaWVkIHNpbmNlIHRoZSBjb21tYW5kIHJlc3BvbmRlciB3YXMgc3RhcnRlZC4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDIgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIFNubXBUbHN0bUNlcnRUb1RTTkVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoaXMgdGFibGUgaXMgdXNlZCBieSBhIChEKVRMUyBzZXJ2ZXIgdG8gbWFwIHRoZSAoRClUTFMKKyAgICAgICAgY2xpZW50J3MgcHJlc2VudGVkIFguNTA5IGNlcnRpZmljYXRlIHRvIGEgdG1TZWN1cml0eU5hbWUuCisKKyAgICAgICAgT24gYW4gaW5jb21pbmcgKEQpVExTL1NOTVAgY29ubmVjdGlvbiwgdGhlIGNsaWVudCdzIHByZXNlbnRlZAorICAgICAgICBjZXJ0aWZpY2F0ZSBtdXN0IGVpdGhlciBiZSB2YWxpZGF0ZWQgYmFzZWQgb24gYW4gZXN0YWJsaXNoZWQKKyAgICAgICAgdHJ1c3QgYW5jaG9yLCBvciBpdCBtdXN0IGRpcmVjdGx5IG1hdGNoIGEgZmluZ2VycHJpbnQgaW4gdGhpcworICAgICAgICB0YWJsZS4gIFRoaXMgdGFibGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgbWVjaGFuaXNtcyBmb3IKKyAgICAgICAgY29uZmlndXJpbmcgdGhlIHRydXN0IGFuY2hvcnM7IHRoZSB0cmFuc2ZlciBvZiBhbnkgbmVlZGVkCisgICAgICAgIHRydXN0ZWQgY2VydGlmaWNhdGVzIGZvciBwYXRoIHZhbGlkYXRpb24gaXMgZXhwZWN0ZWQgdG8gb2NjdXIKKyAgICAgICAgdGhyb3VnaCBhbiBvdXQtb2YtYmFuZCB0cmFuc2Zlci4KKworICAgICAgICBPbmNlIHRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBmb3VuZCBhY2NlcHRhYmxlIChlaXRoZXIgYnkgcGF0aAorICAgICAgICB2YWxpZGF0aW9uIG9yIGRpcmVjdGx5IG1hdGNoaW5nIGEgZmluZ2VycHJpbnQgaW4gdGhpcyB0YWJsZSksCisgICAgICAgIHRoaXMgdGFibGUgaXMgY29uc3VsdGVkIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgdG1TZWN1cml0eU5hbWUgdG8gaWRlbnRpZnkgd2l0aCB0aGUgcmVtb3RlIGNvbm5lY3Rpb24uICBUaGlzCisgICAgICAgIGlzIGRvbmUgYnkgY29uc2lkZXJpbmcgZWFjaCBhY3RpdmUgcm93IGZyb20gdGhpcyB0YWJsZSBpbgorICAgICAgICBwcmlvcml0aXplZCBvcmRlciBhY2NvcmRpbmcgdG8gaXRzIHNubXBUbHN0bUNlcnRUb1RTTklEIHZhbHVlLgorICAgICAgICBFYWNoIHJvdydzIHNubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50IHZhbHVlIGRldGVybWluZXMKKyAgICAgICAgd2hldGhlciB0aGUgcm93IGlzIGEgbWF0Y2ggZm9yIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uOgorCisgICAgICAgICAgICAxKSBJZiB0aGUgcm93J3Mgc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQgdmFsdWUKKyAgICAgICAgICAgICAgIGlkZW50aWZpZXMgdGhlIHByZXNlbnRlZCBjZXJ0aWZpY2F0ZSwgdGhlbiBjb25zaWRlciB0aGUKKyAgICAgICAgICAgICAgIHJvdyBhcyBhIHN1Y2Nlc3NmdWwgbWF0Y2guCisKKyAgICAgICAgICAgIDIpIElmIHRoZSByb3cncyBzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludCB2YWx1ZQorICAgICAgICAgICAgICAgaWRlbnRpZmllcyBhIGxvY2FsbHkgaGVsZCBjb3B5IG9mIGEgdHJ1c3RlZCBDQQorICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgYW5kIHRoYXQgQ0EgY2VydGlmaWNhdGUgd2FzIHVzZWQgdG8KKyAgICAgICAgICAgICAgIHZhbGlkYXRlIHRoZSBwYXRoIHRvIHRoZSBwcmVzZW50ZWQgY2VydGlmaWNhdGUsIHRoZW4KKyAgICAgICAgICAgICAgIGNvbnNpZGVyIHRoZSByb3cgYXMgYSBzdWNjZXNzZnVsIG1hdGNoLgorCisgICAgICAgIE9uY2UgYSBtYXRjaGluZyByb3cgaGFzIGJlZW4gZm91bmQsIHRoZQorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlIHZhbHVlIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBob3cKKyAgICAgICAgdGhlIHRtU2VjdXJpdHlOYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXNzaW9uIHNob3VsZCBiZQorICAgICAgICBkZXRlcm1pbmVkLiAgU2VlIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlIGNvbHVtbidzCisgICAgICAgIERFU0NSSVBUSU9OIGZvciBkZXRhaWxzIG9uIGRldGVybWluaW5nIHRoZSB0bVNlY3VyaXR5TmFtZQorICAgICAgICB2YWx1ZS4gIElmIGl0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIGEgdG1TZWN1cml0eU5hbWUgZnJvbQorICAgICAgICB0aGUgcm93J3MgZGF0YSBjb21iaW5lZCB3aXRoIHRoZSBkYXRhIHByZXNlbnRlZCBpbiB0aGUKKworICAgICAgICBjZXJ0aWZpY2F0ZSwgdGhlbiBhZGRpdGlvbmFsIHJvd3MgTVVTVCBiZSBzZWFyY2hlZCBsb29raW5nIGZvcgorICAgICAgICBhbm90aGVyIHBvdGVudGlhbCBtYXRjaC4gIElmIGEgcmVzdWx0aW5nIHRtU2VjdXJpdHlOYW1lIG1hcHBlZAorICAgICAgICBmcm9tIGEgZ2l2ZW4gcm93IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG5lZWRlZAorICAgICAgICByZXF1aXJlbWVudHMgb2YgYSB0bVNlY3VyaXR5TmFtZSAoZS5nLiwgVkFDTSBpbXBvc2VzIGEKKyAgICAgICAgMzItb2N0ZXQtbWF4aW11bSBsZW5ndGggYW5kIHRoZSBjZXJ0aWZpY2F0ZSBkZXJpdmVkCisgICAgICAgIHNlY3VyaXR5TmFtZSBjb3VsZCBiZSBsb25nZXIpLCB0aGVuIGl0IG11c3QgYmUgY29uc2lkZXJlZCBhbgorICAgICAgICBpbnZhbGlkIG1hdGNoIGFuZCBhZGRpdGlvbmFsIHJvd3MgTVVTVCBiZSBzZWFyY2hlZCBsb29raW5nIGZvcgorICAgICAgICBhbm90aGVyIHBvdGVudGlhbCBtYXRjaC4KKworICAgICAgICBJZiBubyBtYXRjaGluZyBhbmQgdmFsaWQgcm93IGNhbiBiZSBmb3VuZCwgdGhlIGNvbm5lY3Rpb24gTVVTVAorICAgICAgICBiZSBjbG9zZWQgYW5kIFNOTVAgbWVzc2FnZXMgTVVTVCBOT1QgYmUgYWNjZXB0ZWQgb3ZlciBpdC4KKworICAgICAgICBNaXNzaW5nIHZhbHVlcyBvZiBzbm1wVGxzdG1DZXJ0VG9UU05JRCBhcmUgYWNjZXB0YWJsZSBhbmQKKyAgICAgICAgaW1wbGVtZW50YXRpb25zIHNob3VsZCBjb250aW51ZSB0byB0aGUgbmV4dCBoaWdoZXN0IG51bWJlcmVkCisgICAgICAgIHJvdy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWRtaW5pc3RyYXRvcnMgc2tpcCBpbmRleCB2YWx1ZXMKKyAgICAgICAgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIGluc2VydGlvbiBvZiBmdXR1cmUgcm93cyAoZm9yIGV4YW1wbGUsCisgICAgICAgIHVzZSB2YWx1ZXMgb2YgMTAgYW5kIDIwIHdoZW4gY3JlYXRpbmcgaW5pdGlhbCByb3dzKS4KKworICAgICAgICBVc2VycyBhcmUgZW5jb3VyYWdlZCB0byBtYWtlIHVzZSBvZiBjZXJ0aWZpY2F0ZXMgd2l0aAorICAgICAgICBzdWJqZWN0QWx0TmFtZSBmaWVsZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyB0bVNlY3VyaXR5TmFtZXMgc28KKyAgICAgICAgdGhhdCBhIHNpbmdsZSByb290IENBIGNlcnRpZmljYXRlIGNhbiBhbGxvdyBhbGwgY2hpbGQKKyAgICAgICAgY2VydGlmaWNhdGUncyBzdWJqZWN0QWx0TmFtZSB0byBtYXAgZGlyZWN0bHkgdG8gYQorICAgICAgICB0bVNlY3VyaXR5TmFtZSB2aWEgYSAxOjEgdHJhbnNmb3JtYXRpb24uICBIb3dldmVyLCB0aGlzIHRhYmxlCisgICAgICAgIGlzIGZsZXhpYmxlIHRvIGFsbG93IGZvciBzaXR1YXRpb25zIHdoZXJlIGV4aXN0aW5nIGRlcGxveWVkCisgICAgICAgIGNlcnRpZmljYXRlIGluZnJhc3RydWN0dXJlcyBkbyBub3QgcHJvdmlkZSBhZGVxdWF0ZQorICAgICAgICBzdWJqZWN0QWx0TmFtZSB2YWx1ZXMgZm9yIHVzZSBhcyB0bVNlY3VyaXR5TmFtZXMuCisgICAgICAgIENlcnRpZmljYXRlcyBtYXkgYWxzbyBiZSBtYXBwZWQgdG8gdG1TZWN1cml0eU5hbWVzIHVzaW5nIHRoZQorICAgICAgICBDb21tb25OYW1lIHBvcnRpb24gb2YgdGhlIFN1YmplY3QgZmllbGQuICBIb3dldmVyLCB0aGUgdXNhZ2UKKyAgICAgICAgb2YgdGhlIENvbW1vbk5hbWUgZmllbGQgaXMgZGVwcmVjYXRlZCBhbmQgdGh1cyB0aGlzIHVzYWdlIGlzCisgICAgICAgIE5PVCBSRUNPTU1FTkRFRC4gIERpcmVjdCBtYXBwaW5nIGZyb20gZWFjaCBpbmRpdmlkdWFsCisgICAgICAgIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IHRvIGEgdG1TZWN1cml0eU5hbWUgaXMgYWxzbyBwb3NzaWJsZQorICAgICAgICBidXQgcmVxdWlyZXMgb25lIGVudHJ5IGluIHRoZSB0YWJsZSBwZXIgdG1TZWN1cml0eU5hbWUgYW5kCisgICAgICAgIHJlcXVpcmVzIG1vcmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHRvIGNvbXBsZXRlbHkgY29uZmlndXJlIGEKKyAgICAgICAgZGV2aWNlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgMyB9CisKK3NubXBUbHN0bUNlcnRUb1RTTkVudHJ5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU25tcFRsc3RtQ2VydFRvVFNORW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSByb3cgaW4gdGhlIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlIHRoYXQgc3BlY2lmaWVzIGEgbWFwcGluZworICAgICAgICBmb3IgYW4gaW5jb21pbmcgKEQpVExTIGNlcnRpZmljYXRlIHRvIGEgdG1TZWN1cml0eU5hbWUgdG8gdXNlCisgICAgICAgIGZvciBhIGNvbm5lY3Rpb24uIgorICAgIElOREVYICAgeyBzbm1wVGxzdG1DZXJ0VG9UU05JRCB9CisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUgMSB9CisKK1NubXBUbHN0bUNlcnRUb1RTTkVudHJ5IDo6PSBTRVFVRU5DRSB7CisgICAgc25tcFRsc3RtQ2VydFRvVFNOSUQgICAgICAgICAgIFVuc2lnbmVkMzIsCisgICAgc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQgIFNubXBUTFNGaW5nZXJwcmludCwKKyAgICBzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlICAgICAgQXV0b25vbW91c1R5cGUsCisgICAgc25tcFRsc3RtQ2VydFRvVFNORGF0YSAgICAgICAgIE9DVEVUIFNUUklORywKKyAgICBzbm1wVGxzdG1DZXJ0VG9UU05TdG9yYWdlVHlwZSAgU3RvcmFnZVR5cGUsCisgICAgc25tcFRsc3RtQ2VydFRvVFNOUm93U3RhdHVzICAgIFJvd1N0YXR1cworfQorCitzbm1wVGxzdG1DZXJ0VG9UU05JRCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFVuc2lnbmVkMzIgKDEuLjQyOTQ5NjcyOTUpCisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgdW5pcXVlLCBwcmlvcml0aXplZCBpbmRleCBmb3IgdGhlIGdpdmVuIGVudHJ5LiAgTG93ZXIKKyAgICAgICAgbnVtYmVycyBpbmRpY2F0ZSBhIGhpZ2hlciBwcmlvcml0eS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNORW50cnkgMSB9CisKK3NubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU25tcFRMU0ZpbmdlcnByaW50IChTSVpFKDEuLjI1NSkpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIGFuIFguNTA5IGNlcnRpZmljYXRlLiAgVGhlIHJlc3VsdHMgb2YKKyAgICAgICAgYSBzdWNjZXNzZnVsIG1hdGNoaW5nIGZpbmdlcnByaW50IHRvIGVpdGhlciB0aGUgdHJ1c3RlZCBDQSBpbgorICAgICAgICB0aGUgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBwYXRoIG9yIHRvIHRoZSBjZXJ0aWZpY2F0ZSBpdHNlbGYKKyAgICAgICAgaXMgZGljdGF0ZWQgYnkgdGhlIHNubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUgY29sdW1uLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSAyIH0KKworc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEF1dG9ub21vdXNUeXBlCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlNwZWNpZmllcyB0aGUgbWFwcGluZyB0eXBlIGZvciBkZXJpdmluZyBhIHRtU2VjdXJpdHlOYW1lIGZyb20KKyAgICAgICAgYSBjZXJ0aWZpY2F0ZS4gIERldGFpbHMgZm9yIG1hcHBpbmcgb2YgYSBwYXJ0aWN1bGFyIHR5cGUgU0hBTEwKKyAgICAgICAgYmUgc3BlY2lmaWVkIGluIHRoZSBERVNDUklQVElPTiBjbGF1c2Ugb2YgdGhlIE9CSkVDVC1JREVOVElUWQorICAgICAgICB0aGF0IGRlc2NyaWJlcyB0aGUgbWFwcGluZy4gIElmIGEgbWFwcGluZyBzdWNjZWVkcyBpdCB3aWxsCisgICAgICAgIHJldHVybiBhIHRtU2VjdXJpdHlOYW1lIGZvciB1c2UgYnkgdGhlIFRMU1RNIG1vZGVsIGFuZAorICAgICAgICBwcm9jZXNzaW5nIHN0b3BzLgorCisgICAgICAgIElmIHRoZSByZXN1bHRpbmcgbWFwcGVkIHZhbHVlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlCisgICAgICAgIG5lZWRlZCByZXF1aXJlbWVudHMgb2YgYSB0bVNlY3VyaXR5TmFtZSAoZS5nLiwgVkFDTSBpbXBvc2VzIGEKKyAgICAgICAgMzItb2N0ZXQtbWF4aW11bSBsZW5ndGggYW5kIHRoZSBjZXJ0aWZpY2F0ZSBkZXJpdmVkCisgICAgICAgIHNlY3VyaXR5TmFtZSBjb3VsZCBiZSBsb25nZXIpLCB0aGVuIGZ1dHVyZSByb3dzIE1VU1QgYmUKKyAgICAgICAgc2VhcmNoZWQgZm9yIGFkZGl0aW9uYWwgc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQgbWF0Y2hlcworICAgICAgICB0byBsb29rIGZvciBhIG1hcHBpbmcgdGhhdCBzdWNjZWVkcy4KKworICAgICAgICBTdWl0YWJsZSB2YWx1ZXMgZm9yIGFzc2lnbmluZyB0byB0aGlzIG9iamVjdCB0aGF0IGFyZSBkZWZpbmVkCisgICAgICAgIHdpdGhpbiB0aGUgU05NUC1UTFMtVE0tTUlCIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOTUlkZW50aXRpZXMgcG9ydGlvbiBvZiB0aGUgTUlCIHRyZWUuIgorICAgIERFRlZBTCB7IHNubXBUbHN0bUNlcnRTcGVjaWZpZWQgfQorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTkVudHJ5IDMgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05EYXRhIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgT0NURVQgU1RSSU5HIChTSVpFKDAuLjEwMjQpKQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBdXhpbGlhcnkgZGF0YSB1c2VkIGFzIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yCisgICAgICAgIGEgZ2l2ZW4gbWFwcGluZyBzcGVjaWZpZWQgYnkgdGhlIHNubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUKKyAgICAgICAgY29sdW1uLiAgT25seSBzb21lIG1hcHBpbmcgc3lzdGVtcyB3aWxsIG1ha2UgdXNlIG9mIHRoaXMKKyAgICAgICAgY29sdW1uLiAgVGhlIHZhbHVlIGluIHRoaXMgY29sdW1uIE1VU1QgYmUgaWdub3JlZCBmb3IgYW55CisgICAgICAgIG1hcHBpbmcgdHlwZSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgZGF0YSBwcmVzZW50IGluIHRoaXMKKyAgICAgICAgY29sdW1uLiIKKyAgICBERUZWQUwgeyAiIiB9CisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNORW50cnkgNCB9CisKK3NubXBUbHN0bUNlcnRUb1RTTlN0b3JhZ2VUeXBlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIFN0b3JhZ2VUeXBlCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHN0b3JhZ2UgdHlwZSBmb3IgdGhpcyBjb25jZXB0dWFsIHJvdy4gIENvbmNlcHR1YWwgcm93cworICAgICAgICBoYXZpbmcgdGhlIHZhbHVlICdwZXJtYW5lbnQnIG5lZWQgbm90IGFsbG93IHdyaXRlLWFjY2VzcyB0bworICAgICAgICBhbnkgY29sdW1uYXIgb2JqZWN0cyBpbiB0aGUgcm93LiIKKyAgICBERUZWQUwgICAgICB7IG5vblZvbGF0aWxlIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSA1IH0KKworc25tcFRsc3RtQ2VydFRvVFNOUm93U3RhdHVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgUm93U3RhdHVzCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBzdGF0dXMgb2YgdGhpcyBjb25jZXB0dWFsIHJvdy4gIFRoaXMgb2JqZWN0IG1heSBiZSB1c2VkCisgICAgICAgIHRvIGNyZWF0ZSBvciByZW1vdmUgcm93cyBmcm9tIHRoaXMgdGFibGUuCisKKyAgICAgICAgVG8gY3JlYXRlIGEgcm93IGluIHRoaXMgdGFibGUsIGFuIGFkbWluaXN0cmF0b3IgbXVzdCBzZXQgdGhpcworICAgICAgICBvYmplY3QgdG8gZWl0aGVyIGNyZWF0ZUFuZEdvKDQpIG9yIGNyZWF0ZUFuZFdhaXQoNSkuCisKKyAgICAgICAgVW50aWwgaW5zdGFuY2VzIG9mIGFsbCBjb3JyZXNwb25kaW5nIGNvbHVtbnMgYXJlIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgY29uZmlndXJlZCwgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mIHRoZQorICAgICAgICBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgY29sdW1uIGlzIG5vdFJlYWR5KDMpLgorCisgICAgICAgIEluIHBhcnRpY3VsYXIsIGEgbmV3bHkgY3JlYXRlZCByb3cgY2Fubm90IGJlIG1hZGUgYWN0aXZlIHVudGlsCisgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIHNubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50LAorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlLCBhbmQgc25tcFRsc3RtQ2VydFRvVFNORGF0YSBjb2x1bW5zCisgICAgICAgIGhhdmUgYmVlbiBzZXQuCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBvYmplY3RzIG1heSBub3QgYmUgbW9kaWZpZWQgd2hpbGUgdGhlCisgICAgICAgIHZhbHVlIG9mIHRoaXMgb2JqZWN0IGlzIGFjdGl2ZSgxKToKKyAgICAgICAgICAgIC0gc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQKKyAgICAgICAgICAgIC0gc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZQorICAgICAgICAgICAgLSBzbm1wVGxzdG1DZXJ0VG9UU05EYXRhCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2V0IHRoZXNlIG9iamVjdHMgd2hpbGUgdGhlIHZhbHVlIG9mCisgICAgICAgIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyBpcyBhY3RpdmUoMSkgd2lsbCByZXN1bHQgaW4KKyAgICAgICAgYW4gaW5jb25zaXN0ZW50VmFsdWUgZXJyb3IuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTkVudHJ5IDYgfQorCistLSBNYXBzIHRtU2VjdXJpdHlOYW1lcyB0byBjZXJ0aWZpY2F0ZXMgZm9yIHVzZSBieSB0aGUgU05NUC1UQVJHRVQtTUlCCisKK3NubXBUbHN0bVBhcmFtc0NvdW50IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgR2F1Z2UzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNubXBUbHN0bVBhcmFtc1RhYmxlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgNCB9CisKK3NubXBUbHN0bVBhcmFtc1RhYmxlTGFzdENoYW5nZWQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lU3RhbXAKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSBvZiBzeXNVcFRpbWUuMCB3aGVuIHRoZSBzbm1wVGxzdG1QYXJhbXNUYWJsZQorICAgICAgICB3YXMgbGFzdCBtb2RpZmllZCB0aHJvdWdoIGFueSBtZWFucywgb3IgMCBpZiBpdCBoYXMgbm90IGJlZW4KKyAgICAgICAgbW9kaWZpZWQgc2luY2UgdGhlIGNvbW1hbmQgcmVzcG9uZGVyIHdhcyBzdGFydGVkLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgNSB9CisKK3NubXBUbHN0bVBhcmFtc1RhYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgU25tcFRsc3RtUGFyYW1zRW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhpcyB0YWJsZSBpcyB1c2VkIGJ5IGEgKEQpVExTIGNsaWVudCB3aGVuIGEgKEQpVExTCisgICAgICAgIGNvbm5lY3Rpb24gaXMgYmVpbmcgc2V0IHVwIHVzaW5nIGFuIGVudHJ5IGluIHRoZQorICAgICAgICBTTk1QLVRBUkdFVC1NSUIuICBJdCBleHRlbmRzIHRoZSBTTk1QLVRBUkdFVC1NSUIncworICAgICAgICBzbm1wVGFyZ2V0UGFyYW1zVGFibGUgd2l0aCBhIGZpbmdlcnByaW50IG9mIGEgY2VydGlmaWNhdGUgdG8KKyAgICAgICAgdXNlIHdoZW4gZXN0YWJsaXNoaW5nIHN1Y2ggYSAoRClUTFMgY29ubmVjdGlvbi4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDYgfQorCitzbm1wVGxzdG1QYXJhbXNFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNubXBUbHN0bVBhcmFtc0VudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY29uY2VwdHVhbCByb3cgY29udGFpbmluZyBhIGZpbmdlcnByaW50IGhhc2ggb2YgYSBsb2NhbGx5CisgICAgICAgIGhlbGQgY2VydGlmaWNhdGUgZm9yIGEgZ2l2ZW4gc25tcFRhcmdldFBhcmFtc0VudHJ5LiAgVGhlCisgICAgICAgIHZhbHVlcyBpbiB0aGlzIHJvdyBzaG91bGQgYmUgaWdub3JlZCBpZiB0aGUgY29ubmVjdGlvbiB0aGF0CisgICAgICAgIG5lZWRzIHRvIGJlIGVzdGFibGlzaGVkLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIFNOTVAtVEFSR0VULU1JQgorICAgICAgICBpbmZyYXN0cnVjdHVyZSwgaXMgbm90IGEgY2VydGlmaWNhdGUgYW5kIChEKVRMUyBiYXNlZAorICAgICAgICBjb25uZWN0aW9uLiAgVGhlIGNvbm5lY3Rpb24gU0hPVUxEIE5PVCBiZSBlc3RhYmxpc2hlZCBpZiB0aGUKKyAgICAgICAgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgc3RvcmVkIGluIHRoaXMgZW50cnkgZG9lcyBub3QgcG9pbnQgdG8KKyAgICAgICAgYSB2YWxpZCBsb2NhbGx5IGhlbGQgY2VydGlmaWNhdGUgb3IgaWYgaXQgcG9pbnRzIHRvIGFuCisgICAgICAgIHVudXNhYmxlIGNlcnRpZmljYXRlIChzdWNoIGFzIG1pZ2h0IGhhcHBlbiB3aGVuIHRoZQorICAgICAgICBjZXJ0aWZpY2F0ZSdzIGV4cGlyYXRpb24gZGF0ZSBoYXMgYmVlbiByZWFjaGVkKS4iCisgICAgSU5ERVggICAgeyBJTVBMSUVEIHNubXBUYXJnZXRQYXJhbXNOYW1lIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1QYXJhbXNUYWJsZSAxIH0KKworU25tcFRsc3RtUGFyYW1zRW50cnkgOjo9IFNFUVVFTkNFIHsKKyAgICBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCBTbm1wVExTRmluZ2VycHJpbnQsCisgICAgc25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgICAgICAgU3RvcmFnZVR5cGUsCisgICAgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzICAgICAgICAgUm93U3RhdHVzCit9CisKK3NubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU25tcFRMU0ZpbmdlcnByaW50CisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoaXMgb2JqZWN0IHN0b3JlcyB0aGUgaGFzaCBvZiB0aGUgcHVibGljIHBvcnRpb24gb2YgYQorICAgICAgICBsb2NhbGx5IGhlbGQgWC41MDkgY2VydGlmaWNhdGUuICBUaGUgWC41MDkgY2VydGlmaWNhdGUsIGl0cworICAgICAgICBwdWJsaWMga2V5LCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgcHJpdmF0ZSBrZXkgd2lsbCBiZSB1c2VkCisgICAgICAgIHdoZW4gaW5pdGlhdGluZyBhIChEKVRMUyBjb25uZWN0aW9uIGFzIGEgKEQpVExTIGNsaWVudC4iCisgICAgOjo9IHsgc25tcFRsc3RtUGFyYW1zRW50cnkgMSB9CisKK3NubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIFN0b3JhZ2VUeXBlCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHN0b3JhZ2UgdHlwZSBmb3IgdGhpcyBjb25jZXB0dWFsIHJvdy4gIENvbmNlcHR1YWwgcm93cworICAgICAgICBoYXZpbmcgdGhlIHZhbHVlICdwZXJtYW5lbnQnIG5lZWQgbm90IGFsbG93IHdyaXRlLWFjY2VzcyB0bworICAgICAgICBhbnkgY29sdW1uYXIgb2JqZWN0cyBpbiB0aGUgcm93LiIKKyAgICBERUZWQUwgICAgICB7IG5vblZvbGF0aWxlIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1QYXJhbXNFbnRyeSAyIH0KKworc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgUm93U3RhdHVzCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBzdGF0dXMgb2YgdGhpcyBjb25jZXB0dWFsIHJvdy4gIFRoaXMgb2JqZWN0IG1heSBiZSB1c2VkCisgICAgICAgIHRvIGNyZWF0ZSBvciByZW1vdmUgcm93cyBmcm9tIHRoaXMgdGFibGUuCisKKyAgICAgICAgVG8gY3JlYXRlIGEgcm93IGluIHRoaXMgdGFibGUsIGFuIGFkbWluaXN0cmF0b3IgbXVzdCBzZXQgdGhpcworICAgICAgICBvYmplY3QgdG8gZWl0aGVyIGNyZWF0ZUFuZEdvKDQpIG9yIGNyZWF0ZUFuZFdhaXQoNSkuCisKKyAgICAgICAgVW50aWwgaW5zdGFuY2VzIG9mIGFsbCBjb3JyZXNwb25kaW5nIGNvbHVtbnMgYXJlIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgY29uZmlndXJlZCwgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mIHRoZQorICAgICAgICBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgY29sdW1uIGlzIG5vdFJlYWR5KDMpLgorCisgICAgICAgIEluIHBhcnRpY3VsYXIsIGEgbmV3bHkgY3JlYXRlZCByb3cgY2Fubm90IGJlIG1hZGUgYWN0aXZlIHVudGlsCisgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50IGNvbHVtbiBoYXMKKyAgICAgICAgYmVlbiBzZXQuCisKKyAgICAgICAgVGhlIHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50IG9iamVjdCBtYXkgbm90IGJlIG1vZGlmaWVkCisgICAgICAgIHdoaWxlIHRoZSB2YWx1ZSBvZiB0aGlzIG9iamVjdCBpcyBhY3RpdmUoMSkuCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZXQgdGhlc2Ugb2JqZWN0cyB3aGlsZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzIGlzIGFjdGl2ZSgxKSB3aWxsIHJlc3VsdCBpbgorICAgICAgICBhbiBpbmNvbnNpc3RlbnRWYWx1ZSBlcnJvci4iCisgICAgOjo9IHsgc25tcFRsc3RtUGFyYW1zRW50cnkgMyB9CisKK3NubXBUbHN0bUFkZHJDb3VudCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEdhdWdlMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY291bnQgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzbm1wVGxzdG1BZGRyVGFibGUuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyA3IH0KKworc25tcFRsc3RtQWRkclRhYmxlTGFzdENoYW5nZWQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lU3RhbXAKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSBvZiBzeXNVcFRpbWUuMCB3aGVuIHRoZSBzbm1wVGxzdG1BZGRyVGFibGUKKyAgICAgICAgd2FzIGxhc3QgbW9kaWZpZWQgdGhyb3VnaCBhbnkgbWVhbnMsIG9yIDAgaWYgaXQgaGFzIG5vdCBiZWVuCisgICAgICAgIG1vZGlmaWVkIHNpbmNlIHRoZSBjb21tYW5kIHJlc3BvbmRlciB3YXMgc3RhcnRlZC4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDggfQorCitzbm1wVGxzdG1BZGRyVGFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBTbm1wVGxzdG1BZGRyRW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhpcyB0YWJsZSBpcyB1c2VkIGJ5IGEgKEQpVExTIGNsaWVudCB3aGVuIGEgKEQpVExTCisgICAgICAgIGNvbm5lY3Rpb24gaXMgYmVpbmcgc2V0IHVwIHVzaW5nIGFuIGVudHJ5IGluIHRoZQorICAgICAgICBTTk1QLVRBUkdFVC1NSUIuICBJdCBleHRlbmRzIHRoZSBTTk1QLVRBUkdFVC1NSUIncworCisgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGUgc28gdGhhdCB0aGUgY2xpZW50IGNhbiB2ZXJpZnkgdGhhdCB0aGUKKyAgICAgICAgY29ycmVjdCBzZXJ2ZXIgaGFzIGJlZW4gcmVhY2hlZC4gIFRoaXMgdmVyaWZpY2F0aW9uIGNhbiB1c2UKKyAgICAgICAgZWl0aGVyIGEgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQsIG9yIGFuIGlkZW50aXR5CisgICAgICAgIGF1dGhlbnRpY2F0ZWQgdmlhIGNlcnRpZmljYXRpb24gcGF0aCB2YWxpZGF0aW9uLgorCisgICAgICAgIElmIHRoZXJlIGlzIGFuIGFjdGl2ZSByb3cgaW4gdGhpcyB0YWJsZSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBlbnRyeSBpbiB0aGUgU05NUC1UQVJHRVQtTUlCIHRoYXQgd2FzIHVzZWQgdG8gZXN0YWJsaXNoIHRoZQorICAgICAgICBjb25uZWN0aW9uLCBhbmQgdGhlIHJvdydzIHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludAorICAgICAgICBjb2x1bW4gaGFzIG5vbi1lbXB0eSB2YWx1ZSwgdGhlbiB0aGUgc2VydmVyJ3MgcHJlc2VudGVkCisgICAgICAgIGNlcnRpZmljYXRlIGlzIGNvbXBhcmVkIHdpdGggdGhlCisgICAgICAgIHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCB2YWx1ZSAoYW5kIHRoZQorICAgICAgICBzbm1wVGxzdG1BZGRyU2VydmVySWRlbnRpdHkgY29sdW1uIGlzIGlnbm9yZWQpLiAgSWYgdGhlCisgICAgICAgIGZpbmdlcnByaW50IG1hdGNoZXMsIHRoZSB2ZXJpZmljYXRpb24gaGFzIHN1Y2NlZWRlZC4gIElmIHRoZQorICAgICAgICBmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB0aGUgY29ubmVjdGlvbiBNVVNUIGJlCisgICAgICAgIGNsb3NlZC4KKworICAgICAgICBJZiB0aGUgc2VydmVyJ3MgcHJlc2VudGVkIGNlcnRpZmljYXRlIGhhcyBwYXNzZWQKKyAgICAgICAgY2VydGlmaWNhdGlvbiBwYXRoIHZhbGlkYXRpb24gW1JGQzUyODBdIHRvIGEgY29uZmlndXJlZAorICAgICAgICB0cnVzdCBhbmNob3IsIGFuZCBhbiBhY3RpdmUgcm93IGV4aXN0cyB3aXRoIGEgemVyby1sZW5ndGgKKyAgICAgICAgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50IHZhbHVlLCB0aGVuIHRoZQorICAgICAgICBzbm1wVGxzdG1BZGRyU2VydmVySWRlbnRpdHkgY29sdW1uIGNvbnRhaW5zIHRoZSBleHBlY3RlZAorICAgICAgICBob3N0IG5hbWUuICBUaGlzIGV4cGVjdGVkIGhvc3QgbmFtZSBpcyB0aGVuIGNvbXBhcmVkIGFnYWluc3QKKyAgICAgICAgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAtIEltcGxlbWVudGF0aW9ucyBNVVNUIHN1cHBvcnQgbWF0Y2hpbmcgdGhlIGV4cGVjdGVkIGhvc3QKKyAgICAgICAgICBuYW1lIGFnYWluc3QgYSBkTlNOYW1lIGluIHRoZSBzdWJqZWN0QWx0TmFtZSBleHRlbnNpb24KKyAgICAgICAgICBmaWVsZCBhbmQgTUFZIHN1cHBvcnQgY2hlY2tpbmcgdGhlIG5hbWUgYWdhaW5zdCB0aGUKKyAgICAgICAgICBDb21tb25OYW1lIHBvcnRpb24gb2YgdGhlIHN1YmplY3QgZGlzdGluZ3Vpc2hlZCBuYW1lLgorCisgICAgICAgICAgLSBUaGUgJyonIChBU0NJSSAweDJhKSB3aWxkY2FyZCBjaGFyYWN0ZXIgaXMgYWxsb3dlZCBpbiB0aGUKKyAgICAgICAgICBkTlNOYW1lIG9mIHRoZSBzdWJqZWN0QWx0TmFtZSBleHRlbnNpb24gKGFuZCBpbiBjb21tb24KKyAgICAgICAgICBuYW1lLCBpZiB1c2VkIHRvIHN0b3JlIHRoZSBob3N0IG5hbWUpLCBidXQgb25seSBhcyB0aGUKKyAgICAgICAgICBsZWZ0LW1vc3QgKGxlYXN0IHNpZ25pZmljYW50KSBETlMgbGFiZWwgaW4gdGhhdCB2YWx1ZS4KKyAgICAgICAgICBUaGlzIHdpbGRjYXJkIG1hdGNoZXMgYW55IGxlZnQtbW9zdCBETlMgbGFiZWwgaW4gdGhlCisgICAgICAgICAgc2VydmVyIG5hbWUuICBUaGF0IGlzLCB0aGUgc3ViamVjdCAqLmV4YW1wbGUuY29tIG1hdGNoZXMKKyAgICAgICAgICB0aGUgc2VydmVyIG5hbWVzIGEuZXhhbXBsZS5jb20gYW5kIGIuZXhhbXBsZS5jb20sIGJ1dCBkb2VzCisgICAgICAgICAgbm90IG1hdGNoIGV4YW1wbGUuY29tIG9yIGEuYi5leGFtcGxlLmNvbS4gIEltcGxlbWVudGF0aW9ucworICAgICAgICAgIE1VU1Qgc3VwcG9ydCB3aWxkY2FyZHMgaW4gY2VydGlmaWNhdGVzIGFzIHNwZWNpZmllZCBhYm92ZSwKKyAgICAgICAgICBidXQgTUFZIHByb3ZpZGUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBkaXNhYmxlIHRoZW0uCisKKyAgICAgICAgICAtIElmIHRoZSBsb2NhbGx5IGNvbmZpZ3VyZWQgbmFtZSBpcyBhbiBpbnRlcm5hdGlvbmFsaXplZAorICAgICAgICAgIGRvbWFpbiBuYW1lLCBjb25mb3JtaW5nIGltcGxlbWVudGF0aW9ucyBNVVNUIGNvbnZlcnQgaXQgdG8KKyAgICAgICAgICB0aGUgQVNDSUkgQ29tcGF0aWJsZSBFbmNvZGluZyAoQUNFKSBmb3JtYXQgZm9yIHBlcmZvcm1pbmcKKyAgICAgICAgICBjb21wYXJpc29ucywgYXMgc3BlY2lmaWVkIGluIFNlY3Rpb24gNyBvZiBbUkZDNTI4MF0uCisKKyAgICAgICAgSWYgdGhlIGV4cGVjdGVkIGhvc3QgbmFtZSBmYWlscyB0aGVzZSBjb25kaXRpb25zIHRoZW4gdGhlCisgICAgICAgIGNvbm5lY3Rpb24gTVVTVCBiZSBjbG9zZWQuCisKKyAgICAgICAgSWYgdGhlcmUgaXMgbm8gcm93IGluIHRoaXMgdGFibGUgY29ycmVzcG9uZGluZyB0byB0aGUgZW50cnkKKyAgICAgICAgaW4gdGhlIFNOTVAtVEFSR0VULU1JQiBhbmQgdGhlIHNlcnZlciBjYW4gYmUgYXV0aG9yaXplZCBieQorICAgICAgICBhbm90aGVyLCBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgbWVhbnMsIHRoZW4gdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgTUFZIHN0aWxsIHByb2NlZWQuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyA5IH0KKworc25tcFRsc3RtQWRkckVudHJ5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU25tcFRsc3RtQWRkckVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY29uY2VwdHVhbCByb3cgY29udGFpbmluZyBhIGNvcHkgb2YgYSBjZXJ0aWZpY2F0ZSdzCisgICAgICAgIGZpbmdlcnByaW50IGZvciBhIGdpdmVuIHNubXBUYXJnZXRBZGRyRW50cnkuICBUaGUgdmFsdWVzIGluCisgICAgICAgIHRoaXMgcm93IHNob3VsZCBiZSBpZ25vcmVkIGlmIHRoZSBjb25uZWN0aW9uIHRoYXQgbmVlZHMgdG8gYmUKKyAgICAgICAgZXN0YWJsaXNoZWQsIGFzIGluZGljYXRlZCBieSB0aGUgU05NUC1UQVJHRVQtTUlCCisgICAgICAgIGluZnJhc3RydWN0dXJlLCBpcyBub3QgYSAoRClUTFMgYmFzZWQgY29ubmVjdGlvbi4gIElmIGFuCisgICAgICAgIHNubXBUbHN0bUFkZHJFbnRyeSBleGlzdHMgZm9yIGEgZ2l2ZW4gc25tcFRhcmdldEFkZHJFbnRyeSwgdGhlbgorICAgICAgICB0aGUgcHJlc2VudGVkIHNlcnZlciBjZXJ0aWZpY2F0ZSBNVVNUIG1hdGNoIG9yIHRoZSBjb25uZWN0aW9uCisgICAgICAgIE1VU1QgTk9UIGJlIGVzdGFibGlzaGVkLiAgSWYgYSByb3cgaW4gdGhpcyB0YWJsZSBkb2VzIG5vdAorICAgICAgICBleGlzdCB0byBtYXRjaCBhbiBzbm1wVGFyZ2V0QWRkckVudHJ5IHJvdywgdGhlbiB0aGUgY29ubmVjdGlvbgorICAgICAgICBTSE9VTEQgc3RpbGwgcHJvY2VlZCBpZiBzb21lIG90aGVyIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gcGF0aAorICAgICAgICBhbGdvcml0aG0gKGUuZy4sIFJGQyA1MjgwKSBjYW4gYmUgdXNlZC4iCisgICAgSU5ERVggICAgeyBJTVBMSUVEIHNubXBUYXJnZXRBZGRyTmFtZSB9CisgICAgOjo9IHsgc25tcFRsc3RtQWRkclRhYmxlIDEgfQorCitTbm1wVGxzdG1BZGRyRW50cnkgOjo9IFNFUVVFTkNFIHsKKyAgICBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQgICAgU25tcFRMU0ZpbmdlcnByaW50LAorICAgIHNubXBUbHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSAgICAgICBTbm1wQWRtaW5TdHJpbmcsCisgICAgc25tcFRsc3RtQWRkclN0b3JhZ2VUeXBlICAgICAgICAgIFN0b3JhZ2VUeXBlLAorICAgIHNubXBUbHN0bUFkZHJSb3dTdGF0dXMgICAgICAgICAgICBSb3dTdGF0dXMKK30KKworc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU25tcFRMU0ZpbmdlcnByaW50CisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIGEgcHVibGljIFguNTA5IGNlcnRpZmljYXRlLiAgVGhpcworICAgICAgICBvYmplY3Qgc2hvdWxkIHN0b3JlIHRoZSBoYXNoIG9mIHRoZSBwdWJsaWMgWC41MDkgY2VydGlmaWNhdGUKKyAgICAgICAgdGhhdCB0aGUgcmVtb3RlIHNlcnZlciBzaG91bGQgcHJlc2VudCBkdXJpbmcgdGhlIChEKVRMUworICAgICAgICBjb25uZWN0aW9uIHNldHVwLiAgVGhlIGZpbmdlcnByaW50IG9mIHRoZSBwcmVzZW50ZWQKKyAgICAgICAgY2VydGlmaWNhdGUgYW5kIHRoaXMgaGFzaCB2YWx1ZSBNVVNUIG1hdGNoIGV4YWN0bHkgb3IgdGhlCisgICAgICAgIGNvbm5lY3Rpb24gTVVTVCBOT1QgYmUgZXN0YWJsaXNoZWQuIgorICAgIERFRlZBTCB7ICIiIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1BZGRyRW50cnkgMSB9CisKK3NubXBUbHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNubXBBZG1pblN0cmluZworICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcmVmZXJlbmNlIGlkZW50aXR5IHRvIGNoZWNrIGFnYWluc3QgdGhlIGlkZW50aXR5CisgICAgICAgIHByZXNlbnRlZCBieSB0aGUgcmVtb3RlIHN5c3RlbS4iCisgICAgREVGVkFMIHsgIiIgfQorICAgIDo6PSB7IHNubXBUbHN0bUFkZHJFbnRyeSAyIH0KKworc25tcFRsc3RtQWRkclN0b3JhZ2VUeXBlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIFN0b3JhZ2VUeXBlCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHN0b3JhZ2UgdHlwZSBmb3IgdGhpcyBjb25jZXB0dWFsIHJvdy4gIENvbmNlcHR1YWwgcm93cworICAgICAgICBoYXZpbmcgdGhlIHZhbHVlICdwZXJtYW5lbnQnIG5lZWQgbm90IGFsbG93IHdyaXRlLWFjY2VzcyB0bworICAgICAgICBhbnkgY29sdW1uYXIgb2JqZWN0cyBpbiB0aGUgcm93LiIKKyAgICBERUZWQUwgICAgICB7IG5vblZvbGF0aWxlIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1BZGRyRW50cnkgMyB9CisKK3NubXBUbHN0bUFkZHJSb3dTdGF0dXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBSb3dTdGF0dXMKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHN0YXR1cyBvZiB0aGlzIGNvbmNlcHR1YWwgcm93LiAgVGhpcyBvYmplY3QgbWF5IGJlIHVzZWQKKyAgICAgICAgdG8gY3JlYXRlIG9yIHJlbW92ZSByb3dzIGZyb20gdGhpcyB0YWJsZS4KKworICAgICAgICBUbyBjcmVhdGUgYSByb3cgaW4gdGhpcyB0YWJsZSwgYW4gYWRtaW5pc3RyYXRvciBtdXN0IHNldCB0aGlzCisgICAgICAgIG9iamVjdCB0byBlaXRoZXIgY3JlYXRlQW5kR28oNCkgb3IgY3JlYXRlQW5kV2FpdCg1KS4KKworICAgICAgICBVbnRpbCBpbnN0YW5jZXMgb2YgYWxsIGNvcnJlc3BvbmRpbmcgY29sdW1ucyBhcmUKKyAgICAgICAgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkLCB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YgdGhlIHNubXBUbHN0bUFkZHJSb3dTdGF0dXMKKyAgICAgICAgY29sdW1uIGlzIG5vdFJlYWR5KDMpLgorCisgICAgICAgIEluIHBhcnRpY3VsYXIsIGEgbmV3bHkgY3JlYXRlZCByb3cgY2Fubm90IGJlIG1hZGUgYWN0aXZlIHVudGlsCisgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCBjb2x1bW4gaGFzIGJlZW4KKyAgICAgICAgc2V0LgorCisgICAgICAgIFJvd3MgTVVTVCBOT1QgYmUgYWN0aXZlIGlmIHRoZSBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQKKyAgICAgICAgY29sdW1uIGlzIGJsYW5rIGFuZCB0aGUgc25tcFRsc3RtQWRkclNlcnZlcklkZW50aXR5IGlzIHNldCB0bworICAgICAgICAnKicgc2luY2UgdGhpcyB3b3VsZCBpbnNlY3VyZWx5IGFjY2VwdCBhbnkgcHJlc2VudGVkCisgICAgICAgIGNlcnRpZmljYXRlLgorCisgICAgICAgIFRoZSBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQgb2JqZWN0IG1heSBub3QgYmUgbW9kaWZpZWQKKyAgICAgICAgd2hpbGUgdGhlIHZhbHVlIG9mIHRoaXMgb2JqZWN0IGlzIGFjdGl2ZSgxKS4KKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNldCB0aGVzZSBvYmplY3RzIHdoaWxlIHRoZSB2YWx1ZSBvZgorICAgICAgICBzbm1wVGxzdG1BZGRyUm93U3RhdHVzIGlzIGFjdGl2ZSgxKSB3aWxsIHJlc3VsdCBpbgorICAgICAgICBhbiBpbmNvbnNpc3RlbnRWYWx1ZSBlcnJvci4iCisgICAgOjo9IHsgc25tcFRsc3RtQWRkckVudHJ5IDQgfQorCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tICBzbm1wVGxzdG1Ob3RpZmljYXRpb25zIC0gTm90aWZpY2F0aW9ucyBJbmZvcm1hdGlvbgorLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3NubXBUbHN0bVNlcnZlckNlcnRpZmljYXRlVW5rbm93biBOT1RJRklDQVRJT04tVFlQRQorICAgIE9CSkVDVFMgeyBzbm1wVGxzdG1TZXNzaW9uVW5rbm93blNlcnZlckNlcnRpZmljYXRlIH0KKyAgICBTVEFUVVMgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiTm90aWZpY2F0aW9uIHRoYXQgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBwcmVzZW50ZWQgYnkgYW4gU05NUAorICAgICAgICAgb3ZlciAoRClUTFMgc2VydmVyIHdhcyBpbnZhbGlkIGJlY2F1c2Ugbm8gY29uZmlndXJlZAorICAgICAgICAgZmluZ2VycHJpbnQgb3IgQ0Egd2FzIGFjY2VwdGFibGUgdG8gdmFsaWRhdGUgaXQuICBUaGlzIG1heSBiZQorICAgICAgICAgYmVjYXVzZSB0aGVyZSB3YXMgbm8gZW50cnkgaW4gdGhlIHNubXBUbHN0bUFkZHJUYWJsZSBvcgorICAgICAgICAgYmVjYXVzZSBubyBwYXRoIGNvdWxkIGJlIGZvdW5kIHRvIGtub3duIENlcnRpZmljYXRpb24KKyAgICAgICAgIEF1dGhvcml0eS4KKworICAgICAgICAgVG8gYXZvaWQgbm90aWZpY2F0aW9uIGxvb3BzLCB0aGlzIG5vdGlmaWNhdGlvbiBNVVNUIE5PVCBiZQorICAgICAgICAgc2VudCB0byBzZXJ2ZXJzIHRoYXQgdGhlbXNlbHZlcyBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgICAgICAgIG5vdGlmaWNhdGlvbi4iCisgICAgOjo9IHsgc25tcFRsc3RtTm90aWZpY2F0aW9ucyAxIH0KKworc25tcFRsc3RtU2VydmVySW52YWxpZENlcnRpZmljYXRlIE5PVElGSUNBVElPTi1UWVBFCisgICAgT0JKRUNUUyB7IHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvbkludmFsaWRTZXJ2ZXJDZXJ0aWZpY2F0ZXN9CisgICAgU1RBVFVTICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIk5vdGlmaWNhdGlvbiB0aGF0IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgcHJlc2VudGVkIGJ5IGFuIFNOTVAKKyAgICAgICAgIG92ZXIgKEQpVExTIHNlcnZlciBjb3VsZCBub3QgYmUgdmFsaWRhdGVkIGV2ZW4gaWYgdGhlCisgICAgICAgICBmaW5nZXJwcmludCBvciBleHBlY3RlZCB2YWxpZGF0aW9uIHBhdGggd2FzIGtub3duLiAgVGhhdCBpcywgYQorICAgICAgICAgY3J5cHRvZ3JhcGhpYyB2YWxpZGF0aW9uIGVycm9yIG9jY3VycmVkIGR1cmluZyBjZXJ0aWZpY2F0ZQorICAgICAgICAgdmFsaWRhdGlvbiBwcm9jZXNzaW5nLgorCisgICAgICAgICBUbyBhdm9pZCBub3RpZmljYXRpb24gbG9vcHMsIHRoaXMgbm90aWZpY2F0aW9uIE1VU1QgTk9UIGJlCisgICAgICAgICBzZW50IHRvIHNlcnZlcnMgdGhhdCB0aGVtc2VsdmVzIGhhdmUgdHJpZ2dlcmVkIHRoZQorICAgICAgICAgbm90aWZpY2F0aW9uLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1Ob3RpZmljYXRpb25zIDIgfQorCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tIHNubXBUbHN0bUNvbXBsaWFuY2VzIC0gQ29uZm9ybWFuY2UgSW5mb3JtYXRpb24KKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitzbm1wVGxzdG1Db21wbGlhbmNlcyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1Db25mb3JtYW5jZSAxIH0KKworc25tcFRsc3RtR3JvdXBzIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bUNvbmZvcm1hbmNlIDIgfQorCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tIENvbXBsaWFuY2Ugc3RhdGVtZW50cworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3NubXBUbHN0bUNvbXBsaWFuY2UgTU9EVUxFLUNPTVBMSUFOQ0UKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBjb21wbGlhbmNlIHN0YXRlbWVudCBmb3IgU05NUCBlbmdpbmVzIHRoYXQgc3VwcG9ydCB0aGUKKyAgICAgICAgU05NUC1UTFMtVE0tTUlCIgorICAgIE1PRFVMRQorICAgICAgICBNQU5EQVRPUlktR1JPVVBTIHsgc25tcFRsc3RtU3RhdHNHcm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUbHN0bUluY29taW5nR3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGxzdG1PdXRnb2luZ0dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRsc3RtTm90aWZpY2F0aW9uR3JvdXAgfQorICAgIDo6PSB7IHNubXBUbHN0bUNvbXBsaWFuY2VzIDEgfQorCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tIFVuaXRzIG9mIGNvbmZvcm1hbmNlCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3NubXBUbHN0bVN0YXRzR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIHNubXBUbHN0bVNlc3Npb25PcGVucywKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvbkNsaWVudENsb3NlcywKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvbk9wZW5FcnJvcnMsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25BY2NlcHRzLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uU2VydmVyQ2xvc2VzLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uTm9TZXNzaW9ucywKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvbkludmFsaWRDbGllbnRDZXJ0aWZpY2F0ZXMsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25Vbmtub3duU2VydmVyQ2VydGlmaWNhdGUsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZENhY2hlcworICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY29sbGVjdGlvbiBvZiBvYmplY3RzIGZvciBtYWludGFpbmluZworICAgICAgICBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBvZiBhbiBTTk1QIGVuZ2luZSB0aGF0CisgICAgICAgIGltcGxlbWVudHMgdGhlIFNOTVAgVExTIFRyYW5zcG9ydCBNb2RlbC4iCisgICAgOjo9IHsgc25tcFRsc3RtR3JvdXBzIDEgfQorCitzbm1wVGxzdG1JbmNvbWluZ0dyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05Db3VudCwKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOVGFibGVMYXN0Q2hhbmdlZCwKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQsCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUsCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTkRhdGEsCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTlN0b3JhZ2VUeXBlLAorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05Sb3dTdGF0dXMKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBmb3IgbWFpbnRhaW5pbmcKKyAgICAgICAgaW5jb21pbmcgY29ubmVjdGlvbiBjZXJ0aWZpY2F0ZSBtYXBwaW5ncyB0bworICAgICAgICB0bVNlY3VyaXR5TmFtZXMgb2YgYW4gU05NUCBlbmdpbmUgdGhhdCBpbXBsZW1lbnRzIHRoZQorICAgICAgICBTTk1QIFRMUyBUcmFuc3BvcnQgTW9kZWwuIgorICAgIDo6PSB7IHNubXBUbHN0bUdyb3VwcyAyIH0KKworc25tcFRsc3RtT3V0Z29pbmdHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zQ291bnQsCisgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlTGFzdENoYW5nZWQsCisgICAgICAgIHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LAorICAgICAgICBzbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSwKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzLAorICAgICAgICBzbm1wVGxzdG1BZGRyQ291bnQsCisgICAgICAgIHNubXBUbHN0bUFkZHJUYWJsZUxhc3RDaGFuZ2VkLAorICAgICAgICBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsCisgICAgICAgIHNubXBUbHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwKKyAgICAgICAgc25tcFRsc3RtQWRkclN0b3JhZ2VUeXBlLAorICAgICAgICBzbm1wVGxzdG1BZGRyUm93U3RhdHVzCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgZm9yIG1haW50YWluaW5nCisgICAgICAgIG91dGdvaW5nIGNvbm5lY3Rpb24gY2VydGlmaWNhdGVzIHRvIHVzZSB3aGVuIG9wZW5pbmcKKyAgICAgICAgY29ubmVjdGlvbnMgYXMgYSByZXN1bHQgb2YgU05NUC1UQVJHRVQtTUlCIHNldHRpbmdzLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1Hcm91cHMgMyB9CisKK3NubXBUbHN0bU5vdGlmaWNhdGlvbkdyb3VwIE5PVElGSUNBVElPTi1HUk9VUAorICAgIE5PVElGSUNBVElPTlMgeworICAgICAgICBzbm1wVGxzdG1TZXJ2ZXJDZXJ0aWZpY2F0ZVVua25vd24sCisgICAgICAgIHNubXBUbHN0bVNlcnZlckludmFsaWRDZXJ0aWZpY2F0ZQorICAgIH0KKyAgICBTVEFUVVMgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJOb3RpZmljYXRpb25zIgorICAgIDo6PSB7IHNubXBUbHN0bUdyb3VwcyA0IH0KKworRU5ECmRpZmYgLS1naXQgYS9taWJzL1NOTVAtVFNNLU1JQi50eHQgYi9taWJzL1NOTVAtVFNNLU1JQi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjZjA5YgotLS0gL2Rldi9udWxsCisrKyBiL21pYnMvU05NUC1UU00tTUlCLnR4dApAQCAtMCwwICsxLDIzNCBAQAorU05NUC1UU00tTUlCIERFRklOSVRJT05TIDo6PSBCRUdJTgorCitJTVBPUlRTCisgICAgTU9EVUxFLUlERU5USVRZLCBPQkpFQ1QtVFlQRSwKKyAgICBtaWItMiwgQ291bnRlcjMyCisgICAgICBGUk9NIFNOTVB2Mi1TTUkgLS0gUkZDMjU3OAorICAgIE1PRFVMRS1DT01QTElBTkNFLCBPQkpFQ1QtR1JPVVAKKyAgICAgIEZST00gU05NUHYyLUNPTkYgLS0gUkZDMjU4MAorICAgIFRydXRoVmFsdWUKKyAgICAgICBGUk9NIFNOTVB2Mi1UQyAtLSBSRkMyNTc5CisgICAgOworCitzbm1wVHNtTUlCIE1PRFVMRS1JREVOVElUWQorICAgIExBU1QtVVBEQVRFRCAiMjAwOTA2MDkwMDAwWiIKKyAgICBPUkdBTklaQVRJT04gIklTTVMgV29ya2luZyBHcm91cCIKKyAgICBDT05UQUNULUlORk8gIldHLUVNYWlsOiAgIGlzbXNAbGlzdHMuaWV0Zi5vcmcKKyAgICAgICAgICAgICAgICAgIFN1YnNjcmliZTogIGlzbXMtcmVxdWVzdEBsaXN0cy5pZXRmLm9yZworCisgICAgICAgICAgICAgICAgICBDaGFpcnM6CisgICAgICAgICAgICAgICAgICAgIEp1ZXJnZW4gUXVpdHRlaworICAgICAgICAgICAgICAgICAgICBORUMgRXVyb3BlIEx0ZC4KKyAgICAgICAgICAgICAgICAgICAgTmV0d29yayBMYWJvcmF0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgS3VyZnVlcnN0ZW4tQW5sYWdlIDM2CisgICAgICAgICAgICAgICAgICAgIDY5MTE1IEhlaWRlbGJlcmcKKyAgICAgICAgICAgICAgICAgICAgR2VybWFueQorICAgICAgICAgICAgICAgICAgICArNDkgNjIyMSA5MDUxMS0xNQorICAgICAgICAgICAgICAgICAgICBxdWl0dGVrQG5ldGxhYi5uZWMuZGUKKworICAgICAgICAgICAgICAgICAgICBKdWVyZ2VuIFNjaG9lbndhZWxkZXIKKyAgICAgICAgICAgICAgICAgICAgSmFjb2JzIFVuaXZlcnNpdHkgQnJlbWVuCisgICAgICAgICAgICAgICAgICAgIENhbXB1cyBSaW5nIDEKKyAgICAgICAgICAgICAgICAgICAgMjg3MjUgQnJlbWVuCisgICAgICAgICAgICAgICAgICAgIEdlcm1hbnkKKyAgICAgICAgICAgICAgICAgICAgKzQ5IDQyMSAyMDAtMzU4NworICAgICAgICAgICAgICAgICAgICBqLnNjaG9lbndhZWxkZXJAamFjb2JzLXVuaXZlcnNpdHkuZGUKKworICAgICAgICAgICAgICAgICAgRWRpdG9yOgorICAgICAgICAgICAgICAgICAgICBEYXZpZCBIYXJyaW5ndG9uCisgICAgICAgICAgICAgICAgICAgIEh1YXdlaSBUZWNobm9sb2dpZXMgVVNBCisgICAgICAgICAgICAgICAgICAgIDE3MDAgQWxtYSBEci4KKyAgICAgICAgICAgICAgICAgICAgUGxhbm8gVFggNzUwNzUKKyAgICAgICAgICAgICAgICAgICAgVVNBCisgICAgICAgICAgICAgICAgICAgICsxIDYwMy00MzYtODYzNAorICAgICAgICAgICAgICAgICAgICBpZXRmZGJoQGNvbWNhc3QubmV0CisKKyAgICAgICAgICAgICAgICAgICAgV2VzIEhhcmRha2VyCisgICAgICAgICAgICAgICAgICAgIENvYmhhbSBBbmFseXRpYyBTb2x1dGlvbnMKKyAgICAgICAgICAgICAgICAgICAgUC5PLiBCb3ggMzgyCisgICAgICAgICAgICAgICAgICAgIERhdmlzLCBDQSAgOTU2MTcKKyAgICAgICAgICAgICAgICAgICAgVVNBCisgICAgICAgICAgICAgICAgICAgICsxIDUzMCA3OTIgMTkxMworICAgICAgICAgICAgICAgICAgICBpZXRmQGhhcmRha2Vycy5uZXQKKyAgICAgICAgICAgICAgICAgIgorICAgIERFU0NSSVBUSU9OCisgICAgICAgIlRoZSBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwgTUlCLgorCisgICAgICAgIEluIGtlZXBpbmcgd2l0aCB0aGUgUkZDIDM0MTEgZGVzaWduIGRlY2lzaW9ucyB0byB1c2UKKyAgICAgICAgc2VsZi1jb250YWluZWQgZG9jdW1lbnRzLCB0aGUgUkZDIHRoYXQgY29udGFpbnMgdGhlIGRlZmluaXRpb24KKyAgICAgICAgb2YgdGhpcyBNSUIgbW9kdWxlIGFsc28gaW5jbHVkZXMgdGhlIGVsZW1lbnRzIG9mIHByb2NlZHVyZQorICAgICAgICB0aGF0IGFyZSBuZWVkZWQgZm9yIHByb2Nlc3NpbmcgdGhlIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbAorICAgICAgICBmb3IgU05NUC4gIFRoZXNlIE1JQiBvYmplY3RzIFNIT1VMRCBOT1QgYmUgbW9kaWZpZWQgdmlhIG90aGVyCisgICAgICAgIHN1YnN5c3RlbXMgb3IgbW9kZWxzIGRlZmluZWQgaW4gb3RoZXIgZG9jdW1lbnRzLiAgVGhpcyBhbGxvd3MKKyAgICAgICAgdGhlIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbCBmb3IgU05NUCB0byBiZSBkZXNpZ25lZCBhbmQKKyAgICAgICAgZG9jdW1lbnRlZCBhcyBpbmRlcGVuZGVudCBhbmQgc2VsZi1jb250YWluZWQsIGhhdmluZyBubyBkaXJlY3QKKyAgICAgICAgaW1wYWN0IG9uIG90aGVyIG1vZHVsZXMsIGFuZCB0aGlzIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZQorICAgICAgICB1cGdyYWRlZCBhbmQgc3VwcGxlbWVudGVkIGFzIHRoZSBuZWVkIGFyaXNlcywgYW5kIHRvIG1vdmUKKyAgICAgICAgYWxvbmcgdGhlIHN0YW5kYXJkcyB0cmFjayBvbiBkaWZmZXJlbnQgdGltZS1saW5lcyBmcm9tIG90aGVyCisgICAgICAgIG1vZHVsZXMuCisKKyAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA5IElFVEYgVHJ1c3QgYW5kIHRoZSBwZXJzb25zCisgICAgICAgIGlkZW50aWZpZWQgYXMgYXV0aG9ycyBvZiB0aGUgY29kZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICAgICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZQorICAgICAgICBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAgICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVybmV0IFNvY2lldHksIElFVEYgb3IgSUVURiBUcnVzdCwKKyAgICAgICAgICBub3IgdGhlIG5hbWVzIG9mIHNwZWNpZmljIGNvbnRyaWJ1dG9ycywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorICAgICAgICAgIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICAgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAgICAgICAgQ09OVFJJQlVUT1JTICdBUyBJUycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAgICAgICAgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAgICAgICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgICAgICAgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAgICAgICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICAgICAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICAgICAgICBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgICAgICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgICAgICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICAgICAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICAgICAgICBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICAgICAgICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisgICAgICAgIFRoaXMgdmVyc2lvbiBvZiB0aGlzIE1JQiBtb2R1bGUgaXMgcGFydCBvZiBSRkMgNTU5MTsKKyAgICAgICAgc2VlIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsIG5vdGljZXMuIgorCisgICAgUkVWSVNJT04gICAgIjIwMDkwNjA5MDAwMFoiCisgICAgREVTQ1JJUFRJT04gIlRoZSBpbml0aWFsIHZlcnNpb24sIHB1Ymxpc2hlZCBpbiBSRkMgNTU5MS4iCisgICAgOjo9IHsgbWliLTIgMTkwIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gc3VidHJlZXMgaW4gdGhlIFNOTVAtVFNNLU1JQgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitzbm1wVHNtTm90aWZpY2F0aW9ucyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVHNtTUlCIDAgfQorc25tcFRzbU1JQk9iamVjdHMgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRzbU1JQiAxIH0KK3NubXBUc21Db25mb3JtYW5jZSAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUc21NSUIgMiB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIE9iamVjdHMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gU3RhdGlzdGljcyBmb3IgdGhlIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbAorCitzbm1wVHNtU3RhdHMgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVHNtTUlCT2JqZWN0cyAxIH0KKworc25tcFRzbUludmFsaWRDYWNoZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gIlRoZSBudW1iZXIgb2YgaW5jb21pbmcgbWVzc2FnZXMgZHJvcHBlZCBiZWNhdXNlIHRoZQorCisgICAgICAgICAgICAgICAgIHRtU3RhdGVSZWZlcmVuY2UgcmVmZXJyZWQgdG8gYW4gaW52YWxpZCBjYWNoZS4KKyAgICAgICAgICAgICAgICAiCisgICAgOjo9IHsgc25tcFRzbVN0YXRzIDEgfQorCitzbm1wVHNtSW5hZGVxdWF0ZVNlY3VyaXR5TGV2ZWxzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICJUaGUgbnVtYmVyIG9mIGluY29taW5nIG1lc3NhZ2VzIGRyb3BwZWQgYmVjYXVzZQorICAgICAgICAgICAgICAgICB0aGUgc2VjdXJpdHlMZXZlbCBhc3NlcnRlZCBieSB0aGUgVHJhbnNwb3J0IE1vZGVsIHdhcworICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIHNlY3VyaXR5TGV2ZWwgcmVxdWVzdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAiCisgICAgOjo9IHsgc25tcFRzbVN0YXRzIDIgfQorCitzbm1wVHNtVW5rbm93blByZWZpeGVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICJUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGRyb3BwZWQgYmVjYXVzZQorICAgICAgICAgICAgICAgICBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCB3YXMgc2V0IHRvIHRydWUgYW5kCisgICAgICAgICAgICAgICAgIHRoZXJlIGlzIG5vIGtub3duIHByZWZpeCBmb3IgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICAgZG9tYWluLgorICAgICAgICAgICAgICAgICIKKyAgICA6Oj0geyBzbm1wVHNtU3RhdHMgMyB9CisKK3NubXBUc21JbnZhbGlkUHJlZml4ZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gIlRoZSBudW1iZXIgb2YgbWVzc2FnZXMgZHJvcHBlZCBiZWNhdXNlCisgICAgICAgICAgICAgICAgIHRoZSBzZWN1cml0eU5hbWUgYXNzb2NpYXRlZCB3aXRoIGFuIG91dGdvaW5nIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgZGlkIG5vdCBjb250YWluIGEgdmFsaWQgdHJhbnNwb3J0IGRvbWFpbiBwcmVmaXguCisgICAgICAgICAgICAgICAgIgorICAgIDo6PSB7IHNubXBUc21TdGF0cyA0IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29uZmlndXJhdGlvbgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBDb25maWd1cmF0aW9uIGZvciB0aGUgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsCisKK3NubXBUc21Db25maWd1cmF0aW9uICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRzbU1JQk9iamVjdHMgMiB9CisKK3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVHJ1dGhWYWx1ZQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gIklmIHRoaXMgb2JqZWN0IGlzIHNldCB0byB0cnVlLCB0aGVuIHNlY3VyaXR5TmFtZXMKKyAgICAgICAgICAgICAgICAgcGFzc2luZyB0byBhbmQgZnJvbSB0aGUgYXBwbGljYXRpb24gYXJlIGV4cGVjdGVkIHRvCisgICAgICAgICAgICAgICAgIGNvbnRhaW4gYSB0cmFuc3BvcnQtZG9tYWluLXNwZWNpZmljIHByZWZpeC4gIElmIHRoaXMKKyAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIHNldCB0byB0cnVlLCB0aGVuIGEgZG9tYWluLXNwZWNpZmljIHByZWZpeAorICAgICAgICAgICAgICAgICB3aWxsIGJlIGFkZGVkIGJ5IHRoZSBUU00gdG8gdGhlIHNlY3VyaXR5TmFtZSBmb3IKKyAgICAgICAgICAgICAgICAgaW5jb21pbmcgbWVzc2FnZXMgYW5kIHJlbW92ZWQgZnJvbSB0aGUgc2VjdXJpdHlOYW1lCisgICAgICAgICAgICAgICAgIHdoZW4gcHJvY2Vzc2luZyBvdXRnb2luZyBtZXNzYWdlcy4gIFRyYW5zcG9ydCBkb21haW5zCisgICAgICAgICAgICAgICAgIGFuZCBwcmVmaXhlcyBhcmUgbWFpbnRhaW5lZCBpbiBhIHJlZ2lzdHJ5IGJ5IElBTkEuCisgICAgICAgICAgICAgICAgIFRoaXMgb2JqZWN0IFNIT1VMRCBwZXJzaXN0IGFjcm9zcyBzeXN0ZW0gcmVib290cy4KKyAgICAgICAgICAgICAgICAiCisgICAgREVGVkFMIHsgZmFsc2UgfQorICAgIDo6PSB7IHNubXBUc21Db25maWd1cmF0aW9uIDEgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzbm1wVHNtTUlCIC0gQ29uZm9ybWFuY2UgSW5mb3JtYXRpb24KKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc25tcFRzbUNvbXBsaWFuY2VzIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUc21Db25mb3JtYW5jZSAxIH0KKworc25tcFRzbUdyb3VwcyAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUc21Db25mb3JtYW5jZSAyIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29tcGxpYW5jZSBzdGF0ZW1lbnRzCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NubXBUc21Db21wbGlhbmNlIE1PRFVMRS1DT01QTElBTkNFCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICJUaGUgY29tcGxpYW5jZSBzdGF0ZW1lbnQgZm9yIFNOTVAgZW5naW5lcyB0aGF0IHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgdGhlIFNOTVAtVFNNLU1JQi4KKyAgICAgICAgICAgICAgICAiCisgICAgTU9EVUxFCisgICAgICAgIE1BTkRBVE9SWS1HUk9VUFMgeyBzbm1wVHNtR3JvdXAgfQorICAgIDo6PSB7IHNubXBUc21Db21wbGlhbmNlcyAxIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVW5pdHMgb2YgY29uZm9ybWFuY2UKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NubXBUc21Hcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgc25tcFRzbUludmFsaWRDYWNoZXMsCisgICAgICAgIHNubXBUc21JbmFkZXF1YXRlU2VjdXJpdHlMZXZlbHMsCisgICAgICAgIHNubXBUc21Vbmtub3duUHJlZml4ZXMsCisgICAgICAgIHNubXBUc21JbnZhbGlkUHJlZml4ZXMsCisgICAgICAgIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4CisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAiQSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgZm9yIG1haW50YWluaW5nCisgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9mIGFuIFNOTVAgZW5naW5lIHRoYXQgaW1wbGVtZW50cworCisgICAgICAgICAgICAgICAgIHRoZSBTTk1QIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbC4KKyAgICAgICAgICAgICAgICAiCisgICAgOjo9IHsgc25tcFRzbUdyb3VwcyAyIH0KKworRU5ECmRpZmYgLS1naXQgYS9taWJzL1NOTVAtVVNNLUFFUy1NSUIudHh0IGIvbWlicy9TTk1QLVVTTS1BRVMtTUlCLnR4dAppbmRleCBlOWU5ZmI4Li40YzE3MzAyIDEwMDY0NAotLS0gYS9taWJzL1NOTVAtVVNNLUFFUy1NSUIudHh0CisrKyBiL21pYnMvU05NUC1VU00tQUVTLU1JQi50eHQKQEAgLTM5LDkgKzM5LDkgQEAKICAgICAgICAgICAgIHNlZSB0aGUgUkZDIGl0c2VsZiBmb3IgZnVsbCBsZWdhbCBub3RpY2VzLgogICAgICAgICAgICAgU3VwcGxlbWVudGFyeSBpbmZvcm1hdGlvbiBtYXkgYmUgYXZhaWxhYmxlIG9uCiAgICAgICAgICAgICBodHRwOi8vd3d3LmlldGYub3JnL2NvcHlyaWdodHMvaWFuYW1pYi5odG1sLiIKKwogICAgIFJFVklTSU9OICAgICAiMjAwNDA2MTQwMDAwWiIKICAgICBERVNDUklQVElPTiAgIkluaXRpYWwgdmVyc2lvbiwgcHVibGlzaGVkIGFzIFJGQzM4MjYiCi0KICAgICA6Oj0geyBzbm1wTW9kdWxlcyAyMCB9CiAKIHVzbUFlc0NmYjEyOFByb3RvY29sIE9CSkVDVC1JREVOVElUWQpkaWZmIC0tZ2l0IGEvbWlicy9TTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQgYi9taWJzL1NOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dAppbmRleCBlZTIwNzZhLi43Mzc3NDI1IDEwMDY0NAotLS0gYS9taWJzL1NOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dAorKysgYi9taWJzL1NOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dApAQCAtMjMsNyArMjMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWR3b29kIENpdHksIENBIDk0MDYzCiAgICAgICAgICAgICAgICAgICBFbWFpbDogIHN0am9obnNAY29ycC5ob21lLm5ldAogICAgICAgICAgICAgICAgICAgUGhvbmU6ICArMS02NTAtNTU2LTUzNjgiCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAiVGhlIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gZGVmaW5pdGlvbnMgZm9yIHByb3ZpZGluZyBmb3J3YXJkCiAgICAgc2VjcmVjeSBmb3Iga2V5IGNoYW5nZXMgZm9yIHRoZSB1c21Vc2VyVGFibGUsIGFuZCBmb3IgcHJvdmlkaW5nIGEKQEAgLTMzLDggKzMyLDYgQEAKICAgICBSRVZJU0lPTiAgICAgIjIwMDAwMzA2MDAwMFoiCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAiSW5pdGlhbCB2ZXJzaW9uIHB1Ymxpc2hlZCBhcyBSRkMgMjc4Ni4iCi0KLQogICAgIDo6PSB7IGV4cGVyaW1lbnRhbCAxMDEgfSAgLS0gSUFOQSBESEtFWS1DSEFOR0UgMTAxCiAKIC0tIEFkbWluaXN0cmF0aXZlIGFzc2lnbm1lbnRzCkBAIC0xMTEsNyArMTA4LDYgQEAKICAgICAgICAgICAgYmFzZSAgICBJTlRFR0VSLCAgIC0tIGcKICAgICAgICAgICAgcHJpdmF0ZVZhbHVlTGVuZ3RoICBJTlRFR0VSIE9QVElPTkFMIH0KIAotCiAgICAgSW1wbGVtZW50b3JzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSBlaXRoZXIgdGhlIHZhbHVlcyBmcm9tCiAgICAgT2FrbGV5IEdyb3VwIDEgIG9yIHRoZSB2YWx1ZXMgb2YgZnJvbSBPYWtsZXkgR3JvdXAgMiBhcyBzcGVjaWZpZWQKICAgICBpbiBSRkMtMjQwOSwgVGhlIEludGVybmV0IEtleSBFeGNoYW5nZSwgU2VjdGlvbiA2LjEsIDYuMiBhcyB0aGUKQEAgLTIzNyw2ICsyMzMsNyBAQAogICAgIGFuIGltcGxlbWVudG9yIHdpbGwgc3BlY2lmeSBvbmUgb3IgbW9yZSBzdGFuZGFyZCBzZWN1cml0eSBuYW1lcwogICAgIGFuZCB3aWxsIHByb3ZpZGUgZW50cmllcyBpbiB0aGUgVkFDTSB0YWJsZXMgZ3JhbnRpbmcgdmFyaW91cwogICAgIGxldmVscyBvZiBhY2Nlc3MgdG8gdGhvc2UgbmFtZXMuICBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIFZBQ00KKwogICAgIHRhYmxlIGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBNSUIuCiAKICAgICBOb3RlOiBUaGlzIHRhYmxlIGlzIGV4cGVjdGVkIHRvIGJlIHJlYWRhYmxlIHdpdGhvdXQgYXV0aGVudGljYXRpb24KQEAgLTI0OSw3ICsyNDYsNiBAQAogICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KICAgICAgICAgIkFuIGVudHJ5IGluIHRoZSB1c21ESEtpY2tzdGFydFRhYmxlLiAgVGhlIGFnZW50IFNIT1VMRCBlaXRoZXIKICAgICBkZWxldGUgdGhpcyBlbnRyeSBvciBtYXJrIGl0IGFzIGluYWN0aXZlIHVwb24gYSBzdWNjZXNzZnVsIFNFVCBvZgogICAgIGFueSBvZiB0aGUgS2V5Q2hhbmdlLXR5cGVkIG9iamVjdHMgaW4gdGhlIHVzbVVzZXJFbnRyeSBvciB1cG9uIGEKQEAgLTI2MCw3ICsyNTYsNiBAQAogICAgIG9uZSBvciBtb3JlIG9mIHRoZSBrZXlzIGZvciBhIHJvdyBpbiB1c21Vc2VyVGFibGUgd2l0aCBhCiAgICAgcGFydGljdWxhciBzZWN1cml0eSBuYW1lLCB0aGUgcm93IGluIHRoaXMgdGFibGUgd2l0aCB0aGF0IHNhbWUKICAgICBzZWN1cml0eSBuYW1lIGlzIG5vIGxvbmdlciB1c2VmdWwgb3IgbWVhbmluZ2Z1bC4iCi0KICAgICBJTkRFWCAgIHsgdXNtREhLaWNrc3RhcnRJbmRleCB9CiAgICAgOjo9IHt1c21ESEtpY2tzdGFydFRhYmxlIDEgfQogCkBAIC0yODUsNiArMjgwLDcgQEAKICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgIlRoZSBhZ2VudCdzIERpZmZpZS1IZWxsbWFuIHB1YmxpYyB2YWx1ZSBmb3IgdGhpcyByb3cuICBBdAorCiAgICAgaW5pdGlhbGl6YXRpb24sIHRoZSBhZ2VudCBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIGFuZCBkZXJpdmVzCiAgICAgaXRzIHB1YmxpYyB2YWx1ZSBmcm9tIHRoYXQgbnVtYmVyLiAgVGhpcyBwdWJsaWMgdmFsdWUgaXMgcHVibGlzaGVkCiAgICAgaGVyZS4gIFRoaXMgcHVibGljIHZhbHVlICd5JyBlcXVhbHMgZ15yIE1PRCBwIHdoZXJlIGcgaXMgdGhlIGZyb20KQEAgLTMwMyw3ICsyOTksNiBAQAogICAgICAgICB3aGVyZSBQVjEsLi4uLFBWayBhcmUgdGhlIG9jdGV0cyBvZiBQViBmcm9tIGZpcnN0IHRvIGxhc3QsIGFuZAogICAgICAgICB3aGVyZSBQVjEgIT0gMC4KIAotCiAgICAgVGhlIGZvbGxvd2luZyBESCBwYXJhbWV0ZXJzIChPYWtsZXkgZ3JvdXAgIzIsIFJGQyAyNDA5LCBzZWMgNi4xLAogICAgIDYuMikgYXJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0OgogCkBAIC0zMjgsMTAgKzMyMywxMCBAQAogICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCiAgICAgICAgICJUaGUgbWFuYWdlcidzIERpZmZpZS1IZWxsbWFuIHB1YmxpYyB2YWx1ZSBmb3IgdGhpcyByb3cuICBOb3RlCiAgICAgdGhhdCB0aGlzIHZhbHVlIGlzIG5vdCBzZXQgdmlhIHRoZSBTTk1QIGFnZW50LCBidXQgbWF5IGJlIHNldCB2aWEKICAgICBzb21lIG91dCBvZiBiYW5kIG1ldGhvZCwgc3VjaCBhcyB0aGUgZGV2aWNlJ3MgY29uZmlndXJhdGlvbiBmaWxlLgorCiAgICAgVGhlIG1hbmFnZXIgY2FsY3VsYXRlcyB0aGlzIHZhbHVlIGluIHRoZSBzYW1lIG1hbm5lciBhbmQgdXNpbmcgdGhlCiAgICAgc2FtZSBwYXJhbWV0ZXIgc2V0IGFzIHRoZSBhZ2VudCBkb2VzLiAgRS5nLiBpdCBzZWxlY3RzIGEgcmFuZG9tCiAgICAgbnVtYmVyICdyJywgY2FsY3VsYXRlcyB5ID0gZ15yIG1vZCBwIGFuZCBwcm92aWRlcyAneScgYXMgdGhlCkBAIC00MjgsNiArNDIzLDcgQEAKICAgICAgICAgaW1wbGVtZW50cyB0aGUgdXNtVXNlclRhYmxlIGFuZCB3aGljaCB3aXNoZXMgdGhlIGFiaWxpdHkgdG8KICAgICAgICAgcG9wdWxhdGUgdGhlIFVTTSB0YWJsZSBiYXNlZCBvbiBvdXQtb2YtYmFuZCBwcm92aWRlZCBESAogICAgICAgICBpZ25pdGlvbiB2YWx1ZXMuCisKICAgICAgICAgICAgICBBbnkgYWdlbnQgaW1wbGVtZW50aW5nIHRoaXMgZ3JvdXAgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZQogICAgICAgICBwcmVpbnN0YWxsZWQgZW50cmllcyBpbiB0aGUgdmFjbSB0YWJsZXMgYXMgZm9sbG93czoKIApAQCAtNDc2LDYgKzQ3Miw3IEBACiAgICAgICAgIHZhY21WaWV3VHJlZUZhbWlseVZpZXdOYW1lICAgICAgJ2RoS2lja1Jlc3RyaWN0ZWQnCiAgICAgICAgIHZhY21WaWV3VHJlZUZhbWlseVN1YnRyZWUgICAgICAgMS4zLjYuMS4yLjEuMSAgKHN5c3RlbSkKICAgICAgICAgdmFjbVZpZXdUcmVlRmFtaWx5TWFzayAgICAgICAgICAnJworCiAgICAgICAgIHZhY21WaWV3VHJlZUZhbWlseVR5cGUgICAgICAgICAgMQogICAgICAgICB2YWNtVmlld1RyZWVGYW1pbHlTdG9yYWdlVHlwZSAgIHBlcm1hbmVudAogICAgICAgICB2YWNtVmlld1RyZWVGYW1pbHlTdGF0dXMgICAgICAgIGFjdGl2ZQpAQCAtNDkzLDcgKzQ5MCw2IEBACiAgICAgICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiSXQgaXMgY29tcGxpYW50IHRvIGltcGxlbWVudCB0aGlzIG9iamVjdCBhcyByZWFkLW9ubHkgZm9yCiAgICAgICAgIGFueSBkZXZpY2UuIgotCiAgICAgOjo9IHsgdXNtREhLZXlNSUJDb21wbGlhbmNlcyAxIH0KIAogLS0gVW5pdHMgb2YgQ29tcGxpYW5jZQpAQCAtNTMzLDUgKzUyOSw0IEBACiAgICAgbm9uLWNvbmZpZGVudGlhbCBhY2Nlc3MuIgogICAgIDo6PSB7IHVzbURIS2V5TUlCR3JvdXBzIDMgfQogCi0KIEVORApkaWZmIC0tZ2l0IGEvbWlicy9UUkFOU1BPUlQtQUREUkVTUy1NSUIudHh0IGIvbWlicy9UUkFOU1BPUlQtQUREUkVTUy1NSUIudHh0CmluZGV4IDdkNDUwZmIuLjIyNzg4NmUgMTAwNjQ0Ci0tLSBhL21pYnMvVFJBTlNQT1JULUFERFJFU1MtTUlCLnR4dAorKysgYi9taWJzL1RSQU5TUE9SVC1BRERSRVNTLU1JQi50eHQKQEAgLTEzLDYgKzEzLDcgQEAKICAgICAgICAgIFRVIEJyYXVuc2Nod2VpZwogICAgICAgICAgQnVlbHRlbndlZyA3NC83NQogICAgICAgICAgMzgxMDYgQnJhdW5zY2h3ZWlnLCBHZXJtYW55CisKICAgICAgICAgIFBob25lOiArNDkgNTMxIDM5MS0zMjg5CiAgICAgICAgICBFTWFpbDogc2Nob2Vud0BpYnIuY3MudHUtYnMuZGUKIApAQCAtMzIsNyArMzMsNiBAQAogICAgICAgICAiSW5pdGlhbCB2ZXJzaW9uLCBwdWJsaXNoZWQgYXMgUkZDIDM0MTkuIgogICAgIDo6PSB7IG1pYi0yIDEwMCB9CiAKLQogdHJhbnNwb3J0RG9tYWlucyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyB0cmFuc3BvcnRBZGRyZXNzTUlCIDEgfQogCiB0cmFuc3BvcnREb21haW5VZHBJcHY0IE9CSkVDVC1JREVOVElUWQpAQCAtMjA1LDYgKzIwNSw3IEBACiAgICAgICAgICB0Y3BJcHY0KDUpICAgICB0cmFuc3BvcnREb21haW5UY3BJcHY0CiAgICAgICAgICB0Y3BJcHY2KDYpICAgICB0cmFuc3BvcnREb21haW5UY3BJcHY2CiAgICAgICAgICB0Y3BJcHY0eig3KSAgICB0cmFuc3BvcnREb21haW5UY3BJcHY0egorCiAgICAgICAgICB0Y3BJcHY2eig4KSAgICB0cmFuc3BvcnREb21haW5UY3BJcHY2egogICAgICAgICAgc2N0cElwdjQoOSkgICAgdHJhbnNwb3J0RG9tYWluU2N0cElwdjQKICAgICAgICAgIHNjdHBJcHY2KDEwKSAgIHRyYW5zcG9ydERvbWFpblNjdHBJcHY2CkBAIC0yNTMsNiArMjU0LDcgQEAKICAgICAgICAgIEEgVHJhbnNwb3J0QWRkcmVzcyB2YWx1ZSBpcyBhbHdheXMgaW50ZXJwcmV0ZWQgd2l0aGluIHRoZQogICAgICAgICAgY29udGV4dCBvZiBhIFRyYW5zcG9ydEFkZHJlc3NUeXBlIG9yIFRyYW5zcG9ydERvbWFpbiB2YWx1ZS4KICAgICAgICAgIEV2ZXJ5IHVzYWdlIG9mIHRoZSBUcmFuc3BvcnRBZGRyZXNzIHRleHR1YWwgY29udmVudGlvbiBNVVNUCisKICAgICAgICAgIHNwZWNpZnkgdGhlIFRyYW5zcG9ydEFkZHJlc3NUeXBlIG9yIFRyYW5zcG9ydERvbWFpbiBvYmplY3QKICAgICAgICAgIHdoaWNoIHByb3ZpZGVzIHRoZSBjb250ZXh0LiBGdXJ0aGVybW9yZSwgTUlCIGF1dGhvcnMgU0hPVUxECiAgICAgICAgICBkZWZpbmUgYSBzZXBhcmF0ZSBUcmFuc3BvcnRBZGRyZXNzVHlwZSBvciBUcmFuc3BvcnREb21haW4KQEAgLTM0OSw2ICszNTEsNyBAQAogCiAgICAgICAgICBUaGlzIHRleHR1YWwgY29udmVudGlvbiBTSE9VTEQgTk9UIGJlIHVzZWQgZGlyZWN0bHkgaW4gb2JqZWN0CiAgICAgICAgICBkZWZpbml0aW9ucyBzaW5jZSBpdCByZXN0cmljdHMgYWRkcmVzc2VzIHRvIGEgc3BlY2lmaWMgZm9ybWF0LgorCiAgICAgICAgICBIb3dldmVyLCBpZiBpdCBpcyB1c2VkLCBpdCBNQVkgYmUgdXNlZCBlaXRoZXIgb24gaXRzIG93biBvcgogICAgICAgICAgaW4gY29uanVuY3Rpb24gd2l0aCBUcmFuc3BvcnRBZGRyZXNzVHlwZSBvciBUcmFuc3BvcnREb21haW4KICAgICAgICAgIGFzIGEgcGFpci4iCkBAIC0zOTcsNiArNDAwLDcgQEAKICAgICAgICAgIHRpbWUgb2YgdGhlIG1hbmFnZW1lbnQgb3BlcmF0aW9uKS4KIAogICAgICAgICAgVGhlIERFU0NSSVBUSU9OIGNsYXVzZSBvZiBUcmFuc3BvcnRBZGRyZXNzIG9iamVjdHMgdGhhdCBtYXkKKwogICAgICAgICAgaGF2ZSBUcmFuc3BvcnRBZGRyZXNzRG5zIHZhbHVlcyBtdXN0IGZ1bGx5IGRlc2NyaWJlIGhvdyAoYW5kCiAgICAgICAgICB3aGVuKSBzdWNoIG5hbWVzIGFyZSB0byBiZSByZXNvbHZlZCB0byBJUCBhZGRyZXNzZXMgYW5kIHZpY2UKICAgICAgICAgIHZlcnNhLgpkaWZmIC0tZ2l0IGEvbWlicy9UVU5ORUwtTUlCLnR4dCBiL21pYnMvVFVOTkVMLU1JQi50eHQKaW5kZXggNjE1ZmFhNi4uNWY5NTk2YiAxMDA2NDQKLS0tIGEvbWlicy9UVU5ORUwtTUlCLnR4dAorKysgYi9taWJzL1RVTk5FTC1NSUIudHh0CkBAIC0zNyw4ICszNyw2IEBACiAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoaXMgTUlCIG1vZHVsZSBpcyBwYXJ0IG9mIFJGQyA0MDg3OyAgc2VlCiAgICAgICAgICAgICB0aGUgUkZDIGl0c2VsZiBmb3IgZnVsbCBsZWdhbCBub3RpY2VzLiIKIAotCi0KICAgICBSRVZJU0lPTiAgICAgIjIwMDUwNTE2MDAwMFoiIC0tIE1heSAxNiwgMjAwNQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiSVB2NC1zcGVjaWZpYyBvYmplY3RzIHdlcmUgZGVwcmVjYXRlZCwgaW5jbHVkaW5nCkBAIC04Nyw5ICs4NSw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJUaGUgKGNvbmNlcHR1YWwpIHRhYmxlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gb24KICAgICAgICAgICAgIGNvbmZpZ3VyZWQgdHVubmVscy4iCi0KLQotCiAgICAgOjo9IHsgdHVubmVsIDEgfQogCiB0dW5uZWxJZkVudHJ5IE9CSkVDVC1UWVBFCkBAIC0xMzksOCArMTM0LDYgQEAKICAgICAgICAgICAgIChpLmUuLCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyB1c2VkIGluIHRoZSBvdXRlciBJUAogICAgICAgICAgICAgaGVhZGVyKSwgb3IgMC4wLjAuMCBpZiB1bmtub3duLCBvciBhbiBJUHY2IGFkZHJlc3MsIG9yCiAKLQotCiAgICAgICAgICAgICB0aGUgdHVubmVsIGlzIG5vdCBhIHBvaW50LXRvLXBvaW50IGxpbmsgKGUuZy4sIGlmIGl0CiAgICAgICAgICAgICBpcyBhIDZ0bzQgdHVubmVsKS4KIApAQCAtMTkwLDggKzE4Myw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJUaGUgbWV0aG9kIHVzZWQgdG8gc2V0IHRoZSBoaWdoIDYgYml0cyAodGhlCiAKLQotCiAgICAgICAgICAgICBkaWZmZXJlbnRpYXRlZCBzZXJ2aWNlcyBjb2RlcG9pbnQpIG9mIHRoZSBJUHY0IFRPUyBvcgogICAgICAgICAgICAgSVB2NiBUcmFmZmljIENsYXNzIGluIHRoZSBvdXRlciBJUCBoZWFkZXIuICBBIHZhbHVlIG9mCiAgICAgICAgICAgICAtMSBpbmRpY2F0ZXMgdGhhdCB0aGUgYml0cyBhcmUgY29waWVkIGZyb20gdGhlCkBAIC0yNDEsOCArMjMyLDYgQEAKICAgICAgICAgICAgIChpLmUuLCB0aGUgc291cmNlIGFkZHJlc3MgdXNlZCBpbiB0aGUgb3V0ZXIgSVAKICAgICAgICAgICAgIGhlYWRlcikuICBJZiB0aGUgYWRkcmVzcyBpcyB1bmtub3duLCB0aGUgdmFsdWUgaXMKIAotCi0KICAgICAgICAgICAgIDAuMC4wLjAgZm9yIElQdjQgb3IgOjogZm9yIElQdjYuICBUaGUgdHlwZSBvZiB0aGlzCiAgICAgICAgICAgICBvYmplY3QgaXMgZ2l2ZW4gYnkgdHVubmVsSWZBZGRyZXNzVHlwZS4iCiAgICAgOjo9IHsgdHVubmVsSWZFbnRyeSA5IH0KQEAgLTI5MSw5ICsyODAsNiBAQAogICAgICAgICAgICAgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0dW5uZWxJbmV0Q29uZmlnVGFibGUuIgogICAgIDo6PSB7IHR1bm5lbCAyIH0KIAotCi0KLQogdHVubmVsQ29uZmlnRW50cnkgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIFR1bm5lbENvbmZpZ0VudHJ5CiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQpAQCAtMzQzLDggKzMyOSw2IEBACiAgICAgICAgICAgICBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHR1bm5lbEluZXRDb25maWdSZW1vdGVBZGRyZXNzLiIKICAgICA6Oj0geyB0dW5uZWxDb25maWdFbnRyeSAyIH0KIAotCi0KIHR1bm5lbENvbmZpZ0VuY2Fwc01ldGhvZCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSUFOQXR1bm5lbFR5cGUKICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCkBAIC0zOTMsOSArMzc3LDYgQEAKIAogdHVubmVsQ29uZmlnU3RhdHVzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBSb3dTdGF0dXMKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtY3JlYXRlCiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCiAgICAgREVTQ1JJUFRJT04KQEAgLTQ0NCw5ICs0MjUsNiBAQAogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAgIlRoZSAoY29uY2VwdHVhbCkgdGFibGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbgogICAgICAgICAgICAgY29uZmlndXJlZCB0dW5uZWxzLiAgVGhpcyB0YWJsZSBjYW4gYmUgdXNlZCB0byBtYXAgYQogICAgICAgICAgICAgc2V0IG9mIHR1bm5lbCBlbmRwb2ludHMgdG8gdGhlIGFzc29jaWF0ZWQgaWZJbmRleApAQCAtNDk1LDkgKzQ3Myw2IEBACiB9CiAKIHR1bm5lbEluZXRDb25maWdBZGRyZXNzVHlwZSBPQkpFQ1QtVFlQRQotCi0KLQogICAgIFNZTlRBWCAgICAgSW5ldEFkZHJlc3NUeXBlCiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgY3VycmVudApAQCAtNTQ3LDggKzUyMiw2IEBACiAgICAgICAgICAgICBhbGxvdyBtdWx0aXBsZSBwYXJhbGxlbCB0dW5uZWxzLCB0aGUgbWFuYWdlciBpcwogICAgICAgICAgICAgcmVzcG9uc2libGUgZm9yIGNob29zaW5nIGFueSBJRCB3aGljaCBkb2VzIG5vdAogCi0KLQogICAgICAgICAgICAgY29uZmxpY3Qgd2l0aCBhbiBleGlzdGluZyByb3csIHN1Y2ggYXMgY2hvb3NpbmcgYQogICAgICAgICAgICAgcmFuZG9tIG51bWJlci4iCiAgICAgOjo9IHsgdHVubmVsSW5ldENvbmZpZ0VudHJ5IDUgfQpAQCAtNTk4LDggKzU3MSw2IEBACiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgbWFubmVyLCBhbmQgY29ycmVzcG9uZGluZwogICAgICAgICAgICAgcm93cyB3aWxsIGJlIGluc3RhbnRpYXRlZCBpbiB0aGUgaWZUYWJsZSBhbmQgdGhlCiAKLQotCiAgICAgICAgICAgICB0dW5uZWxJZlRhYmxlLiAgVGhlIHN0YXR1cyBvZiB0aGlzIHJvdyB3aWxsIGJlY29tZQogICAgICAgICAgICAgYWN0aXZlIGFzIHNvb24gYXMgdGhlIGFnZW50IGFzc2lnbnMgdGhlIGludGVyZmFjZQogICAgICAgICAgICAgaW5kZXgsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgaW50ZXJmYWNlIGlzCkBAIC02NDgsOSArNjE5LDYgQEAKIAogICAgICAgICBPQkpFQ1QgICAgICB0dW5uZWxJZlRPUwogICAgICAgICBNSU4tQUNDRVNTICByZWFkLW9ubHkKLQotCi0KICAgICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJXcml0ZSBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLiIKIApAQCAtNzAwLDggKzY2OCw2IEBACiAgICAgICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiV3JpdGUgYWNjZXNzIGlzIG5vdCByZXF1aXJlZC4iCiAKLQotCiAgICAgICAgIE9CSkVDVCAgICAgIHR1bm5lbElmQWRkcmVzc1R5cGUKICAgICAgICAgU1lOVEFYICAgICAgSW5ldEFkZHJlc3NUeXBlIHsgaXB2NCgxKSwgaXB2NigyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NHooMyksIGlwdjZ6KDQpIH0KQEAgLTc1MSw4ICs3MTcsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiQSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgdG8gc3VwcG9ydCBiYXNpYyBtYW5hZ2VtZW50CiAKLQotCiAgICAgICAgICAgICBvZiBJUHY0IFR1bm5lbHMuICBTaW5jZSB0aGlzIGdyb3VwIGNhbm5vdCBzdXBwb3J0CiAgICAgICAgICAgICBJUHY2LCBpdCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mCiAgICAgICAgICAgICB0dW5uZWxNSUJJbmV0R3JvdXAuIgpkaWZmIC0tZ2l0IGEvbWlicy9VQ0QtU05NUC1NSUIudHh0IGIvbWlicy9VQ0QtU05NUC1NSUIudHh0CmluZGV4IDFjNjU4ZTAuLmU4YWNjOGMgMTAwNjQ0Ci0tLSBhL21pYnMvVUNELVNOTVAtTUlCLnR4dAorKysgYi9taWJzL1VDRC1TTk1QLU1JQi50eHQKQEAgLTMwLDE0ICszMCwxNCBAQAogCiBJTVBPUlRTCiAgICAgT0JKRUNULVRZUEUsIE5PVElGSUNBVElPTi1UWVBFLCBNT0RVTEUtSURFTlRJVFksCi0gICAgSW50ZWdlcjMyLCBPcGFxdWUsIGVudGVycHJpc2VzLCBDb3VudGVyMzIKKyAgICBJbnRlZ2VyMzIsIE9wYXF1ZSwgZW50ZXJwcmlzZXMsIENvdW50ZXIzMiwgVW5zaWduZWQzMgogICAgICAgICBGUk9NIFNOTVB2Mi1TTUkKIAogICAgIFRFWFRVQUwtQ09OVkVOVElPTiwgRGlzcGxheVN0cmluZywgVHJ1dGhWYWx1ZQogCUZST00gU05NUHYyLVRDOwogCiB1Y2RhdmlzIE1PRFVMRS1JREVOVElUWQotICAgIExBU1QtVVBEQVRFRCAiMjAwNjExMjIwMDAwWiIKKyAgICBMQVNULVVQREFURUQgIjIwMTQwNzMxMDAwMFoiCiAgICAgT1JHQU5JWkFUSU9OICJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIERhdmlzIgogICAgIENPTlRBQ1QtSU5GTyAgICAKIAkiVGhpcyBtaWIgaXMgbm8gbG9uZ2VyIGJlaW5nIG1haW50YWluZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKQEAgLTU1LDYgKzU1LDE3IEBACiAgICAgREVTQ1JJUFRJT04KIAkiVGhpcyBmaWxlIGRlZmluZXMgdGhlIHByaXZhdGUgVUNEIFNOTVAgTUlCIGV4dGVuc2lvbnMuIgogCisgICAgUkVWSVNJT04gICAgICIyMDE0MDczMTAwMDBaIgorICAgIERFU0NSSVBUSU9OCisJIk5ldyBvYmplY3QgZm9yIG51bWJlciBvZiBDUFVzIGFzIGNvdW50ZWQgYnkgdGhlIGFnZW50IgorICAgIFJFVklTSU9OCSAiMjAxMTA1MTQwMDAwWiIKKyAgICBERVNDUklQVElPTgorCSJOZXcgb2JqZWN0cyBmb3IgbW9uaXRvcmluZyBDUFUgU3RlYWwsIEd1ZXN0IGFuZCBOaWNlIHZhbHVlcyIKKworICAgIFJFVklTSU9OCSAiMjAwOTAxMTkwMDAwWiIKKyAgICBERVNDUklQVElPTgorCSJOZXcgNjQtYml0IG9iamVjdHMgZm9yIG1vbml0b3JpbmcgbGFyZ2UgZGlzayB1c2FnZSIKKwogICAgIFJFVklTSU9OCSAiMjAwNjExMjIwMDAwWiIKICAgICBERVNDUklQVElPTgogCSJDbGFyaWZ5IGJlaGF2aW91ciBvZiBvYmplY3RzIGluIHRoZSBtZW1vcnkgJiBzeXN0ZW1TdGF0cyBncm91cHMKQEAgLTY3Miw3ICs2ODMsMTMgQEAKICAgICBkc2tQZXJjZW50CQlJbnRlZ2VyMzIsCiAgICAgZHNrUGVyY2VudE5vZGUJSW50ZWdlcjMyLAogICAgIGRza0Vycm9yRmxhZwlVQ0RFcnJvckZsYWcsCi0gICAgZHNrRXJyb3JNc2cJCURpc3BsYXlTdHJpbmcKKyAgICBkc2tFcnJvck1zZwkJRGlzcGxheVN0cmluZywKKyAgICBkc2tUb3RhbExvdwkJVW5zaWduZWQzMiwKKyAgICBkc2tUb3RhbEhpZ2gJVW5zaWduZWQzMiwKKyAgICBkc2tBdmFpbExvdwkJVW5zaWduZWQzMiwKKyAgICBkc2tBdmFpbEhpZ2gJVW5zaWduZWQzMiwKKyAgICBkc2tVc2VkTG93CQlVbnNpZ25lZDMyLAorICAgIGRza1VzZWRIaWdoCQlVbnNpZ25lZDMyCiB9CiAKIGRza0luZGV4IE9CSkVDVC1UWVBFCkBAIC03NjUsNiArNzgyLDYwIEBACiAJIlBlcmNlbnRhZ2Ugb2YgaW5vZGVzIHVzZWQgb24gZGlzayIKICAgICA6Oj0geyBkc2tFbnRyeSAxMCB9IAogCitkc2tUb3RhbExvdyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlVbnNpZ25lZDMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OICAKKwkiVG90YWwgc2l6ZSBvZiB0aGUgZGlzay9wYXJ0aW9uIChrQnl0ZXMpLgorCVRvZ2V0aGVyIHdpdGggZHNrVG90YWxIaWdoIGNvbXBvc2VzIDY0LWJpdCBudW1iZXIuIgorICAgIDo6PSB7IGRza0VudHJ5IDExIH0KKworZHNrVG90YWxIaWdoIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYCVVuc2lnbmVkMzIKKyAgICBNQVgtQUNDRVNTCXJlYWQtb25seQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04gIAorCSJUb3RhbCBzaXplIG9mIHRoZSBkaXNrL3BhcnRpb24gKGtCeXRlcykuCisJVG9nZXRoZXIgd2l0aCBkc2tUb3RhbExvdyBjb21wb3NlcyA2NC1iaXQgbnVtYmVyLiIKKyAgICA6Oj0geyBkc2tFbnRyeSAxMiB9CisKK2Rza0F2YWlsTG93IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYCVVuc2lnbmVkMzIKKyAgICBNQVgtQUNDRVNTCXJlYWQtb25seQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04gIAorCSJBdmFpbGFibGUgc3BhY2Ugb24gdGhlIGRpc2sgKGtCeXRlcykuCisJVG9nZXRoZXIgd2l0aCBkc2tBdmFpbEhpZ2ggY29tcG9zZXMgNjQtYml0IG51bWJlci4iCisgICAgOjo9IHsgZHNrRW50cnkgMTMgfQorCitkc2tBdmFpbEhpZ2ggT0JKRUNULVRZUEUKKyAgICBTWU5UQVgJVW5zaWduZWQzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgCisJIkF2YWlsYWJsZSBzcGFjZSBvbiB0aGUgZGlzayAoa0J5dGVzKS4KKwlUb2dldGhlciB3aXRoIGRza0F2YWlsTG93IGNvbXBvc2VzIDY0LWJpdCBudW1iZXIuIgorICAgIDo6PSB7IGRza0VudHJ5IDE0IH0KKworZHNrVXNlZExvdyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlVbnNpZ25lZDMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OICAKKwkiVXNlZCBzcGFjZSBvbiB0aGUgZGlzayAoa0J5dGVzKS4KKwlUb2dldGhlciB3aXRoIGRza1VzZWRIaWdoIGNvbXBvc2VzIDY0LWJpdCBudW1iZXIuIgorICAgIDo6PSB7IGRza0VudHJ5IDE1IH0KKworZHNrVXNlZEhpZ2ggT0JKRUNULVRZUEUKKyAgICBTWU5UQVgJVW5zaWduZWQzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgCisJIlVzZWQgc3BhY2Ugb24gdGhlIGRpc2sgKGtCeXRlcykuCisJVG9nZXRoZXIgd2l0aCBkc2tVc2VkTG93IGNvbXBvc2VzIDY0LWJpdCBudW1iZXIuIgorICAgIDo6PSB7IGRza0VudHJ5IDE2IH0KKwogZHNrRXJyb3JGbGFnIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYCVVDREVycm9yRmxhZwogICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CkBAIC04MzcsNyArOTA4LDcgQEAKIAogbGFDb25maWcgT0JKRUNULVRZUEUKICAgICBTWU5UQVgJRGlzcGxheVN0cmluZwotICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgTUFYLUFDQ0VTUwlyZWFkLXdyaXRlCiAgICAgU1RBVFVTCWN1cnJlbnQKICAgICBERVNDUklQVElPTgogCSJUaGUgd2F0Y2ggcG9pbnQgZm9yIGxvYWQtYXZlcmFnZXMgdG8gc2lnbmFsIGFuCkBAIC0xMzY4LDYgKzE0MzksNzUgQEAKICAgICAgICAgIk51bWJlciBvZiBibG9ja3Mgc3dhcHBlZCBvdXQiCiAgICAgOjo9IHsgc3lzdGVtU3RhdHMgNjMgfQogCitzc0NwdVJhd1N0ZWFsIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mICd0aWNrcycgKHR5cGljYWxseSAxLzEwMHMpIHNwZW50CisgICAgICAgICBieSB0aGUgaHlwZXJ2aXNvciBjb2RlIHRvIHJ1biBvdGhlciBWTXMgZXZlbgorICAgICAgICAgdGhvdWdoIHRoZSBDUFUgaW4gdGhlIGN1cnJlbnQgVk0gaGFkIHNvbWV0aGluZyBydW5uYWJsZS4KKworICAgICAgICAgVGhpcyBvYmplY3Qgd2lsbCBub3QgYmUgaW1wbGVtZW50ZWQgb24gaG9zdHMgd2hlcmUKKyAgICAgICAgIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgbWVhc3VyZQorICAgICAgICAgdGhpcyBwYXJ0aWN1bGFyIENQVSBtZXRyaWMuCisKKyAgICAgICAgIE9uIGEgbXVsdGktcHJvY2Vzc29yIHN5c3RlbSwgdGhlICdzc0NwdVJhdyonCisgICAgICAgICBjb3VudGVycyBhcmUgY3VtdWxhdGl2ZSBvdmVyIGFsbCBDUFVzLCBzbyB0aGVpcgorICAgICAgICAgc3VtIHdpbGwgdHlwaWNhbGx5IGJlIE4qMTAwIChmb3IgTiBwcm9jZXNzb3JzKS4iCisgICAgOjo9IHsgc3lzdGVtU3RhdHMgNjQgfQorCitzc0NwdVJhd0d1ZXN0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mICd0aWNrcycgKHR5cGljYWxseSAxLzEwMHMpIHNwZW50CisgICAgICAgICBieSB0aGUgQ1BVIHRvIHJ1biBhIHZpcnR1YWwgQ1BVIChndWVzdCkuCisKKyAgICAgICAgIFRoaXMgb2JqZWN0IHdpbGwgbm90IGJlIGltcGxlbWVudGVkIG9uIGhvc3RzIHdoZXJlCisgICAgICAgICB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90IG1lYXN1cmUKKyAgICAgICAgIHRoaXMgcGFydGljdWxhciBDUFUgbWV0cmljLgorCisgICAgICAgICBPbiBhIG11bHRpLXByb2Nlc3NvciBzeXN0ZW0sIHRoZSAnc3NDcHVSYXcqJworICAgICAgICAgY291bnRlcnMgYXJlIGN1bXVsYXRpdmUgb3ZlciBhbGwgQ1BVcywgc28gdGhlaXIKKyAgICAgICAgIHN1bSB3aWxsIHR5cGljYWxseSBiZSBOKjEwMCAoZm9yIE4gcHJvY2Vzc29ycykuIgorICAgIDo6PSB7IHN5c3RlbVN0YXRzIDY1IH0KKworc3NDcHVSYXdHdWVzdE5pY2UgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgJ3RpY2tzJyAodHlwaWNhbGx5IDEvMTAwcykgc3BlbnQKKyAgICAgICAgIGJ5IHRoZSBDUFUgdG8gcnVuIGEgbmljZWQgdmlydHVhbCBDUFUgKGd1ZXN0KS4KKworICAgICAgICAgVGhpcyBvYmplY3Qgd2lsbCBub3QgYmUgaW1wbGVtZW50ZWQgb24gaG9zdHMgd2hlcmUKKyAgICAgICAgIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgbWVhc3VyZQorICAgICAgICAgdGhpcyBwYXJ0aWN1bGFyIENQVSBtZXRyaWMuCisKKyAgICAgICAgIE9uIGEgbXVsdGktcHJvY2Vzc29yIHN5c3RlbSwgdGhlICdzc0NwdVJhdyonCisgICAgICAgICBjb3VudGVycyBhcmUgY3VtdWxhdGl2ZSBvdmVyIGFsbCBDUFVzLCBzbyB0aGVpcgorICAgICAgICAgc3VtIHdpbGwgdHlwaWNhbGx5IGJlIE4qMTAwIChmb3IgTiBwcm9jZXNzb3JzKS4iCisgICAgOjo9IHsgc3lzdGVtU3RhdHMgNjYgfQorCitzc0NwdU51bUNwdXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycywgYXMgY291bnRlZCBieSB0aGUgYWdlbnQuCisgICAgICAgICBUaGlzIG9iamVjdCdzIHZhbHVlIG1heSBiZSB1c2VmdWwgaW4gdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgIG9mIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMgd2hlcmUgbm90aW9ucyBzdWNoIGFzCisgICAgICAgICBsb2FkIGF2ZXJhZ2UgZG8gbm90IHRha2UgaW50byBhY2NvdW50IHRoZSBudW1iZXIgb2YKKyAgICAgICAgIHByb2Nlc3NvcnMgaW4gdGhlIHN5c3RlbS4KKworICAgICAgICAgRm9yIG90aGVyIG9iamVjdHMgaW4gdGhlIHN5c3RlbVN0YXRzIGdyb3VwIHdob3NlCisgICAgICAgICBkZXNjcmlwdGlvbnMgcmVmZXIgdG8gJ04gcHJvY2Vzc29ycycsIHRoaXMgb2JqZWN0J3MKKyAgICAgICAgIHZhbHVlIGlzIE4uIgorICAgIDo6PSB7IHN5c3RlbVN0YXRzIDY3IH0KKworCiAtLSBwb3NzaWJseSB1c2VkIGluIHRoZSBmdXR1cmU6CiAtLQogLS0gc3NFcnJvckZsYWcgT0JKRUNULVRZUEUKZGlmZiAtLWdpdCBhL21pYnMvaWFuYWxpc3QgYi9taWJzL2lhbmFsaXN0CmluZGV4IGMzZjA1NzUuLjhiMzFhZDYgMTAwNjQ0Ci0tLSBhL21pYnMvaWFuYWxpc3QKKysrIGIvbWlicy9pYW5hbGlzdApAQCAtMSwxMSArMSwxNyBAQAotIyB1cGRhdGVkIDIwMDUtMDEtMDYKLWlhbmFpZnR5cGUtbWliCQkJSUFOQWlmVHlwZS1NSUIKLWlhbmFsYW5ndWFnZS1taWIJCUlBTkEtTEFOR1VBR0UtTUlCCisjIHVwZGF0ZWQgMjAxNC0wOC0xNAogaWFuYWFkZHJlc3NmYW1pbHludW1iZXJzLW1pYglJQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCCi1pYW5haXByb3V0ZXByb3RvY29sLW1pYgkJSUFOQS1SVFBST1RPLU1JQgotaWFuYXRuMzI3MGV0Yy1taWIJCUlBTkFUbjMyNzBlVEMtTUlCCi1pYW5hbWFsbG9jLW1pYgkJCUlBTkEtTUFMTE9DLU1JQgoraWFuYWJmZHRjc3RkLW1pYgkJSUFOQS1CRkQtVEMtU1RELU1JQgogaWFuYWNoYXJzZXQtbWliCQkJSUFOQS1DSEFSU0VULU1JQgotaWFuYXByaW50ZXItbWliCQkJSUFOQS1QUklOVEVSLU1JQgoraWFuYWVudGl0eS1taWIJCQlJQU5BLUVOVElUWS1NSUIKIGlhbmFmaW5pc2hlci1taWIJCUlBTkEtRklOSVNIRVItTUlCCitpYW5hZ21wbHN0Yy1taWIJCQlJQU5BLUdNUExTLVRDLU1JQgoraWFuYWlmdHlwZS1taWIJCQlJQU5BaWZUeXBlLU1JQgoraWFuYWlwcm91dGVwcm90b2NvbC1taWIJCUlBTkEtUlRQUk9UTy1NSUIKK2lhbmFpcHBtbWV0cmljc3JlZ2lzdHJ5LW1pYglJQU5BLUlQUE0tTUVUUklDUy1SRUdJU1RSWS1NSUIKIGlhbmFpdHVhbGFybXRjLW1pYgkJSUFOQS1JVFUtQUxBUk0tVEMtTUlCCitpYW5hbGFuZ3VhZ2UtbWliCQlJQU5BLUxBTkdVQUdFLU1JQgoraWFuYW1hbGxvYy1taWIJCQlJQU5BLU1BTExPQy1NSUIKK2lhbmFtYXUtbWliCQkJSUFOQS1NQVUtTUlCCitpYW5hb2xzcnYybGlua21ldHJpY3R5cGUtbWliCUlBTkEtT0xTUnYyLUxJTkstTUVUUklDLVRZUEUtTUlCCitpYW5hcHJpbnRlci1taWIJCQlJQU5BLVBSSU5URVItTUlCCitpYW5hdG4zMjcwZXRjLW1pYgkJSUFOQVRuMzI3MGVUQy1NSUIKZGlmZiAtLWdpdCBhL21pYnMvcmZjbGlzdCBiL21pYnMvcmZjbGlzdAppbmRleCA0ZDAzNDM0Li5lMGQzZWVmIDEwMDY0NAotLS0gYS9taWJzL3JmY2xpc3QKKysrIGIvbWlicy9yZmNsaXN0CkBAIC0xLDQgKzEsNCBAQAotIyB1cGRhdGVkIDIwMDUtMDMtMTQKKyMgdXBkYXRlZCAyMDE0LTA4LTE1CiAxMTU1CVJGQzExNTUtU01JCiAxMjEzCVJGQzEyMTMtTUlCCiAxMjI3CVNNVVgtTUlCCkBAIC0xOSw3ICsxOSw2IEBACiAxNjExCUROUy1TRVJWRVItTUlCCiAxNjEyCUROUy1SRVNPTFZFUi1NSUIKIDE2MjgJVVBTLU1JQgotMTY1NwlCR1A0LU1JQgogMTY1OAlDSEFSQUNURVItTUlCCiAxNjU5CVJTLTIzMi1NSUIKIDE2NjAJUEFSQUxMRUwtTUlCCkBAIC0zNiw3ICszNSw2IEBACiAxODUwCU9TUEYtTUlCOk9TUEYtVFJBUC1NSUIKIDIwMDYJTUlQLU1JQgogMjAyMAlET1QxMi1JRi1NSUIKLTIwMjEJUk1PTjItTUlCCiAyMDI0CURMU1ctTUlCCiAyMDUxCUFQUEMtTUlCCiAyMTA4CVNOTVAtUkVQRUFURVItTUlCCkBAIC03NywxNSArNzUsOCBAQAogMjU5NAlXV1ctTUlCCiAyNjA1CURJUkVDVE9SWS1TRVJWRVItTUlCCiAyNjEzCVNNT04tTUlCCi0yNjE4CVJBRElVUy1BVVRILUNMSUVOVC1NSUIKLTI2MTkJUkFESVVTLUFVVEgtU0VSVkVSLU1JQgotMjYyMAlSQURJVVMtQUNDLUNMSUVOVC1NSUIKLTI2MjEJUkFESVVTLUFDQy1TRVJWRVItTUlCCiAyNjYyCUFEU0wtVEMtTUlCOkFEU0wtTElORS1NSUIKIDI2NjYJRVRIRVItQ0hJUFNFVC1NSUIKLTI2NjkJRE9DUy1DQUJMRS1ERVZJQ0UtTUlCCi0yNjcwCURPQ1MtSUYtTUlCCi0yNjc0CVAtQlJJREdFLU1JQjpRLUJSSURHRS1NSUIKIDI2NzcJTkhSUC1NSUIKIDI3MDcJSm9iLU1vbml0b3JpbmctTUlCCiAyNzIwCUZMT1ctTUVURVItTUlCCkBAIC0xMDIsNyArOTMsNiBAQAogMjg2MwlJRi1NSUIKIDI4NjQJSUYtSU5WRVJURUQtU1RBQ0stTUlCCiAyOTIyCVBUT1BPLU1JQgotMjkyNQlESVNNQU4tUElORy1NSUI6RElTTUFOLVRSQUNFUk9VVEUtTUlCOkRJU01BTi1OU0xPT0tVUC1NSUIKIDI5MzIJSVBNUk9VVEUtU1RELU1JQgogMjkzMwlJR01QLVNURC1NSUIKIDI5MzQJUElNLU1JQgpAQCAtMTQ3LDcgKzEzNyw2IEBACiAzNjA2CUFUTTItTUlCCiAzNjIxCVBPV0VSLUVUSEVSTkVULU1JQgogMzYzNQlFdGhlckxpa2UtTUlCCi0zNjM2CU1BVS1NSUIKIDM2MzcJRVRIRVItV0lTCiAzNzA1CUhDLVBlcmZIaXN0LVRDLU1JQgogMzcyOAlWRFNMLUxJTkUtTUlCCkBAIC0xNzgsMTEgKzE2NywxMTMgQEAKIDQwODcJVFVOTkVMLU1JQgogNDExMwlVRFAtTUlCCiA0MTMxCURPQ1MtSUVURi1CUEkyLU1JQgotNDEzMwlFTlRJVFktTUlCCiA0MTQ5CVNTUE0tTUlCCiA0MTg4CUJSSURHRS1NSUIKIDQyMjAJVEUtTElOSy1TVEQtTUlCCiA0MjY1CVZQTi1UQy1TVEQtTUlCCiA0MjY4CUVOVElUWS1TVEFURS1UQy1NSUI6RU5USVRZLVNUQVRFLU1JQgorNDI3MwlCR1A0LU1JQgogNDI5MglJUC1GT1JXQVJELU1JQgogNDI5MwlJUC1NSUIKKzQyOTUJTU9CSUxFSVBWNi1NSUIKKzQzMTgJUlNUUC1NSUIKKzQzMTkJSERTTDItU0hEU0wtTElORS1NSUIKKzQzMjMJRE9DUy1JRVRGLVFPUy1NSUIKKzQzNjMJUC1CUklER0UtTUlCOlEtQlJJREdFLU1JQgorNDM2OAlNUExTLUxDLUFUTS1TVEQtTUlCOk1QTFMtTEMtRlItU1RELU1JQgorNDM4MglNUExTLUwzVlBOLVNURC1NSUIKKzQ0MDQJRkNJUC1NR01ULU1JQgorNDQzOAlUMTEtRkMtTkFNRS1TRVJWRVItTUlCCis0NDM5CVQxMS1UQy1NSUI6VDExLUZDLUZBQlJJQy1BRERSLU1HUi1NSUIKKzQ0NDQJSVNJUy1NSUIKKzQ0NTUJU0NTSS1NSUIKKzQ0OTgJQUdHUkVHQVRFLU1JQjpUSU1FLUFHR1JFR0FURS1NSUIKKzQ1MDIJUk1PTjItTUlCCis0NTQ1CUlQUy1BVVRILU1JQgorNDU0NglET0NTLUlGLU1JQgorNDU0NwlET0NTLUlFVEYtQ0FCTEUtREVWSUNFLU5PVElGSUNBVElPTi1NSUIKKzQ1NjAJRElTTUFOLVBJTkctTUlCOkRJU01BTi1UUkFDRVJPVVRFLU1JQjpESVNNQU4tTlNMT09LVVAtTUlCCis0NjI0CU1TRFAtTUlCCis0NjI1CVQxMS1GQy1ST1VURS1NSUIKKzQ2MjYJVDExLUZDLUZTUEYtTUlCCis0NjMxCUxNUC1NSUIKKzQ2MzkJRE9DUy1DQUJMRS1ERVZJQ0UtTUlCCis0NjY4CVJBRElVUy1BVVRILUNMSUVOVC1NSUIKKzQ2NjkJUkFESVVTLUFVVEgtU0VSVkVSLU1JQgorNDY3MAlSQURJVVMtQUNDLUNMSUVOVC1NSUIKKzQ2NzEJUkFESVVTLUFDQy1TRVJWRVItTUlCCis0NjcyCVJBRElVUy1EWU5BVVRILUNMSUVOVC1NSUIKKzQ2NzMJUkFESVVTLURZTkFVVEgtU0VSVkVSLU1JQgorNDY4MglQS1RDLUlFVEYtTVRBLU1JQgorNDcwNglBRFNMMi1MSU5FLVRDLU1JQjpBRFNMMi1MSU5FLU1JQgorNDcxMQlSQVFNT04tTUlCCis0NzQ3CVQxMS1GQy1WSVJUVUFMLUZBQlJJQy1NSUIKKzQ3ODAJU0lQLVRDLU1JQjpTSVAtQ09NTU9OLU1JQjpTSVAtVUEtTUlCOlNJUC1TRVJWRVItTUlCCis0Nzg5CVNOTVAtSUVFRTgwMi1UTS1NSUIKKzQ4MDEJR01QTFMtVEMtU1RELU1JQgorNDgwMglHTVBMUy1URS1TVEQtTUlCCis0ODAzCUdNUExTLUxTUi1TVEQtTUlCOkdNUExTLUxBQkVMLVNURC1NSUIKKzQ4MDcJSVBTRUMtU1BELU1JQgorNDgzNglNQVUtTUlCCis0ODM3CURPVDMtRVBPTi1NSUIKKzQ4NzgJRE9UMy1PQU0tTUlCCis0ODk4CVRDUC1FU1RBVFMtTUlCCis0OTM1CVQxMS1GQy1GQUJSSUMtQ09ORklHLVNFUlZFUi1NSUIKKzQ5MzYJVDExLUZDLUZBQlJJQy1MT0NLLU1JQjpUMTEtRkMtWk9ORS1TRVJWRVItTUlCCis0OTM5CUlTTlMtTUlCCis0OTgzCVQxMS1GQy1SU0NOLU1JQgorNTAxNwlVUkktVEMtTUlCCis1MDYwCVBJTS1TVEQtTUlCCis1MDY2CUlGLUNBUC1TVEFDSy1NSUI6RUZNLUNVLU1JQgorNTA5NwlVRFBMSVRFLU1JQgorNTA5OAlQS1RDLUlFVEYtU0lHLU1JQgorNTEzMQlMQU5HVEFHLVRDLU1JQgorNTEzMglJUE1DQVNULU1JQgorNTE5MAlNSURDT00tTUlCCis1MjQwCVBJTS1CU1ItTUlCCis1MzI0CVQxMS1GQy1TUC1UQy1NSUI6VDExLUZDLVNQLUFVVEhFTlRJQ0FUSU9OLU1JQjpUMTEtRkMtU1AtWk9OSU5HLU1JQjpUMTEtRkMtU1AtUE9MSUNZLU1JQjpUMTEtRkMtU1AtU0EtTUlCCis1NDI3CVNZU0xPRy1UQy1NSUIKKzU0MjgJUEtUQy1JRVRGLUVWRU5ULU1JQgorNTQ4OAlORU1PLU1JQgorNTUxOQlNR01ELVNURC1NSUIKKzU1MjUJUlNFUlBPT0wtTUlCCis1NTQyCVBXLVRDLVNURC1NSUIKKzU1OTEgICAgU05NUC1UU00tTUlCCis1NjAxCVBXLVNURC1NSUI6SUFOQS1QV0UzLU1JQgorNTYwMglQVy1NUExTLVNURC1NSUIKKzU2MDMJUFctRU5FVC1TVEQtTUlCCis1NjA0CVBXLVRETS1NSUIKKzU2MDUJUFctQVRNLU1JQgorNTY0MwlPU1BGVjMtTUlCCis1NjUwCVZEU0wyLUxJTkUtVEMtTUlCOlZEU0wyLUxJTkUtTUlCCis1Njc2CVNZU0xPRy1NU0ctTUlCCis1NzI4CURWQi1SQ1MtTUlCCis1ODEzCUZPUkNFUy1NSUIKKzU4MzMJQ0FQV0FQLUJBU0UtTUlCCis1ODM0CUNBUFdBUC1ET1QxMS1NSUIKKzU5MDcJTlRQdjQtTUlCCis2MDY1CVNOTVAtVkFDTS1BQUEtTUlCCis2MTczCUlGQ1AtTUdNVC1NSUIKKzYyNDAJUFctQ0VQLVNURC1NSUIKKzYzNDAJRkxPQVQtVEMtTUlCCis2MzUzCVNOTVAtVExTLVRNLU1JQgorNjQ0NQlNUExTLUZSUi1HRU5FUkFMLVNURC1NSUI6TVBMUy1GUlItT05FMk9ORS1TVEQtTUlCOk1QTFMtRlJSLUZBQ0lMSVRZLVNURC1NSUIKKzY0NzUJUE1JUFY2LVRDLU1JQjpQTUlQVjYtTUlCCis2NTI3CVZSUlBWMy1NSUIKKzY2MTUJSVBGSVgtTUlCOklQRklYLVNFTEVDVE9SLU1JQgorNjcyNwlQU0FNUC1NSUIKKzY3NjUJR0JPTkQtTUlCOklBTkEtR0JPTkQtVEMtTUlCCis2NzY2CUc5OTgzLU1JQgorNjc2NwlHOTk4Mi1NSUIKKzY3NjgJRzk5ODEtTUlCCis2Nzc5CU5IRFAtTUlCCis2ODI1CVRFRC1NSUIKKzY4NTAJUkJSSURHRS1NSUIKKzY5MzMJRU5USVRZLU1JQjpVVUlELVRDLU1JQgorNjk0NQlSUEtJLVJPVVRFUi1NSUIKKzcwNTIJTElTUC1NSUIKKzcxNDcJSVNDU0ktTUlCCis3MTg0CU9MU1J2Mi1NSUIKKzcyNTcJVlBMUy1HRU5FUklDLU1JQjpWUExTLUxEUC1NSUI6VlBMUy1CR1AtTUlCCis3MzMwCUJGRC1UQy1TVEQtTUlCCis3MzMxCUJGRC1TVEQtTUlCCmRpZmYgLS1naXQgYS9taWJzL3NtaXN0cmlwIGIvbWlicy9zbWlzdHJpcAppbmRleCBmNTg5OTVjLi5iNWZjOGYyIDEwMDc1NQotLS0gYS9taWJzL3NtaXN0cmlwCisrKyBiL21pYnMvc21pc3RyaXAKQEAgLTY2LDcgKzY2LDcgQEAKICAgICB9CiAKICAgICAjIHN0YXJ0IG9mIG1vZHVsZQotICAgIC9eWyBcdF0qW0EtWmEtejAtOS1dKiAqREVGSU5JVElPTlMgKjo6PSAqQkVHSU4vIHsKKyAgICAvXlsgXHRdKltBLVphLXowLTktXSogKkRFRklOSVRJT05TKCArSU1QTElDSVQgK1RBR1MpPyAqOjo9ICpCRUdJTi8gewogCW1vZHVsZSA9ICQxCiAJY29sbGVjdCA9IDEKIAltYWNybyA9IDAKZGlmZiAtLWdpdCBhL25ldC1zbm1wLWNvbmZpZy5pbiBiL25ldC1zbm1wLWNvbmZpZy5pbgppbmRleCAzMzBmNjYwLi5kNTU4NzJjIDEwMDY0NAotLS0gYS9uZXQtc25tcC1jb25maWcuaW4KKysrIGIvbmV0LXNubXAtY29uZmlnLmluCkBAIC0yNywxMCArMjcsMjUgQEAKICAgICAgIGZpCiB9CiAKKyMgdXNhZ2U6IGluZGV4IG4gYXJndW1lbnRzCisjIGVmZmVjdDogcmV0dXJucyB0aGUgKG4rMSl0aCBhcmd1bWVudAoraW5kZXgoKQoreworICAgIGV2YWwgZWNobyBcJGBleHByICQxICsgMWAKK30KKworIyB1c2FnZTogY291bnQgYXJndW1lbnRzCisjIGVmZmVjdDogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cworY291bnQoKQoreworICAgIGVjaG8gJCMKK30KKwogcHJlZml4PUBwcmVmaXhACiBleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACiBpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAogbGliZGlyPUBsaWJkaXJACitkYXRhcm9vdGRpcj1AZGF0YXJvb3RkaXJACiBOU0NfTERGTEFHUz0iQExERkxBR1NAIgogCiBOU0NfTElCUz0iQExJQlNAIgpAQCAtNDIsNyArNTcsNyBAQAogTlNDX0xJQkRJUj0tTCR7bGliZGlyfQogCiBOU0NfU05NUExJQlM9Ii1sbmV0c25tcCAke05TQ19MTkVUU05NUExJQlN9IgotTlNDX1NVQkFHRU5UTElCUz0iLWxuZXRzbm1wYWdlbnQgLWxuZXRzbm1waGVscGVycyAke05TQ19MQUdFTlRMSUJTfSAke05TQ19TTk1QTElCU30iCitOU0NfU1VCQUdFTlRMSUJTPSItbG5ldHNubXBhZ2VudCAke05TQ19MQUdFTlRMSUJTfSAke05TQ19TTk1QTElCU30iCiBOU0NfQUdFTlRMSUJTPSItbG5ldHNubXBtaWJzICR7TlNDX0xNSUJMSUJTfSAke05TQ19TVUJBR0VOVExJQlN9IgogCiBOU0NfUFJFRklYPSRwcmVmaXgKQEAgLTUxLDExICs2NiwxMSBAQAogTlNDX0lOQ0RJUj0ke05TQ19QUkVGSVh9L2luY2x1ZGUKIAogTlNDX0JBU0VfU05NUF9MSUJTPSItbG5ldHNubXAiCi1OU0NfQkFTRV9TVUJBR0VOVF9MSUJTPSItbG5ldHNubXBhZ2VudCAtbG5ldHNubXBoZWxwZXJzICR7TlNDX0JBU0VfU05NUF9MSUJTfSIKK05TQ19CQVNFX1NVQkFHRU5UX0xJQlM9Ii1sbmV0c25tcGFnZW50ICR7TlNDX0JBU0VfU05NUF9MSUJTfSIKIE5TQ19CQVNFX0FHRU5UX0xJQlM9Ii1sbmV0c25tcG1pYnMgJHtOU0NfQkFTRV9TVUJBR0VOVF9MSUJTfSIKIAotTlNDX1NSQ19MSUJESVJTPSJhZ2VudC8ubGlicyBzbm1wbGliLy5saWJzIGFnZW50L2hlbHBlcnMvLmxpYnMiCi1OU0NfU1JDX0xJQkRFUFM9ImFnZW50Ly5saWJzL2xpYm5ldHNubXBtaWJzLmEgYWdlbnQvLmxpYnMvbGlibmV0c25tcGFnZW50LmEgYWdlbnQvaGVscGVycy8ubGlicy9saWJuZXRzbm1waGVscGVycy5hIHNubXBsaWIvLmxpYnMvbGlibmV0c25tcC5hIgorTlNDX1NSQ19MSUJESVJTPSJhZ2VudC8ubGlicyBzbm1wbGliLy5saWJzIgorTlNDX1NSQ19MSUJERVBTPSJhZ2VudC8ubGlicy9saWJuZXRzbm1wbWlicy5hIGFnZW50Ly5saWJzL2xpYm5ldHNubXBhZ2VudC5hIHNubXBsaWIvLmxpYnMvbGlibmV0c25tcC5hIgogCiBpZiB0ZXN0ICJ4JE5TQ19TUkNESVIiID0gInguIiA7IHRoZW4KICAgIE5TQ19TUkNESVI9Ik5FVC1TTk1QLVNPVVJDRS1ESVIiCkBAIC0xMDksNiArMTI0LDkgQEAKICAgICAtLWVudi1zZXBhcmF0b3IpCiAgICAgICBlY2hvICJARU5WX1NFUEFSQVRPUkAiCiAgICAgICA7OworICAgIC0tZXhlZXh0KQorICAgICAgZWNobyAiQEVYRUVYVEAiCisgICAgICA7OwogICAgIC0tc25tcGNvbmZwYXRofC0tU05NUENPTkZQQVRIKQogICAgICAgZWNobyAiQFNOTVBDT05GUEFUSEBARU5WX1NFUEFSQVRPUkBAU05NUFNIQVJFUEFUSEBARU5WX1NFUEFSQVRPUkBAU05NUExJQlBBVEhAQEVOVl9TRVBBUkFUT1JAJEhPTUUvLnNubXBARU5WX1NFUEFSQVRPUkBAUEVSU0lTVEVOVF9ESVJFQ1RPUllAIgogICAgICAgOzsKQEAgLTE2NCwxNiArMTgyLDE5IEBACiAgICAgICBmaQogICAgICAgZWNobyAkcmVzdWx0CiAgICAgICA7OworICAgIC0tYnVpbGQtY29tbWFuZCkKKyAgICAgIGVjaG8gIkBDQ0AgQENGTEFHU0AgQERFVkZMQUdTQCIKKyAgICAgIDs7CiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBjbGllbnQgbGliCiAgICAgLS1saWJzKQogICAgICAgIyB1c2UgdGhpcyBvbmUgPT0gLS1uZXRzbm1wLWxpYnMgKyAtLWV4dGVybmFsLWxpYnMKICAgICAgIGVjaG8gJE5TQ19MREZMQUdTICROU0NfTElCRElSICROU0NfU05NUExJQlMgJE5TQ19MSUJTCiAgICAgICA7OwogICAgIC0tbmV0c25tcC1saWJzKQotICAgICAgZWNobyAkTlNDX0xJQkRJUiAtbG5ldHNubXAKKyAgICAgIGVjaG8gJE5TQ19MSUJESVIgJE5TQ19CQVNFX1NOTVBfTElCUwogICAgICAgOzsKICAgICAtLWV4dGVybmFsLWxpYnMpCi0gICAgICBlY2hvICROU0NfTERGTEFHUyAkTlNDX0xORVRTTk1QTElCUyAkTlNDX0xJQlMKKyAgICAgIGVjaG8gJE5TQ19MREZMQUdTICROU0NfTE5FVFNOTVBMSUJTICROU0NfTElCUyBAUEVSTExET1BUU19GT1JfQVBQU0AKICAgICAgIDs7CiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBhZ2VudCBsaWIKICAgICAtLWJhc2UtYWdlbnQtbGlicykKQEAgLTIwNywxMjYgKzIyOCwxMCBAQAogICAgICAgOzsKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgLS1jcmVhdGUtc25tcHYzLXVzZXIpCi0gICAgICBpZiBAUFNDTURAIHwgZWdyZXAgJyBzbm1wZCAqJCcgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KLSAgICAgICAgIGVjaG8gIkFwcGFyZW50bHkgYXQgbGVhc3Qgb25lIHNubXBkIGRlbW9uIGlzIGFscmVhZHkgcnVubmluZy4iCi0gICAgICAgICBlY2hvICJZb3UgbXVzdCBzdG9wIHRoZW0gaW4gb3JkZXIgdG8gdXNlIHRoaXMgY29tbWFuZC4iCi0gICAgICAgICBleGl0IDEKLSAgICAgIGZpCi0KLSAgICAgIEFhbGdvcml0aG09Ik1ENSIKLSAgICAgIFhhbGdvcml0aG09IkRFUyIKLSAgICAgIHRva2VuPXJ3dXNlcgorICAgICAgZG9uZT0xCiAgICAgICBzaGlmdAotICAgICAgc2hpZnRlZD0xCi0gICAgICB3aGlsZSB0ZXN0ICJ4JGRvbmUiID0gIngiIC1hICJ4JDEiICE9ICJ4IiA7IGRvCi0JY2FzZSAkMSBpbgotCSAgICAtQXwtYSkKLQkJc2hpZnQKLQkJaWYgdGVzdCAieCQxIiA9ICJ4IiA7IHRoZW4KLQkJICAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgYW4gYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIG9yIHBhc3MgcGhyYXNlIgotCQkgICAgZXhpdCAxCi0JCWZpCi0JICAgICAgICBjYXNlICQxIGluCi0gICAgICAgICAgICAgICAgTUQ1fFNIQSkKLQkJICAgIEFhbGdvcml0aG09JDEKLQkJICAgIHNoaWZ0Ci0JCSAgICA7OwotICAgICAgICAgICAgICAgIG1kNXxzaGEpCi0JCSAgICBBYWxnb3JpdGhtPWBlY2hvICQxIHwgdHIgYS16IEEtWmAKLQkJICAgIHNoaWZ0Ci0JCSAgICA7OwotICAgICAgICAgICAgICAgICopCi0JCSAgICBhcGFzc3BocmFzZT0kMQotCQkgICAgc2hpZnQKLQkJICAgIDs7Ci0JCWVzYWMKLQkJOzsKLQkgICAgLVh8LXgpCi0JCXNoaWZ0Ci0JCWlmIHRlc3QgIngkMSIgPSAieCIgOyB0aGVuCi0JCSAgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IGFuIGVuY3J5cHRpb24gYWxnb3JpdGhtIG9yIHBhc3MgcGhyYXNlIgotCQkgICAgZXhpdCAxCi0JCWZpCi0JICAgICAgICBjYXNlICQxIGluCi0gICAgICAgICAgICAgICAgREVTfEFFU3xBRVMxMjgpCi0JCSAgICBYYWxnb3JpdGhtPSQxCi0JCSAgICBzaGlmdAotCQkgICAgOzsKLSAgICAgICAgICAgICAgICBkZXN8YWVzfGFlczEyOCkKLQkJICAgIFhhbGdvcml0aG09YGVjaG8gJDEgfCB0ciBhLXogQS1aYAotCQkgICAgc2hpZnQKLQkJICAgIDs7Ci0gICAgICAgICAgICAgICAgKikKLQkJICAgIHhwYXNzcGhyYXNlPSQxCi0JCSAgICBzaGlmdAotCQkgICAgOzsKLQkJZXNhYwotCQk7OwotCSAgICAtcm8pCi0JICAgICAgICB0b2tlbj0icm91c2VyIgotCQlzaGlmdAotCQk7OwotIAkgICAgLSopCi0JCWVjaG8gInVua25vd24gc3Vib3B0aW9uIHRvIC0tY3JlYXRlLXNubXB2My11c2VyOiAkMSIKLQkJZXhpdCAxCi0JCTs7Ci0JICAgICopCi0JICAgICAgICBkb25lPTEKLQkJOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICAKLSAgICAgIGlmIHRlc3QgIngkMSIgPSAieCIgOyB0aGVuCi0gICAgICAgICAgcHJvbXB0PXllcwotCSAgZWNobyAiRW50ZXIgYSBTTk1QdjMgdXNlciBuYW1lIHRvIGNyZWF0ZTogIgotCSAgcmVhZCB1c2VyCi0gICAgICBlbHNlCi0gICAgICAgICAgdXNlcj0kMQotICAgICAgICAgIHNoaWZ0Ci0gICAgICBmaQotICAgICAgaWYgdGVzdCAieCR1c2VyIiA9ICJ4IiA7IHRoZW4KLSAgICAgICAgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IGEgdXNlciBuYW1lIgotCSAgZXhpdCAxCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICJ4JGFwYXNzcGhyYXNlIiA9ICJ4IiA7IHRoZW4KLSAgICAgICAgICBwcm9tcHQ9eWVzCi0JICBlY2hvICJFbnRlciBhdXRoZW50aWNhdGlvbiBwYXNzLXBocmFzZTogIgotCSAgcmVhZCBhcGFzc3BocmFzZQotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIngkYXBhc3NwaHJhc2UiID0gIngiIDsgdGhlbgotICAgICAgICAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgYW4gYXV0aGVudGljYXRpb24gcGFzcy1waHJhc2UiCi0JICBleGl0IDEKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIngkcHJvbXB0IiA9ICJ4eWVzIiAtYSAieCR4cGFzc3BocmFzZSIgPSAieCIgOyB0aGVuCi0JICBlY2hvICJFbnRlciBlbmNyeXB0aW9uIHBhc3MtcGhyYXNlOiAiCi0JICBlY2hvICIgIFtwcmVzcyByZXR1cm4gdG8gcmV1c2UgdGhlIGF1dGhlbnRpY2F0aW9uIHBhc3MtcGhyYXNlXSIKLQkgIHJlYWQgeHBhc3NwaHJhc2UKLSAgICAgIGZpCi0KLSAgICAgIG91dGRpcj0iQFBFUlNJU1RFTlRfRElSRUNUT1JZQCIKLSAgICAgIG91dGZpbGU9IiRvdXRkaXIvc25tcGQuY29uZiIKLSAgICAgIGxpbmU9ImNyZWF0ZVVzZXIgJHVzZXIgJEFhbGdvcml0aG0gXCIkYXBhc3NwaHJhc2VcIiAkWGFsZ29yaXRobSAkeHBhc3NwaHJhc2UiCi0gICAgICBlY2hvICJhZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lIHRvICRvdXRmaWxlOiIKLSAgICAgIGVjaG8gIiAgIiAkbGluZQotICAgICAgIyBpbiBjYXNlIGl0IGhhc24ndCBldmVyIGJlZW4gc3RhcnRlZCB5ZXQsIHN0YXJ0IGl0LgotICAgICAgaWYgdGVzdCAhIC1kICRvdXRkaXIgOyB0aGVuCi0gICAgICAgICAgbWtkaXIgJG91dGRpcgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgISAtZCAkb3V0ZmlsZSA7IHRoZW4KLSAgICAgICAgICB0b3VjaCAkb3V0ZmlsZQotICAgICAgZmkKLSAgICAgIGVjaG8gJGxpbmUgPj4gJG91dGZpbGUKLQotICAgICAgb3V0ZmlsZT0iQGRhdGFkaXJAL3NubXAvc25tcGQuY29uZiIKLSAgICAgIGxpbmU9IiR0b2tlbiAkdXNlciIKLSAgICAgIGVjaG8gImFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgdG8gJG91dGZpbGU6IgotICAgICAgZWNobyAiICAiICRsaW5lCi0gICAgICBpZiB0ZXN0ICEgLWQgJG91dGZpbGUgOyB0aGVuCi0gICAgICAgICAgdG91Y2ggJG91dGZpbGUKLSAgICAgIGZpCi0gICAgICBlY2hvICRsaW5lID4+ICRvdXRmaWxlCisgICAgICBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciAkKgorICAgICAgZXhpdCAkPwogICAgICAgOzsKIAogICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTM3OCw3ICsyODMsNyBAQAogCWVjaG8gIkFjay4gIENhbid0IGNyZWF0ZSAkdG1wZmlsZTogYWxyZWFkeSBleGlzdHMiCiAJZXhpdCAxCiAgICAgICBmaQotICAgICAgZWNobyAiZ2VuZXJhdGluZyB0aGUgdG1wb3JhcnkgY29kZSBmaWxlOiAkdG1wZmlsZSIKKyAgICAgIGVjaG8gImdlbmVyYXRpbmcgdGhlIHRlbXBvcmFyeSBjb2RlIGZpbGU6ICR0bXBmaWxlIgogICAgICAgcm0gLWYgJHRtcGZpbGUKICAgICAgIGNhdCA+ICR0bXBmaWxlIDw8RU9GCiAvKiBnZW5lcmF0ZWQgZnJvbSBuZXQtc25tcC1jb25maWcgKi8KQEAgLTQyNSw2ICszMzAsNyBAQAogCiAgICAgICBjYXQgPj4gJHRtcGZpbGUgPDxFT0YKIGNvbnN0IGNoYXIgKmFwcF9uYW1lID0gIiRvdXRuYW1lIjsKK3N0YXRpYyBpbnQgcmVjb25maWcgPSAwOwogCiBleHRlcm4gaW50IG5ldHNubXBfcnVubmluZzsKIApAQCAtNDM5LDYgKzM0NSwxNSBAQAogICAgIG5ldHNubXBfcnVubmluZyA9IDA7CiB9CiAKKyNpZmRlZiBTSUdIVVAKK1JFVFNJR1RZUEUKK2h1cF9oYW5kbGVyKGludCBzaWcpCit7CisgICAgcmVjb25maWcgPSAxOworICAgIHNpZ25hbChTSUdIVVAsIGh1cF9oYW5kbGVyKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hhciAqcHJvZykKIHsKQEAgLTYxNSwxMCArNTMwLDkgQEAKICAgICAgIGlmIGdyZXAgImluaXRfJG5hbWUiICRpIDsgdGhlbgogICAgICAgICBlY2hvICIgIGluaXRfJHtuYW1lfSgpOyIgPj4gJHRtcGZpbGUKICAgICAgIGZpCi0gICAgICBzaGlmdAogICAgIGRvbmUKIAotICAgICMgZmluaXNoIGZpbGUKKyAgICAjIGhhbmRsZSB0aGUgbWFpbiBsb29wCiAgICAgY2F0ID4+ICR0bXBmaWxlIDw8RU9GCiAKICAgLyogJG91dG5hbWUgd2lsbCBiZSB1c2VkIHRvIHJlYWQgJG91dG5hbWUuY29uZiBmaWxlcy4gKi8KQEAgLTYzOCwxOCArNTUyLDQ3IEBACiAjaWZkZWYgU0lHSU5UCiAgIHNpZ25hbChTSUdJTlQsIHN0b3Bfc2VydmVyKTsKICNlbmRpZgorI2lmZGVmIFNJR0hVUAorICBzaWduYWwoU0lHSFVQLCBodXBfaGFuZGxlcik7CisjZW5kaWYKIAogICAvKiBtYWluIGxvb3AgaGVyZS4uLiAqLwogICB3aGlsZShuZXRzbm1wX3J1bm5pbmcpIHsKKyAgICBpZiAocmVjb25maWcpIHsKKyAgICAgIGZyZWVfY29uZmlnKCk7CisgICAgICByZWFkX2NvbmZpZ3MoKTsKKyAgICAgIHJlY29uZmlnID0gMDsKKyAgICB9CiAgICAgYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoMSk7CiAgIH0KIAogICAvKiBhdCBzaHV0ZG93biB0aW1lICovCiAgIHNubXBfc2h1dGRvd24oYXBwX25hbWUpOworCisgIC8qIGRlaW5pdGlhbGl6ZSB5b3VyIG1pYiBjb2RlIGhlcmUgKi8KK0VPRgorCisgICAgIyBhZGQgc2h1dGRvd24gcm91dGluZXMKKworICAgIGk9YGNvdW50ICRjZmlsZXNgCisgICAgd2hpbGUgWyAkaSAtZ3QgMCBdIDsgZG8KKyAgICAgIGZ1bGxuYW1lPWBpbmRleCAkaSAkY2ZpbGVzYAorICAgICAgbmFtZT1gYmFzZW5hbWUgJGZ1bGxuYW1lIHwgc2VkICdzL1wuW2NvXSQvLydgCisgICAgICBlY2hvIGNoZWNraW5nIGZvciBzaHV0ZG93bl8kbmFtZSBpbiAkZnVsbG5hbWUKKyAgICAgIGlmIGdyZXAgInNodXRkb3duXyRuYW1lIiAkZnVsbG5hbWUgOyB0aGVuCisgICAgICAgIGVjaG8gIiAgc2h1dGRvd25fJHtuYW1lfSgpOyIgPj4gJHRtcGZpbGUKKyAgICAgIGZpCisgICAgICBpPWBleHByICRpIC0gMWAKKyAgICBkb25lCisKKyAgICAjIGZpbmlzaCBmaWxlCisgICAgY2F0ID4+ICR0bXBmaWxlIDw8RU9GCisKKyAgLyogc2h1dGRvd24gdGhlIGFnZW50IGxpYnJhcnkgKi8KKyAgc2h1dGRvd25fYWdlbnQoKTsKICAgU09DS19DTEVBTlVQOwogICBleGl0KDApOwogfQotCiBFT0YKICAgICAgIGlmIHRlc3QgIiQ/IiAhPSAwIC1vICEgLWYgIiR0bXBmaWxlIiA7IHRoZW4KICAgICAgICAgZWNobyAiQWNrLiAgQ2FuJ3QgY3JlYXRlICR0bXBmaWxlLiIKQEAgLTY1OSwxMCArNjAyLDEwIEBACiAgICAgICBlY2hvICJydW5uaW5nOiAkY21kIgogICAgICAgYCRjbWRgCiAgICAgICBpZiB0ZXN0ICJ4JG5vcm0iICE9ICJ4MSIgOyB0aGVuCi0gICAgICAgIGVjaG8gInJlbW92aW5nIHRoZSB0bXBvcmFyeSBjb2RlIGZpbGU6ICR0bXBmaWxlIgorICAgICAgICBlY2hvICJyZW1vdmluZyB0aGUgdGVtcG9yYXJ5IGNvZGUgZmlsZTogJHRtcGZpbGUiCiAgICAgICAgIHJtIC1mICR0bXBmaWxlCiAgICAgICBlbHNlCi0gICAgICAgIGVjaG8gImxlYXZpbmcgdGhlIHRtcG9yYXJ5IGNvZGUgZmlsZTogJHRtcGZpbGUiCisgICAgICAgIGVjaG8gImxlYXZpbmcgdGhlIHRlbXBvcmFyeSBjb2RlIGZpbGU6ICR0bXBmaWxlIgogICAgICAgZmkKICAgICAgIGlmIHRlc3QgLWYgJG91dG5hbWUgOyB0aGVuCiAgICAgICAgIGVjaG8gInN1YmFnZW50IHByb2dyYW0gJG91dG5hbWUgY3JlYXRlZCIKQEAgLTY5Myw4ICs2MzYsOSBAQAogICBlY2hvICIiCiAgIGVjaG8gIiAgU05NUCBTZXR1cCBjb21tYW5kczoiCiAgIGVjaG8gIiIKLSAgZWNobyAiICAgIC0tY3JlYXRlLXNubXB2My11c2VyIFstcm9dIFstQSBhdXRocGFzc10gWy1YIHByaXZwYXNzXSIKLSAgZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgIFstYSBNRDV8U0hBXSBbLXggREVTfEFFU10gW3VzZXJuYW1lXSIKKyAgZWNobyAiICAgIC0tY3JlYXRlLXNubXB2My11c2VyIGNyZWF0ZXMgYSBTTk1QdjMgdXNlciBpbiBOZXQtU05NUCBjb25maWcgZmlsZS4iCisgIGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgLS1oZWxwIGZvciBsaXN0IG9mIgorICBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgb3B0aW9ucy4iCiAgIGVjaG8gIiIKICAgZWNobyAiICBUaGVzZSBvcHRpb25zIHByb2R1Y2UgdGhlIHZhcmlvdXMgY29tcGlsYXRpb24gZmxhZ3MgbmVlZGVkIHdoZW4iCiAgIGVjaG8gIiAgYnVpbGRpbmcgZXh0ZXJuYWwgU05NUCBhcHBsaWNhdGlvbnM6IgpAQCAtNzI5LDYgKzY3Myw3IEBACiAgIGVjaG8gIiAgICAtLWJ1aWxkLWluY2x1ZGVzICAgICAgaW5jbHVkZSBwYXRoIHRvIGJ1aWxkL3NvdXJjZSBpbmNsdWRlcyIKICAgZWNobyAiICAgIC0tYnVpbGQtbGliLWRpcnMgICAgICBsaW5rIHBhdGggdG8gbGlicmFyaWVzIgogICBlY2hvICIgICAgLS1idWlsZC1saWItZGVwcyAgICAgIHBhdGggdG8gbGlicmFyaWVzIGZvciBkZXBlbmRlbmN5IHRhcmdldCIKKyAgZWNobyAiICAgIC0tYnVpbGQtY29tbWFuZCAgICAgICBjb21tYW5kIHRvIGNvbXBpbGUgXCQzLi4uIHRvIFwkMiIKICAgZWNobyAiIgogICBlY2hvICIgIEF1dG9tYXRlZCBzdWJhZ2VudCBidWlsZGluZyAocHJvZHVjZXMgYW4gT1VUUFVUTkFNRSBiaW5hcnkgZmlsZSk6IgogICBlY2hvICIgIFt0aGlzIGZlYXR1cmUgaGFzIG5vdCBiZWVuIHRlc3RlZCB2ZXJ5IHdlbGwgeWV0LiAgdXNlIGF0IHlvdXIgcmlzay5dIgpkaWZmIC0tZ2l0IGEvbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4gYi9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjg4ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4KQEAgLTAsMCArMSwxNjggQEAKKyMhL2Jpbi9zaAorIworIyAkSWQkCisjCisjIHRoaXMgc2hlbGwgc2NyaXB0IGlzIGRlc2lnbmVkIHRvIGFkZCBuZXcgU05NUHYzIHVzZXJzCisjIHRvIE5ldC1TTk1QIGNvbmZpZyBmaWxlLgorCitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACitsaWJkaXI9QGxpYmRpckAKK2RhdGFyb290ZGlyPUBkYXRhcm9vdGRpckAKK05TQ19MREZMQUdTPSJATERGTEFHU0AiCitOU0NfSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9CitOU0NfTElCRElSPS1MJHtsaWJkaXJ9CitOU0NfTElCUz0iQExJQlNAIgorTlNDX0FHRU5UTElCUz0iQEFHRU5UTElCU0AgQFBFUkxMRE9QVFNfRk9SX0FQUFNAIgorTlNDX1BSRUZJWD0kcHJlZml4CitOU0NfRVhFQ19QUkVGSVg9JGV4ZWNfcHJlZml4CitOU0NfU1JDRElSPUBzcmNkaXJACitOU0NfSU5DRElSPSR7TlNDX1BSRUZJWH0vaW5jbHVkZQorTlNDX0JBU0VfU1VCQUdFTlRfTElCUz0iLWxuZXRzbm1wYWdlbnQgLWxuZXRzbm1wIgorTlNDX0JBU0VfQUdFTlRfTElCUz0iLWxuZXRzbm1wYWdlbnQgLWxuZXRzbm1wbWlicyAtbG5ldHNubXAiCitOU0NfU1JDX0xJQkRJUlM9ImFnZW50Ly5saWJzIHNubXBsaWIvLmxpYnMiCitOU0NfU1JDX0xJQkRFUFM9ImFnZW50Ly5saWJzL2xpYm5ldHNubXBtaWJzLmEgYWdlbnQvLmxpYnMvbGlibmV0c25tcGFnZW50LmEgc25tcGxpYi8ubGlicy9saWJuZXRzbm1wLmEiCisKK2lmIHRlc3QgIngkTlNDX1NSQ0RJUiIgPSAieC4iIDsgdGhlbgorICAgTlNDX1NSQ0RJUj0iTkVULVNOTVAtU09VUkNFLURJUiIKK2ZpCisKK2lmIEBQU0NNREAgfCBlZ3JlcCAnIHNubXBkICokJyA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgIGVjaG8gIkFwcGFyZW50bHkgYXQgbGVhc3Qgb25lIHNubXBkIGRlbW9uIGlzIGFscmVhZHkgcnVubmluZy4iCisgICAgZWNobyAiWW91IG11c3Qgc3RvcCB0aGVtIGluIG9yZGVyIHRvIHVzZSB0aGlzIGNvbW1hbmQuIgorICAgIGV4aXQgMQorZmkKKworQWFsZ29yaXRobT0iTUQ1IgorWGFsZ29yaXRobT0iREVTIgordG9rZW49cnd1c2VyCisKK3doaWxlIHRlc3QgIngkZG9uZSIgPSAieCIgLWEgIngkMSIgIT0gIngiIC1hICJ4JHVzYWdlIiAhPSAieHllcyI7IGRvCitjYXNlICIkMSIgaW4KKyAgICAtKj0qKSBvcHRhcmc9YGVjaG8gIiQxIiB8IHNlZCAncy9bLV9hLXpBLVowLTldKj0vLydgIDs7CisgICAgKikgb3B0YXJnPSA7OworZXNhYworCit1bnNldCBzaGlmdGVkCitjYXNlICQxIGluCisgICAgLS12ZXJzaW9ufC0tdmVyKikKKyAgICAgIGVjaG8gQFZFUlNJT05ACisgICAgICA7OworICAgIC0taGVscCkKKyAgICAgIHVzYWdlPSJ5ZXMiCisgICAgICA7OworCisgICAgLUF8LWEpCisJc2hpZnQKKwlpZiB0ZXN0ICJ4JDEiID0gIngiIDsgdGhlbgorCSAgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IGFuIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBvciBwYXNzIHBocmFzZSIKKwkgICAgZXhpdCAxCisJZmkKKyAgICAgICAgY2FzZSAkMSBpbgorICAgICAgICAgICAgTUQ1fFNIQSkKKwkgICAgQWFsZ29yaXRobT0kMQorCSAgICBzaGlmdAorCSAgICA7OworICAgICAgICAgICAgbWQ1fHNoYSkKKwkgICAgQWFsZ29yaXRobT1gZWNobyAkMSB8IHRyIGEteiBBLVpgCisJICAgIHNoaWZ0CisJICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICBhcGFzc3BocmFzZT0kMQorCSAgICBzaGlmdAorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgLVh8LXgpCisJc2hpZnQKKwlpZiB0ZXN0ICJ4JDEiID0gIngiIDsgdGhlbgorCSAgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IGFuIGVuY3J5cHRpb24gYWxnb3JpdGhtIG9yIHBhc3MgcGhyYXNlIgorCSAgICBleGl0IDEKKwlmaQorICAgICAgICBjYXNlICQxIGluCisgICAgICAgICAgICBERVN8QUVTfEFFUzEyOCkKKwkgICAgWGFsZ29yaXRobT0kMQorCSAgICBzaGlmdAorCSAgICA7OworICAgICAgICAgICAgZGVzfGFlc3xhZXMxMjgpCisJICAgIFhhbGdvcml0aG09YGVjaG8gJDEgfCB0ciBhLXogQS1aYAorCSAgICBzaGlmdAorCSAgICA7OworICAgICAgICAgICAgKikKKwkgICAgeHBhc3NwaHJhc2U9JDEKKwkgICAgc2hpZnQKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAtcm8pCisgICAgICAgIHRva2VuPSJyb3VzZXIiCisJc2hpZnQKKwk7OworICAgIC0qKQorCWVjaG8gInVua25vd24gc3Vib3B0aW9uIHRvICQwOiAkMSIKKwl1c2FnZT15ZXMKKwlkb25lPTEKKwk7OworICAgICopCisgICAgICAgIGRvbmU9MQorICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAieCR1c2FnZSIgPSAieHllcyI7IHRoZW4KKyAgICBlY2hvICIiCisgICAgZWNobyAiVXNhZ2U6IgorICAgIGVjaG8gIiAgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgWy1yb10gWy1BIGF1dGhwYXNzXSBbLVggcHJpdnBhc3NdIgorICAgIGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgWy1hIE1ENXxTSEFdIFsteCBERVN8QUVTXSBbdXNlcm5hbWVdIgorICAgIGVjaG8gIiIKKyAgICBleGl0CitmaQorCitpZiB0ZXN0ICJ4JDEiID0gIngiIDsgdGhlbgorICAgIHByb21wdD15ZXMKKyAgICBlY2hvICJFbnRlciBhIFNOTVB2MyB1c2VyIG5hbWUgdG8gY3JlYXRlOiAiCisgICAgcmVhZCB1c2VyCitlbHNlCisgICAgdXNlcj0kMQorICAgIHNoaWZ0CitmaQoraWYgdGVzdCAieCR1c2VyIiA9ICJ4IiA7IHRoZW4KKyAgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IGEgdXNlciBuYW1lIgorICAgIGV4aXQgMQorZmkKK2lmIHRlc3QgIngkYXBhc3NwaHJhc2UiID0gIngiIDsgdGhlbgorICAgIHByb21wdD15ZXMKKyAgICBlY2hvICJFbnRlciBhdXRoZW50aWNhdGlvbiBwYXNzLXBocmFzZTogIgorICAgIHJlYWQgYXBhc3NwaHJhc2UKK2ZpCitpZiB0ZXN0ICJ4JGFwYXNzcGhyYXNlIiA9ICJ4IiA7IHRoZW4KKyAgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IGFuIGF1dGhlbnRpY2F0aW9uIHBhc3MtcGhyYXNlIgorICAgIGV4aXQgMQorZmkKKyAgICBpZiB0ZXN0ICJ4JHByb21wdCIgPSAieHllcyIgLWEgIngkeHBhc3NwaHJhc2UiID0gIngiIDsgdGhlbgorICAgIGVjaG8gIkVudGVyIGVuY3J5cHRpb24gcGFzcy1waHJhc2U6ICIKKyAgICBlY2hvICIgIFtwcmVzcyByZXR1cm4gdG8gcmV1c2UgdGhlIGF1dGhlbnRpY2F0aW9uIHBhc3MtcGhyYXNlXSIKKyAgICByZWFkIHhwYXNzcGhyYXNlCitmaQorb3V0ZGlyPSJAUEVSU0lTVEVOVF9ESVJFQ1RPUllAIgorb3V0ZmlsZT0iJG91dGRpci9zbm1wZC5jb25mIgorbGluZT0iY3JlYXRlVXNlciAkdXNlciAkQWFsZ29yaXRobSBcIiRhcGFzc3BocmFzZVwiICRYYWxnb3JpdGhtICR4cGFzc3BocmFzZSIKK2VjaG8gImFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgdG8gJG91dGZpbGU6IgorZWNobyAiICAiICRsaW5lCisjIGluIGNhc2UgaXQgaGFzbid0IGV2ZXIgYmVlbiBzdGFydGVkIHlldCwgc3RhcnQgaXQuCitpZiB0ZXN0ICEgLWQgJG91dGRpciA7IHRoZW4KKyAgICBta2RpciAkb3V0ZGlyCitmaQoraWYgdGVzdCAhIC1kICRvdXRmaWxlIDsgdGhlbgorICAgIHRvdWNoICRvdXRmaWxlCitmaQorZWNobyAkbGluZSA+PiAkb3V0ZmlsZQorb3V0ZmlsZT0iQGRhdGFkaXJAL3NubXAvc25tcGQuY29uZiIKK2xpbmU9IiR0b2tlbiAkdXNlciIKK2VjaG8gImFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgdG8gJG91dGZpbGU6IgorZWNobyAiICAiICRsaW5lCitpZiB0ZXN0ICEgLWQgJG91dGZpbGUgOyB0aGVuCisgICAgdG91Y2ggJG91dGZpbGUKK2ZpCitlY2hvICRsaW5lID4+ICRvdXRmaWxlCmRpZmYgLS1naXQgYS9wZXJsL0FTTi9BU04ucG0gYi9wZXJsL0FTTi9BU04ucG0KaW5kZXggNjQzMGY3ZS4uMDA4ZTk3YiAxMDA2NDQKLS0tIGEvcGVybC9BU04vQVNOLnBtCisrKyBiL3BlcmwvQVNOL0FTTi5wbQpAQCAtNjYsNyArNjYsNyBAQAogCUFTTl9VTlNJR05FRAogCUFTTl9VTlNJR05FRDY0CiApOwotJFZFUlNJT04gPSAnNS4wNDA0JzsKKyRWRVJTSU9OID0gJzUuMDcwMyc7CiAKIHN1YiBBVVRPTE9BRCB7CiAgICAgIyBUaGlzIEFVVE9MT0FEIGlzIHVzZWQgdG8gJ2F1dG9sb2FkJyBjb25zdGFudHMgZnJvbSB0aGUgY29uc3RhbnQoKQpkaWZmIC0tZ2l0IGEvcGVybC9BU04vTWFrZWZpbGUuUEwgYi9wZXJsL0FTTi9NYWtlZmlsZS5QTAppbmRleCBmODk1YTQxLi40NTc2NzgxIDEwMDY0NAotLS0gYS9wZXJsL0FTTi9NYWtlZmlsZS5QTAorKysgYi9wZXJsL0FTTi9NYWtlZmlsZS5QTApAQCAtMjgsOSArMjgsOSBAQAogICAgICAgICAgICAgICAgICAgCiAgICAgbXkgKCRzbm1wX2xpYiwgJHNubXBfbGxpYiwgJHNlcCk7CiAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAgICAgICAkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CQotICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwiOworICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyI7CiAgICAgICAkc2VwID0gJ1xcJzsKICAgICAgICRzbm1wX2xpYl9maWxlID0gJ25ldHNubXAubGliJzsKICAgICAgICRzbm1wX2xpbmtfbGliID0gJ25ldHNubXAnOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0xODQsNyArMTg0LDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9BU04vbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmggYi9wZXJsL0FTTi9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGVybC9BU04vbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKZGlmZiAtLWdpdCBhL3BlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0gYi9wZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtCmluZGV4IDYyNDc5NjMuLjY3Yzc5MWYgMTAwNjQ0Ci0tLSBhL3BlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0KKysrIGIvcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbQpAQCAtNiw3ICs2LDcgQEAKICMjICAgc2NhbGFyIHNldHM/CiAjIyAgIG11bHRpLWhvc3RzCiAKLSRBbnlEYXRhOjpTdG9yYWdlOjpWRVJTSU9OID0gJzUuMDQwNCc7CiskQW55RGF0YTo6U3RvcmFnZTo6VkVSU0lPTiA9ICc1LjA3MDMnOwogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKIApkaWZmIC0tZ2l0IGEvcGVybC9NYWtlZmlsZS5QTCBiL3BlcmwvTWFrZWZpbGUuUEwKaW5kZXggZjcwZjk5MS4uMzFmZGM0MCAxMDA2NDQKLS0tIGEvcGVybC9NYWtlZmlsZS5QTAorKysgYi9wZXJsL01ha2VmaWxlLlBMCkBAIC0xMSw3ICsxMSw3IEBACiAgICAgJG5zY29uZmlnPSJuZXQtc25tcC1jb25maWciOyAjIGluIHBhdGggYnkgZGVmYXVsdAogICAgIG15ICVQYXJhbXMgPSAoCiAJCSAgJ05BTUUnID0+ICdCdW5kbGU6Ok5ldFNOTVAnLAotCQkgICdESVInID0+IFtxdyhkZWZhdWx0X3N0b3JlIEFTTiBPSUQgYWdlbnQgU05NUCBUcmFwUmVjZWl2ZXIpXQorCQkgICdESVInID0+IFtxdyhkZWZhdWx0X3N0b3JlIEFTTiBPSUQgYWdlbnQgU05NUCBUcmFwUmVjZWl2ZXIpXSwKIAkJICApOwogCiAgICAgIyBib2d1cywgYnV0IHRoZXNlIG9wdGlvbnMgbmVlZCB0byBiZSBwYXNzZWQgdG8gdGhlIGxvd2VyIGxldmVscwpAQCAtMjgsNyArMjgsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMTExLDcgKzExMSw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvTWFrZWZpbGUuc3Vicy5wbCBiL3BlcmwvTWFrZWZpbGUuc3Vicy5wbAppbmRleCA4MTdmYjU1Li5lM2MyNWVmIDEwMDY0NAotLS0gYS9wZXJsL01ha2VmaWxlLnN1YnMucGwKKysrIGIvcGVybC9NYWtlZmlsZS5zdWJzLnBsCkBAIC00LDcgKzQsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtODcsNyArODcsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL09JRC9NYWtlZmlsZS5QTCBiL3BlcmwvT0lEL01ha2VmaWxlLlBMCmluZGV4IDVkOTQzMzguLjZiYjE2MTYgMTAwNjQ0Ci0tLSBhL3BlcmwvT0lEL01ha2VmaWxlLlBMCisrKyBiL3BlcmwvT0lEL01ha2VmaWxlLlBMCkBAIC0yOCw5ICsyOCw5IEBACiAgICAgfQogICAgICAgICAgICAgICAgICAgCiAgICAgbXkgKCRzbm1wX2xpYiwgJHNubXBfbGxpYiwgJHNlcCk7Ci0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogICAgICAgJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwkKLSAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIjsKKyAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiOwogICAgICAgJHNlcCA9ICdcXCc7CiAgICAgICAkc25tcF9saWJfZmlsZSA9ICduZXRzbm1wLmxpYic7CiAgICAgICAkc25tcF9saW5rX2xpYiA9ICduZXRzbm1wJzsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMTg1LDcgKzE4NSw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvT0lEL09JRC5wbSBiL3BlcmwvT0lEL09JRC5wbQppbmRleCAxNWIzNzc0Li5iNzViZjFkIDEwMDY0NAotLS0gYS9wZXJsL09JRC9PSUQucG0KKysrIGIvcGVybC9PSUQvT0lELnBtCkBAIC05Miw3ICs5Miw3IEBACiAJc25tcF9vaWRfY29tcGFyZQogICAgICAgICBjb21wYXJlCiApOwotJFZFUlNJT04gPSAnNS4wNDA0JzsKKyRWRVJTSU9OID0gJzUuMDcwMyc7CiAKIHN1YiBuZXcgewogICAgIG15ICR0eXBlID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9wZXJsL09JRC9PSUQueHMgYi9wZXJsL09JRC9PSUQueHMKaW5kZXggNWQ0MWMzYS4uMTA0ODVmOSAxMDA2NDQKLS0tIGEvcGVybC9PSUQvT0lELnhzCisrKyBiL3BlcmwvT0lEL09JRC54cwpAQCAtMjgsNyArMjgsNyBAQAogbnNvX25ld2FycmF5cHRyKG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKSAKIHsKICAgICBuZXRzbm1wX29pZCAqUkVUVkFMOwotICAgIFJFVFZBTCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9vaWQpOworICAgIFJFVFZBTCA9IG1hbGxvYyhzaXplb2YobmV0c25tcF9vaWQpKTsKICAgICBSRVRWQUwtPm5hbWUgPSBSRVRWQUwtPm5hbWVidWY7CiAgICAgUkVUVkFMLT5sZW4gPSBuYW1lX2xlbjsKICAgICBtZW1jcHkoUkVUVkFMLT5uYW1lLCBuYW1lLCBuYW1lX2xlbiAqIHNpemVvZihvaWQpKTsKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgaW50IGk7CiAgICBidWZbMF0gPSAnXDAnOwogICAgZm9yIChpPTA7IGkgPCBsZW47IGkrKykgewotCXNwcmludGYoYnVmLCIuJWx1Iiwqb2JqaWQrKyk7CisJc3ByaW50ZihidWYsIi4lIiBORVRTTk1QX1BSSW8gInUiLCpvYmppZCsrKTsKIAlidWYgKz0gc3RybGVuKGJ1Zik7CiAgICB9CiAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwpAQCAtMTYwLDEyICsxNjAsMTMgQEAKICAgICBDT0RFOgogICAgICAgICBpZiAoZ2V0X3RyZWVfaGVhZCgpID09IE5VTEwpCiAgICAgICAgICAgICBuZXRzbm1wX2luaXRfbWliKCk7Ci0gICAgICAgIFJFVFZBTCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9vaWQpOworICAgICAgICBSRVRWQUwgPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfb2lkKSk7CiAgICAgICAgIFJFVFZBTC0+bmFtZSA9IFJFVFZBTC0+bmFtZWJ1ZjsKICAgICAgICAgUkVUVkFMLT5sZW4gPSBzaXplb2YoUkVUVkFMLT5uYW1lYnVmKS9zaXplb2YoUkVUVkFMLT5uYW1lYnVmWzBdKTsKICAgICAgICAgaWYgKCFzbm1wX3BhcnNlX29pZChpbml0c3RyaW5nLCAob2lkICopIFJFVFZBTC0+bmFtZSwgJlJFVFZBTC0+bGVuKSkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNhbid0IHBhcnNlOiAlc1xuIiwgaW5pdHN0cmluZyk7CiAgICAgICAgICAgICBSRVRWQUwtPmxlbiA9IDA7CisgICAgICAgICAgICBmcmVlKFJFVFZBTCk7CiAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOwogICAgICAgICB9CiAgICAgT1VUUFVUOgpAQCAtMjY2LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKChidWYgPSAodV9jaGFyICopIGNhbGxvYyhidWZfbGVuLCAxKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKChidWYgPSBuZXRzbm1wX21hbGxvYyhidWZfbGVuKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjgyLDEyICsyODMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCh0cG5vZGUtPmxhYmVsICsgc3RybGVuKHRwbm9kZS0+bGFiZWwpIC0gNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFibGUiKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLyogd2UncmUgbm90IHdpdGhpbiBhIHRhYmxlLiAgYmFkIGxvZ2ljLCBsaXR0bGUgY2hvaWNlICovCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZnJlZShidWYpOwogICAgICAgICAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIXRwZSkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfZnJlZShidWYpOwogICAgICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjk4LDYgKzMwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIChOVUxMID09CiAgICAgICAgICAgICAgICAgICAgICAodHBlID0gZ2V0X3RyZWUobmFtZSwgbmFtZV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3RyZWVfaGVhZCgpKSkpKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZnJlZShidWYpOwogICAgICAgICAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8qIFhYWDogYmV0dGVyIGVycm9yIHJlY292ZXJ5IG5lZWRlZD8gKi8KICAgICAgICAgICAgICAgICB9CkBAIC0zMjAsMTIgKzMyNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAoTlVMTCA9PQogICAgICAgICAgICAgICAgICAgICAgKGluZGV4bm9kZSA9IGdldF90cmVlKG5hbWUsIG5hbWVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF90cmVlX2hlYWQoKSkpKSkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2ZyZWUoYnVmKTsKICAgICAgICAgICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAvKiB4eHggbWVtIGxlYWsgKi8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdmJkYXRhLnR5cGUgPSBtaWJfdG9fYXNuX3R5cGUoaW5kZXhub2RlLT50eXBlKTsKIAogICAgICAgICAgICAgICAgIGlmICh2YmRhdGEudHlwZSA9PSAodV9jaGFyKSAtMSkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2ZyZWUoYnVmKTsKICAgICAgICAgICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvKiBYWFg6IG5vdCBnb29kLiAgaGFsZiBwb3B1bGF0ZWQgc3RhY2s/ICovCiAgICAgICAgICAgICAgICAgfQpAQCAtMzQ3LDkgKzM1Myw5IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvKiBwb3NzaWJsZSBtZW1vcnkgbGVhazogdmJkYXRhLmRhdGEgc2hvdWxkIGJlIGZyZWVkIGxhdGVyICovCiAgICAgICAgICAgICAgICAgaWYgKHBhcnNlX29uZV9vaWRfaW5kZXgoJm9pZHAsICZvaWRwX2xlbiwgJnZiZGF0YSwgMCkKICAgICAgICAgICAgICAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZnJlZShidWYpOwogICAgICAgICAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzYzLDkgKzM2OSwxMCBAQAogICAgICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX3ZhbHVlKCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBuYW1lLCBuYW1lX2xlbiwgJnZiZGF0YSk7CiAqLwotCisgICAgICAgICAgICAgICAgc25tcF9mcmVlX3Zhcl9pbnRlcm5hbHMoJnZiZGF0YSk7CiAgICAgICAgICAgICAgICAgYXZfcHVzaChteXJldCwgbmV3U1ZwdigoY2hhciAqKWJ1Ziwgb3V0X2xlbikpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV0c25tcF9mcmVlKGJ1Zik7CiAgICAgICAgICAgICBSRVRWQUwgPSBuZXdSVigoU1YgKilteXJldCk7CiAgICAgICAgIH0KICAgICBPVVRQVVQ6CmRpZmYgLS1naXQgYS9wZXJsL09JRC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCBiL3BlcmwvT0lEL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNGNjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL09JRC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbnByaW50X29iamlkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25wcmludF92YWx1ZSkKKwpkaWZmIC0tZ2l0IGEvcGVybC9TTk1QL01ha2VmaWxlLlBMIGIvcGVybC9TTk1QL01ha2VmaWxlLlBMCmluZGV4IDkyOGNiNjcuLmU2MTdjYjcgMTAwNjQ0Ci0tLSBhL3BlcmwvU05NUC9NYWtlZmlsZS5QTAorKysgYi9wZXJsL1NOTVAvTWFrZWZpbGUuUEwKQEAgLTMyLDkgKzMyLDkgQEAKICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBteSAoJHNubXBfbGliLCAkc25tcF9sbGliLCAkc2VwKTsKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAgICAgICAkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CQotICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwiOworICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyI7CiAgICAgICAkc2VwID0gJ1xcJzsKICAgICAgICRzbm1wX2xpYl9maWxlID0gJ25ldHNubXAubGliJzsKICAgICAgICRzbm1wX2xpbmtfbGliID0gJ25ldHNubXAnOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgbXkgKCRtaWJkaXIsICRzbm1wZCwgJHNubXB0cmFwZCk7CiAKICAgICAgICAgIyBXaW5kb3dzCi0gICAgICAgIGlmICgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSB7CisgICAgICAgIGlmICgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpIHsKICAgICAgICAgICBpZiAobGMgKCRvcHRzLT57J2luc291cmNlJ30pIGVxICJ0cnVlIikgewogICAgICAgICAgICAgJG1pYmRpciA9ICIuLi8uLi9taWJzIjsKICAgICAgICAgICAgIGlmIChsYygkb3B0cy0+eydkZWJ1Zyd9KSBlcSAidHJ1ZSIpIHsKQEAgLTE2OSw3ICsxNjksNyBAQAogCSAgICBwcm9tcHQoIlVuYWJsZSB0byBsb2NhdGUgXCJzbm1wdHJhcGRcIi4gUGxlYXNlIGVudGVyIHRoZSBwYXRoOiAiLAogCQkgICAkc25tcGRfcGF0aDEpOwogCi0gICAgICAgIGlmICgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSB7CisgICAgICAgIGlmICgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpIHsKICAgICAgICAgICAkc25tcGQgPSAkc25tcGQgLiAkc2VwIC4gInNubXBkLmV4ZSI7CiAgICAgICAgICAgJHNubXB0cmFwZCA9ICRzbm1wdHJhcGQgLiAkc2VwIC4gInNubXB0cmFwZC5leGUiOwogICAgICAgICB9CkBAIC0yMzEsNyArMjMxLDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTMxNCw3ICszMTQsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL1NOTVAvU05NUC5wbSBiL3BlcmwvU05NUC9TTk1QLnBtCmluZGV4IGU5MTRkY2MuLmEwNWNkMzggMTAwNjQ0Ci0tLSBhL3BlcmwvU05NUC9TTk1QLnBtCisrKyBiL3BlcmwvU05NUC9TTk1QLnBtCkBAIC03LDcgKzcsNyBAQAogIyAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgogCiBwYWNrYWdlIFNOTVA7Ci0kVkVSU0lPTiA9ICc1LjA0MDQnOyAgICMgY3VycmVudCByZWxlYXNlIHZlcnNpb24gbnVtYmVyCiskVkVSU0lPTiA9ICc1LjA3MDMnOyAgICMgY3VycmVudCByZWxlYXNlIHZlcnNpb24gbnVtYmVyCiAKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CkBAIC00Niw2ICs0Niw4IEBACiAgICAgICAgIHNubXBfZ2V0bmV4dAogICAgICAgICBzbm1wX3NldAogICAgICAgICBzbm1wX3RyYXAKKwlTTk1QX0FQSV9UUkFESVRJT05BTAorCVNOTVBfQVBJX1NJTkdMRQogKTsKIAogc3ViIEFVVE9MT0FEIHsKQEAgLTM0OCwxMiArMzUwLDI0IEBACiAgICAgJHNlc3MtPnRyYXAoQF8pOwogfQogCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorIyBQcmVzZXJ2ZXMgdGhlIGFiaWxpdHkgdG8gY2FsbCBNYWluTG9vcCgpIHdpdGggbm8gYXJncyBzbyB3ZSBkb24ndCAKKyMgYnJlYWsgb2xkIGNvZGUKKyMKKyMgQWx0ZXJuYXRlbHksIE1haW5Mb29wKCkgY291bGQgYmUgY2FsbGVkIGFzIGFuIG9iamVjdCBtZXRob2QsIAorIyAoICRzZXNzLT5NYWluTG9vcCgpICkgLCBzbyB0aGF0ICRzZWxmIHdpbmRzIHVwIGluIEBfLiAgVGhlbiBpdCB3b3VsZCAKKyMgYmUgbW9yZSBsaWtlIDoKKyMgbXkgJHNlbGYgPSBzaGlmdDsKKyMgLi4uLiAKKyMgU05NUDo6X21haW5fbG9vcCguLi4uLi4sICRzZWxmLT57U2Vzc1B0cn0pOworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKIHN1YiBNYWluTG9vcCB7CisgICAgbXkgJHNzID0gc2hpZnQgaWYoJlNOTVA6Ol9hcGlfbW9kZSgpID09IFNOTVA6OlNOTVBfQVBJX1NJTkdMRSgpKTsKICAgICBteSAkdGltZSA9IHNoaWZ0OwogICAgIG15ICRjYWxsYmFjayA9IHNoaWZ0OwogICAgIG15ICR0aW1lX3NlYyA9ICgkdGltZSA/IGludCAkdGltZSA6IDApOwogICAgIG15ICR0aW1lX3VzZWMgPSAoJHRpbWUgPyBpbnQoKCR0aW1lLSR0aW1lX3NlYykqMTAwMDAwMCkgOiAwKTsKLSAgICBTTk1QOjpfbWFpbl9sb29wKCR0aW1lX3NlYywkdGltZV91c2VjLCRjYWxsYmFjayk7CisgICAgU05NUDo6X21haW5fbG9vcCgkdGltZV9zZWMsJHRpbWVfdXNlYywkY2FsbGJhY2ssKGRlZmluZWQoJHNzKSA/ICRzcy0+e1Nlc3NQdHJ9IDogKCkpKTsKIH0KIAogc3ViIGZpbmlzaCB7CkBAIC00OTAsNiArNTA0LDExIEBACiAgICAgICAgJHRoaXMtPntEZXN0SG9zdH0gPSAkdGhpcy0+e0Rlc3RIb3N0fSAuICI6IiAuICR0aGlzLT57UmVtb3RlUG9ydH07CiAgICB9CiAKKyAgIGlmICgkdGhpcy0+e0Rlc3RIb3N0fSA9fiAvXihkdGxzfHRsc3xzc2gpLykgeworICAgICAgICMgb25seSB3b3JrcyB3aXRoIHZlcnNpb24gMworICAgICAgICR0aGlzLT57VmVyc2lvbn0gPSAzOworICAgfQorCiAgICBpZiAoJHRoaXMtPntWZXJzaW9ufSBlcSAnMScgb3IgJHRoaXMtPntWZXJzaW9ufSBlcSAnMicKICAgICAgICBvciAkdGhpcy0+e1ZlcnNpb259IGVxICcyYycpIHsKICAgICAgICAkdGhpcy0+e1Nlc3NQdHJ9ID0gU05NUDo6X25ld19zZXNzaW9uKCR0aGlzLT57VmVyc2lvbn0sCkBAIC01MTcsNTEgKzUzNiw4NCBAQAogICAgICAgICR0aGlzLT57Q29udGV4dH0gfHw9IAogCSAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCiAJCSAgICAgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX0NPTlRFWFQoKSkgfHwgJyc7Ci0gICAgICAgJHRoaXMtPntBdXRoUHJvdG99IHx8PSAnREVGQVVMVCc7ICMgZGVmYXVsdHMgdG8gdGhlIGxpYnJhcnkncyBkZWZhdWx0Ci0gICAgICAgJHRoaXMtPntBdXRoUGFzc30gfHw9Ci0gICAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKLQkJICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9BVVRIUEFTU1BIUkFTRSgpKSB8fAotICAgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCi0JCSAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSgpKSB8fCAnJzsKIAotICAgICAgICR0aGlzLT57QXV0aE1hc3RlcktleX0gfHw9ICcnOwotICAgICAgICR0aGlzLT57UHJpdk1hc3RlcktleX0gfHw9ICcnOwotICAgICAgICR0aGlzLT57QXV0aExvY2FsaXplZEtleX0gfHw9ICcnOwotICAgICAgICR0aGlzLT57UHJpdkxvY2FsaXplZEtleX0gfHw9ICcnOworICAgICAgIGlmICgkdGhpcy0+e0Rlc3RIb3N0fSA9fiAvXihkdGxzfHRsc3xzc2gpLykgeworCSAgICMgdGhpcyBpcyBhIHR1bm5lbGVkIHByb3RvY29sCiAKLSAgICAgICAkdGhpcy0+e1ByaXZQcm90b30gfHw9ICdERUZBVUxUJzsgICMgZGVmYXVsdHMgdG8gaHRlIGxpYnJhcnkncyBkZWZhdWx0Ci0gICAgICAgJHRoaXMtPntQcml2UGFzc30gfHw9Ci0gICAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKLQkJICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9QUklWUEFTU1BIUkFTRSgpKSB8fAotICAgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCi0JCSAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSgpKSB8fCAnJzsKLSAgICAgICAkdGhpcy0+e0VuZ2luZUJvb3RzfSA9IDAgaWYgbm90IGRlZmluZWQgJHRoaXMtPntFbmdpbmVCb290c307Ci0gICAgICAgJHRoaXMtPntFbmdpbmVUaW1lfSA9IDAgaWYgbm90IGRlZmluZWQgJHRoaXMtPntFbmdpbmVUaW1lfTsKKwkgICAkdGhpcy0+eydPdXJJZGVudGl0eSd9IHx8PSAnJzsKKwkgICAkdGhpcy0+eydUaGVpcklkZW50aXR5J30gfHw9ICcnOworCSAgICR0aGlzLT57J1RoZWlySG9zdG5hbWUnfSB8fD0gJyc7CisJICAgJHRoaXMtPnsnVHJ1c3RDZXJ0J30gfHw9ICcnOwogCi0gICAgICAgJHRoaXMtPntTZXNzUHRyfSA9IFNOTVA6Ol9uZXdfdjNfc2Vzc2lvbigkdGhpcy0+e1ZlcnNpb259LAotCQkJCQkJJHRoaXMtPntEZXN0SG9zdH0sCi0JCQkJCQkkdGhpcy0+e1JldHJpZXN9LAotCQkJCQkJJHRoaXMtPntUaW1lb3V0fSwKLQkJCQkJCSR0aGlzLT57U2VjTmFtZX0sCi0JCQkJCQkkdGhpcy0+e1NlY0xldmVsfSwKLQkJCQkJCSR0aGlzLT57U2VjRW5naW5lSWR9LAotCQkJCQkJJHRoaXMtPntDb250ZXh0RW5naW5lSWR9LAotCQkJCQkJJHRoaXMtPntDb250ZXh0fSwKLQkJCQkJCSR0aGlzLT57QXV0aFByb3RvfSwKLQkJCQkJCSR0aGlzLT57QXV0aFBhc3N9LAotCQkJCQkJJHRoaXMtPntQcml2UHJvdG99LAotCQkJCQkJJHRoaXMtPntQcml2UGFzc30sCi0JCQkJCQkkdGhpcy0+e0VuZ2luZUJvb3RzfSwKLQkJCQkJCSR0aGlzLT57RW5naW5lVGltZX0sCi0JCQkJCQkkdGhpcy0+e0F1dGhNYXN0ZXJLZXl9LAotCQkJCQkJbGVuZ3RoKCR0aGlzLT57QXV0aE1hc3RlcktleX0pLAotCQkJCQkJJHRoaXMtPntQcml2TWFzdGVyS2V5fSwKLQkJCQkJCWxlbmd0aCgkdGhpcy0+e1ByaXZNYXN0ZXJLZXl9KSwKLQkJCQkJCSR0aGlzLT57QXV0aExvY2FsaXplZEtleX0sCi0JCQkJCQlsZW5ndGgoJHRoaXMtPntBdXRoTG9jYWxpemVkS2V5fSksCi0JCQkJCQkkdGhpcy0+e1ByaXZMb2NhbGl6ZWRLZXl9LAotCQkJCQkJbGVuZ3RoKCR0aGlzLT57UHJpdkxvY2FsaXplZEtleX0pLAotCQkJCQkgICAgICAgKTsKKwkgICAkdGhpcy0+eydTZWNMZXZlbCd9ID0gJFNOTVA6OlYzX1NFQ19MRVZFTF9NQVB7J2F1dGhQcml2J307CisKKwkgICAkdGhpcy0+e1Nlc3NQdHJ9ID0KKwkgICAgIFNOTVA6Ol9uZXdfdHVubmVsZWRfc2Vzc2lvbigkdGhpcy0+e1ZlcnNpb259LAorCQkJCQkgJHRoaXMtPntEZXN0SG9zdH0sCisJCQkJCSAkdGhpcy0+e1JldHJpZXN9LAorCQkJCQkgJHRoaXMtPntUaW1lb3V0fSwKKwkJCQkJICR0aGlzLT57U2VjTmFtZX0sCisJCQkJCSAkdGhpcy0+e1NlY0xldmVsfSwKKwkJCQkJICR0aGlzLT57Q29udGV4dEVuZ2luZUlkfSwKKwkJCQkJICR0aGlzLT57Q29udGV4dH0sCisJCQkJCSAkdGhpcy0+eydPdXJJZGVudGl0eSd9LAorCQkJCQkgJHRoaXMtPnsnVGhlaXJJZGVudGl0eSd9LAorCQkJCQkgJHRoaXMtPnsnVGhlaXJIb3N0bmFtZSd9LAorCQkJCQkgJHRoaXMtPnsnVHJ1c3RDZXJ0J30sCisJCQkJCSk7CisKKworICAgICAgIH0gZWxzZSB7CisJICAgIyBVU00gb3Igc29tZSBvdGhlciBpbnRlcm5hbCBzZWN1cml0eSBwcm90b2NvbAorCisJICAgIyBVU00gc3BlY2lmaWMgcGFyYW1ldGVyczoKKwkgICAkdGhpcy0+e0F1dGhQcm90b30gfHw9ICdERUZBVUxUJzsgIyB1c2UgdGhlIGxpYnJhcnkncyBkZWZhdWx0CisJICAgJHRoaXMtPntBdXRoUGFzc30gfHw9CisJICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAorCQkJCQkJCSAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX0FVVEhQQVNTUEhSQVNFKCkpIHx8CisJCQkJCQkJICAgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCisJCQkJCQkJCQkJCQkJICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFKCkpIHx8ICcnOworCisJICAgJHRoaXMtPntBdXRoTWFzdGVyS2V5fSB8fD0gJyc7CisJICAgJHRoaXMtPntQcml2TWFzdGVyS2V5fSB8fD0gJyc7CisJICAgJHRoaXMtPntBdXRoTG9jYWxpemVkS2V5fSB8fD0gJyc7CisJICAgJHRoaXMtPntQcml2TG9jYWxpemVkS2V5fSB8fD0gJyc7CisKKwkgICAkdGhpcy0+e1ByaXZQcm90b30gfHw9ICdERUZBVUxUJzsgIyB1c2UgdGhlIGxpYnJhcnkncyBkZWZhdWx0CisJICAgJHRoaXMtPntQcml2UGFzc30gfHw9CisJICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAorCQkJCQkJCSAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX1BSSVZQQVNTUEhSQVNFKCkpIHx8CisJCQkJCQkJICAgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCisJCQkJCQkJCQkJCQkJICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFKCkpIHx8ICcnOworCSAgICR0aGlzLT57RW5naW5lQm9vdHN9ID0gMCBpZiBub3QgZGVmaW5lZCAkdGhpcy0+e0VuZ2luZUJvb3RzfTsKKwkgICAkdGhpcy0+e0VuZ2luZVRpbWV9ID0gMCBpZiBub3QgZGVmaW5lZCAkdGhpcy0+e0VuZ2luZVRpbWV9OworCisJICAgJHRoaXMtPntTZXNzUHRyfSA9CisJICAgICBTTk1QOjpfbmV3X3YzX3Nlc3Npb24oJHRoaXMtPntWZXJzaW9ufSwKKwkJCQkgICAkdGhpcy0+e0Rlc3RIb3N0fSwKKwkJCQkgICAkdGhpcy0+e1JldHJpZXN9LAorCQkJCSAgICR0aGlzLT57VGltZW91dH0sCisJCQkJICAgJHRoaXMtPntTZWNOYW1lfSwKKwkJCQkgICAkdGhpcy0+e1NlY0xldmVsfSwKKwkJCQkgICAkdGhpcy0+e1NlY0VuZ2luZUlkfSwKKwkJCQkgICAkdGhpcy0+e0NvbnRleHRFbmdpbmVJZH0sCisJCQkJICAgJHRoaXMtPntDb250ZXh0fSwKKwkJCQkgICAkdGhpcy0+e0F1dGhQcm90b30sCisJCQkJICAgJHRoaXMtPntBdXRoUGFzc30sCisJCQkJICAgJHRoaXMtPntQcml2UHJvdG99LAorCQkJCSAgICR0aGlzLT57UHJpdlBhc3N9LAorCQkJCSAgICR0aGlzLT57RW5naW5lQm9vdHN9LAorCQkJCSAgICR0aGlzLT57RW5naW5lVGltZX0sCisJCQkJICAgJHRoaXMtPntBdXRoTWFzdGVyS2V5fSwKKwkJCQkgICBsZW5ndGgoJHRoaXMtPntBdXRoTWFzdGVyS2V5fSksCisJCQkJICAgJHRoaXMtPntQcml2TWFzdGVyS2V5fSwKKwkJCQkgICBsZW5ndGgoJHRoaXMtPntQcml2TWFzdGVyS2V5fSksCisJCQkJICAgJHRoaXMtPntBdXRoTG9jYWxpemVkS2V5fSwKKwkJCQkgICBsZW5ndGgoJHRoaXMtPntBdXRoTG9jYWxpemVkS2V5fSksCisJCQkJICAgJHRoaXMtPntQcml2TG9jYWxpemVkS2V5fSwKKwkJCQkgICBsZW5ndGgoJHRoaXMtPntQcml2TG9jYWxpemVkS2V5fSksCisJCQkJICApOworICAgICAgIH0KICAgIH0KICAgIHVubGVzcyAoJHRoaXMtPntTZXNzUHRyfSkgewogICAgICAgIHdhcm4oInVuYWJsZSB0byBjcmVhdGUgc2Vzc2lvbiIpIGlmICRTTk1QOjp2ZXJib3NlOwpAQCAtNzE0LDcgKzc2Niw3IEBACiAJICAgIGlmICgkcGFyc2VfaW5kZXhlcykgewogCQkjIGdldCBpbmRleGVzCiAJCW15IEBpbmRleGVzID0KLQkJICBAeyRTTk1QOjpNSUJ7JHRleHRub2RlfXsnY2hpbGRyZW4nfVswXXsnaW5kZXhlcyd9IHx8IFtdIH07CisJCSAgQHskU05NUDo6TUlCeyR0ZXh0bm9kZX17J2NoaWxkcmVuJ31bMF17J2luZGV4ZXMnfSB8fCBbXX07CiAJCSMgcXVpY2sgdHJhbnNsYXRlIGludG8gYSBoYXNoCiAJCW1hcCB7ICRpbmRleGVzeyRffSA9IDE7IH0gQGluZGV4ZXM7CiAJICAgIH0KQEAgLTEzNjcsNiArMTQxOSw3IEBACiAgICAgIHBhcmVudCA9PiAwLCAgICMgcGFyZW50IG5vZGUKICAgICAgY2hpbGRyZW4gPT4gMCwgIyBhcnJheSByZWZlcmVuY2Ugb2YgY2hpbGRyZW4gbm9kZXMKICAgICAgaW5kZXhlcyA9PiAwLCAgIyByZXR1cm5zIGFycmF5IG9mIGNvbHVtbiBsYWJlbHMKKyAgICAgaW1wbGllZCA9PiAwLCAgIyBib29sZWFuOiBpcyB0aGUgbGFzdCBpbmRleCBJTVBMSUVECiAgICAgIHZhcmJpbmRzID0+IDAsICMgcmV0dXJucyBhcnJheSBvZiB0cmFwL25vdGlmaWNhdGlvbiB2YXJiaW5kcwogICAgICBuZXh0Tm9kZSA9PiAwLCAjIG5leHQgbGV4aWNvIG5vZGUgKEJVRyEgZG9lcyBub3QgcmV0dXJuIGluIGxleGljbyBvcmRlcikKICAgICAgdHlwZSA9PiAwLCAgICAgIyByZXR1cm5zIHNpbXBsZSB0eXBlIChzZWUgZ2V0VHlwZSBmb3IgdmFsdWVzKQpAQCAtMTUwNyw3NyArMTU2MCwxNDggQEAKIAogVGhlIGZvbGxvd2luZyBhcmd1bWVudHMgbWF5IGJlIHBhc3NlZCB0byBuZXcgYXMgYSBoYXNoLgogCis9aGVhZDIgQmFzaWMgT3B0aW9ucworCiA9b3ZlciA0CiAKID1pdGVtIERlc3RIb3N0CiAKLWRlZmF1bHQgJ2xvY2FsaG9zdCcsIGhvc3RuYW1lIG9yIGlwIGFkZHIgb2YgU05NUCBhZ2VudAorSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiB0aGUgU05NUCBhZ2VudCB5b3Ugd2FudCB0byB0YWxrIHRvLgorU3BlY2lmaWVkIGluIE5ldC1TTk1QIGZvcm1hdHRlZCBhZ2VudCBhZGRyZXNzZXMuICBUaGVzZSBhZGRyZXNzZXMKK3R5cGljYWxseSBsb29rIGxpa2Ugb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAKLT1pdGVtIENvbW11bml0eQorICBsb2NhbGhvc3QKKyAgdGNwOmxvY2FsaG9zdAorICB0bHM6bG9jYWxob3N0CisgIHRsczpsb2NhbGhvc3Q6OTg3NgorICB1ZHA2Ols6OjFdOjk4NzYKKyAgdW5peDovc29tZS9wYXRoL3RvL2ZpbGUvc29ja2V0CiAKLWRlZmF1bHQgJ3B1YmxpYycsIFNOTVAgY29tbXVuaXR5IHN0cmluZyAodXNlZCBmb3IgYm90aCBSL1cpCitEZWZhdWx0cyB0byAnbG9jYWxob3N0Jy4KIAogPWl0ZW0gVmVyc2lvbgogCi1kZWZhdWx0IHRha2VuIGZyb20gbGlicmFyeSBjb25maWd1cmF0aW9uIC0gcHJvYmFibHkgMyBbMSwgMiAoc2FtZSBhcyAyYyksIDJjLCAzXQorU05NUCB2ZXJzaW9uIHRvIHVzZS4KIAotPWl0ZW0gUmVtb3RlUG9ydAotCi1kZWZhdWx0ICcxNjEnLCBhbGxvdyByZW1vdGUgVURQIHBvcnQgdG8gYmUgb3ZlcnJpZGVuCitUaGUgZGVmYXVsdCBpcyB0YWtlbiBmcm9tIGxpYnJhcnkgY29uZmlndXJhdGlvbiAtIHByb2JhYmx5IDMgWzEsIDIKKyhzYW1lIGFzIDJjKSwgMmMsIDNdLgogCiA9aXRlbSBUaW1lb3V0CiAKLWRlZmF1bHQgJzEwMDAwMDAnLCBtaWNyby1zZWNvbmRzIGJlZm9yZSByZXRyeQorVGhlIG51bWJlciBvZiBtaWNyby1zZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc2VuZGluZyBhIHJlcXVlc3QuCisKK1RoZSBkZWZhdWx0IGlzICcxMDAwMDAwJwogCiA9aXRlbSBSZXRyaWVzCiAKLWRlZmF1bHQgJzUnLCByZXRyaWVzIGJlZm9yZSBmYWlsdXJlCitUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGEgcmVxdWVzdC4KKworVGhlIGRlZmF1bHQgaXMgJzUnCiAKID1pdGVtIFJldHJ5Tm9TdWNoCiAKLWRlZmF1bHQgJzAnLCBpZiBlbmFibGVkIE5PU1VDSCBlcnJvcnMgaW4gJ2dldCcgcGR1cyB3aWxsCitJZiBlbmFibGVkIE5PU1VDSCBlcnJvcnMgaW4gJ2dldCcgcGR1cyB3aWxsCiBiZSByZXBhaXJlZCwgcmVtb3ZpbmcgdGhlIHZhcmJpbmQgaW4gZXJyb3IsIGFuZCByZXNlbnQgLQogdW5kZWYgd2lsbCBiZSByZXR1cm5lZCBmb3IgYWxsIE5PU1VDSCB2YXJiaW5kcywgd2hlbiBzZXQKIHRvICcwJyB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIHRoZSBlbnRpcmUgZ2V0IHJlcXVlc3QKIHdpbGwgZmFpbCBvbiBhbnkgTk9TVUNIIGVycm9yIChhcHBsaWVzIHRvIHYxIG9ubHkpCiAKK1RoZSBkZWZhdWx0IGlzICcwJy4KKworPWJhY2sKKworPWhlYWQyIFNOTVB2My9UTFMgT3B0aW9ucworCis9b3ZlcgorCis9aXRlbSBPdXJJZGVudGl0eQorCitPdXIgWC41MDkgaWRlbnRpdHkgdG8gdXNlLCB3aGljaCBzaG91bGQgZWl0aGVyIGJlIGEgZmluZ2VycHJpbnQgb3IgdGhlCitmaWxlbmFtZSB0aGF0IGhvbGRzIHRoZSBjZXJ0aWZpY2F0ZS4KKworPWl0ZW0gVGhlaXJJZGVudGl0eQorCitUaGUgcmVtb3RlIHNlcnZlcidzIGlkZW50aXR5IHRvIGNvbm5lY3QgdG8sIHNwZWNpZmllZCBhcyBlaWh0ZXIgYQorZmluZ2VycHJpbnQgb3IgYSBmaWxlIG5hbWUuICBFaXRoZXIgdGhpcyBtdXN0IGJlIHNwZWNpZmllZCwgb3IgdGhlCitob3N0bmFtZSBiZWxvdyBhbG9uZyB3aXRoIGEgdHJ1c3QgYW5jaG9yLgorCis9aXRlbSBUaGVpckhvc3RuYW1lCisKK1RoZSByZW1vdGUgc2VydmVyJ3MgaG9zdG5hbWUgdGhhdCBpcyBleHBlY3RlZC4gIElmIHRoZWlyIGNlcnRpZmljYXRlCit3YXMgc2lnbmVkIGJ5IGEgQ0EgdGhlbiB0aGVpciBob3N0bmFtZSBwcmVzZW50ZWQgaW4gdGhlIGNlcnRpZmljYXRlCittdXN0IG1hdGNoIHRoaXMgdmFsdWUgb3IgdGhlIGNvbm5lY3Rpb24gZmFpbHMgdG8gYmUgZXN0YWJsaXNoZWQgKHRvCithdm9pZCBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzKS4KKworPWl0ZW0gVHJ1c3RDZXJ0CisKK0EgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSB0byB1c2UgYSB0cnVzdCBhbmNob3IgKGxpa2UgYSBDQSBjZXJ0aWZpY2F0ZSkKK2ZvciB2ZXJpZnlpbmcgYSByZW1vdGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuICBJZiBhIENBIGNlcnRpZmljYXRlIGlzCit1c2VkIHRvIHZhbGlkYXRlIGEgY2VydGlmaWNhdGUgdGhlbiB0aGUgVGhlaXJIb3N0bmFtZSBwYXJhbWV0ZXIgbXVzdAorYWxzbyBiZSBzcGVjaWZpZWQgdG8gZW5zdXJlIHRoZWlyIHByZXNlbnRlIGhvc3RuYW1lIGluIHRoZSBjZXJ0aWZpY2F0ZQorbWF0Y2hlcy4KKworPWJhY2sKKworPWhlYWQyIFNOTVB2My9VU00gT3B0aW9ucworCis9b3ZlcgorCiA9aXRlbSBTZWNOYW1lCiAKLWRlZmF1bHQgJ2luaXRpYWwnLCBzZWN1cml0eSBuYW1lICh2MykKK1RoZSBTTk1QdjMgc2VjdXJpdHkgbmFtZSB0byB1c2UgKG1vc3QgZm9yIFNOTVB2MyB3aXRoIFVTTSkuCisKK1RoZSBkZWZhdWx0IGlzICdpbml0aWFsJy4KIAogPWl0ZW0gU2VjTGV2ZWwKIAotZGVmYXVsdCAnbm9BdXRoTm9Qcml2Jywgc2VjdXJpdHkgbGV2ZWwgW25vQXV0aE5vUHJpdiwKLWF1dGhOb1ByaXYsIGF1dGhQcml2XSAodjMpCitUaGUgU05NUHYzIHNlY3VyaXR5IGxldmVsIHRvIHVzZSBbbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdl0gKHYzKQorCitUaGUgZGVmYXVsdCBpcyAnbm9BdXRoTm9Qcml2Jy4KIAogPWl0ZW0gU2VjRW5naW5lSWQKIAotZGVmYXVsdCA8bm9uZT4sIHNlY3VyaXR5IGVuZ2luZUlELCB3aWxsIGJlIHByb2JlZCBpZiBub3QKK1RoZSBTTk1QdjMgc2VjdXJpdHkgZW5naW5lSUQgdG8gdXNlIChpZiB0aGUgc25tcHYzIHNlY3VyaXR5IG1vZGVsCituZWVkcyBpdDsgZm9yIGV4YW1wbGUgVVNNKS4KKworVGhlIGRlZmF1bHQgaXMgPG5vbmU+LCBzZWN1cml0eSBlbmdpbmVJRCBhbmQgaXQgd2lsbCBiZSBwcm9iZWQgaWYgbm90CiBzdXBwbGllZCAodjMpCiAKID1pdGVtIENvbnRleHRFbmdpbmVJZAogCi1kZWZhdWx0IDxTZWNFbmdpbmVJZD4sIGNvbnRleHQgZW5naW5lSUQsIHdpbGwgYmUKLXByb2JlZCBpZiBub3Qgc3VwcGxpZWQgKHYzKQorVGhlIFNOTVB2MyBjb250ZXh0IGVuZ2luZUlEIHRvIHVzZS4KKworVGhlIGRlZmF1bHQgaXMgdGhlIDxub25lPiBhbmQgd2lsbCBiZSBzZXQgZWl0aGVyIHRvIHRoZSBTZWNFbmdpbmVJZAordmFsdWUgaWYgc2V0IG9yIGRpc2NvdmVyZWQgb3Igd2lsbCBiZSBkaXNjb3ZlcmVkIGluIG90aGVyIHdheXMgaWYKK3VzaW5nIFRMUyAoUkZDNTM0MyBiYXNlZCBkaXNjb3ZlcnkpLgogCiA9aXRlbSBDb250ZXh0CiAKLWRlZmF1bHQgJycsIGNvbnRleHQgbmFtZSAodjMpCitUaGUgU05NUHYzIGNvbnRleHQgbmFtZSB0byB1c2UuCisKK1RoZSBkZWZhdWx0IGlzICcnIChhbiBlbXB0eSBzdHJpbmcpCiAKID1pdGVtIEF1dGhQcm90bwogCi1kZWZhdWx0ICdNRDUnLCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCBbTUQ1LCBTSEFdICh2MykKK1RoZSBTTk1QdjMvVVNNIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIHRvIHVzZSBbTUQ1LCBTSEFdLgorCitUaGUgZGVmYXVsdCBpcyAnTUQ1Jy4KIAogPWl0ZW0gQXV0aFBhc3MKIAorVGhlIFNOTVB2My9VU00gYXV0aGVudGljYXRpb24gcGFzc3BocmFzZSB0byB1c2UuCisKIGRlZmF1bHQgPG5vbmU+LCBhdXRoZW50aWNhdGlvbiBwYXNzcGhyYXNlCiAKID1pdGVtIFByaXZQcm90bwogCi1kZWZhdWx0ICdERVMnLCBwcml2YWN5IHByb3RvY29sIFtERVMsIEFFU10gKHYzKQorVGhlIFNOTVB2My9VU00gcHJpdmFjeSBwcm90b2NvbCB0byB1c2UgW0RFUywgQUVTXS4KKworVGhlIGRlZmF1bHQgaXMgJ0RFUycuCiAKID1pdGVtIFByaXZQYXNzCiAKK1RoZSBTTk1QdjMvVVNNIHByaXZhY3kgcGFzc3BocmFzZSB0byB1c2UuCisKIGRlZmF1bHQgPG5vbmU+LCBwcml2YWN5IHBhc3NwaHJhc2UgKHYzKQogCiA9aXRlbSBBdXRoTWFzdGVyS2V5CkBAIC0xNTkxLDYgKzE3MTUsMjAgQEAKIERpcmVjdGx5IHNwZWNpZmllZCBTTk1QdjMgVVNNIHVzZXIga2V5cyAodXNlZCBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5CiB0aGUga2V5cyBpbnN0ZWFkIG9mIGRlcml2aW5nIHRoZW0gZnJvbSBhIHBhc3N3b3JkIGFzIGFib3ZlKS4KIAorPWJhY2sKKworPWhlYWQyIFNOTVB2MSBhbmQgU05NUHYyYyBPcHRpb25zCisKKz1pdGVtIENvbW11bml0eQorCitGb3IgU05NUHYxIGFuZCBTTk1QdjJjLCB0aGUgY2xlYXItdGV4dCBjb21tdW5pdHkgbmFtZSB0byB1c2UuCisKK1RoZSBkZWZhdWx0IGlzICdwdWJsaWMnLgorCis9aGVhZDIgT3RoZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zCisKKz1vdmVyCisKID1pdGVtIFZhckZvcm1hdHMKIAogZGVmYXVsdCAndW5kZWYnLCB1c2VkIGJ5ICdmZ2V0W25leHRdJywgaG9sZHMgYW4gaGFzaApAQCAtMTY4NCw2ICsxODIyLDExIEBACiAKIGludGVybmFsIGZpZWxkIHVzZWQgdG8gY2FjaGUgYSBjcmVhdGVkIHNlc3Npb24gc3RydWN0dXJlCiAKKz1pdGVtIFJlbW90ZVBvcnQKKworT2Jzb2xldGUuICBQbGVhc2UgdXNlIHRoZSBEZXN0SG9zdCBzcGVjaWZpZXIgdG8gaW5kaWNhdGUgdGhlIGhvc3RuYW1lCithbmQgcG9ydCBjb21iaW5hdGlvbiBpbnN0ZWFkIG9mIHRoaXMgcGFyYW1ldC4KKwogPWJhY2sKIAogPWhlYWQyIFNOTVA6OlNlc3Npb24gbWV0aG9kcwpAQCAtMTg4Miw3ICsyMDI1LDcgQEAKIAogTm90ZSAyOiBjYWxsYmFjayBzdXBwb3J0IGlzIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBTTk1QIG1vZHVsZSB2ZXJzaW9uCiA1LjA0IGFuZCBhYm92ZS4gIFRvIHRlc3QgZm9yIHRoaXMgaW4gY29kZSBpbnRlbmRpbmcgdG8gc3VwcG9ydCBib3RoCi12ZXJzaW9ucyBwcmlvciB0byA1LjA0IGFuZCBhbmQgNS4wNCBhbmQgdXAsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIHdvcms6Cit2ZXJzaW9ucyBwcmlvciB0byA1LjA0IGFuZCA1LjA0IGFuZCB1cCwgdGhlIGZvbGxvd2luZyBzaG91bGQgd29yazoKIAogICBpZiAoJHJlc3BvbnNlID0gJHNlc3MtPmdldHRhYmxlKCdpZlRhYmxlJywgY2FsbGJhY2sgPT4gXCZteV9zdWIpKSB7CiAgICAgICAjIGdvdCBhIHJlc3BvbnNlLCBnZXR0YWJsZSBkb2Vzbid0IHN1cHBvcnQgY2FsbGJhY2sKQEAgLTIzMTUsNiArMjQ1OCwxNCBAQAogCiByZXR1cm5zIHRoZSBSRUZFUkVOQ0UgY2xhdXNlCiAKKz1pdGVtIGluZGV4ZXMKKworcmV0dXJucyB0aGUgb2JqZWN0cyBpbiB0aGUgSU5ERVggY2xhdXNlCisKKz1pdGVtIGltcGxpZWQKKworcmV0dXJucyB0cnVlIGlmIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgSU5ERVggaXMgSU1QTElFRAorCiA9YmFjawogCiA9aGVhZDEgTUlCIEZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvcGVybC9TTk1QL1NOTVAueHMgYi9wZXJsL1NOTVAvU05NUC54cwppbmRleCA5MDI0MGExLi4yYTczNGU4IDEwMDY0NAotLS0gYS9wZXJsL1NOTVAvU05NUC54cworKysgYi9wZXJsL1NOTVAvU05NUC54cwpAQCAtNTksMTYgKzU5LDYgQEAKICNkZWZpbmUgR19WT0lEIEdfRElTQ0FSRAogI2VuZGlmCiAKLSNpZmRlZiBXSU4zMgotI2RlZmluZSBTT0NLX1NUQVJUVVAgd2luc29ja19zdGFydHVwKCkKLSNkZWZpbmUgU09DS19DTEVBTlVQIHdpbnNvY2tfY2xlYW51cCgpCi0jZGVmaW5lIHN0cmNhc2VjbXAgX3N0cmljbXAKLSNkZWZpbmUgc3RybmNhc2VjbXAgX3N0cm5pY21wCi0jZWxzZQotI2RlZmluZSBTT0NLX1NUQVJUVVAKLSNkZWZpbmUgU09DS19DTEVBTlVQCi0jZW5kaWYKLQogI2luY2x1ZGUgInBlcmxzbm1wLmgiCiAKICNkZWZpbmUgU1VDQ0VTUyAxCkBAIC03Niw2ICs2Niw5IEBACiAKICNkZWZpbmUgWkVST19CVVRfVFJVRSAiMCBidXQgdHJ1ZSIKIAorI2RlZmluZSBTTk1QX0FQSV9UUkFESVRJT05BTCAwCisjZGVmaW5lIFNOTVBfQVBJX1NJTkdMRSAxCisKICNkZWZpbmUgVkFSQklORF9UQUdfRiAwCiAjZGVmaW5lIFZBUkJJTkRfSUlEX0YgMQogI2RlZmluZSBWQVJCSU5EX1ZBTF9GIDIKQEAgLTk1LDYgKzg4LDkgQEAKIC8qIEludGVybmFsIGZsYWcgdG8gZGV0ZXJtaW5lIHNubXBfbWFpbl9sb29wKCkgc2hvdWxkIHJldHVybiBhZnRlciBjYWxsYmFjayAqLwogc3RhdGljIGludCBtYWlubG9vcF9maW5pc2ggPSAwOwogCisvKiBJbnRlcm5hbCBmbGFnIHRvIGRldGVybWluZSB3aGljaCBBUEkgd2UncmUgdXNpbmcgKi8KK3N0YXRpYyBpbnQgYXBpX21vZGUgPSBTTk1QX0FQSV9UUkFESVRJT05BTDsKKwogLyogdGhlc2Ugc2hvdWxkIGJlIHBhcnQgb2YgdHJhbnNmb3JtX29pZHMuaCA/ICovCiAjZGVmaW5lIFVTTV9BVVRIX1BST1RPX01ENV9MRU4gMTAKICNkZWZpbmUgVVNNX0FVVEhfUFJPVE9fU0hBX0xFTiAxMApAQCAtMTEyLDcgKzEwOCw2IEBACiAKIHN0YXRpYyB2b2lkIF9fcmVjYWxjX3RpbWVvdXQgXygoc3RydWN0IHRpbWV2YWwqLHN0cnVjdCB0aW1ldmFsKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwqLHN0cnVjdCB0aW1ldmFsKiwgaW50KiApKTsKLXN0YXRpYyBpbl9hZGRyX3QgX19wYXJzZV9hZGRyZXNzIF8oKGNoYXIqKSk7CiBzdGF0aWMgaW50IF9faXNfbnVtZXJpY19vaWQgXygoY2hhciopKTsKIHN0YXRpYyBpbnQgX19pc19sZWFmIF8oKHN0cnVjdCB0cmVlKikpOwogc3RhdGljIGludCBfX3RyYW5zbGF0ZV9hcHBsX3R5cGUgXygoY2hhciopKTsKQEAgLTE4Niw2ICsxODEsOSBAQAogc3RhdGljIGludCBfYnVsa3dhbGtfYXN5bmNfY2IgXygoaW50IG9wLCBTbm1wU2Vzc2lvbiAqc3MsIGludCByZXFpZCwKIAkJCQkgICAgIG5ldHNubXBfcGR1ICpwZHUsIHZvaWQgKmNvbnRleHRfcHRyKSk7CiAKKy8qIFByb3RvdHlwZSBmb3IgZXJyb3IgaGFuZGxlciAqLwordm9pZCBzbm1wX3JldHVybl9lcnIoIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNzLCBTViAqZXJyX3N0ciwgU1YgKmVycl9udW0sIFNWICplcnJfaW5kICk7CisKIC8qIFN0cnVjdHVyZSB0byBob2xkIHZhbGlkIGNvbnRleHQgc2Vzc2lvbnMuICovCiBzdHJ1Y3QgdmFsaWRfY29udGV4dHMgewogICAgd2Fsa19jb250ZXh0CSoqdmFsaWQ7CS8qIEFycmF5IG9mIHZhbGlkIHdhbGtfY29udGV4dCBwb2ludGVycy4gICAgKi8KQEAgLTIwOSw3ICsyMDcsNiBAQAogCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQogCiBjaGFyCV9kZWJ1Z3hbMTAyNF07CS8qIFNwYWNlIHRvIHNwcmludGYoKSBpbnRvIC0gdXNlZCBieSBzcHJpbnRfb2JqaWQoKS4gKi8KLSNkZWZpbmUgREJEQ0woeCkgeAogCiAvKiB3cmFwcGVyIGFyb3VuZCBzbnByaW50X29iamlkIHRvIHNucHJpbnRfb2JqaWQgdG8gcmV0dXJuIHRoZSBwb2ludGVyIAogICAgaW5zdGVhZCBvZiBsZW5ndGggKi8KQEAgLTIyMCw2ICsyMTcsNyBAQAogICByZXR1cm4gX2RlYnVneDsKIH0KICAKKyNkZWZpbmUgREJEQ0woeCkgeAogI2Vsc2UJLyogREVCVUdHSU5HICovCiAjZGVmaW5lIERCRENMKHgpIAogI2RlZmluZSBEQk9VVApAQCAtMjQ0LDE1ICsyNDIsMTYgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaGF2ZV9pbml0ZWQgPSAxOwogCi0gICAgICAgIHNubXBfc2V0X3F1aWNrX3ByaW50KDEpOworICAgICAgICBTT0NLX1NUQVJUVVA7CisKKyAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5ULCAxKTsKICAgICAgICAgaW5pdF9zbm1wKGFwcG5hbWUpOwogICAgIAogICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfRE9OVF9CUkVBS0RPV05fT0lEUywgMSk7CiAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1BSSU5UX1NVRkZJWF9PTkxZLCAxKTsKIAluZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX09JRF9PVVRQVVRfU1VGRklYKTsKLSAgICAgICAgU09DS19TVEFSVFVQOwotICAgIAogICAgIH0KIAogc3RhdGljIHZvaWQKQEAgLTI5NSwyNiArMjk0LDYgQEAKICAgIH0KIH0KIAotc3RhdGljIGluX2FkZHJfdAotX19wYXJzZV9hZGRyZXNzKGFkZHJlc3MpCi1jaGFyICphZGRyZXNzOwotewotICAgIGluX2FkZHJfdCBhZGRyOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0KLSAgICBpZiAoKGFkZHIgPSBpbmV0X2FkZHIoYWRkcmVzcykpICE9IC0xKQotCXJldHVybiBhZGRyOwotICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShhZGRyZXNzKTsKLSAgICBpZiAoaHAgPT0gTlVMTCl7Ci0gICAgICAgIHJldHVybiAoLTEpOyAvKiBlcnJvciB2YWx1ZSAqLwotICAgIH0gZWxzZSB7Ci0JbWVtY3B5KCZzYWRkci5zaW5fYWRkciwgaHAtPmhfYWRkciwgaHAtPmhfbGVuZ3RoKTsKLQlyZXR1cm4gc2FkZHIuc2luX2FkZHIuc19hZGRyOwotICAgIH0KLQotfQotCiBzdGF0aWMgaW50CiBfX2lzX251bWVyaWNfb2lkIChvaWRzdHIpCiBjaGFyKiBvaWRzdHI7CkBAIC01ODUsNyArNTY0LDcgQEAKICAgIGludCBpOwogICAgYnVmWzBdID0gJ1wwJzsKICAgIGZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKLQlzcHJpbnRmKGJ1ZiwiLiVsdSIsKm9iamlkKyspOworCXNwcmludGYoYnVmLCIuJSIgTkVUU05NUF9QUklvICJ1Iiwqb2JqaWQrKyk7CiAJYnVmICs9IHN0cmxlbihidWYpOwogICAgfQogICAgcmV0dXJuIFNVQ0NFU1M7CkBAIC02MTgsNyArNTk3LDcgQEAKICAgIGNwID0gYnVmOwogICAgd2hpbGUgKCpidWYpIHsKICAgICAgIGlmICgqYnVmKysgPT0gJy4nKSB7Ci0gICAgICAgICBzc2NhbmYoY3AsICIlbHUiLCBvYmppZCsrKTsKKyAgICAgICAgIHNzY2FuZihjcCwgIiUiIE5FVFNOTVBfUFJJbyAidSIsIG9iamlkKyspOwogICAgICAgICAgLyogKm9iamlkKysgPSBhdG9pKGNwKTsgKi8KICAgICAgICAgICgqbGVuKSsrOwogICAgICAgICAgY3AgPSBidWY7CkBAIC02MjgsNyArNjA3LDcgQEAKICAgICAgICAgIH0KICAgICAgIH0KICAgIH0KLSAgIHNzY2FuZihjcCwgIiVsdSIsIG9iamlkKyspOworICAgc3NjYW5mKGNwLCAiJSIgTkVUU05NUF9QUklvICJ1Iiwgb2JqaWQrKyk7CiAgICAvKiAqb2JqaWQrKyA9IGF0b2koY3ApOyAqLwogICAgKCpsZW4pKys7CiAgICByZXR1cm4gU1VDQ0VTUzsKQEAgLTc3OSwxMSArNzU4LDEzIEBACiAgICAgICAgICAgIGljcCA9IGxjcDsKICAgICAgICAgfQogICAgICAgfQotICAgICAgaWYgKCFmb3VuZF9sYWJlbCAmJiBpc2FscGhhKChpbnQpKmxjcCkpIGZvdW5kX2xhYmVsID0gMTsKKyAgICAgIGlmICghZm91bmRfbGFiZWwgJiYgaXNhbHBoYSgodW5zaWduZWQgY2hhcikqbGNwKSkgZm91bmRfbGFiZWwgPSAxOwogICAgICAgbGNwLS07CiAgICB9CiAKLSAgIGlmICghZm91bmRfbGFiZWwgfHwgKCFpc2RpZ2l0KChpbnQpKihpY3ArMSkpICYmIChmbGFnICYgRkFJTF9PTl9OVUxMX0lJRCkpKQorICAgaWYgKCFmb3VuZF9sYWJlbAorICAgICAgIHx8ICgoaWNwICsgMSA+PSBuYW1lICsgbGVuIHx8ICFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSooaWNwKzEpKSkKKyAgICAgICAgICAgJiYgKGZsYWcgJiBGQUlMX09OX05VTExfSUlEKSkpCiAgICAgICByZXR1cm4oRkFJTFVSRSk7CiAKICAgIGlmIChmbGFnICYgTk9OX0xFQUZfTkFNRSkgeyAvKiBkb250IGtub3cgd2hlcmUgdG8gc3RhcnQgaW5zdGFuY2UgaWQgKi8KQEAgLTk2MSwxNiArOTQyLDE2IEBACiAKICAgIGlmICghc29pZF9zdHIgfHwgISpzb2lkX3N0cikgcmV0dXJuIFNVQ0NFU1M7Lyogc3VjY2Vzc2Z1bGx5IGFkZGVkIG5vdGhpbmcgKi8KICAgIGlmICgqc29pZF9zdHIgPT0gJy4nKSBzb2lkX3N0cisrOwotICAgc29pZF9idWYgPSBzdHJkdXAoc29pZF9zdHIpOworICAgc29pZF9idWYgPSBuZXRzbm1wX3N0cmR1cChzb2lkX3N0cik7CiAgICBpZiAoIXNvaWRfYnVmKQogICAgICAgIHJldHVybiBGQUlMVVJFOwogICAgY3AgPSBzdHJ0b2tfcihzb2lkX2J1ZiwiLiIsJnN0KTsKICAgIHdoaWxlIChjcCkgewotICAgICBzc2NhbmYoY3AsICIlbHUiLCAmKGRvaWRfYXJyWygqZG9pZF9hcnJfbGVuKSsrXSkpOworICAgICBzc2NhbmYoY3AsICIlIiBORVRTTk1QX1BSSW8gInUiLCAmKGRvaWRfYXJyWygqZG9pZF9hcnJfbGVuKSsrXSkpOwogICAgICAvKiBkb2lkX2FyclsoKmRvaWRfYXJyX2xlbikrK10gPSAgYXRvaShjcCk7ICovCiAgICAgIGNwID0gc3RydG9rX3IoTlVMTCwiLiIsJnN0KTsKICAgIH0KLSAgIGZyZWUoc29pZF9idWYpOworICAgbmV0c25tcF9mcmVlKHNvaWRfYnVmKTsKICAgIHJldHVybihTVUNDRVNTKTsKIH0KIApAQCAtOTkxLDI3ICs5NzIsMjYgQEAKICAgICBpbnQgcmV0ID0gU1VDQ0VTUzsKIAogICAgIGlmIChwZHUtPnZhcmlhYmxlcyA9PSBOVUxMKXsKLQlwZHUtPnZhcmlhYmxlcyA9IHZhcnMgPQotICAgICAgICAgICAobmV0c25tcF92YXJpYWJsZV9saXN0ICopY2FsbG9jKDEsc2l6ZW9mKG5ldHNubXBfdmFyaWFibGVfbGlzdCkpOworCXBkdS0+dmFyaWFibGVzID0gdmFycworICAgICAgICAgICAgPSBuZXRzbm1wX2NhbGxvYygxLCBzaXplb2YobmV0c25tcF92YXJpYWJsZV9saXN0KSk7CiAgICAgfSBlbHNlIHsKIAlmb3IodmFycyA9IHBkdS0+dmFyaWFibGVzOwogICAgICAgICAgICAgdmFycy0+bmV4dF92YXJpYWJsZTsKICAgICAgICAgICAgIHZhcnMgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlKQogCSAgICAvKkVYSVQqLzsKLQl2YXJzLT5uZXh0X3ZhcmlhYmxlID0KLSAgICAgICAgICAgKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKWNhbGxvYygxLHNpemVvZihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QpKTsKKwl2YXJzLT5uZXh0X3ZhcmlhYmxlID0gbmV0c25tcF9jYWxsb2MoMSwgc2l6ZW9mKG5ldHNubXBfdmFyaWFibGVfbGlzdCkpOwogCXZhcnMgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlOwogICAgIH0KIAogICAgIHZhcnMtPm5leHRfdmFyaWFibGUgPSBOVUxMOwotICAgIHZhcnMtPm5hbWUgPSAob2lkICopbWFsbG9jKG5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOworICAgIHZhcnMtPm5hbWUgPSBuZXRzbm1wX21hbGxvYyhuYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKICAgICBtZW1jcHkoKGNoYXIgKil2YXJzLT5uYW1lLCAoY2hhciAqKW5hbWUsIG5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwogICAgIHZhcnMtPm5hbWVfbGVuZ3RoID0gbmFtZV9sZW5ndGg7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICBjYXNlIFRZUEVfSU5URUdFUjoKICAgICAgIGNhc2UgVFlQRV9JTlRFR0VSMzI6CiAgICAgICAgIHZhcnMtPnR5cGUgPSBBU05fSU5URUdFUjsKLSAgICAgICAgdmFycy0+dmFsLmludGVnZXIgPSAobG9uZyAqKW1hbGxvYyhzaXplb2YobG9uZykpOworICAgICAgICB2YXJzLT52YWwuaW50ZWdlciA9IG5ldHNubXBfbWFsbG9jKHNpemVvZihsb25nKSk7CiAgICAgICAgIGlmICh2YWwpCiAgICAgICAgICAgICAqKHZhcnMtPnZhbC5pbnRlZ2VyKSA9IHN0cnRvbCh2YWwsTlVMTCwwKTsKICAgICAgICAgZWxzZSB7CkBAIC0xMDM0LDcgKzEwMTQsNyBAQAogICAgICAgY2FzZSBUWVBFX1VJTlRFR0VSOgogICAgICAgICB2YXJzLT50eXBlID0gQVNOX1VJTlRFR0VSOwogYXNfdWludDoKLSAgICAgICAgdmFycy0+dmFsLmludGVnZXIgPSAobG9uZyAqKW1hbGxvYyhzaXplb2YobG9uZykpOworICAgICAgICB2YXJzLT52YWwuaW50ZWdlciA9IG5ldHNubXBfbWFsbG9jKHNpemVvZihsb25nKSk7CiAgICAgICAgIGlmICh2YWwpCiAgICAgICAgICAgICBzc2NhbmYodmFsLCIlbHUiLHZhcnMtPnZhbC5pbnRlZ2VyKTsKICAgICAgICAgZWxzZSB7CkBAIC0xMDU1LDIwICsxMDM1LDIwIEBACiAgICAgICBjYXNlIFRZUEVfT1BBUVVFOgogICAgICAgICB2YXJzLT50eXBlID0gQVNOX09DVEVUX1NUUjsKIGFzX29jdDoKLSAgICAgICAgdmFycy0+dmFsLnN0cmluZyA9ICh1X2NoYXIgKiltYWxsb2MobGVuKTsKKyAgICAgICAgdmFycy0+dmFsLnN0cmluZyA9IG5ldHNubXBfbWFsbG9jKGxlbik7CiAgICAgICAgIHZhcnMtPnZhbF9sZW4gPSBsZW47CiAgICAgICAgIGlmICh2YWwgJiYgbGVuKQogICAgICAgICAgICAgbWVtY3B5KChjaGFyICopdmFycy0+dmFsLnN0cmluZywgdmFsLCBsZW4pOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJldCA9IEZBSUxVUkU7Ci0gICAgICAgICAgICB2YXJzLT52YWwuc3RyaW5nID0gKHVfY2hhciopc3RyZHVwKCIiKTsKKyAgICAgICAgICAgIHZhcnMtPnZhbC5zdHJpbmcgPSAodV9jaGFyICopIG5ldHNubXBfc3RyZHVwKCIiKTsKICAgICAgICAgICAgIHZhcnMtPnZhbF9sZW4gPSAwOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIFRZUEVfSVBBRERSOgogICAgICAgICB2YXJzLT50eXBlID0gQVNOX0lQQUREUkVTUzsKLSAgICAgICAgdmFycy0+dmFsLmludGVnZXIgPSAobG9uZyAqKW1hbGxvYyhzaXplb2YoaW5fYWRkcl90KSk7CisgICAgICAgIHZhcnMtPnZhbC5pbnRlZ2VyID0gbmV0c25tcF9tYWxsb2Moc2l6ZW9mKGluX2FkZHJfdCkpOwogICAgICAgICBpZiAodmFsKQogICAgICAgICAgICAgKigoaW5fYWRkcl90ICopdmFycy0+dmFsLmludGVnZXIpID0gaW5ldF9hZGRyKHZhbCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTA4OCw3ICsxMDY4LDcgQEAKIAkgICAgcmV0ID0gRkFJTFVSRTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHZhcnMtPnZhbF9sZW4gKj0gc2l6ZW9mKG9pZCk7Ci0gICAgICAgICAgICB2YXJzLT52YWwub2JqaWQgPSAob2lkICopbWFsbG9jKHZhcnMtPnZhbF9sZW4pOworICAgICAgICAgICAgdmFycy0+dmFsLm9iamlkID0gbmV0c25tcF9tYWxsb2ModmFycy0+dmFsX2xlbik7CiAgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKil2YXJzLT52YWwub2JqaWQsIChjaGFyICopb2lkYnVmLCB2YXJzLT52YWxfbGVuKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExMjAsOCArMTEwMCwxMiBAQAogICAgbG9uZyBjb21tYW5kID0gcGR1LT5jb21tYW5kOwogICAgKnJlc3BvbnNlID0gTlVMTDsKIHJldHJ5OgotCi0gICBzdGF0dXMgPSBzbm1wX3N5bmNoX3Jlc3BvbnNlKHNzLCBwZHUsIHJlc3BvbnNlKTsKKwlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJeworCQlzdGF0dXMgPSBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uoc3MsIHBkdSwgcmVzcG9uc2UpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IHNubXBfc3luY2hfcmVzcG9uc2Uoc3MsIHBkdSwgcmVzcG9uc2UpOworCX07CiAKICAgIGlmICgoKnJlc3BvbnNlID09IE5VTEwpICYmIChzdGF0dXMgPT0gU1RBVF9TVUNDRVNTKSkgc3RhdHVzID0gU1RBVF9FUlJPUjsKIApAQCAtMTE1OCwxMCArMTE0MiwxMCBAQAogICAgICAgICAgICAgLyogaW4gU05NUHYyYywgU05NUHYydSwgU05NUHYyKiwgYW5kIFNOTVB2MyBQRFVzICovCiAgICAgICAgICAgICBjYXNlIFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU6CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgc3ZfY2F0cHYoZXJyX3N0cl9zdiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilzbm1wX2VycnN0cmluZygoKnJlc3BvbnNlKS0+ZXJyc3RhdCkpOwotICAgICAgICAgICAgICAgc3Zfc2V0aXYoZXJyX251bV9zdiwgKCpyZXNwb25zZSktPmVycnN0YXQpOwotCSAgICAgICBzdl9zZXRpdihlcnJfaW5kX3N2LCAoKnJlc3BvbnNlKS0+ZXJyaW5kZXgpOworCQkJCXN2X2NhdHB2KGVycl9zdHJfc3YsCisJCQkJCShjaGFyKilzbm1wX2VycnN0cmluZygoKnJlc3BvbnNlKS0+ZXJyc3RhdCkpOworCQkJCXN2X3NldGl2KGVycl9udW1fc3YsICgqcmVzcG9uc2UpLT5lcnJzdGF0KTsKKwkJCQlzdl9zZXRpdihlcnJfaW5kX3N2LCAoKnJlc3BvbnNlKS0+ZXJyaW5kZXgpOwogICAgICAgICAgICAgICAgc3RhdHVzID0gKCpyZXNwb25zZSktPmVycnN0YXQ7CiAgICAgICAgICAgICAgICBicmVhazsKIAkgfQpAQCAtMTE2OSwxMyArMTE1MywxMiBAQAogCiAgICAgICBjYXNlIFNUQVRfVElNRU9VVDoKICAgICAgIGNhc2UgU1RBVF9FUlJPUjoKLSAgICAgICAgICBzdl9jYXRwdihlcnJfc3RyX3N2LCAoY2hhciopc25tcF9hcGlfZXJyc3RyaW5nKHNzLT5zX3NubXBfZXJybm8pKTsKLSAgICAgICAgICBzdl9zZXRpdihlcnJfbnVtX3N2LCBzcy0+c19zbm1wX2Vycm5vKTsKKwkgICAgIHNubXBfcmV0dXJuX2VycihzcywgZXJyX3N0cl9zdiwgZXJyX251bV9zdiwgZXJyX2luZF9zdik7CiAgICAgICAgICBicmVhazsKIAogICAgICAgZGVmYXVsdDoKKwkgICAgIHNubXBfcmV0dXJuX2VycihzcywgZXJyX3N0cl9zdiwgZXJyX251bV9zdiwgZXJyX2luZF9zdik7CiAgICAgICAgICBzdl9jYXRwdihlcnJfc3RyX3N2LCAic2VuZF9zeW5jX3BkdTogdW5rbm93biBzdGF0dXMiKTsKLSAgICAgICAgIHN2X3NldGl2KGVycl9udW1fc3YsIHNzLT5zX3NubXBfZXJybm8pOwogICAgICAgICAgYnJlYWs7CiAgICB9CiAKQEAgLTEyNDgsNyArMTIzMSwxMiBAQAogICAgICAgICByZXBseV9wZHUtPmNvbW1hbmQgPSBTTk1QX01TR19SRVNQT05TRTsKICAgICAgICAgcmVwbHlfcGR1LT5yZXFpZCA9IHBkdS0+cmVxaWQ7CiAgICAgICAgIHJlcGx5X3BkdS0+ZXJyc3RhdCA9IHJlcGx5X3BkdS0+ZXJyaW5kZXggPSAwOwotICAgICAgICBzbm1wX3NlbmQoc3MsIHJlcGx5X3BkdSk7CisJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCXsKKyAgICAgICAgCXNubXBfc2Vzc19zZW5kKHNzLCByZXBseV9wZHUpOworCX0gZWxzZSB7CisJICAgICAgICBzbm1wX3NlbmQoc3MsIHJlcGx5X3BkdSk7CisJfQogICAgICAgfSBlbHNlIHsKICAgICAgICAgd2FybigiQ291bGRuJ3QgY2xvbmUgUERVIGZvciBpbmZvcm0gcmVzcG9uc2UiKTsKICAgICAgIH0KQEAgLTEyNjYsNyArMTI1NCw3IEBACiAJY3AgPSB0cmFuc3BvcnQtPmZfZm10YWRkcih0cmFuc3BvcnQsIHBkdS0+dHJhbnNwb3J0X2RhdGEsCiAJCQkJICBwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCk7CiAJYXZfcHVzaCh0cmFwbGlzdCwgbmV3U1ZwdihjcCwgc3RybGVuKGNwKSkpOwotCWZyZWUoY3ApOworCW5ldHNubXBfZnJlZShjcCk7CiAgICAgICB9IGVsc2UgewogCS8qICBUaGlzIHNob3VsZG4ndCBldmVyIGhhcHBlbjsgZXZlcnkgc2Vzc2lvbiBoYXMgYSB0cmFuc3BvcnQuICAqLwogCWF2X3B1c2godHJhcGxpc3QsIG5ld1NWcHYoIiIsIDApKTsKQEAgLTE4MzMsMTMgKzE4MjEsMTcgQEAKICAgICoqIHNubXBfYXN5bmNfc2VuZCgpIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcWlkIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KICAgICovCiAgICBpZiAoU3ZUUlVFKGNvbnRleHQtPnBlcmxfY2IpKSB7Ci0gICAgICByZXFpZCA9IHNubXBfYXN5bmNfc2VuZChzcywgcGR1LCBfYnVsa3dhbGtfYXN5bmNfY2IsICh2b2lkICopY29udGV4dCk7CisgICAgaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorICAgIHsKKyAgICAgcmVxaWQgPSBzbm1wX3Nlc3NfYXN5bmNfc2VuZChzcywgcGR1LCBfYnVsa3dhbGtfYXN5bmNfY2IsICh2b2lkICopY29udGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgcmVxaWQgPSBzbm1wX2FzeW5jX3NlbmQoc3MsIHBkdSwgX2J1bGt3YWxrX2FzeW5jX2NiLCAodm9pZCAqKWNvbnRleHQpOworICAgIH0KIAogICAgICAgREJQUlQoMiwoREJPVVQgImJ1bGt3YWxrX3NlbmRfcGR1KCk6IHNubXBfYXN5bmNfc2VuZCA9PiAweCUwOFhcbiIsIHJlcWlkKSk7CiAKICAgICAgIGlmIChyZXFpZCA9PSAwKSB7Ci0JIHN2X3NldHB2KCplcnJfc3RyX3N2cCwgKGNoYXIqKXNubXBfYXBpX2VycnN0cmluZyhzcy0+c19zbm1wX2Vycm5vKSk7Ci0JIHN2X3NldGl2KCplcnJfbnVtX3N2cCwgc3MtPnNfc25tcF9lcnJubyk7CisJIHNubXBfcmV0dXJuX2VycihzcywgKmVycl9udW1fc3ZwLCAqZXJyX2luZF9zdnAsICplcnJfc3RyX3N2cCk7CiAJIGdvdG8gZXJyOwogICAgICAgfQogCkBAIC0yNDU3LDYgKzI0NDksOCBAQAogCVRFU1RfQ09OU1RBTlQodmFsdWUsIG5hbWUsIFNOTVBfREVGQVVMVF9USU1FT1VUKTsKIAlURVNUX0NPTlNUQU5UMih2YWx1ZSwgbmFtZSwgU05NUF9ERUZBVUxUX1ZFUlNJT04sCiAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04pOworCVRFU1RfQ09OU1RBTlQodmFsdWUsIG5hbWUsIFNOTVBfQVBJX1NJTkdMRSk7CisJVEVTVF9DT05TVEFOVCh2YWx1ZSwgbmFtZSwgU05NUF9BUElfVFJBRElUSU9OQUwpOwogCWJyZWFrOwogICAgIGNhc2UgJ1gnOgogICAgICAgICAgICAgZ290byBub3RfdGhlcmU7CkBAIC0yNDcxLDYgKzI0NjUsNDkgQEAKICAgICByZXR1cm4gRU5PRU5UOwogfQogCisvKiAKKyAgU2luY2Ugc19zbm1wX2Vycm5vIGNhbid0IGJlIHRydXN0ZWQgd2l0aCBTaW5nbGUgU2Vzc2lvbiwgdGhpcyBjYWxscyBlaXRoZXIKKyAgc25tcF9lcnJvciBvciBzbm1wX3Nlc3NfZXJyb3IgdG8gcG9wdWxhdGUgRXJyb3JTdHIsRXJyb3JOdW0sIGFuZCBFcnJvckluZAorICBpbiBTTk1QOjpTZXNzaW9uIG9iamVjdHMKKyovCit2b2lkIHNubXBfcmV0dXJuX2Vyciggc3RydWN0IHNubXBfc2Vzc2lvbiAqc3MsIFNWICplcnJfc3RyLCBTViAqZXJyX251bSwgU1YgKmVycl9pbmQgKQoreworCWludCBlcnI7CisJaW50IGxpYmVycjsKKwljaGFyICplcnJzdHI7CisJaWYoc3MgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwl7CisJCXNubXBfc2Vzc19lcnJvcihzcywgJmVyciwgJmxpYmVyciwgJmVycnN0cik7CisJfSBlbHNlIHsKKwkJc25tcF9lcnJvcihzcywgJmVyciwgJmxpYmVyciwgJmVycnN0cik7CisJfQorCXN2X2NhdHB2KGVycl9zdHIsIGVycnN0cik7CisJc3Zfc2V0aXYoZXJyX251bSwgbGliZXJyKTsKKwlzdl9zZXRpdihlcnJfaW5kLCBlcnIpOworCW5ldHNubXBfZnJlZShlcnJzdHIpOworfQorCisKKy8qIAorICBpbnQgc25tcF9hcGlfbW9kZSggaW50IG1vZGUgKSAKKyAgUmV0dXJucyBvciBzZXRzIHN0YXRpYyBpbnQgYXBpX21vZGUgZm9yIHJlZmVyZW5jZSBieSBmdW5jdGlvbnMgdG8gZGV0ZXJtaW5lCisgIHdoZXRoZXIgdG8gdXNlIFRyYWRpdGlvbmFsIChub24tdGhyZWFkc2FmZSkgb3IgU2luZ2xlLVNlc3Npb24gKHRocmVhZHNhZmUpCisgIFNOTVAgQVBJIGNhbGxzLgorIAorICBDYWxsIHdpdGggKGludClOVUxMIHRvIHJldHVybiB0aGUgY3VycmVudCBtb2RlLCBvciB3aXRoIFNOTVBfQVBJX1RSQURJVElPTkFMCisgIG9yIFNOTVBfQVBJX1NJTkdMRSB0byBzZXQgdGhlIGN1cnJlbnQgbW9kZS4gIChkZWZpbmVkIGFib3ZlKQorIAorICBwbSBzaWRlIGNhbGwgZGVmYXVsdHMgdG8gKGludClOVUxMCisqLworaW50IHNubXBfYXBpX21vZGUoIGludCBtb2RlICkKK3sKKwlpZiAobW9kZSA9PSAwKQorCQlyZXR1cm4gYXBpX21vZGU7CisJYXBpX21vZGUgPSBtb2RlOworCXJldHVybiBhcGlfbW9kZTsKK30KIAogTU9EVUxFID0gU05NUAkJUEFDS0FHRSA9IFNOTVAJCVBSRUZJWCA9IHNubXAKIApAQCAtMjUwMCw2ICsyNTM3LDEzIEBACiAgICAgQ09ERToKICAgICAgICAgX19saWJyYXJpZXNfaW5pdChhcHBuYW1lKTsKIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisjIFBlcmwgY2FsbCBkZWZhdWx0cyB0byAoaW50KU5VTEwgd2hlbiBnaXZlbiBubyBhcmdzLCBzbyBpdCB3aWxsIHJldHVybgorIyB0aGUgY3VycmVudCBhcGlfbW9kZSB2YWx1ZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgCitzbm1wX2FwaV9tb2RlKG1vZGU9MCkKKwlpbnQgbW9kZQogCiBTbm1wU2Vzc2lvbiAqCiBzbm1wX25ld19zZXNzaW9uKHZlcnNpb24sIGNvbW11bml0eSwgcGVlciwgbHBvcnQsIHJldHJpZXMsIHRpbWVvdXQpCkBAIC0yNTQ1LDcgKzI1ODksMTIgQEAKICAgICAgICAgICAgc2Vzc2lvbi50aW1lb3V0ID0gdGltZW91dDsgLyogMTAwMDAwMEwgKi8KICAgICAgICAgICAgc2Vzc2lvbi5hdXRoZW50aWNhdG9yID0gTlVMTDsKIAotICAgICAgICAgICBzcyA9IHNubXBfb3Blbigmc2Vzc2lvbik7CisJICAgaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCSAgIHsKKwkgICAgICAgICAgIHNzID0gc25tcF9zZXNzX29wZW4oJnNlc3Npb24pOworCSAgIH0gZWxzZSB7CisJCSAgIHNzID0gc25tcF9vcGVuKCZzZXNzaW9uKTsKKwkgICB9CiAKICAgICAgICAgICAgaWYgKHNzID09IE5VTEwpIHsKIAkgICAgICBpZiAodmVyYm9zZSkgd2FybigiZXJyb3I6c25tcF9uZXdfc2Vzc2lvbjogQ291bGRuJ3Qgb3BlbiBTTk1QIHNlc3Npb24iKTsKQEAgLTI1OTcsNyArMjY0Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBlbmQ7CiAJICAgfQogCi0JICAgc2Vzc2lvbi5wZWVybmFtZSA9IHN0cmR1cChwZWVyKTsKKwkgICBzZXNzaW9uLnBlZXJuYW1lID0gcGVlcjsKICAgICAgICAgICAgc2Vzc2lvbi5yZXRyaWVzID0gcmV0cmllczsgLyogNSAqLwogICAgICAgICAgICBzZXNzaW9uLnRpbWVvdXQgPSB0aW1lb3V0OyAvKiAxMDAwMDAwTCAqLwogICAgICAgICAgICBzZXNzaW9uLmF1dGhlbnRpY2F0b3IgPSBOVUxMOwpAQCAtMjcxNCwxOCArMjc2MywxMTggQEAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICBzcyA9IHNubXBfb3Blbigmc2Vzc2lvbik7CisJICAgaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCSAgIHsKKwkgICAgICAgICAgIHNzID0gc25tcF9zZXNzX29wZW4oJnNlc3Npb24pOworCSAgIH0gZWxzZSB7CisJCSAgIHNzID0gc25tcF9vcGVuKCZzZXNzaW9uKTsKKwkgICB9CiAKICAgICAgICAgICAgaWYgKHNzID09IE5VTEwpIHsKIAkgICAgICBpZiAodmVyYm9zZSkgd2FybigiZXJyb3I6c25tcF9uZXdfdjNfc2Vzc2lvbjpDb3VsZG4ndCBvcGVuIFNOTVAgc2Vzc2lvbiIpOwogICAgICAgICAgICB9CiAgICAgICAgIGVuZDoKICAgICAgICAgICAgUkVUVkFMID0gc3M7Ci0JICAgZnJlZSAoc2Vzc2lvbi5jb250ZXh0RW5naW5lSUQpOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5UHJpdkxvY2FsS2V5KTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eVByaXZQcm90byk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlBdXRoTG9jYWxLZXkpOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5QXV0aFByb3RvKTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5jb250ZXh0RW5naW5lSUQpOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5RW5naW5lSUQpOwogCX0KICAgICAgICAgT1VUUFVUOgogICAgICAgICBSRVRWQUwKIAorU25tcFNlc3Npb24gKgorc25tcF9uZXdfdHVubmVsZWRfc2Vzc2lvbih2ZXJzaW9uLCBwZWVyLCByZXRyaWVzLCB0aW1lb3V0LCBzZWNfbmFtZSwgc2VjX2xldmVsLCBjb250ZXh0X2VuZ19pZCwgY29udGV4dCwgb3VyX2lkZW50aXR5LCB0aGVpcl9pZGVudGl0eSwgdGhlaXJfaG9zdG5hbWUsIHRydXN0X2NlcnQpCisgICAgICAgIGludAl2ZXJzaW9uCisgICAgICAgIGNoYXIgKglwZWVyCisgICAgICAgIGludAlyZXRyaWVzCisgICAgICAgIGludAl0aW1lb3V0CisgICAgICAgIGNoYXIgKiAgc2VjX25hbWUKKyAgICAgICAgaW50ICAgICBzZWNfbGV2ZWwKKyAgICAgICAgY2hhciAqICBjb250ZXh0X2VuZ19pZAorICAgICAgICBjaGFyICogIGNvbnRleHQKKyAgICAgICAgY2hhciAqICBvdXJfaWRlbnRpdHkKKyAgICAgICAgY2hhciAqICB0aGVpcl9pZGVudGl0eQorICAgICAgICBjaGFyICogIHRoZWlyX2hvc3RuYW1lCisgICAgICAgIGNoYXIgKiAgdHJ1c3RfY2VydAorCUNPREU6CisJeworCSAgIFNubXBTZXNzaW9uIHNlc3Npb24gPSB7MH07CisJICAgU25tcFNlc3Npb24gKnNzID0gTlVMTDsKKyAgICAgICAgICAgaW50IHZlcmJvc2UgPSBTdklWKHBlcmxfZ2V0X3N2KCJTTk1QOjp2ZXJib3NlIiwgMHgwMSB8IDB4MDQpKTsKKworICAgICAgICAgICBfX2xpYnJhcmllc19pbml0KCJwZXJsIik7CisKKyAgICAgICAgICAgc2Vzc2lvbi52ZXJzaW9uID0gdmVyc2lvbjsKKworCSAgIHNlc3Npb24ucGVlcm5hbWUgPSBwZWVyOworICAgICAgICAgICBzZXNzaW9uLnJldHJpZXMgPSByZXRyaWVzOyAvKiA1ICovCisgICAgICAgICAgIHNlc3Npb24udGltZW91dCA9IHRpbWVvdXQ7IC8qIDEwMDAwMDBMICovCisgICAgICAgICAgIHNlc3Npb24uY29udGV4dE5hbWVMZW4gPSBzdHJsZW4oY29udGV4dCk7CisgICAgICAgICAgIHNlc3Npb24uY29udGV4dE5hbWUgPSBjb250ZXh0OworICAgICAgICAgICBzZXNzaW9uLnNlY3VyaXR5TmFtZUxlbiA9IHN0cmxlbihzZWNfbmFtZSk7CisgICAgICAgICAgIHNlc3Npb24uc2VjdXJpdHlOYW1lID0gc2VjX25hbWU7CisgICAgICAgICAgIHNlc3Npb24uc2VjdXJpdHlMZXZlbCA9IHNlY19sZXZlbDsKKyAgICAgICAgICAgc2Vzc2lvbi5zZWN1cml0eU1vZGVsID0gTkVUU05NUF9UU01fU0VDVVJJVFlfTU9ERUw7CisgICAgICAgICAgIHNlc3Npb24uY29udGV4dEVuZ2luZUlETGVuID0KKyAgICAgICAgICAgICAgaGV4X3RvX2JpbmFyeTIoKHVfY2hhciopY29udGV4dF9lbmdfaWQsIHN0cmxlbihjb250ZXh0X2VuZ19pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmc2Vzc2lvbi5jb250ZXh0RW5naW5lSUQpOworCisgICAgICAgICAgIC8qIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gc3RvcmUgKi8KKyAgICAgICAgICAgaWYgKCFzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3QoKTsKKyAgICAgICAgICAgICAgIHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24gPQorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInRyYW5zcG9ydF9jb25maWd1cmF0aW9uOmZpZm8iKTsKKyAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGNvbnRhaW5lclxuIik7CisgICAgICAgICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24tPmNvbXBhcmUgPQorICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKikKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWdfY29tcGFyZTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIChvdXJfaWRlbnRpdHkgJiYgb3VyX2lkZW50aXR5WzBdICE9ICdcMCcpCisgICAgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoIm91cl9pZGVudGl0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3VyX2lkZW50aXR5KSk7CisKKyAgICAgICAgICAgaWYgKHRoZWlyX2lkZW50aXR5ICYmIHRoZWlyX2lkZW50aXR5WzBdICE9ICdcMCcpCisgICAgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoInRoZWlyX2lkZW50aXR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpcl9pZGVudGl0eSkpOworCisgICAgICAgICAgIGlmICh0aGVpcl9ob3N0bmFtZSAmJiB0aGVpcl9ob3N0bmFtZVswXSAhPSAnXDAnKQorICAgICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKCJ0aGVpcl9ob3N0bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXJfaG9zdG5hbWUpKTsKKworICAgICAgICAgICBpZiAodHJ1c3RfY2VydCAmJiB0cnVzdF9jZXJ0WzBdICE9ICdcMCcpCisgICAgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoInRydXN0X2NlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydXN0X2NlcnQpKTsKKyAgICAgICAgICAgCisKKyAgICAgICAgICAgc3MgPSBzbm1wX29wZW4oJnNlc3Npb24pOworCisgICAgICAgICAgIGlmIChzcyA9PSBOVUxMKSB7CisJICAgICAgaWYgKHZlcmJvc2UpIHdhcm4oImVycm9yOnNubXBfbmV3X3YzX3Nlc3Npb246Q291bGRuJ3Qgb3BlbiBTTk1QIHNlc3Npb24iKTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIFJFVFZBTCA9IHNzOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5UHJpdkxvY2FsS2V5KTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eVByaXZQcm90byk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlBdXRoTG9jYWxLZXkpOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5QXV0aFByb3RvKTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5jb250ZXh0RW5naW5lSUQpOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5RW5naW5lSUQpOworCX0KKyAgICAgICAgT1VUUFVUOgorICAgICAgICBSRVRWQUwKIAogU25tcFNlc3Npb24gKgogc25tcF91cGRhdGVfc2Vzc2lvbihzZXNzX3JlZiwgdmVyc2lvbiwgY29tbXVuaXR5LCBwZWVyLCBscG9ydCwgcmV0cmllcywgdGltZW91dCkKQEAgLTI3NjgsOCArMjkxNyw4IEBACiAJICAgfQogICAgICAgICAgICAvKiBXQVJOSU5HIExFQUtBR0UgYnV0IEkgY2FudCBmcmVlIGxpYiBtZW1vcnkgdW5kZXIgd2luMzIgKi8KICAgICAgICAgICAgc3MtPmNvbW11bml0eV9sZW4gPSBzdHJsZW4oKGNoYXIgKiljb21tdW5pdHkpOwotICAgICAgICAgICBzcy0+Y29tbXVuaXR5ID0gKHVfY2hhciAqKXN0cmR1cChjb21tdW5pdHkpOwotCSAgIHNzLT5wZWVybmFtZSA9IHN0cmR1cChwZWVyKTsKKyAgICAgICAgICAgc3MtPmNvbW11bml0eSA9ICh1X2NoYXIgKiluZXRzbm1wX3N0cmR1cChjb21tdW5pdHkpOworCSAgIHNzLT5wZWVybmFtZSA9IG5ldHNubXBfc3RyZHVwKHBlZXIpOwogCSAgIHNzLT5sb2NhbF9wb3J0ID0gbHBvcnQ7CiAgICAgICAgICAgIHNzLT5yZXRyaWVzID0gcmV0cmllczsgLyogNSAqLwogICAgICAgICAgICBzcy0+dGltZW91dCA9IHRpbWVvdXQ7IC8qIDEwMDAwMDBMICovCkBAIC0yOTI1LDYgKzMwNzQsNyBAQAogICAgICAgICAgICBpbnQgdXNlX2VudW1zOwogICAgICAgICAgICBzdHJ1Y3QgZW51bV9saXN0ICplcDsKICAgICAgICAgICAgaW50IGJlc3RfZ3Vlc3M7CSAgIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIAogICAgICAgICAgICBOZXcgKDAsIG9pZF9hcnIsIE1BWF9PSURfTEVOLCBvaWQpOwogCkBAIC0zMDExLDE1ICszMTYxLDE5IEBACiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnBlcmxfY2IgPSBuZXdTVnN2KHBlcmxfY2FsbGJhY2spOwogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5zZXNzX3JlZiA9IG5ld1JWX2luYyhTdlJWKHNlc3NfcmVmKSk7CiAKKwkJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCQl7CisgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfc2Vzc19hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihzdGF0dXMpKSk7IC8qIHB1c2ggdGhlIHJlcWlkPz8gKi8KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwotICAgICAgICAgICAgICAgICAgICBzdl9jYXRwdigqZXJyX3N0cl9zdnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilzbm1wX2FwaV9lcnJzdHJpbmcoc3MtPnNfc25tcF9lcnJubykpOwotICAgICAgICAgICAgICAgICAgICBzdl9zZXRpdigqZXJyX251bV9zdnAsIHNzLT5zX3NubXBfZXJybm8pOworCQkJCQlzbm1wX3JldHVybl9lcnIoc3MsICplcnJfc3RyX3N2cCwgKmVycl9udW1fc3ZwLCAqZXJyX2luZF9zdnApOwogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoJnN2X3VuZGVmKTsKICAgICAgICAgICAgICAgICAgfQogCQkgZ290byBkb25lOwpAQCAtMzA0Miw2ICszMTk2LDkgQEAKICAgICAgICAgICAgICAgLyogQlVHISEhIG5lZWQgdG8gcmV0dXJuIGFuIGVycm9yIHZhbHVlICovCiAgICAgICAgICAgICAgIFhQVVNIcygmc3ZfdW5kZWYpOyAvKiBubyBtZW0gb3IgYmFkIGFyZ3MgKi8KICAgICAgICAgICAgfQorI2Vsc2UgIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICAgICB3YXJuKCJlcnJvcjogTmV0LVNOTVAgd2FzIGNvbXBpbGVkIHVzaW5nIC0tZW5hYmxlLXJlYWQtb25seSwgc2V0KCkgY2FuIG5vdCBiZSB1c2VkLiIpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogZG9uZToKICAgICAgICAgICAgU2FmZWZyZWUob2lkX2Fycik7CiAgICAgICAgIH0KQEAgLTMxOTQsMTUgKzMzNTEsMTkgQEAKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+cGVybF9jYiA9IG5ld1NWc3YocGVybF9jYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnNlc3NfcmVmID0gbmV3U1ZzdihzZXNzX3JlZik7CiAKKwkJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCQl7CisJCSBzdGF0dXMgPSBzbm1wX3Nlc3NfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCisJCQkJCSAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHN0YXR1cykpKTsgLyogcHVzaCB0aGUgcmVxaWQ/PyAqLwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X2NhdHB2KCplcnJfc3RyX3N2cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKXNubXBfYXBpX2VycnN0cmluZyhzcy0+c19zbm1wX2Vycm5vKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X3NldGl2KCplcnJfbnVtX3N2cCwgc3MtPnNfc25tcF9lcnJubyk7CisJICAJICAgIHNubXBfcmV0dXJuX2VycihzcywgKmVycl9udW1fc3ZwLCAqZXJyX2luZF9zdnAsICplcnJfc3RyX3N2cCk7ICAKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKCZzdl91bmRlZik7CiAgICAgICAgICAgICAgICAgIH0KIAkJIGdvdG8gZG9uZTsKQEAgLTM0MzEsMTUgKzM1OTIsMTkgQEAKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+cGVybF9jYiA9IG5ld1NWc3YocGVybF9jYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnNlc3NfcmVmID0gbmV3U1ZzdihzZXNzX3JlZik7CiAKKwkJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCQl7CisgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfc2Vzc19hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihzdGF0dXMpKSk7IC8qIHB1c2ggdGhlIHJlcWlkPz8gKi8KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwotICAgICAgICAgICAgICAgICAgICBzdl9jYXRwdigqZXJyX3N0cl9zdnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilzbm1wX2FwaV9lcnJzdHJpbmcoc3MtPnNfc25tcF9lcnJubykpOwotICAgICAgICAgICAgICAgICAgICBzdl9zZXRpdigqZXJyX251bV9zdnAsIHNzLT5zX3NubXBfZXJybm8pOworCQkJCQlzbm1wX3JldHVybl9lcnIoc3MsICplcnJfbnVtX3N2cCwgKmVycl9pbmRfc3ZwLCAqZXJyX3N0cl9zdnApOwogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoJnN2X3VuZGVmKTsKICAgICAgICAgICAgICAgICAgfQogCQkgZ290byBkb25lOwpAQCAtMzY2OSwxNSArMzgzNCwxOSBAQAogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5wZXJsX2NiID0gbmV3U1ZzdihwZXJsX2NhbGxiYWNrKTsKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+c2Vzc19yZWYgPSBuZXdTVnN2KHNlc3NfcmVmKTsKIAorCQlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJCXsKKyAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9zZXNzX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXhzX2NiX2RhdGEpOworCQl9CiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHN0YXR1cykpKTsgLyogcHVzaCB0aGUgcmVxaWQ/PyAqLwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X2NhdHB2KCplcnJfc3RyX3N2cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKXNubXBfYXBpX2VycnN0cmluZyhzcy0+c19zbm1wX2Vycm5vKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN2X3NldGl2KCplcnJfbnVtX3N2cCwgc3MtPnNfc25tcF9lcnJubyk7CisJCQkJCXNubXBfcmV0dXJuX2VycihzcywgKmVycl9udW1fc3ZwLCAqZXJyX2luZF9zdnAsICplcnJfc3RyX3N2cCk7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcygmc3ZfdW5kZWYpOwogICAgICAgICAgICAgICAgICB9CiAJCSBnb3RvIGRvbmU7CkBAIC00MDI4LDcgKzQxOTcsNyBAQAogCSAgICAgIH0KIAogCSAgICAgIC8qIFNlbnQgb2theS4uLiAgUmV0dXJuIHRoZSByZXF1ZXN0IElEIGluICdwZHUnIGFzIGFuIFN2SVYuICovCi0JICAgICAgREJQUlQoMSwoREJPVVQgIk9rYXksIHJlcXVlc3QgaWQgaXMgJXBcbiIsIHBkdSkpOworCSAgICAgIERCUFJUKDEsKERCT1VUICJPa2F5LCByZXF1ZXN0IGlkIGlzICVsZFxuIiwgKGxvbmcpKGludHB0cl90KXBkdSkpOwogLyoJICAgICAgWFNSRVRVUk5fSVYoKGludHB0cl90KXBkdSk7ICovCiAJICAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdigoSVYpcGR1KSkpOwogCSAgICAgIFhTUkVUVVJOKDEpOwpAQCAtNDIwOCw3ICs0Mzc3LDcgQEAKICAgICAgICAgICAgICAgfSAvKiBmb3IgYWxsIHRoZSB2YXJzICovCiAgICAgICAgICAgICAgIH0KIAotCSAgICAgIHBkdS0+ZW50ZXJwcmlzZSA9IChvaWQgKiltYWxsb2MoIE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOworCSAgICAgIHBkdS0+ZW50ZXJwcmlzZSA9IChvaWQgKiluZXRzbm1wX21hbGxvYyhNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKICAgICAgICAgICAgICAgdHAgPSBfX3RhZzJvaWQoZW50ZXJwcmlzZSxOVUxMLCBwZHUtPmVudGVycHJpc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwZHUtPmVudGVycHJpc2VfbGVuZ3RoLCBOVUxMLCBiZXN0X2d1ZXNzKTsKICAgCSAgICAgIGlmIChwZHUtPmVudGVycHJpc2VfbGVuZ3RoID09IDApIHsKQEAgLTQyMTksMTIgKzQzODgsMTIgQEAKIAkJICBhZ2VudC1hZGRyZXNzIGZpZWxkIHRvIHRoYXQuICBPdGhlcndpc2Ugc2V0IGl0IHRvCiAJCSAgb3VyIGFkZHJlc3MuICAqLwogICAgICAgICAgICAgICBpZiAoYWdlbnQgJiYgc3RybGVuKGFnZW50KSkgewotICAgICAgICAgICAgICAgICBpZiAoX19wYXJzZV9hZGRyZXNzKGFnZW50KSA9PSAtMSAmJiB2ZXJib3NlKSB7Ci0JCSAgIHdhcm4oImVycm9yOnRyYXA6aW52YWxpZCBhZ2VudCBhZGRyZXNzOiAlcyIsIGFnZW50KTsKLQkJICAgZ290byBlcnI7Ci0gICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCSAgICooKGluX2FkZHJfdCAqKXBkdS0+YWdlbnRfYWRkcikgPSBfX3BhcnNlX2FkZHJlc3MoYWdlbnQpOwotCQkgfQorICAgICAgICAgICAgICAgICBpZiAoMCA+IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZV92NChhZ2VudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluX2FkZHJfdCAqKXBkdS0+YWdlbnRfYWRkcikpeworICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgd2FybigiZXJyb3I6dHJhcDppbnZhbGlkIGFnZW50IGFkZHJlc3M6ICVzIiwgYWdlbnQpOworICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICooKGluX2FkZHJfdCAqKXBkdS0+YWdlbnRfYWRkcikgPSBnZXRfbXlhZGRyKCk7CiAgICAgICAgICAgICAgIH0KQEAgLTQyMzIsOSArNDQwMSwxNCBAQAogICAgICAgICAgICAgICBwZHUtPnNwZWNpZmljX3R5cGUgPSBzcGVjaWZpYzsKICAgICAgICAgICAgICAgcGR1LT50aW1lID0gdXB0aW1lOwogCi0gICAgICAgICAgICAgIGlmIChzbm1wX3NlbmQoc3MsIHBkdSkgPT0gMCkgeworCSAgICAgaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCSAgICAgeworCQlpZihzbm1wX3Nlc3Nfc2VuZChzcyxwZHUpID09IDApCisJCQlzbm1wX2ZyZWVfcGR1KHBkdSk7CisJICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpZiAoc25tcF9zZW5kKHNzLCBwZHUpID09IDApIAogCSAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKLSAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihaRVJPX0JVVF9UUlVFLDApKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiBlcnI6CkBAIC00Mjc3LDcgKzQ0NTEsNyBAQAogCSAgIAogICAgICAgICAgICBOZXcgKDAsIG9pZF9hcnIsIE1BWF9PSURfTEVOLCBvaWQpOwogCi0gICAgICAgICAgIGlmIChvaWRfYXJyICYmIFN2Uk9LKHNlc3NfcmVmKSAmJiBTdlJPSyh2YXJsaXN0X3JlZikpIHsKKyAgICAgICAgICAgaWYgKG9pZF9hcnIgJiYgU3ZST0soc2Vzc19yZWYpKSB7CiAKICAgICAgICAgICAgICAgc2Vzc19wdHJfc3YgPSBodl9mZXRjaCgoSFYqKVN2UlYoc2Vzc19yZWYpLCAiU2Vzc1B0ciIsIDcsIDEpOwogCSAgICAgIHNzID0gKFNubXBTZXNzaW9uICopU3ZJVigoU1YqKVN2UlYoKnNlc3NfcHRyX3N2KSk7CkBAIC00MjkxLDggKzQ0NjUsMTMgQEAKIAkgICAgICAKICAgICAgICAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX1RSQVAyKTsKIAotICAgICAgICAgICAgICB2YXJsaXN0ID0gKEFWKikgU3ZSVih2YXJsaXN0X3JlZik7Ci0gICAgICAgICAgICAgIHZhcmxpc3RfbGVuID0gYXZfbGVuKHZhcmxpc3QpOworICAgICAgICAgICAgICBpZiAoU3ZST0sodmFybGlzdF9yZWYpKSB7CisgICAgICAgICAgICAgICAgICB2YXJsaXN0ID0gKEFWKikgU3ZSVih2YXJsaXN0X3JlZik7CisgICAgICAgICAgICAgICAgICB2YXJsaXN0X2xlbiA9IGF2X2xlbih2YXJsaXN0KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHZhcmxpc3QgPSBOVUxMOworICAgICAgICAgICAgICAgICAgdmFybGlzdF9sZW4gPSAtMTsKKyAgICAgICAgICAgICAgfQogCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgICAgICAgICAgIHJlcyA9IF9fYWRkX3Zhcl92YWxfc3RyKHBkdSwgc3lzVXBUaW1lLCBTWVNfVVBUSU1FX09JRF9MRU4sCiAJCQkJdXB0aW1lLCBzdHJsZW4odXB0aW1lKSwgVFlQRV9USU1FVElDS1MpOwpAQCAtNDM2NSw5ICs0NTQ0LDE0IEBACiAgICAgICAgICAgICAgICAgIH0gLyogaWYgdmFyX3JlZiBpcyBvayAqLwogICAgICAgICAgICAgICB9IC8qIGZvciBhbGwgdGhlIHZhcnMgKi8KIAotICAgICAgICAgICAgICBpZiAoc25tcF9zZW5kKHNzLCBwZHUpID09IDApIHsKKwkgICAgIGlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkgICAgIHsKKyAgICAgICAgICAgICAgaWYgKHNubXBfc2Vzc19zZW5kKHNzLCBwZHUpID09IDApCiAJICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwotICAgICAgICAgICAgICB9CisJICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpZiAoc25tcF9zZW5kKHNzLCBwZHUpID09IDApIAorCSAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKKyAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihaRVJPX0JVVF9UUlVFLDApKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00NTExLDE1ICs0Njk1LDE5IEBACiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnBlcmxfY2IgPSBuZXdTVnN2KHBlcmxfY2FsbGJhY2spOwogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5zZXNzX3JlZiA9IG5ld1JWX2luYyhTdlJWKHNlc3NfcmVmKSk7CiAKKwkJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCQl7CisgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfc2Vzc19hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihzdGF0dXMpKSk7IC8qIHB1c2ggdGhlIHJlcWlkPz8gKi8KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwotICAgICAgICAgICAgICAgICAgICBzdl9jYXRwdigqZXJyX3N0cl9zdnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilzbm1wX2FwaV9lcnJzdHJpbmcoc3MtPnNfc25tcF9lcnJubykpOwotICAgICAgICAgICAgICAgICAgICBzdl9zZXRpdigqZXJyX251bV9zdnAsIHNzLT5zX3NubXBfZXJybm8pOworCQkJCQlzbm1wX3JldHVybl9lcnIoc3MsICplcnJfbnVtX3N2cCwgKmVycl9pbmRfc3ZwLCAqZXJyX3N0cl9zdnApOwogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoJnN2X3VuZGVmKTsKICAgICAgICAgICAgICAgICAgfQogCQkgZ290byBkb25lOwpAQCAtNDU3MSw3ICs0NzU5LDggQEAKIAlpbnQJCWZsYWcKIAlDT0RFOgogCXsKLQkgICBzbm1wX3NldF9kdW1wX3BhY2tldChmbGFnKTsKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQsIGZsYWcpOwogCX0KIAogCkBAIC00NzE5LDcgKzQ5MDgsOCBAQAogCWludAl2YWwKIAlDT0RFOgogCXsKLQkgICBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucyh2YWwpOworICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TQVZFX01JQl9ERVNDUlMsIHZhbCk7CiAJfQogCiB2b2lkCkBAIC00Nzc1LDExICs0OTY1LDE4IEBACiAJfQogCiAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBOb3RlOiBzcz0oU25tcFNlc3Npb24qKU5VTEwgaXMgc28gJlNOTVA6Ok1haW5Mb29wKCkgY2FuIHN0aWxsIGJlIGNhbGxlZCAKKyMgd2l0aG91dCBhIHNlc3MgaGFuZGxlciBhcmd1bWVudCwgdGhpcyB3YXkgSSdtIG5vdCBicmVha2luZyBhbnlvbmUncyBvbGQgY29kZQorIworIyBzZWUgTWFpbkxvb3AoKSBpbiBTTk1QLnBtIGZvciBtb3JlIGRldGFpbHMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZAotc25tcF9tYWluX2xvb3AodGltZW91dF9zZWMsdGltZW91dF91c2VjLHBlcmxfY2FsbGJhY2spCitzbm1wX21haW5fbG9vcCh0aW1lb3V0X3NlYyx0aW1lb3V0X3VzZWMscGVybF9jYWxsYmFjayxzcz0oU25tcFNlc3Npb24qKU5VTEwpCiAJaW50IAl0aW1lb3V0X3NlYwogCWludCAJdGltZW91dF91c2VjCiAJU1YgKglwZXJsX2NhbGxiYWNrCisJU25tcFNlc3Npb24gKnNzCiAJQ09ERToKIAl7CiAgICAgICAgIGludCBudW1mZHMsIGZkX2NvdW50OwpAQCAtNDc5MSw3ICs0OTg4LDYgQEAKICAgICAgICAgaW50IGJsb2NrOwogCVNWICpjYjsKIAotCiAgCW1haW5sb29wX2ZpbmlzaCA9IDA7CiAKIAlpdHZwID0gJmludGVydmFsOwpAQCAtNDgwOSw3ICs1MDA1LDEyIEBACiAgICAgICAgICAgIGJsb2NrID0gMTsKICAgICAgICAgICAgdHZwID0gJnRpbWVfdmFsOwogICAgICAgICAgICB0aW1lcmNsZWFyKHR2cCk7CisJICBpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJICB7CisgICAgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mbyhzcywmbnVtZmRzLCAmZmRzZXQsIHR2cCwgJmJsb2NrKTsKKwkgIH0gZWxzZSB7CiAgICAgICAgICAgIHNubXBfc2VsZWN0X2luZm8oJm51bWZkcywgJmZkc2V0LCB0dnAsICZibG9jayk7CisJICB9CiAgICAgICAgICAgIF9fcmVjYWxjX3RpbWVvdXQodHZwLGN0dnAsbHR2cCxpdHZwLCZibG9jayk7CiAgICAgICAgICAgICMgcHJpbnRmKCJwcmUtc2VsZWN0OiBudW1mZHMgPSAlbGQsIGJsb2NrID0gJWxkXG4iLCBudW1mZHMsIGJsb2NrKTsKICAgICAgICAgICAgaWYgKGJsb2NrID09IDEpIHR2cCA9IE5VTEw7IC8qIGJsb2NrIHdpdGhvdXQgdGltZW91dCAqLwpAQCAtNDgxOCw3ICs1MDE5LDEyIEBACiAgICAgICAgICAgIGlmIChmZF9jb3VudCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgRU5URVI7CiAgICAgICAgICAgICAgICAgICAgICAgIFNBVkVUTVBTOwotICAgICAgICAgICAgICBzbm1wX3JlYWQoJmZkc2V0KTsKKwkJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCQl7CisJCSAgc25tcF9zZXNzX3JlYWQoc3MsICZmZHNldCk7CisJCX0gZWxzZSB7CisgICAgICAgICAgICAgIAkgIHNubXBfcmVhZCgmZmRzZXQpOworCQl9CiAgICAgICAgICAgICAgICAgICAgICAgIEZSRUVUTVBTOwogICAgICAgICAgICAgICAgICAgICAgICBMRUFWRTsKIApAQCAtNDgyNyw3ICs1MDMzLDEyIEBACiAJCSBTUEFHQUlOOwogCQkgRU5URVI7CiAJCSBTQVZFVE1QUzsKKwkJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCQl7CisJCXNubXBfc2Vzc190aW1lb3V0KCBzcyApOworCQl9IGVsc2UgeyAKICAgICAgICAgICAgICAgICAgc25tcF90aW1lb3V0KCk7CisJCX0KICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lcmlzc2V0KGN0dnApKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdlRSVUUocGVybF9jYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLyogc3ZfMm1vcnRhbChwZXJsX2NhbGxiYWNrKTsgKi8KQEAgLTUwNDUsOSArNTI1Niw3IEBACiAJICAgICAgICAgIC8qIHdlIG11c3QgYmUgbG9va2luZyBhdCBkZXNjcmlwdGlvbiAqLwogICAgICAgICAgICAgICAgICBzdl9zZXRwdihyZXQsdHAtPmRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJ2knOiAvKiBpbmRleGVzICovCi0gICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKCJpbmRleGVzIiwga2V5LCBzdHJsZW4oa2V5KSkpIGJyZWFrOwotICAgICAgICAgICAgICAgICBpbmRleF9hdiA9IG5ld0FWKCk7CisgICAgICAgICAgICAgIGNhc2UgJ2knOiAvKiBpbmRleGVzLCBpbXBsaWVkICovCiAgICAgICAgICAgICAgICAgIGlmICh0cC0+YXVnbWVudHMpIHsKICAJICAgICAgICAgICAgIGNsZWFyX3RyZWVfZmxhZ3MoZ2V0X3RyZWVfaGVhZCgpKTsgCiAgICAgICAgICAgICAgICAgICAgICB0cHRtcCA9IGZpbmRfYmVzdF90cmVlX25vZGUodHAtPmF1Z21lbnRzLCBnZXRfdHJlZV9oZWFkKCksIE5VTEwpOwpAQCAtNTA1Nyw2ICs1MjY2LDE5IEBACiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICB0cHRtcCA9IHRwOwogICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoImltcGxpZWQiLCBrZXkpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgdGhlIGxhc3QgaW5kZXggY2FuIGJlIGltcGxpZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgIGludCBpc2ltcGxpZWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgaWYgKHRwdG1wICYmIHRwdG1wLT5pbmRleGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGlwPXRwdG1wLT5pbmRleGVzOyBpcC0+bmV4dDsgaXAgPSBpcC0+bmV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBpc2ltcGxpZWQgPSBpcC0+aXNpbXBsaWVkOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgc3Zfc2V0aXYocmV0LCBpc2ltcGxpZWQpOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoImluZGV4ZXMiLCBrZXksIHN0cmxlbihrZXkpKSkgYnJlYWs7CisgICAgICAgICAgICAgICAgIGluZGV4X2F2ID0gbmV3QVYoKTsKICAgICAgICAgICAgICAgICAgaWYgKHRwdG1wKQogICAgICAgICAgICAgICAgICAgICAgZm9yKGlwPXRwdG1wLT5pbmRleGVzOyBpcCAhPSBOVUxMOyBpcCA9IGlwLT5uZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfcHVzaChpbmRleF9hdixuZXdTVnB2KChpcC0+aWxhYmVsKSxzdHJsZW4oaXAtPmlsYWJlbCkpKTsKQEAgLTUyMzgsNiArNTQ2MCwxNCBAQAogCVNubXBTZXNzaW9uICpzZXNzX3B0cgogCUNPREU6CiAJeworCWlmKHNlc3NfcHRyICE9IE5VTEwpCisJeworIAkgaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCSB7CisgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZSggc2Vzc19wdHIgKTsKKwkgfSBlbHNlIHsgCiAgICAgICAgICAgIHNubXBfY2xvc2UoIHNlc3NfcHRyICk7CisJIH0KKwl9CiAJfQogCmRpZmYgLS1naXQgYS9wZXJsL1NOTVAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmggYi9wZXJsL1NOTVAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjNjQyYwotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbnByaW50X29iamlkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25wcmludF92YWx1ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZpbmRfbW9kdWxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZ2V0X3RjX2Rlc2NyaXB0aW9uKQorCmRpZmYgLS1naXQgYS9wZXJsL1NOTVAvdC9hc3luYy50IGIvcGVybC9TTk1QL3QvYXN5bmMudAppbmRleCBiMWM4NmM2Li5mM2ZiMzhkIDEwMDY0NAotLS0gYS9wZXJsL1NOTVAvdC9hc3luYy50CisrKyBiL3BlcmwvU05NUC90L2FzeW5jLnQKQEAgLTE3LDcgKzE3LDcgQEAKIHVzZSB2YXJzIHF3KCRhZ2VudF9wb3J0ICRjb21tICRhZ2VudF9ob3N0KTsKIAogaWYgKCReTyA9fiAvd2luMzIvaSkgewotICB3YXJuICJXaW4zMiBkZXRlY3RlZCAtIHNraXBwaW5nIGFzeW5jIGNhbGxzXG4iOworICB3YXJuICJXaW4zMi9XaW42NCBkZXRlY3RlZCAtIHNraXBwaW5nIGFzeW5jIGNhbGxzXG4iOwogICBleGl0OwogfQogCmRpZmYgLS1naXQgYS9wZXJsL1NOTVAvdC9idWxrd2Fsay50IGIvcGVybC9TTk1QL3QvYnVsa3dhbGsudAppbmRleCA2MGYxMGI1Li4yZDEzZTdiIDEwMDY0NAotLS0gYS9wZXJsL1NOTVAvdC9idWxrd2Fsay50CisrKyBiL3BlcmwvU05NUC90L2J1bGt3YWxrLnQKQEAgLTMyNiw3ICszMjYsNyBAQAogCQkJICAgIFsnaWZTcGVlZCddLCBbJ2lmRGVzY3InXSk7CSAjIFJlcGVhdGVkIHZhcmlhYmxlcy4KIAogaWYgKCReTyA9fiAvd2luMzIvaSkgewotICB3YXJuICJXaW4zMiBkZXRlY3RlZCAtIHNraXBwaW5nIGFzeW5jIGNhbGxzXG4iOworICB3YXJuICJXaW4zMi9XaW42NCBkZXRlY3RlZCAtIHNraXBwaW5nIGFzeW5jIGNhbGxzXG4iOwogfQogZWxzZSB7CiAgIEBsaXN0ID0gJHMxLT5idWxrd2FsaygyLCAxNiwgJHZhcnMsIFsgXCZhc3luY19jYjEsICR2YXJzIF0gKTsKZGlmZiAtLWdpdCBhL3BlcmwvU05NUC90L25vdGlmeS50IGIvcGVybC9TTk1QL3Qvbm90aWZ5LnQKaW5kZXggNDM0MjM3Zi4uNzI2MDBmYSAxMDA2NDQKLS0tIGEvcGVybC9TTk1QL3Qvbm90aWZ5LnQKKysrIGIvcGVybC9TTk1QL3Qvbm90aWZ5LnQKQEAgLTEwLDcgKzEwLDcgQEAKICAgICAkRU5WeydNSUJESVJTJ30gPSAnKycgLiBhYnNfcGF0aCgiLi4vLi4vbWlicyIpOwogfQogdXNlIFRlc3Q7Ci1CRUdJTiB7ICRuID0gMTA7IHBsYW4gdGVzdHMgPT4gJG4gfQorQkVHSU4geyAkbiA9IDExOyBwbGFuIHRlc3RzID0+ICRuIH0KIHVzZSBTTk1QOwogdXNlIHZhcnMgcXcoJGFnZW50X3BvcnQgJGNvbW0gJGNvbW0yICR0cmFwX3BvcnQgJGFnZW50X2hvc3QgJHNlY19uYW1lICRwcml2X3Bhc3MgJGF1dGhfcGFzcyAkYmFkX25hbWUpOwogcmVxdWlyZSAndC9zdGFydGFnZW50LnBsJzsKQEAgLTIxLDIwICsyMSwyMCBAQAogbXkgJGdlbmVyaWMgPSAnc3BlY2lmaWMnOwogCiAjICAgICAgICAgICAgICAgICAgICAgICAgIFYxIHRyYXAgdGVzdGluZwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgMSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgMSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBGaXJlIHVwIGEgdHJhcCBzZXNzaW9uLgogbXkgJHMxID0KICAgICBuZXcgU05NUDo6U2Vzc2lvbiAoRGVzdEhvc3Q9PiRhZ2VudF9ob3N0LFZlcnNpb249PjEsQ29tbXVuaXR5PT4kY29tbSxSZW1vdGVQb3J0PT4kdHJhcF9wb3J0KTsKIG9rKGRlZmluZWQoJHMxKSk7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAyICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgMiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyB0ZXN0IHYxIHRyYXAKIGlmIChkZWZpbmVkKCRzMSkpIHsKICAgJHJlcyA9ICRzMS0+dHJhcChlbnRlcnByaXNlID0+ICRlbnRlcnByaXNlLCBhZ2VudD0+JGFnZW50X2hvc3QsIGdlbmVyaWM9PiRnZW5lcmljLFtbc3lzQ29udGFjdCwgMCwgJ3Jvb3RAbG9jYWxob3N0J10sIFtzeXNMb2NhdGlvbiwgMCwgJ2hlcmUnXV0gKTsKIH0KIG9rKCRyZXMgPX4gL14wIGJ1dCB0cnVlLyk7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgdGVzdCB3aXRoIHdyb25nIHZhcmJpbmQKIHVuZGVmICRyZXM7CiBpZiAoZGVmaW5lZCgkczEpKSB7CkBAIC00NSwxMiArNDUsMTIgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjICAgICAgICAgICAgICAgICAgICAgIFYyIHRlc3RpbmcKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIDQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA0ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEZpcmUgdXAgYSB2MiB0cmFwIHNlc3Npb24uCiBteSAkczIgPQogICAgIG5ldyBTTk1QOjpTZXNzaW9uIChWZXJzaW9uPT4yLCBEZXN0SG9zdD0+JGFnZW50X2hvc3QsQ29tbXVuaXR5PT4kY29tbTIsUmVtb3RlUG9ydD0+JHRyYXBfcG9ydCk7CiBvayhkZWZpbmVkKCRzMikpOwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgNSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDUgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgdGVzdCB2MiB0cmFwCiB1bmRlZiAkcmVzOwogaWYgKGRlZmluZWQoJHMyKSkgewpAQCAtNTgsNyArNTgsNyBAQAogICAjcHJpbnQoInJlcyBpcyAkcmVzXG4iKTsKIH0KIG9rKCRyZXMgPX4gL14wIGJ1dCB0cnVlLyk7Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgNiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgNiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBubyB0cmFwb2lkIGFuZCB1cHRpbWUgZ2l2ZW4uIFNob3VsZCB0YWtlIGRlZmF1bHRzLi4uCiBteSAkcmV0OwogaWYgKGRlZmluZWQoJHMyKSkgewpAQCAtNjYsMjcgKzY2LDM1IEBACiAgICNwcmludCgicmVzIGlzICRyZXRcbiIpOwogfQogb2soZGVmaW5lZCgkcmV0KSk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDcgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbm8gdmFyYmluZCBsaXN0IGdpdmVuLgordW5kZWYgJHJlczsKK2lmIChkZWZpbmVkKCRzMikpIHsKKyAgJHJlcyA9ICRzMi0+dHJhcCh0cmFwb2lkPT4nY29sZFN0YXJ0Jyk7CisgICNwcmludCgicmVzIGlzICRyZXNcbiIpOworfQorb2soZGVmaW5lZCgkcmVzKSAmJiAkcmVzID1+IC9eMCBidXQgdHJ1ZS8pOwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIyAgICAgICAgICAgICAgICAgICAgIHYzIHRlc3RpbmcKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgNyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA4ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEZpcmUgdXAgYSB2MyB0cmFwIHNlc3Npb24uCiBteSAkczMgPSBuZXcgU05NUDo6U2Vzc2lvbihWZXJzaW9uPT4zLCBEZXN0SG9zdD0+ICRhZ2VudF9ob3N0LCBSZW1vdGVQb3J0PT4kdHJhcF9wb3J0LCBTZWNOYW1lID0+ICRzZWNfbmFtZSk7CiBvayhkZWZpbmVkKCRzMykpOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDggICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA5ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpZiAoZGVmaW5lZCgkczMpKSB7CiAgICRyZXMgPSAkczMtPmluZm9ybSh1cHRpbWU9PjExMSwgdHJhcG9pZD0+J2NvbGRTdGFydCcsIFtbc3lzQ29udGFjdCwgMCwgJ3Jvb3RAbG9jYWxob3N0J10sIFtzeXNMb2NhdGlvbiwgMCwgJ2hlcmUnXV0gKTsKIH0KIG9rKCRyZXMgPX4gL14wIGJ1dCB0cnVlLyk7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIDkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgMTAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgRmlyZSB1cCBhIHYzIHRyYXAgc2Vzc2lvbi4KICRzMyA9IG5ldyBTTk1QOjpTZXNzaW9uKFZlcnNpb249PjMsIERlc3RIb3N0PT4gJGFnZW50X2hvc3QsIFJlbW90ZVBvcnQ9PiR0cmFwX3BvcnQsIFNlY05hbWUgPT4gJHNlY19uYW1lLCBTZWNMZXZlbCA9PiBhdXRoUHJpdiwgQXV0aFBhc3MgPT4gJGF1dGhfcGFzcywgUHJpdlBhc3MgPT4gJHByaXZfcGFzcyk7CiBvayhkZWZpbmVkKCRzMykpOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDEwICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAxMSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogdW5kZWYgJHJlczsKIGlmIChkZWZpbmVkKCRzMykpIHsKICAgICAkcmVzID0gJHMzLT5pbmZvcm0odXB0aW1lPT4xMTEsIHRyYXBvaWQ9Pidjb2xkU3RhcnQnLCBbW3N5c0NvbnRhY3QsIDAsICdyb290QGxvY2FsaG9zdCddLCBbc3lzTG9jYXRpb24sIDAsICdoZXJlJ11dICk7CmRpZmYgLS1naXQgYS9wZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsIGIvcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbAppbmRleCA5NWNkMzhlLi4zZTkyYzEyIDEwMDY0NAotLS0gYS9wZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsCisrKyBiL3BlcmwvU05NUC90L3N0YXJ0YWdlbnQucGwKQEAgLTM5LDQzICszOSw1MCBAQAogICByZXF1aXJlIFdpbjMyOjpQcm9jZXNzOwogfQogCi1zdWIgc25tcHRlc3RfY2xlYW51cCB7Ci0gICAgc2xlZXAgMTsgIyBzdHJhbmdlbHkgd2UgbmVlZCB0byB3YWl0IGZvciBwaWQgZmlsZXMgdG8gYXBwZWFyID8/Ci0gICAgaWYgKCgtZSAidC9zbm1wZC5waWQiKSAmJiAoLXIgInQvc25tcGQucGlkIikpIHsKLSAgICAgICAgI3dhcm4gIlxuU3RvcHBpbmcgYWdlbnRzIGZvciB0ZXN0IHNjcmlwdCAkMFxuIjsKLSAgICAgICAgIyBNYWtpbmcgc3VyZSB0aGF0IGFueSBydW5uaW5nIGFnZW50cyBhcmUga2lsbGVkLgotCSMgd2FybiAia2lsbGluZyBzbm1wZDoiLCBgY2F0IHQvc25tcGQucGlkYCwgIlxuIjsKLSAgICAgICAgaWYgKCReTyAhfiAvd2luMzIvaSkgewotICAgICAgICAgIHN5c3RlbSAia2lsbCBgY2F0IHQvc25tcGQucGlkYCA+IC9kZXYvbnVsbCAyPiYxIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBvcGVuKEgsICI8dC9zbm1wZC5waWQiKTsKLSAgICAgICAgICBteSAkcGlkID0gKDxIPik7Ci0gICAgICAgICAgY2xvc2UgKEgpOwotICAgICAgICAgIGlmICgkcGlkID4gMCkgewotICAgICAgICAgICAgV2luMzI6OlByb2Nlc3M6OktpbGxQcm9jZXNzKCRwaWQsIDApCi0gICAgICAgICAgfQotICAgICAgICB9Ci0JdW5saW5rICJ0L3NubXBkLnBpZCI7CitzdWIgcnVuX2FzeW5jIHsKKyAgbXkgKCRwaWRmaWxlLCAkY21kLCBAYXJncykgPSBAXzsKKyAgaWYgKC1yICIkY21kIiBhbmQgLXggIiRjbWQiKSB7CisgICAgaWYgKCReTyA9fiAvd2luMzIvaSkgeworICAgICAgJGNtZCA9fiBzL1wvL1xcL2c7CisgICAgICBzeXN0ZW0gInN0YXJ0IFwiJGNtZFwiIC9taW4gY21kIC9jIFwiJGNtZCBAYXJncyAyPiYxXCIiOworICAgIH0gZWxzZSB7CisgICAgICBzeXN0ZW0gIiRjbWQgQGFyZ3MgMj4mMSI7CiAgICAgfQotICAgIGlmICgoLWUgInQvc25tcHRyYXBkLnBpZCIpICYmICgtciAidC9zbm1wdHJhcGQucGlkIikpIHsKLSAgICAgICAgIyBNYWtpbmcgc3VyZSB0aGF0IGFueSBydW5uaW5nIGFnZW50cyBhcmUga2lsbGVkLgotCSMgd2FybiAia2lsbGluZyBzbm1wdHJhcDoiLCBgY2F0IHQvc25tcHRyYXBkLnBpZGAsICJcbiI7Ci0gICAgICAgIGlmICgkXk8gIX4gL3dpbjMyL2kpIHsKLSAgICAgICAgICBzeXN0ZW0gImtpbGwgYGNhdCB0L3NubXB0cmFwZC5waWRgID4gL2Rldi9udWxsIDI+JjEiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIG9wZW4oSCwgIjx0L3NubXB0cmFwZC5waWQiKTsKLSAgICAgICAgICBteSAkcGlkID0gKDxIPik7Ci0gICAgICAgICAgY2xvc2UgKEgpOwotICAgICAgICAgIGlmICgkcGlkID4gMCkgewotICAgICAgICAgICAgV2luMzI6OlByb2Nlc3M6OktpbGxQcm9jZXNzKCRwaWQsIDApCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICAgCi0JdW5saW5rICJ0L3NubXB0cmFwZC5waWQiOworICAgICMgV2FpdCBhdCBtb3N0IHRocmVlIHNlY29uZHMgZm9yIHRoZSBwaWQgZmlsZSB0byBhcHBlYXIuCisgICAgZm9yICgkaSA9IDA7ICgkaSA8IDMpICYmICEgKC1yICIkcGlkZmlsZSIpOyArKyRpKSB7CisgICAgICBzbGVlcCAxOwogICAgIH0KKyAgfSBlbHNlIHsKKyAgICB3YXJuICJDb3VsZG4ndCBydW4gJGNtZFxuIjsKKyAgfQogfQorCitzdWIgc25tcHRlc3RfY2xlYW51cCB7CisgIGtpbGxfYnlfcGlkX2ZpbGUoInQvc25tcGQucGlkIik7CisgIHVubGluaygidC9zbm1wZC5waWQiKTsKKyAga2lsbF9ieV9waWRfZmlsZSgidC9zbm1wdHJhcGQucGlkIik7CisgIHVubGluaygidC9zbm1wdHJhcGQucGlkIik7Cit9CisKK3N1YiBraWxsX2J5X3BpZF9maWxlIHsKKyAgaWYgKCgtZSAiJF9bMF0iKSAmJiAoLXIgIiRfWzBdIikpIHsKKyAgICBpZiAoJF5PICF+IC93aW4zMi9pKSB7CisgICAgICAjIFVuaXggb3IgV2luZG93cyArIEN5Z3dpbi4KKyAgICAgIHN5c3RlbSAia2lsbCBgY2F0ICRfWzBdYCA+IC9kZXYvbnVsbCAyPiYxIjsKKyAgICB9IGVsc2UgeworICAgICAgIyBXaW5kb3dzICsgTVNWQyBvciBXaW5kb3dzICsgTWluR1cuCisgICAgICBvcGVuKEgsICI8JF9bMF0iKTsKKyAgICAgIG15ICRwaWQgPSAoPEg+KTsKKyAgICAgIGNsb3NlIChIKTsKKyAgICAgIGlmICgkcGlkID4gMCkgeworICAgICAgICBXaW4zMjo6UHJvY2Vzczo6S2lsbFByb2Nlc3MoJHBpZCwgMCkKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCisjIFN0b3AgYW55IHByb2Nlc3NlcyBzdGFydGVkIGR1cmluZyBhIHByZXZpb3VzIHRlc3QuCiBzbm1wdGVzdF9jbGVhbnVwKCk7CiAKICNPcGVuIHRoZSBzbm1wdGVzdC5jbWQgZmlsZSBhbmQgZ2V0IHRoZSBpbmZvCkBAIC05OCw0OCArMTA1LDIxIEBACiAgIGRpZSAoIkNvdWxkIG5vdCBzdGFydCBhZ2VudC4gQ291bGRuJ3QgZmluZCBzbm1wdGVzdC5jbWQgZmlsZVxuIik7CiB9CiAKKyMgU3RhcnQgc25tcGQgYW5kIHNubXB0cmFwZC4KKwogI3dhcm4gIlxuU3RhcnRpbmcgYWdlbnRzIGZvciB0ZXN0IHNjcmlwdCAkMFxuIjsKIAotaWYgKCReTyAhfiAvd2luMzIvaSkgewotICAjIFVuaXgKLSAgaWYgKCRzbm1wZF9jbWQpIHsKLSAgICBpZiAoLXIgJHNubXBkX2NtZCBhbmQgLXggJHNubXBkX2NtZCkgewotICAgICAgJGJhc2VkaXIgPSBgcHdkYDsKLSAgICAgIGNob21wICRiYXNlZGlyOwotICAgICAgc3lzdGVtICIkc25tcGRfY21kIC1yIC1MZiB0L3NubXB0ZXN0LmxvZyAtTSskbWliZGlyIC1DIC1jICRiYXNlZGlyL3Qvc25tcHRlc3QuY29uZiAtcCAkYmFzZWRpci90L3NubXBkLnBpZCAke2FnZW50X2hvc3R9OiR7YWdlbnRfcG9ydH0gPiAvZGV2L251bGwgMj4mMSI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHdhcm4oIkNvdWxkbid0IHJ1biBzbm1wZFxuIik7Ci0gICAgfQotICB9Ci0gIGlmICgkc25tcHRyYXBkX2NtZCkgewotICAgIGlmICgtciAkc25tcHRyYXBkX2NtZCBhbmQgLXggJHNubXB0cmFwZF9jbWQpIHsKLSAgICAgIHN5c3RlbSAiJHNubXB0cmFwZF9jbWQgLXAgdC9zbm1wdHJhcGQucGlkIC1NKyRtaWJkaXIgLUMgLWMgdC9zbm1wdGVzdC5jb25mIC1DICR7YWdlbnRfaG9zdH06JHt0cmFwX3BvcnR9ID4gL2Rldi9udWxsIDI+JjEiOwotICAgIH0gZWxzZSB7Ci0gICAgICB3YXJuKCJDb3VsZG4ndCBydW4gc25tcHRyYXBkXG4iKTsKLSAgICB9Ci0gIH0KK215ICRzY3JpcHRuYW1lID0gInNubXB0ZXN0IjsKK2lmICgkMCA9fiAvXnRbXC9cXF0oLiopXC50JC8pIHsKKyAgJHNjcmlwdG5hbWUgPSAkMTsKIH0KLWVsc2UgewotICAjIFdpbmRvd3MKLSAgaWYgKCRzbm1wZF9jbWQpIHsKLSAgICAgIGlmICgtciAkc25tcGRfY21kKSB7Ci0gICAgICAgICNwcmludCBTVERFUlIgInN0YXJ0IFwiU05NUERcIiAvbWluIFwiJHNubXBkX2NtZFwiIC1yIC1MZiB0L3NubXB0ZXN0LmxvZyAtQyAtYyB0L3NubXB0ZXN0LmNvbmYgLXAgdC9zbm1wZC5waWQgJGFnZW50X3BvcnQgPiBudWxcbiI7Ci0gICAgICBzeXN0ZW0gInN0YXJ0IFwiU05NUERcIiAvbWluIFwiJHNubXBkX2NtZFwiIC1yIC1MZiB0L3NubXB0ZXN0LmxvZyAtQyAtYyB0L3NubXB0ZXN0LmNvbmYgLXAgdC9zbm1wZC5waWQgJGFnZW50X3BvcnQgPiBudWwiOwotICAgIH0gZWxzZSB7Ci0gICAgICB3YXJuKCJDb3VsZG4ndCBydW4gc25tcGRcbiIpOwotICAgIH0KLSAgfQotICBpZiAoJHNubXB0cmFwZF9jbWQpIHsKLSAgICBpZiAoLXIgJHNubXB0cmFwZF9jbWQpIHsKLSAgICAgICNwcmludCBTVERFUlIgInN0YXJ0IC9taW4gXCJTTk1QVFJBUERcIiBcIiRzbm1wdHJhcGRfY21kXCIgLUxmIHQvc25tcHRyYXBkdGVzdC5sb2cgLXAgdC9zbm1wdHJhcGQucGlkIC1DIC1jIHQvc25tcHRlc3QuY29uZiAkdHJhcF9wb3J0ID4gbnVsXG4iOwotICAgICAgc3lzdGVtICJzdGFydCAvbWluIFwiU05NUFRSQVBEXCIgXCIkc25tcHRyYXBkX2NtZFwiIC1MZiB0L3NubXB0cmFwZHRlc3QubG9nIC1wIHQvc25tcHRyYXBkLnBpZCAtQyAtYyB0L3NubXB0ZXN0LmNvbmYgJHRyYXBfcG9ydCA+IG51bCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHdhcm4oIkNvdWxkbid0IHJ1biBzbm1wdHJhcGRcbiIpOwotICAgIH0KLSAgfQotICBzbGVlcCAyOyAjIEdpdmUgcHJvZ3JhbXMgdGltZSB0byBzdGFydAogCi19IAoraWYgKCRzbm1wZF9jbWQpIHsKKyAgcnVuX2FzeW5jKCJ0L3NubXBkLnBpZCIsICIkc25tcGRfY21kIiwgIi1yIC1kIC1MZiB0L3NubXBkLSRzY3JpcHRuYW1lLmxvZyAtTSskbWliZGlyIC1DIC1jIHQvc25tcHRlc3QuY29uZiAtcCB0L3NubXBkLnBpZCAke2FnZW50X2hvc3R9OiR7YWdlbnRfcG9ydH0gPnQvc25tcGQtJHNjcmlwdG5hbWUuc3RkZXJyIik7Cit9CitpZiAoJHNubXB0cmFwZF9jbWQpIHsKKyAgcnVuX2FzeW5jKCJ0L3NubXB0cmFwZC5waWQiLCAiJHNubXB0cmFwZF9jbWQiLCAiLWQgLUxmIHQvc25tcHRyYXBkLSRzY3JpcHRuYW1lLmxvZyAtcCB0L3NubXB0cmFwZC5waWQgLU0rJG1pYmRpciAtQyAtYyB0L3NubXB0ZXN0LmNvbmYgLUMgJHthZ2VudF9ob3N0fToke3RyYXBfcG9ydH0gPnQvc25tcHRyYXBkLSRzY3JpcHRuYW1lLnN0ZGVyciIpOworfQogCiAxOwogCmRpZmYgLS1naXQgYS9wZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCBiL3BlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMCmluZGV4IDVjOTQ2M2EuLjg3NGVlMjEgMTAwNjQ0Ci0tLSBhL3BlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMCisrKyBiL3BlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMCkBAIC01NywxNCArNTcsMTMgQEAKICAgICB9CiAKICAgICBteSAoJHNubXBfbGliLCAkc25tcF9sbGliLCAkc2VwKTsKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAgICAgICAkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CQotICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwiOworICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyI7CiAgICAgICAkc2VwID0gJ1xcJzsKICAgICAgICRzbm1wX2xpYl9maWxlID0gJ25ldHNubXAubGliJzsKICAgICAgICRzbm1wX2xpbmtfbGliID0gJ25ldHNubXAnOwogICAgICAgJGFnZW50X2xpbmtfbGliID0gJ25ldHNubXBhZ2VudCc7Ci0gICAgICAkaGVscGVyc19saW5rX2xpYiA9ICduZXRzbm1waGVscGVycyc7CiAgICAgICAkbWlic19saW5rX2xpYiA9ICduZXRzbm1wbWlicyc7CiAgICAgICAkdHJhcGRfbGlua19saWIgPSAnbmV0c25tcHRyYXBkJzsKIApAQCAtNzYsNyArNzUsNyBAQAogICAgICAgfQogICAgIAogICAgICAgaWYgKGxjKCRvcHRzLT57J2luc291cmNlJ30pIGVxICJ0cnVlIikgewotCSRQYXJhbXN7J0xJQlMnfSA9ICItTCRiYXNlZGlyXFx3aW4zMlxcJGxpYl9kaXJcXCAtbCRzbm1wX2xpbmtfbGliIC1sJGFnZW50X2xpbmtfbGliIC1sJGhlbHBlcnNfbGlua19saWIgIiAuCisJJFBhcmFtc3snTElCUyd9ID0gIi1MJGJhc2VkaXJcXHdpbjMyXFwkbGliX2RpclxcIC1sJHNubXBfbGlua19saWIgLWwkYWdlbnRfbGlua19saWIgIiAuCiAgICAgICAgICAgICAgICAgIi1sJG1pYnNfbGlua19saWIgLWwkdHJhcGRfbGlua19saWIgIjsKICAgICAgIH0KICAgICAgIGVsc2UgewpAQCAtMTAwLDcgKzk5LDcgQEAKIAkgICAgJExpYkRpcnNbMF0gPX4gcy9cXCQvLzsKIAkgIH0KIAl9Ci0JJFBhcmFtc3tMSUJTfSA9ICItTCRMaWJEaXIgLWwkc25tcF9saW5rX2xpYiAtbCRhZ2VudF9saW5rX2xpYiAtbCRoZWxwZXJzX2xpbmtfbGliIC1sJG1pYnNfbGlua19saWIgLWwkdHJhcGRfbGlua19saWIgIjsKKwkkUGFyYW1ze0xJQlN9ID0gIi1MJExpYkRpciAtbCRzbm1wX2xpbmtfbGliIC1sJGFnZW50X2xpbmtfbGliIC1sJG1pYnNfbGlua19saWIgLWwkdHJhcGRfbGlua19saWIgIjsKICAgICAgIH0KIAogICAgICAgJFBhcmFtc3snSU5DJ30gPSAiLUkkYmFzZWRpclxcaW5jbHVkZVxcIC1JJGJhc2VkaXJcXGluY2x1ZGVcXG5ldC1zbm1wXFwgLUkkYmFzZWRpclxcd2luMzJcXCAiOwpAQCAtMTA4LDcgKzEwNyw3IEBACiAgICAgZWxzZSB7CiAJJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwogCSRQYXJhbXN7J0xERExGTEFHUyd9ID0gIiRDb25maWd7bGRkbGZsYWdzfSAiIC4gYCRvcHRzLT57J25zY29uZmlnJ30gLS1sZGZsYWdzYDsKLQkkUGFyYW1zeydMSUJTJ30gPSAnLWxuZXRzbm1wdHJhcGQgLWxuZXRzbm1wYWdlbnQgLWxuZXRzbm1wJzsKKwkkUGFyYW1zeydMSUJTJ30gPSAnLWxuZXRzbm1wdHJhcGQgJyAuIGAkb3B0cy0+eyduc2NvbmZpZyd9IC0tYmFzZS1hZ2VudC1saWJzYDsKIAljaG9tcCgkUGFyYW1zeydMSUJTJ30pOwogCWlmICghJEVOVnsnTkVUU05NUF9DQ0ZMQUdTJ30pIHsKIAkgICAgJFBhcmFtc3snQ0NGTEFHUyd9ID0gYCRvcHRzLT57J25zY29uZmlnJ30gLS1jZmxhZ3NgOwpAQCAtMTE5LDcgKzExOCw3IEBACiAJfQogCiAJaWYgKGxjKCRvcHRzLT57J2luc291cmNlJ30pIGVxICJ0cnVlIikgewotICAgICAgICAgICAgJFBhcmFtc3snTElCUyd9ID0gIi1MLi4vLi4vYXBwcy8ubGlicyAtTC4uLy4uL2FwcHMgLUwuLi8uLi9hZ2VudC8ubGlicyAtTC4uLy4uL2FnZW50IC1MLi4vLi4vYWdlbnQvaGVscGVycy8ubGlicyAtTC4uLy4uL2FnZW50L2hlbHBlcnMgLUwuLi8uLi9zbm1wbGliLy5saWJzIC1MLi4vLi4vc25tcGxpYiAiIC4gJFBhcmFtc3snTElCUyd9OworICAgICAgICAgICAgJFBhcmFtc3snTElCUyd9ID0gIi1MLi4vLi4vYXBwcy8ubGlicyAtTC4uLy4uL2FwcHMgLUwuLi8uLi9hZ2VudC8ubGlicyAtTC4uLy4uL2FnZW50IC1MLi4vLi4vc25tcGxpYi8ubGlicyAtTC4uLy4uL3NubXBsaWIgIiAuICRQYXJhbXN7J0xJQlMnfTsKIAkgICAgJFBhcmFtc3snQ0NGTEFHUyd9ID0gIi1JLi4vLi4vaW5jbHVkZSAiIC4gJFBhcmFtc3snQ0NGTEFHUyd9OwogCX0gZWxzZSB7CiAgICAgICAgICAgICAkUGFyYW1zeydMSUJTJ30gPSBgJG9wdHMtPnsnbnNjb25maWcnfSAtLWxpYmRpcmAgLiAiICRQYXJhbXN7J0xJQlMnfSI7CkBAIC0xNDIsNyArMTQxLDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTIyNSw3ICsyMjQsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0gYi9wZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0KaW5kZXggM2E1NDI1ZC4uODVhMDQxYSAxMDA2NDQKLS0tIGEvcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtCisrKyBiL3BlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbQpAQCAtNDcsNyArNDcsNyBAQAogCU5FVFNOTVBUUkFQRF9QUkVfSEFORExFUgogKTsKIAotJFZFUlNJT04gPSAnNS4wNDA0JzsKKyRWRVJTSU9OID0gJzUuMDcwMyc7CiAKICMgc3ViIG5ldyB7CiAjICAgICBteSAkdHlwZSA9IHNoaWZ0OwpkaWZmIC0tZ2l0IGEvcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzIGIvcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzCmluZGV4IDg3MTNlZmQuLmE0ZmMxMzYgMTAwNjQ0Ci0tLSBhL3BlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cworKysgYi9wZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgY2hhciAqdHN0ciA9IHRyYW5zcG9ydC0+Zl9mbXRhZGRyKHRyYW5zcG9ydCwgcGR1LT50cmFuc3BvcnRfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKICAgICAgICAgU1RPUkVQRFVzKCJyZWNlaXZlZGZyb20iLCB0c3RyKTsKLSAgICAgICAgZnJlZSh0c3RyKTsKKyAgICAgICAgbmV0c25tcF9mcmVlKHRzdHIpOwogICAgIH0KIAogCkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICBmb3IodmIgPSBwZHUtPnZhcmlhYmxlczsgdmI7IHZiID0gdmItPm5leHRfdmFyaWFibGUpIHsKIAogICAgICAgICAvKiBnZXQgdGhlIG9pZCAqLwotICAgICAgICBvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX29pZCk7CisgICAgICAgIG8gPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfb2lkKSk7CiAgICAgICAgIG8tPm5hbWUgPSBvLT5uYW1lYnVmOwogICAgICAgICBvLT5sZW4gPSB2Yi0+bmFtZV9sZW5ndGg7CiAgICAgICAgIG1lbWNweShvLT5uYW1lLCB2Yi0+bmFtZSwgdmItPm5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAKICAgICAgICAgYXZfcHVzaCh2YmEsdG1wYXJyYXlbaV0pOwogICAgICAgICBhdl9wdXNoKHZiYSxuZXdTVnB2bigoY2hhciAqKSBvdXRidWYsIG9vX2xlbikpOwotICAgICAgICBmcmVlKG91dGJ1Zik7CisgICAgICAgIG5ldHNubXBfZnJlZShvdXRidWYpOwogICAgICAgICBhdl9wdXNoKHZiYSxuZXdTVml2KHZiLT50eXBlKSk7CiAgICAgICAgIGF2X3B1c2godmFyYmluZHMsIChTViAqKSBuZXdSVl9ub2luYygoU1YgKikgdmJhKSk7CiAgICAgfQpAQCAtMjE0LDcgKzIxNCw3IEBACiAJU1YgKnJ2ID0gUE9QczsKIAogCWlmIChTdlRZUEUocnYpICE9IFNWdF9JVikgewotCSAgc25tcF9sb2coTE9HX1dBUk5JTkcsICIgcGVybCBjYWxsYmFjayBmdW5jdGlvbiAlcCByZXR1cm5lZCBhIHNjYWxhciBvZiB0eXBlICVkIGluc3RlYWQgb2YgYW4gaW50ZWdlciwgYXNzdW1pbmcgJWQgKE5FVFNOTVBUUkFQRF9IQU5ETEVSX09LKVxuIiwgcGNhbGxiYWNrLCBTdlRZUEUocnYpLCBORVRTTk1QVFJBUERfSEFORExFUl9PSyk7CisJICBzbm1wX2xvZyhMT0dfV0FSTklORywgIiBwZXJsIGNhbGxiYWNrIGZ1bmN0aW9uICVwIHJldHVybmVkIGEgc2NhbGFyIG9mIHR5cGUgJWx1IGluc3RlYWQgb2YgYW4gaW50ZWdlciwgYXNzdW1pbmcgJWQgKE5FVFNOTVBUUkFQRF9IQU5ETEVSX09LKVxuIiwgcGNhbGxiYWNrLCAodW5zaWduZWQgbG9uZylTdlRZUEUocnYpLCBORVRTTk1QVFJBUERfSEFORExFUl9PSyk7CiAJfQogCWVsc2UgewogCSAgaW50IHJ2aSA9IChJVilTdklWeChydik7CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaGFuZGxlcikgewotICAgICAgICAgICAgICAgIGNiX2RhdGEgPSBTTk1QX01BTExPQ19UWVBFREVGKHRyYXBkX2NiX2RhdGEpOworICAgICAgICAgICAgICAgIGNiX2RhdGEgPSBtYWxsb2Moc2l6ZW9mKHRyYXBkX2NiX2RhdGEpKTsKICAgICAgICAgICAgICAgICBjYl9kYXRhLT5wZXJsX2NiID0gbmV3U1ZzdihwZXJsY2FsbGJhY2spOwogICAgICAgICAgICAgICAgIGhhbmRsZXItPmhhbmRsZXJfZGF0YSA9IGNiX2RhdGE7CiAgICAgICAgICAgICAgICAgaGFuZGxlci0+YXV0aHR5cGVzID0gKDEgPDwgVkFDTV9WSUVXX0VYRUNVVEUpOwpkaWZmIC0tZ2l0IGEvcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmggYi9wZXJsL1RyYXBSZWNlaXZlci9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDMzMWUzCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobmV0c25tcF9hZGRfZGVmYXVsdF90cmFwaGFuZGxlcikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG1lbW9yeV9mcmVlKQorCmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L01ha2VmaWxlLlBMIGIvcGVybC9hZ2VudC9NYWtlZmlsZS5QTAppbmRleCBiNGIzNThhLi40ZjdiZWUzIDEwMDY0NAotLS0gYS9wZXJsL2FnZW50L01ha2VmaWxlLlBMCisrKyBiL3BlcmwvYWdlbnQvTWFrZWZpbGUuUEwKQEAgLTMwLDE0ICszMCwxMyBAQAogICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgbXkgKCRzbm1wX2xpYiwgJHNubXBfbGxpYiwgJHNlcCk7Ci0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogICAgICAgJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwkKLSAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIjsKKyAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiOwogICAgICAgJHNlcCA9ICdcXCc7CiAgICAgICAkc25tcF9saWJfZmlsZSA9ICduZXRzbm1wLmxpYic7CiAgICAgICAkc25tcF9saW5rX2xpYiA9ICduZXRzbm1wJzsKICAgICAgICRhZ2VudF9saW5rX2xpYiA9ICduZXRzbm1wYWdlbnQnOwotICAgICAgJGhlbHBlcnNfbGlua19saWIgPSAnbmV0c25tcGhlbHBlcnMnOwogICAgICAgJG1pYnNfbGlua19saWIgPSAnbmV0c25tcG1pYnMnOwogCiAgICAgICBpZiAobGMoJG9wdHMtPnsnZGVidWcnfSkgZXEgInRydWUiKSB7CkBAIC00OCw3ICs0Nyw3IEBACiAgICAgICB9CiAgICAgCiAgICAgICBpZiAobGMoJG9wdHMtPnsnaW5zb3VyY2UnfSkgZXEgInRydWUiKSB7Ci0JJFBhcmFtc3snTElCUyd9ID0gIi1MJGJhc2VkaXJcXHdpbjMyXFwkbGliX2RpclxcIC1sJHNubXBfbGlua19saWIgLWwkYWdlbnRfbGlua19saWIgLWwkaGVscGVyc19saW5rX2xpYiAiIC4KKwkkUGFyYW1zeydMSUJTJ30gPSAiLUwkYmFzZWRpclxcd2luMzJcXCRsaWJfZGlyXFwgLWwkc25tcF9saW5rX2xpYiAtbCRhZ2VudF9saW5rX2xpYiAiIC4KICAgICAgICAgICAgICAgICAiLWwkbWlic19saW5rX2xpYiI7CiAgICAgICB9CiAgICAgICBlbHNlIHsKQEAgLTcyLDcgKzcxLDcgQEAKIAkgICAgJExpYkRpcnNbMF0gPX4gcy9cXCQvLzsKIAkgIH0KIAl9Ci0JJFBhcmFtc3tMSUJTfSA9ICItTCRMaWJEaXIgLWwkc25tcF9saW5rX2xpYiAtbCRhZ2VudF9saW5rX2xpYiAtbCRoZWxwZXJzX2xpbmtfbGliIC1sJG1pYnNfbGlua19saWIiOworCSRQYXJhbXN7TElCU30gPSAiLUwkTGliRGlyIC1sJHNubXBfbGlua19saWIgLWwkYWdlbnRfbGlua19saWIgLWwkbWlic19saW5rX2xpYiI7CiAgICAgICB9CiAKICAgICAgICRQYXJhbXN7J0lOQyd9ID0gIi1JJGJhc2VkaXJcXGluY2x1ZGVcXCAtSSRiYXNlZGlyXFxpbmNsdWRlXFxuZXQtc25tcFxcIC1JJGJhc2VkaXJcXHdpbjMyXFwgIjsKQEAgLTg3LDcgKzg2LDcgQEAKIAkkUGFyYW1zeydDQ0ZMQUdTJ30gLj0gIiAiIC4gJENvbmZpZ3snY2NmbGFncyd9OwogICAgICAgICAkbGliX3ZlcnNpb24gPSBgJG9wdHMtPnsnbnNjb25maWcnfSAtLXZlcnNpb25gOwogCWlmIChsYygkb3B0cy0+eydpbnNvdXJjZSd9KSBlcSAidHJ1ZSIpIHsKLQkgICAgJFBhcmFtc3snTElCUyd9ID0gIi1MLi4vLi4vc25tcGxpYi8ubGlicyAtTC4uLy4uL3NubXBsaWIvIC1MLi4vLi4vYWdlbnQvLmxpYnMgLUwuLi8uLi9hZ2VudC8gLUwuLi8uLi9hZ2VudC9oZWxwZXJzLy5saWJzIC1MLi4vLi4vYWdlbnQvaGVscGVycy8gIiAuICRQYXJhbXN7J0xJQlMnfTsKKwkgICAgJFBhcmFtc3snTElCUyd9ID0gIi1MLi4vLi4vc25tcGxpYi8ubGlicyAtTC4uLy4uL3NubXBsaWIvIC1MLi4vLi4vYWdlbnQvLmxpYnMgLUwuLi8uLi9hZ2VudC8gIiAuICRQYXJhbXN7J0xJQlMnfTsKIAkgICAgJFBhcmFtc3snQ0NGTEFHUyd9ID0gIi1JLi4vLi4vaW5jbHVkZSAiIC4gJFBhcmFtc3snQ0NGTEFHUyd9OwogIwl9IGVsc2UgewogCSAgICAkUGFyYW1zeydMSUJTJ30gPSBgJG9wdHMtPnsnbnNjb25maWcnfSAtLWxpYmRpcmAgLiAkUGFyYW1zeydMSUJTJ307CkBAIC0xMDksNyArMTA4LDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTE5Miw3ICsxOTEsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwgYi9wZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwKaW5kZXggM2E0ZjIwMC4uNDg4MTViNiAxMDA2NDQKLS0tIGEvcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMCisrKyBiL3BlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTApAQCAtMjksOSArMjksOSBAQAogICAgICAgICAgICAgICAgICAgCiAgICAgbXkgKCRzbm1wX2xpYiwgJHNubXBfbGxpYiwgJHNlcCk7CiAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAgICAgICAkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CQotICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwiOworICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyI7CiAgICAgICAkc2VwID0gJ1xcJzsKICAgICAgICRzbm1wX2xpYl9maWxlID0gJ25ldHNubXAubGliJzsKICAgICAgICRzbm1wX2xpbmtfbGliID0gJ25ldHNubXAnOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0xODQsNyArMTg0LDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0gYi9wZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbQppbmRleCBkYThjNzdlLi4wM2Y1NGQ5IDEwMDY0NAotLS0gYS9wZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbQorKysgYi9wZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbQpAQCAtMjYsNyArMjYsNyBAQAogQElTQSAgICAgICA9IHF3KEV4cG9ydGVyIGdldExlYWYpOwogQEVYUE9SVCAgICA9IHF3KHJlZ2lzdGVyQWdlbnQgZ2V0T2lkRWxlbWVudCBzZXRPaWRFbGVtZW50KTsKIEBFWFBPUlRfT0sgPSBxdygpOwotJFZFUlNJT04gPSAnNS4wNDA0JzsKKyRWRVJTSU9OID0gJzUuMDcwMyc7CiAKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L2FnZW50LnBtIGIvcGVybC9hZ2VudC9hZ2VudC5wbQppbmRleCA2MThhMmM2Li40NjUwMGZmIDEwMDY0NAotLS0gYS9wZXJsL2FnZW50L2FnZW50LnBtCisrKyBiL3BlcmwvYWdlbnQvYWdlbnQucG0KQEAgLTg3LDcgKzg3LDcgQEAKIAlTTk1QX0VSUl9BVVRIT1JJWkFUSU9ORVJST1IKIAlTTk1QX0VSUl9OT1RXUklUQUJMRQogKTsKLSRWRVJTSU9OID0gJzUuMDQwNCc7CiskVkVSU0lPTiA9ICc1LjA3MDMnOwogCiBzdWIgQVVUT0xPQUQgewogICAgICMgVGhpcyBBVVRPTE9BRCBpcyB1c2VkIHRvICdhdXRvbG9hZCcgY29uc3RhbnRzIGZyb20gdGhlIGNvbnN0YW50KCkKQEAgLTE5OSw2ICsxOTksMTIgQEAKICAgICBfX2FnZW50X2NoZWNrX2FuZF9wcm9jZXNzKCRibG9ja2luZyB8fCAwKTsKIH0KIAorc3ViIHVwdGltZSB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICAkc2VsZi0+bWF5YmVfaW5pdF9saWIoKTsKKyAgICByZXR1cm4gX3VwdGltZSgpOworfQorCiBib290c3RyYXAgTmV0U05NUDo6YWdlbnQgJFZFUlNJT047CiAKICMgUHJlbG9hZGVkIG1ldGhvZHMgZ28gaGVyZS4KQEAgLTQ5MCw2ICs0OTYsMjAgQEAKIAogCSRyZXF1ZXN0LT5zZXRSZXBlYXQoNSk7CiAKKyAgICBnZXRTb3VyY2VJcCAoKQorCisJR2V0cyB0aGUgSVB2NCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgbWFraW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBoYW5kbGVyLgorCisJdXNlIFNvY2tldDsKKwlwcmludCAiU291cmNlOiAiLCBpbmV0X250b2EoJHJlcXVlc3QtPmdldFNvdXJjZUlwKCkpLCAiXG4iOworCisgICAgZ2V0RGVzdElwICgpCisKKwlHZXRzIHRoZSBJUHY0IGFkZHJlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uIHRoYXQgdGhlIHJlcXVlc3Qgd2FzIHNlbnQgdG8uCisKKwl1c2UgU29ja2V0OworCXByaW50ICJEZXN0aW5hdGlvbjogIiwgaW5ldF9udG9hKCRyZXF1ZXN0LT5nZXREZXN0SXAoKSksICJcbiI7CisKID1oZWFkMSBNT0RFUwogCiAJTU9ERV9HRVQKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvYWdlbnQueHMgYi9wZXJsL2FnZW50L2FnZW50LnhzCmluZGV4IDU2MDZjM2MuLmM3YjVkOWEgMTAwNjQ0Ci0tLSBhL3BlcmwvYWdlbnQvYWdlbnQueHMKKysrIGIvcGVybC9hZ2VudC9hZ2VudC54cwpAQCAtMTksNiArMTksMTIgQEAKIAogdHlwZWRlZiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpOZXRTTk1QX19hZ2VudF9fbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbjsKIAorLyoKKyAqIG5lZWRzIHRvIGJlIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgaW4gc25tcGxpYi9zbm1wVURQRG9tYWluLmMKKyAqIGFuZCBzbm1wbGliL3NubXBUQ1BEb21haW4uYworICovCit0eXBlZGVmIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgbmV0c25tcF91ZHBfYWRkcl9wYWlyOworCiB0eXBlZGVmIHN0cnVjdCBoYW5kbGVyX2NiX2RhdGFfcyB7CiAgICBTViAqcGVybF9jYjsKIH0gaGFuZGxlcl9jYl9kYXRhOwpAQCAtNTQsMTIgKzYwLDE0IEBACiBzdGF0aWMgaW50IGNvbnN0YW50X01PREVfU0VUX1IoZG91YmxlICp2YWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgaW50IGxlbikKIHsKICAgICBzd2l0Y2ggKGxlbiA+PSAxNiA/IG5hbWVbMTZdIDogLTEpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSAnMSc6CiAJVEVTVF9DT05TVEFOVCh2YWx1ZSwgbmFtZSwgTU9ERV9TRVRfUkVTRVJWRTEpOwogICAgICAgICBicmVhazsKICAgICBjYXNlICcyJzoKIAlURVNUX0NPTlNUQU5UKHZhbHVlLCBuYW1lLCBNT0RFX1NFVF9SRVNFUlZFMik7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KICAgICByZXR1cm4gRUlOVkFMOwogfQpAQCAtMTE1LDYgKzEyMyw3IEBACiAgICAgICAgIHJldHVybiBFSU5WQUw7CiAKICAgICBzd2l0Y2ggKGxlbiA+PSA5ID8gbmFtZVs5XSA6IC0xKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgJ0EnOgogICAgICAgICBURVNUX0NPTlNUQU5UKHZhbHVlLCBuYW1lLCBNT0RFX1NFVF9BQ1RJT04pOwogICAgICAgICBicmVhazsKQEAgLTEyNywxMSArMTM2LDEyIEBACiAgICAgY2FzZSAnRic6CiAgICAgICAgIFRFU1RfQ09OU1RBTlQodmFsdWUsIG5hbWUsIE1PREVfU0VUX0ZSRUUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlICdSJzoKLSAgICAgICAgcmV0dXJuIGNvbnN0YW50X01PREVfU0VUX1IodmFsdWUsIG5hbWUsIGxlbik7CiAgICAgY2FzZSAnVSc6CiAgICAgICAgIFRFU1RfQ09OU1RBTlQodmFsdWUsIG5hbWUsIE1PREVfU0VUX1VORE8pOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICBjYXNlICdSJzoKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50X01PREVfU0VUX1IodmFsdWUsIG5hbWUsIGxlbik7CiAgICAgfQogICAgIHJldHVybiBFSU5WQUw7CiB9CkBAIC0yMjgsNiArMjM4LDEzIEBACiAgICAgT1VUUFVUOgogCVJFVFZBTAogCitpbnQKK191cHRpbWUoKQorICAgIENPREU6CisgICAgICAgIFJFVFZBTCA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOworICAgIE9VVFBVVDoKKwlSRVRWQUwKKwogdm9pZAogaW5pdF9taWIoKQogICAgIENPREU6CkBAIC0yMzgsNiArMjU1LDExIEBACiBpbnQKIGluaXRfYWdlbnQobmFtZSkKICAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBDT0RFOgorICAgICAgICBTT0NLX1NUQVJUVVA7CisgICAgICAgIFJFVFZBTCA9IGluaXRfYWdlbnQobmFtZSk7CisgICAgT1VUUFVUOgorICAgICAgICBSRVRWQUwKIAogdm9pZAogaW5pdF9zbm1wKG5hbWUpCkBAIC0yNzMsNyArMjk1LDcgQEAKICAgICAgICAgaWYgKDApCiAgICAgICAgICAgICBwcmludGYoIm1lID0gJXBcbiIsIG1lKTsKICAgICAgICAgc3RyaW5ncHRyID0gU3ZQVih2YWx1ZSwgc3RyaW5nbGVuKTsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgc3RyaW5ncHRyICk7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIlcyIsIHN0cmluZ3B0ciApOwogICAgIH0KIAogCkBAIC0zMTMsNyArMzM1LDE0IEBACiB2b2lkCiBuc2Focl9ERVNUUk9ZKHJlZ2luZm8pCiAJbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbworICAgIFBSRUlOSVQ6CisgICAgICAgIGhhbmRsZXJfY2JfZGF0YSAqY2JfZGF0YTsKICAgICBDT0RFOgorICAgICAgICBpZiAocmVnaW5mbyAmJiByZWdpbmZvLT5oYW5kbGVyICYmIHJlZ2luZm8tPmhhbmRsZXItPm15dm9pZCkgeworCSAgICBjYl9kYXRhID0gKGhhbmRsZXJfY2JfZGF0YSAqKSAocmVnaW5mby0+aGFuZGxlci0+bXl2b2lkKTsKKwkgICAgU3ZSRUZDTlRfZGVjKGNiX2RhdGEtPnBlcmxfY2IpOworCSAgICBmcmVlKGNiX2RhdGEpOworICAgICAgICB9CiAJbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZ2luZm8pOwogCiBpbnQKQEAgLTM2NCw3ICszOTMsNyBAQAogICAgICAgICBQVVNITUFSSyhTUCk7CiAgICAgICAgIHJlZ2luZm8gPSAobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqKSBTdklWKFN2UlYobWUpKTsKIAotICAgICAgICBvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX29pZCk7CisgICAgICAgIG8gPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfb2lkKSk7CiAgICAgICAgIG8tPm5hbWUgPSBvLT5uYW1lYnVmOwogICAgICAgICBvLT5sZW4gPSByZWdpbmZvLT5yb290b2lkX2xlbjsKICAgICAgICAgbWVtY3B5KG8tPm5hbWUsIHJlZ2luZm8tPnJvb3RvaWQsCkBAIC00MDMsNyArNDMyLDcgQEAKICAgICAgICAgUFVTSE1BUksoU1ApOwogICAgICAgICByZXF1ZXN0ID0gKG5ldHNubXBfcmVxdWVzdF9pbmZvICopIFN2SVYoU3ZSVihtZSkpOwogCi0gICAgICAgIG8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfb2lkKTsKKyAgICAgICAgbyA9IG1hbGxvYyhzaXplb2YobmV0c25tcF9vaWQpKTsKICAgICAgICAgby0+bmFtZSA9IG8tPm5hbWVidWY7CiAgICAgICAgIG8tPmxlbiA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGg7CiAgICAgICAgIG1lbWNweShvLT5uYW1lLCByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUsCkBAIC00MzMsNyArNDYyLDcgQEAKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CiAgICAgICAgIENPREU6CiAgICAgICAgIHJlcXVlc3QgPSAobmV0c25tcF9yZXF1ZXN0X2luZm8gKikgU3ZJVihTdlJWKG1lKSk7Ci0gICAgICAgIFJFVFZBTCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9vaWQpOworICAgICAgICBSRVRWQUwgPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfb2lkKSk7CiAgICAgICAgIFJFVFZBTC0+bmFtZSA9IFJFVFZBTC0+bmFtZWJ1ZjsKICAgICAgICAgUkVUVkFMLT5sZW4gPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoOwogICAgICAgICBtZW1jcHkoUkVUVkFMLT5uYW1lLCByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUsCkBAIC00NjMsMTkgKzQ5MiwxOSBAQAogICAgICAgICByZXF1ZXN0ID0gKG5ldHNubXBfcmVxdWVzdF9pbmZvICopIFN2SVYoU3ZSVihtZSkpOwogICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnR5cGU9bmV3dmFsdWU7CiAKLWNoYXIgKgorU1YgKgogbmFyaV9nZXRWYWx1ZShtZSkKICAgICAgICAgU1YgKm1lOwogICAgIFBSRUlOSVQ6Ci0gICAgICAgIHVfY2hhciBidWZbMTAyNF0gOwotICAgICAgICB1X2NoYXIgKm9pZGJ1ZiA9IGJ1ZiA7Ci0gICAgICAgIHNpemVfdCBvYl9sZW4gPSAxMDI0LCBvb19sZW4gPSAwOworICAgICAgICBjaGFyICpvdXRidWYgPSBOVUxMOworICAgICAgICBzaXplX3Qgb2JfbGVuID0gMCwgb29fbGVuID0gMDsKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CiAgICAgQ09ERToKICAgICAgICAgcmVxdWVzdCA9IChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqKSBTdklWKFN2UlYobWUpKTsKLQlzcHJpbnRfcmVhbGxvY19ieV90eXBlKCZvaWRidWYsICZvYl9sZW4sICZvb19sZW4sIDAsCisJc3ByaW50X3JlYWxsb2NfYnlfdHlwZSgodV9jaGFyICoqKSAmb3V0YnVmLCAmb2JfbGVuLCAmb29fbGVuLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2YiwgMCwgMCwgMCk7Ci0gICAgICAgIFJFVFZBTCA9IChjaGFyICopIG9pZGJ1ZjsgLyogbWVtIGxlYWsgKi8KKyAgICAgICAgUkVUVkFMID0gbmV3U1ZwdihvdXRidWYsIDApOworCW5ldHNubXBfZnJlZShvdXRidWYpOwogICAgIE9VVFBVVDoKICAgICAgICAgUkVUVkFMCiAKQEAgLTYyMCw4ICs2NDksOCBAQAogCQkgIGJyZWFrOwogCSAgICAgIH0KIAkgICAgICBlbHNlIHsKLQkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi1pbnRlZ2VyIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9JTlRFR0VSOiB0eXBlIHdhcyAlZFxuIiwKLQkJCVN2VFlQRSh2YWx1ZSkpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLWludGVnZXIgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX0lOVEVHRVI6IHR5cGUgd2FzICVsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKVN2VFlQRSh2YWx1ZSkpOwogCQlSRVRWQUwgPSAwOwogCQlicmVhazsKIAkgICAgICB9CkBAIC02NTYsOCArNjg1LDggQEAKIAkJICBicmVhazsKIAkgICAgICB9CiAJICAgICAgZWxzZSB7Ci0JCXNubXBfbG9nKExPR19FUlIsICJOb24tdW5zaWduZWQtaW50ZWdlciB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fVU5TSUdORUQvQVNOX0NPVU5URVIvQVNOX1RJTUVUSUNLUzogdHlwZSB3YXMgJWRcbiIsCi0JCQlTdlRZUEUodmFsdWUpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi11bnNpZ25lZC1pbnRlZ2VyIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9VTlNJR05FRC9BU05fQ09VTlRFUi9BU05fVElNRVRJQ0tTOiB0eXBlIHdhcyAlbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZylTdlRZUEUodmFsdWUpKTsKIAkJUkVUVkFMID0gMDsKIAkJYnJlYWs7CiAJICAgICAgfQpAQCAtNjY3LDQ3ICs2OTYsNDAgQEAKIAkgICAgICBpZiAoKFN2VFlQRSh2YWx1ZSkgPT0gU1Z0X0lWKSB8fCAoU3ZUWVBFKHZhbHVlKSA9PSBTVnRfUFZNRykpIHsKIAkJICAvKiBHb29kIC0gZ290IGEgcmVhbCBvbmUgKG9yIGEgYmxlc3NlZCBzY2FsYXIgd2hpY2ggd2UgaGF2ZSB0byBob3BlIHdpbGwgdHVybiBvdXQgT0spICovCiAJCSAgdWxsdG1wID0gU3ZJVih2YWx1ZSk7Ci0JCSAgYzY0LmhpZ2ggPSAodWludDMyX3QpKHVsbHRtcCA+PiAzMik7Ci0JCSAgYzY0LmxvdyAgPSAodWludDMyX3QpdWxsdG1wOwotICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgKHVfY2hhcil0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmYzY0LCBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCkpOwogCQkgIFJFVFZBTCA9IDE7Ci0JCSAgYnJlYWs7CiAJICAgICAgfQogCSAgICAgIGVsc2UgaWYgKFN2UE9LcCh2YWx1ZSkpIHsKIAkgICAgICAgICAgLyogTWlnaHQgYmUgT0sgLSBnb3QgYSBzdHJpbmcsIHNvIHRyeSB0byBjb252ZXJ0IGl0LCBhbGxvd2luZyBiYXNlIDEwLCBvY3RhbCwgYW5kIGhleCBmb3JtcyAqLwogCSAgICAgICAgICBzdHJpbmdwdHIgPSBTdlBWKHZhbHVlLCBzdHJpbmdsZW4pOwotI2lmIGRlZmluZWQoV0lOMzIpCi0JCSAgdWxsdG1wID0gc3RydG91bCggIHN0cmluZ3B0ciwgTlVMTCwgMCApOwotI2Vsc2UKKwkgICAgICAgICAgZXJybm8gPSAwOwogCQkgIHVsbHRtcCA9IHN0cnRvdWxsKCBzdHJpbmdwdHIsIE5VTEwsIDAgKTsKLSNlbmRpZgotCQkgIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKLQkJICAJc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byBudW1iZXIgaW4gc2V0VmFsdWU6ICclcyciLCBzdHJpbmdwdHIpOwotCQkJUkVUVkFMID0gMDsKLQkJCWJyZWFrOwotCQkgIH0KKwkJICBpZiAoZXJybm8gIT0gMCkgeworCQkgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIG51bWJlciBpbiBzZXRWYWx1ZTogJyVzJyIsIHN0cmluZ3B0cik7CisJCSAgICAgIFJFVFZBTCA9IDA7CisJCSAgfSBlbHNlCiAKLQkJICBjNjQuaGlnaCA9ICh1aW50MzJfdCkodWxsdG1wID4+IDMyKTsKLQkJICBjNjQubG93ICA9ICh1aW50MzJfdCl1bGx0bXA7Ci0gICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCAodV9jaGFyKXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICZjNjQsIHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KSk7Ci0JCSAgUkVUVkFMID0gMTsKLQkJICBicmVhazsKKwkJICAgICAgUkVUVkFMID0gMTsKIAkgICAgICB9CiAJICAgICAgZWxzZSB7Ci0JCXNubXBfbG9nKExPR19FUlIsICJOb24tdW5zaWduZWQtaW50ZWdlciB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fQ09VTlRFUjY0OiB0eXBlIHdhcyAlZFxuIiwKLQkJCVN2VFlQRSh2YWx1ZSkpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXVuc2lnbmVkLWludGVnZXIgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX0NPVU5URVI2NDogdHlwZSB3YXMgJWx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpU3ZUWVBFKHZhbHVlKSk7CiAJCVJFVFZBTCA9IDA7Ci0JCWJyZWFrOwogCSAgICAgIH0KKwkgICAgICBpZiAoUkVUVkFMKSB7CisJCSAgYzY0LmhpZ2ggPSAodWludDMyX3QpKHVsbHRtcCA+PiAzMik7CisJCSAgYzY0LmxvdyAgPSAodWludDMyX3QpKHVsbHRtcCA+PiAwKTsKKwkJICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCAodV9jaGFyKXR5cGUsCisJCQkJICAgICAodV9jaGFyICopICZjNjQsIHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KSk7CisJICAgICAgfQorCSAgICAgIGJyZWFrOwogCiAgICAgICAgICAgY2FzZSBBU05fT0NURVRfU1RSOgogICAgICAgICAgIGNhc2UgQVNOX0JJVF9TVFI6CisgICAgICAgICAgY2FzZSBBU05fT1BBUVVFOgogCSAgICAgIC8qIENoZWNrIHRoYXQgd2UgaGF2ZSBiZWVuIHBhc3NlZCBzb21ldGhpbmcgd2l0aCBhIHN0cmluZyB2YWx1ZSAob3IgYSBibGVzc2VkIHNjYWxhcikgKi8KIAkgICAgICBpZiAoIVN2UE9LcCh2YWx1ZSkgJiYgKFN2VFlQRSh2YWx1ZSkgIT0gU1Z0X1BWTUcpKSB7Ci0JCXNubXBfbG9nKExPR19FUlIsICJOb24tc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9PQ1RFVF9TVFIvQVNOX0JJVF9TVFI6IHR5cGUgd2FzICVkXG4iLAotCQkJU3ZUWVBFKHZhbHVlKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJOb24tc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9PQ1RFVF9TVFIvQVNOX0JJVF9TVFI6IHR5cGUgd2FzICVsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKVN2VFlQRSh2YWx1ZSkpOwogCQlSRVRWQUwgPSAwOwogCQlicmVhazsKIAkgICAgICB9CkBAIC03MzMsOCArNzU1LDggQEAKIAogCSAgICAgIC8qIENoZWNrIHRoYXQgd2UgaGF2ZSBiZWVuIHBhc3NlZCBzb21ldGhpbmcgd2l0aCBhIHN0cmluZyB2YWx1ZSAob3IgYSBibGVzc2VkIHNjYWxhcikgKi8KIAkgICAgICBpZiAoIVN2UE9LcCh2YWx1ZSkgJiYgKFN2VFlQRSh2YWx1ZSkgIT0gU1Z0X1BWTUcpKSB7Ci0JCXNubXBfbG9nKExPR19FUlIsICJOb24tc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9JUEFERFJFU1M6IHR5cGUgd2FzICVkXG4iLAotCQkJU3ZUWVBFKHZhbHVlKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJOb24tc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9JUEFERFJFU1M6IHR5cGUgd2FzICVsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKVN2VFlQRSh2YWx1ZSkpOwogCQlSRVRWQUwgPSAwOwogCQlicmVhazsKIAkgICAgICB9CkBAIC03NDcsNyArNzY5LDcgQEAKIAogCSAgICAgICMgU2FuaXR5IGNoZWNrIG9uIGFkZHJlc3MgbGVuZ3RoCiAJICAgICAgaWYgKChzdHJpbmdsZW4gIT0gNCkgJiYgKHN0cmluZ2xlbiAhPSAxNikpIHsKLQkgICAgICAJCXNubXBfbG9nKExPR19FUlIsICJJUCBhZGRyZXNzIG9mICVkIGJ5dGVzIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9JUEFERFJFU1NcbiIsIHN0cmluZ2xlbik7CisJICAgICAgCQlzbm1wX2xvZyhMT0dfRVJSLCAiSVAgYWRkcmVzcyBvZiAlIiBORVRTTk1QX1BSSXogImQgYnl0ZXMgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX0lQQUREUkVTU1xuIiwgc3RyaW5nbGVuKTsKIAkJCVJFVFZBTCA9IDA7CiAJCQlicmVhazsKIAkgICAgICB9CkBAIC03NjAsOCArNzgyLDggQEAKICAgICAgICAgICBjYXNlIEFTTl9PQkpFQ1RfSUQ6CiAJICAgICAgLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGJlZW4gcGFzc2VkIHNvbWV0aGluZyB3aXRoIGEgc3RyaW5nIHZhbHVlIChvciBhIGJsZXNzZWQgc2NhbGFyKSAqLwogCSAgICAgIGlmICghU3ZQT0twKHZhbHVlKSAmJiAoU3ZUWVBFKHZhbHVlKSAhPSBTVnRfUFZNRykpIHsKLQkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi1zdHJpbmcgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX09CSkVDVF9JRDogdHlwZSB3YXMgJWRcbiIsCi0JCQlTdlRZUEUodmFsdWUpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi1zdHJpbmcgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX09CSkVDVF9JRDogdHlwZSB3YXMgJWx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpU3ZUWVBFKHZhbHVlKSk7CiAJCVJFVFZBTCA9IDA7CiAJCWJyZWFrOwogCSAgICAgIH0KQEAgLTg1MSw2ICs4NzMsNDggQEAKIAogTU9EVUxFID0gTmV0U05NUDo6YWdlbnQgIFBBQ0tBR0UgPSBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gUFJFRklYID0gbmFycWlfCiAKKworU1YgKgorbmFycWlfZ2V0U291cmNlSXAobWUpCisgICAgICAgIFNWICptZTsKKyAgICBQUkVJTklUOgorICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbzsKKwluZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmZyb207CisgICAgICAgIFNWICpyYXJnOworCisgICAgQ09ERToKKyAgICAgICAgcmVxaW5mbyA9IChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqKSBTdklWKFN2UlYobWUpKTsKKworICAgICAgICAvKiBYWFg6IHRyYW5zcG9ydC1zcGVjaWZpYzogVURQL0lQdjQgb25seSEgKi8KKwlhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIChyZXFpbmZvLT5hc3AtPnBkdS0+dHJhbnNwb3J0X2RhdGEpOworCWZyb20gPSAoc3RydWN0IHNvY2thZGRyX2luICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7CisgICAgICAgIHJhcmcgPSBuZXdTVnB2KChjb25zdCBjaGFyICopKCZmcm9tLT5zaW5fYWRkci5zX2FkZHIpLCBzaXplb2YoZnJvbS0+c2luX2FkZHIuc19hZGRyKSk7CisgICAgICAgIFJFVFZBTCA9IHJhcmc7CisgICAgT1VUUFVUOgorICAgICAgICBSRVRWQUwKKworCitTViAqCituYXJxaV9nZXREZXN0SXAobWUpCisgICAgICAgIFNWICptZTsKKyAgICBQUkVJTklUOgorICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbzsKKwluZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpcjsKKwlzdHJ1Y3QgaW5fYWRkciAqdG87CisgICAgICAgIFNWICpyYXJnOworCisgICAgQ09ERToKKyAgICAgICAgcmVxaW5mbyA9IChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqKSBTdklWKFN2UlYobWUpKTsKKworICAgICAgICAvKiBYWFg6IHRyYW5zcG9ydC1zcGVjaWZpYzogVURQL0lQdjQgb25seSEgKi8KKwlhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIChyZXFpbmZvLT5hc3AtPnBkdS0+dHJhbnNwb3J0X2RhdGEpOworCXRvID0gKHN0cnVjdCBpbl9hZGRyICopICYoYWRkcl9wYWlyLT5sb2NhbF9hZGRyKTsKKyAgICAgICAgcmFyZyA9IG5ld1NWcHYoKGNvbnN0IGNoYXIgKikoJnRvLT5zX2FkZHIpLCBzaXplb2YodG8tPnNfYWRkcikpOworICAgICAgICBSRVRWQUwgPSByYXJnOworICAgIE9VVFBVVDoKKyAgICAgICAgUkVUVkFMCisKIGludAogbmFycWlfZ2V0TW9kZShtZSkKICAgICAgICAgU1YgKm1lOwpkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMIGIvcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMCmluZGV4IDY3ZDVmZjAuLmVkNjQ4M2EgMTAwNjQ0Ci0tLSBhL3BlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTAorKysgYi9wZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwKQEAgLTI0LDkgKzI0LDkgQEAKICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIG15ICgkc25tcF9saWIsICRzbm1wX2xsaWIsICRzZXApOwotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKICAgICAgICRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsJCi0gICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCI7CisgICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIjsKICAgICAgICRzZXAgPSAnXFwnOwogICAgICAgJHNubXBfbGliX2ZpbGUgPSAnbmV0c25tcC5saWInOwogICAgICAgJHNubXBfbGlua19saWIgPSAnbmV0c25tcCc7CkBAIC05Niw3ICs5Niw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0xNzksNyArMTc5LDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0gYi9wZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbQppbmRleCBhNzZjMzZiLi5hODgxMmViIDEwMDY0NAotLS0gYS9wZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbQorKysgYi9wZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbQpAQCAtOTYsNyArOTYsNyBAQAogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfTUFYX0dFVEJVTEtSRVBFQVRTCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9NQVhfR0VUQlVMS1JFU1BPTlNFUwogKTsKLSRWRVJTSU9OID0gJzUuMDQwNCc7CiskVkVSU0lPTiA9ICc1LjA3MDMnOwogCiBzdWIgQVVUT0xPQUQgewogICAgICMgVGhpcyBBVVRPTE9BRCBpcyB1c2VkIHRvICdhdXRvbG9hZCcgY29uc3RhbnRzIGZyb20gdGhlIGNvbnN0YW50KCkKQEAgLTIxOSw0MyArMjE5LDYgQEAKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0NBQ0hFX1RJTUVPVVQKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1ZFUlNJT04KIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1NFQ0xFVkVMCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9NQVhfR0VUQlVMS1JFUEVBVFMKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX01BWF9HRVRCVUxLUkVTUE9OU0VTCi0KLQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfVkVSQk9TRQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUk9MRQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fUk9PVF9BQ0NFU1MKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9NQVNURVIKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1FVSVRfSU1NRURJQVRFTFkKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0RJU0FCTEVfUEVSTAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fQ09OTkVDVElPTl9XQVJOSU5HUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfTEVBVkVfUElERklMRQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fQ0FDSElORwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfU1RSSUNUX0RJU01BTgotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfRE9OVF9SRVRBSU5fTk9USUZJQ0FUSU9OUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfRE9OVF9MT0dfVENQV1JBUFBFUlNfQ09OTkVDVFMKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1BST0dOQU1FCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tFVAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfUE9SVFMKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1NFQ05BTUUKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1BFUkxfSU5JVF9GSUxFCi0JCQkJICAgTkVUU05NUF9EU19TTVVYX1NPQ0tFVAotCQkJCSAgIE5FVFNOTVBfRFNfTk9USUZfTE9HX0NUWAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfRkxBR1MKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfR1JPVVBJRAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1BJTkdfSU5URVJWQUwKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9USU1FT1VUCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9BR0VOVFhfUkVUUklFUwotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX1BFUk0KLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1hfRElSX1BFUk0KLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS19VU0VSCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tfR1JPVVAKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0NBQ0hFX1RJTUVPVVQKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1ZFUlNJT04KLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1NFQ0xFVkVMCiAKIAogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfVkVSQk9TRQpkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCBiL3BlcmwvYWdlbnQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyNjMwZQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvYWdlbnQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbm1wX2VuYWJsZV9zdGRlcnJsb2cpCisKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvdGVzdC5wbCBiL3BlcmwvYWdlbnQvdGVzdC5wbAppbmRleCBhN2FjOGY5Li44OGNiYTU2IDEwMDY0NAotLS0gYS9wZXJsL2FnZW50L3Rlc3QucGwKKysrIGIvcGVybC9hZ2VudC90ZXN0LnBsCkBAIC05LDcgKzksNyBAQAogQkVHSU4geyAkfCA9IDE7IAogICAgICAgICAkRU5WeydTTk1QQ09ORlBBVEgnfSA9ICdub3BhdGgnOwogICAgICAgICAkRU5WeydNSUJTJ30gPSAnJzsKLSAgICAgICAgcHJpbnQgIjEuLjVcbiI7CisgICAgICAgIHByaW50ICIxLi42XG4iOwogICAgICAgfQogRU5EIHtwcmludCAibm90IG9rIDFcbiIgdW5sZXNzICRsb2FkZWQ7fQogdXNlIE5ldFNOTVA6OmFnZW50ICgnOmFsbCcpOwpAQCAtNzYsNiArNzYsMTIgQEAKIHByaW50IGl0KCRyZWdpdGVtLCA0KTsKICNwcmludCBTVERFUlIgJHJlZ2l0ZW0sIjoiLHJlZigkcmVnaXRlbSksIlxuIjsKIHByaW50IGl0KHJlZigkcmVnaXRlbSkgZXEgIk5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIiwgNSk7CisKK215ICR1cHRpbWUxID0gJGFnZW50LT51cHRpbWUoKTsKK215ICR1cHRpbWUyID0gJGFnZW50LT51cHRpbWUoNjY2KTsKK215ICR1cHRpbWUzID0gJGFnZW50LT51cHRpbWUoNTU1LCA0NDQpOworcHJpbnQgaXQoJHVwdGltZTEgPD0gJHVwdGltZTIgJiYgJHVwdGltZTIgPD0gJHVwdGltZTMsIDYpOworCiBleGl0OwogCiB3aGlsZSgxKSB7CmRpZmYgLS1naXQgYS9wZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwgYi9wZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwKaW5kZXggNTQ5OTZhYi4uN2M2NzFiOCAxMDA2NDQKLS0tIGEvcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMCisrKyBiL3BlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTApAQCAtMjMsOSArMjMsOSBAQAogICAgIH0gICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgCiAgICAgbXkgKCRzbm1wX2xpYiwgJHNubXBfbGxpYiwgJHNlcCk7Ci0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogICAgICAgJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwkKLSAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIjsKKyAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiOwogICAgICAgJHNlcCA9ICdcXCc7CiAgICAgICAkc25tcF9saWJfZmlsZSA9ICduZXRzbm1wLmxpYic7CiAgICAgICAkc25tcF9saW5rX2xpYiA9ICduZXRzbm1wJzsKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTE3OCw3ICsxNzgsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSBiL3BlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtCmluZGV4IDgyOGJiZGIuLmI4OTg1MDEgMTAwNjQ0Ci0tLSBhL3BlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtCisrKyBiL3BlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJCQkgICBORVRTTk1QX0RTX0xJQl9LU01fU0VSVklDRV9OQU1FCiAJCQkJICAgTkVUU05NUF9EU19MSUJfU0JTTV9MT0NBTF9QV0QKICk7Ci0kVkVSU0lPTiA9ICc1LjA0MDQnOworJFZFUlNJT04gPSAnNS4wNzAzJzsKIAogc3ViIEFVVE9MT0FEIHsKICAgICAjIFRoaXMgQVVUT0xPQUQgaXMgdXNlZCB0byAnYXV0b2xvYWQnIGNvbnN0YW50cyBmcm9tIHRoZSBjb25zdGFudCgpCmRpZmYgLS1naXQgYS9wZXJsL2RlZmF1bHRfc3RvcmUvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmggYi9wZXJsL2RlZmF1bHRfc3RvcmUvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvZGVmYXVsdF9zdG9yZS9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApkaWZmIC0tZ2l0IGEvcGVybC9kZWZhdWx0X3N0b3JlL3Rlc3QucGwgYi9wZXJsL2RlZmF1bHRfc3RvcmUvdGVzdC5wbAppbmRleCA5MzBjYThjLi5iNDI5YzZiIDEwMDY0NAotLS0gYS9wZXJsL2RlZmF1bHRfc3RvcmUvdGVzdC5wbAorKysgYi9wZXJsL2RlZmF1bHRfc3RvcmUvdGVzdC5wbApAQCAtMTAsNyArMTAsNyBAQAogCiAJJXRlc3RzID0gKCAKICAgICAgICAgICAgICAgICAgICJORVRTTk1QX0RTX01BWF9JRFMiICAgICAgICAgICAgICAgICAgICAgPT4gMywKLSAgICAgICAgICAgICAgICAgICJORVRTTk1QX0RTX01BWF9TVUJJRFMiICAgICAgICAgICAgICAgICAgPT4gNDAsCisgICAgICAgICAgICAgICAgICAiTkVUU05NUF9EU19NQVhfU1VCSURTIiAgICAgICAgICAgICAgICAgID0+IDQ4LAogICAgICAgICAgICAgICAgICAgIk5FVFNOTVBfRFNfTElCUkFSWV9JRCIgICAgICAgICAgICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIk5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQiICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIk5FVFNOTVBfRFNfVE9LRU5fSUQiICAgICAgICAgICAgICAgICAgICA9PiAyLApkaWZmIC0tZ2l0IGEvcHl0aG9uL0xJQ0VOU0UgYi9weXRob24vTElDRU5TRQppbmRleCBlYmViZjRhLi40Yzc2MzhmIDEwMDY0NAotLS0gYS9weXRob24vTElDRU5TRQorKysgYi9weXRob24vTElDRU5TRQpAQCAtMSwzICsxLDM5IEBACitWYXJpb3VzIGNvcHlyaWdodHMgYXBwbHkgdG8gdGhpcyBwYWNrYWdlLCBsaXN0ZWQgaW4gdmFyaW91cyBzZXBhcmF0ZQorcGFydHMgYmVsb3cuICBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91IHJlYWQgYWxsIHRoZSBwYXJ0cy4KKworLS0tLSBQYXJ0IDE6IFNwYXJ0YSwgSW5jIChCU0QpIC0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMy0yMDEwLCBTcGFydGEsIEluYworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgCisqICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorKiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgCisqICBOZWl0aGVyIHRoZSBuYW1lIG9mIFNwYXJ0YSwgSW5jIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUworSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKK0NPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CitPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLSBQYXJ0IDI6IFNjaWVuY2VMb2dpYywgTExDIChCU0QpIC0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDA2LCBTY2llbmNlTG9naWMsIExMQwogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAKZGlmZiAtLWdpdCBhL3B5dGhvbi9SRUFETUUgYi9weXRob24vUkVBRE1FCmluZGV4IGVmNWI0NzcuLmY5OThmOGIgMTAwNjQ0Ci0tLSBhL3B5dGhvbi9SRUFETUUKKysrIGIvcHl0aG9uL1JFQURNRQpAQCAtODksNyArODksNiBAQAogICAgbmV0c25tcC5TZXNzaW9uKDx0YWc+PTx2YWx1ZT4sIC4uLiApCiAKICAgICBEZXN0SG9zdCAgICAtIGRlZmF1bHQgJ2xvY2FsaG9zdCcsIGhvc3RuYW1lIG9yIGlwIGFkZHIgb2YgU05NUCBhZ2VudAotICAgIENvbW11bml0eSAgIC0gZGVmYXVsdCAncHVibGljJywgU05NUCBjb21tdW5pdHkgc3RyaW5nICh1c2VkIGZvciBib3RoIFIvVykKICAgICBWZXJzaW9uICAgICAtIGRlZmF1bHQgJzMnLCBbMSwgMiAoZXF1aXYgdG8gMmMpLCAzXQogICAgIFJlbW90ZVBvcnQgIC0gZGVmYXVsdCAnMTYxJywgYWxsb3cgcmVtb3RlIFVEUCBwb3J0IHRvIGJlIG92ZXJyaWRkZW4KICAgICBUaW1lb3V0ICAgICAtIGRlZmF1bHQgJzUwMDAwMCcsIG1pY3JvLXNlY29uZHMgYmVmb3JlIHJldHJ5CkBAIC05OSwxOCArOTgsNiBAQAogICAgICAgICAgICAgICAgICAgdW5kZWYgd2lsbCBiZSByZXR1cm5lZCBmb3IgYWxsIE5PU1VDSCB2YXJiaW5kcywgd2hlbiBzZXQKICAgICAgICAgICAgICAgICAgIHRvICcwJyB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIHRoZSBlbnRpcmUgZ2V0IHJlcXVlc3QKICAgICAgICAgICAgICAgICAgIHdpbGwgZmFpbCBvbiBhbnkgTk9TVUNIIGVycm9yIChhcHBsaWVzIHRvIHYxIG9ubHkpCi0gICAgU2VjTmFtZSAgICAgLSBkZWZhdWx0ICdpbml0aWFsJywgc2VjdXJpdHkgbmFtZSAodjMpCi0gICAgU2VjTGV2ZWwgICAgLSBkZWZhdWx0ICdub0F1dGhOb1ByaXYnLCBzZWN1cml0eSBsZXZlbCBbbm9BdXRoTm9Qcml2LAotICAgICAgICAgICAgICAgICAgYXV0aE5vUHJpdiwgYXV0aFByaXZdICh2MykKLSAgICBTZWNFbmdpbmVJZCAtIGRlZmF1bHQgPG5vbmU+LCBzZWN1cml0eSBlbmdpbmVJRCwgd2lsbCBiZSBwcm9iZWQgaWYgbm90Ci0gICAgICAgICAgICAgICAgICBzdXBwbGllZCAodjMpCi0gICAgQ29udGV4dEVuZ2luZUlkIC0gZGVmYXVsdCA8U2VjRW5naW5lSWQ+LCBjb250ZXh0IGVuZ2luZUlELCB3aWxsIGJlCi0gICAgICAgICAgICAgICAgICAgICAgcHJvYmVkIGlmIG5vdCBzdXBwbGllZCAodjMpCi0gICAgQ29udGV4dCAgICAgLSBkZWZhdWx0ICcnLCBjb250ZXh0IG5hbWUgKHYzKQotICAgIEF1dGhQcm90byAgIC0gZGVmYXVsdCAnTUQ1JywgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgW01ENSwgU0hBXSAodjMpCi0gICAgQXV0aFBhc3MgICAgLSBkZWZhdWx0IDxub25lPiwgYXV0aGVudGljYXRpb24gcGFzc3BocmFzZQotICAgIFByaXZQcm90byAgIC0gZGVmYXVsdCAnREVTJywgcHJpdmFjeSBwcm90b2NvbCBbREVTXSAodjMpCi0gICAgUHJpdlBhc3MgICAgLSBkZWZhdWx0IDxub25lPiwgcHJpdmFjeSBwYXNzcGhyYXNlICh2MykKICAgICBVc2VMb25nTmFtZXMgLSBzZXQgdG8gbm9uLXplcm8gdG8gaGF2ZSA8dGFncz4gZm9yICdnZXRuZXh0JyBtZXRob2RzIAogICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIHByZWZlcnJpbmcgbG9uZ2VyIE1pYiBuYW1lIGNvbnZlbnRpb24gKGUuZy4sIAogCQkgIHN5c3RlbS5zeXNEZXNjciB2cyBqdXN0IHN5c0Rlc2NyKQpAQCAtMTM2LDggKzEyMyw0MCBAQAogICAgIEVycm9yTnVtICAgIC0gcmVhZC1vbmx5LCBob2xkcyB0aGUgc25tcF9lcnIgb3Igc3RhdHVzIG9mIGxhc3QgcmVxdWVzdAogICAgIEVycm9ySW5kICAgIC0gcmVhZC1vbmx5LCBob2xkcyB0aGUgc25tcF9lcnJfaW5kZXggd2hlbiBhcHByb3ByaWF0ZQogCisgICBTTk1QdjEvU05NUHYyYyBvcHRpb25zOgorICAgIENvbW11bml0eSAgIC0gZGVmYXVsdCAncHVibGljJywgU05NUCBjb21tdW5pdHkgc3RyaW5nICh1c2VkIGZvciBib3RoIFIvVykKKworICAgU05NUHYzIE9wdGlvbnM6CisgICAgU2VjTmFtZSAgICAgLSBkZWZhdWx0ICdpbml0aWFsJywgc2VjdXJpdHkgbmFtZSAodjMpCisgICAgU2VjTGV2ZWwgICAgLSBkZWZhdWx0ICdub0F1dGhOb1ByaXYnLCBzZWN1cml0eSBsZXZlbCBbbm9BdXRoTm9Qcml2LAorICAgICAgICAgICAgICAgICAgYXV0aE5vUHJpdiwgYXV0aFByaXZdICh2MykKKyAgICBDb250ZXh0RW5naW5lSWQgLSBkZWZhdWx0IDxTZWNFbmdpbmVJZD4sIGNvbnRleHQgZW5naW5lSUQsIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICBwcm9iZWQgaWYgbm90IHN1cHBsaWVkICh2MykKKyAgICBDb250ZXh0ICAgICAtIGRlZmF1bHQgJycsIGNvbnRleHQgbmFtZSAodjMpCisKKyAgIFNOTVB2MyBvdmVyIFRMUyBvciBEVExTIG9wdGlvbnM6CisgICAgT3VySWRlbnRpdHkgICAtIFRoZSBmaW5nZXJwcmludCBvciBmaWxlIG5hbWUgZm9yIHRoZSBsb2NhbCBYLjUwOQorICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSB0byB1c2UgZm9yIG91ciBpZGVudGl0eS4gIFJ1bgorICAgICAgICAgICAgICAgICAgICBuZXQtc25tcC1jZXJ0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGNlcnRpZmljYXRlcy4KKyAgICBUaGVpcklkZW50aXR5IC0gVGhlIGZpbmdlcnByaW50IG9yIGZpbGUgbmFtZSBmb3IgdGhlIGxvY2FsIFguNTA5CisgICAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIHRvIHVzZSBmb3IgdGhlaXIgaWRlbnRpdHkuICAKKyAgICBUcnVzdENlcnQgICAgIC0gQSB0cnVzdGVkIGNlcnRpZmljYXRlIHRvIHVzZSBmb3IgdmFsaWRhdGluZworICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuICBUeXBpY2FsbHkgdGhpcyB3b3VsZCBiZSBhIENBCisgICAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlLgorICAgIFRoZWlySG9zdG5hbWUgLSBUaGVpciBob3N0bmFtZSB0byBleHBlY3QuICBFaXRoZXIgIlRoZWlySWRlbnRpdHkiCisgICAgCQkgICAgb3IgYSB0cnVzdGVkIGNlcnRpZmljYXRlIHBsdXMgYSBob3N0bmFtZSBpcyBuZWVkZWQKKyAgICAJCSAgICB0byB2YWxpZGF0ZSB0aGUgc2VydmVyIGlzIHRoZSBwcm9wZXIgc2VydmVyLgorICAgIAorICAgU05NUHYzIHdpdGggVVNNIHNlY3VyaXR5IE9wdGlvbnM6CisgICAgU2VjRW5naW5lSWQgLSBkZWZhdWx0IDxub25lPiwgc2VjdXJpdHkgZW5naW5lSUQsIHdpbGwgYmUgcHJvYmVkIGlmIG5vdAorICAgICAgICAgICAgICAgICAgc3VwcGxpZWQgKHYzKQorICAgIEF1dGhQcm90byAgIC0gZGVmYXVsdCAnTUQ1JywgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgW01ENSwgU0hBXSAodjMpCisgICAgQXV0aFBhc3MgICAgLSBkZWZhdWx0IDxub25lPiwgYXV0aGVudGljYXRpb24gcGFzc3BocmFzZQorICAgIFByaXZQcm90byAgIC0gZGVmYXVsdCAnREVTJywgcHJpdmFjeSBwcm90b2NvbCBbREVTXSAodjMpCisgICAgUHJpdlBhc3MgICAgLSBkZWZhdWx0IDxub25lPiwgcHJpdmFjeSBwYXNzcGhyYXNlICh2MykKKwogICAgcHJpdmF0ZToKLSAgICBzZXNzX3B0ciAgIC0gaW50ZXJuYWwgZmllbGQgdXNlZCB0byBjYWNoZSBhIGNyZWF0ZWQgc2Vzc2lvbiBzdHJ1Y3R1cmUKKyAgICBzZXNzX3B0ciAgICAtIGludGVybmFsIGZpZWxkIHVzZWQgdG8gY2FjaGUgYSBjcmVhdGVkIHNlc3Npb24gc3RydWN0dXJlCiAKICAgIG1ldGhvZHM6CiAKZGlmZiAtLWdpdCBhL3B5dGhvbi9uZXRzbm1wL2NsaWVudC5weSBiL3B5dGhvbi9uZXRzbm1wL2NsaWVudC5weQppbmRleCBhYTA0NzJkLi42ZmM0YjJlIDEwMDY0NAotLS0gYS9weXRob24vbmV0c25tcC9jbGllbnQucHkKKysrIGIvcHl0aG9uL25ldHNubXAvY2xpZW50LnB5CkBAIC0zMCw2ICszMCwxMCBAQAogICAgICAgICAnRW5naW5lYm9vdHMnOjAsCiAgICAgICAgICdFbmdpbmV0aW1lJzowLAogICAgICAgICAnVXNlTnVtZXJpYyc6MCwKKyAgICAgICAgJ091cklkZW50aXR5JzonJywKKyAgICAgICAgJ1RoZWlySWRlbnRpdHknOicnLAorICAgICAgICAnVGhlaXJIb3N0bmFtZSc6JycsCisgICAgICAgICdUcnVzdENlcnQnOicnCiAgICAgICAgIH0KICAgICBrZXlzID0ga2FyZ3Mua2V5cygpCiAgICAgZm9yIGtleSBpbiBrZXlzOgpAQCAtMTI2LDcgKzEzMCwyOCBAQAogICAgICAgICBmb3Igayx2IGluIHNlc3NfYXJncy5pdGVtcygpOgogICAgICAgICAgICAgc2VsZi5fX2RpY3RfX1trXSA9IHYKIAotICAgICAgICBpZiBzZXNzX2FyZ3NbJ1ZlcnNpb24nXSA9PSAzOgorICAgICAgICAgICAgCisgICAgICAgICMgY2hlY2sgZm9yIHRyYW5zcG9ydHMgdGhhdCBtYXkgYmUgdHVubmVsZWQKKyAgICAgICAgdHJhbnNwb3J0Q2hlY2sgPSByZS5jb21waWxlKCdeKHRsc3xkdGxzfHNzaCknKTsKKyAgICAgICAgbWF0Y2ggPSB0cmFuc3BvcnRDaGVjay5tYXRjaChzZXNzX2FyZ3NbJ0Rlc3RIb3N0J10pCisKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICBzZWxmLnNlc3NfcHRyID0gY2xpZW50X2ludGYuc2Vzc2lvbl90dW5uZWxlZCgKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ1ZlcnNpb24nXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ0Rlc3RIb3N0J10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydMb2NhbFBvcnQnXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ1JldHJpZXMnXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ1RpbWVvdXQnXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ1NlY05hbWUnXSwKKyAgICAgICAgICAgICAgICBzZWNMZXZlbE1hcFtzZXNzX2FyZ3NbJ1NlY0xldmVsJ11dLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snQ29udGV4dEVuZ2luZUlkJ10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydDb250ZXh0J10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydPdXJJZGVudGl0eSddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snVGhlaXJJZGVudGl0eSddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snVGhlaXJIb3N0bmFtZSddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snVHJ1c3RDZXJ0J10sCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgZWxpZiBzZXNzX2FyZ3NbJ1ZlcnNpb24nXSA9PSAzOgogICAgICAgICAgICAgc2VsZi5zZXNzX3B0ciA9IGNsaWVudF9pbnRmLnNlc3Npb25fdjMoCiAgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydWZXJzaW9uJ10sCiAgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydEZXN0SG9zdCddLApkaWZmIC0tZ2l0IGEvcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYyBiL3B5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMKaW5kZXggM2E5MDRhNi4uOGI4ODA1ZCAxMDA2NDQKLS0tIGEvcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYworKysgYi9weXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jCkBAIC02NTgsNiArNjU4LDkgQEAKIAluZXduYW1lX2xlbiA9IE1BWF9PSURfTEVOOwogCWlmIChyZWFkX29iamlkKHRhZywgbmV3bmFtZSwgJm5ld25hbWVfbGVuKSkgewkvKiBsb25nIG5hbWUgKi8KIAkgIHJ0cCA9IHRwID0gZ2V0X3RyZWUobmV3bmFtZSwgbmV3bmFtZV9sZW4sIGdldF90cmVlX2hlYWQoKSk7CisJfSBlbHNlIHsKKwkgIC8qIGZhaWxlZCB0byBwYXJzZSB0aGUgT0lEICovCisJICBuZXduYW1lX2xlbiA9IDA7CiAJfQogICAgICAgfQogICAgICAgZWxzZSB7CkBAIC03NTgsOCArNzYxLDcgQEAKICAgICB9CiAKICAgICB2YXJzLT5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKLSAgICB2YXJzLT5uYW1lID0gKG9pZCAqKW1hbGxvYyhuYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKLSAgICBtZW1jcHkoKGNoYXIgKil2YXJzLT5uYW1lLCAoY2hhciAqKW5hbWUsIG5hbWVfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOworICAgIHZhcnMtPm5hbWUgPSBzbm1wX2R1cGxpY2F0ZV9vYmppZChuYW1lLCBuYW1lX2xlbmd0aCk7CiAgICAgdmFycy0+bmFtZV9sZW5ndGggPSBuYW1lX2xlbmd0aDsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgIGNhc2UgVFlQRV9JTlRFR0VSOgpAQCAtODQ1LDkgKzg0Nyw4IEBACiAgICAgICAgICAgICB2YXJzLT52YWwub2JqaWQgPSBOVUxMOwogCSAgICByZXQgPSBGQUlMVVJFOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFycy0+dmFsLm9iamlkID0gc25tcF9kdXBsaWNhdGVfb2JqaWQob2lkYnVmLCB2YXJzLT52YWxfbGVuKTsKICAgICAgICAgICAgIHZhcnMtPnZhbF9sZW4gKj0gc2l6ZW9mKG9pZCk7Ci0gICAgICAgICAgICB2YXJzLT52YWwub2JqaWQgPSAob2lkICopbWFsbG9jKHZhcnMtPnZhbF9sZW4pOwotICAgICAgICAgICAgbWVtY3B5KChjaGFyICopdmFycy0+dmFsLm9iamlkLCAoY2hhciAqKW9pZGJ1ZiwgdmFycy0+dmFsX2xlbik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKQEAgLTg4MCwxMyArODgxLDE2IEBACiAgICBpZiAoc3MgPT0gTlVMTCkgewogICAgICAgICplcnJfbnVtID0gMDsKICAgICAgICAqZXJyX2luZCA9IFNOTVBFUlJfQkFEX1NFU1NJT047CisgICAgICAgc3RhdHVzID0gU05NUEVSUl9CQURfU0VTU0lPTjsKICAgICAgICBzdHJsY3B5KGVycl9zdHIsIHNubXBfYXBpX2VycnN0cmluZygqZXJyX2luZCksIFNUUl9CVUZfU0laRSk7CiAgICAgICAgZ290byBkb25lOwogICAgfQogCiByZXRyeToKIAotICAgc3RhdHVzID0gc25tcF9zeW5jaF9yZXNwb25zZShzcywgcGR1LCByZXNwb25zZSk7CisgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICBzdGF0dXMgPSBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uoc3MsIHBkdSwgcmVzcG9uc2UpOworICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgaWYgKCgqcmVzcG9uc2UgPT0gTlVMTCkgJiYgKHN0YXR1cyA9PSBTVEFUX1NVQ0NFU1MpKSBzdGF0dXMgPSBTVEFUX0VSUk9SOwogCkBAIC0xMTA0LDYgKzExMDgsOCBAQAogCiAgIF9fbGlicmFyaWVzX2luaXQoInB5dGhvbiIpOwogCisgIHNubXBfc2Vzc19pbml0KCZzZXNzaW9uKTsKKwogICBzZXNzaW9uLnZlcnNpb24gPSAtMTsKICNpZm5kZWYgRElTQUJMRV9TTk1QVjEKICAgaWYgKHZlcnNpb24gPT0gMSkgewpAQCAtMTEzMiw3ICsxMTM4LDcgQEAKICAgc2Vzc2lvbi50aW1lb3V0ID0gdGltZW91dDsgLyogMTAwMDAwMEwgKi8KICAgc2Vzc2lvbi5hdXRoZW50aWNhdG9yID0gTlVMTDsKIAotICBzcyA9IHNubXBfb3Blbigmc2Vzc2lvbik7CisgIHNzID0gc25tcF9zZXNzX29wZW4oJnNlc3Npb24pOwogCiAgIGlmIChzcyA9PSBOVUxMKSB7CiAgICAgaWYgKHZlcmJvc2UpIApAQCAtMTI5MSw2ICsxMjk3LDk5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCituZXRzbm1wX2NyZWF0ZV9zZXNzaW9uX3R1bm5lbGVkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgaW50IHZlcnNpb247CisgIGNoYXIgKnBlZXI7CisgIGludCAgbHBvcnQ7CisgIGludCAgcmV0cmllczsKKyAgaW50ICB0aW1lb3V0OworICBjaGFyICogIHNlY19uYW1lOworICBpbnQgICAgIHNlY19sZXZlbDsKKyAgY2hhciAqICBjb250ZXh0X2VuZ19pZDsKKyAgY2hhciAqICBjb250ZXh0OworICBjaGFyICogIG91cl9pZGVudGl0eTsKKyAgY2hhciAqICB0aGVpcl9pZGVudGl0eTsKKyAgY2hhciAqICB0aGVpcl9ob3N0bmFtZTsKKyAgY2hhciAqICB0cnVzdF9jZXJ0OworICBTbm1wU2Vzc2lvbiBzZXNzaW9uID0gezB9OworICBTbm1wU2Vzc2lvbiAqc3MgPSBOVUxMOworICBpbnQgdmVyYm9zZSA9IHB5X25ldHNubXBfdmVyYm9zZSgpOworCisgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXNpaWlzaXNzc3NzcyIsICZ2ZXJzaW9uLAorCQkJJnBlZXIsICZscG9ydCwgJnJldHJpZXMsICZ0aW1lb3V0LAorCQkJJnNlY19uYW1lLCAmc2VjX2xldmVsLAorCQkJJmNvbnRleHRfZW5nX2lkLCAmY29udGV4dCwgCisJCQkmb3VyX2lkZW50aXR5LCAmdGhlaXJfaWRlbnRpdHksIAorCQkJJnRoZWlyX2hvc3RuYW1lLCAmdHJ1c3RfY2VydCkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgX19saWJyYXJpZXNfaW5pdCgicHl0aG9uIik7CisgIHNubXBfc2Vzc19pbml0KCZzZXNzaW9uKTsKKworICBpZiAodmVyc2lvbiAhPSAzKSB7CisgICAgc2Vzc2lvbi52ZXJzaW9uID0gU05NUF9WRVJTSU9OXzM7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50ZigiVXNpbmcgdmVyc2lvbiAzIGFzIGl0J3MgdGhlIG9ubHkgdmVyc2lvbiB0aGF0IHN1cHBvcnRzIHR1bm5lbGluZ1xuIik7CisgIH0KKworICBzZXNzaW9uLnBlZXJuYW1lID0gcGVlcjsKKyAgc2Vzc2lvbi5yZXRyaWVzID0gcmV0cmllczsgLyogNSAqLworICBzZXNzaW9uLnRpbWVvdXQgPSB0aW1lb3V0OyAvKiAxMDAwMDAwTCAqLworICBzZXNzaW9uLmNvbnRleHROYW1lTGVuID0gU1RSTEVOKGNvbnRleHQpOworICBzZXNzaW9uLmNvbnRleHROYW1lID0gY29udGV4dDsKKyAgc2Vzc2lvbi5zZWN1cml0eU5hbWVMZW4gPSBTVFJMRU4oc2VjX25hbWUpOworICBzZXNzaW9uLnNlY3VyaXR5TmFtZSA9IHNlY19uYW1lOworICBzZXNzaW9uLnNlY3VyaXR5TGV2ZWwgPSBzZWNfbGV2ZWw7CisgIHNlc3Npb24uc2VjdXJpdHlNb2RlbCA9IE5FVFNOTVBfVFNNX1NFQ1VSSVRZX01PREVMOworCisgIC8qIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gc3RvcmUgKi8KKyAgaWYgKCFzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uKSB7CisgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3QoKTsKKyAgICAgIHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24gPQorICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInRyYW5zcG9ydF9jb25maWd1cmF0aW9uOmZpZm8iKTsKKyAgICAgIGlmICghc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbikgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGNvbnRhaW5lclxuIik7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisKKyAgICAgIHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24tPmNvbXBhcmUgPQorICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKikKKyAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWdfY29tcGFyZTsKKyAgfQorCisgIGlmIChvdXJfaWRlbnRpdHkgJiYgb3VyX2lkZW50aXR5WzBdICE9ICdcMCcpCisgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoImxvY2FsQ2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3VyX2lkZW50aXR5KSk7CisKKyAgaWYgKHRoZWlyX2lkZW50aXR5ICYmIHRoZWlyX2lkZW50aXR5WzBdICE9ICdcMCcpCisgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoInBlZXJDZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpcl9pZGVudGl0eSkpOworCisgIGlmICh0aGVpcl9ob3N0bmFtZSAmJiB0aGVpcl9ob3N0bmFtZVswXSAhPSAnXDAnKQorICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKCJ0aGVpcl9ob3N0bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXJfaG9zdG5hbWUpKTsKKworICBpZiAodHJ1c3RfY2VydCAmJiB0cnVzdF9jZXJ0WzBdICE9ICdcMCcpCisgICAgICBDT05UQUlORVJfSU5TRVJUKHNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoInRydXN0X2NlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydXN0X2NlcnQpKTsKKyAgCisgIHNzID0gc25tcF9zZXNzX29wZW4oJnNlc3Npb24pOworCisgIGlmICghc3MpCisgICAgICByZXR1cm4gTlVMTDsKKyAgLyoKKyAgICogTm90ZTogb24gYSA2NC1iaXQgc3lzdGVtIHRoZSBzdGF0ZW1lbnQgYmVsb3cgZGlzY2FyZHMgdGhlIHVwcGVyIDMyIGJpdHMgb2YKKyAgICogInNzIiwgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYSBidWcuCisgICAqLworICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIChpbnQpKHVpbnRwdHJfdClzcyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBuZXRzbm1wX2RlbGV0ZV9zZXNzaW9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgUHlPYmplY3QgKnNlc3Npb247CkBAIC0xMzAyLDcgKzE0MDEsNyBAQAogCiAgIHNzID0gKFNubXBTZXNzaW9uICopcHlfbmV0c25tcF9hdHRyX3ZvaWRfcHRyKHNlc3Npb24sICJzZXNzX3B0ciIpOwogCi0gIHNubXBfY2xvc2Uoc3MpOworICBzbm1wX3Nlc3NfY2xvc2Uoc3MpOwogICByZXR1cm4gKFB5X0J1aWxkVmFsdWUoIiIpKTsKIH0KIApAQCAtMTQ5MiwxMCArMTU5MSwxNiBAQAogCXB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJ2YWwiLCAoY2hhciAqKSBzdHJfYnVmLCBsZW4pOwogCiAJLyogc2F2ZSBpbiByZXR1cm4gdHVwbGUgYXMgd2VsbCAqLwotCVB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHZhcmxpc3RfaW5kLCAKLQkJCShsZW4gPyBQeV9CdWlsZFZhbHVlKCJzIyIsIHN0cl9idWYsIGxlbikgOgotCQkJIFB5X0J1aWxkVmFsdWUoIiIpKSk7Ci0KKwlpZiAoKHR5cGUgPT0gU05NUF9FTkRPRk1JQlZJRVcpIHx8CisJCQkodHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCkgfHwKKwkJCSh0eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UpKSB7CisJCS8qIFRyYW5zbGF0ZSBlcnJvciB0byBOb25lICovCisJCVB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHZhcmxpc3RfaW5kLCAKKwkJCVB5X0J1aWxkVmFsdWUoIiIpKTsKKwl9IGVsc2UgeworCQlQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCB2YXJsaXN0X2luZCwKKwkJCVB5X0J1aWxkVmFsdWUoInMjIiwgc3RyX2J1ZiwgbGVuKSk7CisJfQogCVB5X0RFQ1JFRih2YXJiaW5kKTsKICAgICAgIH0gZWxzZSB7CiAJcHJpbnRmKCJuZXRzbm1wX2dldDogYmFkIHZhcmJpbmQgKCVkKVxuIiwgdmFybGlzdF9pbmQpOwpAQCAtMTcwNiwxMCArMTgxMSwxNiBAQAogCXB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJ2YWwiLCAoY2hhciAqKSBzdHJfYnVmLCBsZW4pOwogCiAJLyogc2F2ZSBpbiByZXR1cm4gdHVwbGUgYXMgd2VsbCAqLwotCVB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHZhcmxpc3RfaW5kLCAKLQkJCShsZW4gPyBQeV9CdWlsZFZhbHVlKCJzIyIsIHN0cl9idWYsIGxlbikgOgotCQkJIFB5X0J1aWxkVmFsdWUoIiIpKSk7Ci0KKwlpZiAoKHR5cGUgPT0gU05NUF9FTkRPRk1JQlZJRVcpIHx8CisJCQkodHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCkgfHwKKwkJCSh0eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UpKSB7CisJCS8qIFRyYW5zbGF0ZSBlcnJvciB0byBOb25lICovCisJCVB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHZhcmxpc3RfaW5kLCAKKwkJCVB5X0J1aWxkVmFsdWUoIiIpKTsKKwl9IGVsc2UgeworCQlQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCB2YXJsaXN0X2luZCwKKwkJCVB5X0J1aWxkVmFsdWUoInMjIiwgc3RyX2J1ZiwgbGVuKSk7CisJfQogCVB5X0RFQ1JFRih2YXJiaW5kKTsKICAgICAgIH0gZWxzZSB7CiAJcHJpbnRmKCJuZXRzbm1wX2dldG5leHQ6IGJhZCB2YXJiaW5kICglZClcbiIsIHZhcmxpc3RfaW5kKTsKQEAgLTE3NDMsMTEgKzE4NTQsMTQgQEAKICAgaW50IHZhcmxpc3RfaW5kOwogICBuZXRzbm1wX3Nlc3Npb24gKnNzOwogICBuZXRzbm1wX3BkdSAqcGR1LCAqcmVzcG9uc2U7Ci0gIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyczsKKyAgbmV0c25tcF9wZHUgKm5ld3BkdTsKKyAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCAqb2xkdmFyczsKICAgc3RydWN0IHRyZWUgKnRwOwogICBpbnQgbGVuOwotICBvaWQgKm9pZF9hcnI7Ci0gIGludCBvaWRfYXJyX2xlbjsKKyAgb2lkICoqb2lkX2FyciA9IE5VTEw7CisgIGludCAqb2lkX2Fycl9sZW4gPSBOVUxMOworICBvaWQgKipvaWRfYXJyX2Jyb2tlbl9jaGVjayA9IE5VTEw7CisgIGludCAqb2lkX2Fycl9icm9rZW5fY2hlY2tfbGVuID0gTlVMTDsKICAgaW50IHR5cGU7CiAgIGNoYXIgdHlwZV9zdHJbTUFYX1RZUEVfTkFNRV9MRU5dOwogICBpbnQgc3RhdHVzOwpAQCAtMTc3MSw5ICsxODg1LDcgQEAKICAgY2hhciAqdG1wc3RyOwogICBQeV9zc2l6ZV90IHRtcGxlbjsKIAkgICAKLSAgb2lkX2FyciA9IGNhbGxvYyhNQVhfT0lEX0xFTiwgc2l6ZW9mKG9pZCkpOwotCi0gIGlmIChvaWRfYXJyICYmIGFyZ3MpIHsKKyAgaWYgKGFyZ3MpIHsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT08iLCAmc2Vzc2lvbiwgJnZhcmxpc3QpKSB7CiAgICAgICBnb3RvIGRvbmU7CkBAIC0xODA2LDI3ICsxOTE4LDUyIEBACiAgICAgYmVzdF9ndWVzcyA9IHB5X25ldHNubXBfYXR0cl9sb25nKHNlc3Npb24sICJCZXN0R3Vlc3MiKTsKICAgICByZXRyeV9ub3N1Y2ggPSBweV9uZXRzbm1wX2F0dHJfbG9uZyhzZXNzaW9uLCAiUmV0cnlOb1N1Y2giKTsKICAgICAgICAgCi0gICAgdmFybGlzdF9pdGVyID0gUHlPYmplY3RfR2V0SXRlcih2YXJsaXN0KTsKLQogICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19HRVRORVhUKTsKICAgICAKLSAgICAvKiBnZXQgdGhlIGluaXRpYWwgc3RhcnRpbmcgb2lkcyovCisgICAgLyogd2UgbmVlZCBhbiBpbml0aWFsIGNvdW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiAqLworICAgIHZhcmxpc3RfaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIodmFybGlzdCk7CisgICAgdmFybGlzdF9sZW4gPSAwOwogICAgIHdoaWxlICh2YXJsaXN0X2l0ZXIgJiYgKHZhcmJpbmQgPSBQeUl0ZXJfTmV4dCh2YXJsaXN0X2l0ZXIpKSkgeworICAgICAgICB2YXJsaXN0X2xlbisrOworICAgIH0KKyAgICBQeV9ERUNSRUYodmFybGlzdF9pdGVyKTsKKworICAgIG9pZF9hcnJfbGVuICAgICAgICAgICAgICA9IGNhbGxvYyh2YXJsaXN0X2xlbiwgc2l6ZW9mKGludCkpOworICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrX2xlbiA9IGNhbGxvYyh2YXJsaXN0X2xlbiwgc2l6ZW9mKGludCkpOworCisgICAgb2lkX2FyciAgICAgICAgICAgICAgICAgID0gY2FsbG9jKHZhcmxpc3RfbGVuLCBzaXplb2Yob2lkICopKTsKKyAgICBvaWRfYXJyX2Jyb2tlbl9jaGVjayAgICAgPSBjYWxsb2ModmFybGlzdF9sZW4sIHNpemVvZihvaWQgKikpOworCisgICAgZm9yKHZhcmxpc3RfaW5kID0gMDsgdmFybGlzdF9pbmQgPCB2YXJsaXN0X2xlbjsgdmFybGlzdF9pbmQrKykgeworCisgICAgICAgIG9pZF9hcnJbdmFybGlzdF9pbmRdID0gY2FsbG9jKE1BWF9PSURfTEVOLCBzaXplb2Yob2lkKSk7CisgICAgICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrW3Zhcmxpc3RfaW5kXSA9IGNhbGxvYyhNQVhfT0lEX0xFTiwgc2l6ZW9mKG9pZCkpOworCisgICAgICAgIG9pZF9hcnJfbGVuW3Zhcmxpc3RfaW5kXSAgICAgICAgICAgICAgPSBNQVhfT0lEX0xFTjsKKyAgICAgICAgb2lkX2Fycl9icm9rZW5fY2hlY2tfbGVuW3Zhcmxpc3RfaW5kXSA9IE1BWF9PSURfTEVOOworICAgIH0KKworICAgIC8qIGdldCB0aGUgaW5pdGlhbCBzdGFydGluZyBvaWRzKi8KKyAgICB2YXJsaXN0X2l0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKHZhcmxpc3QpOworICAgIHZhcmxpc3RfaW5kID0gMDsKKyAgICB3aGlsZSAodmFybGlzdF9pdGVyICYmICh2YXJiaW5kID0gUHlJdGVyX05leHQodmFybGlzdF9pdGVyKSkpIHsKKwogICAgICAgaWYgKHB5X25ldHNubXBfYXR0cl9zdHJpbmcodmFyYmluZCwgInRhZyIsICZ0YWcsIE5VTEwpIDwgMCB8fAogICAgICAgICAgcHlfbmV0c25tcF9hdHRyX3N0cmluZyh2YXJiaW5kLCAiaWlkIiwgJmlpZCwgTlVMTCkgPCAwKQogICAgICAgewotICAgICAgICBvaWRfYXJyX2xlbiA9IDA7CisgICAgICAgIG9pZF9hcnJfbGVuW3Zhcmxpc3RfaW5kXSA9IDA7CiAgICAgICB9IGVsc2UgewotICAgICAgICB0cCA9IF9fdGFnMm9pZCh0YWcsIGlpZCwgb2lkX2FyciwgJm9pZF9hcnJfbGVuLCBOVUxMLCBiZXN0X2d1ZXNzKTsKKyAgICAgICAgdHAgPSBfX3RhZzJvaWQodGFnLCBpaWQsCisgICAgICAgICAgICAgICAgICAgICAgIG9pZF9hcnJbdmFybGlzdF9pbmRdLCAmb2lkX2Fycl9sZW5bdmFybGlzdF9pbmRdLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBiZXN0X2d1ZXNzKTsKICAgICAgIH0KIAogICAgICAgaWYgKF9kZWJ1Z19sZXZlbCkgCiAJcHJpbnRmKCJuZXRzbm1wX3dhbGs6IGZpbGxpbmcgcmVxdWVzdDogJXM6JXM6JWQ6JWRcbiIsIAotCSAgICAgICB0YWcsIGlpZCwgb2lkX2Fycl9sZW4sYmVzdF9ndWVzcyk7CisJICAgICAgIHRhZywgaWlkLCBvaWRfYXJyX2xlblt2YXJsaXN0X2luZF0sYmVzdF9ndWVzcyk7CiAKLSAgICAgIGlmIChvaWRfYXJyX2xlbikgewotICAgICAgICBzbm1wX2FkZF9udWxsX3ZhcihwZHUsIG9pZF9hcnIsIG9pZF9hcnJfbGVuKTsKLSAgICAgICAgdmFybGlzdF9sZW4rKzsKKyAgICAgIGlmIChvaWRfYXJyX2xlblt2YXJsaXN0X2luZF0pIHsKKyAgICAgICAgc25tcF9hZGRfbnVsbF92YXIocGR1LCBvaWRfYXJyW3Zhcmxpc3RfaW5kXSwgb2lkX2Fycl9sZW5bdmFybGlzdF9pbmRdKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgIHByaW50ZigiZXJyb3I6IHdhbGs6IHVua25vd24gb2JqZWN0IElEICglcykiLApAQCAtMTgzNyw2ICsxOTc0LDcgQEAKICAgICAgIH0KICAgICAgIC8qIHJlbGVhc2UgcmVmZXJlbmNlIHdoZW4gZG9uZSAqLwogICAgICAgUHlfREVDUkVGKHZhcmJpbmQpOworICAgICAgdmFybGlzdF9pbmQrKzsKICAgICB9CiAKICAgICBpZiAodmFybGlzdF9pdGVyKQpAQCAtMTkwMSw2ICsyMDM5LDE5IEBACiAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCisgICAgLyogc2F2ZSB0aGUgc3RhcnRpbmcgT0lEICovCisKKyAgICBmb3IodmFycyA9IHBkdS0+dmFyaWFibGVzLCB2YXJsaXN0X2luZCA9IDA7CisgICAgICAgIHZhcnMgIT0gTlVMTDsKKyAgICAgICAgdmFycyA9IHZhcnMtPm5leHRfdmFyaWFibGUsIHZhcmxpc3RfaW5kKyspIHsKKworICAgICAgICBvaWRfYXJyX2Jyb2tlbl9jaGVja1t2YXJsaXN0X2luZF0gPSBjYWxsb2MoTUFYX09JRF9MRU4sIHNpemVvZihvaWQpKTsKKworICAgICAgICBvaWRfYXJyX2Jyb2tlbl9jaGVja19sZW5bdmFybGlzdF9pbmRdID0gdmFycy0+bmFtZV9sZW5ndGg7CisgICAgICAgIG1lbWNweShvaWRfYXJyX2Jyb2tlbl9jaGVja1t2YXJsaXN0X2luZF0sCisgICAgICAgICAgICAgICB2YXJzLT5uYW1lLCB2YXJzLT5uYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKKyAgICB9CisKICAgICB3aGlsZShub3Rkb25lKSB7CiAKICAgICAgIHN0YXR1cyA9IF9fc2VuZF9zeW5jX3BkdShzcywgcGR1LCAmcmVzcG9uc2UsIHJldHJ5X25vc3VjaCwgCkBAIC0xOTA4LDg0ICsyMDU5LDExMiBAQAogICAgICAgX19weV9uZXRzbm1wX3VwZGF0ZV9zZXNzaW9uX2Vycm9ycyhzZXNzaW9uLCBlcnJfc3RyLCBlcnJfbnVtLCBlcnJfaW5kKTsKIAogICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UtPnZhcmlhYmxlcyB8fAotICAgICAgICAgIChyZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCA8IG9pZF9hcnJfbGVuKSB8fAotICAgICAgICAgIChtZW1jbXAob2lkX2FyciwgcmVzcG9uc2UtPnZhcmlhYmxlcy0+bmFtZSwKLSAgICAgICAgICAgICAgICAgIG9pZF9hcnJfbGVuICogc2l6ZW9mKG9pZCkpKSB8fAogICAgICAgICAgIHN0YXR1cyAhPSBTVEFUX1NVQ0NFU1MgfHwKICAgICAgICAgICByZXNwb25zZS0+ZXJyc3RhdCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CiAgICAgICAgICAgbm90ZG9uZSA9IDA7CiAgICAgICB9IGVsc2UgewotICAgICAgICBmb3IodmFycyA9IChyZXNwb25zZSA/IHJlc3BvbnNlLT52YXJpYWJsZXMgOiBOVUxMKSwgdmFybGlzdF9pbmQgPSAwOwotICAgIAl2YXJzICYmICh2YXJsaXN0X2luZCA8IHZhcmxpc3RfbGVuKTsKLSAgICAJdmFycyA9IHZhcnMtPm5leHRfdmFyaWFibGUsIHZhcmxpc3RfaW5kKyspIHsKKyAgICAgICAgICBuZXdwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfR0VUTkVYVCk7CiAKLSAgICAgICAgICBpZiAoKHZhcnMtPnR5cGUgPT0gU05NUF9FTkRPRk1JQlZJRVcpIHx8Ci0gICAgICAgICAgICAgICh2YXJzLT50eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUKSB8fAotICAgICAgICAgICAgICAodmFycy0+dHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFKSkgewotICAgICAgICAgICAgICBub3Rkb25lID0gMDsKLSAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZm9yKHZhcnMgPSAocmVzcG9uc2UgPyByZXNwb25zZS0+dmFyaWFibGVzIDogTlVMTCksCisgICAgICAgICAgICAgICAgICB2YXJsaXN0X2luZCA9IDAsCisgICAgICAgICAgICAgICAgICBvbGR2YXJzID0gKHBkdSA/IHBkdS0+dmFyaWFibGVzIDogTlVMTCk7CisgICAgICAgICAgICAgIHZhcnMgJiYgKHZhcmxpc3RfaW5kIDwgdmFybGlzdF9sZW4pOworICAgICAgICAgICAgICB2YXJzID0gdmFycy0+bmV4dF92YXJpYWJsZSwgdmFybGlzdF9pbmQrKywKKyAgICAgICAgICAgICAgICAgIG9sZHZhcnMgPSAob2xkdmFycyA/IG9sZHZhcnMtPm5leHRfdmFyaWFibGUgOiBOVUxMKSkgeworCisgICAgICAgICAgICAgIGlmICgodmFycy0+bmFtZV9sZW5ndGggPCBvaWRfYXJyX2xlblt2YXJsaXN0X2luZF0pIHx8CisgICAgICAgICAgICAgICAgICAobWVtY21wKG9pZF9hcnJbdmFybGlzdF9pbmRdLCB2YXJzLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRfYXJyX2xlblt2YXJsaXN0X2luZF0gKiBzaXplb2Yob2lkKSkgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgIG5vdGRvbmUgPSAwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoKHZhcnMtPnR5cGUgPT0gU05NUF9FTkRPRk1JQlZJRVcpIHx8CisgICAgICAgICAgICAgICAgICAodmFycy0+dHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCkgfHwKKyAgICAgICAgICAgICAgICAgICh2YXJzLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UpKSB7CisgICAgICAgICAgICAgICAgICBub3Rkb25lID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUodmFycy0+bmFtZSwgdmFycy0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrW3Zhcmxpc3RfaW5kXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkX2Fycl9icm9rZW5fY2hlY2tfbGVuW3Zhcmxpc3RfaW5kXSkgPD0gMCkgeworICAgICAgICAgICAgICAgICAgLyogVGhlIGFnZW50IHJlc3BvbmRlZCB3aXRoIGFuIGlsbGVnYWwgcmVzcG9uc2UKKyAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSByZXR1cm5pbmcgT0lEIHdhcyBsZXhvZ3JhZ2ljYWxseSBsZXNzCisgICAgICAgICAgICAgICAgICAgICB0aGVuIG9yIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgT0lELi4uCisgICAgICAgICAgICAgICAgICAgICBXZSBuZWVkIHRvIGdpdmUgdXAgaGVyZSBiZWNhdXNlIGFuIGluZml0ZQorICAgICAgICAgICAgICAgICAgICAgbG9vcCB3aWxsIHJlc3VsdCBvdGhlcndpc2UuCisKKyAgICAgICAgICAgICAgICAgICAgIFhYWDogdGhpcyByZWFsbHkgc2hvdWxkIGJlIGFuIG9wdGlvbiB0bworICAgICAgICAgICAgICAgICAgICAgY29udGludWUgbGlrZSB0aGUgLUNjIG9wdGlvbiB0byB0aGUgc25tcHdhbGsKKyAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIG5vdGRvbmUgPSAwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICB2YXJiaW5kID0gcHlfbmV0c25tcF9jb25zdHJ1Y3RfdmFyYmluZCgpOworCisgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKHZhcmJpbmQsICJ0YWciKSkgeworICAgICAgICAgICAgICAgICAgc3RyX2J1ZlswXSA9ICcuJzsKKyAgICAgICAgICAgICAgICAgIHN0cl9idWZbMV0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgb3V0X2xlbiA9IDA7CisgICAgICAgICAgICAgICAgICB0cCA9IG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZSgmc3RyX2J1ZnAsICZzdHJfYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRfbGVuLCAwLCAmYnVmX292ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzLT5uYW1lLHZhcnMtPm5hbWVfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgIHN0cl9idWZbc2l6ZW9mKHN0cl9idWYpLTFdID0gJ1wwJzsKKworICAgICAgICAgICAgICAgICAgaWYgKF9faXNfbGVhZih0cCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gKHRwLT50eXBlID8gdHAtPnR5cGUgOiB0cC0+cGFyZW50LT50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICBnZXRsYWJlbF9mbGFnICY9IH5OT05fTEVBRl9OQU1FOworICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBnZXRsYWJlbF9mbGFnIHw9IE5PTl9MRUFGX05BTUU7CisgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IF9fdHJhbnNsYXRlX2Fzbl90eXBlKHZhcnMtPnR5cGUpOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBfX2dldF9sYWJlbF9paWQoKGNoYXIgKikgc3RyX2J1ZiwgJnRhZywgJmlpZCwgZ2V0bGFiZWxfZmxhZyk7CisKKyAgICAgICAgICAgICAgICAgIGlmIChfZGVidWdfbGV2ZWwpIHByaW50ZigibmV0c25tcF93YWxrOiBmaWxsaW5nIHJlc3BvbnNlOiAlczolc1xuIiwgdGFnLCBpaWQpOworCisgICAgICAgICAgICAgICAgICBweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAidGFnIiwgdGFnLCBTVFJMRU4odGFnKSk7CisgICAgICAgICAgICAgICAgICBweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAiaWlkIiwgaWlkLCBTVFJMRU4oaWlkKSk7CisKKyAgICAgICAgICAgICAgICAgIF9fZ2V0X3R5cGVfc3RyKHR5cGUsIHR5cGVfc3RyKTsKKworICAgICAgICAgICAgICAgICAgcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgInR5cGUiLCB0eXBlX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih0eXBlX3N0cikpOworCisgICAgICAgICAgICAgICAgICBsZW4gPSBfX3NucHJpbnRfdmFsdWUoKGNoYXIgKikgc3RyX2J1ZixzaXplb2Yoc3RyX2J1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycyx0cCx0eXBlLHNwcmludHZhbF9mbGFnKTsKKyAgICAgICAgICAgICAgICAgIHN0cl9idWZbbGVuXSA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICAgIHB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJ2YWwiLCAoY2hhciAqKSBzdHJfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgLyogcHVzaCB0aGUgdmFyYmluZCBvbnRvIHRoZSByZXR1cm4gdmFyYmluZHMgKi8KKyAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQodmFyYmluZHMsIHZhcmJpbmQpOworCisgICAgICAgICAgICAgICAgICAvKiBzYXZlIGluIHJldHVybiB0dXBsZSBhcyB3ZWxsICovCisgICAgICAgICAgICAgICAgICAvKiBzYXZlIGluIHJldHVybiB0dXBsZSBhcyB3ZWxsIC0gc3RlYWxzIHJlZiAqLworICAgICAgICAgICAgICAgICAgX1B5VHVwbGVfUmVzaXplKCZ2YWxfdHVwbGUsIHJlc3VsdF9jb3VudCsxKTsKKyAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHJlc3VsdF9jb3VudCsrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9CdWlsZFZhbHVlKCJzIyIsIHN0cl9idWYsIGxlbikpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIE5vbmUgZm9yIHRoaXMgdmFyaWFibGUuICovCisgICAgICAgICAgICAgICAgICBfUHlUdXBsZV9SZXNpemUoJnZhbF90dXBsZSwgcmVzdWx0X2NvdW50KzEpOworICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgcmVzdWx0X2NvdW50KyssIFB5X0J1aWxkVmFsdWUoIiIpKTsKKyAgICAgICAgICAgICAgICAgIHByaW50ZigibmV0c25tcF93YWxrOiBiYWQgdmFyYmluZCAoJWQpXG4iLCB2YXJsaXN0X2luZCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgUHlfWERFQ1JFRih2YXJiaW5kKTsKKworICAgICAgICAgICAgICBtZW1jcHkob2lkX2Fycl9icm9rZW5fY2hlY2tbdmFybGlzdF9pbmRdLCB2YXJzLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCkgKiB2YXJzLT5uYW1lX2xlbmd0aCk7CisgICAgICAgICAgICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrX2xlblt2YXJsaXN0X2luZF0gPSB2YXJzLT5uYW1lX2xlbmd0aDsKKworICAgICAgICAgICAgICBzbm1wX2FkZF9udWxsX3ZhcihuZXdwZHUsIHZhcnMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMtPm5hbWVfbGVuZ3RoKTsKICAgICAgICAgICB9Ci0KLSAgICAgICAgICB2YXJiaW5kID0gcHlfbmV0c25tcF9jb25zdHJ1Y3RfdmFyYmluZCgpOwotCi0gICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcodmFyYmluZCwgInRhZyIpKSB7Ci0gICAgCSAgc3RyX2J1ZlswXSA9ICcuJzsKLSAgICAJICBzdHJfYnVmWzFdID0gJ1wwJzsKLSAgICAJICBvdXRfbGVuID0gMDsKLSAgICAJICB0cCA9IG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZSgmc3RyX2J1ZnAsICZzdHJfYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRfbGVuLCAwLCAmYnVmX292ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzLT5uYW1lLHZhcnMtPm5hbWVfbGVuZ3RoKTsKLSAgICAJICBzdHJfYnVmW3NpemVvZihzdHJfYnVmKS0xXSA9ICdcMCc7Ci0KLSAgICAJICBpZiAoX19pc19sZWFmKHRwKSkgewotCSAgICB0eXBlID0gKHRwLT50eXBlID8gdHAtPnR5cGUgOiB0cC0+cGFyZW50LT50eXBlKTsKLSAgICAJICAgIGdldGxhYmVsX2ZsYWcgJj0gfk5PTl9MRUFGX05BTUU7Ci0gICAgCSAgfSBlbHNlIHsKLSAgICAJICAgIGdldGxhYmVsX2ZsYWcgfD0gTk9OX0xFQUZfTkFNRTsKLSAgICAJICAgIHR5cGUgPSBfX3RyYW5zbGF0ZV9hc25fdHlwZSh2YXJzLT50eXBlKTsKLSAgICAJICB9Ci0KLSAgICAgICAgICBfX2dldF9sYWJlbF9paWQoKGNoYXIgKikgc3RyX2J1ZiwgJnRhZywgJmlpZCwgZ2V0bGFiZWxfZmxhZyk7Ci0KLSAgICAJICBpZiAoX2RlYnVnX2xldmVsKSBwcmludGYoIm5ldHNubXBfd2FsazogZmlsbGluZyByZXNwb25zZTogJXM6JXNcbiIsIHRhZywgaWlkKTsKLQotCSAgcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgInRhZyIsIHRhZywgU1RSTEVOKHRhZykpOwotCSAgcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgImlpZCIsIGlpZCwgU1RSTEVOKGlpZCkpOwotCi0gICAgCSAgX19nZXRfdHlwZV9zdHIodHlwZSwgdHlwZV9zdHIpOwotCi0JICBweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAidHlwZSIsIHR5cGVfc3RyLCAKLQkJCQkgICAgIHN0cmxlbih0eXBlX3N0cikpOwotCi0gICAgCSAgbGVuID0gX19zbnByaW50X3ZhbHVlKChjaGFyICopIHN0cl9idWYsc2l6ZW9mKHN0cl9idWYpLAotCQkJCXZhcnMsdHAsdHlwZSxzcHJpbnR2YWxfZmxhZyk7Ci0gICAgCSAgc3RyX2J1ZltsZW5dID0gJ1wwJzsKLQotCSAgcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgInZhbCIsIChjaGFyICopIHN0cl9idWYsIGxlbik7Ci0gICAgICAgICAgICAKLQkgIC8qIHB1c2ggdGhlIHZhcmJpbmQgb250byB0aGUgcmV0dXJuIHZhcmJpbmRzICovCi0JICBQeUxpc3RfQXBwZW5kKHZhcmJpbmRzLCB2YXJiaW5kKTsKLQotICAgIAkgIC8qIHNhdmUgaW4gcmV0dXJuIHR1cGxlIGFzIHdlbGwgKi8KLQkgIC8qIHNhdmUgaW4gcmV0dXJuIHR1cGxlIGFzIHdlbGwgLSBzdGVhbHMgcmVmICovCi0JICBfUHlUdXBsZV9SZXNpemUoJnZhbF90dXBsZSwgcmVzdWx0X2NvdW50KzEpOwotCSAgUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgcmVzdWx0X2NvdW50KyssIAotCQkJICAobGVuID8gUHlfQnVpbGRWYWx1ZSgicyMiLCBzdHJfYnVmLCBsZW4pIDoKLQkJCSAgIFB5X0J1aWxkVmFsdWUoIiIpKSk7Ci0gICAgICAgICAgICAKLQotICAgICAgICAgIH0gZWxzZSB7Ci0JICAgIC8qIFJldHVybiBOb25lIGZvciB0aGlzIHZhcmlhYmxlLiAqLwotICAgICAgICAgICAgX1B5VHVwbGVfUmVzaXplKCZ2YWxfdHVwbGUsIHJlc3VsdF9jb3VudCsxKTsKLQkgICAgUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgcmVzdWx0X2NvdW50KyssIFB5X0J1aWxkVmFsdWUoIiIpKTsKLQkgICAgcHJpbnRmKCJuZXRzbm1wX3dhbGs6IGJhZCB2YXJiaW5kICglZClcbiIsIHZhcmxpc3RfaW5kKTsKLSAgICAgICAgICB9CQotICAgICAgICAgIFB5X1hERUNSRUYodmFyYmluZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogcmV1c2UgdGhlIHJlc3BvbnNlIGFzIHRoZSBuZXh0IHBkdSB0byBzZW5kICovCi0gICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19HRVRORVhUKTsKLSAgICAgICAgc25tcF9hZGRfbnVsbF92YXIocGR1LCByZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCk7CisgICAgICAgICAgcGR1ID0gbmV3cGR1OwogICAgICAgfQogICAgICAgaWYgKHJlc3BvbnNlKQogCXNubXBfZnJlZV9wZHUocmVzcG9uc2UpOwpAQCAtMjAwNyw3ICsyMTg2LDE0IEBACiAKICBkb25lOgogICBQeV9YREVDUkVGKHZhcmJpbmRzKTsKKyAgU0FGRV9GUkVFKG9pZF9hcnJfbGVuKTsKKyAgU0FGRV9GUkVFKG9pZF9hcnJfYnJva2VuX2NoZWNrX2xlbik7CisgIGZvcih2YXJsaXN0X2luZCA9IDA7IHZhcmxpc3RfaW5kIDwgdmFybGlzdF9sZW47IHZhcmxpc3RfaW5kICsrKSB7CisgICAgICBTQUZFX0ZSRUUob2lkX2Fyclt2YXJsaXN0X2luZF0pOworICAgICAgU0FGRV9GUkVFKG9pZF9hcnJfYnJva2VuX2NoZWNrW3Zhcmxpc3RfaW5kXSk7CisgIH0KICAgU0FGRV9GUkVFKG9pZF9hcnIpOworICBTQUZFX0ZSRUUob2lkX2Fycl9icm9rZW5fY2hlY2spOwogICByZXR1cm4gKHZhbF90dXBsZSA/IHZhbF90dXBsZSA6IFB5X0J1aWxkVmFsdWUoIiIpKTsKIH0KIApAQCAtMjM0NSw2ICsyNTMxLDEwIEBACiAJICBzbm1wX2ZyZWVfcGR1KHBkdSk7CiAJICBnb3RvIGRvbmU7CiAJfQorCW1lbXNldCh0bXBfdmFsX3N0ciwgMCwgc2l6ZW9mKHRtcF92YWxfc3RyKSk7CisgICAgICAgIGlmICggdG1wbGVuID49IHNpemVvZih0bXBfdmFsX3N0cikpIHsKKyAgICAgICAgICAgIHRtcGxlbiA9IHNpemVvZih0bXBfdmFsX3N0ciktMTsKKyAgICAgICAgfQogCW1lbWNweSh0bXBfdmFsX3N0ciwgdmFsLCB0bXBsZW4pOwogCWlmICh0eXBlPT1UWVBFX0lOVEVHRVIgJiYgdXNlX2VudW1zICYmIHRwICYmIHRwLT5lbnVtcykgewogCSAgZm9yKGVwID0gdHAtPmVudW1zOyBlcDsgZXAgPSBlcC0+bmV4dCkgewpAQCAtMjQwMCw2ICsyNTkwLDggQEAKICAgICJjcmVhdGUgYSBuZXRzbm1wIHNlc3Npb24uIn0sCiAgIHsic2Vzc2lvbl92MyIsICBuZXRzbm1wX2NyZWF0ZV9zZXNzaW9uX3YzLCBNRVRIX1ZBUkFSR1MsCiAgICAiY3JlYXRlIGEgbmV0c25tcCBzZXNzaW9uLiJ9LAorICB7InNlc3Npb25fdHVubmVsZWQiLCAgbmV0c25tcF9jcmVhdGVfc2Vzc2lvbl90dW5uZWxlZCwgTUVUSF9WQVJBUkdTLAorICAgImNyZWF0ZSBhIHR1bm5lbGVkIG5ldHNubXAgc2Vzc2lvbiBvdmVyIHRscywgZHRscyBvciBzc2guIn0sCiAgIHsiZGVsZXRlX3Nlc3Npb24iLCAgbmV0c25tcF9kZWxldGVfc2Vzc2lvbiwgTUVUSF9WQVJBUkdTLAogICAgImNyZWF0ZSBhIG5ldHNubXAgc2Vzc2lvbi4ifSwKICAgeyJnZXQiLCAgbmV0c25tcF9nZXQsIE1FVEhfVkFSQVJHUywKZGlmZiAtLWdpdCBhL3B5dGhvbi9uZXRzbm1wL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oIGIvcHl0aG9uL25ldHNubXAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5NDE2YQotLS0gL2Rldi9udWxsCisrKyBiL3B5dGhvbi9uZXRzbm1wL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNucHJpbnRfdmFsdWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShlbmFibGVfc3RkZXJybG9nKQorCmRpZmYgLS1naXQgYS9weXRob24vbmV0c25tcC90ZXN0cy9zbm1wZC5jb25mIGIvcHl0aG9uL25ldHNubXAvdGVzdHMvc25tcGQuY29uZgppbmRleCAxNmEwYmYyLi5iNjJlNGM3IDEwMDY0NAotLS0gYS9weXRob24vbmV0c25tcC90ZXN0cy9zbm1wZC5jb25mCisrKyBiL3B5dGhvbi9uZXRzbm1wL3Rlc3RzL3NubXBkLmNvbmYKQEAgLTQxOCwzICs0MTgsOCBAQAogIyAgU2VlIHRoZSBzbm1wZC5jb25mIG1hbnVhbCBwYWdlLCBhbmQgdGhlIG91dHB1dCBvZiAic25tcGQgLUgiLgogIyAgTVVDSCBtb3JlIGNhbiBiZSBkb25lIHdpdGggdGhlIHNubXBkLmNvbmYgdGhhbiBpcyBzaG93biBhcyBhbgogIyAgZXhhbXBsZSBoZXJlLgorCitjZXJ0U2VjTmFtZSAxMCBEMDIwQTc4RUFGOTlGQ0UyNzZBQTlGNDMwNjNBNjk2OThFNEY3NUQxIC0tcmZjODIyCityd3VzZXIgLXMgdHNtIGhhcmRha2VyQHdqaC5oYXJkYWtlcnMubmV0CisKK3RydXN0Q2VydCBEMDIwQTc4RUFGOTlGQ0UyNzZBQTlGNDMwNjNBNjk2OThFNEY3NUQxCmRpZmYgLS1naXQgYS9weXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5IGIvcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weQppbmRleCBhMzIzMGIyLi5lMzk4MmY0IDEwMDY0NAotLS0gYS9weXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5CisrKyBiL3B5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHkKQEAgLTE5LDcgKzE5LDcgQEAKIAogICAgICAgICB2YXIgPSBuZXRzbm1wLlZhcmJpbmQoJy4xLjMuNi4xLjIuMS4xLjEnLCcwJykKIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjEgR0VUIHRlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgcmVzID0gbmV0c25tcC5zbm1wZ2V0KHZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdEhvc3Q9J2xvY2FsaG9zdCcsCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICAgICAgcHJpbnQgInYxIGdldCB2YXI6ICIsICB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MSBHRVRORVhUIHRlc3RzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICByZXMgPSBuZXRzbm1wLnNubXBnZXRuZXh0KHZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0SG9zdD0nbG9jYWxob3N0JywKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgICAgICAKICAgICAgICAgcHJpbnQgInYxIGdldG5leHQgdmFyOiAiLCAgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjEgU0VUIHRlc3RzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICB2YXIgPSBuZXRzbm1wLlZhcmJpbmQoJ3N5c0xvY2F0aW9uJywnMCcsICdteSBuZXcgbG9jYXRpb24nKQogICAgICAgICByZXMgPSBuZXRzbm1wLnNubXBzZXQodmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9IDEsCkBAIC01MCw3ICs1MCw3IEBACiAKICAgICAgICAgcHJpbnQgInYxIHNldCB2YXI6ICIsICB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MSB3YWxrIHRlc3RzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KG5ldHNubXAuVmFyYmluZCgnc3lzdGVtJykpCiAKICAgICAgICAgcHJpbnQgInYxIHZhcmxpc3Qgd2FsayBpbjogIgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgcHJpbnQgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgCiAgICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjEgd2FsayAyLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogCiAgICAgICAgIHByaW50ICJ2MSB2YXJiaW5kIHdhbGsgaW46ICIKICAgICAgICAgdmFyID0gbmV0c25tcC5WYXJiaW5kKCdzeXN0ZW0nKQpAQCAtNzksNyArNzksNyBAQAogCiAgICAgICAgIHByaW50IHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYxIG11bHRpLXZhcmJpbmQgdGVzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgc2VzcyA9IG5ldHNubXAuU2Vzc2lvbihWZXJzaW9uPTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdEhvc3Q9J2xvY2FsaG9zdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbXVuaXR5PSdwdWJsaWMnKQpAQCAtMTExLDE0ICsxMTEsMTQgQEAKICAgICAgICAgZm9yIHZhciBpbiB2YXJzOgogICAgICAgICAgICAgcHJpbnQgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYxIHNldDItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdCgKICAgICAgICAgICAgIG5ldHNubXAuVmFyYmluZCgnc3lzTG9jYXRpb24nLCAnMCcsICdteSBuZXdlciBsb2NhdGlvbicpKQogICAgICAgICByZXMgPSBzZXNzLnNldCh2YXJzKQogICAgICAgICBwcmludCAidjEgc2Vzcy5zZXQgcmVzdWx0OiAiLCByZXMsICJcbiIKIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjEgd2FsazMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QobmV0c25tcC5WYXJiaW5kKCdzeXN0ZW0nKSkKICAgICAgICAgICAgICAgICAKICAgICAgICAgdmFscyA9IHNlc3Mud2Fsayh2YXJzKQpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgIGZvciB2YXIgaW4gdmFyczoKICAgICAgICAgICAgIHByaW50ICIgICIsdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYyYyBnZXQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAKICAgICAgICAgc2VzcyA9IG5ldHNubXAuU2Vzc2lvbihWZXJzaW9uPTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdEhvc3Q9J2xvY2FsaG9zdCcsCkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgdmFscyA9IHNlc3MuZ2V0KHZhcnMpCiAgICAgICAgIHByaW50ICJ2MiBzZXNzLmdldCByZXN1bHQ6ICIsIHZhbHMsICJcbiIKIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjJjIGdldG5leHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAKICAgICAgICAgZm9yIHZhciBpbiB2YXJzOgogICAgICAgICAgICAgcHJpbnQgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgICAgIHByaW50IHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICBwcmludCAiXG4iCiAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MmMgZ2V0YnVsay0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKIAogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KG5ldHNubXAuVmFyYmluZCgnc3lzVXBUaW1lJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcC5WYXJiaW5kKCdzeXNPUkxhc3RDaGFuZ2UnKSwKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICAgICAgcHJpbnQgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgIHByaW50ICJcbiIKIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjJjIHNldC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKIAogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KAogICAgICAgICAgICAgbmV0c25tcC5WYXJiaW5kKCdzeXNMb2NhdGlvbicsJzAnLCdteSBldmVuIG5ld2VyIGxvY2F0aW9uJykpCkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICAgICAgcmVzID0gc2Vzcy5zZXQodmFycykKICAgICAgICAgcHJpbnQgInYyIHNlc3Muc2V0IHJlc3VsdDogIiwgcmVzLCAiXG4iCiAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYyYyB3YWxrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KG5ldHNubXAuVmFyYmluZCgnc3lzdGVtJykpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgIHZhbHMgPSBzZXNzLndhbGsodmFycykKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICBmb3IgdmFyIGluIHZhcnM6CiAgICAgICAgICAgICBwcmludCAiICAiLHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MyBzZXR1cC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgc2VzcyA9IG5ldHNubXAuU2Vzc2lvbihWZXJzaW9uPTMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdEhvc3Q9J2xvY2FsaG9zdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjTGV2ZWw9J2F1dGhQcml2JywKQEAgLTIwMCw3ICsyMDAsNyBAQAogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KG5ldHNubXAuVmFyYmluZCgnc3lzVXBUaW1lJywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcC5WYXJiaW5kKCdzeXNDb250YWN0JywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcC5WYXJiaW5kKCdzeXNMb2NhdGlvbicsIDApKQotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjMgZ2V0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICB2YWxzID0gc2Vzcy5nZXQodmFycykKICAgICAgICAgcHJpbnQgInYzIHNlc3MuZ2V0IHJlc3VsdDogIiwgdmFscywgIlxuIgogICAgICAgICAKQEAgLTIwOCw3ICsyMDgsNyBAQAogICAgICAgICAgICAgcHJpbnQgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgIHByaW50ICJcbiIKIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjMgZ2V0bmV4dC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAKICAgICAgICAgdmFscyA9IHNlc3MuZ2V0bmV4dCh2YXJzKQogICAgICAgICBwcmludCAidjMgc2Vzcy5nZXRuZXh0IHJlc3VsdDogIiwgdmFscywgIlxuIgpAQCAtMjMwLDE0ICsyMzAsMTQgQEAKICAgICAgICAgICAgIHByaW50IHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICBwcmludCAiXG4iCiAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYzIHNldC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKIAogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KAogICAgICAgICAgICAgbmV0c25tcC5WYXJiaW5kKCdzeXNMb2NhdGlvbicsJzAnLCAnbXkgZmluYWwgZGVzdGluYXRpb24nKSkKICAgICAgICAgcmVzID0gc2Vzcy5zZXQodmFycykKICAgICAgICAgcHJpbnQgInYzIHNlc3Muc2V0IHJlc3VsdDogIiwgcmVzLCAiXG4iCiAgICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjMgd2Fsay0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdChuZXRzbm1wLlZhcmJpbmQoJ3N5c3RlbScpKQogICAgICAgICAgICAgICAgIAogICAgICAgICB2YWxzID0gc2Vzcy53YWxrKHZhcnMpCkBAIC0yNDUsNyArMjQ1LDcgQEAKICAgICAgICAgCiAgICAgICAgIGZvciB2YXIgaW4gdmFyczoKICAgICAgICAgICAgIHByaW50ICIgICIsdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCi0gICAgICAgICAgICAKKwogCiBjbGFzcyBTZXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RGdW5jcyhzZWxmKTogICAgICAgIApkaWZmIC0tZ2l0IGEvc2Vkc2NyaXB0LmluIGIvc2Vkc2NyaXB0LmluCmluZGV4IGFlZGY3YjguLjc4MTRjZTkgMTAwNjQ0Ci0tLSBhL3NlZHNjcmlwdC5pbgorKysgYi9zZWRzY3JpcHQuaW4KQEAgLTEwNiw0ICsxMDYsNCBAQAogCiBzI1BSRU1PVkVNRVNDTUQjUFNDTUQjZwogcyNBUkVNT1ZFTUVHRU5UWF9TT0NLRVQjQUdFTlRYX1NPQ0tFVCNnCi1zL1ZFUlNJT05JTkZPLzUuNC4zLnByZTEvZworcyNOUkVNT1ZFTUVFVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4jTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiNnCmRpZmYgLS1naXQgYS9zbm1wbGliL01ha2VmaWxlLmRlcGVuZCBiL3NubXBsaWIvTWFrZWZpbGUuZGVwZW5kCmluZGV4IGNhYzY1MTAuLmI5Mjc5MDcgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvTWFrZWZpbGUuZGVwZW5kCisrKyBiL3NubXBsaWIvTWFrZWZpbGUuZGVwZW5kCkBAIC01LDE1ICs1LDM3IEBACiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaApAQCAtMjIsOSArNDQsNyBAQAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0zMywzMiArNTMsNTUgQEAKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtNjgsNjMgKzExMSwxMjUgQEAKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzMywxMzQgKzIzOCwxMDcgQEAKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9jbXVfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2NtdV9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vY211X2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2NtdV9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9jbXVfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2OSw2NCArMzQ3LDE0MCBAQAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzM1LDY0ICs0ODksNjkgQEAKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQwMSw2NCArNTYwLDY5IEBACiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ2Nyw2MyArNjMxLDY5IEBACiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTMyLDIzICs3MDIsNDUgQEAKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtNTYxLDkgKzc1Myw3IEBACiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTU3Myw2MyArNzYzLDEzOSBAQAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTYzOCw2NCArOTA0LDcxIEBACiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcwNCw3MyArOTc3LDIwNCBAQAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgKKy4vZ2V0b3B0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2dldG9wdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCBpbmV0X250b3AuaAogLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oIGluZXRfcHRvbi5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC03ODMsMzEgKzExODcsMTIyIEBACiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC04MTgsNTkgKzEzMTMsMTEzIEBACiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTg4Miw5ICsxNDMxLDcgQEAKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtODkzLDY5ICsxNDQwLDY5IEBACiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL210X3N1cHBvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbXRfc3VwcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9tdF9zdXBwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbXRfc3VwcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL210X3N1cHBvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbXRfc3VwcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NjQsMjMgKzE1MTEsODAgQEAKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC05OTMsOSArMTU5Nyw3IEBACiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTEwMDQsMjkgKzE2MDYsNDUgQEAKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vcGtjcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9wa2NzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3BrY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9wa2NzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vcGtjcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC0xMDM5LDkgKzE2NTcsNyBAQAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xMDUxLDMzICsxNjY3LDg1IEBACiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTEwODgsMjg4ICsxNzU2LDQ3IEBACiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTEzODIsOSArMTgwOSw3IEBACiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTEzOTUsMjEgKzE4MjAsNDIgQEAKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtMTQyMiw5ICsxODY4LDcgQEAKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTQzNCw0MiArMTg3OCw1NyBAQAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCiAuL3NubXBfYXBpLmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTQ3OSw0NSArMTkzOCwxMjIgQEAKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTE1MzAsOSArMjA2Niw3IEBACiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTE1NDIsMTYgKzIwNzYsNDAgQEAKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKQEAgLTE1NjIsMjYyICsyMTIwLDQxIEBACiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oIHNubXBzbV9pbml0LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfdmVyc2lvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX3ZlcnNpb24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX3ZlcnNpb24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX3ZlcnNpb24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaApAQCAtMTgzMiw5ICsyMTY5LDcgQEAKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTg0OSwyNCArMjE4NCw1NDMgQEAKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggc25tcHNtX2luaXQuaAorLi9zbm1wX3NlY21vZC5sbzogc25tcHNtX3NodXRkb3duLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiB0cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtMTg3OSw5ICsyNzMzLDcgQEAKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTg5NiwyNCArMjc0OCw0MiBAQAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTE5MjYsOSArMjc5Niw3IEBACiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTE5NDMsODUgKzI4MTEsMjA1IEBACiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBfdmVyc2lvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25wcmludGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25wcmludGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25wcmludGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbnByaW50Zi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NucHJpbnRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAogLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKIC4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCiAuL3N0cnRvbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zdHJ0b2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3RydG9sLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3RydG9sLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc3RydG9sLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3N0cnRvdWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RydG91bC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdHJ0b3VsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3RydG91bC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cnRvdWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTIwMzIsMTI4ICszMDIwLDcyIEBACiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmggaW5ldF9udG9wLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIxNjIsMzQgKzMwOTQsNTIgQEAKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXh0X3V0aWxzLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTIxOTgsNTkgKzMxNDgsODk4IEBACiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oCisuL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmxvOiBvcGVuc3NsL29wZW5zc2xfbW9kZXMuaAorLi9vcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oCisuL29wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5sbzogLi9vcGVuc3NsL29wZW5zc2xfYWVzX2xvY2FsLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMubG86IC4vb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmMKKy4vb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMubG86IC4vb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oCisuL29wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaAorLi9vcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmxvOiAuL29wZW5zc2wvb3BlbnNzbF9tb2Rlcy5oCisuL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmxvOiAuL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaAorLi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMubG86IC4vb3BlbnNzbC9vcGVuc3NsX3Nwci5oCisuL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmxvOiAuL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5jCisuL29wZW5zc2wvb3BlbnNzbF9tZDUubG86IC4vb3BlbnNzbC9vcGVuc3NsX21kNV9sb2NhbC5oCisuL29wZW5zc2wvb3BlbnNzbF9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3BlbnNzbF9tZDUuaAorLi9vcGVuc3NsL29wZW5zc2xfbWQ1LmxvOiAuL29wZW5zc2wvb3BlbnNzbF9tZDMyX2NvbW1vbi5oCisuL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5sbzogLi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgKKy4vb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaAorLi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5sbzogLi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgKKy4vb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oCisuL29wZW5zc2wvb3BlbnNzbF9zaGExLmxvOiBvcGVuc3NsL29wZW5zc2xfc2hhX2xvY2FsLmgKKy4vb3BlbnNzbC9vcGVuc3NsX3NoYTEubG86IG9wZW5zc2wvb3BlbnNzbF9zaGEuaAorLi9vcGVuc3NsL29wZW5zc2xfc2hhMS5sbzogLi9vcGVuc3NsL29wZW5zc2xfbWQzMl9jb21tb24uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQWxpYXNEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogaW5ldF9udG9wLmggaW5ldF9wdG9uLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKZGlmZiAtLWdpdCBhL3NubXBsaWIvTWFrZWZpbGUuaW4gYi9zbm1wbGliL01ha2VmaWxlLmluCmluZGV4IDM0ZTMwZTYuLjUwNmI4ZDQgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvTWFrZWZpbGUuaW4KKysrIGIvc25tcGxpYi9NYWtlZmlsZS5pbgpAQCAtMTMsNiArMTMsNyBAQAogIwogCiB0b3BfYnVpbGRkaXI9Li4KK215c3ViZGlyPXNubXBsaWIKIAogIyB1c2UgR05VIHZwYXRoLCBpZiBhdmFpbGFibGUsIHRvIG9ubHkgc2V0IGEgcGF0aCBmb3Igc291cmNlIGFuZCBoZWFkZXJzCiAjIFZQQVRIIHdpbGwgcGljayB1cCBvYmplY3RzIHRvbywgd2hpY2ggaXMgYmFkIGlmIHlvdSBhcmUgc2hhcmluZyBhCkBAIC00Nyw2ICs0OCw3IEBACiBJTkNMVURFU1VCRElSSEVBREVSUz1SRUFETUUgXAogCWFzbjEuaCBcCiAJY2FsbGJhY2suaCBcCisJY2VydF91dGlsLmggXAogCWNvbnRhaW5lci5oIFwKIAljb250YWluZXJfYmluYXJ5X2FycmF5LmggXAogCWNvbnRhaW5lcl9saXN0X3NzbGwuaCBcCkBAIC01NSw2ICs1Nyw3IEBACiAJZmFjdG9yeS5oIFwKIAlkYXRhX2xpc3QuaCBcCiAJZGVmYXVsdF9zdG9yZS5oIFwKKwlkaXJfdXRpbHMuaCBcCiAJZmRfZXZlbnRfbWFuYWdlci5oIFwKIAlmaWxlX3V0aWxzLmggXAogCWludDY0LmggXApAQCAtNjcsNiArNzAsNyBAQAogCXNubXAuaCBcCiAJc25tcF9hbGFybS5oIFwKIAlzbm1wX2FwaS5oIFwKKwlsYXJnZV9mZF9zZXQuaCBcCiAJc25tcF9hc3NlcnQuaCBcCiAJc25tcF9jbGllbnQuaCBcCiAJc25tcF9kZWJ1Zy5oIFwKQEAgLTgwLDEwICs4NCwxMSBAQAogCXRleHRfdXRpbHMuaCBcCiAJdG9vbHMuaCBcCiAJdHJhbnNmb3JtX29pZHMuaCBcCi0gICAgICAgIGNtdV9jb21wYXQuaCBcCisJdHlwZXMuaCBcCiAgICAgICAgIGdldG9wdC5oIFwKICAgICAgICAgbGNkX3RpbWUuaCBcCiAgICAgICAgIG10X3N1cHBvcnQuaCBcCisgICAgICAgIG9pZC5oIFwKICAgICAgICAgb2lkX3N0YXNoLmggXAogICAgICAgICBzbm1wX2VudW0uaCBcCiAgICAgICAgIHNubXBfc2VjbW9kLmggXApAQCAtMTExLDYgKzExNiw3IEBACiAJc2NhcGkuaAkJXAogCXNubXBfYWxhcm0uaAlcCiAJc25tcF9hcGkuaAlcCisJbGFyZ2VfZmRfc2V0LmgJXAogCXNubXBfY2xpZW50LmgJXAogCXNubXBfZGVidWcuaAlcCiAJc25tcC5oCQlcCkBAIC0xMzIsNTUgKzEzOCw5MSBAQAogCiAjCiAjIFRoaW5ncyB0byBidWlsZAorIyAgIC0gZm9yIHRoZSBmZWF0dXJlIGNoZWNraW5nIC8gcmVtb3ZhbCAvIG1pbmltaWFsaXN0IHN1cHBvcnQgdGhlc2UKKyMgICAgIG11c3QgYmUgbGlzdGVkIHN1Y2ggdGhhdCBjb2RlIHJlcXVpcmluZyBhIGZlYXR1cmUgbXVzdCBiZSBsaXN0ZWQKKyMgICAgICpiZWZvcmUqIHRoZSBjb2RlIGltcGxlbWVudGluZyB0aGUgZmVhdHVyZS4KICMKIENTUkNTPQlzbm1wX2NsaWVudC5jIG1pYi5jIHBhcnNlLmMgc25tcF9hcGkuYyBzbm1wLmMgCQlcCiAJc25tcF9hdXRoLmMgYXNuMS5jIG1kNS5jIHNubXBfcGFyc2VfYXJncy5jCQlcCiAJc3lzdGVtLmMgdmFjbS5jIGludDY0LmMgcmVhZF9jb25maWcuYyBwa2NzLmMJCVwKIAlzbm1wX2RlYnVnLmMgdG9vbHMuYyAgc25tcF9sb2dnaW5nLmMgdGV4dF91dGlscy5jCVwKLQlzbm1wdjMuYyBsY2RfdGltZS5jIGtleXRvb2xzLmMgZmlsZV91dGlscy5jCQlcCisJbGFyZ2VfZmRfc2V0LmMgY2VydF91dGlsLmMgc25tcF9vcGVuc3NsLmMgCQlcCisJc25tcHYzLmMgbGNkX3RpbWUuYyBrZXl0b29scy5jICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJc2NhcGkuYyBjYWxsYmFjay5jIGRlZmF1bHRfc3RvcmUuYyBzbm1wX2FsYXJtLmMJCVwKIAlkYXRhX2xpc3QuYyBvaWRfc3Rhc2guYyBmZF9ldmVudF9tYW5hZ2VyLmMgCQlcCisJY2hlY2tfdmFyYmluZC5jIAkJCQkJXAogCW10X3N1cHBvcnQuYyBzbm1wX2VudW0uYyBzbm1wLXRjLmMgc25tcF9zZXJ2aWNlLmMJXAotCXNucHJpbnRmLmMgc3RybGNhdC5jIHN0cmxjcHkuYyBzdHJ0b2wuYyBzdHJ0b3VsLmMJXAotCXN0cnRva19yLmMgc25tcF90cmFuc3BvcnQuYyBAdHJhbnNwb3J0X3NyY19saXN0QAlcCisJc25wcmludGYuYwkJCQkJCVwKKwlzbm1wX3RyYW5zcG9ydC5jIEB0cmFuc3BvcnRfc3JjX2xpc3RACQkJXAogCXNubXBfc2VjbW9kLmMgQHNlY3VyaXR5X3NyY19saXN0QCBzbm1wX3ZlcnNpb24uYyAgICAgICAgXAotCWNoZWNrX3ZhcmJpbmQuYyBjb250YWluZXIuYyBjb250YWluZXJfYmluYXJ5X2FycmF5LmMJXAogCWNvbnRhaW5lcl9udWxsLmMgY29udGFpbmVyX2xpc3Rfc3NsbC5jIGNvbnRhaW5lcl9pdGVyYXRvci5jIFwKLQljbXVfY29tcGF0LmMgdWNkX2NvbXBhdC5jIEBvdGhlcl9zcmNfbGlzdEAKKwl1Y2RfY29tcGF0LmMJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCUBvdGhlcl9zcmNfbGlzdEAgQGNyeXB0b19maWxlc19jQCAgICAgICAgCQlcCisJZGlyX3V0aWxzLmMgZmlsZV91dGlscy5jIAkgICAgICAgICAgICAgICAgICAgICAgICBcCisJY29udGFpbmVyLmMgY29udGFpbmVyX2JpbmFyeV9hcnJheS5jCQogCiBPQkpTPQlzbm1wX2NsaWVudC5vIG1pYi5vIHBhcnNlLm8gc25tcF9hcGkubyBzbm1wLm8gCQlcCiAJc25tcF9hdXRoLm8gYXNuMS5vIG1kNS5vIHNubXBfcGFyc2VfYXJncy5vCQlcCiAJc3lzdGVtLm8gdmFjbS5vIGludDY0Lm8gcmVhZF9jb25maWcubyBwa2NzLm8gCQlcCiAJc25tcF9kZWJ1Zy5vIHRvb2xzLm8gIHNubXBfbG9nZ2luZy5vIHRleHRfdXRpbHMubwlcCi0Jc25tcHYzLm8gbGNkX3RpbWUubyBrZXl0b29scy5vIGZpbGVfdXRpbHMubwkJXAorCWxhcmdlX2ZkX3NldC5vIGNlcnRfdXRpbC5vIHNubXBfb3BlbnNzbC5vIAkJXAorCXNubXB2My5vIGxjZF90aW1lLm8ga2V5dG9vbHMubyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXNjYXBpLm8gY2FsbGJhY2subyBkZWZhdWx0X3N0b3JlLm8gc25tcF9hbGFybS5vCQlcCiAJZGF0YV9saXN0Lm8gb2lkX3N0YXNoLm8gZmRfZXZlbnRfbWFuYWdlci5vCQlcCisJY2hlY2tfdmFyYmluZC5vIAkJCQkJXAogCW10X3N1cHBvcnQubyBzbm1wX2VudW0ubyBzbm1wLXRjLm8gc25tcF9zZXJ2aWNlLm8JXAotCXNucHJpbnRmLm8gc3RybGNhdC5vIHN0cmxjcHkubyBzdHJ0b2wubyBzdHJ0b3VsLm8JXAotCXN0cnRva19yLm8gc25tcF90cmFuc3BvcnQubyBAdHJhbnNwb3J0X29ial9saXN0QAlcCisJc25wcmludGYubwkJCQkJCVwKKwlzbm1wX3RyYW5zcG9ydC5vIEB0cmFuc3BvcnRfb2JqX2xpc3RAICAgICAgICAgICAgICAgICAgIFwKIAlzbm1wX3NlY21vZC5vIEBzZWN1cml0eV9vYmpfbGlzdEAgc25tcF92ZXJzaW9uLm8gICAgICAgIFwKLQljaGVja192YXJiaW5kLm8gY29udGFpbmVyLm8gY29udGFpbmVyX2JpbmFyeV9hcnJheS5vCVwKIAljb250YWluZXJfbnVsbC5vIGNvbnRhaW5lcl9saXN0X3NzbGwubyBjb250YWluZXJfaXRlcmF0b3IubyBcCi0JY211X2NvbXBhdC5vIHVjZF9jb21wYXQubyBAb3RoZXJfb2Jqc19saXN0QAorCXVjZF9jb21wYXQubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCVwKKyAgICAgICAgQGNyeXB0b19maWxlc19vQCBAb3RoZXJfb2Jqc19saXN0QCBATElCT0JKU0AgCQlcCisJZGlyX3V0aWxzLm8gZmlsZV91dGlscy5vIAkgICAgICAgICAgICAgICAgICAgICAgICBcCisJY29udGFpbmVyLm8gY29udGFpbmVyX2JpbmFyeV9hcnJheS5vCQogCiBMT0JKUz0Jc25tcF9jbGllbnQubG8gbWliLmxvIHBhcnNlLmxvIHNubXBfYXBpLmxvIHNubXAubG8gCVwKIAlzbm1wX2F1dGgubG8gYXNuMS5sbyBtZDUubG8gc25tcF9wYXJzZV9hcmdzLmxvCQlcCiAJc3lzdGVtLmxvIHZhY20ubG8gaW50NjQubG8gcmVhZF9jb25maWcubG8gcGtjcy5sbwlcCiAJc25tcF9kZWJ1Zy5sbyB0b29scy5sbyAgc25tcF9sb2dnaW5nLmxvCSB0ZXh0X3V0aWxzLmxvCVwKLQlzbm1wdjMubG8gbGNkX3RpbWUubG8ga2V5dG9vbHMubG8gZmlsZV91dGlscy5sbwkJXAotCXNjYXBpLmxvIGNhbGxiYWNrLmxvIGRlZmF1bHRfc3RvcmUubG8gc25tcF9hbGFybS5sbwkJXAorCWxhcmdlX2ZkX3NldC5sbyBjZXJ0X3V0aWwubG8gc25tcF9vcGVuc3NsLmxvIAkJXAorCXNubXB2My5sbyBsY2RfdGltZS5sbyBrZXl0b29scy5sbyAgICAgICAgICAgICAgICAgICAgICAgXAorCXNjYXBpLmxvIGNhbGxiYWNrLmxvIGRlZmF1bHRfc3RvcmUubG8gc25tcF9hbGFybS5sbwlcCiAJZGF0YV9saXN0LmxvIG9pZF9zdGFzaC5sbyBmZF9ldmVudF9tYW5hZ2VyLmxvCQlcCisJY2hlY2tfdmFyYmluZC5sbyAJCQkJCVwKIAltdF9zdXBwb3J0LmxvIHNubXBfZW51bS5sbyBzbm1wLXRjLmxvIHNubXBfc2VydmljZS5sbwlcCi0Jc25wcmludGYubG8gc3RybGNhdC5sbyBzdHJsY3B5LmxvIHN0cnRvbC5sbyBzdHJ0b3VsLmxvCVwKLQlzdHJ0b2tfci5sbyBzbm1wX3RyYW5zcG9ydC5sbyBAdHJhbnNwb3J0X2xvYmpfbGlzdEAJXAotCXNubXBfc2VjbW9kLmxvIEBzZWN1cml0eV9sb2JqX2xpc3RAIHNubXBfdmVyc2lvbi5sbyAgICAgICBcCi0JY2hlY2tfdmFyYmluZC5sbyBjb250YWluZXIubG8gY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbwlcCi0JY29udGFpbmVyX251bGwubG8gY29udGFpbmVyX2xpc3Rfc3NsbC5sbyBjb250YWluZXJfaXRlcmF0b3IubG8gXAotCWNtdV9jb21wYXQubG8gdWNkX2NvbXBhdC5sbyBAb3RoZXJfbG9ianNfbGlzdEAKKwlzbnByaW50Zi5sbwkJCQkJCVwKKwlzbm1wX3RyYW5zcG9ydC5sbyBAdHJhbnNwb3J0X2xvYmpfbGlzdEAgICAgICAgICAgICAgICAgIFwKKwlzbm1wX3NlY21vZC5sbyBAc2VjdXJpdHlfbG9ial9saXN0QCBzbm1wX3ZlcnNpb24ubG8gICAgIFwKKwljb250YWluZXIubG8gY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbwkJCVwKKwl1Y2RfY29tcGF0LmxvCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQGNyeXB0b19maWxlc19sb0AgQG90aGVyX2xvYmpzX2xpc3RAIEBMVExJQk9CSlNAICAgICAgICBcCisJZGlyX3V0aWxzLmxvIGZpbGVfdXRpbHMubG8gCSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwljb250YWluZXJfbnVsbC5sbyBjb250YWluZXJfbGlzdF9zc2xsLmxvIGNvbnRhaW5lcl9pdGVyYXRvci5sbyAKKworRlRPQkpTPQlzbm1wX2NsaWVudC5mdCBtaWIuZnQgcGFyc2UuZnQgc25tcF9hcGkuZnQgc25tcC5mdCAJXAorCXNubXBfYXV0aC5mdCBhc24xLmZ0IG1kNS5mdCBzbm1wX3BhcnNlX2FyZ3MuZnQJCVwKKwlzeXN0ZW0uZnQgdmFjbS5mdCBpbnQ2NC5mdCByZWFkX2NvbmZpZy5mdCBwa2NzLmZ0CVwKKwlzbm1wX2RlYnVnLmZ0IHRvb2xzLmZ0ICBzbm1wX2xvZ2dpbmcuZnQJIHRleHRfdXRpbHMuZnQJXAorCXNubXB2My5mdCBsY2RfdGltZS5mdCBrZXl0b29scy5mdCAgICAgICAgICAgICAgICAgICAgICAgXAorCXNjYXBpLmZ0IGNhbGxiYWNrLmZ0IGRlZmF1bHRfc3RvcmUuZnQgc25tcF9hbGFybS5mdAlcCisJZGF0YV9saXN0LmZ0IG9pZF9zdGFzaC5mdCBmZF9ldmVudF9tYW5hZ2VyLmZ0CQlcCisJY2hlY2tfdmFyYmluZC5mdCAJCQkJCVwKKwltdF9zdXBwb3J0LmZ0IHNubXBfZW51bS5mdCBzbm1wLXRjLmZ0IHNubXBfc2VydmljZS5mdAlcCisJc25wcmludGYuZnQJCQkJCQlcCisJc25tcF90cmFuc3BvcnQuZnQgQHRyYW5zcG9ydF9mdG9ial9saXN0QCAgICAgICAgICAgICAgICBcCisJc25tcF9zZWNtb2QuZnQgQHNlY3VyaXR5X2Z0b2JqX2xpc3RAIHNubXBfdmVyc2lvbi5mdCAgICBcCisJY29udGFpbmVyLmZ0IGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkuZnQJXAorCXVjZF9jb21wYXQuZnQJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgQG90aGVyX2Z0b2Jqc19saXN0QCAgICAgICAgICAgICAgICAgICAgIAkJXAorCWxhcmdlX2ZkX3NldC5mdCBjZXJ0X3V0aWwuZnQgc25tcF9vcGVuc3NsLmZ0IAkJXAorCWRpcl91dGlscy5mdCBmaWxlX3V0aWxzLmZ0IAkgICAgICAgICAgICAgICAgICAgICAgICBcCisJY29udGFpbmVyX251bGwuZnQgY29udGFpbmVyX2xpc3Rfc3NsbC5mdCBjb250YWluZXJfaXRlcmF0b3IuZnQKIAogIyBqdXN0IGluIGNhc2Ugc29tZW9uZSB3YW50cyB0byByZW1vdmUgbGlidG9vbCwgY2hhbmdlIHRoaXMgdG8gT0JKUy4KIFRPQkpTPSQoTE9CSlMpCiAKK0ZFQVRVUkVGSUxFICAgICA9ICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmVhdHVyZXMuaAorCiAjIAogQ1BQRkxBR1MgPSAkKFRPUF9JTkNMVURFUykgLUkuIAkkKFNOTVBMSUJfSU5DTFVERVMpIEBDUFBGTEFHU0AKIApAQCAtMTg4LDExICsyMzAsMTEgQEAKIAogIyBob3cgdG8gYnVpbGQgdGhlIGxpYnJhcmllcy4KIGxpYm5ldHNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pOiAgICAkKFRPQkpTKQotCSQoTElCX0xEX0NNRCkgJEAgJChUT0JKUykgJChMREZMQUdTKSBATE5FVFNOTVBMSUJTQAorCSQoTElCX0xEX0NNRCkgJEAgJChUT0JKUykgQExEX05PX1VOREVGSU5FREAgJChMREZMQUdTKSBATE5FVFNOTVBMSUJTQAogCSQoUkFOTElCKSAkQAogCiBsaWJzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogICAgJChUT0JKUykKLQkkKExJQl9MRF9DTUQpICRAICQoVE9CSlMpICQoTERGTEFHUykgQExORVRTTk1QTElCU0AKKwkkKExJQl9MRF9DTUQpICRAICQoVE9CSlMpIEBMRF9OT19VTkRFRklORURAICQoTERGTEFHUykgQExORVRTTk1QTElCU0AKIAkkKFJBTkxJQikgJEAKIAogIwpAQCAtMjAxLDcgKzI0MywzIEBACiBwYXJzZTogIG1pYi5vIHBhcnNlLmMKIAkkKENDKSAkKENGTEFHUykgLURURVNUIHBhcnNlLmMgLW8gJEAgXAogCQlgJCh0b3Bfc3JjZGlyKS9uZXQtc25tcC1jb25maWcgLS1saWJzYAotCi10ZXN0X2JpbmFyeV9hcnJheTogdGVzdF9iaW5hcnlfYXJyYXkuYwotCSQoQ0MpICQoQ0ZMQUdTKSB0ZXN0X2JpbmFyeV9hcnJheS5jIC1vICRAIFwKLQkJYCQodG9wX3NyY2RpcikvbmV0LXNubXAtY29uZmlnIC0tbGlic2AKZGlmZiAtLWdpdCBhL3NubXBsaWIvYXNuMS5jIGIvc25tcGxpYi9hc24xLmMKaW5kZXggMjM0NmU2Yy4uYmVhOGQwYiAxMDA2NDQKLS0tIGEvc25tcGxpYi9hc24xLmMKKysrIGIvc25tcGxpYi9hc24xLmMKQEAgLTE3MCw5ICsxNzAsNiBAQAogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTI1MSw2ICsyNDgsMjQgQEAKIH0KIAogLyoqCisgKiBAaW50ZXJuYWwKKyAqIG91dHB1dCBhbiBlcnJvciBmb3IgYSB3cm9uZyB0eXBlCisgKiAKKyAqIEBwYXJhbSBzdHIgICAgICAgIGVycm9yIHN0cmluZworICogQHBhcmFtIHdyb25ndHlwZSAgd3JvbmcgdHlwZQorICovCitzdGF0aWMKKyAgICB2b2lkCitfYXNuX3R5cGVfZXJyKGNvbnN0IGNoYXIgKnN0ciwgaW50IHdyb25ndHlwZSkKK3sKKyAgICBjaGFyICAgICAgICAgICAgZWJ1ZlsxMjhdOworCisgICAgc25wcmludGYoZWJ1Ziwgc2l6ZW9mKGVidWYpLCAiJXMgdHlwZSAlZCIsIHN0ciwgd3Jvbmd0eXBlKTsKKyAgICBlYnVmWyBzaXplb2YoZWJ1ZiktMSBdID0gMDsKKyAgICBFUlJPUl9NU0coZWJ1Zik7Cit9CisKKy8qKgogICogQGludGVybmFsIAogICogb3V0cHV0IGFuIGVycm9yIGZvciBhIHdyb25nIGxlbmd0aAogICogCkBAIC00ODIsMTIgKzQ5NywxNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgKnR5cGUgPSAqYnVmcCsrOworICAgIGlmICgqdHlwZSAhPSBBU05fSU5URUdFUikgeworICAgICAgICBfYXNuX3R5cGVfZXJyKGVycnByZSwgKnR5cGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBidWZwID0gYXNuX3BhcnNlX2xlbmd0aChidWZwLCAmYXNuX2xlbmd0aCk7CiAgICAgaWYgKF9hc25fcGFyc2VfbGVuZ3RoX2NoZWNrCiAgICAgICAgIChlcnJwcmUsIGJ1ZnAsIGRhdGEsIGFzbl9sZW5ndGgsICpkYXRhbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoKHNpemVfdCkgYXNuX2xlbmd0aCA+IGludHNpemUpIHsKKyAgICBpZiAoKHNpemVfdCkgYXNuX2xlbmd0aCA+IGludHNpemUgfHwgKGludCkgYXNuX2xlbmd0aCA9PSAwKSB7CiAgICAgICAgIF9hc25fbGVuZ3RoX2VycihlcnJwcmUsIChzaXplX3QpIGFzbl9sZW5ndGgsIGludHNpemUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC01MDMsNyArNTIzLDcgQEAKIAogICAgIENIRUNLX09WRVJGTE9XX1ModmFsdWUsMSk7CiAKLSAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMlgpXG4iLCB2YWx1ZSwgdmFsdWUpKTsKKyAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMmxYKVxuIiwgdmFsdWUsIHZhbHVlKSk7CiAKICAgICAqaW50cCA9IHZhbHVlOwogICAgIHJldHVybiBidWZwOwpAQCAtNTQ5LDEzICs1NjksMTggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgICp0eXBlID0gKmJ1ZnArKzsKKyAgICBpZiAoKnR5cGUgIT0gQVNOX0NPVU5URVIgJiYgKnR5cGUgIT0gQVNOX0dBVUdFICYmICp0eXBlICE9IEFTTl9USU1FVElDS1MKKyAgICAgICAgICAgICYmICp0eXBlICE9IEFTTl9VSU5URUdFUikgeworICAgICAgICBfYXNuX3R5cGVfZXJyKGVycnByZSwgKnR5cGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgYnVmcCA9IGFzbl9wYXJzZV9sZW5ndGgoYnVmcCwgJmFzbl9sZW5ndGgpOwogICAgIGlmIChfYXNuX3BhcnNlX2xlbmd0aF9jaGVjawogICAgICAgICAoZXJycHJlLCBidWZwLCBkYXRhLCBhc25fbGVuZ3RoLCAqZGF0YWxlbmd0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCgoaW50KSBhc25fbGVuZ3RoID4gKGludHNpemUgKyAxKSkgfHwKLSAgICAgICAgKCgoaW50KSBhc25fbGVuZ3RoID09IGludHNpemUgKyAxKSAmJiAqYnVmcCAhPSAweDAwKSkgeworICAgIGlmICgoYXNuX2xlbmd0aCA+IChpbnRzaXplICsgMSkpIHx8ICgoaW50KSBhc25fbGVuZ3RoID09IDApIHx8CisgICAgICAgICgoYXNuX2xlbmd0aCA9PSBpbnRzaXplICsgMSkgJiYgKmJ1ZnAgIT0gMHgwMCkpIHsKICAgICAgICAgX2Fzbl9sZW5ndGhfZXJyKGVycnByZSwgKHNpemVfdCkgYXNuX2xlbmd0aCwgaW50c2l6ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTU3MCw3ICs1OTUsNyBAQAogCiAgICAgQ0hFQ0tfT1ZFUkZMT1dfVSh2YWx1ZSwyKTsKIAotICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIFVJbnRlZ2VyOlx0JWxkICgweCUuMlgpXG4iLCB2YWx1ZSwgdmFsdWUpKTsKKyAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiICBVSW50ZWdlcjpcdCVsZCAoMHglLjJsWClcbiIsIHZhbHVlLCB2YWx1ZSkpOwogCiAgICAgKmludHAgPSB2YWx1ZTsKICAgICByZXR1cm4gYnVmcDsKQEAgLTY0OSw3ICs2NzQsNyBAQAogICAgICAgICBpbnRlZ2VyIDw8PSA4OwogICAgIH0KICAgICBERUJVR0RVTVBTRVRVUCgic2VuZCIsIGluaXRkYXRhcCwgZGF0YSAtIGluaXRkYXRhcCk7Ci0gICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgSW50ZWdlcjpcdCVsZCAoMHglLjJYKVxuIiwgKmludHAsICppbnRwKSk7CisgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgSW50ZWdlcjpcdCVsZCAoMHglLjJsWClcbiIsICppbnRwLCAqaW50cCkpOwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC03NDUsNyArNzcwLDcgQEAKICAgICAgICAgaW50ZWdlciA8PD0gODsKICAgICB9CiAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCBpbml0ZGF0YXAsIGRhdGEgLSBpbml0ZGF0YXApOwotICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIFVJbnRlZ2VyOlx0JWxkICgweCUuMlgpXG4iLCAqaW50cCwgKmludHApKTsKKyAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBVSW50ZWdlcjpcdCVsZCAoMHglLjJsWClcbiIsICppbnRwLCAqaW50cCkpOwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC03ODgsMTMgKzgxMywxOSBAQAogICAgIHVfbG9uZyAgICAgICAgICBhc25fbGVuZ3RoOwogCiAgICAgKnR5cGUgPSAqYnVmcCsrOworICAgIGlmICgqdHlwZSAhPSBBU05fT0NURVRfU1RSICYmICp0eXBlICE9IEFTTl9JUEFERFJFU1MgJiYgKnR5cGUgIT0gQVNOX09QQVFVRQorICAgICAgICAgICAgJiYgKnR5cGUgIT0gQVNOX05TQVApIHsKKyAgICAgICAgX2Fzbl90eXBlX2VycihlcnJwcmUsICp0eXBlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgYnVmcCA9IGFzbl9wYXJzZV9sZW5ndGgoYnVmcCwgJmFzbl9sZW5ndGgpOwogICAgIGlmIChfYXNuX3BhcnNlX2xlbmd0aF9jaGVjawogICAgICAgICAoZXJycHJlLCBidWZwLCBkYXRhLCBhc25fbGVuZ3RoLCAqZGF0YWxlbmd0aCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKChpbnQpIGFzbl9sZW5ndGggPiAqc3RybGVuZ3RoKSB7CisgICAgaWYgKGFzbl9sZW5ndGggPiAqc3RybGVuZ3RoKSB7CiAgICAgICAgIF9hc25fbGVuZ3RoX2VycihlcnJwcmUsIChzaXplX3QpIGFzbl9sZW5ndGgsICpzdHJsZW5ndGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC04MDIsMTAgKzgzMywxMCBAQAogICAgIERFQlVHRFVNUFNFVFVQKCJyZWN2IiwgZGF0YSwgYnVmcCAtIGRhdGEgKyBhc25fbGVuZ3RoKTsKIAogICAgIG1lbW1vdmUoc3RyLCBidWZwLCBhc25fbGVuZ3RoKTsKLSAgICBpZiAoKnN0cmxlbmd0aCA+IChpbnQpIGFzbl9sZW5ndGgpCisgICAgaWYgKCpzdHJsZW5ndGggPiBhc25fbGVuZ3RoKQogICAgICAgICBzdHJbYXNuX2xlbmd0aF0gPSAwOwotICAgICpzdHJsZW5ndGggPSAoaW50KSBhc25fbGVuZ3RoOwotICAgICpkYXRhbGVuZ3RoIC09IChpbnQpIGFzbl9sZW5ndGggKyAoYnVmcCAtIGRhdGEpOworICAgICpzdHJsZW5ndGggPSBhc25fbGVuZ3RoOworICAgICpkYXRhbGVuZ3RoIC09IGFzbl9sZW5ndGggKyAoYnVmcCAtIGRhdGEpOwogCiAgICAgREVCVUdJRigiZHVtcHZfcmVjdiIpIHsKICAgICAgICAgdV9jaGFyICAgICAgICAgKmJ1ZiA9ICh1X2NoYXIgKikgbWFsbG9jKDEgKyBhc25fbGVuZ3RoKTsKQEAgLTEyODYsNiArMTMxNyw3IEBACiAgICAgICAgICAgICAgICAgc2l6ZV90ICogZGF0YWxlbmd0aCwKICAgICAgICAgICAgICAgICB1X2NoYXIgKiB0eXBlLCBvaWQgKiBvYmppZCwgc2l6ZV90ICogb2JqaWRsZW5ndGgpCiB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmVycnByZSA9ICJwYXJzZSBvYmppZCI7CiAgICAgLyoKICAgICAgKiBBU04uMSBvYmppZCA6Oj0gMHgwNiBhc25sZW5ndGggc3ViaWRlbnRpZmllciB7c3ViaWRlbnRpZmllcn0qCiAgICAgICogc3ViaWRlbnRpZmllciA6Oj0ge2xlYWRpbmdieXRlfSogbGFzdGJ5dGUKQEAgLTEzMDAsNiArMTMzMiwxMCBAQAogICAgIHNpemVfdCAgICAgICAgICBvcmlnaW5hbF9sZW5ndGggPSAqb2JqaWRsZW5ndGg7CiAKICAgICAqdHlwZSA9ICpidWZwKys7CisgICAgaWYgKCp0eXBlICE9IEFTTl9PQkpFQ1RfSUQpIHsKKyAgICAgICAgX2Fzbl90eXBlX2VycihlcnJwcmUsICp0eXBlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGJ1ZnAgPSBhc25fcGFyc2VfbGVuZ3RoKGJ1ZnAsICZhc25fbGVuZ3RoKTsKICAgICBpZiAoX2Fzbl9wYXJzZV9sZW5ndGhfY2hlY2soInBhcnNlIG9iamlkIiwgYnVmcCwgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuX2xlbmd0aCwgKmRhdGFsZW5ndGgpKQpAQCAtMTY2OSw2ICsxNzA1LDEwIEBACiAgICAgdV9sb25nICAgICAgICAgIGFzbl9sZW5ndGg7CiAKICAgICAqdHlwZSA9ICpidWZwKys7CisgICAgaWYgKCp0eXBlICE9IEFTTl9CSVRfU1RSKSB7CisgICAgICAgIF9hc25fdHlwZV9lcnIoZXJycHJlLCAqdHlwZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBidWZwID0gYXNuX3BhcnNlX2xlbmd0aChidWZwLCAmYXNuX2xlbmd0aCk7CiAgICAgaWYgKF9hc25fcGFyc2VfbGVuZ3RoX2NoZWNrKGVycnByZSwgYnVmcCwgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuX2xlbmd0aCwgKmRhdGFsZW5ndGgpKQpAQCAtMTc4OSw2ICsxODI5LDE0IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAqdHlwZSA9ICpidWZwKys7CisgICAgaWYgKCp0eXBlICE9IEFTTl9DT1VOVEVSNjQKKyNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKKyAgICAgICAgICAgICYmICp0eXBlICE9IEFTTl9PUEFRVUUKKyNlbmRpZgorICAgICAgICAgICAgKSB7CisgICAgICAgIF9hc25fdHlwZV9lcnIoZXJycHJlLCAqdHlwZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBidWZwID0gYXNuX3BhcnNlX2xlbmd0aChidWZwLCAmYXNuX2xlbmd0aCk7CiAgICAgaWYgKF9hc25fcGFyc2VfbGVuZ3RoX2NoZWNrCiAgICAgICAgIChlcnJwcmUsIGJ1ZnAsIGRhdGEsIGFzbl9sZW5ndGgsICpkYXRhbGVuZ3RoKSkKQEAgLTE5ODgsNyArMjAzNiw3IEBACiAgICAgREVCVUdJRigiZHVtcHZfc2VuZCIpIHsKICAgICAgICAgY2hhciAgICAgICAgICAgIGk2NGJ1ZltJNjRDSEFSU1ogKyAxXTsKICAgICAgICAgcHJpbnRVNjQoaTY0YnVmLCBjcCk7Ci0gICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsIGk2NGJ1ZikpOworICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiJXMiLCBpNjRidWYpKTsKICAgICB9CiAgICAgcmV0dXJuIGRhdGE7CiB9CkBAIC0yMjI0LDYgKzIyNzIsNyBAQAogICAgICAgICAgICAgICAgIHNpemVfdCAqIGRhdGFsZW5ndGgsCiAgICAgICAgICAgICAgICAgdV9jaGFyICogdHlwZSwgZmxvYXQgKmZsb2F0cCwgc2l6ZV90IGZsb2F0c2l6ZSkKIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqZXJycHJlID0gInBhcnNlIGZsb2F0IjsKICAgICByZWdpc3RlciB1X2NoYXIgKmJ1ZnAgPSBkYXRhOwogICAgIHVfbG9uZyAgICAgICAgICBhc25fbGVuZ3RoOwogICAgIHVuaW9uIHsKQEAgLTIyNjQsNiArMjMxMywxMSBAQAogICAgICAgICAqdHlwZSA9IEFTTl9PUEFRVUVfRkxPQVQ7CiAgICAgfQogCisgICAgaWYgKCp0eXBlICE9IEFTTl9PUEFRVUVfRkxPQVQpIHsKKyAgICAgICAgX2Fzbl90eXBlX2VycihlcnJwcmUsICp0eXBlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKGFzbl9sZW5ndGggIT0gc2l6ZW9mKGZsb2F0KSkgewogICAgICAgICBfYXNuX3NpemVfZXJyKCJwYXJzZSBzZXEgZmxvYXQiLCBhc25fbGVuZ3RoLCBzaXplb2YoZmxvYXQpKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzg5LDYgKzI0NDMsNyBAQAogICAgICAgICAgICAgICAgICBzaXplX3QgKiBkYXRhbGVuZ3RoLAogICAgICAgICAgICAgICAgICB1X2NoYXIgKiB0eXBlLCBkb3VibGUgKmRvdWJsZXAsIHNpemVfdCBkb3VibGVzaXplKQogeworICAgIHN0YXRpYyBjb25zdCBjaGFyICplcnJwcmUgPSAicGFyc2UgZG91YmxlIjsKICAgICByZWdpc3RlciB1X2NoYXIgKmJ1ZnAgPSBkYXRhOwogICAgIHVfbG9uZyAgICAgICAgICBhc25fbGVuZ3RoOwogICAgIGxvbmcgICAgICAgICAgICB0bXA7CkBAIC0yNDMxLDYgKzI0ODYsMTEgQEAKICAgICAgICAgKnR5cGUgPSBBU05fT1BBUVVFX0RPVUJMRTsKICAgICB9CiAKKyAgICBpZiAoKnR5cGUgIT0gQVNOX09QQVFVRV9ET1VCTEUpIHsKKyAgICAgICAgX2Fzbl90eXBlX2VycihlcnJwcmUsICp0eXBlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKGFzbl9sZW5ndGggIT0gc2l6ZW9mKGRvdWJsZSkpIHsKICAgICAgICAgX2Fzbl9zaXplX2VycigicGFyc2Ugc2VxIGRvdWJsZSIsIGFzbl9sZW5ndGgsIHNpemVvZihkb3VibGUpKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNTU3LDE1ICsyNjE3LDE2IEBACiAgICAgaWYgKHBrdCAhPSBOVUxMICYmIHBrdF9sZW4gIT0gTlVMTCkgewogICAgICAgICBzaXplX3QgICAgICAgICAgb2xkX3BrdF9sZW4gPSAqcGt0X2xlbjsKIAotICAgICAgICBERUJVR01TR1RMKCgiYXNuX3JlYWxsb2MiLCAiIG9sZF9wa3QgJTA4cCwgb2xkX3BrdF9sZW4gJTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKnBrdCwgb2xkX3BrdF9sZW4pKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFzbl9yZWFsbG9jIiwgIiBvbGRfcGt0ICU4cCwgb2xkX3BrdF9sZW4gJWx1XG4iLAorICAgICAgICAgICAgICAgICAgICAqcGt0LCAodW5zaWduZWQgbG9uZylvbGRfcGt0X2xlbikpOwogCiAgICAgICAgIGlmIChzbm1wX3JlYWxsb2MocGt0LCBwa3RfbGVuKSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFzbl9yZWFsbG9jIiwgIiBuZXdfcGt0ICUwOHAsIG5ld19wa3RfbGVuICUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAqcGt0LCAqcGt0X2xlbikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFzbl9yZWFsbG9jIiwgIiBuZXdfcGt0ICU4cCwgbmV3X3BrdF9sZW4gJWx1XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKnBrdCwgKHVuc2lnbmVkIGxvbmcpKnBrdF9sZW4pKTsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhc25fcmVhbGxvYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiIG1lbW1vdmUoJTA4cCArICUwOHgsICUwOHAsICUwOHgpXG4iLCAqcGt0LAotICAgICAgICAgICAgICAgICAgICAgICAgKCpwa3RfbGVuIC0gb2xkX3BrdF9sZW4pLCAqcGt0LCBvbGRfcGt0X2xlbikpOworICAgICAgICAgICAgICAgICAgICAgICAgIiBtZW1tb3ZlKCU4cCArICUwOHgsICU4cCwgJTA4eClcbiIsCisJCQkqcGt0LCAodW5zaWduZWQpKCpwa3RfbGVuIC0gb2xkX3BrdF9sZW4pLAorCQkJKnBrdCwgKHVuc2lnbmVkKW9sZF9wa3RfbGVuKSk7CiAgICAgICAgICAgICBtZW1tb3ZlKCpwa3QgKyAoKnBrdF9sZW4gLSBvbGRfcGt0X2xlbiksICpwa3QsIG9sZF9wa3RfbGVuKTsKICAgICAgICAgICAgIG1lbXNldCgqcGt0LCAoaW50KSAnICcsICpwa3RfbGVuIC0gb2xkX3BrdF9sZW4pOwogICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0yNzU2LDcgKzI4MTcsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKnBrdCArICpwa3RfbGVuIC0gKm9mZnNldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKm9mZnNldCAtIHN0YXJ0X29mZnNldCkpOwotICAgICAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgSW50ZWdlcjpcdCVsZCAoMHglLjJYKVxuIiwgKmludHAsCisgICAgICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMmxYKVxuIiwgKmludHAsCiAgICAgICAgICAgICAgICAgICAgICAgKmludHApKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CkBAIC0yOTA5LDcgKzI5NzAsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKnBrdCArICpwa3RfbGVuIC0gKm9mZnNldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKm9mZnNldCAtIHN0YXJ0X29mZnNldCkpOwotICAgICAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgVUludGVnZXI6XHQlbHUgKDB4JS4yWClcbiIsICppbnRwLAorICAgICAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgVUludGVnZXI6XHQlbHUgKDB4JS4ybFgpXG4iLCAqaW50cCwKICAgICAgICAgICAgICAgICAgICAgICAqaW50cCkpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NubXBsaWIvY2FsbGJhY2suYyBiL3NubXBsaWIvY2FsbGJhY2suYwppbmRleCBlNDM0MDQyLi5kZmU1MzdhIDEwMDY0NAotLS0gYS9zbm1wbGliL2NhbGxiYWNrLmMKKysrIGIvc25tcGxpYi9jYWxsYmFjay5jCkBAIC0xNywxNCArMTcsMTIgQEAKICAqICBAewogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTU1LDYgKzUzLDExIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhbGxiYWNrc19hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjYWxsYmFja19jb3VudCwgY2FsbGJhY2tzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjYWxsYmFja19saXN0LCBjYWxsYmFja3NfYWxsKQorCiAvKgogICogdGhlIGlubGluZSBjYWxsYmFjayBtZXRob2RzIHVzZSBtYWpvci9taW5vciB0byBpbmRleCBpbnRvIGFycmF5cy4KICAqIGFsbCB1c2VycyBpbiB0aGlzIGZ1bmN0aW9uIGRvIHJhbmdlIGNoZWNraW5nIGJlZm9yZSBjYWxsaW5nIHRoZXNlCkBAIC0xMTUsNyArMTE4LDcgQEAKICNlbmRpZgogCiBORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50Ci1fY2FsbGJhY2tfbG9jayhpbnQgbWFqb3IsIGludCBtaW5vciwgY29uc3QgY2hhciogd2FybiwgaW50IGFzc2VydCkKK19jYWxsYmFja19sb2NrKGludCBtYWpvciwgaW50IG1pbm9yLCBjb25zdCBjaGFyKiB3YXJuLCBpbnQgZG9fYXNzZXJ0KQogewogICAgIGludCBsb2NrX2hvbGRlZD0wOwogICAgIHN0cnVjdCB0aW1ldmFsIGxvY2tfdGltZSA9IHsgMCwgMTAwMCB9OwpAQCAtMTM5LDcgKzE0Miw3IEBACiAgICAgICAgIGlmIChOVUxMICE9IHdhcm4pCiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKICAgICAgICAgICAgICAgICAgICAgICJsb2NrIGluIF9jYWxsYmFja19sb2NrIHNsZWVwcyBtb3JlIHRoYW4gMTAwIG1pbGxpc2Vjb25kcyBpbiAlc1xuIiwgd2Fybik7Ci0gICAgICAgIGlmIChhc3NlcnQpCisgICAgICAgIGlmIChkb19hc3NlcnQpCiAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChsb2NrX2hvbGRlZCA8IDEwMCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gMTsKQEAgLTIxNyw3ICsyMjAsOSBAQAogICogQHBhcmFtIG5ld19jYWxsYmFjayBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyByZWdpc3RlcmVkLgogICoKICAqIEBwYXJhbSBhcmcgd2hlbiBub3QgTlVMTCBpcyBhIHZvaWQgcG9pbnRlciB1c2VkIHdoZW5ldmVyIG5ld19jYWxsYmFjayAKLSAqCWZ1bmN0aW9uIGlzIGV4ZXJjaXNlZC4KKyAqCWZ1bmN0aW9uIGlzIGV4ZXJjaXNlZC4gT3duZXJzaGlwIGlzIHRyYW5zZmVycmVkIHRvIHRoZSB0d29kaW1lbnNpb25hbAorICogICAgICB0aGVjYWxsYmFja3NbXVtdIGFycmF5LiBUaGUgZnVuY3Rpb24gY2xlYXJfY2FsbGJhY2soKSB3aWxsIGRlYWxsb2NhdGUKKyAqICAgICAgdGhlIG1lbW9yeSBwb2ludGVkIGF0IGJ5IGNhbGxpbmcgZnJlZSgpLgogICoKICAqIEByZXR1cm4gCiAgKglSZXR1cm5zIFNOTVBFUlJfR0VORVJSIGlmIG1ham9yIGlzID49IE1BWF9DQUxMQkFDS19JRFMgb3IgbWlub3IgaXMgPj0KQEAgLTIzNyw2ICsyNDIsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9DQUxMQkFDS19ERUZBVUxUX1BSSU9SSVRZKTsKIH0KIAorLyoqCisgKiBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSBtYWpvciAgICAgICAgTWFqb3IgY2FsbGJhY2sgZXZlbnQgdHlwZS4KKyAqIEBwYXJhbSBtaW5vciAgICAgICAgTWlub3IgY2FsbGJhY2sgZXZlbnQgdHlwZS4KKyAqIEBwYXJhbSBuZXdfY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gYmVpbmcgcmVnaXN0ZXJlZC4KKyAqIEBwYXJhbSBhcmcgICAgICAgICAgQXJndW1lbnQgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBAcGFyYW0gcHJpb3JpdHkgICAgIEhhbmRsZXIgaW52b2NhdGlvbiBwcmlvcml0eS4gV2hlbiBtdWx0aXBsZSBoYW5kbGVycyBoYXZlCisgKiAgIGJlZW4gcmVnaXN0ZXJlZCBmb3IgdGhlIHNhbWUgKG1ham9yLCBtaW5vcikgY2FsbGJhY2sgZXZlbnQgdHlwZSwgaGFuZGxlcnMKKyAqICAgd2l0aCB0aGUgbnVtZXJpY2FsbHkgbG93ZXN0IHByaW9yaXR5IHdpbGwgYmUgaW52b2tlZCBmaXJzdC4gSGFuZGxlcnMgd2l0aAorICogICBpZGVudGljYWwgcHJpb3JpdHkgYXJlIGludm9rZWQgaW4gdGhlIG9yZGVyIHRoZXkgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuCisgKgorICogQHNlZSBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrCisgKi8KIGludAogbmV0c25tcF9yZWdpc3Rlcl9jYWxsYmFjayhpbnQgbWFqb3IsIGludCBtaW5vciwgU05NUENhbGxiYWNrICogbmV3X2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcsIGludCBwcmlvcml0eSkKQEAgLTM1NCw2ICszNzMsNyBAQAogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUxMQkFDS19DT1VOVAogaW50CiBzbm1wX2NvdW50X2NhbGxiYWNrcyhpbnQgbWFqb3IsIGludCBtaW5vcikKIHsKQEAgLTM3Myw2ICszOTMsNyBAQAogCiAgICAgcmV0dXJuIGNvdW50OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FMTEJBQ0tfQ09VTlQgKi8KIAogaW50CiBzbm1wX2NhbGxiYWNrX2F2YWlsYWJsZShpbnQgbWFqb3IsIGludCBtaW5vcikKQEAgLTU1MSw2ICs1NzIsNyBAQAogICAgIH0KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBTExCQUNLX0xJU1QKIHN0cnVjdCBzbm1wX2dlbl9jYWxsYmFjayAqCiBzbm1wX2NhbGxiYWNrX2xpc3QoaW50IG1ham9yLCBpbnQgbWlub3IpCiB7CkBAIC01NTksNCArNTgxLDUgQEAKIAogICAgIHJldHVybiAodGhlY2FsbGJhY2tzW21ham9yXVttaW5vcl0pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FMTEJBQ0tfTElTVCAqLwogLyoqICBAfSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jZXJ0X3V0aWwuYyBiL3NubXBsaWIvY2VydF91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2YTZjOQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvY2VydF91dGlsLmMKQEAgLTAsMCArMSwzMzY3IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjZXJ0X3V0aWxfYWxsLCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNlcnRfdXRpbCwgY2VydF91dGlsX2FsbCkKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DRVJUX1VUSUwKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9kaXJlY3RvcnkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZmlmbykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9kdXApCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZnJlZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdWJjb250YWluZXJfZmluZCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNlcnRfbWFwX3JlbW92ZSwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2VydF9tYXBfZmluZCwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzdG1wYXJhbXNfZXh0ZXJuYWwsIGNlcnRfdXRpbF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzdG1wYXJhbXNfY29udGFpbmVyLCB0bHN0bXBhcmFtc19leHRlcm5hbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHN0bXBhcmFtc19yZW1vdmUsIHRsc3RtcGFyYW1zX2V4dGVybmFsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc3RtcGFyYW1zX2ZpbmQsIHRsc3RtcGFyYW1zX2V4dGVybmFsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc3RtQWRkcl9yZW1vdmUsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc3RtYWRkcl9leHRlcm5hbCwgY2VydF91dGlsX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHN0bWFkZHJfY29udGFpbmVyLCB0bHN0bWFkZHJfZXh0ZXJuYWwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzdG1BZGRyX2dldF9zZXJ2ZXJJZCwgdGxzdG1hZGRyX2V4dGVybmFsKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2VydF9maW5nZXJwcmludHMsIGNlcnRfdXRpbF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzX2ZpbmdlcnByaW50X2J1aWxkLCBjZXJ0X3V0aWxfYWxsKQorCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ0VSVF9VVElMICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX1VUSUwKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyMgICBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9ESVJFTlRfSAorIyBpbmNsdWRlIDxkaXJlbnQuaD4KKyMgZGVmaW5lIE5BTUxFTihkaXJlbnQpIHN0cmxlbigoZGlyZW50KS0+ZF9uYW1lKQorI2Vsc2UKKyMgZGVmaW5lIGRpcmVudCBkaXJlY3QKKyMgZGVmaW5lIE5BTUxFTihkaXJlbnQpIChkaXJlbnQpLT5kX25hbWxlbgorIyBpZiBIQVZFX1NZU19ORElSX0gKKyMgIGluY2x1ZGUgPHN5cy9uZGlyLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfU1lTX0RJUl9ICisjICBpbmNsdWRlIDxzeXMvZGlyLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfTkRJUl9ICisjICBpbmNsdWRlIDxuZGlyLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaD4KKworI2lmbmRlZiBOQU1FX01BWAorI2RlZmluZSBOQU1FX01BWCAyNTUKKyNlbmRpZgorCisvKgorICogYnVtcCB0aGlzIHZhbHVlIHdoZW5ldmVyIGNlcnQgaW5kZXggZm9ybWF0IGNoYW5nZXMsIHNvIGluZGV4ZXMKKyAqIHdpbGwgYmUgcmVnZW5lcmF0ZWQgd2l0aCBuZXcgZm9ybWF0LgorICovCisjZGVmaW5lIENFUlRfSU5ERVhfRk9STUFUICAxCisKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqX2NlcnRzID0gTlVMTDsKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqX2tleXMgPSBOVUxMOworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpfbWFwcyA9IE5VTEw7CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKl90bHN0bVBhcmFtcyA9IE5VTEw7CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKl90bHN0bUFkZHIgPSBOVUxMOworc3RhdGljIHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqX2NlcnRpbmRleGVzID0gTlVMTDsKKworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpfdHJ1c3RlZF9jZXJ0cyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIF9zZXR1cF9jb250YWluZXJzKHZvaWQpOworCitzdGF0aWMgdm9pZCBfY2VydF9pbmRleGVzX2xvYWQodm9pZCk7CitzdGF0aWMgdm9pZCBfY2VydF9mcmVlKG5ldHNubXBfY2VydCAqY2VydCwgdm9pZCAqY29udGV4dCk7CitzdGF0aWMgdm9pZCBfa2V5X2ZyZWUobmV0c25tcF9rZXkgKmtleSwgdm9pZCAqY29udGV4dCk7CitzdGF0aWMgaW50ICBfY2VydF9jb21wYXJlKG5ldHNubXBfY2VydCAqbGhzLCBuZXRzbm1wX2NlcnQgKnJocyk7CitzdGF0aWMgaW50ICBfY2VydF9zbl9jb21wYXJlKG5ldHNubXBfY2VydCAqbGhzLCBuZXRzbm1wX2NlcnQgKnJocyk7CitzdGF0aWMgaW50ICBfY2VydF9zbl9uY29tcGFyZShuZXRzbm1wX2NlcnQgKmxocywgbmV0c25tcF9jZXJ0ICpyaHMpOworc3RhdGljIGludCAgX2NlcnRfY25fY29tcGFyZShuZXRzbm1wX2NlcnQgKmxocywgbmV0c25tcF9jZXJ0ICpyaHMpOworc3RhdGljIGludCAgX2NlcnRfZm5fY29tcGFyZShuZXRzbm1wX2NlcnRfY29tbW9uICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9jb21tb24gKnJocyk7CitzdGF0aWMgaW50ICBfY2VydF9mbl9uY29tcGFyZShuZXRzbm1wX2NlcnRfY29tbW9uICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfY29tbW9uICpyaHMpOworc3RhdGljIHZvaWQgX2ZpbmRfcGFydG5lcihuZXRzbm1wX2NlcnQgKmNlcnQsIG5ldHNubXBfa2V5ICprZXkpOworc3RhdGljIG5ldHNubXBfY2VydCAqX2ZpbmRfaXNzdWVyKG5ldHNubXBfY2VydCAqY2VydCk7CitzdGF0aWMgbmV0c25tcF92b2lkX2FycmF5ICpfY2VydF9maW5kX3N1YnNldF9mbihjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7CitzdGF0aWMgbmV0c25tcF92b2lkX2FycmF5ICpfY2VydF9maW5kX3N1YnNldF9zbihjb25zdCBjaGFyICpzdWJqZWN0KTsKK3N0YXRpYyBuZXRzbm1wX3ZvaWRfYXJyYXkgKl9rZXlfZmluZF9zdWJzZXQoY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIG5ldHNubXBfY2VydCAqX2NlcnRfZmluZF9mcChjb25zdCBjaGFyICpmaW5nZXJwcmludCk7CitzdGF0aWMgY2hhciAqX2ZpbmRfdGxzdG1QYXJhbXNfZmluZ2VycHJpbnQoY29uc3QgY2hhciAqcGFyYW0pOworc3RhdGljIGNoYXIgKl9maW5kX3Rsc3RtQWRkcl9maW5nZXJwcmludChjb25zdCBjaGFyICpuYW1lKTsKK3N0YXRpYyBjb25zdCBjaGFyICpfbW9kZV9zdHIodV9jaGFyIG1vZGUpOworc3RhdGljIGNvbnN0IGNoYXIgKl93aGVyZV9zdHIodV9pbnQgd2hhdCk7Cit2b2lkIG5ldHNubXBfY2VydF9kdW1wX2FsbCh2b2lkKTsKKworaW50IG5ldHNubXBfY2VydF9sb2FkX3g1MDkobmV0c25tcF9jZXJ0ICpjZXJ0KTsKKwordm9pZCBuZXRzbm1wX2NlcnRfZnJlZShuZXRzbm1wX2NlcnQgKmNlcnQpOwordm9pZCBuZXRzbm1wX2tleV9mcmVlKG5ldHNubXBfa2V5ICprZXkpOworCitzdGF0aWMgaW50IF9jZXJ0aW5kZXhfYWRkKCBjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgaSApOworCitzdGF0aWMgaW50IF90aW1lX2ZpbHRlcihuZXRzbm1wX2ZpbGUgKmYsIHN0cnVjdCBzdGF0ICppZHgpOworCitzdGF0aWMgdm9pZCBfaW5pdF90bHN0bUNlcnRUb1RTTih2b2lkKTsKKyNkZWZpbmUgVFJVU1RDRVJUX0NPTkZJR19UT0tFTiAidHJ1c3RDZXJ0Igorc3RhdGljIHZvaWQgX3BhcnNlX3RydXN0Y2VydChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CisKK3N0YXRpYyB2b2lkIF9pbml0X3Rsc3RtUGFyYW1zKHZvaWQpOworc3RhdGljIHZvaWQgX2luaXRfdGxzdG1BZGRyKHZvaWQpOworCisvKiogbW9kZSBkZXNjcmlwdGlvbnMgc2hvdWxkIG1hdGNoIHVwIHdpdGggaGVhZGVyICovCitzdGF0aWMgY29uc3QgY2hhciBfbW9kZXNbXVsyNTZdID0KKyAgICAgICAgeworICAgICAgICAgICAgIm5vbmUiLAorICAgICAgICAgICAgImlkZW50aXR5IiwKKyAgICAgICAgICAgICJyZW1vdGVfcGVlciIsCisgICAgICAgICAgICAiaWRlbnRpdHkrcmVtb3RlX3BlZXIiLAorICAgICAgICAgICAgInJlc2VydmVkMSIsCisgICAgICAgICAgICAicmVzZXJ2ZWQxK2lkZW50aXR5IiwKKyAgICAgICAgICAgICJyZXNlcnZlZDErcmVtb3RlX3BlZXIiLAorICAgICAgICAgICAgInJlc2VydmVkMStpZGVudGl0eStyZW1vdGVfcGVlciIsCisgICAgICAgICAgICAiQ0EiLAorICAgICAgICAgICAgIkNBK2lkZW50aXR5IiwKKyAgICAgICAgICAgICJDQStyZW1vdGVfcGVlciIsCisgICAgICAgICAgICAiQ0EraWRlbnRpdHkrcmVtb3RlX3BlZXIiLAorICAgICAgICAgICAgIkNBK3Jlc2VydmVkMSIsCisgICAgICAgICAgICAiQ0ErcmVzZXJ2ZWQxK2lkZW50aXR5IiwKKyAgICAgICAgICAgICJDQStyZXNlcnZlZDErcmVtb3RlX3BlZXIiLAorICAgICAgICAgICAgIkNBK3Jlc2VydmVkMStpZGVudGl0eStyZW1vdGVfcGVlciIsCisgICAgICAgIH07CisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIGluaXQgYW5kIHNodXRkb3duIGZ1bmN0aW9ucworICoKKyAqLworCit2b2lkCitfbmV0c25tcF9yZWxlYXNlX3RydXN0Y2VydHModm9pZCkKK3sKKyAgICBpZiAoTlVMTCAhPSBfdHJ1c3RlZF9jZXJ0cykgeworICAgICAgICBDT05UQUlORVJfRlJFRV9BTEwoX3RydXN0ZWRfY2VydHMsIE5VTEwpOworICAgICAgICBDT05UQUlORVJfRlJFRShfdHJ1c3RlZF9jZXJ0cyk7CisgICAgICAgIF90cnVzdGVkX2NlcnRzID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQKK19zZXR1cF90cnVzdGVkX2NlcnRzKHZvaWQpCit7CisgICAgX3RydXN0ZWRfY2VydHMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJ0cnVzdGVkX2NlcnRzOmZpZm8iKTsKKyAgICBpZiAoTlVMTCA9PSBfdHJ1c3RlZF9jZXJ0cykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGNyZWF0ZSBjb250YWluZXIgZm9yIHRydXN0ZWQgY2VydHNcbiIpOworICAgICAgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX3RydXN0ZWRfY2VydHMtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJ0cnVzdGVkIGNlcnRpZmljYXRlcyIpOworICAgIF90cnVzdGVkX2NlcnRzLT5mcmVlX2l0ZW0gPSAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKSBmcmVlOworICAgIF90cnVzdGVkX2NlcnRzLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKSBzdHJjbXA7Cit9CisKKy8qCisgKiBzZWNuYW1lIG1hcHBpbmcgZm9yIHNlcnZlcnMuCisgKi8KK3ZvaWQKK25ldHNubXBfY2VydHNfYWdlbnRfaW5pdCh2b2lkKQoreworICAgIF9pbml0X3Rsc3RtQ2VydFRvVFNOKCk7CisgICAgX2luaXRfdGxzdG1QYXJhbXMoKTsKKyAgICBfaW5pdF90bHN0bUFkZHIoKTsKK30KKwordm9pZAorbmV0c25tcF9jZXJ0c19pbml0KHZvaWQpCit7CisgICAgY29uc3QgY2hhciAqdHJ1c3RDZXJ0X2hlbHAgPSBUUlVTVENFUlRfQ09ORklHX1RPS0VOCisgICAgICAgICIgRklOR0VSUFJJTlR8RklMRU5BTUUiOworCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCBUUlVTVENFUlRfQ09ORklHX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJzZV90cnVzdGNlcnQsIF9uZXRzbm1wX3JlbGVhc2VfdHJ1c3RjZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVzdENlcnRfaGVscCk7CisgICAgX3NldHVwX2NvbnRhaW5lcnMoKTsKKworICAgIC8qKiBhZGQgY2VydGlmaWNhdGUgdHlwZSBtYXBwaW5nICovCisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfdHlwZXMiLCBzdHJkdXAoInBlbSIpLCBOU19DRVJUX1RZUEVfUEVNKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF90eXBlcyIsIHN0cmR1cCgiY3J0IiksIE5TX0NFUlRfVFlQRV9ERVIpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X3R5cGVzIiwgc3RyZHVwKCJjZXIiKSwgTlNfQ0VSVF9UWVBFX0RFUik7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfdHlwZXMiLCBzdHJkdXAoImNlcnQiKSwgTlNfQ0VSVF9UWVBFX0RFUik7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfdHlwZXMiLCBzdHJkdXAoImRlciIpLCBOU19DRVJUX1RZUEVfREVSKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF90eXBlcyIsIHN0cmR1cCgia2V5IiksIE5TX0NFUlRfVFlQRV9LRVkpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X3R5cGVzIiwgc3RyZHVwKCJwcml2YXRlIiksIE5TX0NFUlRfVFlQRV9LRVkpOworCisgICAgLyoqIGhhc2ggYWxncyAqLworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgc3RyZHVwKCJzaGExIiksIE5TX0hBU0hfU0hBMSk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBzdHJkdXAoIm1kNSIpLCBOU19IQVNIX01ENSk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBzdHJkdXAoInNoYTIyNCIpLCBOU19IQVNIX1NIQTIyNCk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBzdHJkdXAoInNoYTI1NiIpLCBOU19IQVNIX1NIQTI1Nik7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBzdHJkdXAoInNoYTM4NCIpLCBOU19IQVNIX1NIQTM4NCk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBzdHJkdXAoInNoYTUxMiIpLCBOU19IQVNIX1NIQTUxMik7CisKKyAgICAvKiogbWFwIHR5cGVzICovCisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfbWFwX3R5cGUiLCBzdHJkdXAoImNuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgVFNOTV90bHN0bUNlcnRDb21tb25OYW1lKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9tYXBfdHlwZSIsIHN0cmR1cCgiaXAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU05NX3Rsc3RtQ2VydFNBTklwQWRkcmVzcyk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfbWFwX3R5cGUiLCBzdHJkdXAoInJmYzgyMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRTTk1fdGxzdG1DZXJ0U0FOUkZDODIyTmFtZSk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfbWFwX3R5cGUiLCBzdHJkdXAoImRucyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRTTk1fdGxzdG1DZXJ0U0FORE5TTmFtZSk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfbWFwX3R5cGUiLCBzdHJkdXAoImFueSIpLCBUU05NX3Rsc3RtQ2VydFNBTkFueSk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfbWFwX3R5cGUiLCBzdHJkdXAoInNuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQpOworCit9CisKK3ZvaWQKK25ldHNubXBfY2VydHNfc2h1dGRvd24odm9pZCkKK3sKKyAgICBERUJVR01TR1QoKCJjZXJ0OnV0aWw6c2h1dGRvd24iLCJzaHV0ZG93blxuIikpOworICAgIGlmIChfbWFwcykgeworICAgICAgICBDT05UQUlORVJfRlJFRV9BTEwoX21hcHMsIE5VTEwpOworICAgICAgICBDT05UQUlORVJfRlJFRShfbWFwcyk7CisgICAgICAgIF9tYXBzID0gTlVMTDsKKyAgICB9CisgICAgaWYgKE5VTEwgIT0gX2NlcnRzKSB7CisgICAgICAgIENPTlRBSU5FUl9GUkVFX0FMTChfY2VydHMsIE5VTEwpOworICAgICAgICBDT05UQUlORVJfRlJFRShfY2VydHMpOworICAgICAgICBfY2VydHMgPSBOVUxMOworICAgIH0KKyAgICBpZiAoTlVMTCAhPSBfa2V5cykgeworICAgICAgICBDT05UQUlORVJfRlJFRV9BTEwoX2tleXMsIE5VTEwpOworICAgICAgICBDT05UQUlORVJfRlJFRShfa2V5cyk7CisgICAgICAgIF9rZXlzID0gTlVMTDsKKyAgICB9CisgICAgX25ldHNubXBfcmVsZWFzZV90cnVzdGNlcnRzKCk7Cit9CisKK3ZvaWQKK25ldHNubXBfY2VydHNfbG9hZCh2b2lkKQoreworICAgIG5ldHNubXBfaXRlcmF0b3IgICppdHI7CisgICAgbmV0c25tcF9rZXkgICAgICAgICprZXk7CisgICAgbmV0c25tcF9jZXJ0ICAgICAgICpjZXJ0OworCisgICAgREVCVUdNU0dUKCgiY2VydDp1dGlsOmluaXQiLCJpbml0XG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBfY2VydHMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNhbnQgbG9hZCBjZXJ0cyB3aXRob3V0IGNvbnRhaW5lclxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoQ09OVEFJTkVSX1NJWkUoX2NlcnRzKSAhPSAwKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6dXRpbDppbml0IiwgImlnbm9yaW5nIGR1cGxpY2F0ZSBpbml0XG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBuZXRzbm1wX2luaXRfb3BlbnNzbCgpOworCisgICAgLyoqIHNjYW4gY29uZmlnIGRpcnMgZm9yIGNlcnRzICovCisgICAgX2NlcnRfaW5kZXhlc19sb2FkKCk7CisKKyAgICAvKiogbWF0Y2ggdXAga2V5cyB3L2NlcnRzICovCisgICAgaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKF9rZXlzKTsKKyAgICBpZiAoTlVMTCA9PSBpdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIGtleXNcbiIpOworICAgICAgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAga2V5ID0gSVRFUkFUT1JfRklSU1QoaXRyKTsKKyAgICBmb3IoIDsga2V5OyBrZXkgPSBJVEVSQVRPUl9ORVhUKGl0cikpCisgICAgICAgIF9maW5kX3BhcnRuZXIoTlVMTCwga2V5KTsKKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisKKyAgICBERUJVR0lGKCJjZXJ0OmR1bXAiKSB7CisgICAgICAgIGl0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihfY2VydHMpOworICAgICAgICBpZiAoTlVMTCA9PSBpdHIpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGl0ZXJhdG9yIGZvciBjZXJ0c1xuIik7CisgICAgICAgICAgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2VydCA9IElURVJBVE9SX0ZJUlNUKGl0cik7CisgICAgICAgIGZvciggOyBjZXJ0OyBjZXJ0ID0gSVRFUkFUT1JfTkVYVChpdHIpKSB7CisgICAgICAgICAgICBuZXRzbm1wX2NlcnRfbG9hZF94NTA5KGNlcnQpOworICAgICAgICB9CisgICAgICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpkdW1wIiwKKyAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2VydGlmaWNhdGVzIC0tLS0tLS0tLS0tLS0tLS0tXG4iKSk7CisgICAgICAgIG5ldHNubXBfY2VydF9kdW1wX2FsbCgpOworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmR1bXAiLAorICAgICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpKTsKKyAgICB9Cit9CisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIGNlcnQgY29udGFpbmVyIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqCitfZ2V0X2NlcnRfY29udGFpbmVyKGNvbnN0IGNoYXIgKnVzZSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYzsKKworICAgIGMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJjZXJ0czpiaW5hcnlfYXJyYXkiKTsKKyAgICBpZiAoTlVMTCA9PSBjKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgY3JlYXRlIGNvbnRhaW5lciBmb3IgJXNcbiIsIHVzZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCh1c2UpOworICAgIGMtPmZyZWVfaXRlbSA9IChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX2NlcnRfZnJlZTsKKyAgICBjLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9jZXJ0X2NvbXBhcmU7CisKKyAgICByZXR1cm4gYzsKK30KKworc3RhdGljIHZvaWQKK19zZXR1cF9jb250YWluZXJzKHZvaWQpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmFkZGl0aW9uYWxfa2V5czsKKworICAgIF9jZXJ0cyA9IF9nZXRfY2VydF9jb250YWluZXIoIm5ldHNubXAgY2VydGlmaWNhdGVzIik7CisgICAgaWYgKE5VTEwgPT0gX2NlcnRzKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiogYWRkaXRpb25hbCBrZXlzOiBjb21tb24gbmFtZSAqLworICAgIGFkZGl0aW9uYWxfa2V5cyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImNlcnRzX2NuOmJpbmFyeV9hcnJheSIpOworICAgIGlmIChOVUxMID09IGFkZGl0aW9uYWxfa2V5cykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGNyZWF0ZSBDTiBjb250YWluZXIgZm9yIGNlcnRpZmljYXRlc1xuIik7CisgICAgICAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGRpdGlvbmFsX2tleXMtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJjZXJ0c19jbiIpOworICAgIGFkZGl0aW9uYWxfa2V5cy0+ZnJlZV9pdGVtID0gTlVMTDsKKyAgICBhZGRpdGlvbmFsX2tleXMtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX2NlcnRfY25fY29tcGFyZTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl9hZGRfaW5kZXgoX2NlcnRzLCBhZGRpdGlvbmFsX2tleXMpOworCisgICAgLyoqIGFkZGl0aW9uYWwga2V5czogc3ViamVjdCBuYW1lICovCisgICAgYWRkaXRpb25hbF9rZXlzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiY2VydHNfc246YmluYXJ5X2FycmF5Iik7CisgICAgaWYgKE5VTEwgPT0gYWRkaXRpb25hbF9rZXlzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgY3JlYXRlIFNOIGNvbnRhaW5lciBmb3IgY2VydGlmaWNhdGVzXG4iKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZGl0aW9uYWxfa2V5cy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImNlcnRzX3NuIik7CisgICAgYWRkaXRpb25hbF9rZXlzLT5mcmVlX2l0ZW0gPSBOVUxMOworICAgIGFkZGl0aW9uYWxfa2V5cy0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfY2VydF9zbl9jb21wYXJlOworICAgIGFkZGl0aW9uYWxfa2V5cy0+bmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX2NlcnRfc25fbmNvbXBhcmU7CisgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4KF9jZXJ0cywgYWRkaXRpb25hbF9rZXlzKTsKKworICAgIC8qKiBhZGRpdGlvbmFsIGtleXM6IGZpbGUgbmFtZSAqLworICAgIGFkZGl0aW9uYWxfa2V5cyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImNlcnRzX2ZuOmJpbmFyeV9hcnJheSIpOworICAgIGlmIChOVUxMID09IGFkZGl0aW9uYWxfa2V5cykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGNyZWF0ZSBGTiBjb250YWluZXIgZm9yIGNlcnRpZmljYXRlc1xuIik7CisgICAgICAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGRpdGlvbmFsX2tleXMtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJjZXJ0c19mbiIpOworICAgIGFkZGl0aW9uYWxfa2V5cy0+ZnJlZV9pdGVtID0gTlVMTDsKKyAgICBhZGRpdGlvbmFsX2tleXMtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX2NlcnRfZm5fY29tcGFyZTsKKyAgICBhZGRpdGlvbmFsX2tleXMtPm5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9jZXJ0X2ZuX25jb21wYXJlOworICAgIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleChfY2VydHMsIGFkZGl0aW9uYWxfa2V5cyk7CisKKyAgICBfa2V5cyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImNlcnRfa2V5czpiaW5hcnlfYXJyYXkiKTsKKyAgICBpZiAoTlVMTCA9PSBfa2V5cykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGNyZWF0ZSBjb250YWluZXIgZm9yIGNlcnRpZmljYXRlIGtleXNcbiIpOworICAgICAgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX2tleXMtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJuZXRzbm1wIGNlcnRpZmljYXRlIGtleXMiKTsKKyAgICBfa2V5cy0+ZnJlZV9pdGVtID0gKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfa2V5X2ZyZWU7CisgICAgX2tleXMtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX2NlcnRfZm5fY29tcGFyZTsKKworICAgIF9zZXR1cF90cnVzdGVkX2NlcnRzKCk7Cit9CisKK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfY2VydF9tYXBfY29udGFpbmVyKHZvaWQpCit7CisgICAgcmV0dXJuIF9tYXBzOworfQorCitzdGF0aWMgbmV0c25tcF9jZXJ0ICoKK19uZXdfY2VydChjb25zdCBjaGFyICpkaXJuYW1lLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGNlcnRUeXBlLAorICAgICAgICAgIGludCBoYXNoVHlwZSwgY29uc3QgY2hhciAqZmluZ2VycHJpbnQsIGNvbnN0IGNoYXIgKmNvbW1vbl9uYW1lLAorICAgICAgICAgIGNvbnN0IGNoYXIgKnN1YmplY3QpCit7CisgICAgbmV0c25tcF9jZXJ0ICAgICpjZXJ0OworCisgICAgaWYgKChOVUxMID09IGRpcm5hbWUpIHx8IChOVUxMID09IGZpbGVuYW1lKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmFkIHBhcmFtZXRlcnMgdG8gX25ld19jZXJ0XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY2VydCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9jZXJ0KTsKKyAgICBpZiAoTlVMTCA9PSBjZXJ0KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNlcnRpZmljYXRlIGF0ICVzLyVzXG4iLAorICAgICAgICAgICAgICAgICBkaXJuYW1lLCBmaWxlbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHTVNHVCgoIjk6Y2VydDpzdHJ1Y3Q6bmV3IiwibmV3IGNlcnQgMHglI2x4IGZvciAlc1xuIiwgKHVfbG9uZyljZXJ0LAorICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpKTsKKworICAgIGNlcnQtPmluZm8uZGlyID0gc3RyZHVwKGRpcm5hbWUpOworICAgIGNlcnQtPmluZm8uZmlsZW5hbWUgPSBzdHJkdXAoZmlsZW5hbWUpOworICAgIGNlcnQtPmluZm8uYWxsb3dlZF91c2VzID0gTlNfQ0VSVF9SRU1PVEVfUEVFUjsKKyAgICBjZXJ0LT5pbmZvLnR5cGUgPSBjZXJ0VHlwZTsKKyAgICBpZiAoZmluZ2VycHJpbnQpIHsKKyAgICAgICAgY2VydC0+aGFzaF90eXBlID0gaGFzaFR5cGU7CisgICAgICAgIGNlcnQtPmZpbmdlcnByaW50ID0gc3RyZHVwKGZpbmdlcnByaW50KTsKKyAgICB9CisgICAgaWYgKGNvbW1vbl9uYW1lKQorICAgICAgICBjZXJ0LT5jb21tb25fbmFtZSA9IHN0cmR1cChjb21tb25fbmFtZSk7CisgICAgaWYgKHN1YmplY3QpCisgICAgICAgIGNlcnQtPnN1YmplY3QgPSBzdHJkdXAoc3ViamVjdCk7CisKKyAgICByZXR1cm4gY2VydDsKK30KKworc3RhdGljIG5ldHNubXBfa2V5ICoKK19uZXdfa2V5KGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIG5ldHNubXBfa2V5ICAgICprZXk7CisgICAgc3RydWN0IHN0YXQgICAgIGZzdGF0OworICAgIGNoYXIgICAgICAgICAgICBmbltTTk1QX01BWFBBVEhdOworCisgICAgaWYgKChOVUxMID09IGRpcm5hbWUpIHx8IChOVUxMID09IGZpbGVuYW1lKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmFkIHBhcmFtZXRlcnMgdG8gX25ld19rZXlcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiogY2hlY2sgZmlsZSBwZXJtaXNzaW9ucyAqLworICAgIHNucHJpbnRmKGZuLCBzaXplb2YoZm4pLCAiJXMvJXMiLCBkaXJuYW1lLCBmaWxlbmFtZSk7CisgICAgaWYgKHN0YXQoZm4sICZmc3RhdCkgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgIG5vdCBzdGF0ICVzXG4iLCBmbik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICgoZnN0YXQuc3RfbW9kZSAmIFNfSVJPVEgpIHx8IChmc3RhdC5zdF9tb2RlICYgU19JUk9USCkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInJlZnVzaW5nIHRvIHJlYWQgd29ybGQgcmVhZGFibGUgb3Igd3JpdGFibGUga2V5ICVzXG4iLCBmbik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGtleSA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9rZXkpOworICAgIGlmIChOVUxMID09IGtleSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Iga2V5IGF0ICVzLyVzXG4iLAorICAgICAgICAgICAgICAgICBkaXJuYW1lLCBmaWxlbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHTVNHVCgoImNlcnQ6a2V5OnN0cnVjdDpuZXciLCJuZXcga2V5IDB4JSNseCBmb3IgJXNcbiIsICh1X2xvbmcpa2V5LAorICAgICAgICAgICAgICAgZmlsZW5hbWUpKTsKKworICAgIGtleS0+aW5mby50eXBlID0gTlNfQ0VSVF9UWVBFX0tFWTsKKyAgICBrZXktPmluZm8uZGlyID0gc3RyZHVwKGRpcm5hbWUpOworICAgIGtleS0+aW5mby5maWxlbmFtZSA9IHN0cmR1cChmaWxlbmFtZSk7CisgICAga2V5LT5pbmZvLmFsbG93ZWRfdXNlcyA9IE5TX0NFUlRfSURFTlRJVFk7CisKKyAgICByZXR1cm4ga2V5OworfQorCit2b2lkCituZXRzbm1wX2NlcnRfZnJlZShuZXRzbm1wX2NlcnQgKmNlcnQpCit7CisgICAgaWYgKE5VTEwgPT0gY2VydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnN0cnVjdDpmcmVlIiwiZnJlZWluZyBjZXJ0IDB4JSNseCwgJXMgKGZwICVzOyBDTiAlcylcbiIsCisgICAgICAgICAgICAgICAodV9sb25nKWNlcnQsIGNlcnQtPmluZm8uZmlsZW5hbWUgPyBjZXJ0LT5pbmZvLmZpbGVuYW1lIDogIlVOSyIsCisgICAgICAgICAgICAgICBjZXJ0LT5maW5nZXJwcmludCA/IGNlcnQtPmZpbmdlcnByaW50IDogIlVOSyIsCisgICAgICAgICAgICAgICBjZXJ0LT5jb21tb25fbmFtZSA/IGNlcnQtPmNvbW1vbl9uYW1lIDogIlVOSyIpKTsKKworICAgIFNOTVBfRlJFRShjZXJ0LT5pbmZvLmRpcik7CisgICAgU05NUF9GUkVFKGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgIFNOTVBfRlJFRShjZXJ0LT5zdWJqZWN0KTsKKyAgICBTTk1QX0ZSRUUoY2VydC0+aXNzdWVyKTsKKyAgICBTTk1QX0ZSRUUoY2VydC0+ZmluZ2VycHJpbnQpOworICAgIFNOTVBfRlJFRShjZXJ0LT5jb21tb25fbmFtZSk7CisgICAgaWYgKGNlcnQtPm9jZXJ0KQorICAgICAgICBYNTA5X2ZyZWUoY2VydC0+b2NlcnQpOworICAgIGlmIChjZXJ0LT5rZXkgJiYgY2VydC0+a2V5LT5jZXJ0ID09IGNlcnQpCisgICAgICAgIGNlcnQtPmtleS0+Y2VydCA9IE5VTEw7CisKKyAgICBmcmVlKGNlcnQpOyAvKiBTTk1QX0ZSRUUgbm90IG5lZWRlZCBvbiBwYXJhbWV0ZXJzICovCit9CisKK3ZvaWQKK25ldHNubXBfa2V5X2ZyZWUobmV0c25tcF9rZXkgKmtleSkKK3sKKyAgICBpZiAoTlVMTCA9PSBrZXkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6a2V5OnN0cnVjdDpmcmVlIiwiZnJlZWluZyBrZXkgMHglI2x4LCAlc1xuIiwKKyAgICAgICAgICAgICAgICh1X2xvbmcpa2V5LCBrZXktPmluZm8uZmlsZW5hbWUgPyBrZXktPmluZm8uZmlsZW5hbWUgOiAiVU5LIikpOworCisgICAgU05NUF9GUkVFKGtleS0+aW5mby5kaXIpOworICAgIFNOTVBfRlJFRShrZXktPmluZm8uZmlsZW5hbWUpOworICAgIEVWUF9QS0VZX2ZyZWUoa2V5LT5va2V5KTsKKyAgICBpZiAoa2V5LT5jZXJ0ICYmIGtleS0+Y2VydC0+a2V5ID09IGtleSkKKyAgICAgICAga2V5LT5jZXJ0LT5rZXkgPSBOVUxMOworCisgICAgZnJlZShrZXkpOyAvKiBTTk1QX0ZSRUUgbm90IG5lZWRlZCBvbiBwYXJhbWV0ZXJzICovCit9CisKK3N0YXRpYyB2b2lkCitfY2VydF9mcmVlKG5ldHNubXBfY2VydCAqY2VydCwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX2NlcnRfZnJlZShjZXJ0KTsKK30KKworc3RhdGljIHZvaWQKK19rZXlfZnJlZShuZXRzbm1wX2tleSAqa2V5LCB2b2lkICpjb250ZXh0KQoreworICAgIG5ldHNubXBfa2V5X2ZyZWUoa2V5KTsKK30KKworc3RhdGljIGludAorX2NlcnRfY29tcGFyZShuZXRzbm1wX2NlcnQgKmxocywgbmV0c25tcF9jZXJ0ICpyaHMpCit7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzLT5maW5nZXJwcmludCAhPSBOVUxMKSAmJgorICAgICAgICAgICAgICAgICAgIChyaHMtPmZpbmdlcnByaW50ICE9IE5VTEwpKTsKKworICAgIC8qKiBpZ25vcmUgaGFzaCB0eXBlPyAqLworICAgIHJldHVybiBzdHJjbXAobGhzLT5maW5nZXJwcmludCwgcmhzLT5maW5nZXJwcmludCk7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X3BhdGhfY29tcGFyZShuZXRzbm1wX2NlcnRfY29tbW9uICpsaHMsIG5ldHNubXBfY2VydF9jb21tb24gKnJocykKK3sKKyAgICBpbnQgcmM7CisKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworICAgIAorICAgIC8qKiBkaXIgbmFtZSBmaXJzdCAqLworICAgIHJjID0gc3RyY21wKGxocy0+ZGlyLCByaHMtPmRpcik7CisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKiogZmlsZW5hbWUgKi8KKyAgICByZXR1cm4gc3RyY21wKGxocy0+ZmlsZW5hbWUsIHJocy0+ZmlsZW5hbWUpOworfQorCitzdGF0aWMgaW50CitfY2VydF9jbl9jb21wYXJlKG5ldHNubXBfY2VydCAqbGhzLCBuZXRzbm1wX2NlcnQgKnJocykKK3sKKyAgICBpbnQgcmM7CisgICAgY29uc3QgY2hhciAqbGhjbiwgKnJoY247CisKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworCisgICAgaWYgKE5VTEwgPT0gbGhzLT5jb21tb25fbmFtZSkKKyAgICAgICAgbGhjbiA9ICIiOworICAgIGVsc2UKKyAgICAgICAgbGhjbiA9IGxocy0+Y29tbW9uX25hbWU7CisgICAgaWYgKE5VTEwgPT0gcmhzLT5jb21tb25fbmFtZSkKKyAgICAgICAgcmhjbiA9ICIiOworICAgIGVsc2UKKyAgICAgICAgcmhjbiA9IHJocy0+Y29tbW9uX25hbWU7CisKKyAgICByYyA9IHN0cmNtcChsaGNuLCByaGNuKTsKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKworICAgIC8qKiBpbiBjYXNlIG9mIGVxdWFsIGNvbW1vbiBuYW1lcywgc3ViLXNvcnQgYnkgcGF0aCAqLworICAgIHJldHVybiBfY2VydF9wYXRoX2NvbXBhcmUoKG5ldHNubXBfY2VydF9jb21tb24qKWxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NlcnRfY29tbW9uKilyaHMpOworfQorCitzdGF0aWMgaW50CitfY2VydF9zbl9jb21wYXJlKG5ldHNubXBfY2VydCAqbGhzLCBuZXRzbm1wX2NlcnQgKnJocykKK3sKKyAgICBpbnQgcmM7CisgICAgY29uc3QgY2hhciAqbGhzbiwgKnJoc247CisKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworCisgICAgaWYgKE5VTEwgPT0gbGhzLT5zdWJqZWN0KQorICAgICAgICBsaHNuID0gIiI7CisgICAgZWxzZQorICAgICAgICBsaHNuID0gbGhzLT5zdWJqZWN0OworICAgIGlmIChOVUxMID09IHJocy0+c3ViamVjdCkKKyAgICAgICAgcmhzbiA9ICIiOworICAgIGVsc2UKKyAgICAgICAgcmhzbiA9IHJocy0+c3ViamVjdDsKKworICAgIHJjID0gc3RyY21wKGxoc24sIHJoc24pOworICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgLyoqIGluIGNhc2Ugb2YgZXF1YWwgY29tbW9uIG5hbWVzLCBzdWItc29ydCBieSBwYXRoICovCisgICAgcmV0dXJuIF9jZXJ0X3BhdGhfY29tcGFyZSgobmV0c25tcF9jZXJ0X2NvbW1vbiopbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY2VydF9jb21tb24qKXJocyk7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X2ZuX2NvbXBhcmUobmV0c25tcF9jZXJ0X2NvbW1vbiAqbGhzLCBuZXRzbm1wX2NlcnRfY29tbW9uICpyaHMpCit7CisgICAgaW50IHJjOworCisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKworICAgIHJjID0gc3RyY21wKGxocy0+ZmlsZW5hbWUsIHJocy0+ZmlsZW5hbWUpOworICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgLyoqIGluIGNhc2Ugb2YgZXF1YWwgY29tbW9uIG5hbWVzLCBzdWItc29ydCBieSBkaXIgKi8KKyAgICByZXR1cm4gc3RyY21wKGxocy0+ZGlyLCByaHMtPmRpcik7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X2ZuX25jb21wYXJlKG5ldHNubXBfY2VydF9jb21tb24gKmxocywgbmV0c25tcF9jZXJ0X2NvbW1vbiAqcmhzKQoreworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocy0+ZmlsZW5hbWUgIT0gTlVMTCkgJiYgKHJocy0+ZmlsZW5hbWUgIT0gTlVMTCkpOworCisgICAgcmV0dXJuIHN0cm5jbXAobGhzLT5maWxlbmFtZSwgcmhzLT5maWxlbmFtZSwgc3RybGVuKHJocy0+ZmlsZW5hbWUpKTsKK30KKworc3RhdGljIGludAorX2NlcnRfc25fbmNvbXBhcmUobmV0c25tcF9jZXJ0ICpsaHMsIG5ldHNubXBfY2VydCAqcmhzKQoreworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocy0+c3ViamVjdCAhPSBOVUxMKSAmJiAocmhzLT5zdWJqZWN0ICE9IE5VTEwpKTsKKworICAgIHJldHVybiBzdHJuY21wKGxocy0+c3ViamVjdCwgcmhzLT5zdWJqZWN0LCBzdHJsZW4ocmhzLT5zdWJqZWN0KSk7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X2V4dF90eXBlKGNvbnN0IGNoYXIgKmV4dCkKK3sKKyAgICBpbnQgcmMgPSBzZV9maW5kX3ZhbHVlX2luX3NsaXN0KCJjZXJ0X3R5cGVzIiwgZXh0KTsKKyAgICBpZiAoU0VfRE5FID09IHJjKQorICAgICAgICByZXR1cm4gTlNfQ0VSVF9UWVBFX1VOS05PV047CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitfdHlwZV9mcm9tX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIGNoYXIgICAgICpwb3M7CisgICAgaW50ICAgICAgIHR5cGU7CisKKyAgICBpZiAoTlVMTCA9PSBmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIE5TX0NFUlRfVFlQRV9VTktOT1dOOworCisgICAgcG9zID0gc3RycmNocihmaWxlbmFtZSwgJy4nKTsKKyAgICBpZiAoTlVMTCA9PSBwb3MpCisgICAgICAgIHJldHVybiBOU19DRVJUX1RZUEVfVU5LTk9XTjsKKworICAgIHR5cGUgPSBfY2VydF9leHRfdHlwZSgrK3Bvcyk7CisgICAgcmV0dXJuIHR5cGU7Cit9CisKKy8qCisgKiBmaWx0ZXIgZnVuY3Rpb25zOyByZXR1cm4gMSB0byBpbmNsdWRlIGZpbGUsIDAgdG8gZXhjbHVkZQorICovCitzdGF0aWMgaW50CitfY2VydF9jZXJ0X2ZpbHRlcihjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBpbnQgIGxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CisgICAgY29uc3QgY2hhciAqcG9zOworCisgICAgaWYgKGxlbiA8IDUpIC8qIHNob3J0ZXN0IG5hbWU6IHguWVlZICovCisgICAgICAgIHJldHVybiAwOworCisgICAgcG9zID0gc3RycmNocihmaWxlbmFtZSwgJy4nKTsKKyAgICBpZiAoTlVMTCA9PSBwb3MpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKF9jZXJ0X2V4dF90eXBlKCsrcG9zKSAhPSBOU19DRVJUX1RZUEVfVU5LTk9XTikKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogY2VydCBpbmRleCBmdW5jdGlvbnMKKyAqCisgKiBUaGlzIGNvZGUgbWltaWNzIHdoYXQgdGhlIG1pYiBpbmRleCBjb2RlIGRvZXMuIFRoZSBwZXJzaXN0ZW50CisgKiBkaXJlY3Rvcnkgd2lsbCBoYXZlIGEgc3ViZGlyZWN0b3J5IG5hbWVkICdjZXJ0X2luZGV4ZXMnLiBJbnNpZGUKKyAqIHRoaXMgZGlyZWN0b3J5IHdpbGwgYmUgc29tZSBudW1iZXIgb2YgZmlsZXMgd2l0aCBhc2NpaSBudW1lcmljCisgKiBuYW1lcyAoMCwgMSwgMiwgZXRjKS4gRWFjaCBvZiB0aGVzZSBmaWxlcyB3aWxsIHN0YXJ0IHdpdGggYSBsaW5lCisgKiB3aXRoIHRoZSB0ZXh0ICJESVIgIiwgZm9sbG93ZWQgYnkgYSBkaXJlY3RvcnkgbmFtZS4gVGhlIHJlc3Qgb2YgdGhlCisgKiBmaWxlIHdpbGwgYmUgY2VydGlmaWNhdGUgZmllbGRzIGFuZCB0aGUgY2VydGlmaWNhdGUgZmlsZSBuYW1lLCBvbmUKKyAqIGNlcnRpZmljYXRlIHBlciBsaW5lLiBUaGUgbnVtZXJpYyBmaWxlIG5hbWUgaXMgdGhlIGludGVnZXIgJ2RpcmVjdG9yeQorICogaW5kZXgnLgorICovCisKKy8qKgorICogX2NlcnRpbmRleF9hZGQKKyAqCisgKiBhZGQgYSBkaXJlY3RvcnkgbmFtZSB0byB0aGUgaW5kZXhlcworICovCitzdGF0aWMgaW50CitfY2VydGluZGV4X2FkZCggY29uc3QgY2hhciAqZGlybmFtZSwgaW50IGkgKQoreworICAgIGludCByYzsKKyAgICBjaGFyICpkaXJuYW1lX2NvcHkgPSBzdHJkdXAoZGlybmFtZSk7CisKKyAgICBpZiAoIGkgPT0gLTEgKSB7CisgICAgICAgIGludCBtYXggPSBzZV9maW5kX2ZyZWVfdmFsdWVfaW5fbGlzdChfY2VydGluZGV4ZXMpOworICAgICAgICBpZiAoU0VfRE5FID09IG1heCkKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpID0gbWF4OworICAgIH0KKworICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6YWRkIiwiZGlyICVzIGF0IGluZGV4ICVkXG4iLCBkaXJuYW1lLCBpICkpOworICAgIHJjID0gc2VfYWRkX3BhaXJfdG9fbGlzdCgmX2NlcnRpbmRleGVzLCBkaXJuYW1lX2NvcHksIGkpOworICAgIGlmIChTRV9PSyAhPSByYykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYWRkaW5nIGNlcnRpbmRleCBkaXJuYW1lIGZhaWxlZDsgIgorICAgICAgICAgICAgICAgICAiJWQgKCVzKSBub3QgYWRkZWRcbiIsIGksIGRpcm5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIGk7Cit9CisKKy8qKgorICogX2NlcnRpbmRleF9sb2FkCisgKgorICogcmVhZCBpbiB0aGUgZXhpc3RpbmcgaW5kZXhlcworICovCitzdGF0aWMgdm9pZAorX2NlcnRpbmRleGVzX2xvYWQoIHZvaWQgKQoreworICAgIERJUiAqZGlyOworICAgIHN0cnVjdCBkaXJlbnQgKmZpbGU7CisgICAgRklMRSAqZnA7CisgICAgY2hhciBmaWxlbmFtZVtTTk1QX01BWFBBVEhdLCBsaW5lWzMwMF07CisgICAgaW50ICBpOworICAgIGNoYXIgKmNwLCAqcG9zOworCisgICAgLyoKKyAgICAgKiBPcGVuIHRoZSBDRVJUIGluZGV4IGRpcmVjdG9yeSwgb3IgY3JlYXRlIGl0IChlbXB0eSkKKyAgICAgKi8KKyAgICBzbnByaW50ZiggZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy9jZXJ0X2luZGV4ZXMiLAorICAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSk7CisgICAgZmlsZW5hbWVbc2l6ZW9mKGZpbGVuYW1lKS0xXSA9IDA7CisgICAgZGlyID0gb3BlbmRpciggZmlsZW5hbWUgKTsKKyAgICBpZiAoIGRpciA9PSBOVUxMICkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmxvYWQiLAorICAgICAgICAgICAgICAgICAgICJjcmVhdGluZyBuZXcgY2VydF9pbmRleGVzIGRpcmVjdG9yeVxuIikpOworICAgICAgICBta2RpcmhpZXIoIGZpbGVuYW1lLCBORVRTTk1QX0FHRU5UX0RJUkVDVE9SWV9NT0RFLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogQ3JlYXRlIGEgbGlzdCBvZiB3aGljaCBkaXJlY3RvcnkgZWFjaCBmaWxlIHJlZmVycyB0bworICAgICAqLworICAgIHdoaWxlICgoZmlsZSA9IHJlYWRkaXIoIGRpciApKSkgeworICAgICAgICBpZiAoICFpc2RpZ2l0KDB4RkYgJiBmaWxlLT5kX25hbWVbMF0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGkgPSBhdG9pKCBmaWxlLT5kX25hbWUgKTsKKworICAgICAgICBzbnByaW50ZiggZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy9jZXJ0X2luZGV4ZXMvJWQiLAorICAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwgaSApOworICAgICAgICBmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gMDsKKyAgICAgICAgZnAgPSBmb3BlbiggZmlsZW5hbWUsICJyIiApOworICAgICAgICBpZiAoICFmcCApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6bG9hZCIsICJlcnJvciBvcGVuaW5nIGluZGV4ICglZClcbiIsIGkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGNwID0gZmdldHMoIGxpbmUsIHNpemVvZihsaW5lKSwgZnAgKTsKKyAgICAgICAgaWYgKCBjcCApIHsKKyAgICAgICAgICAgIGxpbmVbc3RybGVuKGxpbmUpLTFdID0gMDsKKyAgICAgICAgICAgIHBvcyA9IHN0cnJjaHIobGluZSwgJyAnKTsKKyAgICAgICAgICAgIGlmIChwb3MpCisgICAgICAgICAgICAgICAgKnBvcyA9ICdcMCc7CisgICAgICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6aW5kZXg6bG9hZCIsImFkZGluZyAoJWQpICVzXG4iLCBpLCBsaW5lKSk7CisgICAgICAgICAgICAodm9pZClfY2VydGluZGV4X2FkZCggbGluZSs0LCBpICk7ICAvKiBTa2lwICdESVIgJyAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpsb2FkIiwgIkVtcHR5IGluZGV4ICglZClcbiIsIGkpKTsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoIGZwICk7CisgICAgfQorICAgIGNsb3NlZGlyKCBkaXIgKTsKK30KKworLyoqCisgKiBfY2VydGluZGV4X2xvb2t1cAorICoKKyAqIGZpbmQgaW5kZXggZm9yIGEgZGlyZWN0b3J5CisgKi8KK3N0YXRpYyBjaGFyICoKK19jZXJ0aW5kZXhfbG9va3VwKCBjb25zdCBjaGFyICpkaXJuYW1lICkKK3sKKyAgICBpbnQgaTsKKyAgICBjaGFyIGZpbGVuYW1lW1NOTVBfTUFYUEFUSF07CisKKworICAgIGkgPSBzZV9maW5kX3ZhbHVlX2luX2xpc3QoX2NlcnRpbmRleGVzLCBkaXJuYW1lKTsKKyAgICBpZiAoU0VfRE5FID09IGkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmluZGV4Omxvb2t1cCIsIiVzIDogKG5vbmUpXG4iLCBkaXJuYW1lKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMvY2VydF9pbmRleGVzLyVkIiwKKyAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwgaSk7CisgICAgZmlsZW5hbWVbc2l6ZW9mKGZpbGVuYW1lKS0xXSA9IDA7CisgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpsb29rdXAiLCAiJXMgKCVkKSAlc1xuIiwgZGlybmFtZSwgaSwgZmlsZW5hbWUgKSk7CisgICAgcmV0dXJuIHN0cmR1cChmaWxlbmFtZSk7Cit9CisKK3N0YXRpYyBGSUxFICoKK19jZXJ0aW5kZXhfbmV3KCBjb25zdCBjaGFyICpkaXJuYW1lICkKK3sKKyAgICBGSUxFICpmcDsKKyAgICBjaGFyICBmaWxlbmFtZVtTTk1QX01BWFBBVEhdLCAqY3A7CisgICAgaW50ICAgaTsKKworICAgIGNwID0gX2NlcnRpbmRleF9sb29rdXAoIGRpcm5hbWUgKTsKKyAgICBpZiAoIWNwKSB7CisgICAgICAgIGkgID0gX2NlcnRpbmRleF9hZGQoIGRpcm5hbWUsIC0xICk7CisgICAgICAgIGlmICgtMSA9PSBpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7IC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworICAgICAgICBzbnByaW50ZiggZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy9jZXJ0X2luZGV4ZXMvJWQiLAorICAgICAgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksIGkgKTsKKyAgICAgICAgZmlsZW5hbWVbc2l6ZW9mKGZpbGVuYW1lKS0xXSA9IDA7CisgICAgICAgIGNwID0gZmlsZW5hbWU7CisgICAgfQorICAgIERFQlVHTVNHVCgoIjk6Y2VydDppbmRleDpuZXciLCAiJXMgKCVzKVxuIiwgZGlybmFtZSwgY3AgKSk7CisgICAgZnAgPSBmb3BlbiggY3AsICJ3IiApOworICAgIGlmIChmcCkKKyAgICAgICAgZnByaW50ZiggZnAsICJESVIgJXMgJWRcbiIsIGRpcm5hbWUsIENFUlRfSU5ERVhfRk9STUFUICk7CisgICAgZWxzZQorICAgICAgICBERUJVR01TR1RMKCgiY2VydDppbmRleCIsICJlcnJvciBvcGVuaW5nIG5ldyBpbmRleCBmaWxlICVzXG4iLCBkaXJuYW1lKSk7CisKKyAgICBpZiAoY3AgIT0gZmlsZW5hbWUpCisgICAgICAgIGZyZWUoY3ApOworCisgICAgcmV0dXJuIGZwOworfQorCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBjZXJ0aWZpY2F0ZSB1dGlsaXR5IGZ1bmN0aW9ucworICoKKyAqLworc3RhdGljIFg1MDkgKgorbmV0c25tcF9vY2VydF9nZXQobmV0c25tcF9jZXJ0ICpjZXJ0KQoreworICAgIEJJTyAgICAgICAgICAgICpjZXJ0YmlvOworICAgIFg1MDkgICAgICAgICAgICpvY2VydCA9IE5VTEw7CisgICAgRVZQX1BLRVkgICAgICAgKm9rZXkgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICBmaWxlW1NOTVBfTUFYUEFUSF07CisgICAgaW50ICAgICAgICAgICAgIGlzX2NhOworCisgICAgaWYgKE5VTEwgPT0gY2VydCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoY2VydC0+b2NlcnQpCisgICAgICAgIHJldHVybiBjZXJ0LT5vY2VydDsKKworICAgIGlmIChOU19DRVJUX1RZUEVfVU5LTk9XTiA9PSBjZXJ0LT5pbmZvLnR5cGUpIHsKKyAgICAgICAgY2VydC0+aW5mby50eXBlID0gX3R5cGVfZnJvbV9maWxlbmFtZShjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgaWYgKE5TX0NFUlRfVFlQRV9VTktOT1dOID09IGNlcnQtPmluZm8udHlwZSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gY2VydGlmaWNhdGUgdHlwZSAlZCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLnR5cGUsIGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBERUJVR01TR1QoKCI5OmNlcnQ6cmVhZCIsICJDaGVja2luZyBmaWxlICVzXG4iLCBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisKKyAgICBjZXJ0YmlvID0gQklPX25ldyhCSU9fc19maWxlKCkpOworICAgIGlmIChOVUxMID09IGNlcnRiaW8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIEJJT1xuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwiJXMvJXMiLCBjZXJ0LT5pbmZvLmRpciwgY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgaWYgKEJJT19yZWFkX2ZpbGVuYW1lKGNlcnRiaW8sIGZpbGUpIDw9MCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVhZGluZyBjZXJ0aWZpY2F0ZSAlcyBpbnRvIEJJT1xuIiwgZmlsZSk7CisgICAgICAgIEJJT192ZnJlZShjZXJ0YmlvKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKE5TX0NFUlRfVFlQRV9VTktOT1dOID09IGNlcnQtPmluZm8udHlwZSkgeworICAgICAgICBjaGFyICpwb3MgPSBzdHJyY2hyKGNlcnQtPmluZm8uZmlsZW5hbWUsICcuJyk7CisgICAgICAgIGlmIChOVUxMID09IHBvcykKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjZXJ0LT5pbmZvLnR5cGUgPSBfY2VydF9leHRfdHlwZSgrK3Bvcyk7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KGNlcnQtPmluZm8udHlwZSAhPSBOU19DRVJUX1RZUEVfVU5LTk9XTik7CisgICAgfQorCisgICAgc3dpdGNoIChjZXJ0LT5pbmZvLnR5cGUpIHsKKworICAgICAgICBjYXNlIE5TX0NFUlRfVFlQRV9ERVI6CisgICAgICAgICAgICBvY2VydCA9IGQyaV9YNTA5X2JpbyhjZXJ0YmlvLE5VTEwpOyAvKiBERVIvQVNOMSAqLworICAgICAgICAgICAgaWYgKE5VTEwgIT0gb2NlcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAodm9pZClCSU9fcmVzZXQoY2VydGJpbyk7CisgICAgICAgICAgICAvKiogRkFMTFRIUk9VR0g6IGNoZWNrIGZvciBQRU0gaWYgREVSIGRpZG4ndCB3b3JrICovCisKKyAgICAgICAgY2FzZSBOU19DRVJUX1RZUEVfUEVNOgorICAgICAgICAgICAgb2NlcnQgPSBQRU1fcmVhZF9iaW9fWDUwOV9BVVgoY2VydGJpbywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBvY2VydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChOU19DRVJUX1RZUEVfREVSID09IGNlcnQtPmluZm8udHlwZSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpyZWFkIiwgIkNoYW5naW5nIHR5cGUgZnJvbSBERVIgdG8gUEVNXG4iKSk7CisgICAgICAgICAgICAgICAgY2VydC0+aW5mby50eXBlID0gTlNfQ0VSVF9UWVBFX1BFTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qKiBjaGVjayBmb3IgcHJpdmF0ZSBrZXkgdG9vICovCisgICAgICAgICAgICBpZiAoTlVMTCA9PSBjZXJ0LT5rZXkpIHsKKyAgICAgICAgICAgICAgICAodm9pZClCSU9fcmVzZXQoY2VydGJpbyk7CisgICAgICAgICAgICAgICAgb2tleSA9ICBQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShjZXJ0YmlvLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoTlVMTCAhPSBva2V5KSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfa2V5ICAqa2V5OworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnJlYWQ6a2V5IiwgImZvdW5kIGtleSB3aXRoIGNlcnQgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBrZXkgPSBfbmV3X2tleShjZXJ0LT5pbmZvLmRpciwgY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChOVUxMICE9IGtleSkgeworICAgICAgICAgICAgICAgICAgICAgICAga2V5LT5va2V5ID0gb2tleTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSBDT05UQUlORVJfSU5TRVJUKF9rZXlzLCBrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpyZWFkOmtleTphZGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGluc2VydGluZyBrZXkgaW50byBjb250YWluZXJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2tleV9mcmVlKGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cmVhZDpwYXJ0bmVyIiwgIiVzIG1hdGNoIGZvdW5kIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktPmNlcnQgPSBjZXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmtleSA9IGtleTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmFsbG93ZWRfdXNlcyB8PSBOU19DRVJUX0lERU5USVRZOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAvKiBudWxsIHJldHVybiBmcm9tIHJlYWQgKi8KKyAgICAgICAgICAgIH0gLyogbnVsbCBrZXkgKi8KKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIENFUlRfUEtDUzEyX1NVUFBPUlRfTUFZQkVfTEFURVIKKyAgICAgICAgY2FzZSBOU19DRVJUX1RZUEVfUEtDUzEyOgorICAgICAgICAgICAgKHZvaWQpQklPX3Jlc2V0KGNlcnRiaW8pOworICAgICAgICAgICAgUEtDUzEyICpwMTIgPSBkMmlfUEtDUzEyX2JpbyhjZXJ0YmlvLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICggKE5VTEwgIT0gcDEyKSAmJiAoUEtDUzEyX3ZlcmlmeV9tYWMocDEyLCAiIiwgMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEtDUzEyX3ZlcmlmeV9tYWMocDEyLCBOVUxMLCAwKSkpCisgICAgICAgICAgICAgICAgUEtDUzEyX3BhcnNlKHAxMiwgIiIsIE5VTEwsICZjZXJ0LCBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBjZXJ0aWZpY2F0ZSB0eXBlICVkIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8udHlwZSwgY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgfQorCisgICAgQklPX3ZmcmVlKGNlcnRiaW8pOworCisgICAgaWYgKE5VTEwgPT0gb2NlcnQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHBhcnNpbmcgY2VydGlmaWNhdGUgZmlsZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNlcnQtPm9jZXJ0ID0gb2NlcnQ7CisgICAgLyoKKyAgICAgKiBYNTA5X2NoZWNrX2NhIHJldHVybiBjb2RlczoKKyAgICAgKiAwIG5vdCBhIENBCisgICAgICogMSBpcyBhIENBCisgICAgICogMiBiYXNpY0NvbnN0cmFpbnRzIGFic2VudCBzbyAibWF5YmUiIGEgQ0EKKyAgICAgKiAzIGJhc2ljQ29uc3RyYWludHMgYWJzZW50IGJ1dCBzZWxmIHNpZ25lZCBWMS4KKyAgICAgKiA0IGJhc2ljQ29uc3RyYWludHMgYWJzZW50IGJ1dCBrZXlVc2FnZSBwcmVzZW50IGFuZCBrZXlDZXJ0U2lnbiBhc3NlcnRlZC4KKyAgICAgKiA1IG91dGRhdGVkIE5ldHNjYXBlIENlcnRpZmljYXRlIFR5cGUgQ0EgZXh0ZW5zaW9uLgorICAgICAqLworICAgIGlzX2NhID0gWDUwOV9jaGVja19jYShvY2VydCk7CisgICAgaWYgKDEgPT0gaXNfY2EpCisgICAgICAgIGNlcnQtPmluZm8uYWxsb3dlZF91c2VzIHw9IE5TX0NFUlRfQ0E7CisKKyAgICBpZiAoTlVMTCA9PSBjZXJ0LT5zdWJqZWN0KSB7CisgICAgICAgIGNlcnQtPnN1YmplY3QgPSBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUob2NlcnQpLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDphZGQ6c3ViamVjdCIsICJzdWJqZWN0IG5hbWU6ICVzXG4iLCBjZXJ0LT5zdWJqZWN0KSk7CisgICAgfQorCisgICAgaWYgKE5VTEwgPT0gY2VydC0+aXNzdWVyKSB7CisgICAgICAgIGNlcnQtPmlzc3VlciA9IFg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKG9jZXJ0KSwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdHJjbXAoY2VydC0+c3ViamVjdCwgY2VydC0+aXNzdWVyKSA9PSAwKSB7CisgICAgICAgICAgICBmcmVlKGNlcnQtPmlzc3Vlcik7CisgICAgICAgICAgICBjZXJ0LT5pc3N1ZXIgPSBzdHJkdXAoInNlbGYtc2lnbmVkIik7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmFkZDppc3N1ZXIiLCAiQ0EgaXNzdWVyOiAlc1xuIiwgY2VydC0+aXNzdWVyKSk7CisgICAgfQorICAgIAorICAgIGlmIChOVUxMID09IGNlcnQtPmZpbmdlcnByaW50KSB7CisgICAgICAgIGNlcnQtPmhhc2hfdHlwZSA9IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9oYXNoX3R5cGUob2NlcnQpOworICAgICAgICBjZXJ0LT5maW5nZXJwcmludCA9CisgICAgICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQob2NlcnQsIGNlcnQtPmhhc2hfdHlwZSk7CisgICAgfQorICAgIAorICAgIGlmIChOVUxMID09IGNlcnQtPmNvbW1vbl9uYW1lKSB7CisgICAgICAgIGNlcnQtPmNvbW1vbl9uYW1lID1uZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfY29tbW9uTmFtZShvY2VydCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6YWRkOm5hbWUiLCIlc1xuIiwgY2VydC0+Y29tbW9uX25hbWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2NlcnQ7Cit9CisKK0VWUF9QS0VZICoKK25ldHNubXBfb2tleV9nZXQobmV0c25tcF9rZXkgICprZXkpCit7CisgICAgQklPICAgICAgICAgICAgKmtleWJpbzsKKyAgICBFVlBfUEtFWSAgICAgICAqb2tleTsKKyAgICBjaGFyICAgICAgICAgICAgZmlsZVtTTk1QX01BWFBBVEhdOworCisgICAgaWYgKE5VTEwgPT0ga2V5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChrZXktPm9rZXkpCisgICAgICAgIHJldHVybiBrZXktPm9rZXk7CisKKyAgICBzbnByaW50ZihmaWxlLCBzaXplb2YoZmlsZSksIiVzLyVzIiwga2V5LT5pbmZvLmRpciwga2V5LT5pbmZvLmZpbGVuYW1lKTsKKyAgICBERUJVR01TR1QoKCJjZXJ0OmtleTpyZWFkIiwgIkNoZWNraW5nIGZpbGUgJXNcbiIsIGtleS0+aW5mby5maWxlbmFtZSkpOworCisgICAga2V5YmlvID0gQklPX25ldyhCSU9fc19maWxlKCkpOworICAgIGlmIChOVUxMID09IGtleWJpbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgQklPXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKEJJT19yZWFkX2ZpbGVuYW1lKGtleWJpbywgZmlsZSkgPD0wKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWFkaW5nIGNlcnRpZmljYXRlICVzIGludG8gQklPXG4iLAorICAgICAgICAgICAgICAgICBrZXktPmluZm8uZmlsZW5hbWUpOworICAgICAgICBCSU9fdmZyZWUoa2V5YmlvKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgb2tleSA9IFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KGtleWJpbywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKE5VTEwgPT0gb2tleSkKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHBhcnNpbmcgY2VydGlmaWNhdGUgZmlsZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAga2V5LT5pbmZvLmZpbGVuYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGtleS0+b2tleSA9IG9rZXk7CisKKyAgICBCSU9fdmZyZWUoa2V5YmlvKTsKKworICAgIHJldHVybiBva2V5OworfQorCitzdGF0aWMgbmV0c25tcF9jZXJ0ICoKK19maW5kX2lzc3VlcihuZXRzbm1wX2NlcnQgKmNlcnQpCit7CisgICAgbmV0c25tcF92b2lkX2FycmF5ICptYXRjaGluZzsKKyAgICBuZXRzbm1wX2NlcnQgICAgICAgKmNhbmRpZGF0ZSwgKmlzc3VlciA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgICAgICBpOworCisgICAgaWYgKChOVUxMID09IGNlcnQpIHx8IChOVUxMID09IGNlcnQtPmlzc3VlcikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoqIGZpbmQgbWF0Y2hpbmcgc3ViamVjdCBuYW1lcyAqLworCisgICAgbWF0Y2hpbmcgPSBfY2VydF9maW5kX3N1YnNldF9zbihjZXJ0LT5pc3N1ZXIpOworICAgIGlmIChOVUxMID09IG1hdGNoaW5nKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qKiBjaGVjayBlYWNoIHRvIHNlZSBpZiBpdCdzIHRoZSBpc3N1ZXIgKi8KKyAgICBmb3IgKCBpPTA7IChOVUxMID09IGlzc3VlcikgJiYgKGkgPCBtYXRjaGluZy0+c2l6ZSk7ICsraSkgeworICAgICAgICAvKiogbWFrZSBzdXJlIHdlIGhhdmUgb2NlcnQgKi8KKyAgICAgICAgY2FuZGlkYXRlID0gKG5ldHNubXBfY2VydCopbWF0Y2hpbmctPmFycmF5W2ldOworICAgICAgICBpZiAoKE5VTEwgPT0gY2FuZGlkYXRlLT5vY2VydCkgJiYKKyAgICAgICAgICAgIChuZXRzbm1wX29jZXJ0X2dldChjYW5kaWRhdGUpID09IE5VTEwpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyoqIGNvbXBhcmUgKiovCisgICAgICAgIGlmIChuZXRzbm1wX29wZW5zc2xfY2VydF9pc3N1ZWRfYnkoY2FuZGlkYXRlLT5vY2VydCwgY2VydC0+b2NlcnQpKQorICAgICAgICAgICAgaXNzdWVyID0gY2FuZGlkYXRlOworICAgIH0gLyoqIGNhbmRpZGF0ZSBsb29wICovCisKKyAgICBmcmVlKG1hdGNoaW5nLT5hcnJheSk7CisgICAgZnJlZShtYXRjaGluZyk7CisKKyAgICByZXR1cm4gaXNzdWVyOworfQorCisjZGVmaW5lIENFUlRfTE9BRF9PSyAgICAgICAwCisjZGVmaW5lIENFUlRfTE9BRF9FUlIgICAgIC0xCisjZGVmaW5lIENFUlRfTE9BRF9QQVJUSUFMIC0yCitpbnQKK25ldHNubXBfY2VydF9sb2FkX3g1MDkobmV0c25tcF9jZXJ0ICpjZXJ0KQoreworICAgIGludCByYyA9IENFUlRfTE9BRF9PSzsKKworICAgIC8qKiBsb2FkIG9jZXJ0ICovCisgICAgaWYgKChOVUxMID09IGNlcnQtPm9jZXJ0KSAmJiAobmV0c25tcF9vY2VydF9nZXQoY2VydCkgPT0gTlVMTCkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpsb2FkOmVyciIsICJjb3VsZG4ndCBsb2FkIGNlcnQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgcmMgPSBDRVJUX0xPQURfRVJSOworICAgIH0KKworICAgIC8qKiBsb2FkIGtleSAqLworICAgIGlmICgoTlVMTCAhPSBjZXJ0LT5rZXkpICYmIChOVUxMID09IGNlcnQtPmtleS0+b2tleSkgJiYKKyAgICAgICAgKG5ldHNubXBfb2tleV9nZXQoY2VydC0+a2V5KSA9PSBOVUxMKSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmxvYWQ6ZXJyIiwgImNvdWxkbid0IGxvYWQga2V5IGZvciBjZXJ0ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgcmMgPSBDRVJUX0xPQURfRVJSOworICAgIH0KKworICAgIC8qKiBtYWtlIHN1cmUgd2UgaGF2ZSBjZXJ0IGNoYWluICovCisgICAgZm9yICg7IGNlcnQgJiYgY2VydC0+aXNzdWVyOyBjZXJ0ID0gY2VydC0+aXNzdWVyX2NlcnQpIHsKKyAgICAgICAgLyoqIHNraXAgc2VsZiBzaWduZWQgKi8KKyAgICAgICAgaWYgKHN0cmNtcChjZXJ0LT5pc3N1ZXIsICJzZWxmLXNpZ25lZCIpID09IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KGNlcnQtPmlzc3Vlcl9jZXJ0ID09IE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyoqIGdldCBpc3N1ZXIgY2VydCAqLworICAgICAgICBpZiAoTlVMTCA9PSBjZXJ0LT5pc3N1ZXJfY2VydCkgeworICAgICAgICAgICAgY2VydC0+aXNzdWVyX2NlcnQgPSAgX2ZpbmRfaXNzdWVyKGNlcnQpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gY2VydC0+aXNzdWVyX2NlcnQpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmxvYWQ6d2FybiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgbG9hZCBDQSBjaGFpbiBmb3IgY2VydCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgICAgICAgICByYyA9IENFUlRfTE9BRF9QQVJUSUFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qKiBnZXQgaXNzdWVyIG9jZXJ0ICovCisgICAgICAgIGlmICgoTlVMTCA9PSBjZXJ0LT5pc3N1ZXJfY2VydC0+b2NlcnQpICYmCisgICAgICAgICAgICAobmV0c25tcF9vY2VydF9nZXQoY2VydC0+aXNzdWVyX2NlcnQpID09IE5VTEwpKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmxvYWQ6d2FybiIsICJjb3VsZG4ndCBsb2FkIGNlcnQgY2hhaW4gZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgICAgICByYyA9IENFUlRfTE9BRF9QQVJUSUFMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IC8qIGNlcnQgQ0EgZm9yIGxvb3AgKi8KKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK19maW5kX3BhcnRuZXIobmV0c25tcF9jZXJ0ICpjZXJ0LCBuZXRzbm1wX2tleSAqa2V5KQoreworICAgIG5ldHNubXBfdm9pZF9hcnJheSAqbWF0Y2hpbmcgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICAgICAgZmlsZW5hbWVbTkFNRV9NQVhdLCAqcG9zOworCisgICAgaWYgKChjZXJ0ICYmIGtleSkgfHwgKCFjZXJ0ICYmICEga2V5KSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnBhcnRuZXIiLCAiYmFkIHBhcmFtZXRlcnMgc2VhcmNoaW5nIGZvciBwYXJ0bmVyXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZihrZXkpIHsKKyAgICAgICAgaWYgKGtleS0+Y2VydCkgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpwYXJ0bmVyIiwgImtleSBhbHJlYWR5IGhhcyBwYXJ0bmVyXG4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnBhcnRuZXIiLCAiJXMgbG9va2luZyBmb3IgcGFydG5lciBuZWFyICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGtleS0+aW5mby5maWxlbmFtZSwga2V5LT5pbmZvLmRpcikpOworICAgICAgICBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzIiwga2V5LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgcG9zID0gc3RycmNocihmaWxlbmFtZSwgJy4nKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcG9zKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAqcG9zID0gMDsKKworICAgICAgICBtYXRjaGluZyA9IF9jZXJ0X2ZpbmRfc3Vic2V0X2ZuKCBmaWxlbmFtZSwga2V5LT5pbmZvLmRpciApOworICAgICAgICBpZiAoIW1hdGNoaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoMSA9PSBtYXRjaGluZy0+c2l6ZSkgeworICAgICAgICAgICAgY2VydCA9IChuZXRzbm1wX2NlcnQqKW1hdGNoaW5nLT5hcnJheVswXTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IGNlcnQtPmtleSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cGFydG5lciIsICIlcyBtYXRjaCBmb3VuZCFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgICAgICAgICAga2V5LT5jZXJ0ID0gY2VydDsKKyAgICAgICAgICAgICAgICBjZXJ0LT5rZXkgPSBrZXk7CisgICAgICAgICAgICAgICAgY2VydC0+aW5mby5hbGxvd2VkX3VzZXMgfD0gTlNfQ0VSVF9JREVOVElUWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNlcnQtPmtleSAhPSBrZXkpCisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIG1hdGNoaW5nIGNlcnQgYWxyZWFkeSBoYXMgcGFydG5lclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnBhcnRuZXIiLCAiJXMgbWF0Y2hlcyBtdWx0aXBsZSBjZXJ0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgfQorICAgIGVsc2UgaWYoY2VydCkgeworICAgICAgICBpZiAoY2VydC0+a2V5KSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnBhcnRuZXIiLCAiY2VydCBhbHJlYWR5IGhhcyBwYXJ0bmVyXG4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnBhcnRuZXIiLCAiJXMgbG9va2luZyBmb3IgcGFydG5lclxuIiwKKyAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgIHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMiLCBjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgcG9zID0gc3RycmNocihmaWxlbmFtZSwgJy4nKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcG9zKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAqcG9zID0gMDsKKworICAgICAgICBtYXRjaGluZyA9IF9rZXlfZmluZF9zdWJzZXQoZmlsZW5hbWUpOworICAgICAgICBpZiAoIW1hdGNoaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoMSA9PSBtYXRjaGluZy0+c2l6ZSkgeworICAgICAgICAgICAga2V5ID0gKG5ldHNubXBfa2V5KiltYXRjaGluZy0+YXJyYXlbMF07CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBrZXktPmNlcnQpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnBhcnRuZXIiLCAiJXMgZm91bmQhXG4iLCBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgICAgICAgICAga2V5LT5jZXJ0ID0gY2VydDsKKyAgICAgICAgICAgICAgICBjZXJ0LT5rZXkgPSBrZXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChrZXktPmNlcnQgIT0gY2VydCkKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMgbWF0Y2hpbmcga2V5IGFscmVhZHkgaGFzIHBhcnRuZXJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpwYXJ0bmVyIiwgIiVzIG1hdGNoZXMgbXVsdGlwbGUga2V5c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgIH0KKyAgICAKKyAgICBpZiAobWF0Y2hpbmcpIHsKKyAgICAgICAgZnJlZShtYXRjaGluZy0+YXJyYXkpOworICAgICAgICBmcmVlKG1hdGNoaW5nKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK19hZGRfY2VydGZpbGUoY29uc3QgY2hhciogZGlybmFtZSwgY29uc3QgY2hhciogZmlsZW5hbWUsIEZJTEUgKmluZGV4KQoreworICAgIFg1MDkgICAgICAgICAqb2NlcnQ7CisgICAgRVZQX1BLRVkgICAgICpva2V5OworICAgIG5ldHNubXBfY2VydCAqY2VydCA9IE5VTEw7CisgICAgbmV0c25tcF9rZXkgICprZXkgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgY2VydGZpbGVbU05NUF9NQVhQQVRIXTsKKyAgICBpbnQgICAgICAgICAgIHR5cGU7CisKKyAgICBpZiAoKChjb25zdCB2b2lkKilOVUxMID09IGRpcm5hbWUpIHx8IChOVUxMID09IGZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgdHlwZSA9IF90eXBlX2Zyb21fZmlsZW5hbWUoZmlsZW5hbWUpOworICAgIG5ldHNubXBfYXNzZXJ0KHR5cGUgIT0gTlNfQ0VSVF9UWVBFX1VOS05PV04pOworCisgICAgc25wcmludGYoY2VydGZpbGUsIHNpemVvZihjZXJ0ZmlsZSksIiVzLyVzIiwgZGlybmFtZSwgZmlsZW5hbWUpOworCisgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmZpbGU6YWRkIiwgIkNoZWNraW5nIGZpbGU6ICVzICh0eXBlICVkKVxuIiwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICB0eXBlKSk7CisKKyAgICBpZiAoTlNfQ0VSVF9UWVBFX0tFWSA9PSB0eXBlKSB7CisgICAgICAgIGtleSA9IF9uZXdfa2V5KGRpcm5hbWUsIGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKE5VTEwgPT0ga2V5KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBva2V5ID0gbmV0c25tcF9va2V5X2dldChrZXkpOworICAgICAgICBpZiAoTlVMTCA9PSBva2V5KSB7CisgICAgICAgICAgICBuZXRzbm1wX2tleV9mcmVlKGtleSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga2V5LT5va2V5ID0gb2tleTsKKyAgICAgICAgaWYgKC0xID09IENPTlRBSU5FUl9JTlNFUlQoX2tleXMsIGtleSkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6a2V5OmZpbGU6YWRkOmVyciIsCisgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBpbnNlcnRpbmcga2V5IGludG8gY29udGFpbmVyXG4iKSk7CisgICAgICAgICAgICBuZXRzbm1wX2tleV9mcmVlKGtleSk7CisgICAgICAgICAgICBrZXkgPSBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBjZXJ0ID0gX25ld19jZXJ0KGRpcm5hbWUsIGZpbGVuYW1lLCB0eXBlLCAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICAgIGlmIChOVUxMID09IGNlcnQpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIG9jZXJ0ID0gbmV0c25tcF9vY2VydF9nZXQoY2VydCk7CisgICAgICAgIGlmIChOVUxMID09IG9jZXJ0KSB7CisgICAgICAgICAgICBuZXRzbm1wX2NlcnRfZnJlZShjZXJ0KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBjZXJ0LT5vY2VydCA9IG9jZXJ0OworICAgICAgICBpZiAoLTEgPT0gQ09OVEFJTkVSX0lOU0VSVChfY2VydHMsIGNlcnQpKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbGU6YWRkOmVyciIsCisgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBpbnNlcnRpbmcgY2VydCBpbnRvIGNvbnRhaW5lclxuIikpOworICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2ZyZWUoY2VydCk7CisgICAgICAgICAgICBjZXJ0ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKE5VTEwgPT0gY2VydCkgJiYgKE5VTEwgPT0ga2V5KSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbGU6YWRkOmZhaWx1cmUiLCAiZm9yICVzXG4iLCBjZXJ0ZmlsZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluZGV4KSB7CisgICAgICAgIC8qKiBmaWxlbmFtZSA9IE5BTUVfTUFYID0gMjU1ICovCisgICAgICAgIC8qKiBmaW5nZXJwcmludCA9IDYwICovCisgICAgICAgIC8qKiBjb21tb24gbmFtZSAvIENOICA9IDY0ICovCisgICAgICAgIGlmIChjZXJ0KQorICAgICAgICAgICAgZnByaW50ZihpbmRleCwgImM6JXMgJWQgJWQgJXMgJyVzJyAnJXMnXG4iLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby50eXBlLCBjZXJ0LT5oYXNoX3R5cGUsIGNlcnQtPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICBjZXJ0LT5jb21tb25fbmFtZSwgY2VydC0+c3ViamVjdCk7CisgICAgICAgIGVsc2UgaWYgKGtleSkKKyAgICAgICAgICAgIGZwcmludGYoaW5kZXgsICJrOiVzXG4iLCBmaWxlbmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X3JlYWRfaW5kZXgoY29uc3QgY2hhciAqZGlybmFtZSwgc3RydWN0IHN0YXQgKmRpcnN0YXQpCit7CisgICAgRklMRSAgICAgICAgICAgKmluZGV4OworICAgIGNoYXIgICAgICAgICAgICppZHhuYW1lLCAqcG9zOworICAgIHN0cnVjdCBzdGF0ICAgICBpZHhfc3RhdDsKKyAgICBjaGFyICAgICAgICAgICAgdG1wc3RyW1NOTVBfTUFYUEFUSCArIDVdLCBmaWxlbmFtZVtOQU1FX01BWF07CisgICAgY2hhciAgICAgICAgICAgIGZpbmdlcnByaW50WzYwKzFdLCBjb21tb25fbmFtZVs2NCsxXSwgdHlwZV9zdHJbMTVdOworICAgIGNoYXIgICAgICAgICAgICBzdWJqZWN0W1NOTVBfTUFYQlVGX1NNQUxMXSwgaGFzaF9zdHJbMTVdOworICAgIGludCAgICAgICAgICAgICBjb3VudCA9IDAsIHR5cGUsIGhhc2gsIHZlcnNpb247CisgICAgbmV0c25tcF9jZXJ0ICAgICpjZXJ0OworICAgIG5ldHNubXBfa2V5ICAgICAqa2V5OworICAgIG5ldHNubXBfY29udGFpbmVyICpuZXdlciwgKmZvdW5kOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkaXJuYW1lKTsKKworICAgIGlkeG5hbWUgPSBfY2VydGluZGV4X2xvb2t1cCggZGlybmFtZSApOworICAgIGlmIChOVUxMID09IGlkeG5hbWUpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpwYXJzZSIsICJubyBpbmRleCBmb3IgY2VydCBkaXJlY3RvcnlcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogc2VlIGlmIGRpcmVjdG9yeSBoYXMgYmVlbiBtb2RpZmllZCBtb3JlIHJlY2VudGx5IHRoYW4gdGhlIGluZGV4CisgICAgICovCisgICAgaWYgKHN0YXQoaWR4bmFtZSwgJmlkeF9zdGF0KSAhPSAwKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6cGFyc2UiLCAiZXJyb3IgZ2V0dGluZyBpbmRleCBmaWxlIHN0YXRzXG4iKSk7CisgICAgICAgIFNOTVBfRlJFRShpZHhuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2lmIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKGN5Z3dpbikpCisgICAgLyogRm9yIFdpbjMyIHBsYXRmb3JtcywgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBtYWludGFpbiBhIGxhc3QgbW9kaWZpY2F0aW9uCisgICAgICogZGF0ZSB0aGF0IHdlIGNhbiBjb21wYXJlIHdpdGggdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSAuaW5kZXggZmlsZS4KKyAgICAgKi8KKyNlbHNlCisgICAgaWYgKGRpcnN0YXQtPnN0X210aW1lID49IGlkeF9zdGF0LnN0X210aW1lKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6cGFyc2UiLCAiSW5kZXggb3V0ZGF0ZWQ7IGRpciBtb2RpZmllZFxuIikpOworICAgICAgICBTTk1QX0ZSRUUoaWR4bmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogZGlyIG10aW1lIGRvZXNuJ3QgY2hhbmdlIHdoZW4gZmlsZXMgYXJlIHRvdWNoZWQsIHNvIHdlIG5lZWQgdG8gY2hlY2sKKyAgICAgKiBlYWNoIGZpbGUgYWdhaW5zdCB0aGUgaW5kZXggaW4gY2FzZSBhIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQuCisgICAgICovCisgICAgbmV3ZXIgPQorICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZF9zb21lKE5VTEwsIGRpcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfZGlyZWN0b3J5X2ZpbHRlciopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RpbWVfZmlsdGVyLCh2b2lkKikmaWR4X3N0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9ESVJfTlNGSUxFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RJUl9OU0ZJTEVfU1RBVFMpOworICAgIGlmIChuZXdlcikgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OnBhcnNlIiwgIkluZGV4IG91dGRhdGVkOyBmaWxlcyBtb2RpZmllZFxuIikpOworICAgICAgICBDT05UQUlORVJfRlJFRV9BTEwobmV3ZXIsIE5VTEwpOworICAgICAgICBDT05UQUlORVJfRlJFRShuZXdlcik7CisgICAgICAgIFNOTVBfRlJFRShpZHhuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6cGFyc2UiLCAiVGhlIGluZGV4IGZvciAlcyBsb29rcyBnb29kXG4iLCBkaXJuYW1lKSk7CisKKyAgICBpbmRleCA9IGZvcGVuKGlkeG5hbWUsICJyIik7CisgICAgaWYgKE5VTEwgPT0gaW5kZXgpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNlcnQ6aW5kZXg6cGFyc2UgY2FuJ3Qgb3BlbiBpbmRleCBmb3IgJXNcbiIsCisgICAgICAgICAgICBkaXJuYW1lKTsKKyAgICAgICAgU05NUF9GUkVFKGlkeG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZm91bmQgPSBfZ2V0X2NlcnRfY29udGFpbmVyKGlkeG5hbWUpOworCisgICAgLyoKKyAgICAgKiBjaGVjayBpbmRleCBmb3JtYXQgdmVyc2lvbgorICAgICAqLworICAgIGZnZXRzKHRtcHN0ciwgc2l6ZW9mKHRtcHN0ciksIGluZGV4KTsKKyAgICBwb3MgPSBzdHJyY2hyKHRtcHN0ciwgJyAnKTsKKyAgICBpZiAocG9zKSB7CisgICAgICAgICsrcG9zOworICAgICAgICB2ZXJzaW9uID0gYXRvaShwb3MpOworICAgIH0KKyAgICBpZiAoKE5VTEwgPT0gcG9zKSB8fCAodmVyc2lvbiAhPSBDRVJUX0lOREVYX0ZPUk1BVCkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDphZGQiLCAibWlzc2luZyBvciB3cm9uZyBpbmRleCBmb3JtYXQhXG4iKSk7CisgICAgICAgIGZjbG9zZShpbmRleCk7CisgICAgICAgIFNOTVBfRlJFRShpZHhuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoTlVMTCA9PSBmZ2V0cyh0bXBzdHIsIHNpemVvZih0bXBzdHIpLCBpbmRleCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoJ2MnID09IHRtcHN0clswXSkgeworICAgICAgICAgICAgcG9zID0gJnRtcHN0clsyXTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSAocG9zPWNvcHlfbndvcmQocG9zLCBmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSkpKSB8fAorICAgICAgICAgICAgICAgIChOVUxMID09IChwb3M9Y29weV9ud29yZChwb3MsIHR5cGVfc3RyLCBzaXplb2YodHlwZV9zdHIpKSkpIHx8CisgICAgICAgICAgICAgICAgKE5VTEwgPT0gKHBvcz1jb3B5X253b3JkKHBvcywgaGFzaF9zdHIsIHNpemVvZihoYXNoX3N0cikpKSkgfHwKKyAgICAgICAgICAgICAgICAoTlVMTCA9PSAocG9zPWNvcHlfbndvcmQocG9zLCBmaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGZpbmdlcnByaW50KSkpKSB8fAorICAgICAgICAgICAgICAgIChOVUxMID09IChwb3M9Y29weV9ud29yZChwb3MsIGNvbW1vbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjb21tb25fbmFtZSkpKSkgfHwKKyAgICAgICAgICAgICAgICAoTlVMTCAhPSBjb3B5X253b3JkKHBvcywgc3ViamVjdCwgc2l6ZW9mKHN1YmplY3QpKSkpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiX2NlcnRfcmVhZF9pbmRleDogZXJyb3IgcGFyc2luZyBsaW5lOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0bXBzdHIpOworICAgICAgICAgICAgICAgIGNvdW50ID0gLTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0eXBlID0gYXRvaSh0eXBlX3N0cik7CisgICAgICAgICAgICBoYXNoID0gYXRvaShoYXNoX3N0cik7CisgICAgICAgICAgICBjZXJ0ID0gKHZvaWQqKV9uZXdfY2VydChkaXJuYW1lLCBmaWxlbmFtZSwgdHlwZSwgaGFzaCwgZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25fbmFtZSwgc3ViamVjdCk7CisgICAgICAgICAgICBpZiAoY2VydCAmJiAwID09IENPTlRBSU5FUl9JTlNFUlQoZm91bmQsIGNlcnQpKQorICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmFkZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgaW5zZXJ0aW5nIGNlcnQgaW50byBjb250YWluZXJcbiIpKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfZnJlZShjZXJ0KTsKKyAgICAgICAgICAgICAgICBjZXJ0ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgnaycgPT0gdG1wc3RyWzBdKSB7CisgICAgICAgICAgICBpZiAoTlVMTCAhPSBjb3B5X253b3JkKCZ0bXBzdHJbMl0sIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJfY2VydF9yZWFkX2luZGV4OiBlcnJvciBwYXJzaW5nIGxpbmUgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHRtcHN0cik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZXkgPSBfbmV3X2tleShkaXJuYW1lLCBmaWxlbmFtZSk7CisgICAgICAgICAgICBpZiAoa2V5ICYmIDAgPT0gQ09OVEFJTkVSX0lOU0VSVChfa2V5cywga2V5KSkKKyAgICAgICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDphZGQ6a2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBpbnNlcnRpbmcga2V5IGludG8gY29udGFpbmVyXG4iKSk7CisgICAgICAgICAgICAgICAgbmV0c25tcF9rZXlfZnJlZShrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbGluZSBpbiBjZXJ0IGluZGV4IGZvciAlc1xuIiwgZGlybmFtZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0gLyogd2hpbGUgKi8KKyAgICBmY2xvc2UoaW5kZXgpOworICAgIFNOTVBfRlJFRShpZHhuYW1lKTsKKworICAgIGlmIChjb3VudCA+IDApIHsKKyAgICAgICAgbmV0c25tcF9pdGVyYXRvciAgKml0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihmb3VuZCk7CisgICAgICAgIGlmIChOVUxMID09IGl0cikgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIGZvdW5kIGNlcnRzXG4iKTsKKyAgICAgICAgICAgIGNvdW50ID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjZXJ0ID0gSVRFUkFUT1JfRklSU1QoaXRyKTsKKyAgICAgICAgICAgIGZvciggOyBjZXJ0OyBjZXJ0ID0gSVRFUkFUT1JfTkVYVChpdHIpKQorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoX2NlcnRzLCBjZXJ0KTsKKyAgICAgICAgICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6cGFyc2UiLCJhZGRlZCAlZCBjZXJ0cyBmcm9tIGluZGV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIENPTlRBSU5FUl9GUkVFX0FMTChmb3VuZCwgTlVMTCk7CisgICAgQ09OVEFJTkVSX0ZSRUUoZm91bmQpOworCisgICAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50CitfYWRkX2NlcnRkaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKyAgICBGSUxFICAgICAgICAgICAqaW5kZXg7CisgICAgY2hhciAgICAgICAgICAgKmZpbGU7CisgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMDsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY2VydF9jb250YWluZXI7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKml0OworICAgIHN0cnVjdCBzdGF0ICAgICBzdGF0YnVmOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkaXJuYW1lKTsKKworICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkaXI6YWRkIiwgIiBjb25maWcgZGlyOiAlc1xuIiwgZGlybmFtZSApKTsKKworICAgIGlmIChzdGF0KGRpcm5hbWUsICZzdGF0YnVmKSAhPSAwKSB7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkaXI6YWRkIiwgIiBkaXIgbm90IHByZXNlbnQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGRpcm5hbWUgKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjaWZkZWYgU19JU0RJUgorICAgIGlmICghU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKSB7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkaXI6YWRkIiwgIiBub3QgYSBkaXI6ICVzXG4iLCBkaXJuYW1lICkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmRpciIsICJTY2FubmluZyBkaXJlY3RvcnkgJXNcbiIsIGRpcm5hbWUpKTsKKworICAgIC8qCisgICAgICogbG9vayBmb3IgZXhpc3RpbmcgaW5kZXgKKyAgICAgKi8KKyAgICBjb3VudCA9IF9jZXJ0X3JlYWRfaW5kZXgoZGlybmFtZSwgJnN0YXRidWYpOworICAgIGlmIChjb3VudCA+PSAwKQorICAgICAgICByZXR1cm4gY291bnQ7CisKKyAgICBpbmRleCA9IF9jZXJ0aW5kZXhfbmV3KCBkaXJuYW1lICk7CisgICAgaWYgKE5VTEwgPT0gaW5kZXgpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmluZGV4OmRpciIsCisgICAgICAgICAgICAgICAgICAgICJlcnJvciBvcGVuaW5nIGluZGV4IGZvciBjZXJ0IGRpcmVjdG9yeVxuIikpOworICAgICAgICBERUJVR01TR1RMKCgiY2VydDppbmRleCIsICJjb3VsZCBub3Qgb3BlbiBjZXJ0aWZpY2F0ZSBpbmRleCBmaWxlXG4iKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpbmRleCB3YXMgbWlzc2luZywgb3V0IG9mIGRhdGUgb3IgYmFkLiByZXNjYW4gZGlyZWN0b3J5LgorICAgICAqLworICAgIGNlcnRfY29udGFpbmVyID0KKyAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX3JlYWRfc29tZShOVUxMLCBkaXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2RpcmVjdG9yeV9maWx0ZXIqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfY2VydF9jZXJ0X2ZpbHRlciwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RJUl9SRUxBVElWRV9QQVRIIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RJUl9FTVBUWV9PSyApOworICAgIGlmIChOVUxMID09IGNlcnRfY29udGFpbmVyKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6ZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBmb3IgY2VydCBmaWxlc1xuIikpOworICAgICAgICBnb3RvIGVycl9pbmRleDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGl0ZXJhdGUgdGhyb3VnaCB0aGUgZm91bmQgZmlsZXMgYW5kIGFkZCB0aGVtIHRvIGluZGV4CisgICAgICovCisgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1IoY2VydF9jb250YWluZXIpOworICAgIGlmIChOVUxMID09IGl0KSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6ZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIGl0ZXJhdG9yIGZvciBjZXJ0IGZpbGVzXG4iKSk7CisgICAgICAgIGdvdG8gZXJyX2NvbnRhaW5lcjsKKyAgICB9CisKKyAgICBmb3IgKGZpbGUgPSBJVEVSQVRPUl9GSVJTVChpdCk7IGZpbGU7IGZpbGUgPSBJVEVSQVRPUl9ORVhUKGl0KSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmRpciIsICJhZGRpbmcgJXMgdG8gaW5kZXhcbiIsIGZpbGUpKTsKKyAgICAgICAgaWYgKCAwID09IF9hZGRfY2VydGZpbGUoIGRpcm5hbWUsIGZpbGUsIGluZGV4ICkpCisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmRpciIsICJlcnJvciBhZGRpbmcgJXMgdG8gaW5kZXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjbGVhbiB1cCBhbmQgcmV0dXJuCisgICAgICovCisgICAgSVRFUkFUT1JfUkVMRUFTRShpdCk7CisKKyAgZXJyX2NvbnRhaW5lcjoKKyAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfZnJlZShjZXJ0X2NvbnRhaW5lcik7CisKKyAgZXJyX2luZGV4OgorICAgIGlmIChpbmRleCkKKyAgICAgICAgZmNsb3NlKGluZGV4KTsKKworICAgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQKK19jZXJ0X2luZGV4ZXNfbG9hZCh2b2lkKQoreworICAgIGNvbnN0IGNoYXIgICAgICpjb25mcGF0aDsKKyAgICBjaGFyICAgICAgICAgICAqY29uZnBhdGhfY29weSwgKmRpciwgKnN0ID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAgY2VydGRpcltTTk1QX01BWFBBVEhdOworICAgIGNvbnN0IGNoYXIgICAgICpzdWJkaXJzW10gPSB7IE5VTEwsICJjYS1jZXJ0cyIsICJjZXJ0cyIsICJwcml2YXRlIiwgTlVMTCB9OworICAgIGludCAgICAgICAgICAgICBpID0gMDsKKworICAgIC8qCisgICAgICogbG9hZCBpbmRleGVzIGZyb20gcGVyc2lzdGVudCBkaXIKKyAgICAgKi8KKyAgICBfY2VydGluZGV4ZXNfbG9hZCgpOworCisgICAgLyoKKyAgICAgKiBkdXBsaWNhdGUgcGF0aCBidWlsZGluZyBmcm9tIHJlYWRfY29uZmlnX2ZpbGVzX29mX3R5cGUoKSBpbgorICAgICAqIHJlYWRfY29uZmlnLmMuIFRoYXQgaXMsIHVzZSBTTk1QQ09ORlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYKKyAgICAgKiBpdCBpcyBkZWZpbmVkLCBvdGhlcndpc2UgdXNlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LgorICAgICAqLworICAgIGNvbmZwYXRoID0gbmV0c25tcF9nZXRlbnYoIlNOTVBDT05GUEFUSCIpOworICAgIGlmIChOVUxMID09IGNvbmZwYXRoKQorICAgICAgICBjb25mcGF0aCA9IGdldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeSgpOworCisgICAgc3ViZGlyc1swXSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DRVJUX0VYVFJBX1NVQkRJUik7CisgICAgY29uZnBhdGhfY29weSA9IHN0cmR1cChjb25mcGF0aCk7CisgICAgZm9yICggZGlyID0gc3RydG9rX3IoY29uZnBhdGhfY29weSwgRU5WX1NFUEFSQVRPUiwgJnN0KTsKKyAgICAgICAgICBkaXI7IGRpciA9IHN0cnRva19yKE5VTEwsIEVOVl9TRVBBUkFUT1IsICZzdCkpIHsKKworICAgICAgICBpID0gKE5VTEwgPT0gc3ViZGlyc1swXSkgPyAxIDogMDsKKyAgICAgICAgZm9yICggOyBzdWJkaXJzW2ldIDsgKytpICkgeworICAgICAgICAgICAgLyoqIGNoZWNrIHRscyBzdWJkaXIgKi8KKyAgICAgICAgICAgIHNucHJpbnRmKGNlcnRkaXIsIHNpemVvZihjZXJ0ZGlyKSwgIiVzL3Rscy8lcyIsIGRpciwgc3ViZGlyc1tpXSk7CisgICAgICAgICAgICBfYWRkX2NlcnRkaXIoY2VydGRpcik7CisgICAgICAgIH0gLyogZm9yIHN1YmRpcnMgKi8KKyAgICB9IC8qIGZvciBjb25mIHBhdGggZGlycyAqLworICAgIFNOTVBfRlJFRShjb25mcGF0aF9jb3B5KTsKK30KKworc3RhdGljIHZvaWQKK19jZXJ0X3ByaW50KG5ldHNubXBfY2VydCAqYywgdm9pZCAqY29udGV4dCkKK3sKKyAgICBpZiAoTlVMTCA9PSBjKQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmR1bXAiLCAiY2VydCAlcyBpbiAlc1xuIiwgYy0+aW5mby5maWxlbmFtZSwgYy0+aW5mby5kaXIpKTsKKyAgICBERUJVR01TR1QoKCJjZXJ0OmR1bXAiLCAiICAgdHlwZSAlZCBmbGFncyAweCV4ICglcylcbiIsCisgICAgICAgICAgICAgYy0+aW5mby50eXBlLCBjLT5pbmZvLmFsbG93ZWRfdXNlcywKKyAgICAgICAgICAgICAgX21vZGVfc3RyKGMtPmluZm8uYWxsb3dlZF91c2VzKSkpOworICAgIERFQlVHSUYoIjk6Y2VydDpkdW1wIikgeworICAgICAgICBpZiAoTlNfQ0VSVF9UWVBFX0tFWSAhPSBjLT5pbmZvLnR5cGUpIHsKKyAgICAgICAgICAgIGlmKGMtPnN1YmplY3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoYy0+aW5mby5hbGxvd2VkX3VzZXMgJiBOU19DRVJUX0NBKQorICAgICAgICAgICAgICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcCIsICIgICBDQTogJXNcbiIsIGMtPnN1YmplY3QpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wIiwgIiAgIHN1YmplY3Q6ICVzXG4iLCBjLT5zdWJqZWN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihjLT5pc3N1ZXIpCisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXAiLCAiICAgaXNzdWVyOiAlc1xuIiwgYy0+aXNzdWVyKSk7CisgICAgICAgICAgICBpZihjLT5maW5nZXJwcmludCkKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcCIsICIgICBmaW5nZXJwcmludDogJXMoJWQpOiVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9oYXNoX2FsZyIsIGMtPmhhc2hfdHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5oYXNoX3R5cGUsIGMtPmZpbmdlcnByaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgLyogbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2VydF91dGlsc19kdW1wX25hbWVzKSAqLworICAgICAgICAvKiBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX25hbWVzKGMtPm9jZXJ0KTsgKi8KKyAgICAgICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9leHRlbnNpb25zKGMtPm9jZXJ0KTsKKyAgICB9CisgICAgCit9CisKK3N0YXRpYyB2b2lkCitfa2V5X3ByaW50KG5ldHNubXBfa2V5ICprLCB2b2lkICpjb250ZXh0KQoreworICAgIGlmIChOVUxMID09IGspCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6ZHVtcCIsICJrZXkgJXMgaW4gJXNcbiIsIGstPmluZm8uZmlsZW5hbWUsIGstPmluZm8uZGlyKSk7CisgICAgREVCVUdNU0dUKCgiY2VydDpkdW1wIiwgIiAgIHR5cGUgJWQgZmxhZ3MgMHgleCAoJXMpXG4iLCBrLT5pbmZvLnR5cGUsCisgICAgICAgICAgICAgIGstPmluZm8uYWxsb3dlZF91c2VzLCBfbW9kZV9zdHIoay0+aW5mby5hbGxvd2VkX3VzZXMpKSk7Cit9CisKK3ZvaWQKK25ldHNubXBfY2VydF9kdW1wX2FsbCh2b2lkKQoreworICAgIENPTlRBSU5FUl9GT1JfRUFDSChfY2VydHMsIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX2NlcnRfcHJpbnQsIE5VTEwpOworICAgIENPTlRBSU5FUl9GT1JfRUFDSChfa2V5cywgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfa2V5X3ByaW50LCBOVUxMKTsKK30KKworI2lmZGVmIENFUlRfTUFJTgorLyoKKyAqIGV4cG9ydCBCTEQ9fi9uZXQtc25tcC9idWlsZC8gU1JDPX4vbmV0LXNubXAvc3JjIAorICogY2MgLURDRVJUX01BSU4gYCRCTEQvbmV0LXNubXAtY29uZmlnIC0tY2ZsYWdzYCBgJEJMRC9uZXQtc25tcC1jb25maWcgLS1idWlsZC1pbmNsdWRlcyAkQkxEL2AgICRTUkMvc25tcGxpYi9jZXJ0X3V0aWwuYyAgIC1vIGNlcnRfdXRpbCBgJEJMRC9uZXQtc25tcC1jb25maWcgLS1idWlsZC1saWItZGlycyAkQkxEYCBgJEJMRC9uZXQtc25tcC1jb25maWcgLS1saWJzYCAtbGNyeXB0byAtbHNzbAorICoKKyAqLworaW50CittYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBpbnQgICAgICAgICAgY2g7CisgICAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgIkQ6ZkhMTXg6IikpICE9IEVPRikKKyAgICAgICAgc3dpdGNoKGNoKSB7CisgICAgICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMob3B0YXJnKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJ1bmtub3duIG9wdGlvbiAlY1xuIiwgY2gpOworICAgICAgICB9CisKKyAgICBpbml0X3NubXAoImR0bHNhcHAiKTsKKworICAgIG5ldHNubXBfY2VydF9kdW1wX2FsbCgpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDRVJUX01BSU4gKi8KKworc3RhdGljIG5ldHNubXBfY2VydCAqX2NlcnRfZmluZF9mcChjb25zdCBjaGFyICpmaW5nZXJwcmludCk7CisKK3ZvaWQKK25ldHNubXBfZnBfbG93ZXJjYXNlX2FuZF9zdHJpcF9jb2xvbihjaGFyICpmcCkKK3sKKyAgICBjaGFyICpwb3MsICpkZXN0PU5VTEw7CisgICAgCisgICAgaWYoIWZwKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiogc2tpcCB0byBmaXJzdCA6ICovCisgICAgZm9yIChwb3MgPSBmcDsgKnBvczsgKytwb3MgKSB7CisgICAgICAgIGlmICgnOicgPT0gKnBvcykgeworICAgICAgICAgICAgZGVzdCA9IHBvczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpwb3MgPSBpc2FscGhhKDB4RkYgJiAqcG9zKSA/IHRvbG93ZXIoMHhGRiAmICpwb3MpIDogKnBvczsKKyAgICB9CisgICAgaWYgKCEqcG9zKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiogY29weSwgc2tpcHBpbmcgYW55ICc6JyAqLworICAgIGZvciAoKytwb3M7ICpwb3M7ICsrcG9zKSB7CisgICAgICAgIGlmICgnOicgPT0gKnBvcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAqZGVzdCsrID0gaXNhbHBoYSgweEZGICYgKnBvcykgPyB0b2xvd2VyKDB4RkYgJiAqcG9zKSA6ICpwb3M7CisgICAgfQorICAgICpkZXN0ID0gKnBvczsgLyogbnVsIHRlcm1pbmF0aW9uICovCit9CisKK25ldHNubXBfY2VydCAqCituZXRzbm1wX2NlcnRfZmluZChpbnQgd2hhdCwgaW50IHdoZXJlLCB2b2lkICpoaW50KQoreworICAgIG5ldHNubXBfY2VydCAqcmVzdWx0ID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgKmZwLCAqaGludF9zdHI7CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6cGFyYW1zIiwgImxvb2tpbmcgZm9yICVzKCVkKSBpbiAlcygweCV4KSwgaGludCAlbHVcbiIsCisgICAgICAgICAgICAgICBfbW9kZV9zdHIod2hhdCksIHdoYXQsIF93aGVyZV9zdHIod2hlcmUpLCB3aGVyZSwgKHVfbG9uZyloaW50KSk7CisKKyAgICBpZiAoTlNfQ0VSVEtFWV9ERUZBVUxUID09IHdoZXJlKSB7CisgICAgICAgICAgICAKKyAgICAgICAgc3dpdGNoICh3aGF0KSB7CisgICAgICAgICAgICBjYXNlIE5TX0NFUlRfSURFTlRJVFk6IC8qIHdhbnQgbXkgSUQgKi8KKyAgICAgICAgICAgICAgICBmcCA9CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UTFNfTE9DQUxfQ0VSVCk7CisgICAgICAgICAgICAgICAgLyoqIHRlbXAgYmFja3dhcmRzIGNvbXBhYmlsaXR5OyByZW1vdmUgaW4gNS43ICovCisgICAgICAgICAgICAgICAgaWYgKCFmcCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHRtcDsKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gKHB0cmRpZmZfdCloaW50OworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6cGFyYW1zIiwgIiBoaW50ID0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID8gInNlcnZlciIgOiAiY2xpZW50IikpOworICAgICAgICAgICAgICAgICAgICBmcCA9CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCB0bXAgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1g1MDlfU0VSVkVSX1BVQiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfWDUwOV9DTElFTlRfUFVCICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghZnApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQXMgYSBzcGVjaWFsIGNhc2UsIHVzZSB0aGUgYXBwbGljYXRpb24gdHlwZSB0bworICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgYSBmaWxlIG5hbWUgdG8gcHVsbCB0aGUgZGVmYXVsdCBpZGVudGl0eQorICAgICAgICAgICAgICAgICAgICAgICBmcm9tLiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV0c25tcF9jZXJ0X2ZpbmQod2hhdCwgTlNfQ0VSVEtFWV9GSUxFLCBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBOU19DRVJUX1JFTU9URV9QRUVSOgorICAgICAgICAgICAgICAgIGZwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UTFNfUEVFUl9DRVJUKTsKKyAgICAgICAgICAgICAgICAvKiogdGVtcCBiYWNrd2FyZHMgY29tcGFiaWxpdHk7IHJlbW92ZSBpbiA1LjcgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWZwKQorICAgICAgICAgICAgICAgICAgICBmcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1g1MDlfU0VSVkVSX1BVQik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDplcnIiLCAidW5oYW5kbGVkIHR5cGUgJWQgZm9yICVzKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQsIF93aGVyZV9zdHIod2hlcmUpLCB3aGVyZSkpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChmcCkKKyAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2NlcnRfZmluZCh3aGF0LCBOU19DRVJUS0VZX01VTFRJUExFLCBmcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gLyogd2hlcmUgPSBkcyBzdG9yZSAqLworICAgIGVsc2UgaWYgKE5TX0NFUlRLRVlfTVVMVElQTEUgPT0gd2hlcmUpIHsKKyAgICAgICAgLyogdHJpZXMgbXVsdGlwbGUgc291cmNlcyBvZiBjZXJ0aWZpY2F0ZXMgYmFzZWQgb24gYXNjaWkgbG9va3VwIGtleXMgKi8KKworICAgICAgICAvKiBUcnkgYSBmaW5nZXJwcmludCBtYXRjaCBmaXJzdCwgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBkb25lIGZpcnN0ICovCisgICAgICAgIC8qICh0byBhdm9pZCBwZW9wbGUgbmFtaW5nIGZpbGVuYW1lcyB3aXRoIGNvbmZsaWN0aW5nIEZQcykgKi8KKyAgICAgICAgcmVzdWx0ID0gbmV0c25tcF9jZXJ0X2ZpbmQod2hhdCwgTlNfQ0VSVEtFWV9GSU5HRVJQUklOVCwgaGludCk7CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAvKiBUaGVuIHRyeSBhIGZpbGUgbmFtZSBsb29rdXAgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldHNubXBfY2VydF9maW5kKHdoYXQsIE5TX0NFUlRLRVlfRklMRSwgaGludCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTlNfQ0VSVEtFWV9GSU5HRVJQUklOVCA9PSB3aGVyZSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6cGFyYW1zIiwgIiBoaW50ID0gJXNcbiIsIChjaGFyICopaGludCkpOworICAgICAgICByZXN1bHQgPSBfY2VydF9maW5kX2ZwKChjaGFyICopaGludCk7CisgICAgfQorICAgIGVsc2UgaWYgKE5TX0NFUlRLRVlfVEFSR0VUX1BBUkFNID09IHdoZXJlKSB7CisgICAgICAgIGlmICh3aGF0ICE9IE5TX0NFUlRfSURFTlRJVFkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJvbmx5IGlkZW50aXR5IGlzIHZhbGlkIGZvciB0YXJnZXQgcGFyYW1zXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qKiBoaW50ID09IHRhcmdldCBtaWIgZGF0YSAqLworICAgICAgICBoaW50X3N0ciA9IChjaGFyICopaGludDsKKyAgICAgICAgZnAgPSBfZmluZF90bHN0bVBhcmFtc19maW5nZXJwcmludChoaW50X3N0cik7CisgICAgICAgIGlmIChOVUxMICE9IGZwKQorICAgICAgICAgICAgcmVzdWx0ID0gX2NlcnRfZmluZF9mcChmcCk7CisKKyAgICB9CisgICAgZWxzZSBpZiAoTlNfQ0VSVEtFWV9UQVJHRVRfQUREUiA9PSB3aGVyZSkgeworICAgICAgICAKKyAgICAgICAgLyoqIGhpbnQgPT0gdGFyZ2V0IG1pYiBkYXRhICovCisgICAgICAgIGlmICh3aGF0ICE9IE5TX0NFUlRfUkVNT1RFX1BFRVIpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJvbmx5IHBlZXIgaXMgdmFsaWQgZm9yIHRhcmdldCBhZGRyXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qKiBoaW50ID09IHRhcmdldCBtaWIgZGF0YSAqLworICAgICAgICBoaW50X3N0ciA9IChjaGFyICopaGludDsKKyAgICAgICAgZnAgPSBfZmluZF90bHN0bUFkZHJfZmluZ2VycHJpbnQoaGludF9zdHIpOworICAgICAgICBpZiAoTlVMTCAhPSBmcCkKKyAgICAgICAgICAgIHJlc3VsdCA9IF9jZXJ0X2ZpbmRfZnAoZnApOworCisgICAgfQorICAgIGVsc2UgaWYgKE5TX0NFUlRLRVlfRklMRSA9PSB3aGVyZSkgeworICAgICAgICAvKiogaGludCA9PSBmaWxlbmFtZSAqLworICAgICAgICBjaGFyICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gKGNoYXIqKWhpbnQ7CisgICAgICAgIG5ldHNubXBfdm9pZF9hcnJheSAqbWF0Y2hpbmc7CisKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOnBhcmFtcyIsICIgaGludCA9ICVzXG4iLCAoY2hhciAqKWhpbnQpKTsKKyAgICAgICAgbWF0Y2hpbmcgPSBfY2VydF9maW5kX3N1YnNldF9mbiggZmlsZW5hbWUsIE5VTEwgKTsKKyAgICAgICAgaWYgKCFtYXRjaGluZykKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoMSA9PSBtYXRjaGluZy0+c2l6ZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IChuZXRzbm1wX2NlcnQqKW1hdGNoaW5nLT5hcnJheVswXTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6ZXJyIiwgIiVzIG1hdGNoZXMgbXVsdGlwbGUgY2VydHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKSk7CisgICAgICAgICAgICByZXN1bHQgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGZyZWUobWF0Y2hpbmctPmFycmF5KTsKKyAgICAgICAgZnJlZShtYXRjaGluZyk7CisgICAgfSAvKiB3aGVyZSA9IE5TX0NFUlRLRVlfRklMRSAqLworICAgIGVsc2UgeyAvKiB1bmtub3duIGxvY2F0aW9uICovCisgICAgICAgIAorICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6ZXJyIiwgInVuaGFuZGxlZCBsb2NhdGlvbiAlZCBmb3IgJWRcbiIsIHdoZXJlLAorICAgICAgICAgICAgICAgICAgIHdoYXQpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIGlmIChOVUxMID09IHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiogbWFrZSBzdXJlIHJlc3VsdCBmb3VuZCBjYW4gYmUgdXNlZCBmb3Igc3BlY2lmaWVkIHR5cGUgKi8KKyAgICBpZiAoIShyZXN1bHQtPmluZm8uYWxsb3dlZF91c2VzICYgd2hhdCkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOmVyciIsCisgICAgICAgICAgICAgICAgICAgImNlcnQgJXMgLyAlcyBub3QgYWxsb3dlZCBmb3IgJXMoJWQpICh1c2VzPSVzICglZCkpXG4iLAorICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+aW5mby5maWxlbmFtZSwgcmVzdWx0LT5maW5nZXJwcmludCwgX21vZGVfc3RyKHdoYXQpLAorICAgICAgICAgICAgICAgICAgIHdoYXQgLCBfbW9kZV9zdHIocmVzdWx0LT5pbmZvLmFsbG93ZWRfdXNlcyksCisgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5pbmZvLmFsbG93ZWRfdXNlcykpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgICAgLyoqIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjZXJ0IGRhdGEgKi8KKyAgICBpZiAobmV0c25tcF9jZXJ0X2xvYWRfeDUwOShyZXN1bHQpID09IENFUlRfTE9BRF9FUlIpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOmZvdW5kIiwKKyAgICAgICAgICAgICAgICJ1c2luZyBjZXJ0ICVzIC8gJXMgZm9yICVzKCVkKSAodXNlcz0lcyAoJWQpKVxuIiwKKyAgICAgICAgICAgICAgIHJlc3VsdC0+aW5mby5maWxlbmFtZSwgcmVzdWx0LT5maW5nZXJwcmludCwgX21vZGVfc3RyKHdoYXQpLAorICAgICAgICAgICAgICAgd2hhdCAsIF9tb2RlX3N0cihyZXN1bHQtPmluZm8uYWxsb3dlZF91c2VzKSwKKyAgICAgICAgICAgICAgIHJlc3VsdC0+aW5mby5hbGxvd2VkX3VzZXMpKTsKKyAgICAgICAgICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX0ZJTkdFUlBSSU5UUworaW50CituZXRzbm1wX2NlcnRfY2hlY2tfdmJfZmluZ2VycHJpbnQoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpCit7CisgICAgaWYgKCF2YXIpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBpZiAoMCA9PSB2YXItPnZhbF9sZW4pIC8qIGVtcHR5IGFsbG93ZWQgaW4gc29tZSBjYXNlcyAqLworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIGlmICghICgweDAxICYgdmFyLT52YWxfbGVuKSkgeyAvKiBvZGQgbGVuICovCisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6dmFyYmluZDpmaW5nZXJwcmludCIsCisgICAgICAgICAgICAgICAgICAgImV4cGVjdGluZyBvZGQgbGVuZ3RoIGZvciBmaW5nZXJwcmludFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CisgICAgfQorCisgICAgaWYgKHZhci0+dmFsLnN0cmluZ1swXSA+IE5TX0hBU0hfTUFYKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6dmFyYmluZDpmaW5nZXJwcmludCIsICJoYXNodHlwZSAlZCA+IG1heCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICB2YXItPnZhbC5zdHJpbmdbMF0sIE5TX0hBU0hfTUFYKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKioKKyAqIGJyZWFrIGEgU25tcFRMU0ZpbmdlcnByaW50IGludG8gYW4gaW50ZWdlciBoYXNoIHR5cGUgKyBoZXggc3RyaW5nCisgKgorICogQHJldHVybiBTTk1QRVJSX1NVQ0NFU1MgOiBvbiBzdWNjZXNzCisgKiBAcmV0dXJuIFNOTVBFUlJfR0VORVJSICA6IG9uIGZhaWx1cmUKKyAqLworaW50CituZXRzbm1wX3Rsc19maW5nZXJwcmludF9wYXJzZShjb25zdCB1X2NoYXIgKmJpbmFyeV9mcCwgaW50IGZwX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipmcF9zdHJfcHRyLCB1X2ludCAqZnBfc3RyX2xlbiwgaW50IHJlYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmhhc2hfdHlwZV9wdHIpCit7CisgICAgaW50ICAgICBuZWVkZWQ7CisgICAgc2l6ZV90ICBmcF9zdHJfc2l6ZTsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBoYXNoX3R5cGVfcHRyLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBmcF9zdHJfcHRyLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBmcF9zdHJfbGVuLCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgLyoKKyAgICAgKiBvdXRwdXQgc3RyaW5nIGlzIGJpbmFyeSBmcCBsZW5ndGggKG1pbnVzIDEgZm9yIGluaXRpYWwgaGFzaCB0eXBlIAorICAgICAqIGNoYXIpICogMiBmb3IgYmluIHRvIGhleCBjb252ZXJzaW9uLCArIDEgZm9yIG51bGwgdGVybWluYXRpb24uCisgICAgICovCisgICAgbmVlZGVkID0gKChmcF9sZW4gLSAxKSAqIDIpICsgMTsKKyAgICBpZiAoKmZwX3N0cl9sZW4gPCBuZWVkZWQpIHsKKyAgICAgICAgREVCVUdNU0dUKCgidGxzOmZwOnBhcnNlIiwgIm5lZWQgJWQgYnl0ZXMgZm9yIG91dHB1dFxuIiwgbmVlZGVkICkpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgaGFzaCB0eXBlIGlzIGluIHZhbGlkIHJhbmdlCisgICAgICovCisgICAgaWYgKCgwID09IGJpbmFyeV9mcFswXSkgfHwgKGJpbmFyeV9mcFswXSA+IE5TX0hBU0hfTUFYKSkgeworICAgICAgICBERUJVR01TR1QoKCJ0bHM6ZnA6cGFyc2UiLCAiaW52YWxpZCBoYXNoIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgYmluYXJ5X2ZwWzBdKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIG5ldHNubXBfYmluYXJ5X3RvX2hleCBhbGxvY2F0ZSBzcGFjZSBmb3Igc3RyaW5nLCBpZiBuZWVkZWQKKyAgICAgKi8KKyAgICBmcF9zdHJfc2l6ZSA9ICpmcF9zdHJfbGVuOworICAgICpoYXNoX3R5cGVfcHRyID0gYmluYXJ5X2ZwWzBdOworICAgIG5ldHNubXBfYmluYXJ5X3RvX2hleCgodV9jaGFyKiopZnBfc3RyX3B0ciwgJmZwX3N0cl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbG9jLCAmYmluYXJ5X2ZwWzFdLCBmcF9sZW4gLSAxKTsKKyAgICAqZnBfc3RyX2xlbiA9IGZwX3N0cl9zaXplOworICAgIGlmICgwID09ICpmcF9zdHJfbGVuKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9GSU5HRVJQUklOVFMgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU19GSU5HRVJQUklOVF9CVUlMRAorLyoqCisgKiBjb21iaW5lIGEgaGFzaCB0eXBlIGFuZCBoZXggZmluZ2VycHJpbnQgaW50byBhIFNubXBUTFNGaW5nZXJwcmludAorICoKKyAqIE9uIGVudHJ5LCB0bHNfZnBfbGVuIHNob3VsZCBwb2ludCB0byB0aGUgc2l6ZSBvZiB0aGUgdGxzX2ZwIGJ1ZmZlci4KKyAqIE9uIGEgc3VjY2Vzc2Z1bCBleGl0LCB0bHNfZnBfbGVuIHdpbGwgY29udGFpbiB0aGUgbGVuZ3RoIG9mIHRoZQorICogZmluZ2VycHJpbnQgYnVmZmVyLgorICovCitpbnQKK25ldHNubXBfdGxzX2ZpbmdlcnByaW50X2J1aWxkKGludCBoYXNoX3R5cGUsIGNvbnN0IGNoYXIgKmhleF9mcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqdGxzX2ZwLCBzaXplX3QgKnRsc19mcF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWFsbG9jKQoreworICAgIGludCAgICAgaGV4X2ZwX2xlbiwgcmM7CisgICAgc2l6ZV90ICB0bHNfZnBfc2l6ZTsKKyAgICBzaXplX3QgIG9mZnNldDsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBoZXhfZnAsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHRsc19mcCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggdGxzX2ZwX2xlbiwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIGhleF9mcF9sZW4gPSBzdHJsZW4oaGV4X2ZwKTsKKyAgICBpZiAoMCA9PSBoZXhfZnBfbGVuKSB7CisgICAgICAgICp0bHNfZnBfbGVuID0gMDsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBpZiAoKGhhc2hfdHlwZSA8PSBOU19IQVNIX05PTkUpIHx8IChoYXNoX3R5cGUgPiBOU19IQVNIX01BWCkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgidGxzOmZwOmJ1aWxkIiwgImludmFsaWQgaGFzaCB0eXBlICVkXG4iLCBoYXNoX3R5cGUgKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQgdG8gYmluYXJ5CisgICAgICovCisgICAgb2Zmc2V0ID0gMTsKKyAgICByYyA9IG5ldHNubXBfaGV4X3RvX2JpbmFyeSh0bHNfZnAsICZ0bHNfZnBfc2l6ZSwgJm9mZnNldCwgcmVhbGxvYywgaGV4X2ZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6Iik7CisgICAgKnRsc19mcF9sZW4gPSB0bHNfZnBfc2l6ZTsKKyAgICBpZiAocmMgIT0gMSkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICp0bHNfZnBfbGVuID0gb2Zmc2V0OworICAgICgqdGxzX2ZwKVswXSA9IGhhc2hfdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTX0ZJTkdFUlBSSU5UX0JVSUxEICovCisKKy8qKgorICogVHJ1c3RzIGEgZ2l2ZW4gY2VydGlmaWNhdGUgZm9yIHVzZSBpbiBUTFMgdHJhbnNsYXRpb25zLgorICoKKyAqIEBwYXJhbSBjdHggVGhlIFNTTCBjb250ZXh0IHRvIHRydXN0IHRoZSBjZXJ0aWZpY2F0ZSBpbgorICogQHBhcmFtIHRoaXNjZXJ0IFRoZSBuZXRzbm1wX2NlcnQgY2VydGlmaWNhdGUgdG8gdHJ1c3QKKyAqCisgKiBAcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyA6IG9uIHN1Y2Nlc3MKKyAqIEByZXR1cm4gU05NUEVSUl9HRU5FUlIgIDogb24gZmFpbHVyZQorICovCitpbnQKK25ldHNubXBfY2VydF90cnVzdChTU0xfQ1RYICpjdHgsIG5ldHNubXBfY2VydCAqdGhpc2NlcnQpCit7CisgICAgWDUwOV9TVE9SRSAgICAgKmNlcnRzdG9yZTsKKyAgICBYNTA5ICAgICAgICAgICAqY2VydDsKKyAgICBjaGFyICAgICAgICAgICAqZmluZ2VycHJpbnQ7CisKKyAgICAvKiBlbnN1cmUgYWxsIG5lZWRlZCBwaWVjZXMgYXJlIHByZXNlbnQgKi8KKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oTlVMTCAhPSB0aGlzY2VydCwgIk5VTEwgY2VydGlmaWNhdGUgcGFzc2VkIGluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9HRU5FUlIpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybihOVUxMICE9IHRoaXNjZXJ0LT5pbmZvLmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5VTEwgY2VydGlmaWNhdGUgZGlyZWN0b3J5IG5hbWUgcGFzc2VkIGluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9HRU5FUlIpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybihOVUxMICE9IHRoaXNjZXJ0LT5pbmZvLmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTlVMTCBjZXJ0aWZpY2F0ZSBmaWxlbmFtZSBuYW1lIHBhc3NlZCBpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfR0VORVJSKTsKKworICAgIC8qIGdldCB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSBzdG9yZSBhbmQgdGhlIGNlcnRpZmljYXRlIHRvIGxvYWQgaW50byBpdCAqLworICAgIGNlcnRzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY3R4KTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oTlVMTCAhPSBjZXJ0c3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gZ2V0IGNlcnRpZmljYXRlIHRydXN0IHN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9HRU5FUlIpOworICAgIGNlcnQgPSBuZXRzbm1wX29jZXJ0X2dldCh0aGlzY2VydCk7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKE5VTEwgIT0gY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBnZXQgY2VydGlmaWNhdGUgZnJvbSBuZXRzbm1wX2NlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX0dFTkVSUik7CisKKyAgICAvKiBQdXQgdGhlIGNlcnRpZmljYXRlIGludG8gdGhlIHN0b3JlICovCisgICAgZmluZ2VycHJpbnQgPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQoY2VydCwgLTEpOworICAgIERFQlVHTVNHVEwoKCJjZXJ0OnRydXN0IiwKKyAgICAgICAgICAgICAgICAicHV0dGluZyB0cnVzdGVkIGNlcnQgJXAgPSAlcyBpbiBjZXJ0c3RvcmUgJXBcbiIsIGNlcnQsCisgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQsIGNlcnRzdG9yZSkpOworICAgIFNOTVBfRlJFRShmaW5nZXJwcmludCk7CisgICAgWDUwOV9TVE9SRV9hZGRfY2VydChjZXJ0c3RvcmUsIGNlcnQpOworCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworLyoqCisgKiBUcnVzdHMgYSBnaXZlbiBjZXJ0aWZpY2F0ZSdzIHJvb3QgQ0EgZm9yIHVzZSBpbiBUTFMgdHJhbnNsYXRpb25zLgorICogSWYgbm8gaXNzdWVyIGlzIGZvdW5kIHRoZSBleGlzdGluZyBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHRydXN0ZWQgaW5zdGVhZC4KKyAqCisgKiBAcGFyYW0gY3R4IFRoZSBTU0wgY29udGV4dCB0byB0cnVzdCB0aGUgY2VydGlmaWNhdGUgaW4KKyAqIEBwYXJhbSB0aGlzY2VydCBUaGUgbmV0c25tcF9jZXJ0IGNlcnRpZmljYXRlIAorICoKKyAqIEByZXR1cm4gU05NUEVSUl9TVUNDRVNTIDogb24gc3VjY2VzcworICogQHJldHVybiBTTk1QRVJSX0dFTkVSUiAgOiBvbiBmYWlsdXJlCisgKi8KK2ludAorbmV0c25tcF9jZXJ0X3RydXN0X2NhKFNTTF9DVFggKmN0eCwgbmV0c25tcF9jZXJ0ICp0aGlzY2VydCkKK3sKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oTlVMTCAhPSB0aGlzY2VydCwgIk5VTEwgY2VydGlmaWNhdGUgcGFzc2VkIGluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9HRU5FUlIpOworCisgICAgLyogZmluZCB0aGUgcm9vdCBDQSBjZXJ0aWZpY2F0ZSBpbiB0aGUgY2hhaW4gKi8KKyAgICBERUJVR01TR1RMKCgiY2VydDp0cnVzdF9jYSIsICJjaGVja2luZyByb290cyBmb3IgJXAgXG4iLCB0aGlzY2VydCkpOworICAgIHdoaWxlICh0aGlzY2VydC0+aXNzdWVyX2NlcnQpIHsKKyAgICAgICAgdGhpc2NlcnQgPSB0aGlzY2VydC0+aXNzdWVyX2NlcnQ7CisgICAgICAgIERFQlVHTVNHVEwoKCJjZXJ0OnRydXN0X2NhIiwgIiAgdXAgb25lIHRvICVwXG4iLCB0aGlzY2VydCkpOworICAgIH0KKworICAgIC8qIEFkZCB0aGUgZm91bmQgdG9wIGxldmVyIGNlcnRpZmljYXRlIHRvIHRoZSBzdG9yZSAqLworICAgIHJldHVybiBuZXRzbm1wX2NlcnRfdHJ1c3QoY3R4LCB0aGlzY2VydCk7Cit9CisKK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfY2VydF9nZXRfdHJ1c3RsaXN0KHZvaWQpCit7CisgICAgaWYgKCFfdHJ1c3RlZF9jZXJ0cykKKyAgICAgICAgX3NldHVwX3RydXN0ZWRfY2VydHMoKTsKKyAgICByZXR1cm4gX3RydXN0ZWRfY2VydHM7Cit9CisKK3N0YXRpYyB2b2lkCitfcGFyc2VfdHJ1c3RjZXJ0KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIGlmICghX3RydXN0ZWRfY2VydHMpCisgICAgICAgIF9zZXR1cF90cnVzdGVkX2NlcnRzKCk7CisKKyAgICBpZiAoIV90cnVzdGVkX2NlcnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBDT05UQUlORVJfSU5TRVJUKF90cnVzdGVkX2NlcnRzLCBzdHJkdXAobGluZSkpOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtb2RlIHRleHQgZnVuY3Rpb25zCisgKgorICovCitzdGF0aWMgY29uc3QgY2hhciAqX21vZGVfc3RyKHVfY2hhciBtb2RlKQoreworICAgIHJldHVybiBfbW9kZXNbbW9kZV07Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpfd2hlcmVfc3RyKHVfaW50IHdoYXQpCit7CisgICAgc3dpdGNoICh3aGF0KSB7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9ERUZBVUxUOiByZXR1cm4gIkRFRkFVTFQiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfRklMRTogcmV0dXJuICJGSUxFIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX0ZJTkdFUlBSSU5UOiByZXR1cm4gIkZJTkdFUlBSSU5UIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX01VTFRJUExFOiByZXR1cm4gIk1VTFRJUExFIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX0NBOiByZXR1cm4gIkNBIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX1NBTl9SRkM4MjI6IHJldHVybiAiU0FOX1JGQzgyMiI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9TQU5fRE5TOiByZXR1cm4gIlNBTl9ETlMiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfU0FOX0lQQUREUjogcmV0dXJuICJTQU5fSVBBRERSIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX0NPTU1PTl9OQU1FOiByZXR1cm4gIkNPTU1PTl9OQU1FIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX1RBUkdFVF9QQVJBTTogcmV0dXJuICJUQVJHRVRfUEFSQU0iOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfVEFSR0VUX0FERFI6IHJldHVybiAiVEFSR0VUX0FERFIiOworICAgIH0KKworICAgIHJldHVybiAiVU5LTk9XTiI7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZpbmQgZnVuY3Rpb25zCisgKgorICovCitzdGF0aWMgbmV0c25tcF9jZXJ0ICoKK19jZXJ0X2ZpbmRfZnAoY29uc3QgY2hhciAqZmluZ2VycHJpbnQpCit7CisgICAgbmV0c25tcF9jZXJ0IGNlcnQsICpyZXN1bHQgPSBOVUxMOworICAgIGNoYXIgICAgICAgICBmcFtFVlBfTUFYX01EX1NJWkVdOworCisgICAgaWYgKE5VTEwgPT0gZmluZ2VycHJpbnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3RybGNweShmcCwgZmluZ2VycHJpbnQsIHNpemVvZihmcCkpOworICAgIG5ldHNubXBfZnBfbG93ZXJjYXNlX2FuZF9zdHJpcF9jb2xvbihmcCk7CisKKyAgICAvKiogY2xlYXIgc2VhcmNoIGtleSAqLworICAgIG1lbXNldCgmY2VydCwgMHgwMCwgc2l6ZW9mKGNlcnQpKTsKKworICAgIGNlcnQuZmluZ2VycHJpbnQgPSBmcDsKKworICAgIHJlc3VsdCA9IENPTlRBSU5FUl9GSU5EKF9jZXJ0cywmY2VydCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHJlZHVjZSBzdWJzZXQgYnkgZWxpbWluYXRpbmcgYW55IGZpbGVuYW1lcyB0aGF0IGFyZSBsb25nZXIgdGhhbgorICogdGhlIHNwZWNpZmllZCBmaWxlIG5hbWUuIGUuZy4gJ3NubXAnIHdvdWxkIG1hdGNoICdzbm1wLmtleScgYW5kCisgKiAnc25tcGQua2V5Jy4gV2Ugb25seSB3YW50ICdzbm1wLlgnLCB3aGVyZSBYIGlzIGEgdmFsaWQgZXh0ZW5zaW9uLgorICovCitzdGF0aWMgdm9pZAorX3JlZHVjZV9zdWJzZXQobmV0c25tcF92b2lkX2FycmF5ICptYXRjaGluZywgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgbmV0c25tcF9jZXJ0X2NvbW1vbiAqY2M7CisgICAgaW50IGkgPSAwLCBqLCBuZXdzaXplLCBwb3M7CisKKyAgICBpZiAoKE5VTEwgPT0gbWF0Y2hpbmcpIHx8IChOVUxMID09IGZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcG9zID0gc3RybGVuKGZpbGVuYW1lKTsKKyAgICBuZXdzaXplID0gbWF0Y2hpbmctPnNpemU7CisKKyAgICBmb3IoIDsgaSA8IG1hdGNoaW5nLT5zaXplOyApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgd2UndmUgc2hpZnRlZCBtYXRjaGVzIGRvd24gd2UnbGwgaGl0IGEgTlVMTCBlbnRyeSBiZWZvcmUKKyAgICAgICAgICogd2UgaGl0IHRoZSBlbmQgb2YgdGhlIGFycmF5LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKE5VTEwgPT0gbWF0Y2hpbmctPmFycmF5W2ldKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qCisgICAgICAgICAqIHNraXAgb3ZlciB2YWxpZCBtYXRjaGVzLiBOb3RlIHRoYXQgd2UgZG8gbm90IHdhbnQgdG8gdXNlCisgICAgICAgICAqIF90eXBlX2Zyb21fZmlsZW5hbWUuCisgICAgICAgICAqLworICAgICAgICBjYyA9IChuZXRzbm1wX2NlcnRfY29tbW9uKiltYXRjaGluZy0+YXJyYXlbaV07CisgICAgICAgIGlmICgoJy4nID09IGNjLT5maWxlbmFtZVtwb3NdKSAmJgorICAgICAgICAgICAgKE5TX0NFUlRfVFlQRV9VTktOT1dOICE9IF9jZXJ0X2V4dF90eXBlKCZjYy0+ZmlsZW5hbWVbcG9zKzFdKSkpIHsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqIHNocmluayBhcnJheSBieSBzaGlmdGluZyBldmVyeXRoaW5nIGRvd24gYSBzcG90LiBNaWdodCBub3QgYmUKKyAgICAgICAgICogdGhlIG1vc3QgZWZmaWNpZW50IHNvbG91dGlvbiwgYnV0IHRoaXMgaXMganVzdCBoYXBwZW5pbmcgYXQKKyAgICAgICAgICogc3RhcnR1cCBhbmQgaG9wZWZ1bGx5IG1vc3QgY2VydHMgd29uJ3QgaGF2ZSBjb21tb24gcHJlZml4ZXMuCisgICAgICAgICAqLworICAgICAgICAtLW5ld3NpemU7CisgICAgICAgIGZvciAoIGo9aTsgaiA8IG5ld3NpemU7ICsraiApCisgICAgICAgICAgICBtYXRjaGluZy0+YXJyYXlbal0gPSBtYXRjaGluZy0+YXJyYXlbaisxXTsKKyAgICAgICAgbWF0Y2hpbmctPmFycmF5W2pdID0gTlVMTDsKKyAgICAgICAgLyoqIG5vICsraTsganVzdCBzaGlmdGVkIGRvd24sIG5lZWQgdG8gbG9vayBhdCBzYW1lIHBvc2l0aW9uIGFnYWluICovCisgICAgfQorICAgIC8qCisgICAgICogaWYgd2Ugc2hpZnRlZCwgc2V0IHRoZSBuZXcgc2l6ZQorICAgICAqLworICAgIGlmIChuZXdzaXplICE9IG1hdGNoaW5nLT5zaXplKSB7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpzdWJzZXQ6cmVkdWNlIiwgInNocmFuayBmcm9tICUiIE5FVFNOTVBfUFJJeiAiZCB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBtYXRjaGluZy0+c2l6ZSwgbmV3c2l6ZSkpOworICAgICAgICBtYXRjaGluZy0+c2l6ZSA9IG5ld3NpemU7CisgICAgfQorfQorCisvKgorICogcmVkdWNlIHN1YnNldCBieSBlbGltaW5hdGluZyBhbnkgZmlsZW5hbWVzIHRoYXQgYXJlIG5vdCB1bmRlciB0aGUKKyAqIHNwZWNpZmllZCBkaXJlY3RvcnkgcGF0aC4KKyAqLworc3RhdGljIHZvaWQKK19yZWR1Y2Vfc3Vic2V0X2RpcihuZXRzbm1wX3ZvaWRfYXJyYXkgKm1hdGNoaW5nLCBjb25zdCBjaGFyICpkaXJlY3RvcnkpCit7CisgICAgbmV0c25tcF9jZXJ0X2NvbW1vbiAqY2M7CisgICAgaW50ICAgICAgICAgICAgICAgICAgaSA9IDAsIGosIG5ld3NpemUsIGRpcl9sZW47CisgICAgY2hhciAgICAgICAgICAgICAgICAgZGlyW1NOTVBfTUFYUEFUSF0sICpwb3M7CisKKyAgICBpZiAoKE5VTEwgPT0gbWF0Y2hpbmcpIHx8IChOVUxMID09IGRpcmVjdG9yeSkpCisgICAgICAgIHJldHVybjsKKworICAgIG5ld3NpemUgPSBtYXRjaGluZy0+c2l6ZTsKKworICAgIC8qCisgICAgICogZGlyIHN0cnVjdCBzaG91bGQgYmUgc29tZXRoaW5nIGxpa2UKKyAgICAgKiAgICAgICAgICAvdXNyL3NoYXJlL3NubXAvdGxzL2NlcnRzCisgICAgICogICAgICAgICAgL3Vzci9zaGFyZS9zbm1wL3Rscy9wcml2YXRlCisgICAgICoKKyAgICAgKiBzbyB3ZSB3YW50IHRvIGJhY2t1cCB1cCBvbiBkaXJlY3RvcnkgZm9yIGNvbXBhcmVzLi4KKyAgICAgKi8KKyAgICBzdHJsY3B5KGRpciwgZGlyZWN0b3J5LCBzaXplb2YoZGlyKSk7CisgICAgcG9zID0gc3RycmNocihkaXIsICcvJyk7CisgICAgaWYgKE5VTEwgPT0gcG9zKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJjZXJ0OnN1YnNldDpkaXIiLCAibm8gJy8nIGluIGRpcmVjdG9yeSAlc1xuIiwgZGlyZWN0b3J5KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgKnBvcyA9ICdcMCc7CisgICAgZGlyX2xlbiA9IHN0cmxlbihkaXIpOworCisgICAgZm9yKCA7IGkgPCBtYXRjaGluZy0+c2l6ZTsgKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHdlJ3ZlIHNoaWZ0ZWQgbWF0Y2hlcyBkb3duIHdlJ2xsIGhpdCBhIE5VTEwgZW50cnkgYmVmb3JlCisgICAgICAgICAqIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChOVUxMID09IG1hdGNoaW5nLT5hcnJheVtpXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKgorICAgICAgICAgKiBza2lwIG92ZXIgdmFsaWQgbWF0Y2hlcy4gCisgICAgICAgICAqLworICAgICAgICBjYyA9IChuZXRzbm1wX2NlcnRfY29tbW9uKiltYXRjaGluZy0+YXJyYXlbaV07CisgICAgICAgIGlmIChzdHJuY21wKGRpciwgY2MtPmRpciwgZGlyX2xlbikgPT0gMCkgeworICAgICAgICAgICAgKytpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICogc2hyaW5rIGFycmF5IGJ5IHNoaWZ0aW5nIGV2ZXJ5dGhpbmcgZG93biBhIHNwb3QuIE1pZ2h0IG5vdCBiZQorICAgICAgICAgKiB0aGUgbW9zdCBlZmZpY2llbnQgc29sb3V0aW9uLCBidXQgdGhpcyBpcyBqdXN0IGhhcHBlbmluZyBhdAorICAgICAgICAgKiBzdGFydHVwIGFuZCBob3BlZnVsbHkgbW9zdCBjZXJ0cyB3b24ndCBoYXZlIGNvbW1vbiBwcmVmaXhlcy4KKyAgICAgICAgICovCisgICAgICAgIC0tbmV3c2l6ZTsKKyAgICAgICAgZm9yICggaj1pOyBqIDwgbmV3c2l6ZTsgKytqICkKKyAgICAgICAgICAgIG1hdGNoaW5nLT5hcnJheVtqXSA9IG1hdGNoaW5nLT5hcnJheVtqKzFdOworICAgICAgICBtYXRjaGluZy0+YXJyYXlbal0gPSBOVUxMOworICAgICAgICAvKiogbm8gKytpOyBqdXN0IHNoaWZ0ZWQgZG93biwgbmVlZCB0byBsb29rIGF0IHNhbWUgcG9zaXRpb24gYWdhaW4gKi8KKyAgICB9CisgICAgLyoKKyAgICAgKiBpZiB3ZSBzaGlmdGVkLCBzZXQgdGhlIG5ldyBzaXplCisgICAgICovCisgICAgaWYgKG5ld3NpemUgIT0gbWF0Y2hpbmctPnNpemUpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnN1YnNldDpkaXIiLCAic2hyYW5rIGZyb20gJSIgTkVUU05NUF9QUkl6ICJkIHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nLT5zaXplLCBuZXdzaXplKSk7CisgICAgICAgIG1hdGNoaW5nLT5zaXplID0gbmV3c2l6ZTsKKyAgICB9Cit9CisKK3N0YXRpYyBuZXRzbm1wX3ZvaWRfYXJyYXkgKgorX2NlcnRfZmluZF9zdWJzZXRfY29tbW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworICAgIG5ldHNubXBfY2VydF9jb21tb24gICBzZWFyY2g7CisgICAgbmV0c25tcF92b2lkX2FycmF5ICAgKm1hdGNoaW5nOworCisgICAgbmV0c25tcF9hc3NlcnQoZmlsZW5hbWUgJiYgY29udGFpbmVyKTsKKworICAgIG1lbXNldCgmc2VhcmNoLCAweDAwLCBzaXplb2Yoc2VhcmNoKSk7ICAgIC8qIGNsZWFyIHNlYXJjaCBrZXkgKi8KKworICAgIHNlYXJjaC5maWxlbmFtZSA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLGZpbGVuYW1lKTsKKworICAgIG1hdGNoaW5nID0gQ09OVEFJTkVSX0dFVF9TVUJTRVQoY29udGFpbmVyLCAmc2VhcmNoKTsKKyAgICBERUJVR01TR1QoKCI5OmNlcnQ6c3Vic2V0OmZvdW5kIiwgIiUiIE5FVFNOTVBfUFJJeiAiZCBtYXRjaGVzXG4iLCBtYXRjaGluZyA/CisgICAgICAgICAgICAgICBtYXRjaGluZy0+c2l6ZSA6IDApKTsKKyAgICBpZiAobWF0Y2hpbmcgJiYgbWF0Y2hpbmctPnNpemUgPiAxKSB7CisgICAgICAgIF9yZWR1Y2Vfc3Vic2V0KG1hdGNoaW5nLCBmaWxlbmFtZSk7CisgICAgICAgIGlmICgwID09IG1hdGNoaW5nLT5zaXplKSB7CisgICAgICAgICAgICBmcmVlKG1hdGNoaW5nLT5hcnJheSk7CisgICAgICAgICAgICBTTk1QX0ZSRUUobWF0Y2hpbmcpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYXRjaGluZzsKK30KKworc3RhdGljIG5ldHNubXBfdm9pZF9hcnJheSAqCitfY2VydF9maW5kX3N1YnNldF9mbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZGlyZWN0b3J5KQoreworICAgIG5ldHNubXBfY29udGFpbmVyICAgICpmbl9jb250YWluZXI7CisgICAgbmV0c25tcF92b2lkX2FycmF5ICAgKm1hdGNoaW5nOworCisgICAgLyoqIGZpbmQgc3ViY29udGFpbmVyIHdpdGggZmlsZW5hbWUgYXMga2V5ICovCisgICAgZm5fY29udGFpbmVyID0gU1VCQ09OVEFJTkVSX0ZJTkQoX2NlcnRzLCAiY2VydHNfZm4iKTsKKyAgICBuZXRzbm1wX2Fzc2VydChmbl9jb250YWluZXIpOworCisgICAgbWF0Y2hpbmcgPSBfY2VydF9maW5kX3N1YnNldF9jb21tb24oZmlsZW5hbWUsIGZuX2NvbnRhaW5lcik7CisgICAgaWYgKG1hdGNoaW5nICYmIChtYXRjaGluZy0+c2l6ZSA+IDEpICYmIGRpcmVjdG9yeSkgeworICAgICAgICBfcmVkdWNlX3N1YnNldF9kaXIobWF0Y2hpbmcsIGRpcmVjdG9yeSk7CisgICAgICAgIGlmICgwID09IG1hdGNoaW5nLT5zaXplKSB7CisgICAgICAgICAgICBmcmVlKG1hdGNoaW5nLT5hcnJheSk7CisgICAgICAgICAgICBTTk1QX0ZSRUUobWF0Y2hpbmcpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYXRjaGluZzsKK30KKworc3RhdGljIG5ldHNubXBfdm9pZF9hcnJheSAqCitfY2VydF9maW5kX3N1YnNldF9zbihjb25zdCBjaGFyICpzdWJqZWN0KQoreworICAgIG5ldHNubXBfY2VydCAgICAgICAgICBzZWFyY2g7CisgICAgbmV0c25tcF92b2lkX2FycmF5ICAgKm1hdGNoaW5nOworICAgIG5ldHNubXBfY29udGFpbmVyICAgICpzbl9jb250YWluZXI7CisKKyAgICAvKiogZmluZCBzdWJjb250YWluZXIgd2l0aCBzdWJqZWN0IGFzIGtleSAqLworICAgIHNuX2NvbnRhaW5lciA9IFNVQkNPTlRBSU5FUl9GSU5EKF9jZXJ0cywgImNlcnRzX3NuIik7CisgICAgbmV0c25tcF9hc3NlcnQoc25fY29udGFpbmVyKTsKKworICAgIG1lbXNldCgmc2VhcmNoLCAweDAwLCBzaXplb2Yoc2VhcmNoKSk7ICAgIC8qIGNsZWFyIHNlYXJjaCBrZXkgKi8KKworICAgIHNlYXJjaC5zdWJqZWN0ID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciosc3ViamVjdCk7CisKKyAgICBtYXRjaGluZyA9IENPTlRBSU5FUl9HRVRfU1VCU0VUKHNuX2NvbnRhaW5lciwgJnNlYXJjaCk7CisgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnN1YnNldDpmb3VuZCIsICIlIiBORVRTTk1QX1BSSXogImQgbWF0Y2hlc1xuIiwgbWF0Y2hpbmcgPworICAgICAgICAgICAgICAgbWF0Y2hpbmctPnNpemUgOiAwKSk7CisgICAgcmV0dXJuIG1hdGNoaW5nOworfQorCitzdGF0aWMgbmV0c25tcF92b2lkX2FycmF5ICoKK19rZXlfZmluZF9zdWJzZXQoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgcmV0dXJuIF9jZXJ0X2ZpbmRfc3Vic2V0X2NvbW1vbihmaWxlbmFtZSwgX2tleXMpOworfQorCisvKiogZmluZCBhbGwgZW50cmllcyBtYXRjaGluZyBnaXZlbiBmaW5nZXJwcmludCAqLworc3RhdGljIG5ldHNubXBfdm9pZF9hcnJheSAqCitfZmluZF9zdWJzZXRfZnAobmV0c25tcF9jb250YWluZXIgKmNlcnRzLCBjb25zdCBjaGFyICpmcCkKK3sKKyAgICBuZXRzbm1wX2NlcnRfbWFwICAgIGVudHJ5OworICAgIG5ldHNubXBfY29udGFpbmVyICAqZnBfY29udGFpbmVyOworICAgIG5ldHNubXBfdm9pZF9hcnJheSAqdmE7CisKKyAgICBpZiAoKE5VTEwgPT0gY2VydHMpIHx8IChOVUxMID09IGZwKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmcF9jb250YWluZXIgPSBTVUJDT05UQUlORVJfRklORChjZXJ0cywgImNlcnQyc25fZnAiKTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oZnBfY29udGFpbmVyLCAiY2VydDJzbl9mcCBjb250YWluZXIgbWlzc2luZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgbWVtc2V0KCZlbnRyeSwgMHgwLCBzaXplb2YoZW50cnkpKTsKKworICAgIGVudHJ5LmZpbmdlcnByaW50ID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciosZnApOworCisgICAgdmEgPSBDT05UQUlORVJfR0VUX1NVQlNFVChmcF9jb250YWluZXIsICZlbnRyeSk7CisgICAgcmV0dXJuIHZhOworfQorCisjaWYgMCAgLyogbm90IHVzZWQgeWV0ICovCitzdGF0aWMgbmV0c25tcF9rZXkgKgorX2tleV9maW5kX2ZuKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIG5ldHNubXBfa2V5IGtleSwgKnJlc3VsdCA9IE5VTEw7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGZpbGVuYW1lKTsKKworICAgIG1lbXNldCgma2V5LCAweDAwLCBzaXplb2Yoa2V5KSk7ICAgIC8qIGNsZWFyIHNlYXJjaCBrZXkgKi8KKyAgICBrZXkuaW5mby5maWxlbmFtZSA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLGZpbGVuYW1lKTsKKyAgICByZXN1bHQgPSBDT05UQUlORVJfRklORChfa2V5cywma2V5KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK190aW1lX2ZpbHRlcihuZXRzbm1wX2ZpbGUgKmYsIHN0cnVjdCBzdGF0ICppZHgpCit7CisgICAgLyoqIGluY2x1ZGUgaWYgbXRpbWUgb3IgY3RpbWUgbmV3ZXIgdGhhbiBpbmRleCBtdGltZSAqLworICAgIGlmIChmICYmIGlkeCAmJiBmLT5zdGF0cyAmJgorICAgICAgICAoKGYtPnN0YXRzLT5zdF9tdGltZSA+PSBpZHgtPnN0X210aW1lKSB8fAorICAgICAgICAgKGYtPnN0YXRzLT5zdF9jdGltZSA+PSBpZHgtPnN0X210aW1lKSkpCisgICAgICAgIHJldHVybiBORVRTTk1QX0RJUl9JTkNMVURFOworCisgICAgcmV0dXJuIE5FVFNOTVBfRElSX0VYQ0xVREU7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoKKyAqIGNlcnQgbWFwIGZ1bmN0aW9ucworICoKKyAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUFQX0NPTkZJR19UT0tFTiAiY2VydFNlY05hbWUiCitzdGF0aWMgdm9pZCBfcGFyc2VfbWFwKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKK3N0YXRpYyB2b2lkIF9tYXBfZnJlZShuZXRzbm1wX2NlcnRfbWFwKiBlbnRyeSwgdm9pZCAqY3R4KTsKK3N0YXRpYyB2b2lkIF9wdXJnZV9jb25maWdfZW50cmllcyh2b2lkKTsKKworc3RhdGljIHZvaWQKK19pbml0X3Rsc3RtQ2VydFRvVFNOKHZvaWQpCit7CisgICAgY29uc3QgY2hhciAqY2VydFNlY05hbWVfaGVscCA9IE1BUF9DT05GSUdfVE9LRU4gIiBQUklPUklUWSBGSU5HRVJQUklOVCAiCisgICAgICAgICJbLS1zaGFOTnxtZDVdIDwtLXNuIFNFQ05BTUUgfCAtLXJmYzgyMiB8IC0tZG5zIHwgLS1pcCB8IC0tY24gfCAtLWFueT4iOworCisgICAgLyoKKyAgICAgKiBjb250YWluZXIgZm9yIGNlcnQgdG8gZmluZ2VycHJpbnQgbWFwcGluZywgd2l0aCBmaW5nZXJwcmludCBrZXkKKyAgICAgKi8KKyAgICBfbWFwcyA9IG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyX2NyZWF0ZSgxKTsKKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIE1BUF9DT05GSUdfVE9LRU4sIF9wYXJzZV9tYXAsIF9wdXJnZV9jb25maWdfZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0U2VjTmFtZV9oZWxwKTsKK30KKworbmV0c25tcF9jZXJ0X21hcCAqCituZXRzbm1wX2NlcnRfbWFwX2FsbG9jKGNoYXIgKmZpbmdlcnByaW50LCBYNTA5ICpvY2VydCkKK3sKKyAgICBuZXRzbm1wX2NlcnRfbWFwICpjZXJ0X21hcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9jZXJ0X21hcCk7CisgICAgaWYgKE5VTEwgPT0gY2VydF9tYXApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBuZXRzbm1wX2NlcnRfbWFwXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIGlmIChmaW5nZXJwcmludCkgeworICAgICAgICAvKiogTUlCIGxpbWl0cyB0byAyNTUgYnl0ZXM7IDJ4IHNpbmNlIHdlJ3ZlIGdvdCBhc2NpaSAqLworICAgICAgICBpZiAoc3RybGVuKGZpbmdlcnByaW50KSA+IChTTk1QQURNSU5MRU5HVEggKiAyKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZpbmdlcnByaW50ICVzIGV4Y2VlZHMgbWF4IGxlbmd0aCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LCAoU05NUEFETUlOTEVOR1RIICogMikpOworICAgICAgICAgICAgZnJlZShjZXJ0X21hcCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjZXJ0X21hcC0+ZmluZ2VycHJpbnQgPSBzdHJkdXAoZmluZ2VycHJpbnQpOworICAgIH0KKyAgICBpZiAob2NlcnQpIHsKKyAgICAgICAgY2VydF9tYXAtPmhhc2hUeXBlID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2hhc2hfdHlwZShvY2VydCk7CisgICAgICAgIGNlcnRfbWFwLT5vY2VydCA9IG9jZXJ0OworICAgIH0KKworICAgIHJldHVybiBjZXJ0X21hcDsKK30KKwordm9pZAorbmV0c25tcF9jZXJ0X21hcF9mcmVlKG5ldHNubXBfY2VydF9tYXAgKmNlcnRfbWFwKQoreworICAgIGlmIChOVUxMID09IGNlcnRfbWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBTTk1QX0ZSRUUoY2VydF9tYXAtPmZpbmdlcnByaW50KTsKKyAgICBTTk1QX0ZSRUUoY2VydF9tYXAtPmRhdGEpOworICAgIC8qKiB4NTA5IGNlcnQgaXNuJ3Qgb3VycyAqLworICAgIGZyZWUoY2VydF9tYXApOyAvKiBTTk1QX0ZSRUUgd2FzdGVkIG9uIHBhcmFtICovCit9CisKK2ludAorbmV0c25tcF9jZXJ0X21hcF9hZGQobmV0c25tcF9jZXJ0X21hcCAqbWFwKQoreworICAgIGludCAgICAgICAgICAgICAgICByYzsKKworICAgIGlmIChOVUxMID09IG1hcCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgREVCVUdNU0dUTCgoImNlcnQ6bWFwOmFkZCIsICJwcmkgJWQsIGZwICVzXG4iLAorICAgICAgICAgICAgICAgIG1hcC0+cHJpb3JpdHksIG1hcC0+ZmluZ2VycHJpbnQpKTsKKworICAgIGlmICgocmMgPSBDT05UQUlORVJfSU5TRVJUKF9tYXBzLCBtYXApKSAhPSAwKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGluc2VydCBuZXcgY2VydGlmaWNhdGUgbWFwIik7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX01BUF9SRU1PVkUKK2ludAorbmV0c25tcF9jZXJ0X21hcF9yZW1vdmUobmV0c25tcF9jZXJ0X21hcCAqbWFwKQoreworICAgIGludCAgICAgICAgICAgICAgICByYzsKKworICAgIGlmIChOVUxMID09IG1hcCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgREVCVUdNU0dUTCgoImNlcnQ6bWFwOnJlbW92ZSIsICJwcmkgJWQsIGZwICVzXG4iLAorICAgICAgICAgICAgICAgIG1hcC0+cHJpb3JpdHksIG1hcC0+ZmluZ2VycHJpbnQpKTsKKworICAgIGlmICgocmMgPSBDT05UQUlORVJfUkVNT1ZFKF9tYXBzLCBtYXApKSAhPSAwKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IHJlbW92ZSBjZXJ0aWZpY2F0ZSBtYXAiKTsKKworICAgIHJldHVybiByYzsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfTUFQX1JFTU9WRSAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9NQVBfRklORAorbmV0c25tcF9jZXJ0X21hcCAqCituZXRzbm1wX2NlcnRfbWFwX2ZpbmQobmV0c25tcF9jZXJ0X21hcCAqbWFwKQoreworICAgIGlmIChOVUxMID09IG1hcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gQ09OVEFJTkVSX0ZJTkQoX21hcHMsIG1hcCk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX01BUF9GSU5EICovCisKK3N0YXRpYyB2b2lkCitfbWFwX2ZyZWUobmV0c25tcF9jZXJ0X21hcCAqbWFwLCB2b2lkICpjb250ZXh0KQoreworICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShtYXApOworfQorCitzdGF0aWMgaW50CitfbWFwX2NvbXBhcmUobmV0c25tcF9jZXJ0X21hcCAqbGhzLCBuZXRzbm1wX2NlcnRfbWFwICpyaHMpCit7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKworICAgIGlmIChsaHMtPnByaW9yaXR5IDwgcmhzLT5wcmlvcml0eSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKGxocy0+cHJpb3JpdHkgPiByaHMtPnByaW9yaXR5KQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiBzdHJjbXAobGhzLT5maW5nZXJwcmludCwgcmhzLT5maW5nZXJwcmludCk7Cit9CisKK3N0YXRpYyBpbnQKK19tYXBfZnBfY29tcGFyZShuZXRzbm1wX2NlcnRfbWFwICpsaHMsIG5ldHNubXBfY2VydF9tYXAgKnJocykKK3sKKyAgICBpbnQgcmM7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKworICAgIGlmICgocmMgPSBzdHJjbXAobGhzLT5maW5nZXJwcmludCwgcmhzLT5maW5nZXJwcmludCkpICE9IDApCisgICAgICAgIHJldHVybiByYzsKKworICAgIGlmIChsaHMtPnByaW9yaXR5IDwgcmhzLT5wcmlvcml0eSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKGxocy0+cHJpb3JpdHkgPiByaHMtPnByaW9yaXR5KQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfbWFwX2ZwX25jb21wYXJlKG5ldHNubXBfY2VydF9tYXAgKmxocywgbmV0c25tcF9jZXJ0X21hcCAqcmhzKQoreworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisKKyAgICByZXR1cm4gc3RybmNtcChsaHMtPmZpbmdlcnByaW50LCByaHMtPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgIHN0cmxlbihyaHMtPmZpbmdlcnByaW50KSk7Cit9CisKK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfY2VydF9tYXBfY29udGFpbmVyX2NyZWF0ZShpbnQgd2l0aF9mcCkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY2hhaW5fbWFwLCAqZnA7CisKKyAgICBjaGFpbl9tYXAgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJjZXJ0X21hcDpzdGFjazpiaW5hcnlfYXJyYXkiKTsKKyAgICBpZiAoTlVMTCA9PSBjaGFpbl9tYXApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjb250YWluZXIgZm9yIGNlcnRfbWFwXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY2hhaW5fbWFwLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiY2VydF9tYXAiKTsKKyAgICBjaGFpbl9tYXAtPmZyZWVfaXRlbSA9IChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX21hcF9mcmVlOworICAgIGNoYWluX21hcC0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfbWFwX2NvbXBhcmU7CisKKyAgICBpZiAoIXdpdGhfZnApCisgICAgICAgIHJldHVybiBjaGFpbl9tYXA7CisKKyAgICAvKgorICAgICAqIGFkZCBhIHNlY29uZGFyeSBpbmRleCB0byB0aGUgdGFibGUgY29udGFpbmVyCisgICAgICovCisgICAgZnAgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJjZXJ0MnNuX2ZwOmJpbmFyeV9hcnJheSIpOworICAgIGlmIChOVUxMID09IGZwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyBzdWItY29udGFpbmVyIGZvciB0bHN0bUNlcnRUb1RTTlRhYmxlXG4iKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY2hhaW5fbWFwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZwLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiY2VydDJzbl9mcCIpOworICAgIGZwLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9tYXBfZnBfY29tcGFyZTsKKyAgICBmcC0+bmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX21hcF9mcF9uY29tcGFyZTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl9hZGRfaW5kZXgoY2hhaW5fbWFwLCBmcCk7CisKKyAgICByZXR1cm4gY2hhaW5fbWFwOworfQorCitpbnQKK25ldHNubXBfY2VydF9wYXJzZV9oYXNoX3R5cGUoY29uc3QgY2hhciAqc3RyKQoreworICAgIGludCByYyA9IHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBzdHIpOworICAgIGlmIChTRV9ETkUgPT0gcmMpCisgICAgICAgIHJldHVybiBOU19IQVNIX05PTkU7CisgICAgcmV0dXJuIHJjOworfQorCit2b2lkCituZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjKQoreworICAgIGlmIChOVUxMID09IGMpCisgICAgICAgIHJldHVybjsKKworICAgIENPTlRBSU5FUl9GUkVFX0FMTChjLCBOVUxMKTsKKyAgICBDT05UQUlORVJfRlJFRShjKTsKK30KKworLyoqIGNsZWFyIG91dCBjb25maWcgcm93cworICogY2FsbGVkIGR1cmluZyByZWNvbmZpZyBwcm9jZXNzaW5nIChlLmcuIFNJR0hVUCkKKyovCitzdGF0aWMgdm9pZAorX3B1cmdlX2NvbmZpZ19lbnRyaWVzKHZvaWQpCit7CisgICAgLyoqCisgICAgICoqIGR1cCBjb250YWluZXIKKyAgICAgKiogaXRlcmF0ZSBsb29raW5nIGZvciBOU0NNX0ZST01fQ09ORklHIGZsYWcKKyAgICAgKiogZGVsZXRlIGZyb20gb3JpZ2luYWwKKyAgICAgKiogZGVsZXRlIGR1cAorICAgICAqKi8KKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgKml0cjsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICAgKmNlcnRfbWFwOworICAgIG5ldHNubXBfY29udGFpbmVyICAqY2VydF9tYXBzID0gbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXIoKTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAgKnRtcF9tYXBzID0gTlVMTDsKKworICAgIGlmICgoTlVMTCA9PSBjZXJ0X21hcHMpIHx8IChDT05UQUlORVJfU0laRShjZXJ0X21hcHMpID09IDApKQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1QoKCJjZXJ0Om1hcDpyZWNvbmZpZyIsICJyZW1vdmluZyBsb2NhbGx5IGNvbmZpZ3VyZWQgcm93c1xuIikpOworICAgIAorICAgIC8qCisgICAgICogZHVwbGljYXRlIGNlcnRfbWFwcyBhbmQgdGhlbiBpdGVyYXRlIG92ZXIgdGhlIGNvcHkuIFRoYXQgd2F5IHdlIGNhbgorICAgICAqIGFkZC9yZW1vdmUgdG8gY2VydF9tYXBzIHdpdGhvdXQgZGlzdHJ1YmluZyB0aGUgaXRlcmF0b3IuCit4eAorICAgICAqLworICAgIHRtcF9tYXBzID0gQ09OVEFJTkVSX0RVUChjZXJ0X21hcHMsIE5VTEwsIDApOworICAgIGlmIChOVUxMID09IHRtcF9tYXBzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZHVwbGljYXRlIG1hcHMgZm9yIHJlY29uZmlnXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGl0ciA9IENPTlRBSU5FUl9JVEVSQVRPUih0bXBfbWFwcyk7CisgICAgaWYgKE5VTEwgPT0gaXRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGl0ZXJhdG9yIGZvciByZWNvbmZpZ1xuIik7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKHRtcF9tYXBzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjZXJ0X21hcCA9IElURVJBVE9SX0ZJUlNUKGl0cik7CisgICAgZm9yKCA7IGNlcnRfbWFwOyBjZXJ0X21hcCA9IElURVJBVE9SX05FWFQoaXRyKSkgeworCisgICAgICAgIGlmICghKGNlcnRfbWFwLT5mbGFncyAmIE5TQ01fRlJPTV9DT05GSUcpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKENPTlRBSU5FUl9SRU1PVkUoY2VydF9tYXBzLCBjZXJ0X21hcCkgPT0gMCkKKyAgICAgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShjZXJ0X21hcCk7CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKyAgICBDT05UQUlORVJfRlJFRSh0bXBfbWFwcyk7CisKKyAgICByZXR1cm47Cit9CisKKy8qCisgIGNlcnRTZWNOYW1lIFBSSU9SSVRZIFstLXNoYU5OfG1kNV0gRklOR0VSUFJJTlQgPC0tc24gU0VDTkFNRSB8IC0tcmZjODIyIHwgLS1kbnMgfCAtLWlwIHwgLS1jbiB8IC0tYW55PgorCisgIGNlcnRTZWNOYW1lICAxMDAgIGZmOi4uMTEgLS1zbiBXZXMKKyAgY2VydFNlY05hbWUgIDIwMCAgZWU6Li46MjIgLS1zbiBKb2huRG9lCisgIGNlcnRTZWNOYW1lICAzMDAgIGVlOi4uOjIyIC0tcmZjODIyCisqLworbmV0c25tcF9jZXJ0X21hcCAqCituZXRzbm1wX2NlcnRUb1RTTl9wYXJzZV9jb21tb24oY2hhciAqKmxpbmUpCit7CisgICAgbmV0c25tcF9jZXJ0X21hcCAqbWFwOworICAgIGNoYXIgICAgICAgICAgICAgKnRtcCwgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXTsKKyAgICBzaXplX3QgICAgICAgICAgICBsZW47CisgICAgbmV0c25tcF9jZXJ0ICAgICAqdG1wY2VydDsKKworICAgIGlmICgoTlVMTCA9PSBsaW5lKSB8fCAoTlVMTCA9PSAqbGluZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoqIG5lZWQgc29tZXdoZXJlIHRvIHNhdmUgcm93cyAqLworICAgIGlmIChOVUxMID09IF9tYXBzKSB7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBmb3IgY2VydGlmaWNhdGUgbWFwcGluZ3NcbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgREVCVUdNU0dUKCgiY2VydDp1dGlsOmNvbmZpZyIsICJwYXJzaW5nICVzXG4iLCAqbGluZSkpOworCisgICAgLyogcmVhZCB0aGUgcHJpb3JpdHkgKi8KKyAgICBsZW4gPSBzaXplb2YoYnVmKTsKKyAgICB0bXAgPSBidWY7CisgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmdG1wLCAmbGVuKTsKKyAgICB0bXBbbGVuXSA9IDA7CisgICAgaWYgKCFpc2RpZ2l0KDB4RkYgJiB0bXBbMF0pKSB7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJjb3VsZCBub3QgcGFyc2UgcHJpb3JpdHkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1hcCA9IG5ldHNubXBfY2VydF9tYXBfYWxsb2MoTlVMTCwgTlVMTCk7CisgICAgaWYgKE5VTEwgPT0gbWFwKSB7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgY2VydCBtYXAgc3RydWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtYXAtPmZsYWdzIHw9IE5TQ01fRlJPTV9DT05GSUc7CisgICAgbWFwLT5wcmlvcml0eSA9IGF0b2koYnVmKTsKKworICAgIC8qIHJlYWQgdGhlIGZsYWcgb3IgdGhlIGZpbmdlcnByaW50ICovCisgICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgdG1wID0gYnVmOworICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJnRtcCwgJmxlbik7CisgICAgdG1wW2xlbl0gPSAwOworICAgIGlmICgoYnVmWzBdID09ICctJykgJiYgKGJ1ZlsxXSA9PSAnLScpKSB7CisgICAgICAgIG1hcC0+aGFzaFR5cGUgPSBuZXRzbm1wX2NlcnRfcGFyc2VfaGFzaF90eXBlKCZidWZbMl0pOworICAgICAgICBpZiAoTlNfSEFTSF9OT05FID09IG1hcC0+aGFzaFR5cGUpIHsKKyAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJpbnZhbGlkIGhhc2ggdHlwZSIpOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKworICAgICAgICAvKiogc2V0IHVwIGZvciBmaW5nZXJwcmludCAqLworICAgICAgICBsZW4gPSBzaXplb2YoYnVmKTsKKyAgICAgICAgdG1wID0gYnVmOworICAgICAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZ0bXAsICZsZW4pOworICAgICAgICB0bXBbbGVuXSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWFwLT5oYXNoVHlwZSA9IE5TX0hBU0hfU0hBMTsKKworICAgIC8qIGxvb2sgdXAgdGhlIGZpbmdlcnByaW50ICovCisgICAgdG1wY2VydCA9IG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfUkVNT1RFX1BFRVIsIE5TX0NFUlRLRVlfTVVMVElQTEUsIGJ1Zik7CisgICAgaWYgKE5VTEwgPT0gdG1wY2VydCkgeworICAgICAgICAvKiBhc3N1bWUgaXQncyBhIHJhdyBmaW5nZXJwcmludCB3ZSBkb24ndCBoYXZlICovCisgICAgICAgIG5ldHNubXBfZnBfbG93ZXJjYXNlX2FuZF9zdHJpcF9jb2xvbihidWYpOworICAgICAgICBtYXAtPmZpbmdlcnByaW50ID0gc3RyZHVwKGJ1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWFwLT5maW5nZXJwcmludCA9CisgICAgICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQodG1wY2VydC0+b2NlcnQsIC0xKTsKKyAgICB9CisgICAgCisgICAgaWYgKE5VTEwgPT0gKmxpbmUpIHsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIm11c3Qgc3BlY2lmeSBtYXAgdHlwZSIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiByZWFkIHRoZSBtYXBwaW5nIHR5cGUgKi8KKyAgICBsZW4gPSBzaXplb2YoYnVmKTsKKyAgICB0bXAgPSBidWY7CisgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmdG1wLCAmbGVuKTsKKyAgICB0bXBbbGVuXSA9IDA7CisgICAgaWYgKChidWZbMF0gIT0gJy0nKSB8fCAoYnVmWzFdICE9ICctJykpIHsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoInVuZXhwZWN0ZWQgZnJvbWF0OiAlc1xuIiwgKmxpbmUpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgaWYgKHN0cmNtcCgmYnVmWzJdLCAic24iKSA9PSAwKSB7CisgICAgICAgIGlmIChOVUxMID09ICpsaW5lKSB7CisgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigibXVzdCBzcGVjaWZ5IHNlY05hbWUgZm9yIC0tc24iKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisgICAgICAgIGxlbiA9IHNpemVvZihidWYpOworICAgICAgICB0bXAgPSBidWY7CisgICAgICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJnRtcCwgJmxlbik7CisgICAgICAgIG1hcC0+ZGF0YSA9IHN0cmR1cChidWYpOworICAgICAgICBpZiAobWFwLT5kYXRhKQorICAgICAgICAgICAgbWFwLT5tYXBUeXBlID0gVFNOTV90bHN0bUNlcnRTcGVjaWZpZWQ7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcCgmYnVmWzJdLCAiY24iKSA9PSAwKQorICAgICAgICBtYXAtPm1hcFR5cGUgPSBUU05NX3Rsc3RtQ2VydENvbW1vbk5hbWU7CisgICAgZWxzZSBpZiAoc3RyY21wKCZidWZbMl0sICJpcCIpID09IDApCisgICAgICAgIG1hcC0+bWFwVHlwZSA9IFRTTk1fdGxzdG1DZXJ0U0FOSXBBZGRyZXNzOworICAgIGVsc2UgaWYgKHN0cmNtcCgmYnVmWzJdLCAicmZjODIyIikgPT0gMCkKKyAgICAgICAgbWFwLT5tYXBUeXBlID0gVFNOTV90bHN0bUNlcnRTQU5SRkM4MjJOYW1lOworICAgIGVsc2UgaWYgKHN0cmNtcCgmYnVmWzJdLCAiZG5zIikgPT0gMCkKKyAgICAgICAgbWFwLT5tYXBUeXBlID0gVFNOTV90bHN0bUNlcnRTQU5ETlNOYW1lOworICAgIGVsc2UgaWYgKHN0cmNtcCgmYnVmWzJdLCAiYW55IikgPT0gMCkKKyAgICAgICAgbWFwLT5tYXBUeXBlID0gVFNOTV90bHN0bUNlcnRTQU5Bbnk7CisgICAgZWxzZQorICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigidW5rbm93biBhcmd1bWVudCAlc1xuIiwgYnVmKTsKKyAgICAKKyAgZW5kOgorICAgIGlmICgwID09IG1hcC0+bWFwVHlwZSkgeworICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobWFwKTsKKyAgICAgICAgbWFwID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgdm9pZAorX3BhcnNlX21hcChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3sKKyAgICBuZXRzbm1wX2NlcnRfbWFwICptYXAgPSBuZXRzbm1wX2NlcnRUb1RTTl9wYXJzZV9jb21tb24oJmxpbmUpOworICAgIGlmIChOVUxMID09IG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5ldHNubXBfY2VydF9tYXBfYWRkKG1hcCkgIT0gMCkgeworICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobWFwKTsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoTUFQX0NPTkZJR19UT0tFTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiBkdXBsaWNhdGUgcHJpb3JpdHkgZm9yIGNlcnRpZmljYXRlIG1hcCIpOworICAgIH0KK30KKworc3RhdGljIGludAorX2ZpbGxfY2VydF9tYXAobmV0c25tcF9jZXJ0X21hcCAqY2VydF9tYXAsIG5ldHNubXBfY2VydF9tYXAgKmVudHJ5KQoreworICAgIERFQlVHTVNHVCgoImNlcnQ6bWFwOnNlY25hbWUiLCAibWFwOiBwcmkgJWQgdHlwZSAlZCBkYXRhICVzXG4iLAorICAgICAgICAgICAgICAgZW50cnktPnByaW9yaXR5LCBlbnRyeS0+bWFwVHlwZSwgZW50cnktPmRhdGEpKTsKKyAgICBjZXJ0X21hcC0+cHJpb3JpdHkgPSBlbnRyeS0+cHJpb3JpdHk7CisgICAgY2VydF9tYXAtPm1hcFR5cGUgPSBlbnRyeS0+bWFwVHlwZTsKKyAgICBjZXJ0X21hcC0+aGFzaFR5cGUgPSBlbnRyeS0+aGFzaFR5cGU7CisgICAgaWYgKGVudHJ5LT5kYXRhKSB7CisgICAgICAgIGNlcnRfbWFwLT5kYXRhID0gc3RyZHVwKGVudHJ5LT5kYXRhKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gY2VydF9tYXAtPmRhdGEgKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2VjbmFtZSBtYXAgZGF0YSBkdXAgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogZ2V0IHNlY25hbWUgbWFwKHMpIGZvciBmaW5nZXJwcmludHMKKyAqLworaW50CituZXRzbm1wX2NlcnRfZ2V0X3NlY25hbWVfbWFwcyhuZXRzbm1wX2NvbnRhaW5lciAqY2VydF9tYXBzKQoreworICAgIG5ldHNubXBfaXRlcmF0b3IgICAqaXRyOworICAgIG5ldHNubXBfY2VydF9tYXAgICAqY2VydF9tYXAsICpuZXdfY2VydF9tYXAsICplbnRyeTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAgKm5ld19tYXBzID0gTlVMTDsKKyAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgKnJlc3VsdHM7CisgICAgaW50ICAgICAgICAgICAgICAgICBqOworCisgICAgaWYgKChOVUxMID09IGNlcnRfbWFwcykgfHwgKENPTlRBSU5FUl9TSVpFKGNlcnRfbWFwcykgPT0gMCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6bWFwOnNlY25hbWUiLCAibG9va2luZyBmb3IgbWF0Y2hlcyBmb3IgJSIgTkVUU05NUF9QUkl6ICJkIGZpbmdlcnByaW50c1xuIiwKKyAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNlcnRfbWFwcykpKTsKKyAgICAKKyAgICAvKgorICAgICAqIGR1cGxpY2F0ZSBjZXJ0X21hcHMgYW5kIHRoZW4gaXRlcmF0ZSBvdmVyIHRoZSBjb3B5LiBUaGF0IHdheSB3ZSBjYW4KKyAgICAgKiBhZGQvcmVtb3ZlIHRvIGNlcnRfbWFwcyB3aXRob3V0IGRpc3RydWJpbmcgdGhlIGl0ZXJhdG9yLgorICAgICAqLworICAgIG5ld19tYXBzID0gQ09OVEFJTkVSX0RVUChjZXJ0X21hcHMsIE5VTEwsIDApOworICAgIGlmIChOVUxMID09IG5ld19tYXBzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZHVwbGljYXRlIG1hcHMgZm9yIHNlY25hbWUgbWFwcGluZ1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpdHIgPSBDT05UQUlORVJfSVRFUkFUT1IobmV3X21hcHMpOworICAgIGlmIChOVUxMID09IGl0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3Igc2VjbmFtZSBtYXBwaW5nc1xuIik7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKG5ld19tYXBzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjZXJ0X21hcCA9IElURVJBVE9SX0ZJUlNUKGl0cik7CisgICAgZm9yKCA7IGNlcnRfbWFwOyBjZXJ0X21hcCA9IElURVJBVE9SX05FWFQoaXRyKSkgeworCisgICAgICAgIHJlc3VsdHMgPSBfZmluZF9zdWJzZXRfZnAoIG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfbWFwLT5maW5nZXJwcmludCApOworICAgICAgICBpZiAoTlVMTCA9PSByZXN1bHRzKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0Om1hcDpzZWNuYW1lIiwgIm5vIG1hdGNoIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2VydF9tYXAtPmZpbmdlcnByaW50KSk7CisgICAgICAgICAgICBpZiAoQ09OVEFJTkVSX1JFTU9WRShjZXJ0X21hcHMsIGNlcnRfbWFwKSAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6bWFwOnNlY25hbWUiLCAiJSIgTkVUU05NUF9QUkl6ICJkIG1hdGNoZXMgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHJlc3VsdHMtPnNpemUsIGNlcnRfbWFwLT5maW5nZXJwcmludCkpOworICAgICAgICAvKgorICAgICAgICAgKiBmaXJzdCBlbnRyeSBpcyBhIGZyZWViaWUKKyAgICAgICAgICovCisgICAgICAgIGVudHJ5ID0gKG5ldHNubXBfY2VydF9tYXAqKXJlc3VsdHMtPmFycmF5WzBdOworICAgICAgICBpZiAoX2ZpbGxfY2VydF9tYXAoY2VydF9tYXAsIGVudHJ5KSAhPSAwKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIC8qCisgICAgICAgICAqIGFkZGl0aW9uYWwgZW50cmllcyBtdXN0IGJlIGFsbG9jYXRlZC9pbnNlcnRlZAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHJlc3VsdHMtPnNpemUgPiAxKSB7CisgICAgICAgICAgICBmb3Ioaj0xOyBqIDwgcmVzdWx0cy0+c2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgZW50cnkgPSAobmV0c25tcF9jZXJ0X21hcCopcmVzdWx0cy0+YXJyYXlbal07CisgICAgICAgICAgICAgICAgbmV3X2NlcnRfbWFwID0gbmV0c25tcF9jZXJ0X21hcF9hbGxvYyhlbnRyeS0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+b2NlcnQpOworICAgICAgICAgICAgICAgIGlmIChOVUxMID09IG5ld19jZXJ0X21hcCkgeworICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIG5ldyBjZXJ0IG1hcCBlbnRyeVxuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKF9maWxsX2NlcnRfbWFwKG5ld19jZXJ0X21hcCwgZW50cnkpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG5ld19jZXJ0X21hcCk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV3X2NlcnRfbWFwLT5vY2VydCA9IGNlcnRfbWFwLT5vY2VydDsKKyAgICAgICAgICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjZXJ0X21hcHMsbmV3X2NlcnRfbWFwKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShuZXdfY2VydF9tYXApOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAvKiBmb3IgcmVzdWx0cyAqLworICAgICAgICB9IC8qIHJlc3VsdHMgc2l6ZSA+IDEgKi8KKworICAgICAgICBmcmVlKHJlc3VsdHMtPmFycmF5KTsKKyAgICAgICAgU05NUF9GUkVFKHJlc3VsdHMpOworICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisgICAgQ09OVEFJTkVSX0ZSRUUobmV3X21hcHMpOworCisgICAgREVCVUdNU0dUKCgiY2VydDptYXA6c2VjbmFtZSIsCisgICAgICAgICAgICAgICAiZm91bmQgJSIgTkVUU05NUF9QUkl6ICJkIG1hdGNoZXMgZm9yIGZpbmdlcnByaW50c1xuIiwKKyAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNlcnRfbWFwcykpKTsKKyAgICByZXR1cm4gMDsKKworICBmYWlsOgorICAgIGlmIChyZXN1bHRzKSB7CisgICAgICAgIGZyZWUocmVzdWx0cy0+YXJyYXkpOworICAgICAgICBmcmVlKHJlc3VsdHMpOworICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisgICAgQ09OVEFJTkVSX0ZSRUUobmV3X21hcHMpOworICAgIHJldHVybiAtMTsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgorICogc25tcFRsc3RtUGFybXNUYWJsZSBkYXRhCisgKgorICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQQVJBTVNfQ09ORklHX1RPS0VOICJzbm1wVGxzdG1QYXJhbXMiCitzdGF0aWMgdm9pZCBfcGFyc2VfcGFyYW1zKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKKworc3RhdGljIHZvaWQKK19pbml0X3Rsc3RtUGFyYW1zKHZvaWQpCit7CisgICAgY29uc3QgY2hhciAqcGFyYW1zX2hlbHAgPSAKKyAgICAgICAgUEFSQU1TX0NPTkZJR19UT0tFTiAiIHRhcmdldFBhcmFtc05hbWUgaGFzaFR5cGU6ZmluZ2VyUHJpbnQiOworICAgIAorICAgIC8qCisgICAgICogY29udGFpbmVyIGZvciBzbm1wVGxzdG1QYXJhbXNUYWJsZSBkYXRhCisgICAgICovCisgICAgX3Rsc3RtUGFyYW1zID0gbmV0c25tcF9jb250YWluZXJfZmluZCgidGxzdG1QYXJhbXM6c3RyaW5nIik7CisgICAgaWYgKE5VTEwgPT0gX3Rsc3RtUGFyYW1zKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgc3ViLWNvbnRhaW5lciBmb3IgdGxzdG1QYXJhbXNUYWJsZVxuIik7CisgICAgZWxzZQorICAgICAgICBfdGxzdG1QYXJhbXMtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJ0bHN0bVBhcmFtcyIpOworCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoTlVMTCwgUEFSQU1TX0NPTkZJR19UT0tFTiwgX3BhcnNlX3BhcmFtcywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zX2hlbHApOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1QQVJBTVNfQ09OVEFJTkVSCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX3Rsc3RtUGFyYW1zX2NvbnRhaW5lcih2b2lkKQoreworICAgIHJldHVybiBfdGxzdG1QYXJhbXM7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTVBBUkFNU19DT05UQUlORVIgKi8KKworc25tcFRsc3RtUGFyYW1zICoKK25ldHNubXBfdGxzdG1QYXJhbXNfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBoYXNoVHlwZSwgY29uc3QgY2hhciAqZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnBfbGVuKQoreworICAgIHNubXBUbHN0bVBhcmFtcyAqc3RwID0gU05NUF9NQUxMT0NfVFlQRURFRihzbm1wVGxzdG1QYXJhbXMpOworICAgIGlmIChOVUxMID09IHN0cCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobmFtZSkKKyAgICAgICAgc3RwLT5uYW1lID0gc3RyZHVwKG5hbWUpOworICAgIHN0cC0+aGFzaFR5cGUgPSBoYXNoVHlwZTsKKyAgICBpZiAoZnApCisgICAgICAgIHN0cC0+ZmluZ2VycHJpbnQgPSBzdHJkdXAoZnApOworICAgIERFQlVHTVNHVCgoIjk6dGxzdG1QYXJhbXM6Y3JlYXRlIiwgIjB4JWx4OiAlc1xuIiwgKHVfbG9uZylzdHAsCisgICAgICAgICAgICAgICBzdHAtPm5hbWUgPyBzdHAtPm5hbWUgOiAibnVsbCIpKTsKKworICAgIHJldHVybiBzdHA7Cit9CisKK3ZvaWQKK25ldHNubXBfdGxzdG1QYXJhbXNfZnJlZShzbm1wVGxzdG1QYXJhbXMgKnN0cCkKK3sKKyAgICBpZiAoTlVMTCA9PSBzdHApCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVCgoIjk6dGxzdG1QYXJhbXM6cmVsZWFzZSIsICIweCVseCAlc1xuIiwgKHVfbG9uZylzdHAsCisgICAgICAgICAgICAgICBzdHAtPm5hbWUgPyBzdHAtPm5hbWUgOiAibnVsbCIpKTsKKyAgICBTTk1QX0ZSRUUoc3RwLT5uYW1lKTsKKyAgICBTTk1QX0ZSRUUoc3RwLT5maW5nZXJwcmludCk7CisgICAgZnJlZShzdHApOyAvKiBTTk1QX0ZSRUUgcG9pbnRsZXNzIG9uIHBhcmFtZXRlciAqLworfQorCitzbm1wVGxzdG1QYXJhbXMgKgorbmV0c25tcF90bHN0bVBhcmFtc19yZXN0b3JlX2NvbW1vbihjaGFyICoqbGluZSkKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXMgICpzdHA7CisgICAgY2hhciAgICAgICAgICAgICAqdG1wLCBidWZbU05NUF9NQVhCVUZfU01BTExdOworICAgIHNpemVfdCAgICAgICAgICAgIGxlbjsKKworICAgIGlmICgoTlVMTCA9PSBsaW5lKSB8fCAoTlVMTCA9PSAqbGluZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoqIG5lZWQgc29tZXdoZXJlIHRvIHNhdmUgcm93cyAqLworICAgIG5ldHNubXBfYXNzZXJ0KF90bHN0bVBhcmFtcyk7CisKKyAgICBzdHAgPSBuZXRzbm1wX3Rsc3RtUGFyYW1zX2NyZWF0ZShOVUxMLCAwLCBOVUxMLCAwKTsKKyAgICBpZiAoTlVMTCA9PSBzdHApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoqIG5hbWUgKi8KKyAgICBsZW4gPSBzaXplb2YoYnVmKTsKKyAgICB0bXAgPSBidWY7CisgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmdG1wLCAmbGVuKTsKKyAgICB0bXBbbGVuXSA9IDA7CisgICAgLyoqIHh4eC1ya3M6IHZhbGlkYXRlIHNubXBhZG1pbnN0cmluZz8gKi8KKyAgICBpZiAobGVuKQorICAgICAgICBzdHAtPm5hbWUgPSBzdHJkdXAoYnVmKTsKKworICAgIC8qKiBmaW5nZXJwcmludCBoYXNoIHR5cGUqLworICAgIGxlbiA9IHNpemVvZihidWYpOworICAgIHRtcCA9IGJ1ZjsKKyAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZ0bXAsICZsZW4pOworICAgIHRtcFtsZW5dID0gMDsKKyAgICBpZiAoKGJ1ZlswXSA9PSAnLScpICYmIChidWZbMV0gPT0gJy0nKSkgeworICAgICAgICBzdHAtPmhhc2hUeXBlID0gbmV0c25tcF9jZXJ0X3BhcnNlX2hhc2hfdHlwZSgmYnVmWzJdKTsKKworICAgICAgICAvKiogc2V0IHVwIGZvciBmaW5nZXJwcmludCAqLworICAgICAgICBsZW4gPSBzaXplb2YoYnVmKTsKKyAgICAgICAgdG1wID0gYnVmOworICAgICAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZ0bXAsICZsZW4pOworICAgICAgICB0bXBbbGVuXSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc3RwLT5oYXNoVHlwZSA9TlNfSEFTSF9TSEExOworICAgIAorICAgIG5ldHNubXBfZnBfbG93ZXJjYXNlX2FuZF9zdHJpcF9jb2xvbihidWYpOworICAgIHN0cC0+ZmluZ2VycHJpbnQgPSBzdHJkdXAoYnVmKTsKKyAgICBzdHAtPmZpbmdlcnByaW50X2xlbiA9IHN0cmxlbihidWYpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zOnJlc3RvcmU6Y29tbW9uIiwgIm5hbWUgJyVzJ1xuIiwgc3RwLT5uYW1lKSk7CisKKyAgICByZXR1cm4gc3RwOworfQorCitpbnQKK25ldHNubXBfdGxzdG1QYXJhbXNfYWRkKHNubXBUbHN0bVBhcmFtcyAqc3RwKQoreworICAgIGlmIChOVUxMID09IHN0cCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zOmFkZCIsICJhZGRpbmcgZW50cnkgMHglbHggJXNcbiIsICh1X2xvbmcpc3RwLAorICAgICAgICAgICAgICAgIHN0cC0+bmFtZSkpOworCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoX3Rsc3RtUGFyYW1zLCBzdHApICE9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGluc2VydGluZyB0bHN0bVBhcmFtcyAlcyIsIHN0cC0+bmFtZSk7CisgICAgICAgIG5ldHNubXBfdGxzdG1QYXJhbXNfZnJlZShzdHApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTVBBUkFNU19SRU1PVkUKK2ludAorbmV0c25tcF90bHN0bVBhcmFtc19yZW1vdmUoc25tcFRsc3RtUGFyYW1zICpzdHApCit7CisgICAgaWYgKE5VTEwgPT0gc3RwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXM6cmVtb3ZlIiwgInJlbW92aW5nIGVudHJ5IDB4JWx4ICVzXG4iLCAodV9sb25nKXN0cCwKKyAgICAgICAgICAgICAgICBzdHAtPm5hbWUpKTsKKworICAgIGlmIChDT05UQUlORVJfUkVNT1ZFKF90bHN0bVBhcmFtcywgc3RwKSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZW1vdmluZyB0bHN0bVBhcmFtcyAlcyIsIHN0cC0+bmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNUEFSQU1TX1JFTU9WRSAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1QQVJBTVNfRklORAorc25tcFRsc3RtUGFyYW1zICoKK25ldHNubXBfdGxzdG1QYXJhbXNfZmluZChzbm1wVGxzdG1QYXJhbXMgKnN0cCkKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXMgKmZvdW5kOworCisgICAgaWYgKE5VTEwgPT0gc3RwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvdW5kID0gQ09OVEFJTkVSX0ZJTkQoX3Rsc3RtUGFyYW1zLCBzdHApOworICAgIHJldHVybiBmb3VuZDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNUEFSQU1TX0ZJTkQgKi8KKworc3RhdGljIHZvaWQKK19wYXJzZV9wYXJhbXMoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit7CisgICAgc25tcFRsc3RtUGFyYW1zICpzdHAgPSBuZXRzbm1wX3Rsc3RtUGFyYW1zX3Jlc3RvcmVfY29tbW9uKCZsaW5lKTsKKworICAgIGlmICghc3RwKQorICAgICAgICByZXR1cm47CisKKyAgICBzdHAtPmZsYWdzID0gVExTVE1fUEFSQU1TX0ZST01fQ09ORklHIHwgVExTVE1fUEFSQU1TX05PTlZPTEFUSUxFOworCisgICAgbmV0c25tcF90bHN0bVBhcmFtc19hZGQoc3RwKTsKK30KKworc3RhdGljIGNoYXIgKgorX2ZpbmRfdGxzdG1QYXJhbXNfZmluZ2VycHJpbnQoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXMgbG9va3VwX2tleSwgKnJlc3VsdDsKKworICAgIGlmIChOVUxMID09IG5hbWUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbG9va3VwX2tleS5uYW1lID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciosIG5hbWUpOworCisgICAgcmVzdWx0ID0gQ09OVEFJTkVSX0ZJTkQoX3Rsc3RtUGFyYW1zLCAmbG9va3VwX2tleSk7CisgICAgaWYgKChOVUxMID09IHJlc3VsdCkgfHwgKE5VTEwgPT0gcmVzdWx0LT5maW5nZXJwcmludCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHN0cmR1cChyZXN1bHQtPmZpbmdlcnByaW50KTsKK30KKy8qCisgKiBFTkQgc25tcFRsc3RtUGFybXNUYWJsZSBkYXRhCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoKKyAqIHNubXBUbHN0bUFkZHJUYWJsZSBkYXRhCisgKgorICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBBRERSX0NPTkZJR19UT0tFTiAic25tcFRsc3RtQWRkciIKK3N0YXRpYyB2b2lkIF9wYXJzZV9hZGRyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKKworc3RhdGljIHZvaWQKK19pbml0X3Rsc3RtQWRkcih2b2lkKQoreworICAgIGNvbnN0IGNoYXIgKmFkZHJfaGVscCA9IAorICAgICAgICBBRERSX0NPTkZJR19UT0tFTiAiIHRhcmdldEFkZHJOYW1lIGhhc2hUeXBlOmZpbmdlcnByaW50IHNlcnZlcklkZW50aXR5IjsKKyAgICAKKyAgICAvKgorICAgICAqIGNvbnRhaW5lciBmb3Igc25tcFRsc3RtQWRkclRhYmxlIGRhdGEKKyAgICAgKi8KKyAgICBfdGxzdG1BZGRyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgidGxzdG1BZGRyOnN0cmluZyIpOworICAgIGlmIChOVUxMID09IF90bHN0bUFkZHIpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyBzdWItY29udGFpbmVyIGZvciB0bHN0bUFkZHJUYWJsZVxuIik7CisgICAgZWxzZQorICAgICAgICBfdGxzdG1BZGRyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgidGxzdG1BZGRyIik7CisKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCBBRERSX0NPTkZJR19UT0tFTiwgX3BhcnNlX2FkZHIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9oZWxwKTsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNQUREUl9DT05UQUlORVIKK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfdGxzdG1BZGRyX2NvbnRhaW5lcih2b2lkKQoreworICAgIHJldHVybiBfdGxzdG1BZGRyOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1BRERSX0NPTlRBSU5FUiAqLworCisvKgorICogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgCisgKi8KK3NubXBUbHN0bUFkZHIgKgorbmV0c25tcF90bHN0bUFkZHJfY3JlYXRlKGNoYXIgKnRhcmdldEFkZHJOYW1lKQoreworICAgIHNubXBUbHN0bUFkZHIgKmVudHJ5OworCisgICAgaWYgKE5VTEwgPT0gdGFyZ2V0QWRkck5hbWUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKHNubXBUbHN0bUFkZHIpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgREVCVUdNU0dUKCgidGxzdG1BZGRyOmVudHJ5OmNyZWF0ZSIsICJlbnRyeSAlcCAlc1xuIiwgZW50cnksCisgICAgICAgICAgICAgICB0YXJnZXRBZGRyTmFtZSA/IHRhcmdldEFkZHJOYW1lIDogIk5VTEwiKSk7CisKKyAgICBlbnRyeS0+bmFtZSA9IHN0cmR1cCh0YXJnZXRBZGRyTmFtZSk7CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3ZvaWQKK25ldHNubXBfdGxzdG1BZGRyX2ZyZWUoc25tcFRsc3RtQWRkciAqZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU05NUF9GUkVFKGVudHJ5LT5uYW1lKTsKKyAgICBTTk1QX0ZSRUUoZW50cnktPmZpbmdlcnByaW50KTsKKyAgICBTTk1QX0ZSRUUoZW50cnktPmlkZW50aXR5KTsKKyAgICBmcmVlKGVudHJ5KTsKK30KKworaW50CituZXRzbm1wX3Rsc3RtQWRkcl9yZXN0b3JlX2NvbW1vbihjaGFyICoqbGluZSwgY2hhciAqbmFtZSwgc2l6ZV90ICpuYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlkLCBzaXplX3QgKmlkX2xlbiwgY2hhciAqZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmZwX2xlbiwgdV9jaGFyICpodCkKK3sKKyAgICBzaXplX3QgZnBfbGVuX3NhdmUgPSAqZnBfbGVuOworCisgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmbmFtZSwgbmFtZV9sZW4pOworICAgIGlmIChOVUxMID09ICpsaW5lKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImluY29tcGxldGUgbGluZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG5hbWVbKm5hbWVfbGVuXSA9IDA7CisKKyAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZmcCwgZnBfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSAqbGluZSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJpbmNvbXBsZXRlIGxpbmUiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmcFsqZnBfbGVuXSA9IDA7CisgICAgaWYgKChmcFswXSA9PSAnLScpICYmIChmcFsxXSA9PSAnLScpKSB7CisgICAgICAgICpodCA9IG5ldHNubXBfY2VydF9wYXJzZV9oYXNoX3R5cGUoJmZwWzJdKTsKKyAgICAgICAgCisgICAgICAgIC8qKiBzZXQgdXAgZm9yIGZpbmdlcnByaW50ICovCisgICAgICAgICpmcF9sZW4gPSBmcF9sZW5fc2F2ZTsKKyAgICAgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmZnAsIGZwX2xlbik7CisgICAgICAgIGZwWypmcF9sZW5dID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICAqaHQgPSBOU19IQVNIX1NIQTE7CisgICAgbmV0c25tcF9mcF9sb3dlcmNhc2VfYW5kX3N0cmlwX2NvbG9uKGZwKTsKKyAgICAqZnBfbGVuID0gc3RybGVuKGZwKTsKKyAgICAKKyAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZpZCwgaWRfbGVuKTsKKyAgICBpZFsqaWRfbGVuXSA9IDA7CisgICAgCisgICAgaWYgKCpodCA8PSBOU19IQVNIX05PTkUgfHwgKmh0ID4gTlNfSEFTSF9NQVgpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBhbGdvcml0aG0gZm9yIGZpbmdlcnByaW50Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKDAgPT0gKmZwX2xlbikgJiYgKCgwID09ICppZF9sZW4gfHwgKCppZF9sZW4gPT0gMSAmJiBpZFswXSA9PSAnKicpKSkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogZW1wdHkgZmluZ2VycHJpbnQgbm90IGFsbG93ZWQgd2l0aCAnKicgaWRlbnRpdHkKKyAgICAgICAgICovCisgICAgICAgIGNvbmZpZ19wZXJyb3IoIm11c3Qgc3BlY2lmeSBmaW5nZXJwcmludCBmb3IgJyonIGlkZW50aXR5Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX3Rsc3RtQWRkcl9hZGQoc25tcFRsc3RtQWRkciAqZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkcjphZGQiLCAiYWRkaW5nIGVudHJ5IDB4JWx4ICVzICVzXG4iLAorICAgICAgICAgICAgICAgICh1X2xvbmcpZW50cnksIGVudHJ5LT5uYW1lLCBlbnRyeS0+ZmluZ2VycHJpbnQpKTsKKyAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChfdGxzdG1BZGRyLCBlbnRyeSkgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGluc2VydCBhZGRyICVzIiwgZW50cnktPm5hbWUpOworICAgICAgICBuZXRzbm1wX3Rsc3RtQWRkcl9mcmVlKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1BRERSX1JFTU9WRQoraW50CituZXRzbm1wX3Rsc3RtQWRkcl9yZW1vdmUoc25tcFRsc3RtQWRkciAqZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKENPTlRBSU5FUl9SRU1PVkUoX3Rsc3RtQWRkciwgZW50cnkpICE9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCByZW1vdmUgYWRkciAlcyIsIGVudHJ5LT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1BRERSX1JFTU9WRSAqLworCitzdGF0aWMgdm9pZAorX3BhcnNlX2FkZHIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit7CisgICAgc25tcFRsc3RtQWRkciAqZW50cnk7CisgICAgY2hhciAgICAgICAgICAgbmFtZVtTTk1QQURNSU5MRU5HVEggICsgMV0sIGlkW1NOTVBBRE1JTkxFTkdUSCAgKyAxXSwKKyAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludFtTTk1QVExTRklOR0VSUFJJTlRfTUFYX0xFTiArIDFdOworICAgIHNpemVfdCAgICAgICAgIG5hbWVfbGVuID0gc2l6ZW9mKG5hbWUpLCBpZF9sZW4gPSBzaXplb2YoaWQpLAorICAgICAgICAgICAgICAgICAgIGZwX2xlbiA9IHNpemVvZihmaW5nZXJwcmludCk7CisgICAgdV9jaGFyICAgICAgICAgaGFzaFR5cGU7CisgICAgaW50ICAgICAgICAgICAgcmM7CisKKyAgICByYyA9IG5ldHNubXBfdGxzdG1BZGRyX3Jlc3RvcmVfY29tbW9uKCZsaW5lLCBuYW1lLCAmbmFtZV9sZW4sIGlkLCAmaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQsICZmcF9sZW4sICZoYXNoVHlwZSk7CisgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKE5VTEwgIT0gbGluZSkKKyAgICAgICAgY29uZmlnX3B3YXJuKCJpZ25vcmUgZXh0cmEgdG9rZW5zIG9uIGxpbmUiKTsKKworICAgIGVudHJ5ID0gbmV0c25tcF90bHN0bUFkZHJfY3JlYXRlKG5hbWUpOworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBlbnRyeS0+ZmxhZ3MgfD0gVExTVE1fQUREUl9GUk9NX0NPTkZJRzsKKyAgICBlbnRyeS0+aGFzaFR5cGUgPSBoYXNoVHlwZTsKKyAgICBpZiAoZnBfbGVuKQorICAgICAgICBlbnRyeS0+ZmluZ2VycHJpbnQgPSBzdHJkdXAoZmluZ2VycHJpbnQpOworICAgIGlmIChpZF9sZW4pCisgICAgICAgIGVudHJ5LT5pZGVudGl0eSA9IHN0cmR1cChpZCk7CisKKyAgICBuZXRzbm1wX3Rsc3RtQWRkcl9hZGQoZW50cnkpOworfQorCitzdGF0aWMgY2hhciAqCitfZmluZF90bHN0bUFkZHJfZmluZ2VycHJpbnQoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzbm1wVGxzdG1BZGRyICAgIGxvb2t1cF9rZXksICpyZXN1bHQ7CisKKyAgICBpZiAoTlVMTCA9PSBuYW1lKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGxvb2t1cF9rZXkubmFtZSA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLCBuYW1lKTsKKworICAgIHJlc3VsdCA9IENPTlRBSU5FUl9GSU5EKF90bHN0bUFkZHIsICZsb29rdXBfa2V5KTsKKyAgICBpZiAoTlVMTCA9PSByZXN1bHQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHJlc3VsdC0+ZmluZ2VycHJpbnQ7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTUFERFJfR0VUX1NFUlZFUklECitjaGFyICoKK25ldHNubXBfdGxzdG1BZGRyX2dldF9zZXJ2ZXJJZChjb25zdCBjaGFyICpuYW1lKQoreworICAgIHNubXBUbHN0bUFkZHIgICAgbG9va3VwX2tleSwgKnJlc3VsdDsKKworICAgIGlmIChOVUxMID09IG5hbWUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbG9va3VwX2tleS5uYW1lID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciosIG5hbWUpOworCisgICAgcmVzdWx0ID0gQ09OVEFJTkVSX0ZJTkQoX3Rsc3RtQWRkciwgJmxvb2t1cF9rZXkpOworICAgIGlmIChOVUxMID09IHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gcmVzdWx0LT5pZGVudGl0eTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNQUREUl9HRVRfU0VSVkVSSUQgKi8KKy8qCisgKiBFTkQgc25tcFRsc3RtQWRkclRhYmxlIGRhdGEKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2Vsc2UKK25ldHNubXBfZmVhdHVyZV91bnVzZWQoY2VydF91dGlsKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfVVRJTCAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChjZXJ0X3V0aWwpOworI2VuZGlmIC8qIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvY2hlY2tfdmFyYmluZC5jIGIvc25tcGxpYi9jaGVja192YXJiaW5kLmMKaW5kZXggYzY2ZjA3My4uMTJiN2E1MiAxMDA2NDQKLS0tIGEvc25tcGxpYi9jaGVja192YXJiaW5kLmMKKysrIGIvc25tcGxpYi9jaGVja192YXJiaW5kLmMKQEAgLTEsOSArMSwyNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192YXJiaW5kX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX3JhbmdlLCBjaGVja192YXJiaW5kX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl9zaXplX3JhbmdlLCBjaGVja192YXJiaW5kX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl91aW50LCBjaGVja192YXJiaW5kX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl9zdG9yYWdldHlwZSwgY2hlY2tfdmFyYmluZF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfb2lkLCBjaGVja192YXJiaW5kX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSwgY2hlY2tfdmFyYmluZF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUsIGNoZWNrX3ZhcmJpbmRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlLCBjaGVja192YXJiaW5kX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl90cnV0aHZhbHVlLCBjaGVja192YXJiaW5kX2FsbCkKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NIRUNLX1ZCX1JPV1NUQVRVU19XSVRIX1NUT1JBR0VUWVBFCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZV90cmFuc2l0aW9uKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFU19DSEVDS19WQl9ST1dTVEFUVVNfV0lUSF9TVE9SQUdFVFlQRSAqLworCisKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl90eXBlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCBpbnQgdHlwZSApCiB7CkBAIC00OSw2ICs2Nyw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfUkFOR0UKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl9yYW5nZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvdywgc2l6ZV90IGhpZ2ggKQpAQCAtNTgsMTMgKzc3LDE1IEBACiAgICAgaWYgKE5VTEwgPT0gdmFyKQogICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIAotICAgIGlmICgoKnZhci0+dmFsLmludGVnZXIgPCBsb3cpIHx8ICgqdmFyLT52YWwuaW50ZWdlciA+IGhpZ2gpKSB7CisgICAgaWYgKCgoc2l6ZV90KSp2YXItPnZhbC5pbnRlZ2VyIDwgbG93KSB8fCAoKHNpemVfdCkqdmFyLT52YWwuaW50ZWdlciA+IGhpZ2gpKSB7CiAgICAgICAgIHJjID0gU05NUF9FUlJfV1JPTkdWQUxVRTsKICAgICB9CiAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9SQU5HRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfU0laRV9SQU5HRQogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3NpemVfcmFuZ2UoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvdywgc2l6ZV90IGhpZ2ggKQpAQCAtODAsNiArMTAxLDcgQEAKIAogICAgIHJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1NJWkVfUkFOR0UgKi8KIAogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsCkBAIC05OCw2ICsxMjAsNyBAQAogICAgIHJldHVybiByYzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1RZUEVfQU5EX01BWF9TSVpFCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIHNpemVfdCBzaXplKQpAQCAtMTE0LDcgKzEzNyw5IEBACiAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9UWVBFX0FORF9NQVhfU0laRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfT0lECiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfb2lkKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKQogewpAQCAtMTMwLDYgKzE1NSw3IEBACiAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9PSUQgKi8KIAogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX2ludChjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcikKQEAgLTE0MCw2ICsxNjYsNyBAQAogICAgIHJldHVybiBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUodmFyLCBBU05fSU5URUdFUiwgc2l6ZW9mKGxvbmcpKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1VJTlQKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl91aW50KGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKQogewpAQCAtMTQ4LDYgKzE3NSw3IEBACiAgICAgCiAgICAgcmV0dXJuIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZSh2YXIsIEFTTl9VTlNJR05FRCwgc2l6ZW9mKGxvbmcpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1VJTlQgKi8KIAogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgaW50IGxvdywgaW50IGhpZ2gpCkBAIC0xNjcsNiArMTk1LDcgQEAKICAgICByZXR1cm4gcmM7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9UUlVUSFZBTFVFCiBpbnQKIG5ldHNubXBfY2hlY2tfdmJfdHJ1dGh2YWx1ZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcikKIHsKQEAgLTE4MCw2ICsyMDksNyBAQAogICAgIAogICAgIHJldHVybiBuZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZSh2YXIsIDEsIDIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfVFJVVEhWQUxVRSAqLwogCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3ZhbHVlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKQpAQCAtMjEzLDYgKzI0MywyNiBAQAogICAgIHJldHVybiBjaGVja19yb3dzdGF0dXNfdHJhbnNpdGlvbihvbGRfdmFsdWUsICp2YXItPnZhbC5pbnRlZ2VyKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1JPV1NUQVRVU19XSVRIX1NUT1JBR0VUWVBFCitpbnQKK25ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvbGRfdmFsdWUsIGludCBvbGRfc3RvcmFnZSkKK3sKKyAgICByZWdpc3RlciBpbnQgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgaWYgKE5VTEwgPT0gdmFyKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgaWYgKChyYyA9IG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3ZhbHVlKHZhcikpKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gY2hlY2tfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGVfdHJhbnNpdGlvbihvbGRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZhci0+dmFsLmludGVnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3N0b3JhZ2UpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfUk9XU1RBVFVTX1dJVEhfU1RPUkFHRVRZUEUgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1NUT1JBR0VUWVBFCiBpbnQKIG5ldHNubXBfY2hlY2tfdmJfc3RvcmFnZXR5cGUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsIGludCBvbGRfdmFsdWUpCiB7CkBAIC0yMzAsMyArMjgwLDQgQEAKICAgICAgICAgCiAgICAgcmV0dXJuIGNoZWNrX3N0b3JhZ2VfdHJhbnNpdGlvbihvbGRfdmFsdWUsICp2YXItPnZhbC5pbnRlZ2VyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1NUT1JBR0VUWVBFICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2Nsb3NlZGlyLmMgYi9zbm1wbGliL2Nsb3NlZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0YzUwZQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvY2xvc2VkaXIuYwpAQCAtMCwwICsxLDIwIEBACisvKgorICogY2xvc2VkaXIoKSByZXBsYWNlbWVudCBmb3IgTVNWQy4KKyAqLworCisjZGVmaW5lIFdJTjMySU9fSVNfU1RESU8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKworLyoKKyAqIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgb3BlbmRpciAKKyAqLworaW50CitjbG9zZWRpcihESVIgKiBkaXJwKQoreworICAgIGZyZWUoZGlycC0+c3RhcnQpOworICAgIGZyZWUoZGlycCk7CisgICAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL2NtdV9jb21wYXQuYyBiL3NubXBsaWIvY211X2NvbXBhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDQ1YWJhLi4wMDAwMDAwCi0tLSBhL3NubXBsaWIvY211X2NvbXBhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWZkZWYgQ01VX0NPTVBBVElCTEUKLQotI2luY2x1ZGUgPG5ldC1zbm1wL21pYl9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9wZHVfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvc2Vzc2lvbl9hcGkuaD4KLQotaW50Ci1taWJfVHh0VG9PaWQoY2hhciAqQnVmLCBvaWQgKiogT2lkUCwgc2l6ZV90ICogTGVuUCkKLXsKLSAgICByZXR1cm4gcmVhZF9vYmppZChCdWYsICpPaWRQLCBMZW5QKTsKLX0KLQotaW50Ci1taWJfT2lkVG9UeHQob2lkICogTywgc2l6ZV90IE9pZExlbiwgY2hhciAqQnVmLCBzaXplX3QgQnVmTGVuKQotewotICAgIF9zcHJpbnRfb2JqaWQoQnVmLCBPLCBPaWRMZW4pOwotICAgIHJldHVybiAxOwotfQotCi0KLS8qCi0gKiBjbXVfc25tcF9wYXJzZSAtIGVtdWxhdGUgQ01VIGxpYnJhcnkncyBzbm1wX3BhcnNlLgotICoKLSAqIFBhcnNlIHBhY2tldCwgc3RvcmluZyByZXN1bHRzIGludG8gUERVLgotICogUmV0dXJucyBjb21tdW5pdHkgc3RyaW5nIGlmIHN1Y2Nlc3MsIE5VTEwgaWYgZmFpbC4KLSAqIFdBUk5JTkc6IG1heSByZXR1cm4gYSB6ZXJvIGxlbmd0aCBjb21tdW5pdHkgc3RyaW5nLgotICoKLSAqIE5vdGU6Ci0gKiBTb21lIENNVS1hd2FyZSBhcHBzIGNhbGwgaW5pdF9taWIoKSwgYnV0IGRvIG5vdAotICogaW5pdGlhbGl6ZSBhIHNlc3Npb24uCi0gKiBDaGVjayBSZXFpZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIG1vZHVsZSBpcyBpbml0aWFsaXplZC4KLSAqLwotCi11X2NoYXIgICAgICAgICAqCi1jbXVfc25tcF9wYXJzZShuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLAotICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICB1X2NoYXIgICAgICAgICAqYnVmcCA9IE5VTEw7Ci0KLSAgICBzbm1wX3Nlc3NfaW5pdChzZXNzaW9uKTsgICAgLyogZ2ltbWUgYSBicmVhayEgKi8KLQotICAgIHN3aXRjaCAocGR1LT52ZXJzaW9uKSB7Ci0gICAgY2FzZSBTTk1QX1ZFUlNJT05fMToKLSAgICBjYXNlIFNOTVBfVkVSU0lPTl8yYzoKLSAgICBjYXNlIFNOTVBfREVGQVVMVF9WRVJTSU9OOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0jaWZuZGVmIE5PX0lOVEVSTkFMX1ZBUkxJU1QKLSAgICBpZiAoc25tcF9wYXJzZSgwLCBzZXNzaW9uLCBwZHUsIGRhdGEsIGxlbmd0aCkgIT0gU05NUF9FUlJfTk9FUlJPUikgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0jZWxzZQotICAgIC8qCi0gICAgICogd2hpbGUgdGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiB2YXJpYWJsZV9saXN0OgotICAgICAqIHVzZSBhbiBpbnRlcm5hbCB2YXJpYWJsZSBsaXN0IGZvciBzbm1wX3BhcnNlOwotICAgICAqIGNsb25lIHRoZSByZXN1bHQuCi0gICAgICovCi0gICAgaWYgKDEpIHsKLSAgICAgICAgbmV0c25tcF9wZHUgICAgKnNubXBfY2xvbmVfcGR1KG5ldHNubXBfcGR1ICopOwotICAgICAgICBuZXRzbm1wX3BkdSAgICAqc25tcF8yY2xvbmVfcGR1KG5ldHNubXBfcGR1ICpmcm9tX3BkdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqdG9fcGR1KTsKLQotICAgICAgICBuZXRzbm1wX3BkdSAgICAqaXBkdTsKLSAgICAgICAgaXBkdSA9IHNubXBfY2xvbmVfcGR1KHBkdSk7Ci0gICAgICAgIGlmIChzbm1wX3BhcnNlKDAsIHNlc3Npb24sIGlwZHUsIGRhdGEsIGxlbmd0aCkgIT0gU05NUF9FUlJfTk9FUlJPUikgewotICAgICAgICAgICAgc25tcF9mcmVlX2ludGVybmFsX3BkdShpcGR1KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHBkdSA9IHNubXBfMmNsb25lX3BkdShpcGR1LCBwZHUpOwotICAgICAgICBzbm1wX2ZyZWVfaW50ZXJuYWxfcGR1KGlwZHUpOwotICAgIH0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTk9fSU5URVJOQUxfVkFSX0xJU1QgKi8KLQotICAgIC8qCi0gICAgICogQWRkIGEgbnVsbCB0byBtZWV0IHRoZSBjYWxsZXIncyBleHBlY3RhdGlvbnMuIAotICAgICAqLwotCi0gICAgYnVmcCA9ICh1X2NoYXIgKikgbWFsbG9jKDEgKyBwZHUtPmNvbW11bml0eV9sZW4pOwotICAgIGlmIChidWZwICYmIHBkdS0+Y29tbXVuaXR5X2xlbikgewotICAgICAgICBtZW1jcHkoYnVmcCwgcGR1LT5jb21tdW5pdHksIHBkdS0+Y29tbXVuaXR5X2xlbik7Ci0gICAgICAgIGJ1ZnBbcGR1LT5jb21tdW5pdHlfbGVuXSA9ICdcMCc7Ci0gICAgfQotICAgIHJldHVybiAoYnVmcCk7Ci19Ci0KLQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDTVVfQ09NUEFUSUJMRSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jb250YWluZXIuYyBiL3NubXBsaWIvY29udGFpbmVyLmMKaW5kZXggMDhhNGM2My4uYjJhYzk3ZSAxMDA2NDQKLS0tIGEvc25tcGxpYi9jb250YWluZXIuYworKysgYi9zbm1wbGliL2NvbnRhaW5lci5jCkBAIC0xLDEwICsxLDM5IEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2ZhY3RvcmllcywgY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfdHlwZXMsIGNvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2NvbXBhcmUsIGNvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2R1cCwgY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfZnJlZV9hbGwsIGNvbnRhaW5lcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3ViY29udGFpbmVyX2ZpbmQsIGNvbnRhaW5lcl9hbGwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfbmNvbXBhcmVfY3N0cmluZywgY29udGFpbmVyX2NvbXBhcmUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2NvbXBhcmVfbWVtLCBjb250YWluZXJfY29tcGFyZSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfY29tcGFyZV9sb25nLCBjb250YWluZXJfY29tcGFyZSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfY29tcGFyZV91bG9uZywgY29udGFpbmVyX2NvbXBhcmUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2NvbXBhcmVfaW50MzIsIGNvbnRhaW5lcl9jb21wYXJlKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9jb21wYXJlX3VpbnQzMiwgY29udGFpbmVyX2NvbXBhcmUpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfZmluZF9mYWN0b3J5LCBjb250YWluZXJfZmFjdG9yaWVzKQorCiAvKiogQGRlZmdyb3VwIGNvbnRhaW5lciBjb250YWluZXIKICAqLwogCkBAIC01MiwyOSArODEsNDEgQEAKICAgICAgKi8KICAgICBjb250YWluZXJzID0gbmV0c25tcF9jb250YWluZXJfZ2V0X2JpbmFyeV9hcnJheSgpOwogICAgIGNvbnRhaW5lcnMtPmNvbXBhcmUgPSBuZXRzbm1wX2NvbXBhcmVfY3N0cmluZzsKKyAgICBjb250YWluZXJzLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiY29udGFpbmVyIGxpc3QiKTsKIAogICAgIC8qCiAgICAgICogcmVnaXN0ZXIgY29udGFpbmVycwogICAgICAqLwogICAgIG5ldHNubXBfY29udGFpbmVyX2JpbmFyeV9hcnJheV9pbml0KCk7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0xJTktFRF9MSVNUCiAgICAgbmV0c25tcF9jb250YWluZXJfc3NsbF9pbml0KCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTElOS0VEX0xJU1QgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTlVMTAogICAgIG5ldHNubXBfY29udGFpbmVyX251bGxfaW5pdCgpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX05VTEwgKi8KIAogICAgIC8qCiAgICAgICogZGVmYXVsdCBhbGlhc2VzIGZvciBzb21lIGNvbnRhaW5lcnMKICAgICAgKi8KICAgICBuZXRzbm1wX2NvbnRhaW5lcl9yZWdpc3RlcigidGFibGVfY29udGFpbmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfZmFjdG9yeSgiYmluYXJ5X2FycmF5IikpOworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0xJTktFRF9MSVNUCiAgICAgbmV0c25tcF9jb250YWluZXJfcmVnaXN0ZXIoImxpbmtlZF9saXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfZmFjdG9yeSgic29ydGVkX3NpbmdseV9saW5rZWRfbGlzdCIpKTsKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9yZWdpc3Rlcigic3NsbF9jb250YWluZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2dldF9mYWN0b3J5KCJzb3J0ZWRfc2luZ2x5X2xpbmtlZF9saXN0IikpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0xJTktFRF9MSVNUICovCisKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl9yZWdpc3Rlcl93aXRoX2NvbXBhcmUKKyAgICAgICAgKCJjc3RyaW5nIiwgbmV0c25tcF9jb250YWluZXJfZ2V0X2ZhY3RvcnkoImJpbmFyeV9hcnJheSIpLAorICAgICAgICAgbmV0c25tcF9jb21wYXJlX2RpcmVjdF9jc3RyaW5nKTsKIAogICAgIG5ldHNubXBfY29udGFpbmVyX3JlZ2lzdGVyX3dpdGhfY29tcGFyZQogICAgICAgICAoInN0cmluZyIsIG5ldHNubXBfY29udGFpbmVyX2dldF9mYWN0b3J5KCJiaW5hcnlfYXJyYXkiKSwKICAgICAgICAgIG5ldHNubXBfY29tcGFyZV9jc3RyaW5nKTsKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9yZWdpc3Rlcl93aXRoX2NvbXBhcmUKLSAgICAgICAgKCJzdHJpbmc6YmluYXJ5X2FycmF5IiwgbmV0c25tcF9jb250YWluZXJfZ2V0X2ZhY3RvcnkoImJpbmFyeV9hcnJheSIpLAorICAgICAgICAoInN0cmluZ19iaW5hcnlfYXJyYXkiLCBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfZmFjdG9yeSgiYmluYXJ5X2FycmF5IiksCiAgICAgICAgICBuZXRzbm1wX2NvbXBhcmVfY3N0cmluZyk7CiAKIH0KQEAgLTE1MSw2ICsxOTIsNyBAQAogICAgIHJldHVybiBmb3VuZCA/IGZvdW5kLT5mYWN0b3J5IDogTlVMTDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9GSU5EX0ZBQ1RPUlkKIG5ldHNubXBfZmFjdG9yeSAqCiBuZXRzbm1wX2NvbnRhaW5lcl9maW5kX2ZhY3RvcnkoY29uc3QgY2hhciAqdHlwZV9saXN0KQogewpAQCAtMTczLDYgKzIxNSw3IEBACiAgICAgZnJlZShsaXN0KTsKICAgICByZXR1cm4gZjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9GSU5EX0ZBQ1RPUlkgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwpAQCAtMjcxLDggKzMxNCw2IEBACiAgICAgbmV3X2luZGV4LT5wcmV2ID0gY3VycjsKIH0KIAotI2lmbmRlZiBORVRTTk1QX1VTRV9JTkxJTkUgLyogZGVmYXVsdCBpcyB0byBpbmxpbmUgKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgaW5saW5lIHZlcnNpb24gaW4KICAqIGNvbnRhaW5lci5oLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KQEAgLTMyMyw3ICszNjQsOCBAQAogICAgICAgICByYzIgPSB4LT5yZW1vdmUoeCxrKTsKICAgICAgICAgLyoqIGlnbm9yZSByZW1vdmUgZXJyb3JzIGlmIHRoZXJlIGlzIGEgZmlsdGVyIGluIHBsYWNlICovCiAgICAgICAgIGlmICgocmMyKSAmJiAoTlVMTCA9PSB4LT5pbnNlcnRfZmlsdGVyKSkgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3Igb24gc3ViY29udGFpbmVyIHJlbW92ZSAoJWQpXG4iLCByYzIpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3Igb24gc3ViY29udGFpbmVyICclcycgcmVtb3ZlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICB4LT5jb250YWluZXJfbmFtZSA/IHgtPmNvbnRhaW5lcl9uYW1lIDogIiIsIHJjMik7CiAgICAgICAgICAgICByYyA9IHJjMjsKICAgICAgICAgfQogICAgICAgICB4ID0geC0+cHJldjsKQEAgLTMzMyw2ICszNzUsMjIgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbgorICogY29udGFpbmVyLmMuIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgorICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0RVUAorbmV0c25tcF9jb250YWluZXIgKkNPTlRBSU5FUl9EVVAobmV0c25tcF9jb250YWluZXIgKngsIHZvaWQgKmN0eCwgdV9pbnQgZmxhZ3MpCit7CisgICAgaWYgKE5VTEwgPT0geC0+ZHVwbGljYXRlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb250YWluZXIgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGR1cGxpY2F0ZVxuIiwKKyAgICAgICAgICAgICAgICAgeC0+Y29udGFpbmVyX25hbWUgPyB4LT5jb250YWluZXJfbmFtZSA6ICIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiB4LT5kdXBsaWNhdGUoeCwgY3R4LCBmbGFncyk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRFVQICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGlubGluZSB2ZXJzaW9uIGluCiAgKiBjb250YWluZXIuaC4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCiAgKi8KQEAgLTM0NSwxNCArNDAzLDE3IEBACiAgICAgICAgIHggPSB4LT5uZXh0OwogICAgIHdoaWxlKHgpIHsKICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKnRtcDsKKyAgICAgICAgY2hhciAqbmFtZTsKICAgICAgICAgdG1wID0geC0+cHJldjsKLSAgICAgICAgaWYgKE5VTEwgIT0geC0+Y29udGFpbmVyX25hbWUpCi0gICAgICAgICAgICBTTk1QX0ZSRUUoeC0+Y29udGFpbmVyX25hbWUpOworICAgICAgICBuYW1lID0geC0+Y29udGFpbmVyX25hbWU7CisgICAgICAgIHgtPmNvbnRhaW5lcl9uYW1lID0gTlVMTDsKICAgICAgICAgcmMyID0geC0+Y2ZyZWUoeCk7CiAgICAgICAgIGlmIChyYzIpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIG9uIHN1YmNvbnRhaW5lciBjZnJlZSAoJWQpXG4iLCByYzIpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3Igb24gc3ViY29udGFpbmVyICclcycgY2ZyZWUgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWUgPyBuYW1lIDogIiIsIHJjMik7CiAgICAgICAgICAgICByYyA9IHJjMjsKICAgICAgICAgfQorICAgICAgICBTTk1QX0ZSRUUobmFtZSk7CiAgICAgICAgIHggPSB0bXA7CiAgICAgfQogICAgIHJldHVybiByYzsKQEAgLTM4MCw2ICs0NDEsMTkgQEAKICAgICB4LT5jbGVhcih4LCBmLCBjKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9GUkVFX0FMTAorLyoKKyAqIGNsZWFyIGFsbCBjb250YWluZXJzLiBXaGVuIGNsZWFyaW5nIHRoZSAqZmlyc3QqIGNvbnRhaW5lciwgYW5kCisgKiAqb25seSogdGhlIGZpcnN0IGNvbnRhaW5lciwgY2FsbCB0aGUgZnJlZV9pdGVtIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uCisgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFsbCBjb250YWluZXJzIHNob3VsZCBiZSBlbXB0eS4KKyAqLwordm9pZCBDT05UQUlORVJfRlJFRV9BTEwobmV0c25tcF9jb250YWluZXIgKngsIHZvaWQgKmMpCit7CisgICAgQ09OVEFJTkVSX0NMRUFSKHgsIHgtPmZyZWVfaXRlbSwgYyk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRlJFRV9BTEwgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NVQkNPTlRBSU5FUl9GSU5ECiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluCiAgKiBjb250YWluZXIuYy4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCkBAIC00MDMsNyArNDc3LDcgQEAKICAgICB9CiAgICAgcmV0dXJuIHg7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NVQkNPTlRBSU5FUl9GSU5EICovCiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQyOCw2ICs1MDIsMjYgQEAKICAgICBjLT5pbnNlcnQgPSBpbnM7CiAgICAgYy0+cmVtb3ZlID0gcmVtOwogICAgIGMtPmZpbmQgPSBmbmQ7CisgICAgYy0+ZnJlZV9pdGVtID0gbmV0c25tcF9jb250YWluZXJfc2ltcGxlX2ZyZWU7Cit9CisKK2ludAorbmV0c25tcF9jb250YWluZXJfZGF0YV9kdXAobmV0c25tcF9jb250YWluZXIgKmR1cCwgbmV0c25tcF9jb250YWluZXIgKmMpCit7CisgICAgaWYgKCFkdXAgfHwgIWMpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChjLT5jb250YWluZXJfbmFtZSkKKyAgICAgICAgZHVwLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cChjLT5jb250YWluZXJfbmFtZSk7CisgICAgZHVwLT5jb21wYXJlID0gYy0+Y29tcGFyZTsKKyAgICBkdXAtPm5jb21wYXJlID0gYy0+bmNvbXBhcmU7CisgICAgZHVwLT5yZWxlYXNlID0gYy0+cmVsZWFzZTsKKyAgICBkdXAtPmluc2VydF9maWx0ZXIgPSBjLT5pbnNlcnRfZmlsdGVyOworICAgIGR1cC0+ZnJlZV9pdGVtID0gYy0+ZnJlZV9pdGVtOworICAgIGR1cC0+c3luYyA9IGMtPnN5bmM7CisgICAgZHVwLT5mbGFncyA9IGMtPmZsYWdzOworCisgICAgcmV0dXJuIDA7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00ODcsNiArNTgxLDcgQEAKICAgICAgICAgICAgICAgICAgICgoY29uc3QgY29udGFpbmVyX3R5cGUqKXJocyktPm5hbWUpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX05DT01QQVJFX0NTVFJJTkcKIGludAogbmV0c25tcF9uY29tcGFyZV9jc3RyaW5nKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpCiB7CkBAIC00OTQsNiArNTg5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgKChjb25zdCBjb250YWluZXJfdHlwZSopcmhzKS0+bmFtZSwKICAgICAgICAgICAgICAgICAgICBzdHJsZW4oKChjb25zdCBjb250YWluZXJfdHlwZSopcmhzKS0+bmFtZSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX05DT01QQVJFX0NTVFJJTkcgKi8KKworaW50CituZXRzbm1wX2NvbXBhcmVfZGlyZWN0X2NzdHJpbmcoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocykKK3sKKyAgICByZXR1cm4gc3RyY21wKChjb25zdCBjaGFyKilsaHMsIChjb25zdCBjaGFyKilyaHMpOworfQogCiAvKgogICogY29tcGFyZSB0d28gbWVtb3J5IGJ1ZmZlcnMKQEAgLTUwMiw2ICs2MDQsNyBAQAogICogY29tcGFyZSB1cCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzbWFsbGVyLCBhbmQgdGhlbiB1c2UgbGVuZ3RoIHRvCiAgKiBicmVhayBhbnkgdGllcy4KICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX01FTQogaW50CiBuZXRzbm1wX2NvbXBhcmVfbWVtKGNvbnN0IGNoYXIgKiBsaHMsIHNpemVfdCBsaHNfbGVuLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcmhzLCBzaXplX3QgcmhzX2xlbikKQEAgLTUxOCw2ICs2MjEsNzkgQEAKIAogICAgIHJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX01FTSAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfTE9ORworaW50CituZXRzbm1wX2NvbXBhcmVfbG9uZyhjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKQoreworICAgIHR5cGVkZWYgc3RydWN0IHsgbG9uZyBpbmRleDsgfSBkdW1teTsKKworICAgIGNvbnN0IGR1bW15ICpsaGQgPSAoY29uc3QgZHVtbXkqKWxoczsKKyAgICBjb25zdCBkdW1teSAqcmhkID0gKGNvbnN0IGR1bW15KilyaHM7CisKKyAgICBpZiAobGhkLT5pbmRleCA8IHJoZC0+aW5kZXgpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChsaGQtPmluZGV4ID4gcmhkLT5pbmRleCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX0xPTkcgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX1VMT05HCitpbnQKK25ldHNubXBfY29tcGFyZV91bG9uZyhjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKQoreworICAgIHR5cGVkZWYgc3RydWN0IHsgdV9sb25nIGluZGV4OyB9IGR1bW15OworCisgICAgY29uc3QgZHVtbXkgKmxoZCA9IChjb25zdCBkdW1teSopbGhzOworICAgIGNvbnN0IGR1bW15ICpyaGQgPSAoY29uc3QgZHVtbXkqKXJoczsKKworICAgIGlmIChsaGQtPmluZGV4IDwgcmhkLT5pbmRleCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKGxoZC0+aW5kZXggPiByaGQtPmluZGV4KQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfVUxPTkcgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX0lOVDMyCitpbnQKK25ldHNubXBfY29tcGFyZV9pbnQzMihjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKQoreworICAgIHR5cGVkZWYgc3RydWN0IHsgaW50MzJfdCBpbmRleDsgfSBkdW1teTsKKworICAgIGNvbnN0IGR1bW15ICpsaGQgPSAoY29uc3QgZHVtbXkqKWxoczsKKyAgICBjb25zdCBkdW1teSAqcmhkID0gKGNvbnN0IGR1bW15KilyaHM7CisKKyAgICBpZiAobGhkLT5pbmRleCA8IHJoZC0+aW5kZXgpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChsaGQtPmluZGV4ID4gcmhkLT5pbmRleCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX0lOVDMyICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9VSU5UMzIKK2ludAorbmV0c25tcF9jb21wYXJlX3VpbnQzMihjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKQoreworICAgIHR5cGVkZWYgc3RydWN0IHsgdWludDMyX3QgaW5kZXg7IH0gZHVtbXk7CisKKyAgICBjb25zdCBkdW1teSAqbGhkID0gKGNvbnN0IGR1bW15KilsaHM7CisgICAgY29uc3QgZHVtbXkgKnJoZCA9IChjb25zdCBkdW1teSopcmhzOworCisgICAgaWYgKGxoZC0+aW5kZXggPCByaGQtPmluZGV4KQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAobGhkLT5pbmRleCA+IHJoZC0+aW5kZXgpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9VSU5UMzIgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIG5ldHNubXBfY29udGFpbmVyX3NpbXBsZV9mcmVlCmRpZmYgLS1naXQgYS9zbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYyBiL3NubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jCmluZGV4IDQzZWZjNGIuLjBmNWNmNjIgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jCisrKyBiL3NubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jCkBAIC0zNiw5ICszNiw3IEBACiB0eXBlZGVmIHN0cnVjdCBiaW5hcnlfYXJyYXlfdGFibGVfcyB7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgbWF4X3NpemU7ICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBkYXRhIHRhYmxlICovCiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgY291bnQ7ICAgICAgLyogSW5kZXggb2YgdGhlIG5leHQgZnJlZSBlbnRyeSAqLwotICAgIHVfaW50ICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAgIC8qIGZsYWdzICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgZGlydHk7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zaXplOyAgLyogU2l6ZSBvZiBhbiBpbmRpdmlkdWFsIGVudHJ5ICovCiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICoqZGF0YTsgICAgICAgLyogVGhlIHRhYmxlIGl0c2VsZiAqLwogfSBiaW5hcnlfYXJyYXlfdGFibGU7CiAKQEAgLTY2LDkgKzY0LDkgQEAKICAgICBtaWQgPSBkYXRhWyhmaXJzdCtsYXN0KS8yXTsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIHdoaWxlICggKCgqZikoZGF0YVtpXSwgbWlkKSA8IDApICYmIChpIDwgbGFzdCkpCisgICAgICAgIHdoaWxlIChpIDwgbGFzdCAmJiAoKmYpKGRhdGFbaV0sIG1pZCkgPCAwKQogICAgICAgICAgICAgKytpOwotICAgICAgICB3aGlsZSAoICgoKmYpKG1pZCwgZGF0YVtqXSkgPCAwKSAmJiAoaiA+IGZpcnN0KSkKKyAgICAgICAgd2hpbGUgKGogPiBmaXJzdCAmJiAoKmYpKG1pZCwgZGF0YVtqXSkgPCAwKQogICAgICAgICAgICAgLS1qOwogCiAgICAgICAgIGlmKGkgPCBqKSB7CkBAIC05OSw3ICs5Nyw3IEBACiAgICAgbmV0c25tcF9hc3NlcnQodCE9TlVMTCk7CiAgICAgbmV0c25tcF9hc3NlcnQoYy0+Y29tcGFyZSE9TlVMTCk7CiAKLSAgICBpZiAodC0+ZmxhZ3MgJiBDT05UQUlORVJfS0VZX1VOU09SVEVEKQorICAgIGlmIChjLT5mbGFncyAmIENPTlRBSU5FUl9LRVlfVU5TT1JURUQpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKHQtPmRpcnR5KSB7CkBAIC0xMTAsNiArMTA4LDkgQEAKICAgICAgICAgICAgIGFycmF5X3Fzb3J0KHQtPmRhdGEsIDAsIHQtPmNvdW50IC0gMSwgYy0+Y29tcGFyZSk7CiAgICAgICAgIHQtPmRpcnR5ID0gMDsKIAorICAgICAgICAvKgorICAgICAgICAgKiBubyB3YXkgdG8ga25vdyBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkLi4uIGp1c3QgYXNzdW1lIHNvLgorICAgICAgICAgKi8KICAgICAgICAgKytjLT5zeW5jOwogICAgIH0KIApAQCAtMTE3LDYgKzExOCwzMiBAQAogfQogCiBzdGF0aWMgaW50CitsaW5lYXJfc2VhcmNoKGNvbnN0IHZvaWQgKnZhbCwgbmV0c25tcF9jb250YWluZXIgKmMpCit7CisgICAgYmluYXJ5X2FycmF5X3RhYmxlICp0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7CisgICAgc2l6ZV90ICAgICAgICAgICAgIHBvcyA9IDA7CisKKyAgICBpZiAoIXQtPmNvdW50KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoISAoYy0+ZmxhZ3MgJiBDT05UQUlORVJfS0VZX1VOU09SVEVEKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibGluZWFyIHNlYXJjaCBvbiBzb3J0ZWQgY29udGFpbmVyICVzPyE/XG4iLAorICAgICAgICAgICAgICAgICBjLT5jb250YWluZXJfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKDsgcG9zIDwgdC0+Y291bnQ7ICsrcG9zKSB7CisgICAgICAgIGlmIChjLT5jb21wYXJlKHQtPmRhdGFbcG9zXSwgdmFsKSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHBvcyA+PSB0LT5jb3VudCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludAogYmluYXJ5X3NlYXJjaChjb25zdCB2b2lkICp2YWwsIG5ldHNubXBfY29udGFpbmVyICpjLCBpbnQgZXhhY3QpCiB7CiAgICAgYmluYXJ5X2FycmF5X3RhYmxlICp0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7CkBAIC0xMjksNiArMTU2LDE1IEBACiAgICAgaWYgKCFsZW4pCiAgICAgICAgIHJldHVybiAtMTsKIAorICAgIGlmIChjLT5mbGFncyAmIENPTlRBSU5FUl9LRVlfVU5TT1JURUQpIHsKKyAgICAgICAgaWYgKCFleGFjdCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vbi1leGFjdCBzZWFyY2ggb24gdW5zb3J0ZWQgY29udGFpbmVyICVzPyE/XG4iLAorICAgICAgICAgICAgICAgICAgICAgYy0+Y29udGFpbmVyX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaW5lYXJfc2VhcmNoKHZhbCwgYyk7CisgICAgfQorCiAgICAgaWYgKHQtPmRpcnR5KQogICAgICAgICBTb3J0X0FycmF5KGMpOwogCkBAIC0xODQsNyArMjIwLDYgQEAKICAgICB0LT5tYXhfc2l6ZSA9IDA7CiAgICAgdC0+Y291bnQgPSAwOwogICAgIHQtPmRpcnR5ID0gMDsKLSAgICB0LT5kYXRhX3NpemUgPSBzaXplb2Yodm9pZCopOwogICAgIHQtPmRhdGEgPSBOVUxMOwogCiAgICAgcmV0dXJuIHQ7CkBAIC0xOTQsOSArMjI5LDcgQEAKIG5ldHNubXBfYmluYXJ5X2FycmF5X3JlbGVhc2UobmV0c25tcF9jb250YWluZXIgKmMpCiB7CiAgICAgYmluYXJ5X2FycmF5X3RhYmxlICp0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7Ci0gICAgaWYgKHQtPmRhdGEgIT0gTlVMTCkgewotCVNOTVBfRlJFRSh0LT5kYXRhKTsKLSAgICB9CisgICAgU05NUF9GUkVFKHQtPmRhdGEpOwogICAgIFNOTVBfRlJFRSh0KTsKICAgICBTTk1QX0ZSRUUoYyk7CiB9CkBAIC0yMDQsMTEgKzIzNywxNiBAQAogaW50CiBuZXRzbm1wX2JpbmFyeV9hcnJheV9vcHRpb25zX3NldChuZXRzbm1wX2NvbnRhaW5lciAqYywgaW50IHNldCwgdV9pbnQgZmxhZ3MpCiB7Ci0gICAgYmluYXJ5X2FycmF5X3RhYmxlICp0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7Ci0gICAgaWYgKHNldCkKLSAgICAgICAgdC0+ZmxhZ3MgPSBmbGFnczsKKyNkZWZpbmUgQkFfRkxBR1MgKENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFU3xDT05UQUlORVJfS0VZX1VOU09SVEVEKQorCisgICAgaWYgKHNldCkgeworICAgICAgICBpZiAoKGZsYWdzICYgQkFfRkxBR1MpID09IGZsYWdzKQorICAgICAgICAgICAgYy0+ZmxhZ3MgPSBmbGFnczsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmxhZ3MgPSAodV9pbnQpLTE7IC8qIHVuc3VwcG9ydGVkIGZsYWcgKi8KKyAgICB9CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gKCh0LT5mbGFncyAmIGZsYWdzKSA9PSBmbGFncyk7CisgICAgICAgIHJldHVybiAoKGMtPmZsYWdzICYgZmxhZ3MpID09IGZsYWdzKTsKICAgICByZXR1cm4gZmxhZ3M7CiB9CiAKQEAgLTIzMiw3ICsyNzAsNyBAQAogICAgICAqIGlmIHRoZXJlIGlzIG5vIGRhdGEsIHJldHVybiBOVUxMOwogICAgICAqLwogICAgIGlmICghdC0+Y291bnQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCiAgICAgICogaWYgdGhlIHRhYmxlIGlzIGRpcnR5LCBzb3J0IGl0LgpAQCAtMjQ1LDE3ICsyODMsNzEgQEAKICAgICAgKi8KICAgICBpZiAoa2V5KSB7CiAgICAgICAgIGlmICgoaW5kZXggPSBiaW5hcnlfc2VhcmNoKGtleSwgYywgZXhhY3QpKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICghZXhhY3QgJiYKKyAgICAgICAgICAgIGMtPmZsYWdzICYgQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTKSB7CisgICAgICAgICAgICBpbnQgcmVzdWx0OworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSWYgZHVwbGljYXRlcyBhcmUgYWxsb3dlZCwgd2UgaGF2ZSB0byBiZSBleHRyYQorICAgICAgICAgICAgICogc3VyZSB0aGF0IHdlIGRpZG4ndCBqdXN0IGluY3JlbWVudCB0byBhIGR1cGxpY2F0ZSwKKyAgICAgICAgICAgICAqIHRodXMgY2F1c2luZyBhIGdldG5leHQgbG9vcC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmVzdWx0ID0gYy0+Y29tcGFyZSh0LT5kYXRhW2luZGV4XSwga2V5KTsKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gMCkgeworCQlERUJVR01TR1RMKCgiY29udGFpbmVyIiwic2tpcHBpbmcgZHVwbGljYXRlIGtleSBpbiAlc1xuIiwKKwkJCQkJICAgIGMtPmNvbnRhaW5lcl9uYW1lKSk7CisgICAgICAgICAgICAgICAgaWYgKCsraW5kZXggPT0gdC0+Y291bnQpCisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gYy0+Y29tcGFyZSh0LT5kYXRhW2luZGV4XSwga2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiB0LT5kYXRhW2luZGV4XTsKIH0KIAogaW50CituZXRzbm1wX2JpbmFyeV9hcnJheV9yZW1vdmVfYXQobmV0c25tcF9jb250YWluZXIgKmMsIHNpemVfdCBpbmRleCwgdm9pZCAqKnNhdmUpCit7CisgICAgYmluYXJ5X2FycmF5X3RhYmxlICp0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7CisKKyAgICBpZiAoc2F2ZSkKKyAgICAgICAgKnNhdmUgPSBOVUxMOworICAgIAorICAgIC8qCisgICAgICogaWYgdGhlcmUgaXMgbm8gZGF0YSwgcmV0dXJuIE5VTEw7CisgICAgICovCisgICAgaWYgKCF0LT5jb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKgorICAgICAqIGZpbmQgb2xkIGRhdGEgYW5kIHNhdmUgaXQsIGlmIHB0ciBwcm92aWRlZAorICAgICAqLworICAgIGlmIChzYXZlKQorICAgICAgICAqc2F2ZSA9IHQtPmRhdGFbaW5kZXhdOworCisgICAgLyoKKyAgICAgKiBpZiBlbnRyeSB3YXMgbGFzdCBpdGVtLCBqdXN0IGRlY3JlbWVudCBjb3VudAorICAgICAqLworICAgIC0tdC0+Y291bnQ7CisgICAgaWYgKGluZGV4ICE9IHQtPmNvdW50KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG90aGVyd2lzZSwgc2hpZnQgYXJyYXkgZG93bgorICAgICAgICAgKi8KKyAgICAgICAgbWVtbW92ZSgmdC0+ZGF0YVtpbmRleF0sICZ0LT5kYXRhW2luZGV4KzFdLAorICAgICAgICAgICAgICAgIHNpemVvZih2b2lkKikgKiAodC0+Y291bnQgLSBpbmRleCkpOworCisgICAgICAgICsrYy0+c3luYzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KK2ludAogbmV0c25tcF9iaW5hcnlfYXJyYXlfcmVtb3ZlKG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICprZXksIHZvaWQgKipzYXZlKQogewogICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOwotICAgIHNpemVfdCAgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgaW50ICAgICAgICAgICAgICAgIGluZGV4ID0gMDsKIAogICAgIGlmIChzYXZlKQogICAgICAgICAqc2F2ZSA9IE5VTEw7CkBAIC0yNzgsMjQgKzM3MCw3IEBACiAgICAgaWYgKChpbmRleCA9IGJpbmFyeV9zZWFyY2goa2V5LCBjLCAxKSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIC8qCi0gICAgICogZmluZCBvbGQgZGF0YSBhbmQgc2F2ZSBpdCwgaWYgcHRyIHByb3ZpZGVkCi0gICAgICovCi0gICAgaWYgKHNhdmUpCi0gICAgICAgICpzYXZlID0gdC0+ZGF0YVtpbmRleF07Ci0KLSAgICAvKgotICAgICAqIGlmIGVudHJ5IHdhcyBsYXN0IGl0ZW0sIGp1c3QgZGVjcmVtZW50IGNvdW50Ci0gICAgICovCi0gICAgLS10LT5jb3VudDsKLSAgICBpZiAoaW5kZXggIT0gdC0+Y291bnQpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogb3RoZXJ3aXNlLCBzaGlmdCBhcnJheSBkb3duCi0gICAgICAgICAqLwotICAgICAgICBtZW1tb3ZlKCZ0LT5kYXRhW2luZGV4XSwgJnQtPmRhdGFbaW5kZXgrMV0sIHQtPmRhdGFfc2l6ZSAqICh0LT5jb3VudCAtIGluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldHNubXBfYmluYXJ5X2FycmF5X3JlbW92ZV9hdChjLCAoc2l6ZV90KWluZGV4LCBzYXZlKTsKIH0KIAogTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKQEAgLTMzNiwxNSArNDExLDEzIEBACiBuZXRzbm1wX2JpbmFyeV9hcnJheV9pbnNlcnQobmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKmVudHJ5KQogewogICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOwotICAgIGludCAgICAgICAgICAgICBuZXdfbWF4LCBuZXdfc2l6ZTsKLSAgICBjaGFyICAgICAgICAgICAqbmV3X2RhdGE7ICAgLyogVXNlZCBmb3IgKiBhKSBleHRlbmRpbmcgdGhlIGRhdGEgdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKiBiKSB0aGUgbmV4dCBlbnRyeSB0byB1c2UgKi8KKyAgICBpbnQgICAgICAgICAgICAgd2FzX2RpcnR5ID0gMDsKICAgICAvKgogICAgICAqIGNoZWNrIGZvciBkdXBsaWNhdGVzCiAgICAgICovCi0gICAgaWYgKCEgKHQtPmZsYWdzICYgQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTKSkgewotICAgICAgICBuZXdfZGF0YSA9IG5ldHNubXBfYmluYXJ5X2FycmF5X2dldChjLCBlbnRyeSwgMSk7Ci0gICAgICAgIGlmIChOVUxMICE9IG5ld19kYXRhKSB7CisgICAgaWYgKCEgKGMtPmZsYWdzICYgQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTKSkgeworICAgICAgICB3YXNfZGlydHkgPSB0LT5kaXJ0eTsKKyAgICAgICAgaWYgKE5VTEwgIT0gbmV0c25tcF9iaW5hcnlfYXJyYXlfZ2V0KGMsIGVudHJ5LCAxKSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImNvbnRhaW5lciIsIm5vdCBpbnNlcnRpbmcgZHVwbGljYXRlIGtleVxuIikpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC0zNTUsMjIgKzQyOCwyMCBAQAogICAgICAqLwogICAgIGlmICh0LT5tYXhfc2l6ZSA8PSB0LT5jb3VudCkgewogICAgICAgICAvKgotICAgICAgICAgKiBUYWJsZSBpcyBmdWxsLCBzbyBleHRlbmQgaXQgdG8gZG91YmxlIHRoZSBzaXplCisgICAgICAgICAqIFRhYmxlIGlzIGZ1bGwsIHNvIGV4dGVuZCBpdCB0byBkb3VibGUgdGhlIHNpemUsIG9yIHVzZSAxMCBlbGVtZW50cworICAgICAgICAgKiBpZiBpdCBpcyBlbXB0eS4KICAgICAgICAgICovCi0gICAgICAgIG5ld19tYXggPSAyICogdC0+bWF4X3NpemU7Ci0gICAgICAgIGlmIChuZXdfbWF4ID09IDApCi0gICAgICAgICAgICBuZXdfbWF4ID0gMTA7ICAgICAgIC8qIFN0YXJ0IHdpdGggMTAgZW50cmllcyAqLworICAgICAgICBzaXplX3QgY29uc3QgbmV3X21heCA9IHQtPm1heF9zaXplID4gMCA/IDIgKiB0LT5tYXhfc2l6ZSA6IDEwOworICAgICAgICB2b2lkICoqIGNvbnN0IG5ld19kYXRhID0KKyAgICAgICAgICAgICh2b2lkKiopIHJlYWxsb2ModC0+ZGF0YSwgbmV3X21heCAqIHNpemVvZih2b2lkKikpOwogCi0gICAgICAgIG5ld19zaXplID0gbmV3X21heCAqIHQtPmRhdGFfc2l6ZTsKLSAgICAgICAgbmV3X2RhdGEgPSAoY2hhciAqKSByZWFsbG9jKHQtPmRhdGEsIG5ld19zaXplKTsKICAgICAgICAgaWYgKG5ld19kYXRhID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IG9sZF9zaXplID0gdC0+bWF4X3NpemUgKiB0LT5kYXRhX3NpemU7Ci0gICAgICAgICAgICBpbnQgY291bnQgPSBuZXdfc2l6ZSAtIG9sZF9zaXplOwotICAgICAgICAgICAgbWVtc2V0KCZuZXdfZGF0YVtvbGRfc2l6ZV0sIDB4MCwgY291bnQpOwotICAgICAgICB9Ci0gICAgICAgIHQtPmRhdGEgPSAodm9pZCoqKW5ld19kYXRhOworCisgICAgICAgIG1lbXNldChuZXdfZGF0YSArIHQtPm1heF9zaXplLCAweDAsCisgICAgICAgICAgICAgICAobmV3X21heCAtIHQtPm1heF9zaXplKSAqIHNpemVvZih2b2lkKikpOworCisgICAgICAgIHQtPmRhdGEgPSBuZXdfZGF0YTsKICAgICAgICAgdC0+bWF4X3NpemUgPSBuZXdfbWF4OwogICAgIH0KIApAQCAtMzc5LDYgKzQ1MCwxNSBAQAogICAgICAqLwogICAgIHQtPmRhdGFbdC0+Y291bnQrK10gPSBORVRTTk1QX1JFTU9WRV9DT05TVCh2b2lkICosIGVudHJ5KTsKICAgICB0LT5kaXJ0eSA9IDE7CisKKyAgICAvKgorICAgICAqIGlmIGFycmF5IHdhcyBkaXJ0eSBiZWZvcmUgd2UgY2FsbGVkIGdldCwgc3luYyB3YXMgaW5jcmVtZW50ZWQgd2hlbgorICAgICAqIGdldCBjYWxsZWQgU29ydEFycmF5LiBJZiB3ZSBkaWRuJ3QgY2FsbCBnZXQgb3IgdGhlIGFycmF5IHdhc24ndCBkaXJ0eSwKKyAgICAgKiBidW1wIHN5bmMgbm93LgorICAgICAqLworICAgIGlmICghd2FzX2RpcnR5KQorICAgICAgICArK2MtPnN5bmM7CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDI1LDcgKzUwNSw3IEBACiB2b2lkICAgICAgICAgICoqCiBuZXRzbm1wX2JpbmFyeV9hcnJheV9nZXRfc3Vic2V0KG5ldHNubXBfY29udGFpbmVyICpjLCB2b2lkICprZXksIGludCAqbGVuKQogewotICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdCA9IChiaW5hcnlfYXJyYXlfdGFibGUqKWMtPmNvbnRhaW5lcl9kYXRhOworICAgIGJpbmFyeV9hcnJheV90YWJsZSAqdDsKICAgICB2b2lkICAgICAgICAgICoqc3Vic2V0OwogICAgIGludCAgICAgICAgICAgICBzdGFydCwgZW5kOwogICAgIHNpemVfdCAgICAgICAgICBpOwpAQCAtNDMzLDggKzUxMywxMyBAQAogICAgIC8qCiAgICAgICogaWYgdGhlcmUgaXMgbm8gZGF0YSwgcmV0dXJuIE5VTEw7CiAgICAgICovCi0gICAgaWYgKCF0LT5jb3VudCB8fCAha2V5KQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWMgfHwgIWtleSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7CisgICAgbmV0c25tcF9hc3NlcnQoYy0+bmNvbXBhcmUpOworICAgIGlmICghdC0+Y291bnQgfCAhYy0+bmNvbXBhcmUpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyoKICAgICAgKiBpZiB0aGUgdGFibGUgaXMgZGlydHksIHNvcnQgaXQuCkBAIC00NDcsNyArNTMyLDcgQEAKICAgICAgKi8KICAgICBzdGFydCA9IGVuZCA9IGJpbmFyeV9zZWFyY2hfZm9yX3N0YXJ0KChuZXRzbm1wX2luZGV4ICopa2V5LCBjKTsKICAgICBpZiAoc3RhcnQgPT0gLTEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAoaSA9IHN0YXJ0ICsgMTsgaSA8IHQtPmNvdW50OyArK2kpIHsKICAgICAgICAgaWYgKDAgIT0gYy0+bmNvbXBhcmUodC0+ZGF0YVtpXSwga2V5KSkKQEAgLTQ1Niw5ICs1NDEsOSBAQAogICAgIH0KIAogICAgICpsZW4gPSBlbmQgLSBzdGFydCArIDE7Ci0gICAgc3Vic2V0ID0gKHZvaWQgKiopbWFsbG9jKCgqbGVuKSAqIHQtPmRhdGFfc2l6ZSk7CisgICAgc3Vic2V0ID0gKHZvaWQgKiopbWFsbG9jKCgqbGVuKSAqIHNpemVvZih2b2lkKikpOwogICAgIGlmIChzdWJzZXQpCi0gICAgICAgIG1lbWNweShzdWJzZXQsICZ0LT5kYXRhW3N0YXJ0XSwgdC0+ZGF0YV9zaXplICogKCpsZW4pKTsKKyAgICAgICAgbWVtY3B5KHN1YnNldCwgJnQtPmRhdGFbc3RhcnRdLCBzaXplb2Yodm9pZCopICogKCpsZW4pKTsKIAogICAgIHJldHVybiBzdWJzZXQ7CiB9CkBAIC01NDMsNiArNjI4LDYwIEBACiAgICAgcmV0dXJuIHZhOwogfQogCitzdGF0aWMgaW50IF9iYV9vcHRpb25zKG5ldHNubXBfY29udGFpbmVyICpjLCBpbnQgc2V0LCB1X2ludCBmbGFncykKK3sKKyAgICByZXR1cm4gbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQoYywgc2V0LCBmbGFncyk7Cit9CisKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqCitfYmFfZHVwbGljYXRlKG5ldHNubXBfY29udGFpbmVyICpjLCB2b2lkICpjdHgsIHVfaW50IGZsYWdzKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpkdXA7CisgICAgYmluYXJ5X2FycmF5X3RhYmxlICpkdXB0LCAqdDsKKworICAgIGlmIChmbGFncykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmluYXJ5IGFycnkgZHVwbGljYXRlIGRvZXMgbm90IHN1cHBydCBmbGFncyB5ZXRcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBkdXAgPSBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfYmluYXJ5X2FycmF5KCk7CisgICAgaWYgKE5VTEwgPT0gZHVwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIiBubyBtZW1vcnkgZm9yIGJpbmFyeSBhcnJheSBkdXBsaWNhdGVcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyoKKyAgICAgKiBkZWFsIHdpdGggY29udGFpbmVyIHN0dWZmCisgICAgICovCisgICAgaWYgKG5ldHNubXBfY29udGFpbmVyX2RhdGFfZHVwKGR1cCwgYykgIT0gMCkgeworICAgICAgICBuZXRzbm1wX2JpbmFyeV9hcnJheV9yZWxlYXNlKGR1cCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogZGVhbCB3aXRoIGRhdGEKKyAgICAgKi8KKyAgICBkdXB0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopZHVwLT5jb250YWluZXJfZGF0YTsKKyAgICB0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7CisKKyAgICBkdXB0LT5tYXhfc2l6ZSA9IHQtPm1heF9zaXplOworICAgIGR1cHQtPmNvdW50ID0gdC0+Y291bnQ7CisgICAgZHVwdC0+ZGlydHkgPSB0LT5kaXJ0eTsKKworICAgIC8qCisgICAgICogc2hhbGxvdyBjb3B5CisgICAgICovCisgICAgZHVwdC0+ZGF0YSA9ICh2b2lkKiopIG1hbGxvYyhkdXB0LT5tYXhfc2l6ZSAqIHNpemVvZih2b2lkKikpOworICAgIGlmIChOVUxMID09IGR1cHQtPmRhdGEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIG1lbW9yeSBmb3IgYmluYXJ5IGFycmF5IGR1cGxpY2F0ZVxuIik7CisgICAgICAgIG5ldHNubXBfYmluYXJ5X2FycmF5X3JlbGVhc2UoZHVwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWVtY3B5KGR1cHQtPmRhdGEsIHQtPmRhdGEsIGR1cHQtPm1heF9zaXplICogc2l6ZW9mKHZvaWQqKSk7CisKKyAgICByZXR1cm4gZHVwOworfQorCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfYmluYXJ5X2FycmF5KHZvaWQpCiB7CkBAIC01NTYsMTggKzY5NSwxOSBAQAogICAgIH0KIAogICAgIGMtPmNvbnRhaW5lcl9kYXRhID0gbmV0c25tcF9iaW5hcnlfYXJyYXlfaW5pdGlhbGl6ZSgpOwotICAgICAgICAKLSAgICBjLT5nZXRfc2l6ZSA9IF9iYV9zaXplOwotICAgIGMtPmluaXQgPSBOVUxMOwotICAgIGMtPmNmcmVlID0gX2JhX2ZyZWU7Ci0gICAgYy0+aW5zZXJ0ID0gX2JhX2luc2VydDsKLSAgICBjLT5yZW1vdmUgPSBfYmFfcmVtb3ZlOwotICAgIGMtPmZpbmQgPSBfYmFfZmluZDsKKworICAgIC8qCisgICAgICogTk9URTogQ0hBTkdFUyBIRVJFIE1VU1QgQkUgRFVQTElDQVRFRCBJTiBkdXBsaWNhdGUgQVMgV0VMTCEhCisgICAgICovCisgICAgbmV0c25tcF9pbml0X2NvbnRhaW5lcihjLCBOVUxMLCBfYmFfZnJlZSwgX2JhX3NpemUsIE5VTEwsIF9iYV9pbnNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfYmFfcmVtb3ZlLCBfYmFfZmluZCk7CiAgICAgYy0+ZmluZF9uZXh0ID0gX2JhX2ZpbmRfbmV4dDsKICAgICBjLT5nZXRfc3Vic2V0ID0gX2JhX2dldF9zdWJzZXQ7CiAgICAgYy0+Z2V0X2l0ZXJhdG9yID0gX2JhX2l0ZXJhdG9yX2dldDsKICAgICBjLT5mb3JfZWFjaCA9IF9iYV9mb3JfZWFjaDsKICAgICBjLT5jbGVhciA9IF9iYV9jbGVhcjsKKyAgICBjLT5vcHRpb25zID0gX2JhX29wdGlvbnM7CisgICAgYy0+ZHVwbGljYXRlID0gX2JhX2R1cGxpY2F0ZTsKICAgICAgICAgCiAgICAgcmV0dXJuIGM7CiB9CkBAIC02ODAsNiArODIwLDI1IEBACiB9CiAKIHN0YXRpYyBpbnQKK19iYV9pdGVyYXRvcl9yZW1vdmUoYmluYXJ5X2FycmF5X2l0ZXJhdG9yICppdCkKK3sKKyAgICBiaW5hcnlfYXJyYXlfdGFibGUqIHQgPSBfYmFfaXQyY29udChpdCk7CisgICAgaWYoTlVMTCA9PSB0KSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gdCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHNpbmNlIHRoaXMgaXRlcmF0b3Igd2FzIHVzZWQgZm9yIHRoZSByZW1vdmUsIGtlZXAgaXQgaW4gc3luYyB3aXRoCisgICAgICogdGhlIGNvbnRhaW5lci4gQWxzbywgYmFjayB1cCBvbmUgc28gdGhhdCBuZXh0IHdpbGwgYmUgdGhlIHBvc2l0aW9uCisgICAgICogdGhhdCB3YXMganVzdCByZW1vdmVkLgorICAgICAqLworICAgICsraXQtPmJhc2Uuc3luYzsKKyAgICByZXR1cm4gbmV0c25tcF9iaW5hcnlfYXJyYXlfcmVtb3ZlX2F0KGl0LT5iYXNlLmNvbnRhaW5lciwgaXQtPnBvcy0tLCBOVUxMKTsKKworfQorCitzdGF0aWMgaW50CiBfYmFfaXRlcmF0b3JfcmVzZXQoYmluYXJ5X2FycmF5X2l0ZXJhdG9yICppdCkKIHsKICAgICBiaW5hcnlfYXJyYXlfdGFibGUqIHQgPSBfYmFfaXQyY29udChpdCk7CkBAIC03MjgsNiArODg3LDcgQEAKICAgICBpdC0+YmFzZS5uZXh0ID0gKG5ldHNubXBfaXRlcmF0b3JfcnRuKilfYmFfaXRlcmF0b3JfbmV4dDsKICAgICBpdC0+YmFzZS5jdXJyID0gKG5ldHNubXBfaXRlcmF0b3JfcnRuKilfYmFfaXRlcmF0b3JfY3VycjsKICAgICBpdC0+YmFzZS5sYXN0ID0gKG5ldHNubXBfaXRlcmF0b3JfcnRuKilfYmFfaXRlcmF0b3JfbGFzdDsKKyAgICBpdC0+YmFzZS5yZW1vdmUgPSAobmV0c25tcF9pdGVyYXRvcl9yYyopX2JhX2l0ZXJhdG9yX3JlbW92ZTsKICAgICBpdC0+YmFzZS5yZXNldCA9IChuZXRzbm1wX2l0ZXJhdG9yX3JjKilfYmFfaXRlcmF0b3JfcmVzZXQ7CiAgICAgaXQtPmJhc2UucmVsZWFzZSA9IChuZXRzbm1wX2l0ZXJhdG9yX3JjKilfYmFfaXRlcmF0b3JfcmVsZWFzZTsKIApkaWZmIC0tZ2l0IGEvc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYyBiL3NubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMKaW5kZXggZTI2ZDk5ZS4uNDFiMTRmZiAxMDA2NDQKLS0tIGEvc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYworKysgYi9zbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX1NURExJQl9ICkBAIC0yOCw2ICsyOSw5IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2l0ZXJhdG9yLCBjb250YWluZXJfdHlwZXMpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfSVRFUkFUT1IKIC8qKgogICogIEhvbGRzIGl0ZXJhdG9yIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQKICAqICBieSB0aGUgaXRlcmF0b3JfaGFuZGxlciB0byBsb29wIG92ZXIgeW91ciBkYXRhIHNldCBhbmQgc29ydCBpdCBpbiBhCkBAIC01MDQsMyArNTA4LDYgQEAKICAgICBpaS0+cmVtb3ZlX2RhdGEgPSByZW1vdmVfZGF0YTsKICAgICBpaS0+Z2V0X3NpemUgPSBnZXRfc2l6ZTsKIH0KKyNlbHNlICAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9JVEVSQVRPUiAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChjb250YWluZXJfaXRlcmF0b3IpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0lURVJBVE9SICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYyBiL3NubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jCmluZGV4IDg3ODJmZDAuLjdmZjAxYzQgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jCisrKyBiL3NubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jCkBAIC00LDYgKzQsNyBAQAogICoKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfU1RETElCX0gKQEAgLTI4LDYgKzI5LDE5IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9saW5rZWRfbGlzdCwgY29udGFpbmVyX3R5cGVzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9maWZvLCBjb250YWluZXJfdHlwZXMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2xpZm8sIGNvbnRhaW5lcl90eXBlcykKKworLyogdGhpcyBpcyBhIGZhbmN5IHdheSBvZiBjbGVhbmluZyB1cCBpZmRlZnMgKi8KKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DT05UQUlORVJfRklGTworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2xpbmtlZF9saXN0KQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NPTlRBSU5FUl9GSUZPICovCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ09OVEFJTkVSX0xJRk8KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9saW5rZWRfbGlzdCkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DT05UQUlORVJfTElGTyAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0xJTktFRF9MSVNUCiB0eXBlZGVmIHN0cnVjdCBzbF9ub2RlIHsKICAgIHZvaWQgICAgICAgICAgICpkYXRhOwogICAgc3RydWN0IHNsX25vZGUgKm5leHQ7CkBAIC00NCw2ICs1OCwxNSBAQAogCiB9IHNsX2NvbnRhaW5lcjsKIAordHlwZWRlZiBzdHJ1Y3Qgc3NsbF9pdGVyYXRvcl9zIHsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yIGJhc2U7CisgCisgICAgc2xfbm9kZSAgICAgICAgICpwb3M7CisgICAgc2xfbm9kZSAgICAgICAgICpsYXN0OworfSBzc2xsX2l0ZXJhdG9yOworCitzdGF0aWMgbmV0c25tcF9pdGVyYXRvciAqX3NzbGxfaXRlcmF0b3JfZ2V0KG5ldHNubXBfY29udGFpbmVyICpjKTsKKwogCiBzdGF0aWMgdm9pZCAqCiBfZ2V0KG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICprZXksIGludCBleGFjdCkKQEAgLTg1LDEyICsxMDgsMTMgQEAKICAqCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogX3NzbGxfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqYykKIHsKICAgICBpZihjKSB7CiAgICAgICAgIGZyZWUoYyk7CiAgICAgfQorICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCAqCkBAIC0xMjUsNiArMTQ5LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIG5ld19ub2RlLT5kYXRhID0gTkVUU05NUF9SRU1PVkVfQ09OU1Qodm9pZCAqLCBkYXRhKTsKICAgICArK3NsLT5jb3VudDsKKyAgICArK2MtPnN5bmM7CiAKICAgICAvKgogICAgICAqIGZpcnN0IG5vZGU/CkBAIC0yMjMsNiArMjQ4LDcgQEAKICAgICAgKi8KICAgICBmcmVlKGN1cnIpOwogICAgIC0tc2wtPmNvdW50OworICAgICsrYy0+c3luYzsKICAgICAKICAgICByZXR1cm4gMDsKIH0KQEAgLTI3OCw2ICszMDQsNyBAQAogICAgIH0KICAgICBzbC0+aGVhZCA9IE5VTEw7CiAgICAgc2wtPmNvdW50ID0gMDsKKyAgICArK2MtPnN5bmM7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yOTcsMTYgKzMyNCwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzbC0+Yy5jZnJlZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9yYyopX3NzbGxfZnJlZTsKLSAgICAgICAgCi0gICAgc2wtPmMuZ2V0X3NpemUgPSBfc3NsbF9zaXplOwotICAgIHNsLT5jLmluaXQgPSBOVUxMOwotICAgIHNsLT5jLmluc2VydCA9IF9zc2xsX2luc2VydDsKLSAgICBzbC0+Yy5yZW1vdmUgPSBfc3NsbF9yZW1vdmU7Ci0gICAgc2wtPmMuZmluZCA9IF9zc2xsX2ZpbmQ7CisgICAgbmV0c25tcF9pbml0X2NvbnRhaW5lcigobmV0c25tcF9jb250YWluZXIgKilzbCwgTlVMTCwgX3NzbGxfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zc2xsX3NpemUsIE5VTEwsIF9zc2xsX2luc2VydCwgX3NzbGxfcmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NzbGxfZmluZCk7CiAgICAgc2wtPmMuZmluZF9uZXh0ID0gX3NzbGxfZmluZF9uZXh0OwogICAgIHNsLT5jLmdldF9zdWJzZXQgPSBOVUxMOwotICAgIHNsLT5jLmdldF9pdGVyYXRvciA9IE5VTEw7CisgICAgc2wtPmMuZ2V0X2l0ZXJhdG9yID1fc3NsbF9pdGVyYXRvcl9nZXQ7CiAgICAgc2wtPmMuZm9yX2VhY2ggPSBfc3NsbF9mb3JfZWFjaDsKICAgICBzbC0+Yy5jbGVhciA9IF9zc2xsX2NsZWFyOwogCkBAIC0zOTEsMyArNDE0LDE1NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2dldF9maWZvX2ZhY3RvcnkoKSk7CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBpdGVyYXRvcgorICoKKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHNsX2NvbnRhaW5lciAqCitfc3NsbF9pdDJjb250KHNzbGxfaXRlcmF0b3IgKml0KQoreworICAgIGlmKE5VTEwgPT0gaXQpIHsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmKE5VTEwgPT0gaXQtPmJhc2UuY29udGFpbmVyKSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXQtPmJhc2UuY29udGFpbmVyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYoaXQtPmJhc2UuY29udGFpbmVyLT5zeW5jICE9IGl0LT5iYXNlLnN5bmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImNvbnRhaW5lcjppdGVyYXRvciIsICJvdXQgb2Ygc3luY1xuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gKHNsX2NvbnRhaW5lciAqKWl0LT5iYXNlLmNvbnRhaW5lcjsKK30KKworc3RhdGljIHZvaWQgKgorX3NzbGxfaXRlcmF0b3JfY3Vycihzc2xsX2l0ZXJhdG9yICppdCkKK3sKKyAgICBzbF9jb250YWluZXIgKnQgPSBfc3NsbF9pdDJjb250KGl0KTsKKyAgICBpZiAoKE5VTEwgPT0gdCkgfHwgKE5VTEwgPT0gaXQtPnBvcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGl0LT5wb3MtPmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkICoKK19zc2xsX2l0ZXJhdG9yX2ZpcnN0KHNzbGxfaXRlcmF0b3IgKml0KQoreworICAgIHNsX2NvbnRhaW5lciAqdCA9IF9zc2xsX2l0MmNvbnQoaXQpOworICAgIGlmICgoTlVMTCA9PSB0KSB8fCAoTlVMTCA9PSB0LT5oZWFkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gdC0+aGVhZC0+ZGF0YTsKK30KKworc3RhdGljIHZvaWQgKgorX3NzbGxfaXRlcmF0b3JfbmV4dChzc2xsX2l0ZXJhdG9yICppdCkKK3sKKyAgICBzbF9jb250YWluZXIgKnQgPSBfc3NsbF9pdDJjb250KGl0KTsKKyAgICBpZiAoKE5VTEwgPT0gdCkgfHwgKE5VTEwgPT0gaXQtPnBvcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaXQtPnBvcyA9IGl0LT5wb3MtPm5leHQ7CisgICAgaWYgKE5VTEwgPT0gaXQtPnBvcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gaXQtPnBvcy0+ZGF0YTsKK30KKworc3RhdGljIHZvaWQgKgorX3NzbGxfaXRlcmF0b3JfbGFzdChzc2xsX2l0ZXJhdG9yICppdCkKK3sKKyAgICBzbF9ub2RlICAgICAgKm47CisgICAgc2xfY29udGFpbmVyICp0ID0gX3NzbGxfaXQyY29udChpdCk7CisgICAgaWYoTlVMTCA9PSB0KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICBpZiAoaXQtPmxhc3QpCisgICAgICAgIHJldHVybiBpdC0+bGFzdDsKKworICAgIG4gPSBpdC0+cG9zID8gaXQtPnBvcyA6IHQtPmhlYWQ7CisgICAgaWYgKE5VTEwgPT0gbikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB3aGlsZShuLT5uZXh0KQorICAgICAgICBuID0gbi0+bmV4dDsKKworICAgIGlmIChOVUxMID09IG4pCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaXQtPmxhc3QgPSBuOworCisgICAgcmV0dXJuIGl0LT5sYXN0LT5kYXRhOworfQorCitzdGF0aWMgaW50Citfc3NsbF9pdGVyYXRvcl9yZXNldChzc2xsX2l0ZXJhdG9yICppdCkKK3sKKyAgICBzbF9jb250YWluZXIgKnQ7CisKKyAgICAvKiogY2FuJ3QgdXNlIGl0MmNvbmYgY3V6IHdlIG1pZ2h0IGJlIG91dCBvZiBzeW5jICovCisgICAgaWYoTlVMTCA9PSBpdCkgeworICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGl0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYoTlVMTCA9PSBpdC0+YmFzZS5jb250YWluZXIpIHsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpdC0+YmFzZS5jb250YWluZXIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdCA9IChzbF9jb250YWluZXIgKilpdC0+YmFzZS5jb250YWluZXI7CisgICAgaWYoTlVMTCA9PSB0KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpdC0+bGFzdCA9IE5VTEw7CisgICAgaXQtPnBvcyA9IHQtPmhlYWQ7CisKKyAgICAvKgorICAgICAqIHNhdmUgc3luYyBjb3VudCwgdG8gbWFrZSBzdXJlIGNvbnRhaW5lciBkb2Vzbid0IGNoYW5nZSB3aGlsZQorICAgICAqIGl0ZXJhdG9yIGlzIGluIHVzZS4KKyAgICAgKi8KKyAgICBpdC0+YmFzZS5zeW5jID0gaXQtPmJhc2UuY29udGFpbmVyLT5zeW5jOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19zc2xsX2l0ZXJhdG9yX3JlbGVhc2UobmV0c25tcF9pdGVyYXRvciAqaXQpCit7CisgICAgZnJlZShpdCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIG5ldHNubXBfaXRlcmF0b3IgKgorX3NzbGxfaXRlcmF0b3JfZ2V0KG5ldHNubXBfY29udGFpbmVyICpjKQoreworICAgIHNzbGxfaXRlcmF0b3IqIGl0OworCisgICAgaWYoTlVMTCA9PSBjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGl0ID0gU05NUF9NQUxMT0NfVFlQRURFRihzc2xsX2l0ZXJhdG9yKTsKKyAgICBpZihOVUxMID09IGl0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGl0LT5iYXNlLmNvbnRhaW5lciA9IGM7CisgICAgCisgICAgaXQtPmJhc2UuZmlyc3QgPSAobmV0c25tcF9pdGVyYXRvcl9ydG4qKV9zc2xsX2l0ZXJhdG9yX2ZpcnN0OworICAgIGl0LT5iYXNlLm5leHQgPSAobmV0c25tcF9pdGVyYXRvcl9ydG4qKV9zc2xsX2l0ZXJhdG9yX25leHQ7CisgICAgaXQtPmJhc2UuY3VyciA9IChuZXRzbm1wX2l0ZXJhdG9yX3J0biopX3NzbGxfaXRlcmF0b3JfY3VycjsKKyAgICBpdC0+YmFzZS5sYXN0ID0gKG5ldHNubXBfaXRlcmF0b3JfcnRuKilfc3NsbF9pdGVyYXRvcl9sYXN0OworICAgIGl0LT5iYXNlLnJlc2V0ID0gKG5ldHNubXBfaXRlcmF0b3JfcmMqKV9zc2xsX2l0ZXJhdG9yX3Jlc2V0OworICAgIGl0LT5iYXNlLnJlbGVhc2UgPSAobmV0c25tcF9pdGVyYXRvcl9yYyopX3NzbGxfaXRlcmF0b3JfcmVsZWFzZTsKKworICAgICh2b2lkKV9zc2xsX2l0ZXJhdG9yX3Jlc2V0KGl0KTsKKworICAgIHJldHVybiAobmV0c25tcF9pdGVyYXRvciAqKWl0OworfQorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTElOS0VEX0xJU1QgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoY29udGFpbmVyX2xpbmtlZF9saXN0KTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9MSU5LRURfTElTVCAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jb250YWluZXJfbnVsbC5jIGIvc25tcGxpYi9jb250YWluZXJfbnVsbC5jCmluZGV4IDEwMDgyYWYuLjFmNDg3MGUgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvY29udGFpbmVyX251bGwuYworKysgYi9zbm1wbGliL2NvbnRhaW5lcl9udWxsLmMKQEAgLTcsNiArNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX0lPX0gKICNpbmNsdWRlIDxpby5oPgpAQCAtMzMsNiArMzQsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfbnVsbCwgY29udGFpbmVyX3R5cGVzKQorCiAvKiogQGRlZmdyb3VwIG51bGxfY29udGFpbmVyIG51bGxfY29udGFpbmVyCiAgKiAgSGVscHMgeW91IGltcGxlbWVudCBzcGVjaWFsaXplZCBjb250YWluZXJzLgogICogIEBpbmdyb3VwIGNvbnRhaW5lcgpAQCAtNTAsNiArNTMsNyBAQAogICogIEB7CiAgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9OVUxMCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIGNvbnRhaW5lcgpAQCAtMTU2LDcgKzE2MCw3IEBACiAgICAgYy0+ZmluZCA9IF9udWxsX2ZpbmQ7CiAgICAgYy0+ZmluZF9uZXh0ID0gX251bGxfZmluZF9uZXh0OwogICAgIGMtPmdldF9zdWJzZXQgPSBfbnVsbF9nZXRfc3Vic2V0OwotICAgIGMtPmdldF9pdGVyYXRvciA9IDA7IC8qIF9udWxsX2l0ZXJhdG9yOyAqLworICAgIGMtPmdldF9pdGVyYXRvciA9IE5VTEw7IC8qIF9udWxsX2l0ZXJhdG9yOyAqLwogICAgIGMtPmZvcl9lYWNoID0gX251bGxfZm9yX2VhY2g7CiAgICAgYy0+Y2xlYXIgPSBfbnVsbF9jbGVhcjsKICAgICAgICAKQEAgLTE4MCw1ICsxODQsOCBAQAogICAgIG5ldHNubXBfY29udGFpbmVyX3JlZ2lzdGVyKCJudWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfbnVsbF9mYWN0b3J5KCkpOwogfQorI2Vsc2UgIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX05VTEwgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoY29udGFpbmVyX251bGwpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX05VTEwgKi8KIC8qKiAgQH0gKi8KIApkaWZmIC0tZ2l0IGEvc25tcGxpYi9kYXRhX2xpc3QuYyBiL3NubXBsaWIvZGF0YV9saXN0LmMKaW5kZXggMDFhN2QyYy4uNTA1ZDRmYyAxMDA2NDQKLS0tIGEvc25tcGxpYi9kYXRhX2xpc3QuYworKysgYi9zbm1wbGliL2RhdGFfbGlzdC5jCkBAIC00LDE0ICs0LDEzIEBACiAgKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAKLS8qCi0gKiBwcm90b3R5cGVzCi0gKi8KLU5FVFNOTVBfSU5MSU5FIHZvaWQKLW5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlKG5ldHNubXBfZGF0YV9saXN0ICoqaGVhZCwgbmV0c25tcF9kYXRhX2xpc3QgKm5vZGUpOworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRhdGFfbGlzdF9hbGwsIGxpYm5ldHNubXApCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkYXRhX2xpc3RfYWRkX2RhdGEsIGRhdGFfbGlzdF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGF0YV9saXN0X2dldF9saXN0X25vZGUsIGRhdGFfbGlzdF9hbGwpCiAKIC8qKiBAZGVmZ3JvdXAgZGF0YV9saXN0IGdlbmVyaWMgbGlua2VkLWxpc3QgZGF0YSBoYW5kbGluZyB3aXRoIGEgc3RyaW5nIGFzIGEga2V5LgogICogQGluZ3JvdXAgbGlicmFyeQpAQCAtNjksOCArNjgsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBub2RlLT5uYW1lID0gc3RyZHVwKG5hbWUpOwogICAgIGlmICghbm9kZS0+bmFtZSkgewotICAgICAgZnJlZShub2RlKTsKLSAgICAgIHJldHVybiBOVUxMOworICAgICAgICBmcmVlKG5vZGUpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgbm9kZS0+ZGF0YSA9IGRhdGE7CiAgICAgbm9kZS0+ZnJlZV9mdW5jID0gYmVlcjsKQEAgLTc4LDE4ICs3Nyw2IEBACiB9CiAKIC8qKiBhZGRzIGRhdGEgdG8gYSBkYXRhbGlzdAotICogQG5vdGUgbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUgaXMgcHJlZmVycmVkCi0gKiBAcGFyYW0gaGVhZCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgbm9kZSBvZiBhIGRhdGFfbGlzdAotICogQHBhcmFtIG5vZGUgYSBub2RlIHRvIHN0YXNoIGluIHRoZSBkYXRhX2xpc3QKLSAqLwotLyoqICAqLwotTkVUU05NUF9JTkxJTkUgdm9pZAotbmV0c25tcF9hZGRfbGlzdF9kYXRhKG5ldHNubXBfZGF0YV9saXN0ICoqaGVhZCwgbmV0c25tcF9kYXRhX2xpc3QgKm5vZGUpCi17Ci0gICAgbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUoaGVhZCwgbm9kZSk7Ci19Ci0KLS8qKiBhZGRzIGRhdGEgdG8gYSBkYXRhbGlzdAogICogQHBhcmFtIGhlYWQgYSBwb2ludGVyIHRvIHRoZSBoZWFkIG5vZGUgb2YgYSBkYXRhX2xpc3QKICAqIEBwYXJhbSBub2RlIGEgbm9kZSB0byBzdGFzaCBpbiB0aGUgZGF0YV9saXN0CiAgKi8KQEAgLTEwMiwxMiArODksMTMgQEAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IG5vZGUpOwogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gbm9kZS0+bmFtZSk7CiAKKyAgICBERUJVR01TR1RMKCgiZGF0YV9saXN0IiwiYWRkaW5nIGtleSAnJXMnXG4iLCBub2RlLT5uYW1lKSk7CisKICAgICBpZiAoISpoZWFkKSB7CiAgICAgICAgICpoZWFkID0gbm9kZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIERFQlVHTVNHVEwoKCJkYXRhX2xpc3QiLCJhZGRpbmcga2V5ICclcydcbiIsIG5vZGUtPm5hbWUpKTsKICAgICBpZiAoMCA9PSBzdHJjbXAobm9kZS0+bmFtZSwgKCpoZWFkKS0+bmFtZSkpIHsKICAgICAgICAgbmV0c25tcF9hc3NlcnQoISJsaXN0IGtleSA9PSBpcyB1bmlxdWUiKTsgLyogYWx3YXlzIGZhaWwgKi8KICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCkBAIC0xMzEsMTIgKzExOSwyNSBAQAogfQogCiAvKiogYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QKKyAqIEBub3RlIG5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlIGlzIHByZWZlcnJlZAorICogQHBhcmFtIGhlYWQgYSBwb2ludGVyIHRvIHRoZSBoZWFkIG5vZGUgb2YgYSBkYXRhX2xpc3QKKyAqIEBwYXJhbSBub2RlIGEgbm9kZSB0byBzdGFzaCBpbiB0aGUgZGF0YV9saXN0CisgKi8KKy8qKiAgKi8KK05FVFNOTVBfSU5MSU5FIHZvaWQKK25ldHNubXBfYWRkX2xpc3RfZGF0YShuZXRzbm1wX2RhdGFfbGlzdCAqKmhlYWQsIG5ldHNubXBfZGF0YV9saXN0ICpub2RlKQoreworICAgIG5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlKGhlYWQsIG5vZGUpOworfQorCisvKiogYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QKICAqIEBwYXJhbSBoZWFkIGEgcG9pbnRlciB0byB0aGUgaGVhZCBub2RlIG9mIGEgZGF0YV9saXN0CiAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgbm9kZSB0byBjYWNoZSB0aGUgZGF0YS4KICAqIEBwYXJhbSBkYXRhIHRoZSBkYXRhIHRvIGJlIHN0b3JlZCB1bmRlciB0aGF0IG5hbWUKICAqIEBwYXJhbSBiZWVyIEEgZnVuY3Rpb24gdGhhdCBjYW4gZnJlZSB0aGUgZGF0YSBwb2ludGVyIChpbiB0aGUgZnV0dXJlKQogICogQHJldHVybiBhIG5ld2x5IGNyZWF0ZWQgZGF0YV9saXN0IG5vZGUgd2hpY2ggd2FzIGluc2VydGVkIGluIHRoZSBsaXN0CiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9EQVRBX0xJU1RfQUREX0RBVEEKIE5FVFNOTVBfSU5MSU5FIG5ldHNubXBfZGF0YV9saXN0ICoKIG5ldHNubXBfZGF0YV9saXN0X2FkZF9kYXRhKG5ldHNubXBfZGF0YV9saXN0ICoqaGVhZCwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKiBiZWVyKQpAQCAtMTU2LDYgKzE1Nyw3IEBACiAKICAgICByZXR1cm4gbm9kZTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RBVEFfTElTVF9BRERfREFUQSAqLwogCiAvKiogcmV0dXJucyBhIGRhdGFfbGlzdCBub2RlJ3MgZGF0YSBmb3IgYSBnaXZlbiBuYW1lIHdpdGhpbiBhIGRhdGFfbGlzdAogICogQHBhcmFtIGhlYWQgdGhlIGhlYWQgbm9kZSBvZiBhIGRhdGFfbGlzdApAQCAtMTgwLDYgKzE4Miw3IEBACiAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSB0byBmaW5kCiAgKiBAcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZGF0YV9saXN0IG5vZGUKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RBVEFfTElTVF9HRVRfTElTVF9OT0RFCiBORVRTTk1QX0lOTElORSBuZXRzbm1wX2RhdGFfbGlzdCAgICAqCiBuZXRzbm1wX2dldF9saXN0X25vZGUobmV0c25tcF9kYXRhX2xpc3QgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC0xOTIsNiArMTk1LDcgQEAKICAgICAgICAgcmV0dXJuIGhlYWQ7CiAgICAgcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9EQVRBX0xJU1RfR0VUX0xJU1RfTk9ERSAqLwogCiAvKiogUmVtb3ZlcyBhIG5hbWVkIG5vZGUgZnJvbSBhIGRhdGFfbGlzdCAoYW5kIGZyZWVzIGl0KQogICogQHBhcmFtIHJlYWxoZWFkIGEgcG9pbnRlciB0byB0aGUgaGVhZCBub2RlIG9mIGEgZGF0YV9saXN0CmRpZmYgLS1naXQgYS9zbm1wbGliL2RlZmF1bHRfc3RvcmUuYyBiL3NubXBsaWIvZGVmYXVsdF9zdG9yZS5jCmluZGV4IDhlOTQwNTcuLjhkYmM5YmMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvZGVmYXVsdF9zdG9yZS5jCisrKyBiL3NubXBsaWIvZGVmYXVsdF9zdG9yZS5jCkBAIC0xMjYsNiArMTI2LDcgQEAKICAqICBAewogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0xNDEsOSArMTQyLDYgQEAKICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2lmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTE2MCw2ICsxNTgsMTQgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRlZmF1bHRfc3RvcmVfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGVmYXVsdF9zdG9yZV92b2lkLCBkZWZhdWx0X3N0b3JlX2FsbCkKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFRkFVTFRfU1RPUkVfVk9JRAorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVGQVVMVF9TVE9SRV9WT0lEICovCisKKwogc3RhdGljIGNvbnN0IGNoYXIgKiBzdG9yZXMgW05FVFNOTVBfRFNfTUFYX0lEU10gPSB7ICJMSUIiLCAiQVBQIiwgIlRPSyIgfTsKIAogdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9kc19yZWFkX2NvbmZpZ19zIHsKQEAgLTE3Niw3ICsxODIsOSBAQAogc3RhdGljIGludCAgIG5ldHNubXBfZHNfaW50ZWdlcnNbTkVUU05NUF9EU19NQVhfSURTXVtORVRTTk1QX0RTX01BWF9TVUJJRFNdOwogc3RhdGljIGNoYXIgIG5ldHNubXBfZHNfYm9vbGVhbnNbTkVUU05NUF9EU19NQVhfSURTXVtORVRTTk1QX0RTX01BWF9TVUJJRFMvOF07CiBzdGF0aWMgY2hhciAqbmV0c25tcF9kc19zdHJpbmdzW05FVFNOTVBfRFNfTUFYX0lEU11bTkVUU05NUF9EU19NQVhfU1VCSURTXTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUZBVUxUX1NUT1JFX1ZPSUQKIHN0YXRpYyB2b2lkICpuZXRzbm1wX2RzX3ZvaWRzW05FVFNOTVBfRFNfTUFYX0lEU11bTkVUU05NUF9EU19NQVhfU1VCSURTXTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFRkFVTFRfU1RPUkVfVk9JRCAqLwogCiAvKgogICogUHJvdG90eXBlIGRlZmluaXRpb25zIApAQCAtMzE2LDYgKzMyNCw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfZHNfc3RyaW5nc1tzdG9yZWlkXVt3aGljaF07CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUZBVUxUX1NUT1JFX1ZPSUQKIGludAogbmV0c25tcF9kc19zZXRfdm9pZChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCB2b2lkICp2YWx1ZSkKIHsKQEAgLTMyNCw3ICszMzMsNyBAQAogICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgfQogCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfZHNfc2V0X3ZvaWQiLCAiU2V0dGluZyAlczolZCA9ICV4XG4iLAorICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2RzX3NldF92b2lkIiwgIlNldHRpbmcgJXM6JWQgPSAlcFxuIiwKICAgICAgICAgICAgICAgICBzdG9yZXNbc3RvcmVpZF0sIHdoaWNoLCB2YWx1ZSkpOwogCiAgICAgbmV0c25tcF9kc192b2lkc1tzdG9yZWlkXVt3aGljaF0gPSB2YWx1ZTsKQEAgLTM0Miw2ICszNTEsNyBAQAogCiAgICAgcmV0dXJuIG5ldHNubXBfZHNfdm9pZHNbc3RvcmVpZF1bd2hpY2hdOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVGQVVMVF9TVE9SRV9WT0lEICovCiAKIGludAogbmV0c25tcF9kc19wYXJzZV9ib29sZWFuKGNoYXIgKmxpbmUpCkBAIC00NDIsMTAgKzQ1MiwxNCBAQAogCiAgICAgaWYgKG5ldHNubXBfZHNfY29uZmlncyA9PSBOVUxMKSB7CiAgICAgICAgIG5ldHNubXBfZHNfY29uZmlncyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9kc19yZWFkX2NvbmZpZyk7CisgICAgICAgIGlmIChuZXRzbm1wX2RzX2NvbmZpZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICAgICAgZHJzcCA9IG5ldHNubXBfZHNfY29uZmlnczsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGRyc3AgPSBuZXRzbm1wX2RzX2NvbmZpZ3M7IGRyc3AtPm5leHQgIT0gTlVMTDsgZHJzcCA9IGRyc3AtPm5leHQpOwogICAgICAgICBkcnNwLT5uZXh0ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2RzX3JlYWRfY29uZmlnKTsKKyAgICAgICAgaWYgKGRyc3AtPm5leHQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICAgICAgZHJzcCA9IGRyc3AtPm5leHQ7CiAgICAgfQogCkBAIC00ODgsMTAgKzUwMiwxNCBAQAogCiAgICAgaWYgKG5ldHNubXBfZHNfY29uZmlncyA9PSBOVUxMKSB7CiAgICAgICAgIG5ldHNubXBfZHNfY29uZmlncyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9kc19yZWFkX2NvbmZpZyk7CisgICAgICAgIGlmIChuZXRzbm1wX2RzX2NvbmZpZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICAgICAgZHJzcCA9IG5ldHNubXBfZHNfY29uZmlnczsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGRyc3AgPSBuZXRzbm1wX2RzX2NvbmZpZ3M7IGRyc3AtPm5leHQgIT0gTlVMTDsgZHJzcCA9IGRyc3AtPm5leHQpOwogICAgICAgICBkcnNwLT5uZXh0ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2RzX3JlYWRfY29uZmlnKTsKKyAgICAgICAgaWYgKGRyc3AtPm5leHQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICAgICAgZHJzcCA9IGRyc3AtPm5leHQ7CiAgICAgfQogCkBAIC01MjIsNyArNTQwLDcgQEAKIH0KIAogdm9pZAotbmV0c25tcF9kc19zaHV0ZG93bigpCituZXRzbm1wX2RzX3NodXRkb3duKHZvaWQpCiB7CiAgICAgbmV0c25tcF9kc19yZWFkX2NvbmZpZyAqZHJzcDsKICAgICBpbnQgICAgICAgICAgICAgaSwgajsKZGlmZiAtLWdpdCBhL3NubXBsaWIvZGlyX3V0aWxzLmMgYi9zbm1wbGliL2Rpcl91dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNWU3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL2Rpcl91dGlscy5jCkBAIC0wLDAgKzEsMjU5IEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgSEFWRV9TVERMSUJfSAorIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorIyAgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorIyAgIGluY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfRE1BTExPQ19ICisjICBpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2RpcmVjdG9yeSwgY29udGFpbmVyX3R5cGVzKQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NPTlRBSU5FUl9ESVJFQ1RPUlkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZpbGVfdXRpbHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZnJlZV9hbGwpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ09OVEFJTkVSX0RJUkVDVE9SWSAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0RJUkVDVE9SWQorc3RhdGljIGludAorX2luc2VydF9uc2ZpbGUoIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3RhdHMsCisgICAgICAgICAgICAgICAgdV9pbnQgZmxhZ3MpOworCisvKgorICogcmVhZCBmaWxlIG5hbWVzIGluIGEgZGlyZWN0b3J5LCB3aXRoIGFuIG9wdGlvbmFsIGZpbHRlcgorICovCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZF9zb21lKG5ldHNubXBfY29udGFpbmVyICp1c2VyX2NvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGlybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfZmlsdGVyICpmaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmZpbHRlcl9jdHgsIHVfaW50IGZsYWdzKQoreworICAgIERJUiAgICAgICAgICAgICAgICpkaXI7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IHVzZXJfY29udGFpbmVyOworICAgIHN0cnVjdCBkaXJlbnQgICAgICpmaWxlOworICAgIGNoYXIgICAgICAgICAgICAgICBwYXRoW1NOTVBfTUFYUEFUSF07CisgICAgc2l6ZV90ICAgICAgICAgICAgIGRpcm5hbWVfbGVuOworICAgIGludCAgICAgICAgICAgICAgICByYzsKKyAgICBzdHJ1Y3Qgc3RhdCAgICAgICAgc3RhdGJ1ZjsKKyAgICBuZXRzbm1wX2ZpbGUgICAgICAgbnNfZmlsZV90bXA7CisKKyAgICBpZiAoKGZsYWdzICYgTkVUU05NUF9ESVJfUkVMQVRJVkVfUEFUSCkgJiYgKGZsYWdzICYgTkVUU05NUF9ESVJfUkVDVVJTRSkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRpcmVjdG9yeTpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICAgICAibm8gc3VwcG9ydCBmb3IgcmVsYXRpdmUgcGF0aCB3aXRoIHJlY3Vyc2lvblxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiZGlyZWN0b3J5OmNvbnRhaW5lciIsICJyZWFkaW5nICVzXG4iLCBkaXJuYW1lKSk7CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSB0aGUgY29udGFpbmVyLCBpZiBuZWVkZWQKKyAgICAgKi8KKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgaWYgKGZsYWdzICYgTkVUU05NUF9ESVJfTlNGSUxFKSB7CisgICAgICAgICAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJuc2ZpbGVfZGlyZWN0b3J5X2NvbnRhaW5lcjoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnlfYXJyYXkiKTsKKyAgICAgICAgICAgIGlmIChjb250YWluZXIpIHsKKyAgICAgICAgICAgICAgICBjb250YWluZXItPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZmlsZV9jb21wYXJlX25hbWU7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLT5mcmVlX2l0ZW0gPSAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9maWxlX2NvbnRhaW5lcl9mcmVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImRpcmVjdG9yeV9jb250YWluZXI6Y3N0cmluZyIpOworICAgICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cChkaXJuYW1lKTsKKyAgICAgICAgLyoqIGRlZmF1bHQgdG8gdW5zb3J0ZWQgKi8KKyAgICAgICAgaWYgKCEgKGZsYWdzICYgTkVUU05NUF9ESVJfU09SVEVEKSkKKyAgICAgICAgICAgIENPTlRBSU5FUl9TRVRfT1BUSU9OUyhjb250YWluZXIsIENPTlRBSU5FUl9LRVlfVU5TT1JURUQsIHJjKTsKKyAgICB9CisKKyAgICBkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworICAgIGlmIChOVUxMID09IGRpcikgeworICAgICAgICBERUJVR01TR1RMKCgiZGlyZWN0b3J5OmNvbnRhaW5lciIsICIgIG5vdCBhIGRpclxuIikpOworICAgICAgICBpZiAoY29udGFpbmVyICE9IHVzZXJfY29udGFpbmVyKQorICAgICAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoqIGNvcHkgZGlybmFtZSBpbnRvIHBhdGggKi8KKyAgICBpZiAoZmxhZ3MgJiBORVRTTk1QX0RJUl9SRUxBVElWRV9QQVRIKQorICAgICAgICBkaXJuYW1lX2xlbiA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGRpcm5hbWVfbGVuID0gc3RybGVuKGRpcm5hbWUpOworICAgICAgICBzdHJsY3B5KHBhdGgsIGRpcm5hbWUsIHNpemVvZihwYXRoKSk7CisgICAgICAgIGlmICgoZGlybmFtZV9sZW4gKyAyKSA+IHNpemVvZihwYXRoKSkgeworICAgICAgICAgICAgLyoqIG5vdCBlbm91Z2ggcm9vbSBmb3IgZmlsZXMgKi8KKyAgICAgICAgICAgIGNsb3NlZGlyKGRpcik7CisgICAgICAgICAgICBpZiAoY29udGFpbmVyICE9IHVzZXJfY29udGFpbmVyKQorICAgICAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwYXRoW2Rpcm5hbWVfbGVuXSA9ICcvJzsKKyAgICAgICAgcGF0aFsrK2Rpcm5hbWVfbGVuXSA9ICdcMCc7CisgICAgfQorCisgICAgLyoqIGl0ZXJhdGUgb3ZlciBkaXIgKi8KKyAgICB3aGlsZSAoKGZpbGUgPSByZWFkZGlyKGRpcikpKSB7CisKKyAgICAgICAgaWYgKChmaWxlLT5kX25hbWUgPT0gTlVMTCkgfHwgKGZpbGUtPmRfbmFtZVswXSA9PSAwKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qKiBza2lwICcuJyBhbmQgJy4uJyAqLworICAgICAgICBpZiAoKGZpbGUtPmRfbmFtZVswXSA9PSAnLicpICYmCisgICAgICAgICAgICAoKGZpbGUtPmRfbmFtZVsxXSA9PSAwKSB8fAorICAgICAgICAgICAgICgoZmlsZS0+ZF9uYW1lWzFdID09ICcuJykgJiYgKChmaWxlLT5kX25hbWVbMl0gPT0gMCkpKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzdHJsY3B5KCZwYXRoW2Rpcm5hbWVfbGVuXSwgZmlsZS0+ZF9uYW1lLCBzaXplb2YocGF0aCkgLSBkaXJuYW1lX2xlbik7CisgICAgICAgIGlmIChOVUxMICE9IGZpbHRlcikgeworICAgICAgICAgICAgaWYgKGZsYWdzICYgTkVUU05NUF9ESVJfTlNGSUxFX1NUQVRTKSB7CisgICAgICAgICAgICAgICAgLyoqIHVzZSBsb2NhbCB2YXJzIGZvciBub3cgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3RhdChwYXRoLCAmc3RhdGJ1ZikgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IHN0YXQgJXNcbiIsIGZpbGUtPmRfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuc19maWxlX3RtcC5zdGF0cyA9ICZzdGF0YnVmOworICAgICAgICAgICAgICAgIG5zX2ZpbGVfdG1wLm5hbWUgPSBwYXRoOworICAgICAgICAgICAgICAgIHJjID0gKCpmaWx0ZXIpKCZuc19maWxlX3RtcCwgZmlsdGVyX2N0eCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmMgPSAoKmZpbHRlcikocGF0aCwgZmlsdGVyX2N0eCk7CisgICAgICAgICAgICBpZiAoMCA9PSByYykgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkaXJlY3Rvcnk6Y29udGFpbmVyOmZpbHRlcmVkIiwgIiVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtPmRfbmFtZSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoImRpcmVjdG9yeTpjb250YWluZXI6Zm91bmQiLCAiJXNcbiIsIHBhdGgpKTsKKyAgICAgICAgaWYgKChmbGFncyAmIE5FVFNOTVBfRElSX1JFQ1VSU0UpIAorI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfRElSRU5UX0RfVFlQRSkgJiYgZGVmaW5lZChEVF9ESVIpCisgICAgICAgICAgICAmJiAoZmlsZS0+ZF90eXBlID09IERUX0RJUikKKyNlbGlmIGRlZmluZWQoU19JU0RJUikKKyAgICAgICAgICAgICYmIChzdGF0KGZpbGUtPmRfbmFtZSwgJnN0YXRidWYpICE9IDApICYmIChTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpCisjZW5kaWYKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgLyoqIHh4eCBhZGQgdGhlIGRpciBhcyB3ZWxsPyBub3QgZm9yIG5vdy4uIG1heWJlIGFub3RoZXIgZmxhZz8gKi8KKyAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkKGNvbnRhaW5lciwgcGF0aCwgZmxhZ3MpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgTkVUU05NUF9ESVJfTlNGSUxFKSB7CisgICAgICAgICAgICBpZiAoX2luc2VydF9uc2ZpbGUoIGNvbnRhaW5lciwgZmlsZS0+ZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPyAmc3RhdGJ1ZiA6IE5VTEwsIGZsYWdzICkgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2hhciAqZHVwID0gc3RyZHVwKHBhdGgpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gZHVwKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3RyZHVwIGZhaWxlZCB3aGlsZSBidWlsZGluZyBkaXJlY3RvcnkgY29udGFpbmVyXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGR1cCk7CisgICAgICAgICAgICBpZiAoLTEgPT0gcmMgKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpcmVjdG9yeTpjb250YWluZXIiLCAiICBlcnIgYWRkaW5nICVzXG4iLCBwYXRoKSk7CisgICAgICAgICAgICAgICAgZnJlZShkdXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAvKiB3aGlsZSAqLworCisgICAgY2xvc2VkaXIoZGlyKTsKKworICAgIHJjID0gQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKTsKKyAgICBERUJVR01TR1RMKCgiZGlyZWN0b3J5OmNvbnRhaW5lciIsICIgIGNvbnRhaW5lciBub3cgaGFzICVkIGl0ZW1zXG4iLCByYykpOworICAgIGlmICgoMCA9PSByYykgJiYgIShmbGFncyAmIE5FVFNOTVBfRElSX0VNUFRZX09LKSkgeworICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKwordm9pZAorbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBDT05UQUlORVJfRlJFRV9BTEwoY29udGFpbmVyLCBOVUxMKTsKKyAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOworfQorCitzdGF0aWMgaW50CitfaW5zZXJ0X25zZmlsZSggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdGF0cywKKyAgICAgICAgICAgICAgICB1X2ludCBmbGFncykKK3sKKyAgICBpbnQgICAgICAgICAgIHJjOworICAgIG5ldHNubXBfZmlsZSAqbnNfZmlsZSA9IG5ldHNubXBfZmlsZV9uZXcobmFtZSwgMCwgMCwgMCk7CisgICAgaWYgKE5VTEwgPT0gbnNfZmlsZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgbnNfZmlsZVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBORVRTTk1QX0RJUl9OU0ZJTEVfU1RBVFMpIHsKKyAgICAgICAgbnNfZmlsZS0+c3RhdHMgPSAoc3RydWN0IHN0YXQqKWNhbGxvYygxLHNpemVvZigqKG5zX2ZpbGUtPnN0YXRzKSkpOworICAgICAgICBpZiAoTlVMTCA9PSBuc19maWxlLT5zdGF0cykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIHN0YXRzIGZvciBuc19maWxlXG4iKTsKKyAgICAgICAgICAgIG5ldHNubXBfZmlsZV9yZWxlYXNlKG5zX2ZpbGUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgCisgICAgICAgIC8qKiB1c2Ugc3RhdHMgZnJvbSBlYXJsaWVyIGlmIHdlIGhhdmUgdGhlbSAqLworICAgICAgICBpZiAoc3RhdHMpIHsKKyAgICAgICAgICAgIG1lbWNweShuc19maWxlLT5zdGF0cywgc3RhdHMsIHNpemVvZigqc3RhdHMpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0KG5zX2ZpbGUtPm5hbWUsIG5zX2ZpbGUtPnN0YXRzKSA8IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzdGF0KCkgZmFpbGVkIGZvciBuc19maWxlXG4iKTsKKyAgICAgICAgICAgIG5ldHNubXBfZmlsZV9yZWxlYXNlKG5zX2ZpbGUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGMsIG5zX2ZpbGUpOworICAgIGlmICgtMSA9PSByYyApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRpcmVjdG9yeTpjb250YWluZXIiLCAiICBlcnIgYWRkaW5nICVzXG4iLCBuYW1lKSk7CisgICAgICAgIG5ldHNubXBfZmlsZV9yZWxlYXNlKG5zX2ZpbGUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorI2Vsc2UgIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0RJUkVDVE9SWSAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChjb250YWluZXJfZGlyZWN0b3J5KTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9ESVJFQ1RPUlkgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jIGIvc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMKaW5kZXggYzgxY2ZkZS4uZjljZjA4ZSAxMDA2NDQKLS0tIGEvc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMKKysrIGIvc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMKQEAgLTQsOSArNCwxNSBAQAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZmRfZXZlbnRfbWFuYWdlciwgbGlibmV0c25tcCkKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIKIGludCAgICAgZXh0ZXJuYWxfcmVhZGZkW05VTV9FWFRFUk5BTF9GRFNdLCAgIGV4dGVybmFsX3JlYWRmZGxlbiAgID0gMDsKIGludCAgICAgZXh0ZXJuYWxfd3JpdGVmZFtOVU1fRVhURVJOQUxfRkRTXSwgIGV4dGVybmFsX3dyaXRlZmRsZW4gID0gMDsKIGludCAgICAgZXh0ZXJuYWxfZXhjZXB0ZmRbTlVNX0VYVEVSTkFMX0ZEU10sIGV4dGVybmFsX2V4Y2VwdGZkbGVuID0gMDsKQEAgLTE1OSwyMiArMTY1LDU1IEBACiAgKi8KIHZvaWQgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvKGludCAqbnVtZmRzLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsIGZkX3NldCAqZXhjZXB0ZmRzKQogeworICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBscmVhZGZkczsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbHdyaXRlZmRzOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBsZXhjZXB0ZmRzOworCisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmxyZWFkZmRzLCBGRF9TRVRTSVpFKTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbHdyaXRlZmRzLCBGRF9TRVRTSVpFKTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbGV4Y2VwdGZkcywgRkRfU0VUU0laRSk7CisKKyAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmxyZWFkZmRzLCByZWFkZmRzKTsKKyAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmx3cml0ZWZkcywgd3JpdGVmZHMpOworICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbGV4Y2VwdGZkcywgZXhjZXB0ZmRzKTsKKworICBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8yKG51bWZkcywgJmxyZWFkZmRzLCAmbHdyaXRlZmRzLCAmbGV4Y2VwdGZkcyk7CisKKyAgaWYgKG5ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KHJlYWRmZHMsICZscmVhZGZkcykgPCAwCisgICAgICB8fCBuZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldCh3cml0ZWZkcywgJmx3cml0ZWZkcykgPCAwCisgICAgICB8fCBuZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldChleGNlcHRmZHMsICZsZXhjZXB0ZmRzKSA8IDApCisgIHsKKyAgICBzbm1wX2xvZyhMT0dfRVJSLAorCSAgICAgIlVzZSBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8yKCkgZm9yIHByb2Nlc3NpbmciCisJICAgICAiIGxhcmdlIGZpbGUgZGVzY3JpcHRvcnNcbiIpOworICB9CisKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbHJlYWRmZHMpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZsd3JpdGVmZHMpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZsZXhjZXB0ZmRzKTsKK30KKwordm9pZCBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8yKGludCAqbnVtZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpyZWFkZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICp3cml0ZWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZXhjZXB0ZmRzKQorewogICBpbnQgaTsKIAogICBleHRlcm5hbF9mZF91bnJlZ2lzdGVyZWQgPSAwOwogCiAgIGZvciAoaSA9IDA7IGkgPCBleHRlcm5hbF9yZWFkZmRsZW47IGkrKykgewotICAgIEZEX1NFVChleHRlcm5hbF9yZWFkZmRbaV0sIHJlYWRmZHMpOworICAgIE5FVFNOTVBfTEFSR0VfRkRfU0VUKGV4dGVybmFsX3JlYWRmZFtpXSwgcmVhZGZkcyk7CiAgICAgaWYgKGV4dGVybmFsX3JlYWRmZFtpXSA+PSAqbnVtZmRzKQogICAgICAgKm51bWZkcyA9IGV4dGVybmFsX3JlYWRmZFtpXSArIDE7CiAgIH0KICAgZm9yIChpID0gMDsgaSA8IGV4dGVybmFsX3dyaXRlZmRsZW47IGkrKykgewotICAgIEZEX1NFVChleHRlcm5hbF93cml0ZWZkW2ldLCB3cml0ZWZkcyk7CisgICAgTkVUU05NUF9MQVJHRV9GRF9TRVQoZXh0ZXJuYWxfd3JpdGVmZFtpXSwgd3JpdGVmZHMpOwogICAgIGlmIChleHRlcm5hbF93cml0ZWZkW2ldID49ICpudW1mZHMpCiAgICAgICAqbnVtZmRzID0gZXh0ZXJuYWxfd3JpdGVmZFtpXSArIDE7CiAgIH0KICAgZm9yIChpID0gMDsgaSA8IGV4dGVybmFsX2V4Y2VwdGZkbGVuOyBpKyspIHsKLSAgICBGRF9TRVQoZXh0ZXJuYWxfZXhjZXB0ZmRbaV0sIGV4Y2VwdGZkcyk7CisgICAgTkVUU05NUF9MQVJHRV9GRF9TRVQoZXh0ZXJuYWxfZXhjZXB0ZmRbaV0sIGV4Y2VwdGZkcyk7CiAgICAgaWYgKGV4dGVybmFsX2V4Y2VwdGZkW2ldID49ICpudW1mZHMpCiAgICAgICAqbnVtZmRzID0gZXh0ZXJuYWxfZXhjZXB0ZmRbaV0gKyAxOwogICB9CkBAIC0xODUsMzggKzIyNCw3NCBAQAogICovCiB2b2lkIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzKGludCAqY291bnQsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywgZmRfc2V0ICpleGNlcHRmZHMpCiB7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGxyZWFkZmRzOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBsd3JpdGVmZHM7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGxleGNlcHRmZHM7CisKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbHJlYWRmZHMsIEZEX1NFVFNJWkUpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZsd3JpdGVmZHMsIEZEX1NFVFNJWkUpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZsZXhjZXB0ZmRzLCBGRF9TRVRTSVpFKTsKKworICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbHJlYWRmZHMsIHJlYWRmZHMpOworICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbHdyaXRlZmRzLCB3cml0ZWZkcyk7CisgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZsZXhjZXB0ZmRzLCBleGNlcHRmZHMpOworCisgIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzMihjb3VudCwgJmxyZWFkZmRzLCAmbHdyaXRlZmRzLCAmbGV4Y2VwdGZkcyk7CisKKyAgaWYgKG5ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KHJlYWRmZHMsICZscmVhZGZkcykgPCAwCisgICAgICB8fCBuZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldCh3cml0ZWZkcywgICZsd3JpdGVmZHMpIDwgMAorICAgICAgfHwgbmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQoZXhjZXB0ZmRzLCAmbGV4Y2VwdGZkcykgPCAwKQorICB7CisgICAgc25tcF9sb2coTE9HX0VSUiwKKwkgICAgICJVc2UgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMyKCkgZm9yIHByb2Nlc3NpbmciCisJICAgICAiIGxhcmdlIGZpbGUgZGVzY3JpcHRvcnNcbiIpOworICB9CisKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbHJlYWRmZHMpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZsd3JpdGVmZHMpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZsZXhjZXB0ZmRzKTsKK30KKwordm9pZCBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50czIoaW50ICpjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpyZWFkZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKndyaXRlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmV4Y2VwdGZkcykKK3sKICAgaW50IGk7CiAgIGZvciAoaSA9IDA7CiAgICAgICAgKmNvdW50ICYmIChpIDwgZXh0ZXJuYWxfcmVhZGZkbGVuKSAmJiAhZXh0ZXJuYWxfZmRfdW5yZWdpc3RlcmVkOyBpKyspIHsKLSAgICAgIGlmIChGRF9JU1NFVChleHRlcm5hbF9yZWFkZmRbaV0sIHJlYWRmZHMpKSB7CisgICAgICBpZiAoTkVUU05NUF9MQVJHRV9GRF9JU1NFVChleHRlcm5hbF9yZWFkZmRbaV0sIHJlYWRmZHMpKSB7CiAgICAgICAgICAgREVCVUdNU0dUTCgoImZkX2V2ZW50X21hbmFnZXI6bmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMiLCAKICAgICAgICAgICAgICAgICAgICAgICJyZWFkZmRbJWRdID0gJWRcbiIsIGksIGV4dGVybmFsX3JlYWRmZFtpXSkpOwogICAgICAgICAgIGV4dGVybmFsX3JlYWRmZGZ1bmNbaV0gKGV4dGVybmFsX3JlYWRmZFtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbF9yZWFkZmRfZGF0YVtpXSk7Ci0gICAgICAgICAgRkRfQ0xSKGV4dGVybmFsX3JlYWRmZFtpXSwgcmVhZGZkcyk7CisgICAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9DTFIoZXh0ZXJuYWxfcmVhZGZkW2ldLCByZWFkZmRzKTsKICAgICAgICAgICAoKmNvdW50KS0tOwogICAgICAgfQogICB9CiAgIGZvciAoaSA9IDA7CiAgICAgICAgKmNvdW50ICYmIChpIDwgZXh0ZXJuYWxfd3JpdGVmZGxlbikgJiYgIWV4dGVybmFsX2ZkX3VucmVnaXN0ZXJlZDsgaSsrKSB7Ci0gICAgICBpZiAoRkRfSVNTRVQoZXh0ZXJuYWxfd3JpdGVmZFtpXSwgd3JpdGVmZHMpKSB7CisgICAgICBpZiAoTkVUU05NUF9MQVJHRV9GRF9JU1NFVChleHRlcm5hbF93cml0ZWZkW2ldLCB3cml0ZWZkcykpIHsKICAgICAgICAgICBERUJVR01TR1RMKCgiZmRfZXZlbnRfbWFuYWdlcjpuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50cyIsIAogICAgICAgICAgICAgICAgICAgICAgIndyaXRlZmRbJWRdID0gJWRcbiIsIGksIGV4dGVybmFsX3dyaXRlZmRbaV0pKTsKICAgICAgICAgICBleHRlcm5hbF93cml0ZWZkZnVuY1tpXSAoZXh0ZXJuYWxfd3JpdGVmZFtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfd3JpdGVmZF9kYXRhW2ldKTsKLSAgICAgICAgICBGRF9DTFIoZXh0ZXJuYWxfd3JpdGVmZFtpXSwgd3JpdGVmZHMpOworICAgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfQ0xSKGV4dGVybmFsX3dyaXRlZmRbaV0sIHdyaXRlZmRzKTsKICAgICAgICAgICAoKmNvdW50KS0tOwogICAgICAgfQogICB9CiAgIGZvciAoaSA9IDA7CiAgICAgICAgKmNvdW50ICYmIChpIDwgZXh0ZXJuYWxfZXhjZXB0ZmRsZW4pICYmICFleHRlcm5hbF9mZF91bnJlZ2lzdGVyZWQ7IGkrKykgewotICAgICAgaWYgKEZEX0lTU0VUKGV4dGVybmFsX2V4Y2VwdGZkW2ldLCBleGNlcHRmZHMpKSB7CisgICAgICBpZiAoTkVUU05NUF9MQVJHRV9GRF9JU1NFVChleHRlcm5hbF9leGNlcHRmZFtpXSwgZXhjZXB0ZmRzKSkgewogICAgICAgICAgIERFQlVHTVNHVEwoKCJmZF9ldmVudF9tYW5hZ2VyOm5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzIiwgCiAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0ZmRbJWRdID0gJWRcbiIsIGksIGV4dGVybmFsX2V4Y2VwdGZkW2ldKSk7CiAgICAgICAgICAgZXh0ZXJuYWxfZXhjZXB0ZmRmdW5jW2ldIChleHRlcm5hbF9leGNlcHRmZFtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX2V4Y2VwdGZkX2RhdGFbaV0pOwotICAgICAgICAgIEZEX0NMUihleHRlcm5hbF9leGNlcHRmZFtpXSwgZXhjZXB0ZmRzKTsKKyAgICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX0NMUihleHRlcm5hbF9leGNlcHRmZFtpXSwgZXhjZXB0ZmRzKTsKICAgICAgICAgICAoKmNvdW50KS0tOwogICAgICAgfQogICB9CiB9CisjZWxzZSAgLyogICFORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoZmRfZXZlbnRfbWFuYWdlcik7CisjZW5kaWYgLyogICFORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvZmlsZV91dGlscy5jIGIvc25tcGxpYi9maWxlX3V0aWxzLmMKaW5kZXggOGY3ZmI2YS4uNTI2MTQzMSAxMDA2NDQKLS0tIGEvc25tcGxpYi9maWxlX3V0aWxzLmMKKysrIGIvc25tcGxpYi9maWxlX3V0aWxzLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM3LDcgKzM4LDExIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZpbGVfdXRpbHNfYWxsLCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZpbGVfdXRpbHMsIGZpbGVfdXRpbHNfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZpbGVfY2xvc2UsIGZpbGVfdXRpbHNfYWxsKQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklMRV9VVElMUwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBQcm90b3R5cGVzCkBAIC03Nyw2ICs4MiwzMSBAQAogfQogCiAvKioKKyAqIG9wZW4gZmlsZSBhbmQgZ2V0IHN0YXRzCisgKi8KK25ldHNubXBfZmlsZSAqCituZXRzbm1wX2ZpbGVfbmV3KGNvbnN0IGNoYXIgKm5hbWUsIGludCBmc19mbGFncywgbW9kZV90IG1vZGUsIHVfaW50IG5zX2ZsYWdzKQoreworICAgIG5ldHNubXBfZmlsZSAqZmlsZWkgPSBuZXRzbm1wX2ZpbGVfZmlsbChOVUxMLCBuYW1lLCBmc19mbGFncywgbW9kZSwgMCk7CisgICAgaWYgKE5VTEwgPT0gZmlsZWkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKG5zX2ZsYWdzICYgTkVUU05NUF9GSUxFX1NUQVRTKSB7CisgICAgICAgIGZpbGVpLT5zdGF0cyA9IChzdHJ1Y3Qgc3RhdCopY2FsbG9jKDEsIHNpemVvZigqKGZpbGVpLT5zdGF0cykpKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZmlsZWktPnN0YXRzKQorICAgICAgICAgICAgREVCVUdNU0dUKCgibnNmaWxlOm5ldyIsICJubyBtZW1vcnkgZm9yIHN0YXRzXG4iKSk7CisgICAgICAgIGVsc2UgaWYgKHN0YXQobmFtZSwgZmlsZWktPnN0YXRzKSAhPSAwKQorICAgICAgICAgICAgREVCVUdNU0dUKCgibnNmaWxlOm5ldyIsICJlcnJvciBnZXR0aW5nIHN0YXRzXG4iKSk7CisgICAgfQorCisgICAgaWYgKG5zX2ZsYWdzICYgTkVUU05NUF9GSUxFX0FVVE9fT1BFTikKKyAgICAgICAgbmV0c25tcF9maWxlX29wZW4oZmlsZWkpOworCisgICAgcmV0dXJuIGZpbGVpOworfQorCisgICAgICAgIAorLyoqCiAgKiBmaWxsIGNvcmUgbWVtYmVycyBpbiBhIG5ldHNubXBfZmlsZSBzdHJ1Y3R1cmUKICAqCiAgKiBAcGFyYW0gZmlsZWkgICAgICBzdHJ1Y3R1cmUgdG8gZmlsbDsgaWYgTlVMTCwgYSBuZXcgb25lIHdpbGwgYmUgYWxsb2NhdGVkCkBAIC0xMDAsNiArMTMwLDcgQEAKIAogICAgIGZpbGVpLT5mc19mbGFncyA9IGZzX2ZsYWdzOwogICAgIGZpbGVpLT5uc19mbGFncyA9IG5zX2ZsYWdzOworICAgIGZpbGVpLT5tb2RlID0gbW9kZTsKIAogICAgIHJldHVybiBmaWxlaTsKIH0KQEAgLTEyNiw2ICsxNTcsOSBAQAogICAgIGlmIChOVUxMICE9IGZpbGVpLT5leHRyYXMpCiAgICAgICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKGZpbGVpLT5leHRyYXMpOwogCisgICAgaWYgKE5VTEwgIT0gZmlsZWktPnN0YXRzKQorICAgICAgICBmcmVlKGZpbGVpLT5zdGF0cyk7CisKICAgICBTTk1QX0ZSRUUoZmlsZWkpOwogCiAgICAgcmV0dXJuIHJjOwpAQCAtMTYxLDcgKzE5NSw3IEBACiAgICAgICAgIGZpbGVpLT5mZCA9IG9wZW4oZmlsZWktPm5hbWUsIGZpbGVpLT5mc19mbGFncywgZmlsZWktPm1vZGUpOwogCiAgICAgaWYgKGZpbGVpLT5mZCA8IDApIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIG9wZW5pbmcgJXMgKCVkKVxuIiwgZmlsZWktPm5hbWUsIGVycm5vKTsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfZmlsZSIsICJlcnJvciBvcGVuaW5nICVzICglZClcbiIsIGZpbGVpLT5uYW1lLCBlcnJubykpOwogICAgIH0KIAogICAgIC8qCkBAIC0xNzcsNiArMjExLDcgQEAKICAqIEByZXR2YWwgIDAgOiBzdWNjZXNzCiAgKiBAcmV0dmFsIC0xIDogZXJyb3IKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTEVfQ0xPU0UKIGludAogbmV0c25tcF9maWxlX2Nsb3NlKG5ldHNubXBfZmlsZSAqIGZpbGVpKQogewpAQCAtMjAwLDExICsyMzUsMjkgQEAKICAgICAgKi8KICAgICByYyA9IGNsb3NlKGZpbGVpLT5mZCk7CiAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY2xvc2luZyAlcyAoJWQpXG4iLCBmaWxlaS0+bmFtZSwgZXJybm8pOworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9maWxlIiwgImVycm9yIGNsb3NpbmcgJXMgKCVkKVxuIiwgZmlsZWktPm5hbWUsIGVycm5vKSk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgZmlsZWktPmZkID0gLTE7CiAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSUxFX0NMT1NFICovCiAKK3ZvaWQKK25ldHNubXBfZmlsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2ZpbGUgKmZpbGUsIHZvaWQgKmNvbnRleHQpCit7CisgICAgbmV0c25tcF9maWxlX3JlbGVhc2UoZmlsZSk7Cit9CisKK2ludAorbmV0c25tcF9maWxlX2NvbXBhcmVfbmFtZShuZXRzbm1wX2ZpbGUgKmxocywgbmV0c25tcF9maWxlICpyaHMpCit7CisgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gbGhzKSAmJiAoTlVMTCAhPSByaHMpKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgoTlVMTCAhPSBsaHMtPm5hbWUpICYmIChOVUxMICE9IHJocy0+bmFtZSkpOworCisgICAgcmV0dXJuIHN0cmNtcChsaHMtPm5hbWUsIHJocy0+bmFtZSk7Cit9CisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTEVfVVRJTFMgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQoZmlsZV91dGlscyk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSUxFX1VUSUxTICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2dldG9wdC5jIGIvc25tcGxpYi9nZXRvcHQuYwppbmRleCBkMmIyMDNlLi4xZThlOWMzIDEwMDY0NAotLS0gYS9zbm1wbGliL2dldG9wdC5jCisrKyBiL3NubXBsaWIvZ2V0b3B0LmMKQEAgLTM1LDEwICszNSwxNCBAQAogICAgICIkSWQkIjsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaD4KKwogI2lmZGVmIF9CU0QKIGV4dGVybiBjaGFyICAgICpfX3Byb2duYW1lOwogI2Vsc2UKZGlmZiAtLWdpdCBhL3NubXBsaWIvZ2V0dGltZW9mZGF5LmMgYi9zbm1wbGliL2dldHRpbWVvZmRheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNWMwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL2dldHRpbWVvZmRheS5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBnZXR0aW1lb2ZkYXkoKSByZXBsYWNlbWVudCBmb3IgTVNWQy4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKworI2lmZGVmIEhBVkVfU1lTX1RJTUVCX0gKKyMgaW5jbHVkZSA8c3lzL3RpbWViLmg+IC8qIF9mdGltZSgpICovCisjZW5kaWYKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisKK2ludAorZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eikKK3sKKyAgICBzdHJ1Y3QgX3RpbWViICAgdGltZWJ1ZmZlcjsKKworICAgIF9mdGltZSgmdGltZWJ1ZmZlcik7CisgICAgdHYtPnR2X3VzZWMgPSB0aW1lYnVmZmVyLm1pbGxpdG0gKiAxMDAwOworICAgIHR2LT50dl9zZWMgPSAobG9uZyl0aW1lYnVmZmVyLnRpbWU7CisgICAgcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvaW5ldF9udG9wLmMgYi9zbm1wbGliL2luZXRfbnRvcC5jCmluZGV4IGMyNmFmYzQuLjA1YmFmYmUgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvaW5ldF9udG9wLmMKKysrIGIvc25tcGxpYi9pbmV0X250b3AuYwpAQCAtMTksMTYgKzE5LDEwIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmbmRlZiBIQVZFX0lORVRfTlRPUAotCiAjaWYgSEFWRV9BUlBBX05BTUVTRVJfSAogI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX1NUUklOR19ICkBAIC0zOSw2ICszMyw4IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisKICNpZm5kZWYgRUFGTk9TVVBQT1JUCiAjZGVmaW5lIEVBRk5PU1VQUE9SVCAgICAgICAgICAgIFdTQUVBRk5PU1VQUE9SVAogI2VuZGlmCkBAIC03Niw3ICs3Miw3IEBACiAgKglQYXVsIFZpeGllLCAxOTk2LgogICovCiBjb25zdCBjaGFyICoKLWluZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK25ldHNubXBfaW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQogewogCiAJc3dpdGNoIChhZikgewpAQCAtMjEyLDUgKzIwOCwzIEBACiAJcmV0dXJuIChkc3QpOwogfQogI2VuZGlmCi0KLSNlbmRpZiAvKiBIQVZFX0lORVRfTlRPUCAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9pbmV0X250b3AuaCBiL3NubXBsaWIvaW5ldF9udG9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExZDhhNgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvaW5ldF9udG9wLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfSU5FVF9OVE9QX0gKKyNkZWZpbmUgX0lORVRfTlRPUF9ICisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorCisjaWZuZGVmIEhBVkVfSU5FVF9OVE9QCitjb25zdCBjaGFyICAgICAqbmV0c25tcF9pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpOworI2RlZmluZSBpbmV0X250b3AgbmV0c25tcF9pbmV0X250b3AKKyNlbmRpZiAvKkhBVkVfSU5FVF9OVE9QICovCisKKyNlbmRpZiAvKl9JTkVUX05UT1BfSCovCmRpZmYgLS1naXQgYS9zbm1wbGliL2luZXRfcHRvbi5jIGIvc25tcGxpYi9pbmV0X3B0b24uYwppbmRleCAwYTAzYThmLi40N2ZlM2VjIDEwMDY0NAotLS0gYS9zbm1wbGliL2luZXRfcHRvbi5jCisrKyBiL3NubXBsaWIvaW5ldF9wdG9uLmMKQEAgLTE5LDE4ICsxOSwxMiBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZm5kZWYgSEFWRV9JTkVUX1BUT04KLQogI2luY2x1ZGUgPGN0eXBlLmg+CiAKICNpZiBIQVZFX0FSUEFfTkFNRVNFUl9ICiAjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2VuZGlmCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfU1RSSU5HX0gKQEAgLTQwLDYgKzM0LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKIAogI2lmbmRlZiBFQUZOT1NVUFBPUlQKICNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICAgICAgICAgV1NBRUFGTk9TVVBQT1JUCkBAIC01Miw5ICs0Nyw2IEBACiAjaWZuZGVmIElOVDE2U1oKICNkZWZpbmUJSU5UMTZTWgkJMgogI2VuZGlmCi0gIC8qCi0gICAqIEVuZCBvZiBOZXQtU05NUCBXaW4zMiBhZGRpdGlvbnMKLSAgICovCiAKICNpZm5kZWYgSU5BRERSU1oKICNkZWZpbmUJSU5BRERSU1oJNApAQCAtODIsNyArNzQsNyBAQAogICoJUGF1bCBWaXhpZSwgMTk5Ni4KICAqLwogaW50Ci1pbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKK25ldHNubXBfaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCiB7CiAKIAlzd2l0Y2ggKGFmKSB7CkBAIC0zMTcsNSArMzA5LDMgQEAKIAlyZXR1cm4gKDEpOwogfQogI2VuZGlmCi0KLSNlbmRpZiAvKiBIQVZFX0lORVRfUFRPTiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9pbmV0X3B0b24uaCBiL3NubXBsaWIvaW5ldF9wdG9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5NjY3MQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvaW5ldF9wdG9uLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfSU5FVF9QVE9OX0gKKyNkZWZpbmUgX0lORVRfUFRPTl9ICisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorCisjaWZuZGVmIEhBVkVfSU5FVF9QVE9OCitpbnQgICAgICAgICAgICAgbmV0c25tcF9pbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCk7CisjZGVmaW5lIGluZXRfcHRvbiBuZXRzbm1wX2luZXRfcHRvbgorI2VuZGlmIC8qSEFWRV9JTkVUX1BUT04gKi8KKworI2VuZGlmIC8qX0lORVRfUFRPTl9IKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvaW50NjQuYyBiL3NubXBsaWIvaW50NjQuYwppbmRleCBlYTU2NjczLi41MWYxZjMyIDEwMDY0NAotLS0gYS9zbm1wbGliL2ludDY0LmMKKysrIGIvc25tcGxpYi9pbnQ2NC5jCkBAIC0xNiw5ICsxNiw2IEBACiAjZWxzZQogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvaW50NjQuaD4KQEAgLTI2LDYgKzIzLDggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKwogLyoqCiAgKiBEaXZpZGUgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgYnkgMTAuCiAgKgpAQCAtMjAwLDYgKzE5OSw4IEBACiAgICAgdTY0SW5jcihwdTY0b3V0LCAmdG1wKTsKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHU2NGNvcHksIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1U2NENPUFkKIC8qKgogICogQ29weSBhIDY0LWJpdCBudW1iZXIuCiAgKgpAQCAtMjExLDYgKzIxMiw3IEBACiB7CiAgICAgKnB1NjRvbmUgPSAqcHU2NHR3bzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1U2NENPUFkgKi8KIAogLyoqCiAgKiBTZXQgYW4gdW5zaWduZWQgNjQtYml0IG51bWJlciB0byB6ZXJvLgpAQCAtMjY2LDcgKzI2OCw3IEBACiAgICAgaWYoIChOVUxMID09IG9sZF92YWwpIHx8IChOVUxMID09IG5ld192YWwpICkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgREVCVUdNU0dUTCgoIjk6YzY0OmNoZWNrX3dyYXAiLCAiY2hlY2sgd3JhcCAweCUweC4weCUweCAweCUweC4weCUweFxuIiwKKyAgICBERUJVR01TR1RMKCgiOTpjNjQ6Y2hlY2tfd3JhcCIsICJjaGVjayB3cmFwIDB4JTBseC4weCUwbHggMHglMGx4LjB4JTBseFxuIiwKICAgICAgICAgICAgICAgICBvbGRfdmFsLT5oaWdoLCBvbGRfdmFsLT5sb3csIG5ld192YWwtPmhpZ2gsIG5ld192YWwtPmxvdykpOwogICAgIAogICAgIC8qCkBAIC0zNDUsNyArMzQ3LDcgQEAKICAgICBpZiAoKE5VTEwgPT0gbmVlZF93cmFwX2NoZWNrKSB8fCAoMCAhPSAqbmVlZF93cmFwX2NoZWNrKSkgewogICAgICAgICByYyA9IG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKG9sZF9wcmV2X3ZhbCxuZXdfdmFsLCAxKTsKICAgICAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiYzY0IDMyIGJpdCBjaGVjayBmYWlsZWRcbiIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImM2NCIsIjMyIGJpdCBjaGVjayBmYWlsZWRcbiIpKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KQEAgLTM3NSw3ICszNzcsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKChwcmV2X3ZhbC0+bG93ICE9IG5ld192YWwtPmxvdykgfHwKICAgICAgICAgICAgIChwcmV2X3ZhbC0+aGlnaCAhPSBuZXdfdmFsLT5oaWdoKSkgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImxvb2tzIGxpa2UgYSA2NGJpdCB3cmFwLCBidXQgcHJldiE9bmV3XG4iKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJjNjQiLCAibG9va3MgbGlrZSBhIDY0Yml0IHdyYXAsIGJ1dCBwcmV2IT1uZXdcbiIpKTsKICAgICAgICAgICAgIHJldHVybiAtMjsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChOVUxMICE9IG5lZWRfd3JhcF9jaGVjaykKQEAgLTQ0Miw3ICs0NDQsNyBAQAogICAgICAgICBzdHIrKzsKICAgICB9CiAKLSAgICB3aGlsZSAoKnN0ciAmJiBpc2RpZ2l0KCpzdHIpKSB7CisgICAgd2hpbGUgKCpzdHIgJiYgaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKnN0cikpKSB7CiAgICAgICAgIG9rID0gMTsKICAgICAgICAgdSA9ICpzdHIgLSAnMCc7CiAgICAgICAgIG11bHRCeTEwKCppNjQsICZpNjRwKTsKZGlmZiAtLWdpdCBhL3NubXBsaWIva2V5dG9vbHMuYyBiL3NubXBsaWIva2V5dG9vbHMuYwppbmRleCBhYTZhNzEyLi4wY2NiM2E2IDEwMDY0NAotLS0gYS9zbm1wbGliL2tleXRvb2xzLmMKKysrIGIvc25tcGxpYi9rZXl0b29scy5jCkBAIC0xNCwxMiArMTQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZmRlZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNTEsNiArNDksMTAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21kNS5oPgogI2VuZGlmCiAjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfbWQ1Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX3NoYS5oPgorI2VuZGlmCiAKICNpZmRlZiBORVRTTk1QX1VTRV9QS0NTMTEKICNpbmNsdWRlIDxzZWN1cml0eS9jcnlwdG9raS5oPgpAQCAtNjEsNiArNjMsMTEgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbV9zdXBwb3J0LCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbV9rZXl0b29scywgdXNtX3N1cHBvcnQpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VU01fS0VZVE9PTFMKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKICAqIGdlbmVyYXRlX0t1CiAgKgpAQCAtOTYsMTEgKzEwMywxNSBAQAogICovCiBpbnQKIGdlbmVyYXRlX0t1KGNvbnN0IG9pZCAqIGhhc2h0eXBlLCB1X2ludCBoYXNodHlwZV9sZW4sCi0gICAgICAgICAgICB1X2NoYXIgKiBQLCBzaXplX3QgcHBsZW4sIHVfY2hhciAqIEt1LCBzaXplX3QgKiBrdWxlbikKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKQorICAgICAgICAgICAgY29uc3QgdV9jaGFyICogUCwgc2l6ZV90IHBwbGVuLCB1X2NoYXIgKiBLdSwgc2l6ZV90ICoga3VsZW4pCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCiAgICAgICAgIG5ieXRlcyA9IFVTTV9MRU5HVEhfRVhQQU5ERURfUEFTU1BIUkFTRTsKKyNpZiAhZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBcCisgICAgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQorICAgIGludCAgICAgICAgICAgICByZXQ7CisjZW5kaWYKIAogICAgIHVfaW50ICAgICAgICAgICBpLCBwaW5kZXggPSAwOwogCkBAIC0xMDgsNyArMTE5LDEyIEBACiAKICNpZmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCiAgICAgRVZQX01EX0NUWCAgICAgKmN0eCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICAgIHRtcF9sZW47CisjZWxpZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyAgICBTSEFfQ1RYIGNzaGExOworICAgIE1ENV9DVFggY21kNTsKKyAgICBjaGFyICAgIGNyeXB0b3R5cGUgPSAwOworI2RlZmluZSBUWVBFX01ENSAgMQorI2RlZmluZSBUWVBFX1NIQTEgMgogI2Vsc2UKICAgICBNRHN0cnVjdCAgICAgICAgTUQ7CiAjZW5kaWYKQEAgLTEzNywxNyArMTUzLDM1IEBACiAgICAgY3R4ID0gRVZQX01EX0NUWF9jcmVhdGUoKTsKICNlbHNlCiAgICAgY3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSk7Ci0gICAgRVZQX01EX0NUWF9pbml0KGN0eCk7CisgICAgaWYgKCFFVlBfTURfQ1RYX2luaXQoY3R4KSkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogI2VuZGlmCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKLSAgICBpZiAoSVNUUkFOU0ZPUk0oaGFzaHR5cGUsIEhNQUNNRDVBdXRoKSkKLSAgICAgICAgRVZQX0RpZ2VzdEluaXQoY3R4LCBFVlBfbWQ1KCkpOwotICAgIGVsc2UKKyAgICBpZiAoSVNUUkFOU0ZPUk0oaGFzaHR5cGUsIEhNQUNNRDVBdXRoKSkgeworICAgICAgICBpZiAoIUVWUF9EaWdlc3RJbml0KGN0eCwgRVZQX21kNSgpKSkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICBpZiAoSVNUUkFOU0ZPUk0oaGFzaHR5cGUsIEhNQUNTSEExQXV0aCkpCi0gICAgICAgIEVWUF9EaWdlc3RJbml0KGN0eCwgRVZQX3NoYTEoKSk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoSVNUUkFOU0ZPUk0oaGFzaHR5cGUsIEhNQUNTSEExQXV0aCkpIHsKKyAgICAgICAgICAgIGlmICghRVZQX0RpZ2VzdEluaXQoY3R4LCBFVlBfc2hhMSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0gZWxzZQogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBnZW5lcmF0ZV9LdV9xdWl0KTsKKyNlbGlmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CisgICAgaWYgKElTVFJBTlNGT1JNKGhhc2h0eXBlLCBITUFDTUQ1QXV0aCkpIHsKKyAgICAgICAgaWYgKCFNRDVfSW5pdCgmY21kNSkpCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIGNyeXB0b3R5cGUgPSBUWVBFX01ENTsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICBpZiAoSVNUUkFOU0ZPUk0oaGFzaHR5cGUsIEhNQUNTSEExQXV0aCkpIHsKKyAgICAgICAgaWYgKCFTSEExX0luaXQoJmNzaGExKSkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgY3J5cHRvdHlwZSA9IFRZUEVfU0hBMTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gKFNOTVBFUlJfR0VORVJSKTsKKyAgICB9CiAjZWxzZQogICAgIE1EYmVnaW4oJk1EKTsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9VU0VfT1BFTlNTTCAqLwpAQCAtMTU5LDI5ICsxOTMsNTQgQEAKICAgICAgICAgfQogI2lmZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKICAgICAgICAgRVZQX0RpZ2VzdFVwZGF0ZShjdHgsIGJ1ZiwgVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0spOworI2VsaWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisgICAgICAgIGlmIChUWVBFX1NIQTEgPT0gY3J5cHRvdHlwZSkgeworICAgICAgICAgICAgcnZhbCA9ICFTSEExX1VwZGF0ZSgmY3NoYTEsIGJ1ZiwgVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0spOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcnZhbCA9ICFNRDVfVXBkYXRlKCZjbWQ1LCBidWYsIFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnZhbCAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fRU5DUllQVElPTkVSUk9SOworICAgICAgICB9CiAjZWxpZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKICAgICAgICAgaWYgKE1EdXBkYXRlKCZNRCwgYnVmLCBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSyAqIDgpKSB7CiAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9VU01fRU5DUllQVElPTkVSUk9SOwogICAgICAgICAgICAgZ290byBtZDVfZmluOwogICAgICAgICB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfVVNFX09QRU5TU0wgKi8KLQogICAgICAgICBuYnl0ZXMgLT0gVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0s7CiAgICAgfQogCiAjaWZkZWYgTkVUU05NUF9VU0VfT1BFTlNTTAorICAgIHsKKyAgICB1bnNpZ25lZCBpbnQgICAgdG1wX2xlbjsKKwogICAgIHRtcF9sZW4gPSAqa3VsZW47CiAgICAgRVZQX0RpZ2VzdEZpbmFsKGN0eCwgKHVuc2lnbmVkIGNoYXIgKikgS3UsICZ0bXBfbGVuKTsKICAgICAqa3VsZW4gPSB0bXBfbGVuOwogICAgIC8qCiAgICAgICogd2hhdCBhYm91dCBmcmVlKCkgCiAgICAgICovCisgICAgfQorI2VsaWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisgICAgaWYgKFRZUEVfU0hBMSA9PSBjcnlwdG90eXBlKSB7CisgICAgICAgIFNIQTFfRmluYWwoS3UsICZjc2hhMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTUQ1X0ZpbmFsKEt1LCAmY21kNSk7CisgICAgfQorICAgIHJldCA9IHNjX2dldF9wcm9wZXJsZW5ndGgoaGFzaHR5cGUsIGhhc2h0eXBlX2xlbik7CisgICAgaWYgKHJldCA9PSBTTk1QRVJSX0dFTkVSUikKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICprdWxlbiA9IHJldDsKICNlbGlmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENQogICAgIGlmIChNRHVwZGF0ZSgmTUQsIGJ1ZiwgMCkpIHsKICAgICAgICAgcnZhbCA9IFNOTVBFUlJfVVNNX0VOQ1JZUFRJT05FUlJPUjsKICAgICAgICAgZ290byBtZDVfZmluOwogICAgIH0KLSAgICAqa3VsZW4gPSBzY19nZXRfcHJvcGVybGVuZ3RoKGhhc2h0eXBlLCBoYXNodHlwZV9sZW4pOworICAgIHJldCA9IHNjX2dldF9wcm9wZXJsZW5ndGgoaGFzaHR5cGUsIGhhc2h0eXBlX2xlbik7CisgICAgaWYgKHJldCA9PSBTTk1QRVJSX0dFTkVSUikKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICprdWxlbiA9IHJldDsKICAgICBNRGdldCgmTUQsIEt1LCAqa3VsZW4pOwogICBtZDVfZmluOgogICAgIG1lbXNldCgmTUQsIDAsIHNpemVvZihNRCkpOwpAQCAtMjkyLDEwICszNTEsMTAgQEAKICAqLwogaW50CiBnZW5lcmF0ZV9rdWwoY29uc3Qgb2lkICogaGFzaHR5cGUsIHVfaW50IGhhc2h0eXBlX2xlbiwKLSAgICAgICAgICAgICB1X2NoYXIgKiBlbmdpbmVJRCwgc2l6ZV90IGVuZ2luZUlEX2xlbiwKLSAgICAgICAgICAgICB1X2NoYXIgKiBLdSwgc2l6ZV90IGt1X2xlbiwKKyAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwgc2l6ZV90IGVuZ2luZUlEX2xlbiwKKyAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBLdSwgc2l6ZV90IGt1X2xlbiwKICAgICAgICAgICAgICB1X2NoYXIgKiBLdWwsIHNpemVfdCAqIGt1bF9sZW4pCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwogICAgIHVfaW50ICAgICAgICAgICBuYnl0ZXMgPSAwOwpAQCAtMzI0LDcgKzM4Myw3IEBACiAKICAgICBwcm9wZXJsZW5ndGggPSAoc2l6ZV90KSBpcHJvcGVybGVuZ3RoOwogCi0gICAgaWYgKCgoaW50KSAqa3VsX2xlbiA8IHByb3Blcmxlbmd0aCkgfHwgKChpbnQpIGt1X2xlbiA8IHByb3Blcmxlbmd0aCkpIHsKKyAgICBpZiAoKCprdWxfbGVuIDwgcHJvcGVybGVuZ3RoKSB8fCAoa3VfbGVuIDwgcHJvcGVybGVuZ3RoKSkgewogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBnZW5lcmF0ZV9rdWxfcXVpdCk7CiAgICAgfQogCkBAIC00MDMsOSArNDYyLDEwIEBACiAgICAgICAgICAgICAgICAgIHVfY2hhciAqIG9sZGtleSwgc2l6ZV90IG9sZGtleV9sZW4sCiAgICAgICAgICAgICAgICAgIHVfY2hhciAqIG5ld2tleSwgc2l6ZV90IG5ld2tleV9sZW4sCiAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGtjc3RyaW5nLCBzaXplX3QgKiBrY3N0cmluZ19sZW4pCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOworICAgIGludCAgICAgICAgICAgICBpcHJvcGVybGVuZ3RoOwogICAgIHNpemVfdCAgICAgICAgICBwcm9wZXJsZW5ndGg7CiAgICAgc2l6ZV90ICAgICAgICAgIG5ieXRlcyA9IDA7CiAKQEAgLTQyNywxNSArNDg3LDE1IEBACiAgICAgLyoKICAgICAgKiBTZXR1cCBmb3IgdGhlIHRyYW5zZm9ybSB0eXBlLgogICAgICAqLwotICAgIHByb3Blcmxlbmd0aCA9IHNjX2dldF9wcm9wZXJsZW5ndGgoaGFzaHR5cGUsIGhhc2h0eXBlX2xlbik7Ci0gICAgaWYgKHByb3Blcmxlbmd0aCA9PSBTTk1QRVJSX0dFTkVSUikKKyAgICBpcHJvcGVybGVuZ3RoID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChoYXNodHlwZSwgaGFzaHR5cGVfbGVuKTsKKyAgICBpZiAoaXByb3Blcmxlbmd0aCA9PSBTTk1QRVJSX0dFTkVSUikKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgZW5jb2RlX2tleWNoYW5nZV9xdWl0KTsKIAogICAgIGlmICgob2xka2V5X2xlbiAhPSBuZXdrZXlfbGVuKSB8fCAoKmtjc3RyaW5nX2xlbiA8ICgyICogb2xka2V5X2xlbikpKSB7CiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIGVuY29kZV9rZXljaGFuZ2VfcXVpdCk7CiAgICAgfQogCi0gICAgcHJvcGVybGVuZ3RoID0gU05NUF9NSU4oKGludCkgb2xka2V5X2xlbiwgcHJvcGVybGVuZ3RoKTsKKyAgICBwcm9wZXJsZW5ndGggPSBTTk1QX01JTihvbGRrZXlfbGVuLCAoc2l6ZV90KWlwcm9wZXJsZW5ndGgpOwogCiAgICAgLyoKICAgICAgKiBVc2UgdGhlIG9sZCBrZXkgYW5kIHNvbWUgcmFuZG9tIGJ5dGVzIHRvIGVuY29kZSB0aGUgbmV3IGtleQpAQCAtNDU2LDcgKzUxNiw3IEBACiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KICAgICBydmFsID0gc2NfcmFuZG9tKGtjc3RyaW5nLCAmbmJ5dGVzKTsKICAgICBRVUlURlVOKHJ2YWwsIGVuY29kZV9rZXljaGFuZ2VfcXVpdCk7Ci0gICAgaWYgKChpbnQpIG5ieXRlcyAhPSBwcm9wZXJsZW5ndGgpIHsKKyAgICBpZiAobmJ5dGVzICE9IHByb3Blcmxlbmd0aCkgewogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBlbmNvZGVfa2V5Y2hhbmdlX3F1aXQpOwogICAgIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIU5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLwpAQCAtNDc2LDcgKzUzNiw3IEBACiAKICAgICAgICAga2NzdHJpbmcgKz0gcHJvcGVybGVuZ3RoOwogICAgICAgICBuYnl0ZXMgPSAwOwotICAgICAgICB3aGlsZSAoKGludCkgKG5ieXRlcysrKSA8IHByb3Blcmxlbmd0aCkgeworICAgICAgICB3aGlsZSAoKG5ieXRlcysrKSA8IHByb3Blcmxlbmd0aCkgewogICAgICAgICAgICAgKmtjc3RyaW5nKysgXj0gKm5ld2tleSsrOwogICAgICAgICB9CiAgICAgfQpAQCAtNTMxLDcgKzU5MSw3IEBACiAgICAgICAgICAgICAgICAgIHVfY2hhciAqIG9sZGtleSwgc2l6ZV90IG9sZGtleV9sZW4sCiAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGtjc3RyaW5nLCBzaXplX3Qga2NzdHJpbmdfbGVuLAogICAgICAgICAgICAgICAgICB1X2NoYXIgKiBuZXdrZXksIHNpemVfdCAqIG5ld2tleV9sZW4pCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwogICAgIHNpemVfdCAgICAgICAgICBwcm9wZXJsZW5ndGggPSAwOwpAQCAtNTg4LDcgKzY0OCw3IEBACiAgICAgICAgIG1lbWNweShuZXdrZXksIHRtcF9idWYsIHByb3Blcmxlbmd0aCk7CiAgICAgICAgIGJ1ZnAgPSBrY3N0cmluZyArIHByb3Blcmxlbmd0aDsKICAgICAgICAgbmJ5dGVzID0gMDsKLSAgICAgICAgd2hpbGUgKChpbnQpIChuYnl0ZXMrKykgPCBwcm9wZXJsZW5ndGgpIHsKKyAgICAgICAgd2hpbGUgKChuYnl0ZXMrKykgPCBwcm9wZXJsZW5ndGgpIHsKICAgICAgICAgICAgICpuZXdrZXkrKyBePSAqYnVmcCsrOwogICAgICAgICB9CiAgICAgfQpAQCAtNTk5LDggKzY1OSw3IEBACiAgICAgICAgICAgICBtZW1zZXQobmV3a2V5LCAwLCBwcm9wZXJsZW5ndGgpOwogICAgIH0KICAgICBtZW1zZXQodG1wX2J1ZiwgMCwgU05NUF9NQVhCVUYpOwotICAgIGlmICh0bXBidWYgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKHRtcGJ1Zik7CisgICAgU05NUF9GUkVFKHRtcGJ1Zik7CiAKICAgICByZXR1cm4gcnZhbDsKIApAQCAtNjA5LDMgKzY2OCw0IEBACiAjZWxzZQogX0tFWVRPT0xTX05PVF9BVkFJTEFCTEUKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJuYWwgb3Igb3BlbnNzbCAqLworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVNNX0tFWVRPT0xTICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2xhcmdlX2ZkX3NldC5jIGIvc25tcGxpYi9sYXJnZV9mZF9zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGRkNDgxCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9sYXJnZV9mZF9zZXQuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoqCisgKiBAZmlsZSBsYXJnZV9mZF9zZXQuYworICoKKyAqIEBicmllZiBNYWNybydzIGFuZCBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGlvbiBvZiBsYXJnZSBmaWxlIGRlc2NyaXB0b3Igc2V0cy4KKyAqLworCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIG1lbXNldCgpLCB3aGljaCBpcyBpbnZva2VkIGJ5IEZEX1pFUk8oKSAqLworCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oPgorCisKKyNpZiAhZGVmaW5lZChjeWd3aW4pICYmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCisKKyNkZWZpbmUgTEZEX1NFVChuLCBwKSAgICBGRF9TRVQobiwgcCkKKyNkZWZpbmUgTEZEX0NMUihuLCBwKSAgICBGRF9DTFIobiwgcCkKKyNkZWZpbmUgTEZEX0lTU0VUKG4sIHApICBGRF9JU1NFVChuLCBwKQorCit2b2lkCituZXRzbm1wX2xhcmdlX2ZkX3NldGZkKFNPQ0tFVCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKKyAgICB1bnNpZ25lZCAgICAgICAgaTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGZkICE9IElOVkFMSURfU09DS0VUKTsKKworICAgIGlmIChmZHNldC0+bGZzX3NldC5mZF9jb3VudCA9PSBmZHNldC0+bGZzX3NldHNpemUpCisgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZShmZHNldCwgMiAqIChmZHNldC0+bGZzX3NldHNpemUgKyAxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZmRzZXQtPmxmc19zZXQuZmRfY291bnQ7IGkrKykgeworICAgICAgICBpZiAoZmRzZXQtPmxmc19zZXQuZmRfYXJyYXlbaV0gPT0gKFNPQ0tFVCkgKGZkKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChpID09IGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50CisgICAgICAgICYmIGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50IDwgZmRzZXQtPmxmc19zZXRzaXplKSB7CisgICAgICAgIGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50Kys7CisgICAgICAgIGZkc2V0LT5sZnNfc2V0LmZkX2FycmF5W2ldID0gZmQ7CisgICAgfQorfQorCit2b2lkCituZXRzbm1wX2xhcmdlX2ZkX2NscihTT0NLRVQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CisgICAgdW5zaWduZWQgICAgICAgIGk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChmZCAhPSBJTlZBTElEX1NPQ0tFVCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZmRzZXQtPmxmc19zZXQuZmRfY291bnQ7IGkrKykgeworICAgICAgICBpZiAoZmRzZXQtPmxmc19zZXQuZmRfYXJyYXlbaV0gPT0gZmQpIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgZmRzZXQtPmxmc19zZXQuZmRfY291bnQgLSAxKSB7CisgICAgICAgICAgICAgICAgZmRzZXQtPmxmc19zZXQuZmRfYXJyYXlbaV0gPQorICAgICAgICAgICAgICAgICAgICBmZHNldC0+bGZzX3NldC5mZF9hcnJheVtpICsgMV07CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmRzZXQtPmxmc19zZXQuZmRfY291bnQtLTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitpbnQKK25ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KFNPQ0tFVCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgICAgaTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGZkICE9IElOVkFMSURfU09DS0VUKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBmZHNldC0+bGZzX3NldC5mZF9jb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChmZHNldC0+bGZzX3NldC5mZF9hcnJheVtpXSA9PSBmZCkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworI2Vsc2UKKworLyoKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBnbGliYyB0cmlnZ2VyIGFib3J0KCkgaWYgRkRfU0VUKCksIEZEX0NMUigpIG9yCisgKiBGRF9JU1NFVCgpIGlzIGludm9rZWQgd2l0aCBuID49IEZEX1NFVFNJWkUuIEhlbmNlIHRoZXNlIHJlcGxhY2VtZW50IG1hY3Jvcy4KKyAqLworI2RlZmluZSBMRkRfU0VUKG4sIHApICAgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSB8PSAgKDFVTEwgPDwgKChuKSAlIE5GREJJVFMpKSkKKyNkZWZpbmUgTEZEX0NMUihuLCBwKSAgICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJj0gfigxVUxMIDw8ICgobikgJSBORkRCSVRTKSkpCisjZGVmaW5lIExGRF9JU1NFVChuLCBwKSAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICYgICAoMVVMTCA8PCAoKG4pICUgTkZEQklUUykpKQorCit2b2lkCituZXRzbm1wX2xhcmdlX2ZkX3NldGZkKGludCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChmZCA+PSAwKTsKKworICAgIHdoaWxlIChmZCA+PSAoaW50KWZkc2V0LT5sZnNfc2V0c2l6ZSkKKyAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKGZkc2V0LCAyICogKGZkc2V0LT5sZnNfc2V0c2l6ZSArIDEpKTsKKworICAgIExGRF9TRVQoZmQsIGZkc2V0LT5sZnNfc2V0cHRyKTsKK30KKwordm9pZAorbmV0c25tcF9sYXJnZV9mZF9jbHIoaW50IGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQoreworICAgIG5ldHNubXBfYXNzZXJ0KGZkID49IDApOworCisgICAgaWYgKCh1bnNpZ25lZClmZCA8IGZkc2V0LT5sZnNfc2V0c2l6ZSkKKyAgICAgICAgTEZEX0NMUihmZCwgZmRzZXQtPmxmc19zZXRwdHIpOworfQorCitpbnQKK25ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KGludCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChmZCA+PSAwKTsKKworICAgIHJldHVybiAoKHVuc2lnbmVkKWZkIDwgZmRzZXQtPmxmc19zZXRzaXplICYmCisgICAgICAgICAgICBMRkRfSVNTRVQoZmQsIGZkc2V0LT5sZnNfc2V0cHRyKSk7Cit9CisKKyNlbmRpZgorCit2b2lkCituZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQsIGludCBzZXRzaXplKQoreworICAgIGZkc2V0LT5sZnNfc2V0c2l6ZSA9IDA7CisgICAgZmRzZXQtPmxmc19zZXRwdHIgID0gTlVMTDsKKyNpZiAhZGVmaW5lZChjeWd3aW4pICYmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCisgICAgZmRzZXQtPmxmc19zZXQuZmRfY291bnQgPSAwOworI2VuZGlmCisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKGZkc2V0LCBzZXRzaXplKTsKK30KKworaW50CituZXRzbm1wX2xhcmdlX2ZkX3NldF9zZWxlY3QoaW50IG51bWZkcywgbmV0c25tcF9sYXJnZV9mZF9zZXQgKnJlYWRmZHMsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqd3JpdGVmZHMsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZXhjZXB0ZmRzLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQpCit7CisjaWYgZGVmaW5lZChjeWd3aW4pIHx8ICFkZWZpbmVkKEhBVkVfV0lOU09DS19IKQorICAgIC8qIEJpdC1zZXQgcmVwcmVzZW50YXRpb246IG1ha2Ugc3VyZSBhbGwgZmRzIGhhdmUgYXQgbGVhc3Qgc2l6ZSAnbnVtZmRzJy4gKi8KKyAgICBpZiAocmVhZGZkcyAmJiByZWFkZmRzLT5sZnNfc2V0c2l6ZSA8IG51bWZkcykKKyAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKHJlYWRmZHMsIG51bWZkcyk7CisgICAgaWYgKHdyaXRlZmRzICYmIHdyaXRlZmRzLT5sZnNfc2V0c2l6ZSA8IG51bWZkcykKKyAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKHdyaXRlZmRzLCBudW1mZHMpOworICAgIGlmIChleGNlcHRmZHMgJiYgZXhjZXB0ZmRzLT5sZnNfc2V0c2l6ZSA8IG51bWZkcykKKyAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKGV4Y2VwdGZkcywgbnVtZmRzKTsKKyNlbHNlCisgICAgLyogQXJyYXkgcmVwcmVzZW50YXRpb246IG5vIHJlc2l6aW5nIGlzIG5lY2Vzc2FyeS4gKi8KKyNlbmRpZgorCisgICAgcmV0dXJuIHNlbGVjdChudW1mZHMsCisgICAgICAgICAgICByZWFkZmRzID8gcmVhZGZkcy0+bGZzX3NldHB0ciA6IE5VTEwsCisgICAgICAgICAgICB3cml0ZWZkcyA/IHdyaXRlZmRzLT5sZnNfc2V0cHRyIDogTlVMTCwKKyAgICAgICAgICAgIGV4Y2VwdGZkcyA/IGV4Y2VwdGZkcy0+bGZzX3NldHB0ciA6IE5VTEwsCisgICAgICAgICAgICB0aW1lb3V0KTsKK30KKworaW50CituZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUobmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCwgaW50IHNldHNpemUpCit7CisgICAgaW50ICAgICAgICAgICAgIGZkX3NldF9ieXRlczsKKworICAgIGlmIChmZHNldC0+bGZzX3NldHNpemUgPT0gc2V0c2l6ZSkKKyAgICAgICAgZ290byBzdWNjZXNzOworCisgICAgaWYgKHNldHNpemUgPiBGRF9TRVRTSVpFKSB7CisgICAgICAgIGZkX3NldF9ieXRlcyA9IE5FVFNOTVBfRkRfU0VUX0JZVEVTKHNldHNpemUpOworICAgICAgICBpZiAoZmRzZXQtPmxmc19zZXRzaXplID4gRkRfU0VUU0laRSkgeworICAgICAgICAgICAgZmRzZXQtPmxmc19zZXRwdHIgPSByZWFsbG9jKGZkc2V0LT5sZnNfc2V0cHRyLCBmZF9zZXRfYnl0ZXMpOworICAgICAgICAgICAgaWYgKCFmZHNldC0+bGZzX3NldHB0cikKKyAgICAgICAgICAgICAgICBnb3RvIG91dF9vZl9tZW07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmZHNldC0+bGZzX3NldHB0ciA9IG1hbGxvYyhmZF9zZXRfYnl0ZXMpOworICAgICAgICAgICAgaWYgKCFmZHNldC0+bGZzX3NldHB0cikKKyAgICAgICAgICAgICAgICBnb3RvIG91dF9vZl9tZW07CisgICAgICAgICAgICAqZmRzZXQtPmxmc19zZXRwdHIgPSBmZHNldC0+bGZzX3NldDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmZHNldC0+bGZzX3NldHNpemUgPiBGRF9TRVRTSVpFKSB7CisgICAgICAgICAgICBmZHNldC0+bGZzX3NldCA9ICpmZHNldC0+bGZzX3NldHB0cjsKKyAgICAgICAgICAgIGZyZWUoZmRzZXQtPmxmc19zZXRwdHIpOworICAgICAgICB9CisgICAgICAgIGZkc2V0LT5sZnNfc2V0cHRyID0gJmZkc2V0LT5sZnNfc2V0OworICAgIH0KKworI2lmIGRlZmluZWQoY3lnd2luKSB8fCAhZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKKyAgICAvKgorICAgICAqIFVuaXg6IHdoZW4gZW5sYXJnaW5nLCBjbGVhciB0aGUgZmlsZSBkZXNjcmlwdG9ycyBkZWZpbmVkIGluIHRoZQorICAgICAqIHJlc2l6ZWQgKmZkc2V0IGJ1dCB0aGF0IHdlcmUgbm90IGRlZmluZWQgaW4gdGhlIG9yaWdpbmFsICpmZHNldC4KKyAgICAgKi8KKyAgICBpZiAoIGZkc2V0LT5sZnNfc2V0c2l6ZSA9PSAwICYmIHNldHNpemUgPT0gRkRfU0VUU0laRSApIHsKKyAgICAgICAgLyogSW4gdGhpcyBjYXNlIHdlIGNhbiB1c2UgdGhlIE9TJ3MgRkRfWkVSTyAqLworICAgICAgICBGRF9aRVJPKGZkc2V0LT5sZnNfc2V0cHRyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgICAgICBmb3IgKGkgPSBmZHNldC0+bGZzX3NldHNpemU7IGkgPCBzZXRzaXplOyBpKyspCisgICAgICAgICAgICBMRkRfQ0xSKGksIGZkc2V0LT5sZnNfc2V0cHRyKTsKKyAgICB9CisjZW5kaWYKKworICAgIGZkc2V0LT5sZnNfc2V0c2l6ZSA9IHNldHNpemU7CisjaWYgIWRlZmluZWQoY3lnd2luKSAmJiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQorICAgIGlmIChzZXRzaXplIDwgZmRzZXQtPmxmc19zZXQuZmRfY291bnQpCisgICAgICAgIGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50ID0gc2V0c2l6ZTsKKyNlbmRpZgorc3VjY2VzczoKKyAgICByZXR1cm4gMTsKKworb3V0X29mX21lbToKKyAgICBmZHNldC0+bGZzX3NldHNpemUgPSAwOworI2lmICFkZWZpbmVkKGN5Z3dpbikgJiYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKKyAgICBmZHNldC0+bGZzX3NldC5mZF9jb3VudCA9IDA7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cChuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQoreworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZShmZHNldCwgMCk7CisgICAgZmRzZXQtPmxmc19zZXRzaXplID0gMDsKKyAgICBmZHNldC0+bGZzX3NldHB0ciAgPSBOVUxMOworfQorCit2b2lkCituZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldChuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZkX3NldCAqIHNyYykKK3sKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoZHN0LCBGRF9TRVRTSVpFKTsKKyAgICAqZHN0LT5sZnNfc2V0cHRyID0gKnNyYzsKK30KKworaW50CituZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldChmZF9zZXQgKiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIHNyYykKK3sKKyAgICAvKiBSZXBvcnQgZmFpbHVyZSBpZiAqc3JjIGlzIGxhcmdlciB0aGFuIEZEX1NFVFNJWkUuICovCisgICAgaWYgKHNyYy0+bGZzX3NldHNpemUgPiBGRF9TRVRTSVpFKSB7CisgICAgICAgIEZEX1pFUk8oZHN0KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgICpkc3QgPSAqc3JjLT5sZnNfc2V0cHRyOworCisjaWYgISghZGVmaW5lZChjeWd3aW4pICYmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpKQorICAgIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGk7CisKKyAgICAgICAgLyogVW5peDogY2xlYXIgYW55IGZpbGUgZGVzY3JpcHRvcnMgZGVmaW5lZCBpbiAqZHN0IGJ1dCBub3QgaW4gKnNyYy4gKi8KKyAgICAgICAgZm9yIChpID0gc3JjLT5sZnNfc2V0c2l6ZTsgaSA8IEZEX1NFVFNJWkU7ICsraSkKKyAgICAgICAgICAgIEZEX0NMUihpLCBkc3QpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL2xjZF90aW1lLmMgYi9zbm1wbGliL2xjZF90aW1lLmMKaW5kZXggYTMwNTdkYy4uMmJmYTU0OSAxMDA2NDQKLS0tIGEvc25tcGxpYi9sY2RfdGltZS5jCisrKyBiL3NubXBsaWIvbGNkX3RpbWUuYwpAQCAtNiwxMSArNiw5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjEsMTEgKzE5LDcgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTU5LDYgKzUzLDExIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c21fc3VwcG9ydCwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c21fbGNkX3RpbWUsIHVzbV9zdXBwb3J0KQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVNNX0xDRF9USU1FCisKIC8qCiAgKiBHbG9iYWwgc3RhdGljIGhhc2hsaXN0IHRvIGNvbnRhaW4gRW5naW5ldGltZSBlbnRyaWVzLgogICoKQEAgLTk1LDEzICs5NCwxMyBAQAogICogICAgICAgICAgICB0aGlzIGlzIGFub3RoZXIgbWF0dGVyLgogICovCiBpbnQKLWdldF9lbmdpbmV0aW1lKHVfY2hhciAqIGVuZ2luZUlELAorZ2V0X2VuZ2luZXRpbWUoY29uc3QgdV9jaGFyICogZW5naW5lSUQsCiAgICAgICAgICAgICAgICB1X2ludCBlbmdpbmVJRF9sZW4sCiAgICAgICAgICAgICAgICB1X2ludCAqIGVuZ2luZWJvb3QsCiAgICAgICAgICAgICAgICB1X2ludCAqIGVuZ2luZV90aW1lLCB1X2ludCBhdXRoZW50aWNhdGVkKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwotICAgIHRpbWVfdCAgICAgICAgICB0aW1lZGlmZiA9IDA7CisgICAgaW50ICAgICAgICAgICAgIHRpbWVkaWZmID0gMDsKICAgICBFbmdpbmV0aW1lICAgICAgZSA9IE5VTEw7CiAKIApAQCAtMTMzLDcgKzEzMiw3IEBACiAgICAgICAgICplbmdpbmVfdGltZSA9IGUtPmVuZ2luZVRpbWU7CiAgICAgICAgICplbmdpbmVib290ID0gZS0+ZW5naW5lQm9vdDsKIAotICAgICAgIHRpbWVkaWZmID0gc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKCkgLSBlLT5sYXN0UmVjZWl2ZWRFbmdpbmVUaW1lOworICAgICAgIHRpbWVkaWZmID0gKGludCkgKHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSgpIC0gZS0+bGFzdFJlY2VpdmVkRW5naW5lVGltZSk7CiAKICNpZmRlZiBMQ0RfVElNRV9TWU5DX09QVAogICAgIH0KQEAgLTE5Nyw3ICsxOTYsNyBAQAogICAgICAgICAgICAgICAgICAgdV9pbnQgKiBsYXN0X2VuZ2luZV90aW1lLCB1X2ludCBhdXRoZW50aWNhdGVkKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwotICAgIHRpbWVfdCAgICAgICAgICB0aW1lZGlmZiA9IDA7CisgICAgaW50ICAgICAgICAgICAgIHRpbWVkaWZmID0gMDsKICAgICBFbmdpbmV0aW1lICAgICAgZSA9IE5VTEw7CiAKIApAQCAtMjI5LDcgKzIyOCw3IEBACiAgICAgICAgICpsYXN0X2VuZ2luZV90aW1lID0gKmVuZ2luZV90aW1lID0gZS0+ZW5naW5lVGltZTsKICAgICAgICAgKmVuZ2luZWJvb3QgPSBlLT5lbmdpbmVCb290OwogCi0gICAgICAgdGltZWRpZmYgPSBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUoKSAtIGUtPmxhc3RSZWNlaXZlZEVuZ2luZVRpbWU7CisgICAgICAgdGltZWRpZmYgPSAoaW50KSAoc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKCkgLSBlLT5sYXN0UmVjZWl2ZWRFbmdpbmVUaW1lKTsKIAogI2lmZGVmIExDRF9USU1FX1NZTkNfT1BUCiAgICAgfQpAQCAtMjk4LDE0ICsyOTcsMTQgQEAKIHZvaWQgZnJlZV9ldGltZWxpc3Qodm9pZCkKIHsKICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAgRW5naW5ldGltZSBlID0gMDsKLSAgICAgRW5naW5ldGltZSBuZXh0RSA9IDA7CisgICAgIEVuZ2luZXRpbWUgZSA9IE5VTEw7CisgICAgIEVuZ2luZXRpbWUgbmV4dEUgPSBOVUxMOwogCiAgICAgIGZvciggOyBpbmRleCA8IEVUSU1FTElTVF9TSVpFOyArK2luZGV4KQogICAgICB7CiAgICAgICAgICAgIGUgPSBldGltZWxpc3RbaW5kZXhdOwogCi0gICAgICAgICAgIHdoaWxlKGUgIT0gMCkKKyAgICAgICAgICAgd2hpbGUoZSAhPSBOVUxMKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5leHRFID0gZS0+bmV4dDsKICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKGUtPmVuZ2luZUlEKTsKQEAgLTMxMyw3ICszMTIsNyBAQAogICAgICAgICAgICAgICAgICBlID0gbmV4dEU7CiAgICAgICAgICAgIH0KIAotICAgICAgICAgICBldGltZWxpc3RbaW5kZXhdID0gMDsKKyAgICAgICAgICAgZXRpbWVsaXN0W2luZGV4XSA9IE5VTEw7CiAgICAgIH0KICAgICAgcmV0dXJuOwogfQpAQCAtMzQyLDcgKzM0MSw3IEBACiAgKiBYWFgJIkN1cnJlbnQgdGltZSB3aXRoaW4gdGhlIGxvY2FsIGVuZ2luZSIgPT0gdGltZShOVUxMKS4uLgogICovCiBpbnQKLXNldF9lbmdpbmV0aW1lKHVfY2hhciAqIGVuZ2luZUlELAorc2V0X2VuZ2luZXRpbWUoY29uc3QgdV9jaGFyICogZW5naW5lSUQsCiAgICAgICAgICAgICAgICB1X2ludCBlbmdpbmVJRF9sZW4sCiAgICAgICAgICAgICAgICB1X2ludCBlbmdpbmVib290LCB1X2ludCBlbmdpbmVfdGltZSwgdV9pbnQgYXV0aGVudGljYXRlZCkKIHsKQEAgLTQyMyw3ICs0MjIsNyBAQAogICogQVNTVU1FUyB0aGF0IG5vIGVuZ2luZUlEIHdpbGwgaGF2ZSBtb3JlIHRoYW4gb25lIHJlY29yZCBpbiB0aGUgbGlzdC4KICAqLwogRW5naW5ldGltZQotc2VhcmNoX2VuZ2luZXRpbWVfbGlzdCh1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuKQorc2VhcmNoX2VuZ2luZXRpbWVfbGlzdChjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwogICAgIEVuZ2luZXRpbWUgICAgICBlID0gTlVMTDsKQEAgLTQ4MSw3ICs0ODAsNyBAQAogICoKICAqLwogaW50Ci1oYXNoX2VuZ2luZUlEKHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4pCitoYXNoX2VuZ2luZUlEKGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX0dFTkVSUjsKICAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiA9IFNOTVBfTUFYQlVGOwpAQCAtNTA2LDYgKzUwNSwxMiBAQAogICAgIHJ2YWwgPSBzY19oYXNoKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIC8gc2l6ZW9mKG9pZCksCiAgICAgICAgICAgICAgICAgICAgZW5naW5lSUQsIGVuZ2luZUlEX2xlbiwgYnVmLCAmYnVmX2xlbik7CisgICAgaWYgKHJ2YWwgPT0gU05NUEVSUl9TQ19OT1RfQ09ORklHVVJFRCkgeworICAgICAgICAvKiBmYWxsIGJhY2sgdG8gc2hhMSAqLworICAgICAgICBydmFsID0gc2NfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICBzaXplb2YodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpIC8gc2l6ZW9mKG9pZCksCisgICAgICAgICAgICAgICAgICAgZW5naW5lSUQsIGVuZ2luZUlEX2xlbiwgYnVmLCAmYnVmX2xlbik7CisgICAgfQogI2Vsc2UKICAgICBydmFsID0gc2NfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICBzaXplb2YodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpIC8gc2l6ZW9mKG9pZCksCkBAIC01MjEsNyArNTI2LDcgQEAKICAgICBTTk1QX0ZSRUUoY29udGV4dCk7CiAgICAgbWVtc2V0KGJ1ZiwgMCwgU05NUF9NQVhCVUYpOwogCi0gICAgcmV0dXJuIChydmFsIDwgMCkgPyBydmFsIDogKGFkZGl0aXZlICUgRVRJTUVMSVNUX1NJWkUpOworICAgIHJldHVybiAocnZhbCA8IDApID8gcnZhbCA6IChpbnQpKGFkZGl0aXZlICUgRVRJTUVMSVNUX1NJWkUpOwogCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBoYXNoX2VuZ2luZUlEKCkgKi8KIApAQCAtNjA2LDMgKzYxMSw0IEBACiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIGR1bXBfZXRpbWVsaXN0KCkgKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VU01fTENEX1RJTUUgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvbWQ1LmMgYi9zbm1wbGliL21kNS5jCmluZGV4IGIxMjhjY2EuLjFjZTA3MjcgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvbWQ1LmMKKysrIGIvc25tcGxpYi9tZDUuYwpAQCAtNTUsMTQgKzU1LDEyIEBACiAjZWxzZQogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9tZDUuaD4KIApAQCAtMTE0LDcgKzExMiw3IEBACiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNURENfSEVBREVSUyAqLwogCiB2b2lkICAgICAgICAgICAgTURyZXZlcnNlKHVuc2lnbmVkIGludCAqKTsKLXN0YXRpYyB2b2lkICAgICBNRGJsb2NrKE1EcHRyLCB1bnNpZ25lZCBpbnQgKik7CitzdGF0aWMgdm9pZCAgICAgTURibG9jayhNRHB0ciwgY29uc3QgdW5zaWduZWQgaW50ICopOwogCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCiAvKgpAQCAtMTkzLDcgKzE5MSw3IEBACiAgKiAqKiBUaGlzIHJvdXRpbmUgaXMgbm90IHVzZXItY2FsbGFibGUuIAogICovCiBzdGF0aWMgdm9pZAotTURibG9jayhNRHB0ciBNRHAsIHVuc2lnbmVkIGludCAqWCkKK01EYmxvY2soTURwdHIgTURwLCBjb25zdCB1bnNpZ25lZCBpbnQgKlgpCiB7CiAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHRtcCwgQSwgQiwgQywgRDsgICAgICAvKiBocHV4IHN5c3Ygc3VuICovCiAjaWZkZWYgV09SRFNfQklHRU5ESUFOCkBAIC0yOTksNyArMjk3LDcgQEAKICAqICoqICAgICAgICAgIC0yIGlmIGNvdW50IHdhcyB0b28gbGFyZ2UKICAqLwogaW50Ci1NRHVwZGF0ZShNRHB0ciBNRHAsIHVuc2lnbmVkIGNoYXIgKlgsIHVuc2lnbmVkIGludCBjb3VudCkKK01EdXBkYXRlKE1EcHRyIE1EcCwgY29uc3QgdW5zaWduZWQgY2hhciAqWCwgdW5zaWduZWQgaW50IGNvdW50KQogewogICAgIHVuc2lnbmVkIGludCAgICBpLCB0bXAsIGJpdCwgYnl0ZSwgbWFzazsKICAgICB1bnNpZ25lZCBjaGFyICAgWFhbNjRdOwpAQCAtMzMzLDcgKzMzMSw3IEBACiAgICAgICogUHJvY2VzcyBkYXRhIAogICAgICAqLwogICAgIGlmIChjb3VudCA9PSA1MTIpIHsgICAgICAgICAvKiBGdWxsIGJsb2NrIG9mIGRhdGEgdG8gaGFuZGxlICovCi0gICAgICAgIE1EYmxvY2soTURwLCAodW5zaWduZWQgaW50ICopIFgpOworICAgICAgICBNRGJsb2NrKE1EcCwgKGNvbnN0IHVuc2lnbmVkIGludCAqKSBYKTsKICAgICB9IGVsc2UgaWYgKGNvdW50ID4gNTEyKSAgICAgLyogQ2hlY2sgZm9yIGNvdW50IHRvbyBsYXJnZSAqLwogICAgICAgICByZXR1cm4gLTI7CiAgICAgLyoKQEAgLTM4OSw3ICszODcsNyBAQAogICogTURjaGVja3N1bShkYXRhLCBsZW4sIE1ENSk6IGRvIGEgY2hlY2tzdW0gb24gYW4gYXJiaXJ0cmFyeSBhbW91bnQgb2YgZGF0YSAKICAqLwogaW50Ci1NRGNoZWNrc3VtKHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywgc2l6ZV90IG1hY2xlbikKK01EY2hlY2tzdW0oY29uc3QgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLCBzaXplX3QgbWFjbGVuKQogewogICAgIE1Ec3RydWN0ICAgICAgICBtZDsKICAgICBNRHN0cnVjdCAgICAgICAqTUQgPSAmbWQ7CkBAIC00MjMsOCArNDIxLDggQEAKICAqIG9mIGRhdGEsIGFuZCBwcmVwZW5kZWQgd2l0aCBhIHNlY3JldCBpbiB0aGUgc3RhbmRhcmQgZmFzaGlvbiAKICAqLwogaW50Ci1NRHNpZ24odV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLCBzaXplX3QgbWFjbGVuLAotICAgICAgIHVfY2hhciAqIHNlY3JldCwgc2l6ZV90IHNlY3JldGxlbikKK01Ec2lnbihjb25zdCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsIHNpemVfdCBtYWNsZW4sCisgICAgICAgY29uc3QgdV9jaGFyICogc2VjcmV0LCBzaXplX3Qgc2VjcmV0bGVuKQogewogI2RlZmluZSBIQVNIS0VZTEVOIDY0CiAKQEAgLTQzNCw3ICs0MzIsOCBAQAogICAgIHVfY2hhciAgICAgICAgICBleHRlbmRlZEF1dGhLZXlbSEFTSEtFWUxFTl07CiAgICAgdV9jaGFyICAgICAgICAgIGJ1ZltIQVNIS0VZTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgaTsKLSAgICB1X2NoYXIgICAgICAgICAqY3AsICpuZXdkYXRhID0gMDsKKyAgICBjb25zdCB1X2NoYXIgICAqY3A7CisgICAgdV9jaGFyICAgICAgICAgKm5ld2RhdGEgPSBOVUxMOwogICAgIGludCAgICAgICAgICAgICByYyA9IDA7CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9taWIuYyBiL3NubXBsaWIvbWliLmMKaW5kZXggN2RjZjNkMC4uZTc5MDg3OCAxMDA2NDQKLS0tIGEvc25tcGxpYi9taWIuYworKysgYi9zbm1wbGliL21pYi5jCkBAIC0zOCwxOSArMzgsMzQgQEAKICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgSEFWRV9ESVJFTlRfSAorIyBpbmNsdWRlIDxkaXJlbnQuaD4KKyMgZGVmaW5lIE5BTUxFTihkaXJlbnQpIHN0cmxlbigoZGlyZW50KS0+ZF9uYW1lKQorI2Vsc2UKKyMgZGVmaW5lIGRpcmVudCBkaXJlY3QKKyMgZGVmaW5lIE5BTUxFTihkaXJlbnQpIChkaXJlbnQpLT5kX25hbWxlbgorIyBpZiBIQVZFX1NZU19ORElSX0gKKyMgIGluY2x1ZGUgPHN5cy9uZGlyLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfU1lTX0RJUl9ICisjICBpbmNsdWRlIDxzeXMvZGlyLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfTkRJUl9ICisjICBpbmNsdWRlIDxuZGlyLmg+CisjIGVuZGlmCisjZW5kaWYKKwogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03MSwxMCArODYsNiBAQAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2lmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgpAQCAtOTQsNiArMTA1LDE5IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl9hcGksIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWliX3N0cmluZ3NfYWxsLCBtaWJfYXBpKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWliX3NucHJpbnQsIG1pYl9zdHJpbmdzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtaWJfc25wcmludF9kZXNjcmlwdGlvbiwgbWliX3N0cmluZ3NfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl9zbnByaW50X3ZhcmlhYmxlLCBtaWJfc3RyaW5nc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWliX3N0cmluZ19jb252ZXJzaW9ucywgbWliX3N0cmluZ3NfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHByaW50X21pYiwgbWliX3N0cmluZ3NfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNucHJpbnRfb2JqaWQsIG1pYl9zdHJpbmdzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbnByaW50X3ZhbHVlLCBtaWJfc3RyaW5nc19hbGwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtaWJfdG9fYXNuX3R5cGUsIG1pYl9hcGkpCisKIC8qKiBAZGVmZ3JvdXAgbWliX3V0aWxpdGllcyBtaWIgcGFyc2luZyBhbmQgZGF0YXR5cGUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgogICogIEBpbmdyb3VwIGxpYnJhcnkKICAqCkBAIC0xMzYsOSArMTYwLDEwIEBACiAjZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HICovCiAKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCi1leHRlcm4gc3RydWN0IHRyZWUgKnRyZWVfaGVhZDsKK05FVFNOTVBfSU1QT1JUIHN0cnVjdCB0cmVlICp0cmVlX2hlYWQ7CiBzdGF0aWMgc3RydWN0IHRyZWUgKnRyZWVfdG9wOwogCitORVRTTk1QX0lNUE9SVCBzdHJ1Y3QgdHJlZSAqTWliOwogc3RydWN0IHRyZWUgICAgKk1pYjsgICAgICAgICAgICAvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwogI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLwogCkBAIC00NTYsNiArNDgxLDggQEAKICAgICAgICAgaW50ICAgICAgICAgICAgIHJlcGVhdCwgd2lkdGggPSAxOwogICAgICAgICBsb25nICAgICAgICAgICAgdmFsdWU7CiAgICAgICAgIGNoYXIgICAgICAgICAgICBjb2RlID0gJ2QnLCBzZXBhciA9IDAsIHRlcm0gPSAwLCBjaCwgaW50YnVmWzMyXTsKKyNkZWZpbmUgSEVYMkRJR0lUX05FRURfSU5JVCAzCisgICAgICAgIGNoYXIgICAgICAgICAgICBoZXgyZGlnaXQgPSBIRVgyRElHSVRfTkVFRF9JTklUOwogICAgICAgICB1X2NoYXIgICAgICAgICAqZWNwOwogCiAgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5UKSkgewpAQCAtNTAyLDkgKzUyOSwyMiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl8yRElHSVRfSEVYX09VVFBVVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZhbHVlIDwgMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEhFWDJESUdJVF9ORUVEX0lOSVQgPT0gaGV4MmRpZ2l0KQorICAgICAgICAgICAgICAgICAgICAgICAgaGV4MmRpZ2l0ID0gbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCXzJESUdJVF9IRVhfT1VUUFVUKTsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogaWYgdmFsdWUgaXMgPCAxNiwgaXQgd2lsbCBiZSBhIHNpbmdsZSBoZXggZGlnaXQuIElmIHRoZQorICAgICAgICAgICAgICAgICAgICAgKiB3aWR0aCBpcyAxICh3ZSBhcmUgb3V0cHV0dGluZyBhIGJ5dGUgYXQgYSB0aW1lKSwgcGF0IGl0CisgICAgICAgICAgICAgICAgICAgICAqIHRvIDIgZGlnaXRzIGlmIE5FVFNOTVBfRFNfTElCXzJESUdJVF9IRVhfT1VUUFVUIGlzIHNldAorICAgICAgICAgICAgICAgICAgICAgKiBvciBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICogIC0gd2UgZG8gbm90IGhhdmUgYSBzZXBhcmF0aW9uIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgKiAgLSB0aGVyZSBpcyBubyBoaW50IGxlZnQgKG9yIHRoZXJlIG5ldmVyIHdhcyBhIGhpbnQpCisgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAqIGUuZy4gZm9yIHRoZSBkYXRhIDB4QUEwMUJCLCB3b3VsZCBhbnlvbmUgcmVhbGx5IGV2ZXIKKyAgICAgICAgICAgICAgICAgICAgICogd2FudCB0aGUgc3RyaW5nICJBQTFCQiI/PworICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCgodmFsdWUgPCAxNikgJiYgKDEgPT0gd2lkdGgpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGhleDJkaWdpdCB8fCAoKDAgPT0gc2VwYXIpICYmICgwID09ICpoaW50KSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIjAlbHgiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiVseCIsIHZhbHVlKTsKQEAgLTIzNDEsNyArMjM4MSw5IEBACiAKICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYihBU05fQk9PTEVBTiwgInNubXAiLCAic2hvd01pYkVycm9ycyIsCiAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfTUlCX0VSUk9SUyk7Ci0gICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIoQVNOX0JPT0xFQU4sICJzbm1wIiwgInN0cmljdENvbW1lbnRUZXJtIiwKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYihBU05fQk9PTEVBTiwgInNubXAiLCAiY29tbWVudFRvRU9MIiwgICAgIC8qIERlc2NyaWJlcyBhY3R1YWwgYmVoYXZpb3VyICovCisgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfTUlCX0NPTU1FTlRfVEVSTSk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIoQVNOX0JPT0xFQU4sICJzbm1wIiwgInN0cmljdENvbW1lbnRUZXJtIiwgICAgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX01JQl9DT01NRU5UX1RFUk0pOwogICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliKEFTTl9CT09MRUFOLCAic25tcCIsICJtaWJBbGxvd1VuZGVybGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfTUlCX1BBUlNFX0xBQkVMKTsKQEAgLTI1NTYsNiArMjU5OCw3IEBACiAgICAgICovCiAgICAgbmV0c25tcF9maXh1cF9taWJfZGlyZWN0b3J5KCk7CiAgICAgZW52X3ZhciA9IHN0cmR1cChuZXRzbm1wX2dldF9taWJfZGlyZWN0b3J5KCkpOworICAgIG5ldHNubXBfbWliaW5kZXhfbG9hZCgpOwogCiAgICAgREVCVUdNU0dUTCgoImluaXRfbWliIiwKICAgICAgICAgICAgICAgICAiU2VlbiBNSUJESVJTOiBMb29raW5nIGluICclcycgZm9yIG1pYiBkaXJzIC4uLlxuIiwKQEAgLTI2MjEsNyArMjY2NCw3IEBACiAgICAgd2hpbGUgKGVudHJ5KSB7CiAgICAgICAgIGlmIChzdHJjYXNlY21wKGVudHJ5LCBERUJVR19BTFdBWVNfVE9LRU4pID09IDApIHsKICAgICAgICAgICAgIHJlYWRfYWxsX21pYnMoKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJzdHIoZW50cnksICIvIikgIT0gMCkgeworICAgICAgICB9IGVsc2UgaWYgKHN0cnN0cihlbnRyeSwgIi8iKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFkX21pYihlbnRyeSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuZXRzbm1wX3JlYWRfbW9kdWxlKGVudHJ5KTsKQEAgLTI2NjIsNyArMjcwNSw3IEBACiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAoZW52X3ZhciAhPSAwKSB7CisgICAgaWYgKGVudl92YXIgIT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgiaW5pdF9taWIiLAogICAgICAgICAgICAgICAgICAgICAiU2VlbiBNSUJGSUxFUzogTG9va2luZyBpbiAnJXMnIGZvciBtaWIgZmlsZXMgLi4uXG4iLAogICAgICAgICAgICAgICAgICAgICBlbnZfdmFyKSk7CkBAIC0yNzE3LDcgKzI3NjAsNyBAQAogICAgIH0KIH0KIAotI2lmbmRlZiBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQorI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUwogdm9pZAogaW5pdF9taWIodm9pZCkKIHsKQEAgLTI3MjYsNiArMjc2OSwxMzkgQEAKICNlbmRpZgogCiAKKy8qCisgKiBIYW5kbGUgTUlCIGluZGV4ZXMgY2VudHJhbGx5CisgKi8KK3N0YXRpYyBpbnQgX21pYmluZGV4ICAgICA9IDA7ICAgLyogTGFzdCBpbmRleCBpbiB1c2UgKi8KK3N0YXRpYyBpbnQgX21pYmluZGV4X21heCA9IDA7ICAgLyogU2l6ZSBvZiBpbmRleCBhcnJheSAqLworY2hhciAgICAgKipfbWliaW5kZXhlcyAgID0gTlVMTDsKKworaW50IF9taWJpbmRleF9hZGQoIGNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBpICk7Cit2b2lkCituZXRzbm1wX21pYmluZGV4X2xvYWQoIHZvaWQgKQoreworICAgIERJUiAqZGlyOworICAgIHN0cnVjdCBkaXJlbnQgKmZpbGU7CisgICAgRklMRSAqZnA7CisgICAgY2hhciB0bXBidWZbIDMwMF07CisgICAgY2hhciB0bXBidWYyWzMwMF07CisgICAgaW50ICBpOworICAgIGNoYXIgKmNwOworCisgICAgLyoKKyAgICAgKiBPcGVuIHRoZSBNSUIgaW5kZXggZGlyZWN0b3J5LCBvciBjcmVhdGUgaXQgKGVtcHR5KQorICAgICAqLworICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiJXMvbWliX2luZGV4ZXMiLAorICAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSk7CisgICAgdG1wYnVmW3NpemVvZih0bXBidWYpLTFdID0gMDsKKyAgICBkaXIgPSBvcGVuZGlyKCB0bXBidWYgKTsKKyAgICBpZiAoIGRpciA9PSBOVUxMICkgeworICAgICAgICBERUJVR01TR1RMKCgibWliaW5kZXgiLCAibG9hZDogKG5ldylcbiIpKTsKKyAgICAgICAgbWtkaXJoaWVyKCB0bXBidWYsIE5FVFNOTVBfQUdFTlRfRElSRUNUT1JZX01PREUsIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDcmVhdGUgYSBsaXN0IG9mIHdoaWNoIGRpcmVjdG9yeSBlYWNoIGZpbGUgcmVmZXJzIHRvCisgICAgICovCisgICAgd2hpbGUgKChmaWxlID0gcmVhZGRpciggZGlyICkpKSB7CisgICAgICAgIGlmICggIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKGZpbGUtPmRfbmFtZVswXSkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGkgPSBhdG9pKCBmaWxlLT5kX25hbWUgKTsKKworICAgICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIiVzL21pYl9pbmRleGVzLyVkIiwKKyAgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksIGkgKTsKKyAgICAgICAgdG1wYnVmW3NpemVvZih0bXBidWYpLTFdID0gMDsKKyAgICAgICAgZnAgPSBmb3BlbiggdG1wYnVmLCAiciIgKTsKKyAgICAgICAgaWYgKCFmcCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjcCA9IGZnZXRzKCB0bXBidWYyLCBzaXplb2YodG1wYnVmMiksIGZwICk7CisgICAgICAgIGlmICggIWNwICkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYmluZGV4IiwgIkVtcHR5IE1JQiBpbmRleCAoJWQpXG4iLCBpKSk7CisgICAgICAgICAgICBmY2xvc2UoZnApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdG1wYnVmMltzdHJsZW4odG1wYnVmMiktMV0gPSAwOworICAgICAgICBERUJVR01TR1RMKCgibWliaW5kZXgiLCAibG9hZDogKCVkKSAlc1xuIiwgaSwgdG1wYnVmMikpOworICAgICAgICAodm9pZClfbWliaW5kZXhfYWRkKCB0bXBidWYyKzQsIGkgKTsgIC8qIFNraXAgJ0RJUiAnICovCisgICAgICAgIGZjbG9zZSggZnAgKTsKKyAgICB9CisgICAgY2xvc2VkaXIoIGRpciApOworfQorCitjaGFyICoKK25ldHNubXBfbWliaW5kZXhfbG9va3VwKCBjb25zdCBjaGFyICpkaXJuYW1lICkKK3sKKyAgICBpbnQgaTsKKyAgICBzdGF0aWMgY2hhciB0bXBidWZbMzAwXTsKKworICAgIGZvciAoaT0wOyBpPF9taWJpbmRleDsgaSsrKSB7CisgICAgICAgIGlmICggX21pYmluZGV4ZXNbaV0gJiYKKyAgICAgICAgICAgICBzdHJjbXAoIF9taWJpbmRleGVzW2ldLCBkaXJuYW1lICkgPT0gMCkgeworICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICIlcy9taWJfaW5kZXhlcy8lZCIsCisgICAgICAgICAgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksIGkpOworICAgICAgICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9IDA7CisgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYmluZGV4IiwgImxvb2t1cDogJXMgKCVkKSAlc1xuIiwgZGlybmFtZSwgaSwgdG1wYnVmICkpOworICAgICAgICAgICAgIHJldHVybiB0bXBidWY7CisgICAgICAgIH0KKyAgICB9CisgICAgREVCVUdNU0dUTCgoIm1pYmluZGV4IiwgImxvb2t1cDogKG5vbmUpXG4iKSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAorX21pYmluZGV4X2FkZCggY29uc3QgY2hhciAqZGlybmFtZSwgaW50IGkgKQoreworICAgIGNvbnN0IGludCBvbGRfbWliaW5kZXhfbWF4ID0gX21pYmluZGV4X21heDsKKworICAgIERFQlVHTVNHVEwoKCJtaWJpbmRleCIsICJhZGQ6ICVzICglZClcbiIsIGRpcm5hbWUsIGkgKSk7CisgICAgaWYgKCBpID09IC0xICkKKyAgICAgICAgaSA9IF9taWJpbmRleCsrOworICAgIGlmICggaSA+PSBfbWliaW5kZXhfbWF4ICkgeworICAgICAgICAvKgorICAgICAgICAgKiBJZiB0aGUgaW5kZXggYXJyYXkgaXMgZnVsbCAob3Igbm9uLWV4aXN0ZW50KQorICAgICAgICAgKiAgIHRoZW4gZXhwYW5kIChvciBjcmVhdGUpIGl0CisgICAgICAgICAqLworICAgICAgICBfbWliaW5kZXhfbWF4ID0gaSArIDEwOworICAgICAgICBfbWliaW5kZXhlcyA9IHJlYWxsb2MoX21pYmluZGV4ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWliaW5kZXhfbWF4ICogc2l6ZW9mKF9taWJpbmRleGVzWzBdKSk7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KF9taWJpbmRleGVzKTsKKyAgICAgICAgbWVtc2V0KF9taWJpbmRleGVzICsgb2xkX21pYmluZGV4X21heCwgMCwKKyAgICAgICAgICAgICAgIChfbWliaW5kZXhfbWF4IC0gb2xkX21pYmluZGV4X21heCkgKiBzaXplb2YoX21pYmluZGV4ZXNbMF0pKTsKKyAgICB9CisKKyAgICBfbWliaW5kZXhlc1sgaSBdID0gc3RyZHVwKCBkaXJuYW1lICk7CisgICAgaWYgKCBpID49IF9taWJpbmRleCApCisgICAgICAgIF9taWJpbmRleCA9IGkrMTsKKworICAgIERFQlVHTVNHVEwoKCJtaWJpbmRleCIsICJhZGQ6ICVkLyVkLyVkXG4iLCBpLCBfbWliaW5kZXgsIF9taWJpbmRleF9tYXggKSk7CisgICAgcmV0dXJuIGk7Cit9CisgICAgCitGSUxFICoKK25ldHNubXBfbWliaW5kZXhfbmV3KCBjb25zdCBjaGFyICpkaXJuYW1lICkKK3sKKyAgICBGSUxFICpmcDsKKyAgICBjaGFyICB0bXBidWZbMzAwXTsKKyAgICBjaGFyICpjcDsKKyAgICBpbnQgICBpOworCisgICAgY3AgPSBuZXRzbm1wX21pYmluZGV4X2xvb2t1cCggZGlybmFtZSApOworICAgIGlmICghY3ApIHsKKyAgICAgICAgaSAgPSBfbWliaW5kZXhfYWRkKCBkaXJuYW1lLCAtMSApOworICAgICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIiVzL21pYl9pbmRleGVzLyVkIiwKKyAgICAgICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpLCBpICk7CisgICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9IDA7CisgICAgICAgIGNwID0gdG1wYnVmOworICAgIH0KKyAgICBERUJVR01TR1RMKCgibWliaW5kZXgiLCAibmV3OiAlcyAoJXMpXG4iLCBkaXJuYW1lLCBjcCApKTsKKyAgICBmcCA9IGZvcGVuKCBjcCwgInciICk7CisgICAgaWYgKGZwKQorICAgICAgICBmcHJpbnRmKCBmcCwgIkRJUiAlc1xuIiwgZGlybmFtZSApOworICAgIHJldHVybiBmcDsKK30KKworCiAvKioKICAqIFVubG9hZHMgYWxsIG1pYnMuCiAgKi8KQEAgLTI3MzcsMTAgKzI5MTMsMTggQEAKICAgICAgICAgaWYgKHRyZWVfdG9wLT5sYWJlbCkKICAgICAgICAgICAgIFNOTVBfRlJFRSh0cmVlX3RvcC0+bGFiZWwpOwogICAgICAgICBTTk1QX0ZSRUUodHJlZV90b3ApOwotICAgICAgICB0cmVlX3RvcCA9IE5VTEw7CiAgICAgfQogICAgIHRyZWVfaGVhZCA9IE5VTEw7CiAgICAgTWliID0gTlVMTDsKKyAgICBpZiAoX21pYmluZGV4ZXMpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfbWliaW5kZXg7ICsraSkKKyAgICAgICAgICAgIFNOTVBfRlJFRShfbWliaW5kZXhlc1tpXSk7CisgICAgICAgIGZyZWUoX21pYmluZGV4ZXMpOworICAgICAgICBfbWliaW5kZXggPSAwOworICAgICAgICBfbWliaW5kZXhfbWF4ID0gMDsKKyAgICAgICAgX21pYmluZGV4ZXMgPSBOVUxMOworICAgIH0KICAgICBpZiAoUHJlZml4ICE9IE5VTEwgJiYgUHJlZml4ICE9ICZTdGFuZGFyZF9QcmVmaXhbMF0pCiAgICAgICAgIFNOTVBfRlJFRShQcmVmaXgpOwogICAgIGlmIChQcmVmaXgpCkBAIC0yNzU0LDExICsyOTM4LDEzIEBACiAgKgogICogQHBhcmFtIGZwICAgVGhlIGZpbGUgZGVzY3JpcHRvciB0byBwcmludCB0by4KICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BSSU5UX01JQgogdm9pZAogcHJpbnRfbWliKEZJTEUgKiBmcCkKIHsKICAgICBwcmludF9zdWJ0cmVlKGZwLCB0cmVlX2hlYWQsIDApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUFJJTlRfTUlCICovCiAKIHZvaWQKIHByaW50X2FzY2lpX2R1bXAoRklMRSAqIGZwKQpAQCAtMzEzOSw2ICszMzI1LDcgQEAKICAgICByZXR1cm4gIWJ1Zl9vdmVyZmxvdzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NQUklOVF9PQkpJRAogaW50CiBzbnByaW50X29iamlkKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pCkBAIC0zMTUyLDYgKzMzMzksNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1BSSU5UX09CSklEICovCiAKIC8qKgogICogUHJpbnRzIGFuIG9pZCB0byBzdGRvdXQuCkBAIC0zMjg1LDEwICszNDczLDExIEBACiAgICAgICAgICAqIEhhbmRsZSByYXJlIGNhc2Ugd2hlcmUgdHJlZSBpcyBlbXB0eS4gIAogICAgICAgICAgKi8KICAgICAgICAgcmV0dXJuIHNwcmludF9yZWFsbG9jX2J5X3R5cGUoYnVmLCBidWZfbGVuLCBvdXRfbGVuLCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBOVUxMLCBOVUxMLCBOVUxMKTsKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTlBSSU5UX1ZBUkFCTEUKIGludAogc25wcmludF92YXJpYWJsZShjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAogICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLApAQCAtMzMwMyw2ICszNDkyLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOUFJJTlRfVkFSQUJMRSAqLwogCiAvKioKICAqIFByaW50cyBhIHZhcmlhYmxlIHRvIHN0ZG91dC4KQEAgLTMzOTcsNiArMzU4Nyw4IEBACiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05QUklOVF9WQUxVRQorLyogdXNlZCBpbiB0aGUgcGVybCBtb2R1bGUgKi8KIGludAogc25wcmludF92YWx1ZShjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAogICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLApAQCAtMzQxMSw2ICszNjAzLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOUFJJTlRfVkFMVUUgKi8KIAogdm9pZAogcHJpbnRfdmFsdWUoY29uc3Qgb2lkICogb2JqaWQsCkBAIC0zNTQxLDggKzM3MzQsOCBAQAogCiAgICAgaWYgKHZhci0+bmFtZV9sZW5ndGggPiBNQVhfT0lEX0xFTikgewogICAgICAgICBERUJVR01TR1RMKCgiYnVpbGRfb2lkX3NlZ21lbnQiLAotICAgICAgICAgICAgICAgICAgICAiU29tZXRoaW5nIHRlcnJpYmx5IHdyb25nLCBuYW1lbGVuID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZV9sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgIlNvbWV0aGluZyB0ZXJyaWJseSB3cm9uZywgbmFtZWxlbiA9ICVsdVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpdmFyLT5uYW1lX2xlbmd0aCkpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgfQogCkBAIC0zNjYwLDEzICszODUzLDEzIEBACiAgICAgICAgIGNhc2UgQVNOX1RJTUVUSUNLUzoKICAgICAgICAgICAgIGlmICgqb2lkTGVuKSB7CiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZhciwgKHVfY2hhciAqKSBvaWRJbmRleCsrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobG9uZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSk7CiAgICAgICAgICAgICAgICAgLS0oKm9pZExlbik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2YXIsICh1X2NoYXIgKikgb2lkTGVuLCBzaXplb2YobG9uZykpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgREVCVUdNU0dUTCgoInBhcnNlX29pZF9pbmRleGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQYXJzZWQgaW50KCVkKTogJWRcbiIsIHZhci0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQYXJzZWQgaW50KCVkKTogJWxkXG4iLCB2YXItPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyLT52YWwuaW50ZWdlcikpOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTM2NzcsNyArMzg3MCw4IEBACiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNCAmJiBpIDwgKm9pZExlbjsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG9pZEluZGV4W2ldID4gMjU1KSB7CiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwYXJzZV9vaWRfaW5kZXhlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbGxlZ2FsIG9pZCBpbiBpbmRleDogJWRcbiIsIG9pZEluZGV4WzBdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbGxlZ2FsIG9pZCBpbiBpbmRleDogJSIgTkVUU05NUF9QUklvICJkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRJbmRleFswXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOyAgLyogc3ViLWlkZW50aWZpZXIgdG9vIGxhcmdlICovCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgdWl0bXAgPSB1aXRtcCArIChvaWRJbmRleFtpXSA8PCAoOCooMy1pKSkpOwpAQCAtNDAwNiw3ICs0MjAwLDcgQEAKICAgICB9CiAKICAgICB3aGlsZSAob2JqaWRsZW4tLSA+IDApIHsgICAgLyogb3V0cHV0IHJlc3Qgb2YgbmFtZSwgdW5pbnRlcnByZXRlZCAqLwotICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiVsdS4iLCAqb2JqaWQrKyk7CisgICAgICAgIHNwcmludGYoaW50YnVmLCAiJSIgTkVUU05NUF9QUklvICJ1LiIsICpvYmppZCsrKTsKICAgICAgICAgaWYgKCEqYnVmX292ZXJmbG93ICYmICFzbm1wX3N0cmNhdChidWYsIGJ1Zl9sZW4sIG91dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyICopIGludGJ1ZikpIHsKQEAgLTQyOTQsNyArNDQ4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAqYnVmX292ZXJmbG93ID0gMTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJWx1IiwgKm9iamlkKTsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlIiBORVRTTk1QX1BSSW8gInUiLCAqb2JqaWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoISpidWZfb3ZlcmZsb3cKICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzbm1wX3N0cmNhdChidWYsIGJ1Zl9sZW4sIG91dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcmVhbGxvYywKQEAgLTQzMDMsNyArNDQ5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJWx1IiwgKm9iamlkKTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiUiIE5FVFNOTVBfUFJJbyAidSIsICpvYmppZCk7CiAgICAgICAgICAgICAgICAgaWYgKCEqYnVmX292ZXJmbG93ICYmICFzbm1wX3N0cmNhdChidWYsIGJ1Zl9sZW4sIG91dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciAqKQpAQCAtNDM3NSw3ICs0NTY5LDggQEAKICAgICAgICAgY2FzZSBUWVBFX0lQQUREUjoKICAgICAgICAgICAgIGlmIChvYmppZGxlbiA8IDQpCiAgICAgICAgICAgICAgICAgZ290byBmaW5pc2hfaXQ7Ci0gICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiVsdS4lbHUuJWx1LiVsdSIsCisgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiUiIE5FVFNOTVBfUFJJbyAidS4lIiBORVRTTk1QX1BSSW8gInUuIgorICAgICAgICAgICAgICAgICAgICAiJSIgTkVUU05NUF9QUklvICJ1LiUiIE5FVFNOTVBfUFJJbyAidSIsCiAgICAgICAgICAgICAgICAgICAgIG9iamlkWzBdLCBvYmppZFsxXSwgb2JqaWRbMl0sIG9iamlkWzNdKTsKICAgICAgICAgICAgIG9iamlkICs9IDQ7CiAgICAgICAgICAgICBvYmppZGxlbiAtPSA0OwpAQCAtNDM5MCw3ICs0NTg1LDcgQEAKICAgICAgICAgICAgICAgICBvaWQgICAgICAgICAgICAgbnR5cGUgPSAqb2JqaWQrKzsKIAogICAgICAgICAgICAgICAgIG9iamlkbGVuLS07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlbHUuIiwgbnR5cGUpOworICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJSIgTkVUU05NUF9QUklvICJ1LiIsIG50eXBlKTsKICAgICAgICAgICAgICAgICBpZiAoISpidWZfb3ZlcmZsb3cgJiYgIXNubXBfc3RyY2F0KGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyICopCkBAIC00Mzk5LDcgKzQ1OTQsOCBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChudHlwZSA9PSAxICYmIG9iamlkbGVuID49IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlbHUuJWx1LiVsdS4lbHUiLAorICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiUiIE5FVFNOTVBfUFJJbyAidS4lIiBORVRTTk1QX1BSSW8gInUuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiBORVRTTk1QX1BSSW8gInUuJSIgTkVUU05NUF9QUklvICJ1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmppZFswXSwgb2JqaWRbMV0sIG9iamlkWzJdLCBvYmppZFszXSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghKmJ1Zl9vdmVyZmxvdwogICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNubXBfc3RyY2F0KGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwKQEAgLTQ1MTEsNiArNDcwNyw3IEBACiAgICAgU05NUF9GUkVFKGJ1Zik7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NSUJfU05QUklOVF9ERVNDUklQVElPTgogaW50CiBzbnByaW50X2Rlc2NyaXB0aW9uKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCkKQEAgLTQ1MjQsNiArNDcyMSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NSUJfU05QUklOVF9ERVNDUklQVElPTiAqLwogCiBpbnQKIHNwcmludF9yZWFsbG9jX2Rlc2NyaXB0aW9uKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCkBAIC00NjEwLDcgKzQ4MDgsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHdoaWxlIChvYmppZGxlbiA+IDEpIHsKLSAgICAgICAgc3ByaW50Zih0bXBidWYsICIgJWx1IiwgKm9iamlkKTsKKyAgICAgICAgc3ByaW50Zih0bXBidWYsICIgJSIgTkVUU05NUF9QUklvICJ1IiwgKm9iamlkKTsKICAgICAgICAgbGVuID0gc3RybGVuKHRtcGJ1Zik7CiAgICAgICAgIGlmIChwb3MgKyBsZW4gKyAyID4gd2lkdGgpIHsKICAgICAgICAgICAgIGlmICghc25tcF9jc3RyY2F0KGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwgYWxsb3dfcmVhbGxvYywgIlxuICAgICAiKSkKQEAgLTQ2MjMsNyArNDgyMSw3IEBACiAgICAgICAgIG9iamlkKys7CiAgICAgICAgIG9iamlkbGVuLS07CiAgICAgfQotICAgIHNwcmludGYodG1wYnVmLCAiICVsdSB9IiwgKm9iamlkKTsKKyAgICBzcHJpbnRmKHRtcGJ1ZiwgIiAlIiBORVRTTk1QX1BSSW8gInUgfSIsICpvYmppZCk7CiAgICAgbGVuID0gc3RybGVuKHRtcGJ1Zik7CiAgICAgaWYgKHBvcyArIGxlbiArIDIgPiB3aWR0aCkgewogICAgICAgICBpZiAoIXNubXBfY3N0cmNhdChidWYsIGJ1Zl9sZW4sIG91dF9sZW4sIGFsbG93X3JlYWxsb2MsICJcbiAgICAgIikpCkBAIC01MTU3LDcgKzUzNTUsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBTZWFyY2ggZm9yIHRoZSBhcHByb3ByaWF0ZSBjaGlsZCAKICAgICAgICAgICovCi0gICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKyAgICAgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcCkpKSB7CiAgICAgICAgICAgICBzdWJpZCA9IHN0cnRvdWwoY3AsICZlY3AsIDApOwogICAgICAgICAgICAgaWYgKCplY3ApCiAgICAgICAgICAgICAgICAgZ290byBiYWRfaWQ7CkBAIC01MjE0LDcgKzU0MTIsNyBAQAogICAgICAgICAgICAgY3AyID0gc3RyY2hyKGNwLCAnLicpOwogICAgICAgICAgICAgaWYgKGNwMikKICAgICAgICAgICAgICAgICAqY3AyKysgPSAnXDAnOwotICAgICAgICAgICAgaWYgKGlzZGlnaXQoKmNwKSkgeworICAgICAgICAgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcCkpKSB7CiAgICAgICAgICAgICAgICAgc3ViaWQgPSBzdHJ0b3VsKGNwLCAmZWNwLCAwKTsKICAgICAgICAgICAgICAgICBpZiAoKmVjcCkKICAgICAgICAgICAgICAgICAgICAgZ290byBiYWRfaWQ7CkBAIC01Nzg2LDcgKzU5ODQsNyBAQAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0cmVlICpudHA7CiAKLSAgICAgICAgdHAgPSAwOworICAgICAgICB0cCA9IE5VTEw7CiAgICAgICAgIGZvciAobnRwID0gdHJlZS0+Y2hpbGRfbGlzdDsgbnRwOyBudHAgPSBudHAtPm5leHRfcGVlcikgewogICAgICAgICAgICAgaWYgKG50cC0+cmVwb3J0ZWQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC01ODM5LDcgKzYwMzcsNiBAQAogCiAvKioKICAqIENvbnZlcnRzIHRpbWV0aWNrcyB0byBob3VycywgbWludXRlcywgc2Vjb25kcyBzdHJpbmcuCi0gKiBDTVUgY29tcGF0aWJsZSBkb2VzIG5vdCBzaG93IGNlbnRpc2Vjb25kcy4KICAqCiAgKiBAcGFyYW0gdGltZXRpY2tzICAgIFRoZSB0aW1ldGlja3MgdG8gY29udmVydC4KICAqIEBwYXJhbSBidWYgICAgICAgICAgQnVmZmVyIHRvIHdyaXRlIHRvLCBoYXMgdG8gYmUgYXQgCkBAIC01ODU5LDEzICs2MDU2LDYgQEAKIHVwdGltZV9zdHJpbmdfbih1X2xvbmcgdGltZXRpY2tzLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCiB7CiAgICAgdXB0aW1lU3RyaW5nKHRpbWV0aWNrcywgYnVmLCBidWZsZW4pOwotI2lmZGVmIENNVV9DT01QQVRJQkxFCi0gICAgewotICAgIGNoYXIgKmNwID0gc3RycmNocihidWYsICcuJyk7Ci0gICAgaWYgKGNwKQotICAgICAgICAqY3AgPSAnXDAnOwotICAgIH0KLSNlbmRpZgogICAgIHJldHVybiBidWY7CiB9CiAKQEAgLTYwOTksNyArNjI4OSw3IEBACiAJICAgIGlmICgnKicgPT0gKmgpIHsKIAkJcGgucmVwZWF0ID0gMTsKIAkJc3RhdGUgPSBISU5UXzJfMzsKLQkgICAgfSBlbHNlIGlmIChpc2RpZ2l0KCpoKSkgeworCSAgICB9IGVsc2UgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpoKSkpIHsKIAkJcGFyc2VfaGludHNfbGVuZ3RoX2FkZF9kaWdpdCgmcGgsICpoKTsKIAkJc3RhdGUgPSBISU5UXzJfMzsKIAkgICAgfSBlbHNlIHsKQEAgLTYxMDgsNyArNjI5OCw3IEBACiAJICAgIGJyZWFrOwogCiAJY2FzZSBISU5UXzJfMzoKLQkgICAgaWYgKGlzZGlnaXQoKmgpKSB7CisJICAgIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqaCkpKSB7CiAJCXBhcnNlX2hpbnRzX2xlbmd0aF9hZGRfZGlnaXQoJnBoLCAqaCk7CiAJCS8qIHN0YXRlID0gSElOVF8yXzMgKi8KIAkgICAgfSBlbHNlIGlmICgneCcgPT0gKmggfHwgJ2QnID09ICpoIHx8ICdvJyA9PSAqaCB8fCAnYScgPT0gKmgpIHsKQEAgLTYxMjYsNyArNjMxNiw3IEBACiAJCQogCQlwaC5yZXBlYXQgPSAxOwogCQlzdGF0ZSA9IEhJTlRfMl8zOwotCSAgICB9IGVsc2UgaWYgKGlzZGlnaXQoKmgpKSB7CisJICAgIH0gZWxzZSBpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmgpKSkgewogCQlyZXR2YWwgPSBwYXJzZV9oaW50c19wYXJzZSgmcGgsICZ2KTsKIAkJcGFyc2VfaGludHNfcmVzZXQoJnBoKTsKIAkJCkBAIC02MTQ1LDcgKzYzMzUsNyBAQAogCQkKIAkJcGgucmVwZWF0ID0gMTsKIAkJc3RhdGUgPSBISU5UXzJfMzsKLQkgICAgfSBlbHNlIGlmIChpc2RpZ2l0KCpoKSkgeworCSAgICB9IGVsc2UgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpoKSkpIHsKIAkJcmV0dmFsID0gcGFyc2VfaGludHNfcGFyc2UoJnBoLCAmdik7CiAJCXBhcnNlX2hpbnRzX3Jlc2V0KCZwaCk7CiAJCQpAQCAtNjIxOCw2ICs2NDA4LDcgQEAKIAogI2VuZGlmIC8qIHRlc3RfZGlzcGxheV9oaW50ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NSUJfVE9fQVNOX1RZUEUKIHVfY2hhcgogbWliX3RvX2Fzbl90eXBlKGludCBtaWJfdHlwZSkKIHsKQEAgLTYyNjcsNiArNjQ1OCw3IEBACiAgICAgfQogICAgIHJldHVybiAtMTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01JQl9UT19BU05fVFlQRSAqLwogCiAvKioKICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGl0cyBPSUQgZm9ybS4KQEAgLTYyNzgsNiArNjQ3MCw3IEBACiAgKgogICogQHJldHVybiAwIG9uIFN1Y2VzcywgMSBvbiBmYWlsdXJlLgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUlCX1NUUklOR19DT05WRVJTSU9OUwogaW50CiBuZXRzbm1wX3N0cjJvaWQoY29uc3QgY2hhciAqUywgb2lkICogTywgaW50IEwpCiB7CkBAIC02MzU3LDcgKzY1NTAsMTAgQEAKIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUlCX1NUUklOR19DT05WRVJTSU9OUyAqLwogCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NSUJfU05QUklOVAogaW50CiBzbnByaW50X2J5X3R5cGUoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCkBAIC02NjM1LDUgKzY4MzEsNiBAQAogICAgICAgICByZXR1cm4gLTE7CiB9CiAjZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01JQl9TTlBSSU5UICovCiAvKiogQH0gKi8KIApkaWZmIC0tZ2l0IGEvc25tcGxpYi9vaWRfc3Rhc2guYyBiL3NubXBsaWIvb2lkX3N0YXNoLmMKaW5kZXggYTA5YWQ1My4uOGE3OTg5NyAxMDA2NDQKLS0tIGEvc25tcGxpYi9vaWRfc3Rhc2guYworKysgYi9zbm1wbGliL29pZF9zdGFzaC5jCkBAIC01LDggKzUsMTUgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9pZF9zdGFzaF9hbGwsIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob2lkX3N0YXNoLCBvaWRfc3Rhc2hfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9pZF9zdGFzaF9ub19mcmVlLCBvaWRfc3Rhc2hfYWxsKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNICisKIC8qKiBAZGVmZ3JvdXAgb2lkX3N0YXNoIFN0b3JlIGFuZCByZXRyaWV2ZSBkYXRhIHJlZmVyZW5jZWQgYnkgYW4gT0lELgogICAgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSB3YXkgb2Ygc3RvcmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuCiAgICAgT0lELiAgSXQgc3RvcmVzIGEgYnVuY2ggb2YgZGF0YSBwb2ludGVycyB3aXRoaW4gYSBtZW1vcnkgdHJlZSB0aGF0CkBAIC02OCw2ICs3NSw4IEBACiAgICAgcmV0dXJuIG5ldHNubXBfb2lkX3N0YXNoX2NyZWF0ZV9zaXplZF9ub2RlKE9JRF9TVEFTSF9DSElMRFJFTl9TSVpFKTsKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9pZF9zdGFzaF9hZGRfZGF0YSwgb2lkX3N0YXNoX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfQUREX0RBVEEKIC8qKiBhZGRzIGRhdGEgdG8gdGhlIHN0YXNoIGF0IGEgZ2l2ZW4gb2lkLgogCiAgKiBAcGFyYW0gcm9vdCB0aGUgdG9wIG9mIHRoZSBzdGFzaCB0cmVlCkBAIC0xNDQsNiArMTUzLDcgQEAKICAgICB0bXBwLT50aGVkYXRhID0gbXlkYXRhOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfQUREX0RBVEEgKi8KIAogLyoqIHJldHVybnMgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4KICAqIEBwYXJhbSByb290IHRoZSB0b3Agb2YgdGhlIHN0YXNoIHRyZWUKQEAgLTE4Nyw2ICsxOTcsOCBAQAogICogQHBhcmFtIGxvb2t1cCB0aGUgb2lkIHRvIGxvb2sgdXAgYSBub2RlIGZvci4KICAqIEBwYXJhbSBsb29rdXBfbGVuIHRoZSBsZW5ndGggb2YgdGhlIGxvb2t1cCBvaWQKICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9pZF9zdGFzaF9pdGVyYXRlLCBvaWRfc3Rhc2hfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9JVEVSQVRFCiBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoKIG5ldHNubXBfb2lkX3N0YXNoX2dldG5leHRfbm9kZShuZXRzbm1wX29pZF9zdGFzaF9ub2RlICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pCkBAIC0yNjgsNyArMjgwLDEwIEBACiAgICAgLyogZmVsbCBvZmYgdGhlIHRvcCAqLwogICAgIHJldHVybiBOVUxMOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX0lURVJBVEUgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9pZF9zdGFzaF9nZXRfZGF0YSwgb2lkX3N0YXNoX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfR0VUX0RBVEEKIC8qKiByZXR1cm5zIGEgZGF0YSBwb2ludGVyIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4KIAogICAgIFRoaXMgaXMgZXF1aXZlbGVudCB0byBuZXRzbm1wX29pZF9zdGFzaF9nZXRfbm9kZSwgYnV0IHJldHVybnMgb25seQpAQCAtMjg4LDcgKzMwMywxMCBAQAogICAgICAgICByZXR1cm4gcmV0LT50aGVkYXRhOwogICAgIHJldHVybiBOVUxMOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX0dFVF9EQVRBICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvaWRfc3Rhc2hfc3RvcmVfYWxsLCBvaWRfc3Rhc2hfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9TVE9SRV9BTEwKIC8qKiBhIHdyYXBwZXIgYXJvdW5kIG5ldHNubXBfb2lkX3N0YXNoX3N0b3JlIGZvciB1c2Ugd2l0aCBhIHNubXBfYWxhcm0uCiAgKiB3aGVuIGNhbGxpbmcgc25tcF9hbGFybSwgeW91IGNhbiBsaXN0IHRoaXMgYXMgYSBjYWxsYmFjay4gIFRoZQogICogY2xpZW50YXJnIHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX29pZF9zdGFzaF9zYXZlX2luZm8KQEAgLTMxNCw2ICszMzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZGJhc2UsMCk7CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfU1RPUkVfQUxMICovCiAKIC8qKiBzdG9yZXMgZGF0YSBpbiBhIHN0YXJzaCB0cmVlIHRvIHBlcmlzdGVudCBzdG9yYWdlLgogCkBAIC0zODQsNyArNDAzLDcgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgcm9vdC0+Y2hpbGRyZW5fc2l6ZTsgaSsrKSB7CiAgICAgICAgIGlmIChyb290LT5jaGlsZHJlbltpXSkgewogICAgICAgICAgICAgZm9yICh0bXBwID0gcm9vdC0+Y2hpbGRyZW5baV07IHRtcHA7IHRtcHAgPSB0bXBwLT5uZXh0X3NpYmxpbmcpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzJWxkQCVkOiAlc1xuIiwgcHJlZml4LCB0bXBwLT52YWx1ZSwgaSwKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzJSIgTkVUU05NUF9QUklvICJkQCVkOiAlc1xuIiwgcHJlZml4LCB0bXBwLT52YWx1ZSwgaSwKICAgICAgICAgICAgICAgICAgICAgICAgKHRtcHAtPnRoZWRhdGEpID8gIkRBVEEiIDogIiIpOwogICAgICAgICAgICAgICAgIG9pZF9zdGFzaF9kdW1wKHRtcHAsIG15cHJlZml4KTsKICAgICAgICAgICAgIH0KQEAgLTQyNywxMCArNDQ2LDE2IEBACiAgICAgKnJvb3QgPSBOVUxMOwogfQogCisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSCAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChvaWRfc3Rhc2gpOworI2VuZGlmLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0ggKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9OT19GUkVFCiB2b2lkCiBuZXRzbm1wX29pZF9zdGFzaF9ub19mcmVlKHZvaWQgKmJvZ3VzKQogewogICAgIC8qIG5vb3AgKi8KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9OT19GUkVFICovCiAKIC8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuZGlyLmMgYi9zbm1wbGliL29wZW5kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2I4ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuZGlyLmMKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBvcGVuZGlyKCkgcmVwbGFjZW1lbnQgZm9yIE1TVkMuCisgKi8KKworI2RlZmluZSBXSU4zMklPX0lTX1NURElPCisjZGVmaW5lIFBBVEhMRU4JMTAyNAorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0Y2hhci5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworCisvKgorICogVGhlIGlkZWEgaGVyZSBpcyB0byByZWFkIGFsbCB0aGUgZGlyZWN0b3J5IG5hbWVzIGludG8gYSBzdHJpbmcgdGFibGUKKyAqICogKHNlcGFyYXRlZCBieSBudWxscykgYW5kIHdoZW4gb25lIG9mIHRoZSBvdGhlciBkaXIgZnVuY3Rpb25zIGlzIGNhbGxlZAorICogKiByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZmlsZSBuYW1lLgorICovCitESVIgICAgICAgICAgICAqCitvcGVuZGlyKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIERJUiAgICAgICAgICAgICpwOworICAgIGxvbmcgICAgICAgICAgICBsZW47CisgICAgbG9uZyAgICAgICAgICAgIGlkeDsKKyAgICBjaGFyICAgICAgICAgICAgc2Nhbm5hbWVzcGNbUEFUSExFTl07CisgICAgY2hhciAgICAgICAgICAgKnNjYW5uYW1lID0gc2Nhbm5hbWVzcGM7CisgICAgc3RydWN0IHN0YXQgICAgIHNidWY7CisgICAgV0lOMzJfRklORF9EQVRBIEZpbmREYXRhOworICAgIEhBTkRMRSAgICAgICAgICBmaDsKKworICAgIC8qCisgICAgICogY2hlY2sgdG8gc2VlIGlmIGZpbGVuYW1lIGlzIGEgZGlyZWN0b3J5IAorICAgICAqLworICAgIGlmICgoc3RhdChmaWxlbmFtZSwgJnNidWYpIDwgMCkgfHwgKChzYnVmLnN0X21vZGUgJiBTX0lGRElSKSA9PSAwKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGdldCB0aGUgZmlsZSBzeXN0ZW0gY2hhcmFjdGVyaXN0aWNzIAorICAgICAqLworICAgIC8qCisgICAgICogaWYoR2V0RnVsbFBhdGhOYW1lKGZpbGVuYW1lLCBTTk1QX01BWFBBVEgsIHJvb3QsICZkdW1teSkpIHsKKyAgICAgKiAqICAgIGlmKGR1bW15ID0gc3RyY2hyKHJvb3QsICdcXCcpKQorICAgICAqICogICAgICAgICorK2R1bW15ID0gJ1wwJzsKKyAgICAgKiAqICAgIGlmKEdldFZvbHVtZUluZm9ybWF0aW9uKHJvb3QsIHZvbG5hbWUsIFNOTVBfTUFYUEFUSCwgJnNlcmlhbCwKKyAgICAgKiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXhuYW1lLCAmZmxhZ3MsIDAsIDApKSB7CisgICAgICogKiAgICAgICAgZG93bmNhc2UgPSAhKGZsYWdzICYgRlNfQ0FTRV9JU19QUkVTRVJWRUQpOworICAgICAqICogICAgfQorICAgICAqICogIH0KKyAgICAgKiAqICBlbHNlIHsKKyAgICAgKiAqICAgIGRvd25jYXNlID0gVFJVRTsKKyAgICAgKiAqICB9CisgICAgICovCisKKyAgICAvKgorICAgICAqIENyZWF0ZSB0aGUgc2VhcmNoIHBhdHRlcm4gCisgICAgICovCisgICAgc3RyY3B5KHNjYW5uYW1lLCBmaWxlbmFtZSk7CisKKyAgICBpZiAoc3RyY2hyKCIvXFwiLCAqKHNjYW5uYW1lICsgc3RybGVuKHNjYW5uYW1lKSAtIDEpKSA9PSBOVUxMKQorICAgICAgICBzdHJjYXQoc2Nhbm5hbWUsICIvKiIpOworICAgIGVsc2UKKyAgICAgICAgc3RyY2F0KHNjYW5uYW1lLCAiKiIpOworCisgICAgLyoKKyAgICAgKiBkbyB0aGUgRmluZEZpcnN0RmlsZSBjYWxsIAorICAgICAqLworICAgIGZoID0gRmluZEZpcnN0RmlsZShzY2FubmFtZSwgJkZpbmREYXRhKTsKKyAgICBpZiAoZmggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBHZXQgdXMgYSBESVIgc3RydWN0dXJlIAorICAgICAqLworICAgIHAgPSAoRElSICopIG1hbGxvYyhzaXplb2YoRElSKSk7CisgICAgLyoKKyAgICAgKiBOZXd6KDEzMDMsIHAsIDEsIERJUik7IAorICAgICAqLworICAgIGlmIChwID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiBub3cgYWxsb2NhdGUgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN0cmluZyB0YWJsZSBmb3IKKyAgICAgKiAqIHRoZSBmaWxlbmFtZXMgdGhhdCB3ZSBmaW5kLgorICAgICAqLworICAgIGlkeCA9IHN0cmxlbihGaW5kRGF0YS5jRmlsZU5hbWUpICsgMTsKKyAgICBwLT5zdGFydCA9IChjaGFyICopIG1hbGxvYyhpZHgpOworICAgIC8qCisgICAgICogTmV3KDEzMDQsIHAtPnN0YXJ0LCBpZHgsIGNoYXIpOworICAgICAqLworICAgIGlmIChwLT5zdGFydCA9PSBOVUxMKSB7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzdHJjcHkocC0+c3RhcnQsIEZpbmREYXRhLmNGaWxlTmFtZSk7CisgICAgLyoKKyAgICAgKiBpZihkb3duY2FzZSkKKyAgICAgKiAqICAgIHN0cmx3cihwLT5zdGFydCk7CisgICAgICovCisgICAgcC0+bmZpbGVzID0gMDsKKworICAgIC8qCisgICAgICogbG9vcCBmaW5kaW5nIGFsbCB0aGUgZmlsZXMgdGhhdCBtYXRjaCB0aGUgd2lsZGNhcmQKKyAgICAgKiAqICh3aGljaCBzaG91bGQgYmUgYWxsIG9mIHRoZW0gaW4gdGhpcyBkaXJlY3RvcnkhKS4KKyAgICAgKiAqIHRoZSB2YXJpYWJsZSBpZHggc2hvdWxkIHBvaW50IG9uZSBwYXN0IHRoZSBudWxsIHRlcm1pbmF0b3IKKyAgICAgKiAqIG9mIHRoZSBwcmV2aW91cyBzdHJpbmcgZm91bmQuCisgICAgICovCisgICAgd2hpbGUgKEZpbmROZXh0RmlsZShmaCwgJkZpbmREYXRhKSkgeworICAgICAgICBsZW4gPSBzdHJsZW4oRmluZERhdGEuY0ZpbGVOYW1lKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogYnVtcCB0aGUgc3RyaW5nIHRhYmxlIHNpemUgYnkgZW5vdWdoIGZvciB0aGUKKyAgICAgICAgICogKiBuZXcgbmFtZSBhbmQgaXQncyBudWxsIHRlcm1pbmF0b3IKKyAgICAgICAgICovCisgICAgICAgIHAtPnN0YXJ0ID0gKGNoYXIgKikgcmVhbGxvYygodm9pZCAqKSBwLT5zdGFydCwgaWR4ICsgbGVuICsgMSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlbmV3KHAtPnN0YXJ0LCBpZHgrbGVuKzEsIGNoYXIpOworICAgICAgICAgKi8KKyAgICAgICAgaWYgKHAtPnN0YXJ0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUocCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdHJjcHkoJnAtPnN0YXJ0W2lkeF0sIEZpbmREYXRhLmNGaWxlTmFtZSk7CisgICAgICAgIC8qCisgICAgICAgICAqIGlmIChkb3duY2FzZSkgCisgICAgICAgICAqICogICAgICAgIHN0cmx3cigmcC0+c3RhcnRbaWR4XSk7CisgICAgICAgICAqLworICAgICAgICBwLT5uZmlsZXMrKzsKKyAgICAgICAgaWR4ICs9IGxlbiArIDE7CisgICAgfQorICAgIEZpbmRDbG9zZShmaCk7CisgICAgcC0+c2l6ZSA9IGlkeDsKKyAgICBwLT5jdXJyID0gcC0+c3RhcnQ7CisgICAgcmV0dXJuIHA7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvT1BFTlNTTC1MSUNFTlNFIGIvc25tcGxpYi9vcGVuc3NsL09QRU5TU0wtTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM0YWRjCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL09QRU5TU0wtTElDRU5TRQpAQCAtMCwwICsxLDEyNyBAQAorCisgIExJQ0VOU0UgSVNTVUVTCisgID09PT09PT09PT09PT09CisKKyAgVGhlIE9wZW5TU0wgdG9vbGtpdCBzdGF5cyB1bmRlciBhIGR1YWwgbGljZW5zZSwgaS5lLiBib3RoIHRoZSBjb25kaXRpb25zIG9mCisgIHRoZSBPcGVuU1NMIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCBTU0xlYXkgbGljZW5zZSBhcHBseSB0byB0aGUgdG9vbGtpdC4KKyAgU2VlIGJlbG93IGZvciB0aGUgYWN0dWFsIGxpY2Vuc2UgdGV4dHMuIEFjdHVhbGx5IGJvdGggbGljZW5zZXMgYXJlIEJTRC1zdHlsZQorICBPcGVuIFNvdXJjZSBsaWNlbnNlcy4gSW4gY2FzZSBvZiBhbnkgbGljZW5zZSBpc3N1ZXMgcmVsYXRlZCB0byBPcGVuU1NMCisgIHBsZWFzZSBjb250YWN0IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKworICBPcGVuU1NMIExpY2Vuc2UKKyAgLS0tLS0tLS0tLS0tLS0tCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisgT3JpZ2luYWwgU1NMZWF5IExpY2Vuc2UKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9SRUFETUUgYi9zbm1wbGliL29wZW5zc2wvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NDA4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvUkVBRE1FCkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG1vZGlmaWVkIGNyeXB0byBjb2RlIGZyb20gT3BlblNTTAorMS4wLjAuYmV0YTUuICBQbGVhc2Ugc2VlIHRoZSBPcGVuU1NMIGxpY2Vuc2UgZnJvbSB0aGF0IHJlbGVhc2UgaW4gdGhlCitPUEVOU1NMLUxJQ0VOU0Ugd2hpY2ggd2lsbCBhcHBseSBpZiB0aGlzIGNvZGUgaXMgc2VsZWN0ZWQuCisKK05ldC1TTk1QIG1heSBiZSBjb21waWxlZCB3aXRoIHRoaXMgY29kZSB1c2luZyB0aGUKKy0td2l0aC1vcGVuc3NsPWludGVybmFsIGZsYWcgdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCisKK05vdGU6IEl0IGlzIGdlbmVyYWxseSBhIGJldHRlciBpZGVhIHRvIGxpbmsgd2l0aCB0aGUgbGF0ZXN0IE9wZW5TU0wKK2xpYnJhcnkgcmF0aGVyIHRoYW4gcmVseSBvbiB0aGlzIGludGVybmFsIHN1cHBvcnQsIGFzIHRoZSBsYXRlc3QKK09wZW5TU0wgY29kZSBtYXkgY29udGFpbiBpbXBvcnRhbnQgc2VjdXJpdHkgb3Igb3RoZXIgZml4ZXMgdGhhdCBtYXkKK25vdCBoYXZlIGJlZW4gaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBzbmFwc2hvdC4gIFNtYWxsIGRldmljZSB2ZW5kb3JzLAoraG93ZXZlciwgaGF2ZSByZXF1ZXN0ZWQgYSBzdHJpcHBlZCBkb3duIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wKK2NyeXB0b2dyYXBoeSBjb2RlIGluIG9yZGVyIHRvIHNocmluayB0aGVpciBtZW1vcnkgZm9vdHByaW50IGFuZCB0aGlzCitmZWF0dXJlIHByb3ZpZGVzIHN1Y2ggc3VwcG9ydC4KKworTm90ZSBhbHNvIHRoYXQgdGhlIG5ldyBTTk1QIG92ZXIgRFRMUywgU05NUCBvdmVyIFRMUyBzdXBwb3J0IGFsc28KK2F2YWlsYWJsZSBpbiBOZXQtU05NUCA1LjYgYW5kIGJleW9uZCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgaW50ZXJuYWwKK3ZlcnNpb24gb2YgdGhlIE9wZW5TU0wgc3VwcG9ydCBzaW5jZSBTTk1QIG92ZXIgKEQpVExTIHJlcXVpcmVzIHRoZQorZnVsbCBUTFMgc3VwcG9ydCBhdmFpbGFibGUgaW4gT3BlblNTTC4KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTllNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIGNyeXB0by9hZXMvYWVzX2NmYi5jIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmg+CisjaW5jbHVkZSAib3BlbnNzbC9vcGVuc3NsX21vZGVzLmgiCisKKy8qIFRoZSBpbnB1dCBhbmQgb3V0cHV0IGVuY3J5cHRlZCBhcyB0aG91Z2ggMTI4Yml0IGNmYiBtb2RlIGlzIGJlaW5nCisgKiB1c2VkLiAgVGhlIGV4dHJhIHN0YXRlIGluZm9ybWF0aW9uIHRvIHJlY29yZCBob3cgbXVjaCBvZiB0aGUKKyAqIDEyOGJpdCBibG9jayB3ZSBoYXZlIHVzZWQgaXMgY29udGFpbmVkIGluICpudW07CisgKi8KKwordm9pZCBBRVNfY2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpIHsKKworCUNSWVBUT19jZmIxMjhfZW5jcnlwdChpbixvdXQsbGVuZ3RoLGtleSxpdmVjLG51bSxlbmMsKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOworfQorCisvKiBOLkIuIFRoaXMgZXhwZWN0cyB0aGUgaW5wdXQgdG8gYmUgcGFja2VkLCBNUyBiaXQgZmlyc3QgKi8KK3ZvaWQgQUVTX2NmYjFfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgICAgICBzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKQorICAgIHsKKyAgICBDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdChpbixvdXQsbGVuZ3RoLGtleSxpdmVjLG51bSxlbmMsKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOworICAgIH0KKwordm9pZCBBRVNfY2ZiOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCSAgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpCisgICAgeworICAgIENSWVBUT19jZmIxMjhfOF9lbmNyeXB0KGluLG91dCxsZW5ndGgsa2V5LGl2ZWMsbnVtLGVuYywoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CisgICAgfQorCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjMwMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUuYwpAQCAtMCwwICsxLDEzNTggQEAKKy8qIGNyeXB0by9hZXMvYWVzX2NvcmUuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLworLyoqCisgKiByaWpuZGFlbC1hbGctZnN0LmMKKyAqCisgKiBAdmVyc2lvbiAzLjAgKERlY2VtYmVyIDIwMDApCisgKgorICogT3B0aW1pc2VkIEFOU0kgQyBjb2RlIGZvciB0aGUgUmlqbmRhZWwgY2lwaGVyIChub3cgQUVTKQorICoKKyAqIEBhdXRob3IgVmluY2VudCBSaWptZW4gPHZpbmNlbnQucmlqbWVuQGVzYXQua3VsZXV2ZW4uYWMuYmU+CisgKiBAYXV0aG9yIEFudG9vbiBCb3NzZWxhZXJzIDxhbnRvb24uYm9zc2VsYWVyc0Blc2F0Lmt1bGV1dmVuLmFjLmJlPgorICogQGF1dGhvciBQYXVsbyBCYXJyZXRvIDxwYXVsby5iYXJyZXRvQHRlcnJhLmNvbS5icj4KKyAqCisgKiBUaGlzIGNvZGUgaXMgaGVyZWJ5IHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1JTICcnQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBOb3RlOiByZXdyaXR0ZW4gYSBsaXR0bGUgYml0IHRvIHByb3ZpZGUgZXJyb3IgY29udHJvbCBhbmQgYW4gT3BlblNTTC0KKyAgIGNvbXBhdGlibGUgQVBJICovCisKKyNpZm5kZWYgQUVTX0RFQlVHCisjIGlmbmRlZiBOREVCVUcKKyMgIGRlZmluZSBOREVCVUcKKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oPgorI2luY2x1ZGUgIm9wZW5zc2xfYWVzX2xvY2FsLmgiCisKKyNpZm5kZWYgQUVTX0FTTQorLyoKK1RlMFt4XSA9IFMgW3hdLlswMiwgMDEsIDAxLCAwM107CitUZTFbeF0gPSBTIFt4XS5bMDMsIDAyLCAwMSwgMDFdOworVGUyW3hdID0gUyBbeF0uWzAxLCAwMywgMDIsIDAxXTsKK1RlM1t4XSA9IFMgW3hdLlswMSwgMDEsIDAzLCAwMl07CisKK1RkMFt4XSA9IFNpW3hdLlswZSwgMDksIDBkLCAwYl07CitUZDFbeF0gPSBTaVt4XS5bMGIsIDBlLCAwOSwgMGRdOworVGQyW3hdID0gU2lbeF0uWzBkLCAwYiwgMGUsIDA5XTsKK1RkM1t4XSA9IFNpW3hdLlswOSwgMGQsIDBiLCAwZV07CitUZDRbeF0gPSBTaVt4XS5bMDFdOworKi8KKworc3RhdGljIGNvbnN0IHUzMiBUZTBbMjU2XSA9IHsKKyAgICAweGM2NjM2M2E1VSwgMHhmODdjN2M4NFUsIDB4ZWU3Nzc3OTlVLCAweGY2N2I3YjhkVSwKKyAgICAweGZmZjJmMjBkVSwgMHhkNjZiNmJiZFUsIDB4ZGU2ZjZmYjFVLCAweDkxYzVjNTU0VSwKKyAgICAweDYwMzAzMDUwVSwgMHgwMjAxMDEwM1UsIDB4Y2U2NzY3YTlVLCAweDU2MmIyYjdkVSwKKyAgICAweGU3ZmVmZTE5VSwgMHhiNWQ3ZDc2MlUsIDB4NGRhYmFiZTZVLCAweGVjNzY3NjlhVSwKKyAgICAweDhmY2FjYTQ1VSwgMHgxZjgyODI5ZFUsIDB4ODljOWM5NDBVLCAweGZhN2Q3ZDg3VSwKKyAgICAweGVmZmFmYTE1VSwgMHhiMjU5NTllYlUsIDB4OGU0NzQ3YzlVLCAweGZiZjBmMDBiVSwKKyAgICAweDQxYWRhZGVjVSwgMHhiM2Q0ZDQ2N1UsIDB4NWZhMmEyZmRVLCAweDQ1YWZhZmVhVSwKKyAgICAweDIzOWM5Y2JmVSwgMHg1M2E0YTRmN1UsIDB4ZTQ3MjcyOTZVLCAweDliYzBjMDViVSwKKyAgICAweDc1YjdiN2MyVSwgMHhlMWZkZmQxY1UsIDB4M2Q5MzkzYWVVLCAweDRjMjYyNjZhVSwKKyAgICAweDZjMzYzNjVhVSwgMHg3ZTNmM2Y0MVUsIDB4ZjVmN2Y3MDJVLCAweDgzY2NjYzRmVSwKKyAgICAweDY4MzQzNDVjVSwgMHg1MWE1YTVmNFUsIDB4ZDFlNWU1MzRVLCAweGY5ZjFmMTA4VSwKKyAgICAweGUyNzE3MTkzVSwgMHhhYmQ4ZDg3M1UsIDB4NjIzMTMxNTNVLCAweDJhMTUxNTNmVSwKKyAgICAweDA4MDQwNDBjVSwgMHg5NWM3Yzc1MlUsIDB4NDYyMzIzNjVVLCAweDlkYzNjMzVlVSwKKyAgICAweDMwMTgxODI4VSwgMHgzNzk2OTZhMVUsIDB4MGEwNTA1MGZVLCAweDJmOWE5YWI1VSwKKyAgICAweDBlMDcwNzA5VSwgMHgyNDEyMTIzNlUsIDB4MWI4MDgwOWJVLCAweGRmZTJlMjNkVSwKKyAgICAweGNkZWJlYjI2VSwgMHg0ZTI3Mjc2OVUsIDB4N2ZiMmIyY2RVLCAweGVhNzU3NTlmVSwKKyAgICAweDEyMDkwOTFiVSwgMHgxZDgzODM5ZVUsIDB4NTgyYzJjNzRVLCAweDM0MWExYTJlVSwKKyAgICAweDM2MWIxYjJkVSwgMHhkYzZlNmViMlUsIDB4YjQ1YTVhZWVVLCAweDViYTBhMGZiVSwKKyAgICAweGE0NTI1MmY2VSwgMHg3NjNiM2I0ZFUsIDB4YjdkNmQ2NjFVLCAweDdkYjNiM2NlVSwKKyAgICAweDUyMjkyOTdiVSwgMHhkZGUzZTMzZVUsIDB4NWUyZjJmNzFVLCAweDEzODQ4NDk3VSwKKyAgICAweGE2NTM1M2Y1VSwgMHhiOWQxZDE2OFUsIDB4MDAwMDAwMDBVLCAweGMxZWRlZDJjVSwKKyAgICAweDQwMjAyMDYwVSwgMHhlM2ZjZmMxZlUsIDB4NzliMWIxYzhVLCAweGI2NWI1YmVkVSwKKyAgICAweGQ0NmE2YWJlVSwgMHg4ZGNiY2I0NlUsIDB4NjdiZWJlZDlVLCAweDcyMzkzOTRiVSwKKyAgICAweDk0NGE0YWRlVSwgMHg5ODRjNGNkNFUsIDB4YjA1ODU4ZThVLCAweDg1Y2ZjZjRhVSwKKyAgICAweGJiZDBkMDZiVSwgMHhjNWVmZWYyYVUsIDB4NGZhYWFhZTVVLCAweGVkZmJmYjE2VSwKKyAgICAweDg2NDM0M2M1VSwgMHg5YTRkNGRkN1UsIDB4NjYzMzMzNTVVLCAweDExODU4NTk0VSwKKyAgICAweDhhNDU0NWNmVSwgMHhlOWY5ZjkxMFUsIDB4MDQwMjAyMDZVLCAweGZlN2Y3ZjgxVSwKKyAgICAweGEwNTA1MGYwVSwgMHg3ODNjM2M0NFUsIDB4MjU5ZjlmYmFVLCAweDRiYThhOGUzVSwKKyAgICAweGEyNTE1MWYzVSwgMHg1ZGEzYTNmZVUsIDB4ODA0MDQwYzBVLCAweDA1OGY4ZjhhVSwKKyAgICAweDNmOTI5MmFkVSwgMHgyMTlkOWRiY1UsIDB4NzAzODM4NDhVLCAweGYxZjVmNTA0VSwKKyAgICAweDYzYmNiY2RmVSwgMHg3N2I2YjZjMVUsIDB4YWZkYWRhNzVVLCAweDQyMjEyMTYzVSwKKyAgICAweDIwMTAxMDMwVSwgMHhlNWZmZmYxYVUsIDB4ZmRmM2YzMGVVLCAweGJmZDJkMjZkVSwKKyAgICAweDgxY2RjZDRjVSwgMHgxODBjMGMxNFUsIDB4MjYxMzEzMzVVLCAweGMzZWNlYzJmVSwKKyAgICAweGJlNWY1ZmUxVSwgMHgzNTk3OTdhMlUsIDB4ODg0NDQ0Y2NVLCAweDJlMTcxNzM5VSwKKyAgICAweDkzYzRjNDU3VSwgMHg1NWE3YTdmMlUsIDB4ZmM3ZTdlODJVLCAweDdhM2QzZDQ3VSwKKyAgICAweGM4NjQ2NGFjVSwgMHhiYTVkNWRlN1UsIDB4MzIxOTE5MmJVLCAweGU2NzM3Mzk1VSwKKyAgICAweGMwNjA2MGEwVSwgMHgxOTgxODE5OFUsIDB4OWU0ZjRmZDFVLCAweGEzZGNkYzdmVSwKKyAgICAweDQ0MjIyMjY2VSwgMHg1NDJhMmE3ZVUsIDB4M2I5MDkwYWJVLCAweDBiODg4ODgzVSwKKyAgICAweDhjNDY0NmNhVSwgMHhjN2VlZWUyOVUsIDB4NmJiOGI4ZDNVLCAweDI4MTQxNDNjVSwKKyAgICAweGE3ZGVkZTc5VSwgMHhiYzVlNWVlMlUsIDB4MTYwYjBiMWRVLCAweGFkZGJkYjc2VSwKKyAgICAweGRiZTBlMDNiVSwgMHg2NDMyMzI1NlUsIDB4NzQzYTNhNGVVLCAweDE0MGEwYTFlVSwKKyAgICAweDkyNDk0OWRiVSwgMHgwYzA2MDYwYVUsIDB4NDgyNDI0NmNVLCAweGI4NWM1Y2U0VSwKKyAgICAweDlmYzJjMjVkVSwgMHhiZGQzZDM2ZVUsIDB4NDNhY2FjZWZVLCAweGM0NjI2MmE2VSwKKyAgICAweDM5OTE5MWE4VSwgMHgzMTk1OTVhNFUsIDB4ZDNlNGU0MzdVLCAweGYyNzk3OThiVSwKKyAgICAweGQ1ZTdlNzMyVSwgMHg4YmM4Yzg0M1UsIDB4NmUzNzM3NTlVLCAweGRhNmQ2ZGI3VSwKKyAgICAweDAxOGQ4ZDhjVSwgMHhiMWQ1ZDU2NFUsIDB4OWM0ZTRlZDJVLCAweDQ5YTlhOWUwVSwKKyAgICAweGQ4NmM2Y2I0VSwgMHhhYzU2NTZmYVUsIDB4ZjNmNGY0MDdVLCAweGNmZWFlYTI1VSwKKyAgICAweGNhNjU2NWFmVSwgMHhmNDdhN2E4ZVUsIDB4NDdhZWFlZTlVLCAweDEwMDgwODE4VSwKKyAgICAweDZmYmFiYWQ1VSwgMHhmMDc4Nzg4OFUsIDB4NGEyNTI1NmZVLCAweDVjMmUyZTcyVSwKKyAgICAweDM4MWMxYzI0VSwgMHg1N2E2YTZmMVUsIDB4NzNiNGI0YzdVLCAweDk3YzZjNjUxVSwKKyAgICAweGNiZThlODIzVSwgMHhhMWRkZGQ3Y1UsIDB4ZTg3NDc0OWNVLCAweDNlMWYxZjIxVSwKKyAgICAweDk2NGI0YmRkVSwgMHg2MWJkYmRkY1UsIDB4MGQ4YjhiODZVLCAweDBmOGE4YTg1VSwKKyAgICAweGUwNzA3MDkwVSwgMHg3YzNlM2U0MlUsIDB4NzFiNWI1YzRVLCAweGNjNjY2NmFhVSwKKyAgICAweDkwNDg0OGQ4VSwgMHgwNjAzMDMwNVUsIDB4ZjdmNmY2MDFVLCAweDFjMGUwZTEyVSwKKyAgICAweGMyNjE2MWEzVSwgMHg2YTM1MzU1ZlUsIDB4YWU1NzU3ZjlVLCAweDY5YjliOWQwVSwKKyAgICAweDE3ODY4NjkxVSwgMHg5OWMxYzE1OFUsIDB4M2ExZDFkMjdVLCAweDI3OWU5ZWI5VSwKKyAgICAweGQ5ZTFlMTM4VSwgMHhlYmY4ZjgxM1UsIDB4MmI5ODk4YjNVLCAweDIyMTExMTMzVSwKKyAgICAweGQyNjk2OWJiVSwgMHhhOWQ5ZDk3MFUsIDB4MDc4ZThlODlVLCAweDMzOTQ5NGE3VSwKKyAgICAweDJkOWI5YmI2VSwgMHgzYzFlMWUyMlUsIDB4MTU4Nzg3OTJVLCAweGM5ZTllOTIwVSwKKyAgICAweDg3Y2VjZTQ5VSwgMHhhYTU1NTVmZlUsIDB4NTAyODI4NzhVLCAweGE1ZGZkZjdhVSwKKyAgICAweDAzOGM4YzhmVSwgMHg1OWExYTFmOFUsIDB4MDk4OTg5ODBVLCAweDFhMGQwZDE3VSwKKyAgICAweDY1YmZiZmRhVSwgMHhkN2U2ZTYzMVUsIDB4ODQ0MjQyYzZVLCAweGQwNjg2OGI4VSwKKyAgICAweDgyNDE0MWMzVSwgMHgyOTk5OTliMFUsIDB4NWEyZDJkNzdVLCAweDFlMGYwZjExVSwKKyAgICAweDdiYjBiMGNiVSwgMHhhODU0NTRmY1UsIDB4NmRiYmJiZDZVLCAweDJjMTYxNjNhVSwKK307CitzdGF0aWMgY29uc3QgdTMyIFRlMVsyNTZdID0geworICAgIDB4YTVjNjYzNjNVLCAweDg0Zjg3YzdjVSwgMHg5OWVlNzc3N1UsIDB4OGRmNjdiN2JVLAorICAgIDB4MGRmZmYyZjJVLCAweGJkZDY2YjZiVSwgMHhiMWRlNmY2ZlUsIDB4NTQ5MWM1YzVVLAorICAgIDB4NTA2MDMwMzBVLCAweDAzMDIwMTAxVSwgMHhhOWNlNjc2N1UsIDB4N2Q1NjJiMmJVLAorICAgIDB4MTllN2ZlZmVVLCAweDYyYjVkN2Q3VSwgMHhlNjRkYWJhYlUsIDB4OWFlYzc2NzZVLAorICAgIDB4NDU4ZmNhY2FVLCAweDlkMWY4MjgyVSwgMHg0MDg5YzljOVUsIDB4ODdmYTdkN2RVLAorICAgIDB4MTVlZmZhZmFVLCAweGViYjI1OTU5VSwgMHhjOThlNDc0N1UsIDB4MGJmYmYwZjBVLAorICAgIDB4ZWM0MWFkYWRVLCAweDY3YjNkNGQ0VSwgMHhmZDVmYTJhMlUsIDB4ZWE0NWFmYWZVLAorICAgIDB4YmYyMzljOWNVLCAweGY3NTNhNGE0VSwgMHg5NmU0NzI3MlUsIDB4NWI5YmMwYzBVLAorICAgIDB4YzI3NWI3YjdVLCAweDFjZTFmZGZkVSwgMHhhZTNkOTM5M1UsIDB4NmE0YzI2MjZVLAorICAgIDB4NWE2YzM2MzZVLCAweDQxN2UzZjNmVSwgMHgwMmY1ZjdmN1UsIDB4NGY4M2NjY2NVLAorICAgIDB4NWM2ODM0MzRVLCAweGY0NTFhNWE1VSwgMHgzNGQxZTVlNVUsIDB4MDhmOWYxZjFVLAorICAgIDB4OTNlMjcxNzFVLCAweDczYWJkOGQ4VSwgMHg1MzYyMzEzMVUsIDB4M2YyYTE1MTVVLAorICAgIDB4MGMwODA0MDRVLCAweDUyOTVjN2M3VSwgMHg2NTQ2MjMyM1UsIDB4NWU5ZGMzYzNVLAorICAgIDB4MjgzMDE4MThVLCAweGExMzc5Njk2VSwgMHgwZjBhMDUwNVUsIDB4YjUyZjlhOWFVLAorICAgIDB4MDkwZTA3MDdVLCAweDM2MjQxMjEyVSwgMHg5YjFiODA4MFUsIDB4M2RkZmUyZTJVLAorICAgIDB4MjZjZGViZWJVLCAweDY5NGUyNzI3VSwgMHhjZDdmYjJiMlUsIDB4OWZlYTc1NzVVLAorICAgIDB4MWIxMjA5MDlVLCAweDllMWQ4MzgzVSwgMHg3NDU4MmMyY1UsIDB4MmUzNDFhMWFVLAorICAgIDB4MmQzNjFiMWJVLCAweGIyZGM2ZTZlVSwgMHhlZWI0NWE1YVUsIDB4ZmI1YmEwYTBVLAorICAgIDB4ZjZhNDUyNTJVLCAweDRkNzYzYjNiVSwgMHg2MWI3ZDZkNlUsIDB4Y2U3ZGIzYjNVLAorICAgIDB4N2I1MjI5MjlVLCAweDNlZGRlM2UzVSwgMHg3MTVlMmYyZlUsIDB4OTcxMzg0ODRVLAorICAgIDB4ZjVhNjUzNTNVLCAweDY4YjlkMWQxVSwgMHgwMDAwMDAwMFUsIDB4MmNjMWVkZWRVLAorICAgIDB4NjA0MDIwMjBVLCAweDFmZTNmY2ZjVSwgMHhjODc5YjFiMVUsIDB4ZWRiNjViNWJVLAorICAgIDB4YmVkNDZhNmFVLCAweDQ2OGRjYmNiVSwgMHhkOTY3YmViZVUsIDB4NGI3MjM5MzlVLAorICAgIDB4ZGU5NDRhNGFVLCAweGQ0OTg0YzRjVSwgMHhlOGIwNTg1OFUsIDB4NGE4NWNmY2ZVLAorICAgIDB4NmJiYmQwZDBVLCAweDJhYzVlZmVmVSwgMHhlNTRmYWFhYVUsIDB4MTZlZGZiZmJVLAorICAgIDB4YzU4NjQzNDNVLCAweGQ3OWE0ZDRkVSwgMHg1NTY2MzMzM1UsIDB4OTQxMTg1ODVVLAorICAgIDB4Y2Y4YTQ1NDVVLCAweDEwZTlmOWY5VSwgMHgwNjA0MDIwMlUsIDB4ODFmZTdmN2ZVLAorICAgIDB4ZjBhMDUwNTBVLCAweDQ0NzgzYzNjVSwgMHhiYTI1OWY5ZlUsIDB4ZTM0YmE4YThVLAorICAgIDB4ZjNhMjUxNTFVLCAweGZlNWRhM2EzVSwgMHhjMDgwNDA0MFUsIDB4OGEwNThmOGZVLAorICAgIDB4YWQzZjkyOTJVLCAweGJjMjE5ZDlkVSwgMHg0ODcwMzgzOFUsIDB4MDRmMWY1ZjVVLAorICAgIDB4ZGY2M2JjYmNVLCAweGMxNzdiNmI2VSwgMHg3NWFmZGFkYVUsIDB4NjM0MjIxMjFVLAorICAgIDB4MzAyMDEwMTBVLCAweDFhZTVmZmZmVSwgMHgwZWZkZjNmM1UsIDB4NmRiZmQyZDJVLAorICAgIDB4NGM4MWNkY2RVLCAweDE0MTgwYzBjVSwgMHgzNTI2MTMxM1UsIDB4MmZjM2VjZWNVLAorICAgIDB4ZTFiZTVmNWZVLCAweGEyMzU5Nzk3VSwgMHhjYzg4NDQ0NFUsIDB4MzkyZTE3MTdVLAorICAgIDB4NTc5M2M0YzRVLCAweGYyNTVhN2E3VSwgMHg4MmZjN2U3ZVUsIDB4NDc3YTNkM2RVLAorICAgIDB4YWNjODY0NjRVLCAweGU3YmE1ZDVkVSwgMHgyYjMyMTkxOVUsIDB4OTVlNjczNzNVLAorICAgIDB4YTBjMDYwNjBVLCAweDk4MTk4MTgxVSwgMHhkMTllNGY0ZlUsIDB4N2ZhM2RjZGNVLAorICAgIDB4NjY0NDIyMjJVLCAweDdlNTQyYTJhVSwgMHhhYjNiOTA5MFUsIDB4ODMwYjg4ODhVLAorICAgIDB4Y2E4YzQ2NDZVLCAweDI5YzdlZWVlVSwgMHhkMzZiYjhiOFUsIDB4M2MyODE0MTRVLAorICAgIDB4NzlhN2RlZGVVLCAweGUyYmM1ZTVlVSwgMHgxZDE2MGIwYlUsIDB4NzZhZGRiZGJVLAorICAgIDB4M2JkYmUwZTBVLCAweDU2NjQzMjMyVSwgMHg0ZTc0M2EzYVUsIDB4MWUxNDBhMGFVLAorICAgIDB4ZGI5MjQ5NDlVLCAweDBhMGMwNjA2VSwgMHg2YzQ4MjQyNFUsIDB4ZTRiODVjNWNVLAorICAgIDB4NWQ5ZmMyYzJVLCAweDZlYmRkM2QzVSwgMHhlZjQzYWNhY1UsIDB4YTZjNDYyNjJVLAorICAgIDB4YTgzOTkxOTFVLCAweGE0MzE5NTk1VSwgMHgzN2QzZTRlNFUsIDB4OGJmMjc5NzlVLAorICAgIDB4MzJkNWU3ZTdVLCAweDQzOGJjOGM4VSwgMHg1OTZlMzczN1UsIDB4YjdkYTZkNmRVLAorICAgIDB4OGMwMThkOGRVLCAweDY0YjFkNWQ1VSwgMHhkMjljNGU0ZVUsIDB4ZTA0OWE5YTlVLAorICAgIDB4YjRkODZjNmNVLCAweGZhYWM1NjU2VSwgMHgwN2YzZjRmNFUsIDB4MjVjZmVhZWFVLAorICAgIDB4YWZjYTY1NjVVLCAweDhlZjQ3YTdhVSwgMHhlOTQ3YWVhZVUsIDB4MTgxMDA4MDhVLAorICAgIDB4ZDU2ZmJhYmFVLCAweDg4ZjA3ODc4VSwgMHg2ZjRhMjUyNVUsIDB4NzI1YzJlMmVVLAorICAgIDB4MjQzODFjMWNVLCAweGYxNTdhNmE2VSwgMHhjNzczYjRiNFUsIDB4NTE5N2M2YzZVLAorICAgIDB4MjNjYmU4ZThVLCAweDdjYTFkZGRkVSwgMHg5Y2U4NzQ3NFUsIDB4MjEzZTFmMWZVLAorICAgIDB4ZGQ5NjRiNGJVLCAweGRjNjFiZGJkVSwgMHg4NjBkOGI4YlUsIDB4ODUwZjhhOGFVLAorICAgIDB4OTBlMDcwNzBVLCAweDQyN2MzZTNlVSwgMHhjNDcxYjViNVUsIDB4YWFjYzY2NjZVLAorICAgIDB4ZDg5MDQ4NDhVLCAweDA1MDYwMzAzVSwgMHgwMWY3ZjZmNlUsIDB4MTIxYzBlMGVVLAorICAgIDB4YTNjMjYxNjFVLCAweDVmNmEzNTM1VSwgMHhmOWFlNTc1N1UsIDB4ZDA2OWI5YjlVLAorICAgIDB4OTExNzg2ODZVLCAweDU4OTljMWMxVSwgMHgyNzNhMWQxZFUsIDB4YjkyNzllOWVVLAorICAgIDB4MzhkOWUxZTFVLCAweDEzZWJmOGY4VSwgMHhiMzJiOTg5OFUsIDB4MzMyMjExMTFVLAorICAgIDB4YmJkMjY5NjlVLCAweDcwYTlkOWQ5VSwgMHg4OTA3OGU4ZVUsIDB4YTczMzk0OTRVLAorICAgIDB4YjYyZDliOWJVLCAweDIyM2MxZTFlVSwgMHg5MjE1ODc4N1UsIDB4MjBjOWU5ZTlVLAorICAgIDB4NDk4N2NlY2VVLCAweGZmYWE1NTU1VSwgMHg3ODUwMjgyOFUsIDB4N2FhNWRmZGZVLAorICAgIDB4OGYwMzhjOGNVLCAweGY4NTlhMWExVSwgMHg4MDA5ODk4OVUsIDB4MTcxYTBkMGRVLAorICAgIDB4ZGE2NWJmYmZVLCAweDMxZDdlNmU2VSwgMHhjNjg0NDI0MlUsIDB4YjhkMDY4NjhVLAorICAgIDB4YzM4MjQxNDFVLCAweGIwMjk5OTk5VSwgMHg3NzVhMmQyZFUsIDB4MTExZTBmMGZVLAorICAgIDB4Y2I3YmIwYjBVLCAweGZjYTg1NDU0VSwgMHhkNjZkYmJiYlUsIDB4M2EyYzE2MTZVLAorfTsKK3N0YXRpYyBjb25zdCB1MzIgVGUyWzI1Nl0gPSB7CisgICAgMHg2M2E1YzY2M1UsIDB4N2M4NGY4N2NVLCAweDc3OTllZTc3VSwgMHg3YjhkZjY3YlUsCisgICAgMHhmMjBkZmZmMlUsIDB4NmJiZGQ2NmJVLCAweDZmYjFkZTZmVSwgMHhjNTU0OTFjNVUsCisgICAgMHgzMDUwNjAzMFUsIDB4MDEwMzAyMDFVLCAweDY3YTljZTY3VSwgMHgyYjdkNTYyYlUsCisgICAgMHhmZTE5ZTdmZVUsIDB4ZDc2MmI1ZDdVLCAweGFiZTY0ZGFiVSwgMHg3NjlhZWM3NlUsCisgICAgMHhjYTQ1OGZjYVUsIDB4ODI5ZDFmODJVLCAweGM5NDA4OWM5VSwgMHg3ZDg3ZmE3ZFUsCisgICAgMHhmYTE1ZWZmYVUsIDB4NTllYmIyNTlVLCAweDQ3Yzk4ZTQ3VSwgMHhmMDBiZmJmMFUsCisgICAgMHhhZGVjNDFhZFUsIDB4ZDQ2N2IzZDRVLCAweGEyZmQ1ZmEyVSwgMHhhZmVhNDVhZlUsCisgICAgMHg5Y2JmMjM5Y1UsIDB4YTRmNzUzYTRVLCAweDcyOTZlNDcyVSwgMHhjMDViOWJjMFUsCisgICAgMHhiN2MyNzViN1UsIDB4ZmQxY2UxZmRVLCAweDkzYWUzZDkzVSwgMHgyNjZhNGMyNlUsCisgICAgMHgzNjVhNmMzNlUsIDB4M2Y0MTdlM2ZVLCAweGY3MDJmNWY3VSwgMHhjYzRmODNjY1UsCisgICAgMHgzNDVjNjgzNFUsIDB4YTVmNDUxYTVVLCAweGU1MzRkMWU1VSwgMHhmMTA4ZjlmMVUsCisgICAgMHg3MTkzZTI3MVUsIDB4ZDg3M2FiZDhVLCAweDMxNTM2MjMxVSwgMHgxNTNmMmExNVUsCisgICAgMHgwNDBjMDgwNFUsIDB4Yzc1Mjk1YzdVLCAweDIzNjU0NjIzVSwgMHhjMzVlOWRjM1UsCisgICAgMHgxODI4MzAxOFUsIDB4OTZhMTM3OTZVLCAweDA1MGYwYTA1VSwgMHg5YWI1MmY5YVUsCisgICAgMHgwNzA5MGUwN1UsIDB4MTIzNjI0MTJVLCAweDgwOWIxYjgwVSwgMHhlMjNkZGZlMlUsCisgICAgMHhlYjI2Y2RlYlUsIDB4Mjc2OTRlMjdVLCAweGIyY2Q3ZmIyVSwgMHg3NTlmZWE3NVUsCisgICAgMHgwOTFiMTIwOVUsIDB4ODM5ZTFkODNVLCAweDJjNzQ1ODJjVSwgMHgxYTJlMzQxYVUsCisgICAgMHgxYjJkMzYxYlUsIDB4NmViMmRjNmVVLCAweDVhZWViNDVhVSwgMHhhMGZiNWJhMFUsCisgICAgMHg1MmY2YTQ1MlUsIDB4M2I0ZDc2M2JVLCAweGQ2NjFiN2Q2VSwgMHhiM2NlN2RiM1UsCisgICAgMHgyOTdiNTIyOVUsIDB4ZTMzZWRkZTNVLCAweDJmNzE1ZTJmVSwgMHg4NDk3MTM4NFUsCisgICAgMHg1M2Y1YTY1M1UsIDB4ZDE2OGI5ZDFVLCAweDAwMDAwMDAwVSwgMHhlZDJjYzFlZFUsCisgICAgMHgyMDYwNDAyMFUsIDB4ZmMxZmUzZmNVLCAweGIxYzg3OWIxVSwgMHg1YmVkYjY1YlUsCisgICAgMHg2YWJlZDQ2YVUsIDB4Y2I0NjhkY2JVLCAweGJlZDk2N2JlVSwgMHgzOTRiNzIzOVUsCisgICAgMHg0YWRlOTQ0YVUsIDB4NGNkNDk4NGNVLCAweDU4ZThiMDU4VSwgMHhjZjRhODVjZlUsCisgICAgMHhkMDZiYmJkMFUsIDB4ZWYyYWM1ZWZVLCAweGFhZTU0ZmFhVSwgMHhmYjE2ZWRmYlUsCisgICAgMHg0M2M1ODY0M1UsIDB4NGRkNzlhNGRVLCAweDMzNTU2NjMzVSwgMHg4NTk0MTE4NVUsCisgICAgMHg0NWNmOGE0NVUsIDB4ZjkxMGU5ZjlVLCAweDAyMDYwNDAyVSwgMHg3ZjgxZmU3ZlUsCisgICAgMHg1MGYwYTA1MFUsIDB4M2M0NDc4M2NVLCAweDlmYmEyNTlmVSwgMHhhOGUzNGJhOFUsCisgICAgMHg1MWYzYTI1MVUsIDB4YTNmZTVkYTNVLCAweDQwYzA4MDQwVSwgMHg4ZjhhMDU4ZlUsCisgICAgMHg5MmFkM2Y5MlUsIDB4OWRiYzIxOWRVLCAweDM4NDg3MDM4VSwgMHhmNTA0ZjFmNVUsCisgICAgMHhiY2RmNjNiY1UsIDB4YjZjMTc3YjZVLCAweGRhNzVhZmRhVSwgMHgyMTYzNDIyMVUsCisgICAgMHgxMDMwMjAxMFUsIDB4ZmYxYWU1ZmZVLCAweGYzMGVmZGYzVSwgMHhkMjZkYmZkMlUsCisgICAgMHhjZDRjODFjZFUsIDB4MGMxNDE4MGNVLCAweDEzMzUyNjEzVSwgMHhlYzJmYzNlY1UsCisgICAgMHg1ZmUxYmU1ZlUsIDB4OTdhMjM1OTdVLCAweDQ0Y2M4ODQ0VSwgMHgxNzM5MmUxN1UsCisgICAgMHhjNDU3OTNjNFUsIDB4YTdmMjU1YTdVLCAweDdlODJmYzdlVSwgMHgzZDQ3N2EzZFUsCisgICAgMHg2NGFjYzg2NFUsIDB4NWRlN2JhNWRVLCAweDE5MmIzMjE5VSwgMHg3Mzk1ZTY3M1UsCisgICAgMHg2MGEwYzA2MFUsIDB4ODE5ODE5ODFVLCAweDRmZDE5ZTRmVSwgMHhkYzdmYTNkY1UsCisgICAgMHgyMjY2NDQyMlUsIDB4MmE3ZTU0MmFVLCAweDkwYWIzYjkwVSwgMHg4ODgzMGI4OFUsCisgICAgMHg0NmNhOGM0NlUsIDB4ZWUyOWM3ZWVVLCAweGI4ZDM2YmI4VSwgMHgxNDNjMjgxNFUsCisgICAgMHhkZTc5YTdkZVUsIDB4NWVlMmJjNWVVLCAweDBiMWQxNjBiVSwgMHhkYjc2YWRkYlUsCisgICAgMHhlMDNiZGJlMFUsIDB4MzI1NjY0MzJVLCAweDNhNGU3NDNhVSwgMHgwYTFlMTQwYVUsCisgICAgMHg0OWRiOTI0OVUsIDB4MDYwYTBjMDZVLCAweDI0NmM0ODI0VSwgMHg1Y2U0Yjg1Y1UsCisgICAgMHhjMjVkOWZjMlUsIDB4ZDM2ZWJkZDNVLCAweGFjZWY0M2FjVSwgMHg2MmE2YzQ2MlUsCisgICAgMHg5MWE4Mzk5MVUsIDB4OTVhNDMxOTVVLCAweGU0MzdkM2U0VSwgMHg3OThiZjI3OVUsCisgICAgMHhlNzMyZDVlN1UsIDB4Yzg0MzhiYzhVLCAweDM3NTk2ZTM3VSwgMHg2ZGI3ZGE2ZFUsCisgICAgMHg4ZDhjMDE4ZFUsIDB4ZDU2NGIxZDVVLCAweDRlZDI5YzRlVSwgMHhhOWUwNDlhOVUsCisgICAgMHg2Y2I0ZDg2Y1UsIDB4NTZmYWFjNTZVLCAweGY0MDdmM2Y0VSwgMHhlYTI1Y2ZlYVUsCisgICAgMHg2NWFmY2E2NVUsIDB4N2E4ZWY0N2FVLCAweGFlZTk0N2FlVSwgMHgwODE4MTAwOFUsCisgICAgMHhiYWQ1NmZiYVUsIDB4Nzg4OGYwNzhVLCAweDI1NmY0YTI1VSwgMHgyZTcyNWMyZVUsCisgICAgMHgxYzI0MzgxY1UsIDB4YTZmMTU3YTZVLCAweGI0Yzc3M2I0VSwgMHhjNjUxOTdjNlUsCisgICAgMHhlODIzY2JlOFUsIDB4ZGQ3Y2ExZGRVLCAweDc0OWNlODc0VSwgMHgxZjIxM2UxZlUsCisgICAgMHg0YmRkOTY0YlUsIDB4YmRkYzYxYmRVLCAweDhiODYwZDhiVSwgMHg4YTg1MGY4YVUsCisgICAgMHg3MDkwZTA3MFUsIDB4M2U0MjdjM2VVLCAweGI1YzQ3MWI1VSwgMHg2NmFhY2M2NlUsCisgICAgMHg0OGQ4OTA0OFUsIDB4MDMwNTA2MDNVLCAweGY2MDFmN2Y2VSwgMHgwZTEyMWMwZVUsCisgICAgMHg2MWEzYzI2MVUsIDB4MzU1ZjZhMzVVLCAweDU3ZjlhZTU3VSwgMHhiOWQwNjliOVUsCisgICAgMHg4NjkxMTc4NlUsIDB4YzE1ODk5YzFVLCAweDFkMjczYTFkVSwgMHg5ZWI5Mjc5ZVUsCisgICAgMHhlMTM4ZDllMVUsIDB4ZjgxM2ViZjhVLCAweDk4YjMyYjk4VSwgMHgxMTMzMjIxMVUsCisgICAgMHg2OWJiZDI2OVUsIDB4ZDk3MGE5ZDlVLCAweDhlODkwNzhlVSwgMHg5NGE3MzM5NFUsCisgICAgMHg5YmI2MmQ5YlUsIDB4MWUyMjNjMWVVLCAweDg3OTIxNTg3VSwgMHhlOTIwYzllOVUsCisgICAgMHhjZTQ5ODdjZVUsIDB4NTVmZmFhNTVVLCAweDI4Nzg1MDI4VSwgMHhkZjdhYTVkZlUsCisgICAgMHg4YzhmMDM4Y1UsIDB4YTFmODU5YTFVLCAweDg5ODAwOTg5VSwgMHgwZDE3MWEwZFUsCisgICAgMHhiZmRhNjViZlUsIDB4ZTYzMWQ3ZTZVLCAweDQyYzY4NDQyVSwgMHg2OGI4ZDA2OFUsCisgICAgMHg0MWMzODI0MVUsIDB4OTliMDI5OTlVLCAweDJkNzc1YTJkVSwgMHgwZjExMWUwZlUsCisgICAgMHhiMGNiN2JiMFUsIDB4NTRmY2E4NTRVLCAweGJiZDY2ZGJiVSwgMHgxNjNhMmMxNlUsCit9Oworc3RhdGljIGNvbnN0IHUzMiBUZTNbMjU2XSA9IHsKKyAgICAweDYzNjNhNWM2VSwgMHg3YzdjODRmOFUsIDB4Nzc3Nzk5ZWVVLCAweDdiN2I4ZGY2VSwKKyAgICAweGYyZjIwZGZmVSwgMHg2YjZiYmRkNlUsIDB4NmY2ZmIxZGVVLCAweGM1YzU1NDkxVSwKKyAgICAweDMwMzA1MDYwVSwgMHgwMTAxMDMwMlUsIDB4Njc2N2E5Y2VVLCAweDJiMmI3ZDU2VSwKKyAgICAweGZlZmUxOWU3VSwgMHhkN2Q3NjJiNVUsIDB4YWJhYmU2NGRVLCAweDc2NzY5YWVjVSwKKyAgICAweGNhY2E0NThmVSwgMHg4MjgyOWQxZlUsIDB4YzljOTQwODlVLCAweDdkN2Q4N2ZhVSwKKyAgICAweGZhZmExNWVmVSwgMHg1OTU5ZWJiMlUsIDB4NDc0N2M5OGVVLCAweGYwZjAwYmZiVSwKKyAgICAweGFkYWRlYzQxVSwgMHhkNGQ0NjdiM1UsIDB4YTJhMmZkNWZVLCAweGFmYWZlYTQ1VSwKKyAgICAweDljOWNiZjIzVSwgMHhhNGE0Zjc1M1UsIDB4NzI3Mjk2ZTRVLCAweGMwYzA1YjliVSwKKyAgICAweGI3YjdjMjc1VSwgMHhmZGZkMWNlMVUsIDB4OTM5M2FlM2RVLCAweDI2MjY2YTRjVSwKKyAgICAweDM2MzY1YTZjVSwgMHgzZjNmNDE3ZVUsIDB4ZjdmNzAyZjVVLCAweGNjY2M0ZjgzVSwKKyAgICAweDM0MzQ1YzY4VSwgMHhhNWE1ZjQ1MVUsIDB4ZTVlNTM0ZDFVLCAweGYxZjEwOGY5VSwKKyAgICAweDcxNzE5M2UyVSwgMHhkOGQ4NzNhYlUsIDB4MzEzMTUzNjJVLCAweDE1MTUzZjJhVSwKKyAgICAweDA0MDQwYzA4VSwgMHhjN2M3NTI5NVUsIDB4MjMyMzY1NDZVLCAweGMzYzM1ZTlkVSwKKyAgICAweDE4MTgyODMwVSwgMHg5Njk2YTEzN1UsIDB4MDUwNTBmMGFVLCAweDlhOWFiNTJmVSwKKyAgICAweDA3MDcwOTBlVSwgMHgxMjEyMzYyNFUsIDB4ODA4MDliMWJVLCAweGUyZTIzZGRmVSwKKyAgICAweGViZWIyNmNkVSwgMHgyNzI3Njk0ZVUsIDB4YjJiMmNkN2ZVLCAweDc1NzU5ZmVhVSwKKyAgICAweDA5MDkxYjEyVSwgMHg4MzgzOWUxZFUsIDB4MmMyYzc0NThVLCAweDFhMWEyZTM0VSwKKyAgICAweDFiMWIyZDM2VSwgMHg2ZTZlYjJkY1UsIDB4NWE1YWVlYjRVLCAweGEwYTBmYjViVSwKKyAgICAweDUyNTJmNmE0VSwgMHgzYjNiNGQ3NlUsIDB4ZDZkNjYxYjdVLCAweGIzYjNjZTdkVSwKKyAgICAweDI5Mjk3YjUyVSwgMHhlM2UzM2VkZFUsIDB4MmYyZjcxNWVVLCAweDg0ODQ5NzEzVSwKKyAgICAweDUzNTNmNWE2VSwgMHhkMWQxNjhiOVUsIDB4MDAwMDAwMDBVLCAweGVkZWQyY2MxVSwKKyAgICAweDIwMjA2MDQwVSwgMHhmY2ZjMWZlM1UsIDB4YjFiMWM4NzlVLCAweDViNWJlZGI2VSwKKyAgICAweDZhNmFiZWQ0VSwgMHhjYmNiNDY4ZFUsIDB4YmViZWQ5NjdVLCAweDM5Mzk0YjcyVSwKKyAgICAweDRhNGFkZTk0VSwgMHg0YzRjZDQ5OFUsIDB4NTg1OGU4YjBVLCAweGNmY2Y0YTg1VSwKKyAgICAweGQwZDA2YmJiVSwgMHhlZmVmMmFjNVUsIDB4YWFhYWU1NGZVLCAweGZiZmIxNmVkVSwKKyAgICAweDQzNDNjNTg2VSwgMHg0ZDRkZDc5YVUsIDB4MzMzMzU1NjZVLCAweDg1ODU5NDExVSwKKyAgICAweDQ1NDVjZjhhVSwgMHhmOWY5MTBlOVUsIDB4MDIwMjA2MDRVLCAweDdmN2Y4MWZlVSwKKyAgICAweDUwNTBmMGEwVSwgMHgzYzNjNDQ3OFUsIDB4OWY5ZmJhMjVVLCAweGE4YThlMzRiVSwKKyAgICAweDUxNTFmM2EyVSwgMHhhM2EzZmU1ZFUsIDB4NDA0MGMwODBVLCAweDhmOGY4YTA1VSwKKyAgICAweDkyOTJhZDNmVSwgMHg5ZDlkYmMyMVUsIDB4MzgzODQ4NzBVLCAweGY1ZjUwNGYxVSwKKyAgICAweGJjYmNkZjYzVSwgMHhiNmI2YzE3N1UsIDB4ZGFkYTc1YWZVLCAweDIxMjE2MzQyVSwKKyAgICAweDEwMTAzMDIwVSwgMHhmZmZmMWFlNVUsIDB4ZjNmMzBlZmRVLCAweGQyZDI2ZGJmVSwKKyAgICAweGNkY2Q0YzgxVSwgMHgwYzBjMTQxOFUsIDB4MTMxMzM1MjZVLCAweGVjZWMyZmMzVSwKKyAgICAweDVmNWZlMWJlVSwgMHg5Nzk3YTIzNVUsIDB4NDQ0NGNjODhVLCAweDE3MTczOTJlVSwKKyAgICAweGM0YzQ1NzkzVSwgMHhhN2E3ZjI1NVUsIDB4N2U3ZTgyZmNVLCAweDNkM2Q0NzdhVSwKKyAgICAweDY0NjRhY2M4VSwgMHg1ZDVkZTdiYVUsIDB4MTkxOTJiMzJVLCAweDczNzM5NWU2VSwKKyAgICAweDYwNjBhMGMwVSwgMHg4MTgxOTgxOVUsIDB4NGY0ZmQxOWVVLCAweGRjZGM3ZmEzVSwKKyAgICAweDIyMjI2NjQ0VSwgMHgyYTJhN2U1NFUsIDB4OTA5MGFiM2JVLCAweDg4ODg4MzBiVSwKKyAgICAweDQ2NDZjYThjVSwgMHhlZWVlMjljN1UsIDB4YjhiOGQzNmJVLCAweDE0MTQzYzI4VSwKKyAgICAweGRlZGU3OWE3VSwgMHg1ZTVlZTJiY1UsIDB4MGIwYjFkMTZVLCAweGRiZGI3NmFkVSwKKyAgICAweGUwZTAzYmRiVSwgMHgzMjMyNTY2NFUsIDB4M2EzYTRlNzRVLCAweDBhMGExZTE0VSwKKyAgICAweDQ5NDlkYjkyVSwgMHgwNjA2MGEwY1UsIDB4MjQyNDZjNDhVLCAweDVjNWNlNGI4VSwKKyAgICAweGMyYzI1ZDlmVSwgMHhkM2QzNmViZFUsIDB4YWNhY2VmNDNVLCAweDYyNjJhNmM0VSwKKyAgICAweDkxOTFhODM5VSwgMHg5NTk1YTQzMVUsIDB4ZTRlNDM3ZDNVLCAweDc5Nzk4YmYyVSwKKyAgICAweGU3ZTczMmQ1VSwgMHhjOGM4NDM4YlUsIDB4MzczNzU5NmVVLCAweDZkNmRiN2RhVSwKKyAgICAweDhkOGQ4YzAxVSwgMHhkNWQ1NjRiMVUsIDB4NGU0ZWQyOWNVLCAweGE5YTllMDQ5VSwKKyAgICAweDZjNmNiNGQ4VSwgMHg1NjU2ZmFhY1UsIDB4ZjRmNDA3ZjNVLCAweGVhZWEyNWNmVSwKKyAgICAweDY1NjVhZmNhVSwgMHg3YTdhOGVmNFUsIDB4YWVhZWU5NDdVLCAweDA4MDgxODEwVSwKKyAgICAweGJhYmFkNTZmVSwgMHg3ODc4ODhmMFUsIDB4MjUyNTZmNGFVLCAweDJlMmU3MjVjVSwKKyAgICAweDFjMWMyNDM4VSwgMHhhNmE2ZjE1N1UsIDB4YjRiNGM3NzNVLCAweGM2YzY1MTk3VSwKKyAgICAweGU4ZTgyM2NiVSwgMHhkZGRkN2NhMVUsIDB4NzQ3NDljZThVLCAweDFmMWYyMTNlVSwKKyAgICAweDRiNGJkZDk2VSwgMHhiZGJkZGM2MVUsIDB4OGI4Yjg2MGRVLCAweDhhOGE4NTBmVSwKKyAgICAweDcwNzA5MGUwVSwgMHgzZTNlNDI3Y1UsIDB4YjViNWM0NzFVLCAweDY2NjZhYWNjVSwKKyAgICAweDQ4NDhkODkwVSwgMHgwMzAzMDUwNlUsIDB4ZjZmNjAxZjdVLCAweDBlMGUxMjFjVSwKKyAgICAweDYxNjFhM2MyVSwgMHgzNTM1NWY2YVUsIDB4NTc1N2Y5YWVVLCAweGI5YjlkMDY5VSwKKyAgICAweDg2ODY5MTE3VSwgMHhjMWMxNTg5OVUsIDB4MWQxZDI3M2FVLCAweDllOWViOTI3VSwKKyAgICAweGUxZTEzOGQ5VSwgMHhmOGY4MTNlYlUsIDB4OTg5OGIzMmJVLCAweDExMTEzMzIyVSwKKyAgICAweDY5NjliYmQyVSwgMHhkOWQ5NzBhOVUsIDB4OGU4ZTg5MDdVLCAweDk0OTRhNzMzVSwKKyAgICAweDliOWJiNjJkVSwgMHgxZTFlMjIzY1UsIDB4ODc4NzkyMTVVLCAweGU5ZTkyMGM5VSwKKyAgICAweGNlY2U0OTg3VSwgMHg1NTU1ZmZhYVUsIDB4MjgyODc4NTBVLCAweGRmZGY3YWE1VSwKKyAgICAweDhjOGM4ZjAzVSwgMHhhMWExZjg1OVUsIDB4ODk4OTgwMDlVLCAweDBkMGQxNzFhVSwKKyAgICAweGJmYmZkYTY1VSwgMHhlNmU2MzFkN1UsIDB4NDI0MmM2ODRVLCAweDY4NjhiOGQwVSwKKyAgICAweDQxNDFjMzgyVSwgMHg5OTk5YjAyOVUsIDB4MmQyZDc3NWFVLCAweDBmMGYxMTFlVSwKKyAgICAweGIwYjBjYjdiVSwgMHg1NDU0ZmNhOFUsIDB4YmJiYmQ2NmRVLCAweDE2MTYzYTJjVSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgVGQwWzI1Nl0gPSB7CisgICAgMHg1MWY0YTc1MFUsIDB4N2U0MTY1NTNVLCAweDFhMTdhNGMzVSwgMHgzYTI3NWU5NlUsCisgICAgMHgzYmFiNmJjYlUsIDB4MWY5ZDQ1ZjFVLCAweGFjZmE1OGFiVSwgMHg0YmUzMDM5M1UsCisgICAgMHgyMDMwZmE1NVUsIDB4YWQ3NjZkZjZVLCAweDg4Y2M3NjkxVSwgMHhmNTAyNGMyNVUsCisgICAgMHg0ZmU1ZDdmY1UsIDB4YzUyYWNiZDdVLCAweDI2MzU0NDgwVSwgMHhiNTYyYTM4ZlUsCisgICAgMHhkZWIxNWE0OVUsIDB4MjViYTFiNjdVLCAweDQ1ZWEwZTk4VSwgMHg1ZGZlYzBlMVUsCisgICAgMHhjMzJmNzUwMlUsIDB4ODE0Y2YwMTJVLCAweDhkNDY5N2EzVSwgMHg2YmQzZjljNlUsCisgICAgMHgwMzhmNWZlN1UsIDB4MTU5MjljOTVVLCAweGJmNmQ3YWViVSwgMHg5NTUyNTlkYVUsCisgICAgMHhkNGJlODMyZFUsIDB4NTg3NDIxZDNVLCAweDQ5ZTA2OTI5VSwgMHg4ZWM5Yzg0NFUsCisgICAgMHg3NWMyODk2YVUsIDB4ZjQ4ZTc5NzhVLCAweDk5NTgzZTZiVSwgMHgyN2I5NzFkZFUsCisgICAgMHhiZWUxNGZiNlUsIDB4ZjA4OGFkMTdVLCAweGM5MjBhYzY2VSwgMHg3ZGNlM2FiNFUsCisgICAgMHg2M2RmNGExOFUsIDB4ZTUxYTMxODJVLCAweDk3NTEzMzYwVSwgMHg2MjUzN2Y0NVUsCisgICAgMHhiMTY0NzdlMFUsIDB4YmI2YmFlODRVLCAweGZlODFhMDFjVSwgMHhmOTA4MmI5NFUsCisgICAgMHg3MDQ4Njg1OFUsIDB4OGY0NWZkMTlVLCAweDk0ZGU2Yzg3VSwgMHg1MjdiZjhiN1UsCisgICAgMHhhYjczZDMyM1UsIDB4NzI0YjAyZTJVLCAweGUzMWY4ZjU3VSwgMHg2NjU1YWIyYVUsCisgICAgMHhiMmViMjgwN1UsIDB4MmZiNWMyMDNVLCAweDg2YzU3YjlhVSwgMHhkMzM3MDhhNVUsCisgICAgMHgzMDI4ODdmMlUsIDB4MjNiZmE1YjJVLCAweDAyMDM2YWJhVSwgMHhlZDE2ODI1Y1UsCisgICAgMHg4YWNmMWMyYlUsIDB4YTc3OWI0OTJVLCAweGYzMDdmMmYwVSwgMHg0ZTY5ZTJhMVUsCisgICAgMHg2NWRhZjRjZFUsIDB4MDYwNWJlZDVVLCAweGQxMzQ2MjFmVSwgMHhjNGE2ZmU4YVUsCisgICAgMHgzNDJlNTM5ZFUsIDB4YTJmMzU1YTBVLCAweDA1OGFlMTMyVSwgMHhhNGY2ZWI3NVUsCisgICAgMHgwYjgzZWMzOVUsIDB4NDA2MGVmYWFVLCAweDVlNzE5ZjA2VSwgMHhiZDZlMTA1MVUsCisgICAgMHgzZTIxOGFmOVUsIDB4OTZkZDA2M2RVLCAweGRkM2UwNWFlVSwgMHg0ZGU2YmQ0NlUsCisgICAgMHg5MTU0OGRiNVUsIDB4NzFjNDVkMDVVLCAweDA0MDZkNDZmVSwgMHg2MDUwMTVmZlUsCisgICAgMHgxOTk4ZmIyNFUsIDB4ZDZiZGU5OTdVLCAweDg5NDA0M2NjVSwgMHg2N2Q5OWU3N1UsCisgICAgMHhiMGU4NDJiZFUsIDB4MDc4OThiODhVLCAweGU3MTk1YjM4VSwgMHg3OWM4ZWVkYlUsCisgICAgMHhhMTdjMGE0N1UsIDB4N2M0MjBmZTlVLCAweGY4ODQxZWM5VSwgMHgwMDAwMDAwMFUsCisgICAgMHgwOTgwODY4M1UsIDB4MzIyYmVkNDhVLCAweDFlMTE3MGFjVSwgMHg2YzVhNzI0ZVUsCisgICAgMHhmZDBlZmZmYlUsIDB4MGY4NTM4NTZVLCAweDNkYWVkNTFlVSwgMHgzNjJkMzkyN1UsCisgICAgMHgwYTBmZDk2NFUsIDB4Njg1Y2E2MjFVLCAweDliNWI1NGQxVSwgMHgyNDM2MmUzYVUsCisgICAgMHgwYzBhNjdiMVUsIDB4OTM1N2U3MGZVLCAweGI0ZWU5NmQyVSwgMHgxYjliOTE5ZVUsCisgICAgMHg4MGMwYzU0ZlUsIDB4NjFkYzIwYTJVLCAweDVhNzc0YjY5VSwgMHgxYzEyMWExNlUsCisgICAgMHhlMjkzYmEwYVUsIDB4YzBhMDJhZTVVLCAweDNjMjJlMDQzVSwgMHgxMjFiMTcxZFUsCisgICAgMHgwZTA5MGQwYlUsIDB4ZjI4YmM3YWRVLCAweDJkYjZhOGI5VSwgMHgxNDFlYTljOFUsCisgICAgMHg1N2YxMTk4NVUsIDB4YWY3NTA3NGNVLCAweGVlOTlkZGJiVSwgMHhhMzdmNjBmZFUsCisgICAgMHhmNzAxMjY5ZlUsIDB4NWM3MmY1YmNVLCAweDQ0NjYzYmM1VSwgMHg1YmZiN2UzNFUsCisgICAgMHg4YjQzMjk3NlUsIDB4Y2IyM2M2ZGNVLCAweGI2ZWRmYzY4VSwgMHhiOGU0ZjE2M1UsCisgICAgMHhkNzMxZGNjYVUsIDB4NDI2Mzg1MTBVLCAweDEzOTcyMjQwVSwgMHg4NGM2MTEyMFUsCisgICAgMHg4NTRhMjQ3ZFUsIDB4ZDJiYjNkZjhVLCAweGFlZjkzMjExVSwgMHhjNzI5YTE2ZFUsCisgICAgMHgxZDllMmY0YlUsIDB4ZGNiMjMwZjNVLCAweDBkODY1MmVjVSwgMHg3N2MxZTNkMFUsCisgICAgMHgyYmIzMTY2Y1UsIDB4YTk3MGI5OTlVLCAweDExOTQ0OGZhVSwgMHg0N2U5NjQyMlUsCisgICAgMHhhOGZjOGNjNFUsIDB4YTBmMDNmMWFVLCAweDU2N2QyY2Q4VSwgMHgyMjMzOTBlZlUsCisgICAgMHg4NzQ5NGVjN1UsIDB4ZDkzOGQxYzFVLCAweDhjY2FhMmZlVSwgMHg5OGQ0MGIzNlUsCisgICAgMHhhNmY1ODFjZlUsIDB4YTU3YWRlMjhVLCAweGRhYjc4ZTI2VSwgMHgzZmFkYmZhNFUsCisgICAgMHgyYzNhOWRlNFUsIDB4NTA3ODkyMGRVLCAweDZhNWZjYzliVSwgMHg1NDdlNDY2MlUsCisgICAgMHhmNjhkMTNjMlUsIDB4OTBkOGI4ZThVLCAweDJlMzlmNzVlVSwgMHg4MmMzYWZmNVUsCisgICAgMHg5ZjVkODBiZVUsIDB4NjlkMDkzN2NVLCAweDZmZDUyZGE5VSwgMHhjZjI1MTJiM1UsCisgICAgMHhjOGFjOTkzYlUsIDB4MTAxODdkYTdVLCAweGU4OWM2MzZlVSwgMHhkYjNiYmI3YlUsCisgICAgMHhjZDI2NzgwOVUsIDB4NmU1OTE4ZjRVLCAweGVjOWFiNzAxVSwgMHg4MzRmOWFhOFUsCisgICAgMHhlNjk1NmU2NVUsIDB4YWFmZmU2N2VVLCAweDIxYmNjZjA4VSwgMHhlZjE1ZThlNlUsCisgICAgMHhiYWU3OWJkOVUsIDB4NGE2ZjM2Y2VVLCAweGVhOWYwOWQ0VSwgMHgyOWIwN2NkNlUsCisgICAgMHgzMWE0YjJhZlUsIDB4MmEzZjIzMzFVLCAweGM2YTU5NDMwVSwgMHgzNWEyNjZjMFUsCisgICAgMHg3NDRlYmMzN1UsIDB4ZmM4MmNhYTZVLCAweGUwOTBkMGIwVSwgMHgzM2E3ZDgxNVUsCisgICAgMHhmMTA0OTg0YVUsIDB4NDFlY2RhZjdVLCAweDdmY2Q1MDBlVSwgMHgxNzkxZjYyZlUsCisgICAgMHg3NjRkZDY4ZFUsIDB4NDNlZmIwNGRVLCAweGNjYWE0ZDU0VSwgMHhlNDk2MDRkZlUsCisgICAgMHg5ZWQxYjVlM1UsIDB4NGM2YTg4MWJVLCAweGMxMmMxZmI4VSwgMHg0NjY1NTE3ZlUsCisgICAgMHg5ZDVlZWEwNFUsIDB4MDE4YzM1NWRVLCAweGZhODc3NDczVSwgMHhmYjBiNDEyZVUsCisgICAgMHhiMzY3MWQ1YVUsIDB4OTJkYmQyNTJVLCAweGU5MTA1NjMzVSwgMHg2ZGQ2NDcxM1UsCisgICAgMHg5YWQ3NjE4Y1UsIDB4MzdhMTBjN2FVLCAweDU5ZjgxNDhlVSwgMHhlYjEzM2M4OVUsCisgICAgMHhjZWE5MjdlZVUsIDB4Yjc2MWM5MzVVLCAweGUxMWNlNWVkVSwgMHg3YTQ3YjEzY1UsCisgICAgMHg5Y2QyZGY1OVUsIDB4NTVmMjczM2ZVLCAweDE4MTRjZTc5VSwgMHg3M2M3MzdiZlUsCisgICAgMHg1M2Y3Y2RlYVUsIDB4NWZmZGFhNWJVLCAweGRmM2Q2ZjE0VSwgMHg3ODQ0ZGI4NlUsCisgICAgMHhjYWFmZjM4MVUsIDB4Yjk2OGM0M2VVLCAweDM4MjQzNDJjVSwgMHhjMmEzNDA1ZlUsCisgICAgMHgxNjFkYzM3MlUsIDB4YmNlMjI1MGNVLCAweDI4M2M0OThiVSwgMHhmZjBkOTU0MVUsCisgICAgMHgzOWE4MDE3MVUsIDB4MDgwY2IzZGVVLCAweGQ4YjRlNDljVSwgMHg2NDU2YzE5MFUsCisgICAgMHg3YmNiODQ2MVUsIDB4ZDUzMmI2NzBVLCAweDQ4NmM1Yzc0VSwgMHhkMGI4NTc0MlUsCit9Oworc3RhdGljIGNvbnN0IHUzMiBUZDFbMjU2XSA9IHsKKyAgICAweDUwNTFmNGE3VSwgMHg1MzdlNDE2NVUsIDB4YzMxYTE3YTRVLCAweDk2M2EyNzVlVSwKKyAgICAweGNiM2JhYjZiVSwgMHhmMTFmOWQ0NVUsIDB4YWJhY2ZhNThVLCAweDkzNGJlMzAzVSwKKyAgICAweDU1MjAzMGZhVSwgMHhmNmFkNzY2ZFUsIDB4OTE4OGNjNzZVLCAweDI1ZjUwMjRjVSwKKyAgICAweGZjNGZlNWQ3VSwgMHhkN2M1MmFjYlUsIDB4ODAyNjM1NDRVLCAweDhmYjU2MmEzVSwKKyAgICAweDQ5ZGViMTVhVSwgMHg2NzI1YmExYlUsIDB4OTg0NWVhMGVVLCAweGUxNWRmZWMwVSwKKyAgICAweDAyYzMyZjc1VSwgMHgxMjgxNGNmMFUsIDB4YTM4ZDQ2OTdVLCAweGM2NmJkM2Y5VSwKKyAgICAweGU3MDM4ZjVmVSwgMHg5NTE1OTI5Y1UsIDB4ZWJiZjZkN2FVLCAweGRhOTU1MjU5VSwKKyAgICAweDJkZDRiZTgzVSwgMHhkMzU4NzQyMVUsIDB4Mjk0OWUwNjlVLCAweDQ0OGVjOWM4VSwKKyAgICAweDZhNzVjMjg5VSwgMHg3OGY0OGU3OVUsIDB4NmI5OTU4M2VVLCAweGRkMjdiOTcxVSwKKyAgICAweGI2YmVlMTRmVSwgMHgxN2YwODhhZFUsIDB4NjZjOTIwYWNVLCAweGI0N2RjZTNhVSwKKyAgICAweDE4NjNkZjRhVSwgMHg4MmU1MWEzMVUsIDB4NjA5NzUxMzNVLCAweDQ1NjI1MzdmVSwKKyAgICAweGUwYjE2NDc3VSwgMHg4NGJiNmJhZVUsIDB4MWNmZTgxYTBVLCAweDk0ZjkwODJiVSwKKyAgICAweDU4NzA0ODY4VSwgMHgxOThmNDVmZFUsIDB4ODc5NGRlNmNVLCAweGI3NTI3YmY4VSwKKyAgICAweDIzYWI3M2QzVSwgMHhlMjcyNGIwMlUsIDB4NTdlMzFmOGZVLCAweDJhNjY1NWFiVSwKKyAgICAweDA3YjJlYjI4VSwgMHgwMzJmYjVjMlUsIDB4OWE4NmM1N2JVLCAweGE1ZDMzNzA4VSwKKyAgICAweGYyMzAyODg3VSwgMHhiMjIzYmZhNVUsIDB4YmEwMjAzNmFVLCAweDVjZWQxNjgyVSwKKyAgICAweDJiOGFjZjFjVSwgMHg5MmE3NzliNFUsIDB4ZjBmMzA3ZjJVLCAweGExNGU2OWUyVSwKKyAgICAweGNkNjVkYWY0VSwgMHhkNTA2MDViZVUsIDB4MWZkMTM0NjJVLCAweDhhYzRhNmZlVSwKKyAgICAweDlkMzQyZTUzVSwgMHhhMGEyZjM1NVUsIDB4MzIwNThhZTFVLCAweDc1YTRmNmViVSwKKyAgICAweDM5MGI4M2VjVSwgMHhhYTQwNjBlZlUsIDB4MDY1ZTcxOWZVLCAweDUxYmQ2ZTEwVSwKKyAgICAweGY5M2UyMThhVSwgMHgzZDk2ZGQwNlUsIDB4YWVkZDNlMDVVLCAweDQ2NGRlNmJkVSwKKyAgICAweGI1OTE1NDhkVSwgMHgwNTcxYzQ1ZFUsIDB4NmYwNDA2ZDRVLCAweGZmNjA1MDE1VSwKKyAgICAweDI0MTk5OGZiVSwgMHg5N2Q2YmRlOVUsIDB4Y2M4OTQwNDNVLCAweDc3NjdkOTllVSwKKyAgICAweGJkYjBlODQyVSwgMHg4ODA3ODk4YlUsIDB4MzhlNzE5NWJVLCAweGRiNzljOGVlVSwKKyAgICAweDQ3YTE3YzBhVSwgMHhlOTdjNDIwZlUsIDB4YzlmODg0MWVVLCAweDAwMDAwMDAwVSwKKyAgICAweDgzMDk4MDg2VSwgMHg0ODMyMmJlZFUsIDB4YWMxZTExNzBVLCAweDRlNmM1YTcyVSwKKyAgICAweGZiZmQwZWZmVSwgMHg1NjBmODUzOFUsIDB4MWUzZGFlZDVVLCAweDI3MzYyZDM5VSwKKyAgICAweDY0MGEwZmQ5VSwgMHgyMTY4NWNhNlUsIDB4ZDE5YjViNTRVLCAweDNhMjQzNjJlVSwKKyAgICAweGIxMGMwYTY3VSwgMHgwZjkzNTdlN1UsIDB4ZDJiNGVlOTZVLCAweDllMWI5YjkxVSwKKyAgICAweDRmODBjMGM1VSwgMHhhMjYxZGMyMFUsIDB4Njk1YTc3NGJVLCAweDE2MWMxMjFhVSwKKyAgICAweDBhZTI5M2JhVSwgMHhlNWMwYTAyYVUsIDB4NDMzYzIyZTBVLCAweDFkMTIxYjE3VSwKKyAgICAweDBiMGUwOTBkVSwgMHhhZGYyOGJjN1UsIDB4YjkyZGI2YThVLCAweGM4MTQxZWE5VSwKKyAgICAweDg1NTdmMTE5VSwgMHg0Y2FmNzUwN1UsIDB4YmJlZTk5ZGRVLCAweGZkYTM3ZjYwVSwKKyAgICAweDlmZjcwMTI2VSwgMHhiYzVjNzJmNVUsIDB4YzU0NDY2M2JVLCAweDM0NWJmYjdlVSwKKyAgICAweDc2OGI0MzI5VSwgMHhkY2NiMjNjNlUsIDB4NjhiNmVkZmNVLCAweDYzYjhlNGYxVSwKKyAgICAweGNhZDczMWRjVSwgMHgxMDQyNjM4NVUsIDB4NDAxMzk3MjJVLCAweDIwODRjNjExVSwKKyAgICAweDdkODU0YTI0VSwgMHhmOGQyYmIzZFUsIDB4MTFhZWY5MzJVLCAweDZkYzcyOWExVSwKKyAgICAweDRiMWQ5ZTJmVSwgMHhmM2RjYjIzMFUsIDB4ZWMwZDg2NTJVLCAweGQwNzdjMWUzVSwKKyAgICAweDZjMmJiMzE2VSwgMHg5OWE5NzBiOVUsIDB4ZmExMTk0NDhVLCAweDIyNDdlOTY0VSwKKyAgICAweGM0YThmYzhjVSwgMHgxYWEwZjAzZlUsIDB4ZDg1NjdkMmNVLCAweGVmMjIzMzkwVSwKKyAgICAweGM3ODc0OTRlVSwgMHhjMWQ5MzhkMVUsIDB4ZmU4Y2NhYTJVLCAweDM2OThkNDBiVSwKKyAgICAweGNmYTZmNTgxVSwgMHgyOGE1N2FkZVUsIDB4MjZkYWI3OGVVLCAweGE0M2ZhZGJmVSwKKyAgICAweGU0MmMzYTlkVSwgMHgwZDUwNzg5MlUsIDB4OWI2YTVmY2NVLCAweDYyNTQ3ZTQ2VSwKKyAgICAweGMyZjY4ZDEzVSwgMHhlODkwZDhiOFUsIDB4NWUyZTM5ZjdVLCAweGY1ODJjM2FmVSwKKyAgICAweGJlOWY1ZDgwVSwgMHg3YzY5ZDA5M1UsIDB4YTk2ZmQ1MmRVLCAweGIzY2YyNTEyVSwKKyAgICAweDNiYzhhYzk5VSwgMHhhNzEwMTg3ZFUsIDB4NmVlODljNjNVLCAweDdiZGIzYmJiVSwKKyAgICAweDA5Y2QyNjc4VSwgMHhmNDZlNTkxOFUsIDB4MDFlYzlhYjdVLCAweGE4ODM0ZjlhVSwKKyAgICAweDY1ZTY5NTZlVSwgMHg3ZWFhZmZlNlUsIDB4MDgyMWJjY2ZVLCAweGU2ZWYxNWU4VSwKKyAgICAweGQ5YmFlNzliVSwgMHhjZTRhNmYzNlUsIDB4ZDRlYTlmMDlVLCAweGQ2MjliMDdjVSwKKyAgICAweGFmMzFhNGIyVSwgMHgzMTJhM2YyM1UsIDB4MzBjNmE1OTRVLCAweGMwMzVhMjY2VSwKKyAgICAweDM3NzQ0ZWJjVSwgMHhhNmZjODJjYVUsIDB4YjBlMDkwZDBVLCAweDE1MzNhN2Q4VSwKKyAgICAweDRhZjEwNDk4VSwgMHhmNzQxZWNkYVUsIDB4MGU3ZmNkNTBVLCAweDJmMTc5MWY2VSwKKyAgICAweDhkNzY0ZGQ2VSwgMHg0ZDQzZWZiMFUsIDB4NTRjY2FhNGRVLCAweGRmZTQ5NjA0VSwKKyAgICAweGUzOWVkMWI1VSwgMHgxYjRjNmE4OFUsIDB4YjhjMTJjMWZVLCAweDdmNDY2NTUxVSwKKyAgICAweDA0OWQ1ZWVhVSwgMHg1ZDAxOGMzNVUsIDB4NzNmYTg3NzRVLCAweDJlZmIwYjQxVSwKKyAgICAweDVhYjM2NzFkVSwgMHg1MjkyZGJkMlUsIDB4MzNlOTEwNTZVLCAweDEzNmRkNjQ3VSwKKyAgICAweDhjOWFkNzYxVSwgMHg3YTM3YTEwY1UsIDB4OGU1OWY4MTRVLCAweDg5ZWIxMzNjVSwKKyAgICAweGVlY2VhOTI3VSwgMHgzNWI3NjFjOVUsIDB4ZWRlMTFjZTVVLCAweDNjN2E0N2IxVSwKKyAgICAweDU5OWNkMmRmVSwgMHgzZjU1ZjI3M1UsIDB4NzkxODE0Y2VVLCAweGJmNzNjNzM3VSwKKyAgICAweGVhNTNmN2NkVSwgMHg1YjVmZmRhYVUsIDB4MTRkZjNkNmZVLCAweDg2Nzg0NGRiVSwKKyAgICAweDgxY2FhZmYzVSwgMHgzZWI5NjhjNFUsIDB4MmMzODI0MzRVLCAweDVmYzJhMzQwVSwKKyAgICAweDcyMTYxZGMzVSwgMHgwY2JjZTIyNVUsIDB4OGIyODNjNDlVLCAweDQxZmYwZDk1VSwKKyAgICAweDcxMzlhODAxVSwgMHhkZTA4MGNiM1UsIDB4OWNkOGI0ZTRVLCAweDkwNjQ1NmMxVSwKKyAgICAweDYxN2JjYjg0VSwgMHg3MGQ1MzJiNlUsIDB4NzQ0ODZjNWNVLCAweDQyZDBiODU3VSwKK307CitzdGF0aWMgY29uc3QgdTMyIFRkMlsyNTZdID0geworICAgIDB4YTc1MDUxZjRVLCAweDY1NTM3ZTQxVSwgMHhhNGMzMWExN1UsIDB4NWU5NjNhMjdVLAorICAgIDB4NmJjYjNiYWJVLCAweDQ1ZjExZjlkVSwgMHg1OGFiYWNmYVUsIDB4MDM5MzRiZTNVLAorICAgIDB4ZmE1NTIwMzBVLCAweDZkZjZhZDc2VSwgMHg3NjkxODhjY1UsIDB4NGMyNWY1MDJVLAorICAgIDB4ZDdmYzRmZTVVLCAweGNiZDdjNTJhVSwgMHg0NDgwMjYzNVUsIDB4YTM4ZmI1NjJVLAorICAgIDB4NWE0OWRlYjFVLCAweDFiNjcyNWJhVSwgMHgwZTk4NDVlYVUsIDB4YzBlMTVkZmVVLAorICAgIDB4NzUwMmMzMmZVLCAweGYwMTI4MTRjVSwgMHg5N2EzOGQ0NlUsIDB4ZjljNjZiZDNVLAorICAgIDB4NWZlNzAzOGZVLCAweDljOTUxNTkyVSwgMHg3YWViYmY2ZFUsIDB4NTlkYTk1NTJVLAorICAgIDB4ODMyZGQ0YmVVLCAweDIxZDM1ODc0VSwgMHg2OTI5NDllMFUsIDB4Yzg0NDhlYzlVLAorICAgIDB4ODk2YTc1YzJVLCAweDc5NzhmNDhlVSwgMHgzZTZiOTk1OFUsIDB4NzFkZDI3YjlVLAorICAgIDB4NGZiNmJlZTFVLCAweGFkMTdmMDg4VSwgMHhhYzY2YzkyMFUsIDB4M2FiNDdkY2VVLAorICAgIDB4NGExODYzZGZVLCAweDMxODJlNTFhVSwgMHgzMzYwOTc1MVUsIDB4N2Y0NTYyNTNVLAorICAgIDB4NzdlMGIxNjRVLCAweGFlODRiYjZiVSwgMHhhMDFjZmU4MVUsIDB4MmI5NGY5MDhVLAorICAgIDB4Njg1ODcwNDhVLCAweGZkMTk4ZjQ1VSwgMHg2Yzg3OTRkZVUsIDB4ZjhiNzUyN2JVLAorICAgIDB4ZDMyM2FiNzNVLCAweDAyZTI3MjRiVSwgMHg4ZjU3ZTMxZlUsIDB4YWIyYTY2NTVVLAorICAgIDB4MjgwN2IyZWJVLCAweGMyMDMyZmI1VSwgMHg3YjlhODZjNVUsIDB4MDhhNWQzMzdVLAorICAgIDB4ODdmMjMwMjhVLCAweGE1YjIyM2JmVSwgMHg2YWJhMDIwM1UsIDB4ODI1Y2VkMTZVLAorICAgIDB4MWMyYjhhY2ZVLCAweGI0OTJhNzc5VSwgMHhmMmYwZjMwN1UsIDB4ZTJhMTRlNjlVLAorICAgIDB4ZjRjZDY1ZGFVLCAweGJlZDUwNjA1VSwgMHg2MjFmZDEzNFUsIDB4ZmU4YWM0YTZVLAorICAgIDB4NTM5ZDM0MmVVLCAweDU1YTBhMmYzVSwgMHhlMTMyMDU4YVUsIDB4ZWI3NWE0ZjZVLAorICAgIDB4ZWMzOTBiODNVLCAweGVmYWE0MDYwVSwgMHg5ZjA2NWU3MVUsIDB4MTA1MWJkNmVVLAorICAgIDB4OGFmOTNlMjFVLCAweDA2M2Q5NmRkVSwgMHgwNWFlZGQzZVUsIDB4YmQ0NjRkZTZVLAorICAgIDB4OGRiNTkxNTRVLCAweDVkMDU3MWM0VSwgMHhkNDZmMDQwNlUsIDB4MTVmZjYwNTBVLAorICAgIDB4ZmIyNDE5OThVLCAweGU5OTdkNmJkVSwgMHg0M2NjODk0MFUsIDB4OWU3NzY3ZDlVLAorICAgIDB4NDJiZGIwZThVLCAweDhiODgwNzg5VSwgMHg1YjM4ZTcxOVUsIDB4ZWVkYjc5YzhVLAorICAgIDB4MGE0N2ExN2NVLCAweDBmZTk3YzQyVSwgMHgxZWM5Zjg4NFUsIDB4MDAwMDAwMDBVLAorICAgIDB4ODY4MzA5ODBVLCAweGVkNDgzMjJiVSwgMHg3MGFjMWUxMVUsIDB4NzI0ZTZjNWFVLAorICAgIDB4ZmZmYmZkMGVVLCAweDM4NTYwZjg1VSwgMHhkNTFlM2RhZVUsIDB4MzkyNzM2MmRVLAorICAgIDB4ZDk2NDBhMGZVLCAweGE2MjE2ODVjVSwgMHg1NGQxOWI1YlUsIDB4MmUzYTI0MzZVLAorICAgIDB4NjdiMTBjMGFVLCAweGU3MGY5MzU3VSwgMHg5NmQyYjRlZVUsIDB4OTE5ZTFiOWJVLAorICAgIDB4YzU0ZjgwYzBVLCAweDIwYTI2MWRjVSwgMHg0YjY5NWE3N1UsIDB4MWExNjFjMTJVLAorICAgIDB4YmEwYWUyOTNVLCAweDJhZTVjMGEwVSwgMHhlMDQzM2MyMlUsIDB4MTcxZDEyMWJVLAorICAgIDB4MGQwYjBlMDlVLCAweGM3YWRmMjhiVSwgMHhhOGI5MmRiNlUsIDB4YTljODE0MWVVLAorICAgIDB4MTk4NTU3ZjFVLCAweDA3NGNhZjc1VSwgMHhkZGJiZWU5OVUsIDB4NjBmZGEzN2ZVLAorICAgIDB4MjY5ZmY3MDFVLCAweGY1YmM1YzcyVSwgMHgzYmM1NDQ2NlUsIDB4N2UzNDViZmJVLAorICAgIDB4Mjk3NjhiNDNVLCAweGM2ZGNjYjIzVSwgMHhmYzY4YjZlZFUsIDB4ZjE2M2I4ZTRVLAorICAgIDB4ZGNjYWQ3MzFVLCAweDg1MTA0MjYzVSwgMHgyMjQwMTM5N1UsIDB4MTEyMDg0YzZVLAorICAgIDB4MjQ3ZDg1NGFVLCAweDNkZjhkMmJiVSwgMHgzMjExYWVmOVUsIDB4YTE2ZGM3MjlVLAorICAgIDB4MmY0YjFkOWVVLCAweDMwZjNkY2IyVSwgMHg1MmVjMGQ4NlUsIDB4ZTNkMDc3YzFVLAorICAgIDB4MTY2YzJiYjNVLCAweGI5OTlhOTcwVSwgMHg0OGZhMTE5NFUsIDB4NjQyMjQ3ZTlVLAorICAgIDB4OGNjNGE4ZmNVLCAweDNmMWFhMGYwVSwgMHgyY2Q4NTY3ZFUsIDB4OTBlZjIyMzNVLAorICAgIDB4NGVjNzg3NDlVLCAweGQxYzFkOTM4VSwgMHhhMmZlOGNjYVUsIDB4MGIzNjk4ZDRVLAorICAgIDB4ODFjZmE2ZjVVLCAweGRlMjhhNTdhVSwgMHg4ZTI2ZGFiN1UsIDB4YmZhNDNmYWRVLAorICAgIDB4OWRlNDJjM2FVLCAweDkyMGQ1MDc4VSwgMHhjYzliNmE1ZlUsIDB4NDY2MjU0N2VVLAorICAgIDB4MTNjMmY2OGRVLCAweGI4ZTg5MGQ4VSwgMHhmNzVlMmUzOVUsIDB4YWZmNTgyYzNVLAorICAgIDB4ODBiZTlmNWRVLCAweDkzN2M2OWQwVSwgMHgyZGE5NmZkNVUsIDB4MTJiM2NmMjVVLAorICAgIDB4OTkzYmM4YWNVLCAweDdkYTcxMDE4VSwgMHg2MzZlZTg5Y1UsIDB4YmI3YmRiM2JVLAorICAgIDB4NzgwOWNkMjZVLCAweDE4ZjQ2ZTU5VSwgMHhiNzAxZWM5YVUsIDB4OWFhODgzNGZVLAorICAgIDB4NmU2NWU2OTVVLCAweGU2N2VhYWZmVSwgMHhjZjA4MjFiY1UsIDB4ZThlNmVmMTVVLAorICAgIDB4OWJkOWJhZTdVLCAweDM2Y2U0YTZmVSwgMHgwOWQ0ZWE5ZlUsIDB4N2NkNjI5YjBVLAorICAgIDB4YjJhZjMxYTRVLCAweDIzMzEyYTNmVSwgMHg5NDMwYzZhNVUsIDB4NjZjMDM1YTJVLAorICAgIDB4YmMzNzc0NGVVLCAweGNhYTZmYzgyVSwgMHhkMGIwZTA5MFUsIDB4ZDgxNTMzYTdVLAorICAgIDB4OTg0YWYxMDRVLCAweGRhZjc0MWVjVSwgMHg1MDBlN2ZjZFUsIDB4ZjYyZjE3OTFVLAorICAgIDB4ZDY4ZDc2NGRVLCAweGIwNGQ0M2VmVSwgMHg0ZDU0Y2NhYVUsIDB4MDRkZmU0OTZVLAorICAgIDB4YjVlMzllZDFVLCAweDg4MWI0YzZhVSwgMHgxZmI4YzEyY1UsIDB4NTE3ZjQ2NjVVLAorICAgIDB4ZWEwNDlkNWVVLCAweDM1NWQwMThjVSwgMHg3NDczZmE4N1UsIDB4NDEyZWZiMGJVLAorICAgIDB4MWQ1YWIzNjdVLCAweGQyNTI5MmRiVSwgMHg1NjMzZTkxMFUsIDB4NDcxMzZkZDZVLAorICAgIDB4NjE4YzlhZDdVLCAweDBjN2EzN2ExVSwgMHgxNDhlNTlmOFUsIDB4M2M4OWViMTNVLAorICAgIDB4MjdlZWNlYTlVLCAweGM5MzViNzYxVSwgMHhlNWVkZTExY1UsIDB4YjEzYzdhNDdVLAorICAgIDB4ZGY1OTljZDJVLCAweDczM2Y1NWYyVSwgMHhjZTc5MTgxNFUsIDB4MzdiZjczYzdVLAorICAgIDB4Y2RlYTUzZjdVLCAweGFhNWI1ZmZkVSwgMHg2ZjE0ZGYzZFUsIDB4ZGI4Njc4NDRVLAorICAgIDB4ZjM4MWNhYWZVLCAweGM0M2ViOTY4VSwgMHgzNDJjMzgyNFUsIDB4NDA1ZmMyYTNVLAorICAgIDB4YzM3MjE2MWRVLCAweDI1MGNiY2UyVSwgMHg0OThiMjgzY1UsIDB4OTU0MWZmMGRVLAorICAgIDB4MDE3MTM5YThVLCAweGIzZGUwODBjVSwgMHhlNDljZDhiNFUsIDB4YzE5MDY0NTZVLAorICAgIDB4ODQ2MTdiY2JVLCAweGI2NzBkNTMyVSwgMHg1Yzc0NDg2Y1UsIDB4NTc0MmQwYjhVLAorfTsKK3N0YXRpYyBjb25zdCB1MzIgVGQzWzI1Nl0gPSB7CisgICAgMHhmNGE3NTA1MVUsIDB4NDE2NTUzN2VVLCAweDE3YTRjMzFhVSwgMHgyNzVlOTYzYVUsCisgICAgMHhhYjZiY2IzYlUsIDB4OWQ0NWYxMWZVLCAweGZhNThhYmFjVSwgMHhlMzAzOTM0YlUsCisgICAgMHgzMGZhNTUyMFUsIDB4NzY2ZGY2YWRVLCAweGNjNzY5MTg4VSwgMHgwMjRjMjVmNVUsCisgICAgMHhlNWQ3ZmM0ZlUsIDB4MmFjYmQ3YzVVLCAweDM1NDQ4MDI2VSwgMHg2MmEzOGZiNVUsCisgICAgMHhiMTVhNDlkZVUsIDB4YmExYjY3MjVVLCAweGVhMGU5ODQ1VSwgMHhmZWMwZTE1ZFUsCisgICAgMHgyZjc1MDJjM1UsIDB4NGNmMDEyODFVLCAweDQ2OTdhMzhkVSwgMHhkM2Y5YzY2YlUsCisgICAgMHg4ZjVmZTcwM1UsIDB4OTI5Yzk1MTVVLCAweDZkN2FlYmJmVSwgMHg1MjU5ZGE5NVUsCisgICAgMHhiZTgzMmRkNFUsIDB4NzQyMWQzNThVLCAweGUwNjkyOTQ5VSwgMHhjOWM4NDQ4ZVUsCisgICAgMHhjMjg5NmE3NVUsIDB4OGU3OTc4ZjRVLCAweDU4M2U2Yjk5VSwgMHhiOTcxZGQyN1UsCisgICAgMHhlMTRmYjZiZVUsIDB4ODhhZDE3ZjBVLCAweDIwYWM2NmM5VSwgMHhjZTNhYjQ3ZFUsCisgICAgMHhkZjRhMTg2M1UsIDB4MWEzMTgyZTVVLCAweDUxMzM2MDk3VSwgMHg1MzdmNDU2MlUsCisgICAgMHg2NDc3ZTBiMVUsIDB4NmJhZTg0YmJVLCAweDgxYTAxY2ZlVSwgMHgwODJiOTRmOVUsCisgICAgMHg0ODY4NTg3MFUsIDB4NDVmZDE5OGZVLCAweGRlNmM4Nzk0VSwgMHg3YmY4Yjc1MlUsCisgICAgMHg3M2QzMjNhYlUsIDB4NGIwMmUyNzJVLCAweDFmOGY1N2UzVSwgMHg1NWFiMmE2NlUsCisgICAgMHhlYjI4MDdiMlUsIDB4YjVjMjAzMmZVLCAweGM1N2I5YTg2VSwgMHgzNzA4YTVkM1UsCisgICAgMHgyODg3ZjIzMFUsIDB4YmZhNWIyMjNVLCAweDAzNmFiYTAyVSwgMHgxNjgyNWNlZFUsCisgICAgMHhjZjFjMmI4YVUsIDB4NzliNDkyYTdVLCAweDA3ZjJmMGYzVSwgMHg2OWUyYTE0ZVUsCisgICAgMHhkYWY0Y2Q2NVUsIDB4MDViZWQ1MDZVLCAweDM0NjIxZmQxVSwgMHhhNmZlOGFjNFUsCisgICAgMHgyZTUzOWQzNFUsIDB4ZjM1NWEwYTJVLCAweDhhZTEzMjA1VSwgMHhmNmViNzVhNFUsCisgICAgMHg4M2VjMzkwYlUsIDB4NjBlZmFhNDBVLCAweDcxOWYwNjVlVSwgMHg2ZTEwNTFiZFUsCisgICAgMHgyMThhZjkzZVUsIDB4ZGQwNjNkOTZVLCAweDNlMDVhZWRkVSwgMHhlNmJkNDY0ZFUsCisgICAgMHg1NDhkYjU5MVUsIDB4YzQ1ZDA1NzFVLCAweDA2ZDQ2ZjA0VSwgMHg1MDE1ZmY2MFUsCisgICAgMHg5OGZiMjQxOVUsIDB4YmRlOTk3ZDZVLCAweDQwNDNjYzg5VSwgMHhkOTllNzc2N1UsCisgICAgMHhlODQyYmRiMFUsIDB4ODk4Yjg4MDdVLCAweDE5NWIzOGU3VSwgMHhjOGVlZGI3OVUsCisgICAgMHg3YzBhNDdhMVUsIDB4NDIwZmU5N2NVLCAweDg0MWVjOWY4VSwgMHgwMDAwMDAwMFUsCisgICAgMHg4MDg2ODMwOVUsIDB4MmJlZDQ4MzJVLCAweDExNzBhYzFlVSwgMHg1YTcyNGU2Y1UsCisgICAgMHgwZWZmZmJmZFUsIDB4ODUzODU2MGZVLCAweGFlZDUxZTNkVSwgMHgyZDM5MjczNlUsCisgICAgMHgwZmQ5NjQwYVUsIDB4NWNhNjIxNjhVLCAweDViNTRkMTliVSwgMHgzNjJlM2EyNFUsCisgICAgMHgwYTY3YjEwY1UsIDB4NTdlNzBmOTNVLCAweGVlOTZkMmI0VSwgMHg5YjkxOWUxYlUsCisgICAgMHhjMGM1NGY4MFUsIDB4ZGMyMGEyNjFVLCAweDc3NGI2OTVhVSwgMHgxMjFhMTYxY1UsCisgICAgMHg5M2JhMGFlMlUsIDB4YTAyYWU1YzBVLCAweDIyZTA0MzNjVSwgMHgxYjE3MWQxMlUsCisgICAgMHgwOTBkMGIwZVUsIDB4OGJjN2FkZjJVLCAweGI2YThiOTJkVSwgMHgxZWE5YzgxNFUsCisgICAgMHhmMTE5ODU1N1UsIDB4NzUwNzRjYWZVLCAweDk5ZGRiYmVlVSwgMHg3ZjYwZmRhM1UsCisgICAgMHgwMTI2OWZmN1UsIDB4NzJmNWJjNWNVLCAweDY2M2JjNTQ0VSwgMHhmYjdlMzQ1YlUsCisgICAgMHg0MzI5NzY4YlUsIDB4MjNjNmRjY2JVLCAweGVkZmM2OGI2VSwgMHhlNGYxNjNiOFUsCisgICAgMHgzMWRjY2FkN1UsIDB4NjM4NTEwNDJVLCAweDk3MjI0MDEzVSwgMHhjNjExMjA4NFUsCisgICAgMHg0YTI0N2Q4NVUsIDB4YmIzZGY4ZDJVLCAweGY5MzIxMWFlVSwgMHgyOWExNmRjN1UsCisgICAgMHg5ZTJmNGIxZFUsIDB4YjIzMGYzZGNVLCAweDg2NTJlYzBkVSwgMHhjMWUzZDA3N1UsCisgICAgMHhiMzE2NmMyYlUsIDB4NzBiOTk5YTlVLCAweDk0NDhmYTExVSwgMHhlOTY0MjI0N1UsCisgICAgMHhmYzhjYzRhOFUsIDB4ZjAzZjFhYTBVLCAweDdkMmNkODU2VSwgMHgzMzkwZWYyMlUsCisgICAgMHg0OTRlYzc4N1UsIDB4MzhkMWMxZDlVLCAweGNhYTJmZThjVSwgMHhkNDBiMzY5OFUsCisgICAgMHhmNTgxY2ZhNlUsIDB4N2FkZTI4YTVVLCAweGI3OGUyNmRhVSwgMHhhZGJmYTQzZlUsCisgICAgMHgzYTlkZTQyY1UsIDB4Nzg5MjBkNTBVLCAweDVmY2M5YjZhVSwgMHg3ZTQ2NjI1NFUsCisgICAgMHg4ZDEzYzJmNlUsIDB4ZDhiOGU4OTBVLCAweDM5Zjc1ZTJlVSwgMHhjM2FmZjU4MlUsCisgICAgMHg1ZDgwYmU5ZlUsIDB4ZDA5MzdjNjlVLCAweGQ1MmRhOTZmVSwgMHgyNTEyYjNjZlUsCisgICAgMHhhYzk5M2JjOFUsIDB4MTg3ZGE3MTBVLCAweDljNjM2ZWU4VSwgMHgzYmJiN2JkYlUsCisgICAgMHgyNjc4MDljZFUsIDB4NTkxOGY0NmVVLCAweDlhYjcwMWVjVSwgMHg0ZjlhYTg4M1UsCisgICAgMHg5NTZlNjVlNlUsIDB4ZmZlNjdlYWFVLCAweGJjY2YwODIxVSwgMHgxNWU4ZTZlZlUsCisgICAgMHhlNzliZDliYVUsIDB4NmYzNmNlNGFVLCAweDlmMDlkNGVhVSwgMHhiMDdjZDYyOVUsCisgICAgMHhhNGIyYWYzMVUsIDB4M2YyMzMxMmFVLCAweGE1OTQzMGM2VSwgMHhhMjY2YzAzNVUsCisgICAgMHg0ZWJjMzc3NFUsIDB4ODJjYWE2ZmNVLCAweDkwZDBiMGUwVSwgMHhhN2Q4MTUzM1UsCisgICAgMHgwNDk4NGFmMVUsIDB4ZWNkYWY3NDFVLCAweGNkNTAwZTdmVSwgMHg5MWY2MmYxN1UsCisgICAgMHg0ZGQ2OGQ3NlUsIDB4ZWZiMDRkNDNVLCAweGFhNGQ1NGNjVSwgMHg5NjA0ZGZlNFUsCisgICAgMHhkMWI1ZTM5ZVUsIDB4NmE4ODFiNGNVLCAweDJjMWZiOGMxVSwgMHg2NTUxN2Y0NlUsCisgICAgMHg1ZWVhMDQ5ZFUsIDB4OGMzNTVkMDFVLCAweDg3NzQ3M2ZhVSwgMHgwYjQxMmVmYlUsCisgICAgMHg2NzFkNWFiM1UsIDB4ZGJkMjUyOTJVLCAweDEwNTYzM2U5VSwgMHhkNjQ3MTM2ZFUsCisgICAgMHhkNzYxOGM5YVUsIDB4YTEwYzdhMzdVLCAweGY4MTQ4ZTU5VSwgMHgxMzNjODllYlUsCisgICAgMHhhOTI3ZWVjZVUsIDB4NjFjOTM1YjdVLCAweDFjZTVlZGUxVSwgMHg0N2IxM2M3YVUsCisgICAgMHhkMmRmNTk5Y1UsIDB4ZjI3MzNmNTVVLCAweDE0Y2U3OTE4VSwgMHhjNzM3YmY3M1UsCisgICAgMHhmN2NkZWE1M1UsIDB4ZmRhYTViNWZVLCAweDNkNmYxNGRmVSwgMHg0NGRiODY3OFUsCisgICAgMHhhZmYzODFjYVUsIDB4NjhjNDNlYjlVLCAweDI0MzQyYzM4VSwgMHhhMzQwNWZjMlUsCisgICAgMHgxZGMzNzIxNlUsIDB4ZTIyNTBjYmNVLCAweDNjNDk4YjI4VSwgMHgwZDk1NDFmZlUsCisgICAgMHhhODAxNzEzOVUsIDB4MGNiM2RlMDhVLCAweGI0ZTQ5Y2Q4VSwgMHg1NmMxOTA2NFUsCisgICAgMHhjYjg0NjE3YlUsIDB4MzJiNjcwZDVVLCAweDZjNWM3NDQ4VSwgMHhiODU3NDJkMFUsCit9Oworc3RhdGljIGNvbnN0IHU4IFRkNFsyNTZdID0geworICAgIDB4NTJVLCAweDA5VSwgMHg2YVUsIDB4ZDVVLCAweDMwVSwgMHgzNlUsIDB4YTVVLCAweDM4VSwKKyAgICAweGJmVSwgMHg0MFUsIDB4YTNVLCAweDllVSwgMHg4MVUsIDB4ZjNVLCAweGQ3VSwgMHhmYlUsCisgICAgMHg3Y1UsIDB4ZTNVLCAweDM5VSwgMHg4MlUsIDB4OWJVLCAweDJmVSwgMHhmZlUsIDB4ODdVLAorICAgIDB4MzRVLCAweDhlVSwgMHg0M1UsIDB4NDRVLCAweGM0VSwgMHhkZVUsIDB4ZTlVLCAweGNiVSwKKyAgICAweDU0VSwgMHg3YlUsIDB4OTRVLCAweDMyVSwgMHhhNlUsIDB4YzJVLCAweDIzVSwgMHgzZFUsCisgICAgMHhlZVUsIDB4NGNVLCAweDk1VSwgMHgwYlUsIDB4NDJVLCAweGZhVSwgMHhjM1UsIDB4NGVVLAorICAgIDB4MDhVLCAweDJlVSwgMHhhMVUsIDB4NjZVLCAweDI4VSwgMHhkOVUsIDB4MjRVLCAweGIyVSwKKyAgICAweDc2VSwgMHg1YlUsIDB4YTJVLCAweDQ5VSwgMHg2ZFUsIDB4OGJVLCAweGQxVSwgMHgyNVUsCisgICAgMHg3MlUsIDB4ZjhVLCAweGY2VSwgMHg2NFUsIDB4ODZVLCAweDY4VSwgMHg5OFUsIDB4MTZVLAorICAgIDB4ZDRVLCAweGE0VSwgMHg1Y1UsIDB4Y2NVLCAweDVkVSwgMHg2NVUsIDB4YjZVLCAweDkyVSwKKyAgICAweDZjVSwgMHg3MFUsIDB4NDhVLCAweDUwVSwgMHhmZFUsIDB4ZWRVLCAweGI5VSwgMHhkYVUsCisgICAgMHg1ZVUsIDB4MTVVLCAweDQ2VSwgMHg1N1UsIDB4YTdVLCAweDhkVSwgMHg5ZFUsIDB4ODRVLAorICAgIDB4OTBVLCAweGQ4VSwgMHhhYlUsIDB4MDBVLCAweDhjVSwgMHhiY1UsIDB4ZDNVLCAweDBhVSwKKyAgICAweGY3VSwgMHhlNFUsIDB4NThVLCAweDA1VSwgMHhiOFUsIDB4YjNVLCAweDQ1VSwgMHgwNlUsCisgICAgMHhkMFUsIDB4MmNVLCAweDFlVSwgMHg4ZlUsIDB4Y2FVLCAweDNmVSwgMHgwZlUsIDB4MDJVLAorICAgIDB4YzFVLCAweGFmVSwgMHhiZFUsIDB4MDNVLCAweDAxVSwgMHgxM1UsIDB4OGFVLCAweDZiVSwKKyAgICAweDNhVSwgMHg5MVUsIDB4MTFVLCAweDQxVSwgMHg0ZlUsIDB4NjdVLCAweGRjVSwgMHhlYVUsCisgICAgMHg5N1UsIDB4ZjJVLCAweGNmVSwgMHhjZVUsIDB4ZjBVLCAweGI0VSwgMHhlNlUsIDB4NzNVLAorICAgIDB4OTZVLCAweGFjVSwgMHg3NFUsIDB4MjJVLCAweGU3VSwgMHhhZFUsIDB4MzVVLCAweDg1VSwKKyAgICAweGUyVSwgMHhmOVUsIDB4MzdVLCAweGU4VSwgMHgxY1UsIDB4NzVVLCAweGRmVSwgMHg2ZVUsCisgICAgMHg0N1UsIDB4ZjFVLCAweDFhVSwgMHg3MVUsIDB4MWRVLCAweDI5VSwgMHhjNVUsIDB4ODlVLAorICAgIDB4NmZVLCAweGI3VSwgMHg2MlUsIDB4MGVVLCAweGFhVSwgMHgxOFUsIDB4YmVVLCAweDFiVSwKKyAgICAweGZjVSwgMHg1NlUsIDB4M2VVLCAweDRiVSwgMHhjNlUsIDB4ZDJVLCAweDc5VSwgMHgyMFUsCisgICAgMHg5YVUsIDB4ZGJVLCAweGMwVSwgMHhmZVUsIDB4NzhVLCAweGNkVSwgMHg1YVUsIDB4ZjRVLAorICAgIDB4MWZVLCAweGRkVSwgMHhhOFUsIDB4MzNVLCAweDg4VSwgMHgwN1UsIDB4YzdVLCAweDMxVSwKKyAgICAweGIxVSwgMHgxMlUsIDB4MTBVLCAweDU5VSwgMHgyN1UsIDB4ODBVLCAweGVjVSwgMHg1ZlUsCisgICAgMHg2MFUsIDB4NTFVLCAweDdmVSwgMHhhOVUsIDB4MTlVLCAweGI1VSwgMHg0YVUsIDB4MGRVLAorICAgIDB4MmRVLCAweGU1VSwgMHg3YVUsIDB4OWZVLCAweDkzVSwgMHhjOVUsIDB4OWNVLCAweGVmVSwKKyAgICAweGEwVSwgMHhlMFUsIDB4M2JVLCAweDRkVSwgMHhhZVUsIDB4MmFVLCAweGY1VSwgMHhiMFUsCisgICAgMHhjOFUsIDB4ZWJVLCAweGJiVSwgMHgzY1UsIDB4ODNVLCAweDUzVSwgMHg5OVUsIDB4NjFVLAorICAgIDB4MTdVLCAweDJiVSwgMHgwNFUsIDB4N2VVLCAweGJhVSwgMHg3N1UsIDB4ZDZVLCAweDI2VSwKKyAgICAweGUxVSwgMHg2OVUsIDB4MTRVLCAweDYzVSwgMHg1NVUsIDB4MjFVLCAweDBjVSwgMHg3ZFUsCit9Oworc3RhdGljIGNvbnN0IHUzMiByY29uW10gPSB7CisJMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwODAwMDAwMCwKKwkweDEwMDAwMDAwLCAweDIwMDAwMDAwLCAweDQwMDAwMDAwLCAweDgwMDAwMDAwLAorCTB4MUIwMDAwMDAsIDB4MzYwMDAwMDAsIC8qIGZvciAxMjgtYml0IGJsb2NrcywgUmlqbmRhZWwgbmV2ZXIgdXNlcyBtb3JlIHRoYW4gMTAgcmNvbiB2YWx1ZXMgKi8KK307CisKKy8qKgorICogRXhwYW5kIHRoZSBjaXBoZXIga2V5IGludG8gdGhlIGVuY3J5cHRpb24ga2V5IHNjaGVkdWxlLgorICovCitpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKwkJCUFFU19LRVkgKmtleSkgeworCisJdTMyICpyazsKKyAgIAlpbnQgaSA9IDA7CisJdTMyIHRlbXA7CisKKwlpZiAoIXVzZXJLZXkgfHwgIWtleSkKKwkJcmV0dXJuIC0xOworCWlmIChiaXRzICE9IDEyOCAmJiBiaXRzICE9IDE5MiAmJiBiaXRzICE9IDI1NikKKwkJcmV0dXJuIC0yOworCisJcmsgPSBrZXktPnJkX2tleTsKKworCWlmIChiaXRzPT0xMjgpCisJCWtleS0+cm91bmRzID0gMTA7CisJZWxzZSBpZiAoYml0cz09MTkyKQorCQlrZXktPnJvdW5kcyA9IDEyOworCWVsc2UKKwkJa2V5LT5yb3VuZHMgPSAxNDsKKworCXJrWzBdID0gR0VUVTMyKHVzZXJLZXkgICAgICk7CisJcmtbMV0gPSBHRVRVMzIodXNlcktleSArICA0KTsKKwlya1syXSA9IEdFVFUzMih1c2VyS2V5ICsgIDgpOworCXJrWzNdID0gR0VUVTMyKHVzZXJLZXkgKyAxMik7CisJaWYgKGJpdHMgPT0gMTI4KSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wICA9IHJrWzNdOworCQkJcmtbNF0gPSBya1swXSBeCisJCQkJKFRlMlsodGVtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmYwMDAwMDApIF4KKwkJCQkoVGUzWyh0ZW1wID4+ICA4KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorCQkJCShUZTBbKHRlbXAgICAgICApICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisJCQkJKFRlMVsodGVtcCA+PiAyNCkgICAgICAgXSAmIDB4MDAwMDAwZmYpIF4KKwkJCQlyY29uW2ldOworCQkJcmtbNV0gPSBya1sxXSBeIHJrWzRdOworCQkJcmtbNl0gPSBya1syXSBeIHJrWzVdOworCQkJcmtbN10gPSBya1szXSBeIHJrWzZdOworCQkJaWYgKCsraSA9PSAxMCkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmsgKz0gNDsKKwkJfQorCX0KKwlya1s0XSA9IEdFVFUzMih1c2VyS2V5ICsgMTYpOworCXJrWzVdID0gR0VUVTMyKHVzZXJLZXkgKyAyMCk7CisJaWYgKGJpdHMgPT0gMTkyKSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wID0gcmtbIDVdOworCQkJcmtbIDZdID0gcmtbIDBdIF4KKwkJCQkoVGUyWyh0ZW1wID4+IDE2KSAmIDB4ZmZdICYgMHhmZjAwMDAwMCkgXgorCQkJCShUZTNbKHRlbXAgPj4gIDgpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisJCQkJKFRlMFsodGVtcCAgICAgICkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKwkJCQkoVGUxWyh0ZW1wID4+IDI0KSAgICAgICBdICYgMHgwMDAwMDBmZikgXgorCQkJCXJjb25baV07CisJCQlya1sgN10gPSBya1sgMV0gXiBya1sgNl07CisJCQlya1sgOF0gPSBya1sgMl0gXiBya1sgN107CisJCQlya1sgOV0gPSBya1sgM10gXiBya1sgOF07CisJCQlpZiAoKytpID09IDgpIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJrWzEwXSA9IHJrWyA0XSBeIHJrWyA5XTsKKwkJCXJrWzExXSA9IHJrWyA1XSBeIHJrWzEwXTsKKwkJCXJrICs9IDY7CisJCX0KKwl9CisJcmtbNl0gPSBHRVRVMzIodXNlcktleSArIDI0KTsKKwlya1s3XSA9IEdFVFUzMih1c2VyS2V5ICsgMjgpOworCWlmIChiaXRzID09IDI1NikgeworCQl3aGlsZSAoMSkgeworCQkJdGVtcCA9IHJrWyA3XTsKKwkJCXJrWyA4XSA9IHJrWyAwXSBeCisJCQkJKFRlMlsodGVtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmYwMDAwMDApIF4KKwkJCQkoVGUzWyh0ZW1wID4+ICA4KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorCQkJCShUZTBbKHRlbXAgICAgICApICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisJCQkJKFRlMVsodGVtcCA+PiAyNCkgICAgICAgXSAmIDB4MDAwMDAwZmYpIF4KKwkJCQlyY29uW2ldOworCQkJcmtbIDldID0gcmtbIDFdIF4gcmtbIDhdOworCQkJcmtbMTBdID0gcmtbIDJdIF4gcmtbIDldOworCQkJcmtbMTFdID0gcmtbIDNdIF4gcmtbMTBdOworCQkJaWYgKCsraSA9PSA3KSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQl0ZW1wID0gcmtbMTFdOworCQkJcmtbMTJdID0gcmtbIDRdIF4KKwkJCQkoVGUyWyh0ZW1wID4+IDI0KSAgICAgICBdICYgMHhmZjAwMDAwMCkgXgorCQkJCShUZTNbKHRlbXAgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisJCQkJKFRlMFsodGVtcCA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKwkJCQkoVGUxWyh0ZW1wICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZik7CisJCQlya1sxM10gPSBya1sgNV0gXiBya1sxMl07CisJCQlya1sxNF0gPSBya1sgNl0gXiBya1sxM107CisJCQlya1sxNV0gPSBya1sgN10gXiBya1sxNF07CisKKwkJCXJrICs9IDg7CisgICAgICAgIAl9CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIEV4cGFuZCB0aGUgY2lwaGVyIGtleSBpbnRvIHRoZSBkZWNyeXB0aW9uIGtleSBzY2hlZHVsZS4KKyAqLworaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQkgQUVTX0tFWSAqa2V5KSB7CisKKyAgICAgICAgdTMyICpyazsKKwlpbnQgaSwgaiwgc3RhdHVzOworCXUzMiB0ZW1wOworCisJLyogZmlyc3QsIHN0YXJ0IHdpdGggYW4gZW5jcnlwdGlvbiBzY2hlZHVsZSAqLworCXN0YXR1cyA9IEFFU19zZXRfZW5jcnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJrID0ga2V5LT5yZF9rZXk7CisKKwkvKiBpbnZlcnQgdGhlIG9yZGVyIG9mIHRoZSByb3VuZCBrZXlzOiAqLworCWZvciAoaSA9IDAsIGogPSA0KihrZXktPnJvdW5kcyk7IGkgPCBqOyBpICs9IDQsIGogLT0gNCkgeworCQl0ZW1wID0gcmtbaSAgICBdOyBya1tpICAgIF0gPSBya1tqICAgIF07IHJrW2ogICAgXSA9IHRlbXA7CisJCXRlbXAgPSBya1tpICsgMV07IHJrW2kgKyAxXSA9IHJrW2ogKyAxXTsgcmtbaiArIDFdID0gdGVtcDsKKwkJdGVtcCA9IHJrW2kgKyAyXTsgcmtbaSArIDJdID0gcmtbaiArIDJdOyBya1tqICsgMl0gPSB0ZW1wOworCQl0ZW1wID0gcmtbaSArIDNdOyBya1tpICsgM10gPSBya1tqICsgM107IHJrW2ogKyAzXSA9IHRlbXA7CisJfQorCS8qIGFwcGx5IHRoZSBpbnZlcnNlIE1peENvbHVtbiB0cmFuc2Zvcm0gdG8gYWxsIHJvdW5kIGtleXMgYnV0IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3Q6ICovCisJZm9yIChpID0gMTsgaSA8IChrZXktPnJvdW5kcyk7IGkrKykgeworCQlyayArPSA0OworCQlya1swXSA9CisJCQlUZDBbVGUxWyhya1swXSA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4KKwkJCVRkMVtUZTFbKHJrWzBdID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQyW1RlMVsocmtbMF0gPj4gIDgpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDNbVGUxWyhya1swXSAgICAgICkgJiAweGZmXSAmIDB4ZmZdOworCQlya1sxXSA9CisJCQlUZDBbVGUxWyhya1sxXSA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4KKwkJCVRkMVtUZTFbKHJrWzFdID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQyW1RlMVsocmtbMV0gPj4gIDgpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDNbVGUxWyhya1sxXSAgICAgICkgJiAweGZmXSAmIDB4ZmZdOworCQlya1syXSA9CisJCQlUZDBbVGUxWyhya1syXSA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4KKwkJCVRkMVtUZTFbKHJrWzJdID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQyW1RlMVsocmtbMl0gPj4gIDgpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDNbVGUxWyhya1syXSAgICAgICkgJiAweGZmXSAmIDB4ZmZdOworCQlya1szXSA9CisJCQlUZDBbVGUxWyhya1szXSA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4KKwkJCVRkMVtUZTFbKHJrWzNdID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQyW1RlMVsocmtbM10gPj4gIDgpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDNbVGUxWyhya1szXSAgICAgICkgJiAweGZmXSAmIDB4ZmZdOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEVuY3J5cHQgYSBzaW5nbGUgYmxvY2sKKyAqIGluIGFuZCBvdXQgY2FuIG92ZXJsYXAKKyAqLwordm9pZCBBRVNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgY29uc3QgQUVTX0tFWSAqa2V5KSB7CisKKwljb25zdCB1MzIgKnJrOworCXUzMiBzMCwgczEsIHMyLCBzMywgdDAsIHQxLCB0MiwgdDM7CisjaWZuZGVmIEZVTExfVU5ST0xMCisJaW50IHI7CisjZW5kaWYgLyogP0ZVTExfVU5ST0xMICovCisKKwlhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSk7CisJcmsgPSBrZXktPnJkX2tleTsKKworCS8qCisJICogbWFwIGJ5dGUgYXJyYXkgYmxvY2sgdG8gY2lwaGVyIHN0YXRlCisJICogYW5kIGFkZCBpbml0aWFsIHJvdW5kIGtleToKKwkgKi8KKwlzMCA9IEdFVFUzMihpbiAgICAgKSBeIHJrWzBdOworCXMxID0gR0VUVTMyKGluICsgIDQpIF4gcmtbMV07CisJczIgPSBHRVRVMzIoaW4gKyAgOCkgXiBya1syXTsKKwlzMyA9IEdFVFUzMihpbiArIDEyKSBeIHJrWzNdOworI2lmZGVmIEZVTExfVU5ST0xMCisJLyogcm91bmQgMTogKi8KKyAgIAl0MCA9IFRlMFtzMCA+PiAyNF0gXiBUZTFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMyAmIDB4ZmZdIF4gcmtbIDRdOworICAgCXQxID0gVGUwW3MxID4+IDI0XSBeIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MwICYgMHhmZl0gXiBya1sgNV07CisgICAJdDIgPSBUZTBbczIgPj4gMjRdIF4gVGUxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRlMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZTNbczEgJiAweGZmXSBeIHJrWyA2XTsKKyAgIAl0MyA9IFRlMFtzMyA+PiAyNF0gXiBUZTFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMiAmIDB4ZmZdIF4gcmtbIDddOworICAgCS8qIHJvdW5kIDI6ICovCisgICAJczAgPSBUZTBbdDAgPj4gMjRdIF4gVGUxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRlMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDMgJiAweGZmXSBeIHJrWyA4XTsKKyAgIAlzMSA9IFRlMFt0MSA+PiAyNF0gXiBUZTFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MCAmIDB4ZmZdIF4gcmtbIDldOworICAgCXMyID0gVGUwW3QyID4+IDI0XSBeIFRlMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QxICYgMHhmZl0gXiBya1sxMF07CisgICAJczMgPSBUZTBbdDMgPj4gMjRdIF4gVGUxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRlMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDIgJiAweGZmXSBeIHJrWzExXTsKKwkvKiByb3VuZCAzOiAqLworICAgCXQwID0gVGUwW3MwID4+IDI0XSBeIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MzICYgMHhmZl0gXiBya1sxMl07CisgICAJdDEgPSBUZTBbczEgPj4gMjRdIF4gVGUxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRlMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZTNbczAgJiAweGZmXSBeIHJrWzEzXTsKKyAgIAl0MiA9IFRlMFtzMiA+PiAyNF0gXiBUZTFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMSAmIDB4ZmZdIF4gcmtbMTRdOworICAgCXQzID0gVGUwW3MzID4+IDI0XSBeIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MyICYgMHhmZl0gXiBya1sxNV07CisgICAJLyogcm91bmQgNDogKi8KKyAgIAlzMCA9IFRlMFt0MCA+PiAyNF0gXiBUZTFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MyAmIDB4ZmZdIF4gcmtbMTZdOworICAgCXMxID0gVGUwW3QxID4+IDI0XSBeIFRlMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QwICYgMHhmZl0gXiBya1sxN107CisgICAJczIgPSBUZTBbdDIgPj4gMjRdIF4gVGUxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRlMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDEgJiAweGZmXSBeIHJrWzE4XTsKKyAgIAlzMyA9IFRlMFt0MyA+PiAyNF0gXiBUZTFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MiAmIDB4ZmZdIF4gcmtbMTldOworCS8qIHJvdW5kIDU6ICovCisgICAJdDAgPSBUZTBbczAgPj4gMjRdIF4gVGUxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRlMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZTNbczMgJiAweGZmXSBeIHJrWzIwXTsKKyAgIAl0MSA9IFRlMFtzMSA+PiAyNF0gXiBUZTFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMCAmIDB4ZmZdIF4gcmtbMjFdOworICAgCXQyID0gVGUwW3MyID4+IDI0XSBeIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MxICYgMHhmZl0gXiBya1syMl07CisgICAJdDMgPSBUZTBbczMgPj4gMjRdIF4gVGUxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRlMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZTNbczIgJiAweGZmXSBeIHJrWzIzXTsKKyAgIAkvKiByb3VuZCA2OiAqLworICAgCXMwID0gVGUwW3QwID4+IDI0XSBeIFRlMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QzICYgMHhmZl0gXiBya1syNF07CisgICAJczEgPSBUZTBbdDEgPj4gMjRdIF4gVGUxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRlMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDAgJiAweGZmXSBeIHJrWzI1XTsKKyAgIAlzMiA9IFRlMFt0MiA+PiAyNF0gXiBUZTFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MSAmIDB4ZmZdIF4gcmtbMjZdOworICAgCXMzID0gVGUwW3QzID4+IDI0XSBeIFRlMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QyICYgMHhmZl0gXiBya1syN107CisJLyogcm91bmQgNzogKi8KKyAgIAl0MCA9IFRlMFtzMCA+PiAyNF0gXiBUZTFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMyAmIDB4ZmZdIF4gcmtbMjhdOworICAgCXQxID0gVGUwW3MxID4+IDI0XSBeIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MwICYgMHhmZl0gXiBya1syOV07CisgICAJdDIgPSBUZTBbczIgPj4gMjRdIF4gVGUxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRlMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZTNbczEgJiAweGZmXSBeIHJrWzMwXTsKKyAgIAl0MyA9IFRlMFtzMyA+PiAyNF0gXiBUZTFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMiAmIDB4ZmZdIF4gcmtbMzFdOworICAgCS8qIHJvdW5kIDg6ICovCisgICAJczAgPSBUZTBbdDAgPj4gMjRdIF4gVGUxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRlMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDMgJiAweGZmXSBeIHJrWzMyXTsKKyAgIAlzMSA9IFRlMFt0MSA+PiAyNF0gXiBUZTFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MCAmIDB4ZmZdIF4gcmtbMzNdOworICAgCXMyID0gVGUwW3QyID4+IDI0XSBeIFRlMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QxICYgMHhmZl0gXiBya1szNF07CisgICAJczMgPSBUZTBbdDMgPj4gMjRdIF4gVGUxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRlMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDIgJiAweGZmXSBeIHJrWzM1XTsKKwkvKiByb3VuZCA5OiAqLworICAgCXQwID0gVGUwW3MwID4+IDI0XSBeIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MzICYgMHhmZl0gXiBya1szNl07CisgICAJdDEgPSBUZTBbczEgPj4gMjRdIF4gVGUxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRlMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZTNbczAgJiAweGZmXSBeIHJrWzM3XTsKKyAgIAl0MiA9IFRlMFtzMiA+PiAyNF0gXiBUZTFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMSAmIDB4ZmZdIF4gcmtbMzhdOworICAgCXQzID0gVGUwW3MzID4+IDI0XSBeIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MyICYgMHhmZl0gXiBya1szOV07CisgICAgaWYgKGtleS0+cm91bmRzID4gMTApIHsKKyAgICAgICAgLyogcm91bmQgMTA6ICovCisgICAgICAgIHMwID0gVGUwW3QwID4+IDI0XSBeIFRlMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QzICYgMHhmZl0gXiBya1s0MF07CisgICAgICAgIHMxID0gVGUwW3QxID4+IDI0XSBeIFRlMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QwICYgMHhmZl0gXiBya1s0MV07CisgICAgICAgIHMyID0gVGUwW3QyID4+IDI0XSBeIFRlMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QxICYgMHhmZl0gXiBya1s0Ml07CisgICAgICAgIHMzID0gVGUwW3QzID4+IDI0XSBeIFRlMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QyICYgMHhmZl0gXiBya1s0M107CisgICAgICAgIC8qIHJvdW5kIDExOiAqLworICAgICAgICB0MCA9IFRlMFtzMCA+PiAyNF0gXiBUZTFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMyAmIDB4ZmZdIF4gcmtbNDRdOworICAgICAgICB0MSA9IFRlMFtzMSA+PiAyNF0gXiBUZTFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMCAmIDB4ZmZdIF4gcmtbNDVdOworICAgICAgICB0MiA9IFRlMFtzMiA+PiAyNF0gXiBUZTFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMSAmIDB4ZmZdIF4gcmtbNDZdOworICAgICAgICB0MyA9IFRlMFtzMyA+PiAyNF0gXiBUZTFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMiAmIDB4ZmZdIF4gcmtbNDddOworICAgICAgICBpZiAoa2V5LT5yb3VuZHMgPiAxMikgeworICAgICAgICAgICAgLyogcm91bmQgMTI6ICovCisgICAgICAgICAgICBzMCA9IFRlMFt0MCA+PiAyNF0gXiBUZTFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MyAmIDB4ZmZdIF4gcmtbNDhdOworICAgICAgICAgICAgczEgPSBUZTBbdDEgPj4gMjRdIF4gVGUxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRlMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDAgJiAweGZmXSBeIHJrWzQ5XTsKKyAgICAgICAgICAgIHMyID0gVGUwW3QyID4+IDI0XSBeIFRlMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QxICYgMHhmZl0gXiBya1s1MF07CisgICAgICAgICAgICBzMyA9IFRlMFt0MyA+PiAyNF0gXiBUZTFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MiAmIDB4ZmZdIF4gcmtbNTFdOworICAgICAgICAgICAgLyogcm91bmQgMTM6ICovCisgICAgICAgICAgICB0MCA9IFRlMFtzMCA+PiAyNF0gXiBUZTFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMyAmIDB4ZmZdIF4gcmtbNTJdOworICAgICAgICAgICAgdDEgPSBUZTBbczEgPj4gMjRdIF4gVGUxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRlMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZTNbczAgJiAweGZmXSBeIHJrWzUzXTsKKyAgICAgICAgICAgIHQyID0gVGUwW3MyID4+IDI0XSBeIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MxICYgMHhmZl0gXiBya1s1NF07CisgICAgICAgICAgICB0MyA9IFRlMFtzMyA+PiAyNF0gXiBUZTFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMiAmIDB4ZmZdIF4gcmtbNTVdOworICAgICAgICB9CisgICAgfQorICAgIHJrICs9IGtleS0+cm91bmRzIDw8IDI7CisjZWxzZSAgLyogIUZVTExfVU5ST0xMICovCisgICAgLyoKKyAgICAgKiBOciAtIDEgZnVsbCByb3VuZHM6CisgICAgICovCisgICAgciA9IGtleS0+cm91bmRzID4+IDE7CisgICAgZm9yICg7OykgeworICAgICAgICB0MCA9CisgICAgICAgICAgICBUZTBbKHMwID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUyWyhzMiA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZTNbKHMzICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzRdOworICAgICAgICB0MSA9CisgICAgICAgICAgICBUZTBbKHMxID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUyWyhzMyA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZTNbKHMwICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzVdOworICAgICAgICB0MiA9CisgICAgICAgICAgICBUZTBbKHMyID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUyWyhzMCA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZTNbKHMxICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzZdOworICAgICAgICB0MyA9CisgICAgICAgICAgICBUZTBbKHMzID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUyWyhzMSA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZTNbKHMyICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzddOworCisgICAgICAgIHJrICs9IDg7CisgICAgICAgIGlmICgtLXIgPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzMCA9CisgICAgICAgICAgICBUZTBbKHQwID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRlMVsodDEgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUyWyh0MiA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZTNbKHQzICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzBdOworICAgICAgICBzMSA9CisgICAgICAgICAgICBUZTBbKHQxID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRlMVsodDIgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUyWyh0MyA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZTNbKHQwICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzFdOworICAgICAgICBzMiA9CisgICAgICAgICAgICBUZTBbKHQyID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRlMVsodDMgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUyWyh0MCA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZTNbKHQxICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzJdOworICAgICAgICBzMyA9CisgICAgICAgICAgICBUZTBbKHQzID4+IDI0KSAgICAgICBdIF4KKyAgICAgICAgICAgIFRlMVsodDAgPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgVGUyWyh0MSA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICBUZTNbKHQyICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIHJrWzNdOworICAgIH0KKyNlbmRpZiAvKiA/RlVMTF9VTlJPTEwgKi8KKyAgICAvKgorCSAqIGFwcGx5IGxhc3Qgcm91bmQgYW5kCisJICogbWFwIGNpcGhlciBzdGF0ZSB0byBieXRlIGFycmF5IGJsb2NrOgorCSAqLworCXMwID0KKwkJKFRlMlsodDAgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwKSBeCisJCShUZTNbKHQxID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorCQkoVGUwWyh0MiA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKwkJKFRlMVsodDMgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisJCXJrWzBdOworCVBVVFUzMihvdXQgICAgICwgczApOworCXMxID0KKwkJKFRlMlsodDEgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwKSBeCisJCShUZTNbKHQyID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorCQkoVGUwWyh0MyA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKwkJKFRlMVsodDAgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisJCXJrWzFdOworCVBVVFUzMihvdXQgKyAgNCwgczEpOworCXMyID0KKwkJKFRlMlsodDIgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwKSBeCisJCShUZTNbKHQzID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorCQkoVGUwWyh0MCA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKwkJKFRlMVsodDEgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisJCXJrWzJdOworCVBVVFUzMihvdXQgKyAgOCwgczIpOworCXMzID0KKwkJKFRlMlsodDMgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwKSBeCisJCShUZTNbKHQwID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorCQkoVGUwWyh0MSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKwkJKFRlMVsodDIgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisJCXJrWzNdOworCVBVVFUzMihvdXQgKyAxMiwgczMpOworfQorCisvKgorICogRGVjcnlwdCBhIHNpbmdsZSBibG9jaworICogaW4gYW5kIG91dCBjYW4gb3ZlcmxhcAorICovCit2b2lkIEFFU19kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCSBjb25zdCBBRVNfS0VZICprZXkpIHsKKworCWNvbnN0IHUzMiAqcms7CisJdTMyIHMwLCBzMSwgczIsIHMzLCB0MCwgdDEsIHQyLCB0MzsKKyNpZm5kZWYgRlVMTF9VTlJPTEwKKwlpbnQgcjsKKyNlbmRpZiAvKiA/RlVMTF9VTlJPTEwgKi8KKworCWFzc2VydChpbiAmJiBvdXQgJiYga2V5KTsKKwlyayA9IGtleS0+cmRfa2V5OworCisJLyoKKwkgKiBtYXAgYnl0ZSBhcnJheSBibG9jayB0byBjaXBoZXIgc3RhdGUKKwkgKiBhbmQgYWRkIGluaXRpYWwgcm91bmQga2V5OgorCSAqLworICAgIHMwID0gR0VUVTMyKGluICAgICApIF4gcmtbMF07CisgICAgczEgPSBHRVRVMzIoaW4gKyAgNCkgXiBya1sxXTsKKyAgICBzMiA9IEdFVFUzMihpbiArICA4KSBeIHJrWzJdOworICAgIHMzID0gR0VUVTMyKGluICsgMTIpIF4gcmtbM107CisjaWZkZWYgRlVMTF9VTlJPTEwKKyAgICAvKiByb3VuZCAxOiAqLworICAgIHQwID0gVGQwW3MwID4+IDI0XSBeIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MxICYgMHhmZl0gXiBya1sgNF07CisgICAgdDEgPSBUZDBbczEgPj4gMjRdIF4gVGQxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRkMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZDNbczIgJiAweGZmXSBeIHJrWyA1XTsKKyAgICB0MiA9IFRkMFtzMiA+PiAyNF0gXiBUZDFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMyAmIDB4ZmZdIF4gcmtbIDZdOworICAgIHQzID0gVGQwW3MzID4+IDI0XSBeIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MwICYgMHhmZl0gXiBya1sgN107CisgICAgLyogcm91bmQgMjogKi8KKyAgICBzMCA9IFRkMFt0MCA+PiAyNF0gXiBUZDFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MSAmIDB4ZmZdIF4gcmtbIDhdOworICAgIHMxID0gVGQwW3QxID4+IDI0XSBeIFRkMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QyICYgMHhmZl0gXiBya1sgOV07CisgICAgczIgPSBUZDBbdDIgPj4gMjRdIF4gVGQxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRkMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDMgJiAweGZmXSBeIHJrWzEwXTsKKyAgICBzMyA9IFRkMFt0MyA+PiAyNF0gXiBUZDFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MCAmIDB4ZmZdIF4gcmtbMTFdOworICAgIC8qIHJvdW5kIDM6ICovCisgICAgdDAgPSBUZDBbczAgPj4gMjRdIF4gVGQxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRkMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZDNbczEgJiAweGZmXSBeIHJrWzEyXTsKKyAgICB0MSA9IFRkMFtzMSA+PiAyNF0gXiBUZDFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMiAmIDB4ZmZdIF4gcmtbMTNdOworICAgIHQyID0gVGQwW3MyID4+IDI0XSBeIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MzICYgMHhmZl0gXiBya1sxNF07CisgICAgdDMgPSBUZDBbczMgPj4gMjRdIF4gVGQxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRkMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZDNbczAgJiAweGZmXSBeIHJrWzE1XTsKKyAgICAvKiByb3VuZCA0OiAqLworICAgIHMwID0gVGQwW3QwID4+IDI0XSBeIFRkMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QxICYgMHhmZl0gXiBya1sxNl07CisgICAgczEgPSBUZDBbdDEgPj4gMjRdIF4gVGQxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRkMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDIgJiAweGZmXSBeIHJrWzE3XTsKKyAgICBzMiA9IFRkMFt0MiA+PiAyNF0gXiBUZDFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MyAmIDB4ZmZdIF4gcmtbMThdOworICAgIHMzID0gVGQwW3QzID4+IDI0XSBeIFRkMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QwICYgMHhmZl0gXiBya1sxOV07CisgICAgLyogcm91bmQgNTogKi8KKyAgICB0MCA9IFRkMFtzMCA+PiAyNF0gXiBUZDFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMSAmIDB4ZmZdIF4gcmtbMjBdOworICAgIHQxID0gVGQwW3MxID4+IDI0XSBeIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MyICYgMHhmZl0gXiBya1syMV07CisgICAgdDIgPSBUZDBbczIgPj4gMjRdIF4gVGQxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRkMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZDNbczMgJiAweGZmXSBeIHJrWzIyXTsKKyAgICB0MyA9IFRkMFtzMyA+PiAyNF0gXiBUZDFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMCAmIDB4ZmZdIF4gcmtbMjNdOworICAgIC8qIHJvdW5kIDY6ICovCisgICAgczAgPSBUZDBbdDAgPj4gMjRdIF4gVGQxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRkMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDEgJiAweGZmXSBeIHJrWzI0XTsKKyAgICBzMSA9IFRkMFt0MSA+PiAyNF0gXiBUZDFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MiAmIDB4ZmZdIF4gcmtbMjVdOworICAgIHMyID0gVGQwW3QyID4+IDI0XSBeIFRkMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QzICYgMHhmZl0gXiBya1syNl07CisgICAgczMgPSBUZDBbdDMgPj4gMjRdIF4gVGQxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRkMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDAgJiAweGZmXSBeIHJrWzI3XTsKKyAgICAvKiByb3VuZCA3OiAqLworICAgIHQwID0gVGQwW3MwID4+IDI0XSBeIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MxICYgMHhmZl0gXiBya1syOF07CisgICAgdDEgPSBUZDBbczEgPj4gMjRdIF4gVGQxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRkMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZDNbczIgJiAweGZmXSBeIHJrWzI5XTsKKyAgICB0MiA9IFRkMFtzMiA+PiAyNF0gXiBUZDFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMyAmIDB4ZmZdIF4gcmtbMzBdOworICAgIHQzID0gVGQwW3MzID4+IDI0XSBeIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MwICYgMHhmZl0gXiBya1szMV07CisgICAgLyogcm91bmQgODogKi8KKyAgICBzMCA9IFRkMFt0MCA+PiAyNF0gXiBUZDFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MSAmIDB4ZmZdIF4gcmtbMzJdOworICAgIHMxID0gVGQwW3QxID4+IDI0XSBeIFRkMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QyICYgMHhmZl0gXiBya1szM107CisgICAgczIgPSBUZDBbdDIgPj4gMjRdIF4gVGQxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRkMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDMgJiAweGZmXSBeIHJrWzM0XTsKKyAgICBzMyA9IFRkMFt0MyA+PiAyNF0gXiBUZDFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MCAmIDB4ZmZdIF4gcmtbMzVdOworICAgIC8qIHJvdW5kIDk6ICovCisgICAgdDAgPSBUZDBbczAgPj4gMjRdIF4gVGQxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRkMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZDNbczEgJiAweGZmXSBeIHJrWzM2XTsKKyAgICB0MSA9IFRkMFtzMSA+PiAyNF0gXiBUZDFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMiAmIDB4ZmZdIF4gcmtbMzddOworICAgIHQyID0gVGQwW3MyID4+IDI0XSBeIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MzICYgMHhmZl0gXiBya1szOF07CisgICAgdDMgPSBUZDBbczMgPj4gMjRdIF4gVGQxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRkMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZDNbczAgJiAweGZmXSBeIHJrWzM5XTsKKyAgICBpZiAoa2V5LT5yb3VuZHMgPiAxMCkgeworICAgICAgICAvKiByb3VuZCAxMDogKi8KKyAgICAgICAgczAgPSBUZDBbdDAgPj4gMjRdIF4gVGQxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRkMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDEgJiAweGZmXSBeIHJrWzQwXTsKKyAgICAgICAgczEgPSBUZDBbdDEgPj4gMjRdIF4gVGQxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRkMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDIgJiAweGZmXSBeIHJrWzQxXTsKKyAgICAgICAgczIgPSBUZDBbdDIgPj4gMjRdIF4gVGQxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRkMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDMgJiAweGZmXSBeIHJrWzQyXTsKKyAgICAgICAgczMgPSBUZDBbdDMgPj4gMjRdIF4gVGQxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRkMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDAgJiAweGZmXSBeIHJrWzQzXTsKKyAgICAgICAgLyogcm91bmQgMTE6ICovCisgICAgICAgIHQwID0gVGQwW3MwID4+IDI0XSBeIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MxICYgMHhmZl0gXiBya1s0NF07CisgICAgICAgIHQxID0gVGQwW3MxID4+IDI0XSBeIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MyICYgMHhmZl0gXiBya1s0NV07CisgICAgICAgIHQyID0gVGQwW3MyID4+IDI0XSBeIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MzICYgMHhmZl0gXiBya1s0Nl07CisgICAgICAgIHQzID0gVGQwW3MzID4+IDI0XSBeIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MwICYgMHhmZl0gXiBya1s0N107CisgICAgICAgIGlmIChrZXktPnJvdW5kcyA+IDEyKSB7CisgICAgICAgICAgICAvKiByb3VuZCAxMjogKi8KKyAgICAgICAgICAgIHMwID0gVGQwW3QwID4+IDI0XSBeIFRkMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QxICYgMHhmZl0gXiBya1s0OF07CisgICAgICAgICAgICBzMSA9IFRkMFt0MSA+PiAyNF0gXiBUZDFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MiAmIDB4ZmZdIF4gcmtbNDldOworICAgICAgICAgICAgczIgPSBUZDBbdDIgPj4gMjRdIF4gVGQxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRkMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDMgJiAweGZmXSBeIHJrWzUwXTsKKyAgICAgICAgICAgIHMzID0gVGQwW3QzID4+IDI0XSBeIFRkMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QwICYgMHhmZl0gXiBya1s1MV07CisgICAgICAgICAgICAvKiByb3VuZCAxMzogKi8KKyAgICAgICAgICAgIHQwID0gVGQwW3MwID4+IDI0XSBeIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MxICYgMHhmZl0gXiBya1s1Ml07CisgICAgICAgICAgICB0MSA9IFRkMFtzMSA+PiAyNF0gXiBUZDFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMiAmIDB4ZmZdIF4gcmtbNTNdOworICAgICAgICAgICAgdDIgPSBUZDBbczIgPj4gMjRdIF4gVGQxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRkMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZDNbczMgJiAweGZmXSBeIHJrWzU0XTsKKyAgICAgICAgICAgIHQzID0gVGQwW3MzID4+IDI0XSBeIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MwICYgMHhmZl0gXiBya1s1NV07CisgICAgICAgIH0KKyAgICB9CisJcmsgKz0ga2V5LT5yb3VuZHMgPDwgMjsKKyNlbHNlICAvKiAhRlVMTF9VTlJPTEwgKi8KKyAgICAvKgorICAgICAqIE5yIC0gMSBmdWxsIHJvdW5kczoKKyAgICAgKi8KKyAgICByID0ga2V5LT5yb3VuZHMgPj4gMTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHQwID0KKyAgICAgICAgICAgIFRkMFsoczAgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGQxWyhzMyA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZDJbKHMyID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkM1soczEgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbNF07CisgICAgICAgIHQxID0KKyAgICAgICAgICAgIFRkMFsoczEgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGQxWyhzMCA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZDJbKHMzID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkM1soczIgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbNV07CisgICAgICAgIHQyID0KKyAgICAgICAgICAgIFRkMFsoczIgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGQxWyhzMSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZDJbKHMwID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkM1soczMgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbNl07CisgICAgICAgIHQzID0KKyAgICAgICAgICAgIFRkMFsoczMgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGQxWyhzMiA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZDJbKHMxID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkM1soczAgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbN107CisKKyAgICAgICAgcmsgKz0gODsKKyAgICAgICAgaWYgKC0tciA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHMwID0KKyAgICAgICAgICAgIFRkMFsodDAgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGQxWyh0MyA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZDJbKHQyID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkM1sodDEgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbMF07CisgICAgICAgIHMxID0KKyAgICAgICAgICAgIFRkMFsodDEgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGQxWyh0MCA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZDJbKHQzID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkM1sodDIgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbMV07CisgICAgICAgIHMyID0KKyAgICAgICAgICAgIFRkMFsodDIgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGQxWyh0MSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZDJbKHQwID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkM1sodDMgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbMl07CisgICAgICAgIHMzID0KKyAgICAgICAgICAgIFRkMFsodDMgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGQxWyh0MiA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZDJbKHQxID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkM1sodDAgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbM107CisgICAgfQorI2VuZGlmIC8qID9GVUxMX1VOUk9MTCAqLworICAgIC8qCisJICogYXBwbHkgbGFzdCByb3VuZCBhbmQKKwkgKiBtYXAgY2lwaGVyIHN0YXRlIHRvIGJ5dGUgYXJyYXkgYmxvY2s6CisJICovCisgICAJczAgPQorICAgCQkoVGQ0Wyh0MCA+PiAyNCkgICAgICAgXSA8PCAyNCkgXgorICAgCQkoVGQ0Wyh0MyA+PiAxNikgJiAweGZmXSA8PCAxNikgXgorICAgCQkoVGQ0Wyh0MiA+PiAgOCkgJiAweGZmXSA8PCAgOCkgXgorICAgCQkoVGQ0Wyh0MSAgICAgICkgJiAweGZmXSkgICAgICAgXgorICAgCQlya1swXTsKKwlQVVRVMzIob3V0ICAgICAsIHMwKTsKKyAgIAlzMSA9CisgICAJCShUZDRbKHQxID4+IDI0KSAgICAgICBdIDw8IDI0KSBeCisgICAJCShUZDRbKHQwID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCisgICAJCShUZDRbKHQzID4+ICA4KSAmIDB4ZmZdIDw8ICA4KSBeCisgICAJCShUZDRbKHQyICAgICAgKSAmIDB4ZmZdKSAgICAgICBeCisgICAJCXJrWzFdOworCVBVVFUzMihvdXQgKyAgNCwgczEpOworICAgCXMyID0KKyAgIAkJKFRkNFsodDIgPj4gMjQpICAgICAgIF0gPDwgMjQpIF4KKyAgIAkJKFRkNFsodDEgPj4gMTYpICYgMHhmZl0gPDwgMTYpIF4KKyAgIAkJKFRkNFsodDAgPj4gIDgpICYgMHhmZl0gPDwgIDgpIF4KKyAgIAkJKFRkNFsodDMgICAgICApICYgMHhmZl0pICAgICAgIF4KKyAgIAkJcmtbMl07CisJUFVUVTMyKG91dCArICA4LCBzMik7CisgICAJczMgPQorICAgCQkoVGQ0Wyh0MyA+PiAyNCkgICAgICAgXSA8PCAyNCkgXgorICAgCQkoVGQ0Wyh0MiA+PiAxNikgJiAweGZmXSA8PCAxNikgXgorICAgCQkoVGQ0Wyh0MSA+PiAgOCkgJiAweGZmXSA8PCAgOCkgXgorICAgCQkoVGQ0Wyh0MCAgICAgICkgJiAweGZmXSkgICAgICAgXgorICAgCQlya1szXTsKKwlQVVRVMzIob3V0ICsgMTIsIHMzKTsKK30KKworI2Vsc2UgLyogQUVTX0FTTSAqLworCitzdGF0aWMgY29uc3QgdTggVGU0WzI1Nl0gPSB7CisgICAgMHg2M1UsIDB4N2NVLCAweDc3VSwgMHg3YlUsIDB4ZjJVLCAweDZiVSwgMHg2ZlUsIDB4YzVVLAorICAgIDB4MzBVLCAweDAxVSwgMHg2N1UsIDB4MmJVLCAweGZlVSwgMHhkN1UsIDB4YWJVLCAweDc2VSwKKyAgICAweGNhVSwgMHg4MlUsIDB4YzlVLCAweDdkVSwgMHhmYVUsIDB4NTlVLCAweDQ3VSwgMHhmMFUsCisgICAgMHhhZFUsIDB4ZDRVLCAweGEyVSwgMHhhZlUsIDB4OWNVLCAweGE0VSwgMHg3MlUsIDB4YzBVLAorICAgIDB4YjdVLCAweGZkVSwgMHg5M1UsIDB4MjZVLCAweDM2VSwgMHgzZlUsIDB4ZjdVLCAweGNjVSwKKyAgICAweDM0VSwgMHhhNVUsIDB4ZTVVLCAweGYxVSwgMHg3MVUsIDB4ZDhVLCAweDMxVSwgMHgxNVUsCisgICAgMHgwNFUsIDB4YzdVLCAweDIzVSwgMHhjM1UsIDB4MThVLCAweDk2VSwgMHgwNVUsIDB4OWFVLAorICAgIDB4MDdVLCAweDEyVSwgMHg4MFUsIDB4ZTJVLCAweGViVSwgMHgyN1UsIDB4YjJVLCAweDc1VSwKKyAgICAweDA5VSwgMHg4M1UsIDB4MmNVLCAweDFhVSwgMHgxYlUsIDB4NmVVLCAweDVhVSwgMHhhMFUsCisgICAgMHg1MlUsIDB4M2JVLCAweGQ2VSwgMHhiM1UsIDB4MjlVLCAweGUzVSwgMHgyZlUsIDB4ODRVLAorICAgIDB4NTNVLCAweGQxVSwgMHgwMFUsIDB4ZWRVLCAweDIwVSwgMHhmY1UsIDB4YjFVLCAweDViVSwKKyAgICAweDZhVSwgMHhjYlUsIDB4YmVVLCAweDM5VSwgMHg0YVUsIDB4NGNVLCAweDU4VSwgMHhjZlUsCisgICAgMHhkMFUsIDB4ZWZVLCAweGFhVSwgMHhmYlUsIDB4NDNVLCAweDRkVSwgMHgzM1UsIDB4ODVVLAorICAgIDB4NDVVLCAweGY5VSwgMHgwMlUsIDB4N2ZVLCAweDUwVSwgMHgzY1UsIDB4OWZVLCAweGE4VSwKKyAgICAweDUxVSwgMHhhM1UsIDB4NDBVLCAweDhmVSwgMHg5MlUsIDB4OWRVLCAweDM4VSwgMHhmNVUsCisgICAgMHhiY1UsIDB4YjZVLCAweGRhVSwgMHgyMVUsIDB4MTBVLCAweGZmVSwgMHhmM1UsIDB4ZDJVLAorICAgIDB4Y2RVLCAweDBjVSwgMHgxM1UsIDB4ZWNVLCAweDVmVSwgMHg5N1UsIDB4NDRVLCAweDE3VSwKKyAgICAweGM0VSwgMHhhN1UsIDB4N2VVLCAweDNkVSwgMHg2NFUsIDB4NWRVLCAweDE5VSwgMHg3M1UsCisgICAgMHg2MFUsIDB4ODFVLCAweDRmVSwgMHhkY1UsIDB4MjJVLCAweDJhVSwgMHg5MFUsIDB4ODhVLAorICAgIDB4NDZVLCAweGVlVSwgMHhiOFUsIDB4MTRVLCAweGRlVSwgMHg1ZVUsIDB4MGJVLCAweGRiVSwKKyAgICAweGUwVSwgMHgzMlUsIDB4M2FVLCAweDBhVSwgMHg0OVUsIDB4MDZVLCAweDI0VSwgMHg1Y1UsCisgICAgMHhjMlUsIDB4ZDNVLCAweGFjVSwgMHg2MlUsIDB4OTFVLCAweDk1VSwgMHhlNFUsIDB4NzlVLAorICAgIDB4ZTdVLCAweGM4VSwgMHgzN1UsIDB4NmRVLCAweDhkVSwgMHhkNVUsIDB4NGVVLCAweGE5VSwKKyAgICAweDZjVSwgMHg1NlUsIDB4ZjRVLCAweGVhVSwgMHg2NVUsIDB4N2FVLCAweGFlVSwgMHgwOFUsCisgICAgMHhiYVUsIDB4NzhVLCAweDI1VSwgMHgyZVUsIDB4MWNVLCAweGE2VSwgMHhiNFUsIDB4YzZVLAorICAgIDB4ZThVLCAweGRkVSwgMHg3NFUsIDB4MWZVLCAweDRiVSwgMHhiZFUsIDB4OGJVLCAweDhhVSwKKyAgICAweDcwVSwgMHgzZVUsIDB4YjVVLCAweDY2VSwgMHg0OFUsIDB4MDNVLCAweGY2VSwgMHgwZVUsCisgICAgMHg2MVUsIDB4MzVVLCAweDU3VSwgMHhiOVUsIDB4ODZVLCAweGMxVSwgMHgxZFUsIDB4OWVVLAorICAgIDB4ZTFVLCAweGY4VSwgMHg5OFUsIDB4MTFVLCAweDY5VSwgMHhkOVUsIDB4OGVVLCAweDk0VSwKKyAgICAweDliVSwgMHgxZVUsIDB4ODdVLCAweGU5VSwgMHhjZVUsIDB4NTVVLCAweDI4VSwgMHhkZlUsCisgICAgMHg4Y1UsIDB4YTFVLCAweDg5VSwgMHgwZFUsIDB4YmZVLCAweGU2VSwgMHg0MlUsIDB4NjhVLAorICAgIDB4NDFVLCAweDk5VSwgMHgyZFUsIDB4MGZVLCAweGIwVSwgMHg1NFUsIDB4YmJVLCAweDE2VQorfTsKK3N0YXRpYyBjb25zdCB1MzIgcmNvbltdID0geworCTB4MDEwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDgwMDAwMDAsCisJMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDAwMDAwMCwKKwkweDFCMDAwMDAwLCAweDM2MDAwMDAwLCAvKiBmb3IgMTI4LWJpdCBibG9ja3MsIFJpam5kYWVsIG5ldmVyIHVzZXMgbW9yZSB0aGFuIDEwIHJjb24gdmFsdWVzICovCit9OworCisvKioKKyAqIEV4cGFuZCB0aGUgY2lwaGVyIGtleSBpbnRvIHRoZSBlbmNyeXB0aW9uIGtleSBzY2hlZHVsZS4KKyAqLworaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQlBRVNfS0VZICprZXkpIHsKKwl1MzIgKnJrOworICAgCWludCBpID0gMDsKKwl1MzIgdGVtcDsKKworCWlmICghdXNlcktleSB8fCAha2V5KQorCQlyZXR1cm4gLTE7CisJaWYgKGJpdHMgIT0gMTI4ICYmIGJpdHMgIT0gMTkyICYmIGJpdHMgIT0gMjU2KQorCQlyZXR1cm4gLTI7CisKKwlyayA9IGtleS0+cmRfa2V5OworCisJaWYgKGJpdHM9PTEyOCkKKwkJa2V5LT5yb3VuZHMgPSAxMDsKKwllbHNlIGlmIChiaXRzPT0xOTIpCisJCWtleS0+cm91bmRzID0gMTI7CisJZWxzZQorCQlrZXktPnJvdW5kcyA9IDE0OworCisJcmtbMF0gPSBHRVRVMzIodXNlcktleSAgICAgKTsKKwlya1sxXSA9IEdFVFUzMih1c2VyS2V5ICsgIDQpOworCXJrWzJdID0gR0VUVTMyKHVzZXJLZXkgKyAgOCk7CisJcmtbM10gPSBHRVRVMzIodXNlcktleSArIDEyKTsKKwlpZiAoYml0cyA9PSAxMjgpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRlbXAgID0gcmtbM107CisJCQlya1s0XSA9IHJrWzBdIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8IDI0KSBeCisJCQkJKFRlNFsodGVtcCA+PiAgOCkgJiAweGZmXSA8PCAxNikgXgorCQkJCShUZTRbKHRlbXAgICAgICApICYgMHhmZl0gPDwgOCkgXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0pIF4KKwkJCQlyY29uW2ldOworCQkJcmtbNV0gPSBya1sxXSBeIHJrWzRdOworCQkJcmtbNl0gPSBya1syXSBeIHJrWzVdOworCQkJcmtbN10gPSBya1szXSBeIHJrWzZdOworCQkJaWYgKCsraSA9PSAxMCkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmsgKz0gNDsKKwkJfQorCX0KKwlya1s0XSA9IEdFVFUzMih1c2VyS2V5ICsgMTYpOworCXJrWzVdID0gR0VUVTMyKHVzZXJLZXkgKyAyMCk7CisJaWYgKGJpdHMgPT0gMTkyKSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wID0gcmtbIDVdOworCQkJcmtbIDZdID0gcmtbIDBdIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8IDI0KSBeCisJCQkJKFRlNFsodGVtcCA+PiAgOCkgJiAweGZmXSA8PCAxNikgXgorCQkJCShUZTRbKHRlbXAgICAgICApICYgMHhmZl0gPDwgOCkgXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0pIF4KKwkJCQlyY29uW2ldOworCQkJcmtbIDddID0gcmtbIDFdIF4gcmtbIDZdOworCQkJcmtbIDhdID0gcmtbIDJdIF4gcmtbIDddOworCQkJcmtbIDldID0gcmtbIDNdIF4gcmtbIDhdOworCQkJaWYgKCsraSA9PSA4KSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlya1sxMF0gPSBya1sgNF0gXiBya1sgOV07CisJCQlya1sxMV0gPSBya1sgNV0gXiBya1sxMF07CisJCQlyayArPSA2OworCQl9CisJfQorCXJrWzZdID0gR0VUVTMyKHVzZXJLZXkgKyAyNCk7CisJcmtbN10gPSBHRVRVMzIodXNlcktleSArIDI4KTsKKwlpZiAoYml0cyA9PSAyNTYpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRlbXAgPSBya1sgN107CisJCQlya1sgOF0gPSBya1sgMF0gXgorCQkJCShUZTRbKHRlbXAgPj4gMTYpICYgMHhmZl0gPDwgMjQpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+ICA4KSAmIDB4ZmZdIDw8IDE2KSBeCisJCQkJKFRlNFsodGVtcCAgICAgICkgJiAweGZmXSA8PCA4KSBeCisJCQkJKFRlNFsodGVtcCA+PiAyNCkgICAgICAgXSkgXgorCQkJCXJjb25baV07CisJCQlya1sgOV0gPSBya1sgMV0gXiBya1sgOF07CisJCQlya1sxMF0gPSBya1sgMl0gXiBya1sgOV07CisJCQlya1sxMV0gPSBya1sgM10gXiBya1sxMF07CisJCQlpZiAoKytpID09IDcpIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXRlbXAgPSBya1sxMV07CisJCQlya1sxMl0gPSBya1sgNF0gXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0gPDwgMjQpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCisJCQkJKFRlNFsodGVtcCA+PiAgOCkgJiAweGZmXSA8PCA4KSBeCisJCQkJKFRlNFsodGVtcCAgICAgICkgJiAweGZmXSk7CisJCQlya1sxM10gPSBya1sgNV0gXiBya1sxMl07CisJCQlya1sxNF0gPSBya1sgNl0gXiBya1sxM107CisJCQlya1sxNV0gPSBya1sgN10gXiBya1sxNF07CisKKwkJCXJrICs9IDg7CisgICAgICAgIAl9CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIEV4cGFuZCB0aGUgY2lwaGVyIGtleSBpbnRvIHRoZSBkZWNyeXB0aW9uIGtleSBzY2hlZHVsZS4KKyAqLworaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQkgQUVTX0tFWSAqa2V5KSB7CisKKyAgICAgICAgdTMyICpyazsKKwlpbnQgaSwgaiwgc3RhdHVzOworCXUzMiB0ZW1wOworCisJLyogZmlyc3QsIHN0YXJ0IHdpdGggYW4gZW5jcnlwdGlvbiBzY2hlZHVsZSAqLworCXN0YXR1cyA9IEFFU19zZXRfZW5jcnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJrID0ga2V5LT5yZF9rZXk7CisKKwkvKiBpbnZlcnQgdGhlIG9yZGVyIG9mIHRoZSByb3VuZCBrZXlzOiAqLworCWZvciAoaSA9IDAsIGogPSA0KihrZXktPnJvdW5kcyk7IGkgPCBqOyBpICs9IDQsIGogLT0gNCkgeworCQl0ZW1wID0gcmtbaSAgICBdOyBya1tpICAgIF0gPSBya1tqICAgIF07IHJrW2ogICAgXSA9IHRlbXA7CisJCXRlbXAgPSBya1tpICsgMV07IHJrW2kgKyAxXSA9IHJrW2ogKyAxXTsgcmtbaiArIDFdID0gdGVtcDsKKwkJdGVtcCA9IHJrW2kgKyAyXTsgcmtbaSArIDJdID0gcmtbaiArIDJdOyBya1tqICsgMl0gPSB0ZW1wOworCQl0ZW1wID0gcmtbaSArIDNdOyBya1tpICsgM10gPSBya1tqICsgM107IHJrW2ogKyAzXSA9IHRlbXA7CisJfQorCS8qIGFwcGx5IHRoZSBpbnZlcnNlIE1peENvbHVtbiB0cmFuc2Zvcm0gdG8gYWxsIHJvdW5kIGtleXMgYnV0IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3Q6ICovCisJZm9yIChpID0gMTsgaSA8IChrZXktPnJvdW5kcyk7IGkrKykgeworCQlyayArPSA0OworCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCQl1MzIgdHAxLCB0cDIsIHRwNCwgdHA4LCB0cDksIHRwYiwgdHBkLCB0cGUsIG07CisKKwkJCXRwMSA9IHJrW2pdOworCQkJbSA9IHRwMSAmIDB4ODA4MDgwODA7CisJCQl0cDIgPSAoKHRwMSAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4KKwkJCQkoKG0gLSAobSA+PiA3KSkgJiAweDFiMWIxYjFiKTsKKwkJCW0gPSB0cDIgJiAweDgwODA4MDgwOworCQkJdHA0ID0gKCh0cDIgJiAweDdmN2Y3ZjdmKSA8PCAxKSBeCisJCQkJKChtIC0gKG0gPj4gNykpICYgMHgxYjFiMWIxYik7CisJCQltID0gdHA0ICYgMHg4MDgwODA4MDsKKwkJCXRwOCA9ICgodHA0ICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgobSAtIChtID4+IDcpKSAmIDB4MWIxYjFiMWIpOworCQkJdHA5ID0gdHA4IF4gdHAxOworCQkJdHBiID0gdHA5IF4gdHAyOworCQkJdHBkID0gdHA5IF4gdHA0OworCQkJdHBlID0gdHA4IF4gdHA0IF4gdHAyOworI2lmIGRlZmluZWQoUk9UQVRFKQorCQkJcmtbal0gPSB0cGUgXiBST1RBVEUodHBkLDE2KSBeCisJCQkJUk9UQVRFKHRwOSwyNCkgXiBST1RBVEUodHBiLDgpOworI2Vsc2UKKwkJCXJrW2pdID0gdHBlIF4gKHRwZCA+PiAxNikgXiAodHBkIDw8IDE2KSBeIAorCQkJCSh0cDkgPj4gOCkgXiAodHA5IDw8IDI0KSBeCisJCQkJKHRwYiA+PiAyNCkgXiAodHBiIDw8IDgpOworI2VuZGlmCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBBRVNfQVNNICovCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfbG9jYWwuaCBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTgzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfbG9jYWwuaApAQCAtMCwwICsxLDg3IEBACisvKiBjcnlwdG8vYWVzL2Flcy5oIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpZm5kZWYgSEVBREVSX0FFU19MT0NMX0gKKyNkZWZpbmUgSEVBREVSX0FFU19MT0NMX0gKKworI2lmZGVmIE9QRU5TU0xfTk9fQUVTCisjZXJyb3IgQUVTIGlzIGRpc2FibGVkLgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpKQorIyBkZWZpbmUgU1dBUCh4KSAoX2xyb3RsKHgsIDgpICYgMHgwMGZmMDBmZiB8IF9scm90cih4LCA4KSAmIDB4ZmYwMGZmMDApCisjIGRlZmluZSBHRVRVMzIocCkgU1dBUCgqKCh1MzIgKikocCkpKQorIyBkZWZpbmUgUFVUVTMyKGN0LCBzdCkgeyAqKCh1MzIgKikoY3QpKSA9IFNXQVAoKHN0KSk7IH0KKyNlbHNlCisjIGRlZmluZSBHRVRVMzIocHQpICgoKHUzMikocHQpWzBdIDw8IDI0KSBeICgodTMyKShwdClbMV0gPDwgMTYpIF4gKCh1MzIpKHB0KVsyXSA8PCAgOCkgXiAoKHUzMikocHQpWzNdKSkKKyMgZGVmaW5lIFBVVFUzMihjdCwgc3QpIHsgKGN0KVswXSA9ICh1OCkoKHN0KSA+PiAyNCk7IChjdClbMV0gPSAodTgpKChzdCkgPj4gMTYpOyAoY3QpWzJdID0gKHU4KSgoc3QpID4+ICA4KTsgKGN0KVszXSA9ICh1OCkoc3QpOyB9CisjZW5kaWYKKworI2lmZGVmIEFFU19MT05HCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdTMyOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKyNlbmRpZgordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKKyNkZWZpbmUgTUFYS0MgICAoMjU2LzMyKQorI2RlZmluZSBNQVhLQiAgICgyNTYvOCkKKyNkZWZpbmUgTUFYTlIgICAxNAorCisvKiBUaGlzIGNvbnRyb2xzIGxvb3AtdW5yb2xsaW5nIGluIGFlc19jb3JlLmMgKi8KKyN1bmRlZiBGVUxMX1VOUk9MTAorCisjZW5kaWYgLyogIUhFQURFUl9BRVNfTE9DTF9IICovCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jYmNfZW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxZGY4MwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMuYwpAQCAtMCwwICsxLDYxIEBACisvKiBjcnlwdG8vZGVzL2NiY19lbmMuYyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjZGVmaW5lIENCQ19FTkNfQ19fRE9OVF9VUERBVEVfSVYKKworI2luY2x1ZGUgIm9wZW5zc2xfbmNiY19lbmMuYyIgLyogZGVzX2NiY19lbmNyeXB0ICovCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jZmIxMjguYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGJjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9jZmIxMjguYwpAQCAtMCwwICsxLDI1MCBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgIm9wZW5zc2xfbW9kZXMuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBNT0RFU19ERUJVRworIyBpZm5kZWYgTkRFQlVHCisjICBkZWZpbmUgTkRFQlVHCisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2RlZmluZSBTVFJJQ1RfQUxJR05NRU5UCisjaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IFwKKyAgICBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBcCisgICAgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCisjICB1bmRlZiBTVFJJQ1RfQUxJR05NRU5UCisjZW5kaWYKKworLyogVGhlIGlucHV0IGFuZCBvdXRwdXQgZW5jcnlwdGVkIGFzIHRob3VnaCAxMjhiaXQgY2ZiIG1vZGUgaXMgYmVpbmcKKyAqIHVzZWQuICBUaGUgZXh0cmEgc3RhdGUgaW5mb3JtYXRpb24gdG8gcmVjb3JkIGhvdyBtdWNoIG9mIHRoZQorICogMTI4Yml0IGJsb2NrIHdlIGhhdmUgdXNlZCBpcyBjb250YWluZWQgaW4gKm51bTsKKyAqLwordm9pZCBDUllQVE9fY2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jaykKK3sKKyAgICB1bnNpZ25lZCBpbnQgbjsKKyAgICBzaXplX3QgbCA9IDA7CisKKyAgICBhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7CisKKyAgICBuID0gKm51bTsKKworICAgIGlmIChlbmMpIHsKKyNpZiAhZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKwlpZiAoMTYlc2l6ZW9mKHNpemVfdCkgPT0gMCkgZG8gewkvKiBhbHdheXMgdHJ1ZSBhY3R1YWxseSAqLworCQl3aGlsZSAobiAmJiBsZW4pIHsKKwkJCSoob3V0KyspID0gaXZlY1tuXSBePSAqKGluKyspOworCQkJLS1sZW47CisJCQluID0gKG4rMSkgJSAxNjsKKwkJfQorI2lmIGRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKwkJaWYgKCgoc2l6ZV90KWlufChzaXplX3Qpb3V0fChzaXplX3QpaXZlYyklc2l6ZW9mKHNpemVfdCkgIT0gMCkKKwkJCWJyZWFrOworI2VuZGlmCisJCXdoaWxlIChsZW4+PTE2KSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQkJZm9yIChuPTA7IG48MTY7IG4rPXNpemVvZihzaXplX3QpKSB7CisJCQkJKihzaXplX3QqKShvdXQrbikgPQorCQkJCSooc2l6ZV90KikoaXZlYytuKSBePSAqKGNvbnN0IHNpemVfdCopKGluK24pOworCQkJfQorCQkJbGVuIC09IDE2OworCQkJb3V0ICs9IDE2OworCQkJaW4gICs9IDE2OworCQl9CisJCW4gPSAwOworCQlpZiAobGVuKSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQkJd2hpbGUgKGxlbi0tKSB7CisJCQkJb3V0W25dID0gaXZlY1tuXSBePSBpbltuXTsKKwkJCQkrK247CisJCQl9CisJCX0KKwkJKm51bSA9IG47CisJCXJldHVybjsKKwl9IHdoaWxlICgwKTsKKwkvKiB0aGUgcmVzdCB3b3VsZCBiZSBjb21tb25seSBlbGltaW5hdGVkIGJ5IHg4NiogY29tcGlsZXIgKi8KKyNlbmRpZgorCXdoaWxlIChsPGxlbikgeworCQlpZiAobiA9PSAwKSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQl9CisJCW91dFtsXSA9IGl2ZWNbbl0gXj0gaW5bbF07CisJCSsrbDsKKwkJbiA9IChuKzEpICUgMTY7CisJfQorCSpudW0gPSBuOworICAgIH0gZWxzZSB7CisjaWYgIWRlZmluZWQoT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQpCisJaWYgKDE2JXNpemVvZihzaXplX3QpID09IDApIGRvIHsJLyogYWx3YXlzIHRydWUgYWN0dWFsbHkgKi8KKwkJd2hpbGUgKG4gJiYgbGVuKSB7CisJCQl1bnNpZ25lZCBjaGFyIGM7CisJCQkqKG91dCsrKSA9IGl2ZWNbbl0gXiAoYyA9ICooaW4rKykpOyBpdmVjW25dID0gYzsKKwkJCS0tbGVuOworCQkJbiA9IChuKzEpICUgMTY7CisgCQl9CisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQlpZiAoKChzaXplX3QpaW58KHNpemVfdClvdXR8KHNpemVfdClpdmVjKSVzaXplb2Yoc2l6ZV90KSAhPSAwKQorCQkJYnJlYWs7CisjZW5kaWYKKwkJd2hpbGUgKGxlbj49MTYpIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGl2ZWMsIGtleSk7CisJCQlmb3IgKG49MDsgbjwxNjsgbis9c2l6ZW9mKHNpemVfdCkpIHsKKwkJCQlzaXplX3QgdCA9ICooY29uc3Qgc2l6ZV90KikoaW4rbik7CisJCQkJKihzaXplX3QqKShvdXQrbikgPSAqKGNvbnN0IHNpemVfdCopKGl2ZWMrbikgXiB0OworCQkJCSooc2l6ZV90KikoaXZlYytuKSA9IHQ7CisJCQl9CisJCQlsZW4gLT0gMTY7CisJCQlvdXQgKz0gMTY7CisJCQlpbiAgKz0gMTY7CisJCX0KKwkJbiA9IDA7CisJCWlmIChsZW4pIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGl2ZWMsIGtleSk7CisJCQl3aGlsZSAobGVuLS0pIHsKKwkJCQl1bnNpZ25lZCBjaGFyIGM7CisJCQkJb3V0W25dID0gaXZlY1tuXSBeIChjID0gaW5bbl0pOyBpdmVjW25dID0gYzsKKwkJCQkrK247CisJCQl9CisgCQl9CisJCSpudW0gPSBuOworCQlyZXR1cm47CisJfSB3aGlsZSAoMCk7CisJLyogdGhlIHJlc3Qgd291bGQgYmUgY29tbW9ubHkgZWxpbWluYXRlZCBieSB4ODYqIGNvbXBpbGVyICovCisjZW5kaWYKKwl3aGlsZSAobDxsZW4pIHsKKwkJdW5zaWduZWQgY2hhciBjOworCQlpZiAobiA9PSAwKSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQl9CisJCW91dFtsXSA9IGl2ZWNbbl0gXiAoYyA9IGluW2xdKTsgaXZlY1tuXSA9IGM7CisJCSsrbDsKKwkJbiA9IChuKzEpICUgMTY7CisJfQorCSpudW09bjsKKyAgICB9Cit9CisKKy8qIFRoaXMgZXhwZWN0cyBhIHNpbmdsZSBibG9jayBvZiBzaXplIG5iaXRzIGZvciBib3RoIGluIGFuZCBvdXQuIE5vdGUgdGhhdAorICAgaXQgY29ycnVwdHMgYW55IGV4dHJhIGJpdHMgaW4gdGhlIGxhc3QgYnl0ZSBvZiBvdXQgKi8KK3N0YXRpYyB2b2lkIGNmYnJfZW5jcnlwdF9ibG9jayhjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkgICAgaW50IG5iaXRzLGNvbnN0IHZvaWQgKmtleSwKKwkJCSAgICB1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLGludCBlbmMsCisJCQkgICAgYmxvY2sxMjhfZiBibG9jaykKK3sKKyAgICBpbnQgbixyZW0sbnVtOworICAgIHVuc2lnbmVkIGNoYXIgb3ZlY1sxNioyICsgMV07ICAvKiArMSBiZWNhdXNlIHdlIGRlcmVyZWZlbmNlIChidXQgZG9uJ3QgdXNlKSBvbmUgYnl0ZSBvZmYgdGhlIGVuZCAqLworCisgICAgaWYgKG5iaXRzPD0wIHx8IG5iaXRzPjEyOCkgcmV0dXJuOworCisJLyogZmlsbCBpbiB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgbmV3IElWIHdpdGggdGhlIGN1cnJlbnQgSVYgKi8KKwltZW1jcHkob3ZlYyxpdmVjLDE2KTsKKwkvKiBjb25zdHJ1Y3QgdGhlIG5ldyBJViAqLworCSgqYmxvY2spKGl2ZWMsaXZlYyxrZXkpOworCW51bSA9IChuYml0cys3KS84OworCWlmIChlbmMpCS8qIGVuY3J5cHQgdGhlIGlucHV0ICovCisJICAgIGZvcihuPTAgOyBuIDwgbnVtIDsgKytuKQorCQlvdXRbbl0gPSAob3ZlY1sxNituXSA9IGluW25dIF4gaXZlY1tuXSk7CisJZWxzZQkJLyogZGVjcnlwdCB0aGUgaW5wdXQgKi8KKwkgICAgZm9yKG49MCA7IG4gPCBudW0gOyArK24pCisJCW91dFtuXSA9IChvdmVjWzE2K25dID0gaW5bbl0pIF4gaXZlY1tuXTsKKwkvKiBzaGlmdCBvdmVjIGxlZnQuLi4gKi8KKwlyZW0gPSBuYml0cyU4OworCW51bSA9IG5iaXRzLzg7CisJaWYocmVtPT0wKQorCSAgICBtZW1jcHkoaXZlYyxvdmVjK251bSwxNik7CisJZWxzZQorCSAgICBmb3Iobj0wIDsgbiA8IDE2IDsgKytuKQorCQlpdmVjW25dID0gb3ZlY1tuK251bV08PHJlbSB8IG92ZWNbbitudW0rMV0+Pig4LXJlbSk7CisKKyAgICAvKiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNsZWFuc2Ugb3ZlYywgc2luY2UgdGhlIElWIGlzIG5vdCBzZWNyZXQgKi8KK30KKworLyogTi5CLiBUaGlzIGV4cGVjdHMgdGhlIGlucHV0IHRvIGJlIHBhY2tlZCwgTVMgYml0IGZpcnN0ICovCit2b2lkIENSWVBUT19jZmIxMjhfMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCSAJc2l6ZV90IGJpdHMsIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jaykKK3sKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyIGNbMV0sZFsxXTsKKworICAgIGFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGl2ZWMgJiYgbnVtKTsKKyAgICBhc3NlcnQoKm51bSA9PSAwKTsKKworICAgIG1lbXNldChvdXQsMCwoYml0cys3KS84KTsKKyAgICBmb3Iobj0wIDsgbjxiaXRzIDsgKytuKQorCXsKKwljWzBdPShpbltuLzhdJigxIDw8ICg3LW4lOCkpKSA/IDB4ODAgOiAwOworCWNmYnJfZW5jcnlwdF9ibG9jayhjLGQsMSxrZXksaXZlYyxlbmMsYmxvY2spOworCW91dFtuLzhdPShvdXRbbi84XSZ+KDEgPDwgKHVuc2lnbmVkIGludCkoNy1uJTgpKSkgfAorCQkgKChkWzBdJjB4ODApID4+ICh1bnNpZ25lZCBpbnQpKG4lOCkpOworCX0KK30KKwordm9pZCBDUllQVE9fY2ZiMTI4XzhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbmd0aCwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlpbnQgZW5jLCBibG9jazEyOF9mIGJsb2NrKQoreworICAgIHNpemVfdCBuOworCisgICAgYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyAmJiBudW0pOworICAgIGFzc2VydCgqbnVtID09IDApOworCisgICAgZm9yKG49MCA7IG48bGVuZ3RoIDsgKytuKQorCWNmYnJfZW5jcnlwdF9ibG9jaygmaW5bbl0sJm91dFtuXSw4LGtleSxpdmVjLGVuYyxibG9jayk7Cit9CisKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMuYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTcwZjljCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5jCkBAIC0wLDAgKzEsNDAwIEBACisvKiBjcnlwdG8vZGVzL2Rlc19lbmMuYyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaW5jbHVkZSAib3BlbnNzbF9kZXNfbG9jYWwuaCIKKyNpbmNsdWRlICJvcGVuc3NsX3Nwci5oIgorCit2b2lkIERFU19lbmNyeXB0MShERVNfTE9ORyAqZGF0YSwgREVTX2tleV9zY2hlZHVsZSAqa3MsIGludCBlbmMpCisJeworCXJlZ2lzdGVyIERFU19MT05HIGwscix0LHU7CisjaWZkZWYgREVTX1BUUgorCXJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc19TUD0oY29uc3QgdW5zaWduZWQgY2hhciAqKURFU19TUHRyYW5zOworI2VuZGlmCisjaWZuZGVmIERFU19VTlJPTEwKKwlyZWdpc3RlciBpbnQgaTsKKyNlbmRpZgorCXJlZ2lzdGVyIERFU19MT05HICpzOworCisJcj1kYXRhWzBdOworCWw9ZGF0YVsxXTsKKworCUlQKHIsbCk7CisJLyogVGhpbmdzIGhhdmUgYmVlbiBtb2RpZmllZCBzbyB0aGF0IHRoZSBpbml0aWFsIHJvdGF0ZSBpcworCSAqIGRvbmUgb3V0c2lkZSB0aGUgbG9vcC4gIFRoaXMgcmVxdWlyZWQgdGhlCisJICogREVTX1NQdHJhbnMgdmFsdWVzIGluIHNwLmggdG8gYmUgcm90YXRlZCAxIGJpdCB0byB0aGUgcmlnaHQuCisJICogT25lIHBlcmwgc2NyaXB0IGxhdGVyIGFuZCB0aGluZ3MgaGF2ZSBhIDUlIHNwZWVkIHVwIG9uIGEgc3BhcmMyLgorCSAqIFRoYW5rcyB0byBSaWNoYXJkIE91dGVyYnJpZGdlIDw3MTc1NS4yMDRAQ29tcHVTZXJ2ZS5DT00+CisJICogZm9yIHBvaW50aW5nIHRoaXMgb3V0LiAqLworCS8qIGNsZWFyIHRoZSB0b3AgYml0cyBvbiBtYWNoaW5lcyB3aXRoIDhieXRlIGxvbmdzICovCisJLyogc2hpZnQgbGVmdCBieSAyICovCisJcj1ST1RBVEUociwyOSkmMHhmZmZmZmZmZkw7CisJbD1ST1RBVEUobCwyOSkmMHhmZmZmZmZmZkw7CisKKwlzPWtzLT5rcy0+ZGVzbG9uZzsKKwkvKiBJIGRvbid0IGtub3cgaWYgaXQgaXMgd29ydGggdGhlIGVmZm9ydCBvZiBsb29wIHVucm9sbGluZyB0aGUKKwkgKiBpbm5lciBsb29wICovCisJaWYgKGVuYykKKwkJeworI2lmZGVmIERFU19VTlJPTEwKKwkJRF9FTkNSWVBUKGwsciwgMCk7IC8qICAxICovCisJCURfRU5DUllQVChyLGwsIDIpOyAvKiAgMiAqLworCQlEX0VOQ1JZUFQobCxyLCA0KTsgLyogIDMgKi8KKwkJRF9FTkNSWVBUKHIsbCwgNik7IC8qICA0ICovCisJCURfRU5DUllQVChsLHIsIDgpOyAvKiAgNSAqLworCQlEX0VOQ1JZUFQocixsLDEwKTsgLyogIDYgKi8KKwkJRF9FTkNSWVBUKGwsciwxMik7IC8qICA3ICovCisJCURfRU5DUllQVChyLGwsMTQpOyAvKiAgOCAqLworCQlEX0VOQ1JZUFQobCxyLDE2KTsgLyogIDkgKi8KKwkJRF9FTkNSWVBUKHIsbCwxOCk7IC8qICAxMCAqLworCQlEX0VOQ1JZUFQobCxyLDIwKTsgLyogIDExICovCisJCURfRU5DUllQVChyLGwsMjIpOyAvKiAgMTIgKi8KKwkJRF9FTkNSWVBUKGwsciwyNCk7IC8qICAxMyAqLworCQlEX0VOQ1JZUFQocixsLDI2KTsgLyogIDE0ICovCisJCURfRU5DUllQVChsLHIsMjgpOyAvKiAgMTUgKi8KKwkJRF9FTkNSWVBUKHIsbCwzMCk7IC8qICAxNiAqLworI2Vsc2UKKwkJZm9yIChpPTA7IGk8MzI7IGkrPTQpCisJCQl7CisJCQlEX0VOQ1JZUFQobCxyLGkrMCk7IC8qICAxICovCisJCQlEX0VOQ1JZUFQocixsLGkrMik7IC8qICAyICovCisJCQl9CisjZW5kaWYKKwkJfQorCWVsc2UKKwkJeworI2lmZGVmIERFU19VTlJPTEwKKwkJRF9FTkNSWVBUKGwsciwzMCk7IC8qIDE2ICovCisJCURfRU5DUllQVChyLGwsMjgpOyAvKiAxNSAqLworCQlEX0VOQ1JZUFQobCxyLDI2KTsgLyogMTQgKi8KKwkJRF9FTkNSWVBUKHIsbCwyNCk7IC8qIDEzICovCisJCURfRU5DUllQVChsLHIsMjIpOyAvKiAxMiAqLworCQlEX0VOQ1JZUFQocixsLDIwKTsgLyogMTEgKi8KKwkJRF9FTkNSWVBUKGwsciwxOCk7IC8qIDEwICovCisJCURfRU5DUllQVChyLGwsMTYpOyAvKiAgOSAqLworCQlEX0VOQ1JZUFQobCxyLDE0KTsgLyogIDggKi8KKwkJRF9FTkNSWVBUKHIsbCwxMik7IC8qICA3ICovCisJCURfRU5DUllQVChsLHIsMTApOyAvKiAgNiAqLworCQlEX0VOQ1JZUFQocixsLCA4KTsgLyogIDUgKi8KKwkJRF9FTkNSWVBUKGwsciwgNik7IC8qICA0ICovCisJCURfRU5DUllQVChyLGwsIDQpOyAvKiAgMyAqLworCQlEX0VOQ1JZUFQobCxyLCAyKTsgLyogIDIgKi8KKwkJRF9FTkNSWVBUKHIsbCwgMCk7IC8qICAxICovCisjZWxzZQorCQlmb3IgKGk9MzA7IGk+MDsgaS09NCkKKwkJCXsKKwkJCURfRU5DUllQVChsLHIsaS0wKTsgLyogMTYgKi8KKwkJCURfRU5DUllQVChyLGwsaS0yKTsgLyogMTUgKi8KKwkJCX0KKyNlbmRpZgorCQl9CisKKwkvKiByb3RhdGUgYW5kIGNsZWFyIHRoZSB0b3AgYml0cyBvbiBtYWNoaW5lcyB3aXRoIDhieXRlIGxvbmdzICovCisJbD1ST1RBVEUobCwzKSYweGZmZmZmZmZmTDsKKwlyPVJPVEFURShyLDMpJjB4ZmZmZmZmZmZMOworCisJRlAocixsKTsKKwlkYXRhWzBdPWw7CisJZGF0YVsxXT1yOworCWw9cj10PXU9MDsKKwl9CisKK3ZvaWQgREVTX2VuY3J5cHQyKERFU19MT05HICpkYXRhLCBERVNfa2V5X3NjaGVkdWxlICprcywgaW50IGVuYykKKwl7CisJcmVnaXN0ZXIgREVTX0xPTkcgbCxyLHQsdTsKKyNpZmRlZiBERVNfUFRSCisJcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZGVzX1NQPShjb25zdCB1bnNpZ25lZCBjaGFyICopREVTX1NQdHJhbnM7CisjZW5kaWYKKyNpZm5kZWYgREVTX1VOUk9MTAorCXJlZ2lzdGVyIGludCBpOworI2VuZGlmCisJcmVnaXN0ZXIgREVTX0xPTkcgKnM7CisKKwlyPWRhdGFbMF07CisJbD1kYXRhWzFdOworCisJLyogVGhpbmdzIGhhdmUgYmVlbiBtb2RpZmllZCBzbyB0aGF0IHRoZSBpbml0aWFsIHJvdGF0ZSBpcworCSAqIGRvbmUgb3V0c2lkZSB0aGUgbG9vcC4gIFRoaXMgcmVxdWlyZWQgdGhlCisJICogREVTX1NQdHJhbnMgdmFsdWVzIGluIHNwLmggdG8gYmUgcm90YXRlZCAxIGJpdCB0byB0aGUgcmlnaHQuCisJICogT25lIHBlcmwgc2NyaXB0IGxhdGVyIGFuZCB0aGluZ3MgaGF2ZSBhIDUlIHNwZWVkIHVwIG9uIGEgc3BhcmMyLgorCSAqIFRoYW5rcyB0byBSaWNoYXJkIE91dGVyYnJpZGdlIDw3MTc1NS4yMDRAQ29tcHVTZXJ2ZS5DT00+CisJICogZm9yIHBvaW50aW5nIHRoaXMgb3V0LiAqLworCS8qIGNsZWFyIHRoZSB0b3AgYml0cyBvbiBtYWNoaW5lcyB3aXRoIDhieXRlIGxvbmdzICovCisJcj1ST1RBVEUociwyOSkmMHhmZmZmZmZmZkw7CisJbD1ST1RBVEUobCwyOSkmMHhmZmZmZmZmZkw7CisKKwlzPWtzLT5rcy0+ZGVzbG9uZzsKKwkvKiBJIGRvbid0IGtub3cgaWYgaXQgaXMgd29ydGggdGhlIGVmZm9ydCBvZiBsb29wIHVucm9sbGluZyB0aGUKKwkgKiBpbm5lciBsb29wICovCisJaWYgKGVuYykKKwkJeworI2lmZGVmIERFU19VTlJPTEwKKwkJRF9FTkNSWVBUKGwsciwgMCk7IC8qICAxICovCisJCURfRU5DUllQVChyLGwsIDIpOyAvKiAgMiAqLworCQlEX0VOQ1JZUFQobCxyLCA0KTsgLyogIDMgKi8KKwkJRF9FTkNSWVBUKHIsbCwgNik7IC8qICA0ICovCisJCURfRU5DUllQVChsLHIsIDgpOyAvKiAgNSAqLworCQlEX0VOQ1JZUFQocixsLDEwKTsgLyogIDYgKi8KKwkJRF9FTkNSWVBUKGwsciwxMik7IC8qICA3ICovCisJCURfRU5DUllQVChyLGwsMTQpOyAvKiAgOCAqLworCQlEX0VOQ1JZUFQobCxyLDE2KTsgLyogIDkgKi8KKwkJRF9FTkNSWVBUKHIsbCwxOCk7IC8qICAxMCAqLworCQlEX0VOQ1JZUFQobCxyLDIwKTsgLyogIDExICovCisJCURfRU5DUllQVChyLGwsMjIpOyAvKiAgMTIgKi8KKwkJRF9FTkNSWVBUKGwsciwyNCk7IC8qICAxMyAqLworCQlEX0VOQ1JZUFQocixsLDI2KTsgLyogIDE0ICovCisJCURfRU5DUllQVChsLHIsMjgpOyAvKiAgMTUgKi8KKwkJRF9FTkNSWVBUKHIsbCwzMCk7IC8qICAxNiAqLworI2Vsc2UKKwkJZm9yIChpPTA7IGk8MzI7IGkrPTQpCisJCQl7CisJCQlEX0VOQ1JZUFQobCxyLGkrMCk7IC8qICAxICovCisJCQlEX0VOQ1JZUFQocixsLGkrMik7IC8qICAyICovCisJCQl9CisjZW5kaWYKKwkJfQorCWVsc2UKKwkJeworI2lmZGVmIERFU19VTlJPTEwKKwkJRF9FTkNSWVBUKGwsciwzMCk7IC8qIDE2ICovCisJCURfRU5DUllQVChyLGwsMjgpOyAvKiAxNSAqLworCQlEX0VOQ1JZUFQobCxyLDI2KTsgLyogMTQgKi8KKwkJRF9FTkNSWVBUKHIsbCwyNCk7IC8qIDEzICovCisJCURfRU5DUllQVChsLHIsMjIpOyAvKiAxMiAqLworCQlEX0VOQ1JZUFQocixsLDIwKTsgLyogMTEgKi8KKwkJRF9FTkNSWVBUKGwsciwxOCk7IC8qIDEwICovCisJCURfRU5DUllQVChyLGwsMTYpOyAvKiAgOSAqLworCQlEX0VOQ1JZUFQobCxyLDE0KTsgLyogIDggKi8KKwkJRF9FTkNSWVBUKHIsbCwxMik7IC8qICA3ICovCisJCURfRU5DUllQVChsLHIsMTApOyAvKiAgNiAqLworCQlEX0VOQ1JZUFQocixsLCA4KTsgLyogIDUgKi8KKwkJRF9FTkNSWVBUKGwsciwgNik7IC8qICA0ICovCisJCURfRU5DUllQVChyLGwsIDQpOyAvKiAgMyAqLworCQlEX0VOQ1JZUFQobCxyLCAyKTsgLyogIDIgKi8KKwkJRF9FTkNSWVBUKHIsbCwgMCk7IC8qICAxICovCisjZWxzZQorCQlmb3IgKGk9MzA7IGk+MDsgaS09NCkKKwkJCXsKKwkJCURfRU5DUllQVChsLHIsaS0wKTsgLyogMTYgKi8KKwkJCURfRU5DUllQVChyLGwsaS0yKTsgLyogMTUgKi8KKwkJCX0KKyNlbmRpZgorCQl9CisJLyogcm90YXRlIGFuZCBjbGVhciB0aGUgdG9wIGJpdHMgb24gbWFjaGluZXMgd2l0aCA4Ynl0ZSBsb25ncyAqLworCWRhdGFbMF09Uk9UQVRFKGwsMykmMHhmZmZmZmZmZkw7CisJZGF0YVsxXT1ST1RBVEUociwzKSYweGZmZmZmZmZmTDsKKwlsPXI9dD11PTA7CisJfQorCit2b2lkIERFU19lbmNyeXB0MyhERVNfTE9ORyAqZGF0YSwgREVTX2tleV9zY2hlZHVsZSAqa3MxLAorCQkgIERFU19rZXlfc2NoZWR1bGUgKmtzMiwgREVTX2tleV9zY2hlZHVsZSAqa3MzKQorCXsKKwlyZWdpc3RlciBERVNfTE9ORyBsLHI7CisKKwlsPWRhdGFbMF07CisJcj1kYXRhWzFdOworCUlQKGwscik7CisJZGF0YVswXT1sOworCWRhdGFbMV09cjsKKwlERVNfZW5jcnlwdDIoKERFU19MT05HICopZGF0YSxrczEsREVTX0VOQ1JZUFQpOworCURFU19lbmNyeXB0MigoREVTX0xPTkcgKilkYXRhLGtzMixERVNfREVDUllQVCk7CisJREVTX2VuY3J5cHQyKChERVNfTE9ORyAqKWRhdGEsa3MzLERFU19FTkNSWVBUKTsKKwlsPWRhdGFbMF07CisJcj1kYXRhWzFdOworCUZQKHIsbCk7CisJZGF0YVswXT1sOworCWRhdGFbMV09cjsKKwl9CisKK3ZvaWQgREVTX2RlY3J5cHQzKERFU19MT05HICpkYXRhLCBERVNfa2V5X3NjaGVkdWxlICprczEsCisJCSAgREVTX2tleV9zY2hlZHVsZSAqa3MyLCBERVNfa2V5X3NjaGVkdWxlICprczMpCisJeworCXJlZ2lzdGVyIERFU19MT05HIGwscjsKKworCWw9ZGF0YVswXTsKKwlyPWRhdGFbMV07CisJSVAobCxyKTsKKwlkYXRhWzBdPWw7CisJZGF0YVsxXT1yOworCURFU19lbmNyeXB0MigoREVTX0xPTkcgKilkYXRhLGtzMyxERVNfREVDUllQVCk7CisJREVTX2VuY3J5cHQyKChERVNfTE9ORyAqKWRhdGEsa3MyLERFU19FTkNSWVBUKTsKKwlERVNfZW5jcnlwdDIoKERFU19MT05HICopZGF0YSxrczEsREVTX0RFQ1JZUFQpOworCWw9ZGF0YVswXTsKKwlyPWRhdGFbMV07CisJRlAocixsKTsKKwlkYXRhWzBdPWw7CisJZGF0YVsxXT1yOworCX0KKworI2lmbmRlZiBERVNfREVGQVVMVF9PUFRJT05TCisKKyN1bmRlZiBDQkNfRU5DX0NfX0RPTlRfVVBEQVRFX0lWCisjaW5jbHVkZSAib3BlbnNzbF9uY2JjX2VuYy5jIiAvKiBERVNfbmNiY19lbmNyeXB0ICovCisKK3ZvaWQgREVTX2VkZTNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwkJCSAgbG9uZyBsZW5ndGgsIERFU19rZXlfc2NoZWR1bGUgKmtzMSwKKwkJCSAgREVTX2tleV9zY2hlZHVsZSAqa3MyLCBERVNfa2V5X3NjaGVkdWxlICprczMsCisJCQkgIERFU19jYmxvY2sgKml2ZWMsIGludCBlbmMpCisJeworCXJlZ2lzdGVyIERFU19MT05HIHRpbjAsdGluMTsKKwlyZWdpc3RlciBERVNfTE9ORyB0b3V0MCx0b3V0MSx4b3IwLHhvcjE7CisJcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqaW47CisJdW5zaWduZWQgY2hhciAqb3V0OworCXJlZ2lzdGVyIGxvbmcgbD1sZW5ndGg7CisJREVTX0xPTkcgdGluWzJdOworCXVuc2lnbmVkIGNoYXIgKml2OworCisJaW49aW5wdXQ7CisJb3V0PW91dHB1dDsKKwlpdiA9ICYoKml2ZWMpWzBdOworCisJaWYgKGVuYykKKwkJeworCQljMmwoaXYsdG91dDApOworCQljMmwoaXYsdG91dDEpOworCQlmb3IgKGwtPTg7IGw+PTA7IGwtPTgpCisJCQl7CisJCQljMmwoaW4sdGluMCk7CisJCQljMmwoaW4sdGluMSk7CisJCQl0aW4wXj10b3V0MDsKKwkJCXRpbjFePXRvdXQxOworCisJCQl0aW5bMF09dGluMDsKKwkJCXRpblsxXT10aW4xOworCQkJREVTX2VuY3J5cHQzKChERVNfTE9ORyAqKXRpbixrczEsa3MyLGtzMyk7CisJCQl0b3V0MD10aW5bMF07CisJCQl0b3V0MT10aW5bMV07CisKKwkJCWwyYyh0b3V0MCxvdXQpOworCQkJbDJjKHRvdXQxLG91dCk7CisJCQl9CisJCWlmIChsICE9IC04KQorCQkJeworCQkJYzJsbihpbix0aW4wLHRpbjEsbCs4KTsKKwkJCXRpbjBePXRvdXQwOworCQkJdGluMV49dG91dDE7CisKKwkJCXRpblswXT10aW4wOworCQkJdGluWzFdPXRpbjE7CisJCQlERVNfZW5jcnlwdDMoKERFU19MT05HICopdGluLGtzMSxrczIsa3MzKTsKKwkJCXRvdXQwPXRpblswXTsKKwkJCXRvdXQxPXRpblsxXTsKKworCQkJbDJjKHRvdXQwLG91dCk7CisJCQlsMmModG91dDEsb3V0KTsKKwkJCX0KKwkJaXYgPSAmKCppdmVjKVswXTsKKwkJbDJjKHRvdXQwLGl2KTsKKwkJbDJjKHRvdXQxLGl2KTsKKwkJfQorCWVsc2UKKwkJeworCQlyZWdpc3RlciBERVNfTE9ORyB0MCx0MTsKKworCQljMmwoaXYseG9yMCk7CisJCWMybChpdix4b3IxKTsKKwkJZm9yIChsLT04OyBsPj0wOyBsLT04KQorCQkJeworCQkJYzJsKGluLHRpbjApOworCQkJYzJsKGluLHRpbjEpOworCisJCQl0MD10aW4wOworCQkJdDE9dGluMTsKKworCQkJdGluWzBdPXRpbjA7CisJCQl0aW5bMV09dGluMTsKKwkJCURFU19kZWNyeXB0MygoREVTX0xPTkcgKil0aW4sa3MxLGtzMixrczMpOworCQkJdG91dDA9dGluWzBdOworCQkJdG91dDE9dGluWzFdOworCisJCQl0b3V0MF49eG9yMDsKKwkJCXRvdXQxXj14b3IxOworCQkJbDJjKHRvdXQwLG91dCk7CisJCQlsMmModG91dDEsb3V0KTsKKwkJCXhvcjA9dDA7CisJCQl4b3IxPXQxOworCQkJfQorCQlpZiAobCAhPSAtOCkKKwkJCXsKKwkJCWMybChpbix0aW4wKTsKKwkJCWMybChpbix0aW4xKTsKKwkJCQorCQkJdDA9dGluMDsKKwkJCXQxPXRpbjE7CisKKwkJCXRpblswXT10aW4wOworCQkJdGluWzFdPXRpbjE7CisJCQlERVNfZGVjcnlwdDMoKERFU19MT05HICopdGluLGtzMSxrczIsa3MzKTsKKwkJCXRvdXQwPXRpblswXTsKKwkJCXRvdXQxPXRpblsxXTsKKwkJCisJCQl0b3V0MF49eG9yMDsKKwkJCXRvdXQxXj14b3IxOworCQkJbDJjbih0b3V0MCx0b3V0MSxvdXQsbCs4KTsKKwkJCXhvcjA9dDA7CisJCQl4b3IxPXQxOworCQkJfQorCisJCWl2ID0gJigqaXZlYylbMF07CisJCWwyYyh4b3IwLGl2KTsKKwkJbDJjKHhvcjEsaXYpOworCQl9CisJdGluMD10aW4xPXRvdXQwPXRvdXQxPXhvcjA9eG9yMT0wOworCXRpblswXT10aW5bMV09MDsKKwl9CisKKyNlbmRpZiAvKiBERVNfREVGQVVMVF9PUFRJT05TICovCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaCBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MWQ4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaApAQCAtMCwwICsxLDQzMSBAQAorLyogY3J5cHRvL2Rlcy9kZXNfbG9jbC5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpZm5kZWYgSEVBREVSX0RFU19MT0NMX0gKKyNkZWZpbmUgSEVBREVSX0RFU19MT0NMX0gKKworI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpCisjaWZuZGVmIE9QRU5TU0xfU1lTX01TRE9TCisjZGVmaW5lIE9QRU5TU0xfU1lTX01TRE9TCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmbmRlZiBPUEVOU1NMX1NZU19NU0RPUworI2lmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChfX0RFQ0MpCisjaWZkZWYgT1BFTlNTTF9VTklTVEQKKyMgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAorI2Vsc2UKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxtYXRoLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oPgorCisjaWZkZWYgT1BFTlNTTF9TWVNfTVNET1MJCS8qIFZpc3VhbCBDKysgMi4xIChXaW5kb3dzIE5ULzk1KSAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfVk1TKSB8fCBkZWZpbmVkKE1fWEVOSVgpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfTVNET1MpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmZGVmIE9QRU5TU0xfQlVJTERfU0hMSUJDUllQVE8KKyMgdW5kZWYgT1BFTlNTTF9FWFRFUk4KKyMgZGVmaW5lIE9QRU5TU0xfRVhURVJOIE9QRU5TU0xfRVhQT1JUCisjZW5kaWYKKworI2RlZmluZSBJVEVSQVRJT05TIDE2CisjZGVmaW5lIEhBTEZfSVRFUkFUSU9OUyA4CisKKy8qIHVzZWQgaW4gZGVzX3JlYWQgYW5kIGRlc193cml0ZSAqLworI2RlZmluZSBNQVhXUklURQkoMTAyNCoxNikKKyNkZWZpbmUgQlNJWkUJCShNQVhXUklURSs0KQorCisjZGVmaW5lIGMybChjLGwpCShsID0oKERFU19MT05HKSgqKChjKSsrKSkpICAgICwgXAorCQkJIGx8PSgoREVTX0xPTkcpKCooKGMpKyspKSk8PCA4TCwgXAorCQkJIGx8PSgoREVTX0xPTkcpKCooKGMpKyspKSk8PDE2TCwgXAorCQkJIGx8PSgoREVTX0xPTkcpKCooKGMpKyspKSk8PDI0TCkKKworLyogTk9URSAtIGMgaXMgbm90IGluY3JlbWVudGVkIGFzIHBlciBjMmwgKi8KKyNkZWZpbmUgYzJsbihjLGwxLGwyLG4pCXsgXAorCQkJYys9bjsgXAorCQkJbDE9bDI9MDsgXAorCQkJc3dpdGNoIChuKSB7IFwKKwkJCWNhc2UgODogbDIgPSgoREVTX0xPTkcpKCooLS0oYykpKSk8PDI0TDsgXAorCQkJY2FzZSA3OiBsMnw9KChERVNfTE9ORykoKigtLShjKSkpKTw8MTZMOyBcCisJCQljYXNlIDY6IGwyfD0oKERFU19MT05HKSgqKC0tKGMpKSkpPDwgOEw7IFwKKwkJCWNhc2UgNTogbDJ8PSgoREVTX0xPTkcpKCooLS0oYykpKSk7ICAgICBcCisJCQljYXNlIDQ6IGwxID0oKERFU19MT05HKSgqKC0tKGMpKSkpPDwyNEw7IFwKKwkJCWNhc2UgMzogbDF8PSgoREVTX0xPTkcpKCooLS0oYykpKSk8PDE2TDsgXAorCQkJY2FzZSAyOiBsMXw9KChERVNfTE9ORykoKigtLShjKSkpKTw8IDhMOyBcCisJCQljYXNlIDE6IGwxfD0oKERFU19MT05HKSgqKC0tKGMpKSkpOyAgICAgXAorCQkJCX0gXAorCQkJfQorCisjZGVmaW5lIGwyYyhsLGMpCSgqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKSAgICAgKSYweGZmKSwgXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4gOEwpJjB4ZmYpLCBcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjE2TCkmMHhmZiksIFwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKKworLyogcmVwbGFjZW1lbnRzIGZvciBodG9ubCBhbmQgbnRvaGwgc2luY2UgSSBoYXZlIG5vIGlkZWEgd2hhdCB0byBkbworICogd2hlbiBmYWNlZCB3aXRoIG1hY2hpbmVzIHdpdGggOCBieXRlIGxvbmdzLiAqLworI2RlZmluZSBIRFJTSVpFIDQKKworI2RlZmluZSBuMmwoYyxsKQkobCA9KChERVNfTE9ORykoKigoYykrKykpKTw8MjRMLCBcCisJCQkgbHw9KChERVNfTE9ORykoKigoYykrKykpKTw8MTZMLCBcCisJCQkgbHw9KChERVNfTE9ORykoKigoYykrKykpKTw8IDhMLCBcCisJCQkgbHw9KChERVNfTE9ORykoKigoYykrKykpKSkKKworI2RlZmluZSBsMm4obCxjKQkoKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjI0TCkmMHhmZiksIFwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MTZMKSYweGZmKSwgXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4gOEwpJjB4ZmYpLCBcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCkgICAgICkmMHhmZikpCisKKy8qIE5PVEUgLSBjIGlzIG5vdCBpbmNyZW1lbnRlZCBhcyBwZXIgbDJjICovCisjZGVmaW5lIGwyY24obDEsbDIsYyxuKQl7IFwKKwkJCWMrPW47IFwKKwkJCXN3aXRjaCAobikgeyBcCisJCQljYXNlIDg6ICooLS0oYykpPSh1bnNpZ25lZCBjaGFyKSgoKGwyKT4+MjRMKSYweGZmKTsgXAorCQkJY2FzZSA3OiAqKC0tKGMpKT0odW5zaWduZWQgY2hhcikoKChsMik+PjE2TCkmMHhmZik7IFwKKwkJCWNhc2UgNjogKigtLShjKSk9KHVuc2lnbmVkIGNoYXIpKCgobDIpPj4gOEwpJjB4ZmYpOyBcCisJCQljYXNlIDU6ICooLS0oYykpPSh1bnNpZ25lZCBjaGFyKSgoKGwyKSAgICAgKSYweGZmKTsgXAorCQkJY2FzZSA0OiAqKC0tKGMpKT0odW5zaWduZWQgY2hhcikoKChsMSk+PjI0TCkmMHhmZik7IFwKKwkJCWNhc2UgMzogKigtLShjKSk9KHVuc2lnbmVkIGNoYXIpKCgobDEpPj4xNkwpJjB4ZmYpOyBcCisJCQljYXNlIDI6ICooLS0oYykpPSh1bnNpZ25lZCBjaGFyKSgoKGwxKT4+IDhMKSYweGZmKTsgXAorCQkJY2FzZSAxOiAqKC0tKGMpKT0odW5zaWduZWQgY2hhcikoKChsMSkgICAgICkmMHhmZik7IFwKKwkJCQl9IFwKKwkJCX0KKworI2lmIChkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSAmJiBkZWZpbmVkKF9NU0NfVkVSKSkgfHwgZGVmaW5lZChfX0lDQykKKyNkZWZpbmUJUk9UQVRFKGEsbikJKF9scm90cihhLG4pKQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19JTkxJTkVfQVNNKSAmJiAhZGVmaW5lZChQRURBTlRJQykKKyMgaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyMgIGRlZmluZSBST1RBVEUoYSxuKQkoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmV0OwlcCisJCQkJYXNtICgicm9ybCAlMSwlMCIJXAorCQkJCQk6ICI9ciIocmV0KQlcCisJCQkJCTogIkkiKG4pLCIwIihhKQlcCisJCQkJCTogImNjIik7CVwKKwkJCSAgIHJldDsJCQkJXAorCQkJfSkKKyMgZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBST1RBVEUKKyNkZWZpbmUJUk9UQVRFKGEsbikJKCgoYSk+PihuKSkrKChhKTw8KDMyLShuKSkpKQorI2VuZGlmCisKKy8qIERvbid0IHdvcnJ5IGFib3V0IHRoZSBMT0FEX0RBVEEoKSBzdHVmZiwgdGhhdCBpcyB1c2VkIGJ5CisgKiBmY3J5cHQoKSB0byBhZGQgaXQncyBsaXR0bGUgYml0IHRvIHRoZSBmcm9udCAqLworCisjaWZkZWYgREVTX0ZDUllQVAorCisjZGVmaW5lIExPQURfREFUQV90bXAoUixTLHUsdCxFMCxFMSkgXAorCXsgREVTX0xPTkcgdG1wOyBMT0FEX0RBVEEoUixTLHUsdCxFMCxFMSx0bXApOyB9CisKKyNkZWZpbmUgTE9BRF9EQVRBKFIsUyx1LHQsRTAsRTEsdG1wKSBcCisJdD1SXihSPj4xNkwpOyBcCisJdT10JkUwOyB0Jj1FMTsgXAorCXRtcD0odTw8MTYpOyB1Xj1SXnNbUyAgXTsgdV49dG1wOyBcCisJdG1wPSh0PDwxNik7IHRePVJec1tTKzFdOyB0Xj10bXAKKyNlbHNlCisjZGVmaW5lIExPQURfREFUQV90bXAoYSxiLGMsZCxlLGYpIExPQURfREFUQShhLGIsYyxkLGUsZixnKQorI2RlZmluZSBMT0FEX0RBVEEoUixTLHUsdCxFMCxFMSx0bXApIFwKKwl1PVJec1tTICBdOyBcCisJdD1SXnNbUysxXQorI2VuZGlmCisKKy8qIFRoZSBjaGFuZ2VzIHRvIHRoaXMgbWFjcm8gbWF5IGhlbHAgb3IgaGluZGVyLCBkZXBlbmRpbmcgb24gdGhlCisgKiBjb21waWxlciBhbmQgdGhlIGFyY2hpdGVjdHVyZS4gIGdjYzIgYWx3YXlzIHNlZW1zIHRvIGRvIHdlbGwgOi0pLgorICogSW5zcGlyZWQgYnkgRGFuYSBIb3cgPGhvd0Bpc2wuc3RhbmZvcmQuZWR1PgorICogRE8gTk9UIHVzZSB0aGUgYWx0ZXJuYXRpdmUgdmVyc2lvbiBvbiBtYWNoaW5lcyB3aXRoIDggYnl0ZSBsb25ncy4KKyAqIEl0IGRvZXMgbm90IHNlZW0gdG8gd29yayBvbiB0aGUgQWxwaGEsIGV2ZW4gd2hlbiBERVNfTE9ORyBpcyA0CisgKiBieXRlcywgcHJvYmFibHkgYW4gaXNzdWUgb2YgYWNjZXNzaW5nIG5vbi13b3JkIGFsaWduZWQgb2JqZWN0cyA6LSggKi8KKyNpZmRlZiBERVNfUFRSCisKKy8qIEl0IHJlY2VudGx5IG9jY3VycmVkIHRvIG1lIHRoYXQgMF4wXjBeMF4wXjBeMCA9PSAwLCBzbyB0aGVyZQorICogaXMgbm8gcmVhc29uIHRvIG5vdCB4b3IgYWxsIHRoZSBzdWIgaXRlbXMgdG9nZXRoZXIuICBUaGlzIHBvdGVudGlhbGx5CisgKiBzYXZlcyBhIHJlZ2lzdGVyIHNpbmNlIHRoaW5ncyBjYW4gYmUgeG9yZWQgZGlyZWN0bHkgaW50byBMICovCisKKyNpZiBkZWZpbmVkKERFU19SSVNDMSkgfHwgZGVmaW5lZChERVNfUklTQzIpCisjaWZkZWYgREVTX1JJU0MxCisjZGVmaW5lIERfRU5DUllQVChMTCxSLFMpIHsgXAorCXVuc2lnbmVkIGludCB1MSx1Mix1MzsgXAorCUxPQURfREFUQShSLFMsdSx0LEUwLEUxLHUxKTsgXAorCXUyPShpbnQpdT4+OEw7IFwKKwl1MT0oaW50KXUmMHhmYzsgXAorCXUyJj0weGZjOyBcCisJdD1ST1RBVEUodCw0KTsgXAorCXU+Pj0xNkw7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQICAgICAgK3UxKTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgyMDArdTIpOyBcCisJdTM9KGludCkodT4+OEwpOyBcCisJdTE9KGludCl1JjB4ZmM7IFwKKwl1MyY9MHhmYzsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg0MDArdTEpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDYwMCt1Myk7IFwKKwl1Mj0oaW50KXQ+PjhMOyBcCisJdTE9KGludCl0JjB4ZmM7IFwKKwl1MiY9MHhmYzsgXAorCXQ+Pj0xNkw7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MTAwK3UxKTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgzMDArdTIpOyBcCisJdTM9KGludCl0Pj44TDsgXAorCXUxPShpbnQpdCYweGZjOyBcCisJdTMmPTB4ZmM7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NTAwK3UxKTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg3MDArdTMpOyB9CisjZW5kaWYKKyNpZmRlZiBERVNfUklTQzIKKyNkZWZpbmUgRF9FTkNSWVBUKExMLFIsUykgeyBcCisJdW5zaWduZWQgaW50IHUxLHUyLHMxLHMyOyBcCisJTE9BRF9EQVRBKFIsUyx1LHQsRTAsRTEsdTEpOyBcCisJdTI9KGludCl1Pj44TDsgXAorCXUxPShpbnQpdSYweGZjOyBcCisJdTImPTB4ZmM7IFwKKwl0PVJPVEFURSh0LDQpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCAgICAgICt1MSk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MjAwK3UyKTsgXAorCXMxPShpbnQpKHU+PjE2TCk7IFwKKwlzMj0oaW50KSh1Pj4yNEwpOyBcCisJczEmPTB4ZmM7IFwKKwlzMiY9MHhmYzsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg0MDArczEpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDYwMCtzMik7IFwKKwl1Mj0oaW50KXQ+PjhMOyBcCisJdTE9KGludCl0JjB4ZmM7IFwKKwl1MiY9MHhmYzsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgxMDArdTEpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDMwMCt1Mik7IFwKKwlzMT0oaW50KSh0Pj4xNkwpOyBcCisJczI9KGludCkodD4+MjRMKTsgXAorCXMxJj0weGZjOyBcCisJczImPTB4ZmM7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NTAwK3MxKTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg3MDArczIpOyB9CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIERfRU5DUllQVChMTCxSLFMpIHsgXAorCUxPQURfREFUQV90bXAoUixTLHUsdCxFMCxFMSk7IFwKKwl0PVJPVEFURSh0LDQpOyBcCisJTExePSBcCisJKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1AgICAgICArKCh1ICAgICApJjB4ZmMpKV4gXAorCSooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MjAwKygodT4+IDhMKSYweGZjKSleIFwKKwkqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDQwMCsoKHU+PjE2TCkmMHhmYykpXiBcCisJKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg2MDArKCh1Pj4yNEwpJjB4ZmMpKV4gXAorCSooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MTAwKygodCAgICAgKSYweGZjKSleIFwKKwkqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDMwMCsoKHQ+PiA4TCkmMHhmYykpXiBcCisJKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg1MDArKCh0Pj4xNkwpJjB4ZmMpKV4gXAorCSooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NzAwKygodD4+MjRMKSYweGZjKSk7IH0KKyNlbmRpZgorCisjZWxzZSAvKiBvcmlnaW5hbCB2ZXJzaW9uICovCisKKyNpZiBkZWZpbmVkKERFU19SSVNDMSkgfHwgZGVmaW5lZChERVNfUklTQzIpCisjaWZkZWYgREVTX1JJU0MxCisjZGVmaW5lIERfRU5DUllQVChMTCxSLFMpIHtcCisJdW5zaWduZWQgaW50IHUxLHUyLHUzOyBcCisJTE9BRF9EQVRBKFIsUyx1LHQsRTAsRTEsdTEpOyBcCisJdT4+PTJMOyBcCisJdD1ST1RBVEUodCw2KTsgXAorCXUyPShpbnQpdT4+OEw7IFwKKwl1MT0oaW50KXUmMHgzZjsgXAorCXUyJj0weDNmOyBcCisJdT4+PTE2TDsgXAorCUxMXj1ERVNfU1B0cmFuc1swXVt1MV07IFwKKwlMTF49REVTX1NQdHJhbnNbMl1bdTJdOyBcCisJdTM9KGludCl1Pj44TDsgXAorCXUxPShpbnQpdSYweDNmOyBcCisJdTMmPTB4M2Y7IFwKKwlMTF49REVTX1NQdHJhbnNbNF1bdTFdOyBcCisJTExePURFU19TUHRyYW5zWzZdW3UzXTsgXAorCXUyPShpbnQpdD4+OEw7IFwKKwl1MT0oaW50KXQmMHgzZjsgXAorCXUyJj0weDNmOyBcCisJdD4+PTE2TDsgXAorCUxMXj1ERVNfU1B0cmFuc1sxXVt1MV07IFwKKwlMTF49REVTX1NQdHJhbnNbM11bdTJdOyBcCisJdTM9KGludCl0Pj44TDsgXAorCXUxPShpbnQpdCYweDNmOyBcCisJdTMmPTB4M2Y7IFwKKwlMTF49REVTX1NQdHJhbnNbNV1bdTFdOyBcCisJTExePURFU19TUHRyYW5zWzddW3UzXTsgfQorI2VuZGlmCisjaWZkZWYgREVTX1JJU0MyCisjZGVmaW5lIERfRU5DUllQVChMTCxSLFMpIHtcCisJdW5zaWduZWQgaW50IHUxLHUyLHMxLHMyOyBcCisJTE9BRF9EQVRBKFIsUyx1LHQsRTAsRTEsdTEpOyBcCisJdT4+PTJMOyBcCisJdD1ST1RBVEUodCw2KTsgXAorCXUyPShpbnQpdT4+OEw7IFwKKwl1MT0oaW50KXUmMHgzZjsgXAorCXUyJj0weDNmOyBcCisJTExePURFU19TUHRyYW5zWzBdW3UxXTsgXAorCUxMXj1ERVNfU1B0cmFuc1syXVt1Ml07IFwKKwlzMT0oaW50KXU+PjE2TDsgXAorCXMyPShpbnQpdT4+MjRMOyBcCisJczEmPTB4M2Y7IFwKKwlzMiY9MHgzZjsgXAorCUxMXj1ERVNfU1B0cmFuc1s0XVtzMV07IFwKKwlMTF49REVTX1NQdHJhbnNbNl1bczJdOyBcCisJdTI9KGludCl0Pj44TDsgXAorCXUxPShpbnQpdCYweDNmOyBcCisJdTImPTB4M2Y7IFwKKwlMTF49REVTX1NQdHJhbnNbMV1bdTFdOyBcCisJTExePURFU19TUHRyYW5zWzNdW3UyXTsgXAorCXMxPShpbnQpdD4+MTY7IFwKKwlzMj0oaW50KXQ+PjI0TDsgXAorCXMxJj0weDNmOyBcCisJczImPTB4M2Y7IFwKKwlMTF49REVTX1NQdHJhbnNbNV1bczFdOyBcCisJTExePURFU19TUHRyYW5zWzddW3MyXTsgfQorI2VuZGlmCisKKyNlbHNlCisKKyNkZWZpbmUgRF9FTkNSWVBUKExMLFIsUykge1wKKwlMT0FEX0RBVEFfdG1wKFIsUyx1LHQsRTAsRTEpOyBcCisJdD1ST1RBVEUodCw0KTsgXAorCUxMXj1cCisJCURFU19TUHRyYW5zWzBdWyh1Pj4gMkwpJjB4M2ZdXiBcCisJCURFU19TUHRyYW5zWzJdWyh1Pj4xMEwpJjB4M2ZdXiBcCisJCURFU19TUHRyYW5zWzRdWyh1Pj4xOEwpJjB4M2ZdXiBcCisJCURFU19TUHRyYW5zWzZdWyh1Pj4yNkwpJjB4M2ZdXiBcCisJCURFU19TUHRyYW5zWzFdWyh0Pj4gMkwpJjB4M2ZdXiBcCisJCURFU19TUHRyYW5zWzNdWyh0Pj4xMEwpJjB4M2ZdXiBcCisJCURFU19TUHRyYW5zWzVdWyh0Pj4xOEwpJjB4M2ZdXiBcCisJCURFU19TUHRyYW5zWzddWyh0Pj4yNkwpJjB4M2ZdOyB9CisjZW5kaWYKKyNlbmRpZgorCisJLyogSVAgYW5kIEZQCisJICogVGhlIHByb2JsZW0gaXMgbW9yZSBvZiBhIGdlb21ldHJpYyBwcm9ibGVtIHRoYXQgcmFuZG9tIGJpdCBmaWRkbGluZy4KKwkgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgICAgIDYyIDU0IDQ2IDM4IDMwIDIyIDE0ICA2CisJIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgICAgICA2MCA1MiA0NCAzNiAyOCAyMCAxMiAgNAorCTE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzICAgICAgNTggNTAgNDIgMzQgMjYgMTggMTAgIDIKKwkyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSAgdG8gIDU2IDQ4IDQwIDMyIDI0IDE2ICA4ICAwCisKKwkzMiAzMyAzNCAzNSAzNiAzNyAzOCAzOSAgICAgIDYzIDU1IDQ3IDM5IDMxIDIzIDE1ICA3CisJNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgICAgICA2MSA1MyA0NSAzNyAyOSAyMSAxMyAgNQorCTQ4IDQ5IDUwIDUxIDUyIDUzIDU0IDU1ICAgICAgNTkgNTEgNDMgMzUgMjcgMTkgMTEgIDMKKwk1NiA1NyA1OCA1OSA2MCA2MSA2MiA2MyAgICAgIDU3IDQ5IDQxIDMzIDI1IDE3ICA5ICAxCisKKwlUaGUgb3V0cHV0IGhhcyBiZWVuIHN1YmplY3QgdG8gc3dhcHMgb2YgdGhlIGZvcm0KKwkwIDEgLT4gMyAxIGJ1dCB0aGUgb2RkIGFuZCBldmVuIGJpdHMgaGF2ZSBiZWVuIHB1dCBpbnRvCisJMiAzICAgIDIgMAorCWRpZmZlcmVudCB3b3Jkcy4gIFRoZSBtYWluIHRyaWNrIGlzIHRvIHJlbWVtYmVyIHRoYXQKKwl0PSgobD4+c2l6ZSlecikmKG1hc2spOworCXJePXQ7CisJbF49KHQ8PHNpemUpOworCWNhbiBiZSB1c2VkIHRvIHN3YXAgYW5kIG1vdmUgYml0cyBiZXR3ZWVuIHdvcmRzLgorCisJU28gbCA9ICAwICAxICAyICAzICByID0gMTYgMTcgMTggMTkKKwkgICAgICAgIDQgIDUgIDYgIDcgICAgICAyMCAyMSAyMiAyMworCSAgICAgICAgOCAgOSAxMCAxMSAgICAgIDI0IDI1IDI2IDI3CisJICAgICAgIDEyIDEzIDE0IDE1ICAgICAgMjggMjkgMzAgMzEKKwliZWNvbWVzIChmb3Igc2l6ZSA9PSAyIGFuZCBtYXNrID09IDB4MzMzMykKKwkgICB0ID0gICAyXjE2ICAzXjE3IC0tIC0tICAgbCA9ICAwICAxIDE2IDE3ICByID0gIDIgIDMgMTggMTkKKwkJIDZeMjAgIDdeMjEgLS0gLS0gICAgICAgIDQgIDUgMjAgMjEgICAgICAgNiAgNyAyMiAyMworCQkxMF4yNCAxMV4yNSAtLSAtLSAgICAgICAgOCAgOSAyNCAyNSAgICAgIDEwIDExIDI0IDI1CisJCTE0XjI4IDE1XjI5IC0tIC0tICAgICAgIDEyIDEzIDI4IDI5ICAgICAgMTQgMTUgMjggMjkKKworCVRoYW5rcyBmb3IgaGludHMgZnJvbSBSaWNoYXJkIE91dGVyYnJpZGdlIC0gaGUgdG9sZCBtZSBJUCZGUAorCWNvdWxkIGJlIGRvbmUgaW4gMTUgeG9yLCAxMCBzaGlmdHMgYW5kIDUgYW5kcy4KKwlXaGVuIEkgZmluYWxseSBzdGFydGVkIHRvIHRoaW5rIG9mIHRoZSBwcm9ibGVtIGluIDJECisJSSBmaXJzdCBnb3QgfjQyIG9wZXJhdGlvbnMgd2l0aG91dCB4b3JzLiAgV2hlbiBJIHJlbWVtYmVyZWQKKwlob3cgdG8gdXNlIHhvcnMgOi0pIEkgZ290IGl0IHRvIGl0cyBmaW5hbCBzdGF0ZS4KKwkqLworI2RlZmluZSBQRVJNX09QKGEsYix0LG4sbSkgKCh0KT0oKCgoYSk+PihuKSleKGIpKSYobSkpLFwKKwkoYilePSh0KSxcCisJKGEpXj0oKHQpPDwobikpKQorCisjZGVmaW5lIElQKGwscikgXAorCXsgXAorCXJlZ2lzdGVyIERFU19MT05HIHR0OyBcCisJUEVSTV9PUChyLGwsdHQsIDQsMHgwZjBmMGYwZkwpOyBcCisJUEVSTV9PUChsLHIsdHQsMTYsMHgwMDAwZmZmZkwpOyBcCisJUEVSTV9PUChyLGwsdHQsIDIsMHgzMzMzMzMzM0wpOyBcCisJUEVSTV9PUChsLHIsdHQsIDgsMHgwMGZmMDBmZkwpOyBcCisJUEVSTV9PUChyLGwsdHQsIDEsMHg1NTU1NTU1NUwpOyBcCisJfQorCisjZGVmaW5lIEZQKGwscikgXAorCXsgXAorCXJlZ2lzdGVyIERFU19MT05HIHR0OyBcCisJUEVSTV9PUChsLHIsdHQsIDEsMHg1NTU1NTU1NUwpOyBcCisJUEVSTV9PUChyLGwsdHQsIDgsMHgwMGZmMDBmZkwpOyBcCisJUEVSTV9PUChsLHIsdHQsIDIsMHgzMzMzMzMzM0wpOyBcCisJUEVSTV9PUChyLGwsdHQsMTYsMHgwMDAwZmZmZkwpOyBcCisJUEVSTV9PUChsLHIsdHQsIDQsMHgwZjBmMGYwZkwpOyBcCisJfQorCitleHRlcm4gY29uc3QgREVTX0xPTkcgREVTX1NQdHJhbnNbOF1bNjRdOworCit2b2lkIGZjcnlwdF9ib2R5KERFU19MT05HICpvdXQsREVTX2tleV9zY2hlZHVsZSAqa3MsCisJCSBERVNfTE9ORyBFc3dhcDAsIERFU19MT05HIEVzd2FwMSk7CisKKyNpZmRlZiBPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVAorI3VuZGVmIERFU19VTlJPTEwKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDMyX2NvbW1vbi5oIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQzMl9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzk5MTZmCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQzMl9jb21tb24uaApAQCAtMCwwICsxLDQwOCBAQAorLyogY3J5cHRvL21kMzJfY29tbW9uLmggKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworLyoKKyAqIFRoaXMgaXMgYSBnZW5lcmljIDMyIGJpdCAiY29sbGVjdG9yIiBmb3IgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtcy4KKyAqIFdoZW5ldmVyIG5lZWRlZCBpdCBjb2xsZWN0cyBpbnB1dCBjaGFyYWN0ZXIgc3RyZWFtIGludG8gY2h1bmtzIG9mCisgKiAzMiBiaXQgdmFsdWVzIGFuZCBpbnZva2VzIGEgYmxvY2sgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhY3R1YWwgaGFzaAorICogY2FsY3VsYXRpb25zLgorICoKKyAqIFBvcnRpbmcgZ3VpZGUuCisgKgorICogT2JsaWdhdG9yeSBtYWNyb3M6CisgKgorICogREFUQV9PUkRFUl9JU19CSUdfRU5ESUFOIG9yIERBVEFfT1JERVJfSVNfTElUVExFX0VORElBTgorICoJdGhpcyBtYWNybyBkZWZpbmVzIGJ5dGUgb3JkZXIgb2YgaW5wdXQgc3RyZWFtLgorICogSEFTSF9DQkxPQ0sKKyAqCXNpemUgb2YgYSB1bml0IGNodW5rIEhBU0hfQkxPQ0sgb3BlcmF0ZXMgb24uCisgKiBIQVNIX0xPTkcKKyAqCWhhcyB0byBiZSBhdCBsZXN0IDMyIGJpdCB3aWRlLCBpZiBpdCdzIHdpZGVyLCB0aGVuCisgKglIQVNIX0xPTkdfTE9HMiAqaGFzIHRvKiBiZSBkZWZpbmVkIGFsb25nCisgKiBIQVNIX0NUWAorICoJY29udGV4dCBzdHJ1Y3R1cmUgdGhhdCBhdCBsZWFzdCBjb250YWlucyBmb2xsb3dpbmcKKyAqCW1lbWJlcnM6CisgKgkJdHlwZWRlZiBzdHJ1Y3QgeworICoJCQkuLi4KKyAqCQkJSEFTSF9MT05HCU5sLE5oOworICoJCQllaXRoZXIgeworICoJCQlIQVNIX0xPTkcJZGF0YVtIQVNIX0xCTE9DS107CisgKgkJCXVuc2lnbmVkIGNoYXIJZGF0YVtIQVNIX0NCTE9DS107CisgKgkJCX07CisgKgkJCXVuc2lnbmVkIGludAludW07CisgKgkJCS4uLgorICoJCQl9IEhBU0hfQ1RYOworICoJZGF0YVtdIHZlY3RvciBpcyBleHBlY3RlZCB0byBiZSB6ZXJvZWQgdXBvbiBmaXJzdCBjYWxsIHRvCisgKglIQVNIX1VQREFURS4KKyAqIEhBU0hfVVBEQVRFCisgKgluYW1lIG9mICJVcGRhdGUiIGZ1bmN0aW9uLCBpbXBsZW1lbnRlZCBoZXJlLgorICogSEFTSF9UUkFOU0ZPUk0KKyAqCW5hbWUgb2YgIlRyYW5zZm9ybSIgZnVuY3Rpb24sIGltcGxlbWVudGVkIGhlcmUuCisgKiBIQVNIX0ZJTkFMCisgKgluYW1lIG9mICJGaW5hbCIgZnVuY3Rpb24sIGltcGxlbWVudGVkIGhlcmUuCisgKiBIQVNIX0JMT0NLX0RBVEFfT1JERVIKKyAqCW5hbWUgb2YgImJsb2NrIiBmdW5jdGlvbiBjYXBhYmxlIG9mIHRyZWF0aW5nICp1bmFsaWduZWQqIGlucHV0CisgKgltZXNzYWdlIGluIG9yaWdpbmFsIChkYXRhKSBieXRlIG9yZGVyLCBpbXBsZW1lbnRlZCBleHRlcm5hbGx5LgorICogSEFTSF9NQUtFX1NUUklORworICoJbWFjcm8gY29udmVyaW5nIGNvbnRleHQgdmFyaWFibGVzIHRvIGFuIEFTQ0lJIGhhc2ggc3RyaW5nLgorICoKKyAqIE1ENSBleGFtcGxlOgorICoKKyAqCSNkZWZpbmUgREFUQV9PUkRFUl9JU19MSVRUTEVfRU5ESUFOCisgKgorICoJI2RlZmluZSBIQVNIX0xPTkcJCU1ENV9MT05HCisgKgkjZGVmaW5lIEhBU0hfTE9OR19MT0cyCQlNRDVfTE9OR19MT0cyCisgKgkjZGVmaW5lIEhBU0hfQ1RYCQlNRDVfQ1RYCisgKgkjZGVmaW5lIEhBU0hfQ0JMT0NLCQlNRDVfQ0JMT0NLCisgKgkjZGVmaW5lIEhBU0hfVVBEQVRFCQlNRDVfVXBkYXRlCisgKgkjZGVmaW5lIEhBU0hfVFJBTlNGT1JNCQlNRDVfVHJhbnNmb3JtCisgKgkjZGVmaW5lIEhBU0hfRklOQUwJCU1ENV9GaW5hbAorICoJI2RlZmluZSBIQVNIX0JMT0NLX0RBVEFfT1JERVIJbWQ1X2Jsb2NrX2RhdGFfb3JkZXIKKyAqCisgKgkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgorICovCisKKyNpZiAhZGVmaW5lZChEQVRBX09SREVSX0lTX0JJR19FTkRJQU4pICYmICFkZWZpbmVkKERBVEFfT1JERVJfSVNfTElUVExFX0VORElBTikKKyNlcnJvciAiREFUQV9PUkRFUiBtdXN0IGJlIGRlZmluZWQhIgorI2VuZGlmCisKKyNpZm5kZWYgSEFTSF9DQkxPQ0sKKyNlcnJvciAiSEFTSF9DQkxPQ0sgbXVzdCBiZSBkZWZpbmVkISIKKyNlbmRpZgorI2lmbmRlZiBIQVNIX0xPTkcKKyNlcnJvciAiSEFTSF9MT05HIG11c3QgYmUgZGVmaW5lZCEiCisjZW5kaWYKKyNpZm5kZWYgSEFTSF9DVFgKKyNlcnJvciAiSEFTSF9DVFggbXVzdCBiZSBkZWZpbmVkISIKKyNlbmRpZgorCisjaWZuZGVmIEhBU0hfVVBEQVRFCisjZXJyb3IgIkhBU0hfVVBEQVRFIG11c3QgYmUgZGVmaW5lZCEiCisjZW5kaWYKKyNpZm5kZWYgSEFTSF9UUkFOU0ZPUk0KKyNlcnJvciAiSEFTSF9UUkFOU0ZPUk0gbXVzdCBiZSBkZWZpbmVkISIKKyNlbmRpZgorI2lmbmRlZiBIQVNIX0ZJTkFMCisjZXJyb3IgIkhBU0hfRklOQUwgbXVzdCBiZSBkZWZpbmVkISIKKyNlbmRpZgorCisjaWZuZGVmIEhBU0hfQkxPQ0tfREFUQV9PUkRFUgorI2Vycm9yICJIQVNIX0JMT0NLX0RBVEFfT1JERVIgbXVzdCBiZSBkZWZpbmVkISIKKyNlbmRpZgorCisvKgorICogRW5nYWdlIGNvbXBpbGVyIHNwZWNpZmljIHJvdGF0ZSBpbnRyaW5zaWMgZnVuY3Rpb24gaWYgYXZhaWxhYmxlLgorICovCisjdW5kZWYgUk9UQVRFCisjaWZuZGVmIFBFREFOVElDCisjIGlmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19JQ0MpCisjICBkZWZpbmUgUk9UQVRFKGEsbikJX2xyb3RsKGEsbikKKyMgZWxpZiBkZWZpbmVkKF9fTVdFUktTX18pCisjICBpZiBkZWZpbmVkKF9fUE9XRVJQQ19fKQorIyAgIGRlZmluZSBST1RBVEUoYSxuKQlfX3Jsd2lubShhLG4sMCwzMSkKKyMgIGVsaWYgZGVmaW5lZChfX01DNjhLX18pCisgICAgLyogTW90b3JvbGEgc3BlY2lmaWMgdHdlYWsuIDxhcHByb0BmeS5jaGFsbWVycy5zZT4gKi8KKyMgICBkZWZpbmUgUk9UQVRFKGEsbikJKCBuPDI0ID8gX19yb2woYSxuKSA6IF9fcm9yKGEsMzItbikgKQorIyAgZWxzZQorIyAgIGRlZmluZSBST1RBVEUoYSxuKQlfX3JvbChhLG4pCisjICBlbmRpZgorIyBlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0lOTElORV9BU00pCisgIC8qCisgICAqIFNvbWUgR05VIEMgaW5saW5lIGFzc2VtYmxlciB0ZW1wbGF0ZXMuIE5vdGUgdGhhdCB0aGVzZSBhcmUKKyAgICogcm90YXRlcyBieSAqY29uc3RhbnQqIG51bWJlciBvZiBiaXRzISBCdXQgdGhhdCdzIGV4YWN0bHkKKyAgICogd2hhdCB3ZSBuZWVkIGhlcmUuLi4KKyAgICogCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgICAqLworIyAgaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyMgICBkZWZpbmUgUk9UQVRFKGEsbikJKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJldDsJXAorCQkJCWFzbSAoCQkJXAorCQkJCSJyb2xsICUxLCUwIgkJXAorCQkJCTogIj1yIihyZXQpCQlcCisJCQkJOiAiSSIobiksICIwIihhKQlcCisJCQkJOiAiY2MiKTsJCVwKKwkJCSAgIHJldDsJCQkJXAorCQkJfSkKKyMgIGVsaWYgZGVmaW5lZChfQVJDSF9QUEMpIHx8IGRlZmluZWQoX0FSQ0hfUFBDNjQpIHx8IFwKKwlkZWZpbmVkKF9fcG93ZXJwYykgfHwgZGVmaW5lZChfX3BwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisjICAgZGVmaW5lIFJPVEFURShhLG4pCSh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXQ7CVwKKwkJCQlhc20gKAkJCVwKKwkJCQkicmx3aW5tICUwLCUxLCUyLDAsMzEiCVwKKwkJCQk6ICI9ciIocmV0KQkJXAorCQkJCTogInIiKGEpLCAiSSIobikpOwlcCisJCQkgICByZXQ7CQkJCVwKKwkJCX0pCisjICBlbGlmIGRlZmluZWQoX19zMzkweF9fKQorIyAgIGRlZmluZSBST1RBVEUoYSxuKSAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmV0OwlcCisJCQkJYXNtICgicmxsICUwLCUxLCUyIglcCisJCQkJOiAiPXIiKHJldCkJCVwKKwkJCQk6ICJyIihhKSwgIkkiKG4pKTsJXAorCQkJICByZXQ7CQkJCVwKKwkJCX0pCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qIFBFREFOVElDICovCisKKyNpZm5kZWYgUk9UQVRFCisjZGVmaW5lIFJPVEFURShhLG4pICAgICAoKChhKTw8KG4pKXwoKChhKSYweGZmZmZmZmZmKT4+KDMyLShuKSkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERBVEFfT1JERVJfSVNfQklHX0VORElBTikKKworI2lmbmRlZiBQRURBTlRJQworIyBpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MiAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19JTkxJTkVfQVNNKQorIyAgaWYgKChkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykpICYmICFkZWZpbmVkKEkzODZfT05MWSkpIHx8IFwKKyAgICAgIChkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorIyAgIGlmICFkZWZpbmVkKEJfRU5ESUFOKQorICAgIC8qCisgICAgICogVGhpcyBnaXZlcyB+MzAtNDAlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGluIFNIQS0yNTYgY29tcGlsZWQKKyAgICAgKiB3aXRoIGdjYyBbb24gUDRdLiBXZWxsLCBmaXJzdCBtYWNybyB0byBiZSBmcmFuay4gV2UgY2FuIHB1bGwKKyAgICAgKiB0aGlzIHRyaWNrIG9uIHg4NiogcGxhdGZvcm1zIG9ubHksIGJlY2F1c2UgdGhlc2UgQ1BVcyBjYW4gZmV0Y2gKKyAgICAgKiB1bmFsaWduZWQgZGF0YSB3aXRob3V0IHJhaXNpbmcgYW4gZXhjZXB0aW9uLgorICAgICAqLworIyAgIGRlZmluZSBIT1NUX2MybChjLGwpCSh7IHVuc2lnbmVkIGludCByPSooKGNvbnN0IHVuc2lnbmVkIGludCAqKShjKSk7CVwKKwkJCQkgICBhc20gKCJic3dhcGwgJTAiOiI9ciIocik6IjAiKHIpKTsJXAorCQkJCSAgIChjKSs9NDsgKGwpPXI7CQkJfSkKKyMgICBkZWZpbmUgSE9TVF9sMmMobCxjKQkoeyB1bnNpZ25lZCBpbnQgcj0obCk7CQkJXAorCQkJCSAgIGFzbSAoImJzd2FwbCAlMCI6Ij1yIihyKToiMCIocikpOwlcCisJCQkJICAgKigodW5zaWduZWQgaW50ICopKGMpKT1yOyAoYykrPTQ7IHI7CX0pCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykKKyMgZGVmaW5lIEhPU1RfYzJsKGMsbCkgKChsKT0qKChjb25zdCB1bnNpZ25lZCBpbnQgKikoYykpLCAoYykrPTQsIChsKSkKKyMgZGVmaW5lIEhPU1RfbDJjKGwsYykgKCooKHVuc2lnbmVkIGludCAqKShjKSk9KGwpLCAoYykrPTQsIChsKSkKKyNlbmRpZgorCisjaWZuZGVmIEhPU1RfYzJsCisjZGVmaW5lIEhPU1RfYzJsKGMsbCkJKGwgPSgoKHVuc2lnbmVkIGxvbmcpKCooKGMpKyspKSk8PDI0KSwJCVwKKwkJCSBsfD0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpPDwxNiksCQlcCisJCQkgbHw9KCgodW5zaWduZWQgbG9uZykoKigoYykrKykpKTw8IDgpLAkJXAorCQkJIGx8PSgoKHVuc2lnbmVkIGxvbmcpKCooKGMpKyspKSkgICAgKSwJCVwKKwkJCSBsKQorI2VuZGlmCisjaWZuZGVmIEhPU1RfbDJjCisjZGVmaW5lIEhPU1RfbDJjKGwsYykJKCooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNCkmMHhmZiksCVwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MTYpJjB4ZmYpLAlcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PiA4KSYweGZmKSwJXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpICAgICkmMHhmZiksCVwKKwkJCSBsKQorI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoREFUQV9PUkRFUl9JU19MSVRUTEVfRU5ESUFOKQorCisjaWZuZGVmIFBFREFOVElDCisjIGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0lOTElORV9BU00pCisjICBpZiBkZWZpbmVkKF9fczM5MHhfXykKKyMgICBkZWZpbmUgSE9TVF9jMmwoYyxsKQkoeyBhc20gKCJscnYJJTAsMCglMSkiCQlcCisJCQkJCToiPXIiKGwpIDogInIiKGMpKTsJCVwKKwkJCQkgICAoYykrPTQ7IChsKTsJCQkJfSkKKyMgICBkZWZpbmUgSE9TVF9sMmMobCxjKQkoeyBhc20gKCJzdHJ2CSUwLDAoJTEpIgkJXAorCQkJCQk6IDogInIiKGwpLCJyIihjKSA6ICJtZW1vcnkiKTsJXAorCQkJCSAgIChjKSs9NDsgKGwpOwkJCQl9KQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjIGlmbmRlZiBCX0VORElBTgorICAgLyogU2VlIGNvbW1lbnQgaW4gREFUQV9PUkRFUl9JU19CSUdfRU5ESUFOIHNlY3Rpb24uICovCisjICBkZWZpbmUgSE9TVF9jMmwoYyxsKQkoKGwpPSooKGNvbnN0IHVuc2lnbmVkIGludCAqKShjKSksIChjKSs9NCwgbCkKKyMgIGRlZmluZSBIT1NUX2wyYyhsLGMpCSgqKCh1bnNpZ25lZCBpbnQgKikoYykpPShsKSwgKGMpKz00LCBsKQorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSE9TVF9jMmwKKyNkZWZpbmUgSE9TVF9jMmwoYyxsKQkobCA9KCgodW5zaWduZWQgbG9uZykoKigoYykrKykpKSAgICApLAkJXAorCQkJIGx8PSgoKHVuc2lnbmVkIGxvbmcpKCooKGMpKyspKSk8PCA4KSwJCVwKKwkJCSBsfD0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpPDwxNiksCQlcCisJCQkgbHw9KCgodW5zaWduZWQgbG9uZykoKigoYykrKykpKTw8MjQpLAkJXAorCQkJIGwpCisjZW5kaWYKKyNpZm5kZWYgSE9TVF9sMmMKKyNkZWZpbmUgSE9TVF9sMmMobCxjKQkoKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCkgICAgKSYweGZmKSwJXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4gOCkmMHhmZiksCVwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MTYpJjB4ZmYpLAlcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjI0KSYweGZmKSwJXAorCQkJIGwpCisjZW5kaWYKKworI2VuZGlmCisKKy8qCisgKiBUaW1lIGZvciBzb21lIGFjdGlvbjotKQorICovCisKK2ludCBIQVNIX1VQREFURSAoSEFTSF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGFfLCBzaXplX3QgbGVuKQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhPWRhdGFfOworCXVuc2lnbmVkIGNoYXIgKnA7CisJSEFTSF9MT05HIGw7CisJc2l6ZV90IG47CisKKwlpZiAobGVuPT0wKSByZXR1cm4gMTsKKworCWw9KGMtPk5sKygoKEhBU0hfTE9ORylsZW4pPDwzKSkmMHhmZmZmZmZmZlVMOworCS8qIDk1LTA1LTI0IGVheSBGaXhlZCBhIGJ1ZyB3aXRoIHRoZSBvdmVyZmxvdyBoYW5kbGluZywgdGhhbmtzIHRvCisJICogV2VpIERhaSA8d2VpZGFpQGVza2ltby5jb20+IGZvciBwb2ludGluZyBpdCBvdXQuICovCisJaWYgKGwgPCBjLT5ObCkgLyogb3ZlcmZsb3cgKi8KKwkJYy0+TmgrKzsKKwljLT5OaCs9KEhBU0hfTE9ORykobGVuPj4yOSk7CS8qIG1pZ2h0IGNhdXNlIGNvbXBpbGVyIHdhcm5pbmcgb24gMTYtYml0ICovCisJYy0+Tmw9bDsKKworCW4gPSBjLT5udW07CisJaWYgKG4gIT0gMCkKKwkJeworCQlwPSh1bnNpZ25lZCBjaGFyICopYy0+ZGF0YTsKKworCQlpZiAobGVuID49IEhBU0hfQ0JMT0NLIHx8IGxlbituID49IEhBU0hfQ0JMT0NLKQorCQkJeworCQkJbWVtY3B5IChwK24sZGF0YSxIQVNIX0NCTE9DSy1uKTsKKwkJCUhBU0hfQkxPQ0tfREFUQV9PUkRFUiAoYyxwLDEpOworCQkJbiAgICAgID0gSEFTSF9DQkxPQ0stbjsKKwkJCWRhdGEgICs9IG47CisJCQlsZW4gICAtPSBuOworCQkJYy0+bnVtID0gMDsKKwkJCW1lbXNldCAocCwwLEhBU0hfQ0JMT0NLKTsJLyoga2VlcCBpdCB6ZXJvZWQgKi8KKwkJCX0KKwkJZWxzZQorCQkJeworCQkJbWVtY3B5IChwK24sZGF0YSxsZW4pOworCQkJYy0+bnVtICs9ICh1bnNpZ25lZCBpbnQpbGVuOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKworCW4gPSBsZW4vSEFTSF9DQkxPQ0s7CisJaWYgKG4gPiAwKQorCQl7CisJCUhBU0hfQkxPQ0tfREFUQV9PUkRFUiAoYyxkYXRhLG4pOworCQluICAgICo9IEhBU0hfQ0JMT0NLOworCQlkYXRhICs9IG47CisJCWxlbiAgLT0gbjsKKwkJfQorCisJaWYgKGxlbiAhPSAwKQorCQl7CisJCXAgPSAodW5zaWduZWQgY2hhciAqKWMtPmRhdGE7CisJCWMtPm51bSA9ICh1bnNpZ25lZCBpbnQpbGVuOworCQltZW1jcHkgKHAsZGF0YSxsZW4pOworCQl9CisJcmV0dXJuIDE7CisJfQorCisKK3ZvaWQgSEFTSF9UUkFOU0ZPUk0gKEhBU0hfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorCXsKKwlIQVNIX0JMT0NLX0RBVEFfT1JERVIgKGMsZGF0YSwxKTsKKwl9CisKKworaW50IEhBU0hfRklOQUwgKHVuc2lnbmVkIGNoYXIgKm1kLCBIQVNIX0NUWCAqYykKKwl7CisJdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopYy0+ZGF0YTsKKwlzaXplX3QgbiA9IGMtPm51bTsKKworCXBbbl0gPSAweDgwOyAvKiB0aGVyZSBpcyBhbHdheXMgcm9vbSBmb3Igb25lICovCisJbisrOworCisJaWYgKG4gPiAoSEFTSF9DQkxPQ0stOCkpCisJCXsKKwkJbWVtc2V0IChwK24sMCxIQVNIX0NCTE9DSy1uKTsKKwkJbj0wOworCQlIQVNIX0JMT0NLX0RBVEFfT1JERVIgKGMscCwxKTsKKwkJfQorCW1lbXNldCAocCtuLDAsSEFTSF9DQkxPQ0stOC1uKTsKKworCXAgKz0gSEFTSF9DQkxPQ0stODsKKyNpZiAgIGRlZmluZWQoREFUQV9PUkRFUl9JU19CSUdfRU5ESUFOKQorCSh2b2lkKUhPU1RfbDJjKGMtPk5oLHApOworCSh2b2lkKUhPU1RfbDJjKGMtPk5sLHApOworI2VsaWYgZGVmaW5lZChEQVRBX09SREVSX0lTX0xJVFRMRV9FTkRJQU4pCisJKHZvaWQpSE9TVF9sMmMoYy0+TmwscCk7CisJKHZvaWQpSE9TVF9sMmMoYy0+TmgscCk7CisjZW5kaWYKKwlwIC09IEhBU0hfQ0JMT0NLOworCUhBU0hfQkxPQ0tfREFUQV9PUkRFUiAoYyxwLDEpOworCWMtPm51bT0wOworCW1lbXNldCAocCwwLEhBU0hfQ0JMT0NLKTsKKworI2lmbmRlZiBIQVNIX01BS0VfU1RSSU5HCisjZXJyb3IgIkhBU0hfTUFLRV9TVFJJTkcgbXVzdCBiZSBkZWZpbmVkISIKKyNlbHNlCisJSEFTSF9NQUtFX1NUUklORyhjLG1kKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7CisJfQorCisjaWZuZGVmIE1EMzJfUkVHX1QKKyNkZWZpbmUgTUQzMl9SRUdfVCBsb25nCisvKgorICogVGhpcyBjb21tZW50IHdhcyBvcmlnaW5hbHkgd3JpdHRlbiBmb3IgTUQ1LCB3aGljaCBpcyB3aHkgaXQKKyAqIGRpc2N1c3NlcyBBLUQuIEJ1dCBpdCBiYXNpY2FsbHkgYXBwbGllcyB0byBhbGwgMzItYml0IGRpZ2VzdHMsCisgKiB3aGljaCBpcyB3aHkgaXQgd2FzIG1vdmVkIHRvIGNvbW1vbiBoZWFkZXIgZmlsZS4KKyAqCisgKiBJbiBjYXNlIHlvdSB3b25kZXIgd2h5IEEtRCBhcmUgZGVjbGFyZWQgYXMgbG9uZyBhbmQgbm90CisgKiBhcyBNRDVfTE9ORy4gRG9pbmcgc28gcmVzdWx0cyBpbiBzbGlnaHQgcGVyZm9ybWFuY2UKKyAqIGJvb3N0IG9uIExQNjQgYXJjaGl0ZWN0dXJlcy4gVGhlIGNhdGNoIGlzIHdlIGRvbid0CisgKiByZWFsbHkgY2FyZSBpZiAzMiBNU0JzIG9mIGEgNjQtYml0IHJlZ2lzdGVyIGdldCBwb2xsdXRlZAorICogd2l0aCBldmVudHVhbCBvdmVyZmxvd3MgYXMgd2UgKnNhdmUqIG9ubHkgMzIgTFNCcyBpbgorICogKmVpdGhlciogY2FzZS4gTm93IGRlY2xhcmluZyAnZW0gbG9uZyBleGN1c2VzIHRoZSBjb21waWxlcgorICogZnJvbSBrZWVwaW5nIDMyIE1TQnMgemVyb2VkIHJlc3VsdGluZyBpbiAxMyUgcGVyZm9ybWFuY2UKKyAqIGltcHJvdmVtZW50IHVuZGVyIFNQQVJDIFNvbGFyaXM3LzY0IGFuZCA1JSB1bmRlciBBbHBoYUxpbnV4LgorICogV2VsbCwgdG8gYmUgaG9uZXN0IGl0IHNob3VsZCBzYXkgdGhhdCB0aGlzICpwcmV2ZW50cyogCisgKiBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4KKyAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAqIEFwcGFyZW50bHkgdGhlcmUncmUgTFA2NCBjb21waWxlcnMgdGhhdCBnZW5lcmF0ZSBiZXR0ZXIKKyAqIGNvZGUgaWYgQS1EIGFyZSBkZWNsYXJlZCBpbnQuIE1vc3Qgbm90YWJseSBHQ0MteDg2XzY0CisgKiBnZW5lcmF0ZXMgYmV0dGVyIGNvZGUuCisgKgkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1LmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODdhZGIzCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1LmMKQEAgLTAsMCArMSwxODEgQEAKKy8qIGNyeXB0by9tZDUvbWQ1X2Rnc3QuYyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJvcGVuc3NsX21kNV9sb2NhbC5oIgorCisvKiBJbXBsZW1lbnRlZCBmcm9tIFJGQzEzMjEgVGhlIE1ENSBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0KKyAqLworCisjZGVmaW5lIElOSVRfREFUQV9BICh1bnNpZ25lZCBsb25nKTB4Njc0NTIzMDFMCisjZGVmaW5lIElOSVRfREFUQV9CICh1bnNpZ25lZCBsb25nKTB4ZWZjZGFiODlMCisjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCisjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisKK2ludCBNRDVfSW5pdChNRDVfQ1RYICpjKQorCXsKKwltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKwljLT5BPUlOSVRfREFUQV9BOworCWMtPkI9SU5JVF9EQVRBX0I7CisJYy0+Qz1JTklUX0RBVEFfQzsKKwljLT5EPUlOSVRfREFUQV9EOworCXJldHVybiAxOworCX0KKworI2lmbmRlZiBtZDVfYmxvY2tfZGF0YV9vcmRlcgorI2lmZGVmIFgKKyN1bmRlZiBYCisjZW5kaWYKK3ZvaWQgbWQ1X2Jsb2NrX2RhdGFfb3JkZXIgKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGFfLCBzaXplX3QgbnVtKQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhPWRhdGFfOworCXJlZ2lzdGVyIHVuc2lnbmVkIE1EMzJfUkVHX1QgQSxCLEMsRCxsOworI2lmbmRlZiBNRDMyX1hBUlJBWQorCS8qIFNlZSBjb21tZW50IGluIGNyeXB0by9zaGEvc2hhX2xvY2wuaCBmb3IgZGV0YWlscy4gKi8KKwl1bnNpZ25lZCBNRDMyX1JFR19UCVhYMCwgWFgxLCBYWDIsIFhYMywgWFg0LCBYWDUsIFhYNiwgWFg3LAorCQkJCVhYOCwgWFg5LFhYMTAsWFgxMSxYWDEyLFhYMTMsWFgxNCxYWDE1OworIyBkZWZpbmUgWChpKQlYWCMjaQorI2Vsc2UKKwlNRDVfTE9ORyBYWFtNRDVfTEJMT0NLXTsKKyMgZGVmaW5lIFgoaSkJWFhbaV0KKyNlbmRpZgorCisJQT1jLT5BOworCUI9Yy0+QjsKKwlDPWMtPkM7CisJRD1jLT5EOworCisJZm9yICg7bnVtLS07KQorCQl7CisJSE9TVF9jMmwoZGF0YSxsKTsgWCggMCk9bDsJCUhPU1RfYzJsKGRhdGEsbCk7IFgoIDEpPWw7CisJLyogUm91bmQgMCAqLworCVIwKEEsQixDLEQsWCggMCksIDcsMHhkNzZhYTQ3OEwpOwlIT1NUX2MybChkYXRhLGwpOyBYKCAyKT1sOworCVIwKEQsQSxCLEMsWCggMSksMTIsMHhlOGM3Yjc1NkwpOwlIT1NUX2MybChkYXRhLGwpOyBYKCAzKT1sOworCVIwKEMsRCxBLEIsWCggMiksMTcsMHgyNDIwNzBkYkwpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA0KT1sOworCVIwKEIsQyxELEEsWCggMyksMjIsMHhjMWJkY2VlZUwpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA1KT1sOworCVIwKEEsQixDLEQsWCggNCksIDcsMHhmNTdjMGZhZkwpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA2KT1sOworCVIwKEQsQSxCLEMsWCggNSksMTIsMHg0Nzg3YzYyYUwpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA3KT1sOworCVIwKEMsRCxBLEIsWCggNiksMTcsMHhhODMwNDYxM0wpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA4KT1sOworCVIwKEIsQyxELEEsWCggNyksMjIsMHhmZDQ2OTUwMUwpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA5KT1sOworCVIwKEEsQixDLEQsWCggOCksIDcsMHg2OTgwOThkOEwpOwlIT1NUX2MybChkYXRhLGwpOyBYKDEwKT1sOworCVIwKEQsQSxCLEMsWCggOSksMTIsMHg4YjQ0ZjdhZkwpOwlIT1NUX2MybChkYXRhLGwpOyBYKDExKT1sOworCVIwKEMsRCxBLEIsWCgxMCksMTcsMHhmZmZmNWJiMUwpOwlIT1NUX2MybChkYXRhLGwpOyBYKDEyKT1sOworCVIwKEIsQyxELEEsWCgxMSksMjIsMHg4OTVjZDdiZUwpOwlIT1NUX2MybChkYXRhLGwpOyBYKDEzKT1sOworCVIwKEEsQixDLEQsWCgxMiksIDcsMHg2YjkwMTEyMkwpOwlIT1NUX2MybChkYXRhLGwpOyBYKDE0KT1sOworCVIwKEQsQSxCLEMsWCgxMyksMTIsMHhmZDk4NzE5M0wpOwlIT1NUX2MybChkYXRhLGwpOyBYKDE1KT1sOworCVIwKEMsRCxBLEIsWCgxNCksMTcsMHhhNjc5NDM4ZUwpOworCVIwKEIsQyxELEEsWCgxNSksMjIsMHg0OWI0MDgyMUwpOworCS8qIFJvdW5kIDEgKi8KKwlSMShBLEIsQyxELFgoIDEpLCA1LDB4ZjYxZTI1NjJMKTsKKwlSMShELEEsQixDLFgoIDYpLCA5LDB4YzA0MGIzNDBMKTsKKwlSMShDLEQsQSxCLFgoMTEpLDE0LDB4MjY1ZTVhNTFMKTsKKwlSMShCLEMsRCxBLFgoIDApLDIwLDB4ZTliNmM3YWFMKTsKKwlSMShBLEIsQyxELFgoIDUpLCA1LDB4ZDYyZjEwNWRMKTsKKwlSMShELEEsQixDLFgoMTApLCA5LDB4MDI0NDE0NTNMKTsKKwlSMShDLEQsQSxCLFgoMTUpLDE0LDB4ZDhhMWU2ODFMKTsKKwlSMShCLEMsRCxBLFgoIDQpLDIwLDB4ZTdkM2ZiYzhMKTsKKwlSMShBLEIsQyxELFgoIDkpLCA1LDB4MjFlMWNkZTZMKTsKKwlSMShELEEsQixDLFgoMTQpLCA5LDB4YzMzNzA3ZDZMKTsKKwlSMShDLEQsQSxCLFgoIDMpLDE0LDB4ZjRkNTBkODdMKTsKKwlSMShCLEMsRCxBLFgoIDgpLDIwLDB4NDU1YTE0ZWRMKTsKKwlSMShBLEIsQyxELFgoMTMpLCA1LDB4YTllM2U5MDVMKTsKKwlSMShELEEsQixDLFgoIDIpLCA5LDB4ZmNlZmEzZjhMKTsKKwlSMShDLEQsQSxCLFgoIDcpLDE0LDB4Njc2ZjAyZDlMKTsKKwlSMShCLEMsRCxBLFgoMTIpLDIwLDB4OGQyYTRjOGFMKTsKKwkvKiBSb3VuZCAyICovCisJUjIoQSxCLEMsRCxYKCA1KSwgNCwweGZmZmEzOTQyTCk7CisJUjIoRCxBLEIsQyxYKCA4KSwxMSwweDg3NzFmNjgxTCk7CisJUjIoQyxELEEsQixYKDExKSwxNiwweDZkOWQ2MTIyTCk7CisJUjIoQixDLEQsQSxYKDE0KSwyMywweGZkZTUzODBjTCk7CisJUjIoQSxCLEMsRCxYKCAxKSwgNCwweGE0YmVlYTQ0TCk7CisJUjIoRCxBLEIsQyxYKCA0KSwxMSwweDRiZGVjZmE5TCk7CisJUjIoQyxELEEsQixYKCA3KSwxNiwweGY2YmI0YjYwTCk7CisJUjIoQixDLEQsQSxYKDEwKSwyMywweGJlYmZiYzcwTCk7CisJUjIoQSxCLEMsRCxYKDEzKSwgNCwweDI4OWI3ZWM2TCk7CisJUjIoRCxBLEIsQyxYKCAwKSwxMSwweGVhYTEyN2ZhTCk7CisJUjIoQyxELEEsQixYKCAzKSwxNiwweGQ0ZWYzMDg1TCk7CisJUjIoQixDLEQsQSxYKCA2KSwyMywweDA0ODgxZDA1TCk7CisJUjIoQSxCLEMsRCxYKCA5KSwgNCwweGQ5ZDRkMDM5TCk7CisJUjIoRCxBLEIsQyxYKDEyKSwxMSwweGU2ZGI5OWU1TCk7CisJUjIoQyxELEEsQixYKDE1KSwxNiwweDFmYTI3Y2Y4TCk7CisJUjIoQixDLEQsQSxYKCAyKSwyMywweGM0YWM1NjY1TCk7CisJLyogUm91bmQgMyAqLworCVIzKEEsQixDLEQsWCggMCksIDYsMHhmNDI5MjI0NEwpOworCVIzKEQsQSxCLEMsWCggNyksMTAsMHg0MzJhZmY5N0wpOworCVIzKEMsRCxBLEIsWCgxNCksMTUsMHhhYjk0MjNhN0wpOworCVIzKEIsQyxELEEsWCggNSksMjEsMHhmYzkzYTAzOUwpOworCVIzKEEsQixDLEQsWCgxMiksIDYsMHg2NTViNTljM0wpOworCVIzKEQsQSxCLEMsWCggMyksMTAsMHg4ZjBjY2M5MkwpOworCVIzKEMsRCxBLEIsWCgxMCksMTUsMHhmZmVmZjQ3ZEwpOworCVIzKEIsQyxELEEsWCggMSksMjEsMHg4NTg0NWRkMUwpOworCVIzKEEsQixDLEQsWCggOCksIDYsMHg2ZmE4N2U0ZkwpOworCVIzKEQsQSxCLEMsWCgxNSksMTAsMHhmZTJjZTZlMEwpOworCVIzKEMsRCxBLEIsWCggNiksMTUsMHhhMzAxNDMxNEwpOworCVIzKEIsQyxELEEsWCgxMyksMjEsMHg0ZTA4MTFhMUwpOworCVIzKEEsQixDLEQsWCggNCksIDYsMHhmNzUzN2U4MkwpOworCVIzKEQsQSxCLEMsWCgxMSksMTAsMHhiZDNhZjIzNUwpOworCVIzKEMsRCxBLEIsWCggMiksMTUsMHgyYWQ3ZDJiYkwpOworCVIzKEIsQyxELEEsWCggOSksMjEsMHhlYjg2ZDM5MUwpOworCisJQSA9IGMtPkEgKz0gQTsKKwlCID0gYy0+QiArPSBCOworCUMgPSBjLT5DICs9IEM7CisJRCA9IGMtPkQgKz0gRDsKKwkJfQorCX0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1X2xvY2FsLmggYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDVfbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2VmMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1X2xvY2FsLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qIGNyeXB0by9tZDUvbWQ1X2xvY2wuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3BlbnNzbF9tZDUuaD4KKworI2lmbmRlZiBNRDVfTE9OR19MT0cyCisjZGVmaW5lIE1ENV9MT05HX0xPRzIgMiAvKiBkZWZhdWx0IHRvIDMyIGJpdHMgKi8KKyNlbmRpZgorCisjaWZkZWYgTUQ1X0FTTQorIyBpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9fSU5URUxfXykgfHwgXAorICAgICBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQorIyAgZGVmaW5lIG1kNV9ibG9ja19kYXRhX29yZGVyIG1kNV9ibG9ja19hc21fZGF0YV9vcmRlcgorIyBlbGlmIGRlZmluZWQoX19pYTY0KSB8fCBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9NX0lBNjQpCisjICBkZWZpbmUgbWQ1X2Jsb2NrX2RhdGFfb3JkZXIgbWQ1X2Jsb2NrX2FzbV9kYXRhX29yZGVyCisjIGVuZGlmCisjZW5kaWYKKwordm9pZCBtZDVfYmxvY2tfZGF0YV9vcmRlciAoTUQ1X0NUWCAqYywgY29uc3Qgdm9pZCAqcCxzaXplX3QgbnVtKTsKKworI2RlZmluZSBEQVRBX09SREVSX0lTX0xJVFRMRV9FTkRJQU4KKworI2RlZmluZSBIQVNIX0xPTkcJCU1ENV9MT05HCisjZGVmaW5lIEhBU0hfQ1RYCQlNRDVfQ1RYCisjZGVmaW5lIEhBU0hfQ0JMT0NLCQlNRDVfQ0JMT0NLCisjZGVmaW5lIEhBU0hfVVBEQVRFCQlNRDVfVXBkYXRlCisjZGVmaW5lIEhBU0hfVFJBTlNGT1JNCQlNRDVfVHJhbnNmb3JtCisjZGVmaW5lIEhBU0hfRklOQUwJCU1ENV9GaW5hbAorI2RlZmluZQlIQVNIX01BS0VfU1RSSU5HKGMscykJZG8gewlcCisJdW5zaWduZWQgbG9uZyBsbDsJCVwKKwlsbD0oYyktPkE7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwlsbD0oYyktPkI7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwlsbD0oYyktPkM7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwlsbD0oYyktPkQ7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZQlIQVNIX0JMT0NLX0RBVEFfT1JERVIJbWQ1X2Jsb2NrX2RhdGFfb3JkZXIKKworI2luY2x1ZGUgIm9wZW5zc2xfbWQzMl9jb21tb24uaCIKKworLyoKKyNkZWZpbmUJRih4LHkseikJKCgoeCkgJiAoeSkpICB8ICAoKH4oeCkpICYgKHopKSkKKyNkZWZpbmUJRyh4LHkseikJKCgoeCkgJiAoeikpICB8ICAoKHkpICYgKH4oeikpKSkKKyovCisKKy8qIEFzIHBvaW50ZWQgb3V0IGJ5IFdlaSBEYWkgPHdlaWRhaUBlc2tpbW8uY29tPiwgdGhlIGFib3ZlIGNhbiBiZQorICogc2ltcGxpZmllZCB0byB0aGUgY29kZSBiZWxvdy4gIFdlaSBhdHRyaWJ1dGVzIHRoZXNlIG9wdGltaXphdGlvbnMKKyAqIHRvIFBldGVyIEd1dG1hbm4ncyBTSFMgY29kZSwgYW5kIGhlIGF0dHJpYnV0ZXMgaXQgdG8gUmljaCBTY2hyb2VwcGVsLgorICovCisjZGVmaW5lCUYoYixjLGQpCSgoKChjKSBeIChkKSkgJiAoYikpIF4gKGQpKQorI2RlZmluZQlHKGIsYyxkKQkoKCgoYikgXiAoYykpICYgKGQpKSBeIChjKSkKKyNkZWZpbmUJSChiLGMsZCkJKChiKSBeIChjKSBeIChkKSkKKyNkZWZpbmUJSShiLGMsZCkJKCgofihkKSkgfCAoYikpIF4gKGMpKQorCisjZGVmaW5lIFIwKGEsYixjLGQsayxzLHQpIHsgXAorCWErPSgoaykrKHQpK0YoKGIpLChjKSwoZCkpKTsgXAorCWE9Uk9UQVRFKGEscyk7IFwKKwlhKz1iOyB9O1wKKworI2RlZmluZSBSMShhLGIsYyxkLGsscyx0KSB7IFwKKwlhKz0oKGspKyh0KStHKChiKSwoYyksKGQpKSk7IFwKKwlhPVJPVEFURShhLHMpOyBcCisJYSs9YjsgfTsKKworI2RlZmluZSBSMihhLGIsYyxkLGsscyx0KSB7IFwKKwlhKz0oKGspKyh0KStIKChiKSwoYyksKGQpKSk7IFwKKwlhPVJPVEFURShhLHMpOyBcCisJYSs9YjsgfTsKKworI2RlZmluZSBSMyhhLGIsYyxkLGsscyx0KSB7IFwKKwlhKz0oKGspKyh0KStJKChiKSwoYyksKGQpKSk7IFwKKwlhPVJPVEFURShhLHMpOyBcCisJYSs9YjsgfTsKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21vZGVzLmggYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGQ5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tb2Rlcy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSaWdodHMgZm9yIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2FnZSBpbiBzb3VyY2UgYW5kIGJpbmFyeQorICogZm9ybXMgYXJlIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCit0eXBlZGVmIHZvaWQgKCpibG9jazEyOF9mKShjb25zdCB1bnNpZ25lZCBjaGFyIGluWzE2XSwKKwkJCXVuc2lnbmVkIGNoYXIgb3V0WzE2XSwKKwkJCWNvbnN0IHZvaWQgKmtleSk7CisKK3R5cGVkZWYgdm9pZCAoKmNiYzEyOF9mKShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50IGVuYyk7CisKK3ZvaWQgQ1JZUFRPX2NiYzEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBibG9jazEyOF9mIGJsb2NrKTsKK3ZvaWQgQ1JZUFRPX2NiYzEyOF9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBibG9jazEyOF9mIGJsb2NrKTsKKwordm9pZCBDUllQVE9fY3RyMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIHVuc2lnbmVkIGNoYXIgZWNvdW50X2J1ZlsxNl0sCisJCQl1bnNpZ25lZCBpbnQgKm51bSwgYmxvY2sxMjhfZiBibG9jayk7CisKK3ZvaWQgQ1JZUFRPX29mYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWJsb2NrMTI4X2YgYmxvY2spOworCit2b2lkIENSWVBUT19jZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlpbnQgZW5jLCBibG9jazEyOF9mIGJsb2NrKTsKK3ZvaWQgQ1JZUFRPX2NmYjEyOF84X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW5ndGgsIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jayk7Cit2b2lkIENSWVBUT19jZmIxMjhfMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgYml0cywgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlpbnQgZW5jLCBibG9jazEyOF9mIGJsb2NrKTsKKworc2l6ZV90IENSWVBUT19jdHMxMjhfZW5jcnlwdF9ibG9jayhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgYmxvY2sxMjhfZiBibG9jayk7CitzaXplX3QgQ1JZUFRPX2N0czEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBjYmMxMjhfZiBjYmMpOworc2l6ZV90IENSWVBUT19jdHMxMjhfZGVjcnlwdF9ibG9jayhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgYmxvY2sxMjhfZiBibG9jayk7CitzaXplX3QgQ1JZUFRPX2N0czEyOF9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBjYmMxMjhfZiBjYmMpOwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMuYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4Y2I2NgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qIGNyeXB0by9kZXMvbmNiY19lbmMuYyAqLworLyoKKyAqICNpbmNsdWRlZCBieToKKyAqICAgIGNiY19lbmMuYyAgKERFU19jYmNfZW5jcnlwdCkKKyAqICAgIGRlc19lbmMuYyAgKERFU19uY2JjX2VuY3J5cHQpCisgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2luY2x1ZGUgIm9wZW5zc2xfZGVzX2xvY2FsLmgiCisKKyNpZmRlZiBDQkNfRU5DX0NfX0RPTlRfVVBEQVRFX0lWCit2b2lkIERFU19jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LCBsb25nIGxlbmd0aCwKKwkJICAgICBERVNfa2V5X3NjaGVkdWxlICpfc2NoZWR1bGUsIERFU19jYmxvY2sgKml2ZWMsIGludCBlbmMpCisjZWxzZQordm9pZCBERVNfbmNiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsIGxvbmcgbGVuZ3RoLAorCQkgICAgIERFU19rZXlfc2NoZWR1bGUgKl9zY2hlZHVsZSwgREVTX2NibG9jayAqaXZlYywgaW50IGVuYykKKyNlbmRpZgorCXsKKwlyZWdpc3RlciBERVNfTE9ORyB0aW4wLHRpbjE7CisJcmVnaXN0ZXIgREVTX0xPTkcgdG91dDAsdG91dDEseG9yMCx4b3IxOworCXJlZ2lzdGVyIGxvbmcgbD1sZW5ndGg7CisJREVTX0xPTkcgdGluWzJdOworCXVuc2lnbmVkIGNoYXIgKml2OworCisJaXYgPSAmKCppdmVjKVswXTsKKworCWlmIChlbmMpCisJCXsKKwkJYzJsKGl2LHRvdXQwKTsKKwkJYzJsKGl2LHRvdXQxKTsKKwkJZm9yIChsLT04OyBsPj0wOyBsLT04KQorCQkJeworCQkJYzJsKGluLHRpbjApOworCQkJYzJsKGluLHRpbjEpOworCQkJdGluMF49dG91dDA7IHRpblswXT10aW4wOworCQkJdGluMV49dG91dDE7IHRpblsxXT10aW4xOworCQkJREVTX2VuY3J5cHQxKChERVNfTE9ORyAqKXRpbixfc2NoZWR1bGUsREVTX0VOQ1JZUFQpOworCQkJdG91dDA9dGluWzBdOyBsMmModG91dDAsb3V0KTsKKwkJCXRvdXQxPXRpblsxXTsgbDJjKHRvdXQxLG91dCk7CisJCQl9CisJCWlmIChsICE9IC04KQorCQkJeworCQkJYzJsbihpbix0aW4wLHRpbjEsbCs4KTsKKwkJCXRpbjBePXRvdXQwOyB0aW5bMF09dGluMDsKKwkJCXRpbjFePXRvdXQxOyB0aW5bMV09dGluMTsKKwkJCURFU19lbmNyeXB0MSgoREVTX0xPTkcgKil0aW4sX3NjaGVkdWxlLERFU19FTkNSWVBUKTsKKwkJCXRvdXQwPXRpblswXTsgbDJjKHRvdXQwLG91dCk7CisJCQl0b3V0MT10aW5bMV07IGwyYyh0b3V0MSxvdXQpOworCQkJfQorI2lmbmRlZiBDQkNfRU5DX0NfX0RPTlRfVVBEQVRFX0lWCisJCWl2ID0gJigqaXZlYylbMF07CisJCWwyYyh0b3V0MCxpdik7CisJCWwyYyh0b3V0MSxpdik7CisjZW5kaWYKKwkJfQorCWVsc2UKKwkJeworCQljMmwoaXYseG9yMCk7CisJCWMybChpdix4b3IxKTsKKwkJZm9yIChsLT04OyBsPj0wOyBsLT04KQorCQkJeworCQkJYzJsKGluLHRpbjApOyB0aW5bMF09dGluMDsKKwkJCWMybChpbix0aW4xKTsgdGluWzFdPXRpbjE7CisJCQlERVNfZW5jcnlwdDEoKERFU19MT05HICopdGluLF9zY2hlZHVsZSxERVNfREVDUllQVCk7CisJCQl0b3V0MD10aW5bMF1eeG9yMDsKKwkJCXRvdXQxPXRpblsxXV54b3IxOworCQkJbDJjKHRvdXQwLG91dCk7CisJCQlsMmModG91dDEsb3V0KTsKKwkJCXhvcjA9dGluMDsKKwkJCXhvcjE9dGluMTsKKwkJCX0KKwkJaWYgKGwgIT0gLTgpCisJCQl7CisJCQljMmwoaW4sdGluMCk7IHRpblswXT10aW4wOworCQkJYzJsKGluLHRpbjEpOyB0aW5bMV09dGluMTsKKwkJCURFU19lbmNyeXB0MSgoREVTX0xPTkcgKil0aW4sX3NjaGVkdWxlLERFU19ERUNSWVBUKTsKKwkJCXRvdXQwPXRpblswXV54b3IwOworCQkJdG91dDE9dGluWzFdXnhvcjE7CisJCQlsMmNuKHRvdXQwLHRvdXQxLG91dCxsKzgpOworI2lmbmRlZiBDQkNfRU5DX0NfX0RPTlRfVVBEQVRFX0lWCisJCQl4b3IwPXRpbjA7CisJCQl4b3IxPXRpbjE7CisjZW5kaWYKKwkJCX0KKyNpZm5kZWYgQ0JDX0VOQ19DX19ET05UX1VQREFURV9JViAKKwkJaXYgPSAmKCppdmVjKVswXTsKKwkJbDJjKHhvcjAsaXYpOworCQlsMmMoeG9yMSxpdik7CisjZW5kaWYKKwkJfQorCXRpbjA9dGluMT10b3V0MD10b3V0MT14b3IwPXhvcjE9MDsKKwl0aW5bMF09dGluWzFdPTA7CisJfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjZiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMKQEAgLTAsMCArMSw0MDYgQEAKKy8qIGNyeXB0by9kZXMvc2V0X2tleS5jICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKy8qIHNldF9rZXkuYyB2IDEuNCBlYXkgMjQvOS85MQorICogMS40IFNwZWVkIHVwIGJ5IDQwMCUgOi0pCisgKiAxLjMgYWRkZWQgcmVnaXN0ZXIgZGVjbGFyYXRpb25zLgorICogMS4yIHVucm9sbGVkIG1ha2Vfa2V5X3NjaGVkIGEgYml0IG1vcmUKKyAqIDEuMSBhZGRlZCBub3JtX2V4cGFuZF9iaXRzCisgKiAxLjAgRmlyc3Qgd29ya2luZyB2ZXJzaW9uCisgKi8KK2ludCBERVNfY2hlY2tfa2V5ID0gMDsKKyNpbmNsdWRlICJvcGVuc3NsX2Rlc19sb2NhbC5oIgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvZGRfcGFyaXR5WzI1Nl09eworICAxLCAgMSwgIDIsICAyLCAgNCwgIDQsICA3LCAgNywgIDgsICA4LCAxMSwgMTEsIDEzLCAxMywgMTQsIDE0LAorIDE2LCAxNiwgMTksIDE5LCAyMSwgMjEsIDIyLCAyMiwgMjUsIDI1LCAyNiwgMjYsIDI4LCAyOCwgMzEsIDMxLAorIDMyLCAzMiwgMzUsIDM1LCAzNywgMzcsIDM4LCAzOCwgNDEsIDQxLCA0MiwgNDIsIDQ0LCA0NCwgNDcsIDQ3LAorIDQ5LCA0OSwgNTAsIDUwLCA1MiwgNTIsIDU1LCA1NSwgNTYsIDU2LCA1OSwgNTksIDYxLCA2MSwgNjIsIDYyLAorIDY0LCA2NCwgNjcsIDY3LCA2OSwgNjksIDcwLCA3MCwgNzMsIDczLCA3NCwgNzQsIDc2LCA3NiwgNzksIDc5LAorIDgxLCA4MSwgODIsIDgyLCA4NCwgODQsIDg3LCA4NywgODgsIDg4LCA5MSwgOTEsIDkzLCA5MywgOTQsIDk0LAorIDk3LCA5NywgOTgsIDk4LDEwMCwxMDAsMTAzLDEwMywxMDQsMTA0LDEwNywxMDcsMTA5LDEwOSwxMTAsMTEwLAorMTEyLDExMiwxMTUsMTE1LDExNywxMTcsMTE4LDExOCwxMjEsMTIxLDEyMiwxMjIsMTI0LDEyNCwxMjcsMTI3LAorMTI4LDEyOCwxMzEsMTMxLDEzMywxMzMsMTM0LDEzNCwxMzcsMTM3LDEzOCwxMzgsMTQwLDE0MCwxNDMsMTQzLAorMTQ1LDE0NSwxNDYsMTQ2LDE0OCwxNDgsMTUxLDE1MSwxNTIsMTUyLDE1NSwxNTUsMTU3LDE1NywxNTgsMTU4LAorMTYxLDE2MSwxNjIsMTYyLDE2NCwxNjQsMTY3LDE2NywxNjgsMTY4LDE3MSwxNzEsMTczLDE3MywxNzQsMTc0LAorMTc2LDE3NiwxNzksMTc5LDE4MSwxODEsMTgyLDE4MiwxODUsMTg1LDE4NiwxODYsMTg4LDE4OCwxOTEsMTkxLAorMTkzLDE5MywxOTQsMTk0LDE5NiwxOTYsMTk5LDE5OSwyMDAsMjAwLDIwMywyMDMsMjA1LDIwNSwyMDYsMjA2LAorMjA4LDIwOCwyMTEsMjExLDIxMywyMTMsMjE0LDIxNCwyMTcsMjE3LDIxOCwyMTgsMjIwLDIyMCwyMjMsMjIzLAorMjI0LDIyNCwyMjcsMjI3LDIyOSwyMjksMjMwLDIzMCwyMzMsMjMzLDIzNCwyMzQsMjM2LDIzNiwyMzksMjM5LAorMjQxLDI0MSwyNDIsMjQyLDI0NCwyNDQsMjQ3LDI0NywyNDgsMjQ4LDI1MSwyNTEsMjUzLDI1MywyNTQsMjU0fTsKKwordm9pZCBERVNfc2V0X29kZF9wYXJpdHkoREVTX2NibG9jayAqa2V5KQorCXsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaT0wOyBpPERFU19LRVlfU1o7IGkrKykKKwkJKCprZXkpW2ldPW9kZF9wYXJpdHlbKCprZXkpW2ldXTsKKwl9CisKK2ludCBERVNfY2hlY2tfa2V5X3Bhcml0eShjb25zdF9ERVNfY2Jsb2NrICprZXkpCisJeworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpPTA7IGk8REVTX0tFWV9TWjsgaSsrKQorCQl7CisJCWlmICgoKmtleSlbaV0gIT0gb2RkX3Bhcml0eVsoKmtleSlbaV1dKQorCQkJcmV0dXJuKDApOworCQl9CisJcmV0dXJuKDEpOworCX0KKworLyogV2VhayBhbmQgc2VtaSB3ZWVrIGtleXMgYXMgdGFrZSBmcm9tCisgKiAlQSBELlcuIERhdmllcworICogJUEgVy5MLiBQcmljZQorICogJVQgU2VjdXJpdHkgZm9yIENvbXB1dGVyIE5ldHdvcmtzCisgKiAlSSBKb2huIFdpbGV5ICYgU29ucworICogJUQgMTk4NAorICogTWFueSB0aGFua3MgdG8gc21iQHVseXNzZXMuYXR0LmNvbSAoU3RldmVuIEJlbGxvdmluKSBmb3IgdGhlIHJlZmVyZW5jZQorICogKGFuZCBhY3R1YWwgY2Jsb2NrIHZhbHVlcykuCisgKi8KKyNkZWZpbmUgTlVNX1dFQUtfS0VZCTE2CitzdGF0aWMgY29uc3QgREVTX2NibG9jayB3ZWFrX2tleXNbTlVNX1dFQUtfS0VZXT17CisJLyogd2VhayBrZXlzICovCisJezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX0sCisJezB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRX0sCisJezB4MUYsMHgxRiwweDFGLDB4MUYsMHgwRSwweDBFLDB4MEUsMHgwRX0sCisJezB4RTAsMHhFMCwweEUwLDB4RTAsMHhGMSwweEYxLDB4RjEsMHhGMX0sCisJLyogc2VtaS13ZWFrIGtleXMgKi8KKwl7MHgwMSwweEZFLDB4MDEsMHhGRSwweDAxLDB4RkUsMHgwMSwweEZFfSwKKwl7MHhGRSwweDAxLDB4RkUsMHgwMSwweEZFLDB4MDEsMHhGRSwweDAxfSwKKwl7MHgxRiwweEUwLDB4MUYsMHhFMCwweDBFLDB4RjEsMHgwRSwweEYxfSwKKwl7MHhFMCwweDFGLDB4RTAsMHgxRiwweEYxLDB4MEUsMHhGMSwweDBFfSwKKwl7MHgwMSwweEUwLDB4MDEsMHhFMCwweDAxLDB4RjEsMHgwMSwweEYxfSwKKwl7MHhFMCwweDAxLDB4RTAsMHgwMSwweEYxLDB4MDEsMHhGMSwweDAxfSwKKwl7MHgxRiwweEZFLDB4MUYsMHhGRSwweDBFLDB4RkUsMHgwRSwweEZFfSwKKwl7MHhGRSwweDFGLDB4RkUsMHgxRiwweEZFLDB4MEUsMHhGRSwweDBFfSwKKwl7MHgwMSwweDFGLDB4MDEsMHgxRiwweDAxLDB4MEUsMHgwMSwweDBFfSwKKwl7MHgxRiwweDAxLDB4MUYsMHgwMSwweDBFLDB4MDEsMHgwRSwweDAxfSwKKwl7MHhFMCwweEZFLDB4RTAsMHhGRSwweEYxLDB4RkUsMHhGMSwweEZFfSwKKwl7MHhGRSwweEUwLDB4RkUsMHhFMCwweEZFLDB4RjEsMHhGRSwweEYxfX07CisKK2ludCBERVNfaXNfd2Vha19rZXkoY29uc3RfREVTX2NibG9jayAqa2V5KQorCXsKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPE5VTV9XRUFLX0tFWTsgaSsrKQorCQkvKiBBZGRlZCA9PSAwIHRvIGNvbXBhcmlzb24sIEkgb2J2aW91c2x5IGRvbid0IHJ1bgorCQkgKiB0aGlzIHNlY3Rpb24gdmVyeSBvZnRlbiA6LSgsIHRoYW5rcyB0bworCQkgKiBlbmdpbmVlcmluZ0BNb3JuaW5nU3Rhci5Db20gZm9yIHRoZSBmaXgKKwkJICogZWF5IDkzLzA2LzI5CisJCSAqIEFub3RoZXIgcHJvYmxlbSwgSSB3YXMgY29tcGFyaW5nIG9ubHkgdGhlIGZpcnN0IDQKKwkJICogYnl0ZXMsIDk3LzAzLzE4ICovCisJCWlmIChtZW1jbXAod2Vha19rZXlzW2ldLGtleSxzaXplb2YoREVTX2NibG9jaykpID09IDApIHJldHVybigxKTsKKwlyZXR1cm4oMCk7CisJfQorCisvKiBOT1cgREVGSU5FRCBJTiBkZXNfbG9jYWwuaAorICogU2VlIGVjYl9lbmNyeXB0LmMgZm9yIGEgcHNldWRvIGRlc2NyaXB0aW9uIG9mIHRoZXNlIG1hY3Jvcy4gCisgKiAjZGVmaW5lIFBFUk1fT1AoYSxiLHQsbixtKSAoKHQpPSgoKChhKT4+KG4pKV4oYikpJihtKSksXAorICogCShiKV49KHQpLFwKKyAqIAkoYSk9KChhKV4oKHQpPDwobikpKSkKKyAqLworCisjZGVmaW5lIEhQRVJNX09QKGEsdCxuLG0pICgodCk9KCgoKGEpPDwoMTYtKG4pKSleKGEpKSYobSkpLFwKKwkoYSk9KGEpXih0KV4odD4+KDE2LShuKSkpKQorCitzdGF0aWMgY29uc3QgREVTX0xPTkcgZGVzX3NrYls4XVs2NF09eworCXsKKwkvKiBmb3IgQyBiaXRzIChudW1iZXJlZCBhcyBwZXIgRklQUyA0NikgMSAyIDMgNCA1IDYgKi8KKwkweDAwMDAwMDAwTCwweDAwMDAwMDEwTCwweDIwMDAwMDAwTCwweDIwMDAwMDEwTCwKKwkweDAwMDEwMDAwTCwweDAwMDEwMDEwTCwweDIwMDEwMDAwTCwweDIwMDEwMDEwTCwKKwkweDAwMDAwODAwTCwweDAwMDAwODEwTCwweDIwMDAwODAwTCwweDIwMDAwODEwTCwKKwkweDAwMDEwODAwTCwweDAwMDEwODEwTCwweDIwMDEwODAwTCwweDIwMDEwODEwTCwKKwkweDAwMDAwMDIwTCwweDAwMDAwMDMwTCwweDIwMDAwMDIwTCwweDIwMDAwMDMwTCwKKwkweDAwMDEwMDIwTCwweDAwMDEwMDMwTCwweDIwMDEwMDIwTCwweDIwMDEwMDMwTCwKKwkweDAwMDAwODIwTCwweDAwMDAwODMwTCwweDIwMDAwODIwTCwweDIwMDAwODMwTCwKKwkweDAwMDEwODIwTCwweDAwMDEwODMwTCwweDIwMDEwODIwTCwweDIwMDEwODMwTCwKKwkweDAwMDgwMDAwTCwweDAwMDgwMDEwTCwweDIwMDgwMDAwTCwweDIwMDgwMDEwTCwKKwkweDAwMDkwMDAwTCwweDAwMDkwMDEwTCwweDIwMDkwMDAwTCwweDIwMDkwMDEwTCwKKwkweDAwMDgwODAwTCwweDAwMDgwODEwTCwweDIwMDgwODAwTCwweDIwMDgwODEwTCwKKwkweDAwMDkwODAwTCwweDAwMDkwODEwTCwweDIwMDkwODAwTCwweDIwMDkwODEwTCwKKwkweDAwMDgwMDIwTCwweDAwMDgwMDMwTCwweDIwMDgwMDIwTCwweDIwMDgwMDMwTCwKKwkweDAwMDkwMDIwTCwweDAwMDkwMDMwTCwweDIwMDkwMDIwTCwweDIwMDkwMDMwTCwKKwkweDAwMDgwODIwTCwweDAwMDgwODMwTCwweDIwMDgwODIwTCwweDIwMDgwODMwTCwKKwkweDAwMDkwODIwTCwweDAwMDkwODMwTCwweDIwMDkwODIwTCwweDIwMDkwODMwTCwKKwl9LHsKKwkvKiBmb3IgQyBiaXRzIChudW1iZXJlZCBhcyBwZXIgRklQUyA0NikgNyA4IDEwIDExIDEyIDEzICovCisJMHgwMDAwMDAwMEwsMHgwMjAwMDAwMEwsMHgwMDAwMjAwMEwsMHgwMjAwMjAwMEwsCisJMHgwMDIwMDAwMEwsMHgwMjIwMDAwMEwsMHgwMDIwMjAwMEwsMHgwMjIwMjAwMEwsCisJMHgwMDAwMDAwNEwsMHgwMjAwMDAwNEwsMHgwMDAwMjAwNEwsMHgwMjAwMjAwNEwsCisJMHgwMDIwMDAwNEwsMHgwMjIwMDAwNEwsMHgwMDIwMjAwNEwsMHgwMjIwMjAwNEwsCisJMHgwMDAwMDQwMEwsMHgwMjAwMDQwMEwsMHgwMDAwMjQwMEwsMHgwMjAwMjQwMEwsCisJMHgwMDIwMDQwMEwsMHgwMjIwMDQwMEwsMHgwMDIwMjQwMEwsMHgwMjIwMjQwMEwsCisJMHgwMDAwMDQwNEwsMHgwMjAwMDQwNEwsMHgwMDAwMjQwNEwsMHgwMjAwMjQwNEwsCisJMHgwMDIwMDQwNEwsMHgwMjIwMDQwNEwsMHgwMDIwMjQwNEwsMHgwMjIwMjQwNEwsCisJMHgxMDAwMDAwMEwsMHgxMjAwMDAwMEwsMHgxMDAwMjAwMEwsMHgxMjAwMjAwMEwsCisJMHgxMDIwMDAwMEwsMHgxMjIwMDAwMEwsMHgxMDIwMjAwMEwsMHgxMjIwMjAwMEwsCisJMHgxMDAwMDAwNEwsMHgxMjAwMDAwNEwsMHgxMDAwMjAwNEwsMHgxMjAwMjAwNEwsCisJMHgxMDIwMDAwNEwsMHgxMjIwMDAwNEwsMHgxMDIwMjAwNEwsMHgxMjIwMjAwNEwsCisJMHgxMDAwMDQwMEwsMHgxMjAwMDQwMEwsMHgxMDAwMjQwMEwsMHgxMjAwMjQwMEwsCisJMHgxMDIwMDQwMEwsMHgxMjIwMDQwMEwsMHgxMDIwMjQwMEwsMHgxMjIwMjQwMEwsCisJMHgxMDAwMDQwNEwsMHgxMjAwMDQwNEwsMHgxMDAwMjQwNEwsMHgxMjAwMjQwNEwsCisJMHgxMDIwMDQwNEwsMHgxMjIwMDQwNEwsMHgxMDIwMjQwNEwsMHgxMjIwMjQwNEwsCisJfSx7CisJLyogZm9yIEMgYml0cyAobnVtYmVyZWQgYXMgcGVyIEZJUFMgNDYpIDE0IDE1IDE2IDE3IDE5IDIwICovCisJMHgwMDAwMDAwMEwsMHgwMDAwMDAwMUwsMHgwMDA0MDAwMEwsMHgwMDA0MDAwMUwsCisJMHgwMTAwMDAwMEwsMHgwMTAwMDAwMUwsMHgwMTA0MDAwMEwsMHgwMTA0MDAwMUwsCisJMHgwMDAwMDAwMkwsMHgwMDAwMDAwM0wsMHgwMDA0MDAwMkwsMHgwMDA0MDAwM0wsCisJMHgwMTAwMDAwMkwsMHgwMTAwMDAwM0wsMHgwMTA0MDAwMkwsMHgwMTA0MDAwM0wsCisJMHgwMDAwMDIwMEwsMHgwMDAwMDIwMUwsMHgwMDA0MDIwMEwsMHgwMDA0MDIwMUwsCisJMHgwMTAwMDIwMEwsMHgwMTAwMDIwMUwsMHgwMTA0MDIwMEwsMHgwMTA0MDIwMUwsCisJMHgwMDAwMDIwMkwsMHgwMDAwMDIwM0wsMHgwMDA0MDIwMkwsMHgwMDA0MDIwM0wsCisJMHgwMTAwMDIwMkwsMHgwMTAwMDIwM0wsMHgwMTA0MDIwMkwsMHgwMTA0MDIwM0wsCisJMHgwODAwMDAwMEwsMHgwODAwMDAwMUwsMHgwODA0MDAwMEwsMHgwODA0MDAwMUwsCisJMHgwOTAwMDAwMEwsMHgwOTAwMDAwMUwsMHgwOTA0MDAwMEwsMHgwOTA0MDAwMUwsCisJMHgwODAwMDAwMkwsMHgwODAwMDAwM0wsMHgwODA0MDAwMkwsMHgwODA0MDAwM0wsCisJMHgwOTAwMDAwMkwsMHgwOTAwMDAwM0wsMHgwOTA0MDAwMkwsMHgwOTA0MDAwM0wsCisJMHgwODAwMDIwMEwsMHgwODAwMDIwMUwsMHgwODA0MDIwMEwsMHgwODA0MDIwMUwsCisJMHgwOTAwMDIwMEwsMHgwOTAwMDIwMUwsMHgwOTA0MDIwMEwsMHgwOTA0MDIwMUwsCisJMHgwODAwMDIwMkwsMHgwODAwMDIwM0wsMHgwODA0MDIwMkwsMHgwODA0MDIwM0wsCisJMHgwOTAwMDIwMkwsMHgwOTAwMDIwM0wsMHgwOTA0MDIwMkwsMHgwOTA0MDIwM0wsCisJfSx7CisJLyogZm9yIEMgYml0cyAobnVtYmVyZWQgYXMgcGVyIEZJUFMgNDYpIDIxIDIzIDI0IDI2IDI3IDI4ICovCisJMHgwMDAwMDAwMEwsMHgwMDEwMDAwMEwsMHgwMDAwMDEwMEwsMHgwMDEwMDEwMEwsCisJMHgwMDAwMDAwOEwsMHgwMDEwMDAwOEwsMHgwMDAwMDEwOEwsMHgwMDEwMDEwOEwsCisJMHgwMDAwMTAwMEwsMHgwMDEwMTAwMEwsMHgwMDAwMTEwMEwsMHgwMDEwMTEwMEwsCisJMHgwMDAwMTAwOEwsMHgwMDEwMTAwOEwsMHgwMDAwMTEwOEwsMHgwMDEwMTEwOEwsCisJMHgwNDAwMDAwMEwsMHgwNDEwMDAwMEwsMHgwNDAwMDEwMEwsMHgwNDEwMDEwMEwsCisJMHgwNDAwMDAwOEwsMHgwNDEwMDAwOEwsMHgwNDAwMDEwOEwsMHgwNDEwMDEwOEwsCisJMHgwNDAwMTAwMEwsMHgwNDEwMTAwMEwsMHgwNDAwMTEwMEwsMHgwNDEwMTEwMEwsCisJMHgwNDAwMTAwOEwsMHgwNDEwMTAwOEwsMHgwNDAwMTEwOEwsMHgwNDEwMTEwOEwsCisJMHgwMDAyMDAwMEwsMHgwMDEyMDAwMEwsMHgwMDAyMDEwMEwsMHgwMDEyMDEwMEwsCisJMHgwMDAyMDAwOEwsMHgwMDEyMDAwOEwsMHgwMDAyMDEwOEwsMHgwMDEyMDEwOEwsCisJMHgwMDAyMTAwMEwsMHgwMDEyMTAwMEwsMHgwMDAyMTEwMEwsMHgwMDEyMTEwMEwsCisJMHgwMDAyMTAwOEwsMHgwMDEyMTAwOEwsMHgwMDAyMTEwOEwsMHgwMDEyMTEwOEwsCisJMHgwNDAyMDAwMEwsMHgwNDEyMDAwMEwsMHgwNDAyMDEwMEwsMHgwNDEyMDEwMEwsCisJMHgwNDAyMDAwOEwsMHgwNDEyMDAwOEwsMHgwNDAyMDEwOEwsMHgwNDEyMDEwOEwsCisJMHgwNDAyMTAwMEwsMHgwNDEyMTAwMEwsMHgwNDAyMTEwMEwsMHgwNDEyMTEwMEwsCisJMHgwNDAyMTAwOEwsMHgwNDEyMTAwOEwsMHgwNDAyMTEwOEwsMHgwNDEyMTEwOEwsCisJfSx7CisJLyogZm9yIEQgYml0cyAobnVtYmVyZWQgYXMgcGVyIEZJUFMgNDYpIDEgMiAzIDQgNSA2ICovCisJMHgwMDAwMDAwMEwsMHgxMDAwMDAwMEwsMHgwMDAxMDAwMEwsMHgxMDAxMDAwMEwsCisJMHgwMDAwMDAwNEwsMHgxMDAwMDAwNEwsMHgwMDAxMDAwNEwsMHgxMDAxMDAwNEwsCisJMHgyMDAwMDAwMEwsMHgzMDAwMDAwMEwsMHgyMDAxMDAwMEwsMHgzMDAxMDAwMEwsCisJMHgyMDAwMDAwNEwsMHgzMDAwMDAwNEwsMHgyMDAxMDAwNEwsMHgzMDAxMDAwNEwsCisJMHgwMDEwMDAwMEwsMHgxMDEwMDAwMEwsMHgwMDExMDAwMEwsMHgxMDExMDAwMEwsCisJMHgwMDEwMDAwNEwsMHgxMDEwMDAwNEwsMHgwMDExMDAwNEwsMHgxMDExMDAwNEwsCisJMHgyMDEwMDAwMEwsMHgzMDEwMDAwMEwsMHgyMDExMDAwMEwsMHgzMDExMDAwMEwsCisJMHgyMDEwMDAwNEwsMHgzMDEwMDAwNEwsMHgyMDExMDAwNEwsMHgzMDExMDAwNEwsCisJMHgwMDAwMTAwMEwsMHgxMDAwMTAwMEwsMHgwMDAxMTAwMEwsMHgxMDAxMTAwMEwsCisJMHgwMDAwMTAwNEwsMHgxMDAwMTAwNEwsMHgwMDAxMTAwNEwsMHgxMDAxMTAwNEwsCisJMHgyMDAwMTAwMEwsMHgzMDAwMTAwMEwsMHgyMDAxMTAwMEwsMHgzMDAxMTAwMEwsCisJMHgyMDAwMTAwNEwsMHgzMDAwMTAwNEwsMHgyMDAxMTAwNEwsMHgzMDAxMTAwNEwsCisJMHgwMDEwMTAwMEwsMHgxMDEwMTAwMEwsMHgwMDExMTAwMEwsMHgxMDExMTAwMEwsCisJMHgwMDEwMTAwNEwsMHgxMDEwMTAwNEwsMHgwMDExMTAwNEwsMHgxMDExMTAwNEwsCisJMHgyMDEwMTAwMEwsMHgzMDEwMTAwMEwsMHgyMDExMTAwMEwsMHgzMDExMTAwMEwsCisJMHgyMDEwMTAwNEwsMHgzMDEwMTAwNEwsMHgyMDExMTAwNEwsMHgzMDExMTAwNEwsCisJfSx7CisJLyogZm9yIEQgYml0cyAobnVtYmVyZWQgYXMgcGVyIEZJUFMgNDYpIDggOSAxMSAxMiAxMyAxNCAqLworCTB4MDAwMDAwMDBMLDB4MDgwMDAwMDBMLDB4MDAwMDAwMDhMLDB4MDgwMDAwMDhMLAorCTB4MDAwMDA0MDBMLDB4MDgwMDA0MDBMLDB4MDAwMDA0MDhMLDB4MDgwMDA0MDhMLAorCTB4MDAwMjAwMDBMLDB4MDgwMjAwMDBMLDB4MDAwMjAwMDhMLDB4MDgwMjAwMDhMLAorCTB4MDAwMjA0MDBMLDB4MDgwMjA0MDBMLDB4MDAwMjA0MDhMLDB4MDgwMjA0MDhMLAorCTB4MDAwMDAwMDFMLDB4MDgwMDAwMDFMLDB4MDAwMDAwMDlMLDB4MDgwMDAwMDlMLAorCTB4MDAwMDA0MDFMLDB4MDgwMDA0MDFMLDB4MDAwMDA0MDlMLDB4MDgwMDA0MDlMLAorCTB4MDAwMjAwMDFMLDB4MDgwMjAwMDFMLDB4MDAwMjAwMDlMLDB4MDgwMjAwMDlMLAorCTB4MDAwMjA0MDFMLDB4MDgwMjA0MDFMLDB4MDAwMjA0MDlMLDB4MDgwMjA0MDlMLAorCTB4MDIwMDAwMDBMLDB4MEEwMDAwMDBMLDB4MDIwMDAwMDhMLDB4MEEwMDAwMDhMLAorCTB4MDIwMDA0MDBMLDB4MEEwMDA0MDBMLDB4MDIwMDA0MDhMLDB4MEEwMDA0MDhMLAorCTB4MDIwMjAwMDBMLDB4MEEwMjAwMDBMLDB4MDIwMjAwMDhMLDB4MEEwMjAwMDhMLAorCTB4MDIwMjA0MDBMLDB4MEEwMjA0MDBMLDB4MDIwMjA0MDhMLDB4MEEwMjA0MDhMLAorCTB4MDIwMDAwMDFMLDB4MEEwMDAwMDFMLDB4MDIwMDAwMDlMLDB4MEEwMDAwMDlMLAorCTB4MDIwMDA0MDFMLDB4MEEwMDA0MDFMLDB4MDIwMDA0MDlMLDB4MEEwMDA0MDlMLAorCTB4MDIwMjAwMDFMLDB4MEEwMjAwMDFMLDB4MDIwMjAwMDlMLDB4MEEwMjAwMDlMLAorCTB4MDIwMjA0MDFMLDB4MEEwMjA0MDFMLDB4MDIwMjA0MDlMLDB4MEEwMjA0MDlMLAorCX0seworCS8qIGZvciBEIGJpdHMgKG51bWJlcmVkIGFzIHBlciBGSVBTIDQ2KSAxNiAxNyAxOCAxOSAyMCAyMSAqLworCTB4MDAwMDAwMDBMLDB4MDAwMDAxMDBMLDB4MDAwODAwMDBMLDB4MDAwODAxMDBMLAorCTB4MDEwMDAwMDBMLDB4MDEwMDAxMDBMLDB4MDEwODAwMDBMLDB4MDEwODAxMDBMLAorCTB4MDAwMDAwMTBMLDB4MDAwMDAxMTBMLDB4MDAwODAwMTBMLDB4MDAwODAxMTBMLAorCTB4MDEwMDAwMTBMLDB4MDEwMDAxMTBMLDB4MDEwODAwMTBMLDB4MDEwODAxMTBMLAorCTB4MDAyMDAwMDBMLDB4MDAyMDAxMDBMLDB4MDAyODAwMDBMLDB4MDAyODAxMDBMLAorCTB4MDEyMDAwMDBMLDB4MDEyMDAxMDBMLDB4MDEyODAwMDBMLDB4MDEyODAxMDBMLAorCTB4MDAyMDAwMTBMLDB4MDAyMDAxMTBMLDB4MDAyODAwMTBMLDB4MDAyODAxMTBMLAorCTB4MDEyMDAwMTBMLDB4MDEyMDAxMTBMLDB4MDEyODAwMTBMLDB4MDEyODAxMTBMLAorCTB4MDAwMDAyMDBMLDB4MDAwMDAzMDBMLDB4MDAwODAyMDBMLDB4MDAwODAzMDBMLAorCTB4MDEwMDAyMDBMLDB4MDEwMDAzMDBMLDB4MDEwODAyMDBMLDB4MDEwODAzMDBMLAorCTB4MDAwMDAyMTBMLDB4MDAwMDAzMTBMLDB4MDAwODAyMTBMLDB4MDAwODAzMTBMLAorCTB4MDEwMDAyMTBMLDB4MDEwMDAzMTBMLDB4MDEwODAyMTBMLDB4MDEwODAzMTBMLAorCTB4MDAyMDAyMDBMLDB4MDAyMDAzMDBMLDB4MDAyODAyMDBMLDB4MDAyODAzMDBMLAorCTB4MDEyMDAyMDBMLDB4MDEyMDAzMDBMLDB4MDEyODAyMDBMLDB4MDEyODAzMDBMLAorCTB4MDAyMDAyMTBMLDB4MDAyMDAzMTBMLDB4MDAyODAyMTBMLDB4MDAyODAzMTBMLAorCTB4MDEyMDAyMTBMLDB4MDEyMDAzMTBMLDB4MDEyODAyMTBMLDB4MDEyODAzMTBMLAorCX0seworCS8qIGZvciBEIGJpdHMgKG51bWJlcmVkIGFzIHBlciBGSVBTIDQ2KSAyMiAyMyAyNCAyNSAyNyAyOCAqLworCTB4MDAwMDAwMDBMLDB4MDQwMDAwMDBMLDB4MDAwNDAwMDBMLDB4MDQwNDAwMDBMLAorCTB4MDAwMDAwMDJMLDB4MDQwMDAwMDJMLDB4MDAwNDAwMDJMLDB4MDQwNDAwMDJMLAorCTB4MDAwMDIwMDBMLDB4MDQwMDIwMDBMLDB4MDAwNDIwMDBMLDB4MDQwNDIwMDBMLAorCTB4MDAwMDIwMDJMLDB4MDQwMDIwMDJMLDB4MDAwNDIwMDJMLDB4MDQwNDIwMDJMLAorCTB4MDAwMDAwMjBMLDB4MDQwMDAwMjBMLDB4MDAwNDAwMjBMLDB4MDQwNDAwMjBMLAorCTB4MDAwMDAwMjJMLDB4MDQwMDAwMjJMLDB4MDAwNDAwMjJMLDB4MDQwNDAwMjJMLAorCTB4MDAwMDIwMjBMLDB4MDQwMDIwMjBMLDB4MDAwNDIwMjBMLDB4MDQwNDIwMjBMLAorCTB4MDAwMDIwMjJMLDB4MDQwMDIwMjJMLDB4MDAwNDIwMjJMLDB4MDQwNDIwMjJMLAorCTB4MDAwMDA4MDBMLDB4MDQwMDA4MDBMLDB4MDAwNDA4MDBMLDB4MDQwNDA4MDBMLAorCTB4MDAwMDA4MDJMLDB4MDQwMDA4MDJMLDB4MDAwNDA4MDJMLDB4MDQwNDA4MDJMLAorCTB4MDAwMDI4MDBMLDB4MDQwMDI4MDBMLDB4MDAwNDI4MDBMLDB4MDQwNDI4MDBMLAorCTB4MDAwMDI4MDJMLDB4MDQwMDI4MDJMLDB4MDAwNDI4MDJMLDB4MDQwNDI4MDJMLAorCTB4MDAwMDA4MjBMLDB4MDQwMDA4MjBMLDB4MDAwNDA4MjBMLDB4MDQwNDA4MjBMLAorCTB4MDAwMDA4MjJMLDB4MDQwMDA4MjJMLDB4MDAwNDA4MjJMLDB4MDQwNDA4MjJMLAorCTB4MDAwMDI4MjBMLDB4MDQwMDI4MjBMLDB4MDAwNDI4MjBMLDB4MDQwNDI4MjBMLAorCTB4MDAwMDI4MjJMLDB4MDQwMDI4MjJMLDB4MDAwNDI4MjJMLDB4MDQwNDI4MjJMLAorCX19OworCitpbnQgREVTX3NldF9rZXkoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKKwl7CisJaWYgKERFU19jaGVja19rZXkpCisJCXsKKwkJcmV0dXJuIERFU19zZXRfa2V5X2NoZWNrZWQoa2V5LCBzY2hlZHVsZSk7CisJCX0KKwllbHNlCisJCXsKKwkJREVTX3NldF9rZXlfdW5jaGVja2VkKGtleSwgc2NoZWR1bGUpOworCQlyZXR1cm4gMDsKKwkJfQorCX0KKworLyogcmV0dXJuIDAgaWYga2V5IHBhcml0eSBpcyBvZGQgKGNvcnJlY3QpLAorICogcmV0dXJuIC0xIGlmIGtleSBwYXJpdHkgZXJyb3IsCisgKiByZXR1cm4gLTIgaWYgaWxsZWdhbCB3ZWFrIGtleS4KKyAqLworaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKKwl7CisJaWYgKCFERVNfY2hlY2tfa2V5X3Bhcml0eShrZXkpKQorCQlyZXR1cm4oLTEpOworCWlmIChERVNfaXNfd2Vha19rZXkoa2V5KSkKKwkJcmV0dXJuKC0yKTsKKwlERVNfc2V0X2tleV91bmNoZWNrZWQoa2V5LCBzY2hlZHVsZSk7CisJcmV0dXJuIDA7CisJfQorCit2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorCXsKKwlzdGF0aWMgY29uc3QgaW50IHNoaWZ0czJbMTZdPXswLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwfTsKKwlyZWdpc3RlciBERVNfTE9ORyBjLGQsdCxzLHQyOworCXJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluOworCXJlZ2lzdGVyIERFU19MT05HICprOworCXJlZ2lzdGVyIGludCBpOworCisjaWZkZWYgT1BFTkJTRF9ERVZfQ1JZUFRPCisJbWVtY3B5KHNjaGVkdWxlLT5rZXksa2V5LHNpemVvZiBzY2hlZHVsZS0+a2V5KTsKKwlzY2hlZHVsZS0+c2Vzc2lvbj1OVUxMOworI2VuZGlmCisJayA9ICZzY2hlZHVsZS0+a3MtPmRlc2xvbmdbMF07CisJaW4gPSAmKCprZXkpWzBdOworCisJYzJsKGluLGMpOworCWMybChpbixkKTsKKworCS8qIGRvIFBDMSBpbiA0NyBzaW1wbGUgb3BlcmF0aW9ucyA6LSkKKwkgKiBUaGFua3MgdG8gSm9obiBGbGV0Y2hlciAoam9obl9mbGV0Y2hlckBsY2NtYWlsLm9jZi5sbG5sLmdvdikKKwkgKiBmb3IgdGhlIGluc3BpcmF0aW9uLiA6LSkgKi8KKwlQRVJNX09QIChkLGMsdCw0LDB4MGYwZjBmMGZMKTsKKwlIUEVSTV9PUChjLHQsLTIsMHhjY2NjMDAwMEwpOworCUhQRVJNX09QKGQsdCwtMiwweGNjY2MwMDAwTCk7CisJUEVSTV9PUCAoZCxjLHQsMSwweDU1NTU1NTU1TCk7CisJUEVSTV9PUCAoYyxkLHQsOCwweDAwZmYwMGZmTCk7CisJUEVSTV9PUCAoZCxjLHQsMSwweDU1NTU1NTU1TCk7CisJZD0JKCgoZCYweDAwMDAwMGZmTCk8PDE2TCl8IChkJjB4MDAwMGZmMDBMKSAgICAgfAorCQkgKChkJjB4MDBmZjAwMDBMKT4+MTZMKXwoKGMmMHhmMDAwMDAwMEwpPj40TCkpOworCWMmPTB4MGZmZmZmZmZMOworCisJZm9yIChpPTA7IGk8SVRFUkFUSU9OUzsgaSsrKQorCQl7CisJCWlmIChzaGlmdHMyW2ldKQorCQkJeyBjPSgoYz4+MkwpfChjPDwyNkwpKTsgZD0oKGQ+PjJMKXwoZDw8MjZMKSk7IH0KKwkJZWxzZQorCQkJeyBjPSgoYz4+MUwpfChjPDwyN0wpKTsgZD0oKGQ+PjFMKXwoZDw8MjdMKSk7IH0KKwkJYyY9MHgwZmZmZmZmZkw7CisJCWQmPTB4MGZmZmZmZmZMOworCQkvKiBjb3VsZCBiZSBhIGZldyBsZXNzIHNoaWZ0cyBidXQgSSBhbSB0byBsYXp5IGF0IHRoaXMKKwkJICogcG9pbnQgaW4gdGltZSB0byBpbnZlc3RpZ2F0ZSAqLworCQlzPQlkZXNfc2tiWzBdWyAoYyAgICApJjB4M2YgICAgICAgICAgICAgICAgXXwKKwkJCWRlc19za2JbMV1bKChjPj4gNkwpJjB4MDMpfCgoYz4+IDdMKSYweDNjKV18CisJCQlkZXNfc2tiWzJdWygoYz4+MTNMKSYweDBmKXwoKGM+PjE0TCkmMHgzMCldfAorCQkJZGVzX3NrYlszXVsoKGM+PjIwTCkmMHgwMSl8KChjPj4yMUwpJjB4MDYpIHwKKwkJCQkJCSAgKChjPj4yMkwpJjB4MzgpXTsKKwkJdD0JZGVzX3NrYls0XVsgKGQgICAgKSYweDNmICAgICAgICAgICAgICAgIF18CisJCQlkZXNfc2tiWzVdWygoZD4+IDdMKSYweDAzKXwoKGQ+PiA4TCkmMHgzYyldfAorCQkJZGVzX3NrYls2XVsgKGQ+PjE1TCkmMHgzZiAgICAgICAgICAgICAgICBdfAorCQkJZGVzX3NrYls3XVsoKGQ+PjIxTCkmMHgwZil8KChkPj4yMkwpJjB4MzApXTsKKworCQkvKiB0YWJsZSBjb250YWluZWQgMDIxMyA0NjU3ICovCisJCXQyPSgodDw8MTZMKXwocyYweDAwMDBmZmZmTCkpJjB4ZmZmZmZmZmZMOworCQkqKGsrKyk9Uk9UQVRFKHQyLDMwKSYweGZmZmZmZmZmTDsKKworCQl0Mj0oKHM+PjE2TCl8KHQmMHhmZmZmMDAwMEwpKTsKKwkJKihrKyspPVJPVEFURSh0MiwyNikmMHhmZmZmZmZmZkw7CisJCX0KKwl9CisKK2ludCBERVNfa2V5X3NjaGVkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCisJeworCXJldHVybihERVNfc2V0X2tleShrZXksc2NoZWR1bGUpKTsKKwl9CisvKgorI3VuZGVmIGRlc19maXh1cF9rZXlfcGFyaXR5Cit2b2lkIGRlc19maXh1cF9rZXlfcGFyaXR5KGRlc19jYmxvY2sgKmtleSkKKwl7CisJZGVzX3NldF9vZGRfcGFyaXR5KGtleSk7CisJfQorKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYS5oIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYS5oCkBAIC0wLDAgKzEsMTk5IEBACisvKiBjcnlwdG8vc2hhL3NoYS5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpZm5kZWYgSEVBREVSX1NIQV9ICisjZGVmaW5lIEhFQURFUl9TSEFfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSB8fCAoZGVmaW5lZChPUEVOU1NMX05PX1NIQTApICYmIGRlZmluZWQoT1BFTlNTTF9OT19TSEExKSkKKyNlcnJvciBTSEEgaXMgZGlzYWJsZWQuCisjZW5kaWYKKworI2lmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQorI2RlZmluZSBGSVBTX1NIQV9TSVpFX1Qgc2l6ZV90CisjZW5kaWYKKworLyoKKyAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAqICEgU0hBX0xPTkcgaGFzIHRvIGJlIGF0IGxlYXN0IDMyIGJpdHMgd2lkZS4gSWYgaXQncyB3aWRlciwgdGhlbiAhCisgKiAhIFNIQV9MT05HX0xPRzIgaGFzIHRvIGJlIGRlZmluZWQgYWxvbmcuICAgICAgICAgICAgICAgICAgICAgICAgIQorICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICovCisKKyNpZiBkZWZpbmVkKF9fTFAzMl9fKQorI2RlZmluZSBTSEFfTE9ORyB1bnNpZ25lZCBsb25nCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0NSQVkpIHx8IGRlZmluZWQoX19JTFA2NF9fKQorI2RlZmluZSBTSEFfTE9ORyB1bnNpZ25lZCBsb25nCisjZGVmaW5lIFNIQV9MT05HX0xPRzIgMworI2Vsc2UKKyNkZWZpbmUgU0hBX0xPTkcgdW5zaWduZWQgaW50CisjZW5kaWYKKworI2RlZmluZSBTSEFfTEJMT0NLCTE2CisjZGVmaW5lIFNIQV9DQkxPQ0sJKFNIQV9MQkxPQ0sqNCkJLyogU0hBIHRyZWF0cyBpbnB1dCBkYXRhIGFzIGEKKwkJCQkJICogY29udGlndW91cyBhcnJheSBvZiAzMiBiaXQKKwkJCQkJICogd2lkZSBiaWctZW5kaWFuIHZhbHVlcy4gKi8KKyNkZWZpbmUgU0hBX0xBU1RfQkxPQ0sgIChTSEFfQ0JMT0NLLTgpCisjZGVmaW5lIFNIQV9ESUdFU1RfTEVOR1RIIDIwCisKK3R5cGVkZWYgc3RydWN0IFNIQXN0YXRlX3N0CisJeworCVNIQV9MT05HIGgwLGgxLGgyLGgzLGg0OworCVNIQV9MT05HIE5sLE5oOworCVNIQV9MT05HIGRhdGFbU0hBX0xCTE9DS107CisJdW5zaWduZWQgaW50IG51bTsKKwl9IFNIQV9DVFg7CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEwCitpbnQgU0hBX0luaXQoU0hBX0NUWCAqYyk7CitpbnQgU0hBX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEExCitpbnQgU0hBMV9Jbml0KFNIQV9DVFggKmMpOworaW50IFNIQTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBMShjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBTSEExX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorCisjZGVmaW5lIFNIQTI1Nl9DQkxPQ0sJKFNIQV9MQkxPQ0sqNCkJLyogU0hBLTI1NiB0cmVhdHMgaW5wdXQgZGF0YSBhcyBhCisJCQkJCSAqIGNvbnRpZ3VvdXMgYXJyYXkgb2YgMzIgYml0CisJCQkJCSAqIHdpZGUgYmlnLWVuZGlhbiB2YWx1ZXMuICovCisjZGVmaW5lIFNIQTIyNF9ESUdFU1RfTEVOR1RICTI4CisjZGVmaW5lIFNIQTI1Nl9ESUdFU1RfTEVOR1RICTMyCisKK3R5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0CisJeworCVNIQV9MT05HIGhbOF07CisJU0hBX0xPTkcgTmwsTmg7CisJU0hBX0xPTkcgZGF0YVtTSEFfTEJMT0NLXTsKKwl1bnNpZ25lZCBpbnQgbnVtLG1kX2xlbjsKKwl9IFNIQTI1Nl9DVFg7CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKK2ludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKK2ludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTIyNF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEEyMjQoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sdW5zaWduZWQgY2hhciAqbWQpOworaW50IFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmMpOworaW50IFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTI1Nihjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3Qgbix1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIFNIQTI1Nl9UcmFuc2Zvcm0oU0hBMjU2X0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKworI2RlZmluZSBTSEEzODRfRElHRVNUX0xFTkdUSAk0OAorI2RlZmluZSBTSEE1MTJfRElHRVNUX0xFTkdUSAk2NAorCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCisvKgorICogVW5saWtlIDMyLWJpdCBkaWdlc3QgYWxnb3JpdGhtcywgU0hBLTUxMiAqcmVsaWVzKiBvbiBTSEFfTE9ORzY0CisgKiBiZWluZyBleGFjdGx5IDY0LWJpdCB3aWRlLiBTZWUgSW1wbGVtZW50YXRpb24gTm90ZXMgaW4gc2hhNTEyLmMKKyAqIGZvciBmdXJ0aGVyIGRldGFpbHMuCisgKi8KKyNkZWZpbmUgU0hBNTEyX0NCTE9DSwkoU0hBX0xCTE9DSyo4KQkvKiBTSEEtNTEyIHRyZWF0cyBpbnB1dCBkYXRhIGFzIGEKKwkJCQkJICogY29udGlndW91cyBhcnJheSBvZiA2NCBiaXQKKwkJCQkJICogd2lkZSBiaWctZW5kaWFuIHZhbHVlcy4gKi8KKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KSkgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCisjZGVmaW5lIFNIQV9MT05HNjQgdW5zaWduZWQgX19pbnQ2NAorI2RlZmluZSBVNjQoQykgICAgIEMjI1VJNjQKKyNlbGlmIGRlZmluZWQoX19hcmNoNjRfXykKKyNkZWZpbmUgU0hBX0xPTkc2NCB1bnNpZ25lZCBsb25nCisjZGVmaW5lIFU2NChDKSAgICAgQyMjVUwKKyNlbHNlCisjZGVmaW5lIFNIQV9MT05HNjQgdW5zaWduZWQgbG9uZyBsb25nCisjZGVmaW5lIFU2NChDKSAgICAgQyMjVUxMCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3QKKwl7CisJU0hBX0xPTkc2NCBoWzhdOworCVNIQV9MT05HNjQgTmwsTmg7CisJdW5pb24geworCQlTSEFfTE9ORzY0CWRbU0hBX0xCTE9DS107CisJCXVuc2lnbmVkIGNoYXIJcFtTSEE1MTJfQ0JMT0NLXTsKKwl9IHU7CisJdW5zaWduZWQgaW50IG51bSxtZF9sZW47CisJfSBTSEE1MTJfQ1RYOworI2VuZGlmCisKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKK2ludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKK2ludCBTSEEzODRfVXBkYXRlKFNIQTUxMl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTM4NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEEzODQoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sdW5zaWduZWQgY2hhciAqbWQpOworaW50IFNIQTUxMl9Jbml0KFNIQTUxMl9DVFggKmMpOworaW50IFNIQTUxMl9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBNTEyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTUxMihjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3Qgbix1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIFNIQTUxMl9UcmFuc2Zvcm0oU0hBNTEyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhMS5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMDQ4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGExLmMKQEAgLTAsMCArMSw2NSBAQAorLyogY3J5cHRvL3NoYS9zaGExZGdzdC5jICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyN1bmRlZiAgU0hBXzAKKyNkZWZpbmUgU0hBXzEKKworLyogVGhlIGltcGxlbWVudGF0aW9uIGlzIGluIC4uL21kMzJfY29tbW9uLmggKi8KKworI2luY2x1ZGUgIm9wZW5zc2wvb3BlbnNzbF9zaGFfbG9jYWwuaCIKKwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhX2xvY2FsLmggYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGFfbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2JjMGRjCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhX2xvY2FsLmgKQEAgLTAsMCArMSw0MzYgQEAKKy8qIGNyeXB0by9zaGEvc2hhX2xvY2wuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJvcGVuc3NsL29wZW5zc2xfc2hhLmgiCisKKyNkZWZpbmUgREFUQV9PUkRFUl9JU19CSUdfRU5ESUFOCisKKyNkZWZpbmUgSEFTSF9MT05HICAgICAgICAgICAgICAgU0hBX0xPTkcKKyNkZWZpbmUgSEFTSF9DVFggICAgICAgICAgICAgICAgU0hBX0NUWAorI2RlZmluZSBIQVNIX0NCTE9DSyAgICAgICAgICAgICBTSEFfQ0JMT0NLCisjZGVmaW5lIEhBU0hfTUFLRV9TVFJJTkcoYyxzKSAgIGRvIHsJXAorCXVuc2lnbmVkIGxvbmcgbGw7CQlcCisJbGw9KGMpLT5oMDsgSE9TVF9sMmMobGwsKHMpKTsJXAorCWxsPShjKS0+aDE7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwlsbD0oYyktPmgyOyBIT1NUX2wyYyhsbCwocykpOwlcCisJbGw9KGMpLT5oMzsgSE9TVF9sMmMobGwsKHMpKTsJXAorCWxsPShjKS0+aDQ7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwl9IHdoaWxlICgwKQorCisjaWYgZGVmaW5lZChTSEFfMCkKKworIyBkZWZpbmUgSEFTSF9VUERBVEUgICAgICAgICAgICAgCVNIQV9VcGRhdGUKKyMgZGVmaW5lIEhBU0hfVFJBTlNGT1JNICAgICAgICAgIAlTSEFfVHJhbnNmb3JtCisjIGRlZmluZSBIQVNIX0ZJTkFMICAgICAgICAgICAgICAJU0hBX0ZpbmFsCisjIGRlZmluZSBIQVNIX0lOSVQJCQlTSEFfSW5pdAorIyBkZWZpbmUgSEFTSF9CTE9DS19EQVRBX09SREVSICAgCXNoYV9ibG9ja19kYXRhX29yZGVyCisjIGRlZmluZSBYdXBkYXRlKGEsaXgsaWEsaWIsaWMsaWQpCShpeD0oYSk9KGlhXmliXmljXmlkKSkKKworc3RhdGljIHZvaWQgc2hhX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKnAsc2l6ZV90IG51bSk7CisKKyNlbGlmIGRlZmluZWQoU0hBXzEpCisKKyMgZGVmaW5lIEhBU0hfVVBEQVRFICAgICAgICAgICAgIAlTSEExX1VwZGF0ZQorIyBkZWZpbmUgSEFTSF9UUkFOU0ZPUk0gICAgICAgICAgCVNIQTFfVHJhbnNmb3JtCisjIGRlZmluZSBIQVNIX0ZJTkFMICAgICAgICAgICAgICAJU0hBMV9GaW5hbAorIyBkZWZpbmUgSEFTSF9JTklUCQkJU0hBMV9Jbml0CisjIGRlZmluZSBIQVNIX0JMT0NLX0RBVEFfT1JERVIgICAJc2hhMV9ibG9ja19kYXRhX29yZGVyCisjIGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgZGVmaW5lZChfX01DNjhLX18pCisgICAvKiBNZXRyb3dlcmtzIGZvciBNb3Rvcm9sYSBmYWlscyBvdGhlcndpc2U6LSggPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiAqLworIyAgZGVmaW5lIFh1cGRhdGUoYSxpeCxpYSxpYixpYyxpZCkJZG8geyAoYSk9KGlhXmliXmljXmlkKTsJCVwKKwkJCQkJICAgICBpeD0oYSk9Uk9UQVRFKChhKSwxKTsJXAorCQkJCQl9IHdoaWxlICgwKQorIyBlbHNlCisjICBkZWZpbmUgWHVwZGF0ZShhLGl4LGlhLGliLGljLGlkKQkoIChhKT0oaWFeaWJeaWNeaWQpLAlcCisJCQkJCSAgaXg9KGEpPVJPVEFURSgoYSksMSkJXAorCQkJCQkpCisjIGVuZGlmCisKKyNpZm5kZWYgU0hBMV9BU00KK3N0YXRpYworI2VuZGlmCit2b2lkIHNoYTFfYmxvY2tfZGF0YV9vcmRlciAoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqcCxzaXplX3QgbnVtKTsKKworI2Vsc2UKKyMgZXJyb3IgIkVpdGhlciBTSEFfMCBvciBTSEFfMSBtdXN0IGJlIGRlZmluZWQuIgorI2VuZGlmCisKKyNpbmNsdWRlICJvcGVuc3NsX21kMzJfY29tbW9uLmgiCisKKyNkZWZpbmUgSU5JVF9EQVRBX2gwIDB4Njc0NTIzMDFVTAorI2RlZmluZSBJTklUX0RBVEFfaDEgMHhlZmNkYWI4OVVMCisjZGVmaW5lIElOSVRfREFUQV9oMiAweDk4YmFkY2ZlVUwKKyNkZWZpbmUgSU5JVF9EQVRBX2gzIDB4MTAzMjU0NzZVTAorI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFmMFVMCisKK2ludCBIQVNIX0lOSVQgKFNIQV9DVFggKmMpCisJeworCW1lbXNldCAoYywwLHNpemVvZigqYykpOworCWMtPmgwPUlOSVRfREFUQV9oMDsKKwljLT5oMT1JTklUX0RBVEFfaDE7CisJYy0+aDI9SU5JVF9EQVRBX2gyOworCWMtPmgzPUlOSVRfREFUQV9oMzsKKwljLT5oND1JTklUX0RBVEFfaDQ7CisJcmV0dXJuIDE7CisJfQorCisjZGVmaW5lIEtfMDBfMTkJMHg1YTgyNzk5OVVMCisjZGVmaW5lIEtfMjBfMzkgMHg2ZWQ5ZWJhMVVMCisjZGVmaW5lIEtfNDBfNTkgMHg4ZjFiYmNkY1VMCisjZGVmaW5lIEtfNjBfNzkgMHhjYTYyYzFkNlVMCisKKy8qIEFzICBwb2ludGVkIG91dCBieSBXZWkgRGFpIDx3ZWlkYWlAZXNraW1vLmNvbT4sIEYoKSBiZWxvdyBjYW4gYmUKKyAqIHNpbXBsaWZpZWQgdG8gdGhlIGNvZGUgaW4gRl8wMF8xOS4gIFdlaSBhdHRyaWJ1dGVzIHRoZXNlIG9wdGltaXNhdGlvbnMKKyAqIHRvIFBldGVyIEd1dG1hbm4ncyBTSFMgY29kZSwgYW5kIGhlIGF0dHJpYnV0ZXMgaXQgdG8gUmljaCBTY2hyb2VwcGVsLgorICogI2RlZmluZSBGKHgseSx6KSAoKCh4KSAmICh5KSkgIHwgICgofih4KSkgJiAoeikpKQorICogSSd2ZSBqdXN0IGJlY29tZSBhd2FyZSBvZiBhbm90aGVyIHR3ZWFrIHRvIGJlIG1hZGUsIGFnYWluIGZyb20gV2VpIERhaSwKKyAqIGluIEZfNDBfNTksICh4JmEpfCh5JmEpIC0+ICh4fHkpJmEKKyAqLworI2RlZmluZQlGXzAwXzE5KGIsYyxkKQkoKCgoYykgXiAoZCkpICYgKGIpKSBeIChkKSkgCisjZGVmaW5lCUZfMjBfMzkoYixjLGQpCSgoYikgXiAoYykgXiAoZCkpCisjZGVmaW5lIEZfNDBfNTkoYixjLGQpCSgoKGIpICYgKGMpKSB8ICgoKGIpfChjKSkgJiAoZCkpKSAKKyNkZWZpbmUJRl82MF83OShiLGMsZCkJRl8yMF8zOShiLGMsZCkKKworI2lmbmRlZiBPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVAorCisjZGVmaW5lIEJPRFlfMDBfMTUoaSxhLGIsYyxkLGUsZix4aSkgXAorCShmKT14aSsoZSkrS18wMF8xOStST1RBVEUoKGEpLDUpK0ZfMDBfMTkoKGIpLChjKSwoZCkpOyBcCisJKGIpPVJPVEFURSgoYiksMzApOworCisjZGVmaW5lIEJPRFlfMTZfMTkoaSxhLGIsYyxkLGUsZix4aSx4YSx4Yix4Yyx4ZCkgXAorCVh1cGRhdGUoZix4aSx4YSx4Yix4Yyx4ZCk7IFwKKwkoZikrPShlKStLXzAwXzE5K1JPVEFURSgoYSksNSkrRl8wMF8xOSgoYiksKGMpLChkKSk7IFwKKwkoYik9Uk9UQVRFKChiKSwzMCk7CisKKyNkZWZpbmUgQk9EWV8yMF8zMShpLGEsYixjLGQsZSxmLHhpLHhhLHhiLHhjLHhkKSBcCisJWHVwZGF0ZShmLHhpLHhhLHhiLHhjLHhkKTsgXAorCShmKSs9KGUpK0tfMjBfMzkrUk9UQVRFKChhKSw1KStGXzIwXzM5KChiKSwoYyksKGQpKTsgXAorCShiKT1ST1RBVEUoKGIpLDMwKTsKKworI2RlZmluZSBCT0RZXzMyXzM5KGksYSxiLGMsZCxlLGYseGEseGIseGMseGQpIFwKKwlYdXBkYXRlKGYseGEseGEseGIseGMseGQpOyBcCisJKGYpKz0oZSkrS18yMF8zOStST1RBVEUoKGEpLDUpK0ZfMjBfMzkoKGIpLChjKSwoZCkpOyBcCisJKGIpPVJPVEFURSgoYiksMzApOworCisjZGVmaW5lIEJPRFlfNDBfNTkoaSxhLGIsYyxkLGUsZix4YSx4Yix4Yyx4ZCkgXAorCVh1cGRhdGUoZix4YSx4YSx4Yix4Yyx4ZCk7IFwKKwkoZikrPShlKStLXzQwXzU5K1JPVEFURSgoYSksNSkrRl80MF81OSgoYiksKGMpLChkKSk7IFwKKwkoYik9Uk9UQVRFKChiKSwzMCk7CisKKyNkZWZpbmUgQk9EWV82MF83OShpLGEsYixjLGQsZSxmLHhhLHhiLHhjLHhkKSBcCisJWHVwZGF0ZShmLHhhLHhhLHhiLHhjLHhkKTsgXAorCShmKT14YSsoZSkrS182MF83OStST1RBVEUoKGEpLDUpK0ZfNjBfNzkoKGIpLChjKSwoZCkpOyBcCisJKGIpPVJPVEFURSgoYiksMzApOworCisjaWZkZWYgWAorI3VuZGVmIFgKKyNlbmRpZgorI2lmbmRlZiBNRDMyX1hBUlJBWQorICAvKgorICAgKiBPcmlnaW5hbGx5IFggd2FzIGFuIGFycmF5LiBBcyBpdCdzIGF1dG9tYXRpYyBpdCdzIG5hdHVyYWwKKyAgICogdG8gZXhwZWN0IFJJU0MgY29tcGlsZXIgdG8gYWNjb21vZGF0ZSBhdCBsZWFzdCBwYXJ0IG9mIGl0IGluCisgICAqIHRoZSByZWdpc3RlciBiYW5rLCBpc24ndCBpdD8gVW5mb3J0dW5hdGVseSBub3QgYWxsIGNvbXBpbGVycworICAgKiAiZmluZCIgdGhpcyBleHBlY3RhdGlvbiByZWFzb25hYmxlOi0oIE9uIG9yZGVyIHRvIG1ha2Ugc3VjaAorICAgKiBjb21waWxlcnMgZ2VuZXJhdGUgYmV0dGVyIGNvZGUgSSByZXBsYWNlIFhbXSB3aXRoIGEgYnVuY2ggb2YKKyAgICogWDAsIFgxLCBldGMuIFNlZSB0aGUgZnVuY3Rpb24gYm9keSBiZWxvdy4uLgorICAgKgkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgorICAgKi8KKyMgZGVmaW5lIFgoaSkJWFgjI2kKKyNlbHNlCisgIC8qCisgICAqIEhvd2V2ZXIhIFNvbWUgY29tcGlsZXJzIChtb3N0IG5vdGFibHkgSFAgQykgZ2V0IG92ZXJ3aGVsbWVkIGJ5CisgICAqIHRoYXQgbWFueSBsb2NhbCB2YXJpYWJsZXMgc28gdGhhdCB3ZSBoYXZlIHRvIGhhdmUgdGhlIHdheSB0bworICAgKiBmYWxsIGRvd24gdG8gdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorICAgKi8KKyMgZGVmaW5lIFgoaSkJWFhbaV0KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0hBXzEpIHx8ICFkZWZpbmVkKFNIQTFfQVNNKQorc3RhdGljIHZvaWQgSEFTSF9CTE9DS19EQVRBX09SREVSIChTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLCBzaXplX3QgbnVtKQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhPXA7CisJcmVnaXN0ZXIgdW5zaWduZWQgTUQzMl9SRUdfVCBBLEIsQyxELEUsVCxsOworI2lmbmRlZiBNRDMyX1hBUlJBWQorCXVuc2lnbmVkIE1EMzJfUkVHX1QJWFgwLCBYWDEsIFhYMiwgWFgzLCBYWDQsIFhYNSwgWFg2LCBYWDcsCisJCQkJWFg4LCBYWDksWFgxMCxYWDExLFhYMTIsWFgxMyxYWDE0LFhYMTU7CisjZWxzZQorCVNIQV9MT05HCVhYWzE2XTsKKyNlbmRpZgorCisJQT1jLT5oMDsKKwlCPWMtPmgxOworCUM9Yy0+aDI7CisJRD1jLT5oMzsKKwlFPWMtPmg0OworCisJZm9yICg7OykKKwkJCXsKKwljb25zdCB1bmlvbiB7IGxvbmcgb25lOyBjaGFyIGxpdHRsZTsgfSBpc19lbmRpYW4gPSB7MX07CisKKwlpZiAoIWlzX2VuZGlhbi5saXR0bGUgJiYgc2l6ZW9mKFNIQV9MT05HKT09NCAmJiAoKHNpemVfdClwJTQpPT0wKQorCQl7CisJCWNvbnN0IFNIQV9MT05HICpXPShjb25zdCBTSEFfTE9ORyAqKWRhdGE7CisKKwkJWCggMCkgPSBXWzBdOwkJCQlYKCAxKSA9IFdbIDFdOworCQlCT0RZXzAwXzE1KCAwLEEsQixDLEQsRSxULFgoIDApKTsJWCggMikgPSBXWyAyXTsKKwkJQk9EWV8wMF8xNSggMSxULEEsQixDLEQsRSxYKCAxKSk7CVgoIDMpID0gV1sgM107CisJCUJPRFlfMDBfMTUoIDIsRSxULEEsQixDLEQsWCggMikpOwlYKCA0KSA9IFdbIDRdOworCQlCT0RZXzAwXzE1KCAzLEQsRSxULEEsQixDLFgoIDMpKTsJWCggNSkgPSBXWyA1XTsKKwkJQk9EWV8wMF8xNSggNCxDLEQsRSxULEEsQixYKCA0KSk7CVgoIDYpID0gV1sgNl07CisJCUJPRFlfMDBfMTUoIDUsQixDLEQsRSxULEEsWCggNSkpOwlYKCA3KSA9IFdbIDddOworCQlCT0RZXzAwXzE1KCA2LEEsQixDLEQsRSxULFgoIDYpKTsJWCggOCkgPSBXWyA4XTsKKwkJQk9EWV8wMF8xNSggNyxULEEsQixDLEQsRSxYKCA3KSk7CVgoIDkpID0gV1sgOV07CisJCUJPRFlfMDBfMTUoIDgsRSxULEEsQixDLEQsWCggOCkpOwlYKDEwKSA9IFdbMTBdOworCQlCT0RZXzAwXzE1KCA5LEQsRSxULEEsQixDLFgoIDkpKTsJWCgxMSkgPSBXWzExXTsKKwkJQk9EWV8wMF8xNSgxMCxDLEQsRSxULEEsQixYKDEwKSk7CVgoMTIpID0gV1sxMl07CisJCUJPRFlfMDBfMTUoMTEsQixDLEQsRSxULEEsWCgxMSkpOwlYKDEzKSA9IFdbMTNdOworCQlCT0RZXzAwXzE1KDEyLEEsQixDLEQsRSxULFgoMTIpKTsJWCgxNCkgPSBXWzE0XTsKKwkJQk9EWV8wMF8xNSgxMyxULEEsQixDLEQsRSxYKDEzKSk7CVgoMTUpID0gV1sxNV07CisJCUJPRFlfMDBfMTUoMTQsRSxULEEsQixDLEQsWCgxNCkpOworCQlCT0RZXzAwXzE1KDE1LEQsRSxULEEsQixDLFgoMTUpKTsKKworCQlkYXRhICs9IFNIQV9DQkxPQ0s7CisJCX0KKwllbHNlCisJCXsKKwkJSE9TVF9jMmwoZGF0YSxsKTsgWCggMCk9bDsJCUhPU1RfYzJsKGRhdGEsbCk7IFgoIDEpPWw7CisJCUJPRFlfMDBfMTUoIDAsQSxCLEMsRCxFLFQsWCggMCkpOwlIT1NUX2MybChkYXRhLGwpOyBYKCAyKT1sOworCQlCT0RZXzAwXzE1KCAxLFQsQSxCLEMsRCxFLFgoIDEpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggMyk9bDsKKwkJQk9EWV8wMF8xNSggMixFLFQsQSxCLEMsRCxYKCAyKSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDQpPWw7CisJCUJPRFlfMDBfMTUoIDMsRCxFLFQsQSxCLEMsWCggMykpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA1KT1sOworCQlCT0RZXzAwXzE1KCA0LEMsRCxFLFQsQSxCLFgoIDQpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggNik9bDsKKwkJQk9EWV8wMF8xNSggNSxCLEMsRCxFLFQsQSxYKCA1KSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDcpPWw7CisJCUJPRFlfMDBfMTUoIDYsQSxCLEMsRCxFLFQsWCggNikpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA4KT1sOworCQlCT0RZXzAwXzE1KCA3LFQsQSxCLEMsRCxFLFgoIDcpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggOSk9bDsKKwkJQk9EWV8wMF8xNSggOCxFLFQsQSxCLEMsRCxYKCA4KSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTApPWw7CisJCUJPRFlfMDBfMTUoIDksRCxFLFQsQSxCLEMsWCggOSkpOwlIT1NUX2MybChkYXRhLGwpOyBYKDExKT1sOworCQlCT0RZXzAwXzE1KDEwLEMsRCxFLFQsQSxCLFgoMTApKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxMik9bDsKKwkJQk9EWV8wMF8xNSgxMSxCLEMsRCxFLFQsQSxYKDExKSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTMpPWw7CisJCUJPRFlfMDBfMTUoMTIsQSxCLEMsRCxFLFQsWCgxMikpOwlIT1NUX2MybChkYXRhLGwpOyBYKDE0KT1sOworCQlCT0RZXzAwXzE1KDEzLFQsQSxCLEMsRCxFLFgoMTMpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxNSk9bDsKKwkJQk9EWV8wMF8xNSgxNCxFLFQsQSxCLEMsRCxYKDE0KSk7CisJCUJPRFlfMDBfMTUoMTUsRCxFLFQsQSxCLEMsWCgxNSkpOworCQl9CisKKwlCT0RZXzE2XzE5KDE2LEMsRCxFLFQsQSxCLFgoIDApLFgoIDApLFgoIDIpLFgoIDgpLFgoMTMpKTsKKwlCT0RZXzE2XzE5KDE3LEIsQyxELEUsVCxBLFgoIDEpLFgoIDEpLFgoIDMpLFgoIDkpLFgoMTQpKTsKKwlCT0RZXzE2XzE5KDE4LEEsQixDLEQsRSxULFgoIDIpLFgoIDIpLFgoIDQpLFgoMTApLFgoMTUpKTsKKwlCT0RZXzE2XzE5KDE5LFQsQSxCLEMsRCxFLFgoIDMpLFgoIDMpLFgoIDUpLFgoMTEpLFgoIDApKTsKKworCUJPRFlfMjBfMzEoMjAsRSxULEEsQixDLEQsWCggNCksWCggNCksWCggNiksWCgxMiksWCggMSkpOworCUJPRFlfMjBfMzEoMjEsRCxFLFQsQSxCLEMsWCggNSksWCggNSksWCggNyksWCgxMyksWCggMikpOworCUJPRFlfMjBfMzEoMjIsQyxELEUsVCxBLEIsWCggNiksWCggNiksWCggOCksWCgxNCksWCggMykpOworCUJPRFlfMjBfMzEoMjMsQixDLEQsRSxULEEsWCggNyksWCggNyksWCggOSksWCgxNSksWCggNCkpOworCUJPRFlfMjBfMzEoMjQsQSxCLEMsRCxFLFQsWCggOCksWCggOCksWCgxMCksWCggMCksWCggNSkpOworCUJPRFlfMjBfMzEoMjUsVCxBLEIsQyxELEUsWCggOSksWCggOSksWCgxMSksWCggMSksWCggNikpOworCUJPRFlfMjBfMzEoMjYsRSxULEEsQixDLEQsWCgxMCksWCgxMCksWCgxMiksWCggMiksWCggNykpOworCUJPRFlfMjBfMzEoMjcsRCxFLFQsQSxCLEMsWCgxMSksWCgxMSksWCgxMyksWCggMyksWCggOCkpOworCUJPRFlfMjBfMzEoMjgsQyxELEUsVCxBLEIsWCgxMiksWCgxMiksWCgxNCksWCggNCksWCggOSkpOworCUJPRFlfMjBfMzEoMjksQixDLEQsRSxULEEsWCgxMyksWCgxMyksWCgxNSksWCggNSksWCgxMCkpOworCUJPRFlfMjBfMzEoMzAsQSxCLEMsRCxFLFQsWCgxNCksWCgxNCksWCggMCksWCggNiksWCgxMSkpOworCUJPRFlfMjBfMzEoMzEsVCxBLEIsQyxELEUsWCgxNSksWCgxNSksWCggMSksWCggNyksWCgxMikpOworCisJQk9EWV8zMl8zOSgzMixFLFQsQSxCLEMsRCxYKCAwKSxYKCAyKSxYKCA4KSxYKDEzKSk7CisJQk9EWV8zMl8zOSgzMyxELEUsVCxBLEIsQyxYKCAxKSxYKCAzKSxYKCA5KSxYKDE0KSk7CisJQk9EWV8zMl8zOSgzNCxDLEQsRSxULEEsQixYKCAyKSxYKCA0KSxYKDEwKSxYKDE1KSk7CisJQk9EWV8zMl8zOSgzNSxCLEMsRCxFLFQsQSxYKCAzKSxYKCA1KSxYKDExKSxYKCAwKSk7CisJQk9EWV8zMl8zOSgzNixBLEIsQyxELEUsVCxYKCA0KSxYKCA2KSxYKDEyKSxYKCAxKSk7CisJQk9EWV8zMl8zOSgzNyxULEEsQixDLEQsRSxYKCA1KSxYKCA3KSxYKDEzKSxYKCAyKSk7CisJQk9EWV8zMl8zOSgzOCxFLFQsQSxCLEMsRCxYKCA2KSxYKCA4KSxYKDE0KSxYKCAzKSk7CisJQk9EWV8zMl8zOSgzOSxELEUsVCxBLEIsQyxYKCA3KSxYKCA5KSxYKDE1KSxYKCA0KSk7CisKKwlCT0RZXzQwXzU5KDQwLEMsRCxFLFQsQSxCLFgoIDgpLFgoMTApLFgoIDApLFgoIDUpKTsKKwlCT0RZXzQwXzU5KDQxLEIsQyxELEUsVCxBLFgoIDkpLFgoMTEpLFgoIDEpLFgoIDYpKTsKKwlCT0RZXzQwXzU5KDQyLEEsQixDLEQsRSxULFgoMTApLFgoMTIpLFgoIDIpLFgoIDcpKTsKKwlCT0RZXzQwXzU5KDQzLFQsQSxCLEMsRCxFLFgoMTEpLFgoMTMpLFgoIDMpLFgoIDgpKTsKKwlCT0RZXzQwXzU5KDQ0LEUsVCxBLEIsQyxELFgoMTIpLFgoMTQpLFgoIDQpLFgoIDkpKTsKKwlCT0RZXzQwXzU5KDQ1LEQsRSxULEEsQixDLFgoMTMpLFgoMTUpLFgoIDUpLFgoMTApKTsKKwlCT0RZXzQwXzU5KDQ2LEMsRCxFLFQsQSxCLFgoMTQpLFgoIDApLFgoIDYpLFgoMTEpKTsKKwlCT0RZXzQwXzU5KDQ3LEIsQyxELEUsVCxBLFgoMTUpLFgoIDEpLFgoIDcpLFgoMTIpKTsKKwlCT0RZXzQwXzU5KDQ4LEEsQixDLEQsRSxULFgoIDApLFgoIDIpLFgoIDgpLFgoMTMpKTsKKwlCT0RZXzQwXzU5KDQ5LFQsQSxCLEMsRCxFLFgoIDEpLFgoIDMpLFgoIDkpLFgoMTQpKTsKKwlCT0RZXzQwXzU5KDUwLEUsVCxBLEIsQyxELFgoIDIpLFgoIDQpLFgoMTApLFgoMTUpKTsKKwlCT0RZXzQwXzU5KDUxLEQsRSxULEEsQixDLFgoIDMpLFgoIDUpLFgoMTEpLFgoIDApKTsKKwlCT0RZXzQwXzU5KDUyLEMsRCxFLFQsQSxCLFgoIDQpLFgoIDYpLFgoMTIpLFgoIDEpKTsKKwlCT0RZXzQwXzU5KDUzLEIsQyxELEUsVCxBLFgoIDUpLFgoIDcpLFgoMTMpLFgoIDIpKTsKKwlCT0RZXzQwXzU5KDU0LEEsQixDLEQsRSxULFgoIDYpLFgoIDgpLFgoMTQpLFgoIDMpKTsKKwlCT0RZXzQwXzU5KDU1LFQsQSxCLEMsRCxFLFgoIDcpLFgoIDkpLFgoMTUpLFgoIDQpKTsKKwlCT0RZXzQwXzU5KDU2LEUsVCxBLEIsQyxELFgoIDgpLFgoMTApLFgoIDApLFgoIDUpKTsKKwlCT0RZXzQwXzU5KDU3LEQsRSxULEEsQixDLFgoIDkpLFgoMTEpLFgoIDEpLFgoIDYpKTsKKwlCT0RZXzQwXzU5KDU4LEMsRCxFLFQsQSxCLFgoMTApLFgoMTIpLFgoIDIpLFgoIDcpKTsKKwlCT0RZXzQwXzU5KDU5LEIsQyxELEUsVCxBLFgoMTEpLFgoMTMpLFgoIDMpLFgoIDgpKTsKKworCUJPRFlfNjBfNzkoNjAsQSxCLEMsRCxFLFQsWCgxMiksWCgxNCksWCggNCksWCggOSkpOworCUJPRFlfNjBfNzkoNjEsVCxBLEIsQyxELEUsWCgxMyksWCgxNSksWCggNSksWCgxMCkpOworCUJPRFlfNjBfNzkoNjIsRSxULEEsQixDLEQsWCgxNCksWCggMCksWCggNiksWCgxMSkpOworCUJPRFlfNjBfNzkoNjMsRCxFLFQsQSxCLEMsWCgxNSksWCggMSksWCggNyksWCgxMikpOworCUJPRFlfNjBfNzkoNjQsQyxELEUsVCxBLEIsWCggMCksWCggMiksWCggOCksWCgxMykpOworCUJPRFlfNjBfNzkoNjUsQixDLEQsRSxULEEsWCggMSksWCggMyksWCggOSksWCgxNCkpOworCUJPRFlfNjBfNzkoNjYsQSxCLEMsRCxFLFQsWCggMiksWCggNCksWCgxMCksWCgxNSkpOworCUJPRFlfNjBfNzkoNjcsVCxBLEIsQyxELEUsWCggMyksWCggNSksWCgxMSksWCggMCkpOworCUJPRFlfNjBfNzkoNjgsRSxULEEsQixDLEQsWCggNCksWCggNiksWCgxMiksWCggMSkpOworCUJPRFlfNjBfNzkoNjksRCxFLFQsQSxCLEMsWCggNSksWCggNyksWCgxMyksWCggMikpOworCUJPRFlfNjBfNzkoNzAsQyxELEUsVCxBLEIsWCggNiksWCggOCksWCgxNCksWCggMykpOworCUJPRFlfNjBfNzkoNzEsQixDLEQsRSxULEEsWCggNyksWCggOSksWCgxNSksWCggNCkpOworCUJPRFlfNjBfNzkoNzIsQSxCLEMsRCxFLFQsWCggOCksWCgxMCksWCggMCksWCggNSkpOworCUJPRFlfNjBfNzkoNzMsVCxBLEIsQyxELEUsWCggOSksWCgxMSksWCggMSksWCggNikpOworCUJPRFlfNjBfNzkoNzQsRSxULEEsQixDLEQsWCgxMCksWCgxMiksWCggMiksWCggNykpOworCUJPRFlfNjBfNzkoNzUsRCxFLFQsQSxCLEMsWCgxMSksWCgxMyksWCggMyksWCggOCkpOworCUJPRFlfNjBfNzkoNzYsQyxELEUsVCxBLEIsWCgxMiksWCgxNCksWCggNCksWCggOSkpOworCUJPRFlfNjBfNzkoNzcsQixDLEQsRSxULEEsWCgxMyksWCgxNSksWCggNSksWCgxMCkpOworCUJPRFlfNjBfNzkoNzgsQSxCLEMsRCxFLFQsWCgxNCksWCggMCksWCggNiksWCgxMSkpOworCUJPRFlfNjBfNzkoNzksVCxBLEIsQyxELEUsWCgxNSksWCggMSksWCggNyksWCgxMikpOworCQorCWMtPmgwPShjLT5oMCtFKSYweGZmZmZmZmZmTDsgCisJYy0+aDE9KGMtPmgxK1QpJjB4ZmZmZmZmZmZMOworCWMtPmgyPShjLT5oMitBKSYweGZmZmZmZmZmTDsKKwljLT5oMz0oYy0+aDMrQikmMHhmZmZmZmZmZkw7CisJYy0+aDQ9KGMtPmg0K0MpJjB4ZmZmZmZmZmZMOworCisJaWYgKC0tbnVtID09IDApIGJyZWFrOworCisJQT1jLT5oMDsKKwlCPWMtPmgxOworCUM9Yy0+aDI7CisJRD1jLT5oMzsKKwlFPWMtPmg0OworCisJCQl9CisJfQorI2VuZGlmCisKKyNlbHNlCS8qIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UICovCisKKyNkZWZpbmUgQk9EWV8wMF8xNSh4aSkJCSBkbyB7CVwKKwlUPUUrS18wMF8xOStGXzAwXzE5KEIsQyxEKTsJXAorCUU9RCwgRD1DLCBDPVJPVEFURShCLDMwKSwgQj1BOwlcCisJQT1ST1RBVEUoQSw1KStUK3hpOwkgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIEJPRFlfMTZfMTkoeGEseGIseGMseGQpCSBkbyB7CVwKKwlYdXBkYXRlKFQseGEseGEseGIseGMseGQpOwlcCisJVCs9RStLXzAwXzE5K0ZfMDBfMTkoQixDLEQpOwlcCisJRT1ELCBEPUMsIEM9Uk9UQVRFKEIsMzApLCBCPUE7CVwKKwlBPVJPVEFURShBLDUpK1Q7CSAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgQk9EWV8yMF8zOSh4YSx4Yix4Yyx4ZCkJIGRvIHsJXAorCVh1cGRhdGUoVCx4YSx4YSx4Yix4Yyx4ZCk7CVwKKwlUKz1FK0tfMjBfMzkrRl8yMF8zOShCLEMsRCk7CVwKKwlFPUQsIEQ9QywgQz1ST1RBVEUoQiwzMCksIEI9QTsJXAorCUE9Uk9UQVRFKEEsNSkrVDsJICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBCT0RZXzQwXzU5KHhhLHhiLHhjLHhkKQkgZG8gewlcCisJWHVwZGF0ZShULHhhLHhhLHhiLHhjLHhkKTsJXAorCVQrPUUrS180MF81OStGXzQwXzU5KEIsQyxEKTsJXAorCUU9RCwgRD1DLCBDPVJPVEFURShCLDMwKSwgQj1BOwlcCisJQT1ST1RBVEUoQSw1KStUOwkgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIEJPRFlfNjBfNzkoeGEseGIseGMseGQpCSBkbyB7CVwKKwlYdXBkYXRlKFQseGEseGEseGIseGMseGQpOwlcCisJVD1FK0tfNjBfNzkrRl82MF83OShCLEMsRCk7CVwKKwlFPUQsIEQ9QywgQz1ST1RBVEUoQiwzMCksIEI9QTsJXAorCUE9Uk9UQVRFKEEsNSkrVCt4YTsJICAgIH0gd2hpbGUoMCkKKworI2lmICFkZWZpbmVkKFNIQV8xKSB8fCAhZGVmaW5lZChTSEExX0FTTSkKK3N0YXRpYyB2b2lkIEhBU0hfQkxPQ0tfREFUQV9PUkRFUiAoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqcCwgc2l6ZV90IG51bSkKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YT1wOworCXJlZ2lzdGVyIHVuc2lnbmVkIE1EMzJfUkVHX1QgQSxCLEMsRCxFLFQsbDsKKwlpbnQgaTsKKwlTSEFfTE9ORwlYWzE2XTsKKworCUE9Yy0+aDA7CisJQj1jLT5oMTsKKwlDPWMtPmgyOworCUQ9Yy0+aDM7CisJRT1jLT5oNDsKKworCWZvciAoOzspCisJCXsKKwlmb3IgKGk9MDtpPDE2O2krKykKKwl7IEhPU1RfYzJsKGRhdGEsbCk7IFhbaV09bDsgQk9EWV8wMF8xNShYW2ldKTsgfQorCWZvciAoaT0wO2k8NDtpKyspCisJeyBCT0RZXzE2XzE5KFhbaV0sICAgICAgIFhbaSsyXSwgICAgICBYW2krOF0sICAgICBYWyhpKzEzKSYxNV0pOyB9CisJZm9yICg7aTwyNDtpKyspCisJeyBCT0RZXzIwXzM5KFhbaSYxNV0sICAgIFhbKGkrMikmMTVdLCBYWyhpKzgpJjE1XSxYWyhpKzEzKSYxNV0pOyB9CisJZm9yIChpPTA7aTwyMDtpKyspCisJeyBCT0RZXzQwXzU5KFhbKGkrOCkmMTVdLFhbKGkrMTApJjE1XSxYW2kmMTVdLCAgICBYWyhpKzUpJjE1XSk7ICB9CisJZm9yIChpPTQ7aTwyNDtpKyspCisJeyBCT0RZXzYwXzc5KFhbKGkrOCkmMTVdLFhbKGkrMTApJjE1XSxYW2kmMTVdLCAgICBYWyhpKzUpJjE1XSk7ICB9CisKKwljLT5oMD0oYy0+aDArQSkmMHhmZmZmZmZmZkw7IAorCWMtPmgxPShjLT5oMStCKSYweGZmZmZmZmZmTDsKKwljLT5oMj0oYy0+aDIrQykmMHhmZmZmZmZmZkw7CisJYy0+aDM9KGMtPmgzK0QpJjB4ZmZmZmZmZmZMOworCWMtPmg0PShjLT5oNCtFKSYweGZmZmZmZmZmTDsKKworCWlmICgtLW51bSA9PSAwKSBicmVhazsKKworCUE9Yy0+aDA7CisJQj1jLT5oMTsKKwlDPWMtPmgyOworCUQ9Yy0+aDM7CisJRT1jLT5oNDsKKworCQl9CisJfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc3ByLmggYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zcHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGVjNjFlCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc3ByLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qIGNyeXB0by9kZXMvc3ByLmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworY29uc3QgREVTX0xPTkcgREVTX1NQdHJhbnNbOF1bNjRdPXsKK3sKKy8qIG5pYmJsZSAwICovCisweDAyMDgwODAwTCwgMHgwMDA4MDAwMEwsIDB4MDIwMDAwMDJMLCAweDAyMDgwODAyTCwKKzB4MDIwMDAwMDBMLCAweDAwMDgwODAyTCwgMHgwMDA4MDAwMkwsIDB4MDIwMDAwMDJMLAorMHgwMDA4MDgwMkwsIDB4MDIwODA4MDBMLCAweDAyMDgwMDAwTCwgMHgwMDAwMDgwMkwsCisweDAyMDAwODAyTCwgMHgwMjAwMDAwMEwsIDB4MDAwMDAwMDBMLCAweDAwMDgwMDAyTCwKKzB4MDAwODAwMDBMLCAweDAwMDAwMDAyTCwgMHgwMjAwMDgwMEwsIDB4MDAwODA4MDBMLAorMHgwMjA4MDgwMkwsIDB4MDIwODAwMDBMLCAweDAwMDAwODAyTCwgMHgwMjAwMDgwMEwsCisweDAwMDAwMDAyTCwgMHgwMDAwMDgwMEwsIDB4MDAwODA4MDBMLCAweDAyMDgwMDAyTCwKKzB4MDAwMDA4MDBMLCAweDAyMDAwODAyTCwgMHgwMjA4MDAwMkwsIDB4MDAwMDAwMDBMLAorMHgwMDAwMDAwMEwsIDB4MDIwODA4MDJMLCAweDAyMDAwODAwTCwgMHgwMDA4MDAwMkwsCisweDAyMDgwODAwTCwgMHgwMDA4MDAwMEwsIDB4MDAwMDA4MDJMLCAweDAyMDAwODAwTCwKKzB4MDIwODAwMDJMLCAweDAwMDAwODAwTCwgMHgwMDA4MDgwMEwsIDB4MDIwMDAwMDJMLAorMHgwMDA4MDgwMkwsIDB4MDAwMDAwMDJMLCAweDAyMDAwMDAyTCwgMHgwMjA4MDAwMEwsCisweDAyMDgwODAyTCwgMHgwMDA4MDgwMEwsIDB4MDIwODAwMDBMLCAweDAyMDAwODAyTCwKKzB4MDIwMDAwMDBMLCAweDAwMDAwODAyTCwgMHgwMDA4MDAwMkwsIDB4MDAwMDAwMDBMLAorMHgwMDA4MDAwMEwsIDB4MDIwMDAwMDBMLCAweDAyMDAwODAyTCwgMHgwMjA4MDgwMEwsCisweDAwMDAwMDAyTCwgMHgwMjA4MDAwMkwsIDB4MDAwMDA4MDBMLCAweDAwMDgwODAyTCwKK30seworLyogbmliYmxlIDEgKi8KKzB4NDAxMDgwMTBMLCAweDAwMDAwMDAwTCwgMHgwMDEwODAwMEwsIDB4NDAxMDAwMDBMLAorMHg0MDAwMDAxMEwsIDB4MDAwMDgwMTBMLCAweDQwMDA4MDAwTCwgMHgwMDEwODAwMEwsCisweDAwMDA4MDAwTCwgMHg0MDEwMDAxMEwsIDB4MDAwMDAwMTBMLCAweDQwMDA4MDAwTCwKKzB4MDAxMDAwMTBMLCAweDQwMTA4MDAwTCwgMHg0MDEwMDAwMEwsIDB4MDAwMDAwMTBMLAorMHgwMDEwMDAwMEwsIDB4NDAwMDgwMTBMLCAweDQwMTAwMDEwTCwgMHgwMDAwODAwMEwsCisweDAwMTA4MDEwTCwgMHg0MDAwMDAwMEwsIDB4MDAwMDAwMDBMLCAweDAwMTAwMDEwTCwKKzB4NDAwMDgwMTBMLCAweDAwMTA4MDEwTCwgMHg0MDEwODAwMEwsIDB4NDAwMDAwMTBMLAorMHg0MDAwMDAwMEwsIDB4MDAxMDAwMDBMLCAweDAwMDA4MDEwTCwgMHg0MDEwODAxMEwsCisweDAwMTAwMDEwTCwgMHg0MDEwODAwMEwsIDB4NDAwMDgwMDBMLCAweDAwMTA4MDEwTCwKKzB4NDAxMDgwMTBMLCAweDAwMTAwMDEwTCwgMHg0MDAwMDAxMEwsIDB4MDAwMDAwMDBMLAorMHg0MDAwMDAwMEwsIDB4MDAwMDgwMTBMLCAweDAwMTAwMDAwTCwgMHg0MDEwMDAxMEwsCisweDAwMDA4MDAwTCwgMHg0MDAwMDAwMEwsIDB4MDAxMDgwMTBMLCAweDQwMDA4MDEwTCwKKzB4NDAxMDgwMDBMLCAweDAwMDA4MDAwTCwgMHgwMDAwMDAwMEwsIDB4NDAwMDAwMTBMLAorMHgwMDAwMDAxMEwsIDB4NDAxMDgwMTBMLCAweDAwMTA4MDAwTCwgMHg0MDEwMDAwMEwsCisweDQwMTAwMDEwTCwgMHgwMDEwMDAwMEwsIDB4MDAwMDgwMTBMLCAweDQwMDA4MDAwTCwKKzB4NDAwMDgwMTBMLCAweDAwMDAwMDEwTCwgMHg0MDEwMDAwMEwsIDB4MDAxMDgwMDBMLAorfSx7CisvKiBuaWJibGUgMiAqLworMHgwNDAwMDAwMUwsIDB4MDQwNDAxMDBMLCAweDAwMDAwMTAwTCwgMHgwNDAwMDEwMUwsCisweDAwMDQwMDAxTCwgMHgwNDAwMDAwMEwsIDB4MDQwMDAxMDFMLCAweDAwMDQwMTAwTCwKKzB4MDQwMDAxMDBMLCAweDAwMDQwMDAwTCwgMHgwNDA0MDAwMEwsIDB4MDAwMDAwMDFMLAorMHgwNDA0MDEwMUwsIDB4MDAwMDAxMDFMLCAweDAwMDAwMDAxTCwgMHgwNDA0MDAwMUwsCisweDAwMDAwMDAwTCwgMHgwMDA0MDAwMUwsIDB4MDQwNDAxMDBMLCAweDAwMDAwMTAwTCwKKzB4MDAwMDAxMDFMLCAweDA0MDQwMTAxTCwgMHgwMDA0MDAwMEwsIDB4MDQwMDAwMDFMLAorMHgwNDA0MDAwMUwsIDB4MDQwMDAxMDBMLCAweDAwMDQwMTAxTCwgMHgwNDA0MDAwMEwsCisweDAwMDQwMTAwTCwgMHgwMDAwMDAwMEwsIDB4MDQwMDAwMDBMLCAweDAwMDQwMTAxTCwKKzB4MDQwNDAxMDBMLCAweDAwMDAwMTAwTCwgMHgwMDAwMDAwMUwsIDB4MDAwNDAwMDBMLAorMHgwMDAwMDEwMUwsIDB4MDAwNDAwMDFMLCAweDA0MDQwMDAwTCwgMHgwNDAwMDEwMUwsCisweDAwMDAwMDAwTCwgMHgwNDA0MDEwMEwsIDB4MDAwNDAxMDBMLCAweDA0MDQwMDAxTCwKKzB4MDAwNDAwMDFMLCAweDA0MDAwMDAwTCwgMHgwNDA0MDEwMUwsIDB4MDAwMDAwMDFMLAorMHgwMDA0MDEwMUwsIDB4MDQwMDAwMDFMLCAweDA0MDAwMDAwTCwgMHgwNDA0MDEwMUwsCisweDAwMDQwMDAwTCwgMHgwNDAwMDEwMEwsIDB4MDQwMDAxMDFMLCAweDAwMDQwMTAwTCwKKzB4MDQwMDAxMDBMLCAweDAwMDAwMDAwTCwgMHgwNDA0MDAwMUwsIDB4MDAwMDAxMDFMLAorMHgwNDAwMDAwMUwsIDB4MDAwNDAxMDFMLCAweDAwMDAwMTAwTCwgMHgwNDA0MDAwMEwsCit9LHsKKy8qIG5pYmJsZSAzICovCisweDAwNDAxMDA4TCwgMHgxMDAwMTAwMEwsIDB4MDAwMDAwMDhMLCAweDEwNDAxMDA4TCwKKzB4MDAwMDAwMDBMLCAweDEwNDAwMDAwTCwgMHgxMDAwMTAwOEwsIDB4MDA0MDAwMDhMLAorMHgxMDQwMTAwMEwsIDB4MTAwMDAwMDhMLCAweDEwMDAwMDAwTCwgMHgwMDAwMTAwOEwsCisweDEwMDAwMDA4TCwgMHgwMDQwMTAwOEwsIDB4MDA0MDAwMDBMLCAweDEwMDAwMDAwTCwKKzB4MTA0MDAwMDhMLCAweDAwNDAxMDAwTCwgMHgwMDAwMTAwMEwsIDB4MDAwMDAwMDhMLAorMHgwMDQwMTAwMEwsIDB4MTAwMDEwMDhMLCAweDEwNDAwMDAwTCwgMHgwMDAwMTAwMEwsCisweDAwMDAxMDA4TCwgMHgwMDAwMDAwMEwsIDB4MDA0MDAwMDhMLCAweDEwNDAxMDAwTCwKKzB4MTAwMDEwMDBMLCAweDEwNDAwMDA4TCwgMHgxMDQwMTAwOEwsIDB4MDA0MDAwMDBMLAorMHgxMDQwMDAwOEwsIDB4MDAwMDEwMDhMLCAweDAwNDAwMDAwTCwgMHgxMDAwMDAwOEwsCisweDAwNDAxMDAwTCwgMHgxMDAwMTAwMEwsIDB4MDAwMDAwMDhMLCAweDEwNDAwMDAwTCwKKzB4MTAwMDEwMDhMLCAweDAwMDAwMDAwTCwgMHgwMDAwMTAwMEwsIDB4MDA0MDAwMDhMLAorMHgwMDAwMDAwMEwsIDB4MTA0MDAwMDhMLCAweDEwNDAxMDAwTCwgMHgwMDAwMTAwMEwsCisweDEwMDAwMDAwTCwgMHgxMDQwMTAwOEwsIDB4MDA0MDEwMDhMLCAweDAwNDAwMDAwTCwKKzB4MTA0MDEwMDhMLCAweDAwMDAwMDA4TCwgMHgxMDAwMTAwMEwsIDB4MDA0MDEwMDhMLAorMHgwMDQwMDAwOEwsIDB4MDA0MDEwMDBMLCAweDEwNDAwMDAwTCwgMHgxMDAwMTAwOEwsCisweDAwMDAxMDA4TCwgMHgxMDAwMDAwMEwsIDB4MTAwMDAwMDhMLCAweDEwNDAxMDAwTCwKK30seworLyogbmliYmxlIDQgKi8KKzB4MDgwMDAwMDBMLCAweDAwMDEwMDAwTCwgMHgwMDAwMDQwMEwsIDB4MDgwMTA0MjBMLAorMHgwODAxMDAyMEwsIDB4MDgwMDA0MDBMLCAweDAwMDEwNDIwTCwgMHgwODAxMDAwMEwsCisweDAwMDEwMDAwTCwgMHgwMDAwMDAyMEwsIDB4MDgwMDAwMjBMLCAweDAwMDEwNDAwTCwKKzB4MDgwMDA0MjBMLCAweDA4MDEwMDIwTCwgMHgwODAxMDQwMEwsIDB4MDAwMDAwMDBMLAorMHgwMDAxMDQwMEwsIDB4MDgwMDAwMDBMLCAweDAwMDEwMDIwTCwgMHgwMDAwMDQyMEwsCisweDA4MDAwNDAwTCwgMHgwMDAxMDQyMEwsIDB4MDAwMDAwMDBMLCAweDA4MDAwMDIwTCwKKzB4MDAwMDAwMjBMLCAweDA4MDAwNDIwTCwgMHgwODAxMDQyMEwsIDB4MDAwMTAwMjBMLAorMHgwODAxMDAwMEwsIDB4MDAwMDA0MDBMLCAweDAwMDAwNDIwTCwgMHgwODAxMDQwMEwsCisweDA4MDEwNDAwTCwgMHgwODAwMDQyMEwsIDB4MDAwMTAwMjBMLCAweDA4MDEwMDAwTCwKKzB4MDAwMTAwMDBMLCAweDAwMDAwMDIwTCwgMHgwODAwMDAyMEwsIDB4MDgwMDA0MDBMLAorMHgwODAwMDAwMEwsIDB4MDAwMTA0MDBMLCAweDA4MDEwNDIwTCwgMHgwMDAwMDAwMEwsCisweDAwMDEwNDIwTCwgMHgwODAwMDAwMEwsIDB4MDAwMDA0MDBMLCAweDAwMDEwMDIwTCwKKzB4MDgwMDA0MjBMLCAweDAwMDAwNDAwTCwgMHgwMDAwMDAwMEwsIDB4MDgwMTA0MjBMLAorMHgwODAxMDAyMEwsIDB4MDgwMTA0MDBMLCAweDAwMDAwNDIwTCwgMHgwMDAxMDAwMEwsCisweDAwMDEwNDAwTCwgMHgwODAxMDAyMEwsIDB4MDgwMDA0MDBMLCAweDAwMDAwNDIwTCwKKzB4MDAwMDAwMjBMLCAweDAwMDEwNDIwTCwgMHgwODAxMDAwMEwsIDB4MDgwMDAwMjBMLAorfSx7CisvKiBuaWJibGUgNSAqLworMHg4MDAwMDA0MEwsIDB4MDAyMDAwNDBMLCAweDAwMDAwMDAwTCwgMHg4MDIwMjAwMEwsCisweDAwMjAwMDQwTCwgMHgwMDAwMjAwMEwsIDB4ODAwMDIwNDBMLCAweDAwMjAwMDAwTCwKKzB4MDAwMDIwNDBMLCAweDgwMjAyMDQwTCwgMHgwMDIwMjAwMEwsIDB4ODAwMDAwMDBMLAorMHg4MDAwMjAwMEwsIDB4ODAwMDAwNDBMLCAweDgwMjAwMDAwTCwgMHgwMDIwMjA0MEwsCisweDAwMjAwMDAwTCwgMHg4MDAwMjA0MEwsIDB4ODAyMDAwNDBMLCAweDAwMDAwMDAwTCwKKzB4MDAwMDIwMDBMLCAweDAwMDAwMDQwTCwgMHg4MDIwMjAwMEwsIDB4ODAyMDAwNDBMLAorMHg4MDIwMjA0MEwsIDB4ODAyMDAwMDBMLCAweDgwMDAwMDAwTCwgMHgwMDAwMjA0MEwsCisweDAwMDAwMDQwTCwgMHgwMDIwMjAwMEwsIDB4MDAyMDIwNDBMLCAweDgwMDAyMDAwTCwKKzB4MDAwMDIwNDBMLCAweDgwMDAwMDAwTCwgMHg4MDAwMjAwMEwsIDB4MDAyMDIwNDBMLAorMHg4MDIwMjAwMEwsIDB4MDAyMDAwNDBMLCAweDAwMDAwMDAwTCwgMHg4MDAwMjAwMEwsCisweDgwMDAwMDAwTCwgMHgwMDAwMjAwMEwsIDB4ODAyMDAwNDBMLCAweDAwMjAwMDAwTCwKKzB4MDAyMDAwNDBMLCAweDgwMjAyMDQwTCwgMHgwMDIwMjAwMEwsIDB4MDAwMDAwNDBMLAorMHg4MDIwMjA0MEwsIDB4MDAyMDIwMDBMLCAweDAwMjAwMDAwTCwgMHg4MDAwMjA0MEwsCisweDgwMDAwMDQwTCwgMHg4MDIwMDAwMEwsIDB4MDAyMDIwNDBMLCAweDAwMDAwMDAwTCwKKzB4MDAwMDIwMDBMLCAweDgwMDAwMDQwTCwgMHg4MDAwMjA0MEwsIDB4ODAyMDIwMDBMLAorMHg4MDIwMDAwMEwsIDB4MDAwMDIwNDBMLCAweDAwMDAwMDQwTCwgMHg4MDIwMDA0MEwsCit9LHsKKy8qIG5pYmJsZSA2ICovCisweDAwMDA0MDAwTCwgMHgwMDAwMDIwMEwsIDB4MDEwMDAyMDBMLCAweDAxMDAwMDA0TCwKKzB4MDEwMDQyMDRMLCAweDAwMDA0MDA0TCwgMHgwMDAwNDIwMEwsIDB4MDAwMDAwMDBMLAorMHgwMTAwMDAwMEwsIDB4MDEwMDAyMDRMLCAweDAwMDAwMjA0TCwgMHgwMTAwNDAwMEwsCisweDAwMDAwMDA0TCwgMHgwMTAwNDIwMEwsIDB4MDEwMDQwMDBMLCAweDAwMDAwMjA0TCwKKzB4MDEwMDAyMDRMLCAweDAwMDA0MDAwTCwgMHgwMDAwNDAwNEwsIDB4MDEwMDQyMDRMLAorMHgwMDAwMDAwMEwsIDB4MDEwMDAyMDBMLCAweDAxMDAwMDA0TCwgMHgwMDAwNDIwMEwsCisweDAxMDA0MDA0TCwgMHgwMDAwNDIwNEwsIDB4MDEwMDQyMDBMLCAweDAwMDAwMDA0TCwKKzB4MDAwMDQyMDRMLCAweDAxMDA0MDA0TCwgMHgwMDAwMDIwMEwsIDB4MDEwMDAwMDBMLAorMHgwMDAwNDIwNEwsIDB4MDEwMDQwMDBMLCAweDAxMDA0MDA0TCwgMHgwMDAwMDIwNEwsCisweDAwMDA0MDAwTCwgMHgwMDAwMDIwMEwsIDB4MDEwMDAwMDBMLCAweDAxMDA0MDA0TCwKKzB4MDEwMDAyMDRMLCAweDAwMDA0MjA0TCwgMHgwMDAwNDIwMEwsIDB4MDAwMDAwMDBMLAorMHgwMDAwMDIwMEwsIDB4MDEwMDAwMDRMLCAweDAwMDAwMDA0TCwgMHgwMTAwMDIwMEwsCisweDAwMDAwMDAwTCwgMHgwMTAwMDIwNEwsIDB4MDEwMDAyMDBMLCAweDAwMDA0MjAwTCwKKzB4MDAwMDAyMDRMLCAweDAwMDA0MDAwTCwgMHgwMTAwNDIwNEwsIDB4MDEwMDAwMDBMLAorMHgwMTAwNDIwMEwsIDB4MDAwMDAwMDRMLCAweDAwMDA0MDA0TCwgMHgwMTAwNDIwNEwsCisweDAxMDAwMDA0TCwgMHgwMTAwNDIwMEwsIDB4MDEwMDQwMDBMLCAweDAwMDA0MDA0TCwKK30seworLyogbmliYmxlIDcgKi8KKzB4MjA4MDAwODBMLCAweDIwODIwMDAwTCwgMHgwMDAyMDA4MEwsIDB4MDAwMDAwMDBMLAorMHgyMDAyMDAwMEwsIDB4MDA4MDAwODBMLCAweDIwODAwMDAwTCwgMHgyMDgyMDA4MEwsCisweDAwMDAwMDgwTCwgMHgyMDAwMDAwMEwsIDB4MDA4MjAwMDBMLCAweDAwMDIwMDgwTCwKKzB4MDA4MjAwODBMLCAweDIwMDIwMDgwTCwgMHgyMDAwMDA4MEwsIDB4MjA4MDAwMDBMLAorMHgwMDAyMDAwMEwsIDB4MDA4MjAwODBMLCAweDAwODAwMDgwTCwgMHgyMDAyMDAwMEwsCisweDIwODIwMDgwTCwgMHgyMDAwMDA4MEwsIDB4MDAwMDAwMDBMLCAweDAwODIwMDAwTCwKKzB4MjAwMDAwMDBMLCAweDAwODAwMDAwTCwgMHgyMDAyMDA4MEwsIDB4MjA4MDAwODBMLAorMHgwMDgwMDAwMEwsIDB4MDAwMjAwMDBMLCAweDIwODIwMDAwTCwgMHgwMDAwMDA4MEwsCisweDAwODAwMDAwTCwgMHgwMDAyMDAwMEwsIDB4MjAwMDAwODBMLCAweDIwODIwMDgwTCwKKzB4MDAwMjAwODBMLCAweDIwMDAwMDAwTCwgMHgwMDAwMDAwMEwsIDB4MDA4MjAwMDBMLAorMHgyMDgwMDA4MEwsIDB4MjAwMjAwODBMLCAweDIwMDIwMDAwTCwgMHgwMDgwMDA4MEwsCisweDIwODIwMDAwTCwgMHgwMDAwMDA4MEwsIDB4MDA4MDAwODBMLCAweDIwMDIwMDAwTCwKKzB4MjA4MjAwODBMLCAweDAwODAwMDAwTCwgMHgyMDgwMDAwMEwsIDB4MjAwMDAwODBMLAorMHgwMDgyMDAwMEwsIDB4MDAwMjAwODBMLCAweDIwMDIwMDgwTCwgMHgyMDgwMDAwMEwsCisweDAwMDAwMDgwTCwgMHgyMDgyMDAwMEwsIDB4MDA4MjAwODBMLCAweDAwMDAwMDAwTCwKKzB4MjAwMDAwMDBMLCAweDIwODAwMDgwTCwgMHgwMDAyMDAwMEwsIDB4MDA4MjAwODBMLAorfX07CmRpZmYgLS1naXQgYS9zbm1wbGliL3BhcnNlLmMgYi9zbm1wbGliL3BhcnNlLmMKaW5kZXggNjc4MTliZi4uNGQ0NGQ4OCAxMDA2NDQKLS0tIGEvc25tcGxpYi9wYXJzZS5jCisrKyBiL3NubXBsaWIvcGFyc2UuYwpAQCAtMzMsNiArMzMsNyBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCiAKQEAgLTc0LDExICs3NSw3IEBACiAjIGVuZGlmCiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTg3LDkgKzg0LDYgQEAKICMgIGluY2x1ZGUgPHRpbWUuaD4KICMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTExMyw2ICsxMDcsMzcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3BhcnNlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9taWIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZmluZF9tb2R1bGUsIG1pYl9hcGkpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZ2V0X3RjX2Rlc2NyaXB0aW9uLCBtaWJfYXBpKQorCisvKgorICogQSBsaW5rZWQgbGlzdCBvZiBub2Rlcy4KKyAqLworc3RydWN0IG5vZGUgeworICAgIHN0cnVjdCBub2RlICAgICpuZXh0OworICAgIGNoYXIgICAgICAgICAgICpsYWJlbDsgIC8qIFRoaXMgbm9kZSdzICh1bmlxdWUpIHRleHR1YWwgbmFtZSAqLworICAgIHVfbG9uZyAgICAgICAgICBzdWJpZDsgIC8qIFRoaXMgbm9kZSdzIGludGVnZXIgc3ViaWRlbnRpZmllciAqLworICAgIGludCAgICAgICAgICAgICBtb2RpZDsgIC8qIFRoZSBtb2R1bGUgY29udGFpbmluZyB0aGlzIG5vZGUgKi8KKyAgICBjaGFyICAgICAgICAgICAqcGFyZW50OyAvKiBUaGUgcGFyZW50J3MgdGV4dHVhbCBuYW1lICovCisgICAgaW50ICAgICAgICAgICAgIHRjX2luZGV4OyAvKiBpbmRleCBpbnRvIHRjbGlzdCAoLTEgaWYgTkEpICovCisgICAgaW50ICAgICAgICAgICAgIHR5cGU7ICAgLyogVGhlIHR5cGUgb2Ygb2JqZWN0IHRoaXMgcmVwcmVzZW50cyAqLworICAgIGludCAgICAgICAgICAgICBhY2Nlc3M7CisgICAgaW50ICAgICAgICAgICAgIHN0YXR1czsKKyAgICBzdHJ1Y3QgZW51bV9saXN0ICplbnVtczsgLyogKG9wdGlvbmFsKSBsaXN0IG9mIGVudW1lcmF0ZWQgaW50ZWdlcnMgKi8KKyAgICBzdHJ1Y3QgcmFuZ2VfbGlzdCAqcmFuZ2VzOworICAgIHN0cnVjdCBpbmRleF9saXN0ICppbmRleGVzOworICAgIGNoYXIgICAgICAgICAgICphdWdtZW50czsKKyAgICBzdHJ1Y3QgdmFyYmluZF9saXN0ICp2YXJiaW5kczsKKyAgICBjaGFyICAgICAgICAgICAqaGludDsKKyAgICBjaGFyICAgICAgICAgICAqdW5pdHM7CisgICAgY2hhciAgICAgICAgICAgKmRlc2NyaXB0aW9uOyAvKiBkZXNjcmlwdGlvbiAoYSBxdW90ZWQgc3RyaW5nKSAqLworICAgIGNoYXIgICAgICAgICAgICpyZWZlcmVuY2U7IC8qIHJlZmVyZW5jZXMgKGEgcXVvdGVkIHN0cmluZykgKi8KKyAgICBjaGFyICAgICAgICAgICAqZGVmYXVsdFZhbHVlOworICAgIGNoYXIgICAgICAgICAgICpmaWxlbmFtZTsKKyAgICBpbnQgICAgICAgICAgICAgbGluZW5vOworfTsKIAogLyoKICAqIFRoaXMgaXMgb25lIGVsZW1lbnQgb2YgYW4gb2JqZWN0IGlkZW50aWZpZXIgd2l0aCBlaXRoZXIgYW4gaW50ZWdlcgpAQCAtNTA5LDcgKzUzNCwxMSBAQAogICogI2RlZmluZSBNT0RVTEVfTE9BRF9GQUlMRUQgICAzICAgICAgIAogICovCiAjZGVmaW5lIE1PRFVMRV9MT0FEX0ZBSUxFRAlNT0RVTEVfTk9UX0ZPVU5ECisjZGVmaW5lIE1PRFVMRV9TWU5UQVhfRVJST1IgICAgIDQKIAoraW50IGdNaWJFcnJvciA9IDAsZ0xvb3AgPSAwOworY2hhciAqZ3BNaWJFcnJvclN0cmluZyA9IE5VTEw7CitjaGFyIGdNaWJOYW1lc1tTVFJJTkdNQVhdOwogCiAjZGVmaW5lIEhBU0hTSVpFICAgICAgICAzMgogI2RlZmluZSBCVUNLRVQoeCkgICAgICAgKHggJiAoSEFTSFNJWkUtMSkpCkBAIC01MjMsOCArNTUyLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgdHJlZSAqdGJ1Y2tldHNbTkhBU0hTSVpFXTsKIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICptb2R1bGVfaGVhZCA9IE5VTEw7CiAKLXN0cnVjdCBub2RlICAgICpvcnBoYW5fbm9kZXMgPSBOVUxMOwotc3RydWN0IHRyZWUgICAgKnRyZWVfaGVhZCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IG5vZGUgKm9ycGhhbl9ub2RlcyA9IE5VTEw7CitORVRTTk1QX0lNUE9SVCBzdHJ1Y3QgdHJlZSAqdHJlZV9oZWFkOworc3RydWN0IHRyZWUgICAgICAgICp0cmVlX2hlYWQgPSBOVUxMOwogCiAjZGVmaW5lCU5VTUJFUl9PRl9ST09UX05PREVTCTMKIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlX2ltcG9ydCByb290X2ltcG9ydHNbTlVNQkVSX09GX1JPT1RfTk9ERVNdOwpAQCAtNTMyLDcgKzU2Miw3IEBACiBzdGF0aWMgaW50ICAgICAgY3VycmVudF9tb2R1bGUgPSAwOwogc3RhdGljIGludCAgICAgIG1heF9tb2R1bGUgPSAwOwogc3RhdGljIGludCAgICAgIGZpcnN0X2Vycl9tb2R1bGUgPSAxOwotc3RhdGljIGNoYXIgICAgKmxhc3RfZXJyX21vZHVsZSA9IDA7ICAgIC8qIG5vIHJlcGVhdHMgb24gIkNhbm5vdCBmaW5kIG1vZHVsZS4uLiIgKi8KK3N0YXRpYyBjaGFyICAgICpsYXN0X2Vycl9tb2R1bGUgPSBOVUxMOyAvKiBubyByZXBlYXRzIG9uICJDYW5ub3QgZmluZCBtb2R1bGUuLi4iICovCiAKIHN0YXRpYyB2b2lkICAgICB0cmVlX2Zyb21fbm9kZShzdHJ1Y3QgdHJlZSAqdHAsIHN0cnVjdCBub2RlICpucCk7CiBzdGF0aWMgdm9pZCAgICAgZG9fc3VidHJlZShzdHJ1Y3QgdHJlZSAqLCBzdHJ1Y3Qgbm9kZSAqKik7CkBAIC02ODEsNyArNzExLDcgQEAKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiAwOwogICAgIGZvciAoY3AgPSBuYW1lOyAqY3A7IGNwKyspCi0gICAgICAgIGhhc2ggKz0gdG9sb3dlcigqY3ApOworICAgICAgICBoYXNoICs9IHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKCpjcCkpOwogICAgIHJldHVybiAoaGFzaCk7CiB9CiAKQEAgLTcyNyw3ICs3NTcsNyBAQAogICAgICAqLwogfQogCi0jaWZuZGVmIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCiB2b2lkCiBpbml0X21pYl9pbnRlcm5hbHModm9pZCkKIHsKQEAgLTc1MywxMSArNzgzLDE0IEBACiAKIHN0YXRpYyBpbnQgICAgICBlcnJvbmVvdXNNaWJzID0gMDsKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHBhcnNlX2dldF9lcnJvcl9jb3VudCwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfR0VUX0VSUk9SX0NPVU5UCiBpbnQKIGdldF9taWJfcGFyc2VfZXJyb3JfY291bnQodm9pZCkKIHsKICAgICByZXR1cm4gZXJyb25lb3VzTWliczsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX0dFVF9FUlJPUl9DT1VOVCAqLwogCiAKIHN0YXRpYyB2b2lkCkBAIC04ODUsOSArOTE4LDkgQEAKIAogICAgIHVubGlua190YnVja2V0KFRyZWUpOwogICAgIGZyZWVfcGFydGlhbF90cmVlKFRyZWUsIEZBTFNFKTsKLSAgICBpZiAoVHJlZS0+bnVtYmVyX21vZHVsZXMgPiAxKQotICAgICAgICBmcmVlKChjaGFyICopIFRyZWUtPm1vZHVsZV9saXN0KTsKLSAgICBmcmVlKChjaGFyICopIFRyZWUpOworICAgIGlmIChUcmVlLT5tb2R1bGVfbGlzdCAhPSAmVHJlZS0+bW9kaWQpCisgICAgICAgIGZyZWUoVHJlZS0+bW9kdWxlX2xpc3QpOworICAgIGZyZWUoVHJlZSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05NTEsMTAgKzk4NCw4IEBACiBzdGF0aWMgdm9pZAogcHJpbnRfbm9kZXMoRklMRSAqIGZwLCBzdHJ1Y3Qgbm9kZSAqcm9vdCkKIHsKLSAgICBleHRlcm4gdm9pZCAgICAgeG1hbGxvY19zdGF0cyhGSUxFICopOwogICAgIHN0cnVjdCBlbnVtX2xpc3QgKmVwOwogICAgIHN0cnVjdCBpbmRleF9saXN0ICppcDsKLSAgICBzdHJ1Y3QgcmFuZ2VfbGlzdCAqcnA7CiAgICAgc3RydWN0IHZhcmJpbmRfbGlzdCAqdnA7CiAgICAgc3RydWN0IG5vZGUgICAgKm5wOwogCkBAIC05NzAsNiArMTAwMSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5wLT5yYW5nZXMpIHsKKyAgICAgICAgICAgIHN0cnVjdCByYW5nZV9saXN0ICpycDsKICAgICAgICAgICAgIGZwcmludGYoZnAsICIgIFJhbmdlczogIik7CiAgICAgICAgICAgICBmb3IgKHJwID0gbnAtPnJhbmdlczsgcnA7IHJwID0gcnAtPm5leHQpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiXG4gICAgIik7CkBAIC0xMDU2LDcgKzEwODgsNyBAQAogc3RhdGljIGludCAgICAgIHRyYW5zbGF0aW9uX3RhYmxlWzI1Nl07CiAKIHN0YXRpYyB2b2lkCi1idWlsZF90cmFuc2xhdGlvbl90YWJsZSgpCitidWlsZF90cmFuc2xhdGlvbl90YWJsZSh2b2lkKQogewogICAgIGludCAgICAgICAgICAgICBjb3VudDsKIApAQCAtMTE0Miw3ICsxMTc0LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWluaXRfdHJlZV9yb290cygpCitpbml0X3RyZWVfcm9vdHModm9pZCkKIHsKICAgICBzdHJ1Y3QgdHJlZSAgICAqdHAsICpsYXN0dHA7CiAgICAgaW50ICAgICAgICAgICAgIGJhc2VfbW9kaWQ7CkBAIC0xNTM5LDE1ICsxNTcxLDE0IEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBVcGRhdGUgbGlzdCBvZiBtb2R1bGVzIAogICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGludF9wID0KLSAgICAgICAgICAgICAgICAgICAgKGludCAqKSBtYWxsb2MoKHRwLT5udW1iZXJfbW9kdWxlcyArIDEpICogc2l6ZW9mKGludCkpOworICAgICAgICAgICAgICAgIGludF9wID0gbWFsbG9jKCh0cC0+bnVtYmVyX21vZHVsZXMgKyAxKSAqIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgICAgICBpZiAoaW50X3AgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIG1lbWNweShpbnRfcCwgdHAtPm1vZHVsZV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICB0cC0+bnVtYmVyX21vZHVsZXMgKiBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICAgICAgaW50X3BbdHAtPm51bWJlcl9tb2R1bGVzXSA9IG5wLT5tb2RpZDsKLSAgICAgICAgICAgICAgICBpZiAodHAtPm51bWJlcl9tb2R1bGVzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgZnJlZSgoY2hhciAqKSB0cC0+bW9kdWxlX2xpc3QpOworICAgICAgICAgICAgICAgIGlmICh0cC0+bW9kdWxlX2xpc3QgIT0gJnRwLT5tb2RpZCkKKyAgICAgICAgICAgICAgICAgICAgZnJlZSh0cC0+bW9kdWxlX2xpc3QpOwogICAgICAgICAgICAgICAgICsrdHAtPm51bWJlcl9tb2R1bGVzOwogICAgICAgICAgICAgICAgIHRwLT5tb2R1bGVfbGlzdCA9IGludF9wOwogCkBAIC0yMTIwLDYgKzIxNTEsOCBAQAogICAgIHJldHVybiAodGNsaXN0W3RjX2luZGV4XS5kZXNjcmlwdG9yKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9UQ19ERVNDUklQVElPTgorLyogdXNlZCBpbiB0aGUgcGVybCBtb2R1bGUgKi8KIGNvbnN0IGNoYXIgICAgICoKIGdldF90Y19kZXNjcmlwdGlvbihpbnQgdGNfaW5kZXgpCiB7CkBAIC0yMTI3LDYgKzIxNjAsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gKHRjbGlzdFt0Y19pbmRleF0uZGVzY3JpcHRpb24pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX1RDX0RFU0NSSVBUSU9OICovCiAKIAogLyoKQEAgLTI5NTUsNiArMjk4OSwxNSBAQAogICAgICAgICBmcmVlX25vZGUobnApOwogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgIH0KKworICAgIC8qIENhdGNoIHRoZSBzeW50YXggZXJyb3IgKi8KKyAgICBpZiAobnAtPnBhcmVudCA9PSBOVUxMKSB7CisgICAgICAgIGZyZWVfbm9kZShucC0+bmV4dCk7CisgICAgICAgIGZyZWVfbm9kZShucCk7CisgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CisgICAgICAgIHJldHVybiAoTlVMTCk7CisgICAgfQorCiAgICAgbnAtPm5leHQtPnBhcmVudCA9IG5wLT5wYXJlbnQ7CiAgICAgbnAtPnBhcmVudCA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4obnAtPnBhcmVudCkgKyAyKTsKICAgICBpZiAobnAtPnBhcmVudCA9PSBOVUxMKSB7CkBAIC0yOTY1LDcgKzMwMDgsNiBAQAogICAgIHN0cmNweShucC0+cGFyZW50LCBucC0+bmV4dC0+cGFyZW50KTsKICAgICBzdHJjYXQobnAtPnBhcmVudCwgIiMiKTsKICAgICBucC0+bmV4dC0+bGFiZWwgPSBzdHJkdXAobnAtPnBhcmVudCk7Ci0gICAgbnAtPnR5cGUgPSBUUkFQVFlQRTsKICAgICByZXR1cm4gbnA7CiB9CiAKQEAgLTM3MzUsNiArMzc3Nyw4IEBACiAgKiAgICAgIG9yIHRob3NlIHJlbGF0aW5nIHRvIGEgc3BlY2lmaWVkIGlkZW50aWZpZXIgKHJlYWRfaW1wb3J0X3JlcGxhY2VtZW50cykKICAqICAgICAgcGx1cyBhbiBpbnRlcmZhY2UgdG8gYWRkIG5ldyByZXBsYWNlbWVudCByZXF1aXJlbWVudHMKICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHBhcnNlX2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX0FERF9NT0RVTEVfUkVQTEFDRU1FTlQKIHZvaWQKIGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQoY29uc3QgY2hhciAqb2xkX21vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmV3X21vZHVsZV9uYW1lLApAQCAtMzc1Niw2ICszODAwLDcgQEAKICAgICBtY3AtPm5leHQgPSBtb2R1bGVfbWFwX2hlYWQ7CiAgICAgbW9kdWxlX21hcF9oZWFkID0gbWNwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfQUREX01PRFVMRV9SRVBMQUNFTUVOVCAqLwogCiBzdGF0aWMgaW50CiByZWFkX21vZHVsZV9yZXBsYWNlbWVudHMoY29uc3QgY2hhciAqbmFtZSkKQEAgLTM4MzEsNiArMzg3Niw3IEBACiB7CiAgICAgc3RydWN0IG1vZHVsZSAgKm1wOwogICAgIEZJTEUgICAgICAgICAgICpmcDsKKyAgICBzdHJ1Y3Qgbm9kZSAgICAqbnA7CiAKICAgICBuZXRzbm1wX2luaXRfbWliX2ludGVybmFscygpOwogCkBAIC0zODQ2LDkgKzM4OTIsMTcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTU9EVUxFX0FMUkVBRFlfTE9BREVEOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKChmcCA9IGZvcGVuKG1wLT5maWxlLCAiciIpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaW50IHJ2YWw7CisgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT1RESVIgfHwgZXJybm8gPT0gRU5PRU5UKQorICAgICAgICAgICAgICAgICAgICBydmFsID0gTU9EVUxFX05PVF9GT1VORDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJ2YWwgPSBNT0RVTEVfTE9BRF9GQUlMRUQ7CiAgICAgICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKG1wLT5maWxlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTU9EVUxFX0xPQURfRkFJTEVEOworICAgICAgICAgICAgICAgIHJldHVybiBydmFsOwogICAgICAgICAgICAgfQorI2lmZGVmIEhBVkVfRkxPQ0tGSUxFCisgICAgICAgICAgICBmbG9ja2ZpbGUoZnApOworI2VuZGlmCiAgICAgICAgICAgICBtcC0+bm9faW1wb3J0cyA9IDA7IC8qIE5vdGUgdGhhdCB3ZSd2ZSByZWFkIHRoZSBmaWxlICovCiAgICAgICAgICAgICBGaWxlID0gbXAtPmZpbGU7CiAgICAgICAgICAgICBtaWJMaW5lID0gMTsKQEAgLTM4NTYsMTEgKzM5MTAsMTYgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBQYXJzZSB0aGUgZmlsZQogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwYXJzZShmcCwgTlVMTCk7CisgICAgICAgICAgICBucCA9IHBhcnNlKGZwLCBOVUxMKTsKKyNpZmRlZiBIQVZFX0ZVTkxPQ0tGSUxFCisgICAgICAgICAgICBmdW5sb2NrZmlsZShmcCk7CisjZW5kaWYKICAgICAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgICAgICAgICBGaWxlID0gb2xkRmlsZTsKICAgICAgICAgICAgIG1pYkxpbmUgPSBvbGRMaW5lOwogICAgICAgICAgICAgY3VycmVudF9tb2R1bGUgPSBvbGRNb2R1bGU7CisgICAgICAgICAgICBpZiAoKG5wID09IE5VTEwpICYmIChnTWliRXJyb3IgPT0gTU9EVUxFX1NZTlRBWF9FUlJPUikgKQorICAgICAgICAgICAgICAgIHJldHVybiBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgcmV0dXJuIE1PRFVMRV9MT0FERURfT0s7CiAgICAgICAgIH0KIApAQCAtMzkzOCw3ICszOTk3LDcgQEAKICAgICAgICAgfQogfQogCi0jaWZuZGVmIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCiBzdHJ1Y3QgdHJlZSAgICAqCiByZWFkX21vZHVsZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMzk0OSw5ICs0MDA4LDIwIEBACiBzdHJ1Y3QgdHJlZSAgICAqCiBuZXRzbm1wX3JlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgaWYgKHJlYWRfbW9kdWxlX2ludGVybmFsKG5hbWUpID09IE1PRFVMRV9OT1RfRk9VTkQpCisgICAgaW50IHN0YXR1cyA9IDA7CisgICAgc3RhdHVzID0gcmVhZF9tb2R1bGVfaW50ZXJuYWwobmFtZSk7CisKKyAgICBpZiAoc3RhdHVzID09IE1PRFVMRV9OT1RfRk9VTkQpIHsKICAgICAgICAgaWYgKCFyZWFkX21vZHVsZV9yZXBsYWNlbWVudHMobmFtZSkpCi0JICAgIHByaW50X21vZHVsZV9ub3RfZm91bmQobmFtZSk7CisgICAgICAgICAgICBwcmludF9tb2R1bGVfbm90X2ZvdW5kKG5hbWUpOworICAgIH0gZWxzZSBpZiAoc3RhdHVzID09IE1PRFVMRV9TWU5UQVhfRVJST1IpIHsKKyAgICAgICAgZ01pYkVycm9yID0gMDsKKyAgICAgICAgZ0xvb3AgPSAxOworCisgICAgICAgIHN0cm5jYXQoZ01pYk5hbWVzLCAiICIsIHNpemVvZihnTWliTmFtZXMpIC0gc3RybGVuKGdNaWJOYW1lcykgLSAxKTsKKyAgICAgICAgc3RybmNhdChnTWliTmFtZXMsIG5hbWUsIHNpemVvZihnTWliTmFtZXMpIC0gc3RybGVuKGdNaWJOYW1lcykgLSAxKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJlZV9oZWFkOwogfQogCkBAIC00MDM5LDcgKzQxMDksNyBAQAogICAgIH0KIH0KIAotI2lmbmRlZiBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQorI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUwogaW50CiB1bmxvYWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC00MDczLDEyICs0MTQzLDEyIEBACiAgKiBDbGVhciBtb2R1bGUgbWFwLCB0cmVlIG5vZGVzLCB0ZXh0dWFsIGNvbnZlbnRpb24gdGFibGUuCiAgKi8KIHZvaWQKLXVubG9hZF9hbGxfbWlicygpCit1bmxvYWRfYWxsX21pYnModm9pZCkKIHsKICAgICBzdHJ1Y3QgbW9kdWxlICAqbXA7CiAgICAgc3RydWN0IG1vZHVsZV9jb21wYXRhYmlsaXR5ICptY3A7CiAgICAgc3RydWN0IHRjICAgICAgKnB0YzsKLSAgICBpbnQgICAgICAgICAgICAgaTsKKyAgICB1bnNpZ25lZCBpbnQgICAgaTsKIAogICAgIGZvciAobWNwID0gbW9kdWxlX21hcF9oZWFkOyBtY3A7IG1jcCA9IG1vZHVsZV9tYXBfaGVhZCkgewogICAgICAgICBpZiAobWNwID09IG1vZHVsZV9tYXApCkBAIC00MDkzLDcgKzQxNjMsNyBAQAogICAgIGZvciAobXAgPSBtb2R1bGVfaGVhZDsgbXA7IG1wID0gbW9kdWxlX2hlYWQpIHsKICAgICAgICAgc3RydWN0IG1vZHVsZV9pbXBvcnQgKm1pID0gbXAtPmltcG9ydHM7CiAgICAgICAgIGlmIChtaSkgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1wLT5ub19pbXBvcnRzOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAodW5zaWduZWQgaW50KW1wLT5ub19pbXBvcnRzOyArK2kpIHsKICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUoKG1pICsgaSktPmxhYmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1wLT5ub19pbXBvcnRzID0gMDsKQEAgLTQxOTIsNyArNDI2Miw3IEBACiAKIAogc3RhdGljIHZvaWQKLXNjYW5fb2JqbGlzdChzdHJ1Y3Qgbm9kZSAqcm9vdCwgc3RydWN0IG9iamdyb3VwICpsaXN0LCBjb25zdCBjaGFyICplcnJvcikKK3NjYW5fb2JqbGlzdChzdHJ1Y3Qgbm9kZSAqcm9vdCwgc3RydWN0IG1vZHVsZSAqbXAsIHN0cnVjdCBvYmpncm91cCAqbGlzdCwgY29uc3QgY2hhciAqZXJyb3IpCiB7CiAgICAgaW50ICAgICAgICAgICAgIG9MaW5lID0gbWliTGluZTsKIApAQCAtNDIwNyw4ICs0Mjc3LDE2IEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmICghbnApIHsKLSAgICAgICAgICAgIG1pYkxpbmUgPSBncC0+bGluZTsKLSAgICAgICAgICAgIHByaW50X2Vycm9yKGVycm9yLCBncC0+bmFtZSwgUVVPVEVTVFJJTkcpOworCSAgICBpbnQgaTsKKwkgICAgc3RydWN0IG1vZHVsZV9pbXBvcnQgKm1pcDsKKwkgICAgLyogaWYgbm90IGxvY2FsLCBjaGVjayBpZiBpdCB3YXMgSU1QT1JUZWQgKi8KKwkgICAgZm9yIChpID0gMCwgbWlwID0gbXAtPmltcG9ydHM7IGkgPCBtcC0+bm9faW1wb3J0czsgaSsrLCBtaXArKykKKwkJaWYgKHN0cmNtcChtaXAtPmxhYmVsLCBncC0+bmFtZSkgPT0gMCkKKwkJICAgIGJyZWFrOworCSAgICBpZiAoaSA9PSBtcC0+bm9faW1wb3J0cykgeworCQltaWJMaW5lID0gZ3AtPmxpbmU7CisJCXByaW50X2Vycm9yKGVycm9yLCBncC0+bmFtZSwgUVVPVEVTVFJJTkcpOworCSAgICB9CiAgICAgICAgIH0KICAgICAgICAgZnJlZShncC0+bmFtZSk7CiAgICAgICAgIGZyZWUoZ3ApOwpAQCAtNDIyMyw2ICs0MzAxLDkgQEAKIHN0YXRpYyBzdHJ1Y3Qgbm9kZSAqCiBwYXJzZShGSUxFICogZnAsIHN0cnVjdCBub2RlICpyb290KQogeworI2lmZGVmIFRFU1QKKyAgICBleHRlcm4gdm9pZCAgICAgeG1hbGxvY19zdGF0cyhGSUxFICopOworI2VuZGlmCiAgICAgY2hhciAgICAgICAgICAgIHRva2VuW01BWFRPS0VOXTsKICAgICBjaGFyICAgICAgICAgICAgbmFtZVtNQVhUT0tFTisxXTsKICAgICBpbnQgICAgICAgICAgICAgdHlwZSA9IExBQkVMOwpAQCAtNDIzOSw3ICs0MzIwLDcgQEAKIAogICAgIGlmIChsYXN0X2Vycl9tb2R1bGUpCiAgICAgICAgIGZyZWUobGFzdF9lcnJfbW9kdWxlKTsKLSAgICBsYXN0X2Vycl9tb2R1bGUgPSAwOworICAgIGxhc3RfZXJyX21vZHVsZSA9IE5VTEw7CiAKICAgICBucCA9IHJvb3Q7CiAgICAgaWYgKG5wICE9IE5VTEwpIHsKQEAgLTQyNjAsNiArNDM0MSw3IEBACiAgICAgICAgIGNhc2UgRU5EOgogICAgICAgICAgICAgaWYgKHN0YXRlICE9IElOX01JQikgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJFcnJvciwgRU5EIGJlZm9yZSBzdGFydCBvZiBNSUIiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW9kdWxlICAqbXA7CkBAIC00MjY3LDE1ICs0MzQ5LDE1IEBACiAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbk5vZGVzIGZvciBNb2R1bGUgJXM6XG4iLCBuYW1lKTsKICAgICAgICAgICAgICAgICBwcmludF9ub2RlcyhzdGRvdXQsIHJvb3QpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgc2Nhbl9vYmpsaXN0KHJvb3QsIG9iamdyb3VwcywgIlVuZGVmaW5lZCBPQkpFQ1QtR1JPVVAiKTsKLSAgICAgICAgICAgICAgICBzY2FuX29iamxpc3Qocm9vdCwgb2JqZWN0cywgIlVuZGVmaW5lZCBPQkpFQ1QiKTsKLSAgICAgICAgICAgICAgICBzY2FuX29iamxpc3Qocm9vdCwgbm90aWZzLCAiVW5kZWZpbmVkIE5PVElGSUNBVElPTiIpOwotICAgICAgICAgICAgICAgIG9iamdyb3VwcyA9IG9sZGdyb3VwczsKLSAgICAgICAgICAgICAgICBvYmplY3RzID0gb2xkb2JqZWN0czsKLSAgICAgICAgICAgICAgICBub3RpZnMgPSBvbGRub3RpZnM7CiAgICAgICAgICAgICAgICAgZm9yIChtcCA9IG1vZHVsZV9oZWFkOyBtcDsgbXAgPSBtcC0+bmV4dCkKICAgICAgICAgICAgICAgICAgICAgaWYgKG1wLT5tb2RpZCA9PSBjdXJyZW50X21vZHVsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHNjYW5fb2JqbGlzdChyb290LCBtcCwgb2JqZ3JvdXBzLCAiVW5kZWZpbmVkIE9CSkVDVC1HUk9VUCIpOworICAgICAgICAgICAgICAgIHNjYW5fb2JqbGlzdChyb290LCBtcCwgb2JqZWN0cywgIlVuZGVmaW5lZCBPQkpFQ1QiKTsKKyAgICAgICAgICAgICAgICBzY2FuX29iamxpc3Qocm9vdCwgbXAsIG5vdGlmcywgIlVuZGVmaW5lZCBOT1RJRklDQVRJT04iKTsKKyAgICAgICAgICAgICAgICBvYmpncm91cHMgPSBvbGRncm91cHM7CisgICAgICAgICAgICAgICAgb2JqZWN0cyA9IG9sZG9iamVjdHM7CisgICAgICAgICAgICAgICAgbm90aWZzID0gb2xkbm90aWZzOwogICAgICAgICAgICAgICAgIGRvX2xpbmt1cChtcCwgcm9vdCk7CiAgICAgICAgICAgICAgICAgbnAgPSByb290ID0gTlVMTDsKICAgICAgICAgICAgIH0KQEAgLTQyODMsNyArNDM2NSw3IEBACiAjaWZkZWYgVEVTVAogICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCSAgIE5FVFNOTVBfRFNfTElCX01JQl9XQVJOSU5HUykpIHsKLSAgICAgICAgICAgICAgICB4bWFsbG9jX3N0YXRzKHN0ZGVycik7CisgICAgICAgICAgICAgICAgLyogeG1hbGxvY19zdGF0cyhzdGRlcnIpOyAqLwogCSAgICB9CiAjZW5kaWYKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDMyMyw2ICs0NDA1LDcgQEAKICAgICAgICAgICAgICAgICBubnAgPSBwYXJzZV9tYWNybyhmcCwgbmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgTUFDUk8iLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDM0Niw2ICs0NDI5LDcgQEAKICAgICAgICAgICAgICAgICB0eXBlID0gZ2V0X3Rva2VuKGZwLCB0b2tlbiwgTUFYVE9LRU4pOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gRU5ET0ZGSUxFKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkV4cGVjdGVkIFwifVwiIiwgdG9rZW4sIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0eXBlID0gZ2V0X3Rva2VuKGZwLCB0b2tlbiwgTUFYVE9LRU4pOwpAQCAtNDM1NSw2ICs0NDM5LDcgQEAKICAgICAgICAgY2FzZSBERUZJTklUSU9OUzoKICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSBCRVRXRUVOX01JQlMpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiRXJyb3IsIG5lc3RlZCBNSUJTIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0YXRlID0gSU5fTUlCOwpAQCAtNDM3OSw2ICs0NDY0LDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX29iamVjdHR5cGUoZnAsIG5hbWUpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBPQkpFQ1QtVFlQRSIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQzODYsNiArNDQ3Miw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9vYmplY3Rncm91cChmcCwgbmFtZSwgT0JKRUNUUywgJm9iamVjdHMpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBPQkpFQ1QtR1JPVVAiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00MzkzLDYgKzQ0ODAsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2Vfb2JqZWN0Z3JvdXAoZnAsIG5hbWUsIE5PVElGSUNBVElPTlMsICZub3RpZnMpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBOT1RJRklDQVRJT04tR1JPVVAiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDAwLDYgKzQ0ODgsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2VfdHJhcERlZmluaXRpb24oZnAsIG5hbWUpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBUUkFQLVRZUEUiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDA3LDYgKzQ0OTYsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2Vfbm90aWZpY2F0aW9uRGVmaW5pdGlvbihmcCwgbmFtZSk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE5PVElGSUNBVElPTi1UWVBFIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQxNCw2ICs0NTA0LDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX2NvbXBsaWFuY2UoZnAsIG5hbWUpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBNT0RVTEUtQ09NUExJQU5DRSIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0MjEsNiArNDUxMiw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9jYXBhYmlsaXRpZXMoZnAsIG5hbWUpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBBR0VOVC1DQVBBQklMSVRJRVMiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDI4LDYgKzQ1MjAsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2VfbWFjcm8oZnAsIG5hbWUpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBNQUNSTyIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ0MzksNiArNDUzMiw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9tb2R1bGVJZGVudGl0eShmcCwgbmFtZSk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE1PRFVMRS1JREVOVElUWSIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0NDYsNiArNDU0MCw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9vYmplY3Rncm91cChmcCwgbmFtZSwgT0JKRUNUUywgJm9iamVjdHMpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBPQkpFQ1QtSURFTlRJVFkiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDUzLDE2ICs0NTQ4LDE5IEBACiAgICAgICAgICAgICB0eXBlID0gZ2V0X3Rva2VuKGZwLCB0b2tlbiwgTUFYVE9LRU4pOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0gSURFTlRJRklFUikgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJFeHBlY3RlZCBJREVOVElGSUVSIiwgdG9rZW4sIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0eXBlID0gZ2V0X3Rva2VuKGZwLCB0b2tlbiwgTUFYVE9LRU4pOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0gRVFVQUxTKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkV4cGVjdGVkIFwiOjo9XCIiLCB0b2tlbiwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5ucCA9IHBhcnNlX29iamVjdGlkKGZwLCBuYW1lKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgT0JKRUNUIElERU5USUZJRVIiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDc0LDYgKzQ1NzIsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIG9wZXJhdG9yIiwgdG9rZW4sIHR5cGUpOworICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmIChubnApIHsKQEAgLTQ1MDcsNiArNDYwNiwyMSBAQAogICAgIHJldHVybiAwOwogfQogCisvKioKKyAqIFJlYWQgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gYSBmaWxlLiBBc3N1bWVzIHRoYXQgdGhlIGNhbGxlciBoYXMgaW52b2tlZAorICogZmxvY2tmaWxlKCkuIFVzZXMgZmdldGNfdW5sb2NrZWQoKSBpbnN0ZWFkIG9mIGdldGMoKSBzaW5jZSB0aGUgZm9ybWVyIGlzCisgKiBpbXBsZW1lbnRlZCBhcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gZ2xpYmMuIFNlZSBhbHNvIGJ1ZyAzNDQ3MTk2CisgKiAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9MzQ0NzE5NiZncm91cF9pZD0xMjY5NCZhdGlkPTExMjY5NCkuCisgKi8KK3N0YXRpYyBpbnQgbmV0c25tcF9nZXRjKEZJTEUgKnN0cmVhbSkKK3sKKyNpZmRlZiBIQVZFX0ZHRVRDX1VOTE9DS0VECisgICAgcmV0dXJuIGZnZXRjX3VubG9ja2VkKHN0cmVhbSk7CisjZWxzZQorICAgIHJldHVybiBnZXRjKHN0cmVhbSk7CisjZW5kaWYKK30KKwogLyoKICAqIFBhcnNlcyBhIHRva2VuIGZyb20gdGhlIGZpbGUuICBUaGUgdHlwZSBvZiB0aGUgdG9rZW4gcGFyc2VkIGlzIHJldHVybmVkLAogICogYW5kIHRoZSB0ZXh0IGlzIHBsYWNlZCBpbiB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgdG9rZW4uCkBAIC00NTIwLDEyICs0NjM0LDEzIEBACiAgICAgcmVnaXN0ZXIgaW50ICAgIGhhc2ggPSAwOwogICAgIHJlZ2lzdGVyIHN0cnVjdCB0b2sgKnRwOwogICAgIGludCAgICAgICAgICAgICB0b29fbG9uZyA9IDA7CisgICAgZW51bSB7IGJkaWdpdHMsIHhkaWdpdHMsIG90aGVyIH0gc2VlblN5bWJvbHM7CiAKICAgICAvKgogICAgICAqIHNraXAgYWxsIHdoaXRlIHNwYWNlIAogICAgICAqLwogICAgIGRvIHsKLSAgICAgICAgY2ggPSBnZXRjKGZwKTsKKyAgICAgICAgY2ggPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICBpZiAoY2ggPT0gJ1xuJykKICAgICAgICAgICAgIG1pYkxpbmUrKzsKICAgICB9CkBAIC00NTM4LDM5ICs0NjUzLDYwIEBACiAgICAgY2FzZSAnIic6CiAgICAgICAgIHJldHVybiBwYXJzZVF1b3RlU3RyaW5nKGZwLCB0b2tlbiwgbWF4dGxlbik7CiAgICAgY2FzZSAnXCcnOiAgICAgICAgICAgICAgICAgLyogYmluYXJ5IG9yIGhleCBjb25zdGFudCAqLwotICAgICAgICB3aGlsZSAoKGNoID0gZ2V0YyhmcCkpICE9IEVPRiAmJiBjaCAhPSAnXCcnCi0gICAgICAgICAgICAgICAmJiBjcCAtIHRva2VuIDwgbWF4dGxlbiAtIDIpCi0gICAgICAgICAgICAqY3ArKyA9IGNoOworICAgICAgICBzZWVuU3ltYm9scyA9IGJkaWdpdHM7CisgICAgICAgIHdoaWxlICgoY2ggPSBuZXRzbm1wX2dldGMoZnApKSAhPSBFT0YgJiYgY2ggIT0gJ1wnJykgeworICAgICAgICAgICAgc3dpdGNoIChzZWVuU3ltYm9scykgeworICAgICAgICAgICAgY2FzZSBiZGlnaXRzOgorICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnMCcgfHwgY2ggPT0gJzEnKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzZWVuU3ltYm9scyA9IHhkaWdpdHM7CisgICAgICAgICAgICBjYXNlIHhkaWdpdHM6CisgICAgICAgICAgICAgICAgaWYgKGlzeGRpZ2l0KGNoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc2VlblN5bWJvbHMgPSBvdGhlcjsKKyAgICAgICAgICAgIGNhc2Ugb3RoZXI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3AgLSB0b2tlbiA8IG1heHRsZW4gLSAyKQorICAgICAgICAgICAgICAgICpjcCsrID0gY2g7CisgICAgICAgIH0KICAgICAgICAgaWYgKGNoID09ICdcJycpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICB2YWwgPSAwOwotICAgICAgICAgICAgKmNwKysgPSAnXCcnOwotICAgICAgICAgICAgKmNwKysgPSBjaCA9IGdldGMoZnApOwotICAgICAgICAgICAgKmNwID0gMDsKLSAgICAgICAgICAgIGNwID0gdG9rZW4gKyAxOworICAgICAgICAgICAgY2hhciAgICAgICAgICAgKnJ1biA9IHRva2VuICsgMTsKKyAgICAgICAgICAgIGNoID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKICAgICAgICAgICAgIGNhc2UgRU9GOgogICAgICAgICAgICAgICAgIHJldHVybiBFTkRPRkZJTEU7CiAgICAgICAgICAgICBjYXNlICdiJzoKICAgICAgICAgICAgIGNhc2UgJ0InOgotICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSAqY3ArKykgIT0gJ1wnJykKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoICE9ICcwJyAmJiBjaCAhPSAnMScpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTEFCRUw7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCAqIDIgKyBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBpZiAoc2VlblN5bWJvbHMgPiBiZGlnaXRzKSB7CisgICAgICAgICAgICAgICAgICAgICpjcCsrID0gJ1wnJzsKKyAgICAgICAgICAgICAgICAgICAgKmNwID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExBQkVMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAocnVuICE9IGNwKQorICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwgKiAyICsgKnJ1bisrIC0gJzAnOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnaCc6CiAgICAgICAgICAgICBjYXNlICdIJzoKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0gKmNwKyspICE9ICdcJycpCisgICAgICAgICAgICAgICAgaWYgKHNlZW5TeW1ib2xzID4geGRpZ2l0cykgeworICAgICAgICAgICAgICAgICAgICAqY3ArKyA9ICdcJyc7CisgICAgICAgICAgICAgICAgICAgICpjcCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKHJ1biAhPSBjcCkgeworICAgICAgICAgICAgICAgICAgICBjaCA9ICpydW4rKzsKICAgICAgICAgICAgICAgICAgICAgaWYgKCcwJyA8PSBjaCAmJiBjaCA8PSAnOScpCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwgKiAxNiArIGNoIC0gJzAnOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgnYScgPD0gY2ggJiYgY2ggPD0gJ2YnKQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsICogMTYgKyBjaCAtICdhJyArIDEwOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgnQScgPD0gY2ggJiYgY2ggPD0gJ0YnKQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsICogMTYgKyBjaCAtICdBJyArIDEwOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTEFCRUw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAqY3ArKyA9ICdcJyc7CisgICAgICAgICAgICAgICAgKmNwID0gMDsKICAgICAgICAgICAgICAgICByZXR1cm4gTEFCRUw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzcHJpbnRmKHRva2VuLCAiJWxkIiwgdmFsKTsKQEAgLTQ1OTYsMjUgKzQ3MzIsMjUgQEAKICAgICBjYXNlICd8JzoKICAgICAgICAgcmV0dXJuIEJBUjsKICAgICBjYXNlICcuJzoKLSAgICAgICAgY2hfbmV4dCA9IGdldGMoZnApOworICAgICAgICBjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgaWYgKGNoX25leHQgPT0gJy4nKQogICAgICAgICAgICAgcmV0dXJuIFJBTkdFOwogICAgICAgICB1bmdldGMoY2hfbmV4dCwgZnApOwogICAgICAgICByZXR1cm4gTEFCRUw7CiAgICAgY2FzZSAnOic6Ci0gICAgICAgIGNoX25leHQgPSBnZXRjKGZwKTsKKyAgICAgICAgY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgIGlmIChjaF9uZXh0ICE9ICc6JykgewogICAgICAgICAgICAgdW5nZXRjKGNoX25leHQsIGZwKTsKICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKICAgICAgICAgfQotICAgICAgICBjaF9uZXh0ID0gZ2V0YyhmcCk7CisgICAgICAgIGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICBpZiAoY2hfbmV4dCAhPSAnPScpIHsKICAgICAgICAgICAgIHVuZ2V0YyhjaF9uZXh0LCBmcCk7CiAgICAgICAgICAgICByZXR1cm4gTEFCRUw7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEVRVUFMUzsKICAgICBjYXNlICctJzoKLSAgICAgICAgY2hfbmV4dCA9IGdldGMoZnApOworICAgICAgICBjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgaWYgKGNoX25leHQgPT0gJy0nKSB7CiAgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCSAgICAgICBORVRTTk1QX0RTX0xJQl9NSUJfQ09NTUVOVF9URVJNKSkgewpAQCAtNDYyMiw3ICs0NzU4LDcgQEAKICAgICAgICAgICAgICAgICAgKiBUcmVhdCB0aGUgcmVzdCBvZiB0aGlzIGxpbmUgYXMgYSBjb21tZW50LiAKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoX25leHQgIT0gRU9GKSAmJiAoY2hfbmV4dCAhPSAnXG4nKSkKLSAgICAgICAgICAgICAgICAgICAgY2hfbmV4dCA9IGdldGMoZnApOworICAgICAgICAgICAgICAgICAgICBjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBUcmVhdCB0aGUgcmVzdCBvZiB0aGUgbGluZSBvciB1bnRpbCBhbm90aGVyICctLScgYXMgYSBjb21tZW50IApAQCAtNDYzMSwxMSArNDc2NywxMSBAQAogICAgICAgICAgICAgICAgICAqICh0aGlzIGlzIHRoZSAidGVjaG5pY2FsbHkiIGNvcnJlY3Qgd2F5IHRvIHBhcnNlIGNvbW1lbnRzKSAKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBjaCA9ICcgJzsKLSAgICAgICAgICAgICAgICBjaF9uZXh0ID0gZ2V0YyhmcCk7CisgICAgICAgICAgICAgICAgY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGNoX25leHQgIT0gRU9GICYmIGNoX25leHQgIT0gJ1xuJyAmJgogICAgICAgICAgICAgICAgICAgICAgICAoY2ggIT0gJy0nIHx8IGNoX25leHQgIT0gJy0nKSkgewogICAgICAgICAgICAgICAgICAgICBjaCA9IGNoX25leHQ7Ci0gICAgICAgICAgICAgICAgICAgIGNoX25leHQgPSBnZXRjKGZwKTsKKyAgICAgICAgICAgICAgICAgICAgY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNoX25leHQgPT0gRU9GKQpAQCAtNDY1Niw3ICs0NzkyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKICAgICAgICAgaGFzaCArPSB0b2xvd2VyKGNoKTsKICAgICAgIG1vcmU6Ci0gICAgICAgIHdoaWxlIChpc19sYWJlbGNoYXIoY2hfbmV4dCA9IGdldGMoZnApKSkgeworICAgICAgICB3aGlsZSAoaXNfbGFiZWxjaGFyKGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApKSkgewogICAgICAgICAgICAgaGFzaCArPSB0b2xvd2VyKGNoX25leHQpOwogICAgICAgICAgICAgaWYgKGNwIC0gdG9rZW4gPCBtYXh0bGVuIC0gMSkKICAgICAgICAgICAgICAgICAqY3ArKyA9IGNoX25leHQ7CkBAIC00Njc1LDcgKzQ4MTEsNyBAQAogICAgICAgICBpZiAodHApIHsKICAgICAgICAgICAgIGlmICh0cC0+dG9rZW4gIT0gQ09OVElOVUUpCiAgICAgICAgICAgICAgICAgcmV0dXJuICh0cC0+dG9rZW4pOwotICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKGNoX25leHQgPSBnZXRjKGZwKSkpKQorICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApKSkpCiAgICAgICAgICAgICAgICAgaWYgKGNoX25leHQgPT0gJ1xuJykKICAgICAgICAgICAgICAgICAgICAgbWliTGluZSsrOwogICAgICAgICAgICAgaWYgKGNoX25leHQgPT0gRU9GKQpAQCAtNDY4Niw5ICs0ODIyLDkgQEAKICAgICAgICAgICAgICAgICBnb3RvIG1vcmU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuWzBdID09ICctJyB8fCBpc2RpZ2l0KHRva2VuWzBdKSkgeworICAgICAgICBpZiAodG9rZW5bMF0gPT0gJy0nIHx8IGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKHRva2VuWzBdKSkpIHsKICAgICAgICAgICAgIGZvciAoY3AgPSB0b2tlbiArIDE7ICpjcDsgY3ArKykKLSAgICAgICAgICAgICAgICBpZiAoIWlzZGlnaXQoKmNwKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTEFCRUw7CiAgICAgICAgICAgICByZXR1cm4gTlVNQkVSOwogICAgICAgICB9CkBAIC00Njk2LDExICs0ODMyLDE0IEBACiAgICAgfQogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocGFyc2VfZ2V0X3Rva2VuLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9HRVRfVE9LRU4KIGludAogc25tcF9nZXRfdG9rZW4oRklMRSAqIGZwLCBjaGFyICp0b2tlbiwgaW50IG1heHRsZW4pCiB7CiAgICAgcmV0dXJuIGdldF90b2tlbihmcCwgdG9rZW4sIG1heHRsZW4pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfR0VUX1RPS0VOICovCiAKIGludAogYWRkX21pYmZpbGUoY29uc3QgY2hhciogdG1wc3RyLCBjb25zdCBjaGFyKiBkX25hbWUsIEZJTEUgKmlwICkKQEAgLTQ3NTUsMjYgKzQ4OTQsMjQgQEAKICAgICBpbnQgICAgICAgICAgICAgY291bnQgPSAwOwogICAgIGludCAgICAgICAgICAgICBmbmFtZV9sZW4gPSAwOwogI2lmICEoZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChjeWd3aW4pKQotICAgIGNoYXIgICAgICAgICAgICB0b2tlbltNQVhUT0tFTl07CisgICAgY2hhciAgICAgICAgICAgKnRva2VuOwogICAgIGNoYXIgc3BhY2U7CiAgICAgY2hhciBuZXdsaW5lOwogICAgIHN0cnVjdCBzdGF0ICAgICBkaXJfc3RhdCwgaWR4X3N0YXQ7CiAgICAgY2hhciAgICAgICAgICAgIHRtcHN0cjFbMzAwXTsKLSAgICBpbnQgZW1wdHkgPSAxOwogI2VuZGlmCiAKICAgICBERUJVR01TR1RMKCgicGFyc2UtbWlicyIsICJTY2FubmluZyBkaXJlY3RvcnkgJXNcbiIsIGRpcm5hbWUpKTsKICNpZiAhKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoY3lnd2luKSkKLSAgICBzbnByaW50Zih0b2tlbiwgc2l6ZW9mKHRva2VuKSwgIiVzLyVzIiwgZGlybmFtZSwgIi5pbmRleCIpOwotICAgIHRva2VuWyBzaXplb2YodG9rZW4pLTEgXSA9IDA7Ci0gICAgaWYgKHN0YXQodG9rZW4sICZpZHhfc3RhdCkgPT0gMCAmJiBzdGF0KGRpcm5hbWUsICZkaXJfc3RhdCkgPT0gMCkgeworICAgIHRva2VuID0gbmV0c25tcF9taWJpbmRleF9sb29rdXAoIGRpcm5hbWUgKTsKKyAgICBpZiAodG9rZW4gJiYgc3RhdCh0b2tlbiwgJmlkeF9zdGF0KSA9PSAwICYmIHN0YXQoZGlybmFtZSwgJmRpcl9zdGF0KSA9PSAwKSB7CiAgICAgICAgIGlmIChkaXJfc3RhdC5zdF9tdGltZSA8IGlkeF9zdGF0LnN0X210aW1lKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgicGFyc2UtbWlicyIsICJUaGUgaW5kZXggaXMgZ29vZFxuIikpOwogICAgICAgICAgICAgaWYgKChpcCA9IGZvcGVuKHRva2VuLCAiciIpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZmdldHModG1wc3RyLCBzaXplb2YodG1wc3RyKSwgaXApOyAvKiBTa2lwIGRpciBsaW5lICovCiAgICAgICAgICAgICAgICAgd2hpbGUgKGZzY2FuZihpcCwgIiUxMjdzJWMlMjk5cyVjIiwgdG9rZW4sICZzcGFjZSwgdG1wc3RyLAogCQkgICAgJm5ld2xpbmUpID09IDQpIHsKIAotICAgICAgICAgICAgICAgICAgICBlbXB0eSA9IDA7CiAJCSAgICAvKgogCQkgICAgICogSWYgYW4gb3ZlcmZsb3cgb2YgdGhlIHRva2VuIG9yIHRtcHN0ciBidWZmZXJzIGhhcyBiZWVuCiAJCSAgICAgKiBmb3VuZCBsb2cgYSBtZXNzYWdlIGFuZCBicmVhayBvdXQgb2YgdGhlIHdoaWxlIGxvb3AsCkBAIC00Nzk0LDEwICs0OTMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZmNsb3NlKGlwKTsKLSAgICAgICAgICAgICAgICBpZiAoICFlbXB0eSApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGFyc2UtbWlicyIsICJFbXB0eSBNSUIgaW5kZXhcbiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGFyc2UtbWlicyIsICJDYW4ndCByZWFkIGluZGV4XG4iKSk7CiAgICAgICAgIH0gZWxzZQpAQCAtNDgwNyw5ICs0OTQxLDcgQEAKICNlbmRpZgogCiAgICAgaWYgKChkaXIgPSBvcGVuZGlyKGRpcm5hbWUpKSkgewotICAgICAgICBzbnByaW50Zih0bXBzdHIsIHNpemVvZih0bXBzdHIpLCAiJXMvLmluZGV4IiwgZGlybmFtZSk7Ci0gICAgICAgIHRtcHN0clsgc2l6ZW9mKHRtcHN0ciktMSBdID0gMDsKLSAgICAgICAgaXAgPSBmb3Blbih0bXBzdHIsICJ3Iik7CisgICAgICAgIGlwID0gbmV0c25tcF9taWJpbmRleF9uZXcoIGRpcm5hbWUgKTsKICAgICAgICAgd2hpbGUgKChmaWxlID0gcmVhZGRpcihkaXIpKSkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIE9ubHkgcGFyc2UgZmlsZSBuYW1lcyB0aGF0IGRvbid0IGJlZ2luIHdpdGggYSAnLicgCkBAIC00ODgxLDcgKzUwMTMsNyBAQAogCiAKIHN0cnVjdCB0cmVlICAgICoKLXJlYWRfYWxsX21pYnMoKQorcmVhZF9hbGxfbWlicyh2b2lkKQogewogICAgIHN0cnVjdCBtb2R1bGUgICptcDsKIApAQCAtNDg5MCwxMiArNTAyMiwyOSBAQAogICAgICAgICAgICAgbmV0c25tcF9yZWFkX21vZHVsZShtcC0+bmFtZSk7CiAgICAgYWRvcHRfb3JwaGFucygpOwogCisgICAgLyogSWYgZW50ZXJlZCB0aGUgc3ludGF4IGVycm9yIGxvb3AgaW4gInJlYWRfbW9kdWxlKCkiICovCisgICAgaWYgKGdMb29wID09IDEpIHsKKyAgICAgICAgZ0xvb3AgPSAwOworICAgICAgICBpZiAoZ3BNaWJFcnJvclN0cmluZyAhPSBOVUxMKSB7CisgICAgICAgICAgICBTTk1QX0ZSRUUoZ3BNaWJFcnJvclN0cmluZyk7CisgICAgICAgIH0KKyAgICAgICAgZ3BNaWJFcnJvclN0cmluZyA9IChjaGFyICopIGNhbGxvYygxLCBNQVhRVU9URVNUUik7CisgICAgICAgIGlmIChncE1pYkVycm9yU3RyaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19DUklULCAiZmFpbGVkIHRvIGFsbG9jYXRlZCBtZW1vcnkgZm9yIGdwTWliRXJyb3JTdHJpbmdcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25wcmludGYoZ3BNaWJFcnJvclN0cmluZywgc2l6ZW9mKGdwTWliRXJyb3JTdHJpbmcpLTEsICJFcnJvciBpbiBwYXJzaW5nIE1JQiBtb2R1bGUocyk6ICVzICEgVW5hYmxlIHRvIGxvYWQgY29ycmVzcG9uZGluZyBNSUIocykiLCBnTWliTmFtZXMpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGlzIG1lbW9yeSAqLworICAgIHRyZWVfaGVhZC0+cGFyc2VFcnJvclN0cmluZyA9IGdwTWliRXJyb3JTdHJpbmc7CisJCiAgICAgcmV0dXJuIHRyZWVfaGVhZDsKIH0KIAogCiAjaWZkZWYgVEVTVAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKICAgICBpbnQgICAgICAgICAgICAgaTsKICAgICBzdHJ1Y3QgdHJlZSAgICAqdHA7CkBAIC00OTI1LDcgKzUwNzQsNyBAQAogICAgIGludCAgICAgICAgICAgICB0b29fbG9uZyA9IDA7CiAgICAgY2hhciAgICAgICAgICAgKnRva2VuX3N0YXJ0ID0gdG9rZW47CiAKLSAgICBmb3IgKGNoID0gZ2V0YyhmcCk7IGNoICE9IEVPRjsgY2ggPSBnZXRjKGZwKSkgeworICAgIGZvciAoY2ggPSBuZXRzbm1wX2dldGMoZnApOyBjaCAhPSBFT0Y7IGNoID0gbmV0c25tcF9nZXRjKGZwKSkgewogICAgICAgICBpZiAoY2ggPT0gJ1xyJykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoY2ggPT0gJ1xuJykgewpAQCAtNTE4NSw4ICs1MzM0LDggQEAKICAgICByZXR1cm4gKGZpbmRfdHJlZV9ub2RlKG5hbWUsIC0xKSk7CiB9CiAKLS8qIEZpbmQgbm9kZSBpbiBzcGVjaWZpYyBNSUIgbW9kdWxlCi0gICBVc2VkIGJ5IFBlcmwgbW9kdWxlcwkJKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihwYXJzZV9maW5kX25vZGUyLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9GSU5EX05PREUyCiBzdHJ1Y3QgdHJlZSAgICAqCiBmaW5kX25vZGUyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm1vZHVsZSkKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC01MjAwLDcgKzUzNDksMTAgQEAKICAgfQogICByZXR1cm4gKGZpbmRfdHJlZV9ub2RlKG5hbWUsIG1vZGlkKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9GSU5EX05PREUyICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSU5EX01PRFVMRQorLyogVXNlZCBpbiB0aGUgcGVybCBtb2R1bGUgKi8KIHN0cnVjdCBtb2R1bGUgICoKIGZpbmRfbW9kdWxlKGludCBtaWQpCiB7CkBAIC01MjEwLDEwICs1MzYyLDkgQEAKICAgICAgICAgaWYgKG1wLT5tb2RpZCA9PSBtaWQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaWYgKG1wICE9IDApCi0gICAgICAgIHJldHVybiBtcDsKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbXA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSU5EX01PRFVMRSAqLwogCiAKIHN0YXRpYyBjaGFyICAgICBsZWF2ZV9pbmRlbnRbMjU2XTsKZGlmZiAtLWdpdCBhL3NubXBsaWIvcGtjcy5jIGIvc25tcGxpYi9wa2NzLmMKaW5kZXggZWU0ZWQ5Mi4uNDhlNjAyYSAxMDA2NDQKLS0tIGEvc25tcGxpYi9wa2NzLmMKKysrIGIvc25tcGxpYi9wa2NzLmMKQEAgLTc3NCw0ICs3NzQsNiBAQAogICAgICAgICBicmVhazsKICAgICB9CiB9CisjZWxzZQoraW50IHBrY3NfdW51c2VkOwkvKiBTdXBwcmVzcyAiZW1wdHkgdHJhbnNsYXRpb24gdW5pdCIgd2FybmluZyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9zbm1wbGliL3JlYWRfY29uZmlnLmMgYi9zbm1wbGliL3JlYWRfY29uZmlnLmMKaW5kZXggNzk1MDMzYi4uMzE2NzY3NCAxMDA2NDQKLS0tIGEvc25tcGxpYi9yZWFkX2NvbmZpZy5jCisrKyBiL3NubXBsaWIvcmVhZF9jb25maWcuYwpAQCAtNjUsNiArNjUsNyBAQAogICogIEB7CiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgpAQCAtODQsMTEgKzg1LDcgQEAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTA5LDkgKzEwNiw2IEBACiAjaWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC0xMjAsNiArMTE0LDIzIEBACiAjZW5kaWYKICNpbmNsdWRlIDxlcnJuby5oPgogCisjaWYgSEFWRV9ESVJFTlRfSAorIyBpbmNsdWRlIDxkaXJlbnQuaD4KKyMgZGVmaW5lIE5BTUxFTihkaXJlbnQpIHN0cmxlbigoZGlyZW50KS0+ZF9uYW1lKQorI2Vsc2UKKyMgZGVmaW5lIGRpcmVudCBkaXJlY3QKKyMgZGVmaW5lIE5BTUxFTihkaXJlbnQpIChkaXJlbnQpLT5kX25hbWxlbgorIyBpZiBIQVZFX1NZU19ORElSX0gKKyMgIGluY2x1ZGUgPHN5cy9uZGlyLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfU1lTX0RJUl9ICisjICBpbmNsdWRlIDxzeXMvZGlyLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfTkRJUl9ICisjICBpbmNsdWRlIDxuZGlyLmg+CisjIGVuZGlmCisjZW5kaWYKKwogI2lmIEhBVkVfRE1BTExPQ19ICiAjaW5jbHVkZSA8ZG1hbGxvYy5oPgogI2VuZGlmCkBAIC0xMzUsMTAgKzE0NiwxNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX2NvbmZpZ19hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlciwgcmVhZF9jb25maWdfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlYWRfY29uZmlnX3JlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX2NvbmZpZ19yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlciwgbmV0c25tcF91bnVzZWQpCisKIHN0YXRpYyBpbnQgICAgICBjb25maWdfZXJyb3JzOwogCiBzdHJ1Y3QgY29uZmlnX2ZpbGVzICpjb25maWdfZmlsZXMgPSBOVUxMOwogCisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2xpbmUgKgogaW50ZXJuYWxfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqdHlwZV9wYXJhbSwKIAkJCQkgY29uc3QgY2hhciAqdG9rZW4sCkBAIC0xOTIsOCArMjEwLDExIEBACiAgICAgICAgIH0KIAogICAgICAgICAoKmN0bXApLT5maWxlSGVhZGVyID0gc3RyZHVwKHR5cGUpOworICAgICAgICBERUJVR01TR1RMKCgiOTpyZWFkX2NvbmZpZzp0eXBlIiwgIm5ldyB0eXBlICVzXG4iLCB0eXBlKSk7CiAgICAgfQogCisgICAgREVCVUdNU0dUTCgoIjk6cmVhZF9jb25maWc6cmVnaXN0ZXJfaGFuZGxlciIsICJyZWdpc3RlcmluZyAlcyAlc1xuIiwKKyAgICAgICAgICAgICAgICB0eXBlLCB0b2tlbikpOwogICAgIC8qCiAgICAgICogRmluZCBwYXJzZXIgdHlwZSBpbiBjdXJyZW50IGxpc3QgIC1PUi0gIGNyZWF0ZSBhIG5ldwogICAgICAqIGxpbmUgcGFyc2VyIGVudHJ5LgpAQCAtMjM4LDYgKzI1OSw3IEBACiAJCQkJCSAgICBoZWxwLCBQUkVNSUJfQ09ORklHKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfQ09ORklHX1JFR0lTVEVSX0FQUF9QUkVORVRTTk1QX01JQl9IQU5ETEVSCiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgogcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjaGFyICopLApAQCAtMjQ3LDYgKzI2OSw3IEBACiAgICAgcmV0dXJuIChyZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyCiAgICAgICAgICAgICAoTlVMTCwgdG9rZW4sIHBhcnNlciwgcmVsZWFzZXIsIGhlbHApKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfQ09ORklHX1JFR0lTVEVSX0FQUF9QUkVORVRTTk1QX01JQl9IQU5ETEVSICovCiAKIC8qKgogICogcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgcmVnaXN0ZXJzIGhhbmRsZXJzIGZvciBjZXJ0YWluIHRva2VucyBzcGVjaWZpZWQgaW4KQEAgLTI5MSw2ICszMTQsMjAgQEAKIAkJCQkJICAgIGhlbHAsIE5PUk1BTF9DT05GSUcpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9DT05GSUdfUkVHSVNURVJfQ09OU1RfQ09ORklHX0hBTkRMRVIKK3N0cnVjdCBjb25maWdfbGluZSAqCityZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksIGNvbnN0IGNoYXIgKmhlbHApCit7CisgICAgcmV0dXJuIGludGVybmFsX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsIHRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCgqKShjb25zdCBjaGFyICosIGNoYXIgKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlciwgcmVsZWFzZXIsCisJCQkJCSAgICBoZWxwLCBOT1JNQUxfQ09ORklHKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfQ09ORklHX1JFR0lTVEVSX0NPTlNUX0NPTkZJR19IQU5ETEVSICovCisKIHN0cnVjdCBjb25maWdfbGluZSAqCiByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwKQEAgLTM5MywxNCArNDMwLDE2IEBACiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9BUFBfQ09ORklHX0hBTkRMRVIKIHZvaWQKIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKnRva2VuKQogewogICAgIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoTlVMTCwgdG9rZW4pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9BUFBfQ09ORklHX0hBTkRMRVIgKi8KIAogdm9pZAotdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKCkKK3VucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycyh2b2lkKQogewogICAgIHN0cnVjdCBjb25maWdfZmlsZXMgKmN0bXAsICpzYXZlOwogICAgIHN0cnVjdCBjb25maWdfbGluZSAqbHRtcDsKQEAgLTQzNyw4ICs0NzYsOCBAQAogfQogI2VuZGlmCiAKLWludCAgICAgICAgICAgICBsaW5lY291bnQ7Ci1jb25zdCBjaGFyICAgICAqY3VyZmlsZW5hbWU7CitzdGF0aWMgdW5zaWduZWQgaW50ICBsaW5lY291bnQ7CitzdGF0aWMgY29uc3QgY2hhciAgICpjdXJmaWxlbmFtZTsKIAogc3RydWN0IGNvbmZpZ19saW5lICoKIHJlYWRfY29uZmlnX2dldF9oYW5kbGVycyhjb25zdCBjaGFyICp0eXBlKQpAQCAtNDUxLDIyICs0OTAsMjMgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotdm9pZAoraW50CiByZWFkX2NvbmZpZ193aXRoX3R5cGVfd2hlbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdHlwZSwgaW50IHdoZW4pCiB7CiAgICAgc3RydWN0IGNvbmZpZ19saW5lICpjdG1wID0gcmVhZF9jb25maWdfZ2V0X2hhbmRsZXJzKHR5cGUpOwogICAgIGlmIChjdG1wKQotICAgICAgICByZWFkX2NvbmZpZyhmaWxlbmFtZSwgY3RtcCwgd2hlbik7CisgICAgICAgIHJldHVybiByZWFkX2NvbmZpZyhmaWxlbmFtZSwgY3RtcCwgd2hlbik7CiAgICAgZWxzZQogICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLAogICAgICAgICAgICAgICAgICAgICAicmVhZF9jb25maWc6IEkgaGF2ZSBubyByZWdpc3RyYXRpb25zIGZvciB0eXBlOiVzLGZpbGU6JXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGZpbGVuYW1lKSk7CisgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOyAgICAgLyogTm8gY29uZmlnIGZpbGVzIHJlYWQgKi8KIH0KIAotdm9pZAoraW50CiByZWFkX2NvbmZpZ193aXRoX3R5cGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnR5cGUpCiB7Ci0gICAgcmVhZF9jb25maWdfd2l0aF90eXBlX3doZW4oZmlsZW5hbWUsIHR5cGUsIEVJVEhFUl9DT05GSUcpOworICAgIHJldHVybiByZWFkX2NvbmZpZ193aXRoX3R5cGVfd2hlbihmaWxlbmFtZSwgdHlwZSwgRUlUSEVSX0NPTkZJRyk7CiB9CiAKIApAQCAtNDkyLDEyICs1MzIsMTIgQEAKIHJ1bl9jb25maWdfaGFuZGxlcihzdHJ1Y3QgY29uZmlnX2xpbmUgKmxwdHIsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIsIGludCB3aGVuKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbU1RSSU5HTUFYXTsKICAgICBjaGFyICAgICAgICAgICAqY3A7CiAgICAgbHB0ciA9IHJlYWRfY29uZmlnX2ZpbmRfaGFuZGxlcihscHRyLCB0b2tlbik7CiAgICAgaWYgKGxwdHIgIT0gTlVMTCkgewogICAgICAgICBpZiAod2hlbiA9PSBFSVRIRVJfQ09ORklHIHx8IGxwdHItPmNvbmZpZ190aW1lID09IHdoZW4pIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsCisgICAgICAgICAgICBjaGFyIHRtcGJ1ZlsxXTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpwYXJzZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIkZvdW5kIGEgcGFyc2VyLiAgQ2FsbGluZyBpdDogJXMgLyAlc1xuIiwgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBjcHRyKSk7CiAgICAgICAgICAgICAvKgpAQCAtNTEyLDE3ICs1NTIsMTggQEAKICAgICAgICAgICAgICAqIFN0b21wIG9uIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGNwID0gJihjcHRyW3N0cmxlbihjcHRyKS0xXSk7Ci0gICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKSB7CisgICAgICAgICAgICB3aGlsZSAoKGNwID4gY3B0cikgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKmNwKSkpIHsKICAgICAgICAgICAgICAgICAqKGNwLS0pID0gJ1wwJzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICgqKGxwdHItPnBhcnNlX2xpbmUpKSAodG9rZW4sIGNwdHIpOwogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCI5OnJlYWRfY29uZmlnOnBhcnNlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaGFuZGxlciBub3QgcmVnaXN0ZXJlZCBmb3IgdGhpcyB0aW1lXG4iLCB0b2tlbikpOwogICAgIH0gZWxzZSBpZiAod2hlbiAhPSBQUkVNSUJfQ09ORklHICYmIAogCSAgICAgICAhbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCSAgICAgICBORVRTTk1QX0RTX0xJQl9OT19UT0tFTl9XQVJOSU5HUykpIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlVua25vd24gdG9rZW46ICVzLiIsIHRva2VuKTsKLSAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICBjb25maWdfcHdhcm4odG1wYnVmKTsKKwluZXRzbm1wX2NvbmZpZ193YXJuKCJVbmtub3duIHRva2VuOiAlcy4iLCB0b2tlbik7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKQEAgLTU0Myw3ICs1ODQsNyBAQAogaW50CiBzbm1wX2NvbmZpZ193aGVuKGNoYXIgKmxpbmUsIGludCB3aGVuKQogewotICAgIGNoYXIgICAgICAgICAgICpjcHRyLCBidWZbU1RSSU5HTUFYXSwgdG1wYnVmW1NUUklOR01BWF07CisgICAgY2hhciAgICAgICAgICAgKmNwdHIsIGJ1ZltTVFJJTkdNQVhdOwogICAgIHN0cnVjdCBjb25maWdfbGluZSAqbHB0ciA9IE5VTEw7CiAgICAgc3RydWN0IGNvbmZpZ19maWxlcyAqY3RtcCA9IGNvbmZpZ19maWxlczsKICAgICBjaGFyICAgICAgICAgICAqc3Q7CkBAIC01NTYsMjggKzU5NywxOSBAQAogICAgIHN0cmxjcHkoYnVmLCBsaW5lLCBTVFJJTkdNQVgpOwogICAgIGNwdHIgPSBzdHJ0b2tfcihidWYsIFNOTVBfQ09ORklHX0RFTElNRVRFUlMsICZzdCk7CiAgICAgaWYgKCFjcHRyKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJXcm9uZyBmb3JtYXQ6ICVzIiwgbGluZSk7Ci0gICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gJ1wwJzsKLSAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgICBuZXRzbm1wX2NvbmZpZ193YXJuKCJXcm9uZyBmb3JtYXQ6ICVzIiwgbGluZSk7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICB9CiAgICAgaWYgKGNwdHJbMF0gPT0gJ1snKSB7CiAgICAgICAgIGlmIChjcHRyW3N0cmxlbihjcHRyKSAtIDFdICE9ICddJykgewotICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgIm5vIG1hdGNoaW5nICddJyBmb3IgdHlwZSAlcy4iLAotICAgICAgICAgICAgICAgICAgICBjcHRyICsgMSk7Ci0gICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJubyBtYXRjaGluZyAnXScgZm9yIHR5cGUgJXMuIiwgY3B0ciArIDEpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgICAgICB9CiAgICAgICAgIGNwdHJbc3RybGVuKGNwdHIpIC0gMV0gPSAnXDAnOwogICAgICAgICBscHRyID0gcmVhZF9jb25maWdfZ2V0X2hhbmRsZXJzKGNwdHIgKyAxKTsKICAgICAgICAgaWYgKGxwdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCAgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAiTm8gaGFuZGxlcnMgcmVnZXN0ZXJlZCBmb3IgdHlwZSAlcy4iLAotICAgICAgICAgICAgICAgICAgICBjcHRyICsgMSk7Ci0gICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJObyBoYW5kbGVycyByZWdlc3RlcmVkIGZvciB0eXBlICVzLiIsCisJCQkJIGNwdHIgKyAxKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICAgICAgfQogICAgICAgICBjcHRyID0gc3RydG9rX3IoTlVMTCwgU05NUF9DT05GSUdfREVMSU1FVEVSUywgJnN0KTsKQEAgLTU5MSw5ICs2MjMsNyBAQAogICAgIH0KICAgICBpZiAobHB0ciA9PSBOVUxMICYmIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkJICBORVRTTk1QX0RTX0xJQl9OT19UT0tFTl9XQVJOSU5HUykpIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlVua25vd24gdG9rZW46ICVzLiIsIGNwdHIpOwotICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgIGNvbmZpZ19wd2Fybih0bXBidWYpOworCW5ldHNubXBfY29uZmlnX3dhcm4oIlVua25vd24gdG9rZW46ICVzLiIsIGNwdHIpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgfQogCkBAIC02MzIsOCArNjYyLDEwIEBACiAgICAgICAgIG1lbSA9ICYoKCptZW0pLT5uZXh0KTsKIAogICAgICptZW0gPSBTTk1QX01BTExPQ19TVFJVQ1QocmVhZF9jb25maWdfbWVtb3J5KTsKLSAgICBpZiAobGluZSkKLSAgICAgICAgKCptZW0pLT5saW5lID0gc3RyZHVwKGxpbmUpOworICAgIGlmICgqbWVtICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGxpbmUpCisgICAgICAgICAgICAoKm1lbSktPmxpbmUgPSBzdHJkdXAobGluZSk7CisgICAgfQogfQogCiB2b2lkCkBAIC02NjEsNyArNjkzLDcgQEAKICAgICBtZW0gPSAqbWVtcDsKIAogICAgIHdoaWxlIChtZW0pIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgInByb2Nlc3NpbmcgbWVtb3J5OiAlc1xuIiwgbWVtLT5saW5lKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzptZW0iLCAicHJvY2Vzc2luZyBtZW1vcnk6ICVzXG4iLCBtZW0tPmxpbmUpKTsKICAgICAgICAgc25tcF9jb25maWdfd2hlbihtZW0tPmxpbmUsIHdoZW4pOwogICAgICAgICBtZW0gPSBtZW0tPm5leHQ7CiAgICAgfQpAQCAtNzExLDIwICs3NDMsMjkgQEAKICAqCiAgKiBGb3IgZWFjaCBtYXRjaCwgY2hlY2sgdGhhdCA8d2hlbj4gaXMgdGhlIGRlc2lnbmF0ZWQgdGltZSBmb3IgdGhlCiAgKiA8bGluZV9oYW5kbGVyPiBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgbGluZS4KKyAqCisgKiBSZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBpZiB0aGUgZmlsZSBpcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5LgorICogUmV0dXJucyBTTk1QRVJSX0dFTkVSUiAgaWYgaXQgY2Fubm90LgorICogICAgTm90ZSB0aGF0IGluZGl2aWR1YWwgY29uZmlnIHRva2VuIGVycm9ycyBkbyBub3QgdHJpZ2dlciBTTk1QRVJSX0dFTkVSUgorICogICAgSXQncyBvbmx5IGlmIHRoZSB3aG9sZSBmaWxlIGNhbm5vdCBiZSBwcm9jZXNzZWQgZm9yIHNvbWUgcmVhc29uLgogICovCi12b2lkCitpbnQKIHJlYWRfY29uZmlnKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogICAgICAgICAgICAgc3RydWN0IGNvbmZpZ19saW5lICpsaW5lX2hhbmRsZXIsIGludCB3aGVuKQogeworICAgIHN0YXRpYyBpbnQgICAgICBkZXB0aCA9IDA7CisgICAgc3RhdGljIGludCAgICAgIGZpbGVzID0gMDsKKworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBwcmV2X2ZpbGVuYW1lID0gY3VyZmlsZW5hbWU7CisgICAgY29uc3QgdW5zaWduZWQgaW50IHByZXZfbGluZWNvdW50ID0gbGluZWNvdW50OwogCiAgICAgRklMRSAgICAgICAgICAgKmlmaWxlOwotICAgIGNoYXIgICAgICAgICAgICBsaW5lW1NUUklOR01BWF0sIHRva2VuW1NUUklOR01BWF0sIHRtcGJ1ZltTVFJJTkdNQVhdOwotICAgIGNoYXIgICAgICAgICAgICpjcHRyOwotICAgIGludCAgICAgICAgICAgICBpOwotICAgIHN0cnVjdCBjb25maWdfbGluZSAqbHB0cjsKKyAgICBjaGFyICAgICAgICAgICAqbGluZSA9IE5VTEw7ICAvKiBjdXJyZW50IGxpbmUgYnVmZmVyICovCisgICAgc2l6ZV90ICAgICAgICAgIGxpbmVzaXplID0gMDsgLyogYWxsb2NhdGVkIHNpemUgb2YgbGluZSAqLwogCi0gICAgbGluZWNvdW50ID0gMDsKLSAgICBjdXJmaWxlbmFtZSA9IGZpbGVuYW1lOworICAgIC8qIHJlc2V0IGZpbGUgY291bnRlciB3aGVuIHJlY3Vyc2lvbiBkZXB0aCBpcyAwICovCisgICAgaWYgKGRlcHRoID09IDApCisgICAgICAgIGZpbGVzID0gMDsKIAogICAgIGlmICgoaWZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKSkgPT0gTlVMTCkgewogI2lmZGVmIEVOT0VOVApAQCAtNzM5LDUxICs3ODAsOTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwogICAgICAgICB9IGVsc2UKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRUFDQ0VTICovCi0jaWYgZGVmaW5lZChFTk9FTlQpIHx8IGRlZmluZWQoRUFDQ0VTKQogICAgICAgICB7CiAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoZmlsZW5hbWUpOwogICAgICAgICB9Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQoRU5PRU5UKSB8fCBkZWZpbmVkKEVBQ0NFUykgKi8KLSAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcihmaWxlbmFtZSk7Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVOT0VOVCAqLwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgIlJlYWRpbmcgY29uZmlndXJhdGlvbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KIAotICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGlmaWxlKSAhPSBOVUxMKSB7Ci0gICAgICAgIGxwdHIgPSBsaW5lX2hhbmRsZXI7Ci0gICAgICAgIGxpbmVjb3VudCsrOwotICAgICAgICBjcHRyID0gbGluZTsKLSAgICAgICAgaSA9IHN0cmxlbihsaW5lKSAtIDE7Ci0gICAgICAgIGlmIChsaW5lW2ldID09ICdcbicpCi0gICAgICAgICAgICBsaW5lW2ldID0gMDsKKyNkZWZpbmUgQ09ORklHX01BWF9GSUxFUyA0MDk2CisgICAgaWYgKGZpbGVzID4gQ09ORklHX01BWF9GSUxFUykgeworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigibWF4aW11bSBjb25mIGZpbGUgY291bnQgKCVkKSBleGNlZWRlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORklHX01BWF9GSUxFUyk7CisJZmNsb3NlKGlmaWxlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKyNkZWZpbmUgQ09ORklHX01BWF9SRUNVUlNFX0RFUFRIIDE2CisgICAgaWYgKGRlcHRoID4gQ09ORklHX01BWF9SRUNVUlNFX0RFUFRIKSB7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJuZXN0ZWQgaW5jbHVkZSBkZXB0aCA+ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSUdfTUFYX1JFQ1VSU0VfREVQVEgpOworCWZjbG9zZShpZmlsZSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBsaW5lY291bnQgPSAwOworICAgIGN1cmZpbGVuYW1lID0gZmlsZW5hbWU7CisKKyAgICArK2ZpbGVzOworICAgICsrZGVwdGg7CisKKyAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6ZmlsZSIsICJSZWFkaW5nIGNvbmZpZ3VyYXRpb24gJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSwgd2hlbikpOworCisgICAgd2hpbGUgKGlmaWxlKSB7CisgICAgICAgIHNpemVfdCAgICAgICAgICAgICAgbGluZWxlbiA9IDA7IC8qIHN0cmxlbiBvZiB0aGUgY3VycmVudCBsaW5lICovCisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAqY3B0cjsKKyAgICAgICAgc3RydWN0IGNvbmZpZ19saW5lICpscHRyID0gbGluZV9oYW5kbGVyOworCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlmIChsaW5lc2l6ZSA8PSBsaW5lbGVuICsgMSkgeworICAgICAgICAgICAgICAgIGNoYXIgKnRtcCA9IHJlYWxsb2MobGluZSwgbGluZXNpemUgKyAyNTYpOworICAgICAgICAgICAgICAgIGlmICh0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgbGluZXNpemUgKz0gMjU2OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGlmaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmZ2V0cyhsaW5lICsgbGluZWxlbiwgbGluZXNpemUgLSBsaW5lbGVuLCBpZmlsZSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGxpbmVbbGluZWxlbl0gPSAnXDAnOworICAgICAgICAgICAgICAgIGZjbG9zZSAoaWZpbGUpOworICAgICAgICAgICAgICAgIGlmaWxlID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGluZWxlbiArPSBzdHJsZW4obGluZSArIGxpbmVsZW4pOworCisgICAgICAgICAgICBpZiAobGluZVtsaW5lbGVuIC0gMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgICBsaW5lW2xpbmVsZW4gLSAxXSA9ICdcMCc7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsaW5lY291bnQ7CisgICAgICAgIERFQlVHTVNHVEwoKCI5OnJlYWRfY29uZmlnOmxpbmUiLCAiJXM6JWQgZXhhbWluaW5nOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVjb3VudCwgbGluZSkpOwogICAgICAgICAvKgogICAgICAgICAgKiBjaGVjayBibGFuayBsaW5lIG9yICMgY29tbWVudCAKICAgICAgICAgICovCi0gICAgICAgIGlmICgoY3B0ciA9IHNraXBfd2hpdGUoY3B0cikpKSB7CisgICAgICAgIGlmICgoY3B0ciA9IHNraXBfd2hpdGUobGluZSkpKSB7CisgICAgICAgICAgICBjaGFyIHRva2VuW1NUUklOR01BWF07CisKICAgICAgICAgICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIHRva2VuLCBzaXplb2YodG9rZW4pKTsKICAgICAgICAgICAgIGlmICh0b2tlblswXSA9PSAnWycpIHsKICAgICAgICAgICAgICAgICBpZiAodG9rZW5bc3RybGVuKHRva2VuKSAtIDFdICE9ICddJykgewotICAgICAgICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBtYXRjaGluZyAnXScgZm9yIHR5cGUgJXMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9rZW5bMV0pOwotICAgICAgICAgICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkJICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJubyBtYXRjaGluZyAnXScgZm9yIHR5cGUgJXMuIiwKKwkJCQkJICZ0b2tlblsxXSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0b2tlbltzdHJsZW4odG9rZW4pIC0gMV0gPSAnXDAnOwogICAgICAgICAgICAgICAgIGxwdHIgPSByZWFkX2NvbmZpZ19nZXRfaGFuZGxlcnMoJnRva2VuWzFdKTsKICAgICAgICAgICAgICAgICBpZiAobHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGhhbmRsZXJzIHJlZ2VzdGVyZWQgZm9yIHR5cGUgJXMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9rZW5bMV0pOwotICAgICAgICAgICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkJICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJObyBoYW5kbGVycyByZWdlc3RlcmVkIGZvciB0eXBlICVzLiIsCisJCQkJCSAmdG9rZW5bMV0pOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6Y29udGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN3aXRjaGluZyB0byBuZXcgY29udGV4dDogJXMlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNwdHIpID8gIih0aGlzIGxpbmUgb25seSkgIiA6ICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9rZW5bMV0pKTsKQEAgLTc5OSwyMyArODgyLDEwNyBAQAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgdG9rZW4sIHNpemVvZih0b2tlbikpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRva2VuWzBdID09ICdpJykgJiYgKHN0cm5jYXNlY21wKHRva2VuLCJpbmNsdWRlIiwgNyApPT0wKSkgeworICAgICAgICAgICAgICAgIGlmICggc3RyY2FzZWNtcCggdG9rZW4sICJpbmNsdWRlIiApPT0wKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3aGVuICE9IFBSRU1JQl9DT05GSUcgJiYgCisJICAgICAgICAgICAgICAgICFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisJCQkJICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX05PX1RPS0VOX1dBUk5JTkdTKSkgeworCSAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ193YXJuKCJBbWJpZ3VvdXMgdG9rZW4gJyVzJyAtIHVzZSAnaW5jbHVkZVNlYXJjaCcgKG9yICdpbmNsdWRlRmlsZScpIGluc3RlYWQuIiwgdG9rZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIHRva2VuLCAiaW5jbHVkZWRpciIgKT09MCkgeworICAgICAgICAgICAgICAgICAgICBESVIgKmQ7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQgKmVudHJ5OworICAgICAgICAgICAgICAgICAgICBjaGFyICBmbmFtZVtTTk1QX01BWFBBVEhdOworICAgICAgICAgICAgICAgICAgICBpbnQgICBsZW47CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNwdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdoZW4gIT0gUFJFTUlCX0NPTkZJRykKKwkJICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkJsYW5rIGxpbmUgZm9sbG93aW5nICVzIHRva2VuLiIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgoZD1vcGVuZGlyKGNwdHIpKSA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdoZW4gIT0gUFJFTUlCX0NPTkZJRykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQ2FuJ3Qgb3BlbiBpbmNsdWRlIGRpciAnJXMnLiIsIGNwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChlbnRyeSA9IHJlYWRkaXIoIGQgKSkgIT0gTlVMTCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZW50cnktPmRfbmFtZVswXSAhPSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBOQU1MRU4oZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobGVuID4gNSkgJiYgKHN0cmNtcCgmKGVudHJ5LT5kX25hbWVbbGVuLTVdKSwiLmNvbmYiKSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihmbmFtZSwgU05NUF9NQVhQQVRILCAiJXMvJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHRyLCBlbnRyeS0+ZF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpcmVhZF9jb25maWcoZm5hbWUsIGxpbmVfaGFuZGxlciwgd2hlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyKGQpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0b2tlbiwgImluY2x1ZGVmaWxlIiApPT0wKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgIGZuYW1lW1NOTVBfTUFYUEFUSF0sICpjcDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2hlbiAhPSBQUkVNSUJfQ09ORklHKQorCQkgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQmxhbmsgbGluZSBmb2xsb3dpbmcgJXMgdG9rZW4uIiwgdG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjcHRyWzBdID09ICcvJyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxjcHkoZm5hbWUsIGNwdHIsIFNOTVBfTUFYUEFUSCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJsY3B5KGZuYW1lLCBmaWxlbmFtZSwgU05NUF9NQVhQQVRIKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwID0gc3RycmNocihmbmFtZSwgJy8nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWVbMF0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKytjcCkgPSAnXDAnOworICAgICAgICAgICAgICAgICAgICAgICAgc3RybGNhdChmbmFtZSwgY3B0ciwgU05NUF9NQVhQQVRIKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jb25maWcoZm5hbWUsIGxpbmVfaGFuZGxlciwgd2hlbikgIT0KKyAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfU1VDQ0VTUyAmJiB3aGVuICE9IFBSRU1JQl9DT05GSUcpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiSW5jbHVkZWQgZmlsZSAnJXMnIG5vdCBmb3VuZC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0b2tlbiwgImluY2x1ZGVzZWFyY2giICk9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbmZpZ19maWxlcyBjdG1wOworICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCByZXQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNwdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdoZW4gIT0gUFJFTUlCX0NPTkZJRykKKwkJICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkJsYW5rIGxpbmUgZm9sbG93aW5nICVzIHRva2VuLiIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0cmxlbihjcHRyKTsKKyAgICAgICAgICAgICAgICAgICAgY3RtcC5maWxlSGVhZGVyID0gY3B0cjsKKyAgICAgICAgICAgICAgICAgICAgY3RtcC5zdGFydCA9IGxpbmVfaGFuZGxlcjsKKyAgICAgICAgICAgICAgICAgICAgY3RtcC5uZXh0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPiA1KSAmJiAoc3RyY21wKCZjcHRyW2xlbi01XSwiLmNvbmYiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgY3B0cltsZW4tNV0gPSAwOyAvKiBjaG9wIG9mZiAuY29uZiAqLworICAgICAgICAgICAgICAgICAgICByZXQgPSByZWFkX2NvbmZpZ19maWxlc19vZl90eXBlKHdoZW4sJmN0bXApOworICAgICAgICAgICAgICAgICAgICBpZiAoKGxlbiA+IDUpICYmIChjcHRyW2xlbi01XSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgY3B0cltsZW4tNV0gPSAnLic7IC8qIHJlc3RvcmUgLmNvbmYgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCggcmV0ICE9IFNOTVBFUlJfU1VDQ0VTUyApICYmICh3aGVuICE9IFBSRU1JQl9DT05GSUcpKQorCQkgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJJbmNsdWRlZCBjb25maWcgJyVzJyBub3QgZm91bmQuIiwgY3B0cik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxwdHIgPSBsaW5lX2hhbmRsZXI7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBscHRyID0gbGluZV9oYW5kbGVyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNwdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAiQmxhbmsgbGluZSBmb2xsb3dpbmcgJXMgdG9rZW4uIiwgdG9rZW4pOwotICAgICAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJCW5ldHNubXBfY29uZmlnX2Vycm9yKCJCbGFuayBsaW5lIGZvbGxvd2luZyAlcyB0b2tlbi4iLCB0b2tlbik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICIlczolZCBleGFtaW5pbmc6ICVzXG4iLAorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpsaW5lIiwgIiVzOiVkIGV4YW1pbmluZzogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVjb3VudCwgbGluZSkpOwogICAgICAgICAgICAgICAgIHJ1bl9jb25maWdfaGFuZGxlcihscHRyLCB0b2tlbiwgY3B0ciwgd2hlbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZmNsb3NlKGlmaWxlKTsKLSAgICByZXR1cm47CisgICAgZnJlZShsaW5lKTsKKyAgICBsaW5lY291bnQgPSBwcmV2X2xpbmVjb3VudDsKKyAgICBjdXJmaWxlbmFtZSA9IHByZXZfZmlsZW5hbWU7CisgICAgLS1kZXB0aDsKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCByZWFkX2NvbmZpZygpICovCiAKQEAgLTgzMywxNSArMTAwMCwyMSBAQAogICAgICAgICAgICAgICAgICgqKGx0bXAtPmZyZWVfZnVuYykpICgpOwogfQogCi12b2lkCisvKgorICogUmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyBpZiBhbnkgY29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQKKyAqIFJldHVybiBTTk1QRVJSX0dFTkVSUiBpZiBfbm9fIGNvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2VkCisgKiAgICBXaGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgYW4gZXJyb3IgaXMgbGVmdCB0byB0aGUgYXBwbGljYXRpb24KKyAqLworaW50CiByZWFkX2NvbmZpZ3Nfb3B0aW9uYWwoY29uc3QgY2hhciAqb3B0aW9uYWxfY29uZmlnLCBpbnQgd2hlbikKIHsKICAgICBjaGFyICpuZXdwLCAqY3AsICpzdCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgICByZXQgPSBTTk1QRVJSX0dFTkVSUjsKICAgICBjaGFyICp0eXBlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOwogCiAgICAgaWYgKChOVUxMID09IG9wdGlvbmFsX2NvbmZpZykgfHwgKE5VTEwgPT0gdHlwZSkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJldDsKIAogICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZ3Nfb3B0aW9uYWwiLAogICAgICAgICAgICAgICAgICJyZWFkaW5nIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG9rZW5zIGZvciAlc1xuIiwgdHlwZSkpOwpAQCAtODU1LDE0ICsxMDI4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiT3B0aW9uYWwgRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QuXG4iLCBjcCkpOwogICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKGNwKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsCisgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6b3B0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJSZWFkaW5nIG9wdGlvbmFsIGNvbmZpZyBmaWxlOiBcIiVzXCJcbiIsIGNwKSk7Ci0gICAgICAgICAgICByZWFkX2NvbmZpZ193aXRoX3R5cGVfd2hlbihjcCwgdHlwZSwgd2hlbik7CisgICAgICAgICAgICBpZiAoIHJlYWRfY29uZmlnX3dpdGhfdHlwZV93aGVuKGNwLCB0eXBlLCB3aGVuKSA9PSBTTk1QRVJSX1NVQ0NFU1MgKQorICAgICAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICAgICAgfQogICAgICAgICBjcCA9IHN0cnRva19yKE5VTEwsICIsIiwgJnN0KTsKICAgICB9CiAgICAgZnJlZShuZXdwKTsKLSAgICAKKyAgICByZXR1cm4gcmV0OwogfQogCiB2b2lkCkBAIC04NzEsMjAgKzEwNDUsMjMgQEAKICAgICBjaGFyICpvcHRpb25hbF9jb25maWcgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkJICAgICAgIE5FVFNOTVBfRFNfTElCX09QVElPTkFMQ09ORklHKTsKIAorICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19MSUJSQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19QUkVfUkVBRF9DT05GSUcsIE5VTEwpOworCiAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgInJlYWRpbmcgbm9ybWFsIGNvbmZpZ3VyYXRpb24gdG9rZW5zXG4iKSk7CiAKICAgICBpZiAoKE5VTEwgIT0gb3B0aW9uYWxfY29uZmlnKSAmJiAoKm9wdGlvbmFsX2NvbmZpZyA9PSAnLScpKSB7Ci0gICAgICAgIHJlYWRfY29uZmlnc19vcHRpb25hbCgrK29wdGlvbmFsX2NvbmZpZywgTk9STUFMX0NPTkZJRyk7CisgICAgICAgICh2b2lkKXJlYWRfY29uZmlnc19vcHRpb25hbCgrK29wdGlvbmFsX2NvbmZpZywgTk9STUFMX0NPTkZJRyk7CiAgICAgICAgIG9wdGlvbmFsX2NvbmZpZyA9IE5VTEw7IC8qIGNsZWFyLCBzbyB3ZSBkb24ndCByZWFkIHRoZW0gdHdpY2UgKi8KICAgICB9CiAKLSAgICByZWFkX2NvbmZpZ19maWxlcyhOT1JNQUxfQ09ORklHKTsKKyAgICAodm9pZClyZWFkX2NvbmZpZ19maWxlcyhOT1JNQUxfQ09ORklHKTsKIAogICAgIC8qCiAgICAgICogZG8gdGhpcyBldmVuIHdoZW4gdGhlIG5vcm1hbCBhYm92ZSB3YXNuJ3QgZG9uZSAKICAgICAgKi8KICAgICBpZiAoTlVMTCAhPSBvcHRpb25hbF9jb25maWcpCi0gICAgICAgIHJlYWRfY29uZmlnc19vcHRpb25hbChvcHRpb25hbF9jb25maWcsIE5PUk1BTF9DT05GSUcpOworICAgICAgICAodm9pZClyZWFkX2NvbmZpZ3Nfb3B0aW9uYWwob3B0aW9uYWxfY29uZmlnLCBOT1JNQUxfQ09ORklHKTsKIAogICAgIG5ldHNubXBfY29uZmlnX3Byb2Nlc3NfbWVtb3JpZXNfd2hlbihOT1JNQUxfQ09ORklHLCAxKTsKIApAQCAtOTAwLDE3ICsxMDc3LDIwIEBACiAgICAgY2hhciAqb3B0aW9uYWxfY29uZmlnID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJCSAgICAgICBORVRTTk1QX0RTX0xJQl9PUFRJT05BTENPTkZJRyk7CiAKKyAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfUFJFX1BSRU1JQl9SRUFEX0NPTkZJRywgTlVMTCk7CisKICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAicmVhZGluZyBwcmVtaWIgY29uZmlndXJhdGlvbiB0b2tlbnNcbiIpKTsKIAogICAgIGlmICgoTlVMTCAhPSBvcHRpb25hbF9jb25maWcpICYmICgqb3B0aW9uYWxfY29uZmlnID09ICctJykpIHsKLSAgICAgICAgcmVhZF9jb25maWdzX29wdGlvbmFsKCsrb3B0aW9uYWxfY29uZmlnLCBQUkVNSUJfQ09ORklHKTsKKyAgICAgICAgKHZvaWQpcmVhZF9jb25maWdzX29wdGlvbmFsKCsrb3B0aW9uYWxfY29uZmlnLCBQUkVNSUJfQ09ORklHKTsKICAgICAgICAgb3B0aW9uYWxfY29uZmlnID0gTlVMTDsgLyogY2xlYXIsIHNvIHdlIGRvbid0IHJlYWQgdGhlbSB0d2ljZSAqLwogICAgIH0KIAotICAgIHJlYWRfY29uZmlnX2ZpbGVzKFBSRU1JQl9DT05GSUcpOworICAgICh2b2lkKXJlYWRfY29uZmlnX2ZpbGVzKFBSRU1JQl9DT05GSUcpOwogCiAgICAgaWYgKE5VTEwgIT0gb3B0aW9uYWxfY29uZmlnKQotICAgICAgICByZWFkX2NvbmZpZ3Nfb3B0aW9uYWwob3B0aW9uYWxfY29uZmlnLCBQUkVNSUJfQ09ORklHKTsKKyAgICAgICAgKHZvaWQpcmVhZF9jb25maWdzX29wdGlvbmFsKG9wdGlvbmFsX2NvbmZpZywgUFJFTUlCX0NPTkZJRyk7CiAKICAgICBuZXRzbm1wX2NvbmZpZ19wcm9jZXNzX21lbW9yaWVzX3doZW4oUFJFTUlCX0NPTkZJRywgMCk7CiAKQEAgLTk0OCw3ICsxMTI4LDcgQEAKICAqIFdlIGFsd2F5cyByZXRyaWV2ZSBpdCBuZXcsIHNpbmNlIHdlIGhhdmUgdG8gZG8gaXQgYW55d2F5IGlmIGl0IGlzIGp1c3Qgc2V0LgogICovCiBjb25zdCBjaGFyICAgICAqCi1nZXRfY29uZmlndXJhdGlvbl9kaXJlY3RvcnkoKQorZ2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5KHZvaWQpCiB7CiAgICAgY2hhciAgICAgICAgICAgIGRlZmF1bHRQYXRoW1NQUklOVF9NQVhfTEVOXTsKICAgICBjaGFyICAgICAgICAgICAqaG9tZXBhdGg7CkBAIC05OTYsNyArMTE3Niw3IEBACiAgKiBXZSBhbHdheXMgcmV0cmlldmUgaXQgbmV3LCBzaW5jZSB3ZSBoYXZlIHRvIGRvIGl0IGFueXdheSBpZiBpdCBpcyBqdXN0IHNldC4KICAqLwogY29uc3QgY2hhciAgICAgKgotZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCkKK2dldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSh2b2lkKQogewogICAgIGlmIChOVUxMID09IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCSAgICAgIE5FVFNOTVBfRFNfTElCX1BFUlNJU1RFTlRfRElSKSkgewpAQCAtMTAzNiw3ICsxMjE2LDcgQEAKICAqIFdlIGFsd2F5cyByZXRyaWV2ZSBpdCBuZXcsIHNpbmNlIHdlIGhhdmUgdG8gZG8gaXQgYW55d2F5IGlmIGl0IGlzIGp1c3Qgc2V0LgogICovCiBjb25zdCBjaGFyICAgICAqCi1nZXRfdGVtcF9maWxlX3BhdHRlcm4oKQorZ2V0X3RlbXBfZmlsZV9wYXR0ZXJuKHZvaWQpCiB7CiAgICAgaWYgKE5VTEwgPT0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJICAgICAgTkVUU05NUF9EU19MSUJfVEVNUF9GSUxFX1BBVFRFUk4pKSB7CkBAIC0xMDQ4LDggKzEyMjgsMTIgQEAKIAogLyoqCiAgKiB1dGlsaXR5IHJvdXRpbmUgZm9yIHJlYWRfY29uZmlnX2ZpbGVzCisgKgorICogUmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyBpZiBhbnkgY29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQKKyAqIFJldHVybiBTTk1QRVJSX0dFTkVSUiBpZiBfbm9fIGNvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2VkCisgKiAgICBXaGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgYW4gZXJyb3IgaXMgbGVmdCB0byB0aGUgYXBwbGljYXRpb24KICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGNvbmZpZ19maWxlcyAqY3RtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoZW4sIGNvbnN0IGNoYXIgKnBlcnNwYXRoLCBjb25zdCBjaGFyICpwZXJzZmlsZSkKIHsKQEAgLTEwNTcsMTMgKzEyNDEsMTQgQEAKICAgICBjaGFyICAgICAgICAgICAgY29uZmlnZmlsZVszMDBdOwogICAgIGNoYXIgICAgICAgICAgICpjcHRyMSwgKmNwdHIyLCAqZW52Y29uZnBhdGg7CiAgICAgc3RydWN0IHN0YXQgICAgIHN0YXRidWY7CisgICAgaW50ICAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfR0VORVJSOwogCiAgICAgaWYgKChOVUxMID09IHBhdGgpIHx8IChOVUxMID09IGN0bXApKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKIAogICAgIGVudmNvbmZwYXRoID0gc3RyZHVwKHBhdGgpOwogCi0gICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgIiBjb25maWcgcGF0aCB1c2VkIGZvciAlczolcyAocGVyc2lzdGVudCBwYXRoOiVzKVxuIiwKKyAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6cGF0aCIsICIgY29uZmlnIHBhdGggdXNlZCBmb3IgJXM6JXMgKHBlcnNpc3RlbnQgcGF0aDolcylcbiIsCiAgICAgICAgICAgICAgICAgY3RtcC0+ZmlsZUhlYWRlciwgZW52Y29uZnBhdGgsIHBlcnNwYXRoKSk7CiAgICAgY3B0cjEgPSBjcHRyMiA9IGVudmNvbmZwYXRoOwogICAgIGRvbmUgPSAwOwpAQCAtMTA3NSwxMiArMTI2MCwxMiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICAqY3B0cjEgPSAwOwogCi0gICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICIgY29uZmlnIGRpcjogJXNcbiIsIGNwdHIyICkpOworICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6ZGlyIiwgIiBjb25maWcgZGlyOiAlc1xuIiwgY3B0cjIgKSk7CiAgICAgICAgIGlmIChzdGF0KGNwdHIyLCAmc3RhdGJ1ZikgIT0gMCkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIERpcmVjdG9yeSBub3QgdGhlcmUsIGNvbnRpbnVlIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAiIERpcmVjdG9yeSBub3QgcHJlc2VudDogJXNcbiIsIGNwdHIyICkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOmRpciIsICIgRGlyZWN0b3J5IG5vdCBwcmVzZW50OiAlc1xuIiwgY3B0cjIgKSk7CiAgICAgICAgICAgICBjcHRyMiA9ICsrY3B0cjE7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMTA4OSwxNCArMTI3NCwxNCBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIE5vdCBhIGRpcmVjdG9yeSwgY29udGludWUgCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICIgTm90IGEgZGlyZWN0b3J5OiAlc1xuIiwgY3B0cjIgKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6ZGlyIiwgIiBOb3QgYSBkaXJlY3Rvcnk6ICVzXG4iLCBjcHRyMiApKTsKICAgICAgICAgICAgIGNwdHIyID0gKytjcHRyMTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICAvKgotICAgICAgICAgKiBmb3IgcHJvcGVyIHBlcnNpc3RlbnQgc3RvcmFnZSByZXRyaXZhbCwgd2UgbmVlZCB0byByZWFkIG9sZCBiYWNrdXAKKyAgICAgICAgICogZm9yIHByb3BlciBwZXJzaXN0ZW50IHN0b3JhZ2UgcmV0cmlldmFsLCB3ZSBuZWVkIHRvIHJlYWQgb2xkIGJhY2t1cAogICAgICAgICAgKiBjb3BpZXMgb2YgdGhlIHByZXZpb3VzIHN0b3JhZ2UgZmlsZXMuICBJZiB0aGUgYXBwbGljYXRpb24gaW4KICAgICAgICAgICogcXVlc3Rpb24gaGFzIGRpZWQgd2l0aG91dCB0aGUgcHJvcGVyIGNhbGwgdG8gc25tcF9jbGVhbl9wZXJzaXN0ZW50LAogICAgICAgICAgKiB0aGVuIHdlIHJlYWQgYWxsIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHdlIGNhbiwgc3RhcnRpbmcgd2l0aApAQCAtMTEwNSw2ICsxMjkwLDcgQEAKICAgICAgICAgaWYgKHN0cm5jbXAoY3B0cjIsIHBlcnNwYXRoLCBzdHJsZW4ocGVyc3BhdGgpKSA9PSAwIHx8CiAgICAgICAgICAgICAocGVyc2ZpbGUgIT0gTlVMTCAmJgogICAgICAgICAgICAgIHN0cm5jbXAoY3B0cjIsIHBlcnNmaWxlLCBzdHJsZW4ocGVyc2ZpbGUpKSA9PSAwKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOnBlcnNpc3QiLCAiIHBlcnNpc3QgZGlyOiAlc1xuIiwgY3B0cjIgKSk7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogbGltaXQgdGhpcyB0byB0aGUga25vd24gc3RvcmFnZSBkaXJlY3Rvcnkgb25seSAKICAgICAgICAgICAgICAqLwpAQCAtMTEyNSwxOCArMTMxMSwyMSBAQAogICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWdfZmlsZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2xkIGNvbmZpZyBmaWxlIGZvdW5kOiAlcywgcGFyc2luZ1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnZmlsZSkpOwotICAgICAgICAgICAgICAgICAgICByZWFkX2NvbmZpZyhjb25maWdmaWxlLCBjdG1wLT5zdGFydCwgd2hlbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NvbmZpZyhjb25maWdmaWxlLCBjdG1wLT5zdGFydCwgd2hlbikgPT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9TVUNDRVNTOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzbnByaW50Zihjb25maWdmaWxlLCBzaXplb2YoY29uZmlnZmlsZSksCiAgICAgICAgICAgICAgICAgICIlcy8lcy5jb25mIiwgY3B0cjIsIGN0bXAtPmZpbGVIZWFkZXIpOwogICAgICAgICBjb25maWdmaWxlWyBzaXplb2YoY29uZmlnZmlsZSktMSBdID0gMDsKLSAgICAgICAgcmVhZF9jb25maWcoY29uZmlnZmlsZSwgY3RtcC0+c3RhcnQsIHdoZW4pOworICAgICAgICBpZiAocmVhZF9jb25maWcoY29uZmlnZmlsZSwgY3RtcC0+c3RhcnQsIHdoZW4pID09IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICAgICAgc25wcmludGYoY29uZmlnZmlsZSwgc2l6ZW9mKGNvbmZpZ2ZpbGUpLAogICAgICAgICAgICAgICAgICAiJXMvJXMubG9jYWwuY29uZiIsIGNwdHIyLCBjdG1wLT5maWxlSGVhZGVyKTsKICAgICAgICAgY29uZmlnZmlsZVsgc2l6ZW9mKGNvbmZpZ2ZpbGUpLTEgXSA9IDA7Ci0gICAgICAgIHJlYWRfY29uZmlnKGNvbmZpZ2ZpbGUsIGN0bXAtPnN0YXJ0LCB3aGVuKTsKKyAgICAgICAgaWYgKHJlYWRfY29uZmlnKGNvbmZpZ2ZpbGUsIGN0bXAtPnN0YXJ0LCB3aGVuKSA9PSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICByZXQgPSBTTk1QRVJSX1NVQ0NFU1M7CiAKICAgICAgICAgaWYoZG9uZSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE0NCw2ICsxMzMzLDcgQEAKICAgICAgICAgY3B0cjIgPSArK2NwdHIxOwogICAgIH0KICAgICBTTk1QX0ZSRUUoZW52Y29uZnBhdGgpOworICAgIHJldHVybiByZXQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCkBAIC0xMTc0LDIzICsxMzY0LDIzIEBACiAgKgogICoKICAqIEVYSVRzIGlmIGFueSAnY29uZmlnX2Vycm9ycycgYXJlIGxvZ2dlZCB3aGlsZSBwYXJzaW5nIGNvbmZpZyBmaWxlIGxpbmVzLgorICoKKyAqIFJldHVybiBTTk1QRVJSX1NVQ0NFU1MgaWYgYW55IGNvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2VkCisgKiBSZXR1cm4gU05NUEVSUl9HRU5FUlIgaWYgX25vXyBjb25maWcgZmlsZXMgYXJlIHByb2Nlc3NlZAorICogICAgV2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IGFuIGVycm9yIGlzIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uCiAgKi8KLXZvaWQKLXJlYWRfY29uZmlnX2ZpbGVzKGludCB3aGVuKQoraW50CityZWFkX2NvbmZpZ19maWxlc19vZl90eXBlKGludCB3aGVuLCBzdHJ1Y3QgY29uZmlnX2ZpbGVzICpjdG1wKQogewogICAgIGNvbnN0IGNoYXIgICAgICpjb25mcGF0aCwgKnBlcnNmaWxlLCAqZW52Y29uZnBhdGg7CiAgICAgY2hhciAgICAgICAgICAgKnBlcnNwYXRoOwotICAgIHN0cnVjdCBjb25maWdfZmlsZXMgKmN0bXAgPSBjb25maWdfZmlsZXM7CisgICAgaW50ICAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfR0VORVJSOwogCiAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RPTlRfUEVSU0lTVF9TVEFURSkKLSAgICAgfHwgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRElTQUJMRV9DT05GSUdfTE9BRCkpIHJldHVybjsKLQotICAgIGNvbmZpZ19lcnJvcnMgPSAwOwotCi0gICAgaWYgKHdoZW4gPT0gUFJFTUlCX0NPTkZJRykKLSAgICAgICAgZnJlZV9jb25maWcoKTsKKyAgICAgICAgfHwgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRElTQUJMRV9DT05GSUdfTE9BRCkKKyAgICAgICAgfHwgKE5VTEwgPT0gY3RtcCkpIHJldHVybiByZXQ7CiAKICAgICAvKgogICAgICAqIHRoZXNlIHNob3VsZG4ndCBjaGFuZ2UKQEAgLTExOTksMTAgKzEzODksNiBAQAogICAgIHBlcnNmaWxlID0gbmV0c25tcF9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9GSUxFIik7CiAgICAgZW52Y29uZnBhdGggPSBuZXRzbm1wX2dldGVudigiU05NUENPTkZQQVRIIik7CiAKLSAgICAvKgotICAgICAqIHJlYWQgYWxsIGNvbmZpZyBmaWxlIHR5cGVzIAotICAgICAqLwotICAgIGZvciAoOyBjdG1wICE9IE5VTEw7IGN0bXAgPSBjdG1wLT5uZXh0KSB7CiAKICAgICAgICAgLyoKICAgICAgICAgICogcmVhZCB0aGUgY29uZmlnIGZpbGVzLiBzdHJkdXAoKSB0aGUgcmVzdWx0IG9mCkBAIC0xMjE2LDI3ICsxNDAyLDU2IEBACiAgICAgICAgICAgICAgKiBwZXJzaXN0ZW50IHBhdGggY2FuIGNoYW5nZSB2aWEgY29uZiBmaWxlLiBUaGVuIGdldCB0aGUKICAgICAgICAgICAgICAqIGN1cnJlbnQgcGVyc2lzdGVudCBkaXJlY3RvcnksIGFuZCByZWFkIGZpbGVzIHRoZXJlLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKGNvbmZwYXRoLCBjdG1wLCB3aGVuLCBwZXJzcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2ZpbGUpOworICAgICAgICAgICAgaWYgKCByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKGNvbmZwYXRoLCBjdG1wLCB3aGVuLCBwZXJzcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2ZpbGUpID09IFNOTVBFUlJfU1VDQ0VTUyApCisgICAgICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9TVUNDRVNTOwogICAgICAgICAgICAgZnJlZShwZXJzcGF0aCk7CiAgICAgICAgICAgICBwZXJzcGF0aCA9IHN0cmR1cChnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSk7Ci0gICAgICAgICAgICByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKHBlcnNwYXRoLCBjdG1wLCB3aGVuLCBwZXJzcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2ZpbGUpOworICAgICAgICAgICAgaWYgKCByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKHBlcnNwYXRoLCBjdG1wLCB3aGVuLCBwZXJzcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2ZpbGUpID09IFNOTVBFUlJfU1VDQ0VTUyApCisgICAgICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9TVUNDRVNTOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIG9ubHkgcmVhZCBwYXRoIHNwZWNpZmllZCBieSB1c2VyCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgoZW52Y29uZnBhdGgsIGN0bXAsIHdoZW4sIHBlcnNwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzZmlsZSk7CisgICAgICAgICAgICBpZiAoIHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgoZW52Y29uZnBhdGgsIGN0bXAsIHdoZW4sIHBlcnNwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzZmlsZSkgPT0gU05NUEVSUl9TVUNDRVNTICkKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgICAgIH0KICAgICAgICAgZnJlZShwZXJzcGF0aCk7CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gU05NUEVSUl9TVUNDRVNTIGlmIGFueSBjb25maWcgZmlsZXMgYXJlIHByb2Nlc3NlZAorICogUmV0dXJuIFNOTVBFUlJfR0VORVJSIGlmIF9ub18gY29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQKKyAqICAgIFdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSBhbiBlcnJvciBpcyBsZWZ0IHRvIHRoZSBhcHBsaWNhdGlvbgorICovCitpbnQKK3JlYWRfY29uZmlnX2ZpbGVzKGludCB3aGVuKSB7CisKKyAgICBzdHJ1Y3QgY29uZmlnX2ZpbGVzICpjdG1wID0gY29uZmlnX2ZpbGVzOworICAgIGludCAgICAgICAgICAgICAgICAgIHJldCAgPSBTTk1QRVJSX0dFTkVSUjsKKworICAgIGNvbmZpZ19lcnJvcnMgPSAwOworCisgICAgaWYgKHdoZW4gPT0gUFJFTUlCX0NPTkZJRykKKyAgICAgICAgZnJlZV9jb25maWcoKTsKKworICAgIC8qCisgICAgICogcmVhZCBhbGwgY29uZmlnIGZpbGUgdHlwZXMgCisgICAgICovCisgICAgZm9yICg7IGN0bXAgIT0gTlVMTDsgY3RtcCA9IGN0bXAtPm5leHQpIHsKKyAgICAgICAgaWYgKCByZWFkX2NvbmZpZ19maWxlc19vZl90eXBlKHdoZW4sIGN0bXApID09IFNOTVBFUlJfU1VDQ0VTUyApCisgICAgICAgICAgICByZXQgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgfQogCiAgICAgaWYgKGNvbmZpZ19lcnJvcnMpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5ldC1zbm1wOiAlZCBlcnJvcihzKSBpbiBjb25maWcgZmlsZShzKVxuIiwKICAgICAgICAgICAgICAgICAgY29uZmlnX2Vycm9ycyk7CiAgICAgfQorICAgIHJldHVybiByZXQ7CiB9CiAKIHZvaWQKQEAgLTEzMjIsNyArMTUzNyw3IEBACiAgICAgICAgIGZwcmludGYoZm91dCwgIiVzIiwgbGluZSk7CiAgICAgICAgIGlmIChsaW5lW3N0cmxlbihsaW5lKV0gIT0gJ1xuJykKICAgICAgICAgICAgIGZwcmludGYoZm91dCwgIlxuIik7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICJzdG9yaW5nOiAlc1xuIiwgbGluZSkpOworICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6c3RvcmUiLCAic3RvcmluZzogJXNcbiIsIGxpbmUpKTsKICAgICAgICAgZmNsb3NlKGZvdXQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJyZWFkX2NvbmZpZ19zdG9yZSBvcGVuIGZhaWx1cmUgb24gJXNcbiIsIGZpbGVwKTsKQEAgLTE0MDMsOCArMTYxOCwxMSBAQAogICAgICAqIHNhdmUgYSB3YXJuaW5nIGhlYWRlciB0byB0aGUgdG9wIG9mIHRoZSBuZXcgZmlsZSAKICAgICAgKi8KICAgICBzbnByaW50ZihmaWxlb2xkLCBzaXplb2YoZmlsZW9sZCksCi0gICAgICAgICAgICAiI1xuIyBuZXQtc25tcCAob3IgdWNkLXNubXApIHBlcnNpc3RlbnQgZGF0YSBmaWxlLlxuI1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIyBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBcbiNcbiMgICAgICAgICAgKioqKiBETyBOT1QgRURJVCBUSElTIEZJTEUgKioqKlxuI1xuIyBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiNcbiMgRE8gTk9UIFNUT1JFIENPTkZJR1VSQVRJT04gRU5UUklFUyBIRVJFLlxuIyBQbGVhc2Ugc2F2ZSBub3JtYWwgY29uZmlndXJhdGlvbiB0b2tlbnMgZm9yICVzIGluIFNOTVBDT05GUEFUSC8lcy5jb25mLlxuIyBPbmx5IFwiY3JlYXRlVXNlclwiIHRva2VucyBzaG91bGQgYmUgcGxhY2VkIGhlcmUgYnkgJXMgYWRtaW5pc3RyYXRvcnMuXG4jIChEaWQgSSBtZW50aW9uOiBkbyBub3QgZWRpdCB0aGlzIGZpbGU/KVxuI1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiIsCi0gICAgICAgICAgICB0eXBlLCB0eXBlLCB0eXBlKTsKKyAgICAgICAgICAgICIlcyVzIyBQbGVhc2Ugc2F2ZSBub3JtYWwgY29uZmlndXJhdGlvbiB0b2tlbnMgZm9yICVzIGluIFNOTVBDT05GUEFUSC8lcy5jb25mLlxuIyBPbmx5IFwiY3JlYXRlVXNlclwiIHRva2VucyBzaG91bGQgYmUgcGxhY2VkIGhlcmUgYnkgJXMgYWRtaW5pc3RyYXRvcnMuXG4lcyIsCisgICAgICAgICAgICAiI1xuIyBuZXQtc25tcCAob3IgdWNkLXNubXApIHBlcnNpc3RlbnQgZGF0YSBmaWxlLlxuI1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIyBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBcbiIsCisgICAgICAgICAgICAiI1xuIyAgICAgICAgICAqKioqIERPIE5PVCBFRElUIFRISVMgRklMRSAqKioqXG4jXG4jIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuI1xuIyBETyBOT1QgU1RPUkUgQ09ORklHVVJBVElPTiBFTlRSSUVTIEhFUkUuXG4iLAorICAgICAgICAgICAgdHlwZSwgdHlwZSwgdHlwZSwKKwkgICAgIiMgKERpZCBJIG1lbnRpb246IGRvIG5vdCBlZGl0IHRoaXMgZmlsZT8pXG4jXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuIik7CiAgICAgZmlsZW9sZFsgc2l6ZW9mKGZpbGVvbGQpLTEgXSA9IDA7CiAgICAgcmVhZF9jb25maWdfc3RvcmUodHlwZSwgZmlsZW9sZCk7CiB9CkBAIC0xNDY1LDE5ICsxNjgzLDUyIEBACiAgKiBjb25maWdfcGVycm9yOiBwcmludHMgYSB3YXJuaW5nIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIGFuZAogICogbGluZSBudW1iZXIgb2YgYSAuY29uZiBmaWxlIGFuZCBpbmNyZW1lbnRzIHRoZSBlcnJvciBjb3VudC4gCiAgKi8KK3N0YXRpYyB2b2lkCitjb25maWdfdmxvZyhpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmxldmVsbXNnLCBjb25zdCBjaGFyICpzdHIsIHZhX2xpc3QgYXJncykKK3sKKyAgICBjaGFyIHRtcGJ1ZlsyNTZdOworICAgIGNoYXIqIGJ1ZiA9IHRtcGJ1ZjsKKyAgICBpbnQgbGVuID0gc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIiVzOiBsaW5lICVkOiAlczogJXNcbiIsCisJCSAgICAgICBjdXJmaWxlbmFtZSwgbGluZWNvdW50LCBsZXZlbG1zZywgc3RyKTsKKyAgICBpZiAobGVuID49IChpbnQpc2l6ZW9mKHRtcGJ1ZikpIHsKKwlidWYgPSAoY2hhciopbWFsbG9jKGxlbiArIDEpOworCXNwcmludGYoYnVmLCAiJXM6IGxpbmUgJWQ6ICVzOiAlc1xuIiwKKwkJY3VyZmlsZW5hbWUsIGxpbmVjb3VudCwgbGV2ZWxtc2csIHN0cik7CisgICAgfQorICAgIHNubXBfdmxvZyhsZXZlbCwgYnVmLCBhcmdzKTsKKyAgICBpZiAoYnVmICE9IHRtcGJ1ZikKKwlmcmVlKGJ1Zik7Cit9CisKK3ZvaWQKK25ldHNubXBfY29uZmlnX2Vycm9yKGNvbnN0IGNoYXIgKnN0ciwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBzdHIpOworICAgIGNvbmZpZ192bG9nKExPR19FUlIsICJFcnJvciIsIHN0ciwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIGNvbmZpZ19lcnJvcnMrKzsKK30KKwordm9pZAorbmV0c25tcF9jb25maWdfd2Fybihjb25zdCBjaGFyICpzdHIsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgc3RyKTsKKyAgICBjb25maWdfdmxvZyhMT0dfV0FSTklORywgIldhcm5pbmciLCBzdHIsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKK30KKwogdm9pZAogY29uZmlnX3BlcnJvcihjb25zdCBjaGFyICpzdHIpCiB7Ci0gICAgc25tcF9sb2coTE9HX0VSUiwgIiVzOiBsaW5lICVkOiBFcnJvcjogJXNcbiIsIGN1cmZpbGVuYW1lLCBsaW5lY291bnQsCi0gICAgICAgICAgICAgc3RyKTsKLSAgICBjb25maWdfZXJyb3JzKys7CisgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIiVzIiwgc3RyKTsKIH0KIAogdm9pZAogY29uZmlnX3B3YXJuKGNvbnN0IGNoYXIgKnN0cikKIHsKLSAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIiVzOiBsaW5lICVkOiBXYXJuaW5nOiAlc1xuIiwgY3VyZmlsZW5hbWUsCi0gICAgICAgICAgICAgbGluZWNvdW50LCBzdHIpOworICAgIG5ldHNubXBfY29uZmlnX3dhcm4oIiVzIiwgc3RyKTsKIH0KIAogLyoKQEAgLTE0ODcsNiArMTczOCwxMiBAQAogY2hhciAgICAgICAgICAgKgogc2tpcF93aGl0ZShjaGFyICpwdHIpCiB7CisgICAgcmV0dXJuIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgc2tpcF93aGl0ZV9jb25zdChwdHIpKTsKK30KKworY29uc3QgY2hhciAgICAgKgorc2tpcF93aGl0ZV9jb25zdChjb25zdCBjaGFyICpwdHIpCit7CiAgICAgaWYgKHB0ciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgIHdoaWxlICgqcHRyICE9IDAgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcHRyKSkKQEAgLTE0OTksNiArMTc1NiwxMiBAQAogY2hhciAgICAgICAgICAgKgogc2tpcF9ub3Rfd2hpdGUoY2hhciAqcHRyKQogeworICAgIHJldHVybiBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIHNraXBfbm90X3doaXRlX2NvbnN0KHB0cikpOworfQorCitjb25zdCBjaGFyICAgICAqCitza2lwX25vdF93aGl0ZV9jb25zdChjb25zdCBjaGFyICpwdHIpCit7CiAgICAgaWYgKHB0ciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgIHdoaWxlICgqcHRyICE9IDAgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnB0cikpCkBAIC0xNTExLDkgKzE3NzQsMTUgQEAKIGNoYXIgICAgICAgICAgICoKIHNraXBfdG9rZW4oY2hhciAqcHRyKQogewotICAgIHB0ciA9IHNraXBfd2hpdGUocHRyKTsKLSAgICBwdHIgPSBza2lwX25vdF93aGl0ZShwdHIpOwotICAgIHB0ciA9IHNraXBfd2hpdGUocHRyKTsKKyAgICByZXR1cm4gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCBza2lwX3Rva2VuX2NvbnN0KHB0cikpOworfQorCitjb25zdCBjaGFyICAgICAqCitza2lwX3Rva2VuX2NvbnN0KGNvbnN0IGNoYXIgKnB0cikKK3sKKyAgICBwdHIgPSBza2lwX3doaXRlX2NvbnN0KHB0cik7CisgICAgcHRyID0gc2tpcF9ub3Rfd2hpdGVfY29uc3QocHRyKTsKKyAgICBwdHIgPSBza2lwX3doaXRlX2NvbnN0KHB0cik7CiAgICAgcmV0dXJuIChwdHIpOwogfQogCkBAIC0xNTM0LDYgKzE4MDMsMTIgQEAKIGNoYXIgICAgICAgICAgICoKIGNvcHlfbndvcmQoY2hhciAqZnJvbSwgY2hhciAqdG8sIGludCBsZW4pCiB7CisgICAgcmV0dXJuIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgY29weV9ud29yZF9jb25zdChmcm9tLCB0bywgbGVuKSk7Cit9CisKK2NvbnN0IGNoYXIgICAgICAgICAgICoKK2NvcHlfbndvcmRfY29uc3QoY29uc3QgY2hhciAqZnJvbSwgY2hhciAqdG8sIGludCBsZW4pCit7CiAgICAgY2hhciAgICAgICAgICAgIHF1b3RlOwogICAgIGlmICghZnJvbSB8fCAhdG8pCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTU2Miw3ICsxODM3LDcgQEAKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBmcm9tKys7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKCpmcm9tICE9IDAgJiYgIWlzc3BhY2UoKmZyb20pKSB7CisgICAgICAgIHdoaWxlICgqZnJvbSAhPSAwICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqZnJvbSkpKSB7CiAgICAgICAgICAgICBpZiAoKCpmcm9tID09ICdcXCcpICYmICgqKGZyb20gKyAxKSAhPSAwKSkgewogICAgICAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7ICAvKiBkb24ndCBjb3B5IGJleW9uZCBsZW4gYnl0ZXMgKi8KICAgICAgICAgICAgICAgICAgICAgKnRvKysgPSAqKGZyb20gKyAxKTsKQEAgLTE1ODIsOSArMTg1Nyw5IEBACiAgICAgfQogICAgIGlmIChsZW4gPiAwKQogICAgICAgICAqdG8gPSAwOwotICAgIGZyb20gPSBza2lwX3doaXRlKGZyb20pOworICAgIGZyb20gPSBza2lwX3doaXRlX2NvbnN0KGZyb20pOwogICAgIHJldHVybiAoZnJvbSk7Ci19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHlfd29yZCAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5X253b3JkICovCiAKIC8qCiAgKiBjb3B5X3dvcmQKQEAgLTE2NTcsMjAgKzE5MzIsNDIgQEAKICAgICByZXR1cm4gc2F2ZXRvOwogfQogCi0vKgotICogcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKTogcmVhZHMgYW4gb2N0ZXQgc3RyaW5nIHRoYXQgd2FzCi0gKiBzYXZlZCBieSB0aGUgcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoKSBmdW5jdGlvbiAKKy8qKgorICogUmVhZHMgYW4gb2N0ZXQgc3RyaW5nIHRoYXQgd2FzIHNhdmVkIGJ5IHRoZQorICogcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoKSBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICAgICByZWFkZnJvbSBQb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhIHRvIGJlIHBhcnNlZC4KKyAqIEBwYXJhbVtpbixvdXRdIHN0ciAgICAgIFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIgcG9pbnRlci4gVGhlIGRhdGEKKyAqICAgd3JpdHRlbiB0byB0aGUgb3V0cHV0IGJ1ZmZlciB3aWxsIGJlICdcMCctdGVybWluYXRlZC4gSWYgKnN0ciA9PSBOVUxMLAorICogICBhbiBvdXRwdXQgYnVmZmVyIHdpbGwgYmUgYWxsb2NhdGVkIHRoYXQgaXMgb25lIGJ5dGUgbGFyZ2VyIHRoYW4gdGhlCisgKiAgIGRhdGEgc3RvcmVkLgorICogQHBhcmFtW2luLG91dF0gbGVuICAgICAgSWYgc3RyICE9IE5VTEwsICpsZW4gaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAqc3RyCisgKiAgIHBvaW50cyBhdC4gSWYgc3RyID09IE5VTEwsIHRoZSB2YWx1ZSBwYXNzZWQgdmlhICpsZW4gaXMgaWdub3JlZC4KKyAqICAgQmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgd2lsbCBiZSBzdG9yZWQKKyAqICAgaW4gKmxlbi4gSWYgYSBidWZmZXIgb3ZlcmZsb3cgb2NjdXJzLCAqbGVuIHdpbGwgYmUgc2V0IHRvIDAuCisgKgorICogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCB0byBiZSBwYXJzZWQgaWYKKyAqICAgcGFyc2luZyBzdWNjZWVkZWQ7IE5VTEwgd2hlbiB0aGUgZW5kIG9mIHRoZSBpbnB1dCBzdHJpbmcgaGFzIGJlZW4gcmVhY2hlZAorICogICBvciBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogY2hhciAgICAgICAgICAgKgotcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoY2hhciAqcmVhZGZyb20sIHVfY2hhciAqKiBzdHIsIHNpemVfdCAqIGxlbikKK3JlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGNvbnN0IGNoYXIgKnJlYWRmcm9tLCB1X2NoYXIgKiogc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuKQogewotICAgIHVfY2hhciAgICAgICAgICpjcHRyID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAqY3B0cjE7Ci0gICAgdV9pbnQgICAgICAgICAgIHRtcDsKLSAgICBpbnQgICAgICAgICAgICAgaTsKLSAgICBzaXplX3QgICAgICAgICAgaWxlbjsKKyAgICByZXR1cm4gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLAorICAgICAgICAgICAgICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QocmVhZGZyb20sIHN0ciwgbGVuKSk7Cit9CiAKLSAgICBpZiAocmVhZGZyb20gPT0gTlVMTCB8fCBzdHIgPT0gTlVMTCkKK2NvbnN0IGNoYXIgICAgICoKK3JlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KGNvbnN0IGNoYXIgKnJlYWRmcm9tLCB1X2NoYXIgKiogc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuKQoreworICAgIHVfY2hhciAgICAgICAgICpjcHRyOworICAgIGNvbnN0IGNoYXIgICAgICpjcHRyMTsKKyAgICB1X2ludCAgICAgICAgICAgdG1wOworICAgIHNpemVfdCAgICAgICAgICBpLCBpbGVuOworCisgICAgaWYgKHJlYWRmcm9tID09IE5VTEwgfHwgc3RyID09IE5VTEwgfHwgbGVuID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHN0cm5jYXNlY21wKHJlYWRmcm9tLCAiMHgiLCAyKSA9PSAwKSB7CkBAIC0xNjc4LDcgKzE5NzUsNyBAQAogICAgICAgICAgKiBBIGhleCBzdHJpbmcgc3VibWl0dGVkLiBIb3cgbG9uZz8gCiAgICAgICAgICAqLwogICAgICAgICByZWFkZnJvbSArPSAyOwotICAgICAgICBjcHRyMSA9IHNraXBfbm90X3doaXRlKHJlYWRmcm9tKTsKKyAgICAgICAgY3B0cjEgPSBza2lwX25vdF93aGl0ZV9jb25zdChyZWFkZnJvbSk7CiAgICAgICAgIGlmIChjcHRyMSkKICAgICAgICAgICAgIGlsZW4gPSAoY3B0cjEgLSByZWFkZnJvbSk7CiAgICAgICAgIGVsc2UKQEAgLTE2OTYsMzEgKzE5OTMsMjkgQEAKICAgICAgICAgICogbWFsbG9jIGRhdGEgc3BhY2UgaWYgbmVlZGVkICgrMSBmb3IgZ29vZCBtZWFzdXJlKSAKICAgICAgICAgICovCiAgICAgICAgIGlmICgqc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICgoY3B0ciA9ICh1X2NoYXIgKikgbWFsbG9jKGlsZW4gKyAxKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgKnN0ciA9ICh1X2NoYXIgKikgbWFsbG9jKGlsZW4gKyAxKTsKKyAgICAgICAgICAgIGlmICghKnN0cikKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpzdHIgPSBjcHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGRvbid0IHJlcXVpcmUgY2FsbGVyIHRvIGhhdmUgKzEgZm9yIGdvb2QgbWVhc3VyZSwgYW5kIAotICAgICAgICAgICAgICogYmFpbCBpZiBub3QgZW5vdWdoIHNwYWNlLgorICAgICAgICAgICAgICogcmVxdWlyZSBjYWxsZXIgdG8gaGF2ZSArMSwgYW5kIGJhaWwgaWYgbm90IGVub3VnaCBzcGFjZS4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKGlsZW4gPiAqbGVuKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsImJ1ZmZlciB0b28gc21hbGwgdG8gcmVhZCBvY3RldCBzdHJpbmcgKCVkIDwgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICpsZW4sIGlsZW4pOworICAgICAgICAgICAgaWYgKGlsZW4gPj0gKmxlbikgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCJidWZmZXIgdG9vIHNtYWxsIHRvIHJlYWQgb2N0ZXQgc3RyaW5nICglbHUgPCAlbHUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSpsZW4sICh1bnNpZ25lZCBsb25nKWlsZW4pOwogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciB0b28gc21hbGwgKCVsdSA8ICVsdSkiLCAodW5zaWduZWQgbG9uZykqbGVuLCAodW5zaWduZWQgbG9uZylpbGVuKSk7Ci0gICAgICAgICAgICAgICAgY3B0cjEgPSBza2lwX25vdF93aGl0ZShyZWFkZnJvbSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNraXBfd2hpdGUoY3B0cjEpOworICAgICAgICAgICAgICAgICpsZW4gPSAwOworICAgICAgICAgICAgICAgIGNwdHIxID0gc2tpcF9ub3Rfd2hpdGVfY29uc3QocmVhZGZyb20pOworICAgICAgICAgICAgICAgIHJldHVybiBza2lwX3doaXRlX2NvbnN0KGNwdHIxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNwdHIgPSAqc3RyOwogICAgICAgICB9Ci0gICAgICAgICpsZW4gPSBpbGVuOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNvcHkgdmFsaWRhdGVkIGRhdGEgCiAgICAgICAgICAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgKmxlbjsgaSsrKSB7CisgICAgICAgIGNwdHIgPSAqc3RyOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaWxlbjsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoMSA9PSBzc2NhbmYocmVhZGZyb20sICIlMngiLCAmdG1wKSkKICAgICAgICAgICAgICAgICAqY3B0cisrID0gKHVfY2hhcikgdG1wOwogICAgICAgICAgICAgZWxzZSB7CkBAIC0xNzMyLDEzICsyMDI3LDExIEBACiAgICAgICAgICAgICByZWFkZnJvbSArPSAyOwogICAgICAgICB9CiAgICAgICAgIC8qCi0gICAgICAgICAqIG9ubHkgbnVsbCB0ZXJtaW5hdGUgaWYgd2UgaGF2ZSB0aGUgc3BhY2UKKyAgICAgICAgICogVGVybWluYXRlIHRoZSBvdXRwdXQgYnVmZmVyLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKGlsZW4gPiAqbGVuKSB7Ci0gICAgICAgICAgICBpbGVuID0gKmxlbi0xOwotICAgICAgICAgICAgKmNwdHIrKyA9ICdcMCc7Ci0gICAgICAgIH0KLSAgICAgICAgcmVhZGZyb20gPSBza2lwX3doaXRlKHJlYWRmcm9tKTsKKyAgICAgICAgKmNwdHIrKyA9ICdcMCc7CisgICAgICAgICpsZW4gPSBpbGVuOworICAgICAgICByZWFkZnJvbSA9IHNraXBfd2hpdGVfY29uc3QocmVhZGZyb20pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIE5vcm1hbCBzdHJpbmcgCkBAIC0xNzQ5LDI1ICsyMDQyLDIzIEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoKnN0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgYnVmW1NOTVBfTUFYQlVGXTsKLSAgICAgICAgICAgIHJlYWRmcm9tID0gY29weV9ud29yZChyZWFkZnJvbSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICByZWFkZnJvbSA9IGNvcHlfbndvcmRfY29uc3QocmVhZGZyb20sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAgICAgICAgICAgICAqbGVuID0gc3RybGVuKGJ1Zik7Ci0gICAgICAgICAgICBpZiAoKGNwdHIgPSAodV9jaGFyICopIG1hbGxvYygqbGVuICsgMSkpID09IE5VTEwpCisgICAgICAgICAgICAqc3RyID0gKHVfY2hhciAqKSBtYWxsb2MoKmxlbiArIDEpOworICAgICAgICAgICAgaWYgKCpzdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICpzdHIgPSBjcHRyOwotICAgICAgICAgICAgaWYgKGNwdHIpIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoY3B0ciwgYnVmLCAqbGVuICsgMSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkoKnN0ciwgYnVmLCAqbGVuICsgMSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZWFkZnJvbSA9IGNvcHlfbndvcmQocmVhZGZyb20sIChjaGFyICopICpzdHIsICpsZW4pOwotICAgICAgICAgICAgKmxlbiA9IHN0cmxlbigoY2hhciAqKSAqc3RyKTsKKyAgICAgICAgICAgIHJlYWRmcm9tID0gY29weV9ud29yZF9jb25zdChyZWFkZnJvbSwgKGNoYXIgKikgKnN0ciwgKmxlbik7CisgICAgICAgICAgICBpZiAoKmxlbikKKyAgICAgICAgICAgICAgICAqbGVuID0gc3RybGVuKChjaGFyICopICpzdHIpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHJlYWRmcm9tOwogfQogCi0KIC8qCiAgKiByZWFkX2NvbmZpZ19zYXZlX29iamlkKCk6IHNhdmVzIGFuIG9iamlkIGFzIGEgbnVtZXJpY2FsIHN0cmluZyAKICAqLwpAQCAtMTc4Niw3ICsyMDc3LDcgQEAKICAgICAgKiBpbiBjYXNlIGxlbj0wLCB0aGlzIG1ha2VzIGl0IGVhc2llciB0byByZWFkIGl0IGJhY2sgaW4gCiAgICAgICovCiAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIGxlbjsgaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc2F2ZXRvLCAiLiVsZCIsIG9iamlkW2ldKTsKKyAgICAgICAgc3ByaW50ZihzYXZldG8sICIuJSIgTkVUU05NUF9QUklvICJkIiwgb2JqaWRbaV0pOwogICAgICAgICBzYXZldG8gKz0gc3RybGVuKHNhdmV0byk7CiAgICAgfQogICAgIHJldHVybiBzYXZldG87CkBAIC0xNzk4LDYgKzIwODksMTMgQEAKIGNoYXIgICAgICAgICAgICoKIHJlYWRfY29uZmlnX3JlYWRfb2JqaWQoY2hhciAqcmVhZGZyb20sIG9pZCAqKiBvYmppZCwgc2l6ZV90ICogbGVuKQogeworICAgIHJldHVybiBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosCisgICAgICAgICAgICAgcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdChyZWFkZnJvbSwgb2JqaWQsIGxlbikpOworfQorCitjb25zdCBjaGFyICAgICAqCityZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KGNvbnN0IGNoYXIgKnJlYWRmcm9tLCBvaWQgKiogb2JqaWQsIHNpemVfdCAqIGxlbikKK3sKIAogICAgIGlmIChvYmppZCA9PSBOVUxMIHx8IHJlYWRmcm9tID09IE5VTEwgfHwgbGVuID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTgxOSw3ICsyMTE3LDcgQEAKICAgICAgICAgICogcXVhbGlmeSB0aGUgc3RyaW5nIGZvciByZWFkX29iamlkIAogICAgICAgICAgKi8KICAgICAgICAgY2hhciAgICAgICAgICAgIGJ1ZltTUFJJTlRfTUFYX0xFTl07Ci0gICAgICAgIGNvcHlfbndvcmQocmVhZGZyb20sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBjb3B5X253b3JkX2NvbnN0KHJlYWRmcm9tLCBidWYsIHNpemVvZihidWYpKTsKIAogICAgICAgICBpZiAoIXJlYWRfb2JqaWQoYnVmLCAqb2JqaWQsIGxlbikpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZ19yZWFkX29iamlkIiwgIkludmFsaWQgT0lEIikpOwpAQCAtMTgyOCw3ICsyMTI2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHJlYWRmcm9tID0gc2tpcF90b2tlbihyZWFkZnJvbSk7CisgICAgcmVhZGZyb20gPSBza2lwX3Rva2VuX2NvbnN0KHJlYWRmcm9tKTsKICAgICByZXR1cm4gcmVhZGZyb207CiB9CiAKQEAgLTE5NzIsNyArMjI3MCw2IEBACiAgICAgICAgIHJldHVybiByZWFkZnJvbTsKIAogICAgIGNhc2UgQVNOX0NPVU5URVI2NDoKLSAgICB7CiAgICAgICAgIGlmICgqbGVuIDwgc2l6ZW9mKFU2NCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgKmxlbiA9IHNpemVvZihVNjQpOwpAQCAtMTk4MSwxMSArMjI3OCw3IEBACiAgICAgICAgIHJldHVybiByZWFkZnJvbTsKICAgICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWdfcmVhZF9tZW1vcnkiLCAiRmFpbDogVW5rbm93biB0eXBlOiAlZCIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGUpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZ19yZWFkX21lbW9yeSIsICJGYWlsOiBVbmtub3duIHR5cGU6ICVkIiwgdHlwZSkpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yMDY5LDQgKzIzNjIsNSBAQAogICAgICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CiB9CisKIC8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9yZWFkZGlyLmMgYi9zbm1wbGliL3JlYWRkaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2ZmODNkCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9yZWFkZGlyLmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIHJlYWRkaXIoKSByZXBsYWNlbWVudCBmb3IgTVNWQy4KKyAqLworCisjZGVmaW5lIFdJTjMySU9fSVNfU1RESU8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGNoYXIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKworLyoKKyAqIFJlYWRkaXIganVzdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBwb2ludGVyIGFuZCBidW1wcyB0aGUKKyAqICogc3RyaW5nIHBvaW50ZXIgdG8gdGhlIG5EbGxFeHBvcnQgZW50cnkuCisgKi8KK3N0cnVjdCBkaXJlY3QgICoKK3JlYWRkaXIoRElSICogZGlycCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgbGVuOworICAgIHN0YXRpYyBpbnQgICAgICBkdW1teSA9IDA7CisKKyAgICBpZiAoZGlycC0+Y3VycikgeworICAgICAgICAvKgorICAgICAgICAgKiBmaXJzdCBzZXQgdXAgdGhlIHN0cnVjdHVyZSB0byByZXR1cm4gCisgICAgICAgICAqLworICAgICAgICBsZW4gPSBzdHJsZW4oZGlycC0+Y3Vycik7CisgICAgICAgIHN0cmNweShkaXJwLT5kaXJzdHIuZF9uYW1lLCBkaXJwLT5jdXJyKTsKKyAgICAgICAgZGlycC0+ZGlyc3RyLmRfbmFtbGVuID0gbGVuOworCisgICAgICAgIC8qCisgICAgICAgICAqIEZha2UgYW4gaW5vZGUgCisgICAgICAgICAqLworICAgICAgICBkaXJwLT5kaXJzdHIuZF9pbm8gPSBkdW1teSsrOworCisgICAgICAgIC8qCisgICAgICAgICAqIE5vdyBzZXQgdXAgZm9yIHRoZSBuRGxsRXhwb3J0IGNhbGwgdG8gcmVhZGRpciAKKyAgICAgICAgICovCisgICAgICAgIGRpcnAtPmN1cnIgKz0gbGVuICsgMTsKKyAgICAgICAgaWYgKGRpcnAtPmN1cnIgPj0gKGRpcnAtPnN0YXJ0ICsgZGlycC0+c2l6ZSkpIHsKKyAgICAgICAgICAgIGRpcnAtPmN1cnIgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICYoZGlycC0+ZGlyc3RyKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3NjYXBpLmMgYi9zbm1wbGliL3NjYXBpLmMKaW5kZXggZDgzN2M1MS4uMTZhYzgyOSAxMDA2NDQKLS0tIGEvc25tcGxpYi9zY2FwaS5jCisrKyBiL3NubXBsaWIvc2NhcGkuYwpAQCAtMTUsMTEgKzE1LDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0yOSwxMSArMjcsNyBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTcsNiArNTEsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c21fc3VwcG9ydCwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c21fc2NhcGksIHVzbV9zdXBwb3J0KQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVNNX1NDQVBJCisKICNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21kNS5oPgogI2VuZGlmCkBAIC02OSw2ICs2OCwxMyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWliLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oPgogCisjaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX21kNS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9zaGEuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oPgorI2VuZGlmCisKICNpZmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCiAjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KQEAgLTc5LDcgKzg1LDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKLSNpZmRlZiBTVFJVQ1RfREVTX0tTX1NUUlVDVF9IQVNfV0VBS19LRVkKKyNpZmRlZiBIQVZFX1NUUlVDVF9ERVNfS1NfU1RSVUNUX1dFQUtfS0VZCiAvKiB0aGVzZSBhcmUgb2xkZXIgbmFtZXMgZm9yIG5ld2VyIHN0cnVjdHVyZXMgdGhhdCBleGlzdCBpbiBvcGVuc3NsIC45LjcgKi8KICNkZWZpbmUgREVTX2tleV9zY2hlZHVsZSAgICBkZXNfa2V5X3NjaGVkdWxlIAogI2RlZmluZSBERVNfY2Jsb2NrICAgICAgICAgIGRlc19jYmxvY2sgCkBAIC05Miw2ICs5OCw5IEBACiAKICNlbmRpZiAvKiBIQVZFX09QRU5TU0wgKi8KIAorI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworI2VuZGlmCisKICNpZmRlZiBORVRTTk1QX1VTRV9QS0NTMTEKICNpbmNsdWRlIDxzZWN1cml0eS9jcnlwdG9raS5oPgogI2VuZGlmCkBAIC0xMDUsNiArMTE0LDE1IEBACiAJfQogI2VuZGlmCiAKKyNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KK3N0YXRpYworaW50IFNIQTFfaG1hYyhjb25zdCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsIHNpemVfdCBtYWNsZW4sCisgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIHNlY3JldCwgc2l6ZV90IHNlY3JldGxlbik7CisKK3N0YXRpYworaW50IE1ENV9obWFjKGNvbnN0IHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywgc2l6ZV90IG1hY2xlbiwKKyAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBzZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pOworI2VuZGlmCiAKIC8qCiAgKiBzY19nZXRfcHJvcGVybGVuZ3RoKG9pZCAqaGFzaHR5cGUsIHVfaW50IGhhc2h0eXBlX2xlbik6CkBAIC0xMzIsNiArMTUwLDggQEAKICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzY2FwaV9nZXRfcHJvcGVyX3ByaXZfbGVuZ3RoLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TQ0FQSV9HRVRfUFJPUEVSX1BSSVZfTEVOR1RICiBpbnQKIHNjX2dldF9wcm9wZXJfcHJpdl9sZW5ndGgoY29uc3Qgb2lkICogcHJpdnR5cGUsIHVfaW50IHByaXZ0eXBlX2xlbikKIHsKQEAgLTE0OCw2ICsxNjgsNyBAQAogI2VuZGlmCiAgICAgcmV0dXJuIHByb3Blcmxlbmd0aDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NDQVBJX0dFVF9QUk9QRVJfUFJJVl9MRU5HVEggKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgpAQCAtMTYxLDE1ICsxODIsMTUgQEAKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKIAotI2lmbmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCi0jaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1CisjaWYgIWRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiAgICAgc3RydWN0IHRpbWV2YWwgIHR2OwogCiAgICAgREVCVUdUUkFDRTsKIAogICAgIGdldHRpbWVvZmRheSgmdHYsIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CiAKLSAgICBzcmFuZG9tKHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpOworICAgIHNyYW5kb20oKHVuc2lnbmVkKSh0di50dl9zZWMgXiB0di50dl91c2VjKSk7CiAjZWxpZiBORVRTTk1QX1VTRV9QS0NTMTEKICAgICBERUJVR1RSQUNFOwogICAgIHJ2YWwgPSBwa2NzX2luaXQoKTsKQEAgLTE5NiwxMCArMjE3LDEwIEBACiAgKi8KIGludAogc2NfcmFuZG9tKHVfY2hhciAqIGJ1Ziwgc2l6ZV90ICogYnVmbGVuKQotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKLSNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKKyNpZiAhZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiAhZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCiAgICAgaW50ICAgICAgICAgICAgIGk7CiAgICAgaW50ICAgICAgICAgICAgIHJuZHZhbDsKICAgICB1X2NoYXIgICAgICAgICAqdWNwID0gYnVmOwpAQCAtMjY1LDE3ICsyODYsMTggQEAKICAqLwogaW50CiBzY19nZW5lcmF0ZV9rZXllZF9oYXNoKGNvbnN0IG9pZCAqIGF1dGh0eXBlLCBzaXplX3QgYXV0aHR5cGVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuLAotICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBtZXNzYWdlLCB1X2ludCBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBtZXNzYWdlLCB1X2ludCBtc2dsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIE1BQywgc2l6ZV90ICogbWFjbGVuKQotI2lmICBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKKyNpZiAgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwotICAgIGludCAgICAgICAgICAgICBwcm9wZXJsZW5ndGg7CisgICAgaW50ICAgICAgICAgICAgIGlwcm9wZXJsZW5ndGg7CisgICAgc2l6ZV90ICAgICAgICAgIHByb3Blcmxlbmd0aDsKIAogICAgIHVfY2hhciAgICAgICAgICBidWZbU05NUF9NQVhCVUZfU01BTExdOwogI2lmICBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQotICAgIHNpemVfdCAgICAgICAgICAgICBidWZfbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgdW5zaWduZWQgaW50ICAgIGJ1Zl9sZW4gPSBzaXplb2YoYnVmKTsKICNlbmRpZgogCiAgICAgREVCVUdUUkFDRTsKQEAgLTMwMCwxMSArMzIyLDExIEBACiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIHNjX2dlbmVyYXRlX2tleWVkX2hhc2hfcXVpdCk7CiAgICAgfQogCi0gICAgcHJvcGVybGVuZ3RoID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChhdXRodHlwZSwgYXV0aHR5cGVsZW4pOwotICAgIGlmIChwcm9wZXJsZW5ndGggPT0gU05NUEVSUl9HRU5FUlIpCi0gICAgICAgIHJldHVybiBwcm9wZXJsZW5ndGg7Ci0KLSAgICBpZiAoKChpbnQpIGtleWxlbiA8IHByb3Blcmxlbmd0aCkpIHsKKyAgICBpcHJvcGVybGVuZ3RoID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChhdXRodHlwZSwgYXV0aHR5cGVsZW4pOworICAgIGlmIChpcHJvcGVybGVuZ3RoID09IFNOTVBFUlJfR0VORVJSKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgcHJvcGVybGVuZ3RoID0gKHNpemVfdClpcHJvcGVybGVuZ3RoOworICAgIGlmIChrZXlsZW4gPCBwcm9wZXJsZW5ndGgpIHsKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaF9xdWl0KTsKICAgICB9CiAjaWZkZWYgTkVUU05NUF9VU0VfT1BFTlNTTApAQCAtMzIxLDEwICszNDMsMTAgQEAKICAgICBlbHNlIHsKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaF9xdWl0KTsKICAgICB9Ci0gICAgaWYgKChpbnQpYnVmX2xlbiAhPSBwcm9wZXJsZW5ndGgpIHsKKyAgICBpZiAoYnVmX2xlbiAhPSBwcm9wZXJsZW5ndGgpIHsKICAgICAgICAgUVVJVEZVTihydmFsLCBzY19nZW5lcmF0ZV9rZXllZF9oYXNoX3F1aXQpOwogICAgIH0KLSAgICBpZiAoKGludCkqbWFjbGVuID4gYnVmX2xlbikKKyAgICBpZiAoKm1hY2xlbiA+IGJ1Zl9sZW4pCiAgICAgICAgICptYWNsZW4gPSBidWZfbGVuOwogICAgIG1lbWNweShNQUMsIGJ1ZiwgKm1hY2xlbik7CiAKQEAgLTM1NCw4ICszNzYsMjUgQEAKICAgICAgICAgKm1hY2xlbiA9IGJ1Zl9sZW47CiAgICAgbWVtY3B5KE1BQywgYnVmLCAqbWFjbGVuKTsKIAorI2VsaWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisgICAgaWYgKCptYWNsZW4gPiBwcm9wZXJsZW5ndGgpCisgICAgICAgICptYWNsZW4gPSBwcm9wZXJsZW5ndGg7CisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKKyAgICBpZiAoSVNUUkFOU0ZPUk0oYXV0aHR5cGUsIEhNQUNNRDVBdXRoKSkKKyAgICAgICAgcnZhbCA9IE1ENV9obWFjKG1lc3NhZ2UsIG1zZ2xlbiwgTUFDLCAqbWFjbGVuLCBrZXksIGtleWxlbik7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgICBpZiAoSVNUUkFOU0ZPUk0oYXV0aHR5cGUsIEhNQUNTSEExQXV0aCkpCisgICAgICAgIHJ2YWwgPSBTSEExX2htYWMobWVzc2FnZSwgbXNnbGVuLCBNQUMsICptYWNsZW4sIGtleSwga2V5bGVuKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaF9xdWl0KTsKKyAgICB9CisgICAgaWYgKHJ2YWwgIT0gMCkgeworICAgICAgICBydmFsID0gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIGdvdG8gc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaF9xdWl0OworICAgIH0gICAgCiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUgKi8KLSAgICBpZiAoKGludCkgKm1hY2xlbiA+IHByb3Blcmxlbmd0aCkKKyAgICBpZiAoKm1hY2xlbiA+IHByb3Blcmxlbmd0aCkKICAgICAgICAgKm1hY2xlbiA9IHByb3Blcmxlbmd0aDsKICAgICBpZiAoTURzaWduKG1lc3NhZ2UsIG1zZ2xlbiwgTUFDLCAqbWFjbGVuLCBrZXksIGtleWxlbikpIHsKICAgICAgICAgcnZhbCA9IFNOTVBFUlJfR0VORVJSOwpAQCAtMzk5LDE0ICs0MzgsMTcgQEAKICAqIFJldHVybnM6CiAgKiBTTk1QRVJSX1NVQ0NFU1MgICAgICAgICAgICAgIFN1Y2Nlc3MuCiAgKiBTTk1QX1NDX0dFTkVSQUxfRkFJTFVSRSAgICAgIEFueSBlcnJvci4KKyAqIFNOTVBFUlJfU0NfTk9UX0NPTkZJR1VSRUQgICAgSGFzaCB0eXBlIG5vdCBzdXBwb3J0ZWQuCiAgKi8KIGludAotc2NfaGFzaChjb25zdCBvaWQgKiBoYXNodHlwZSwgc2l6ZV90IGhhc2h0eXBlbGVuLCB1X2NoYXIgKiBidWYsCitzY19oYXNoKGNvbnN0IG9pZCAqIGhhc2h0eXBlLCBzaXplX3QgaGFzaHR5cGVsZW4sIGNvbnN0IHVfY2hhciAqIGJ1ZiwKICAgICAgICAgc2l6ZV90IGJ1Zl9sZW4sIHVfY2hhciAqIE1BQywgc2l6ZV90ICogTUFDX2xlbikKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7Ci0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKICAgICBpbnQgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOworI2VuZGlmCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKICAgICB1bnNpZ25lZCBpbnQgICB0bXBfbGVuOwogI2VuZGlmCiAgICAgaW50ICAgICAgICAgICAgcmV0OwpAQCAtNDE1LDE0ICs0NTcsMTcgQEAKICAgICBjb25zdCBFVlBfTUQgICAqaGFzaGZuOwogICAgIEVWUF9NRF9DVFggICAgICpjcHRyOwogI2VuZGlmCi0KKyNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyAgICBNRDVfQ1RYICAgICAgICBjbWQ1OworICAgIFNIQV9DVFggICAgICAgIGNzaGExOworI2VuZGlmCiAgICAgREVCVUdUUkFDRTsKIAotICAgIGlmIChoYXNodHlwZSA9PSBOVUxMIHx8IGhhc2h0eXBlbGVuIDwgMCB8fCBidWYgPT0gTlVMTCB8fAotICAgICAgICBidWZfbGVuIDw9IDAgfHwgTUFDID09IE5VTEwgfHwgTUFDX2xlbiA9PSBOVUxMICkKKyAgICBpZiAoaGFzaHR5cGUgPT0gTlVMTCB8fCBidWYgPT0gTlVMTCB8fCBidWZfbGVuIDw9IDAgfHwKKyAgICAgICAgTUFDID09IE5VTEwgfHwgTUFDX2xlbiA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIChTTk1QRVJSX0dFTkVSUik7CiAgICAgcmV0ID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChoYXNodHlwZSwgaGFzaHR5cGVsZW4pOwotICAgIGlmICgoIHJldCA8IDAgKSB8fCAoKk1BQ19sZW4gPCByZXQgKSkKKyAgICBpZiAoKCByZXQgPCAwICkgfHwgKCpNQUNfbGVuIDwgKHNpemVfdClyZXQgKSkKICAgICAgICAgcmV0dXJuIChTTk1QRVJSX0dFTkVSUik7CiAKICNpZmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCkBAIC00NTEsNyArNDk2LDEwIEBACiAgICAgRVZQX01EX0NUWF9pbml0KGNwdHIpOwogI2VuZGlmCiAjZW5kaWYKLSAgICBFVlBfRGlnZXN0SW5pdChjcHRyLCBoYXNoZm4pOworICAgIGlmICghRVZQX0RpZ2VzdEluaXQoY3B0ciwgaGFzaGZuKSkgeworICAgICAgICAvKiByZXF1ZXN0ZWQgaGFzaCBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlICovCisgICAgICAgIHJldHVybiBTTk1QRVJSX1NDX05PVF9DT05GSUdVUkVEOworICAgIH0KIAogLyoqIHBhc3MgdGhlIGRhdGEgKi8KICAgICBFVlBfRGlnZXN0VXBkYXRlKGNwdHIsIGJ1ZiwgYnVmX2xlbik7CkBAIC00NjgsNiArNTE2LDMwIEBACiAgICAgZnJlZShjcHRyKTsKICNlbmRpZgogICAgIHJldHVybiAocnZhbCk7CisKKyNlbGlmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CisgICAgaWYgKElTVFJBTlNGT1JNKGhhc2h0eXBlLCBITUFDTUQ1QXV0aCkpIHsKKyAgICAgICAgaWYgKCpNQUNfbGVuIDwgTUQ1X0RJR0VTVF9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gKFNOTVBFUlJfR0VORVJSKTsgICAgICAvKiB0aGUgYnVmZmVyIGlzbid0IGJpZyBlbm91Z2ggKi8KKwlNRDVfSW5pdCgmY21kNSk7CisgICAgICAgIE1ENV9VcGRhdGUoJmNtZDUsIGJ1ZiwgYnVmX2xlbik7CisgICAgICAgIE1ENV9GaW5hbChNQUMsICZjbWQ1KTsKKyAgICAgICAgKk1BQ19sZW4gPSBNRDVfRElHRVNUX0xFTkdUSDsKKyAgICB9IGVsc2UgCisjZW5kaWYKKyAgICBpZiAoSVNUUkFOU0ZPUk0oaGFzaHR5cGUsIEhNQUNTSEExQXV0aCkpIHsKKyAgICAgICAgaWYgKCpNQUNfbGVuIDwgU0hBX0RJR0VTVF9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gKFNOTVBFUlJfR0VORVJSKTsgICAgICAvKiB0aGUgYnVmZmVyIGlzbid0IGJpZyBlbm91Z2ggKi8KKwlTSEExX0luaXQoJmNzaGExKTsKKyAgICAgICAgU0hBMV9VcGRhdGUoJmNzaGExLCBidWYsIGJ1Zl9sZW4pOworICAgICAgICBTSEExX0ZpbmFsKE1BQywgJmNzaGExKTsKKyAgICAgICAgKk1BQ19sZW4gPSBTSEFfRElHRVNUX0xFTkdUSDsKKyAgICAgICAgICAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAoU05NUEVSUl9HRU5FUlIpOworICAgIH0KKyAgICByZXR1cm4gKHJ2YWwpOwogI2VsaWYgTkVUU05NUF9VU0VfUEtDUzExICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9VU0VfUEtDUzExICovCiAKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQpAQCAtNTI0LDEwICs1OTYsMTAgQEAKICAqLwogaW50CiBzY19jaGVja19rZXllZF9oYXNoKGNvbnN0IG9pZCAqIGF1dGh0eXBlLCBzaXplX3QgYXV0aHR5cGVsZW4sCi0gICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuLAotICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBtZXNzYWdlLCB1X2ludCBtc2dsZW4sCi0gICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIE1BQywgdV9pbnQgbWFjbGVuKQotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQorICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogbWVzc2FnZSwgdV9pbnQgbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBNQUMsIHVfaW50IG1hY2xlbikKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4gPSBTTk1QX01BWEJVRl9TTUFMTDsKQEAgLTU1NSwxMCArNjI3LDExIEBACiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIHNjX2NoZWNrX2tleWVkX2hhc2hfcXVpdCk7CiAgICAgfQogCisKICAgICBpZiAobWFjbGVuICE9IFVTTV9NRDVfQU5EX1NIQV9BVVRIX0xFTikgewogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBzY19jaGVja19rZXllZF9oYXNoX3F1aXQpOwogICAgIH0KLQorICAgIAogICAgIC8qCiAgICAgICogR2VuZXJhdGUgYSBmdWxsIGhhc2ggb2YgdGhlIG1lc3NhZ2UsIHRoZW4gY29tcGFyZQogICAgICAqIHRoZSByZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gTUFDIHdoaWNoIG1heSBzaG9ydGVyIHRoYW4KQEAgLTYxNiw5ICs2ODksOSBAQAogc2NfZW5jcnlwdChjb25zdCBvaWQgKiBwcml2dHlwZSwgc2l6ZV90IHByaXZ0eXBlbGVuLAogICAgICAgICAgICB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbiwKICAgICAgICAgICAgdV9jaGFyICogaXYsIHVfaW50IGl2bGVuLAotICAgICAgICAgICB1X2NoYXIgKiBwbGFpbnRleHQsIHVfaW50IHB0bGVuLAorICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBwbGFpbnRleHQsIHVfaW50IHB0bGVuLAogICAgICAgICAgICB1X2NoYXIgKiBjaXBoZXJ0ZXh0LCBzaXplX3QgKiBjdGxlbikKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICB1X2ludCAgICAgICAgICAgcHJvcGVybGVuZ3RoID0gMCwgcHJvcGVybGVuZ3RoX2l2ID0gMDsKQEAgLTg5MSw3ICs5NjQsNyBAQAogICAgICAgICAgICB1X2NoYXIgKiBpdiwgdV9pbnQgaXZsZW4sCiAgICAgICAgICAgIHVfY2hhciAqIGNpcGhlcnRleHQsIHVfaW50IGN0bGVuLAogICAgICAgICAgICB1X2NoYXIgKiBwbGFpbnRleHQsIHNpemVfdCAqIHB0bGVuKQotI2lmZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogCiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CkBAIC0xMDcxLDMgKzExNDQsMjIwIEBACiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAqLwogfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX1VTRV9PUEVOU1NMICovCisKKyNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBiYXNpY2FsbHkgY29waWVzIG9mIHRoZSBNRFNpZ24oKSByb3V0aW5lIGluCisgICBtZDUuYyBtb2RpZmllZCB0byBiZSB1c2VkIHdpdGggdGhlIE9wZW5TU0wgaGFzaGluZyBmdW5jdGlvbnMuICBUaGUKKyAgIGNvcHlyaWdodCBiZWxvdyBpcyBmcm9tIHRoZSBtZDUuYyBmaWxlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHdlcmUKKyAgIHRha2VuIGZyb206ICovCisKKy8qCisgKiAqKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKiogbWQ1LmMgLS0gSW1wbGVtZW50YXRpb24gb2YgTUQ1IE1lc3NhZ2UgRGlnZXN0IEFsZ29yaXRobSAgICAgICAgICAgICAgICAgKioKKyAqICoqIFVwZGF0ZWQ6IDIvMTYvOTAgYnkgUm9uYWxkIEwuIFJpdmVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCisgKiAqKiAoQykgMTk5MCBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKgorICogKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogTUQ1X2htYWMoZGF0YSwgbGVuLCBNRDUpOiBkbyBhIGNoZWNrc3VtIG9uIGFuIGFyYmlydHJhcnkgYW1vdW50CisgKiBvZiBkYXRhLCBhbmQgcHJlcGVuZGVkIHdpdGggYSBzZWNyZXQgaW4gdGhlIHN0YW5kYXJkIGZhc2hpb24gCisgKi8KK3N0YXRpYyBpbnQKK01ENV9obWFjKGNvbnN0IHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywgc2l6ZV90IG1hY2xlbiwKKyAgICAgICAgIGNvbnN0IHVfY2hhciAqIHNlY3JldCwgc2l6ZV90IHNlY3JldGxlbikKK3sKKyNkZWZpbmUgTUQ1X0hBU0hLRVlMRU4gNjQKKyNkZWZpbmUgTUQ1X1NFQ1JFVEtFWUxFTiAxNgorCisgICAgTUQ1X0NUWCAgICAgICAgIGNtZDU7CisgICAgdV9jaGFyICAgICAgICAgIEsxW01ENV9IQVNIS0VZTEVOXTsKKyAgICB1X2NoYXIgICAgICAgICAgSzJbTUQ1X0hBU0hLRVlMRU5dOworICAgIHVfY2hhciAgICAgICAgICBleHRlbmRlZEF1dGhLZXlbTUQ1X0hBU0hLRVlMRU5dOworICAgIHVfY2hhciAgICAgICAgICBidWZbTUQ1X0hBU0hLRVlMRU5dOworICAgIHNpemVfdCAgICAgICAgICBpOworICAgIGNvbnN0IHVfY2hhciAgICpjcDsKKyAgICB1X2NoYXIgICAgICAgICAqbmV3ZGF0YSA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKKworICAgIC8qCisgICAgICogbWVtc2V0KEsxLDAsTUQ1X0hBU0hLRVlMRU4pOworICAgICAqIG1lbXNldChLMiwwLE1ENV9IQVNIS0VZTEVOKTsKKyAgICAgKiBtZW1zZXQoYnVmLDAsTUQ1X0hBU0hLRVlMRU4pOworICAgICAqIG1lbXNldChleHRlbmRlZEF1dGhLZXksMCxNRDVfSEFTSEtFWUxFTik7CisgICAgICovCisKKyAgICBpZiAoc2VjcmV0bGVuICE9IE1ENV9TRUNSRVRLRVlMRU4gfHwgc2VjcmV0ID09IE5VTEwgfHwKKyAgICAgICAgbWFjID09IE5VTEwgfHwgZGF0YSA9PSBOVUxMIHx8CisgICAgICAgIGxlbiA8PSAwIHx8IG1hY2xlbiA8PSAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIERFQlVHTVNHVEwoKCJtZDUiLCJNRDUgc2lnbmluZyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQiKSk7IAorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1lbXNldChleHRlbmRlZEF1dGhLZXksIDAsIE1ENV9IQVNIS0VZTEVOKTsKKyAgICBtZW1jcHkoZXh0ZW5kZWRBdXRoS2V5LCBzZWNyZXQsIHNlY3JldGxlbik7CisgICAgZm9yIChpID0gMDsgaSA8IE1ENV9IQVNIS0VZTEVOOyBpKyspIHsKKyAgICAgICAgSzFbaV0gPSBleHRlbmRlZEF1dGhLZXlbaV0gXiAweDM2OworICAgICAgICBLMltpXSA9IGV4dGVuZGVkQXV0aEtleVtpXSBeIDB4NWM7CisgICAgfQorCisgICAgTUQ1X0luaXQoJmNtZDUpOworICAgIHJjID0gIU1ENV9VcGRhdGUoJmNtZDUsIEsxLCBNRDVfSEFTSEtFWUxFTik7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisKKyAgICBpID0gbGVuOworICAgIGlmICgoKHVpbnRwdHJfdCkgZGF0YSkgJSBzaXplb2YobG9uZykgIT0gMCkgeworICAgICAgICAvKgorICAgICAgICAgKiB0aGlzIHJlbGllcyBvbiB0aGUgYWJpbGl0eSB0byB1c2UgaW50ZWdlciBtYXRoIGFuZCB0aHVzIHdlCisgICAgICAgICAqIG11c3QgcmVseSBvbiBkYXRhIHRoYXQgYWxpZ25zIG9uIDMyLWJpdC13b3JkLWJvdW5kcmllcyAKKyAgICAgICAgICovCisgICAgICAgIG5ld2RhdGEgPSBuZXRzbm1wX21lbWR1cChkYXRhLCBsZW4pOworICAgICAgICBjcCA9IG5ld2RhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3AgPSBkYXRhOworICAgIH0KKworICAgIHdoaWxlIChpID49IDY0KSB7CisgICAgICAgIHJjID0gIU1ENV9VcGRhdGUoJmNtZDUsIGNwLCA2NCk7CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKyAgICAgICAgY3AgKz0gNjQ7CisgICAgICAgIGkgLT0gNjQ7CisgICAgfQorCisgICAgcmMgPSAhTUQ1X1VwZGF0ZSgmY21kNSwgY3AsIGkpOworICAgIGlmIChyYykKKyAgICAgICAgZ290byB1cGRhdGVfZW5kOworCisgICAgbWVtc2V0KGJ1ZiwgMCwgTUQ1X0hBU0hLRVlMRU4pOworICAgIE1ENV9GaW5hbChidWYsICZjbWQ1KTsKKworICAgIE1ENV9Jbml0KCZjbWQ1KTsKKyAgICByYyA9ICFNRDVfVXBkYXRlKCZjbWQ1LCBLMiwgTUQ1X0hBU0hLRVlMRU4pOworICAgIGlmIChyYykKKyAgICAgICAgZ290byB1cGRhdGVfZW5kOworICAgIHJjID0gIU1ENV9VcGRhdGUoJmNtZDUsIGJ1ZiwgTUQ1X1NFQ1JFVEtFWUxFTik7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisKKyAgICAvKgorICAgICAqIGNvcHkgdGhlIHNpZ24gY2hlY2tzdW0gdG8gdGhlIG91dGdvaW5nIHBvaW50ZXIgCisgICAgICovCisgICAgTUQ1X0ZpbmFsKGJ1ZiwgJmNtZDUpOworICAgIG1lbWNweShtYWMsIGJ1ZiwgbWFjbGVuKTsKKworICB1cGRhdGVfZW5kOgorICAgIG1lbXNldChidWYsIDAsIE1ENV9IQVNIS0VZTEVOKTsKKyAgICBtZW1zZXQoSzEsIDAsIE1ENV9IQVNIS0VZTEVOKTsKKyAgICBtZW1zZXQoSzIsIDAsIE1ENV9IQVNIS0VZTEVOKTsKKyAgICBtZW1zZXQoZXh0ZW5kZWRBdXRoS2V5LCAwLCBNRDVfSEFTSEtFWUxFTik7CisgICAgbWVtc2V0KCZjbWQ1LCAwLCBzaXplb2YoY21kNSkpOworCisgICAgaWYgKG5ld2RhdGEpCisgICAgICAgIGZyZWUobmV3ZGF0YSk7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitTSEExX2htYWMoY29uc3QgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLCBzaXplX3QgbWFjbGVuLAorICAgICAgICAgIGNvbnN0IHVfY2hhciAqIHNlY3JldCwgc2l6ZV90IHNlY3JldGxlbikKK3sKKyNkZWZpbmUgU0hBMV9IQVNIS0VZTEVOICAgNjQKKyNkZWZpbmUgU0hBMV9TRUNSRVRLRVlMRU4gMjAKKworICAgIFNIQV9DVFggICAgICAgICBjc2hhMTsKKyAgICB1X2NoYXIgICAgICAgICAgSzFbU0hBMV9IQVNIS0VZTEVOXTsKKyAgICB1X2NoYXIgICAgICAgICAgSzJbU0hBMV9IQVNIS0VZTEVOXTsKKyAgICB1X2NoYXIgICAgICAgICAgZXh0ZW5kZWRBdXRoS2V5W1NIQTFfSEFTSEtFWUxFTl07CisgICAgdV9jaGFyICAgICAgICAgIGJ1ZltTSEExX0hBU0hLRVlMRU5dOworICAgIHNpemVfdCAgICAgICAgICBpOworICAgIGNvbnN0IHVfY2hhciAgICpjcDsKKyAgICB1X2NoYXIgICAgICAgICAqbmV3ZGF0YSA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKKworICAgIC8qCisgICAgICogbWVtc2V0KEsxLDAsU0hBMV9IQVNIS0VZTEVOKTsKKyAgICAgKiBtZW1zZXQoSzIsMCxTSEExX0hBU0hLRVlMRU4pOworICAgICAqIG1lbXNldChidWYsMCxTSEExX0hBU0hLRVlMRU4pOworICAgICAqIG1lbXNldChleHRlbmRlZEF1dGhLZXksMCxTSEExX0hBU0hLRVlMRU4pOworICAgICAqLworCisgICAgaWYgKHNlY3JldGxlbiAhPSBTSEExX1NFQ1JFVEtFWUxFTiB8fCBzZWNyZXQgPT0gTlVMTCB8fAorICAgICAgICBtYWMgPT0gTlVMTCB8fCBkYXRhID09IE5VTEwgfHwKKyAgICAgICAgbGVuIDw9IDAgfHwgbWFjbGVuIDw9IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogREVCVUdNU0dUTCgoInNoYTEiLCJTSEExIHNpZ25pbmcgbm90IHByb3Blcmx5IGluaXRpYWxpemVkIikpOyAKKyAgICAgICAgICovCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtZW1zZXQoZXh0ZW5kZWRBdXRoS2V5LCAwLCBTSEExX0hBU0hLRVlMRU4pOworICAgIG1lbWNweShleHRlbmRlZEF1dGhLZXksIHNlY3JldCwgc2VjcmV0bGVuKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgU0hBMV9IQVNIS0VZTEVOOyBpKyspIHsKKyAgICAgICAgSzFbaV0gPSBleHRlbmRlZEF1dGhLZXlbaV0gXiAweDM2OworICAgICAgICBLMltpXSA9IGV4dGVuZGVkQXV0aEtleVtpXSBeIDB4NWM7CisgICAgfQorCisgICAgU0hBMV9Jbml0KCZjc2hhMSk7CisgICAgcmMgPSAhU0hBMV9VcGRhdGUoJmNzaGExLCBLMSwgU0hBMV9IQVNIS0VZTEVOKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKworICAgIGkgPSBsZW47CisgICAgaWYgKCgodWludHB0cl90KSBkYXRhKSAlIHNpemVvZihsb25nKSAhPSAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHRoaXMgcmVsaWVzIG9uIHRoZSBhYmlsaXR5IHRvIHVzZSBpbnRlZ2VyIG1hdGggYW5kIHRodXMgd2UKKyAgICAgICAgICogbXVzdCByZWx5IG9uIGRhdGEgdGhhdCBhbGlnbnMgb24gMzItYml0LXdvcmQtYm91bmRyaWVzIAorICAgICAgICAgKi8KKyAgICAgICAgbmV3ZGF0YSA9IG5ldHNubXBfbWVtZHVwKGRhdGEsIGxlbik7CisgICAgICAgIGNwID0gbmV3ZGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBjcCA9IGRhdGE7CisgICAgfQorCisgICAgd2hpbGUgKGkgPj0gNjQpIHsKKyAgICAgICAgcmMgPSAhU0hBMV9VcGRhdGUoJmNzaGExLCBjcCwgNjQpOworICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisgICAgICAgIGNwICs9IDY0OworICAgICAgICBpIC09IDY0OworICAgIH0KKworICAgIHJjID0gIVNIQTFfVXBkYXRlKCZjc2hhMSwgY3AsIGkpOworICAgIGlmIChyYykKKyAgICAgICAgZ290byB1cGRhdGVfZW5kOworCisgICAgbWVtc2V0KGJ1ZiwgMCwgU0hBMV9IQVNIS0VZTEVOKTsKKyAgICBTSEExX0ZpbmFsKGJ1ZiwgJmNzaGExKTsKKworICAgIFNIQTFfSW5pdCgmY3NoYTEpOworICAgIHJjID0gIVNIQTFfVXBkYXRlKCZjc2hhMSwgSzIsIFNIQTFfSEFTSEtFWUxFTik7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisgICAgcmMgPSAhU0hBMV9VcGRhdGUoJmNzaGExLCBidWYsIFNIQTFfU0VDUkVUS0VZTEVOKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKworICAgIC8qCisgICAgICogY29weSB0aGUgc2lnbiBjaGVja3N1bSB0byB0aGUgb3V0Z29pbmcgcG9pbnRlciAKKyAgICAgKi8KKyAgICBTSEExX0ZpbmFsKGJ1ZiwgJmNzaGExKTsKKyAgICBtZW1jcHkobWFjLCBidWYsIG1hY2xlbik7CisKKyAgdXBkYXRlX2VuZDoKKyAgICBtZW1zZXQoYnVmLCAwLCBTSEExX0hBU0hLRVlMRU4pOworICAgIG1lbXNldChLMSwgMCwgU0hBMV9IQVNIS0VZTEVOKTsKKyAgICBtZW1zZXQoSzIsIDAsIFNIQTFfSEFTSEtFWUxFTik7CisgICAgbWVtc2V0KGV4dGVuZGVkQXV0aEtleSwgMCwgU0hBMV9IQVNIS0VZTEVOKTsKKyAgICBtZW1zZXQoJmNzaGExLCAwLCBzaXplb2YoY3NoYTEpKTsKKworICAgIGlmIChuZXdkYXRhKQorICAgICAgICBmcmVlKG5ld2RhdGEpOworICAgIHJldHVybiByYzsKK30KKyNlbmRpZiAvKiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8gKi8KKyNlbmRpZiAvKiAgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VU01fU0NBUEkgICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXAtdGMuYyBiL3NubXBsaWIvc25tcC10Yy5jCmluZGV4IGVmYTU0MDIuLjg5MWMzYTAgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcC10Yy5jCisrKyBiL3NubXBsaWIvc25tcC10Yy5jCkBAIC01LDEwICs1LDggQEAKIAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgpAQCAtMTYsMTYgKzE0LDEyIEBACiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSNpZmRlZiBXSU4zMgotIyBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSNlbHNlCiAjIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0zOSw2ICszMywxNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oPiAgIC8qIGZvciAiaW50ZXJuYWwiIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF90Y19hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihuZXRzbm1wX2RhdGVhbmR0aW1lX3NldF9idWZfZnJvbV92YXJzLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkYXRlX25fdGltZSwgc25tcF90Y19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY3RpbWVfdG9fdGltZXQsIHNubXBfdGNfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlX3RyYW5zaXRpb24sIHNubXBfdGNfYWxsKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9EQVRFQU5EVElNRV9TRVRfQlVGX0ZST01fVkFSUwogLyoKICAgRGF0ZUFuZFRpbWUgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgogICAgIERJU1BMQVktSElOVCAiMmQtMWQtMWQsMWQ6MWQ6MWQuMWQsMWExZDoxZCIKQEAgLTExOSw5ICsxMjEsMTEgQEAKIAogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0RBVEVBTkRUSU1FX1NFVF9CVUZfRlJPTV9WQVJTICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9EQVRFX05fVElNRQogdV9jaGFyICAgICAgICAgKgotZGF0ZV9uX3RpbWUodGltZV90ICogd2hlbiwgc2l6ZV90ICogbGVuZ3RoKQorZGF0ZV9uX3RpbWUoY29uc3QgdGltZV90ICogd2hlbiwgc2l6ZV90ICogbGVuZ3RoKQogewogICAgIHN0cnVjdCB0bSAgICAgICp0bV9wOwogICAgIHN0YXRpYyB1X2NoYXIgICBzdHJpbmdbMTFdOwpAQCAtMTU5LDE1ICsxNjMsMTUgQEAKICAgICBzdHJpbmdbN10gPSAwOwogICAgICpsZW5ndGggPSA4OwogCi0jaWZuZGVmIGN5Z3dpbgorI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGKSB8fCBkZWZpbmVkKEhBVkVfVElNRVpPTkVfVkFSSUFCTEUpCiAgICAgLyoKICAgICAgKiBUaW1lem9uZSBvZmZzZXQKICAgICAgKi8KICAgICB7Ci0jaWZkZWYgU1RSVUNUX1RNX0hBU19UTV9HTVRPRkYKLSAgICBjb25zdCBpbnQgdHpvZmZzZXQgPSAtdG1fcC0+dG1fZ210b2ZmOyAgICAgLyogU2Vjb25kcyBlYXN0IG9mIFVUQyAqLworI2lmZGVmIEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRgorICAgIGNvbnN0IGludCB0em9mZnNldCA9IC10bV9wLT50bV9nbXRvZmY7ICAgLyogU2Vjb25kcyBlYXN0IG9mIFVUQyAqLwogI2Vsc2UKLSAgICBjb25zdCBpbnQgdHpvZmZzZXQgPSB0aW1lem9uZTsgICAgICAgICAgICAgLyogU2Vjb25kcyB3ZXN0IG9mIFVUQyAqLworICAgIGNvbnN0IGludCB0em9mZnNldCA9IHRpbWV6b25lOyAgICAgICAgICAgLyogU2Vjb25kcyB3ZXN0IG9mIFVUQyAqLwogI2VuZGlmCiAgICAgaWYgKHR6b2Zmc2V0ID4gMCkKICAgICAgICAgc3RyaW5nWzhdID0gJy0nOwpAQCAtMTc5LDcgKzE4Myw3IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBTWVNWCisjaWYgZGVmaW5lZChTWVNWKSAmJiAhSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCiAgICAgLyoKICAgICAgKiBEYXlsaWdodCBzYXZpbmcgdGltZQogICAgICAqLwpAQCAtMTk5LDEwICsyMDMsMTEgQEAKIAogICAgIHJldHVybiBzdHJpbmc7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9EQVRFX05fVElNRSAqLwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DVElNRV9UT19USU1FVAogdGltZV90Ci1jdGltZV90b190aW1ldChjaGFyICpzdHIpCitjdGltZV90b190aW1ldChjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgc3RydWN0IHRtICAgICAgIHRtOwogCkBAIC0yNTgsOSArMjYzLDEwIEBACiAKICAgICByZXR1cm4gKG1rdGltZSgmdG0pKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NUSU1FX1RPX1RJTUVUICovCiAKIC8qCi0gKiBibGF0YW50bHkgbGlmdGVkIGZyb20gb3BlbnNtcCAKKyAqIGJsYXRhbnRseSBsaWZ0ZWQgZnJvbSBvcGVuc25tcCAKICAqLwogY2hhcgogY2hlY2tfcm93c3RhdHVzX3RyYW5zaXRpb24oaW50IG9sZFZhbHVlLCBpbnQgbmV3VmFsdWUpCkBAIC0zNzAsMTYgKzM3NiwxMyBAQAogICAgIHN3aXRjaCAobmV3VmFsdWUpIHsKICAgICAgICAgLyoKICAgICAgICAgICogdGhlc2UgdHdvIGVuZCB1cCBiZWluZyBlcXVpdmVsZW50IGFzIGZhciBhcyBjaGVja2luZyB0aGUgCi0gICAgICAgICAqLwotICAgICAgICAvKgogICAgICAgICAgKiBzdGF0dXMgZ29lcywgYWx0aG91Z2ggdGhlIGZpbmFsIHN0YXRlcyBhcmUgYmFzZWQgb24gdGhlIAotICAgICAgICAgKi8KLSAgICAgICAgLyoKICAgICAgICAgICogbmV3VmFsdWUuIAogICAgICAgICAgKi8KICAgICBjYXNlIFJTX0FDVElWRToKICAgICBjYXNlIFJTX05PVElOU0VSVklDRToKLSAgICAgICAgaWYgKG9sZFZhbHVlID09IFJTX05PVElOU0VSVklDRSB8fCBvbGRWYWx1ZSA9PSBSU19BQ1RJVkUpOworICAgICAgICBpZiAob2xkVmFsdWUgPT0gUlNfTk9USU5TRVJWSUNFIHx8IG9sZFZhbHVlID09IFJTX0FDVElWRSkKKyAgICAgICAgICAgIDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOwogICAgICAgICBicmVhazsKQEAgLTM5MiwxMyArMzk1LDYgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgotICAgICAgICBpZiAob2xkVmFsdWUgIT0gUlNfTk9ORVhJU1RFTlQpCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogaW1wb3NzaWJsZSwgd2UgYWxyZWFkeSBleGlzdC4gCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CiAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSBSU19OT05FWElTVEVOVCkKICAgICAgICAgICAgIC8qCkBAIC00MTgsNiArNDE0LDI1IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19ST1dTVEFUVVNfV0lUSF9TVE9SQUdFVFlQRV9UUkFOU0lUSU9OCitjaGFyCitjaGVja19yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZV90cmFuc2l0aW9uKGludCBvbGRWYWx1ZSwgaW50IG5ld1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkU3RvcmFnZSkKK3sKKyAgICAvKgorICAgICAqIGNhbiBub3QgZGVzdHJveSBwZXJtYW5lbnQgb3IgcmVhZG9ubHkgcm93cworICAgICAqLworICAgIGlmICgoUlNfREVTVFJPWSA9PSBuZXdWYWx1ZSkgJiYKKyAgICAgICAgKChTTk1QX1NUT1JBR0VfUEVSTUFORU5UID09IG9sZFN0b3JhZ2UpIHx8CisgICAgICAgICAoU05NUF9TVE9SQUdFX1JFQURPTkxZID09IG9sZFN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisKKyAgICByZXR1cm4gY2hlY2tfcm93c3RhdHVzX3RyYW5zaXRpb24ob2xkVmFsdWUsIG5ld1ZhbHVlKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1JPV1NUQVRVU19XSVRIX1NUT1JBR0VUWVBFX1RSQU5TSVRJT04gKi8KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3N0b3JhZ2VfdHJhbnNpdGlvbiwgc25tcF90Y19hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfU1RPUkFHRV9UUkFOU0lUSU9OCiBjaGFyCiBjaGVja19zdG9yYWdlX3RyYW5zaXRpb24oaW50IG9sZFZhbHVlLCBpbnQgbmV3VmFsdWUpCiB7CkBAIC00NTgsMyArNDczLDQgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfU1RPUkFHRV9UUkFOU0lUSU9OICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXAuYyBiL3NubXBsaWIvc25tcC5jCmluZGV4IDAyMGVjOTAuLmMzNzYzZTkgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcC5jCisrKyBiL3NubXBsaWIvc25tcC5jCkBAIC01MSw5ICs1MSw2IEBACiAjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmbmRlZiBOVUxMCiAjZGVmaW5lIE5VTEwgMAogI2VuZGlmCkBAIC05MCwxMCArODcsMTEgQEAKICovCiAKIHZvaWQKLXhkdW1wKGNvbnN0IHVfY2hhciAqIGNwLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpwcmVmaXgpCit4ZHVtcChjb25zdCB2b2lkICogZGF0YSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqcHJlZml4KQogewotICAgIGludCAgICAgICAgICAgICBjb2wsIGNvdW50OwotICAgIGNoYXIgICAgICAgICAgICpidWZmZXI7CisgICAgY29uc3QgdV9jaGFyICogY29uc3QgY3AgPSAoY29uc3QgdV9jaGFyKilkYXRhOworICAgIGludCAgICAgICAgICAgICAgICAgIGNvbCwgY291bnQ7CisgICAgY2hhciAgICAgICAgICAgICAgICAqYnVmZmVyOwogCiAgICAgYnVmZmVyID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihwcmVmaXgpICsgODApOwogICAgIGlmICghYnVmZmVyKSB7CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMgYi9zbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMmYwYjAuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzU5ICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGF0bS5oPgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmg+Ci0KLQotb2lkIG5ldHNubXBfQUFMNVBWQ0RvbWFpblsxMF0gPSB7IE5FVFNOTVBfRU5URVJQUklTRV9NSUIsIDMsIDMsIDMgfTsKLXN0YXRpYyBuZXRzbm1wX3Rkb21haW4gYWFsNXB2Y0RvbWFpbjsKLQotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCi0gKi8KLQotc3RhdGljIGNoYXIgKgotbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqdG8gPSBOVUxMOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKikgZGF0YTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwgJiYKLSAgICAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopIHQtPmRhdGE7Ci0gICAgfQotICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBzdHJkdXAoIkFBTDUgUFZDOiB1bmtub3duIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciB0bXBbNjRdOwotICAgICAgICBzcHJpbnRmKHRtcCwgIkFBTDUgUFZDOiAlaGQuJWhkLiVkIiwgdG8tPnNhcF9hZGRyLml0ZiwKLSAgICAgICAgICAgICAgICB0by0+c2FwX2FkZHIudnBpLCB0by0+c2FwX2FkZHIudmNpKTsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCh0bXApOwotICAgIH0KLX0KLQotCi0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCi0gKi8KLQotc3RhdGljIGludAotbmV0c25tcF9hYWw1cHZjX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLQl3aGlsZSAocmMgPCAwKSB7Ci0JICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLQotICAgICAgICBpZiAocmMgPj0gMCkgewotICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHIodCwgTlVMTCwgMCk7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwKLQkJCSJyZWN2IG9uIGZkICVkIGdvdCAlZCBieXRlcyAoZnJvbSAlcylcbiIsIHQtPnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICByYywgc3RyKSk7Ci0gICAgICAgICAgICBmcmVlKHN0cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgInJlY3Ygb24gZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLCAKLQkJCXQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgfQotICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgKm9sZW5ndGggPSAwOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX2FhbDVwdmNfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvID0gTlVMTDsKLQotICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKLSAgICAgICAgKm9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoKm9wYXF1ZSk7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCi0gICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICh0LT5kYXRhKTsKLSAgICB9Ci0KLSAgICBpZiAodG8gIT0gTlVMTCAmJiB0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfYWFsNXB2Y19mbXRhZGRyKE5VTEwsICh2b2lkICopdG8sCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpOwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwic2VuZCAlZCBieXRlcyBmcm9tICVwIHRvICVzIG9uIGZkICVkXG4iLAotCQkgICAgc2l6ZSwgYnVmLCBzdHIsIHQtPnNvY2spKTsKLSAgICAgICAgZnJlZShzdHIpOwotCXdoaWxlIChyYyA8IDApIHsKLQkgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF9hYWw1cHZjX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgaWYgKHQtPnNvY2sgPj0gMCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgImNsb3NlIGZkICVkXG4iLCB0LT5zb2NrKSk7Ci0jaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKLSAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKLSNlbHNlCi0gICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7Ci0jZW5kaWYKLSAgICAgICAgdC0+c29jayA9IC0xOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi0vKgotICogT3BlbiBhbiBBQUw1IFBWQyB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsIAotICogTlNBUCB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgCi0gKiB0aGUgcmVtb3RlIE5TQVAgdG8gc2VuZCB0aGluZ3MgdG8uICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHIsIGludCBsb2NhbCkKLXsKLSAgICBjaGFyICAgICAgICAgICAqc3RyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7Ci0KLSAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNhcF9mYW1pbHkgIT0gQUZfQVRNUFZDKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc3RyID0gbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHIoTlVMTCwgKHZvaWQgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpOwotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCi0gICAgICAgICAgICAgICAgc3RyKSk7Ci0gICAgZnJlZShzdHIpOwotCi0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgdC0+ZG9tYWluID0gbmV0c25tcF9BQUw1UFZDRG9tYWluOwotICAgIHQtPmRvbWFpbl9sZW5ndGggPQotICAgICAgICBzaXplb2YobmV0c25tcF9BQUw1UFZDRG9tYWluKSAvIHNpemVvZihuZXRzbm1wX0FBTDVQVkNEb21haW5bMF0pOwotCi0gICAgdC0+c29jayA9IHNvY2tldChQRl9BVE1QVkMsIFNPQ0tfREdSQU0sIDApOwotICAgIGlmICh0LT5zb2NrIDwgMCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwic29ja2V0IGZhaWxlZCAoJXMpXG4iLHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJmZCAlZCBvcGVuZWRcbiIsIHQtPnNvY2spKTsKLQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogU2V0IHVwIHRoZSBRT1MgcGFyYW1ldGVycy4KLSAgICAgICAgICovCi0KLSAgICAgICAgc3RydWN0IGF0bV9xb3MgcW9zID0geyAwIH07Ci0gICAgICAgIHFvcy5hYWwgPSBBVE1fQUFMNTsKLSAgICAgICAgcW9zLnJ4dHAudHJhZmZpY19jbGFzcyA9IEFUTV9VQlI7Ci0gICAgICAgIHFvcy5yeHRwLm1heF9zZHUgPSBTTk1QX01BWF9MRU47ICAgIC8qICBIbW0gLS0gdGhpcyBpcyBhIGJpdCBzbWFsbD8gICovCi0gICAgICAgIHFvcy50eHRwID0gcW9zLnJ4dHA7Ci0KLSAgICAgICAgaWYgKHNldHNvY2tvcHQodC0+c29jaywgU09MX0FUTSwgU09fQVRNUU9TLCAmcW9zLCBzaXplb2YocW9zKSkgPCAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgInNldHNvY2tvcHQgZmFpbGVkICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIG5ldHNubXBfYWFsNXB2Y19jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsb2NhbCkgewotICAgICAgICB0LT5sb2NhbCA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoOCk7Ci0gICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgdC0+bG9jYWxbMF0gPSAoYWRkci0+c2FwX2FkZHIuaXRmICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5sb2NhbFsxXSA9IChhZGRyLT5zYXBfYWRkci5pdGYgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPmxvY2FsWzJdID0gKGFkZHItPnNhcF9hZGRyLnZwaSAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+bG9jYWxbM10gPSAoYWRkci0+c2FwX2FkZHIudnBpICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5sb2NhbFs0XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweGZmMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgdC0+bG9jYWxbNV0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHgwMGZmMDAwMCkgPj4gMTY7Ci0gICAgICAgIHQtPmxvY2FsWzZdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDAwMGZmMDApID4+IDg7Ci0gICAgICAgIHQtPmxvY2FsWzddID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDAwMDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDg7Ci0KLSAgICAgICAgaWYgKGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAotICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIDwgMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJiaW5kIGZhaWxlZCAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBuZXRzbm1wX2FhbDVwdmNfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB0LT5yZW1vdGUgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDgpOwotICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICB0LT5yZW1vdGVbMF0gPSAoYWRkci0+c2FwX2FkZHIuaXRmICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5yZW1vdGVbMV0gPSAoYWRkci0+c2FwX2FkZHIuaXRmICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5yZW1vdGVbMl0gPSAoYWRkci0+c2FwX2FkZHIudnBpICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5yZW1vdGVbM10gPSAoYWRkci0+c2FwX2FkZHIudnBpICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5yZW1vdGVbNF0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHhmZjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgIHQtPnJlbW90ZVs1XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwZmYwMDAwKSA+PiAxNjsKLSAgICAgICAgdC0+cmVtb3RlWzZdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDAwMGZmMDApID4+IDg7Ci0gICAgICAgIHQtPnJlbW90ZVs3XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwMDAwMGZmKSA+PiAwOwotICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gODsKLQotICAgICAgICBpZiAoY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgPCAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgImNvbm5lY3QgZmFpbGVkICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIG5ldHNubXBfYWFsNXB2Y19jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKTsKLSAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBtZW1jcHkodC0+ZGF0YSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKTsKLSAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKTsKLQotICAgIC8qCi0gICAgICogMTYtYml0IGxlbmd0aCBmaWVsZCBpbiB0aGUgdHJhaWxlciwgbm8gaGVhZGVycy4gIAotICAgICAqLwotCi0gICAgdC0+bXNnTWF4U2l6ZSA9IDB4ZmZmZjsKLSAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF9hYWw1cHZjX3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfYWFsNXB2Y19zZW5kOwotICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX2FhbDVwdmNfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgICA9IE5VTEw7Ci0gICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfYWFsNXB2Y19mbXRhZGRyOwotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX2FhbDVwdmNfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCi0JCQkgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2F0bXB2YyBhZGRyOwotCi0gICAgaWYgKHN0ciA9PSBOVUxMIHx8ICpzdHIgPT0gJ1wwJykKLQlzdHIgPSBkZWZhdWx0X3RhcmdldDsKLQotICAgIGlmIChzdHIgIT0gTlVMTCkgewotICAgICAgICBhZGRyLnNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7Ci0KLSAgICAgICAgaWYgKHNzY2FuZihzdHIsICIlaGQuJWhkLiVkIiwgJihhZGRyLnNhcF9hZGRyLml0ZiksCi0gICAgICAgICAgICAgICAgICAgJihhZGRyLnNhcF9hZGRyLnZwaSksICYoYWRkci5zYXBfYWRkci52Y2kpKSA9PSAzKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV0c25tcF9hYWw1cHZjX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgICAgICB9IGVsc2UgaWYgKHNzY2FuZihzdHIsICIlaGQuJWQiLCAmKGFkZHIuc2FwX2FkZHIudnBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJihhZGRyLnNhcF9hZGRyLnZjaSkpID09IDIpIHsKLSAgICAgICAgICAgIGFkZHIuc2FwX2FkZHIuaXRmID0gMDsKLSAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3NjYW5mKHN0ciwgIiVkIiwgJihhZGRyLnNhcF9hZGRyLnZjaSkpID09IDEpIHsKLSAgICAgICAgICAgIGFkZHIuc2FwX2FkZHIuaXRmID0gMDsKLSAgICAgICAgICAgIGFkZHIuc2FwX2FkZHIudnBpID0gMDsKLSAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfYWFsNXB2Y19jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIGFkZHI7Ci0KLSAgICBpZiAob19sZW4gPT0gOCkgewotICAgICAgICBhZGRyLnNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7Ci0gICAgICAgIGFkZHIuc2FwX2FkZHIuaXRmID0gKG9bMF0gPDwgOCkgKyAob1sxXSA8PCAwKTsKLSAgICAgICAgYWRkci5zYXBfYWRkci52cGkgPSAob1syXSA8PCA4KSArIChvWzNdIDw8IDApOwotICAgICAgICBhZGRyLnNhcF9hZGRyLnZjaSA9Ci0JICAgIChvWzRdIDw8IDI0KSArIChvWzVdIDw8IDE2KSArIChvWzZdIDw8IDgpICsgKG9bN10gPDwgMCk7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotCi12b2lkCi1uZXRzbm1wX2FhbDVwdmNfY3Rvcih2b2lkKQotewotICAgIGFhbDVwdmNEb21haW4ubmFtZSA9IG5ldHNubXBfQUFMNVBWQ0RvbWFpbjsKLSAgICBhYWw1cHZjRG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfQUFMNVBWQ0RvbWFpbikgLyBzaXplb2Yob2lkKTsKLSAgICBhYWw1cHZjRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDMsIHNpemVvZihjaGFyICopKTsKLSAgICBhYWw1cHZjRG9tYWluLnByZWZpeFswXSA9ICJhYWw1cHZjIjsKLSAgICBhYWw1cHZjRG9tYWluLnByZWZpeFsxXSA9ICJwdmMiOwotCi0gICAgYWFsNXB2Y0RvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKLSAgICBhYWw1cHZjRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX2FhbDVwdmNfY3JlYXRlX3RzdHJpbmc7Ci0gICAgYWFsNXB2Y0RvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF9hYWw1cHZjX2NyZWF0ZV9vc3RyaW5nOwotCi0gICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZhYWw1cHZjRG9tYWluKTsKLX0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMgYi9zbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODVhMjE0Li4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MjYgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZmRlZiBXSU4zMgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1VOX0gKLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfSU9fSAotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0ZDTlRMX0gKLSNpbmNsdWRlIDxmY250bC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmg+Ci0KLSNpZm5kZWYgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOCi0jZGVmaW5lIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTiAgNQotI2VuZGlmCi0KLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9DQUxMQkFDS19ET01BSU4KLQotc3RhdGljIG5ldHNubXBfdHJhbnNwb3J0X2xpc3QgKnRybGlzdCA9IE5VTEw7Ci0KLXN0YXRpYyBpbnQgICAgICBjYWxsYmFja19jb3VudCA9IDA7Ci0KLXR5cGVkZWYgc3RydWN0IGNhbGxiYWNrX2hhY2tfcyB7Ci0gICAgdm9pZCAgICAgICAgICAgKm9yaWdfdHJhbnNwb3J0X2RhdGE7Ci0gICAgbmV0c25tcF9wZHUgICAgKnBkdTsKLX0gY2FsbGJhY2tfaGFjazsKLQotdHlwZWRlZiBzdHJ1Y3QgY2FsbGJhY2tfcXVldWVfcyB7Ci0gICAgaW50ICAgICAgICAgICAgIGNhbGxiYWNrX251bTsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKml0ZW07Ci0gICAgc3RydWN0IGNhbGxiYWNrX3F1ZXVlX3MgKm5leHQsICpwcmV2OwotfSBjYWxsYmFja19xdWV1ZTsKLQotY2FsbGJhY2tfcXVldWUgKnRoZXF1ZXVlOwotCi1zdGF0aWMgbmV0c25tcF90cmFuc3BvcnQgKgotZmluZF90cmFuc3BvcnRfZnJvbV9jYWxsYmFja19udW0oaW50IG51bSkKLXsKLSAgICBzdGF0aWMgbmV0c25tcF90cmFuc3BvcnRfbGlzdCAqcHRyOwotICAgIGZvciAocHRyID0gdHJsaXN0OyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKLSAgICAgICAgaWYgKCgobmV0c25tcF9jYWxsYmFja19pbmZvICopIHB0ci0+dHJhbnNwb3J0LT5kYXRhKS0+Ci0gICAgICAgICAgICBjYWxsYmFja19udW0gPT0gbnVtKQotICAgICAgICAgICAgcmV0dXJuIHB0ci0+dHJhbnNwb3J0OwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotY2FsbGJhY2tfZGVidWdfcGR1KGNvbnN0IGNoYXIgKm91cnN0cmluZywgbmV0c25tcF9wZHUgKnBkdSkKLXsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZiOwotICAgIGludCAgICAgICAgICAgICBpID0gMTsKLSAgICBERUJVR01TR1RMKChvdXJzdHJpbmcsCi0gICAgICAgICAgICAgICAgIlBEVTogY29tbWFuZCA9ICVkLCBlcnJzdGF0ID0gJWQsIGVycmluZGV4ID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgcGR1LT5jb21tYW5kLCBwZHUtPmVycnN0YXQsIHBkdS0+ZXJyaW5kZXgpKTsKLSAgICBmb3IgKHZiID0gcGR1LT52YXJpYWJsZXM7IHZiOyB2YiA9IHZiLT5uZXh0X3ZhcmlhYmxlKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKG91cnN0cmluZywgIiAgdmFyICVkOiIsIGkrKykpOwotICAgICAgICBERUJVR01TR1ZBUigob3Vyc3RyaW5nLCB2YikpOwotICAgICAgICBERUJVR01TRygob3Vyc3RyaW5nLCAiXG4iKSk7Ci0gICAgfQotfQotCi12b2lkCi1jYWxsYmFja19wdXNoX3F1ZXVlKGludCBudW0sIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqaXRlbSkKLXsKLSAgICBjYWxsYmFja19xdWV1ZSAqbmV3aXRlbSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoY2FsbGJhY2tfcXVldWUpOwotICAgIGNhbGxiYWNrX3F1ZXVlICpwdHI7Ci0KLSAgICBuZXdpdGVtLT5jYWxsYmFja19udW0gPSBudW07Ci0gICAgbmV3aXRlbS0+aXRlbSA9IGl0ZW07Ci0gICAgaWYgKHRoZXF1ZXVlKSB7Ci0gICAgICAgIGZvciAocHRyID0gdGhlcXVldWU7IHB0ciAmJiBwdHItPm5leHQ7IHB0ciA9IHB0ci0+bmV4dCkgewotICAgICAgICB9Ci0gICAgICAgIHB0ci0+bmV4dCA9IG5ld2l0ZW07Ci0gICAgICAgIG5ld2l0ZW0tPnByZXYgPSBwdHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhlcXVldWUgPSBuZXdpdGVtOwotICAgIH0KLSAgICBERUJVR0lGKCJkdW1wX3NlbmRfY2FsbGJhY2tfdHJhbnNwb3J0IikgewotICAgICAgICBjYWxsYmFja19kZWJ1Z19wZHUoImR1bXBfc2VuZF9jYWxsYmFja190cmFuc3BvcnQiLCBpdGVtLT5wZHUpOwotICAgIH0KLX0KLQotbmV0c25tcF9jYWxsYmFja19wYXNzICoKLWNhbGxiYWNrX3BvcF9xdWV1ZShpbnQgbnVtKQotewotICAgIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqY3A7Ci0gICAgY2FsbGJhY2tfcXVldWUgKnB0cjsKLQotICAgIGZvciAocHRyID0gdGhlcXVldWU7IHB0cjsgcHRyID0gcHRyLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwdHItPmNhbGxiYWNrX251bSA9PSBudW0pIHsKLSAgICAgICAgICAgIGlmIChwdHItPnByZXYpIHsKLSAgICAgICAgICAgICAgICBwdHItPnByZXYtPm5leHQgPSBwdHItPm5leHQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoZXF1ZXVlID0gcHRyLT5uZXh0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHB0ci0+bmV4dCkgewotICAgICAgICAgICAgICAgIHB0ci0+bmV4dC0+cHJldiA9IHB0ci0+cHJldjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNwID0gcHRyLT5pdGVtOwotICAgICAgICAgICAgU05NUF9GUkVFKHB0cik7Ci0gICAgICAgICAgICBERUJVR0lGKCJkdW1wX3JlY3ZfY2FsbGJhY2tfdHJhbnNwb3J0IikgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrX2RlYnVnX3BkdSgiZHVtcF9yZWN2X2NhbGxiYWNrX3RyYW5zcG9ydCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwLT5wZHUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNwOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCi0gKi8KLQotY2hhciAqCi1uZXRzbm1wX2NhbGxiYWNrX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgY2hhciBidWZbU1BSSU5UX01BWF9MRU5dOwotICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlzdHVmZjsKLQotICAgIGlmICghdCkKLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiY2FsbGJhY2s6IHVua25vd24iKTsKLQotICAgIG15c3R1ZmYgPSAobmV0c25tcF9jYWxsYmFja19pbmZvICopIHQtPmRhdGE7Ci0KLSAgICBpZiAoIW15c3R1ZmYpCi0gICAgICAgIHJldHVybiBzdHJkdXAoImNhbGxiYWNrOiB1bmtub3duIik7Ci0KLSAgICBzbnByaW50ZihidWYsIFNQUklOVF9NQVhfTEVOLCAiY2FsbGJhY2s6ICVkIG9uIGZkICVkIiwKLSAgICAgICAgICAgICBteXN0dWZmLT5jYWxsYmFja19udW0sIG15c3R1ZmYtPnBpcGVmZHNbMF0pOwotICAgIHJldHVybiBzdHJkdXAoYnVmKTsKLX0KLQotCi0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCi0gKi8KLQotaW50Ci1uZXRzbm1wX2NhbGxiYWNrX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBjaGFyIG5ld2J1ZlsxXTsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX2luZm8gKm15c3R1ZmYgPSAobmV0c25tcF9jYWxsYmFja19pbmZvICopIHQtPmRhdGE7Ci0KLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfcmVjdiBlbnRlclxuIikpOwotCi0gICAgd2hpbGUgKHJjIDwgMCkgewotI2lmZGVmIFdJTjMyCi0JcmMgPSByZWN2ZnJvbShteXN0dWZmLT5waXBlZmRzWzBdLCBuZXdidWYsIDEsIDAsIE5VTEwsIDApOwotI2Vsc2UKLQlyYyA9IHJlYWQobXlzdHVmZi0+cGlwZWZkc1swXSwgbmV3YnVmLCAxKTsKLSNlbmRpZgotCWlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0KLSAgICBpZiAocmMgPiAwKQotICAgICAgICBtZW1zZXQoYnVmLCAwLCByYyk7Ci0KLSAgICBpZiAobXlzdHVmZi0+bGlua2VkdG8pIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogd2UncmUgdGhlIGNsaWVudC4gIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIAotICAgICAgICAgKi8KLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBtYWxsb2MgdGhlIHNwYWNlIGhlcmUsIGJ1dCBpdCdzIGZpbGxlZCBpbiBieQotICAgICAgICAgKiBzbm1wX2NhbGxiYWNrX2NyZWF0ZWRfcGR1KCkgYmVsb3cgCi0gICAgICAgICAqLwotICAgICAgICBpbnQgICAgICAgICAgICAqcmV0dXJubnVtID0gKGludCAqKSBjYWxsb2MoMSwgc2l6ZW9mKGludCkpOwotICAgICAgICAqb3BhcXVlID0gcmV0dXJubnVtOwotICAgICAgICAqb2xlbmd0aCA9IHNpemVvZihpbnQpOwotICAgIH0KLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfcmVjdiBleGl0XG4iKSk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotaW50Ci1uZXRzbm1wX2NhbGxiYWNrX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgZnJvbSwgcmMgPSAtMTsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX2luZm8gKm15c3R1ZmYgPSAobmV0c25tcF9jYWxsYmFja19pbmZvICopIHQtPmRhdGE7Ci0gICAgbmV0c25tcF9jYWxsYmFja19wYXNzICpjcDsKLQotICAgIC8qCi0gICAgICogZXh0cmFjdCB0aGUgcGR1IGZyb20gdGhlIGhhY2tlZCBidWZmZXIgCi0gICAgICovCi0gICAgbmV0c25tcF90cmFuc3BvcnQgKm90aGVyX3NpZGU7Ci0gICAgY2FsbGJhY2tfaGFjayAgKmNoID0gKGNhbGxiYWNrX2hhY2sgKikgKiBvcGFxdWU7Ci0gICAgbmV0c25tcF9wZHUgICAgKnBkdSA9IGNoLT5wZHU7Ci0gICAgKm9wYXF1ZSA9IGNoLT5vcmlnX3RyYW5zcG9ydF9kYXRhOwotICAgIFNOTVBfRlJFRShjaCk7Ci0KLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfc2VuZCBlbnRlclxuIikpOwotCi0gICAgY3AgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfY2FsbGJhY2tfcGFzcyk7Ci0gICAgaWYgKCFjcCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgY3AtPnBkdSA9IHNubXBfY2xvbmVfcGR1KHBkdSk7Ci0gICAgaWYgKGNwLT5wZHUtPnRyYW5zcG9ydF9kYXRhKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG5vdCBuZWVkZWQgYW5kIG5vdCBwcm9wZXJseSBmcmVlZCBsYXRlciAKLSAgICAgICAgICovCi0gICAgICAgIFNOTVBfRlJFRShjcC0+cGR1LT50cmFuc3BvcnRfZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKGNwLT5wZHUtPmZsYWdzICYgVUNEX01TR19GTEFHX0VYUEVDVF9SRVNQT05TRSkKLSAgICAgICAgY3AtPnBkdS0+ZmxhZ3MgXj0gVUNEX01TR19GTEFHX0VYUEVDVF9SRVNQT05TRTsKLQotICAgIC8qCi0gICAgICogcHVzaCB0aGUgc2VudCBwZHUgb250byB0aGUgc3RhY2sgCi0gICAgICovCi0gICAgLyoKLSAgICAgKiBBTkQgc2VuZCBhIGJvZ3VzIGJ5dGUgdG8gdGhlIHJlbW90ZSBjYWxsYmFjayByZWNlaXZlcidzIHBpcGUgCi0gICAgICovCi0gICAgaWYgKG15c3R1ZmYtPmxpbmtlZHRvKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHdlJ3JlIHRoZSBjbGllbnQsIHNlbmQgaXQgdG8gdGhlIHBhcmVudCAKLSAgICAgICAgICovCi0gICAgICAgIGNwLT5yZXR1cm5fdHJhbnNwb3J0X251bSA9IG15c3R1ZmYtPmNhbGxiYWNrX251bTsKLQotICAgICAgICBvdGhlcl9zaWRlID0gZmluZF90cmFuc3BvcnRfZnJvbV9jYWxsYmFja19udW0obXlzdHVmZi0+bGlua2VkdG8pOwotICAgICAgICBpZiAoIW90aGVyX3NpZGUpIHsKLSAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoY3AtPnBkdSk7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUoY3ApOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLQl3aGlsZSAocmMgPCAwKSB7Ci0jaWZkZWYgV0lOMzIKLQkgICAgcmMgPSBzZW5kdG8oKChuZXRzbm1wX2NhbGxiYWNrX2luZm8qKSBvdGhlcl9zaWRlLT5kYXRhKS0+cGlwZWZkc1sxXSwgIiAiLCAxLCAwLCBOVUxMLCAwKTsKLSNlbHNlCi0JICAgIHJjID0gd3JpdGUoKChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKilvdGhlcl9zaWRlLT5kYXRhKS0+cGlwZWZkc1sxXSwKLQkJICAgICAgICIgIiwgMSk7Ci0jZW5kaWYKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICAgICAgY2FsbGJhY2tfcHVzaF9xdWV1ZShteXN0dWZmLT5saW5rZWR0bywgY3ApOwotICAgICAgICAvKgotICAgICAgICAgKiB3ZSBkb24ndCBuZWVkIHRoZSB0cmFuc3BvcnQgZGF0YSBhbnkgbW9yZSAKLSAgICAgICAgICovCi0gICAgICAgIGlmICgqb3BhcXVlKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUoKm9wYXF1ZSk7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHdlJ3JlIHRoZSBzZXJ2ZXIsIHNlbmQgaXQgdG8gdGhlIHBlcnNvbiB0aGF0IHNlbnQgdXMgdGhlIHJlcXVlc3QgCi0gICAgICAgICAqLwotICAgICAgICBmcm9tID0gKiooKGludCAqKikgb3BhcXVlKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogd2UgZG9uJ3QgbmVlZCB0aGUgdHJhbnNwb3J0IGRhdGEgYW55IG1vcmUgCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKm9wYXF1ZSkgewotICAgICAgICAgICAgU05NUF9GUkVFKCpvcGFxdWUpOwotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgb3RoZXJfc2lkZSA9IGZpbmRfdHJhbnNwb3J0X2Zyb21fY2FsbGJhY2tfbnVtKGZyb20pOwotICAgICAgICBpZiAoIW90aGVyX3NpZGUpIHsKLSAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoY3AtPnBkdSk7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUoY3ApOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0Jd2hpbGUgKHJjIDwgMCkgewotI2lmZGVmIFdJTjMyCi0JICAgIHJjID0gc2VuZHRvKCgobmV0c25tcF9jYWxsYmFja19pbmZvKikgb3RoZXJfc2lkZS0+ZGF0YSktPnBpcGVmZHNbMV0sICIgIiwgMSwgMCwgTlVMTCwgMCk7Ci0jZWxzZQotCSAgICByYyA9IHdyaXRlKCgobmV0c25tcF9jYWxsYmFja19pbmZvICopb3RoZXJfc2lkZS0+ZGF0YSktPnBpcGVmZHNbMV0sCi0JCSAgICAgICAiICIsIDEpOwotI2VuZGlmCi0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgICAgIGNhbGxiYWNrX3B1c2hfcXVldWUoZnJvbSwgY3ApOwotICAgIH0KLQotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19zZW5kIGV4aXRcbiIpKTsKLSAgICByZXR1cm4gMDsKLX0KLQotCi0KLWludAotbmV0c25tcF9jYWxsYmFja19jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteXN0dWZmID0gKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0LT5kYXRhOwotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19jbG9zZSBlbnRlclxuIikpOwotCi0jaWZkZWYgV0lOMzIKLSAgICByYyAgPSBjbG9zZXNvY2tldChteXN0dWZmLT5waXBlZmRzWzBdKTsKLSAgICByYyB8PSBjbG9zZXNvY2tldChteXN0dWZmLT5waXBlZmRzWzFdKTsKLSNlbHNlCi0gICAgcmMgID0gY2xvc2UobXlzdHVmZi0+cGlwZWZkc1swXSk7Ci0gICAgcmMgfD0gY2xvc2UobXlzdHVmZi0+cGlwZWZkc1sxXSk7Ci0jZW5kaWYKLQotICAgIHJjIHw9IG5ldHNubXBfdHJhbnNwb3J0X3JlbW92ZV9mcm9tX2xpc3QoJnRybGlzdCwgdCk7Ci0KLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfY2xvc2UgZXhpdFxuIikpOwotICAgIHJldHVybiByYzsKLX0KLQotCi0KLWludAotbmV0c25tcF9jYWxsYmFja19hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2FjY2VwdCBlbnRlclxuIikpOwotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19hY2NlcHQgZXhpdFxuIikpOwotICAgIHJldHVybiAwOwotfQotCi0KLQotLyoKLSAqIE9wZW4gYSBDYWxsYmFjay1kb21haW4gdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyCi0gKiBpcyB0aGUgbG9jYWwgYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZQotICogc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0bwotICogKGFuZCB3ZSBtYWtlIHVwIGEgdGVtcG9yYXJ5IG5hbWUgZm9yIHRoZSBsb2NhbCBlbmQgb2YgdGhlCi0gKiBjb25uZWN0aW9uKS4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfY2FsbGJhY2tfdHJhbnNwb3J0KGludCB0bykKLXsKLQotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX2luZm8gKm15ZGF0YTsKLSAgICBpbnQgICAgICAgICAgICAgcmM7Ci0KLSAgICAvKgotICAgICAqIHRyYW5zcG9ydCAKLSAgICAgKi8KLSAgICB0ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RyYW5zcG9ydCk7Ci0gICAgaWYgKCF0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qCi0gICAgICogb3VyIHN0dWZmIAotICAgICAqLwotICAgIG15ZGF0YSA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9jYWxsYmFja19pbmZvKTsKLSAgICBteWRhdGEtPmxpbmtlZHRvID0gdG87Ci0gICAgbXlkYXRhLT5jYWxsYmFja19udW0gPSArK2NhbGxiYWNrX2NvdW50OwotICAgIG15ZGF0YS0+ZGF0YSA9IE5VTEw7Ci0gICAgdC0+ZGF0YSA9IG15ZGF0YTsKLQotI2lmZGVmIFdJTjMyCi0gICAgcmMgPSBjcmVhdGVfd2lucGlwZV90cmFuc3BvcnQobXlkYXRhLT5waXBlZmRzKTsKLSNlbHNlCi0gICAgcmMgPSBwaXBlKG15ZGF0YS0+cGlwZWZkcyk7Ci0jZW5kaWYKLSAgICB0LT5zb2NrID0gbXlkYXRhLT5waXBlZmRzWzBdOwotCi0gICAgaWYgKHJjKSB7Ci0gICAgICAgIFNOTVBfRlJFRShteWRhdGEpOwotICAgICAgICBTTk1QX0ZSRUUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmZfcmVjdiAgICA9IG5ldHNubXBfY2FsbGJhY2tfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgPSBuZXRzbm1wX2NhbGxiYWNrX3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgID0gbmV0c25tcF9jYWxsYmFja19jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgPSBuZXRzbm1wX2NhbGxiYWNrX2FjY2VwdDsKLSAgICB0LT5mX2ZtdGFkZHIgPSBuZXRzbm1wX2NhbGxiYWNrX2ZtdGFkZHI7Ci0KLSAgICBuZXRzbm1wX3RyYW5zcG9ydF9hZGRfdG9fbGlzdCgmdHJsaXN0LCB0KTsKLQotICAgIGlmICh0bykKLSAgICAgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJpbml0aWFsaXplZCAlZCBsaW5rZWQgdG8gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIG15ZGF0YS0+Y2FsbGJhY2tfbnVtLCB0bykpOwotICAgIGVsc2UKLSAgICAgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsCi0gICAgICAgICAgICAgICAgICAgICJpbml0aWFsaXplZCBtYXN0ZXIgbGlzdGVuaW5nIG9uICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBteWRhdGEtPmNhbGxiYWNrX251bSkpOwotICAgIHJldHVybiB0OwotfQotCi1pbnQKLW5ldHNubXBfY2FsbGJhY2tfaG9va19wYXJzZShuZXRzbm1wX3Nlc3Npb24gKiBzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHBhY2tldHB0ciwgc2l6ZV90IGxlbikKLXsKLSAgICBpZiAoU05NUF9NU0dfUkVTUE9OU0UgPT0gcGR1LT5jb21tYW5kIHx8Ci0gICAgICAgIFNOTVBfTVNHX1JFUE9SVCA9PSBwZHUtPmNvbW1hbmQpCi0gICAgICAgIHBkdS0+ZmxhZ3MgfD0gVUNEX01TR19GTEFHX1JFU1BPTlNFX1BEVTsKLSAgICBlbHNlCi0gICAgICAgIHBkdS0+ZmxhZ3MgJj0gKH5VQ0RfTVNHX0ZMQUdfUkVTUE9OU0VfUERVKTsKLQotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQotCi1pbnQKLW5ldHNubXBfY2FsbGJhY2tfaG9va19idWlsZChuZXRzbm1wX3Nlc3Npb24gKiBzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBwdGssIHNpemVfdCAqIGxlbikKLXsKLSAgICAvKgotICAgICAqIHZlcnkgZ3Jvc3MgaGFjaywgYXMgdGhpcyBpcyBwYXNzZWQgbGF0ZXIgdG8gdGhlIHRyYW5zcG9ydF9zZW5kCi0gICAgICogZnVuY3Rpb24gCi0gICAgICovCi0gICAgY2FsbGJhY2tfaGFjayAgKmNoID0gU05NUF9NQUxMT0NfVFlQRURFRihjYWxsYmFja19oYWNrKTsKLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfYnVpbGQgZW50ZXJcbiIpKTsKLSAgICBjaC0+cGR1ID0gcGR1OwotICAgIGNoLT5vcmlnX3RyYW5zcG9ydF9kYXRhID0gcGR1LT50cmFuc3BvcnRfZGF0YTsKLSAgICBwZHUtPnRyYW5zcG9ydF9kYXRhID0gY2g7Ci0gICAgc3dpdGNoIChwZHUtPmNvbW1hbmQpIHsKLSAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6Ci0gICAgICAgIGlmIChwZHUtPm1heF9yZXBldGl0aW9ucyA8IDApIHsKLSAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9SRVBFVElUSU9OUzsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAocGR1LT5ub25fcmVwZWF0ZXJzIDwgMCkgewotICAgICAgICAgICAgc3AtPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX1JFUEVBVEVSUzsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNOTVBfTVNHX1JFU1BPTlNFOgotICAgIGNhc2UgU05NUF9NU0dfVFJBUDoKLSAgICBjYXNlIFNOTVBfTVNHX1RSQVAyOgotICAgICAgICBwZHUtPmZsYWdzICY9ICh+VUNEX01TR19GTEFHX0VYUEVDVF9SRVNQT05TRSk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEZhbGx0aHJvdWdoCi0gICAgICAgICAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChwZHUtPmVycnN0YXQgPT0gU05NUF9ERUZBVUxUX0VSUlNUQVQpCi0gICAgICAgICAgICBwZHUtPmVycnN0YXQgPSAwOwotICAgICAgICBpZiAocGR1LT5lcnJpbmRleCA9PSBTTk1QX0RFRkFVTFRfRVJSSU5ERVgpCi0gICAgICAgICAgICBwZHUtPmVycmluZGV4ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBDb3B5IG1pc3NpbmcgdmFsdWVzIGZyb20gc2Vzc2lvbiBkZWZhdWx0cwotICAgICAqLwotICAgIHN3aXRjaCAocGR1LT52ZXJzaW9uKSB7Ci0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLSAgICBjYXNlIFNOTVBfVkVSU0lPTl8xOgotI2VuZGlmCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0gICAgY2FzZSBTTk1QX1ZFUlNJT05fMmM6Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLSAgICAgICAgaWYgKHBkdS0+Y29tbXVuaXR5X2xlbiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoc3AtPmNvbW11bml0eV9sZW4gPT0gMCkgewotICAgICAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9DT01NVU5JVFk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGR1LT5jb21tdW5pdHkgPSAodV9jaGFyICopIG1hbGxvYyhzcC0+Y29tbXVuaXR5X2xlbik7Ci0gICAgICAgICAgICBpZiAocGR1LT5jb21tdW5pdHkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX01BTExPQzsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1tb3ZlKHBkdS0+Y29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICBzcC0+Y29tbXVuaXR5LCBzcC0+Y29tbXVuaXR5X2xlbik7Ci0gICAgICAgICAgICBwZHUtPmNvbW11bml0eV9sZW4gPSBzcC0+Y29tbXVuaXR5X2xlbjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgU05NUF9WRVJTSU9OXzM6Ci0gICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZUxlbiA9PSAwKSB7Ci0JICBwZHUtPnNlY3VyaXR5TmFtZSA9IChjaGFyICopbWFsbG9jKHNwLT5zZWN1cml0eU5hbWVMZW4pOwotICAgICAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlOYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9NQUxMT0M7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWVtbW92ZShwZHUtPnNlY3VyaXR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIHNwLT5zZWN1cml0eU5hbWUsIHNwLT5zZWN1cml0eU5hbWVMZW4pOwotICAgICAgICAgICAgcGR1LT5zZWN1cml0eU5hbWVMZW4gPSBzcC0+c2VjdXJpdHlOYW1lTGVuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TW9kZWwgPT0gLTEpCi0gICAgICAgICAgICBwZHUtPnNlY3VyaXR5TW9kZWwgPSBzcC0+c2VjdXJpdHlNb2RlbDsKLSAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlMZXZlbCA9PSAwKQotICAgICAgICAgICAgcGR1LT5zZWN1cml0eUxldmVsID0gc3AtPnNlY3VyaXR5TGV2ZWw7Ci0gICAgICAgIC8qIFdIQVQgRUxTRSA/PyAqLwotICAgIH0KLSAgICBwdGtbMF0gPSAwOwotICAgICpsZW4gPSAxOwotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19idWlsZCBleGl0XG4iKSk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludAotbmV0c25tcF9jYWxsYmFja19jaGVja19wYWNrZXQodV9jaGFyICogcGt0LCBzaXplX3QgbGVuKQotewotICAgIHJldHVybiAxOwotfQotCi1uZXRzbm1wX3BkdSAgICAqCi1uZXRzbm1wX2NhbGxiYWNrX2NyZWF0ZV9wZHUobmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvcGFxdWUsIHNpemVfdCBvbGVuZ3RoKQotewotICAgIG5ldHNubXBfcGR1ICAgICpwZHU7Ci0gICAgbmV0c25tcF9jYWxsYmFja19wYXNzICpjcCA9Ci0gICAgICAgIGNhbGxiYWNrX3BvcF9xdWV1ZSgoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0cmFuc3BvcnQtPmRhdGEpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX251bSk7Ci0gICAgaWYgKCFjcCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGR1ID0gY3AtPnBkdTsKLSAgICBwZHUtPnRyYW5zcG9ydF9kYXRhID0gb3BhcXVlOwotICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoID0gb2xlbmd0aDsKLSAgICBpZiAob3BhcXVlKSAgICAgICAgICAgICAgICAgLyogaWYgY3JlYXRlZCwgd2UncmUgdGhlIHNlcnZlciAqLwotICAgICAgICAqKChpbnQgKikgb3BhcXVlKSA9IGNwLT5yZXR1cm5fdHJhbnNwb3J0X251bTsKLSAgICBTTk1QX0ZSRUUoY3ApOwotICAgIHJldHVybiBwZHU7Ci19Ci0KLW5ldHNubXBfc2Vzc2lvbiAqCi1uZXRzbm1wX2NhbGxiYWNrX29wZW4oaW50IGF0dGFjaF90bywKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyZXR1cm5fZnVuYykgKGludCBvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxaWQsIG5ldHNubXBfcGR1ICpwZHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICptYWdpYyksCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosIGludCksCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF9wZHUgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpCi17Ci0gICAgbmV0c25tcF9zZXNzaW9uIGNhbGxiYWNrX3Nlc3MsICpjYWxsYmFja19zczsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqY2FsbGJhY2tfdHI7Ci0KLSAgICBjYWxsYmFja190ciA9IG5ldHNubXBfY2FsbGJhY2tfdHJhbnNwb3J0KGF0dGFjaF90byk7Ci0gICAgc25tcF9zZXNzX2luaXQoJmNhbGxiYWNrX3Nlc3MpOwotICAgIGNhbGxiYWNrX3Nlc3MuY2FsbGJhY2sgPSByZXR1cm5fZnVuYzsKLSAgICBpZiAoYXR0YWNoX3RvKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGNsaWVudCAKLSAgICAgICAgICovCi0gICAgICAgIC8qCi0gICAgICAgICAqIHRyeXNlc3MuY29tbXVuaXR5ID0gKHVfY2hhciAqKSBjYWxsYmFja19zczsgCi0gICAgICAgICAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhbGxiYWNrX3Nlc3MuaXNBdXRob3JpdGF0aXZlID0gU05NUF9TRVNTX0FVVEhPUklUQVRJVkU7Ci0gICAgfQotICAgIGNhbGxiYWNrX3Nlc3MucmVtb3RlX3BvcnQgPSAwOwotICAgIGNhbGxiYWNrX3Nlc3MucmV0cmllcyA9IDA7Ci0gICAgY2FsbGJhY2tfc2Vzcy50aW1lb3V0ID0gMzAwMDAwMDA7Ci0gICAgY2FsbGJhY2tfc2Vzcy52ZXJzaW9uID0gU05NUF9ERUZBVUxUX1ZFUlNJT047ICAgICAgIC8qIChtb3N0bHkpIGJvZ3VzICovCi0gICAgY2FsbGJhY2tfc3MgPSBzbm1wX2FkZF9mdWxsKCZjYWxsYmFja19zZXNzLCBjYWxsYmFja190ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByZV9wYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19ob29rX3BhcnNlLCBmcG9zdF9wYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19ob29rX2J1aWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrX2NoZWNrX3BhY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19jcmVhdGVfcGR1KTsKLSAgICBpZiAoY2FsbGJhY2tfc3MpCi0gICAgICAgIGNhbGxiYWNrX3NzLT5sb2NhbF9wb3J0ID0KLSAgICAgICAgICAgICgobmV0c25tcF9jYWxsYmFja19pbmZvICopIGNhbGxiYWNrX3RyLT5kYXRhKS0+Y2FsbGJhY2tfbnVtOwotICAgIHJldHVybiBjYWxsYmFja19zczsKLX0KLQotCi0KLXZvaWQKLW5ldHNubXBfY2xlYXJfY2FsbGJhY2tfbGlzdCh2b2lkKQotewotCi0gICAgbmV0c25tcF90cmFuc3BvcnRfbGlzdCAqbGlzdCA9IHRybGlzdCwgKm5leHQgPSBOVUxMOwotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ciA9IE5VTEw7Ci0KLSAgICBERUJVR01TR1RMKCgiY2FsbGJhY2tfY2xlYXIiLCAiY2FsbGVkIG5ldHNubXBfY2FsbGJhY2tfY2xlYXJfbGlzdCgpXG4iKSk7Ci0gICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewotCW5leHQgPSBsaXN0LT5uZXh0OwotCXRyID0gbGlzdC0+dHJhbnNwb3J0OwotCi0JaWYgKHRyICE9IE5VTEwpIHsKLQkgICAgdHItPmZfY2xvc2UodHIpOwotICAJICAgIG5ldHNubXBfdHJhbnNwb3J0X3JlbW92ZV9mcm9tX2xpc3QoJnRybGlzdCwgdHIpOwotCSAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHRyKTsKLQl9Ci0JbGlzdCA9IG5leHQ7Ci0gICAgfQotICAgIHRybGlzdCA9IE5VTEw7Ci0KLX0KLQotI2VuZGlmIC8qIE5FVFNOTVBfVFJBTlNQT1JUX0NBTExCQUNLX0RPTUFJTiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wSVBYRG9tYWluLmMgYi9zbm1wbGliL3NubXBJUFhEb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNhZmQ1Yy4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBJUFhEb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaD4KLQotI2RlZmluZSBTTk1QX0lQWF9ERUZBVUxUX1BPUlQJMzY4NzkgICAvKiAgU3BlY2lmaWVkIGluIFJGQyAxNDIwLiAgKi8KLXN0YXRpYyBuZXRzbm1wX3Rkb21haW4gaXB4RG9tYWluOwotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCi0gKi8KLQotc3RhdGljIGNoYXIgKgotbmV0c25tcF9pcHhfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaXB4ICp0byA9IE5VTEw7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMICYmIGxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2lweCAqKSBkYXRhOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaXB4ICopIHQtPmRhdGE7Ci0gICAgfQotICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBzdHJkdXAoIklQWDogdW5rbm93biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgdG1wWzY0XTsKLSAgICAgICAgc3ByaW50Zih0bXAsICJJUFg6ICUwOFg6JTAyWCUwMlglMDJYJTAyWCUwMlglMDJYLyVodSIsCi0gICAgICAgICAgICAgICAgbnRvaGwodG8tPnNpcHhfbmV0d29yayksIHRvLT5zaXB4X25vZGVbMF0sCi0gICAgICAgICAgICAgICAgdG8tPnNpcHhfbm9kZVsxXSwgdG8tPnNpcHhfbm9kZVsyXSwgdG8tPnNpcHhfbm9kZVszXSwKLSAgICAgICAgICAgICAgICB0by0+c2lweF9ub2RlWzRdLCB0by0+c2lweF9ub2RlWzVdLCBudG9ocyh0by0+c2lweF9wb3J0KSk7Ci0gICAgICAgIHJldHVybiBzdHJkdXAodG1wKTsKLSAgICB9Ci19Ci0KLQotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAotICovCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfaXB4X3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50CQkgICAgIHJjID0gLTE7Ci0gICAgc29ja2xlbl90CSAgICAgZnJvbWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpOwotICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIGZyb20gPSAoc3RydWN0IHNvY2thZGRyICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSk7Ci0gICAgICAgIGlmIChmcm9tID09IE5VTEwpIHsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtc2V0KGZyb20sIDAsIGZyb21sZW4pOwotICAgICAgICB9Ci0KLQl3aGlsZSAocmMgPCAwKSB7Ci0JICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgZnJvbSwgJmZyb21sZW4pOwotCSAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCSAgICBicmVhazsKLQkgIH0KLQl9Ci0KLSAgICAgICAgaWYgKHJjID49IDApIHsKLSAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfaXB4X2ZtdGFkZHIoTlVMTCwgZnJvbSwgZnJvbWxlbik7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9pcHgiLCJyZWN2ZnJvbSBmZCAlZCBnb3QgJWQgYnl0ZXMoZnJvbSAlcylcbiIsCi0JCQl0LT5zb2NrLCByYywgc3RyKSk7Ci0gICAgICAgICAgICBmcmVlKHN0cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9pcHgiLCAicmVjdmZyb20gZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICB9Ci0gICAgICAgICpvcGFxdWUgPSAodm9pZCAqKSBmcm9tOwotICAgICAgICAqb2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF9pcHhfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvID0gTlVMTDsKLQotICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKLQkqb2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICgqb3BhcXVlKTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwgJiYKLSAgICAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKHQtPmRhdGEpOwotICAgIH0KLQotICAgIGlmICh0byAhPSBOVUxMICYmIHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF9pcHhfZm10YWRkcihOVUxMLCAodm9pZCAqKXRvLAotCQkJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9pcHgiLCAic2VuZCAlZCBieXRlcyBmcm9tICVwIHRvICVzIG9uIGZkICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBzaXplLCBidWYsIHN0ciwgdC0+c29jaykpOwotICAgICAgICBmcmVlKHN0cik7Ci0Jd2hpbGUgKHJjIDwgMCkgewotCSAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIHRvLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfaXB4X2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIGludCByYyA9IC0xOwotICAgIGlmICh0LT5zb2NrID49IDApIHsKLSNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAotICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOwotI2Vsc2UKLSAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKLSNlbmRpZgotICAgICAgICB0LT5zb2NrID0gLTE7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLS8qCi0gKiBPcGVuIGEgSVBYLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKLSAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAotICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9pcHhfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pcHggKmFkZHIsIGludCBsb2NhbCkKLXsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKLSAgICBjaGFyICAgICAgICAgICAqc3RyID0gTlVMTDsKLQotICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2lweF9mYW1pbHkgIT0gQUZfSVBYKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc3RyID0gbmV0c25tcF9pcHhfZm10YWRkcihOVUxMLCAodm9pZCAqKWFkZHIsIAotCQkJCSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOwotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lweCIsICJvcGVuICVzICVzXG4iLCBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLSAgICAgICAgICAgICAgICBzdHIpKTsKLSAgICBmcmVlKHN0cik7Ci0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICB0LT5kb21haW4gPSBuZXRzbm1wSVBYRG9tYWluOwotICAgIHQtPmRvbWFpbl9sZW5ndGggPSBuZXRzbm1wSVBYRG9tYWluX2xlbjsKLQotICAgIHQtPnNvY2sgPSBzb2NrZXQoQUZfSVBYLCBTT0NLX0RHUkFNLCBBRl9JUFgpOwotICAgIGlmICh0LT5zb2NrIDwgMCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgdC0+bG9jYWwgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDEyKTsKLSAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoJih0LT5sb2NhbFswMF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfbmV0d29yayksIDQpOwotICAgICAgICBtZW1jcHkoJih0LT5sb2NhbFswNF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfbm9kZSksIDYpOwotICAgICAgICBtZW1jcHkoJih0LT5sb2NhbFsxMF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfcG9ydCksIDIpOwotICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSAxMjsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5lZGVkIGFzIGEgc2VydmVyLCBzbyB3ZSBtdXN0IGJpbmQgb24gdG8gdGhlCi0gICAgICAgICAqIGdpdmVuIGFkZHJlc3MgKHdoaWNoIG1heSBpbmNsdWRlIGEgcGFydGljdWxhciBuZXR3b3JrIGFuZC9vciBub2RlCi0gICAgICAgICAqIGFkZHJlc3MsIGJ1dCBkZWZpbml0ZWx5IGluY2x1ZGVzIGEgcG9ydCBudW1iZXIpLgotICAgICAgICAgKi8KLQotICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgbmV0c25tcF9pcHhfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgdC0+ZGF0YSA9IE5VTEw7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICB0LT5yZW1vdGUgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDEyKTsKLSAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KCYodC0+cmVtb3RlWzAwXSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9uZXR3b3JrKSwgNCk7Ci0gICAgICAgIG1lbWNweSgmKHQtPnJlbW90ZVswNF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfbm9kZSksIDYpOwotICAgICAgICBtZW1jcHkoJih0LT5yZW1vdGVbMTBdKSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaXB4X3BvcnQpLCAyKTsKLSAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDEyOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQgc2Vzc2lvbi4gIFNhdmUgdGhlIGFkZHJlc3MgaW4gdGhlCi0gICAgICAgICAqIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhIHBvaW50ZXIgZm9yIGxhdGVyIHVzZSBieSBzbm1wX2lweF9zZW5kLgotICAgICAgICAgKi8KLQotICAgICAgICB0LT5kYXRhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSk7Ci0gICAgICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+ZGF0YSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBNYXhpbXVtIHNpemUgb2YgYW4gSVBYIFBEVSBpcyA1NzYgYnl0ZXMgaW5jbHVkaW5nIGEgMzAtYnl0ZSBoZWFkZXIuCi0gICAgICogUmlkaWN1bG91cyEgIAotICAgICAqLwotCi0gICAgdC0+bXNnTWF4U2l6ZSA9IDU3NiAtIDMwOwotICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX2lweF9yZWN2OwotICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX2lweF9zZW5kOwotICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX2lweF9jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgID0gTlVMTDsKLSAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF9pcHhfZm10YWRkcjsKLQotICAgIHJldHVybiB0OwotfQotCi0KLQotLyoKLSAqIEF0dGVtcHQgdG8gcGFyc2UgYSBzdHJpbmcgb2YgdGhlIGZvcm0gWyUwOHhdOiUxMnhbLyVkXSB3aGVyZSB0aGUgcGFydHMKLSAqIGFyZSB0aGUgbmV0d29yayBudW1iZXIsIHRoZSBub2RlIGFkZHJlc3MgYW5kIHRoZSBwb3J0IGluIHRoYXQgb3JkZXIuICAKLSAqLwotCi1pbnQKLW5ldHNubXBfc29ja2FkZHJfaXB4MihzdHJ1Y3Qgc29ja2FkZHJfaXB4ICphZGRyLCBjb25zdCBjaGFyICpwZWVybmFtZSwKLQkJICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgY2hhciAgICAgICAgICAgKmlucHV0ID0gTlVMTCwgKmRlZiA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAgICAgKm5ldHdvcmssICpub2RlLCAqcG9ydDsKLSAgICBjaGFyICAgICAgICAgICAqdG1wOwotICAgIHVuc2lnbmVkIGxvbmcgICBpOwotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSk7Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLAotCQkiYWRkciAlcCwgcGVlcm5hbWUgXCIlc1wiIGRlZmF1bHRfdGFyZ2V0IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICBhZGRyLCBwZWVybmFtZSA/IHBlZXJuYW1lIDogIltOSUxdIiwKLQkJZGVmYXVsdF90YXJnZXQgPyBkZWZhdWx0X3RhcmdldCA6ICJbTklMXSIpKTsKLQotICAgIGFkZHItPnNpcHhfZmFtaWx5ID0gQUZfSVBYOwotICAgIGFkZHItPnNpcHhfdHlwZSA9IDQ7ICAgICAgICAvKiAgU3BlY2lmaWVkIGluIFJGQyAxNDIwLiAgKi8KLQotICAgIG5ldHdvcmsgPSBpbnB1dCA9IHN0cmR1cChwZWVybmFtZSA/IHBlZXJuYW1lIDogIiIpOwotICAgIHRtcCA9IHN0cmNocihuZXR3b3JrLCAnOicpOwotICAgIGlmICh0bXAgIT0gTlVMTCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiTm9kZSBpZGVudGlmaWVkXG4iKSk7Ci0gICAgICAgICp0bXArKyA9ICdcMCc7Ci0Jbm9kZSA9IHRtcDsKLSAgICAgICAgdG1wID0gc3RyY2hyKHRtcCwgJy8nKTsKLSAgICB9IGVsc2UgewotICAgICAgICBub2RlID0gTlVMTDsKLSAgICAgICAgdG1wID0gc3RyY2hyKG5ldHdvcmssICcvJyk7Ci0gICAgfQotICAgIGlmICh0bXAgIT0gTlVMTCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiUG9ydCBpZGVudGlmaWVkXG4iKSk7Ci0gICAgICAgICp0bXArKyA9ICdcMCc7Ci0gICAgICAgIHBvcnQgPSB0bXA7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBvcnQgPSBOVUxMOwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIkFkZHJlc3M6ICVzOiVzLyVzXG4iLAotICAgICAgICAgICAgICAgIG5ldHdvcmsgPyBuZXR3b3JrIDogIltOSUxdIiwgbm9kZSA/IG5vZGUgOiAiW05JTF0iLAotICAgICAgICAgICAgICAgIHBvcnQgPyBwb3J0IDogIltOSUxdIikpOwotCi0gICAgZGVmID0gc3RyZHVwKGRlZmF1bHRfdGFyZ2V0ID8gZGVmYXVsdF90YXJnZXQgOiAiIik7Ci0gICAgaWYgKG5ldHdvcmsgPT0gTlVMTCB8fCAqbmV0d29yayA9PSAnXDAnKQotICAgICAgICBuZXR3b3JrID0gZGVmOwotICAgIHRtcCA9IHN0cmNocihkZWYsICc6Jyk7Ci0gICAgaWYgKHRtcCAhPSBOVUxMKSB7Ci0gICAgICAgICp0bXArKyA9ICdcMCc7Ci0JaWYgKG5vZGUgPT0gTlVMTCB8fCAqbm9kZSA9PSAnXDAnKQotICAgICAgICAgICAgbm9kZSA9IHRtcDsKLSAgICAgICAgdG1wID0gc3RyY2hyKHRtcCwgJy8nKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdG1wID0gc3RyY2hyKGRlZiwgJy8nKTsKLSAgICBpZiAodG1wICE9IE5VTEwpIHsKLSAgICAgICAgKnRtcCsrID0gJ1wwJzsKLSAgICAgICAgaWYgKHBvcnQgPT0gTlVMTCB8fCAqcG9ydCA9PSAnXDAnKQotICAgICAgICAgICAgcG9ydCA9IHRtcDsKLSAgICB9Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiQWRkcmVzczogJXM6JXMvJXNcbiIsCi0gICAgICAgICAgICAgICAgbmV0d29yayA/IG5ldHdvcmsgOiAiW05JTF0iLCBub2RlID8gbm9kZSA6ICJbTklMXSIsCi0gICAgICAgICAgICAgICAgcG9ydCA/IHBvcnQgOiAiW05JTF0iKSk7Ci0KLSAgICBpZiAobmV0d29yayA9PSBOVUxMIHx8ICpuZXR3b3JrID09ICdcMCcpCi0gICAgICAgIG5ldHdvcmsgPSAiMCI7Ci0KLSAgICBpZiAobm9kZSA9PSBOVUxMIHx8ICpub2RlID09ICdcMCcpCi0gICAgICAgIG5vZGUgPSAiMDAwMDAwMDAwMDAwIjsKLQotICAgIGlmIChwb3J0ID09IE5VTEwgfHwgKnBvcnQgPT0gJ1wwJykKLSNkZWZpbmUgdmFsKHgpIF9fU1RSSU5HKHgpCi0gICAgICAgIHBvcnQgPSB2YWwoU05NUF9JUFhfREVGQVVMVF9QT1JUKTsKLSN1bmRlZiB2YWwKLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJBZGRyZXNzOiAlczolcy8lc1xuIiwKLSAgICAgICAgICAgICAgICBuZXR3b3JrID8gbmV0d29yayA6ICJbTklMXSIsIG5vZGUgPyBub2RlIDogIltOSUxdIiwKLSAgICAgICAgICAgICAgICBwb3J0ID8gcG9ydCA6ICJbTklMXSIpKTsKLQotICAgIGlmKHNzY2FuZihuZXR3b3JrLCAiJThseCUqYyIsICZpKSA9PSAxKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJuZXR3b3JrIHBhcnNlZCBva2F5XG4iKSk7Ci0gICAgICAgIGFkZHItPnNpcHhfbmV0d29yayA9IGh0b25sKGkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsCi0gICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2UgbmV0d29yayBwYXJ0IG9mIGFkZHJlc3NcbiIpKTsKLSAgICAgICAgZnJlZShkZWYpOwotICAgICAgICBmcmVlKGlucHV0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYoc3NjYW5mKG5vZGUsICIlMmhoeCUyaGh4JTJoaHglMmhoeCUyaGh4JTJoaHglKmMiLAotICAgICAgICAgICAgICAmYWRkci0+c2lweF9ub2RlWzBdLCAmYWRkci0+c2lweF9ub2RlWzFdLAotICAgICAgICAgICAgICAmYWRkci0+c2lweF9ub2RlWzJdLCAmYWRkci0+c2lweF9ub2RlWzNdLAotICAgICAgICAgICAgICAmYWRkci0+c2lweF9ub2RlWzRdLCAmYWRkci0+c2lweF9ub2RlWzVdKSA9PSA2KSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJub2RlIHBhcnNlZCBva2F5XG4iKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwKLSAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBub2RlIHBhcnQgb2YgYWRkcmVzc1xuIikpOwotICAgICAgICBmcmVlKGRlZik7Ci0gICAgICAgIGZyZWUoaW5wdXQpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZihzc2NhbmYocG9ydCwgIiVsdSUqYyIsICZpKSA9PSAxKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJwb3J0IHBhcnNlZCBva2F5XG4iKSk7Ci0gICAgICAgIGFkZHItPnNpcHhfcG9ydCA9IGh0b25zKGkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsCi0gICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2UgcG9ydCBwYXJ0IG9mIGFkZHJlc3NcbiIpKTsKLSAgICAgICAgZnJlZShkZWYpOwotICAgICAgICBmcmVlKGlucHV0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZnJlZShkZWYpOwotICAgIGZyZWUoaW5wdXQpOwotICAgIHJldHVybiAxOwotfQotCi0KLQotaW50Ci1uZXRzbm1wX3NvY2thZGRyX2lweChzdHJ1Y3Qgc29ja2FkZHJfaXB4ICphZGRyLCBjb25zdCBjaGFyICpwZWVybmFtZSkKLXsKLSAgICByZXR1cm4gbmV0c25tcF9zb2NrYWRkcl9pcHgyKGFkZHIsIHBlZXJuYW1lLCBOVUxMKTsKLX0KLQotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfaXB4X2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAotCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2lweCBhZGRyOwotCi0gICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaXB4MigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfaXB4X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfaXB4X2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pcHggYWRkcjsKLQotICAgIGlmIChvX2xlbiA9PSAxMikgewotICAgICAgICBhZGRyLnNpcHhfZmFtaWx5ID0gQUZfSVBYOwotICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpcHhfbmV0d29yayksICYob1swMF0pLCA0KTsKLSAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaXB4X25vZGUpLCAmKG9bMDRdKSwgNik7Ci0gICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2lweF9wb3J0KSwgJihvWzEwXSksIDIpOwotICAgICAgICByZXR1cm4gbmV0c25tcF9pcHhfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLQotdm9pZAotbmV0c25tcF9pcHhfY3Rvcih2b2lkKQotewotICAgIGlweERvbWFpbi5uYW1lID0gbmV0c25tcElQWERvbWFpbjsKLSAgICBpcHhEb21haW4ubmFtZV9sZW5ndGggPSBuZXRzbm1wSVBYRG9tYWluX2xlbjsKLSAgICBpcHhEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOwotICAgIGlweERvbWFpbi5wcmVmaXhbMF0gPSAiaXB4IjsKLQotICAgIGlweERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKLSAgICBpcHhEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfaXB4X2NyZWF0ZV90c3RyaW5nOwotICAgIGlweERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF9pcHhfY3JlYXRlX29zdHJpbmc7Ci0KLSAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJmlweERvbWFpbik7Ci19CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBTVEREb21haW4uYyBiL3NubXBsaWIvc25tcFNURERvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODNlYWE1Li4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcFNURERvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgotCi1vaWQgbmV0c25tcF9zbm1wU1RERG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fU1REX0lQIH07Ci1zdGF0aWMgbmV0c25tcF90ZG9tYWluIHN0ZERvbWFpbjsKLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAotICovCi0KLXN0YXRpYyBjaGFyICoKLW5ldHNubXBfc3RkX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgY2hhciAqYnVmOwotICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiZm9ybWF0dGluZyBhZGRyLiAgZGF0YT0leFxuIix0LT5kYXRhKSk7Ci0gICAgaWYgKHQtPmRhdGEpIHsKLSAgICAgICAgbmV0c25tcF9zdGRfZGF0YSAqZGF0YSA9IChuZXRzbm1wX3N0ZF9kYXRhKil0LT5kYXRhOwotICAgICAgICBidWYgPSAoY2hhciopbWFsbG9jKFNOTVBfTUFYQlVGX01FRElVTSk7Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAgcmV0dXJuIHN0cmR1cCgiU1RESW5PdXQiKTsKLSAgICAgICAgc25wcmludGYoYnVmLCBTTk1QX01BWEJVRl9NRURJVU0sICJTVEQ6JXMiLCBkYXRhLT5wcm9nKTsKLSAgICAgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCIgIGZvcm1hdHRlZDo9JXNcbiIsYnVmKSk7Ci0gICAgICAgIHJldHVybiBidWY7Ci0gICAgfQotICAgIHJldHVybiBzdHJkdXAoIlNUREluT3V0Iik7Ci19Ci0KLQotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAotICovCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfc3RkX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsInJlY3Ygb24gc29jayAlZC4gIGRhdGE9JXhcbiIsdC0+c29jaywgdC0+ZGF0YSkpOwotICAgIHdoaWxlIChyYyA8IDApIHsKLSAgICAgICAgcmMgPSByZWFkKHQtPnNvY2ssIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiICBieXRlczogJWQuXG4iLCByYykpOwotICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zdGQiLCAiIHJlYWQgb24gZmQgJWQgZmFpbGVkOiAlZCAoXCIlc1wiKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyYyA9PSAwKSB7Ci0gICAgICAgICAgICAvKiAwIGlucHV0IGlzIHByb2JhYmx5IGJhZCBzaW5jZSB3ZSBzZWxlY3RlZCBvbiBpdCAqLwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3N0ZCIsICJyZWFkIG9uIHN0ZGluIGdvdCAlZCBieXRlc1xuIiwgcmMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3N0ZF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJzZW5kIG9uIHNvY2suICBkYXRhPSV4XG4iLCB0LT5kYXRhKSk7Ci0gICAgd2hpbGUgKHJjIDwgMCkgewotICAgICAgICBpZiAodC0+ZGF0YSkgewotICAgICAgICAgICAgbmV0c25tcF9zdGRfZGF0YSAqZGF0YSA9IChuZXRzbm1wX3N0ZF9kYXRhKil0LT5kYXRhOwotICAgICAgICAgICAgcmMgPSB3cml0ZShkYXRhLT5vdXRmZCwgYnVmLCBzaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHN0cmFpZ2h0IHRvIHN0ZG91dCAqLwotICAgICAgICAgICAgcmMgPSB3cml0ZSgxLCBidWYsIHNpemUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotbmV0c25tcF9zdGRfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJjbG9zZS4gIGRhdGE9JXhcbiIsIHQtPmRhdGEpKTsKLSAgICBpZiAodC0+ZGF0YSkgewotICAgICAgICBuZXRzbm1wX3N0ZF9kYXRhICpkYXRhID0gKG5ldHNubXBfc3RkX2RhdGEqKXQtPmRhdGE7Ci0gICAgICAgIGNsb3NlKGRhdGEtPm91dGZkKTsKLSAgICAgICAgY2xvc2UodC0+c29jayk7Ci0KLSAgICAgICAgLyoga2lsbCB0aGUgY2hpbGQgdG9vICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiIGtpbGxpbmcgJWRcbiIsIGRhdGEtPmNoaWxkcGlkKSk7Ci0gICAgICAgIGtpbGwoZGF0YS0+Y2hpbGRwaWQsIFNJR1RFUk0pOwotICAgICAgICBzbGVlcCgxKTsKLSAgICAgICAga2lsbChkYXRhLT5jaGlsZHBpZCwgU0lHS0lMTCk7Ci0gICAgICAgIC8qIFhYWDogc2V0IGFuIGFsYXJtIHRvIGtpbGwgaGFyZGVyIHRoZSBjaGlsZCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGNsb3NlIHN0ZG91dC9pbiAqLwotICAgICAgICBjbG9zZSgxKTsKLSAgICAgICAgY2xvc2UoMCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF9zdGRfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiIGFjY2VwdCBkYXRhPSV4XG4iLCB0LT5kYXRhKSk7Ci0gICAgLyogbm90aGluZyB0byBkbyBoZXJlICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBPcGVuIGEgU1RESU4vU1RET1VUIC1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9zdGRfdHJhbnNwb3J0KGNvbnN0IGNoYXIgKmluc3RyaW5nLCBzaXplX3QgaW5zdHJpbmdfbGVuLAotCQkgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdDsKLQotICAgIHQgPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfc25tcFNURERvbWFpbjsKLSAgICB0LT5kb21haW5fbGVuZ3RoID0KLSAgICAgICAgc2l6ZW9mKG5ldHNubXBfc25tcFNURERvbWFpbikgLyBzaXplb2YobmV0c25tcF9zbm1wU1RERG9tYWluWzBdKTsKLQotICAgIHQtPnNvY2sgPSAwOwotICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU0gfCBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVEOwotCi0gICAgLyoKLSAgICAgKiBNZXNzYWdlIHNpemUgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyB0cmFuc3BvcnQgKGhlbmNlIG1zZ01heFNpemUKLSAgICAgKiBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBsZWdhbCBzaXplIG9mIGFuIFNOTVAgbWVzc2FnZSkuICAKLSAgICAgKi8KLQotICAgIHQtPm1zZ01heFNpemUgPSAweDdmZmZmZmZmOwotICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3N0ZF9yZWN2OwotICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3N0ZF9zZW5kOwotICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3N0ZF9jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgID0gbmV0c25tcF9zdGRfYWNjZXB0OwotICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3N0ZF9mbXRhZGRyOwotCi0gICAgLyoKLSAgICAgKiBpZiBpbnN0cmluZyBpcyBub3QgbnVsbCBsZW5ndGgsIGl0IHNwZWNpZmllcyBhIHBhdGggdG8gYSBwcm9nCi0gICAgICogWFhYOiBwbHVzIGFyZ3MKLSAgICAgKi8KLSAgICBpZiAoaW5zdHJpbmdfbGVuID09IDAgJiYgZGVmYXVsdF90YXJnZXQgIT0gTlVMTCkgewotCWluc3RyaW5nID0gZGVmYXVsdF90YXJnZXQ7Ci0JaW5zdHJpbmdfbGVuID0gc3RybGVuKGRlZmF1bHRfdGFyZ2V0KTsKLSAgICB9Ci0KLSAgICBpZiAoaW5zdHJpbmdfbGVuICE9IDApIHsKLSAgICAgICAgaW50IGluZmRbMl0sIG91dGZkWzJdOyAgLyogc29ja2V0cyB0byBhbmQgZnJvbSB0aGUgY2xpZW50ICovCi0gICAgICAgIGludCBjaGlsZHBpZDsKLQotICAgICAgICBpZiAocGlwZShpbmZkKSB8fCBwaXBlKG91dGZkKSkgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIG5lZWRlZCBwaXBlcyBmb3IgYSBTVEQgdHJhbnNwb3J0Iik7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBjaGlsZHBpZCA9IGZvcmsoKTsKLSAgICAgICAgLyogcGFyZW50cGlkID0+IGNoaWxkcGlkICovCi0gICAgICAgIC8qIGluZmRbMV0gICA9PiBpbmZkWzBdICovCi0gICAgICAgIC8qIG91dGZkWzBdICA8PSBvdXRmZFsxXSAqLwotCi0gICAgICAgIGlmIChjaGlsZHBpZCkgewotICAgICAgICAgICAgbmV0c25tcF9zdGRfZGF0YSAqZGF0YTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLyogd2UncmUgaW4gdGhlIHBhcmVudCAqLwotICAgICAgICAgICAgY2xvc2UoaW5mZFswXSk7Ci0gICAgICAgICAgICBjbG9zZShvdXRmZFsxXSk7Ci0KLSAgICAgICAgICAgIGRhdGEgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3RkX2RhdGEpOwotICAgICAgICAgICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNubXBTVEREb21haW46IG1hbGxvYyBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdC0+ZGF0YSA9IGRhdGE7Ci0gICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3N0ZF9kYXRhKTsKLSAgICAgICAgICAgIHQtPnNvY2sgPSBvdXRmZFswXTsKLSAgICAgICAgICAgIGRhdGEtPnByb2cgPSBzdHJkdXAoaW5zdHJpbmcpOwotICAgICAgICAgICAgZGF0YS0+b3V0ZmQgPSBpbmZkWzFdOwotICAgICAgICAgICAgZGF0YS0+Y2hpbGRwaWQgPSBjaGlsZHBpZDsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwicGFyZW50LiAgZGF0YT0leFxuIiwgdC0+ZGF0YSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogd2UncmUgaW4gdGhlIGNoaWxkICovCi0KLSAgICAgICAgICAgIC8qIGNsb3NlIHN0ZGluICovCi0gICAgICAgICAgICBjbG9zZSgwKTsKLSAgICAgICAgICAgIC8qIGNvcHkgcGlwZSBvdXRwdXQgdG8gc3Rkb3V0ICovCi0gICAgICAgICAgICBkdXAoaW5mZFswXSk7Ci0KLSAgICAgICAgICAgIC8qIGNsb3NlIHN0ZG91dCAqLwotICAgICAgICAgICAgY2xvc2UoMSk7Ci0gICAgICAgICAgICAvKiBjb3B5IHBpcGUgb3V0cHV0IHRvIHN0ZGluICovCi0gICAgICAgICAgICBkdXAob3V0ZmRbMV0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvKiBjbG9zZSBhbGwgdGhlIHBpcGVzIHRoZW1zZWx2ZXMgKi8KLSAgICAgICAgICAgIGNsb3NlKGluZmRbMF0pOwotICAgICAgICAgICAgY2xvc2UoaW5mZFsxXSk7Ci0gICAgICAgICAgICBjbG9zZShvdXRmZFswXSk7Ci0gICAgICAgICAgICBjbG9zZShvdXRmZFsxXSk7Ci0KLSAgICAgICAgICAgIC8qIGNhbGwgZXhlYyAqLwotICAgICAgICAgICAgc3lzdGVtKGluc3RyaW5nKTsKLSAgICAgICAgICAgIC8qIFhYWDogVE9ETzogdXNlIGV4ZWMgZm9ybSBpbnN0ZWFkOyBuZWVkcyBhcmdzICovCi0gICAgICAgICAgICAvKiBleGVjdihpbnN0cmluZywgTlVMTCk7ICovCi0gICAgICAgICAgICBleGl0KDApOwotCi0gICAgICAgICAgICAvKiBhY2suLi4gIHdlIHNob3VsZCBuZXZlciBldmVyIGdldCBoZXJlICovCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU1REIHRyYW5zcG9ydCByZXR1cm5lZCBhZnRlciBleGVjdigpXG4iKTsKLSAgICAgICAgfQotICAgIH0gICAgICAgICAgICAKLQotICAgIHJldHVybiB0OwotfQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3N0ZF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICppbnN0cmluZywgaW50IGxvY2FsLAotCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgcmV0dXJuIG5ldHNubXBfc3RkX3RyYW5zcG9ydChpbnN0cmluZywgc3RybGVuKGluc3RyaW5nKSwgZGVmYXVsdF90YXJnZXQpOwotfQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3N0ZF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKLXsKLSAgICByZXR1cm4gbmV0c25tcF9zdGRfdHJhbnNwb3J0KChjb25zdCBjaGFyKilvLCBvX2xlbiwgTlVMTCk7Ci19Ci0KLXZvaWQKLW5ldHNubXBfc3RkX2N0b3Iodm9pZCkKLXsKLSAgICBzdGREb21haW4ubmFtZSA9IG5ldHNubXBfc25tcFNURERvbWFpbjsKLSAgICBzdGREb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9zbm1wU1RERG9tYWluKSAvIHNpemVvZihvaWQpOwotICAgIHN0ZERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhciAqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOwotICAgIHN0ZERvbWFpbi5wcmVmaXhbMF0gPSAic3RkIjsKLQotICAgIHN0ZERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKLSAgICBzdGREb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfc3RkX2NyZWF0ZV90c3RyaW5nOwotICAgIHN0ZERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF9zdGRfY3JlYXRlX29zdHJpbmc7Ci0KLSAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnN0ZERvbWFpbik7Ci19CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBUQ1BEb21haW4uYyBiL3NubXBsaWIvc25tcFRDUERvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2I2Zjk0Li4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcFRDUERvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfQVJQQV9JTkVUX0gKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfRkNOVExfSAotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmg+Ci0KLS8qIENvcGllZCBmcm9tIHNubXBVRFBEb21haW4uYyAqLwotdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF91ZHBfYWRkcl9wYWlyX3MgewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVfYWRkcjsKLSAgICBzdHJ1Y3QgaW5fYWRkciBsb2NhbF9hZGRyOwotfSBuZXRzbm1wX3VkcF9hZGRyX3BhaXI7Ci0KLW9pZCBuZXRzbm1wX3NubXBUQ1BEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9UQ1BfSVAgfTsKLXN0YXRpYyBuZXRzbm1wX3Rkb21haW4gdGNwRG9tYWluOwotCi0vKgotICogTm90IHN0YXRpYyBzaW5jZSBpdCBpcyBuZWVkZWQgaGVyZSBhcyB3ZWxsIGFzIGluIHNubXBVRFBEb21haW4sIGJ1dCBub3QKLSAqIHB1YmxpYyBlaXRoZXIKLSAqLwotaW50Ci1uZXRzbm1wX3NvY2thZGRyX2luMihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCk7Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKLSAqLwotCi1zdGF0aWMgY2hhciAqCi1uZXRzbm1wX3RjcF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKLQotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKSB7Ci0JYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSBkYXRhOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgewotCWFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgdC0+ZGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiVENQOiB1bmtub3duIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICp0byA9IE5VTEw7Ci0JY2hhciB0bXBbNjRdOwotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKLSAgICAgICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJkdXAoIlRDUDogdW5rbm93biIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3ByaW50Zih0bXAsICJUQ1A6IFslc106JWh1IiwKLSAgICAgICAgICAgICAgICBpbmV0X250b2EodG8tPnNpbl9hZGRyKSwgbnRvaHModG8tPnNpbl9wb3J0KSk7Ci0gICAgICAgIHJldHVybiBzdHJkdXAodG1wKTsKLSAgICB9Ci19Ci0KLQotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAotICovCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdGNwX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotCXdoaWxlIChyYyA8IDApIHsKLQkgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCURFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJyZWN2IGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKLQkJCSAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJyZWN2IGZkICVkIGdvdCAlZCBieXRlc1xuIiwKLQkJCXQtPnNvY2ssIHJjKSk7Ci0JfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgb2xlbmd0aCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICh0LT5kYXRhX2xlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIGlmICgoKm9wYXF1ZSA9IG1hbGxvYyh0LT5kYXRhX2xlbmd0aCkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoKm9wYXF1ZSwgdC0+ZGF0YSwgdC0+ZGF0YV9sZW5ndGgpOwotICAgICAgICAgICAgICAgICpvbGVuZ3RoID0gdC0+ZGF0YV9sZW5ndGg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF90Y3Bfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0Jd2hpbGUgKHJjIDwgMCkgewotCSAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3RjcF9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAiY2xvc2UgZmQgJWRcbiIsIHQtPnNvY2spKTsKLSNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAotICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOwotI2Vsc2UKLSAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKLSNlbmRpZgotICAgICAgICB0LT5zb2NrID0gLTE7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdGNwX2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZhcmVuZCA9IE5VTEw7Ci0gICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBuZXdzb2NrID0gLTE7Ci0jaWZkZWYgV0lOMzIKLSAgICB1X2xvbmcgICAgICAgICAgaW9jdGxzb2NrZXRfb3B0OwotI2Vsc2UKLSAgICBpbnQgICAgICAgICAgICAgc29ja2ZsYWdzOwotI2VuZGlmCi0gICAgc29ja2xlbl90ICAgICAgIGZhcmVuZGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotICAgIGNoYXIgICAgICAgICAgICpzdHIgPSBOVUxMOwotCi0gICAgYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKW1hbGxvYyhzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0KLSAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogSW5kaWNhdGUgdGhhdCB0aGUgYWNjZXB0YW5jZSBvZiB0aGlzIHNvY2tldCBmYWlsZWQuICAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJhY2NlcHQ6IG1hbGxvYyBmYWlsZWRcbiIpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBmYXJlbmQgPSAoc3RydWN0IHNvY2thZGRyICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBuZXdzb2NrID0gYWNjZXB0KHQtPnNvY2ssIGZhcmVuZCwgJmZhcmVuZGxlbik7Ci0KLSAgICAgICAgaWYgKG5ld3NvY2sgPCAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAiYWNjZXB0IGZhaWxlZCByYyAlZCBlcnJubyAlZCBcIiVzXCJcbiIsCi0JCQluZXdzb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBmcmVlKGZhcmVuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3c29jazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0LT5kYXRhICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGZyZWUodC0+ZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0LT5kYXRhID0gYWRkcl9wYWlyOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpOwotICAgICAgICBzdHIgPSBuZXRzbm1wX3RjcF9mbXRhZGRyKE5VTEwsIGZhcmVuZCwgZmFyZW5kbGVuKTsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgImFjY2VwdCBzdWNjZWVkZWQgKGZyb20gJXMpXG4iLCBzdHIpKTsKLSAgICAgICAgZnJlZShzdHIpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRyeSB0byBtYWtlIHRoZSBuZXcgc29ja2V0IGJsb2NraW5nLiAgCi0gICAgICAgICAqLwotCi0jaWZkZWYgV0lOMzIKLSAgICAgICAgaW9jdGxzb2NrZXRfb3B0ID0gMDsKLSAgICAgICAgaW9jdGxzb2NrZXQobmV3c29jaywgRklPTkJJTywgJmlvY3Rsc29ja2V0X29wdCk7Ci0jZWxzZQotICAgICAgICBpZiAoKHNvY2tmbGFncyA9IGZjbnRsKG5ld3NvY2ssIEZfR0VURkwsIDApKSA+PSAwKSB7Ci0gICAgICAgICAgICBmY250bChuZXdzb2NrLCBGX1NFVEZMLCAoc29ja2ZsYWdzICYgfk9fTk9OQkxPQ0spKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJjb3VsZG4ndCBmX2dldGZsIG9mIGZkICVkXG4iLG5ld3NvY2spKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLiBEZWZhdWx0IGlzCi0gICAgICAgICAqIHRvIHVzZSBvcyBkZWZhdWx0LiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tCi0gICAgICAgICAqIGp1c3QgcGxvdWdoIG9uIHJlZ2FyZGxlc3MuICAKLSAgICAgICAgICovCi0gICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1NOREJVRiwgMSwgMCk7Ci0gICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1JDVkJVRiwgMSwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIG5ld3NvY2s7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnJlZShmYXJlbmQpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi0KLQotLyoKLSAqIE9wZW4gYSBUQ1AtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZSBsb2NhbAotICogYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgCi0gKiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3RjcF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBpbnQgbG9jYWwpCi17Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwotICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKLSAgICBpbnQgcmMgPSAwOwotCi0KLSAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICBhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopbWFsbG9jKHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHQtPmRhdGEgPSBhZGRyX3BhaXI7Ci0gICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKTsKLSAgICBtZW1jcHkoJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCi0gICAgdC0+ZG9tYWluID0gbmV0c25tcF9zbm1wVENQRG9tYWluOwotICAgIHQtPmRvbWFpbl9sZW5ndGggPQotICAgICAgICBzaXplb2YobmV0c25tcF9zbm1wVENQRG9tYWluKSAvIHNpemVvZihuZXRzbm1wX3NubXBUQ1BEb21haW5bMF0pOwotCi0gICAgdC0+c29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgaWYgKHQtPnNvY2sgPCAwKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU07Ci0KLSAgICBpZiAobG9jYWwpIHsKLSNpZmRlZiBXSU4zMgotICAgICAgICB1X2xvbmcgaW9jdGxzb2NrZXRfb3B0ID0gMTsKLSNlbHNlCi0gICAgICAgIGludCBzb2NrZmxhZ3MgPSAwOwotI2VuZGlmCi0gICAgICAgIGludCBvcHQgPSAxOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCB0byB0aGUgZ2l2ZW4gCi0gICAgICAgICAqIElQIGFkZHJlc3MgKHdoaWNoIG1heSBpbmNsdWRlIGFuIGludGVyZmFjZSBhZGRyZXNzLCBvciBjb3VsZCBiZQotICAgICAgICAgKiBJTkFERFJfQU5ZLCBidXQgd2lsbCBhbHdheXMgaW5jbHVkZSBhIHBvcnQgbnVtYmVyLiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOOwotICAgICAgICB0LT5sb2NhbCA9ICh1X2NoYXIgKiltYWxsb2MoNik7Ci0gICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+bG9jYWwsICh1X2NoYXIgKikgJiAoYWRkci0+c2luX2FkZHIuc19hZGRyKSwgNCk7Ci0gICAgICAgIHQtPmxvY2FsWzRdID0gKGh0b25zKGFkZHItPnNpbl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+bG9jYWxbNV0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSA2OwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFdlIHNob3VsZCBzZXQgU09fUkVVU0VBRERSIHRvby4gIAotICAgICAgICAgKi8KLQotICAgICAgICBzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKHZvaWQgKikmb3B0LAotCQkgICBzaXplb2Yob3B0KSk7Ci0KLSAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNpbmNlIHdlIGFyZSBnb2luZyB0byBiZSBsZXR0aW5nIHNlbGVjdCgpIHRlbGwgdXMgd2hlbiBjb25uZWN0aW9ucwotICAgICAgICAgKiBhcmUgcmVhZHkgdG8gYmUgYWNjZXB0KCllZCwgd2UgbmVlZCB0byBtYWtlIHRoZSBzb2NrZXQgbjBuLWJsb2NraW5nCi0gICAgICAgICAqIHRvIGF2b2lkIHRoZSByYWNlIGNvbmRpdGlvbiBkZXNjcmliZWQgaW4gVy4gUi4gU3RldmVucywgYGBVbml4Ci0gICAgICAgICAqIE5ldHdvcmsgUHJvZ3JhbW1pbmcgVm9sdW1lIEkgU2Vjb25kIEVkaXRpb24nJywgcHAuIDQyMi0tNCwgd2hpY2gKLSAgICAgICAgICogY291bGQgb3RoZXJ3aXNlIHdlZGdlIHRoZSBhZ2VudC4KLSAgICAgICAgICovCi0KLSNpZmRlZiBXSU4zMgotICAgICAgICBpb2N0bHNvY2tldF9vcHQgPSAxOwotICAgICAgICBpb2N0bHNvY2tldCh0LT5zb2NrLCBGSU9OQklPLCAmaW9jdGxzb2NrZXRfb3B0KTsKLSNlbHNlCi0gICAgICAgIHNvY2tmbGFncyA9IGZjbnRsKHQtPnNvY2ssIEZfR0VURkwsIDApOwotICAgICAgICBmY250bCh0LT5zb2NrLCBGX1NFVEZMLCBzb2NrZmxhZ3MgfCBPX05PTkJMT0NLKTsKLSNlbmRpZgotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE5vdyBzaXQgaGVyZSBhbmQgd2FpdCBmb3IgY29ubmVjdGlvbnMgdG8gYXJyaXZlLiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIHJjID0gbGlzdGVuKHQtPnNvY2ssIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTik7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICogbm8gYnVmZmVyIHNpemUgb24gbGlzdGVuIHNvY2tldCAtIGRvZXNuJ3QgbWFrZSBzZW5zZQotICAgICAgICAgKi8KLQotICAgIH0gZWxzZSB7Ci0gICAgICB0LT5yZW1vdGUgPSAodV9jaGFyICopbWFsbG9jKDYpOwotICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5yZW1vdGUsICh1X2NoYXIgKikgJiAoYWRkci0+c2luX2FkZHIuc19hZGRyKSwgNCk7Ci0gICAgICAgIHQtPnJlbW90ZVs0XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPnJlbW90ZVs1XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSA2OwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQtdHlwZSBzZXNzaW9uLCBzbyBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlIGZhcgotICAgICAgICAgKiBlbmQuICBXZSBkb24ndCBnbyBub24tYmxvY2tpbmcgaGVyZSBiZWNhdXNlIGl0J3Mgbm90IG9idmlvdXMgd2hhdAotICAgICAgICAgKiB5b3UnZCB0aGVuIGRvIGlmIHlvdSB0cmllZCB0byBkbyBzbm1wX3NlbmRzIGJlZm9yZSB0aGUgY29ubmVjdGlvbgotICAgICAgICAgKiBoYWQgY29tcGxldGVkLiAgU28gdGhpcyBjYW4gYmxvY2suCi0gICAgICAgICAqLwotCi0gICAgICAgIHJjID0gY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkciwKLQkJICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0KLSAgICAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3BfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuIERlZmF1bHQgaXMKLSAgICAgICAgICogdG8gdXNlIG9zIGRlZmF1bHQuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0KLSAgICAgICAgICoganVzdCBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAotICAgICAgICAgKi8KLSAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fU05EQlVGLCBsb2NhbCwgMCk7Ci0gICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1JDVkJVRiwgbG9jYWwsIDApOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTWVzc2FnZSBzaXplIGlzIG5vdCBsaW1pdGVkIGJ5IHRoaXMgdHJhbnNwb3J0IChoZW5jZSBtc2dNYXhTaXplCi0gICAgICogaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gbGVnYWwgc2l6ZSBvZiBhbiBTTk1QIG1lc3NhZ2UpLiAgCi0gICAgICovCi0KLSAgICB0LT5tc2dNYXhTaXplID0gMHg3ZmZmZmZmZjsKLSAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF90Y3BfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF90Y3Bfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF90Y3BfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgICA9IG5ldHNubXBfdGNwX2FjY2VwdDsKLSAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF90Y3BfZm10YWRkcjsKLQotICAgIHJldHVybiB0OwotfQotCi0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF90Y3BfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCi0JCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKLQotICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdGNwX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdGNwX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCi0gICAgaWYgKG9fbGVuID09IDYpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydHRtcCA9IChvWzRdIDw8IDgpICsgb1s1XTsKLSAgICAgICAgYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaW5fYWRkci5zX2FkZHIpLCBvLCA0KTsKLSAgICAgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnR0bXApOwotICAgICAgICByZXR1cm4gbmV0c25tcF90Y3BfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLQotdm9pZAotbmV0c25tcF90Y3BfY3Rvcih2b2lkKQotewotICAgIHRjcERvbWFpbi5uYW1lID0gbmV0c25tcF9zbm1wVENQRG9tYWluOwotICAgIHRjcERvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3NubXBUQ1BEb21haW4pIC8gc2l6ZW9mKG9pZCk7Ci0gICAgdGNwRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyICoqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7Ci0gICAgdGNwRG9tYWluLnByZWZpeFswXSA9ICJ0Y3AiOwotCi0gICAgdGNwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOwotICAgIHRjcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF90Y3BfY3JlYXRlX3RzdHJpbmc7Ci0gICAgdGNwRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3RjcF9jcmVhdGVfb3N0cmluZzsKLQotICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdGNwRG9tYWluKTsKLX0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcFRDUElQdjZEb21haW4uYyBiL3NubXBsaWIvc25tcFRDUElQdjZEb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3ZTgzZi4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCi0gICAgLyoKLSAgICAgKiBXaW5kb3dzIElQdjYgc3VwcG9ydCBpcyBwYXJ0IG9mIFdpblNvY2syIG9ubHkKLSAgICAgKi8KLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0KLWV4dGVybiBjb25zdCBjaGFyICppbmV0X250b3AoaW50LCBjb25zdCB2b2lkKiwgY2hhciosIHNpemVfdCk7Ci0KLSNlbmRpZgotCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0FSUEFfSU5FVF9ICi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVERCX0gKLSNpbmNsdWRlIDxuZXRkYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9GQ05UTF9ICi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oPgotCi1vaWQgbmV0c25tcF9UQ1BJUHY2RG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fVENQX0lQVjYgfTsKLXN0YXRpYyBuZXRzbm1wX3Rkb21haW4gdGNwNkRvbWFpbjsKLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAotICovCi0KLXN0YXRpYyBjaGFyICoKLW5ldHNubXBfdGNwNl9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnRvID0gTlVMTDsKLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiZm10YWRkcjogdCA9ICVwLCBkYXRhID0gJXAsIGxlbiA9ICVkXG4iLCB0LAotICAgICAgICAgICAgICAgIGRhdGEsIGxlbikpOwotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGRhdGE7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgdC0+ZGF0YTsKLSAgICB9Ci0gICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiVENQL0lQdjY6IHVua25vd24iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyIGFkZHJbSU5FVDZfQUREUlNUUkxFTl07Ci0gICAgICAgIGNoYXIgdG1wW0lORVQ2X0FERFJTVFJMRU4gKyAxOF07Ci0KLSAgICAgICAgc3ByaW50Zih0bXAsICJUQ1AvSVB2NjogWyVzXTolaHUiLAotICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgKHZvaWQgKikgJih0by0+c2luNl9hZGRyKSwgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVDZfQUREUlNUUkxFTiksIG50b2hzKHRvLT5zaW42X3BvcnQpKTsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCh0bXApOwotICAgIH0KLX0KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKLSAqLwotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3RjcDZfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotCXdoaWxlIChyYyA8IDApIHsKLQkgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCURFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAicmVjdiBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCi0JCQkgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotCQlyZXR1cm4gLTE7Ci0JICAgIH0KLQl9Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAicmVjdiBmZCAlZCBnb3QgJWQgYnl0ZXNcbiIsIHQtPnNvY2ssIHJjKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiBvbGVuZ3RoICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHQtPmRhdGFfbGVuZ3RoID4gMCkgewotICAgICAgICAgICAgaWYgKCgqb3BhcXVlID0gbWFsbG9jKHQtPmRhdGFfbGVuZ3RoKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG1lbWNweSgqb3BhcXVlLCB0LT5kYXRhLCB0LT5kYXRhX2xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgKm9sZW5ndGggPSB0LT5kYXRhX2xlbmd0aDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdGNwNl9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0Jd2hpbGUgKHJjIDwgMCkgewotCSAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdGNwNl9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgImNsb3NlIGZkICVkXG4iLCB0LT5zb2NrKSk7Ci0jaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKLSAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKLSNlbHNlCi0gICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7Ci0jZW5kaWYKLSAgICAgICAgdC0+c29jayA9IC0xOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdGNwNl9hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiAqZmFyZW5kID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgbmV3c29jayA9IC0xOwotI2lmZGVmIFdJTjMyCi0gICAgdV9sb25nICAgICAgICAgIGlvY3Rsc29ja2V0X29wdDsKLSNlbHNlCi0gICAgaW50ICAgICAgICAgICAgIHNvY2tmbGFnczsKLSNlbmRpZgotICAgIHNvY2tsZW5fdCAgICAgICBmYXJlbmRsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0gICAgY2hhciAgICAgICAgICAgKnN0ciA9IE5VTEw7Ci0KLSAgICBmYXJlbmQgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQotICAgIGlmIChmYXJlbmQgPT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSBhY2NlcHRhbmNlIG9mIHRoaXMgc29ja2V0IGZhaWxlZC4gIAotICAgICAgICAgKi8KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJhY2NlcHQ6IG1hbGxvYyBmYWlsZWRcbiIpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIG5ld3NvY2sgPSBhY2NlcHQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBmYXJlbmQsICZmYXJlbmRsZW4pOwotCi0gICAgICAgIGlmIChuZXdzb2NrIDwgMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsImFjY2VwdCBmYWlsZWQgcmMgJWQgZXJybm8gJWQgXCIlc1wiXG4iLAotCQkJbmV3c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgZnJlZShmYXJlbmQpOwotICAgICAgICAgICAgcmV0dXJuIG5ld3NvY2s7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBmcmVlKHQtPmRhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgdC0+ZGF0YSA9IGZhcmVuZDsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBmYXJlbmRsZW47Ci0gICAgICAgIHN0ciA9IG5ldHNubXBfdGNwNl9mbXRhZGRyKE5VTEwsIGZhcmVuZCwgZmFyZW5kbGVuKTsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJhY2NlcHQgc3VjY2VlZGVkIChmcm9tICVzKVxuIiwgc3RyKSk7Ci0gICAgICAgIGZyZWUoc3RyKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUcnkgdG8gbWFrZSB0aGUgbmV3IHNvY2tldCBibG9ja2luZy4gIAotICAgICAgICAgKi8KLQotI2lmZGVmIFdJTjMyCi0gICAgICAgIGlvY3Rsc29ja2V0X29wdCA9IDA7Ci0gICAgICAgIGlvY3Rsc29ja2V0KG5ld3NvY2ssIEZJT05CSU8sICZpb2N0bHNvY2tldF9vcHQpOwotI2Vsc2UKLSAgICAgICAgaWYgKChzb2NrZmxhZ3MgPSBmY250bChuZXdzb2NrLCBGX0dFVEZMLCAwKSkgPj0gMCkgewotICAgICAgICAgICAgZmNudGwobmV3c29jaywgRl9TRVRGTCwgKHNvY2tmbGFncyAmIH5PX05PTkJMT0NLKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgImFjY2VwdDogY291bGRuJ3QgZl9nZXRmbCBvZiBmZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld3NvY2spKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLiBEZWZhdWx0IGlzCi0gICAgICAgICAqIHRvIHVzZSBvcyBkZWZhdWx0LiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tCi0gICAgICAgICAqIGp1c3QgcGxvdWdoIG9uIHJlZ2FyZGxlc3MuICAKLSAgICAgICAgICovCi0gICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1NOREJVRiwgMSwgMCk7Ci0gICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1JDVkJVRiwgMSwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIG5ld3NvY2s7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnJlZShmYXJlbmQpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi0KLQotLyoKLSAqIE9wZW4gYSBUQ1AvSVB2Ni1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlCi0gKiBsb2NhbCBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UKLSAqIGFkZHIgaXMgdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF90Y3A2X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLCBpbnQgbG9jYWwpCi17Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICByYyA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgKnN0ciA9IE5VTEw7Ci0KLSAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIHN0ciA9IG5ldHNubXBfdGNwNl9mbXRhZGRyKE5VTEwsICh2b2lkICopYWRkciwKLQkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJvcGVuICVzICVzXG4iLCBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLSAgICAgICAgICAgICAgICBzdHIpKTsKLSAgICBmcmVlKHN0cik7Ci0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICB0LT5kYXRhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgaWYgKHQtPmRhdGEgPT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0gICAgbWVtY3B5KHQtPmRhdGEsIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0KLSAgICB0LT5kb21haW4gPSBuZXRzbm1wX1RDUElQdjZEb21haW47Ci0gICAgdC0+ZG9tYWluX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX1RDUElQdjZEb21haW4pIC8gc2l6ZW9mKG9pZCk7Ci0KLSAgICB0LT5zb2NrID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgaWYgKHQtPnNvY2sgPCAwKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU07Ci0KLSAgICBpZiAobG9jYWwpIHsKLSNpZmRlZiBXSU4zMgotICAgICAgICB1X2xvbmcgaW9jdGxzb2NrZXRfb3B0OwotI2Vsc2UKLSAgICAgICAgaW50IHNvY2tmbGFncyA9IDA7Ci0jZW5kaWYKLSAgICAgICAgaW50IG9wdCA9IDE7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIG9uIHRvIHRoZQotICAgICAgICAgKiBnaXZlbiBJUCBhZGRyZXNzLCB3aGljaCBtYXkgaW5jbHVkZSBhbiBpbnRlcmZhY2UgYWRkcmVzcywgb3IgY291bGQKLSAgICAgICAgICogYmUgSU5BRERSX0FOWSwgYnV0IGNlcnRhaW5seSBpbmNsdWRlcyBhIHBvcnQgbnVtYmVyLgotICAgICAgICAgKi8KLQotI2lmZGVmIElQVjZfVjZPTkxZCi0gICAgICAgIC8qIFRyeSB0byByZXN0cmljdCBQRl9JTkVUNiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9ucyBvbmx5LiAqLwotICAgICAgICB7Ci0JICBpbnQgb25lPTE7Ci0JICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAoY2hhciAqKSZvbmUsIHNpemVvZihvbmUpKSAhPSAwKSB7Ci0JICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAiY291bGRuJ3Qgc2V0IElQVjZfVjZPTkxZIHRvICVkIGJ5dGVzOiAlc1xuIiwgb25lLCBzdHJlcnJvcihlcnJubykpKTsKLQkgIH0gCi0JfQotI2VuZGlmCi0KLSAgICAgICAgdC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU47Ci0gICAgICAgIHQtPmxvY2FsID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxOCk7Ci0gICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPmxvY2FsLCBhZGRyLT5zaW42X2FkZHIuczZfYWRkciwgMTYpOwotICAgICAgICB0LT5sb2NhbFsxNl0gPSAoYWRkci0+c2luNl9wb3J0ICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5sb2NhbFsxN10gPSAoYWRkci0+c2luNl9wb3J0ICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSAxODsKLQotICAgICAgICAvKgotICAgICAgICAgKiBXZSBzaG91bGQgc2V0IFNPX1JFVVNFQUREUiB0b28uICAKLSAgICAgICAgICovCi0KLSAgICAgICAgc2V0c29ja29wdCh0LT5zb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICh2b2lkICopJm9wdCwgc2l6ZW9mKG9wdCkpOwotCi0gICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCi0JCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNpbmNlIHdlIGFyZSBnb2luZyB0byBiZSBsZXR0aW5nIHNlbGVjdCgpIHRlbGwgdXMgd2hlbiBjb25uZWN0aW9ucwotICAgICAgICAgKiBhcmUgcmVhZHkgdG8gYmUgYWNjZXB0KCllZCwgd2UgbmVlZCB0byBtYWtlIHRoZSBzb2NrZXQgbjBuLWJsb2NraW5nCi0gICAgICAgICAqIHRvIGF2b2lkIHRoZSByYWNlIGNvbmRpdGlvbiBkZXNjcmliZWQgaW4gVy4gUi4gU3RldmVucywgYGBVbml4Ci0gICAgICAgICAqIE5ldHdvcmsgUHJvZ3JhbW1pbmcgVm9sdW1lIEkgU2Vjb25kIEVkaXRpb24nJywgcHAuIDQyMi0tNCwgd2hpY2gKLSAgICAgICAgICogY291bGQgb3RoZXJ3aXNlIHdlZGdlIHRoZSBhZ2VudC4KLSAgICAgICAgICovCi0KLSNpZmRlZiBXSU4zMgotICAgICAgICBpb2N0bHNvY2tldF9vcHQgPSAxOwotICAgICAgICBpb2N0bHNvY2tldCh0LT5zb2NrLCBGSU9OQklPLCAmaW9jdGxzb2NrZXRfb3B0KTsKLSNlbHNlCi0gICAgICAgIHNvY2tmbGFncyA9IGZjbnRsKHQtPnNvY2ssIEZfR0VURkwsIDApOwotICAgICAgICBmY250bCh0LT5zb2NrLCBGX1NFVEZMLCBzb2NrZmxhZ3MgfCBPX05PTkJMT0NLKTsKLSNlbmRpZgotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE5vdyBzaXQgaGVyZSBhbmQgd2FpdCBmb3IgY29ubmVjdGlvbnMgdG8gYXJyaXZlLiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIHJjID0gbGlzdGVuKHQtPnNvY2ssIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTik7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8qCi0gICAgICAgICAqIG5vIGJ1ZmZlciBzaXplIG9uIGxpc3RlbiBzb2NrZXQgLSBkb2Vzbid0IG1ha2Ugc2Vuc2UKLSAgICAgICAgICovCi0KLSAgICB9IGVsc2UgewotICAgICAgICB0LT5yZW1vdGUgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDE4KTsKLSAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPnJlbW90ZSwgYWRkci0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKLSAgICAgICAgdC0+cmVtb3RlWzE2XSA9IChhZGRyLT5zaW42X3BvcnQgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPnJlbW90ZVsxN10gPSAoYWRkci0+c2luNl9wb3J0ICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gMTg7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudC10eXBlIHNlc3Npb24sIHNvIGF0dGVtcHQgdG8gY29ubmVjdCB0byB0aGUgZmFyCi0gICAgICAgICAqIGVuZC4gIFdlIGRvbid0IGdvIG5vbi1ibG9ja2luZyBoZXJlIGJlY2F1c2UgaXQncyBub3Qgb2J2aW91cyB3aGF0Ci0gICAgICAgICAqIHlvdSdkIHRoZW4gZG8gaWYgeW91IHRyaWVkIHRvIGRvIHNubXBfc2VuZHMgYmVmb3JlIHRoZSBjb25uZWN0aW9uCi0gICAgICAgICAqIGhhZCBjb21wbGV0ZWQuICBTbyB0aGlzIGNhbiBibG9jay4KLSAgICAgICAgICovCi0KLSAgICAgICAgcmMgPSBjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJjb25uZWN0IHJldHVybnMgJWRcbiIsIHJjKSk7Ci0KLSAgICAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3A2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLiBEZWZhdWx0IGlzCi0gICAgICAgICAqIHRvIHVzZSBvcyBkZWZhdWx0LiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tCi0gICAgICAgICAqIGp1c3QgcGxvdWdoIG9uIHJlZ2FyZGxlc3MuICAKLSAgICAgICAgICovCi0gICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1NOREJVRiwgbG9jYWwsIDApOwotICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19SQ1ZCVUYsIGxvY2FsLCAwKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE1lc3NhZ2Ugc2l6ZSBpcyBub3QgbGltaXRlZCBieSB0aGlzIHRyYW5zcG9ydCAoaGVuY2UgbXNnTWF4U2l6ZQotICAgICAqIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGxlZ2FsIHNpemUgb2YgYW4gU05NUCBtZXNzYWdlKS4gIAotICAgICAqLwotCi0gICAgdC0+bXNnTWF4U2l6ZSA9IDB4N2ZmZmZmZmY7Ci0gICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfdGNwNl9yZWN2OwotICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3RjcDZfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF90Y3A2X2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICAgPSBuZXRzbm1wX3RjcDZfYWNjZXB0OwotICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3RjcDZfZm10YWRkcjsKLQotICAgIHJldHVybiB0OwotfQotCi0vKgotICogTm90IGV4dGVybiBidXQgc3RpbGwgZGVmaW5lZCBpbiBzbm1wVURQSVB2NkRvbWFpbi5jCi0gKi8KLWV4dGVybiBpbnQKLW5ldHNubXBfc29ja2FkZHJfaW42XzIoc3RydWN0IHNvY2thZGRyX2luNiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7Ci0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdGNwNl9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKLQkJCSAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7Ci0KLSAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pbjZfMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdGNwNl90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLQotLyoKLSAqIFNlZToKLSAqIAotICogaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1vcHMtdGFkZHJlc3MtbWliLTAxLnR4dAotICogCi0gKiAob3IgbmV3ZXIgZXF1aXZhbGVudCkgZm9yIGRldGFpbHMgb2YgdGhlIFRDIHdoaWNoIHdlIGFyZSB1c2luZyBmb3IKLSAqIHRoZSBtYXBwaW5nIGhlcmUuICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3RjcDZfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOwotCi0gICAgaWYgKG9fbGVuID09IDE4KSB7Ci0gICAgICAgIG1lbXNldCgodV9jaGFyICopICYgYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpbjZfYWRkci5zNl9hZGRyKSwgbywgMTYpOwotICAgICAgICBhZGRyLnNpbjZfcG9ydCA9IChvWzE2XSA8PCA4KSArIG9bMTddOwotICAgICAgICByZXR1cm4gbmV0c25tcF90Y3A2X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi12b2lkCi1uZXRzbm1wX3RjcDZfY3Rvcih2b2lkKQotewotICAgIHRjcDZEb21haW4ubmFtZSA9IG5ldHNubXBfVENQSVB2NkRvbWFpbjsKLSAgICB0Y3A2RG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfVENQSVB2NkRvbWFpbikgLyBzaXplb2Yob2lkKTsKLSAgICB0Y3A2RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOwotICAgIHRjcDZEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfdGNwNl9jcmVhdGVfdHN0cmluZzsKLSAgICB0Y3A2RG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3RjcDZfY3JlYXRlX29zdHJpbmc7Ci0gICAgdGNwNkRvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYyg0LCBzaXplb2YoY2hhciAqKSk7Ci0gICAgdGNwNkRvbWFpbi5wcmVmaXhbMF0gPSAidGNwNiI7Ci0gICAgdGNwNkRvbWFpbi5wcmVmaXhbMV0gPSAidGNwdjYiOwotICAgIHRjcDZEb21haW4ucHJlZml4WzJdID0gInRjcGlwdjYiOwotCi0gICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZ0Y3A2RG9tYWluKTsKLX0KLQotI2VuZGlmIC8qIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOICovCi0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcFVEUERvbWFpbi5jIGIvc25tcGxpYi9zbm1wVURQRG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMDYyY2MuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wVURQRG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzM0ICswLDAgQEAKLS8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQotICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKLSAqIHRoYXQgbWF5IGFwcGx5OgotICovCi0vKgotICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKLSAqIENvcHlyaWdodCBDb3B5cmlnaHQgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgotICovCi0KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVREQl9ICi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1VJT19ICi0jaW5jbHVkZSA8c3lzL3Vpby5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KLQotI2lmbmRlZiBJTkFERFJfTk9ORQotI2RlZmluZSBJTkFERFJfTk9ORQktMQotI2VuZGlmCi0KLSNpZmRlZiAgTVNHX0RPTlRXQUlUCi0jZGVmaW5lIE5FVFNOTVBfRE9OVFdBSVQgTVNHX0RPTlRXQUlUCi0jZWxzZQotI2RlZmluZSBORVRTTk1QX0RPTlRXQUlUIDAKLSNlbmRpZgotCi1zdGF0aWMgbmV0c25tcF90ZG9tYWluIHVkcERvbWFpbjsKLQotdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF91ZHBfYWRkcl9wYWlyX3MgewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVfYWRkcjsKLSAgICBzdHJ1Y3QgaW5fYWRkciBsb2NhbF9hZGRyOwotfSBuZXRzbm1wX3VkcF9hZGRyX3BhaXI7Ci0KLS8qCi0gKiBub3Qgc3RhdGljLCBzaW5jZSBzbm1wVURQSVB2NkRvbWFpbiBuZWVkcyBpdCwgYnV0IG5vdCBwdWJsaWMsIGVpdGhlci4KLSAqIChpZSBkb24ndCBwdXQgaXQgaW4gYSBwdWJsaWMgaGVhZGVyLikKLSAqLwotdm9pZCBfbmV0c25tcF91ZHBfc29ja29wdF9zZXQoaW50IGZkLCBpbnQgc2VydmVyKTsKLWludAotbmV0c25tcF9zb2NrYWRkcl9pbjIoc3RydWN0IHNvY2thZGRyX2luICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpOwotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCi0gKi8KLQotc3RhdGljIGNoYXIgKgotbmV0c25tcF91ZHBfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMICYmIGxlbiA9PSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSkgewotCWFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgZGF0YTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKLQlhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIHQtPmRhdGE7Ci0gICAgfQotCi0gICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBzdHJkdXAoIlVEUDogdW5rbm93biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqdG8gPSBOVUxMOwotCWNoYXIgdG1wWzY0XTsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7Ci0gICAgICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcCwgIlVEUDogdW5rbm93bi0+WyVzXSIsCi0gICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYShhZGRyX3BhaXItPmxvY2FsX2FkZHIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNwcmludGYodG1wLCAiVURQOiBbJXNdOiVodS0+IiwKLSAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKHRvLT5zaW5fYWRkciksIG50b2hzKHRvLT5zaW5fcG9ydCkpOwotICAgICAgICAgICAgc3ByaW50Zih0bXAgKyBzdHJsZW4odG1wKSwgIlslc10iLCBpbmV0X250b2EoYWRkcl9wYWlyLT5sb2NhbF9hZGRyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0cmR1cCh0bXApOwotICAgIH0KLX0KLQotCi0KLSNpZiBkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKElQX1BLVElORk8pCi0KLSMgZGVmaW5lIG5ldHNubXBfZHN0YWRkcih4KSAoJigoKHN0cnVjdCBpbl9wa3RpbmZvICopKENNU0dfREFUQSh4KSkpLT5pcGlfYWRkcikpCi0KLXN0YXRpYyBpbnQgbmV0c25tcF91ZHBfcmVjdmZyb20oaW50IHMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHNvY2thZGRyICpmcm9tLCBzb2NrbGVuX3QgKmZyb21sZW4sIHN0cnVjdCBpbl9hZGRyICpkc3RpcCkKLXsKLSAgICBpbnQgcjsKLSAgICBzdHJ1Y3QgaW92ZWMgaW92WzFdOwotICAgIGNoYXIgY21zZ1tDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKLSAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZ3B0cjsKLSAgICBzdHJ1Y3QgbXNnaGRyIG1zZzsKLQotICAgIGlvdlswXS5pb3ZfYmFzZSA9IGJ1ZjsKLSAgICBpb3ZbMF0uaW92X2xlbiA9IGxlbjsKLQotICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YgbXNnKTsKLSAgICBtc2cubXNnX25hbWUgPSBmcm9tOwotICAgIG1zZy5tc2dfbmFtZWxlbiA9ICpmcm9tbGVuOwotICAgIG1zZy5tc2dfaW92ID0gaW92OwotICAgIG1zZy5tc2dfaW92bGVuID0gMTsKLSAgICBtc2cubXNnX2NvbnRyb2wgPSAmY21zZzsKLSAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7Ci0KLSAgICByID0gcmVjdm1zZyhzLCAmbXNnLCBORVRTTk1QX0RPTlRXQUlUKTsKLQotICAgIGlmIChyID09IC0xKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgImdvdCBzb3VyY2UgYWRkcjogJXNcbiIsIGluZXRfbnRvYSgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWZyb20pLT5zaW5fYWRkcikpKTsKLSAgICBmb3IgKGNtc2dwdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXNncHRyICE9IE5VTEw7IGNtc2dwdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNncHRyKSkgewotICAgICAgICBpZiAoY21zZ3B0ci0+Y21zZ19sZXZlbCA9PSBTT0xfSVAgJiYgY21zZ3B0ci0+Y21zZ190eXBlID09IElQX1BLVElORk8pIHsKLSAgICAgICAgICAgIG1lbWNweSgodm9pZCAqKSBkc3RpcCwgbmV0c25tcF9kc3RhZGRyKGNtc2dwdHIpLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJnb3QgZGVzdGluYXRpb24gKGxvY2FsKSBhZGRyICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBpbmV0X250b2EoKmRzdGlwKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByOwotfQotCi1zdGF0aWMgaW50IG5ldHNubXBfdWRwX3NlbmR0byhpbnQgZmQsIHN0cnVjdCBpbl9hZGRyICpzcmNpcCwgc3RydWN0IHNvY2thZGRyICpyZW1vdGUsCi0JCQl2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIHN0cnVjdCBpb3ZlYyBpb3YgPSB7IGRhdGEsIGxlbiB9OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHN0cnVjdCBjbXNnaGRyIGNtOwotICAgICAgICBzdHJ1Y3QgaW5fcGt0aW5mbyBpcGk7Ci0gICAgfSBjbXNnOwotICAgIHN0cnVjdCBtc2doZHIgbTsKLQotICAgIG1lbXNldCgmY21zZywgMCwgc2l6ZW9mKGNtc2cpKTsKLSAgICBjbXNnLmNtLmNtc2dfbGVuID0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSArIHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbyk7Ci0gICAgY21zZy5jbS5jbXNnX2xldmVsID0gU09MX0lQOwotICAgIGNtc2cuY20uY21zZ190eXBlID0gSVBfUEtUSU5GTzsKLSAgICBjbXNnLmlwaS5pcGlfaWZpbmRleCA9IDA7Ci0gICAgY21zZy5pcGkuaXBpX3NwZWNfZHN0LnNfYWRkciA9IChzcmNpcCA/IHNyY2lwLT5zX2FkZHIgOiBJTkFERFJfQU5ZKTsKLQotICAgIG0ubXNnX25hbWUJCT0gcmVtb3RlOwotICAgIG0ubXNnX25hbWVsZW4JPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSAgICBtLm1zZ19pb3YJCT0gJmlvdjsKLSAgICBtLm1zZ19pb3ZsZW4JPSAxOwotICAgIG0ubXNnX2NvbnRyb2wJPSAmY21zZzsKLSAgICBtLm1zZ19jb250cm9sbGVuCT0gc2l6ZW9mKGNtc2cpOwotICAgIG0ubXNnX2ZsYWdzCQk9IDA7Ci0KLSAgICByZXR1cm4gc2VuZG1zZyhmZCwgJm0sIE1TR19OT1NJR05BTHxNU0dfRE9OVFdBSVQpOwotfQotI2VuZGlmIC8qIGxpbnV4ICYmIElQX1BLVElORk8gKi8KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKLSAqLwotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VkcF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCAgICAgICAgICAgICByYyA9IC0xOwotICAgIHNvY2tsZW5fdCAgICAgICBmcm9tbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7Ci0gICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOwotICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICAgICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbXNldChhZGRyX3BhaXIsIDAsIHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICAgICAgICAgIGZyb20gPSAoc3RydWN0IHNvY2thZGRyICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7Ci0gICAgICAgIH0KLQotCXdoaWxlIChyYyA8IDApIHsKLSNpZiBkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKElQX1BLVElORk8pCi0gICAgICAgICAgICByYyA9IG5ldHNubXBfdWRwX3JlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgZnJvbSwgJmZyb21sZW4sICYoYWRkcl9wYWlyLT5sb2NhbF9hZGRyKSk7Ci0jZWxzZQotICAgICAgICAgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIE5FVFNOTVBfRE9OVFdBSVQsIGZyb20sICZmcm9tbGVuKTsKLSNlbmRpZiAvKiBsaW51eCAmJiBJUF9QS1RJTkZPICovCi0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0KLSAgICAgICAgaWYgKHJjID49IDApIHsKLSAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdWRwX2ZtdGFkZHIoTlVMTCwgYWRkcl9wYWlyLCBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLAotCQkJInJlY3Zmcm9tIGZkICVkIGdvdCAlZCBieXRlcyAoZnJvbSAlcylcbiIsCi0JCQl0LT5zb2NrLCByYywgc3RyKSk7Ci0gICAgICAgICAgICBmcmVlKHN0cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAicmVjdmZyb20gZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICB9Ci0gICAgICAgICpvcGFxdWUgPSAodm9pZCAqKWFkZHJfcGFpcjsKLSAgICAgICAgKm9sZW5ndGggPSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF91ZHBfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7Ci0gICAgc3RydWN0IHNvY2thZGRyICp0byA9IE5VTEw7Ci0KLSAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgKm9wYXF1ZSAhPSBOVUxMICYmCi0gICAgICAgICpvbGVuZ3RoID09IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKSB7Ci0gICAgICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgKCpvcGFxdWUpOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKSB7Ci0gICAgICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgKHQtPmRhdGEpOwotICAgIH0KLQotICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOwotCi0gICAgaWYgKHRvICE9IE5VTEwgJiYgdCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcF9mbXRhZGRyKE5VTEwsICh2b2lkICopIGFkZHJfcGFpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJzZW5kICVkIGJ5dGVzIGZyb20gJXAgdG8gJXMgb24gZmQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIHNpemUsIGJ1Ziwgc3RyLCB0LT5zb2NrKSk7Ci0gICAgICAgIGZyZWUoc3RyKTsKLQl3aGlsZSAocmMgPCAwKSB7Ci0jaWYgZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChJUF9QS1RJTkZPKQotICAgICAgICAgICAgcmMgPSBuZXRzbm1wX3VkcF9zZW5kdG8odC0+c29jaywgYWRkcl9wYWlyID8gJihhZGRyX3BhaXItPmxvY2FsX2FkZHIpIDogTlVMTCwgdG8sIGJ1Ziwgc2l6ZSk7Ci0jZWxzZQotICAgICAgICAgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCB0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotI2VuZGlmIC8qIGxpbnV4ICYmIElQX1BLVElORk8gKi8KLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJzZW5kdG8gZXJyb3IsIHJjICVkIChlcnJubyAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIGVycm5vKSk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VkcF9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBpZiAodC0+c29jayA+PSAwKSB7Ci0jaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKLSAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKLSNlbHNlCi0gICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7Ci0jZW5kaWYKLSAgICAgICAgdC0+c29jayA9IC0xOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBmaW5kIGxhcmdlc3QgcG9zc2libGUgYnVmZmVyIGJldHdlZW4gY3VycmVudCBzaXplIGFuZCBzcGVjaWZpZWQgc2l6ZS4KLSAqCi0gKiBUcnkgdG8gbWF4aW1pemUgdGhlIGN1cnJlbnQgYnVmZmVyIG9mIHR5cGUgIm9wdG5hbWUiCi0gKiB0byB0aGUgbWF4aW11bSBhbGxvd2FibGUgc2l6ZSBieSB0aGUgT1MgKGFzIGNsb3NlIHRvCi0gKiBzaXplIGFzIHBvc3NpYmxlKQotICovCi1zdGF0aWMgaW50Ci1fc29ja19idWZmZXJfbWF4aW1pemUoaW50IHMsIGludCBvcHRuYW1lLCBjb25zdCBjaGFyICpidWZ0eXBlLCBpbnQgc2l6ZSkKLXsKLSAgICBpbnQgICAgICAgICAgICBjdXJidWYgPSAwOwotICAgIHNpemVfdCAgICAgICAgIGN1cmJ1ZmxlbiA9IHNpemVvZihpbnQpOwotICAgIGludCAgICAgICAgICAgIGxvLCBtaWQsIGhpOwotCi0gICAgLyoKLSAgICAgKiBGaXJzdCB3ZSBuZWVkIHRvIGRldGVybWluZSBvdXIgY3VycmVudCBidWZmZXIKLSAgICAgKi8KLSAgICBpZiAoKGdldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJmN1cmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgJmN1cmJ1ZmxlbikgPT0gMCkgCi0gICAgICAgICAgICAmJiAoY3VyYnVmbGVuID09IHNpemVvZihpbnQpKSkgewotCi0gICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXI6bWF4IiwgIkN1cnJlbnQgJXMgaXMgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUsIGN1cmJ1ZikpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIExldCdzIG5vdCBiZSBzdHVwaWQgLi4uIGlmIHdlIHdlcmUgYXNrZWQgZm9yIGxlc3MgdGhhbiB3aGF0IHdlCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSwgdGhlbiBmb3JnZXQgYWJvdXQgaXQKLSAgICAgICAgICovCi0gICAgICAgIGlmIChzaXplIDw9IGN1cmJ1ZikgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlcjptYXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3RlZCAlcyA8PSBjdXJyZW50IGJ1ZmZlclxuIiwgYnVmdHlwZSkpOwotICAgICAgICAgICAgcmV0dXJuIGN1cmJ1ZjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIERvIGEgYmluYXJ5IHNlYXJjaCB0aGUgb3B0aW1hbCBidWZmZXIgd2l0aGluIDFrIG9mIHRoZSBwb2ludCBvZgotICAgICAgICAgKiBmYWlsdXJlLiBUaGlzIGlzIHJhdGhlciBicnV0ZWZvcmNlLCBidXQgc2ltcGxlCi0gICAgICAgICAqLwotICAgICAgICBoaSA9IHNpemU7Ci0gICAgICAgIGxvID0gY3VyYnVmOwotCi0gICAgICAgIHdoaWxlIChoaSAtIGxvID4gMTAyNCkgewotICAgICAgICAgICAgbWlkID0gKGxvICsgaGkpIC8gMjsKLSAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZtaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50KSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGxvID0gbWlkOyAvKiBTdWNjZXNzOiBzZWFyY2ggYmV0d2VlbiBtaWQgYW5kIGhpICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGhpID0gbWlkOyAvKiBGYWlsZWQ6IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBtaWQgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE5vdyBwcmludCBpZiB0aGlzIG9wdGltaXphdGlvbiBoZWxwZWQgb3Igbm90Ci0gICAgICAgICAqLwotICAgICAgICBpZiAoZ2V0c29ja29wdChzLFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZjdXJidWYsCi0gICAgICAgICAgICAgICAgICAgICZjdXJidWZsZW4pID09IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyOm1heCIsIAotICAgICAgICAgICAgICAgICAgICAgICAgIk1heGltaXplZCAlczogJWRcbiIsYnVmdHlwZSwgY3VyYnVmKSk7Ci0gICAgICAgIH0gCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlcmUgaXMgcmVhbGx5IG5vdCBhIGxvdCB3ZSBjYW4gZG8gYW55bW9yZS4KLSAgICAgICAgICogSWYgdGhlIE9TIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gd2hhdCdzIHRoZSAKLSAgICAgICAgICogcG9pbnQgaW4gdHJ5aW5nIHRvIG1ha2UgaXQgYmV0dGVyCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlcjptYXgiLCAiR2V0ICVzIGZhaWxlZCAuLi4gZ2l2aW5nIHVwIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgYnVmdHlwZSkpOwotICAgICAgICBjdXJidWYgPSAtMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3VyYnVmOwotfQotCi0KLXN0YXRpYyBjb25zdCBjaGFyICoKLV9zb2NrX2J1Zl90eXBlX2dldChpbnQgb3B0bmFtZSwgaW50IGxvY2FsKQotewotICAgIGlmIChvcHRuYW1lID09IFNPX1NOREJVRikgewotICAgICAgICBpZiAobG9jYWwpCi0gICAgICAgICAgICByZXR1cm4gInNlcnZlciBzZW5kIGJ1ZmZlciI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAiY2xpZW50IHNlbmQgYnVmZmVyIjsKLSAgICB9IGVsc2UgaWYgKG9wdG5hbWUgPT0gU09fUkNWQlVGKSB7Ci0gICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAgICAgIHJldHVybiAic2VydmVyIHJlY2VpdmUgYnVmZmVyIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuICJjbGllbnQgcmVjZWl2ZSBidWZmZXIiOwotICAgIH0KLQotICAgIHJldHVybiAidW5rbm93biBidWZmZXIiOwotfQotCi0vKgotICoKLSAqIEdldCB0aGUgcmVxdWVzdGVkIGJ1ZmZlcnNpemUsIGJhc2VkIG9uCi0gKiAtIHNvY2tldHR5cGUgOiBjbGllbnQgKGxvY2FsID0gMCkgb3Igc2VydmVyIChsb2NhbCA9IDEpIAotICogLSBidWZmZXJ0eXBlIDogc2VuZCAob3B0bmFtZSA9IFNPX1NOREJVRikgb3IgcmVjdiAoU09fUkNWQlVGKQotICoKLSAqIEluIGNhc2UgYSBjb21waWxlIHRpbWUgYnVmZmVyIHdhcyBzcGVjaWZpZWQsIHRoZW4gdXNlIHRoYXQgb25lCi0gKiBpZiB0aGVyZSB3YXMgbm8gcnVudGltZSBjb25maWd1cmF0aW9uIG92ZXJyaWRlCi0gKi8KLXN0YXRpYyBpbnQKLV9zb2NrX2J1ZmZlcl9zaXplX2dldChpbnQgb3B0bmFtZSwgaW50IGxvY2FsLCBjb25zdCBjaGFyICoqYnVmdHlwZSkKLXsKLSAgICBpbnQgc2l6ZTsKLQotICAgIGlmIChOVUxMICE9IGJ1ZnR5cGUpCi0gICAgICAgICpidWZ0eXBlID0gX3NvY2tfYnVmX3R5cGVfZ2V0KG9wdG5hbWUsIGxvY2FsKTsKLQotICAgIGlmIChvcHRuYW1lID09IFNPX1NOREJVRikgewotICAgICAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgICAgIHNpemUgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLSAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU0VSVkVSU0VOREJVRik7Ci0jaWZkZWYgTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9TRU5EX0JVRgotICAgICAgICAgICAgaWYgKHNpemUgPD0gMCkKLSAgICAgICAgICAgICAgIHNpemUgPSBORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1NFTkRfQlVGOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaXplID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0gICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVFNFTkRCVUYpOwotI2lmZGVmIE5FVFNOTVBfREVGQVVMVF9DTElFTlRfU0VORF9CVUYKLSAgICAgICAgICAgIGlmIChzaXplIDw9IDApCi0gICAgICAgICAgICAgICBzaXplID0gTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9TRU5EX0JVRjsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChvcHRuYW1lID09IFNPX1JDVkJVRikgewotICAgICAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgICAgIHNpemUgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLSAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU0VSVkVSUkVDVkJVRik7Ci0jaWZkZWYgTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9SRUNWX0JVRgotICAgICAgICAgICAgaWYgKHNpemUgPD0gMCkKLSAgICAgICAgICAgICAgIHNpemUgPSBORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1JFQ1ZfQlVGOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaXplID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0gICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVFJFQ1ZCVUYpOwotI2lmZGVmIE5FVFNOTVBfREVGQVVMVF9DTElFTlRfUkVDVl9CVUYKLSAgICAgICAgICAgIGlmIChzaXplIDw9IDApCi0gICAgICAgICAgICAgICBzaXplID0gTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9SRUNWX0JVRjsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXIiLCAiUmVxdWVzdGVkICVzIGlzICVkXG4iLAotICAgICAgICAgICAgICAgIChidWZ0eXBlKSA/ICpidWZ0eXBlIDogInVua25vd24gYnVmZmVyIiwgc2l6ZSkpOwotCi0gICAgcmV0dXJuKHNpemUpOwotfQotCi0vKgotICogc2V0IHNvY2tldCBidWZmZXIgc2l6ZQotICoKLSAqIEBwYXJhbSBzcyAgICAgOiBzb2NrZXQKLSAqIEBwYXJhbSBvcHRuYW1lOiBTT19TTkRCVUYgb3IgU09fUkNWQlVGCi0gKiBAcGFyYW0gbG9jYWwgIDogMSBmb3Igc2VydmVyLCAwIGZvciBjbGllbnQKLSAqIEBwYXJhbSByZXFidWYgOiByZXF1ZXN0ZWQgc2l6ZSwgb3IgMCBmb3IgZGVmYXVsdAotICoKLSAqIEByZXR2YWwgICAgLTEgOiBlcnJvcgotICogQHJldHZhbCAgICA+MCA6IG5ldyBidWZmZXIgc2l6ZQotICovCi1pbnQKLW5ldHNubXBfc29ja19idWZmZXJfc2V0KGludCBzLCBpbnQgb3B0bmFtZSwgaW50IGxvY2FsLCBpbnQgc2l6ZSkKLXsKLSNpZiAhIGRlZmluZWQoU09fU05EQlVGKSAmJiAhIGRlZmluZWQoU09fUkNWQlVGKQotICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyIiwgIkNoYW5naW5nIHNvY2tldCBidWZmZXIgaXMgbm90IHN1cHBvcnRlZFxuIikpOwotICAgIHJldHVybiAtMTsKLSNlbHNlCi0gICAgY29uc3QgY2hhciAgICAgKmJ1ZnR5cGU7Ci0gICAgaW50ICAgICAgICAgICAgY3VyYnVmID0gMDsKLSAgICBzaXplX3QgICAgICAgICBjdXJidWZsZW4gPSBzaXplb2YoaW50KTsKLQotIyAgIGlmbmRlZiAgU09fU05EQlVGCi0gICAgaWYgKFNPX1NOREJVRiA9PSBvcHRuYW1lKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyIiwKLSAgICAgICAgICAgICAgICAgICAgIkNoYW5naW5nIHNvY2tldCBzZW5kIGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkXG4iKSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jICAgZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qU09fU05EQlVGICovCi0jICAgaWZuZGVmICBTT19SQ1ZCVUYKLSAgICBpZiAoU09fUkNWQlVGID09IG9wdG5hbWUpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXIiLAotICAgICAgICAgICAgICAgICAgICAiQ2hhbmdpbmcgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGlzIG5vdCBzdXBwb3J0ZWRcbiIpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSMgICBlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypTT19SQ1ZCVUYgKi8KLQotICAgIC8qCi0gICAgICogV2hhdCBpcyB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplID8KLSAgICAgKi8KLSAgICBpZiAoMCA9PSBzaXplKQotICAgICAgICBzaXplID0gX3NvY2tfYnVmZmVyX3NpemVfZ2V0KG9wdG5hbWUsIGxvY2FsLCAmYnVmdHlwZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGJ1ZnR5cGUgPSBfc29ja19idWZfdHlwZV9nZXQob3B0bmFtZSwgbG9jYWwpOwotICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXIiLCAiUmVxdWVzdGVkICVzIGlzICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUsIHNpemUpKTsKLSAgICB9Ci0KLSAgICBpZiAoKGdldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJmN1cmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgJmN1cmJ1ZmxlbikgPT0gMCkgCi0gICAgICAgICYmIChjdXJidWZsZW4gPT0gc2l6ZW9mKGludCkpKSB7Ci0gICAgICAgIAotICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXIiLCAiT3JpZ2luYWwgJXMgaXMgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgY3VyYnVmKSk7Ci0gICAgICAgIGlmIChjdXJidWYgPj0gc2l6ZSkgewotICAgICAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAiTmV3ICVzIHNpemUgaXMgc21hbGxlciB0aGFuIG9yaWdpbmFsIVxuIiwgYnVmdHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiB0aGUgYnVmZmVyc2l6ZSB3YXMgbm90IHNwZWNpZmllZCBvciBpdCB3YXMgYSBuZWdhdGl2ZSB2YWx1ZQotICAgICAqIHRoZW4gZG9uJ3QgY2hhbmdlIHRoZSBPUyBidWZmZXJzIGF0IGFsbAotICAgICAqLwotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICBERUJVR01TR1QoKCJzb2NrZXQ6YnVmZmVyIiwKLSAgICAgICAgICAgICAgICAgICAgIiVzIG5vdCB2YWxpZCBvciBub3Qgc3BlY2lmaWVkOyB1c2luZyBPUyBkZWZhdWx0KCVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgYnVmdHlwZSxjdXJidWYpKTsKLSAgICAgICByZXR1cm4gY3VyYnVmOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVHJ5IHRvIHNldCB0aGUgcmVxdWVzdGVkIHNlbmQgYnVmZmVyCi0gICAgICovCi0gICAgaWYgKHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJnNpemUsIHNpemVvZihpbnQpKSA9PSAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEJlY2F1c2Ugc29tZSBwbGF0Zm9ybXMgbGllIGFib3V0IHRoZSBhY3R1YWwgYnVmZmVyIHRoYXQgaGFzIGJlZW4gCi0gICAgICAgICAqIHNldCAoTGludXggd2lsbCBhbHdheXMgc2F5IGl0IHdvcmtlZCAuLi4pLCB3ZSBwcmludCBzb21lIAotICAgICAgICAgKiBkaWFnbm9zdGljIG91dHB1dCBmb3IgZGVidWdnaW5nCi0gICAgICAgICAqLwotICAgICAgICBERUJVR0lGKCJzb2NrZXQ6YnVmZmVyIikgewotICAgICAgICAgICAgREVCVUdNU0dUKCgic29ja2V0OmJ1ZmZlciIsICJTZXQgJXMgdG8gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUsIHNpemUpKTsKLSAgICAgICAgICAgIGlmICgoZ2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmY3VyYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJidWZsZW4pID09IDApIAotICAgICAgICAgICAgICAgICAgICAmJiAoY3VyYnVmbGVuID09IHNpemVvZihpbnQpKSkgewotCi0gICAgICAgICAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3cgJXMgaXMgJWRcbiIsIGJ1ZnR5cGUsIGN1cmJ1ZikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qCi0gICAgICAgICAqIElmIHRoZSBuZXcgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgc2l6ZSB3ZSByZXF1ZXN0ZWQsIHdlIHdpbGwKLSAgICAgICAgICogdHJ5IHRvIGluY3JlbWVudCB0aGUgbmV3IGJ1ZmZlciB3aXRoIDFrIGluY3JlbWVudHMgCi0gICAgICAgICAqICh0aGlzIHdpbGwgc29tZXRpbWUgYWxsb3cgdXMgdG8gcmVhY2ggYSBtb3JlIG9wdGltYWwgYnVmZmVyLikKLSAgICAgICAgICogICBGb3IgZXhhbXBsZSA6IE9uIFNvbGFyaXMsIGlmIHRoZSBtYXggT1MgYnVmZmVyIGlzIDEwMGsgYW5kIHlvdQotICAgICAgICAgKiAgIHJlcXVlc3QgMTEwaywgeW91IGVuZCB1cCB3aXRoIHRoZSBkZWZhdWx0IDhrIDotKAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGN1cmJ1ZiA8IHNpemUpIHsKLSAgICAgICAgICAgIGN1cmJ1ZiA9IF9zb2NrX2J1ZmZlcl9tYXhpbWl6ZShzLCBvcHRuYW1lLCBidWZ0eXBlLCBzaXplKTsKLSAgICAgICAgICAgIGlmKC0xICE9IGN1cmJ1ZikKLSAgICAgICAgICAgICAgICBzaXplID0gY3VyYnVmOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBPYnZpb3VzbHkgY2hhbmdpbmcgdGhlIGJ1ZmZlciBmYWlsZWQsIG1vc3QgbGlrZSBsaWtlIGJlY2F1c2Ugd2UgCi0gICAgICAgICAqIHJlcXVlc3RlZCBhIGJ1ZmZlciBncmVhdGVyIHRoYW4gdGhlIE9TIGxpbWl0LgotICAgICAgICAgKiBUaGVyZWZvcmUgd2UgbmVlZCB0byBzZWFyY2ggZm9yIGFuIG9wdGltYWwgYnVmZmVyIHRoYXQgaXMgY2xvc2UKLSAgICAgICAgICogZW5vdWdoIHRvIHRoZSBwb2ludCBvZiBmYWlsdXJlLgotICAgICAgICAgKiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gcmVhY2ggYSBtb3JlIG9wdGltYWwgYnVmZmVyLgotICAgICAgICAgKiAgIEZvciBleGFtcGxlIDogT24gU29sYXJpcywgaWYgdGhlIG1heCBPUyBidWZmZXIgaXMgMTAwayBhbmQgeW91IAotICAgICAgICAgKiAgIHJlcXVlc3QgMTEwaywgeW91IGVuZCB1cCB3aXRoIHRoZSBkZWZhdWx0IDhrIDotKAotICAgICAgICAgKiAgIEFmdGVyIHRoaXMgcXVpY2sgc2VhY2ggd2Ugd291bGQgZ2V0IDFrIGNsb3NlIHRvIDEwMGsgKHRoZSBtYXgpCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsICJjb3VsZG4ndCBzZXQgJXMgdG8gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUsIHNpemUpKTsKLQotICAgICAgICBjdXJidWYgPSBfc29ja19idWZmZXJfbWF4aW1pemUocywgb3B0bmFtZSwgYnVmdHlwZSwgc2l6ZSk7Ci0gICAgICAgIGlmKC0xICE9IGN1cmJ1ZikKLSAgICAgICAgICAgIHNpemUgPSBjdXJidWY7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNpemU7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIE9wZW4gYSBVRFAtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZSBsb2NhbAotICogYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgCi0gKiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VkcF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBpbnQgbG9jYWwpCi17Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICByYyA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgKnN0ciA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgKmNsaWVudF9zb2NrZXQgPSBOVUxMOwotICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciBhZGRyX3BhaXI7Ci0KLSAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBtZW1zZXQoJmFkZHJfcGFpciwgMCwgc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgIG1lbWNweSgmKGFkZHJfcGFpci5yZW1vdGVfYWRkciksIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQotICAgIHQgPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc3RyID0gbmV0c25tcF91ZHBfZm10YWRkcihOVUxMLCAodm9pZCAqKSZhZGRyX3BhaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgIm9wZW4gJXMgJXNcbiIsIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAotICAgICAgICAgICAgICAgIHN0cikpOwotICAgIGZyZWUoc3RyKTsKLQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIHQtPmRvbWFpbiA9IG5ldHNubXBVRFBEb21haW47Ci0gICAgdC0+ZG9tYWluX2xlbmd0aCA9IG5ldHNubXBVRFBEb21haW5fbGVuOwotCi0gICAgdC0+c29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKLSAgICBpZiAodC0+c29jayA8IDApIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KHQtPnNvY2ssIGxvY2FsKTsKLQotICAgIGlmIChsb2NhbCkgewotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5lZGVkIGFzIGEgc2VydmVyLCBzbyB3ZSBtdXN0IGJpbmQgb24gdG8gdGhlCi0gICAgICAgICAqIGdpdmVuIElQIGFkZHJlc3MsIHdoaWNoIG1heSBpbmNsdWRlIGFuIGludGVyZmFjZSBhZGRyZXNzLCBvciBjb3VsZAotICAgICAgICAgKiBiZSBJTkFERFJfQU5ZLCBidXQgY2VydGFpbmx5IGluY2x1ZGVzIGEgcG9ydCBudW1iZXIuCi0gICAgICAgICAqLwotCi0gICAgICAgIHQtPmxvY2FsID0gKHVfY2hhciAqKSBtYWxsb2MoNik7Ci0gICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPmxvY2FsLCAodV9jaGFyICopICYgKGFkZHItPnNpbl9hZGRyLnNfYWRkciksIDQpOwotICAgICAgICB0LT5sb2NhbFs0XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPmxvY2FsWzVdID0gKGh0b25zKGFkZHItPnNpbl9wb3J0KSAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+bG9jYWxfbGVuZ3RoID0gNjsKLQotI2lmIGRlZmluZWQobGludXgpICYmIGRlZmluZWQoSVBfUEtUSU5GTykKLSAgICAgICAgeyAKLSAgICAgICAgICAgIGludCBzb2Nrb3B0ID0gMTsKLSAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9JUCwgSVBfUEtUSU5GTywgJnNvY2tvcHQsIHNpemVvZiBzb2Nrb3B0KSA9PSAtMSkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJjb3VsZG4ndCBzZXQgSVBfUEtUSU5GTzogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAic2V0IElQX1BLVElORk9cbiIpKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3VkcF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICB0LT5kYXRhID0gTlVMTDsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQgc2Vzc2lvbi4gIElmIHdlJ3ZlIGJlZW4gZ2l2ZW4gYQotICAgICAgICAgKiBjbGllbnQgYWRkcmVzcyB0byBzZW5kIGZyb20sIHRoZW4gYmluZCB0byB0aGF0LgotICAgICAgICAgKiBPdGhlcndpc2UgdGhlIHNlbmQgd2lsbCB1c2UgInNvbWV0aGluZyBzZW5zaWJsZSIuCi0gICAgICAgICAqLwotICAgICAgICBjbGllbnRfc29ja2V0ID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUik7Ci0gICAgICAgIGlmIChjbGllbnRfc29ja2V0KSB7Ci0gICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50X2FkZHI7Ci0gICAgICAgICAgICBuZXRzbm1wX3NvY2thZGRyX2luMigmY2xpZW50X2FkZHIsIGNsaWVudF9zb2NrZXQsIE5VTEwpOwotICAgICAgICAgICAgYWRkcl9wYWlyLmxvY2FsX2FkZHIgPSBjbGllbnRfYWRkci5zaW5fYWRkcjsKLSAgICAgICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmNsaWVudF9hZGRyLAotICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotICAgICAgICAgICAgaWYgKCByYyAhPSAwICkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJmYWlsZWQgdG8gYmluZCBmb3IgY2xpZW50YWRkcjogJWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgICAgIG5ldHNubXBfdWRwX2Nsb3NlKHQpOwotICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzdHIgPSBuZXRzbm1wX3VkcF9mbXRhZGRyKE5VTEwsICh2b2lkICopJmFkZHJfcGFpciwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAiY2xpZW50IG9wZW4gJXNcbiIsIHN0cikpOwotICAgICAgICBmcmVlKHN0cik7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2F2ZSB0aGUgKHJlbW90ZSkgYWRkcmVzcyBpbiB0aGUKLSAgICAgICAgICogdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIGJ5IG5ldHNubXBfdWRwX3NlbmQuCi0gICAgICAgICAqLwotCi0gICAgICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgICAgICB0LT5yZW1vdGUgPSAodV9jaGFyICopbWFsbG9jKDYpOwotICAgICAgICBpZiAodC0+ZGF0YSA9PSBOVUxMIHx8IHQtPnJlbW90ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPnJlbW90ZSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLCA0KTsKLSAgICAgICAgdC0+cmVtb3RlWzRdID0gKGh0b25zKGFkZHItPnNpbl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+cmVtb3RlWzVdID0gKGh0b25zKGFkZHItPnNpbl9wb3J0KSAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDY7Ci0gICAgICAgIG1lbWNweSh0LT5kYXRhLCAmYWRkcl9wYWlyLCBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcik7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAxNi1iaXQgbGVuZ3RoIGZpZWxkLCA4IGJ5dGUgVURQIGhlYWRlciwgMjAgYnl0ZSBJUHY0IGhlYWRlciAgCi0gICAgICovCi0KLSAgICB0LT5tc2dNYXhTaXplID0gMHhmZmZmIC0gOCAtIDIwOwotICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3VkcF9yZWN2OwotICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3VkcF9zZW5kOwotICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3VkcF9jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgID0gTlVMTDsKLSAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF91ZHBfZm10YWRkcjsKLQotICAgIHJldHVybiB0OwotfQotCi0KLXZvaWQKLV9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldChpbnQgZmQsIGludCBsb2NhbCkKLXsKLSNpZmRlZiAgU09fQlNEQ09NUEFUCi0gICAgLyoKLSAgICAgKiBQYXRjaCBmb3IgTGludXguICBXaXRob3V0IHRoaXMsIFVEUCBwYWNrZXRzIHRoYXQgZmFpbCBnZXQgYW4gSUNNUAotICAgICAqIHJlc3BvbnNlLiAgTGludXggdHVybnMgdGhlIGZhaWxlZCBJQ01QIHJlc3BvbnNlIGludG8gYW4gZXJyb3IgbWVzc2FnZQotICAgICAqIGFuZCByZXR1cm4gdmFsdWUsIHVubGlrZSBhbGwgb3RoZXIgT1Mncy4gIAotICAgICAqLwotICAgIGlmICgwID09IG5ldHNubXBfb3NfcHJlbWF0Y2goIkxpbnV4IiwiMi40IikpCi0gICAgewotICAgICAgICBpbnQgICAgICAgICAgICAgb25lID0gMTsKLSAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpvcHRpb24iLCAic2V0dGluZyBzb2NrZXQgb3B0aW9uIFNPX0JTRENPTVBBVFxuIikpOwotICAgICAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19CU0RDT01QQVQsICh2b2lkICopICZvbmUsCi0gICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9uZSkpOwotICAgIH0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypTT19CU0RDT01QQVQgKi8KLSAgICAvKgotICAgICAqIFNPX1JFVVNFQUREUiB3aWxsIGFsbG93IG11bHRpcGxlIGFwcHMgdG8gb3BlbiB0aGUgc2FtZSBwb3J0IGF0Ci0gICAgICogdGhlIHNhbWUgdGltZS4gT25seSB0aGUgbGFzdCBvbmUgdG8gb3BlbiB0aGUgc29ja2V0IHdpbGwgZ2V0Ci0gICAgICogZGF0YS4gT2J2aW91c2x5LCBmb3IgYW4gYWdlbnQsIHRoaXMgaXMgYSBiYWQgdGhpbmcuIFRoZXJlIHNob3VsZAotICAgICAqIG9ubHkgYmUgb25lIGxpc3RlbmVyLgotICAgICAqLwotI2lmZGVmIEFMTE9XX1BPUlRfSElKQUNLSU5HCi0jaWZkZWYgIFNPX1JFVVNFQUREUgotICAgIC8qCi0gICAgICogQWxsb3cgdGhlIHNhbWUgcG9ydCB0byBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBmYWlsaW5nLgotICAgICAqICAgICh1c2VmdWwgZm9yIGEgbGlzdGVuZXIpCi0gICAgICovCi0gICAgewotICAgICAgICBpbnQgICAgICAgICAgICAgb25lID0gMTsKLSAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpvcHRpb24iLCAic2V0dGluZyBzb2NrZXQgb3B0aW9uIFNPX1JFVVNFQUREUlxuIikpOwotICAgICAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICh2b2lkICopICZvbmUsCi0gICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9uZSkpOwotICAgIH0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypTT19SRVVTRUFERFIgKi8KLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBUcnkgdG8gc2V0IHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgdG8gYSByZWFzb25hYmx5IGxhcmdlIHZhbHVlLCBzbwotICAgICAqIHRoYXQgd2UgY2FuIHNlbmQgYW5kIHJlY2VpdmUgYmlnIFBEVXMgKGRlZmF1bHRzIHRvIDgxOTIgYnl0ZXMgKCEpIG9uCi0gICAgICogU29sYXJpcywgZm9yIGluc3RhbmNlKS4gIERvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IGVycm9ycyAtLSBqdXN0Ci0gICAgICogcGxvdWdoIG9uIHJlZ2FyZGxlc3MuICAKLSAgICAgKi8KLSAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChmZCwgU09fU05EQlVGLCBsb2NhbCwgMCk7Ci0gICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQoZmQsIFNPX1JDVkJVRiwgbG9jYWwsIDApOwotfQotCi1pbnQKLW5ldHNubXBfc29ja2FkZHJfaW4yKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotI2lmIEhBVkVfR0VUQUREUklORk8KLSAgICBzdHJ1Y3QgYWRkcmluZm8gKmFkZHJzID0gTlVMTDsKLSAgICBzdHJ1Y3QgYWRkcmluZm8gaGludDsKLSAgICBpbnQgICAgICAgICAgICAgZXJyOwotI2VsaWYgSEFWRV9HRVRJUE5PREVCWU5BTUUKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBlcnI7Ci0jZWxpZiBIQVZFX0dFVEhPU1RCWU5BTUUKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOwotI2VuZGlmCi0KLSAgICBpZiAoYWRkciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAiYWRkciAlcCwgaW5wZWVybmFtZSBcIiVzXCIsIGRlZmF1bHRfdGFyZ2V0IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICBhZGRyLCBpbnBlZXJuYW1lID8gaW5wZWVybmFtZSA6ICJbTklMXSIsCi0gICAgICAgICAgICAgICAgZGVmYXVsdF90YXJnZXQgPyBkZWZhdWx0X3RhcmdldCA6ICJbTklMXSIpKTsKLQotICAgIG1lbXNldChhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0gICAgYWRkci0+c2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7Ci0gICAgYWRkci0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgYWRkci0+c2luX3BvcnQgPSBodG9ucygodV9zaG9ydClTTk1QX1BPUlQpOwotCi0gICAgewotCWludCBwb3J0ID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLQkJCQkgICAgICBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQpOwotCi0JaWYgKHBvcnQgIT0gMCkgewotCSAgICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKCh1X3Nob3J0KXBvcnQpOwotCX0gZWxzZSBpZiAoZGVmYXVsdF90YXJnZXQgIT0gTlVMTCkKLQkgICAgbmV0c25tcF9zb2NrYWRkcl9pbjIoYWRkciwgZGVmYXVsdF90YXJnZXQsIE5VTEwpOwotICAgIH0KLQotICAgIGlmIChpbnBlZXJuYW1lICE9IE5VTEwgJiYgKmlucGVlcm5hbWUgIT0gJ1wwJykgewotCWNvbnN0IGNoYXIgICAgICpob3N0LCAqcG9ydDsKLQljaGFyICAgICAgICAgICAqcGVlcm5hbWUgPSBOVUxMOwotICAgICAgICBjaGFyICAgICAgICAgICAqY3A7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIER1cGxpY2F0ZSB0aGUgcGVlcm5hbWUgYmVjYXVzZSB3ZSBtaWdodCB3YW50IHRvIG1hbmsgYXJvdW5kIHdpdGgKLSAgICAgICAgICogaXQuICAKLSAgICAgICAgICovCi0KLSAgICAgICAgcGVlcm5hbWUgPSBzdHJkdXAoaW5wZWVybmFtZSk7Ci0gICAgICAgIGlmIChwZWVybmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRyeSBhbmQgZXh0cmFjdCBhbiBhcHBlbmRlZCBwb3J0IG51bWJlci4gIAotICAgICAgICAgKi8KLSAgICAgICAgY3AgPSBzdHJjaHIocGVlcm5hbWUsICc6Jyk7Ci0gICAgICAgIGlmIChjcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAqY3AgPSAnXDAnOwotICAgICAgICAgICAgcG9ydCA9IGNwICsgMTsKLSAgICAgICAgICAgIGhvc3QgPSBwZWVybmFtZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhvc3QgPSBOVUxMOwotICAgICAgICAgICAgcG9ydCA9IHBlZXJuYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVHJ5IHRvIGNvbnZlcnQgdGhlIHVzZXIgcG9ydCBzcGVjaWZpZXIKLSAgICAgICAgICovCi0gICAgICAgIGlmIChwb3J0ICYmICpwb3J0ID09ICdcMCcpCi0gICAgICAgICAgICBwb3J0ID0gTlVMTDsKLQotICAgICAgICBpZiAocG9ydCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBsb25nIGludCBsOwotICAgICAgICAgICAgY2hhciogZXA7Ci0KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwgImNoZWNrIHVzZXIgc2VydmljZSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQpKTsKLQotICAgICAgICAgICAgbCA9IHN0cnRvbChwb3J0LCAmZXAsIDEwKTsKLSAgICAgICAgICAgIGlmIChlcCAhPSBwb3J0ICYmICplcCA9PSAnXDAnICYmIDAgPD0gbCAmJiBsIDw9IDB4MGZmZmYpCi0gICAgICAgICAgICAgICAgYWRkci0+c2luX3BvcnQgPSBodG9ucygodV9zaG9ydClsKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChob3N0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vydm5hbWUgbm90IG51bWVyaWMsICIKLQkJCQkiY2hlY2sgaWYgaXQgcmVhbGx5IGlzIGEgZGVzdGluYXRpb24pIikpOwotICAgICAgICAgICAgICAgICAgICBob3N0ID0gcG9ydDsKLSAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vydm5hbWUgbm90IG51bWVyaWMiKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBUcnkgdG8gY29udmVydCB0aGUgdXNlciBob3N0IHNwZWNpZmllcgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGhvc3QgJiYgKmhvc3QgPT0gJ1wwJykKLSAgICAgICAgICAgIGhvc3QgPSBOVUxMOwotCi0gICAgICAgIGlmIChob3N0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjaGVjayBkZXN0aW5hdGlvbiAlc1xuIiwgaG9zdCkpOwotCi0jaWYgSEFWRV9HRVRBRERSSU5GTwotICAgICAgICAgICAgbWVtc2V0KCZoaW50LCAwLCBzaXplb2YgaGludCk7Ci0gICAgICAgICAgICBoaW50LmFpX2ZsYWdzID0gMDsKLSAgICAgICAgICAgIGhpbnQuYWlfZmFtaWx5ID0gUEZfSU5FVDsKLSAgICAgICAgICAgIGhpbnQuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOwotICAgICAgICAgICAgaGludC5haV9wcm90b2NvbCA9IDA7Ci0KLSAgICAgICAgICAgIGVyciA9IGdldGFkZHJpbmZvKHBlZXJuYW1lLCBOVUxMLCAmaGludCwgJmFkZHJzKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgewotI2lmIEhBVkVfR0FJX1NUUkVSUk9SCi0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImdldGFkZHJpbmZvOiAlcyAlc1xuIiwgcGVlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2FpX3N0cmVycm9yKGVycikpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZ2V0YWRkcmluZm86ICVzIChlcnJvciAlZClcbiIsIHBlZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGVycik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhZGRycyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkoJmFkZHItPnNpbl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkcnMtPmFpX2FkZHIpLT5zaW5fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0gICAgICAgICAgICAgICAgZnJlZWFkZHJpbmZvKGFkZHJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlc29sdmUgSVB2NCBob3N0bmFtZVxuIikpOwotICAgICAgICAgICAgfQotI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FCi0gICAgICAgICAgICBocCA9IGdldGhvc3RieW5hbWUoaG9zdCk7Ci0gICAgICAgICAgICBpZiAoaHAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKGNvdWxkbid0IHJlc29sdmUpXG4iKSk7Ci0gICAgICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGhwLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChub3QgQUZfSU5FVCEpXG4iKSk7Ci0gICAgICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCZhZGRyLT5zaW5fYWRkciwgaHAtPmhfYWRkciwgaHAtPmhfbGVuZ3RoKTsKLSAgICAgICAgICAgIH0KLSNlbGlmIEhBVkVfR0VUSVBOT0RFQllOQU1FCi0gICAgICAgICAgICBocCA9IGdldGlwbm9kZWJ5bmFtZShwZWVybmFtZSwgQUZfSU5FVCwgMCwgJmVycik7Ci0gICAgICAgICAgICBpZiAoaHAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKGNvdWxkbid0IHJlc29sdmUgPSAlZClcbiIsIGVycikpOwotICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOwotICAgICAgICAgICAgbWVtY3B5KCYoYWRkci0+c2luX2FkZHIpLCBocC0+aF9hZGRyLCBocC0+aF9sZW5ndGgpOwotI2Vsc2UgLyogSEFWRV9HRVRJUE5PREVCWU5BTUUgKi8KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGVyZSBpcyBubyBuYW1lIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJubyBnZXRhZGRyaW5mbygpL2dldGlwbm9kZWJ5bmFtZSgpL2dldGhvc3RieW5hbWUoKVxuIikpOwotICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBIQVZFX0dFVEhPU1RCWU5BTUUgKi8KLSAgICAgICAgfQotCWZyZWUocGVlcm5hbWUpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRmluaXNoZWQKLSAgICAgKi8KLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwgInJldHVybiB7IEFGX0lORVQsICVzOiVodSB9XG4iLAotICAgICAgICAgICAgICAgIGluZXRfbnRvYShhZGRyLT5zaW5fYWRkciksIG50b2hzKGFkZHItPnNpbl9wb3J0KSkpOwotICAgIHJldHVybiAxOwotfQotCi0KLWludAotbmV0c25tcF9zb2NrYWRkcl9pbihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGludCByZW1vdGVfcG9ydCkKLXsKLSAgICBjaGFyIGJ1ZltzaXplb2YoaW50KSAqIDMgKyAyXTsKLSAgICBzcHJpbnRmKGJ1ZiwgIjoldSIsIHJlbW90ZV9wb3J0KTsKLSAgICByZXR1cm4gbmV0c25tcF9zb2NrYWRkcl9pbjIoYWRkciwgaW5wZWVybmFtZSwgcmVtb3RlX3BvcnQgPyBidWYgOiBOVUxMKTsKLX0KLQotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHByb3ZpZGUgdGhlICJjb20yc2VjIiBjb25maWd1cmF0aW9uIHRva2VuCi0gKiBmdW5jdGlvbmFsaXR5IGZvciBjb21wYXRpYmlsaXR5LiAgCi0gKi8KLQotI2RlZmluZSBFWEFNUExFX05FVFdPUksJCSJORVRXT1JLIgotI2RlZmluZSBFWEFNUExFX0NPTU1VTklUWQkiQ09NTVVOSVRZIgotCi10eXBlZGVmIHN0cnVjdCBfY29tMlNlY0VudHJ5IHsKLSAgICBjaGFyICAgICAgICAgICAgY29tbXVuaXR5W0NPTU1VTklUWV9NQVhfTEVOXTsKLSAgICB1bnNpZ25lZCBsb25nICAgbmV0d29yazsKLSAgICB1bnNpZ25lZCBsb25nICAgbWFzazsKLSAgICBjaGFyICAgICAgICAgICAgc2VjTmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgY29udGV4dE5hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgc3RydWN0IF9jb20yU2VjRW50cnkgKm5leHQ7Ci19IGNvbTJTZWNFbnRyeTsKLQotY29tMlNlY0VudHJ5ICAgKmNvbTJTZWNMaXN0ID0gTlVMTCwgKmNvbTJTZWNMaXN0TGFzdCA9IE5VTEw7Ci0KLXZvaWQKLW5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpwYXJhbSkKLXsKLSAgICBjaGFyICAgICAgICAgICAgc2VjTmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgY29udGV4dE5hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIGNvbW11bml0eVtDT01NVU5JVFlfTUFYX0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIHNvdXJjZVtTTk1QX01BWEJVRl9TTUFMTF07Ci0gICAgY2hhciAgICAgICAgICAgKmNwID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICAgICAqc3RybWFzayA9IE5VTEw7Ci0gICAgY29tMlNlY0VudHJ5ICAgKmUgPSBOVUxMOwotICAgIGluX2FkZHJfdCAgIG5ldHdvcmsgPSAwLCBtYXNrID0gMDsKLQotICAgIC8qCi0gICAgICogR2V0IHNlY3VyaXR5LCBzb3VyY2UgYWRkcmVzcy9uZXRtYXNrIGFuZCBjb21tdW5pdHkgc3RyaW5ncy4gIAotICAgICAqLwotCi0gICAgY3AgPSBjb3B5X253b3JkKCBwYXJhbSwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKLSAgICBpZiAoc3RyY21wKHNlY05hbWUsICItQ24iKSA9PSAwKSB7Ci0gICAgICAgIGlmICghY3ApIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09OVEVYVF9OQU1FIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNwID0gY29weV9ud29yZCggY3AsIGNvbnRleHROYW1lLCBzaXplb2YoY29udGV4dE5hbWUpKTsKLSAgICAgICAgY3AgPSBjb3B5X253b3JkKCBjcCwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0TmFtZVswXSA9ICdcMCc7Ci0gICAgfQotICAgIGlmIChzZWNOYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBOQU1FIHBhcmFtZXRlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oc2VjTmFtZSkgPiAoVkFDTVNUUklOR0xFTiAtIDEpKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoInNlY3VyaXR5IG5hbWUgdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjcCA9IGNvcHlfbndvcmQoIGNwLCBzb3VyY2UsIHNpemVvZihzb3VyY2UpKTsKLSAgICBpZiAoc291cmNlWzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBTT1VSQ0UgcGFyYW1ldGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cm5jbXAoc291cmNlLCBFWEFNUExFX05FVFdPUkssIHN0cmxlbihFWEFNUExFX05FVFdPUkspKSA9PQotICAgICAgICAgICAgICAgMCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBORVRXT1JLIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3AgPSBjb3B5X253b3JkKCBjcCwgY29tbXVuaXR5LCBzaXplb2YoY29tbXVuaXR5KSk7Ci0gICAgaWYgKGNvbW11bml0eVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09NTVVOSVRZIHBhcmFtZXRlclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UKLSAgICAgICAgaWYgKHN0cm5jbXAKLSAgICAgICAgICAgIChjb21tdW5pdHksIEVYQU1QTEVfQ09NTVVOSVRZLCBzdHJsZW4oRVhBTVBMRV9DT01NVU5JVFkpKQotICAgICAgICAgICAgPT0gMCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKGNvbW11bml0eSkgPiAoQ09NTVVOSVRZX01BWF9MRU4gLSAxKSkgewotICAgICAgICBjb25maWdfcGVycm9yKCJjb21tdW5pdHkgbmFtZSB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBQcm9jZXNzIHRoZSBzb3VyY2UgYWRkcmVzcy9uZXRtYXNrIHN0cmluZy4gIAotICAgICAqLwotCi0gICAgY3AgPSBzdHJjaHIoc291cmNlLCAnLycpOwotICAgIGlmIChjcCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIE1hc2sgZ2l2ZW4uICAKLSAgICAgICAgICovCi0gICAgICAgICpjcCA9ICdcMCc7Ci0gICAgICAgIHN0cm1hc2sgPSBjcCArIDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBEZWFsIHdpdGggdGhlIG5ldHdvcmsgcGFydCBmaXJzdC4gIAotICAgICAqLwotCi0gICAgaWYgKChzdHJjbXAoc291cmNlLCAiZGVmYXVsdCIpID09IDApCi0gICAgICAgIHx8IChzdHJjbXAoc291cmNlLCAiMC4wLjAuMCIpID09IDApKSB7Ci0gICAgICAgIG5ldHdvcmsgPSAwOwotICAgICAgICBzdHJtYXNrID0gIjAuMC4wLjAiOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRyeSBpbnRlcnByZXRpbmcgYXMgYSBkb3R0ZWQgcXVhZC4gIAotICAgICAgICAgKi8KLSAgICAgICAgbmV0d29yayA9IGluZXRfYWRkcihzb3VyY2UpOwotCi0gICAgICAgIGlmIChuZXR3b3JrID09IChpbl9hZGRyX3QpIC0xKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogTm9wZSwgd2Fzbid0IGEgZG90dGVkIHF1YWQuICBNdXN0IGJlIGEgaG9zdG5hbWUuICAKLSAgICAgICAgICAgICAqLwotI2lmZGVmICBIQVZFX0dFVEhPU1RCWU5BTUUKLSAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IGdldGhvc3RieW5hbWUoc291cmNlKTsKLSAgICAgICAgICAgIGlmIChocCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiYmFkIHNvdXJjZSBhZGRyZXNzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVCkgewotICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJubyBJUCBhZGRyZXNzIGZvciBzb3VyY2UgaG9zdG5hbWUiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuZXR3b3JrID0gKigoaW5fYWRkcl90ICopIGhwLT5oX2FkZHIpOwotICAgICAgICAgICAgfQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKkhBVkVfR0VUSE9TVEJZTkFNRSAqLwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE9oIGRlYXIuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY2Fubm90IHJlc29sdmUgc291cmNlIGhvc3RuYW1lIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qSEFWRV9HRVRIT1NUQllOQU1FICovCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE5vdyB3b3JrIG91dCB0aGUgbWFzay4gIAotICAgICAqLwotCi0gICAgaWYgKHN0cm1hc2sgPT0gTlVMTCB8fCAqc3RybWFzayA9PSAnXDAnKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIE5vIG1hc2sgd2FzIGdpdmVuLiAgVXNlIDI1NS4yNTUuMjU1LjI1NS4gIAotICAgICAgICAgKi8KLSAgICAgICAgbWFzayA9IDB4ZmZmZmZmZmZMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdHJjaHIoc3RybWFzaywgJy4nKSkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRyeSB0byBpbnRlcnByZXQgbWFzayBhcyBhIGRvdHRlZCBxdWFkLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1hc2sgPSBpbmV0X2FkZHIoc3RybWFzayk7Ci0gICAgICAgICAgICBpZiAobWFzayA9PSAoaW5fYWRkcl90KSAtMSAmJgotICAgICAgICAgICAgICAgIHN0cm5jbXAoc3RybWFzaywgIjI1NS4yNTUuMjU1LjI1NSIsIDE1KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiYmFkIG1hc2siKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVHJ5IHRvIGludGVycHJldCBtYXNrIGFzIGEgIm51bWJlciBvZiAxIGJpdHMiLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGludCAgICAgICAgICAgICBtYXNrTGVuID0gYXRvaShzdHJtYXNrKSwgbWFza0JpdCA9IDB4ODAwMDAwMDBMOwotICAgICAgICAgICAgaWYgKG1hc2tMZW4gPD0gMCB8fCBtYXNrTGVuID4gMzIpIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgbWFzayBsZW5ndGgiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAobWFza0xlbi0tKSB7Ci0gICAgICAgICAgICAgICAgbWFzayB8PSBtYXNrQml0OwotICAgICAgICAgICAgICAgIG1hc2tCaXQgPj49IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXNrID0gaHRvbmwobWFzayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIENoZWNrIHRoYXQgdGhlIG5ldHdvcmsgYW5kIG1hc2sgYXJlIGNvbnNpc3RlbnQuICAKLSAgICAgKi8KLQotICAgIGlmIChuZXR3b3JrICYgfm1hc2spIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigic291cmNlL21hc2sgbWlzbWF0Y2giKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGUgPSAoY29tMlNlY0VudHJ5ICopIG1hbGxvYyhzaXplb2YoY29tMlNlY0VudHJ5KSk7Ci0gICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJtZW1vcnkgZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRXZlcnl0aGluZyBpcyBva2F5LiAgQ29weSB0aGUgcGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlIGFsbG9jYXRlZAotICAgICAqIGFib3ZlIGFuZCBhZGQgaXQgdG8gRU5EIG9mIHRoZSBsaXN0LiAgCi0gICAgICovCi0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHkiLAotICAgICAgICAgICAgICAgICI8XCIlc1wiLCAweCUwOHgvMHglMDh4PiA9PiBcIiVzXCJcbiIsIGNvbW11bml0eSwgbmV0d29yaywKLSAgICAgICAgICAgICAgICBtYXNrLCBzZWNOYW1lKSk7Ci0KLSAgICBzdHJjcHkoZS0+Y29udGV4dE5hbWUsIGNvbnRleHROYW1lKTsKLSAgICBzdHJjcHkoZS0+c2VjTmFtZSwgc2VjTmFtZSk7Ci0gICAgc3RyY3B5KGUtPmNvbW11bml0eSwgY29tbXVuaXR5KTsKLSAgICBlLT5uZXR3b3JrID0gbmV0d29yazsKLSAgICBlLT5tYXNrID0gbWFzazsKLSAgICBlLT5uZXh0ID0gTlVMTDsKLQotICAgIGlmIChjb20yU2VjTGlzdExhc3QgIT0gTlVMTCkgewotICAgICAgICBjb20yU2VjTGlzdExhc3QtPm5leHQgPSBlOwotICAgICAgICBjb20yU2VjTGlzdExhc3QgPSBlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbTJTZWNMaXN0TGFzdCA9IGNvbTJTZWNMaXN0ID0gZTsKLSAgICB9Ci19Ci0KLQotdm9pZAotbmV0c25tcF91ZHBfY29tMlNlY0xpc3RfZnJlZSh2b2lkKQotewotICAgIGNvbTJTZWNFbnRyeSAgICplID0gY29tMlNlY0xpc3Q7Ci0gICAgd2hpbGUgKGUgIT0gTlVMTCkgewotICAgICAgICBjb20yU2VjRW50cnkgICAqdG1wID0gZTsKLSAgICAgICAgZSA9IGUtPm5leHQ7Ci0gICAgICAgIGZyZWUodG1wKTsKLSAgICB9Ci0gICAgY29tMlNlY0xpc3QgPSBjb20yU2VjTGlzdExhc3QgPSBOVUxMOwotfQotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi0KLXZvaWQKLW5ldHNubXBfdWRwX2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCkKLXsKLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLSAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImNvbTJzZWMiLCBuZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF91ZHBfY29tMlNlY0xpc3RfZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlstQ24gQ09OVEVYVF0gc2VjTmFtZSBJUHY0LW5ldHdvcmstYWRkcmVzc1svbmV0bWFza10gY29tbXVuaXR5Iik7Ci0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLX0KLQotCi0KLS8qCi0gKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgbm8gY29tMnNlYyBlbnRyaWVzLCBvciByZXR1cm4gMSBpZiB0aGVyZSBBUkUgY29tMnNlYyAKLSAqIGVudHJpZXMuICBPbiByZXR1cm4sIGlmIGEgY29tMnNlYyBlbnRyeSBtYXRjaGVkIHRoZSBwYXNzZWQgcGFyYW1ldGVycywKLSAqIHRoZW4gKnNlY05hbWUgcG9pbnRzIGF0IHRoZSBhcHByb3ByaWF0ZSBzZWN1cml0eSBuYW1lLCBvciBpcyBOVUxMIGlmIHRoZQotICogcGFyYW1ldGVycyBkaWQgbm90IG1hdGNoIGFueSBjb20yc2VjIGVudHJ5LiAgCi0gKi8KLQotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotaW50Ci1uZXRzbm1wX3VkcF9nZXRTZWNOYW1lKHZvaWQgKm9wYXF1ZSwgaW50IG9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbW11bml0eV9sZW4sIGNoYXIgKipzZWNOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqY29udGV4dE5hbWUpCi17Ci0gICAgY29tMlNlY0VudHJ5ICAgKmM7Ci0gICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIG9wYXF1ZTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmZyb20gPSAoc3RydWN0IHNvY2thZGRyX2luICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7Ci0gICAgY2hhciAgICAgICAgICAgKnp0Y29tbXVuaXR5ID0gTlVMTDsKLQotICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgKnNlY05hbWUgPSBOVUxMOyAgLyogSGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB5ZXQgKi8KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFNwZWNpYWwgY2FzZSBpZiB0aGVyZSBhcmUgTk8gZW50cmllcyAoYXMgb3Bwb3NlZCB0byBubyBNQVRDSElORwotICAgICAqIGVudHJpZXMpLiAgCi0gICAgICovCi0KLSAgICBpZiAoY29tMlNlY0xpc3QgPT0gTlVMTCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIsICJubyBjb20yc2VjIGVudHJpZXNcbiIpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiB0aGVyZSBpcyBubyBJUHY0IHNvdXJjZSBhZGRyZXNzLCB0aGVuIHRoZXJlIGNhbiBiZSBubyB2YWxpZCBzZWN1cml0eQotICAgICAqIG5hbWUuICAKLSAgICAgKi8KLQotICAgIGlmIChvcGFxdWUgPT0gTlVMTCB8fCBvbGVuZ3RoICE9IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpIHx8Ci0gICAgICAgIGZyb20tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIsCi0JCSAgICAibm8gSVB2NCBzb3VyY2UgYWRkcmVzcyBpbiBQRFU/XG4iKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIERFQlVHSUYoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiKSB7Ci0JenRjb21tdW5pdHkgPSAoY2hhciAqKW1hbGxvYyhjb21tdW5pdHlfbGVuICsgMSk7Ci0JaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKLQkgICAgbWVtY3B5KHp0Y29tbXVuaXR5LCBjb21tdW5pdHksIGNvbW11bml0eV9sZW4pOwotCSAgICB6dGNvbW11bml0eVtjb21tdW5pdHlfbGVuXSA9ICdcMCc7Ci0JfQotCi0JREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAicmVzb2x2ZSA8XCIlc1wiLCAweCUwOGx4PlxuIiwKLQkJICAgIHp0Y29tbXVuaXR5ID8genRjb21tdW5pdHkgOiAiPG1hbGxvYyBlcnJvcj4iLAotCQkgICAgKHVuc2lnbmVkIGxvbmcpKGZyb20tPnNpbl9hZGRyLnNfYWRkcikpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGMgPSBjb20yU2VjTGlzdDsgYyAhPSBOVUxMOyBjID0gYy0+bmV4dCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIsImNvbXBhcmUgPFwiJXNcIiwgMHglMDh4LzB4JTA4eD4iLAotCQkgICAgYy0+Y29tbXVuaXR5LCBjLT5uZXR3b3JrLCBjLT5tYXNrKSk7Ci0gICAgICAgIGlmICgoY29tbXVuaXR5X2xlbiA9PSBzdHJsZW4oYy0+Y29tbXVuaXR5KSkgJiYKLQkgICAgKG1lbWNtcChjb21tdW5pdHksIGMtPmNvbW11bml0eSwgY29tbXVuaXR5X2xlbikgPT0gMCkgJiYKLSAgICAgICAgICAgICgoZnJvbS0+c2luX2FkZHIuc19hZGRyICYgYy0+bWFzaykgPT0gYy0+bmV0d29yaykpIHsKLSAgICAgICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIsICIuLi4gU1VDQ0VTU1xuIikpOwotICAgICAgICAgICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICpzZWNOYW1lID0gYy0+c2VjTmFtZTsKLSAgICAgICAgICAgICAgICAqY29udGV4dE5hbWUgPSBjLT5jb250ZXh0TmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIsICIuLi4gbm9wZVxuIikpOwotICAgIH0KLSAgICBpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHp0Y29tbXVuaXR5KTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VkcF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKLQkJCSAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCi0gICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaW4yKCZhZGRyLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkgewotICAgICAgICByZXR1cm4gbmV0c25tcF91ZHBfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdWRwX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCi0gICAgaWYgKG9fbGVuID09IDYpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydHRtcCA9IChvWzRdIDw8IDgpICsgb1s1XTsKLSAgICAgICAgYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaW5fYWRkci5zX2FkZHIpLCBvLCA0KTsKLSAgICAgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnR0bXApOwotICAgICAgICByZXR1cm4gbmV0c25tcF91ZHBfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLXZvaWQKLW5ldHNubXBfdWRwX2N0b3Iodm9pZCkKLXsKLSAgICB1ZHBEb21haW4ubmFtZSA9IG5ldHNubXBVRFBEb21haW47Ci0gICAgdWRwRG9tYWluLm5hbWVfbGVuZ3RoID0gbmV0c25tcFVEUERvbWFpbl9sZW47Ci0gICAgdWRwRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKLSAgICB1ZHBEb21haW4ucHJlZml4WzBdID0gInVkcCI7Ci0KLSAgICB1ZHBEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7Ci0gICAgdWRwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3VkcF9jcmVhdGVfdHN0cmluZzsKLSAgICB1ZHBEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfdWRwX2NyZWF0ZV9vc3RyaW5nOwotCi0gICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZ1ZHBEb21haW4pOwotfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jIGIvc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGQ3NjM1Li4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcFVEUElQdjZEb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEzOTEgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKLSAgICAvKgotICAgICAqICBXaW5kb3dzIElQdjYgc3VwcG9ydCBpcyBwYXJ0IG9mIFdpblNvY2syIG9ubHkKLSAgICAgKi8KLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jdW5kZWYgIEhBVkVfSUZfTkFNRVRPSU5ERVgKLQotZXh0ZXJuIGludCAgICAgICAgIGluZXRfcHRvbihpbnQsIGNvbnN0IGNoYXIqLCB2b2lkKik7Ci1leHRlcm4gY29uc3QgY2hhciAqaW5ldF9udG9wKGludCwgY29uc3Qgdm9pZCosIGNoYXIqLCBzaXplX3QpOwotY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfYW55ID0gSU42QUREUl9BTllfSU5JVDsKLSNlbmRpZgotCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0FSUEFfSU5FVF9ICi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVERCX0gKLSNpbmNsdWRlIDxuZXRkYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRfSUZfSAotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaWYgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX1NTX0ZBTUlMWQotI2RlZmluZSBTU19GQU1JTFkgc3NfZmFtaWx5Ci0jZWxpZiBTVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9IQVNfX19TU19GQU1JTFkKLSNkZWZpbmUgU1NfRkFNSUxZIF9fc3NfZmFtaWx5Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoZGFyd2luKQotI2luY2x1ZGUgPHN0ZGludC5oPiAvKiBmb3IgdWludDhfdCAqLwotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oPgotCi1vaWQgbmV0c25tcF9VRFBJUHY2RG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fVURQX0lQVjYgfTsKLXN0YXRpYyBuZXRzbm1wX3Rkb21haW4gdWRwNkRvbWFpbjsKLQotLyoKLSAqIGZyb20gc25tcFVEUERvbWFpbi4gbm90IHN0YXRpYywgYnV0IG5vdCBwdWJsaWMsIGVpdGhlci4KLSAqIChpZSBkb24ndCBwdXQgaXQgaW4gYSBwdWJsaWMgaGVhZGVyLikKLSAqLwotZXh0ZXJuIHZvaWQgX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KGludCBmZCwgaW50IHNlcnZlcik7Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKLSAqLwotCi1zdGF0aWMgY2hhciAqCi1uZXRzbm1wX3VkcDZfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICp0byA9IE5VTEw7Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwgImZtdGFkZHI6IHQgPSAlcCwgZGF0YSA9ICVwLCBsZW4gPSAlZFxuIiwgdCwKLSAgICAgICAgICAgICAgICBkYXRhLCBsZW4pKTsKLSAgICBpZiAoZGF0YSAhPSBOVUxMICYmIGxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkYXRhOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHQtPmRhdGE7Ci0gICAgfQotICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBzdHJkdXAoIlVEUC9JUHY2OiB1bmtub3duIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciBhZGRyW0lORVQ2X0FERFJTVFJMRU5dOwotICAgICAgICBjaGFyIHRtcFtJTkVUNl9BRERSU1RSTEVOICsgMThdOwotCi0gICAgICAgIHNwcmludGYodG1wLCAiVURQL0lQdjY6IFslc106JWh1IiwKLSAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICh2b2lkICopICYodG8tPnNpbjZfYWRkciksIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElORVQ2X0FERFJTVFJMRU4pLCBudG9ocyh0by0+c2luNl9wb3J0KSk7Ci0gICAgICAgIHJldHVybiBzdHJkdXAodG1wKTsKLSAgICB9Ci19Ci0KLQotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAotICovCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdWRwNl9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICBzb2NrbGVuX3QgICAgICAgZnJvbWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb207Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBmcm9tID0gKHN0cnVjdCBzb2NrYWRkciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgaWYgKGZyb20gPT0gTlVMTCkgewotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1zZXQoZnJvbSwgMCwgZnJvbWxlbik7Ci0gICAgICAgIH0KLQotCXdoaWxlIChyYyA8IDApIHsKLQkgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBmcm9tLCAmZnJvbWxlbik7Ci0JICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JICAgIGJyZWFrOwotCSAgfQotCX0KLQotICAgICAgICBpZiAocmMgPj0gMCkgewotCSAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcDZfZm10YWRkcihOVUxMLCBmcm9tLCBmcm9tbGVuKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLAotCQkJInJlY3Zmcm9tIGZkICVkIGdvdCAlZCBieXRlcyAoZnJvbSAlcylcbiIsIHQtPnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICByYywgc3RyKSk7Ci0gICAgICAgICAgICBmcmVlKHN0cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwgInJlY3Zmcm9tIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKLQkJCXQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgfQotICAgICAgICAqb3BhcXVlID0gKHZvaWQgKikgZnJvbTsKLSAgICAgICAgKm9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdWRwNl9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvID0gTlVMTDsKLQotICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKLSAgICAgICAgKm9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoKm9wYXF1ZSk7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCi0gICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICh0LT5kYXRhKTsKLSAgICB9Ci0KLSAgICBpZiAodG8gIT0gTlVMTCAmJiB0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdWRwNl9mbXRhZGRyKE5VTEwsICh2b2lkICopdG8sCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwgInNlbmQgJWQgYnl0ZXMgZnJvbSAlcCB0byAlcyBvbiBmZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCBzdHIsIHQtPnNvY2spKTsKLSAgICAgICAgZnJlZShzdHIpOwotCXdoaWxlIChyYyA8IDApIHsKLQkgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCB0byxzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VkcDZfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJjbG9zZSBmZCAlZFxuIiwgdC0+c29jaykpOwotI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCi0gICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7Ci0jZWxzZQotICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOwotI2VuZGlmCi0gICAgICAgIHQtPnNvY2sgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotLyoKLSAqIE9wZW4gYSBVRFAvSVB2Ni1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlCi0gKiBsb2NhbCBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UKLSAqIGFkZHIgaXMgdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91ZHA2X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLCBpbnQgbG9jYWwpCi17Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICByYyA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgKnN0ciA9IE5VTEw7Ci0KLSAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc3RyID0gbmV0c25tcF91ZHA2X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKikgYWRkciwKLQkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJvcGVuICVzICVzXG4iLCBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLSAgICAgICAgICAgICAgICBzdHIpKTsKLSAgICBmcmVlKHN0cik7Ci0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICB0LT5kb21haW4gPSBuZXRzbm1wX1VEUElQdjZEb21haW47Ci0gICAgdC0+ZG9tYWluX2xlbmd0aCA9Ci0gICAgICAgIHNpemVvZihuZXRzbm1wX1VEUElQdjZEb21haW4pIC8gc2l6ZW9mKG5ldHNubXBfVURQSVB2NkRvbWFpblswXSk7Ci0KLSAgICB0LT5zb2NrID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKLSAgICBpZiAodC0+c29jayA8IDApIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KHQtPnNvY2ssIGxvY2FsKTsKLQotICAgIGlmIChsb2NhbCkgewotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5lZGVkIGFzIGEgc2VydmVyLCBzbyB3ZSBtdXN0IGJpbmQgb24gdG8gdGhlCi0gICAgICAgICAqIGdpdmVuIElQIGFkZHJlc3MsIHdoaWNoIG1heSBpbmNsdWRlIGFuIGludGVyZmFjZSBhZGRyZXNzLCBvciBjb3VsZAotICAgICAgICAgKiBiZSBJTkFERFJfQU5ZLCBidXQgY2VydGFpbmx5IGluY2x1ZGVzIGEgcG9ydCBudW1iZXIuCi0gICAgICAgICAqLwotCi0jaWZkZWYgSVBWNl9WNk9OTFkKLSAgICAgICAgLyogVHJ5IHRvIHJlc3RyaWN0IFBGX0lORVQ2IHNvY2tldCB0byBJUHY2IGNvbW11bmljYXRpb25zIG9ubHkuICovCi0gICAgICAgIHsKLQkgIGludCBvbmU9MTsKLQkgIGlmIChzZXRzb2Nrb3B0KHQtPnNvY2ssIElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksIChjaGFyICopJm9uZSwgc2l6ZW9mKG9uZSkpICE9IDApIHsKLQkgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJjb3VsZG4ndCBzZXQgSVBWNl9WNk9OTFkgdG8gJWQgYnl0ZXM6ICVzXG4iLCBvbmUsIHN0cmVycm9yKGVycm5vKSkpOwotCSAgfSAKLQl9Ci0jZW5kaWYKLQotICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAotCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3VkcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgdC0+bG9jYWwgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDE4KTsKLSAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdWRwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+bG9jYWwsIGFkZHItPnNpbjZfYWRkci5zNl9hZGRyLCAxNik7Ci0gICAgICAgIHQtPmxvY2FsWzE2XSA9IChhZGRyLT5zaW42X3BvcnQgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPmxvY2FsWzE3XSA9IChhZGRyLT5zaW42X3BvcnQgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDE4OwotICAgICAgICB0LT5kYXRhID0gTlVMTDsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQgc2Vzc2lvbi4gIFNhdmUgdGhlIGFkZHJlc3MgaW4gdGhlCi0gICAgICAgICAqIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhIHBvaW50ZXIgZm9yIGxhdGVyIHVzZSBieSBuZXRzbm1wX3VkcDZfc2VuZC4KLSAgICAgICAgICovCi0KLSAgICAgICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3VkcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPmRhdGEsIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotICAgICAgICB0LT5yZW1vdGUgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDE4KTsKLSAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3VkcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPnJlbW90ZSwgYWRkci0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKLSAgICAgICAgdC0+cmVtb3RlWzE2XSA9IChhZGRyLT5zaW42X3BvcnQgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPnJlbW90ZVsxN10gPSAoYWRkci0+c2luNl9wb3J0ICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gMTg7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAxNi1iaXQgbGVuZ3RoIGZpZWxkLCA4IGJ5dGUgVURQIGhlYWRlciwgNDAgYnl0ZSBJUHY2IGhlYWRlci4gIAotICAgICAqLwotCi0gICAgdC0+bXNnTWF4U2l6ZSA9IDB4ZmZmZiAtIDggLSA0MDsKLSAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF91ZHA2X3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfdWRwNl9zZW5kOwotICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3VkcDZfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgICA9IE5VTEw7Ci0gICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfdWRwNl9mbXRhZGRyOwotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLQotLyoKLSAqIE5vdCBleHRlcm4gYnV0IHVzZWQgZnJvbSBoZXJlIGFuZCBzbm1wVENQSVB2NkRvbWFpbi5DCi0gKi8KLWludAotbmV0c25tcF9zb2NrYWRkcl9pbjZfMihzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBjaGFyICAgICAgICAgICAqY3AgPSBOVUxMLCAqcGVlcm5hbWUgPSBOVUxMOwotICAgIGNoYXIgICAgICAgICAgICBkZWJ1Z19hZGRyW0lORVQ2X0FERFJTVFJMRU5dOwotI2lmIEhBVkVfR0VUQUREUklORk8KLSAgICBzdHJ1Y3QgYWRkcmluZm8gKmFkZHJzID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgZXJyOwotI2VsaWYgSEFWRV9HRVRJUE5PREVCWU5BTUUKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBlcnI7Ci0jZWxpZiBIQVZFX0dFVEhPU1RCWU5BTUUKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOwotI2VuZGlmCi0gICAgaW50ICAgICAgICAgICAgIHBvcnRubzsKLQotICAgIGlmIChhZGRyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLQkJImFkZHIgJXAsIHBlZXJuYW1lIFwiJXNcIiwgZGVmYXVsdF90YXJnZXQgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgIGFkZHIsIGlucGVlcm5hbWUgPyBpbnBlZXJuYW1lIDogIltOSUxdIiwKLQkJZGVmYXVsdF90YXJnZXQgPyBkZWZhdWx0X3RhcmdldCA6ICJbTklMXSIpKTsKLQotICAgIG1lbXNldChhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgIGFkZHItPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0gICAgYWRkci0+c2luNl9hZGRyID0gaW42YWRkcl9hbnk7Ci0gICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpU05NUF9QT1JUKTsKLQotICAgIHsKLSAgICAgIGludCBwb3J0ID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLQkJCQkgICAgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUKTsKLSAgICAgIGlmIChwb3J0ICE9IDApCi0gICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKCh1X3Nob3J0KXBvcnQpOwotICAgICAgZWxzZSBpZiAoZGVmYXVsdF90YXJnZXQgIT0gTlVMTCkKLQluZXRzbm1wX3NvY2thZGRyX2luNl8yKGFkZHIsIGRlZmF1bHRfdGFyZ2V0LCBOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5wZWVybmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIER1cGxpY2F0ZSB0aGUgcGVlcm5hbWUgYmVjYXVzZSB3ZSBtaWdodCB3YW50IHRvIG1hbmsgYXJvdW5kIHdpdGgKLSAgICAgICAgICogaXQuICAKLSAgICAgICAgICovCi0KLSAgICAgICAgcGVlcm5hbWUgPSBzdHJkdXAoaW5wZWVybmFtZSk7Ci0gICAgICAgIGlmIChwZWVybmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoY3AgPSBwZWVybmFtZTsgKmNwICYmIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpICpjcCk7IGNwKyspOwotICAgICAgICBpZiAoISpjcCAmJiBhdG9pKHBlZXJuYW1lKSAhPSAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogT2theSwgaXQgbG9va3MgbGlrZSBKVVNUIGEgcG9ydCBudW1iZXIuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwgInRvdGFsbHkgbnVtZXJpYzogJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhdG9pKHBlZXJuYW1lKSkpOwotICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoYXRvaShwZWVybmFtZSkpOwotICAgICAgICAgICAgZ290byByZXNvbHZlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNlZSBpZiBpdCBpcyBhbiBJUHY2IGFkZHJlc3MgY292ZXJlZCB3aXRoIHNxdWFyZSBicmFja2V0cy4gQWxzbyBjaGVjawotICAgICAgICAgKiBmb3IgYW4gYXBwZW5kZWQgOnBvcnQuICAKLSAgICAgICAgICovCi0gICAgICAgIGlmICgqcGVlcm5hbWUgPT0gJ1snKSB7Ci0gICAgICAgICAgICBjcCA9IHN0cmNocihwZWVybmFtZSwgJ10nKTsKLSAgICAgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7Ci0JICAgICAgLyoKLQkgICAgICAgKiBTZWUgaWYgaXQgaXMgYW4gSVB2NiBsaW5rLWxvY2FsIGFkZHJlc3Mgd2l0aCBpbnRlcmZhY2UKLQkgICAgICAgKiBuYW1lIGFzIDx6b25lX2lkPiwgbGlrZSBmZTgwOjoxMjM0JWV0aDAuCi0JICAgICAgICogUGxlYXNlIHJlZmVyIHRvIHRoZSBpbnRlcm5ldCBkcmFmdCwgSVB2NiBTY29wZWQgQWRkcmVzcyBBcmNoaXRlY3R1cmUKLQkgICAgICAgKiBodHRwOi8vd3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLWlwbmd3Zy1zY29waW5nLWFyY2gtMDQudHh0Ci0JICAgICAgICoKLQkgICAgICAgKi8KLQkgICAgICAgIGNoYXIgKnNjb3BlX2lkOwotI2lmZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVgKLQkgICAgICAgIHVuc2lnbmVkIGludCBpZl9pbmRleCA9IDA7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAqY3AgPSAnXDAnOwotCQlzY29wZV9pZCA9IHN0cmNocihwZWVybmFtZSArIDEsICclJyk7Ci0JCWlmIChzY29wZV9pZCAhPSBOVUxMKSB7Ci0JCSAgICAqc2NvcGVfaWQgPSAnXDAnOwotI2lmZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVgKLQkJICAgIGlmX2luZGV4ID0gaWZfbmFtZXRvaW5kZXgoc2NvcGVfaWQgKyAxKTsKLSNlbmRpZgotCQl9Ci0gICAgICAgICAgICAgICAgaWYgKCooY3AgKyAxKSA9PSAnOicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0b2koY3AgKyAyKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmV0X3B0b24oQUZfSU5FVDYsIHBlZXJuYW1lICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmKGFkZHItPnNpbjZfYWRkcikpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQdjYgYWRkcmVzcyB3aXRoIHBvcnQgc3VmZml4IDolZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b2koY3AgKyAyKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoYXRvaShjcCArIDIpKTsKLSNpZiBkZWZpbmVkKEhBVkVfSUZfTkFNRVRPSU5ERVgpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3Njb3BlX2lkID0gaWZfaW5kZXg7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5ldF9wdG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAoQUZfSU5FVDYsIHBlZXJuYW1lICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmKGFkZHItPnNpbjZfYWRkcikpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQdjYgYWRkcmVzcyB3aXRoIHNxdWFyZSBicmFja2V0c1xuIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgcG9ydG5vID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0JCQkJICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcnRubyA8PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRubyA9IFNOTVBfUE9SVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKHBvcnRubyk7Ci0jaWYgZGVmaW5lZChIQVZFX0lGX05BTUVUT0lOREVYKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9zY29wZV9pZCA9IGlmX2luZGV4OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc29sdmVkOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCQlpZiAoc2NvcGVfaWQgIT0gTlVMTCkgewotCQkgICpzY29wZV9pZCA9ICclJzsKLQkJfQotCQkqY3AgPSAnXSc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjcCA9IHN0cnJjaHIocGVlcm5hbWUsICc6Jyk7Ci0gICAgICAgIGlmIChjcCAhPSBOVUxMKSB7Ci0JICAgIGNoYXIgKnNjb3BlX2lkOwotI2lmZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVgKLQkgICAgdW5zaWduZWQgaW50IGlmX2luZGV4ID0gMDsKLSNlbmRpZgotCSAgICAqY3AgPSAnXDAnOwotCSAgICBzY29wZV9pZCA9IHN0cmNocihwZWVybmFtZSArIDEsICclJyk7Ci0JICAgIGlmIChzY29wZV9pZCAhPSBOVUxMKSB7Ci0JICAgICAgICAqc2NvcGVfaWQgPSAnXDAnOwotI2lmZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVgKLQkgICAgICAgIGlmX2luZGV4ID0gaWZfbmFtZXRvaW5kZXgoc2NvcGVfaWQgKyAxKTsKLSNlbmRpZgotCSAgICB9Ci0gICAgICAgICAgICBpZiAoYXRvaShjcCArIDEpICE9IDAgJiYKLSAgICAgICAgICAgICAgICBpbmV0X3B0b24oQUZfSU5FVDYsIHBlZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmKGFkZHItPnNpbjZfYWRkcikpKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVB2NiBhZGRyZXNzIHdpdGggcG9ydCBzdWZmaXggOiVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b2koY3AgKyAxKSkpOwotICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKGF0b2koY3AgKyAxKSk7Ci0jaWYgZGVmaW5lZChIQVZFX0lGX05BTUVUT0lOREVYKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQotICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfc2NvcGVfaWQgPSBpZl9pbmRleDsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7Ci0gICAgICAgICAgICB9Ci0JICAgIGlmIChzY29wZV9pZCAhPSBOVUxMKSB7Ci0JICAgICAgKnNjb3BlX2lkID0gJyUnOwotCSAgICB9Ci0gICAgICAgICAgICAqY3AgPSAnOic7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTZWUgaWYgaXQgaXMgSlVTVCBhbiBJUHY2IGFkZHJlc3MuICAKLSAgICAgICAgICovCi0gICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHBlZXJuYW1lLCAodm9pZCAqKSAmKGFkZHItPnNpbjZfYWRkcikpKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLCAianVzdCBJUHY2IGFkZHJlc3NcbiIpKTsKLSAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBXZWxsLCBpdCBtdXN0IGJlIGEgaG9zdG5hbWUgdGhlbiwgcG9zc2libHkgd2l0aCBhbiBhcHBlbmRlZCA6cG9ydC4KLSAgICAgICAgICogU29ydCB0aGF0IG91dCBmaXJzdC4gIAotICAgICAgICAgKi8KLQotICAgICAgICBjcCA9IHN0cnJjaHIocGVlcm5hbWUsICc6Jyk7Ci0gICAgICAgIGlmIChjcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAqY3AgPSAnXDAnOwotICAgICAgICAgICAgaWYgKGF0b2koY3AgKyAxKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUoPykgd2l0aCBwb3J0IHN1ZmZpeCA6JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvaShjcCArIDEpKSk7Ci0gICAgICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoYXRvaShjcCArIDEpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBObyBpZGVhLCBsb29rcyBib2d1cyBidXQgd2UgbWlnaHQgYXMgd2VsbCBwYXNzIHRoZSBmdWxsIHRoaW5nIHRvCi0gICAgICAgICAgICAgICAgICogdGhlIG5hbWUgcmVzb2x2ZXIgYmVsb3cuICAKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAqY3AgPSAnOic7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUoPykgd2l0aCBlbWJlZGRlZCAnOic/XG4iKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogRmFsbCB0aHJvdWdoLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwZWVybmFtZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwgImVtcHR5IGhvc3RuYW1lXG4iKSk7Ci0gICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotI2lmIEhBVkVfR0VUQUREUklORk8KLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnQgPSB7IDAgfTsKLSAgICAgICAgICAgIGhpbnQuYWlfZmxhZ3MgPSAwOwotICAgICAgICAgICAgaGludC5haV9mYW1pbHkgPSBQRl9JTkVUNjsKLSAgICAgICAgICAgIGhpbnQuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOwotICAgICAgICAgICAgaGludC5haV9wcm90b2NvbCA9IDA7Ci0KLSAgICAgICAgICAgIGVyciA9IGdldGFkZHJpbmZvKHBlZXJuYW1lLCBOVUxMLCAmaGludCwgJmFkZHJzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJyICE9IDApIHsKLSNpZiBIQVZFX0dBSV9TVFJFUlJPUgotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImdldGFkZHJpbmZvKFwiJXNcIiwgTlVMTCwgLi4uKTogJXNcbiIsIHBlZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgZ2FpX3N0cmVycm9yKGVycikpOwotI2Vsc2UKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJnZXRhZGRyaW5mbyhcIiVzXCIsIE5VTEwsIC4uLik6IChlcnJvciAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICBwZWVybmFtZSwgZXJyKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYWRkcnMgIT0gTlVMTCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLCAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7Ci0gICAgICAgIG1lbWNweSgmYWRkci0+c2luNl9hZGRyLAotICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhZGRycy0+YWlfYWRkciktPnNpbjZfYWRkciwKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJZnJlZWFkZHJpbmZvKGFkZHJzKTsKLSAgICAgICAgfQotCQllbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwgIkZhaWxlZCB0byByZXNvbHZlIElQdjYgaG9zdG5hbWVcbiIpKTsKLQkJfQotI2VsaWYgSEFWRV9HRVRJUE5PREVCWU5BTUUKLSAgICAgICAgaHAgPSBnZXRpcG5vZGVieW5hbWUocGVlcm5hbWUsIEFGX0lORVQ2LCAwLCAmZXJyKTsKLSAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKGNvdWxkbid0IHJlc29sdmUgPSAlZClcbiIsIGVycikpOwotICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLCAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7Ci0gICAgICAgIG1lbWNweSgmKGFkZHItPnNpbjZfYWRkciksIGhwLT5oX2FkZHIsIGhwLT5oX2xlbmd0aCk7Ci0jZWxpZiBIQVZFX0dFVEhPU1RCWU5BTUUKLSAgICAgICAgaHAgPSBnZXRob3N0YnluYW1lKHBlZXJuYW1lKTsKLSAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKGNvdWxkbid0IHJlc29sdmUpXG4iKSk7Ci0gICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGhwLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQ2KSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKG5vdCBBRl9JTkVUNiEpXG4iKSk7Ci0gICAgICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOwotICAgICAgICAgICAgICAgIG1lbWNweSgmKGFkZHItPnNpbjZfYWRkciksIGhwLT5oX2FkZHIsIGhwLT5oX2xlbmd0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLypIQVZFX0dFVEhPU1RCWU5BTUUgKi8KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlcmUgaXMgbm8gbmFtZSByZXNvbHZpbmcgZnVuY3Rpb24gYXZhaWxhYmxlLiAgCi0gICAgICAgICAqLwotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAotICAgICAgICAgICAgICAgICAibm8gZ2V0YWRkcmluZm8oKS9nZXRpcG5vZGVieW5hbWUoKS9nZXRob3N0YnluYW1lKClcbiIpOwotICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qSEFWRV9HRVRIT1NUQllOQU1FICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwgIk5VTEwgcGVlcm5hbWUiKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICByZXNvbHZlZDoKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLCAicmV0dXJuIHsgQUZfSU5FVDYsIFslc106JWh1IH1cbiIsCi0gICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci0+c2luNl9hZGRyLCBkZWJ1Z19hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGVidWdfYWRkcikpLCBudG9ocyhhZGRyLT5zaW42X3BvcnQpKSk7Ci0gICAgZnJlZShwZWVybmFtZSk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLQotaW50Ci1uZXRzbm1wX3NvY2thZGRyX2luNihzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgaW50IHJlbW90ZV9wb3J0KQotewotICAgIGNoYXIgYnVmW3NpemVvZihyZW1vdGVfcG9ydCkgKiAzICsgMl07Ci0gICAgc3ByaW50ZihidWYsICI6JXUiLCByZW1vdGVfcG9ydCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfc29ja2FkZHJfaW42XzIoYWRkciwgaW5wZWVybmFtZSwgcmVtb3RlX3BvcnQgPyBidWYgOiBOVUxMKTsKLX0KLQotLyoKLSAqIGludAotICogaW5ldF9tYWtlX21hc2tfYWRkciggaW50IHBmLCB2b2lkICpkc3QsIGludCBtYXNrbGVuZ3RoICkKLSAqICAgICAgY29udmVydCBmcm9tIGJpdCBsZW5ndGggc3BlY2lmaWVkIG1hc2tsZW5ndGggdG8gbmV0d29yayBmb3JtYXQsIAotICogICAgICB3aGljaCBmaWxscyAxIGZyb20gdW50aWwgc3BlY2lmaWVkIGJpdCBsZW5ndGguCi0gKiAgICAgIGRzdCBpcyB1c2FsbHkgdGhlIHN0cnVjdGVyIG9mIHNvY2thZGRyX2luIG9yIHNvY2thZGRyX2luNi4gCi0gKiAgICAgIG1ha2VsZW5ndGggbXVzdCBiZSBhbiBpbnRlcmdlciBmcm9tIDAgdG8gMzIgaWYgcGYgaXMgUEZfSU5FVCwKLSAqICAgICAgb3IgZnJvbSAwIHRvIDEyOCBpZiBwZiBpcyBQRl9JTkVUNi4KLSAqIHJldHVybjoKLSAqICAgICAgMCBpZiB0aGUgaW5wdXQgZGF0YSwgbWFza2xlbmd0aCB3YXMgdmFsaWQgZm9yIAotICogICAgICB0aGUgc3BlY2lmaWVkIHByb3RvY29sIGZhbWlseS4KLSAqICAgICAgLTEgaWYgdGhlIHRoZSBpbnB1dCBkYXRhIHdhc24ndCB2YWxpZC4KLSAqLwotCi1pbnQKLWluZXRfbWFrZV9tYXNrX2FkZHIoaW50IHBmLCB2b2lkICpkc3QsIGludCBtYXNrbGVuZ3RoKQotewotCi0gICAgdW5zaWduZWQgbG9uZyAgIE1hc2sgPSAwOwotICAgIGludCAgICAgICAgICAgICBtYXNrQml0ID0gMHg4MDAwMDAwMEw7Ci0gICAgdW5zaWduZWQgY2hhciAgIG1hc2sgPSAwOwotICAgIHVuc2lnbmVkIGNoYXIgICBtYXNrYml0ID0gMHg4MEw7Ci0gICAgaW50ICAgICAgICAgICAgIGksIGosIGpqOwotCi0KLSAgICBzd2l0Y2ggKHBmKSB7Ci0gICAgY2FzZSBQRl9JTkVUOgotICAgICAgICBpZiAobWFza2xlbmd0aCA8IDAgfHwgbWFza2xlbmd0aCA+IDMyKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgICgoc3RydWN0IGluX2FkZHIgKikgZHN0KS0+c19hZGRyID0gMDsKLQotICAgICAgICB3aGlsZSAobWFza2xlbmd0aC0tKSB7Ci0gICAgICAgICAgICBNYXNrIHw9IG1hc2tCaXQ7Ci0gICAgICAgICAgICBtYXNrQml0ID4+PSAxOwotICAgICAgICB9Ci0gICAgICAgICgoc3RydWN0IGluX2FkZHIgKikgZHN0KS0+c19hZGRyID0gaHRvbmwoTWFzayk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBQRl9JTkVUNjoKLSAgICAgICAgaWYgKG1hc2tsZW5ndGggPCAwIHx8IG1hc2tsZW5ndGggPiAxMjgpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0KLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgICAgICAgICAgKCoodV9jaGFyICopICgmKChzdHJ1Y3QgaW42X2FkZHIgKikgZHN0KS0+czZfYWRkcltpXSkpID0gMHgwMDsKLSAgICAgICAgfQotCi0gICAgICAgIGogPSAoaW50KSBtYXNrbGVuZ3RoIC8gODsKLSAgICAgICAgamogPSBtYXNrbGVuZ3RoICUgODsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7Ci0gICAgICAgICAgICAoKih1X2NoYXIgKikgKCYoKHN0cnVjdCBpbjZfYWRkciAqKSBkc3QpLT5zNl9hZGRyW2ldKSkgPSAweGZmOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChqai0tKSB7Ci0gICAgICAgICAgICBtYXNrIHw9IG1hc2tiaXQ7Ci0gICAgICAgICAgICBtYXNrYml0ID4+PSAxOwotICAgICAgICB9Ci0KLQlpZiAoaiA8IHNpemVvZiAoKChzdHJ1Y3QgaW42X2FkZHIgKikgZHN0KS0+czZfYWRkcikpewotCSAgICAoKih1X2NoYXIgKikgKCYoKHN0cnVjdCBpbjZfYWRkciAqKSBkc3QpLT5zNl9hZGRyW2pdKSkgPSBtYXNrOwotCX0KLQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAvKiB1bnN1cHBvcnRlZCBwcm90b2NvbCBmYW1pbHkgKi8KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBpbnQKLSAqIGluZXRfYWRkcl9jb21wbGVtZW50KCBpbnQgcGYsIHZvaWQgKnNyYywgdm9pZCAqZHN0ICkKLSAqICAgICAgY29udmVydCBmcm9tIHNyYyB0byBkc3QsIHdoaWNoIGFsbCBiaXRzIAotICogICAgICBhcmUgYml0LWNvbXBsaW1lbnQgb2Ygc3JjLgotICogICAgICBTcmMsIGRzdCBhcmUgdXN1c2FsbHkgc29ja2FkZHJfaW4gb3Igc29ja2FkZHJfaW42LiAgCi0gKiByZXR1cm46Ci0gKiAgICAgIDAgaWYgdGhlIGlucHV0IGRhdGEgc3JjIGFuZCBkc3QgaGF2ZSB0aGUgc2FtZSBzaXplCi0gKiAgICAgIC0xIGlmIHRoZSB0aGUgaW5wdXQgZGF0YSB3YXNuJ3QgdmFsaWQuCi0gKi8KLQotaW50Ci1pbmV0X2FkZHJfY29tcGxlbWVudChpbnQgcGYsIHZvaWQgKnNyYywgdm9pZCAqZHN0KQotewotCi0gICAgaW50ICAgICAgICAgICAgIGk7Ci0KLSAgICBpZiAoc2l6ZW9mKHNyYykgIT0gc2l6ZW9mKGRzdCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHN3aXRjaCAocGYpIHsKLSAgICBjYXNlIFBGX0lORVQ6Ci0gICAgICAgICgoc3RydWN0IGluX2FkZHIgKikgZHN0KS0+c19hZGRyID0KLSAgICAgICAgICAgIH4oKHN0cnVjdCBpbl9hZGRyICopIHNyYyktPnNfYWRkcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQRl9JTkVUNjoKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAgICAgICAgICgqKHVfY2hhciAqKSAoJigoc3RydWN0IGluNl9hZGRyICopIGRzdCktPnM2X2FkZHJbaV0pKSA9Ci0gICAgICAgICAgICAgICAgKH4oKih1X2NoYXIgKikgKCYoKHN0cnVjdCBpbjZfYWRkciAqKSBzcmMpLT5zNl9hZGRyW2ldKSkpCi0gICAgICAgICAgICAgICAgJiAweGZmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBpbnQKLSAqIGluZXRfYWRkcl9hbmQoIGludCBwZiwgdm9pZCAqc3JjMSwgdm9pZCAqc3JjMiwgdm9pZCAqZHN0KSAKLSAqICAgICAgdGFrZSBBTkQgb3BlcmF0aW9uIG9uIHNyYzEgYW5kIHNyYzIsIGFuZCBvdXRwdXQgdGhlIHJlc3VsdCB0byBkc3QuCi0gKiAgICAgIFNyYzEsIHNyYzIsIGFuZCBkc3QgYXJlIHVzdXNhbGx5IHNvY2thZGRyX2luIG9yIHNvY2thZGRyX2luNi4gIAotICogcmV0dXJuOgotICogICAgICAwIGlmIHRoZSBpbnB1dCBkYXRhIHNyYyBhbmQgZHN0IGhhdmUgdGhlIHNhbWUgc2l6ZQotICogICAgICAtMSBpZiB0aGUgdGhlIGlucHV0IGRhdGEgYXJlIG5vdCB0aGUgc2FtZSBzaXplCi0gKi8KLQotaW50Ci1pbmV0X2FkZHJfYW5kKGludCBwZiwgdm9pZCAqc3JjMSwgdm9pZCAqc3JjMiwgdm9pZCAqZHN0KQotewotICAgIGludCAgICAgICAgICAgICBpOwotCi0gICAgaWYgKHNpemVvZihzcmMxKSAhPSBzaXplb2Yoc3JjMikgfHwgc2l6ZW9mKHNyYzIpICE9IHNpemVvZihkc3QpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBzd2l0Y2ggKHBmKSB7Ci0gICAgY2FzZSBQRl9JTkVUOgotICAgICAgICAoKHN0cnVjdCBpbl9hZGRyICopIGRzdCktPnNfYWRkciA9Ci0gICAgICAgICAgICAoKHN0cnVjdCBpbl9hZGRyICopIHNyYzEpLT5zX2FkZHIgJiAoKHN0cnVjdCBpbl9hZGRyICopIHNyYzIpLT4KLSAgICAgICAgICAgIHNfYWRkcjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBGX0lORVQ2OgotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgICAgICAgICAgKCoodV9jaGFyICopICgmKChzdHJ1Y3QgaW42X2FkZHIgKikgZHN0KS0+czZfYWRkcltpXSkpID0KLSAgICAgICAgICAgICAgICAoKih1X2NoYXIgKikgKCYoKHN0cnVjdCBpbjZfYWRkciAqKSBzcmMxKS0+czZfYWRkcltpXSkpICYKLSAgICAgICAgICAgICAgICAoKih1X2NoYXIgKikgKCYoKHN0cnVjdCBpbjZfYWRkciAqKSBzcmMyKS0+czZfYWRkcltpXSkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIGludAotICogaW5ldF9hZGRyc19jb25zaXN0ZW5jZSAoaW50IHBmLCB2b2lkICpuZXQsIHZvaWQgKm1hc2sgKSAKLSAqICAgICAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIG5ldHdvcmsgYWRkcmVzcyBuZXQgaXMgY29uc2lzdGVudAotICogICAgICB3aXRoIHRoZSBuZXRtYXNrIGFkZHJlc3MsIG1hc2suCi0gKiAgICAgIE5ldCBhbmQgbWFzayBhcmUgdXN1c2FsbHkgc29ja2FkZHJfaW4gb3Igc29ja2FkZHJfaW42LiAgCi0gKiBOb3RlOgotICogICAgICBNdXN0IHNwZWZpZXkgcHJvdG9jb2wgZmFtaWx5IGluIHBmLgotICogcmV0dXJuOgotICogICAgICAwIGlmIHRoZXJlIGlzIG5vIGNvbnNpc3RlbmNlIHdpdGggYWRkcmVzcyAibmV0IiBhbmQgIm1hc2siLgotICogICAgICAtMSBpZiBuZXR3b3JrIGFkZHJlc3MgaXMgaW5jb25zaXN0ZW50IHdpdGggbmV0bWFzayBhZGRyZXNzLCBmb3IgCi0gKiAgICAgIGluc3RhbmNlLCBuZXR3b3JrIGFkZHJlc3MgaXMgMTkyLjE2OC4wLjEyOCBpbiBzcGl0ZSBvZiBuZXRtYXNrLCAKLSAqICAgICAgd2hpY2ggaXMgMjU1LjI1NS4yNTUuMC4gCi0gKiAgICAgIFRoZSBjYXNlIHRoYXQgdGhlIHNpemUgb2YgbmV0IGFuZCBtYXNrIGFyZSBkaWZmZXJlbnQgYWxzbyByZXR1cm5zIC0xLgotICovCi0KLWludAotaW5ldF9hZGRyc19jb25zaXN0ZW5jZShpbnQgcGYsIHZvaWQgKm5ldCwgdm9pZCAqbWFzaykKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnRtcCwgKmRzdDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICp0bXA2LCAqZHN0NjsKLSAgICBpbnQgICAgICAgICAgICAgcmV0OwotCi0gICAgc3dpdGNoIChwZikgewotICAgIGNhc2UgUEZfSU5FVDoKLSAgICAgICAgdG1wID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotICAgICAgICBpZiAoIXRtcCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiUmVzb3VyY2UgZmFpbHVyZSBpbiBpbmV0X2FkZHJfY29uc2lzdGVuY2UoKSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNldCh0bXAsIDAsIHNpemVvZigqdG1wKSk7Ci0gICAgICAgIHRtcC0+c2luX2ZhbWlseSA9IFBGX0lORVQ7Ci0gICAgICAgIGlmIChpbmV0X2FkZHJfY29tcGxlbWVudAotICAgICAgICAgICAgKFBGX0lORVQsIChzdHJ1Y3QgaW5fYWRkciAqKSBtYXNrLCAmdG1wLT5zaW5fYWRkcikgIT0gMCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiRmFpbCBpbiBmdW5jdGlvbiBvZiBpbmV0X2FkZHJfY29tcGxlbWVudCgpIik7Ci0gICAgICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgZHN0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotICAgICAgICBpZiAoIWRzdCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiUmVzb3VyY2UgZmFpbHVyZSBpbiBpbmV0X2FkZHJfY29uc2lzdGVuY2UoKSIpOwotICAgICAgICAgICAgZnJlZSh0bXApOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNldChkc3QsIDAsIHNpemVvZigqZHN0KSk7Ci0gICAgICAgIGRzdC0+c2luX2ZhbWlseSA9IFBGX0lORVQ7Ci0gICAgICAgIGlmIChpbmV0X2FkZHJfYW5kCi0gICAgICAgICAgICAoUEZfSU5FVCwgKHN0cnVjdCBpbl9hZGRyICopIG5ldCwgJnRtcC0+c2luX2FkZHIsCi0gICAgICAgICAgICAgJmRzdC0+c2luX2FkZHIpICE9IDApIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIkZhaWwgaW4gZnVuY3Rpb24gb2YgaW5ldF9hZGRyX2FuZCgpIik7Ci0gICAgICAgICAgICBmcmVlKGRzdCk7Ci0gICAgICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0ID0gKChkc3QtPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSA/IDAgOiAtMSk7Ci0gICAgICAgIGZyZWUoZHN0KTsKLSAgICAgICAgZnJlZSh0bXApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBGX0lORVQ2OgotICAgICAgICB0bXA2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIGlmICghdG1wNikgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiUmVzb3VyY2UgZmFpbHVyZSBpbiBpbmV0X2FkZHJfY29uc2lzdGVuY2UoKSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNldCh0bXA2LCAwLCBzaXplb2YoKnRtcDYpKTsKLSAgICAgICAgdG1wNi0+c2luNl9mYW1pbHkgPSBQRl9JTkVUNjsKLSAgICAgICAgaWYgKGluZXRfYWRkcl9jb21wbGVtZW50Ci0gICAgICAgICAgICAoUEZfSU5FVDYsIChzdHJ1Y3QgaW42X2FkZHIgKikgbWFzaywgJnRtcDYtPnNpbjZfYWRkcikgIT0gMCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiRmFpbCBpbiBmdW5jdGlvbiBvZiBpbmV0X2FkZHJfY29tcGxlbWVudCgpIik7Ci0gICAgICAgICAgICBmcmVlKHRtcDYpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGRzdDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgaWYgKCFkc3Q2KSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJSZXNvdXJjZSBmYWlsdXJlIGluIGluZXRfYWRkcl9jb25zaXN0ZW5jZSgpIik7Ci0gICAgICAgICAgICBmcmVlKHRtcDYpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNldChkc3Q2LCAwLCBzaXplb2YoKmRzdDYpKTsKLSAgICAgICAgZHN0Ni0+c2luNl9mYW1pbHkgPSBQRl9JTkVUNjsKLSAgICAgICAgaWYgKGluZXRfYWRkcl9hbmQKLSAgICAgICAgICAgIChQRl9JTkVUNiwgKHN0cnVjdCBpbjZfYWRkciAqKSBuZXQsICZ0bXA2LT5zaW42X2FkZHIsCi0gICAgICAgICAgICAgJmRzdDYtPnNpbjZfYWRkcikpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIkZhaWwgaW4gZnVuY3Rpb24gb2YgaW5ldF9hZGRyX2FuZCgpIik7Ci0gICAgICAgICAgICBmcmVlKGRzdDYpOwotICAgICAgICAgICAgZnJlZSh0bXA2KTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICByZXQgPSAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJmRzdDYtPnNpbjZfYWRkcikgPT0gMSA/IDAgOiAtMSk7Ci0gICAgICAgIGZyZWUoZHN0Nik7Ci0gICAgICAgIGZyZWUodG1wNik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIGludAotICogbWFza2VkX2FkZHJlc3NfYXJlX2VxdWFsIChwZiwgZnJvbSwgbWFzaywgbmV0d29yaykgCi0gKiAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgQU5EIG9wZXJhdGlvbiBvbiBhZGRyZXNzICJmcm9tIiBhbmQgIm1hc2siLAotICogICAgICBhbmQgY2hlY2sgdGhlIHJlc3VsdCBpcyBlcXVhbCB0byBhZGRyZXNzICJuZXR3b3JrIi4gCi0gKiAgICAgIEZyb20sIG5ldCBhbmQgbWFzayBhcmUgdXN1c2FsbHkgc29ja2FkZHJfaW4gb3Igc29ja2FkZHJfaW42LiAgCi0gKiBOb3RlOgotICogICAgICBNdXN0IHNwZWZpZXkgcHJvdG9jb2wgZmFtaWx5IGluIHBmLgotICogcmV0dXJuOgotICogICAgICAwIGlmIGFkZHJlc3MgImZyb20iIG1hc2tlZCBieSBhZGRyZXNzICJtYXNrIiBpcyBlcWF1bCB0byAKLSAqICAgICAgYWRkcmVzcyAibmV0d29yayIuIAotICogICAgICAtMSBpZiBhZGRyZXNzICJmcm9tIiBtYXNrZWQgYnkgYWRkcmVzcyAibWFzayIgaXNuJ3QgZXFhdWwgdG8gCi0gKiAgICAgIGFkZHJlc3MgIm5ldHdvcmsiLiBGb3IgaW5zdGFuY2UsIGFkZHJlc3MgImZyb20iIGlzIAotICogICAgICAgMTkyLjE2OC4wLjEyOSBhbmQgIm1hc2siIGlzIDI1NS4yNTUuMjU1LjEyOC4gVGhlbiwgbWFza2VkIAotICogICAgICBhZGRyZXNzIGlzIDE5Mi4xNjguMC4xMjguIElmIGFkZHJlc3MgIm5ldHdvcmsiIGlzIDE5Mi4xNjguMC4xMjgsCi0gKiAgICAgIHJldHVybiAwLCBvdGhlcndpc2UgLTEuCi0gKiAgICAgIEFsc28gcmV0dW5uIC0xIGlmIGVhY2ggYWRkcmVzcyBmYW1pbHkgb2YgZnJvbSwgbWFzaywgbmV0d29yawotICogICAgICBpc24ndCB0aGUgc2FtZS4KLSAqLwotCi1pbnQKLW1hc2tlZF9hZGRyZXNzX2FyZV9lcXVhbChpbnQgYWYsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpmcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICptYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpuZXR3b3JrKQotewotCi0gICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7Ci0gICAgbWVtc2V0KCZzcywgMCwgc2l6ZW9mKHNzKSk7Ci0KLSAgICBzd2l0Y2ggKGFmKSB7Ci0gICAgY2FzZSBQRl9JTkVUOgotICAgICAgICBpZiAobWFzay0+U1NfRkFNSUxZICE9IFBGX0lORVQgfHwgbmV0d29yay0+U1NfRkFNSUxZICE9IFBGX0lORVQpIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBzcy5TU19GQU1JTFkgPSBQRl9JTkVUOwotICAgICAgICBpbmV0X2FkZHJfYW5kKFBGX0lORVQsCi0gICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luICopIGZyb20pLT5zaW5fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgbWFzayktPnNpbl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmc3MpLT5zaW5fYWRkcik7Ci0gICAgICAgIGlmICgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmc3MpLT5zaW5fYWRkci5zX2FkZHIgPT0KLSAgICAgICAgICAgICgoc3RydWN0IHNvY2thZGRyX2luICopIG5ldHdvcmspLT5zaW5fYWRkci5zX2FkZHIpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUEZfSU5FVDY6Ci0gICAgICAgIGlmIChtYXNrLT5TU19GQU1JTFkgIT0gUEZfSU5FVDYgfHwgbmV0d29yay0+U1NfRkFNSUxZICE9IFBGX0lORVQ2KSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgc3MuU1NfRkFNSUxZID0gUEZfSU5FVDY7Ci0gICAgICAgIGluZXRfYWRkcl9hbmQoUEZfSU5FVDYsCi0gICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBmcm9tKS0+c2luNl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgbWFzayktPnNpbjZfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZzcyktPnNpbjZfYWRkcik7Ci0jaWZuZGVmIElONl9BUkVfQUREUl9FUVVBTAotI2RlZmluZSBJTjZfQVJFX0FERFJfRVFVQUwoYSxiKSBJTjZfQUREUl9FUVVBTChhLGIpCi0jZW5kaWYKLSAgICAgICAgaWYgKElONl9BUkVfQUREUl9FUVVBTCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZzcyktPnNpbjZfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIG5ldHdvcmspLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW42X2FkZHIpID09IDEpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLS8qCi0gKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIHRoZSAiY29tMnNlYzYiIGNvbmZpZ3VyYXRpb24gdG9rZW4KLSAqIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbXBhdGliaWxpdHkuICAKLSAqLwotCi0jZGVmaW5lIEVYQU1QTEVfTkVUV09SSyAgICAgICAiTkVUV09SSyIKLSNkZWZpbmUgRVhBTVBMRV9DT01NVU5JVFkgICAgICJDT01NVU5JVFkiCi0KLXR5cGVkZWYgc3RydWN0IF9jb20yU2VjNkVudHJ5IHsKLSAgICBjaGFyICAgICAgICAgICAgY29tbXVuaXR5W0NPTU1VTklUWV9NQVhfTEVOXTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IG5ldHdvcms7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiBtYXNrOwotICAgIGNoYXIgICAgICAgICAgICBzZWNOYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIGNoYXIgICAgICAgICAgICBjb250ZXh0TmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBzdHJ1Y3QgX2NvbTJTZWM2RW50cnkgKm5leHQ7Ci19IGNvbTJTZWM2RW50cnk7Ci0KLWNvbTJTZWM2RW50cnkgICpjb20yU2VjNkxpc3QgPSBOVUxMLCAqY29tMlNlYzZMaXN0TGFzdCA9IE5VTEw7Ci0KLQotdm9pZAotbWVtbW92ZV9jb20yU2VjNkVudHJ5KGNvbTJTZWM2RW50cnkgKiBjLAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnNlY05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqY29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbmV0LCBzdHJ1Y3Qgc29ja2FkZHJfaW42IG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqY29udGV4dE5hbWUpCi17Ci0gICAgc25wcmludGYoYy0+c2VjTmFtZSwgc3RybGVuKHNlY05hbWUpICsgMSwgIiVzIiwgc2VjTmFtZSk7Ci0gICAgc25wcmludGYoYy0+Y29udGV4dE5hbWUsIHN0cmxlbihjb250ZXh0TmFtZSkgKyAxLCAiJXMiLCBjb250ZXh0TmFtZSk7Ci0gICAgc25wcmludGYoYy0+Y29tbXVuaXR5LCBzdHJsZW4oY29tbXVuaXR5KSArIDEsICIlcyIsIGNvbW11bml0eSk7Ci0gICAgbWVtbW92ZSgmYy0+bmV0d29yaywgJm5ldCwgc2l6ZW9mKG5ldCkpOwotICAgIG1lbW1vdmUoJmMtPm1hc2ssICZtYXNrLCBzaXplb2YobWFzaykpOwotICAgIGMtPm5leHQgPSBOVUxMOwotfQotCi0KLSNpZm5kZWYgSVBWNl9TVFJJTkdfTEVOCi0jZGVmaW5lIElQVjZfU1RSSU5HX0xFTiA1NQotI2VuZGlmCi0KLXZvaWQKLW5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqcGFyYW0pCi17Ci0gICAgY2hhciAgICAgICAgICAgIHNlY05hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIGNvbnRleHROYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIGNoYXIgICAgICAgICAgICBjb21tdW5pdHlbQ09NTVVOSVRZX01BWF9MRU5dOwotICAgIGNoYXIgICAgICAgICAgICBzb3VyY2VbSVBWNl9TVFJJTkdfTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAqY3AgPSBOVUxMLCAqc3RybmV0d29yayA9IE5VTEwsICpzdHJtYXNrID0gTlVMTDsKLSAgICBjb20yU2VjNkVudHJ5ICAqZSA9IE5VTEw7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiBuZXQsIG1hc2s7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHRtcDsKLQotICAgIG1lbXNldCgmbmV0LCAwLCBzaXplb2YobmV0KSk7Ci0gICAgbWVtc2V0KCZtYXNrLCAwLCBzaXplb2YobWFzaykpOwotICAgIG1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7Ci0gICAgbmV0LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0gICAgbWFzay5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotICAgIHRtcC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQotCi0gICAgLyoKLSAgICAgKiBHZXQgc2VjdXJpdHksIHNvdXJjZSBhZGRyZXNzL25ldG1hc2sgYW5kIGNvbW11bml0eSBzdHJpbmdzLiAgCi0gICAgICovCi0gICAgY3AgPSBjb3B5X253b3JkKCBwYXJhbSwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKLSAgICBpZiAoc3RyY21wKHNlY05hbWUsICItQ24iKSA9PSAwKSB7Ci0gICAgICAgIGlmICghY3ApIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09OVEVYVF9OQU1FIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNwID0gY29weV9ud29yZCggY3AsIGNvbnRleHROYW1lLCBzaXplb2YoY29udGV4dE5hbWUpKTsKLSAgICAgICAgY3AgPSBjb3B5X253b3JkKCBjcCwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0TmFtZVswXSA9ICdcMCc7Ci0gICAgfQotICAgIGlmIChzZWNOYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBOQU1FIHBhcmFtZXRlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oc2VjTmFtZSkgPiAoVkFDTVNUUklOR0xFTiAtIDEpKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoInNlY3VyaXR5IG5hbWUgdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjcCA9IGNvcHlfbndvcmQoIGNwLCBzb3VyY2UsIHNpemVvZihzb3VyY2UpKTsKLSAgICBpZiAoc291cmNlWzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBTT1VSQ0UgcGFyYW1ldGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cm5jbXAoc291cmNlLCBFWEFNUExFX05FVFdPUkssIHN0cmxlbihFWEFNUExFX05FVFdPUkspKSA9PQotICAgICAgICAgICAgICAgMCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBORVRXT1JLIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3AgPSBjb3B5X253b3JkKCBjcCwgY29tbXVuaXR5LCBzaXplb2YoY29tbXVuaXR5KSk7Ci0gICAgaWYgKGNvbW11bml0eVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09NTVVOSVRZIHBhcmFtZXRlclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UKLSAgICAgICAgaWYgKHN0cm5jbXAKLSAgICAgICAgICAgIChjb21tdW5pdHksIEVYQU1QTEVfQ09NTVVOSVRZLCBzdHJsZW4oRVhBTVBMRV9DT01NVU5JVFkpKQotICAgICAgICAgICAgPT0gMCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKGNvbW11bml0eSkgPiAoQ09NTVVOSVRZX01BWF9MRU4gLSAxKSkgewotICAgICAgICBjb25maWdfcGVycm9yKCJjb21tdW5pdHkgbmFtZSB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBQcm9jZXNzIHRoZSBzb3VyY2UgYWRkcmVzcy9uZXRtYXNrIHN0cmluZy4gIAotICAgICAqLwotICAgIGNwID0gc3RyY2hyKHNvdXJjZSwgJy8nKTsKLSAgICBpZiAoY3AgIT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiBNYXNrIGdpdmVuLiAgCi0gICAgICAgICAqLwotICAgICAgICAqY3AgPSAnXDAnOwotICAgICAgICBzdHJtYXNrID0gY3AgKyAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRGVhbCB3aXRoIHRoZSBuZXR3b3JrIHBhcnQgZmlyc3QuICAKLSAgICAgKi8KLSAgICBpZiAoKHN0cmNtcChzb3VyY2UsICJkZWZhdWx0IikgPT0gMCkgfHwgKHN0cmNtcChzb3VyY2UsICI6OiIpID09IDApKSB7Ci0gICAgICAgIGlmICgoc3RybmV0d29yayA9IHN0cmR1cCgiMDo6MCIpKSAhPSBOVUxMKQotCXsKLQkgICAgaWYgKChzdHJtYXNrID0gc3RyZHVwKCIwOjowIikpICE9IE5VTEwpCi0JICAgIHsKLQkKLQkJaW5ldF9wdG9uKEFGX0lORVQ2LCBzdHJuZXR3b3JrLCAmbmV0LnNpbjZfYWRkcik7Ci0JCWluZXRfcHRvbihBRl9JTkVUNiwgc3RybWFzaywgJm1hc2suc2luNl9hZGRyKTsKLQkJCi0JCWUgPSAoY29tMlNlYzZFbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKGNvbTJTZWM2RW50cnkpKTsKLQkJaWYgKGUgIT0gTlVMTCkgewotCQkgICAgbWVtbW92ZV9jb20yU2VjNkVudHJ5KGUsIHNlY05hbWUsIGNvbW11bml0eSwgbmV0LCBtYXNrLCBjb250ZXh0TmFtZSk7Ci0JCSAgICBpZiAoY29tMlNlYzZMaXN0TGFzdCAhPSBOVUxMKSB7Ci0JCQljb20yU2VjNkxpc3RMYXN0LT5uZXh0ID0gZTsKLQkJCWNvbTJTZWM2TGlzdExhc3QgPSBlOwotCQkgICAgfSBlbHNlIHsKLQkJCWNvbTJTZWM2TGlzdExhc3QgPSBjb20yU2VjNkxpc3QgPSBlOwotCQkgICAgfQotCQl9Ci0JCWVsc2UgewotCQkgICAgY29uZmlnX3BlcnJvciAoIm1lbW9yeSBlcnJvciIpOwotCQl9Ci0JCWZyZWUgKHN0cm1hc2spOwotCSAgICB9Ci0JICAgIGVsc2UgewotCQlERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5IiwKLQkJCSAgICAiQ291bGRuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeVxuIikpOwotCSAgICB9Ci0JICAgIGZyZWUgKHN0cm5ldHdvcmspOwotCX0KLQllbHNlIHsKLQkgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSIsCi0JCQkiQ291bGRuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeVxuIikpOwotCX0KLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBUcnkgaW50ZXJwcmV0aW5nIGFzIElQdjYgYWRkcmVzcy4gIAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgc291cmNlLCAmbmV0LnNpbjZfYWRkcikgPT0gMSkgewotICAgICAgICAgICAgaWYgKHN0cm1hc2sgPT0gTlVMTCB8fCAqc3RybWFzayA9PSAnXDAnKSB7Ci0gICAgICAgICAgICAgICAgaW5ldF9tYWtlX21hc2tfYWRkcihQRl9JTkVUNiwgJm1hc2suc2luNl9hZGRyLCAxMjgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY2hyKHN0cm1hc2ssICc6JykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZXRfcHRvbihQRl9JTkVUNiwgc3RybWFzaywgJm5ldC5zaW42X2FkZHIpICE9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImJhZCBtYXNrIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5ldF9tYWtlX21hc2tfYWRkcgotICAgICAgICAgICAgICAgICAgICAgICAgKFBGX0lORVQ2LCAmbWFzay5zaW42X2FkZHIsIGF0b2koc3RybWFzaykpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImJhZCBtYXNrIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBDaGVjayB0aGF0IHRoZSBuZXR3b3JrIGFuZCBtYXNrIGFyZSBjb25zaXN0ZW50LiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChpbmV0X2FkZHJzX2NvbnNpc3RlbmNlCi0gICAgICAgICAgICAgICAgKFBGX0lORVQ2LCAmbmV0LnNpbjZfYWRkciwgJm1hc2suc2luNl9hZGRyKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigic291cmNlL21hc2sgbWlzbWF0Y2giKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGUgPSAoY29tMlNlYzZFbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKGNvbTJTZWM2RW50cnkpKTsKLSAgICAgICAgICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtZW1vcnkgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBFdmVyeXRoaW5nIGlzIG9rYXkuICBDb3B5IHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkCi0gICAgICAgICAgICAgKiBhYm92ZSBhbmQgYWRkIGl0IHRvIEVORCBvZiB0aGUgbGlzdC4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoc3RybWFzayAhPSBOVUxMICYmIHN0cm5ldHdvcmsgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8XCIlc1wiLCAlcy8lcz4gPT4gXCIlc1wiXG4iLCBjb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmV0d29yaywgc3RybWFzaywgc2VjTmFtZSkpOwotICAgICAgICAgICAgICAgIGZyZWUoc3RybWFzayk7Ci0gICAgICAgICAgICAgICAgZnJlZShzdHJuZXR3b3JrKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnlcbiIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1lbW1vdmVfY29tMlNlYzZFbnRyeShlLCBzZWNOYW1lLCBjb21tdW5pdHksIG5ldCwgbWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSk7Ci0gICAgICAgICAgICBpZiAoY29tMlNlYzZMaXN0TGFzdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29tMlNlYzZMaXN0TGFzdC0+bmV4dCA9IGU7Ci0gICAgICAgICAgICAgICAgY29tMlNlYzZMaXN0TGFzdCA9IGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdExhc3QgPSBjb20yU2VjNkxpc3QgPSBlOwotICAgICAgICAgICAgfQotCi0jaWYgSEFWRV9HRVRBRERSSU5GTwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogTm9wZSwgTXVzdCBiZSBhIGhvc3RuYW1lLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpLCAqcmVzOwotICAgICAgICAgICAgY2hhciAgICAgICAgICAgIGhidWZbTklfTUFYSE9TVF07Ci0gICAgICAgICAgICBpbnQgICAgICAgICAgICAgZ2FpX2Vycm9yOwotCi0gICAgICAgICAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKLSAgICAgICAgICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX0lORVQ2OwotICAgICAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOwotICAgICAgICAgICAgaWYgKChnYWlfZXJyb3IgPSBnZXRhZGRyaW5mbyhzb3VyY2UsIE5VTEwsICZoaW50cywgJnJlcykpICE9IDApIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKGdhaV9zdHJlcnJvcihnYWlfZXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoYWkgPSByZXM7IGFpICE9IE5VTEw7IGFpID0gYWktPmFpX25leHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0bmFtZWluZm8KLSAgICAgICAgICAgICAgICAgICAgKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwgaGJ1Ziwgc2l6ZW9mKGhidWYpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgMCwgTklfTlVNRVJJQ0hPU1QpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImdldG5hbWVpbmZvIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1tb3ZlKCZuZXQsIGFpLT5haV9hZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICAgICAgICAgIGluZXRfbWFrZV9tYXNrX2FkZHIoUEZfSU5FVDYsICZtYXNrLnNpbjZfYWRkciwgMTI4KTsKLQotICAgICAgICAgICAgICAgIGUgPSAoY29tMlNlYzZFbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKGNvbTJTZWM2RW50cnkpKTsKLSAgICAgICAgICAgICAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1lbW9yeSBlcnJvciIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBFdmVyeXRoaW5nIGlzIG9rYXkuICBDb3B5IHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkCi0gICAgICAgICAgICAgICAgICogYWJvdmUgYW5kIGFkZCBpdCB0byBFTkQgb2YgdGhlIGxpc3QuICAKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPFwiJXNcIiwgJXM+ID0+IFwiJXNcIlxuIiwgY29tbXVuaXR5LCBoYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY05hbWUpKTsKLSAgICAgICAgICAgICAgICBtZW1tb3ZlX2NvbTJTZWM2RW50cnkoZSwgc2VjTmFtZSwgY29tbXVuaXR5LCBuZXQsIG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoY29tMlNlYzZMaXN0TGFzdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdExhc3QtPm5leHQgPSBlOwotICAgICAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0ID0gZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0ID0gY29tMlNlYzZMaXN0ID0gZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgZnJlZWFkZHJpbmZvKHJlcyk7Ci0KLSNlbmRpZiAvKiBIQVZFX0dFVEFERFJJTkZPICovCi0KLSAgICAgICAgfQotICAgICAgICAvKgotICAgICAgICAgKiBmcmVlKHN0cm5ldHdvcmspOyAKLSAgICAgICAgICovCi0gICAgfQotfQotCi12b2lkCi1uZXRzbm1wX3VkcDZfY29tMlNlYzZMaXN0X2ZyZWUodm9pZCkKLXsKLSAgICBjb20yU2VjNkVudHJ5ICAqZSA9IGNvbTJTZWM2TGlzdDsKLSAgICB3aGlsZSAoZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbTJTZWM2RW50cnkgICp0bXAgPSBlOwotICAgICAgICBlID0gZS0+bmV4dDsKLSAgICAgICAgZnJlZSh0bXApOwotICAgIH0KLSAgICBjb20yU2VjNkxpc3QgPSBjb20yU2VjNkxpc3RMYXN0ID0gTlVMTDsKLX0KLQotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi0KLXZvaWQKLW5ldHNubXBfdWRwNl9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpCi17Ci0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0gICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJjb20yc2VjNiIsIG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF91ZHA2X2NvbTJTZWM2TGlzdF9mcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWy1DbiBDT05URVhUXSBzZWNOYW1lIElQdjYtbmV0d29yay1hZGRyZXNzWy9uZXRtYXNrXSBjb21tdW5pdHkiKTsKLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotfQotCi0KLQotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotLyoKLSAqIFJldHVybiAwIGlmIHRoZXJlIGFyZSBubyBjb20yc2VjIGVudHJpZXMsIG9yIHJldHVybiAxIGlmIHRoZXJlIEFSRSBjb20yc2VjIAotICogZW50cmllcy4gIE9uIHJldHVybiwgaWYgYSBjb20yc2VjIGVudHJ5IG1hdGNoZWQgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLAotICogdGhlbiAqc2VjTmFtZSBwb2ludHMgYXQgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IG5hbWUsIG9yIGlzIE5VTEwgaWYgdGhlCi0gKiBwYXJhbWV0ZXJzIGRpZCBub3QgbWF0Y2ggYW55IGNvbTJzZWMgZW50cnkuICAKLSAqLwotCi1pbnQKLW5ldHNubXBfdWRwNl9nZXRTZWNOYW1lKHZvaWQgKm9wYXF1ZSwgaW50IG9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tbXVuaXR5X2xlbiwgY2hhciAqKnNlY05hbWUsIGNoYXIgKipjb250ZXh0TmFtZSkKLXsKLSAgICBjb20yU2VjNkVudHJ5ICAqYzsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpmcm9tID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgb3BhcXVlOwotICAgIGNoYXIgICAgICAgICAgICp6dGNvbW11bml0eSA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgIHN0cjZbSU5FVDZfQUREUlNUUkxFTl07Ci0KLSAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICpzZWNOYW1lID0gTlVMTDsgIC8qIEhhdmVuJ3QgZm91bmQgYW55dGhpbmcgeWV0ICovCi0gICAgfQotCi0gICAgLyoKLSAgICAgKiBTcGVjaWFsIGNhc2UgaWYgdGhlcmUgYXJlIE5PIGVudHJpZXMgKGFzIG9wcG9zZWQgdG8gbm8gTUFUQ0hJTkcKLSAgICAgKiBlbnRyaWVzKS4gIAotICAgICAqLwotCi0gICAgaWYgKGNvbTJTZWM2TGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsICJubyBjb20yc2VjIGVudHJpZXNcbiIpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiB0aGVyZSBpcyBubyBJUHY2IHNvdXJjZSBhZGRyZXNzLCAKLSAgICAgKiB0aGVuIHRoZXJlIGNhbiBiZSBubyB2YWxpZCBzZWN1cml0eSBuYW1lLiAgCi0gICAgICovCi0KLSAgICBpZiAob3BhcXVlID09IE5VTEwgfHwgb2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikKLSAgICAgICAgfHwgZnJvbS0+c2luNl9mYW1pbHkgIT0gUEZfSU5FVDYpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgIm5vIElQdjYgc291cmNlIGFkZHJlc3MgaW4gUERVP1xuIikpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICB6dGNvbW11bml0eSA9IChjaGFyICopIG1hbGxvYyhjb21tdW5pdHlfbGVuICsgMSk7Ci0gICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKLSAgICAgICAgbWVtY3B5KHp0Y29tbXVuaXR5LCBjb21tdW5pdHksIGNvbW11bml0eV9sZW4pOwotICAgICAgICB6dGNvbW11bml0eVtjb21tdW5pdHlfbGVuXSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmZnJvbS0+c2luNl9hZGRyLCBzdHI2LCBzaXplb2Yoc3RyNikpOwotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsICJyZXNvbHZlIDxcIiVzXCIsICVzPlxuIiwKLSAgICAgICAgICAgICAgICB6dGNvbW11bml0eSA/IHp0Y29tbXVuaXR5IDogIjxtYWxsb2MgZXJyb3I+Iiwgc3RyNikpOwotCi0gICAgZm9yIChjID0gY29tMlNlYzZMaXN0OyBjICE9IE5VTEw7IGMgPSBjLT5uZXh0KSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICJjb21wYXJlIDxcIiVzXCIsIDB4JTAzMngvMHglMDMyeD4iLCBjLT5jb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgIGMtPm5ldHdvcmssIGMtPm1hc2spKTsKLQotICAgICAgICBpZiAoKGNvbW11bml0eV9sZW4gPT0gKGludClzdHJsZW4oYy0+Y29tbXVuaXR5KSkgJiYKLSAgICAgICAgICAgIChtZW1jbXAoY29tbXVuaXR5LCBjLT5jb21tdW5pdHksIGNvbW11bml0eV9sZW4pID09IDApICYmCi0gICAgICAgICAgICAobWFza2VkX2FkZHJlc3NfYXJlX2VxdWFsKGZyb20tPnNpbjZfZmFtaWx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopICZjLT5tYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgJmMtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrKSA9PSAwKSkgewotICAgICAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsICIuLi4gU1VDQ0VTU1xuIikpOwotICAgICAgICAgICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICpzZWNOYW1lID0gYy0+c2VjTmFtZTsKLSAgICAgICAgICAgICAgICAqY29udGV4dE5hbWUgPSBjLT5jb250ZXh0TmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91ZHA2X2dldFNlY05hbWUiLCAiLi4uIG5vcGVcbiIpKTsKLSAgICB9Ci0gICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZSh6dGNvbW11bml0eSk7Ci0gICAgfQotICAgIHJldHVybiAxOwotfQotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdWRwNl9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKLQkJCSAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7Ci0KLSAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pbjZfMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdWRwNl90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLQotLyoKLSAqIFNlZToKLSAqIAotICogaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1vcHMtdGFkZHJlc3MtbWliLTAxLnR4dAotICogCi0gKiAob3IgbmV3ZXIgZXF1aXZhbGVudCkgZm9yIGRldGFpbHMgb2YgdGhlIFRDIHdoaWNoIHdlIGFyZSB1c2luZyBmb3IKLSAqIHRoZSBtYXBwaW5nIGhlcmUuICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VkcDZfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOwotCi0gICAgaWYgKG9fbGVuID09IDE4KSB7Ci0gICAgICAgIG1lbXNldCgodV9jaGFyICopICYgYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpbjZfYWRkci5zNl9hZGRyKSwgbywgMTYpOwotICAgICAgICBhZGRyLnNpbjZfcG9ydCA9IChvWzE2XSA8PCA4KSArIG9bMTddOwotICAgICAgICByZXR1cm4gbmV0c25tcF91ZHA2X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi12b2lkCi1uZXRzbm1wX3VkcDZfY3Rvcih2b2lkKQotewotICAgIHVkcDZEb21haW4ubmFtZSA9IG5ldHNubXBfVURQSVB2NkRvbWFpbjsKLSAgICB1ZHA2RG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfVURQSVB2NkRvbWFpbikgLyBzaXplb2Yob2lkKTsKLSAgICB1ZHA2RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOwotICAgIHVkcDZEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfdWRwNl9jcmVhdGVfdHN0cmluZzsKLSAgICB1ZHA2RG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3VkcDZfY3JlYXRlX29zdHJpbmc7Ci0gICAgdWRwNkRvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYyg1LCBzaXplb2YoY2hhciAqKSk7Ci0gICAgdWRwNkRvbWFpbi5wcmVmaXhbMF0gPSAidWRwNiI7Ci0gICAgdWRwNkRvbWFpbi5wcmVmaXhbMV0gPSAiaXB2NiI7Ci0gICAgdWRwNkRvbWFpbi5wcmVmaXhbMl0gPSAidWRwdjYiOwotICAgIHVkcDZEb21haW4ucHJlZml4WzNdID0gInVkcGlwdjYiOwotCi0gICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZ1ZHA2RG9tYWluKTsKLX0KLQotI2Vsc2UKLQotI2lmZGVmIE5FVFNOTVBfRExMCi0vKiBuZWVkIHRoaXMgaG9vayBmb3Igd2luMzIgTVNWQysrIERMTCBidWlsZCAqLwotdm9pZAotbmV0c25tcF91ZHA2X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCkKLXsgfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTiAqLwotCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBVbml4RG9tYWluLmMgYi9zbm1wbGliL3NubXBVbml4RG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNmU5NWEuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wVW5peERvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1VOX0gKLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9ETUFMTE9DX0gKLSNpbmNsdWRlIDxkbWFsbG9jLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KLQotCi0jaWZuZGVmIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTgotI2RlZmluZSBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4gIDUKLSNlbmRpZgotCi0jaWZuZGVmIFNVTl9MRU4KLS8qCi0gKiBFdmFsdWF0ZSB0byBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBgc29ja2FkZHJfdW4nIHN0cnVjdHVyZS4KLSAqLwotI2RlZmluZSBTVU5fTEVOKHB0cikgKChzaXplX3QpICgoKHN0cnVjdCBzb2NrYWRkcl91biAqKSAwKS0+c3VuX3BhdGgpICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuICgocHRyKS0+c3VuX3BhdGgpKQotI2VuZGlmCi0KLW9pZCBuZXRzbm1wX1VuaXhEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9MT0NBTCB9Owotc3RhdGljIG5ldHNubXBfdGRvbWFpbiB1bml4RG9tYWluOwotCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2UgdXNlIHRvIGhvbGQgdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgX3NvY2thZGRyX3VuX3BhaXIgewotICAgIGludCAgICAgICAgICAgICBsb2NhbDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gc2VydmVyOwotICAgIHN0cnVjdCBzb2NrYWRkcl91biBjbGllbnQ7Ci19IHNvY2thZGRyX3VuX3BhaXI7Ci0KLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4KLSAqLwotCi1zdGF0aWMgY2hhciAqCi1uZXRzbm1wX3VuaXhfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnRvID0gTlVMTDsKLQotICAgIGlmIChkYXRhICE9IE5VTEwpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX3VuICopIGRhdGE7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIHRvID0gJigoKHNvY2thZGRyX3VuX3BhaXIgKikgdC0+ZGF0YSktPnNlcnZlcik7Ci0gICAgICAgIGxlbiA9IFNVTl9MRU4odG8pOwotICAgIH0KLSAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiAiTG9jYWwgSVBDIiBpcyB0aGUgUG9zaXguMWcgdGVybSBmb3IgVW5peCBkb21haW4gcHJvdG9jb2xzLAotICAgICAgICAgKiBhY2NvcmRpbmcgdG8gVy4gUi4gU3RldmVucywgYGBVbml4IE5ldHdvcmsgUHJvZ3JhbW1pbmcgVm9sdW1lIEkKLSAgICAgICAgICogU2Vjb25kIEVkaXRpb24nJywgcC4gMzc0LgotICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiTG9jYWwgSVBDOiB1bmtub3duIik7Ci0gICAgfSBlbHNlIGlmICh0by0+c3VuX3BhdGhbMF0gPT0gMCkgewotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIGlzIGFuIGFic3RyYWN0IG5hbWUuICBXZSBjb3VsZCByZW5kZXIgaXQgYXMgaGV4IG9yIHNvbWV0aGluZwotICAgICAgICAgKiBidXQgbGV0J3Mgbm90IHdvcnJ5IGFib3V0IHRoYXQgZm9yIG5vdy4KLSAgICAgICAgICovCi0gICAgICAgIHJldHVybiBzdHJkdXAoIkxvY2FsIElQQzogYWJzdHJhY3QiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyICAgICAgICAgICAqdG1wID0gKGNoYXIgKikgbWFsbG9jKDE2ICsgbGVuKTsKLSAgICAgICAgaWYgKHRtcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcCwgIkxvY2FsIElQQzogJXMiLCB0by0+c3VuX3BhdGgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0bXA7Ci0gICAgfQotfQotCi0KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4KLSAqLwotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VuaXhfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBzb2NrbGVuX3QgICAgICAgdG9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvOwotCi0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsKLSAgICAgICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtc2V0KHRvLCAwLCB0b2xlbik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoZ2V0c29ja25hbWUodC0+c29jaywgdG8sICZ0b2xlbikgIT0gMCl7Ci0gICAgICAgICAgICBmcmVlKHRvKTsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9OwotICAgICAgICB3aGlsZSAocmMgPCAwKSB7Ci0jaWZkZWYgTVNHX0RPTlRXQUlUCi0gICAgICAgICAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgTVNHX0RPTlRXQUlULCBOVUxMLCBOVUxMKTsKLSNlbHNlCi0gICAgICAgICAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgTlVMTCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgInJlY3YgZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqb3BhcXVlID0gKHZvaWQqKXRvOwotICAgICAgICAgICAgKm9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKLSAgICAgICAgfQotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgInJlY3YgZmQgJWQgZ290ICVkIGJ5dGVzXG4iLCB0LT5zb2NrLCByYykpOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VuaXhfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAic2VuZCAlZCBieXRlcyB0byAlcCBvbiBmZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCB0LT5zb2NrKSk7Ci0gICAgICAgIHdoaWxlIChyYyA8IDApIHsKLSAgICAgICAgICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7Ci0gICAgICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF91bml4X2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIGludCByYyA9IDA7Ci0gICAgc29ja2FkZHJfdW5fcGFpciAqc3VwID0gKHNvY2thZGRyX3VuX3BhaXIgKikgdC0+ZGF0YTsKLQotICAgIGlmICh0LT5zb2NrID49IDApIHsKLSNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAotICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOwotI2Vsc2UKLSAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKLSNlbmRpZgotICAgICAgICB0LT5zb2NrID0gLTE7Ci0gICAgICAgIGlmIChzdXAgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKHN1cC0+bG9jYWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3VwLT5zZXJ2ZXIuc3VuX3BhdGhbMF0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJjbG9zZTogc2VydmVyIHVubGluayhcIiVzXCIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwLT5zZXJ2ZXIuc3VuX3BhdGgpKTsKLSAgICAgICAgICAgICAgICAgIHVubGluayhzdXAtPnNlcnZlci5zdW5fcGF0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoc3VwLT5jbGllbnQuc3VuX3BhdGhbMF0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJjbG9zZTogY2xpZW50IHVubGluayhcIiVzXCIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwLT5jbGllbnQuc3VuX3BhdGgpKTsKLSAgICAgICAgICAgICAgICAgIHVubGluayhzdXAtPmNsaWVudC5zdW5fcGF0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByYzsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF91bml4X2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZhcmVuZCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIG5ld3NvY2sgPSAtMTsKLSAgICBzb2NrbGVuX3QgICAgICAgZmFyZW5kbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bik7Ci0KLSAgICBmYXJlbmQgPSAoc3RydWN0IHNvY2thZGRyICopIG1hbGxvYyhmYXJlbmRsZW4pOwotCi0gICAgaWYgKGZhcmVuZCA9PSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEluZGljYXRlIHRoYXQgdGhlIGFjY2VwdGFuY2Ugb2YgdGhpcyBzb2NrZXQgZmFpbGVkLgotICAgICAgICAgKi8KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJhY2NlcHQ6IG1hbGxvYyBmYWlsZWRcbiIpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBtZW1zZXQoZmFyZW5kLCAwLCBmYXJlbmRsZW4pOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgbmV3c29jayA9IGFjY2VwdCh0LT5zb2NrLCBmYXJlbmQsICZmYXJlbmRsZW4pOwotCi0gICAgICAgIGlmIChuZXdzb2NrIDwgMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsImFjY2VwdCBmYWlsZWQgcmMgJWQgZXJybm8gJWQgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgZnJlZShmYXJlbmQpOwotICAgICAgICAgICAgcmV0dXJuIG5ld3NvY2s7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBmcmVlKHQtPmRhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJhY2NlcHQgc3VjY2VlZGVkIChmYXJlbmQgJXAgbGVuICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgZmFyZW5kLCAoaW50KSBmYXJlbmRsZW4pKTsKLSAgICAgICAgdC0+ZGF0YSA9IGZhcmVuZDsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKLSAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19TTkRCVUYsIDEsIDApOwotICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1JDVkJVRiwgMSwgMCk7Ci0gICAgICAgIHJldHVybiBuZXdzb2NrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZyZWUoZmFyZW5kKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotCi0KLS8qCi0gKiBPcGVuIGEgVW5peC1kb21haW4gdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZSBsb2NhbAotICogYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMKLSAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0byAoYW5kIHdlIG1ha2UgdXAgYSB0ZW1wb3JhcnkgbmFtZSBmb3IKLSAqIHRoZSBsb2NhbCBlbmQgb2YgdGhlIGNvbm5lY3Rpb24pLgotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdW5peF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX3VuICphZGRyLCBpbnQgbG9jYWwpCi17Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwotICAgIHNvY2thZGRyX3VuX3BhaXIgKnN1cCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKLSAgICBjaGFyICAgICAgICAgICAqc3RyaW5nID0gTlVMTDsKLQotICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c3VuX2ZhbWlseSAhPSBBRl9VTklYKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc3RyaW5nID0gbmV0c25tcF91bml4X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKilhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgIm9wZW4gJXMgJXNcbiIsIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAotICAgICAgICAgICAgICAgIHN0cmluZykpOwotICAgIGZyZWUoc3RyaW5nKTsKLQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfVW5peERvbWFpbjsKLSAgICB0LT5kb21haW5fbGVuZ3RoID0KLSAgICAgICAgc2l6ZW9mKG5ldHNubXBfVW5peERvbWFpbikgLyBzaXplb2YobmV0c25tcF9Vbml4RG9tYWluWzBdKTsKLQotICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKHNvY2thZGRyX3VuX3BhaXIpKTsKLSAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBtZW1zZXQodC0+ZGF0YSwgMCwgc2l6ZW9mKHNvY2thZGRyX3VuX3BhaXIpKTsKLSAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzb2NrYWRkcl91bl9wYWlyKTsKLSAgICBzdXAgPSAoc29ja2FkZHJfdW5fcGFpciAqKSB0LT5kYXRhOwotCi0gICAgdC0+c29jayA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgaWYgKHQtPnNvY2sgPCAwKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU07Ci0KLSAgICBpZiAobG9jYWwpIHsKLSAgICAgIHQtPmxvY2FsID0gKHVfY2hhciAqKW1hbGxvYyhzdHJsZW4oYWRkci0+c3VuX3BhdGgpKTsKLSAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+bG9jYWwsIGFkZHItPnN1bl9wYXRoLCBzdHJsZW4oYWRkci0+c3VuX3BhdGgpKTsKLSAgICAgICAgdC0+bG9jYWxfbGVuZ3RoID0gc3RybGVuKGFkZHItPnN1bl9wYXRoKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5lZGVkIGFzIGEgc2VydmVyLCBzbyB3ZSBtdXN0IGJpbmQgdG8gdGhlIGdpdmVuCi0gICAgICAgICAqIHBhdGggKHVubGlua2luZyBpdCBmaXJzdCwgdG8gYXZvaWQgZXJyb3JzKS4KLSAgICAgICAgICovCi0KLSAgICAgICAgdC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU47Ci0KLSAgICAgICAgdW5saW5rKGFkZHItPnN1bl9wYXRoKTsKLSAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwgU1VOX0xFTihhZGRyKSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X3RyYW5zcG9ydCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgYmluZCBcIiVzXCIsIGVycm5vICVkICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zdW5fcGF0aCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgbmV0c25tcF91bml4X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2F2ZSB0aGUgYWRkcmVzcyBpbiB0aGUgdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IgbGF0ZXIKLSAgICAgICAgICogdXNlIGJ5IG5ldHNubXBfdW5peF9jbG9zZS4KLSAgICAgICAgICovCi0KLSAgICAgICAgc3VwLT5zZXJ2ZXIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0gICAgICAgIHN0cmNweShzdXAtPnNlcnZlci5zdW5fcGF0aCwgYWRkci0+c3VuX3BhdGgpOwotICAgICAgICBzdXAtPmxvY2FsID0gMTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBOb3cgc2l0IGhlcmUgYW5kIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgdG8gYXJyaXZlLgotICAgICAgICAgKi8KLQotICAgICAgICByYyA9IGxpc3Rlbih0LT5zb2NrLCBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4pOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF90cmFuc3BvcnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGxpc3RlbiB0byBcIiVzXCIsIGVycm5vICVkICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zdW5fcGF0aCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgbmV0c25tcF91bml4X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgdC0+cmVtb3RlID0gKHVfY2hhciAqKW1hbGxvYyhzdHJsZW4oYWRkci0+c3VuX3BhdGgpKTsKLSAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPnJlbW90ZSwgYWRkci0+c3VuX3BhdGgsIHN0cmxlbihhZGRyLT5zdW5fcGF0aCkpOwotICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gc3RybGVuKGFkZHItPnN1bl9wYXRoKTsKLQotICAgICAgICByYyA9IGNvbm5lY3QodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF90cmFuc3BvcnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGNvbm5lY3QgdG8gXCIlc1wiLCBlcnJubyAlZCAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c3VuX3BhdGgsIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIG5ldHNubXBfdW5peF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNhdmUgdGhlIHJlbW90ZSBhZGRyZXNzIGluIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YSBwb2ludGVyIGZvcgotICAgICAgICAgKiBsYXRlciB1c2UgYnkgbmV0c25tcF91bml4X3NlbmQuCi0gICAgICAgICAqLwotCi0gICAgICAgIHN1cC0+c2VydmVyLnN1bl9mYW1pbHkgPSBBRl9VTklYOwotICAgICAgICBzdHJjcHkoc3VwLT5zZXJ2ZXIuc3VuX3BhdGgsIGFkZHItPnN1bl9wYXRoKTsKLSAgICAgICAgc3VwLT5sb2NhbCA9IDA7Ci0gICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fU05EQlVGLCBsb2NhbCwgMCk7Ci0gICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fUkNWQlVGLCBsb2NhbCwgMCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBNZXNzYWdlIHNpemUgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyB0cmFuc3BvcnQgKGhlbmNlIG1zZ01heFNpemUKLSAgICAgKiBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBsZWdhbCBzaXplIG9mIGFuIFNOTVAgbWVzc2FnZSkuCi0gICAgICovCi0KLSAgICB0LT5tc2dNYXhTaXplID0gMHg3ZmZmZmZmZjsKLSAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF91bml4X3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfdW5peF9zZW5kOwotICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3VuaXhfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgICA9IG5ldHNubXBfdW5peF9hY2NlcHQ7Ci0gICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfdW5peF9mbXRhZGRyOwotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdW5peF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHJpbmcsIGludCBsb2NhbCwKLQkJCSAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKLQotICAgIGlmIChzdHJpbmcgJiYgKnN0cmluZyAhPSAnXDAnKSB7Ci0gICAgfSBlbHNlIGlmIChkZWZhdWx0X3RhcmdldCAmJiAqZGVmYXVsdF90YXJnZXQgIT0gJ1wwJykgewotICAgICAgc3RyaW5nID0gZGVmYXVsdF90YXJnZXQ7Ci0gICAgfQotCi0gICAgaWYgKChzdHJpbmcgIT0gTlVMTCAmJiAqc3RyaW5nICE9ICdcMCcpICYmCi0JKHN0cmxlbihzdHJpbmcpIDwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKSkgewotICAgICAgICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOwotICAgICAgICBtZW1zZXQoYWRkci5zdW5fcGF0aCwgMCwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKLSAgICAgICAgc3RybGNweShhZGRyLnN1bl9wYXRoLCBzdHJpbmcsIHNpemVvZihhZGRyLnN1bl9wYXRoKSk7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3VuaXhfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0cmluZyAhPSBOVUxMICYmICpzdHJpbmcgIT0gJ1wwJykgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlBhdGggdG9vIGxvbmcgZm9yIFVuaXggZG9tYWluIHRyYW5zcG9ydFxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91bml4X2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOwotCi0gICAgaWYgKG9fbGVuID4gMCAmJiBvX2xlbiA8IChzaXplb2YoYWRkci5zdW5fcGF0aCkgLSAxKSkgewotICAgICAgICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOwotICAgICAgICBtZW1zZXQoYWRkci5zdW5fcGF0aCwgMCwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKLSAgICAgICAgc3RybGNweShhZGRyLnN1bl9wYXRoLCAoY29uc3QgY2hhciAqKW8sIHNpemVvZihhZGRyLnN1bl9wYXRoKSk7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3VuaXhfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG9fbGVuID4gMCkgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlBhdGggdG9vIGxvbmcgZm9yIFVuaXggZG9tYWluIHRyYW5zcG9ydFxuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotCi12b2lkCi1uZXRzbm1wX3VuaXhfY3Rvcih2b2lkKQotewotICAgIHVuaXhEb21haW4ubmFtZSA9IG5ldHNubXBfVW5peERvbWFpbjsKLSAgICB1bml4RG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfVW5peERvbWFpbikgLyBzaXplb2Yob2lkKTsKLSAgICB1bml4RG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKLSAgICB1bml4RG9tYWluLnByZWZpeFswXSA9ICJ1bml4IjsKLQotICAgIHVuaXhEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7Ci0gICAgdW5peERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF91bml4X2NyZWF0ZV90c3RyaW5nOwotICAgIHVuaXhEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfdW5peF9jcmVhdGVfb3N0cmluZzsKLQotICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdW5peERvbWFpbik7Ci19Ci0KLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLS8qIHN1cHBvcnQgZm9yIFNOTVB2MSBhbmQgU05NUHYyYyBvbiB1bml4IGRvbWFpbiovCi0KLSNkZWZpbmUgRVhBTVBMRV9DT01NVU5JVFkgIkNPTU1VTklUWSIKLXR5cGVkZWYgc3RydWN0IF9jb20yU2VjVW5peEVudHJ5IHsKLSAgICBjaGFyICAgICAgICAgICAgY29tbXVuaXR5W0NPTU1VTklUWV9NQVhfTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgc29ja3BhdGhbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bildOwotICAgIHVuc2lnbmVkIGxvbmcgICBwYXRobGVuOwotICAgIGNoYXIgICAgICAgICAgICBzZWNOYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIGNoYXIgICAgICAgICAgICBjb250ZXh0TmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBzdHJ1Y3QgX2NvbTJTZWNVbml4RW50cnkgKm5leHQ7Ci19IGNvbTJTZWNVbml4RW50cnk7Ci0KLWNvbTJTZWNVbml4RW50cnkgICAqY29tMlNlY1VuaXhMaXN0ID0gTlVMTCwgKmNvbTJTZWNVbml4TGlzdExhc3QgPSBOVUxMOwotCi0KLWludAotbmV0c25tcF91bml4X2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb21tdW5pdHlfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnNlY05hbWUsIGNoYXIgKipjb250ZXh0TmFtZSkKLXsKLSAgICBjb20yU2VjVW5peEVudHJ5ICAgKmM7Ci0gICAgc3RydWN0IHNvY2thZGRyX3VuICp0byA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4gKikgb3BhcXVlOwotICAgIGNoYXIgICAgICAgICAgICp6dGNvbW11bml0eSA9IE5VTEw7Ci0KLSAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICpzZWNOYW1lID0gTlVMTDsgIC8qIEhhdmVuJ3QgZm91bmQgYW55dGhpbmcgeWV0ICovCi0gICAgfQotCi0gICAgLyoKLSAgICAgKiBTcGVjaWFsIGNhc2UgaWYgdGhlcmUgYXJlIE5PIGVudHJpZXMgKGFzIG9wcG9zZWQgdG8gbm8gTUFUQ0hJTkcKLSAgICAgKiBlbnRyaWVzKS4KLSAgICAgKi8KLQotICAgIGlmIChjb20yU2VjVW5peExpc3QgPT0gTlVMTCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCAibm8gY29tMnNlYyBlbnRyaWVzXG4iKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qCi0gICAgICogSWYgdGhlcmUgaXMgbm8gdW5peCBzb2NrZXQgcGF0aCwgdGhlbiB0aGVyZSBjYW4gYmUgbm8gdmFsaWQgc2VjdXJpdHkKLSAgICAgKiBuYW1lLgotICAgICAqLwotCi0gICAgaWYgKG9wYXF1ZSA9PSBOVUxMIHx8IG9sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgfHwKLSAgICAgICAgdG8tPnN1bl9mYW1pbHkgIT0gQUZfVU5JWCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLAotICAgICAgICAgICAgICAgICAgICAibm8gdW5peCBkZXN0aW5lIGFkZHJlc3MgaW4gUERVP1xuIikpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBERUJVR0lGKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIpIHsKLSAgICAgICAgenRjb21tdW5pdHkgPSAoY2hhciAqKW1hbGxvYyhjb21tdW5pdHlfbGVuICsgMSk7Ci0gICAgICAgIGlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBtZW1jcHkoenRjb21tdW5pdHksIGNvbW11bml0eSwgY29tbXVuaXR5X2xlbik7Ci0gICAgICAgICAgICB6dGNvbW11bml0eVtjb21tdW5pdHlfbGVuXSA9ICdcMCc7Ci0gICAgICAgIH0KLQotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCAicmVzb2x2ZSA8XCIlc1wiPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgenRjb21tdW5pdHkgPyB6dGNvbW11bml0eSA6ICI8bWFsbG9jIGVycm9yPiIpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGMgPSBjb20yU2VjVW5peExpc3Q7IGMgIT0gTlVMTDsgYyA9IGMtPm5leHQpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwiY29tcGFyZSA8XCIlc1wiLHRvIHNvY2tldCAlcz4iLAotICAgICAgICAgICAgICAgICAgICBjLT5jb21tdW5pdHksIGMtPnNvY2twYXRoICkpOwotICAgICAgICBpZiAoKGNvbW11bml0eV9sZW4gPT0gc3RybGVuKGMtPmNvbW11bml0eSkpICYmCi0gICAgICAgICAgICAobWVtY21wKGNvbW11bml0eSwgYy0+Y29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKSA9PSAwKSAmJgotICAgICAgICAgICAgLyogY29tcGFyZSBzb2NrcGF0aCwgaWYgcGF0aGxlbiA9PSAwLCBhbHdheXMgbWF0Y2ggKi8KLSAgICAgICAgICAgIChzdHJsZW4odG8tPnN1bl9wYXRoKSA9PSBjLT5wYXRobGVuIHx8IGMtPnBhdGhsZW4gPT0gMCkgJiYKLSAgICAgICAgICAgIChtZW1jbXAodG8tPnN1bl9wYXRoLCBjLT5zb2NrcGF0aCwgYy0+cGF0aGxlbikgPT0gMCkKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIsICIuLi4gU1VDQ0VTU1xuIikpOwotICAgICAgICAgICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICpzZWNOYW1lID0gYy0+c2VjTmFtZTsKLSAgICAgICAgICAgICAgICAqY29udGV4dE5hbWUgPSBjLT5jb250ZXh0TmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCAiLi4uIG5vcGVcbiIpKTsKLSAgICB9Ci0gICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZSh6dGNvbW11bml0eSk7Ci0gICAgfQotICAgIHJldHVybiAxOwotfQotCi12b2lkCi1uZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHkoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKnBhcmFtKQotewotICAgIGNoYXIgICAgICAgICAgICAgIHNlY05hbWVbVkFDTVNUUklOR0xFTiArIDFdLCBjb21tdW5pdHlbQ09NTVVOSVRZX01BWF9MRU4gKyAxXTsKLSAgICBjaGFyICAgICAgICAgICAgICBjb250ZXh0TmFtZVtWQUNNU1RSSU5HTEVOICsgMV07Ci0gICAgY2hhciAgICAgICAgICAgICAgc29ja3BhdGhbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgKyAxXTsKLSAgICBjb20yU2VjVW5peEVudHJ5ICplID0gTlVMTDsKLQotCi0gICAgcGFyYW0gPSBjb3B5X253b3JkKHBhcmFtLCBzZWNOYW1lLCBWQUNNU1RSSU5HTEVOKTsKLSAgICBpZiAoc3RyY21wKHNlY05hbWUsICItQ24iKSA9PSAwKSB7Ci0gICAgICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIGNvbnRleHROYW1lLCBzaXplb2YoY29udGV4dE5hbWUpKTsKLSAgICAgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKLSAgICAgICAgaWYgKGNvbnRleHROYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09OVEVYVF9OQU1FIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dE5hbWVbMF0gPSAnXDAnOwotICAgIH0KLSAgICBpZiAoc2VjTmFtZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgTkFNRSBwYXJhbWV0ZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKHNlY05hbWUpID4gKFZBQ01TVFJJTkdMRU4gLSAxKSkgewotICAgICAgICBjb25maWdfcGVycm9yKCJzZWN1cml0eSBuYW1lIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAgICAgcGFyYW0gPSBjb3B5X253b3JkKHBhcmFtLCBzb2NrcGF0aCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgLSAxKTsKLSAgICBpZiAoc29ja3BhdGhbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIFNPQ0tQQVRIIHBhcmFtZXRlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oc29ja3BhdGgpID4gKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pIC0gMSkpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigic29ja3BhdGggdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBpZiBzb2NrcGF0aCA9PSAiZGVmYXVsdCIsIHNldCBwYXRobGVuPTAqLwotICAgIGlmKHN0cmNtcChzb2NrcGF0aCwgImRlZmF1bHQiKSA9PSAwKXsKLSAgICAgICAgc29ja3BhdGhbMF0gPSAwOwotICAgIH0KLQotICAgIHBhcmFtID0gY29weV9ud29yZChwYXJhbSwgY29tbXVuaXR5LCBDT01NVU5JVFlfTUFYX0xFTik7Ci0gICAgaWYgKGNvbW11bml0eVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09NTVVOSVRZIHBhcmFtZXRlclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cm5jbXAKLSAgICAgICAgICAgICAgIChjb21tdW5pdHksIEVYQU1QTEVfQ09NTVVOSVRZLCBzdHJsZW4oRVhBTVBMRV9DT01NVU5JVFkpKQotICAgICAgICAgICAgICAgPT0gMCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKGNvbW11bml0eSkgPiAoQ09NTVVOSVRZX01BWF9MRU4gLSAxKSkgewotICAgICAgICBjb25maWdfcGVycm9yKCJjb21tdW5pdHkgbmFtZSB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZSA9IChjb20yU2VjVW5peEVudHJ5ICopIG1hbGxvYyhzaXplb2YoY29tMlNlY1VuaXhFbnRyeSkpOwotICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWVtb3J5IGVycm9yIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5IiwKLSAgICAgICAgICAgICAgICAiPFwiJXNcIj4gPT4gXCIlc1wiXG4iLCBjb21tdW5pdHksIHNlY05hbWUpKTsKLQotICAgIHN0cmNweShlLT5zZWNOYW1lLCBzZWNOYW1lKTsKLSAgICBzdHJjcHkoZS0+Y29udGV4dE5hbWUsIGNvbnRleHROYW1lKTsKLSAgICBzdHJjcHkoZS0+Y29tbXVuaXR5LCBjb21tdW5pdHkpOwotICAgIHN0cmNweShlLT5zb2NrcGF0aCwgc29ja3BhdGgpOwotICAgIGUtPnBhdGhsZW4gPSBzdHJsZW4oc29ja3BhdGgpOwotICAgIGUtPm5leHQgPSBOVUxMOwotCi0gICAgaWYgKGNvbTJTZWNVbml4TGlzdExhc3QgIT0gTlVMTCkgewotICAgICAgICBjb20yU2VjVW5peExpc3RMYXN0LT5uZXh0ID0gZTsKLSAgICAgICAgY29tMlNlY1VuaXhMaXN0TGFzdCA9IGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29tMlNlY1VuaXhMaXN0TGFzdCA9IGNvbTJTZWNVbml4TGlzdCA9IGU7Ci0gICAgfQotfQotCi12b2lkCi1uZXRzbm1wX3VuaXhfY29tMlNlY0xpc3RfZnJlZSh2b2lkKQotewotICAgIGNvbTJTZWNVbml4RW50cnkgICAqZSA9IGNvbTJTZWNVbml4TGlzdDsKLSAgICB3aGlsZSAoZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbTJTZWNVbml4RW50cnkgICAqdG1wID0gZTsKLSAgICAgICAgZSA9IGUtPm5leHQ7Ci0gICAgICAgIGZyZWUodG1wKTsKLSAgICB9Ci0gICAgY29tMlNlY1VuaXhMaXN0ID0gY29tMlNlY1VuaXhMaXN0TGFzdCA9IE5VTEw7Ci19Ci0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLQotdm9pZAotbmV0c25tcF91bml4X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCkKLXsKLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLSAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImNvbTJzZWN1bml4IiwgbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VuaXhfY29tMlNlY0xpc3RfZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlstQ24gQ09OVEVYVF0gc2VjTmFtZSBzb2NrcGF0aCBjb21tdW5pdHkiKTsKLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX2FsYXJtLmMgYi9zbm1wbGliL3NubXBfYWxhcm0uYwppbmRleCBjODhmYTc1Li5hZjQ4MDBmIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfYWxhcm0uYworKysgYi9zbm1wbGliL3NubXBfYWxhcm0uYwpAQCAtMzQsMTEgKzM0LDcgQEAKICNlbmRpZgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00Nyw5ICs0Myw2IEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaWYgSEFWRV9ETUFMTE9DX0gKICNpbmNsdWRlIDxkbWFsbG9jLmg+CkBAIC04OSwzMCArODIsMjQgQEAKIHZvaWQKIHNhX3VwZGF0ZV9lbnRyeShzdHJ1Y3Qgc25tcF9hbGFybSAqYSkKIHsKLSAgICBpZiAoYS0+dF9sYXN0LnR2X3NlYyA9PSAwICYmIGEtPnRfbGFzdC50dl91c2VjID09IDApIHsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRfbm93OworICAgIGlmICghdGltZXJpc3NldCgmYS0+dF9sYXN0TSkpIHsKICAgICAgICAgLyoKLSAgICAgICAgICogTmV2ZXIgYmVlbiBjYWxsZWQgeWV0LCBjYWxsIHRpbWUgYHQnIGZyb20gbm93LiAgCisgICAgICAgICAqIEZpcnN0IGNhbGwgb2Ygc2FfdXBkYXRlX2VudHJ5KCkgZm9yIGFsYXJtIGE6IHNldCB0X2xhc3RNIGFuZCB0X25leHRNLgogICAgICAgICAgKi8KLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0X25vdywgTlVMTCk7Ci0KLSAgICAgICAgYS0+dF9sYXN0LnR2X3NlYyA9IHRfbm93LnR2X3NlYzsKLSAgICAgICAgYS0+dF9sYXN0LnR2X3VzZWMgPSB0X25vdy50dl91c2VjOwotCi0gICAgICAgIE5FVFNOTVBfVElNRVJBREQoJnRfbm93LCAmYS0+dCwgJmEtPnRfbmV4dCk7Ci0gICAgfSBlbHNlIGlmIChhLT50X25leHQudHZfc2VjID09IDAgJiYgYS0+dF9uZXh0LnR2X3VzZWMgPT0gMCkgeworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJmEtPnRfbGFzdE0pOworICAgICAgICBORVRTTk1QX1RJTUVSQUREKCZhLT50X2xhc3RNLCAmYS0+dCwgJmEtPnRfbmV4dE0pOworICAgIH0gZWxzZSBpZiAoIXRpbWVyaXNzZXQoJmEtPnRfbmV4dE0pKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFdlJ3ZlIGJlZW4gY2FsbGVkIGJ1dCBub3QgcmVzZXQgZm9yIHRoZSBuZXh0IGNhbGwuICAKICAgICAgICAgICovCiAgICAgICAgIGlmIChhLT5mbGFncyAmIFNBX1JFUEVBVCkgewotICAgICAgICAgICAgaWYgKGEtPnQudHZfc2VjID09IDAgJiYgYS0+dC50dl91c2VjID09IDApIHsKKyAgICAgICAgICAgIGlmICh0aW1lcmlzc2V0KCZhLT50KSkgeworICAgICAgICAgICAgICAgIE5FVFNOTVBfVElNRVJBREQoJmEtPnRfbGFzdE0sICZhLT50LCAmYS0+dF9uZXh0TSk7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXBkYXRlX2VudHJ5OiBpbGxlZ2FsIGludGVydmFsIHNwZWNpZmllZFxuIikpOwogICAgICAgICAgICAgICAgIHNubXBfYWxhcm1fdW5yZWdpc3RlcihhLT5jbGllbnRyZWcpOwotICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTkVUU05NUF9USU1FUkFERCgmYS0+dF9sYXN0LCAmYS0+dCwgJmEtPnRfbmV4dCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogU2luZ2xlIHRpbWUgY2FsbCwgcmVtb3ZlIGl0LiAgCkBAIC0xNTEsNyArMTM4LDcgQEAKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAidW5yZWdpc3RlcmVkIGFsYXJtICVkXG4iLCAKIAkJICAgIHNhX3B0ci0+Y2xpZW50cmVnKSk7CiAgICAgICAgIC8qCi0gICAgICAgICAqIE5vdGU6ICBkbyBub3QgZnJlZSB0aGUgY2xpZW50YXJnLCBpdHMgdGhlIGNsaWVudHMgcmVzcG9uc2liaWxpdHkgCisgICAgICAgICAqIE5vdGU6IGRvIG5vdCBmcmVlIHRoZSBjbGllbnRhcmcsIGl0J3MgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IAogICAgICAgICAgKi8KICAgICAgICAgZnJlZShzYV9wdHIpOwogICAgIH0gZWxzZSB7CkBAIC0xODUsMzEgKzE3MiwxNiBAQAogc2FfZmluZF9uZXh0KHZvaWQpCiB7CiAgICAgc3RydWN0IHNubXBfYWxhcm0gKmEsICpsb3dlc3QgPSBOVUxMOwotICAgIHN0cnVjdCB0aW1ldmFsICB0X25vdzsKIAotICAgIGdldHRpbWVvZmRheSgmdF9ub3csIE5VTEwpOworICAgIGZvciAoYSA9IHRoZWFsYXJtczsgYSAhPSBOVUxMOyBhID0gYS0+bmV4dCkKKyAgICAgICAgaWYgKCEoYS0+ZmxhZ3MgJiBTQV9GSVJFRCkKKyAgICAgICAgICAgICYmIChsb3dlc3QgPT0gTlVMTCB8fCB0aW1lcmNtcCgmYS0+dF9uZXh0TSwgJmxvd2VzdC0+dF9uZXh0TSwgPCkpKQorICAgICAgICAgICAgbG93ZXN0ID0gYTsKIAotICAgIGZvciAoYSA9IHRoZWFsYXJtczsgYSAhPSBOVUxMOyBhID0gYS0+bmV4dCkgewotICAgICAgICAvKiBjaGVjayBmb3IgdGltZSBkZWx0YSBza2V3ICovCi0gICAgICAgIGlmICgoYS0+dF9uZXh0LnR2X3NlYyAtIHRfbm93LnR2X3NlYykgPiBhLT50LnR2X3NlYykKLSAgICAgICAgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInRpbWVfc2tldyIsICJUaW1lIGRlbHRhIHRvbyBiaWcgKCVkIHNlY29uZHMpLCBzaG91bGQgYmUgJWQgc2Vjb25kcyAtIGZpeGluZ1xuIiwgKGEtPnRfbmV4dC50dl9zZWMgLSB0X25vdy50dl9zZWMpLCBhLT50LnR2X3NlYykpOwotICAgICAgICAgICAgYS0+dF9uZXh0LnR2X3NlYyA9IHRfbm93LnR2X3NlYyArIGEtPnQudHZfc2VjOwotICAgICAgICAgICAgYS0+dF9uZXh0LnR2X3VzZWMgPSB0X25vdy50dl91c2VjICsgYS0+dC50dl91c2VjOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsb3dlc3QgPT0gTlVMTCkgewotICAgICAgICAgICAgbG93ZXN0ID0gYTsKLSAgICAgICAgfSBlbHNlIGlmIChhLT50X25leHQudHZfc2VjID09IGxvd2VzdC0+dF9uZXh0LnR2X3NlYykgewotICAgICAgICAgICAgaWYgKGEtPnRfbmV4dC50dl91c2VjIDwgbG93ZXN0LT50X25leHQudHZfdXNlYykgewotICAgICAgICAgICAgICAgIGxvd2VzdCA9IGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYS0+dF9uZXh0LnR2X3NlYyA8IGxvd2VzdC0+dF9uZXh0LnR2X3NlYykgewotICAgICAgICAgICAgbG93ZXN0ID0gYTsKLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gbG93ZXN0OwogfQogCitORVRTTk1QX0lNUE9SVCBzdHJ1Y3Qgc25tcF9hbGFybSAqc2FfZmluZF9zcGVjaWZpYyh1bnNpZ25lZCBpbnQgY2xpZW50cmVnKTsKIHN0cnVjdCBzbm1wX2FsYXJtICoKIHNhX2ZpbmRfc3BlY2lmaWModW5zaWduZWQgaW50IGNsaWVudHJlZykKIHsKQEAgLTIyNSw4ICsxOTcsNyBAQAogdm9pZAogcnVuX2FsYXJtcyh2b2lkKQogewotICAgIGludCAgICAgICAgICAgICBkb25lID0gMDsKLSAgICBzdHJ1Y3Qgc25tcF9hbGFybSAqYSA9IE5VTEw7CisgICAgc3RydWN0IHNubXBfYWxhcm0gKmE7CiAgICAgdW5zaWduZWQgaW50ICAgIGNsaWVudHJlZzsKICAgICBzdHJ1Y3QgdGltZXZhbCAgdF9ub3c7CiAKQEAgLTIzNSwzMSArMjA2LDI3IEBACiAgICAgICogY2FsbCB1bnRpbCBhbGwgZXZlbnRzIGFyZSBmaW5hbGx5IGluIHRoZSBmdXR1cmUgYWdhaW4uICAKICAgICAgKi8KIAotICAgIHdoaWxlICghZG9uZSkgewotICAgICAgICBpZiAoKGEgPSBzYV9maW5kX25leHQoKSkgPT0gTlVMTCkgeworICAgIHdoaWxlICgoYSA9IHNhX2ZpbmRfbmV4dCgpKSAhPSBOVUxMKSB7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdF9ub3cpOworCisgICAgICAgIGlmICh0aW1lcmNtcCgmYS0+dF9uZXh0TSwgJnRfbm93LCA+KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogCi0gICAgICAgIGdldHRpbWVvZmRheSgmdF9ub3csIE5VTEwpOworICAgICAgICBjbGllbnRyZWcgPSBhLT5jbGllbnRyZWc7CisgICAgICAgIGEtPmZsYWdzIHw9IFNBX0ZJUkVEOworICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJydW4gYWxhcm0gJWRcbiIsIGNsaWVudHJlZykpOworICAgICAgICAoKihhLT50aGVjYWxsYmFjaykpIChjbGllbnRyZWcsIGEtPmNsaWVudGFyZyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgImFsYXJtICVkIGNvbXBsZXRlZFxuIiwgY2xpZW50cmVnKSk7CiAKLSAgICAgICAgaWYgKHRpbWVyY21wKCZhLT50X25leHQsICZ0X25vdywgPCkpIHsKLSAgICAgICAgICAgIGNsaWVudHJlZyA9IGEtPmNsaWVudHJlZzsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgInJ1biBhbGFybSAlZFxuIiwgY2xpZW50cmVnKSk7Ci0gICAgICAgICAgICAoKihhLT50aGVjYWxsYmFjaykpIChjbGllbnRyZWcsIGEtPmNsaWVudGFyZyk7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJhbGFybSAlZCBjb21wbGV0ZWRcbiIsIGNsaWVudHJlZykpOwotCi0gICAgICAgICAgICBpZiAoKGEgPSBzYV9maW5kX3NwZWNpZmljKGNsaWVudHJlZykpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBhLT50X2xhc3QudHZfc2VjID0gdF9ub3cudHZfc2VjOwotICAgICAgICAgICAgICAgIGEtPnRfbGFzdC50dl91c2VjID0gdF9ub3cudHZfdXNlYzsKLSAgICAgICAgICAgICAgICBhLT50X25leHQudHZfc2VjID0gMDsKLSAgICAgICAgICAgICAgICBhLT50X25leHQudHZfdXNlYyA9IDA7Ci0gICAgICAgICAgICAgICAgc2FfdXBkYXRlX2VudHJ5KGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJhbGFybSAlZCBkZWxldGVkIGl0c2VsZlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRyZWcpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgYSA9IHNhX2ZpbmRfc3BlY2lmaWMoY2xpZW50cmVnKTsKKyAgICAgICAgaWYgKGEpIHsKKyAgICAgICAgICAgIGEtPnRfbGFzdE0gPSB0X25vdzsKKyAgICAgICAgICAgIHRpbWVyY2xlYXIoJmEtPnRfbmV4dE0pOworICAgICAgICAgICAgYS0+ZmxhZ3MgJj0gflNBX0ZJUkVEOworICAgICAgICAgICAgc2FfdXBkYXRlX2VudHJ5KGEpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJhbGFybSAlZCBkZWxldGVkIGl0c2VsZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudHJlZykpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjc1LDM5ICsyNDIsNTYgQEAKIAogCiAKKy8qKgorICogTG9vayB1cCB0aGUgdGltZSBhdCB3aGljaCB0aGUgbmV4dCBhbGFybSB3aWxsIGZpcmUuCisgKgorICogQHBhcmFtW291dF0gYWxhcm1fdG0gVGltZSBhdCB3aGljaCB0aGUgbmV4dCBhbGFybSB3aWxsIGZpcmUuCisgKiBAcGFyYW1baW5dIG5vdyBFYXJsaWVzdCB0aW1lIHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4gaW50byAqYWxhcm1fdG0uCisgKgorICogQHJldHVybiBaZXJvIGlmIG5vIGFsYXJtcyBhcmUgc2NoZWR1bGVkOyBub24temVybyAnY2xpZW50cmVnJyB2YWx1ZQorICogICBpZGVudGlmeWluZyB0aGUgZmlyc3QgYWxhcm0gdGhhdCB3aWxsIGZpcmUgaWYgb25lIG9yIG1vcmUgYWxhcm1zIGFyZQorICogICBzY2hlZHVsZWQuCisgKi8KIGludAotZ2V0X25leHRfYWxhcm1fZGVsYXlfdGltZShzdHJ1Y3QgdGltZXZhbCAqZGVsdGEpCituZXRzbm1wX2dldF9uZXh0X2FsYXJtX3RpbWUoc3RydWN0IHRpbWV2YWwgKmFsYXJtX3RtLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqbm93KQogewogICAgIHN0cnVjdCBzbm1wX2FsYXJtICpzYV9wdHI7Ci0gICAgc3RydWN0IHRpbWV2YWwgIHRfbm93OwogCiAgICAgc2FfcHRyID0gc2FfZmluZF9uZXh0KCk7CiAKICAgICBpZiAoc2FfcHRyKSB7Ci0gICAgICAgIGdldHRpbWVvZmRheSgmdF9ub3csIDApOwotCi0gICAgICAgIGlmICh0aW1lcmNtcCgmdF9ub3csICZzYV9wdHItPnRfbmV4dCwgPikpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaW1lIGhhcyBhbHJlYWR5IHBhc3NlZC4gIFJldHVybiB0aGUgc21hbGxlc3QgcG9zc2libGUgYW1vdW50IG9mCi0gICAgICAgICAgICAgKiB0aW1lLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRlbHRhLT50dl9zZWMgPSAwOwotICAgICAgICAgICAgZGVsdGEtPnR2X3VzZWMgPSAxOwotICAgICAgICAgICAgcmV0dXJuIHNhX3B0ci0+Y2xpZW50cmVnOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRpbWUgaXMgc3RpbGwgaW4gdGhlIGZ1dHVyZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBORVRTTk1QX1RJTUVSU1VCKCZzYV9wdHItPnRfbmV4dCwgJnRfbm93LCBkZWx0YSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzYV9wdHItPmNsaWVudHJlZzsKLSAgICAgICAgfQorICAgICAgICBuZXRzbm1wX2Fzc2VydChhbGFybV90bSk7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KHRpbWVyaXNzZXQoJnNhX3B0ci0+dF9uZXh0TSkpOworICAgICAgICBpZiAodGltZXJjbXAoJnNhX3B0ci0+dF9uZXh0TSwgbm93LCA+KSkKKyAgICAgICAgICAgICphbGFybV90bSA9IHNhX3B0ci0+dF9uZXh0TTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmFsYXJtX3RtID0gKm5vdzsKKyAgICAgICAgcmV0dXJuIHNhX3B0ci0+Y2xpZW50cmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KK30KIAotICAgIC8qCi0gICAgICogTm90aGluZyBMZWZ0LiAgCi0gICAgICovCi0gICAgcmV0dXJuIDA7CisvKioKKyAqIEdldCB0aGUgdGltZSB1bnRpbCB0aGUgbmV4dCBhbGFybSB3aWxsIGZpcmUuCisgKgorICogQHBhcmFtW291dF0gZGVsdGEgVGltZSB1bnRpbCB0aGUgbmV4dCBhbGFybS4KKyAqCisgKiBAcmV0dXJuIFplcm8gaWYgbm8gYWxhcm1zIGFyZSBzY2hlZHVsZWQ7IG5vbi16ZXJvICdjbGllbnRyZWcnIHZhbHVlCisgKiAgIGlkZW50aWZ5aW5nIHRoZSBmaXJzdCBhbGFybSB0aGF0IHdpbGwgZmlyZSBpZiBvbmUgb3IgbW9yZSBhbGFybXMgYXJlCisgKiAgIHNjaGVkdWxlZC4KKyAqLworaW50CitnZXRfbmV4dF9hbGFybV9kZWxheV90aW1lKHN0cnVjdCB0aW1ldmFsICpkZWx0YSkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCB0X25vdywgYWxhcm1fdG07CisgICAgaW50IHJlczsKKworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdF9ub3cpOworICAgIHJlcyA9IG5ldHNubXBfZ2V0X25leHRfYWxhcm1fdGltZSgmYWxhcm1fdG0sICZ0X25vdyk7CisgICAgaWYgKHJlcykKKyAgICAgICAgTkVUU05NUF9USU1FUlNVQigmYWxhcm1fdG0sICZ0X25vdywgZGVsdGEpOworICAgIHJldHVybiByZXM7CiB9CiAKIApAQCAtMzI5LDIxICszMTMsMTkgQEAKICMgaWZkZWYgSEFWRV9TRVRJVElNRVIKICAgICAgICAgc3RydWN0IGl0aW1lcnZhbCBpdDsKIAotICAgICAgICBpdC5pdF92YWx1ZS50dl9zZWMgPSBkZWx0YS50dl9zZWM7Ci0gICAgICAgIGl0Lml0X3ZhbHVlLnR2X3VzZWMgPSBkZWx0YS50dl91c2VjOwotICAgICAgICBpdC5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOwotICAgICAgICBpdC5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKKyAgICAgICAgaXQuaXRfdmFsdWUgPSBkZWx0YTsKKyAgICAgICAgdGltZXJjbGVhcigmaXQuaXRfaW50ZXJ2YWwpOwogCiAgICAgICAgIHNpZ25hbChTSUdBTFJNLCBhbGFybV9oYW5kbGVyKTsKICAgICAgICAgc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmaXQsIE5VTEwpOwotICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJzY2hlZHVsZSBhbGFybSAlZCBpbiAlZC4lMDNkIHNlY29uZHNcbiIsCi0gICAgICAgICAgICAgICAgICAgIG5leHRhbGFybSwgZGVsdGEudHZfc2VjLCAoZGVsdGEudHZfdXNlYyAvIDEwMDApKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgInNjaGVkdWxlIGFsYXJtICVkIGluICVsZC4lMDNsZCBzZWNvbmRzXG4iLAorICAgICAgICAgICAgICAgICAgICBuZXh0YWxhcm0sIChsb25nKSBkZWx0YS50dl9zZWMsIChsb25nKShkZWx0YS50dl91c2VjIC8gMTAwMCkpKTsKICMgZWxzZSAgLyogSEFWRV9TRVRJVElNRVIgKi8KICMgIGlmZGVmIFNJR0FMUk0KICAgICAgICAgc2lnbmFsKFNJR0FMUk0sIGFsYXJtX2hhbmRsZXIpOwogICAgICAgICBhbGFybShkZWx0YS50dl9zZWMpOwogICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsCi0gICAgICAgICAgICAgICAgICAgICJzY2hlZHVsZSBhbGFybSAlZCBpbiByb3VnaGx5ICVkIHNlY29uZHNcbiIsIG5leHRhbGFybSwKKyAgICAgICAgICAgICAgICAgICAgInNjaGVkdWxlIGFsYXJtICVkIGluIHJvdWdobHkgJWxkIHNlY29uZHNcbiIsIG5leHRhbGFybSwKICAgICAgICAgICAgICAgICAgICAgZGVsdGEudHZfc2VjKSk7CiAjICBlbmRpZiAgLyogU0lHQUxSTSAqLwogIyBlbmRpZiAgLyogSEFWRV9TRVRJVElNRVIgKi8KQEAgLTM3NCw3ICszNTYsNyBAQAogICoKICAqIEBwYXJhbSBjbGllbnRhcmcgaXMgYSB2b2lkIHBvaW50ZXIgdXNlZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uICBUaGlzIAogICoJcG9pbnRlciBpcyBhc3NpZ25lZCB0byBzbm1wX2FsYXJtLT5jbGllbnRhcmcgYW5kIHBhc3NlZCBpbnRvIHRoZQotICoJY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBjbGllbnQncyBzcGVjaWZjIG5lZWRzLgorICoJY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBjbGllbnQncyBzcGVjaWZpYyBuZWVkcy4KICAqCiAgKiBAcmV0dXJuIFJldHVybnMgYSB1bmlxdWUgdW5zaWduZWQgaW50ZWdlcih3aGljaCBpcyBhbHNvIHBhc3NlZCBhcyB0aGUgZmlyc3QgCiAgKglhcmd1bWVudCBvZiBlYWNoIGNhbGxiYWNrKSwgd2hpY2ggY2FuIHRoZW4gYmUgdXNlZCB0byByZW1vdmUgdGhlCkBAIC0zOTAsNDAgKzM3MiwxNyBAQAogc25tcF9hbGFybV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgd2hlbiwgdW5zaWduZWQgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICBTTk1QQWxhcm1DYWxsYmFjayAqIHRoZWNhbGxiYWNrLCB2b2lkICpjbGllbnRhcmcpCiB7Ci0gICAgc3RydWN0IHNubXBfYWxhcm0gKipzYV9wcHRyOwotICAgIGlmICh0aGVhbGFybXMgIT0gTlVMTCkgewotICAgICAgICBmb3IgKHNhX3BwdHIgPSAmdGhlYWxhcm1zOyAoKnNhX3BwdHIpICE9IE5VTEw7Ci0gICAgICAgICAgICAgc2FfcHB0ciA9ICYoKCpzYV9wcHRyKS0+bmV4dCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNhX3BwdHIgPSAmdGhlYWxhcm1zOwotICAgIH0KLQotICAgICpzYV9wcHRyID0gU05NUF9NQUxMT0NfU1RSVUNUKHNubXBfYWxhcm0pOwotICAgIGlmICgqc2FfcHB0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKKyAgICBzdHJ1Y3QgdGltZXZhbCAgdDsKIAogICAgIGlmICgwID09IHdoZW4pIHsKLSAgICAgICAgKCpzYV9wcHRyKS0+dC50dl9zZWMgPSAwOwotICAgICAgICAoKnNhX3BwdHIpLT50LnR2X3VzZWMgPSAxOworICAgICAgICB0LnR2X3NlYyA9IDA7CisgICAgICAgIHQudHZfdXNlYyA9IDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgKCpzYV9wcHRyKS0+dC50dl9zZWMgPSB3aGVuOwotICAgICAgICAoKnNhX3BwdHIpLT50LnR2X3VzZWMgPSAwOworICAgICAgICB0LnR2X3NlYyA9IHdoZW47CisgICAgICAgIHQudHZfdXNlYyA9IDA7CiAgICAgfQotICAgICgqc2FfcHB0ciktPmZsYWdzID0gZmxhZ3M7Ci0gICAgKCpzYV9wcHRyKS0+Y2xpZW50YXJnID0gY2xpZW50YXJnOwotICAgICgqc2FfcHB0ciktPnRoZWNhbGxiYWNrID0gdGhlY2FsbGJhY2s7Ci0gICAgKCpzYV9wcHRyKS0+Y2xpZW50cmVnID0gcmVnbnVtKys7Ci0gICAgKCpzYV9wcHRyKS0+bmV4dCA9IE5VTEw7Ci0gICAgc2FfdXBkYXRlX2VudHJ5KCpzYV9wcHRyKTsKIAotICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwKLQkJInJlZ2lzdGVyZWQgYWxhcm0gJWQsIHQgPSAlZC4lMDNkLCBmbGFncz0weCUwMnhcbiIsCi0gICAgICAgICAgICAgICAgKCpzYV9wcHRyKS0+Y2xpZW50cmVnLCAoKnNhX3BwdHIpLT50LnR2X3NlYywKLSAgICAgICAgICAgICAgICAoKCpzYV9wcHRyKS0+dC50dl91c2VjIC8gMTAwMCksICgqc2FfcHB0ciktPmZsYWdzKSk7Ci0KLSAgICBpZiAoc3RhcnRfYWxhcm1zKQotICAgICAgICBzZXRfYW5fYWxhcm0oKTsKLSAgICByZXR1cm4gKCpzYV9wcHRyKS0+Y2xpZW50cmVnOworICAgIHJldHVybiBzbm1wX2FsYXJtX3JlZ2lzdGVyX2hyKHQsIGZsYWdzLCB0aGVjYWxsYmFjaywgY2xpZW50YXJnKTsKIH0KIAogCkBAIC00NTEsNyArNDEwLDcgQEAKICAqCiAgKiBAcGFyYW0gY2QgaXMgYSB2b2lkIHBvaW50ZXIgdXNlZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uICBUaGlzIAogICoJcG9pbnRlciBpcyBhc3NpZ25lZCB0byBzbm1wX2FsYXJtLT5jbGllbnRhcmcgYW5kIHBhc3NlZCBpbnRvIHRoZQotICoJY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBjbGllbnQncyBzcGVjaWZjIG5lZWRzLgorICoJY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBjbGllbnQncyBzcGVjaWZpYyBuZWVkcy4KICAqCiAgKiBAcmV0dXJuIFJldHVybnMgYSB1bmlxdWUgdW5zaWduZWQgaW50ZWdlcih3aGljaCBpcyBhbHNvIHBhc3NlZCBhcyB0aGUgZmlyc3QgCiAgKglhcmd1bWVudCBvZiBlYWNoIGNhbGxiYWNrKSwgd2hpY2ggY2FuIHRoZW4gYmUgdXNlZCB0byByZW1vdmUgdGhlCkBAIC00NzYsOCArNDM1LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgKCpzKS0+dC50dl9zZWMgPSB0LnR2X3NlYzsKLSAgICAoKnMpLT50LnR2X3VzZWMgPSB0LnR2X3VzZWM7CisgICAgKCpzKS0+dCA9IHQ7CiAgICAgKCpzKS0+ZmxhZ3MgPSBmbGFnczsKICAgICAoKnMpLT5jbGllbnRhcmcgPSBjZDsKICAgICAoKnMpLT50aGVjYWxsYmFjayA9IGNiOwpAQCAtNDg3LDggKzQ0NSw4IEBACiAgICAgc2FfdXBkYXRlX2VudHJ5KCpzKTsKIAogICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwKLSAgICAgICAgICAgICAgICAicmVnaXN0ZXJlZCBhbGFybSAlZCwgdCA9ICVkLiUwM2QsIGZsYWdzPTB4JTAyeFxuIiwKLSAgICAgICAgICAgICAgICAoKnMpLT5jbGllbnRyZWcsICgqcyktPnQudHZfc2VjLCAoKCpzKS0+dC50dl91c2VjIC8gMTAwMCksCisgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYWxhcm0gJWQsIHQgPSAlbGQuJTAzbGQsIGZsYWdzPTB4JTAyeFxuIiwKKyAgICAgICAgICAgICAgICAoKnMpLT5jbGllbnRyZWcsIChsb25nKSAoKnMpLT50LnR2X3NlYywgKGxvbmcpKCgqcyktPnQudHZfdXNlYyAvIDEwMDApLAogICAgICAgICAgICAgICAgICgqcyktPmZsYWdzKSk7CiAKICAgICBpZiAoc3RhcnRfYWxhcm1zKSB7CkBAIC01MTYsMTIgKzQ3NCwxMiBAQAogICAgIHN0cnVjdCBzbm1wX2FsYXJtICphOwogICAgIHN0cnVjdCB0aW1ldmFsICB0X25vdzsKICAgICBpZiAoKGEgPSBzYV9maW5kX3NwZWNpZmljKGNsaWVudHJlZykpICE9IE5VTEwpIHsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0X25vdywgTlVMTCk7Ci0gICAgICAgIGEtPnRfbGFzdC50dl9zZWMgPSB0X25vdy50dl9zZWM7Ci0gICAgICAgIGEtPnRfbGFzdC50dl91c2VjID0gdF9ub3cudHZfdXNlYzsKLSAgICAgICAgYS0+dF9uZXh0LnR2X3NlYyA9IDA7Ci0gICAgICAgIGEtPnRfbmV4dC50dl91c2VjID0gMDsKLSAgICAgICAgTkVUU05NUF9USU1FUkFERCgmdF9ub3csICZhLT50LCAmYS0+dF9uZXh0KTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0X25vdyk7CisgICAgICAgIGEtPnRfbGFzdE0udHZfc2VjID0gdF9ub3cudHZfc2VjOworICAgICAgICBhLT50X2xhc3RNLnR2X3VzZWMgPSB0X25vdy50dl91c2VjOworICAgICAgICBhLT50X25leHRNLnR2X3NlYyA9IDA7CisgICAgICAgIGEtPnRfbmV4dE0udHZfdXNlYyA9IDA7CisgICAgICAgIE5FVFNOTVBfVElNRVJBREQoJnRfbm93LCAmYS0+dCwgJmEtPnRfbmV4dE0pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm1fcmVzZXQiLCAiYWxhcm0gJWQgbm90IGZvdW5kXG4iLApkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX2FwaS5jIGIvc25tcGxpYi9zbm1wX2FwaS5jCmluZGV4IDQ1MjY3ZmQuLjE5MWRlYmYgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9hcGkuYworKysgYi9zbm1wbGliL3NubXBfYXBpLmMKQEAgLTEsMyArMSw0IEBACisKIC8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQogICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKICAqIHRoYXQgbWF5IGFwcGx5OgpAQCAtMzcsNiArMzgsNyBAQAogICogc25tcF9hcGkuYyAtIEFQSSBmb3IgYWNjZXNzIHRvIHNubXAuCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgpAQCAtNTYsMTEgKzU4LDcgQEAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtODEsOSArNzksNiBAQAogI2lmIEhBVkVfSU9fSAogI2luY2x1ZGUgPGlvLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC0xMjcsNiArMTIyLDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaD4KICNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaD4KICNlbmRpZgpAQCAtMTQwLDggKzEzNiwyMCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS92YWNtLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzdGF0aXN0aWNzLCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfYXBpLCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9pZF9pc19zdWJ0cmVlLCBzbm1wX2FwaSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wdjNfcHJvYmVfY29udGV4dEVuZ2luZUlEX3JmYzUzNDMsIHNubXBfYXBpKQorCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKQorZXh0ZXJuIHZvaWQgbmV0c25tcF9jZXJ0c19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbmV0c25tcF9jZXJ0c19zaHV0ZG93bih2b2lkKTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCAgICAgX2luaXRfc25tcCh2b2lkKTsKIAorc3RhdGljIGludCAgICAgIF9zbm1wX3N0b3JlX25lZWRlZCA9IDA7CisKICNpbmNsdWRlICIuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuaCIKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmg+CiAjaWZuZGVmIHRpbWVyY21wCkBAIC0xODYsNyArMTk0LDcgQEAKIAogI2RlZmluZSBERUZBVUxUX0NPTU1VTklUWSAgICJwdWJsaWMiCiAjZGVmaW5lIERFRkFVTFRfUkVUUklFUwkgICAgNQotI2RlZmluZSBERUZBVUxUX1RJTUVPVVQJICAgIDEwMDAwMDBMCisjZGVmaW5lIERFRkFVTFRfVElNRU9VVAkgICAgT05FX1NFQwogI2RlZmluZSBERUZBVUxUX1JFTVBPUlQJICAgIFNOTVBfUE9SVAogI2RlZmluZSBERUZBVUxUX0VOVEVSUFJJU0UgIGRlZmF1bHRfZW50ZXJwcmlzZQogI2RlZmluZSBERUZBVUxUX1RJTUUJICAgIDAKQEAgLTIyMSwxOCArMjI5LDYgQEAKICAgICBzaXplX3QgICAgICAgICAgcGFja2V0X2xlbiwgcGFja2V0X3NpemU7CiB9OwogCi0vKgotICogVGhlIGxpc3Qgb2YgYWN0aXZlL29wZW4gc2Vzc2lvbnMuCi0gKi8KLXN0cnVjdCBzZXNzaW9uX2xpc3QgewotICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKm5leHQ7Ci0gICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOwotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7Ci0gICAgc3RydWN0IHNubXBfaW50ZXJuYWxfc2Vzc2lvbiAqaW50ZXJuYWw7Ci19OwotCi0KLQogc3RhdGljIGNvbnN0IGNoYXIgKmFwaV9lcnJvcnNbLVNOTVBFUlJfTUFYICsgMV0gPSB7CiAgICAgIk5vIGVycm9yIiwgICAgICAgICAgICAgICAgIC8qIFNOTVBFUlJfU1VDQ0VTUyAqLwogICAgICJHZW5lcmljIGVycm9yIiwgICAgICAgICAgICAvKiBTTk1QRVJSX0dFTkVSUiAqLwpAQCAtMzAwLDYgKzI5Niw5IEBACiAgICAgIktlcmJlcm9zIHJlbGF0ZWQgZXJyb3IiLCAgIC8qIFNOTVBFUlJfS1JCNSAqLwogICAgICJQcm90b2NvbCBlcnJvciIsCQkvKiBTTk1QRVJSX1BST1RPQ09MICovCiAgICAgIk9JRCBub3QgaW5jcmVhc2luZyIsICAgICAgIC8qIFNOTVBFUlJfT0lEX05PTklOQ1JFQVNJTkcgKi8KKyAgICAiQ29udGV4dCBwcm9iZSIsICAgICAgICAgICAgLyogU05NUEVSUl9KVVNUX0FfQ09OVEVYVF9QUk9CRSAqLworICAgICJDb25maWd1cmF0aW9uIGRhdGEgZm91bmQgYnV0IHRoZSB0cmFuc3BvcnQgY2FuJ3QgYmUgY29uZmlndXJlZCIsIC8qIFNOTVBFUlJfVFJBTlNQT1JUX05PX0NPTkZJRyAqLworICAgICJUcmFuc3BvcnQgY29uZmlndXJhdGlvbiBmYWlsZWQiLCAvKiBTTk1QRVJSX1RSQU5TUE9SVF9DT05GSUdfRVJST1IgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzZWNMZXZlbE5hbWVbXSA9IHsKQEAgLTM0OSw3ICszNDgsNiBAQAogCiBzdGF0aWMgdm9pZCAgICAgc25tcHYzX2NhbGNfbXNnX2ZsYWdzKGludCwgaW50LCB1X2NoYXIgKik7CiBzdGF0aWMgaW50ICAgICAgc25tcHYzX3ZlcmlmeV9tc2cobmV0c25tcF9yZXF1ZXN0X2xpc3QgKiwgbmV0c25tcF9wZHUgKik7Ci1zdGF0aWMgaW50ICAgICAgc25tcHYzX2J1aWxkX3Byb2JlX3BkdShuZXRzbm1wX3BkdSAqKik7CiBzdGF0aWMgaW50ICAgICAgc25tcHYzX2J1aWxkKHVfY2hhciAqKiBwa3QsIHNpemVfdCAqIHBrdF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG9mZnNldCwgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSk7CkBAIC0zNjAsNyArMzU4LDkgQEAKIHN0YXRpYyB2b2lkICAgICByZWdpc3Rlcl9kZWZhdWx0X2hhbmRsZXJzKHZvaWQpOwogc3RhdGljIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNubXBfc2Vzc19jb3B5KG5ldHNubXBfc2Vzc2lvbiAqIHBzcyk7CiBpbnQgICAgICAgICAgICAgc25tcF9nZXRfZXJybm8odm9pZCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc3luY2hfcmVzZXQobmV0c25tcF9zZXNzaW9uICogbm90dXNlZCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc3luY2hfc2V0dXAobmV0c25tcF9zZXNzaW9uICogbm90dXNlZCk7CiAKICNpZm5kZWYgSEFWRV9TVFJFUlJPUgpAQCAtMzg1LDEyICszODUsMTQgQEAKICAgICAgICAgcmV0dXJuICJHRVQiOwogICAgIGNhc2UgU05NUF9NU0dfR0VUTkVYVDoKICAgICAgICAgcmV0dXJuICJHRVRORVhUIjsKLSAgICBjYXNlIFNOTVBfTVNHX1JFU1BPTlNFOgotICAgICAgICByZXR1cm4gIlJFU1BPTlNFIjsKLSAgICBjYXNlIFNOTVBfTVNHX1NFVDoKLSAgICAgICAgcmV0dXJuICJTRVQiOwogICAgIGNhc2UgU05NUF9NU0dfR0VUQlVMSzoKICAgICAgICAgcmV0dXJuICJHRVRCVUxLIjsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgY2FzZSBTTk1QX01TR19TRVQ6CisgICAgICAgIHJldHVybiAiU0VUIjsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgY2FzZSBTTk1QX01TR19SRVNQT05TRToKKyAgICAgICAgcmV0dXJuICJSRVNQT05TRSI7CiAgICAgY2FzZSBTTk1QX01TR19JTkZPUk06CiAgICAgICAgIHJldHVybiAiSU5GT1JNIjsKICAgICBjYXNlIFNOTVBfTVNHX1RSQVAyOgpAQCAtNjY0LDE5ICs2NjYsMTkgQEAKICAgICAvKgogICAgICAqIGdldCBwc2V1ZG8tcmFuZG9tIHZhbHVlcyBmb3IgcmVxdWVzdCBJRCBhbmQgbWVzc2FnZSBJRCAKICAgICAgKi8KLSAgICAvKgotICAgICAqIGRvbid0IGFsbG93IHplcm8gdmFsdWUgdG8gcmVwZWF0IGluaXQgCi0gICAgICovCiAjaWZkZWYgU1ZSNAogICAgIHNyYW5kNDgodHYudHZfc2VjIF4gdHYudHZfdXNlYyk7CiAgICAgdG1wUmVxaWQgPSBscmFuZDQ4KCk7CiAgICAgdG1wTXNnaWQgPSBscmFuZDQ4KCk7CiAjZWxzZQotICAgIHNyYW5kb20odHYudHZfc2VjIF4gdHYudHZfdXNlYyk7CisgICAgc3JhbmRvbSgodW5zaWduZWQpKHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpKTsKICAgICB0bXBSZXFpZCA9IHJhbmRvbSgpOwogICAgIHRtcE1zZ2lkID0gcmFuZG9tKCk7CiAjZW5kaWYKIAorICAgIC8qCisgICAgICogZG9uJ3QgYWxsb3cgemVybyB2YWx1ZSB0byByZXBlYXQgaW5pdCAKKyAgICAgKi8KICAgICBpZiAodG1wUmVxaWQgPT0gMCkKICAgICAgICAgdG1wUmVxaWQgPSAxOwogICAgIGlmICh0bXBNc2dpZCA9PSAwKQpAQCAtNjkxLDE1ICs2OTMsMjIgQEAKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wIiwgInRjcCIsICI6MTYxIik7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcCIsICJ1ZHA2IiwgIjoxNjEiKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wIiwgInRjcDYiLCAiOjE2MSIpOworICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXAiLCAiZHRsc3VkcCIsICI6MTAxNjEiKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wIiwgInRsc3RjcCIsICI6MTAxNjEiKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wIiwgImlweCIsICIvMzY4NzkiKTsKKwogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXB0cmFwIiwgInVkcCIsICI6MTYyIik7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcHRyYXAiLCAidGNwIiwgIjoxNjIiKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wdHJhcCIsICJ1ZHA2IiwgIjoxNjIiKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wdHJhcCIsICJ0Y3A2IiwgIjoxNjIiKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wdHJhcCIsICJkdGxzdWRwIiwgIjoxMDE2MiIpOworICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXB0cmFwIiwgInRsc3RjcCIsICI6MTAxNjIiKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wdHJhcCIsICJpcHgiLCAiLzM2ODgwIik7CiAKICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfSEVYX09VVFBVVF9MRU5HVEgsIDE2KTsKKyAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9SRVRSSUVTLAorICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1JFVFJJRVMpOwogCiAjaWZkZWYgTkVUU05NUF9VU0VfUkVWRVJTRV9BU05FTkNPRElORwogICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKQEAgLTc3Miw2ICs3ODEsMTUgQEAKIAkJICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfTE9BRCk7CiAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sICJzbm1wIiwgIm5vUGVyc2lzdGVudFNhdmUiLAogCQkgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfUEVSU0lTVEVOVF9TQVZFKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgInNubXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub0NvbnRleHRFbmdpbmVJRERpc2NvdmVyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX05PX0RJU0NPVkVSWSk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0lOVEVHRVIsICJzbm1wIiwgInRpbWVvdXQiLAorCQkgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1RJTUVPVVQpOworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9JTlRFR0VSLCAic25tcCIsICJyZXRyaWVzIiwKKwkJICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9SRVRSSUVTKTsKKwogICAgIG5ldHNubXBfcmVnaXN0ZXJfc2VydmljZV9oYW5kbGVycygpOwogfQogCkBAIC04MjAsMTAgKzgzOCwxOSBAQAogICAgIHNubXBfaW5pdF9zdGF0aXN0aWNzKCk7CiAgICAgcmVnaXN0ZXJfbWliX2hhbmRsZXJzKCk7CiAgICAgcmVnaXN0ZXJfZGVmYXVsdF9oYW5kbGVycygpOworICAgIGluaXRfc25tcF90cmFuc3BvcnQoKTsKICAgICBpbml0X3NubXB2Myh0eXBlKTsKICAgICBpbml0X3NubXBfYWxhcm0oKTsKICAgICBpbml0X3NubXBfZW51bSh0eXBlKTsKICAgICBpbml0X3ZhY20oKTsKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpCisgICAgbmV0c25tcF9jZXJ0c19pbml0KCk7CisjZW5kaWYKKyNpZmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCAic25tcCIsICJkbnNzZWNXYXJuT25seSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0ROU1NFQ19XQVJOX09OTFkpOworI2VuZGlmCiAKICAgICByZWFkX3ByZW1pYl9jb25maWdzKCk7CiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORwpAQCAtODM0LDYgKzg2MSwyOCBAQAogCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBpbml0X3NubXAoKSAqLwogCisvKioKKyAqIHNldCBhIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBwZXJzaXN0ZW50IHN0b3JlIG5lZWRzIHRvIGJlIHNhdmVkLgorICovCit2b2lkCitzbm1wX3N0b3JlX25lZWRlZChjb25zdCBjaGFyICp0eXBlKQoreworICAgIERFQlVHTVNHVEwoKCJzbm1wX3N0b3JlIiwgInNldHRpbmcgbmVlZGVkIGZsYWcuLi5cbiIpKTsKKyAgICBfc25tcF9zdG9yZV9uZWVkZWQgPSAxOworfQorCit2b2lkCitzbm1wX3N0b3JlX2lmX25lZWRlZCh2b2lkKQoreworICAgIGlmICgwID09IF9zbm1wX3N0b3JlX25lZWRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIERFQlVHTVNHVEwoKCJzbm1wX3N0b3JlIiwgInN0b3JlIG5lZWRlZC4uLlxuIikpOworICAgIHNubXBfc3RvcmUobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOworICAgIF9zbm1wX3N0b3JlX25lZWRlZCA9IDA7Cit9CisKIHZvaWQKIHNubXBfc3RvcmUoY29uc3QgY2hhciAqdHlwZSkKIHsKQEAgLTg2Myw2ICs5MTIsOSBAQAogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKICAgICBzaHV0ZG93bl9taWIoKTsKICNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpCisgICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpOworI2VuZGlmCiAgICAgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKCk7CiAgICAgbmV0c25tcF9jb250YWluZXJfZnJlZV9saXN0KCk7CiAgICAgY2xlYXJfc2VjX21vZCgpOwpAQCAtODcwLDEwICs5MjIsOSBAQAogICAgIG5ldHNubXBfY2xlYXJfdGRvbWFpbl9saXN0KCk7CiAgICAgY2xlYXJfY2FsbGJhY2soKTsKICAgICBuZXRzbm1wX2RzX3NodXRkb3duKCk7Ci0gICAgY2xlYXJfdXNlcl9saXN0KCk7CiAgICAgbmV0c25tcF9jbGVhcl9kZWZhdWx0X3RhcmdldCgpOwogICAgIG5ldHNubXBfY2xlYXJfZGVmYXVsdF9kb21haW4oKTsKLSAgICBmcmVlX2V0aW1lbGlzdCgpOworICAgIHNodXRkb3duX3NlY21vZCgpOwogCiAgICAgaW5pdF9zbm1wX2luaXRfZG9uZSAgPSAwOwogICAgIF9pbml0X3NubXBfaW5pdF9kb25lID0gMDsKQEAgLTkwNyw2ICs5NTgsOCBAQAogLyoKICAqIGV4dGVuZGVkIG9wZW4gCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX29wZW5fZXgsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfT1BFTl9FWAogbmV0c25tcF9zZXNzaW9uICoKIHNubXBfb3Blbl9leChuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24sCiAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkJKG5ldHNubXBfc2Vzc2lvbiAqLCBuZXRzbm1wX3RyYW5zcG9ydCAqLApAQCAtOTQxLDYgKzk5NCw3IEBACiAKICAgICByZXR1cm4gKHNscC0+c2Vzc2lvbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX09QRU5fRVggKi8KIAogc3RhdGljIHN0cnVjdCBzZXNzaW9uX2xpc3QgKgogX3Nlc3NfY29weShuZXRzbm1wX3Nlc3Npb24gKiBpbl9zZXNzaW9uKQpAQCAtOTUxLDcgKzEwMDUsNiBAQAogICAgIHN0cnVjdCBzbm1wX3NlY21vZF9kZWYgKnNwdHI7CiAgICAgY2hhciAgICAgICAgICAgKmNwOwogICAgIHVfY2hhciAgICAgICAgICp1Y3A7Ci0gICAgc2l6ZV90ICAgICAgICAgIGk7CiAKICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSAwOwogICAgIGluX3Nlc3Npb24tPnNfZXJybm8gPSAwOwpAQCAtMTA1NCwzOSArMTEwNyw2IEBACiAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9TRUNMRVZFTCk7CiAgICAgfQogCi0gICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TGV2ZWwgPT0gMCkKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlMZXZlbCA9IFNOTVBfU0VDX0xFVkVMX05PQVVUSDsKLQotICAgIGlmIChpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbiA+IDApIHsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8gPQotICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbik7Ci0gICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90byA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKLSAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfTUFMTE9DOwotICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZ2V0X2RlZmF1bHRfYXV0aHR5cGUoJmkpICE9IE5VTEwpIHsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8gPQotICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoZ2V0X2RlZmF1bHRfYXV0aHR5cGUoTlVMTCksIGkpOwotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbiA9IGk7Ci0gICAgfQotCi0gICAgaWYgKGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuID4gMCkgewotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90byA9Ci0gICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuKTsKLSAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwotICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9NQUxMT0M7Ci0gICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChnZXRfZGVmYXVsdF9wcml2dHlwZSgmaSkgIT0gTlVMTCkgewotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90byA9Ci0gICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChnZXRfZGVmYXVsdF9wcml2dHlwZShOVUxMKSwgaSk7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuID0gaTsKLSAgICB9Ci0KICAgICBpZiAoaW5fc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiA+IDApIHsKICAgICAgICAgdWNwID0gKHVfY2hhciAqKSBtYWxsb2MoaW5fc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbik7CiAgICAgICAgIGlmICh1Y3AgPT0gTlVMTCkgewpAQCAtMTE2NCw4NiArMTE4NCw1NiBAQAogICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWVMZW4gPSBzdHJsZW4oY3ApOwogICAgIH0KIAotICAgIGlmICgoaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuIDw9IDApICYmCi0gICAgICAgICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLQkJCQkgICAgIE5FVFNOTVBfRFNfTElCX0FVVEhNQVNURVJLRVkpKSkpIHsKLSAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IHNpemVvZihzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXkpOwotICAgICAgICB1X2NoYXIgKnRtcHAgPSBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXk7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiA9IDA7Ci0gICAgICAgIC8qIGl0IHdpbGwgYmUgYSBoZXggc3RyaW5nICovCi0gICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ0bXBwLCAmYnVmbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuLCAwLCBjcCkpIHsKLSAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbCgiZXJyb3IgcGFyc2luZyBhdXRoZW50aWNhdGlvbiBtYXN0ZXIga2V5Iik7Ci0gICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgoaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuIDw9IDApICYmCi0gICAgICAgICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLQkJCQkgICAgIE5FVFNOTVBfRFNfTElCX0FVVEhQQVNTUEhSQVNFKSkgfHwKLSAgICAgICAgIChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotCQkJCSAgICAgTkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSkpKSkgewotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gPSBVU01fQVVUSF9LVV9MRU47Ci0gICAgICAgIGlmIChnZW5lcmF0ZV9LdShzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBjcCwgc3RybGVuKGNwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsCi0gICAgICAgICAgICAgICAgKCJFcnJvciBnZW5lcmF0aW5nIGEga2V5IChLdSkgZnJvbSB0aGUgc3VwcGxpZWQgYXV0aGVudGljYXRpb24gcGFzcyBwaHJhc2UuIik7Ci0gICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgaWYgKHNlc3Npb24tPnJldHJpZXMgPT0gU05NUF9ERUZBVUxUX1JFVFJJRVMpIHsKKyAgICAgICAgaW50IHJldHJ5ID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1JFVFJJRVMpOworICAgICAgICBpZiAocmV0cnkgPCAwKQorICAgICAgICAgICAgc2Vzc2lvbi0+cmV0cmllcyA9IERFRkFVTFRfUkVUUklFUzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Vzc2lvbi0+cmV0cmllcyA9IHJldHJ5OwogICAgIH0KLQotICAgIAotICAgIGlmICgoaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuIDw9IDApICYmCi0gICAgICAgICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLQkJCQkgICAgIE5FVFNOTVBfRFNfTElCX1BSSVZNQVNURVJLRVkpKSkpIHsKLSAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IHNpemVvZihzZXNzaW9uLT5zZWN1cml0eVByaXZLZXkpOwotICAgICAgICB1X2NoYXIgKnRtcHAgPSBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXk7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiA9IDA7Ci0gICAgICAgIC8qIGl0IHdpbGwgYmUgYSBoZXggc3RyaW5nICovCi0gICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ0bXBwLCAmYnVmbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuLCAwLCBjcCkpIHsKLSAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbCgiZXJyb3IgcGFyc2luZyBlbmNyeXB0aW9uIG1hc3RlciBrZXkiKTsKLSAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKChpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gPD0gMCkgJiYKLSAgICAgICAgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotCQkJCSAgICAgTkVUU05NUF9EU19MSUJfUFJJVlBBU1NQSFJBU0UpKSB8fAotICAgICAgICAgKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0JCQkJICAgICBORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFKSkpKSB7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiA9IFVTTV9QUklWX0tVX0xFTjsKLSAgICAgICAgaWYgKGdlbmVyYXRlX0t1KHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGNwLCBzdHJsZW4oY3ApLAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwKLSAgICAgICAgICAgICAgICAoIkVycm9yIGdlbmVyYXRpbmcgYSBrZXkgKEt1KSBmcm9tIHRoZSBzdXBwbGllZCBwcml2YWN5IHBhc3MgcGhyYXNlLiIpOwotICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgIGlmIChzZXNzaW9uLT50aW1lb3V0ID09IFNOTVBfREVGQVVMVF9USU1FT1VUKSB7CisgICAgICAgIGludCB0aW1lb3V0ID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVElNRU9VVCk7CisgICAgICAgIGlmICh0aW1lb3V0IDw9IDApCisgICAgICAgICAgICBzZXNzaW9uLT50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXNzaW9uLT50aW1lb3V0ID0gdGltZW91dCAqIE9ORV9TRUM7CiAgICAgfQotCi0gICAgaWYgKHNlc3Npb24tPnJldHJpZXMgPT0gU05NUF9ERUZBVUxUX1JFVFJJRVMpCi0gICAgICAgIHNlc3Npb24tPnJldHJpZXMgPSBERUZBVUxUX1JFVFJJRVM7Ci0gICAgaWYgKHNlc3Npb24tPnRpbWVvdXQgPT0gU05NUF9ERUZBVUxUX1RJTUVPVVQpCi0gICAgICAgIHNlc3Npb24tPnRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7CiAgICAgc2Vzc2lvbi0+c2Vzc2lkID0gc25tcF9nZXRfbmV4dF9zZXNzaWQoKTsKIAogICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NFU1NJT05fSU5JVCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24pOwogCi0gICAgaWYgKChzcHRyID0gZmluZF9zZWNfbW9kKHNlc3Npb24tPnNlY3VyaXR5TW9kZWwpKSAhPSBOVUxMICYmCi0gICAgICAgIHNwdHItPnNlc3Npb25fb3BlbiAhPSBOVUxMKSB7CisgICAgaWYgKChzcHRyID0gZmluZF9zZWNfbW9kKHNlc3Npb24tPnNlY3VyaXR5TW9kZWwpKSAhPSBOVUxMKSB7CiAgICAgICAgIC8qCi0gICAgICAgICAqIHNlY3VyaXR5IG1vZHVsZSBzcGVjaWZpYyBpbmlhbGl6YXRpb24gCisgICAgICAgICAqIHNlY3VyaXR5IG1vZHVsZSBzcGVjaWZpYyBjb3B5aW5nIAogICAgICAgICAgKi8KLSAgICAgICAgKCpzcHRyLT5zZXNzaW9uX29wZW4pIChzZXNzaW9uKTsKKyAgICAgICAgaWYgKHNwdHItPnNlc3Npb25fc2V0dXApIHsKKyAgICAgICAgICAgIGludCByZXQgPSAoKnNwdHItPnNlc3Npb25fc2V0dXApIChpbl9zZXNzaW9uLCBzZXNzaW9uKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBzZWN1cml0eSBtb2R1bGUgc3BlY2lmaWMgb3BlbmluZworICAgICAgICAgKi8KKyAgICAgICAgaWYgKHNwdHItPnNlc3Npb25fb3BlbikgeworICAgICAgICAgICAgaW50IHJldCA9ICgqc3B0ci0+c2Vzc2lvbl9vcGVuKSAoc2Vzc2lvbik7CisgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCisgICAgLyogQW55dGhpbmcgYmVsb3cgdGhpcyBwb2ludCBzaG91bGQgb25seSBiZSBkb25lIGlmIHRoZSB0cmFuc3BvcnQKKyAgICAgICBoYWQgbm8gc2F5IGluIHRoZSBtYXR0ZXIgKi8KKyAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlMZXZlbCA9PSAwKQorICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUxldmVsID0gU05NUF9TRUNfTEVWRUxfTk9BVVRIOworCiAgICAgcmV0dXJuIChzbHApOwogfQogCkBAIC0xMjYxLDYgKzEyNTEsMTAxIEBACiAgICAgcmV0dXJuIHBzbDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBWM19QUk9CRV9DT05URVhURU5HSU5FSURfUkZDNTM0MworLyoqCisgKiBwcm9iZSBmb3IgZW5naW5lSUQgdXNpbmcgUkZDIDUzNDMgcHJvYmluZyBtZWNoYW5pc21zCisgKgorICogRGVzaWduZWQgdG8gYmUgYSBjYWxsYmFjayBmb3Igd2l0aGluIGEgc2VjdXJpdHkgbW9kZWwncyBwcm9iZV9lbmdpbmVpZCBob29rLgorICogU2luY2UgaXQncyBsaWtlbHkgbXVsdGlwbGUgc2VjdXJpdHkgbW9kZWxzIHdvbid0IGhhdmUgZW5naW5lSURzIHRvCisgKiBwcm9iZSBmb3IgdGhlbiB0aGlzIGZ1bmN0aW9uIGlzIGEgY2FsbGJhY2sgbGlrZWx5IHRvIGJlIHVzZWQgYnkKKyAqIG11bHRpcGxlIGZ1dHVyZSBzZWN1cml0eSBtb2RlbHMuICBFLkcuIGJvdGggU1NIIGFuZCBEVExTLgorICovCitpbnQKK3NubXB2M19wcm9iZV9jb250ZXh0RW5naW5lSURfcmZjNTM0Myh2b2lkICpzbHAsIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbikgeworICAgIG5ldHNubXBfcGR1ICAgICpwZHUgPSBOVUxMLCAqcmVzcG9uc2UgPSBOVUxMOworICAgIHN0YXRpYyBvaWQgICAgICBzbm1wRW5naW5lSURvaWRbXSAgID0geyAxLDMsNiwxLDYsMywxMCwyLDEsMSwwfTsKKyAgICBzdGF0aWMgc2l6ZV90ICAgc25tcEVuZ2luZUlEb2lkX2xlbiA9IDExOworCisgICAgc3RhdGljIGNoYXIgICAgIHByb2JlRW5naW5lSURbXSA9IHsgKGNoYXIpMHg4MCwgMCwgMCwgMCwgNiB9OworICAgIHN0YXRpYyBzaXplX3QgICBwcm9iZUVuZ2luZUlEX2xlbiA9IHNpemVvZihwcm9iZUVuZ2luZUlEKTsKKyAgICAKKyAgICBpbnQgc3RhdHVzOworCisgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX0dFVCk7CisgICAgaWYgKCFwZHUpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgcGR1LT52ZXJzaW9uID0gU05NUF9WRVJTSU9OXzM7CisgICAgLyogZG9uJ3QgcmVxdWlyZSBhIHNlY3VyaXR5TmFtZSAqLworICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eU5hbWUpIHsKKyAgICAgICAgcGR1LT5zZWN1cml0eU5hbWUgPSBzdHJkdXAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKTsKKyAgICAgICAgcGR1LT5zZWN1cml0eU5hbWVMZW4gPSBzdHJsZW4ocGR1LT5zZWN1cml0eU5hbWUpOworICAgIH0KKyAgICBwZHUtPnNlY3VyaXR5TGV2ZWwgPSBTTk1QX1NFQ19MRVZFTF9OT0FVVEg7CisgICAgcGR1LT5zZWN1cml0eU1vZGVsID0gc2Vzc2lvbi0+c2VjdXJpdHlNb2RlbDsKKyAgICBwZHUtPmNvbnRleHRFbmdpbmVJRCA9IG5ldHNubXBfbWVtZHVwKHByb2JlRW5naW5lSUQsIHByb2JlRW5naW5lSURfbGVuKTsKKyAgICBpZiAoIXBkdS0+Y29udGV4dEVuZ2luZUlEKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gY2xvbmUgbWVtb3J5IGZvciByZmM1MzQzIHByb2JlXG4iKTsKKyAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKyAgICBwZHUtPmNvbnRleHRFbmdpbmVJRExlbiA9IHByb2JlRW5naW5lSURfbGVuOworICAgIAorICAgIHNubXBfYWRkX251bGxfdmFyKHBkdSwgc25tcEVuZ2luZUlEb2lkLCBzbm1wRW5naW5lSURvaWRfbGVuKTsKKworICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJwcm9iaW5nIGZvciBlbmdpbmVJRCB1c2luZyByZmM1MzQzIG1ldGhvZHMuLi5cbiIpKTsKKyAgICBzZXNzaW9uLT5mbGFncyB8PSBTTk1QX0ZMQUdTX0RPTlRfUFJPQkU7IC8qIHByZXZlbnQgcmVjdXJzaW9uICovCisgICAgc3RhdHVzID0gc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHNscCwgcGR1LCAmcmVzcG9uc2UpOworCisgICAgaWYgKChyZXNwb25zZSA9PSBOVUxMKSB8fCAoc3RhdHVzICE9IFNUQVRfU1VDQ0VTUykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCByZmM1MzQzIGNvbnRleHRFbmdpbmVJRCBwcm9iaW5nXG4iKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKiBjaGVjayB0aGF0IHRoZSByZXNwb25zZSBtYWtlcyBzZW5zZSAqLworICAgIGlmIChOVUxMICE9IHJlc3BvbnNlLT52YXJpYWJsZXMgJiYKKyAgICAgICAgTlVMTCAhPSByZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lICYmCisgICAgICAgIHNubXBfb2lkX2NvbXBhcmUocmVzcG9uc2UtPnZhcmlhYmxlcy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wRW5naW5lSURvaWQsIHNubXBFbmdpbmVJRG9pZF9sZW4pID09IDAgJiYKKyAgICAgICAgQVNOX09DVEVUX1NUUiA9PSByZXNwb25zZS0+dmFyaWFibGVzLT50eXBlICAmJgorICAgICAgICBOVUxMICE9IHJlc3BvbnNlLT52YXJpYWJsZXMtPnZhbC5zdHJpbmcgJiYKKyAgICAgICAgcmVzcG9uc2UtPnZhcmlhYmxlcy0+dmFsX2xlbiA+IDApIHsKKyAgICAgICAgc2Vzc2lvbi0+Y29udGV4dEVuZ2luZUlEID0KKyAgICAgICAgICAgIG5ldHNubXBfbWVtZHVwKHJlc3BvbnNlLT52YXJpYWJsZXMtPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT52YWxfbGVuKTsKKyAgICAgICAgaWYgKCFzZXNzaW9uLT5jb250ZXh0RW5naW5lSUQpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgcmZjNTM0MyBjb250ZXh0RW5naW5lSUQgcHJvYmluZzogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qIHRlY2huaWNhbGx5IHRoZXJlIGxpa2VseSBpc24ndCBhIHNlY3VyaXR5RW5naW5lSUQgYnV0IGp1c3QKKyAgICAgICAgICAgaW4gY2FzZSBhbnlvbmUgZ29lcyBsb29raW5nIHdlIG1pZ2h0IGFzIHdlbGwgaGF2ZSBvbmUgKi8KKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCA9CisgICAgICAgICAgICBuZXRzbm1wX21lbWR1cChyZXNwb25zZS0+dmFyaWFibGVzLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPnZhcmlhYmxlcy0+dmFsX2xlbik7CisgICAgICAgIGlmICghc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCByZmM1MzQzIHNlY3VyaXR5RW5naW5lSUQgcHJvYmluZzogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4gPSBzZXNzaW9uLT5jb250ZXh0RW5naW5lSURMZW4gPQorICAgICAgICAgICAgcmVzcG9uc2UtPnZhcmlhYmxlcy0+dmFsX2xlbjsKKyAgICAgICAgCisgICAgICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgeworICAgICAgICAgICAgc2l6ZV90IGk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX29wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIiAgcHJvYmUgZm91bmQgZW5naW5lSUQ6ICAiKSk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbjsgaSsrKQorICAgICAgICAgICAgICAgIERFQlVHTVNHKCgic25tcF9zZXNzX29wZW4iLCAiJTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURbaV0pKTsKKyAgICAgICAgICAgIERFQlVHTVNHKCgic25tcF9zZXNzX29wZW4iLCAiXG4iKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBWM19QUk9CRV9DT05URVhURU5HSU5FSURfUkZDNTM0MyAqLworCisKIC8qKgogICogcHJvYmUgZm9yIHBlZXIgZW5naW5lSUQKICAqCkBAIC0xMjgwLDE2ICsxMzY1LDE3IEBACiBzbm1wdjNfZW5naW5lSURfcHJvYmUoc3RydWN0IHNlc3Npb25fbGlzdCAqc2xwLAogICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIGluX3Nlc3Npb24pCiB7Ci0gICAgbmV0c25tcF9wZHUgICAgKnBkdSA9IE5VTEwsICpyZXNwb25zZSA9IE5VTEw7CiAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOwotICAgIHVuc2lnbmVkIGludCAgICBpOwogICAgIGludCAgICAgICAgICAgICBzdGF0dXM7CisgICAgc3RydWN0IHNubXBfc2VjbW9kX2RlZiAqc3B0ciA9IE5VTEw7CiAKICAgICBpZiAoc2xwID09IE5VTEwgfHwgc2xwLT5zZXNzaW9uID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgc2Vzc2lvbiA9IHNscC0+c2Vzc2lvbjsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oc2Vzc2lvbiAhPSBOVUxMLCAwKTsKKyAgICBzcHRyID0gZmluZF9zZWNfbW9kKHNlc3Npb24tPnNlY3VyaXR5TW9kZWwpOwogCiAgICAgLyoKICAgICAgKiBJZiB3ZSBhcmUgb3BlbmluZyBhIFYzIHNlc3Npb24gYW5kIHdlIGRvbid0IGtub3cgZW5naW5lSUQgd2UgbXVzdCBwcm9iZQpAQCAtMTI5Nyw4NSArMTM4MywxNDAgQEAKICAgICAgKiBsaXN0IHNvIHRoYXQgdGhlIHJlc3BvbnNlIGNhbiBoYW5kbGVkIGNvcnJlY3RseS4gCiAgICAgICovCiAKLSAgICBpZiAoKHNlc3Npb24tPmZsYWdzICYgU05NUF9GTEFHU19ET05UX1BST0JFKSA9PSBTTk1QX0ZMQUdTX0RPTlRfUFJPQkUpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgaWYgKHNlc3Npb24tPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzMpIHsKLSAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4gPT0gMCkgewotICAgICAgICAgICAgaWYgKHNubXB2M19idWlsZF9wcm9iZV9wZHUoJnBkdSkgIT0gMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJ1bmFibGUgdG8gY3JlYXRlIHByb2JlIFBEVVxuIikpOworICAgIGlmIChzZXNzaW9uLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8zICYmCisgICAgICAgICgwID09IChzZXNzaW9uLT5mbGFncyAmIFNOTVBfRkxBR1NfRE9OVF9QUk9CRSkpKSB7CisgICAgICAgIGlmIChOVUxMICE9IHNwdHIgJiYgTlVMTCAhPSBzcHRyLT5wcm9iZV9lbmdpbmVpZCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgInByb2JpbmcgZm9yIGVuZ2luZUlEIHVzaW5nIHNlY3VyaXR5IG1vZGVsIGNhbGxiYWNrLi4uXG4iKSk7CisgICAgICAgICAgICAvKiBzZWN1cml0eSBtb2RlbCBzcGVjaWZpYyBtZWNoYW5pc20gb2YgZGV0ZXJtaW5pbmcgZW5naW5lSUQgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9ICgqc3B0ci0+cHJvYmVfZW5naW5laWQpIChzbHAsIGluX3Nlc3Npb24pOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBTTk1QRVJSX1NVQ0NFU1MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAicHJvYmluZyBmb3IgZW5naW5lSUQuLi5cbiIpKTsKLSAgICAgICAgICAgIHNlc3Npb24tPmZsYWdzIHw9IFNOTVBfRkxBR1NfRE9OVF9QUk9CRTsgLyogcHJldmVudCByZWN1cnNpb24gKi8KLSAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZShzbHAsIHBkdSwgJnJlc3BvbnNlKTsKLQotICAgICAgICAgICAgaWYgKChyZXNwb25zZSA9PSBOVUxMKSAmJiAoc3RhdHVzID09IFNUQVRfU1VDQ0VTUykpIHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBTVEFUX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHN0YXR1cykgewotICAgICAgICAgICAgY2FzZSBTVEFUX1NVQ0NFU1M6Ci0gICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9JTlZBTElEX01TRzsgLyogWFg/PyAqLwotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3Nfb3BlbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiBleHBlY3RlZCBSZXBvcnQgYXMgcmVzcG9uc2UgdG8gcHJvYmU6ICVzICglZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9lcnJzdHJpbmcocmVzcG9uc2UtPmVycnN0YXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLT5lcnJzdGF0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNUQVRfRVJST1I6ICAgLyogdGhpcyBpcyB3aGF0IHdlIGV4cGVjdGVkIC0+IFJlcG9ydCA9PSBTVEFUX0VSUk9SICovCi0gICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9VTktOT1dOX0VOR19JRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU1RBVF9USU1FT1VUOgotICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVElNRU9VVDsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19vcGVuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIGNvbm5lY3Qgd2l0aCByZW1vdGUgZW5naW5lOiAlcyAoJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfYXBpX2VycnN0cmluZyhzZXNzaW9uLT5zX3NubXBfZXJybm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2xwLT5zZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gZGV0ZXJtaW5lIHJlbW90ZSBlbmdpbmUgSURcbiIpKTsKLSAgICAgICAgICAgICAgICAvKiBjbGVhciB0aGUgZmxhZyBzbyB0aGF0IHByb2JlIG9jY3VycyBvbiBuZXh0IGluZm9ybSAqLwotICAgICAgICAgICAgICAgIHNlc3Npb24tPmZsYWdzICY9IH5TTk1QX0ZMQUdTX0RPTlRfUFJPQkU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfU1VDQ0VTUzsKLSAgICAgICAgICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3Nfb3BlbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgcHJvYmUgZm91bmQgZW5naW5lSUQ6ICAiKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNscC0+c2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbjsgaSsrKQotICAgICAgICAgICAgICAgICAgICBERUJVR01TRygoInNubXBfc2Vzc19vcGVuIiwgIiUwMngiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xwLT5zZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlEW2ldKSk7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0coKCJzbm1wX3Nlc3Nfb3BlbiIsICJcbiIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIGlmIGJvb3QvdGltZSBzdXBwbGllZCBzZXQgaXQgZm9yIHRoaXMgZW5naW5lSUQgCi0gICAgICAgICAqLwotICAgICAgICBpZiAoc2Vzc2lvbi0+ZW5naW5lQm9vdHMgfHwgc2Vzc2lvbi0+ZW5naW5lVGltZSkgewotICAgICAgICAgICAgc2V0X2VuZ2luZXRpbWUoc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5lbmdpbmVCb290cywgc2Vzc2lvbi0+ZW5naW5lVGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihzbHAtPnNlc3Npb24pICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9VTktOT1dOX1VTRVJfTkFNRTsgICAgICAgLyogWFg/PyAqLwotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzbm1wdjNfZW5naW5lX3Byb2JlKCk6IGZhaWxlZCgyKSB0byBjcmVhdGUgYSBuZXcgdXNlciBmcm9tIHNlc3Npb25cbiIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFhYWDogZGVmYXVsdCB0byB0aGUgZGVmYXVsdCBSRkM1MzQzIGNvbnRleHRFbmdpbmVJRCBQcm9iZT8gKi8KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogCisgICAgLyoKKyAgICAgKiBzZWUgaWYgdGhlcmUgaXMgYSBob29rIHRvIGNhbGwgbm93IHRoYXQgd2UncmUgZG9uZSBwcm9iaW5nIGZvciBhbgorICAgICAqIGVuZ2luZUlECisgICAgICovCisgICAgaWYgKHNwdHIgJiYgc3B0ci0+cG9zdF9wcm9iZV9lbmdpbmVpZCkgeworICAgICAgICBzdGF0dXMgPSAoKnNwdHItPnBvc3RfcHJvYmVfZW5naW5laWQpKHNscCwgaW5fc2Vzc2lvbik7CisgICAgICAgIGlmIChzdGF0dXMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgcmV0dXJuIDE7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiBuZXRzbm1wX3Nlc3NfY29uZmlnX3RyYW5zcG9ydAorICoKKyAqIFBhcmFtZXRlcnM6CisgKgkqaW5fc2Vzc2lvbgorICoJKmluX3RyYW5zcG9ydAorICoKKyAqIFJldHVybnM6CisgKiAgICAgIFNOTVBFUlJfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIC0gWWF5CisgKiAgICAgIFNOTVBFUlJfR0VORVJSICAgICAgICAgICAgICAgICAgICAgIC0gR2VuZXJpYyBFcnJvcgorICogICAgICBTTk1QRVJSX1RSQU5TUE9SVF9DT05GSUdfRVJST1IgICAgICAtIFRyYW5zcG9ydCByZWplY3RlZCBjb25maWcKKyAqICAgICAgU05NUEVSUl9UUkFOU1BPUlRfTk9fQ09ORklHICAgICAgICAgLSBUcmFuc3BvcnQgY2FuJ3QgY29uZmlnCisgKi8KK2ludAorbmV0c25tcF9zZXNzX2NvbmZpZ190cmFuc3BvcnQobmV0c25tcF9jb250YWluZXIgKnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3sKKyAgICAvKiBPcHRpb25hbCBzdXBwbGltZW50YWwgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kCisgICAgICAgZmluYWwgY2FsbCB0byBhY3R1YWxseSBvcGVuIHRoZSB0cmFuc3BvcnQgKi8KKyAgICBpZiAodHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2VzcyIsICJjb25maWd1cmluZyB0cmFuc3BvcnRcbiIpKTsKKyAgICAgICAgaWYgKHRyYW5zcG9ydC0+Zl9jb25maWcpIHsKKyAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3IgKml0ZXI7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcgKmNvbmZpZ19kYXRhOworICAgICAgICAgICAgaW50IHJldDsKIAorICAgICAgICAgICAgaXRlciA9IENPTlRBSU5FUl9JVEVSQVRPUih0cmFuc3BvcnRfY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBpdGVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IoY29uZmlnX2RhdGEgPSAobmV0c25tcF90cmFuc3BvcnRfY29uZmlnKilJVEVSQVRPUl9GSVJTVChpdGVyKTsgY29uZmlnX2RhdGE7CisgICAgICAgICAgICAgICAgY29uZmlnX2RhdGEgPSAobmV0c25tcF90cmFuc3BvcnRfY29uZmlnKilJVEVSQVRPUl9ORVhUKGl0ZXIpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gdHJhbnNwb3J0LT5mX2NvbmZpZyh0cmFuc3BvcnQsIGNvbmZpZ19kYXRhLT5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfZGF0YS0+dmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVFJBTlNQT1JUX0NPTkZJR19FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9UUkFOU1BPUlRfTk9fQ09ORklHOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKyAKKy8qKgorICogQ29waWVzIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc2Vzc2lvbiBhbmQgY2FsbHMgZl9vcGVuCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhbnkgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4gdGhlIHNlc3Npb24KKyAqIHBvaW50ZXIgdG8gdGhlIHRyYW5zcG9ydCBpZiBpdCBoYXMgYSBmX2NvbmZpZyBwb2ludGVyIGFuZCB0aGVuCisgKiBjYWxscyB0aGUgdHJhbnNwb3J0J3MgZl9vcGVuIGZ1bmN0aW9uIHRvIGFjdHVhbGx5IG9wZW4gdGhlCisgKiBjb25uZWN0aW9uLgorICoKKyAqIEBwYXJhbSBpbl9zZXNzaW9uIEEgcG9pbnRlciB0byB0aGUgc2Vzc2lvbiB0aGF0IGNvbmZpZyBpbmZvcm1hdGlvbiBpcyBpbi4KKyAqIEBwYXJhbSB0cmFuc3BvcnQgQSBwb2ludGVyIHRvIHRoZSB0cmFuc3BvcnQgdG8gY29uZmlnL29wZW4uCisgKgorICogQHJldHVybiBTTk1QRVJSX1NVQ0NFU1MgOiBvbiBzdWNjZXNzCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIG5ldHNubXBfc2Vzc19jb25maWdfdHJhbnNwb3J0CisgKgorICogUGFyYW1ldGVyczoKKyAqCSppbl9zZXNzaW9uCisgKgkqaW5fdHJhbnNwb3J0CisgKgorICogUmV0dXJuczoKKyAqICAgICAgU05NUEVSUl9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgLSBZYXkKKyAqICAgICAgU05NUEVSUl9HRU5FUlIgICAgICAgICAgICAgICAgICAgICAgLSBHZW5lcmljIEVycm9yCisgKiAgICAgIFNOTVBFUlJfVFJBTlNQT1JUX0NPTkZJR19FUlJPUiAgICAgIC0gVHJhbnNwb3J0IHJlamVjdGVkIGNvbmZpZworICogICAgICBTTk1QRVJSX1RSQU5TUE9SVF9OT19DT05GSUcgICAgICAgICAtIFRyYW5zcG9ydCBjYW4ndCBjb25maWcKKyAqLworaW50CituZXRzbm1wX3Nlc3NfY29uZmlnX2FuZF9vcGVuX3RyYW5zcG9ydChuZXRzbm1wX3Nlc3Npb24gKmluX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworICAgIGludCByYzsKKyAgICAKKyAgICBERUJVR01TR1RMKCgic25tcF9zZXNzIiwgIm9wZW5pbmcgdHJhbnNwb3J0OiAleFxuIiwgdHJhbnNwb3J0LT5mbGFncyAmIE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfT1BFTkVEKSk7CisKKyAgICAvKiBkb24ndCBkb3VibGUgb3BlbiAqLworICAgIGlmICh0cmFuc3BvcnQtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19PUEVORUQpCisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBpZiAoKHJjID0gbmV0c25tcF9zZXNzX2NvbmZpZ190cmFuc3BvcnQoaW5fc2Vzc2lvbi0+dHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydCkpICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSByYzsKKyAgICAgICAgaW5fc2Vzc2lvbi0+c19lcnJubyA9IDA7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0cmFuc3BvcnQtPmZfb3BlbikKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0LT5mX29wZW4odHJhbnNwb3J0KTsKKworICAgIGlmICh0cmFuc3BvcnQgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzIiwgImNvdWxkbid0IGludGVycHJldCBwZWVybmFtZVxuIikpOworICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9BRERSRVNTOworICAgICAgICBpbl9zZXNzaW9uLT5zX2Vycm5vID0gZXJybm87CisgICAgICAgIHNubXBfc2V0X2RldGFpbChpbl9zZXNzaW9uLT5wZWVybmFtZSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0JBRF9BRERSRVNTOworICAgIH0KKworICAgIHRyYW5zcG9ydC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19PUEVORUQ7CisgICAgREVCVUdNU0dUTCgoInNubXBfc2VzcyIsICJkb25lIG9wZW5pbmcgdHJhbnNwb3J0OiAleFxuIiwgdHJhbnNwb3J0LT5mbGFncyAmIE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfT1BFTkVEKSk7CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKICAqIHNubXBfc2Vzc19vcGVuCkBAIC0xMzkyLDcyICsxNTMzLDc5IEBACiBzdGF0aWMgdm9pZCAgICAqCiBfc2Vzc19vcGVuKG5ldHNubXBfc2Vzc2lvbiAqIGluX3Nlc3Npb24pCiB7Ci0gICAgc3RydWN0IHNlc3Npb25fbGlzdCAqc2xwOwotICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKLSAgICBjaGFyICAgICAgICAgICAgKmNsaWVudGFkZHJfc2F2ZSA9IE5VTEw7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IE5VTEw7CisgICAgaW50IHJjOwogCiAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gMDsKICAgICBpbl9zZXNzaW9uLT5zX2Vycm5vID0gMDsKIAogICAgIF9pbml0X3NubXAoKTsKIAotICAgIGlmICgoc2xwID0gc25tcF9zZXNzX2NvcHkoaW5fc2Vzc2lvbikpID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICB9Ci0gICAgc2Vzc2lvbiA9IHNscC0+c2Vzc2lvbjsKLSAgICBzbHAtPnRyYW5zcG9ydCA9IE5VTEw7CisgICAgeworICAgICAgICBjaGFyICpjbGllbnRhZGRyX3NhdmUgPSBOVUxMOwogCi0gICAgaWYgKE5VTEwgIT0gc2Vzc2lvbi0+bG9jYWxuYW1lKSB7Ci0gICAgICAgIGNsaWVudGFkZHJfc2F2ZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUik7Ci0gICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUiwgc2Vzc2lvbi0+bG9jYWxuYW1lKTsKKyAgICAgICAgaWYgKE5VTEwgIT0gaW5fc2Vzc2lvbi0+bG9jYWxuYW1lKSB7CisgICAgICAgICAgICBjbGllbnRhZGRyX3NhdmUgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSKTsKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+bG9jYWxuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbl9zZXNzaW9uLT5mbGFncyAmIFNOTVBfRkxBR1NfU1RSRUFNX1NPQ0tFVCkgeworICAgICAgICAgICAgdHJhbnNwb3J0ID0KKyAgICAgICAgICAgICAgICBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwoInNubXAiLCBpbl9zZXNzaW9uLT5wZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+bG9jYWxfcG9ydCwgInRjcCx0Y3A2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0cmFuc3BvcnQgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbCgic25tcCIsIGluX3Nlc3Npb24tPnBlZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5sb2NhbF9wb3J0LCAidWRwLHVkcDYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChOVUxMICE9IGNsaWVudGFkZHJfc2F2ZSkKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIsIGNsaWVudGFkZHJfc2F2ZSk7CiAgICAgfQogCi0gICAgaWYgKHNlc3Npb24tPmZsYWdzICYgU05NUF9GTEFHU19TVFJFQU1fU09DS0VUKSB7Ci0gICAgICAgIHNscC0+dHJhbnNwb3J0ID0KLQkgIG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbCgic25tcCIsIHNlc3Npb24tPnBlZXJuYW1lLAotCQkJCQkgc2Vzc2lvbi0+bG9jYWxfcG9ydCwgInRjcCIsIE5VTEwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNscC0+dHJhbnNwb3J0ID0KLQkgIG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbCgic25tcCIsIHNlc3Npb24tPnBlZXJuYW1lLAotCQkJCQkgc2Vzc2lvbi0+bG9jYWxfcG9ydCwgInVkcCIsIE5VTEwpOwotICAgIH0KLQotICAgIGlmIChOVUxMICE9IHNlc3Npb24tPmxvY2FsbmFtZSkKLSAgICAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSLCBjbGllbnRhZGRyX3NhdmUpOwotCi0gICAgaWYgKHNscC0+dHJhbnNwb3J0ID09IE5VTEwpIHsKKyAgICBpZiAodHJhbnNwb3J0ID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoIl9zZXNzX29wZW4iLCAiY291bGRuJ3QgaW50ZXJwcmV0IHBlZXJuYW1lXG4iKSk7CiAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX0FERFJFU1M7CiAgICAgICAgIGluX3Nlc3Npb24tPnNfZXJybm8gPSBlcnJubzsKLSAgICAgICAgc25tcF9zZXRfZGV0YWlsKHNlc3Npb24tPnBlZXJuYW1lKTsKLSAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7CisgICAgICAgIHNubXBfc2V0X2RldGFpbChpbl9zZXNzaW9uLT5wZWVybmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHNlc3Npb24tPnJjdk1zZ01heFNpemUgPSBzbHAtPnRyYW5zcG9ydC0+bXNnTWF4U2l6ZTsKLQotICAgIGlmICghc25tcHYzX2VuZ2luZUlEX3Byb2JlKHNscCwgaW5fc2Vzc2lvbikpIHsKLSAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7CisgICAgLyogT3B0aW9uYWwgc3VwcGxpbWVudGFsIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZAorICAgICAgIGZpbmFsIGNhbGwgdG8gYWN0dWFsbHkgb3BlbiB0aGUgdHJhbnNwb3J0ICovCisgICAgaWYgKChyYyA9IG5ldHNubXBfc2Vzc19jb25maWdfYW5kX29wZW5fdHJhbnNwb3J0KGluX3Nlc3Npb24sIHRyYW5zcG9ydCkpCisgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICB0cmFuc3BvcnQgPSBOVUxMOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihzbHAtPnNlc3Npb24pICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1VOS05PV05fVVNFUl9OQU1FOyAgICAgICAvKiBYWD8/ICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsCi0gICAgICAgICAgICAgICAgICAgICJfc2Vzc19vcGVuKCk6IGZhaWxlZCgyKSB0byBjcmVhdGUgYSBuZXcgdXNlciBmcm9tIHNlc3Npb25cbiIpKTsKLSAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworCisjaWYgZGVmaW5lZChTT19CUk9BRENBU1QpICYmIGRlZmluZWQoU09MX1NPQ0tFVCkKKyAgICBpZiAoIGluX3Nlc3Npb24tPmZsYWdzICYgU05NUF9GTEFHU19VRFBfQlJPQURDQVNUKSB7CisgICAgICAgIGludCAgIGIgPSAxOworICAgICAgICBpbnQgICByYzsKKworICAgICAgICByYyA9IHNldHNvY2tvcHQodHJhbnNwb3J0LT5zb2NrLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZiLCBzaXplb2YoYikpOworCisgICAgICAgIGlmICggcmMgIT0gMCApIHsKKyAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX0FERFJFU1M7IC8qIGdvb2QgYXMgYW55PyAqLworICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19lcnJubyA9IGVycm5vOworCisgICAgICAgICAgICBERUJVR01TR1RMKCgiX3Nlc3Nfb3BlbiIsICJjb3VsZG4ndCBlbmFibGUgVURQX0JST0FEQ0FTVFxuIikpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgc2Vzc2lvbi0+ZmxhZ3MgJj0gflNOTVBfRkxBR1NfRE9OVF9QUk9CRTsKKyNlbmRpZgogCi0KLSAgICByZXR1cm4gKHZvaWQgKikgc2xwOwotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgc25tcF9zZXNzX29wZW4oKSAqLwotCi0KKyAgICByZXR1cm4gc25tcF9zZXNzX2FkZChpbl9zZXNzaW9uLCB0cmFuc3BvcnQsIE5VTEwsIE5VTEwpOworfQogCiAvKgogICogRVhURU5ERUQgU0VTU0lPTiBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIApAQCAtMTU1MSw3ICsxNjk5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpKQogewogICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNscDsKLQorICAgIGludCByYzsKKyAgICAKICAgICBfaW5pdF9zbm1wKCk7CiAKICAgICBpZiAodHJhbnNwb3J0ID09IE5VTEwpCkBAIC0xNTYzLDggKzE3MTIsMjQgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgLyogaWYgdGhlIHRyYW5zcG9ydCBoYXNuJ3QgYmVlbiBmdWxseSBvcGVuZWQgeWV0LCBvcGVuIGl0IG5vdyAqLworICAgIGlmICgocmMgPSBuZXRzbm1wX3Nlc3NfY29uZmlnX2FuZF9vcGVuX3RyYW5zcG9ydChpbl9zZXNzaW9uLCB0cmFuc3BvcnQpKQorICAgICAgICAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHRyYW5zcG9ydC0+Zl9zZXR1cF9zZXNzaW9uKSB7CisgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0KKyAgICAgICAgICAgIHRyYW5zcG9ydC0+Zl9zZXR1cF9zZXNzaW9uKHRyYW5zcG9ydCwgaW5fc2Vzc2lvbikpIHsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodHJhbnNwb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIAogICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3NfYWRkIiwgImZkICVkXG4iLCB0cmFuc3BvcnQtPnNvY2spKTsKIAorCiAgICAgaWYgKChzbHAgPSBzbm1wX3Nlc3NfY29weShpbl9zZXNzaW9uKSkgPT0gTlVMTCkgewogICAgICAgICB0cmFuc3BvcnQtPmZfY2xvc2UodHJhbnNwb3J0KTsKICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0cmFuc3BvcnQpOwpAQCAtMTU4NCwxOSArMTc0OSwxMiBAQAogCiAgICAgaWYgKHNscC0+c2Vzc2lvbi0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMykgewogICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX2FkZCIsCi0gICAgICAgICAgICAgICAgICAgICJhZGRpbmcgdjMgc2Vzc2lvbiAtLSBlbmdpbmVJRCBwcm9iZSBub3dcbiIpKTsKLSAgICAgICAgaWYgKCFzbm1wdjNfZW5naW5lSURfcHJvYmUoc2xwLCBpbl9zZXNzaW9uKSkgeworICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIHYzIHNlc3Npb24gLS0gbWF5YmUgZW5naW5lSUQgcHJvYmUgbm93XG4iKSk7CisgICAgICAgIGlmICghc25tcHYzX2VuZ2luZUlEX3Byb2JlKHNscCwgc2xwLT5zZXNzaW9uKSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19hZGQiLCAiZW5naW5lIElEIHByb2JlIGZhaWxlZFxuIikpOwogICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKHNscC0+c2Vzc2lvbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1VOS05PV05fVVNFUl9OQU1FOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzbm1wX3Nlc3NfYWRkKCk6IGZhaWxlZCgyKSB0byBjcmVhdGUgYSBuZXcgdXNlciBmcm9tIHNlc3Npb25cbiIpKTsKLSAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBzbHAtPnNlc3Npb24tPmZsYWdzICY9IH5TTk1QX0ZMQUdTX0RPTlRfUFJPQkU7CkBAIC0xNjMwLDIyNSArMTc4OCwxNyBAQAogICAgIHJldHVybiBwdm9pZDsKIH0KIAotCi0KLS8qCi0gKiBjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKToKLSAqIAotICogY3JlYXRlcyBhIHVzZXIgaW4gdGhlIHVzbSB0YWJsZSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiBhIHNlc3Npb24uCi0gKiBJZiB0aGUgdXNlciBhbHJlYWR5IGV4aXN0cywgaXQgaXMgdXBkYXRlZCB3aXRoIHRoZSBjdXJyZW50Ci0gKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXNzaW9uCi0gKiAKLSAqIFBhcmFtZXRlcnM6Ci0gKiBzZXNzaW9uIC0tIElOOiBwb2ludGVyIHRvIHRoZSBzZXNzaW9uIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSB1c2VyLgotICogCi0gKiBSZXR1cm5zOgotICogU05NUEVSUl9TVUNDRVNTCi0gKiBTTk1QRVJSX0dFTkVSUiAKLSAqLwogaW50Ci1jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbikKLXsKLSAgICBzdHJ1Y3QgdXNtVXNlciAqdXNlcjsKLSAgICBpbnQgICAgICAgICAgICAgdXNlcl9qdXN0X2NyZWF0ZWQgPSAwOwotICAgIGNoYXIgKmNwOworY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24pIHsKKyNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KKyAgICByZXR1cm4gdXNtX2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihzZXNzaW9uKTsKKyNlbHNlCisgICAgc25tcF9sb2coTE9HX0VSUiwgImNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbiBjYWxsZWQgd2hlbiBVU00gd2Fzbid0IGNvbXBpbGVkIGluIik7CisgICAgbmV0c25tcF9hc3NlcnQoMCA9PSAxKTsKKyAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworI2VuZGlmCit9CiAKLSAgICAvKgotICAgICAqIC0gZG9uJ3QgY3JlYXRlLWFub3RoZXIvY29weS1pbnRvIHVzZXIgZm9yIHRoaXMgc2Vzc2lvbiBieSBkZWZhdWx0Ci0gICAgICogLSBiYWlsIG5vdyAobm8gZXJyb3IpIGlmIHdlIGRvbid0IGhhdmUgYW4gZW5naW5lSUQKLSAgICAgKi8KLSAgICBpZiAoU05NUF9GTEFHU19VU0VSX0NSRUFURUQgPT0gKHNlc3Npb24tPmZsYWdzICYgU05NUF9GTEFHU19VU0VSX0NSRUFURUQpIHx8Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TW9kZWwgIT0gU05NUF9TRUNfTU9ERUxfVVNNIHx8Ci0gICAgICAgIHNlc3Npb24tPnZlcnNpb24gIT0gU05NUF9WRVJTSU9OXzMgfHwKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lTGVuID09IDAgfHwKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwKQotICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwotCi0gICAgc2Vzc2lvbi0+ZmxhZ3MgfD0gU05NUF9GTEFHU19VU0VSX0NSRUFURUQ7Ci0KLSAgICAvKgotICAgICAqIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGVuZ2luZUlELCBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIFVTTSBsaXN0Ci0gICAgICogZm9yIHRoaXMgdXNlciB1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHNlc3Npb24gCi0gICAgICovCi0gICAgdXNlciA9IHVzbV9nZXRfdXNlcl9mcm9tX2xpc3Qoc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21fZ2V0X3VzZXJMaXN0KCksIDApOwotICAgIGlmICh1c2VyID09IE5VTEwpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgIkJ1aWxkaW5nIHVzZXIgJXMuLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZSkpOwotICAgICAgICAvKgotICAgICAgICAgKiB1c2VyIGRvZXNuJ3QgZXhpc3Qgc28gd2UgY3JlYXRlIGFuZCBhZGQgaXQgCi0gICAgICAgICAqLwotICAgICAgICB1c2VyID0gKHN0cnVjdCB1c21Vc2VyICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHVzbVVzZXIpKTsKLSAgICAgICAgaWYgKHVzZXIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLQotICAgICAgICAvKgotICAgICAgICAgKiBjb3B5IGluIHRoZSBzZWN1cml0eU5hbWUgCi0gICAgICAgICAqLwotICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKSB7Ci0gICAgICAgICAgICB1c2VyLT5uYW1lID0gc3RyZHVwKHNlc3Npb24tPnNlY3VyaXR5TmFtZSk7Ci0gICAgICAgICAgICB1c2VyLT5zZWNOYW1lID0gc3RyZHVwKHNlc3Npb24tPnNlY3VyaXR5TmFtZSk7Ci0gICAgICAgICAgICBpZiAodXNlci0+bmFtZSA9PSBOVUxMIHx8IHVzZXItPnNlY05hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogY29weSBpbiB0aGUgZW5naW5lSUQgCi0gICAgICAgICAqLwotICAgICAgICB1c2VyLT5lbmdpbmVJRCA9IG5ldHNubXBfbWVtZHVwKHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbik7Ci0gICAgICAgIGlmICghdXNlci0+ZW5naW5lSUQpIHsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgIH0KLSAgICAgICAgdXNlci0+ZW5naW5lSURMZW4gPSBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuOwotCi0gICAgICAgIHVzZXJfanVzdF9jcmVhdGVkID0gMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNvcHkgdGhlIGF1dGggcHJvdG9jb2wgCi0gICAgICovCi0gICAgaWYgKHVzZXItPmF1dGhQcm90b2NvbCA9PSBOVUxMICYmIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhQcm90b2NvbCk7Ci0gICAgICAgIHVzZXItPmF1dGhQcm90b2NvbCA9Ci0gICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuKTsKLSAgICAgICAgaWYgKHVzZXItPmF1dGhQcm90b2NvbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICB9Ci0gICAgICAgIHVzZXItPmF1dGhQcm90b2NvbExlbiA9IHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY29weSB0aGUgcHJpdiBwcm90b2NvbCAKLSAgICAgKi8KLSAgICBpZiAodXNlci0+cHJpdlByb3RvY29sID09IE5VTEwgJiYgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8gIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdlByb3RvY29sKTsKLSAgICAgICAgdXNlci0+cHJpdlByb3RvY29sID0KLSAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW4pOwotICAgICAgICBpZiAodXNlci0+cHJpdlByb3RvY29sID09IE5VTEwpIHsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgIH0KLSAgICAgICAgdXNlci0+cHJpdlByb3RvY29sTGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW47Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjb3B5IGluIHRoZSBhdXRoZW50aWNhdGlvbiBLZXkuICBJZiBub3QgbG9jYWxpemVkLCBsb2NhbGl6ZSBpdCAKLSAgICAgKi8KLSAgICBpZiAodXNlci0+YXV0aEtleSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleSAhPSBOVUxMCi0gICAgICAgICAgICAmJiBzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleUxlbiAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBhbHJlYWR5IGxvY2FsaXplZCBrZXkgcGFzc2VkIGluLiAgdXNlIGl0ICovCi0gICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aEtleSk7Ci0gICAgICAgICAgICB1c2VyLT5hdXRoS2V5ID0gbmV0c25tcF9tZW1kdXAoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXlMZW4pOwotICAgICAgICAgICAgaWYgKCF1c2VyLT5hdXRoS2V5KSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1c2VyLT5hdXRoS2V5TGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXlMZW47Ci0gICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5ICE9IE5VTEwKLSAgICAgICAgICAgICAgICAgICAmJiBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gIT0gMCkgewotICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhLZXkpOwotICAgICAgICAgICAgdXNlci0+YXV0aEtleSA9ICh1X2NoYXIgKikgY2FsbG9jKDEsIFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLKTsKLSAgICAgICAgICAgIGlmICh1c2VyLT5hdXRoS2V5ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVzZXItPmF1dGhLZXlMZW4gPSBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSzsKLSAgICAgICAgICAgIGlmIChnZW5lcmF0ZV9rdWwodXNlci0+YXV0aFByb3RvY29sLCB1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuLCB1c2VyLT5hdXRoS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YXV0aEtleUxlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FVVEhMT0NBTElaRURLRVkpKSkgewotICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IFVTTV9BVVRIX0tVX0xFTjsKLSAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoS2V5KTsKLSAgICAgICAgICAgIHVzZXItPmF1dGhLZXkgPSAodV9jaGFyICopbWFsbG9jKGJ1Zmxlbik7IC8qIG1heCBsZW5ndGggbmVlZGVkICovCi0gICAgICAgICAgICB1c2VyLT5hdXRoS2V5TGVuID0gMDsKLSAgICAgICAgICAgIC8qIGl0IHdpbGwgYmUgYSBoZXggc3RyaW5nICovCi0gICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdXNlci0+YXV0aEtleSwgJmJ1ZmxlbiwgJnVzZXItPmF1dGhLZXlMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjcCkpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogY29weSBpbiB0aGUgcHJpdmFjeSBLZXkuICBJZiBub3QgbG9jYWxpemVkLCBsb2NhbGl6ZSBpdCAKLSAgICAgKi8KLSAgICBpZiAodXNlci0+cHJpdktleSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleSAhPSBOVUxMCi0gICAgICAgICAgICAmJiBzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleUxlbiAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBhbHJlYWR5IGxvY2FsaXplZCBrZXkgcGFzc2VkIGluLiAgdXNlIGl0ICovCi0gICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdktleSk7Ci0gICAgICAgICAgICB1c2VyLT5wcml2S2V5ID0gbmV0c25tcF9tZW1kdXAoc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXlMZW4pOwotICAgICAgICAgICAgaWYgKCF1c2VyLT5wcml2S2V5KSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1c2VyLT5wcml2S2V5TGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXlMZW47Ci0gICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5ICE9IE5VTEwKLSAgICAgICAgICAgICAgICAgICAmJiBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gIT0gMCkgewotICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPnByaXZLZXkpOwotICAgICAgICAgICAgdXNlci0+cHJpdktleSA9ICh1X2NoYXIgKikgY2FsbG9jKDEsIFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLKTsKLSAgICAgICAgICAgIGlmICh1c2VyLT5wcml2S2V5ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVzZXItPnByaXZLZXlMZW4gPSBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSzsKLSAgICAgICAgICAgIGlmIChnZW5lcmF0ZV9rdWwodXNlci0+YXV0aFByb3RvY29sLCB1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuLCB1c2VyLT5wcml2S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+cHJpdktleUxlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1BSSVZMT0NBTElaRURLRVkpKSkgewotICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IFVTTV9QUklWX0tVX0xFTjsKLSAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2S2V5KTsKLSAgICAgICAgICAgIHVzZXItPnByaXZLZXkgPSAodV9jaGFyICopbWFsbG9jKGJ1Zmxlbik7IC8qIG1heCBsZW5ndGggbmVlZGVkICovCi0gICAgICAgICAgICB1c2VyLT5wcml2S2V5TGVuID0gMDsKLSAgICAgICAgICAgIC8qIGl0IHdpbGwgYmUgYSBoZXggc3RyaW5nICovCi0gICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdXNlci0+cHJpdktleSwgJmJ1ZmxlbiwgJnVzZXItPnByaXZLZXlMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjcCkpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh1c2VyX2p1c3RfY3JlYXRlZCkgewotICAgICAgICAvKgotICAgICAgICAgKiBhZGQgdGhlIHVzZXIgaW50byB0aGUgZGF0YWJhc2UgCi0gICAgICAgICAqLwotICAgICAgICB1c2VyLT51c2VyU3RhdHVzID0gUlNfQUNUSVZFOwotICAgICAgICB1c2VyLT51c2VyU3RvcmFnZVR5cGUgPSBTVF9SRUFET05MWTsKLSAgICAgICAgdXNtX2FkZF91c2VyKHVzZXIpOwotICAgIH0KLQotICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Ci0KLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKCkgKi8KIAogLyoKICAqICBEbyBhICJkZWVwIGZyZWUoKSIgb2YgYSBuZXRzbm1wX3Nlc3Npb24uCkBAIC0xOTA2LDcgKzE4NTYsNyBAQAogICAgIH0KIAogICAgIGlzcCA9IHNscC0+aW50ZXJuYWw7Ci0gICAgc2xwLT5pbnRlcm5hbCA9IDA7CisgICAgc2xwLT5pbnRlcm5hbCA9IE5VTEw7CiAKICAgICBpZiAoaXNwKSB7CiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9saXN0ICpycCwgKm9ycDsKQEAgLTE5MzMsNyArMTg4Myw3IEBACiAgICAgfQogCiAgICAgdHJhbnNwb3J0ID0gc2xwLT50cmFuc3BvcnQ7Ci0gICAgc2xwLT50cmFuc3BvcnQgPSAwOworICAgIHNscC0+dHJhbnNwb3J0ID0gTlVMTDsKIAogICAgIGlmICh0cmFuc3BvcnQpIHsKICAgICAgICAgdHJhbnNwb3J0LT5mX2Nsb3NlKHRyYW5zcG9ydCk7CkBAIC0xOTQxLDcgKzE4OTEsNyBAQAogICAgIH0KIAogICAgIHNlc3AgPSBzbHAtPnNlc3Npb247Ci0gICAgc2xwLT5zZXNzaW9uID0gMDsKKyAgICBzbHAtPnNlc3Npb24gPSBOVUxMOwogCiAgICAgLyoKICAgICAgKiBUaGUgZm9sbG93aW5nIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSB3aGVuIGNsb3NpbmcgQWdlbnRYIApAQCAtMjAxMCw0OSArMTk2MCw2IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQKLXNubXB2M19idWlsZF9wcm9iZV9wZHUobmV0c25tcF9wZHUgKipwZHUpCi17Ci0gICAgc3RydWN0IHVzbVVzZXIgKnVzZXI7Ci0KLSAgICAvKgotICAgICAqIGNyZWF0ZSB0aGUgcGR1IAotICAgICAqLwotICAgIGlmICghcGR1KQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgKnBkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19HRVQpOwotICAgIGlmICghKCpwZHUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgKCpwZHUpLT52ZXJzaW9uID0gU05NUF9WRVJTSU9OXzM7Ci0gICAgKCpwZHUpLT5zZWN1cml0eU5hbWUgPSBzdHJkdXAoIiIpOwotICAgICgqcGR1KS0+c2VjdXJpdHlOYW1lTGVuID0gc3RybGVuKCgqcGR1KS0+c2VjdXJpdHlOYW1lKTsKLSAgICAoKnBkdSktPnNlY3VyaXR5TGV2ZWwgPSBTTk1QX1NFQ19MRVZFTF9OT0FVVEg7Ci0gICAgKCpwZHUpLT5zZWN1cml0eU1vZGVsID0gU05NUF9TRUNfTU9ERUxfVVNNOwotCi0gICAgLyoKLSAgICAgKiBjcmVhdGUgdGhlIGVtcHR5IHVzZXIgCi0gICAgICovCi0gICAgdXNlciA9IHVzbV9nZXRfdXNlcihOVUxMLCAwLCAoKnBkdSktPnNlY3VyaXR5TmFtZSk7Ci0gICAgaWYgKHVzZXIgPT0gTlVMTCkgewotICAgICAgICB1c2VyID0gKHN0cnVjdCB1c21Vc2VyICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHVzbVVzZXIpKTsKLSAgICAgICAgaWYgKHVzZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgc25tcF9mcmVlX3BkdSgqcGR1KTsKLSAgICAgICAgICAgICpwZHUgPSAobmV0c25tcF9wZHUgKikgTlVMTDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICB1c2VyLT5uYW1lID0gc3RyZHVwKCgqcGR1KS0+c2VjdXJpdHlOYW1lKTsKLSAgICAgICAgdXNlci0+c2VjTmFtZSA9IHN0cmR1cCgoKnBkdSktPnNlY3VyaXR5TmFtZSk7Ci0gICAgICAgIHVzZXItPmF1dGhQcm90b2NvbExlbiA9IHNpemVvZih1c21Ob0F1dGhQcm90b2NvbCkgLyBzaXplb2Yob2lkKTsKLSAgICAgICAgdXNlci0+YXV0aFByb3RvY29sID0KLSAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHVzbU5vQXV0aFByb3RvY29sLCB1c2VyLT5hdXRoUHJvdG9jb2xMZW4pOwotICAgICAgICB1c2VyLT5wcml2UHJvdG9jb2xMZW4gPSBzaXplb2YodXNtTm9Qcml2UHJvdG9jb2wpIC8gc2l6ZW9mKG9pZCk7Ci0gICAgICAgIHVzZXItPnByaXZQcm90b2NvbCA9Ci0gICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZCh1c21Ob1ByaXZQcm90b2NvbCwgdXNlci0+cHJpdlByb3RvY29sTGVuKTsKLSAgICAgICAgdXNtX2FkZF91c2VyKHVzZXIpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQKIHNubXB2M19jYWxjX21zZ19mbGFncyhpbnQgc2VjX2xldmVsLCBpbnQgbXNnX2NvbW1hbmQsIHVfY2hhciAqIGZsYWdzKQogewpAQCAtMjA5NywxMCArMjAwNCwxNiBAQAogICAgIGlmIChycGR1LT5jb250ZXh0TmFtZUxlbiAhPSBwZHUtPmNvbnRleHROYW1lTGVuIHx8CiAgICAgICAgIG1lbWNtcChycGR1LT5jb250ZXh0TmFtZSwgcGR1LT5jb250ZXh0TmFtZSwgcGR1LT5jb250ZXh0TmFtZUxlbikpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChycGR1LT5zZWN1cml0eUVuZ2luZUlETGVuICE9IHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbiB8fAorCisgICAgLyogdHVubmVsZWQgdHJhbnNwb3J0cyBkb24ndCBoYXZlIGEgc2VjdXJpdHlFbmdpbmVJRC4uLiAgdGhhdCdzCisgICAgICAgVVNNIHNwZWNpZmljIChhbmQgbWF5YmUgb3RoZXIgZnV0dXJlIG9uZXMpICovCisgICAgaWYgKHBkdS0+c2VjdXJpdHlNb2RlbCA9PSBTTk1QX1NFQ19NT0RFTF9VU00gJiYKKyAgICAgICAgKHJwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4gIT0gcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuIHx8CiAgICAgICAgIG1lbWNtcChycGR1LT5zZWN1cml0eUVuZ2luZUlELCBwZHUtPnNlY3VyaXR5RW5naW5lSUQsCi0gICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4pKQorICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuKSkpCiAgICAgICAgIHJldHVybiAwOworCisgICAgLyogdGhlIHNlY3VyaXR5TmFtZSBtdXN0IG1hdGNoIHRob3VnaCByZWdhcmRsZXNzIG9mIHNlY21vZGVsICovCiAgICAgaWYgKHJwZHUtPnNlY3VyaXR5TmFtZUxlbiAhPSBwZHUtPnNlY3VyaXR5TmFtZUxlbiB8fAogICAgICAgICBtZW1jbXAocnBkdS0+c2VjdXJpdHlOYW1lLCBwZHUtPnNlY3VyaXR5TmFtZSwKICAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lTGVuKSkKQEAgLTIxMzYsOSArMjA0OSwxMyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBGYWxsdGhyb3VnaCAKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9USUZZX09OTFkKICAgICBjYXNlIFNOTVBfTVNHX0dFVDoKICAgICBjYXNlIFNOTVBfTVNHX0dFVE5FWFQ6CisjZW5kaWYgLyogISBORVRTTk1QX05PVElGWV9PTkxZICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUF9NU0dfU0VUOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBjYXNlIFNOTVBfTVNHX0lORk9STToKICAgICAgICAgaWYgKHBkdS0+ZXJyc3RhdCA9PSBTTk1QX0RFRkFVTFRfRVJSU1RBVCkKICAgICAgICAgICAgIHBkdS0+ZXJyc3RhdCA9IDA7CkBAIC0yMTQ2LDYgKzIwNjMsNyBAQAogICAgICAgICAgICAgcGR1LT5lcnJpbmRleCA9IDA7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9USUZZX09OTFkKICAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6CiAgICAgICAgIGlmIChwZHUtPm1heF9yZXBldGl0aW9ucyA8IDApIHsKICAgICAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX1JFUEVUSVRJT05TOwpAQCAtMjE1Niw2ICsyMDc0LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhIE5FVFNOTVBfTk9USUZZX09OTFkgKi8KIAogICAgIGNhc2UgU05NUF9NU0dfVFJBUDoKICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9WMV9JTl9WMjsKQEAgLTIyMDYsMjAgKzIxMjUsMzAgQEAKICAgICBpZiAocGR1LT5zZWN1cml0eU1vZGVsID09IFNOTVBfREVGQVVMVF9TRUNNT0RFTCkgewogICAgICAgICBwZHUtPnNlY3VyaXR5TW9kZWwgPSBzZXNzaW9uLT5zZWN1cml0eU1vZGVsOwogICAgICAgICBpZiAocGR1LT5zZWN1cml0eU1vZGVsID09IFNOTVBfREVGQVVMVF9TRUNNT0RFTCkgewotICAgICAgICAgICAgcGR1LT5zZWN1cml0eU1vZGVsID0gU05NUF9TRUNfTU9ERUxfVVNNOworICAgICAgICAgICAgcGR1LT5zZWN1cml0eU1vZGVsID0gc2VfZmluZF92YWx1ZV9pbl9zbGlzdCgic25tcF9zZWNtb2RzIiwgbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfU0VDTU9ERUwpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlNb2RlbCA8PSAwKSB7CisgICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eU1vZGVsID0gU05NUF9TRUNfTU9ERUxfVVNNOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZUxlbiA9PSAwICYmIHBkdS0+c2VjdXJpdHlOYW1lID09IDApIHsKLSAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TmFtZUxlbiA9PSAwKSB7CisgICAgaWYgKHBkdS0+c2VjdXJpdHlOYW1lTGVuID09IDAgJiYgcGR1LT5zZWN1cml0eU5hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlNb2RlbCAhPSBTTk1QX1NFQ19NT0RFTF9UU00gJiYKKyAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZUxlbiA9PSAwKSB7CiAgICAgICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9TRUNfTkFNRTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZSA9IHN0cmR1cChzZXNzaW9uLT5zZWN1cml0eU5hbWUpOwotICAgICAgICBpZiAocGR1LT5zZWN1cml0eU5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eU5hbWUpIHsKKyAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKHNlc3Npb24tPnNlY3VyaXR5TmFtZSk7CisgICAgICAgICAgICBpZiAocGR1LT5zZWN1cml0eU5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lTGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlOYW1lTGVuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGR1LT5zZWN1cml0eU5hbWUgPSBzdHJkdXAoIiIpOworICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKCIiKTsKICAgICAgICAgfQotICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZUxlbiA9IHNlc3Npb24tPnNlY3VyaXR5TmFtZUxlbjsKICAgICB9CiAgICAgaWYgKHBkdS0+c2VjdXJpdHlMZXZlbCA9PSAwKSB7CiAgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUxldmVsID09IDApIHsKQEAgLTI3OTAsNyArMjcxOSw3IEBACiAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1KQogewogI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotICAgIHVfY2hhciAgICAgICAgICpoMGUgPSAwOworICAgIHVfY2hhciAgICAgICAgICpoMGUgPSBOVUxMOwogICAgIHNpemVfdCAgICAgICAgICBzdGFydF9vZmZzZXQgPSAqb2Zmc2V0OwogICAgIGxvbmcgICAgICAgICAgICB2ZXJzaW9uOwogICAgIGludCAgICAgICAgICAgICByYyA9IDA7CkBAIC0yODEyLDkgKzI3NDEsMTMgQEAKICAgICAgICAgLyoKICAgICAgICAgICogRmFsbHRocm91Z2ggCiAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PVElGWV9PTkxZCiAgICAgY2FzZSBTTk1QX01TR19HRVQ6CiAgICAgY2FzZSBTTk1QX01TR19HRVRORVhUOgorI2VuZGlmIC8qICEgTkVUU05NUF9OT1RJRllfT05MWSAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIC8qCiAgICAgICAgICAqIGFsbCB2ZXJzaW9ucyBzdXBwb3J0IHRoZXNlIFBEVSB0eXBlcyAKICAgICAgICAgICovCkBAIC0yODQ5LDYgKzI3ODIsNyBAQAogICAgICAgICAgICAgcGR1LT5lcnJpbmRleCA9IDA7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9USUZZX09OTFkKICAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6CiAgICAgICAgIC8qCiAgICAgICAgICAqIG5vdCBzdXBwb3J0ZWQgaW4gU05NUHYxIGFuZCBTTk1Qc2VjIApAQCAtMjg2OCw2ICsyODAyLDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhIE5FVFNOTVBfTk9USUZZX09OTFkgKi8KIAogICAgIGNhc2UgU05NUF9NU0dfVFJBUDoKICAgICAgICAgLyoKQEAgLTI5NTEsNyArMjg4Niw2IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICgwID09IHNlc3Npb24tPmNvbW11bml0eV9sZW4pIHsKICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUocGR1LT5jb21tdW5pdHkpOwotICAgICAgICAgICAgICAgIHBkdS0+Y29tbXVuaXR5ID0gTlVMTDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAocGR1LT5jb21tdW5pdHlfbGVuID09IHNlc3Npb24tPmNvbW11bml0eV9sZW4pIHsKICAgICAgICAgICAgICAgICBtZW1tb3ZlKHBkdS0+Y29tbXVuaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+Y29tbXVuaXR5LCBzZXNzaW9uLT5jb21tdW5pdHlfbGVuKTsKQEAgLTI5NjksNyArMjkwMyw3IEBACiAgICAgICAgIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIU5FVFNOTVBfTk9fWkVST0xFTkdUSF9DT01NVU5JVFkgKi8KIAotICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZW5kIiwgIkJ1aWxkaW5nIFNOTVB2JWQgbWVzc2FnZS4uLlxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2VuZCIsICJCdWlsZGluZyBTTk1QdiVsZCBtZXNzYWdlLi4uXG4iLAogICAgICAgICAgICAgICAgICAgICAoMSArIHBkdS0+dmVyc2lvbikpKTsKICNpZmRlZiBORVRTTk1QX1VTRV9SRVZFUlNFX0FTTkVOQ09ESU5HCiAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfUkVWRVJTRV9FTkNPREUpKSB7CkBAIC0zNTU3LDggKzM0OTEsMTAgQEAKICAgICBkYXRhID0gYXNuX3BhcnNlX3NlcXVlbmNlKGRhdGEsICZsZW5ndGgsICZ0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFTTl9TRVFVRU5DRSB8IEFTTl9DT05TVFJVQ1RPUiksICJ2ZXJzaW9uIik7CiAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgREVCVUdEVU1QSEVBREVSKCJyZWN2IiwgIlNOTVAgVmVyc2lvbiIpOwogICAgICAgICBkYXRhID0KICAgICAgICAgICAgIGFzbl9wYXJzZV9pbnQoZGF0YSwgJmxlbmd0aCwgJnR5cGUsICZ2ZXJzaW9uLCBzaXplb2YodmVyc2lvbikpOworICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgaWYgKCFkYXRhIHx8IHR5cGUgIT0gQVNOX0lOVEVHRVIpIHsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0JBRF9WRVJTSU9OOwogICAgICAgICB9CkBAIC0zODYwLDkgKzM3OTYsNyBAQAogICAgICAgICAgICAgREVCVUdJTkRFTlRBREQoLTQpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1hbGxvY2J1ZikgewotICAgICAgICAgICAgU05NUF9GUkVFKG1hbGxvY2J1Zik7Ci0gICAgICAgIH0KKyAgICAgICAgU05NUF9GUkVFKG1hbGxvY2J1Zik7CiAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgIH0KIApAQCAtMzg3NSw5ICszODA5LDcgQEAKICAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1NOTVBJTkFTTlBBUlNFRVJSUyk7CiAgICAgICAgIERFQlVHSU5ERU5UQUREKC00KTsKLSAgICAgICAgaWYgKG1hbGxvY2J1ZikgewotICAgICAgICAgICAgU05NUF9GUkVFKG1hbGxvY2J1Zik7Ci0gICAgICAgIH0KKyAgICAgICAgU05NUF9GUkVFKG1hbGxvY2J1Zik7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX0FTTl9QQVJTRV9FUlI7CiAgICAgfQogCkBAIC0zOTAwLDE1ICszODMyLDExIEBACiAgICAgaWYgKHJldCAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKICAgICAgICAgRVJST1JfTVNHKCJlcnJvciBwYXJzaW5nIFBEVSIpOwogICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9TTk1QSU5BU05QQVJTRUVSUlMpOwotICAgICAgICBpZiAobWFsbG9jYnVmKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUobWFsbG9jYnVmKTsKLSAgICAgICAgfQorICAgICAgICBTTk1QX0ZSRUUobWFsbG9jYnVmKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfQVNOX1BBUlNFX0VSUjsKICAgICB9CiAKLSAgICBpZiAobWFsbG9jYnVmKSB7Ci0gICAgICAgIFNOTVBfRlJFRShtYWxsb2NidWYpOwotICAgIH0KKyAgICBTTk1QX0ZSRUUobWFsbG9jYnVmKTsKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgc25tcHYzX3BhcnNlKCkgKi8KIApAQCAtNDAyMCwxMyArMzk0OCwxNyBAQAogICAgIC8qCiAgICAgICogZmluZCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY291bnRlciAgCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBVElTVElDUwogICAgIGx0bXAgPSBzbm1wX2dldF9zdGF0aXN0aWMoc3RhdF9pbmQpOworI2Vsc2UgLyogIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBVElTVElDUyAqLworICAgIGx0bXAgPSAxOworI2VuZGlmIC8qICFORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVRJU1RJQ1MgKi8KIAogICAgIC8qCiAgICAgICogcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb3VudGVyICAKICAgICAgKi8KICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBlcnJfdmFyLCBlcnJfdmFyX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0NPVU5URVIsICh1X2NoYXIgKikgJiBsdG1wLCBzaXplb2YobHRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fQ09VTlRFUiwgJiBsdG1wLCBzaXplb2YobHRtcCkpOwogCiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHNubXB2M19tYWtlX3JlcG9ydCgpICovCkBAIC00MTIxLDYgKzQwNTMsMTQgQEAKICNlbmRpZgogICAgIGludCAgICAgICAgICAgICByZXN1bHQgPSAtMTsKIAorICAgIHN0YXRpYyBvaWQgICAgICBzbm1wRW5naW5lSURvaWRbXSAgID0geyAxLDMsNiwxLDYsMywxMCwyLDEsMSwwfTsKKyAgICBzdGF0aWMgc2l6ZV90ICAgc25tcEVuZ2luZUlEb2lkX2xlbiA9IDExOworCisgICAgc3RhdGljIGNoYXIgICAgIG91ckVuZ2luZUlEW1NOTVBfU0VDX1BBUkFNX0JVRl9TSVpFXTsKKyAgICBzdGF0aWMgc2l6ZV90ICAgb3VyRW5naW5lSURfbGVuID0gc2l6ZW9mKG91ckVuZ2luZUlEKTsKKworICAgIG5ldHNubXBfcGR1ICAgICpwZHUyID0gTlVMTDsKKwogICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IDA7CiAgICAgc2Vzc2lvbi0+c19lcnJubyA9IDA7CiAKQEAgLTQxNDUsNyArNDA4NSw3IEBACiAgICAgY2FzZSBTTk1QX1ZFUlNJT05fMmM6CiAjZW5kaWYKICNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgIlBhcnNpbmcgU05NUHYlZCBtZXNzYWdlLi4uXG4iLAorICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAiUGFyc2luZyBTTk1QdiVsZCBtZXNzYWdlLi4uXG4iLAogICAgICAgICAgICAgICAgICAgICAoMSArIHBkdS0+dmVyc2lvbikpKTsKIAogICAgICAgICAvKgpAQCAtNDI0NCw2ICs0MTg0LDEyMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIC8qIEltcGxlbWVudCBSRkM1MzQzIGhlcmUgZm9yIHR3byByZWFzb25zOgorICAgICAgICAgICAxKSBGcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUgaXQgaGFuZGxlcyB0aGlzIG90aGVyd2lzZQorICAgICAgICAgICAgICBhbHdheXMgYXBwcm92ZWQgcmVxdWVzdCBlYXJsaWVyLiAgSXQgYnlwYXNzZXMgdGhlIG5lZWQKKyAgICAgICAgICAgICAgZm9yIGF1dGhvcml6YXRpb24gdG8gdGhlIHNubXBFbmdpbmVJRCBzY2FsYXIsIHdoaWNoIGlzCisgICAgICAgICAgICAgIHdoYXQgaXMgd2hhdCBSRkMzNDE1IGFwcGVuZGl4IEEgc3BlY2llcyBhcyBvay4gIE5vdGUKKyAgICAgICAgICAgICAgdGhhdCB3ZSBoYXZlbid0IGJ5cGFzc2VkIGF1dGhlbnRpY2F0aW9uIHNpbmNlIGlmIHRoZXJlCisgICAgICAgICAgICAgIHdhcyBhbiBhdXRoZW50aWNhdGlvbiBlcm9yIGl0IHdvdWxkIGhhdmUgYmVlbiBoYW5kbGVkCisgICAgICAgICAgICAgIGFib3ZlIGluIHRoZSBpZihyZXN1bHQpIHBhcnQgYXQgdGhlIGxhc3RldC4KKyAgICAgICAgICAgMikgRnJvbSBhbiBhcHBsaWNhdGlvbiBwb2ludCBvZiB2aWV3IGlmIHdlIGxldCB0aGlzIHJlcXVlc3QKKyAgICAgICAgICAgICAgZ2V0IGFsbCB0aGUgd2F5IHRvIHRoZSBhcHBsaWNhdGlvbiwgaXQnZCByZXF1aXJlIHRoYXQKKyAgICAgICAgICAgICAgYWxsIGFwcGxpY2F0aW9uIHR5cGVzIHN1cHBvcnRpbmcgZGlzY292ZXJ5IGFsc28gZmlyZSB1cAorICAgICAgICAgICAgICBhIG1pbmltYWwgYWdlbnQgaW4gb3JkZXIgdG8gaGFuZGxlIGp1c3QgdGhpcyByZXF1ZXN0CisgICAgICAgICAgICAgIHdoaWNoIHNlZW1zIGxpa2Ugb3ZlcmtpbGwuICBUaG91Z2ggdGhlcmUgaXMgbm8gb3RoZXIKKyAgICAgICAgICAgICAgYXBwbGljYXRpb24gdHlwZXMgdGhhdCBjdXJyZW50bHkgbmVlZCBkaXNjb3ZlcnkgKE5ScworICAgICAgICAgICAgICBhY2NlcHQgbm90aWZpY2F0aW9ucyBmcm9tIGNvbnRleHRFbmdpbmVJRHMgdGhhdCBkZXJpdmUKKyAgICAgICAgICAgICAgZnJvbSB0aGUgTk8gbm90IHRoZSBOUikuICBBbHNvIGEgbGFtZSBleGN1c2UgZm9yIGRvaW5nCisgICAgICAgICAgICAgIGl0IGhlcmUuCisgICAgICAgICAgIDMpIExlc3MgaW1wb3J0YW50IHRlY2huaWNhbGx5LCBidXQgdGhlIG5ldC1zbm1wIGFnZW50CisgICAgICAgICAgICAgIGRvZXNuJ3QgY3VycmVudGx5IGhhbmRsZSByZWdpc3RyYXRpb25zIG9mIGRpZmZlcmVudAorICAgICAgICAgICAgICBlbmdpbmVJRHMgZWl0aGVyIGFuZCBpdCB3b3VsZCBoYXZlIGJlZW4gYSBsb3QgbW9yZSB3b3JrCisgICAgICAgICAgICAgIHRvIGltcGxlbWVudCB0aGVyZSBzaW5jZSB3ZSdkIG5lZWQgdG8gc3VwcG9ydCB0aGF0CisgICAgICAgICAgICAgIGZpcnN0LiA6LS8gU3VwcG9ydGluZyBtdWx0aXBsZSBjb250ZXh0IGVuZ2luZUlEcyBzaG91bGQKKyAgICAgICAgICAgICAgYmUgZG9uZSBhbnl3YXksIHNvIGl0J3Mgbm90IGEgdmFsaWQgZXhjdXNlIGhlcmUuCisgICAgICAgICAgIDQpIFRoZXJlIGlzIGEgbG90IGxlc3MgdG8gZG8gaWYgd2UgdHJ1bXAgdGhlIGFnZW50IGF0IHRoaXMKKyAgICAgICAgICAgICAgcG9pbnQ7IElFLCB0aGUgYWdlbnQgZG9lcyBhIGxvdCBtb3JlIHVubmVjZXNzYXJ5CisgICAgICAgICAgICAgIHByb2Nlc3Npbmcgd2hlbiB0aGUgb25seSB0aGluZyB0aGF0IHNob3VsZCBldmVyIGJlIGluCisgICAgICAgICAgICAgIHRoaXMgY29udGV4dCBieSBkZWZpbml0aW9uIGlzIHRoZSBzaW5nbGUgc2NhbGFyLgorICAgICAgICAqLworCisgICAgICAgIC8qIHNwZWNpYWwgUkZDNTM0MyBlbmdpbmVJRCBkaXNjb3ZlcnkgZW5naW5lSUQgY2hlY2sgKi8KKyAgICAgICAgaWYgKCFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX05PX0RJU0NPVkVSWSkgJiYKKyAgICAgICAgICAgIFNOTVBfTVNHX1JFU1BPTlNFICAgICAgICE9IHBkdS0+Y29tbWFuZCAmJgorICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgIT0gcGR1LT5jb250ZXh0RW5naW5lSUQgJiYKKyAgICAgICAgICAgIHBkdS0+Y29udGV4dEVuZ2luZUlETGVuID09IDUgJiYKKyAgICAgICAgICAgIHBkdS0+Y29udGV4dEVuZ2luZUlEWzBdID09IDB4ODAgJiYKKyAgICAgICAgICAgIHBkdS0+Y29udGV4dEVuZ2luZUlEWzFdID09IDB4MDAgJiYKKyAgICAgICAgICAgIHBkdS0+Y29udGV4dEVuZ2luZUlEWzJdID09IDB4MDAgJiYKKyAgICAgICAgICAgIHBkdS0+Y29udGV4dEVuZ2luZUlEWzNdID09IDB4MDAgJiYKKyAgICAgICAgICAgIHBkdS0+Y29udGV4dEVuZ2luZUlEWzRdID09IDB4MDYpIHsKKworICAgICAgICAgICAgLyogZGVmaW5lIGEgcmVzdWx0IHNvIGl0IGRvZXNuJ3QgZ2V0IHBhc3QgdXMgYXQgdGhpcyBwb2ludAorICAgICAgICAgICAgICAgYW5kIGdldHMgZHJvcHBlZCBieSBmdXR1cmUgcGFydHMgb2YgdGhlIHN0YWNrICovCisgICAgICAgICAgICByZXN1bHQgPSBTTk1QRVJSX0pVU1RfQV9DT05URVhUX1BST0JFOworCisgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcHYzX2NvbnRleHRpZCIsICJzdGFydGluZyBjb250ZXh0IElEIGRpc2NvdmVyeVxuIikpOworICAgICAgICAgICAgLyogZW5zdXJlIGV4YWN0bHkgb25lIHZhcmlhYmxlICovCisgICAgICAgICAgICBpZiAoTlVMTCAhPSBwZHUtPnZhcmlhYmxlcyAmJgorICAgICAgICAgICAgICAgIE5VTEwgPT0gcGR1LT52YXJpYWJsZXMtPm5leHRfdmFyaWFibGUgJiYKKworICAgICAgICAgICAgICAgIC8qIGlmIGl0J3MgYSBHRVQsIG1hdGNoIGl0IGV4YWN0bHkgKi8KKyAgICAgICAgICAgICAgICAoKFNOTVBfTVNHX0dFVCA9PSBwZHUtPmNvbW1hbmQgJiYKKyAgICAgICAgICAgICAgICAgIHNubXBfb2lkX2NvbXBhcmUoc25tcEVuZ2luZUlEb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wRW5naW5lSURvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoKSA9PSAwKQorICAgICAgICAgICAgICAgICAvKiBpZiBpdCdzIGEgR0VUTkVYVCBlbnN1cmUgaXQncyBsZXNzIHRoYW4gdGhlIGVuZ2luZUlEIG9pZCAqLworICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICAoU05NUF9NU0dfR0VUTkVYVCA9PSBwZHUtPmNvbW1hbmQgJiYKKyAgICAgICAgICAgICAgICAgIHNubXBfb2lkX2NvbXBhcmUoc25tcEVuZ2luZUlEb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wRW5naW5lSURvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoKSA+IDApCisgICAgICAgICAgICAgICAgICAgICkpIHsKKworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdjNfY29udGV4dGlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBPbmUgY29ycmVjdCB2YXJpYWJsZSBmb3VuZFxuIikpOworCisgICAgICAgICAgICAgICAgLyogTm90ZTogd2UncmUgZXhwbGljdGx5IG5vdCBoYW5kbGluZyBhIEdFVEJVTEsuICBEZWFsLiAqLworCisgICAgICAgICAgICAgICAgLyogc2V0IHVwIHRoZSByZXNwb25zZSAqLworICAgICAgICAgICAgICAgIHBkdTIgPSBzbm1wX2Nsb25lX3BkdShwZHUpOworCisgICAgICAgICAgICAgICAgLyogZnJlZSB0aGUgY3VycmVudCB2YXJiaW5kICovCisgICAgICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQocGR1Mi0+dmFyaWFibGVzKTsKKworICAgICAgICAgICAgICAgIC8qIHNldCB0aGUgdmFyaWFibGVzICovCisgICAgICAgICAgICAgICAgcGR1Mi0+dmFyaWFibGVzID0gTlVMTDsKKyAgICAgICAgICAgICAgICBwZHUyLT5jb21tYW5kID0gU05NUF9NU0dfUkVTUE9OU0U7CisgICAgICAgICAgICAgICAgcGR1Mi0+ZXJyc3RhdCA9IDA7CisgICAgICAgICAgICAgICAgcGR1Mi0+ZXJyaW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgb3VyRW5naW5lSURfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgc25tcHYzX2dldF9lbmdpbmVJRCgodV9jaGFyKilvdXJFbmdpbmVJRCwgb3VyRW5naW5lSURfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoMCAhPSBvdXJFbmdpbmVJRF9sZW4pIHsKKworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcHYzX2NvbnRleHRpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHJlc3BvbmRpbmcgd2l0aCBvdXIgZW5naW5lSURcbiIpKTsKKworICAgICAgICAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBFbmdpbmVJRG9pZCwgc25tcEVuZ2luZUlEb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXJFbmdpbmVJRCwgb3VyRW5naW5lSURfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8qIHNlbmQgdGhlIHJlc3BvbnNlICovCisgICAgICAgICAgICAgICAgICAgIGlmICgwID09IHNubXBfc2Vzc19zZW5kKHNlc3NwLCBwZHUyKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcHYzX2NvbnRleHRpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBzZW50IGl0IG9mZiFcbiIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNlbmRpbmcgYSByZXNwb25zZSB0byB0aGUgY29udGV4dCBlbmdpbmVJRCBwcm9iZSBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byBnZXQgb3VyIG93biBlbmdpbmVJRCFcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlY2VpdmVkIGFuIG9kZCBjb250ZXh0IGVuZ2luZUlEIHByb2JlXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU05NUEVSUl9CQURfVkVSU0lPTjoKICAgICAgICAgRVJST1JfTVNHKCJlcnJvciBwYXJzaW5nIHNubXAgbWVzc2FnZSB2ZXJzaW9uIik7CkBAIC00MzAxLDYgKzQzNTUsNyBAQAogICAgIHNpemVfdCAgICAgICAgICBmb3VyOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdnAgPSBOVUxMOwogICAgIG9pZCAgICAgICAgICAgICBvYmppZFtNQVhfT0lEX0xFTl07CisgICAgdV9jaGFyICAgICAgICAgKnA7CiAKICAgICAvKgogICAgICAqIEdldCB0aGUgUERVIHR5cGUgCkBAIC00Mzc2LDEyICs0NDMxLDE2IEBACiAgICAgICAgICAqIGZhbGx0aHJvdWdoIAogICAgICAgICAgKi8KIAorI2lmbmRlZiBORVRTTk1QX05PVElGWV9PTkxZCiAgICAgY2FzZSBTTk1QX01TR19HRVQ6CiAgICAgY2FzZSBTTk1QX01TR19HRVRORVhUOgogICAgIGNhc2UgU05NUF9NU0dfR0VUQlVMSzoKKyNlbmRpZiAvKiAhIE5FVFNOTVBfTk9USUZZX09OTFkgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgY2FzZSBTTk1QX01TR19TRVQ6CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGNhc2UgU05NUF9NU0dfVFJBUDI6CiAgICAgY2FzZSBTTk1QX01TR19JTkZPUk06Ci0gICAgY2FzZSBTTk1QX01TR19TRVQ6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFBEVSBpcyBub3QgYW4gU05NUHYxIFRSQVAgCiAgICAgICAgICAqLwpAQCAtNDQ0MiwxMCArNDUwMSwxMCBAQAogICAgIHdoaWxlICgoaW50KSAqbGVuZ3RoID4gMCkgewogICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZwdGVtcDsKICAgICAgICAgdnB0ZW1wID0gKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKSBtYWxsb2Moc2l6ZW9mKCp2cHRlbXApKTsKLSAgICAgICAgaWYgKDAgPT0gdnB0ZW1wKSB7CisgICAgICAgIGlmIChOVUxMID09IHZwdGVtcCkgewogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIGlmICgwID09IHZwKSB7CisgICAgICAgIGlmIChOVUxMID09IHZwKSB7CiAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcyA9IHZwdGVtcDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHZwLT5uZXh0X3ZhcmlhYmxlID0gdnB0ZW1wOwpAQCAtNDQ1NSwxMCArNDUxNCwxMCBAQAogICAgICAgICB2cC0+bmV4dF92YXJpYWJsZSA9IE5VTEw7CiAgICAgICAgIHZwLT52YWwuc3RyaW5nID0gTlVMTDsKICAgICAgICAgdnAtPm5hbWVfbGVuZ3RoID0gTUFYX09JRF9MRU47Ci0gICAgICAgIHZwLT5uYW1lID0gMDsKKyAgICAgICAgdnAtPm5hbWUgPSBOVUxMOwogICAgICAgICB2cC0+aW5kZXggPSAwOwotICAgICAgICB2cC0+ZGF0YSA9IDA7Ci0gICAgICAgIHZwLT5kYXRhRnJlZUhvb2sgPSAwOworICAgICAgICB2cC0+ZGF0YSA9IE5VTEw7CisgICAgICAgIHZwLT5kYXRhRnJlZUhvb2sgPSBOVUxMOwogICAgICAgICBERUJVR0RVTVBTRUNUSU9OKCJyZWN2IiwgIlZhckJpbmQiKTsKICAgICAgICAgZGF0YSA9IHNubXBfcGFyc2VfdmFyX29wKGRhdGEsIG9iamlkLCAmdnAtPm5hbWVfbGVuZ3RoLCAmdnAtPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnAtPnZhbF9sZW4sICZ2YXJfdmFsLCBsZW5ndGgpOwpAQCAtNDQ3Myw5ICs0NTMyLDExIEBACiAgICAgICAgIGNhc2UgQVNOX0lOVEVHRVI6CiAgICAgICAgICAgICB2cC0+dmFsLmludGVnZXIgPSAobG9uZyAqKSB2cC0+YnVmOwogICAgICAgICAgICAgdnAtPnZhbF9sZW4gPSBzaXplb2YobG9uZyk7Ci0gICAgICAgICAgICBhc25fcGFyc2VfaW50KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2VfaW50KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgKikgdnAtPnZhbC5pbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnZwLT52YWwuaW50ZWdlcikpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFTTl9DT1VOVEVSOgogICAgICAgICBjYXNlIEFTTl9HQVVHRToKQEAgLTQ0ODMsOSArNDU0NCwxMSBAQAogICAgICAgICBjYXNlIEFTTl9VSU5URUdFUjoKICAgICAgICAgICAgIHZwLT52YWwuaW50ZWdlciA9IChsb25nICopIHZwLT5idWY7CiAgICAgICAgICAgICB2cC0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOwotICAgICAgICAgICAgYXNuX3BhcnNlX3Vuc2lnbmVkX2ludCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX3Vuc2lnbmVkX2ludCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdnAtPnZhbC5pbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAjaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCiAgICAgICAgIGNhc2UgQVNOX09QQVFVRV9DT1VOVEVSNjQ6CkBAIC00NDk0LDM0ICs0NTU3LDQ1IEBACiAgICAgICAgIGNhc2UgQVNOX0NPVU5URVI2NDoKICAgICAgICAgICAgIHZwLT52YWwuY291bnRlcjY0ID0gKHN0cnVjdCBjb3VudGVyNjQgKikgdnAtPmJ1ZjsKICAgICAgICAgICAgIHZwLT52YWxfbGVuID0gc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpOwotICAgICAgICAgICAgYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2VfdW5zaWduZWRfaW50NjQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY291bnRlcjY0ICopIHZwLT52YWwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcjY0LCB2cC0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAjaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCiAgICAgICAgIGNhc2UgQVNOX09QQVFVRV9GTE9BVDoKICAgICAgICAgICAgIHZwLT52YWwuZmxvYXRWYWwgPSAoZmxvYXQgKikgdnAtPmJ1ZjsKICAgICAgICAgICAgIHZwLT52YWxfbGVuID0gc2l6ZW9mKGZsb2F0KTsKLSAgICAgICAgICAgIGFzbl9wYXJzZV9mbG9hdCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX2Zsb2F0KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+dmFsLmZsb2F0VmFsLCB2cC0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQVNOX09QQVFVRV9ET1VCTEU6CiAgICAgICAgICAgICB2cC0+dmFsLmRvdWJsZVZhbCA9IChkb3VibGUgKikgdnAtPmJ1ZjsKICAgICAgICAgICAgIHZwLT52YWxfbGVuID0gc2l6ZW9mKGRvdWJsZSk7Ci0gICAgICAgICAgICBhc25fcGFyc2VfZG91YmxlKHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2VfZG91YmxlKHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAtPnZhbC5kb3VibGVWYWwsIHZwLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBU05fT1BBUVVFX0k2NDoKICAgICAgICAgICAgIHZwLT52YWwuY291bnRlcjY0ID0gKHN0cnVjdCBjb3VudGVyNjQgKikgdnAtPmJ1ZjsKICAgICAgICAgICAgIHZwLT52YWxfbGVuID0gc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpOwotICAgICAgICAgICAgYXNuX3BhcnNlX3NpZ25lZF9pbnQ2NCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX3NpZ25lZF9pbnQ2NCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY291bnRlcjY0ICopIHZwLT52YWwuY291bnRlcjY0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnZwLT52YWwuY291bnRlcjY0KSk7CiAKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTICovCi0gICAgICAgIGNhc2UgQVNOX09DVEVUX1NUUjoKICAgICAgICAgY2FzZSBBU05fSVBBRERSRVNTOgorICAgICAgICAgICAgaWYgKHZwLT52YWxfbGVuICE9IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBBU05fT0NURVRfU1RSOgogICAgICAgICBjYXNlIEFTTl9PUEFRVUU6CiAgICAgICAgIGNhc2UgQVNOX05TQVA6CiAgICAgICAgICAgICBpZiAodnAtPnZhbF9sZW4gPCBzaXplb2YodnAtPmJ1ZikpIHsKQEAgLTQ1MzIsMTIgKzQ2MDYsMTYgQEAKICAgICAgICAgICAgIGlmICh2cC0+dmFsLnN0cmluZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNuX3BhcnNlX3N0cmluZyh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsIHZwLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV9zdHJpbmcodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLCB2cC0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZwLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBU05fT0JKRUNUX0lEOgogICAgICAgICAgICAgdnAtPnZhbF9sZW4gPSBNQVhfT0lEX0xFTjsKLSAgICAgICAgICAgIGFzbl9wYXJzZV9vYmppZCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsIG9iamlkLCAmdnAtPnZhbF9sZW4pOworICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV9vYmppZCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsIG9iamlkLCAmdnAtPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIHZwLT52YWxfbGVuICo9IHNpemVvZihvaWQpOwogICAgICAgICAgICAgdnAtPnZhbC5vYmppZCA9IChvaWQgKikgbWFsbG9jKHZwLT52YWxfbGVuKTsKICAgICAgICAgICAgIGlmICh2cC0+dmFsLm9iamlkID09IE5VTEwpIHsKQEAgLTQ1NTUsOCArNDYzMywxMCBAQAogICAgICAgICAgICAgaWYgKHZwLT52YWwuYml0c3RyaW5nID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc25fcGFyc2VfYml0c3RyaW5nKHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2VfYml0c3RyaW5nKHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAtPnZhbC5iaXRzdHJpbmcsICZ2cC0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmFkIHR5cGUgcmV0dXJuZWQgKCV4KVxuIiwgdnAtPnR5cGUpOwpAQCAtNDYwNywxNyArNDY4Nyw2IEBACiAgICAgfQogCiAgICAgLyoKLSAgICAgKiBjaGVjayB0aGF0IGl0IGFncmVlcyB3aXRoIGVuZ2luZUlEIHJldHVybmVkIGZyb20gVVNNIGFib3ZlCi0gICAgICogKiBvbmx5IGEgd2FybmluZyBiZWNhdXNlIHRoaXMgY291bGQgYmUgbGVnYWwgaWYgd2UgYXJlIGEgcHJveHkKLSAgICAgKi8KLSAgICBpZiAocGR1LT5zZWN1cml0eUVuZ2luZUlETGVuICE9IHBkdS0+Y29udGV4dEVuZ2luZUlETGVuIHx8Ci0gICAgICAgIG1lbWNtcChwZHUtPnNlY3VyaXR5RW5naW5lSUQsIHBkdS0+Y29udGV4dEVuZ2luZUlELAotICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuKSAhPSAwKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzY29wZWRQRFVfcGFyc2UiLAotICAgICAgICAgICAgICAgICAgICAiaW5jb25zaXN0ZW50IGVuZ2luZUlEIGluZm9ybWF0aW9uIGluIG1lc3NhZ2VcbiIpKTsKLSAgICB9Ci0KLSAgICAvKgogICAgICAqIHBhcnNlIGNvbnRleHROYW1lIGZyb20gc2NvcGVkUGR1CiAgICAgICovCiAgICAgdG1wX2J1Zl9sZW4gPSBTTk1QX01BWF9DT05URVhUX1NJWkU7CkBAIC00Nzg0LDE2ICs0ODUzLDYgQEAKICAgICAgICAgICAgIHJldHVybiAwOyAvKiBzX3NubXBfZXJybm8gYWxyZWFkeSBzZXQgKi8KICAgICB9CiAKLSAgICAvKgotICAgICAqIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHYzIHVzZXIgZnJvbSB0aGUgc2Vzc2lvbiBpbmZvCi0gICAgICovCi0gICAgaWYgKGNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihzZXNzaW9uKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9VTktOT1dOX1VTRVJfTkFNRTsgIC8qIFhYPz8gKi8KLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwKLSAgICAgICAgICAgICAgICAgICAgInNubXBfc2VuZCgpOiBmYWlsZWQoMikgdG8gY3JlYXRlIGEgbmV3IHVzZXIgZnJvbSBzZXNzaW9uXG4iKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIGlmICgocGt0YnVmID0gKHVfY2hhciAqKW1hbGxvYygyMDQ4KSkgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic2Vzc19hc3luY19zZW5kIiwKICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IG1hbGxvYyBpbml0aWFsIHBhY2tldCBidWZmZXJcbiIpKTsKQEAgLTQ4MTQsOCArNDg3MywxMCBAQAogICAgICAqLwogICAgIGlmIChwZHUtPnZhcmlhYmxlcyA9PSBOVUxMKSB7CiAgICAgICAgIHN3aXRjaCAocGR1LT5jb21tYW5kKSB7Ci0gICAgICAgIGNhc2UgU05NUF9NU0dfR0VUOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBTTk1QX01TR19TRVQ6CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICBjYXNlIFNOTVBfTVNHX0dFVDoKICAgICAgICAgY2FzZSBTTk1QX01TR19HRVRORVhUOgogICAgICAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6CiAgICAgICAgIGNhc2UgU05NUF9NU0dfUkVTUE9OU0U6CkBAIC00ODc0LDcgKzQ5MzUsNyBAQAogICAgIGlmIChwZHUtPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzMgJiYgc2Vzc2lvbi0+c25kTXNnTWF4U2l6ZSAhPSAwICYmIGxlbmd0aCA+IHNlc3Npb24tPnNuZE1zZ01heFNpemUpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfYXN5bmNfc2VuZCIsCiAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggb2YgcGFja2V0ICglbHUpIGV4Y2VlZHMgc2Vzc2lvbiBtYXhpbXVtICglbHUpXG4iLAotICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIHNlc3Npb24tPnNuZE1zZ01heFNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoLCAodW5zaWduZWQgbG9uZylzZXNzaW9uLT5zbmRNc2dNYXhTaXplKSk7CiAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVE9PX0xPTkc7CiAgICAgICAgIFNOTVBfRlJFRShwa3RidWYpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTQ4ODgsMzYgKzQ5NDksMjEgQEAKICAgICBpZiAodHJhbnNwb3J0LT5tc2dNYXhTaXplICE9IDAgJiYgbGVuZ3RoID4gdHJhbnNwb3J0LT5tc2dNYXhTaXplKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX2FzeW5jX3NlbmQiLAogICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIG9mIHBhY2tldCAoJWx1KSBleGNlZWRzIHRyYW5zcG9ydCBtYXhpbXVtICglbHUpXG4iLAotICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIHRyYW5zcG9ydC0+bXNnTWF4U2l6ZSkpOworICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsZW5ndGgsICh1bnNpZ25lZCBsb25nKXRyYW5zcG9ydC0+bXNnTWF4U2l6ZSkpOwogICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1RPT19MT05HOwogICAgICAgICBTTk1QX0ZSRUUocGt0YnVmKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCkpIHsKLSAgICAgICAgaWYgKHRyYW5zcG9ydC0+Zl9mbXRhZGRyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGNoYXIgICAgICAgICAgICpkZXN0X3R4dCA9Ci0gICAgICAgICAgICAgICAgdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmIChkZXN0X3R4dCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiXG5TZW5kaW5nICVsdSBieXRlcyB0byAlc1xuIiwgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfdHh0KTsKLSAgICAgICAgICAgICAgICBTTk1QX0ZSRUUoZGVzdF90eHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICJcblNlbmRpbmcgJWx1IGJ5dGVzIHRvIDxVTktOT1dOPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHhkdW1wKHBhY2tldCwgbGVuZ3RoLCAiIik7Ci0gICAgfQotCiAgICAgLyoKICAgICAgKiBTZW5kIHRoZSBtZXNzYWdlLiAgCiAgICAgICovCiAKLSAgICByZXN1bHQgPSB0cmFuc3BvcnQtPmZfc2VuZCh0cmFuc3BvcnQsIHBhY2tldCwgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocGR1LT50cmFuc3BvcnRfZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCkpOworICAgIERFQlVHTVNHVEwoKCJzZXNzX3Byb2Nlc3NfcGFja2V0IiwgInNlbmRpbmcgbWVzc2FnZSBpZCMlbGQgcmVxaWQjJWxkIGxlbiAlIgorICAgICAgICAgICAgICAgIE5FVFNOTVBfUFJJeiAidVxuIiwgcGR1LT5tc2dpZCwgcGR1LT5yZXFpZCwgbGVuZ3RoKSk7CisgICAgcmVzdWx0ID0gbmV0c25tcF90cmFuc3BvcnRfc2VuZCh0cmFuc3BvcnQsIHBhY2tldCwgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwZHUtPnRyYW5zcG9ydF9kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpKTsKIAogICAgIFNOTVBfRlJFRShwa3RidWYpOwogCkBAIC00OTQzLDcgKzQ5ODksNyBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAgICAgICBnZXR0aW1lb2ZkYXkoJnR2LCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnR2KTsKICAgICAgICAgcnAtPnBkdSA9IHBkdTsKICAgICAgICAgcnAtPnJlcXVlc3RfaWQgPSBwZHUtPnJlcWlkOwogICAgICAgICBycC0+bWVzc2FnZV9pZCA9IHBkdS0+bXNnaWQ7CkBAIC00OTU1LDExICs1MDAxLDExIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBycC0+dGltZW91dCA9IHNlc3Npb24tPnRpbWVvdXQ7CiAgICAgICAgIH0KLSAgICAgICAgcnAtPnRpbWUgPSB0djsKKyAgICAgICAgcnAtPnRpbWVNID0gdHY7CiAgICAgICAgIHR2LnR2X3VzZWMgKz0gcnAtPnRpbWVvdXQ7CiAgICAgICAgIHR2LnR2X3NlYyArPSB0di50dl91c2VjIC8gMTAwMDAwMEw7CiAgICAgICAgIHR2LnR2X3VzZWMgJT0gMTAwMDAwMEw7Ci0gICAgICAgIHJwLT5leHBpcmUgPSB0djsKKyAgICAgICAgcnAtPmV4cGlyZU0gPSB0djsKIAogICAgICAgICAvKgogICAgICAgICAgKiBYWCBsb2NrIHNob3VsZCBiZSBwZXIgc2Vzc2lvbiAhIApAQCAtNTAyMCw3ICs1MDY2LDcgQEAKICAqIEZyZWVzIHRoZSB2YXJpYWJsZSBhbmQgYW55IG1hbGxvYydkIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGl0LgogICovCiB2b2lkCi1zbm1wX2ZyZWVfdmFyKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcikKK3NubXBfZnJlZV92YXJfaW50ZXJuYWxzKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcikKIHsKICAgICBpZiAoIXZhcikKICAgICAgICAgcmV0dXJuOwpAQCAtNTAzNyw3ICs1MDgzLDEyIEBACiAgICAgICAgICAgICBTTk1QX0ZSRUUodmFyLT5kYXRhKTsKICAgICAgICAgfQogICAgIH0KK30KIAordm9pZAorc25tcF9mcmVlX3ZhcihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIpCit7CisgICAgc25tcF9mcmVlX3Zhcl9pbnRlcm5hbHModmFyKTsKICAgICBmcmVlKChjaGFyICopIHZhcik7CiB9CiAKQEAgLTUxNDYsMjAgKzUxOTcsMTIgQEAKIAkgICAgICAic2Vzc2lvbiAlcCBmZCAlZCBwa3QgJXAgbGVuZ3RoICVkXG4iLCBzZXNzcCwKIAkgICAgICB0cmFuc3BvcnQtPnNvY2ssIHBhY2tldHB0ciwgbGVuZ3RoKSk7CiAKLSAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLQkJCSAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQpKSB7Ci0gICAgaWYgKHRyYW5zcG9ydC0+Zl9mbXRhZGRyICE9IE5VTEwpIHsKLSAgICAgIGNoYXIgKmFkZHJ0eHQgPSB0cmFuc3BvcnQtPmZfZm10YWRkcih0cmFuc3BvcnQsIG9wYXF1ZSwgb2xlbmd0aCk7Ci0gICAgICBpZiAoYWRkcnR4dCAhPSBOVUxMKSB7Ci0Jc25tcF9sb2coTE9HX0RFQlVHLCAiXG5SZWNlaXZlZCAlZCBieXRlcyBmcm9tICVzXG4iLAotCQkgbGVuZ3RoLCBhZGRydHh0KTsKLQlTTk1QX0ZSRUUoYWRkcnR4dCk7Ci0gICAgICB9IGVsc2UgewotCXNubXBfbG9nKExPR19ERUJVRywgIlxuUmVjZWl2ZWQgJWQgYnl0ZXMgZnJvbSA8VU5LTk9XTj5cbiIsCi0JCSBsZW5ndGgpOwotICAgICAgfQotICAgIH0KLSAgICB4ZHVtcChwYWNrZXRwdHIsIGxlbmd0aCwgIiIpOworICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQpKSB7CisgICAgICBjaGFyICphZGRydHh0ID0gbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcodHJhbnNwb3J0LCBvcGFxdWUsIG9sZW5ndGgpOworICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiXG5SZWNlaXZlZCAlZCBieXRlIHBhY2tldCBmcm9tICVzXG4iLAorICAgICAgICAgICAgICAgbGVuZ3RoLCBhZGRydHh0KTsKKyAgICAgIFNOTVBfRlJFRShhZGRydHh0KTsKKyAgICAgIHhkdW1wKHBhY2tldHB0ciwgbGVuZ3RoLCAiIik7CiAgIH0KIAogICAvKgpAQCAtNTE2OSw5ICs1MjEyLDcgQEAKICAgaWYgKGlzcC0+aG9va19wcmUpIHsKICAgICBpZiAoaXNwLT5ob29rX3ByZShzcCwgdHJhbnNwb3J0LCBvcGFxdWUsIG9sZW5ndGgpID09IDApIHsKICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3Byb2Nlc3NfcGFja2V0IiwgInByZS1wYXJzZSBmYWlsXG4iKSk7Ci0gICAgICBpZiAob3BhcXVlICE9IE5VTEwpIHsKLQlTTk1QX0ZSRUUob3BhcXVlKTsKLSAgICAgIH0KKyAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwogICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgfQpAQCAtNTE4MSwyMCArNTIyMiwyOCBAQAogICB9IGVsc2UgewogICAgIHBkdSA9IHNubXBfY3JlYXRlX3Nlc3NfcGR1KHRyYW5zcG9ydCwgb3BhcXVlLCBvbGVuZ3RoKTsKICAgfQorCiAgIGlmIChwZHUgPT0gTlVMTCkgewogICAgIHNubXBfbG9nKExPR19FUlIsICJwZHUgZmFpbGVkIHRvIGJlIGNyZWF0ZWRcbiIpOwotICAgIGlmIChvcGFxdWUgIT0gTlVMTCkgewotICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7Ci0gICAgfQorICAgIFNOTVBfRlJFRShvcGFxdWUpOwogICAgIHJldHVybiAtMTsKICAgfQogCisgIC8qIGlmIHRoZSB0cmFuc3BvcnQgd2FzIGEgbWFnaWMgdHVubmVsLCBtYXJrIHRoZSBQRFUgYXMgaGF2aW5nIGNvbWUKKyAgICAgdGhyb3VnaCBvbmUuICovCisgIGlmICh0cmFuc3BvcnQtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UVU5ORUxFRCkgeworICAgICAgcGR1LT5mbGFncyB8PSBVQ0RfTVNHX0ZMQUdfVFVOTkVMRUQ7CisgIH0KKwogICBpZiAoaXNwLT5ob29rX3BhcnNlKSB7CiAgICAgcmV0ID0gaXNwLT5ob29rX3BhcnNlKHNwLCBwZHUsIHBhY2tldHB0ciwgbGVuZ3RoKTsKICAgfSBlbHNlIHsKICAgICByZXQgPSBzbm1wX3BhcnNlKHNlc3NwLCBzcCwgcGR1LCBwYWNrZXRwdHIsIGxlbmd0aCk7CiAgIH0KIAorICBERUJVR01TR1RMKCgic2Vzc19wcm9jZXNzX3BhY2tldCIsICJyZWNlaXZlZCBtZXNzYWdlIGlkIyVsZCByZXFpZCMlbGQgbGVuICIKKyAgICAgICAgICAgICAgIiV1XG4iLCBwZHUtPm1zZ2lkLCBwZHUtPnJlcWlkLCBsZW5ndGgpKTsKKwogICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKICAgICBERUJVR01TR1RMKCgic2Vzc19wcm9jZXNzX3BhY2tldCIsICJwYXJzZSBmYWlsXG4iKSk7CiAgIH0KQEAgLTUyNjIsNyArNTMxMSw5IEBACiAJICogbXNnSWQgbXVzdCBtYXRjaCBmb3IgdjMgbWVzc2FnZXMuICAKIAkgKi8KIAlpZiAocnAtPm1lc3NhZ2VfaWQgIT0gcGR1LT5tc2dpZCkgewotCSAgY29udGludWU7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19wcm9jZXNzX3BhY2tldCIsICJ1bm1hdGNoZWQgbXNnIGlkOiAlbGQgIT0gJWxkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcnAtPm1lc3NhZ2VfaWQsIHBkdS0+bXNnaWQpKTsKKwkgICAgY29udGludWU7CiAJfQogCiAJLyoKQEAgLTUzNjAsMTkgKzU0MTEsMTQgQEAKIAkvKgogCSAqIFN1Y2Nlc3NmdWwsIHNvIGRlbGV0ZSByZXF1ZXN0LiAgCiAJICovCi0JaWYgKGlzcC0+cmVxdWVzdHMgPT0gcnApIHsKLQkgIGlzcC0+cmVxdWVzdHMgPSBycC0+bmV4dF9yZXF1ZXN0OwotCSAgaWYgKGlzcC0+cmVxdWVzdHNFbmQgPT0gcnApIHsKLQkgICAgaXNwLT5yZXF1ZXN0c0VuZCA9IE5VTEw7Ci0JICB9Ci0JfSBlbHNlIHsKKwlpZiAob3JwKQogCSAgb3JwLT5uZXh0X3JlcXVlc3QgPSBycC0+bmV4dF9yZXF1ZXN0OwotCSAgaWYgKGlzcC0+cmVxdWVzdHNFbmQgPT0gcnApIHsKLQkgICAgaXNwLT5yZXF1ZXN0c0VuZCA9IG9ycDsKLQkgIH0KLQl9CisgICAgICAgIGVsc2UKKwkgIGlzcC0+cmVxdWVzdHMgPSBycC0+bmV4dF9yZXF1ZXN0OworICAgICAgICBpZiAoaXNwLT5yZXF1ZXN0c0VuZCA9PSBycCkKKwkgIGlzcC0+cmVxdWVzdHNFbmQgPSBvcnA7CiAJc25tcF9mcmVlX3BkdShycC0+cGR1KTsKLQlmcmVlKChjaGFyICopIHJwKTsKKwlmcmVlKHJwKTsKIAkvKgogCSAqIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgbW9yZSByZXF1ZXN0cyB3aXRoIHRoZSBzYW1lIHJlcWlkLiAgCiAJICovCkBAIC01NDM3LDEwICs1NDgzLDIxIEBACiB2b2lkCiBzbm1wX3JlYWQoZmRfc2V0ICogZmRzZXQpCiB7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbGZkc2V0OworCisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbGZkc2V0LCBGRF9TRVRTSVpFKTsKKyAgICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbGZkc2V0LCBmZHNldCk7CisgICAgc25tcF9yZWFkMigmbGZkc2V0KTsKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZsZmRzZXQpOworfQorCit2b2lkCitzbm1wX3JlYWQyKG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CiAgICAgc3RydWN0IHNlc3Npb25fbGlzdCAqc2xwOwogICAgIHNubXBfcmVzX2xvY2soTVRfTElCUkFSWV9JRCwgTVRfTElCX1NFU1NJT04pOwogICAgIGZvciAoc2xwID0gU2Vzc2lvbnM7IHNscDsgc2xwID0gc2xwLT5uZXh0KSB7Ci0gICAgICAgIHNubXBfc2Vzc19yZWFkKCh2b2lkICopIHNscCwgZmRzZXQpOworICAgICAgICBzbm1wX3Nlc3NfcmVhZDIoKHZvaWQgKikgc2xwLCBmZHNldCk7CiAgICAgfQogICAgIHNubXBfcmVzX3VubG9jayhNVF9MSUJSQVJZX0lELCBNVF9MSUJfU0VTU0lPTik7CiB9CkBAIC01NDUyLDcgKzU1MDksNyBAQAogICogQmV3YXJlIHJlY3Vyc2l2ZSBzZW5kIG1heWJlIGluc2lkZSBzbm1wX3JlYWQgY2FsbGJhY2sgZnVuY3Rpb24uIAogICovCiBpbnQKLV9zZXNzX3JlYWQodm9pZCAqc2Vzc3AsIGZkX3NldCAqIGZkc2V0KQorX3Nlc3NfcmVhZCh2b2lkICpzZXNzcCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKIHsKICAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbHAgPSAoc3RydWN0IHNlc3Npb25fbGlzdCAqKSBzZXNzcDsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNwID0gc2xwID8gc2xwLT5zZXNzaW9uIDogTlVMTDsKQEAgLTU0NzQsMTAgKzU1MzEsMTEgQEAKICAgICAgICAgcmV0dXJuIDA7IAogICAgIH0KIAotICAgIGlmICghZmRzZXQgfHwgIShGRF9JU1NFVCh0cmFuc3BvcnQtPnNvY2ssIGZkc2V0KSkpIHsKKyAgICBpZiAoIWZkc2V0IHx8ICEoTkVUU05NUF9MQVJHRV9GRF9JU1NFVCh0cmFuc3BvcnQtPnNvY2ssIGZkc2V0KSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICJub3QgcmVhZGluZyAlZCAoZmRzZXQgJXAgc2V0ICVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LT5zb2NrLCBmZHNldCwKLSAgICAgICAgICAgICAgICAgICAgZmRzZXQgPyBGRF9JU1NFVCh0cmFuc3BvcnQtPnNvY2ssIGZkc2V0KSA6IC05KSk7CisgICAgICAgICAgICAgICAgICAgIGZkc2V0ID8gTkVUU05NUF9MQVJHRV9GRF9JU1NFVCh0cmFuc3BvcnQtPnNvY2ssIGZkc2V0KQorCQkgICAgOiAtOSkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTU1NjQsOCArNTYyMiw4IEBACiAgICAgICAgICAgICAgKiBXZSBoYXZlIG5vIHNhdmVkIHBhY2tldC4gIEFsbG9jYXRlIG9uZS4gIAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoKGlzcC0+cGFja2V0ID0gKHVfY2hhciAqKSBtYWxsb2MocnhidWZfbGVuKSkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAiY2FuJ3QgbWFsbG9jICVkIGJ5dGVzIGZvciByeGJ1ZlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByeGJ1Zl9sZW4pKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgImNhbid0IG1hbGxvYyAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidSBieXRlcyBmb3IgcnhidWZcbiIsIHJ4YnVmX2xlbikpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByeGJ1ZiA9IGlzcC0+cGFja2V0OwpAQCAtNTU4NSw3ICs1NjQzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzcC0+cGFja2V0X2xlbiArIHJ4YnVmX2xlbik7CiAgICAgICAgICAgICAgICAgaWYgKG5ld2J1ZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgbWFsbG9jICVkIG1vcmUgZm9yIHJ4YnVmICglZCB0b3QpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgbWFsbG9jICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidSBtb3JlIGZvciByeGJ1ZiAoJSIgTkVUU05NUF9QUkl6ICJ1IHRvdClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4YnVmX2xlbiwgaXNwLT5wYWNrZXRfbGVuICsgcnhidWZfbGVuKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC01NjAwLDI1ICs1NjU5LDM1IEBACiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoKHJ4YnVmID0gKHVfY2hhciAqKSBtYWxsb2MocnhidWZfbGVuKSkgPT0gTlVMTCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICJjYW4ndCBtYWxsb2MgJWQgYnl0ZXMgZm9yIHJ4YnVmXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcnhidWZfbGVuKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgImNhbid0IG1hbGxvYyAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1IGJ5dGVzIGZvciByeGJ1ZlxuIiwgcnhidWZfbGVuKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KIAotICAgIGxlbmd0aCA9IHRyYW5zcG9ydC0+Zl9yZWN2KHRyYW5zcG9ydCwgcnhidWYsIHJ4YnVmX2xlbiwgJm9wYXF1ZSwgJm9sZW5ndGgpOworICAgIGxlbmd0aCA9IG5ldHNubXBfdHJhbnNwb3J0X3JlY3YodHJhbnNwb3J0LCByeGJ1ZiwgcnhidWZfbGVuLCAmb3BhcXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZW5ndGgpOwogCiAgICAgaWYgKGxlbmd0aCA9PSAtMSAmJiAhKHRyYW5zcG9ydC0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTSkpIHsKICAgICAgICAgc3AtPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX1JFQ1ZGUk9NOwogICAgICAgICBzcC0+c19lcnJubyA9IGVycm5vOwogICAgICAgICBzbm1wX3NldF9kZXRhaWwoc3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgU05NUF9GUkVFKHJ4YnVmKTsKLSAgICAgICAgaWYgKG9wYXF1ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKLSAgICAgICAgfQorICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIGlmICgwID09IGxlbmd0aCAmJiB0cmFuc3BvcnQtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19FTVBUWV9QS1QpIHsKKyAgICAgICAgLyogdGhpcyBhbGxvd3MgZm9yIGEgdHJhbnNwb3J0IHRoYXQgbmVlZHMgdG8gcmV0dXJuIGZyb20KKyAgICAgICAgICogcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGhhdmUgYW55CisgICAgICAgICAqIGNvbnN1bWFibGUgZGF0YSBpbiBpdC4gKi8KKworICAgICAgICAvKiByZXNldCB0aGUgZmxhZyBzaW5jZSBpdCdzIGEgcGVyLW1lc3NhZ2UgZmxhZyAqLworICAgICAgICB0cmFuc3BvcnQtPmZsYWdzICY9ICh+TkVUU05NUF9UUkFOU1BPUlRfRkxBR19FTVBUWV9QS1QpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIC8qCiAgICAgICogUmVtb3RlIGVuZCBjbG9zZWQgY29ubmVjdGlvbi4gIAogICAgICAqLwpAQCAtNTYzOCw5ICs1NzA3LDcgQEAKICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICJmZCAlZCBjbG9zZWRcbiIsIHRyYW5zcG9ydC0+c29jaykpOwogICAgICAgICB0cmFuc3BvcnQtPmZfY2xvc2UodHJhbnNwb3J0KTsKICAgICAgICAgU05NUF9GUkVFKGlzcC0+cGFja2V0KTsKLSAgICAgICAgaWYgKG9wYXF1ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKLSAgICAgICAgfQorICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNTY2MiwxMCArNTcyOSwxMSBAQAogICAgICAgICAgICAgICAgIHBkdWxlbiA9IGFzbl9jaGVja19wYWNrZXQocHB0ciwgaXNwLT5wYWNrZXRfbGVuKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICIgIGxvb3AgcGFja2V0X2xlbiAlZCwgUERVIGxlbmd0aCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzcC0+cGFja2V0X2xlbiwgcGR1bGVuKSk7Ci0gICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoKHBkdWxlbiA+IE1BWF9QQUNLRVRfTEVOR1RIKSB8fCAocGR1bGVuIDwgMCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiAgbG9vcCBwYWNrZXRfbGVuICUiIE5FVFNOTVBfUFJJeiAidSwgUERVIGxlbmd0aCAlIgorICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9QUkl6ICJ1XG4iLCBpc3AtPnBhY2tldF9sZW4sIHBkdWxlbikpOworCisgICAgICAgICAgICBpZiAocGR1bGVuID4gTUFYX1BBQ0tFVF9MRU5HVEgpIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIElsbGVnYWwgbGVuZ3RoLCBkcm9wIHRoZSBjb25uZWN0aW9uLiAgCiAgICAgICAgICAgICAgICAgICovCkBAIC01Njc5LDkgKzU3NDcsNyBAQAogCQl9CiAJCURFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAiZmQgJWQgY2xvc2VkXG4iLCB0cmFuc3BvcnQtPnNvY2spKTsKICAgICAgICAgICAgICAgICB0cmFuc3BvcnQtPmZfY2xvc2UodHJhbnNwb3J0KTsKLSAgICAgICAgICAgICAgICBpZiAob3BhcXVlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwogICAgICAgICAgICAgICAgIC8qKiBYWFgtcmtzOiB3aHkgbm8gU05NUF9GUkVFKGlzcC0+cGFja2V0KTsgPz8gKi8KICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBAIC01Njk0LDE1ICs1NzYwLDE0IEBACiAgICAgICAgICAgICAgICAgICogc3RhcnQsIHNpbXBseSByZXR1cm4gYW5kIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInBrdCBub3QgY29tcGxldGUgKG5lZWQgJWQgZ290ICVkIHNvIGZhcilcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1bGVuLCBpc3AtPnBhY2tldF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGt0IG5vdCBjb21wbGV0ZSAobmVlZCAlIiBORVRTTk1QX1BSSXogInUgZ290ICUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9QUkl6ICJ1IHNvIGZhcilcbiIsIHBkdWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3AtPnBhY2tldF9sZW4pKTsKIAogICAgICAgICAgICAgICAgIGlmIChwcHRyICE9IGlzcC0+cGFja2V0KQogICAgICAgICAgICAgICAgICAgICBicmVhazsgLyogb3BhcXVlIGZyZWVkIGZvciB1cyBvdXRzaWRlIG9mIGxvb3AuICovCiAKLSAgICAgICAgICAgICAgICBpZiAob3BhcXVlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogCkBAIC01NzUxLDE3ICs1ODE2LDE2IEBACiAJICAgIG9mIHRoZSBvcGFxdWUgcG9pbnRlciwgc28gd2Ugc3RpbGwgbmVlZCB0byBmcmVlKCkgdGhlIG9wYXF1ZQogCSAgICBwb2ludGVyIGl0c2VsZi4gICovCiAKLQlpZiAob3BhcXVlICE9IE5VTEwpIHsKLQkgICAgU05NUF9GUkVFKG9wYXF1ZSk7Ci0JfQorCVNOTVBfRlJFRShvcGFxdWUpOwogCiAgICAgICAgIGlmIChpc3AtPnBhY2tldF9sZW4gPj0gTUFYSU1VTV9QQUNLRVRfU0laRSkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIE9idmlvdXNseSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4hICAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICJ0b28gbGFyZ2UgcGFja2V0X2xlbiA9ICVsdSwgZHJvcHBpbmcgY29ubmVjdGlvbiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShpc3AtPnBhY2tldF9sZW4pLCB0cmFuc3BvcnQtPnNvY2spOworICAgICAgICAgICAgICAgICAgICAgInRvbyBsYXJnZSBwYWNrZXRfbGVuID0gJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICAidSwgZHJvcHBpbmcgY29ubmVjdGlvbiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGlzcC0+cGFja2V0X2xlbiwgdHJhbnNwb3J0LT5zb2NrKTsKICAgICAgICAgICAgIHRyYW5zcG9ydC0+Zl9jbG9zZSh0cmFuc3BvcnQpOwogICAgICAgICAgICAgLyoqIFhYWC1ya3M6IHdoeSBubyBTTk1QX0ZSRUUoaXNwLT5wYWNrZXQpOyA/PyAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNTc3Myw3ICs1ODM3LDYgQEAKICAgICAgICAgICAgICAqIGZvb3RwcmludCBkb3duLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBTTk1QX0ZSRUUoaXNwLT5wYWNrZXQpOwotICAgICAgICAgICAgaXNwLT5wYWNrZXQgPSBOVUxMOwogICAgICAgICAgICAgaXNwLT5wYWNrZXRfc2l6ZSA9IDA7CiAgICAgICAgICAgICBpc3AtPnBhY2tldF9sZW4gPSAwOwogICAgICAgICAgICAgcmV0dXJuIHJjOwpAQCAtNTc4Nyw5ICs1ODUwLDExIEBACiAgICAgICAgICAqLwogCiAgICAgICAgIG1lbW1vdmUoaXNwLT5wYWNrZXQsIHBwdHIsIGlzcC0+cGFja2V0X2xlbik7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAiZW5kOiBtZW1tb3ZlKCVwLCAlcCwgJWQpOyByZWFsbG9jKCVwLCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgIGlzcC0+cGFja2V0LCBwcHRyLCBpc3AtPnBhY2tldF9sZW4sIGlzcC0+cGFja2V0LAotICAgICAgICAgICAgICAgICAgICBpc3AtPnBhY2tldF9sZW4pKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsCisgICAgICAgICAgICAgICAgICAgICJlbmQ6IG1lbW1vdmUoJXAsICVwLCAlIiBORVRTTk1QX1BSSXogInUpOyByZWFsbG9jKCVwLCAlIgorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1BSSXogInUpXG4iLAorICAgICAgICAgICAgICAgICAgICBpc3AtPnBhY2tldCwgcHB0ciwgaXNwLT5wYWNrZXRfbGVuLAorCQkgICAgaXNwLT5wYWNrZXQsIGlzcC0+cGFja2V0X2xlbikpOwogCiAgICAgICAgIGlmICgocnhidWYgPSAodV9jaGFyICopcmVhbGxvYyhpc3AtPnBhY2tldCwgaXNwLT5wYWNrZXRfbGVuKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgLyoKQEAgLTU4MTksNiArNTg4NCwxOSBAQAogaW50CiBzbm1wX3Nlc3NfcmVhZCh2b2lkICpzZXNzcCwgZmRfc2V0ICogZmRzZXQpCiB7CisgIGludCByYzsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbGZkc2V0OworICAKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbGZkc2V0LCBGRF9TRVRTSVpFKTsKKyAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmxmZHNldCwgZmRzZXQpOworICByYyA9IHNubXBfc2Vzc19yZWFkMihzZXNzcCwgJmxmZHNldCk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmxmZHNldCk7CisgIHJldHVybiByYzsKK30KKworaW50Citzbm1wX3Nlc3NfcmVhZDIodm9pZCAqc2Vzc3AsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CiAgICAgc3RydWN0IHNlc3Npb25fbGlzdCAqcHNsOwogICAgIG5ldHNubXBfc2Vzc2lvbiAqcHNzOwogICAgIGludCAgICAgICAgICAgICByYzsKQEAgLTU4MzMsNyArNTkxMSw3IEBACiB9CiAKIAotLyoKKy8qKgogICogUmV0dXJucyBpbmZvIGFib3V0IHdoYXQgc25tcCByZXF1aXJlcyBmcm9tIGEgc2VsZWN0IHN0YXRlbWVudC4KICAqIG51bWZkcyBpcyB0aGUgbnVtYmVyIG9mIGZkcyBpbiB0aGUgbGlzdCB0aGF0IGFyZSBzaWduaWZpY2FudC4KICAqIEFsbCBmaWxlIGRlc2NyaXB0b3JzIG9wZW5lZCBmb3IgU05NUCBhcmUgT1InZCBpbnRvIHRoZSBmZHNldC4KQEAgLTU4NTQsNTUgKzU5MzIsMTIxIEBACiAgKgogICogc25tcF9zZWxlY3RfaW5mbyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb3BlbiBzb2NrZXRzLiAgKGkuZS4gVGhlIG51bWJlciBvZgogICogc2Vzc2lvbnMgb3BlbikKKyAqCisgKiBAc2VlIFNlZSBhbHNvIHNubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3MoKS4KICAqLwotCiBpbnQKLXNubXBfc2VsZWN0X2luZm8oaW50ICpudW1mZHMsCi0gICAgICAgICAgICAgICAgIGZkX3NldCAqIGZkc2V0LCBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaykKLSAgICAvKgotICAgICAqIGlucHV0OiAgc2V0IHRvIDEgaWYgaW5wdXQgdGltZW91dCB2YWx1ZSBpcyB1bmRlZmluZWQgIAotICAgICAqIHNldCB0byAwIGlmIGlucHV0IHRpbWVvdXQgdmFsdWUgaXMgZGVmaW5lZCAgICAKLSAgICAgKiBvdXRwdXQ6IHNldCB0byAxIGlmIG91dHB1dCB0aW1lb3V0IHZhbHVlIGlzIHVuZGVmaW5lZCAKLSAgICAgKiBzZXQgdG8gMCBpZiBvdXRwdXQgcmltZW91dCB2bGF1ZSBpZCBkZWZpbmVkICAgCi0gICAgICovCitzbm1wX3NlbGVjdF9pbmZvKGludCAqbnVtZmRzLCBmZF9zZXQgKmZkc2V0LCBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwKKyAgICAgICAgICAgICAgICAgaW50ICpibG9jaykKIHsKLSAgICByZXR1cm4gc25tcF9zZXNzX3NlbGVjdF9pbmZvKCh2b2lkICopIDAsIG51bWZkcywgZmRzZXQsIHRpbWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayk7CisgICAgcmV0dXJuIHNubXBfc2Vzc19zZWxlY3RfaW5mbyhOVUxMLCBudW1mZHMsIGZkc2V0LCB0aW1lb3V0LCBibG9jayk7CiB9CiAKLS8qCi0gKiBTYW1lIGFzIHNubXBfc2VsZWN0X2luZm8sIGJ1dCB3b3JrcyBqdXN0IG9uZSBzZXNzaW9uLiAKKy8qKgorICogQHNlZSBTZWUgYWxzbyBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKCkuCiAgKi8KIGludAotc25tcF9zZXNzX3NlbGVjdF9pbmZvKHZvaWQgKnNlc3NwLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtZmRzLAotICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCAqIGZkc2V0LCBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaykKK3NubXBfc2VsZWN0X2luZm8yKGludCAqbnVtZmRzLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQsCisJCSAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2spCiB7Ci0gICAgc3RydWN0IHNlc3Npb25fbGlzdCAqc2xwdGVzdCA9IChzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICopIHNlc3NwOworICAgIHJldHVybiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yKE5VTEwsIG51bWZkcywgZmRzZXQsIHRpbWVvdXQsIGJsb2NrKTsKK30KKworLyoqCisgKiBAc2VlIFNlZSBhbHNvIHNubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3MoKS4KKyAqLworaW50Citzbm1wX3Nlc3Nfc2VsZWN0X2luZm8odm9pZCAqc2Vzc3AsIGludCAqbnVtZmRzLCBmZF9zZXQgKmZkc2V0LAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrKQoreworICAgIHJldHVybiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm9fZmxhZ3Moc2Vzc3AsIG51bWZkcywgZmRzZXQsIHRpbWVvdXQsIGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9TRUxFQ1RfTk9GTEFHUyk7Cit9CisgICAgICAgIAorLyoqCisgKiBAc2VlIFNlZSBhbHNvIHNubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3MoKS4KKyAqLworaW50Citzbm1wX3Nlc3Nfc2VsZWN0X2luZm9fZmxhZ3Modm9pZCAqc2Vzc3AsIGludCAqbnVtZmRzLCBmZF9zZXQgKmZkc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrLCBpbnQgZmxhZ3MpCit7CisgIGludCByYzsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbGZkc2V0OworCisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmxmZHNldCwgRkRfU0VUU0laRSk7CisgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZsZmRzZXQsIGZkc2V0KTsKKyAgcmMgPSBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKHNlc3NwLCBudW1mZHMsICZsZmRzZXQsIHRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgZmxhZ3MpOworICBpZiAobmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQoZmRzZXQsICZsZmRzZXQpIDwgMCkgeworICAgICAgc25tcF9sb2coTE9HX0VSUiwKKwkgICAgICJVc2Ugc25tcF9zZXNzX3NlbGVjdF9pbmZvMigpIGZvciBwcm9jZXNzaW5nIgorCSAgICAgIiBsYXJnZSBmaWxlIGRlc2NyaXB0b3JzXG4iKTsKKyAgfQorICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZsZmRzZXQpOworICByZXR1cm4gcmM7Cit9CisKKy8qKgorICogQHNlZSBTZWUgYWxzbyBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKCkuCisgKi8KK2ludAorc25tcF9zZXNzX3NlbGVjdF9pbmZvMih2b2lkICpzZXNzcCwgaW50ICpudW1mZHMsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCwKKwkJICAgICAgIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrKQoreworICAgIHJldHVybiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKHNlc3NwLCBudW1mZHMsIGZkc2V0LCB0aW1lb3V0LCBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1NFTEVDVF9OT0ZMQUdTKTsKK30KKworLyoqCisgKiBDb21wdXRlL3VwZGF0ZSB0aGUgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBzZWxlY3QoKS4KKyAqCisgKiBAcGFyYW1baW5dICAgICBzZXNzcCAgIFdoaWNoIHNlc3Npb25zIHRvIHByb2Nlc3M6IGVpdGhlciBhIHBvaW50ZXIgdG8gYQorICogICBzcGVjaWZpYyBzZXNzaW9uIG9yIE5VTEwgd2hpY2ggbWVhbnMgdG8gcHJvY2VzcyBhbGwgc2Vzc2lvbnMuCisgKiBAcGFyYW1baW4sb3V0XSBudW1mZHMgIE9uIFBPU0lYIHN5c3RlbXMgb25lIG1vcmUgdGhhbiB0aGUgdGhlIGxhcmdlc3QgZmlsZQorICogICBkZXNjcmlwdG9yIHRoYXQgaXMgcHJlc2VudCBpbiAqZmRzZXQuIE9uIHN5c3RlbXMgdGhhdCB1c2UgV2luc29jayAoTWluR1cKKyAqICAgYW5kIE1TVkMpLCBkbyBub3QgdXNlIHRoZSB2YWx1ZSB3cml0dGVuIGludG8gKm51bWZkcy4KKyAqIEBwYXJhbVtpbixvdXRdIGZkc2V0ICAgQSBsYXJnZSBmaWxlIGRlc2NyaXB0b3Igc2V0IHRvIHdoaWNoIGFsbCBmaWxlCisgKiAgIGRlc2NyaXB0b3JzIHdpbGwgYmUgYWRkZWQgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIG9uZSBvZiB0aGUgZXhhbWluZWQKKyAqICAgc2Vzc2lvbnMuCisgKiBAcGFyYW1baW4sb3V0XSB0aW1lb3V0IE9uIGlucHV0LCBpZiAqYmxvY2sgPSAxLCB0aGUgbWF4aW11bSB0aW1lIHRoZSBjYWxsZXIKKyAqICAgd2lsbCBibG9jayB3aGlsZSB3YWl0aW5nIGZvciBOZXQtU05NUCBhY3Rpdml0eS4gT24gb3V0cHV0LCBpZiB0aGlzIGZ1bmN0aW9uCisgKiAgIGhhcyBzZXQgKmJsb2NrIHRvIDAsIHRoZSBtYXhpbXVtIHRpbWUgdGhlIGNhbGxlciBpcyBhbGxvd2VkIHRvIHdhaXQgYmVmb3JlCisgKiAgIGludm9raW5nIHRoZSBOZXQtU05NUCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyAoc25tcF9yZWFkKCksIHNubXBfdGltZW91dCgpCisgKiAgIGFuZCBydW5fYWxhcm1zKCkpLiBJZiB0aGlzIGZ1bmN0aW9uIGhhcyBzZXQgKmJsb2NrIHRvIDEsICp0aW1lb3V0IHdvbid0CisgKiAgIGhhdmUgYmVlbiBtb2RpZmllZCBhbmQgbm8gYWxhcm1zIGFyZSBhY3RpdmUuCisgKiBAcGFyYW1baW4sb3V0XSBibG9jayAgIE9uIGlucHV0LCB3aGV0aGVyIHRoZSBjYWxsZXIgcHJlZmVycyB0byBibG9jayBmb3JldmVyCisgKiAgIHdoZW4gbm8gYWxhcm1zIGFyZSBhY3RpdmUuIE9uIG91dHB1dCwgMCBtZWFucyB0aGF0IG5vIGFsYXJtcyBhcmUgYWN0aXZlCisgKiAgIG5vciB0aGF0IHRoZXJlIGlzIGEgdGltZW91dCBwZW5kaW5nIGZvciBhbnkgb2YgdGhlIHByb2Nlc3NlZCBzZXNzaW9ucy4KKyAqIEBwYXJhbVtpbl0gICAgIGZsYWdzICAgRWl0aGVyIDAgb3IgTkVUU05NUF9TRUxFQ1RfTk9BTEFSTVMuCisgKgorICogQHJldHVybiBOdW1iZXIgb2Ygc2Vzc2lvbnMgcHJvY2Vzc2VkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKgorICogQHNlZSBTZWUgYWxzbyBhZ2VudF9jaGVja19hbmRfcHJvY2VzcygpIGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgdGhpcworICogICBmdW5jdGlvbi4KKyAqLworaW50Citzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKHZvaWQgKnNlc3NwLCBpbnQgKm51bWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2ssIGludCBmbGFncykKK3sKICAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbHAsICpuZXh0ID0gTlVMTDsKICAgICBuZXRzbm1wX3JlcXVlc3RfbGlzdCAqcnA7Ci0gICAgc3RydWN0IHRpbWV2YWwgIG5vdywgZWFybGllc3QsIGRlbHRhOworICAgIHN0cnVjdCB0aW1ldmFsICBub3csIGVhcmxpZXN0LCBhbGFybV90bTsKICAgICBpbnQgICAgICAgICAgICAgYWN0aXZlID0gMCwgcmVxdWVzdHMgPSAwOwogICAgIGludCAgICAgICAgICAgICBuZXh0X2FsYXJtID0gMDsKIAogICAgIHRpbWVyY2xlYXIoJmVhcmxpZXN0KTsKIAogICAgIC8qCi0gICAgICogRm9yIGVhY2ggcmVxdWVzdCBvdXRzdGFuZGluZywgYWRkIGl0cyBzb2NrZXQgdG8gdGhlIGZkc2V0LAorICAgICAqIEZvciBlYWNoIHNlc3Npb24gZXhhbWluZWQsIGFkZCBpdHMgc29ja2V0IHRvIHRoZSBmZHNldCwKICAgICAgKiBhbmQgaWYgaXQgaXMgdGhlIGVhcmxpZXN0IHRpbWVvdXQgdG8gZXhwaXJlLCBtYXJrIGl0IGFzIGxvd2VzdC4KICAgICAgKiBJZiBhIHNpbmdsZSBzZXNzaW9uIGlzIHNwZWNpZmllZCwgZG8ganVzdCBmb3IgdGhhdCBzZXNzaW9uLgogICAgICAqLwogCi0gICAgaWYgKHNlc3NwKSB7Ci0gICAgICAgIHNscCA9IHNscHRlc3Q7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2xwID0gU2Vzc2lvbnM7Ci0gICAgfQotCiAgICAgREVCVUdNU0dUTCgoInNlc3Nfc2VsZWN0IiwgImZvciAlcyBzZXNzaW9uJXM6ICIsCiAgICAgICAgICAgICAgICAgc2Vzc3AgPyAic2luZ2xlIiA6ICJhbGwiLCBzZXNzcCA/ICIiIDogInMiKSk7CiAKLSAgICBmb3IgKDsgc2xwOyBzbHAgPSBuZXh0KSB7CisgICAgZm9yIChzbHAgPSBzZXNzcCA/IHNlc3NwIDogU2Vzc2lvbnM7IHNscDsgc2xwID0gbmV4dCkgewogICAgICAgICBuZXh0ID0gc2xwLT5uZXh0OwogCiAgICAgICAgIGlmIChzbHAtPnRyYW5zcG9ydCA9PSBOVUxMKSB7CkBAIC01OTMzLDE4ICs2MDc3LDE5IEBACiAgICAgICAgICAgICAqbnVtZmRzID0gKHNscC0+dHJhbnNwb3J0LT5zb2NrICsgMSk7CiAgICAgICAgIH0KIAotICAgICAgICBGRF9TRVQoc2xwLT50cmFuc3BvcnQtPnNvY2ssIGZkc2V0KTsKKyAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9TRVQoc2xwLT50cmFuc3BvcnQtPnNvY2ssIGZkc2V0KTsKICAgICAgICAgaWYgKHNscC0+aW50ZXJuYWwgIT0gTlVMTCAmJiBzbHAtPmludGVybmFsLT5yZXF1ZXN0cykgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIEZvdW5kIGFub3RoZXIgc2Vzc2lvbiB3aXRoIG91dHN0YW5kaW5nIHJlcXVlc3RzLiAgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJlcXVlc3RzKys7CiAgICAgICAgICAgICBmb3IgKHJwID0gc2xwLT5pbnRlcm5hbC0+cmVxdWVzdHM7IHJwOyBycCA9IHJwLT5uZXh0X3JlcXVlc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoKCF0aW1lcmlzc2V0KCZlYXJsaWVzdCkKLSAgICAgICAgICAgICAgICAgICAgIHx8ICh0aW1lcmNtcCgmcnAtPmV4cGlyZSwgJmVhcmxpZXN0LCA8KSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVhcmxpZXN0ID0gcnAtPmV4cGlyZTsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJ2ZXJib3NlOnNlc3Nfc2VsZWN0IiwiKHRvIGluICVkLiVkIHNlYykgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXJsaWVzdC50dl9zZWMsIGVhcmxpZXN0LnR2X3VzZWMpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRpbWVyaXNzZXQoJmVhcmxpZXN0KQorICAgICAgICAgICAgICAgICAgICB8fCAodGltZXJpc3NldCgmcnAtPmV4cGlyZU0pCisgICAgICAgICAgICAgICAgICAgICAgICAmJiB0aW1lcmNtcCgmcnAtPmV4cGlyZU0sICZlYXJsaWVzdCwgPCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVhcmxpZXN0ID0gcnAtPmV4cGlyZU07CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHKCgidmVyYm9zZTpzZXNzX3NlbGVjdCIsIih0byBpbiAlZC4lMDZkIHNlYykgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWVhcmxpZXN0LnR2X3NlYywgKGludCllYXJsaWVzdC50dl91c2VjKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01OTU5LDEwICs2MTA0LDE1IEBACiAgICAgfQogICAgIERFQlVHTVNHKCgic2Vzc19zZWxlY3QiLCAiXG4iKSk7CiAKLSAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0FMQVJNX0RPTlRfVVNFX1NJRykpIHsKLSAgICAgICAgbmV4dF9hbGFybSA9IGdldF9uZXh0X2FsYXJtX2RlbGF5X3RpbWUoJmRlbHRhKTsKLSAgICAgICAgREVCVUdNU0dUKCgic2Vzc19zZWxlY3QiLCJuZXh0IGFsYXJtICVkLiVkIHNlY1xuIiwKLSAgICAgICAgICAgICAgICAgICBkZWx0YS50dl9zZWMsIGRlbHRhLnR2X3VzZWMpKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CisKKyAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHKSAmJgorICAgICAgICAhKGZsYWdzICYgTkVUU05NUF9TRUxFQ1RfTk9BTEFSTVMpKSB7CisgICAgICAgIG5leHRfYWxhcm0gPSBuZXRzbm1wX2dldF9uZXh0X2FsYXJtX3RpbWUoJmFsYXJtX3RtLCAmbm93KTsKKyAgICAgICAgaWYgKG5leHRfYWxhcm0pCisgICAgICAgICAgICBERUJVR01TR1QoKCJzZXNzX3NlbGVjdCIsIm5leHQgYWxhcm0gYXQgJWxkLiUwNmxkIHNlY1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpYWxhcm1fdG0udHZfc2VjLCAobG9uZylhbGFybV90bS50dl91c2VjKSk7CiAgICAgfQogICAgIGlmIChuZXh0X2FsYXJtID09IDAgJiYgcmVxdWVzdHMgPT0gMCkgewogICAgICAgICAvKgpAQCAtNTk3Myw1MyArNjEyMywyMCBAQAogICAgICAgICByZXR1cm4gYWN0aXZlOwogICAgIH0KIAotICAgIC8qCi0gICAgICogKiBOb3cgZmluZCBvdXQgaG93IG11Y2ggdGltZSB1bnRpbCB0aGUgZWFybGllc3QgdGltZW91dC4gIFRoaXMKLSAgICAgKiAqIHRyYW5zZm9ybXMgZWFybGllc3QgZnJvbSBhbiBhYnNvbHV0ZSB0aW1lIGludG8gYSBkZWx0YSB0aW1lLCB0aGUKLSAgICAgKiAqIHRpbWUgbGVmdCB1bnRpbCB0aGUgc2VsZWN0IHNob3VsZCB0aW1lb3V0LgotICAgICAqLwotICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOwotICAgIC8qCi0gICAgICogTm93ID0gbm93OwotICAgICAqLworICAgIGlmIChuZXh0X2FsYXJtICYmCisgICAgICAgICghdGltZXJpc3NldCgmZWFybGllc3QpIHx8IHRpbWVyY21wKCZhbGFybV90bSwgJmVhcmxpZXN0LCA8KSkpCisgICAgICAgIGVhcmxpZXN0ID0gYWxhcm1fdG07CiAKLSAgICBpZiAobmV4dF9hbGFybSkgewotICAgICAgICBkZWx0YS50dl9zZWMgKz0gbm93LnR2X3NlYzsKLSAgICAgICAgZGVsdGEudHZfdXNlYyArPSBub3cudHZfdXNlYzsKLSAgICAgICAgd2hpbGUgKGRlbHRhLnR2X3VzZWMgPj0gMTAwMDAwMCkgewotICAgICAgICAgICAgZGVsdGEudHZfdXNlYyAtPSAxMDAwMDAwOwotICAgICAgICAgICAgZGVsdGEudHZfc2VjICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0aW1lcmlzc2V0KCZlYXJsaWVzdCkgfHwKLSAgICAgICAgICAgICgoZWFybGllc3QudHZfc2VjID4gZGVsdGEudHZfc2VjKSB8fAotICAgICAgICAgICAgICgoZWFybGllc3QudHZfc2VjID09IGRlbHRhLnR2X3NlYykgJiYKLSAgICAgICAgICAgICAgKGVhcmxpZXN0LnR2X3VzZWMgPiBkZWx0YS50dl91c2VjKSkpKSB7Ci0gICAgICAgICAgICBlYXJsaWVzdC50dl9zZWMgPSBkZWx0YS50dl9zZWM7Ci0gICAgICAgICAgICBlYXJsaWVzdC50dl91c2VjID0gZGVsdGEudHZfdXNlYzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChlYXJsaWVzdC50dl9zZWMgPCBub3cudHZfc2VjKSB7Ci0gICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c2Vzc19zZWxlY3QiLCJ0aW1lciBvdmVyZHVlXG4iKSk7Ci0gICAgICAgIGVhcmxpZXN0LnR2X3NlYyA9IDA7Ci0gICAgICAgIGVhcmxpZXN0LnR2X3VzZWMgPSAwOwotICAgIH0gZWxzZSBpZiAoZWFybGllc3QudHZfc2VjID09IG5vdy50dl9zZWMpIHsKLSAgICAgICAgZWFybGllc3QudHZfc2VjID0gMDsKLSAgICAgICAgZWFybGllc3QudHZfdXNlYyA9IChlYXJsaWVzdC50dl91c2VjIC0gbm93LnR2X3VzZWMpOwotICAgICAgICBpZiAoZWFybGllc3QudHZfdXNlYyA8IDApIHsKLSAgICAgICAgICAgIGVhcmxpZXN0LnR2X3VzZWMgPSAxMDA7Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzZXNzX3NlbGVjdCIsInRpbWVyIGR1ZSAqcmVhbCogc29vbi4gJWQgdXNlY1xuIiwKLSAgICAgICAgICAgICAgICAgICBlYXJsaWVzdC50dl91c2VjKSk7CisgICAgTkVUU05NUF9USU1FUlNVQigmZWFybGllc3QsICZub3csICZlYXJsaWVzdCk7CisgICAgaWYgKGVhcmxpZXN0LnR2X3NlYyA8IDApIHsKKyAgICAgICAgdGltZV90IG92ZXJkdWVfbXMgPSAtKGVhcmxpZXN0LnR2X3NlYyAqIDEwMDAgKyBlYXJsaWVzdC50dl91c2VjIC8gMTAwMCk7CisgICAgICAgIGlmIChvdmVyZHVlX21zID49IDEwKQorICAgICAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzZXNzX3NlbGVjdCIsInRpbWVyIG92ZXJkdWUgYnkgJWxkIG1zXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgb3ZlcmR1ZV9tcykpOworICAgICAgICB0aW1lcmNsZWFyKCZlYXJsaWVzdCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZWFybGllc3QudHZfc2VjID0gKGVhcmxpZXN0LnR2X3NlYyAtIG5vdy50dl9zZWMpOwotICAgICAgICBlYXJsaWVzdC50dl91c2VjID0gKGVhcmxpZXN0LnR2X3VzZWMgLSBub3cudHZfdXNlYyk7Ci0gICAgICAgIGlmIChlYXJsaWVzdC50dl91c2VjIDwgMCkgewotICAgICAgICAgICAgZWFybGllc3QudHZfc2VjLS07Ci0gICAgICAgICAgICBlYXJsaWVzdC50dl91c2VjID0gKDEwMDAwMDBMICsgZWFybGllc3QudHZfdXNlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzZXNzX3NlbGVjdCIsInRpbWVyIGR1ZSBpbiAlZC4lZCBzZWNcbiIsCi0gICAgICAgICAgICAgICAgICAgZWFybGllc3QudHZfc2VjLCBlYXJsaWVzdC50dl91c2VjKSk7CisgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c2Vzc19zZWxlY3QiLCJ0aW1lciBkdWUgaW4gJWQuJTA2ZCBzZWNcbiIsCisgICAgICAgICAgICAgICAgICAgKGludCllYXJsaWVzdC50dl9zZWMsIChpbnQpZWFybGllc3QudHZfdXNlYykpOwogICAgIH0KIAogICAgIC8qCkBAIC02MDI3LDggKzYxNDQsOCBAQAogICAgICAqLwogICAgIGlmICgoKmJsb2NrIHx8ICh0aW1lcmNtcCgmZWFybGllc3QsIHRpbWVvdXQsIDwpKSkpIHsKICAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzZXNzX3NlbGVjdCIsCi0gICAgICAgICAgICAgICAgICAgInNldHRpbmcgdGltZXIgdG8gJWQuJWQgc2VjLCBjbGVhciBibG9jayAod2FzICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICBlYXJsaWVzdC50dl9zZWMsIGVhcmxpZXN0LnR2X3VzZWMsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICJzZXR0aW5nIHRpbWVyIHRvICVkLiUwNmQgc2VjLCBjbGVhciBibG9jayAod2FzICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAoaW50KWVhcmxpZXN0LnR2X3NlYywgKGludCllYXJsaWVzdC50dl91c2VjLCAqYmxvY2spKTsKICAgICAgICAgKnRpbWVvdXQgPSBlYXJsaWVzdDsKICAgICAgICAgKmJsb2NrID0gMDsKICAgICB9CkBAIC02MTI0LDMyICs2MjQxLDE2IEBACiAgICAgICAgICAqIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIAogICAgICAgICAgKi8KICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVzZW5kIiwgImVuY29kaW5nIGZhaWx1cmVcbiIpKTsKLSAgICAgICAgaWYgKHBrdGJ1ZiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUocGt0YnVmKTsKLSAgICAgICAgfQorICAgICAgICBTTk1QX0ZSRUUocGt0YnVmKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQpKSB7Ci0gICAgICAgIGlmICh0cmFuc3BvcnQtPmZfZm10YWRkciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjaGFyICAgICAgICAgICAqc3RyID0gTlVMTDsKLSAgICAgICAgICAgIHN0ciA9IHRyYW5zcG9ydC0+Zl9mbXRhZGRyKHRyYW5zcG9ydCwgcnAtPnBkdS0+dHJhbnNwb3J0X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycC0+cGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpOwotICAgICAgICAgICAgaWYgKHN0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiXG5SZXNlbmRpbmcgJWx1IGJ5dGVzIHRvICVzXG4iLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsZW5ndGgsIHN0cik7Ci0gICAgICAgICAgICAgICAgU05NUF9GUkVFKHN0cik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIlxuUmVzZW5kaW5nICVsdSBieXRlcyB0byA8VU5LTk9XTj5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB4ZHVtcChwYWNrZXQsIGxlbmd0aCwgIiIpOwotICAgIH0KLQotICAgIHJlc3VsdCA9IHRyYW5zcG9ydC0+Zl9zZW5kKHRyYW5zcG9ydCwgcGFja2V0LCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihycC0+cGR1LT50cmFuc3BvcnRfZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihycC0+cGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpKTsKKyAgICBERUJVR01TR1RMKCgic2Vzc19wcm9jZXNzX3BhY2tldCIsICJyZXNlbmRpbmcgbWVzc2FnZSBpZCMlbGQgcmVxaWQjJWxkICIKKyAgICAgICAgICAgICAgICAicnBfcmVxaWQjJWxkIHJwX21zZ2lkIyVsZCBsZW4gJSIgTkVUU05NUF9QUkl6ICJ1XG4iLAorICAgICAgICAgICAgICAgIHJwLT5wZHUtPm1zZ2lkLCBycC0+cGR1LT5yZXFpZCwgcnAtPnJlcXVlc3RfaWQsIHJwLT5tZXNzYWdlX2lkLCBsZW5ndGgpKTsKKyAgICByZXN1bHQgPSBuZXRzbm1wX3RyYW5zcG9ydF9zZW5kKHRyYW5zcG9ydCwgcGFja2V0LCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHJwLT5wZHUtPnRyYW5zcG9ydF9kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocnAtPnBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKSk7CiAKICAgICAvKgogICAgICAqIFdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBsb2NhbCBwYWNrZXQgYnVmZmVyLCBpZiB3ZSBhbGxvY2F0ZWQgb25lIChkdWUKQEAgLTYxNTgsNyArNjI1OSw3IEBACiAKICAgICBpZiAocGt0YnVmICE9IE5VTEwpIHsKICAgICAgICAgU05NUF9GUkVFKHBrdGJ1Zik7Ci0gICAgICAgIHBrdGJ1ZiA9IHBhY2tldCA9IE5VTEw7CisgICAgICAgIHBhY2tldCA9IE5VTEw7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdCA8IDApIHsKQEAgLTYxNjcsMTMgKzYyNjgsMTMgQEAKICAgICAgICAgc25tcF9zZXRfZGV0YWlsKHN0cmVycm9yKGVycm5vKSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9IGVsc2UgewotICAgICAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOwogICAgICAgICB0diA9IG5vdzsKLSAgICAgICAgcnAtPnRpbWUgPSB0djsKKyAgICAgICAgcnAtPnRpbWVNID0gdHY7CiAgICAgICAgIHR2LnR2X3VzZWMgKz0gcnAtPnRpbWVvdXQ7CiAgICAgICAgIHR2LnR2X3NlYyArPSB0di50dl91c2VjIC8gMTAwMDAwMEw7CiAgICAgICAgIHR2LnR2X3VzZWMgJT0gMTAwMDAwMEw7Ci0gICAgICAgIHJwLT5leHBpcmUgPSB0djsKKyAgICAgICAgcnAtPmV4cGlyZU0gPSB0djsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC02MTk5LDcgKzYzMDAsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOwogCiAgICAgLyoKICAgICAgKiBGb3IgZWFjaCByZXF1ZXN0IG91dHN0YW5kaW5nLCBjaGVjayB0byBzZWUgaWYgaXQgaGFzIGV4cGlyZWQuCkBAIC02MjEzLDcgKzYzMTQsNyBAQAogICAgICAgICAgICAgZnJlZW1lID0gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgodGltZXJjbXAoJnJwLT5leHBpcmUsICZub3csIDwpKSkgeworICAgICAgICBpZiAoKHRpbWVyY21wKCZycC0+ZXhwaXJlTSwgJm5vdywgPCkpKSB7CiAgICAgICAgICAgICBpZiAoKHNwdHIgPSBmaW5kX3NlY19tb2QocnAtPnBkdS0+c2VjdXJpdHlNb2RlbCkpICE9IE5VTEwgJiYKICAgICAgICAgICAgICAgICBzcHRyLT5wZHVfdGltZW91dCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgLyoKQEAgLTYyNDEsMTggKzYzNDIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soTkVUU05NUF9DQUxMQkFDS19PUF9USU1FRF9PVVQsIHNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycC0+cGR1LT5yZXFpZCwgcnAtPnBkdSwgbWFnaWMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNwLT5yZXF1ZXN0cyA9PSBycCkgewotICAgICAgICAgICAgICAgICAgICBpc3AtPnJlcXVlc3RzID0gcnAtPm5leHRfcmVxdWVzdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzcC0+cmVxdWVzdHNFbmQgPT0gcnApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzcC0+cmVxdWVzdHNFbmQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAob3JwKQogICAgICAgICAgICAgICAgICAgICBvcnAtPm5leHRfcmVxdWVzdCA9IHJwLT5uZXh0X3JlcXVlc3Q7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc3AtPnJlcXVlc3RzRW5kID09IHJwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc3AtPnJlcXVlc3RzRW5kID0gb3JwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocnAtPnBkdSk7IC8qIEZJWCAgcnAgaXMgYWxyZWFkeSBmcmVlJ2QhICovCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpc3AtPnJlcXVlc3RzID0gcnAtPm5leHRfcmVxdWVzdDsKKyAgICAgICAgICAgICAgICBpZiAoaXNwLT5yZXF1ZXN0c0VuZCA9PSBycCkKKyAgICAgICAgICAgICAgICAgICAgaXNwLT5yZXF1ZXN0c0VuZCA9IG9ycDsKKyAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHJwLT5wZHUpOwogICAgICAgICAgICAgICAgIGZyZWVtZSA9IHJwOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBkb24ndCB1cGRhdGUgb3JwIGJlbG93ICovCiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNjUwNSw2ICs2NjAxLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9JU19TVUJUUkVFCiAvKiogSWRlbnRpY2FsIHRvIG5ldHNubXBfb2lkX2VxdWFscywgZXhjZXB0IG9ubHkgdGhlIGxlbmd0aCB1cCB0byBsZW4xIGlzIGNvbXBhcmVkLgogICogRnVuY3Rpb25hbGx5LCB0aGlzIGRldGVybWluZXMgaWYgaW5fbmFtZTIgaXMgZXF1YWwgb3IgYSBzdWJ0cmVlIG9mIGluX25hbWUxCiAgKiBAcGFyYW0gaW5fbmFtZTEgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvaWQuCkBAIC02NTI1LDYgKzY2MjIsNyBAQAogCiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfSVNfU1VCVFJFRSAqLwogCiAvKiogR2l2ZW4gdHdvIE9JRHMsIGRldGVybWluZSB0aGUgY29tbW9uIHByZWZpeCB0byB0aGVtIGJvdGguCiAgKiBAcGFyYW0gaW5fbmFtZTEgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvaWQuCkBAIC02NjA5LDcgKzY3MDcsNyBAQAogc25tcF9wZHVfYWRkX3ZhcmlhYmxlKG5ldHNubXBfcGR1ICpwZHUsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqIHZhbHVlLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLCBjb25zdCB2b2lkICogdmFsdWUsIHNpemVfdCBsZW4pCiB7CiAgICAgcmV0dXJuIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnBkdS0+dmFyaWFibGVzLCBuYW1lLCBuYW1lX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCB2YWx1ZSwgbGVuKTsKQEAgLTY2MjMsNyArNjcyMSw3IEBACiBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKiB2YXJsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKiB2YWx1ZSwgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsIGNvbnN0IHZvaWQgKiB2YWx1ZSwgc2l6ZV90IGxlbikKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsICp2dG1wOwogICAgIGludCByYzsKQEAgLTY2NDEsNyArNjczOSw3IEBACiAgICAgaWYgKCggMCAhPSByYyApIHx8CiAgICAgICAgIChuYW1lICE9IE5VTEwgJiYgc25tcF9zZXRfdmFyX29iamlkKHZhcnMsIG5hbWUsIG5hbWVfbGVuZ3RoKSkpIHsKICAgICAgICAgc25tcF9mcmVlX3Zhcih2YXJzKTsKLSAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyoKQEAgLTY3ODksNyArNjg4Nyw3IEBACiAgICAgICAgICAgICBicmVhazsKICNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9JTlRFR0VSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGx0bXAsIHNpemVvZihsdG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHRtcCwgc2l6ZW9mKGx0bXApKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlICd1JzoKQEAgLTY4MDMsNyArNjkwMSw3IEBACiAgICAgICAgIGx0bXAgPSBzdHJ0b3VsKHZhbHVlLCAmZWNwLCAxMCk7CiAgICAgICAgIGlmICgqdmFsdWUgJiYgISplY3ApCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX1VOU0lHTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBsdG1wLCBzaXplb2YobHRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsdG1wLCBzaXplb2YobHRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNjgxOSw3ICs2OTE3LDcgQEAKICAgICAgICAgbHRtcCA9IHN0cnRvdWwodmFsdWUsICZlY3AsIDEwKTsKICAgICAgICAgaWYgKCp2YWx1ZSAmJiAhKmVjcCkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fVUlOVEVHRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGx0bXAsIHNpemVvZihsdG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0bXAsIHNpemVvZihsdG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC02ODM1LDcgKzY5MzMsNyBAQAogICAgICAgICBsdG1wID0gc3RydG91bCh2YWx1ZSwgJmVjcCwgMTApOwogICAgICAgICBpZiAoKnZhbHVlICYmICEqZWNwKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9DT1VOVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBsdG1wLCBzaXplb2YobHRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsdG1wLCBzaXplb2YobHRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNjg1MCw3ICs2OTQ4LDcgQEAKICNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KICAgICAgICAgaWYgKHJlYWQ2NCgmYzY0dG1wLCB2YWx1ZSkpCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX0NPVU5URVI2NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgYzY0dG1wLCBzaXplb2YoYzY0dG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmM2NHRtcCwgc2l6ZW9mKGM2NHRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNjg2Niw3ICs2OTY0LDcgQEAKICAgICAgICAgbHRtcCA9IHN0cnRvdWwodmFsdWUsICZlY3AsIDEwKTsKICAgICAgICAgaWYgKCp2YWx1ZSAmJiAhKmVjcCkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fVElNRVRJQ0tTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBsdG1wLCBzaXplb2YobG9uZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsdG1wLCBzaXplb2YobG9uZykpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNjg4Miw3ICs2OTgwLDcgQEAKICAgICAgICAgYXRtcCA9IGluZXRfYWRkcih2YWx1ZSk7CiAgICAgICAgIGlmIChhdG1wICE9IChpbl9hZGRyX3QpIC0xIHx8ICFzdHJjbXAodmFsdWUsICIyNTUuMjU1LjI1NS4yNTUiKSkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fSVBBRERSRVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBhdG1wLCBzaXplb2YoYXRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdG1wLCBzaXplb2YoYXRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNjkwMCw5ICs2OTk4LDggQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRpbnQgPSBNQVhfT0lEX0xFTjsKICAgICAgICAgICAgIGlmIChzbm1wX3BhcnNlX29pZCh2YWx1ZSwgKG9pZCAqKSBidWYsICZ0aW50KSkgewotICAgICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0JKRUNUX0lELCBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvaWQpICogdGludCk7CisgICAgICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9PQkpFQ1RfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKG9pZCkgKiB0aW50KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc25tcF9lcnJubzsgICAgLypNVENSSVRJQ0FMX1JFU09VUkNFICovCiAgICAgICAgICAgICB9CkBAIC02OTIwLDggKzcwMTcsOCBAQAogICAgICAgICB9CiAJaWYgKCdzJyA9PSB0eXBlICYmIGRvX2hpbnQgJiYgIXBhcnNlX29jdGV0X2hpbnQodHAtPmhpbnQsIHZhbHVlLCAmaGludHB0ciwgJml0bXApKSB7CiAgICAgICAgICAgICBpZiAoX2NoZWNrX3JhbmdlKHRwLCBpdG1wLCAmcmVzdWx0LCAiVmFsdWUgZG9lcyBub3QgbWF0Y2ggRElTUExBWS1ISU5UIikpIHsKLSAgICAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgaGludHB0ciwgaXRtcCk7CisgICAgICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRwdHIsIGl0bXApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU05NUF9GUkVFKGhpbnRwdHIpOwogICAgICAgICAgICAgaGludHB0ciA9IGJ1ZjsKQEAgLTY5NTgsNyArNzA1NSw3IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAnbic6Ci0gICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fTlVMTCwgMCwgMCk7CisgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fTlVMTCwgTlVMTCwgMCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAnYic6CkBAIC03MDMzLDcgKzcxMzAsNyBAQAogICAgIGNhc2UgJ1UnOgogICAgICAgICBpZiAocmVhZDY0KCZjNjR0bXAsIHZhbHVlKSkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fT1BBUVVFX1U2NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgYzY0dG1wLCBzaXplb2YoYzY0dG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmM2NHRtcCwgc2l6ZW9mKGM2NHRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNzA0MSw3ICs3MTM4LDcgQEAKICAgICBjYXNlICdJJzoKICAgICAgICAgaWYgKHJlYWQ2NCgmYzY0dG1wLCB2YWx1ZSkpCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX09QQVFVRV9JNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGM2NHRtcCwgc2l6ZW9mKGM2NHRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjNjR0bXAsIHNpemVvZihjNjR0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTcwNDksMTYgKzcxNDYsMTUgQEAKICAgICBjYXNlICdGJzoKICAgICAgICAgaWYgKHNzY2FuZih2YWx1ZSwgIiVmIiwgJmZ0bXApID09IDEpCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX09QQVFVRV9GTE9BVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgZnRtcCwgc2l6ZW9mKGZ0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRtcCwgc2l6ZW9mKGZ0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgJ0QnOgogICAgICAgICBpZiAoc3NjYW5mKHZhbHVlLCAiJWxmIiwgJmR0bXApID09IDEpCi0gICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT1BBUVVFX0RPVUJMRSwgKHVfY2hhciAqKSAmIGR0bXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGR0bXApKTsKKyAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fT1BBUVVFX0RPVUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHRtcCwgc2l6ZW9mKGR0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTcyNTksMjUgKzczNTUsMjcgQEAKIG9pZCAgICAgICAgICAgICoKIHNubXBfZHVwbGljYXRlX29iamlkKGNvbnN0IG9pZCAqIG9ialRvQ29weSwgc2l6ZV90IG9ialRvQ29weUxlbikKIHsKLSAgICBvaWQgICAgICAgICAgICAqcmV0dXJuT2lkID0gTlVMTDsKKyAgICBvaWQgICAgICAgICAgICAqcmV0dXJuT2lkOwogICAgIGlmIChvYmpUb0NvcHkgIT0gTlVMTCAmJiBvYmpUb0NvcHlMZW4gIT0gMCkgewogICAgICAgICByZXR1cm5PaWQgPSAob2lkICopIG1hbGxvYyhvYmpUb0NvcHlMZW4gKiBzaXplb2Yob2lkKSk7CiAgICAgICAgIGlmIChyZXR1cm5PaWQpIHsKLSAgICAgICAgICAgIG1lbW1vdmUocmV0dXJuT2lkLCBvYmpUb0NvcHksIG9ialRvQ29weUxlbiAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgICAgIG1lbWNweShyZXR1cm5PaWQsIG9ialRvQ29weSwgb2JqVG9Db3B5TGVuICogc2l6ZW9mKG9pZCkpOwogICAgICAgICB9Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm5PaWQgPSBOVUxMOwogICAgIHJldHVybiByZXR1cm5PaWQ7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFUSVNUSUNTCiAvKgogICogZ2VuZXJpYyBzdGF0aXN0aWNzIGNvdW50ZXIgZnVuY3Rpb25zIAogICovCi1zdGF0aWMgdV9pbnQgICAgc3RhdGlzdGljc1tNQVhfU1RBVFNdOworc3RhdGljIHVfaW50ICAgIHN0YXRpc3RpY3NbTkVUU05NUF9TVEFUX01BWF9TVEFUU107CiAKIHVfaW50CiBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoaW50IHdoaWNoKQogewotICAgIGlmICh3aGljaCA+PSAwICYmIHdoaWNoIDwgTUFYX1NUQVRTKSB7CisgICAgaWYgKHdoaWNoID49IDAgJiYgd2hpY2ggPCBORVRTTk1QX1NUQVRfTUFYX1NUQVRTKSB7CiAgICAgICAgIHN0YXRpc3RpY3Nbd2hpY2hdKys7CiAgICAgICAgIHJldHVybiBzdGF0aXN0aWNzW3doaWNoXTsKICAgICB9CkBAIC03Mjg3LDcgKzczODUsNyBAQAogdV9pbnQKIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieShpbnQgd2hpY2gsIGludCBjb3VudCkKIHsKLSAgICBpZiAod2hpY2ggPj0gMCAmJiB3aGljaCA8IE1BWF9TVEFUUykgeworICAgIGlmICh3aGljaCA+PSAwICYmIHdoaWNoIDwgTkVUU05NUF9TVEFUX01BWF9TVEFUUykgewogICAgICAgICBzdGF0aXN0aWNzW3doaWNoXSArPSBjb3VudDsKICAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3Nbd2hpY2hdOwogICAgIH0KQEAgLTcyOTcsNyArNzM5NSw3IEBACiB1X2ludAogc25tcF9nZXRfc3RhdGlzdGljKGludCB3aGljaCkKIHsKLSAgICBpZiAod2hpY2ggPj0gMCAmJiB3aGljaCA8IE1BWF9TVEFUUykKKyAgICBpZiAod2hpY2ggPj0gMCAmJiB3aGljaCA8IE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMpCiAgICAgICAgIHJldHVybiBzdGF0aXN0aWNzW3doaWNoXTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTczMDcsNSArNzQwNSw1IEBACiB7CiAgICAgbWVtc2V0KHN0YXRpc3RpY3MsIDAsIHNpemVvZihzdGF0aXN0aWNzKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFUSVNUSUNTICovCiAvKiogIEB9ICovCi0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9hdXRoLmMgYi9zbm1wbGliL3NubXBfYXV0aC5jCmluZGV4IGRkZmQzZDMuLjRiNDA4ZjEgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9hdXRoLmMKKysrIGIvc25tcGxpYi9zbm1wX2F1dGguYwpAQCAtNDMsMTEgKzQzLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzMsMTAgKzY5LDYgQEAKICNpbmNsdWRlIDxkbWFsbG9jLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpZmRlZiB2bXMKICNpbmNsdWRlIDxpbi5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfY2xpZW50LmMgYi9zbm1wbGliL3NubXBfY2xpZW50LmMKaW5kZXggN2VlZTNhMS4uYWI3YTU4YyAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX2NsaWVudC5jCisrKyBiL3NubXBsaWIvc25tcF9jbGllbnQuYwpAQCAtNDAsNiArNDAsNyBAQAogICogIEB7CiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtNTYsMTEgKzU3LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtODksMTIgKzg2LDEwIEBACiAjaW5jbHVkZSA8ZG1hbGxvYy5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2RzX2FnZW50Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg+CkBAIC0xMDIsNyArOTcsMTQgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21pYi5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfY2xpZW50X2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfc3BsaXRfcGR1LCBzbm1wX2NsaWVudF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9yZXNldF92YXJfdHlwZXMsIHNubXBfY2xpZW50X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihxdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uLCBzbm1wX2NsaWVudF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yocm93X2NyZWF0ZSwgc25tcF9jbGllbnRfYWxsKQogCiAjaWZuZGVmIEJTRDRfMwogI2RlZmluZSBCU0Q0XzIKQEAgLTE2MSw2ICsxNjMsNyBAQAogfQogCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KIHN0YXRpYyBpbnQKIHNubXBfc3luY2hfaW5wdXQoaW50IG9wLAogICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLApAQCAtMTcwLDEwICsxNzMsMTQgQEAKICAgICBpbnQgICAgICAgICAgICAgcnB0X3R5cGU7CiAKICAgICBpZiAocmVxaWQgIT0gc3RhdGUtPnJlcWlkICYmIHBkdSAmJiBwZHUtPmNvbW1hbmQgIT0gU05NUF9NU0dfUkVQT1JUKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3N5bmNoIiwgIlVuZXhwZWN0ZWQgcmVzcG9uc2UgKFJlcUlEOiAlZCwlZCAtIENtZCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWlkLCBzdGF0ZS0+cmVxaWQsIHBkdS0+Y29tbWFuZCApKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgc3RhdGUtPndhaXRpbmcgPSAwOworICAgIERFQlVHTVNHVEwoKCJzbm1wX3N5bmNoIiwgIlJlc3BvbnNlIChSZXFJRDogJWQgLSBDbWQgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWlkLCAocGR1ID8gcGR1LT5jb21tYW5kIDogLTEpKSk7CiAKICAgICBpZiAob3AgPT0gTkVUU05NUF9DQUxMQkFDS19PUF9SRUNFSVZFRF9NRVNTQUdFICYmIHBkdSkgewogICAgICAgICBpZiAocGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1JFUE9SVCkgewpAQCAtMjM2LDExICsyNDMsMTEgQEAKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICBtZW1tb3ZlKG5ld3ZhciwgdmFyLCBzaXplb2YobmV0c25tcF92YXJpYWJsZV9saXN0KSk7Ci0gICAgbmV3dmFyLT5uZXh0X3ZhcmlhYmxlID0gMDsKLSAgICBuZXd2YXItPm5hbWUgPSAwOwotICAgIG5ld3Zhci0+dmFsLnN0cmluZyA9IDA7Ci0gICAgbmV3dmFyLT5kYXRhID0gMDsKLSAgICBuZXd2YXItPmRhdGFGcmVlSG9vayA9IDA7CisgICAgbmV3dmFyLT5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKyAgICBuZXd2YXItPm5hbWUgPSBOVUxMOworICAgIG5ld3Zhci0+dmFsLnN0cmluZyA9IE5VTEw7CisgICAgbmV3dmFyLT5kYXRhID0gTlVMTDsKKyAgICBuZXd2YXItPmRhdGFGcmVlSG9vayA9IE5VTEw7CiAgICAgbmV3dmFyLT5pbmRleCA9IDA7CiAKICAgICAvKgpAQCAtMjY1LDkgKzI3MiwxMyBAQAogICAgICAgICAgICAgbWVtbW92ZShuZXd2YXItPnZhbC5zdHJpbmcsIHZhci0+dmFsLnN0cmluZywgdmFyLT52YWxfbGVuKTsKICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogZml4IHRoZSBwb2ludGVyIHRvIG5ldyBsb2NhbCBzdG9yZSAqLwogICAgICAgICAgICAgbmV3dmFyLT52YWwuc3RyaW5nID0gbmV3dmFyLT5idWY7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogbm8gbmVlZCBmb3IgYSBtZW1tb3ZlLCBzaW5jZSB3ZSBjb3BpZWQgdGhlIHdob2xlIHZhcgorICAgICAgICAgICAgICogc3RydWN0IChhbmQgdGh1cyB2YXItPmJ1ZikgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAgICAgICovCiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBuZXd2YXItPnZhbC5zdHJpbmcgPSAwOworICAgICAgICBuZXd2YXItPnZhbC5zdHJpbmcgPSBOVUxMOwogICAgICAgICBuZXd2YXItPnZhbF9sZW4gPSAwOwogICAgIH0KIApAQCAtMjgxLDkgKzI5Miw5IEBACiAgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgMSBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4KICAqLwogaW50Ci1zbm1wX2Nsb25lX21lbSh2b2lkICoqZHN0UHRyLCB2b2lkICpzcmNQdHIsIHVuc2lnbmVkIGxlbikKK3NubXBfY2xvbmVfbWVtKHZvaWQgKipkc3RQdHIsIGNvbnN0IHZvaWQgKnNyY1B0ciwgdW5zaWduZWQgbGVuKQogewotICAgICpkc3RQdHIgPSAwOworICAgICpkc3RQdHIgPSBOVUxMOwogICAgIGlmIChzcmNQdHIpIHsKICAgICAgICAgKmRzdFB0ciA9IG1hbGxvYyhsZW4gKyAxKTsKICAgICAgICAgaWYgKCEqZHN0UHRyKSB7CkBAIC0zNDMsMjAgKzM1NCwyMCBAQAogCiAgICAgbmV3cGR1ID0gKG5ldHNubXBfcGR1ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF9wZHUpKTsKICAgICBpZiAoIW5ld3BkdSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG1lbW1vdmUobmV3cGR1LCBwZHUsIHNpemVvZihuZXRzbm1wX3BkdSkpOwogCiAgICAgLyoKICAgICAgKiByZXNldCBjb3BpZWQgcG9pbnRlcnMgaWYgY29weSBmYWlscyAKICAgICAgKi8KLSAgICBuZXdwZHUtPnZhcmlhYmxlcyA9IDA7Ci0gICAgbmV3cGR1LT5lbnRlcnByaXNlID0gMDsKLSAgICBuZXdwZHUtPmNvbW11bml0eSA9IDA7Ci0gICAgbmV3cGR1LT5zZWN1cml0eUVuZ2luZUlEID0gMDsKLSAgICBuZXdwZHUtPnNlY3VyaXR5TmFtZSA9IDA7Ci0gICAgbmV3cGR1LT5jb250ZXh0RW5naW5lSUQgPSAwOwotICAgIG5ld3BkdS0+Y29udGV4dE5hbWUgPSAwOwotICAgIG5ld3BkdS0+dHJhbnNwb3J0X2RhdGEgPSAwOworICAgIG5ld3BkdS0+dmFyaWFibGVzID0gTlVMTDsKKyAgICBuZXdwZHUtPmVudGVycHJpc2UgPSBOVUxMOworICAgIG5ld3BkdS0+Y29tbXVuaXR5ID0gTlVMTDsKKyAgICBuZXdwZHUtPnNlY3VyaXR5RW5naW5lSUQgPSBOVUxMOworICAgIG5ld3BkdS0+c2VjdXJpdHlOYW1lID0gTlVMTDsKKyAgICBuZXdwZHUtPmNvbnRleHRFbmdpbmVJRCA9IE5VTEw7CisgICAgbmV3cGR1LT5jb250ZXh0TmFtZSA9IE5VTEw7CisgICAgbmV3cGR1LT50cmFuc3BvcnRfZGF0YSA9IE5VTEw7CiAKICAgICAvKgogICAgICAqIGNvcHkgYnVmZmVycyBpbmRpdmlkdWFsbHkuIElmIGFueSBjb3B5IGZhaWxzLCBhbGwgYXJlIGZyZWVkLiAKQEAgLTM3Nyw3ICszODgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnRyYW5zcG9ydF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCkpIHsKICAgICAgICAgc25tcF9mcmVlX3BkdShuZXdwZHUpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKHBkdSAhPSBOVUxMICYmIHBkdS0+c2VjdXJpdHlTdGF0ZVJlZiAmJgpAQCAtMzkyLDYgKzQwMyw3IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KKwogICAgIGlmICgoc3B0ciA9IGZpbmRfc2VjX21vZChuZXdwZHUtPnNlY3VyaXR5TW9kZWwpKSAhPSBOVUxMICYmCiAgICAgICAgIHNwdHItPnBkdV9jbG9uZSAhPSBOVUxMKSB7CiAgICAgICAgIC8qCkBAIC00MzMsMTMgKzQ0NSwxMyBAQAogICAgICAgICAgICAgaWYgKG5ld3ZhcikKICAgICAgICAgICAgICAgICBmcmVlKChjaGFyICopIG5ld3Zhcik7CiAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZChuZXdoZWFkKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICAvKgogICAgICAgICAgKiBhZGQgY2xvbmVkIHZhcmlhYmxlIHRvIG5ldyBsaXN0ICAKICAgICAgICAgICovCi0gICAgICAgIGlmICgwID09IG5ld2hlYWQpCisgICAgICAgIGlmIChOVUxMID09IG5ld2hlYWQpCiAgICAgICAgICAgICBuZXdoZWFkID0gbmV3dmFyOwogICAgICAgICBpZiAob2xkdmFyKQogICAgICAgICAgICAgb2xkdmFyLT5uZXh0X3ZhcmlhYmxlID0gbmV3dmFyOwpAQCAtNDg0LDcgKzQ5Niw3IEBACiAgICAgaW50ICAgICAgICAgICAgIGRyb3BfaWR4OwogCiAgICAgaWYgKCFuZXdwZHUpCi0gICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIC8qIHdoZXJlIGlzIFBEVSB0byBjb3B5IHRvID8gKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogd2hlcmUgaXMgUERVIHRvIGNvcHkgdG8gPyAqLwogCiAgICAgaWYgKGRyb3BfZXJyKQogICAgICAgICBkcm9wX2lkeCA9IHBkdS0+ZXJyaW5kZXggLSBza2lwX2NvdW50OwpAQCAtNTUxLDcgKzU2Myw3IEBACiAvKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIGNsb25lIGEgZnVsbCB2YXJiaW5kIGxpc3QKICAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY2xvbmVkIFBEVSBpZiBzdWNjZXNzZnVsLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNsb25lZCB2YXJiaW5kIGxpc3QgaWYgc3VjY2Vzc2Z1bC4KICAqIFJldHVybnMgMCBpZiBmYWlsdXJlCiAgKi8KIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCkBAIC01ODIsNiArNTk0LDcgQEAKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjbG9uZWQgUERVIGlmIHN1Y2Nlc3NmdWwuCiAgKiBSZXR1cm5zIDAgaWYgZmFpbHVyZS4KICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfU1BMSVRfUERVCiBuZXRzbm1wX3BkdSAgICAqCiBzbm1wX3NwbGl0X3BkdShuZXRzbm1wX3BkdSAqcGR1LCBpbnQgc2tpcF9jb3VudCwgaW50IGNvcHlfY291bnQpCiB7CkBAIC01OTIsNiArNjA1LDcgQEAKIAogICAgIHJldHVybiBuZXdwZHU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX1NQTElUX1BEVSAqLwogCiAKIC8qCkBAIC02MTMsMTggKzYyNywxOCBAQAogCiAgICAgaWYgKChwZHUtPmNvbW1hbmQgIT0gU05NUF9NU0dfUkVTUE9OU0UpCiAgICAgICAgIHx8IChwZHUtPmVycnN0YXQgPT0gU05NUF9FUlJfTk9FUlJPUikKLSAgICAgICAgfHwgKDAgPT0gcGR1LT52YXJpYWJsZXMpCi0gICAgICAgIHx8IChwZHUtPmVycmluZGV4ID4gc25tcF92YXJiaW5kX2xlbihwZHUpKQorICAgICAgICB8fCAoTlVMTCA9PSBwZHUtPnZhcmlhYmxlcykKKyAgICAgICAgfHwgKHBkdS0+ZXJyaW5kZXggPiAoaW50KXNubXBfdmFyYmluZF9sZW4ocGR1KSkKICAgICAgICAgfHwgKHBkdS0+ZXJyaW5kZXggPD0gMCkpIHsKLSAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgLyogcHJlLWNvbmRpdGlvbiB0ZXN0cyBmYWlsICovCisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIHByZS1jb25kaXRpb24gdGVzdHMgZmFpbCAqLwogICAgIH0KIAogICAgIG5ld3BkdSA9IF9jbG9uZV9wZHUocGR1LCAxKTsgICAgICAgIC8qIGNvcGllcyBhbGwgZXhjZXB0IGVycm9yZWQgdmFyaWFibGUgKi8KICAgICBpZiAoIW5ld3BkdSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICghbmV3cGR1LT52YXJpYWJsZXMpIHsKICAgICAgICAgc25tcF9mcmVlX3BkdShuZXdwZHUpOwotICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAvKiBubyB2YXJpYWJsZXMuICJzaG91bGQgbm90IGhhcHBlbiIgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogbm8gdmFyaWFibGVzLiAic2hvdWxkIG5vdCBoYXBwZW4iICovCiAgICAgfQogICAgIG5ld3BkdS0+Y29tbWFuZCA9IGNvbW1hbmQ7CiAgICAgbmV3cGR1LT5yZXFpZCA9IHNubXBfZ2V0X25leHRfcmVxaWQoKTsKQEAgLTcxNSwxMCArNzI5LDggQEAKIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIG5ld3ZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLCBsb25nIHZhbCkKIHsKLSAgICBjb25zdCBsb25nIHYgPSB2YWw7CiAgICAgbmV3dmFyLT50eXBlID0gdHlwZTsKLSAgICByZXR1cm4gc25tcF9zZXRfdmFyX3ZhbHVlKG5ld3ZhciwgJnYsIHNpemVvZihsb25nKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNubXBfc2V0X3Zhcl92YWx1ZShuZXd2YXIsICZ2YWwsIHNpemVvZihsb25nKSk7CiB9CiAKIGludApAQCAtNzMyLDYgKzc0NCw4IEBACiAgICAgcmV0dXJuIGNvdW50OwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY291bnRfdmFyYmluZHNfb2ZfdHlwZSwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09VTlRfVkFSQklORFNfT0ZfVFlQRQogaW50CiBjb3VudF92YXJiaW5kc19vZl90eXBlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcl9wdHIsIHVfY2hhciB0eXBlKQogewpAQCAtNzQzLDcgKzc1NywxMCBAQAogCiAgICAgcmV0dXJuIGNvdW50OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09VTlRfVkFSQklORFNfT0ZfVFlQRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZmluZF92YXJpbmRfb2ZfdHlwZSwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklORF9WQVJJTkRfT0ZfVFlQRQogbmV0c25tcF92YXJpYWJsZV9saXN0ICoKIGZpbmRfdmFyYmluZF9vZl90eXBlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcl9wdHIsIHVfY2hhciB0eXBlKQogewpAQCAtNzUyLDEwICs3NjksMTEgQEAKIAogICAgIHJldHVybiB2YXJfcHRyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklORF9WQVJJTkRfT0ZfVFlQRSAqLwogCiBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QqCiBmaW5kX3ZhcmJpbmRfaW5fbGlzdCggbmV0c25tcF92YXJpYWJsZV9saXN0ICp2Ymxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgb2lkICpuYW1lLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IGxlbikKIHsKICAgICBmb3IgKDsgdmJsaXN0ICE9IE5VTEw7IHZibGlzdCA9IHZibGlzdC0+bmV4dF92YXJpYWJsZSkKICAgICAgICAgaWYgKCFzbm1wX29pZF9jb21wYXJlKHZibGlzdC0+bmFtZSwgdmJsaXN0LT5uYW1lX2xlbmd0aCwgbmFtZSwgbGVuKSkKQEAgLTc4Myw3ICs4MDEsNyBAQAogICAgIGlmICh2YXJzLT52YWwuc3RyaW5nICYmIHZhcnMtPnZhbC5zdHJpbmcgIT0gdmFycy0+YnVmKSB7CiAgICAgICAgIGZyZWUodmFycy0+dmFsLnN0cmluZyk7CiAgICAgfQotICAgIHZhcnMtPnZhbC5zdHJpbmcgPSAwOworICAgIHZhcnMtPnZhbC5zdHJpbmcgPSBOVUxMOwogICAgIHZhcnMtPnZhbF9sZW4gPSAwOwogCiAgICAgaWYgKHZhbHVlID09IE5VTEwgJiYgbGVuID4gMCkgewpAQCAtNzk0LDcgKzgxMiw3IEBACiAgICAgLyoKICAgICAgKiB1c2UgYnVpbHQtaW4gc3RvcmFnZSBmb3Igc21hbGxlciB2YWx1ZXMgCiAgICAgICovCi0gICAgaWYgKGxlbiA8PSAoc2l6ZW9mKHZhcnMtPmJ1ZikgLSAxKSkgeworICAgIGlmIChsZW4gPD0gc2l6ZW9mKHZhcnMtPmJ1ZikpIHsKICAgICAgICAgdmFycy0+dmFsLnN0cmluZyA9ICh1X2NoYXIgKikgdmFycy0+YnVmOwogICAgICAgICBsYXJnZXZhbCA9IDA7CiAgICAgfQpAQCAtODMzLDcgKzg1MSw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgotI2lmIGRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykgJiYgKFNJWkVPRl9MT05HICE9IFNJWkVPRl9MT05HX0xPTkcpICYmIChTSVpFT0ZfTE9OR19MT05HICE9IFNJWkVPRl9JTlRNQVhfVCkKKyNpZiBkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpICYmIChTSVpFT0ZfTE9ORyAhPSBTSVpFT0ZfTE9OR19MT05HKQorI2lmICFkZWZpbmVkKFNJWkVPRl9JTlRNQVhfVCkgfHwgKFNJWkVPRl9MT05HX0xPTkcgIT0gU0laRU9GX0lOVE1BWF9UKQogICAgICAgICBlbHNlIGlmICh2YXJzLT52YWxfbGVuID09IHNpemVvZihsb25nIGxvbmcpKXsKICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAgICp2YWxfdWxsb25nCiAgICAgICAgICAgICAgICAgPSAoY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICopIHZhbHVlOwpAQCAtODQ0LDcgKzg2Myw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgotI2lmIFNJWkVPRl9MT05HICE9IFNJWkVPRl9JTlRNQVhfVAorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfSU5UTUFYX1QpICYmIChTSVpFT0ZfTE9ORyAhPSBTSVpFT0ZfSU5UTUFYX1QpCiAgICAgICAgIGVsc2UgaWYgKHZhcnMtPnZhbF9sZW4gPT0gc2l6ZW9mKGludG1heF90KSl7CiAgICAgICAgICAgICBjb25zdCB1aW50bWF4X3QgKnZhbF91aW50bWF4X3QKICAgICAgICAgICAgICAgICA9IChjb25zdCB1aW50bWF4X3QgKikgdmFsdWU7CkBAIC04NzQsNyArODk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPSAoY29uc3QgY2hhciAqKSB2YWx1ZTsKICAgICAgICAgICAgICAgICAqKHZhcnMtPnZhbC5pbnRlZ2VyKSA9IChsb25nKSAqdmFsX2NoYXI7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAgICAqdmFsX3VjaGFyIAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgICAgKnZhbF91Y2hhcgogICAgICAgICAgICAgICAgICAgICA9IChjb25zdCB1X2NoYXIgKikgdmFsdWU7CiAgICAgICAgICAgICAgICAgKih2YXJzLT52YWwuaW50ZWdlcikgPSAodW5zaWduZWQgbG9uZykgKnZhbF91Y2hhcjsKICAgICAgICAgICAgIH0KQEAgLTkxMSw3ICs5MzEsNyBAQAogICAgIGNhc2UgQVNOX0JJVF9TVFI6CiAgICAgY2FzZSBBU05fT1BBUVVFOgogICAgIGNhc2UgQVNOX05TQVA6Ci0gICAgICAgIGlmIChsYXJnZXZhbCkgeworICAgICAgICBpZiAodmFycy0+dmFsX2xlbiA+PSBzaXplb2YodmFycy0+YnVmKSkgewogICAgICAgICAgICAgdmFycy0+dmFsLnN0cmluZyA9ICh1X2NoYXIgKikgbWFsbG9jKHZhcnMtPnZhbF9sZW4gKyAxKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFycy0+dmFsLnN0cmluZyA9PSBOVUxMKSB7CkBAIC05OTMsNiArMTAxMyw3IEBACiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9SRVNFVF9WQVJfVFlQRVMKIHZvaWQKIHNubXBfcmVzZXRfdmFyX3R5cGVzKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZibCwgdV9jaGFyIG5ld190eXBlKQogewpAQCAtMTAwMSw2ICsxMDIyLDcgQEAKICAgICAgICAgdmJsID0gdmJsLT5uZXh0X3ZhcmlhYmxlOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfUkVTRVRfVkFSX1RZUEVTICovCiAKIGludAogc25tcF9zeW5jaF9yZXNwb25zZV9jYihuZXRzbm1wX3Nlc3Npb24gKiBzcywKQEAgLTEwMzQsMTAgKzEwNTYsMTEgQEAKICAgICAgICAgYmxvY2sgPSBORVRTTk1QX1NOTVBCTE9DSzsKICAgICAgICAgdHZwID0gJnRpbWVvdXQ7CiAgICAgICAgIHRpbWVyY2xlYXIodHZwKTsKLSAgICAgICAgc25tcF9zZWxlY3RfaW5mbygmbnVtZmRzLCAmZmRzZXQsIHR2cCwgJmJsb2NrKTsKKyAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvX2ZsYWdzKDAsICZudW1mZHMsICZmZHNldCwgdHZwLCAmYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1NFTEVDVF9OT0FMQVJNUyk7CiAgICAgICAgIGlmIChibG9jayA9PSAxKQogICAgICAgICAgICAgdHZwID0gTlVMTDsgICAgICAgICAvKiBibG9jayB3aXRob3V0IHRpbWVvdXQgKi8KLSAgICAgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmZmRzZXQsIDAsIDAsIHR2cCk7CisgICAgICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJmZkc2V0LCBOVUxMLCBOVUxMLCB0dnApOwogICAgICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgICAgICBzbm1wX3JlYWQoJmZkc2V0KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzAsNyArMTA5Myw3IEBACiAKICAgICAgICAgaWYgKCBzcy0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1JFU1BfQ0FMTEJBQ0sgKSB7CiAgICAgICAgICAgICB2b2lkICgqY2IpKHZvaWQpOwotICAgICAgICAgICAgY2IgPSBzcy0+bXl2b2lkOworICAgICAgICAgICAgY2IgPSAodm9pZCAoKikodm9pZCkpKHNzLT5teXZvaWQpOwogICAgICAgICAgICAgY2IoKTsgICAgICAgIC8qIFVzZWQgdG8gaW52b2tlICduZXRzbm1wX2NoZWNrX291dHN0YW5kaW5nX2FnZW50X3JlcXVlc3RzKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGludGVybmFsIEFnZW50WCBxdWVyaWVzLiAgKi8KICAgICAgICAgfQpAQCAtMTEyNSwxMCArMTE0OCwxMSBAQAogICAgICAgICBibG9jayA9IE5FVFNOTVBfU05NUEJMT0NLOwogICAgICAgICB0dnAgPSAmdGltZW91dDsKICAgICAgICAgdGltZXJjbGVhcih0dnApOwotICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oc2Vzc3AsICZudW1mZHMsICZmZHNldCwgdHZwLCAmYmxvY2spOworICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm9fZmxhZ3Moc2Vzc3AsICZudW1mZHMsICZmZHNldCwgdHZwLCAmYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1NFTEVDVF9OT0FMQVJNUyk7CiAgICAgICAgIGlmIChibG9jayA9PSAxKQogICAgICAgICAgICAgdHZwID0gTlVMTDsgICAgICAgICAvKiBibG9jayB3aXRob3V0IHRpbWVvdXQgKi8KLSAgICAgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmZmRzZXQsIDAsIDAsIHR2cCk7CisgICAgICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJmZkc2V0LCBOVUxMLCBOVUxMLCB0dnApOwogICAgICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgICAgICBzbm1wX3Nlc3NfcmVhZChzZXNzcCwgJmZkc2V0KTsKICAgICAgICAgfSBlbHNlCkBAIC0xMjA1LDE1ICsxMjI5LDQ4IEBACiAgKiAgb3ZlciB0aGUgc3BlY2lmaWVkIFNOTVAgc2Vzc2lvbi4KICAqCiAgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKwogc3RhdGljIG5ldHNubXBfc2Vzc2lvbiAqX2RlZl9xdWVyeV9zZXNzaW9uID0gTlVMTDsKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1FVRVJZX1NFVF9ERUZBVUxUX1NFU1NJT04KIHZvaWQKIG5ldHNubXBfcXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvbiggbmV0c25tcF9zZXNzaW9uICpzZXNzKSB7CisgICAgREVCVUdNU0dUTCgoImlxdWVyeSIsICJzZXQgZGVmYXVsdCBzZXNzaW9uICVwXG4iLCBzZXNzKSk7CiAgICAgX2RlZl9xdWVyeV9zZXNzaW9uID0gc2VzczsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1FVRVJZX1NFVF9ERUZBVUxUX1NFU1NJT04gKi8KIAorLyoqCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBkZWZhdWx0IGludGVybmFsIHF1ZXJ5IHNlc3Npb24uCisgKi8KK25ldHNubXBfc2Vzc2lvbiAqCituZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb25fdW5jaGVja2VkKCB2b2lkICkgeworICAgIERFQlVHTVNHVEwoKCJpcXVlcnkiLCAiZ2V0IGRlZmF1bHQgc2Vzc2lvbiAlcFxuIiwgX2RlZl9xdWVyeV9zZXNzaW9uKSk7CisgICAgcmV0dXJuIF9kZWZfcXVlcnlfc2Vzc2lvbjsKK30KKworLyoqCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBkZWZhdWx0IGludGVybmFsIHF1ZXJ5IHNlc3Npb24gYW5kIGxvZyBhCisgKiB3YXJuaW5nIG1lc3NhZ2Ugb25jZSBpZiB0aGlzIHNlc3Npb24gZG9lcyBub3QgZXhpc3QuCisgKi8KIG5ldHNubXBfc2Vzc2lvbiAqCiBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24oIHZvaWQgKSB7Ci0gICAgcmV0dXJuIF9kZWZfcXVlcnlfc2Vzc2lvbjsKKyAgICBzdGF0aWMgaW50IHdhcm5pbmdfbG9nZ2VkID0gMDsKKworICAgIGlmICghIF9kZWZfcXVlcnlfc2Vzc2lvbiAmJiAhIHdhcm5pbmdfbG9nZ2VkKSB7CisgICAgICAgIGlmICghIG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9TRUNOQU1FKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiaXF1ZXJ5U2VjTmFtZSBoYXMgbm90IGJlZW4gY29uZmlndXJlZCAtIGludGVybmFsIHF1ZXJpZXMgd2lsbCBmYWlsXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgc2Vzc2lvbiBpcyBub3QgYXZhaWxhYmxlIC0gaW50ZXJuYWwgcXVlcmllcyB3aWxsIGZhaWxcbiIpOworICAgICAgICB9CisgICAgICAgIHdhcm5pbmdfbG9nZ2VkID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uX3VuY2hlY2tlZCgpOwogfQogCiAKQEAgLTEyMjcsOCArMTI4NCw5IEBACiAgICAgbmV0c25tcF9wZHUgKnBkdSAgICAgID0gc25tcF9wZHVfY3JlYXRlKCByZXF1ZXN0ICk7CiAgICAgbmV0c25tcF9wZHUgKnJlc3BvbnNlID0gTlVMTDsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZiMSwgKnZiMiwgKnZ0bXA7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0LCBjb3VudDsKIAorICAgIERFQlVHTVNHVEwoKCJpcXVlcnkiLCAicXVlcnkgb24gc2Vzc2lvbiAlcFxuIiwgc2Vzc2lvbikpOwogICAgIC8qCiAgICAgICogQ2xvbmUgdGhlIHZhcmJpbmQgbGlzdCBpbnRvIHRoZSByZXF1ZXN0IFBEVS4uLgogICAgICAqLwpAQCAtMTI0Myw2ICsxMzAxLDcgQEAKICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KKyAgICBERUJVR01TR1RMKCgiaXF1ZXJ5IiwgInF1ZXJ5IHJldHVybmVkICVkXG4iLCByZXQpKTsKIAogICAgIC8qCiAgICAgICogLi4uLnRoZW4gY29weSB0aGUgcmVzdWx0cyBiYWNrIGludG8gdGhlCkBAIC0xMjUyLDYgKzEzMTEsOCBAQAogICAgICAqLwogICAgIGlmICggcmV0ID09IFNOTVBfRVJSX05PRVJST1IgKSB7CiAgICAgICAgIGlmICggcmVzcG9uc2UtPmVycnN0YXQgIT0gU05NUF9FUlJfTk9FUlJPUiApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImlxdWVyeSIsICJFcnJvciBpbiBwYWNrZXQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2VycnN0cmluZyhyZXNwb25zZS0+ZXJyc3RhdCkpKTsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBJZiB0aGUgcmVxdWVzdCBmYWlsZWQsIHRoZW4gcmVtb3ZlIHRoZQogICAgICAgICAgICAgICogIG9mZmVuZGluZyB2YXJiaW5kIGFuZCB0cnkgYWdhaW4uCkBAIC0xMjYxLDMwICsxMzIyLDM5IEBACiAgICAgICAgICAgICAgKiAgICAgICBORVRTTk1QX0RTX0FQUF9ET05UX0ZJWF9QRFVTID8/CiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJldCA9IHJlc3BvbnNlLT5lcnJzdGF0OworICAgICAgICAgICAgaWYgKHJlc3BvbnNlLT5lcnJpbmRleCAhPSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiaXF1ZXJ5OnJlc3VsdCIsICJGYWlsZWQgb2JqZWN0OlxuIikpOworICAgICAgICAgICAgICAgIGZvciAoY291bnQgPSAxLCB2dG1wID0gcmVzcG9uc2UtPnZhcmlhYmxlczsKKyAgICAgICAgICAgICAgICAgICAgIHZ0bXAgJiYgY291bnQgIT0gcmVzcG9uc2UtPmVycmluZGV4OworICAgICAgICAgICAgICAgICAgICAgdnRtcCA9IHZ0bXAtPm5leHRfdmFyaWFibGUsIGNvdW50KyspCisgICAgICAgICAgICAgICAgICAgIC8qRU1QVFkqLzsKKyAgICAgICAgICAgICAgICBpZiAodnRtcCkKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dWQVIoKCJpcXVlcnk6cmVzdWx0IiwgdnRtcCkpOworICAgICAgICAgICAgICAgIERFQlVHTVNHKCgiaXF1ZXJ5OnJlc3VsdCIsICJcbiIpKTsKKyAgICAgICAgICAgIH0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICBpZiAocmVxdWVzdCAhPSBTTk1QX01TR19TRVQgJiYKICAgICAgICAgICAgICAgICByZXNwb25zZS0+ZXJyaW5kZXggIT0gMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcXVlcnkiLCAicmV0cnlpbmcgcXVlcnkgKCVkLCAlbGQpXG4iLCByZXQsIHJlc3BvbnNlLT5lcnJpbmRleCkpOwogICAgICAgICAgICAgICAgIHBkdSA9IHNubXBfZml4X3BkdSggcmVzcG9uc2UsIHJlcXVlc3QgKTsKICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KCByZXNwb25zZSApOwogICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gTlVMTDsKICAgICAgICAgICAgICAgICBpZiAoIHBkdSAhPSBOVUxMICkKICAgICAgICAgICAgICAgICAgICAgZ290byByZXRyeTsKICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHZiMSA9IHJlc3BvbnNlLT52YXJpYWJsZXMsIHZiMiA9IGxpc3Q7CiAgICAgICAgICAgICAgICAgIHZiMTsKICAgICAgICAgICAgICAgICAgdmIxID0gdmIxLT5uZXh0X3ZhcmlhYmxlLCAgdmIyID0gdmIyLT5uZXh0X3ZhcmlhYmxlKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dWQVIoKCJpcXVlcnk6cmVzdWx0IiwgdmIxKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJpcXVlcnk6cmVzdWx0cyIsICJcbiIpKTsKICAgICAgICAgICAgICAgICBpZiAoICF2YjIgKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHZ0bXAgPSB2YjItPm5leHRfdmFyaWFibGU7Ci0gICAgICAgICAgICAgICAgLyogZnJlZSBvbGQgZGF0YSBiZWZvcmUgb3ZlcndyaXRpbmcgKi8KLSAgICAgICAgICAgICAgICBpZiAodmIyLT52YWwuc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YjItPnZhbC5zdHJpbmcgIT0gJnZiMi0+YnVmWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHZiMi0+dmFsLnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YjItPnZhbC5zdHJpbmcgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJfaW50ZXJuYWxzKCB2YjIgKTsKICAgICAgICAgICAgICAgICBzbm1wX2Nsb25lX3ZhciggdmIxLCB2YjIgKTsKICAgICAgICAgICAgICAgICB2YjItPm5leHRfdmFyaWFibGUgPSB2dG1wOwogICAgICAgICAgICAgfQpAQCAtMTMxMiwxMCArMTM4MiwxMiBAQAogfQogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBpbnQgbmV0c25tcF9xdWVyeV9zZXQobmV0c25tcF92YXJpYWJsZV9saXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAgICAgICAqc2Vzc2lvbil7CiAgICAgcmV0dXJuIF9xdWVyeSggbGlzdCwgU05NUF9NU0dfU0VULCBzZXNzaW9uICk7CiB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogQSB3YWxrIG5lZWRzIGEgYml0IG1vcmUgd29yay4KQEAgLTEzNzEsNCArMTQ0Myw0NDggQEAKICAgICBzbm1wX2ZyZWVfdmFyYmluZCggdmIgKTsKICAgICByZXR1cm4gcmV0OwogfQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdGF0ZSBtYWNoaW5lCisgKgorICovCitpbnQKK25ldHNubXBfc3RhdGVfbWFjaGluZV9ydW4oIG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQpCit7CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgKmN1cnJlbnQsICpsYXN0OworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dC0+c3RlcHMsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbGFzdCA9IGN1cnJlbnQgPSBpbnB1dC0+c3RlcHM7CisKKyAgICBERUJVR01TR1QoKCJzdGF0ZV9tYWNoaW5lOnJ1biIsICJzdGFydGluZyBzdGVwOiAlc1xuIiwgY3VycmVudC0+bmFtZSkpOworCisgICAgd2hpbGUgKGN1cnJlbnQpIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBsb2cgc3RlcCBhbmQgY2hlY2sgZm9yIHJlcXVpcmVkIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVCgoInN0YXRlX21hY2hpbmU6cnVuIiwgImF0IHN0ZXA6ICVzXG4iLCBjdXJyZW50LT5uYW1lKSk7CisgICAgICAgIGlmIChOVUxMID09IGN1cnJlbnQtPnJ1bikgeworICAgICAgICAgICAgREVCVUdNU0dUKCgic3RhdGVfbWFjaGluZTpydW4iLCAibm8gcnVuIHN0ZXBcbiIpKTsKKyAgICAgICAgICAgIGN1cnJlbnQtPnJlc3VsdCA9IGxhc3QtPnJlc3VsdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcnVuIHN0ZXAKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVCgoInN0YXRlX21hY2hpbmU6cnVuIiwgInJ1bm5pbmcgc3RlcDogJXNcbiIsIGN1cnJlbnQtPm5hbWUpKTsKKyAgICAgICAgY3VycmVudC0+cmVzdWx0ID0gKCpjdXJyZW50LT5ydW4pKCBpbnB1dCwgY3VycmVudCApOworICAgICAgICArK2lucHV0LT5zdGVwc19zb19mYXI7CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBsb2cgcmVzdWx0IGFuZCBtb3ZlIHRvIG5leHQgc3RlcAorICAgICAgICAgKi8KKyAgICAgICAgaW5wdXQtPmxhc3RfcnVuID0gY3VycmVudDsKKyAgICAgICAgREVCVUdNU0dUKCgic3RhdGVfbWFjaGluZTpydW46cmVzdWx0IiwgInN0ZXAgJXMgcmV0dXJuZWQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgY3VycmVudC0+bmFtZSwgY3VycmVudC0+cmVzdWx0KSk7CisgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgPT0gY3VycmVudC0+cmVzdWx0KQorICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm9uX3N1Y2Nlc3M7CisgICAgICAgIGVsc2UgaWYgKFNOTVBFUlJfQUJPUlQgPT0gY3VycmVudC0+cmVzdWx0KSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJzdGF0ZV9tYWNoaW5lOnJ1bjpyZXN1bHQiLCAiQUJPUlQgZnJvbSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+bmFtZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm9uX2Vycm9yOworICAgIH0KKworICAgIC8qCisgICAgICogcnVuIGNsZWFudXAKKyAgICAgKi8KKyAgICBpZiAoKGlucHV0LT5jbGVhbnVwKSAmJiAoaW5wdXQtPmNsZWFudXAtPnJ1bikpCisgICAgICAgICgqaW5wdXQtPmNsZWFudXAtPnJ1bikoIGlucHV0LCBpbnB1dC0+bGFzdF9ydW4gKTsKKworICAgIHJldHVybiBpbnB1dC0+bGFzdF9ydW4tPnJlc3VsdDsKK30KKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ST1dfQ1JFQVRFCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiByb3cgY3JlYXRlIHN0YXRlIG1hY2hpbmUgc3RlcHMKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHJvd2NyZWF0ZV9zdGF0ZV9zIHsKKworICAgIG5ldHNubXBfc2Vzc2lvbiAgICAgICAgKnNlc3Npb247CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICAqdmFyczsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICByb3dfc3RhdHVzX2luZGV4OworfSByb3djcmVhdGVfc3RhdGU7CisKK3N0YXRpYyBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgorX2dldF92Yl9udW0obmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCBpbnQgaW5kZXgpCit7CisgICAgZm9yICg7IHZhcnMgJiYgaW5kZXggPiAwOyAtLWluZGV4KQorICAgICAgICB2YXJzID0gdmFycy0+bmV4dF92YXJpYWJsZTsKKworICAgIGlmICghdmFycyB8fCBpbmRleCA+IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIHJldHVybiB2YXJzOworfQorCisKKy8qCisgKiBjbGVhbnVwCisgKi8KK3N0YXRpYyBpbnQgCitfcm93X3N0YXR1c19zdGF0ZV9jbGVhbnVwKG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICpzdGVwKQoreworICAgIHJvd2NyZWF0ZV9zdGF0ZSAgICAgICAqY3R4OworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LCBTTk1QRVJSX0FCT1JUICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHN0ZXAsIFNOTVBFUlJfQUJPUlQgKTsKKworICAgIERFQlVHTVNHVCgoInJvd19jcmVhdGU6Y2FsbGVkIiwgIl9yb3dfc3RhdHVzX3N0YXRlX2NsZWFudXAsIGxhc3QgcnVuIHN0ZXAgd2FzICVzIHJjICVkXG4iLAorICAgICAgICAgICAgICAgc3RlcC0+bmFtZSwgc3RlcC0+cmVzdWx0KSk7CisKKyAgICBjdHggPSAocm93Y3JlYXRlX3N0YXRlICopaW5wdXQtPmlucHV0X2NvbnRleHQ7CisgICAgaWYgKGN0eCAmJiBjdHgtPnZhcnMpCisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKCBjdHgtPnZhcnMgKTsKKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBzZW5kIGEgcmVxdWVzdCB0byBhY3RpdmF0ZSB0aGUgcm93CisgKi8KK3N0YXRpYyBpbnQgCitfcm93X3N0YXR1c19zdGF0ZV9hY3RpdmF0ZShuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgKnN0ZXApCit7CisgICAgcm93Y3JlYXRlX3N0YXRlICAgICAgICpjdHg7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpyc192YXIsICp2YXIgPSBOVUxMOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgcmMsIHZhbCA9IFJTX0FDVElWRTsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggc3RlcCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQtPmlucHV0X2NvbnRleHQsIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICBjdHggPSAocm93Y3JlYXRlX3N0YXRlICopaW5wdXQtPmlucHV0X2NvbnRleHQ7CisKKyAgICBERUJVR01TR1QoKCJyb3dfY3JlYXRlOmNhbGxlZCIsICJjYWxsZWQgJXNcbiIsIHN0ZXAtPm5hbWUpKTsKKworICAgIC8qCisgICAgICoganVzdCBzZW5kIHRoZSByb3dzdGF0dXMgdmFyYmluZAorICAgICAqLworICAgIHJzX3ZhciA9IF9nZXRfdmJfbnVtKGN0eC0+dmFycywgY3R4LT5yb3dfc3RhdHVzX2luZGV4KTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVihyc192YXIsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIHZhciA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhciwgcnNfdmFyLT5uYW1lLCByc192YXItPm5hbWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNfdmFyLT50eXBlLCAmdmFsLCBzaXplb2YodmFsKSk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHZhciwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIC8qCisgICAgICogc2VuZCBzZXQKKyAgICAgKi8KKyAgICByYyA9IG5ldHNubXBfcXVlcnlfc2V0KCB2YXIsIGN0eC0+c2Vzc2lvbiApOworICAgIGlmICgtMiA9PSByYykKKyAgICAgICAgcmMgPSBTTk1QRVJSX0FCT1JUOworCisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFyKTsKKworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIHNlbmQgZWFjaCBub24tcm93IHN0YXR1cyBjb2x1bW4sIG9uZSBhdCBhIHRpbWUKKyAqLworc3RhdGljIGludCAKK19yb3dfc3RhdHVzX3N0YXRlX3NpbmdsZV92YWx1ZV9jb2xzKG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAqc3RlcCkKK3sKKyAgICByb3djcmVhdGVfc3RhdGUgICAgICAgKmN0eDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnRtcF9uZXh0LCAqcm93X3N0YXR1czsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjID0gU05NUEVSUl9HRU5FUlI7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHN0ZXAsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LT5pbnB1dF9jb250ZXh0LCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgY3R4ID0gKHJvd2NyZWF0ZV9zdGF0ZSAqKWlucHV0LT5pbnB1dF9jb250ZXh0OworCisgICAgREVCVUdNU0dUKCgicm93X2NyZWF0ZTpjYWxsZWQiLCAiY2FsbGVkICVzXG4iLCBzdGVwLT5uYW1lKSk7CisKKyAgICByb3dfc3RhdHVzID0gX2dldF92Yl9udW0oY3R4LT52YXJzLCBjdHgtPnJvd19zdGF0dXNfaW5kZXgpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHJvd19zdGF0dXMsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIC8qCisgICAgICogdHJ5IG9uZSB2YXJiaW5kIGF0IGEgdGltZQorICAgICAqLworICAgIGZvciAodmFyID0gY3R4LT52YXJzOyB2YXI7IHZhciA9IHZhci0+bmV4dF92YXJpYWJsZSkgeworICAgICAgICBpZiAodmFyID09IHJvd19zdGF0dXMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0bXBfbmV4dCA9IHZhci0+bmV4dF92YXJpYWJsZTsKKyAgICAgICAgdmFyLT5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworICAgICAgICAvKgorICAgICAgICAgKiBzZW5kIHNldAorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBuZXRzbm1wX3F1ZXJ5X3NldCggdmFyLCBjdHgtPnNlc3Npb24gKTsKKyAgICAgICAgdmFyLT5uZXh0X3ZhcmlhYmxlID0gdG1wX25leHQ7CisgICAgICAgIGlmICgtMiA9PSByYykKKyAgICAgICAgICAgIHJjID0gU05NUEVSUl9BQk9SVDsKKyAgICAgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIHNlbmQgYWxsIHZhbHVlcyBleGNlcHQgcm93IHN0YXR1cworICovCitzdGF0aWMgaW50IAorX3Jvd19zdGF0dXNfc3RhdGVfbXVsdGlwbGVfdmFsdWVzX2NvbHMobmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICpzdGVwKQoreworICAgIHJvd2NyZWF0ZV9zdGF0ZSAgICAgICAqY3R4OworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgKnZhciwgKmxhc3QsICpyb3dfc3RhdHVzOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHN0ZXAsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LT5pbnB1dF9jb250ZXh0LCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgY3R4ID0gKHJvd2NyZWF0ZV9zdGF0ZSAqKWlucHV0LT5pbnB1dF9jb250ZXh0OworCisgICAgREVCVUdNU0dUKCgicm93X2NyZWF0ZTpjYWxsZWQiLCAiY2FsbGVkICVzXG4iLCBzdGVwLT5uYW1lKSk7CisKKyAgICB2YXJzID0gc25tcF9jbG9uZV92YXJiaW5kKGN0eC0+dmFycyk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYodmFycywgU05NUEVSUl9HRU5FUlIpOworCisgICAgcm93X3N0YXR1cyA9IF9nZXRfdmJfbnVtKHZhcnMsIGN0eC0+cm93X3N0YXR1c19pbmRleCk7CisgICAgaWYgKE5VTEwgPT0gcm93X3N0YXR1cykgeworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIC8qCisgICAgICogcmVtb3ZlIHJvdyBzdGF0dXMgdmFyYmluZAorICAgICAqLworICAgIGlmIChyb3dfc3RhdHVzID09IHZhcnMpIHsKKyAgICAgICAgdmFycyA9IHJvd19zdGF0dXMtPm5leHRfdmFyaWFibGU7CisgICAgICAgIHJvd19zdGF0dXMtPm5leHRfdmFyaWFibGUgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChsYXN0PXZhcnMsIHZhcj1sYXN0LT5uZXh0X3ZhcmlhYmxlOworICAgICAgICAgICAgIHZhcjsKKyAgICAgICAgICAgICBsYXN0PXZhciwgdmFyID0gdmFyLT5uZXh0X3ZhcmlhYmxlKSB7CisgICAgICAgICAgICBpZiAodmFyID09IHJvd19zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBsYXN0LT5uZXh0X3ZhcmlhYmxlID0gdmFyLT5uZXh0X3ZhcmlhYmxlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHNubXBfZnJlZV92YXIocm93X3N0YXR1cyk7CisKKyAgICAvKgorICAgICAqIHNlbmQgc2V0CisgICAgICovCisgICAgcmMgPSBuZXRzbm1wX3F1ZXJ5X3NldCggdmFycywgY3R4LT5zZXNzaW9uICk7CisgICAgaWYgKC0yID09IHJjKQorICAgICAgICByYyA9IFNOTVBFUlJfQUJPUlQ7CisKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIHNlbmQgYSBjcmVhdGVBbmRXYWl0IHJlcXVlc3Qgd2l0aCBubyBvdGhlciB2YWx1ZXMKKyAqLworc3RhdGljIGludCAKK19yb3dfc3RhdHVzX3N0YXRlX3NpbmdsZV92YWx1ZV9jcmVhdGVBbmRXYWl0KG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAqc3RlcCkKK3sKKyAgICByb3djcmVhdGVfc3RhdGUgICAgICAgKmN0eDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciA9IE5VTEwsICpyc192YXI7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICByYywgdmFsID0gUlNfQ1JFQVRFQU5EV0FJVDsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggc3RlcCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQtPmlucHV0X2NvbnRleHQsIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICBjdHggPSAocm93Y3JlYXRlX3N0YXRlICopaW5wdXQtPmlucHV0X2NvbnRleHQ7CisKKyAgICBERUJVR01TR1QoKCJyb3dfY3JlYXRlOmNhbGxlZCIsICJjYWxsZWQgJXNcbiIsIHN0ZXAtPm5hbWUpKTsKKworICAgIHJzX3ZhciA9IF9nZXRfdmJfbnVtKGN0eC0+dmFycywgY3R4LT5yb3dfc3RhdHVzX2luZGV4KTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVihyc192YXIsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIHZhciA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhciwgcnNfdmFyLT5uYW1lLCByc192YXItPm5hbWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNfdmFyLT50eXBlLCAmdmFsLCBzaXplb2YodmFsKSk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYodmFyLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICAvKgorICAgICAqIHNlbmQgc2V0CisgICAgICovCisgICAgcmMgPSBuZXRzbm1wX3F1ZXJ5X3NldCggdmFyLCBjdHgtPnNlc3Npb24gKTsKKyAgICBpZiAoLTIgPT0gcmMpCisgICAgICAgIHJjID0gU05NUEVSUl9BQk9SVDsKKworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcik7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBzZW5kIGEgY3JlYXRBbmRXYWl0IHJlcXVlc3Qgd2l0aCBhbGwgdmFsdWVzCisgKi8KK3N0YXRpYyBpbnQgCitfcm93X3N0YXR1c19zdGF0ZV9hbGxfdmFsdWVzX2NyZWF0ZUFuZFdhaXQobmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAqc3RlcCkKK3sKKyAgICByb3djcmVhdGVfc3RhdGUgICAgICAgKmN0eDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsICpyc192YXI7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggc3RlcCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQtPmlucHV0X2NvbnRleHQsIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICBjdHggPSAocm93Y3JlYXRlX3N0YXRlICopaW5wdXQtPmlucHV0X2NvbnRleHQ7CisKKyAgICBERUJVR01TR1QoKCJyb3dfY3JlYXRlOmNhbGxlZCIsICJjYWxsZWQgJXNcbiIsIHN0ZXAtPm5hbWUpKTsKKworICAgIHZhcnMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQoY3R4LT52YXJzKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVih2YXJzLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICAvKgorICAgICAqIG1ha2Ugc3VyZSByb3cgc3RhdHMgaXMgY3JlYXRlQW5kV2FpdAorICAgICAqLworICAgIHJzX3ZhciA9IF9nZXRfdmJfbnVtKHZhcnMsIGN0eC0+cm93X3N0YXR1c19pbmRleCk7CisgICAgaWYgKE5VTEwgPT0gcnNfdmFyKSB7CisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgaWYgKCpyc192YXItPnZhbC5pbnRlZ2VyICE9IFJTX0NSRUFURUFORFdBSVQpCisgICAgICAgICpyc192YXItPnZhbC5pbnRlZ2VyID0gUlNfQ1JFQVRFQU5EV0FJVDsKKworICAgIC8qCisgICAgICogc2VuZCBzZXQKKyAgICAgKi8KKyAgICByYyA9IG5ldHNubXBfcXVlcnlfc2V0KCB2YXJzLCBjdHgtPnNlc3Npb24gKTsKKyAgICBpZiAoLTIgPT0gcmMpCisgICAgICAgIHJjID0gU05NUEVSUl9BQk9SVDsKKworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworCisgICAgcmV0dXJuIHJjOworfQorCisKKy8qKgorICogc2VuZCBjcmVhdGVBbmRHbyByZXF1ZXN0IHdpdGggYWxsIHZhbHVlcworICovCitzdGF0aWMgaW50IAorX3Jvd19zdGF0dXNfc3RhdGVfYWxsX3ZhbHVlc19jcmVhdGVBbmRHbyhuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAqc3RlcCkKK3sKKyAgICByb3djcmVhdGVfc3RhdGUgICAgICAgKmN0eDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsICpyc192YXI7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggc3RlcCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQtPmlucHV0X2NvbnRleHQsIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICBjdHggPSAocm93Y3JlYXRlX3N0YXRlICopaW5wdXQtPmlucHV0X2NvbnRleHQ7CisKKyAgICBERUJVR01TR1QoKCJyb3dfY3JlYXRlOmNhbGxlZCIsICJjYWxsZWQgJXNcbiIsIHN0ZXAtPm5hbWUpKTsKKworICAgIHZhcnMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQoY3R4LT52YXJzKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVih2YXJzLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICAvKgorICAgICAqIG1ha2Ugc3VyZSByb3cgc3RhdHMgaXMgY3JlYXRlQW5kR28KKyAgICAgKi8KKyAgICByc192YXIgPSBfZ2V0X3ZiX251bSh2YXJzLCBjdHgtPnJvd19zdGF0dXNfaW5kZXggKyAxKTsKKyAgICBpZiAoTlVMTCA9PSByc192YXIpIHsKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBpZiAoKnJzX3Zhci0+dmFsLmludGVnZXIgIT0gUlNfQ1JFQVRFQU5ER08pCisgICAgICAgICpyc192YXItPnZhbC5pbnRlZ2VyID0gUlNfQ1JFQVRFQU5ER087CisKKyAgICAvKgorICAgICAqIHNlbmQgc2V0CisgICAgICovCisgICAgcmMgPSBuZXRzbm1wX3F1ZXJ5X3NldCggdmFycywgY3R4LT5zZXNzaW9uICk7CisgICAgaWYgKC0yID09IHJjKQorICAgICAgICByYyA9IFNOTVBFUlJfQUJPUlQ7CisKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKworICAgIHJldHVybiByYzsKK30KKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcm93IGFwaQorICoKKyAqLworaW50CituZXRzbm1wX3Jvd19jcmVhdGUobmV0c25tcF9zZXNzaW9uICpzZXNzLCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsCisgICAgICAgICAgICAgICAgICAgaW50IHJvd19zdGF0dXNfaW5kZXgpCit7CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgcmNfY2xlYW51cCA9CisgICAgICAgIHsgInJvd19jcmVhdGVfY2xlYW51cCIsIDAsIF9yb3dfc3RhdHVzX3N0YXRlX2NsZWFudXAsCisgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgMCwgTlVMTCB9OworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwIHJjX2FjdGl2YXRlID0KKyAgICAgICAgeyAicm93X2NyZWF0ZV9hY3RpdmF0ZSIsIDAsIF9yb3dfc3RhdHVzX3N0YXRlX2FjdGl2YXRlLAorICAgICAgICAgIDAsIE5VTEwsIE5VTEwsIDAsIE5VTEwgfTsKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCByY19zdl9jb2xzID0KKyAgICAgICAgeyAicm93X2NyZWF0ZV9zaW5nbGVfdmFsdWVfY29scyIsIDAsCisgICAgICAgICAgX3Jvd19zdGF0dXNfc3RhdGVfc2luZ2xlX3ZhbHVlX2NvbHMsIDAsICZyY19hY3RpdmF0ZSxOVUxMLCAwLCBOVUxMIH07CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgcmNfbXZfY29scyA9CisgICAgICAgIHsgInJvd19jcmVhdGVfbXVsdGlwbGVfdmFsdWVzX2NvbHMiLCAwLAorICAgICAgICAgIF9yb3dfc3RhdHVzX3N0YXRlX211bHRpcGxlX3ZhbHVlc19jb2xzLCAwLCAmcmNfYWN0aXZhdGUsICZyY19zdl9jb2xzLAorICAgICAgICAgIDAsIE5VTEwgfTsKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCByY19zdl9jYXcgPQorICAgICAgICB7ICJyb3dfY3JlYXRlX3NpbmdsZV92YWx1ZV9jcmVhdGVBbmRXYWl0IiwgMCwKKyAgICAgICAgICBfcm93X3N0YXR1c19zdGF0ZV9zaW5nbGVfdmFsdWVfY3JlYXRlQW5kV2FpdCwgMCwgJnJjX212X2NvbHMsIE5VTEwsCisgICAgICAgICAgMCwgTlVMTCB9OworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwIHJjX2F2X2NhdyA9CisgICAgICAgIHsgInJvd19jcmVhdGVfYWxsX3ZhbHVlc19jcmVhdGVBbmRXYWl0IiwgMCwKKyAgICAgICAgICBfcm93X3N0YXR1c19zdGF0ZV9hbGxfdmFsdWVzX2NyZWF0ZUFuZFdhaXQsIDAsICZyY19hY3RpdmF0ZSwKKyAgICAgICAgICAmcmNfc3ZfY2F3LCAwLCBOVUxMIH07CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgcmNfYXZfY2FnID0KKyAgICAgICAgeyAicm93X2NyZWF0ZV9hbGxfdmFsdWVzX2NyZWF0ZUFuZEdvIiwgMCwKKyAgICAgICAgICBfcm93X3N0YXR1c19zdGF0ZV9hbGxfdmFsdWVzX2NyZWF0ZUFuZEdvLCAwLCBOVUxMLCAmcmNfYXZfY2F3LCAwLAorICAgICAgICAgIE5VTEwgfTsKKworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCBzbV9pbnB1dCA9IHsgInJvd19jcmVhdGVfbWFjaGluZSIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmNfYXZfY2FnLCAmcmNfY2xlYW51cCB9OworICAgIHJvd2NyZWF0ZV9zdGF0ZSBzdGF0ZTsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBzZXNzLCBTTk1QRVJSX0dFTkVSUik7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHZhcnMsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIHN0YXRlLnNlc3Npb24gPSBzZXNzOworICAgIHN0YXRlLnZhcnMgPSB2YXJzOworCisgICAgc3RhdGUucm93X3N0YXR1c19pbmRleCA9IHJvd19zdGF0dXNfaW5kZXg7CisgICAgc21faW5wdXQuaW5wdXRfY29udGV4dCA9ICZzdGF0ZTsKKworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9ydW4oICZzbV9pbnB1dCk7CisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX0NSRUFURSAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKIC8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX2RlYnVnLmMgYi9zbm1wbGliL3NubXBfZGVidWcuYwppbmRleCBkMWI0NTM4Li4yN2NlMjMzIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfZGVidWcuYworKysgYi9zbm1wbGliL3NubXBfZGVidWcuYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMTMsMTQgKzE0LDcgQEAKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotI2lmIEhBVkVfU1REQVJHX0gKICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dmFyYXJncy5oPgotI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2lmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQyLDUxICszNiw1OCBAQAogI2RlZmluZSBTTk1QX0RFQlVHX0FDVElWRSAgICAgICAgICAgICAxCiAjZGVmaW5lIFNOTVBfREVCVUdfRVhDTFVERUQgICAgICAgICAgIDIKIAorI2lmbmRlZiBORVRTTk1QX05PX0RFQlVHR0lORworCiBzdGF0aWMgaW50ICAgICAgZG9kZWJ1ZyA9IE5FVFNOTVBfQUxXQVlTX0RFQlVHOwogaW50ICAgICAgICAgICAgIGRlYnVnX251bV90b2tlbnMgPSAwOwotaW50ICAgICAgICAgICAgIGRlYnVnX251bV9leGNsdWRlZCA9IDA7CiBzdGF0aWMgaW50ICAgICAgZGVidWdfcHJpbnRfZXZlcnl0aGluZyA9IDA7CiAKIG5ldHNubXBfdG9rZW5fZGVzY3IgZGJnX3Rva2Vuc1tNQVhfREVCVUdfVE9LRU5TXTsKIAotI2lmZGVmIE5FVFNOTVBfREVCVUdfU1RBVFMKLW5ldHNubXBfY29udGFpbmVyICAqZGJnX3N0YXRzID0gTlVMTDsKLSBzdGF0aWMgaW50IF9kZWJ1Z19jbXAoIGNvbnN0IHZvaWQgKmxocywgY29uc3Qgdm9pZCAqcmhzICk7Ci0gc3RhdGljIGludCBfc2F2ZV9kZWJ1Z19zdGF0KG5ldHNubXBfdG9rZW5fZGVzY3IgKnRiLCB2b2lkICp0eXBlKTsKLSBzdGF0aWMgaW50IF9kZWJ1Z19zdGF0c19jYWxsYmFjayhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCi0gICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpOwotI2VuZGlmCi0KIC8qCi0gKiBpbmRlbnQgZGVidWdnaW5nOiAgcHJvdmlkZSBhIHNwYWNlIHBhZGRlZCBzZWN0aW9uIHRvIHJldHVybiBhbiBpbmRlbnQgZm9yIAorICogTnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgZGVidWcgb3V0cHVyLiBWYWxpZCByYW5nZSBpcyBbMCxJTlRfTUFYXQogICovCi1zdGF0aWMgaW50ICAgICAgZGVidWdpbmRlbnQgPSAwOwotI2RlZmluZSBJTkRFTlRNQVggODAKLXN0YXRpYyBjaGFyICAgICBkZWJ1Z2luZGVudGNoYXJzW10gPQotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7CitzdGF0aWMgaW50IGRlYnVnaW5kZW50ID0gMDsKIAotY2hhciAgICAgICAgICAgKgoraW50CitkZWJ1Z19pbmRlbnRfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGRlYnVnaW5kZW50OworfQorCitjb25zdCBjaGFyKgogZGVidWdfaW5kZW50KHZvaWQpCiB7Ci0gICAgcmV0dXJuIGRlYnVnaW5kZW50Y2hhcnM7CisjZGVmaW5lIFNQQUNFUyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXAorICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICAgaWYgKChzaXplb2YoU1BBQ0VTKSAtIDEpIDwgKHVuc2lnbmVkIGludClkZWJ1Z2luZGVudCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVG9vIGRlZXAgaW5kZW50YXRpb24gZm9yIGRlYnVnX2luZGVudC4gIgorICAgICAgICAgICAgICAgICAiQ29uc2lkZXIgdXNpbmcgXCIlJSpzXCIsIGRlYnVnX2luZGVudF9nZXQoKSwgXCJcIiBpbnN0ZWFkLiIpOworICAgICAgICByZXR1cm4gU1BBQ0VTOworICAgIH0KKyAgICByZXR1cm4gU1BBQ0VTICsgc2l6ZW9mKFNQQUNFUykgLSAxIC0gZGVidWdpbmRlbnQ7CisjdW5kZWYgU1BBQ0VTCiB9CiAKIHZvaWQKIGRlYnVnX2luZGVudF9hZGQoaW50IGFtb3VudCkKIHsKLSAgICBpZiAoZGVidWdpbmRlbnQgKyBhbW91bnQgPj0gMCAmJiBkZWJ1Z2luZGVudCArIGFtb3VudCA8IDgwKSB7Ci0gICAgICAgIGRlYnVnaW5kZW50Y2hhcnNbZGVidWdpbmRlbnRdID0gJyAnOwotICAgICAgICBkZWJ1Z2luZGVudCArPSBhbW91bnQ7Ci0gICAgICAgIGRlYnVnaW5kZW50Y2hhcnNbZGVidWdpbmRlbnRdID0gJ1wwJzsKLSAgICB9CisgICAgaWYgKC1kZWJ1Z2luZGVudCA8PSBhbW91bnQgJiYgYW1vdW50IDw9IElOVF9NQVggLSBkZWJ1Z2luZGVudCkKKwlkZWJ1Z2luZGVudCArPSBhbW91bnQ7CiB9CiAKK05FVFNOTVBfSU1QT1JUIHZvaWQKK2RlYnVnX2NvbmZpZ19yZWdpc3Rlcl90b2tlbnMoY29uc3QgY2hhciAqY29uZmlndG9rZW4sIGNoYXIgKnRva2Vucyk7CisKIHZvaWQKIGRlYnVnX2NvbmZpZ19yZWdpc3Rlcl90b2tlbnMoY29uc3QgY2hhciAqY29uZmlndG9rZW4sIGNoYXIgKnRva2VucykKIHsKICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnModG9rZW5zKTsKIH0KIAorTkVUU05NUF9JTVBPUlQgdm9pZAorZGVidWdfY29uZmlnX3R1cm5fb25fZGVidWdnaW5nKGNvbnN0IGNoYXIgKmNvbmZpZ3Rva2VuLCBjaGFyICpsaW5lKTsKKwogdm9pZAogZGVidWdfY29uZmlnX3R1cm5fb25fZGVidWdnaW5nKGNvbnN0IGNoYXIgKmNvbmZpZ3Rva2VuLCBjaGFyICpsaW5lKQogewpAQCAtOTQsNDcgKzk1LDEzIEBACiB9CiAKIHZvaWQKLXNubXBfZGVidWdfaW5pdCh2b2lkKQotewotICAgIGRlYnVnaW5kZW50Y2hhcnNbMF0gPSAnXDAnOyAvKiB6ZXJvIG91dCB0aGUgZGVidWdnaW5nIGluZGVudCBhcnJheS4gKi8KLSAgICAvKgotICAgICAqIEhtbW0uLi4uCi0gICAgICogICB0aGlzICJpbml0IiByb3V0aW5lIHNlZW1zIHRvIGJlIGNhbGxlZCAqYWZ0ZXIqIHByb2Nlc3NpbmcKLSAgICAgKiAgIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucy4gICBTbyB3ZSBjYW4ndCBjbGVhciB0aGUgZGVidWcKLSAgICAgKiAgIHRva2VuIGFycmF5IGhlcmUsIGFuZCB3aWxsIGp1c3QgaGF2ZSB0byByZWx5IG9uIGl0IGJlaW5nCi0gICAgICogICBpbml0aWFsaXNlZCB0byAwIGF1dG9tYXRpY2FsbHkuCi0gICAgICogU28gbXVjaCBmb3IgdHJ5aW5nIHRvIHByb2dyYW0gcmVzcG9uc2libHkgOi0pCi0gICAgICovCi0vKiAgbWVtc2V0KGRiZ190b2tlbnMsIDAsIE1BWF9ERUJVR19UT0tFTlMqc2l6ZW9mKHN0cnVjdCB0b2tlbl9kc2NyKSk7ICAqLwotICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoInNubXAiLCAiZG9EZWJ1Z2dpbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfY29uZmlnX3R1cm5fb25fZGVidWdnaW5nLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigxfDApIik7Ci0gICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigic25tcCIsICJkZWJ1Z1Rva2VucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19jb25maWdfcmVnaXN0ZXJfdG9rZW5zLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRva2VuWyx0b2tlbi4uLl0iKTsKLQotI2lmZGVmIE5FVFNOTVBfREVCVUdfU1RBVFMKLSAgICAvKgotICAgICAqIGRlYnVnIHN0YXRzCi0gICAgICovCi0gICAgZGJnX3N0YXRzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZGVidWdfZXhjbHVkZTp0YWJsZV9jb250YWluZXIiKTsKLSAgICBpZiAoTlVMTCAhPSBkYmdfc3RhdHMpIHsKLSAgICAgICAgZGJnX3N0YXRzLT5jb21wYXJlID0gX2RlYnVnX2NtcDsKLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kZWJ1Z19zdGF0c19jYWxsYmFjaywgZGJnX3N0YXRzLCAxMDI0KTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZAotZGVidWdfcmVnaXN0ZXJfdG9rZW5zKGNoYXIgKnRva2VucykKK2RlYnVnX3JlZ2lzdGVyX3Rva2Vucyhjb25zdCBjaGFyICp0b2tlbnMpCiB7CiAgICAgY2hhciAgICAgICAgICAgKm5ld3AsICpjcDsKICAgICBjaGFyICAgICAgICAgICAqc3QgPSBOVUxMOwogICAgIGludCAgICAgICAgICAgICBzdGF0dXM7CiAKLSAgICBpZiAodG9rZW5zID09IDAgfHwgKnRva2VucyA9PSAwKQorICAgIGlmICh0b2tlbnMgPT0gTlVMTCB8fCAqdG9rZW5zID09IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIG5ld3AgPSBzdHJkdXAodG9rZW5zKTsgICAgICAvKiBzdHJ0b2tfciBtZXNzZXMgaXQgdXAgKi8KQEAgLTE2NCwxNyArMTMxLDE2IEBACiAgICAgZnJlZShuZXdwKTsKIH0KIAotCi0vKiAKKy8qCiAgKiBQcmludCBhbGwgcmVnaXN0ZXJlZCB0b2tlbnMgYWxvbmcgd2l0aCB0aGVpciBjdXJyZW50IHN0YXR1cwogICovCi12b2lkIAordm9pZAogZGVidWdfcHJpbnRfcmVnaXN0ZXJlZF90b2tlbnModm9pZCkgewogICAgIGludCBpOwogCiAgICAgc25tcF9sb2coTE9HX0lORk8sICIlZCB0b2tlbnMgcmVnaXN0ZXJlZCA6XG4iLCBkZWJ1Z19udW1fdG9rZW5zKTsKICAgICBmb3IgKGk9MDsgaTxkZWJ1Z19udW1fdG9rZW5zOyBpKyspIHsKLSAgICAgICAgc25tcF9sb2coIExPR19JTkZPLCAiJWQpICVzIDogJWRcbiIsIAorICAgICAgICBzbm1wX2xvZyggTE9HX0lORk8sICIlZCkgJXMgOiAlZFxuIiwKICAgICAgICAgICAgICAgICAgaSwgZGJnX3Rva2VucyBbaV0udG9rZW5fbmFtZSwgZGJnX3Rva2VucyBbaV0uZW5hYmxlZCk7CiAgICAgfQogfQpAQCAtMTk3LDcgKzE2Myw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yKGk9MDsgaSA8IGRlYnVnX251bV90b2tlbnM7IGkrKykgewogICAgICAgICAgICAgaWYgKGRiZ190b2tlbnNbaV0udG9rZW5fbmFtZSAmJgotICAgICAgICAgICAgICAgIHN0cm5jbXAoZGJnX3Rva2Vuc1tpXS50b2tlbl9uYW1lLCB0b2tlbiwgCisgICAgICAgICAgICAgICAgc3RybmNtcChkYmdfdG9rZW5zW2ldLnRva2VuX25hbWUsIHRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGRiZ190b2tlbnNbaV0udG9rZW5fbmFtZSkpID09IDApIHsKICAgICAgICAgICAgICAgICBkYmdfdG9rZW5zW2ldLmVuYWJsZWQgPSBTTk1QX0RFQlVHX0FDVElWRTsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwpAQCAtMjMzLDEzICsxOTksMTIgQEAKICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiB9CiAKLQogLyoKICAqIGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoY2hhciAqVE9LRU4pOgotICogCisgKgogICogcmV0dXJucyBTTk1QRVJSX1NVQ0NFU1MKICAqIG9yIFNOTVBFUlJfR0VORVJSCi0gKiAKKyAqCiAgKiBpZiBUT0tFTiBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCBkZWJ1Z2dpbmcgc3VwcG9ydCBpcyB0dXJuZWQgb24uCiAgKi8KIGludApAQCAtMjQ4LDIxICsyMTMsMTYgQEAKICAgICBpbnQgICAgICAgICAgICAgaSwgcmM7CiAKICAgICAvKgotICAgICAqIGRlYnVnZ2luZyBmbGFnIGlzIG9uIG9yIG9mZiAKKyAgICAgKiBkZWJ1Z2dpbmcgZmxhZyBpcyBvbiBvciBvZmYKICAgICAgKi8KICAgICBpZiAoIWRvZGVidWcpCiAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKIAogICAgIGlmIChkZWJ1Z19udW1fdG9rZW5zID09IDAgfHwgZGVidWdfcHJpbnRfZXZlcnl0aGluZykgewogICAgICAgICAvKgotICAgICAgICAgKiBubyB0b2tlbnMgc3BlY2lmaWVkLCBwcmludCBldmVyeXRoaW5nIAotICAgICAgICAgKiAodW5sZXNzIHNvbWV0aGluZyBtaWdodCBiZSBleGNsdWRlZCkKKyAgICAgICAgICogbm8gdG9rZW5zIHNwZWNpZmllZCwgcHJpbnQgZXZlcnl0aGluZwogICAgICAgICAgKi8KLSAgICAgICAgaWYgKGRlYnVnX251bV9leGNsdWRlZCkgewotICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7IC8qICEgZm91bmQgPSBzdWNjZXNzICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmMgPSBTTk1QRVJSX0dFTkVSUjsgLyogISBmb3VuZCA9IGVyciAqLwpAQCAtMjc5LDUzICsyMzksMTkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7IC8qIGV4Y2x1ZGVkICovCiAgICAgICAgIH0KICAgICB9Ci0KLSNpZmRlZiBORVRTTk1QX0RFQlVHX1NUQVRTCi0gICAgaWYgKChTTk1QRVJSX1NVQ0NFU1MgPT0gcmMpICYmIChOVUxMICE9IGRiZ19zdGF0cykpIHsKLSAgICAgICAgbmV0c25tcF90b2tlbl9kZXNjciB0ZCwgKmZvdW5kOwotCi0gICAgICAgIHRkLnRva2VuX25hbWUgPSB0b2tlbjsKLSAgICAgICAgZm91bmQgPSBDT05UQUlORVJfRklORChkYmdfc3RhdHMsICZ0ZCk7Ci0gICAgICAgIGlmIChOVUxMID09IGZvdW5kKSB7Ci0gICAgICAgICAgICBmb3VuZCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90b2tlbl9kZXNjcik7Ci0gICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGZvdW5kKTsKLSAgICAgICAgICAgIGZvdW5kLT50b2tlbl9uYW1lID0gc3RyZHVwKHRva2VuKTsKLSAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KDAgPT0gZm91bmQtPmVuYWJsZWQpOwotICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChkYmdfc3RhdHMsIGZvdW5kKTsKLSAgICAgICAgfQotICAgICAgICArK2ZvdW5kLT5lbmFibGVkOwotICAgIC8qICBzbm1wX2xvZyhMT0dfRVJSLCJ0b2sgJXMsICVkIGhpdHNcbiIsIHRva2VuLCBmb3VuZC0+ZW5hYmxlZCk7ICAqLwotICAgIH0KLSNlbmRpZgotCiAgICAgcmV0dXJuIHJjOwogfQogCiB2b2lkCi0jaWYgSEFWRV9TVERBUkdfSAogZGVidWdtc2coY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotI2Vsc2UKLWRlYnVnbXNnKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewotICAgIHZhX2xpc3QgICAgICAgICBkZWJ1Z2FyZ3M7Ci0KLSNpZiBIQVZFX1NUREFSR19ICi0gICAgdmFfc3RhcnQoZGVidWdhcmdzLCBmb3JtYXQpOwotI2Vsc2UKLSAgICBjb25zdCBjaGFyICAgICAqZm9ybWF0OwotICAgIGNvbnN0IGNoYXIgICAgICp0b2tlbjsKLQotICAgIHZhX3N0YXJ0KGRlYnVnYXJncyk7Ci0gICAgdG9rZW4gPSB2YV9hcmcoZGVidWdhcmdzLCBjb25zdCBjaGFyICopOwotICAgIGZvcm1hdCA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIGNvbnN0IGNoYXIgKik7ICAgLyogPz8/ICovCi0jZW5kaWYKLQogICAgIGlmIChkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKHRva2VuKSA9PSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgc25tcF92bG9nKExPR19ERUJVRywgZm9ybWF0LCBkZWJ1Z2FyZ3MpOworCXZhX2xpc3QgICAgICAgICBkZWJ1Z2FyZ3M7CisKKwl2YV9zdGFydChkZWJ1Z2FyZ3MsIGZvcm1hdCk7CisJc25tcF92bG9nKExPR19ERUJVRywgZm9ybWF0LCBkZWJ1Z2FyZ3MpOworCXZhX2VuZChkZWJ1Z2FyZ3MpOwogICAgIH0KLSAgICB2YV9lbmQoZGVidWdhcmdzKTsKIH0KIAogdm9pZApAQCAtNDE2LDEyICszNDIsMTIgQEAKICAgICAgICAgcmMgPSBzcHJpbnRfcmVhbGxvY19vYmppZCgmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sIDEsIHRoZW9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJfc3ViaWQtMSk7ICAvKiBBZGp1c3QgZm9yIEMncyAwLWJhc2VkIGFycmF5IGluZGV4aW5nICovCiAgICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgc3ByaW50Zih0bXBidWYsICIuJWx1LS0lbHUiLCB0aGVvaWRbdmFyX3N1YmlkIC0gMV0sCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlX3Vib3VuZCk7CisgICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwgIi4lIiBORVRTTk1QX1BSSW8gInUtLSUiIE5FVFNOTVBfUFJJbyAidSIsCisgICAgICAgICAgICAgICAgICAgIHRoZW9pZFt2YXJfc3ViaWQgLSAxXSwgcmFuZ2VfdWJvdW5kKTsKICAgICAgICAgICAgIHJjID0gc25tcF9jc3RyY2F0KCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwgMSwgdG1wYnVmKTsKICAgICAgICAgICAgIGlmIChyYykgewogICAgICAgICAgICAgICAgIGZvciAoaSA9IHZhcl9zdWJpZDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYodG1wYnVmLCAiLiVsdSIsIHRoZW9pZFtpXSk7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYodG1wYnVmLCAiLiUiIE5FVFNOTVBfUFJJbyAidSIsIHRoZW9pZFtpXSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghc25tcF9jc3RyY2F0KCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwgMSwgdG1wYnVmKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQzOCw3ICszNjQsNyBAQAogfQogCiB2b2lkCi1kZWJ1Z21zZ19oZXgoY29uc3QgY2hhciAqdG9rZW4sIHVfY2hhciAqIHRoZWRhdGEsIHNpemVfdCBsZW4pCitkZWJ1Z21zZ19oZXgoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IHVfY2hhciAqIHRoZWRhdGEsIHNpemVfdCBsZW4pCiB7CiAgICAgdV9jaGFyICAgICAgICAgKmJ1ZiA9IE5VTEw7CiAgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4gPSAwLCBvdXRfbGVuID0gMDsKQEAgLTQ2MCw3ICszODYsNyBAQAogfQogCiB2b2lkCi1kZWJ1Z21zZ19oZXh0bGkoY29uc3QgY2hhciAqdG9rZW4sIHVfY2hhciAqIHRoZWRhdGEsIHNpemVfdCBsZW4pCitkZWJ1Z21zZ19oZXh0bGkoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IHVfY2hhciAqIHRoZWRhdGEsIHNpemVfdCBsZW4pCiB7CiAgICAgY2hhciAgICAgICAgICAgIGJ1ZltTUFJJTlRfTUFYX0xFTl0sIHRva2VuMltTUFJJTlRfTUFYX0xFTl07CiAgICAgdV9jaGFyICAgICAgICAgKmIzID0gTlVMTDsKQEAgLTQ4MCw3ICs0MDYsNyBAQAogICAgICAgICAgICAgICogWFhuZXh0IHR3byBsaW5lcyB3ZXJlIERFQlVHUFJJTlRJTkRFTlQodG9rZW4pOwogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgImR1bXB4JXMiLCB0b2tlbik7Ci0gICAgICAgICAgICBkZWJ1Z21zZyhidWYsICIlczogJXMiLCB0b2tlbjIsIGRlYnVnX2luZGVudCgpKTsKKyAgICAgICAgICAgIGRlYnVnbXNnKGJ1ZiwgIiVzOiAlKnMiLCB0b2tlbjIsIGRlYnVnX2luZGVudF9nZXQoKSwgIiIpOwogICAgICAgICAgICAgaWYgKHNwcmludF9yZWFsbG9jX2hleHN0cmluZwogICAgICAgICAgICAgICAgICgmYjMsICZiM19sZW4sICZvM19sZW4sIDEsIHRoZWRhdGEsIGluY3IpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGIzICE9IE5VTEwpIHsKQEAgLTUwMCw1MyArNDI2LDIzIEBACiB9CiAKIHZvaWQKLSNpZiBIQVZFX1NUREFSR19ICiBkZWJ1Z21zZ3Rva2VuKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLSNlbHNlCi1kZWJ1Z21zZ3Rva2VuKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewogICAgIHZhX2xpc3QgICAgICAgICBkZWJ1Z2FyZ3M7CiAKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdmFfc3RhcnQoZGVidWdhcmdzLCBmb3JtYXQpOwotI2Vsc2UKLSAgICBjb25zdCBjaGFyICAgICAqdG9rZW47Ci0KLSAgICB2YV9zdGFydChkZWJ1Z2FyZ3MpOwotICAgIHRva2VuID0gdmFfYXJnKGRlYnVnYXJncywgY29uc3QgY2hhciAqKTsKLSNlbmRpZgotCiAgICAgZGVidWdtc2codG9rZW4sICIlczogIiwgdG9rZW4pOwotCiAgICAgdmFfZW5kKGRlYnVnYXJncyk7CiB9CiAKIHZvaWQKLSNpZiBIQVZFX1NUREFSR19ICiBkZWJ1Z19jb21ib19uYyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi0jZWxzZQotZGVidWdfY29tYm9fbmModmFfYWxpc3QpCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7CiAgICAgdmFfbGlzdCAgICAgICAgIGRlYnVnYXJnczsKIAotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2YV9zdGFydChkZWJ1Z2FyZ3MsIGZvcm1hdCk7Ci0jZWxzZQotICAgIGNvbnN0IGNoYXIgICAgICpmb3JtYXQ7Ci0gICAgY29uc3QgY2hhciAgICAgKnRva2VuOwotCi0gICAgdmFfc3RhcnQoZGVidWdhcmdzKTsKLSAgICB0b2tlbiA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIGNvbnN0IGNoYXIgKik7Ci0gICAgZm9ybWF0ID0gdmFfYXJnKGRlYnVnYXJncywgY29uc3QgY2hhciAqKTsgICAvKiA/Pz8gKi8KLSNlbmRpZgotCiAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiJXM6ICIsIHRva2VuKTsKICAgICBzbm1wX3Zsb2coTE9HX0RFQlVHLCBmb3JtYXQsIGRlYnVnYXJncyk7Ci0KICAgICB2YV9lbmQoZGVidWdhcmdzKTsKIH0KIApAQCAtNTY1LDYyICs0NjEsMTE4IEBACiAgICAgcmV0dXJuIGRvZGVidWc7CiB9CiAKLSNpZmRlZiBORVRTTk1QX0RFQlVHX1NUQVRTCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBjb21wYXJlIHR3byBjb250ZXh0IHBvaW50ZXJzIGhlcmUuIFJldHVybiAtMSBpZiBsaHMgPCByaHMsCi0gKiAwIGlmIGxocyA9PSByaHMsIGFuZCAxIGlmIGxocyA+IHJocy4KLSAqLwotc3RhdGljIGludAotX2RlYnVnX2NtcCggY29uc3Qgdm9pZCAqbGhzLCBjb25zdCB2b2lkICpyaHMgKQotewotICAgIG5ldHNubXBfdG9rZW5fZGVzY3IgKmRiZ19sID0gKG5ldHNubXBfdG9rZW5fZGVzY3IgKilsaHM7Ci0gICAgbmV0c25tcF90b2tlbl9kZXNjciAqZGJnX3IgPSAobmV0c25tcF90b2tlbl9kZXNjciAqKXJoczsKKyNlbHNlIC8qICEgTkVUU05NUF9OT19ERUJVR0dJTkcgKi8KIAotIC8qIHNubXBfbG9nKExPR19FUlIsIiVzLyVzXG4iLGRiZ19sLT50b2tlbl9uYW1lLCBkYmdfci0+dG9rZW5fbmFtZSk7ICovCi0gICAgcmV0dXJuIHN0cmNtcChkYmdfbC0+dG9rZW5fbmFtZSwgZGJnX3ItPnRva2VuX25hbWUpOwotfQotCi0KLXN0YXRpYyBpbnQKLV9zYXZlX2RlYnVnX3N0YXQobmV0c25tcF90b2tlbl9kZXNjciAqdGIsIHZvaWQgKnR5cGUpCi17Ci0gICAgY2hhciBidWZbMjU2XTsKLQotICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJkZWJ1Z19oaXRzICVzICVkIiwKLSAgICAgICAgICAgICB0Yi0+dG9rZW5fbmFtZSwgdGItPmVuYWJsZWQpOwotICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIGJ1Zik7Ci0KLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KLQotc3RhdGljIGludAotX2RlYnVnX3N0YXRzX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKLSAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQotewotICAgIGNoYXIgICAgICAgICAgICBzZXBbXSA9Ci0gICAgICAgICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyI7Ci0gICAgY2hhciAgICAgICAgICAgIGJ1ZltdID0KLSAgICAgICAgIiNcbiIgIiMgZGVidWcgc3RhdHNcbiIgIiMiOwotICAgIGNoYXIgICAgICAgICAgICp0eXBlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKLQotICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7Ci0gICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgYnVmKTsKLQotICAgIC8qCi0gICAgICogc2F2ZSBhbGwgcm93cwotICAgICAqLwotICAgIENPTlRBSU5FUl9GT1JfRUFDSCgobmV0c25tcF9jb250YWluZXIgKikgY2xpZW50YXJnLAotICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikKLSAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVfZGVidWdfc3RhdCwgdHlwZSk7Ci0KLSAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOwotICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsICJcbiIpOwotCi0gICAgLyoKLSAgICAgKiBuZXZlciBmYWlscyAKLSAgICAgKi8KLSAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwotfQorI2lmIF9fR05VQ19fID4gMgorI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIFVOVVNFRAogI2VuZGlmCiAKK2ludCBkZWJ1Z19pbmRlbnRfZ2V0KHZvaWQpIHsgcmV0dXJuIDA7IH0KKworY29uc3QgY2hhciogZGVidWdfaW5kZW50KHZvaWQpIHsgcmV0dXJuICIiOyB9CisKK3ZvaWQgZGVidWdfaW5kZW50X2FkZChpbnQgYW1vdW50IFVOVVNFRCkgeyB9CisKK05FVFNOTVBfSU1QT1JUIHZvaWQKK2RlYnVnX2NvbmZpZ19yZWdpc3Rlcl90b2tlbnMoY29uc3QgY2hhciAqY29uZmlndG9rZW4sIGNoYXIgKnRva2Vucyk7CisKK3ZvaWQKK2RlYnVnX2NvbmZpZ19yZWdpc3Rlcl90b2tlbnMoY29uc3QgY2hhciAqY29uZmlndG9rZW4gVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0b2tlbnMgVU5VU0VEKQoreyB9CisKK05FVFNOTVBfSU1QT1JUIHZvaWQKK2RlYnVnX2NvbmZpZ190dXJuX29uX2RlYnVnZ2luZyhjb25zdCBjaGFyICpjb25maWd0b2tlbiwgY2hhciAqbGluZSk7CisKK3ZvaWQKK2RlYnVnX2NvbmZpZ190dXJuX29uX2RlYnVnZ2luZyhjb25zdCBjaGFyICpjb25maWd0b2tlbiBVTlVTRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbGluZSBVTlVTRUQpCit7IH0KKwordm9pZAorZGVidWdfcmVnaXN0ZXJfdG9rZW5zKGNvbnN0IGNoYXIgKnRva2VucyBVTlVTRUQpCit7IH0KKwordm9pZAorZGVidWdfcHJpbnRfcmVnaXN0ZXJlZF90b2tlbnModm9pZCkKK3sgfQorCisKK2ludAorZGVidWdfZW5hYmxlX3Rva2VuX2xvZ3MgKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCkKK3sgcmV0dXJuIFNOTVBFUlJfR0VORVJSOyB9CisKK2ludAorZGVidWdfZGlzYWJsZV90b2tlbl9sb2dzIChjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQpCit7IHJldHVybiBTTk1QRVJSX0dFTkVSUjsgfQorCitpbnQKK2RlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VEKQoreyByZXR1cm4gU05NUEVSUl9HRU5FUlI7IH0KKwordm9pZAorZGVidWdtc2coY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBjb25zdCBjaGFyICpmb3JtYXQgVU5VU0VELCAuLi4pCit7IH0KKwordm9pZAorZGVidWdtc2dfb2lkKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgY29uc3Qgb2lkICogdGhlb2lkIFVOVVNFRCwKKyAgICAgICAgICAgICBzaXplX3QgbGVuIFVOVVNFRCkKK3sgfQorCit2b2lkCitkZWJ1Z21zZ19zdWJvaWQoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBjb25zdCBvaWQgKiB0aGVvaWQgVU5VU0VELAorICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gVU5VU0VEKQoreyB9CisKK3ZvaWQKK2RlYnVnbXNnX3Zhcihjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciBVTlVTRUQpCit7IH0KKwordm9pZAorZGVidWdtc2dfb2lkcmFuZ2UoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBjb25zdCBvaWQgKiB0aGVvaWQgVU5VU0VELAorICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiBVTlVTRUQsIHNpemVfdCB2YXJfc3ViaWQgVU5VU0VELAorICAgICAgICAgICAgICAgICAgb2lkIHJhbmdlX3Vib3VuZCBVTlVTRUQpCit7IH0KKwordm9pZAorZGVidWdtc2dfaGV4KGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgY29uc3QgdV9jaGFyICogdGhlZGF0YSBVTlVTRUQsCisgICAgICAgICAgICAgc2l6ZV90IGxlbiBVTlVTRUQpCit7IH0KKwordm9pZAorZGVidWdtc2dfaGV4dGxpKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgY29uc3QgdV9jaGFyICogdGhlZGF0YSBVTlVTRUQsCisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiBVTlVTRUQpCit7IH0KKwordm9pZAorZGVidWdtc2d0b2tlbihjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIGNvbnN0IGNoYXIgKmZvcm1hdCBVTlVTRUQsIC4uLikKK3sgfQorCit2b2lkCitkZWJ1Z19jb21ib19uYyhjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIGNvbnN0IGNoYXIgKmZvcm1hdCBVTlVTRUQsIC4uLikKK3sgfQorCit2b2lkCitzbm1wX3NldF9kb19kZWJ1Z2dpbmcoaW50IHZhbCBVTlVTRUQpCit7IH0KKworaW50Citzbm1wX2dldF9kb19kZWJ1Z2dpbmcodm9pZCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HICovCisKK3ZvaWQKK3NubXBfZGVidWdfaW5pdCh2b2lkKQoreworICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoInNubXAiLCAiZG9EZWJ1Z2dpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfY29uZmlnX3R1cm5fb25fZGVidWdnaW5nLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigxfDApIik7CisgICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigic25tcCIsICJkZWJ1Z1Rva2VucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19jb25maWdfcmVnaXN0ZXJfdG9rZW5zLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRva2VuWyx0b2tlbi4uLl0iKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9lbnVtLmMgYi9zbm1wbGliL3NubXBfZW51bS5jCmluZGV4IDVmNzM1ZWUuLjhhNmJkMzggMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9lbnVtLmMKKysrIGIvc25tcGxpYi9zbm1wX2VudW0uYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjAsNiArMjEsMTQgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfZW51bV9hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzZV9maW5kX2ZyZWVfdmFsdWVfaW5fc2xpc3QsIHNubXBfZW51bV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9lbnVtX3N0b3JlX2xpc3QsIHNubXBfZW51bV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9lbnVtX3N0b3JlX3NsaXN0LCBzbm1wX2VudW1fYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfZW51bV9jbGVhciwgc25tcF9lbnVtX2FsbCkKIAogc3RydWN0IHNubXBfZW51bV9saXN0X3N0ciB7CiAgICAgY2hhciAgICAgICAgICAgKm5hbWU7CkBAIC0zMCw3ICszOSw3IEBACiBzdGF0aWMgc3RydWN0IHNubXBfZW51bV9saXN0ICoqKnNubXBfZW51bV9saXN0czsKIHVuc2lnbmVkIGludCAgICBjdXJyZW50X21hal9udW07CiB1bnNpZ25lZCBpbnQgICAgY3VycmVudF9taW5fbnVtOwotc3RydWN0IHNubXBfZW51bV9saXN0X3N0ciAqc2xpc3RzdG9yYWdlOworc3RhdGljIHN0cnVjdCBzbm1wX2VudW1fbGlzdF9zdHIgKnNsaXN0c3RvcmFnZTsKIAogc3RhdGljIHZvaWQKIGZyZWVfZW51bV9saXN0KHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqbGlzdCk7CkBAIC00MCw5ICs0OSwxMSBAQAogewogICAgIGludCAgICAgICAgICAgICBpOwogCi0gICAgaWYgKCFzbm1wX2VudW1fbGlzdHMpCi0gICAgICAgIHNubXBfZW51bV9saXN0cyA9IChzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKioqKQotICAgICAgICAgICAgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKiopICogU0VfTUFYX0lEUyk7CisgICAgaWYgKE5VTEwgIT0gc25tcF9lbnVtX2xpc3RzKQorICAgICAgICByZXR1cm4gU0VfT0s7CisKKyAgICBzbm1wX2VudW1fbGlzdHMgPSAoc3RydWN0IHNubXBfZW51bV9saXN0ICoqKikKKyAgICAgICAgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKiopICogU0VfTUFYX0lEUyk7CiAgICAgaWYgKCFzbm1wX2VudW1fbGlzdHMpCiAgICAgICAgIHJldHVybiBTRV9OT01FTTsKICAgICBjdXJyZW50X21hal9udW0gPSBTRV9NQVhfSURTOwpAQCAtNTYsOSArNjcsNiBAQAogICAgIH0KICAgICBjdXJyZW50X21pbl9udW0gPSBTRV9NQVhfU1VCSURTOwogCi0gICAgaWYgKCFzbGlzdHN0b3JhZ2UpCi0gICAgICAgIHNsaXN0c3RvcmFnZSA9IE5VTEw7Ci0KICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAiZW51bSIsIHNlX3JlYWRfY29uZiwgTlVMTCwgTlVMTCk7CiAgICAgcmV0dXJuIFNFX09LOwogfQpAQCAtNzUsNyArODMsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgcmV0dXJuIFNFX05PTUVNOwogICAgIH0KLQorICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gc25tcF9lbnVtX2xpc3RzKTsKIAogICAgIGlmIChzbm1wX2VudW1fbGlzdHNbbWFqb3JdW21pbm9yXSAhPSBOVUxMKQogICAgICAgICByZXQgPSBTRV9BTFJFQURZX1RIRVJFOwpAQCAtMTc3LDYgKzE4NSw3IEBACiAgICAgcmVhZF9jb25maWdfc3RvcmUodHlwZSwgbGluZSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX0VOVU1fU1RPUkVfTElTVAogdm9pZAogc2Vfc3RvcmVfbGlzdCh1bnNpZ25lZCBpbnQgbWFqb3IsIHVuc2lnbmVkIGludCBtaW5vciwgY29uc3QgY2hhciAqdHlwZSkKIHsKQEAgLTE4NSwxMiArMTk0LDE0IEBACiAgICAgc25wcmludGYodG9rZW4sIHNpemVvZih0b2tlbiksICIlZDolZCIsIG1ham9yLCBtaW5vcik7CiAgICAgc2Vfc3RvcmVfZW51bV9saXN0KHNlX2ZpbmRfbGlzdChtYWpvciwgbWlub3IpLCB0b2tlbiwgdHlwZSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX0VOVU1fU1RPUkVfTElTVCAqLwogCiBzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKgogc2VfZmluZF9saXN0KHVuc2lnbmVkIGludCBtYWpvciwgdW5zaWduZWQgaW50IG1pbm9yKQogewogICAgIGlmIChtYWpvciA+IGN1cnJlbnRfbWFqX251bSB8fCBtaW5vciA+IGN1cnJlbnRfbWluX251bSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBzbm1wX2VudW1fbGlzdHMpOwogCiAgICAgcmV0dXJuIHNubXBfZW51bV9saXN0c1ttYWpvcl1bbWlub3JdOwogfQpAQCAtMjU3LDE4ICsyNjgsMTkgQEAKIGludAogc2VfYWRkX3BhaXJfdG9fbGlzdChzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKipsaXN0LCBjaGFyICpsYWJlbCwgaW50IHZhbHVlKQogewotICAgIHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqbGFzdG5vZGUgPSBOVUxMOworICAgIHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqbGFzdG5vZGUgPSBOVUxMLCAqdG1wOwogCiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gU0VfRE5FOwogCi0gICAgd2hpbGUgKCpsaXN0KSB7Ci0gICAgICAgIGlmICgoKmxpc3QpLT52YWx1ZSA9PSB2YWx1ZSkgeworICAgIHRtcCA9ICpsaXN0OworICAgIHdoaWxlICh0bXApIHsKKyAgICAgICAgaWYgKHRtcC0+dmFsdWUgPT0gdmFsdWUpIHsKICAgICAgICAgICAgIGZyZWUobGFiZWwpOwogICAgICAgICAgICAgcmV0dXJuIChTRV9BTFJFQURZX1RIRVJFKTsKICAgICAgICAgfQotICAgICAgICBsYXN0bm9kZSA9ICgqbGlzdCk7Ci0gICAgICAgICgqbGlzdCkgPSAoKmxpc3QpLT5uZXh0OworICAgICAgICBsYXN0bm9kZSA9IHRtcDsKKyAgICAgICAgdG1wID0gdG1wLT5uZXh0OwogICAgIH0KIAogICAgIGlmIChsYXN0bm9kZSkgewpAQCAtMzI5LDE4ICszNDEsMTkgQEAKICAgICByZXR1cm4gKHNlX2ZpbmRfbGFiZWxfaW5fbGlzdChzZV9maW5kX3NsaXN0KGxpc3RuYW1lKSwgdmFsdWUpKTsKIH0KIAotCiBpbnQKIHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUsIGNvbnN0IGNoYXIgKmxhYmVsKQogewogICAgIHJldHVybiAoc2VfZmluZF92YWx1ZV9pbl9saXN0KHNlX2ZpbmRfc2xpc3QobGlzdG5hbWUpLCBsYWJlbCkpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0VfRklORF9GUkVFX1ZBTFVFX0lOX1NMSVNUCiBpbnQKIHNlX2ZpbmRfZnJlZV92YWx1ZV9pbl9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSkKIHsKICAgICByZXR1cm4gKHNlX2ZpbmRfZnJlZV92YWx1ZV9pbl9saXN0KHNlX2ZpbmRfc2xpc3QobGlzdG5hbWUpKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRV9GSU5EX0ZSRUVfVkFMVUVfSU5fU0xJU1QgKi8KIAogaW50CiBzZV9hZGRfcGFpcl90b19zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSwgY2hhciAqbGFiZWwsIGludCB2YWx1ZSkKQEAgLTQyNSwxMiArNDM4LDcgQEAKICAgICByZXR1cm47CiB9CiAKLXZvaWQKLXNlX2NsZWFyX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lKQotewotICAgIHNlX2NsZWFyX2xpc3Qoc2VfZmluZF9zbGlzdF9wdHIobGlzdG5hbWUpKTsKLX0KLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfRU5VTV9TVE9SRV9TTElTVAogdm9pZAogc2Vfc3RvcmVfc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUsIGNvbnN0IGNoYXIgKnR5cGUpCiB7CkBAIC00NDcsNiArNDU1LDE0IEBACiAgICAgc2Vfc3RvcmVfc2xpc3QoKGNoYXIgKiljbGllbnRhcmdzLCBhcHBuYW1lKTsKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9FTlVNX1NUT1JFX1NMSVNUICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX0VOVU1fQ0xFQVIKK3ZvaWQKK3NlX2NsZWFyX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lKQoreworICAgIHNlX2NsZWFyX2xpc3Qoc2VfZmluZF9zbGlzdF9wdHIobGlzdG5hbWUpKTsKK30KIAogdm9pZAogc2VfY2xlYXJfYWxsX2xpc3RzKHZvaWQpCkBAIC00NTYsMjQgKzQ3Miw0IEBACiAgICAgZm9yIChzcHRyID0gc2xpc3RzdG9yYWdlOyBzcHRyICE9IE5VTEw7IHNwdHIgPSBzcHRyLT5uZXh0KQogICAgICAgICBzZV9jbGVhcl9saXN0KCYoc3B0ci0+bGlzdCkpOwogfQotCi0jaWZkZWYgVEVTVElORwotbWFpbigpCi17Ci0gICAgaW5pdF9zbm1wX2VudW0oKTsKLSAgICBzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoImhpIiksIDEpOwotICAgIHNlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cCgidGhlcmUiKSwgMik7Ci0gICAgcHJpbnRmKCJoaTogJWRcbiIsIHNlX2ZpbmRfdmFsdWUoMSwgMSwgImhpIikpOwotICAgIHByaW50ZigiMjogJXNcbiIsIHNlX2ZpbmRfbGFiZWwoMSwgMSwgMikpOwotCi0gICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoInRlc3RpbmciLCAibGlmZSwgYW5kIGV2ZXJ5dGhpbmciLCA0Mik7Ci0gICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoInRlc3RpbmciLCAicmVzdGF1cmFudCBhdCB0aGUgZW5kIG9mIHRoZSB1bml2ZXJzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMik7Ci0KLSAgICBwcmludGYoImxpZmUsIGFuZCBldmVyeXRoaW5nOiAlZFxuIiwKLSAgICAgICAgICAgc2VfZmluZF92YWx1ZV9pbl9zbGlzdCgidGVzdGluZyIsICJsaWZlLCBhbmQgZXZlcnl0aGluZyIpKTsKLSAgICBwcmludGYoIjI6ICVzXG4iLCBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJ0ZXN0aW5nIiwgMikpOwotCi0gICAgc2VfY2xlYXJfYWxsX2xpc3RzKCk7Ci19Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRFU1RJTkcgKi8KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfRU5VTV9DTEVBUiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX2xvZ2dpbmcuYyBiL3NubXBsaWIvc25tcF9sb2dnaW5nLmMKaW5kZXggN2EwZGRiMi4uYTJjZDU1YSAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX2xvZ2dpbmcuYworKysgYi9zbm1wbGliL3NubXBfbG9nZ2luZy5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKiAgQHsKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX01BTExPQ19ICiAjaW5jbHVkZSA8bWFsbG9jLmg+CkBAIC00MiwxMSArNDMsNyBAQAogI2VuZGlmCiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTU5LDExICs1Niw3IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1NUREFSR19ICiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHZhcmFyZ3MuaD4KLSNlbmRpZgogCiAjaWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNzIsMTQgKzY1LDYgQEAKICNpbmNsdWRlIDxkbWFsbG9jLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX1dJTkRPV1NfSAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4gICAgICAvKiBGb3IgdGhpcyBmaWxlJ3MgImludGVybmFsIiBkZWZpbml0aW9ucyAqLwpAQCAtMTAwLDE5ICs4NSw1NyBAQAogI2VuZGlmCiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvZ2dpbmdfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9nZ2luZ19vdXRwdXRzLCBsb2dnaW5nX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsb2dnaW5nX2ZpbGUsIGxvZ2dpbmdfb3V0cHV0cykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsb2dnaW5nX3N0ZGlvLCBsb2dnaW5nX291dHB1dHMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9nZ2luZ19zeXNsb2csIGxvZ2dpbmdfb3V0cHV0cykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsb2dnaW5nX2V4dGVybmFsLCBsb2dnaW5nX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGVuYWJsZV9zdGRlcnJsb2csIGxvZ2dpbmdfYWxsKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9nZ2luZ19lbmFibGVfY2FsbGxvZywgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9nZ2luZ19lbmFibGVfbG9naGFuZGxlciwgbmV0c25tcF91bnVzZWQpCisKKy8qIGRlZmF1bHQgdG8gdGhlIGZpbGUvc3RkaW8vc3lzbG9nIHNldCAqLworbmV0c25tcF9mZWF0dXJlX3dhbnQobG9nZ2luZ19vdXRwdXRzKQorCiAvKgogICogbG9naF9oZWFkOiAgQSBsaXN0IG9mIGFsbCBsb2cgaGFuZGxlcnMsIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgcHJpb3JpdHkKICAqIGxvZ2hfcHJpb3JpdGllczogICdJbmRleGVzJyBpbnRvIHRoaXMgbGlzdCwgYnkgcHJpb3JpdHkKICAqLwogbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naF9oZWFkID0gTlVMTDsKIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2hfcHJpb3JpdGllc1tMT0dfREVCVUcrMV07CitzdGF0aWMgaW50ICBsb2doX2VuYWJsZWQgPSAwOwogCi1zdGF0aWMgaW50ICAgICAgbmV3bGluZSA9IDE7CSAvKiBNVENSSVRJQ0FMX1JFU09VUkNFICovCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogc3RhdGljIGNoYXIgc3lzbG9nbmFtZVs2NF0gPSBERUZBVUxUX0xPR19JRDsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAKIHZvaWQKK25ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCkKK3sKKyAgICBpZiAoIWxvZ2ggfHwgKDAgPT0gbG9naC0+ZW5hYmxlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBsb2doLT5lbmFibGVkID0gMDsKKyAgICAtLWxvZ2hfZW5hYmxlZDsKKyAgICBuZXRzbm1wX2Fzc2VydChsb2doX2VuYWJsZWQgPj0gMCk7Cit9CisKK3ZvaWQKK25ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doKQoreworICAgIGlmICghbG9naCB8fCAoMCAhPSBsb2doLT5lbmFibGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGxvZ2gtPmVuYWJsZWQgPSAxOworICAgICsrbG9naF9lbmFibGVkOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCit2b2lkCiBuZXRzbm1wX2VuYWJsZV9maWxlbG9nKG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2gsIGludCBkb250X3plcm9fbG9nKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogCiAjaWZuZGVmIEhBVkVfVlNOUFJJTlRGCiAgICAgICAgICAgICAgICAgLyoKQEAgLTEyMywxMCArMTQ2LDIyIEBACiAjZW5kaWYKIAogdm9pZAorcGFyc2VfY29uZmlnX2xvZ09wdGlvbihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKK3sKKyAgaW50IG15X2FyZ2MgPSAwIDsKKyAgY2hhciAqKm15X2FyZ3YgPSBOVUxMOworCisgIHNubXBfbG9nX29wdGlvbnMoIGNwdHIsIG15X2FyZ2MsIG15X2FyZ3YgKTsKK30KKwordm9pZAogaW5pdF9zbm1wX2xvZ2dpbmcodm9pZCkKIHsKICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYihBU05fQk9PTEVBTiwgInNubXAiLCAibG9nVGltZXN0YW1wIiwgCiAJCQkgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9MT0dfVElNRVNUQU1QKTsKKyAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCJzbm1wIiwgImxvZ09wdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9jb25maWdfbG9nT3B0aW9uLCBOVUxMLCAic3RyaW5nIik7CisKIH0KIAogdm9pZApAQCAtMTQwLDYgKzE3NSw3IEBACiAvKgogICogVGhlc2UgZGVmaW5pdGlvbnMgaGFuZGxlIDQuMiBzeXN0ZW1zIHdpdGhvdXQgYWRkaXRpb25hbCBzeXNsb2cgZmFjaWxpdGllcy4KICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAjaWZuZGVmIExPR19DT05TCiAjZGVmaW5lIExPR19DT05TCTAgICAgICAgLyogRG9uJ3QgYm90aGVyIGlmIG5vdCBkZWZpbmVkLi4uICovCiAjZW5kaWYKQEAgLTE3Niw2ICsyMTIsMjcgQEAKICNpZm5kZWYgTE9HX1VTRVIKICNkZWZpbmUgTE9HX1VTRVIJMAogI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLworCisvKiBTZXQgbGluZSBidWZmZXJpbmcgbW9kZSBmb3IgYSBzdHJlYW0uICovCit2b2lkCituZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZyhGSUxFICpzdHJlYW0pCit7CisjaWYgZGVmaW5lZChXSU4zMikKKyAgICAvKgorICAgICAqIEFjY29yZGluZyB0byBNU0ROLCB0aGUgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gQyBydW50aW1lIGxpYnJhcnkgZG9lcworICAgICAqIG5vdCBzdXBwb3J0IGxpbmUgYnVmZmVyaW5nLCBzbyB0dXJuIG9mZiBidWZmZXJpbmcgY29tcGxldGVseS4KKyAgICAgKiBTZWUgYWxzbyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvODZjZWJoZnMoVlMuNzEpLmFzcHguCisgICAgICovCisgICAgc2V0dmJ1ZihzdHJlYW0sIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TRVRMSU5FQlVGKQorICAgIC8qIHNldGxpbmVmdW5jdGlvbigpIGlzIGEgZnVuY3Rpb24gZnJvbSB0aGUgQlNEIFVuaXggQVBJLiAqLworICAgIHNldGxpbmVidWYoc3RyZWFtKTsKKyNlbHNlCisgICAgLyogU2VlIGFsc28gdGhlIEM4OSBvciBDOTkgc3RhbmRhcmQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2V0dmJ1ZigpLiAqLworICAgIHNldHZidWYoc3RyZWFtLCBOVUxMLCBfSU9MQkYsIEJVRlNJWik7CisjZW5kaWYKK30KIAogLyoKICAqIERlY29kZXMgbG9nIHByaW9yaXR5LgpAQCAtMjUxLDYgKzMwOCw3IEBACiAgICAgcmV0dXJuIHByaV9sb3c7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogaW50CiBkZWNvZGVfZmFjaWxpdHkoIGNoYXIgKm9wdGFyZyApCiB7CkBAIC0yODUsNiArMzQzLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAKIGludAogc25tcF9sb2dfb3B0aW9ucyhjaGFyICpvcHRhcmcsIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndikKQEAgLTMwNSw2ICszNjQsOCBAQAogICAgIGludCAgICAgICAgICAgICBpbmNfb3B0aW5kID0gMDsKICAgICBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doOwogCisgICAgREVCVUdNU0dUKCgibG9nZ2luZzpvcHRpb25zIiwgIm9wdGFyZzogJyVzJywgYXJnYyAlZCwgYXJndiAnJXMnXG4iLAorICAgICAgICAgICAgICAgb3B0YXJnLCBhcmdjLCBhcmd2ID8gYXJndlswXSA6ICJOVUxMIikpOwogICAgIG9wdGFyZysrOwogICAgIGlmICghKmNwKQogICAgICAgICBjcCA9ICZtaXNzaW5nX29wdDsKQEAgLTMxOCw3ICszNzksNyBAQAogICAgIC8qCiAgICAgICogYW5kICcuLi4uICItTHggdmFsdWUiIC4uLi4nICAoKndpdGgqIHRoZSBxdW90ZXMpCiAgICAgICovCi0gICAgd2hpbGUgKCpvcHRhcmcgJiYgaXNzcGFjZSgqb3B0YXJnKSkgeworICAgIHdoaWxlICgqb3B0YXJnICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpvcHRhcmcpKSkgewogICAgICAgICBvcHRhcmcrKzsKICAgICB9CiAgICAgLyoKQEAgLTMzNiw4ICszOTcsMTAgQEAKICAgICAgICAgaW5jX29wdGluZCA9IDE7CiAgICAgfQogCisgICAgREVCVUdNU0dUKCgibG9nZ2luZzpvcHRpb25zIiwgIipjcDogJyVjJ1xuIiwgKmNwKSk7CiAgICAgc3dpdGNoICgqY3ApIHsKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KICAgICAvKgogICAgICAqIExvZyB0byBTdGFuZGFyZCBFcnJvcgogICAgICAqLwpAQCAtMzUwLDYgKzQxMyw3IEBACiAgICAgY2FzZSAnZSc6CiAgICAgICAgIGxvZ2ggPSBuZXRzbm1wX3JlZ2lzdGVyX2xvZ2hhbmRsZXIoTkVUU05NUF9MT0dIQU5ETEVSX1NUREVSUiwgcHJpb3JpdHkpOwogICAgICAgICBpZiAobG9naCkgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcoc3RkZXJyKTsKICAgICAgICAgICAgIGxvZ2gtPnByaV9tYXggPSBwcmlfbWF4OwogICAgICAgICAgICAgbG9naC0+dG9rZW4gICA9IHN0cmR1cCgic3RkZXJyIik7CiAJfQpAQCAtMzY3LDExICs0MzEsMTMgQEAKICAgICBjYXNlICdvJzoKICAgICAgICAgbG9naCA9IG5ldHNubXBfcmVnaXN0ZXJfbG9naGFuZGxlcihORVRTTk1QX0xPR0hBTkRMRVJfU1RERVJSLCBwcmlvcml0eSk7CiAgICAgICAgIGlmIChsb2doKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZyhzdGRvdXQpOwogICAgICAgICAgICAgbG9naC0+cHJpX21heCA9IHByaV9tYXg7CiAgICAgICAgICAgICBsb2doLT50b2tlbiAgID0gc3RyZHVwKCJzdGRvdXQiKTsKICAgICAgICAgICAgIGxvZ2gtPmltYWdpYyAgPSAxOwkgICAgLyogc3Rkb3V0LCBub3Qgc3RkZXJyICovCiAJfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KIAogICAgIC8qCiAgICAgICogTG9nIHRvIGEgbmFtZWQgZmlsZQpAQCAtMzgxLDYgKzQ0Nyw3IEBACiAgICAgICAgIGlmIChwcmlvcml0eSA9PSAtMSB8fCAhYXJndikgIHJldHVybiAtMTsKICAgICAgICAgb3B0YXJnID0gYXJndlsrK29wdGluZF07CiAgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiAgICAgY2FzZSAnZic6CiAgICAgICAgIGlmIChpbmNfb3B0aW5kKQogICAgICAgICAgICAgb3B0aW5kKys7CkBAIC0zOTcsNyArNDY0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBFTkRfTE9HRklMRVMpKTsKIAl9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogICAgIC8qCiAgICAgICogTG9nIHRvIHN5c2xvZwogICAgICAqLwpAQCAtNDI0LDExICs0OTMsMTIgQEAKICAgICAgICAgICAgIGludCBmYWNpbGl0eSA9IGRlY29kZV9mYWNpbGl0eShvcHRhcmcpOwogICAgICAgICAgICAgaWYgKGZhY2lsaXR5ID09IC0xKSAgcmV0dXJuIC0xOwogICAgICAgICAgICAgbG9naC0+cHJpX21heCA9IHByaV9tYXg7Ci0gICAgICAgICAgICBsb2doLT50b2tlbiAgID0gc3RyZHVwKHNubXBfbG9nX3N5c2xvZ25hbWUoMCkpOworICAgICAgICAgICAgbG9naC0+dG9rZW4gICA9IHN0cmR1cChzbm1wX2xvZ19zeXNsb2duYW1lKE5VTEwpKTsKICAgICAgICAgICAgIGxvZ2gtPm1hZ2ljICAgPSAodm9pZCAqKShpbnRwdHJfdClmYWNpbGl0eTsKLQkgICAgc25tcF9lbmFibGVfc3lzbG9nX2lkZW50KHNubXBfbG9nX3N5c2xvZ25hbWUoMCksIGZhY2lsaXR5KTsKKwkgICAgc25tcF9lbmFibGVfc3lzbG9nX2lkZW50KHNubXBfbG9nX3N5c2xvZ25hbWUoTlVMTCksIGZhY2lsaXR5KTsKIAl9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAogICAgIC8qCiAgICAgICogRG9uJ3QgbG9nIApAQCAtNDYwLDYgKzUzMCw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogY2hhciAqCiBzbm1wX2xvZ19zeXNsb2duYW1lKGNvbnN0IGNoYXIgKnBzdHIpCiB7CkBAIC00NjgsMjAgKzUzOSwyOSBAQAogCiAgIHJldHVybiBzeXNsb2duYW1lOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAogdm9pZAogc25tcF9sb2dfb3B0aW9uc191c2FnZShjb25zdCBjaGFyICpsZWFkLCBGSUxFICogb3V0ZikKIHsKICAgICBjb25zdCBjaGFyICpwcmkxX21zZyA9ICIgZm9yIGxldmVsICdwcmknIGFuZCBhYm92ZSI7CiAgICAgY29uc3QgY2hhciAqcHJpMl9tc2cgPSAiIGZvciBsZXZlbHMgJ3AxJyB0byAncDInIjsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCiAgICAgZnByaW50ZihvdXRmLCAiJXNlOiAgICAgICAgICAgbG9nIHRvIHN0YW5kYXJkIGVycm9yXG4iLCBsZWFkKTsKICAgICBmcHJpbnRmKG91dGYsICIlc286ICAgICAgICAgICBsb2cgdG8gc3RhbmRhcmQgb3V0cHV0XG4iLCBsZWFkKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KICAgICBmcHJpbnRmKG91dGYsICIlc246ICAgICAgICAgICBkb24ndCBsb2cgYXQgYWxsXG4iLCBsZWFkKTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKICAgICBmcHJpbnRmKG91dGYsICIlc2YgZmlsZTogICAgICBsb2cgdG8gdGhlIHNwZWNpZmllZCBmaWxlXG4iLCBsZWFkKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgZnByaW50ZihvdXRmLCAiJXNzIGZhY2lsaXR5OiAgbG9nIHRvIHN5c2xvZyAodmlhIHRoZSBzcGVjaWZpZWQgZmFjaWxpdHkpXG4iLCBsZWFkKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAgICAgZnByaW50ZihvdXRmLCAiXG4lcyh2YXJpYW50cylcbiIsIGxlYWQpOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogICAgIGZwcmludGYob3V0ZiwgIiVzW0VPTl0gcHJpOiAgIGxvZyB0byBzdGFuZGFyZCBlcnJvciwgb3V0cHV0IG9yIC9kZXYvbnVsbCVzXG4iLCBsZWFkLCBwcmkxX21zZyk7CiAgICAgZnByaW50ZihvdXRmLCAiJXNbRU9OXSBwMS1wMjogbG9nIHRvIHN0YW5kYXJkIGVycm9yLCBvdXRwdXQgb3IgL2Rldi9udWxsJXNcbiIsIGxlYWQsIHByaTJfbXNnKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogICAgIGZwcmludGYob3V0ZiwgIiVzW0ZTXSBwcmkgdG9rZW46ICAgIGxvZyB0byBmaWxlL3N5c2xvZyVzXG4iLCBsZWFkLCBwcmkxX21zZyk7CiAgICAgZnByaW50ZihvdXRmLCAiJXNbRlNdIHAxLXAyIHRva2VuOiAgbG9nIHRvIGZpbGUvc3lzbG9nJXNcbiIsIGxlYWQsIHByaTJfbXNnKTsKIH0KQEAgLTQ5NSwxMSArNTc1LDcgQEAKIGludAogc25tcF9nZXRfZG9fbG9nZ2luZyh2b2lkKQogewotICAgIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2g7Ci0gICAgZm9yIChsb2doID0gbG9naF9oZWFkOyBsb2doOyBsb2doID0gbG9naC0+bmV4dCkKLSAgICAgICAgaWYgKGxvZ2gtPmVuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKGxvZ2hfZW5hYmxlZCA+IDApOwogfQogCiAKQEAgLTUyMCw2ICs1OTYsNyBAQAogICAgIHJldHVybiBzYnVmOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKIHZvaWQKIHNubXBfZGlzYWJsZV9zeXNsb2dfZW50cnkobmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCkKIHsKQEAgLTUzNyw3ICs2MTQsNyBAQAogICAgIGxvZ2gtPmltYWdpYyAgPSAwOwogI2VuZGlmCiAKLSAgICBsb2doLT5lbmFibGVkID0gMDsKKyAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogfQogCiB2b2lkCkBAIC01NDksNyArNjI2LDkgQEAKICAgICAgICAgaWYgKGxvZ2gtPmVuYWJsZWQgJiYgbG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfU1lTTE9HKQogICAgICAgICAgICAgc25tcF9kaXNhYmxlX3N5c2xvZ19lbnRyeShsb2doKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKIHZvaWQKIHNubXBfZGlzYWJsZV9maWxlbG9nX2VudHJ5KG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2gpCiB7CkBAIC01NjEsOSArNjQwLDExIEBACiAgICAgICAgIGZjbG9zZSgoRklMRSopbG9naC0+bWFnaWMpOwogICAgICAgICBsb2doLT5tYWdpYyAgID0gTlVMTDsKICAgICB9Ci0gICAgbG9naC0+ZW5hYmxlZCA9IDA7CisgICAgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiB2b2lkCiBzbm1wX2Rpc2FibGVfZmlsZWxvZyh2b2lkKQogewpAQCAtNTczLDcgKzY1NCw5IEBACiAgICAgICAgIGlmIChsb2doLT5lbmFibGVkICYmIGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX0ZJTEUpCiAgICAgICAgICAgICBzbm1wX2Rpc2FibGVfZmlsZWxvZ19lbnRyeShsb2doKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTwogLyoKICAqIHJldHVybnMgdGhhdCBzdGF0dXMgb2Ygc3RkZXJyIGxvZ2dpbmcKICAqCkBAIC02MDIsMTAgKzY4NSwxMiBAQAogICAgIGZvciAobG9naCA9IGxvZ2hfaGVhZDsgbG9naDsgbG9naCA9IGxvZ2gtPm5leHQpCiAgICAgICAgIGlmIChsb2doLT5lbmFibGVkICYmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9TVERPVVQgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX1NUREVSUikpIHsKLSAgICAgICAgICAgIGxvZ2gtPmVuYWJsZWQgPSAwOworICAgICAgICAgICAgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKIAl9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0VOQUJMRV9DQUxMTE9HCiB2b2lkCiBzbm1wX2Rpc2FibGVfY2FsbGxvZyh2b2lkKQogewpAQCAtNjEzLDkgKzY5OCwxMCBAQAogCiAgICAgZm9yIChsb2doID0gbG9naF9oZWFkOyBsb2doOyBsb2doID0gbG9naC0+bmV4dCkKICAgICAgICAgaWYgKGxvZ2gtPmVuYWJsZWQgJiYgbG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfQ0FMTEJBQ0spIHsKLSAgICAgICAgICAgIGxvZ2gtPmVuYWJsZWQgPSAwOworICAgICAgICAgICAgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKIAl9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0VOQUJMRV9DQUxMTE9HICovCiAKIHZvaWQKIHNubXBfZGlzYWJsZV9sb2codm9pZCkKQEAgLTYyMywxMSArNzA5LDE1IEBACiAgICAgbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naDsKIAogICAgIGZvciAobG9naCA9IGxvZ2hfaGVhZDsgbG9naDsgbG9naCA9IGxvZ2gtPm5leHQpIHsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogICAgICAgICBpZiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfU1lTTE9HKQogICAgICAgICAgICAgc25tcF9kaXNhYmxlX3N5c2xvZ19lbnRyeShsb2doKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiAgICAgICAgIGlmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9GSUxFKQogICAgICAgICAgICAgc25tcF9kaXNhYmxlX2ZpbGVsb2dfZW50cnkobG9naCk7Ci0gICAgICAgIGxvZ2gtPmVuYWJsZWQgPSAwOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCisgICAgICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgfQogfQogCkBAIC02MzksMTUgKzcyOSwyMCBAQAogbmV0c25tcF9sb2dnaW5nX3Jlc3RhcnQodm9pZCkKIHsKICAgICBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doOworICAgIGludCBkb25lb25lID0gMDsKIAogICAgIGZvciAobG9naCA9IGxvZ2hfaGVhZDsgbG9naDsgbG9naCA9IGxvZ2gtPm5leHQpIHsKICAgICAgICAgaWYgKDAgPT0gbG9naC0+ZW5hYmxlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgICAgIGlmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9TWVNMT0cpIHsKICAgICAgICAgICAgIHNubXBfZGlzYWJsZV9zeXNsb2dfZW50cnkobG9naCk7CiAgICAgICAgICAgICBzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQobG9naC0+dG9rZW4sKGludCkoaW50cHRyX3QpbG9naC0+bWFnaWMpOworICAgICAgICAgICAgZG9uZW9uZSA9IDE7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfRklMRSkgeworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKKyAgICAgICAgaWYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX0ZJTEUgJiYgIWRvbmVvbmUpIHsKICAgICAgICAgICAgIHNubXBfZGlzYWJsZV9maWxlbG9nX2VudHJ5KGxvZ2gpOwogICAgICAgICAgICAgLyoqIGhtbSwgZG9uJ3QgemVybyBzdGF0dXMgaXNuJ3Qgc2F2ZWQuLiBpIHRoaW5rIGl0J3MKICAgICAgICAgICAgICAqIHNhZmVyIG5vdCB0byBvdmVyd3JpdGUsIGluIGNhc2UgYSBodXAgaXMganVzdCB0bwpAQCAtNjU1LDE1ICs3NTAsMTcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgbmV0c25tcF9lbmFibGVfZmlsZWxvZyhsb2doLCAxKTsKICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAgICAgfQogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKIHZvaWQKIHNubXBfZW5hYmxlX3N5c2xvZyh2b2lkKQogewotICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChzbm1wX2xvZ19zeXNsb2duYW1lKDApLCBMT0dfREFFTU9OKTsKKyAgICBzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQoc25tcF9sb2dfc3lzbG9nbmFtZShOVUxMKSwgTE9HX0RBRU1PTik7CiB9CiAKIHZvaWQKQEAgLTY5OCw3ICs3OTUsMTAgQEAKICAgICAgICAgaWYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX1NZU0xPRykgewogICAgICAgICAgICAgbG9naC0+bWFnaWMgICA9ICh2b2lkKilldmVudGxvZ19oOwogICAgICAgICAgICAgbG9naC0+aW1hZ2ljICA9IGVuYWJsZTsJLyogc3lzbG9nIG9wZW4gKi8KLSAgICAgICAgICAgIGxvZ2gtPmVuYWJsZWQgPSBlbmFibGU7CisgICAgICAgICAgICBpZiAobG9naC0+ZW5hYmxlZCAmJiAoMCA9PSBlbmFibGUpKQorICAgICAgICAgICAgICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CisgICAgICAgICAgICBlbHNlIGlmICgoMCA9PSBsb2doLT5lbmFibGVkKSAmJiBlbmFibGUpCisgICAgICAgICAgICAgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgICAgICAgICAgZm91bmQgICAgICAgICA9IDE7CiAJfQogCkBAIC03MDksMTEgKzgwOSwxNiBAQAogICAgICAgICAgICAgbG9naC0+bWFnaWMgICAgPSAodm9pZCopZXZlbnRsb2dfaDsKICAgICAgICAgICAgIGxvZ2gtPnRva2VuICAgID0gc3RyZHVwKGlkZW50KTsKICAgICAgICAgICAgIGxvZ2gtPmltYWdpYyAgID0gZW5hYmxlOwkvKiBzeXNsb2cgb3BlbiAqLwotICAgICAgICAgICAgbG9naC0+ZW5hYmxlZCAgPSBlbmFibGU7CisgICAgICAgICAgICBpZiAobG9naC0+ZW5hYmxlZCAmJiAoMCA9PSBlbmFibGUpKQorICAgICAgICAgICAgICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CisgICAgICAgICAgICBlbHNlIGlmICgoMCA9PSBsb2doLT5lbmFibGVkKSAmJiBlbmFibGUpCisgICAgICAgICAgICAgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgICAgICB9CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogdm9pZAogbmV0c25tcF9lbmFibGVfZmlsZWxvZyhuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doLCBpbnQgZG9udF96ZXJvX2xvZykKIHsKQEAgLTcyNCwyMSArODI5LDE0IEBACiAKICAgICBpZiAoIWxvZ2gtPm1hZ2ljKSB7CiAgICAgICAgIGxvZ2ZpbGUgPSBmb3Blbihsb2doLT50b2tlbiwgZG9udF96ZXJvX2xvZyA/ICJhIiA6ICJ3Iik7Ci0gICAgICAgIGlmICghbG9nZmlsZSkKKyAgICAgICAgaWYgKCFsb2dmaWxlKSB7CisJICAgIHNubXBfbG9nX3BlcnJvcihsb2doLT50b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CisJfQogICAgICAgICBsb2doLT5tYWdpYyA9ICh2b2lkKilsb2dmaWxlOwotI2lmZGVmIFdJTjMyCi0gICAgICAgIC8qCi0gICAgICAgICAqIEFwcGFyZW50bHksICJsaW5lIGJ1ZmZlcmluZyIgdW5kZXIgV2luZG93cyBpcwotICAgICAgICAgKiAgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYXMgImZ1bGwgYnVmZmVyaW5nIi4KLSAgICAgICAgICogIExldCdzIHRyeSB0dXJuaW5nIG9mZiBidWZmZXJpbmcgY29tcGxldGVseS4KLSAgICAgICAgICovCi0gICAgICAgIHNldHZidWYobG9nZmlsZSwgTlVMTCwgX0lPTkJGLCBCVUZTSVopOwotI2Vsc2UKLSAgICAgICAgc2V0dmJ1Zihsb2dmaWxlLCBOVUxMLCBfSU9MQkYsIEJVRlNJWik7Ci0jZW5kaWYKKyAgICAgICAgbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcobG9nZmlsZSk7CiAgICAgfQotICAgIGxvZ2gtPmVuYWJsZWQgPSAxOworICAgIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKIH0KIAogdm9pZApAQCAtNzcwLDggKzg2OCwxMSBAQAogICAgICAgICAgICAgICAgIG5ldHNubXBfZW5hYmxlX2ZpbGVsb2cobG9naCwgZG9udF96ZXJvX2xvZyk7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0VOQUJMRV9TVERFUlJMT0cKKy8qIHVzZWQgaW4gdGhlIHBlcmwgbW9kdWxlcyBhbmQgaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbnQuYyAqLwogdm9pZAogc25tcF9lbmFibGVfc3RkZXJybG9nKHZvaWQpCiB7CkBAIC03ODEsNyArODgyLDcgQEAKICAgICBmb3IgKGxvZ2ggPSBsb2doX2hlYWQ7IGxvZ2g7IGxvZ2ggPSBsb2doLT5uZXh0KQogICAgICAgICBpZiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfU1RET1VUIHx8CiAgICAgICAgICAgICBsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9TVERFUlIpIHsKLSAgICAgICAgICAgIGxvZ2gtPmVuYWJsZWQgPSAxOworICAgICAgICAgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgICAgICAgICAgZm91bmQgICAgICAgICA9IDE7CiAgICAgICAgIH0KIApAQCAtNzkyLDggKzg5Myw5IEBACiAgICAgICAgICAgICBsb2doLT50b2tlbiAgICA9IHN0cmR1cCgic3RkZXJyIik7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRU5BQkxFX1NUREVSUkxPRyAqLwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0VOQUJMRV9DQUxMTE9HCiB2b2lkCiBzbm1wX2VuYWJsZV9jYWxsbG9nKHZvaWQpCS8qIFhYWCAtIG9yIHRha2UgYSBjYWxsYmFjayByb3V0aW5lID8/PyAqLwogewpAQCAtODAyLDcgKzkwNCw3IEBACiAKICAgICBmb3IgKGxvZ2ggPSBsb2doX2hlYWQ7IGxvZ2g7IGxvZ2ggPSBsb2doLT5uZXh0KQogICAgICAgICBpZiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfQ0FMTEJBQ0spIHsKLSAgICAgICAgICAgIGxvZ2gtPmVuYWJsZWQgPSAxOworICAgICAgICAgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgICAgICAgICAgZm91bmQgICAgICAgICA9IDE7CiAJfQogCkBAIC04MTMsNyArOTE1LDcgQEAKICAgICAgICAgICAgIGxvZ2gtPnRva2VuICAgID0gc3RyZHVwKCJjYWxsYmFjayIpOwogICAgIH0KIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19FTkFCTEVfQ0FMTExPRyAqLwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTg5MSwyMiArOTkzLDMxIEBACiAgICAgaWYgKCFsb2doKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIERFQlVHTVNHVCgoImxvZ2dpbmc6cmVnaXN0ZXIiLCAicmVnaXN0ZXJpbmcgbG9nIHR5cGUgJWQgd2l0aCBwcmkgJWRcbiIsCisgICAgICAgICAgICAgICB0eXBlLCBwcmlvcml0eSkpOworCiAgICAgbG9naC0+dHlwZSAgICAgPSB0eXBlOwogICAgIHN3aXRjaCAoIHR5cGUgKSB7CiAgICAgY2FzZSBORVRTTk1QX0xPR0hBTkRMRVJfU1RET1VUOgogICAgICAgICBsb2doLT5pbWFnaWMgID0gMTsKICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCiAgICAgY2FzZSBORVRTTk1QX0xPR0hBTkRMRVJfU1RERVJSOgogICAgICAgICBsb2doLT5oYW5kbGVyID0gbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogICAgIGNhc2UgTkVUU05NUF9MT0dIQU5ETEVSX0ZJTEU6CiAgICAgICAgIGxvZ2gtPmhhbmRsZXIgPSBsb2dfaGFuZGxlcl9maWxlOwogICAgICAgICBsb2doLT5pbWFnaWMgID0gMTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogICAgIGNhc2UgTkVUU05NUF9MT0dIQU5ETEVSX1NZU0xPRzoKICAgICAgICAgbG9naC0+aGFuZGxlciA9IGxvZ19oYW5kbGVyX3N5c2xvZzsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogICAgIGNhc2UgTkVUU05NUF9MT0dIQU5ETEVSX0NBTExCQUNLOgogICAgICAgICBsb2doLT5oYW5kbGVyID0gbG9nX2hhbmRsZXJfY2FsbGJhY2s7CiAgICAgICAgIGJyZWFrOwpAQCAtOTE4LDEyICsxMDI5LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBsb2doLT5wcmlvcml0eSA9IHByaW9yaXR5OwotICAgIGxvZ2gtPmVuYWJsZWQgID0gMTsKKyAgICBuZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgbmV0c25tcF9hZGRfbG9naGFuZGxlciggbG9naCApOwogICAgIHJldHVybiBsb2doOwogfQogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0VOQUJMRV9MT0dIQU5ETEVSCiBpbnQKIG5ldHNubXBfZW5hYmxlX2xvZ2hhbmRsZXIoIGNvbnN0IGNoYXIgKnRva2VuICkKIHsKQEAgLTkzMiw3ICsxMDQ0LDcgQEAKICAgICBsb2doID0gbmV0c25tcF9maW5kX2xvZ2hhbmRsZXIoIHRva2VuICk7CiAgICAgaWYgKCFsb2doKQogICAgICAgICByZXR1cm4gMDsKLSAgICBsb2doLT5lbmFibGVkID0gMTsKKyAgICBuZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTk0NSw5ICsxMDU3LDEwIEBACiAgICAgbG9naCA9IG5ldHNubXBfZmluZF9sb2doYW5kbGVyKCB0b2tlbiApOwogICAgIGlmICghbG9naCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbG9naC0+ZW5hYmxlZCA9IDA7CisgICAgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICByZXR1cm4gMTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRU5BQkxFX0xPR0hBTkRMRVIgKi8KIAogaW50CiBuZXRzbm1wX3JlbW92ZV9sb2doYW5kbGVyKCBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doICkKQEAgLTk3NCw5ICsxMDg3LDEyIEBACiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KIGludAogbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyKCAgbmV0c25tcF9sb2dfaGFuZGxlciogbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKQogeworICAgIHN0YXRpYyBpbnQgICAgICBuZXdsaW5lID0gMTsJIC8qIE1UQ1JJVElDQUxfUkVTT1VSQ0UgKi8KKyAgICBjb25zdCBjaGFyICAgICAqbmV3bGluZV9wdHI7CiAgICAgY2hhciAgICAgICAgICAgIHNidWZbNDBdOwogCiAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKQEAgLTk4NSw3ICsxMTAxLDEyIEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RyY3B5KHNidWYsICIiKTsKICAgICB9Ci0gICAgbmV3bGluZSA9IHN0cltzdHJsZW4oc3RyKSAtIDFdID09ICdcbic7CS8qIFhYWCAtIEVoID8gKi8KKyAgICAvKgorICAgICAqIFJlbWVtYmVyIHdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IGxpbmUgZW5kcyB3aXRoIGEgbmV3bGluZSBmb3IgdGhlCisgICAgICogbmV4dCBjYWxsIG9mIGxvZ19oYW5kbGVyX3N0ZG91dGVycigpLgorICAgICAqLworICAgIG5ld2xpbmVfcHRyID0gc3RycmNocihzdHIsICdcbicpOworICAgIG5ld2xpbmUgPSBuZXdsaW5lX3B0ciAmJiBuZXdsaW5lX3B0clsxXSA9PSAwOwogCiAgICAgaWYgKGxvZ2gtPmltYWdpYykKICAgICAgICBwcmludGYoICAgICAgICAgIiVzJXMiLCBzYnVmLCBzdHIpOwpAQCAtOTk0LDggKzExMTUsMTAgQEAKIAogICAgIHJldHVybiAxOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogI2lmZGVmIFdJTjMyCiBpbnQKIGxvZ19oYW5kbGVyX3N5c2xvZyggIG5ldHNubXBfbG9nX2hhbmRsZXIqIGxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikKQEAgLTEwNzksOCArMTIwMiwxMCBAQAogICAgIHJldHVybiAxOwogfQogI2VuZGlmIC8qICFXSU4zMiAqLworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiBpbnQKIGxvZ19oYW5kbGVyX2ZpbGUoICAgIG5ldHNubXBfbG9nX2hhbmRsZXIqIGxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikKIHsKQEAgLTExMTcsNiArMTI0Miw3IEBACiAgICAgbG9naC0+aW1hZ2ljID0gc3RyW3N0cmxlbihzdHIpIC0gMV0gPT0gJ1xuJzsKICAgICByZXR1cm4gMTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLwogCiBpbnQKIGxvZ19oYW5kbGVyX2NhbGxiYWNrKG5ldHNubXBfbG9nX2hhbmRsZXIqIGxvZ2gsIGludCBwcmksIGNvbnN0IGNoYXIgKnN0cikKQEAgLTExNTEsMTcgKzEyNzcsMzcgQEAKIHZvaWQKIHNubXBfbG9nX3N0cmluZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKnN0cikKIHsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCisgICAgc3RhdGljIGludCBzdGRlcnJfZW5hYmxlZCA9IDA7CisgICAgc3RhdGljIG5ldHNubXBfbG9nX2hhbmRsZXIgbGggPSB7IDEsIDAsIDAsIDAsICJzdGRlcnIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dfaGFuZGxlcl9zdGRvdXRlcnIsIDAsIE5VTEwsICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIH07CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCiAgICAgbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naDsKIAogICAgIC8qCiAgICAgICogV2UndmUgZ290IHRvIGJlIGFibGUgdG8gbG9nIG1lc3NhZ2VzICpzb21ld2hlcmUqIQogICAgICAqIElmIHlvdSBkb24ndCB3YW50IHN0ZGVyciBsb2dnaW5nLCB0aGVuIGVuYWJsZSBzb21ldGhpbmcgZWxzZS4KICAgICAgKi8KLSAgICBpZiAoIWxvZ2hfaGVhZCkgewotICAgICAgICBzbm1wX2VuYWJsZV9zdGRlcnJsb2coKTsKLSAgICAgICAgc25tcF9sb2dfc3RyaW5nKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGxvZyBoYW5kbGluZyBlbmFibGVkIC0gdHVybmluZyBvbiBzdGRlcnIgbG9nZ2luZ1xuIik7CisgICAgaWYgKDAgPT0gbG9naF9lbmFibGVkKSB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTworICAgICAgICBpZiAoIXN0ZGVycl9lbmFibGVkKSB7CisgICAgICAgICAgICArK3N0ZGVycl9lbmFibGVkOworICAgICAgICAgICAgbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcoc3RkZXJyKTsKKyAgICAgICAgfQorICAgICAgICBsb2dfaGFuZGxlcl9zdGRvdXRlcnIoICZsaCwgcHJpb3JpdHksIHN0ciApOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLworCisgICAgICAgIHJldHVybjsKICAgICB9CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTworICAgIGVsc2UgaWYgKHN0ZGVycl9lbmFibGVkKSB7CisgICAgICAgIHN0ZGVycl9lbmFibGVkID0gMDsKKyAgICAgICAgbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyKCAmbGgsIExPR19JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb2cgaGFuZGxpbmcgZGVmaW5lZCAtIGRpc2FibGluZyBzdGRlcnJcbiIgKTsKKyAgICB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCisgICAgICAgIAogCiAgICAgLyoKICAgICAgKiBTdGFydCBhdCB0aGUgZ2l2ZW4gcHJpb3JpdHksIGFuZCB3b3JrICJ1cHdhcmRzIi4uLi4KQEAgLTEyNzQsMjUgKzE0MjAsMTEgQEAKICAqIEBzZWUgc25tcF92bG9nCiAgKi8KIGludAotI2lmIEhBVkVfU1REQVJHX0gKIHNubXBfbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi0jZWxzZQotc25tcF9sb2codmFfYWxpc3QpCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7CiAgICAgdmFfbGlzdCAgICAgICAgIGFwOwogICAgIGludCAgICAgICAgICAgICByZXQ7Ci0jaWYgSEFWRV9TVERBUkdfSAogICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOwotI2Vsc2UKLSAgICBpbnQgICAgICAgICAgICAgcHJpb3JpdHk7Ci0gICAgY29uc3QgY2hhciAgICAgKmZvcm1hdDsKLSAgICB2YV9zdGFydChhcCk7Ci0KLSAgICBwcmlvcml0eSA9IHZhX2FyZyhhcCwgaW50KTsKLSAgICBmb3JtYXQgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKik7Ci0jZW5kaWYKICAgICByZXQgPSBzbm1wX3Zsb2cocHJpb3JpdHksIGZvcm1hdCwgYXApOwogICAgIHZhX2VuZChhcCk7CiAgICAgcmV0dXJuIChyZXQpOwpAQCAtMTMxOCwxMSArMTQ1MCwxMyBAQAogICAgIH0KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRVhURVJOQUwKIC8qIGV4dGVybmFsIGFjY2VzcyB0byBsb2doX2hlYWQgdmFyaWFibGUgKi8KIG5ldHNubXBfbG9nX2hhbmRsZXIgICoKIGdldF9sb2doX2hlYWQodm9pZCkKIHsKIAlyZXR1cm4gbG9naF9oZWFkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19FWFRFUk5BTCAqLwogCiAvKiogIEB9ICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfb3BlbnNzbC5jIGIvc25tcGxpYi9zbm1wX29wZW5zc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjBlYWE4Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9zbm1wX29wZW5zc2wuYwpAQCAtMCwwICsxLDg3OSBAQAorLyoKKyAqIHNubXBfb3BlbnNzbC5jCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpICYmICFkZWZpbmVkKE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9VVElMKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZnJlZV9hbGwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3RBbHROYW1lcywgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob3BlbnNzbF9odDJuaWQsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9wZW5zc2xfZXJyX2xvZywgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2VydF9kdW1wX25hbWVzLCBuZXRzbm1wX3VudXNlZCkKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oPgorCitzdGF0aWMgdV9jaGFyIGhhdmVfc3RhcnRlZF9hbHJlYWR5ID0gMDsKKworLyoKKyAqIFRoaXMgY29kZSBtZXJlbHkgZG9lcyBvcGVuc3NsIGluaXRpYWxpemF0aW9uIHNvIHRoYXQgbXVsdGlscGUKKyAqIG1vZHVsZXMgYXJlIHNhZmUgdG8gY2FsbCBuZXRzbm1wX2luaXRfb3BlbnNzbCgpIGZvciBib290c3RyYXBwaW5nCisgKiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG90aGVyIGNhbGxlcnMgdGhhdCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgc28uCisgKi8KK3ZvaWQgbmV0c25tcF9pbml0X29wZW5zc2wodm9pZCkgeworCisgICAgLyogYXZvaWQgZHVwbGljYXRlIGNhbGxzICovCisgICAgaWYgKGhhdmVfc3RhcnRlZF9hbHJlYWR5KQorICAgICAgICByZXR1cm47CisgICAgaGF2ZV9zdGFydGVkX2FscmVhZHkgPSAxOworCisgICAgREVCVUdNU0dUTCgoInNubXBfb3BlbnNzbCIsICJpbml0aWFsaXppbmdcbiIpKTsKKworICAgIC8qIEluaXRpYWxpemluZyBPcGVuU1NMICovCisgICAgU1NMX2xpYnJhcnlfaW5pdCgpOworICAgIFNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsKKyAgICBFUlJfbG9hZF9CSU9fc3RyaW5ncygpOworICAgIE9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zKCk7Cit9CisKKy8qKiBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfbmFtZTogZ2V0IHN1YmplY3QgbmFtZSBmaWVsZCBmcm9tIGNlcnQKKyAqIEBpbnRlcm5hbAorICovCisvKiogaW5zdGVhZCBvZiBleHBvc2luZyB0aGlzIGZ1bmN0aW9uLCBtYWtlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGVhY2gKKyAqIGZpZWxkLCBsaWtlIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9jb21tb25OYW1lLCBiZWxvdyAqLworc3RhdGljIGNoYXIgKgorX2NlcnRfZ2V0X25hbWUoWDUwOSAqb2NlcnQsIGludCB3aGljaCwgY2hhciAqKmJ1ZiwgaW50ICpsZW4sIGludCBmbGFncykKK3sKKyAgICBYNTA5X05BTUUgICAgICAgKm9zdWJqX25hbWU7CisgICAgaW50ICAgICAgICAgICAgICBzcGFjZTsKKyAgICBjaGFyICAgICAgICAgICAgKmJ1Zl9wdHI7CisKKyAgICBpZiAoKE5VTEwgPT0gb2NlcnQpIHx8ICgoYnVmICYmICFsZW4pIHx8IChsZW4gJiYgIWJ1ZikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9zdWJqX25hbWUgPSBYNTA5X2dldF9zdWJqZWN0X25hbWUob2NlcnQpOworICAgIGlmIChOVUxMID09IG9zdWJqX25hbWUpIHsKKyAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpjZXJ0Om5hbWUiLCAibm8gc3ViamVjdCBuYW1lIVxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiogc2VlIGlmIGJ1ZiBpcyBiaWcgZW5vdWdoLCBvciBhbGxvY2F0ZSBidWYgaWYgbm9uZSBzcGVjaWZpZWQgKi8KKyAgICBzcGFjZSA9IFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQob3N1YmpfbmFtZSwgd2hpY2gsIE5VTEwsIDApOworICAgIGlmICgtMSA9PSBzcGFjZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgKytzcGFjZTsgLyogZm9yIE5VTCAqLworICAgIGlmIChidWYgJiYgKmJ1ZikgeworICAgICAgICBpZiAoKmxlbiA8IHNwYWNlKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJ1Zl9wdHIgPSAqYnVmOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYnVmX3B0ciA9IGNhbGxvYygxLHNwYWNlKTsKKyAgICAgICAgaWYgKCFidWZfcHRyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNwYWNlID0gWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRChvc3Vial9uYW1lLCB3aGljaCwgYnVmX3B0ciwgc3BhY2UpOworICAgIGlmIChsZW4pCisgICAgICAgICpsZW4gPSBzcGFjZTsKKworICAgIHJldHVybiBidWZfcHRyOworfQorCisvKiogbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3ROYW1lOiBnZXQgc3ViamVjdCBuYW1lIGZpZWxkIGZyb20gY2VydAorICovCitjaGFyICoKK25ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0TmFtZShYNTA5ICpvY2VydCwgY2hhciAqKmJ1ZiwgaW50ICpsZW4pCit7CisgICAgWDUwOV9OQU1FICAgICAgICpvc3Vial9uYW1lOworICAgIGludCAgICAgICAgICAgICAgc3BhY2U7CisgICAgY2hhciAgICAgICAgICAgICpidWZfcHRyOworCisgICAgaWYgKChOVUxMID09IG9jZXJ0KSB8fCAoKGJ1ZiAmJiAhbGVuKSB8fCAobGVuICYmICFidWYpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBvc3Vial9uYW1lID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKG9jZXJ0KTsKKyAgICBpZiAoTlVMTCA9PSBvc3Vial9uYW1lKSB7CisgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6Y2VydDpuYW1lIiwgIm5vIHN1YmplY3QgbmFtZSFcbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGJ1ZikgeworICAgICAgICBidWZfcHRyID0gKmJ1ZjsKKyAgICAgICAgc3BhY2UgPSAqbGVuOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYnVmX3B0ciA9IE5VTEw7CisgICAgICAgIHNwYWNlID0gMDsKKyAgICB9CisgICAgYnVmX3B0ciA9IFg1MDlfTkFNRV9vbmVsaW5lKG9zdWJqX25hbWUsIGJ1Zl9wdHIsIHNwYWNlKTsKKyAgICBpZiAobGVuKQorICAgICAgICAqbGVuID0gc3RybGVuKGJ1Zl9wdHIpOworCisgICAgcmV0dXJuIGJ1Zl9wdHI7Cit9CisKKy8qKiBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfY29tbW9uTmFtZTogZ2V0IGNvbW1vbk5hbWUgZm9yIGNlcnQuCisgKiBpZiBhIHBvaW50ZXIgdG8gYSBidWZmZXIgYW5kIGl0cyBsZW5ndGggYXJlIHNwZWNpZmllZCwgdGhleSB3aWxsIGJlCisgKiB1c2VkLiBvdGhlcndpc2UsIGEgbmV3IGJ1ZmZlciB3aWxsIGJlIGFsbG9jYXRlZCwgd2hpY2ggdGhlIGNhbGxlciB3aWxsCisgKiBiZSByZXNwb25zYmlsZSBmb3IgcmVsZWFzaW5nLgorICovCitjaGFyICoKK25ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9jb21tb25OYW1lKFg1MDkgKm9jZXJ0LCBjaGFyICoqYnVmLCBpbnQgKmxlbikKK3sKKyAgICByZXR1cm4gX2NlcnRfZ2V0X25hbWUob2NlcnQsIE5JRF9jb21tb25OYW1lLCBidWYsIGxlbiwgMCk7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX0RVTVBfTkFNRVMKKy8qKiBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX25hbWU6IGR1bXAgc3ViamVjdCBuYW1lcyBpbiBjZXJ0CisgKi8KK3ZvaWQKK25ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfbmFtZXMoWDUwOSAqb2NlcnQpCit7CisgICAgaW50ICAgICAgICAgICAgICBpLCBvbmlkOworICAgIFg1MDlfTkFNRV9FTlRSWSAqb25hbWVfZW50cnk7CisgICAgWDUwOV9OQU1FICAgICAgICpvc3Vial9uYW1lOworICAgIGNvbnN0IGNoYXIgICAgICAqcHJlZml4X3Nob3J0LCAqcHJlZml4X2xvbmc7CisKKyAgICBpZiAoTlVMTCA9PSBvY2VydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgb3N1YmpfbmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZShvY2VydCk7CisgICAgaWYgKE5VTEwgPT0gb3N1YmpfbmFtZSkgeworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcDpuYW1lcyIsICJubyBzdWJqZWN0IG5hbWUhXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgWDUwOV9OQU1FX2VudHJ5X2NvdW50KG9zdWJqX25hbWUpOyBpKyspIHsKKyAgICAgICAgb25hbWVfZW50cnkgPSBYNTA5X05BTUVfZ2V0X2VudHJ5KG9zdWJqX25hbWUsIGkpOworICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IG9uYW1lX2VudHJ5KTsKKworICAgICAgICBpZiAob25hbWVfZW50cnktPnZhbHVlLT50eXBlICE9IFZfQVNOMV9QUklOVEFCTEVTVFJJTkcpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiogZ2V0IE5JRCAqLworICAgICAgICBvbmlkID0gT0JKX29iajJuaWQob25hbWVfZW50cnktPm9iamVjdCk7CisgICAgICAgIGlmIChvbmlkID09IE5JRF91bmRlZikgeworICAgICAgICAgICAgcHJlZml4X2xvbmcgPSBwcmVmaXhfc2hvcnQgPSAiVU5LTk9XTiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwcmVmaXhfbG9uZyA9IE9CSl9uaWQybG4ob25pZCk7CisgICAgICAgICAgICBwcmVmaXhfc2hvcnQgPSBPQkpfbmlkMnNuKG9uaWQpOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXA6bmFtZXMiLAorICAgICAgICAgICAgICAgICAgICJbJTAyZF0gTklEIHR5cGUgJWQsIEFTTiB0eXBlICVkXG4iLCBpLCBvbmlkLAorICAgICAgICAgICAgICAgICAgIG9uYW1lX2VudHJ5LT52YWx1ZS0+dHlwZSkpOworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcDpuYW1lcyIsICIlcy8lczogJyVzJ1xuIiwgcHJlZml4X2xvbmcsCisgICAgICAgICAgICAgICAgICAgcHJlZml4X3Nob3J0LCBBU04xX1NUUklOR19kYXRhKG9uYW1lX2VudHJ5LT52YWx1ZSkpKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX0RVTVBfTkFNRVMgKi8KKworc3RhdGljIGNoYXIgKgorX2NlcnRfZ2V0X2V4dGVuc2lvbihYNTA5X0VYVEVOU0lPTiAgKm9leHQsIGNoYXIgKipidWYsIGludCAqbGVuLCBpbnQgZmxhZ3MpCit7CisgICAgaW50ICAgICAgICAgICAgICBzcGFjZTsKKyAgICBjaGFyICAgICAgICAgICAgKmJ1Zl9wdHIgPSBOVUxMOworICAgIHVfY2hhciAgICAgICAgICAqZGF0YTsKKyAgICBCSU8gICAgICAgICAgICAgKmJpbzsKKyAgICAKKyAgICBpZiAoKE5VTEwgPT0gb2V4dCkgfHwgKChidWYgJiYgIWxlbikgfHwgKGxlbiAmJiAhYnVmKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7CisgICAgaWYgKE5VTEwgPT0gYmlvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGJpbyBmb3IgZXh0ZW5zaW9uXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChYNTA5VjNfRVhUX3ByaW50KGJpbywgb2V4dCwgMCwgMCkgIT0gMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IHByaW50IGV4dGVuc2lvbiFcbiIpOworICAgICAgICBCSU9fdmZyZWUoYmlvKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3BhY2UgPSBCSU9fZ2V0X21lbV9kYXRhKGJpbywgJmRhdGEpOworICAgIGlmIChidWYgJiYgKmJ1ZikgeworICAgICAgICBpZiAoKmxlbiA8IHNwYWNlKSAKKyAgICAgICAgICAgIGJ1Zl9wdHIgPSBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZfcHRyID0gKmJ1ZjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBidWZfcHRyID0gY2FsbG9jKDEsc3BhY2UgKyAxKTsKKyAgICAKKyAgICBpZiAoIWJ1Zl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggc3BhY2Ugb3IgZXJyb3IgaW4gYWxsb2NhdGlvbiBmb3IgZXh0ZW5zdGlvblxuIik7CisgICAgICAgIEJJT192ZnJlZShiaW8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtY3B5KGJ1Zl9wdHIsIGRhdGEsIHNwYWNlKTsKKyAgICBidWZfcHRyW3NwYWNlXSA9IDA7CisgICAgaWYgKGxlbikKKyAgICAgICAgKmxlbiA9IHNwYWNlOworCisgICAgQklPX3ZmcmVlKGJpbyk7CisKKyAgICByZXR1cm4gYnVmX3B0cjsKK30KKworLyoqIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9leHRlbnNpb246IGdldCBleHRlbnNpb24gZmllbGQgZnJvbSBjZXJ0CisgKiBAaW50ZXJuYWwKKyAqLworLyoqIGluc3RlYWQgb2YgZXhwb3NpbmcgdGhpcyBmdW5jdGlvbiwgbWFrZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoCisgKiBmaWVsZCwgbGlrZSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdEFsdE5hbWUsIGJlbG93ICovCitYNTA5X0VYVEVOU0lPTiAgKgorX2NlcnRfZ2V0X2V4dGVuc2lvbl9hdChYNTA5ICpvY2VydCwgaW50IHBvcywgY2hhciAqKmJ1ZiwgaW50ICpsZW4sIGludCBmbGFncykKK3sKKyAgICBYNTA5X0VYVEVOU0lPTiAgKm9leHQ7CisKKyAgICBpZiAoKE5VTEwgPT0gb2NlcnQpIHx8ICgoYnVmICYmICFsZW4pIHx8IChsZW4gJiYgIWJ1ZikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9leHQgPSBYNTA5X2dldF9leHQob2NlcnQscG9zKTsKKyAgICBpZiAoTlVMTCA9PSBvZXh0KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJleHRlbnNpb24gbnVtYmVyICVkIG5vdCBmb3VuZCFcbiIsIHBvcyk7CisgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfZXh0ZW5zaW9ucyhvY2VydCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBvZXh0OworfQorCisvKiogbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2V4dGVuc2lvbjogZ2V0IGV4dGVuc2lvbiBmaWVsZCBmcm9tIGNlcnQKKyAqIEBpbnRlcm5hbAorICovCisvKiogaW5zdGVhZCBvZiBleHBvc2luZyB0aGlzIGZ1bmN0aW9uLCBtYWtlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGVhY2gKKyAqIGZpZWxkLCBsaWtlIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0QWx0TmFtZSwgYmVsb3cgKi8KK3N0YXRpYyBjaGFyICoKK19jZXJ0X2dldF9leHRlbnNpb25fc3RyX2F0KFg1MDkgKm9jZXJ0LCBpbnQgcG9zLCBjaGFyICoqYnVmLCBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykKK3sKKyAgICBYNTA5X0VYVEVOU0lPTiAgKm9leHQ7CisKKyAgICBpZiAoKE5VTEwgPT0gb2NlcnQpIHx8ICgoYnVmICYmICFsZW4pIHx8IChsZW4gJiYgIWJ1ZikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9leHQgPSBYNTA5X2dldF9leHQob2NlcnQscG9zKTsKKyAgICBpZiAoTlVMTCA9PSBvZXh0KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJleHRlbnNpb24gbnVtYmVyICVkIG5vdCBmb3VuZCFcbiIsIHBvcyk7CisgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfZXh0ZW5zaW9ucyhvY2VydCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBfY2VydF9nZXRfZXh0ZW5zaW9uKG9leHQsIGJ1ZiwgbGVuLCBmbGFncyk7Cit9CisKKy8qKiBfY2VydF9nZXRfZXh0ZW5zaW9uX2lkOiBnZXQgZXh0ZW5zaW9uIGZpZWxkIGZyb20gY2VydAorICogQGludGVybmFsCisgKi8KKy8qKiBpbnN0ZWFkIG9mIGV4cG9zaW5nIHRoaXMgZnVuY3Rpb24sIG1ha2UgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaAorICogZmllbGQsIGxpa2UgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3RBbHROYW1lLCBiZWxvdyAqLworWDUwOV9FWFRFTlNJT04gKgorX2NlcnRfZ2V0X2V4dGVuc2lvbl9pZChYNTA5ICpvY2VydCwgaW50IHdoaWNoLCBjaGFyICoqYnVmLCBpbnQgKmxlbiwgaW50IGZsYWdzKQoreworICAgIGludCBwb3M7CisKKyAgICBpZiAoKE5VTEwgPT0gb2NlcnQpIHx8ICgoYnVmICYmICFsZW4pIHx8IChsZW4gJiYgIWJ1ZikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHBvcyA9IFg1MDlfZ2V0X2V4dF9ieV9OSUQob2NlcnQsd2hpY2gsLTEpOworICAgIGlmIChwb3MgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6Y2VydDpuYW1lIiwgIm5vIGV4dGVuc2lvbiAlZFxuIiwgd2hpY2gpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIF9jZXJ0X2dldF9leHRlbnNpb25fYXQob2NlcnQsIHBvcywgYnVmLCBsZW4sIGZsYWdzKTsKK30KKworLyoqIF9jZXJ0X2dldF9leHRlbnNpb25faWRfc3RyOiBnZXQgZXh0ZW5zaW9uIGZpZWxkIGZyb20gY2VydAorICogQGludGVybmFsCisgKi8KKy8qKiBpbnN0ZWFkIG9mIGV4cG9zaW5nIHRoaXMgZnVuY3Rpb24sIG1ha2UgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaAorICogZmllbGQsIGxpa2UgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3RBbHROYW1lLCBiZWxvdyAqLworc3RhdGljIGNoYXIgKgorX2NlcnRfZ2V0X2V4dGVuc2lvbl9pZF9zdHIoWDUwOSAqb2NlcnQsIGludCB3aGljaCwgY2hhciAqKmJ1ZiwgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCit7CisgICAgaW50IHBvczsKKworICAgIGlmICgoTlVMTCA9PSBvY2VydCkgfHwgKChidWYgJiYgIWxlbikgfHwgKGxlbiAmJiAhYnVmKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcG9zID0gWDUwOV9nZXRfZXh0X2J5X05JRChvY2VydCx3aGljaCwtMSk7CisgICAgaWYgKHBvcyA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpjZXJ0Om5hbWUiLCAibm8gZXh0ZW5zaW9uICVkXG4iLCB3aGljaCkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gX2NlcnRfZ2V0X2V4dGVuc2lvbl9zdHJfYXQob2NlcnQsIHBvcywgYnVmLCBsZW4sIGZsYWdzKTsKK30KKworc3RhdGljIGNoYXIgKgorX2V4dHJhY3Rfb25hbWUoY29uc3QgR0VORVJBTF9OQU1FICpvbmFtZSkKK3sKKyAgICBjaGFyICBpcGJ1Zls2MF0sICpidWYgPSBOVUxMLCAqcnRuID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IG9uYW1lKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN3aXRjaCAoIG9uYW1lLT50eXBlICkgeworICAgICAgICBjYXNlIEdFTl9FTUFJTDoKKyAgICAgICAgY2FzZSBHRU5fRE5TOgorICAgICAgICAgICAgLypjYXNlIEdFTl9VUkk6Ki8KKyAgICAgICAgICAgIEFTTjFfU1RSSU5HX3RvX1VURjgoKHVuc2lnbmVkIGNoYXIqKikmYnVmLCBvbmFtZS0+ZC5pYTUpOworICAgICAgICAgICAgaWYgKGJ1ZikKKyAgICAgICAgICAgICAgICBydG4gPSBzdHJkdXAoYnVmKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR0VOX0lQQUREOgorICAgICAgICAgICAgaWYgKG9uYW1lLT5kLmlQQWRkcmVzcy0+bGVuZ3RoID09IDQpIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGlwYnVmLCAiJWQuJWQuJWQuJWQiLCBvbmFtZS0+ZC5pUEFkZHJlc3MtPmRhdGFbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICBvbmFtZS0+ZC5pUEFkZHJlc3MtPmRhdGFbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICBvbmFtZS0+ZC5pUEFkZHJlc3MtPmRhdGFbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICBvbmFtZS0+ZC5pUEFkZHJlc3MtPmRhdGFbM10pOworICAgICAgICAgICAgICAgIHJ0biA9IHN0cmR1cChpcGJ1Zik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgob25hbWUtPmQuaVBBZGRyZXNzLT5sZW5ndGggPT0gMTYpIHx8CisgICAgICAgICAgICAgICAgICAgICAob25hbWUtPmQuaVBBZGRyZXNzLT5sZW5ndGggPT0gMjApKSB7CisgICAgICAgICAgICAgICAgY2hhciAqcG9zID0gaXBidWY7CisgICAgICAgICAgICAgICAgaW50ICAgajsKKyAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBvbmFtZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3MrKyA9IFZBTDJIRVgob25hbWUtPmQuaVBBZGRyZXNzLT5kYXRhW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgKnBvcysrID0gJzonOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcG9zID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBydG4gPSBzdHJkdXAoaXBidWYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX1dBUk5JTkcsICJ1bmV4cGVjdGVkIGlwIGFkZHIgbGVuZ3RoICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbmFtZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aCkpOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6Y2VydDpzYW4iLCAidW5rbm93bi91bnN1cHBvcnRlZCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbmFtZS0+dHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIERFQlVHTVNHVCgoIjk6b3BlbnNzbDpjZXJ0OnNhbiIsICJzYW49JXNcbiIsIGJ1ZikpOworICAgIGlmIChidWYpCisgICAgICAgIE9QRU5TU0xfZnJlZShidWYpOworCisgICAgcmV0dXJuIHJ0bjsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09QRU5TU0xfQ0VSVF9HRVRfU1VCSkVDVEFMVE5BTUVTCisvKiogbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3RBbHROYW1lOiBnZXQgc3ViamVjdEFsdE5hbWUgZm9yIGNlcnQuCisgKiBpZiBhIHBvaW50ZXIgdG8gYSBidWZmZXIgYW5kIGl0cyBsZW5ndGggYXJlIHNwZWNpZmllZCwgdGhleSB3aWxsIGJlCisgKiB1c2VkLiBvdGhlcndpc2UsIGEgbmV3IGJ1ZmZlciB3aWxsIGJlIGFsbG9jYXRlZCwgd2hpY2ggdGhlIGNhbGxlciB3aWxsCisgKiBiZSByZXNwb25zYmlsZSBmb3IgcmVsZWFzaW5nLgorICovCitjaGFyICoKK25ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0QWx0TmFtZXMoWDUwOSAqb2NlcnQsIGNoYXIgKipidWYsIGludCAqbGVuKQoreworICAgIHJldHVybiBfY2VydF9nZXRfZXh0ZW5zaW9uX2lkX3N0cihvY2VydCwgTklEX3N1YmplY3RfYWx0X25hbWUsIGJ1ZiwgbGVuLCAwKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09QRU5TU0xfQ0VSVF9HRVRfU1VCSkVDVEFMVE5BTUVTICovCisKK3ZvaWQKK25ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfZXh0ZW5zaW9ucyhYNTA5ICpvY2VydCkKK3sKKyAgICBYNTA5X0VYVEVOU0lPTiAgKmV4dGVuc2lvbjsKKyAgICBjb25zdCBjaGFyICAgICAgKmV4dGVuc2lvbl9uYW1lOworICAgIGNoYXIgICAgICAgICAgICAgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmJ1Zl9wdHIgPSBidWYsICpzdHIsICpsZjsKKyAgICBpbnQgICAgICAgICAgICAgIGksIG51bV9leHRlbnNpb25zLCBidWZfbGVuLCBuaWQ7CisKKyAgICBpZiAoTlVMTCA9PSBvY2VydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdJRigiOTpjZXJ0OmR1bXAiKSAKKyAgICAgICAgOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOyAvKiBiYWlsIGlmIGRlYnVnIG5vdCBlbmFibGVkICovCisKKyAgICBudW1fZXh0ZW5zaW9ucyA9IFg1MDlfZ2V0X2V4dF9jb3VudChvY2VydCk7CisgICAgaWYgKDAgPT0gbnVtX2V4dGVuc2lvbnMpCisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wIiwgIiAgICAwIGV4dGVuc2lvbnNcbiIpKTsKKyAgICBmb3IoaSA9IDA7IGkgPCBudW1fZXh0ZW5zaW9uczsgaSsrKSB7CisgICAgICAgIGV4dGVuc2lvbiA9IFg1MDlfZ2V0X2V4dChvY2VydCwgaSk7CisgICAgICAgIG5pZCA9IE9CSl9vYmoybmlkKFg1MDlfRVhURU5TSU9OX2dldF9vYmplY3QoZXh0ZW5zaW9uKSk7CisgICAgICAgIGV4dGVuc2lvbl9uYW1lID0gT0JKX25pZDJzbihuaWQpOworICAgICAgICBidWZfbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgICAgIHN0ciA9IF9jZXJ0X2dldF9leHRlbnNpb25fc3RyX2F0KG9jZXJ0LCBpLCAmYnVmX3B0ciwgJmJ1Zl9sZW4sIDApOworICAgICAgICBsZiA9IHN0cmNocihzdHIsICdcbicpOyAvKiBsb29rIGZvciBtdWx0aWxpbmUgc3RyaW5ncyAqLworICAgICAgICBpZiAoTlVMTCAhPSBsZikKKyAgICAgICAgICAgICpsZiA9ICdcMCc7IC8qIG9ubHkgbG9nIGZpcnN0IGxpbmUgb2YgbXVsdGlsaW5lIGhlcmUgKi8KKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXAiLCAiICAgICUyZDogJXMgPSAlc1xuIiwgaSwKKyAgICAgICAgICAgICAgICAgICBleHRlbnNpb25fbmFtZSwgc3RyKSk7CisgICAgICAgIHdoaWxlKGxmKSB7IC8qIGxvZyByZW1haW5pbmcgcGFydHMgb2YgbXVsdGlsaW5lIHN0cmluZyAqLworICAgICAgICAgICAgc3RyID0gKytsZjsKKyAgICAgICAgICAgIGlmICgqc3RyID09ICdcMCcpCisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGxmID0gc3RyY2hyKHN0ciwgJ1xuJyk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBsZikgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAqbGYgPSAnXDAnOworICAgICAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXAiLCAiICAgICAgICAlc1xuIiwgc3RyKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgX2h0bWFwW05TX0hBU0hfTUFYICsgMV0gPSB7CisgICAgMCwgTklEX21kNVdpdGhSU0FFbmNyeXB0aW9uLCBOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLAorICAgIE5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwgTklEX3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uLAorICAgIE5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwgTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uIH07CisKK2ludAorX25pZDJodChpbnQgbmlkKQoreworICAgIGludCBpOworICAgIGZvciAoaT0xOyBpPD0gTlNfSEFTSF9NQVg7ICsraSkgeworICAgICAgICBpZiAobmlkID09IF9odG1hcFtpXSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09QRU5TU0xfSFQyTklECitpbnQKK19odDJuaWQoaW50IGh0KQoreworICAgIGlmICgoaHQgPCAwKSB8fCAoaHQgPiBOU19IQVNIX01BWCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBfaHRtYXBbaHRdOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT1BFTlNTTF9IVDJOSUQgKi8KKworLyoqCisgKiByZXR1cm5zIGFsbG9jYXRlZCBwb2ludGVyIGNhbGxlciBtdXN0IGZyZWUuCisgKi8KK2ludAorbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2hhc2hfdHlwZShYNTA5ICpvY2VydCkKK3sKKyAgICBpZiAoTlVMTCA9PSBvY2VydCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gX25pZDJodChPQkpfb2JqMm5pZChvY2VydC0+c2lnX2FsZy0+YWxnb3JpdGhtKSk7Cit9CisKKy8qKgorICogcmV0dXJucyBhbGxvY2F0ZWQgcG9pbnRlciBjYWxsZXIgbXVzdCBmcmVlLgorICovCitjaGFyICoKK25ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChYNTA5ICpvY2VydCwgaW50IGFsZykKK3sKKyAgICB1X2NoYXIgICAgICAgICAgIGZpbmdlcnByaW50W0VWUF9NQVhfTURfU0laRV07CisgICAgdV9pbnQgICAgICAgICAgICBmaW5nZXJwcmludF9sZW4sIG5pZDsKKyAgICBjb25zdCBFVlBfTUQgICAgKmRpZ2VzdDsKKyAgICBjaGFyICAgICAgICAgICAgKnJlc3VsdCA9IE5VTEw7CisKKyAgICBpZiAoTlVMTCA9PSBvY2VydCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuaWQgPSBPQkpfb2JqMm5pZChvY2VydC0+c2lnX2FsZy0+YWxnb3JpdGhtKTsKKyAgICBERUJVR01TR1QoKCI5Om9wZW5zc2w6ZmluZ2VycHJpbnQiLCAiYWxnICVkLCBjZXJ0IG5pZCAlZCAoJWQpXG4iLCBhbGcsIG5pZCwKKyAgICAgICAgICAgICAgIF9uaWQyaHQobmlkKSkpOworICAgICAgICAKKyAgICBpZiAoKC0xID09IGFsZykgJiYgbmlkKQorICAgICAgICBhbGcgPSBfbmlkMmh0KG5pZCk7CisKKyAgICBzd2l0Y2ggKGFsZykgeworICAgICAgICBjYXNlIE5TX0hBU0hfTUQ1OgorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImhhc2ggdHlwZSBtZDUgbm90IHlldCBzdXBwb3J0ZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgTlNfSEFTSF9OT05FOgorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImhhc2ggdHlwZSBub25lIG5vdCBzdXBwb3J0ZWQuIHVzaW5nIFNIQTFcbiIpOworICAgICAgICAgICAgLyoqIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgIGNhc2UgTlNfSEFTSF9TSEExOgorICAgICAgICAgICAgZGlnZXN0ID0gRVZQX3NoYTEoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgSEFWRV9FVlBfU0hBMjI0CisgICAgICAgIGNhc2UgTlNfSEFTSF9TSEEyMjQ6CisgICAgICAgICAgICBkaWdlc3QgPSBFVlBfc2hhMjI0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5TX0hBU0hfU0hBMjU2OgorICAgICAgICAgICAgZGlnZXN0ID0gRVZQX3NoYTI1NigpOworICAgICAgICAgICAgYnJlYWs7CisKKyNlbmRpZgorI2lmZGVmIEhBVkVfRVZQX1NIQTM4NAorICAgICAgICBjYXNlIE5TX0hBU0hfU0hBMzg0OgorICAgICAgICAgICAgZGlnZXN0ID0gRVZQX3NoYTM4NCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOU19IQVNIX1NIQTUxMjoKKyAgICAgICAgICAgIGRpZ2VzdCA9IEVWUF9zaGE1MTIoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIGhhc2ggYWxnb3JpdGhtICVkXG4iLCBhbGcpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKF9uaWQyaHQobmlkKSAhPSBhbGcpIHsKKyAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpmaW5nZXJwcmludCIsCisgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IGFsZyAlZCBkb2VzIG5vdCBtYXRjaCBjZXJ0IGFsZyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBhbGcsIF9uaWQyaHQobmlkKSkpOworICAgIH0KKyAgICBpZiAoWDUwOV9kaWdlc3Qob2NlcnQsZGlnZXN0LGZpbmdlcnByaW50LCZmaW5nZXJwcmludF9sZW4pKSB7CisgICAgICAgIGJpbmFyeV90b19oZXgoZmluZ2VycHJpbnQsIGZpbmdlcnByaW50X2xlbiwgJnJlc3VsdCk7CisgICAgICAgIGlmIChOVUxMID09IHJlc3VsdCkKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gaGV4aWZ5IGZpbmdlcnByaW50XG4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgREVCVUdNU0dUKCgiOTpvcGVuc3NsOmZpbmdlcnByaW50IiwgImZpbmdlcnByaW50ICVzXG4iLCByZXN1bHQpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJmYWlsZWQgdG8gY29tcHV0ZSBmaW5nZXJwcmludFxuIik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdldCBjb250YWluZXIgb2YgbmV0c25tcF9jZXJ0X21hcCBzdHJ1Y3R1cmVzIGZyb20gYW4gc3NsIGNvbm5lY3Rpb24KKyAqIGNlcnRpZmljYXRlIGNoYWluLgorICovCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX29wZW5zc2xfZ2V0X2NlcnRfY2hhaW4oU1NMICpzc2wpCit7CisgICAgWDUwOSAgICAgICAgICAgICAgICAgICpvY2VydCwgKm9jZXJ0X3RtcDsKKyAgICBTVEFDS19PRihYNTA5KSAgICAgICAgKm9jaGFpbjsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgKmZpbmdlcnByaW50OworICAgIG5ldHNubXBfY29udGFpbmVyICAgICAqY2hhaW5fbWFwOworICAgIG5ldHNubXBfY2VydF9tYXAgICAgICAqY2VydF9tYXA7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICBpOworCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHNzbCAhPSBOVUxMLCBOVUxMKTsKKyAgICAKKyAgICBpZiAoTlVMTCA9PSAob2NlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkpIHsKKyAgICAgICAgLyoqIG5vIHBlZXIgY2VydCAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU1NMIHBlZXIgaGFzIG5vIGNlcnRpZmljYXRlXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIERFQlVHSUYoIjk6Y2VydDpkdW1wIikgeworICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX2V4dGVuc2lvbnMob2NlcnQpOworICAgIH0KKworICAgIC8qCisgICAgICogZ2V0IGZpbmdlcnByaW50IGFuZCBzYXZlIGl0CisgICAgICovCisgICAgZmluZ2VycHJpbnQgPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQob2NlcnQsIC0xKTsKKyAgICBpZiAoTlVMTCA9PSBmaW5nZXJwcmludCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKgorICAgICAqIGFsbG9jYXRlIGNlcnQgbWFwLiBEb24ndCBwYXNzIGluIGZpbmdlcnByaW50LCBzaW5jZSBpdCB3b3VsZCBzdHJkdXAKKyAgICAgKiBpdCBhbmQgd2UndmUgYWxyZWFkeSBnb3QgYSBjb3B5LgorICAgICAqLworICAgIGNlcnRfbWFwID0gbmV0c25tcF9jZXJ0X21hcF9hbGxvYyhOVUxMLCBvY2VydCk7CisgICAgaWYgKE5VTEwgPT0gY2VydF9tYXApIHsKKyAgICAgICAgZnJlZShmaW5nZXJwcmludCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjZXJ0X21hcC0+ZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKKyAgICBjZXJ0X21hcC0+aGFzaFR5cGUgPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfaGFzaF90eXBlKG9jZXJ0KTsKKworICAgIGNoYWluX21hcCA9IG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyX2NyZWF0ZSgwKTsgLyogbm8gZnAgc3ViY29udGFpbmVyICovCisgICAgaWYgKE5VTEwgPT0gY2hhaW5fbWFwKSB7CisgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShjZXJ0X21hcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAKKyAgICBDT05UQUlORVJfSU5TRVJUKGNoYWluX21hcCwgY2VydF9tYXApOworCisgICAgLyoqIGNoZWNrIGZvciBhIGNoYWluIHRvIGEgQ0EgKi8KKyAgICBvY2hhaW4gPSBTU0xfZ2V0X3BlZXJfY2VydF9jaGFpbihzc2wpOworICAgIGlmICgoTlVMTCA9PSBvY2hhaW4pIHx8ICgwID09IHNrX251bSgoY29uc3Qgdm9pZCAqKW9jaGFpbikpKSB7CisgICAgICAgIERFQlVHTVNHVCgoInNzbDpjZXJ0OmNoYWluIiwgInBlZXIgaGFzIG5vIGNlcnQgY2hhaW5cbiIpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGxvb3Agb3ZlciBjaGFpbiwgYWRkaW5nIGZpbmdlcnByaW50IC8gY2VydCBmb3IgZWFjaAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUKCgic3NsOmNlcnQ6Y2hhaW4iLCAiZXhhbWluaW5nIGNlcnQgY2hhaW5cbiIpKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgc2tfbnVtKChjb25zdCB2b2lkICopb2NoYWluKTsgKytpKSB7CisgICAgICAgICAgICBvY2VydF90bXAgPSAoWDUwOSopc2tfdmFsdWUoKGNvbnN0IHZvaWQgKilvY2hhaW4saSk7CisgICAgICAgICAgICBmaW5nZXJwcmludCA9IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChvY2VydF90bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU19IQVNIX1NIQTEpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gZmluZ2VycHJpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjZXJ0X21hcCA9IG5ldHNubXBfY2VydF9tYXBfYWxsb2MoTlVMTCwgb2NlcnQpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gY2VydF9tYXApIHsKKyAgICAgICAgICAgICAgICBmcmVlKGZpbmdlcnByaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNlcnRfbWFwLT5maW5nZXJwcmludCA9IGZpbmdlcnByaW50OworICAgICAgICAgICAgY2VydF9tYXAtPmhhc2hUeXBlID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2hhc2hfdHlwZShvY2VydF90bXApOworCisgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNoYWluX21hcCwgY2VydF9tYXApOworICAgICAgICB9IC8qIGNoYWluIGxvb3AgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgd2UgYnJva2Ugb3V0IG9mIGxvb3AgYmVmb3JlIGZpbmlzaGluZywgY2xlYW4gdXAKKyAgICAgICAgICovCisgICAgICAgIGlmIChpIDwgc2tfbnVtKChjb25zdCB2b2lkICopb2NoYWluKSkgCisgICAgICAgICAgICBDT05UQUlORVJfRlJFRV9BTEwoY2hhaW5fbWFwLCBOVUxMKTsKKyAgICB9IC8qIGdvdCBwZWVyIGNoYWluICovCisKKyAgICBERUJVR01TR1QoKCJzc2w6Y2VydDpjaGFpbiIsICJmb3VuZCAlIiBORVRTTk1QX1BSSXogInUgY2VydHMgaW4gY2hhaW5cbiIsCisgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjaGFpbl9tYXApKSk7CisgICAgaWYgKENPTlRBSU5FUl9TSVpFKGNoYWluX21hcCkgPT0gMCkgeworICAgICAgICBDT05UQUlORVJfRlJFRShjaGFpbl9tYXApOworICAgICAgICBjaGFpbl9tYXAgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBjaGFpbl9tYXA7Cit9CisKKy8qCit0bHN0bUNlcnRTQU5SRkM4MjJOYW1lICJNYXBzIGEgc3ViamVjdEFsdE5hbWUncyByZmM4MjJOYW1lIHRvIGEKKyAgICAgICAgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lLiAgVGhlIGxvY2FsIHBhcnQgb2YgdGhlIHJmYzgyMk5hbWUgaXMKKyAgICAgICAgICAgICAgICAgIHBhc3NlZCB1bmFsdGVyZWQgYnV0IHRoZSBob3N0LXBhcnQgb2YgdGhlIG5hbWUgbXVzdAorICAgICAgICAgICAgICAgICAgYmUgcGFzc2VkIGluIGxvd2VyIGNhc2UuCisgICAgICAgICAgICAgICAgICBFeGFtcGxlIHJmYzgyMk5hbWUgRmllbGQ6ICBGb29CYXJARXhhbXBsZS5DT00KKyAgICAgICAgICAgICAgICAgIGlzIG1hcHBlZCB0byB0bVNlY3VyaXR5TmFtZTogRm9vQmFyQGV4YW1wbGUuY29tIgorCit0bHN0bUNlcnRTQU5ETlNOYW1lICJNYXBzIGEgc3ViamVjdEFsdE5hbWUncyBkTlNOYW1lIHRvIGEKKyAgICAgICAgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lIGFmdGVyIGZpcnN0IGNvbnZlcnRpbmcgaXQgdG8gYWxsCisgICAgICAgICAgICAgICAgICBsb3dlciBjYXNlLiIKKwordGxzdG1DZXJ0U0FOSXBBZGRyZXNzICJNYXBzIGEgc3ViamVjdEFsdE5hbWUncyBpUEFkZHJlc3MgdG8gYQorICAgICAgICAgICAgICAgICAgdG1TZWN1cml0eU5hbWUgYnkgdHJhbnNmb3JtaW5nIHRoZSBiaW5hcnkgZW5jb2RlZAorICAgICAgICAgICAgICAgICAgYWRkcmVzcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgMSkgZm9yIElQdjQgdGhlIHZhbHVlIGlzIGNvbnZlcnRlZCBpbnRvIGEgZGVjaW1hbAorICAgICAgICAgICAgICAgICAgICAgZG90dGVkIHF1YWQgYWRkcmVzcyAoZS5nLiAnMTkyLjAuMi4xJykKKyAgICAgICAgICAgICAgICAgIDIpIGZvciBJUHY2IGFkZHJlc3NlcyB0aGUgdmFsdWUgaXMgY29udmVydGVkIGludG8gYQorICAgICAgICAgICAgICAgICAgICAgMzItY2hhcmFjdGVyIGFsbCBsb3dlcmNhc2UgaGV4YWRlY2ltYWwgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGFueSBjb2xvbiBzZXBhcmF0b3JzLgorCisgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyBsZW5ndGggaXMgdGhlIG1heGltdW0KKyAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCBzdXBwb3J0ZWQgYnkgdGhlIFZpZXctQmFzZWQgQWNjZXNzIENvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgIE1vZGVsIChWQUNNKS4gIE5vdGUgdGhhdCB1c2luZyBib3RoIHRoZSBUcmFuc3BvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNlY3VyaXR5IE1vZGVsJ3Mgc3VwcG9ydCBmb3IgdHJhbnNwb3J0IHByZWZpeGVzCisgICAgICAgICAgICAgICAgICAgICAoc2VlIHRoZSBTTk1QLVRTTS1NSUIncworICAgICAgICAgICAgICAgICAgICAgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXggb2JqZWN0IGZvciBkZXRhaWxzKQorICAgICAgICAgICAgICAgICAgICAgd2lsbCByZXN1bHQgaW4gc2VjdXJpdHlOYW1lIGxlbmd0aHMgdGhhdCBleGNlZWQKKyAgICAgICAgICAgICAgICAgICAgIHdoYXQgVkFDTSBjYW4gaGFuZGxlLiIKKwordGxzdG1DZXJ0U0FOQW55ICJNYXBzIGFueSBvZiB0aGUgZm9sbG93aW5nIGZpZWxkcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgbWFwcGluZyBhbGdvcml0aG1zOgorICAgICAgICAgICAgICAgICAgfCByZmM4MjJOYW1lIHwgdGxzdG1DZXJ0U0FOUkZDODIyTmFtZSB8CisgICAgICAgICAgICAgICAgICB8IGROU05hbWUgICAgfCB0bHN0bUNlcnRTQU5ETlNOYW1lICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgaVBBZGRyZXNzICB8IHRsc3RtQ2VydFNBTklwQWRkcmVzcyAgfAorICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG1hdGNoaW5nIHN1YmplY3RBbHROYW1lIHZhbHVlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgb2YgdGhlIGFib3ZlIHR5cGVzIE1VU1QgYmUgdXNlZCB3aGVuCisgICAgICAgICAgICAgICAgICBkZXJpdmluZyB0aGUgdG1TZWN1cml0eU5hbWUuIgorKi8KK2NoYXIgKgorX2NlcnRfZ2V0X3Nhbl90eXBlKFg1MDkgKm9jZXJ0LCBpbnQgbWFwVHlwZSkKK3sKKyAgICBHRU5FUkFMX05BTUVTICAgICAgKm9uYW1lczsKKyAgICBjb25zdCBHRU5FUkFMX05BTUUgKm9uYW1lID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAgICAgKmJ1ZiA9IE5VTEwsICpsb3dlciA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgICAgICBjb3VudCwgaTsKKyAKKyAgICBvbmFtZXMgPSAoR0VORVJBTF9OQU1FUyAqKVg1MDlfZ2V0X2V4dF9kMmkob2NlcnQsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMICk7CisgICAgaWYgKE5VTEwgPT0gb25hbWVzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGNvdW50ID0gc2tfR0VORVJBTF9OQU1FX251bShvbmFtZXMpOworCisgICAgZm9yIChpPTAgOyBpIDxjb3VudDsgKytpKSAgeworICAgICAgICBvbmFtZSA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShvbmFtZXMsIGkpOworCisgICAgICAgIGlmIChHRU5fRE5TID09IG9uYW1lLT50eXBlKSB7CisgICAgICAgICAgICBpZiAoKFRTTk1fdGxzdG1DZXJ0U0FORE5TTmFtZSA9PSBtYXBUeXBlKSB8fAorICAgICAgICAgICAgICAgIChUU05NX3Rsc3RtQ2VydFNBTkFueSA9PSBtYXBUeXBlKSkgeworICAgICAgICAgICAgICAgIGxvd2VyID0gYnVmID0gX2V4dHJhY3Rfb25hbWUoIG9uYW1lICk7OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEdFTl9JUEFERCA9PSBvbmFtZS0+dHlwZSkgeworICAgICAgICAgICAgaWYgKChUU05NX3Rsc3RtQ2VydFNBTklwQWRkcmVzcyA9PSBtYXBUeXBlKSB8fAorICAgICAgICAgICAgICAgIChUU05NX3Rsc3RtQ2VydFNBTkFueSA9PSBtYXBUeXBlKSkKKyAgICAgICAgICAgICAgICBidWYgPSBfZXh0cmFjdF9vbmFtZShvbmFtZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoR0VOX0VNQUlMID09IG9uYW1lLT50eXBlKSB7CisgICAgICAgICAgICBpZiAoKFRTTk1fdGxzdG1DZXJ0U0FOUkZDODIyTmFtZSA9PSBtYXBUeXBlKSB8fAorICAgICAgICAgICAgICAgIChUU05NX3Rsc3RtQ2VydFNBTkFueSA9PSBtYXBUeXBlKSkgeworICAgICAgICAgICAgICAgIGJ1ZiA9IF9leHRyYWN0X29uYW1lKG9uYW1lKTsKKyAgICAgICAgICAgICAgICBsb3dlciA9IHN0cmNocihidWYsICdAJyk7CisgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gbG93ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpzZWNuYW1lOmV4dHJhY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbWFpbCAlcyBoYXMgbm8gJ0AnIVxuIiwgYnVmKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICArK2xvd2VyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfQorICAgIH0gLyogZm9yIGxvb3AgKi8KKworICAgIGlmIChsb3dlcikKKyAgICAgICAgZm9yICggOyAqbG93ZXI7ICsrbG93ZXIgKQorICAgICAgICAgICAgaWYgKGlzYXNjaWkoKmxvd2VyKSkKKyAgICAgICAgICAgICAgICAqbG93ZXIgPSB0b2xvd2VyKDB4RkYgJiAqbG93ZXIpOworICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6Y2VydDpleHRlbnNpb246c2FuIiwgIiMlZCB0eXBlICVkOiAlc1xuIiwgaSwKKyAgICAgICAgICAgICAgIG9uYW1lID8gb25hbWUtPnR5cGUgOiAtMSwgYnVmID8gYnVmIDogIk5VTEwiKSk7CisKKyAgICByZXR1cm4gYnVmOworfQorCitjaGFyICoKK25ldHNubXBfb3BlbnNzbF9leHRyYWN0X3NlY25hbWUobmV0c25tcF9jZXJ0X21hcCAqY2VydF9tYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9tYXAgKnBlZXJfY2VydCkKK3sKKyAgICBjaGFyICAgICAgICpydG4gPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gY2VydF9tYXApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgREVCVUdNU0dUKCgib3BlbnNzbDpzZWNuYW1lOmV4dHJhY3QiLAorICAgICAgICAgICAgICAgImNoZWNraW5nIHByaW9yaXR5ICVkLCBzYW4gb2YgdHlwZSAlZCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICBjZXJ0X21hcC0+cHJpb3JpdHksIGNlcnRfbWFwLT5tYXBUeXBlLCBwZWVyX2NlcnQtPmZpbmdlcnByaW50KSk7CisKKyAgICBzd2l0Y2goY2VydF9tYXAtPm1hcFR5cGUpIHsKKyAgICAgICAgY2FzZSBUU05NX3Rsc3RtQ2VydFNwZWNpZmllZDoKKyAgICAgICAgICAgIHJ0biA9IHN0cmR1cChjZXJ0X21hcC0+ZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRTTk1fdGxzdG1DZXJ0U0FOUkZDODIyTmFtZToKKyAgICAgICAgY2FzZSBUU05NX3Rsc3RtQ2VydFNBTkROU05hbWU6CisgICAgICAgIGNhc2UgVFNOTV90bHN0bUNlcnRTQU5JcEFkZHJlc3M6CisgICAgICAgIGNhc2UgVFNOTV90bHN0bUNlcnRTQU5Bbnk6CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBwZWVyX2NlcnQpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOnNlY25hbWU6ZXh0cmFjdCIsICJubyBwZWVyIGNlcnQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9tYXAtPmZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydG4gPSBfY2VydF9nZXRfc2FuX3R5cGUocGVlcl9jZXJ0LT5vY2VydCwgY2VydF9tYXAtPm1hcFR5cGUpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gcnRuKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpzZWNuYW1lOmV4dHJhY3QiLCAibm8gc2FuIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJfY2VydC0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVFNOTV90bHN0bUNlcnRDb21tb25OYW1lOgorICAgICAgICAgICAgcnRuID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2NvbW1vbk5hbWUoY2VydF9tYXAtPm9jZXJ0LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2FudCBleHRyYWN0IHNlY25hbWUgZm9yIHVua25vd24gbWFwIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICBjZXJ0X21hcC0+bWFwVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9IC8qIHN3aXRjaCBtYXBUeXBlICovCisKKyAgICBpZiAocnRuKSB7CisgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6c2VjbmFtZTpleHRyYWN0IiwKKyAgICAgICAgICAgICAgICAgICAiZm91bmQgbWFwICVkLCB0eXBlICVkIGZvciAlczogJXNcbiIsIGNlcnRfbWFwLT5wcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICBjZXJ0X21hcC0+bWFwVHlwZSwgcGVlcl9jZXJ0LT5maW5nZXJwcmludCwgcnRuKSk7CisgICAgICAgIGlmIChzdHJsZW4ocnRuKSA+MzIpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6c2VjbmFtZTpleHRyYWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgInNlY05hbWUgbG9uZ2VyIHRoYW4gMzIgY2hhcnMhIGRyb3BwaW5nLi4uXG4iKSk7CisgICAgICAgICAgICBTTk1QX0ZSRUUocnRuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6c2VjbmFtZTpleHRyYWN0IiwKKyAgICAgICAgICAgICAgICAgICAibm8gbWFwIG9mIHR5cGUgJWQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGNlcnRfbWFwLT5tYXBUeXBlLCBwZWVyX2NlcnQtPmZpbmdlcnByaW50KSk7CisgICAgcmV0dXJuIHJ0bjsKK30KKworaW50CituZXRzbm1wX29wZW5zc2xfY2VydF9pc3N1ZWRfYnkoWDUwOSAqaXNzdWVyLCBYNTA5ICpjZXJ0KQoreworICAgIHJldHVybiAoWDUwOV9jaGVja19pc3N1ZWQoaXNzdWVyLCBjZXJ0KSA9PSBYNTA5X1ZfT0spOworfQorCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PUEVOU1NMX0VSUl9MT0cKK3ZvaWQKK25ldHNubXBfb3BlbnNzbF9lcnJfbG9nKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGVycjsKKyAgICBmb3IgKGVyciA9IEVSUl9nZXRfZXJyb3IoKTsgZXJyOyBlcnIgPSBFUlJfZ2V0X2Vycm9yKCkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiJXM6ICVsZFxuIiwgcHJlZml4ID8gcHJlZml4OiAib3BlbnNzbCBlcnJvciIsIGVycik7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJsaWJyYXJ5PSVkLCBmdW5jdGlvbj0lZCwgcmVhc29uPSVkXG4iLAorICAgICAgICAgICAgICAgICBFUlJfR0VUX0xJQihlcnIpLCBFUlJfR0VUX0ZVTkMoZXJyKSwgRVJSX0dFVF9SRUFTT04oZXJyKSk7CisgICAgfQorfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT1BFTlNTTF9FUlJfTE9HICovCisKK3ZvaWQKK25ldHNubXBfb3BlbnNzbF9udWxsX2NoZWNrcyhTU0wgKnNzbCwgaW50ICpudWxsX2F1dGgsIGludCAqbnVsbF9jaXBoZXIpCit7CisgICAgY29uc3QgU1NMX0NJUEhFUiAqY2lwaGVyOworICAgIGNoYXIgICAgICAgICAgIHRtcF9idWZbMTI4XSwgKmNpcGhlcl9hbGcsICphdXRoX2FsZzsKKworICAgIGlmIChudWxsX2F1dGgpCisgICAgICAgICpudWxsX2F1dGggPSAtMTsgLyogdW5rbm93biAqLworICAgIGlmIChudWxsX2NpcGhlcikKKyAgICAgICAgKm51bGxfY2lwaGVyID0gLTE7IC8qIHVua25vd24gKi8KKyAgICBpZiAoTlVMTCA9PSBzc2wpCisgICAgICAgIHJldHVybjsKKworICAgIGNpcGhlciA9IFNTTF9nZXRfY3VycmVudF9jaXBoZXIoc3NsKTsKKyAgICBpZiAoTlVMTCA9PSBjaXBoZXIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNzbDpjaXBoZXIiLCAibm8gY2lwaGVyIHlldFxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNTTF9DSVBIRVJfZGVzY3JpcHRpb24oTkVUU05NUF9SRU1PVkVfQ09OU1QoU1NMX0NJUEhFUiAqLCBjaXBoZXIpLCB0bXBfYnVmLCBzaXplb2YodG1wX2J1ZikpOworICAgIC8qKiBubyBcbiBzaW5jZSB0bXBfYnVmIGFscmVhZHkgaGFzIG9uZSAqLworICAgIERFQlVHTVNHVEwoKCJzc2w6Y2lwaGVyIiwgImN1cnJlbnQgY2lwaGVyOiAlcyIsIHRtcF9idWYpKTsKKworICAgIC8qCisgICAgICogcnVuICJvcGVuc3NsIGNpcGhlcnMgLXYgZU5VTEwiIGFuZCAib3BlbnNzbCBjaXBoZXJzIC12IGFOVUxMIgorICAgICAqIHRvIHNlZSBOVUxMIGVuY3J5cHRpb24vYXV0aGVudGljYXRpb24gYWxnb3JpdGhtcy4gZS5nLgorICAgICAqCisgICAgICogRVhQLUFESC1SQzQtTUQ1IFNTTHYzIEt4PURIKDUxMikgQXU9Tm9uZSBFbmM9UkM0KDQwKSBNYWM9TUQ1ICBleHBvcnQKKyAgICAgKiBOVUxMLVNIQSAgICAgICAgU1NMdjMgS3g9UlNBICAgICBBdT1SU0EgIEVuYz1Ob25lICAgIE1hYz1TSEExCisgICAgICovCisgICAgaWYgKG51bGxfY2lwaGVyKSB7CisgICAgICAgIGNpcGhlcl9hbGcgPSBzdHJzdHIodG1wX2J1ZiwgIkVuYz0iKTsKKyAgICAgICAgaWYgKGNpcGhlcl9hbGcpIHsKKyAgICAgICAgICAgIGNpcGhlcl9hbGcgKz0gNDsKKyAgICAgICAgICAgIGlmIChzdHJuY21wKGNpcGhlcl9hbGcsIk5vbmUiLCA0KSA9PSAwKQorICAgICAgICAgICAgICAgICpudWxsX2NpcGhlciA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKm51bGxfY2lwaGVyID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnVsbF9hdXRoKSB7CisgICAgICAgIGF1dGhfYWxnID0gc3Ryc3RyKHRtcF9idWYsICJBdT0iKTsKKyAgICAgICAgaWYgKGF1dGhfYWxnKSB7CisgICAgICAgICAgICBhdXRoX2FsZyArPSAzOworICAgICAgICAgICAgaWYgKHN0cm5jbXAoYXV0aF9hbGcsIk5vbmUiLCA0KSA9PSAwKQorICAgICAgICAgICAgICAgICpudWxsX2F1dGggPSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpudWxsX2F1dGggPSAwOworICAgICAgICB9CisgICAgfQorfQorCisjZW5kaWYgLyogTkVUU05NUF9VU0VfT1BFTlNTTCAmJiBIQVZFX0xJQlNTTCAmJiAhZGVmaW5lZChORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfVVRJTCkgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMgYi9zbm1wbGliL3NubXBfcGFyc2VfYXJncy5jCmluZGV4IGEwMDM5OTUuLjY4NDJkMGUgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMKKysrIGIvc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYwpAQCAtMzYsMTEgKzM2LDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTUyLDkgKzQ4LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtNjIsNiArNTUsNyBAQAogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KQEAgLTEzMCw4ICsxMjQsMTAgQEAKICAgICAgICAgICAgICIgIC10IFRJTUVPVVRcdFx0c2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgKGluIHNlY29uZHMpXG4iKTsKICAgICBmcHJpbnRmKG91dGYsICJEZWJ1Z2dpbmdcbiIpOwogICAgIGZwcmludGYob3V0ZiwgIiAgLWRcdFx0XHRkdW1wIGlucHV0L291dHB1dCBwYWNrZXRzIGluIGhleGFkZWNpbWFsXG4iKTsKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFQlVHR0lORwogICAgIGZwcmludGYob3V0ZiwKICAgICAgICAgICAgICIgIC1EW1RPS0VOWywuLi5dXVx0dHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgc3BlY2lmaWVkIFRPS0VOc1xuXHRcdFx0ICAgKEFMTCBnaXZlcyBleHRyZW1lbHkgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0KVxuIik7CisjZW5kaWYKICAgICBmcHJpbnRmKG91dGYsICJHZW5lcmFsIG9wdGlvbnNcbiIpOwogICAgIGZwcmludGYob3V0ZiwKICAgICAgICAgICAgICIgIC1tIE1JQlsiIEVOVl9TRVBBUkFUT1IgIi4uLl1cdFx0bG9hZCBnaXZlbiBsaXN0IG9mIE1JQnMgKEFMTCBsb2FkcyBldmVyeXRoaW5nKVxuIik7CkBAIC0xMzksNiArMTM1LDggQEAKICAgICAgICAgICAgICIgIC1NIERJUlsiIEVOVl9TRVBBUkFUT1IgIi4uLl1cdFx0bG9vayBpbiBnaXZlbiBsaXN0IG9mIGRpcmVjdG9yaWVzIGZvciBNSUJzXG4iKTsKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCiAgICAgZnByaW50ZihvdXRmLAorICAgICAgICAgICAgIiAgICAoZGVmYXVsdDogJXMpXG4iLCBuZXRzbm1wX2dldF9taWJfZGlyZWN0b3J5KCkpOworICAgIGZwcmludGYob3V0ZiwKICAgICAgICAgICAgICIgIC1QIE1JQk9QVFNcdFx0VG9nZ2xlIHZhcmlvdXMgZGVmYXVsdHMgY29udHJvbGxpbmcgTUlCIHBhcnNpbmc6XG4iKTsKICAgICBzbm1wX21pYl90b2dnbGVfb3B0aW9uc191c2FnZSgiXHRcdFx0ICAiLCBvdXRmKTsKICNlbmRpZgpAQCAtMTkyLDMxICsxOTAsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqQXBzeiwgY2hhciAqKlhwc3osIGludCBhcmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0ICphcmd2KTsKIAotLyoKLSAqIFRoaXMgbWV0aG9kIGRvZXMgdGhlIHJlYWwgd29yayBmb3Igc25tcF9wYXJzZV9hcmdzLiAgSXQgdGFrZXMgYW4KLSAqIGV4dHJhIGFyZ3VtZW50LCBwcm94eSwgYW5kIHVzZXMgdGhpcyB0byBkZWNpZGUgaG93IHRvIGhhbmRsZSB0aGUgbGFjayBvZgotICogb2YgYSBjb21tdW5pdHkgc3RyaW5nLgotICovCiBpbnQKLXNubXBfcGFyc2VfYXJncyhpbnQgYXJnYywKLSAgICAgICAgICAgICAgICBjaGFyICoqYXJndiwKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBjb25zdCBjaGFyICpsb2NhbE9wdHMsCi0gICAgICAgICAgICAgICAgdm9pZCAoKnByb2MpIChpbnQsIGNoYXIgKmNvbnN0ICosIGludCkpCituZXRzbm1wX3BhcnNlX2FyZ3MoaW50IGFyZ2MsCisgICAgICAgICAgICAgICAgICAgY2hhciAqKmFyZ3YsCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgY29uc3QgY2hhciAqbG9jYWxPcHRzLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwcm9jKSAoaW50LCBjaGFyICpjb25zdCAqLCBpbnQpLAorICAgICAgICAgICAgICAgICAgIGludCBmbGFncykKIHsKICAgICBzdGF0aWMgY2hhcgkgICAqc2Vuc2l0aXZlWzRdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07Ci0gICAgaW50ICAgICAgICAgICAgIGFyZywgc3AgPSAwLCB6ZXJvX3NlbnNpdGl2ZSA9IDEsIHRlc3RjYXNlID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgYXJnLCBzcCA9IDAsIHRlc3RjYXNlID0gMDsKICAgICBjaGFyICAgICAgICAgICAqY3A7CiAgICAgY2hhciAgICAgICAgICAgKkFwc3ogPSBOVUxMOwogICAgIGNoYXIgICAgICAgICAgICpYcHN6ID0gTlVMTDsKICAgICBjaGFyICAgICAgICAgICAqQ3BzeiA9IE5VTEw7CiAgICAgY2hhciAgICAgICAgICAgIE9wdHNbQlVGX1NJWkVdOwotICAgIGludCAgICAgICAgICAgICBsb2dvcHQgPSAwOworICAgIGludCAgICAgICAgICAgICB6ZXJvX3NlbnNpdGl2ZSA9ICEoIGZsYWdzICYgTkVUU05NUF9QQVJTRV9BUkdTX05PWkVSTyApOwogCiAgICAgLyoKICAgICAgKiBpbml0aWFsaXplIHNlc3Npb24gdG8gZGVmYXVsdCB2YWx1ZXMgCiAgICAgICovCiAgICAgc25tcF9zZXNzX2luaXQoc2Vzc2lvbik7Ci0gICAgc3RyY3B5KE9wdHMsICJZOlZoSG06TTpPOkk6UDpEOmR2OnI6dDpjOlo6ZTpFOm46dTpsOng6WDphOkE6cDpUOi06MzpzOlM6TDoiKTsKKyAgICBzdHJjcHkoT3B0cywgIlk6VmhIbTpNOk86STpQOkQ6ZHY6cjp0OmM6WjplOkU6bjp1Omw6eDpYOmE6QTpwOlQ6LTozOkw6Iik7CiAgICAgaWYgKGxvY2FsT3B0cykgewogICAgICAgICBpZiAoc3RybGVuKGxvY2FsT3B0cykgKyBzdHJsZW4oT3B0cykgPj0gc2l6ZW9mKE9wdHMpKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVG9vIG1hbnkgbG9jYWxPcHRzIGluIHNubXBfcGFyc2VfYXJncygpXG4iKTsKQEAgLTIyNSwxNCArMjE5LDYgQEAKICAgICAgICAgc3RyY2F0KE9wdHMsIGxvY2FsT3B0cyk7CiAgICAgfQogCi0gICAgaWYgKHN0cmNtcChhcmd2WzBdLCAic25tcGQtdHJhcHNlc3MiKSA9PSAwIHx8Ci0Jc3RyY21wKGFyZ3ZbMF0sICJzbm1wZC1wcm94eSIpICAgID09IDApIHsKLQkvKiAgRG9uJ3Qgd29ycnkgYWJvdXQgemVyb2luZyBzZW5zaXRpdmUgcGFyYW1ldGVycyBhcyB0aGV5IGFyZSBub3QKLQkgICAgb24gdGhlIGNvbW1hbmQgbGluZSBhbnl3YXkgKGNhbGxlZCBmcm9tIGludGVybmFsIGNvbmZpZy1saW5lCi0JICAgIGhhbmRsZXIpLiAgKi8KLQl6ZXJvX3NlbnNpdGl2ZSA9IDA7Ci0gICAgfQotCiAgICAgLyoKICAgICAgKiBnZXQgdGhlIG9wdGlvbnMgCiAgICAgICovCkBAIC0yNDcsMTEgKzIzMywxMSBAQAogICAgICAgICBzd2l0Y2ggKGFyZykgewogICAgICAgICBjYXNlICctJzoKICAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKG9wdGFyZywgImhlbHAiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAidmVyc2lvbiIpID09IDApIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTkVULVNOTVAgdmVyc2lvbjogJXNcbiIsbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBoYW5kbGVfbG9uZ19vcHQob3B0YXJnKTsKQEAgLTI1OSwxNyArMjQ1LDE3IEBACiAKICAgICAgICAgY2FzZSAnVic6CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5FVC1TTk1QIHZlcnNpb246ICVzXG4iLCBuZXRzbm1wX2dldF92ZXJzaW9uKCkpOwotICAgICAgICAgICAgcmV0dXJuICgtMik7CisgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQpOwogCiAgICAgICAgIGNhc2UgJ2gnOgotICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdIJzoKICAgICAgICAgICAgIGluaXRfc25tcCgic25tcGFwcCIpOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgdW5kZXJzdG9vZDpcbiIpOwogICAgICAgICAgICAgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoIiAgIik7Ci0gICAgICAgICAgICByZXR1cm4gKC0yKTsKKyAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVCk7CiAKICAgICAgICAgY2FzZSAnWSc6CiAgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19yZW1lbWJlcihvcHRhcmcpOwpAQCAtMjkxLDcgKzI3Nyw3IEBACiAgICAgICAgICAgICBpZiAoY3AgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvdXRwdXQgb3B0aW9uIHBhc3NlZCB0byAtTzogJWMuXG4iLCAKIAkJCSpjcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTMwMCw3ICsyODYsNyBAQAogICAgICAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gaW5wdXQgb3B0aW9uIHBhc3NlZCB0byAtSTogJWMuXG4iLAogCQkJKmNwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMzEwLDE0ICsyOTYsMTkgQEAKICAgICAgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBwYXJzaW5nIG9wdGlvbiBwYXNzZWQgdG8gLVA6ICVjLlxuIiwgKmNwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KIAogICAgICAgICBjYXNlICdEJzoKKyNpZmRlZiBORVRTTk1QX05PX0RFQlVHR0lORworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEZWJ1ZyBub3QgY29uZmlndXJlZCBpblxuIik7CisgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CisjZWxzZQogICAgICAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKG9wdGFyZyk7CiAgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoMSk7CisjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ2QnOgpAQCAtMzQ0LDM1ICszMzUsNzAgQEAKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHZlcnNpb24gc3BlY2lmaWVkIGFmdGVyIC12IGZsYWc6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgb3B0YXJnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdwJzoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogLXAgb3B0aW9uIGlzIG5vIGxvbmdlciB1c2VkIC0gIik7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNwZWNpZnkgdGhlIHJlbW90ZSBob3N0IGFzIEhPU1Q6UE9SVFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ1QnOgotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiAtVCBvcHRpb24gaXMgbm8gbG9uZ2VyIHVzZWQgLSAiKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic3BlY2lmeSB0aGUgcmVtb3RlIGhvc3QgYXMgVFJBTlNQT1JUOkhPU1RcbiIpOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBsZWZ0c2lkZVtTTk1QX01BWEJVRl9NRURJVU1dLCByaWdodHNpZGVbU05NUF9NQVhCVUZfTUVESVVNXTsKKyAgICAgICAgICAgIGNoYXIgKnRtcGNwLCAqdG1wb3B0OworICAgICAgICAgICAgCisgICAgICAgICAgICAvKiBlbnN1cmUgd2UgaGF2ZSBhIHByb3BlciBhcmd1bWVudCAqLworICAgICAgICAgICAgdG1wb3B0ID0gc3RyZHVwKG9wdGFyZyk7CisgICAgICAgICAgICB0bXBjcCA9IHN0cmNocih0bXBvcHQsICc9Jyk7CisgICAgICAgICAgICBpZiAoIXRtcGNwKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItVCBleHBlY3RzIGEgTkFNRT1WQUxVRSBwYWlyLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnRtcGNwKysgPSAnXDAnOwogCisgICAgICAgICAgICAvKiBjcmVhdGUgdGhlIHRyYW5zcG9ydCBjb25maWcgY29udGFpbmVyIGlmIHRoaXMgaXMgdGhlIGZpcnN0ICovCisgICAgICAgICAgICBpZiAoIXNlc3Npb24tPnRyYW5zcG9ydF9jb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0KCk7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi0+dHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJ0cmFuc3BvcnRfY29uZmlndXJhdGlvbjpmaWZvIik7CisgICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uLT50cmFuc3BvcnRfY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBjb250YWluZXJcbiIpOworICAgICAgICAgICAgICAgICAgICBmcmVlKHRtcG9wdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXNzaW9uLT50cmFuc3BvcnRfY29uZmlndXJhdGlvbi0+Y29tcGFyZSA9CisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKikKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnX2NvbXBhcmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHNldCB0aGUgY29uZmlnICovCisgICAgICAgICAgICBzdHJsY3B5KGxlZnRzaWRlLCB0bXBvcHQsIHNpemVvZihsZWZ0c2lkZSkpOworICAgICAgICAgICAgc3RybGNweShyaWdodHNpZGUsIHRtcGNwLCBzaXplb2YocmlnaHRzaWRlKSk7CisKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi0+dHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcobGVmdHNpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRzaWRlKSk7CisgICAgICAgICAgICBmcmVlKHRtcG9wdCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICBzZXNzaW9uLT50aW1lb3V0ID0gYXRvaShvcHRhcmcpICogMTAwMDAwMEw7Ci0gICAgICAgICAgICBpZiAoc2Vzc2lvbi0+dGltZW91dCA8IDAgfHwgIWlzZGlnaXQob3B0YXJnWzBdKSkgeworICAgICAgICAgICAgc2Vzc2lvbi0+dGltZW91dCA9IChsb25nKShhdG9mKG9wdGFyZykgKiAxMDAwMDAwTCk7CisgICAgICAgICAgICBpZiAoc2Vzc2lvbi0+dGltZW91dCA8PSAwKSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHRpbWVvdXQgaW4gc2Vjb25kcyBhZnRlciAtdCBmbGFnLlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAncic6CiAgICAgICAgICAgICBzZXNzaW9uLT5yZXRyaWVzID0gYXRvaShvcHRhcmcpOwotICAgICAgICAgICAgaWYgKHNlc3Npb24tPnJldHJpZXMgPCAwIHx8ICFpc2RpZ2l0KG9wdGFyZ1swXSkpIHsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uLT5yZXRyaWVzIDwgMCB8fCAhaXNkaWdpdCgodW5zaWduZWQgY2hhcikob3B0YXJnWzBdKSkpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbnVtYmVyIG9mIHJldHJpZXMgYWZ0ZXIgLXIgZmxhZy5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zODQsNyArNDEwLDcgQEAKIAkJICAgIHNwKys7CiAJCX0gZWxzZSB7CiAJCSAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgLWMgZmxhZy5cbiIpOwotCQkgICAgcmV0dXJuIC0xOworCQkgICAgcmV0dXJuIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjsKIAkJfQogCSAgICB9IGVsc2UgewogCQlDcHN6ID0gb3B0YXJnOwpAQCAtMzk0LDE1ICs0MjAsMTQgQEAKICAgICAgICAgY2FzZSAnMyc6CiAJICAgIC8qICBUT0RPOiBUaGlzIG5lZWRzIHRvIHplcm8gdGhpbmdzIHRvby4gICovCiAgICAgICAgICAgICBpZiAoc25tcHYzX29wdGlvbnMob3B0YXJnLCBzZXNzaW9uLCAmQXBzeiwgJlhwc3osIGFyZ2MsIGFyZ3YpIDwgMCl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnTCc6CiAgICAgICAgICAgICBpZiAoc25tcF9sb2dfb3B0aW9ucyhvcHRhcmcsIGFyZ2MsIGFyZ3YpIDwgMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KLQkgICAgbG9nb3B0ID0gMTsKICAgICAgICAgICAgIGJyZWFrOwogCiAjZGVmaW5lIFNOTVBWM19DTURfT1BUSU9OUwpAQCAtNDEyLDcgKzQzNyw3IEBACiAgICAgICAgICAgICBzZXNzaW9uLT5lbmdpbmVCb290cyA9IHN0cnRvdWwob3B0YXJnLCAmY3AsIDEwKTsKICAgICAgICAgICAgIGlmIChlcnJubyB8fCBjcCA9PSBvcHRhcmcpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5lZWQgZW5naW5lIGJvb3RzIHZhbHVlIGFmdGVyIC1aIGZsYWcuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKmNwID09ICcsJykgewogICAgICAgICAgICAgICAgIGNoYXIgKmVuZHB0cjsKQEAgLTQyMCw3ICs0NDUsNyBAQAogICAgICAgICAgICAgICAgIHNlc3Npb24tPmVuZ2luZVRpbWUgPSBzdHJ0b3VsKGNwLCAmZW5kcHRyLCAxMCk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm5vIHx8IGNwID09IGVuZHB0cikgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5lZWQgZW5naW5lIHRpbWUgYWZ0ZXIgXCItWiBlbmdpbmVCb290LFwiLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyoKQEAgLTQzMCwxMSArNDU1LDExIEBACiAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+ZW5naW5lVGltZSA9IHN0cnRvdWwoYXJndltvcHRpbmRdLCAmY3AsIDEwKTsKICAgICAgICAgICAgICAgICBpZiAoZXJybm8gfHwgY3AgPT0gYXJndltvcHRpbmRdKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVlZCBlbmdpbmUgdGltZSBhZnRlciBcIi1aIGVuZ2luZUJvb3RcIi5cbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWVkIGVuZ2luZSB0aW1lIGFmdGVyIFwiLVogZW5naW5lQm9vdFwiLlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTQ0NCwxOCArNDY5LDE4IEBACiAKICAgICAgICAgICAgICAgICBpZiAoZWJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyAtZSBmbGFnLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5CiAgICAgICAgICAgICAgICAgICAgICgmZWJ1ZiwgJmVidWZfbGVuLCAmZW91dF9sZW4sIDEsIG9wdGFyZykpIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgZW5naW5lIElEIHZhbHVlIGFmdGVyIC1lIGZsYWcuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZnJlZShlYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKChlb3V0X2xlbiA8IDUpIHx8IChlb3V0X2xlbiA+IDMyKSkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZW5naW5lIElEIHZhbHVlIGFmdGVyIC1lIGZsYWcuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZnJlZShlYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCA9IGVidWY7CiAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiA9IGVvdXRfbGVuOwpAQCAtNDY4LDE4ICs0OTMsMTggQEAKIAogICAgICAgICAgICAgICAgIGlmIChlYnVmID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIC1FIGZsYWcuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJmVidWYsICZlYnVmX2xlbiwKIAkJCQkJJmVvdXRfbGVuLCAxLCBvcHRhcmcpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIGVuZ2luZSBJRCB2YWx1ZSBhZnRlciAtRSBmbGFnLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZyZWUoZWJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICgoZW91dF9sZW4gPCA1KSB8fCAoZW91dF9sZW4gPiAzMikpIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGVuZ2luZSBJRCB2YWx1ZSBhZnRlciAtRSBmbGFnLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZyZWUoZWJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNlc3Npb24tPmNvbnRleHRFbmdpbmVJRCA9IGVidWY7CiAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+Y29udGV4dEVuZ2luZUlETGVuID0gZW91dF9sZW47CkBAIC01MDAsNyArNTI1LDcgQEAKIAkJICAgIHNwKys7CiAJCX0gZWxzZSB7CiAJCSAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgLXUgZmxhZy5cbiIpOwotCQkgICAgcmV0dXJuIC0xOworCQkgICAgcmV0dXJuIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjsKIAkJfQogCSAgICB9IGVsc2UgewogCQlzZXNzaW9uLT5zZWN1cml0eU5hbWUgPSBvcHRhcmc7CkBAIC01MjcsMTEgKzU1MiwxMiBAQAogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgc2VjdXJpdHkgbGV2ZWwgc3BlY2lmaWVkIGFmdGVyIC1sIGZsYWc6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgb3B0YXJnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJyZWFrOwogCisjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCiAgICAgICAgIGNhc2UgJ2EnOgogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CiAgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAob3B0YXJnLCAiTUQ1IikpIHsKQEAgLTU0Niw3ICs1NzIsNyBAQAogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgc3BlY2lmaWVkIGFmdGVyIC1hIGZsYWc6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgb3B0YXJnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNTcxLDcgKzU5Nyw3IEBACiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgcHJpdmFjeSBwcm90b2NvbCBzcGVjaWZpZWQgYWZ0ZXIgLXggZmxhZzogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRhcmcpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC01ODMsNyArNjA5LDcgQEAKIAkJICAgIHNwKys7CiAJCX0gZWxzZSB7CiAJCSAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgLUEgZmxhZy5cbiIpOwotCQkgICAgcmV0dXJuIC0xOworCQkgICAgcmV0dXJuIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjsKIAkJfQogCSAgICB9IGVsc2UgewogCQlBcHN6ID0gb3B0YXJnOwpAQCAtNTk4LDE2ICs2MjQsMTcgQEAKIAkJICAgIHNwKys7CiAJCX0gZWxzZSB7CiAJCSAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgLVggZmxhZy5cbiIpOwotCQkgICAgcmV0dXJuIC0xOworCQkgICAgcmV0dXJuIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjsKIAkJfQogCSAgICB9IGVsc2UgewogCQlYcHN6ID0gb3B0YXJnOwogCSAgICB9CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFYzX0NNRF9PUFRJT05TICovCisjZW5kaWYgLyogTkVUU05NUF9TRUNNT0RfVVNNICovCiAKICAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6CkBAIC02MTcsOSArNjQ0LDYgQEAKICAgICB9CiAgICAgREVCVUdNU0dUTCgoInNubXBfcGFyc2VfYXJncyIsICJmaW5pc2hlZDogJWQvJWRcbiIsIG9wdGluZCwgYXJnYykpOwogICAgIAotICAgIGlmICghbG9nb3B0KQotCXNubXBfZW5hYmxlX3N0ZGVycmxvZygpOwotCiAgICAgLyoKICAgICAgKiByZWFkIGluIE1JQiBkYXRhYmFzZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc25tcCBsaWJyYXJ5CiAgICAgICovCkBAIC02NTgsNyArNjgyLDcgQEAKIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ2FuJ3QgZGV0ZXJtaW5lIGEgdmFsaWQgU05NUCB2ZXJzaW9uIGZvciB0aGUgc2Vzc2lvblxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQpAQCAtNjY4LDYgKzY5Miw5IEBACiAgICAgICAgIH0KICAgICB9CiAKKyNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KKyAgICAvKiBYWFg6IHRoaXMgc2hvdWxkIGlkZWFsbHkgYmUgbW92ZWQgdG8gc25tcHVzbS5jIHNvbWVob3cgKi8KKwogICAgIC8qCiAgICAgICogbWFrZSBtYXN0ZXIga2V5IGZyb20gcGFzcyBwaHJhc2VzIAogICAgICAqLwpAQCAtNzA2LDcgKzczMyw3IEBACiAgICAgICAgICAgICBzbm1wX3BlcnJvcihhcmd2WzBdKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZ2VuZXJhdGluZyBhIGtleSAoS3UpIGZyb20gdGhlIHN1cHBsaWVkIGF1dGhlbnRpY2F0aW9uIHBhc3MgcGhyYXNlLiBcbiIpOwotICAgICAgICAgICAgcmV0dXJuICgtMik7CisgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUik7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKFhwc3opIHsKQEAgLTc0NSwxNSArNzcyLDE3IEBACiAgICAgICAgICAgICBzbm1wX3BlcnJvcihhcmd2WzBdKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZ2VuZXJhdGluZyBhIGtleSAoS3UpIGZyb20gdGhlIHN1cHBsaWVkIHByaXZhY3kgcGFzcyBwaHJhc2UuIFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gKC0yKTsKKyAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SKTsKICAgICAgICAgfQogICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX1NFQ01PRF9VU00gKi8KKwogICAgIC8qCiAgICAgICogZ2V0IHRoZSBob3N0bmFtZSAKICAgICAgKi8KICAgICBpZiAob3B0aW5kID09IGFyZ2MpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJObyBob3N0bmFtZSBzcGVjaWZpZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICB9CiAgICAgc2Vzc2lvbi0+cGVlcm5hbWUgPSBhcmd2W29wdGluZCsrXTsgLyogaG9zdG5hbWUgKi8KIApAQCAtNzg3LDcgKzgxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPmNvbW11bml0eV9sZW4gPSAwOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTm8gY29tbXVuaXR5IG5hbWUgc3BlY2lmaWVkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICAgICAgfQogCSAgICB9CiAJfSBlbHNlIHsKQEAgLTc5OSwzICs4MjgsMTIgQEAKIAogICAgIHJldHVybiBvcHRpbmQ7CiB9CisKK2ludAorc25tcF9wYXJzZV9hcmdzKGludCBhcmdjLAorICAgICAgICAgICAgICAgIGNoYXIgKiphcmd2LAorICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIGNvbnN0IGNoYXIgKmxvY2FsT3B0cywKKyAgICAgICAgICAgICAgICB2b2lkICgqcHJvYykgKGludCwgY2hhciAqY29uc3QgKiwgaW50KSkKK3sKKyAgICByZXR1cm4gbmV0c25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsIHNlc3Npb24sIGxvY2FsT3B0cywgcHJvYywgMCk7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfc2VjbW9kLmMgYi9zbm1wbGliL3NubXBfc2VjbW9kLmMKaW5kZXggYWVmZThmNi4uOWU2MGE0MiAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX3NlY21vZC5jCisrKyBiL3NubXBsaWIvc25tcF9zZWNtb2QuYwpAQCAtMzAsNyArMzAsOSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogc3RhdGljIHN0cnVjdCBzbm1wX3NlY21vZF9saXN0ICpyZWdpc3RlcmVkX3NlcnZpY2VzID0gTlVMTDsKIApAQCAtNTEsNiArNTMsMTEgQEAKICNpbmNsdWRlICJzbm1wc21faW5pdC5oIgogfQogCit2b2lkCitzaHV0ZG93bl9zZWNtb2Qodm9pZCkKK3sKKyAgICAjaW5jbHVkZSAic25tcHNtX3NodXRkb3duLmgiCit9CiAKIGludAogcmVnaXN0ZXJfc2VjX21vZChpbnQgc2VjbW9kLCBjb25zdCBjaGFyICptb2RuYW1lLApAQCAtOTksNiArMTA2LDggQEAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodW5yZWdpc3Rlcl9zZWNfbW9kLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTlJFR0lTVEVSX1NFQ19NT0QKIGludAogdW5yZWdpc3Rlcl9zZWNfbW9kKGludCBzZWNtb2QpCiB7CkBAIC0xMjEsNiArMTMwLDcgQEAKICAgICAgKi8KICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTlJFR0lTVEVSX1NFQ19NT0QgKi8KIAogdm9pZCAgICAgICAgICAgIAogY2xlYXJfc2VjX21vZCh2b2lkKQpAQCAtMTUzLDYgKzE2MywxOSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKiB0cnkgdG8gcGljayBhIHJlYXNvbmFibGUgc2VjdXJpdHkgbW9kdWxlIGRlZmF1bHQgYmFzZWQgb24gd2hhdCB3YXMKKyAgIGNvbXBpbGVkIGludG8gdGhlIG5ldC1zbm1wIHBhY2thZ2UgKi8KKyNpZmRlZiBVU01fU0VDX01PREVMX05VTUJFUgorI2RlZmluZSBORVRTTk1QX1NFQ01PRF9ERUZBVUxUX01PREVMICBVU01fU0VDX01PREVMX05VTUJFUgorI2VsaWYgZGVmaW5lZChUU01fU0VDX01PREVMX05VTUJFUikKKyNkZWZpbmUgTkVUU05NUF9TRUNNT0RfREVGQVVMVF9NT0RFTCAgVFNNX1NFQ19NT0RFTF9OVU1CRVIKKyNlbGlmIGRlZmluZWQoS1NNX1NFQ19NT0RFTF9OVU1CRVIpCisjZGVmaW5lIE5FVFNOTVBfU0VDTU9EX0RFRkFVTFRfTU9ERUwgIEtTTV9TRUNfTU9ERUxfTlVNQkVSCisjZWxzZQorLyogZWxzZSB3ZSBnaXZlIHVwIGFuZCBsZWF2ZSBpdCBibGFuayAqLworI2RlZmluZSBORVRTTk1QX1NFQ01PRF9ERUZBVUxUX01PREVMICAtMQorI2VuZGlmCisKIHN0YXRpYyBpbnQKIHNldF9kZWZhdWx0X3NlY21vZChpbnQgbWFqb3IsIGludCBtaW5vciwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CkBAIC0xNzIsMTEgKzE5NSwxMSBAQAogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2VjdXJpdHkgbW9kZWwgbmFtZTogJXMuICBGb3JjaW5nIFVTTSBpbnN0ZWFkLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjcHRyKTsKLSAgICAgICAgICAgICAgICBzZXNzLT5zZWN1cml0eU1vZGVsID0gVVNNX1NFQ19NT0RFTF9OVU1CRVI7CisgICAgICAgICAgICAgICAgc2Vzcy0+c2VjdXJpdHlNb2RlbCA9IE5FVFNOTVBfU0VDTU9EX0RFRkFVTFRfTU9ERUw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Vzcy0+c2VjdXJpdHlNb2RlbCA9IFVTTV9TRUNfTU9ERUxfTlVNQkVSOworICAgICAgICAgICAgc2Vzcy0+c2VjdXJpdHlNb2RlbCA9IE5FVFNOTVBfU0VDTU9EX0RFRkFVTFRfTU9ERUw7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9zZXJ2aWNlLmMgYi9zbm1wbGliL3NubXBfc2VydmljZS5jCmluZGV4IDJmNTNiNzYuLjU0Y2I0YWMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9zZXJ2aWNlLmMKKysrIGIvc25tcGxpYi9zbm1wX3NlcnZpY2UuYwpAQCAtMTEsNyArMTEsNyBAQAogewogICAgIGNoYXIqIGl0ZW07CiAgICAgY2hhcioqIHJlczsKLSAgICBjcHRyID0gY29weV9ud29yZChORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIGNwdHIpLCB0bXAsIHRtcGxlbik7CisgICAgY3B0ciA9IGNvcHlfbndvcmRfY29uc3QoY3B0ciwgdG1wLCB0bXBsZW4pOwogICAgIGl0ZW0gPSBzdHJkdXAodG1wKTsKICAgICBpZiAoY3B0cikKICAgICAgICAgcmVzID0gY3JlYXRlX3dvcmRfYXJyYXlfaGVscGVyKGNwdHIsIGlkeCArIDEsIHRtcCwgdG1wbGVuKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICBpZiAocnVuICYmIHN0cmNtcChydW4tPmFwcGxpY2F0aW9uLCBhcHBsaWNhdGlvbikgPT0gMCkgewogICAgICAgaWYgKHJ1bi0+ZG9tYWluICE9IE5VTEwpIHsKICAgICAgICAgICBkZXN0cm95X3dvcmRfYXJyYXkocnVuLT5kb21haW4pOwotCSAgcnVuLT5kb21haW49TlVMTDsKKwkgIHJ1bi0+ZG9tYWluID0gTlVMTDsKIAkgIHJlcyA9IDE7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTEyMCwxMiArMTIwLDggQEAKICAgICB7CiAgICAgICAgIGNoYXIqIGNwID0gY29weV9ud29yZChjcHRyLCBhcHBsaWNhdGlvbiwgbGVuKTsKICAgICAgICAgaWYgKGNwID09IE5VTEwpIHsKLSAgICAgICAgICAgIGNoYXIgdG1wYnVmW1NUUklOR01BWF07Ci0gICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAgICAgIk5vIGRvbWFpbihzKSBpbiByZWdpc3RyYXRpb24gb2YgZGVmRG9tYWluIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbik7Ci0gICAgICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZikgLSAxXSA9ICdcMCc7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiTm8gZG9tYWluKHMpIGluIHJlZ2lzdHJhdGlvbiBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmRG9tYWluIFwiJXNcIiIsIGFwcGxpY2F0aW9uKTsKICAgICAgICAgICAgIGZyZWUoYXBwbGljYXRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zMjAsMjIgKzMxNiwxNSBAQAogICAgIHsKIAljaGFyKiBjcCA9IGNvcHlfbndvcmQoY3B0ciwgYXBwbGljYXRpb24sIGxlbik7CiAgICAgICAgIGlmIChjcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjaGFyIHRtcGJ1ZltTVFJJTkdNQVhdOwotICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICJObyBkb21haW4gYW5kIHRhcmdldCBpbiByZWdpc3RyYXRpb24gb2YgIgotICAgICAgICAgICAgICAgICAgICAgImRlZlRhcmdldCBcIiVzXCIiLCBhcHBsaWNhdGlvbik7Ci0gICAgICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZikgLSAxXSA9ICdcMCc7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiTm8gZG9tYWluIGFuZCB0YXJnZXQgaW4gcmVnaXN0cmF0aW9uIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZUYXJnZXQgXCIlc1wiIiwgYXBwbGljYXRpb24pOwogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAJY3AgPSBjb3B5X253b3JkKGNwLCBkb21haW4sIGxlbik7CiAgICAgICAgIGlmIChjcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjaGFyIHRtcGJ1ZltTVFJJTkdNQVhdOwotICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICJObyB0YXJnZXQgaW4gcmVnaXN0cmF0aW9uIG9mIGRlZlRhcmdldCBcIiVzXCIgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLCBkb21haW4pOwotICAgICAgICAgICAgdG1wYnVmW3NpemVvZih0bXBidWYpIC0gMV0gPSAnXDAnOwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIk5vIHRhcmdldCBpbiByZWdpc3RyYXRpb24gb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZlRhcmdldCBcIiVzXCIgXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLCBkb21haW4pOwogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAJY3AgPSBjb3B5X253b3JkKGNwLCB0YXJnZXQsIGxlbik7CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfdHJhbnNwb3J0LmMgYi9zbm1wbGliL3NubXBfdHJhbnNwb3J0LmMKaW5kZXggZmUwYWZmZS4uYWRhNDc4MSAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jCisrKyBiL3NubXBsaWIvc25tcF90cmFuc3BvcnQuYwpAQCAtMSw0ICsxLDggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfU1RSSU5HX0gKQEAgLTEyLDYgKzE2LDggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8Y3R5cGUuaD4KKwogI2lmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgpAQCAtMjIsMTAgKzI4LDE0IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oPgorCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmg+Ci0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTX0RPTUFJTgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0RvbWFpbi5oPgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU0JBU0VfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oPgorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oPgogI2VuZGlmCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfU1REX0RPTUFJTgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oPgpAQCAtMzMsNiArNDMsMTUgQEAKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BfRE9NQUlOCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmg+CiAjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaD4KKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaD4KKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcEFsaWFzRG9tYWluLmg+CisjZW5kaWYKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9JUFhfRE9NQUlOCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmg+CiAjZW5kaWYKQEAgLTUwLDcgKzY5LDEzIEBACiAjZW5kaWYKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0cmFuc3BvcnRfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRvbWFpbl9zdXBwb3J0LCB0cmFuc3BvcnRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRkb21haW5fdHJhbnNwb3J0X29pZCwgdHJhbnNwb3J0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzb2NrYWRkcl9zaXplLCB0cmFuc3BvcnRfYWxsKQogCiAvKgogICogT3VyIGxpc3Qgb2Ygc3VwcG9ydGVkIHRyYW5zcG9ydCBkb21haW5zLiAgCkBAIC04MCwyMCArMTA1LDMyIEBACiBzdGF0aWMgdm9pZCAgICAgbmV0c25tcF90ZG9tYWluX2R1bXAodm9pZCk7CiAKIAorCit2b2lkCitpbml0X3NubXBfdHJhbnNwb3J0KHZvaWQpCit7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNubXAiLCAiZG9udExvYWRIb3N0Q29uZmlnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRE9OVF9MT0FEX0hPU1RfRklMRVMpOworfQorCiAvKgogICogTWFrZSBhIGRlZXAgY29weSBvZiBhbiBuZXRzbm1wX3RyYW5zcG9ydC4gIAogICovCi0KIG5ldHNubXBfdHJhbnNwb3J0ICoKIG5ldHNubXBfdHJhbnNwb3J0X2NvcHkobmV0c25tcF90cmFuc3BvcnQgKnQpCiB7CiAgICAgbmV0c25tcF90cmFuc3BvcnQgKm4gPSBOVUxMOwogCi0gICAgbiA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7CisgICAgaWYgKHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBuID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RyYW5zcG9ydCk7CiAgICAgaWYgKG4gPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbWVtc2V0KG4sIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwogCiAgICAgaWYgKHQtPmRvbWFpbiAhPSBOVUxMKSB7CiAgICAgICAgIG4tPmRvbWFpbiA9IHQtPmRvbWFpbjsKQEAgLTE0NywxMCArMTg0LDE3IEBACiAgICAgbi0+Zl9yZWN2ID0gdC0+Zl9yZWN2OwogICAgIG4tPmZfc2VuZCA9IHQtPmZfc2VuZDsKICAgICBuLT5mX2Nsb3NlID0gdC0+Zl9jbG9zZTsKKyAgICBuLT5mX2NvcHkgPSB0LT5mX2NvcHk7CisgICAgbi0+Zl9jb25maWcgPSB0LT5mX2NvbmZpZzsKICAgICBuLT5mX2ZtdGFkZHIgPSB0LT5mX2ZtdGFkZHI7CiAgICAgbi0+c29jayA9IHQtPnNvY2s7CiAgICAgbi0+ZmxhZ3MgPSB0LT5mbGFnczsKKyAgICBuLT5iYXNlX3RyYW5zcG9ydCA9IG5ldHNubXBfdHJhbnNwb3J0X2NvcHkodC0+YmFzZV90cmFuc3BvcnQpOwogCisgICAgLyogZ2l2ZSB0aGUgdHJhbnNwb3J0IGEgY2hhbmNlIHRvIGRvICJzcGVjaWFsIHRoaW5ncyIgKi8KKyAgICBpZiAodC0+Zl9jb3B5KQorICAgICAgICB0LT5mX2NvcHkodCwgbik7CisgICAgICAgICAgICAgICAgCiAgICAgcmV0dXJuIG47CiB9CiAKQEAgLTE2MiwyMCArMjA2LDEyOCBAQAogICAgIGlmIChOVUxMID09IHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0LT5sb2NhbCAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRSh0LT5sb2NhbCk7Ci0gICAgfQotICAgIGlmICh0LT5yZW1vdGUgIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUodC0+cmVtb3RlKTsKLSAgICB9Ci0gICAgaWYgKHQtPmRhdGEgIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUodC0+ZGF0YSk7Ci0gICAgfQorICAgIFNOTVBfRlJFRSh0LT5sb2NhbCk7CisgICAgU05NUF9GUkVFKHQtPnJlbW90ZSk7CisgICAgU05NUF9GUkVFKHQtPmRhdGEpOworICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodC0+YmFzZV90cmFuc3BvcnQpOworCiAgICAgU05NUF9GUkVFKHQpOwogfQogCisvKgorICogbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcKKyAqCisgKiByZXR1cm5zIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBwZWVyIGFkZHJlc3MuCisgKgorICogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBhbGxvY2F0ZWQgc3RyaW5nLgorICovCitjaGFyICoKK25ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIGNoYXIgICAgICAgICAgICpzdHI7CisKKyAgICBpZiAoTlVMTCA9PSB0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICh0LT5mX2ZtdGFkZHIgIT0gTlVMTCkKKyAgICAgICAgc3RyID0gdC0+Zl9mbXRhZGRyKHQsIGRhdGEsIGxlbik7CisgICAgZWxzZQorICAgICAgICBzdHIgPSBzdHJkdXAoIjxVTktOT1dOPiIpOworCisgICAgcmV0dXJuIHN0cjsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NPQ0tBRERSX1NJWkUKK2ludAorbmV0c25tcF9zb2NrYWRkcl9zaXplKHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisgICAgaWYgKE5VTEwgPT0gc2EpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TT0NLQUREUl9TSVpFICovCisgICAgCitpbnQKK25ldHNubXBfdHJhbnNwb3J0X3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCBkdW1wUGFja2V0LCBkZWJ1Z0xlbmd0aDsKKworICAgIGlmICgoTlVMTCA9PSB0KSB8fCAoTlVMTCA9PSB0LT5mX3NlbmQpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnQ6cGt0OnNlbmQiLCAiTlVMTCB0cmFuc3BvcnQgb3Igc2VuZCBmdW5jdGlvblxuIikpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgZHVtcFBhY2tldCA9IG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VUKTsKKyAgICBkZWJ1Z0xlbmd0aCA9IChTTk1QRVJSX1NVQ0NFU1MgPT0KKyAgICAgICAgICAgICAgICAgICBkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKCJ0cmFuc3BvcnQ6c2VuZCIpKTsKKworICAgIGlmIChkdW1wUGFja2V0IHwgZGVidWdMZW5ndGgpIHsKKyAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhcXVlID8gKm9wYXF1ZSA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZW5ndGggPyAqb2xlbmd0aCA6IDApOworICAgICAgICBpZiAoZGVidWdMZW5ndGgpCisgICAgICAgICAgICBERUJVR01TR1RfTkMoKCJ0cmFuc3BvcnQ6c2VuZCIsIiVsdSBieXRlcyB0byAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoLCBzdHIpKTsKKyAgICAgICAgaWYgKGR1bXBQYWNrZXQpCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICJcblNlbmRpbmcgJWx1IGJ5dGVzIHRvICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWxlbmd0aCwgc3RyKTsKKyAgICAgICAgU05NUF9GUkVFKHN0cik7CisgICAgfQorICAgIGlmIChkdW1wUGFja2V0KQorICAgICAgICB4ZHVtcChwYWNrZXQsIGxlbmd0aCwgIiIpOworCisgICAgcmV0dXJuIHQtPmZfc2VuZCh0LCBwYWNrZXQsIGxlbmd0aCwgb3BhcXVlLCBvbGVuZ3RoKTsKK30KKworaW50CituZXRzbm1wX3RyYW5zcG9ydF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpwYWNrZXQsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgZGVidWdMZW5ndGg7CisKKyAgICBpZiAoKE5VTEwgPT0gdCkgfHwgKE5VTEwgPT0gdC0+Zl9yZWN2KSkgeworICAgICAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0OnJlY3YiLCAiTlVMTCB0cmFuc3BvcnQgb3IgcmVjdiBmdW5jdGlvblxuIikpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgbGVuZ3RoID0gdC0+Zl9yZWN2KHQsIHBhY2tldCwgbGVuZ3RoLCBvcGFxdWUsIG9sZW5ndGgpOworCisgICAgaWYgKGxlbmd0aCA8PTApCisgICAgICAgIHJldHVybiBsZW5ndGg7IC8qIGRvbid0IGxvZyB0aW1lb3V0cy9zb2NrZXQgY2xvc2VkICovCisKKyAgICBkZWJ1Z0xlbmd0aCA9IChTTk1QRVJSX1NVQ0NFU1MgPT0KKyAgICAgICAgICAgICAgICAgICBkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKCJ0cmFuc3BvcnQ6cmVjdiIpKTsKKworICAgIGlmIChkZWJ1Z0xlbmd0aCkgeworICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZyh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFxdWUgPyAqb3BhcXVlIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlbmd0aCA/ICpvbGVuZ3RoIDogMCk7CisgICAgICAgIGlmIChkZWJ1Z0xlbmd0aCkKKyAgICAgICAgICAgIERFQlVHTVNHVF9OQygoInRyYW5zcG9ydDpyZWN2IiwiJWQgYnl0ZXMgZnJvbSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCBzdHIpKTsKKyAgICAgICAgU05NUF9GUkVFKHN0cik7CisgICAgfQorCisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URE9NQUlOX1NVUFBPUlQKIGludAogbmV0c25tcF90ZG9tYWluX3N1cHBvcnQoY29uc3Qgb2lkICogaW5fb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluX2xlbiwKQEAgLTE5NCwzNSArMzQ2LDE3IEBACiAgICAgfQogICAgIHJldHVybiAwOwogfQotCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URE9NQUlOX1NVUFBPUlQgKi8KIAogCiB2b2lkCiBuZXRzbm1wX3Rkb21haW5faW5pdCh2b2lkKQogewogICAgIERFQlVHTVNHVEwoKCJ0ZG9tYWluIiwgIm5ldHNubXBfdGRvbWFpbl9pbml0KCkgY2FsbGVkXG4iKSk7Ci0gICAgbmV0c25tcF91ZHBfY3RvcigpOwotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NURF9ET01BSU4KLSAgICBuZXRzbm1wX3N0ZF9jdG9yKCk7Ci0jZW5kaWYKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BfRE9NQUlOCi0gICAgbmV0c25tcF90Y3BfY3RvcigpOwotI2VuZGlmCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfSVBYX0RPTUFJTgotICAgIG5ldHNubXBfaXB4X2N0b3IoKTsKLSNlbmRpZgotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCi0gICAgbmV0c25tcF91bml4X2N0b3IoKTsKLSNlbmRpZgotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0FBTDVQVkNfRE9NQUlOCi0gICAgbmV0c25tcF9hYWw1cHZjX2N0b3IoKTsKLSNlbmRpZgotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCi0gICAgbmV0c25tcF91ZHA2X2N0b3IoKTsKLSNlbmRpZgotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCi0gICAgbmV0c25tcF90Y3A2X2N0b3IoKTsKLSNlbmRpZgorCisvKiBpbmNsdWRlIHRoZSBjb25maWd1cmUgZ2VuZXJhdGVkIGxpc3Qgb2YgY29uc3RydWN0b3IgY2FsbHMgKi8KKyNpbmNsdWRlICJ0cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmgiCisKICAgICBuZXRzbm1wX3Rkb21haW5fZHVtcCgpOwogfQogCkBAIC0yOTAsNiArNDI0LDggQEAKIAogCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZG9tYWluX3VucmVnaXN0ZXIsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RET01BSU5fVU5SRUdJU1RFUgogaW50CiBuZXRzbm1wX3Rkb21haW5fdW5yZWdpc3RlcihuZXRzbm1wX3Rkb21haW4gKm4pCiB7CkBAIC0zMTAsNiArNDQ2LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERPTUFJTl9VTlJFR0lTVEVSICovCiAKIAogc3RhdGljIG5ldHNubXBfdGRvbWFpbiAqCkBAIC0zMzAsNiArNDY3LDIyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQKK25ldHNubXBfaXNfZnFkbihjb25zdCBjaGFyICp0aGVuYW1lKQoreworICAgIGlmICghdGhlbmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgd2hpbGUoKnRoZW5hbWUpIHsKKyAgICAgICAgaWYgKCp0aGVuYW1lICE9ICcuJyAmJiAhaXN1cHBlcigodW5zaWduZWQgY2hhcikqdGhlbmFtZSkgJiYKKyAgICAgICAgICAgICFpc2xvd2VyKCh1bnNpZ25lZCBjaGFyKSp0aGVuYW1lKSAmJgorICAgICAgICAgICAgIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnRoZW5hbWUpICYmICp0aGVuYW1lICE9ICctJykgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdGhlbmFtZSsrOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKwogLyoKICAqIExvY2F0ZSB0aGUgYXBwcm9wcmlhdGUgdHJhbnNwb3J0IGRvbWFpbiBhbmQgY2FsbCB0aGUgY3JlYXRlIGZ1bmN0aW9uIGZvcgogICogaXQuCkBAIC0zNDQsOCArNDk3LDggQEAKICAgICBjb25zdCBjaGFyICAgICAgICAgKmFkZHIgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqc3BlYyA9IE5VTEw7CiAgICAgaW50ICAgICAgICAgICAgICAgICBhbnlfZm91bmQgPSAwOwotICAgIGV4dGVybiBjaGFyICpjdXJmaWxlbmFtZTsJCS8qIGZyb20gcmVhZF9jb25maWcuYyAqLwotICAgIGNoYXIgICAgICAgICAqcHJldl9jdXJmaWxlbmFtZTsKKyAgICBjaGFyIGJ1ZltTTk1QX01BWFBBVEhdOworICAgIGNoYXIgKipsc3BlYyA9IDA7CiAKICAgICBERUJVR01TR1RMKCgidGRvbWFpbiIsCiAgICAgICAgICAgICAgICAgInRkb21haW5fdHJhbnNwb3J0X2Z1bGwoXCIlc1wiLCBcIiVzXCIsICVkLCBcIiVzXCIsIFwiJXNcIilcbiIsCkBAIC0zNTMsMTIgKzUwNiw2MSBAQAogICAgICAgICAgICAgICAgIGRlZmF1bHRfZG9tYWluID8gZGVmYXVsdF9kb21haW4gOiAiW05JTF0iLAogICAgICAgICAgICAgICAgIGRlZmF1bHRfdGFyZ2V0ID8gZGVmYXVsdF90YXJnZXQgOiAiW05JTF0iKSk7CiAKLSAgICBwcmV2X2N1cmZpbGVuYW1lID0gY3VyZmlsZW5hbWU7CisgICAgLyogc2VlIGlmIHdlIGNhbiBsb2FkIGEgaG9zdC1uYW1lIHNwZWNpZmljIHNldCBvZiBjb25mIGZpbGVzICovCisgICAgaWYgKCFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRE9OVF9MT0FEX0hPU1RfRklMRVMpICYmCisgICAgICAgIG5ldHNubXBfaXNfZnFkbihzdHIpKSB7CisgICAgICAgIHN0YXRpYyBpbnQgaGF2ZV9hZGRlZF9oYW5kbGVyID0gMDsKKyAgICAgICAgY2hhciAqbmV3aG9zdDsKKyAgICAgICAgc3RydWN0IGNvbmZpZ19saW5lICpjb25maWdfaGFuZGxlcnM7CisgICAgICAgIHN0cnVjdCBjb25maWdfZmlsZXMgZmlsZV9uYW1lczsKKyAgICAgICAgY2hhciAqcHJldl9ob3N0bmFtZTsKKworICAgICAgICAvKiByZWdpc3RlciBhICJ0cmFuc3BvcnQiIHNwZWNpZmllciAqLworICAgICAgICBpZiAoIWhhdmVfYWRkZWRfaGFuZGxlcikgeworICAgICAgICAgICAgaGF2ZV9hZGRlZF9oYW5kbGVyID0gMTsKKyAgICAgICAgICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic25tcCIsICJ0cmFuc3BvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfSE9TVE5BTUUpOworICAgICAgICB9CisKKyAgICAgICAgLyogd2Ugc2F2ZSBvbiBzcGVjaWZpYyBzZXR0aW5nIHRoYXQgd2UgZG9uJ3QgYWxsb3cgdG8gY2hhbmdlCisgICAgICAgICAgIGZyb20gb25lIHRyYW5zcG9ydCBjcmVhdGlvbiB0byB0aGUgbmV4dDsgaWUsIHdlIGRvbid0IHdhbnQKKyAgICAgICAgICAgdGhlICJ0cmFuc3BvcnQiIHNwZWNpZmllciB0byBiZSBhIGRlZmF1bHQuICBJdCBzaG91bGQgYmUgYQorICAgICAgICAgICBzaW5nbGUgaW52b2NhdGlvbiB1c2Ugb25seSAqLworICAgICAgICBwcmV2X2hvc3RuYW1lID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9IT1NUTkFNRSk7CisgICAgICAgIGlmIChwcmV2X2hvc3RuYW1lKQorICAgICAgICAgICAgcHJldl9ob3N0bmFtZSA9IHN0cmR1cChwcmV2X2hvc3RuYW1lKTsKKworICAgICAgICAvKiByZWFkIGluIHRoZSBob3N0cy9TVFJJTkcuY29uZiBmaWxlcyAqLworICAgICAgICBjb25maWdfaGFuZGxlcnMgPSByZWFkX2NvbmZpZ19nZXRfaGFuZGxlcnMoInNubXAiKTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKS0xLCAiaG9zdHMvJXMiLCBzdHIpOworICAgICAgICBmaWxlX25hbWVzLmZpbGVIZWFkZXIgPSBidWY7CisgICAgICAgIGZpbGVfbmFtZXMuc3RhcnQgPSBjb25maWdfaGFuZGxlcnM7CisgICAgICAgIGZpbGVfbmFtZXMubmV4dCA9IE5VTEw7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0ZG9tYWluIiwgImNoZWNraW5nIGZvciBob3N0IHNwZWNpZmljIGNvbmZpZyAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgYnVmKSk7CisgICAgICAgIHJlYWRfY29uZmlnX2ZpbGVzX29mX3R5cGUoRUlUSEVSX0NPTkZJRywgJmZpbGVfbmFtZXMpOworCisgICAgICAgIGlmIChOVUxMICE9CisgICAgICAgICAgICAobmV3aG9zdCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9IT1NUTkFNRSkpKSB7CisgICAgICAgICAgICBzdHJsY3B5KGJ1ZiwgbmV3aG9zdCwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgc3RyID0gYnVmOworICAgICAgICB9CisKKyAgICAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0hPU1ROQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9ob3N0bmFtZSk7CisgICAgICAgIFNOTVBfRlJFRShwcmV2X2hvc3RuYW1lKTsKKyAgICB9CiAKICAgICAvKiBGaXJzdCB0cnkgLSBhc3N1bWUgdGhhdCB0aGVyZSBpcyBhIGRvbWFpbiBpbiBzdHIgKGRvbWFpbjp0YXJnZXQpICovCiAKICAgICBpZiAoc3RyICE9IE5VTEwpIHsKLSAgICAgICAgY2hhciAqY3A7CisgICAgICAgIGNvbnN0IGNoYXIgKmNwOwogICAgICAgICBpZiAoKGNwID0gc3RyY2hyKHN0ciwgJzonKSkgIT0gTlVMTCkgewogICAgICAgICAgICAgY2hhciogbXlzdHJpbmcgPSAoY2hhciopbWFsbG9jKGNwICsgMSAtIHN0cik7CiAgICAgICAgICAgICBtZW1jcHkobXlzdHJpbmcsIHN0ciwgY3AgLSBzdHIpOwpAQCAtMzg2LDcgKzU4OCwyMSBAQAogICAgICAgICAgICAgREVCVUdNU0dUTCgoInRkb21haW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSB1c2VyIHNwZWNpZmllZCBkZWZhdWx0IGRvbWFpbiBcIiVzXCJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2RvbWFpbikpOwotICAgICAgICAgICAgbWF0Y2ggPSBmaW5kX3Rkb21haW4oZGVmYXVsdF9kb21haW4pOworICAgICAgICAgICAgaWYgKCFzdHJjaHIoZGVmYXVsdF9kb21haW4sICcsJykpCisgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaW5kX3Rkb21haW4oZGVmYXVsdF9kb21haW4pOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGNvbW1hcyA9IDA7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3AgPSBkZWZhdWx0X2RvbWFpbjsKKyAgICAgICAgICAgICAgICBjaGFyICpkdXAgPSBzdHJkdXAoZGVmYXVsdF9kb21haW4pOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCorK2NwKSBpZiAoKmNwID09ICcsJykgY29tbWFzKys7CisgICAgICAgICAgICAgICAgbHNwZWMgPSBjYWxsb2MoY29tbWFzKzIsIHNpemVvZihjaGFyICopKTsKKyAgICAgICAgICAgICAgICBjb21tYXMgPSAxOworICAgICAgICAgICAgICAgIGxzcGVjWzBdID0gc3RydG9rKGR1cCwgIiwiKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKGxzcGVjW2NvbW1hcysrXSA9IHN0cnRvayhOVUxMLCAiLCIpKSkKKyAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgIHNwZWMgPSAoY29uc3QgY2hhciAqIGNvbnN0ICopbHNwZWM7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzcGVjID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKGFwcGxpY2F0aW9uKTsKICAgICAgICAgICAgIGlmIChzcGVjID09IE5VTEwpIHsKQEAgLTQyNiwxMiArNjQyLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdCBhZGRyZXNzIFwiJXNcIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLT5wcmVmaXhbMF0sIGFkZHIgPyBhZGRyIDogIltOSUxdIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIyID8gYWRkcjIgOiAiW05JTF0iKSk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gtPmZfY3JlYXRlX2Zyb21fdHN0cmluZykKKyAgICAgICAgICAgIGlmIChtYXRjaC0+Zl9jcmVhdGVfZnJvbV90c3RyaW5nKSB7CisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmFuc3BvcnQgZG9tYWluICVzIHVzZXMgZGVwcmVjYXRlZCBmX2NyZWF0ZV9mcm9tX3RzdHJpbmdcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC0+cHJlZml4WzBdKSk7CiAgICAgICAgICAgICAgICAgdCA9IG1hdGNoLT5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcoYWRkciwgbG9jYWwpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHQgPSBtYXRjaC0+Zl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyhhZGRyLCBsb2NhbCwgYWRkcjIpOwogICAgICAgICAgICAgaWYgKHQpIHsKLSAgICAgICAgICAgICAgICBjdXJmaWxlbmFtZSA9IHByZXZfY3VyZmlsZW5hbWU7CisgICAgICAgICAgICAgICAgaWYgKGxzcGVjKSB7CisgICAgICAgICAgICAgICAgICAgIGZyZWUobHNwZWNbMF0pOworICAgICAgICAgICAgICAgICAgICBmcmVlKGxzcGVjKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ0Myw3ICs2NjYsMTAgQEAKICAgICB9CiAgICAgaWYgKCFhbnlfZm91bmQpCiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJObyBzdXBwb3J0IGZvciBhbnkgY2hlY2tlZCB0cmFuc3BvcnQgZG9tYWluXG4iKTsKLSAgICBjdXJmaWxlbmFtZSA9IHByZXZfY3VyZmlsZW5hbWU7CisgICAgaWYgKGxzcGVjKSB7CisgICAgICAgIGZyZWUobHNwZWNbMF0pOworICAgICAgICBmcmVlKGxzcGVjKTsKKyAgICB9CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ1Nyw2ICs2ODMsNyBAQAogfQogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URE9NQUlOX1RSQU5TUE9SVF9PSUQKIG5ldHNubXBfdHJhbnNwb3J0ICoKIG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfb2lkKGNvbnN0IG9pZCAqIGRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkb21fbGVuLApAQCAtNDgxLDYgKzcwOCw3IEBACiAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5vIHN1cHBvcnQgZm9yIHJlcXVlc3RlZCB0cmFuc3BvcnQgZG9tYWluXG4iKTsKICAgICByZXR1cm4gTlVMTDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RET01BSU5fVFJBTlNQT1JUX09JRCAqLwogCiBuZXRzbm1wX3RyYW5zcG9ydCoKIG5ldHNubXBfdHJhbnNwb3J0X29wZW4oY29uc3QgY2hhciogYXBwbGljYXRpb24sIGNvbnN0IGNoYXIqIHN0ciwgaW50IGxvY2FsKQpAQCAtNTQ2LDMgKzc3NCwxOCBAQAogCiAgICAgcmV0dXJuIDA7CiB9CisKK2ludAorbmV0c25tcF90cmFuc3BvcnRfY29uZmlnX2NvbXBhcmUobmV0c25tcF90cmFuc3BvcnRfY29uZmlnICpsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnICpyaWdodCkgeworICAgIHJldHVybiBzdHJjbXAobGVmdC0+a2V5LCByaWdodC0+a2V5KTsKK30KKworbmV0c25tcF90cmFuc3BvcnRfY29uZmlnICoKK25ldHNubXBfdHJhbnNwb3J0X2NyZWF0ZV9jb25maWcoY2hhciAqa2V5LCBjaGFyICp2YWx1ZSkgeworICAgIG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyAqZW50cnkgPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyk7CisgICAgZW50cnktPmtleSA9IHN0cmR1cChrZXkpOworICAgIGVudHJ5LT52YWx1ZSA9IHN0cmR1cCh2YWx1ZSk7CisgICAgcmV0dXJuIGVudHJ5OworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX3ZlcnNpb24uYyBiL3NubXBsaWIvc25tcF92ZXJzaW9uLmMKaW5kZXggNDg2NmRkYS4uN2QzNGMwZCAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX3ZlcnNpb24uYworKysgYi9zbm1wbGliL3NubXBfdmVyc2lvbi5jCkBAIC01LDEwICs1LDEwIEBACiAjaWZuZGVmIFVDRF9DT01QQVRJQkxFCiBzdGF0aWMKICNlbmRpZgotY29uc3QgY2hhciAgICAgKk5ldFNubXBWZXJzaW9uSW5mbyA9ICI1LjQuNCI7Citjb25zdCBjaGFyICAgICAqTmV0U25tcFZlcnNpb25JbmZvID0gUEFDS0FHRV9WRVJTSU9OOwogCiBjb25zdCBjaGFyICAgICAqCi1uZXRzbm1wX2dldF92ZXJzaW9uKCkKK25ldHNubXBfZ2V0X3ZlcnNpb24odm9pZCkKIHsKICAgICByZXR1cm4gTmV0U25tcFZlcnNpb25JbmZvOwogfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wa3NtLmMgYi9zbm1wbGliL3NubXBrc20uYwppbmRleCAzY2UyODAyLi43ZDMwNjEyIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBrc20uYworKysgYi9zbm1wbGliL3NubXBrc20uYwpAQCAtOSwxOSArOSwxMiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzMsNiArNjYsMTIgQEAKICNkZWZpbmUgVElDS0VUX0NMSUVOVCh4KQkoeCktPmVuY19wYXJ0Mi0+Y2xpZW50CiAjZW5kaWYJCQkJLyogTkVUU05NUF9VU0VfS0VSQkVST1NfSEVJTURBTCAqLwogCisjaWYgSEFWRV9FVF9DT01fRVJSX0gKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisjZWxpZiBIQVZFX0NPTV9FUlJfSAorI2luY2x1ZGUgPGNvbV9lcnIuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KQEAgLTEwNyw2ICsxMDYsMjQgQEAKIHN0YXRpYyB2b2lkICAgICBrc21faW5jcmVtZW50X3JlZl9jb3VudChsb25nKTsKIHN0YXRpYyBzdHJ1Y3Qga3NtX2NhY2hlX2VudHJ5ICprc21fZ2V0X2NhY2hlKGxvbmcpOwogCisjaWYgIWRlZmluZWQoSEFWRV9LUkI1X0FVVEhfQ09OX0dFVFNFTkRTVUJLRVkpIC8qIEhlaW1kYWwgKi8KKwora3JiNV9lcnJvcl9jb2RlIGtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleShrcmI1X2NvbnRleHQgY29udGV4dCwKKwkJCQlrcmI1X2F1dGhfY29udGV4dCBhdXRoX2NvbnRleHQsIAorCQkJCWtyYjVfa2V5YmxvY2sgKiprZXlibG9jaykKK3sKKyAgICByZXR1cm4ga3JiNV9hdXRoX2Nvbl9nZXRsb2NhbHN1YmtleShjb250ZXh0LCBhdXRoX2NvbnRleHQsIGtleWJsb2NrKTsKK30KKwora3JiNV9lcnJvcl9jb2RlIGtyYjVfYXV0aF9jb25fZ2V0cmVjdnN1YmtleShrcmI1X2NvbnRleHQgY29udGV4dCwKKwkJCQlrcmI1X2F1dGhfY29udGV4dCBhdXRoX2NvbnRleHQsIAorCQkJCWtyYjVfa2V5YmxvY2sgKiprZXlibG9jaykKK3sKKyAgICByZXR1cm4ga3JiNV9hdXRoX2Nvbl9nZXRyZW1vdGVzdWJrZXkoY29udGV4dCwgYXV0aF9jb250ZXh0LCBrZXlibG9jayk7Cit9CisKKyNlbmRpZgorCiAjZGVmaW5lIEhBU0hTSVpFCTY0CiAKIC8qCkBAIC0yMzksNyArMjU2LDExIEBACiAgICAgZGVmLT5wZHVfZnJlZSA9IGtzbV9mcmVlX3BkdTsKICAgICBkZWYtPnBkdV9jbG9uZSA9IGtzbV9jbG9uZV9wZHU7CiAKLSAgICByZWdpc3Rlcl9zZWNfbW9kKE5FVFNOTVBfS1NNX1NFQ1VSSVRZX01PREVMLCAia3NtIiwgZGVmKTsKKyAgICByZWdpc3Rlcl9zZWNfbW9kKE5FVFNOTVBfU0VDX01PREVMX0tTTSwgImtzbSIsIGRlZik7Cit9CisKK3ZvaWQgc2h1dGRvd25fa3NtKHZvaWQpCit7CiB9CiAKIC8qCkBAIC01ODgsMTUgKzYwOSwxNSBAQAogICAgICAgICAgKi8KIAogICAgICAgICBpZiAoa3NtX3N0YXRlKQotICAgICAgICAgICAgcmV0Y29kZSA9IGtyYjVfYXV0aF9jb25fZ2V0cmVtb3Rlc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsCisgICAgICAgICAgICByZXRjb2RlID0ga3JiNV9hdXRoX2Nvbl9nZXRyZWN2c3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YmtleSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldGNvZGUgPSBrcmI1X2F1dGhfY29uX2dldGxvY2Fsc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsCisgICAgICAgICAgICByZXRjb2RlID0ga3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Via2V5KTsKIAogICAgICAgICBpZiAocmV0Y29kZSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImtzbSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiS1NNOiBrcmI1X2F1dGhfY29uX2dldGxvY2Fsc3Via2V5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiS1NNOiBrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkgZmFpbGVkOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UocmV0Y29kZSkpKTsKICAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbChlcnJvcl9tZXNzYWdlKHJldGNvZGUpKTsKICAgICAgICAgICAgIHJldHZhbCA9IFNOTVBFUlJfS1JCNTsKQEAgLTgyNSwxMyArODQ2LDEzIEBACiAKICAgICBpZiAoIXN1YmtleSkgewogICAgICAgICBpZiAoa3NtX3N0YXRlKQotICAgICAgICAgICAgcmV0Y29kZSA9IGtyYjVfYXV0aF9jb25fZ2V0cmVtb3Rlc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsCisgICAgICAgICAgICByZXRjb2RlID0ga3JiNV9hdXRoX2Nvbl9nZXRyZWN2c3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YmtleSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldGNvZGUgPSBrcmI1X2F1dGhfY29uX2dldGxvY2Fsc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsCisgICAgICAgICAgICByZXRjb2RlID0ga3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Via2V5KTsKICAgICAgICAgaWYgKHJldGNvZGUpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJrc20iLCAia3JiNV9hdXRoX2Nvbl9nZXRsb2NhbHN1YmtleSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgREVCVUdNU0dUTCgoImtzbSIsICJrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkgZmFpbGVkOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UocmV0Y29kZSkpKTsKICAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbChlcnJvcl9tZXNzYWdlKHJldGNvZGUpKTsKICAgICAgICAgICAgIHJldHZhbCA9IFNOTVBFUlJfS1JCNTsKQEAgLTE1MDQsNyArMTUyNSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICByZXRjb2RlID0KLSAgICAgICAgICAgIGtyYjVfYXV0aF9jb25fZ2V0cmVtb3Rlc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsICZzdWJrZXkpOworICAgICAgICAgICAga3JiNV9hdXRoX2Nvbl9nZXRyZWN2c3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsICZzdWJrZXkpOwogCiAgICAgICAgIGlmIChyZXRjb2RlKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgia3NtIiwgIktTTSByZW1vdGUgc3Via2V5IHJldHJpZXZhbCBmYWlsZWQ6ICVzXG4iLApAQCAtMTU2MSw3ICsxNTgyLDcgQEAKICAgICAgICAgREVCVUdNU0dUTCgoImtzbSIsICJLU006IGtyYjVfcmRfcmVwKCkgZGVjb2RlZCBzdWNjZXNzZnVsbHkuXG4iKSk7CiAKICAgICAgICAgcmV0Y29kZSA9Ci0gICAgICAgICAgICBrcmI1X2F1dGhfY29uX2dldGxvY2Fsc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsICZzdWJrZXkpOworICAgICAgICAgICAga3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5KGtjb250ZXh0LCBhdXRoX2NvbnRleHQsICZzdWJrZXkpOwogCiAgICAgICAgIGlmIChyZXRjb2RlKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgia3NtIiwgIlVuYWJsZSB0byByZXRyaWV2ZSBsb2NhbCBzdWJrZXk6ICVzXG4iLApkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wdHNtLmMgYi9zbm1wbGliL3NubXB0c20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmRlNjgyCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9zbm1wdHNtLmMKQEAgLTAsMCArMSw2MjUgQEAKKy8qCisgKiBzbm1wdHNtc20uYyAtLSBJbXBsZW1lbnRzIFJGQyAjNTU5MQorICoKKyAqIFRoaXMgY29kZSBpbXBsZW1lbnRzIGEgc2VjdXJpdHkgbW9kZWwgdGhhdCBhc3N1bWVzIHRoZSBsb2NhbCB1c2VyCisgKiB0aGF0IGV4ZWN1dGVkIHRoZSBhZ2VudCBpcyB0aGUgdXNlciB3aG8ncyBhdHRyaWJ1dGVzIGFyZSBwYXNzZWQgdXAKKyAqIGJ5IHRoZSB0cmFuc3BvcnQgdW5kZXJuZWF0aC4gIFRoZSBSRkMgZGVzY3JpYmluZyB0aGlzIHNlY3VyaXR5CisgKiBtb2RlbCBpcyBSRkM1NTkxLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oPgorCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oPgorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmg+CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmg+CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTU0NUUF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBEVExTU0NUUERvbWFpbi5oPgorI2VuZGlmCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNubXB2M19wcm9iZV9jb250ZXh0RW5naW5lSURfcmZjNTM0MykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19jcmVhdGUpCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIGludCAgICAgIHRzbV9zZXNzaW9uX2luaXQobmV0c25tcF9zZXNzaW9uICopOworc3RhdGljIHZvaWQgICAgIHRzbV9mcmVlX3N0YXRlX3JlZih2b2lkICopOworc3RhdGljIGludCAgICAgIHRzbV9jbG9uZV9wZHUobmV0c25tcF9wZHUgKiwgbmV0c25tcF9wZHUgKik7CitzdGF0aWMgaW50ICAgICAgdHNtX2ZyZWVfcGR1KG5ldHNubXBfcGR1ICpwZHUpOworCit1X2ludCBuZXh0X3Nlc3NfaWQgPSAxOworCisvKiogSW5pdGlhbGl6ZSB0aGUgVFNNIHNlY3VyaXR5IG1vZHVsZSAqLwordm9pZAoraW5pdF90c20odm9pZCkKK3sKKyAgICBzdHJ1Y3Qgc25tcF9zZWNtb2RfZGVmICpkZWY7CisgICAgaW50IHJldDsKKworICAgIGRlZiA9IFNOTVBfTUFMTE9DX1NUUlVDVChzbm1wX3NlY21vZF9kZWYpOworCisgICAgaWYgKCFkZWYpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBtYWxsb2Mgc25tcF9zZWNtb2Qgc3RydWN0LCBub3QgcmVnaXN0ZXJpbmcgVFNNXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZi0+ZW5jb2RlX3JldmVyc2UgPSB0c21fcmdlbmVyYXRlX291dF9tc2c7CisgICAgZGVmLT5kZWNvZGUgPSB0c21fcHJvY2Vzc19pbl9tc2c7CisgICAgZGVmLT5zZXNzaW9uX29wZW4gPSB0c21fc2Vzc2lvbl9pbml0OworICAgIGRlZi0+cGR1X2ZyZWVfc3RhdGVfcmVmID0gdHNtX2ZyZWVfc3RhdGVfcmVmOworICAgIGRlZi0+cGR1X2Nsb25lID0gdHNtX2Nsb25lX3BkdTsKKyAgICBkZWYtPnBkdV9mcmVlID0gdHNtX2ZyZWVfcGR1OworICAgIGRlZi0+cHJvYmVfZW5naW5laWQgPSBzbm1wdjNfcHJvYmVfY29udGV4dEVuZ2luZUlEX3JmYzUzNDM7CisKKyAgICBERUJVR01TR1RMKCgidHNtIiwicmVnaXN0ZXJpbmcgb3Vyc2VsdmVzXG4iKSk7CisgICAgcmV0ID0gcmVnaXN0ZXJfc2VjX21vZChTTk1QX1NFQ19NT0RFTF9UU00sICJ0c20iLCBkZWYpOworICAgIERFQlVHTVNHVEwoKCJ0c20iLCIgcmV0dXJuZWQgJWRcbiIsIHJldCkpOworCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sICJzbm1wIiwgInRzbVVzZVRyYW5zcG9ydFByZWZpeCIsCisJCQkgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RTTV9VU0VfUFJFRklYKTsKK30KKworLyoqIHNodXRkb3duIHRoZSBUU00gc2VjdXJpdHkgbW9kdWxlICovCit2b2lkCitzaHV0ZG93bl90c20odm9pZCkKK3sKK30KKworLyoKKyAqIEluaXRpYWxpemUgc3BlY2lmaWMgc2Vzc2lvbiBpbmZvcm1hdGlvbiAocmlnaHQgbm93LCBqdXN0IHNldCB1cCB0aGluZ3MgdG8KKyAqIG5vdCBkbyBhbiBlbmdpbmVJRCBwcm9iZSkKKyAqLworCitzdGF0aWMgaW50Cit0c21fc2Vzc2lvbl9pbml0KG5ldHNubXBfc2Vzc2lvbiAqIHNlc3MpCit7CisgICAgREVCVUdNU0dUTCgoInRzbSIsCisgICAgICAgICAgICAgICAgIlRTTTogUmVhY2hlZCBvdXIgc2Vzc2lvbiBpbml0aWFsaXphdGlvbiBjYWxsYmFja1xuIikpOworCisgICAgc2Vzcy0+ZmxhZ3MgfD0gU05NUF9GTEFHU19ET05UX1BST0JFOworCisgICAgLyogWFhYOiBsaWtlbHkgbmVlZGVkIGZvciBzb21ldGhpbmc6ICovCisgICAgLyoKKyAgICB0c21zZXNzaW9uID0gc2Vzcy0+c2VjdXJpdHlJbmZvID0KKyAgICBpZiAoIXRzbXNlc3Npb24pCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAqLworCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworLyoqIEZyZWUgb3VyIHN0YXRlIGluZm9ybWF0aW9uICh0aGlzIGlzIG9ubHkgZG9uZSBvbiB0aGUgYWdlbnQgc2lkZSkgKi8KK3N0YXRpYyB2b2lkCit0c21fZnJlZV9zdGF0ZV9yZWYodm9pZCAqcHRyKQoreworICAgIG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2UgKnRzbVJlZjsKKworICAgIGlmIChOVUxMID09IHB0cikKKyAgICAgICAgcmV0dXJuOworCisgICAgdHNtUmVmID0gKG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2UgKikgcHRyOworICAgIC8qIHRoZSB0bVN0YXRlUmVmIGlzIGFsd2F5cyB0YWtlbiBjYXJlIG9mIGJ5IHRoZSBub3JtYWwgUERVLCBzaW5jZSB0aGlzCisgICAgICAgaXMganVzdCBhIHJlZmVyZW5jZSB0byB0aGF0IG9uZSAqLworICAgIC8qIERPTidUIERPOiBTTk1QX0ZSRUUodHNtUmVmLT50bVN0YXRlUmVmKTsgKi8KKyAgICAvKiBTTk1QX0ZSRUUodHNtUmVmKTsgID8gKi8KK30KKworc3RhdGljIGludAordHNtX2ZyZWVfcGR1KG5ldHNubXBfcGR1ICpwZHUpCit7CisgICAgLyogZnJlZSB0aGUgc2VjdXJpdHkgcmVmZXJlbmNlICovCisgICAgaWYgKHBkdS0+c2VjdXJpdHlTdGF0ZVJlZikgeworICAgICAgICB0c21fZnJlZV9zdGF0ZV9yZWYocGR1LT5zZWN1cml0eVN0YXRlUmVmKTsKKyAgICAgICAgcGR1LT5zZWN1cml0eVN0YXRlUmVmID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgUERVIGlzIGNsb25lZCAodG8gaW5jcmVhc2UgcmVmZXJlbmNlIGNvdW50cykgKi8KK3N0YXRpYyBpbnQKK3RzbV9jbG9uZV9wZHUobmV0c25tcF9wZHUgKnBkdSwgbmV0c25tcF9wZHUgKnBkdTIpCit7CisgICAgbmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZSAqb2xkcmVmLCAqbmV3cmVmOworCisgICAgb2xkcmVmID0gcGR1LT5zZWN1cml0eVN0YXRlUmVmOworICAgIGlmICghb2xkcmVmKQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgbmV3cmVmID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlKTsKKyAgICBERUJVR01TR1RMKCgidHNtIiwgImNsb25lZCBhcyBwZHU9JXAsIHJlZj0lcCAob2xkcmVmPSVwKVxuIiwKKyAgICAgICAgICAgIHBkdTIsIG5ld3JlZiwgcGR1Mi0+c2VjdXJpdHlTdGF0ZVJlZikpOworICAgIGlmICghbmV3cmVmKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgCisgICAgbWVtY3B5KG5ld3JlZiwgb2xkcmVmLCBzaXplb2YoKm9sZHJlZikpOworCisgICAgcGR1Mi0+c2VjdXJpdHlTdGF0ZVJlZiA9IG5ld3JlZjsKKworICAgIC8qIHRoZSB0bSBzdGF0ZSByZWZlcmVuY2UgaXMganVzdCBhIGxpbmsgdG8gdGhlIG9uZSBpbiB0aGUgcGR1LAorICAgICAgIHdoaWNoIHdhcyBhbHJlYWR5IGNvcGllZCBieSBzbm1wX2Nsb25lX3BkdSBiZWZvcmUgaGFuZGluZyBpdCB0bworICAgICAgIHVzLiAqLworCisgICAgbmV3cmVmLT50bVN0YXRlUmVmID0gbmV0c25tcF9tZW1kdXAob2xkcmVmLT50bVN0YXRlUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqb2xkcmVmLT50bVN0YXRlUmVmKSk7CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworLyogYXNuLjEgZWFzaW5nIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRTTUJVSUxEX09SX0VSUihmdW4sIGFyZ3MsIG1zZywgZGVzYykgICAgICAgXAorICAgIERFQlVHRFVNUEhFQURFUigic2VuZCIsIGRlc2MpOyBcCisgICAgcmMgPSBmdW4gYXJnczsgICAgICAgICAgICBcCisgICAgREVCVUdJTkRFTlRMRVNTKCk7ICAgICAgICBcCisgICAgaWYgKHJjID09IDApIHsgXAorICAgICAgICBERUJVR01TR1RMKCgidHNtIixtc2cpKTsgXAorICAgICAgICByZXR2YWwgPSBTTk1QRVJSX1RPT19MT05HOyBcCisgICAgICAgIGdvdG8gb3V0ZXJyOyBcCisgICAgfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRzbV9nZW5lcmF0ZV9vdXRfbXNnCisgKgorICogUGFyYW1ldGVyczoKKyAqCShTZWUgbGlzdCBiZWxvdy4uLikKKyAqCisgKiBSZXR1cm5zOgorICoJU05NUEVSUl9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgT24gc3VjY2Vzcy4KKyAqCS4uLiBhbmQgb3RoZXJzCisgKgorICoKKyAqIEdlbmVyYXRlIGFuIG91dGdvaW5nIG1lc3NhZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludAordHNtX3JnZW5lcmF0ZV9vdXRfbXNnKHN0cnVjdCBzbm1wX3NlY21vZF9vdXRnb2luZ19wYXJhbXMgKnBhcm1zKQoreworICAgIHVfY2hhciAgICAgICAgICoqd2hvbGVNc2cgPSBwYXJtcy0+d2hvbGVNc2c7CisgICAgc2l6ZV90CSAgICpvZmZzZXQgPSBwYXJtcy0+d2hvbGVNc2dPZmZzZXQ7CisgICAgaW50IHJjOworICAgIAorICAgIHNpemVfdCAgICAgICAgICp3aG9sZU1zZ0xlbiA9IHBhcm1zLT53aG9sZU1zZ0xlbjsKKyAgICBuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlICp0c21TZWNSZWY7CisgICAgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmOworICAgIGludCAgICAgICAgICAgICB0bVN0YXRlUmVmTG9jYWwgPSAwOworICAgIAorICAgIERFQlVHTVNHVEwoKCJ0c20iLCAiU3RhcnRpbmcgVFNNIHByb2Nlc3NpbmdcbiIpKTsKKworICAgIC8qIGlmIHdlIGhhdmUgdGhpcywgdGhlbiB0aGlzIG1lc3NhZ2UgdG8gYmUgc2VudCBpcyBpbiByZXNwb25zZSB0bworICAgICAgIHNvbWV0aGluZyB0aGF0IGNhbWUgaW4gZWFybGllciBhbmQgdGhlIHRzbVNlY1JlZiB3YXMgY3JlYXRlZCBieQorICAgICAgIHRoZSB0c21fcHJvY2Vzc19pbl9tc2cuICovCisgICAgdHNtU2VjUmVmID0gcGFybXMtPnNlY1N0YXRlUmVmOworICAgIAorICAgIGlmICh0c21TZWNSZWYpIHsKKyAgICAgICAgLyogNC4yLCBzdGVwIDE6IElmIHRoZXJlIGlzIGEgc2VjdXJpdHlTdGF0ZVJlZmVyZW5jZSAoUmVzcG9uc2UKKyAgICAgICAgICAgb3IgUmVwb3J0IG1lc3NhZ2UpLCB0aGVuIHRoaXMgU2VjdXJpdHkgTW9kZWwgdXNlcyB0aGUKKyAgICAgICAgICAgY2FjaGVkIGluZm9ybWF0aW9uIHJhdGhlciB0aGFuIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieQorICAgICAgICAgICB0aGUgQVNJLiAqLworCisgICAgICAgIC8qIDQuMiwgc3RlcCAxOiBFeHRyYWN0IHRoZSB0bVN0YXRlUmVmZXJlbmNlIGZyb20gdGhlCisgICAgICAgICAgIHNlY3VyaXR5U3RhdGVSZWZlcmVuY2UgY2FjaGUuICovCisgICAgICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihOVUxMICE9IHRzbVNlY1JlZi0+dG1TdGF0ZVJlZiwgU05NUEVSUl9HRU5FUlIpOworICAgICAgICB0bVN0YXRlUmVmID0gdHNtU2VjUmVmLT50bVN0YXRlUmVmOworCisgICAgICAgIC8qIDQuMiBzdGVwIDE6IFNldCB0aGUgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsIHRvIHRoZSB2YWx1ZQorICAgICAgICAgICBvZiB0aGUgZXh0cmFjdGVkIHRtVHJhbnNwb3J0U2VjdXJpdHlMZXZlbC4gKi8KKyAgICAgICAgdG1TdGF0ZVJlZi0+cmVxdWVzdGVkU2VjdXJpdHlMZXZlbCA9IHRtU3RhdGVSZWYtPnRyYW5zcG9ydFNlY3VyaXR5TGV2ZWw7CisKKyAgICAgICAgLyogNC4yIHN0ZXAgMTogU2V0IHRoZSB0bVNhbWVTZWN1cml0eSBwYXJhbWV0ZXIgaW4gdGhlCisgICAgICAgICAgIHRtU3RhdGVSZWZlcmVuY2UgY2FjaGUgdG8gdHJ1ZS4gKi8KKyAgICAgICAgdG1TdGF0ZVJlZi0+c2FtZVNlY3VyaXR5ID0gTkVUU05NUF9UTV9VU0VfU0FNRV9TRUNVUklUWTsKKworICAgICAgICAvKiA0LjIgc3RlcCAxOiBUaGUgY2FjaGVkU2VjdXJpdHlEYXRhIGZvciB0aGlzIG1lc3NhZ2UgY2FuCisgICAgICAgICAgIG5vdyBiZSBkaXNjYXJkZWQuICovCisgICAgICAgIFNOTVBfRlJFRShwYXJtcy0+c2VjU3RhdGVSZWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBJZiB0aGVyZSBpcyBubyBzZWN1cml0eVN0YXRlUmVmZXJlbmNlIChlLmcuLCBhCisgICAgICAgICAgIFJlcXVlc3QtdHlwZSBvciBOb3RpZmljYXRpb24gbWVzc2FnZSksIHRoZW4gY3JlYXRlIGEKKyAgICAgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSBjYWNoZS4gKi8KKyAgICAgICAgdG1TdGF0ZVJlZiA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlKTsKKyAgICAgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKE5VTEwgIT0gdG1TdGF0ZVJlZiwgU05NUEVSUl9HRU5FUlIpOworICAgICAgICB0bVN0YXRlUmVmTG9jYWwgPSAxOworCisgICAgICAgIC8qIFhYWDogd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIHRoaXMgcmVhbGx5IGluIG91ciBpbXBsZW1lbnRhdGlvbiAqLworICAgICAgICAvKiA0LjIsIHN0ZXAgMjogU2V0IHRtVHJhbnNwb3J0RG9tYWluIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICB0cmFuc3BvcnREb21haW4sIHRtVHJhbnNwb3J0QWRkcmVzcyB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgdHJhbnNwb3J0QWRkcmVzcyAqLworCisgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBhbmQgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICBzZWN1cml0eUxldmVsLiAqLworICAgICAgICB0bVN0YXRlUmVmLT5yZXF1ZXN0ZWRTZWN1cml0eUxldmVsID0gcGFybXMtPnNlY0xldmVsOworCisgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBTZXQgdGhlIHRyYW5zYWN0aW9uLXNwZWNpZmljIHRtU2FtZVNlY3VyaXR5CisgICAgICAgICAgIHBhcmFtZXRlciB0byBmYWxzZS4gKi8KKyAgICAgICAgdG1TdGF0ZVJlZi0+c2FtZVNlY3VyaXR5ID0gTkVUU05NUF9UTV9TQU1FX1NFQ1VSSVRZX05PVF9SRVFVSVJFRDsKKworICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RTTV9VU0VfUFJFRklYKSkgeworICAgICAgICAgICAgLyogWFhYOiBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBoYXJkLWNvZGVkIGxpc3Qgb2YKKyAgICAgICAgICAgICAgIHN1cHBvcnRlZCB0cmFuc3BvcnRzICovCisgICAgICAgICAgICAvKiA0LjIsIHN0ZXAgMjogSWYgdGhlIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4CisgICAgICAgICAgICAgICBvYmplY3QgaXMgc2V0IHRvIHRydWUsIHRoZW4gdXNlIHRoZSB0cmFuc3BvcnREb21haW4gdG8KKyAgICAgICAgICAgICAgIGxvb2sgdXAgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZml4LiAqLworICAgICAgICAgICAgY29uc3QgY2hhciAqcHJlZml4OworICAgICAgICAgICAgaWYgKHN0cm5jbXAoInNzaDoiLHBhcm1zLT5zZXNzaW9uLT5wZWVybmFtZSw0KSA9PSAwKQorICAgICAgICAgICAgICAgIHByZWZpeCA9ICJzc2g6IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cm5jbXAoImR0bHM6IixwYXJtcy0+c2Vzc2lvbi0+cGVlcm5hbWUsNSkgPT0gMCkKKyAgICAgICAgICAgICAgICBwcmVmaXggPSAiZHRsczoiOworICAgICAgICAgICAgZWxzZSBpZiAoc3RybmNtcCgidGxzOiIscGFybXMtPnNlc3Npb24tPnBlZXJuYW1lLDQpID09IDApCisgICAgICAgICAgICAgICAgcHJlZml4ID0gInRsczoiOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogNC4yLCBzdGVwIDI6IElmIHRoZSBwcmVmaXggbG9va3VwIGZhaWxzIGZvciBhbnkKKyAgICAgICAgICAgICAgICAgICByZWFzb24sIHRoZW4gdGhlIHNubXBUc21Vbmtub3duUHJlZml4ZXMgY291bnRlciBpcworICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGVkLCBhbiBlcnJvciBpbmRpY2F0aW9uIGlzIHJldHVybmVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgIGNhbGxpbmcgbW9kdWxlLCBhbmQgbWVzc2FnZSBwcm9jZXNzaW5nIHN0b3BzLiAqLworICAgICAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RTTV9TTk1QVFNNVU5LTk9XTlBSRUZJWEVTKTsKKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiA0LjIsIHN0ZXAgMjogSWYgdGhlIGxvb2t1cCBzdWNjZWVkcywgYnV0IHRoZXJlIGlzIG5vCisgICAgICAgICAgICAgICBwcmVmaXggaW4gdGhlIHNlY3VyaXR5TmFtZSwgb3IgdGhlIHByZWZpeCByZXR1cm5lZCBkb2VzCisgICAgICAgICAgICAgICBub3QgbWF0Y2ggdGhlIHByZWZpeCBpbiB0aGUgc2VjdXJpdHlOYW1lLCBvciB0aGUgbGVuZ3RoCisgICAgICAgICAgICAgICBvZiB0aGUgcHJlZml4IGlzIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiA0IFVTLUFTQ0lJCisgICAgICAgICAgICAgICBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHRoZW4gdGhlCisgICAgICAgICAgICAgICBzbm1wVHNtSW52YWxpZFByZWZpeGVzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQsIGFuIGVycm9yCisgICAgICAgICAgICAgICBpbmRpY2F0aW9uIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsaW5nIG1vZHVsZSwgYW5kCisgICAgICAgICAgICAgICBtZXNzYWdlIHByb2Nlc3Npbmcgc3RvcHMuICovCisgICAgICAgICAgICBpZiAoc3RyY2hyKHBhcm1zLT5zZWNOYW1lLCAnOicpID09IDAgfHwKKyAgICAgICAgICAgICAgICBzdHJsZW4ocHJlZml4KSsxID49IHBhcm1zLT5zZWNOYW1lTGVuIHx8CisgICAgICAgICAgICAgICAgc3RybmNtcChwYXJtcy0+c2VjTmFtZSwgcHJlZml4LCBzdHJsZW4ocHJlZml4KSkgIT0gMCB8fAorICAgICAgICAgICAgICAgIHBhcm1zLT5zZWNOYW1lW3N0cmxlbihwcmVmaXgpXSAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICAvKiBOb3RlOiBzaW5jZSB3ZSdyZSBhc3NpZ2luZyB0aGUgcHJlZml4ZXMgYWJvdmUgdGhlCisgICAgICAgICAgICAgICAgICAgcHJlZml4IGxlbmd0aHMgYWx3YXlzIG1lZXQgdGhlIDEtNCBjcml0ZXJpYSAqLworICAgICAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RTTV9TTk1QVFNNSU5WQUxJRFBSRUZJWEVTKTsKKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiA0LjIsIHN0ZXAgMjogU3RyaXAgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBwcmVmaXggYW5kCisgICAgICAgICAgICAgICB0cmFpbGluZyAnOicgY2hhcmFjdGVyIChVUy1BU0NJSSAweDNhKSBmcm9tIHRoZQorICAgICAgICAgICAgICAgc2VjdXJpdHlOYW1lLiAgU2V0IHRtU2VjdXJpdHlOYW1lIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgc2VjdXJpdHlOYW1lLiAqLworICAgICAgICAgICAgbWVtY3B5KHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICBwYXJtcy0+c2VjTmFtZSArIHN0cmxlbihwcmVmaXgpICsgMSwKKyAgICAgICAgICAgICAgICAgICBwYXJtcy0+c2VjTmFtZUxlbiAtIHN0cmxlbihwcmVmaXgpIC0gMSk7CisgICAgICAgICAgICB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVMZW4gPSBwYXJtcy0+c2VjTmFtZUxlbiAtIHN0cmxlbihwcmVmaXgpIC0xOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogNC4yLCBzdGVwIDI6IElmIHRoZSBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCBvYmplY3QgaXMKKyAgICAgICAgICAgICAgIHNldCB0byBmYWxzZSwgdGhlbiBzZXQgdG1TZWN1cml0eU5hbWUgdG8gdGhlIHZhbHVlCisgICAgICAgICAgICAgICBvZiBzZWN1cml0eU5hbWUuICovCisgICAgICAgICAgICBtZW1jcHkodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lLCBwYXJtcy0+c2VjTmFtZSwKKyAgICAgICAgICAgICAgICAgICBwYXJtcy0+c2VjTmFtZUxlbik7CisgICAgICAgICAgICB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVMZW4gPSBwYXJtcy0+c2VjTmFtZUxlbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHRydW5jYXRlIHRoZSBzZWN1cml0eSBuYW1lIHdpdGggYSAnXDAnIGZvciBzYWZldHkgKi8KKyAgICB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVbdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lTGVuXSA9ICdcMCc7CisKKyAgICAvKiA0LjIsIHN0ZXAgMzogU2V0IHNlY3VyaXR5UGFyYW1ldGVycyB0byBhIHplcm8tbGVuZ3RoIE9DVEVUCisgICAgICogIFNUUklORyAoJzA0MDAnKS4KKyAgICAgKi8KKyAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCAidHNtIHNlY3VyaXR5IHBhcmFtZXRlcnMiKTsKKyAgICByYyA9IGFzbl9yZWFsbG9jX3JidWlsZF9oZWFkZXIod2hvbGVNc2csIHdob2xlTXNnTGVuLCBvZmZzZXQsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhcikgKEFTTl9VTklWRVJTQUwgfCBBU05fUFJJTUlUSVZFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFTTl9PQ1RFVF9TVFIpLCAwKTsKKyAgICBERUJVR0lOREVOVExFU1MoKTsKKyAgICBpZiAocmMgPT0gMCkgeworICAgICAgICBERUJVR01TR1RMKCgidHNtIiwgImJ1aWxkaW5nIG1zZ1NlY3VyaXR5UGFyYW1ldGVycyBmYWlsZWQuXG4iKSk7CisgICAgICAgIGlmICh0bVN0YXRlUmVmTG9jYWwpCisgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgIHJldHVybiBTTk1QRVJSX1RPT19MT05HOworICAgIH0KKyAgICAKKyAgICAvKiA0LjIsIHN0ZXAgNDogQ29tYmluZSB0aGUgbWVzc2FnZSBwYXJ0cyBpbnRvIGEgd2hvbGVNc2cgYW5kCisgICAgICAgY2FsY3VsYXRlIHdob2xlTXNnTGVuZ3RoLgorICAgICAqLworICAgIHdoaWxlICgoKndob2xlTXNnTGVuIC0gKm9mZnNldCkgPCBwYXJtcy0+Z2xvYmFsRGF0YUxlbikgeworICAgICAgICBpZiAoIWFzbl9yZWFsbG9jKHdob2xlTXNnLCB3aG9sZU1zZ0xlbikpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCAiYnVpbGRpbmcgZ2xvYmFsIGRhdGEgZmFpbGVkLlxuIikpOworICAgICAgICAgICAgaWYgKHRtU3RhdGVSZWZMb2NhbCkKKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9UT09fTE9ORzsKKyAgICAgICAgfQorICAgIH0KKworICAgICpvZmZzZXQgKz0gcGFybXMtPmdsb2JhbERhdGFMZW47CisgICAgbWVtY3B5KCp3aG9sZU1zZyArICp3aG9sZU1zZ0xlbiAtICpvZmZzZXQsCisgICAgICAgICAgIHBhcm1zLT5nbG9iYWxEYXRhLCBwYXJtcy0+Z2xvYmFsRGF0YUxlbik7CisKKyAgICAvKiA0LjIsIHN0ZXAgNTogVGhlIHdob2xlTXNnLCB3aG9sZU1zZ0xlbmd0aCwgc2VjdXJpdHlQYXJhbWV0ZXJzLAorICAgICAgIGFuZCB0bVN0YXRlUmVmZXJlbmNlIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGluZyBNZXNzYWdlCisgICAgICAgUHJvY2Vzc2luZyBNb2RlbCB3aXRoIHRoZSBzdGF0dXNJbmZvcm1hdGlvbiBzZXQgdG8gc3VjY2Vzcy4gKi8KKworICAgIC8qIEZvciB0aGUgTmV0LVNOTVAgaW1wbGVtYW50aW9uIHRoYXQgYWN0dWFsbHkgbWVhbnMgd2Ugc3RhcnQKKyAgICAgICBlbmNvZGluZyB0aGUgZnVsbCBwYWNrZXQgc2VxdWVuY2UgZnJvbSBoZXJlIGJlZm9yZSByZXR1cm5pbmcgaXQgKi8KKworICAgIC8qCisgICAgICogVG90YWwgcGFja2V0IHNlcXVlbmNlLiAgCisgICAgICovCisgICAgcmMgPSBhc25fcmVhbGxvY19yYnVpbGRfc2VxdWVuY2Uod2hvbGVNc2csIHdob2xlTXNnTGVuLCBvZmZzZXQsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhcikgKEFTTl9TRVFVRU5DRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9DT05TVFJVQ1RPUiksICpvZmZzZXQpOworICAgIGlmIChyYyA9PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCAiYnVpbGRpbmcgbWFzdGVyIHBhY2tldCBzZXF1ZW5jZSBmYWlsZWQuXG4iKSk7CisgICAgICAgIGlmICh0bVN0YXRlUmVmTG9jYWwpCisgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgIHJldHVybiBTTk1QRVJSX1RPT19MT05HOworICAgIH0KKworICAgIGlmIChwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YSAmJgorICAgICAgICBwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YSAhPSB0bVN0YXRlUmVmKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0c206IG5lZWRlZCB0byBmcmVlIHRyYW5zcG9ydCBkYXRhXG4iKTsKKyAgICAgICAgU05NUF9GUkVFKHBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhKTsKKyAgICB9CisKKyAgICAvKiBwdXQgdGhlIHRyYW5zcG9ydCBzdGF0ZSByZWZlcmVuY2UgaW50byB0aGUgUERVIGZvciB0aGUgdHJhbnNwb3J0ICovCisgICAgcGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGEgPSBuZXRzbm1wX21lbWR1cCh0bVN0YXRlUmVmLCBzaXplb2YoKnRtU3RhdGVSZWYpKTsKKyAgICBpZiAoIXBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidHNtOiBtYWxsb2MgZmFpbHVyZVxuIik7CisgICAgcGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoID0gc2l6ZW9mKCp0bVN0YXRlUmVmKTsKKworICAgIGlmICh0bVN0YXRlUmVmTG9jYWwpCisgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICBERUJVR01TR1RMKCgidHNtIiwgIlRTTSBwcm9jZXNzaW5nIGNvbXBsZXRlZC5cbiIpKTsKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRzbV9wcm9jZXNzX2luX21zZworICoKKyAqIFBhcmFtZXRlcnM6CisgKgkoU2VlIGxpc3QgYmVsb3cuLi4pCisgKgorICogUmV0dXJuczoKKyAqCVRTTV9FUlJfTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICBPbiBzdWNjZXNzLgorICoJVFNNX0VSUl9HRU5FUklDX0VSUk9SCisgKglUU01fRVJSX1VOU1VQUE9SVEVEX1NFQ1VSSVRZX0xFVkVMCisgKgorICoKKyAqIFByb2Nlc3NlcyBhbiBpbmNvbWluZyBtZXNzYWdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQKK3RzbV9wcm9jZXNzX2luX21zZyhzdHJ1Y3Qgc25tcF9zZWNtb2RfaW5jb21pbmdfcGFyYW1zICpwYXJtcykKK3sKKyAgICB1X2NoYXIgdHlwZV92YWx1ZTsKKyAgICBzaXplX3QgcmVtYWluaW5nOworICAgIHVfY2hhciAqZGF0YV9wdHI7CisgICAgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmOworICAgIG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2UgKnRzbVNlY1JlZjsKKyAgICB1X2NoYXIgICAgICAgICAgb3VyRW5naW5lSURbU05NUF9NQVhfRU5HX1NJWkVdOworICAgIHN0YXRpYyBzaXplX3QgICBvdXJFbmdpbmVJRF9sZW4gPSBzaXplb2Yob3VyRW5naW5lSUQpOworICAgIAorICAgIC8qIFNlY3Rpb24gNS4yLCBzdGVwIDE6IFNldCB0aGUgc2VjdXJpdHlFbmdpbmVJRCB0byB0aGUgbG9jYWwKKyAgICAgICBzbm1wRW5naW5lSUQuICovCisgICAgb3VyRW5naW5lSURfbGVuID0KKyAgICAgICAgc25tcHYzX2dldF9lbmdpbmVJRCgodV9jaGFyKikgb3VyRW5naW5lSUQsIG91ckVuZ2luZUlEX2xlbik7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKG91ckVuZ2luZUlEX2xlbiAhPSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91ckVuZ2luZUlEX2xlbiA8PSAqcGFybXMtPnNlY0VuZ2luZUlETGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX0dFTkVSUik7CisgICAgbWVtY3B5KHBhcm1zLT5zZWNFbmdpbmVJRCwgb3VyRW5naW5lSUQsICpwYXJtcy0+c2VjRW5naW5lSURMZW4pOworCisgICAgLyogU2VjdGlvbiA1LjIsIHN0ZXAgMjogSWYgdG1TdGF0ZVJlZmVyZW5jZSBkb2VzIG5vdCByZWZlciB0byBhCisgICAgICAgY2FjaGUgY29udGFpbmluZyB2YWx1ZXMgZm9yIHRtVHJhbnNwb3J0RG9tYWluLAorICAgICAgIHRtVHJhbnNwb3J0QWRkcmVzcywgdG1TZWN1cml0eU5hbWUsIGFuZAorICAgICAgIHRtVHJhbnNwb3J0U2VjdXJpdHlMZXZlbCwgdGhlbiB0aGUgc25tcFRzbUludmFsaWRDYWNoZXMgY291bnRlcgorICAgICAgIGlzIGluY3JlbWVudGVkLCBhbiBlcnJvciBpbmRpY2F0aW9uIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsaW5nCisgICAgICAgbW9kdWxlLCBhbmQgU2VjdXJpdHkgTW9kZWwgcHJvY2Vzc2luZyBzdG9wcyBmb3IgdGhpcworICAgICAgIG1lc3NhZ2UuICovCisgICAgaWYgKCFwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YSB8fAorICAgICAgICBzaXplb2YobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlKSAhPQorICAgICAgICBwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpIHsKKyAgICAgICAgLyogaWYgd2UncmUgbm90IGNvbWluZyBpbiBvdmVyIGEgcHJvcGVyIHRyYW5zcG9ydDsgYmFpbCEgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsImltcHJvcGVyIHRyYW5zcG9ydCBkYXRhXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdG1TdGF0ZVJlZiA9IChuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKikgcGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGE7CisgICAgcGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGEgPSBOVUxMOworCisgICAgaWYgKHRtU3RhdGVSZWYgPT0gTlVMTCB8fAorICAgICAgICAvKiBub3QgbmVlZGVkOiB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW4gPT0gTlVMTCB8fCAqLworICAgICAgICAvKiBub3QgbmVlZGVkOiB0bVN0YXRlUmVmLT50cmFuc3BvcnRBZGRyZXNzID09IE5VTEwgfHwgKi8KKyAgICAgICAgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lWzBdID09ICdcMCcKKyAgICAgICAgKSB7CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RTTV9TTk1QVFNNSU5WQUxJRENBQ0hFUyk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKiBTZWN0aW9uIDUuMiwgc3RlcCAzOiBDb3B5IHRoZSB0bVNlY3VyaXR5TmFtZSB0byBzZWN1cml0eU5hbWUuICovCisgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RTTV9VU0VfUFJFRklYKSkgeworICAgICAgICAvKiBTZWN0aW9uIDUuMiwgc3RlcCAzOgorICAgICAgICAgIElmIHRoZSBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCBvYmplY3QgaXMgc2V0IHRvIHRydWUsIHRoZW4KKyAgICAgICAgICB1c2UgdGhlIHRtVHJhbnNwb3J0RG9tYWluIHRvIGxvb2sgdXAgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZml4LgorICAgICAgICAqLworICAgICAgICBjb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworICAgICAgICAvKgorICAgICAgICAgIHBvc3NpYmlsaXRpZXM6CisgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tfAorICAgICAgICAgICB8IHNubXBUTFNUQ1BEb21haW4gICB8IHRsczogIHwKKyAgICAgICAgICAgfCBzbm1wRFRMU1VEUERvbWFpbiAgfCBkdGxzOiB8CisgICAgICAgICAgIHwgc25tcFNTSERvbWFpbiAgICAgIHwgc3NoOiAgfAorICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLXwKKyAgICAgICAgKi8KKyAgICAgICAgCisgICAgICAgIGlmICh0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW4gPT0gTlVMTCkgeworICAgICAgICAgICAgLyogWFhYOiBzbm1wVHNtSW52YWxpZENhY2hlcysrID8/PyAqLworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9CisKKyAgICAgICAgLyogWFhYOiBjYWNoZSBpbiBzZXNzaW9uISAqLworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4KKyAgICAgICAgaWYgKG5ldHNubXBfb2lkX2VxdWFscyhuZXRzbm1wX3NubXBTU0hEb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zbm1wU1NIRG9tYWluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluTGVuKSA9PSAwKSB7CisgICAgICAgICAgICBwcmVmaXggPSAic3NoIjsKKyAgICAgICAgfQorI2VuZGlmIC8qICBORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOICovCisKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorICAgICAgICBpZiAobmV0c25tcF9vaWRfZXF1YWxzKG5ldHNubXBEVExTVURQRG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBEVExTVURQRG9tYWluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluTGVuKSA9PSAwKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHByZWZpeCA9ICJkdGxzIjsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOICovCisKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisgICAgICAgIGlmIChuZXRzbm1wX29pZF9lcXVhbHMobmV0c25tcFRMU1RDUERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wVExTVENQRG9tYWluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluTGVuKSA9PSAwKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHByZWZpeCA9ICJ0bHMiOworICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTiAqLworCisgICAgICAgIC8qIFNlY3Rpb24gNS4yLCBzdGVwIDM6CisgICAgICAgICAgSWYgdGhlIHByZWZpeCBsb29rdXAgZmFpbHMgZm9yIGFueSByZWFzb24sIHRoZW4gdGhlCisgICAgICAgICAgc25tcFRzbVVua25vd25QcmVmaXhlcyBjb3VudGVyIGlzIGluY3JlbWVudGVkLCBhbiBlcnJvcgorICAgICAgICAgIGluZGljYXRpb24gaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxpbmcgbW9kdWxlLCBhbmQgbWVzc2FnZQorICAgICAgICAgIHByb2Nlc3Npbmcgc3RvcHMuCisgICAgICAgICovCisgICAgICAgIGlmIChwcmVmaXggPT0gTlVMTCkgeworICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVFNNX1NOTVBUU01VTktOT1dOUFJFRklYRVMpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9CisKKyAgICAgICAgLyogU2VjdGlvbiA1LjIsIHN0ZXAgMzoKKyAgICAgICAgICBJZiB0aGUgbG9va3VwIHN1Y2NlZWRzIGJ1dCB0aGUgcHJlZml4IGxlbmd0aCBpcyBsZXNzIHRoYW4gMSBvcgorICAgICAgICAgIGdyZWF0ZXIgdGhhbiA0IG9jdGV0cywgdGhlbiB0aGUgc25tcFRzbUludmFsaWRQcmVmaXhlcyBjb3VudGVyCisgICAgICAgICAgaXMgaW5jcmVtZW50ZWQsIGFuIGVycm9yIGluZGljYXRpb24gaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxpbmcKKyAgICAgICAgICBtb2R1bGUsIGFuZCBtZXNzYWdlIHByb2Nlc3Npbmcgc3RvcHMuCisgICAgICAgICovCisjaWZkZWYgTk9UX1VTSU5HX0hBUkRDT0RFRF9QUkVGSVhFUworICAgICAgICAvKiB0aGUgYWJvdmUgY29kZSBhY3R1YWxseSBlbnN1cmVzIHRoaXMgd2lsbCBuZXZlciBoYXBwZW4gYXMKKyAgICAgICAgICAgd2UgZG9uJ3Qgc3VwcG9ydCBhIGR5bmFtaWMgcHJlZml4IGRhdGFiYXNlIHdoZXJlIHRoaXMgbWlnaHQKKyAgICAgICAgICAgaGFwcGVuLiAqLworICAgICAgICBpZiAoc3RybGVuKHByZWZpeCkgPCAxIHx8IHN0cmxlbihwcmVmaXgpID4gNCkgeworICAgICAgICAgICAgLyogWFhYOiBzbm1wVHNtSW52YWxpZFByZWZpeGVzKysgKi8KKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIAorICAgICAgICAvKiBTZWN0aW9uIDUuMiwgc3RlcCAzOgorICAgICAgICAgIFNldCB0aGUgc2VjdXJpdHlOYW1lIHRvIGJlIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBwcmVmaXgsIGEKKyAgICAgICAgICAnOicgY2hhcmFjdGVyIChVUy1BU0NJSSAweDNhKSwgYW5kIHRoZSB0bVNlY3VyaXR5TmFtZS4KKyAgICAgICAgKi8KKyAgICAgICAgc25wcmludGYocGFybXMtPnNlY05hbWUsICpwYXJtcy0+c2VjTmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgIiVzOiVzIiwgcHJlZml4LCB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIGlmIHRoZSB1c2UgcHJlZml4IGZsYWcgd2Fzbid0IHNldCwgZG8gYSBzdHJhaWdodCBjb3B5ICovCisgICAgICAgIHN0cm5jcHkocGFybXMtPnNlY05hbWUsIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSwgKnBhcm1zLT5zZWNOYW1lTGVuKTsKKyAgICB9CisKKyAgICAvKiBzZXQgdGhlIGxlbmd0aCBvZiB0aGUgc2VjdXJpdHkgbmFtZSAqLworICAgICpwYXJtcy0+c2VjTmFtZUxlbiA9IHN0cmxlbihwYXJtcy0+c2VjTmFtZSk7CisgICAgREVCVUdNU0dUTCgoInRzbSIsICJ1c2VyOiAlcy8lZFxuIiwgcGFybXMtPnNlY05hbWUsIChpbnQpKnBhcm1zLT5zZWNOYW1lTGVuKSk7CisKKyAgICAvKiBTZWN0aW9uIDUuMiBTdGVwIDQ6CisgICAgICAgQ29tcGFyZSB0aGUgdmFsdWUgb2YgdG1UcmFuc3BvcnRTZWN1cml0eUxldmVsIGluIHRoZQorICAgICAgIHRtU3RhdGVSZWZlcmVuY2UgY2FjaGUgdG8gdGhlIHZhbHVlIG9mIHRoZSBzZWN1cml0eUxldmVsCisgICAgICAgcGFyYW1ldGVyIHBhc3NlZCBpbiB0aGUgcHJvY2Vzc0luY29taW5nTXNnIEFTSS4gIElmIHNlY3VyaXR5TGV2ZWwKKyAgICAgICBzcGVjaWZpZXMgcHJpdmFjeSAoUHJpdikgYW5kIHRtVHJhbnNwb3J0U2VjdXJpdHlMZXZlbCBzcGVjaWZpZXMKKyAgICAgICBubyBwcml2YWN5IChub1ByaXYpLCBvciBpZiBzZWN1cml0eUxldmVsIHNwZWNpZmllcyBhdXRoZW50aWNhdGlvbgorICAgICAgIChhdXRoKSBhbmQgdG1UcmFuc3BvcnRTZWN1cml0eUxldmVsIHNwZWNpZmllcyBubyBhdXRoZW50aWNhdGlvbgorICAgICAgIChub0F1dGgpIHdhcyBwcm92aWRlZCBieSB0aGUgVHJhbnNwb3J0IE1vZGVsLCB0aGVuIHRoZQorICAgICAgIHNubXBUc21JbmFkZXF1YXRlU2VjdXJpdHlMZXZlbHMgY291bnRlciBpcyBpbmNyZW1lbnRlZCwgYW4gZXJyb3IKKyAgICAgICBpbmRpY2F0aW9uICh1bnN1cHBvcnRlZFNlY3VyaXR5TGV2ZWwpIHRvZ2V0aGVyIHdpdGggdGhlIE9JRCBhbmQKKyAgICAgICB2YWx1ZSBvZiB0aGUgaW5jcmVtZW50ZWQgY291bnRlciBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGluZworICAgICAgIG1vZHVsZSwgYW5kIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbCBwcm9jZXNzaW5nIHN0b3BzIGZvciB0aGlzCisgICAgICAgbWVzc2FnZS4qLworICAgIGlmIChwYXJtcy0+c2VjTGV2ZWwgPiB0bVN0YXRlUmVmLT50cmFuc3BvcnRTZWN1cml0eUxldmVsKSB7CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RTTV9TTk1QVFNNSU5BREVRVUFURVNFQ1VSSVRZTEVWRUxTKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsICJpbmFkZXF1YXRlIHNlY3VyaXR5IGxldmVsOiAlZFxuIiwgcGFybXMtPnNlY0xldmVsKSk7CisgICAgICAgIC8qIG5ldC1zbm1wIHJldHVybnMgZXJyb3IgY29kZXMgbm90IE9JRHMsIHdoaWNoIGFyZSBkZWFsdCB3aXRoIGxhdGVyICovCisgICAgICAgIHJldHVybiBTTk1QRVJSX1VOU1VQUE9SVEVEX1NFQ19MRVZFTDsKKyAgICB9CisKKyAgICAvKiBTZWN0aW9uIDUuMiBTdGVwIDUKKyAgICAgICBUaGUgdG1TdGF0ZVJlZmVyZW5jZSBpcyBjYWNoZWQgYXMgY2FjaGVkU2VjdXJpdHlEYXRhIHNvIHRoYXQgYQorICAgICAgIHBvc3NpYmxlIHJlc3BvbnNlIHRvIHRoaXMgbWVzc2FnZSB3aWxsIHVzZSB0aGUgc2FtZSBzZWN1cml0eQorICAgICAgIHBhcmFtZXRlcnMuICBUaGVuIHNlY3VyaXR5U3RhdGVSZWZlcmVuY2UgaXMgc2V0IGZvciBzdWJzZXF1ZW50CisgICAgICAgcmVmZXJlbmNlcyB0byB0aGlzIGNhY2hlZCBkYXRhLgorICAgICovCisgICAgaWYgKE5VTEwgPT0gKnBhcm1zLT5zZWNTdGF0ZVJlZikgeworICAgICAgICB0c21TZWNSZWYgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRzbVNlY1JlZiA9ICpwYXJtcy0+c2VjU3RhdGVSZWY7CisgICAgfQorCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKE5VTEwgIT0gdHNtU2VjUmVmLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICAqcGFybXMtPnNlY1N0YXRlUmVmID0gdHNtU2VjUmVmOworICAgIHRzbVNlY1JlZi0+dG1TdGF0ZVJlZiA9IHRtU3RhdGVSZWY7CisKKyAgICAvKiBJZiB0aGlzIGRpZCBub3QgY29tZSB0aHJvdWdoIGEgdHVubmVsZWQgY29ubmVjdGlvbiwgdGhpcworICAgICAgIHNlY3VyaXR5IG1vZGVsIGlzIGluYXBwcm9wcmlhdGUgKGFuZCB3b3VsZCBiZSBhIEhVR0Ugc2VjdXJpdHkKKyAgICAgICBob2xlIHRvIGFzc3VtZSBvdGhlcndpc2UpLiAgVGhpcyBpcyBmdW5jdGlvbmFsbHkgYSBkb3VibGUgY2hlY2sKKyAgICAgICBzaW5jZSB0aGUgcGR1IHdvdWxkbid0IGhhdmUgdHJhbnNwb3J0IGRhdGEgb3RoZXJ3aXNlLiAgQnV0IHRoaXMKKyAgICAgICBpcyBzYWZlciB0aG91Z2ggaXMgZnVuY3Rpb25hbGx5IGFuIGV4dHJhIHN0ZXAgYmV5b25kIHRoZSBUU00KKyAgICAgICBSRkMuICovCisgICAgREVCVUdNU0dUTCgoInRzbSIsImNoZWNraW5nIGhvdyB3ZSBnb3QgaGVyZVxuIikpOworICAgIGlmICghKHBhcm1zLT5wZHUtPmZsYWdzICYgVUNEX01TR19GTEFHX1RVTk5FTEVEKSkgeworICAgICAgICBERUJVR01TR1RMKCgidHNtIiwiICBwZHUgbm90IHR1bm5lbGVkXG4iKSk7CisgICAgICAgIGlmICghKHBhcm1zLT5zZXNzLT5mbGFncyAmIE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfVFVOTkVMRUQpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidHNtIiwiICBzZXNzaW9uIG5vdCB0dW5uZWxlZFxuIikpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0FVVEhFTlRJQ0FUSU9ORkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1RMKCgidHNtIiwiICBidXQgc2Vzc2lvbiBpcyB0dW5uZWxlZFxuIikpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCIgIHR1bm5lbGVkXG4iKSk7CisgICAgfQorCisgICAgLyogU2VjdGlvbiA1LjIsIFN0ZXAgNjoKKyAgICAgICBUaGUgc2NvcGVkUERVIGNvbXBvbmVudCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgd2hvbGVNc2cuICovCisgICAgLyoKKyAgICAgKiBFYXQgdGhlIGZpcnN0IG9jdGV0IGhlYWRlci4KKyAgICAgKi8KKyAgICByZW1haW5pbmcgPSBwYXJtcy0+d2hvbGVNc2dMZW4gLSAocGFybXMtPnNlY1BhcmFtcyAtIHBhcm1zLT53aG9sZU1zZyk7CisgICAgaWYgKChkYXRhX3B0ciA9IGFzbl9wYXJzZV9zZXF1ZW5jZShwYXJtcy0+c2VjUGFyYW1zLCAmcmVtYWluaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0eXBlX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBU05fVU5JVkVSU0FMIHwgQVNOX1BSSU1JVElWRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9PQ1RFVF9TVFIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0c20gZmlyc3Qgb2N0ZXQiKSkgPT0gTlVMTCkgeworICAgICAgICAvKgorICAgICAgICAgKiBSRVRVUk4gcGFyc2UgZXJyb3IgCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gU05NUEVSUl9BU05fUEFSU0VfRVJSOworICAgIH0KKyAgICAKKyAgICAqcGFybXMtPnNjb3BlZFBkdSA9IGRhdGFfcHRyOworICAgICpwYXJtcy0+c2NvcGVkUGR1TGVuID0gcGFybXMtPndob2xlTXNnTGVuIC0gKGRhdGFfcHRyIC0gcGFybXMtPndob2xlTXNnKTsKKworICAgIC8qIFNlY3Rpb24gNS4yLCBTdGVwIDc6CisgICAgICAgVGhlIG1heFNpemVSZXNwb25zZVNjb3BlZFBEVSBpcyBjYWxjdWxhdGVkLiAgVGhpcyBpcyB0aGUgbWF4aW11bQorICAgICAgIHNpemUgYWxsb3dlZCBmb3IgYSBzY29wZWRQRFUgZm9yIGEgcG9zc2libGUgUmVzcG9uc2UgbWVzc2FnZS4KKyAgICAgKi8KKyAgICAqcGFybXMtPm1heFNpemVSZXNwb25zZSA9IHBhcm1zLT5tYXhNc2dTaXplOyAvKiBYWFggKi8KKworICAgIC8qIFNlY3Rpb24gNS4yLCBTdGVwIDg6CisgICAgICAgVGhlIHN0YXR1c0luZm9ybWF0aW9uIGlzIHNldCB0byBzdWNjZXNzIGFuZCBhIHJldHVybiBpcyBtYWRlIHRvCisgICAgICAgdGhlIGNhbGxpbmcgbW9kdWxlIHBhc3NpbmcgYmFjayB0aGUgT1VUIHBhcmFtZXRlcnMgYXMgc3BlY2lmaWVkCisgICAgICAgaW4gdGhlIHByb2Nlc3NJbmNvbWluZ01zZyBBU0kuCisgICAgKi8KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wdXNtLmMgYi9zbm1wbGliL3NubXB1c20uYwppbmRleCAzODliNjc3Li42YTljZWMzIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXB1c20uYworKysgYi9zbm1wbGliL3NubXB1c20uYwpAQCAtMjIsMjEgKzIyLDE1IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03OCw2ICs3MiwxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbV9hbGwsIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtX3N1cHBvcnQsIHVzbV9hbGwpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHVzbV9zdXBwb3J0KQorCiBvaWQgICAgICAgICAgICAgdXNtTm9BdXRoUHJvdG9jb2xbMTBdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMCwgMSwgMSwgMSB9OwogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CiBvaWQgICAgICAgICAgICAgdXNtSE1BQ01ENUF1dGhQcm90b2NvbFsxMF0gPQpAQCAtOTYsNiArOTUsMTYgQEAKIHN0YXRpYyB1X2ludCAgICBkdW1teV9ldGltZSwgZHVtbXlfZWJvb3Q7ICAgICAgIC8qIEZvciBJU0VOR0lORUtOT1dOKCkuICovCiAKIC8qCisgKiBTZXQgdXAgZGVmYXVsdCBzbm1wdjMgcGFyYW1ldGVyIHZhbHVlIHN0b3JhZ2UuCisgKi8KKyNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KK3N0YXRpYyBjb25zdCBvaWQgKmRlZmF1bHRBdXRoVHlwZSA9IE5VTEw7CitzdGF0aWMgc2l6ZV90ICAgZGVmYXVsdEF1dGhUeXBlTGVuID0gMDsKK3N0YXRpYyBjb25zdCBvaWQgKmRlZmF1bHRQcml2VHlwZSA9IE5VTEw7CitzdGF0aWMgc2l6ZV90ICAgZGVmYXVsdFByaXZUeXBlTGVuID0gMDsKKyNlbmRpZiAvKiBORVRTTk1QX1NFQ01PRF9VU00gKi8KKworLyoKICAqIEdsb2JhbHMuCiAgKi8KIHN0YXRpYyB1X2ludCAgICBzYWx0X2ludGVnZXI7CkBAIC0xNjUsNiArMTc0LDIxIEBACiB9CiAKIAoraW50CitmcmVlX2VuZ2luZXRpbWVfb25fc2h1dGRvd24oaW50IG1ham9yaWQsIGludCBtaW5vcmlkLCB2b2lkICpzZXJ2ZXJhcmcsCisJCQkgICAgdm9pZCAqY2xpZW50YXJnKQoreworICAgIHVfY2hhciBlbmdpbmVJRFtTTk1QX01BWF9FTkdfU0laRV07CisgICAgc2l6ZV90IGVuZ2luZUlEX2xlbiA9IHNpemVvZihlbmdpbmVJRCk7CisKKyAgICBERUJVR01TR1RMKCgic25tcHYzIiwgImZyZWUgZW5naW5ldGltZSBjYWxsYmFjayBjYWxsZWRcbiIpKTsKKworICAgIGVuZ2luZUlEX2xlbiA9IHNubXB2M19nZXRfZW5naW5lSUQoZW5naW5lSUQsIGVuZ2luZUlEX2xlbik7CisgICAgaWYgKGVuZ2luZUlEX2xlbiA+IDApCisJZnJlZV9lbmdpbmV0aW1lKGVuZ2luZUlELCBlbmdpbmVJRF9sZW4pOworICAgIHJldHVybiAwOworfQorCiBzdHJ1Y3QgdXNtU3RhdGVSZWZlcmVuY2UgKgogdXNtX21hbGxvY191c21TdGF0ZVJlZmVyZW5jZSh2b2lkKQogewpAQCAtNTAyLDcgKzUyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVuZ0J0bGVuLCAgIC8qICAgZm9yIGZpZWxkcyB3aXRoaW4gICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBlbmdUbWxlbiwgICAvKiAgIG1zZ1NlY3VyaXR5UGFyYW1ldGVycyBwb3J0aW9uIG9mICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgbmFtZWxlbiwgICAgLyogICBTTk1QdjNNZXNzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGF1dGhsZW4sIHByaXZsZW47CisgICAgICAgICAgICAgICAgICAgIGF1dGhsZW4sIHByaXZsZW4sIHJldDsKIAogICAgIC8qCiAgICAgICogSWYgZG9pbmcgYXV0aGVudGljYXRpb24sIG1zZ0F1dGhQYXJtTGVuID0gMTIgZWxzZSBtc2dBdXRoUGFybUxlbiA9IDAuCkBAIC01MTgsNyArNTQyLDcgQEAKICAgICAgKiBDYWxjdWxhdGUgbGVuZ3Rocy4KICAgICAgKi8KICAgICBpZiAoKGVuZ0lEbGVuID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWNFbmdpbmVJRExlbikpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBzZWNFbmdpbmVJRExlbikpID09IC0xKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTUzNCwzMSArNTU4LDM1IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoKG5hbWVsZW4gPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwgMCwgc2VjTmFtZUxlbikpID09IC0xKSB7CisgICAgaWYgKChuYW1lbGVuID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHNlY05hbWVMZW4pKSA9PSAtMSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgaWYgKChhdXRobGVuID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICptc2dBdXRoUGFybUxlbikpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICptc2dBdXRoUGFybUxlbikpID09IC0xKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoKHByaXZsZW4gPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKm1zZ1ByaXZQYXJtTGVuKSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgKm1zZ1ByaXZQYXJtTGVuKSkgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgICpzZXFfbGVuID0KICAgICAgICAgZW5nSURsZW4gKyBlbmdCdGxlbiArIGVuZ1RtbGVuICsgbmFtZWxlbiArIGF1dGhsZW4gKyBwcml2bGVuOwogCi0gICAgaWYgKCgqb3RzdGxlbiA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fU0VRVUVOQ0UsIDAsICpzZXFfbGVuKSkgPT0gLTEpIHsKKyAgICBpZiAoKHJldCA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fU0VRVUVOQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICpzZXFfbGVuKSkgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICAqb3RzdGxlbiA9IChzaXplX3QpcmV0OwogCi0gICAgaWYgKCgqbXNnU2VjUGFybUxlbiA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKm90c3RsZW4pKSA9PSAtMSkgeworICAgIGlmICgocmV0ID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICpvdHN0bGVuKSkgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICAqbXNnU2VjUGFybUxlbiA9IChzaXplX3QpcmV0OwogCiAgICAgKmF1dGhQYXJhbXNPZmZzZXQgPSBnbG9iYWxEYXRhTGVuICsgKygqbXNnU2VjUGFybUxlbiAtICpzZXFfbGVuKQogICAgICAgICArIGVuZ0lEbGVuICsgZW5nQnRsZW4gKyBlbmdUbWxlbiArIG5hbWVsZW4KQEAgLTU4MywxMCArNjExLDEwIEBACiAgICAgaWYgKHNlY0xldmVsID09IFNOTVBfU0VDX0xFVkVMX0FVVEhQUklWKSB7CiAgICAgICAgIHNjb3BlZFBkdUxlbiA9IFJPVU5EVVA4KHNjb3BlZFBkdUxlbik7CiAKLSAgICAgICAgaWYgKCgqZGF0YWxlbiA9Ci0gICAgICAgICAgICAgYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsIDAsIHNjb3BlZFBkdUxlbikpID09IC0xKSB7CisgICAgICAgIGlmICgocmV0ID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsIE5VTEwsIHNjb3BlZFBkdUxlbikpID09IC0xKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKyAgICAgICAgKmRhdGFsZW4gPSAoc2l6ZV90KXJldDsKICAgICB9IGVsc2UgewogICAgICAgICAqZGF0YWxlbiA9IHNjb3BlZFBkdUxlbjsKICAgICB9CkBAIC0xMzg3LDcgKzE0MTUsNyBAQAogICAgIHNpemVfdCAgICAgICAgICBzcF9vZmZzZXQgPSAwLCBtYWNfb2Zmc2V0ID0gMDsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwogCi0gICAgREVCVUdNU0dUTCgoInVzbSIsICJVU00gcHJvY2Vzc2luZyBoYXMgYmVndW4gKG9mZnNldCAlZClcbiIsICpvZmZzZXQpKTsKKyAgICBERUJVR01TR1RMKCgidXNtIiwgIlVTTSBwcm9jZXNzaW5nIGhhcyBiZWd1biAob2Zmc2V0ICVkKVxuIiwgKGludCkqb2Zmc2V0KSk7CiAKICAgICBpZiAoc2VjU3RhdGVSZWYgIT0gTlVMTCkgewogICAgICAgICAvKgpAQCAtMTUxNSw3ICsxNTQzLDcgQEAKICAgICAgICAgaWYgKChjaXBoZXJ0ZXh0ID0gKHVfY2hhciAqKSBtYWxsb2MoY2lwaGVydGV4dGxlbikpID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLAogICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IG1hbGxvYyAlZCBieXRlcyBmb3IgZW5jcnlwdGVkIFBEVVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHRsZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpY2lwaGVydGV4dGxlbikpOwogICAgICAgICAgICAgdXNtX2ZyZWVfdXNtU3RhdGVSZWZlcmVuY2Uoc2VjU3RhdGVSZWYpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfTUFMTE9DOwogICAgICAgICB9CkBAIC0xNTkwLDYgKzE2MTgsNyBAQAogICAgICAgICAgICAgU05NUF9GUkVFKGNpcGhlcnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0VOQ1JZUFRJT05FUlJPUjsKICAgICAgICAgfQorCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCiAgICAgICAgIGlmIChkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKCJ1c20vZHVtcCIpID09IFNOTVBFUlJfU1VDQ0VTUykgewogICAgICAgICAgICAgZHVtcF9jaHVuaygidXNtL2R1bXAiLCAic2FsdCArIEVuY3J5cHRlZCBmb3JtOiAiLCBzYWx0LApAQCAtMTk5MSw3ICsyMDIwLDcgQEAKICAgICAvKgogICAgICAqIEZJWCAtLSBkb2Vzbid0IHRoaXMgYWxzbyBpbmRpY2F0ZSBhIGJ1ZmZlciBvdmVycnVuPwogICAgICAqLwotICAgIGlmICgoaW50KSBvcmlnTmFtZUxlbiA8ICpzZWNOYW1lTGVuICsgMSkgeworICAgIGlmIChvcmlnTmFtZUxlbiA8ICpzZWNOYW1lTGVuICsgMSkgewogICAgICAgICAvKgogICAgICAgICAgKiBSRVRVUk4gcGFyc2UgZXJyb3IsIGJ1dCBpdCdzIHJlYWxseSBhIHBhcmFtZXRlciBlcnJvciAKICAgICAgICAgICovCkBAIC0yMTM3LDcgKzIxNjYsNyBAQAogICAgIC8qCiAgICAgICogVGhpcyBpcyBhIGxvY2FsIHJlZmVyZW5jZS4KICAgICAgKi8KLSAgICBpZiAoKGludCkgc2VjRW5naW5lSURMZW4gPT0gbXlJRExlbmd0aAorICAgIGlmIChzZWNFbmdpbmVJRExlbiA9PSBteUlETGVuZ3RoCiAgICAgICAgICYmIG1lbWNtcChzZWNFbmdpbmVJRCwgbXlJRCwgbXlJRExlbmd0aCkgPT0gMCkgewogICAgICAgICB1X2ludCAgICAgICAgICAgdGltZV9kaWZmZXJlbmNlID0gbXlUaW1lID4gdGltZV91aW50ID8KICAgICAgICAgICAgIG15VGltZSAtIHRpbWVfdWludCA6IHRpbWVfdWludCAtIG15VGltZTsKQEAgLTIxNDUsMTEgKzIxNzQsNyBAQAogICAgICAgICBpZiAoYm9vdHNfdWludCA9PSBFTkdJTkVCT09UX01BWAogICAgICAgICAgICAgfHwgYm9vdHNfdWludCAhPSBteUJvb3RzCiAgICAgICAgICAgICB8fCB0aW1lX2RpZmZlcmVuY2UgPiBVU01fVElNRV9XSU5ET1cpIHsKLSAgICAgICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU05PVElOVElNRVdJTkRPV1MpID09Ci0gICAgICAgICAgICAgICAgMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTTk9USU5USU1FV0lORE9XUyk7CiAKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLAogICAgICAgICAgICAgICAgICAgICAgICAgImJvb3RfdWludCAldSBteUJvb3RzICV1IHRpbWVfZGlmZiAldSA9PiBub3QgaW4gdGltZSB3aW5kb3dcbiIsCkBAIC0yMzYyLDE2ICsyMzg3LDEwIEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogVGhpcyBpbmRpY2F0ZXMgYSBkZWNyeXB0aW9uRXJyb3IuICAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUykgPT0KLSAgICAgICAgICAgICAgICAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9ERUNSWVBUSU9ORVJST1I7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1NOTVBJTkFTTlBBUlNFRVJSUykgPT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCB0byBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgfQorICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9TTk1QSU5BU05QQVJTRUVSUlMpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fUEFSU0VFUlJPUjsKICAgICB9CiAKQEAgLTIzODIsMTAgKzI0MDEsNyBAQAogICAgICAqIGNhbGxpbmcgbW9kdWxlLgogICAgICAqLwogICAgIGlmICgoc2VjTGV2ZWwgPT0gU05NUF9TRUNfTEVWRUxfQVVUSFBSSVYpICYmIChzYWx0X2xlbmd0aCAhPSA4KSkgewotICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKSA9PSAKLSAgICAgICAgICAgIDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0RFQ1JZUFRJT05FUlJPUjsKICAgICB9CiAKQEAgLTI0MzMsMTEgKzI0NDksNyBAQAogICAgICAgICAoIXNlc3MgJiYgKG1zZ19mbGFncyAmIFNOTVBfTVNHX0ZMQUdfUlBSVF9CSVQpKSkgewogICAgICAgICBpZiAoSVNFTkdJTkVLTk9XTihzZWNFbmdpbmVJRCwgKnNlY0VuZ2luZUlETGVuKSA9PSBGQUxTRSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICJVbmtub3duIEVuZ2luZSBJRC5cbiIpKTsKLSAgICAgICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU1VOS05PV05FTkdJTkVJRFMpID09Ci0gICAgICAgICAgICAgICAgMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTVU5LTk9XTkVOR0lORUlEUyk7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fVU5LTk9XTkVOR0lORUlEOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTI0NjEsOSArMjQ3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghc2VzcykpID8gMCA6IDEpKSkKICAgICAgICAgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIlVua25vd24gVXNlciglcylcbiIsIHNlY05hbWUpKTsKLSAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTVU5LTk9XTlVTRVJOQU1FUykgPT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCB0byBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgfQorICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU1VOS05PV05VU0VSTkFNRVMpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fVU5LTk9XTlNFQ1VSSVRZTkFNRTsKICAgICB9CiAKQEAgLTI0ODEsMTAgKzI0OTEsNyBAQAogICAgIGlmICgxID09IHJjKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiVW5zdXBwb3J0ZWQgU2VjdXJpdHkgTGV2ZWwgKCVkKS5cbiIsCiAgICAgICAgICAgICAgICAgICAgIHNlY0xldmVsKSk7Ci0gICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMKLSAgICAgICAgICAgIChTVEFUX1VTTVNUQVRTVU5TVVBQT1JURURTRUNMRVZFTFMpID09IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgdG8gaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNVTlNVUFBPUlRFRFNFQ0xFVkVMUyk7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9VTlNVUFBPUlRFRFNFQ1VSSVRZTEVWRUw7CiAgICAgfSBlbHNlIGlmIChyYyAhPSAwKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiVW5rbm93biBpc3N1ZS5cbiIpKTsKQEAgLTI1MDIsMTAgKzI1MDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGgpCiAgICAgICAgICAgICAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIlZlcmlmaWNhdGlvbiBmYWlsZWQuXG4iKSk7Ci0gICAgICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNXUk9OR0RJR0VTVFMpID09IDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU1dST05HRElHRVNUUyk7CiAJICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiQXV0aGVudGljYXRpb24gZmFpbGVkIGZvciAlc1xuIiwKIAkJCQl1c2VyLT5uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9BVVRIRU5USUNBVElPTkZBSUxVUkU7CkBAIC0yNTk2LDkgKzI2MDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jcnlwdGVkIHNQRFUiKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgd2hpbGUgcGFyc2luZyBlbmNyeXB0ZWQgc1BEVS4iKSk7Ci0gICAgICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfU05NUElOQVNOUEFSU0VFUlJTKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1NOTVBJTkFTTlBBUlNFRVJSUyk7CiAgICAgICAgICAgICB1c21fZnJlZV91c21TdGF0ZVJlZmVyZW5jZSgqc2VjU3RhdGVSZWYpOwogICAgICAgICAgICAgKnNlY1N0YXRlUmVmID0gTlVMTDsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9QQVJTRUVSUk9SOwpAQCAtMjYxNywxMiArMjYxOSw5IEBACiAKICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgJSA4ICE9IDApIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2lwaGVydGV4dCBpcyAlbHUgYnl0ZXMsIG5vdCBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIDggKHJlbSAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nLCByZW1haW5pbmcgJSA4KSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUykgPT0KLSAgICAgICAgICAgICAgICAgICAgMCkgewotICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2lwaGVydGV4dCBpcyAlbHUgYnl0ZXMsIG5vdCBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIDggKHJlbSAlbHUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXJlbWFpbmluZywgKHVuc2lnbmVkIGxvbmcpcmVtYWluaW5nICUgOCkpOworICAgICAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUyk7CiAgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNtU3RhdGVSZWZlcmVuY2UoKnNlY1N0YXRlUmVmKTsKICAgICAgICAgICAgICAgICAqc2VjU3RhdGVSZWYgPSBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9ERUNSWVBUSU9ORVJST1I7CkBAIC0yNjMyLDEwICsyNjMxLDcgQEAKIAogICAgICAgICAgICAgaWYgKCAhdXNlci0+cHJpdktleSApIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIk5vIHByaXZhY3kgcGFzcyBwaHJhc2UgZm9yICVzXG4iLCB1c2VyLT5zZWNOYW1lKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUykgPT0KLSAgICAgICAgICAgICAgICAgICAgMCkgewotICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpOwogICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzbVN0YXRlUmVmZXJlbmNlKCpzZWNTdGF0ZVJlZik7CiAgICAgICAgICAgICAgICAgKnNlY1N0YXRlUmVmID0gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fREVDUllQVElPTkVSUk9SOwpAQCAtMjY2NywxMCArMjY2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3B0ciwgcmVtYWluaW5nLCAqc2NvcGVkUGR1LCBzY29wZWRQZHVMZW4pCiAgICAgICAgICAgICAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIGRlY3J5cHRpb24uIikpOwotICAgICAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYwotICAgICAgICAgICAgICAgIChTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUykgPT0gMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0RFQ1JZUFRJT05FUlJPUjsKICAgICAgICAgfQogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQpAQCAtMjcwMCw4ICsyNjkzLDcgQEAKICAgICAgKgogICAgICAqIEZJWCAgQ29ycmVjdD8gCiAgICAgICovCi0gICAgKm1heFNpemVSZXNwb25zZSA9IG1heE1zZ1NpemUgLSAoaW50KQotICAgICAgICAoKHVfbG9uZykgZW5kX29mX292ZXJoZWFkIC0gKHVfbG9uZykgd2hvbGVNc2cpOworICAgICptYXhTaXplUmVzcG9uc2UgPSBtYXhNc2dTaXplIC0gKGVuZF9vZl9vdmVyaGVhZCAtIHdob2xlTXNnKTsKIAogCiAgICAgREVCVUdNU0dUTCgoInVzbSIsICJVU00gcHJvY2Vzc2luZyBjb21wbGV0ZWQuXG4iKSk7CkBAIC0yNzYzLDEzICsyNzU1LDQ1MiBAQAogICAgIH0gICAgICAgCiB9CiAKKy8qIHNldHMgdXAgaW5pdGlhbCBkZWZhdWx0IHNlc3Npb24gcGFyYW1ldGVycyAqLworaW50Cit1c21fc2Vzc2lvbl9pbml0KG5ldHNubXBfc2Vzc2lvbiAqaW5fc2Vzc2lvbiwgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKQoreworICAgIGNoYXIgKmNwOworICAgIHNpemVfdCBpOworICAgIAorICAgIGlmIChpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbiA+IDApIHsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8gPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbik7CisgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90byA9PSBOVUxMKSB7CisgICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX01BTExPQzsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX01BTExPQzsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZ2V0X2RlZmF1bHRfYXV0aHR5cGUoJmkpICE9IE5VTEwpIHsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8gPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoZ2V0X2RlZmF1bHRfYXV0aHR5cGUoTlVMTCksIGkpOworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbiA9IGk7CisgICAgfQorCisgICAgaWYgKGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuID4gMCkgeworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90byA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZQcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuKTsKKyAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvID09IE5VTEwpIHsKKyAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfTUFMTE9DOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfTUFMTE9DOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChnZXRfZGVmYXVsdF9wcml2dHlwZSgmaSkgIT0gTlVMTCkgeworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90byA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChnZXRfZGVmYXVsdF9wcml2dHlwZShOVUxMKSwgaSk7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuID0gaTsKKyAgICB9CisKKyAgICBpZiAoKGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiA8PSAwKSAmJgorICAgICAgICAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisJCQkJICAgICBORVRTTk1QX0RTX0xJQl9BVVRITUFTVEVSS0VZKSkpKSB7CisgICAgICAgIHNpemVfdCBidWZsZW4gPSBzaXplb2Yoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5KTsKKyAgICAgICAgdV9jaGFyICp0bXBwID0gc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5OworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gPSAwOworICAgICAgICAvKiBpdCB3aWxsIGJlIGEgaGV4IHN0cmluZyAqLworICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdG1wcCwgJmJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiwgMCwgY3ApKSB7CisgICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwoImVycm9yIHBhcnNpbmcgYXV0aGVudGljYXRpb24gbWFzdGVyIGtleSIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoKGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiA8PSAwKSAmJgorICAgICAgICAgICAgICAgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BVVRIUEFTU1BIUkFTRSkpIHx8CisgICAgICAgICAgICAgICAgKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UpKSkpIHsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuID0gVVNNX0FVVEhfS1VfTEVOOworICAgICAgICBpZiAoZ2VuZXJhdGVfS3Uoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgY3AsIHN0cmxlbihjcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbAorICAgICAgICAgICAgICAgICgiRXJyb3IgZ2VuZXJhdGluZyBhIGtleSAoS3UpIGZyb20gdGhlIHN1cHBsaWVkIGF1dGhlbnRpY2F0aW9uIHBhc3MgcGhyYXNlLiIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIAorICAgIGlmICgoaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuIDw9IDApICYmCisgICAgICAgICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKwkJCQkgICAgIE5FVFNOTVBfRFNfTElCX1BSSVZNQVNURVJLRVkpKSkpIHsKKyAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IHNpemVvZihzZXNzaW9uLT5zZWN1cml0eVByaXZLZXkpOworICAgICAgICB1X2NoYXIgKnRtcHAgPSBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXk7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiA9IDA7CisgICAgICAgIC8qIGl0IHdpbGwgYmUgYSBoZXggc3RyaW5nICovCisgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ0bXBwLCAmYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuLCAwLCBjcCkpIHsKKyAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbCgiZXJyb3IgcGFyc2luZyBlbmNyeXB0aW9uIG1hc3RlciBrZXkiKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKChpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gPD0gMCkgJiYKKyAgICAgICAgICAgICAgICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUFJJVlBBU1NQSFJBU0UpKSB8fAorICAgICAgICAgICAgICAgIChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFKSkpKSB7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiA9IFVTTV9QUklWX0tVX0xFTjsKKyAgICAgICAgaWYgKGdlbmVyYXRlX0t1KHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGNwLCBzdHJsZW4oY3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwKKyAgICAgICAgICAgICAgICAoIkVycm9yIGdlbmVyYXRpbmcgYSBrZXkgKEt1KSBmcm9tIHRoZSBzdXBwbGllZCBwcml2YWN5IHBhc3MgcGhyYXNlLiIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKworLyoKKyAqIHVzbV9jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKToKKyAqIAorICogY3JlYXRlcyBhIHVzZXIgaW4gdGhlIHVzbSB0YWJsZSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiBhIHNlc3Npb24uCisgKiBJZiB0aGUgdXNlciBhbHJlYWR5IGV4aXN0cywgaXQgaXMgdXBkYXRlZCB3aXRoIHRoZSBjdXJyZW50CisgKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXNzaW9uCisgKiAKKyAqIFBhcmFtZXRlcnM6CisgKiBzZXNzaW9uIC0tIElOOiBwb2ludGVyIHRvIHRoZSBzZXNzaW9uIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSB1c2VyLgorICogCisgKiBSZXR1cm5zOgorICogU05NUEVSUl9TVUNDRVNTCisgKiBTTk1QRVJSX0dFTkVSUiAKKyAqLworaW50Cit1c21fY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24pCit7CisgICAgc3RydWN0IHVzbVVzZXIgKnVzZXI7CisgICAgaW50ICAgICAgICAgICAgIHVzZXJfanVzdF9jcmVhdGVkID0gMDsKKyAgICBjaGFyICpjcDsKKworICAgIC8qCisgICAgICogLSBkb24ndCBjcmVhdGUtYW5vdGhlci9jb3B5LWludG8gdXNlciBmb3IgdGhpcyBzZXNzaW9uIGJ5IGRlZmF1bHQKKyAgICAgKiAtIGJhaWwgbm93IChubyBlcnJvcikgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbmdpbmVJRAorICAgICAqLworICAgIGlmIChTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRCA9PSAoc2Vzc2lvbi0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRCkgfHwKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlNb2RlbCAhPSBTTk1QX1NFQ19NT0RFTF9VU00gfHwKKyAgICAgICAgc2Vzc2lvbi0+dmVyc2lvbiAhPSBTTk1QX1ZFUlNJT05fMyB8fAorICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWVMZW4gPT0gMCB8fAorICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApCisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgidXNtIiwgIm5vIGZsYWcgZGVmaW5lZC4uLiAgY29udGludWluZ1xuIikpOworICAgIHNlc3Npb24tPmZsYWdzIHw9IFNOTVBfRkxBR1NfVVNFUl9DUkVBVEVEOworCisgICAgLyoKKyAgICAgKiBub3cgdGhhdCB3ZSBoYXZlIHRoZSBlbmdpbmVJRCwgY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBVU00gbGlzdAorICAgICAqIGZvciB0aGlzIHVzZXIgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzZXNzaW9uIAorICAgICAqLworICAgIHVzZXIgPSB1c21fZ2V0X3VzZXJfZnJvbV9saXN0KHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtX2dldF91c2VyTGlzdCgpLCAwKTsKKyAgICBERUJVR01TR1RMKCgidXNtIiwgInVzZXIgZXhpc3RzPyB4PSVwXG4iLCB1c2VyKSk7CisgICAgaWYgKHVzZXIgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIkJ1aWxkaW5nIHVzZXIgJXMuLi5cbiIsCisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZSkpOworICAgICAgICAvKgorICAgICAgICAgKiB1c2VyIGRvZXNuJ3QgZXhpc3Qgc28gd2UgY3JlYXRlIGFuZCBhZGQgaXQgCisgICAgICAgICAqLworICAgICAgICB1c2VyID0gKHN0cnVjdCB1c21Vc2VyICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHVzbVVzZXIpKTsKKyAgICAgICAgaWYgKHVzZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKworICAgICAgICAvKgorICAgICAgICAgKiBjb3B5IGluIHRoZSBzZWN1cml0eU5hbWUgCisgICAgICAgICAqLworICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKSB7CisgICAgICAgICAgICB1c2VyLT5uYW1lID0gc3RyZHVwKHNlc3Npb24tPnNlY3VyaXR5TmFtZSk7CisgICAgICAgICAgICB1c2VyLT5zZWNOYW1lID0gc3RyZHVwKHNlc3Npb24tPnNlY3VyaXR5TmFtZSk7CisgICAgICAgICAgICBpZiAodXNlci0+bmFtZSA9PSBOVUxMIHx8IHVzZXItPnNlY05hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBpbiB0aGUgZW5naW5lSUQgCisgICAgICAgICAqLworICAgICAgICB1c2VyLT5lbmdpbmVJRCA9IG5ldHNubXBfbWVtZHVwKHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbik7CisgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlEICYmICF1c2VyLT5lbmdpbmVJRCkgeworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICB1c2VyLT5lbmdpbmVJRExlbiA9IHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW47CisKKyAgICAgICAgdXNlcl9qdXN0X2NyZWF0ZWQgPSAxOworICAgIH0KKworICAgIC8qCisgICAgICogY29weSB0aGUgYXV0aCBwcm90b2NvbCAKKyAgICAgKi8KKyAgICBpZiAodXNlci0+YXV0aFByb3RvY29sID09IE5VTEwgJiYgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8gIT0gTlVMTCkgeworICAgICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aFByb3RvY29sKTsKKyAgICAgICAgdXNlci0+YXV0aFByb3RvY29sID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4pOworICAgICAgICBpZiAodXNlci0+YXV0aFByb3RvY29sID09IE5VTEwpIHsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgdXNlci0+YXV0aFByb3RvY29sTGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjb3B5IHRoZSBwcml2IHByb3RvY29sIAorICAgICAqLworICAgIGlmICh1c2VyLT5wcml2UHJvdG9jb2wgPT0gTlVMTCAmJiBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90byAhPSBOVUxMKSB7CisgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2UHJvdG9jb2wpOworICAgICAgICB1c2VyLT5wcml2UHJvdG9jb2wgPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbik7CisgICAgICAgIGlmICh1c2VyLT5wcml2UHJvdG9jb2wgPT0gTlVMTCkgeworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICB1c2VyLT5wcml2UHJvdG9jb2xMZW4gPSBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNvcHkgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIEtleS4gIElmIG5vdCBsb2NhbGl6ZWQsIGxvY2FsaXplIGl0IAorICAgICAqLworICAgIGlmICh1c2VyLT5hdXRoS2V5ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5ICE9IE5VTEwKKyAgICAgICAgICAgICYmIHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5TGVuICE9IDApIHsKKyAgICAgICAgICAgIC8qIGFscmVhZHkgbG9jYWxpemVkIGtleSBwYXNzZWQgaW4uICB1c2UgaXQgKi8KKyAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoS2V5KTsKKyAgICAgICAgICAgIHVzZXItPmF1dGhLZXkgPSBuZXRzbm1wX21lbWR1cChzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleUxlbik7CisgICAgICAgICAgICBpZiAoIXVzZXItPmF1dGhLZXkpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVzZXItPmF1dGhLZXlMZW4gPSBzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleUxlbjsKKyAgICAgICAgfSBlbHNlIGlmIChzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXkgIT0gTlVMTAorICAgICAgICAgICAgICAgICAgICYmIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiAhPSAwKSB7CisgICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aEtleSk7CisgICAgICAgICAgICB1c2VyLT5hdXRoS2V5ID0gKHVfY2hhciAqKSBjYWxsb2MoMSwgVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0spOworICAgICAgICAgICAgaWYgKHVzZXItPmF1dGhLZXkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXNlci0+YXV0aEtleUxlbiA9IFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLOworICAgICAgICAgICAgaWYgKGdlbmVyYXRlX2t1bCh1c2VyLT5hdXRoUHJvdG9jb2wsIHVzZXItPmF1dGhQcm90b2NvbExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4sIHVzZXItPmF1dGhLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5hdXRoS2V5TGVuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVVUSExPQ0FMSVpFREtFWSkpKSB7CisgICAgICAgICAgICBzaXplX3QgYnVmbGVuID0gVVNNX0FVVEhfS1VfTEVOOworICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhLZXkpOworICAgICAgICAgICAgdXNlci0+YXV0aEtleSA9ICh1X2NoYXIgKiltYWxsb2MoYnVmbGVuKTsgLyogbWF4IGxlbmd0aCBuZWVkZWQgKi8KKyAgICAgICAgICAgIHVzZXItPmF1dGhLZXlMZW4gPSAwOworICAgICAgICAgICAgLyogaXQgd2lsbCBiZSBhIGhleCBzdHJpbmcgKi8KKyAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ1c2VyLT5hdXRoS2V5LCAmYnVmbGVuLCAmdXNlci0+YXV0aEtleUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGNwKSkgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjb3B5IGluIHRoZSBwcml2YWN5IEtleS4gIElmIG5vdCBsb2NhbGl6ZWQsIGxvY2FsaXplIGl0IAorICAgICAqLworICAgIGlmICh1c2VyLT5wcml2S2V5ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5ICE9IE5VTEwKKyAgICAgICAgICAgICYmIHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuICE9IDApIHsKKyAgICAgICAgICAgIC8qIGFscmVhZHkgbG9jYWxpemVkIGtleSBwYXNzZWQgaW4uICB1c2UgaXQgKi8KKyAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2S2V5KTsKKyAgICAgICAgICAgIHVzZXItPnByaXZLZXkgPSBuZXRzbm1wX21lbWR1cChzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleUxlbik7CisgICAgICAgICAgICBpZiAoIXVzZXItPnByaXZLZXkpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVzZXItPnByaXZLZXlMZW4gPSBzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleUxlbjsKKyAgICAgICAgfSBlbHNlIGlmIChzZXNzaW9uLT5zZWN1cml0eVByaXZLZXkgIT0gTlVMTAorICAgICAgICAgICAgICAgICAgICYmIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiAhPSAwKSB7CisgICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdktleSk7CisgICAgICAgICAgICB1c2VyLT5wcml2S2V5ID0gKHVfY2hhciAqKSBjYWxsb2MoMSwgVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0spOworICAgICAgICAgICAgaWYgKHVzZXItPnByaXZLZXkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXNlci0+cHJpdktleUxlbiA9IFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLOworICAgICAgICAgICAgaWYgKGdlbmVyYXRlX2t1bCh1c2VyLT5hdXRoUHJvdG9jb2wsIHVzZXItPmF1dGhQcm90b2NvbExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4sIHVzZXItPnByaXZLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5wcml2S2V5TGVuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUFJJVkxPQ0FMSVpFREtFWSkpKSB7CisgICAgICAgICAgICBzaXplX3QgYnVmbGVuID0gVVNNX1BSSVZfS1VfTEVOOworICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPnByaXZLZXkpOworICAgICAgICAgICAgdXNlci0+cHJpdktleSA9ICh1X2NoYXIgKiltYWxsb2MoYnVmbGVuKTsgLyogbWF4IGxlbmd0aCBuZWVkZWQgKi8KKyAgICAgICAgICAgIHVzZXItPnByaXZLZXlMZW4gPSAwOworICAgICAgICAgICAgLyogaXQgd2lsbCBiZSBhIGhleCBzdHJpbmcgKi8KKyAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ1c2VyLT5wcml2S2V5LCAmYnVmbGVuLCAmdXNlci0+cHJpdktleUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGNwKSkgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHVzZXJfanVzdF9jcmVhdGVkKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGFkZCB0aGUgdXNlciBpbnRvIHRoZSBkYXRhYmFzZSAKKyAgICAgICAgICovCisgICAgICAgIHVzZXItPnVzZXJTdGF0dXMgPSBSU19BQ1RJVkU7CisgICAgICAgIHVzZXItPnVzZXJTdG9yYWdlVHlwZSA9IFNUX1JFQURPTkxZOworICAgICAgICB1c21fYWRkX3VzZXIodXNlcik7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworCit9CisKKy8qIEEgd3JhcHBlciBhcm91bmQgdGhlIGhvb2sgKi8KK2ludAordXNtX2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbl9ob29rKHZvaWQgKnNscCwgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKQoreworICAgIERFQlVHTVNHVEwoKCJ1c20iLCAicG90ZW50aWFsbHkgYm9vdHN0cmFwcGluZyB0aGUgVVNNIHRhYmxlIGZyb20gc2Vzc2lvbiBkYXRhXG4iKSk7CisgICAgcmV0dXJuIHVzbV9jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24oc2Vzc2lvbik7Cit9CisKK3N0YXRpYyBpbnQKK3VzbV9idWlsZF9wcm9iZV9wZHUobmV0c25tcF9wZHUgKipwZHUpCit7CisgICAgc3RydWN0IHVzbVVzZXIgKnVzZXI7CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSB0aGUgcGR1IAorICAgICAqLworICAgIGlmICghcGR1KQorICAgICAgICByZXR1cm4gLTE7CisgICAgKnBkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19HRVQpOworICAgIGlmICghKCpwZHUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgKCpwZHUpLT52ZXJzaW9uID0gU05NUF9WRVJTSU9OXzM7CisgICAgKCpwZHUpLT5zZWN1cml0eU5hbWUgPSBzdHJkdXAoIiIpOworICAgICgqcGR1KS0+c2VjdXJpdHlOYW1lTGVuID0gc3RybGVuKCgqcGR1KS0+c2VjdXJpdHlOYW1lKTsKKyAgICAoKnBkdSktPnNlY3VyaXR5TGV2ZWwgPSBTTk1QX1NFQ19MRVZFTF9OT0FVVEg7CisgICAgKCpwZHUpLT5zZWN1cml0eU1vZGVsID0gU05NUF9TRUNfTU9ERUxfVVNNOworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgdGhlIGVtcHR5IHVzZXIgCisgICAgICovCisgICAgdXNlciA9IHVzbV9nZXRfdXNlcihOVUxMLCAwLCAoKnBkdSktPnNlY3VyaXR5TmFtZSk7CisgICAgaWYgKHVzZXIgPT0gTlVMTCkgeworICAgICAgICB1c2VyID0gKHN0cnVjdCB1c21Vc2VyICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHVzbVVzZXIpKTsKKyAgICAgICAgaWYgKHVzZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgc25tcF9mcmVlX3BkdSgqcGR1KTsKKyAgICAgICAgICAgICpwZHUgPSAobmV0c25tcF9wZHUgKikgTlVMTDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICB1c2VyLT5uYW1lID0gc3RyZHVwKCgqcGR1KS0+c2VjdXJpdHlOYW1lKTsKKyAgICAgICAgdXNlci0+c2VjTmFtZSA9IHN0cmR1cCgoKnBkdSktPnNlY3VyaXR5TmFtZSk7CisgICAgICAgIHVzZXItPmF1dGhQcm90b2NvbExlbiA9IHNpemVvZih1c21Ob0F1dGhQcm90b2NvbCkgLyBzaXplb2Yob2lkKTsKKyAgICAgICAgdXNlci0+YXV0aFByb3RvY29sID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHVzbU5vQXV0aFByb3RvY29sLCB1c2VyLT5hdXRoUHJvdG9jb2xMZW4pOworICAgICAgICB1c2VyLT5wcml2UHJvdG9jb2xMZW4gPSBzaXplb2YodXNtTm9Qcml2UHJvdG9jb2wpIC8gc2l6ZW9mKG9pZCk7CisgICAgICAgIHVzZXItPnByaXZQcm90b2NvbCA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZCh1c21Ob1ByaXZQcm90b2NvbCwgdXNlci0+cHJpdlByb3RvY29sTGVuKTsKKyAgICAgICAgdXNtX2FkZF91c2VyKHVzZXIpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzbV9kaXNjb3Zlcl9lbmdpbmVpZCh2b2lkICpzbHB2LCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgICBuZXRzbm1wX3BkdSAgICAqcGR1ID0gTlVMTCwgKnJlc3BvbnNlID0gTlVMTDsKKyAgICBpbnQgc3RhdHVzLCBpOworICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNscCA9IChzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICopIHNscHY7CisKKyAgICBpZiAodXNtX2J1aWxkX3Byb2JlX3BkdSgmcGR1KSAhPSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJ1bmFibGUgdG8gY3JlYXRlIHByb2JlIFBEVVxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKyAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAicHJvYmluZyBmb3IgZW5naW5lSUQuLi5cbiIpKTsKKyAgICBzZXNzaW9uLT5mbGFncyB8PSBTTk1QX0ZMQUdTX0RPTlRfUFJPQkU7IC8qIHByZXZlbnQgcmVjdXJzaW9uICovCisgICAgc3RhdHVzID0gc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHNscCwgcGR1LCAmcmVzcG9uc2UpOworCisgICAgaWYgKChyZXNwb25zZSA9PSBOVUxMKSAmJiAoc3RhdHVzID09IFNUQVRfU1VDQ0VTUykpIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVF9FUlJPUjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgU1RBVF9TVUNDRVNTOgorICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0lOVkFMSURfTVNHOyAvKiBYWD8/ICovCisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3Nfb3BlbiIsCisgICAgICAgICAgICAgICAgICAgICJlcnJvcjogZXhwZWN0ZWQgUmVwb3J0IGFzIHJlc3BvbnNlIHRvIHByb2JlOiAlcyAoJWxkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgc25tcF9lcnJzdHJpbmcocmVzcG9uc2UtPmVycnN0YXQpLAorICAgICAgICAgICAgICAgICAgICByZXNwb25zZS0+ZXJyc3RhdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNUQVRfRVJST1I6ICAgLyogdGhpcyBpcyB3aGF0IHdlIGV4cGVjdGVkIC0+IFJlcG9ydCA9PSBTVEFUX0VSUk9SICovCisgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVU5LTk9XTl9FTkdfSUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1RBVF9USU1FT1VUOgorICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1RJTUVPVVQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3Nfb3BlbiIsCisgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gY29ubmVjdCB3aXRoIHJlbW90ZSBlbmdpbmU6ICVzICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHNubXBfYXBpX2VycnN0cmluZyhzZXNzaW9uLT5zX3NubXBfZXJybm8pLAorICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHNscC0+c2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsCisgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gZGV0ZXJtaW5lIHJlbW90ZSBlbmdpbmUgSURcbiIpKTsKKyAgICAgICAgLyogY2xlYXIgdGhlIGZsYWcgc28gdGhhdCBwcm9iZSBvY2N1cnMgb24gbmV4dCBpbmZvcm0gKi8KKyAgICAgICAgc2Vzc2lvbi0+ZmxhZ3MgJj0gflNOTVBfRkxBR1NfRE9OVF9QUk9CRTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1NVQ0NFU1M7CisgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3Nfb3BlbiIsCisgICAgICAgICAgICAgICAgICAgICIgIHByb2JlIGZvdW5kIGVuZ2luZUlEOiAgIikpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2xwLT5zZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuOyBpKyspCisgICAgICAgICAgICBERUJVR01TRygoInNubXBfc2Vzc19vcGVuIiwgIiUwMngiLAorICAgICAgICAgICAgICAgICAgICAgIHNscC0+c2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRFtpXSkpOworICAgICAgICBERUJVR01TRygoInNubXBfc2Vzc19vcGVuIiwgIlxuIikpOworICAgIH0KKworICAgIC8qCisgICAgICogaWYgYm9vdC90aW1lIHN1cHBsaWVkIHNldCBpdCBmb3IgdGhpcyBlbmdpbmVJRCAKKyAgICAgKi8KKyAgICBpZiAoc2Vzc2lvbi0+ZW5naW5lQm9vdHMgfHwgc2Vzc2lvbi0+ZW5naW5lVGltZSkgeworICAgICAgICBzZXRfZW5naW5ldGltZShzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAorICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuLAorICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5lbmdpbmVCb290cywgc2Vzc2lvbi0+ZW5naW5lVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7CisgICAgfQorICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKIHZvaWQKIGluaXRfdXNtKHZvaWQpCiB7CiAgICAgc3RydWN0IHNubXBfc2VjbW9kX2RlZiAqZGVmOworICAgIGNoYXIgKnR5cGU7CiAKLSAgICBERUJVR01TR1RMKCgiaW5pdF91c20iLCAidW5pdF91c206ICVkICVkXG4iLCB1c21Ob1ByaXZQcm90b2NvbFswXSwKLSAgICAgICAgICAgICAgICB1c21Ob1ByaXZQcm90b2NvbFsxXSkpOworICAgIERFQlVHTVNHVEwoKCJpbml0X3VzbSIsICJ1bml0X3VzbTogJSIgTkVUU05NUF9QUklvICJ1ICUiIE5FVFNOTVBfUFJJbyAidVxuIiwKKyAgICAgICAgICAgICAgICB1c21Ob1ByaXZQcm90b2NvbFswXSwgdXNtTm9Qcml2UHJvdG9jb2xbMV0pKTsKIAogICAgIHNjX2luaXQoKTsgICAgICAgICAgICAgICAgICAvKiBpbml0YWxpemUgc2NhcGkgY29kZSAqLwogCkBAIC0yNzc3LDYgKzMyMDgsOCBAQAogICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyBhcyBhIHNlY3VyaXR5IHNlcnZpY2UgCiAgICAgICovCiAgICAgZGVmID0gU05NUF9NQUxMT0NfU1RSVUNUKHNubXBfc2VjbW9kX2RlZik7CisgICAgaWYgKGRlZiA9PSBOVUxMKQorICAgICAgICByZXR1cm47CiAgICAgLyoKICAgICAgKiBYWFg6IGRlZi0+aW5pdF9zZXNzX3NlY21vZCBtb3ZlIHN0dWZmIGZyb20gc25tcF9hcGkuYyAKICAgICAgKi8KQEAgLTI3ODQsNyArMzIxNywxMCBAQAogICAgIGRlZi0+ZW5jb2RlX2ZvcndhcmQgPSB1c21fc2VjbW9kX2dlbmVyYXRlX291dF9tc2c7CiAgICAgZGVmLT5kZWNvZGUgPSB1c21fc2VjbW9kX3Byb2Nlc3NfaW5fbXNnOwogICAgIGRlZi0+cGR1X2ZyZWVfc3RhdGVfcmVmID0gdXNtX2ZyZWVfdXNtU3RhdGVSZWZlcmVuY2U7CisgICAgZGVmLT5zZXNzaW9uX3NldHVwID0gdXNtX3Nlc3Npb25faW5pdDsKICAgICBkZWYtPmhhbmRsZV9yZXBvcnQgPSB1c21faGFuZGxlX3JlcG9ydDsKKyAgICBkZWYtPnByb2JlX2VuZ2luZWlkID0gdXNtX2Rpc2NvdmVyX2VuZ2luZWlkOworICAgIGRlZi0+cG9zdF9wcm9iZV9lbmdpbmVpZCA9IHVzbV9jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb25faG9vazsKICAgICByZWdpc3Rlcl9zZWNfbW9kKFVTTV9TRUNfTU9ERUxfTlVNQkVSLCAidXNtIiwgZGVmKTsKIAogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLApAQCAtMjc5OSw2ICszMjM1LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NIVVRET1dOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9lbmdpbmVJRCwgTlVMTCk7CiAKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJkZWZBdXRoVHlwZSIsIHNubXB2M19hdXRodHlwZV9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICJNRDV8U0hBIik7CisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiZGVmUHJpdlR5cGUiLCBzbm1wdjNfcHJpdnR5cGVfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorI2lmZGVmIEhBVkVfQUVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFU3xBRVMiCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERVMgKEFFUyBzdXBwb3J0IG5vdCBhdmFpbGFibGUpIgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgLyoKKyAgICAgKiBGcmVlIHN0dWZmIGF0IHNodXRkb3duIHRpbWUKKyAgICAgKi8KKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU0hVVERPV04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX2VuZ2luZXRpbWVfb25fc2h1dGRvd24sIE5VTEwpOworCisKKyAgICB0eXBlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CisKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldEF1dGhQYXNzIiwgdXNtX3NldF9wYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldFByaXZQYXNzIiwgdXNtX3NldF9wYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldEF1dGhLZXkiLCB1c21fc2V0X3Bhc3N3b3JkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0UHJpdktleSIsIHVzbV9zZXRfcGFzc3dvcmQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRBdXRoTG9jYWxLZXkiLCB1c21fc2V0X3Bhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0UHJpdkxvY2FsS2V5IiwgdXNtX3NldF9wYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKIH0KIAogdm9pZApAQCAtMjkwNyw2ICszMzc2LDEzIEBACiAKIH0KIAordm9pZAorc2h1dGRvd25fdXNtKHZvaWQpCit7CisgICAgZnJlZV9ldGltZWxpc3QoKTsKKyAgICBjbGVhcl91c2VyX2xpc3QoKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKICAqIHVzbV9jaGVja19zZWNMZXZlbAogICoKQEAgLTI5MjcsOCArMzQwMyw4IEBACiAgICAgaWYgKHVzZXItPnVzZXJTdGF0dXMgIT0gUlNfQUNUSVZFKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBERUJVR01TR1RMKCgiY29tcGFyZXgiLCAiQ29tcGFyaW5nOiAlZCAlZCAiLCB1c21Ob1ByaXZQcm90b2NvbFswXSwKLSAgICAgICAgICAgICAgICB1c21Ob1ByaXZQcm90b2NvbFsxXSkpOworICAgIERFQlVHTVNHVEwoKCJjb21wYXJleCIsICJDb21wYXJpbmc6ICUiIE5FVFNOTVBfUFJJbyAidSAlIiBORVRTTk1QX1BSSW8gInUgIiwKKyAgICAgICAgICAgICAgICB1c21Ob1ByaXZQcm90b2NvbFswXSwgdXNtTm9Qcml2UHJvdG9jb2xbMV0pKTsKICAgICBERUJVR01TR09JRCgoImNvbXBhcmV4IiwgdXNtTm9Qcml2UHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgIHNpemVvZih1c21Ob1ByaXZQcm90b2NvbCkgLyBzaXplb2Yob2lkKSkpOwogICAgIERFQlVHTVNHKCgiY29tcGFyZXgiLCAiXG4iKSk7CkBAIC0zMzEyLDYgKzM3ODgsNyBAQAogCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIC8qCiAgKiB0YWtlIGEgZ2l2ZW4gdXNlciBhbmQgY2xvbmUgdGhlIHNlY3VyaXR5IGluZm8gaW50byBhbm90aGVyIAogICovCkBAIC0zMzc1LDYgKzM4NTIsNyBAQAogICAgIH0KICAgICByZXR1cm4gdG87CiB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiB1c21fY3JlYXRlX3VzZXIodm9pZCk6CkBAIC0zNTQyLDExICs0MDIwLDExIEBACiAgICAgKmNwdHIrKyA9ICcgJzsKICAgICBjcHRyID0gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoY3B0ciwgKHVfY2hhciAqKSB1c2VyLT5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlci0+bmFtZSA9PSBOVUxMKSA/IDAgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4odXNlci0+bmFtZSkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHVzZXItPm5hbWUpKTsKICAgICAqY3B0cisrID0gJyAnOwogICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZyhjcHRyLCAodV9jaGFyICopIHVzZXItPnNlY05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyLT5zZWNOYW1lID09IE5VTEwpID8gMCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih1c2VyLT5zZWNOYW1lKSArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4odXNlci0+c2VjTmFtZSkpOwogICAgICpjcHRyKysgPSAnICc7CiAgICAgY3B0ciA9CiAgICAgICAgIHJlYWRfY29uZmlnX3NhdmVfb2JqaWQoY3B0ciwgdXNlci0+Y2xvbmVGcm9tLCB1c2VyLT5jbG9uZUZyb21MZW4pOwpAQCAtMzU2NiwxMSArNDA0NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXItPnByaXZLZXlMZW4pOwogICAgICpjcHRyKysgPSAnICc7CiAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKGNwdHIsIHVzZXItPnVzZXJQdWJsaWNTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyLT51c2VyUHVibGljU3RyaW5nID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSA/IDAgOiBzdHJsZW4oKGNoYXIgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyUHVibGljU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLT51c2VyUHVibGljU3RyaW5nTGVuKTsKKwogICAgIHJlYWRfY29uZmlnX3N0b3JlKHR5cGUsIGxpbmUpOwogfQogCkBAIC0zNTc5LDcgKzQwNTQsNyBAQAogICogYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBzdHJ1Y3QgdXNtVXNlci4gCiAgKi8KIHN0cnVjdCB1c21Vc2VyICoKLXVzbV9yZWFkX3VzZXIoY2hhciAqbGluZSkKK3VzbV9yZWFkX3VzZXIoY29uc3QgY2hhciAqbGluZSkKIHsKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNlcjsKICAgICBzaXplX3QgICAgICAgICAgbGVuOwpAQCAtMzU5MCwxMSArNDA2NSwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHVzZXItPnVzZXJTdGF0dXMgPSBhdG9pKGxpbmUpOwotICAgIGxpbmUgPSBza2lwX3Rva2VuKGxpbmUpOworICAgIGxpbmUgPSBza2lwX3Rva2VuX2NvbnN0KGxpbmUpOwogICAgIHVzZXItPnVzZXJTdG9yYWdlVHlwZSA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7Ci0gICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGxpbmUsICZ1c2VyLT5lbmdpbmVJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmVuZ2luZUlETGVuKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKKyAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QobGluZSwgJnVzZXItPmVuZ2luZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+ZW5naW5lSURMZW4pOwogCiAgICAgLyoKICAgICAgKiBzZXQgdGhlIGxjZCBlbnRyeSBmb3IgdGhpcyBlbmdpbmVJRCB0byB0aGUgbWluaW11bSBib290cy90aW1lCkBAIC0zNjExLDIyICs0MDg2LDIxIEBACiAgICAgU05NUF9GUkVFKHVzZXItPmNsb25lRnJvbSk7CiAgICAgdXNlci0+Y2xvbmVGcm9tTGVuID0gMDsKIAotICAgIGxpbmUgPQotICAgICAgICByZWFkX2NvbmZpZ19yZWFkX29iamlkKGxpbmUsICZ1c2VyLT5jbG9uZUZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmNsb25lRnJvbUxlbik7CisgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2JqaWRfY29uc3QobGluZSwgJnVzZXItPmNsb25lRnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+Y2xvbmVGcm9tTGVuKTsKIAogICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoUHJvdG9jb2wpOwogICAgIHVzZXItPmF1dGhQcm90b2NvbExlbiA9IDA7CiAKLSAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vYmppZChsaW5lLCAmdXNlci0+YXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5hdXRoUHJvdG9jb2xMZW4pOwotICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhsaW5lLCAmdXNlci0+YXV0aEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmF1dGhLZXlMZW4pOworICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KGxpbmUsICZ1c2VyLT5hdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmF1dGhQcm90b2NvbExlbik7CisgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KGxpbmUsICZ1c2VyLT5hdXRoS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YXV0aEtleUxlbik7CiAgICAgU05NUF9GUkVFKHVzZXItPnByaXZQcm90b2NvbCk7CiAgICAgdXNlci0+cHJpdlByb3RvY29sTGVuID0gMDsKIAotICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29iamlkKGxpbmUsICZ1c2VyLT5wcml2UHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPnByaXZQcm90b2NvbExlbik7CisgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2JqaWRfY29uc3QobGluZSwgJnVzZXItPnByaXZQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+cHJpdlByb3RvY29sTGVuKTsKICAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcobGluZSwgJnVzZXItPnByaXZLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5wcml2S2V5TGVuKTsKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUwpAQCAtMzY0Niw3ICs0MTIwLDcgQEAKICAgICB9CiAKICAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcobGluZSwgJnVzZXItPnVzZXJQdWJsaWNTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+dXNlclB1YmxpY1N0cmluZ0xlbik7CiAgICAgcmV0dXJuIHVzZXI7CiB9CiAKQEAgLTM4NDQsMyArNDMxOCwzNTUgQEAKICAgICAgICAgfQogICAgIH0KIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHVzbV9zZXRfcGFzc3dvcmQoKSAqLworCit2b2lkCit1c21fcGFyc2VfY3JlYXRlX3VzbVVzZXIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit7CisgICAgY2hhciAgICAgICAgICAgKmNwOworICAgIGNoYXIgICAgICAgICAgICBidWZbU05NUF9NQVhCVUZfTUVESVVNXTsKKyAgICBzdHJ1Y3QgdXNtVXNlciAqbmV3dXNlcjsKKyAgICB1X2NoYXIgICAgICAgICAgdXNlcktleVtTTk1QX01BWEJVRl9TTUFMTF0sICp0bXBwOworICAgIHNpemVfdCAgICAgICAgICB1c2VyS2V5TGVuID0gU05NUF9NQVhCVUZfU01BTEw7CisgICAgc2l6ZV90ICAgICAgICAgIHByaXZLZXlMZW4gPSAwOworICAgIHNpemVfdCAgICAgICAgICByZXQ7CisgICAgaW50ICAgICAgICAgICAgIHJldDI7CisgICAgaW50ICAgICAgICAgICAgIHRlc3RjYXNlOworCisgICAgbmV3dXNlciA9IHVzbV9jcmVhdGVfdXNlcigpOworCisgICAgLyoKKyAgICAgKiBSRUFEOiBTZWN1cml0eSBOYW1lIAorICAgICAqLworICAgIGNwID0gY29weV9ud29yZChsaW5lLCBidWYsIHNpemVvZihidWYpKTsKKworICAgIC8qCisgICAgICogbWlnaHQgYmUgYSAtZSBFTkdJTkVJRCBhcmd1bWVudCAKKyAgICAgKi8KKyAgICBpZiAoc3RyY21wKGJ1ZiwgIi1lIikgPT0gMCkgeworICAgICAgICBzaXplX3QgICAgICAgICAgZWJ1Zl9sZW4gPSAzMiwgZW91dF9sZW4gPSAwOworICAgICAgICB1X2NoYXIgICAgICAgICAqZWJ1ZiA9ICh1X2NoYXIgKikgbWFsbG9jKGVidWZfbGVuKTsKKworICAgICAgICBpZiAoZWJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIC1lIGZsYWciKTsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBHZXQgdGhlIHNwZWNpZmllZCBlbmdpbmVpZCBmcm9tIHRoZSBsaW5lLiAgCisgICAgICAgICAqLworICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmZWJ1ZiwgJmVidWZfbGVuLCAmZW91dF9sZW4sIDEsIGJ1ZikpIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQgRW5naW5lSUQgYXJndW1lbnQgdG8gLWUiKTsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICBTTk1QX0ZSRUUoZWJ1Zik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRCA9IGVidWY7CisgICAgICAgIG5ld3VzZXItPmVuZ2luZUlETGVuID0gZW91dF9sZW47CisgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmV3dXNlci0+ZW5naW5lSUQgPSBzbm1wdjNfZ2VuZXJhdGVfZW5naW5lSUQoJnJldCk7CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRExlbiA9IHJldDsKKyAgICB9CisKKyAgICBuZXd1c2VyLT5zZWNOYW1lID0gc3RyZHVwKGJ1Zik7CisgICAgbmV3dXNlci0+bmFtZSA9IHN0cmR1cChidWYpOworCisgICAgaWYgKCFjcCkKKyAgICAgICAgZ290byBhZGQ7ICAgICAgICAgICAgICAgLyogbm8gYXV0aGVudGljYXRpb24gb3IgcHJpdmFjeSB0eXBlICovCisKKyAgICAvKgorICAgICAqIFJFQUQ6IEF1dGhlbnRpY2F0aW9uIFR5cGUgCisgICAgICovCisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKKyAgICBpZiAoc3RybmNtcChjcCwgIk1ENSIsIDMpID09IDApIHsKKyAgICAgICAgbWVtY3B5KG5ld3VzZXItPmF1dGhQcm90b2NvbCwgdXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgIHNpemVvZih1c21ITUFDTUQ1QXV0aFByb3RvY29sKSk7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgaWYgKHN0cm5jbXAoY3AsICJTSEEiLCAzKSA9PSAwKSB7CisgICAgICAgIG1lbWNweShuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCIpOworICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY3AgPSBza2lwX3Rva2VuKGNwKTsKKworICAgIC8qCisgICAgICogUkVBRDogQXV0aGVudGljYXRpb24gUGFzcyBQaHJhc2Ugb3Iga2V5CisgICAgICovCisgICAgaWYgKCFjcCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJubyBhdXRoZW50aWNhdGlvbiBwYXNzIHBocmFzZSIpOworICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgaWYgKHN0cmNtcChidWYsIi1tIikgPT0gMCkgeworICAgICAgICAvKiBhIG1hc3RlciBrZXkgaXMgc3BlY2lmaWVkICovCisgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIHJldCA9IHNpemVvZih1c2VyS2V5KTsKKyAgICAgICAgdG1wcCA9IHVzZXJLZXk7CisgICAgICAgIHVzZXJLZXlMZW4gPSAwOworICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdG1wcCwgJnJldCwgJnVzZXJLZXlMZW4sIDAsIGJ1ZikpIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQga2V5IHZhbHVlIGFyZ3VtZW50IHRvIC1tIik7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzdHJjbXAoYnVmLCItbCIpICE9IDApIHsKKyAgICAgICAgLyogYSBwYXNzd29yZCBpcyBzcGVjaWZpZWQgKi8KKyAgICAgICAgdXNlcktleUxlbiA9IHNpemVvZih1c2VyS2V5KTsKKyAgICAgICAgcmV0MiA9IGdlbmVyYXRlX0t1KG5ld3VzZXItPmF1dGhQcm90b2NvbCwgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGJ1Ziwgc3RybGVuKGJ1ZiksIHVzZXJLZXksICZ1c2VyS2V5TGVuKTsKKyAgICAgICAgaWYgKHJldDIgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2VuZXJhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIGtleSBmcm9tIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwbGllZCBwYXNzIHBocmFzZS4iKTsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9ICAgICAgICAKKyAgICAgICAgCisgICAgLyoKKyAgICAgKiBBbmQgdHVybiBpdCBpbnRvIGEgbG9jYWxpemVkIGtleSAKKyAgICAgKi8KKyAgICByZXQyID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChuZXd1c2VyLT5hdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuKTsKKyAgICBpZiAocmV0MiA8PSAwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIkNvdWxkIG5vdCBnZXQgcHJvcGVyIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIGtleSBsZW5ndGgiKTsKKwl1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5ld3VzZXItPmF1dGhLZXkgPSAodV9jaGFyICopIG1hbGxvYyhyZXQyKTsKKworICAgIGlmIChzdHJjbXAoYnVmLCItbCIpID09IDApIHsKKyAgICAgICAgLyogYSBsb2NhbCBrZXkgaXMgZGlyZWN0bHkgc3BlY2lmaWVkICovCisgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIG5ld3VzZXItPmF1dGhLZXlMZW4gPSAwOworICAgICAgICByZXQgPSByZXQyOworICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmbmV3dXNlci0+YXV0aEtleSwgJnJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld3VzZXItPmF1dGhLZXlMZW4sIDAsIGJ1ZikpIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQga2V5IHZhbHVlIGFyZ3VtZW50IHRvIC1sIik7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgIT0gbmV3dXNlci0+YXV0aEtleUxlbikgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW1wcm9wZXIga2V5IGxlbmd0aCB0byAtbCIpOworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG5ld3VzZXItPmF1dGhLZXlMZW4gPSByZXQyOworICAgICAgICByZXQyID0gZ2VuZXJhdGVfa3VsKG5ld3VzZXItPmF1dGhQcm90b2NvbCwgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+ZW5naW5lSUQsIG5ld3VzZXItPmVuZ2luZUlETGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcktleSwgdXNlcktleUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmF1dGhLZXksICZuZXd1c2VyLT5hdXRoS2V5TGVuKTsKKyAgICAgICAgaWYgKHJldDIgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2VuZXJhdGUgbG9jYWxpemVkIGF1dGhlbnRpY2F0aW9uIGtleSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIoS3VsKSBmcm9tIHRoZSBtYXN0ZXIga2V5IChLdSkuIik7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjcCkKKyAgICAgICAgZ290byBhZGQ7ICAgICAgICAgICAgICAgLyogbm8gcHJpdmFjeSB0eXBlICh3aGljaCBpcyBsZWdhbCkgKi8KKworICAgIC8qCisgICAgICogUkVBRDogUHJpdmFjeSBUeXBlIAorICAgICAqLworICAgIHRlc3RjYXNlID0gMDsKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUworICAgIGlmIChzdHJuY21wKGNwLCAiREVTIiwgMykgPT0gMCkgeworICAgICAgICBtZW1jcHkobmV3dXNlci0+cHJpdlByb3RvY29sLCB1c21ERVNQcml2UHJvdG9jb2wsCisgICAgICAgICAgICAgICBzaXplb2YodXNtREVTUHJpdlByb3RvY29sKSk7CisgICAgICAgIHRlc3RjYXNlID0gMTsKKwkvKiBERVMgdXNlcyBhIDEyOCBiaXQga2V5LCA2NCBiaXRzIG9mIHdoaWNoIGlzIGEgc2FsdCAqLworCXByaXZLZXlMZW4gPSAxNjsKKyAgICB9CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FFUworICAgIGlmIChzdHJuY21wKGNwLCAiQUVTMTI4IiwgNikgPT0gMCB8fAorICAgICAgICAgICAgICAgc3RybmNtcChjcCwgIkFFUyIsIDMpID09IDApIHsKKyAgICAgICAgbWVtY3B5KG5ld3VzZXItPnByaXZQcm90b2NvbCwgdXNtQUVTUHJpdlByb3RvY29sLAorICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUFFU1ByaXZQcm90b2NvbCkpOworICAgICAgICB0ZXN0Y2FzZSA9IDE7CisJcHJpdktleUxlbiA9IDE2OworICAgIH0KKyNlbmRpZgorICAgIGlmICh0ZXN0Y2FzZSA9PSAwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIlVua25vd24gcHJpdmFjeSBwcm90b2NvbCIpOworICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY3AgPSBza2lwX3Rva2VuKGNwKTsKKyAgICAvKgorICAgICAqIFJFQUQ6IEVuY3J5cHRpb24gUGFzcyBQaHJhc2Ugb3Iga2V5CisgICAgICovCisgICAgaWYgKCFjcCkgeworICAgICAgICAvKgorICAgICAgICAgKiBhc3N1bWUgdGhlIHNhbWUgYXMgdGhlIGF1dGhlbnRpY2F0aW9uIGtleSAKKyAgICAgICAgICovCisgICAgICAgIG5ld3VzZXItPnByaXZLZXkgPSBuZXRzbm1wX21lbWR1cChuZXd1c2VyLT5hdXRoS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+YXV0aEtleUxlbik7CisgICAgICAgIG5ld3VzZXItPnByaXZLZXlMZW4gPSBuZXd1c2VyLT5hdXRoS2V5TGVuOworICAgIH0gZWxzZSB7CisgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIAorICAgICAgICBpZiAoc3RyY21wKGJ1ZiwiLW0iKSA9PSAwKSB7CisgICAgICAgICAgICAvKiBhIG1hc3RlciBrZXkgaXMgc3BlY2lmaWVkICovCisgICAgICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgcmV0ID0gc2l6ZW9mKHVzZXJLZXkpOworICAgICAgICAgICAgdG1wcCA9IHVzZXJLZXk7CisgICAgICAgICAgICB1c2VyS2V5TGVuID0gMDsKKyAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ0bXBwLCAmcmV0LCAmdXNlcktleUxlbiwgMCwgYnVmKSkgeworICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQga2V5IHZhbHVlIGFyZ3VtZW50IHRvIC1tIik7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwiLWwiKSAhPSAwKSB7CisgICAgICAgICAgICAvKiBhIHBhc3N3b3JkIGlzIHNwZWNpZmllZCAqLworICAgICAgICAgICAgdXNlcktleUxlbiA9IHNpemVvZih1c2VyS2V5KTsKKyAgICAgICAgICAgIHJldDIgPSBnZW5lcmF0ZV9LdShuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgYnVmLCBzdHJsZW4oYnVmKSwgdXNlcktleSwgJnVzZXJLZXlMZW4pOworICAgICAgICAgICAgaWYgKHJldDIgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdlbmVyYXRlIHRoZSBwcml2YWN5IGtleSBmcm9tIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcGxpZWQgcGFzcyBwaHJhc2UuIik7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gICAgICAgIAorICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogQW5kIHR1cm4gaXQgaW50byBhIGxvY2FsaXplZCBrZXkgCisgICAgICAgICAqLworICAgICAgICByZXQyID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChuZXd1c2VyLT5hdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbik7CisgICAgICAgIGlmIChyZXQyIDwgMCkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdldCBwcm9wZXIga2V5IGxlbmd0aCB0byB1c2UgZm9yIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJwcml2YWN5IGFsZ29yaXRobS4iKTsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbmV3dXNlci0+cHJpdktleSA9ICh1X2NoYXIgKikgbWFsbG9jKHJldDIpOworCisgICAgICAgIGlmIChzdHJjbXAoYnVmLCItbCIpID09IDApIHsKKyAgICAgICAgICAgIC8qIGEgbG9jYWwga2V5IGlzIGRpcmVjdGx5IHNwZWNpZmllZCAqLworICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgIHJldCA9IHJldDI7CisgICAgICAgICAgICBuZXd1c2VyLT5wcml2S2V5TGVuID0gMDsKKyAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZuZXd1c2VyLT5wcml2S2V5LCAmcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld3VzZXItPnByaXZLZXlMZW4sIDAsIGJ1ZikpIHsKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGtleSB2YWx1ZSBhcmd1bWVudCB0byAtbCIpOworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV3dXNlci0+cHJpdktleUxlbiA9IHJldDI7CisgICAgICAgICAgICByZXQyID0gZ2VuZXJhdGVfa3VsKG5ld3VzZXItPmF1dGhQcm90b2NvbCwgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmVuZ2luZUlELCBuZXd1c2VyLT5lbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyS2V5LCB1c2VyS2V5TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPnByaXZLZXksICZuZXd1c2VyLT5wcml2S2V5TGVuKTsKKyAgICAgICAgICAgIGlmIChyZXQyICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgcHJpdmFjeSBrZXkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihLdWwpIGZyb20gdGhlIG1hc3RlciBrZXkgKEt1KS4iKTsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgobmV3dXNlci0+cHJpdktleUxlbiA+PSBwcml2S2V5TGVuKSB8fCAocHJpdktleUxlbiA9PSAwKSl7CisgICAgICBuZXd1c2VyLT5wcml2S2V5TGVuID0gcHJpdktleUxlbjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBUaGUgcHJpdktleSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHJlcXVpcmVkIGJ5IHByaXZQcm90b2NvbCAqLworICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgYWRkOgorICAgIHVzbV9hZGRfdXNlcihuZXd1c2VyKTsKKyAgICBERUJVR01TR1RMKCgidXNtVXNlciIsICJjcmVhdGVkIGEgbmV3IHVzZXIgJXMgYXQgIiwgbmV3dXNlci0+c2VjTmFtZSkpOworICAgIERFQlVHTVNHSEVYKCgidXNtVXNlciIsIG5ld3VzZXItPmVuZ2luZUlELCBuZXd1c2VyLT5lbmdpbmVJRExlbikpOworICAgIERFQlVHTVNHKCgidXNtVXNlciIsICJcbiIpKTsKK30KKwordm9pZAorc25tcHYzX2F1dGh0eXBlX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKK3sKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQorICAgIGlmIChzdHJjYXNlY21wKGNwdHIsICJNRDUiKSA9PSAwKQorICAgICAgICBkZWZhdWx0QXV0aFR5cGUgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZiAoc3RyY2FzZWNtcChjcHRyLCAiU0hBIikgPT0gMCkKKyAgICAgICAgZGVmYXVsdEF1dGhUeXBlID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7CisgICAgZWxzZQorICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIGF1dGhlbnRpY2F0aW9uIHR5cGUiKTsKKyAgICBkZWZhdWx0QXV0aFR5cGVMZW4gPSBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk07CisgICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJzZXQgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiB0eXBlOiAlc1xuIiwgY3B0cikpOworfQorCitjb25zdCBvaWQgICAgICAqCitnZXRfZGVmYXVsdF9hdXRodHlwZShzaXplX3QgKiBsZW4pCit7CisgICAgaWYgKGRlZmF1bHRBdXRoVHlwZSA9PSBOVUxMKSB7CisgICAgICAgIGRlZmF1bHRBdXRoVHlwZSA9IFNOTVBfREVGQVVMVF9BVVRIX1BST1RPOworICAgICAgICBkZWZhdWx0QXV0aFR5cGVMZW4gPSBTTk1QX0RFRkFVTFRfQVVUSF9QUk9UT0xFTjsKKyAgICB9CisgICAgaWYgKGxlbikKKyAgICAgICAgKmxlbiA9IGRlZmF1bHRBdXRoVHlwZUxlbjsKKyAgICByZXR1cm4gZGVmYXVsdEF1dGhUeXBlOworfQorCit2b2lkCitzbm1wdjNfcHJpdnR5cGVfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQoreworICAgIGludCB0ZXN0Y2FzZSA9IDA7CisKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUworICAgIGlmIChzdHJjYXNlY21wKGNwdHIsICJERVMiKSA9PSAwKSB7CisgICAgICAgIHRlc3RjYXNlID0gMTsKKyAgICAgICAgZGVmYXVsdFByaXZUeXBlID0gdXNtREVTUHJpdlByb3RvY29sOworICAgIH0KKyNlbmRpZgorCisjaWYgSEFWRV9BRVMKKyAgICAvKiBYWFggQUVTOiBhc3N1bWVzIG9pZCBsZW5ndGggPT0gZGVzIG9pZCBsZW5ndGggKi8KKyAgICBpZiAoc3RyY2FzZWNtcChjcHRyLCAiQUVTMTI4IikgPT0gMCB8fAorICAgICAgICBzdHJjYXNlY21wKGNwdHIsICJBRVMiKSA9PSAwKSB7CisgICAgICAgIHRlc3RjYXNlID0gMTsKKyAgICAgICAgZGVmYXVsdFByaXZUeXBlID0gdXNtQUVTMTI4UHJpdlByb3RvY29sOworICAgIH0KKyNlbmRpZgorICAgIGlmICh0ZXN0Y2FzZSA9PSAwKQorICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIHByaXZhY3kgdHlwZSIpOworICAgIGRlZmF1bHRQcml2VHlwZUxlbiA9IFNOTVBfREVGQVVMVF9QUklWX1BST1RPTEVOOworICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAic2V0IGRlZmF1bHQgcHJpdmFjeSB0eXBlOiAlc1xuIiwgY3B0cikpOworfQorCitjb25zdCBvaWQgICAgICAqCitnZXRfZGVmYXVsdF9wcml2dHlwZShzaXplX3QgKiBsZW4pCit7CisgICAgaWYgKGRlZmF1bHRQcml2VHlwZSA9PSBOVUxMKSB7CisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKKyAgICAgICAgZGVmYXVsdFByaXZUeXBlID0gdXNtREVTUHJpdlByb3RvY29sOworI2Vsc2UKKyAgICAgICAgZGVmYXVsdFByaXZUeXBlID0gdXNtQUVTUHJpdlByb3RvY29sOworI2VuZGlmCisgICAgICAgIGRlZmF1bHRQcml2VHlwZUxlbiA9IFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STTsKKyAgICB9CisgICAgaWYgKGxlbikKKyAgICAgICAgKmxlbiA9IGRlZmF1bHRQcml2VHlwZUxlbjsKKyAgICByZXR1cm4gZGVmYXVsdFByaXZUeXBlOworfQorCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXB2My5jIGIvc25tcGxpYi9zbm1wdjMuYwppbmRleCBlM2JkYzUwLi40MzVjYWZkIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXB2My5jCisrKyBiL3NubXBsaWIvc25tcHYzLmMKQEAgLTExLDExICsxMSw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTM5LDkgKzM1LDYgQEAKICNpZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC04Miw2ICs3NSw4IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKwogc3RhdGljIHVfbG9uZyAgIGVuZ2luZUJvb3RzID0gMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZW5naW5lSURUeXBlID0gRU5HSU5FSURfVFlQRV9ORVRTTk1QX1JORDsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICplbmdpbmVJRCA9IE5VTEw7CkBAIC05MiwxMDAgKzg3LDEwIEBACiBzdGF0aWMgc2l6ZV90ICAgb2xkRW5naW5lSURMZW5ndGggPSAwOwogc3RhdGljIHN0cnVjdCB0aW1ldmFsIHNubXB2M3N0YXJ0dGltZTsKIAotLyoKLSAqIFNldCB1cCBkZWZhdWx0IHNubXB2MyBwYXJhbWV0ZXIgdmFsdWUgc3RvcmFnZS4KLSAqLwotc3RhdGljIGNvbnN0IG9pZCAqZGVmYXVsdEF1dGhUeXBlID0gTlVMTDsKLXN0YXRpYyBzaXplX3QgICBkZWZhdWx0QXV0aFR5cGVMZW4gPSAwOwotc3RhdGljIGNvbnN0IG9pZCAqZGVmYXVsdFByaXZUeXBlID0gTlVMTDsKLXN0YXRpYyBzaXplX3QgICBkZWZhdWx0UHJpdlR5cGVMZW4gPSAwOwotCi0vKiB0aGlzIGlzIHByb2JhYmx5IGFuIG92ZXIta2lsbCBpZmRlZiwgYnV0IHdoeSBub3QgKi8KLSNpZiBkZWZpbmVkKEhBVkVfU1lTX1RJTUVTX0gpICYmIGRlZmluZWQoSEFWRV9VTklTVERfSCkgJiYgZGVmaW5lZChIQVZFX1RJTUVTKSAmJiBkZWZpbmVkKF9TQ19DTEtfVENLKSAmJiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5lZChVSU5UX01BWCkKLQotI2RlZmluZSBTTk1QX1VTRV9USU1FUyAxCi0KLXN0YXRpYyBjbG9ja190IHNubXB2M3N0YXJ0Q2xvY2s7Ci1zdGF0aWMgbG9uZyBjbG9ja3RpY2tzID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdGNhbGx0aW1lID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgd3JhcGNvdW50ZXIgPSAwOwotCi0jZW5kaWYgLyogdGltZXMoKSB0ZXN0cyAqLwotCiAjaWYgZGVmaW5lZChJRkhXQUREUkxFTikgJiYgZGVmaW5lZChTSU9DR0lGSFdBRERSKQogc3RhdGljIGludCAgICAgIGdldEh3QWRkcmVzcyhjb25zdCBjaGFyICpuZXR3b3JrRGV2aWNlLCBjaGFyICphZGRyZXNzT3V0KTsKICNlbmRpZgogCi12b2lkCi1zbm1wdjNfYXV0aHR5cGVfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQotewotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1Ci0gICAgaWYgKHN0cmNhc2VjbXAoY3B0ciwgIk1ENSIpID09IDApCi0gICAgICAgIGRlZmF1bHRBdXRoVHlwZSA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2w7Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGlmIChzdHJjYXNlY21wKGNwdHIsICJTSEEiKSA9PSAwKQotICAgICAgICBkZWZhdWx0QXV0aFR5cGUgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKLSAgICBlbHNlCi0gICAgICAgIGNvbmZpZ19wZXJyb3IoIlVua25vd24gYXV0aGVudGljYXRpb24gdHlwZSIpOwotICAgIGRlZmF1bHRBdXRoVHlwZUxlbiA9IFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STTsKLSAgICBERUJVR01TR1RMKCgic25tcHYzIiwgInNldCBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIHR5cGU6ICVzXG4iLCBjcHRyKSk7Ci19Ci0KLWNvbnN0IG9pZCAgICAgICoKLWdldF9kZWZhdWx0X2F1dGh0eXBlKHNpemVfdCAqIGxlbikKLXsKLSAgICBpZiAoZGVmYXVsdEF1dGhUeXBlID09IE5VTEwpIHsKLSAgICAgICAgZGVmYXVsdEF1dGhUeXBlID0gU05NUF9ERUZBVUxUX0FVVEhfUFJPVE87Ci0gICAgICAgIGRlZmF1bHRBdXRoVHlwZUxlbiA9IFNOTVBfREVGQVVMVF9BVVRIX1BST1RPTEVOOwotICAgIH0KLSAgICBpZiAobGVuKQotICAgICAgICAqbGVuID0gZGVmYXVsdEF1dGhUeXBlTGVuOwotICAgIHJldHVybiBkZWZhdWx0QXV0aFR5cGU7Ci19Ci0KLXZvaWQKLXNubXB2M19wcml2dHlwZV9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCi17Ci0gICAgaW50IHRlc3RjYXNlID0gMDsKLQotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCi0gICAgaWYgKHN0cmNhc2VjbXAoY3B0ciwgIkRFUyIpID09IDApIHsKLSAgICAgICAgdGVzdGNhc2UgPSAxOwotICAgICAgICBkZWZhdWx0UHJpdlR5cGUgPSB1c21ERVNQcml2UHJvdG9jb2w7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBIQVZFX0FFUwotICAgIC8qIFhYWCBBRVM6IGFzc3VtZXMgb2lkIGxlbmd0aCA9PSBkZXMgb2lkIGxlbmd0aCAqLwotICAgIGlmIChzdHJjYXNlY21wKGNwdHIsICJBRVMxMjgiKSA9PSAwIHx8Ci0gICAgICAgIHN0cmNhc2VjbXAoY3B0ciwgIkFFUyIpID09IDApIHsKLSAgICAgICAgdGVzdGNhc2UgPSAxOwotICAgICAgICBkZWZhdWx0UHJpdlR5cGUgPSB1c21BRVMxMjhQcml2UHJvdG9jb2w7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKHRlc3RjYXNlID09IDApCi0gICAgICAgIGNvbmZpZ19wZXJyb3IoIlVua25vd24gcHJpdmFjeSB0eXBlIik7Ci0gICAgZGVmYXVsdFByaXZUeXBlTGVuID0gU05NUF9ERUZBVUxUX1BSSVZfUFJPVE9MRU47Ci0gICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJzZXQgZGVmYXVsdCBwcml2YWN5IHR5cGU6ICVzXG4iLCBjcHRyKSk7Ci19Ci0KLWNvbnN0IG9pZCAgICAgICoKLWdldF9kZWZhdWx0X3ByaXZ0eXBlKHNpemVfdCAqIGxlbikKLXsKLSAgICBpZiAoZGVmYXVsdFByaXZUeXBlID09IE5VTEwpIHsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUwotICAgICAgICBkZWZhdWx0UHJpdlR5cGUgPSB1c21ERVNQcml2UHJvdG9jb2w7Ci0jZWxzZQotICAgICAgICBkZWZhdWx0UHJpdlR5cGUgPSB1c21BRVNQcml2UHJvdG9jb2w7Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdFByaXZUeXBlTGVuID0gVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNOwotICAgIH0KLSAgICBpZiAobGVuKQotICAgICAgICAqbGVuID0gZGVmYXVsdFByaXZUeXBlTGVuOwotICAgIHJldHVybiBkZWZhdWx0UHJpdlR5cGU7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiBzbm1wdjNfc2VjTGV2ZWxfY29uZgogICoKQEAgLTIxNiwxNiArMTIxLDEzIEBACiB2b2lkCiBzbm1wdjNfc2VjTGV2ZWxfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICBidWZbMTAyNF07CiAgICAgaW50ICAgICAgICAgICAgIHNlY0xldmVsOwogCiAgICAgaWYgKChzZWNMZXZlbCA9IHBhcnNlX3NlY0xldmVsX2NvbmYoIHdvcmQsIGNwdHIgKSkgPj0gMCApIHsKICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkgICBORVRTTk1QX0RTX0xJQl9TRUNMRVZFTCwgc2VjTGV2ZWwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJVbmtub3duIHNlY3VyaXR5IGxldmVsOiAlcyIsIGNwdHIpOwotICAgICAgICBidWZbIHNpemVvZihidWYpLTEgXSA9IDA7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiVW5rbm93biBzZWN1cml0eSBsZXZlbDogJXMiLCBjcHRyKTsKICAgICB9CiAgICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJkZWZhdWx0IHNlY0xldmVsIHNldCB0bzogJXMgPSAlZFxuIiwgY3B0ciwKICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKQEAgLTIzMyw2ICsxMzUsOSBAQAogfQogCiAKK05FVFNOTVBfSU1QT1JUIGludAorc25tcHYzX29wdGlvbnMoY2hhciAqb3B0YXJnLCBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBjaGFyICoqQXBzeiwKKyAgICAgICAgICAgICAgIGNoYXIgKipYcHN6LCBpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YpOwogaW50CiBzbm1wdjNfb3B0aW9ucyhjaGFyICpvcHRhcmcsIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIGNoYXIgKipBcHN6LAogICAgICAgICAgICAgICAgY2hhciAqKlhwc3osIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndikKQEAgLTI0OSw3ICsxNTQsNyBAQAogICAgIC8qCiAgICAgICogYW5kICcuLi4uICItM3ggdmFsdWUiIC4uLi4nICAoKndpdGgqIHRoZSBxdW90ZXMpCiAgICAgICovCi0gICAgd2hpbGUgKCpvcHRhcmcgJiYgaXNzcGFjZSgqb3B0YXJnKSkgeworICAgIHdoaWxlICgqb3B0YXJnICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpvcHRhcmcpKSkgewogICAgICAgICBvcHRhcmcrKzsKICAgICB9CiAgICAgLyoKQEAgLTM1OSw2ICsyNjQsNyBAQAogCiAgICAgICAgIGJyZWFrOwogCisjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCiAgICAgY2FzZSAnYSc6CiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKICAgICAgICAgaWYgKCFzdHJjYXNlY21wKG9wdGFyZywgIk1ENSIpKSB7CkBAIC00MDksNiArMzE1LDcgQEAKICAgICBjYXNlICdYJzoKICAgICAgICAgKlhwc3ogPSBvcHRhcmc7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfU0VDTU9EX1VTTSAqLwogCiAgICAgY2FzZSAnbSc6IHsKICAgICAgICAgc2l6ZV90IGJ1ZlNpemUgPSBzaXplb2Yoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5KTsKQEAgLTUzNSw3ICs0NDIsNyBAQAogICAgICAgICAgKiBnZXQgdGhlIGhvc3QgbmFtZSBhbmQgc2F2ZSB0aGUgaW5mb3JtYXRpb24gCiAgICAgICAgICAqLwogICAgICAgICBnZXRob3N0bmFtZSgoY2hhciAqKSBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgaGVudCA9IGdldGhvc3RieW5hbWUoKGNoYXIgKikgYnVmKTsKKyAgICAgICAgaGVudCA9IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZSgoY2hhciAqKSBidWYpOwogICAgICAgICBpZiAoaGVudCAmJiBoZW50LT5oX2FkZHJ0eXBlID09IEFGX0lORVQ2KSB7CiAgICAgICAgICAgICBsb2NhbEVuZ2luZUlEVHlwZSA9IEVOR0lORUlEX1RZUEVfSVBWNjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTU1OCw3ICs0NjUsNyBAQAogICAgICAgICAgKiBnZXQgdGhlIGhvc3QgbmFtZSBhbmQgc2F2ZSB0aGUgaW5mb3JtYXRpb24gCiAgICAgICAgICAqLwogICAgICAgICBnZXRob3N0bmFtZSgoY2hhciAqKSBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgaGVudCA9IGdldGhvc3RieW5hbWUoKGNoYXIgKikgYnVmKTsKKyAgICAgICAgaGVudCA9IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZSgoY2hhciAqKSBidWYpOwogICAgIH0KICNlbmRpZgogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIQVZFX0dFVEhPU1ROQU1FICovCkBAIC03NTEsMjk3ICs2NTgsNiBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQKLWZyZWVfZW5naW5ldGltZV9vbl9zaHV0ZG93bihpbnQgbWFqb3JpZCwgaW50IG1pbm9yaWQsIHZvaWQgKnNlcnZlcmFyZywKLQkJCSAgICB2b2lkICpjbGllbnRhcmcpCi17Ci0gICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJmcmVlIGVuZ2luZXRpbWUgY2FsbGJhY2sgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKGVuZ2luZUlEICE9IE5VTEwpCi0JZnJlZV9lbmdpbmV0aW1lKGVuZ2luZUlELCBlbmdpbmVJRExlbmd0aCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXVzbV9wYXJzZV9jcmVhdGVfdXNtVXNlcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKLXsKLSAgICBjaGFyICAgICAgICAgICAqY3A7Ci0gICAgY2hhciAgICAgICAgICAgIGJ1ZltTTk1QX01BWEJVRl9NRURJVU1dOwotICAgIHN0cnVjdCB1c21Vc2VyICpuZXd1c2VyOwotICAgIHVfY2hhciAgICAgICAgICB1c2VyS2V5W1NOTVBfTUFYQlVGX1NNQUxMXSwgKnRtcHA7Ci0gICAgc2l6ZV90ICAgICAgICAgIHVzZXJLZXlMZW4gPSBTTk1QX01BWEJVRl9TTUFMTDsKLSAgICBzaXplX3QgICAgICAgICAgcHJpdktleUxlbiA9IDA7Ci0gICAgc2l6ZV90ICAgICAgICAgIHJldDsKLSAgICBpbnQgICAgICAgICAgICAgcmV0MjsKLSAgICBpbnQgICAgICAgICAgICAgdGVzdGNhc2U7Ci0KLSAgICBuZXd1c2VyID0gdXNtX2NyZWF0ZV91c2VyKCk7Ci0KLSAgICAvKgotICAgICAqIFJFQUQ6IFNlY3VyaXR5IE5hbWUgCi0gICAgICovCi0gICAgY3AgPSBjb3B5X253b3JkKGxpbmUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCi0gICAgLyoKLSAgICAgKiBtaWdodCBiZSBhIC1lIEVOR0lORUlEIGFyZ3VtZW50IAotICAgICAqLwotICAgIGlmIChzdHJjbXAoYnVmLCAiLWUiKSA9PSAwKSB7Ci0gICAgICAgIHNpemVfdCAgICAgICAgICBlYnVmX2xlbiA9IDMyLCBlb3V0X2xlbiA9IDA7Ci0gICAgICAgIHVfY2hhciAgICAgICAgICplYnVmID0gKHVfY2hhciAqKSBtYWxsb2MoZWJ1Zl9sZW4pOwotCi0gICAgICAgIGlmIChlYnVmID09IE5VTEwpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgLWUgZmxhZyIpOwotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEdldCB0aGUgc3BlY2lmaWVkIGVuZ2luZWlkIGZyb20gdGhlIGxpbmUuICAKLSAgICAgICAgICovCi0gICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZlYnVmLCAmZWJ1Zl9sZW4sICZlb3V0X2xlbiwgMSwgYnVmKSkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBFbmdpbmVJRCBhcmd1bWVudCB0byAtZSIpOwotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIFNOTVBfRlJFRShlYnVmKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG5ld3VzZXItPmVuZ2luZUlEID0gZWJ1ZjsKLSAgICAgICAgbmV3dXNlci0+ZW5naW5lSURMZW4gPSBlb3V0X2xlbjsKLSAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRCA9IHNubXB2M19nZW5lcmF0ZV9lbmdpbmVJRCgmcmV0KTsKLSAgICAgICAgaWYgKHJldCA9PSAwKSB7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ld3VzZXItPmVuZ2luZUlETGVuID0gcmV0OwotICAgIH0KLQotICAgIG5ld3VzZXItPnNlY05hbWUgPSBzdHJkdXAoYnVmKTsKLSAgICBuZXd1c2VyLT5uYW1lID0gc3RyZHVwKGJ1Zik7Ci0KLSAgICBpZiAoIWNwKQotICAgICAgICBnb3RvIGFkZDsgICAgICAgICAgICAgICAvKiBubyBhdXRoZW50aWNhdGlvbiBvciBwcml2YWN5IHR5cGUgKi8KLQotICAgIC8qCi0gICAgICogUkVBRDogQXV0aGVudGljYXRpb24gVHlwZSAKLSAgICAgKi8KLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQotICAgIGlmIChzdHJuY21wKGNwLCAiTUQ1IiwgMykgPT0gMCkgewotICAgICAgICBtZW1jcHkobmV3dXNlci0+YXV0aFByb3RvY29sLCB1c21ITUFDTUQ1QXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpKTsKLSAgICB9IGVsc2UKLSNlbmRpZgotICAgICAgICBpZiAoc3RybmNtcChjcCwgIlNIQSIsIDMpID09IDApIHsKLSAgICAgICAgbWVtY3B5KG5ld3VzZXItPmF1dGhQcm90b2NvbCwgdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICBzaXplb2YodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIik7Ci0gICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjcCA9IHNraXBfdG9rZW4oY3ApOwotCi0gICAgLyoKLSAgICAgKiBSRUFEOiBBdXRoZW50aWNhdGlvbiBQYXNzIFBocmFzZSBvciBrZXkKLSAgICAgKi8KLSAgICBpZiAoIWNwKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm5vIGF1dGhlbnRpY2F0aW9uIHBhc3MgcGhyYXNlIik7Ci0gICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKLSAgICBpZiAoc3RyY21wKGJ1ZiwiLW0iKSA9PSAwKSB7Ci0gICAgICAgIC8qIGEgbWFzdGVyIGtleSBpcyBzcGVjaWZpZWQgKi8KLSAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgcmV0ID0gc2l6ZW9mKHVzZXJLZXkpOwotICAgICAgICB0bXBwID0gdXNlcktleTsKLSAgICAgICAgdXNlcktleUxlbiA9IDA7Ci0gICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ0bXBwLCAmcmV0LCAmdXNlcktleUxlbiwgMCwgYnVmKSkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBrZXkgdmFsdWUgYXJndW1lbnQgdG8gLW0iKTsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHN0cmNtcChidWYsIi1sIikgIT0gMCkgewotICAgICAgICAvKiBhIHBhc3N3b3JkIGlzIHNwZWNpZmllZCAqLwotICAgICAgICB1c2VyS2V5TGVuID0gc2l6ZW9mKHVzZXJLZXkpOwotICAgICAgICByZXQyID0gZ2VuZXJhdGVfS3UobmV3dXNlci0+YXV0aFByb3RvY29sLCBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgYnVmLCBzdHJsZW4oYnVmKSwgdXNlcktleSwgJnVzZXJLZXlMZW4pOwotICAgICAgICBpZiAocmV0MiAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZW5lcmF0ZSB0aGUgYXV0aGVudGljYXRpb24ga2V5IGZyb20gdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBsaWVkIHBhc3MgcGhyYXNlLiIpOwotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gICAgICAgIAotICAgICAgICAKLSAgICAvKgotICAgICAqIEFuZCB0dXJuIGl0IGludG8gYSBsb2NhbGl6ZWQga2V5IAotICAgICAqLwotICAgIHJldDIgPSBzY19nZXRfcHJvcGVybGVuZ3RoKG5ld3VzZXItPmF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4pOwotICAgIGlmIChyZXQyIDw9IDApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiQ291bGQgbm90IGdldCBwcm9wZXIgYXV0aGVudGljYXRpb24gcHJvdG9jb2wga2V5IGxlbmd0aCIpOwotCXVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbmV3dXNlci0+YXV0aEtleSA9ICh1X2NoYXIgKikgbWFsbG9jKHJldDIpOwotCi0gICAgaWYgKHN0cmNtcChidWYsIi1sIikgPT0gMCkgewotICAgICAgICAvKiBhIGxvY2FsIGtleSBpcyBkaXJlY3RseSBzcGVjaWZpZWQgKi8KLSAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgbmV3dXNlci0+YXV0aEtleUxlbiA9IDA7Ci0gICAgICAgIHJldCA9IHJldDI7Ci0gICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZuZXd1c2VyLT5hdXRoS2V5LCAmcmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3dXNlci0+YXV0aEtleUxlbiwgMCwgYnVmKSkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBrZXkgdmFsdWUgYXJndW1lbnQgdG8gLWwiKTsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJldCAhPSBuZXd1c2VyLT5hdXRoS2V5TGVuKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbXByb3BlciBrZXkgbGVuZ3RoIHRvIC1sIik7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbmV3dXNlci0+YXV0aEtleUxlbiA9IHJldDI7Ci0gICAgICAgIHJldDIgPSBnZW5lcmF0ZV9rdWwobmV3dXNlci0+YXV0aFByb3RvY29sLCBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRCwgbmV3dXNlci0+ZW5naW5lSURMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyS2V5LCB1c2VyS2V5TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+YXV0aEtleSwgJm5ld3VzZXItPmF1dGhLZXlMZW4pOwotICAgICAgICBpZiAocmV0MiAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgYXV0aGVudGljYXRpb24ga2V5ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIihLdWwpIGZyb20gdGhlIG1hc3RlciBrZXkgKEt1KS4iKTsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWNwKQotICAgICAgICBnb3RvIGFkZDsgICAgICAgICAgICAgICAvKiBubyBwcml2YWN5IHR5cGUgKHdoaWNoIGlzIGxlZ2FsKSAqLwotCi0gICAgLyoKLSAgICAgKiBSRUFEOiBQcml2YWN5IFR5cGUgCi0gICAgICovCi0gICAgdGVzdGNhc2UgPSAwOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCi0gICAgaWYgKHN0cm5jbXAoY3AsICJERVMiLCAzKSA9PSAwKSB7Ci0gICAgICAgIG1lbWNweShuZXd1c2VyLT5wcml2UHJvdG9jb2wsIHVzbURFU1ByaXZQcm90b2NvbCwKLSAgICAgICAgICAgICAgIHNpemVvZih1c21ERVNQcml2UHJvdG9jb2wpKTsKLSAgICAgICAgdGVzdGNhc2UgPSAxOwotCS8qIERFUyB1c2VzIGEgMTI4IGJpdCBrZXksIDY0IGJpdHMgb2Ygd2hpY2ggaXMgYSBzYWx0ICovCi0JcHJpdktleUxlbiA9IDE2OwotICAgIH0KLSNlbmRpZgotI2lmZGVmIEhBVkVfQUVTCi0gICAgaWYgKHN0cm5jbXAoY3AsICJBRVMxMjgiLCA2KSA9PSAwIHx8Ci0gICAgICAgICAgICAgICBzdHJuY21wKGNwLCAiQUVTIiwgMykgPT0gMCkgewotICAgICAgICBtZW1jcHkobmV3dXNlci0+cHJpdlByb3RvY29sLCB1c21BRVNQcml2UHJvdG9jb2wsCi0gICAgICAgICAgICAgICBzaXplb2YodXNtQUVTUHJpdlByb3RvY29sKSk7Ci0gICAgICAgIHRlc3RjYXNlID0gMTsKLQlwcml2S2V5TGVuID0gMTY7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKHRlc3RjYXNlID09IDApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biBwcml2YWN5IHByb3RvY29sIik7Ci0gICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjcCA9IHNraXBfdG9rZW4oY3ApOwotICAgIC8qCi0gICAgICogUkVBRDogRW5jcnlwdGlvbiBQYXNzIFBocmFzZSBvciBrZXkKLSAgICAgKi8KLSAgICBpZiAoIWNwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGFzc3VtZSB0aGUgc2FtZSBhcyB0aGUgYXV0aGVudGljYXRpb24ga2V5IAotICAgICAgICAgKi8KLSAgICAgICAgbmV3dXNlci0+cHJpdktleSA9IG5ldHNubXBfbWVtZHVwKG5ld3VzZXItPmF1dGhLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5hdXRoS2V5TGVuKTsKLSAgICAgICAgbmV3dXNlci0+cHJpdktleUxlbiA9IG5ld3VzZXItPmF1dGhLZXlMZW47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAoYnVmLCItbSIpID09IDApIHsKLSAgICAgICAgICAgIC8qIGEgbWFzdGVyIGtleSBpcyBzcGVjaWZpZWQgKi8KLSAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgICAgICByZXQgPSBzaXplb2YodXNlcktleSk7Ci0gICAgICAgICAgICB0bXBwID0gdXNlcktleTsKLSAgICAgICAgICAgIHVzZXJLZXlMZW4gPSAwOwotICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnRtcHAsICZyZXQsICZ1c2VyS2V5TGVuLCAwLCBidWYpKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBrZXkgdmFsdWUgYXJndW1lbnQgdG8gLW0iKTsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYnVmLCItbCIpICE9IDApIHsKLSAgICAgICAgICAgIC8qIGEgcGFzc3dvcmQgaXMgc3BlY2lmaWVkICovCi0gICAgICAgICAgICB1c2VyS2V5TGVuID0gc2l6ZW9mKHVzZXJLZXkpOwotICAgICAgICAgICAgcmV0MiA9IGdlbmVyYXRlX0t1KG5ld3VzZXItPmF1dGhQcm90b2NvbCwgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBidWYsIHN0cmxlbihidWYpLCB1c2VyS2V5LCAmdXNlcktleUxlbik7Ci0gICAgICAgICAgICBpZiAocmV0MiAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2VuZXJhdGUgdGhlIHByaXZhY3kga2V5IGZyb20gdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwbGllZCBwYXNzIHBocmFzZS4iKTsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgKiBBbmQgdHVybiBpdCBpbnRvIGEgbG9jYWxpemVkIGtleSAKLSAgICAgICAgICovCi0gICAgICAgIHJldDIgPSBzY19nZXRfcHJvcGVybGVuZ3RoKG5ld3VzZXItPmF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuKTsKLSAgICAgICAgaWYgKHJldDIgPCAwKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2V0IHByb3BlciBrZXkgbGVuZ3RoIHRvIHVzZSBmb3IgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInByaXZhY3kgYWxnb3JpdGhtLiIpOwotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXd1c2VyLT5wcml2S2V5ID0gKHVfY2hhciAqKSBtYWxsb2MocmV0Mik7Ci0KLSAgICAgICAgaWYgKHN0cmNtcChidWYsIi1sIikgPT0gMCkgewotICAgICAgICAgICAgLyogYSBsb2NhbCBrZXkgaXMgZGlyZWN0bHkgc3BlY2lmaWVkICovCi0gICAgICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICAgICAgcmV0ID0gcmV0MjsKLSAgICAgICAgICAgIG5ld3VzZXItPnByaXZLZXlMZW4gPSAwOwotICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJm5ld3VzZXItPnByaXZLZXksICZyZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3dXNlci0+cHJpdktleUxlbiwgMCwgYnVmKSkgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQga2V5IHZhbHVlIGFyZ3VtZW50IHRvIC1sIik7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXd1c2VyLT5wcml2S2V5TGVuID0gcmV0MjsKLSAgICAgICAgICAgIHJldDIgPSBnZW5lcmF0ZV9rdWwobmV3dXNlci0+YXV0aFByb3RvY29sLCBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+ZW5naW5lSUQsIG5ld3VzZXItPmVuZ2luZUlETGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJLZXksIHVzZXJLZXlMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+cHJpdktleSwgJm5ld3VzZXItPnByaXZLZXlMZW4pOwotICAgICAgICAgICAgaWYgKHJldDIgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdlbmVyYXRlIGxvY2FsaXplZCBwcml2YWN5IGtleSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKEt1bCkgZnJvbSB0aGUgbWFzdGVyIGtleSAoS3UpLiIpOwotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKChuZXd1c2VyLT5wcml2S2V5TGVuID49IHByaXZLZXlMZW4pIHx8IChwcml2S2V5TGVuID09IDApKXsKLSAgICAgIG5ld3VzZXItPnByaXZLZXlMZW4gPSBwcml2S2V5TGVuOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIFRoZSBwcml2S2V5IGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQgYnkgcHJpdlByb3RvY29sICovCi0gICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBhZGQ6Ci0gICAgdXNtX2FkZF91c2VyKG5ld3VzZXIpOwotICAgIERFQlVHTVNHVEwoKCJ1c21Vc2VyIiwgImNyZWF0ZWQgYSBuZXcgdXNlciAlcyBhdCAiLCBuZXd1c2VyLT5zZWNOYW1lKSk7Ci0gICAgREVCVUdNU0dIRVgoKCJ1c21Vc2VyIiwgbmV3dXNlci0+ZW5naW5lSUQsIG5ld3VzZXItPmVuZ2luZUlETGVuKSk7Ci0gICAgREVCVUdNU0coKCJ1c21Vc2VyIiwgIlxuIikpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogZW5naW5lQm9vdHNfY29uZgogICoKQEAgLTEwNTYsNyArNjcyLDcgQEAKIGVuZ2luZUJvb3RzX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKIHsKICAgICBlbmdpbmVCb290cyA9IGF0b2koY3B0cikgKyAxOwotICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAiZW5naW5lQm9vdHM6ICVkXG4iLCBlbmdpbmVCb290cykpOworICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAiZW5naW5lQm9vdHM6ICVsdVxuIiwgZW5naW5lQm9vdHMpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKQEAgLTExMjcsOSArNzQzLDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogU2VlIGlmIGFscmVhZHkgc2V0IGlmIHNvIGVyYXNlICYgcmVsZWFzZSBpdCAKICAgICAgICAgICovCi0gICAgICAgIGlmIChOVUxMICE9IGVuZ2luZUlETmljKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUoZW5naW5lSUROaWMpOwotICAgICAgICB9CisgICAgICAgIFNOTVBfRlJFRShlbmdpbmVJRE5pYyk7CiAgICAgICAgIGVuZ2luZUlETmljID0gKHVfY2hhciAqKSBtYWxsb2Moc3RybGVuKGNwdHIpICsgMSk7CiAgICAgICAgIGlmIChOVUxMICE9IGVuZ2luZUlETmljKSB7CiAgICAgICAgICAgICBzdHJjcHkoKGNoYXIgKikgZW5naW5lSUROaWMsIGNwdHIpOwpAQCAtMTE5OCw3ICs4MTIsNyBAQAogfQogCiAvKgotICogZW5naW5lSURfb2xkX2NvbmYoY29uc3QgY2hhciAqLCBjaGFyICopOgorICogb2xkZW5naW5lSURfY29uZihjb25zdCBjaGFyICosIGNoYXIgKik6CiAgKiAKICAqIFJlYWRzIGEgb2N0ZXQgc3RyaW5nIGVuY29kZWQgZW5naW5lSUQgaW50byB0aGUgb2xkRW5naW5lSUQgYW5kCiAgKiBvbGRFbmdpbmVJRExlbiBwb2ludGVycy4KQEAgLTEyMTAsOCArODI0LDMyIEBACiB9CiAKIC8qCisgKiBleGFjdEVuZ2luZUlEX2NvbmYoY29uc3QgY2hhciAqLCBjaGFyICopOgorICogCisgKiBSZWFkcyBhIG9jdGV0IHN0cmluZyBlbmNvZGVkIGVuZ2luZUlEIGludG8gdGhlIGVuZ2luZUlEIGFuZAorICogZW5naW5lSURMZW4gcG9pbnRlcnMuCisgKi8KK3ZvaWQKK2V4YWN0RW5naW5lSURfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQoreworICAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGNwdHIsICZlbmdpbmVJRCwgJmVuZ2luZUlETGVuZ3RoKTsKKyAgICBpZiAoZW5naW5lSURMZW5ndGggPiBNQVhfRU5HSU5FSURfTEVOR1RIKSB7CisJbmV0c25tcF9jb25maWdfZXJyb3IoCisJICAgICJleGFjdEVuZ2luZUlEICclcycgdG9vIGxvbmc7IHRydW5jYXRpbmcgdG8gJWQgYnl0ZXMiLAorCSAgICBjcHRyLCBNQVhfRU5HSU5FSURfTEVOR1RIKTsKKyAgICAgICAgZW5naW5lSURbTUFYX0VOR0lORUlEX0xFTkdUSCAtIDFdID0gJ1wwJzsKKyAgICAgICAgZW5naW5lSURMZW5ndGggPSBNQVhfRU5HSU5FSURfTEVOR1RIOworICAgIH0KKyAgICBlbmdpbmVJRElzU2V0ID0gMTsKKyAgICBlbmdpbmVJRFR5cGUgPSBFTkdJTkVJRF9UWVBFX0VYQUNUOworfQorCisKKy8qCiAgKiBtZXJlbHkgY2FsbCAKICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGdldF9lbmdpbmV0aW1lX2FsYXJtLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfRU5HSU5FVElNRV9BTEFSTQogdm9pZAogZ2V0X2VuZ2luZXRpbWVfYWxhcm0odW5zaWduZWQgaW50IHJlZ251bSwgdm9pZCAqY2xpZW50YXJncykKIHsKQEAgLTEyMTksNiArODU3LDcgQEAKICAgICAgICB3cmFwcGluZyBvZiB0aGUgdGltZXMoKSBvdXRwdXQgKi8KICAgICBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUoKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9FTkdJTkVUSU1FX0FMQVJNICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiBpbml0X3NubXB2MwpAQCAtMTIzMywxOSArODcyLDcgQEAKIHZvaWQKIGluaXRfc25tcHYzKGNvbnN0IGNoYXIgKnR5cGUpCiB7Ci0jaWYgU05NUF9VU0VfVElNRVMKLSAgc3RydWN0IHRtcyBkdW1teTsKLQotICAvKiBmaXhtZTogLTEgaXMgZmF1bHQgY29kZS4uLiAqLwotICBzbm1wdjNzdGFydENsb2NrID0gdGltZXMoJmR1bW15KTsKLQotICAvKiByZW1lbWJlciBob3cgbWFueSB0aWNrcyBwZXIgc2Vjb25kIHRoZXJlIGFyZSwgc2luY2UgdGltZXMoKSByZXR1cm5zIHRoaXMgKi8KLQotICBjbG9ja3RpY2tzID0gc3lzY29uZihfU0NfQ0xLX1RDSyk7Ci0KLSNlbmRpZiAvKiBTTk1QX1VTRV9USU1FUyAqLwotCi0gICAgZ2V0dGltZW9mZGF5KCZzbm1wdjNzdGFydHRpbWUsIE5VTEwpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmc25tcHYzc3RhcnR0aW1lKTsKIAogICAgIGlmICghdHlwZSkKICAgICAgICAgdHlwZSA9ICJfX3NubXBhcHBfXyI7CkBAIC0xMjY3LDEzICs4OTQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcHYzX3N0b3JlLCAodm9pZCAqKSBzdHJkdXAodHlwZSkpOwogCiAgICAgLyoKLSAgICAgKiBGcmVlIHN0dWZmIGF0IHNodXRkb3duIHRpbWUKLSAgICAgKi8KLSAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU0hVVERPV04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX2VuZ2luZXRpbWVfb25fc2h1dGRvd24sIE5VTEwpOwotCi0gICAgLyoKICAgICAgKiBpbml0aWFsaXplIHN1Ym1vZHVsZXMgCiAgICAgICovCiAgICAgLyoKQEAgLTEyOTMsNiArOTEzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmciKTsKICAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKHR5cGUsICJvbGRFbmdpbmVJRCIsIG9sZGVuZ2luZUlEX2NvbmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKHR5cGUsICJleGFjdEVuZ2luZUlEIiwgZXhhY3RFbmdpbmVJRF9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CiAgICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcih0eXBlLCAiZW5naW5lSURUeXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZUlEVHlwZV9jb25mLCBOVUxMLCAibnVtIik7CiAgICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcih0eXBlLCAiZW5naW5lSUROaWMiLCBlbmdpbmVJRE5pY19jb25mLApAQCAtMTMzMSwzMCArOTUzLDkgQEAKICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJkZWZWZXJzaW9uIiwgdmVyc2lvbl9jb25mLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxfDJjfDMiKTsKIAotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImRlZkF1dGhUeXBlIiwgc25tcHYzX2F1dGh0eXBlX2NvbmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgIk1ENXxTSEEiKTsKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJkZWZQcml2VHlwZSIsIHNubXB2M19wcml2dHlwZV9jb25mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0jaWZkZWYgSEFWRV9BRVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVTfEFFUyIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVTIChBRVMgc3VwcG9ydCBub3QgYXZhaWxhYmxlKSIpOwotI2VuZGlmCiAgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiZGVmU2VjdXJpdHlMZXZlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcHYzX3NlY0xldmVsX2NvbmYsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vQXV0aE5vUHJpdnxhdXRoTm9Qcml2fGF1dGhQcml2Iik7Ci0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRBdXRoUGFzcyIsIHVzbV9zZXRfcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRQcml2UGFzcyIsIHVzbV9zZXRfcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRBdXRoS2V5IiwgdXNtX3NldF9wYXNzd29yZCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldFByaXZLZXkiLCB1c21fc2V0X3Bhc3N3b3JkLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0QXV0aExvY2FsS2V5IiwgdXNtX3NldF9wYXNzd29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldFByaXZMb2NhbEtleSIsIHVzbV9zZXRfcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0xMzgzLDE4ICs5ODQsMjAgQEAKICAgICAvKgogICAgICAqIGlmIG91ciBlbmdpbmVJRCBoYXMgY2hhbmdlZCBhdCBhbGwsIHRoZSBib290cyByZWNvcmQgbXVzdCBiZSBzZXQgdG8gMSAKICAgICAgKi8KLSAgICBpZiAoZW5naW5lSURMZW4gIT0gKGludCkgb2xkRW5naW5lSURMZW5ndGggfHwKKyAgICBpZiAoZW5naW5lSURMZW4gIT0gb2xkRW5naW5lSURMZW5ndGggfHwKICAgICAgICAgb2xkRW5naW5lSUQgPT0gTlVMTCB8fCBjX2VuZ2luZUlEID09IE5VTEwgfHwKICAgICAgICAgbWVtY21wKG9sZEVuZ2luZUlELCBjX2VuZ2luZUlELCBlbmdpbmVJRExlbikgIT0gMCkgewogICAgICAgICBlbmdpbmVCb290cyA9IDE7CiAgICAgfQogCisjaWZkZWYgTkVUU05NUF9TRUNNT0RfVVNNCiAgICAgLyoKLSAgICAgKiBzZXQgb3VyIGxvY2FsIGVuZ2luZVRpbWUgaW4gdGhlIExDRCB0aW1pbmcgY2FjaGUgCisgICAgICogZm9yIFVTTSBzZXQgb3VyIGxvY2FsIGVuZ2luZVRpbWUgaW4gdGhlIExDRCB0aW1pbmcgY2FjaGUgCiAgICAgICovCiAgICAgc2V0X2VuZ2luZXRpbWUoY19lbmdpbmVJRCwgZW5naW5lSURMZW4sCiAgICAgICAgICAgICAgICAgICAgc25tcHYzX2xvY2FsX3NubXBFbmdpbmVCb290cygpLAogICAgICAgICAgICAgICAgICAgIHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSgpLCBUUlVFKTsKKyNlbmRpZiAvKiBORVRTTk1QX1NFQ01PRF9VU00gKi8KIAogICAgIFNOTVBfRlJFRShjX2VuZ2luZUlEKTsKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwpAQCAtMTUwOCwxMCArMTExMSw3IEBACiAgICAgaWYgKCFkZXN0IHx8ICFkZXN0bGVuKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmICgqZGVzdCkgewotICAgICAgICBTTk1QX0ZSRUUoKmRlc3QpOwotICAgICAgICAqZGVzdCA9IE5VTEw7Ci0gICAgfQorICAgIFNOTVBfRlJFRSgqZGVzdCk7CiAgICAgKmRlc3RsZW4gPSAwOwogCiAgICAgaWYgKHNyY2xlbiAmJiBzcmMpIHsKQEAgLTE1NTksMzggKzExNTksMzMgQEAKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgc25tcHYzX2dlbmVyYXRlX2VuZ2luZUlEKCkgKi8KIAotLyoKLSAqIHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSgpOiByZXR1cm4gdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZQotICogc25tcHYzIGVuZ2luZSBsYXN0IGluY3JlbWVudGVkIGVuZ2luZV9ib290cyAKKy8qKgorICogUmV0dXJuIHRoZSB2YWx1ZSBvZiBzbm1wRW5naW5lVGltZS4gQWNjb3JkaW5nIHRvIFJGQyAzNDE0IHNubXBFbmdpbmVUaW1lCisgKiBpcyBhIDMxLWJpdCBjb3VudGVyLiBlbmdpbmVCb290cyBtdXN0IGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgdGhhdAorICogY291bnRlciB3cmFwcyBhcm91bmQuCisgKgorICogQHNlZSBTZWUgYWxzbyA8YSBocmVmPSJodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDE0Ij5SRkMgMzQxNDwvYT4uCisgKgorICogQG5vdGUgSXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IGxlYXN0IG9uY2UgZXZlcnkKKyAqICAgMioqMzEgc2Vjb25kcy4KICAqLwogdV9sb25nCiBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUodm9pZCkKIHsKLSNpZmRlZiBTTk1QX1VTRV9USU1FUwotICBzdHJ1Y3QgdG1zIGR1bW15OwotICBjbG9ja190IG5vdyA9IHRpbWVzKCZkdW1teSk7Ci0gIC8qIGZpeG1lOiAtMSBpcyBmYXVsdCBjb2RlLi4uICovCi0gIHVuc2lnbmVkIGludCByZXN1bHQ7CisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HCisgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2FsY3VsYXRlX3NlY3RpbWVfZGlmZikKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcgKi8KIAotICBpZiAobm93IDwgc25tcHYzc3RhcnRDbG9jaykgewotICAgICAgcmVzdWx0ID0gVUlOVF9NQVggLSAoc25tcHYzc3RhcnRDbG9jayAtIG5vdyk7Ci0gIH0gZWxzZSB7Ci0gICAgICByZXN1bHQgPSBub3cgLSBzbm1wdjNzdGFydENsb2NrOwotICB9Ci0gIGlmIChyZXN1bHQgPCBsYXN0Y2FsbHRpbWUpIHsKLSAgICAgIC8qIHdyYXBwZWQgKi8KLSAgICAgIHdyYXBjb3VudGVyKys7Ci0gIH0KLSAgbGFzdGNhbGx0aW1lID0gcmVzdWx0OwotICByZXN1bHQgPSAgKFVJTlRfTUFYL2Nsb2NrdGlja3MpKndyYXBjb3VudGVyICsgcmVzdWx0L2Nsb2NrdGlja3M7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8qICFTTk1QX1VTRV9USU1FUyAqLworICAgIHN0YXRpYyB1aW50MzJfdCBsYXN0X2VuZ2luZVRpbWU7CiAgICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKKyAgICB1aW50MzJfdCBlbmdpbmVUaW1lOwogCi0gICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotICAgIHJldHVybiBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCZub3csICZzbm1wdjNzdGFydHRpbWUpOwotI2VuZGlmIC8qIEhBVkVfU1lTX1RJTUVTX0ggKi8KKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CisgICAgZW5naW5lVGltZSA9IGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoJm5vdywgJnNubXB2M3N0YXJ0dGltZSkgJiAweDdmZmZmZmZmTDsKKyAgICBpZiAoZW5naW5lVGltZSA8IGxhc3RfZW5naW5lVGltZSkKKyAgICAgICAgZW5naW5lQm9vdHMrKzsKKyAgICBsYXN0X2VuZ2luZVRpbWUgPSBlbmdpbmVUaW1lOworICAgIHJldHVybiBlbmdpbmVUaW1lOwogfQogCiAKQEAgLTE2NjIsMTggKzEyNTcsMTcgQEAKICNlbmRpZgogCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCi0vKgotICogc25tcHYzX3NldF9lbmdpbmVCb290c0FuZFRpbWUoKTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdC4gIEdvIGF3YXkuIAotICovCi0vKgotICogSXQgY2VydGFpbmx5IHNob3VsZCBuZXZlciBiZSB1c2VkLCB1bmxlc3MgaW4gYSB0ZXN0aW5nIHNjZW5lcm8sCi0gKiB3aGljaCBpcyB3aHkgaXQgd2FzIGNyZWF0ZWQgCisvKioKKyAqIFNldCBTTk1QdjMgZW5naW5lQm9vdHMgYW5kIHN0YXJ0IHRpbWUuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdC4gR28gYXdheS4gSXQgY2VydGFpbmx5IHNob3VsZCBuZXZlciBiZQorICogICB1c2VkLCB1bmxlc3MgaW4gYSB0ZXN0aW5nIHNjZW5hcmlvLCB3aGljaCBpcyB3aHkgaXQgd2FzIGNyZWF0ZWQKICAqLwogdm9pZAogc25tcHYzX3NldF9lbmdpbmVCb290c0FuZFRpbWUoaW50IGJvb3RzLCBpbnQgdHRpbWUpCiB7CiAgICAgZW5naW5lQm9vdHMgPSBib290czsKLSAgICBnZXR0aW1lb2ZkYXkoJnNubXB2M3N0YXJ0dGltZSwgTlVMTCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZzbm1wdjNzdGFydHRpbWUpOwogICAgIHNubXB2M3N0YXJ0dGltZS50dl9zZWMgLT0gdHRpbWU7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NubXBsaWIvc25wcmludGYuYyBiL3NubXBsaWIvc25wcmludGYuYwppbmRleCBhYWFmN2QxLi43MjZjNGY0IDEwMDY0NAotLS0gYS9zbm1wbGliL3NucHJpbnRmLmMKKysrIGIvc25tcGxpYi9zbnByaW50Zi5jCkBAIC02MywyNSArNjMsMTEgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCi0jaWYgSEFWRV9TVERBUkdfSAogIyBpbmNsdWRlIDxzdGRhcmcuaD4KLSMgZGVmaW5lIEhBVkVfU1REQVJHUyAgICAgICAgICAgLyogbGV0J3MgaG9wZSB0aGF0IHdvcmtzIGV2ZXJ5d2hlcmUgKG1qKSAqLwogIyBkZWZpbmUgVkFfTE9DQUxfREVDTCAgIHZhX2xpc3QgYXAKICMgZGVmaW5lIFZBX1NUQVJUKGYpICAgICB2YV9zdGFydChhcCwgZikKICMgZGVmaW5lIFZBX1NISUZUKHYsdCkgIDsgICAgICAgLyogbm8tb3AgZm9yIEFOU0kgKi8KICMgZGVmaW5lIFZBX0VORCAgICAgICAgICB2YV9lbmQoYXApCi0jZWxpZiBIQVZFX1ZBUkFSR1NfSAotIyAgaW5jbHVkZSA8dmFyYXJncy5oPgotIyAgdW5kZWYgSEFWRV9TVERBUkdTCi0jICBkZWZpbmUgVkFfTE9DQUxfREVDTCAgIHZhX2xpc3QgYXAKLSMgIGRlZmluZSBWQV9TVEFSVChmKSAgICAgdmFfc3RhcnQoYXApICAvKiBmIGlzIGlnbm9yZWQhICovCi0jICBkZWZpbmUgVkFfU0hJRlQodix0KSB2ID0gdmFfYXJnKGFwLHQpCi0jICBkZWZpbmUgVkFfRU5EICAgICAgICB2YV9lbmQoYXApCi0jZWxzZQotLyoKLSAqIFhYICoqIE5PIFZBUkFSR1MgKiogWFgKLSAqLwotI2VuZGlmCiAKICNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCiAjZGVmaW5lIExET1VCTEUgbG9uZyBkb3VibGUKQEAgLTcyNSwyMCArNzExLDkgQEAKIC8qCiAgKiBWQVJBUkdTMyAKICAqLwotI2lmZGVmIEhBVkVfU1REQVJHUwogaW50CiBzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi0jZWxzZQotaW50Ci1zbnByaW50Zih2YV9hbGlzdCkKLSAgICAgdmFfZGNsCi0jZW5kaWYKIHsKLSNpZm5kZWYgSEFWRV9TVERBUkdTCi0gICAgY2hhciAgICAgICAgICAgKnN0cjsKLSAgICBzaXplX3QgICAgICAgICAgY291bnQ7Ci0gICAgY2hhciAgICAgICAgICAgKmZtdDsKLSNlbmRpZgogICAgIFZBX0xPQ0FMX0RFQ0w7CiAKICAgICBWQV9TVEFSVChmbXQpOwpAQCAtODI4LDQgKzgwMyw2IEBACiB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOUFJJTlRGX1RFU1QgKi8KIAorI2Vsc2UKK2ludCBzbnByaW50Zl91bnVzZWQ7CS8qIFN1cHByZXNzICJlbXB0eSB0cmFuc2xhdGlvbiB1bml0IiB3YXJuaW5nICovCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFIQVZFX1NOUFJJTlRGICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3N0cmxjcHkuYyBiL3NubXBsaWIvc3RybGNweS5jCmluZGV4IGNlNTdmNDAuLjAyMzVhMzAgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc3RybGNweS5jCisrKyBiL3NubXBsaWIvc3RybGNweS5jCkBAIC01LDggKzUsNiBAQAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZiAhSEFWRV9TVFJMQ1BZCi0KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZWxzZQpAQCAtMTUsNiArMTMsOCBAQAogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorCiAvKiAKICAqIENvcGllcyBzcmMgdG8gdGhlIGRlc3QgYnVmZmVyLiBUaGUgY29weSB3aWxsIG5ldmVyIG92ZXJmbG93IHRoZSBkZXN0IGJ1ZmZlcgogICogYW5kIGRlc3Qgd2lsbCBhbHdheXMgYmUgbnVsbCB0ZXJtaW5hdGVkLCBsZW4gaXMgdGhlIHNpemUgb2YgdGhlIGRlc3QgYnVmZmVyLgpAQCAtNDEsNSArNDEsMyBAQAogCWRlc3RbbmV3X2xlbl0gPSAnXDAnOyAKIAlyZXR1cm4gKHNyY19sZW4pOyAKIH0KLQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAvKiAhSEFWRV9TVFJMQ1BZICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3N0cnRva19yLmMgYi9zbm1wbGliL3N0cnRva19yLmMKaW5kZXggYmZlNWE5Yi4uMjFkNDdkNiAxMDA2NDQKLS0tIGEvc25tcGxpYi9zdHJ0b2tfci5jCisrKyBiL3NubXBsaWIvc3RydG9rX3IuYwpAQCAtMzEsMTYgKzMxLDE2IEBACiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmICFIQVZFX1NUUlRPS19SCi0KICNpZm5kZWYgV0lOMzIKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNlbmRpZgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorCiAvKgotICogdGhyZWFkLXNhdmUgdmVyc2lvbiBvZiBzdHJ0b2sKKyAqIHRocmVhZC1zYWZlIHZlcnNpb24gb2Ygc3RydG9rCiAgKi8KIGNoYXIgKgogc3RydG9rX3IoY2hhciAqcywgY29uc3QgY2hhciAqZGVsaW0sIGNoYXIgKipsYXN0cykKQEAgLTUwLDggKzUwLDggQEAKIAljaGFyICp0b2s7CiAKIAkvKiBzIG1heSBiZSBOVUxMICovCi0JLyphc3NlcnQoZGVsaW0gIT0gTlVMTCk7Ki8KLQkvKmFzc2VydChsYXN0cyAhPSBOVUxMKTsqLworCS8qbmV0c25tcF9hc3NlcnQoZGVsaW0gIT0gTlVMTCk7Ki8KKwkvKm5ldHNubXBfYXNzZXJ0KGxhc3RzICE9IE5VTEwpOyovCiAKIAlpZiAocyA9PSBOVUxMICYmIChzID0gKmxhc3RzKSA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwpAQCAtOTIsNCArOTIsMyBAQAogCX0KIAkvKiBOT1RSRUFDSEVEICovCiB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFIQVZFX1NUUlRPS19SICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3N0cnRvbC5jIGIvc25tcGxpYi9zdHJ0b2wuYwppbmRleCA5ODlhMTYzLi5jNzFmOGJhIDEwMDY0NAotLS0gYS9zbm1wbGliL3N0cnRvbC5jCisrKyBiL3NubXBsaWIvc3RydG9sLmMKQEAgLTMzLDggKzMzLDYgQEAKIHN0YXRpYyBjaGFyICAgICBzY2NzaWRbXSA9ICJAKCMpc3RydG9sLmMgICAgNS40IChCZXJrZWxleSkgMi8yMy85MSI7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KIAotI2lmICFIQVZFX1NUUlRPTAotCiAjaWYgSEFWRV9MSU1JVFNfSAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCkBAIC0xMjUsNSArMTIzLDMgQEAKICAgICAgICAgKmVuZHB0ciA9IGFueSA/IHMgLSAxIDogKGNoYXIgKikgbnB0cjsKICAgICByZXR1cm4gKGFjYyk7CiB9Ci0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIUhBVkVfU1RSVE9MICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3N0cnRvdWwuYyBiL3NubXBsaWIvc3RydG91bC5jCmluZGV4IDgwMTI5MjAuLjdhZWEzMzAgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc3RydG91bC5jCisrKyBiL3NubXBsaWIvc3RydG91bC5jCkBAIC0yOSw4ICsyOSw2IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmICFIQVZFX1NUUlRPVUwKLQogI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQogc3RhdGljIGNoYXIgICAgIHNjY3NpZFtdID0gIkAoIylzdHJ0b3VsLmMgICA4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCkBAIC0xMDcsNSArMTA1LDMgQEAKICAgICAgICAgKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOwogICAgIHJldHVybiAoYWNjKTsKIH0KLQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhSEFWRV9TVFJUT1VMICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3N0cnRvdWxsLmMgYi9zbm1wbGliL3N0cnRvdWxsLmMKaW5kZXggYmU5NGYyOS4uOWVlNTNiNCAxMDA2NDQKLS0tIGEvc25tcGxpYi9zdHJ0b3VsbC5jCisrKyBiL3NubXBsaWIvc3RydG91bGwuYwpAQCAtMjAsNiArMjAsOCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKyNpZm5kZWYgSEFWRV9TVFJUT1VMTAorCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNDksMTMgKzUxLDggQEAKICNkZWZpbmUgVUxMT05HX01BWCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpCiAjZW5kaWYKIAotI2lmZGVmIFNUUlRPVUxMX1VOSVRfVEVTVAotdWludDY0X3QKLW15X3N0cnRvdWxsKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQotI2Vsc2UKIHVpbnQ2NF90CiBzdHJ0b3VsbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKLSNlbmRpZgogewogICAgIHVpbnQ2NF90ICAgICAgICByZXN1bHQgPSAwOwogICAgIGNvbnN0IGNoYXIgICAgICpwOwpAQCAtMTYyLDEyMiArMTU5LDQgQEAKICAgICByZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoU1RSVE9VTExfVU5JVF9URVNUKQotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2lmbmRlZiBQUkl1NjQKLSNpZmRlZiBfTVNDX1ZFUgotI2RlZmluZSBQUkl1NjQgIkk2NHUiCi0jZWxzZQotI2RlZmluZSBQUkl1NjQgImxsdSIKLSNlbmRpZgotI2VuZGlmCi0KLXN0cnVjdCBzdHJ0b3VsbF90ZXN0Y2FzZSB7Ci0gICAgLyoKLSAgICAgKiBpbnB1dHMgCi0gICAgICovCi0gICAgY29uc3QgY2hhciAgICAgKm5wdHI7Ci0gICAgaW50ICAgICAgICAgICAgIGJhc2U7Ci0gICAgLyoKLSAgICAgKiBleHBlY3RlZCBvdXRwdXRzIAotICAgICAqLwotICAgIGludCAgICAgICAgICAgICBleHBlY3RlZF9lcnJubzsKLSAgICBpbnQgICAgICAgICAgICAgZXhwZWN0ZWRfZW5kOwotICAgIHVpbnQ2NF90ICAgICAgICBleHBlY3RlZF9yZXN1bHQ7Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN0cnRvdWxsX3Rlc3RjYXNlIHRlc3RfaW5wdXRbXSA9IHsKLSAgICB7IjB4MCIsIDAsIDAsIDMsIDB9LAotICAgIHsiMSIsIDAsIDAsIDEsIDF9LAotICAgIHsiMHgxIiwgMCwgMCwgMywgMX0sCi0gICAgeyIgIC0wNjY2IiwgMCwgMCwgNywgLTA2NjZ9LAotICAgIHsiICAtMHg2NjYiLCAwLCAwLCA4LCAtMHg2NjZ9LAotICAgIHsiMTg0NDY3NDQwNzM3MDk1NTE2MTQiLCAwLCAwLCAyMCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZlKX0sCi0gICAgeyIweGZmZmZmZmZmZmZmZmZmZmUiLCAwLCAwLCAxOCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZlKX0sCi0gICAgeyIxODQ0Njc0NDA3MzcwOTU1MTYxNSIsIDAsIDAsIDIwLCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpfSwKLSAgICB7IjB4ZmZmZmZmZmZmZmZmZmZmZiIsIDAsIDAsIDE4LCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpfSwKLSAgICB7IjE4NDQ2NzQ0MDczNzA5NTUxNjE2IiwgMCwgRVJBTkdFLCAyMCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKX0sCi0gICAgeyIweDEwMDAwMDAwMDAwMDAwMDAwIiwgMCwgRVJBTkdFLCAxOSwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKX0sCi0gICAgeyJmZiIsIDE2LCAwLCAyLCAyNTV9LAotICAgIHsiMHhmZiIsIDE2LCAwLCA0LCAyNTV9LAotICAgIHsiICIsIDAsIDAsIDAsIDB9LAotICAgIHsiMHgiLCAwLCAwLCAxLCAwfSwKLSAgICB7IjB4IiwgOCwgMCwgMSwgMH0sCi0gICAgeyIweCIsIDE2LCAwLCAxLCAwfSwKLSAgICB7Inp5eXkiLCAwLCAwLCAwLCAwfSwKLSAgICB7IjB4ZmZmZmZmZmZmZmZmZmZmZmYiLCAwLCBFUkFOR0UsIDE5LCBVTExPTkdfTUFYfSwKLSAgICB7IjB4ZmZmZmZmZmZmZmZmZmZmZmZ6IiwgMCwgRVJBTkdFLCAxOSwgVUxMT05HX01BWH0KLX07Ci0KLWludAotbWFpbih2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBmYWlsdXJlX2NvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgICAgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdF9pbnB1dCkgLyBzaXplb2YodGVzdF9pbnB1dFswXSk7IGkrKykgewotICAgICAgICBjb25zdCBzdHJ1Y3Qgc3RydG91bGxfdGVzdGNhc2UgKmNvbnN0IHAgPSAmdGVzdF9pbnB1dFtpXTsKLSAgICAgICAgY2hhciAgICAgICAgICAgKmVuZHB0cjsKLSAgICAgICAgdWludDY0X3QgICAgICAgIHJlc3VsdDsKLQotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHJlc3VsdCA9IG15X3N0cnRvdWxsKHAtPm5wdHIsICZlbmRwdHIsIHAtPmJhc2UpOwotICAgICAgICBpZiAoZXJybm8gIT0gcC0+ZXhwZWN0ZWRfZXJybm8pIHsKLSAgICAgICAgICAgIGZhaWx1cmVfY291bnQrKzsKLSAgICAgICAgICAgIHByaW50ZigidGVzdCAlZCBmYWlsZWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIGVycm5vICVkIgotICAgICAgICAgICAgICAgICAgICIsIGdvdCBlcnJubyAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9lcnJubywgZXJybm8pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gcC0+ZXhwZWN0ZWRfcmVzdWx0KSB7Ci0gICAgICAgICAgICBmYWlsdXJlX2NvdW50Kys7Ci0gICAgICAgICAgICBwcmludGYoInRlc3QgJWQgZmFpbGVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCByZXN1bHQgJSIgUFJJdTY0Ci0gICAgICAgICAgICAgICAgICAgIiwgZ290IHJlc3VsdCAlIiBQUkl1NjQgIlxuIiwKLSAgICAgICAgICAgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9yZXN1bHQsIHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVuZHB0ciAtIHAtPm5wdHIgIT0gcC0+ZXhwZWN0ZWRfZW5kKSB7Ci0gICAgICAgICAgICBmYWlsdXJlX2NvdW50Kys7Ci0gICAgICAgICAgICBwcmludGYoInRlc3QgJWQgZmFpbGVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCBlbmQgJWQsIgotICAgICAgICAgICAgICAgICAgICIgZ290IGVuZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9lbmQsIChpbnQpIChlbmRwdHIgLSBwLT5ucHRyKSk7Ci0gICAgICAgIH0KLQotI2lmIEhBVkVfU1RSVE9VTEwKLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICByZXN1bHQgPSBzdHJ0b3VsbChwLT5ucHRyLCAmZW5kcHRyLCBwLT5iYXNlKTsKLSAgICAgICAgaWYgKGVycm5vICE9IHAtPmV4cGVjdGVkX2Vycm5vKSB7Ci0gICAgICAgICAgICBmYWlsdXJlX2NvdW50Kys7Ci0gICAgICAgICAgICBwcmludGYoInRlc3QgJWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIGVycm5vICVkIgotICAgICAgICAgICAgICAgICAgICIsIGxpYmMgc3RydG91bGwoKSByZXR1cm5lZCBlcnJubyAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9lcnJubywgZXJybm8pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gcC0+ZXhwZWN0ZWRfcmVzdWx0KSB7Ci0gICAgICAgICAgICBmYWlsdXJlX2NvdW50Kys7Ci0gICAgICAgICAgICBwcmludGYoInRlc3QgJWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIHJlc3VsdCAlIiBQUkl1NjQKLSAgICAgICAgICAgICAgICAgICAiLCBsaWJjIHN0cnRvdWxsKCkgcmV0dXJuZWQgcmVzdWx0ICUiIFBSSXU2NCAiXG4iLAotICAgICAgICAgICAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX3Jlc3VsdCwgcmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW5kcHRyIC0gcC0+bnB0ciAhPSBwLT5leHBlY3RlZF9lbmQpIHsKLSAgICAgICAgICAgIGZhaWx1cmVfY291bnQrKzsKLSAgICAgICAgICAgIHByaW50ZigidGVzdCAlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgZW5kICVkLCIKLSAgICAgICAgICAgICAgICAgICAiIGxpYmMgc3RydG91bGwoKSByZXR1cm5lZCBlbmQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfZW5kLCAoaW50KSAoZW5kcHRyIC0gcC0+bnB0cikpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgaWYgKGZhaWx1cmVfY291bnQgPT0gMCkKLSAgICAgICAgcHJpbnRmKCJBbGwgJWQgdGVzdHMgcGFzc2VkLlxuIiwgaSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBkZWZpbmVkKFNUUlRPVUxMX1VOSVRfVEVTVCkgKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA0Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKLSAqIGNvbXBpbGUtY29tbWFuZDogImdjYyAtV2FsbCAtV2Vycm9yIC1EU1RSVE9VTExfVU5JVF9URVNUPTEgLUkuLi9pbmNsdWRlIC1nIC1vIHN0cnRvdWxsLXVuaXQtdGVzdCBzdHJ0b3VsbC5jICYmIC4vc3RydG91bGwtdW5pdC10ZXN0IgotICogRW5kOgotICovCisjZW5kaWYgLyogSEFWRV9TVFJUT1VMTCAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zeXN0ZW0uYyBiL3NubXBsaWIvc3lzdGVtLmMKaW5kZXggYWVkOTE5ZC4uY2M3Y2YzYyAxMDA2NDQKLS0tIGEvc25tcGxpYi9zeXN0ZW0uYworKysgYi9zbm1wbGliL3N5c3RlbS5jCkBAIC0zMyw5ICszMywxNiBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKy8qCiAgKiBTeXN0ZW0gZGVwZW5kZW50IHJvdXRpbmVzIGdvIGhlcmUKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC01NCwxMSArNjEsNyBAQAogI2VuZGlmCiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTc0LDE1ICs3NywxNiBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgogI2lmIEhBVkVfTkVUX0lGX0gKICNpbmNsdWRlIDxuZXQvaWYuaD4KICNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKwogCiAjaWYgSEFWRV9TWVNfU09DS0lPX0gKICNpbmNsdWRlIDxzeXMvc29ja2lvLmg+CkBAIC0xNDQsMTAgKzE0OCwzNCBAQAogI2luY2x1ZGUgPHN5cy9zeXN0ZW1pbmZvLmg+CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoZGFyd2luOSkKKyNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPiAgICAgICAgLyogZm9yIF9OU0dldEFyZ3YoKSAqLworI2VuZGlmCisKKyNpZiBIQVZFX1BXRF9ICisjaW5jbHVkZSA8cHdkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0dSUF9ICisjaW5jbHVkZSA8Z3JwLmg+CisjZW5kaWYKKwogI2lmIEhBVkVfTElNSVRTX0gKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNlbmRpZgogCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNpZmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorI2lmIDEgLypIQVZFX0FSUEFfTkFNRVNFUl9IKi8KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHZhbGlkYXRvci92YWxpZGF0b3IuaD4KKy8qIE5ldFNOTVAgYW5kIEROU1NFQy1Ub29scyBib3RoIGRlZmluZSBGUkVFLiBXZSdsbCBub3QgdXNlIGVpdGhlciBoZXJlLiAqLworI3VuZGVmIEZSRUUKKyNlbmRpZgorCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CkBAIC0xNTYsNiArMTg0LDE2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaD4gLyogZm9yIGdldF90ZW1wX2ZpbGVfcGF0dGVybigpICovCiAKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKworLyogTmV0U05NUCBhbmQgRE5TU0VDLVRvb2xzIGJvdGggZGVmaW5lIEZSRUUuIFdlJ2xsIG5vdCB1c2UgZWl0aGVyIGhlcmUuICovCisjdW5kZWYgRlJFRQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3lzdGVtX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzZXJfaW5mb3JtYXRpb24sIHN5c3RlbV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FsY3VsYXRlX3NlY3RpbWVfZGlmZiwgc3lzdGVtX2FsbCkKKwogI2lmbmRlZiBJRkZfTE9PUEJBQ0sKICMJZGVmaW5lIElGRl9MT09QQkFDSyAwCiAjZW5kaWYKQEAgLTE2Niw2ICsyMDQsMzcgQEAKICMgZGVmaW5lIExPT1BCQUNLICAgIDB4N2YwMDAwMDEKICNlbmRpZgogCisjaWZuZGVmIEVBSV9GQUlMCisjIGRlZmluZSBFQUlfRkFJTCAgICAtNCAgICAvKiBOb24tcmVjb3ZlcmFibGUgZmFpbHVyZSBpbiBuYW1lIHJlcy4gICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9GT1JLKQorc3RhdGljIHZvaWQKK19kYWVtb25fcHJlcChpbnQgc3RkZXJyX2xvZykKK3sKKyAgICAvKiBBdm9pZCBrZWVwaW5nIGFueSBkaXJlY3RvcnkgaW4gdXNlLiAqLworICAgIGNoZGlyKCIvIik7CisKKyAgICBpZiAoc3RkZXJyX2xvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBDbG9zZSBpbmhlcml0ZWQgZmlsZSBkZXNjcmlwdG9ycyB0byBhdm9pZAorICAgICAqIGtlZXBpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcy4KKyAgICAgKi8KKyAgICBjbG9zZSgwKTsKKyAgICBjbG9zZSgxKTsKKyAgICBjbG9zZSgyKTsKKworICAgIC8qCisgICAgICogUmVkaXJlY3Qgc3Rke2luLG91dCxlcnJ9IHRvIC9kZXYvbnVsbCwganVzdCBpbiBjYXNlLgorICAgICAqLworICAgIG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisgICAgZHVwKDApOworICAgIGR1cCgwKTsKK30KKyNlbmRpZgorCiAvKioKICAqIGZvcmsgY3VycmVudCBwcm9jZXNzIGludG8gdGhlIGJhY2tncm91bmQuCiAgKgpAQCAtMTk0LDYgKzI2MywyMiBAQAogICAgIGludCBpID0gMDsKICAgICBERUJVR01TR1QoKCJkYWVtb25pemUiLCJkZWFtb25pemluZy4uLlxuIikpOwogI2lmIEhBVkVfRk9SSworI2lmIGRlZmluZWQoZGFyd2luOSkKKyAgICAgY2hhciAgICAgICAgICAgIHBhdGggW1BBVEhfTUFYXSA9ICIiOworICAgICB1aW50MzJfdCAgICAgICAgc2l6ZSA9IHNpemVvZiAocGF0aCk7CisKKyAgICAgLyoKKyAgICAgICogaWYgd2UgYXJlIGFscmVhZHkgbGF1bmNoZWQgaW4gYSAiZGFlbW9uaXplZCBzdGF0ZSIsIGp1c3QKKyAgICAgICogY2xvc2UgJiByZWRpcmVjdCB0aGUgZmlsZSBkZXNjcmlwdG9ycworICAgICAgKi8KKyAgICAgaWYoZ2V0cHBpZCgpIDw9IDIpIHsKKyAgICAgICAgIF9kYWVtb25fcHJlcChzdGRlcnJfbG9nKTsKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisKKyAgICAgaWYgKF9OU0dldEV4ZWN1dGFibGVQYXRoIChwYXRoLCAmc2l6ZSkpCisgICAgICAgICByZXR1cm4gLTE7CisjZW5kaWYKICAgICAvKgogICAgICAqIEZvcmsgdG8gcmV0dXJuIGNvbnRyb2wgdG8gdGhlIGludm9raW5nIHByb2Nlc3MgYW5kIHRvCiAgICAgICogZ3VhcmFudGVlIHRoYXQgd2UgYXJlbid0IGEgcHJvY2VzcyBncm91cCBsZWFkZXIuCkBAIC0yMzUsMjYgKzMyMCwyMiBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICBERUJVR01TR1QoKCJkYWVtb25pemUiLCJjaGlsZCBjb250aW51aW5nXG4iKSk7CiAKLSAgICAgICAgICAgIC8qIEF2b2lkIGtlZXBpbmcgYW55IGRpcmVjdG9yeSBpbiB1c2UuICovCi0gICAgICAgICAgICBjaGRpcigiLyIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXN0ZGVycl9sb2cpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIENsb3NlIGluaGVyaXRlZCBmaWxlIGRlc2NyaXB0b3JzIHRvIGF2b2lkCi0gICAgICAgICAgICAgICAgICoga2VlcGluZyB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGNsb3NlKDApOwotICAgICAgICAgICAgICAgIGNsb3NlKDEpOwotICAgICAgICAgICAgICAgIGNsb3NlKDIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogUmVkaXJlY3Qgc3Rke2luLG91dCxlcnJ9IHRvIC9kZXYvbnVsbCwganVzdCBpbgotICAgICAgICAgICAgICAgICAqIGNhc2UuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKLSAgICAgICAgICAgICAgICBkdXAoMCk7Ci0gICAgICAgICAgICAgICAgZHVwKDApOwotICAgICAgICAgICAgfQorI2lmICEgZGVmaW5lZChkYXJ3aW45KQorICAgICAgICAgICAgX2RhZW1vbl9wcmVwKHN0ZGVycl9sb2cpOworI2Vsc2UKKyAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAqIFNvbWUgZGFyd2luIGNhbGxzICh1c2luZyBtYWNoIHBvcnRzKSBkb24ndCB3b3JrIGFmdGVyCisgICAgICAgICAgICAgICogYSBmb3JrLiBTbywgbm93IHRoYXQgd2UndmUgZm9ya2VkLCB3ZSByZS1leGVjIG91cnNlbGYKKyAgICAgICAgICAgICAgKiB0byBlbnN1cmUgdGhhdCB0aGUgY2hpbGQncyBtYWNoIHBvcnRzIGFyZSBhbGwgc2V0IHVwIGNvcnJlY3RseSwKKyAgICAgICAgICAgICAgKiB0aGUgZ2V0cHBpZCBjYWxsIGFib3ZlIHdpbGwgcHJldmVudCB0aGUgZXhlYyBjaGlsZCBmcm9tCisgICAgICAgICAgICAgICogZm9ya2luZy4uLgorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgIGNoYXIgKiBjb25zdCAqYXJndiA9ICpfTlNHZXRBcmd2ICgpOworICAgICAgICAgICAgIERFQlVHTVNHVCgoImRhZW1vbml6ZSIsInJlLWV4ZWNpbmcgZm9ya2VkIGNoaWxkXG4iKSk7CisgICAgICAgICAgICAgZXhlY3YgKHBhdGgsIGFyZ3YpOworICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIkZvcmtlZCBjaGlsZCB1bmFibGUgdG8gcmUtZXhlYyAtICVzLlxuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgICAgZXhpdCAoMCk7CisjZW5kaWYKICAgICAgICAgfQogI2VuZGlmIC8qICFXSU4zMiAqLwogICAgIH0KQEAgLTI2NiwyMDQgKzM0Nyw2IEBACiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCiAgKi8KICNpZmRlZgkJCQkJCQlXSU4zMgotIwlkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotIwlkZWZpbmUgV0lOMzJJT19JU19TVERJTwotIwlkZWZpbmUgUEFUSExFTgkxMDI0Ci0KLSMJaW5jbHVkZSA8dGNoYXIuaD4KLSMJaW5jbHVkZSA8d2luZG93cy5oPgotCi0vKgotICogTWluR1cgZGVmaW5lcyBXSU4zMiwgYnV0IGhhcyB3b3JraW5nIGRpcmVudCBzdHVmZi4KLSAqLwotI2lmbmRlZiBIQVZFX0RJUkVOVF9IIAotCi0vKgotICogVGhlIGlkZWEgaGVyZSBpcyB0byByZWFkIGFsbCB0aGUgZGlyZWN0b3J5IG5hbWVzIGludG8gYSBzdHJpbmcgdGFibGUKLSAqICogKHNlcGFyYXRlZCBieSBudWxscykgYW5kIHdoZW4gb25lIG9mIHRoZSBvdGhlciBkaXIgZnVuY3Rpb25zIGlzIGNhbGxlZAotICogKiByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZmlsZSBuYW1lLgotICovCi1ESVIgICAgICAgICAgICAqCi1vcGVuZGlyKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotICAgIERJUiAgICAgICAgICAgICpwOwotICAgIGxvbmcgICAgICAgICAgICBsZW47Ci0gICAgbG9uZyAgICAgICAgICAgIGlkeDsKLSAgICBjaGFyICAgICAgICAgICAgc2Nhbm5hbWVzcGNbUEFUSExFTl07Ci0gICAgY2hhciAgICAgICAgICAgKnNjYW5uYW1lID0gc2Nhbm5hbWVzcGM7Ci0gICAgc3RydWN0IHN0YXQgICAgIHNidWY7Ci0gICAgV0lOMzJfRklORF9EQVRBIEZpbmREYXRhOwotICAgIEhBTkRMRSAgICAgICAgICBmaDsKLQotICAgIC8qCi0gICAgICogY2hlY2sgdG8gc2VlIGlmIGZpbGVuYW1lIGlzIGEgZGlyZWN0b3J5IAotICAgICAqLwotICAgIGlmICgoc3RhdChmaWxlbmFtZSwgJnNidWYpIDwgMCkgfHwgKChzYnVmLnN0X21vZGUgJiBTX0lGRElSKSA9PSAwKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGdldCB0aGUgZmlsZSBzeXN0ZW0gY2hhcmFjdGVyaXN0aWNzIAotICAgICAqLwotICAgIC8qCi0gICAgICogaWYoR2V0RnVsbFBhdGhOYW1lKGZpbGVuYW1lLCBTTk1QX01BWFBBVEgsIHJvb3QsICZkdW1teSkpIHsKLSAgICAgKiAqICAgIGlmKGR1bW15ID0gc3RyY2hyKHJvb3QsICdcXCcpKQotICAgICAqICogICAgICAgICorK2R1bW15ID0gJ1wwJzsKLSAgICAgKiAqICAgIGlmKEdldFZvbHVtZUluZm9ybWF0aW9uKHJvb3QsIHZvbG5hbWUsIFNOTVBfTUFYUEFUSCwgJnNlcmlhbCwKLSAgICAgKiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXhuYW1lLCAmZmxhZ3MsIDAsIDApKSB7Ci0gICAgICogKiAgICAgICAgZG93bmNhc2UgPSAhKGZsYWdzICYgRlNfQ0FTRV9JU19QUkVTRVJWRUQpOwotICAgICAqICogICAgfQotICAgICAqICogIH0KLSAgICAgKiAqICBlbHNlIHsKLSAgICAgKiAqICAgIGRvd25jYXNlID0gVFJVRTsKLSAgICAgKiAqICB9Ci0gICAgICovCi0KLSAgICAvKgotICAgICAqIENyZWF0ZSB0aGUgc2VhcmNoIHBhdHRlcm4gCi0gICAgICovCi0gICAgc3RyY3B5KHNjYW5uYW1lLCBmaWxlbmFtZSk7Ci0KLSAgICBpZiAoc3RyY2hyKCIvXFwiLCAqKHNjYW5uYW1lICsgc3RybGVuKHNjYW5uYW1lKSAtIDEpKSA9PSBOVUxMKQotICAgICAgICBzdHJjYXQoc2Nhbm5hbWUsICIvKiIpOwotICAgIGVsc2UKLSAgICAgICAgc3RyY2F0KHNjYW5uYW1lLCAiKiIpOwotCi0gICAgLyoKLSAgICAgKiBkbyB0aGUgRmluZEZpcnN0RmlsZSBjYWxsIAotICAgICAqLwotICAgIGZoID0gRmluZEZpcnN0RmlsZShzY2FubmFtZSwgJkZpbmREYXRhKTsKLSAgICBpZiAoZmggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBHZXQgdXMgYSBESVIgc3RydWN0dXJlIAotICAgICAqLwotICAgIHAgPSAoRElSICopIG1hbGxvYyhzaXplb2YoRElSKSk7Ci0gICAgLyoKLSAgICAgKiBOZXd6KDEzMDMsIHAsIDEsIERJUik7IAotICAgICAqLwotICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyoKLSAgICAgKiBub3cgYWxsb2NhdGUgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN0cmluZyB0YWJsZSBmb3IKLSAgICAgKiAqIHRoZSBmaWxlbmFtZXMgdGhhdCB3ZSBmaW5kLgotICAgICAqLwotICAgIGlkeCA9IHN0cmxlbihGaW5kRGF0YS5jRmlsZU5hbWUpICsgMTsKLSAgICBwLT5zdGFydCA9IChjaGFyICopIG1hbGxvYyhpZHgpOwotICAgIC8qCi0gICAgICogTmV3KDEzMDQsIHAtPnN0YXJ0LCBpZHgsIGNoYXIpOwotICAgICAqLwotICAgIGlmIChwLT5zdGFydCA9PSBOVUxMKSB7Ci0gICAgICAgIGZyZWUocCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBzdHJjcHkocC0+c3RhcnQsIEZpbmREYXRhLmNGaWxlTmFtZSk7Ci0gICAgLyoKLSAgICAgKiBpZihkb3duY2FzZSkKLSAgICAgKiAqICAgIHN0cmx3cihwLT5zdGFydCk7Ci0gICAgICovCi0gICAgcC0+bmZpbGVzID0gMDsKLQotICAgIC8qCi0gICAgICogbG9vcCBmaW5kaW5nIGFsbCB0aGUgZmlsZXMgdGhhdCBtYXRjaCB0aGUgd2lsZGNhcmQKLSAgICAgKiAqICh3aGljaCBzaG91bGQgYmUgYWxsIG9mIHRoZW0gaW4gdGhpcyBkaXJlY3RvcnkhKS4KLSAgICAgKiAqIHRoZSB2YXJpYWJsZSBpZHggc2hvdWxkIHBvaW50IG9uZSBwYXN0IHRoZSBudWxsIHRlcm1pbmF0b3IKLSAgICAgKiAqIG9mIHRoZSBwcmV2aW91cyBzdHJpbmcgZm91bmQuCi0gICAgICovCi0gICAgd2hpbGUgKEZpbmROZXh0RmlsZShmaCwgJkZpbmREYXRhKSkgewotICAgICAgICBsZW4gPSBzdHJsZW4oRmluZERhdGEuY0ZpbGVOYW1lKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogYnVtcCB0aGUgc3RyaW5nIHRhYmxlIHNpemUgYnkgZW5vdWdoIGZvciB0aGUKLSAgICAgICAgICogKiBuZXcgbmFtZSBhbmQgaXQncyBudWxsIHRlcm1pbmF0b3IKLSAgICAgICAgICovCi0gICAgICAgIHAtPnN0YXJ0ID0gKGNoYXIgKikgcmVhbGxvYygodm9pZCAqKSBwLT5zdGFydCwgaWR4ICsgbGVuICsgMSk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFJlbmV3KHAtPnN0YXJ0LCBpZHgrbGVuKzEsIGNoYXIpOwotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHAtPnN0YXJ0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZyZWUocCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBzdHJjcHkoJnAtPnN0YXJ0W2lkeF0sIEZpbmREYXRhLmNGaWxlTmFtZSk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGlmIChkb3duY2FzZSkgCi0gICAgICAgICAqICogICAgICAgIHN0cmx3cigmcC0+c3RhcnRbaWR4XSk7Ci0gICAgICAgICAqLwotICAgICAgICBwLT5uZmlsZXMrKzsKLSAgICAgICAgaWR4ICs9IGxlbiArIDE7Ci0gICAgfQotICAgIEZpbmRDbG9zZShmaCk7Ci0gICAgcC0+c2l6ZSA9IGlkeDsKLSAgICBwLT5jdXJyID0gcC0+c3RhcnQ7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLQotLyoKLSAqIFJlYWRkaXIganVzdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBwb2ludGVyIGFuZCBidW1wcyB0aGUKLSAqICogc3RyaW5nIHBvaW50ZXIgdG8gdGhlIG5EbGxFeHBvcnQgZW50cnkuCi0gKi8KLXN0cnVjdCBkaXJlY3QgICoKLXJlYWRkaXIoRElSICogZGlycCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgbGVuOwotICAgIHN0YXRpYyBpbnQgICAgICBkdW1teSA9IDA7Ci0KLSAgICBpZiAoZGlycC0+Y3VycikgewotICAgICAgICAvKgotICAgICAgICAgKiBmaXJzdCBzZXQgdXAgdGhlIHN0cnVjdHVyZSB0byByZXR1cm4gCi0gICAgICAgICAqLwotICAgICAgICBsZW4gPSBzdHJsZW4oZGlycC0+Y3Vycik7Ci0gICAgICAgIHN0cmNweShkaXJwLT5kaXJzdHIuZF9uYW1lLCBkaXJwLT5jdXJyKTsKLSAgICAgICAgZGlycC0+ZGlyc3RyLmRfbmFtbGVuID0gbGVuOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEZha2UgYW4gaW5vZGUgCi0gICAgICAgICAqLwotICAgICAgICBkaXJwLT5kaXJzdHIuZF9pbm8gPSBkdW1teSsrOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE5vdyBzZXQgdXAgZm9yIHRoZSBuRGxsRXhwb3J0IGNhbGwgdG8gcmVhZGRpciAKLSAgICAgICAgICovCi0gICAgICAgIGRpcnAtPmN1cnIgKz0gbGVuICsgMTsKLSAgICAgICAgaWYgKGRpcnAtPmN1cnIgPj0gKGRpcnAtPnN0YXJ0ICsgZGlycC0+c2l6ZSkpIHsKLSAgICAgICAgICAgIGRpcnAtPmN1cnIgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICYoZGlycC0+ZGlyc3RyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IG9wZW5kaXIgCi0gKi8KLWludAotY2xvc2VkaXIoRElSICogZGlycCkKLXsKLSAgICBmcmVlKGRpcnAtPnN0YXJ0KTsKLSAgICBmcmVlKGRpcnApOwotICAgIHJldHVybiAxOwotfQotI2VuZGlmIC8qIEhBVkVfRElSRU5UX0ggKi8KLQotI2lmbmRlZiBIQVZFX0dFVFRJTUVPRkRBWQotCi1pbnQKLWdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopCi17Ci0gICAgc3RydWN0IF90aW1lYiAgIHRpbWVidWZmZXI7Ci0KLSAgICBfZnRpbWUoJnRpbWVidWZmZXIpOwotICAgIHR2LT50dl91c2VjID0gdGltZWJ1ZmZlci5taWxsaXRtICogMTAwMDsKLSAgICB0di0+dHZfc2VjID0gdGltZWJ1ZmZlci50aW1lOwotICAgIHJldHVybiAoMCk7Ci19Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFIQVZFX0dFVFRJTUVPRkRBWSAqLwotCiBpbl9hZGRyX3QKIGdldF9teWFkZHIodm9pZCkKIHsKQEAgLTY0Niw3ICs1MjksNyBAQAogCiAgICAgZm9yIChpZnJwID0gaWZjLmlmY19yZXE7CiAgICAgICAgIChjaGFyICopaWZycCA8IChjaGFyICopaWZjLmlmY19yZXEgKyBpZmMuaWZjX2xlbjsKLSNpZmRlZiBTVFJVQ1RfU09DS0FERFJfSEFTX1NBX0xFTgorI2lmZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX0xFTgogICAgICAgICBpZnJwID0gKHN0cnVjdCBpZnJlcSAqKSgoKGNoYXIgKikgaWZycCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaWZycC0+aWZyX25hbWUpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZycC0+aWZyX2FkZHIuc2FfbGVuKQpAQCAtNzA5LDE0ICs1OTIsMTcgQEAKICAgICBzaXplX3QgICAgICAgICAgbGVuOwogI2VsaWYgZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfTkxJU1QpCiAgICAgaW50ICAgICAgICAgICAgIGttZW07Ci0gICAgc3RhdGljIHN0cnVjdCBubGlzdCBubFtdID0gewogI2lmICFkZWZpbmVkKGhwdXgpCi0gICAgICAgIHsoY2hhciAqKSAiX2Jvb3R0aW1lIn0sCisgICAgc3RhdGljIGNoYXIgYm9vdHRpbWVfbmFtZVtdID0gIl9ib290dGltZSI7CiAjZWxzZQotICAgICAgICB7KGNoYXIgKikgImJvb3R0aW1lIn0sCisgICAgc3RhdGljIGNoYXIgYm9vdHRpbWVfbmFtZVtdID0gImJvb3R0aW1lIjsKICNlbmRpZgotICAgICAgICB7KGNoYXIgKikgIiJ9Ci0gICAgfTsKKyAgICBzdGF0aWMgY2hhciBlbXB0eV9uYW1lW10gPSAiIjsKKyAgICBzdHJ1Y3Qgbmxpc3QgbmxbMl07CisKKyAgICBtZW1zZXQobmwsIDAsIHNpemVvZihubCkpOworICAgIG5sWzBdLm5fbmFtZSA9IGJvb3R0aW1lX25hbWU7CisgICAgbmxbMV0ubl9uYW1lID0gZW1wdHlfbmFtZTsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBocHV4MTAgfHwgaHB1eCAxMSAqLwogCkBAIC03NTYsMzAgKzY0MiwyNSBAQAogfQogI2VuZGlmCiAKLS8qCi0gKiBSZXR1cm5zIHVwdGltZSBpbiBjZW50aXNlY29uZHMoISkuCisvKioKKyAqIFJldHVybnMgdGhlIHN5c3RlbSB1cHRpbWUgaW4gY2VudGlzZWNvbmRzLgorICoKKyAqIEBub3RlIFRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBpZGVudGljYWwgdG8gc3lzVXBUaW1lCisgKiAgIGRlZmluZWQgaW4gUkZDIDEyMTMuIGdldF91cHRpbWUoKSByZXR1cm5zIHRoZSBzeXN0ZW0gdXB0aW1lIHdoaWxlCisgKiAgIHN5c1VwVGltZSByZXByZXNlbnRzIHRoZSB0aW1lIHRoYXQgaGFzIGVsYXBzZWQgc2luY2UgdGhlIG1vc3QgcmVjZW50CisgKiAgIHJlc3RhcnQgb2YgdGhlIG5ldHdvcmsgbWFuYWdlciAoc25tcGQpLgorICoKKyAqIEBzZWUgU2VlIGFsc28gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCkuCiAgKi8KIGxvbmcKIGdldF91cHRpbWUodm9pZCkKIHsKLSNpZiAhZGVmaW5lZChzb2xhcmlzMikgJiYgIWRlZmluZWQobGludXgpICYmICFkZWZpbmVkKGN5Z3dpbikgJiYgIWRlZmluZWQoYWl4NCkgJiYgIWRlZmluZWQoYWl4NSkgJiYgIWRlZmluZWQoYWl4NikKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwotICAgIGxvbmcgICAgICAgICAgICBib290dGltZV9jc2Vjcywgbm93dGltZV9jc2VjczsKLQotICAgIGJvb3R0aW1lX2NzZWNzID0gZ2V0X2Jvb3R0aW1lKCk7Ci0gICAgaWYgKGJvb3R0aW1lX2NzZWNzID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOwotICAgIG5vd3RpbWVfY3NlY3MgPSAobm93LnR2X3NlYyAqIDEwMCkgKyAobm93LnR2X3VzZWMgLyAxMDAwMCk7Ci0KLSAgICByZXR1cm4gKG5vd3RpbWVfY3NlY3MgLSBib290dGltZV9jc2Vjcyk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQorICAgIHN0YXRpYyBjaGFyIGxib2x0X25hbWVbXSA9ICJsYm9sdCI7CiAgICAgc3RydWN0IG5saXN0IG5sOwogICAgIGludCBrbWVtOwogICAgIHRpbWVfdCBsYm9sdDsKLSAgICBubC5uX25hbWUgPSAoY2hhciAqKSAibGJvbHQiOworICAgIG5sLm5fbmFtZSA9IGxib2x0X25hbWU7CiAgICAgaWYoa25saXN0KCZubCwgMSwgc2l6ZW9mKHN0cnVjdCBubGlzdCkpICE9IDApIHJldHVybigwKTsKICAgICBpZihubC5uX3R5cGUgPT0gMCB8fCBubC5uX3ZhbHVlID09IDApIHJldHVybigwKTsKICAgICBpZigoa21lbSA9IG9wZW4oIi9kZXYvbWVtIiwgMCkpIDwgMCkgcmV0dXJuIDA7CkBAIC03ODcsOSArNjY4LDcgQEAKICAgICByZWFkKGttZW0sICZsYm9sdCwgc2l6ZW9mKGxib2x0KSk7CiAgICAgY2xvc2Uoa21lbSk7CiAgICAgcmV0dXJuKGxib2x0KTsKLSNlbmRpZgotCi0jaWZkZWYgc29sYXJpczIKKyNlbGlmIGRlZmluZWQoc29sYXJpczIpCiAgICAga3N0YXRfY3RsX3QgICAgKmtzYyA9IGtzdGF0X29wZW4oKTsKICAgICBrc3RhdF90ICAgICAgICAqa3M7CiAgICAga2lkX3QgICAgICAgICAgIGtpZDsKQEAgLTgxNCw5ICs2OTMsNyBAQAogICAgICAgICBrc3RhdF9jbG9zZShrc2MpOwogICAgIH0KICAgICByZXR1cm4gbGJvbHQ7Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvbGFyaXMyICovCi0KLSNpZmRlZiBsaW51eAorI2VsaWYgZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChjeWd3aW4pCiAgICAgRklMRSAgICAgICAgICAgKmluID0gZm9wZW4oIi9wcm9jL3VwdGltZSIsICJyIik7CiAgICAgbG9uZyAgICAgICAgICAgIHVwdGltID0gMCwgYSwgYjsKICAgICBpZiAoaW4pIHsKQEAgLTgyNSwxNiArNzAyLDMwMyBAQAogICAgICAgICBmY2xvc2UoaW4pOwogICAgIH0KICAgICByZXR1cm4gdXB0aW07Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpbnV4ICovCisjZWxzZQorICAgIHN0cnVjdCB0aW1ldmFsICBub3c7CisgICAgbG9uZyAgICAgICAgICAgIGJvb3R0aW1lX2NzZWNzLCBub3d0aW1lX2NzZWNzOwogCi0jaWZkZWYgY3lnd2luCi0gICAgcmV0dXJuICgwKTsgICAgICAgICAgICAgICAgIC8qIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIGJvb3R0aW1lX2NzZWNzID0gZ2V0X2Jvb3R0aW1lKCk7CisgICAgaWYgKGJvb3R0aW1lX2NzZWNzID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgIG5vd3RpbWVfY3NlY3MgPSAobm93LnR2X3NlYyAqIDEwMCkgKyAobm93LnR2X3VzZWMgLyAxMDAwMCk7CisKKyAgICByZXR1cm4gKG5vd3RpbWVfY3NlY3MgLSBib290dGltZV9jc2Vjcyk7CiAjZW5kaWYKIH0KIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhIFdJTjMyICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCitzdGF0aWMgdmFsX2NvbnRleHRfdCAqX3ZhbF9jb250ZXh0ID0gTlVMTDsKKworc3RhdGljIHZhbF9jb250ZXh0X3QgKgorbmV0c25tcF92YWxpZGF0b3JfY29udGV4dCh2b2lkKQoreworICAgIGlmIChOVUxMID09IF92YWxfY29udGV4dCkgeworICAgICAgICBpbnQgcmM7CisgICAgICAgIGNoYXIgKmFwcHR5cGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImRuczpzZWM6Y29udGV4dCIsICJjcmVhdGluZyBkbnNzZWMgY29udGV4dCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGFwcHR5cGUpKTsKKyAgICAgICAgcmMgPSB2YWxfY3JlYXRlX2NvbnRleHQoYXBwdHlwZSwgJl92YWxfY29udGV4dCk7CisgICAgfQorCisgICAgcmV0dXJuIF92YWxfY29udGV4dDsKK30KKyNlbmRpZiAvKiBETlNTRUNfTE9DQUxfVkFMSURBVElPTiAqLworCitpbnQKK25ldHNubXBfZ2V0aG9zdGJ5bmFtZV92NChjb25zdCBjaGFyKiBuYW1lLCBpbl9hZGRyX3QgKmFkZHJfb3V0KQoreworI2lmIEhBVkVfR0VUQUREUklORk8KKyAgICBzdHJ1Y3QgYWRkcmluZm8gKmFkZHJzID0gTlVMTDsKKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludDsKKyAgICBpbnQgICAgICAgICAgICAgZXJyOworCisgICAgbWVtc2V0KCZoaW50LCAwLCBzaXplb2YgaGludCk7CisgICAgaGludC5haV9mbGFncyA9IDA7CisgICAgaGludC5haV9mYW1pbHkgPSBQRl9JTkVUOworICAgIGhpbnQuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOworICAgIGhpbnQuYWlfcHJvdG9jb2wgPSAwOworCisgICAgZXJyID0gbmV0c25tcF9nZXRhZGRyaW5mbyhuYW1lLCBOVUxMLCAmaGludCwgJmFkZHJzKTsKKyAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChhZGRycyAhPSBOVUxMKSB7CisgICAgICAgIG1lbWNweShhZGRyX291dCwKKyAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRycy0+YWlfYWRkciktPnNpbl9hZGRyLAorICAgICAgICAgICAgICAgc2l6ZW9mKGluX2FkZHJfdCkpOworICAgICAgICBmcmVlYWRkcmluZm8oYWRkcnMpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJnZXRfdGhpc2FkZHIiLAorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlc29sdmUgSVB2NCBob3N0bmFtZVxuIikpOworICAgIH0KKyAgICByZXR1cm4gMDsKKworI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FCisgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKKworICAgIGhwID0gbmV0c25tcF9nZXRob3N0YnluYW1lKG5hbWUpOworICAgIGlmIChocCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJnZXRfdGhpc2FkZHIiLAorICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKGNvdWxkbid0IHJlc29sdmUpXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKGhwLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImdldF90aGlzYWRkciIsCisgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAobm90IEFGX0lORVQhKVxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImdldF90aGlzYWRkciIsCisgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKKyAgICAgICAgbWVtY3B5KGFkZHJfb3V0LCBocC0+aF9hZGRyLCBzaXplb2YoaW5fYWRkcl90KSk7CisgICAgfQorICAgIHJldHVybiAwOworCisjZWxpZiBIQVZFX0dFVElQTk9ERUJZTkFNRQorICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIGVycjsKKworICAgIGhwID0gZ2V0aXBub2RlYnluYW1lKHBlZXJuYW1lLCBBRl9JTkVULCAwLCAmZXJyKTsKKyAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiZ2V0X3RoaXNhZGRyIiwKKyAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChjb3VsZG4ndCByZXNvbHZlID0gJWQpXG4iLCBlcnIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBERUJVR01TR1RMKCgiZ2V0X3RoaXNhZGRyIiwKKyAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7CisgICAgbWVtY3B5KGFkZHJfb3V0LCBocC0+aF9hZGRyLCBzaXplb2YoaW5fYWRkcl90KSk7CisgICAgcmV0dXJuIDA7CisKKyNlbHNlIC8qIEhBVkVfR0VUSVBOT0RFQllOQU1FICovCisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9CisKK2ludAorbmV0c25tcF9nZXRhZGRyaW5mbyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisjaWYgSEFWRV9HRVRBRERSSU5GTworICAgIHN0cnVjdCBhZGRyaW5mbyAqYWRkcnMgPSBOVUxMOworICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50OworICAgIGludCAgICAgICAgICAgICBlcnI7CisjaWZkZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KKyAgICB2YWxfc3RhdHVzX3QgICAgdmFsX3N0YXR1czsKKyNlbmRpZgorCisgICAgREVCVUdNU0dUTCgoImRuczpnZXRhZGRyaW5mbyIsICJsb29raW5nIHVwICIpKTsKKyAgICBpZiAobmFtZSkKKyAgICAgICAgREVCVUdNU0coKCJkbnM6Z2V0YWRkcmluZm8iLCAiXCIlc1wiIiwgbmFtZSkpOworICAgIGVsc2UKKyAgICAgICAgREVCVUdNU0coKCJkbnM6Z2V0YWRkcmluZm8iLCAiPE5VTEw+IikpOworCisgICAgaWYgKHNlcnZpY2UpCisJREVCVUdNU0coKCJkbnM6Z2V0YWRkcmluZm8iLCAiOlwiJXNcIiIsIHNlcnZpY2UpKTsKKworICAgIGlmIChoaW50cykKKwlERUJVR01TRygoImRuczpnZXRhZGRyaW5mbyIsICIgd2l0aCBoaW50ICh7IC4uLiB9KSIpKTsKKyAgICBlbHNlCisJREVCVUdNU0coKCJkbnM6Z2V0YWRkcmluZm8iLCAiIHdpdGggbm8gaGludCIpKTsKKworICAgIERFQlVHTVNHKCgiZG5zOmdldGFkZHJpbmZvIiwgIlxuIikpOworCisgICAgaWYgKE5VTEwgPT0gaGludHMpIHsKKyAgICAgICAgbWVtc2V0KCZoaW50LCAwLCBzaXplb2YgaGludCk7CisgICAgICAgIGhpbnQuYWlfZmxhZ3MgPSAwOworICAgICAgICBoaW50LmFpX2ZhbWlseSA9IFBGX0lORVQ7CisgICAgICAgIGhpbnQuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOworICAgICAgICBoaW50LmFpX3Byb3RvY29sID0gMDsKKyAgICAgICAgaGludHMgPSAmaGludDsKKyAgICB9IGVsc2UgeworICAgICAgICBtZW1jcHkoJmhpbnQsIGhpbnRzLCBzaXplb2YgaGludCk7CisgICAgfQorCisjaWZuZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCisgICAgZXJyID0gZ2V0YWRkcmluZm8obmFtZSwgTlVMTCwgJmhpbnQsICZhZGRycyk7CisjZWxzZSAvKiBETlNTRUNfTE9DQUxfVkFMSURBVElPTiAqLworICAgIGVyciA9IHZhbF9nZXRhZGRyaW5mbyhuZXRzbm1wX3ZhbGlkYXRvcl9jb250ZXh0KCksIG5hbWUsIE5VTEwsICZoaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcnMsICZ2YWxfc3RhdHVzKTsKKyAgICBERUJVR01TR1RMKCgiZG5zOnNlYzp2YWwiLCAiZXJyICVkLCB2YWxfc3RhdHVzICVkIC8gJXM7IHRydXN0ZWQ6ICVkXG4iLAorICAgICAgICAgICAgICAgIGVyciwgdmFsX3N0YXR1cywgcF92YWxfc3RhdHVzKHZhbF9zdGF0dXMpLAorICAgICAgICAgICAgICAgIHZhbF9pc3RydXN0ZWQodmFsX3N0YXR1cykpKTsKKyAgICBpZiAoISB2YWxfaXN0cnVzdGVkKHZhbF9zdGF0dXMpKSB7CisgICAgICAgIGludCByYzsKKyAgICAgICAgaWYgKChlcnIgIT0gMCkgJiYgVkFMX0dFVEFERFJJTkZPX0hBU19TVEFUVVMoZXJyKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiV0FSTklORzogVU5UUlVTVEVEIGVycm9yIGluIEROUyByZXNvbHV0aW9uIGZvciAlcyFcbiIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgIHJjID0gRUFJX0ZBSUw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgYXV0aGVudGljaXR5IG9mIEROUyByZXNwb25zZSBpcyBub3QgdHJ1c3RlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgcF92YWxfc3RhdHVzKHZhbF9zdGF0dXMpKTsKKyAgICAgICAgICAgIHJjID0gRUFJX05PTkFNRTsKKyAgICAgICAgfQorICAgICAgICAvKiogY29udGludWUgYW55d2F5cyBpZiBETlNTRUNfV0FSTl9PTkxZIGlzIHNldCAqLworICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0ROU1NFQ19XQVJOX09OTFkpKQorICAgICAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworCisjZW5kaWYgLyogRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04gKi8KKyAgICAqcmVzID0gYWRkcnM7CisgICAgaWYgKCgwID09IGVycikgJiYgYWRkcnMgJiYgYWRkcnMtPmFpX2FkZHIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRuczpnZXRhZGRyaW5mbyIsICJhbnN3ZXIgeyBBRl9JTkVULCAlczolaHUgfVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKCgoc3RydWN0IHNvY2thZGRyX2luKilhZGRycy0+YWlfYWRkciktPnNpbl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKWFkZHJzLT5haV9hZGRyKS0+c2luX3BvcnQpKSk7CisgICAgfQorICAgIHJldHVybiBlcnI7CisjZWxzZQorICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgImdldGFkZHJpbmZvIG5vdCBhdmFpbGFibGUiKSk7CisgICAgcmV0dXJuIEVBSV9GQUlMOworI2VuZGlmIC8qIGdldGFkZHJpbmZvICovCit9CisKK3N0cnVjdCBob3N0ZW50ICoKK25ldHNubXBfZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQoreworI2lmIEhBVkVfR0VUSE9TVEJZTkFNRQorI2lmZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCisgICAgdmFsX3N0YXR1c190IHZhbF9zdGF0dXM7CisjZW5kaWYKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gbmFtZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgiZG5zOmdldGhvc3RieW5hbWUiLCAibG9va2luZyB1cCAlc1xuIiwgbmFtZSkpOworCisjaWZkZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KKyAgICBocCAgPSB2YWxfZ2V0aG9zdGJ5bmFtZShuZXRzbm1wX3ZhbGlkYXRvcl9jb250ZXh0KCksIG5hbWUsICZ2YWxfc3RhdHVzKTsKKyAgICBERUJVR01TR1RMKCgiZG5zOnNlYzp2YWwiLCAidmFsX3N0YXR1cyAlZCAvICVzOyB0cnVzdGVkOiAlZFxuIiwKKyAgICAgICAgICAgICAgICB2YWxfc3RhdHVzLCBwX3ZhbF9zdGF0dXModmFsX3N0YXR1cyksCisgICAgICAgICAgICAgICAgdmFsX2lzdHJ1c3RlZCh2YWxfc3RhdHVzKSkpOworICAgIGlmICghdmFsX2lzdHJ1c3RlZCh2YWxfc3RhdHVzKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgIlRoZSBhdXRoZW50aWNpdHkgb2YgRE5TIHJlc3BvbnNlIGlzIG5vdCB0cnVzdGVkICglcylcbiIsCisgICAgICAgICAgICAgICAgIHBfdmFsX3N0YXR1cyh2YWxfc3RhdHVzKSk7CisgICAgICAgIC8qKiBjb250aW51ZSBhbnl3YXlzIGlmIEROU1NFQ19XQVJOX09OTFkgaXMgc2V0ICovCisgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRE5TU0VDX1dBUk5fT05MWSkpCisgICAgICAgICAgICBocCA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHZhbF9kb2VzX25vdF9leGlzdCh2YWxfc3RhdHVzKSAmJiBocCkKKyAgICAgICAgaHAgPSBOVUxMOworI2Vsc2UKKyAgICBocCA9IGdldGhvc3RieW5hbWUobmFtZSk7CisjZW5kaWYKKyAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiZG5zOmdldGhvc3RieW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgcmVzb2x2ZSAlc1xuIiwgbmFtZSkpOworICAgIH0gZWxzZSBpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVCkgeworICAgICAgICBERUJVR01TR1RMKCgiZG5zOmdldGhvc3RieW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAid2FybmluZzogcmVzcG9uc2UgZm9yICVzIG5vdCBBRl9JTkVUIVxuIiwgbmFtZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0aG9zdGJ5bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICIlcyByZXNvbHZlZCBva2F5XG4iLCBuYW1lKSk7CisgICAgfQorICAgIHJldHVybiBocDsKKyNlbHNlCisgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiZ2V0aG9zdGJ5bmFtZSBub3QgYXZhaWxhYmxlIikpOworICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIEhBVkVfR0VUSE9TVEJZTkFNRSAqLworfQorCisvKioKKyAqIExvb2sgdXAgdGhlIGhvc3QgbmFtZSB2aWEgRE5TLgorICoKKyAqIEBwYXJhbVtpbl0gYWRkciBQb2ludGVyIHRvIHRoZSBhZGRyZXNzIHRvIHJlc29sdmUuIFRoaXMgYXJndW1lbnQgcG9pbnRzIGUuZy4KKyAqICAgdG8gYSBzdHJ1Y3QgaW5fYWRkciBmb3IgQUZfSU5FVCBvciB0byBhIHN0cnVjdCBpbjZfYWRkciBmb3IgQUZfSU5FVDYuCisgKiBAcGFyYW1baW5dIGxlbiAgTGVuZ3RoIGluIGJ5dGVzIG9mICphZGRyLgorICogQHBhcmFtW2luXSB0eXBlIEFkZHJlc3MgZmFtaWx5LCBlLmcuIEFGX0lORVQgb3IgQUZfSU5FVDYuCisgKgorICogQHJldHVybiBQb2ludGVyIHRvIGEgaG9zdGVudCBzdHJ1Y3R1cmUgaWYgYWRkcmVzcyBsb29rdXAgc3VjY2VlZGVkIG9yIE5VTEwKKyAqICAgaWYgdGhlIGxvb2t1cCBmYWlsZWQuCisgKgorICogQHNlZSBTZWUgYWxzbyB0aGUgZ2V0aG9zdGJ5YWRkcigpIG1hbiBwYWdlLgorICovCitzdHJ1Y3QgaG9zdGVudCAqCituZXRzbm1wX2dldGhvc3RieWFkZHIoY29uc3Qgdm9pZCAqYWRkciwgc29ja2xlbl90IGxlbiwgaW50IHR5cGUpCit7CisjaWYgSEFWRV9HRVRIT1NUQllBRERSCisgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKKyAgICBjaGFyIGJ1Zls2NF07CisKKyAgICBERUJVR01TR1RMKCgiZG5zOmdldGhvc3RieWFkZHIiLCAicmVzb2x2aW5nICVzXG4iLAorICAgICAgICAgICAgICAgIGluZXRfbnRvcCh0eXBlLCBhZGRyLCBidWYsIHNpemVvZihidWYpKSkpOworCisjaWZkZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KKyAgICB2YWxfc3RhdHVzX3QgdmFsX3N0YXR1czsKKyAgICBocCA9IHZhbF9nZXRob3N0YnlhZGRyKG5ldHNubXBfdmFsaWRhdG9yX2NvbnRleHQoKSwgYWRkciwgbGVuLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbF9zdGF0dXMpOworICAgIERFQlVHTVNHVEwoKCJkbnM6c2VjOnZhbCIsICJ2YWxfc3RhdHVzICVkIC8gJXM7IHRydXN0ZWQ6ICVkXG4iLAorICAgICAgICAgICAgICAgIHZhbF9zdGF0dXMsIHBfdmFsX3N0YXR1cyh2YWxfc3RhdHVzKSwKKyAgICAgICAgICAgICAgICB2YWxfaXN0cnVzdGVkKHZhbF9zdGF0dXMpKSk7CisgICAgaWYgKCF2YWxfaXN0cnVzdGVkKHZhbF9zdGF0dXMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAiVGhlIGF1dGhlbnRpY2l0eSBvZiBETlMgcmVzcG9uc2UgaXMgbm90IHRydXN0ZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgcF92YWxfc3RhdHVzKHZhbF9zdGF0dXMpKTsKKyAgICAgICAgLyoqIGNvbnRpbnVlIGFueXdheXMgaWYgRE5TU0VDX1dBUk5fT05MWSBpcyBzZXQgKi8KKyAgICAgICAgaWYgKCFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ETlNTRUNfV0FSTl9PTkxZKSkKKyAgICAgICAgICAgIGhwID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAodmFsX2RvZXNfbm90X2V4aXN0KHZhbF9zdGF0dXMpICYmIGhwKQorICAgICAgICBocCA9IE5VTEw7CisjZWxzZQorICAgIGhwID0gZ2V0aG9zdGJ5YWRkcihhZGRyLCBsZW4sIHR5cGUpOworI2VuZGlmCisgICAgaWYgKGhwID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRuczpnZXRob3N0YnlhZGRyIiwgImNvdWxkbid0IHJlc29sdmUgYWRkclxuIikpOworICAgIH0gZWxzZSBpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVCkgeworICAgICAgICBERUJVR01TR1RMKCgiZG5zOmdldGhvc3RieWFkZHIiLAorICAgICAgICAgICAgICAgICAgICAid2FybmluZzogcmVzcG9uc2UgZm9yIGFkZHIgbm90IEFGX0lORVQhXG4iKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRuczpnZXRob3N0YnlhZGRyIiwgImFkZHIgcmVzb2x2ZWQgb2theVxuIikpOworICAgIH0KKyAgICByZXR1cm4gaHA7CisjZWxzZQorICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgImdldGhvc3RieWFkZHIgbm90IGF2YWlsYWJsZSIpKTsKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogI2lmbmRlZiBIQVZFX1NUUk5DQVNFQ01QCiAKIC8qCkBAIC05MjUsNDEgKzEwODksMzIgQEAKIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9TRVRFTlYgKi8KIAotLyogcmV0dXJucyBjZW50aXNlY29uZHMgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjYWxjdWxhdGVfdGltZV9kaWZmLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUxDVUxBVEVfVElNRV9ESUZGCisvKioKKyAqIENvbXB1dGUgKCpub3cgLSAqdGhlbikgaW4gY2VudGlzZWNvbmRzLgorICovCiBpbnQKLWNhbGN1bGF0ZV90aW1lX2RpZmYoc3RydWN0IHRpbWV2YWwgKm5vdywgc3RydWN0IHRpbWV2YWwgKnRoZW4pCitjYWxjdWxhdGVfdGltZV9kaWZmKGNvbnN0IHN0cnVjdCB0aW1ldmFsICpub3csIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0aGVuKQogewotICAgIHN0cnVjdCB0aW1ldmFsICB0bXAsIGRpZmY7Ci0gICAgbWVtY3B5KCZ0bXAsIG5vdywgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7Ci0gICAgdG1wLnR2X3NlYy0tOwotICAgIHRtcC50dl91c2VjICs9IDEwMDAwMDBMOwotICAgIGRpZmYudHZfc2VjID0gdG1wLnR2X3NlYyAtIHRoZW4tPnR2X3NlYzsKLSAgICBkaWZmLnR2X3VzZWMgPSB0bXAudHZfdXNlYyAtIHRoZW4tPnR2X3VzZWM7Ci0gICAgaWYgKGRpZmYudHZfdXNlYyA+IDEwMDAwMDBMKSB7Ci0gICAgICAgIGRpZmYudHZfdXNlYyAtPSAxMDAwMDAwTDsKLSAgICAgICAgZGlmZi50dl9zZWMrKzsKLSAgICB9Ci0gICAgcmV0dXJuICgoZGlmZi50dl9zZWMgKiAxMDApICsgKGRpZmYudHZfdXNlYyAvIDEwMDAwKSk7Ci19CisgICAgc3RydWN0IHRpbWV2YWwgIGRpZmY7CiAKLS8qIHJldHVybnMgZGlmZiBpbiByb3VuZGVkIHNlY29uZHMgKi8KLXVfaW50Ci1jYWxjdWxhdGVfc2VjdGltZV9kaWZmKHN0cnVjdCB0aW1ldmFsICpub3csIHN0cnVjdCB0aW1ldmFsICp0aGVuKQotewotICAgIHN0cnVjdCB0aW1ldmFsICB0bXAsIGRpZmY7Ci0gICAgbWVtY3B5KCZ0bXAsIG5vdywgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7Ci0gICAgdG1wLnR2X3NlYy0tOwotICAgIHRtcC50dl91c2VjICs9IDEwMDAwMDBMOwotICAgIGRpZmYudHZfc2VjID0gdG1wLnR2X3NlYyAtIHRoZW4tPnR2X3NlYzsKLSAgICBkaWZmLnR2X3VzZWMgPSB0bXAudHZfdXNlYyAtIHRoZW4tPnR2X3VzZWM7Ci0gICAgaWYgKGRpZmYudHZfdXNlYyA+IDEwMDAwMDBMKSB7Ci0gICAgICAgIGRpZmYudHZfdXNlYyAtPSAxMDAwMDAwTDsKLSAgICAgICAgZGlmZi50dl9zZWMrKzsKLSAgICB9Ci0gICAgaWYgKGRpZmYudHZfdXNlYyA+PSA1MDAwMDBMKQotICAgICAgICByZXR1cm4gZGlmZi50dl9zZWMgKyAxOwotICAgIHJldHVybiAgZGlmZi50dl9zZWM7CisgICAgTkVUU05NUF9USU1FUlNVQihub3csIHRoZW4sICZkaWZmKTsKKyAgICByZXR1cm4gKGludCkoZGlmZi50dl9zZWMgKiAxMDAgKyBkaWZmLnR2X3VzZWMgLyAxMDAwMCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUxDVUxBVEVfVElNRV9ESUZGICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUxDVUxBVEVfU0VDVElNRV9ESUZGCisvKiogQ29tcHV0ZSByb3VuZGVkICgqbm93IC0gKnRoZW4pIGluIHNlY29uZHMuICovCit1X2ludAorY2FsY3VsYXRlX3NlY3RpbWVfZGlmZihjb25zdCBzdHJ1Y3QgdGltZXZhbCAqbm93LCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdGhlbikKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCAgZGlmZjsKKworICAgIE5FVFNOTVBfVElNRVJTVUIobm93LCB0aGVuLCAmZGlmZik7CisgICAgcmV0dXJuIGRpZmYudHZfc2VjICsgKGRpZmYudHZfdXNlYyA+PSA1MDAwMDBMKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBTENVTEFURV9TRUNUSU1FX0RJRkYgKi8KIAogI2lmbmRlZiBIQVZFX1NUUkNBU0VTVFIKIC8qCkBAIC0xMDcwLDEzICsxMjI1LDE0IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogRE5FLCBtYWtlIGl0IAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfSU5GTywgIkNyZWF0aW5nIGRpcmVjdG9yeTogJXNcbiIsIGJ1Zik7CiAjaWZkZWYgV0lOMzIKICAgICAgICAgICAgIGlmIChDcmVhdGVEaXJlY3RvcnkoYnVmLCBOVUxMKSA9PSAwKQogI2Vsc2UKICAgICAgICAgICAgIGlmIChta2RpcihidWYsIG1vZGUpID09IC0xKQogI2VuZGlmCiAgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sICJDcmVhdGVkIGRpcmVjdG9yeTogJXNcbiIsIGJ1Zik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogZXhpc3RzLCBpcyBpdCBhIGZpbGU/IApAQCAtMTIwNCw3ICsxMzYwLDcgQEAKICAgfSBlbHNlIHsKICAgICByZXR1cm4gLTE7CiAgIH0KLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgIHJldHVybiAoX19LRVJORUxfMzIoKSA/IDMyIDogKF9fS0VSTkVMXzY0KCkgPyA2NCA6IC0xKSk7CiAjZWxpZiBkZWZpbmVkKG9zZjQpIHx8IGRlZmluZWQob3NmNSkgfHwgZGVmaW5lZChfX2FscGhhKQogICByZXR1cm4gNjQ7IC8qIEFscGhhIGlzIGFsd2F5cyA2NGJpdCAqLwpAQCAtMTIxNCwzICsxMzcwLDY4IEBACiAjZW5kaWYKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN0cl90b191aWQsIHVzZXJfaW5mb3JtYXRpb24pCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RSX1RPX1VJRAorLyoqCisgKiBDb252ZXJ0IGEgdXNlciBuYW1lIG9yIG51bWJlciBpbnRvIG51bWVyaWMgZm9ybS4KKyAqCisgKiBAcGFyYW1baW5dIHVzZXJvcnVpZCBFaXRoZXIgYSBVbml4IHVzZXIgbmFtZSBvciB0aGUgQVNDSUkgcmVwcmVzZW50YXRpb24KKyAqICAgb2YgYSB1c2VyIG51bWJlci4KKyAqCisgKiBAcmV0dXJuIEVpdGhlciBhIHVzZXIgbnVtYmVyID4gMCBvciAwIGlmIHVzZXJvcnVpZCBpcyBub3QgYSB2YWxpZCB1c2VyCisgKiAgIG5hbWUsIG5vdCBhIHZhbGlkIHVzZXIgbnVtYmVyIG9yIHRoZSBuYW1lIG9mIHRoZSByb290IHVzZXIuCisgKi8KK2ludCBuZXRzbm1wX3N0cl90b191aWQoY29uc3QgY2hhciAqdXNlcm9ydWlkKSB7CisgICAgaW50IHVpZDsKKyNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKKyAgICBzdHJ1Y3QgcGFzc3dkICpwd2Q7CisjZW5kaWYKKworICAgIHVpZCA9IGF0b2kodXNlcm9ydWlkKTsKKworICAgIGlmICh1aWQgPT0gMCkgeworI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAorICAgICAgICBwd2QgPSBnZXRwd25hbSh1c2Vyb3J1aWQpOworICAgICAgICB1aWQgPSBwd2QgPyBwd2QtPnB3X3VpZCA6IDA7CisgICAgICAgIGVuZHB3ZW50KCk7CisjZW5kaWYKKyAgICAgICAgaWYgKHVpZCA9PSAwKQorICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJDYW4ndCBpZGVudGlmeSB1c2VyICglcykuXG4iLCB1c2Vyb3J1aWQpOworICAgIH0KKyAgICByZXR1cm4gdWlkOworICAgIAorfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RSX1RPX1VJRCAqLworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3RyX3RvX2dpZCwgdXNlcl9pbmZvcm1hdGlvbikKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVFJfVE9fR0lECisvKioKKyAqIENvbnZlcnQgYSBncm91cCBuYW1lIG9yIG51bWJlciBpbnRvIG51bWVyaWMgZm9ybS4KKyAqCisgKiBAcGFyYW1baW5dIGdyb3Vwb3JnaWQgRWl0aGVyIGEgVW5peCBncm91cCBuYW1lIG9yIHRoZSBBU0NJSSByZXByZXNlbnRhdGlvbgorICogICBvZiBhIGdyb3VwIG51bWJlci4KKyAqCisgKiBAcmV0dXJuIEVpdGhlciBhIGdyb3VwIG51bWJlciA+IDAgb3IgMCBpZiBncm91cG9yZ2lkIGlzIG5vdCBhIHZhbGlkIGdyb3VwCisgKiAgIG5hbWUsIG5vdCBhIHZhbGlkIGdyb3VwIG51bWJlciBvciB0aGUgcm9vdCBncm91cC4KKyAqLworaW50IG5ldHNubXBfc3RyX3RvX2dpZChjb25zdCBjaGFyICpncm91cG9yZ2lkKQoreworICAgIGludCBnaWQ7CisKKyAgICBnaWQgPSBhdG9pKGdyb3Vwb3JnaWQpOworCisgICAgaWYgKGdpZCA9PSAwKSB7CisjaWYgSEFWRV9HRVRHUk5BTSAmJiBIQVZFX0dSUF9ICisgICAgICAgIHN0cnVjdCBncm91cCAgKmdycDsKKworICAgICAgICBncnAgPSBnZXRncm5hbShncm91cG9yZ2lkKTsKKyAgICAgICAgZ2lkID0gZ3JwID8gZ3JwLT5ncl9naWQgOiAwOworICAgICAgICBlbmRncmVudCgpOworI2VuZGlmCisgICAgICAgIGlmIChnaWQgPT0gMCkKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiQ2FuJ3QgaWRlbnRpZnkgZ3JvdXAgKCVzKS5cbiIsIGdyb3Vwb3JnaWQpOworICAgIH0KKworICAgIHJldHVybiBnaWQ7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVFJfVE9fR0lEICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3Rlc3RfYmluYXJ5X2FycmF5LmMgYi9zbm1wbGliL3Rlc3RfYmluYXJ5X2FycmF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YjFmMGUuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi90ZXN0X2JpbmFyeV9hcnJheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2lmIEhBVkVfSU9fSAotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTUFMTE9DX0gKLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KLQotI2RlZmluZSBURVNUX1NJWkUgNwotCi12b2lkCi1wcmludF9pbnQobmV0c25tcF9pbmRleCAqaSwgdm9pZCAqdikKLXsKLSAgICBwcmludGYoIml0ZW0gJXAgPSAlbGRcbiIsIGksIGktPm9pZHNbMF0pOwotfQotCi1pbnQKLXRlc3RfaW50KHZvaWQpCi17Ci0gICAgb2lkIG8xID0gMTsKLSAgICBvaWQgbzIgPSAyOwotICAgIG9pZCBvMyA9IDY7Ci0gICAgb2lkIG80ID0gODsKLSAgICBvaWQgbzUgPSA5OwotICAgIG9pZCBveCA9IDc7Ci0gICAgb2lkIG95ID0gMTA7Ci0gICAgbmV0c25tcF9pbmRleCBpMSxpMixpMyxpNCxpNSxpeCxpeSwgKmlwOwotICAgIG5ldHNubXBfaW5kZXggKmFbVEVTVF9TSVpFXSA9IHsgJmkxLCAmaTIsICZpMywgJml4LCAmaTQsICZpNSwgJml5IH07Ci0gICAgbmV0c25tcF9jb250YWluZXIgKmMgPSBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfYmluYXJ5X2FycmF5KCk7Ci0gICAgaW50IGk7Ci0KLSAgICBjLT5jb21wYXJlID0gbmV0c25tcF9jb21wYXJlX25ldHNubXBfaW5kZXg7Ci0gICAgCi0gICAgaTEub2lkcyA9ICZvMTsKLSAgICBpMi5vaWRzID0gJm8yOwotICAgIGkzLm9pZHMgPSAmbzM7Ci0gICAgaTQub2lkcyA9ICZvNDsKLSAgICBpNS5vaWRzID0gJm81OwotICAgIGl4Lm9pZHMgPSAmb3g7Ci0gICAgaXkub2lkcyA9ICZveTsKLSAgICBpMS5sZW4gPSBpMi5sZW4gPSBpMy5sZW4gPSBpNC5sZW4gPSBpNS5sZW4gPSBpeC5sZW4gPSBpeS5sZW4gPSAxOwotCi0gICAgcHJpbnRmKCJDcmVhdGluZyBjb250YWluZXIuLi5cbiIpOwotCi0gICAgcHJpbnRmKCJJbnNlcnRpbmcgZGF0YS4uLlxuIik7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLCZpNCk7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLCZpMik7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLCZpMyk7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLCZpMSk7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLCZpNSk7Ci0KLSAgICBwcmludGYoIkZvciBlYWNoLi4uXG4iKTsKLSAgICBDT05UQUlORVJfRk9SX0VBQ0goYywgcHJpbnRfaW50LCBOVUxMKTsKLSAgICBwcmludGYoIkRvbmUuXG4iKTsKLQotICAgIHByaW50ZigiXG4iKTsKLSAgICBpcCA9IENPTlRBSU5FUl9GSVJTVChjKTsKLSAgICBwcmludGYoIkZpbmQgZmlyc3QgPSAlcCAlbGRcbiIsaXAsIGlwLT5vaWRzWzBdKTsKLSAgICB3aGlsZSggaXAgKSB7Ci0gICAgICAgIGlwID0gQ09OVEFJTkVSX05FWFQoYyxpcCk7Ci0gICAgICAgIGlmKGlwKQotICAgICAgICAgICAgcHJpbnRmKCJGaW5kIG5leHQgPSAlcCAlbGRcbiIsaXAsIGlwLT5vaWRzWzBdKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJGaW5kIG5leHQgPSAlc1xuIixpcCk7Ci0gICAgfQotCi0gICAgZm9yKCBpPTA7IGkgPCBURVNUX1NJWkU7ICsraSkgewotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGlwID0gQ09OVEFJTkVSX0ZJTkQoYyxhW2ldKTsKLSAgICAgICAgcHJpbnRmKCJGaW5kICVsZCA9ICVwICVsZFxuIiwgYVtpXS0+b2lkc1swXSwgaXAsIGlwID8gaXAtPm9pZHNbMF0gOiAwKTsKLSAgICAgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLGFbaV0pOwotICAgICAgICBwcmludGYoIk5leHQgJWxkID0gJXAgJWxkXG4iLCBhW2ldLT5vaWRzWzBdLCBpcCwgaXAgPyBpcC0+b2lkc1swXSA6IDApOwotICAgIH0KLQotICAgIHByaW50ZigiRG9uZS5cbiIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXByaW50X3N0cmluZyhjaGFyICppLCB2b2lkICp2KQotewotICAgIHByaW50ZigiaXRlbSAlc1xuIiwgaSk7Ci19Ci0KLWludAotbXlfc3RyY21wKGNoYXIgKmxocywgY2hhciAqcmhzKQotewotICAgIGludCByYyA9IHN0cmNtcChsaHMscmhzKTsKLS8qICAgICAgcHJpbnRmKCIlcyAlZCAlc1xuIixsaHMsIHJjLCByaHMpOyAqLwotICAgIHJldHVybiByYzsKLX0KLQotaW50Ci10ZXN0X3N0cmluZygpCi17Ci0gICAgY29uc3QgY2hhciAqbzEgPSAiemVicmEiOwotICAgIGNvbnN0IGNoYXIgKm8yID0gImItdHdvIjsKLSAgICBjb25zdCBjaGFyICpvMyA9ICJiIjsKLSAgICBjb25zdCBjaGFyICpvNCA9ICJjZWRhciI7Ci0gICAgY29uc3QgY2hhciAqbzUgPSAiYWxwaGEiOwotICAgIGNvbnN0IGNoYXIgKm94ID0gImRldiI7Ci0gICAgY29uc3QgY2hhciAqb3kgPSAiYWEiOwotICAgIGNvbnN0IGNoYXIgKiBpcDsKLSAgICAKLSAgICBjb25zdCBjaGFyICphW1RFU1RfU0laRV0gPSB7IG8xLCBvMiwgbzMsIG94LCBvNCwgbzUsIG95IH07Ci0gICAgbmV0c25tcF9jb250YWluZXIgKmMgPSBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfYmluYXJ5X2FycmF5KCk7Ci0gICAgaW50IGk7Ci0KLSAgICBjLT5jb21wYXJlID0gbXlfc3RyY21wOwotICAgIAotICAgIHByaW50ZigiQ3JlYXRpbmcgY29udGFpbmVyLi4uXG4iKTsKLQotICAgIHByaW50ZigiSW5zZXJ0aW5nIGRhdGEuLi5cbiIpOwotICAgIENPTlRBSU5FUl9JTlNFUlQoYyxvNCk7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLG8yKTsKLSAgICBDT05UQUlORVJfSU5TRVJUKGMsbzMpOwotICAgIENPTlRBSU5FUl9JTlNFUlQoYyxvMSk7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLG81KTsKLSAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCJGb3IgZWFjaC4uLlxuIik7Ci0gICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGMsIHByaW50X3N0cmluZywgTlVMTCk7Ci0gICAgcHJpbnRmKCJEb25lLlxuIik7Ci0KLSAgICBwcmludGYoIlxuIik7Ci0gICAgaXAgPSBDT05UQUlORVJfRklSU1QoYyk7Ci0gICAgcHJpbnRmKCJGaW5kIGZpcnN0ID0gJXNcbiIsaXApOwotICAgIHdoaWxlKCBpcCApIHsKLSAgICAgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLGlwKTsKLSAgICAgICAgcHJpbnRmKCJGaW5kIG5leHQgPSAlc1xuIixpcCk7Ci0gICAgfQotCi0gICAgZm9yKCBpPTA7IGkgPCBURVNUX1NJWkU7ICsraSkgewotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGlwID0gQ09OVEFJTkVSX0ZJTkQoYyxhW2ldKTsKLSAgICAgICAgcHJpbnRmKCJGaW5kICVzID0gJXNcbiIsIGFbaV0sIGlwKTsKLSAgICAgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLGFbaV0pOwotICAgICAgICBwcmludGYoIk5leHQgJXMgPSAlc1xuIiwgYVtpXSwgaXApOwotICAgIH0KLQotICAgIHByaW50ZigiRG9uZS5cbiIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0KLSAgICB0ZXN0X2ludCgpOwotICAgIHRlc3Rfc3RyaW5nKCk7Ci19CmRpZmYgLS1naXQgYS9zbm1wbGliL3RleHRfdXRpbHMuYyBiL3NubXBsaWIvdGV4dF91dGlscy5jCmluZGV4IDkwNzk3MDkuLjMyNTk2YmUgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvdGV4dF91dGlscy5jCisrKyBiL3NubXBsaWIvdGV4dF91dGlscy5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC00Miw3ICs0MywxNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdGV4dF91dGlscy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGV4dF91dGlscywgbGlibmV0c25tcCkKIAorbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUodGV4dF91dGlscykKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9URVhUX1VUSUxTCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShmaWxlX3V0aWxzKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1RFWFRfVVRJTFMgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RFWFRfVVRJTFMKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogUHJvdG90eXBlcwpAQCAtMTQ3LDYgKzE1NSw4IEBACiAgICAgcmV0dXJuIGM7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZXh0X3Rva2VuX2NvbnRhaW5lcl9mcm9tX2ZpbGUsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RFWFRfVE9LRU5fQ09OVEFJTkVSX0ZST01fRklMRQogbmV0c25tcF9jb250YWluZXIgKgogbmV0c25tcF90ZXh0X3Rva2VuX2NvbnRhaW5lcl9mcm9tX2ZpbGUoY29uc3QgY2hhciAqZmlsZSwgdV9pbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY2luLCB2b2lkICpjb250ZXh0KQpAQCAtMTk5LDYgKzIwOSw3IEBACiAgICAgCiAgICAgcmV0dXJuIGM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URVhUX1RPS0VOX0NPTlRBSU5FUl9GUk9NX0ZJTEUgKi8KIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDY1LDEzICs0NzYsMTMgQEAKIAogICAgICAgICBjYXNlIFBNTFBfVFlQRV9VTlNJR05FRDoKICAgICAgICAgICAgIHR2aS0+dmFsdWUudWwgPSBzdHJ0b3VsKHB0ciwgTlVMTCwgMCk7Ci0gICAgICAgICAgICBpZiAoKGVycm5vID09IEVSQU5HRSkgJiYoVUxPTkdfTUFYID09IHR2aS0+dmFsdWUuc2wpKQorICAgICAgICAgICAgaWYgKChlcnJubyA9PSBFUkFOR0UpICYmIChVTE9OR19NQVggPT0gdHZpLT52YWx1ZS51bCkpCiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsInZhbHVlIG92ZXJmbG93XG4iKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAKICAgICAgICAgY2FzZSBQTUxQX1RZUEVfSU5URUdFUjoKLSAgICAgICAgICAgIHR2aS0+dmFsdWUudWwgPSBzdHJ0b2wocHRyLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIHR2aS0+dmFsdWUuc2wgPSBzdHJ0b2wocHRyLCBOVUxMLCAwKTsKICAgICAgICAgICAgIGlmICgoZXJybm8gPT0gRVJBTkdFKSAmJgogICAgICAgICAgICAgICAgICgoTE9OR19NQVggPT0gdHZpLT52YWx1ZS5zbCkgfHwKICAgICAgICAgICAgICAgICAgKExPTkdfTUlOID09IHR2aS0+dmFsdWUuc2wpKSkKQEAgLTQ4Myw3ICs0OTQsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQTUxQX1RZUEVfQk9PTEVBTjoKLSAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpwdHIpKQorICAgICAgICAgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpwdHIpKSkKICAgICAgICAgICAgICAgICB0dmktPnZhbHVlLnVsID0gc3RydG91bChwdHIsIE5VTEwsIDApOwogICAgICAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChwdHIsInRydWUiKSA9PSAwKQogICAgICAgICAgICAgICAgIHR2aS0+dmFsdWUudWwgPSAxOwpAQCAtNTEwLDMgKzUyMSw2IEBACiAgICAgcmV0dXJuIFBNTFBfUkNfTUVNT1JZX1VTRUQ7CiB9CiAKKyNlbHNlICAvKiAhIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEVYVF9VVElMUyAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZCh0ZXh0X3V0aWxzKTsKKyNlbmRpZiAvKiAhIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEVYVF9VVElMUyAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi90b29scy5jIGIvc25tcGxpYi90b29scy5jCmluZGV4IDIyMDZmZjMuLjI5ZTVmZWYgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvdG9vbHMuYworKysgYi9zbm1wbGliL3Rvb2xzLmMKQEAgLTQsMTcgKzQsMjMgQEAKIAogI2RlZmluZSBORVRTTk1QX1RPT0xTX0MgMSAvKiBkb250IHJlLWRlZmluZSBtYWxsb2Mgd3JhcHBlcnMgaGVyZSAqLwogCisjaWZkZWYgSEFWRV9DUlREQkdfSAorLyoKKyAqIERlZmluZSBfQ1JUREJHX01BUF9BTExPQyBzdWNoIHRoYXQgaW4gZGVidWcgYnVpbGRzICh3aGVuIF9ERUJVRyBoYXMgYmVlbgorICogZGVmaW5lZCkgZS5nLiBtYWxsb2MoKSBpcyByZXJvdXRlZCB0byBfbWFsbG9jX2RiZygpLgorICovCisjZGVmaW5lIF9DUlREQkdfTUFQX0FMTE9DIDEKKyNpbmNsdWRlIDxjcnRkYmcuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTI2LDggKzMyLDggQEAKICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00Myw2ICs0OSw5IEBACiAjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogI2VuZGlmCisjaWZkZWYgSEFWRV9WQUxHUklORF9NRU1DSEVDS19ICisjaW5jbHVkZSA8dmFsZ3JpbmQvbWVtY2hlY2suaD4KKyNlbmRpZgogI2lmZGVmIGN5Z3dpbgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgpAQCAtNjMsMTQgKzcyLDM1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9taWIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NjYXBpLmg+CiAKLSNpZmRlZiBXSU4zMgorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRvb2xzX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1lbW9yeV93cmFwcGVycywgdG9vbHNfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHZhbGdyaW5kLCB0b29sc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3RyaW5nX3RpbWVfdG9fc2VjcywgdG9vbHNfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfY2hlY2tfZGVmaW5lZG5lc3MsIHZhbGdyaW5kKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWF0aW1lX3JlYWR5LCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0aW1ldmFsX3R0aWNrcywgbmV0c25tcF91bnVzZWQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtZW1vcnlfc3RyZHVwLCBtZW1vcnlfd3JhcHBlcnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWVtb3J5X2NhbGxvYywgbWVtb3J5X3dyYXBwZXJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1lbW9yeV9tYWxsb2MsIG1lbW9yeV93cmFwcGVycykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtZW1vcnlfcmVhbGxvYywgbWVtb3J5X3dyYXBwZXJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1lbW9yeV9mcmVlLCBtZW1vcnlfd3JhcHBlcnMpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfV1JBUFBFUlMKIC8qKgogICogVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgZm9yIHRoZSBzdHJkdXAgZnVuY3Rpb24uCisgKgorICogQG5vdGUgVGhlIHN0cmR1cCgpIGltcGxlbWVudGF0aW9uIGNhbGxzIF9tYWxsb2NfZGJnKCkgd2hlbiBsaW5raW5nIHdpdGgKKyAqIE1TVkNSVD8/RC5kbGwgYW5kIG1hbGxvYygpIHdoZW4gbGlua2luZyB3aXRoIE1TVkNSVD8/LmRsbAogICovCiBjaGFyICogbmV0c25tcF9zdHJkdXAoIGNvbnN0IGNoYXIgKiBwdHIpCiB7CiAgICAgcmV0dXJuIHN0cmR1cChwdHIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUVNT1JZX1NUUkRVUCAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01FTU9SWV9DQUxMT0MKIC8qKgogICogVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgZm9yIHRoZSBjYWxsb2MgZnVuY3Rpb24uCiAgKi8KQEAgLTc4LDcgKzEwOCw4IEBACiB7CiAgICAgcmV0dXJuIGNhbGxvYyhubWVtYiwgc2l6ZSk7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01FTU9SWV9DQUxMT0MgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfTUFMTE9DCiAvKioKICAqIFRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGZvciB0aGUgbWFsbG9jIGZ1bmN0aW9uLgogICovCkBAIC04Niw3ICsxMTcsOCBAQAogewogICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01FTU9SWV9NQUxMT0MgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfUkVBTExPQwogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgd3JhcHBlciBmb3IgdGhlIHJlYWxsb2MgZnVuY3Rpb24uCiAgKi8KQEAgLTk0LDcgKzEyNiw4IEBACiB7CiAgICAgcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUVNT1JZX1JFQUxMT0MgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfRlJFRQogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgd3JhcHBlciBmb3IgdGhlIGZyZWUgZnVuY3Rpb24uCiAgKiBJdCBjYWxscyBmcmVlIG9ubHkgaWYgdGhlIGNhbGxpbmcgcGFyYW1ldGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlLgpAQCAtMTA0LDcgKzEzNyw3IEBACiAgICAgaWYgKHB0cikKICAgICAgICAgZnJlZShwdHIpOwogfQotI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfRlJFRSAqLwogCiAvKioKICAqIFRoaXMgZnVuY3Rpb24gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBwb2ludGVkIGF0IGJ5ICpidWYsIHdoaWNoIGlzCkBAIC0xNzQsNiArMjA3LDkgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICghKmJ1ZikKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBzdHJjcHkoKGNoYXIgKikgKCpidWYgKyAqb3V0X2xlbiksIChjb25zdCBjaGFyICopIHMpOwogICAgICpvdXRfbGVuICs9IHN0cmxlbigoY2hhciAqKSAoKmJ1ZiArICpvdXRfbGVuKSk7CiAgICAgcmV0dXJuIDE7CkBAIC0xOTQsNiArMjMwLDcgQEAKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgZnJlZV96ZXJvKCkgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VTTV9TQ0FQSQogLyoqCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhZWQgJiBzZXQgYnVmZmVyIG9uIHN1Y2Nlc3MsIHNpemUgY29udGFpbnMKICAqIG51bWJlciBvZiByYW5kb20gYnl0ZXMgZmlsbGVkLiAgYnVmIGlzIE5VTEwgYW5kICpzaXplIHNldCB0byBLTVQKQEAgLTIyNCw2ICsyNjEsNyBAQAogICAgIHJldHVybiBidWY7CiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG1hbGxvY19yYW5kb20oKSAqLworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVNNX1NDQVBJICovCiAKIC8qKgogICogRHVwbGljYXRlcyBhIG1lbW9yeSBibG9jay4KQEAgLTI0Niw2ICsyODQsMzkgQEAKICAgICByZXR1cm4gdG87CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBuZXRzbm1wX21lbWR1cCgpICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0NIRUNLX0RFRklORURORVNTCisvKioKKyAqIFdoZW4gcnVubmluZyB1bmRlciBWYWxncmluZCwgY2hlY2sgd2hldGhlciBhbGwgYnl0ZXMgaW4gdGhlIHJhbmdlIFtwYWNrZXQsCisgKiBwYWNrZXQrbGVuZ3RoKSBhcmUgZGVmaW5lZC4gTGV0IFZhbGdyaW5kIHByaW50IGEgYmFja3RyYWNlIGlmIG9uZSBvciBtb3JlCisgKiBieXRlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGhhdmUgYmVlbiBmb3VuZC4gVGhpcyBmdW5jdGlvbiBjYW4gaGVscCB0bworICogZmluZCB0aGUgY2F1c2Ugb2YgdW5kZWZpbmVkIHZhbHVlIGVycm9ycyBpZiAtLXRyYWNrLW9yaWdpbnM9eWVzIGlzIG5vdAorICogc3VmZmljaWVudC4gRG9lcyBub3RoaW5nIHdoZW4gbm90IHJ1bm5pbmcgdW5kZXIgVmFsZ3JpbmQuCisgKgorICogTm90ZTogdGhpcyByZXF1aXJlcyBhIGZhaXJseSByZWNlbnQgdmFsZ3JpbmQuCisgKi8KK3ZvaWQKK25ldHNubXBfY2hlY2tfZGVmaW5lZG5lc3MoY29uc3Qgdm9pZCAqcGFja2V0LCBzaXplX3QgbGVuZ3RoKQoreworI2lmIGRlZmluZWQoX19WQUxHUklORF9NQUpPUl9fKSAmJiBkZWZpbmVkKF9fVkFMR1JJTkRfTUlOT1JfXykgICBcCisgICAgJiYgKF9fVkFMR1JJTkRfTUFKT1JfXyA+IDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfHwgKF9fVkFMR1JJTkRfTUFKT1JfXyA9PSAzICYmIF9fVkFMR1JJTkRfTUlOT1JfXyA+PSA2KSkKKworICAgIGlmIChSVU5OSU5HX09OX1ZBTEdSSU5EKSB7CisgICAgICAgIGludCBpOworICAgICAgICBjaGFyIHZiaXRzOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKFZBTEdSSU5EX0dFVF9WQklUUygoY29uc3QgY2hhciAqKXBhY2tldCArIGksICZ2Yml0cywgMSkgPT0gMQorICAgICAgICAgICAgICAgICYmIHZiaXRzKQorICAgICAgICAgICAgICAgIFZBTEdSSU5EX1BSSU5URl9CQUNLVFJBQ0UoIlVuZGVmaW5lZDogYnl0ZSAlZC8lZCIsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9DSEVDS19ERUZJTkVETkVTUyAqLworCiAvKiogY29waWVzIGEgKHBvc3NpYmxlKSB1bnRlcm1pbmF0ZWQgc3RyaW5nIG9mIGEgZ2l2ZW4gbGVuZ3RoIGludG8gYQogICogIG5ldyBidWZmZXIgYW5kIG51bGwgdGVybWluYXRlcyBpdCBhcyB3ZWxsIChuZXcgYnVmZmVyIE1BWSBiZSBvbmUKICAqICBieXRlIGxvbmdlciB0byBhY2NvdW50IGZvciB0aGlzICovCkBAIC0yNzEsNiArMzQyLDU4IEBACiAKIC8qKiBjb252ZXJ0cyBiaW5hcnkgdG8gaGV4aWRlY2ltYWwKICAqCisgKiAgICAgQHBhcmFtICppbnB1dCAgICAgICAgICAgIEJpbmFyeSBkYXRhLgorICogICAgIEBwYXJhbSBsZW4gICAgICAgICAgICAgICBMZW5ndGggb2YgYmluYXJ5IGRhdGEuCisgKiAgICAgQHBhcmFtICoqZGVzdCAgICAgICAgICAgIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgZXF1aXZhbGVudCBpbiBoZXguCisgKiAgICAgQHBhcmFtICpkZXN0X2xlbiAgICAgICAgIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCisgKiAgICAgQHBhcmFtIGFsbG93X3JlYWxsb2MgICAgIGZsYWcgaW5kaWNhdGluZyBpZiBidWZmZXIgY2FuIGJlIHJlYWxsb2MnZAorICogICAgICAKKyAqIEByZXR1cm4gb2xlbglMZW5ndGggb2Ygb3V0cHV0IHN0cmluZyBub3QgaW5jbHVkaW5nIE5VTEwgdGVybWluYXRvci4KKyAqLwordV9pbnQKK25ldHNubXBfYmluYXJ5X3RvX2hleCh1X2NoYXIgKiogZGVzdCwgc2l6ZV90ICpkZXN0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGlucHV0LCBzaXplX3QgbGVuKQoreworICAgIHVfaW50ICAgICAgICAgICBvbGVuID0gKGxlbiAqIDIpICsgMTsKKyAgICB1X2NoYXIgICAgICAgICAqcywgKm9wOworICAgIGNvbnN0IHVfY2hhciAgICppcCA9IGlucHV0OworCisgICAgaWYgKGRlc3QgPT0gTlVMTCB8fCBkZXN0X2xlbiA9PSBOVUxMIHx8IGlucHV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKE5VTEwgPT0gKmRlc3QpIHsKKyAgICAgICAgcyA9ICh1bnNpZ25lZCBjaGFyICopIGNhbGxvYygxLCBvbGVuKTsKKyAgICAgICAgKmRlc3RfbGVuID0gb2xlbjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzID0gKmRlc3Q7CisKKyAgICBpZiAoKmRlc3RfbGVuIDwgb2xlbikgeworICAgICAgICBpZiAoIWFsbG93X3JlYWxsb2MpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgKmRlc3RfbGVuID0gb2xlbjsKKyAgICAgICAgaWYgKHNubXBfcmVhbGxvYyhkZXN0LCBkZXN0X2xlbikpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBvcCA9IHM7CisgICAgd2hpbGUgKGlwIC0gaW5wdXQgPCAoaW50KSBsZW4pIHsKKyAgICAgICAgKm9wKysgPSBWQUwySEVYKCgqaXAgPj4gNCkgJiAweGYpOworICAgICAgICAqb3ArKyA9IFZBTDJIRVgoKmlwICYgMHhmKTsKKyAgICAgICAgaXArKzsKKyAgICB9CisgICAgKm9wID0gJ1wwJzsKKworICAgIGlmIChzICE9ICpkZXN0KQorICAgICAgICAqZGVzdCA9IHM7CisgICAgKmRlc3RfbGVuID0gb2xlbjsKKworICAgIHJldHVybiBvbGVuOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBuZXRzbm1wX2JpbmFyeV90b19oZXgoKSAqLworCisvKiogY29udmVydHMgYmluYXJ5IHRvIGhleGlkZWNpbWFsCisgKgogICoJQHBhcmFtICppbnB1dAkJQmluYXJ5IGRhdGEuCiAgKglAcGFyYW0gbGVuCQlMZW5ndGggb2YgYmluYXJ5IGRhdGEuCiAgKglAcGFyYW0gKipvdXRwdXQJTlVMTCB0ZXJtaW5hdGVkIHN0cmluZyBlcXVpdmFsZW50IGluIGhleC4KQEAgLTI4NCwyMSArNDA3LDExIEBACiB1X2ludAogYmluYXJ5X3RvX2hleChjb25zdCB1X2NoYXIgKiBpbnB1dCwgc2l6ZV90IGxlbiwgY2hhciAqKm91dHB1dCkKIHsKLSAgICB1X2ludCAgICAgICAgICAgb2xlbiA9IChsZW4gKiAyKSArIDE7Ci0gICAgY2hhciAgICAgICAgICAgKnMgPSAoY2hhciAqKSBjYWxsb2MoMSwgb2xlbiksICpvcCA9IHM7Ci0gICAgY29uc3QgdV9jaGFyICAgKmlwID0gaW5wdXQ7CisgICAgc2l6ZV90IG91dF9sZW4gPSAwOwogCisgICAgKm91dHB1dCA9IE5VTEw7IC8qIHdpbGwgYWxsb2MgbmV3IGJ1ZmZlciAqLwogCi0gICAgd2hpbGUgKGlwIC0gaW5wdXQgPCAoaW50KSBsZW4pIHsKLSAgICAgICAgKm9wKysgPSBWQUwySEVYKCgqaXAgPj4gNCkgJiAweGYpOwotICAgICAgICAqb3ArKyA9IFZBTDJIRVgoKmlwICYgMHhmKTsKLSAgICAgICAgaXArKzsKLSAgICB9Ci0gICAgKm9wID0gJ1wwJzsKLQotICAgICpvdXRwdXQgPSBzOwotICAgIHJldHVybiBvbGVuOwotCisgICAgcmV0dXJuIG5ldHNubXBfYmluYXJ5X3RvX2hleCgodV9jaGFyKiopb3V0cHV0LCAmb3V0X2xlbiwgMSwgaW5wdXQsIGxlbik7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBiaW5hcnlfdG9faGV4KCkgKi8KIAogCkBAIC0zMjIsMTEgKzQzNSwxNCBAQAogaGV4X3RvX2JpbmFyeTIoY29uc3QgdV9jaGFyICogaW5wdXQsIHNpemVfdCBsZW4sIGNoYXIgKipvdXRwdXQpCiB7CiAgICAgdV9pbnQgICAgICAgICAgIG9sZW4gPSAobGVuIC8gMikgKyAobGVuICUgMik7Ci0gICAgY2hhciAgICAgICAgICAgKnMgPSAoY2hhciAqKSBjYWxsb2MoMSwgKG9sZW4pID8gb2xlbiA6IDEpLCAqb3AgPSBzOworICAgIGNoYXIgICAgICAgICAgICpzID0gY2FsbG9jKDEsIG9sZW4gPyBvbGVuIDogMSksICpvcCA9IHM7CiAgICAgY29uc3QgdV9jaGFyICAgKmlwID0gaW5wdXQ7CiAKIAogICAgICpvdXRwdXQgPSBOVUxMOworICAgIGlmICghcykKKyAgICAgICAgZ290byBoZXhfdG9fYmluYXJ5Ml9xdWl0OworCiAgICAgKm9wID0gMDsKICAgICBpZiAobGVuICUgMikgewogICAgICAgICBpZiAoIWlzeGRpZ2l0KCppcCkpCkBAIC0zMzUsNyArNDUxLDcgQEAKICAgICAgICAgaXArKzsKICAgICB9CiAKLSAgICB3aGlsZSAoaXAgLSBpbnB1dCA8IChpbnQpIGxlbikgeworICAgIHdoaWxlIChpcCA8IGlucHV0ICsgbGVuKSB7CiAgICAgICAgIGlmICghaXN4ZGlnaXQoKmlwKSkKICAgICAgICAgICAgIGdvdG8gaGV4X3RvX2JpbmFyeTJfcXVpdDsKICAgICAgICAgKm9wID0gSEVYMlZBTCgqaXApIDw8IDQ7CkBAIC00MjMsNyArNTM5LDcgQEAKIG5ldHNubXBfaGV4X3RvX2JpbmFyeSh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IGNoYXIgKmhleCwgY29uc3QgY2hhciAqZGVsaW0pCiB7Ci0gICAgaW50ICAgICAgICAgICAgIHN1YmlkID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgICAgc3ViaWQgPSAwOwogICAgIGNvbnN0IGNoYXIgICAgICpjcCA9IGhleDsKIAogICAgIGlmIChidWYgPT0gTlVMTCB8fCBidWZfbGVuID09IE5VTEwgfHwgb2Zmc2V0ID09IE5VTEwgfHwgaGV4ID09IE5VTEwpIHsKQEAgLTc1OCwxOSArODc0LDIzIEBACiAKIAogLyoqCi0gKiBjcmVhdGUgYSBuZXcgdGltZSBtYXJrZXIuCi0gKiBOT1RFOiBDYWxsZXIgbXVzdCBmcmVlIHRpbWUgbWFya2VyIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KKyAqIENyZWF0ZSBhIG5ldyByZWFsLXRpbWUgbWFya2VyLgorICoKKyAqIFxkZXByZWNhdGVkIFVzZSBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKCkgaW5zdGVhZC4KKyAqCisgKiBAbm90ZSBDYWxsZXIgbXVzdCBmcmVlIHRpbWUgbWFya2VyIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KICAqLwogbWFya2VyX3QKIGF0aW1lX25ld01hcmtlcih2b2lkKQogewogICAgIG1hcmtlcl90ICAgICAgICBwbSA9IChtYXJrZXJfdCkgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOwotICAgIGdldHRpbWVvZmRheSgoc3RydWN0IHRpbWV2YWwgKikgcG0sIDApOworICAgIGdldHRpbWVvZmRheSgoc3RydWN0IHRpbWV2YWwgKikgcG0sIE5VTEwpOwogICAgIHJldHVybiBwbTsKIH0KIAogLyoqCi0gKiBzZXQgYSB0aW1lIG1hcmtlci4KKyAqIFNldCBhIHRpbWUgbWFya2VyIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSByZWFsLXRpbWUgY2xvY2suCisgKiBcZGVwcmVjYXRlZCBVc2UgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigpIGluc3RlYWQuCiAgKi8KIHZvaWQKIGF0aW1lX3NldE1hcmtlcihtYXJrZXJfdCBwbSkKQEAgLTc3OCw0MCArODk4LDExMyBAQAogICAgIGlmICghcG0pCiAgICAgICAgIHJldHVybjsKIAotICAgIGdldHRpbWVvZmRheSgoc3RydWN0IHRpbWV2YWwgKikgcG0sIDApOworICAgIGdldHRpbWVvZmRheSgoc3RydWN0IHRpbWV2YWwgKikgcG0sIE5VTEwpOwogfQogCisvKioKKyAqIFF1ZXJ5IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBtb25vdG9uaWMgY2xvY2suCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG1vbm90b25pYyBjbG9jayBpZiBzdWNoIGEgY2xvY2sgaXMgcHJvdmlkZWQgYnkKKyAqIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9yIHRoZSB3YWxsIGNsb2NrIHRpbWUgaWYgbm8gc3VjaCBjbG9jayBpcyBwcm92aWRlZCBieQorICogdGhlIG9wZXJhdGluZyBzeXN0ZW0uIEEgbW9ub3RvbmljIGNsb2NrIGlzIGEgY2xvY2sgdGhhdCBpcyBuZXZlciBhZGp1c3RlZAorICogYmFja3dhcmRzIGFuZCB0aGF0IHByb2NlZWRzIGF0IHRoZSBzYW1lIHJhdGUgYXMgd2FsbCBjbG9jayB0aW1lLgorICoKKyAqIEBwYXJhbVtvdXRdIHR2IFBvaW50ZXIgdG8gbW9ub3RvbmljIGNsb2NrIHRpbWUuCisgKi8KK3ZvaWQgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKHN0cnVjdCB0aW1ldmFsKiB0dikKK3sKKyNpZiBkZWZpbmVkKEhBVkVfQ0xPQ0tfR0VUVElNRSkgJiYgZGVmaW5lZChDTE9DS19NT05PVE9OSUMpCisgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgIGludCByZXM7CisKKyAgICByZXMgPSBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKTsKKyAgICBpZiAocmVzID49IDApIHsKKyAgICAgICAgdHYtPnR2X3NlYyA9IHRzLnR2X3NlYzsKKyAgICAgICAgdHYtPnR2X3VzZWMgPSB0cy50dl9uc2VjIC8gMTAwMDsKKyAgICB9IGVsc2UgeworICAgICAgICBnZXR0aW1lb2ZkYXkodHYsIE5VTEwpOworICAgIH0KKyNlbGlmIGRlZmluZWQoV0lOMzIpCisgICAgLyoKKyAgICAgKiBXaW5kb3dzOiByZXR1cm4gdGljayBjb3VudC4gTm90ZTogdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHRpY2sgY291bnQKKyAgICAgKiBpbmNyZWFzZXMgaXMgbm90IGFkanVzdGVkIGJ5IHRoZSB0aW1lIHN5bmNocm9uaXphdGlvbiBhbGdvcml0aG0sIHNvCisgICAgICogZXhwZWN0IGFuIGVycm9yIG9mIDw9IDEwMCBwcG0gZm9yIHRoZSByYXRlIGF0IHdoaWNoIHRoaXMgY2xvY2sKKyAgICAgKiBpbmNyZWFzZXMuCisgICAgICovCisgICAgdHlwZWRlZiBVTE9OR0xPTkcgKFdJTkFQSSAqIHBmR2V0VGlja0NvdW50NjQpKHZvaWQpOworICAgIHN0YXRpYyBpbnQgc19pbml0aWFsaXplZDsKKyAgICBzdGF0aWMgcGZHZXRUaWNrQ291bnQ2NCBzX3BmR2V0VGlja0NvdW50NjQ7CisgICAgdWludDY0X3Qgbm93NjQ7CisKKyAgICBpZiAoIXNfaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgSE1PRFVMRSBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGUoImtlcm5lbDMyIik7CisgICAgICAgIHNfcGZHZXRUaWNrQ291bnQ2NCA9CisgICAgICAgICAgICAocGZHZXRUaWNrQ291bnQ2NCkgR2V0UHJvY0FkZHJlc3MoaEtlcm5lbDMyLCAiR2V0VGlja0NvdW50NjQiKTsKKyAgICAgICAgc19pbml0aWFsaXplZCA9IFRSVUU7CisgICAgfQorCisgICAgaWYgKHNfcGZHZXRUaWNrQ291bnQ2NCkgeworICAgICAgICAvKiBXaW5kb3dzIFZpc3RhLCBXaW5kb3dzIDIwMDggb3IgYW55IGxhdGVyIFdpbmRvd3MgdmVyc2lvbiAqLworICAgICAgICBub3c2NCA9ICgqc19wZkdldFRpY2tDb3VudDY0KSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFdpbmRvd3MgWFAsIFdpbmRvd3MgMjAwMyBvciBhbnkgZWFybGllciBXaW5kb3dzIHZlcnNpb24gKi8KKyAgICAgICAgc3RhdGljIHVpbnQzMl90IHNfd3JhcHMsIHNfbGFzdDsKKyAgICAgICAgdWludDMyX3Qgbm93OworCisgICAgICAgIG5vdyA9IEdldFRpY2tDb3VudCgpOworICAgICAgICBpZiAobm93IDwgc19sYXN0KQorICAgICAgICAgICAgc193cmFwcysrOworICAgICAgICBzX2xhc3QgPSBub3c7CisgICAgICAgIG5vdzY0ID0gKCh1aW50NjRfdClzX3dyYXBzIDw8IDMyKSB8IG5vdzsKKyAgICB9CisgICAgdHYtPnR2X3NlYyA9IG5vdzY0IC8gMTAwMDsKKyAgICB0di0+dHZfdXNlYyA9IChub3c2NCAlIDEwMDApICogMTAwMDsKKyNlbHNlCisgICAgLyogQXQgbGVhc3QgRnJlZUJTRCA0IGRvZXNuJ3QgcHJvdmlkZSBtb25vdG9uaWMgY2xvY2sgc3VwcG9ydC4gKi8KKyN3YXJuaW5nIE5vdCBzdXJlIGhvdyB0byBxdWVyeSBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBjbG9jayBvbiB5b3VyIHN5c3RlbS4gXAorVGltZXJzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGlmIHRoZSBzeXN0ZW0gY2xvY2sgaXMgYWRqdXN0ZWQgYnkgZS5nLiBudHBkLgorICAgIGdldHRpbWVvZmRheSh0diwgTlVMTCk7CisjZW5kaWYKK30KKworLyoqCisgKiBTZXQgYSB0aW1lIG1hcmtlciB0byB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbW9ub3RvbmljIGNsb2NrLgorICovCit2b2lkCituZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKG1hcmtlcl90ICpwbSkKK3sKKyAgICBpZiAoISpwbSkKKyAgICAgICAgKnBtID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOworICAgIGlmICgqcG0pCisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygqcG0pOworfQogCiAvKioKICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIG1zZWMpIGJldHdlZW4gdGhlIHR3byBtYXJrZXJzCisgKgorICogXGRlcHJlY2F0ZWQgRG9uJ3QgdXNlIGluIG5ldyBjb2RlLgogICovCiBsb25nCi1hdGltZV9kaWZmKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpCithdGltZV9kaWZmKGNvbnN0X21hcmtlcl90IGZpcnN0LCBjb25zdF9tYXJrZXJfdCBzZWNvbmQpCiB7Ci0gICAgc3RydWN0IHRpbWV2YWwgKnR2MSwgKnR2MiwgZGlmZjsKKyAgICBzdHJ1Y3QgdGltZXZhbCBkaWZmOwogCi0gICAgdHYxID0gKHN0cnVjdCB0aW1ldmFsICopIGZpcnN0OwotICAgIHR2MiA9IChzdHJ1Y3QgdGltZXZhbCAqKSBzZWNvbmQ7CisgICAgTkVUU05NUF9USU1FUlNVQigoY29uc3Qgc3RydWN0IHRpbWV2YWwgKikgc2Vjb25kLCAoY29uc3Qgc3RydWN0IHRpbWV2YWwgKikgZmlyc3QsICZkaWZmKTsKIAotICAgIGRpZmYudHZfc2VjID0gdHYyLT50dl9zZWMgLSB0djEtPnR2X3NlYyAtIDE7Ci0gICAgZGlmZi50dl91c2VjID0gdHYyLT50dl91c2VjIC0gdHYxLT50dl91c2VjICsgMTAwMDAwMDsKLQotICAgIHJldHVybiAoZGlmZi50dl9zZWMgKiAxMDAwICsgZGlmZi50dl91c2VjIC8gMTAwMCk7CisgICAgcmV0dXJuIChsb25nKShkaWZmLnR2X3NlYyAqIDEwMDAgKyBkaWZmLnR2X3VzZWMgLyAxMDAwKTsKIH0KIAogLyoqCiAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIChpbiB1X2xvbmcgbXNlYykgYmV0d2VlbiB0aGUgdHdvIG1hcmtlcnMKKyAqCisgKiBcZGVwcmVjYXRlZCBEb24ndCB1c2UgaW4gbmV3IGNvZGUuCiAgKi8KIHVfbG9uZwotdWF0aW1lX2RpZmYobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkKK3VhdGltZV9kaWZmKGNvbnN0X21hcmtlcl90IGZpcnN0LCBjb25zdF9tYXJrZXJfdCBzZWNvbmQpCiB7Ci0gICAgc3RydWN0IHRpbWV2YWwgKnR2MSwgKnR2MiwgZGlmZjsKKyAgICBzdHJ1Y3QgdGltZXZhbCBkaWZmOwogCi0gICAgdHYxID0gKHN0cnVjdCB0aW1ldmFsICopIGZpcnN0OwotICAgIHR2MiA9IChzdHJ1Y3QgdGltZXZhbCAqKSBzZWNvbmQ7Ci0KLSAgICBkaWZmLnR2X3NlYyA9IHR2Mi0+dHZfc2VjIC0gdHYxLT50dl9zZWMgLSAxOwotICAgIGRpZmYudHZfdXNlYyA9IHR2Mi0+dHZfdXNlYyAtIHR2MS0+dHZfdXNlYyArIDEwMDAwMDA7CisgICAgTkVUU05NUF9USU1FUlNVQigoY29uc3Qgc3RydWN0IHRpbWV2YWwgKikgc2Vjb25kLCAoY29uc3Qgc3RydWN0IHRpbWV2YWwgKikgZmlyc3QsICZkaWZmKTsKIAogICAgIHJldHVybiAoKCh1X2xvbmcpIGRpZmYudHZfc2VjKSAqIDEwMDAgKyBkaWZmLnR2X3VzZWMgLyAxMDAwKTsKIH0KQEAgLTgxOSwyOSArMTAxMiwyNiBAQAogLyoqCiAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIChpbiB1X2xvbmcgMS8xMDB0aCBzZWNzKSBiZXR3ZWVuIHRoZSB0d28gbWFya2VycwogICogKGZ1bmN0aW9uYWxseSB0aGlzIGlzIHdoYXQgc3lzVXBUaW1lIG5lZWRzKQorICoKKyAqIFxkZXByZWNhdGVkIERvbid0IHVzZSBpbiBuZXcgY29kZS4KICAqLwogdV9sb25nCi11YXRpbWVfaGRpZmYobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkKK3VhdGltZV9oZGlmZihjb25zdF9tYXJrZXJfdCBmaXJzdCwgY29uc3RfbWFya2VyX3Qgc2Vjb25kKQogewotICAgIHN0cnVjdCB0aW1ldmFsICp0djEsICp0djIsIGRpZmY7Ci0gICAgdV9sb25nICAgICAgICAgIHJlczsKKyAgICBzdHJ1Y3QgdGltZXZhbCBkaWZmOwogCi0gICAgdHYxID0gKHN0cnVjdCB0aW1ldmFsICopIGZpcnN0OwotICAgIHR2MiA9IChzdHJ1Y3QgdGltZXZhbCAqKSBzZWNvbmQ7Ci0KLSAgICBkaWZmLnR2X3NlYyA9IHR2Mi0+dHZfc2VjIC0gdHYxLT50dl9zZWMgLSAxOwotICAgIGRpZmYudHZfdXNlYyA9IHR2Mi0+dHZfdXNlYyAtIHR2MS0+dHZfdXNlYyArIDEwMDAwMDA7Ci0KLSAgICByZXMgPSAoKHVfbG9uZykgZGlmZi50dl9zZWMpICogMTAwICsgZGlmZi50dl91c2VjIC8gMTAwMDA7Ci0gICAgcmV0dXJuIHJlczsKKyAgICBORVRTTk1QX1RJTUVSU1VCKChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKSBzZWNvbmQsIChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKSBmaXJzdCwgJmRpZmYpOworICAgIHJldHVybiAoKHVfbG9uZykgZGlmZi50dl9zZWMpICogMTAwICsgZGlmZi50dl91c2VjIC8gMTAwMDA7CiB9CiAKIC8qKgotICogVGVzdDogSGFzIChtYXJrZWQgdGltZSBwbHVzIGRlbHRhKSBleGNlZWRlZCBjdXJyZW50IHRpbWUgKGluIG1zZWMpID8KKyAqIFRlc3Q6IEhhcyAobWFya2VkIHRpbWUgcGx1cyBkZWx0YSkgZXhjZWVkZWQgY3VycmVudCB0aW1lID8KICAqIFJldHVybnMgMCBpZiB0ZXN0IGZhaWxzIG9yIGNhbm5vdCBiZSB0ZXN0ZWQgKG5vIG1hcmtlcikuCisgKgorICogXGRlcHJlY2F0ZWQgVXNlIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCkgaW5zdGVhZC4KICAqLwogaW50Ci1hdGltZV9yZWFkeShtYXJrZXJfdCBwbSwgaW50IGRlbHRhVCkKK2F0aW1lX3JlYWR5KGNvbnN0X21hcmtlcl90IHBtLCBpbnQgZGVsdGFfbXMpCiB7CiAgICAgbWFya2VyX3QgICAgICAgIG5vdzsKICAgICBsb25nICAgICAgICAgICAgZGlmZjsKQEAgLTg1MiwxOCArMTA0MiwyMSBAQAogCiAgICAgZGlmZiA9IGF0aW1lX2RpZmYocG0sIG5vdyk7CiAgICAgZnJlZShub3cpOwotICAgIGlmIChkaWZmIDwgZGVsdGFUKQorICAgIGlmIChkaWZmIDwgZGVsdGFfbXMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIDE7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VQVRJTUVfUkVBRFkKIC8qKgotICogVGVzdDogSGFzIChtYXJrZWQgdGltZSBwbHVzIGRlbHRhKSBleGNlZWRlZCBjdXJyZW50IHRpbWUgKGluIG1zZWMpID8KKyAqIFRlc3Q6IEhhcyAobWFya2VkIHRpbWUgcGx1cyBkZWx0YSkgZXhjZWVkZWQgY3VycmVudCB0aW1lID8KICAqIFJldHVybnMgMCBpZiB0ZXN0IGZhaWxzIG9yIGNhbm5vdCBiZSB0ZXN0ZWQgKG5vIG1hcmtlcikuCisgKgorICogXGRlcHJlY2F0ZWQgVXNlIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCkgaW5zdGVhZC4KICAqLwogaW50Ci11YXRpbWVfcmVhZHkobWFya2VyX3QgcG0sIHVuc2lnbmVkIGludCBkZWx0YVQpCit1YXRpbWVfcmVhZHkoY29uc3RfbWFya2VyX3QgcG0sIHVuc2lnbmVkIGludCBkZWx0YV9tcykKIHsKICAgICBtYXJrZXJfdCAgICAgICAgbm93OwogICAgIHVfbG9uZyAgICAgICAgICBkaWZmOwpAQCAtODc0LDExICsxMDY3LDM4IEBACiAKICAgICBkaWZmID0gdWF0aW1lX2RpZmYocG0sIG5vdyk7CiAgICAgZnJlZShub3cpOwotICAgIGlmIChkaWZmIDwgZGVsdGFUKQorICAgIGlmIChkaWZmIDwgZGVsdGFfbXMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIDE7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VQVRJTUVfUkVBRFkgKi8KKworLyoqCisgKiBJcyB0aGUgY3VycmVudCB0aW1lIHBhc3QgKG1hcmtlZCB0aW1lIHBsdXMgZGVsdGEpID8KKyAqCisgKiBAcGFyYW1baW5dIHBtIFBvaW50ZXIgdG8gbWFya2VkIHRpbWUgYXMgb2J0YWluZWQgdmlhCisgKiAgIG5ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIoKS4KKyAqIEBwYXJhbVtpbl0gZGVsdGFfbXMgVGltZSBkZWx0YSBpbiBtaWxsaXNlY29uZHMuCisgKgorICogQHJldHVybiBwbSAhPSBOVUxMICYmIG5vdyA+PSAoKnBtICsgZGVsdGFfbXMpCisgKi8KK2ludAorbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoY29uc3RfbWFya2VyX3QgcG0sIGludCBkZWx0YV9tcykKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCAgbm93LCBkaWZmLCBkZWx0YTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGRlbHRhX21zID49IDApOworICAgIGlmIChwbSkgeworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CisgICAgICAgIE5FVFNOTVBfVElNRVJTVUIoJm5vdywgKGNvbnN0IHN0cnVjdCB0aW1ldmFsICopIHBtLCAmZGlmZik7CisgICAgICAgIGRlbHRhLnR2X3NlYyA9IGRlbHRhX21zIC8gMTAwMDsKKyAgICAgICAgZGVsdGEudHZfdXNlYyA9IChkZWx0YV9tcyAlIDEwMDApICogMTAwMFVMOworICAgICAgICByZXR1cm4gdGltZXJjbXAoJmRpZmYsICZkZWx0YSwgPj0pID8gVFJVRSA6IEZBTFNFOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9Cit9CiAKIAogICAgICAgICAvKgpAQCAtODg2LDEwICsxMTA2LDEyIEBACiAgICAgICAgICAqLwogCiAvKioKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVUaWNrcyBzaW5jZSB0aGUgZ2l2ZW4gbWFya2VyIAorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZVRpY2tzIHNpbmNlIHRoZSBnaXZlbiBtYXJrZXIKKyAqCisgKiBcZGVwcmVjYXRlZCBEb24ndCB1c2UgaW4gbmV3IGNvZGUuCiAgKi8KIGludAotbWFya2VyX3R0aWNrcyhtYXJrZXJfdCBwbSkKK21hcmtlcl90dGlja3MoY29uc3RfbWFya2VyX3QgcG0pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJlczsKICAgICBtYXJrZXJfdCAgICAgICAgbm93ID0gYXRpbWVfbmV3TWFya2VyKCk7CkBAIC04OTksMTEgKzExMjEsMTYgQEAKICAgICByZXR1cm4gcmVzIC8gMTA7ICAgICAgICAgICAgLyogYXRpbWVfZGlmZiB3b3JrcyBpbiBtc2VjLCBub3QgY3NlYyAqLwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVElNRVZBTF9UVElDS1MKKy8qKgorICogXGRlcHJlY2F0ZWQgRG9uJ3QgdXNlIGluIG5ldyBjb2RlLgorICovCiBpbnQKLXRpbWV2YWxfdHRpY2tzKHN0cnVjdCB0aW1ldmFsICp0dikKK3RpbWV2YWxfdHRpY2tzKGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dikKIHsKLSAgICByZXR1cm4gbWFya2VyX3R0aWNrcygobWFya2VyX3QpIHR2KTsKKyAgICByZXR1cm4gbWFya2VyX3R0aWNrcygoY29uc3RfbWFya2VyX3QpIHR2KTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RJTUVWQUxfVFRJQ0tTICovCiAKIC8qKgogICogTm9uIFdpbmRvd3M6ICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSAgCkBAIC05NjIsOCArMTE4OSw3IEBACiAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgIC8qIEp1c3QgZ2V0IHRoZSBzaXplICovCiAgICAgICAgICAgICAma2V5X3ZhbHVlX3NpemUpID09IEVSUk9SX1NVQ0NFU1MpIHsKIAotICAgICAgICBpZiAoa2V5X3ZhbHVlKQotICAgICAgICAgIFNOTVBfRlJFRShrZXlfdmFsdWUpOworICAgICAgICBTTk1QX0ZSRUUoa2V5X3ZhbHVlKTsKIAogICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgbmVlZGVkICsxIHRvIGFsbG93IFJlZ1F1ZXJ5VmFsdWVFeEEgdG8gTlVMTCB0ZXJtaW5hdGUgdGhlCiAgICAgICAgICAqIHN0cmluZyBkYXRhIGluIHJlZ2lzdHJ5IGlzIG1pc3Npbmcgb25lICh3aGljaCBpcyB1bmxpa2VseSkuCkBAIC0xMDA0LDggKzEyMzAsNyBAQAogICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAvKiBKdXN0IGdldCB0aGUgc2l6ZSAqLwogICAgICAgICAgICAgJmtleV92YWx1ZV9zaXplKSA9PSBFUlJPUl9TVUNDRVNTKSB7CiAKLSAgICAgICAgaWYgKGtleV92YWx1ZSkKLSAgICAgICAgICBTTk1QX0ZSRUUoa2V5X3ZhbHVlKTsKKyAgICAgICAgU05NUF9GUkVFKGtleV92YWx1ZSk7CiAKICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IG5lZWRlZCArMSB0byBhbGxvdyBSZWdRdWVyeVZhbHVlRXhBIHRvIE5VTEwgdGVybWluYXRlIHRoZQogICAgICAgICAgKiBzdHJpbmcgZGF0YSBpbiByZWdpc3RyeSBpcyBtaXNzaW5nIG9uZSAod2hpY2ggaXMgdW5saWtlbHkpLgpAQCAtMTA4NywzICsxMzEyLDY1IEBACiAKICAgICByZXR1cm4gMDsKIH0KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUUklOR19USU1FX1RPX1NFQ1MKKy8qKgorICogVGFrZXMgYSB0aW1lIHN0cmluZyBsaWtlIDRoIGFuZCBjb252ZXJ0cyBpdCB0byBzZWNvbmRzLgorICogVGhlIHN0cmluZyB0aW1lIGdpdmVuIG1heSBlbmQgaW4gJ3MnIGZvciBzZWNvbmRzICh0aGUgZGVmYXVsdAorICogYW55d2F5IGlmIG5vIHN1ZmZpeCBpcyBzcGVjaWZpZWQpLAorICogJ20nIGZvciBtaW51dGVzLCAnaCcgZm9yIGhvdXJzLCAnZCcgZm9yIGRheXMsIG9yICd3JyBmb3Igd2Vla3MuICBUaGUKKyAqIHVwcGVyIGNhc2UgdmVyc2lvbnMgYXJlIGFsc28gYWNjZXB0ZWQuCisgKgorICogQHBhcmFtIHRpbWVfc3RyaW5nIFRoZSB0aW1lIHN0cmluZyB0byBjb252ZXJ0LgorICoKKyAqIEByZXR1cm4gc2Vjb25kcyBjb252ZXJ0ZWQgZnJvbSB0aGUgc3RyaW5nCisgKiBAcmV0dXJuIC0xICA6IG9uIGZhaWx1cmUKKyAqLworaW50CituZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoY29uc3QgY2hhciAqdGltZV9zdHJpbmcpIHsKKyAgICBpbnQgc2VjcyA9IC0xOworICAgIGlmICghdGltZV9zdHJpbmcgfHwgIXRpbWVfc3RyaW5nWzBdKQorICAgICAgICByZXR1cm4gc2VjczsKKworICAgIHNlY3MgPSBhdG9pKHRpbWVfc3RyaW5nKTsKKworICAgIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKXRpbWVfc3RyaW5nW3N0cmxlbih0aW1lX3N0cmluZyktMV0pKQorICAgICAgICByZXR1cm4gc2VjczsgLyogbm8gbGV0dGVyIHNwZWNpZmllZCwgaXQncyBhbHJlYWR5IGluIHNlY29uZHMgKi8KKyAgICAKKyAgICBzd2l0Y2ggKHRpbWVfc3RyaW5nW3N0cmxlbih0aW1lX3N0cmluZyktMV0pIHsKKyAgICBjYXNlICdzJzoKKyAgICBjYXNlICdTJzoKKyAgICAgICAgLyogYWxyZWFkeSBpbiBzZWNvbmRzICovCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnbSc6CisgICAgY2FzZSAnTSc6CisgICAgICAgIHNlY3MgPSBzZWNzICogNjA7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnaCc6CisgICAgY2FzZSAnSCc6CisgICAgICAgIHNlY3MgPSBzZWNzICogNjAgKiA2MDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdkJzoKKyAgICBjYXNlICdEJzoKKyAgICAgICAgc2VjcyA9IHNlY3MgKiA2MCAqIDYwICogMjQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAndyc6CisgICAgY2FzZSAnVyc6CisgICAgICAgIHNlY3MgPSBzZWNzICogNjAgKiA2MCAqIDI0ICogNzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGltZSBzdHJpbmcgJXMgY29udGFpbnMgYW4gaW52YWxpZCBzdWZmaXggbGV0dGVyXG4iLAorICAgICAgICAgICAgICAgICB0aW1lX3N0cmluZyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgic3RyaW5nX3RpbWVfdG9fc2VjcyIsICJDb252ZXJ0ZWQgdGltZSBzdHJpbmcgJXMgdG8gJWRcbiIsCisgICAgICAgICAgICAgICAgdGltZV9zdHJpbmcsIHNlY3MpKTsKKyAgICByZXR1cm4gc2VjczsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUUklOR19USU1FX1RPX1NFQ1MgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjNjlhMQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jCkBAIC0wLDAgKzEsMzc0IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhdG0uaD4KKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorCisKK29pZCBuZXRzbm1wX0FBTDVQVkNEb21haW5bMTBdID0geyBORVRTTk1QX0VOVEVSUFJJU0VfTUlCLCAzLCAzLCAzIH07CitzdGF0aWMgbmV0c25tcF90ZG9tYWluIGFhbDVwdmNEb21haW47CisKKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAorICovCisKK3N0YXRpYyBjaGFyICoKK25ldHNubXBfYWFsNXB2Y19mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKnRvID0gTlVMTDsKKworICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopIGRhdGE7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIHsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKSB0LT5kYXRhOworICAgIH0KKyAgICBpZiAodG8gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3RyZHVwKCJBQUw1IFBWQzogdW5rbm93biIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXIgdG1wWzY0XTsKKyAgICAgICAgc3ByaW50Zih0bXAsICJBQUw1IFBWQzogJWhkLiVoZC4lZCIsIHRvLT5zYXBfYWRkci5pdGYsCisgICAgICAgICAgICAgICAgdG8tPnNhcF9hZGRyLnZwaSwgdG8tPnNhcF9hZGRyLnZjaSk7CisgICAgICAgIHJldHVybiBzdHJkdXAodG1wKTsKKyAgICB9Cit9CisKKworCisvKgorICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCisgKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCisgKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAorICovCisKK3N0YXRpYyBpbnQKK25ldHNubXBfYWFsNXB2Y19yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisJd2hpbGUgKHJjIDwgMCkgeworCSAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgTlVMTCk7CisJICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgICAgaWYgKHJjID49IDApIHsKKyAgICAgICAgICAgIERFQlVHSUYoIm5ldHNubXBfYWFsNXB2YyIpIHsKKyAgICAgICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX2FhbDVwdmNfZm10YWRkcih0LCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjdiBvbiBmZCAlZCBnb3QgJWQgYnl0ZXMgKGZyb20gJXMpXG4iLCB0LT5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjLCBzdHIpKTsKKyAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgInJlY3Ygb24gZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLCAKKwkJCXQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgfQorICAgICAgICAqb3BhcXVlID0gTlVMTDsKKyAgICAgICAgKm9sZW5ndGggPSAwOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX2FhbDVwdmNfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvID0gTlVMTDsKKworICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKKyAgICAgICAgKm9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoKm9wYXF1ZSk7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIHsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICh0LT5kYXRhKTsKKyAgICB9CisKKyAgICBpZiAodG8gIT0gTlVMTCAmJiB0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIERFQlVHSUYoIm5ldHNubXBfYWFsNXB2YyIpIHsKKyAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfYWFsNXB2Y19mbXRhZGRyKE5VTEwsICh2b2lkICopdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsCisgICAgICAgICAgICAgICAgICAgICAgICAic2VuZCAlZCBieXRlcyBmcm9tICVwIHRvICVzIG9uIGZkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCBzdHIsIHQtPnNvY2spKTsKKyAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgfQorCXdoaWxlIChyYyA8IDApIHsKKwkgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKKwkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisKKworc3RhdGljIGludAorbmV0c25tcF9hYWw1cHZjX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIGludCByYyA9IC0xOworCisgICAgaWYgKHQtPnNvY2sgPj0gMCkgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgImNsb3NlIGZkICVkXG4iLCB0LT5zb2NrKSk7CisjaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKKyAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKKyNlbHNlCisgICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7CisjZW5kaWYKKyAgICAgICAgdC0+c29jayA9IC0xOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworCisvKgorICogT3BlbiBhbiBBQUw1IFBWQyB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsIAorICogTlNBUCB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgCisgKiB0aGUgcmVtb3RlIE5TQVAgdG8gc2VuZCB0aGluZ3MgdG8uICAKKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHIsIGludCBsb2NhbCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisKKyNpZmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgaWYgKGxvY2FsKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisKKyAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNhcF9mYW1pbHkgIT0gQUZfQVRNUFZDKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHSUYoIm5ldHNubXBfYWFsNXB2YyIpIHsKKyAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHIoTlVMTCwgKHZvaWQgKikgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJvcGVuICVzICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwgc3RyKSk7CisgICAgICAgIGZyZWUoc3RyKTsKKyAgICB9CisKKyAgICB0LT5kb21haW4gPSBuZXRzbm1wX0FBTDVQVkNEb21haW47CisgICAgdC0+ZG9tYWluX2xlbmd0aCA9CisgICAgICAgIHNpemVvZihuZXRzbm1wX0FBTDVQVkNEb21haW4pIC8gc2l6ZW9mKG5ldHNubXBfQUFMNVBWQ0RvbWFpblswXSk7CisKKyAgICB0LT5zb2NrID0gc29ja2V0KFBGX0FUTVBWQywgU09DS19ER1JBTSwgMCk7CisgICAgaWYgKHQtPnNvY2sgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCJzb2NrZXQgZmFpbGVkICglcylcbiIsc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgImZkICVkIG9wZW5lZFxuIiwgdC0+c29jaykpOworCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBTZXQgdXAgdGhlIFFPUyBwYXJhbWV0ZXJzLgorICAgICAgICAgKi8KKworICAgICAgICBzdHJ1Y3QgYXRtX3FvcyBxb3MgPSB7IDAgfTsKKyAgICAgICAgcW9zLmFhbCA9IEFUTV9BQUw1OworICAgICAgICBxb3Mucnh0cC50cmFmZmljX2NsYXNzID0gQVRNX1VCUjsKKyAgICAgICAgcW9zLnJ4dHAubWF4X3NkdSA9IFNOTVBfTUFYX0xFTjsgICAgLyogIEhtbSAtLSB0aGlzIGlzIGEgYml0IHNtYWxsPyAgKi8KKyAgICAgICAgcW9zLnR4dHAgPSBxb3Mucnh0cDsKKworICAgICAgICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBTT0xfQVRNLCBTT19BVE1RT1MsICZxb3MsIHNpemVvZihxb3MpKSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAic2V0c29ja29wdCBmYWlsZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgbmV0c25tcF9hYWw1cHZjX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxvY2FsKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICAgICAgdC0+bG9jYWwgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDgpOworICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHQtPmxvY2FsWzBdID0gKGFkZHItPnNhcF9hZGRyLml0ZiAmIDB4ZmYwMCkgPj4gODsKKyAgICAgICAgdC0+bG9jYWxbMV0gPSAoYWRkci0+c2FwX2FkZHIuaXRmICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5sb2NhbFsyXSA9IChhZGRyLT5zYXBfYWRkci52cGkgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPmxvY2FsWzNdID0gKGFkZHItPnNhcF9hZGRyLnZwaSAmIDB4MDBmZikgPj4gMDsKKyAgICAgICAgdC0+bG9jYWxbNF0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHhmZjAwMDAwMCkgPj4gMjQ7CisgICAgICAgIHQtPmxvY2FsWzVdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDBmZjAwMDApID4+IDE2OworICAgICAgICB0LT5sb2NhbFs2XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwMDBmZjAwKSA+PiA4OworICAgICAgICB0LT5sb2NhbFs3XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwMDAwMGZmKSA+PiAwOworICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSA4OworCisgICAgICAgIGlmIChiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAiYmluZCBmYWlsZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgbmV0c25tcF9hYWw1cHZjX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisjZWxzZSAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICB9IGVsc2UgeworICAgICAgICB0LT5yZW1vdGUgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDgpOworICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB0LT5yZW1vdGVbMF0gPSAoYWRkci0+c2FwX2FkZHIuaXRmICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5yZW1vdGVbMV0gPSAoYWRkci0+c2FwX2FkZHIuaXRmICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5yZW1vdGVbMl0gPSAoYWRkci0+c2FwX2FkZHIudnBpICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5yZW1vdGVbM10gPSAoYWRkci0+c2FwX2FkZHIudnBpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5yZW1vdGVbNF0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHhmZjAwMDAwMCkgPj4gMjQ7CisgICAgICAgIHQtPnJlbW90ZVs1XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwZmYwMDAwKSA+PiAxNjsKKyAgICAgICAgdC0+cmVtb3RlWzZdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDAwMGZmMDApID4+IDg7CisgICAgICAgIHQtPnJlbW90ZVs3XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwMDAwMGZmKSA+PiAwOworICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gODsKKworICAgICAgICBpZiAoY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgImNvbm5lY3QgZmFpbGVkICglcylcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWFsNXB2Y19jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKTsKKyAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtZW1jcHkodC0+ZGF0YSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKTsKKyAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKTsKKworICAgIC8qCisgICAgICogMTYtYml0IGxlbmd0aCBmaWVsZCBpbiB0aGUgdHJhaWxlciwgbm8gaGVhZGVycy4gIAorICAgICAqLworCisgICAgdC0+bXNnTWF4U2l6ZSA9IDB4ZmZmZjsKKyAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF9hYWw1cHZjX3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfYWFsNXB2Y19zZW5kOworICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX2FhbDVwdmNfY2xvc2U7CisgICAgdC0+Zl9hY2NlcHQgICA9IE5VTEw7CisgICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfYWFsNXB2Y19mbXRhZGRyOworCisgICAgcmV0dXJuIHQ7Cit9CisKKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2FhbDVwdmNfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCisJCQkgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2F0bXB2YyBhZGRyOworCisgICAgaWYgKHN0ciA9PSBOVUxMIHx8ICpzdHIgPT0gJ1wwJykKKwlzdHIgPSBkZWZhdWx0X3RhcmdldDsKKworICAgIGlmIChzdHIgIT0gTlVMTCkgeworICAgICAgICBhZGRyLnNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7CisKKyAgICAgICAgaWYgKHNzY2FuZihzdHIsICIlaGQuJWhkLiVkIiwgJihhZGRyLnNhcF9hZGRyLml0ZiksCisgICAgICAgICAgICAgICAgICAgJihhZGRyLnNhcF9hZGRyLnZwaSksICYoYWRkci5zYXBfYWRkci52Y2kpKSA9PSAzKSB7CisgICAgICAgICAgICByZXR1cm4gbmV0c25tcF9hYWw1cHZjX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgICAgICB9IGVsc2UgaWYgKHNzY2FuZihzdHIsICIlaGQuJWQiLCAmKGFkZHIuc2FwX2FkZHIudnBpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJihhZGRyLnNhcF9hZGRyLnZjaSkpID09IDIpIHsKKyAgICAgICAgICAgIGFkZHIuc2FwX2FkZHIuaXRmID0gMDsKKyAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3NjYW5mKHN0ciwgIiVkIiwgJihhZGRyLnNhcF9hZGRyLnZjaSkpID09IDEpIHsKKyAgICAgICAgICAgIGFkZHIuc2FwX2FkZHIuaXRmID0gMDsKKyAgICAgICAgICAgIGFkZHIuc2FwX2FkZHIudnBpID0gMDsKKyAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfYWFsNXB2Y19jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIGFkZHI7CisKKyAgICBpZiAob19sZW4gPT0gOCkgeworICAgICAgICBhZGRyLnNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7CisgICAgICAgIGFkZHIuc2FwX2FkZHIuaXRmID0gKG9bMF0gPDwgOCkgKyAob1sxXSA8PCAwKTsKKyAgICAgICAgYWRkci5zYXBfYWRkci52cGkgPSAob1syXSA8PCA4KSArIChvWzNdIDw8IDApOworICAgICAgICBhZGRyLnNhcF9hZGRyLnZjaSA9CisJICAgIChvWzRdIDw8IDI0KSArIChvWzVdIDw8IDE2KSArIChvWzZdIDw8IDgpICsgKG9bN10gPDwgMCk7CisgICAgICAgIHJldHVybiBuZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworCit2b2lkCituZXRzbm1wX2FhbDVwdmNfY3Rvcih2b2lkKQoreworICAgIGFhbDVwdmNEb21haW4ubmFtZSA9IG5ldHNubXBfQUFMNVBWQ0RvbWFpbjsKKyAgICBhYWw1cHZjRG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfQUFMNVBWQ0RvbWFpbikgLyBzaXplb2Yob2lkKTsKKyAgICBhYWw1cHZjRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDMsIHNpemVvZihjaGFyICopKTsKKyAgICBhYWw1cHZjRG9tYWluLnByZWZpeFswXSA9ICJhYWw1cHZjIjsKKyAgICBhYWw1cHZjRG9tYWluLnByZWZpeFsxXSA9ICJwdmMiOworCisgICAgYWFsNXB2Y0RvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICBhYWw1cHZjRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX2FhbDVwdmNfY3JlYXRlX3RzdHJpbmc7CisgICAgYWFsNXB2Y0RvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF9hYWw1cHZjX2NyZWF0ZV9vc3RyaW5nOworCisgICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZhYWw1cHZjRG9tYWluKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjUwY2FkCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jCkBAIC0wLDAgKzEsMTE2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcEFsaWFzRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorCitvaWQgbmV0c25tcF9zbm1wQUxJQVNEb21haW5bXSA9IHsgMSwzLDYsMSw0LDEsODA3MiwzLDMsNyB9Oworc3RhdGljIG5ldHNubXBfdGRvbWFpbiBhbGlhc0RvbWFpbjsKKworLyogc2ltcGxlIHN0b3JhZ2UgbWVjaGFuaXNtICovCitzdGF0aWMgbmV0c25tcF9kYXRhX2xpc3QgKmFsaWFzX21lbW9yeSA9IE5VTEw7CisKKyNpZmRlZiBIQVZFX0RNQUxMT0NfSAorc3RhdGljIHZvaWQgZnJlZV93cmFwcGVyKHZvaWQgKiBwKQoreworICAgIGZyZWUocCk7Cit9CisjZWxzZQorI2RlZmluZSBmcmVlX3dyYXBwZXIgZnJlZQorI2VuZGlmCisKKy8qIEFuIGFsaWFzIHBhcnNlciAqLwordm9pZAorcGFyc2VfYWxpYXNfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSB7CisgICAgY2hhciBhbGlhc25hbWVbU1BSSU5UX01BWF9MRU5dOworICAgIGNoYXIgdHJhbnNwb3J0ZGVmW1NQUklOVF9NQVhfTEVOXTsKKyAgICAvKiBjb3B5IHRoZSBmaXJzdCB3b3JkICh0aGUgYWxpYXMpIG91dCBhbmQgdGhlbiBhc3N1bWUgdGhlIHJlc3QgaXMKKyAgICAgICB0cmFuc3BvcnQgKi8KKyAgICBsaW5lID0gY29weV9ud29yZChsaW5lLCBhbGlhc25hbWUsIHNpemVvZihhbGlhc25hbWUpKTsKKyAgICBsaW5lID0gY29weV9ud29yZChsaW5lLCB0cmFuc3BvcnRkZWYsIHNpemVvZih0cmFuc3BvcnRkZWYpKTsKKyAgICBpZiAobGluZSkKKyAgICAgICAgY29uZmlnX3BlcnJvcigibW9yZSBkYXRhIHRoYW4gZXhwZWN0ZWQiKTsKKyAgICBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZSgmYWxpYXNfbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdChhbGlhc25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmR1cCh0cmFuc3BvcnRkZWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJlZV93cmFwcGVyKSk7Cit9CisKK3ZvaWQKK2ZyZWVfYWxpYXNfY29uZmlnKHZvaWQpIHsKKyAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShhbGlhc19tZW1vcnkpOworICAgIGFsaWFzX21lbW9yeSA9IE5VTEw7Cit9CisKKy8qCisgKiBPcGVuIGEgQUxJQVMtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZSBsb2NhbAorICogYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgCisgKiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2FsaWFzX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAorCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgY29uc3QgY2hhciAqYWxpYXNkYXRhOworCisgICAgYWxpYXNkYXRhID0gKGNvbnN0IGNoYXIqKW5ldHNubXBfZ2V0X2xpc3RfZGF0YShhbGlhc19tZW1vcnksIHN0cik7CisgICAgaWYgKCFhbGlhc2RhdGEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5vIGFsaWFzIGZvdW5kIGZvciAlc1xuIiwgc3RyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnQoYWxpYXNkYXRhLGxvY2FsLGRlZmF1bHRfdGFyZ2V0KTsKK30KKworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfYWxpYXNfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJtYWtlIG9zdHJpbmdcbiIpOworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkCituZXRzbm1wX2FsaWFzX2N0b3Iodm9pZCkKK3sKKyAgICBhbGlhc0RvbWFpbi5uYW1lID0gbmV0c25tcF9zbm1wQUxJQVNEb21haW47CisgICAgYWxpYXNEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9zbm1wQUxJQVNEb21haW4pIC8gc2l6ZW9mKG9pZCk7CisgICAgYWxpYXNEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIgKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKKyAgICBhbGlhc0RvbWFpbi5wcmVmaXhbMF0gPSAiYWxpYXMiOworCisgICAgYWxpYXNEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7CisgICAgYWxpYXNEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfYWxpYXNfY3JlYXRlX3RzdHJpbmc7CisgICAgYWxpYXNEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfYWxpYXNfY3JlYXRlX29zdHJpbmc7CisKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJmFsaWFzRG9tYWluKTsKKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImFsaWFzIiwgcGFyc2VfYWxpYXNfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfYWxpYXNfY29uZmlnLCAiTkFNRSBUUkFOU1BPUlRfREVGSU5JVElPTiIpOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDE4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmMKQEAgLTAsMCArMSw2MjggQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmZGVmIFdJTjMyCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS93aW5waXBlLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVU5fSAorI2luY2x1ZGUgPHN5cy91bi5oPgorI2VuZGlmCisjaWYgSEFWRV9JT19ICisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorI2lmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaD4KKworI2lmbmRlZiBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4KKyNkZWZpbmUgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOICA1CisjZW5kaWYKKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0NBTExCQUNLX0RPTUFJTgorCitzdGF0aWMgbmV0c25tcF90cmFuc3BvcnRfbGlzdCAqdHJsaXN0ID0gTlVMTDsKKworc3RhdGljIGludCAgICAgIGNhbGxiYWNrX2NvdW50ID0gMDsKKwordHlwZWRlZiBzdHJ1Y3QgY2FsbGJhY2tfaGFja19zIHsKKyAgICB2b2lkICAgICAgICAgICAqb3JpZ190cmFuc3BvcnRfZGF0YTsKKyAgICBuZXRzbm1wX3BkdSAgICAqcGR1OworfSBjYWxsYmFja19oYWNrOworCit0eXBlZGVmIHN0cnVjdCBjYWxsYmFja19xdWV1ZV9zIHsKKyAgICBpbnQgICAgICAgICAgICAgY2FsbGJhY2tfbnVtOworICAgIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqaXRlbTsKKyAgICBzdHJ1Y3QgY2FsbGJhY2tfcXVldWVfcyAqbmV4dCwgKnByZXY7Cit9IGNhbGxiYWNrX3F1ZXVlOworCitjYWxsYmFja19xdWV1ZSAqdGhlcXVldWU7CisKK3N0YXRpYyBuZXRzbm1wX3RyYW5zcG9ydCAqCitmaW5kX3RyYW5zcG9ydF9mcm9tX2NhbGxiYWNrX251bShpbnQgbnVtKQoreworICAgIHN0YXRpYyBuZXRzbm1wX3RyYW5zcG9ydF9saXN0ICpwdHI7CisgICAgZm9yIChwdHIgPSB0cmxpc3Q7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorICAgICAgICBpZiAoKChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgcHRyLT50cmFuc3BvcnQtPmRhdGEpLT4KKyAgICAgICAgICAgIGNhbGxiYWNrX251bSA9PSBudW0pCisgICAgICAgICAgICByZXR1cm4gcHRyLT50cmFuc3BvcnQ7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitjYWxsYmFja19kZWJ1Z19wZHUoY29uc3QgY2hhciAqb3Vyc3RyaW5nLCBuZXRzbm1wX3BkdSAqcGR1KQoreworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmI7CisgICAgaW50ICAgICAgICAgICAgIGkgPSAxOworICAgIERFQlVHTVNHVEwoKG91cnN0cmluZywKKyAgICAgICAgICAgICAgICAiUERVOiBjb21tYW5kID0gJWQsIGVycnN0YXQgPSAlbGQsIGVycmluZGV4ID0gJWxkXG4iLAorICAgICAgICAgICAgICAgIHBkdS0+Y29tbWFuZCwgcGR1LT5lcnJzdGF0LCBwZHUtPmVycmluZGV4KSk7CisgICAgZm9yICh2YiA9IHBkdS0+dmFyaWFibGVzOyB2YjsgdmIgPSB2Yi0+bmV4dF92YXJpYWJsZSkgeworICAgICAgICBERUJVR01TR1RMKChvdXJzdHJpbmcsICIgIHZhciAlZDoiLCBpKyspKTsKKyAgICAgICAgREVCVUdNU0dWQVIoKG91cnN0cmluZywgdmIpKTsKKyAgICAgICAgREVCVUdNU0coKG91cnN0cmluZywgIlxuIikpOworICAgIH0KK30KKwordm9pZAorY2FsbGJhY2tfcHVzaF9xdWV1ZShpbnQgbnVtLCBuZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKml0ZW0pCit7CisgICAgY2FsbGJhY2tfcXVldWUgKm5ld2l0ZW0gPSBTTk1QX01BTExPQ19UWVBFREVGKGNhbGxiYWNrX3F1ZXVlKTsKKyAgICBjYWxsYmFja19xdWV1ZSAqcHRyOworCisgICAgaWYgKG5ld2l0ZW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIG5ld2l0ZW0tPmNhbGxiYWNrX251bSA9IG51bTsKKyAgICBuZXdpdGVtLT5pdGVtID0gaXRlbTsKKyAgICBpZiAodGhlcXVldWUpIHsKKyAgICAgICAgZm9yIChwdHIgPSB0aGVxdWV1ZTsgcHRyICYmIHB0ci0+bmV4dDsgcHRyID0gcHRyLT5uZXh0KSB7CisgICAgICAgIH0KKyAgICAgICAgcHRyLT5uZXh0ID0gbmV3aXRlbTsKKyAgICAgICAgbmV3aXRlbS0+cHJldiA9IHB0cjsKKyAgICB9IGVsc2UgeworICAgICAgICB0aGVxdWV1ZSA9IG5ld2l0ZW07CisgICAgfQorICAgIERFQlVHSUYoImR1bXBfc2VuZF9jYWxsYmFja190cmFuc3BvcnQiKSB7CisgICAgICAgIGNhbGxiYWNrX2RlYnVnX3BkdSgiZHVtcF9zZW5kX2NhbGxiYWNrX3RyYW5zcG9ydCIsIGl0ZW0tPnBkdSk7CisgICAgfQorfQorCituZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKgorY2FsbGJhY2tfcG9wX3F1ZXVlKGludCBudW0pCit7CisgICAgbmV0c25tcF9jYWxsYmFja19wYXNzICpjcDsKKyAgICBjYWxsYmFja19xdWV1ZSAqcHRyOworCisgICAgZm9yIChwdHIgPSB0aGVxdWV1ZTsgcHRyOyBwdHIgPSBwdHItPm5leHQpIHsKKyAgICAgICAgaWYgKHB0ci0+Y2FsbGJhY2tfbnVtID09IG51bSkgeworICAgICAgICAgICAgaWYgKHB0ci0+cHJldikgeworICAgICAgICAgICAgICAgIHB0ci0+cHJldi0+bmV4dCA9IHB0ci0+bmV4dDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhlcXVldWUgPSBwdHItPm5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHRyLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgcHRyLT5uZXh0LT5wcmV2ID0gcHRyLT5wcmV2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3AgPSBwdHItPml0ZW07CisgICAgICAgICAgICBTTk1QX0ZSRUUocHRyKTsKKyAgICAgICAgICAgIERFQlVHSUYoImR1bXBfcmVjdl9jYWxsYmFja190cmFuc3BvcnQiKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tfZGVidWdfcGR1KCJkdW1wX3JlY3ZfY2FsbGJhY2tfdHJhbnNwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3AtPnBkdSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY3A7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgorICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKKyAqLworCitjaGFyICoKK25ldHNubXBfY2FsbGJhY2tfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICBjaGFyIGJ1ZltTUFJJTlRfTUFYX0xFTl07CisgICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteXN0dWZmOworCisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4gc3RyZHVwKCJjYWxsYmFjazogdW5rbm93biIpOworCisgICAgbXlzdHVmZiA9IChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdC0+ZGF0YTsKKworICAgIGlmICghbXlzdHVmZikKKyAgICAgICAgcmV0dXJuIHN0cmR1cCgiY2FsbGJhY2s6IHVua25vd24iKTsKKworICAgIHNucHJpbnRmKGJ1ZiwgU1BSSU5UX01BWF9MRU4sICJjYWxsYmFjazogJWQgb24gZmQgJWQiLAorICAgICAgICAgICAgIG15c3R1ZmYtPmNhbGxiYWNrX251bSwgbXlzdHVmZi0+cGlwZWZkc1swXSk7CisgICAgcmV0dXJuIHN0cmR1cChidWYpOworfQorCisKKworLyoKKyAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAorICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bworICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKKyAqLworCitpbnQKK25ldHNubXBfY2FsbGJhY2tfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKwkJICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworICAgIGNoYXIgbmV3YnVmWzFdOworICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlzdHVmZiA9IChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdC0+ZGF0YTsKKworICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19yZWN2IGVudGVyXG4iKSk7CisKKyAgICB3aGlsZSAocmMgPCAwKSB7CisjaWZkZWYgV0lOMzIKKwlyYyA9IHJlY3Zmcm9tKG15c3R1ZmYtPnBpcGVmZHNbMF0sIG5ld2J1ZiwgMSwgMCwgTlVMTCwgMCk7CisjZWxzZQorCXJjID0gcmVhZChteXN0dWZmLT5waXBlZmRzWzBdLCBuZXdidWYsIDEpOworI2VuZGlmCisJaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmIChyYyA+IDApCisgICAgICAgIG1lbXNldChidWYsIDAsIHJjKTsKKworICAgIGlmIChteXN0dWZmLT5saW5rZWR0bykgeworICAgICAgICAvKgorICAgICAgICAgKiB3ZSdyZSB0aGUgY2xpZW50LiAgV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gCisgICAgICAgICAqLworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG1hbGxvYyB0aGUgc3BhY2UgaGVyZSwgYnV0IGl0J3MgZmlsbGVkIGluIGJ5CisgICAgICAgICAqIHNubXBfY2FsbGJhY2tfY3JlYXRlZF9wZHUoKSBiZWxvdyAKKyAgICAgICAgICovCisgICAgICAgIGludCAgICAgICAgICAgICpyZXR1cm5udW0gPSAoaW50ICopIGNhbGxvYygxLCBzaXplb2YoaW50KSk7CisgICAgICAgICpvcGFxdWUgPSByZXR1cm5udW07CisgICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKGludCk7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19yZWN2IGV4aXRcbiIpKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworCitpbnQKK25ldHNubXBfY2FsbGJhY2tfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKwkJICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCBmcm9tLCByYyA9IC0xOworICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlzdHVmZiA9IChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdC0+ZGF0YTsKKyAgICBuZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKmNwOworCisgICAgLyoKKyAgICAgKiBleHRyYWN0IHRoZSBwZHUgZnJvbSB0aGUgaGFja2VkIGJ1ZmZlciAKKyAgICAgKi8KKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqb3RoZXJfc2lkZTsKKyAgICBjYWxsYmFja19oYWNrICAqY2ggPSAoY2FsbGJhY2tfaGFjayAqKSAqIG9wYXF1ZTsKKyAgICBuZXRzbm1wX3BkdSAgICAqcGR1ID0gY2gtPnBkdTsKKyAgICAqb3BhcXVlID0gY2gtPm9yaWdfdHJhbnNwb3J0X2RhdGE7CisgICAgU05NUF9GUkVFKGNoKTsKKworICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19zZW5kIGVudGVyXG4iKSk7CisKKyAgICBjcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9jYWxsYmFja19wYXNzKTsKKyAgICBpZiAoIWNwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBjcC0+cGR1ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKKyAgICBpZiAoY3AtPnBkdS0+dHJhbnNwb3J0X2RhdGEpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90IG5lZWRlZCBhbmQgbm90IHByb3Blcmx5IGZyZWVkIGxhdGVyIAorICAgICAgICAgKi8KKyAgICAgICAgU05NUF9GUkVFKGNwLT5wZHUtPnRyYW5zcG9ydF9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoY3AtPnBkdS0+ZmxhZ3MgJiBVQ0RfTVNHX0ZMQUdfRVhQRUNUX1JFU1BPTlNFKQorICAgICAgICBjcC0+cGR1LT5mbGFncyBePSBVQ0RfTVNHX0ZMQUdfRVhQRUNUX1JFU1BPTlNFOworCisgICAgLyoKKyAgICAgKiBwdXNoIHRoZSBzZW50IHBkdSBvbnRvIHRoZSBzdGFjayAKKyAgICAgKi8KKyAgICAvKgorICAgICAqIEFORCBzZW5kIGEgYm9ndXMgYnl0ZSB0byB0aGUgcmVtb3RlIGNhbGxiYWNrIHJlY2VpdmVyJ3MgcGlwZSAKKyAgICAgKi8KKyAgICBpZiAobXlzdHVmZi0+bGlua2VkdG8pIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogd2UncmUgdGhlIGNsaWVudCwgc2VuZCBpdCB0byB0aGUgcGFyZW50IAorICAgICAgICAgKi8KKyAgICAgICAgY3AtPnJldHVybl90cmFuc3BvcnRfbnVtID0gbXlzdHVmZi0+Y2FsbGJhY2tfbnVtOworCisgICAgICAgIG90aGVyX3NpZGUgPSBmaW5kX3RyYW5zcG9ydF9mcm9tX2NhbGxiYWNrX251bShteXN0dWZmLT5saW5rZWR0byk7CisgICAgICAgIGlmICghb3RoZXJfc2lkZSkgeworICAgICAgICAgICAgc25tcF9mcmVlX3BkdShjcC0+cGR1KTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShjcCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworCXdoaWxlIChyYyA8IDApIHsKKyNpZmRlZiBXSU4zMgorCSAgICByYyA9IHNlbmR0bygoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyopIG90aGVyX3NpZGUtPmRhdGEpLT5waXBlZmRzWzFdLCAiICIsIDEsIDAsIE5VTEwsIDApOworI2Vsc2UKKwkgICAgcmMgPSB3cml0ZSgoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKW90aGVyX3NpZGUtPmRhdGEpLT5waXBlZmRzWzFdLAorCQkgICAgICAgIiAiLCAxKTsKKyNlbmRpZgorCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgICAgICBjYWxsYmFja19wdXNoX3F1ZXVlKG15c3R1ZmYtPmxpbmtlZHRvLCBjcCk7CisgICAgICAgIC8qCisgICAgICAgICAqIHdlIGRvbid0IG5lZWQgdGhlIHRyYW5zcG9ydCBkYXRhIGFueSBtb3JlIAorICAgICAgICAgKi8KKyAgICAgICAgU05NUF9GUkVFKCpvcGFxdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHdlJ3JlIHRoZSBzZXJ2ZXIsIHNlbmQgaXQgdG8gdGhlIHBlcnNvbiB0aGF0IHNlbnQgdXMgdGhlIHJlcXVlc3QgCisgICAgICAgICAqLworICAgICAgICBmcm9tID0gKiooKGludCAqKikgb3BhcXVlKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogd2UgZG9uJ3QgbmVlZCB0aGUgdHJhbnNwb3J0IGRhdGEgYW55IG1vcmUgCisgICAgICAgICAqLworICAgICAgICBTTk1QX0ZSRUUoKm9wYXF1ZSk7CisgICAgICAgIG90aGVyX3NpZGUgPSBmaW5kX3RyYW5zcG9ydF9mcm9tX2NhbGxiYWNrX251bShmcm9tKTsKKyAgICAgICAgaWYgKCFvdGhlcl9zaWRlKSB7CisgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KGNwLT5wZHUpOworICAgICAgICAgICAgU05NUF9GUkVFKGNwKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCXdoaWxlIChyYyA8IDApIHsKKyNpZmRlZiBXSU4zMgorCSAgICByYyA9IHNlbmR0bygoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyopIG90aGVyX3NpZGUtPmRhdGEpLT5waXBlZmRzWzFdLCAiICIsIDEsIDAsIE5VTEwsIDApOworI2Vsc2UKKwkgICAgcmMgPSB3cml0ZSgoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKW90aGVyX3NpZGUtPmRhdGEpLT5waXBlZmRzWzFdLAorCQkgICAgICAgIiAiLCAxKTsKKyNlbmRpZgorCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgICAgICBjYWxsYmFja19wdXNoX3F1ZXVlKGZyb20sIGNwKTsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfc2VuZCBleGl0XG4iKSk7CisgICAgcmV0dXJuIDA7Cit9CisKKworCitpbnQKK25ldHNubXBfY2FsbGJhY2tfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlzdHVmZiA9IChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdC0+ZGF0YTsKKyAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfY2xvc2UgZW50ZXJcbiIpKTsKKworI2lmZGVmIFdJTjMyCisgICAgcmMgID0gY2xvc2Vzb2NrZXQobXlzdHVmZi0+cGlwZWZkc1swXSk7CisgICAgcmMgfD0gY2xvc2Vzb2NrZXQobXlzdHVmZi0+cGlwZWZkc1sxXSk7CisjZWxzZQorICAgIHJjICA9IGNsb3NlKG15c3R1ZmYtPnBpcGVmZHNbMF0pOworICAgIHJjIHw9IGNsb3NlKG15c3R1ZmYtPnBpcGVmZHNbMV0pOworI2VuZGlmCisKKyAgICByYyB8PSBuZXRzbm1wX3RyYW5zcG9ydF9yZW1vdmVfZnJvbV9saXN0KCZ0cmxpc3QsIHQpOworCisgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2Nsb3NlIGV4aXRcbiIpKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworCitpbnQKK25ldHNubXBfY2FsbGJhY2tfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19hY2NlcHQgZW50ZXJcbiIpKTsKKyAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfYWNjZXB0IGV4aXRcbiIpKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKworCisvKgorICogT3BlbiBhIENhbGxiYWNrLWRvbWFpbiB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIKKyAqIGlzIHRoZSBsb2NhbCBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlCisgKiBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvCisgKiAoYW5kIHdlIG1ha2UgdXAgYSB0ZW1wb3JhcnkgbmFtZSBmb3IgdGhlIGxvY2FsIGVuZCBvZiB0aGUKKyAqIGNvbm5lY3Rpb24pLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF9jYWxsYmFja190cmFuc3BvcnQoaW50IHRvKQoreworCisgICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOworICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlkYXRhOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIC8qCisgICAgICogdHJhbnNwb3J0IAorICAgICAqLworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAoIXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiBvdXIgc3R1ZmYgCisgICAgICovCisgICAgbXlkYXRhID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2NhbGxiYWNrX2luZm8pOworICAgIGlmICghbXlkYXRhKSB7CisgICAgICAgIFNOTVBfRlJFRSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG15ZGF0YS0+bGlua2VkdG8gPSB0bzsKKyAgICBteWRhdGEtPmNhbGxiYWNrX251bSA9ICsrY2FsbGJhY2tfY291bnQ7CisgICAgbXlkYXRhLT5kYXRhID0gTlVMTDsKKyAgICB0LT5kYXRhID0gbXlkYXRhOworCisjaWZkZWYgV0lOMzIKKyAgICByYyA9IGNyZWF0ZV93aW5waXBlX3RyYW5zcG9ydChteWRhdGEtPnBpcGVmZHMpOworI2Vsc2UKKyAgICByYyA9IHBpcGUobXlkYXRhLT5waXBlZmRzKTsKKyNlbmRpZgorICAgIHQtPnNvY2sgPSBteWRhdGEtPnBpcGVmZHNbMF07CisKKyAgICBpZiAocmMpIHsKKyAgICAgICAgU05NUF9GUkVFKG15ZGF0YSk7CisgICAgICAgIFNOTVBfRlJFRSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdC0+Zl9yZWN2ICAgID0gbmV0c25tcF9jYWxsYmFja19yZWN2OworICAgIHQtPmZfc2VuZCAgICA9IG5ldHNubXBfY2FsbGJhY2tfc2VuZDsKKyAgICB0LT5mX2Nsb3NlICAgPSBuZXRzbm1wX2NhbGxiYWNrX2Nsb3NlOworICAgIHQtPmZfYWNjZXB0ICA9IG5ldHNubXBfY2FsbGJhY2tfYWNjZXB0OworICAgIHQtPmZfZm10YWRkciA9IG5ldHNubXBfY2FsbGJhY2tfZm10YWRkcjsKKworICAgIG5ldHNubXBfdHJhbnNwb3J0X2FkZF90b19saXN0KCZ0cmxpc3QsIHQpOworCisgICAgaWYgKHRvKQorICAgICAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImluaXRpYWxpemVkICVkIGxpbmtlZCB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbXlkYXRhLT5jYWxsYmFja19udW0sIHRvKSk7CisgICAgZWxzZQorICAgICAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemVkIG1hc3RlciBsaXN0ZW5pbmcgb24gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIG15ZGF0YS0+Y2FsbGJhY2tfbnVtKSk7CisgICAgcmV0dXJuIHQ7Cit9CisKK2ludAorbmV0c25tcF9jYWxsYmFja19ob29rX3BhcnNlKG5ldHNubXBfc2Vzc2lvbiAqIHNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogcGFja2V0cHRyLCBzaXplX3QgbGVuKQoreworICAgIGlmIChTTk1QX01TR19SRVNQT05TRSA9PSBwZHUtPmNvbW1hbmQgfHwKKyAgICAgICAgU05NUF9NU0dfUkVQT1JUID09IHBkdS0+Y29tbWFuZCkKKyAgICAgICAgcGR1LT5mbGFncyB8PSBVQ0RfTVNHX0ZMQUdfUkVTUE9OU0VfUERVOworICAgIGVsc2UKKyAgICAgICAgcGR1LT5mbGFncyAmPSAoflVDRF9NU0dfRkxBR19SRVNQT05TRV9QRFUpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK2ludAorbmV0c25tcF9jYWxsYmFja19ob29rX2J1aWxkKG5ldHNubXBfc2Vzc2lvbiAqIHNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIHB0aywgc2l6ZV90ICogbGVuKQoreworICAgIC8qCisgICAgICogdmVyeSBncm9zcyBoYWNrLCBhcyB0aGlzIGlzIHBhc3NlZCBsYXRlciB0byB0aGUgdHJhbnNwb3J0X3NlbmQKKyAgICAgKiBmdW5jdGlvbiAKKyAgICAgKi8KKyAgICBjYWxsYmFja19oYWNrICAqY2ggPSBTTk1QX01BTExPQ19UWVBFREVGKGNhbGxiYWNrX2hhY2spOworICAgIGlmIChjaCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2J1aWxkIGVudGVyXG4iKSk7CisgICAgY2gtPnBkdSA9IHBkdTsKKyAgICBjaC0+b3JpZ190cmFuc3BvcnRfZGF0YSA9IHBkdS0+dHJhbnNwb3J0X2RhdGE7CisgICAgcGR1LT50cmFuc3BvcnRfZGF0YSA9IGNoOworICAgIHN3aXRjaCAocGR1LT5jb21tYW5kKSB7CisgICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgorICAgICAgICBpZiAocGR1LT5tYXhfcmVwZXRpdGlvbnMgPCAwKSB7CisgICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfUkVQRVRJVElPTlM7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBkdS0+bm9uX3JlcGVhdGVycyA8IDApIHsKKyAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9SRVBFQVRFUlM7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTTk1QX01TR19SRVNQT05TRToKKyAgICBjYXNlIFNOTVBfTVNHX1RSQVA6CisgICAgY2FzZSBTTk1QX01TR19UUkFQMjoKKyAgICAgICAgcGR1LT5mbGFncyAmPSAoflVDRF9NU0dfRkxBR19FWFBFQ1RfUkVTUE9OU0UpOworICAgICAgICAvKgorICAgICAgICAgKiBGYWxsdGhyb3VnaAorICAgICAgICAgKi8KKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAocGR1LT5lcnJzdGF0ID09IFNOTVBfREVGQVVMVF9FUlJTVEFUKQorICAgICAgICAgICAgcGR1LT5lcnJzdGF0ID0gMDsKKyAgICAgICAgaWYgKHBkdS0+ZXJyaW5kZXggPT0gU05NUF9ERUZBVUxUX0VSUklOREVYKQorICAgICAgICAgICAgcGR1LT5lcnJpbmRleCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qCisgICAgICogQ29weSBtaXNzaW5nIHZhbHVlcyBmcm9tIHNlc3Npb24gZGVmYXVsdHMKKyAgICAgKi8KKyAgICBzd2l0Y2ggKHBkdS0+dmVyc2lvbikgeworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisgICAgY2FzZSBTTk1QX1ZFUlNJT05fMToKKyNlbmRpZgorI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworICAgIGNhc2UgU05NUF9WRVJTSU9OXzJjOgorI2VuZGlmCisjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCisgICAgICAgIGlmIChwZHUtPmNvbW11bml0eV9sZW4gPT0gMCkgeworICAgICAgICAgICAgaWYgKHNwLT5jb21tdW5pdHlfbGVuID09IDApIHsKKyAgICAgICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfQ09NTVVOSVRZOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBkdS0+Y29tbXVuaXR5ID0gKHVfY2hhciAqKSBtYWxsb2Moc3AtPmNvbW11bml0eV9sZW4pOworICAgICAgICAgICAgaWYgKHBkdS0+Y29tbXVuaXR5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9NQUxMT0M7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtbW92ZShwZHUtPmNvbW11bml0eSwKKyAgICAgICAgICAgICAgICAgICAgc3AtPmNvbW11bml0eSwgc3AtPmNvbW11bml0eV9sZW4pOworICAgICAgICAgICAgcGR1LT5jb21tdW5pdHlfbGVuID0gc3AtPmNvbW11bml0eV9sZW47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIFNOTVBfVkVSU0lPTl8zOgorICAgICAgICBpZiAocGR1LT5zZWN1cml0eU5hbWVMZW4gPT0gMCkgeworCSAgcGR1LT5zZWN1cml0eU5hbWUgPSAoY2hhciAqKW1hbGxvYyhzcC0+c2VjdXJpdHlOYW1lTGVuKTsKKyAgICAgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgc3AtPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfTUFMTE9DOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbW1vdmUocGR1LT5zZWN1cml0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICBzcC0+c2VjdXJpdHlOYW1lLCBzcC0+c2VjdXJpdHlOYW1lTGVuKTsKKyAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lTGVuID0gc3AtPnNlY3VyaXR5TmFtZUxlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGR1LT5zZWN1cml0eU1vZGVsID09IC0xKQorICAgICAgICAgICAgcGR1LT5zZWN1cml0eU1vZGVsID0gc3AtPnNlY3VyaXR5TW9kZWw7CisgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TGV2ZWwgPT0gMCkKKyAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlMZXZlbCA9IHNwLT5zZWN1cml0eUxldmVsOworICAgICAgICAvKiBXSEFUIEVMU0UgPz8gKi8KKyAgICB9CisgICAgcHRrWzBdID0gMDsKKyAgICAqbGVuID0gMTsKKyAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfYnVpbGQgZXhpdFxuIikpOworICAgIHJldHVybiAxOworfQorCitpbnQKK25ldHNubXBfY2FsbGJhY2tfY2hlY2tfcGFja2V0KHVfY2hhciAqIHBrdCwgc2l6ZV90IGxlbikKK3sKKyAgICByZXR1cm4gMTsKK30KKworbmV0c25tcF9wZHUgICAgKgorbmV0c25tcF9jYWxsYmFja19jcmVhdGVfcGR1KG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3BhcXVlLCBzaXplX3Qgb2xlbmd0aCkKK3sKKyAgICBuZXRzbm1wX3BkdSAgICAqcGR1OworICAgIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqY3AgPQorICAgICAgICBjYWxsYmFja19wb3BfcXVldWUoKChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdHJhbnNwb3J0LT5kYXRhKS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19udW0pOworICAgIGlmICghY3ApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHBkdSA9IGNwLT5wZHU7CisgICAgcGR1LT50cmFuc3BvcnRfZGF0YSA9IG9wYXF1ZTsKKyAgICBwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCA9IG9sZW5ndGg7CisgICAgaWYgKG9wYXF1ZSkgICAgICAgICAgICAgICAgIC8qIGlmIGNyZWF0ZWQsIHdlJ3JlIHRoZSBzZXJ2ZXIgKi8KKyAgICAgICAgKigoaW50ICopIG9wYXF1ZSkgPSBjcC0+cmV0dXJuX3RyYW5zcG9ydF9udW07CisgICAgU05NUF9GUkVFKGNwKTsKKyAgICByZXR1cm4gcGR1OworfQorCituZXRzbm1wX3Nlc3Npb24gKgorbmV0c25tcF9jYWxsYmFja19vcGVuKGludCBhdHRhY2hfdG8sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqcmV0dXJuX2Z1bmMpIChpbnQgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcWlkLCBuZXRzbm1wX3BkdSAqcGR1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbWFnaWMpLAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCBpbnQpLAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwb3N0X3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfcGR1ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKQoreworICAgIG5ldHNubXBfc2Vzc2lvbiBjYWxsYmFja19zZXNzLCAqY2FsbGJhY2tfc3M7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKmNhbGxiYWNrX3RyOworCisgICAgY2FsbGJhY2tfdHIgPSBuZXRzbm1wX2NhbGxiYWNrX3RyYW5zcG9ydChhdHRhY2hfdG8pOworICAgIHNubXBfc2Vzc19pbml0KCZjYWxsYmFja19zZXNzKTsKKyAgICBjYWxsYmFja19zZXNzLmNhbGxiYWNrID0gcmV0dXJuX2Z1bmM7CisgICAgaWYgKGF0dGFjaF90bykgeworICAgICAgICAvKgorICAgICAgICAgKiBjbGllbnQgCisgICAgICAgICAqLworICAgICAgICAvKgorICAgICAgICAgKiB0cnlzZXNzLmNvbW11bml0eSA9ICh1X2NoYXIgKikgY2FsbGJhY2tfc3M7IAorICAgICAgICAgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsYmFja19zZXNzLmlzQXV0aG9yaXRhdGl2ZSA9IFNOTVBfU0VTU19BVVRIT1JJVEFUSVZFOworICAgIH0KKyAgICBjYWxsYmFja19zZXNzLnJlbW90ZV9wb3J0ID0gMDsKKyAgICBjYWxsYmFja19zZXNzLnJldHJpZXMgPSAwOworICAgIGNhbGxiYWNrX3Nlc3MudGltZW91dCA9IDMwMDAwMDAwOworICAgIGNhbGxiYWNrX3Nlc3MudmVyc2lvbiA9IFNOTVBfREVGQVVMVF9WRVJTSU9OOyAgICAgICAvKiAobW9zdGx5KSBib2d1cyAqLworICAgIGNhbGxiYWNrX3NzID0gc25tcF9hZGRfZnVsbCgmY2FsbGJhY2tfc2VzcywgY2FsbGJhY2tfdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmVfcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfaG9va19wYXJzZSwgZnBvc3RfcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfaG9va19idWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19jaGVja19wYWNrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfY3JlYXRlX3BkdSk7CisgICAgaWYgKGNhbGxiYWNrX3NzKQorICAgICAgICBjYWxsYmFja19zcy0+bG9jYWxfcG9ydCA9CisgICAgICAgICAgICAoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSBjYWxsYmFja190ci0+ZGF0YSktPmNhbGxiYWNrX251bTsKKyAgICByZXR1cm4gY2FsbGJhY2tfc3M7Cit9CisKKworCit2b2lkCituZXRzbm1wX2NsZWFyX2NhbGxiYWNrX2xpc3Qodm9pZCkKK3sKKworICAgIG5ldHNubXBfdHJhbnNwb3J0X2xpc3QgKmxpc3QgPSB0cmxpc3QsICpuZXh0ID0gTlVMTDsKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHIgPSBOVUxMOworCisgICAgREVCVUdNU0dUTCgoImNhbGxiYWNrX2NsZWFyIiwgImNhbGxlZCBuZXRzbm1wX2NhbGxiYWNrX2NsZWFyX2xpc3QoKVxuIikpOworICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsKKwluZXh0ID0gbGlzdC0+bmV4dDsKKwl0ciA9IGxpc3QtPnRyYW5zcG9ydDsKKworCWlmICh0ciAhPSBOVUxMKSB7CisJICAgIHRyLT5mX2Nsb3NlKHRyKTsKKyAgCSAgICBuZXRzbm1wX3RyYW5zcG9ydF9yZW1vdmVfZnJvbV9saXN0KCZ0cmxpc3QsIHRyKTsKKwkgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0cik7CisJfQorCWxpc3QgPSBuZXh0OworICAgIH0KKyAgICB0cmxpc3QgPSBOVUxMOworCit9CisKKyNlbmRpZiAvKiBORVRTTk1QX1RSQU5TUE9SVF9DQUxMQkFDS19ET01BSU4gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkYzc2NwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jCkBAIC0wLDAgKzEsMTc4OCBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IENvcHlyaWdodCAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKy8qIAorICogU2VlIHRoZSBmb2xsb3dpbmcgd2ViIHBhZ2VzIGZvciB1c2VmdWwgZG9jdW1lbnRhdGlvbiBvbiB0aGlzIHRyYW5zcG9ydDoKKyAqIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL1RVVDpVc2luZ19UTFMKKyAqIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL1VzaW5nX0RUTFMKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpZmRlZiBIQVZFX0xJQlNTTF9EVExTCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjZXJ0X3V0aWwpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzb2NrYWRkcl9zaXplKQorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1VJT19ICisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KKworI2luY2x1ZGUgIm9wZW5zc2wvYmlvLmgiCisjaW5jbHVkZSAib3BlbnNzbC9zc2wuaCIKKyNpbmNsdWRlICJvcGVuc3NsL2Vyci5oIgorI2luY2x1ZGUgIm9wZW5zc2wvcmFuZC5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmg+CisKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUJLTEKKyNlbmRpZgorCisjZGVmaW5lIFdFX0FSRV9TRVJWRVIgMAorI2RlZmluZSBXRV9BUkVfQ0xJRU5UIDEKKworb2lkICAgICAgICAgICAgIG5ldHNubXBEVExTVURQRG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fRFRMU19VRFBfSVAgfTsKK3NpemVfdCAgICAgICAgICBuZXRzbm1wRFRMU1VEUERvbWFpbl9sZW4gPSBPSURfTEVOR1RIKG5ldHNubXBEVExTVURQRG9tYWluKTsKKworc3RhdGljIG5ldHNubXBfdGRvbWFpbiBkdGxzdWRwRG9tYWluOworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCitzdGF0aWMgaW50IG9wZW5zc2xfYWRkcl9pbmRleDYgPSAwOworI2VuZGlmCisKKy8qIHRoaXMgc3RvcmVzIG9wZW5zc2wgY3JlZGVudGlhbHMgZm9yIGVhY2ggY29ubmVjdGlvbiBzaW5jZSBvcGVuc3NsCisgICBjYW4ndCBkbyBpdCBmb3IgdXMgYXQgdGhlIG1vbWVudDsgaG9wZWZ1bGx5IGZ1dHVyZSB2ZXJzaW9ucyB3aWxsCisgICBjaGFuZ2UgKi8KK3R5cGVkZWYgc3RydWN0IGJpb19jYWNoZV9zIHsKKyAgIEJJTyAqcmVhZF9iaW87ICAvKiBPcGVuU1NMIHdpbGwgcmVhZCBpdHMgaW5jb21pbmcgU1NMIHBhY2tldHMgZnJvbSBoZXJlICovCisgICBCSU8gKndyaXRlX2JpbzsgLyogT3BlblNTTCB3aWxsIHdyaXRlIGl0cyBvdXRnb2luZyBTU0wgcGFja2V0cyB0byBoZXJlICovCisgICBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2Ugc2FzOworICAgdV9pbnQgZmxhZ3M7CisgICBzdHJ1Y3QgYmlvX2NhY2hlX3MgKm5leHQ7CisgICBpbnQgbXNnbnVtOworICAgY2hhciAqd3JpdGVfY2FjaGU7CisgICBzaXplX3Qgd3JpdGVfY2FjaGVfbGVuOworICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKK30gYmlvX2NhY2hlOworCisvKiogYmlvX2NhY2hlIGZsYWdzICovCisjZGVmaW5lIE5FVFNOTVBfQklPX0hBVkVfQ09PS0lFICAgICAgICAweDAwMDEgLyogdmVyaWZpZWQgY29va2llICovCisjZGVmaW5lIE5FVFNOTVBfQklPX0NPTk5FQ1RFRCAgICAgICAgICAweDAwMDIgLyogcmVjaWV2ZWQgZGVjb2RlZCBkYXRhICovCisjZGVmaW5lIE5FVFNOTVBfQklPX0RJU0NPTk5FQ1RFRCAgICAgICAweDAwMDQgLyogcGVlciBzaHV0ZG93biAqLworCitzdGF0aWMgYmlvX2NhY2hlICpiaW9jYWNoZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQgb3BlbnNzbF9hZGRyX2luZGV4ID0gMDsKKworc3RhdGljIGludCBuZXRzbm1wX2R0bHNfdmVyaWZ5X2Nvb2tpZShTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29va2llX2xlbik7CitzdGF0aWMgaW50IG5ldHNubXBfZHRsc19nZW5fY29va2llKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICpjb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqY29va2llX2xlbik7CisKKy8qIHRoaXMgc3RvcmVzIHJlbW90ZSBjb25uZWN0aW9ucyBpbiBhIGxpc3QgdG8gc2VhcmNoIHRocm91Z2ggKi8KKy8qIFhYWDogb3B0aW1pemUgZm9yIHNlYXJjaGluZyAqLworLyogWFhYOiBoYW5kbGUgc3RhdGUgaXNzdWVzIGZvciBuZXcgY29ubmVjdGlvbnMgdG8gcmVkdWNlIERPUyBpc3N1ZXMgKi8KKy8qICAgICAgKFRMUyBzaG91bGQgZG8gdGhpcywgYnV0IG9wZW5zc2wgY2FuJ3QgZG8gbW9yZSB0aGFuIG9uZSBjdHggcGVyIHNvY2sgKi8KKy8qIFhYWDogcHV0IGEgdGltZXIgb24gdGhlIGNhY2hlIGZvciBleHBpcmFyeSBwdXJwb3NlcyAqLworc3RhdGljIGJpb19jYWNoZSAqZmluZF9iaW9fY2FjaGUobmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlICpmcm9tX2FkZHIpIHsKKyAgICBiaW9fY2FjaGUgKmNhY2hlcCA9IE5VTEw7CisgICAgCisgICAgZm9yKGNhY2hlcCA9IGJpb2NhY2hlOyBjYWNoZXA7IGNhY2hlcCA9IGNhY2hlcC0+bmV4dCkgeworCisgICAgICAgIGlmIChjYWNoZXAtPnNhcy5zYS5zYV9mYW1pbHkgIT0gZnJvbV9hZGRyLT5zYS5zYV9mYW1pbHkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoKGZyb21fYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisgICAgICAgICAgICAoKGNhY2hlcC0+c2FzLnNpbi5zaW5fYWRkci5zX2FkZHIgIT0KKyAgICAgICAgICAgICAgZnJvbV9hZGRyLT5zaW4uc2luX2FkZHIuc19hZGRyKSB8fAorICAgICAgICAgICAgIChjYWNoZXAtPnNhcy5zaW4uc2luX3BvcnQgIT0gZnJvbV9hZGRyLT5zaW4uc2luX3BvcnQpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgICAgICBlbHNlIGlmICgoZnJvbV9hZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCisgICAgICAgICAgICAgICAgICgoY2FjaGVwLT5zYXMuc2luNi5zaW42X3BvcnQgIT0gZnJvbV9hZGRyLT5zaW42LnNpbjZfcG9ydCkgfHwKKyAgICAgICAgICAgICAgICAgIChjYWNoZXAtPnNhcy5zaW42LnNpbjZfc2NvcGVfaWQgIT0KKyAgICAgICAgICAgICAgICAgICBmcm9tX2FkZHItPnNpbjYuc2luNl9zY29wZV9pZCkgfHwKKyAgICAgICAgICAgICAgICAgIChtZW1jbXAoY2FjaGVwLT5zYXMuc2luNi5zaW42X2FkZHIuczZfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9hZGRyLT5zaW42LnNpbjZfYWRkci5zNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZnJvbV9hZGRyLT5zaW42LnNpbjZfYWRkci5zNl9hZGRyKSkgIT0gMCkpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgLyogZm91bmQgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiAqLworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlcDsKK30KKworLyogcmVtb3ZlcyBhIHNpbmdsZSBjYWNoZSBlbnRyeSBhbmQgcmV0dXJucyBTVUNDRVNTIG9uIGZpbmRpbmcgYW5kCisgICByZW1vdmluZyBpdC4gKi8KK3N0YXRpYyBpbnQgcmVtb3ZlX2Jpb19jYWNoZShiaW9fY2FjaGUgKnRoaXNjYWNoZSkgeworICAgIGJpb19jYWNoZSAqY2FjaGVwID0gTlVMTCwgKnByZXZjYWNoZSA9IE5VTEw7CisgICAgY2FjaGVwID0gYmlvY2FjaGU7CisgICAgd2hpbGUoY2FjaGVwKSB7CisgICAgICAgIGlmIChjYWNoZXAgPT0gdGhpc2NhY2hlKSB7CisKKyAgICAgICAgICAgIC8qIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0ICovCisgICAgICAgICAgICBpZiAoTlVMTCA9PSBwcmV2Y2FjaGUpIHsKKyAgICAgICAgICAgICAgICAvKiBhdCB0aGUgZmlyc3QgY2FjaGUgaW4gdGhlIGxpc3QgKi8KKyAgICAgICAgICAgICAgICBiaW9jYWNoZSA9IHRoaXNjYWNoZS0+bmV4dDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJldmNhY2hlLT5uZXh0ID0gdGhpc2NhY2hlLT5uZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgICAgICB9CisgICAgICAgIHByZXZjYWNoZSA9IGNhY2hlcDsKKyAgICAgICAgY2FjaGVwID0gY2FjaGVwLT5uZXh0OworICAgIH0KKyAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Cit9CisKKy8qIGZyZWVzIHRoZSBjb250ZW50cyBvZiBhIGJpb19jYWNoZSAqLworc3RhdGljIHZvaWQgZnJlZV9iaW9fY2FjaGUoYmlvX2NhY2hlICpjYWNoZXApIHsKKy8qIFRoZXNlIGFyZSBmcmVlZCBieSB0aGUgU1NMX2ZyZWUoKSBjYWxsICovCisvKgorICAgICAgICBCSU9fZnJlZShjYWNoZXAtPnJlYWRfYmlvKTsKKyAgICAgICAgQklPX2ZyZWUoY2FjaGVwLT53cml0ZV9iaW8pOworKi8KKyAgICBERUJVR01TR1RMKCgiOTpkdGxzdWRwOmJpb19jYWNoZSIsICJyZWxlYXNpbmcgJXBcbiIsIGNhY2hlcCkpOworICAgICAgICBTTk1QX0ZSRUUoY2FjaGVwLT53cml0ZV9jYWNoZSk7CisgICAgICAgIG5ldHNubXBfdGxzYmFzZV9mcmVlX3Rsc2RhdGEoY2FjaGVwLT50bHNkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2FuZF9mcmVlX2Jpb19jYWNoZShiaW9fY2FjaGUgKmNhY2hlcCkgeworICAgIC8qKiBubyBkZWJ1ZywgcmVtb3ZlX2Jpb19jYWNoZSBkb2VzIGl0ICovCisgICAgcmVtb3ZlX2Jpb19jYWNoZShjYWNoZXApOworICAgIGZyZWVfYmlvX2NhY2hlKGNhY2hlcCk7Cit9CisKKworLyogWFhYOiBsb3RzIG9mIG1hbGxvYy9zdGF0ZSBjbGVhbnVwIG5lZWRlZCAqLworI2RlZmluZSBESUVIRVJFKG1zZykgZG8geyBzbm1wX2xvZyhMT0dfRVJSLCAiJXNcbiIsIG1zZyk7IHJldHVybiBOVUxMOyB9IHdoaWxlKDApCisKK3N0YXRpYyBiaW9fY2FjaGUgKgorc3RhcnRfbmV3X2NhY2hlZF9jb25uZWN0aW9uKG5ldHNubXBfdHJhbnNwb3J0ICp0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSAqcmVtb3RlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlX2FyZV9jbGllbnQpIHsKKyAgICBiaW9fY2FjaGUgKmNhY2hlcCA9IE5VTEw7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKworICAgIERFQlVHVFJBQ0VUT0soIjk6ZHRsc3VkcCIpOworCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjMuMSwgc3RlcCAxOgorICAgICAgIDEpICBUaGUgc25tcFRsc3RtU2Vzc2lvbk9wZW5zIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQuCisgICAgKi8KKyAgICBpZiAod2VfYXJlX2NsaWVudCkKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5TKTsKKworICAgIGlmICghdC0+c29jaykKKyAgICAgICAgRElFSEVSRSgibm8gc29ja2V0IHBhc3NlZCBpbiB0byBzdGFydF9uZXdfY2FjaGVkX2Nvbm5lY3Rpb25cbiIpOworICAgIGlmICghcmVtb3RlX2FkZHIpCisgICAgICAgIERJRUhFUkUoIm5vIHJlbW90ZV9hZGRyIHBhc3NlZCBpbiB0byBzdGFydF9uZXdfY2FjaGVkX2Nvbm5lY3Rpb25cbiIpOworICAgICAgICAKKyAgICBjYWNoZXAgPSBTTk1QX01BTExPQ19UWVBFREVGKGJpb19jYWNoZSk7CisgICAgaWYgKCFjYWNoZXApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIC8qIGFsbG9jYXRlIG91ciBUTFMgc3BlY2lmaWMgZGF0YSAqLworICAgIGlmIChOVUxMID09ICh0bHNkYXRhID0gbmV0c25tcF90bHNiYXNlX2FsbG9jYXRlX3Rsc2RhdGEodCwgIXdlX2FyZV9jbGllbnQpKSkgeworICAgICAgICBTTk1QX0ZSRUUoY2FjaGVwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNhY2hlcC0+dGxzZGF0YSA9IHRsc2RhdGE7CisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMy4xLCBzdGVwIDE6CisgICAgICAgMikgIFRoZSBjbGllbnQgc2VsZWN0cyB0aGUgYXBwcm9wcmlhdGUgY2VydGlmaWNhdGUgYW5kIGNpcGhlcl9zdWl0ZXMKKyAgICAgICAgICAgZm9yIHRoZSBrZXkgYWdyZWVtZW50IGJhc2VkIG9uIHRoZSB0bVNlY3VyaXR5TmFtZSBhbmQgdGhlCisgICAgICAgICAgIHRtUmVxdWVzdGVkU2VjdXJpdHlMZXZlbCBmb3IgdGhlIHNlc3Npb24uICBGb3Igc2Vzc2lvbnMgYmVpbmcKKyAgICAgICAgICAgZXN0YWJsaXNoZWQgYXMgYSByZXN1bHQgb2YgYSBTTk1QLVRBUkdFVC1NSUIgYmFzZWQgb3BlcmF0aW9uLCB0aGUKKyAgICAgICAgICAgY2VydGlmaWNhdGUgd2lsbCBwb3RlbnRpYWxseSBoYXZlIGJlZW4gaWRlbnRpZmllZCB2aWEgdGhlCisgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlIG1hcHBpbmcgYW5kIHRoZSBjaXBoZXJfc3VpdGVzIHdpbGwgaGF2ZSB0bworICAgICAgICAgICBiZSB0YWtlbiBmcm9tIHN5c3RlbS13aWRlIG9yIGltcGxlbWVudGF0aW9uLXNwZWNpZmljCisgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uICBJZiBubyByb3cgaW4gdGhlIHNubXBUbHN0bVBhcmFtc1RhYmxlIGV4aXN0cyB0aGVuCisgICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBNQVkgY2hvb3NlIHRvIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiB1c2luZyBhCisgICAgICAgICAgIGRlZmF1bHQgY2xpZW50IGNlcnRpZmljYXRlIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIGNlcnRpZmljYXRlIGFuZCBhcHByb3ByaWF0ZSBjaXBoZXJfc3VpdGVzIHdpbGwKKyAgICAgICAgICAgbmVlZCB0byBiZSBwYXNzZWQgdG8gdGhlIG9wZW5TZXNzaW9uKCkgQVNJIGFzIHN1cHBsZW1lbnRhbAorICAgICAgICAgICBpbmZvcm1hdGlvbiBvciBjb25maWd1cmVkIHRocm91Z2ggYW4gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50CisgICAgICAgICAgIG1lY2hhbmlzbS4gIEl0IGlzIGFsc28gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IGFuZCBwb3NzaWJseQorICAgICAgICAgICBwb2xpY3ktZGVwZW5kZW50IGhvdyB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwgd2lsbCBiZSB1c2VkIHRvCisgICAgICAgICAgIGluZmx1ZW5jZSB0aGUgc2VjdXJpdHkgY2FwYWJpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoZSAoRClUTFMKKyAgICAgICAgICAgY29ubmVjdGlvbi4gIEhvd2V2ZXIgdGhpcyBpcyBkb25lLCB0aGUgc2VjdXJpdHkgY2FwYWJpbGl0aWVzCisgICAgICAgICAgIHByb3ZpZGVkIGJ5IChEKVRMUyBNVVNUIGJlIGF0IGxlYXN0IGFzIGhpZ2ggYXMgdGhlIGxldmVsIG9mCisgICAgICAgICAgIHNlY3VyaXR5IGluZGljYXRlZCBieSB0aGUgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsIHBhcmFtZXRlci4KKyAgICAgICAgICAgVGhlIGFjdHVhbCBzZWN1cml0eSBsZXZlbCBvZiB0aGUgc2Vzc2lvbiBpcyByZXBvcnRlZCBpbiB0aGUKKyAgICAgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSBjYWNoZSBhcyB0bVNlY3VyaXR5TGV2ZWwuICBGb3IgKEQpVExTIHRvIHByb3ZpZGUKKyAgICAgICAgICAgc3Ryb25nIGF1dGhlbnRpY2F0aW9uLCBlYWNoIHByaW5jaXBhbCBhY3RpbmcgYXMgYSBjb21tYW5kCisgICAgICAgICAgIGdlbmVyYXRvciBTSE9VTEQgaGF2ZSBpdHMgb3duIGNlcnRpZmljYXRlLgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICAgKyBUaGlzIEluZm9ybWF0aW9uIGlzIHBhc3NlZCBpbiB2aWEgdGhlIHRyYW5zcG9ydCBhbmQgZGVmYXVsdAorICAgICAgICAgcGFyZW1ldGVycworICAgICovCisgICAgLyogc2VlIGlmIHdlIGhhdmUgYmFzZSBjb25maWd1cmF0aW9uIHRvIGNvcHkgaW4gdG8gdGhpcyBuZXcgb25lICovCisgICAgaWYgKE5VTEwgIT0gdC0+ZGF0YSAmJiB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2YoX25ldHNubXBUTFNCYXNlRGF0YSkpIHsKKyAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqcGFyZW50ZGF0YSA9IHQtPmRhdGE7CisgICAgICAgIGlmIChwYXJlbnRkYXRhLT5vdXJfaWRlbnRpdHkpCisgICAgICAgICAgICB0bHNkYXRhLT5vdXJfaWRlbnRpdHkgPSBzdHJkdXAocGFyZW50ZGF0YS0+b3VyX2lkZW50aXR5KTsKKyAgICAgICAgaWYgKHBhcmVudGRhdGEtPnRoZWlyX2lkZW50aXR5KQorICAgICAgICAgICAgdGxzZGF0YS0+dGhlaXJfaWRlbnRpdHkgPSBzdHJkdXAocGFyZW50ZGF0YS0+dGhlaXJfaWRlbnRpdHkpOworICAgICAgICBpZiAocGFyZW50ZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQpCisgICAgICAgICAgICB0bHNkYXRhLT50aGVpcl9maW5nZXJwcmludCA9IHN0cmR1cChwYXJlbnRkYXRhLT50aGVpcl9maW5nZXJwcmludCk7CisgICAgICAgIGlmIChwYXJlbnRkYXRhLT50cnVzdF9jZXJ0KQorICAgICAgICAgICAgdGxzZGF0YS0+dHJ1c3RfY2VydCA9IHN0cmR1cChwYXJlbnRkYXRhLT50cnVzdF9jZXJ0KTsKKyAgICAgICAgaWYgKHBhcmVudGRhdGEtPnRoZWlyX2hvc3RuYW1lKQorICAgICAgICAgICAgdGxzZGF0YS0+dGhlaXJfaG9zdG5hbWUgPSBzdHJkdXAocGFyZW50ZGF0YS0+dGhlaXJfaG9zdG5hbWUpOworICAgIH0KKyAgICAKKyAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICJzdGFydGluZyBhIG5ldyBjb25uZWN0aW9uXG4iKSk7CisgICAgY2FjaGVwLT5uZXh0ID0gYmlvY2FjaGU7CisgICAgYmlvY2FjaGUgPSBjYWNoZXA7CisKKyAgICBpZiAocmVtb3RlX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICBtZW1jcHkoJmNhY2hlcC0+c2FzLnNpbiwgJnJlbW90ZV9hZGRyLT5zaW4sIHNpemVvZihyZW1vdGVfYWRkci0+c2luKSk7CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICBlbHNlIGlmIChyZW1vdGVfYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorICAgICAgICBtZW1jcHkoJmNhY2hlcC0+c2FzLnNpbjYsICZyZW1vdGVfYWRkci0+c2luNiwgc2l6ZW9mKHJlbW90ZV9hZGRyLT5zaW42KSk7CisjZW5kaWYKKyAgICBlbHNlCisgICAgICAgIERJRUhFUkUoInVua25vd24gYWRkcmVzcyBmYW1pbHkiKTsKKworICAgIC8qIGNyZWF0ZSBjYWNoaW5nIG1lbW9yeSBiaW9zIGZvciBPcGVuU1NMIHRvIHJlYWQgYW5kIHdyaXRlIHRvICovCisKKyAgICBjYWNoZXAtPnJlYWRfYmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7IC8qIG9wZW5zc2wgcmVhZHMgZnJvbSAqLworICAgIGlmICghY2FjaGVwLT5yZWFkX2JpbykKKyAgICAgICAgRElFSEVSRSgiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgb3BlbnNzbCByZWFkX2JpbyIpOworCisgICAgY2FjaGVwLT53cml0ZV9iaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsgLyogb3BlbnNzbCB3cml0ZXMgdG8gKi8KKyAgICBpZiAoIWNhY2hlcC0+d3JpdGVfYmlvKSB7CisgICAgICAgIEJJT19mcmVlKGNhY2hlcC0+cmVhZF9iaW8pOworICAgICAgICBjYWNoZXAtPnJlYWRfYmlvID0gTlVMTDsKKyAgICAgICAgRElFSEVSRSgiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgb3BlbnNzbCB3cml0ZV9iaW8iKTsKKyAgICB9CisKKyAgICBCSU9fc2V0X21lbV9lb2ZfcmV0dXJuKGNhY2hlcC0+cmVhZF9iaW8sIC0xKTsKKyAgICBCSU9fc2V0X21lbV9lb2ZfcmV0dXJuKGNhY2hlcC0+d3JpdGVfYmlvLCAtMSk7CisKKyAgICBpZiAod2VfYXJlX2NsaWVudCkgeworICAgICAgICAvKiB3ZSdyZSB0aGUgY2xpZW50ICovCisgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwKKyAgICAgICAgICAgICAgICAgICAgInN0YXJ0aW5nIGEgbmV3IGNvbm5lY3Rpb24gYXMgYSBjbGllbnQgdG8gc29jazogJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHQtPnNvY2spKTsKKyAgICAgICAgdGxzZGF0YS0+c3NsID0gU1NMX25ldyhzc2xjdHhfY2xpZW50X3NldHVwKERUTFN2MV9tZXRob2QoKSwgdGxzZGF0YSkpOworCisgICAgICAgIC8qIFhYWDogc2Vzc2lvbiBzZXR0aW5nIDczNSAqLworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHdlJ3JlIHRoZSBzZXJ2ZXIgKi8KKyAgICAgICAgU1NMX0NUWCAqY3R4ID0gc3NsY3R4X3NlcnZlcl9zZXR1cChEVExTdjFfbWV0aG9kKCkpOworICAgICAgICBpZiAoIWN0eCkgeworICAgICAgICAgICAgQklPX2ZyZWUoY2FjaGVwLT5yZWFkX2Jpbyk7CisgICAgICAgICAgICBCSU9fZnJlZShjYWNoZXAtPndyaXRlX2Jpbyk7CisgICAgICAgICAgICBjYWNoZXAtPnJlYWRfYmlvID0gTlVMTDsKKyAgICAgICAgICAgIGNhY2hlcC0+d3JpdGVfYmlvID0gTlVMTDsKKyAgICAgICAgICAgIERJRUhFUkUoImZhaWxlZCB0byBjcmVhdGUgdGhlIFNTTCBDb250ZXh0Iik7CisgICAgICAgIH0KKworICAgICAgICAvKiB0dXJuIG9uIGNvb2tpZSBleGNoYW5nZSAqLworICAgICAgICAvKiBTZXQgRFRMUyBjb29raWUgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uIGNhbGxiYWNrcyAqLworICAgICAgICBTU0xfQ1RYX3NldF9jb29raWVfZ2VuZXJhdGVfY2IoY3R4LCBuZXRzbm1wX2R0bHNfZ2VuX2Nvb2tpZSk7CisgICAgICAgIFNTTF9DVFhfc2V0X2Nvb2tpZV92ZXJpZnlfY2IoY3R4LCBuZXRzbm1wX2R0bHNfdmVyaWZ5X2Nvb2tpZSk7CisKKyAgICAgICAgdGxzZGF0YS0+c3NsID0gU1NMX25ldyhjdHgpOworICAgIH0KKworICAgIGlmICghdGxzZGF0YS0+c3NsKSB7CisgICAgICAgIEJJT19mcmVlKGNhY2hlcC0+cmVhZF9iaW8pOworICAgICAgICBCSU9fZnJlZShjYWNoZXAtPndyaXRlX2Jpbyk7CisgICAgICAgIGNhY2hlcC0+cmVhZF9iaW8gPSBOVUxMOworICAgICAgICBjYWNoZXAtPndyaXRlX2JpbyA9IE5VTEw7CisgICAgICAgIERJRUhFUkUoImZhaWxlZCB0byBjcmVhdGUgdGhlIFNTTCBzZXNzaW9uIHN0cnVjdHVyZSIpOworICAgIH0KKyAgICAgICAgCisgICAgU1NMX3NldF9tb2RlKHRsc2RhdGEtPnNzbCwgU1NMX01PREVfQVVUT19SRVRSWSk7CisKKyAgICAvKiBzZXQgdGhlIGJpb3MgdGhhdCBvcGVuc3NsIHNob3VsZCByZWFkIGZyb20gYW5kIHdyaXRlIHRvICovCisgICAgLyogKGFuZCB3ZSdsbCBkbyB0aGUgb3Bwb3NpdGUpICovCisgICAgU1NMX3NldF9iaW8odGxzZGF0YS0+c3NsLCBjYWNoZXAtPnJlYWRfYmlvLCBjYWNoZXAtPndyaXRlX2Jpbyk7CisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMy4xLCBzdGVwIDE6CisgICAgICAgMykgIFVzaW5nIHRoZSBkZXN0VHJhbnNwb3J0RG9tYWluIGFuZCBkZXN0VHJhbnNwb3J0QWRkcmVzcyB2YWx1ZXMsCisgICAgICAgICAgIHRoZSBjbGllbnQgd2lsbCBpbml0aWF0ZSB0aGUgKEQpVExTIGhhbmRzaGFrZSBwcm90b2NvbCB0bworICAgICAgICAgICBlc3RhYmxpc2ggc2Vzc2lvbiBrZXlzIGZvciBtZXNzYWdlIGludGVncml0eSBhbmQgZW5jcnlwdGlvbi4KKworICAgICAgICAgICBJZiB0aGUgYXR0ZW1wdCB0byBlc3RhYmxpc2ggYSBzZXNzaW9uIGlzIHVuc3VjY2Vzc2Z1bCwgdGhlbgorICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycyBpcyBpbmNyZW1lbnRlZCwgYW4gZXJyb3IgaW5kaWNhdGlvbiBpcworICAgICAgICAgICByZXR1cm5lZCwgYW5kIHByb2Nlc3Npbmcgc3RvcHMuICBJZiB0aGUgc2Vzc2lvbiBmYWlsZWQgdG8gb3BlbgorICAgICAgICAgICBiZWNhdXNlIHRoZSBwcmVzZW50ZWQgc2VydmVyIGNlcnRpZmljYXRlIHdhcyB1bmtub3duIG9yIGludmFsaWQKKyAgICAgICAgICAgdGhlbiB0aGUgc25tcFRsc3RtU2Vzc2lvblVua25vd25TZXJ2ZXJDZXJ0aWZpY2F0ZSBvcgorICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZFNlcnZlckNlcnRpZmljYXRlcyBNVVNUIGJlIGluY3JlbWVudGVkIGFuZAorICAgICAgICAgICBhIHNubXBUbHN0bVNlcnZlckNlcnRpZmljYXRlVW5rbm93biBvcgorICAgICAgICAgICBzbm1wVGxzdG1TZXJ2ZXJJbnZhbGlkQ2VydGlmaWNhdGUgbm90aWZpY2F0aW9uIFNIT1VMRCBiZSBzZW50IGFzCisgICAgICAgICAgIGFwcHJvcHJpYXRlLiAgUmVhc29ucyBmb3Igc2VydmVyIGNlcnRpZmljYXRlIGludmFsaWRhdGlvbgorICAgICAgICAgICBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBjcnlwdG9ncmFwaGljIHZhbGlkYXRpb24KKyAgICAgICAgICAgZmFpbHVyZXMgYW5kIGFuIHVuZXhwZWN0ZWQgcHJlc2VudGVkIGNlcnRpZmljYXRlIGlkZW50aXR5LgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICAgKyBCZWNhdXNlIHdlJ3JlIHdvcmtpbmcgYXN5bmNyb25vdXNseSB0aGUgcmVhbCAiZW5kIiBwb2ludCBvZgorICAgICAgICAgb3BlbmluZyBhIGNvbm5lY3Rpb24gZG9lc24ndCBvY2N1ciBoZXJlIGFzIGNlcnRpZmljYXRlCisgICAgICAgICB2ZXJpZmljYXRpb24gYW5kIG90aGVyIHRoaW5ncyBuZWVkcyB0byBoYXBwZW4gZmlyc3QgaW4gdGhlCisgICAgICAgICB2ZXJpZnkgY2FsbGJhY2ssIGV0Yy4gIFNlZSB0aGUgbmV0c25tcF9kdGxzdWRwX3JlY3YoKQorICAgICAgICAgZnVuY3Rpb24gZm9yIHRoZSBmaW5hbCBwcm9jZXNzaW5nLgorICAgICovCisgICAgLyogc2V0IHRoZSBTU0wgbm90aW9uIG9mIHdlX2FyZV9jbGllbnQvc2VydmVyICovCisgICAgaWYgKHdlX2FyZV9jbGllbnQpCisgICAgICAgIFNTTF9zZXRfY29ubmVjdF9zdGF0ZSh0bHNkYXRhLT5zc2wpOworICAgIGVsc2UgeworICAgICAgICAvKiBYWFg6IHdlIG5lZWQgdG8gb25seSBjcmVhdGUgY2FjaGUgZW50cmllcyB3aGVuIGNvb2tpZXMgc3VjY2VlZCAqLworCisgICAgICAgIFNTTF9zZXRfb3B0aW9ucyh0bHNkYXRhLT5zc2wsIFNTTF9PUF9DT09LSUVfRVhDSEFOR0UpOworCisgICAgICAgIFNTTF9zZXRfZXhfZGF0YSh0bHNkYXRhLT5zc2wsIG9wZW5zc2xfYWRkcl9pbmRleCwgY2FjaGVwKTsKKworICAgICAgICBTU0xfc2V0X2FjY2VwdF9zdGF0ZSh0bHNkYXRhLT5zc2wpOworICAgIH0KKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4zLjEsIHN0ZXAgMToKKyAgICAgICA2KSAgVGhlIFRMU1RNLXNwZWNpZmljIHNlc3Npb24gaWRlbnRpZmllciAodGxzdG1TZXNzaW9uSUQpIGlzIHNldCBpbgorICAgICAgICAgICB0aGUgdG1TZXNzaW9uSUQgb2YgdGhlIHRtU3RhdGVSZWZlcmVuY2UgcGFzc2VkIHRvIHRoZSBUTFMKKyAgICAgICAgICAgVHJhbnNwb3J0IE1vZGVsIHRvIGluZGljYXRlIHRoYXQgdGhlIHNlc3Npb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQKKyAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGFuZCB0byBwb2ludCB0byBhIHNwZWNpZmljIChEKVRMUyBjb25uZWN0aW9uIGZvcgorICAgICAgICAgICBmdXR1cmUgdXNlLiAgVGhlIHRsc3RtU2Vzc2lvbklEIGlzIGFsc28gc3RvcmVkIGluIHRoZSBMQ0QgZm9yCisgICAgICAgICAgIGxhdGVyIGxvb2t1cCBkdXJpbmcgcHJvY2Vzc2luZyBvZiBpbmNvbWluZyBtZXNzYWdlcworICAgICAgICAgICAoU2VjdGlvbiA1LjEuMikuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAgICArIG91ciBzZXNzaW9uSUQgaXMgc3RvcmVkIGFzIHRoZSB0cmFuc3BvcnQncyBkYXRhIHBvaW50ZXIgbWVtYmVyCisgICAgKi8KKyAgICBERUJVR01TR1QoKCI5OmR0bHN1ZHA6YmlvX2NhY2hlOmNyZWF0ZWQiLCAiJXBcbiIsIGNhY2hlcCkpOworCisgICAgcmV0dXJuIGNhY2hlcDsKK30KKworc3RhdGljIGJpb19jYWNoZSAqCitmaW5kX29yX2NyZWF0ZV9iaW9fY2FjaGUobmV0c25tcF90cmFuc3BvcnQgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlICpmcm9tX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlX2FyZV9jbGllbnQpIHsKKyAgICBiaW9fY2FjaGUgKmNhY2hlcCA9IGZpbmRfYmlvX2NhY2hlKGZyb21fYWRkcik7CisgICAgaWYgKE5VTEwgPT0gY2FjaGVwKSB7CisgICAgICAgIC8qIG5vbmUgZm91bmQ7IG5lZWQgdG8gc3RhcnQgYSBuZXcgY29udGV4dCAqLworICAgICAgICBjYWNoZXAgPSBzdGFydF9uZXdfY2FjaGVkX2Nvbm5lY3Rpb24odCwgZnJvbV9hZGRyLCB3ZV9hcmVfY2xpZW50KTsKKyAgICAgICAgaWYgKE5VTEwgPT0gY2FjaGVwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIG9wZW4gYSBuZXcgZHRscyBjb25uZWN0aW9uXG4iKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVCgoIjk6ZHRsc3VkcDpiaW9fY2FjaGU6Zm91bmQiLCAiJXBcbiIsIGNhY2hlcCkpOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVwOworfQorCitzdGF0aWMgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqCitfZXh0cmFjdF9hZGRyX3BhaXIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKm9wYXF1ZSwgaW50IG9sZW4pCit7CisgICAgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKKworICAgIGlmIChvcGFxdWUgJiYgb2xlbiA9PSBzaXplb2YobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlKSkgeworICAgICAgICBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKnRtU3RhdGVSZWYgPQorICAgICAgICAgICAgKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqKSBvcGFxdWU7CisKKyAgICAgICAgaWYgKHRtU3RhdGVSZWYtPmhhdmVfYWRkcmVzc2VzKQorICAgICAgICAgICAgYWRkcl9wYWlyID0gJih0bVN0YXRlUmVmLT5hZGRyZXNzZXMpOworICAgIH0KKyAgICBpZiAoKE5VTEwgPT0gYWRkcl9wYWlyKSAmJiAoTlVMTCAhPSB0KSkgeworICAgICAgICBpZiAodC0+ZGF0YSAhPSBOVUxMICYmCisgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpCisgICAgICAgICAgICBhZGRyX3BhaXIgPSAobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqKSAodC0+ZGF0YSk7CisgICAgICAgIGVsc2UgaWYgKHQtPmRhdGEgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2YoX25ldHNubXBUTFNCYXNlRGF0YSkpIHsKKyAgICAgICAgICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGEgPSAoX25ldHNubXBUTFNCYXNlRGF0YSAqKSB0LT5kYXRhOworICAgICAgICAgICAgYWRkcl9wYWlyID0gKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKikgKHRsc2RhdGEtPmFkZHIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkZHJfcGFpcjsKK30KKworc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqCitfZmluZF9yZW1vdGVfc29ja2FkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKm9wYXF1ZSwgaW50IG9sZW4sIGludCAqc29ja2xlbikKK3sKKyAgICBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBfZXh0cmFjdF9hZGRyX3BhaXIodCwgb3BhcXVlLCBvbGVuKTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IGFkZHJfcGFpcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzYSA9ICZhZGRyX3BhaXItPnJlbW90ZV9hZGRyLnNhOworICAgICpzb2NrbGVuID0gbmV0c25tcF9zb2NrYWRkcl9zaXplKHNhKTsKKyAgICByZXR1cm4gc2E7Cit9CisKKworLyoKKyAqIFJlYWRzIGRhdGEgZnJvbSBvdXIgaW50ZXJuYWwgb3BlbnNzbCBvdXRnb2luZyBCSU8gYW5kIHNlbmRzIGFueQorICogcXVldWVkIHBhY2tldHMgb3V0IHRoZSBVRFAgcG9ydAorICovCitzdGF0aWMgaW50CitfbmV0c25tcF9zZW5kX3F1ZXVlZF9kdGxzX3BrdHMobmV0c25tcF90cmFuc3BvcnQgKnQsIGJpb19jYWNoZSAqY2FjaGVwKSB7CisgICAgaW50IG91dHNpemUsIHJjMjsKKyAgICB1X2NoYXIgb3V0YnVmWzY1NTM1XTsKKyAgICAKKyAgICBERUJVR1RSQUNFVE9LKCI5OmR0bHN1ZHAiKTsKKworICAgIC8qIGZvciBtZW1vcnkgYmlvcywgd2Ugbm93IHJlYWQgZnJvbSBvcGVuc3NsJ3Mgd3JpdGUKKyAgICAgICBidWZmZXIgKGllLCB0aGUgcGFja2V0IHRvIGdvIG91dCkgYW5kIHNlbmQgaXQgb3V0CisgICAgICAgdGhlIHVkcCBwb3J0IG1hbnVhbGx5ICovCisKKyAgICBvdXRzaXplID0gQklPX3JlYWQoY2FjaGVwLT53cml0ZV9iaW8sIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZikpOworICAgIGlmIChvdXRzaXplID4gMCkgeworICAgICAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICJoYXZlICVkIGJ5dGVzIHRvIHNlbmRcbiIsIG91dHNpemUpKTsKKworICAgICAgICAvKiBzaG91bGQgYWx3YXlzIGJlIHRydWUuICovCisgICAgICAgIGludCBzb2Nrc2l6ZTsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyICpzYTsKKyAgICAgICAgc2EgPSBfZmluZF9yZW1vdGVfc29ja2FkZHIodCwgTlVMTCwgMCwgJnNvY2tzaXplKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gc2EpCisgICAgICAgICAgICBzYSA9ICZjYWNoZXAtPnNhcy5zYTsKKyAgICAgICAgc29ja3NpemUgPSBuZXRzbm1wX3NvY2thZGRyX3NpemUoc2EpOworICAgICAgICByYzIgPSB0LT5iYXNlX3RyYW5zcG9ydC0+Zl9zZW5kKHQsIG91dGJ1Ziwgb3V0c2l6ZSwgKHZvaWQqKikmc2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNvY2tzaXplKTsKKyAgICAgICAgaWYgKHJjMiA9PSAtMSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byBzZW5kIGEgRFRMUyBzcGVjaWZpYyBwYWNrZXRcbiIpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIERFQlVHTVNHVEwoKCI5OmR0bHN1ZHAiLCAiaGF2ZSAwIGJ5dGVzIHRvIHNlbmRcbiIpKTsKKworICAgIHJldHVybiBvdXRzaXplOworfQorCisvKgorICogSWYgd2UgaGF2ZSBhbnkgb3V0Z29pbmcgU05NUCBkYXRhIHF1ZXVlZCB0aGF0IE9wZW5TU0wvRFRMUyBjb3VsZG4ndCBzZW5kCisgKiAobGlrZWx5IGR1ZSB0byBEVExTIGNvbnRyb2wgcGFja2V0cyBuZWVkaW5nIHRvIGdvIG91dCBmaXJzdCkKKyAqIHRoZW4gdGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBzZW5kIHRoZW0uCisgKi8KKy8qIHJldHVybnMgU05NUEVSUl9TVUNDRVNTIGlmIHdlIHN1Y2NlZWRlZCBpbiBnZXR0aW5nIHRoZSBkYXRhIG91dCAqLworLyogcmV0dXJucyBTTk1QRVJSX0dFTkVSUiBpZiB3ZSBzdGlsbCBuZWVkIG1vcmUgdGltZSAqLworc3RhdGljIGludAorX25ldHNubXBfYmlvX3RyeV9hbmRfd3JpdGVfYnVmZmVyZWQobmV0c25tcF90cmFuc3BvcnQgKnQsIGJpb19jYWNoZSAqY2FjaGVwKSB7CisgICAgaW50IHJjOworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGE7CisgICAgCisgICAgREVCVUdUUkFDRVRPSygiOTpkdGxzdWRwIik7CisKKyAgICB0bHNkYXRhID0gY2FjaGVwLT50bHNkYXRhOworCisgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgc29tZXRoaW5nIHRvIHdyaXRlICovCisgICAgaWYgKCFjYWNoZXAtPndyaXRlX2NhY2hlIHx8IGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuID09IDApCisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICJUcnlpbmcgdG8gd3JpdGUgJSIgTkVUU05NUF9QUkl6ICJkIG9mIGJ1ZmZlcmVkIGRhdGFcbiIsCisgICAgICAgICAgICAgICAgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4pKTsKKworICAgIC8qIHRyeSBhbmQgd3JpdGUgb3V0IHRoZSBjYWNoZWQgZGF0YSAqLworICAgIHJjID0gU1NMX3dyaXRlKHRsc2RhdGEtPnNzbCwgY2FjaGVwLT53cml0ZV9jYWNoZSwgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4pOworCisgICAgd2hpbGUgKHJjID09IC0xKSB7CisgICAgICAgIGludCBlcnJudW0gPSBTU0xfZ2V0X2Vycm9yKHRsc2RhdGEtPnNzbCwgcmMpOworICAgICAgICBpbnQgYnl0ZXNvdXQ7CisKKyAgICAgICAgLyogZG9uJ3QgdHJlYXQgd2FudF9yZWFkL3dyaXRlIGVycm9ycyBhcyByZWFsIGVycm9ycyAqLworICAgICAgICBpZiAoZXJybnVtICE9IFNTTF9FUlJPUl9XQU5UX1JFQUQgJiYKKyAgICAgICAgICAgIGVycm51bSAhPSBTU0xfRVJST1JfV0FOVF9XUklURSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAic3NsX3dyaXRlIGVycm9yIChvZiBidWZmZXJlZCBkYXRhKVxuIikpOyAKKyAgICAgICAgICAgIF9vcGVuc3NsX2xvZ19lcnJvcihyYywgdGxzZGF0YS0+c3NsLCAiU1NMX3dyaXRlIik7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKworICAgICAgICAvKiBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBvdXRnb2luZyBEVExTIHBhY2tldHMgdG8gc2VuZCAqLworICAgICAgICAvKiAoU1NMX3dyaXRlIGNvdWxkIGhhdmUgY3JlYXRlZCBEVExTIGNvbnRyb2wgcGFja2V0cykgKi8gCisgICAgICAgIGJ5dGVzb3V0ID0gX25ldHNubXBfc2VuZF9xdWV1ZWRfZHRsc19wa3RzKHQsIGNhY2hlcCk7CisKKyAgICAgICAgLyogSWYgd2FudF9yZWFkL3dyaXRlIGJ1dCBmYWlsZWQgdG8gYWN0dWFsbHkgc2VuZCBhbnl0aGluZworICAgICAgICAgICB0aGVuIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG90aGVyIHNpZGUsIHNvIHF1aXQgKi8KKyAgICAgICAgaWYgKChlcnJudW0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCB8fAorICAgICAgICAgICAgIGVycm51bSA9PSBTU0xfRVJST1JfV0FOVF9XUklURSkgJiYKKyAgICAgICAgICAgIGJ5dGVzb3V0IDw9IDApIHsKKyAgICAgICAgICAgIC8qIHdlJ3ZlIGZhaWxlZDsgbXVzdCBuZWVkIHRvIHdhaXQgbG9uZ2VyICovCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKworICAgICAgICAvKiByZXRyeSB3cml0aW5nICovCisgICAgICAgIERFQlVHTVNHVEwoKCI5OmR0bHN1ZHAiLCAicmVjYWxsaW5nIHNzbF93cml0ZVxuIikpOyAKKyAgICAgICAgcmMgPSBTU0xfd3JpdGUodGxzZGF0YS0+c3NsLCBjYWNoZXAtPndyaXRlX2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbik7CisgICAgfQorCisgICAgaWYgKHJjID4gMCkKKyAgICAgICAgY2FjaGVwLT5tc2dudW0rKzsKKyAgICAKKyAgICBpZiAoX25ldHNubXBfc2VuZF9xdWV1ZWRfZHRsc19wa3RzKHQsIGNhY2hlcCkgPiAwKSB7CisgICAgICAgIFNOTVBfRlJFRShjYWNoZXAtPndyaXRlX2NhY2hlKTsKKyAgICAgICAgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gPSAwOworICAgICAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICIgIFdyaXRlIHdhcyBzdWNjZXNzZnVsXG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgIiAgZmFpbGVkIHRvIHNlbmQgb3ZlciBVRFAgc29ja2V0XG4iKSk7CisgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworfQorCitzdGF0aWMgaW50CitfbmV0c25tcF9hZGRfYnVmZmVyZWRfZGF0YShiaW9fY2FjaGUgKmNhY2hlcCwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkgeworICAgIGlmIChjYWNoZXAtPndyaXRlX2NhY2hlICYmIGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuID4gMCkgeworICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuICsgc2l6ZTsKKworICAgICAgICBjaGFyICpuZXdidWYgPSByZWFsbG9jKGNhY2hlcC0+d3JpdGVfY2FjaGUsIG5ld3NpemUpOworICAgICAgICBpZiAoTlVMTCA9PSBuZXdidWYpIHsKKyAgICAgICAgICAgIC8qIGFjayEgbWFsbG9jIGZhaWx1cmUgKi8KKyAgICAgICAgICAgIC8qIFhYWDogZnJlZSBhbmQgY2xvc2UgKi8KKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBjYWNoZXAtPndyaXRlX2NhY2hlID0gbmV3YnVmOworCisgICAgICAgIC8qIHdyaXRlIHRoZSBuZXcgcGFja2V0IHRvIHRoZSBlbmQgKi8KKyAgICAgICAgbWVtY3B5KGNhY2hlcC0+d3JpdGVfY2FjaGUgKyBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbiwKKyAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZSk7CisgICAgICAgIGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuID0gbmV3c2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWNoZXAtPndyaXRlX2NhY2hlID0gbmV0c25tcF9tZW1kdXAoYnVmLCBzaXplKTsKKyAgICAgICAgaWYgKCFjYWNoZXAtPndyaXRlX2NhY2hlKSB7CisgICAgICAgICAgICAvKiBhY2shIG1hbGxvYyBmYWlsdXJlICovCisgICAgICAgICAgICAvKiBYWFg6IGZyZWUgYW5kIGNsb3NlICovCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICAgICAgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gPSBzaXplOworICAgIH0KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCitzdGF0aWMgaW50CituZXRzbm1wX2R0bHN1ZHBfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbTsKKyAgICBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKnRtU3RhdGVSZWYgPSBOVUxMOworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGE7CisgICAgYmlvX2NhY2hlICpjYWNoZXA7CisKKyAgICBERUJVR1RSQUNFVE9LKCI5OmR0bHN1ZHAiKTsKKworICAgIGlmIChOVUxMID09IHQgfHwgdC0+c29jayA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBjcmVhdGUgYSB0bVN0YXRlUmVmIGNhY2hlIGZvciBzbG93IGZpbGwtaW4gKi8KKyAgICB0bVN0YXRlUmVmID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UpOworCisgICAgaWYgKHRtU3RhdGVSZWYgPT0gTlVMTCkgeworICAgICAgICAqb3BhcXVlID0gTlVMTDsKKyAgICAgICAgKm9sZW5ndGggPSAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogU2V0IHRoZSB0cmFuc3BvcnREb21haW4gKi8KKyAgICBtZW1jcHkodG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluLAorICAgICAgICAgICBuZXRzbm1wRFRMU1VEUERvbWFpbiwgc2l6ZW9mKG5ldHNubXBEVExTVURQRG9tYWluWzBdKSAqCisgICAgICAgICAgIG5ldHNubXBEVExTVURQRG9tYWluX2xlbik7CisgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0RG9tYWluTGVuID0gbmV0c25tcERUTFNVRFBEb21haW5fbGVuOworCisgICAgYWRkcl9wYWlyID0gJnRtU3RhdGVSZWYtPmFkZHJlc3NlczsKKyAgICB0bVN0YXRlUmVmLT5oYXZlX2FkZHJlc3NlcyA9IDE7CisgICAgZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKKworICAgIHdoaWxlIChyYyA8IDApIHsKKyAgICAgICAgY2hhciAqb3BhcXVlID0gTlVMTDsKKyAgICAgICAgaW50IG9sZW47CisgICAgICAgIHJjID0gdC0+YmFzZV90cmFuc3BvcnQtPmZfcmVjdih0LCBidWYsIHNpemUsICh2b2lkKiopJm9wYXF1ZSwgJm9sZW4pOworICAgICAgICBpZiAocmMgPiAwKQorICAgICAgICAgICAgbWVtY3B5KGZyb20sIG9wYXF1ZSwgb2xlbik7CisgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOworICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgInJlY2VpdmVkICVkIHJhdyBieXRlcyBvbiB3YXkgdG8gZHRsc1xuIiwgcmMpKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgInJlY3Zmcm9tIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBub3cgdGhhdCB3ZSBoYXZlIHRoZSBmcm9tIGFkZHJlc3MgZmlsbGVkIGluLCB3ZSBjYW4gbG9vayB1cAorICAgICAgIHRoZSBvcGVuc3NsIGNvbnRleHQgYW5kIGhhdmUgb3BlbnNzbCByZWFkIGFuZCBwcm9jZXNzCisgICAgICAgYXBwcm9wcmlhdGVseSAqLworCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjEsIHN0ZXAgMToKKyAgICAxKSAgRGV0ZXJtaW5lIHRoZSB0bHN0bVNlc3Npb25JRCBmb3IgdGhlIGluY29taW5nIG1lc3NhZ2UuICBUaGUKKyAgICAgICAgdGxzdG1TZXNzaW9uSUQgTVVTVCBiZSBhIHVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXIgZm9yIHRoaXMKKyAgICAgICAgKEQpVExTIGNvbm5lY3Rpb24uICBUaGUgY29udGVudHMgYW5kIGZvcm1hdCBvZiB0aGlzIGlkZW50aWZpZXIKKyAgICAgICAgYXJlIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBhcyBsb25nIGFzIGl0IGlzIHVuaXF1ZSB0byB0aGUKKyAgICAgICAgc2Vzc2lvbi4gIEEgc2Vzc2lvbiBpZGVudGlmaWVyIE1VU1QgTk9UIGJlIHJldXNlZCB1bnRpbCBhbGwKKyAgICAgICAgcmVmZXJlbmNlcyB0byBpdCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4gIFRoZSB0bVNlc3Npb25JRCBpcyBlcXVhbAorICAgICAgICB0byB0aGUgdGxzdG1TZXNzaW9uSUQgZGlzY3Vzc2VkIGluIFNlY3Rpb24gNS4xLjEuIHRtU2Vzc2lvbklECisgICAgICAgIHJlZmVycyB0byB0aGUgc2Vzc2lvbiBpZGVudGlmaWVyIHdoZW4gc3RvcmVkIGluIHRoZQorICAgICAgICB0bVN0YXRlUmVmZXJlbmNlIGFuZCB0bHN0bVNlc3Npb25JRCByZWZlcnMgdG8gdGhlIHNlc3Npb24KKyAgICAgICAgaWRlbnRpZmllciB3aGVuIHN0b3JlZCBpbiB0aGUgTENELiAgVGhleSBNVVNUIGFsd2F5cyBiZSBlcXVhbAorICAgICAgICB3aGVuIHByb2Nlc3NpbmcgYSBnaXZlbiBzZXNzaW9uJ3MgdHJhZmZpYy4KKworICAgICAgICBJZiB0aGlzIGlzIHRoZSBmaXJzdCBtZXNzYWdlIHJlY2VpdmVkIHRocm91Z2ggdGhpcyBzZXNzaW9uIGFuZAorICAgICAgICB0aGUgc2Vzc2lvbiBkb2VzIG5vdCBoYXZlIGFuIGFzc2lnbmVkIHRsc3RtU2Vzc2lvbklEIHlldCB0aGVuIHRoZQorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uQWNjZXB0cyBjb3VudGVyIGlzIGluY3JlbWVudGVkIGFuZCBhCisgICAgICAgIHRsc3RtU2Vzc2lvbklEIGZvciB0aGUgc2Vzc2lvbiBpcyBjcmVhdGVkLiAgVGhpcyB3aWxsIG9ubHkgaGFwcGVuCisgICAgICAgIG9uIHRoZSBzZXJ2ZXIgc2lkZSBvZiBhIGNvbm5lY3Rpb24gYmVjYXVzZSBhIGNsaWVudCB3b3VsZCBoYXZlCisgICAgICAgIGFscmVhZHkgYXNzaWduZWQgYSB0bHN0bVNlc3Npb25JRCBkdXJpbmcgdGhlIG9wZW5TZXNzaW9uKCkKKyAgICAgICAgaW52b2NhdGlvbi4gIEltcGxlbWVudGF0aW9ucyBtYXkgaGF2ZSBwZXJmb3JtZWQgdGhlIHByb2NlZHVyZXMKKyAgICAgICAgZGVzY3JpYmVkIGluIFNlY3Rpb24gNS4zLjIgcHJpb3IgdG8gdGhpcyBwb2ludCBvciB0aGV5IG1heQorICAgICAgICBwZXJmb3JtIHRoZW0gbm93LCBidXQgdGhlIHByb2NlZHVyZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNS4zLjIKKyAgICAgICAgTVVTVCBiZSBwZXJmb3JtZWQgYmVmb3JlIGNvbnRpbnVpbmcgYmV5b25kIHRoaXMgcG9pbnQuCisgICAgKi8KKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4xLCBzdGVwIDI6CisgICAgICAgMikgIENyZWF0ZSBhIHRtU3RhdGVSZWZlcmVuY2UgY2FjaGUgZm9yIHRoZSBzdWJzZXF1ZW50IHJlZmVyZW5jZSBhbmQKKyAgICAgICAgICAgYXNzaWduIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHdpdGhpbiBpdDoKKworICAgICAgICAgICB0bVRyYW5zcG9ydERvbWFpbiAgPSBzbm1wVExTVENQRG9tYWluIG9yIHNubXBEVExTVURQRG9tYWluIGFzCisgICAgICAgICAgICAgIGFwcHJvcHJpYXRlLgorCisgICAgICAgICAgIHRtVHJhbnNwb3J0QWRkcmVzcyAgPSBUaGUgYWRkcmVzcyB0aGUgbWVzc2FnZSBvcmlnaW5hdGVkIGZyb20uCisKKyAgICAgICAgICAgdG1TZWN1cml0eUxldmVsICA9IFRoZSBkZXJpdmVkIHRtU2VjdXJpdHlMZXZlbCBmb3IgdGhlIHNlc3Npb24sCisgICAgICAgICAgICAgIGFzIGRpc2N1c3NlZCBpbiBTZWN0aW9uIDMuMS4yIGFuZCBTZWN0aW9uIDUuMy4KKworICAgICAgICAgICB0bVNlY3VyaXR5TmFtZSAgPSBUaGUgZGVyaXZlZCB0bVNlY3VyaXR5TmFtZSBmb3IgdGhlIHNlc3Npb24gYXMKKyAgICAgICAgICAgICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gNS4zLiAgVGhpcyB2YWx1ZSBNVVNUIGJlIGNvbnN0YW50IGR1cmluZworICAgICAgICAgICAgICB0aGUgbGlmZXRpbWUgb2YgdGhlIHNlc3Npb24uCisKKyAgICAgICAgICAgdG1TZXNzaW9uSUQgID0gVGhlIHRsc3RtU2Vzc2lvbklEIGRlc2NyaWJlZCBpbiBzdGVwIDEgYWJvdmUuCisgICAgKi8KKworICAgIC8qIGlmIHdlIGRvbid0IGhhdmUgYSBjYWNoZXAgZm9yIHRoaXMgY29ubmVjdGlvbiB0aGVuCisgICAgICAgd2UncmUgcmVjZWl2aW5nIHNvbWV0aGluZyBuZXcgYW5kIGFyZSB0aGUgc2VydmVyCisgICAgICAgc2lkZSAqLworICAgIGNhY2hlcCA9CisgICAgICAgIGZpbmRfb3JfY3JlYXRlX2Jpb19jYWNoZSh0LCAmYWRkcl9wYWlyLT5yZW1vdGVfYWRkciwgV0VfQVJFX1NFUlZFUik7CisgICAgaWYgKE5VTEwgPT0gY2FjaGVwKSB7CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05BQ0NFUFRTKTsKKyAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHRsc2RhdGEgPSBjYWNoZXAtPnRsc2RhdGE7CisgICAgaWYgKE5VTEwgPT0gdGxzZGF0YS0+c3NsKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBzZXJ2ZXIgc3RhcnRzIGJ1dCBkb2Vzbid0IGhhdmUgYW4KKyAgICAgICAgICogaWRlbnRpdHkgYW5kIGEgY2xpZW50IGNvbm5lY3RzLi4uCisgICAgICAgICAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiRFRMU1VEUDogbWlzc2luZyB0bHNkYXRhIVxuIik7CisgICAgICAgIC8qc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKCBYWFgtcmtzID8/PyApOyovCisgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgIC0gd2UgdXNlIHRoZSB0LT5kYXRhIG1lbW9yeSBwb2ludGVyIGFzIHRoZSBzZXNzaW9uIElECisgICAgICAgLSB0aGUgdHJhbnNwb3J0IGRvbWFpbiBpcyBhbHJlYWR5IHRoZSBjb3JyZWN0IHR5cGUgaWYgd2UgZ290IGhlcmUKKyAgICAgICAtIGlmIHdlIGRvbid0IGhhdmUgYSBzZXNzaW9uIHlldCAoZWcsIG5vIHRtU2Vzc2lvbklEIGZyb20gdGhlCisgICAgICAgICBzcGVjcykgdGhlbiB3ZSBjcmVhdGUgb25lIGF1dG9tYXRpY2FsbHkgaGVyZS4KKyAgICAqLworCisgICAgLyogd3JpdGUgdGhlIHJlY2VpdmVkIGJ1ZmZlciB0byB0aGUgbWVtb3J5LWJhc2VkIGlucHV0IGJpbyAqLworICAgIEJJT193cml0ZShjYWNoZXAtPnJlYWRfYmlvLCBidWYsIHJjKTsKKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4xLCBzdGVwIDM6CisgICAgICAgMykgIFRoZSBpbmNvbWluZ01lc3NhZ2UgYW5kIGluY29taW5nTWVzc2FnZUxlbmd0aCBhcmUgYXNzaWduZWQgdmFsdWVzCisgICAgICAgICAgIGZyb20gdGhlIChEKVRMUyBwcm9jZXNzaW5nLgorICAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICsgcmMgPSBpbmNvbWluZ01lc3NhZ2VMZW5ndGgKKyAgICAgICArIGJ1ZiA9IEluY29taW5nTWVzc2FnZQorICAgICovCisKKyAgICAvKiBYWFg6IGluIFdlcycgb3RoZXIgZXhhbXBsZSB3ZSBkbyBhIFNTTF9wZW5kaW5nKCkgY2FsbAorICAgICAgIHRvbyB0byBlbnN1cmUgd2UncmUgcmVhZHkgdG8gcmVhZC4uLiAgaXQncyBwb3NzaWJsZQorICAgICAgIHRoYXQgYnVmZmVyZWQgc3R1ZmYgaW4gb3BlbnNzbCB3b24ndCBiZSBjYXVnaHQgYnkgdGhlCisgICAgICAgbmV0LXNubXAgc2VsZWN0IGxvb3AgYmVjYXVzZSBpdCdzIGFscmVhZHkgYmVlbiBwdWxsZWQKKyAgICAgICBvdXQ7IG5lZWQgdG8gZGVhbCB3aXRoIHRoaXMpICovCisgICAgcmMgPSBTU0xfcmVhZCh0bHNkYXRhLT5zc2wsIGJ1Ziwgc2l6ZSk7CisKKyAgICAvKgorICAgICAqIG1vdmVkIG5ldHNubXBfb3BlbnNzbF9udWxsX2NoZWNrcyB0byBuZXRzbm1wX3Rsc2Jhc2Vfd3JhcHVwX3JlY3YuCisgICAgICogY3VycmVudGx5IG5ldHNubXBfdGxzYmFzZV93cmFwdXBfcmVjdiBpcyB3aGVyZSB3ZSBjaGVjayBmb3IKKyAgICAgKiBhbGdvcml0aG0gY29tcGxpYW5jZSwgYnV0IHdlIChzb21ldGltZXMpIGtub3cgdGhlIGFsZ29yaXRobXMKKyAgICAgKiBhdCB0aGlzIHBvaW50LCBzbyB3ZSBjb3VsZCBiYWlsIGVhcmxpZXIgKGhlcmUpLi4uCisgICAgICovCisKKyAgICB3aGlsZSAocmMgPT0gLTEpIHsKKyAgICAgICAgaW50IGVycm51bSA9IFNTTF9nZXRfZXJyb3IodGxzZGF0YS0+c3NsLCByYyk7CisgICAgICAgIGludCBieXRlc291dDsKKworICAgICAgICAvKiBkb24ndCB0cmVhdCB3YW50X3JlYWQvd3JpdGUgZXJyb3JzIGFzIHJlYWwgZXJyb3JzICovCisgICAgICAgIGlmIChlcnJudW0gIT0gU1NMX0VSUk9SX1dBTlRfUkVBRCAmJgorICAgICAgICAgICAgZXJybnVtICE9IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7CisgICAgICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIHRsc2RhdGEtPnNzbCwgIlNTTF9yZWFkIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIG91dGdvaW5nIERUTFMgcGFja2V0cyB0byBzZW5kICovCisgICAgICAgIC8qIChTU0xfcmVhZCBjb3VsZCBoYXZlIGNyZWF0ZWQgRFRMUyBjb250cm9sIHBhY2tldHMpICovIAorICAgICAgICBieXRlc291dCA9IF9uZXRzbm1wX3NlbmRfcXVldWVkX2R0bHNfcGt0cyh0LCBjYWNoZXApOworCisgICAgICAgIC8qIElmIHdhbnRfcmVhZC93cml0ZSBidXQgZmFpbGVkIHRvIGFjdHVhbGx5IHNlbmQKKyAgICAgICAgICAgYW55dGhpbmcgdGhlbiB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBvdGhlciBzaWRlLAorICAgICAgICAgICBzbyBxdWl0ICovCisgICAgICAgIGlmICgoZXJybnVtID09IFNTTF9FUlJPUl9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgICBlcnJudW0gPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEUpICYmCisgICAgICAgICAgICBieXRlc291dCA8PSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogcmV0cnkgcmVhZGluZyAqLworICAgICAgICBERUJVR01TR1RMKCgiOTpkdGxzdWRwIiwgInJlY2FsbGluZyBzc2xfcmVhZFxuIikpOyAKKyAgICAgICAgcmMgPSBTU0xfcmVhZCh0bHNkYXRhLT5zc2wsIGJ1Ziwgc2l6ZSk7CisgICAgfQorCisgICAgaWYgKHJjID09IC0xKSB7CisgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKworICAgICAgICBERUJVR01TR1RMKCgiOTpkdGxzdWRwIiwgIm5vIGRlY29kZWQgZGF0YSBmcm9tIGR0bHNcbiIpKTsKKworICAgICAgICBpZiAoU1NMX2dldF9lcnJvcih0bHNkYXRhLT5zc2wsIHJjKSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiOWR0bHN1ZHAiLCJoZXJlOiB3YW50IHJlYWQhXG4iKSk7CisKKyAgICAgICAgICAgIC8qIHNlZSBpZiB3ZSBoYXZlIGJ1ZmZlcmVkIHdyaXRlIGRhdGUgdG8gc2VuZCBvdXQgZmlyc3QgKi8KKyAgICAgICAgICAgIGlmIChjYWNoZXAtPndyaXRlX2NhY2hlKSB7CisgICAgICAgICAgICAgICAgX25ldHNubXBfYmlvX3RyeV9hbmRfd3JpdGVfYnVmZmVyZWQodCwgY2FjaGVwKTsKKyAgICAgICAgICAgICAgICAvKiBYWFg6IGNoZWNrIGVycm9yIG9yIG5vdCBoZXJlPyAqLworICAgICAgICAgICAgICAgIC8qICh3aGF0IHdvdWxkIHdlIGRvIGRpZmZlcmVudGx5PykgKi8KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmMgPSAtMTsgLyogWFhYOiBpdCdzIG9rLCBidXQgd2hhdCdzIHRoZSByaWdodCByZXR1cm4/ICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgX29wZW5zc2xfbG9nX2Vycm9yKHJjLCB0bHNkYXRhLT5zc2wsICJTU0xfcmVhZCIpOworCisjaWYgMCAvKiB0byBkdW1wIGNhY2hlIGlmIHdlIGRvbid0IGhhdmUgYSBjb29raWUsIHRoaXMgaXMgd2hlcmUgdG8gZG8gaXQgKi8KKyAgICAgICAgaWYgKCEoY2FjaGVwLT5mbGFncyAmIE5FVFNOTVBfQklPX0hBVkVfQ09PS0lFKSkKKyAgICAgICAgICAgIHJlbW92ZV9hbmRfZnJlZV9iaW9fY2FjaGUoY2FjaGVwKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAicmVjZWl2ZWQgJWQgZGVjb2RlZCBieXRlcyBmcm9tIGR0bHNcbiIsIHJjKSk7CisKKyAgICBpZiAoKDAgPT0gcmMpICYmIChTU0xfZ2V0X3NodXRkb3duKHRsc2RhdGEtPnNzbCkgJiBTU0xfUkVDRUlWRURfU0hVVERPV04pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgInBlZXIgZGlzY29ubmVjdGVkXG4iKSk7CisgICAgICAgIGNhY2hlcC0+ZmxhZ3MgfD0gTkVUU05NUF9CSU9fRElTQ09OTkVDVEVEOworICAgICAgICByZW1vdmVfYW5kX2ZyZWVfYmlvX2NhY2hlKGNhY2hlcCk7CisgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKyAgICBjYWNoZXAtPmZsYWdzIHw9IE5FVFNOTVBfQklPX0NPTk5FQ1RFRDsKKworICAgIC8qIFVudGlsIHdlJ3ZlIGxvY2FsbHkgYXNzdXJlZCBvdXJzZWx2ZXMgdGhhdCBhbGwgaXMgd2VsbCBpbgorICAgICAgIGNlcnRpZmljYXRlLXZlcmlmaWNhdGlvbi1sYW5kIHdlIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gc3RvcAorICAgICAgIGhlcmUgYW5kIGVuc3VyZSBhbGwgb3VyIHJlcXVpcmVkIGNoZWNrcyBoYXZlIGJlZW4gZG9uZS4gKi8gCisgICAgaWYgKDAgPT0gKHRsc2RhdGEtPmZsYWdzICYgTkVUU05NUF9UTFNCQVNFX0NFUlRfRlBfVkVSSUZJRUQpKSB7CisgICAgICAgIGludCB2ZXJpZnlyZXN1bHQ7CisKKyAgICAgICAgaWYgKHRsc2RhdGEtPmZsYWdzICYgTkVUU05NUF9UTFNCQVNFX0lTX0NMSUVOVCkgeworCisgICAgICAgICAgICAvKiB2ZXJpZnkgdGhhdCB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgaXMgdGhlIGNvcnJlY3Qgb25lICovCisKKyAgICAJICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4zLjEsIHN0ZXAgMToKKyAgICAJICAgICAgIDMpICBVc2luZyB0aGUgZGVzdFRyYW5zcG9ydERvbWFpbiBhbmQKKyAgICAJICAgICAgICAgICBkZXN0VHJhbnNwb3J0QWRkcmVzcyB2YWx1ZXMsIHRoZSBjbGllbnQgd2lsbAorICAgIAkgICAgICAgICAgIGluaXRpYXRlIHRoZSAoRClUTFMgaGFuZHNoYWtlIHByb3RvY29sIHRvIGVzdGFibGlzaAorICAgIAkgICAgICAgICAgIHNlc3Npb24ga2V5cyBmb3IgbWVzc2FnZSBpbnRlZ3JpdHkgYW5kIGVuY3J5cHRpb24uCisKKyAgICAJICAgICAgICAgICBJZiB0aGUgYXR0ZW1wdCB0byBlc3RhYmxpc2ggYSBzZXNzaW9uIGlzCisgICAgCSAgICAgICAgICAgdW5zdWNjZXNzZnVsLCB0aGVuIHNubXBUbHN0bVNlc3Npb25PcGVuRXJyb3JzIGlzCisgICAgCSAgICAgICAgICAgaW5jcmVtZW50ZWQsIGFuIGVycm9yIGluZGljYXRpb24gaXMgcmV0dXJuZWQsIGFuZAorICAgIAkgICAgICAgICAgIHByb2Nlc3Npbmcgc3RvcHMuICBJZiB0aGUgc2Vzc2lvbiBmYWlsZWQgdG8gb3BlbgorICAgIAkgICAgICAgICAgIGJlY2F1c2UgdGhlIHByZXNlbnRlZCBzZXJ2ZXIgY2VydGlmaWNhdGUgd2FzCisgICAgCSAgICAgICAgICAgdW5rbm93biBvciBpbnZhbGlkIHRoZW4gdGhlCisgICAgCSAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvblVua25vd25TZXJ2ZXJDZXJ0aWZpY2F0ZSBvcgorICAgIAkgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzIE1VU1QgYmUKKyAgICAJICAgICAgICAgICBpbmNyZW1lbnRlZCBhbmQgYSBzbm1wVGxzdG1TZXJ2ZXJDZXJ0aWZpY2F0ZVVua25vd24KKyAgICAJICAgICAgICAgICBvciBzbm1wVGxzdG1TZXJ2ZXJJbnZhbGlkQ2VydGlmaWNhdGUgbm90aWZpY2F0aW9uCisgICAgCSAgICAgICAgICAgU0hPVUxEIGJlIHNlbnQgYXMgYXBwcm9wcmlhdGUuICBSZWFzb25zIGZvciBzZXJ2ZXIKKyAgICAJICAgICAgICAgICBjZXJ0aWZpY2F0ZSBpbnZhbGlkYXRpb24gaW5jbHVkZXMsIGJ1dCBpcyBub3QKKyAgICAJICAgICAgICAgICBsaW1pdGVkIHRvLCBjcnlwdG9ncmFwaGljIHZhbGlkYXRpb24gZmFpbHVyZXMgYW5kCisgICAgCSAgICAgICAgICAgYW4gdW5leHBlY3RlZCBwcmVzZW50ZWQgY2VydGlmaWNhdGUgaWRlbnRpdHkuCisgICAgCSAgICAqLworICAgIAkgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjMuMSwgc3RlcCAxOgorICAgIAkgICAgICAgNCkgIFRoZSAoRClUTFMgY2xpZW50IE1VU1QgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgKEQpVExTCisgICAgCSAgICAgICAgICAgc2VydmVyJ3MgcHJlc2VudGVkIGNlcnRpZmljYXRlIGlzIHRoZSBleHBlY3RlZAorICAgIAkgICAgICAgICAgIGNlcnRpZmljYXRlLiAgVGhlIChEKVRMUyBjbGllbnQgTVVTVCBOT1QgdHJhbnNtaXQKKyAgICAJICAgICAgICAgICBTTk1QIG1lc3NhZ2VzIHVudGlsIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgaGFzIGJlZW4KKyAgICAJICAgICAgICAgICBhdXRoZW50aWNhdGVkLCB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGhhcyBiZWVuCisgICAgCSAgICAgICAgICAgdHJhbnNtaXR0ZWQgYW5kIHRoZSBUTFMgY29ubmVjdGlvbiBoYXMgYmVlbiBmdWxseQorICAgIAkgICAgICAgICAgIGVzdGFibGlzaGVkLgorCisgICAgCSAgICAgICAgICAgSWYgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgZXN0YWJsaXNoZWQgZnJvbQorICAgIAkgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gU05NUC1UQVJHRVQtTUlCCisgICAgCSAgICAgICAgICAgY29uZmlndXJhdGlvbiwgdGhlbiB0aGUgc25tcFRsc3RtQWRkclRhYmxlCisgICAgCSAgICAgICAgICAgREVTQ1JJUFRJT04gY2xhdXNlIGRlc2NyaWJlcyBob3cgdGhlIHZlcmlmaWNhdGlvbgorICAgIAkgICAgICAgICAgIGlzIGRvbmUgKHVzaW5nIGVpdGhlciBhIGNlcnRpZmljYXRlIGZpbmdlcnByaW50LCBvcgorICAgIAkgICAgICAgICAgIGFuIGlkZW50aXR5IGF1dGhlbnRpY2F0ZWQgdmlhIGNlcnRpZmljYXRpb24gcGF0aAorICAgIAkgICAgICAgICAgIHZhbGlkYXRpb24pLgorCisgICAgCSAgICAgICAgICAgSWYgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHJlYXNvbnMKKyAgICAJICAgICAgICAgICBvdGhlciB0aGFuIGNvbmZpZ3VyYXRpb24gZm91bmQgaW4gdGhlCisgICAgCSAgICAgICAgICAgU05NUC1UQVJHRVQtTUlCIHRoZW4gY29uZmlndXJhdGlvbiBhbmQgcHJvY2VkdXJlcworICAgIAkgICAgICAgICAgIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGJlCisgICAgCSAgICAgICAgICAgZm9sbG93ZWQuICBDb25maWd1cmF0aW9uIG1lY2hhbmlzbXMgU0hPVUxEIGJlCisgICAgCSAgICAgICAgICAgc2ltaWxhciBpbiBuYXR1cmUgdG8gdGhvc2UgZGVmaW5lZCBpbiB0aGUKKyAgICAJICAgICAgICAgICBzbm1wVGxzdG1BZGRyVGFibGUgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcworICAgIAkgICAgICAgICAgIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIGEKKyAgICAJICAgICAgICAgICBjb21tYW5kLWxpbmUgdG9vbCBmb3IgZ2VuZXJhdGluZyBTTk1QIEdFVHMgbWlnaHQKKyAgICAJICAgICAgICAgICBzdXBwb3J0IHNwZWNpZnlpbmcgZWl0aGVyIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZQorICAgIAkgICAgICAgICAgIGZpbmdlcnByaW50IG9yIHRoZSBleHBlY3RlZCBob3N0IG5hbWUgYXMgYSBjb21tYW5kCisgICAgCSAgICAgICAgICAgbGluZSBhcmd1bWVudC4KKyAgICAJICAgICovCisgICAgCSAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMy4xLCBzdGVwIDE6CisgICAgCSAgICAgICA1KSAgKEQpVExTIHByb3ZpZGVzIGFzc3VyYW5jZSB0aGF0IHRoZSBhdXRoZW50aWNhdGVkCisgICAgCSAgICAgICAgICAgaWRlbnRpdHkgaGFzIGJlZW4gc2lnbmVkIGJ5IGEgdHJ1c3RlZCBjb25maWd1cmVkCisgICAgCSAgICAgICAgICAgY2VydGlmaWNhdGlvbiBhdXRob3JpdHkuICBJZiB2ZXJpZmljYXRpb24gb2YgdGhlCisgICAgCSAgICAgICAgICAgc2VydmVyJ3MgY2VydGlmaWNhdGUgZmFpbHMgaW4gYW55IHdheSAoZm9yIGV4YW1wbGUKKyAgICAJICAgICAgICAgICBiZWNhdXNlIG9mIGZhaWx1cmVzIGluIGNyeXB0b2dyYXBoaWMgdmVyaWZpY2F0aW9uCisgICAgCSAgICAgICAgICAgb3IgdGhlIHByZXNlbnRlZCBpZGVudGl0eSBkaWQgbm90IG1hdGNoIHRoZQorICAgIAkgICAgICAgICAgIGV4cGVjdGVkIG5hbWVkIGVudGl0eSkgdGhlbiB0aGUgc2Vzc2lvbgorICAgIAkgICAgICAgICAgIGVzdGFibGlzaG1lbnQgTVVTVCBmYWlsLCB0aGUKKyAgICAJICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZFNlcnZlckNlcnRpZmljYXRlcyBvYmplY3QgaXMKKyAgICAJICAgICAgICAgICBpbmNyZW1lbnRlZC4gIElmIHRoZSBzZXNzaW9uIGNhbiBub3QgYmUgb3BlbmVkIGZvcgorICAgIAkgICAgICAgICAgIGFueSByZWFzb24gYXQgYWxsLCBpbmNsdWRpbmcgY3J5cHRvZ3JhcGhpYworICAgIAkgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlsdXJlcyBhbmQgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUKKyAgICAJICAgICAgICAgICBsb29rdXAgZmFpbHVyZXMsIHRoZW4gdGhlCisgICAgCSAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvbk9wZW5FcnJvcnMgY291bnRlciBpcyBpbmNyZW1lbnRlZAorICAgIAkgICAgICAgICAgIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgorICAgIAkgICAgKi8KKworCSAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKwkgICAgICAgKyBpbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBhbmQKKwkgICAgICAgICBwcmVzZW50ZWQgY29tbW9ubmFtZSBvciBzdWJqZWN0QWx0TmFtZSBpcyBjaGVja2VkCisJICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBpbiB0aGUgc25tcFRsc3RtQWRkclRhYmxlLgorCSAgICAqLyAKKyAgICAgICAgICAgIGlmICgodmVyaWZ5cmVzdWx0ID0gbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9zZXJ2ZXJfY2VydCh0bHNkYXRhLT5zc2wsIHRsc2RhdGEpKQorICAgICAgICAgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGlmICh2ZXJpZnlyZXN1bHQgPT0gU05NUEVSUl9UTFNfTk9fQ0VSVElGSUNBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogYXNzdW1lIHdlIHNpbXBseSBoYXZlbid0IHJlY2VpdmVkIGl0IHlldCBhbmQgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgaXMgbW9yZSBkYXRhIHRvIHdhaXQtZm9yIG9yIHNlbmQgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBwcm9iYWJseSBuZWVkIHRvIGNoZWNrIGZvciB3aGV0aGVyIHdlIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICBzZW5kIHN0dWZmIGZyb20gb3VyIGVuZCB0byBjb250aW51ZSB0aGUgdHJhbnNhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBmcmVlIG5lZWRlZCBtZW1vcnkgKi8KKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRUTFNVRFA6IGZhaWxlZCB0byB2ZXJpZnkgc3NsIGNlcnRpZmljYXRlIChvZiB0aGUgc2VydmVyKVxuIik7CisJCSAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OVU5LTk9XTlNFUlZFUkNFUlRJRklDQVRFKTsKKwkJICAgIC8qIFN0ZXAgNSBzYXlzIHRoZXNlIGFyZSBhbHdheXMgaW5jcmVtZW50ZWQgKi8KKwkJICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEU0VSVkVSQ0VSVElGSUNBVEVTKTsKKwkJICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVORVJST1JTKTsKKyAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGxzZGF0YS0+ZmxhZ3MgfD0gTkVUU05NUF9UTFNCQVNFX0NFUlRfRlBfVkVSSUZJRUQ7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICJWZXJpZmllZCB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGVcbiIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZm5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgICAgICAgICAgLyogdmVyaWZ5IHRoYXQgdGhlIGNsaWVudCdzIGNlcnRpZmljYXRlIGlzIHRoZSBjb3JyZWN0IG9uZSAqLworICAgICAgICAKKyAgICAgICAgICAgIGlmICgodmVyaWZ5cmVzdWx0ID0gbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9jbGllbnRfY2VydCh0bHNkYXRhLT5zc2wsIHRsc2RhdGEpKQorICAgICAgICAgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGlmICh2ZXJpZnlyZXN1bHQgPT0gU05NUEVSUl9UTFNfTk9fQ0VSVElGSUNBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogYXNzdW1lIHdlIHNpbXBseSBoYXZlbid0IHJlY2VpdmVkIGl0IHlldCBhbmQgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgaXMgbW9yZSBkYXRhIHRvIHdhaXQtZm9yIG9yIHNlbmQgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBwcm9iYWJseSBuZWVkIHRvIGNoZWNrIGZvciB3aGV0aGVyIHdlIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICBzZW5kIHN0dWZmIGZyb20gb3VyIGVuZCB0byBjb250aW51ZSB0aGUgdHJhbnNhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBmcmVlIG5lZWRlZCBtZW1vcnkgKi8KKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRUTFNVRFA6IGZhaWxlZCB0byB2ZXJpZnkgc3NsIGNlcnRpZmljYXRlIChvZiB0aGUgY2xpZW50KVxuIik7CisgICAgICAgICAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0xJRU5UQ0VSVElGSUNBVEVTKTsKKyAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGxzZGF0YS0+ZmxhZ3MgfD0gTkVUU05NUF9UTFNCQVNFX0NFUlRfRlBfVkVSSUZJRUQ7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICJWZXJpZmllZCB0aGUgY2xpZW50J3MgY2VydGlmaWNhdGVcbiIpKTsKKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyYyA+IDApCisgICAgICAgIGNhY2hlcC0+bXNnbnVtKys7CisKKyAgICBpZiAoQklPX2N0cmxfcGVuZGluZyhjYWNoZXAtPndyaXRlX2JpbykgPiAwKSB7CisgICAgICAgIF9uZXRzbm1wX3NlbmRfcXVldWVkX2R0bHNfcGt0cyh0LCBjYWNoZXApOworICAgIH0KKworICAgIERFQlVHSUYgKCI5OmR0bHN1ZHAiKSB7CisgICAgICAgIGNoYXIgKnN0ciA9CisgICAgICAgICAgICB0LT5iYXNlX3RyYW5zcG9ydC0+Zl9mbXRhZGRyKHQsIGFkZHJfcGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgICAgICBERUJVR01TR1RMKCgiOTpkdGxzdWRwIiwKKyAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tIGZkICVkIGdvdCAlZCBieXRlcyAoZnJvbSAlcylcbiIsCisgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIHJjLCBzdHIpKTsKKyAgICAgICAgZnJlZShzdHIpOworICAgIH0KKworICAgIC8qIHNlZSBpZiB3ZSBoYXZlIGJ1ZmZlcmVkIHdyaXRlIGRhdGUgdG8gc2VuZCBvdXQgZmlyc3QgKi8KKyAgICBpZiAoY2FjaGVwLT53cml0ZV9jYWNoZSkgeworICAgICAgICBpZiAoU05NUEVSUl9HRU5FUlIgPT0KKyAgICAgICAgICAgIF9uZXRzbm1wX2Jpb190cnlfYW5kX3dyaXRlX2J1ZmZlcmVkKHQsIGNhY2hlcCkpIHsKKyAgICAgICAgICAgIC8qIHdlIHN0aWxsIGhhdmUgZGF0YSB0aGF0IGNhbid0IGdldCBvdXQgaW4gdGhlIGJ1ZmZlciAqLworICAgICAgICAgICAgLyogWFhYOiBub3RoaW5nIHRvIGRvIGhlcmU/ICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmV0c25tcF90bHNiYXNlX3dyYXB1cF9yZWN2KHRtU3RhdGVSZWYsIHRsc2RhdGEsIG9wYXF1ZSwgb2xlbmd0aCkgIT0KKyAgICAgICAgU05NUEVSUl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMSwgc3RlcCA0OgorICAgICAgIDQpICBUaGUgVExTIFRyYW5zcG9ydCBNb2RlbCBwYXNzZXMgdGhlIHRyYW5zcG9ydERvbWFpbiwKKyAgICAgICAgICAgdHJhbnNwb3J0QWRkcmVzcywgaW5jb21pbmdNZXNzYWdlLCBhbmQgaW5jb21pbmdNZXNzYWdlTGVuZ3RoIHRvCisgICAgICAgICAgIHRoZSBEaXNwYXRjaGVyIHVzaW5nIHRoZSByZWNlaXZlTWVzc2FnZSBBU0k6CisKKyAgICAgICAgICBzdGF0dXNJbmZvcm1hdGlvbiA9CisgICAgICAgICAgcmVjZWl2ZU1lc3NhZ2UoCisgICAgICAgICAgSU4gICB0cmFuc3BvcnREb21haW4gICAgIC0tIHNubXBUTFNUQ1BEb21haW4gb3Igc25tcERUTFNVRFBEb21haW4sCisgICAgICAgICAgSU4gICB0cmFuc3BvcnRBZGRyZXNzICAgIC0tIGFkZHJlc3MgZm9yIHRoZSByZWNlaXZlZCBtZXNzYWdlCisgICAgICAgICAgSU4gICBpbmNvbWluZ01lc3NhZ2UgICAgICAgIC0tIHRoZSB3aG9sZSBTTk1QIG1lc3NhZ2UgZnJvbSAoRClUTFMKKyAgICAgICAgICBJTiAgIGluY29taW5nTWVzc2FnZUxlbmd0aCAgLS0gdGhlIGxlbmd0aCBvZiB0aGUgU05NUCBtZXNzYWdlCisgICAgICAgICAgSU4gICB0bVN0YXRlUmVmZXJlbmNlICAgIC0tIHRyYW5zcG9ydCBpbmZvCisgICAgICAgICAgICkKKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOiB0aG9zZSBwYW1hdGVyZXMgYXJlIGFsbCBwYXNzZWQgb3V0d2FyZAorICAgICAgIHVzaW5nIHRoZSBmdW5jdGlvbnMgYXJndW1lbnRzIGFuZCB0aGUgcmV0dXJuIGNvZGUgYmVsb3cgKHRoZSBsZW5ndGgpICovCisKKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX2R0bHN1ZHBfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKwkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIGJpb19jYWNoZSAqY2FjaGVwID0gTlVMTDsKKyAgICBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKnRtU3RhdGVSZWYgPSBOVUxMOworICAgIHVfY2hhciBvdXRidWZbNjU1MzVdOworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGEgPSBOVUxMOworICAgIGludCBzb2Nrc2l6ZTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhOworICAgIAorICAgIERFQlVHVFJBQ0VUT0soIjk6ZHRsc3VkcCIpOworICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgInNlbmRpbmcgJWQgYnl0ZXNcbiIsIHNpemUpKTsKKworICAgIGlmIChOVUxMID09IHQgfHwgdC0+c29jayA8PSAwKSB7CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0FDSEVTKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgbmV0c25tcF9kdGxzdWRwX3NlbmQgdXNhZ2VcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogZGV0ZXJtaW5lIHJlbW90ZSBhZGRyZXNzZXMgKi8KKyAgICBhZGRyX3BhaXIgPSBfZXh0cmFjdF9hZGRyX3BhaXIodCwgb3BhcXVlID8gKm9wYXF1ZSA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZW5ndGggPyAqb2xlbmd0aCA6IDApOworICAgIGlmIChOVUxMID09IGFkZHJfcGFpcikgeworICAgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjIsIHN0ZXAgMToKKyAgICAgICAxKSAgSWYgdG1TdGF0ZVJlZmVyZW5jZSBkb2VzIG5vdCByZWZlciB0byBhIGNhY2hlIGNvbnRhaW5pbmcgdmFsdWVzCisgICAgICAgICAgIGZvciB0bVRyYW5zcG9ydERvbWFpbiwgdG1UcmFuc3BvcnRBZGRyZXNzLCB0bVNlY3VyaXR5TmFtZSwKKyAgICAgICAgICAgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsLCBhbmQgdG1TYW1lU2VjdXJpdHksIHRoZW4gaW5jcmVtZW50IHRoZQorICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZENhY2hlcyBjb3VudGVyLCBkaXNjYXJkIHRoZSBtZXNzYWdlLCBhbmQKKyAgICAgICAgICAgcmV0dXJuIHRoZSBlcnJvciBpbmRpY2F0aW9uIGluIHRoZSBzdGF0dXNJbmZvcm1hdGlvbi4gIFByb2Nlc3NpbmcKKyAgICAgICAgICAgb2YgdGhpcyBtZXNzYWdlIHN0b3BzLgorICAgICAgKi8KKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDQUNIRVMpOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZHRsc3VkcF9zZW5kOiBjYW4ndCBnZXQgYWRkcmVzcyB0byBzZW5kIHRvXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4yLCBzdGVwIDI6CisgICAgICAgMikgIEV4dHJhY3QgdGhlIHRtU2Vzc2lvbklELCB0bVRyYW5zcG9ydERvbWFpbiwgdG1UcmFuc3BvcnRBZGRyZXNzLAorICAgICAgICAgICB0bVNlY3VyaXR5TmFtZSwgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsLCBhbmQgdG1TYW1lU2VjdXJpdHkKKyAgICAgICAgICAgdmFsdWVzIGZyb20gdGhlIHRtU3RhdGVSZWZlcmVuY2UuICBOb3RlOiBUaGUgdG1TZXNzaW9uSUQgdmFsdWUKKyAgICAgICAgICAgbWF5IGJlIHVuZGVmaW5lZCBpZiBubyBzZXNzaW9uIGV4aXN0cyB5ZXQgb3ZlciB3aGljaCB0aGUgbWVzc2FnZQorICAgICAgICAgICBjYW4gYmUgc2VudC4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgIC0gd2UgdXNlIHRoZSB0LT5kYXRhIG1lbW9yeSBwb2ludGVyIGFzIHRoZSBzZXNzaW9uIElECisgICAgICAgLSB0aGUgdHJhbnNwb3J0IGRvbWFpbiBpcyBhbHJlYWR5IHRoZSBjb3JyZWN0IHR5cGUgaWYgd2UgZ290IGhlcmUKKyAgICAgICAtIGlmIHdlIGRvbid0IGhhdmUgYSBzZXNzaW9uIHlldCAoZWcsIG5vIHRtU2Vzc2lvbklEIGZyb20gdGhlCisgICAgICAgICBzcGVjcykgdGhlbiB3ZSBjcmVhdGUgb25lIGF1dG9tYXRpY2FsbHkgaGVyZS4KKyAgICAqLworICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKKyAgICAgICAgb2xlbmd0aCAhPSBOVUxMICYmICpvbGVuZ3RoID09IHNpemVvZihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UpKQorICAgICAgICB0bVN0YXRlUmVmID0gKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqKSAqb3BhcXVlOworCisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMiwgc3RlcCAzOgorICAgICAgIDMpICBJZiB0bVNhbWVTZWN1cml0eSBpcyB0cnVlIGFuZCBlaXRoZXIgdG1TZXNzaW9uSUQgaXMgdW5kZWZpbmVkIG9yCisgICAgICAgICAgIHJlZmVycyB0byBhIHNlc3Npb24gdGhhdCBpcyBubyBsb25nZXIgb3BlbiB0aGVuIGluY3JlbWVudCB0aGUKKyAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvbk5vU2Vzc2lvbnMgY291bnRlciwgZGlzY2FyZCB0aGUgbWVzc2FnZSBhbmQKKyAgICAgICAgICAgcmV0dXJuIHRoZSBlcnJvciBpbmRpY2F0aW9uIGluIHRoZSBzdGF0dXNJbmZvcm1hdGlvbi4gIFByb2Nlc3NpbmcKKyAgICAgICAgICAgb2YgdGhpcyBtZXNzYWdlIHN0b3BzLgorICAgICovCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjIsIHN0ZXAgNDoKKyAgICAgICA0KSAgSWYgdG1TYW1lU2VjdXJpdHkgaXMgZmFsc2UgYW5kIHRtU2Vzc2lvbklEIHJlZmVycyB0byBhIHNlc3Npb24KKyAgICAgICAgICAgdGhhdCBpcyBubyBsb25nZXIgYXZhaWxhYmxlIHRoZW4gYW4gaW1wbGVtZW50YXRpb24gU0hPVUxEIG9wZW4gYQorICAgICAgICAgICBuZXcgc2Vzc2lvbiB1c2luZyB0aGUgb3BlblNlc3Npb24oKSBBU0kgKGRlc2NyaWJlZCBpbiBncmVhdGVyCisgICAgICAgICAgIGRldGFpbCBpbiBzdGVwIDViKS4gIEluc3RlYWQgb2Ygb3BlbmluZyBhIG5ldyBzZXNzaW9uIGFuCisgICAgICAgICAgIGltcGxlbWVudGF0aW9uIE1BWSByZXR1cm4gYSBzbm1wVGxzdG1TZXNzaW9uTm9TZXNzaW9ucyBlcnJvciB0bworICAgICAgICAgICB0aGUgY2FsbGluZyBtb2R1bGUgYW5kIHN0b3AgcHJvY2Vzc2luZyBvZiB0aGUgbWVzc2FnZS4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIE5vdGVzOgorICAgICAgIC0gV2Ugd291bGQgbmV2ZXIgZ2V0IGhlcmUgaWYgdGhlIHNlc3Npb25JRCB3YXMgZGlmZmVyZW50LiAgV2UKKyAgICAgICAgIHRpZSBwYWNrZXRzIGRpcmVjdGx5IHRvIHRoZSB0cmFuc3BvcnQgb2JqZWN0IGFuZCBpdCBjb3VsZAorICAgICAgICAgbmV2ZXIgYmUgc2VudCBiYWNrIG92ZXIgYSBkaWZmZXJlbnQgdHJhbnNwb3J0LCB3aGljaCBpcyB3aGF0CisgICAgICAgICB0aGUgYWJvdmUgdGV4dCBpcyB0cnlpbmcgdG8gcHJldmVudC4KKyAgICAgICAtIEF1dG8tY29ubmVjdGlvbnMgYXJlIGhhbmRsZWQgaGlnaGVyIGluIHRoZSBOZXQtU05NUCBsaWJyYXJ5IHN0YWNrCisgICAgICovCisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMiwgc3RlcCA1OgorICAgICAgIDUpICBJZiB0bVNlc3Npb25JRCBpcyB1bmRlZmluZWQsIHRoZW4gdXNlIHRtVHJhbnNwb3J0RG9tYWluLAorICAgICAgICAgICB0bVRyYW5zcG9ydEFkZHJlc3MsIHRtU2VjdXJpdHlOYW1lIGFuZCB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwKKyAgICAgICAgICAgdG8gc2VlIGlmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgTENEIHN1aXRhYmxlIHRvCisgICAgICAgICAgIHNlbmQgdGhlIG1lc3NhZ2Ugb3Zlci4KKworICAgICAgICAgICA1YSkgIElmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBMQ0QgZW50cnksIHRoZW4gdGhpcyBzZXNzaW9uCisgICAgICAgICAgICAgICAgd2lsbCBiZSB1c2VkIHRvIHNlbmQgdGhlIG1lc3NhZ2UuCisKKyAgICAgICAgICAgNWIpICBJZiB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIExDRCBlbnRyeSwgdGhlbiBvcGVuIGEgc2Vzc2lvbgorICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBvcGVuU2Vzc2lvbigpIEFTSSAoZGlzY3Vzc2VkIGZ1cnRoZXIgaW4KKyAgICAgICAgICAgICAgICBTZWN0aW9uIDUuMy4xKS4gIEltcGxlbWVudGF0aW9ucyBNQVkgd2lzaCB0byBvZmZlciBtZXNzYWdlCisgICAgICAgICAgICAgICAgYnVmZmVyaW5nIHRvIHByZXZlbnQgcmVkdW5kYW50IG9wZW5TZXNzaW9uKCkgY2FsbHMgZm9yIHRoZQorICAgICAgICAgICAgICAgIHNhbWUgY2FjaGUgZW50cnkuICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCBmcm9tCisgICAgICAgICAgICAgICAgb3BlblNlc3Npb24oKSwgdGhlbiBkaXNjYXJkIHRoZSBtZXNzYWdlLCBkaXNjYXJkIHRoZQorICAgICAgICAgICAgICAgIHRtU3RhdGVSZWZlcmVuY2UsIGluY3JlbWVudCB0aGUgc25tcFRsc3RtU2Vzc2lvbk9wZW5FcnJvcnMsCisgICAgICAgICAgICAgICAgcmV0dXJuIGFuIGVycm9yIGluZGljYXRpb24gdG8gdGhlIGNhbGxpbmcgbW9kdWxlIGFuZCBzdG9wCisgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBvZiB0aGUgbWVzc2FnZS4KKyAgICAqLworCisgICAgLyogd2UncmUgYWx3YXlzIGEgY2xpZW50IGlmIHdlJ3JlIHNlbmRpbmcgdG8gc29tZXRoaW5nIHVua25vd24geWV0ICovCisgICAgaWYgKE5VTEwgPT0KKyAgICAgICAgKGNhY2hlcCA9IGZpbmRfb3JfY3JlYXRlX2Jpb19jYWNoZSh0LCAmYWRkcl9wYWlyLT5yZW1vdGVfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRV9BUkVfQ0xJRU5UKSkpIHsKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5FUlJPUlMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdGxzZGF0YSA9IGNhY2hlcC0+dGxzZGF0YTsKKyAgICBpZiAoTlVMTCA9PSB0bHNkYXRhIHx8IE5VTEwgPT0gdGxzZGF0YS0+c3NsKSB7CisgICAgICAgIC8qKiB4eHggbWVtIGxlYW4/IGZyZWUgY3JlYXRlZCBiaW8gY2FjaGU/ICovCisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05OT1NFU1NJT05TKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJhZCB0bHMgZGF0YSBvciBzc2wgcHRyIGluIG5ldHNubXBfZHRsc3VkcF9zZW5kXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKCF0bHNkYXRhLT5zZWN1cml0eU5hbWUgJiYgdG1TdGF0ZVJlZiAmJgorCXRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZUxlbiA+IDApIHsKKyAgICAgICAgdGxzZGF0YS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSk7CisgICAgfQorCisgICAgLyogc2VlIGlmIHdlIGhhdmUgcHJldmlvdXMgb3V0Z29pbmcgZGF0YSB0byBzZW5kICovCisgICAgaWYgKGNhY2hlcC0+d3JpdGVfY2FjaGUpIHsKKyAgICAgICAgaWYgKFNOTVBFUlJfR0VORVJSID09IF9uZXRzbm1wX2Jpb190cnlfYW5kX3dyaXRlX2J1ZmZlcmVkKHQsIGNhY2hlcCkpIHsKKyAgICAgICAgICAgIC8qIHdlIHN0aWxsIGhhdmUgZGF0YSB0aGF0IGNhbid0IGdldCBvdXQgaW4gdGhlIGJ1ZmZlciAqLworCisgICAgICAgICAgICAvKiBhZGQgdGhlIG5ldyBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGNhY2hlICovCisgICAgICAgICAgICBpZiAoX25ldHNubXBfYWRkX2J1ZmZlcmVkX2RhdGEoY2FjaGVwLCBidWYsIHNpemUpICE9CisgICAgICAgICAgICAgICAgU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgLyogWFhYOiBmcmVlIGFuZCBjbG9zZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgREVCVUdJRiAoIjk6ZHRsc3VkcCIpIHsKKyAgICAgICAgY2hhciAqc3RyID0gdC0+YmFzZV90cmFuc3BvcnQtPmZfZm10YWRkcih0LCAodm9pZCAqKSBhZGRyX3BhaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoIjk6ZHRsc3VkcCIsICJzZW5kICVkIGJ5dGVzIGZyb20gJXAgdG8gJXMgb24gZmQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHNpemUsIGJ1Ziwgc3RyLCB0LT5zb2NrKSk7CisgICAgICAgIGZyZWUoc3RyKTsKKyAgICB9CisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMiwgc3RlcCA2OgorICAgICAgIDYpICBVc2luZyBlaXRoZXIgdGhlIHNlc3Npb24gaW5kaWNhdGVkIGJ5IHRoZSB0bVNlc3Npb25JRCBpZiB0aGVyZQorICAgICAgICAgICB3YXMgb25lIG9yIHRoZSBzZXNzaW9uIHJlc3VsdGluZyBmcm9tIGEgcHJldmlvdXMgc3RlcCAoNCBvciA1KSwKKyAgICAgICAgICAgcGFzcyB0aGUgb3V0Z29pbmdNZXNzYWdlIHRvIChEKVRMUyBmb3IgZW5jYXBzdWxhdGlvbiBhbmQKKyAgICAgICAgICAgdHJhbnNtaXNzaW9uLgorICAgICovCisgICAgcmMgPSBTU0xfd3JpdGUodGxzZGF0YS0+c3NsLCBidWYsIHNpemUpOworCisgICAgd2hpbGUgKHJjID09IC0xKSB7CisgICAgICAgIGludCBieXRlc291dDsKKyAgICAgICAgaW50IGVycm51bSA9IFNTTF9nZXRfZXJyb3IodGxzZGF0YS0+c3NsLCByYyk7CisKKyAgICAgICAgLyogZG9uJ3QgdHJlYXQgd2FudF9yZWFkL3dyaXRlIGVycm9ycyBhcyByZWFsIGVycm9ycyAqLworICAgICAgICBpZiAoZXJybnVtICE9IFNTTF9FUlJPUl9XQU5UX1JFQUQgJiYKKyAgICAgICAgICAgIGVycm51bSAhPSBTU0xfRVJST1JfV0FOVF9XUklURSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAic3NsX3dyaXRlIGVycm9yXG4iKSk7IAorICAgICAgICAgICAgX29wZW5zc2xfbG9nX2Vycm9yKHJjLCB0bHNkYXRhLT5zc2wsICJTU0xfd3JpdGUiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgb3V0Z29pbmcgRFRMUyBwYWNrZXRzIHRvIHNlbmQgKi8KKyAgICAgICAgLyogKFNTTF9yZWFkIGNvdWxkIGhhdmUgY3JlYXRlZCBEVExTIGNvbnRyb2wgcGFja2V0cykgKi8gCisgICAgICAgIGJ5dGVzb3V0ID0gX25ldHNubXBfc2VuZF9xdWV1ZWRfZHRsc19wa3RzKHQsIGNhY2hlcCk7CisKKyAgICAgICAgLyogSWYgd2FudF9yZWFkL3dyaXRlIGJ1dCBmYWlsZWQgdG8gYWN0dWFsbHkgc2VuZAorICAgICAgICAgICBhbnl0aGluZyB0aGVuIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG90aGVyIHNpZGUsCisgICAgICAgICAgIHNvIHF1aXQgKi8KKyAgICAgICAgaWYgKChlcnJudW0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCB8fAorICAgICAgICAgICAgIGVycm51bSA9PSBTU0xfRVJST1JfV0FOVF9XUklURSkgJiYKKyAgICAgICAgICAgIGJ5dGVzb3V0IDw9IDApIHsKKyAgICAgICAgICAgIC8qIFdlIG5lZWQgbW9yZSBkYXRhIHdyaXR0ZW4gdG8gb3IgcmVhZCBmcm9tIHRoZSBzb2NrZXQKKyAgICAgICAgICAgICAgIGJ1dCB3ZSdyZSBmYWlsaW5nIHRvIGRvIHNvIGFuZCBuZWVkIHRvIHdhaXQgdGlsbCB0aGUKKyAgICAgICAgICAgICAgIHNvY2tldCBpcyByZWFkeSBhZ2FpbjsgdW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHdlIG5lZWQKKyAgICAgICAgICAgICAgIHRvIGJ1ZmZlciB0aGUgU05NUCBkYXRhIHRlbXBvcmFyaWx5IGluIHRoZSBtZWFuIHRpbWUgKi8KKworICAgICAgICAgICAgLyogcmVtZW1iZXIgdGhlIHBhY2tldCAqLworICAgICAgICAgICAgaWYgKF9uZXRzbm1wX2FkZF9idWZmZXJlZF9kYXRhKGNhY2hlcCwgYnVmLCBzaXplKSAhPQorICAgICAgICAgICAgICAgIFNOTVBFUlJfU1VDQ0VTUykgeworCisgICAgICAgICAgICAgICAgLyogWFhYOiBmcmVlIGFuZCBjbG9zZSAqLworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogZXhpdCBvdXQgb2YgdGhlIGxvb3AgdW50aWwgd2UgZ2V0IGNhbGVkIGFnYWluIGZyb20KKyAgICAgICAgICAgICAgIHNvY2tldCBkYXRhICovIAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoIjk6ZHRsc3VkcCIsICJyZWNhbGxpbmcgc3NsX3dyaXRlXG4iKSk7IAorICAgICAgICByYyA9IFNTTF93cml0ZSh0bHNkYXRhLT5zc2wsIGJ1Ziwgc2l6ZSk7CisgICAgfQorCisgICAgaWYgKHJjID4gMCkKKyAgICAgICAgY2FjaGVwLT5tc2dudW0rKzsKKworICAgIC8qIGZvciBtZW1vcnkgYmlvcywgd2Ugbm93IHJlYWQgZnJvbSBvcGVuc3NsJ3Mgd3JpdGUgYnVmZmVyIChpZSwKKyAgICAgICB0aGUgcGFja2V0IHRvIGdvIG91dCkgYW5kIHNlbmQgaXQgb3V0IHRoZSB1ZHAgcG9ydCBtYW51YWxseSAqLworICAgIHJjID0gQklPX3JlYWQoY2FjaGVwLT53cml0ZV9iaW8sIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZikpOworICAgIGlmIChyYyA8PSAwKSB7CisgICAgICAgIC8qIGluIHRoZW9yeSBhbiBvayB0aGluZyAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgc29ja3NpemUgPSBuZXRzbm1wX3NvY2thZGRyX3NpemUoJmNhY2hlcC0+c2FzLnNhKTsKKyAgICBzYSA9ICZjYWNoZXAtPnNhcy5zYTsKKyAgICByYyA9IHQtPmJhc2VfdHJhbnNwb3J0LT5mX3NlbmQodCwgb3V0YnVmLCByYywgKHZvaWQqKikmc2EsICZzb2Nrc2l6ZSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX2R0bHN1ZHBfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgLyogWFhYOiBpc3N1ZSBhIHByb3BlciBkdGxzIGNsb3N1cmUgbm90aWZpY2F0aW9uKHMpICovCisKKyAgICBiaW9fY2FjaGUgKmNhY2hlcCA9IE5VTEw7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzYmFzZSA9IE5VTEw7CisKKyAgICBERUJVR1RSQUNFVE9LKCI5OmR0bHN1ZHAiKTsKKworICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwOmNsb3NlIiwgImNsb3NpbmcgZHRsc3VkcCB0cmFuc3BvcnQgJXBcbiIsIHQpKTsKKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS40LCBzdGVwIDE6CisgICAgICAgIDEpICBJbmNyZW1lbnQgZWl0aGVyIHRoZSBzbm1wVGxzdG1TZXNzaW9uQ2xpZW50Q2xvc2VzIG9yIHRoZQorICAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvblNlcnZlckNsb3NlcyBjb3VudGVyIGFzIGFwcHJvcHJpYXRlLgorICAgICovCisgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTkNMSUVOVENMT1NFUyk7CisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuNCwgc3RlcCAyOgorICAgICAgICAyKSAgTG9vayB1cCB0aGUgc2Vzc2lvbiB1c2luZyB0aGUgdG1TZXNzaW9uSUQuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAgICArIE91ciBzZXNzaW9uIGlkIGlzIHN0b3JlZCBhcyB0aGUgdC0+ZGF0YSBwb2ludGVyCisgICAgKi8KKyAgICBpZiAoTlVMTCAhPSB0LT5kYXRhICYmIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihfbmV0c25tcFRMU0Jhc2VEYXRhKSkgeworICAgICAgICB0bHNiYXNlID0gKF9uZXRzbm1wVExTQmFzZURhdGEgKikgdC0+ZGF0YTsKKworICAgICAgICBpZiAodGxzYmFzZS0+YWRkcikKKyAgICAgICAgICAgIGNhY2hlcCA9IGZpbmRfYmlvX2NhY2hlKCZ0bHNiYXNlLT5hZGRyLT5yZW1vdGVfYWRkcik7CisgICAgfQorCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjQsIHN0ZXAgMzoKKyAgICAgICAgMykgIElmIHRoZXJlIGlzIG5vIG9wZW4gc2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHRtU2Vzc2lvbklELCB0aGVuCisgICAgICAgICAgICBjbG9zZVNlc3Npb24gcHJvY2Vzc2luZyBpcyBjb21wbGV0ZWQuCisgICAgKi8KKyAgICBpZiAoTlVMTCA9PSBjYWNoZXApCisgICAgICAgIHJldHVybiBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisKKyAgICAvKiBpZiB3ZSBoYXZlIGFueSByZW1haW5pbmcgcGFja3RlcyB0byBzZW5kLCB0cnkgdG8gc2VuZCB0aGVtICovCisgICAgaWYgKGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuID4gMCkgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGNoYXIgYnVmWzgxOTJdOworICAgICAgICBpbnQgcmM7CisgICAgICAgIHZvaWQgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgIGludCBvcGFxdWVfbGVuID0gMDsKKyAgICAgICAgZmRfc2V0IHJlYWRmczsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgCisgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwOmNsb3NlIiwKKwkJICAgICIlIiBORVRTTk1QX1BSSXogImQgYnl0ZXMgcmVtYWluIGluIHdyaXRlX2NhY2hlXG4iLAorICAgICAgICAgICAgICAgICAgICBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbikpOworIAorICAgICAgICAvKgorICAgICAgICAgKiBpZiBuZWdvdGlhdGlvbnMgaGF2ZSBjb21wbGV0ZWQgYW5kIHdlJ3ZlIHJlY2VpdmVkIGRhdGEsIHRyeSBhbmQKKyAgICAgICAgICogc2VuZCBhbnkgcXVldWVkIHBhY2tldHMuCisgICAgICAgICAqLworICAgICAgICBpZiAoY2FjaGVwLT5mbGFncyAmIE5FVFNOTVBfQklPX0NPTk5FQ1RFRCkgeworICAgICAgICAgICAgLyogbWFrZSBjb25maWd1cmFibGU6CisgICAgICAgICAgICAgICAtIGRvIHRoaXMgYXQgYWxsPworICAgICAgICAgICAgICAgLSByZXRyaWVzCisgICAgICAgICAgICAgICAtIHRpbWVvdXQKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNiAmJiBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbiAhPSAwOyArK2kpIHsKKworICAgICAgICAgICAgICAgIC8qIGZpcnN0IHNlZSBpZiB3ZSBjYW4gc2VuZCBvdXQgd2hhdCB3ZSBoYXZlICovCisgICAgICAgICAgICAgICAgX25ldHNubXBfYmlvX3RyeV9hbmRfd3JpdGVfYnVmZmVyZWQodCwgY2FjaGVwKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgCisgICAgICAgICAgICAgICAgLyogaWYgd2UndmUgZmFpbGVkIHRoYXQsIHdlIHByb2JhYmx5IG5lZWQgdG8gd2FpdCBmb3IgcGFja2V0cyAqLworICAgICAgICAgICAgICAgIEZEX1pFUk8oJnJlYWRmcyk7CisgICAgICAgICAgICAgICAgRkRfU0VUKHQtPnNvY2ssICZyZWFkZnMpOworICAgICAgICAgICAgICAgIHR2LnR2X3NlYyA9IDA7CisgICAgICAgICAgICAgICAgdHYudHZfdXNlYyA9IDUwMDAwOworICAgICAgICAgICAgICAgIHJjID0gc2VsZWN0KHQtPnNvY2srMSwgJnJlYWRmcywgTlVMTCwgTlVMTCwgJnR2KTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGp1bmsgcmVjdiBmb3IgY2F0Y2hpbmcgbmVnb3RhdGlvbnMgc3RpbGwgaW4gcGxheSAqLworICAgICAgICAgICAgICAgICAgICBvcGFxdWVfbGVuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kdGxzdWRwX3JlY3YodCwgYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXF1ZSwgJm9wYXF1ZV9sZW4pOworICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIGZvciBsb29wICovCisgICAgICAgIH0KKworICAgICAgICAvKiogZHVtcCBhbnl0aGluZyB0aGF0IHdhc24ndCBzZW50ICovCisgICAgICAgIGlmIChjYWNoZXAtPndyaXRlX2NhY2hlX2xlbiA+IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwOmNsb3NlIiwKKwkJCSJkdW1waW5nICUiIE5FVFNOTVBfUFJJeiAiZCBieXRlcyBmcm9tIHdyaXRlX2NhY2hlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4pKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShjYWNoZXAtPndyaXRlX2NhY2hlKTsKKyAgICAgICAgICAgIGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS40LCBzdGVwIDQ6CisgICAgICAgIDQpICBIYXZlIChEKVRMUyBjbG9zZSB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24uICBUaGlzIE1VU1QgaW5jbHVkZQorICAgICAgICAgICAgc2VuZGluZyBhIGNsb3NlX25vdGlmeSBUTFMgQWxlcnQgdG8gaW5mb3JtIHRoZSBvdGhlciBzaWRlIHRoYXQKKyAgICAgICAgICAgIHNlc3Npb24gY2xlYW51cCBtYXkgYmUgcGVyZm9ybWVkLgorICAgICovCisgICAgaWYgKE5VTEwgIT0gY2FjaGVwLT50bHNkYXRhICYmIE5VTEwgIT0gY2FjaGVwLT50bHNkYXRhLT5zc2wpIHsKKworICAgICAgICBERUJVR01TR1RMKCgiZHRsc3VkcDpjbG9zZSIsICJjbG9zaW5nIFNTTCBzb2NrZXRcbiIpKTsKKyAgICAgICAgU1NMX3NodXRkb3duKGNhY2hlcC0+dGxzZGF0YS0+c3NsKTsKKworICAgICAgICAvKiBzZW5kIHRoZSBjbG9zZV9ub3RpZnkgd2UgbWF5YmUgZ2VuZXJhdGVkIGluIHN0ZXAgNCAqLworICAgICAgICBpZiAoQklPX2N0cmxfcGVuZGluZyhjYWNoZXAtPndyaXRlX2JpbykgPiAwKQorICAgICAgICAgICAgX25ldHNubXBfc2VuZF9xdWV1ZWRfZHRsc19wa3RzKHQsIGNhY2hlcCk7CisgICAgfQorCisgICAgcmVtb3ZlX2FuZF9mcmVlX2Jpb19jYWNoZShjYWNoZXApOworCisgICAgcmV0dXJuIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKK30KKworY2hhciAqCituZXRzbm1wX2R0bHN1ZHBfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgIHNhX2xlbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gX2ZpbmRfcmVtb3RlX3NvY2thZGRyKHQsIGRhdGEsIGxlbiwgJnNhX2xlbik7CisgICAgaWYgKHNhKSB7CisgICAgICAgIGRhdGEgPSBzYTsKKyAgICAgICAgbGVuID0gc2FfbGVuOworICAgIH0KKworICAgIHJldHVybiBuZXRzbm1wX2lwdjRfZm10YWRkcigiRFRMU1VEUCIsIHQsIGRhdGEsIGxlbik7Cit9CisKKy8qCisgKiBPcGVuIGEgRFRMUy1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCisgKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKKyAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK3N0YXRpYyBuZXRzbm1wX3RyYW5zcG9ydCAqCitfdHJhbnNwb3J0X2NvbW1vbihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgaW50IGxvY2FsKQoreworICAgIGNoYXIgKnRtcCA9IE5VTEw7CisgICAgaW50IHRtcF9sZW47CisKKyAgICBERUJVR1RSQUNFVE9LKCI5OmR0bHN1ZHAiKTsKKworICAgIGlmIChOVUxMID09IHQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoqIHNhdmUgYmFzZSB0cmFuc3BvcnQgZm9yIGNsaWVudHM7IG5lZWQgaW4gc2VuZC9yZWN2IGZ1bmN0aW9ucyBsYXRlciAqLworICAgIGlmICh0LT5kYXRhKSB7IC8qIGRvbid0IGNvcHkgZGF0YSAqLworICAgICAgICB0bXAgPSB0LT5kYXRhOworICAgICAgICB0bXBfbGVuID0gdC0+ZGF0YV9sZW5ndGg7CisgICAgICAgIHQtPmRhdGEgPSBOVUxMOworICAgIH0KKyAgICB0LT5iYXNlX3RyYW5zcG9ydCA9IG5ldHNubXBfdHJhbnNwb3J0X2NvcHkodCk7CisKKyAgICBpZiAodG1wKSB7CisgICAgICAgIHQtPmRhdGEgPSB0bXA7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gdG1wX2xlbjsKKyAgICB9CisgICAgaWYgKE5VTEwgIT0gdC0+ZGF0YSAmJgorICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpIHsKKyAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSA9CisgICAgICAgICAgICBuZXRzbm1wX3Rsc2Jhc2VfYWxsb2NhdGVfdGxzZGF0YSh0LCBsb2NhbCk7CisgICAgICAgIHRsc2RhdGEtPmFkZHIgPSB0LT5kYXRhOworICAgICAgICB0LT5kYXRhID0gdGxzZGF0YTsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YoX25ldHNubXBUTFNCYXNlRGF0YSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZXQgRG9tYWluCisgICAgICovCisgICAgdC0+ZG9tYWluID0gbmV0c25tcERUTFNVRFBEb21haW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHQtPmRvbWFpbl9sZW5ndGggPSBuZXRzbm1wRFRMU1VEUERvbWFpbl9sZW47ICAgICAKKworICAgIHQtPmZfcmVjdiAgICAgICAgICA9IG5ldHNubXBfZHRsc3VkcF9yZWN2OworICAgIHQtPmZfc2VuZCAgICAgICAgICA9IG5ldHNubXBfZHRsc3VkcF9zZW5kOworICAgIHQtPmZfY2xvc2UgICAgICAgICA9IG5ldHNubXBfZHRsc3VkcF9jbG9zZTsKKyAgICB0LT5mX2NvbmZpZyAgICAgICAgPSBuZXRzbm1wX3Rsc2Jhc2VfY29uZmlnOworICAgIHQtPmZfc2V0dXBfc2Vzc2lvbiA9IG5ldHNubXBfdGxzYmFzZV9zZXNzaW9uX2luaXQ7CisgICAgdC0+Zl9hY2NlcHQgICAgICAgID0gTlVMTDsKKyAgICB0LT5mX2ZtdGFkZHIgICAgICAgPSBuZXRzbm1wX2R0bHN1ZHBfZm10YWRkcjsKKworICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UVU5ORUxFRDsKKworICAgIHJldHVybiB0OworfQorCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2R0bHN1ZHBfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKworICAgIERFQlVHVFJBQ0VUT0soImR0bHN1ZHAiKTsKKworICAgIHQgPSBuZXRzbm1wX3VkcF90cmFuc3BvcnQoYWRkciwgbG9jYWwpOworICAgIGlmIChOVUxMID09IHQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgX3RyYW5zcG9ydF9jb21tb24odCwgbG9jYWwpOworCisgICAgaWYgKCFsb2NhbCkgeworICAgICAgICAvKiBkdGxzIG5lZWRzIHRvIGJpbmQgdGhlIHNvY2tldCBmb3IgU1NMX3dyaXRlIHRvIHdvcmsgKi8KKyAgICAgICAgaWYgKGNvbm5lY3QodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLCBzaXplb2YoKmFkZHIpKSA9PSAtMSkKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkdGxzOiBmYWlsZWQgdG8gY29ubmVjdFxuIik7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CisKKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisKK2NoYXIgKgorbmV0c25tcF9kdGxzdWRwNl9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIGludCAgICAgICAgICAgICAgc2FfbGVuOworICAgIHN0cnVjdCBzb2NrYWRkciAqc2EgPSBfZmluZF9yZW1vdGVfc29ja2FkZHIodCwgZGF0YSwgbGVuLCAmc2FfbGVuKTsKKyAgICBpZiAoc2EpIHsKKyAgICAgICAgZGF0YSA9IHNhOworICAgICAgICBsZW4gPSBzYV9sZW47CisgICAgfQorCisgICAgcmV0dXJuIG5ldHNubXBfaXB2Nl9mbXRhZGRyKCJEVExTVURQNiIsIHQsIGRhdGEsIGxlbik7Cit9CisKKy8qCisgKiBPcGVuIGEgRFRMUy1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCisgKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKKyAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfZHRsc3VkcDZfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsIGludCBsb2NhbCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisKKyAgICBERUJVR1RSQUNFVE9LKCJkdGxzdWRwIik7CisKKyAgICB0ID0gbmV0c25tcF91ZHA2X3RyYW5zcG9ydChhZGRyLCBsb2NhbCk7CisgICAgaWYgKE5VTEwgPT0gdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBfdHJhbnNwb3J0X2NvbW1vbih0LCBsb2NhbCk7CisKKyAgICBpZiAoIWxvY2FsKSB7CisgICAgICAgIC8qIGR0bHMgbmVlZHMgdG8gYmluZCB0aGUgc29ja2V0IGZvciBTU0xfd3JpdGUgdG8gd29yayAqLworICAgICAgICBpZiAoY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsIHNpemVvZigqYWRkcikpID09IC0xKQorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR0bHM6IGZhaWxlZCB0byBjb25uZWN0XG4iKTsKKyAgICB9CisKKyAgICAvKiBYWFg6IFBvdGVudGlhbGx5IHNldCBzb2NrIG9wdHMgaGVyZSAoU09fU05EQlVGL1NPX1JDVl9CVUYpICovICAgICAgCisgICAgLyogWFhYOiBhbmQgYnVmIHNpemUgKi8gICAgICAgIAorCisgICAgdC0+Zl9mbXRhZGRyICAgICAgID0gbmV0c25tcF9kdGxzdWRwNl9mbXRhZGRyOworCisgICAgcmV0dXJuIHQ7Cit9CisjZW5kaWYKKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2R0bHN1ZHBfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgaXNzZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI2OworI2VuZGlmCisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKnQ7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKyAgICBjaGFyIGJ1ZltTUFJJTlRfTUFYX0xFTl0sICpjcDsKKworICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpCisgICAgICAgIHQgPSBuZXRzbm1wX2R0bHN1ZHBfdHJhbnNwb3J0KCZhZGRyLCBpc3NlcnZlcik7CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICBlbHNlIGlmIChuZXRzbm1wX3NvY2thZGRyX2luNl8yKCZhZGRyNiwgc3RyLCBkZWZhdWx0X3RhcmdldCkpCisgICAgICAgIHQgPSBuZXRzbm1wX2R0bHN1ZHA2X3RyYW5zcG9ydCgmYWRkcjYsIGlzc2VydmVyKTsKKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKworICAgIC8qIHNlZSBpZiB3ZSBjYW4gZXh0cmFjdCB0aGUgcmVtb3RlIGhvc3RuYW1lICovCisgICAgaWYgKCFpc3NlcnZlciAmJiB0ICYmIHQtPmRhdGEgJiYgc3RyKSB7CisgICAgICAgIHRsc2RhdGEgPSAoX25ldHNubXBUTFNCYXNlRGF0YSAqKSB0LT5kYXRhOworICAgICAgICAvKiBzZWFyY2ggZm9yIGEgOiAqLworICAgICAgICBpZiAoTlVMTCAhPSAoY3AgPSBzdHJyY2hyKHN0ciwgJzonKSkpIHsKKyAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJS4qcyIsIChpbnQpIFNOTVBfTUlOKGNwIC0gc3RyLCBzaXplb2YoYnVmKSAtIDEpLAorICAgICAgICAgICAgICAgICAgICBzdHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogZWxzZSB0aGUgZW50aXJlIHNwZWMgaXMgYSBob3N0IG5hbWUgb25seSAqLworICAgICAgICAgICAgc3RybGNweShidWYsIHN0ciwgc2l6ZW9mKGJ1ZikpOworICAgICAgICB9CisgICAgICAgIHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lID0gc3RyZHVwKGJ1Zik7CisgICAgfQorICAgIHJldHVybiB0OworfQorCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfZHRsc3VkcF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKworICAgIGlmIChvX2xlbiA9PSA2KSB7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnR0bXAgPSAob1s0XSA8PCA4KSArIG9bNV07CisgICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2luX2FkZHIuc19hZGRyKSwgbywgNCk7CisgICAgICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0dG1wKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfZHRsc3VkcF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICBlbHNlIGlmIChvX2xlbiA9PSAxOCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI2OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0dG1wID0gKG9bMTZdIDw8IDgpICsgb1sxN107CisgICAgICAgIGFkZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHI2LnNpbjZfYWRkci5zNl9hZGRyKSwgbywgNCk7CisgICAgICAgIGFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKHBvcnR0bXApOworICAgICAgICByZXR1cm4gbmV0c25tcF9kdGxzdWRwNl90cmFuc3BvcnQoJmFkZHI2LCBsb2NhbCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK25ldHNubXBfZHRsc3VkcF9jdG9yKHZvaWQpCit7CisgICAgY2hhciBpbmRleG5hbWVbXSA9ICJfbmV0c25tcF9hZGRyX2luZm8iOworICAgIHN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXhlc1tdID0geyAiZHRsc3VkcCIsICJkdGxzIgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgImR0bHN1ZHA2IiwgImR0bHM2IgorI2VuZGlmCisgICAgfTsKKyAgICBpbnQgaSwgbnVtX3ByZWZpeGVzID0gc2l6ZW9mKHByZWZpeGVzKSAvIHNpemVvZihjaGFyICopOworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisgICAgY2hhciBpbmRleG5hbWU2W10gPSAiX25ldHNubXBfYWRkcl9pbmZvNiI7CisjZW5kaWYKKworICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgInJlZ2lzdGVyaW5nIERUTFMgY29uc3RydWN0b3JcbiIpKTsKKworICAgIC8qIGNvbmZpZyBzZXR0aW5ncyAqLworCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICBpZiAoIW9wZW5zc2xfYWRkcl9pbmRleDYpCisgICAgICAgIG9wZW5zc2xfYWRkcl9pbmRleDYgPQorICAgICAgICAgICAgU1NMX2dldF9leF9uZXdfaW5kZXgoMCwgaW5kZXhuYW1lNiwgTlVMTCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKKworICAgIGR0bHN1ZHBEb21haW4ubmFtZSA9IG5ldHNubXBEVExTVURQRG9tYWluOworICAgIGR0bHN1ZHBEb21haW4ubmFtZV9sZW5ndGggPSBuZXRzbm1wRFRMU1VEUERvbWFpbl9sZW47CisgICAgZHRsc3VkcERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYyhudW1fcHJlZml4ZXMgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNoYXIgKikpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcHJlZml4ZXM7ICsrIGkpCisgICAgICAgIGR0bHN1ZHBEb21haW4ucHJlZml4W2ldID0gcHJlZml4ZXNbaV07CisKKyAgICBkdGxzdWRwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOworICAgIGR0bHN1ZHBEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfZHRsc3VkcF9jcmVhdGVfdHN0cmluZzsKKyAgICBkdGxzdWRwRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX2R0bHN1ZHBfY3JlYXRlX29zdHJpbmc7CisKKyAgICBpZiAoIW9wZW5zc2xfYWRkcl9pbmRleCkKKyAgICAgICAgb3BlbnNzbF9hZGRyX2luZGV4ID0KKyAgICAgICAgICAgIFNTTF9nZXRfZXhfbmV3X2luZGV4KDAsIGluZGV4bmFtZSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJmR0bHN1ZHBEb21haW4pOworfQorCisvKgorICogTXVjaCBvZiB0aGUgY29kZSBiZWxvdyB3YXMgdGFrZW4gZnJvbSB0aGUgT3BlblNTTCBleGFtcGxlIGNvZGUKKyAqIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuU1NMIGNvcHlyaWdodC4KKyAqLworI2RlZmluZQlORVRTTk1QX0NPT0tJRV9TRUNSRVRfTEVOR1RICTE2CitpbnQgY29va2llX2luaXRpYWxpemVkPTA7Cit1bnNpZ25lZCBjaGFyIGNvb2tpZV9zZWNyZXRbTkVUU05NUF9DT09LSUVfU0VDUkVUX0xFTkdUSF07CisKK3R5cGVkZWYgdW5pb24geworICAgICAgIHN0cnVjdCBzb2NrYWRkciBzYTsKKyAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gczQ7CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHM2OworI2VuZGlmCit9IF9wZWVyX3VuaW9uOworCitpbnQgbmV0c25tcF9kdGxzX2dlbl9jb29raWUoU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKmNvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmNvb2tpZV9sZW4pCit7CisgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCByZXN1bHRbRVZQX01BWF9NRF9TSVpFXTsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoLCByZXN1bHRsZW5ndGg7CisgICAgYmlvX2NhY2hlICpjYWNoZXAgPSBOVUxMOworICAgIF9wZWVyX3VuaW9uICpwZWVyOworCisgICAgLyogSW5pdGlhbGl6ZSBhIHJhbmRvbSBzZWNyZXQgKi8KKyAgICBpZiAoIWNvb2tpZV9pbml0aWFsaXplZCkgeworICAgICAgICBpZiAoIVJBTkRfYnl0ZXMoY29va2llX3NlY3JldCwgTkVUU05NUF9DT09LSUVfU0VDUkVUX0xFTkdUSCkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkdGxzOiBlcnJvciBzZXR0aW5nIHJhbmRvbSBjb29raWUgc2VjcmV0XG4iKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGNvb2tpZV9pbml0aWFsaXplZCA9IDE7CisgICAgfQorCisgICAgREVCVUdNU0dUKCgiZHRsc3VkcDpjb29raWUiLCAiZ2VuZXJhdGluZyBjb29raWUuLi5cbiIpKTsKKworICAgIC8qIFJlYWQgcGVlciBpbmZvcm1hdGlvbiAqLworICAgIGNhY2hlcCA9IFNTTF9nZXRfZXhfZGF0YShzc2wsIG9wZW5zc2xfYWRkcl9pbmRleCk7CisgICAgaWYgKCFjYWNoZXApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR0bHM6IGZhaWxlZCB0byBnZXQgdGhlIHBlZXIgYWRkcmVzc1xuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBwZWVyID0gKF9wZWVyX3VuaW9uICopJmNhY2hlcC0+c2FzOworCisgICAgLyogQ3JlYXRlIGJ1ZmZlciB3aXRoIHBlZXIncyBhZGRyZXNzIGFuZCBwb3J0ICovCisgICAgbGVuZ3RoID0gMDsKKyAgICBzd2l0Y2ggKHBlZXItPnNhLnNhX2ZhbWlseSkgeworICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YocGVlci0+czQuc2luX3BvcnQpOworICAgICAgICBicmVhazsKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgIGxlbmd0aCArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihwZWVyLT5zNi5zaW42X3BvcnQpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkdGxzIGdlbmVyYXRpbmcgY29va2llOiB1bmtub3duIGZhbWlseTogJWRcbiIsCisgICAgICAgICAgICAgICAgIHBlZXItPnNhLnNhX2ZhbWlseSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBidWZmZXIgPSBtYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZHRsczogb3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN3aXRjaCAocGVlci0+c2Euc2FfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICBtZW1jcHkoYnVmZmVyLAorICAgICAgICAgICAgICAgJnBlZXItPnM0LnNpbl9wb3J0LAorICAgICAgICAgICAgICAgc2l6ZW9mKHBlZXItPnM0LnNpbl9wb3J0KSk7CisgICAgICAgIG1lbWNweShidWZmZXIgKyBzaXplb2YocGVlci0+czQuc2luX3BvcnQpLAorICAgICAgICAgICAgICAgJnBlZXItPnM0LnNpbl9hZGRyLAorICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisgICAgICAgIGJyZWFrOworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwKKyAgICAgICAgICAgICAgICZwZWVyLT5zNi5zaW42X3BvcnQsCisgICAgICAgICAgICAgICBzaXplb2YocGVlci0+czYuc2luNl9wb3J0KSk7CisgICAgICAgIG1lbWNweShidWZmZXIgKyBzaXplb2YocGVlci0+czYuc2luNl9wb3J0KSwKKyAgICAgICAgICAgICAgICZwZWVyLT5zNi5zaW42X2FkZHIsCisgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR0bHM6IHVua25vd24gYWRkcmVzcyBmYW1pbHkgZ2VuZXJhdGluZyBhIGNvb2tpZVxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSBITUFDIG9mIGJ1ZmZlciB1c2luZyB0aGUgc2VjcmV0ICovCisgICAgSE1BQyhFVlBfc2hhMSgpLCBjb29raWVfc2VjcmV0LCBORVRTTk1QX0NPT0tJRV9TRUNSRVRfTEVOR1RILAorICAgICAgICAgYnVmZmVyLCBsZW5ndGgsIHJlc3VsdCwgJnJlc3VsdGxlbmd0aCk7CisgICAgT1BFTlNTTF9mcmVlKGJ1ZmZlcik7CisKKyAgICBtZW1jcHkoY29va2llLCByZXN1bHQsIHJlc3VsdGxlbmd0aCk7CisgICAgKmNvb2tpZV9sZW4gPSByZXN1bHRsZW5ndGg7CisKKyAgICBERUJVR01TR1QoKCI5OmR0bHN1ZHA6Y29va2llIiwgImdlbmVyYXRlZCAlZCBieXRlIGNvb2tpZVxuIiwgKmNvb2tpZV9sZW4pKTsKKworICAgIHJldHVybiAxOworfQorCitpbnQgbmV0c25tcF9kdGxzX3ZlcmlmeV9jb29raWUoU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKmNvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29va2llX2xlbikKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHJlc3VsdFtFVlBfTUFYX01EX1NJWkVdOworICAgIHVuc2lnbmVkIGludCBsZW5ndGgsIHJlc3VsdGxlbmd0aCwgcmM7CisgICAgYmlvX2NhY2hlICpjYWNoZXAgPSBOVUxMOworICAgIF9wZWVyX3VuaW9uICpwZWVyOworCisgICAgLyogSWYgc2VjcmV0IGlzbid0IGluaXRpYWxpemVkIHlldCwgdGhlIGNvb2tpZSBjYW4ndCBiZSB2YWxpZCAqLworICAgIGlmICghY29va2llX2luaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIERFQlVHTVNHVCgoIjk6ZHRsc3VkcDpjb29raWUiLCAidmVyaWZ5aW5nICVkIGJ5dGUgY29va2llXG4iLCBjb29raWVfbGVuKSk7CisKKyAgICBjYWNoZXAgPSBTU0xfZ2V0X2V4X2RhdGEoc3NsLCBvcGVuc3NsX2FkZHJfaW5kZXgpOworICAgIGlmICghY2FjaGVwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkdGxzOiBmYWlsZWQgdG8gZ2V0IHRoZSBwZWVyIGFkZHJlc3NcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcGVlciA9IChfcGVlcl91bmlvbiAqKSZjYWNoZXAtPnNhczsKKworICAgIC8qIENyZWF0ZSBidWZmZXIgd2l0aCBwZWVyJ3MgYWRkcmVzcyBhbmQgcG9ydCAqLworICAgIGxlbmd0aCA9IDA7CisgICAgc3dpdGNoIChwZWVyLT5zYS5zYV9mYW1pbHkpIHsKKyAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgIGxlbmd0aCArPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKHBlZXItPnM0LnNpbl9wb3J0KTsKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YocGVlci0+czYuc2luNl9wb3J0KTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZHRsczogdW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCBnZW5lcmF0aW5nIGEgY29va2llXG4iLAorICAgICAgICAgICAgICAgICBwZWVyLT5zYS5zYV9mYW1pbHkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYnVmZmVyID0gbWFsbG9jKGxlbmd0aCk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkdGxzOiB1bmtub3duIGFkZHJlc3MgZmFtaWx5IGdlbmVyYXRpbmcgYSBjb29raWVcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBlZXItPnNhLnNhX2ZhbWlseSkgeworICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwKKyAgICAgICAgICAgICAgICZwZWVyLT5zNC5zaW5fcG9ydCwKKyAgICAgICAgICAgICAgIHNpemVvZihwZWVyLT5zNC5zaW5fcG9ydCkpOworICAgICAgICBtZW1jcHkoYnVmZmVyICsgc2l6ZW9mKHBlZXItPnM0LnNpbl9wb3J0KSwKKyAgICAgICAgICAgICAgICZwZWVyLT5zNC5zaW5fYWRkciwKKyAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworICAgICAgICBicmVhazsKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgIG1lbWNweShidWZmZXIsCisgICAgICAgICAgICAgICAmcGVlci0+czYuc2luNl9wb3J0LAorICAgICAgICAgICAgICAgc2l6ZW9mKHBlZXItPnM2LnNpbjZfcG9ydCkpOworICAgICAgICBtZW1jcHkoYnVmZmVyICsgc2l6ZW9mKHBlZXItPnM2LnNpbjZfcG9ydCksCisgICAgICAgICAgICAgICAmcGVlci0+czYuc2luNl9hZGRyLAorICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJkdGxzOiB1bmtub3duIGFkZHJlc3MgZmFtaWx5ICVkIGdlbmVyYXRpbmcgYSBjb29raWVcbiIsCisgICAgICAgICAgICAgICAgIHBlZXItPnNhLnNhX2ZhbWlseSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSBITUFDIG9mIGJ1ZmZlciB1c2luZyB0aGUgc2VjcmV0ICovCisgICAgSE1BQyhFVlBfc2hhMSgpLCBjb29raWVfc2VjcmV0LCBORVRTTk1QX0NPT0tJRV9TRUNSRVRfTEVOR1RILAorICAgICAgICAgYnVmZmVyLCBsZW5ndGgsIHJlc3VsdCwgJnJlc3VsdGxlbmd0aCk7CisgICAgT1BFTlNTTF9mcmVlKGJ1ZmZlcik7CisKKyAgICBpZiAoY29va2llX2xlbiAhPSByZXN1bHRsZW5ndGggfHwgbWVtY21wKHJlc3VsdCwgY29va2llLCByZXN1bHRsZW5ndGgpICE9IDApCisgICAgICAgIHJjID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgcmMgPSAxOworICAgICAgICBjYWNoZXAtPmZsYWdzIHw9IE5FVFNOTVBfQklPX0hBVkVfQ09PS0lFOworICAgIH0KKworICAgIERFQlVHTVNHVCgoImR0bHN1ZHA6Y29va2llIiwgInZlcmlmeSBjb29raWU6ICVkXG4iLCByYykpOworCisgICAgcmV0dXJuIHJjOworfQorCisjZW5kaWYgLyogSEFWRV9MSUJTU0xfRFRMUyAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0NjE1NgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMKQEAgLTAsMCArMSw0NjkgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorCisjZGVmaW5lIFNOTVBfSVBYX0RFRkFVTFRfUE9SVAkzNjg3OSAgIC8qICBTcGVjaWZpZWQgaW4gUkZDIDE0MjAuICAqLworc3RhdGljIG5ldHNubXBfdGRvbWFpbiBpcHhEb21haW47CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgorICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKKyAqLworCitzdGF0aWMgY2hhciAqCituZXRzbm1wX2lweF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pcHggKnRvID0gTlVMTDsKKworICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaXB4ICopIGRhdGE7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pcHggKikgdC0+ZGF0YTsKKyAgICB9CisgICAgaWYgKHRvID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHN0cmR1cCgiSVBYOiB1bmtub3duIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciB0bXBbNjRdOworICAgICAgICBzcHJpbnRmKHRtcCwgIklQWDogJTA4WDolMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgvJWh1IiwKKyAgICAgICAgICAgICAgICBudG9obCh0by0+c2lweF9uZXR3b3JrKSwgdG8tPnNpcHhfbm9kZVswXSwKKyAgICAgICAgICAgICAgICB0by0+c2lweF9ub2RlWzFdLCB0by0+c2lweF9ub2RlWzJdLCB0by0+c2lweF9ub2RlWzNdLAorICAgICAgICAgICAgICAgIHRvLT5zaXB4X25vZGVbNF0sIHRvLT5zaXB4X25vZGVbNV0sIG50b2hzKHRvLT5zaXB4X3BvcnQpKTsKKyAgICAgICAgcmV0dXJuIHN0cmR1cCh0bXApOworICAgIH0KK30KKworCisKKy8qCisgKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKKyAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KKyAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCisgKi8KKworc3RhdGljIGludAorbmV0c25tcF9pcHhfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKwkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQJCSAgICAgcmMgPSAtMTsKKyAgICBzb2NrbGVuX3QJICAgICBmcm9tbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7CisgICAgc3RydWN0IHNvY2thZGRyICpmcm9tOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKyAgICAgICAgZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHIgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKKyAgICAgICAgaWYgKGZyb20gPT0gTlVMTCkgeworICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1zZXQoZnJvbSwgMCwgZnJvbWxlbik7CisgICAgICAgIH0KKworCXdoaWxlIChyYyA8IDApIHsKKwkgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBmcm9tLCAmZnJvbWxlbik7CisJICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJICAgIGJyZWFrOworCSAgfQorCX0KKworICAgICAgICBpZiAocmMgPj0gMCkgeworICAgICAgICAgICAgREVCVUdJRigibmV0c25tcF9pcHgiKSB7CisgICAgICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF9pcHhfZm10YWRkcihOVUxMLCBmcm9tLCBmcm9tbGVuKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9pcHgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSBmZCAlZCBnb3QgJWQgYnl0ZXMoZnJvbSAlcylcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgcmMsIHN0cikpOworICAgICAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lweCIsICJyZWN2ZnJvbSBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgIH0KKyAgICAgICAgKm9wYXF1ZSA9ICh2b2lkICopIGZyb207CisgICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX2lweF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworICAgIHN0cnVjdCBzb2NrYWRkciAqdG8gPSBOVUxMOworCisgICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgorCSpvbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCpvcGFxdWUpOworICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgdC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAodC0+ZGF0YSk7CisgICAgfQorCisgICAgaWYgKHRvICE9IE5VTEwgJiYgdCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBERUJVR0lGKCJuZXRzbm1wX2lweCIpIHsKKyAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfaXB4X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKil0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lweCIsICJzZW5kICVkIGJ5dGVzIGZyb20gJXAgdG8gJXMgb24gZmQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplLCBidWYsIHN0ciwgdC0+c29jaykpOworICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICB9CisJd2hpbGUgKHJjIDwgMCkgeworCSAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIHRvLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfaXB4X2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIGludCByYyA9IC0xOworICAgIGlmICh0LT5zb2NrID49IDApIHsKKyNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAorICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOworI2Vsc2UKKyAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKKyNlbmRpZgorICAgICAgICB0LT5zb2NrID0gLTE7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworCisKKy8qCisgKiBPcGVuIGEgSVBYLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKKyAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAorICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF9pcHhfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pcHggKmFkZHIsIGludCBsb2NhbCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKKworI2lmZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICBpZiAobG9jYWwpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKworICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2lweF9mYW1pbHkgIT0gQUZfSVBYKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHSUYoIm5ldHNubXBfaXB4IikgeworICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX2lweF9mbXRhZGRyKE5VTEwsICh2b2lkICopYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9pcHgiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCisgICAgICAgICAgICAgICAgICAgIHN0cikpOworICAgICAgICBmcmVlKHN0cik7CisgICAgfQorCisgICAgdC0+ZG9tYWluID0gbmV0c25tcElQWERvbWFpbjsKKyAgICB0LT5kb21haW5fbGVuZ3RoID0gbmV0c25tcElQWERvbWFpbl9sZW47CisKKyAgICB0LT5zb2NrID0gc29ja2V0KEFGX0lQWCwgU09DS19ER1JBTSwgQUZfSVBYKTsKKyAgICBpZiAodC0+c29jayA8IDApIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGxvY2FsKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICAgICAgdC0+bG9jYWwgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDEyKTsKKyAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoJih0LT5sb2NhbFswMF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfbmV0d29yayksIDQpOworICAgICAgICBtZW1jcHkoJih0LT5sb2NhbFswNF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfbm9kZSksIDYpOworICAgICAgICBtZW1jcHkoJih0LT5sb2NhbFsxMF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfcG9ydCksIDIpOworICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSAxMjsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5lZGVkIGFzIGEgc2VydmVyLCBzbyB3ZSBtdXN0IGJpbmQgb24gdG8gdGhlCisgICAgICAgICAqIGdpdmVuIGFkZHJlc3MgKHdoaWNoIG1heSBpbmNsdWRlIGEgcGFydGljdWxhciBuZXR3b3JrIGFuZC9vciBub2RlCisgICAgICAgICAqIGFkZHJlc3MsIGJ1dCBkZWZpbml0ZWx5IGluY2x1ZGVzIGEgcG9ydCBudW1iZXIpLgorICAgICAgICAgKi8KKworICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAorICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9pcHhfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdC0+ZGF0YSA9IE5VTEw7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gMDsKKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIHQtPnJlbW90ZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTIpOworICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoJih0LT5yZW1vdGVbMDBdKSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaXB4X25ldHdvcmspLCA0KTsKKyAgICAgICAgbWVtY3B5KCYodC0+cmVtb3RlWzA0XSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9ub2RlKSwgNik7CisgICAgICAgIG1lbWNweSgmKHQtPnJlbW90ZVsxMF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfcG9ydCksIDIpOworICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gMTI7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudCBzZXNzaW9uLiAgU2F2ZSB0aGUgYWRkcmVzcyBpbiB0aGUKKyAgICAgICAgICogdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIGJ5IHNubXBfaXB4X3NlbmQuCisgICAgICAgICAqLworCisgICAgICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKKyAgICAgICAgaWYgKHQtPmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5kYXRhLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOworICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1heGltdW0gc2l6ZSBvZiBhbiBJUFggUERVIGlzIDU3NiBieXRlcyBpbmNsdWRpbmcgYSAzMC1ieXRlIGhlYWRlci4KKyAgICAgKiBSaWRpY3Vsb3VzISAgCisgICAgICovCisKKyAgICB0LT5tc2dNYXhTaXplID0gNTc2IC0gMzA7CisgICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfaXB4X3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfaXB4X3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfaXB4X2Nsb3NlOworICAgIHQtPmZfYWNjZXB0ICAgPSBOVUxMOworICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX2lweF9mbXRhZGRyOworCisgICAgcmV0dXJuIHQ7Cit9CisKKworCisvKgorICogQXR0ZW1wdCB0byBwYXJzZSBhIHN0cmluZyBvZiB0aGUgZm9ybSBbJTA4eF06JTEyeFsvJWRdIHdoZXJlIHRoZSBwYXJ0cworICogYXJlIHRoZSBuZXR3b3JrIG51bWJlciwgdGhlIG5vZGUgYWRkcmVzcyBhbmQgdGhlIHBvcnQgaW4gdGhhdCBvcmRlci4gIAorICovCisKK2ludAorbmV0c25tcF9zb2NrYWRkcl9pcHgyKHN0cnVjdCBzb2NrYWRkcl9pcHggKmFkZHIsIGNvbnN0IGNoYXIgKnBlZXJuYW1lLAorCQkgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBjaGFyICAgICAgICAgICAqaW5wdXQgPSBOVUxMLCAqZGVmID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICAgICAqbmV0d29yaywgKm5vZGUsICpwb3J0OworICAgIGNoYXIgICAgICAgICAgICp0bXA7CisgICAgdW5zaWduZWQgbG9uZyAgIGk7CisKKyAgICBpZiAoYWRkciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKKworICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsCisJCSJhZGRyICVwLCBwZWVybmFtZSBcIiVzXCIgZGVmYXVsdF90YXJnZXQgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgIGFkZHIsIHBlZXJuYW1lID8gcGVlcm5hbWUgOiAiW05JTF0iLAorCQlkZWZhdWx0X3RhcmdldCA/IGRlZmF1bHRfdGFyZ2V0IDogIltOSUxdIikpOworCisgICAgYWRkci0+c2lweF9mYW1pbHkgPSBBRl9JUFg7CisgICAgYWRkci0+c2lweF90eXBlID0gNDsgICAgICAgIC8qICBTcGVjaWZpZWQgaW4gUkZDIDE0MjAuICAqLworCisgICAgbmV0d29yayA9IGlucHV0ID0gc3RyZHVwKHBlZXJuYW1lID8gcGVlcm5hbWUgOiAiIik7CisgICAgdG1wID0gc3RyY2hyKGlucHV0LCAnOicpOworICAgIGlmICh0bXAgIT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiTm9kZSBpZGVudGlmaWVkXG4iKSk7CisgICAgICAgICp0bXArKyA9ICdcMCc7CisJbm9kZSA9IHRtcDsKKyAgICAgICAgdG1wID0gc3RyY2hyKHRtcCwgJy8nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBub2RlID0gTlVMTDsKKyAgICAgICAgdG1wID0gc3RyY2hyKGlucHV0LCAnLycpOworICAgIH0KKyAgICBpZiAodG1wICE9IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIlBvcnQgaWRlbnRpZmllZFxuIikpOworICAgICAgICAqdG1wKysgPSAnXDAnOworICAgICAgICBwb3J0ID0gdG1wOworICAgIH0gZWxzZQorICAgICAgICBwb3J0ID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJBZGRyZXNzOiAlczolcy8lc1xuIiwKKyAgICAgICAgICAgICAgICBuZXR3b3JrID8gbmV0d29yayA6ICJbTklMXSIsIG5vZGUgPyBub2RlIDogIltOSUxdIiwKKyAgICAgICAgICAgICAgICBwb3J0ID8gcG9ydCA6ICJbTklMXSIpKTsKKworICAgIGRlZiA9IHN0cmR1cChkZWZhdWx0X3RhcmdldCA/IGRlZmF1bHRfdGFyZ2V0IDogIiIpOworICAgIGlmIChuZXR3b3JrID09IE5VTEwgfHwgKm5ldHdvcmsgPT0gJ1wwJykKKyAgICAgICAgbmV0d29yayA9IGRlZjsKKyAgICB0bXAgPSBzdHJjaHIoZGVmLCAnOicpOworICAgIGlmICh0bXAgIT0gTlVMTCkgeworICAgICAgICAqdG1wKysgPSAnXDAnOworCWlmIChub2RlID09IE5VTEwgfHwgKm5vZGUgPT0gJ1wwJykKKyAgICAgICAgICAgIG5vZGUgPSB0bXA7CisgICAgICAgIHRtcCA9IHN0cmNocih0bXAsICcvJyk7CisgICAgfSBlbHNlCisgICAgICAgIHRtcCA9IHN0cmNocihkZWYsICcvJyk7CisgICAgaWYgKHRtcCAhPSBOVUxMKSB7CisgICAgICAgICp0bXArKyA9ICdcMCc7CisgICAgICAgIGlmIChwb3J0ID09IE5VTEwgfHwgKnBvcnQgPT0gJ1wwJykKKyAgICAgICAgICAgIHBvcnQgPSB0bXA7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIkFkZHJlc3M6ICVzOiVzLyVzXG4iLAorICAgICAgICAgICAgICAgIG5ldHdvcmsgPyBuZXR3b3JrIDogIltOSUxdIiwgbm9kZSA/IG5vZGUgOiAiW05JTF0iLAorICAgICAgICAgICAgICAgIHBvcnQgPyBwb3J0IDogIltOSUxdIikpOworCisgICAgaWYgKG5ldHdvcmsgPT0gTlVMTCB8fCAqbmV0d29yayA9PSAnXDAnKQorICAgICAgICBuZXR3b3JrID0gIjAiOworCisgICAgaWYgKG5vZGUgPT0gTlVMTCB8fCAqbm9kZSA9PSAnXDAnKQorICAgICAgICBub2RlID0gIjAwMDAwMDAwMDAwMCI7CisKKyAgICBpZiAocG9ydCA9PSBOVUxMIHx8ICpwb3J0ID09ICdcMCcpCisjZGVmaW5lIHZhbCh4KSBfX1NUUklORyh4KQorICAgICAgICBwb3J0ID0gdmFsKFNOTVBfSVBYX0RFRkFVTFRfUE9SVCk7CisjdW5kZWYgdmFsCisKKyAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiQWRkcmVzczogJXM6JXMvJXNcbiIsCisgICAgICAgICAgICAgICAgbmV0d29yayA/IG5ldHdvcmsgOiAiW05JTF0iLCBub2RlID8gbm9kZSA6ICJbTklMXSIsCisgICAgICAgICAgICAgICAgcG9ydCA/IHBvcnQgOiAiW05JTF0iKSk7CisKKyAgICBpZihzc2NhbmYobmV0d29yaywgIiU4bHglKmMiLCAmaSkgPT0gMSkgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAibmV0d29yayBwYXJzZWQgb2theVxuIikpOworICAgICAgICBhZGRyLT5zaXB4X25ldHdvcmsgPSBodG9ubChpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLAorICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIG5ldHdvcmsgcGFydCBvZiBhZGRyZXNzXG4iKSk7CisgICAgICAgIGZyZWUoZGVmKTsKKyAgICAgICAgZnJlZShpbnB1dCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmKHNzY2FuZihub2RlLCAiJTJoaHglMmhoeCUyaGh4JTJoaHglMmhoeCUyaGh4JSpjIiwKKyAgICAgICAgICAgICAgJmFkZHItPnNpcHhfbm9kZVswXSwgJmFkZHItPnNpcHhfbm9kZVsxXSwKKyAgICAgICAgICAgICAgJmFkZHItPnNpcHhfbm9kZVsyXSwgJmFkZHItPnNpcHhfbm9kZVszXSwKKyAgICAgICAgICAgICAgJmFkZHItPnNpcHhfbm9kZVs0XSwgJmFkZHItPnNpcHhfbm9kZVs1XSkgPT0gNikgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAibm9kZSBwYXJzZWQgb2theVxuIikpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsCisgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2Ugbm9kZSBwYXJ0IG9mIGFkZHJlc3NcbiIpKTsKKyAgICAgICAgZnJlZShkZWYpOworICAgICAgICBmcmVlKGlucHV0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYoc3NjYW5mKHBvcnQsICIlbHUlKmMiLCAmaSkgPT0gMSkgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAicG9ydCBwYXJzZWQgb2theVxuIikpOworICAgICAgICBhZGRyLT5zaXB4X3BvcnQgPSBodG9ucyhpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLAorICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIHBvcnQgcGFydCBvZiBhZGRyZXNzXG4iKSk7CisgICAgICAgIGZyZWUoZGVmKTsKKyAgICAgICAgZnJlZShpbnB1dCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGZyZWUoZGVmKTsKKyAgICBmcmVlKGlucHV0KTsKKyAgICByZXR1cm4gMTsKK30KKworCisKK2ludAorbmV0c25tcF9zb2NrYWRkcl9pcHgoc3RydWN0IHNvY2thZGRyX2lweCAqYWRkciwgY29uc3QgY2hhciAqcGVlcm5hbWUpCit7CisgICAgcmV0dXJuIG5ldHNubXBfc29ja2FkZHJfaXB4MihhZGRyLCBwZWVybmFtZSwgTlVMTCk7Cit9CisKKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2lweF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKKwkJCSAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pcHggYWRkcjsKKworICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2lweDIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7CisgICAgICAgIHJldHVybiBuZXRzbm1wX2lweF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2lweF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaXB4IGFkZHI7CisKKyAgICBpZiAob19sZW4gPT0gMTIpIHsKKyAgICAgICAgYWRkci5zaXB4X2ZhbWlseSA9IEFGX0lQWDsKKyAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaXB4X25ldHdvcmspLCAmKG9bMDBdKSwgNCk7CisgICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2lweF9ub2RlKSwgJihvWzA0XSksIDYpOworICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpcHhfcG9ydCksICYob1sxMF0pLCAyKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfaXB4X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCisKK3ZvaWQKK25ldHNubXBfaXB4X2N0b3Iodm9pZCkKK3sKKyAgICBpcHhEb21haW4ubmFtZSA9IG5ldHNubXBJUFhEb21haW47CisgICAgaXB4RG9tYWluLm5hbWVfbGVuZ3RoID0gbmV0c25tcElQWERvbWFpbl9sZW47CisgICAgaXB4RG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKKyAgICBpcHhEb21haW4ucHJlZml4WzBdID0gImlweCI7CisKKyAgICBpcHhEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7CisgICAgaXB4RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX2lweF9jcmVhdGVfdHN0cmluZzsKKyAgICBpcHhEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfaXB4X2NyZWF0ZV9vc3RyaW5nOworCisgICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZpcHhEb21haW4pOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTE1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMKQEAgLTAsMCArMSwyMjMgQEAKKy8qIElQVjQgYmFzZSB0cmFuc3BvcnQgc3VwcG9ydCBmdW5jdGlvbnMKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorCisKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUgICAgIC0xCisjZW5kaWYKKworaW50CituZXRzbm1wX3NvY2thZGRyX2luKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgaW50IHJlbW90ZV9wb3J0KQoreworICAgIGNoYXIgYnVmW3NpemVvZihpbnQpICogMyArIDJdOworICAgIHNwcmludGYoYnVmLCAiOiV1IiwgcmVtb3RlX3BvcnQpOworICAgIHJldHVybiBuZXRzbm1wX3NvY2thZGRyX2luMihhZGRyLCBpbnBlZXJuYW1lLCByZW1vdGVfcG9ydCA/IGJ1ZiA6IE5VTEwpOworfQorCitpbnQKK25ldHNubXBfc29ja2FkZHJfaW4yKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIGludCByZXQ7CisKKyAgICBpZiAoYWRkciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKKyAgICAgICAgICAgICAgICAiYWRkciAlcCwgaW5wZWVybmFtZSBcIiVzXCIsIGRlZmF1bHRfdGFyZ2V0IFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICBhZGRyLCBpbnBlZXJuYW1lID8gaW5wZWVybmFtZSA6ICJbTklMXSIsCisgICAgICAgICAgICAgICAgZGVmYXVsdF90YXJnZXQgPyBkZWZhdWx0X3RhcmdldCA6ICJbTklMXSIpKTsKKworICAgIG1lbXNldChhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisgICAgYWRkci0+c2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgYWRkci0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgYWRkci0+c2luX3BvcnQgPSBodG9ucygodV9zaG9ydClTTk1QX1BPUlQpOworCisgICAgeworCWludCBwb3J0ID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKwkJCQkgICAgICBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQpOworCisJaWYgKHBvcnQgIT0gMCkgeworCSAgICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKCh1X3Nob3J0KXBvcnQpOworCX0gZWxzZSBpZiAoZGVmYXVsdF90YXJnZXQgIT0gTlVMTCkKKwkgICAgbmV0c25tcF9zb2NrYWRkcl9pbjIoYWRkciwgZGVmYXVsdF90YXJnZXQsIE5VTEwpOworICAgIH0KKworICAgIGlmIChpbnBlZXJuYW1lICE9IE5VTEwgJiYgKmlucGVlcm5hbWUgIT0gJ1wwJykgeworCWNvbnN0IGNoYXIgICAgICpob3N0LCAqcG9ydDsKKwljaGFyICAgICAgICAgICAqcGVlcm5hbWUgPSBOVUxMOworICAgICAgICBjaGFyICAgICAgICAgICAqY3A7CisgICAgICAgIC8qCisgICAgICAgICAqIER1cGxpY2F0ZSB0aGUgcGVlcm5hbWUgYmVjYXVzZSB3ZSBtaWdodCB3YW50IHRvIG1hbmsgYXJvdW5kIHdpdGgKKyAgICAgICAgICogaXQuCisgICAgICAgICAqLworCisgICAgICAgIHBlZXJuYW1lID0gc3RyZHVwKGlucGVlcm5hbWUpOworICAgICAgICBpZiAocGVlcm5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBUcnkgYW5kIGV4dHJhY3QgYW4gYXBwZW5kZWQgcG9ydCBudW1iZXIuCisgICAgICAgICAqLworICAgICAgICBjcCA9IHN0cmNocihwZWVybmFtZSwgJzonKTsKKyAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICpjcCA9ICdcMCc7CisgICAgICAgICAgICBwb3J0ID0gY3AgKyAxOworICAgICAgICAgICAgaG9zdCA9IHBlZXJuYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaG9zdCA9IE5VTEw7CisgICAgICAgICAgICBwb3J0ID0gcGVlcm5hbWU7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBUcnkgdG8gY29udmVydCB0aGUgdXNlciBwb3J0IHNwZWNpZmllcgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHBvcnQgJiYgKnBvcnQgPT0gJ1wwJykKKyAgICAgICAgICAgIHBvcnQgPSBOVUxMOworCisgICAgICAgIGlmIChwb3J0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGxvbmcgaW50IGw7CisgICAgICAgICAgICBjaGFyKiBlcDsKKworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLCAiY2hlY2sgdXNlciBzZXJ2aWNlICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCkpOworCisgICAgICAgICAgICBsID0gc3RydG9sKHBvcnQsICZlcCwgMTApOworICAgICAgICAgICAgaWYgKGVwICE9IHBvcnQgJiYgKmVwID09ICdcMCcgJiYgMCA8PSBsICYmIGwgPD0gMHgwZmZmZikKKyAgICAgICAgICAgICAgICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKCh1X3Nob3J0KWwpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGhvc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXJ2bmFtZSBub3QgbnVtZXJpYywgIgorCQkJCSJjaGVjayBpZiBpdCByZWFsbHkgaXMgYSBkZXN0aW5hdGlvbilcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHBvcnQ7CisgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBOVUxMOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZuYW1lIG5vdCBudW1lcmljXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBUcnkgdG8gY29udmVydCB0aGUgdXNlciBob3N0IHNwZWNpZmllcgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGhvc3QgJiYgKmhvc3QgPT0gJ1wwJykKKyAgICAgICAgICAgIGhvc3QgPSBOVUxMOworCisgICAgICAgIGlmIChob3N0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjaGVjayBkZXN0aW5hdGlvbiAlc1xuIiwgaG9zdCkpOworCisKKyAgICAgICAgICAgIGlmIChzdHJjbXAocGVlcm5hbWUsICIyNTUuMjU1LjI1NS4yNTUiKSA9PSAwICkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogVGhlIGV4cGxpY2l0IGJyb2FkY2FzdCBhZGRyZXNzIGhhY2sKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsICJFeHBsaWNpdCBVRFAgYnJvYWRjYXN0XG4iKSk7CisgICAgICAgICAgICAgICAgYWRkci0+c2luX2FkZHIuc19hZGRyID0gSU5BRERSX05PTkU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldCA9CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0aG9zdGJ5bmFtZV92NChwZWVybmFtZSwgJmFkZHItPnNpbl9hZGRyLnNfYWRkcik7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgcmVzb2x2ZSBob3N0bmFtZVxuIikpOworICAgICAgICAgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwlmcmVlKHBlZXJuYW1lKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbmlzaGVkCisgICAgICovCisKKyAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsICJyZXR1cm4geyBBRl9JTkVULCAlczolaHUgfVxuIiwKKyAgICAgICAgICAgICAgICBpbmV0X250b2EoYWRkci0+c2luX2FkZHIpLCBudG9ocyhhZGRyLT5zaW5fcG9ydCkpKTsKKyAgICByZXR1cm4gMTsKK30KKworY2hhciAqCituZXRzbm1wX2lwdjRfZm10YWRkcihjb25zdCBjaGFyICpwcmVmaXgsIG5ldHNubXBfdHJhbnNwb3J0ICp0LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIHN0cnVjdCBob3N0ZW50ICpob3N0OworICAgIGNoYXIgdG1wWzY0XTsKKworICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSkgeworCWFkZHJfcGFpciA9IChuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICopIGRhdGE7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7CisJYWRkcl9wYWlyID0gKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKikgdC0+ZGF0YTsKKyAgICB9CisKKyAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKKyAgICAgICAgc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzOiB1bmtub3duIiwgcHJlZml4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnRvID0gTlVMTDsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7CisgICAgICAgIGlmICh0byA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXM6IHVua25vd24tPlslc106JWh1IiwgcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKGFkZHJfcGFpci0+bG9jYWxfYWRkci5zaW4uc2luX2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgbnRvaHMoYWRkcl9wYWlyLT5sb2NhbF9hZGRyLnNpbi5zaW5fcG9ydCkpOworICAgICAgICB9IGVsc2UgaWYgKCB0ICYmIHQtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19IT1NUTkFNRSApIHsKKyAgICAgICAgICAgIC8qIFhYWDogaG1tLi4uICB3aHkgaXNuJ3QgdGhpcyBwcmVmaXhlZCAqLworICAgICAgICAgICAgLyogYXNzdW1pbmcgaW50ZW50aW9uYWwgKi8KKyAgICAgICAgICAgIGhvc3QgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoKGNoYXIgKikmdG8tPnNpbl9hZGRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBBRl9JTkVUKTsKKyAgICAgICAgICAgIHJldHVybiAoaG9zdCA/IHN0cmR1cChob3N0LT5oX25hbWUpIDogTlVMTCk7IAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzOiBbJXNdOiVodS0+IiwgcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKHRvLT5zaW5fYWRkciksIG50b2hzKHRvLT5zaW5fcG9ydCkpOworICAgICAgICAgICAgc25wcmludGYodG1wICsgc3RybGVuKHRtcCksIHNpemVvZih0bXApLXN0cmxlbih0bXApLCAiWyVzXTolaHUiLAorICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKGFkZHJfcGFpci0+bG9jYWxfYWRkci5zaW4uc2luX2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgbnRvaHMoYWRkcl9wYWlyLT5sb2NhbF9hZGRyLnNpbi5zaW5fcG9ydCkpOworICAgICAgICB9CisgICAgfQorICAgIHRtcFtzaXplb2YodG1wKS0xXSA9ICdcMCc7CisgICAgcmV0dXJuIHN0cmR1cCh0bXApOworfQorCmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkNjg4OAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYwpAQCAtMCwwICsxLDQyMyBAQAorLyogSVBWNiBiYXNlIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CisKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKworCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoSUZfTkFNRVNJWkUpCisjZGVmaW5lIElGX05BTUVTSVpFIDEyCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkgJiYgIWRlZmluZWQobWluZ3czMikKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnkgPSBJTjZBRERSX0FOWV9JTklUOworI2VuZGlmCisKKworc3RhdGljIHVuc2lnbmVkCituZXRzbm1wX2lmX25hbWV0b2luZGV4KGNvbnN0IGNoYXIgKmlmbmFtZSkKK3sKKyNpZiBkZWZpbmVkKFdJTjMyKQorICAgIHJldHVybiBhdG9pKGlmbmFtZSk7CisjZWxpZiBkZWZpbmVkKEhBVkVfSUZfTkFNRVRPSU5ERVgpCisgICAgcmV0dXJuIGlmX25hbWV0b2luZGV4KGlmbmFtZSk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyBjaGFyICoKK25ldHNubXBfaWZfaW5kZXh0b25hbWUodW5zaWduZWQgaWZpbmRleCwgY2hhciAqaWZuYW1lKQoreworI2lmIGRlZmluZWQoV0lOMzIpCisgICAgc25wcmludGYoaWZuYW1lLCBJRl9OQU1FU0laRSwgIiV1IiwgaWZpbmRleCk7CisgICAgcmV0dXJuIGlmbmFtZTsKKyNlbGlmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkKKyAgICByZXR1cm4gaWZfaW5kZXh0b25hbWUoaWZpbmRleCwgaWZuYW1lKTsKKyNlbHNlCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworY2hhciAqCituZXRzbm1wX2lwdjZfZm10YWRkcihjb25zdCBjaGFyICpwcmVmaXgsIG5ldHNubXBfdHJhbnNwb3J0ICp0LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICp0byA9IE5VTEw7CisgICAgY2hhciBhZGRyW0lORVQ2X0FERFJTVFJMRU5dOworICAgIGNoYXIgdG1wW0lORVQ2X0FERFJTVFJMRU4gKyAxOF07CisKKyAgICBERUJVR01TR1RMKCgibmV0c25tcF9pcHY2IiwgImZtdGFkZHI6IHQgPSAlcCwgZGF0YSA9ICVwLCBsZW4gPSAlZFxuIiwgdCwKKyAgICAgICAgICAgICAgICBkYXRhLCBsZW4pKTsKKyAgICBpZiAoZGF0YSAhPSBOVUxMICYmIGxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkYXRhOworICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHQtPmRhdGE7CisgICAgfQorICAgIGlmICh0byA9PSBOVUxMKSB7CisgICAgICAgIHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlczogdW5rbm93biIsIHByZWZpeCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciBzY29wZV9pZFtJRl9OQU1FU0laRSArIDFdID0gIiI7CisKKyNpZiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQorCWlmICh0by0+c2luNl9zY29wZV9pZAorICAgICAgICAgICAgJiYgbmV0c25tcF9pZl9pbmRleHRvbmFtZSh0by0+c2luNl9zY29wZV9pZCwgJnNjb3BlX2lkWzFdKSkgeworICAgICAgICAgICAgc2NvcGVfaWRbMF0gPSAnJSc7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXM6IFslcyVzXTolaHUiLCBwcmVmaXgsCisgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgKHZvaWQgKikgJih0by0+c2luNl9hZGRyKSwgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElORVQ2X0FERFJTVFJMRU4pLCBzY29wZV9pZCwgbnRvaHModG8tPnNpbjZfcG9ydCkpOworICAgIH0KKyAgICB0bXBbc2l6ZW9mKHRtcCktMV0gPSAnXDAnOworICAgIHJldHVybiBzdHJkdXAodG1wKTsKK30KKworaW50CituZXRzbm1wX3NvY2thZGRyX2luNl8yKHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIGNoYXIgICAgICAgICAgICpjcCA9IE5VTEwsICpwZWVybmFtZSA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgIGRlYnVnX2FkZHJbSU5FVDZfQUREUlNUUkxFTl07CisjaWYgSEFWRV9HRVRBRERSSU5GTworICAgIHN0cnVjdCBhZGRyaW5mbyAqYWRkcnMgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICBlcnI7CisjZWxpZiBIQVZFX0dFVElQTk9ERUJZTkFNRQorICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIGVycjsKKyNlbGlmIEhBVkVfR0VUSE9TVEJZTkFNRQorICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CisjZW5kaWYKKyAgICBpbnQgICAgICAgICAgICAgcG9ydG5vOworCisgICAgaWYgKGFkZHIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsCisJCSJhZGRyICVwLCBwZWVybmFtZSBcIiVzXCIsIGRlZmF1bHRfdGFyZ2V0IFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICBhZGRyLCBpbnBlZXJuYW1lID8gaW5wZWVybmFtZSA6ICJbTklMXSIsCisJCWRlZmF1bHRfdGFyZ2V0ID8gZGVmYXVsdF90YXJnZXQgOiAiW05JTF0iKSk7CisKKyAgICBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICBhZGRyLT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgIGFkZHItPnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKCh1X3Nob3J0KVNOTVBfUE9SVCk7CisKKyAgICB7CisgICAgICAgIGludCBwb3J0ID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUKTsKKyAgICAgICAgaWYgKHBvcnQgIT0gMCkKKyAgICAgICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKCh1X3Nob3J0KXBvcnQpOworICAgICAgICBlbHNlIGlmIChkZWZhdWx0X3RhcmdldCAhPSBOVUxMKQorICAgICAgICAgICAgbmV0c25tcF9zb2NrYWRkcl9pbjZfMihhZGRyLCBkZWZhdWx0X3RhcmdldCwgTlVMTCk7CisgICAgfQorCisgICAgaWYgKGlucGVlcm5hbWUgIT0gTlVMTCkgeworICAgICAgICAvKgorICAgICAgICAgKiBEdXBsaWNhdGUgdGhlIHBlZXJuYW1lIGJlY2F1c2Ugd2UgbWlnaHQgd2FudCB0byBtYW5rIGFyb3VuZCB3aXRoCisgICAgICAgICAqIGl0LiAgCisgICAgICAgICAqLworCisgICAgICAgIHBlZXJuYW1lID0gc3RyZHVwKGlucGVlcm5hbWUpOworICAgICAgICBpZiAocGVlcm5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBjcCA9IHBlZXJuYW1lOworICAgICAgICBpZiAoKmNwID09ICc6JykgY3ArKzsKKyAgICAgICAgcG9ydG5vID0gYXRvaShjcCk7CisgICAgICAgIHdoaWxlICgqY3AgJiYgaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKmNwKSkgY3ArKzsKKyAgICAgICAgaWYgKCEqY3AgJiYgIHBvcnRubyAhPSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogT2theSwgaXQgbG9va3MgbGlrZSBKVVNUIGEgcG9ydCBudW1iZXIuICAKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAidG90YWxseSBudW1lcmljOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRubykpOworICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydG5vKTsKKyAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTZWUgaWYgaXQgaXMgYW4gSVB2NiBhZGRyZXNzIGNvdmVyZWQgd2l0aCBzcXVhcmUgYnJhY2tldHMuIEFsc28gY2hlY2sKKyAgICAgICAgICogZm9yIGFuIGFwcGVuZGVkIDpwb3J0LiAgCisgICAgICAgICAqLworICAgICAgICBpZiAoKnBlZXJuYW1lID09ICdbJykgeworICAgICAgICAgICAgY3AgPSBzdHJjaHIocGVlcm5hbWUsICddJyk7CisgICAgICAgICAgICBpZiAoY3AgIT0gTlVMTCkgeworCSAgICAgIC8qCisJICAgICAgICogU2VlIGlmIGl0IGlzIGFuIElQdjYgbGluay1sb2NhbCBhZGRyZXNzIHdpdGggaW50ZXJmYWNlCisJICAgICAgICogbmFtZSBhcyA8em9uZV9pZD4sIGxpa2UgZmU4MDo6MTIzNCVldGgwLgorCSAgICAgICAqIFBsZWFzZSByZWZlciB0byB0aGUgaW50ZXJuZXQgZHJhZnQsIElQdjYgU2NvcGVkIEFkZHJlc3MgQXJjaGl0ZWN0dXJlCisJICAgICAgICogaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1pcG5nd2ctc2NvcGluZy1hcmNoLTA0LnR4dAorCSAgICAgICAqCisJICAgICAgICovCisJICAgICAgICBjaGFyICpzY29wZV9pZDsKKwkgICAgICAgIHVuc2lnbmVkIGludCBpZl9pbmRleCA9IDA7CisgICAgICAgICAgICAgICAgKmNwID0gJ1wwJzsKKwkJc2NvcGVfaWQgPSBzdHJjaHIocGVlcm5hbWUgKyAxLCAnJScpOworCQlpZiAoc2NvcGVfaWQgIT0gTlVMTCkgeworCQkgICAgKnNjb3BlX2lkID0gJ1wwJzsKKwkJICAgIGlmX2luZGV4ID0gbmV0c25tcF9pZl9uYW1ldG9pbmRleChzY29wZV9pZCArIDEpOworCQl9CisgICAgICAgICAgICAgICAgaWYgKCooY3AgKyAxKSA9PSAnOicpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9ydG5vID0gYXRvaShjcCsyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvcnRubyAhPSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X3B0b24oQUZfSU5FVDYsIHBlZXJuYW1lICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmKGFkZHItPnNpbjZfYWRkcikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVB2NiBhZGRyZXNzIHdpdGggcG9ydCBzdWZmaXggOiVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydG5vKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9ydG5vID4gMCAmJiBwb3J0bm8gPD0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydG5vKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAiaW52YWxpZCBwb3J0IG51bWJlcjogJWQiLCBwb3J0bm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3Njb3BlX2lkID0gaWZfaW5kZXg7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5ldF9wdG9uCisgICAgICAgICAgICAgICAgICAgICAgICAoQUZfSU5FVDYsIHBlZXJuYW1lICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmKGFkZHItPnNpbjZfYWRkcikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVB2NiBhZGRyZXNzIHdpdGggc3F1YXJlIGJyYWNrZXRzXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3J0bm8gPSBudG9ocyhhZGRyLT5zaW42X3BvcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcnRubyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRubyA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9ydG5vIDw9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydG5vID0gU05NUF9QT1JUOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydG5vKTsKKyNpZiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9zY29wZV9pZCA9IGlmX2luZGV4OworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc29sdmVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCQlpZiAoc2NvcGVfaWQgIT0gTlVMTCkgeworCQkgICpzY29wZV9pZCA9ICclJzsKKwkJfQorCQkqY3AgPSAnXSc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjcCA9IHN0cnJjaHIocGVlcm5hbWUsICc6Jyk7CisgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CisJICAgIGNoYXIgKnNjb3BlX2lkOworCSAgICB1bnNpZ25lZCBpbnQgaWZfaW5kZXggPSAwOworCSAgICAqY3AgPSAnXDAnOworCSAgICBzY29wZV9pZCA9IHN0cmNocihwZWVybmFtZSArIDEsICclJyk7CisJICAgIGlmIChzY29wZV9pZCAhPSBOVUxMKSB7CisJICAgICAgICAqc2NvcGVfaWQgPSAnXDAnOworCSAgICAgICAgaWZfaW5kZXggPSBuZXRzbm1wX2lmX25hbWV0b2luZGV4KHNjb3BlX2lkICsgMSk7CisJICAgIH0KKyAgICAgICAgICAgIHBvcnRubyA9IGF0b2koY3AgKyAxKTsKKyAgICAgICAgICAgIGlmIChwb3J0bm8gIT0gMCAmJgorICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgcGVlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICYoYWRkci0+c2luNl9hZGRyKSkpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklQdjYgYWRkcmVzcyB3aXRoIHBvcnQgc3VmZml4IDolZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9pKGNwICsgMSkpKTsKKyAgICAgICAgICAgICAgICBpZiAocG9ydG5vID4gMCAmJiBwb3J0bm8gPD0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKCh1X3Nob3J0KXBvcnRubyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAiaW52YWxpZCBwb3J0IG51bWJlcjogJWQiLCBwb3J0bm8pKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCkKKyAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3Njb3BlX2lkID0gaWZfaW5kZXg7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBnb3RvIHJlc29sdmVkOworICAgICAgICAgICAgfQorCSAgICBpZiAoc2NvcGVfaWQgIT0gTlVMTCkgeworCSAgICAgICpzY29wZV9pZCA9ICclJzsKKwkgICAgfQorICAgICAgICAgICAgKmNwID0gJzonOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU2VlIGlmIGl0IGlzIEpVU1QgYW4gSVB2NiBhZGRyZXNzLiAgCisgICAgICAgICAqLworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBwZWVybmFtZSwgKHZvaWQgKikgJihhZGRyLT5zaW42X2FkZHIpKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAianVzdCBJUHY2IGFkZHJlc3NcbiIpKTsKKyAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBXZWxsLCBpdCBtdXN0IGJlIGEgaG9zdG5hbWUgdGhlbiwgcG9zc2libHkgd2l0aCBhbiBhcHBlbmRlZCA6cG9ydC4KKyAgICAgICAgICogU29ydCB0aGF0IG91dCBmaXJzdC4gIAorICAgICAgICAgKi8KKworICAgICAgICBjcCA9IHN0cnJjaHIocGVlcm5hbWUsICc6Jyk7CisgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CisgICAgICAgICAgICAqY3AgPSAnXDAnOworICAgICAgICAgICAgcG9ydG5vID0gYXRvaShjcCArIDEpOworICAgICAgICAgICAgaWYgKHBvcnRubyAhPSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSg/KSB3aXRoIHBvcnQgc3VmZml4IDolZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0bm8pKTsKKyAgICAgICAgICAgICAgICBpZiAocG9ydG5vID4gMCAmJiBwb3J0bm8gPD0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfcG9ydCA9IGh0b25zKCh1X3Nob3J0KXBvcnRubyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAiaW52YWxpZCBwb3J0IG51bWJlcjogJWQiLCBwb3J0bm8pKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogTm8gaWRlYSwgbG9va3MgYm9ndXMgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgcGFzcyB0aGUgZnVsbCB0aGluZyB0bworICAgICAgICAgICAgICAgICAqIHRoZSBuYW1lIHJlc29sdmVyIGJlbG93LiAgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgKmNwID0gJzonOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUoPykgd2l0aCBlbWJlZGRlZCAnOic/XG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRmFsbCB0aHJvdWdoLiAgCisgICAgICAgICAgICAgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVybmFtZVswXSA9PSAnXDAnKSB7CisgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAiZW1wdHkgaG9zdG5hbWVcbiIpKTsKKyAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisjaWYgSEFWRV9HRVRBRERSSU5GTworICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludCA9IHsgMCB9OworICAgICAgICAgICAgaGludC5haV9mbGFncyA9IDA7CisgICAgICAgICAgICBoaW50LmFpX2ZhbWlseSA9IFBGX0lORVQ2OworICAgICAgICAgICAgaGludC5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07CisgICAgICAgICAgICBoaW50LmFpX3Byb3RvY29sID0gMDsKKworICAgICAgICAgICAgZXJyID0gbmV0c25tcF9nZXRhZGRyaW5mbyhwZWVybmFtZSwgTlVMTCwgJmhpbnQsICZhZGRycyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChhZGRycyAhPSBOVUxMKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKKyAgICAgICAgICAgIG1lbWNweSgmYWRkci0+c2luNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcnMtPmFpX2FkZHIpLT5zaW42X2FkZHIsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworICAgICAgICAgICAgZnJlZWFkZHJpbmZvKGFkZHJzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwgIkZhaWxlZCB0byByZXNvbHZlIElQdjYgaG9zdG5hbWVcbiIpKTsKKyAgICAgICAgfQorI2VsaWYgSEFWRV9HRVRJUE5PREVCWU5BTUUKKyAgICAgICAgaHAgPSBnZXRpcG5vZGVieW5hbWUocGVlcm5hbWUsIEFGX0lORVQ2LCAwLCAmZXJyKTsKKyAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAoY291bGRuJ3QgcmVzb2x2ZSA9ICVkKVxuIiwgZXJyKSk7CisgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOworICAgICAgICBtZW1jcHkoJihhZGRyLT5zaW42X2FkZHIpLCBocC0+aF9hZGRyLCBocC0+aF9sZW5ndGgpOworI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FCisgICAgICAgIGhwID0gbmV0c25tcF9nZXRob3N0YnluYW1lKHBlZXJuYW1lKTsKKyAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAoY291bGRuJ3QgcmVzb2x2ZSlcbiIpKTsKKyAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVDYpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChub3QgQUZfSU5FVDYhKVxuIikpOworICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOworICAgICAgICAgICAgICAgIG1lbWNweSgmKGFkZHItPnNpbjZfYWRkciksIGhwLT5oX2FkZHIsIGhwLT5oX2xlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLypIQVZFX0dFVEhPU1RCWU5BTUUgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlcmUgaXMgbm8gbmFtZSByZXNvbHZpbmcgZnVuY3Rpb24gYXZhaWxhYmxlLiAgCisgICAgICAgICAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAibm8gZ2V0YWRkcmluZm8oKS9nZXRpcG5vZGVieW5hbWUoKS9nZXRob3N0YnluYW1lKClcbiIpOworICAgICAgICBmcmVlKHBlZXJuYW1lKTsKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qSEFWRV9HRVRIT1NUQllOQU1FICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAiTlVMTCBwZWVybmFtZSIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHJlc29sdmVkOgorICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwgInJldHVybiB7IEFGX0lORVQ2LCBbJXNdOiVodSB9XG4iLAorICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHItPnNpbjZfYWRkciwgZGVidWdfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRlYnVnX2FkZHIpKSwgbnRvaHMoYWRkci0+c2luNl9wb3J0KSkpOworICAgIGZyZWUocGVlcm5hbWUpOworICAgIHJldHVybiAxOworfQorCisKK2ludAorbmV0c25tcF9zb2NrYWRkcl9pbjYoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGludCByZW1vdGVfcG9ydCkKK3sKKyAgICBjaGFyIGJ1ZltzaXplb2YocmVtb3RlX3BvcnQpICogMyArIDJdOworICAgIHNwcmludGYoYnVmLCAiOiV1IiwgcmVtb3RlX3BvcnQpOworICAgIHJldHVybiBuZXRzbm1wX3NvY2thZGRyX2luNl8yKGFkZHIsIGlucGVlcm5hbWUsIHJlbW90ZV9wb3J0ID8gYnVmIDogTlVMTCk7Cit9CisKKyNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWVkODFmCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYwpAQCAtMCwwICsxLDEwMTAgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxsaWJzc2gyLmg+CisjaW5jbHVkZSA8bGlic3NoMl9zZnRwLmg+CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVU5fSAorI2luY2x1ZGUgPHN5cy91bi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHB3ZC5oPgorCisjaWZuZGVmIE1BWFBBVEhMRU4KKyN3YXJuIG5vIHN5c3RlbSBtYXggcGF0aCBsZW5ndGggZGV0ZWN0ZWQKKyNkZWZpbmUgTUFYUEFUSExFTiAyMDQ4CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodXNlcl9pbmZvcm1hdGlvbikKKworI2RlZmluZSBNQVhfTkFNRV9MRU5HVEggMTI3CisKKyNkZWZpbmUgTkVUU05NUF9TU0hUT1NOTVBfVkVSU0lPTjEgICAgICAxCisjZGVmaW5lIE5FVFNOTVBfTUFYX1NTSFRPU05NUF9WRVJTSU9OICAgMQorCisjZGVmaW5lIERFRkFVTFRfU09DS19OQU1FICJzc2hkb21haW5zb2NrZXQiCisKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfc3NoX2FkZHJfcGFpcl9zIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVtb3RlX2FkZHI7CisgICAgc3RydWN0IGluX2FkZHIgbG9jYWxfYWRkcjsKKyAgICBMSUJTU0gyX1NFU1NJT04gKnNlc3Npb247CisgICAgTElCU1NIMl9DSEFOTkVMICpjaGFubmVsOworICAgIGNoYXIgdXNlcm5hbWVbTUFYX05BTUVfTEVOR1RIKzFdOworICAgIHN0cnVjdCBzb2NrYWRkcl91biB1bml4X3NvY2tldF9lbmQ7CisgICAgY2hhciBzb2NrZXRfcGF0aFtNQVhQQVRITEVOXTsKK30gbmV0c25tcF9zc2hfYWRkcl9wYWlyOworCitjb25zdCBvaWQgbmV0c25tcF9zbm1wU1NIRG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fU1NIX0lQIH07CitzdGF0aWMgbmV0c25tcF90ZG9tYWluIHNzaERvbWFpbjsKKworI2RlZmluZSBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFIDEKKworLyoKKyAqIE5vdCBzdGF0aWMgc2luY2UgaXQgaXMgbmVlZGVkIGhlcmUgYXMgd2VsbCBhcyBpbiBzbm1wVURQRG9tYWluLCBidXQgbm90CisgKiBwdWJsaWMgZWl0aGVyCisgKi8KK2ludAorbmV0c25tcF9zb2NrYWRkcl9pbjIoc3RydWN0IHNvY2thZGRyX2luICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpOworCisvKgorICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKKyAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCisgKi8KKworc3RhdGljIGNoYXIgKgorbmV0c25tcF9zc2hfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICBuZXRzbm1wX3NzaF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMICYmIGxlbiA9PSBzaXplb2YobmV0c25tcF9zc2hfYWRkcl9wYWlyKSkgeworCWFkZHJfcGFpciA9IChuZXRzbm1wX3NzaF9hZGRyX3BhaXIgKikgZGF0YTsKKyAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKKwlhZGRyX3BhaXIgPSAobmV0c25tcF9zc2hfYWRkcl9wYWlyICopIHQtPmRhdGE7CisgICAgfQorCisgICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzdHJkdXAoIlNTSDogdW5rbm93biIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqdG8gPSBOVUxMOworCWNoYXIgdG1wWzY0XTsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7CisgICAgICAgIGlmICh0byA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gc3RyZHVwKCJTU0g6IHVua25vd24iKTsKKyAgICAgICAgfQorCisgICAgICAgIHNwcmludGYodG1wLCAiU1NIOiBbJXNdOiVoZCIsCisgICAgICAgICAgICAgICAgaW5ldF9udG9hKHRvLT5zaW5fYWRkciksIG50b2hzKHRvLT5zaW5fcG9ydCkpOworICAgICAgICByZXR1cm4gc3RyZHVwKHRtcCk7CisgICAgfQorfQorCisKKworLyoKKyAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAorICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bworICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKKyAqLworCitzdGF0aWMgaW50CituZXRzbm1wX3NzaF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiA9IE5VTEw7CisgICAgbmV0c25tcF9zc2hfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIGludCBpYW1jbGllbnQgPSAwOworCisgICAgREVCVUdNU0dUTCgoInNzaCIsICJhdCB0aGUgdG9wIG9mIHNzaF9yZWN2XG4iKSk7CisgICAgREVCVUdNU0dUTCgoInNzaCIsICJ0PSVwXG4iLCB0KSk7CisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKKwlhZGRyX3BhaXIgPSAobmV0c25tcF9zc2hfYWRkcl9wYWlyICopIHQtPmRhdGE7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoInNzaCIsICJhZGRyX3BhaXI9JXBcbiIsIGFkZHJfcGFpcikpOworICAgIGlmICh0ICE9IE5VTEwgJiYgYWRkcl9wYWlyICYmIGFkZHJfcGFpci0+Y2hhbm5lbCkgeworICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgInQ9JXAsIGFkZHJfcGFpcj0lcCwgY2hhbm5lbD0lcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdCwgYWRkcl9wYWlyLCBhZGRyX3BhaXItPmNoYW5uZWwpKTsKKyAgICAgICAgaWFtY2xpZW50ID0gMTsKKwl3aGlsZSAocmMgPCAwKSB7CisJICAgIHJjID0gbGlic3NoMl9jaGFubmVsX3JlYWQoYWRkcl9wYWlyLT5jaGFubmVsLCBidWYsIHNpemUpOworCSAgICBpZiAocmMgPCAwKSB7ICAvKiBYWFg6IGZyb20gdGNwOyBzc2ggZXF1aXY/OiAgJiYgZXJybm8gIT0gRUlOVFIgKi8KKwkJREVCVUdNU0dUTCgoInNzaCIsICJyZWN2IGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKKwkJCSAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisJCWJyZWFrOworCSAgICB9CisJICAgIERFQlVHTVNHVEwoKCJzc2giLCAicmVjdiBmZCAlZCBnb3QgJWQgYnl0ZXNcbiIsCisJCQl0LT5zb2NrLCByYykpOworCX0KKyAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCkgeworCisjaWZkZWYgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRQorCisgICAgICAgIHNvY2tsZW5fdCAgICAgICB0b2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOworCisgICAgICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvOworICAgICAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopIFNOTVBfTUFMTE9DX1NUUlVDVChzb2NrYWRkcl91bik7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSB0bykgeworICAgICAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOworICAgICAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKGdldHNvY2tuYW1lKHQtPnNvY2ssIHRvLCAmdG9sZW4pICE9IDApeworICAgICAgICAgICAgICAgIGZyZWUodG8pOworICAgICAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOworICAgICAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoYWRkcl9wYWlyLT51c2VybmFtZVswXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgLyogd2UgZG9uJ3QgaGF2ZSBhIHVzZXJuYW1lIHlldCwgc28gdGhpcyBpcyB0aGUgZmlyc3QgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCB1Y3JlZCAqcmVtb3RldXNlcjsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaW92ZWMgaW92WzFdOworICAgICAgICAgICAgICAgIGNoYXIgY21zZ1tDTVNHX1NQQUNFKHNpemVvZihyZW1vdGV1c2VyKSkrNDA5Nl07CisgICAgICAgICAgICAgICAgc3RydWN0IGNtc2doZHIgKmNtc2dwdHI7CisgICAgICAgICAgICAgICAgdV9jaGFyICpjaGFyYnVmICA9IGJ1ZjsKKworICAgICAgICAgICAgICAgIGlvdlswXS5pb3ZfYmFzZSA9IGJ1ZjsKKyAgICAgICAgICAgICAgICBpb3ZbMF0uaW92X2xlbiA9IHNpemU7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mIG1zZyk7CisgICAgICAgICAgICAgICAgbXNnLm1zZ19pb3YgPSBpb3Y7CisgICAgICAgICAgICAgICAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgICAgICAgICAgICAgIG1zZy5tc2dfY29udHJvbCA9ICZjbXNnOworICAgICAgICAgICAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByYyA9IHJlY3Ztc2codC0+c29jaywgJm1zZywgTVNHX0RPTlRXQUlUKTsgLyogdXNlIERPTlRXQUlUPyAqLworICAgICAgICAgICAgICAgIGlmIChyYyA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiB3ZSBoYXZlbid0IHJlY2VpdmVkIHRoZSBzdGFydGluZyBpbmZvICovCisgICAgICAgICAgICAgICAgaWYgKCh1X2NoYXIpIGNoYXJidWZbMF0gPiBORVRTTk1QX1NTSFRPU05NUF9WRVJTSU9OMSkgeworICAgICAgICAgICAgICAgICAgICAvKiB1bnN1cHBvcnRlZCBjb25uZWN0aW9uIHZlcnNpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInJlY2VpdmVkIHVuc3VwcG9ydGVkIHNzaHRvc25tcCB2ZXJzaW9uOiAlZFxuIiwgY2hhcmJ1ZlswXSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgInJlY2VpdmVkIGZpcnN0IG1zZyBvdmVyIFNTSDsgaW50ZXJuYWwgU1NIIHByb3RvY29sIHZlcnNpb24gJWRcbiIsIGNoYXJidWZbMF0pKTsKKworICAgICAgICAgICAgICAgIGZvciAoY21zZ3B0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtc2dwdHIgIT0gTlVMTDsgY21zZ3B0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtc2dwdHIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjbXNncHRyLT5jbXNnX2xldmVsID09IFNPTF9TT0NLRVQgJiYgY21zZ3B0ci0+Y21zZ190eXBlID09IFNDTV9DUkVERU5USUFMUykgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVjZWl2ZWQgY3JlZGVudGlhbCBpbmZvICovCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3OworCisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGV1c2VyID0gKHN0cnVjdCB1Y3JlZCAqKSBDTVNHX0RBVEEoY21zZ3B0cik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodXNlcl9wdyA9IGdldHB3dWlkKHJlbW90ZXVzZXItPnVpZCkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTm8gdXNlciBmb3VuZCBmb3IgdWlkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGV1c2VyLT51aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4odXNlcl9wdy0+cHdfbmFtZSkgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyX3BhaXItPnVzZXJuYW1lKS0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlciBuYW1lICclcycgdG9vIGxvbmcgZm9yIHNubXBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9wdy0+cHdfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgc3RybGNweShhZGRyX3BhaXItPnVzZXJuYW1lLCB1c2VyX3B3LT5wd19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkcl9wYWlyLT51c2VybmFtZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiU2V0dGluZyB1c2VyIG5hbWUgdG8gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfcGFpci0+dXNlcm5hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYWRkcl9wYWlyLT51c2VybmFtZVswXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gZXh0cmFjdCB1c2VybmFtZSBmcm9tIHNzaGQgY29ubmVjdGVkIHVuaXggc29ja2V0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyYyA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBvbmx5IHBhY2tldCB3ZSByZWNlaXZlZCB3YXMgdGhlIHN0YXJ0aW5nIG9uZSAqLworICAgICAgICAgICAgICAgICAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0VNUFRZX1BLVDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmMgLT0gMTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGNoYXJidWYsICZjaGFyYnVmWzFdLCByYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdoaWxlIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgInJlY3YgZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpvcGFxdWUgPSAodm9pZCopdG87CisgICAgICAgICAgICAgICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsICJyZWN2IGZkICVkIGdvdCAlZCBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIHJjKSk7CisgICAgICAgIH0KKyAgICAgICAgCisjZWxzZSAvKiB3ZSdyZSBjYWxsZWQgZGlyZWN0bHkgYnkgc3NoZCBhbmQgdXNlIHN0ZGluL291dCAqLworCisgICAgICAgIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHc7CisKKyAgICAgICAgaWFtY2xpZW50ID0gMDsKKyAgICAgICAgLyogd2UncmUgb24gdGhlIHNlcnZlciBzaWRlIGFuZCBzaG91bGQgcmVhZCBmcm9tIHN0ZGluICovCisgICAgICAgIHdoaWxlIChyYyA8IDApIHsKKyAgICAgICAgICAgIHJjID0gcmVhZChTVERJTl9GSUxFTk8sIGJ1Ziwgc2l6ZSk7CisgICAgICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZWFkIG9uIHN0ZGluIGZhaWxlZDogJWQgKFwiJXNcIilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJjID09IDApIHsKKyAgICAgICAgICAgICAgICAvKiAwIGlucHV0IGlzIHByb2JhYmx5IGJhZCBzaW5jZSB3ZSBzZWxlY3RlZCBvbiBpdCAqLworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiZ290IGEgMCByZWFkIG9uIHN0ZGluXG4iKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsICJyZWFkIG9uIHN0ZGluIGdvdCAlZCBieXRlc1xuIiwgcmMpKTsKKyAgICAgICAgfQorCisvKiBYWFg6IG5lZWQgdG8gY2hlY2sgdGhlIHVzZXJuYW1lLCBidXQgYWRkcl9wYWlyIGRvZXNuJ3QgZXhpc3QhICovCisgICAgICAgIC8qCisgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiY3VycmVudCB1c2VybmFtZT0lc1xuIiwgYykpOworICAgICAgICBpZiAoYWRkcl9wYWlyLT51c2VybmFtZVswXSA9PSAnXDAnKSB7CisgICAgICAgICAgICBpZiAoKHVzZXJfcHcgPSBnZXRwd3VpZChnZXR1aWQoKSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTm8gdXNlciBmb3VuZCBmb3IgdWlkICVkXG4iLCBnZXR1aWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cmxlbih1c2VyX3B3LT5wd19uYW1lKSA+IHNpemVvZihhZGRyX3BhaXItPnVzZXJuYW1lKS0xKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlVzZXIgbmFtZSAnJXMnIHRvbyBsb25nIGZvciBzbm1wXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfcHctPnB3X25hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmxjcHkoYWRkcl9wYWlyLT51c2VybmFtZSwgdXNlcl9wdy0+cHdfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFkZHJfcGFpci0+dXNlcm5hbWUpKTsKKyAgICAgICAgfQorICAgICAgICAqLworCisjZW5kaWYgLyogISBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFICovCisgICAgfQorCisgICAgLyogY3JlYXRlIGEgdG1TdGF0ZVJlZiBjYWNoZSAqLworICAgIHRtU3RhdGVSZWYgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSk7CisKKyAgICAvKiBzZWNzaGVsbCBkb2N1bWVudCBzYXlzIHdlcmUgYWx3YXlzIGF1dGhwcml2LCBldmVuIGlmIE5VTEwgYWxnb3JpdGhtcyAqLworICAgIC8qIHVnaCEgKi8KKyAgICAvKiBYWFg6IGRpc2FsbG93IE5VTEwgaW4gb3VyIGltcGxlbWVudGF0aW9ucyAqLworICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwgPSBTTk1QX1NFQ19MRVZFTF9BVVRIUFJJVjsKKworICAgIC8qIFhYWDogZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBzcGVjaWZpZWQgbG9jYWwgc2VjbmFtZSBmcm9tIHRoZSBzZXNzaW9uICovCisgICAgaWYgKGlhbWNsaWVudCAmJiAwKSB7CisgICAgICAgIC8qIFhYWDogd2UncmUgb24gdGhlIGNsaWVudDsgd2Ugc2hvdWxkIGhhdmUgbmFtZWQgdGhlCisgICAgICAgICAgIGNvbm5lY3Rpb24gb3Vyc2VsdmVzLi4uICBwdWxsIHRoaXMgZnJvbSBzZXNzaW9uIHNvbWVob3c/ICovCisgICAgICAgIHN0cmxjcHkodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lLCBhZGRyX3BhaXItPnVzZXJuYW1lLAorICAgICAgICAgICAgICAgIHNpemVvZih0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUpKTsKKyAgICB9IGVsc2UgeworI2lmZGVmIFNOTVBTU0hET01BSU5fVVNFX0VYVEVSTkFMX1BJUEUKKyAgICAgICAgc3RybGNweSh0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUsIGFkZHJfcGFpci0+dXNlcm5hbWUsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSkpOworI2Vsc2UgLyogd2UncmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHNzaGQgYW5kIHVzZSBzdGRpbi9vdXQgKi8KKyAgICAgICAgLyogd2UncmUgb24gdGhlIHNlcnZlci4uLiAqLworICAgICAgICAvKiBYWFg6IHRoaXMgZG9lc24ndCBjb3B5IHByb3Blcmx5IGFuZCBjYW4gZ2V0IHBvaW50ZXIKKyAgICAgICAgICAgcmVmZXJlbmNlIGlzc3VlcyAqLworICAgICAgICBpZiAoc3RybGVuKGdldGVudigiVVNFUiIpKSA+IDEyNykgeworICAgICAgICAgICAgLyogcnVoIHJvaCAqLworICAgICAgICAgICAgLyogWFhYOiBjbGVhbiB1cCAqLworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFhYWDogZGV0ZWN0IGFuZCB0aHJvdyBvdXQgb3ZlcmZsb3cgc2VjbmFtZSBzaXplcyByYXRoZXIKKyAgICAgICAgICAgdGhhbiB0cnVuY2F0aW5nLiAqLworICAgICAgICBzdHJsY3B5KHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSwgZ2V0ZW52KCJVU0VSIiksCisgICAgICAgICAgICAgICAgc2l6ZW9mKHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSkpOworI2VuZGlmIC8qICEgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRSAqLworICAgIH0KKyAgICB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVbc2l6ZW9mKHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSktMV0gPSAnXDAnOworICAgIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZUxlbiA9IHN0cmxlbih0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUpOworICAgICpvcGFxdWUgPSB0bVN0YXRlUmVmOworICAgICpvbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX3NzaF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworCisgICAgbmV0c25tcF9zc2hfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiA9IE5VTEw7CisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgeworCWFkZHJfcGFpciA9IChuZXRzbm1wX3NzaF9hZGRyX3BhaXIgKikgdC0+ZGF0YTsKKyAgICB9CisKKyAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgKm9wYXF1ZSAhPSBOVUxMICYmCisgICAgICAgICpvbGVuZ3RoID09IHNpemVvZihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UpKSB7CisgICAgICAgIHRtU3RhdGVSZWYgPSAobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICopICpvcGFxdWU7CisgICAgfQorCisgICAgaWYgKCF0bVN0YXRlUmVmKSB7CisgICAgICAgIC8qIHRoaXMgaXMgbm93IGFuIGVycm9yIGFjY29yZGluZyB0byBteSBtZW1vcnkgaW4gdGhlIHJlY2VudCBkcmFmdCAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibmV0c25tcF9zc2hfc2VuZCB3YXNuJ3QgcGFzc2VkIGEgdmFsaWQgdG1TdGF0ZVJlZmVyZW5jZVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoTlVMTCAhPSB0ICYmIE5VTEwgIT0gYWRkcl9wYWlyICYmIE5VTEwgIT0gYWRkcl9wYWlyLT5jaGFubmVsKSB7CisgICAgICAgIGlmIChhZGRyX3BhaXItPnVzZXJuYW1lWzBdID09ICdcMCcpIHsKKyAgICAgICAgICAgIHN0cmxjcHkoYWRkcl9wYWlyLT51c2VybmFtZSwgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkcl9wYWlyLT51c2VybmFtZSkpOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChhZGRyX3BhaXItPnVzZXJuYW1lLCB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICBzdHJsZW4oYWRkcl9wYWlyLT51c2VybmFtZSkgIT0gdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lTGVuKSB7CisgICAgICAgICAgICAvKiBlcnJvciEgIHRoZXkgbXVzdCBhbHdheXMgbWF0Y2ggKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuZXRzbm1wX3NzaF9zZW5kIHdhcyBwYXNzZWQgYSB0bVN0YXRlUmVmZXJlbmNlIHdpdGggYSBzZWN1cml0eU5hbWUgbm90IGVxdWFsIHRvIHByZXZpb3VzIG1lc3NhZ2VzXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCXdoaWxlIChyYyA8IDApIHsKKwkgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfd3JpdGUoYWRkcl9wYWlyLT5jaGFubmVsLCBidWYsIHNpemUpOworCSAgICBpZiAocmMgPCAwKSB7IC8qIFhYWDogICYmIGVycm5vICE9IEVJTlRSICovCisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMKSB7CisjaWZkZWYgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRQorCisJd2hpbGUgKHJjIDwgMCkgeworICAgICAgICAgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyNlbHNlIC8qIHdlJ3JlIGNhbGxlZCBkaXJlY3RseSBieSBzc2hkIGFuZCB1c2Ugc3RkaW4vb3V0ICovCisgICAgICAgIC8qIG9uIHRoZSBzZXJ2ZXI7IHNlbmQgdG8gc3Rkb3V0ICovCisJd2hpbGUgKHJjIDwgMCkgeworCSAgICByYyA9IHdyaXRlKFNURE9VVF9GSUxFTk8sIGJ1Ziwgc2l6ZSk7CisgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKwkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeyAvKiBYWFg6ICAmJiBlcnJubyAhPSBFSU5UUiAqLworCQlicmVhazsKKwkgICAgfQorCX0KKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfc3NoX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIGludCByYyA9IC0xOworICAgIG5ldHNubXBfc3NoX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7CisJYWRkcl9wYWlyID0gKG5ldHNubXBfc3NoX2FkZHJfcGFpciAqKSB0LT5kYXRhOworICAgIH0KKworICAgIGlmICh0ICE9IE5VTEwgJiYgYWRkcl9wYWlyICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgImNsb3NlIGZkICVkXG4iLCB0LT5zb2NrKSk7CisKKyAgICAgICAgaWYgKGFkZHJfcGFpci0+Y2hhbm5lbCkgeworICAgICAgICAgICAgbGlic3NoMl9jaGFubmVsX2Nsb3NlKGFkZHJfcGFpci0+Y2hhbm5lbCk7CisgICAgICAgICAgICBsaWJzc2gyX2NoYW5uZWxfZnJlZShhZGRyX3BhaXItPmNoYW5uZWwpOworICAgICAgICAgICAgYWRkcl9wYWlyLT5jaGFubmVsID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhZGRyX3BhaXItPnNlc3Npb24pIHsKKyAgICAgICAgICAgIGxpYnNzaDJfc2Vzc2lvbl9kaXNjb25uZWN0KGFkZHJfcGFpci0+c2Vzc2lvbiwgIk5vcm1hbCBTaHV0ZG93biIpOworICAgICAgICAgICAgbGlic3NoMl9zZXNzaW9uX2ZyZWUoYWRkcl9wYWlyLT5zZXNzaW9uKTsKKyAgICAgICAgICAgIGFkZHJfcGFpci0+c2Vzc2lvbiA9IE5VTEw7CisgICAgICAgIH0KKworI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCisgICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7CisjZWxzZQorICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOworI2VuZGlmCisgICAgICAgIHQtPnNvY2sgPSAtMTsKKworI2lmZGVmIFNOTVBTU0hET01BSU5fVVNFX0VYVEVSTkFMX1BJUEUKKworICAgICAgICBjbG9zZSh0LT5zb2NrKTsKKyAgICAgICAgCisgICAgICAgIGlmICghYWRkcl9wYWlyLT5zZXNzaW9uICYmICFhZGRyX3BhaXItPmNoYW5uZWwpIHsKKyAgICAgICAgICAgIC8qIHVuaXggc29ja2V0IGJhc2VkIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgIGNsb3NlKHQtPnNvY2spOworCisgICAgICAgICAgICAvKiBYWFg6IG1ha2UgY29uZmlndXJhYmxlICovCisgICAgICAgICAgICB1bmxpbmsoYWRkcl9wYWlyLT5zb2NrZXRfcGF0aCk7CisgICAgICAgIH0KKworI2Vsc2UgLyogd2UncmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHNzaGQgYW5kIHVzZSBzdGRpbi9vdXQgKi8KKworICAgICAgICAvKiBvbiB0aGUgc2VydmVyOiBjbG9zZSBzdGRpbi9vdXQgKi8KKyAgICAgICAgY2xvc2UoU1RESU5fRklMRU5PKTsKKyAgICAgICAgY2xvc2UoU1RET1VUX0ZJTEVOTyk7CisjZW5kaWYgLyogISBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFICovCisKKyAgICB9IGVsc2UgeworCisjaWZuZGVmIFNOTVBTU0hET01BSU5fVVNFX0VYVEVSTkFMX1BJUEUKKyAgICAgICAgLyogb24gdGhlIHNlcnZlcjogY2xvc2Ugc3RkaW4vb3V0ICovCisgICAgICAgIGNsb3NlKFNURElOX0ZJTEVOTyk7CisgICAgICAgIGNsb3NlKFNURE9VVF9GSUxFTk8pOworI2VuZGlmIC8qICEgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRSAqLworCisgICAgfQorICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfc3NoX2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKK3sKKyNpZmRlZiBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFCisKKyAgICAvKiBtdWNoIG9mIHRoaXMgaXMgZHVwbGljYXRlZCBmcm9tIHNubXBVbml4RG9tYWluLmMgKi8KKworICAgIG5ldHNubXBfc3NoX2FkZHJfcGFpciAqYWRkcl9wYWlyOyAgICAKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIG5ld3NvY2sgICA9IC0xOworICAgIHN0cnVjdCBzb2NrYWRkciAgICAgICAqZmFyZW5kICAgID0gTlVMTDsKKyAgICBzb2NrbGVuX3QgICAgICAgICAgICAgIGZhcmVuZGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOworCisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBhZGRyX3BhaXIgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3NoX2FkZHJfcGFpcik7CisKKyAgICAgICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSW5kaWNhdGUgdGhhdCB0aGUgYWNjZXB0YW5jZSBvZiB0aGlzIHNvY2tldCBmYWlsZWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiYWNjZXB0OiBtYWxsb2MgZmFpbGVkXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBmYXJlbmQgPSAoc3RydWN0IHNvY2thZGRyICopICZhZGRyX3BhaXItPnVuaXhfc29ja2V0X2VuZDsKKworICAgICAgICBuZXdzb2NrID0gYWNjZXB0KHQtPnNvY2ssIGZhcmVuZCwgJmZhcmVuZGxlbik7CisKKyAgICAgICAgLyogc2V0IHRoZSBTT19QQVNTQ1JFRCBvcHRpb24gc28gd2UgY2FuIHJlY2VpdmUgdGhlIHJlbW90ZSB1aWQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgaW50IG9uZSA9IDE7CisgICAgICAgICAgICBzZXRzb2Nrb3B0KG5ld3NvY2ssIFNPTF9TT0NLRVQsIFNPX1BBU1NDUkVELCAodm9pZCAqKSAmb25lLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob25lKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3c29jayA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCJhY2NlcHQgZmFpbGVkIHJjICVkIGVycm5vICVkIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3NvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIGZyZWUoYWRkcl9wYWlyKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdzb2NrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHQtPmRhdGEgIT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZSh0LT5kYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiYWNjZXB0IHN1Y2NlZWRlZCAoZmFyZW5kICVwIGxlbiAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgIGZhcmVuZCwgZmFyZW5kbGVuKSk7CisgICAgICAgIHQtPmRhdGEgPSBhZGRyX3BhaXI7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfc3NoX2FkZHJfcGFpcik7CisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1NOREJVRiwgMSwgMCk7CisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1JDVkJVRiwgMSwgMCk7CisgICAgICAgIHJldHVybiBuZXdzb2NrOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNlbHNlIC8qIHdlJ3JlIGNhbGxlZCBkaXJlY3RseSBieSBzc2hkIGFuZCB1c2Ugc3RkaW4vb3V0ICovCisgICAgLyogd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZzsgc2VydmVyIHNpZGUgdXNlcyBzdGRpbi9vdXQgKi8KKyAgICAvKiBYWFg6IGNoZWNrIHRoYXQgd2UncmUgYW4gc3NoIGNvbm5lY3Rpb24gKi8KKyAgICAKKyAgICByZXR1cm4gU1RESU5fRklMRU5POyAvKiByZXR1cm4gc3RkaW4gKi8KKyNlbmRpZiAvKiAhIFNOTVBTU0hET01BSU5fVVNFX0VYVEVSTkFMX1BJUEUgKi8KKworfQorCisKKworLyoKKyAqIE9wZW4gYSBTU0gtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZSBsb2NhbAorICogYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgCisgKiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3NzaF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBpbnQgbG9jYWwpCit7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOworICAgIG5ldHNubXBfc3NoX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBpLCBhdXRoX3B3ID0gMDsKKyAgICBjb25zdCBjaGFyICpmaW5nZXJwcmludDsKKyAgICBjaGFyICp1c2VyYXV0aGxpc3Q7CisgICAgc3RydWN0IHNvY2thZGRyX3VuICp1bmFkZHI7CisgICAgY29uc3QgY2hhciAqc29ja3BhdGggPQorICAgICAgICBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU1NIVE9TTk1QX1NPQ0tFVCk7CisgICAgY2hhciB0bXBzb2NrcGF0aFtNQVhQQVRITEVOXTsKKworI2lmZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICBpZiAobG9jYWwpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKworICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfc25tcFNTSERvbWFpbjsKKyAgICB0LT5kb21haW5fbGVuZ3RoID0gbmV0c25tcF9zbm1wU1NIRG9tYWluX2xlbjsKKyAgICB0LT5mbGFncyA9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNIHwgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UVU5ORUxFRDsKKworICAgIGFkZHJfcGFpciA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9zc2hfYWRkcl9wYWlyKTsKKyAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHQtPmRhdGEgPSBhZGRyX3BhaXI7CisgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9zc2hfYWRkcl9wYWlyKTsKKworICAgIGlmIChsb2NhbCkgeworI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisjaWZkZWYgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRQorCisgICAgICAgIC8qIFhYWDogc2V0IHQtPmxvY2FsIGFuZCB0LT5sb2NhbF9sZW5ndGggKi8KKworCisgICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOOworCisgICAgICAgIHVuYWRkciA9ICZhZGRyX3BhaXItPnVuaXhfc29ja2V0X2VuZDsKKworICAgICAgICAvKiBvcGVuIGEgdW5peCBkb21haW4gc29ja2V0ICovCisgICAgICAgIC8qIFhYWDogZ2V0IGRhdGEgZnJvbSB0aGUgdHJhbnNwb3J0IGRlZiBmb3IgaXQncyBsb2NhdGlvbiAqLworICAgICAgICB1bmFkZHItPnN1bl9mYW1pbHkgPSBBRl9VTklYOworICAgICAgICBpZiAoTlVMTCA9PSBzb2NrcGF0aCkgeworICAgICAgICAgICAgc3ByaW50Zih0bXBzb2NrcGF0aCwgIiVzLyVzIiwgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksCisgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfU09DS19OQU1FKTsKKyAgICAgICAgICAgIHNvY2twYXRoID0gdG1wc29ja3BhdGg7CisgICAgICAgIH0KKworICAgICAgICBzdHJjcHkodW5hZGRyLT5zdW5fcGF0aCwgc29ja3BhdGgpOworICAgICAgICBzdHJjcHkoYWRkcl9wYWlyLT5zb2NrZXRfcGF0aCwgc29ja3BhdGgpOworCisgICAgICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfVU5JWCwgU09DS19TVFJFQU0sIDApOworICAgICAgICBpZiAodC0+c29jayA8IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldCB0aGUgU09fUEFTU0NSRUQgb3B0aW9uIHNvIHdlIGNhbiByZWNlaXZlIHRoZSByZW1vdGUgdWlkICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBvbmUgPSAxOworICAgICAgICAgICAgc2V0c29ja29wdCh0LT5zb2NrLCBTT0xfU09DS0VULCBTT19QQVNTQ1JFRCwgKHZvaWQgKikgJm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9uZSkpOworICAgICAgICB9CisKKyAgICAgICAgdW5saW5rKHVuYWRkci0+c3VuX3BhdGgpOworICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSB1bmFkZHIsIFNVTl9MRU4odW5hZGRyKSk7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zc2hfdHJhbnNwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBiaW5kIFwiJXNcIiwgZXJybm8gJWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuYWRkci0+c3VuX3BhdGgsIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIG5ldHNubXBfc3NoX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKworICAgICAgICAvKiBzZXQgdGhlIHNvY2tldCBwZXJtaXNzaW9ucyAqLworICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQXBwbHkgYW55IHNldHRpbmdzIHRvIHRoZSBvd25lcnNoaXAvcGVybWlzc2lvbnMgb2YgdGhlCisgICAgICAgICAgICAgKiBTc2hkb21haW4gc29ja2V0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGludCBzc2hkb21haW5fc29ja19wZXJtID0KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX1NTSERPTUFJTl9TT0NLX1BFUk0pOworICAgICAgICAgICAgaW50IHNzaGRvbWFpbl9zb2NrX3VzZXIgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfVVNFUik7CisgICAgICAgICAgICBpbnQgc3NoZG9tYWluX3NvY2tfZ3JvdXAgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfR1JPVVApOworCisgICAgICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgImhlcmU6ICVzLCAlZCwgJWQsICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5hZGRyLT5zdW5fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzaGRvbWFpbl9zb2NrX3Blcm0sIHNzaGRvbWFpbl9zb2NrX3VzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzc2hkb21haW5fc29ja19ncm91cCkpOworICAgICAgICAgICAgaWYgKHNzaGRvbWFpbl9zb2NrX3Blcm0gIT0gMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiU2V0dGluZyBzb2NrZXQgcGVybXMgdG8gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoZG9tYWluX3NvY2tfcGVybSkpOworICAgICAgICAgICAgICAgIGNobW9kKHVuYWRkci0+c3VuX3BhdGgsIHNzaGRvbWFpbl9zb2NrX3Blcm0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3NoZG9tYWluX3NvY2tfdXNlciB8fCBzc2hkb21haW5fc29ja19ncm91cCkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogSWYgZWl0aGVyIG9mIHVzZXIgb3IgZ3JvdXAgaGF2ZW4ndCBiZWVuIHNldCwKKyAgICAgICAgICAgICAgICAgKiAgdGhlbiBsZWF2ZSB0aGVtIHVuY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3NoZG9tYWluX3NvY2tfdXNlciA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgc3NoZG9tYWluX3NvY2tfdXNlciA9IC0xOworICAgICAgICAgICAgICAgIGlmIChzc2hkb21haW5fc29ja19ncm91cCA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgc3NoZG9tYWluX3NvY2tfZ3JvdXAgPSAtMTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgIlNldHRpbmcgc29ja2V0IHVzZXIvZ3JvdXAgdG8gJWQvJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoZG9tYWluX3NvY2tfdXNlciwgc3NoZG9tYWluX3NvY2tfZ3JvdXApKTsKKyAgICAgICAgICAgICAgICBjaG93bih1bmFkZHItPnN1bl9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgIHNzaGRvbWFpbl9zb2NrX3VzZXIsIHNzaGRvbWFpbl9zb2NrX2dyb3VwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlzdGVuKHQtPnNvY2ssIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTik7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zc2hfdHJhbnNwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBsaXN0ZW4gdG8gXCIlc1wiLCBlcnJubyAlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5hZGRyLT5zdW5fcGF0aCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgbmV0c25tcF9zc2hfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgCisKKyNlbHNlIC8qIHdlJ3JlIGNhbGxlZCBkaXJlY3RseSBieSBzc2hkIGFuZCB1c2Ugc3RkaW4vb3V0ICovCisgICAgICAgIC8qIGZvciBzc2ggb24gdGhlIHNlcnZlciBzaWRlIHdlJ3ZlIGJlZW4gbGF1bmNoZWQgc28gYmluZCB0bworICAgICAgICAgICBzdGRpbi9vdXQgKi8KKworICAgICAgICAvKiBub3RoaW5nIHRvIGRvICovCisKKyAgICAgICAgLyogWFhYOiB2ZXJpZnkgd2UncmUgaW5zaWRlIHNzaCAqLworICAgICAgICB0LT5zb2NrID0gU1RESU5fRklMRU5POworI2VuZGlmIC8qICEgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRSAqLworI2Vsc2UgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciAqdXNlcm5hbWU7CisgICAgICAgIGNoYXIgKmtleWZpbGVwdWI7CisgICAgICAgIGNoYXIgKmtleWZpbGVwcml2OworICAgICAgICAKKyAgICAgICAgLyogdXNlIHRoZSByZXF1ZXN0ZWQgdXNlciBuYW1lICovCisgICAgICAgIC8qIFhYWDogZGVmYXVsdCB0byB0aGUgY3VycmVudCB1c2VyIG5hbWUgb24gdGhlIHN5c3RlbSBsaWtlIHNzaCBkb2VzICovCisgICAgICAgIHVzZXJuYW1lID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU1NIX1VTRVJOQU1FKTsKKyAgICAgICAgaWYgKCF1c2VybmFtZSB8fCAwID09ICp1c2VybmFtZSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIllvdSBtdXN0IHNwZWNpZnkgYSBzc2ggdXNlcm5hbWUgdG8gdXNlLiAgU2VlIHRoZSBzbm1wLmNvbmYgbWFudWFsIHBhZ2VcbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiB1c2UgdGhlIHJlcXVlc3RlZCBwdWJsaWMga2V5IGZpbGUgKi8KKyAgICAgICAga2V5ZmlsZXB1YiA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU1NIX1BVQktFWSk7CisgICAgICAgIGlmICgha2V5ZmlsZXB1YiB8fCAwID09ICprZXlmaWxlcHViKSB7CisgICAgICAgICAgICAvKiBYWFg6IGRlZmF1bHQgdG8gfi8uc3NoL2lkX3JzYS5wdWIgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJZb3UgbXVzdCBzcGVjaWZ5IGEgc3NoIHB1YmxpYyBrZXkgZmlsZSB0byB1c2UuICBTZWUgdGhlIHNubXAuY29uZiBtYW51YWwgcGFnZVxuIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHVzZSB0aGUgcmVxdWVzdGVkIHByaXZhdGUga2V5IGZpbGUgKi8KKyAgICAgICAga2V5ZmlsZXByaXYgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TU0hfUFJJVktFWSk7CisgICAgICAgIGlmICgha2V5ZmlsZXByaXYgfHwgMCA9PSAqa2V5ZmlsZXByaXYpIHsKKyAgICAgICAgICAgIC8qIFhYWDogZGVmYXVsdCB0byBrZXlmaWxlcHViIHdpdGhvdXQgdGhlIC5wdWIgc3VmZml4ICovCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiWW91IG11c3Qgc3BlY2lmeSBhIHNzaCBwcml2YXRlIGtleSBmaWxlIHRvIHVzZS4gIFNlZSB0aGUgc25tcC5jb25mIG1hbnVhbCBwYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogeHh4OiBuZWVkIGFuIGlwdjYgZnJpZW5kbHkgb25lIHRvbyAoc2lnaCkgKi8KKworICAgICAgICAvKiBYWFg6IG5vdCBpZGVhbCB3aGVuIHN0cnVjdHMgZG9uJ3QgYWN0dWFsbHkgbWF0Y2ggc2l6ZSB3aXNlICovCisgICAgICAgIG1lbWNweSgmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisKKyAgICAgICAgdC0+c29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgIGlmICh0LT5zb2NrIDwgMCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgdC0+cmVtb3RlID0gKHVfY2hhciAqKW1hbGxvYyg2KTsKKyAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NzaF9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCAodV9jaGFyICopICYgKGFkZHItPnNpbl9hZGRyLnNfYWRkciksIDQpOworICAgICAgICB0LT5yZW1vdGVbNF0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5yZW1vdGVbNV0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gNjsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50LXR5cGUgc2Vzc2lvbiwgc28gYXR0ZW1wdCB0byBjb25uZWN0IHRvIHRoZSBmYXIKKyAgICAgICAgICogZW5kLiAgV2UgZG9uJ3QgZ28gbm9uLWJsb2NraW5nIGhlcmUgYmVjYXVzZSBpdCdzIG5vdCBvYnZpb3VzIHdoYXQKKyAgICAgICAgICogeW91J2QgdGhlbiBkbyBpZiB5b3UgdHJpZWQgdG8gZG8gc25tcF9zZW5kcyBiZWZvcmUgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICogaGFkIGNvbXBsZXRlZC4gIFNvIHRoaXMgY2FuIGJsb2NrLgorICAgICAgICAgKi8KKworICAgICAgICByYyA9IGNvbm5lY3QodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHIsCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3NoX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLiBEZWZhdWx0IGlzCisgICAgICAgICAqIHRvIHVzZSBvcyBkZWZhdWx0LiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tCisgICAgICAgICAqIGp1c3QgcGxvdWdoIG9uIHJlZ2FyZGxlc3MuICAKKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1NOREJVRiwgbG9jYWwsIDApOworICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19SQ1ZCVUYsIGxvY2FsLCAwKTsKKworICAgICAgICAvKiBvcGVuIHRoZSBTU0ggc2Vzc2lvbiBhbmQgY2hhbm5lbCAqLworICAgICAgICBhZGRyX3BhaXItPnNlc3Npb24gPSBsaWJzc2gyX3Nlc3Npb25faW5pdCgpOworICAgICAgICBpZiAobGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAoYWRkcl9wYWlyLT5zZXNzaW9uLCB0LT5zb2NrKSkgeworICAgICAgICAgIHNodXRkb3duOgorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBlc3RhYmxpc2ggYW4gU1NIIHNlc3Npb25cbiIpOworICAgICAgICAgICAgbmV0c25tcF9zc2hfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGhhdm4ndCBhdXRoZW50aWNhdGVkLCBUaGUgZmlyc3QgdGhpbmcgdG8KKyAgICAgICAgICAgZG8gaXMgY2hlY2sgdGhlIGhvc3RrZXkncyBmaW5nZXJwcmludCBhZ2FpbnN0IG91ciBrbm93bgorICAgICAgICAgICBob3N0cyBZb3VyIGFwcCBtYXkgaGF2ZSBpdCBoYXJkIGNvZGVkLCBtYXkgZ28gdG8gYSBmaWxlLAorICAgICAgICAgICBtYXkgcHJlc2VudCBpdCB0byB0aGUgdXNlciwgdGhhdCdzIHlvdXIgY2FsbAorICAgICAgICAgKi8KKyAgICAgICAgZmluZ2VycHJpbnQgPQorICAgICAgICAgICAgbGlic3NoMl9ob3N0a2V5X2hhc2goYWRkcl9wYWlyLT5zZXNzaW9uLCBMSUJTU0gyX0hPU1RLRVlfSEFTSF9NRDUpOworICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgIkZpbmdlcnByaW50OiAiKSk7CisgICAgICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgICAgIERFQlVHTVNHKCgic3NoIiwgIiUwMngiLAorICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKWZpbmdlcnByaW50W2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0coKCJzc2giLCAiXG4iKSk7CisKKyAgICAgICAgLyogY2hlY2sgd2hhdCBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFyZSBhdmFpbGFibGUgKi8KKyAgICAgICAgdXNlcmF1dGhsaXN0ID0KKyAgICAgICAgICAgIGxpYnNzaDJfdXNlcmF1dGhfbGlzdChhZGRyX3BhaXItPnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWUsIHN0cmxlbih1c2VybmFtZSkpOworICAgICAgICBERUJVR01TRygoInNzaCIsICJBdXRoZW50aWNhdGlvbiBtZXRob2RzOiAlc1xuIiwgdXNlcmF1dGhsaXN0KSk7CisKKyAgICAgICAgLyogWFhYOiBhbGxvdyBvdGhlciB0eXBlcyAqLworICAgICAgICAvKiBYWFg6IDQgc2VlbXMgbWFnaWMgdG8gbWUuLi4gKi8KKyAgICAgICAgaWYgKHN0cnN0cih1c2VyYXV0aGxpc3QsICJwdWJsaWNrZXkiKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBhdXRoX3B3IHw9IDQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBYWFg6IGhhcmQgY29kZWQgcGF0aHMgYW5kIHVzZXJzICovCisgICAgICAgIGlmIChhdXRoX3B3ICYgNCkgeworICAgICAgICAgICAgLyogcHVibGljIGtleSAqLworICAgICAgICAgICAgaWYgKGxpYnNzaDJfdXNlcmF1dGhfcHVibGlja2V5X2Zyb21maWxlKGFkZHJfcGFpci0+c2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlcHViLCBrZXlmaWxlcHJpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIkF1dGhlbnRpY2F0aW9uIGJ5IHB1YmxpYyBrZXkgZmFpbGVkIVxuIik7CisgICAgICAgICAgICAgICAgZ290byBzaHV0ZG93bjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJzc2giLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHRBdXRoZW50aWNhdGlvbiBieSBwdWJsaWMga2V5IHN1Y2NlZWRlZC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIkF1dGhlbnRpY2F0aW9uIGJ5IHB1YmxpYyBrZXkgZmFpbGVkIVxuIik7CisgICAgICAgICAgICBnb3RvIHNodXRkb3duOworICAgICAgICB9CisKKyAgICAgICAgLyogd2UndmUgbm93IGF1dGhlbnRpY2F0ZWQgYm90aCBzaWRlczsgY29udGluaW5nIG9ud2FyZCAuLi4gKi8KKworICAgICAgICAvKiBSZXF1ZXN0IGEgY2hhbm5lbCAqLworICAgICAgICBpZiAoIShhZGRyX3BhaXItPmNoYW5uZWwgPQorICAgICAgICAgICAgICBsaWJzc2gyX2NoYW5uZWxfb3Blbl9zZXNzaW9uKGFkZHJfcGFpci0+c2Vzc2lvbikpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVW5hYmxlIHRvIG9wZW4gYSBzZXNzaW9uXG4iKTsKKyAgICAgICAgICAgIGdvdG8gc2h1dGRvd247CisgICAgICAgIH0KKworICAgICAgICAvKiBSZXF1ZXN0IGEgdGVybWluYWwgd2l0aCAndmFuaWxsYScgdGVybWluYWwgZW11bGF0aW9uCisgICAgICAgICAqIFNlZSAvZXRjL3Rlcm1jYXAgZm9yIG1vcmUgb3B0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgLyogWFhYOiBuZWVkZWQ/ICBkb3VidCBpdCAqLworLyogICAgICAgICBpZiAobGlic3NoMl9jaGFubmVsX3JlcXVlc3RfcHR5KGFkZHJfcGFpci0+Y2hhbm5lbCwgInZhbmlsbGEiKSkgeyAqLworLyogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCByZXF1ZXN0aW5nIHB0eVxuIik7ICovCisvKiAgICAgICAgICAgICBnb3RvIHNodXRkb3duOyAqLworLyogICAgICAgICB9ICovCisgICAgICAgIGlmIChsaWJzc2gyX2NoYW5uZWxfc3Vic3lzdGVtKGFkZHJfcGFpci0+Y2hhbm5lbCwgInNubXAiKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byByZXF1ZXN0IHRoZSBzc2ggJ3NubXAnIHN1YnN5c3RlbVxuIik7CisgICAgICAgICAgICBnb3RvIHNodXRkb3duOworICAgICAgICB9CisgICAgfQorCisgICAgREVCVUdNU0coKCJzc2giLCJPcGVuZWQgY29ubmVjdGlvbi5cbiIpKTsKKyAgICAvKgorICAgICAqIE1lc3NhZ2Ugc2l6ZSBpcyBub3QgbGltaXRlZCBieSB0aGlzIHRyYW5zcG9ydCAoaGVuY2UgbXNnTWF4U2l6ZQorICAgICAqIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGxlZ2FsIHNpemUgb2YgYW4gU05NUCBtZXNzYWdlKS4gIAorICAgICAqLworCisgICAgdC0+bXNnTWF4U2l6ZSA9IDB4N2ZmZmZmZmY7CisgICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfc3NoX3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfc3NoX3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfc3NoX2Nsb3NlOworICAgIHQtPmZfYWNjZXB0ICAgPSBuZXRzbm1wX3NzaF9hY2NlcHQ7CisgICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfc3NoX2ZtdGFkZHI7CisKKyAgICByZXR1cm4gdDsKK30KKworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfc3NoX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAorCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisKKyAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pbjIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7CisgICAgICAgIHJldHVybiBuZXRzbm1wX3NzaF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3NzaF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKworICAgIGlmIChvX2xlbiA9PSA2KSB7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnR0bXAgPSAob1s0XSA8PCA4KSArIG9bNV07CisgICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2luX2FkZHIuc19hZGRyKSwgbywgNCk7CisgICAgICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0dG1wKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfc3NoX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorc3NoZG9tYWluX3BhcnNlX3NvY2tldChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKK3sKKyAgICBjaGFyICpzb2NrZXRfcGVybSwgKnNvY2tldF91c2VyLCAqc29ja2V0X2dyb3VwOworICAgIGludCB1aWQgPSAtMTsKKyAgICBpbnQgZ2lkID0gLTE7CisgICAgaW50IHNfcGVybSA9IC0xOworICAgIGNoYXIgKnN0OworCisgICAgREVCVUdNU0dUTCgoInNzaC9jb25maWciLCAicGFyc2luZyBzb2NrZXQgaW5mbzogJXNcbiIsIGNwdHIpKTsKKyAgICBzb2NrZXRfcGVybSA9IHN0cnRva19yKGNwdHIsICIgXHQiLCAmc3QpOworICAgIHNvY2tldF91c2VyID0gc3RydG9rX3IoTlVMTCwgIiBcdCIsICZzdCk7CisgICAgc29ja2V0X2dyb3VwID0gc3RydG9rX3IoTlVMTCwgIiBcdCIsICZzdCk7CisKKyAgICBpZiAoc29ja2V0X3Blcm0pIHsKKyAgICAgICAgc19wZXJtID0gc3RydG9sKHNvY2tldF9wZXJtLCBOVUxMLCA4KTsKKyAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfUEVSTSwgc19wZXJtKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNzaC9jb25maWciLCAic29ja2V0IHBlcm1pc3Npb25zOiAlbyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBzX3Blcm0sIHNfcGVybSkpOworICAgIH0KKyAgICAvKgorICAgICAqIFRyeSB0byBoYW5kbGUgbnVtZXJpYyBVSURzIG9yIHVzZXIgbmFtZXMgZm9yIHRoZSBzb2NrZXQgb3duZXIKKyAgICAgKi8KKyAgICBpZiAoc29ja2V0X3VzZXIpIHsKKyAgICAgICAgdWlkID0gbmV0c25tcF9zdHJfdG9fdWlkKHNvY2tldF91c2VyKTsKKyAgICAgICAgaWYgKCB1aWQgIT0gMCApCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfVVNFUiwgdWlkKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNzaC9jb25maWciLCAic29ja2V0IG93bmVyOiAlcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBzb2NrZXRfdXNlciwgdWlkKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhbmQgc2ltaWxhcmx5IGZvciB0aGUgc29ja2V0IGdyb3VwIG93bmVyc2hpcAorICAgICAqLworICAgIGlmIChzb2NrZXRfZ3JvdXApIHsKKyAgICAgICAgZ2lkID0gbmV0c25tcF9zdHJfdG9fZ2lkKHNvY2tldF9ncm91cCk7CisgICAgICAgIGlmICggZ2lkICE9IDAgKQorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX1NTSERPTUFJTl9TT0NLX0dST1VQLCBnaWQpOworICAgICAgICBERUJVR01TR1RMKCgic3NoL2NvbmZpZyIsICJzb2NrZXQgZ3JvdXA6ICVzICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHNvY2tldF9ncm91cCwgZ2lkKSk7CisgICAgfQorfQorCit2b2lkCituZXRzbm1wX3NzaF9jdG9yKHZvaWQpICAgIAoreworICAgIHNzaERvbWFpbi5uYW1lID0gbmV0c25tcF9zbm1wU1NIRG9tYWluOworICAgIHNzaERvbWFpbi5uYW1lX2xlbmd0aCA9IG5ldHNubXBfc25tcFNTSERvbWFpbl9sZW47CisgICAgc3NoRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyICoqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7CisgICAgc3NoRG9tYWluLnByZWZpeFswXSA9ICJzc2giOworCisgICAgc3NoRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOworICAgIHNzaERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF9zc2hfY3JlYXRlX3RzdHJpbmc7CisgICAgc3NoRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3NzaF9jcmVhdGVfb3N0cmluZzsKKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgInNzaHRvc25tcHNvY2tldHBlcm1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoZG9tYWluX3BhcnNlX3NvY2tldCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29ja2V0cGVybXMgW3VzZXJuYW1lIFtncm91cG5hbWVdXSIpOworCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX09DVEVUX1NUUiwgInNubXAiLCAic3NodG9zbm1wc29ja2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU1NIVE9TTk1QX1NPQ0tFVCk7CisKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCAic25tcCIsICJzc2h1c2VybmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NTSF9VU0VSTkFNRSk7CisKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCAic25tcCIsICJzc2hwdWJsaWNrZXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TU0hfUFVCS0VZKTsKKworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9PQ1RFVF9TVFIsICJzbm1wIiwgInNzaHByaXZhdGVrZXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TU0hfUFJJVktFWSk7CisKKyAgICBERUJVR01TR1RMKCgic3NoIiwgInJlZ2lzdGVyaW5nIHRoZSBzc2ggZG9tYWluXG4iKSk7CisgICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZzc2hEb21haW4pOworfQorCisKZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMWMzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5jCkBAIC0wLDAgKzEsMjg1IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorCitvaWQgbmV0c25tcF9zbm1wU1RERG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fU1REX0lQIH07CitzdGF0aWMgbmV0c25tcF90ZG9tYWluIHN0ZERvbWFpbjsKKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAorICovCisKK3N0YXRpYyBjaGFyICoKK25ldHNubXBfc3RkX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgY2hhciAqYnVmOworICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiZm9ybWF0dGluZyBhZGRyLiAgZGF0YT0lcFxuIix0LT5kYXRhKSk7CisgICAgaWYgKHQtPmRhdGEpIHsKKyAgICAgICAgbmV0c25tcF9zdGRfZGF0YSAqZGF0YSA9IChuZXRzbm1wX3N0ZF9kYXRhKil0LT5kYXRhOworICAgICAgICBidWYgPSAoY2hhciopbWFsbG9jKFNOTVBfTUFYQlVGX01FRElVTSk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgcmV0dXJuIHN0cmR1cCgiU1RESW5PdXQiKTsKKyAgICAgICAgc25wcmludGYoYnVmLCBTTk1QX01BWEJVRl9NRURJVU0sICJTVEQ6JXMiLCBkYXRhLT5wcm9nKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCIgIGZvcm1hdHRlZDo9JXNcbiIsYnVmKSk7CisgICAgICAgIHJldHVybiBidWY7CisgICAgfQorICAgIHJldHVybiBzdHJkdXAoIlNUREluT3V0Iik7Cit9CisKKworCisvKgorICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCisgKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCisgKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAorICovCisKK3N0YXRpYyBpbnQKK25ldHNubXBfc3RkX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisKKyAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsInJlY3Ygb24gc29jayAlZC4gIGRhdGE9JXBcbiIsdC0+c29jaywgdC0+ZGF0YSkpOworICAgIHdoaWxlIChyYyA8IDApIHsKKyAgICAgICAgcmMgPSByZWFkKHQtPnNvY2ssIGJ1Ziwgc2l6ZSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiICBieXRlczogJWQuXG4iLCByYykpOworICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zdGQiLCAiIHJlYWQgb24gZmQgJWQgZmFpbGVkOiAlZCAoXCIlc1wiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyYyA9PSAwKSB7CisgICAgICAgICAgICAvKiAwIGlucHV0IGlzIHByb2JhYmx5IGJhZCBzaW5jZSB3ZSBzZWxlY3RlZCBvbiBpdCAqLworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3N0ZCIsICJyZWFkIG9uIHN0ZGluIGdvdCAlZCBieXRlc1xuIiwgcmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX3N0ZF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworCisgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJzZW5kIG9uIHNvY2suICBkYXRhPSVwXG4iLCB0LT5kYXRhKSk7CisgICAgd2hpbGUgKHJjIDwgMCkgeworICAgICAgICBpZiAodC0+ZGF0YSkgeworICAgICAgICAgICAgbmV0c25tcF9zdGRfZGF0YSAqZGF0YSA9IChuZXRzbm1wX3N0ZF9kYXRhKil0LT5kYXRhOworICAgICAgICAgICAgcmMgPSB3cml0ZShkYXRhLT5vdXRmZCwgYnVmLCBzaXplKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIHN0cmFpZ2h0IHRvIHN0ZG91dCAqLworICAgICAgICAgICAgcmMgPSB3cml0ZSgxLCBidWYsIHNpemUpOworICAgICAgICB9CisgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludAorbmV0c25tcF9zdGRfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJjbG9zZS4gIGRhdGE9JXBcbiIsIHQtPmRhdGEpKTsKKyAgICBpZiAodC0+ZGF0YSkgeworICAgICAgICBuZXRzbm1wX3N0ZF9kYXRhICpkYXRhID0gKG5ldHNubXBfc3RkX2RhdGEqKXQtPmRhdGE7CisgICAgICAgIGNsb3NlKGRhdGEtPm91dGZkKTsKKyAgICAgICAgY2xvc2UodC0+c29jayk7CisKKyAgICAgICAgLyoga2lsbCB0aGUgY2hpbGQgdG9vICovCisgICAgICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiIGtpbGxpbmcgJWRcbiIsIGRhdGEtPmNoaWxkcGlkKSk7CisgICAgICAgIGtpbGwoZGF0YS0+Y2hpbGRwaWQsIFNJR1RFUk0pOworICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAga2lsbChkYXRhLT5jaGlsZHBpZCwgU0lHS0lMTCk7CisgICAgICAgIC8qIFhYWDogc2V0IGFuIGFsYXJtIHRvIGtpbGwgaGFyZGVyIHRoZSBjaGlsZCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIGNsb3NlIHN0ZG91dC9pbiAqLworICAgICAgICBjbG9zZSgxKTsKKyAgICAgICAgY2xvc2UoMCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKworc3RhdGljIGludAorbmV0c25tcF9zdGRfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwiIGFjY2VwdCBkYXRhPSVwXG4iLCB0LT5kYXRhKSk7CisgICAgLyogbm90aGluZyB0byBkbyBoZXJlICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBPcGVuIGEgU1RESU4vU1RET1VUIC1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF9zdGRfdHJhbnNwb3J0KGNvbnN0IGNoYXIgKmluc3RyaW5nLCBzaXplX3QgaW5zdHJpbmdfbGVuLAorCQkgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdDsKKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfc25tcFNURERvbWFpbjsKKyAgICB0LT5kb21haW5fbGVuZ3RoID0KKyAgICAgICAgc2l6ZW9mKG5ldHNubXBfc25tcFNURERvbWFpbikgLyBzaXplb2YobmV0c25tcF9zbm1wU1RERG9tYWluWzBdKTsKKworICAgIHQtPnNvY2sgPSAwOworICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU0gfCBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVEOworCisgICAgLyoKKyAgICAgKiBNZXNzYWdlIHNpemUgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyB0cmFuc3BvcnQgKGhlbmNlIG1zZ01heFNpemUKKyAgICAgKiBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBsZWdhbCBzaXplIG9mIGFuIFNOTVAgbWVzc2FnZSkuICAKKyAgICAgKi8KKworICAgIHQtPm1zZ01heFNpemUgPSAweDdmZmZmZmZmOworICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3N0ZF9yZWN2OworICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3N0ZF9zZW5kOworICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3N0ZF9jbG9zZTsKKyAgICB0LT5mX2FjY2VwdCAgID0gbmV0c25tcF9zdGRfYWNjZXB0OworICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3N0ZF9mbXRhZGRyOworCisgICAgLyoKKyAgICAgKiBpZiBpbnN0cmluZyBpcyBub3QgbnVsbCBsZW5ndGgsIGl0IHNwZWNpZmllcyBhIHBhdGggdG8gYSBwcm9nCisgICAgICogWFhYOiBwbHVzIGFyZ3MKKyAgICAgKi8KKyAgICBpZiAoaW5zdHJpbmdfbGVuID09IDAgJiYgZGVmYXVsdF90YXJnZXQgIT0gTlVMTCkgeworCWluc3RyaW5nID0gZGVmYXVsdF90YXJnZXQ7CisJaW5zdHJpbmdfbGVuID0gc3RybGVuKGRlZmF1bHRfdGFyZ2V0KTsKKyAgICB9CisKKyAgICBpZiAoaW5zdHJpbmdfbGVuICE9IDApIHsKKyAgICAgICAgaW50IGluZmRbMl0sIG91dGZkWzJdOyAgLyogc29ja2V0cyB0byBhbmQgZnJvbSB0aGUgY2xpZW50ICovCisgICAgICAgIGludCBjaGlsZHBpZDsKKworICAgICAgICBpZiAocGlwZShpbmZkKSB8fCBwaXBlKG91dGZkKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIG5lZWRlZCBwaXBlcyBmb3IgYSBTVEQgdHJhbnNwb3J0Iik7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBjaGlsZHBpZCA9IGZvcmsoKTsKKyAgICAgICAgLyogcGFyZW50cGlkID0+IGNoaWxkcGlkICovCisgICAgICAgIC8qIGluZmRbMV0gICA9PiBpbmZkWzBdICovCisgICAgICAgIC8qIG91dGZkWzBdICA8PSBvdXRmZFsxXSAqLworCisgICAgICAgIGlmIChjaGlsZHBpZCkgeworICAgICAgICAgICAgbmV0c25tcF9zdGRfZGF0YSAqZGF0YTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogd2UncmUgaW4gdGhlIHBhcmVudCAqLworICAgICAgICAgICAgY2xvc2UoaW5mZFswXSk7CisgICAgICAgICAgICBjbG9zZShvdXRmZFsxXSk7CisKKyAgICAgICAgICAgIGRhdGEgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3RkX2RhdGEpOworICAgICAgICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNubXBTVEREb21haW46IG1hbGxvYyBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdC0+ZGF0YSA9IGRhdGE7CisgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3N0ZF9kYXRhKTsKKyAgICAgICAgICAgIHQtPnNvY2sgPSBvdXRmZFswXTsKKyAgICAgICAgICAgIGRhdGEtPnByb2cgPSBzdHJkdXAoaW5zdHJpbmcpOworICAgICAgICAgICAgZGF0YS0+b3V0ZmQgPSBpbmZkWzFdOworICAgICAgICAgICAgZGF0YS0+Y2hpbGRwaWQgPSBjaGlsZHBpZDsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwicGFyZW50LiAgZGF0YT0lcFxuIiwgdC0+ZGF0YSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogd2UncmUgaW4gdGhlIGNoaWxkICovCisKKyAgICAgICAgICAgIC8qIGNsb3NlIHN0ZGluICovCisgICAgICAgICAgICBjbG9zZSgwKTsKKyAgICAgICAgICAgIC8qIGNvcHkgcGlwZSBvdXRwdXQgdG8gc3Rkb3V0ICovCisgICAgICAgICAgICBkdXAoaW5mZFswXSk7CisKKyAgICAgICAgICAgIC8qIGNsb3NlIHN0ZG91dCAqLworICAgICAgICAgICAgY2xvc2UoMSk7CisgICAgICAgICAgICAvKiBjb3B5IHBpcGUgb3V0cHV0IHRvIHN0ZGluICovCisgICAgICAgICAgICBkdXAob3V0ZmRbMV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICAvKiBjbG9zZSBhbGwgdGhlIHBpcGVzIHRoZW1zZWx2ZXMgKi8KKyAgICAgICAgICAgIGNsb3NlKGluZmRbMF0pOworICAgICAgICAgICAgY2xvc2UoaW5mZFsxXSk7CisgICAgICAgICAgICBjbG9zZShvdXRmZFswXSk7CisgICAgICAgICAgICBjbG9zZShvdXRmZFsxXSk7CisKKyAgICAgICAgICAgIC8qIGNhbGwgZXhlYyAqLworICAgICAgICAgICAgc3lzdGVtKGluc3RyaW5nKTsKKyAgICAgICAgICAgIC8qIFhYWDogVE9ETzogdXNlIGV4ZWMgZm9ybSBpbnN0ZWFkOyBuZWVkcyBhcmdzICovCisgICAgICAgICAgICAvKiBleGVjdihpbnN0cmluZywgTlVMTCk7ICovCisgICAgICAgICAgICBleGl0KDApOworCisgICAgICAgICAgICAvKiBhY2suLi4gIHdlIHNob3VsZCBuZXZlciBldmVyIGdldCBoZXJlICovCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU1REIHRyYW5zcG9ydCByZXR1cm5lZCBhZnRlciBleGVjdigpXG4iKTsKKyAgICAgICAgfQorICAgIH0gICAgICAgICAgICAKKworICAgIHJldHVybiB0OworfQorCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3N0ZF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICppbnN0cmluZywgaW50IGxvY2FsLAorCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgcmV0dXJuIG5ldHNubXBfc3RkX3RyYW5zcG9ydChpbnN0cmluZywgc3RybGVuKGluc3RyaW5nKSwgZGVmYXVsdF90YXJnZXQpOworfQorCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3N0ZF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKK3sKKyAgICByZXR1cm4gbmV0c25tcF9zdGRfdHJhbnNwb3J0KChjb25zdCBjaGFyKilvLCBvX2xlbiwgTlVMTCk7Cit9CisKK3ZvaWQKK25ldHNubXBfc3RkX2N0b3Iodm9pZCkKK3sKKyAgICBzdGREb21haW4ubmFtZSA9IG5ldHNubXBfc25tcFNURERvbWFpbjsKKyAgICBzdGREb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9zbm1wU1RERG9tYWluKSAvIHNpemVvZihvaWQpOworICAgIHN0ZERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhciAqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOworICAgIHN0ZERvbWFpbi5wcmVmaXhbMF0gPSAic3RkIjsKKworICAgIHN0ZERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICBzdGREb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfc3RkX2NyZWF0ZV90c3RyaW5nOworICAgIHN0ZERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF9zdGRfY3JlYXRlX29zdHJpbmc7CisKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnN0ZERvbWFpbik7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYjY2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYwpAQCAtMCwwICsxLDM2MiBAQAorLyoqCisgKiBAZmlsZSAgc25tcFNvY2tldEJhc2VEb21haW4uYworICoKKyAqIEBicmllZiBTb2NrZXQgc3VwcG9ydCBmdW5jdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CisKKy8qIGFsbCBzb2NrZXRzIHByZXR0eSBtdWNoIGNsb3NlIHRoZSBzYW1lIHdheSAqLworaW50IG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkgeworICAgIGludCByYyA9IC0xOworICAgIGlmICh0LT5zb2NrID49IDApIHsKKyNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAorICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOworI2Vsc2UKKyAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKKyNlbmRpZgorICAgICAgICB0LT5zb2NrID0gLTE7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIGZpbmQgbGFyZ2VzdCBwb3NzaWJsZSBidWZmZXIgYmV0d2VlbiBjdXJyZW50IHNpemUgYW5kIHNwZWNpZmllZCBzaXplLgorICoKKyAqIFRyeSB0byBtYXhpbWl6ZSB0aGUgY3VycmVudCBidWZmZXIgb2YgdHlwZSAib3B0bmFtZSIKKyAqIHRvIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBzaXplIGJ5IHRoZSBPUyAoYXMgY2xvc2UgdG8KKyAqIHNpemUgYXMgcG9zc2libGUpCisgKi8KK3N0YXRpYyBpbnQKK19zb2NrX2J1ZmZlcl9tYXhpbWl6ZShpbnQgcywgaW50IG9wdG5hbWUsIGNvbnN0IGNoYXIgKmJ1ZnR5cGUsIGludCBzaXplKQoreworICAgIGludCAgICAgICAgICAgIGN1cmJ1ZiA9IDA7CisgICAgc29ja2xlbl90ICAgICAgY3VyYnVmbGVuID0gc2l6ZW9mKGludCk7CisgICAgaW50ICAgICAgICAgICAgbG8sIG1pZCwgaGk7CisKKyAgICAvKgorICAgICAqIEZpcnN0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIG91ciBjdXJyZW50IGJ1ZmZlcgorICAgICAqLworICAgIGlmICgoZ2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmY3VyYnVmLAorICAgICAgICAgICAgICAgICAgICAmY3VyYnVmbGVuKSA9PSAwKSAKKyAgICAgICAgICAgICYmIChjdXJidWZsZW4gPT0gc2l6ZW9mKGludCkpKSB7CisKKyAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlcjptYXgiLCAiQ3VycmVudCAlcyBpcyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgY3VyYnVmKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTGV0J3Mgbm90IGJlIHN0dXBpZCAuLi4gaWYgd2Ugd2VyZSBhc2tlZCBmb3IgbGVzcyB0aGFuIHdoYXQgd2UKKyAgICAgICAgICogYWxyZWFkeSBoYXZlLCB0aGVuIGZvcmdldCBhYm91dCBpdAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHNpemUgPD0gY3VyYnVmKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyOm1heCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdGVkICVzIDw9IGN1cnJlbnQgYnVmZmVyXG4iLCBidWZ0eXBlKSk7CisgICAgICAgICAgICByZXR1cm4gY3VyYnVmOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRG8gYSBiaW5hcnkgc2VhcmNoIHRoZSBvcHRpbWFsIGJ1ZmZlciB3aXRoaW4gMWsgb2YgdGhlIHBvaW50IG9mCisgICAgICAgICAqIGZhaWx1cmUuIFRoaXMgaXMgcmF0aGVyIGJydXRlZm9yY2UsIGJ1dCBzaW1wbGUKKyAgICAgICAgICovCisgICAgICAgIGhpID0gc2l6ZTsKKyAgICAgICAgbG8gPSBjdXJidWY7CisKKyAgICAgICAgd2hpbGUgKGhpIC0gbG8gPiAxMDI0KSB7CisgICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyOworICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJm1pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbnQpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbG8gPSBtaWQ7IC8qIFN1Y2Nlc3M6IHNlYXJjaCBiZXR3ZWVuIG1pZCBhbmQgaGkgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGkgPSBtaWQ7IC8qIEZhaWxlZDogc2VhcmNoIGJldHdlZW4gbG8gYW5kIG1pZCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IHByaW50IGlmIHRoaXMgb3B0aW1pemF0aW9uIGhlbHBlZCBvciBub3QKKyAgICAgICAgICovCisgICAgICAgIGlmIChnZXRzb2Nrb3B0KHMsU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJmN1cmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgJmN1cmJ1ZmxlbikgPT0gMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXI6bWF4IiwgCisgICAgICAgICAgICAgICAgICAgICAgICAiTWF4aW1pemVkICVzOiAlZFxuIixidWZ0eXBlLCBjdXJidWYpKTsKKyAgICAgICAgfSAKKyAgICB9IGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGVyZSBpcyByZWFsbHkgbm90IGEgbG90IHdlIGNhbiBkbyBhbnltb3JlLgorICAgICAgICAgKiBJZiB0aGUgT1MgZG9lc24ndCBnaXZlIHVzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB3aGF0J3MgdGhlIAorICAgICAgICAgKiBwb2ludCBpbiB0cnlpbmcgdG8gbWFrZSBpdCBiZXR0ZXIKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyOm1heCIsICJHZXQgJXMgZmFpbGVkIC4uLiBnaXZpbmcgdXAhXG4iLAorICAgICAgICAgICAgICAgICAgICBidWZ0eXBlKSk7CisgICAgICAgIGN1cmJ1ZiA9IC0xOworICAgIH0KKworICAgIHJldHVybiBjdXJidWY7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKgorX3NvY2tfYnVmX3R5cGVfZ2V0KGludCBvcHRuYW1lLCBpbnQgbG9jYWwpCit7CisgICAgaWYgKG9wdG5hbWUgPT0gU09fU05EQlVGKSB7CisgICAgICAgIGlmIChsb2NhbCkKKyAgICAgICAgICAgIHJldHVybiAic2VydmVyIHNlbmQgYnVmZmVyIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICJjbGllbnQgc2VuZCBidWZmZXIiOworICAgIH0gZWxzZSBpZiAob3B0bmFtZSA9PSBTT19SQ1ZCVUYpIHsKKyAgICAgICAgaWYgKGxvY2FsKQorICAgICAgICAgICAgcmV0dXJuICJzZXJ2ZXIgcmVjZWl2ZSBidWZmZXIiOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gImNsaWVudCByZWNlaXZlIGJ1ZmZlciI7CisgICAgfQorCisgICAgcmV0dXJuICJ1bmtub3duIGJ1ZmZlciI7Cit9CisKKy8qCisgKgorICogR2V0IHRoZSByZXF1ZXN0ZWQgYnVmZmVyc2l6ZSwgYmFzZWQgb24KKyAqIC0gc29ja2V0dHlwZSA6IGNsaWVudCAobG9jYWwgPSAwKSBvciBzZXJ2ZXIgKGxvY2FsID0gMSkgCisgKiAtIGJ1ZmZlcnR5cGUgOiBzZW5kIChvcHRuYW1lID0gU09fU05EQlVGKSBvciByZWN2IChTT19SQ1ZCVUYpCisgKgorICogSW4gY2FzZSBhIGNvbXBpbGUgdGltZSBidWZmZXIgd2FzIHNwZWNpZmllZCwgdGhlbiB1c2UgdGhhdCBvbmUKKyAqIGlmIHRoZXJlIHdhcyBubyBydW50aW1lIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGUKKyAqLworc3RhdGljIGludAorX3NvY2tfYnVmZmVyX3NpemVfZ2V0KGludCBvcHRuYW1lLCBpbnQgbG9jYWwsIGNvbnN0IGNoYXIgKipidWZ0eXBlKQoreworICAgIGludCBzaXplOworCisgICAgaWYgKE5VTEwgIT0gYnVmdHlwZSkKKyAgICAgICAgKmJ1ZnR5cGUgPSBfc29ja19idWZfdHlwZV9nZXQob3B0bmFtZSwgbG9jYWwpOworCisgICAgaWYgKG9wdG5hbWUgPT0gU09fU05EQlVGKSB7CisgICAgICAgIGlmIChsb2NhbCkgeworICAgICAgICAgICAgc2l6ZSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TRVJWRVJTRU5EQlVGKTsKKyNpZmRlZiBORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1NFTkRfQlVGCisgICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKQorICAgICAgICAgICAgICAgc2l6ZSA9IE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfU0VORF9CVUY7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNpemUgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UU0VOREJVRik7CisjaWZkZWYgTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9TRU5EX0JVRgorICAgICAgICAgICAgaWYgKHNpemUgPD0gMCkKKyAgICAgICAgICAgICAgIHNpemUgPSBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1NFTkRfQlVGOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9wdG5hbWUgPT0gU09fUkNWQlVGKSB7CisgICAgICAgIGlmIChsb2NhbCkgeworICAgICAgICAgICAgc2l6ZSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TRVJWRVJSRUNWQlVGKTsKKyNpZmRlZiBORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1JFQ1ZfQlVGCisgICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKQorICAgICAgICAgICAgICAgc2l6ZSA9IE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfUkVDVl9CVUY7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNpemUgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UUkVDVkJVRik7CisjaWZkZWYgTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9SRUNWX0JVRgorICAgICAgICAgICAgaWYgKHNpemUgPD0gMCkKKyAgICAgICAgICAgICAgIHNpemUgPSBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1JFQ1ZfQlVGOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzaXplID0gMDsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsICJSZXF1ZXN0ZWQgJXMgaXMgJWRcbiIsCisgICAgICAgICAgICAgICAgKGJ1ZnR5cGUpID8gKmJ1ZnR5cGUgOiAidW5rbm93biBidWZmZXIiLCBzaXplKSk7CisKKyAgICByZXR1cm4oc2l6ZSk7Cit9CisKKy8qCisgKiBzZXQgc29ja2V0IGJ1ZmZlciBzaXplCisgKgorICogQHBhcmFtIHNzICAgICA6IHNvY2tldAorICogQHBhcmFtIG9wdG5hbWU6IFNPX1NOREJVRiBvciBTT19SQ1ZCVUYKKyAqIEBwYXJhbSBsb2NhbCAgOiAxIGZvciBzZXJ2ZXIsIDAgZm9yIGNsaWVudAorICogQHBhcmFtIHJlcWJ1ZiA6IHJlcXVlc3RlZCBzaXplLCBvciAwIGZvciBkZWZhdWx0CisgKgorICogQHJldHZhbCAgICAtMSA6IGVycm9yCisgKiBAcmV0dmFsICAgID4wIDogbmV3IGJ1ZmZlciBzaXplCisgKi8KK2ludAorbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQoaW50IHMsIGludCBvcHRuYW1lLCBpbnQgbG9jYWwsIGludCBzaXplKQoreworI2lmICEgZGVmaW5lZChTT19TTkRCVUYpICYmICEgZGVmaW5lZChTT19SQ1ZCVUYpCisgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXIiLCAiQ2hhbmdpbmcgc29ja2V0IGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkXG4iKSk7CisgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICBjb25zdCBjaGFyICAgICAqYnVmdHlwZTsKKyAgICBpbnQgICAgICAgICAgICBjdXJidWYgPSAwOworICAgIHNvY2tsZW5fdCAgICAgIGN1cmJ1ZmxlbiA9IHNpemVvZihpbnQpOworCisjICAgaWZuZGVmICBTT19TTkRCVUYKKyAgICBpZiAoU09fU05EQlVGID09IG9wdG5hbWUpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXIiLAorICAgICAgICAgICAgICAgICAgICAiQ2hhbmdpbmcgc29ja2V0IHNlbmQgYnVmZmVyIGlzIG5vdCBzdXBwb3J0ZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyMgICBlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypTT19TTkRCVUYgKi8KKyMgICBpZm5kZWYgIFNPX1JDVkJVRgorICAgIGlmIChTT19SQ1ZCVUYgPT0gb3B0bmFtZSkgeworICAgICAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICJDaGFuZ2luZyBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZFxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorIyAgIGVuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNPX1JDVkJVRiAqLworCisgICAgLyoKKyAgICAgKiBXaGF0IGlzIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgPworICAgICAqLworICAgIGlmICgwID09IHNpemUpCisgICAgICAgIHNpemUgPSBfc29ja19idWZmZXJfc2l6ZV9nZXQob3B0bmFtZSwgbG9jYWwsICZidWZ0eXBlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYnVmdHlwZSA9IF9zb2NrX2J1Zl90eXBlX2dldChvcHRuYW1lLCBsb2NhbCk7CisgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlciIsICJSZXF1ZXN0ZWQgJXMgaXMgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgc2l6ZSkpOworICAgIH0KKworICAgIGlmICgoZ2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmY3VyYnVmLAorICAgICAgICAgICAgICAgICAgICAmY3VyYnVmbGVuKSA9PSAwKSAKKyAgICAgICAgJiYgKGN1cmJ1ZmxlbiA9PSBzaXplb2YoaW50KSkpIHsKKyAgICAgICAgCisgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlciIsICJPcmlnaW5hbCAlcyBpcyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBjdXJidWYpKTsKKyAgICAgICAgaWYgKGN1cmJ1ZiA+PSBzaXplKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJOZXcgJXMgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gb3JpZ2luYWwhXG4iLCBidWZ0eXBlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZSBidWZmZXJzaXplIHdhcyBub3Qgc3BlY2lmaWVkIG9yIGl0IHdhcyBhIG5lZ2F0aXZlIHZhbHVlCisgICAgICogdGhlbiBkb24ndCBjaGFuZ2UgdGhlIE9TIGJ1ZmZlcnMgYXQgYWxsCisgICAgICovCisgICAgaWYgKHNpemUgPD0gMCkgeworICAgICAgIERFQlVHTVNHVCgoInNvY2tldDpidWZmZXIiLAorICAgICAgICAgICAgICAgICAgICAiJXMgbm90IHZhbGlkIG9yIG5vdCBzcGVjaWZpZWQ7IHVzaW5nIE9TIGRlZmF1bHQoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBidWZ0eXBlLGN1cmJ1ZikpOworICAgICAgIHJldHVybiBjdXJidWY7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUcnkgdG8gc2V0IHRoZSByZXF1ZXN0ZWQgc2VuZCBidWZmZXIKKyAgICAgKi8KKyAgICBpZiAoc2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmc2l6ZSwgc2l6ZW9mKGludCkpID09IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQmVjYXVzZSBzb21lIHBsYXRmb3JtcyBsaWUgYWJvdXQgdGhlIGFjdHVhbCBidWZmZXIgdGhhdCBoYXMgYmVlbiAKKyAgICAgICAgICogc2V0IChMaW51eCB3aWxsIGFsd2F5cyBzYXkgaXQgd29ya2VkIC4uLiksIHdlIHByaW50IHNvbWUgCisgICAgICAgICAqIGRpYWdub3N0aWMgb3V0cHV0IGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgICovCisgICAgICAgIERFQlVHSUYoInNvY2tldDpidWZmZXIiKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJzb2NrZXQ6YnVmZmVyIiwgIlNldCAlcyB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgc2l6ZSkpOworICAgICAgICAgICAgaWYgKChnZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZjdXJidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1cmJ1ZmxlbikgPT0gMCkgCisgICAgICAgICAgICAgICAgICAgICYmIChjdXJidWZsZW4gPT0gc2l6ZW9mKGludCkpKSB7CisKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdyAlcyBpcyAlZFxuIiwgYnVmdHlwZSwgY3VyYnVmKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdGhlIG5ldyBidWZmZXIgaXMgc21hbGxlciB0aGFuIHRoZSBzaXplIHdlIHJlcXVlc3RlZCwgd2Ugd2lsbAorICAgICAgICAgKiB0cnkgdG8gaW5jcmVtZW50IHRoZSBuZXcgYnVmZmVyIHdpdGggMWsgaW5jcmVtZW50cyAKKyAgICAgICAgICogKHRoaXMgd2lsbCBzb21ldGltZSBhbGxvdyB1cyB0byByZWFjaCBhIG1vcmUgb3B0aW1hbCBidWZmZXIuKQorICAgICAgICAgKiAgIEZvciBleGFtcGxlIDogT24gU29sYXJpcywgaWYgdGhlIG1heCBPUyBidWZmZXIgaXMgMTAwayBhbmQgeW91CisgICAgICAgICAqICAgcmVxdWVzdCAxMTBrLCB5b3UgZW5kIHVwIHdpdGggdGhlIGRlZmF1bHQgOGsgOi0oCisgICAgICAgICAqLworICAgICAgICBpZiAoY3VyYnVmIDwgc2l6ZSkgeworICAgICAgICAgICAgY3VyYnVmID0gX3NvY2tfYnVmZmVyX21heGltaXplKHMsIG9wdG5hbWUsIGJ1ZnR5cGUsIHNpemUpOworICAgICAgICAgICAgaWYoLTEgIT0gY3VyYnVmKQorICAgICAgICAgICAgICAgIHNpemUgPSBjdXJidWY7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIE9idmlvdXNseSBjaGFuZ2luZyB0aGUgYnVmZmVyIGZhaWxlZCwgbW9zdCBsaWtlIGxpa2UgYmVjYXVzZSB3ZSAKKyAgICAgICAgICogcmVxdWVzdGVkIGEgYnVmZmVyIGdyZWF0ZXIgdGhhbiB0aGUgT1MgbGltaXQuCisgICAgICAgICAqIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHNlYXJjaCBmb3IgYW4gb3B0aW1hbCBidWZmZXIgdGhhdCBpcyBjbG9zZQorICAgICAgICAgKiBlbm91Z2ggdG8gdGhlIHBvaW50IG9mIGZhaWx1cmUuCisgICAgICAgICAqIFRoaXMgd2lsbCBhbGxvdyB1cyB0byByZWFjaCBhIG1vcmUgb3B0aW1hbCBidWZmZXIuCisgICAgICAgICAqICAgRm9yIGV4YW1wbGUgOiBPbiBTb2xhcmlzLCBpZiB0aGUgbWF4IE9TIGJ1ZmZlciBpcyAxMDBrIGFuZCB5b3UgCisgICAgICAgICAqICAgcmVxdWVzdCAxMTBrLCB5b3UgZW5kIHVwIHdpdGggdGhlIGRlZmF1bHQgOGsgOi0oCisgICAgICAgICAqICAgQWZ0ZXIgdGhpcyBxdWljayBzZWFjaCB3ZSB3b3VsZCBnZXQgMWsgY2xvc2UgdG8gMTAwayAodGhlIG1heCkKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyIiwgImNvdWxkbid0IHNldCAlcyB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgc2l6ZSkpOworCisgICAgICAgIGN1cmJ1ZiA9IF9zb2NrX2J1ZmZlcl9tYXhpbWl6ZShzLCBvcHRuYW1lLCBidWZ0eXBlLCBzaXplKTsKKyAgICAgICAgaWYoLTEgIT0gY3VyYnVmKQorICAgICAgICAgICAgc2l6ZSA9IGN1cmJ1ZjsKKyAgICB9CisKKyAgICByZXR1cm4gc2l6ZTsKKyNlbmRpZgorfQorCisKKy8qKgorICogU2V0cyB0aGUgbW9kZSBvZiBhIHNvY2tldCBmb3IgYWxsIHN1YnNlcXVlbnQgSS9PIG9wZXJhdGlvbnMuCisgKgorICogQHBhcmFtW2luXSBzb2NrIFNvY2tldCBkZXNjcmlwdG9yIChVbml4KSBvciBzb2NrZXQgaGFuZGxlIChXaW5kb3dzKS4KKyAqIEBwYXJhbVtpbl0gbm9uX2Jsb2NraW5nX21vZGUgSS9PIG1vZGU6IG5vbi16ZXJvIHNlbGVjdHMgbm9uLWJsb2NraW5nIG1vZGU7CisgKiAgIHplcm8gc2VsZWN0cyBibG9ja2luZyBtb2RlLgorICoKKyAqIEByZXR1cm4gemVybyB1cG9uIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgdmFsdWUgdXBvbiBlcnJvci4KKyAqLworaW50CituZXRzbm1wX3NldF9ub25fYmxvY2tpbmdfbW9kZShpbnQgc29jaywgaW50IG5vbl9ibG9ja2luZ19tb2RlKQoreworI2lmZGVmIFdJTjMyCisgICAgdV9sb25nICAgICAgICAgIGFyZzsKKworICAgIGFyZyA9IG5vbl9ibG9ja2luZ19tb2RlOworICAgIHJldHVybiBpb2N0bHNvY2tldChzb2NrLCBGSU9OQklPLCAmYXJnKTsKKyNlbHNlCisgICAgaW50ICAgICAgICAgICAgIHNvY2tmbGFnczsKKworICAgIGlmICgoc29ja2ZsYWdzID0gZmNudGwoc29jaywgRl9HRVRGTCwgMCkpID49IDApIHsKKyAgICAgICAgcmV0dXJuIGZjbnRsKHNvY2ssIEZfU0VURkwsCisgICAgICAgICAgICAgICAgICAgICBub25fYmxvY2tpbmdfbW9kZSA/IHNvY2tmbGFncyB8IE9fTk9OQkxPQ0sKKyAgICAgICAgICAgICAgICAgICAgIDogc29ja2ZsYWdzICYgfk9fTk9OQkxPQ0spOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3MGRiYQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5jCkBAIC0wLDAgKzEsOTkgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCisvKgorICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCisgKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCisgKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAorICovCisKK2ludCBuZXRzbm1wX3RjcGJhc2VfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworCXdoaWxlIChyYyA8IDApIHsKKwkgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIE5VTEwpOworCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCURFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcGJhc2UiLCAicmVjdiBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCisJCQkgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworCQlicmVhazsKKwkgICAgfQorCSAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3BiYXNlIiwgInJlY3YgZmQgJWQgZ290ICVkIGJ5dGVzXG4iLAorCQkJdC0+c29jaywgcmMpKTsKKwl9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiBvbGVuZ3RoICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHQtPmRhdGFfbGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKCgqb3BhcXVlID0gbWFsbG9jKHQtPmRhdGFfbGVuZ3RoKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG1lbWNweSgqb3BhcXVlLCB0LT5kYXRhLCB0LT5kYXRhX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgKm9sZW5ndGggPSB0LT5kYXRhX2xlbmd0aDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKm9sZW5ndGggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBuZXRzbm1wX3RjcGJhc2Vfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpIHsKKyAgICBpbnQgcmMgPSAtMTsKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisJd2hpbGUgKHJjIDwgMCkgeworCSAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOworCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmViMDI4Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYwpAQCAtMCwwICsxLDM1MSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisKKy8qCisgKiBuZWVkcyB0byBiZSBpbiBzeW5jIHdpdGggdGhlIGRlZmluaXRpb25zIGluIHNubXBsaWIvc25tcFVEUERvbWFpbi5jCisgKiBhbmQgcGVybC9hZ2VudC9hZ2VudC54cworICovCit0eXBlZGVmIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgbmV0c25tcF91ZHBfYWRkcl9wYWlyOworCitvaWQgbmV0c25tcF9zbm1wVENQRG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fVENQX0lQIH07CitzdGF0aWMgbmV0c25tcF90ZG9tYWluIHRjcERvbWFpbjsKKworLyoKKyAqIE5vdCBzdGF0aWMgc2luY2UgaXQgaXMgbmVlZGVkIGhlcmUgYXMgd2VsbCBhcyBpbiBzbm1wVURQRG9tYWluLCBidXQgbm90CisgKiBwdWJsaWMgZWl0aGVyCisgKi8KK2ludAorbmV0c25tcF9zb2NrYWRkcl9pbjIoc3RydWN0IHNvY2thZGRyX2luICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpOworCisvKgorICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKKyAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCisgKi8KKworc3RhdGljIGNoYXIgKgorbmV0c25tcF90Y3BfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICByZXR1cm4gbmV0c25tcF9pcHY0X2ZtdGFkZHIoIlRDUCIsIHQsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQKK25ldHNubXBfdGNwX2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZhcmVuZCA9IE5VTEw7CisgICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICBuZXdzb2NrID0gLTE7CisgICAgc29ja2xlbl90ICAgICAgIGZhcmVuZGxlbiA9IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpOworCisgICAgYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKW1hbGxvYyhmYXJlbmRsZW4pOworICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgeworICAgICAgICAvKgorICAgICAgICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSBhY2NlcHRhbmNlIG9mIHRoaXMgc29ja2V0IGZhaWxlZC4gIAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgImFjY2VwdDogbWFsbG9jIGZhaWxlZFxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1lbXNldChhZGRyX3BhaXIsIDAsIHNpemVvZiAqYWRkcl9wYWlyKTsKKyAgICBmYXJlbmQgPSAmYWRkcl9wYWlyLT5yZW1vdGVfYWRkci5zYTsKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIG5ld3NvY2sgPSBhY2NlcHQodC0+c29jaywgZmFyZW5kLCAmZmFyZW5kbGVuKTsKKworICAgICAgICBpZiAobmV3c29jayA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJhY2NlcHQgZmFpbGVkIHJjICVkIGVycm5vICVkIFwiJXNcIlxuIiwKKwkJCW5ld3NvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIGZyZWUoYWRkcl9wYWlyKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdzb2NrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHQtPmRhdGEgIT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZSh0LT5kYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHQtPmRhdGEgPSBhZGRyX3BhaXI7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcik7CisgICAgICAgIERFQlVHSUYoIm5ldHNubXBfdGNwIikgeworICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF90Y3BfZm10YWRkcihOVUxMLCBmYXJlbmQsIGZhcmVuZGxlbik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAiYWNjZXB0IHN1Y2NlZWRlZCAoZnJvbSAlcylcbiIsIHN0cikpOworICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVHJ5IHRvIG1ha2UgdGhlIG5ldyBzb2NrZXQgYmxvY2tpbmcuICAKKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKG5ldHNubXBfc2V0X25vbl9ibG9ja2luZ19tb2RlKG5ld3NvY2ssIEZBTFNFKSA8IDApCisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAiY291bGRuJ3QgZl9nZXRmbCBvZiBmZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3NvY2spKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuIERlZmF1bHQgaXMKKyAgICAgICAgICogdG8gdXNlIG9zIGRlZmF1bHQuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0KKyAgICAgICAgICoganVzdCBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fU05EQlVGLCAxLCAwKTsKKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fUkNWQlVGLCAxLCAwKTsKKworICAgICAgICByZXR1cm4gbmV3c29jazsKKyAgICB9IGVsc2UgeworICAgICAgICBmcmVlKGFkZHJfcGFpcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKKworCisvKgorICogT3BlbiBhIFRDUC1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCisgKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKKyAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdGNwX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGludCBsb2NhbCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisgICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIGludCByYyA9IDA7CisKKyNpZmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgaWYgKGxvY2FsKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisKKyAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RyYW5zcG9ydCk7CisgICAgaWYgKHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopbWFsbG9jKHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKKyAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbXNldChhZGRyX3BhaXIsIDAsIHNpemVvZiAqYWRkcl9wYWlyKTsKKyAgICB0LT5kYXRhID0gYWRkcl9wYWlyOworICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcik7CisgICAgbWVtY3B5KCYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkciksIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKworICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfc25tcFRDUERvbWFpbjsKKyAgICB0LT5kb21haW5fbGVuZ3RoID0KKyAgICAgICAgc2l6ZW9mKG5ldHNubXBfc25tcFRDUERvbWFpbikgLyBzaXplb2YobmV0c25tcF9zbm1wVENQRG9tYWluWzBdKTsKKworICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworICAgIGlmICh0LT5zb2NrIDwgMCkgeworICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0LT5mbGFncyA9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNOworCisgICAgaWYgKGxvY2FsKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICAgICAgaW50IG9wdCA9IDE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIHRvIHRoZSBnaXZlbiAKKyAgICAgICAgICogSVAgYWRkcmVzcyAod2hpY2ggbWF5IGluY2x1ZGUgYW4gaW50ZXJmYWNlIGFkZHJlc3MsIG9yIGNvdWxkIGJlCisgICAgICAgICAqIElOQUREUl9BTlksIGJ1dCB3aWxsIGFsd2F5cyBpbmNsdWRlIGEgcG9ydCBudW1iZXIuICAKKyAgICAgICAgICovCisKKyAgICAgICAgdC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU47CisgICAgICAgIHQtPmxvY2FsID0gKHVfY2hhciAqKW1hbGxvYyg2KTsKKyAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodC0+bG9jYWwsICh1X2NoYXIgKikgJiAoYWRkci0+c2luX2FkZHIuc19hZGRyKSwgNCk7CisgICAgICAgIHQtPmxvY2FsWzRdID0gKG50b2hzKGFkZHItPnNpbl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKKyAgICAgICAgdC0+bG9jYWxbNV0gPSAobnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSA2OworCisgICAgICAgIC8qCisgICAgICAgICAqIFdlIHNob3VsZCBzZXQgU09fUkVVU0VBRERSIHRvby4gIAorICAgICAgICAgKi8KKworICAgICAgICBzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKHZvaWQgKikmb3B0LAorCQkgICBzaXplb2Yob3B0KSk7CisKKyAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTaW5jZSB3ZSBhcmUgZ29pbmcgdG8gYmUgbGV0dGluZyBzZWxlY3QoKSB0ZWxsIHVzIHdoZW4gY29ubmVjdGlvbnMKKyAgICAgICAgICogYXJlIHJlYWR5IHRvIGJlIGFjY2VwdCgpZWQsIHdlIG5lZWQgdG8gbWFrZSB0aGUgc29ja2V0IG5vbi1ibG9ja2luZworICAgICAgICAgKiB0byBhdm9pZCB0aGUgcmFjZSBjb25kaXRpb24gZGVzY3JpYmVkIGluIFcuIFIuIFN0ZXZlbnMsIGBgVW5peAorICAgICAgICAgKiBOZXR3b3JrIFByb2dyYW1taW5nIFZvbHVtZSBJIFNlY29uZCBFZGl0aW9uJycsIHBwLiA0MjItLTQsIHdoaWNoCisgICAgICAgICAqIGNvdWxkIG90aGVyd2lzZSB3ZWRnZSB0aGUgYWdlbnQuCisgICAgICAgICAqLworCisgICAgICAgIG5ldHNubXBfc2V0X25vbl9ibG9ja2luZ19tb2RlKHQtPnNvY2ssIFRSVUUpOworCisgICAgICAgIC8qCisgICAgICAgICAqIE5vdyBzaXQgaGVyZSBhbmQgd2FpdCBmb3IgY29ubmVjdGlvbnMgdG8gYXJyaXZlLiAgCisgICAgICAgICAqLworCisgICAgICAgIHJjID0gbGlzdGVuKHQtPnNvY2ssIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTik7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIG5vIGJ1ZmZlciBzaXplIG9uIGxpc3RlbiBzb2NrZXQgLSBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAgICAgICAgICovCisjZWxzZSAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICB9IGVsc2UgeworICAgICAgdC0+cmVtb3RlID0gKHVfY2hhciAqKW1hbGxvYyg2KTsKKyAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHQtPnJlbW90ZSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLCA0KTsKKyAgICAgICAgdC0+cmVtb3RlWzRdID0gKG50b2hzKGFkZHItPnNpbl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKKyAgICAgICAgdC0+cmVtb3RlWzVdID0gKG50b2hzKGFkZHItPnNpbl9wb3J0KSAmIDB4MDBmZikgPj4gMDsKKyAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDY7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudC10eXBlIHNlc3Npb24sIHNvIGF0dGVtcHQgdG8gY29ubmVjdCB0byB0aGUgZmFyCisgICAgICAgICAqIGVuZC4gIFdlIGRvbid0IGdvIG5vbi1ibG9ja2luZyBoZXJlIGJlY2F1c2UgaXQncyBub3Qgb2J2aW91cyB3aGF0CisgICAgICAgICAqIHlvdSdkIHRoZW4gZG8gaWYgeW91IHRyaWVkIHRvIGRvIHNubXBfc2VuZHMgYmVmb3JlIHRoZSBjb25uZWN0aW9uCisgICAgICAgICAqIGhhZCBjb21wbGV0ZWQuICBTbyB0aGlzIGNhbiBibG9jay4KKyAgICAgICAgICovCisKKyAgICAgICAgcmMgPSBjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyLAorCQkgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKworICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuIERlZmF1bHQgaXMKKyAgICAgICAgICogdG8gdXNlIG9zIGRlZmF1bHQuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0KKyAgICAgICAgICoganVzdCBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fU05EQlVGLCBsb2NhbCwgMCk7CisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1JDVkJVRiwgbG9jYWwsIDApOworICAgIH0KKworICAgIC8qCisgICAgICogTWVzc2FnZSBzaXplIGlzIG5vdCBsaW1pdGVkIGJ5IHRoaXMgdHJhbnNwb3J0IChoZW5jZSBtc2dNYXhTaXplCisgICAgICogaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gbGVnYWwgc2l6ZSBvZiBhbiBTTk1QIG1lc3NhZ2UpLiAgCisgICAgICovCisKKyAgICB0LT5tc2dNYXhTaXplID0gMHg3ZmZmZmZmZjsKKyAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF90Y3BiYXNlX3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfdGNwYmFzZV9zZW5kOworICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2U7CisgICAgdC0+Zl9hY2NlcHQgICA9IG5ldHNubXBfdGNwX2FjY2VwdDsKKyAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF90Y3BfZm10YWRkcjsKKworICAgIHJldHVybiB0OworfQorCisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF90Y3BfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCisJCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKworICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdGNwX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdGNwX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCisgICAgaWYgKG9fbGVuID09IDYpIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydHRtcCA9IChvWzRdIDw8IDgpICsgb1s1XTsKKyAgICAgICAgYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaW5fYWRkci5zX2FkZHIpLCBvLCA0KTsKKyAgICAgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnR0bXApOworICAgICAgICByZXR1cm4gbmV0c25tcF90Y3BfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisKKwordm9pZAorbmV0c25tcF90Y3BfY3Rvcih2b2lkKQoreworICAgIHRjcERvbWFpbi5uYW1lID0gbmV0c25tcF9zbm1wVENQRG9tYWluOworICAgIHRjcERvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3NubXBUQ1BEb21haW4pIC8gc2l6ZW9mKG9pZCk7CisgICAgdGNwRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyICoqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7CisgICAgdGNwRG9tYWluLnByZWZpeFswXSA9ICJ0Y3AiOworCisgICAgdGNwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOworICAgIHRjcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF90Y3BfY3JlYXRlX3RzdHJpbmc7CisgICAgdGNwRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3RjcF9jcmVhdGVfb3N0cmluZzsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdGNwRG9tYWluKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlMGEyZAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jCkBAIC0wLDAgKzEsMzc0IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKworI2luY2x1ZGUgImluZXRfbnRvcC5oIgorCitvaWQgbmV0c25tcF9UQ1BJUHY2RG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fVENQX0lQVjYgfTsKK3N0YXRpYyBuZXRzbm1wX3Rkb21haW4gdGNwNkRvbWFpbjsKKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAorICovCisKK3N0YXRpYyBjaGFyICoKK25ldHNubXBfdGNwNl9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIHJldHVybiBuZXRzbm1wX2lwdjZfZm10YWRkcigiVENQL0lQdjYiLCB0LCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgaW50CituZXRzbm1wX3RjcDZfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmZhcmVuZCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIG5ld3NvY2sgPSAtMTsKKyAgICBzb2NrbGVuX3QgICAgICAgZmFyZW5kbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCisgICAgZmFyZW5kID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisKKyAgICBpZiAoZmFyZW5kID09IE5VTEwpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5kaWNhdGUgdGhhdCB0aGUgYWNjZXB0YW5jZSBvZiB0aGlzIHNvY2tldCBmYWlsZWQuICAKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiYWNjZXB0OiBtYWxsb2MgZmFpbGVkXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBuZXdzb2NrID0gYWNjZXB0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgZmFyZW5kLCAmZmFyZW5kbGVuKTsKKworICAgICAgICBpZiAobmV3c29jayA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCJhY2NlcHQgZmFpbGVkIHJjICVkIGVycm5vICVkIFwiJXNcIlxuIiwKKwkJCW5ld3NvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIGZyZWUoZmFyZW5kKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdzb2NrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHQtPmRhdGEgIT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZSh0LT5kYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHQtPmRhdGEgPSBmYXJlbmQ7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gZmFyZW5kbGVuOworICAgICAgICBERUJVR0lGKCJuZXRzbm1wX3RjcDYiKSB7CisgICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3RjcDZfZm10YWRkcihOVUxMLCBmYXJlbmQsIGZhcmVuZGxlbik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgImFjY2VwdCBzdWNjZWVkZWQgKGZyb20gJXMpXG4iLCBzdHIpKTsKKyAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRyeSB0byBtYWtlIHRoZSBuZXcgc29ja2V0IGJsb2NraW5nLiAgCisgICAgICAgICAqLworCisgICAgICAgIGlmIChuZXRzbm1wX3NldF9ub25fYmxvY2tpbmdfbW9kZShuZXdzb2NrLCBGQUxTRSkgPCAwKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYWNjZXB0OiBjb3VsZG4ndCBmX2dldGZsIG9mIGZkICVkXG4iLCBuZXdzb2NrKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLiBEZWZhdWx0IGlzCisgICAgICAgICAqIHRvIHVzZSBvcyBkZWZhdWx0LiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tCisgICAgICAgICAqIGp1c3QgcGxvdWdoIG9uIHJlZ2FyZGxlc3MuICAKKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1NOREJVRiwgMSwgMCk7CisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1JDVkJVRiwgMSwgMCk7CisKKyAgICAgICAgcmV0dXJuIG5ld3NvY2s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnJlZShmYXJlbmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCisKKworLyoKKyAqIE9wZW4gYSBUQ1AvSVB2Ni1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlCisgKiBsb2NhbCBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UKKyAqIGFkZHIgaXMgdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF90Y3A2X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLCBpbnQgbG9jYWwpCit7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICByYyA9IDA7CisKKyNpZmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgaWYgKGxvY2FsKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisKKyAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHSUYoIm5ldHNubXBfdGNwNiIpIHsKKyAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF90Y3A2X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKilhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgIm9wZW4gJXMgJXNcbiIsIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAorICAgICAgICAgICAgICAgICAgICBzdHIpKTsKKyAgICAgICAgZnJlZShzdHIpOworICAgIH0KKworICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKTsKKyAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKTsKKyAgICBtZW1jcHkodC0+ZGF0YSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKworICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfVENQSVB2NkRvbWFpbjsKKyAgICB0LT5kb21haW5fbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfVENQSVB2NkRvbWFpbikgLyBzaXplb2Yob2lkKTsKKworICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAodC0+c29jayA8IDApIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdC0+ZmxhZ3MgPSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTTsKKworICAgIGlmIChsb2NhbCkgeworI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgICAgIGludCBvcHQgPSAxOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCBvbiB0byB0aGUKKyAgICAgICAgICogZ2l2ZW4gSVAgYWRkcmVzcywgd2hpY2ggbWF5IGluY2x1ZGUgYW4gaW50ZXJmYWNlIGFkZHJlc3MsIG9yIGNvdWxkCisgICAgICAgICAqIGJlIElOQUREUl9BTlksIGJ1dCBjZXJ0YWlubHkgaW5jbHVkZXMgYSBwb3J0IG51bWJlci4KKyAgICAgICAgICovCisKKyNpZmRlZiBJUFY2X1Y2T05MWQorICAgICAgICAvKiBUcnkgdG8gcmVzdHJpY3QgUEZfSU5FVDYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbnMgb25seS4gKi8KKyAgICAgICAgeworCSAgaW50IG9uZT0xOworCSAgaWYgKHNldHNvY2tvcHQodC0+c29jaywgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwgKGNoYXIgKikmb25lLCBzaXplb2Yob25lKSkgIT0gMCkgeworCSAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgImNvdWxkbid0IHNldCBJUFY2X1Y2T05MWSB0byAlZCBieXRlczogJXNcbiIsIG9uZSwgc3RyZXJyb3IoZXJybm8pKSk7CisJICB9IAorCX0KKyNlbmRpZgorCisgICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOOworICAgICAgICB0LT5sb2NhbCA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTgpOworICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5sb2NhbCwgYWRkci0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKKyAgICAgICAgdC0+bG9jYWxbMTZdID0gKG50b2hzKGFkZHItPnNpbjZfcG9ydCkgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPmxvY2FsWzE3XSA9IChudG9ocyhhZGRyLT5zaW42X3BvcnQpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSAxODsKKworICAgICAgICAvKgorICAgICAgICAgKiBXZSBzaG91bGQgc2V0IFNPX1JFVVNFQUREUiB0b28uICAKKyAgICAgICAgICovCisKKyAgICAgICAgc2V0c29ja29wdCh0LT5zb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICh2b2lkICopJm9wdCwgc2l6ZW9mKG9wdCkpOworCisgICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCisJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNpbmNlIHdlIGFyZSBnb2luZyB0byBiZSBsZXR0aW5nIHNlbGVjdCgpIHRlbGwgdXMgd2hlbiBjb25uZWN0aW9ucworICAgICAgICAgKiBhcmUgcmVhZHkgdG8gYmUgYWNjZXB0KCllZCwgd2UgbmVlZCB0byBtYWtlIHRoZSBzb2NrZXQgbjBuLWJsb2NraW5nCisgICAgICAgICAqIHRvIGF2b2lkIHRoZSByYWNlIGNvbmRpdGlvbiBkZXNjcmliZWQgaW4gVy4gUi4gU3RldmVucywgYGBVbml4CisgICAgICAgICAqIE5ldHdvcmsgUHJvZ3JhbW1pbmcgVm9sdW1lIEkgU2Vjb25kIEVkaXRpb24nJywgcHAuIDQyMi0tNCwgd2hpY2gKKyAgICAgICAgICogY291bGQgb3RoZXJ3aXNlIHdlZGdlIHRoZSBhZ2VudC4KKyAgICAgICAgICovCisKKyAgICAgICAgbmV0c25tcF9zZXRfbm9uX2Jsb2NraW5nX21vZGUodC0+c29jaywgVFJVRSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IHNpdCBoZXJlIGFuZCB3YWl0IGZvciBjb25uZWN0aW9ucyB0byBhcnJpdmUuICAKKyAgICAgICAgICovCisKKyAgICAgICAgcmMgPSBsaXN0ZW4odC0+c29jaywgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogbm8gYnVmZmVyIHNpemUgb24gbGlzdGVuIHNvY2tldCAtIGRvZXNuJ3QgbWFrZSBzZW5zZQorICAgICAgICAgKi8KKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIHQtPnJlbW90ZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTgpOworICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCBhZGRyLT5zaW42X2FkZHIuczZfYWRkciwgMTYpOworICAgICAgICB0LT5yZW1vdGVbMTZdID0gKG50b2hzKGFkZHItPnNpbjZfcG9ydCkgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPnJlbW90ZVsxN10gPSAobnRvaHMoYWRkci0+c2luNl9wb3J0KSAmIDB4MDBmZikgPj4gMDsKKyAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDE4OworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQtdHlwZSBzZXNzaW9uLCBzbyBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlIGZhcgorICAgICAgICAgKiBlbmQuICBXZSBkb24ndCBnbyBub24tYmxvY2tpbmcgaGVyZSBiZWNhdXNlIGl0J3Mgbm90IG9idmlvdXMgd2hhdAorICAgICAgICAgKiB5b3UnZCB0aGVuIGRvIGlmIHlvdSB0cmllZCB0byBkbyBzbm1wX3NlbmRzIGJlZm9yZSB0aGUgY29ubmVjdGlvbgorICAgICAgICAgKiBoYWQgY29tcGxldGVkLiAgU28gdGhpcyBjYW4gYmxvY2suCisgICAgICAgICAqLworCisgICAgICAgIHJjID0gY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiY29ubmVjdCByZXR1cm5zICVkXG4iLCByYykpOworCisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycy4gRGVmYXVsdCBpcworICAgICAgICAgKiB0byB1c2Ugb3MgZGVmYXVsdC4gIERvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IGVycm9ycyAtLQorICAgICAgICAgKiBqdXN0IHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19TTkRCVUYsIGxvY2FsLCAwKTsKKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fUkNWQlVGLCBsb2NhbCwgMCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNZXNzYWdlIHNpemUgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyB0cmFuc3BvcnQgKGhlbmNlIG1zZ01heFNpemUKKyAgICAgKiBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBsZWdhbCBzaXplIG9mIGFuIFNOTVAgbWVzc2FnZSkuICAKKyAgICAgKi8KKworICAgIHQtPm1zZ01heFNpemUgPSAweDdmZmZmZmZmOworICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3RjcGJhc2VfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF90Y3BiYXNlX3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZTsKKyAgICB0LT5mX2FjY2VwdCAgID0gbmV0c25tcF90Y3A2X2FjY2VwdDsKKyAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF90Y3A2X2ZtdGFkZHI7CisKKyAgICByZXR1cm4gdDsKK30KKworLyoKKyAqIE5vdCBleHRlcm4gYnV0IHN0aWxsIGRlZmluZWQgaW4gc25tcFVEUElQdjZEb21haW4uYworICovCitleHRlcm4gaW50CituZXRzbm1wX3NvY2thZGRyX2luNl8yKHN0cnVjdCBzb2NrYWRkcl9pbjYqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3RjcDZfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCisJCQkgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworCisgICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaW42XzIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7CisgICAgICAgIHJldHVybiBuZXRzbm1wX3RjcDZfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisKKy8qCisgKiBTZWU6CisgKiAKKyAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaW50ZXJuZXQtZHJhZnRzL2RyYWZ0LWlldGYtb3BzLXRhZGRyZXNzLW1pYi0wMS50eHQKKyAqIAorICogKG9yIG5ld2VyIGVxdWl2YWxlbnQpIGZvciBkZXRhaWxzIG9mIHRoZSBUQyB3aGljaCB3ZSBhcmUgdXNpbmcgZm9yCisgKiB0aGUgbWFwcGluZyBoZXJlLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF90Y3A2X2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKworICAgIGlmIChvX2xlbiA9PSAxOCkgeworICAgICAgICBtZW1zZXQoKHVfY2hhciAqKSAmIGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaW42X2FkZHIuczZfYWRkciksIG8sIDE2KTsKKyAgICAgICAgYWRkci5zaW42X3BvcnQgPSBodG9ucygob1sxNl0gPDwgOCkgKyBvWzE3XSk7CisgICAgICAgIHJldHVybiBuZXRzbm1wX3RjcDZfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisKK3ZvaWQKK25ldHNubXBfdGNwaXB2Nl9jdG9yKHZvaWQpCit7CisgICAgdGNwNkRvbWFpbi5uYW1lID0gbmV0c25tcF9UQ1BJUHY2RG9tYWluOworICAgIHRjcDZEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9UQ1BJUHY2RG9tYWluKSAvIHNpemVvZihvaWQpOworICAgIHRjcDZEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7CisgICAgdGNwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF90Y3A2X2NyZWF0ZV90c3RyaW5nOworICAgIHRjcDZEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfdGNwNl9jcmVhdGVfb3N0cmluZzsKKyAgICB0Y3A2RG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDQsIHNpemVvZihjaGFyICopKTsKKyAgICB0Y3A2RG9tYWluLnByZWZpeFswXSA9ICJ0Y3A2IjsKKyAgICB0Y3A2RG9tYWluLnByZWZpeFsxXSA9ICJ0Y3B2NiI7CisgICAgdGNwNkRvbWFpbi5wcmVmaXhbMl0gPSAidGNwaXB2NiI7CisKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnRjcDZEb21haW4pOworfQorCisjZW5kaWYgLyogTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4gKi8KKwpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTRkNmFkCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMKQEAgLTAsMCArMSwxMTgzIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjZXJ0X3V0aWwpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg+CisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKy8qIE9wZW5TU0wgSW5jbHVkZXMgKi8KKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDlfdmZ5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorCisjZGVmaW5lIExPR0FORERJRShtc2cpIGRvIHsgc25tcF9sb2coTE9HX0VSUiwgIiVzXG4iLCBtc2cpOyByZXR1cm4gMDsgfSB3aGlsZSgwKQorCitpbnQgb3BlbnNzbF9sb2NhbF9pbmRleDsKKworLyogdGhpcyBpcyBjYWxsZWQgZHVyaW5nIG5lZ290aWF0aW9ubiAqLworaW50IHZlcmlmeV9jYWxsYmFjayhpbnQgb2ssIFg1MDlfU1RPUkVfQ1RYICpjdHgpIHsKKyAgICBpbnQgZXJyLCBkZXB0aDsKKyAgICBjaGFyIGJ1ZlsxMDI0XSwgKmZpbmdlcnByaW50OworICAgIFg1MDkgKnRoZWNlcnQ7CisgICAgbmV0c25tcF9jZXJ0ICpjZXJ0OworICAgIF9uZXRzbm1wX3ZlcmlmeV9pbmZvICp2ZXJpZnlfaW5mbzsKKyAgICBTU0wgKnNzbDsKKworICAgIHRoZWNlcnQgPSBYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0KGN0eCk7CisgICAgZXJyID0gWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKGN0eCk7CisgICAgZGVwdGggPSBYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGgoY3R4KTsKKyAgICAKKyAgICAvKiB0aGluZ3MgdG8gZG86ICovCisKKyAgICBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUodGhlY2VydCksIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgIGZpbmdlcnByaW50ID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KHRoZWNlcnQsIC0xKTsKKyAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIkNlcnQ6ICVzXG4iLCBidWYpKTsKKyAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIiAgZnA6ICVzXG4iLCBmaW5nZXJwcmludCA/CisgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQgOiAidW5rbm93biIpKTsKKworICAgIHNzbCA9IFg1MDlfU1RPUkVfQ1RYX2dldF9leF9kYXRhKGN0eCwgU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgpKTsKKyAgICB2ZXJpZnlfaW5mbyA9IFNTTF9nZXRfZXhfZGF0YShzc2wsIG9wZW5zc2xfbG9jYWxfaW5kZXgpOworCisgICAgaWYgKHZlcmlmeV9pbmZvICYmIG9rICYmIGRlcHRoID4gMCkgeworICAgICAgICAvKiByZW1lbWJlciB0aGF0IGEgcGFyZW50IGNlcnRpZmljYXRlIGhhcyBiZWVuIG1hcmtlZCBhcyB0cnVzdGVkICovCisgICAgICAgIHZlcmlmeV9pbmZvLT5mbGFncyB8PSBWUkZZX1BBUkVOVF9XQVNfT0s7CisgICAgfQorCisgICAgLyogdGhpcyBlbnN1cmVzIGZvciBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXMgd2UgaGF2ZSBhIHZhbGlkCisgICAgICAgbG9jYWxseSBrbm93biBmaW5nZXJwcmludCBhbmQgdGhlbiBhY2NlcHQgaXQgKi8KKyAgICBpZiAoIW9rICYmCisgICAgICAgIChYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVCA9PSBlcnIgfHwKKyAgICAgICAgIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVF9MT0NBTExZID09IGVyciB8fAorICAgICAgICAgWDUwOV9WX0VSUl9DRVJUX1VOVFJVU1RFRCA9PSBlcnIgfHwKKyAgICAgICAgIFg1MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSA9PSBlcnIgfHwKKyAgICAgICAgIFg1MDlfVl9FUlJfU0VMRl9TSUdORURfQ0VSVF9JTl9DSEFJTiA9PSBlcnIpKSB7CisKKyAgICAgICAgY2VydCA9IG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfUkVNT1RFX1BFRVIsIE5TX0NFUlRLRVlfRklOR0VSUFJJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopZmluZ2VycHJpbnQpOworICAgICAgICBpZiAoY2VydCkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAiIEZvdW5kIGxvY2FsbHk6ICVzLyVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5kaXIsIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKworCisgICAgICAgIGlmIChjZXJ0KSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgInZlcmlmeV9jYWxsYmFjayBjYWxsZWQgd2l0aDogb2s9JWQgY3R4PSVwIGRlcHRoPSVkIGVycj0laTolc1xuIiwgb2ssIGN0eCwgZGVwdGgsIGVyciwgWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyKSkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICIgIGFjY2VwdGluZyBtYXRjaGluZyBmcCBvZiBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBmb3VuZCBpbjogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgICAgICBTTk1QX0ZSRUUoZmluZ2VycHJpbnQpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIiAgbm8gbWF0Y2hpbmcgZnAgZm91bmRcbiIpKTsKKyAgICAgICAgICAgIC8qIGxvZyB3aGVyZSB3ZSBhcmUgYW5kIHdoeSBjYWxsZWQgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0bHMgdmVyaWZpY2F0aW9uIGZhaWx1cmU6IG9rPSVkIGN0eD0lcCBkZXB0aD0lZCBlcnI9JWk6JXNcbiIsIG9rLCBjdHgsIGRlcHRoLCBlcnIsIFg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycikpOworICAgICAgICAgICAgU05NUF9GUkVFKGZpbmdlcnByaW50KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKDAgPT0gZGVwdGggJiYgdmVyaWZ5X2luZm8gJiYKKyAgICAgICAgICAgICh2ZXJpZnlfaW5mby0+ZmxhZ3MgJiBWUkZZX1BBUkVOVF9XQVNfT0spKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgInZlcmlmeV9jYWxsYmFjayBjYWxsZWQgd2l0aDogb2s9JWQgY3R4PSVwIGRlcHRoPSVkIGVycj0laTolc1xuIiwgb2ssIGN0eCwgZGVwdGgsIGVyciwgWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyKSkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICIgIGEgcGFyZW50IHdhcyBvaywgc28gcmV0dXJuaW5nIG9rIGZvciB0aGlzIGNoaWxkIGNlcnRpZmljYXRlXG4iKSk7CisgICAgICAgICAgICBTTk1QX0ZSRUUoZmluZ2VycHJpbnQpOworICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHdlJ2xsIGNoZWNrIHRoZSBob3N0bmFtZSBsYXRlciBhdCB0aGlzIGxldmVsICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoMCA9PSBvaykKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRscyB2ZXJpZmljYXRpb24gZmFpbHVyZTogb2s9JWQgY3R4PSVwIGRlcHRoPSVkIGVycj0laTolc1xuIiwgb2ssIGN0eCwgZGVwdGgsIGVyciwgWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyKSk7CisgICAgZWxzZQorICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgInZlcmlmeV9jYWxsYmFjayBjYWxsZWQgd2l0aDogb2s9JWQgY3R4PSVwIGRlcHRoPSVkIGVycj0laTolc1xuIiwgb2ssIGN0eCwgZGVwdGgsIGVyciwgWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyKSkpOworICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAiICByZXR1cm5pbmcgdGhlIHBhc3NlZCBpbiB2YWx1ZSBvZiAlZFxuIiwKKyAgICAgICAgICAgICAgICBvaykpOworICAgIFNOTVBfRlJFRShmaW5nZXJwcmludCk7CisgICAgcmV0dXJuKG9rKTsKK30KKworI2RlZmluZSBWRVJJRklFRF9GSU5HRVJQUklOVCAgICAgIDAKKyNkZWZpbmUgTk9fRklOR0VSUFJJTlRfQVZBSUxBQkxFICAxCisjZGVmaW5lIEZBSUxFRF9GSU5HRVJQUklOVF9WRVJJRlkgMgorCitzdGF0aWMgaW50CitfbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9yZW1vdGVfZmluZ2VycHJpbnQoWDUwOSAqcmVtb3RlX2NlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJ5X2RlZmF1bHQpIHsKKworICAgIGNoYXIgICAgICAgICAgICAqZmluZ2VycHJpbnQ7CisKKyAgICBmaW5nZXJwcmludCA9CisgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChyZW1vdGVfY2VydCwgLTEpOworCisgICAgaWYgKCFmaW5nZXJwcmludCkgeworICAgICAgICAvKiBubyBwZWVyIGNlcnQgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byBnZXQgZmluZ2VycHJpbnQgb2YgcmVtb3RlIGNlcnRpZmljYXRlXG4iKTsKKyAgICAgICAgcmV0dXJuIEZBSUxFRF9GSU5HRVJQUklOVF9WRVJJRlk7CisgICAgfQorCisgICAgaWYgKCF0bHNkYXRhLT50aGVpcl9maW5nZXJwcmludCAmJiB0bHNkYXRhLT50aGVpcl9pZGVudGl0eSkgeworICAgICAgICAvKiB3ZSBoYXZlIGFuIGlkZW50aXR5OyB0cnkgYW5kIGZpbmQgaXQncyBmaW5nZXJwcmludCAqLworICAgICAgICBuZXRzbm1wX2NlcnQgKnBlZXJfY2VydDsKKyAgICAgICAgcGVlcl9jZXJ0ID0KKyAgICAgICAgICAgIG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfUkVNT1RFX1BFRVIsIE5TX0NFUlRLRVlfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHNkYXRhLT50aGVpcl9pZGVudGl0eSk7CisKKyAgICAgICAgaWYgKHBlZXJfY2VydCkKKyAgICAgICAgICAgIHRsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50ID0KKyAgICAgICAgICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQocGVlcl9jZXJ0LT5vY2VydCwgLTEpOworICAgIH0KKworICAgIGlmICghdGxzZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQgJiYgdHJ5X2RlZmF1bHQpIHsKKyAgICAgICAgLyogdHJ5IGZvciB0aGUgZGVmYXVsdCBpbnN0ZWFkICovCisgICAgICAgIG5ldHNubXBfY2VydCAqcGVlcl9jZXJ0OworICAgICAgICBwZWVyX2NlcnQgPQorICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9SRU1PVEVfUEVFUiwgTlNfQ0VSVEtFWV9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgaWYgKHBlZXJfY2VydCkKKyAgICAgICAgICAgIHRsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50ID0KKyAgICAgICAgICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQocGVlcl9jZXJ0LT5vY2VydCwgLTEpOworICAgIH0KKyAgICAKKyAgICBpZiAodGxzZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQpIHsKKyAgICAgICAgbmV0c25tcF9mcF9sb3dlcmNhc2VfYW5kX3N0cmlwX2NvbG9uKHRsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50KTsKKyAgICAgICAgaWYgKDAgIT0gc3RyY21wKHRsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50LCBmaW5nZXJwcmludCkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJUaGUgZmluZ2VycHJpbnQgZnJvbSB0aGUgcmVtb3RlIHNpZGUncyBjZXJ0aWZpY2F0ZSBkaWRuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkXG4iKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIgIGdvdCAlcywgZXhwZWN0ZWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwgdGxzZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQpOworICAgICAgICAgICAgZnJlZShmaW5nZXJwcmludCk7CisgICAgICAgICAgICByZXR1cm4gRkFJTEVEX0ZJTkdFUlBSSU5UX1ZFUklGWTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAiTm8gZmluZ2VycHJpbnQgZm9yIHRoZSByZW1vdGUgZW50aXR5IGF2YWlsYWJsZSB0byB2ZXJpZnlcbiIpKTsKKyAgICAgICAgZnJlZShmaW5nZXJwcmludCk7CisgICAgICAgIHJldHVybiBOT19GSU5HRVJQUklOVF9BVkFJTEFCTEU7CisgICAgfQorCisgICAgZnJlZShmaW5nZXJwcmludCk7CisgICAgcmV0dXJuIFZFUklGSUVEX0ZJTkdFUlBSSU5UOworfQorCisvKiB0aGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgY29ubmVjdGlvbiBvbiB0aGUgY2xpZW50IHNpZGUgYnkgdXMgdG8gY2hlY2sKKyAgIG90aGVyIGFzcGVjdHMgYWJvdXQgdGhlIGNvbm5lY3Rpb24gKi8KK2ludAorbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9zZXJ2ZXJfY2VydChTU0wgKnNzbCwgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSkgeworICAgIC8qIFhYWCAqLworICAgIFg1MDkgICAgICAgICAgICAqcmVtb3RlX2NlcnQ7CisgICAgY2hhciAgICAgICAgICAgICpjaGVja19uYW1lOworICAgIGludCAgICAgICAgICAgICAgcmV0OworICAgIAorICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihzc2wgIT0gTlVMTCwgU05NUEVSUl9HRU5FUlIpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybih0bHNkYXRhICE9IE5VTEwsIFNOTVBFUlJfR0VORVJSKTsKKyAgICAKKyAgICBpZiAoTlVMTCA9PSAocmVtb3RlX2NlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkpIHsKKyAgICAgICAgLyogbm8gcGVlciBjZXJ0ICovCisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLAorICAgICAgICAgICAgICAgICAgICAicmVtb3RlIGNvbm5lY3Rpb24gcHJvdmlkZWQgbm8gY2VydGlmaWNhdGUgKHlldClcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfVExTX05PX0NFUlRJRklDQVRFOworICAgIH0KKworICAgIC8qIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaW5nZXJwcmludCBtYXRjaGVzICovCisgICAgcmV0ID0gX25ldHNubXBfdGxzYmFzZV92ZXJpZnlfcmVtb3RlX2ZpbmdlcnByaW50KHJlbW90ZV9jZXJ0LCB0bHNkYXRhLCAxKTsKKyAgICBzd2l0Y2gocmV0KSB7CisgICAgY2FzZSBWRVJJRklFRF9GSU5HRVJQUklOVDoKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIGNhc2UgRkFJTEVEX0ZJTkdFUlBSSU5UX1ZFUklGWToKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworCisgICAgY2FzZSBOT19GSU5HRVJQUklOVF9BVkFJTEFCTEU6CisgICAgICAgIGlmICh0bHNkYXRhLT50aGVpcl9ob3N0bmFtZSAmJiB0bHNkYXRhLT50aGVpcl9ob3N0bmFtZVswXSAhPSAnXDAnKSB7CisgICAgICAgICAgICBHRU5FUkFMX05BTUVTICAgICAgKm9uYW1lczsKKyAgICAgICAgICAgIGNvbnN0IEdFTkVSQUxfTkFNRSAqb25hbWUgPSBOVUxMOworICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICBpLCBqOworICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICBjb3VudDsKKyAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgYnVmW1NQUklOVF9NQVhfTEVOXTsKKyAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgaXNfd2lsZGNhcmRlZCA9IDA7CisgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgKmNvbXBhcmVfdG87CisKKyAgICAgICAgICAgIC8qIHNlZSBpZiB0aGUgcmVxdWVzdGVkIGhvc3RuYW1lIGhhcyBhIHdpbGRjYXJkIHByZWZpeCAqLworICAgICAgICAgICAgaWYgKHN0cm5jbXAodGxzZGF0YS0+dGhlaXJfaG9zdG5hbWUsICIqLiIsIDIpID09IDApIHsKKyAgICAgICAgICAgICAgICBpc193aWxkY2FyZGVkID0gMTsKKyAgICAgICAgICAgICAgICBjb21wYXJlX3RvID0gdGxzZGF0YS0+dGhlaXJfaG9zdG5hbWUgKyAyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlX3RvID0gdGxzZGF0YS0+dGhlaXJfaG9zdG5hbWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGlmIHRoZSBob3N0bmFtZSB3ZSB3ZXJlIGV4cGVjdGluZyB0byB0YWxrIHRvIG1hdGNoZXMKKyAgICAgICAgICAgICAgIHRoZSBjZXJ0LCB0aGVuIHdlIGNhbiBhY2NlcHQgdGhpcyBjb25uZWN0aW9uLiAqLworCisgICAgICAgICAgICAvKiBjaGVjayBhZ2FpbnN0IHRoZSBETlMgc3ViamVjdEFsdE5hbWUgKi8KKyAgICAgICAgICAgIG9uYW1lcyA9IChHRU5FUkFMX05BTUVTICopWDUwOV9nZXRfZXh0X2QyaShyZW1vdGVfY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfc3ViamVjdF9hbHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMICk7CisgICAgICAgICAgICBpZiAoTlVMTCAhPSBvbmFtZXMpIHsKKyAgICAgICAgICAgICAgICBjb3VudCA9IHNrX0dFTkVSQUxfTkFNRV9udW0ob25hbWVzKTsKKworICAgICAgICAgICAgICAgIGZvciAoaT0wIDsgaSA8Y291bnQ7ICsraSkgIHsKKyAgICAgICAgICAgICAgICAgICAgb25hbWUgPSBza19HRU5FUkFMX05BTUVfdmFsdWUob25hbWVzLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEdFTl9ETlMgPT0gb25hbWUtPnR5cGUpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9TVFJJTkdfdG9fVVRGOCgodW5zaWduZWQgY2hhcioqKSZjaGVja19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmFtZS0+ZC5pYTUpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIGxvd2VyY2FzZSBmb3IgY29tcGFyaXNvbnMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAgOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY2hlY2tfbmFtZSAmJiBqIDwgc2l6ZW9mKGJ1ZiktMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjaGVja19uYW1lLCArK2ogKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzYXNjaWkoKmNoZWNrX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZbal0gPSB0b2xvd2VyKDB4RkYgJiAqY2hlY2tfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IHNpemVvZihidWYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZltqXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19uYW1lID0gYnVmOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfd2lsZGNhcmRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlICpvbmx5KiBhbGxvdyBwYXNzaW5nIHRpbGwgdGhlIGZpcnN0ICcuJyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGllICouZXhhbXBsZS5jb20gY2FuJ3QgbWF0Y2ggYS5iLmV4YW1wbGUuY29tICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfbmFtZSA9IHN0cmNocihjaGVja19uYW1lLCAnLicpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICJjaGVja2luZyBzdWJqZWN0QWx0bmFtZSBvZiBkbnM6JXNcbiIsIGNoZWNrX25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoY29tcGFyZV90bywgY2hlY2tfbmFtZSkgPT0gMCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICJTdWNjZXNzZnVsIG1hdGNoIG9uIGEgc3ViamVjdEFsdG5hbWUgb2YgZG5zOiVzXG4iLCBjaGVja19uYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogY2hlY2sgdGhlIGNvbW1vbiBuYW1lIGZvciBhIG1hdGNoICovCisgICAgICAgICAgICBjaGVja19uYW1lID0KKyAgICAgICAgICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfY29tbW9uTmFtZShyZW1vdGVfY2VydCwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgICAgIGlmIChpc193aWxkY2FyZGVkKSB7CisgICAgICAgICAgICAgICAgLyogd2UgKm9ubHkqIGFsbG93IHBhc3NpbmcgdGlsbCB0aGUgZmlyc3QgJy4nICovCisgICAgICAgICAgICAgICAgLyogaWUgKi5leGFtcGxlLmNvbSBjYW4ndCBtYXRjaCBhLmIuZXhhbXBsZS5jb20gKi8KKyAgICAgICAgICAgICAgICBjaGVja19uYW1lID0gc3RyY2hyKGNoZWNrX25hbWUsICcuJykgKyAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RyY21wKGNvbXBhcmVfdG8sIGNoZWNrX25hbWUpID09IDApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIlN1Y2Nlc3NmdWwgbWF0Y2ggb24gYSBjb21tb24gbmFtZSBvZiAlc1xuIiwgY2hlY2tfbmFtZSkpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJObyBtYXRjaGluZyBuYW1lcyBpbiB0aGUgY2VydGlmaWNhdGUgdG8gbWF0Y2ggdGhlIGV4cGVjdGVkICVzXG4iLCB0bHNkYXRhLT50aGVpcl9ob3N0bmFtZSk7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisKKyAgICAgICAgfQorICAgICAgICAvKiBYWFg6IGNoZWNrIGZvciBob3N0bmFtZSBtYXRjaCBpbnN0ZWFkICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW4gbm90IHZlcmlmeSBhIHJlbW90ZSBzZXJ2ZXIgaWRlbnRpdHkgd2l0aG91dCBjb25maWd1cmF0aW9uXG4iKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKyAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgInNob3VsZG4ndCBnZXQgaGVyZVxuIikpOworICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKK30KKworLyogdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gb24gdGhlIHNlcnZlciBzaWRlIGJ5IHVzIHRvIGNoZWNrCisgICB0aGUgdmFsaWRpdHkgb2YgdGhlIGNsaWVudCdzIGNlcnRpZmljYXRlICovCitpbnQKK25ldHNubXBfdGxzYmFzZV92ZXJpZnlfY2xpZW50X2NlcnQoU1NMICpzc2wsIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGEpIHsKKyAgICAvKiBYWFggKi8KKyAgICBYNTA5ICAgICAgICAgICAgKnJlbW90ZV9jZXJ0OworICAgIGludCByZXQ7CisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMy4yLCBwYXJhZ3JhcGggMToKKyAgICAgICBBIChEKVRMUyBzZXJ2ZXIgc2hvdWxkIGFjY2VwdCBuZXcgc2Vzc2lvbiBjb25uZWN0aW9ucyBmcm9tIGFueSBjbGllbnQKKyAgICAgICB0aGF0IGl0IGlzIGFibGUgdG8gdmVyaWZ5IHRoZSBjbGllbnQncyBjcmVkZW50aWFscyBmb3IuICBUaGlzIGlzIGRvbmUKKyAgICAgICBieSBhdXRoZW50aWNhdGluZyB0aGUgY2xpZW50J3MgcHJlc2VudGVkIGNlcnRpZmljYXRlIHRocm91Z2ggYQorICAgICAgIGNlcnRpZmljYXRlIHBhdGggdmFsaWRhdGlvbiBwcm9jZXNzIChlLmcuICBbUkZDNTI4MF0pIG9yIHRocm91Z2gKKyAgICAgICBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCB2ZXJpZmljYXRpb24gdXNpbmcgZmluZ2VycHJpbnRzIGNvbmZpZ3VyZWQgaW4KKyAgICAgICB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuICBBZnRlcndhcmQgdGhlIHNlcnZlciB3aWxsIGRldGVybWluZSB0aGUKKyAgICAgICBpZGVudGl0eSBvZiB0aGUgcmVtb3RlIGVudGl0eSB1c2luZyB0aGUgZm9sbG93aW5nIHByb2NlZHVyZXMuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAgICArIHBhdGggdmFsaWRhdGlvbiBpcyB0YWtlbiBjYXJlIG9mIGR1cmluZyB0aGUgb3BlbnNzbCB2ZXJpZnkKKyAgICAgICAgIHJvdXRpbmVzLCBvdXIgcGFydCBvZiB3aGljaCBpcyBoYW5sZGVkIGluIHZlcmlmeV9jYWxsYmFjaworICAgICAgICAgYWJvdmUuCisgICAgICAgKyBmaW5nZXJwcmludCB2ZXJpZmljYXRpb24gaGFwcGVucyBiZWxvdy4KKyAgICAqLworICAgIGlmIChOVUxMID09IChyZW1vdGVfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSkgeworICAgICAgICAvKiBubyBwZWVyIGNlcnQgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsCisgICAgICAgICAgICAgICAgICAgICJyZW1vdGUgY29ubmVjdGlvbiBwcm92aWRlZCBubyBjZXJ0aWZpY2F0ZSAoeWV0KVxuIikpOworICAgICAgICByZXR1cm4gU05NUEVSUl9UTFNfTk9fQ0VSVElGSUNBVEU7CisgICAgfQorCisgICAgLyogd2UgZG9uJ3QgZm9yY2UgYSBrbm93biByZW1vdGUgZmluZ2VycHJpbnQgZm9yIGEgY2xpZW50IHNpbmNlIHdlCisgICAgICAgd2lsbCBhY2NlcHQgYW55IGNlcnRpZmljYXRlIHdlIGtub3cgYWJvdXQgKGFuZCBsYXRlciBkZXJpdmUgdGhlCisgICAgICAgc2VjdXJpdHlOYW1lIGZyb20gaXQgYW5kIGFwcGx5IGFjY2VzcyBjb250cm9sKSAqLworICAgIHJldCA9IF9uZXRzbm1wX3Rsc2Jhc2VfdmVyaWZ5X3JlbW90ZV9maW5nZXJwcmludChyZW1vdGVfY2VydCwgdGxzZGF0YSwgMCk7CisgICAgc3dpdGNoKHJldCkgeworICAgIGNhc2UgRkFJTEVEX0ZJTkdFUlBSSU5UX1ZFUklGWToKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICJmYWlsZWQgdG8gdmVyaWZ5IGEgY2xpZW50IGZpbmdlcnByaW50XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKworICAgIGNhc2UgTk9fRklOR0VSUFJJTlRfQVZBSUxBQkxFOgorICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIm5vIGtub3duIGZpbmdlcnByaW50IGF2YWlsYWJsZSAobm90IGEgZmFpbHVyZSBjYXNlKVxuIikpOworICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgY2FzZSBWRVJJRklFRF9GSU5HRVJQUklOVDoKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICJWZXJpZmllZCBjbGllbnQgZmluZ2VycHJpbnRcbiIpKTsKKyAgICAgICAgdGxzZGF0YS0+ZmxhZ3MgfD0gTkVUU05NUF9UTFNCQVNFX0NFUlRfRlBfVkVSSUZJRUQ7CisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICJzaG91bGRuJ3QgZ2V0IGhlcmVcbiIpKTsKKyAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Cit9CisKKy8qIHRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBjb25uZWN0aW9uIG9uIHRoZSBzZXJ2ZXIgc2lkZSBieSB1cyB0bworICAgY2hlY2sgb3RoZXIgYXNwZWN0cyBhYm91dCB0aGUgY29ubmVjdGlvbiBhbmQgb2J0YWluIHRoZQorICAgc2VjdXJpdHlOYW1lIGZyb20gdGhlIHJlbW90ZSBjZXJ0aWZpY2F0ZS4gKi8KK2ludAorbmV0c25tcF90bHNiYXNlX2V4dHJhY3Rfc2VjdXJpdHlfbmFtZShTU0wgKnNzbCwgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSkgeworICAgIG5ldHNubXBfY29udGFpbmVyICAqY2hhaW5fbWFwczsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICAgKmNlcnRfbWFwLCAqcGVlcl9jZXJ0OworICAgIG5ldHNubXBfaXRlcmF0b3IgICppdHI7CisgICAgaW50ICAgICAgICAgICAgICAgICByYzsKKworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihzc2wgIT0gTlVMTCwgU05NUEVSUl9HRU5FUlIpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybih0bHNkYXRhICE9IE5VTEwsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIGlmIChOVUxMID09IChjaGFpbl9tYXBzID0gbmV0c25tcF9vcGVuc3NsX2dldF9jZXJ0X2NoYWluKHNzbCkpKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgLyoKKyAgICAgKiBtYXAgZmluZ2VycHJpbnRzIHRvIG1hcHBpbmcgZW50cmllcworICAgICAqLworICAgIHJjID0gbmV0c25tcF9jZXJ0X2dldF9zZWNuYW1lX21hcHMoY2hhaW5fbWFwcyk7CisgICAgaWYgKCgtMSA9PSByYykgfHwgKENPTlRBSU5FUl9TSVpFKGNoYWluX21hcHMpID09IDApKSB7CisgICAgICAgIG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyX2ZyZWUoY2hhaW5fbWFwcyk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNoYW5nZSBjb250YWluZXIgdG8gc29ydGVkIChieSBjbGVhcmluZyB1bnNvcnRlZCBvcHRpb24pLCB0aGVuCisgICAgICogaXRlcmF0ZSBvdmVyIGl0IHVudGlsIHdlIGZpbmQgYSBtYXAgdGhhdCByZXR1cm5zIGEgc2VjbmFtZS4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfU0VUX09QVElPTlMoY2hhaW5fbWFwcywgMCwgcmMpOworICAgIGl0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihjaGFpbl9tYXBzKTsKKyAgICBpZiAoTlVMTCA9PSBpdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIHNlY25hbWUgZmluZ2VycHJpbnRzXG4iKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXJfZnJlZShjaGFpbl9tYXBzKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKyAgICBwZWVyX2NlcnQgPSBjZXJ0X21hcCA9IElURVJBVE9SX0ZJUlNUKGl0cik7CisgICAgZm9yKCA7ICF0bHNkYXRhLT5zZWN1cml0eU5hbWUgJiYgY2VydF9tYXA7IGNlcnRfbWFwID0gSVRFUkFUT1JfTkVYVChpdHIpKQorICAgICAgICB0bHNkYXRhLT5zZWN1cml0eU5hbWUgPQorICAgICAgICAgICAgbmV0c25tcF9vcGVuc3NsX2V4dHJhY3Rfc2VjbmFtZShjZXJ0X21hcCwgcGVlcl9jZXJ0KTsKKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisKKyAgICBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcl9mcmVlKGNoYWluX21hcHMpOworICAgICAgIAorICAgIHJldHVybiAodGxzZGF0YS0+c2VjdXJpdHlOYW1lID8gU05NUEVSUl9TVUNDRVNTIDogU05NUEVSUl9HRU5FUlIpOworfQorCitpbnQKK190cnVzdF90aGlzX2NlcnQoU1NMX0NUWCAqdGhlX2N0eCwgY2hhciAqY2VydHNwZWMpIHsKKyAgICBuZXRzbm1wX2NlcnQgKnRydXN0Y2VydDsKKworICAgIERFQlVHTVNHVEwoKCJzc2xjdHhfY2xpZW50IiwgIlRyeWluZyB0byBsb2FkIGEgdHJ1c3RlZCBjZXJ0aWZpY2F0ZTogJXNcbiIsCisgICAgICAgICAgICAgICAgY2VydHNwZWMpKTsKKworICAgIC8qIGxvYWQgdGhpcyBpZGVudGlmaWVyIGludG8gdGhlIHRydXN0IGNoYWluICovCisgICAgdHJ1c3RjZXJ0ID0gbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9DQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU19DRVJUS0VZX01VTFRJUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRzcGVjKTsKKyAgICBpZiAoIXRydXN0Y2VydCkKKyAgICAgICAgdHJ1c3RjZXJ0ID0gbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9SRU1PVEVfUEVFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNfQ0VSVEtFWV9NVUxUSVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHNwZWMpOworICAgIGlmICghdHJ1c3RjZXJ0KQorICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBmaW5kIHJlcXVlc3RlZCBjZXJ0aWZpY2F0ZSB0byB0cnVzdCIpOworICAgICAgICAKKyAgICAvKiBBZGQgdGhlIGNlcnRpZmljYXRlIHRvIHRoZSBjb250ZXh0ICovCisgICAgaWYgKG5ldHNubXBfY2VydF90cnVzdF9jYSh0aGVfY3R4LCB0cnVzdGNlcnQpICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgTE9HQU5ERElFKCJmYWlsZWQgdG8gbG9hZCB0cnVzdCBjZXJ0aWZpY2F0ZSIpOworCisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQKK19sb2FkX3RydXN0ZWRfY2VydHMoU1NMX0NUWCAqdGhlX2N0eCkgeworICAgIG5ldHNubXBfY29udGFpbmVyICp0cnVzdGVkX2NlcnRzID0gTlVMTDsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqdHJ1c3RlZF9jZXJ0X2l0ZXJhdG9yID0gTlVMTDsKKyAgICBjaGFyICpmaW5nZXJwcmludDsKKworICAgIHRydXN0ZWRfY2VydHMgPSBuZXRzbm1wX2NlcnRfZ2V0X3RydXN0bGlzdCgpOworICAgIHRydXN0ZWRfY2VydF9pdGVyYXRvciA9IENPTlRBSU5FUl9JVEVSQVRPUih0cnVzdGVkX2NlcnRzKTsKKyAgICBpZiAodHJ1c3RlZF9jZXJ0X2l0ZXJhdG9yKSB7CisgICAgICAgIGZvciAoZmluZ2VycHJpbnQgPSAoY2hhciAqKSBJVEVSQVRPUl9GSVJTVCh0cnVzdGVkX2NlcnRfaXRlcmF0b3IpOworICAgICAgICAgICAgIGZpbmdlcnByaW50OyBmaW5nZXJwcmludCA9IElURVJBVE9SX05FWFQodHJ1c3RlZF9jZXJ0X2l0ZXJhdG9yKSkgeworICAgICAgICAgICAgaWYgKCFfdHJ1c3RfdGhpc19jZXJ0KHRoZV9jdHgsIGZpbmdlcnByaW50KSkKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGxvYWQgdHJ1c3QgY2VydDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQpOworICAgICAgICB9CisgICAgICAgIElURVJBVE9SX1JFTEVBU0UodHJ1c3RlZF9jZXJ0X2l0ZXJhdG9yKTsKKyAgICB9Cit9ICAgIAorCitTU0xfQ1RYICoKK19zc2xjdHhfY29tbW9uX3NldHVwKFNTTF9DVFggKnRoZV9jdHgsIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2Jhc2UpIHsKKyAgICBjaGFyICAgICAgICAgKmNybEZpbGU7CisgICAgY2hhciAgICAgICAgICpjaXBoZXJMaXN0OworICAgIFg1MDlfTE9PS1VQICAqbG9va3VwOworICAgIFg1MDlfU1RPUkUgICAqY2VydF9zdG9yZSA9IE5VTEw7CisKKyAgICBfbG9hZF90cnVzdGVkX2NlcnRzKHRoZV9jdHgpOworCisgICAgLyogYWRkIGluIHRoZSBDUkxzIGlmIGF2YWlsYWJsZSAqLworCisgICAgY3JsRmlsZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X0NSTF9GSUxFKTsKKyAgICBpZiAoTlVMTCAhPSBjcmxGaWxlKSB7CisgICAgICAgIGNlcnRfc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHRoZV9jdHgpOworICAgICAgICBERUJVR01TR1RMKCgic3NsY3R4X2NsaWVudCIsICJsb2FkaW5nIENSTDogJXNcbiIsIGNybEZpbGUpKTsKKyAgICAgICAgaWYgKCFjZXJ0X3N0b3JlKQorICAgICAgICAgICAgTE9HQU5ERElFKCJmYWlsZWQgdG8gZmluZCBjZXJ0aWZpY2F0ZSBzdG9yZSIpOworICAgICAgICBpZiAoIShsb29rdXAgPSBYNTA5X1NUT1JFX2FkZF9sb29rdXAoY2VydF9zdG9yZSwgWDUwOV9MT09LVVBfZmlsZSgpKSkpCisgICAgICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBjcmVhdGUgYSBsb29rdXAgZnVuY3Rpb24gZm9yIHRoZSBDUkwgZmlsZSIpOworICAgICAgICBpZiAoWDUwOV9sb2FkX2NybF9maWxlKGxvb2t1cCwgY3JsRmlsZSwgWDUwOV9GSUxFVFlQRV9QRU0pICE9IDEpCisgICAgICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBsb2FkIHRoZSBDUkwgZmlsZSIpOworICAgICAgICAvKiB0ZWxsIG9wZW5zc2wgdG8gY2hlY2sgQ1JMcyAqLworICAgICAgICBYNTA5X1NUT1JFX3NldF9mbGFncyhjZXJ0X3N0b3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19DUkxfQ0hFQ0sgfCBYNTA5X1ZfRkxBR19DUkxfQ0hFQ0tfQUxMKTsKKyAgICB9CisKKyAgICBjaXBoZXJMaXN0ID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RMU19BTEdPUklUTVMpOworICAgIGlmIChOVUxMICE9IGNpcGhlckxpc3QpIHsKKyAgICAgICAgaWYgKFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KHRoZV9jdHgsIGNpcGhlckxpc3QpICE9IDEpCisgICAgICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBzZXQgdGhlIGNpcGhlciBsaXN0IHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sInNldCBTU0wgY2lwaGVyIGxpc3QgdG8gJyVzJ1xuIiwgY2lwaGVyTGlzdCk7CisgICAgfQorICAgIHJldHVybiB0aGVfY3R4OworfQorCitTU0xfQ1RYICoKK3NzbGN0eF9jbGllbnRfc2V0dXAoY29uc3QgU1NMX01FVEhPRCAqbWV0aG9kLCBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNiYXNlKSB7CisgICAgbmV0c25tcF9jZXJ0ICppZF9jZXJ0LCAqcGVlcl9jZXJ0OworICAgIFNTTF9DVFggICAgICAqdGhlX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFNldCB1cCB0aGUgY2xpZW50IGNvbnRleHQKKyAgICAgKi8KKyAgICB0aGVfY3R4ID0gU1NMX0NUWF9uZXcoTkVUU05NUF9SRU1PVkVfQ09OU1QoU1NMX01FVEhPRCAqLCBtZXRob2QpKTsKKyAgICBpZiAoIXRoZV9jdHgpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImFjazogJXBcbiIsIHRoZV9jdHgpOworICAgICAgICBMT0dBTkRESUUoImNhbid0IGNyZWF0ZSBhIG5ldyBjb250ZXh0Iik7CisgICAgfQorICAgIFNTTF9DVFhfc2V0X3JlYWRfYWhlYWQgKHRoZV9jdHgsIDEpOyAvKiBSZXF1aXJlZCBmb3IgRFRMUyAqLworICAgICAgICAKKyAgICBTU0xfQ1RYX3NldF92ZXJpZnkodGhlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgU1NMX1ZFUklGWV9QRUVSfAorICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUfAorICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX0NMSUVOVF9PTkNFLAorICAgICAgICAgICAgICAgICAgICAgICAmdmVyaWZ5X2NhbGxiYWNrKTsKKworICAgIGlmICh0bHNiYXNlLT5vdXJfaWRlbnRpdHkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNzbGN0eF9jbGllbnQiLCAibG9va2luZyBmb3IgbG9jYWwgaWQ6ICVzXG4iLCB0bHNiYXNlLT5vdXJfaWRlbnRpdHkpKTsKKyAgICAgICAgaWRfY2VydCA9IG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfSURFTlRJVFksIE5TX0NFUlRLRVlfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHNiYXNlLT5vdXJfaWRlbnRpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzc2xjdHhfY2xpZW50IiwgImxvb2tpbmcgZm9yIGRlZmF1bHQgbG9jYWwgaWQ6ICVzXG4iLCB0bHNiYXNlLT5vdXJfaWRlbnRpdHkpKTsKKyAgICAgICAgaWRfY2VydCA9IG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfSURFTlRJVFksIE5TX0NFUlRLRVlfREVGQVVMVCwgTlVMTCk7CisgICAgfQorCisgICAgaWYgKCFpZF9jZXJ0KQorICAgICAgICBMT0dBTkRESUUgKCJlcnJvciBmaW5kaW5nIGNsaWVudCBpZGVudGl0eSBrZXlzIik7CisKKyAgICBpZiAoIWlkX2NlcnQtPmtleSB8fCAhaWRfY2VydC0+a2V5LT5va2V5KQorICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBsb2FkIHByaXZhdGUga2V5Iik7CisKKyAgICBERUJVR01TR1RMKCgic3NsY3R4X2NsaWVudCIsICJ1c2luZyBwdWJsaWMga2V5OiAlc1xuIiwKKyAgICAgICAgICAgICAgICBpZF9jZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgREVCVUdNU0dUTCgoInNzbGN0eF9jbGllbnQiLCAidXNpbmcgcHJpdmF0ZSBrZXk6ICVzXG4iLAorICAgICAgICAgICAgICAgIGlkX2NlcnQtPmtleS0+aW5mby5maWxlbmFtZSkpOworCisgICAgaWYgKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKHRoZV9jdHgsIGlkX2NlcnQtPm9jZXJ0KSA8PSAwKQorICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBzZXQgdGhlIGNlcnRpZmljYXRlIHRvIHVzZSIpOworCisgICAgaWYgKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXkodGhlX2N0eCwgaWRfY2VydC0+a2V5LT5va2V5KSA8PSAwKQorICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBzZXQgdGhlIHByaXZhdGUga2V5IHRvIHVzZSIpOworCisgICAgaWYgKCFTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5KHRoZV9jdHgpKQorICAgICAgICBMT0dBTkRESUUoInB1YmxpYyBhbmQgcHJpdmF0ZSBrZXlzIGluY29tcGF0aWJsZSIpOworCisgICAgaWYgKHRsc2Jhc2UtPnRoZWlyX2lkZW50aXR5KQorICAgICAgICBwZWVyX2NlcnQgPSBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX1JFTU9URV9QRUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU19DRVJUS0VZX01VTFRJUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHNiYXNlLT50aGVpcl9pZGVudGl0eSk7CisgICAgZWxzZQorICAgICAgICBwZWVyX2NlcnQgPSBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX1JFTU9URV9QRUVSLCBOU19DRVJUS0VZX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChwZWVyX2NlcnQpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNzbGN0eF9jbGllbnQiLCAic2VydmVyJ3MgZXhwZWN0ZWQgcHVibGljIGtleTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHBlZXJfY2VydCA/IHBlZXJfY2VydC0+aW5mby5maWxlbmFtZSA6ICJub25lIikpOworCisgICAgICAgIC8qIFRydXN0IHRoZSBleHBlY3RlZCBjZXJ0aWZpY2F0ZSAqLworICAgICAgICBpZiAobmV0c25tcF9jZXJ0X3RydXN0X2NhKHRoZV9jdHgsIHBlZXJfY2VydCkgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICAgICAgTE9HQU5ERElFICgiZmFpbGVkIHRvIHNldCB2ZXJpZnkgcGF0aHMiKTsKKyAgICB9CisKKyAgICAvKiB0cnVzdCBhIGNlcnRpZmljYXRlIChwb3NzaWJseSBhIENBKSBhc3BlY2lmaWNhbGx5IHBhc3NlZCBpbiAqLworICAgIGlmICh0bHNiYXNlLT50cnVzdF9jZXJ0KSB7CisgICAgICAgIGlmICghX3RydXN0X3RoaXNfY2VydCh0aGVfY3R4LCB0bHNiYXNlLT50cnVzdF9jZXJ0KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBfc3NsY3R4X2NvbW1vbl9zZXR1cCh0aGVfY3R4LCB0bHNiYXNlKTsKK30KKworU1NMX0NUWCAqCitzc2xjdHhfc2VydmVyX3NldHVwKGNvbnN0IFNTTF9NRVRIT0QgKm1ldGhvZCkgeworICAgIG5ldHNubXBfY2VydCAqaWRfY2VydDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFNldCB1cCB0aGUgc2VydmVyIGNvbnRleHQKKyAgICAgKi8KKyAgICAvKiBzZXR0aW5nIHVwIGZvciBzc2wgKi8KKyAgICBTU0xfQ1RYICp0aGVfY3R4ID0gU1NMX0NUWF9uZXcoTkVUU05NUF9SRU1PVkVfQ09OU1QoU1NMX01FVEhPRCAqLCBtZXRob2QpKTsKKyAgICBpZiAoIXRoZV9jdHgpIHsKKyAgICAgICAgTE9HQU5ERElFKCJjYW4ndCBjcmVhdGUgYSBuZXcgY29udGV4dCIpOworICAgIH0KKworICAgIGlkX2NlcnQgPSBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX0lERU5USVRZLCBOU19DRVJUS0VZX0RFRkFVTFQsIE5VTEwpOworICAgIGlmICghaWRfY2VydCkKKyAgICAgICAgTE9HQU5ERElFICgiZXJyb3IgZmluZGluZyBzZXJ2ZXIgaWRlbnRpdHkga2V5cyIpOworCisgICAgaWYgKCFpZF9jZXJ0LT5rZXkgfHwgIWlkX2NlcnQtPmtleS0+b2tleSkKKyAgICAgICAgTE9HQU5ERElFKCJmYWlsZWQgdG8gbG9hZCBwcml2YXRlIGtleSIpOworCisgICAgREVCVUdNU0dUTCgoInNzbGN0eF9zZXJ2ZXIiLCAidXNpbmcgcHVibGljIGtleTogJXNcbiIsCisgICAgICAgICAgICAgICAgaWRfY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgIERFQlVHTVNHVEwoKCJzc2xjdHhfc2VydmVyIiwgInVzaW5nIHByaXZhdGUga2V5OiAlc1xuIiwKKyAgICAgICAgICAgICAgICBpZF9jZXJ0LT5rZXktPmluZm8uZmlsZW5hbWUpKTsKKworICAgIGlmIChTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZSh0aGVfY3R4LCBpZF9jZXJ0LT5vY2VydCkgPD0gMCkKKyAgICAgICAgTE9HQU5ERElFKCJmYWlsZWQgdG8gc2V0IHRoZSBjZXJ0aWZpY2F0ZSB0byB1c2UiKTsKKworICAgIGlmIChTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5KHRoZV9jdHgsIGlkX2NlcnQtPmtleS0+b2tleSkgPD0gMCkKKyAgICAgICAgTE9HQU5ERElFKCJmYWlsZWQgdG8gc2V0IHRoZSBwcml2YXRlIGtleSB0byB1c2UiKTsKKworICAgIGlmICghU1NMX0NUWF9jaGVja19wcml2YXRlX2tleSh0aGVfY3R4KSkKKyAgICAgICAgTE9HQU5ERElFKCJwdWJsaWMgYW5kIHByaXZhdGUga2V5cyBpbmNvbXBhdGlibGUiKTsKKworICAgIFNTTF9DVFhfc2V0X3JlYWRfYWhlYWQodGhlX2N0eCwgMSk7IC8qIFhYWDogRFRMUyBvbmx5PyAqLworCisgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHRoZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgIFNTTF9WRVJJRllfUEVFUnwKKyAgICAgICAgICAgICAgICAgICAgICAgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVHwKKyAgICAgICAgICAgICAgICAgICAgICAgU1NMX1ZFUklGWV9DTElFTlRfT05DRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJnZlcmlmeV9jYWxsYmFjayk7CisKKyAgICByZXR1cm4gX3NzbGN0eF9jb21tb25fc2V0dXAodGhlX2N0eCwgTlVMTCk7Cit9CisKK2ludAorbmV0c25tcF90bHNiYXNlX2NvbmZpZyhzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqdCwgY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybih0ICE9IE5VTEwsIC0xKTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4odC0+ZGF0YSAhPSBOVUxMLCAtMSk7CisKKyAgICB0bHNkYXRhID0gdC0+ZGF0YTsKKworICAgIGlmICgoc3RyY21wKHRva2VuLCAibG9jYWxDZXJ0IikgPT0gMCkgfHwKKyAgICAgICAgKHN0cmNtcCh0b2tlbiwgIm91cl9pZGVudGl0eSIpID09IDApKSB7CisgICAgICAgIFNOTVBfRlJFRSh0bHNkYXRhLT5vdXJfaWRlbnRpdHkpOworICAgICAgICB0bHNkYXRhLT5vdXJfaWRlbnRpdHkgPSBzdHJkdXAodmFsdWUpOworICAgICAgICBERUJVR01TR1QoKCJ0bHM6Y29uZmlnIiwib3VyIGlkZW50aXR5ICVzXG4iLCB2YWx1ZSkpOworICAgIH0KKworICAgIGlmICgoc3RyY21wKHRva2VuLCAicGVlckNlcnQiKSA9PSAwKSB8fAorICAgICAgICAoc3RyY21wKHRva2VuLCAidGhlaXJfaWRlbnRpdHkiKSA9PSAwKSkgeworICAgICAgICBTTk1QX0ZSRUUodGxzZGF0YS0+dGhlaXJfaWRlbnRpdHkpOworICAgICAgICB0bHNkYXRhLT50aGVpcl9pZGVudGl0eSA9IHN0cmR1cCh2YWx1ZSk7CisgICAgICAgIERFQlVHTVNHVCgoInRsczpjb25maWciLCJ0aGVpciBpZGVudGl0eSAlc1xuIiwgdmFsdWUpKTsKKyAgICB9CisKKyAgICBpZiAoKHN0cmNtcCh0b2tlbiwgInBlZXJIb3N0bmFtZSIpID09IDApIHx8CisgICAgICAgIChzdHJjbXAodG9rZW4sICJ0aGVpcl9ob3N0bmFtZSIpID09IDApKSB7CisgICAgICAgIFNOTVBfRlJFRSh0bHNkYXRhLT50aGVpcl9ob3N0bmFtZSk7CisgICAgICAgIHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lID0gc3RyZHVwKHZhbHVlKTsKKyAgICB9CisKKyAgICBpZiAoKHN0cmNtcCh0b2tlbiwgInRydXN0X2NlcnQiKSA9PSAwKSB8fAorICAgICAgICAoc3RyY21wKHRva2VuLCAidHJ1c3RDZXJ0IikgPT0gMCkpIHsKKyAgICAgICAgU05NUF9GUkVFKHRsc2RhdGEtPnRydXN0X2NlcnQpOworICAgICAgICB0bHNkYXRhLT50cnVzdF9jZXJ0ID0gc3RyZHVwKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworaW50CituZXRzbm1wX3Rsc2Jhc2Vfc2Vzc2lvbl9pbml0KHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICp0cmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3MpIHsKKyAgICAvKiB0aGUgZGVmYXVsdCBzZWN1cml0eSBtb2RlbCBoZXJlIHNob3VsZCBiZSBUU007IG1vc3Qgb3RoZXIKKyAgICAgICB0aGluZ3Mgd29uJ3Qgd29yayB3aXRoIFRMUyBiZWNhdXNlIHdlJ2xsIHRocm93IG91dCB0aGUgcGFja2V0CisgICAgICAgaWYgaXQgZG9lc24ndCBoYXZlIGEgcHJvcGVyIHRtU3RhdGVSZWYgKGFuZCBvbnlsIFRTTSBnZW5lcmF0ZXMKKyAgICAgICB0aGlzIGF0IHRoZSBtb21lbnQgKi8KKyAgICBpZiAoISh0cmFuc3BvcnQtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU4pKSB7CisgICAgICAgIGlmIChzZXNzLT5zZWN1cml0eU1vZGVsID09IFNOTVBfREVGQVVMVF9TRUNNT0RFTCkgeworICAgICAgICAgICAgc2Vzcy0+c2VjdXJpdHlNb2RlbCA9IFNOTVBfU0VDX01PREVMX1RTTTsKKyAgICAgICAgfSBlbHNlIGlmIChzZXNzLT5zZWN1cml0eU1vZGVsICE9IFNOTVBfU0VDX01PREVMX1RTTSkgeworICAgICAgICAgICAgc2Vzcy0+c2VjdXJpdHlNb2RlbCA9IFNOTVBfU0VDX01PREVMX1RTTTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJBIHNlY3VyaXR5IG1vZGVsIG90aGVyIHRoYW4gVFNNIGlzIGJlaW5nIHVzZWQgd2l0aCAoRClUTFM7IHVzaW5nIFRTTSBhbnl3YXlzXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChOVUxMID09IHNlc3MtPnNlY3VyaXR5TmFtZSkgeworICAgICAgICAgICAgLyogY2xpZW50IHNpZGUgZG9lc24ndCBuZWVkIGEgcmVhbCBzZWN1cml0eU5hbWUgKi8KKyAgICAgICAgICAgIC8qIFhYWDogY2FsbC1ob21lIGlzc3VlcyByZXF1aXJlIHRoZW0gdG8gc2V0IG9uZSBmb3IgVkFDTTsgYnV0CisgICAgICAgICAgICAgICB3ZSBkb24ndCBkbyBjYWxsaG9tZSB5ZXQgKi8KKyAgICAgICAgICAgIHNlc3MtPnNlY3VyaXR5TmFtZSA9IHN0cmR1cCgiX19CT0dVU19fIik7CisgICAgICAgICAgICBzZXNzLT5zZWN1cml0eU5hbWVMZW4gPSBzdHJsZW4oc2Vzcy0+c2VjdXJpdHlOYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXNzLT52ZXJzaW9uICE9IFNOTVBfVkVSU0lPTl8zKSB7CisgICAgICAgICAgICBzZXNzLT52ZXJzaW9uID0gU05NUF9WRVJTSU9OXzM7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQSBTTk1QIHZlcnNpb24gb3RoZXIgdGhhbiAzIHdhcyByZXF1ZXN0ZWQgd2l0aCAoRClUTFM7IHVzaW5nIDMgYW55d2F5c1xuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2Vzcy0+c2VjdXJpdHlMZXZlbCA8PSAwKSB7CisgICAgICAgICAgICBzZXNzLT5zZWN1cml0eUxldmVsID0gU05NUF9TRUNfTEVWRUxfQVVUSFBSSVY7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBoYXZlX2RvbmVfYm9vdHN0cmFwID0gMDsKKworc3RhdGljIGludAordGxzX2Jvb3RzdHJhcChpbnQgbWFqb3JpZCwgaW50IG1pbm9yaWQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKSB7CisgICAgY2hhciBpbmRleG5hbWVbXSA9ICJfbmV0c25tcF92ZXJpZnlfaW5mbyI7CisKKyAgICAvKiBkb24ndCBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlICovCisgICAgaWYgKGhhdmVfZG9uZV9ib290c3RyYXApCisgICAgICAgIHJldHVybiAwOworICAgIGhhdmVfZG9uZV9ib290c3RyYXAgPSAxOworCisgICAgbmV0c25tcF9jZXJ0c19sb2FkKCk7CisKKyAgICBvcGVuc3NsX2xvY2FsX2luZGV4ID0KKyAgICAgICAgU1NMX2dldF9leF9uZXdfaW5kZXgoMCwgaW5kZXhuYW1lLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQKK3Rsc19nZXRfdmVyaWZ5X2luZm9faW5kZXgoKSB7CisgICAgcmV0dXJuIG9wZW5zc2xfbG9jYWxfaW5kZXg7Cit9CisKK3N0YXRpYyB2b2lkIF9wYXJzZV9jbGllbnRfY2VydChjb25zdCBjaGFyICp0b2ssIGNoYXIgKmxpbmUpCit7CisgICAgY29uZmlnX3B3YXJuKCJjbGllbnRDZXJ0IGlzIGRlcHJlY2F0ZWQuIENsaWVudHMgc2hvdWxkIHVzZSBsb2NhbENlcnQsIHNlcnZlcnMgc2hvdWxkIHVzZSBwZWVyQ2VydCIpOworICAgIGlmICgqbGluZSA9PSAnIicpIHsKKyAgICAgICAgY2hhciBidWZbU05NUF9NQVhCVUZdOworICAgICAgICBjb3B5X253b3JkKGxpbmUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfWDUwOV9DTElFTlRfUFVCLCBidWYpOworICAgIH0gZWxzZQorICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfWDUwOV9DTElFTlRfUFVCLCBsaW5lKTsKK30KKworc3RhdGljIHZvaWQgX3BhcnNlX3NlcnZlcl9jZXJ0KGNvbnN0IGNoYXIgKnRvaywgY2hhciAqbGluZSkKK3sKKyAgICBjb25maWdfcHdhcm4oInNlcnZlckNlcnQgaXMgZGVwcmVjYXRlZC4gQ2xpZW50cyBzaG91bGQgdXNlIHBlZXJDZXJ0LCBzZXJ2ZXJzIHNob3VsZCB1c2UgbG9jYWxDZXJ0LiIpOworICAgIGlmICgqbGluZSA9PSAnIicpIHsKKyAgICAgICAgY2hhciBidWZbU05NUF9NQVhCVUZdOworICAgICAgICBjb3B5X253b3JkKGxpbmUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfWDUwOV9DTElFTlRfUFVCLCBidWYpOworICAgIH0gZWxzZQorICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfWDUwOV9TRVJWRVJfUFVCLCBsaW5lKTsKK30KKwordm9pZAorbmV0c25tcF90bHNiYXNlX2N0b3Iodm9pZCkgeworCisgICAgLyogYm9vdHN0cmFwIHNzbCBzaW5jZSB3ZSdsbCBuZWVkIGl0ICovCisgICAgbmV0c25tcF9pbml0X29wZW5zc2woKTsKKworICAgIC8qIHRoZSBwcml2YXRlIGNsaWVudCBjZXJ0IHRvIGF1dGhlbnRpY2F0ZSB3aXRoICovCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX09DVEVUX1NUUiwgInNubXAiLCAiZXh0cmFYNTA5U3ViRGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0VSVF9FWFRSQV9TVUJESVIpOworCisgICAgLyogRG8gd2UgaGF2ZSBhIENSTCBsaXN0PyAqLworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9PQ1RFVF9TVFIsICJzbm1wIiwgIng1MDlDUkxGaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfWDUwOV9DUkxfRklMRSk7CisKKyAgICAvKiBXaGF0IFRMUyBhbGdvcml0aG1zIHNob3VsZCBiZSB1c2UgKi8KKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCAic25tcCIsICJ0bHNBbGdvcml0aG1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVExTX0FMR09SSVRNUyk7CisKKyAgICAvKgorICAgICAqIGZvciB0aGUgY2xpZW50CisgICAgICovCisKKyAgICAvKiB0aGUgcHVibGljIGNsaWVudCBjZXJ0IHRvIGF1dGhlbnRpY2F0ZSB3aXRoICovCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiY2xpZW50Q2VydCIsIF9wYXJzZV9jbGllbnRfY2VydCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIC8qCisgICAgICogZm9yIHRoZSBzZXJ2ZXIKKyAgICAgKi8KKworICAgIC8qIFRoZSBYNTA5IHNlcnZlciBrZXkgdG8gdXNlICovCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAic2VydmVyQ2VydCIsIF9wYXJzZV9zZXJ2ZXJfY2VydCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAvKgorICAgICAqIHJlbW92ZSBjZXJ0IGNvbmZpZyBhbWJpZ3VpdHk6IGxvY2FsQ2VydCwgcGVlckNlcnQKKyAgICAgKi8KKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCAic25tcCIsICJsb2NhbENlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UTFNfTE9DQUxfQ0VSVCk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX09DVEVUX1NUUiwgInNubXAiLCAicGVlckNlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UTFNfUEVFUl9DRVJUKTsKKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgb3VyIGJvb3Qtc3RyYXBwaW5nIG5lZWRzCisgICAgICovCisgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCisJCQkgICBTTk1QX0NBTExCQUNLX1BPU1RfUFJFTUlCX1JFQURfQ09ORklHLAorCQkJICAgdGxzX2Jvb3RzdHJhcCwgTlVMTCk7CisKK30KKworX25ldHNubXBUTFNCYXNlRGF0YSAqCituZXRzbm1wX3Rsc2Jhc2VfYWxsb2NhdGVfdGxzZGF0YShuZXRzbm1wX3RyYW5zcG9ydCAqdCwgaW50IGlzc2VydmVyKSB7CisKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhOworCisgICAgaWYgKE5VTEwgPT0gdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBhbGxvY2F0ZSBvdXIgVExTIHNwZWNpZmljIGRhdGEgKi8KKyAgICB0bHNkYXRhID0gU05NUF9NQUxMT0NfVFlQRURFRihfbmV0c25tcFRMU0Jhc2VEYXRhKTsKKyAgICBpZiAoTlVMTCA9PSB0bHNkYXRhKSB7CisgICAgICAgIFNOTVBfRlJFRSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFpc3NlcnZlcikKKyAgICAgICAgdGxzZGF0YS0+ZmxhZ3MgfD0gTkVUU05NUF9UTFNCQVNFX0lTX0NMSUVOVDsKKworICAgIHJldHVybiB0bHNkYXRhOworfQorCit2b2lkIG5ldHNubXBfdGxzYmFzZV9mcmVlX3Rsc2RhdGEoX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzYmFzZSkgeworICAgIGlmICghdGxzYmFzZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc2Jhc2UiLCJGcmVlaW5nIFRMUyBCYXNlIGRhdGEgZm9yIGEgc2Vzc2lvblxuIikpOworCisgICAgaWYgKHRsc2Jhc2UtPnNzbCkKKyAgICAgICAgU1NMX2ZyZWUodGxzYmFzZS0+c3NsKTsKKworICAgIGlmICh0bHNiYXNlLT5zc2xfY29udGV4dCkKKyAgICAgICAgU1NMX0NUWF9mcmVlKHRsc2Jhc2UtPnNzbF9jb250ZXh0KTsKKyAgIC8qIGRvbid0IGZyZWUgdGhlIGFjY2VwdF9iaW8gc2luY2UgaXQncyB0aGUgcGFyZW50IGJpbyAqLworICAgIC8qCisgICAgaWYgKHRsc2Jhc2UtPmFjY2VwdF9iaW8pCisgICAgICAgIEJJT19mcmVlKHRsc2Jhc2UtPmFjY2VwdF9iaW8pOworICAgICovCisgICAgLyogYW5kIHRoaXMgaXMgZnJlZWQgYnkgdGhlIFNTTCBzaHV0ZG93biAqLworICAgIC8qIAorICAgIGlmICh0bHNiYXNlLT5hY2NlcHRlZF9iaW8pCisgICAgICBCSU9fZnJlZSh0bHNiYXNlLT5hY2NlcHRfYmlvKTsKKyAgICAqLworCisgICAgLyogZnJlZSB0aGUgY29uZmlnIGRhdGEgKi8KKyAgICBTTk1QX0ZSRUUodGxzYmFzZS0+c2VjdXJpdHlOYW1lKTsKKyAgICBTTk1QX0ZSRUUodGxzYmFzZS0+YWRkcl9zdHJpbmcpOworICAgIFNOTVBfRlJFRSh0bHNiYXNlLT5vdXJfaWRlbnRpdHkpOworICAgIFNOTVBfRlJFRSh0bHNiYXNlLT50aGVpcl9pZGVudGl0eSk7CisgICAgU05NUF9GUkVFKHRsc2Jhc2UtPnRoZWlyX2ZpbmdlcnByaW50KTsKKyAgICBTTk1QX0ZSRUUodGxzYmFzZS0+dGhlaXJfaG9zdG5hbWUpOworICAgIFNOTVBfRlJFRSh0bHNiYXNlLT50cnVzdF9jZXJ0KTsKKworICAgIC8qIGZyZWUgdGhlIGJhc2UgaXRzZWxmICovCisgICAgU05NUF9GUkVFKHRsc2Jhc2UpOworfQorCitpbnQgbmV0c25tcF90bHNiYXNlX3dyYXB1cF9yZWN2KG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKSB7CisgICAgaW50IG5vX2F1dGgsIG5vX3ByaXY7CisKKyAgICBpZiAoTlVMTCA9PSB0bHNkYXRhKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4xLjIgc3RlcCAyOiB0bVNlY3VyaXR5TGV2ZWwgKi8KKyAgICAvKgorICAgICAqIERvbid0IGFjY2VwdCBudWxsIGF1dGhlbnRpY2F0aW9uLiBOdWxsIGVuY3J5cHRpb24gb2suCisgICAgICoKKyAgICAgKiBYWFg6IHRoaXMgc2hvdWxkIGFjdHVhbGx5IGNoZWNrIGZvciBhIGNvbmZpZ3VyZWQgbGlzdCBvZiBlbmNyeXB0aW9uCisgICAgICogICAgICBhbGdvcml0aG1zIHRvIG1hcCB0byBOT1BSSVYsIGJ1dCBmb3IgdGhlIG1vbWVudCB3ZSdsbAorICAgICAqICAgICAgYWNjZXB0IGFueSBlbmNyeXB0aW9uIGFsb2dyaXRobXMgdGhhdCBvcGVuc3NsIGlzIHVzaW5nLgorICAgICAqLworICAgIG5ldHNubXBfb3BlbnNzbF9udWxsX2NoZWNrcyh0bHNkYXRhLT5zc2wsICZub19hdXRoLCAmbm9fcHJpdik7CisgICAgaWYgKG5vX2F1dGggPT0gMSkgeyAvKiBudWxsL3Vua25vd24gYXV0aGVudGljYXRpb24gKi8KKyAgICAgICAgLyogeHh4LXJrczogc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfPz8/KTsgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRscyBjb25uZWN0aW9uIHdpdGggTlVMTCBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKyAgICBlbHNlIGlmIChub19wcml2ID09IDEpIC8qIG51bGwvdW5rbm93biBlbmNyeXB0aW9uICovCisgICAgICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwgPSBTTk1QX1NFQ19MRVZFTF9BVVRITk9QUklWOworICAgIGVsc2UKKyAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0U2VjdXJpdHlMZXZlbCA9IFNOTVBfU0VDX0xFVkVMX0FVVEhQUklWOworICAgIERFQlVHTVNHVEwoKCJ0bHM6c2VjTGV2ZWwiLCAiU2VjTGV2ZWwgJWRcbiIsCisgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0U2VjdXJpdHlMZXZlbCkpOworCisgICAgLyogdXNlIHg1MDkgY2VydCB0byBkbyBsb29rdXAgdG8gc2VjbmFtZSBpZiBETkUgaW4gY2FjaGVwIHlldCAqLworCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjMuMiwgcGFyYWdyYXBoIDI6CisgICAgICAgVGhlIChEKVRMUyBzZXJ2ZXIgaWRlbnRpZmllcyB0aGUgYXV0aGVudGljYXRlZCBpZGVudGl0eSBmcm9tIHRoZQorICAgICAgIChEKVRMUyBjbGllbnQncyBwcmluY2lwYWwgY2VydGlmaWNhdGUgdXNpbmcgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorICAgICAgIGZyb20gdGhlIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlIG1hcHBpbmcgdGFibGUuICBUaGUgKEQpVExTIHNlcnZlcgorICAgICAgIE1VU1QgcmVxdWVzdCBhbmQgZXhwZWN0IGEgY2VydGlmaWNhdGUgZnJvbSB0aGUgY2xpZW50IGFuZCBNVVNUIE5PVAorICAgICAgIGFjY2VwdCBTTk1QIG1lc3NhZ2VzIG92ZXIgdGhlIChEKVRMUyBjb25uZWN0aW9uIHVudGlsIHRoZSBjbGllbnQgaGFzCisgICAgICAgc2VudCBhIGNlcnRpZmljYXRlIGFuZCBpdCBoYXMgYmVlbiBhdXRoZW50aWNhdGVkLiAgVGhlIHJlc3VsdGluZworICAgICAgIGRlcml2ZWQgdG1TZWN1cml0eU5hbWUgaXMgcmVjb3JkZWQgaW4gdGhlIHRtU3RhdGVSZWZlcmVuY2UgY2FjaGUgYXMKKyAgICAgICB0bVNlY3VyaXR5TmFtZS4gIFRoZSBkZXRhaWxzIG9mIHRoZSBsb29rdXAgcHJvY2VzcyBhcmUgZnVsbHkKKyAgICAgICBkZXNjcmliZWQgaW4gdGhlIERFU0NSSVBUSU9OIGNsYXVzZSBvZiB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUKKyAgICAgICBNSUIgb2JqZWN0LiAgSWYgYW55IHZlcmlmaWNhdGlvbiBmYWlscyBpbiBhbnkgd2F5IChmb3IgZXhhbXBsZQorICAgICAgIGJlY2F1c2Ugb2YgZmFpbHVyZXMgaW4gY3J5cHRvZ3JhcGhpYyB2ZXJpZmljYXRpb24gb3IgYmVjYXVzZSBvZiB0aGUKKyAgICAgICBsYWNrIG9mIGFuIGFwcHJvcHJpYXRlIHJvdyBpbiB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUpIHRoZW4gdGhlCisgICAgICAgc2Vzc2lvbiBlc3RhYmxpc2htZW50IE1VU1QgZmFpbCwgYW5kIHRoZQorICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkQ2xpZW50Q2VydGlmaWNhdGVzIG9iamVjdCBpcyBpbmNyZW1lbnRlZC4gIElmCisgICAgICAgdGhlIHNlc3Npb24gY2FuIG5vdCBiZSBvcGVuZWQgZm9yIGFueSByZWFzb24gYXQgYWxsLCBpbmNsdWRpbmcKKyAgICAgICBjcnlwdG9ncmFwaGljIHZlcmlmaWNhdGlvbiBmYWlsdXJlcywgdGhlbiB0aGUKKyAgICAgICBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycyBjb3VudGVyIGlzIGluY3JlbWVudGVkIGFuZCBwcm9jZXNzaW5nCisgICAgICAgc3RvcHMuCisgICAgKi8KKworICAgIGlmICghdGxzZGF0YS0+c2VjdXJpdHlOYW1lKSB7CisgICAgICAgIG5ldHNubXBfdGxzYmFzZV9leHRyYWN0X3NlY3VyaXR5X25hbWUodGxzZGF0YS0+c3NsLCB0bHNkYXRhKTsKKyAgICAgICAgaWYgKE5VTEwgIT0gdGxzZGF0YS0+c2VjdXJpdHlOYW1lKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzIiwgInNldCBTZWNOYW1lIHRvOiAlc1xuIiwgdGxzZGF0YS0+c2VjdXJpdHlOYW1lKSk7CisgICAgICAgIH0gZWxzZSB7CisJICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0xJRU5UQ0VSVElGSUNBVEVTKTsKKwkgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5FUlJPUlMpOworICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9CisgICAgfQorCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMS4yIHN0ZXAgMjogdG1TZWN1cml0eU5hbWUgKi8KKyAgICAvKiBYWFg6IGRldGVjdCBhbmQgdGhyb3cgb3V0IG92ZXJmbG93IHNlY25hbWUgc2l6ZXMgcmF0aGVyCisgICAgICAgdGhhbiB0cnVuY2F0aW5nLiAqLworICAgIHN0cmxjcHkodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lLCB0bHNkYXRhLT5zZWN1cml0eU5hbWUsCisgICAgICAgICAgICBzaXplb2YodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lKSk7CisgICAgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lTGVuID0gc3RybGVuKHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSk7CisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4xLjIgc3RlcCAyOiB0bVNlc3Npb25JRCAqLworICAgIC8qIHVzZSBvdXIgVExTRGF0YSBwb2ludGVyIGFzIHRoZSBzZXNzaW9uIElEICovCisgICAgbWVtY3B5KHRtU3RhdGVSZWYtPnNlc3Npb25JRCwgJnRsc2RhdGEsIHNpemVvZihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKikpOworCisgICAgLyogc2F2ZSB0aGUgdG1TdGF0ZVJlZiBpbiBvdXIgc3BlY2lhbCBwb2ludGVyICovCisgICAgKm9wYXF1ZSA9IHRtU3RhdGVSZWY7CisgICAgKm9sZW5ndGggPSBzaXplb2YobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlKTsKKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihfeDUwOV9nZXRfZXJyb3IsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX19YNTA5X0dFVF9FUlJPUgorY29uc3QgY2hhciAqIF94NTA5X2dldF9lcnJvcihpbnQgeDUwOWZhaWx2YWx1ZSwgY29uc3QgY2hhciAqbG9jYXRpb24pIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKKyAgICAKKyAgICAvKiBYWFg6IHVzZSB0aGlzIGluc3RlYWQ6IFg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycikgKi8KKworICAgIHN3aXRjaCAoeDUwOWZhaWx2YWx1ZSkgeworICAgIGNhc2UgWDUwOV9WX09LOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX09LIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9DUkw6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfQ1JMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NFUlRfU0lHTkFUVVJFOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9VTkFCTEVfVE9fREVDUllQVF9DRVJUX1NJR05BVFVSRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fREVDUllQVF9DUkxfU0lHTkFUVVJFOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9VTkFCTEVfVE9fREVDUllQVF9DUkxfU0lHTkFUVVJFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNPREVfSVNTVUVSX1BVQkxJQ19LRVk6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNPREVfSVNTVUVSX1BVQkxJQ19LRVkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfQ0VSVF9TSUdOQVRVUkVfRkFJTFVSRToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQ0VSVF9TSUdOQVRVUkVfRkFJTFVSRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DUkxfU0lHTkFUVVJFX0ZBSUxVUkU6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0NSTF9TSUdOQVRVUkVfRkFJTFVSRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX05PVF9ZRVRfVkFMSUQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0NFUlRfTk9UX1lFVF9WQUxJRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX0hBU19FWFBJUkVEOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9DRVJUX0hBU19FWFBJUkVEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0NSTF9OT1RfWUVUX1ZBTElEOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9DUkxfTk9UX1lFVF9WQUxJRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DUkxfSEFTX0VYUElSRUQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0NSTF9IQVNfRVhQSVJFRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9CRUZPUkVfRklFTEQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9BRlRFUl9GSUVMRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfRVJST1JfSU5fQ0VSVF9OT1RfQUZURVJfRklFTEQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ1JMX0xBU1RfVVBEQVRFX0ZJRUxEOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTEFTVF9VUERBVEVfRklFTEQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ1JMX05FWFRfVVBEQVRFX0ZJRUxEOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTkVYVF9VUERBVEVfRklFTEQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfT1VUX09GX01FTToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfT1VUX09GX01FTSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9ERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9TRUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9TRUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVF9MT0NBTExZIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfQ0VSVF9DSEFJTl9UT09fTE9ORzoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQ0VSVF9DSEFJTl9UT09fTE9ORyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX1JFVk9LRUQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0NFUlRfUkVWT0tFRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9JTlZBTElEX0NBOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9JTlZBTElEX0NBIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1BBVEhfTEVOR1RIX0VYQ0VFREVEOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9QQVRIX0xFTkdUSF9FWENFRURFRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9JTlZBTElEX1BVUlBPU0U6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0lOVkFMSURfUFVSUE9TRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX1VOVFJVU1RFRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQ0VSVF9VTlRSVVNURUQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfQ0VSVF9SRUpFQ1RFRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQ0VSVF9SRUpFQ1RFRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9TVUJKRUNUX0lTU1VFUl9NSVNNQVRDSDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfU1VCSkVDVF9JU1NVRVJfTUlTTUFUQ0giOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfQUtJRF9TS0lEX01JU01BVENIOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9BS0lEX1NLSURfTUlTTUFUQ0giOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfQUtJRF9JU1NVRVJfU0VSSUFMX01JU01BVENIOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9BS0lEX0lTU1VFUl9TRVJJQUxfTUlTTUFUQ0giOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfS0VZVVNBR0VfTk9fQ0VSVFNJR046CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0tFWVVTQUdFX05PX0NFUlRTSUdOIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfQ1JMX0lTU1VFUjoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9DUkxfSVNTVUVSIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOSEFORExFRF9DUklUSUNBTF9FWFRFTlNJT046CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1VOSEFORExFRF9DUklUSUNBTF9FWFRFTlNJT04iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfS0VZVVNBR0VfTk9fQ1JMX1NJR046CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0tFWVVTQUdFX05PX0NSTF9TSUdOIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOSEFORExFRF9DUklUSUNBTF9DUkxfRVhURU5TSU9OOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9VTkhBTkRMRURfQ1JJVElDQUxfQ1JMX0VYVEVOU0lPTiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9JTlZBTElEX05PTl9DQToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfSU5WQUxJRF9OT05fQ0EiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfUFJPWFlfUEFUSF9MRU5HVEhfRVhDRUVERUQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1BST1hZX1BBVEhfTEVOR1RIX0VYQ0VFREVEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0tFWVVTQUdFX05PX0RJR0lUQUxfU0lHTkFUVVJFOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9LRVlVU0FHRV9OT19ESUdJVEFMX1NJR05BVFVSRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9QUk9YWV9DRVJUSUZJQ0FURVNfTk9UX0FMTE9XRUQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1BST1hZX0NFUlRJRklDQVRFU19OT1RfQUxMT1dFRCI7CisgICAgICAgIGJyZWFrOworI2lmZGVmIFg1MDlfVl9FUlJfSU5WQUxJRF9FWFRFTlNJT04gLyogbm90IGF2YWlsIG9uIGRhcndpbiAqLworICAgIGNhc2UgWDUwOV9WX0VSUl9JTlZBTElEX0VYVEVOU0lPTjoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfSU5WQUxJRF9FWFRFTlNJT04iOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFg1MDlfVl9FUlJfSU5WQUxJRF9QT0xJQ1lfRVhURU5TSU9OIC8qIG5vdCBhdmFpbCBvbiBkYXJ3aW4gKi8KKyAgICBjYXNlIFg1MDlfVl9FUlJfSU5WQUxJRF9QT0xJQ1lfRVhURU5TSU9OOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9JTlZBTElEX1BPTElDWV9FWFRFTlNJT04iOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFg1MDlfVl9FUlJfTk9fRVhQTElDSVRfUE9MSUNZIC8qIG5vdCBhdmFpbCBvbiBkYXJ3aW4gKi8KKyAgICBjYXNlIFg1MDlfVl9FUlJfTk9fRVhQTElDSVRfUE9MSUNZOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9OT19FWFBMSUNJVF9QT0xJQ1kiOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFg1MDlfVl9FUlJfVU5ORVNURURfUkVTT1VSQ0UgLyogbm90IGF2YWlsIG9uIGRhcndpbiAqLworICAgIGNhc2UgWDUwOV9WX0VSUl9VTk5FU1RFRF9SRVNPVVJDRToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfVU5ORVNURURfUkVTT1VSQ0UiOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgWDUwOV9WX0VSUl9BUFBMSUNBVElPTl9WRVJJRklDQVRJT046CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0FQUExJQ0FUSU9OX1ZFUklGSUNBVElPTiI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJlYXNvbiA9ICJ1bmtub3duIGZhaWx1cmUgY29kZSI7CisgICAgfQorCisgICAgcmV0dXJuIHJlYXNvbjsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX19YNTA5X0dFVF9FUlJPUiAqLworCit2b2lkIF9vcGVuc3NsX2xvZ19lcnJvcihpbnQgcmMsIFNTTCAqY29uLCBjb25zdCBjaGFyICpsb2NhdGlvbikgeworICAgIGNvbnN0IGNoYXIgICAgICpyZWFzb24sICpmaWxlLCAqZGF0YTsKKyAgICB1bnNpZ25lZCBsb25nICAgbnVtZXJpY2FsX3JlYXNvbjsKKyAgICBpbnQgICAgICAgICAgICAgZmxhZ3MsIGxpbmU7CisKKyAgICBzbm1wX2xvZyhMT0dfRVJSLCAiLS0tLSBPcGVuU1NMIFJlbGF0ZWQgRXJyb3JzOiAtLS0tXG4iKTsKKworICAgIC8qIFNTTCBzcGVjaWZpYyBlcnJvcnMgKi8KKyAgICBpZiAoY29uKSB7CisKKyAgICAgICAgaW50IHNzbG51bSA9IFNTTF9nZXRfZXJyb3IoY29uLCByYyk7CisKKyAgICAgICAgc3dpdGNoKHNzbG51bSkgeworICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgcmVhc29uID0gIlNTTF9FUlJPUl9OT05FIjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICAgIHJlYXNvbiA9ICJTU0xfRVJST1JfU1NMIjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgIHJlYXNvbiA9ICJTU0xfRVJST1JfV0FOVF9SRUFEIjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICByZWFzb24gPSAiU1NMX0VSUk9SX1dBTlRfV1JJVEUiOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAgICAgICAgICAgIHJlYXNvbiA9ICJTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAgICAgICAgcmVhc29uID0gIlNTTF9FUlJPUl9TWVNDQUxMIjsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJUTFMgZXJyb3I6ICVzOiByYz0lZCwgc3NsZXJyb3IgPSAlZCAoJXMpOiBzeXN0ZW1fZXJyb3I9JWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCByYywgc3NsbnVtLCByZWFzb24sIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRMUyBFcnJvcjogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICBFUlJfcmVhc29uX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAgICAgICAgICAgIHJlYXNvbiA9ICJTU0xfRVJST1JfWkVST19SRVRVUk4iOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9DT05ORUNUOgorICAgICAgICAgICAgcmVhc29uID0gIlNTTF9FUlJPUl9XQU5UX0NPTk5FQ1QiOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9BQ0NFUFQ6CisgICAgICAgICAgICByZWFzb24gPSAiU1NMX0VSUk9SX1dBTlRfQUNDRVBUIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZWFzb24gPSAidW5rbm93biI7CisgICAgICAgIH0KKworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiIFRMUyBlcnJvcjogJXM6IHJjPSVkLCBzc2xlcnJvciA9ICVkICglcylcbiIsCisgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCByYywgc3NsbnVtLCByZWFzb24pOworCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIgVExTIEVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpKSk7CisKKyAgICB9CisKKyAgICAvKiBvdGhlciBlcnJvcnMgKi8KKyAgICB3aGlsZSAoKG51bWVyaWNhbF9yZWFzb24gPQorICAgICAgICAgICAgRVJSX2dldF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiIGVycm9yOiAjJWx1IChmaWxlICVzLCBsaW5lICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgbnVtZXJpY2FsX3JlYXNvbiwgZmlsZSwgbGluZSk7CisKKyAgICAgICAgLyogaWYgd2UgaGF2ZSBhIHRleHQgdHJhbnNsYXRpb246ICovCisgICAgICAgIGlmIChkYXRhICYmIChmbGFncyAmIEVSUl9UWFRfU1RSSU5HKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiAgVGV4dHVhbCBFcnJvcjogJXNcbiIsIGRhdGEpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHBlciBvcGVuc3NsIG1hbiBwYWdlOiBJZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkKKyAgICAgICAgICAgICAqIE9QRU5TU0xfbWFsbG9jKCksICpmbGFncyZFUlJfVFhUX01BTExPQ0VEIGlzIHRydWUuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogYXJnZ2guLi4gc3R1cGlkIG9wZW5zc2wgcHJvdG90eXBlIGZvciBFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YQorICAgICAgICAgICAgICogd2FudHMgYSBjb25zdCBjaGFyICoqLCBidXQgcmV0dXJucyBzb21ldGhpbmcgdGhhdCB3ZSBtaWdodAorICAgICAgICAgICAgICogbmVlZCB0byBmcmVlPz8KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGZsYWdzICYgRVJSX1RYVF9NQUxMT0NFRCkKKyAgICAgICAgICAgICAgICBPUEVOU1NMX2ZyZWUoTkVUU05NUF9SRU1PVkVfQ09OU1Qodm9pZCAqLCBkYXRhKSk7ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNubXBfbG9nKExPR19FUlIsICItLS0tIEVuZCBvZiBPcGVuU1NMIEVycm9ycyAtLS0tXG4iKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2QwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jCkBAIC0wLDAgKzEsMTA0MSBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qIAorICogU2VlIHRoZSBmb2xsb3dpbmcgd2ViIHBhZ2VzIGZvciB1c2VmdWwgZG9jdW1lbnRhdGlvbiBvbiB0aGlzIHRyYW5zcG9ydDoKKyAqIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL1RVVDpVc2luZ19UTFMKKyAqIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL1VzaW5nX0RUTFMKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2VydF91dGlsKQorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19VSU9fSAorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNlbmRpZgorCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KKworI2luY2x1ZGUgIm9wZW5zc2wvYmlvLmgiCisjaW5jbHVkZSAib3BlbnNzbC9zc2wuaCIKKyNpbmNsdWRlICJvcGVuc3NsL2Vyci5oIgorCisjaWZuZGVmIElOQUREUl9OT05FCisjZGVmaW5lIElOQUREUl9OT05FCS0xCisjZW5kaWYKKworI2RlZmluZSBXRV9BUkVfU0VSVkVSIDAKKyNkZWZpbmUgV0VfQVJFX0NMSUVOVCAxCisKK29pZCAgICAgICAgICAgICBuZXRzbm1wVExTVENQRG9tYWluW10gPSB7IFRSQU5TUE9SVF9ET01BSU5fVExTX1RDUF9JUCB9Oworc2l6ZV90ICAgICAgICAgIG5ldHNubXBUTFNUQ1BEb21haW5fbGVuID0gT0lEX0xFTkdUSChuZXRzbm1wVExTVENQRG9tYWluKTsKKworc3RhdGljIG5ldHNubXBfdGRvbWFpbiB0bHN0Y3BEb21haW47CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgorICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKKyAqLworCitzdGF0aWMgY2hhciAqCituZXRzbm1wX3Rsc3RjcF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIGlmIChOVUxMID09IGRhdGEgfHwgMCA9PSBsZW4gfHwgMCA9PSAoKGNoYXIgKikgZGF0YSlbMF0pCisgICAgICAgIHJldHVybiBzdHJkdXAoIlRMU1RDUDogdW5rbm93biIpOworICAgIGVsc2UgaWYgKGxlbiA9PSBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikgfHwKKyAgICAgICAgICAgICBsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpCisgICAgICAgIHJldHVybiBuZXRzbm1wX2lwdjRfZm10YWRkcigiVExTVENQIiwgdCwgZGF0YSwgbGVuKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogYW4gYWxyZWFkeSBhc2NpaSBmb3JtYXR0ZWQgc3RyaW5nICovCisgICAgICAgIGNoYXIgYnVmWzEwMjRdOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLTEsICJUTFNUQ1A6ICVzIiwgKGNoYXIgKikgZGF0YSk7CisgICAgICAgIHJldHVybiBzdHJkdXAoYnVmKTsKKyAgICB9Cit9CisvKgorICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCisgKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCisgKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAorICovCisKK3N0YXRpYyBpbnQKK25ldHNubXBfdGxzdGNwX2NvcHkobmV0c25tcF90cmFuc3BvcnQgKm9sZHQsIG5ldHNubXBfdHJhbnNwb3J0ICpuZXd0KQoreworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKm9sZHRsc2RhdGEgPSAoX25ldHNubXBUTFNCYXNlRGF0YSAqKSBvbGR0LT5kYXRhOworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKm5ld3Rsc2RhdGEgPSAoX25ldHNubXBUTFNCYXNlRGF0YSAqKSBuZXd0LT5kYXRhOworICAgIG9sZHRsc2RhdGEtPmFjY2VwdGVkX2JpbyA9IE5VTEw7CisgICAgb2xkdGxzZGF0YS0+c3NsID0gTlVMTDsKKyAgICBuZXd0bHNkYXRhLT5zc2xfY29udGV4dCA9IE5VTEw7CisgICAgCisgICAgaWYgKG9sZHRsc2RhdGEtPmFkZHJfc3RyaW5nKQorICAgICAgICBuZXd0bHNkYXRhLT5hZGRyX3N0cmluZyA9IHN0cmR1cChvbGR0bHNkYXRhLT5hZGRyX3N0cmluZyk7CisgICAgaWYgKG9sZHRsc2RhdGEtPnNlY3VyaXR5TmFtZSkKKyAgICAgICAgbmV3dGxzZGF0YS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKG9sZHRsc2RhdGEtPnNlY3VyaXR5TmFtZSk7CisgICAgaWYgKG9sZHRsc2RhdGEtPm91cl9pZGVudGl0eSkKKyAgICAgICAgbmV3dGxzZGF0YS0+b3VyX2lkZW50aXR5ID0gc3RyZHVwKG9sZHRsc2RhdGEtPm91cl9pZGVudGl0eSk7CisgICAgaWYgKG9sZHRsc2RhdGEtPnRoZWlyX2lkZW50aXR5KQorICAgICAgICBuZXd0bHNkYXRhLT50aGVpcl9pZGVudGl0eSA9IHN0cmR1cChvbGR0bHNkYXRhLT50aGVpcl9pZGVudGl0eSk7CisgICAgaWYgKG9sZHRsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50KQorICAgICAgICBuZXd0bHNkYXRhLT50aGVpcl9maW5nZXJwcmludCA9IHN0cmR1cChvbGR0bHNkYXRhLT50aGVpcl9maW5nZXJwcmludCk7CisgICAgaWYgKG9sZHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lKQorICAgICAgICBuZXd0bHNkYXRhLT50aGVpcl9ob3N0bmFtZSA9IHN0cmR1cChvbGR0bHNkYXRhLT50aGVpcl9ob3N0bmFtZSk7CisgICAgaWYgKG9sZHRsc2RhdGEtPnRydXN0X2NlcnQpCisgICAgICAgIG5ld3Rsc2RhdGEtPnRydXN0X2NlcnQgPSBzdHJkdXAob2xkdGxzZGF0YS0+dHJ1c3RfY2VydCk7CisgICAgaWYgKG9sZHRsc2RhdGEtPmFkZHIpCisgICAgICAgIG5ld3Rsc2RhdGEtPmFkZHIgPSBuZXRzbm1wX21lbWR1cChvbGR0bHNkYXRhLT5hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpvbGR0bHNkYXRhLT5hZGRyKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0c25tcF90bHN0Y3BfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IC0xOworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiA9IE5VTEw7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKworICAgIGlmIChOVUxMID09IHQgfHwgdC0+c29jayA8IDAgfHwgTlVMTCA9PSB0LT5kYXRhKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ0bHN0Y3AgcmVjZWl2ZWQgYW4gaW52YWxpZCBpbnZvY2F0aW9uIHdpdGggbWlzc2luZyBkYXRhXG4iKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RjcCIsICJyZWN2ZnJvbSBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCisgICAgICAgICAgICAgICAgICAgICh0ID8gdC0+c29jayA6IC0xKSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgIiAgdGRhdGEgPSAlcFxuIiwgdC0+ZGF0YSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgICAgICAKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4xLjIgc3RlcCAxOgorICAgIDEpIERldGVybWluZSB0aGUgdGxzdG1TZXNzaW9uSUQgZm9yIHRoZSBpbmNvbWluZyBtZXNzYWdlLiBUaGUKKyAgICAgICB0bHN0bVNlc3Npb25JRCBNVVNUIGJlIGEgdW5pcXVlIHNlc3Npb24gaWRlbnRpZmllciBmb3IgdGhpcworICAgICAgIChEKVRMUyBjb25uZWN0aW9uLiAgVGhlIGNvbnRlbnRzIGFuZCBmb3JtYXQgb2YgdGhpcyBpZGVudGlmaWVyCisgICAgICAgYXJlIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBhcyBsb25nIGFzIGl0IGlzIHVuaXF1ZSB0byB0aGUKKyAgICAgICBzZXNzaW9uLiAgQSBzZXNzaW9uIGlkZW50aWZpZXIgTVVTVCBOT1QgYmUgcmV1c2VkIHVudGlsIGFsbAorICAgICAgIHJlZmVyZW5jZXMgdG8gaXQgYXJlIG5vIGxvbmdlciBpbiB1c2UuICBUaGUgdG1TZXNzaW9uSUQgaXMKKyAgICAgICBlcXVhbCB0byB0aGUgdGxzdG1TZXNzaW9uSUQgZGlzY3Vzc2VkIGluIFNlY3Rpb24gNS4xLjEuCisgICAgICAgdG1TZXNzaW9uSUQgcmVmZXJzIHRvIHRoZSBzZXNzaW9uIGlkZW50aWZpZXIgd2hlbiBzdG9yZWQgaW4gdGhlCisgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSBhbmQgdGxzdG1TZXNzaW9uSUQgcmVmZXJzIHRvIHRoZSBzZXNzaW9uCisgICAgICAgaWRlbnRpZmllciB3aGVuIHN0b3JlZCBpbiB0aGUgTENELiAgVGhleSBNVVNUIGFsd2F5cyBiZSBlcXVhbAorICAgICAgIHdoZW4gcHJvY2Vzc2luZyBhIGdpdmVuIHNlc3Npb24ncyB0cmFmZmljLgorICAgICAqLworICAgIC8qIEZvciB0aGlzIGltcGxlbWVudGF0aW9uIHdlIHVzZSB0aGUgdC0+ZGF0YSBtZW1vcnkgcG9pbnRlciBhcworICAgICAgIHRoZSBzZXNzaW9uSUQuICBBcyBpdCdzIGEgcG9pbnRlciB0byBzZXNzaW9uIHNwZWNpZmljIGRhdGEgdGllZAorICAgICAgIHdpdGggdGhlIHRyYW5zcG9ydCBvYmplY3Qgd2Uga25vdyBpdCdsbCBuZXZlciBiZSByZWFsbG9hdGVkCisgICAgICAgKGllLCBkdXBsaWNhdGVkKSB1bnRpbCByZWxlYXNlIGJ5IHRoaXMgdHJhbnNwb3J0IG9iamVjdCBhbmQgaXMKKyAgICAgICBzYWZlIHRvIHVzZSBhcyBhIHVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXIuICovCisKKyAgICB0bHNkYXRhID0gdC0+ZGF0YTsKKyAgICBpZiAoTlVMTCA9PSB0bHNkYXRhLT5zc2wpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInRsc3RjcCByZWNlaXZlZCBhbiBpbnZhbGlkIGludm9jYXRpb24gd2l0aG91dCBzc2wgZGF0YVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4xLjIgc3RlcCAxLCBwYXJ0MjoKKyAgICAgKiBUaGlzIHBhcnQgKGluY3JlbWVudGluZyB0aGUgY291bnRlcikgaXMgZG9uZSBpbiB0aGUKKyAgICAgICBuZXRzbm1wX3Rsc3RjcF9hY2NlcHQgZnVuY3Rpb24uCisgICAgICovCisKKworICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjEuMiBzdGVwIDI6CisgICAgICogQ3JlYXRlIGEgdG1TdGF0ZVJlZmVyZW5jZSBjYWNoZSBmb3IgdGhlIHN1YnNlcXVlbnQgcmVmZXJlbmNlIGFuZAorICAgICAgIGFzc2lnbiB0aGUgZm9sbG93aW5nIHZhbHVlcyB3aXRoaW4gaXQ6CisKKyAgICAgICB0bVRyYW5zcG9ydERvbWFpbiAgPSBzbm1wVExTVENQRG9tYWluIG9yIHNubXBEVExTVURQRG9tYWluIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUuCisKKyAgICAgICB0bVRyYW5zcG9ydEFkZHJlc3MgPSBUaGUgYWRkcmVzcyB0aGUgbWVzc2FnZSBvcmlnaW5hdGVkIGZyb20uCisKKyAgICAgICB0bVNlY3VyaXR5TGV2ZWwgICAgPSBUaGUgZGVyaXZlZCB0bVNlY3VyaXR5TGV2ZWwgZm9yIHRoZSBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGRpc2N1c3NlZCBpbiBTZWN0aW9uIDMuMS4yIGFuZCBTZWN0aW9uIDUuMy4KKworICAgICAgIHRtU2VjdXJpdHlOYW1lICAgICA9IFRoZSBmZGVyaXZlZCB0bVNlY3VyaXR5TmFtZSBmb3IgdGhlIHNlc3Npb24gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNjdXNzZWQgaW4gU2VjdGlvbiA1LjMuICBUaGlzIHZhbHVlIE1VU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBjb25zdGFudCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uCisKKyAgICAgICB0bVNlc3Npb25JRCAgICAgICAgPSBUaGUgdGxzdG1TZXNzaW9uSUQgZGVzY3JpYmVkIGluIHN0ZXAgMSBhYm92ZS4KKyAgICAgKi8KKworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAqIC0gVGhlIHRtVHJhbnNwb3J0RG9tYWluIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSB0cmFuc3BvcnQgb2JqZWN0CisgICAgICogLSBUaGUgdG1wU2Vzc2lvbklEIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSB0bHNkYXRhIHBvaW50ZXIgKGFzCisgICAgICAgICBkaXNjdXNzZWQgYWJvdmUpCisgICAgICogLSBUaGUgZm9sbG93aW5nIGl0ZW1zIGFyZSBoYW5kbGVkIGxhdGVyIGluIG5ldHNubXBfdGxzYmFzZV93cmFwdXBfcmVjdjoKKyAgICAgICAgIC0gdG1TZWN1cml0eUxldmVsCisgICAgICAgICAtIHRtU2VjdXJpdHlOYW1lCisgICAgICAgICAtIHRtU2Vzc2lvbklECisgICAgKi8KKworICAgIC8qIGNyZWF0ZSBhIHRtU3RhdGVSZWYgY2FjaGUgZm9yIHNsb3cgZmlsbC1pbiAqLworICAgIHRtU3RhdGVSZWYgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSk7CisKKyAgICBpZiAodG1TdGF0ZVJlZiA9PSBOVUxMKSB7CisgICAgICAgICpvcGFxdWUgPSBOVUxMOworICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBTZXQgdGhlIHRyYW5zcG9ydERvbWFpbiAqLworICAgIG1lbWNweSh0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW4sCisgICAgICAgICAgIG5ldHNubXBUTFNUQ1BEb21haW4sIHNpemVvZihuZXRzbm1wVExTVENQRG9tYWluWzBdKSAqCisgICAgICAgICAgIG5ldHNubXBUTFNUQ1BEb21haW5fbGVuKTsKKyAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW5MZW4gPSBuZXRzbm1wVExTVENQRG9tYWluX2xlbjsKKworICAgIC8qIFNldCB0aGUgdG1UcmFuc3BvcnRBZGRyZXNzICovCisgICAgdG1TdGF0ZVJlZi0+aGF2ZV9hZGRyZXNzZXMgPSAxOworCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMS4yIHN0ZXAgMToKKyAgICAgKiAzKSAgVGhlIGluY29taW5nTWVzc2FnZSBhbmQgaW5jb21pbmdNZXNzYWdlTGVuZ3RoIGFyZSBhc3NpZ25lZCB2YWx1ZXMKKyAgICAgICBmcm9tIHRoZSAoRClUTFMgcHJvY2Vzc2luZy4KKyAgICAgKi8KKworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgIC0gaW5jb21pbmdNZXNzYWdlICAgICAgID0gYnVmIHBvaW50ZXIKKyAgICAgICAtIGluY29taW5nTWVzc2FnZUxlbmd0aCA9IHJjCisgICAgKi8KKworICAgIC8qIHJlYWQgdGhlIHBhY2tldCBmcm9tIG9wZW5zc2wgKi8KKyAgICBkbyB7CisgICAgICAgIHJjID0gU1NMX3JlYWQodGxzZGF0YS0+c3NsLCBidWYsIHNpemUpOworICAgICAgICBpZiAocmMgPT0gMCkgeworICAgICAgICAgICAgLyogWFhYIGNsb3NlZCBjb25uZWN0aW9uICovCisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgInJlbW90ZSBzaWRlIGNsb3NlZCBjb25uZWN0aW9uXG4iKSk7CisgICAgICAgICAgICAvKiBYWFg6IG9wZW5zc2wgY2xlYW51cCAqLworICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChyYyA9PSAtMSkgeworICAgICAgICAgICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IodGxzZGF0YS0+c3NsLCByYyk7CisgICAgICAgICAgICBpZiAoZXJyICE9IFNTTF9FUlJPUl9XQU5UX1JFQUQgJiYgZXJyICE9IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7CisgICAgICAgICAgICAgICAgLyogZXJyb3IgZGV0ZWN0ZWQgKi8KKyAgICAgICAgICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIHRsc2RhdGEtPnNzbCwgIlNTTF9yZWFkIik7CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiByZXRyeSByZWFkIGZvciBTU0xfRVJST1JfV0FOVF9SRUFEIHx8IFNTTF9FUlJPUl9XQU5UX1dSSVRFICovCisgICAgfSB3aGlsZSAocmMgPD0gMCk7IAorCisgICAgREVCVUdNU0dUTCgoInRsc3RjcCIsICJyZWNlaXZlZCAlZCBkZWNvZGVkIGJ5dGVzIGZyb20gdGxzXG4iLCByYykpOworCisgICAgLyogbG9nIHRoZSBwYWNrZXQgKi8KKyAgICBERUJVR0lGKCJ0bHN0Y3AiKSB7CisgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdGxzdGNwX2ZtdGFkZHIodCwgTlVMTCwgMCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLAorICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20gZmQgJWQgZ290ICVkIGJ5dGVzIChmcm9tICVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgcmMsIHN0cikpOworICAgICAgICBmcmVlKHN0cik7CisgICAgfQorCisgICAgLyogT3RoZXIgd3JhcC11cCB0aGluZ3MgY29tbW9uIHRvIFRMUyBhbmQgRFRMUyAqLworICAgIGlmIChuZXRzbm1wX3Rsc2Jhc2Vfd3JhcHVwX3JlY3YodG1TdGF0ZVJlZiwgdGxzZGF0YSwgb3BhcXVlLCBvbGVuZ3RoKSAhPQorICAgICAgICBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKworICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjEuMiBzdGVwIDE6CisgICAgICogNCkgIFRoZSBUTFMgVHJhbnNwb3J0IE1vZGVsIHBhc3NlcyB0aGUgdHJhbnNwb3J0RG9tYWluLAorICAgICAgIHRyYW5zcG9ydEFkZHJlc3MsIGluY29taW5nTWVzc2FnZSwgYW5kIGluY29taW5nTWVzc2FnZUxlbmd0aCB0bworICAgICAgIHRoZSBEaXNwYXRjaGVyIHVzaW5nIHRoZSByZWNlaXZlTWVzc2FnZSBBU0k6CisgICAgKi8KKworICAgIC8qIEluIG91ciBpbXBsZW1lbnRhdGlvbiwgdGhpcyBpcyBkb25lIHNpbXBseSBieSByZXR1cm5pbmcgKi8KKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX3Rsc3RjcF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiA9IE5VTEw7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKyAgICAKKyAgICBERUJVR1RSQUNFVE9LKCJ0bHN0Y3AiKTsKKworICAgIC8qIFJGQzU5NTMgc2VjdGlvbiA1LjI6IAorICAgICAgMSkgIElmIHRtU3RhdGVSZWZlcmVuY2UgZG9lcyBub3QgcmVmZXIgdG8gYSBjYWNoZSBjb250YWluaW5nIHZhbHVlcworICAgICAgZm9yIHRtVHJhbnNwb3J0RG9tYWluLCB0bVRyYW5zcG9ydEFkZHJlc3MsIHRtU2VjdXJpdHlOYW1lLAorICAgICAgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsLCBhbmQgdG1TYW1lU2VjdXJpdHksIHRoZW4gaW5jcmVtZW50IHRoZQorICAgICAgc25tcFRsc3RtU2Vzc2lvbkludmFsaWRDYWNoZXMgY291bnRlciwgZGlzY2FyZCB0aGUgbWVzc2FnZSwgYW5kCisgICAgICByZXR1cm4gdGhlIGVycm9yIGluZGljYXRpb24gaW4gdGhlIHN0YXR1c0luZm9ybWF0aW9uLiAgUHJvY2Vzc2luZworICAgICAgb2YgdGhpcyBtZXNzYWdlIHN0b3BzLgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gTm90ZXM6IHRoZSB0bVN0YXRlUmVmZXJlbmNlIGlzIHN0b3JlZCBpbiB0aGUgb3BhcXVlIHB0ciAqLworICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKKyAgICAgICAgKm9sZW5ndGggPT0gc2l6ZW9mKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSkpIHsKKyAgICAgICAgdG1TdGF0ZVJlZiA9IChuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKikgKm9wYXF1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVExTVENQIHdhcyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIHN0YXRlOyBwb3NzaWJseSB0aGUgd3Jvbmcgc2VjdXJpdHkgbW9kZWwgaXMgaW4gdXNlLiAgSXQgc2hvdWxkIGJlICd0c20nLlxuIik7CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0FDSEVTKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIC8qIFJGQzU5NTMgc2VjdGlvbiA1LjI6IAorICAgICAgIDIpICBFeHRyYWN0IHRoZSB0bVNlc3Npb25JRCwgdG1UcmFuc3BvcnREb21haW4sIHRtVHJhbnNwb3J0QWRkcmVzcywKKyAgICAgICB0bVNlY3VyaXR5TmFtZSwgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsLCBhbmQgdG1TYW1lU2VjdXJpdHkKKyAgICAgICB2YWx1ZXMgZnJvbSB0aGUgdG1TdGF0ZVJlZmVyZW5jZS4gIE5vdGU6IFRoZSB0bVNlc3Npb25JRCB2YWx1ZQorICAgICAgIG1heSBiZSB1bmRlZmluZWQgaWYgbm8gc2Vzc2lvbiBleGlzdHMgeWV0IG92ZXIgd2hpY2ggdGhlIG1lc3NhZ2UKKyAgICAgICBjYW4gYmUgc2VudC4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIE5vdGVzOgorICAgICAgIC0gT3VyIHNlc3Npb24gd2lsbCBhbHdheXMgZXhpc3QgYnkgbm93IGFzIGl0J3MgY3JlYXRlZCB3aGVuIHRoZQorICAgICAgICAgdHJhbnNwb3J0IG9iamVjdCBpcyBjcmVhdGVkLiBBdXRvLXNlc3Npb24gY3JlYXRpb24gaXMgaGFuZGxlZAorICAgICAgICAgaGlnaGVyIGluIHRoZSBzdGFjay4KKyAgICAgICAtIFdlIGRvbid0ICJleHRyYWN0IiBwZXIgc2F5IHNpbmNlIHdlIGp1c3QgbGVhdmUgdGhlIGRhdGEgaW4KKyAgICAgICAgIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgLSBUaGUgc2Vzc2lvbklEIGlzIHN0b3JlZCBpbiB0aGUgdC0+ZGF0YSBtZW1vcnkgcG9pbnRlci4KKyAgICAqLworCisgICAgLyogUkZDNTk1MyBzZWN0aW9uIDUuMjogCisgICAgICAgMykgIElmIHRtU2FtZVNlY3VyaXR5IGlzIHRydWUgYW5kIGVpdGhlciB0bVNlc3Npb25JRCBpcyB1bmRlZmluZWQgb3IKKyAgICAgICAgICAgcmVmZXJzIHRvIGEgc2Vzc2lvbiB0aGF0IGlzIG5vIGxvbmdlciBvcGVuIHRoZW4gaW5jcmVtZW50IHRoZQorICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uTm9TZXNzaW9ucyBjb3VudGVyLCBkaXNjYXJkIHRoZSBtZXNzYWdlIGFuZAorICAgICAgICAgICByZXR1cm4gdGhlIGVycm9yIGluZGljYXRpb24gaW4gdGhlIHN0YXR1c0luZm9ybWF0aW9uLiAgUHJvY2Vzc2luZworICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2Ugc3RvcHMuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBOb3RlczoKKyAgICAgICAtIFdlIHdvdWxkIG5ldmVyIGdldCBoZXJlIGlmIHRoZSBzZXNzaW9uSUQgd2FzIGVpdGhlciB1bmRlZmluZWQKKyAgICAgICAgIG9yIGRpZmZlcmVudC4gIFdlIHRpZSBwYWNrZXRzIGRpcmVjdGx5IHRvIHRoZSB0cmFuc3BvcnQKKyAgICAgICAgIG9iamVjdCBhbmQgaXQgY291bGQgbmV2ZXIgYmUgc2VudCBiYWNrIG92ZXIgYSBkaWZmZXJlbnQKKyAgICAgICAgIHRyYW5zcG9ydCwgd2hpY2ggaXMgd2hhdCB0aGUgYWJvdmUgdGV4dCBpcyB0cnlpbmcgdG8gcHJldmVudC4KKyAgICAgKi8KKworICAgIC8qIFJGQzU5NTMgc2VjdGlvbiA1LjI6IAorICAgICAgIDQpICBJZiB0bVNhbWVTZWN1cml0eSBpcyBmYWxzZSBhbmQgdG1TZXNzaW9uSUQgcmVmZXJzIHRvIGEgc2Vzc2lvbgorICAgICAgICAgICB0aGF0IGlzIG5vIGxvbmdlciBhdmFpbGFibGUgdGhlbiBhbiBpbXBsZW1lbnRhdGlvbiBTSE9VTEQgb3BlbiBhCisgICAgICAgICAgIG5ldyBzZXNzaW9uIHVzaW5nIHRoZSBvcGVuU2Vzc2lvbigpIEFTSSAoZGVzY3JpYmVkIGluIGdyZWF0ZXIKKyAgICAgICAgICAgZGV0YWlsIGluIHN0ZXAgNWIpLiAgSW5zdGVhZCBvZiBvcGVuaW5nIGEgbmV3IHNlc3Npb24gYW4KKyAgICAgICAgICAgaW1wbGVtZW50YXRpb24gTUFZIHJldHVybiBhIHNubXBUbHN0bVNlc3Npb25Ob1Nlc3Npb25zIGVycm9yIHRvCisgICAgICAgICAgIHRoZSBjYWxsaW5nIG1vZHVsZSBhbmQgc3RvcCBwcm9jZXNzaW5nIG9mIHRoZSBtZXNzYWdlLgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gTm90ZXM6CisgICAgICAgLSBXZSB3b3VsZCBuZXZlciBnZXQgaGVyZSBpZiB0aGUgc2Vzc2lvbklEIHdhcyBlaXRoZXIgdW5kZWZpbmVkCisgICAgICAgICBvciBkaWZmZXJlbnQuICBXZSB0aWUgcGFja2V0cyBkaXJlY3RseSB0byB0aGUgdHJhbnNwb3J0CisgICAgICAgICBvYmplY3QgYW5kIGl0IGNvdWxkIG5ldmVyIGJlIHNlbnQgYmFjayBvdmVyIGEgZGlmZmVyZW50CisgICAgICAgICB0cmFuc3BvcnQsIHdoaWNoIGlzIHdoYXQgdGhlIGFib3ZlIHRleHQgaXMgdHJ5aW5nIHRvIHByZXZlbnQuCisgICAgICAgLSBBdXRvLWNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIGhpZ2hlciBpbiB0aGUgTmV0LVNOTVAgbGlicmFyeSBzdGFjaworICAgICAqLworICAgIAorICAgIC8qIFJGQzU5NTMgc2VjdGlvbiA1LjI6IAorICAgICAgIDUpICBJZiB0bVNlc3Npb25JRCBpcyB1bmRlZmluZWQsIHRoZW4gdXNlIHRtVHJhbnNwb3J0RG9tYWluLAorICAgICAgICAgICB0bVRyYW5zcG9ydEFkZHJlc3MsIHRtU2VjdXJpdHlOYW1lIGFuZCB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwKKyAgICAgICAgICAgdG8gc2VlIGlmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgTENEIHN1aXRhYmxlIHRvCisgICAgICAgICAgIHNlbmQgdGhlIG1lc3NhZ2Ugb3Zlci4KKworICAgICAgICAgICA1YSkgIElmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBMQ0QgZW50cnksIHRoZW4gdGhpcyBzZXNzaW9uCisgICAgICAgICAgICAgICAgd2lsbCBiZSB1c2VkIHRvIHNlbmQgdGhlIG1lc3NhZ2UuCisKKyAgICAgICAgICAgNWIpICBJZiB0aGVyZSBpcyBub3QgYSBjb3JyZXNwb25kaW5nIExDRCBlbnRyeSwgdGhlbiBvcGVuIGEKKyAgICAgICAgICAgICAgICBzZXNzaW9uIHVzaW5nIHRoZSBvcGVuU2Vzc2lvbigpIEFTSSAoZGlzY3Vzc2VkIGZ1cnRoZXIgaW4KKyAgICAgICAgICAgICAgICBTZWN0aW9uIDUuMy4xKS4gIEltcGxlbWVudGF0aW9ucyBNQVkgd2lzaCB0byBvZmZlciBtZXNzYWdlCisgICAgICAgICAgICAgICAgYnVmZmVyaW5nIHRvIHByZXZlbnQgcmVkdW5kYW50IG9wZW5TZXNzaW9uKCkgY2FsbHMgZm9yIHRoZQorICAgICAgICAgICAgICAgIHNhbWUgY2FjaGUgZW50cnkuICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCBmcm9tCisgICAgICAgICAgICAgICAgb3BlblNlc3Npb24oKSwgdGhlbiBkaXNjYXJkIHRoZSBtZXNzYWdlLCBkaXNjYXJkIHRoZQorICAgICAgICAgICAgICAgIHRtU3RhdGVSZWZlcmVuY2UsIGluY3JlbWVudCB0aGUgc25tcFRsc3RtU2Vzc2lvbk9wZW5FcnJvcnMsCisgICAgICAgICAgICAgICAgcmV0dXJuIGFuIGVycm9yIGluZGljYXRpb24gdG8gdGhlIGNhbGxpbmcgbW9kdWxlIGFuZCBzdG9wCisgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBvZiB0aGUgbWVzc2FnZS4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIE5vdGVzOgorICAgICAgIC0gV2Ugd291bGQgbmV2ZXIgZ2V0IGhlcmUgaWYgdGhlIHNlc3Npb25JRCB3YXMgZWl0aGVyIHVuZGVmaW5lZAorICAgICAgICAgb3IgZGlmZmVyZW50LiAgV2UgdGllIHBhY2tldHMgZGlyZWN0bHkgdG8gdGhlIHRyYW5zcG9ydAorICAgICAgICAgb2JqZWN0IGFuZCBpdCBjb3VsZCBuZXZlciBiZSBzZW50IGJhY2sgb3ZlciBhIGRpZmZlcmVudAorICAgICAgICAgdHJhbnNwb3J0LCB3aGljaCBpcyB3aGF0IHRoZSBhYm92ZSB0ZXh0IGlzIHRyeWluZyB0byBwcmV2ZW50LgorICAgICAgIC0gQXV0by1jb25uZWN0aW9ucyBhcmUgaGFuZGxlZCBoaWdoZXIgaW4gdGhlIE5ldC1TTk1QIGxpYnJhcnkgc3RhY2sKKyAgICAgKi8KKworICAgIC8qIG91ciBzZXNzaW9uIHBvaW50ZXIgaXMgZnVuY3Rpb25hbGx5IHQtPmRhdGEgKi8KKyAgICBpZiAoTlVMTCA9PSB0LT5kYXRhKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuZXRzbm1wX3Rsc3RjcF9zZW5kIHJlY2VpdmVkIG5vIGluY29taW5nIGRhdGFcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdGxzZGF0YSA9IHQtPmRhdGE7CisgICAgCisgICAgaWYgKHRsc2RhdGEtPnNzbCA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0bHN0Y3Bfc2VuZCB3YXMgY2FsbGVkIHdpdGhvdXQgYSBTU0wgY29ubmVjdGlvbi5cbiIpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyogSWYgdGhlIGZpcnN0IHBhY2tldCBhbmQgd2UgaGF2ZSBubyBzZWNuYW1lLCB0aGVuIGNvcHkgdGhlCisgICAgICAgaW1wb3J0YW50IHNlY3VyaXR5TmFtZSBkYXRhIGludG8gdGhlIGxvbmdlci1saXZlZCBzZXNzaW9uCisgICAgICAgcmVmZXJlbmNlIGluZm9ybWF0aW9uLiAqLworICAgIGlmICgodGxzZGF0YS0+ZmxhZ3MgJiBORVRTTk1QX1RMU0JBU0VfSVNfQ0xJRU5UKSAmJgorICAgICAgICAhdGxzZGF0YS0+c2VjdXJpdHlOYW1lICYmIHRtU3RhdGVSZWYgJiYgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lTGVuID4gMCkKKyAgICAgICAgdGxzZGF0YS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSk7CisgICAgICAgIAorICAgICAgICAKKyAgICAvKiBSRkM1OTUzIHNlY3Rpb24gNS4yOiAKKyAgICAgICA2KSAgVXNpbmcgZWl0aGVyIHRoZSBzZXNzaW9uIGluZGljYXRlZCBieSB0aGUgdG1TZXNzaW9uSUQgaWYgdGhlcmUKKyAgICAgICAgICAgd2FzIG9uZSBvciB0aGUgc2Vzc2lvbiByZXN1bHRpbmcgZnJvbSBhIHByZXZpb3VzIHN0ZXAgKDQgb3IgNSksCisgICAgICAgICAgIHBhc3MgdGhlIG91dGdvaW5nTWVzc2FnZSB0byAoRClUTFMgZm9yIGVuY2Fwc3VsYXRpb24gYW5kCisgICAgICAgICAgIHRyYW5zbWlzc2lvbi4KKyAgICAqLworICAgIHJjID0gU1NMX3dyaXRlKHRsc2RhdGEtPnNzbCwgYnVmLCBzaXplKTsKKyAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgIndyb3RlICVkIGJ5dGVzXG4iLCBzaXplKSk7CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIHRsc2RhdGEtPnNzbCwgIlNTTF93cml0ZSIpOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfdGxzdGNwX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGE7CisKKyAgICBpZiAoTlVMTCA9PSB0IHx8IE5VTEwgPT0gdC0+ZGF0YSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuNC4gIENsb3NpbmcgYSBTZXNzaW9uCisKKyAgICAgICAxKSAgSW5jcmVtZW50IGVpdGhlciB0aGUgc25tcFRsc3RtU2Vzc2lvbkNsaWVudENsb3NlcyBvciB0aGUKKyAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvblNlcnZlckNsb3NlcyBjb3VudGVyIGFzIGFwcHJvcHJpYXRlLgorICAgICovCisgICAgaWYgKHQtPmZsYWdzICYgTkVUU05NUF9UTFNCQVNFX0lTX0NMSUVOVCkKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTkNMSUVOVENMT1NFUyk7CisgICAgZWxzZSAKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTlNFUlZFUkNMT1NFUyk7CisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS40LiAgQ2xvc2luZyBhIFNlc3Npb24KKyAgICAgICAyKSAgTG9vayB1cCB0aGUgc2Vzc2lvbiB1c2luZyB0aGUgdG1TZXNzaW9uSUQuCisgICAgKi8KKyAgICB0bHNkYXRhID0gKF9uZXRzbm1wVExTQmFzZURhdGEgKikgdC0+ZGF0YTsKKworICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjQuICBDbG9zaW5nIGEgU2Vzc2lvbgorICAgICAgIDMpICBJZiB0aGVyZSBpcyBubyBvcGVuIHNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB0bVNlc3Npb25JRCwgdGhlbgorICAgICAgICAgICBjbG9zZVNlc3Npb24gcHJvY2Vzc2luZyBpcyBjb21wbGV0ZWQuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczogaWYgd2UgaGF2ZSBhIG5vbi16ZXJvIHRsc2RhdGEgdGhlbiBpdCdzCisgICAgICAgYWx3YXlzIHRydWUgKi8KKworICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogRXN0YWJsaXNoaW5nIGEgU2Vzc2lvbiBhcyBhIENsaWVudAorICAgICAgIDQpICBIYXZlIChEKVRMUyBjbG9zZSB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24uICBUaGlzIFNIT1VMRCBpbmNsdWRlCisgICAgICAgICAgIHNlbmRpbmcgYSBjbG9zZV9ub3RpZnkgVExTIEFsZXJ0IHRvIGluZm9ybSB0aGUgb3RoZXIgc2lkZSB0aGF0CisgICAgICAgICAgIHNlc3Npb24gY2xlYW51cCBtYXkgYmUgcGVyZm9ybWVkLgorICAgICovCisKKyAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgIlNodXR0aW5nIGRvd24gU1NMIGNvbm5lY3Rpb25cbiIpKTsKKyAgICBpZiAodGxzZGF0YS0+c3NsKSB7CisgICAgICAgIFNTTF9zaHV0ZG93bih0bHNkYXRhLT5zc2wpOworICAgIH0KKworICAgIG5ldHNubXBfdGxzYmFzZV9mcmVlX3Rsc2RhdGEodGxzZGF0YSk7CisKKyAgICB0LT5kYXRhID0gTlVMTDsKKyAgICByZXR1cm4gbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworfQorCitzdGF0aWMgaW50CituZXRzbm1wX3Rsc3RjcF9hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgQklPICAgICAgICAgICAgKmFjY2VwdGVkX2JpbzsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisgICAgU1NMX0NUWCAqY3R4OworICAgIFNTTCAgICAgKnNzbDsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhID0gTlVMTDsKKyAgICAKKyAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgIm5ldHNubXBfdGxzdGNwX2FjY2VwdCBjYWxsZWRcbiIpKTsKKworICAgIHRsc2RhdGEgPSAoX25ldHNubXBUTFNCYXNlRGF0YSAqKSB0LT5kYXRhOworCisgICAgcmMgPSBCSU9fZG9fYWNjZXB0KHRsc2RhdGEtPmFjY2VwdF9iaW8pOworCisgICAgaWYgKHJjIDw9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkJJT19kb19hY2NlcHQgZmFpbGVkXG4iKTsKKyAgICAgICAgX29wZW5zc2xfbG9nX2Vycm9yKHJjLCBOVUxMLCAiQklPX2RvX2FjY2VwdCIpOworICAgICAgICAvKiBYWFg6IG5lZWQgdG8gY2xvc2UgdGhlIGxpc3RlbmluZyBjb25uZWN0aW9uIGhlcmU/ICovCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB0bHNkYXRhLT5hY2NlcHRlZF9iaW8gPSBhY2NlcHRlZF9iaW8gPSBCSU9fcG9wKHRsc2RhdGEtPmFjY2VwdF9iaW8pOworICAgIGlmICghYWNjZXB0ZWRfYmlvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJGYWlsZWQgdG8gcG9wIGFuIGFjY2VwdGVkIGJpbyBvZmYgdGhlIGJpbyBzdGFhY2tcbiIpOworICAgICAgICAvKiBYWFg6IG5lZWQgdG8gY2xvc2UgdGhlIGxpc3RlbmluZyBjb25uZWN0aW9uIGhlcmU/ICovCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBjcmVhdGUgdGhlIE9wZW5TU0wgVExTIGNvbnRleHQgKi8KKyAgICBjdHggPSB0bHNkYXRhLT5zc2xfY29udGV4dDsKKworICAgIC8qIGNyZWF0ZSB0aGUgc2VydmVyJ3MgbWFpbiBTU0wgYmlvICovCisgICAgc3NsID0gdGxzZGF0YS0+c3NsID0gU1NMX25ldyhjdHgpOworICAgIGlmICghdGxzZGF0YS0+c3NsKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJUTFNUQ1A6IEZhaWxlZCB0byBjcmVhdGUgYSBTU0wgQklPXG4iKTsKKyAgICAgICAgQklPX2ZyZWUoYWNjZXB0ZWRfYmlvKTsKKyAgICAgICAgdGxzZGF0YS0+YWNjZXB0ZWRfYmlvID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAgICAgCisgICAgU1NMX3NldF9iaW8oc3NsLCBhY2NlcHRlZF9iaW8sIGFjY2VwdGVkX2Jpbyk7CisgICAgICAgIAorICAgIGlmICgocmMgPSBTU0xfYWNjZXB0KHNzbCkpIDw9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRMU1RDUDogRmFpbGVkIFNTTF9hY2NlcHRcbiIpOworICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIHNzbCwgIlNTTF9hY2NlcHQiKTsKKyAgICAgICAgU1NMX3NodXRkb3duKHRsc2RhdGEtPnNzbCk7CisgICAgICAgIFNTTF9mcmVlKHRsc2RhdGEtPnNzbCk7CisgICAgICAgIHRsc2RhdGEtPmFjY2VwdGVkX2JpbyA9IE5VTEw7IC8qIGZyZWVkIGJ5IFNTTF9mcmVlICovCisgICAgICAgIHRsc2RhdGEtPnNzbCA9IE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9ICAgCisKKyAgICAvKgorICAgICAqIGN1cnJlbnRseSBuZXRzbm1wX3Rsc2Jhc2Vfd3JhcHVwX3JlY3YgaXMgd2hlcmUgd2UgY2hlY2sgZm9yCisgICAgICogYWxnb3JpdGhtIGNvbXBsaWFuY2UsIGJ1dCBmb3IgdGxzIHdlIGtub3cgdGhlIGFsZ29yaXRobXMKKyAgICAgKiBhdCB0aGlzIHBvaW50LCBzbyB3ZSBjb3VsZCBiYWlsIGVhcmxpZXIuLi4KKyAgICAgKi8KKyNpZiAwIC8qIG1vdmVkIGNoZWNrcyB0byBuZXRzbm1wX3Rsc2Jhc2Vfd3JhcHVwX3JlY3YgKi8KKyAgICBuZXRzbm1wX29wZW5zc2xfbnVsbF9jaGVja3ModGxzZGF0YS0+c3NsLCAmbm9fYXV0aCwgTlVMTCk7CisgICAgaWYgKG5vX2F1dGggIT0gMCkgeyAvKiBudWxsL3Vua25vd24gYXV0aGVudGljYXRpb24gKi8KKyAgICAgICAgLyogeHh4LXJrczogc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfPz8/KTsgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRsc3RjcDogY29ubmVjdGlvbiB3aXRoIE5VTEwgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgICBTU0xfc2h1dGRvd24odGxzZGF0YS0+c3NsKTsKKyAgICAgICAgU1NMX2ZyZWUodGxzZGF0YS0+c3NsKTsKKyAgICAgICAgdGxzZGF0YS0+YWNjZXB0ZWRfYmlvID0gTlVMTDsgLyogZnJlZWQgYnkgU1NMX2ZyZWUgKi8KKyAgICAgICAgdGxzZGF0YS0+c3NsID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMy4yOiBBY2NlcHRpbmcgYSBTZXNzaW9uIGFzIGEgU2VydmVyCisgICAgICAgQSAoRClUTFMgc2VydmVyIHNob3VsZCBhY2NlcHQgbmV3IHNlc3Npb24gY29ubmVjdGlvbnMgZnJvbSBhbnkgY2xpZW50CisgICAgICAgdGhhdCBpdCBpcyBhYmxlIHRvIHZlcmlmeSB0aGUgY2xpZW50J3MgY3JlZGVudGlhbHMgZm9yLiAgVGhpcyBpcyBkb25lCisgICAgICAgYnkgYXV0aGVudGljYXRpbmcgdGhlIGNsaWVudCdzIHByZXNlbnRlZCBjZXJ0aWZpY2F0ZSB0aHJvdWdoIGEKKyAgICAgICBjZXJ0aWZpY2F0ZSBwYXRoIHZhbGlkYXRpb24gcHJvY2VzcyAoZS5nLiAgW1JGQzUyODBdKSBvciB0aHJvdWdoCisgICAgICAgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgdmVyaWZpY2F0aW9uIHVzaW5nIGZpbmdlcnByaW50cyBjb25maWd1cmVkIGluCisgICAgICAgdGhlIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlLiAgQWZ0ZXJ3YXJkIHRoZSBzZXJ2ZXIgd2lsbCBkZXRlcm1pbmUgdGhlCisgICAgICAgaWRlbnRpdHkgb2YgdGhlIHJlbW90ZSBlbnRpdHkgdXNpbmcgdGhlIGZvbGxvd2luZyBwcm9jZWR1cmVzLgorCisgICAgICAgVGhlIChEKVRMUyBzZXJ2ZXIgaWRlbnRpZmllcyB0aGUgYXV0aGVudGljYXRlZCBpZGVudGl0eSBmcm9tIHRoZQorICAgICAgIChEKVRMUyBjbGllbnQncyBwcmluY2lwYWwgY2VydGlmaWNhdGUgdXNpbmcgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorICAgICAgIGZyb20gdGhlIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlIG1hcHBpbmcgdGFibGUuICBUaGUgKEQpVExTIHNlcnZlcgorICAgICAgIE1VU1QgcmVxdWVzdCBhbmQgZXhwZWN0IGEgY2VydGlmaWNhdGUgZnJvbSB0aGUgY2xpZW50IGFuZCBNVVNUIE5PVAorICAgICAgIGFjY2VwdCBTTk1QIG1lc3NhZ2VzIG92ZXIgdGhlIChEKVRMUyBjb25uZWN0aW9uIHVudGlsIHRoZSBjbGllbnQgaGFzCisgICAgICAgc2VudCBhIGNlcnRpZmljYXRlIGFuZCBpdCBoYXMgYmVlbiBhdXRoZW50aWNhdGVkLiAgVGhlIHJlc3VsdGluZworICAgICAgIGRlcml2ZWQgdG1TZWN1cml0eU5hbWUgaXMgcmVjb3JkZWQgaW4gdGhlIHRtU3RhdGVSZWZlcmVuY2UgY2FjaGUgYXMKKyAgICAgICB0bVNlY3VyaXR5TmFtZS4gIFRoZSBkZXRhaWxzIG9mIHRoZSBsb29rdXAgcHJvY2VzcyBhcmUgZnVsbHkKKyAgICAgICBkZXNjcmliZWQgaW4gdGhlIERFU0NSSVBUSU9OIGNsYXVzZSBvZiB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUKKyAgICAgICBNSUIgb2JqZWN0LiAgSWYgYW55IHZlcmlmaWNhdGlvbiBmYWlscyBpbiBhbnkgd2F5IChmb3IgZXhhbXBsZQorICAgICAgIGJlY2F1c2Ugb2YgZmFpbHVyZXMgaW4gY3J5cHRvZ3JhcGhpYyB2ZXJpZmljYXRpb24gb3IgYmVjYXVzZSBvZiB0aGUKKyAgICAgICBsYWNrIG9mIGFuIGFwcHJvcHJpYXRlIHJvdyBpbiB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUpIHRoZW4gdGhlCisgICAgICAgc2Vzc2lvbiBlc3RhYmxpc2htZW50IE1VU1QgZmFpbCwgYW5kIHRoZQorICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkQ2xpZW50Q2VydGlmaWNhdGVzIG9iamVjdCBpcyBpbmNyZW1lbnRlZC4gIElmCisgICAgICAgdGhlIHNlc3Npb24gY2FuIG5vdCBiZSBvcGVuZWQgZm9yIGFueSByZWFzb24gYXQgYWxsLCBpbmNsdWRpbmcKKyAgICAgICBjcnlwdG9ncmFwaGljIHZlcmlmaWNhdGlvbiBmYWlsdXJlcywgdGhlbiB0aGUKKyAgICAgICBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycyBjb3VudGVyIGlzIGluY3JlbWVudGVkIGFuZCBwcm9jZXNzaW5nCisgICAgICAgc3RvcHMuCisKKyAgICAgICBTZXJ2ZXJzIHRoYXQgd2lzaCB0byBzdXBwb3J0IG11bHRpcGxlIHByaW5jaXBhbHMgYXQgYSBwYXJ0aWN1bGFyIHBvcnQKKyAgICAgICBTSE9VTEQgbWFrZSB1c2Ugb2YgYSAoRClUTFMgZXh0ZW5zaW9uIHRoYXQgYWxsb3dzIHNlcnZlci1zaWRlCisgICAgICAgcHJpbmNpcGFsIHNlbGVjdGlvbiBsaWtlIHRoZSBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIGV4dGVuc2lvbiBkZWZpbmVkCisgICAgICAgaW4gU2VjdGlvbiAzLjEgb2YgW1JGQzQzNjZdLiAgU3VwcG9ydGluZyB0aGlzIHdpbGwgYWxsb3csIGZvcgorICAgICAgIGV4YW1wbGUsIHNlbmRpbmcgbm90aWZpY2F0aW9ucyB0byBhIHNwZWNpZmljIHByaW5jaXBhbCBhdCBhIGdpdmVuIFRDUAorICAgICAgIG9yIFVEUCBwb3J0LgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICAgLSB3ZSBleHBlY3QgZmluZ2VycHJpbnRzIHRvIGJlIHN0b3JlZCBpbiB0aGUgdHJhbnNwb3J0IGNvbmZpZworICAgICAgIC0gd2UgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IG11bGl0cGxlIHByaW5jaXBhbHMgYW5kIG9ubHkgb2ZmZXIgb25lCisgICAgKi8KKyAgICBpZiAoKHJjID0gbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9jbGllbnRfY2VydChzc2wsIHRsc2RhdGEpKQorICAgICAgICAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgLyogWFhYOiBmcmVlIG5lZWRlZCBtZW1vcnkgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRMU1RDUDogRmFsaWVkIGNoZWNraW5nIGNsaWVudCBjZXJ0aWZpY2F0ZVxuIik7CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0xJRU5UQ0VSVElGSUNBVEVTKTsKKyAgICAgICAgU1NMX3NodXRkb3duKHRsc2RhdGEtPnNzbCk7CisgICAgICAgIFNTTF9mcmVlKHRsc2RhdGEtPnNzbCk7CisgICAgICAgIHRsc2RhdGEtPmFjY2VwdGVkX2JpbyA9IE5VTEw7IC8qIGZyZWVkIGJ5IFNTTF9mcmVlICovCisgICAgICAgIHRsc2RhdGEtPnNzbCA9IE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKworICAgIC8qIFhYWDogY2hlY2sgYWNjZXB0YW5jZSBjcml0ZXJpYSBoZXJlICovCisKKyAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgImFjY2VwdCBzdWNjZWVkZWQgb24gc29jayAlZFxuIiwgdC0+c29jaykpOworCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMS4yIHN0ZXAgMSwgcGFydDI6OgorICAgICAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IG1lc3NhZ2UgcmVjZWl2ZWQgdGhyb3VnaCB0aGlzIHNlc3Npb24gYW5kCisgICAgIHRoZSBzZXNzaW9uIGRvZXMgbm90IGhhdmUgYW4gYXNzaWduZWQgdGxzdG1TZXNzaW9uSUQgeWV0IHRoZW4gdGhlCisgICAgIHNubXBUbHN0bVNlc3Npb25BY2NlcHRzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYW5kIGEKKyAgICAgdGxzdG1TZXNzaW9uSUQgZm9yIHRoZSBzZXNzaW9uIGlzIGNyZWF0ZWQuICBUaGlzIHdpbGwgb25seSBoYXBwZW4KKyAgICAgb24gdGhlIHNlcnZlciBzaWRlIG9mIGEgY29ubmVjdGlvbiBiZWNhdXNlIGEgY2xpZW50IHdvdWxkIGhhdmUKKyAgICAgYWxyZWFkeSBhc3NpZ25lZCBhIHRsc3RtU2Vzc2lvbklEIGR1cmluZyB0aGUgb3BlblNlc3Npb24oKQorICAgICBpbnZvY2F0aW9uLiAgSW1wbGVtZW50YXRpb25zIG1heSBoYXZlIHBlcmZvcm1lZCB0aGUgcHJvY2VkdXJlcworICAgICBkZXNjcmliZWQgaW4gU2VjdGlvbiA1LjMuMiBwcmlvciB0byB0aGlzIHBvaW50IG9yIHRoZXkgbWF5CisgICAgIHBlcmZvcm0gdGhlbSBub3csIGJ1dCB0aGUgcHJvY2VkdXJlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiA1LjMuMgorICAgICBNVVNUIGJlIHBlcmZvcm1lZCBiZWZvcmUgY29udGludWluZyBiZXlvbmQgdGhpcyBwb2ludC4KKyAgICAqLworICAgIC8qIFdlJ3JlIHRha2luZyBvcHRpb24gMiBhbmQgaW5jcmVtZW50aW5nIHRoZSBzZXNzaW9uIGFjY2VwdHMgaGVyZQorICAgICAgIHJhdGhlciB0aGFuIHVwb24gcmVjZWl2aW5nIHRoZSBmaXJzdCBwYWNrZXQgKi8KKyAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OQUNDRVBUUyk7CisKKyAgICAvKiBYWFg6IGNoZWNrIHRoYXQgaXQgcmV0dXJucyBzb21ldGhpbmcgc28gd2UgY2FuIGZyZWUgc3R1ZmY/ICovCisgICAgcmV0dXJuIEJJT19nZXRfZmQodGxzZGF0YS0+YWNjZXB0ZWRfYmlvLCBOVUxMKTsKK30KKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3Rsc3RjcF9vcGVuKG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGE7CisgICAgQklPICpiaW87CisgICAgU1NMX0NUWCAqY3R4OworICAgIFNTTCAqc3NsOworICAgIGludCByYyA9IDA7CisgICAgX25ldHNubXBfdmVyaWZ5X2luZm8gKnZlcmlmeV9pbmZvOworCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHQgIT0gTlVMTCwgTlVMTCk7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHQtPmRhdGEgIT0gTlVMTCwgTlVMTCk7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHNpemVvZihfbmV0c25tcFRMU0Jhc2VEYXRhKSA9PSB0LT5kYXRhX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICB0bHNkYXRhID0gdC0+ZGF0YTsKKyAgICAKKyAgICBpZiAodGxzZGF0YS0+ZmxhZ3MgJiBORVRTTk1QX1RMU0JBU0VfSVNfQ0xJRU5UKSB7CisgICAgICAgIC8qIElzIHRoZSBjbGllbnQgKi8KKworICAgICAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4zLjE6ICBFc3RhYmxpc2hpbmcgYSBTZXNzaW9uIGFzIGEgQ2xpZW50CisgICAgICAgICAqICAgIDEpICBUaGUgc25tcFRsc3RtU2Vzc2lvbk9wZW5zIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQuCisgICAgICAgICAqLworICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTlMpOworCisgICAgICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogIEVzdGFibGlzaGluZyBhIFNlc3Npb24gYXMgYSBDbGllbnQKKyAgICAgICAgICAyKSAgVGhlIGNsaWVudCBzZWxlY3RzIHRoZSBhcHByb3ByaWF0ZSBjZXJ0aWZpY2F0ZSBhbmQgY2lwaGVyX3N1aXRlcworICAgICAgICAgICAgICBmb3IgdGhlIGtleSBhZ3JlZW1lbnQgYmFzZWQgb24gdGhlIHRtU2VjdXJpdHlOYW1lIGFuZCB0aGUKKyAgICAgICAgICAgICAgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsIGZvciB0aGUgc2Vzc2lvbi4gIEZvciBzZXNzaW9ucyBiZWluZworICAgICAgICAgICAgICBlc3RhYmxpc2hlZCBhcyBhIHJlc3VsdCBvZiBhIFNOTVAtVEFSR0VULU1JQiBiYXNlZCBvcGVyYXRpb24sIHRoZQorICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSB3aWxsIHBvdGVudGlhbGx5IGhhdmUgYmVlbiBpZGVudGlmaWVkIHZpYSB0aGUKKyAgICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGUgbWFwcGluZyBhbmQgdGhlIGNpcGhlcl9zdWl0ZXMgd2lsbCBoYXZlIHRvCisgICAgICAgICAgICAgIGJlIHRha2VuIGZyb20gc3lzdGVtLXdpZGUgb3IgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4gIElmIG5vIHJvdyBpbiB0aGUgc25tcFRsc3RtUGFyYW1zVGFibGUgZXhpc3RzIHRoZW4KKyAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIE1BWSBjaG9vc2UgdG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIHVzaW5nIGEKKyAgICAgICAgICAgICAgZGVmYXVsdCBjbGllbnQgY2VydGlmaWNhdGUgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgT3RoZXJ3aXNlLCB0aGUgY2VydGlmaWNhdGUgYW5kIGFwcHJvcHJpYXRlIGNpcGhlcl9zdWl0ZXMgd2lsbAorICAgICAgICAgICAgICBuZWVkIHRvIGJlIHBhc3NlZCB0byB0aGUgb3BlblNlc3Npb24oKSBBU0kgYXMgc3VwcGxlbWVudGFsCisgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9yIGNvbmZpZ3VyZWQgdGhyb3VnaCBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQKKyAgICAgICAgICAgICAgbWVjaGFuaXNtLiAgSXQgaXMgYWxzbyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgYW5kIHBvc3NpYmx5CisgICAgICAgICAgICAgIHBvbGljeS1kZXBlbmRlbnQgaG93IHRtUmVxdWVzdGVkU2VjdXJpdHlMZXZlbCB3aWxsIGJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgaW5mbHVlbmNlIHRoZSBzZWN1cml0eSBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIChEKVRMUworICAgICAgICAgICAgICBjb25uZWN0aW9uLiAgSG93ZXZlciB0aGlzIGlzIGRvbmUsIHRoZSBzZWN1cml0eSBjYXBhYmlsaXRpZXMKKyAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgKEQpVExTIE1VU1QgYmUgYXQgbGVhc3QgYXMgaGlnaCBhcyB0aGUgbGV2ZWwgb2YKKyAgICAgICAgICAgICAgc2VjdXJpdHkgaW5kaWNhdGVkIGJ5IHRoZSB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwgcGFyYW1ldGVyLgorICAgICAgICAgICAgICBUaGUgYWN0dWFsIHNlY3VyaXR5IGxldmVsIG9mIHRoZSBzZXNzaW9uIGlzIHJlcG9ydGVkIGluIHRoZQorICAgICAgICAgICAgICB0bVN0YXRlUmVmZXJlbmNlIGNhY2hlIGFzIHRtU2VjdXJpdHlMZXZlbC4gIEZvciAoRClUTFMgdG8gcHJvdmlkZQorICAgICAgICAgICAgICBzdHJvbmcgYXV0aGVudGljYXRpb24sIGVhY2ggcHJpbmNpcGFsIGFjdGluZyBhcyBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgZ2VuZXJhdG9yIFNIT1VMRCBoYXZlIGl0cyBvd24gY2VydGlmaWNhdGUuCisgICAgICAgICovCisgICAgICAgIC8qCisgICAgICAgICAgSW1wbGVtZW50YXRpb24gbm90ZXM6IHdlIGRvIG1vc3Qgb2YgdGhpcyBpbiB0aGUKKyAgICAgICAgICBzc2xjdHhfY2xpZW50X3NldHVwIFRoZSB0cmFuc3BvcnQgc2hvdWxkIGhhdmUgYmVlbgorICAgICAgICAgIGZfY29uZmlnKCllZCB3aXRoIHRoZSBwcm9wZXIgZmluZ2VycHJpbnRzIHRvIHVzZSAod2hpY2ggaXMKKyAgICAgICAgICBzdG9yZWQgaW4gdGxzZGF0YSksIG9yIHdlJ2xsIHVzZSB0aGUgZGVmYXVsdCBpZGVudGl0eQorICAgICAgICAgIGZpbmdlcnByaW50IGlmIHRoYXQgY2FuIGJlIGZvdW5kLgorICAgICAgICAqLworCisgICAgICAgIC8qIFhYWDogY2hlY2sgc2VjdXJpdHlMZXZlbCBhbmQgZW5zdXJlIG5vIE5VTEwgZmluZ2VycHJpbnRzIGFyZSB1c2VkICovCisKKyAgICAgICAgLyogc2V0IHVwIHRoZSBuZWVkZWQgU1NMIGNvbnRleHQgKi8KKyAgICAgICAgdGxzZGF0YS0+c3NsX2NvbnRleHQgPSBjdHggPQorICAgICAgICAgICAgc3NsY3R4X2NsaWVudF9zZXR1cChUTFN2MV9tZXRob2QoKSwgdGxzZGF0YSk7CisgICAgICAgIGlmICghY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGNyZWF0ZSBUTFMgY29udGV4dFxuIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogIEVzdGFibGlzaGluZyBhIFNlc3Npb24gYXMgYSBDbGllbnQKKyAgICAgICAgICAgMykgIFVzaW5nIHRoZSBkZXN0VHJhbnNwb3J0RG9tYWluIGFuZCBkZXN0VHJhbnNwb3J0QWRkcmVzcyB2YWx1ZXMsCisgICAgICAgICAgICAgICB0aGUgY2xpZW50IHdpbGwgaW5pdGlhdGUgdGhlIChEKVRMUyBoYW5kc2hha2UgcHJvdG9jb2wgdG8KKyAgICAgICAgICAgICAgIGVzdGFibGlzaCBzZXNzaW9uIGtleXMgZm9yIG1lc3NhZ2UgaW50ZWdyaXR5IGFuZCBlbmNyeXB0aW9uLgorICAgICAgICAqLworICAgICAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlOgorICAgICAgICAgICBUaGUgdHJhbnNwb3J0IGRvbWFpbiBhbmQgYWRkcmVzcyBhcmUgcHJlLXByb2Nlc3NlZCBieSB0aGlzIHBvaW50CisgICAgICAgICovCisKKyAgICAgICAgLyogQ3JlYXRlIGEgQklPIGNvbm5lY3Rpb24gZm9yIGl0ICovCisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLCAiY29ubmVjdGluZyB0byB0bHN0Y3AgJXNcbiIsCisJCSAgICB0bHNkYXRhLT5hZGRyX3N0cmluZykpOworICAgICAgICB0LT5yZW1vdGUgPSAodm9pZCAqKSBzdHJkdXAodGxzZGF0YS0+YWRkcl9zdHJpbmcpOworICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gc3RybGVuKHRsc2RhdGEtPmFkZHJfc3RyaW5nKSArIDE7CisKKyAgICAgICAgYmlvID0gQklPX25ld19jb25uZWN0KHRsc2RhdGEtPmFkZHJfc3RyaW5nKTsKKworICAgICAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4zLjE6ICBFc3RhYmxpc2hpbmcgYSBTZXNzaW9uIGFzIGEgQ2xpZW50CisgICAgICAgICAgIDMpIGNvbnRpbnVlZDoKKyAgICAgICAgICAgICAgSWYgdGhlIGF0dGVtcHQgdG8gZXN0YWJsaXNoIGEgc2Vzc2lvbiBpcyB1bnN1Y2Nlc3NmdWwsIHRoZW4KKyAgICAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvbk9wZW5FcnJvcnMgaXMgaW5jcmVtZW50ZWQsIGFuIGVycm9yIGluZGljYXRpb24gaXMKKyAgICAgICAgICAgICAgcmV0dXJuZWQsIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgorICAgICAgICAqLworCisgICAgICAgIGlmIChOVUxMID09IGJpbykgeworICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5FUlJPUlMpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRsc3RjcDogZmFpbGVkIHRvIGNyZWF0ZSBiaW9cbiIpOworICAgICAgICAgICAgX29wZW5zc2xfbG9nX2Vycm9yKHJjLCBOVUxMLCAiQklPIGNyZWF0aW9uIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAgICAgCisKKyAgICAgICAgLyogVGVsbCB0aGUgQklPIHRvIGFjdHVhbGx5IGRvIHRoZSBjb25uZWN0aW9uICovCisgICAgICAgIGlmICgocmMgPSBCSU9fZG9fY29ubmVjdChiaW8pKSA8PSAwKSB7CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTkVSUk9SUyk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGxzdGNwOiBmYWlsZWQgdG8gY29ubmVjdCB0byAlc1xuIiwKKwkJICAgICB0bHNkYXRhLT5hZGRyX3N0cmluZyk7CisgICAgICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIE5VTEwsICJCSU9fZG9fY29ubmVjdCIpOworICAgICAgICAgICAgQklPX2ZyZWUoYmlvKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogQ3JlYXRlIHRoZSBTU0wgbGF5ZXIgb24gdG9wIG9mIHRoZSBzb2NrZXQgYmlvICovCisgICAgICAgIHNzbCA9IHRsc2RhdGEtPnNzbCA9IFNTTF9uZXcoY3R4KTsKKyAgICAgICAgaWYgKE5VTEwgPT0gc3NsKSB7CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTkVSUk9SUyk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGxzdGNwOiBmYWlsZWQgdG8gY3JlYXRlIGEgU1NMIGNvbm5lY3Rpb25cbiIpOworICAgICAgICAgICAgQklPX2ZyZWUoYmlvKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKiBCaW5kIHRoZSBTU0wgbGF5ZXIgdG8gdGhlIEJJTyAqLyAKKyAgICAgICAgU1NMX3NldF9iaW8oc3NsLCBiaW8sIGJpbyk7CisgICAgICAgIFNTTF9zZXRfbW9kZShzc2wsIFNTTF9NT0RFX0FVVE9fUkVUUlkpOworCisgICAgICAgIHZlcmlmeV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihfbmV0c25tcF92ZXJpZnlfaW5mbyk7CisgICAgICAgIGlmIChOVUxMID09IHZlcmlmeV9pbmZvKSB7CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTkVSUk9SUyk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGxzdGNwOiBmYWlsZWQgdG8gY3JlYXRlIGEgU1NMIGNvbm5lY3Rpb25cbiIpOworICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbCk7CisgICAgICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBTU0xfc2V0X2V4X2RhdGEoc3NsLCB0bHNfZ2V0X3ZlcmlmeV9pbmZvX2luZGV4KCksIHZlcmlmeV9pbmZvKTsKKworICAgICAgICAvKiBUaGVuIGhhdmUgU1NMIGRvIGl0J3MgY29ubmVjdGlvbiBvdmVyIHRoZSBCSU8gKi8KKyAgICAgICAgaWYgKChyYyA9IFNTTF9jb25uZWN0KHNzbCkpIDw9IDApIHsKKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVORVJST1JTKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0bHN0Y3A6IGZhaWxlZCB0byBzc2xfY29ubmVjdFxuIik7CisgICAgICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4zLjE6IEVzdGFibGlzaGluZyBhIFNlc3Npb24gYXMgYSBDbGllbnQKKyAgICAgICAgICAgMykgY29udGludWVkOgorICAgICAgICAgICAgICBJZiB0aGUgc2Vzc2lvbiBmYWlsZWQgdG8gb3BlbiBiZWNhdXNlIHRoZSBwcmVzZW50ZWQKKyAgICAgICAgICAgICAgc2VydmVyIGNlcnRpZmljYXRlIHdhcyB1bmtub3duIG9yIGludmFsaWQgdGhlbiB0aGUKKyAgICAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvblVua25vd25TZXJ2ZXJDZXJ0aWZpY2F0ZSBvcgorICAgICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZFNlcnZlckNlcnRpZmljYXRlcyBNVVNUIGJlCisgICAgICAgICAgICAgIGluY3JlbWVudGVkIGFuZCBhIHNubXBUbHN0bVNlcnZlckNlcnRpZmljYXRlVW5rbm93biBvcgorICAgICAgICAgICAgICBzbm1wVGxzdG1TZXJ2ZXJJbnZhbGlkQ2VydGlmaWNhdGUgbm90aWZpY2F0aW9uIFNIT1VMRCBiZQorICAgICAgICAgICAgICBzZW50IGFzIGFwcHJvcHJpYXRlLiAgUmVhc29ucyBmb3Igc2VydmVyIGNlcnRpZmljYXRlCisgICAgICAgICAgICAgIGludmFsaWRhdGlvbiBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLAorICAgICAgICAgICAgICBjcnlwdG9ncmFwaGljIHZhbGlkYXRpb24gZmFpbHVyZXMgYW5kIGFuIHVuZXhwZWN0ZWQKKyAgICAgICAgICAgICAgcHJlc2VudGVkIGNlcnRpZmljYXRlIGlkZW50aXR5LgorICAgICAgICAqLworCisgICAgICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogRXN0YWJsaXNoaW5nIGEgU2Vzc2lvbiBhcyBhIENsaWVudAorICAgICAgICAgICA0KSAgVGhlIChEKVRMUyBjbGllbnQgTVVTVCB0aGVuIHZlcmlmeSB0aGF0IHRoZSAoRClUTFMgc2VydmVyJ3MKKyAgICAgICAgICAgICAgIHByZXNlbnRlZCBjZXJ0aWZpY2F0ZSBpcyB0aGUgZXhwZWN0ZWQgY2VydGlmaWNhdGUuICBUaGUgKEQpVExTCisgICAgICAgICAgICAgICBjbGllbnQgTVVTVCBOT1QgdHJhbnNtaXQgU05NUCBtZXNzYWdlcyB1bnRpbCB0aGUgc2VydmVyCisgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBhdXRoZW50aWNhdGVkLCB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGhhcworICAgICAgICAgICAgICAgYmVlbiB0cmFuc21pdHRlZCBhbmQgdGhlIFRMUyBjb25uZWN0aW9uIGhhcyBiZWVuIGZ1bGx5CisgICAgICAgICAgICAgICBlc3RhYmxpc2hlZC4KKworICAgICAgICAgICAgICAgSWYgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgZXN0YWJsaXNoZWQgZnJvbSBjb25maWd1cmF0aW9uIGJhc2VkCisgICAgICAgICAgICAgICBvbiBTTk1QLVRBUkdFVC1NSUIgY29uZmlndXJhdGlvbiwgdGhlbiB0aGUgc25tcFRsc3RtQWRkclRhYmxlCisgICAgICAgICAgICAgICBERVNDUklQVElPTiBjbGF1c2UgZGVzY3JpYmVzIGhvdyB0aGUgdmVyaWZpY2F0aW9uIGlzIGRvbmUgKHVzaW5nCisgICAgICAgICAgICAgICBlaXRoZXIgYSBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCwgb3IgYW4gaWRlbnRpdHkgYXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgdmlhIGNlcnRpZmljYXRpb24gcGF0aCB2YWxpZGF0aW9uKS4KKworICAgICAgICAgICAgICAgSWYgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHJlYXNvbnMgb3RoZXIgdGhhbgorICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3VuZCBpbiB0aGUgU05NUC1UQVJHRVQtTUlCIHRoZW4gY29uZmlndXJhdGlvbiBhbmQKKyAgICAgICAgICAgICAgIHByb2NlZHVyZXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudCBzaG91bGQgYmUgZm9sbG93ZWQuCisgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIG1lY2hhbmlzbXMgU0hPVUxEIGJlIHNpbWlsYXIgaW4gbmF0dXJlIHRvIHRob3NlCisgICAgICAgICAgICAgICBkZWZpbmVkIGluIHRoZSBzbm1wVGxzdG1BZGRyVGFibGUgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcworICAgICAgICAgICAgICAgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIHN5c3RlbXMuICBGb3IgZXhhbXBsZSwgYSBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgICAgIHRvb2wgZm9yIGdlbmVyYXRpbmcgU05NUCBHRVRzIG1pZ2h0IHN1cHBvcnQgc3BlY2lmeWluZyBlaXRoZXIgdGhlCisgICAgICAgICAgICAgICBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCBvciB0aGUgZXhwZWN0ZWQgaG9zdCBuYW1lIGFzIGEKKyAgICAgICAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudC4KKyAgICAgICAgKi8KKworICAgICAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAgICAgICAgLSBBbGwgcmVtb3RlIGNlcnRpZmljYXRlIGZpbmdlcnByaW50cyBhcmUgZXhwZWN0ZWQgdG8gYmUKKyAgICAgICAgICAgICBzdG9yZWQgaW4gdGhlIHRyYW5zcG9ydCdzIGNvbmZpZyBpbmZvcm1hdGlvbi4gIFRoaXMgaXMKKyAgICAgICAgICAgICB0cnVlIGJvdGggZm9yIENMSSBjbGllbnRzIGFuZCBUQVJHRVQtTUlCIHNlc3Npb25zLgorICAgICAgICAgICAtIG5ldHNubXBfdGxzYmFzZV92ZXJpZnlfc2VydmVyX2NlcnQgaW1wbGVtZW50cyB0aGVzZSBjaGVja3MKKyAgICAgICAgKi8KKyAgICAgICAgaWYgKG5ldHNubXBfdGxzYmFzZV92ZXJpZnlfc2VydmVyX2NlcnQoc3NsLCB0bHNkYXRhKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIC8qIFhYWDogdW5rbm93biB2cyBpbnZhbGlkOyB0d28gY291bnRlcnMgKi8KKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05VTktOT1dOU0VSVkVSQ0VSVElGSUNBVEUpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRsc3RjcDogZmFpbGVkIHRvIHZlcmlmeSBzc2wgY2VydGlmaWNhdGVcbiIpOworICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbCk7CisgICAgICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4zLjE6IEVzdGFibGlzaGluZyBhIFNlc3Npb24gYXMgYSBDbGllbnQKKyAgICAgICAgICAgNSkgIChEKVRMUyBwcm92aWRlcyBhc3N1cmFuY2UgdGhhdCB0aGUgYXV0aGVudGljYXRlZCBpZGVudGl0eSBoYXMKKyAgICAgICAgICAgICAgIGJlZW4gc2lnbmVkIGJ5IGEgdHJ1c3RlZCBjb25maWd1cmVkIGNlcnRpZmljYXRpb24gYXV0aG9yaXR5LiAgSWYKKyAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBvZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgZmFpbHMgaW4gYW55IHdheSAoZm9yCisgICAgICAgICAgICAgICBleGFtcGxlIGJlY2F1c2Ugb2YgZmFpbHVyZXMgaW4gY3J5cHRvZ3JhcGhpYyB2ZXJpZmljYXRpb24gb3IgdGhlCisgICAgICAgICAgICAgICBwcmVzZW50ZWQgaWRlbnRpdHkgZGlkIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZWQgZW50aXR5KSB0aGVuCisgICAgICAgICAgICAgICB0aGUgc2Vzc2lvbiBlc3RhYmxpc2htZW50IE1VU1QgZmFpbCwgdGhlCisgICAgICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZFNlcnZlckNlcnRpZmljYXRlcyBvYmplY3QgaXMgaW5jcmVtZW50ZWQuCisgICAgICAgICAgICAgICBJZiB0aGUgc2Vzc2lvbiBjYW4gbm90IGJlIG9wZW5lZCBmb3IgYW55IHJlYXNvbiBhdCBhbGwsIGluY2x1ZGluZworICAgICAgICAgICAgICAgY3J5cHRvZ3JhcGhpYyB2ZXJpZmljYXRpb24gZmFpbHVyZXMsIHRoZW4gdGhlCisgICAgICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycyBjb3VudGVyIGlzIGluY3JlbWVudGVkIGFuZCBwcm9jZXNzaW5nCisgICAgICAgICAgICAgICBzdG9wcy4KKworICAgICAgICAqLworICAgICAgICAvKiBYWFg6IGFkZCBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZFNlcnZlckNlcnRpZmljYXRlcyBvbgorICAgICAgICAgICBjcnlwdG8gZmFpbHVyZSAqLworCisgICAgICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogRXN0YWJsaXNoaW5nIGEgU2Vzc2lvbiBhcyBhIENsaWVudAorICAgICAgICAgICA2KSAgVGhlIFRMU1RNLXNwZWNpZmljIHNlc3Npb24gaWRlbnRpZmllciAodGxzdG1TZXNzaW9uSUQpIGlzIHNldCBpbgorICAgICAgICAgICB0aGUgdG1TZXNzaW9uSUQgb2YgdGhlIHRtU3RhdGVSZWZlcmVuY2UgcGFzc2VkIHRvIHRoZSBUTFMKKyAgICAgICAgICAgVHJhbnNwb3J0IE1vZGVsIHRvIGluZGljYXRlIHRoYXQgdGhlIHNlc3Npb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQKKyAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGFuZCB0byBwb2ludCB0byBhIHNwZWNpZmljIChEKVRMUyBjb25uZWN0aW9uIGZvcgorICAgICAgICAgICBmdXR1cmUgdXNlLiAgVGhlIHRsc3RtU2Vzc2lvbklEIGlzIGFsc28gc3RvcmVkIGluIHRoZSBMQ0QgZm9yCisgICAgICAgICAgIGxhdGVyIGxvb2t1cCBkdXJpbmcgcHJvY2Vzc2luZyBvZiBpbmNvbWluZyBtZXNzYWdlcworICAgICAgICAgICAoU2VjdGlvbiA1LjEuMikuCisgICAgICAgICovCisgICAgICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICAgICAtIHRoZSB0bHNkYXRhIHBvaW50ZXIgaXMgdXNlZCBhcyBvdXIgc2Vzc2lvbiBpZGVudGlmaWVyLCBhcworICAgICAgICAgICAgIG5vdGVkIGluIHRoZSBuZXRzbm1wX3Rsc3RjcF9yZWN2KCkgZnVuY3Rpb24gY29tbWVudHMuCisgICAgICAgICovCisKKyAgICAgICAgdC0+c29jayA9IEJJT19nZXRfZmQoYmlvLCBOVUxMKTsKKworICAgIH0gZWxzZSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICAgICAgLyogSXMgdGhlIHNlcnZlciAqLworICAgICAgICAKKyAgICAgICAgLyogQ3JlYXRlIHRoZSBzb2NrZXQgYmlvICovCisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLCAibGlzdGVuaW5nIG9uIHRsc3RjcCBwb3J0ICVzXG4iLAorCQkgICAgdGxzZGF0YS0+YWRkcl9zdHJpbmcpKTsKKyAgICAgICAgdGxzZGF0YS0+YWNjZXB0X2JpbyA9IEJJT19uZXdfYWNjZXB0KHRsc2RhdGEtPmFkZHJfc3RyaW5nKTsKKyAgICAgICAgdC0+bG9jYWwgPSAodm9pZCAqKSBzdHJkdXAodGxzZGF0YS0+YWRkcl9zdHJpbmcpOworICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSBzdHJsZW4odGxzZGF0YS0+YWRkcl9zdHJpbmcpKzE7CisgICAgICAgIGlmIChOVUxMID09IHRsc2RhdGEtPmFjY2VwdF9iaW8pIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJUTFNUQ1A6IEZhbGllZCB0byBjcmVhdGUgYSBhY2NlcHQgQklPXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogb3BlbnNzbCByZXF1aXJlcyBhbiBpbml0aWFsIGFjY2VwdCB0byBiaW5kKCkgdGhlIHNvY2tldCAqLworICAgICAgICBpZiAoQklPX2RvX2FjY2VwdCh0bHNkYXRhLT5hY2NlcHRfYmlvKSA8PSAwKSB7CisJICAgIF9vcGVuc3NsX2xvZ19lcnJvcihyYywgdGxzZGF0YS0+c3NsLCAiQklPX2RvX19hY2NlcHQiKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJUTFNUQ1A6IEZhbGllZCB0byBkbyBmaXJzdCBhY2NlcHQgb24gdGhlIFRMUyBhY2NlcHQgQklPXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogY3JlYXRlIHRoZSBPcGVuU1NMIFRMUyBjb250ZXh0ICovCisgICAgICAgIHRsc2RhdGEtPnNzbF9jb250ZXh0ID0KKyAgICAgICAgICAgIHNzbGN0eF9zZXJ2ZXJfc2V0dXAoVExTdjFfbWV0aG9kKCkpOworCisgICAgICAgIHQtPnNvY2sgPSBCSU9fZ2V0X2ZkKHRsc2RhdGEtPmFjY2VwdF9iaW8sIE5VTEwpOworICAgICAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTjsKKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgIH0KKyAgICByZXR1cm4gdDsKK30KKworLyoKKyAqIENyZWF0ZSBhIFRMUy1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCisgKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKKyAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdGxzdGNwX3RyYW5zcG9ydChjb25zdCBjaGFyICphZGRyX3N0cmluZywgaW50IGlzc2VydmVyKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhOworICAgIGNoYXIgKmNwOworICAgIGNoYXIgYnVmW1NQUklOVF9NQVhfTEVOXTsKKyAgICAKKyNpZmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgaWYgKGlzc2VydmVyKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisKKyAgICAvKiBhbGxvY2F0ZSBvdXIgdHJhbnNwb3J0IHN0cnVjdHVyZSAqLworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAoTlVMTCA9PSB0KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIG91ciBUTFMgc3BlY2lmaWMgZGF0YSAqLworICAgIGlmIChOVUxMID09ICh0bHNkYXRhID0gbmV0c25tcF90bHNiYXNlX2FsbG9jYXRlX3Rsc2RhdGEodCwgaXNzZXJ2ZXIpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIWlzc2VydmVyKQorICAgICAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RMU0JBU0VfSVNfQ0xJRU5UOworCisgICAgdGxzZGF0YS0+YWRkcl9zdHJpbmcgPSBzdHJkdXAoYWRkcl9zdHJpbmcpOworCisgICAgLyogc2VlIGlmIHdlIGNhbiBleHRyYWN0IHRoZSByZW1vdGUgaG9zdG5hbWUgKi8KKyAgICBpZiAoIWlzc2VydmVyICYmIHRsc2RhdGEgJiYgYWRkcl9zdHJpbmcpIHsKKyAgICAgICAgLyogc2VhcmNoIGZvciBhIDogKi8KKyAgICAgICAgaWYgKE5VTEwgIT0gKGNwID0gc3RycmNocihhZGRyX3N0cmluZywgJzonKSkpIHsKKyAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgIChpbnQpIFNOTVBfTUlOKGNwIC0gYWRkcl9zdHJpbmcsIHNpemVvZihidWYpIC0gMSksCisgICAgICAgICAgICAgICAgICAgIGFkZHJfc3RyaW5nKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIGVsc2UgdGhlIGVudGlyZSBzcGVjIGlzIGEgaG9zdCBuYW1lIG9ubHkgKi8KKyAgICAgICAgICAgIHN0cmxjcHkoYnVmLCBhZGRyX3N0cmluZywgc2l6ZW9mKGJ1ZikpOworICAgICAgICB9CisgICAgICAgIHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lID0gc3RyZHVwKGJ1Zik7CisgICAgfQorCisgICAgdC0+ZGF0YSA9IHRsc2RhdGE7CisgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YoX25ldHNubXBUTFNCYXNlRGF0YSk7CisKKyAgICAvKgorICAgICAqIFNldCBEb21haW4KKyAgICAgKi8KKyAgICB0LT5kb21haW4gPSBuZXRzbm1wVExTVENQRG9tYWluOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICB0LT5kb21haW5fbGVuZ3RoID0gbmV0c25tcFRMU1RDUERvbWFpbl9sZW47ICAgICAKKworICAgIC8qCisgICAgICogMTYtYml0IGxlbmd0aCBmaWVsZCwgOCBieXRlIFRMUyBoZWFkZXIsIDIwIGJ5dGUgSVB2NCBoZWFkZXIgIAorICAgICAqLworCisgICAgdC0+bXNnTWF4U2l6ZSAgICAgID0gMHhmZmZmIC0gOCAtIDIwOworICAgIHQtPmZfcmVjdiAgICAgICAgICA9IG5ldHNubXBfdGxzdGNwX3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICAgICAgID0gbmV0c25tcF90bHN0Y3Bfc2VuZDsKKyAgICB0LT5mX29wZW4gICAgICAgICAgPSBuZXRzbm1wX3Rsc3RjcF9vcGVuOworICAgIHQtPmZfY2xvc2UgICAgICAgICA9IG5ldHNubXBfdGxzdGNwX2Nsb3NlOworICAgIHQtPmZfYWNjZXB0ICAgICAgICA9IG5ldHNubXBfdGxzdGNwX2FjY2VwdDsKKyAgICB0LT5mX2NvcHkgICAgICAgICAgPSBuZXRzbm1wX3Rsc3RjcF9jb3B5OworICAgIHQtPmZfY29uZmlnICAgICAgICA9IG5ldHNubXBfdGxzYmFzZV9jb25maWc7CisgICAgdC0+Zl9zZXR1cF9zZXNzaW9uID0gbmV0c25tcF90bHNiYXNlX3Nlc3Npb25faW5pdDsKKyAgICB0LT5mX2ZtdGFkZHIgICAgICAgPSBuZXRzbm1wX3Rsc3RjcF9mbXRhZGRyOworCisgICAgdC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UVU5ORUxFRCB8IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNOworCisgICAgcmV0dXJuIHQ7Cit9CisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdGxzdGNwX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIGNoYXIgYnVmW1NQUklOVF9NQVhfTEVOXTsKKworICAgIGlmIChzdHIgPT0gTlVMTCB8fCAqc3RyID09ICdcMCcpCisgICAgICAgIHN0ciA9IGRlZmF1bHRfdGFyZ2V0ICsgMTsgLyogZHJvcCB0aGUgbGVhZGluZyA6ICovCisgICAgZWxzZSBpZiAoIXN0cmNocihzdHIsICc6JykpIHsKKyAgICAgICAgLyogaXQncyBlaXRoZXIgOnBvcnQgb3IgOmFkZHJlc3MuICBUcnkgdG8gZ3Vlc3Mgd2hpY2guICovCisgICAgICAgIGNvbnN0IGNoYXIgKmNwOworICAgICAgICBpbnQgaXNwb3J0ID0gMTsKKyAgICAgICAgZm9yKGNwID0gc3RyOyAqY3AgIT0gJ1wwJzsgY3ArKykgeworICAgICAgICAgICAgLyogaWYgQUxMIG51bWJlcnMsIGl0IG11c3QgYmUganVzdCBhIHBvcnQgKi8KKyAgICAgICAgICAgIC8qIGlmIGl0IGNvbnRhaW5zIGFueXRoaW5nIGVsc2UsIGFzc3VtZSBhIGhvc3Qgb3IgaXAgYWRkcmVzcyAqLworICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KDB4RkYgJiAqY3ApKSB7CisgICAgICAgICAgICAgICAgaXNwb3J0ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaXNwb3J0KSB7CisgICAgICAgICAgICAvKiBKdXN0IDpOTk4gY2FuIGJlIHBhc3NlZCB0byBvcGVuc3NsICovCisgICAgICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLTEsICIwLjAuMC4wOiVzIiwgc3RyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIGFkZCB0aGUgZGVmYXVsdCBwb3J0ICovCisgICAgICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLTEsICIlcyVzIiwgc3RyLCBkZWZhdWx0X3RhcmdldCk7CisgICAgICAgIH0KKyAgICAgICAgc3RyID0gYnVmOworICAgIH0KKyAgICByZXR1cm4gbmV0c25tcF90bHN0Y3BfdHJhbnNwb3J0KHN0ciwgbG9jYWwpOworfQorCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdGxzdGNwX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIGNoYXIgYnVmW1NQUklOVF9NQVhfTEVOXTsKKworICAgIC8qIGVuc3VyZSBidWYgaXMgYmlnIGVub3VnaCAqLworICAgIGlmIChvX2xlbiA+IFNQUklOVF9NQVhfTEVOIC0gMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBtZW1jcHkoYnVmLCBvLCBvX2xlbik7CisgICAgYnVmW29fbGVuXSA9ICdcMCc7CisKKyAgICByZXR1cm4gbmV0c25tcF90bHN0Y3BfdHJhbnNwb3J0KGJ1ZiwgbG9jYWwpOworfQorCit2b2lkCituZXRzbm1wX3Rsc3RjcF9jdG9yKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInRsc3RjcCIsICJyZWdpc3RlcmluZyBUTFMgY29uc3RydWN0b3JcbiIpKTsKKworICAgIC8qIGNvbmZpZyBzZXR0aW5ncyAqLworCisgICAgdGxzdGNwRG9tYWluLm5hbWUgPSBuZXRzbm1wVExTVENQRG9tYWluOworICAgIHRsc3RjcERvbWFpbi5uYW1lX2xlbmd0aCA9IG5ldHNubXBUTFNUQ1BEb21haW5fbGVuOworICAgIHRsc3RjcERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYygzLCBzaXplb2YoY2hhciAqKSk7CisgICAgdGxzdGNwRG9tYWluLnByZWZpeFswXSA9ICJ0bHN0Y3AiOworICAgIHRsc3RjcERvbWFpbi5wcmVmaXhbMV0gPSAidGxzIjsKKworICAgIHRsc3RjcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICB0bHN0Y3BEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfdGxzdGNwX2NyZWF0ZV90c3RyaW5nOworICAgIHRsc3RjcERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF90bHN0Y3BfY3JlYXRlX29zdHJpbmc7CisKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnRsc3RjcERvbWFpbik7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTdmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYwpAQCAtMCwwICsxLDUxMyBAQAorLyogVURQIGJhc2UgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19VSU9fSAorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNlbmRpZgorI2lmZGVmIFdJTjMyCisjaW5jbHVkZSA8bXN3c29jay5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKworI2lmbmRlZiAgTVNHX0RPTlRXQUlUCisjZGVmaW5lIE1TR19ET05UV0FJVCAwCisjZW5kaWYKKworI2lmbmRlZiAgTVNHX05PU0lHTkFMCisjZGVmaW5lIE1TR19OT1NJR05BTCAwCisjZW5kaWYKKwordm9pZAorX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KGludCBmZCwgaW50IGxvY2FsKQoreworI2lmZGVmICBTT19CU0RDT01QQVQKKyAgICAvKgorICAgICAqIFBhdGNoIGZvciBMaW51eC4gIFdpdGhvdXQgdGhpcywgVURQIHBhY2tldHMgdGhhdCBmYWlsIGdldCBhbiBJQ01QCisgICAgICogcmVzcG9uc2UuICBMaW51eCB0dXJucyB0aGUgZmFpbGVkIElDTVAgcmVzcG9uc2UgaW50byBhbiBlcnJvciBtZXNzYWdlCisgICAgICogYW5kIHJldHVybiB2YWx1ZSwgdW5saWtlIGFsbCBvdGhlciBPUydzLiAgCisgICAgICovCisgICAgaWYgKDAgPT0gbmV0c25tcF9vc19wcmVtYXRjaCgiTGludXgiLCIyLjQiKSkKKyAgICB7CisgICAgICAgIGludCAgICAgICAgICAgICBvbmUgPSAxOworICAgICAgICBERUJVR01TR1RMKCgic29ja2V0Om9wdGlvbiIsICJzZXR0aW5nIHNvY2tldCBvcHRpb24gU09fQlNEQ09NUEFUXG4iKSk7CisgICAgICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0JTRENPTVBBVCwgKHZvaWQgKikgJm9uZSwKKyAgICAgICAgICAgICAgICAgICBzaXplb2Yob25lKSk7CisgICAgfQorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNPX0JTRENPTVBBVCAqLworICAgIC8qCisgICAgICogU09fUkVVU0VBRERSIHdpbGwgYWxsb3cgbXVsdGlwbGUgYXBwcyB0byBvcGVuIHRoZSBzYW1lIHBvcnQgYXQKKyAgICAgKiB0aGUgc2FtZSB0aW1lLiBPbmx5IHRoZSBsYXN0IG9uZSB0byBvcGVuIHRoZSBzb2NrZXQgd2lsbCBnZXQKKyAgICAgKiBkYXRhLiBPYnZpb3VzbHksIGZvciBhbiBhZ2VudCwgdGhpcyBpcyBhIGJhZCB0aGluZy4gVGhlcmUgc2hvdWxkCisgICAgICogb25seSBiZSBvbmUgbGlzdGVuZXIuCisgICAgICovCisjaWZkZWYgQUxMT1dfUE9SVF9ISUpBQ0tJTkcKKyNpZmRlZiAgU09fUkVVU0VBRERSCisgICAgLyoKKyAgICAgKiBBbGxvdyB0aGUgc2FtZSBwb3J0IHRvIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IGZhaWxpbmcuCisgICAgICogICAgKHVzZWZ1bCBmb3IgYSBsaXN0ZW5lcikKKyAgICAgKi8KKyAgICB7CisgICAgICAgIGludCAgICAgICAgICAgICBvbmUgPSAxOworICAgICAgICBERUJVR01TR1RMKCgic29ja2V0Om9wdGlvbiIsICJzZXR0aW5nIHNvY2tldCBvcHRpb24gU09fUkVVU0VBRERSXG4iKSk7CisgICAgICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKHZvaWQgKikgJm9uZSwKKyAgICAgICAgICAgICAgICAgICBzaXplb2Yob25lKSk7CisgICAgfQorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNPX1JFVVNFQUREUiAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFRyeSB0byBzZXQgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycyB0byBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUsIHNvCisgICAgICogdGhhdCB3ZSBjYW4gc2VuZCBhbmQgcmVjZWl2ZSBiaWcgUERVcyAoZGVmYXVsdHMgdG8gODE5MiBieXRlcyAoISkgb24KKyAgICAgKiBTb2xhcmlzLCBmb3IgaW5zdGFuY2UpLiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tIGp1c3QKKyAgICAgKiBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAorICAgICAqLworICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KGZkLCBTT19TTkRCVUYsIGxvY2FsLCAwKTsKKyAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChmZCwgU09fUkNWQlVGLCBsb2NhbCwgMCk7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfSVBfUEtUSU5GTykgfHwgZGVmaW5lZChIQVZFX0lQX1JFQ1ZEU1RBRERSKQorIyBpZiBkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKSAmJiAhZGVmaW5lZChJUF9TRU5EU1JDQUREUikKKyMgIGRlZmluZSBJUF9TRU5EU1JDQUREUiBJUF9SRUNWRFNUQUREUiAvKiBEcmFnb25GbHkgQlNEICovCisjIGVuZGlmCisKKyNkZWZpbmUgbmV0c25tcF91ZHBiYXNlX3JlY3Zmcm9tX3NlbmR0b19kZWZpbmVkCisKK2VudW0geworI2lmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKQorICAgIGNtc2dfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKQorI2VsaWYgZGVmaW5lZChIQVZFX0lQX1JFQ1ZEU1RBRERSKQorICAgIGNtc2dfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKQorI2VuZGlmCit9OworCisjaWZkZWYgV0lOMzIKKyNpZm5kZWYgV1NBSURfV1NBU0VORE1TRworI2RlZmluZSBXU0FJRF9XU0FTRU5ETVNHIFwKKyAgICB7MHhhNDQxZTcxMiwweDc1NGYsMHg0M2NhLHsweDg0LDB4YTcsMHgwZCwweGVlLDB4NDQsMHhjZiwweDYwLDB4NmR9fQordHlwZWRlZiBJTlQgKFdJTkFQSSAqIExQRk5fV1NBU0VORE1TRykoU09DS0VULCBMUFdTQU1TRywgRFdPUkQsIExQRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFdTQU9WRVJMQVBQRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFdTQU9WRVJMQVBQRURfQ09NUExFVElPTl9ST1VUSU5FKTsKKyNlbmRpZgorCitzdGF0aWMgTFBGTl9XU0FSRUNWTVNHIHBmV1NBUmVjdk1zZzsKK3N0YXRpYyBMUEZOX1dTQVNFTkRNU0cgcGZXU0FTZW5kTXNnOworI2VuZGlmCisKK2ludAorbmV0c25tcF91ZHBiYXNlX3JlY3Zmcm9tKGludCBzLCB2b2lkICpidWYsIGludCBsZW4sIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKmZyb21sZW4sIHN0cnVjdCBzb2NrYWRkciAqZHN0aXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpkc3RsZW4sIGludCAqaWZfaW5kZXgpCit7CisgICAgaW50IHI7CisjaWYgIWRlZmluZWQoV0lOMzIpCisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBjaGFyIGNtc2dbQ01TR19TUEFDRShjbXNnX2RhdGFfc2l6ZSldOworICAgIHN0cnVjdCBjbXNnaGRyICpjbTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKworICAgIGlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKyAgICBpb3YuaW92X2xlbiA9IGxlbjsKKworICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YgbXNnKTsKKyAgICBtc2cubXNnX25hbWUgPSBmcm9tOworICAgIG1zZy5tc2dfbmFtZWxlbiA9ICpmcm9tbGVuOworICAgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgICBtc2cubXNnX2lvdmxlbiA9IDE7CisgICAgbXNnLm1zZ19jb250cm9sID0gJmNtc2c7CisgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOworCisgICAgciA9IHJlY3Ztc2cocywgJm1zZywgTVNHX0RPTlRXQUlUKTsKKyNlbHNlIC8qICFkZWZpbmVkKFdJTjMyKSAqLworICAgIFdTQUJVRiB3c2FidWY7CisgICAgY2hhciBjbXNnW1dTQV9DTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKKyAgICBXU0FDTVNHSERSICpjbTsKKyAgICBXU0FNU0cgbXNnOworICAgIERXT1JEIGJ5dGVzX3JlY2VpdmVkOworCisgICAgd3NhYnVmLmJ1ZiA9IGJ1ZjsKKyAgICB3c2FidWYubGVuID0gbGVuOworCisgICAgbXNnLm5hbWUgPSBmcm9tOworICAgIG1zZy5uYW1lbGVuID0gKmZyb21sZW47CisgICAgbXNnLmxwQnVmZmVycyA9ICZ3c2FidWY7CisgICAgbXNnLmR3QnVmZmVyQ291bnQgPSAxOworICAgIG1zZy5Db250cm9sLmxlbiA9IHNpemVvZihjbXNnKTsKKyAgICBtc2cuQ29udHJvbC5idWYgPSBjbXNnOworICAgIG1zZy5kd0ZsYWdzID0gMDsKKworICAgIGlmIChwZldTQVJlY3ZNc2cpIHsKKyAgICAgICAgciA9IHBmV1NBUmVjdk1zZyhzLCAmbXNnLCAmYnl0ZXNfcmVjZWl2ZWQsIE5VTEwsIE5VTEwpID09IDAgPworICAgICAgICAgICAgYnl0ZXNfcmVjZWl2ZWQgOiAtMTsKKyAgICAgICAgKmZyb21sZW4gPSBtc2cubmFtZWxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICByID0gcmVjdmZyb20ocywgYnVmLCBsZW4sIE1TR19ET05UV0FJVCwgZnJvbSwgZnJvbWxlbik7CisgICAgfQorI2VuZGlmIC8qICFkZWZpbmVkKFdJTjMyKSAqLworCisgICAgaWYgKHIgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJ1ZHBiYXNlOnJlY3YiLCAiZ290IHNvdXJjZSBhZGRyOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBpbmV0X250b2EoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmcm9tKS0+c2luX2FkZHIpKSk7CisKKyAgICB7CisgICAgICAgIC8qIEdldCB0aGUgbG9jYWwgcG9ydCBudW1iZXIgZm9yIHVzZSBpbiBkaWFnbm9zdGljIG1lc3NhZ2VzICovCisgICAgICAgIGludCByMiA9IGdldHNvY2tuYW1lKHMsIGRzdGlwLCBkc3RsZW4pOworICAgICAgICBuZXRzbm1wX2Fzc2VydChyMiA9PSAwKTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChXSU4zMikKKyAgICBmb3IgKGNtID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY20gIT0gTlVMTDsgY20gPSBDTVNHX05YVEhEUigmbXNnLCBjbSkpIHsKKyNpZiBkZWZpbmVkKEhBVkVfSVBfUEtUSU5GTykKKyAgICAgICAgaWYgKGNtLT5jbXNnX2xldmVsID09IFNPTF9JUCAmJiBjbS0+Y21zZ190eXBlID09IElQX1BLVElORk8pIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9wa3RpbmZvKiBzcmMgPSAoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY20pOworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoZHN0aXAtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKTsKKyAgICAgICAgICAgICgoc3RydWN0IHNvY2thZGRyX2luKilkc3RpcCktPnNpbl9hZGRyID0gc3JjLT5pcGlfYWRkcjsKKyAgICAgICAgICAgICppZl9pbmRleCA9IHNyYy0+aXBpX2lmaW5kZXg7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidWRwYmFzZTpyZWN2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJnb3QgZGVzdGluYXRpb24gKGxvY2FsKSBhZGRyICVzLCBpZmFjZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYShzcmMtPmlwaV9hZGRyKSwgKmlmX2luZGV4KSk7CisgICAgICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9JUF9SRUNWRFNUQUREUikKKyAgICAgICAgaWYgKGNtLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY20tPmNtc2dfdHlwZSA9PSBJUF9SRUNWRFNUQUREUikgeworICAgICAgICAgICAgc3RydWN0IGluX2FkZHIqIHNyYyA9IChzdHJ1Y3QgaW5fYWRkciAqKUNNU0dfREFUQShjbSk7CisgICAgICAgICAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbiopZHN0aXApLT5zaW5fYWRkciA9ICpzcmM7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAiZ290IGRlc3RpbmF0aW9uIChsb2NhbCkgYWRkciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYSgqc3JjKSkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisjZWxzZSAvKiAhZGVmaW5lZChXSU4zMikgKi8KKyAgICBmb3IgKGNtID0gV1NBX0NNU0dfRklSU1RIRFIoJm1zZyk7IGNtOyBjbSA9IFdTQV9DTVNHX05YVEhEUigmbXNnLCBjbSkpIHsKKyAgICAgICAgaWYgKGNtLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY20tPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKSB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fcGt0aW5mbyogc3JjID0gKHN0cnVjdCBpbl9wa3RpbmZvICopV1NBX0NNU0dfREFUQShjbSk7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChkc3RpcC0+c2FfZmFtaWx5ID09IEFGX0lORVQpOworICAgICAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKWRzdGlwKS0+c2luX2FkZHIgPSBzcmMtPmlwaV9hZGRyOworICAgICAgICAgICAgKmlmX2luZGV4ID0gc3JjLT5pcGlfaWZpbmRleDsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1ZHBiYXNlOnJlY3YiLAorICAgICAgICAgICAgICAgICAgICAgICAgImdvdCBkZXN0aW5hdGlvbiAobG9jYWwpIGFkZHIgJXMsIGlmYWNlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKHNyYy0+aXBpX2FkZHIpLCAqaWZfaW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiAhZGVmaW5lZChXSU4zMikgKi8KKyAgICByZXR1cm4gcjsKK30KKworaW50IG5ldHNubXBfdWRwYmFzZV9zZW5kdG8oaW50IGZkLCBzdHJ1Y3QgaW5fYWRkciAqc3JjaXAsIGludCBpZl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqcmVtb3RlLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworI2lmICFkZWZpbmVkKFdJTjMyKQorICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgc3RydWN0IG1zZ2hkciBtID0geyAwIH07CisgICAgY2hhciAgICAgICAgICBjbXNnW0NNU0dfU1BBQ0UoY21zZ19kYXRhX3NpemUpXTsKKyAgICBpbnQgICAgICAgICAgIHJjOworCisgICAgaW92Lmlvdl9iYXNlID0gZGF0YTsKKyAgICBpb3YuaW92X2xlbiAgPSBsZW47CisKKyAgICBtLm1zZ19uYW1lCQk9IHJlbW90ZTsKKyAgICBtLm1zZ19uYW1lbGVuCT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgbS5tc2dfaW92CQk9ICZpb3Y7CisgICAgbS5tc2dfaW92bGVuCT0gMTsKKyAgICBtLm1zZ19mbGFncwkJPSAwOworCisgICAgaWYgKHNyY2lwICYmIHNyY2lwLT5zX2FkZHIgIT0gSU5BRERSX0FOWSkgeworICAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY207CisKKyAgICAgICAgREVCVUdNU0dUTCgoInVkcGJhc2U6c2VuZHRvIiwgInNlbmRpbmcgZnJvbSAlc1xuIiwgaW5ldF9udG9hKCpzcmNpcCkpKTsKKworICAgICAgICBtZW1zZXQoY21zZywgMCwgc2l6ZW9mKGNtc2cpKTsKKworICAgICAgICBtLm1zZ19jb250cm9sICAgID0gJmNtc2c7CisgICAgICAgIG0ubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisKKyAgICAgICAgY20gPSBDTVNHX0ZJUlNUSERSKCZtKTsKKyAgICAgICAgY20tPmNtc2dfbGVuID0gQ01TR19MRU4oY21zZ19kYXRhX3NpemUpOworCisjaWYgZGVmaW5lZChIQVZFX0lQX1BLVElORk8pCisgICAgICAgIGNtLT5jbXNnX2xldmVsID0gU09MX0lQOworICAgICAgICBjbS0+Y21zZ190eXBlID0gSVBfUEtUSU5GTzsKKworICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fcGt0aW5mbyBpcGk7CisKKyAgICAgICAgICAgIG1lbXNldCgmaXBpLCAwLCBzaXplb2YoaXBpKSk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRXhjZXB0IGluIHRoZSBjYXNlIG9mIHJlc3BvbmRpbmcKKyAgICAgICAgICAgICAqIHRvIGEgYnJvYWRjYXN0LCBzZXR0aW5nIHRoZSBpZmluZGV4CisgICAgICAgICAgICAgKiB3aGVuIHJlc3BvbmRpbmcgcmVzdWx0cyBpbiBpbmNvcnJlY3QKKyAgICAgICAgICAgICAqIGJlaGF2aW9yIG9mIGNoYW5naW5nIHRoZSBzb3VyY2UgYWRkcmVzcworICAgICAgICAgICAgICogdGhhdCB0aGUgbWFuYWdlciBzZWVzIHRoZSByZXNwb25zZQorICAgICAgICAgICAgICogY29tZSBmcm9tLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpcGkuaXBpX2lmaW5kZXggPSAwOworI2lmIGRlZmluZWQoY3lnd2luKQorICAgICAgICAgICAgaXBpLmlwaV9hZGRyLnNfYWRkciA9IHNyY2lwLT5zX2FkZHI7CisjZWxzZQorICAgICAgICAgICAgaXBpLmlwaV9zcGVjX2RzdC5zX2FkZHIgPSBzcmNpcC0+c19hZGRyOworI2VuZGlmCisgICAgICAgICAgICBtZW1jcHkoQ01TR19EQVRBKGNtKSwgJmlwaSwgc2l6ZW9mKGlwaSkpOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBzZW5kbXNnKGZkLCAmbSwgTVNHX05PU0lHTkFMfE1TR19ET05UV0FJVCk7CisgICAgICAgIGlmIChyYyA+PSAwIHx8IGVycm5vICE9IEVJTlZBTCkKKyAgICAgICAgICAgIHJldHVybiByYzsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgZXJyb3IgbWlnaHQgYmUgY2F1c2VkIGJ5IGJyb2FkY2FzdCBzcmNpcCAoaS5lLiB3ZSdyZSByZXNwb25kaW5nCisgICAgICAgICAqIHRvIGEgYnJvYWRjYXN0IHJlcXVlc3QpIC0gc2VuZG1zZyBkb2VzIG5vdCBsaWtlIGl0LiBUcnkgdG8gcmVzZW5kIGl0CisgICAgICAgICAqIHVzaW5nIHRoZSBpbnRlcmZhY2Ugb24gd2hpY2ggaXQgd2FzIHJlY2VpdmVkCisgICAgICAgICAqLworCisgICAgICAgIERFQlVHTVNHVEwoKCJ1ZHBiYXNlOnNlbmR0byIsICJyZS1zZW5kaW5nIG9uIGlmYWNlICVkXG4iLCBpZl9pbmRleCkpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9wa3RpbmZvIGlwaTsKKworICAgICAgICAgICAgbWVtc2V0KCZpcGksIDAsIHNpemVvZihpcGkpKTsKKyAgICAgICAgICAgIGlwaS5pcGlfaWZpbmRleCA9IGlmX2luZGV4OworI2lmIGRlZmluZWQoY3lnd2luKQorICAgICAgICAgICAgaXBpLmlwaV9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisjZWxzZQorICAgICAgICAgICAgaXBpLmlwaV9zcGVjX2RzdC5zX2FkZHIgPSBJTkFERFJfQU5ZOworI2VuZGlmCisgICAgICAgICAgICBtZW1jcHkoQ01TR19EQVRBKGNtKSwgJmlwaSwgc2l6ZW9mKGlwaSkpOworICAgICAgICB9CisjZWxpZiBkZWZpbmVkKElQX1NFTkRTUkNBRERSKQorICAgICAgICBjbS0+Y21zZ19sZXZlbCA9IElQUFJPVE9fSVA7CisgICAgICAgIGNtLT5jbXNnX3R5cGUgPSBJUF9TRU5EU1JDQUREUjsKKyAgICAgICAgbWVtY3B5KChzdHJ1Y3QgaW5fYWRkciAqKUNNU0dfREFUQShjbSksIHNyY2lwLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyNlbmRpZgorICAgICAgICByYyA9IHNlbmRtc2coZmQsICZtLCBNU0dfTk9TSUdOQUx8TVNHX0RPTlRXQUlUKTsKKyAgICAgICAgaWYgKHJjID49IDAgfHwgZXJybm8gIT0gRUlOVkFMKQorICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAgICAgIERFQlVHTVNHVEwoKCJ1ZHBiYXNlOnNlbmR0byIsICJyZS1zZW5kaW5nIHdpdGhvdXQgc291cmNlIGFkZHJlc3NcbiIpKTsKKyAgICAgICAgbS5tc2dfY29udHJvbCA9IE5VTEw7CisgICAgICAgIG0ubXNnX2NvbnRyb2xsZW4gPSAwOworICAgIH0KKworICAgIHJldHVybiBzZW5kbXNnKGZkLCAmbSwgTVNHX05PU0lHTkFMfE1TR19ET05UV0FJVCk7CisjZWxzZSAvKiAhZGVmaW5lZChXSU4zMikgKi8KKyAgICBXU0FCVUYgICAgICAgIHdzYWJ1ZjsKKyAgICBXU0FNU0cgICAgICAgIG07CisgICAgY2hhciAgICAgICAgICBjbXNnW1dTQV9DTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKKyAgICBEV09SRCAgICAgICAgIGJ5dGVzX3NlbnQ7CisgICAgaW50ICAgICAgICAgICByYzsKKworICAgIHdzYWJ1Zi5idWYgPSBkYXRhOworICAgIHdzYWJ1Zi5sZW4gPSBsZW47CisKKyAgICBtZW1zZXQoJm0sIDAsIHNpemVvZihtKSk7CisgICAgbS5uYW1lICAgICAgICAgID0gcmVtb3RlOworICAgIG0ubmFtZWxlbiAgICAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgIG0ubHBCdWZmZXJzICAgICA9ICZ3c2FidWY7CisgICAgbS5kd0J1ZmZlckNvdW50ID0gMTsKKworICAgIGlmIChwZldTQVNlbmRNc2cgJiYgc3JjaXAgJiYgc3JjaXAtPnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7CisgICAgICAgIFdTQUNNU0dIRFIgKmNtOworCisgICAgICAgIERFQlVHTVNHVEwoKCJ1ZHBiYXNlOnNlbmR0byIsICJzZW5kaW5nIGZyb20gWyVkXSAlc1xuIiwgaWZfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYSgqc3JjaXApKSk7CisKKyAgICAgICAgbWVtc2V0KGNtc2csIDAsIHNpemVvZihjbXNnKSk7CisKKyAgICAgICAgbS5Db250cm9sLmJ1ZiA9IGNtc2c7CisgICAgICAgIG0uQ29udHJvbC5sZW4gPSBzaXplb2YoY21zZyk7CisKKyAgICAgICAgY20gPSBXU0FfQ01TR19GSVJTVEhEUigmbSk7CisgICAgICAgIGNtLT5jbXNnX2xlbiA9IFdTQV9DTVNHX0xFTihjbXNnX2RhdGFfc2l6ZSk7CisgICAgICAgIGNtLT5jbXNnX2xldmVsID0gSVBQUk9UT19JUDsKKyAgICAgICAgY20tPmNtc2dfdHlwZSA9IElQX1BLVElORk87CisKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IGluX3BrdGluZm8gaXBpID0geyAwIH07CisgICAgICAgICAgICBpcGkuaXBpX2lmaW5kZXggPSBpZl9pbmRleDsKKyAgICAgICAgICAgIGlwaS5pcGlfYWRkci5zX2FkZHIgPSBzcmNpcC0+c19hZGRyOworICAgICAgICAgICAgbWVtY3B5KFdTQV9DTVNHX0RBVEEoY20pLCAmaXBpLCBzaXplb2YoaXBpKSk7CisgICAgICAgIH0KKworICAgICAgICByYyA9IHBmV1NBU2VuZE1zZyhmZCwgJm0sIDAsICZieXRlc19zZW50LCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKHJjID09IDApCisgICAgICAgICAgICByZXR1cm4gYnl0ZXNfc2VudDsKKyAgICAgICAgREVCVUdNU0dUTCgoInVkcGJhc2U6c2VuZHRvIiwgInNlbmRpbmcgZnJvbSBbJWRdICVzIGZhaWxlZDogJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIGlmX2luZGV4LCBpbmV0X250b2EoKnNyY2lwKSwgV1NBR2V0TGFzdEVycm9yKCkpKTsKKyAgICB9CisgICAgcmMgPSBzZW5kdG8oZmQsIGRhdGEsIGxlbiwgMCwgcmVtb3RlLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisgICAgcmV0dXJuIHJjOworI2VuZGlmIC8qICFkZWZpbmVkKFdJTjMyKSAqLworfQorI2VuZGlmIC8qIEhBVkVfSVBfUEtUSU5GTyB8fCBIQVZFX0lQX1JFQ1ZEU1RBRERSICovCisKKy8qCisgKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKKyAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KKyAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCisgKi8KKworaW50CituZXRzbm1wX3VkcGJhc2VfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICBzb2NrbGVuX3QgICAgICAgZnJvbWxlbiA9IHNpemVvZihuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UpOworICAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgc3RydWN0IHNvY2thZGRyICpmcm9tOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKyAgICAgICAgYWRkcl9wYWlyID0gKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgeworICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1zZXQoYWRkcl9wYWlyLCAwLCBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgICAgICAgICAgZnJvbSA9ICZhZGRyX3BhaXItPnJlbW90ZV9hZGRyLnNhOworICAgICAgICB9CisKKwl3aGlsZSAocmMgPCAwKSB7CisjaWZkZWYgbmV0c25tcF91ZHBiYXNlX3JlY3Zmcm9tX3NlbmR0b19kZWZpbmVkCisgICAgICAgICAgICBzb2NrbGVuX3QgbG9jYWxfYWRkcl9sZW4gPSBzaXplb2YoYWRkcl9wYWlyLT5sb2NhbF9hZGRyKTsKKyAgICAgICAgICAgIHJjID0gbmV0c25tcF91ZHBfcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCBmcm9tLCAmZnJvbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciopJihhZGRyX3BhaXItPmxvY2FsX2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxfYWRkcl9sZW4sICYoYWRkcl9wYWlyLT5pZl9pbmRleCkpOworI2Vsc2UKKyAgICAgICAgICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCBNU0dfRE9OVFdBSVQsIGZyb20sICZmcm9tbGVuKTsKKyNlbmRpZiAvKiBuZXRzbm1wX3VkcGJhc2VfcmVjdmZyb21fc2VuZHRvX2RlZmluZWQgKi8KKwkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCQlicmVhazsKKwkgICAgfQorCX0KKworICAgICAgICBpZiAocmMgPj0gMCkgeworICAgICAgICAgICAgREVCVUdJRigibmV0c25tcF91ZHAiKSB7CisgICAgICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHBfZm10YWRkcigKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgYWRkcl9wYWlyLCBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tIGZkICVkIGdvdCAlZCBieXRlcyAoZnJvbSAlcylcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgcmMsIHN0cikpOworICAgICAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJyZWN2ZnJvbSBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgIH0KKyAgICAgICAgKm9wYXF1ZSA9ICh2b2lkICopYWRkcl9wYWlyOworICAgICAgICAqb2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisKKworaW50CituZXRzbm1wX3VkcGJhc2Vfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIHN0cnVjdCBzb2NrYWRkciAqdG8gPSBOVUxMOworCisgICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgorICAgICAgICAoKCpvbGVuZ3RoID09IHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSB8fAorICAgICAgICAgICgqb2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkpKSkgeworICAgICAgICBhZGRyX3BhaXIgPSAobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqKSAoKm9wYXF1ZSk7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgdC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKSB7CisgICAgICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICopICh0LT5kYXRhKTsKKyAgICB9CisKKyAgICB0byA9ICZhZGRyX3BhaXItPnJlbW90ZV9hZGRyLnNhOworCisgICAgaWYgKHRvICE9IE5VTEwgJiYgdCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBERUJVR0lGKCJuZXRzbm1wX3VkcCIpIHsKKyAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdWRwX2ZtdGFkZHIoTlVMTCwgKHZvaWQgKikgYWRkcl9wYWlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgInNlbmQgJWQgYnl0ZXMgZnJvbSAlcCB0byAlcyBvbiBmZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIGJ1Ziwgc3RyLCB0LT5zb2NrKSk7CisgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgIH0KKwl3aGlsZSAocmMgPCAwKSB7CisjaWZkZWYgbmV0c25tcF91ZHBiYXNlX3JlY3Zmcm9tX3NlbmR0b19kZWZpbmVkCisgICAgICAgICAgICByYyA9IG5ldHNubXBfdWRwX3NlbmR0byh0LT5zb2NrLAorICAgICAgICAgICAgICAgICAgICBhZGRyX3BhaXIgPyAmKGFkZHJfcGFpci0+bG9jYWxfYWRkci5zaW4uc2luX2FkZHIpIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgYWRkcl9wYWlyID8gYWRkcl9wYWlyLT5pZl9pbmRleCA6IDAsIHRvLCBidWYsIHNpemUpOworI2Vsc2UKKyAgICAgICAgICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgdG8sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKyNlbmRpZiAvKiBuZXRzbm1wX3VkcGJhc2VfcmVjdmZyb21fc2VuZHRvX2RlZmluZWQgKi8KKwkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJzZW5kdG8gZXJyb3IsIHJjICVkIChlcnJubyAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIGVycm5vKSk7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQKK25ldHNubXBfdWRwX2Jhc2VfY3Rvcih2b2lkKQoreworI2lmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKQorICAgIFNPQ0tFVCBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOworICAgIEdVSUQgV1NBUmVjdk1zZ0d1aWQgPSBXU0FJRF9XU0FSRUNWTVNHOworICAgIEdVSUQgV1NBU2VuZE1zZ0d1aWQgPSBXU0FJRF9XU0FTRU5ETVNHOworICAgIERXT1JEIG5ieXRlczsKKyAgICBpbnQgcmVzdWx0OworCisgICAgbmV0c25tcF9hc3NlcnQocyAhPSBTT0NLRVRfRVJST1IpOworICAgIC8qIFdTQVJlY3ZNc2coKTogV2luZG93cyBYUCAvIFdpbmRvd3MgU2VydmVyIDIwMDMgYW5kIGxhdGVyICovCisgICAgcmVzdWx0ID0gV1NBSW9jdGwocywgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAmV1NBUmVjdk1zZ0d1aWQsIHNpemVvZihXU0FSZWN2TXNnR3VpZCksCisgICAgICAgICAgICAgICAgICAgICAgJnBmV1NBUmVjdk1zZywgc2l6ZW9mKHBmV1NBUmVjdk1zZyksICZuYnl0ZXMsIE5VTEwsIE5VTEwpOworICAgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKQorICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAiV1NBUmVjdk1zZygpIG5vdCBmb3VuZCAoZXJybm8gJWxkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgV1NBR2V0TGFzdEVycm9yKCkpKTsKKworICAgIC8qIFdTQVNlbmRNc2coKTogV2luZG93cyBWaXN0YSAvIFdpbmRvd3MgU2VydmVyIDIwMDggYW5kIGxhdGVyICovCisgICAgcmVzdWx0ID0gV1NBSW9jdGwocywgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAmV1NBU2VuZE1zZ0d1aWQsIHNpemVvZihXU0FTZW5kTXNnR3VpZCksCisgICAgICAgICAgICAgICAgICAgICAgJnBmV1NBU2VuZE1zZywgc2l6ZW9mKHBmV1NBU2VuZE1zZyksICZuYnl0ZXMsIE5VTEwsIE5VTEwpOworICAgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKQorICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAiV1NBU2VuZE1zZygpIG5vdCBmb3VuZCAoZXJybm8gJWxkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgV1NBR2V0TGFzdEVycm9yKCkpKTsKKworICAgIGNsb3Nlc29ja2V0KHMpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFiZDhjCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYwpAQCAtMCwwICsxLDUxNyBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IENvcHlyaWdodCAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oPgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVUlPX0gKKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUJLTEKKyNlbmRpZgorCisjaWZuZGVmIElORVRfQUREUlNUUkxFTgorI2RlZmluZSBJTkVUX0FERFJTVFJMRU4gMTYKKyNlbmRpZgorCitzdGF0aWMgbmV0c25tcF90ZG9tYWluIHVkcERvbWFpbjsKKworLyoKKyAqIG5lZWRzIHRvIGJlIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgaW4gc25tcGxpYi9zbm1wVENQRG9tYWluLmMgCisgKiBhbmQgcGVybC9hZ2VudC9hZ2VudC54cyAKKyAqLwordHlwZWRlZiBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyIG5ldHNubXBfdWRwX2FkZHJfcGFpcjsKKworLyoKKyAqIG5vdCBzdGF0aWMsIHNpbmNlIHNubXBVRFBJUHY2RG9tYWluIG5lZWRzIGl0LCBidXQgbm90IHB1YmxpYywgZWl0aGVyLgorICogKGllIGRvbid0IHB1dCBpdCBpbiBhIHB1YmxpYyBoZWFkZXIuKQorICovCit2b2lkIF9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldChpbnQgZmQsIGludCBzZXJ2ZXIpOworaW50CituZXRzbm1wX3NvY2thZGRyX2luMihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCk7CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgorICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKKyAqLworCitjaGFyICoKK25ldHNubXBfdWRwX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgcmV0dXJuIG5ldHNubXBfaXB2NF9mbXRhZGRyKCJVRFAiLCB0LCBkYXRhLCBsZW4pOworfQorCisKKyNpZiBkZWZpbmVkKEhBVkVfSVBfUEtUSU5GTykgfHwgZGVmaW5lZChIQVZFX0lQX1JFQ1ZEU1RBRERSKQorCitpbnQgbmV0c25tcF91ZHBfcmVjdmZyb20oaW50IHMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHNvY2thZGRyICpmcm9tLCBzb2NrbGVuX3QgKmZyb21sZW4sIHN0cnVjdCBzb2NrYWRkciAqZHN0aXAsIHNvY2tsZW5fdCAqZHN0bGVuLCBpbnQgKmlmX2luZGV4KQoreworICAgIC8qKiB1ZHBpdjQganVzdCBjYWxscyB1ZHBiYXNlLiBzaG91bGQgd2Ugc2tpcCBkaXJlY3RseSB0byB0aGVyZT8gKi8KKyAgICByZXR1cm4gbmV0c25tcF91ZHBpcHY0X3JlY3Zmcm9tKHMsIGJ1ZiwgbGVuLCBmcm9tLCBmcm9tbGVuLCBkc3RpcCwgZHN0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfaW5kZXgpOworfQorCitpbnQgbmV0c25tcF91ZHBfc2VuZHRvKGludCBmZCwgc3RydWN0IGluX2FkZHIgKnNyY2lwLCBpbnQgaWZfaW5kZXgsIHN0cnVjdCBzb2NrYWRkciAqcmVtb3RlLAorICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgLyoqIHVkcGl2NCBqdXN0IGNhbGxzIHVkcGJhc2UuIHNob3VsZCB3ZSBza2lwIGRpcmVjdGx5IHRvIHRoZXJlPyAqLworICAgIHJldHVybiBuZXRzbm1wX3VkcGlwdjRfc2VuZHRvKGZkLCBzcmNpcCwgaWZfaW5kZXgsIHJlbW90ZSwgZGF0YSwgbGVuKTsKK30KKyNlbmRpZiAvKiBIQVZFX0lQX1BLVElORk8gfHwgSEFWRV9JUF9SRUNWRFNUQUREUiAqLworCisvKgorICogT3BlbiBhIFVEUC1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCisgKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKKyAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdWRwX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGludCBsb2NhbCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisKKyAgICB0ID0gbmV0c25tcF91ZHBpcHY0YmFzZV90cmFuc3BvcnQoYWRkciwgbG9jYWwpOworICAgIGlmIChOVUxMID09IHQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZXQgRG9tYWluCisgICAgICovCisKKyAgICB0LT5kb21haW4gPSBuZXRzbm1wVURQRG9tYWluOworICAgIHQtPmRvbWFpbl9sZW5ndGggPSBuZXRzbm1wVURQRG9tYWluX2xlbjsKKworICAgIC8qCisgICAgICogMTYtYml0IGxlbmd0aCBmaWVsZCwgOCBieXRlIFVEUCBoZWFkZXIsIDIwIGJ5dGUgSVB2NCBoZWFkZXIgIAorICAgICAqLworCisgICAgdC0+bXNnTWF4U2l6ZSA9IDB4ZmZmZiAtIDggLSAyMDsKKyAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF91ZHBiYXNlX3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfdWRwYmFzZV9zZW5kOworICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2U7CisgICAgdC0+Zl9hY2NlcHQgICA9IE5VTEw7CisgICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfdWRwX2ZtdGFkZHI7CisKKyAgICByZXR1cm4gdDsKK30KKworI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQorLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHByb3ZpZGUgdGhlICJjb20yc2VjIiBjb25maWd1cmF0aW9uIHRva2VuCisgKiBmdW5jdGlvbmFsaXR5IGZvciBjb21wYXRpYmlsaXR5LgorICovCisKKyNkZWZpbmUgRVhBTVBMRV9ORVRXT1JLCQkiTkVUV09SSyIKKyNkZWZpbmUgRVhBTVBMRV9DT01NVU5JVFkJIkNPTU1VTklUWSIKKwordHlwZWRlZiBzdHJ1Y3QgY29tMlNlY0VudHJ5X3MgeworICAgIGNvbnN0IGNoYXIgKnNlY05hbWU7CisgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWU7CisgICAgc3RydWN0IGNvbTJTZWNFbnRyeV9zICpuZXh0OworICAgIGluX2FkZHJfdCAgIG5ldHdvcms7CisgICAgaW5fYWRkcl90ICAgbWFzazsKKyAgICBjb25zdCBjaGFyICBjb21tdW5pdHlbMV07Cit9IGNvbTJTZWNFbnRyeTsKKworc3RhdGljIGNvbTJTZWNFbnRyeSAgICpjb20yU2VjTGlzdCA9IE5VTEwsICpjb20yU2VjTGlzdExhc3QgPSBOVUxMOworCit2b2lkCituZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqcGFyYW0pCit7CisgICAgY2hhciAgICAgICAgICAgIHNlY05hbWVbVkFDTVNUUklOR0xFTiArIDFdOworICAgIHNpemVfdCAgICAgICAgICBzZWNOYW1lTGVuOworICAgIGNoYXIgICAgICAgICAgICBjb250ZXh0TmFtZVtWQUNNU1RSSU5HTEVOICsgMV07CisgICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHROYW1lTGVuOworICAgIGNoYXIgICAgICAgICAgICBjb21tdW5pdHlbQ09NTVVOSVRZX01BWF9MRU4gKyAxXTsKKyAgICBzaXplX3QgICAgICAgICAgY29tbXVuaXR5TGVuOworICAgIGNoYXIgICAgICAgICAgICBzb3VyY2VbMjcwXTsgLyogZG5zLW5hbWUoMjUzKSsvKDEpK21hc2soMTUpK1wwKDEpICovCisgICAgc3RydWN0IGluX2FkZHIgIG5ldHdvcmssIG1hc2s7CisKKyAgICAvKgorICAgICAqIEdldCBzZWN1cml0eSwgc291cmNlIGFkZHJlc3MvbmV0bWFzayBhbmQgY29tbXVuaXR5IHN0cmluZ3MuCisgICAgICovCisKKyAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOworICAgIGlmIChzdHJjbXAoc2VjTmFtZSwgIi1DbiIpID09IDApIHsKKyAgICAgICAgaWYgKCFwYXJhbSkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT05URVhUX05BTUUgcGFyYW1ldGVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgY29udGV4dE5hbWUsIHNpemVvZihjb250ZXh0TmFtZSkpOworICAgICAgICBjb250ZXh0TmFtZUxlbiA9IHN0cmxlbihjb250ZXh0TmFtZSkgKyAxOworICAgICAgICBpZiAoY29udGV4dE5hbWVMZW4gPiBWQUNNU1RSSU5HTEVOKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb250ZXh0IG5hbWUgdG9vIGxvbmciKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBhcmFtKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIE5BTUUgcGFyYW1ldGVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb250ZXh0TmFtZUxlbiA9IDA7CisgICAgfQorCisgICAgc2VjTmFtZUxlbiA9IHN0cmxlbihzZWNOYW1lKSArIDE7CisgICAgaWYgKHNlY05hbWVMZW4gPT0gMSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJlbXB0eSBOQU1FIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChzZWNOYW1lTGVuID4gVkFDTVNUUklOR0xFTikgeworICAgICAgICBjb25maWdfcGVycm9yKCJzZWN1cml0eSBuYW1lIHRvbyBsb25nIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXBhcmFtKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgU09VUkNFIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIHNvdXJjZSwgc2l6ZW9mKHNvdXJjZSkpOworICAgIGlmIChzb3VyY2VbMF0gPT0gJ1wwJykgeworICAgICAgICBjb25maWdfcGVycm9yKCJlbXB0eSBTT1VSQ0UgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cm5jbXAoc291cmNlLCBFWEFNUExFX05FVFdPUkssIHN0cmxlbihFWEFNUExFX05FVFdPUkspKSA9PSAwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIE5FVFdPUksgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgY29tbXVuaXR5LCBzaXplb2YoY29tbXVuaXR5KSk7CisgICAgaWYgKGNvbW11bml0eVswXSA9PSAnXDAnKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImVtcHR5IENPTU1VTklUWSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb21tdW5pdHlMZW4gPSBzdHJsZW4oY29tbXVuaXR5KSArIDE7CisgICAgaWYgKGNvbW11bml0eUxlbiA+PSBDT01NVU5JVFlfTUFYX0xFTikgeworICAgICAgICBjb25maWdfcGVycm9yKCJjb21tdW5pdHkgbmFtZSB0b28gbG9uZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjb21tdW5pdHlMZW4gPT0gc2l6ZW9mKEVYQU1QTEVfQ09NTVVOSVRZKSAmJgorICAgICAgICBtZW1jbXAoY29tbXVuaXR5LCBFWEFNUExFX0NPTU1VTklUWSwgc2l6ZW9mKEVYQU1QTEVfQ09NTVVOSVRZKSkgPT0gMCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIERlYWwgd2l0aCB0aGUgImRlZmF1bHQiIGNhc2UgZmlyc3QuICovCisgICAgaWYgKHN0cmNtcChzb3VyY2UsICJkZWZhdWx0IikgPT0gMCkgeworICAgICAgICBuZXR3b3JrLnNfYWRkciA9IDA7CisgICAgICAgIG1hc2suc19hZGRyID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBTcGxpdCB0aGUgc291cmNlL25ldG1hc2sgcGFydHMgKi8KKyAgICAgICAgY2hhciAqc3RybWFzayA9IHN0cmNocihzb3VyY2UsICcvJyk7CisgICAgICAgIGlmIChzdHJtYXNrICE9IE5VTEwpCisgICAgICAgICAgICAvKiBNYXNrIGdpdmVuLiAqLworICAgICAgICAgICAgKnN0cm1hc2srKyA9ICdcMCc7CisKKyAgICAgICAgLyogVHJ5IGludGVycHJldGluZyBhcyBhIGRvdHRlZCBxdWFkLiAqLworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIHNvdXJjZSwgJm5ldHdvcmspID09IDApIHsKKyAgICAgICAgICAgIC8qIE5vcGUsIHdhc24ndCBhIGRvdHRlZCBxdWFkLiAgTXVzdCBiZSBhIGhvc3RuYW1lLiAqLworICAgICAgICAgICAgaW50IHJldCA9IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZV92NChzb3VyY2UsICZuZXR3b3JrLnNfYWRkcik7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNhbm5vdCByZXNvbHZlIHNvdXJjZSBob3N0bmFtZSIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIE5vdyB3b3JrIG91dCB0aGUgbWFzay4gKi8KKyAgICAgICAgaWYgKHN0cm1hc2sgPT0gTlVMTCB8fCAqc3RybWFzayA9PSAnXDAnKSB7CisgICAgICAgICAgICAvKiBObyBtYXNrIHdhcyBnaXZlbi4gQXNzdW1lIC8zMiAqLworICAgICAgICAgICAgbWFzay5zX2FkZHIgPSAoaW5fYWRkcl90KSh+MFVMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFRyeSB0byBpbnRlcnByZXQgbWFzayBhcyBhICJudW1iZXIgb2YgMSBiaXRzIi4gKi8KKyAgICAgICAgICAgIGNoYXIqIGNwOworICAgICAgICAgICAgbG9uZyBtYXNrTGVuID0gc3RydG9sKHN0cm1hc2ssICZjcCwgMTApOworICAgICAgICAgICAgaWYgKCpjcCA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgaWYgKDAgPCBtYXNrTGVuICYmIG1hc2tMZW4gPD0gMzIpCisgICAgICAgICAgICAgICAgICAgIG1hc2suc19hZGRyID0gaHRvbmwoKGluX2FkZHJfdCkofjBVTCA8PCAoMzIgLSBtYXNrTGVuKSkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hc2tMZW4gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgbWFzay5zX2FkZHIgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgbWFzayBsZW5ndGgiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFRyeSB0byBpbnRlcnByZXQgbWFzayBhcyBhIGRvdHRlZCBxdWFkLiAqLworICAgICAgICAgICAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIHN0cm1hc2ssICZtYXNrKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiYmFkIG1hc2siKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIG5ldHdvcmsgYW5kIG1hc2sgYXJlIGNvbnNpc3RlbnQuICovCisgICAgICAgICAgICBpZiAobmV0d29yay5zX2FkZHIgJiB+bWFzay5zX2FkZHIpIHsKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJzb3VyY2UvbWFzayBtaXNtYXRjaCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgdm9pZCogdiA9IG1hbGxvYyhvZmZzZXRvZihjb20yU2VjRW50cnksIGNvbW11bml0eSkgKyBjb21tdW5pdHlMZW4gKworICAgICAgICAgICAgICAgICAgICAgICAgIHNlY05hbWVMZW4gKyBjb250ZXh0TmFtZUxlbik7CisKKyAgICAgICAgY29tMlNlY0VudHJ5KiBlID0gKGNvbTJTZWNFbnRyeSopdjsKKyAgICAgICAgY2hhciogbGFzdCA9ICgoY2hhciopdikgKyBvZmZzZXRvZihjb20yU2VjRW50cnksIGNvbW11bml0eSk7CisKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWVtb3J5IGVycm9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBFdmVyeXRoaW5nIGlzIG9rYXkuICBDb3B5IHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkCisgICAgICAgICAqIGFib3ZlIGFuZCBhZGQgaXQgdG8gRU5EIG9mIHRoZSBsaXN0LgorICAgICAgICAgKi8KKworICAgICAgICB7CisgICAgICAgICAgY2hhciBidWYxW0lORVRfQUREUlNUUkxFTl07CisgICAgICAgICAgY2hhciBidWYyW0lORVRfQUREUlNUUkxFTl07CisgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAiPFwiJXNcIiwgJXMvJXM+ID0+IFwiJXNcIlxuIiwgY29tbXVuaXR5LAorICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmbmV0d29yaywgYnVmMSwgc2l6ZW9mKGJ1ZjEpKSwKKyAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVCwgJm1hc2ssIGJ1ZjIsIHNpemVvZihidWYyKSksCisgICAgICAgICAgICAgICAgICAgICAgc2VjTmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KGxhc3QsIGNvbW11bml0eSwgY29tbXVuaXR5TGVuKTsKKyAgICAgICAgbGFzdCArPSBjb21tdW5pdHlMZW47CisgICAgICAgIG1lbWNweShsYXN0LCBzZWNOYW1lLCBzZWNOYW1lTGVuKTsKKyAgICAgICAgZS0+c2VjTmFtZSA9IGxhc3Q7CisgICAgICAgIGxhc3QgKz0gc2VjTmFtZUxlbjsKKyAgICAgICAgaWYgKGNvbnRleHROYW1lTGVuKSB7CisgICAgICAgICAgICBtZW1jcHkobGFzdCwgY29udGV4dE5hbWUsIGNvbnRleHROYW1lTGVuKTsKKyAgICAgICAgICAgIGUtPmNvbnRleHROYW1lID0gbGFzdDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlLT5jb250ZXh0TmFtZSA9IGxhc3QgLSAxOworICAgICAgICBlLT5uZXR3b3JrID0gbmV0d29yay5zX2FkZHI7CisgICAgICAgIGUtPm1hc2sgPSBtYXNrLnNfYWRkcjsKKyAgICAgICAgZS0+bmV4dCA9IE5VTEw7CisKKyAgICAgICAgaWYgKGNvbTJTZWNMaXN0TGFzdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBjb20yU2VjTGlzdExhc3QtPm5leHQgPSBlOworICAgICAgICAgICAgY29tMlNlY0xpc3RMYXN0ID0gZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbTJTZWNMaXN0TGFzdCA9IGNvbTJTZWNMaXN0ID0gZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZAorbmV0c25tcF91ZHBfY29tMlNlY0xpc3RfZnJlZSh2b2lkKQoreworICAgIGNvbTJTZWNFbnRyeSAgICplID0gY29tMlNlY0xpc3Q7CisgICAgd2hpbGUgKGUgIT0gTlVMTCkgeworICAgICAgICBjb20yU2VjRW50cnkgICAqdG1wID0gZTsKKyAgICAgICAgZSA9IGUtPm5leHQ7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICB9CisgICAgY29tMlNlY0xpc3QgPSBjb20yU2VjTGlzdExhc3QgPSBOVUxMOworfQorI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCisKK3ZvaWQKK25ldHNubXBfdWRwX2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKKyAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImNvbTJzZWMiLCBuZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF91ZHBfY29tMlNlY0xpc3RfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlstQ24gQ09OVEVYVF0gc2VjTmFtZSBJUHY0LW5ldHdvcmstYWRkcmVzc1svbmV0bWFza10gY29tbXVuaXR5Iik7CisjZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KK30KKworCisKKy8qCisgKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgbm8gY29tMnNlYyBlbnRyaWVzLCBvciByZXR1cm4gMSBpZiB0aGVyZSBBUkUgY29tMnNlYworICogZW50cmllcy4gIE9uIHJldHVybiwgaWYgYSBjb20yc2VjIGVudHJ5IG1hdGNoZWQgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLAorICogdGhlbiAqc2VjTmFtZSBwb2ludHMgYXQgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IG5hbWUsIG9yIGlzIE5VTEwgaWYgdGhlCisgKiBwYXJhbWV0ZXJzIGRpZCBub3QgbWF0Y2ggYW55IGNvbTJzZWMgZW50cnkuCisgKi8KKworI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQoraW50CituZXRzbm1wX3VkcF9nZXRTZWNOYW1lKHZvaWQgKm9wYXF1ZSwgaW50IG9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbW11bml0eV9sZW4sIGNvbnN0IGNoYXIgKipzZWNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqY29udGV4dE5hbWUpCit7CisgICAgY29uc3QgY29tMlNlY0VudHJ5ICpjOworICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSBvcGFxdWU7CisgICAgc3RydWN0IHNvY2thZGRyX2luICpmcm9tID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOworICAgIGNoYXIgICAgICAgICAgICp6dGNvbW11bml0eSA9IE5VTEw7CisKKyAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7CisgICAgICAgICpzZWNOYW1lID0gTlVMTDsgIC8qIEhhdmVuJ3QgZm91bmQgYW55dGhpbmcgeWV0ICovCisgICAgfQorCisgICAgLyoKKyAgICAgKiBTcGVjaWFsIGNhc2UgaWYgdGhlcmUgYXJlIE5PIGVudHJpZXMgKGFzIG9wcG9zZWQgdG8gbm8gTUFUQ0hJTkcKKyAgICAgKiBlbnRyaWVzKS4KKyAgICAgKi8KKworICAgIGlmIChjb20yU2VjTGlzdCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwgIm5vIGNvbTJzZWMgZW50cmllc1xuIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIG5vIElQdjQgc291cmNlIGFkZHJlc3MsIHRoZW4gdGhlcmUgY2FuIGJlIG5vIHZhbGlkIHNlY3VyaXR5CisgICAgICogbmFtZS4KKyAgICAgKi8KKworICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAib3BhcXVlID0gJXAgKGxlbiA9ICVkKSwgc2l6ZW9mID0gJWQsIGZhbWlseSA9ICVkICglZClcbiIsCisgICBvcGFxdWUsIG9sZW5ndGgsIChpbnQpc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpciksIGZyb20tPnNpbl9mYW1pbHksIEFGX0lORVQpKTsKKyAgICBpZiAob3BhcXVlID09IE5VTEwgfHwgb2xlbmd0aCAhPSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSB8fAorICAgICAgICBmcm9tLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLAorCQkgICAgIm5vIElQdjQgc291cmNlIGFkZHJlc3MgaW4gUERVP1xuIikpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBERUJVR0lGKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIikgeworCXp0Y29tbXVuaXR5ID0gKGNoYXIgKiltYWxsb2MoY29tbXVuaXR5X2xlbiArIDEpOworCWlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7CisJICAgIG1lbWNweSh6dGNvbW11bml0eSwgY29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKTsKKwkgICAgenRjb21tdW5pdHlbY29tbXVuaXR5X2xlbl0gPSAnXDAnOworCX0KKworCURFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwgInJlc29sdmUgPFwiJXNcIiwgMHglMDhseD5cbiIsCisJCSAgICB6dGNvbW11bml0eSA/IHp0Y29tbXVuaXR5IDogIjxtYWxsb2MgZXJyb3I+IiwKKwkJICAgICh1bnNpZ25lZCBsb25nKShmcm9tLT5zaW5fYWRkci5zX2FkZHIpKSk7CisgICAgfQorCisgICAgZm9yIChjID0gY29tMlNlY0xpc3Q7IGMgIT0gTlVMTDsgYyA9IGMtPm5leHQpIHsKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBidWYxW0lORVRfQUREUlNUUkxFTl07CisgICAgICAgICAgICBjaGFyIGJ1ZjJbSU5FVF9BRERSU1RSTEVOXTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwiY29tcGFyZSA8XCIlc1wiLCAlcy8lcz4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y29tbXVuaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQsICZjLT5uZXR3b3JrLCBidWYxLCBzaXplb2YoYnVmMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQsICZjLT5tYXNrLCBidWYyLCBzaXplb2YoYnVmMikpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChjb21tdW5pdHlfbGVuID09IHN0cmxlbihjLT5jb21tdW5pdHkpKSAmJgorCSAgICAobWVtY21wKGNvbW11bml0eSwgYy0+Y29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKSA9PSAwKSAmJgorICAgICAgICAgICAgKChmcm9tLT5zaW5fYWRkci5zX2FkZHIgJiBjLT5tYXNrKSA9PSBjLT5uZXR3b3JrKSkgeworICAgICAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwgIi4uLiBTVUNDRVNTXG4iKSk7CisgICAgICAgICAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKnNlY05hbWUgPSBjLT5zZWNOYW1lOworICAgICAgICAgICAgICAgICpjb250ZXh0TmFtZSA9IGMtPmNvbnRleHROYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwgIi4uLiBub3BlXG4iKSk7CisgICAgfQorICAgIGlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7CisgICAgICAgIGZyZWUoenRjb21tdW5pdHkpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdWRwX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAorCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisKKyAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pbjIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7CisgICAgICAgIHJldHVybiBuZXRzbm1wX3VkcF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91ZHBfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisKKyAgICBpZiAob19sZW4gPT0gNikgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0dG1wID0gKG9bNF0gPDwgOCkgKyBvWzVdOworICAgICAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpbl9hZGRyLnNfYWRkciksIG8sIDQpOworICAgICAgICBhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydHRtcCk7CisgICAgICAgIHJldHVybiBuZXRzbm1wX3VkcF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwordm9pZAorbmV0c25tcF91ZHBfY3Rvcih2b2lkKQoreworICAgIHVkcERvbWFpbi5uYW1lID0gbmV0c25tcFVEUERvbWFpbjsKKyAgICB1ZHBEb21haW4ubmFtZV9sZW5ndGggPSBuZXRzbm1wVURQRG9tYWluX2xlbjsKKyAgICB1ZHBEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOworICAgIHVkcERvbWFpbi5wcmVmaXhbMF0gPSAidWRwIjsKKworICAgIHVkcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICB1ZHBEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfdWRwX2NyZWF0ZV90c3RyaW5nOworICAgIHVkcERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF91ZHBfY3JlYXRlX29zdHJpbmc7CisKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnVkcERvbWFpbik7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwZmIwNQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYwpAQCAtMCwwICsxLDIyMSBAQAorLyogSVBWNCBiYXNlIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaD4KKworI2lmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKSB8fCBkZWZpbmVkKEhBVkVfSVBfUkVDVkRTVEFERFIpCitpbnQgbmV0c25tcF91ZHBpcHY0X3JlY3Zmcm9tKGludCBzLCB2b2lkICpidWYsIGludCBsZW4sIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpmcm9tbGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdGlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKmRzdGxlbiwgaW50ICppZl9pbmRleCkKK3sKKyAgICByZXR1cm4gbmV0c25tcF91ZHBiYXNlX3JlY3Zmcm9tKHMsIGJ1ZiwgbGVuLCBmcm9tLCBmcm9tbGVuLCBkc3RpcCwgZHN0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfaW5kZXgpOworfQorCitpbnQgbmV0c25tcF91ZHBpcHY0X3NlbmR0byhpbnQgZmQsIHN0cnVjdCBpbl9hZGRyICpzcmNpcCwgaW50IGlmX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpyZW1vdGUsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgcmV0dXJuIG5ldHNubXBfdWRwYmFzZV9zZW5kdG8oZmQsIHNyY2lwLCBpZl9pbmRleCwgcmVtb3RlLCBkYXRhLCBsZW4pOworfQorI2VuZGlmIC8qIEhBVkVfSVBfUEtUSU5GTyB8fCBIQVZFX0lQX1JFQ1ZEU1RBRERSICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdWRwaXB2NGJhc2VfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAwLCByYzI7CisgICAgY2hhciAgICAgICAgICAgKmNsaWVudF9zb2NrZXQgPSBOVUxMOworICAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgYWRkcl9wYWlyOworICAgIHNvY2tsZW5fdCAgICAgICBsb2NhbF9hZGRyX2xlbjsKKworI2lmZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICBpZiAobG9jYWwpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKworICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1lbXNldCgmYWRkcl9wYWlyLCAwLCBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgIG1lbWNweSgmKGFkZHJfcGFpci5yZW1vdGVfYWRkciksIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4odCAhPSBOVUxMLCBOVUxMKTsKKworICAgIERFQlVHSUYoIm5ldHNubXBfdWRwYmFzZSIpIHsKKyAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHBfZm10YWRkcihOVUxMLCAodm9pZCAqKSZhZGRyX3BhaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwYmFzZSIsICJvcGVuICVzICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwgc3RyKSk7CisgICAgICAgIGZyZWUoc3RyKTsKKyAgICB9CisKKyAgICB0LT5zb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIDApOworICAgIERFQlVHTVNHVEwoKCJVRFBCYXNlIiwgIm9wZW5uZWQgc29ja2V0ICVkIGFzIGxvY2FsPSVkXG4iLCB0LT5zb2NrLCBsb2NhbCkpOyAKKyAgICBpZiAodC0+c29jayA8IDApIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KHQtPnNvY2ssIGxvY2FsKTsKKworICAgIGlmIChsb2NhbCkgeworI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCBvbiB0byB0aGUKKyAgICAgICAgICogZ2l2ZW4gSVAgYWRkcmVzcywgd2hpY2ggbWF5IGluY2x1ZGUgYW4gaW50ZXJmYWNlIGFkZHJlc3MsIG9yIGNvdWxkCisgICAgICAgICAqIGJlIElOQUREUl9BTlksIGJ1dCBjZXJ0YWlubHkgaW5jbHVkZXMgYSBwb3J0IG51bWJlci4KKyAgICAgICAgICovCisKKyAgICAgICAgdC0+bG9jYWwgPSAodV9jaGFyICopIG1hbGxvYyg2KTsKKyAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodC0+bG9jYWwsICh1X2NoYXIgKikgJiAoYWRkci0+c2luX2FkZHIuc19hZGRyKSwgNCk7CisgICAgICAgIHQtPmxvY2FsWzRdID0gKG50b2hzKGFkZHItPnNpbl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKKyAgICAgICAgdC0+bG9jYWxbNV0gPSAobnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSA2OworCisjaWZuZGVmIFdJTjMyCisjaWYgZGVmaW5lZChIQVZFX0lQX1BLVElORk8pCisgICAgICAgIHsgCisgICAgICAgICAgICBpbnQgc29ja29wdCA9IDE7CisgICAgICAgICAgICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBTT0xfSVAsIElQX1BLVElORk8sICZzb2Nrb3B0LCBzaXplb2Ygc29ja29wdCkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBiYXNlIiwgImNvdWxkbid0IHNldCBJUF9QS1RJTkZPOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcGJhc2UiLCAic2V0IElQX1BLVElORk9cbiIpKTsKKyAgICAgICAgfQorI2VsaWYgZGVmaW5lZChIQVZFX0lQX1JFQ1ZEU1RBRERSKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc29ja29wdCA9IDE7CisgICAgICAgICAgICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBJUFBST1RPX0lQLCBJUF9SRUNWRFNUQUREUiwgJnNvY2tvcHQsIHNpemVvZiBzb2Nrb3B0KSA9PSAtMSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJjb3VsZG4ndCBzZXQgSVBfUkVDVkRTVEFERFI6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAic2V0IElQX1JFQ1ZEU1RBRERSXG4iKSk7CisgICAgICAgIH0KKyNlbmRpZgorI2Vsc2UgLyogIWRlZmluZWQoV0lOMzIpICovCisgICAgICAgIHsgCisgICAgICAgICAgICBpbnQgc29ja29wdCA9IDE7CisgICAgICAgICAgICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBJUFBST1RPX0lQLCBJUF9QS1RJTkZPLCAodm9pZCAqKSZzb2Nrb3B0LAorCQkJICAgc2l6ZW9mKHNvY2tvcHQpKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcGJhc2UiLCAiY291bGRuJ3Qgc2V0IElQX1BLVElORk86ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTQUdldExhc3RFcnJvcigpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcGJhc2UiLCAic2V0IElQX1BLVElORk9cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qICFkZWZpbmVkKFdJTjMyKSAqLworICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAorICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHQtPmRhdGEgPSBOVUxMOworICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IDA7CisjZWxzZSAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICB9IGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50IHNlc3Npb24uICBJZiB3ZSd2ZSBiZWVuIGdpdmVuIGEKKyAgICAgICAgICogY2xpZW50IGFkZHJlc3MgdG8gc2VuZCBmcm9tLCB0aGVuIGJpbmQgdG8gdGhhdC4KKyAgICAgICAgICogT3RoZXJ3aXNlIHRoZSBzZW5kIHdpbGwgdXNlICJzb21ldGhpbmcgc2Vuc2libGUiLgorICAgICAgICAgKi8KKyAgICAgICAgY2xpZW50X3NvY2tldCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIpOworICAgICAgICBpZiAoY2xpZW50X3NvY2tldCkgeworICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudF9hZGRyOworICAgICAgICAgICAgbmV0c25tcF9zb2NrYWRkcl9pbjIoJmNsaWVudF9hZGRyLCBjbGllbnRfc29ja2V0LCBOVUxMKTsKKyAgICAgICAgICAgIGNsaWVudF9hZGRyLnNpbl9wb3J0ID0gMDsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcGJhc2UiLCAiYmluZGluZyBzb2NrZXQ6ICVkXG4iLCB0LT5zb2NrKSk7CisgICAgICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZjbGllbnRfYWRkciwKKyAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKyAgICAgICAgICAgIGlmICggcmMgIT0gMCApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBiYXNlIiwgImZhaWxlZCB0byBiaW5kIGZvciBjbGllbnRhZGRyOiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2NhbF9hZGRyX2xlbiA9IHNpemVvZihhZGRyX3BhaXIubG9jYWxfYWRkcik7CisgICAgICAgICAgICByYzIgPSBnZXRzb2NrbmFtZSh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyKikmYWRkcl9wYWlyLmxvY2FsX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxfYWRkcl9sZW4pOworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQocmMyID09IDApOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdJRigibmV0c25tcF91ZHBiYXNlIikgeworICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHBfZm10YWRkcihOVUxMLCAodm9pZCAqKSZhZGRyX3BhaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBiYXNlIiwgImNsaWVudCBvcGVuICVzXG4iLCBzdHIpKTsKKyAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNhdmUgdGhlIChyZW1vdGUpIGFkZHJlc3MgaW4gdGhlCisgICAgICAgICAqIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhIHBvaW50ZXIgZm9yIGxhdGVyIHVzZSBieSBuZXRzbm1wX3VkcF9zZW5kLgorICAgICAgICAgKi8KKworICAgICAgICB0LT5kYXRhID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgIHQtPnJlbW90ZSA9ICh1X2NoYXIgKiltYWxsb2MoNik7CisgICAgICAgIGlmICh0LT5kYXRhID09IE5VTEwgfHwgdC0+cmVtb3RlID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCAodV9jaGFyICopICYgKGFkZHItPnNpbl9hZGRyLnNfYWRkciksIDQpOworICAgICAgICB0LT5yZW1vdGVbNF0gPSAobnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5yZW1vdGVbNV0gPSAobnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gNjsKKyAgICAgICAgbWVtY3B5KHQtPmRhdGEsICZhZGRyX3BhaXIsIHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpOworICAgIH0KKworICAgIHJldHVybiB0OworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGRlODc2Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMKQEAgLTAsMCArMSw3OTEgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpICYmICFkZWZpbmVkKG1pbmd3MzIpCitzdGF0aWMgY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfYW55ID0gSU42QUREUl9BTllfSU5JVDsKKyNlbmRpZgorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkKKyNkZWZpbmUgU1NfRkFNSUxZIHNzX2ZhbWlseQorI2VsaWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9fX1NTX0ZBTUlMWQorI2RlZmluZSBTU19GQU1JTFkgX19zc19mYW1pbHkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChkYXJ3aW4pCisjaW5jbHVkZSA8c3RkaW50Lmg+IC8qIGZvciB1aW50OF90ICovCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisKK29pZCBuZXRzbm1wX1VEUElQdjZEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9VRFBfSVBWNiB9Oworc3RhdGljIG5ldHNubXBfdGRvbWFpbiB1ZHA2RG9tYWluOworCisvKgorICogZnJvbSBzbm1wVURQRG9tYWluLiBub3Qgc3RhdGljLCBidXQgbm90IHB1YmxpYywgZWl0aGVyLgorICogKGllIGRvbid0IHB1dCBpdCBpbiBhIHB1YmxpYyBoZWFkZXIuKQorICovCitleHRlcm4gdm9pZCBfbmV0c25tcF91ZHBfc29ja29wdF9zZXQoaW50IGZkLCBpbnQgc2VydmVyKTsKKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAorICovCisKK3N0YXRpYyBjaGFyICoKK25ldHNubXBfdWRwNl9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIHJldHVybiBuZXRzbm1wX2lwdjZfZm10YWRkcigiVURQL0lQdjYiLCB0LCBkYXRhLCBsZW4pOworfQorCisKKworLyoKKyAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAorICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bworICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKKyAqLworCitzdGF0aWMgaW50CituZXRzbm1wX3VkcDZfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKwkJICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gLTE7CisgICAgc29ja2xlbl90ICAgICAgIGZyb21sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisgICAgc3RydWN0IHNvY2thZGRyICpmcm9tOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKyAgICAgICAgZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgICAgIGlmIChmcm9tID09IE5VTEwpIHsKKyAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOworICAgICAgICAgICAgKm9sZW5ndGggPSAwOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtc2V0KGZyb20sIDAsIGZyb21sZW4pOworICAgICAgICB9CisKKwl3aGlsZSAocmMgPCAwKSB7CisJICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgZnJvbSwgJmZyb21sZW4pOworCSAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCSAgICBicmVhazsKKwkgIH0KKwl9CisKKyAgICAgICAgaWYgKHJjID49IDApIHsKKyAgICAgICAgICAgIERFQlVHSUYoIm5ldHNubXBfdWRwNiIpIHsKKyAgICAgICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcDZfZm10YWRkcihOVUxMLCBmcm9tLCBmcm9tbGVuKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20gZmQgJWQgZ290ICVkIGJ5dGVzIChmcm9tICVzKVxuIiwgdC0+c29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYywgc3RyKSk7CisgICAgICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJyZWN2ZnJvbSBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCisJCQl0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgIH0KKyAgICAgICAgKm9wYXF1ZSA9ICh2b2lkICopIGZyb207CisgICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX3VkcDZfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKwkJICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisgICAgc3RydWN0IHNvY2thZGRyICp0byA9IE5VTEw7CisKKyAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgKm9wYXF1ZSAhPSBOVUxMICYmCisgICAgICAgICpvbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCpvcGFxdWUpOworICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgKCh0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHx8CisgICAgICAgICAgICAgICAgKHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSkpKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAodC0+ZGF0YSk7CisgICAgfQorCisgICAgaWYgKHRvICE9IE5VTEwgJiYgdCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBERUJVR0lGKCJuZXRzbm1wX3VkcDYiKSB7CisgICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcDZfZm10YWRkcihOVUxMLCAodm9pZCAqKXRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLAorICAgICAgICAgICAgICAgICAgICAgICAgInNlbmQgJWQgYnl0ZXMgZnJvbSAlcCB0byAlcyBvbiBmZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIGJ1Ziwgc3RyLCB0LT5zb2NrKSk7CisgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgIH0KKwl3aGlsZSAocmMgPCAwKSB7CisJICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgdG8sc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBPcGVuIGEgVURQL0lQdjYtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZQorICogbG9jYWwgYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlCisgKiBhZGRyIGlzIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdWRwNl90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOworCisjaWZkZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgIGlmIChsb2NhbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworCisgICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RyYW5zcG9ydCk7CisgICAgaWYgKHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBERUJVR0lGKCJuZXRzbm1wX3VkcDYiKSB7CisgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdWRwNl9mbXRhZGRyKE5VTEwsICh2b2lkICopIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCisgICAgICAgICAgICAgICAgICAgIHN0cikpOworICAgICAgICBmcmVlKHN0cik7CisgICAgfQorCisgICAgdC0+ZG9tYWluID0gbmV0c25tcF9VRFBJUHY2RG9tYWluOworICAgIHQtPmRvbWFpbl9sZW5ndGggPQorICAgICAgICBzaXplb2YobmV0c25tcF9VRFBJUHY2RG9tYWluKSAvIHNpemVvZihuZXRzbm1wX1VEUElQdjZEb21haW5bMF0pOworCisgICAgdC0+c29jayA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CisgICAgaWYgKHQtPnNvY2sgPCAwKSB7CisgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIF9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldCh0LT5zb2NrLCBsb2NhbCk7CisKKyAgICBpZiAobG9jYWwpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5kZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCBvbiB0byB0aGUKKyAgICAgICAgICogZ2l2ZW4gSVAgYWRkcmVzcywgd2hpY2ggbWF5IGluY2x1ZGUgYW4gaW50ZXJmYWNlIGFkZHJlc3MsIG9yIGNvdWxkCisgICAgICAgICAqIGJlIElOQUREUl9BTlksIGJ1dCBjZXJ0YWlubHkgaW5jbHVkZXMgYSBwb3J0IG51bWJlci4KKyAgICAgICAgICovCisKKyNpZmRlZiBJUFY2X1Y2T05MWQorICAgICAgICAvKiBUcnkgdG8gcmVzdHJpY3QgUEZfSU5FVDYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbnMgb25seS4gKi8KKyAgICAgICAgeworICAgICAgICAgICAgaW50IG9uZT0xOworICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQodC0+c29jaywgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwgKGNoYXIgKikmb25lLCBzaXplb2Yob25lKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAiY291bGRuJ3Qgc2V0IElQVjZfVjZPTkxZIHRvICVkIGJ5dGVzOiAlc1xuIiwgb25lLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCisJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB0LT5sb2NhbCA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTgpOworICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5sb2NhbCwgYWRkci0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKKyAgICAgICAgdC0+bG9jYWxbMTZdID0gKG50b2hzKGFkZHItPnNpbjZfcG9ydCkgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPmxvY2FsWzE3XSA9IChudG9ocyhhZGRyLT5zaW42X3BvcnQpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSAxODsKKyAgICAgICAgdC0+ZGF0YSA9IE5VTEw7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gMDsKKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQgc2Vzc2lvbi4gIFNhdmUgdGhlIGFkZHJlc3MgaW4gdGhlCisgICAgICAgICAqIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhIHBvaW50ZXIgZm9yIGxhdGVyIHVzZSBieSBuZXRzbm1wX3VkcDZfc2VuZC4KKyAgICAgICAgICovCisKKyAgICAgICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgICAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHQtPmRhdGEsIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpOworICAgICAgICB0LT5yZW1vdGUgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDE4KTsKKyAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHQtPnJlbW90ZSwgYWRkci0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKKyAgICAgICAgdC0+cmVtb3RlWzE2XSA9IChudG9ocyhhZGRyLT5zaW42X3BvcnQpICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5yZW1vdGVbMTddID0gKG50b2hzKGFkZHItPnNpbjZfcG9ydCkgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSAxODsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDE2LWJpdCBsZW5ndGggZmllbGQsIDggYnl0ZSBVRFAgaGVhZGVyLCA0MCBieXRlIElQdjYgaGVhZGVyLiAgCisgICAgICovCisKKyAgICB0LT5tc2dNYXhTaXplID0gMHhmZmZmIC0gOCAtIDQwOworICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3VkcDZfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF91ZHA2X3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZTsKKyAgICB0LT5mX2FjY2VwdCAgID0gTlVMTDsKKyAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF91ZHA2X2ZtdGFkZHI7CisKKyAgICByZXR1cm4gdDsKK30KKworCisjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCisvKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSB0aGUgImNvbTJzZWM2IiBjb25maWd1cmF0aW9uIHRva2VuCisgKiBmdW5jdGlvbmFsaXR5IGZvciBjb21wYXRpYmlsaXR5LgorICovCisKKyNkZWZpbmUgRVhBTVBMRV9ORVRXT1JLICAgICAgICJORVRXT1JLIgorI2RlZmluZSBFWEFNUExFX0NPTU1VTklUWSAgICAgIkNPTU1VTklUWSIKKwordHlwZWRlZiBzdHJ1Y3QgY29tMlNlYzZFbnRyeV9zIHsKKyAgICBjb25zdCBjaGFyICAgICAqc2VjTmFtZTsKKyAgICBjb25zdCBjaGFyICAgICAqY29udGV4dE5hbWU7CisgICAgc3RydWN0IGNvbTJTZWM2RW50cnlfcyAqbmV4dDsKKyAgICBzdHJ1Y3QgaW42X2FkZHIgbmV0d29yazsKKyAgICBzdHJ1Y3QgaW42X2FkZHIgbWFzazsKKyAgICBjb25zdCBjaGFyICAgICAgY29tbXVuaXR5WzFdOworfSBjb20yU2VjNkVudHJ5OworCitzdGF0aWMgY29tMlNlYzZFbnRyeSAgKmNvbTJTZWM2TGlzdCA9IE5VTEwsICpjb20yU2VjNkxpc3RMYXN0ID0gTlVMTDsKKworCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitjcmVhdGVfY29tMlNlYzZFbnRyeShjb25zdCBzdHJ1Y3QgYWRkcmluZm8qIGNvbnN0IHJ1biwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciogY29uc3QgbWFzaywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNlY05hbWUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2VjTmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGNvbnRleHROYW1lLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNvbnRleHROYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3QgY29tbXVuaXR5LAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNvbW11bml0eUxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbTJTZWM2RW50cnkqKiBjb25zdCBiZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbTJTZWM2RW50cnkqKiBjb25zdCBlbmQpCit7CisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqIGNvbnN0IHJ1bl9hZGRyID0KKyAgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYqKXJ1bi0+YWlfYWRkcjsKKyAgICBpbnQgaTsKKworICAgIC8qIENoZWNrIHRoYXQgdGhlIG5ldHdvcmsgYW5kIG1hc2sgYXJlIGNvbnNpc3RlbnQuICovCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAgICAgICAgaWYgKHJ1bl9hZGRyLT5zaW42X2FkZHIuczZfYWRkcltpXSAmIH5tYXNrLT5zNl9hZGRyW2ldKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJzb3VyY2UvbWFzayBtaXNtYXRjaCIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIGNoYXIgYnVmMVtJTkVUNl9BRERSU1RSTEVOXTsKKyAgICAgICAgY2hhciBidWYyW0lORVQ2X0FERFJTVFJMRU5dOworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5IiwKKyAgICAgICAgICAgICAgICAgICAgIjxcIiVzXCIsICVzLyVzPiA9PiBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgIGNvbW11bml0eSwKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmcnVuX2FkZHItPnNpbjZfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZjEsIHNpemVvZihidWYxKSksCisgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgbWFzaywgYnVmMiwgc2l6ZW9mKGJ1ZjIpKSwKKyAgICAgICAgICAgICAgICAgICAgc2VjTmFtZSkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLyogQWxsb2NhdGUgYWxsIHRoZSBuZWVkZWQgY2h1bmtzICovCisgICAgICAgIHZvaWQgKiBjb25zdCB2ID0KKyAgICAgICAgICAgIG1hbGxvYyhvZmZzZXRvZihjb20yU2VjNkVudHJ5LCBjb21tdW5pdHkpICsgY29tbXVuaXR5TGVuICsKKyAgICAgICAgICAgICAgICAgICBzZWNOYW1lTGVuICsgY29udGV4dE5hbWVMZW4pOworCisgICAgICAgIGNvbTJTZWM2RW50cnkqIGNvbnN0IGUgPSAoY29tMlNlYzZFbnRyeSopdjsKKyAgICAgICAgY2hhciAqbGFzdCA9ICgoY2hhciopdikgKyBvZmZzZXRvZihjb20yU2VjNkVudHJ5LCBjb21tdW5pdHkpOworCisgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1lbW9yeSBlcnJvciIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkobGFzdCwgY29tbXVuaXR5LCBjb21tdW5pdHlMZW4pOworICAgICAgICBsYXN0ICs9IGNvbW11bml0eUxlbjsKKworICAgICAgICBtZW1jcHkobGFzdCwgc2VjTmFtZSwgc2VjTmFtZUxlbik7CisgICAgICAgIGUtPnNlY05hbWUgPSBsYXN0OworICAgICAgICBsYXN0ICs9IHNlY05hbWVMZW47CisKKyAgICAgICAgaWYgKGNvbnRleHROYW1lTGVuKSB7CisgICAgICAgICAgICBtZW1jcHkobGFzdCwgY29udGV4dE5hbWUsIGNvbnRleHROYW1lTGVuKTsKKyAgICAgICAgICAgIGUtPmNvbnRleHROYW1lID0gbGFzdDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlLT5jb250ZXh0TmFtZSA9IGxhc3QgLSAxOworCisgICAgICAgIG1lbWNweSgmZS0+bmV0d29yaywgJnJ1bl9hZGRyLT5zaW42X2FkZHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKyAgICAgICAgbWVtY3B5KCZlLT5tYXNrLCBtYXNrLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisKKyAgICAgICAgZS0+bmV4dCA9IE5VTEw7CisgICAgICAgIGlmICgqZW5kICE9IE5VTEwpIHsKKyAgICAgICAgICAgICgqZW5kKS0+bmV4dCA9IGU7CisgICAgICAgICAgICAqZW5kID0gZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICplbmQgPSAqYmVnaW4gPSBlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkCituZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKnBhcmFtKQoreworICAgIGNoYXIgICAgICAgICAgICBzZWNOYW1lW1ZBQ01TVFJJTkdMRU4gKyAxXTsKKyAgICBzaXplX3QgICAgICAgICAgc2VjTmFtZUxlbjsKKyAgICBjaGFyICAgICAgICAgICAgY29udGV4dE5hbWVbVkFDTVNUUklOR0xFTiArIDFdOworICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0TmFtZUxlbjsKKyAgICBjaGFyICAgICAgICAgICAgY29tbXVuaXR5W0NPTU1VTklUWV9NQVhfTEVOICsgMV07CisgICAgc2l6ZV90ICAgICAgICAgIGNvbW11bml0eUxlbjsKKyAgICBjaGFyICAgICAgICAgICAgc291cmNlWzMwMF07IC8qIGRucy1uYW1lKDI1MykrLygxKSttYXNrKDQ1KStcMCgxKSAqLworICAgIHN0cnVjdCBpbjZfYWRkciBtYXNrOworCisgICAgLyoKKyAgICAgKiBHZXQgc2VjdXJpdHksIHNvdXJjZSBhZGRyZXNzL25ldG1hc2sgYW5kIGNvbW11bml0eSBzdHJpbmdzLgorICAgICAqLworCisgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKKyAgICBpZiAoc3RyY21wKHNlY05hbWUsICItQ24iKSA9PSAwKSB7CisgICAgICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09OVEVYVF9OQU1FIHBhcmFtZXRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIGNvbnRleHROYW1lLCBzaXplb2YoY29udGV4dE5hbWUpKTsKKyAgICAgICAgY29udGV4dE5hbWVMZW4gPSBzdHJsZW4oY29udGV4dE5hbWUpICsgMTsKKyAgICAgICAgaWYgKGNvbnRleHROYW1lTGVuID4gVkFDTVNUUklOR0xFTikgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY29udGV4dCBuYW1lIHRvbyBsb25nIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFwYXJhbSkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBOQU1FIHBhcmFtZXRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29udGV4dE5hbWVMZW4gPSAwOworICAgIH0KKworICAgIHNlY05hbWVMZW4gPSBzdHJsZW4oc2VjTmFtZSkgKyAxOworICAgIGlmIChzZWNOYW1lTGVuID09IDEpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiZW1wdHkgTkFNRSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoc2VjTmFtZUxlbiA+IFZBQ01TVFJJTkdMRU4pIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigic2VjdXJpdHkgbmFtZSB0b28gbG9uZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFwYXJhbSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIFNPVVJDRSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBzb3VyY2UsIHNpemVvZihzb3VyY2UpKTsKKyAgICBpZiAoc291cmNlWzBdID09ICdcMCcpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiZW1wdHkgU09VUkNFIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJuY21wKHNvdXJjZSwgRVhBTVBMRV9ORVRXT1JLLCBzdHJsZW4oRVhBTVBMRV9ORVRXT1JLKSkgPT0gMCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBORVRXT1JLIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXBhcmFtKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09NTVVOSVRZIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIGNvbW11bml0eSwgc2l6ZW9mKGNvbW11bml0eSkpOworICAgIGlmIChjb21tdW5pdHlbMF0gPT0gJ1wwJykgeworICAgICAgICBjb25maWdfcGVycm9yKCJlbXB0eSBDT01NVU5JVFkgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29tbXVuaXR5TGVuID0gc3RybGVuKGNvbW11bml0eSkgKyAxOworICAgIGlmIChjb21tdW5pdHlMZW4gPj0gQ09NTVVOSVRZX01BWF9MRU4pIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiY29tbXVuaXR5IG5hbWUgdG9vIGxvbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoY29tbXVuaXR5TGVuID09IHNpemVvZihFWEFNUExFX0NPTU1VTklUWSkgJiYKKyAgICAgICAgbWVtY21wKGNvbW11bml0eSwgRVhBTVBMRV9DT01NVU5JVFksIHNpemVvZihFWEFNUExFX0NPTU1VTklUWSkpID09IDApIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiZXhhbXBsZSBjb25maWcgQ09NTVVOSVRZIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBQb3NzaWJsZSBtYXNrIGNhc2VzCisgICAgICogImRlZmF1bHQiIDw9PiAwOjowLzAKKyAgICAgKiA8aG9zdG5hbWU+Wy9dIDw9PiA8aG9zdG5hbWU+LzEyOAorICAgICAqIDxob3N0bmFtZT4vbnVtYmVyIDw9PiA8aG9zdG5hbWU+L251bWJlcgorICAgICAqIDxob3N0bmFtZT4vPG1hc2s+IDw9PiA8aG9zdG5hbWU+LzxtYXNrPgorICAgICAqLworICAgIHsKKyAgICAgICAgLyogRGVhbCB3aXRoIHRoZSAiZGVmYXVsdCIgY2FzZSBmaXJzdC4gKi8KKyAgICAgICAgY29uc3QgaW50IGlzZGVmYXVsdCA9IHN0cmNtcChzb3VyY2UsICJkZWZhdWx0IikgPT0gMDsKKworICAgICAgICBpZiAoaXNkZWZhdWx0KSB7CisgICAgICAgICAgICBtZW1zZXQobWFzay5zNl9hZGRyLCAnXDAnLCBzaXplb2YobWFzay5zNl9hZGRyKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBTcGxpdCB0aGUgc291cmNlL25ldG1hc2sgcGFydHMgKi8KKyAgICAgICAgICAgIGNoYXIgKnN0cm1hc2sgPSBzdHJjaHIoc291cmNlLCAnLycpOworICAgICAgICAgICAgaWYgKHN0cm1hc2sgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAvKiBNYXNrIGdpdmVuLiAqLworICAgICAgICAgICAgICAgICpzdHJtYXNrKysgPSAnXDAnOworCisgICAgICAgICAgICAvKiBUcnkgdG8gaW50ZXJwcmV0IHRoZSBtYXNrICovCisgICAgICAgICAgICBpZiAoc3RybWFzayA9PSBOVUxMIHx8ICpzdHJtYXNrID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICAvKiBObyBtYXNrIHdhcyBnaXZlbi4gQXNzdW1lIC8xMjggKi8KKyAgICAgICAgICAgICAgICBtZW1zZXQobWFzay5zNl9hZGRyLCAnXHhmZicsIHNpemVvZihtYXNrLnM2X2FkZHIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGludGVycHJldCBtYXNrIGFzIGEgIm51bWJlciBvZiAxIGJpdHMiLiAqLworICAgICAgICAgICAgICAgIGNoYXIqIGNwOworICAgICAgICAgICAgICAgIGxvbmcgbWFza2xlbmd0aCA9IHN0cnRvbChzdHJtYXNrLCAmY3AsIDEwKTsKKyAgICAgICAgICAgICAgICBpZiAoKmNwID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgPD0gbWFza2xlbmd0aCAmJiBtYXNrbGVuZ3RoIDw9IDEyOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGogPSBtYXNrbGVuZ3RoIC8gODsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBqaiA9IG1hc2tsZW5ndGggJSA4OworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KG1hc2suczZfYWRkciwgJ1x4ZmYnLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLnM2X2FkZHJbal0gPSAoKHVpbnQ4X3QpfjBVIDw8ICg4IC0gamopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQobWFzay5zNl9hZGRyICsgaiArIDEsICdcMCcsIDE1IC0gaik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgbWFzayBsZW5ndGgiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBUcnkgdG8gaW50ZXJwcmV0IG1hc2sgbnVtZXJpY2FsbHkuICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBzdHJtYXNrLCAmbWFzaykgIT0gMSkgeworICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgbWFzayIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiBwdG9uX2FkZHI7CisgICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXMgPSBOVUxMOworICAgICAgICAgICAgbWVtc2V0KCZoaW50cywgJ1wwJywgc2l6ZW9mKGhpbnRzKSk7CisKKyAgICAgICAgICAgIC8qIEZpcnN0IGNoZWNrIGlmIGRlZmF1bHQsIG90aGVyd2lzZSB0cnkgdG8gcGFyc2UgYXMgYSBudW1lcmljCisgICAgICAgICAgICAgKiBhZGRyZXNzLCBpZiB0aGF0IGFsc28gZmFpbHMgdHJ5IHRvIGxvb2t1cCB0aGUgYWRkcmVzcyAqLworICAgICAgICAgICAgaWYgKGlzZGVmYXVsdCkgeworICAgICAgICAgICAgICAgIG1lbXNldCgmcHRvbl9hZGRyLnNpbjZfYWRkci5zNl9hZGRyLCAnXDAnLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgc291cmNlLCAmcHRvbl9hZGRyLnNpbjZfYWRkcikgIT0gMSkgeworICAgICAgICAgICAgICAgIC8qIE5vcGUsIHdhc24ndCBhIG51bWVyaWMgYWRkcmVzcy4gTXVzdCBiZSBhIGhvc3RuYW1lLiAqLworI2lmIEhBVkVfR0VUQUREUklORk8KKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgZ2FpX2Vycm9yOworCisgICAgICAgICAgICAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgICAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOworICAgICAgICAgICAgICAgIGdhaV9lcnJvciA9IG5ldHNubXBfZ2V0YWRkcmluZm8oc291cmNlLCBOVUxMLCAmaGludHMsICZyZXMpOworICAgICAgICAgICAgICAgIGlmIChnYWlfZXJyb3IgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKGdhaV9zdHJlcnJvcihnYWlfZXJyb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiZ2V0YWRkcmluZm8oKSBub3QgYXZhaWxhYmxlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBoaW50cy5haV9hZGRybGVuID0gc2l6ZW9mKHB0b25fYWRkcik7CisgICAgICAgICAgICAgICAgaGludHMuYWlfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIqKSZwdG9uX2FkZHI7CisgICAgICAgICAgICAgICAgaGludHMuYWlfbmV4dCA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmVzID0gJmhpbnRzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RydWN0IGFkZHJpbmZvICpydW47CisgICAgICAgICAgICAgICAgaW50ICAgIGZhaWxlZCA9IDA7CisgICAgICAgICAgICAgICAgY29tMlNlYzZFbnRyeSAqYmVnaW4gPSBOVUxMLCAqZW5kID0gTlVMTDsKKworICAgICAgICAgICAgICAgIGZvciAocnVuID0gcmVzOyBydW4gJiYgIWZhaWxlZDsgcnVuID0gcnVuLT5haV9uZXh0KQorICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPQorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2NvbTJTZWM2RW50cnkocnVuLCAmbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY05hbWUsIHNlY05hbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSwgY29udGV4dE5hbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tdW5pdHksIGNvbW11bml0eUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiZWdpbiwgJmVuZCk7CisKKyAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgZXZlbnR1YWxseSBhbGxvY2F0ZWQgY2h1bmtzICovCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChiZWdpbikgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gYmVnaW47CisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IGJlZ2luLT5uZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShlbmQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb20yU2VjNkxpc3RMYXN0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tMlNlYzZMaXN0TGFzdC0+bmV4dCA9IGJlZ2luOworICAgICAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0ID0gZW5kOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdCA9IGJlZ2luOworICAgICAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0ID0gZW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgICAgICAgICBpZiAocmVzICE9ICZoaW50cykKKyAgICAgICAgICAgICAgICBmcmVlYWRkcmluZm8ocmVzKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorfQorCit2b2lkCituZXRzbm1wX3VkcDZfY29tMlNlYzZMaXN0X2ZyZWUodm9pZCkKK3sKKyAgICBjb20yU2VjNkVudHJ5ICAqZSA9IGNvbTJTZWM2TGlzdDsKKyAgICB3aGlsZSAoZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbTJTZWM2RW50cnkgICp0bXAgPSBlOworICAgICAgICBlID0gZS0+bmV4dDsKKyAgICAgICAgZnJlZSh0bXApOworICAgIH0KKyAgICBjb20yU2VjNkxpc3QgPSBjb20yU2VjNkxpc3RMYXN0ID0gTlVMTDsKK30KKworI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCisKK3ZvaWQKK25ldHNubXBfdWRwNl9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpCit7CisjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCisgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJjb20yc2VjNiIsIG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF91ZHA2X2NvbTJTZWM2TGlzdF9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWy1DbiBDT05URVhUXSBzZWNOYW1lIElQdjYtbmV0d29yay1hZGRyZXNzWy9uZXRtYXNrXSBjb21tdW5pdHkiKTsKKyNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLworfQorCisKKworI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQorCisvKgorICogUmV0dXJuIDAgaWYgdGhlcmUgYXJlIG5vIGNvbTJzZWMgZW50cmllcywgb3IgcmV0dXJuIDEgaWYgdGhlcmUgQVJFIGNvbTJzZWMKKyAqIGVudHJpZXMuICBPbiByZXR1cm4sIGlmIGEgY29tMnNlYyBlbnRyeSBtYXRjaGVkIHRoZSBwYXNzZWQgcGFyYW1ldGVycywKKyAqIHRoZW4gKnNlY05hbWUgcG9pbnRzIGF0IHRoZSBhcHByb3ByaWF0ZSBzZWN1cml0eSBuYW1lLCBvciBpcyBOVUxMIGlmIHRoZQorICogcGFyYW1ldGVycyBkaWQgbm90IG1hdGNoIGFueSBjb20yc2VjIGVudHJ5LgorICovCisKK2ludAorbmV0c25tcF91ZHA2X2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tdW5pdHlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnNlY05hbWUsIGNvbnN0IGNoYXIgKipjb250ZXh0TmFtZSkKK3sKKyAgICBjb25zdCBjb20yU2VjNkVudHJ5ICpjOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmZyb20gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBvcGFxdWU7CisgICAgY2hhciAgICAgICAgICAgKnp0Y29tbXVuaXR5ID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAgc3RyNltJTkVUNl9BRERSU1RSTEVOXTsKKworICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgKnNlY05hbWUgPSBOVUxMOyAgLyogSGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB5ZXQgKi8KKyAgICB9CisKKyAgICAvKgorICAgICAqIFNwZWNpYWwgY2FzZSBpZiB0aGVyZSBhcmUgTk8gZW50cmllcyAoYXMgb3Bwb3NlZCB0byBubyBNQVRDSElORworICAgICAqIGVudHJpZXMpLgorICAgICAqLworCisgICAgaWYgKGNvbTJTZWM2TGlzdCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsICJubyBjb20yc2VjIGVudHJpZXNcbiIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBpcyBubyBJUHY2IHNvdXJjZSBhZGRyZXNzLCB0aGVuIHRoZXJlIGNhbiBiZSBubyB2YWxpZCBzZWN1cml0eQorICAgICAqIG5hbWUuCisgICAgICovCisKKyAgICBpZiAob3BhcXVlID09IE5VTEwgfHwgb2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikKKyAgICAgICAgfHwgZnJvbS0+c2luNl9mYW1pbHkgIT0gUEZfSU5FVDYpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgIm5vIElQdjYgc291cmNlIGFkZHJlc3MgaW4gUERVP1xuIikpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICB6dGNvbW11bml0eSA9IChjaGFyICopIG1hbGxvYyhjb21tdW5pdHlfbGVuICsgMSk7CisgICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKKyAgICAgICAgbWVtY3B5KHp0Y29tbXVuaXR5LCBjb21tdW5pdHksIGNvbW11bml0eV9sZW4pOworICAgICAgICB6dGNvbW11bml0eVtjb21tdW5pdHlfbGVuXSA9ICdcMCc7CisgICAgfQorCisgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmZnJvbS0+c2luNl9hZGRyLCBzdHI2LCBzaXplb2Yoc3RyNikpOworICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsICJyZXNvbHZlIDxcIiVzXCIsICVzPlxuIiwKKyAgICAgICAgICAgICAgICB6dGNvbW11bml0eSA/IHp0Y29tbXVuaXR5IDogIjxtYWxsb2MgZXJyb3I+Iiwgc3RyNikpOworCisgICAgZm9yIChjID0gY29tMlNlYzZMaXN0OyBjICE9IE5VTEw7IGMgPSBjLT5uZXh0KSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgYnVmMVtJTkVUNl9BRERSU1RSTEVOXTsKKyAgICAgICAgICAgIGNoYXIgYnVmMltJTkVUNl9BRERSU1RSTEVOXTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGFyZSA8XCIlc1wiLCAlcy8lcz4iLCBjLT5jb21tdW5pdHksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZjLT5uZXR3b3JrLCBidWYxLCBzaXplb2YoYnVmMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYy0+bWFzaywgYnVmMiwgc2l6ZW9mKGJ1ZjIpKSkpOworICAgICAgICB9CisgICAgICAgIGlmICgoY29tbXVuaXR5X2xlbiA9PSAoaW50KXN0cmxlbihjLT5jb21tdW5pdHkpKSAmJgorICAgICAgICAgICAgKG1lbWNtcChjb21tdW5pdHksIGMtPmNvbW11bml0eSwgY29tbXVuaXR5X2xlbikgPT0gMCkpIHsKKyAgICAgICAgICAgIGludCBpLCBvayA9IDE7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBvayAmJiBpIDwgMTY7ICsraSkKKyAgICAgICAgICAgICAgICBpZiAoKGZyb20tPnNpbjZfYWRkci5zNl9hZGRyW2ldICYgYy0+bWFzay5zNl9hZGRyW2ldKSAhPQorICAgICAgICAgICAgICAgICAgICBjLT5uZXR3b3JrLnM2X2FkZHJbaV0pCisgICAgICAgICAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91ZHA2X2dldFNlY05hbWUiLCAiLi4uIFNVQ0NFU1NcbiIpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICpzZWNOYW1lID0gYy0+c2VjTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgKmNvbnRleHROYW1lID0gYy0+Y29udGV4dE5hbWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsICIuLi4gbm9wZVxuIikpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKKyAgICAgICAgZnJlZSh6dGNvbW11bml0eSk7CisgICAgfQorICAgIHJldHVybiAxOworfQorI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdWRwNl9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKKwkJCSAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisKKyAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pbjZfMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdWRwNl90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKworLyoKKyAqIFNlZToKKyAqIAorICogaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1vcHMtdGFkZHJlc3MtbWliLTAxLnR4dAorICogCisgKiAob3IgbmV3ZXIgZXF1aXZhbGVudCkgZm9yIGRldGFpbHMgb2YgdGhlIFRDIHdoaWNoIHdlIGFyZSB1c2luZyBmb3IKKyAqIHRoZSBtYXBwaW5nIGhlcmUuICAKKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3VkcDZfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworCisgICAgaWYgKG9fbGVuID09IDE4KSB7CisgICAgICAgIG1lbXNldCgodV9jaGFyICopICYgYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpbjZfYWRkci5zNl9hZGRyKSwgbywgMTYpOworICAgICAgICBhZGRyLnNpbjZfcG9ydCA9IGh0b25zKChvWzE2XSA8PCA4KSArIG9bMTddKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdWRwNl90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwordm9pZAorbmV0c25tcF91ZHBpcHY2X2N0b3Iodm9pZCkKK3sKKyAgICB1ZHA2RG9tYWluLm5hbWUgPSBuZXRzbm1wX1VEUElQdjZEb21haW47CisgICAgdWRwNkRvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX1VEUElQdjZEb21haW4pIC8gc2l6ZW9mKG9pZCk7CisgICAgdWRwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICB1ZHA2RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3VkcDZfY3JlYXRlX3RzdHJpbmc7CisgICAgdWRwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF91ZHA2X2NyZWF0ZV9vc3RyaW5nOworICAgIHVkcDZEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoNSwgc2l6ZW9mKGNoYXIgKikpOworICAgIHVkcDZEb21haW4ucHJlZml4WzBdID0gInVkcDYiOworICAgIHVkcDZEb21haW4ucHJlZml4WzFdID0gImlwdjYiOworICAgIHVkcDZEb21haW4ucHJlZml4WzJdID0gInVkcHY2IjsKKyAgICB1ZHA2RG9tYWluLnByZWZpeFszXSA9ICJ1ZHBpcHY2IjsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdWRwNkRvbWFpbik7Cit9CisKKyNlbHNlCisKKyNpZmRlZiBORVRTTk1QX0RMTAorLyogbmVlZCB0aGlzIGhvb2sgZm9yIHdpbjMyIE1TVkMrKyBETEwgYnVpbGQgKi8KK3ZvaWQKK25ldHNubXBfdWRwNl9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpCit7IH0KKyNlbmRpZgorCisjZW5kaWYgLyogTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4gKi8KKwpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2RmZmMxCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmMKQEAgLTAsMCArMSw3NTIgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oPgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPiAvKiBta2RpcmhpZXIgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0cmFuc3BvcnRfdW5peF9zb2NrZXRfYWxsLCB0cmFuc3BvcnRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVuaXhfc29ja2V0X3BhdGhzLCB0cmFuc3BvcnRfdW5peF9zb2NrZXRfYWxsKQorCisjaWZuZGVmIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTgorI2RlZmluZSBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4gIDUKKyNlbmRpZgorCisjaWZuZGVmIFNVTl9MRU4KKy8qCisgKiBFdmFsdWF0ZSB0byBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBgc29ja2FkZHJfdW4nIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBTVU5fTEVOKHB0cikgKChzaXplX3QpICgoKHN0cnVjdCBzb2NrYWRkcl91biAqKSAwKS0+c3VuX3BhdGgpICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuICgocHRyKS0+c3VuX3BhdGgpKQorI2VuZGlmCisKK29pZCBuZXRzbm1wX1VuaXhEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9MT0NBTCB9Oworc3RhdGljIG5ldHNubXBfdGRvbWFpbiB1bml4RG9tYWluOworCisKKy8qCisgKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2UgdXNlIHRvIGhvbGQgdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX3NvY2thZGRyX3VuX3BhaXIgeworICAgIGludCAgICAgICAgICAgICBsb2NhbDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gc2VydmVyOworICAgIHN0cnVjdCBzb2NrYWRkcl91biBjbGllbnQ7Cit9IHNvY2thZGRyX3VuX3BhaXI7CisKKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4KKyAqLworCitzdGF0aWMgY2hhciAqCituZXRzbm1wX3VuaXhfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnRvID0gTlVMTDsKKworICAgIGlmIChkYXRhICE9IE5VTEwpIHsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX3VuICopIGRhdGE7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIHRvID0gJigoKHNvY2thZGRyX3VuX3BhaXIgKikgdC0+ZGF0YSktPnNlcnZlcik7CisgICAgICAgIGxlbiA9IFNVTl9MRU4odG8pOworICAgIH0KKyAgICBpZiAodG8gPT0gTlVMTCkgeworICAgICAgICAvKgorICAgICAgICAgKiAiTG9jYWwgSVBDIiBpcyB0aGUgUG9zaXguMWcgdGVybSBmb3IgVW5peCBkb21haW4gcHJvdG9jb2xzLAorICAgICAgICAgKiBhY2NvcmRpbmcgdG8gVy4gUi4gU3RldmVucywgYGBVbml4IE5ldHdvcmsgUHJvZ3JhbW1pbmcgVm9sdW1lIEkKKyAgICAgICAgICogU2Vjb25kIEVkaXRpb24nJywgcC4gMzc0LgorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIHN0cmR1cCgiTG9jYWwgSVBDOiB1bmtub3duIik7CisgICAgfSBlbHNlIGlmICh0by0+c3VuX3BhdGhbMF0gPT0gMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIGFuIGFic3RyYWN0IG5hbWUuICBXZSBjb3VsZCByZW5kZXIgaXQgYXMgaGV4IG9yIHNvbWV0aGluZworICAgICAgICAgKiBidXQgbGV0J3Mgbm90IHdvcnJ5IGFib3V0IHRoYXQgZm9yIG5vdy4KKyAgICAgICAgICovCisgICAgICAgIHJldHVybiBzdHJkdXAoIkxvY2FsIElQQzogYWJzdHJhY3QiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyICAgICAgICAgICAqdG1wID0gKGNoYXIgKikgbWFsbG9jKDE2ICsgbGVuKTsKKyAgICAgICAgaWYgKHRtcCAhPSBOVUxMKSB7CisgICAgICAgICAgICBzcHJpbnRmKHRtcCwgIkxvY2FsIElQQzogJXMiLCB0by0+c3VuX3BhdGgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorfQorCisKKworLyoKKyAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrCisgKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCisgKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4KKyAqLworCitzdGF0aWMgaW50CituZXRzbm1wX3VuaXhfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBzb2NrbGVuX3QgICAgICAgdG9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvOworCisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsKKyAgICAgICAgaWYgKHRvID09IE5VTEwpIHsKKyAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOworICAgICAgICAgICAgKm9sZW5ndGggPSAwOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtc2V0KHRvLCAwLCB0b2xlbik7CisgICAgICAgIH0KKyAgICAgICAgaWYoZ2V0c29ja25hbWUodC0+c29jaywgdG8sICZ0b2xlbikgIT0gMCl7CisgICAgICAgICAgICBmcmVlKHRvKTsKKyAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOworICAgICAgICAgICAgKm9sZW5ndGggPSAwOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9OworICAgICAgICB3aGlsZSAocmMgPCAwKSB7CisjaWZkZWYgTVNHX0RPTlRXQUlUCisgICAgICAgICAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgTVNHX0RPTlRXQUlULCBOVUxMLCBOVUxMKTsKKyNlbHNlCisgICAgICAgICAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgInJlY3YgZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqb3BhcXVlID0gKHZvaWQqKXRvOworICAgICAgICAgICAgKm9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgInJlY3YgZmQgJWQgZ290ICVkIGJ5dGVzXG4iLCB0LT5zb2NrLCByYykpOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX3VuaXhfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAic2VuZCAlZCBieXRlcyB0byAlcCBvbiBmZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCB0LT5zb2NrKSk7CisgICAgICAgIHdoaWxlIChyYyA8IDApIHsKKyAgICAgICAgICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7CisgICAgICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisKKworc3RhdGljIGludAorbmV0c25tcF91bml4X2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIGludCByYyA9IDA7CisgICAgc29ja2FkZHJfdW5fcGFpciAqc3VwID0gKHNvY2thZGRyX3VuX3BhaXIgKikgdC0+ZGF0YTsKKworICAgIGlmICh0LT5zb2NrID49IDApIHsKKyNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAorICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOworI2Vsc2UKKyAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKKyNlbmRpZgorICAgICAgICB0LT5zb2NrID0gLTE7CisgICAgICAgIGlmIChzdXAgIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHN1cC0+bG9jYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VwLT5zZXJ2ZXIuc3VuX3BhdGhbMF0gIT0gMCkgeworICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJjbG9zZTogc2VydmVyIHVubGluayhcIiVzXCIpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwLT5zZXJ2ZXIuc3VuX3BhdGgpKTsKKyAgICAgICAgICAgICAgICAgIHVubGluayhzdXAtPnNlcnZlci5zdW5fcGF0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VwLT5jbGllbnQuc3VuX3BhdGhbMF0gIT0gMCkgeworICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJjbG9zZTogY2xpZW50IHVubGluayhcIiVzXCIpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwLT5jbGllbnQuc3VuX3BhdGgpKTsKKyAgICAgICAgICAgICAgICAgIHVubGluayhzdXAtPmNsaWVudC5zdW5fcGF0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByYzsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCisKKworc3RhdGljIGludAorbmV0c25tcF91bml4X2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZhcmVuZCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIG5ld3NvY2sgPSAtMTsKKyAgICBzb2NrbGVuX3QgICAgICAgZmFyZW5kbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bik7CisKKyAgICBmYXJlbmQgPSAoc3RydWN0IHNvY2thZGRyICopIG1hbGxvYyhmYXJlbmRsZW4pOworCisgICAgaWYgKGZhcmVuZCA9PSBOVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEluZGljYXRlIHRoYXQgdGhlIGFjY2VwdGFuY2Ugb2YgdGhpcyBzb2NrZXQgZmFpbGVkLgorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJhY2NlcHQ6IG1hbGxvYyBmYWlsZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBtZW1zZXQoZmFyZW5kLCAwLCBmYXJlbmRsZW4pOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKyAgICAgICAgbmV3c29jayA9IGFjY2VwdCh0LT5zb2NrLCBmYXJlbmQsICZmYXJlbmRsZW4pOworCisgICAgICAgIGlmIChuZXdzb2NrIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsImFjY2VwdCBmYWlsZWQgcmMgJWQgZXJybm8gJWQgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgZnJlZShmYXJlbmQpOworICAgICAgICAgICAgcmV0dXJuIG5ld3NvY2s7CisgICAgICAgIH0KKworICAgICAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHQtPmRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJhY2NlcHQgc3VjY2VlZGVkIChmYXJlbmQgJXAgbGVuICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZmFyZW5kLCAoaW50KSBmYXJlbmRsZW4pKTsKKyAgICAgICAgdC0+ZGF0YSA9IGZhcmVuZDsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKKyAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19TTkRCVUYsIDEsIDApOworICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1JDVkJVRiwgMSwgMCk7CisgICAgICAgIHJldHVybiBuZXdzb2NrOworICAgIH0gZWxzZSB7CisgICAgICAgIGZyZWUoZmFyZW5kKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KK30KKworc3RhdGljIGludCBjcmVhdGVfcGF0aCA9IDA7CitzdGF0aWMgbW9kZV90IGNyZWF0ZV9tb2RlOworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5JWF9TT0NLRVRfUEFUSFMKKy8qKiBJZiB0cnlpbmcgdG8gY3JlYXRlIHVuaXggc29ja2V0cyBpbiBub25leGlzdGluZyBkaXJlY3RvcmllcyB0aGVuCisgKiAgdHJ5IHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHdpdGggbWFzayBtb2RlLgorICovCit2b2lkIG5ldHNubXBfdW5peF9jcmVhdGVfcGF0aF93aXRoX21vZGUoaW50IG1vZGUpCit7CisgICAgY3JlYXRlX3BhdGggPSAxOworICAgIGNyZWF0ZV9tb2RlID0gbW9kZTsKK30KKworLyoqIElmIHRyeWluZyB0byBjcmVhdGUgdW5peCBzb2NrZXRzIGluIG5vbmV4aXN0aW5nIGRpcmVjdG9yaWVzIHRoZW4KKyAqICBmYWlsLgorICovCit2b2lkIG5ldHNubXBfdW5peF9kb250X2NyZWF0ZV9wYXRoKHZvaWQpCit7CisgICAgY3JlYXRlX3BhdGggPSAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5JWF9TT0NLRVRfUEFUSFMgKi8KKworLyoKKyAqIE9wZW4gYSBVbml4LWRvbWFpbiB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCisgKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcworICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvIChhbmQgd2UgbWFrZSB1cCBhIHRlbXBvcmFyeSBuYW1lIGZvcgorICogdGhlIGxvY2FsIGVuZCBvZiB0aGUgY29ubmVjdGlvbikuCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91bml4X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfdW4gKmFkZHIsIGludCBsb2NhbCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisgICAgc29ja2FkZHJfdW5fcGFpciAqc3VwID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOworCisjaWZkZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgIC8qIFNQRUNJQUwgQ0lSQ1VNU1RBTkNFOiBXZSBzdGlsbCB3YW50IEFnZW50WCB0byBiZSBhYmxlIHRvIG9wZXJhdGUsCisgICAgICAgc28gd2UgYWxsb3cgZm9yIHVuaXggZG9tYWluIHNvY2t0ZXMgdG8gc3RpbGwgbGlzdGVuIHdoZW4gZXZlcnl0aGluZworICAgICAgIGVsc2UgaXNuJ3QgYWxsb3dlZCB0by4gIFRodXMsIHdlIGlnbm9yZSB0aGlzIGRlZmluZSBpbiB0aGlzIGZpbGUuCisgICAgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisKKyAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnN1bl9mYW1pbHkgIT0gQUZfVU5JWCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RyYW5zcG9ydCk7CisgICAgaWYgKHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBERUJVR0lGKCJuZXRzbm1wX3VuaXgiKSB7CisgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdW5peF9mbXRhZGRyKE5VTEwsICh2b2lkICopYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpOworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgIm9wZW4gJXMgJXNcbiIsIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAorICAgICAgICAgICAgICAgICAgICBzdHIpKTsKKyAgICAgICAgZnJlZShzdHIpOworICAgIH0KKworICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfVW5peERvbWFpbjsKKyAgICB0LT5kb21haW5fbGVuZ3RoID0KKyAgICAgICAgc2l6ZW9mKG5ldHNubXBfVW5peERvbWFpbikgLyBzaXplb2YobmV0c25tcF9Vbml4RG9tYWluWzBdKTsKKworICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKHNvY2thZGRyX3VuX3BhaXIpKTsKKyAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtZW1zZXQodC0+ZGF0YSwgMCwgc2l6ZW9mKHNvY2thZGRyX3VuX3BhaXIpKTsKKyAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzb2NrYWRkcl91bl9wYWlyKTsKKyAgICBzdXAgPSAoc29ja2FkZHJfdW5fcGFpciAqKSB0LT5kYXRhOworCisgICAgdC0+c29jayA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKHQtPnNvY2sgPCAwKSB7CisgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU07CisKKyAgICBpZiAobG9jYWwpIHsKKyAgICAgICAgdC0+bG9jYWwgPSAodV9jaGFyICopbWFsbG9jKHN0cmxlbihhZGRyLT5zdW5fcGF0aCkpOworICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5sb2NhbCwgYWRkci0+c3VuX3BhdGgsIHN0cmxlbihhZGRyLT5zdW5fcGF0aCkpOworICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSBzdHJsZW4oYWRkci0+c3VuX3BhdGgpOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCB0byB0aGUgZ2l2ZW4KKyAgICAgICAgICogcGF0aCAodW5saW5raW5nIGl0IGZpcnN0LCB0byBhdm9pZCBlcnJvcnMpLgorICAgICAgICAgKi8KKworICAgICAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTjsKKworICAgICAgICB1bmxpbmsoYWRkci0+c3VuX3BhdGgpOworICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLCBTVU5fTEVOKGFkZHIpKTsKKworICAgICAgICBpZiAocmMgIT0gMCAmJiBlcnJubyA9PSBFTk9FTlQgJiYgY3JlYXRlX3BhdGgpIHsKKyAgICAgICAgICAgIHJjID0gbWtkaXJoaWVyKGFkZHItPnN1bl9wYXRoLCBjcmVhdGVfbW9kZSwgMSk7CisgICAgICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfdW5peF9jbG9zZSh0KTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwgU1VOX0xFTihhZGRyKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfdHJhbnNwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBiaW5kIFwiJXNcIiwgZXJybm8gJWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnN1bl9wYXRoLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICBuZXRzbm1wX3VuaXhfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTYXZlIHRoZSBhZGRyZXNzIGluIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YSBwb2ludGVyIGZvciBsYXRlcgorICAgICAgICAgKiB1c2UgYnkgbmV0c25tcF91bml4X2Nsb3NlLgorICAgICAgICAgKi8KKworICAgICAgICBzdXAtPnNlcnZlci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgICAgICAgc3RyY3B5KHN1cC0+c2VydmVyLnN1bl9wYXRoLCBhZGRyLT5zdW5fcGF0aCk7CisgICAgICAgIHN1cC0+bG9jYWwgPSAxOworCisgICAgICAgIC8qCisgICAgICAgICAqIE5vdyBzaXQgaGVyZSBhbmQgbGlzdGVuIGZvciBjb25uZWN0aW9ucyB0byBhcnJpdmUuCisgICAgICAgICAqLworCisgICAgICAgIHJjID0gbGlzdGVuKHQtPnNvY2ssIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTik7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X3RyYW5zcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgbGlzdGVuIHRvIFwiJXNcIiwgZXJybm8gJWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnN1bl9wYXRoLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICBuZXRzbm1wX3VuaXhfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIHQtPnJlbW90ZSA9ICh1X2NoYXIgKiltYWxsb2Moc3RybGVuKGFkZHItPnN1bl9wYXRoKSk7CisgICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5yZW1vdGUsIGFkZHItPnN1bl9wYXRoLCBzdHJsZW4oYWRkci0+c3VuX3BhdGgpKTsKKyAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IHN0cmxlbihhZGRyLT5zdW5fcGF0aCk7CisKKyAgICAgICAgcmMgPSBjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfdHJhbnNwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBjb25uZWN0IHRvIFwiJXNcIiwgZXJybm8gJWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnN1bl9wYXRoLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICBuZXRzbm1wX3VuaXhfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTYXZlIHRoZSByZW1vdGUgYWRkcmVzcyBpbiB0aGUgdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IKKyAgICAgICAgICogbGF0ZXIgdXNlIGJ5IG5ldHNubXBfdW5peF9zZW5kLgorICAgICAgICAgKi8KKworICAgICAgICBzdXAtPnNlcnZlci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgICAgICAgc3RyY3B5KHN1cC0+c2VydmVyLnN1bl9wYXRoLCBhZGRyLT5zdW5fcGF0aCk7CisgICAgICAgIHN1cC0+bG9jYWwgPSAwOworICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19TTkRCVUYsIGxvY2FsLCAwKTsKKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fUkNWQlVGLCBsb2NhbCwgMCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNZXNzYWdlIHNpemUgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyB0cmFuc3BvcnQgKGhlbmNlIG1zZ01heFNpemUKKyAgICAgKiBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBsZWdhbCBzaXplIG9mIGFuIFNOTVAgbWVzc2FnZSkuCisgICAgICovCisKKyAgICB0LT5tc2dNYXhTaXplID0gMHg3ZmZmZmZmZjsKKyAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF91bml4X3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfdW5peF9zZW5kOworICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3VuaXhfY2xvc2U7CisgICAgdC0+Zl9hY2NlcHQgICA9IG5ldHNubXBfdW5peF9hY2NlcHQ7CisgICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfdW5peF9mbXRhZGRyOworCisgICAgcmV0dXJuIHQ7Cit9CisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdW5peF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHJpbmcsIGludCBsb2NhbCwKKwkJCSAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKKworICAgIGlmIChzdHJpbmcgJiYgKnN0cmluZyAhPSAnXDAnKSB7CisgICAgfSBlbHNlIGlmIChkZWZhdWx0X3RhcmdldCAmJiAqZGVmYXVsdF90YXJnZXQgIT0gJ1wwJykgeworICAgICAgc3RyaW5nID0gZGVmYXVsdF90YXJnZXQ7CisgICAgfQorCisgICAgaWYgKChzdHJpbmcgIT0gTlVMTCAmJiAqc3RyaW5nICE9ICdcMCcpICYmCisJKHN0cmxlbihzdHJpbmcpIDwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKSkgeworICAgICAgICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICAgICAgICBtZW1zZXQoYWRkci5zdW5fcGF0aCwgMCwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKKyAgICAgICAgc3RybGNweShhZGRyLnN1bl9wYXRoLCBzdHJpbmcsIHNpemVvZihhZGRyLnN1bl9wYXRoKSk7CisgICAgICAgIHJldHVybiBuZXRzbm1wX3VuaXhfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0cmluZyAhPSBOVUxMICYmICpzdHJpbmcgIT0gJ1wwJykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlBhdGggdG9vIGxvbmcgZm9yIFVuaXggZG9tYWluIHRyYW5zcG9ydFxuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91bml4X2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOworCisgICAgaWYgKG9fbGVuID4gMCAmJiBvX2xlbiA8IChzaXplb2YoYWRkci5zdW5fcGF0aCkgLSAxKSkgeworICAgICAgICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICAgICAgICBtZW1zZXQoYWRkci5zdW5fcGF0aCwgMCwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKKyAgICAgICAgc3RybGNweShhZGRyLnN1bl9wYXRoLCAoY29uc3QgY2hhciAqKW8sIHNpemVvZihhZGRyLnN1bl9wYXRoKSk7CisgICAgICAgIHJldHVybiBuZXRzbm1wX3VuaXhfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9fbGVuID4gMCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlBhdGggdG9vIGxvbmcgZm9yIFVuaXggZG9tYWluIHRyYW5zcG9ydFxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworCit2b2lkCituZXRzbm1wX3VuaXhfY3Rvcih2b2lkKQoreworICAgIHVuaXhEb21haW4ubmFtZSA9IG5ldHNubXBfVW5peERvbWFpbjsKKyAgICB1bml4RG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfVW5peERvbWFpbikgLyBzaXplb2Yob2lkKTsKKyAgICB1bml4RG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKKyAgICB1bml4RG9tYWluLnByZWZpeFswXSA9ICJ1bml4IjsKKworICAgIHVuaXhEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7CisgICAgdW5peERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF91bml4X2NyZWF0ZV90c3RyaW5nOworICAgIHVuaXhEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfdW5peF9jcmVhdGVfb3N0cmluZzsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdW5peERvbWFpbik7Cit9CisKKyNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKKy8qIHN1cHBvcnQgZm9yIFNOTVB2MSBhbmQgU05NUHYyYyBvbiB1bml4IGRvbWFpbiovCisKKyNkZWZpbmUgRVhBTVBMRV9DT01NVU5JVFkgIkNPTU1VTklUWSIKK3R5cGVkZWYgc3RydWN0IGNvbTJTZWNVbml4RW50cnlfcyB7CisgICAgY29uc3QgY2hhciogICAgIHNvY2twYXRoOworICAgIGNvbnN0IGNoYXIqICAgICBzZWNOYW1lOworICAgIGNvbnN0IGNoYXIqICAgICBjb250ZXh0TmFtZTsKKyAgICBzdHJ1Y3QgY29tMlNlY1VuaXhFbnRyeV9zICpuZXh0OworICAgIHVuc2lnbmVkIHNob3J0ICBwYXRobGVuOworICAgIGNvbnN0IGNoYXIgICAgICBjb21tdW5pdHlbMV07Cit9IGNvbTJTZWNVbml4RW50cnk7CisKK3N0YXRpYyBjb20yU2VjVW5peEVudHJ5ICAgKmNvbTJTZWNVbml4TGlzdCA9IE5VTEwsICpjb20yU2VjVW5peExpc3RMYXN0ID0gTlVMTDsKKworCitpbnQKK25ldHNubXBfdW5peF9nZXRTZWNOYW1lKHZvaWQgKm9wYXF1ZSwgaW50IG9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21tdW5pdHksCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tbXVuaXR5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipzZWNOYW1lLCBjb25zdCBjaGFyICoqY29udGV4dE5hbWUpCit7CisgICAgY29uc3QgY29tMlNlY1VuaXhFbnRyeSAgICpjOworICAgIHN0cnVjdCBzb2NrYWRkcl91biAqdG8gPSAoc3RydWN0IHNvY2thZGRyX3VuICopIG9wYXF1ZTsKKyAgICBjaGFyICAgICAgICAgICAqenRjb21tdW5pdHkgPSBOVUxMOworCisgICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgeworICAgICAgICAqc2VjTmFtZSA9IE5VTEw7ICAvKiBIYXZlbid0IGZvdW5kIGFueXRoaW5nIHlldCAqLworICAgIH0KKworICAgIC8qCisgICAgICogU3BlY2lhbCBjYXNlIGlmIHRoZXJlIGFyZSBOTyBlbnRyaWVzIChhcyBvcHBvc2VkIHRvIG5vIE1BVENISU5HCisgICAgICogZW50cmllcykuCisgICAgICovCisKKyAgICBpZiAoY29tMlNlY1VuaXhMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwgIm5vIGNvbTJzZWMgZW50cmllc1xuIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIG5vIHVuaXggc29ja2V0IHBhdGgsIHRoZW4gdGhlcmUgY2FuIGJlIG5vIHZhbGlkIHNlY3VyaXR5CisgICAgICogbmFtZS4KKyAgICAgKi8KKworICAgIGlmIChvcGFxdWUgPT0gTlVMTCB8fCBvbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pIHx8CisgICAgICAgIHRvLT5zdW5fZmFtaWx5ICE9IEFGX1VOSVgpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgIm5vIHVuaXggZGVzdGluZSBhZGRyZXNzIGluIFBEVT9cbiIpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgREVCVUdJRigibmV0c25tcF91bml4X2dldFNlY05hbWUiKSB7CisgICAgICAgIHp0Y29tbXVuaXR5ID0gKGNoYXIgKiltYWxsb2MoY29tbXVuaXR5X2xlbiArIDEpOworICAgICAgICBpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgeworICAgICAgICAgICAgbWVtY3B5KHp0Y29tbXVuaXR5LCBjb21tdW5pdHksIGNvbW11bml0eV9sZW4pOworICAgICAgICAgICAgenRjb21tdW5pdHlbY29tbXVuaXR5X2xlbl0gPSAnXDAnOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwgInJlc29sdmUgPFwiJXNcIj5cbiIsCisgICAgICAgICAgICAgICAgICAgIHp0Y29tbXVuaXR5ID8genRjb21tdW5pdHkgOiAiPG1hbGxvYyBlcnJvcj4iKSk7CisgICAgfQorCisgICAgZm9yIChjID0gY29tMlNlY1VuaXhMaXN0OyBjICE9IE5VTEw7IGMgPSBjLT5uZXh0KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIsImNvbXBhcmUgPFwiJXNcIix0byBzb2NrZXQgJXM+IiwKKyAgICAgICAgICAgICAgICAgICAgYy0+Y29tbXVuaXR5LCBjLT5zb2NrcGF0aCApKTsKKyAgICAgICAgaWYgKChjb21tdW5pdHlfbGVuID09IHN0cmxlbihjLT5jb21tdW5pdHkpKSAmJgorICAgICAgICAgICAgKG1lbWNtcChjb21tdW5pdHksIGMtPmNvbW11bml0eSwgY29tbXVuaXR5X2xlbikgPT0gMCkgJiYKKyAgICAgICAgICAgIC8qIGNvbXBhcmUgc29ja3BhdGgsIGlmIHBhdGhsZW4gPT0gMCwgYWx3YXlzIG1hdGNoICovCisgICAgICAgICAgICAoc3RybGVuKHRvLT5zdW5fcGF0aCkgPT0gYy0+cGF0aGxlbiB8fCBjLT5wYXRobGVuID09IDApICYmCisgICAgICAgICAgICAobWVtY21wKHRvLT5zdW5fcGF0aCwgYy0+c29ja3BhdGgsIGMtPnBhdGhsZW4pID09IDApCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCAiLi4uIFNVQ0NFU1NcbiIpKTsKKyAgICAgICAgICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAqc2VjTmFtZSA9IGMtPnNlY05hbWU7CisgICAgICAgICAgICAgICAgKmNvbnRleHROYW1lID0gYy0+Y29udGV4dE5hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwgIi4uLiBub3BlXG4iKSk7CisgICAgfQorICAgIGlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7CisgICAgICAgIGZyZWUoenRjb21tdW5pdHkpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKwordm9pZAorbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpwYXJhbSkKK3sKKyAgICBjaGFyICAgc2VjTmFtZVtWQUNNU1RSSU5HTEVOICsgMV07CisgICAgc2l6ZV90IHNlY05hbWVMZW47CisgICAgY2hhciAgIGNvbnRleHROYW1lW1ZBQ01TVFJJTkdMRU4gKyAxXTsKKyAgICBzaXplX3QgY29udGV4dE5hbWVMZW47CisgICAgY2hhciAgIGNvbW11bml0eVtDT01NVU5JVFlfTUFYX0xFTiArIDFdOworICAgIHNpemVfdCBjb21tdW5pdHlMZW47CisgICAgY2hhciAgIHNvY2twYXRoW3NpemVvZigoKHN0cnVjdCBzb2NrYWRkcl91biopMCktPnN1bl9wYXRoKSArIDFdOworICAgIHNpemVfdCBzb2NrcGF0aExlbjsKKworICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7CisgICAgaWYgKHN0cmNtcChzZWNOYW1lLCAiLUNuIikgPT0gMCkgeworICAgICAgICBpZiAoIXBhcmFtKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTlRFWFRfTkFNRSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBjb250ZXh0TmFtZSwgc2l6ZW9mKGNvbnRleHROYW1lKSk7CisgICAgICAgIGNvbnRleHROYW1lTGVuID0gc3RybGVuKGNvbnRleHROYW1lKSArIDE7CisgICAgICAgIGlmIChjb250ZXh0TmFtZUxlbiA+IFZBQ01TVFJJTkdMRU4pIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvbnRleHQgbmFtZSB0b28gbG9uZyIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgTkFNRSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRleHROYW1lTGVuID0gMDsKKyAgICB9CisKKyAgICBzZWNOYW1lTGVuID0gc3RybGVuKHNlY05hbWUpICsgMTsKKyAgICBpZiAoc2VjTmFtZUxlbiA9PSAxKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImVtcHR5IE5BTUUgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKHNlY05hbWVMZW4gPiBWQUNNU1RSSU5HTEVOKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoInNlY3VyaXR5IG5hbWUgdG9vIGxvbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBTT0NLUEFUSCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBzb2NrcGF0aCwgc2l6ZW9mKHNvY2twYXRoKSk7CisgICAgaWYgKHNvY2twYXRoWzBdID09ICdcMCcpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiZW1wdHkgU09DS1BBVEggcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc29ja3BhdGhMZW4gPSBzdHJsZW4oc29ja3BhdGgpICsgMTsKKyAgICBpZiAoc29ja3BhdGhMZW4gPiBzaXplb2YoKChzdHJ1Y3Qgc29ja2FkZHJfdW4qKTApLT5zdW5fcGF0aCkpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigic29ja3BhdGggdG9vIGxvbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgY29tbXVuaXR5LCBzaXplb2YoY29tbXVuaXR5KSk7CisgICAgaWYgKGNvbW11bml0eVswXSA9PSAnXDAnKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImVtcHR5IENPTU1VTklUWSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb21tdW5pdHlMZW4gPSBzdHJsZW4oY29tbXVuaXR5KSArIDE7CisgICAgaWYgKGNvbW11bml0eUxlbiA+PSBDT01NVU5JVFlfTUFYX0xFTikgeworICAgICAgICBjb25maWdfcGVycm9yKCJjb21tdW5pdHkgbmFtZSB0b28gbG9uZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjb21tdW5pdHlMZW4gPT0gc2l6ZW9mKEVYQU1QTEVfQ09NTVVOSVRZKSAmJgorICAgICAgICBtZW1jbXAoY29tbXVuaXR5LCBFWEFNUExFX0NPTU1VTklUWSwgc2l6ZW9mKEVYQU1QTEVfQ09NTVVOSVRZKSkgPT0gMCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIERlYWwgd2l0aCB0aGUgImRlZmF1bHQiIGNhc2UgKi8KKyAgICBpZihzdHJjbXAoc29ja3BhdGgsICJkZWZhdWx0IikgPT0gMCkgeworICAgICAgICBzb2NrcGF0aExlbiA9IDA7CisgICAgfQorCisgICAgeworICAgICAgICB2b2lkKiB2ID0gbWFsbG9jKG9mZnNldG9mKGNvbTJTZWNVbml4RW50cnksIGNvbW11bml0eSkgKyBjb21tdW5pdHlMZW4gKworICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2twYXRoTGVuICsgc2VjTmFtZUxlbiArIGNvbnRleHROYW1lTGVuKTsKKyAgICAgICAgY29tMlNlY1VuaXhFbnRyeSogZSA9IChjb20yU2VjVW5peEVudHJ5Kil2OworICAgICAgICBjaGFyKiBsYXN0ID0gKChjaGFyKil2KSArIG9mZnNldG9mKGNvbTJTZWNVbml4RW50cnksIGNvbW11bml0eSk7CisgICAgICAgIGlmIChlID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1lbW9yeSBlcnJvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eSIsCisgICAgICAgICAgICAgICAgICAgICI8XCIlc1wiLCBcIiUuKnNcIj4gPT4gXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICBjb21tdW5pdHksIChpbnQpc29ja3BhdGhMZW4sIHNvY2twYXRoLCBzZWNOYW1lKSk7CisKKyAgICAgICAgbWVtY3B5KGxhc3QsIGNvbW11bml0eSwgY29tbXVuaXR5TGVuKTsKKyAgICAgICAgbGFzdCArPSBjb21tdW5pdHlMZW47CisKKyAgICAgICAgaWYgKHNvY2twYXRoTGVuKSB7CisgICAgICAgICAgICBlLT5zb2NrcGF0aCA9IGxhc3Q7CisgICAgICAgICAgICBtZW1jcHkobGFzdCwgc29ja3BhdGgsIHNvY2twYXRoTGVuKTsKKyAgICAgICAgICAgIGxhc3QgKz0gc29ja3BhdGhMZW47CisgICAgICAgICAgICBlLT5wYXRobGVuID0gc29ja3BhdGhMZW4gLSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZS0+c29ja3BhdGggPSBsYXN0IC0gMTsKKyAgICAgICAgICAgIGUtPnBhdGhsZW4gPSAwOworICAgICAgICB9CisKKyAgICAgICAgZS0+c2VjTmFtZSA9IGxhc3Q7CisgICAgICAgIG1lbWNweShsYXN0LCBzZWNOYW1lLCBzZWNOYW1lTGVuKTsKKyAgICAgICAgbGFzdCArPSBzZWNOYW1lTGVuOworCisgICAgICAgIGlmIChjb250ZXh0TmFtZUxlbikgeworICAgICAgICAgICAgZS0+Y29udGV4dE5hbWUgPSBsYXN0OworICAgICAgICAgICAgbWVtY3B5KGxhc3QsIGNvbnRleHROYW1lLCBjb250ZXh0TmFtZUxlbik7CisgICAgICAgICAgICBsYXN0ICs9IGNvbnRleHROYW1lTGVuOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGUtPmNvbnRleHROYW1lID0gbGFzdCAtIDE7CisKKyAgICAgICAgZS0+bmV4dCA9IE5VTEw7CisKKyAgICAgICAgaWYgKGNvbTJTZWNVbml4TGlzdExhc3QgIT0gTlVMTCkgeworICAgICAgICAgICAgY29tMlNlY1VuaXhMaXN0TGFzdC0+bmV4dCA9IGU7CisgICAgICAgICAgICBjb20yU2VjVW5peExpc3RMYXN0ID0gZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbTJTZWNVbml4TGlzdExhc3QgPSBjb20yU2VjVW5peExpc3QgPSBlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkCituZXRzbm1wX3VuaXhfY29tMlNlY0xpc3RfZnJlZSh2b2lkKQoreworICAgIGNvbTJTZWNVbml4RW50cnkgICAqZSA9IGNvbTJTZWNVbml4TGlzdDsKKyAgICB3aGlsZSAoZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbTJTZWNVbml4RW50cnkgICAqdG1wID0gZTsKKyAgICAgICAgZSA9IGUtPm5leHQ7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICB9CisgICAgY29tMlNlY1VuaXhMaXN0ID0gY29tMlNlY1VuaXhMaXN0TGFzdCA9IE5VTEw7Cit9CisjZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KKwordm9pZAorbmV0c25tcF91bml4X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKKyAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImNvbTJzZWN1bml4IiwgbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VuaXhfY29tMlNlY0xpc3RfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlstQ24gQ09OVEVYVF0gc2VjTmFtZSBzb2NrcGF0aCBjb21tdW5pdHkiKTsKKyNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi91Y2RfY29tcGF0LmMgYi9zbm1wbGliL3VjZF9jb21wYXQuYwppbmRleCA0ZjQyMzRhLi42NGMxZTEzIDEwMDY0NAotLS0gYS9zbm1wbGliL3VjZF9jb21wYXQuYworKysgYi9zbm1wbGliL3VjZF9jb21wYXQuYwpAQCAtNCwxMiArNCwxNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21pYi5oPgkvKiBmb3IgT0lEIE8vUCBmb3JtYXQgZW51bXMgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVjZF9jb21wYXRpYmlsaXR5LCBsaWJuZXRzbm1wKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVUNEX0NPTVBBVElCSUxJVFkKIC8qCiAgKiB1c2UgPG5ldHNubXBfc2Vzc2lvbiAqKS0+c19zbm1wX2Vycm5vIGluc3RlYWQgCiAgKi8KQEAgLTIyLDEwICsyNywxMiBAQAogLyoKICAqIHN5bmNoX3Jlc2V0IGFuZCBzeW5jaF9zZXR1cCBhcmUgbm8gbG9uZ2VyIHVzZWQuIAogICovCitORVRTTk1QX0lNUE9SVCB2b2lkIHNubXBfc3luY2hfcmVzZXQobmV0c25tcF9zZXNzaW9uICogbm90dXNlZCk7CiB2b2lkCiBzbm1wX3N5bmNoX3Jlc2V0KG5ldHNubXBfc2Vzc2lvbiAqIG5vdHVzZWQpCiB7CiB9CitORVRTTk1QX0lNUE9SVCB2b2lkIHNubXBfc3luY2hfc2V0dXAobmV0c25tcF9zZXNzaW9uICogbm90dXNlZCk7CiB2b2lkCiBzbm1wX3N5bmNoX3NldHVwKG5ldHNubXBfc2Vzc2lvbiAqIG5vdHVzZWQpCiB7CkBAIC0yMTgsMyArMjI1LDYgQEAKIHsKICAgbmV0c25tcF9kc19zaHV0ZG93bigpOwogfQorI2Vsc2UgLyogIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVUNEX0NPTVBBVElCSUxJVFkgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQodWNkX2NvbXBhdGliaWxpdHkpOworI2VuZGlmIC8qICFORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VDRF9DT01QQVRJQklMSVRZICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3ZhY20uYyBiL3NubXBsaWIvdmFjbS5jCmluZGV4IDM1NTFjN2YuLmM2Mzk3ODUgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvdmFjbS5jCisrKyBiL3NubXBsaWIvdmFjbS5jCkBAIC0zMSwxMSArMzEsNyBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00NSwxMCArNDEsNiBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTYyLDYgKzU0LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdmFjbS5oPgogCiBzdGF0aWMgc3RydWN0IHZhY21fdmlld0VudHJ5ICp2aWV3TGlzdCA9IE5VTEwsICp2aWV3U2NhblB0ciA9IE5VTEw7CkBAIC0xNjYsNyArMTU5LDcgQEAKIH0KIAogdm9pZAotdmFjbV9wYXJzZV9jb25maWdfdmlldyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3ZhY21fcGFyc2VfY29uZmlnX3ZpZXcoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmxpbmUpCiB7CiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5IHZpZXc7CiAgICAgc3RydWN0IHZhY21fdmlld0VudHJ5ICp2cHRyOwpAQCAtMTc2LDE3ICsxNjksMTcgQEAKICAgICBzaXplX3QgICAgICAgICAgbGVuOwogCiAgICAgdmlldy52aWV3U3RhdHVzID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICB2aWV3LnZpZXdTdG9yYWdlVHlwZSA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgdmlldy52aWV3VHlwZSA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgbGVuID0gc2l6ZW9mKHZpZXcudmlld05hbWUpOwogICAgIGxpbmUgPQogICAgICAgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhsaW5lLCAodV9jaGFyICoqKSAmIHZpZXdOYW1lLCAmbGVuKTsKICAgICB2aWV3LnZpZXdTdWJ0cmVlTGVuID0gTUFYX09JRF9MRU47CiAgICAgbGluZSA9Ci0gICAgICAgIHJlYWRfY29uZmlnX3JlYWRfb2JqaWQobGluZSwgKG9pZCAqKikgJiB2aWV3U3VidHJlZSwKKyAgICAgICAgcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdChsaW5lLCAob2lkICoqKSAmIHZpZXdTdWJ0cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LnZpZXdTdWJ0cmVlTGVuKTsKIAogICAgIHZwdHIgPQpAQCAtMjg0LDcgKzI3Nyw4IEBACiB9CiAKIGNoYXIgKgotX3ZhY21fcGFyc2VfY29uZmlnX2FjY2Vzc19jb21tb24oc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKiphcHRyLCBjaGFyICpsaW5lKQorX3ZhY21fcGFyc2VfY29uZmlnX2FjY2Vzc19jb21tb24oc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKiphcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGluZSkKIHsKICAgICBzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSBhY2Nlc3M7CiAgICAgY2hhciAgICAgICAgICAgKmNQcmVmaXggPSAoY2hhciAqKSAmYWNjZXNzLmNvbnRleHRQcmVmaXg7CkBAIC0yOTIsMTUgKzI4NiwxNSBAQAogICAgIHNpemVfdCAgICAgICAgICBsZW47CiAKICAgICBhY2Nlc3Muc3RhdHVzID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICBhY2Nlc3Muc3RvcmFnZVR5cGUgPSBhdG9pKGxpbmUpOwotICAgIGxpbmUgPSBza2lwX3Rva2VuKGxpbmUpOworICAgIGxpbmUgPSBza2lwX3Rva2VuX2NvbnN0KGxpbmUpOwogICAgIGFjY2Vzcy5zZWN1cml0eU1vZGVsID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICBhY2Nlc3Muc2VjdXJpdHlMZXZlbCA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgYWNjZXNzLmNvbnRleHRNYXRjaCA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgbGVuICA9IHNpemVvZihhY2Nlc3MuZ3JvdXBOYW1lKTsKICAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcobGluZSwgKHVfY2hhciAqKikgJmdOYW1lLCAgICZsZW4pOwogICAgIGxlbiAgPSBzaXplb2YoYWNjZXNzLmNvbnRleHRQcmVmaXgpOwpAQCAtMzIzLDExICszMTcsMTEgQEAKICAgICAoKmFwdHIpLT5zZWN1cml0eU1vZGVsID0gYWNjZXNzLnNlY3VyaXR5TW9kZWw7CiAgICAgKCphcHRyKS0+c2VjdXJpdHlMZXZlbCA9IGFjY2Vzcy5zZWN1cml0eUxldmVsOwogICAgICgqYXB0ciktPmNvbnRleHRNYXRjaCAgPSBhY2Nlc3MuY29udGV4dE1hdGNoOwotICAgIHJldHVybiBsaW5lOworICAgIHJldHVybiBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIGxpbmUpOwogfQogCiB2b2lkCi12YWNtX3BhcnNlX2NvbmZpZ19hY2Nlc3MoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit2YWNtX3BhcnNlX2NvbmZpZ19hY2Nlc3MoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmxpbmUpCiB7CiAgICAgc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKmFwdHI7CiAgICAgY2hhciAgICAgICAgICAgKnJlYWRWaWV3LCAqd3JpdGVWaWV3LCAqbm90aWZ5VmlldzsKQEAgLTM1Myw3ICszNDcsNyBAQAogfQogCiB2b2lkCi12YWNtX3BhcnNlX2NvbmZpZ19hdXRoX2FjY2Vzcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3ZhY21fcGFyc2VfY29uZmlnX2F1dGhfYWNjZXNzKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpsaW5lKQogewogICAgIHN0cnVjdCB2YWNtX2FjY2Vzc0VudHJ5ICphcHRyOwogICAgIGludCAgICAgICAgICAgICBhdXRodHlwZTsKQEAgLTM2NSw3ICszNTksNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRodHlwZSA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAKICAgICB2aWV3ID0gKGNoYXIgKikgYXB0ci0+dmlld3NbYXV0aHR5cGVdOwogICAgIGxlbiAgPSBzaXplb2YoYXB0ci0+dmlld3NbYXV0aHR5cGVdKTsKQEAgLTQwMSw3ICszOTUsNyBAQAogfQogCiB2b2lkCi12YWNtX3BhcnNlX2NvbmZpZ19ncm91cChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3ZhY21fcGFyc2VfY29uZmlnX2dyb3VwKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpsaW5lKQogewogICAgIHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgZ3JvdXA7CiAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqZ3B0cjsKQEAgLTQxMCwxMSArNDA0LDExIEBACiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKIAogICAgIGdyb3VwLnN0YXR1cyA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgZ3JvdXAuc3RvcmFnZVR5cGUgPSBhdG9pKGxpbmUpOwotICAgIGxpbmUgPSBza2lwX3Rva2VuKGxpbmUpOworICAgIGxpbmUgPSBza2lwX3Rva2VuX2NvbnN0KGxpbmUpOwogICAgIGdyb3VwLnNlY3VyaXR5TW9kZWwgPSBhdG9pKGxpbmUpOwotICAgIGxpbmUgPSBza2lwX3Rva2VuKGxpbmUpOworICAgIGxpbmUgPSBza2lwX3Rva2VuX2NvbnN0KGxpbmUpOwogICAgIGxlbiA9IHNpemVvZihncm91cC5zZWN1cml0eU5hbWUpOwogICAgIGxpbmUgPQogICAgICAgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhsaW5lLCAodV9jaGFyICoqKSAmIHNlY3VyaXR5TmFtZSwKQEAgLTQ0OSwxMiArNDQzLDEyIEBACiAgICAgZm9yICh2cCA9IGhlYWQ7IHZwOyB2cCA9IHZwLT5uZXh0KSB7CiAgICAgICAgIGlmICghbWVtY21wKHZpZXcsIHZwLT52aWV3TmFtZSwgZ2xlbiArIDEpCiAgICAgICAgICAgICAmJiB2aWV3U3VidHJlZUxlbiA+PSAodnAtPnZpZXdTdWJ0cmVlTGVuIC0gMSkpIHsKLSAgICAgICAgICAgIGludCAgICAgICAgICAgICBtYXNrID0gMHg4MCwgbWFza3BvcyA9IDA7Ci0gICAgICAgICAgICBpbnQgICAgICAgICAgICAgb2lkcG9zOworICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1hc2sgPSAweDgwOworICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgIG9pZHBvcywgbWFza3BvcyA9IDA7CiAgICAgICAgICAgICBmb3VuZCA9IDE7CiAKICAgICAgICAgICAgIGZvciAob2lkcG9zID0gMDsKLSAgICAgICAgICAgICAgICAgZm91bmQgJiYgb2lkcG9zIDwgKGludCkgdnAtPnZpZXdTdWJ0cmVlTGVuIC0gMTsKKyAgICAgICAgICAgICAgICAgZm91bmQgJiYgb2lkcG9zIDwgdnAtPnZpZXdTdWJ0cmVlTGVuIC0gMTsKICAgICAgICAgICAgICAgICAgb2lkcG9zKyspIHsKICAgICAgICAgICAgICAgICBpZiAobW9kZT09VkFDTV9NT0RFX0lHTk9SRV9NQVNLIHx8IChWSUVXX01BU0sodnAsIG1hc2twb3MsIG1hc2spICE9IDApKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3U3VidHJlZVtvaWRwb3NdICE9CkBAIC01MzgsMTUgKzUzMiwxNSBAQAogICAgICAgICAgICAgICogc3VidHJlZSB3ZSBhcmUgY29tcGFyaW5nIGFnYWluc3QuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICh2aWV3U3VidHJlZUxlbiA+PSAodnAtPnZpZXdTdWJ0cmVlTGVuIC0gMSkpIHsKLSAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgbWFzayA9IDB4ODAsIG1hc2twb3MgPSAwOwotICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBvaWRwb3M7CisgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1hc2sgPSAweDgwOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICBvaWRwb3MsIG1hc2twb3MgPSAwOwogICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKIAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogY2hlY2sgdGhlIG1hc2sKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBmb3IgKG9pZHBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICBmb3VuZCAmJiBvaWRwb3MgPCAoaW50KSB2cC0+dmlld1N1YnRyZWVMZW4gLSAxOworICAgICAgICAgICAgICAgICAgICAgZm91bmQgJiYgb2lkcG9zIDwgdnAtPnZpZXdTdWJ0cmVlTGVuIC0gMTsKICAgICAgICAgICAgICAgICAgICAgIG9pZHBvcysrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChWSUVXX01BU0sodnAsIG1hc2twb3MsIG1hc2spICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3U3VidHJlZVtvaWRwb3NdICE9CkBAIC01ODYsMTUgKzU4MCwxNSBAQAogICAgICAgICAgICAgICogcmVzcG9uc2UuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBtYXNrID0gMHg4MCwgbWFza3BvcyA9IDA7Ci0gICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG9pZHBvczsKKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgbWFzayA9IDB4ODA7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgIG9pZHBvcywgbWFza3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgZm91bmQgPSAxOwogCiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBjaGVjayB0aGUgbWFzayB1cCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBwcm92aWRlZCBzdWJ0cmVlCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgZm9yIChvaWRwb3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgZm91bmQgJiYgb2lkcG9zIDwgKGludCkgdmlld1N1YnRyZWVMZW47CisgICAgICAgICAgICAgICAgICAgICBmb3VuZCAmJiBvaWRwb3MgPCB2aWV3U3VidHJlZUxlbjsKICAgICAgICAgICAgICAgICAgICAgIG9pZHBvcysrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChWSUVXX01BU0sodnAsIG1hc2twb3MsIG1hc2spICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3U3VidHJlZVtvaWRwb3NdICE9CkBAIC04NDgsNiArODQyLDcgQEAKICAgICByZXR1cm4gZ3A7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiB2b2lkCiB2YWNtX2Rlc3Ryb3lHcm91cEVudHJ5KGludCBzZWN1cml0eU1vZGVsLCBjb25zdCBjaGFyICpzZWN1cml0eU5hbWUpCiB7CkBAIC04NzMsNiArODY4LDcgQEAKICAgICBmcmVlKHZwKTsKICAgICByZXR1cm47CiB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIHZvaWQKIHZhY21fZGVzdHJveUFsbEdyb3VwRW50cmllcyh2b2lkKQpAQCAtMTA0NCw2ICsxMDQwLDcgQEAKICAgICByZXR1cm4gdnA7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiB2b2lkCiB2YWNtX2Rlc3Ryb3lBY2Nlc3NFbnRyeShjb25zdCBjaGFyICpncm91cE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0UHJlZml4LApAQCAtMTA3NSw2ICsxMDcyLDcgQEAKICAgICBmcmVlKHZwKTsKICAgICByZXR1cm47CiB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIHZvaWQKIHZhY21fZGVzdHJveUFsbEFjY2Vzc0VudHJpZXModm9pZCkKQEAgLTExNDgsMTIgKzExNDYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld1N1YnRyZWVMZW4pOwogfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogdm9pZAogdmFjbV9kZXN0cm95Vmlld0VudHJ5KGNvbnN0IGNoYXIgKnZpZXdOYW1lLAogICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHZpZXdTdWJ0cmVlLCBzaXplX3Qgdmlld1N1YnRyZWVMZW4pCiB7CiAgICAgbmV0c25tcF92aWV3X2Rlc3Ryb3koICZ2aWV3TGlzdCwgdmlld05hbWUsIHZpZXdTdWJ0cmVlLCB2aWV3U3VidHJlZUxlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIHZvaWQKIHZhY21fZGVzdHJveUFsbFZpZXdFbnRyaWVzKHZvaWQpCmRpZmYgLS1naXQgYS9zbm1wbGliL3dpbnBpcGUuYyBiL3NubXBsaWIvd2lucGlwZS5jCmluZGV4IDZmMTM0YjEuLmJiZTM3ZjEgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvd2lucGlwZS5jCisrKyBiL3NubXBsaWIvd2lucGlwZS5jCkBAIC0zMyw5ICszMywxMCBAQAogI2lmZGVmIFdJTjMyCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaD4KICNpbmNsdWRlIDxpby5oPgotI2luY2x1ZGUgPHdpbnNvY2suaD4KIAogc3RhdGljIGludCBJbml0VVBEU29ja2V0KFNPQ0tFVCAqc29jaywgc3RydWN0IHNvY2thZGRyX2luICpzb2NrZXRhZGRyZXNzKQogewpkaWZmIC0tZ2l0IGEvc25tcGxpYi93aW5zZXJ2aWNlLmMgYi9zbm1wbGliL3dpbnNlcnZpY2UuYwppbmRleCBjMzIzY2YwLi5iYzI3ZjhjIDEwMDY0NAotLS0gYS9zbm1wbGliL3dpbnNlcnZpY2UuYworKysgYi9zbm1wbGliL3dpbnNlcnZpY2UuYwpAQCAtNiw2ICs2LDggQEAKIAogI2lmZGVmIFdJTjMyCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKwogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx0Y2hhci5oPgogCkBAIC0zNSw2ICszNywxNyBAQAogI2RlZmluZSBDb3VudE9mKGFycikgKCBzaXplb2YoYXJyKSAvIHNpemVvZihhcnJbMF0pICkKIAogCisjaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChIQVZFX1dJTjMyX1BMQVRGT1JNX1NESykgJiYgIWRlZmluZWQobWluZ3czMikKKyNwcmFnbWEgY29tbWVudChsaWIsICJpcGhscGFwaS5saWIiKQorI2VuZGlmDQorI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKG1pbmd3MzIpDQorI2lmZGVmIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUKKyNwcmFnbWEgY29tbWVudChsaWIsICJzbm1wYXBpLmxpYiIpCisjcHJhZ21hIGNvbW1lbnQobGliLCAibWdtdGFwaS5saWIiKQorI2VuZGlmCisjZW5kaWYKKworIAogICAgIC8qCiAgICAgICogRXh0ZXJuYWwgZ2xvYmFsIHZhcmlhYmxlcyB1c2VkIGhlcmUKICAgICAgKi8KQEAgLTkwLDYgKzEwMywxOCBAQAogICAgICAqLwogc3RhdGljIFZPSUQgKCpTdG9wRnVuY3Rpb24pIChWT0lEKSA9IDBMOwogCisKKyAgICAvKgorICAgICAqIFRvIHVwZGF0ZSB3aW5kb3dzIHNlcnZpY2Ugc3RhdHVzIHRvIFNDTSAKKyAgICAgKi8KK3N0YXRpYyBCT09MIFVwZGF0ZVNlcnZpY2VTdGF0dXMgKERXT1JEIGR3U3RhdHVzLCBEV09SRCBkd0Vycm9yQ29kZSwKKwkJCQkgRFdPUkQgZHdXYWl0SGludCk7CisKKyAgICAvKgorICAgICAqIFRvIFJlcG9ydCBjdXJyZW50IHNlcnZpY2Ugc3RhdHVzIHRvIFNDTSAKKyAgICAgKi8KK3N0YXRpYyBCT09MIFJlcG9ydEN1cnJlbnRTZXJ2aWNlU3RhdHVzIChWT0lEKTsKKwogVk9JRAogUHJvY2Vzc0Vycm9yIChXT1JEIGV2ZW50TG9nVHlwZSwgTFBDVFNUUiBwc3pNZXNzYWdlLCBpbnQgdXNlR2V0TGFzdEVycm9yLCBpbnQgcXVpZXQpOwogCkBAIC01NDksNyArNTc0LDcgQEAKICAgCiAgIGhFdmVudFNvdXJjZSA9IFJlZ2lzdGVyRXZlbnRTb3VyY2UgKE5VTEwsIGFwcF9uYW1lX2xvbmcpOwogICBpZiAoaEV2ZW50U291cmNlICE9IE5VTEwpIHsKLSAgICBMUENTVFIgTG9nU3RyWzFdOworICAgIExQQ1RTVFIgTG9nU3RyWzFdOwogICAgIExvZ1N0clswXSA9IHBzek1lc3NhZ2VGdWxsOwogICAgIAogICAgIGlmIChSZXBvcnRFdmVudCAoaEV2ZW50U291cmNlLCAKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvTWFrZWZpbGUuaW4gYi90ZXN0aW5nL01ha2VmaWxlLmluCmluZGV4IDdiOGEwMDUuLjJhNjQxMzcgMTAwNjQ0Ci0tLSBhL3Rlc3RpbmcvTWFrZWZpbGUuaW4KKysrIGIvdGVzdGluZy9NYWtlZmlsZS5pbgpAQCAtMTAsOCArMTAsNiBAQAogIyBmYWxsYmFjayB0byByZWd1bGFyIFZQQVRIIGZvciBub24tZ251Li4uCiBATk9OX0dOVV9WUEFUSEAgJChzcmNkaXIpCiAKLSNUQVJHCQk9IGV0ZXN0IGt0ZXN0IG1pc2N0ZXN0IHN0ZXN0Ci0KIFVTRUxJQlMJCT0gLi4vc25tcGxpYi9saWJzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogTElCUwkJPSAtTC4uL3NubXBsaWIgJChDQ19SVU5USU1FX0FSRykgLWxzbm1wIEBMSUJTQAogCkBAIC0yMCwxMCArMTgsNDMgQEAKIENQUEZMQUdTCT0gJChTTk1QTElCX0lOQ0xVREVTKSBAQ1BQRkxBR1NACiBDQwkJPSBAQ0NAICQoQ1BQRkxBR1MpCiAKLWFsbDogJChUQVJHKQorYWxsOgorCUBlY2hvICJTZWxlY3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGFyZ2V0cyB0byBydW46IgorCUBlY2hvICIiCisJQGVjaG8gIiAgbWFrZSB0ZXN0ICAgICAgICAtLSBkZWZhdWx0IHRlc3Qgc3VpdGVzIgorCUBlY2hvICIgIG1ha2UgdGVzdGFsbCAgICAgLS0gUnVuIGFsbCBhdmFpbGFibGUgdGVzdHMiCisJQGVjaG8gIiAgbWFrZSB0ZXN0ZmFpbGVkICAtLSBSdW4gb25seSB0aGUgdGVzdHMgdGhhdCBmYWlsZWQgbGFzdCB0aW1lLiIKKwlAZWNobyAiICBtYWtlIHRlc3RzaW1wbGUgIC0tIFJ1biB0ZXN0cyBkaXJlY3RseSB3aXRoIHNpbXBsZV9ydW4iCisJQGVjaG8gIiIKKwlAZWNobyAiU2V0IGFkZGl0aW9uYWwgdGVzdCBwYXJhbWV0ZXJzIHdpdGggVEVTVE9QVFM9YXJncyIKKwlAZWNobyAiIgorCUBlY2hvICJBbHNvIHNlZSB0aGUgUlVORlVMTFRFU1RTIHNjcmlwdCBmb3IgZGV0YWlscyIKIAogdGVzdDoKLQkkKHNyY2RpcikvUlVOVEVTVFMgLWEgLUQgYHB3ZGAvLi4gJChURVNUT1BUUykKKwlAaWYgdGVzdCAieCQoUEVSTCkiID0gIngiIFwKKwkgICAgICAgICAtbyAieEBQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMQCIgIT0geHllcyBcCisJCSB8fCB7ICEgJChQRVJMKSAtZSAncmVxdWlyZSBUQVA6Okhhcm5lc3M7JyA+L2Rldi9udWxsIDI+JjEgXAorCQkgICAgJiYgISAkKFBFUkwpIC1lICdyZXF1aXJlIFRlc3Q6Okhhcm5lc3M7IGRpZSBpZiAkJFRlc3Q6Okhhcm5lc3M6OlZFUlNJT04gPCAxLjIxOycgPi9kZXYvbnVsbCAyPiYxOyB9O1wKKwl0aGVuIFwKKwkJZWNobyAkKHNyY2RpcikvUlVOVEVTVFMgOyBcCisJCSQoc3JjZGlyKS9SVU5URVNUUyA7IFwKKwllbHNlIFwKKwkJZWNobyAkKHNyY2RpcikvUlVORlVMTFRFU1RTICQoVEVTVE9QVFMpIDsgXAorCQkkKFBFUkwpICQoc3JjZGlyKS9SVU5GVUxMVEVTVFMgJChURVNUT1BUUykgOyBcCisJZmkKKwordGVzdHNpbXBsZToKKwlAKGV4cG9ydCBzcmNkaXI9JCh0b3Bfc3JjZGlyKSA7IFwKKwkJZXhwb3J0IGJ1aWxkZGlyPSQodG9wX2J1aWxkZGlyKSA7IFwKKwkJJChzcmNkaXIpL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4gJChURVNUT1BUUykgXAorCSkKKwordGVzdGFsbDoKKwkkKHNyY2RpcikvUlVORlVMTFRFU1RTIC1nIGFsbCAkKFRFU1RPUFRTKQorCit0ZXN0ZmFpbGVkOgorCSQoc3JjZGlyKS9SVU5GVUxMVEVTVFMgLWYgJChURVNUT1BUUykKKwogCiB0ZXN0LW1pYnM6CiAJY2QgJChzcmNkaXIpL3JmYzEyMTMgOyAuL3J1bgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9SRUFETUUgYi90ZXN0aW5nL1JFQURNRQppbmRleCA5OWNiM2EwLi5mYWNjYzNlIDEwMDY0NAotLS0gYS90ZXN0aW5nL1JFQURNRQorKysgYi90ZXN0aW5nL1JFQURNRQpAQCAtMSwyMSArMSwxNiBAQAotVGhlIFJVTlRFU1RTIHNjcmlwdCBpcyB0aGUgd3JhcHBlciBhcm91bmQgYWxsIHRoZSB0ZXN0cy4gIFRvIHJ1biB0aGUKLXRlc3RzLCBzaW1wbHkgcnVuICIuL1JVTlRFU1RTIi4gIFRoZSBpbXBvcnRhbnQgYXJndW1lbnRzIGZvciBSVU5URVNUUwotYWNjZXB0cyAoZnJvbSAuL1JVTlRFU1RTIC1oKToKK1RoZSBSVU5GVUxMVEVTVFMgc2NyaXB0IGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIHRlc3RzLiAgQWxsIHRoZQordGVzdHMgYXJlIHJlcXVpcmVkIHRvIHByb2R1Y2UgVEFQIG91dHB1dCAoaG9wZWZ1bGx5IHNvb24gdG8gYmUKK3N0YW5kYXJkaXplZCBpdHNlbGYpLgogCi1Vc2FnZTogUlVOVEVTVFMgWy1hXSBbLVMgU0xFRVBUSU1FXSBbLWhdIFstaV0gWy12XSBbLVZdIFstc10KLSAgICAgICBbLVQgVEVTVE5VTVNdIFstRCBiaW5kaXJdIFstUyBzZWNvbmRzXSBbLVAgPHVkcHx0Y3B8dWRwNnx0Y3A2fHVuaXg+XSIKK0J5IGRlZmF1bHQgUlVORlVMTFRFU1RTIG9ubHkgZXhlY3V0ZXMgdGhlIHRlc3RzIGluIGZ1bGx0ZXN0cy9kZWZhdWx0LgorVXNlIHRoZSAtZyBmbGFnIHRvIHRlc3Qgb3RoZXIgc3ViZGlyZWN0b3JpZXMsIG9yIHVzZSAnLWcgYWxsJyB0byB0ZXN0CitldmVyeXRoaW5nIGl0IGNhbiBmaW5kLgogCi0gIC1hICAgICAgICBydW4gYWxsIHRlc3RzLgotICAtVCBOVU1TICAgcnVuIHBhcnRpY3VsYXIgdGVzdHMgKGNvbW1hbmQgc2VwYXJhdGVkIGxpc3Qgb2YgbnVtYmVycykKLSAgLWkgICAgICAgIHJ1biBpbnRlcmFjdGl2ZWx5Ci0gIC12ICAgICAgICBiZSB2ZXJib3NlCi0gIC1WICAgICAgICBiZSB2ZXJ5IHZlcmJvc2UKLSAgLVMgVElNRSAgIFRJTUUgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIHRpbWVvdXQgd2hlbiB3YWl0aW5nIGZvciBhCi0gICAgICAgICAgICByZXNwb25zZSBmcm9tIHRoZSBhZ2VudC4KLSAgLUEgRkxBR1MgIEV4dHJhIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGFnZW50LgotICAtdCBGTEFHUyAgRXh0cmEgZmxhZ3MgdG8gcGFzcyB0byB0aGUgdHJhcGQuCi0gIC1zICAgICAgICBEb24ndCBlcmFzZSB0aGUgcnVudGltZSBkYXRhIGRpcmVjdG9yeSBmb3Igc3VjY2Vzc2Z1bCB0ZXN0cwotICAtWE0gICAgICAgRG9uJ3Qgc2V0IE1JQkRJUlMgZW52aXJvbm1lbnQgdW5sZXNzIGFic29sdXRlbHkgbmVjZXNzYXJ5Ci0gIC14ICAgICAgICBUdXJuIG9uIFNIIG91dHB1dCBkZWJ1Z2dpbmcgZm9yIHRlc3RzLgotICAtUCBUUkFOUyAgU3BlY2lmeSBvbiB3aGljaCB0cmFuc3BvcnQgZG9tYWluIHRvIHJ1biB0aGUgdGVzdHMuIERlZmF1bHQgaXMgdWRwLgotICAgICAgICAgICAgdWRwLHRjcCx1ZHA2LHRjcDYsdW5peCBhcmUgYXZhaWxhYmxlLgorU2VlIHRoZSBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgUlVORlVMTFRFU1RTIHNjcmlwdCBmb3IgZGV0YWlscworb246CisKKyAgLSBob3cgdG8gcnVuIHBhcnRpY3VsYXIgc2V0cyBvZiB0ZXN0cworICAtIGhvdyB0byB3cml0ZSB0ZXN0cworICAtIGhvdyB0byB3cml0ZSBfYnVpbGQgc2NyaXB0cworICAtIGhvdyB0byB3cml0ZSBfcnVuIHNjcmlwdHMKKwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9SVU5GVUxMVEVTVFMgYi90ZXN0aW5nL1JVTkZVTExURVNUUwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGE0MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9SVU5GVUxMVEVTVFMKQEAgLTAsMCArMSw4MTYgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKwordXNlIEdldG9wdDo6TG9uZzsKKyN1c2UgRGF0YTo6RHVtcGVyOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEN3ZCBxdyhhYnNfcGF0aCk7Cit1c2Ugc3RyaWN0OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdsb2JhbHMgYW5kIENvbW1hbmQgTGluZSBvcHRpb25zCisKK215ICVvcHRzID0gKCdncm91cHMnID0+ICdkZWZhdWx0JywKKyAgICAgICAgICAgICdtYXN0ZXItZGlyZWN0b3J5JyA9PiAnZnVsbHRlc3RzJywKKwkgICAgJ3NyY2RpcicgPT4gZGlybmFtZSgiJDAiKSAuICIvLi4iLAorICAgICAgICAgICAgJ2J1aWxkZGlyJyA9PiAnLi4nLAorCSAgICAnZmFpbGVkLWZpbGUnID0+ICdmYWlsZWRfdGVzdHMnLAorCSAgICk7CisKK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlKHF3KG5vX2lnbm9yZV9jYXNlKSk7CitHZXRPcHRpb25zKFwlb3B0cywKKyAgICAgICAgICAgInZlcmJvc2UiLAorICAgICAgICAgICAiaGVscHw/IiwKKyAgICAgICAgICAgInF1aWV0fHEiLAorICAgICAgICAgICAiZ3JvdXBzfGc9cyIsCisgICAgICAgICAgICJyPXMiLAorICAgICAgICAgICAiZGVidWciLAorICAgICAgICAgICAic3JjZGlyfEQ9cyIsCisgICAgICAgICAgICJidWlsZGRpcnxkPXMiLAorCSAgICJmIiwKKwkgICAiRiIsCisJICAgImZhaWxlZC1maWxlPXMiLAorCSAgICJtYXN0ZXItZGlyZWN0b3J5PXMiLAorCSAgKSB8fCArKyRvcHRzeydoZWxwJ307CisKKyMgQ2hhbmdlIHNyY2RpciBhbmQgYnVpbGRkaXIgdG8gYWJzb2x1dGUgcGF0aHMKKyRvcHRzeydzcmNkaXInfSA9IGFic19wYXRoKCRvcHRzeydzcmNkaXInfSk7Ciskb3B0c3snYnVpbGRkaXInfSA9IGFic19wYXRoKCRvcHRzeydidWlsZGRpcid9KTsKKyMgU2V0IGV4ZWV4dC4KKyRvcHRzeydleGVleHQnfSA9IGpvaW4ocmVhZHBpcGUoJG9wdHN7J2J1aWxkZGlyJ30gLiAnL25ldC1zbm1wLWNvbmZpZyAtLWV4ZWV4dCcpKTsKKwordXNhZ2UoKSBpZiAoJG9wdHN7J2hlbHAnfSk7CisKKyMgQnVpbGQgdGhlIGhhcm5lc3Mgb2JqZWN0CitteSAlYXJncyA9ICgKKwkgICAgdmVyYm9zaXR5ID0+ICgkb3B0c3sndmVyYm9zZSd9ID8gMSA6ICgkb3B0c3sncXVpZXQnfSA/IC0xIDogMCkpLAorCSAgICBleGVjID0+IFwmZGVjaWRlX2V4ZWMsCisJICAgICMgdGhpcyBvcHRpb24gaXMgKnJlYWxseSogd2VpcmQgaW4gaG93IGl0IHdvcmtzCisJICAgIGZhaWx1cmVzID0+ICgkb3B0c3sncXVpZXQnfSA/IDAgOiAoJG9wdHN7J3ZlcmJvc2UnfSA/IDAgOiAxKSksCisJICAgIGVycm9ycyA9PiAoJG9wdHN7J3F1aWV0J30gPyAwIDogMSksCisJICAgKTsKKworIyBsaXN0IG9mIHN1cHBvcnQgaW5mcmFzdHJ1Y3R1cmUgY29tcG9uZW50cworbXkgJXN1cHBvcnQ7CitteSAlc291cmNlczsKKworIyBpZiB0aGUgLWQgb3B0aW9uIHdhcyBzcGVjaWZpZWQsIHBhc3Mgb24gdGhlIHNvdXJjZSByb290IGRpcmVjdG9yeSB0byBhbGwgYXBwcworaWYgKGV4aXN0cygkb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9KSkgeworICAgICRFTlZ7J05FVFNOTVBTUkNESVInfSA9ICRvcHRzeydtYXN0ZXItZGlyZWN0b3J5J307Cit9IGVsc2UgeworICAgICRFTlZ7J05FVFNOTVBTUkNESVInfSA9ICcuJzsKK30KKworIyBwYXNzIHNyY2RpciBhbmQgYnVpbGRkaXIgdG8gYWxsIGFwcHMKKyRFTlZ7J3NyY2Rpcid9ID0gJG9wdHN7J3NyY2Rpcid9OworJEVOVnsnYnVpbGRkaXInfSA9ICRvcHRzeydidWlsZGRpcid9OworCisjIHNldCB1cCBNSUJESVJTIHRvIHJlZmVyIHRvIHRoZSBzcmMgZGlyZWN0b3J5CitpZiAoISRFTlZ7J01JQkRJUlMnfSkgeworICAgICRFTlZ7J01JQkRJUlMnfSA9ICIkb3B0c3tzcmNkaXJ9L21pYnMiOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFByb3RlY3Rpb24gbWVhc3VyZXMKKyRFTlZ7J1NOTVBDT05GUEFUSCd9ID0gIi9kZXYvbnVsbCI7CisKKyMgY3JlYXRlIHRoZSB0ZXN0aW5nIGhhcm5lc3MgaW5mcmFzdHJ1Y3R1cmUKKworbXkgJGhhcm5lc3M7CitpZiAoZXZhbCB7IHJlcXVpcmUgVEFQOjpIYXJuZXNzOyB9ICkgeworICAgIGltcG9ydCBUQVA6Okhhcm5lc3M7CisgICAgJGhhcm5lc3MgPSBUQVA6Okhhcm5lc3MtPm5ldyhcJWFyZ3MpOworfSBlbHNlIHsKKyAgICByZXF1aXJlIFRlc3Q6Okhhcm5lc3M7CisgICAgaW1wb3J0IFRlc3Q6Okhhcm5lc3M7CisgICAgaWYgKCRvcHRzeydncm91cHMnfSBuZSAnZGVmYXVsdCcpIHsKKwlwcmludCBTVERFUlIgIgorRVJST1I6IEkgY2FuIG5vdCBmaW5kIHRoZSBwZXJsIFRBUDo6SGFybmVzcyBtb2R1bGUuICBXZSBzdXBwb3J0IHRoZQorbW9yZSBjb21tb24gVGVzdDo6SGFybmVzcyBtb2R1bGUgYnV0IG9ubHkgZm9yIHRoZSBkZWZhdWx0IHRlc3QgZ3JvdXAuCisKK0VpdGhlcjoKKyAgMSkgcnVuIG9ubHkgdGhlIGRlZmF1bHQgdGVzdHMgKGkuZS4sIGp1c3QgXCJtYWtlIHRlc3RcIikKKyAgMikgaW5zdGFsbCB0aGUgVEFQOjpIYXJuZXNzIHBlcmwgbW9kdWxlCisKKyI7CisJZXhpdCAxOworICAgIH0KKyAgICBESUUoIlRlc3Q6Okhhcm5lc3MgbXVzdCBiZSBvZiB2ZXJzaW9uIDEuMjEgb3IgbmV3ZXJcbiIgLgorCSJJbnN0YWxsIHRoZSBUQVA6Okhhcm5lc3MgbW9kdWxlIG9yIHVzZSB0aGUgUlVOVEVTVFMgc2NyaXB0XG4iKQorICAgICAgaWYgJFRlc3Q6Okhhcm5lc3M6OlZFUlNJT04gPCAxLjIxOworfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZ2F0aGVyIHRoZSB0ZXN0cworbXkgQHRlc3RzOworCitERUJVRygiR2F0aGVyaW5nIGFuZCBidWlsZGluZyB0ZXN0czpcbiIpOworZmluZF9zdXBwb3J0KCk7CitpZiAoJG9wdHN7J2YnfSkgeworICAgIERJRSgiVGhlIC1mIGFuZCAtZyBvcHRpb25zIGNhbiBub3QgYmUgYm90aCBzcGVjaWZpZWRcbiIpCisgICAgICBpZiAoJG9wdHN7J2dyb3Vwcyd9IG5lICdkZWZhdWx0Jyk7CisgICAgRElFKCJUaGUgLWYgYW5kIC1yIG9wdGlvbnMgY2FuIG5vdCBiZSBib3RoIHNwZWNpZmllZFxuIikgaWYgKCRvcHRzeydyJ30pOworICAgIERJRSgiTm8gJG9wdHN7J2ZhaWxlZC1maWxlJ30gZmlsZSB3YXMgZm91bmQgdG8gcmVhZCBmYWlsZWQgc3RhdGUgZnJvbVxuIikKKyAgICAgIGlmICghIC1mICRvcHRzeydmYWlsZWQtZmlsZSd9KTsKKyAgICBvcGVuKEYsICRvcHRzeydmYWlsZWQtZmlsZSd9KTsKKyAgICB3aGlsZSAoPEY+KSB7CisJY2hvbXA7CisJcHVzaCBAdGVzdHMsIGJ1aWxkX3Rlc3QoJF8pOworICAgIH0KK30gZWxzZSB7CisgICAgQHRlc3RzID0gZ2F0aGVyX3Rlc3RzKCRvcHRzeydncm91cHMnfSwgJG9wdHN7J3InfSk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgcmVuYW1lIHRoZW0gdG8gcmVtb3ZlIHBhcmVudCBkaXJzCitAdGVzdHMgPSByZW5hbWVfdGVzdHMoQHRlc3RzKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBydW4gdGhlIHRlc3RzCisKK0RFQlVHKCJSdW5uaW5nIHRlc3RzOlxuIik7IAorREVCVUcoIi0iIHggNzgsICJcbiIpOworCitteSAkcmVzdWx0czsKK2lmICgkaGFybmVzcykgeworICAgICRyZXN1bHRzID0gJGhhcm5lc3MtPnJ1bnRlc3RzKEB0ZXN0cyk7Cit9IGVsc2UgeworICAgICMgbWluaW1hbCBiYWNrd2FyZHMgY29tcGF0IHdpdGggVGVzdDo6SGFybmVzcworICAgIHJ1bl9vbGRlcl9wZXJsX3Rlc3RzKEB0ZXN0cyk7Cit9CisKK215IEBmYWlsZWQgPSAkcmVzdWx0cy0+ZmFpbGVkKCk7CitpZiAoISRvcHRzeydxJ30gJiYgJCNmYWlsZWQgPiAtMSkgeworICAgIHByaW50ICJcbldlIGZhaWxlZCB0aGVzZSAiLCAoMSArICQjZmFpbGVkKSwgIiB0ZXN0czpcbiI7CisgICAgbXkgQGxpbmVzID0gQGZhaWxlZDsKKyAgICBtYXAgeyBpZiAoZXhpc3RzKCRzb3VyY2VzeyRffSkpIHsgJF8gPSAiJF8gKCAkc291cmNlc3skX30gKSJ9IH0gQGxpbmVzOworICAgIHByaW50ICIgICIsIGpvaW4oIlxuICAiLEBsaW5lcyksICJcbiI7Cit9CisKK2lmICghJG9wdHN7J0YnfSkgeworICAgIG9wZW4oRiwiPiRvcHRzeydmYWlsZWQtZmlsZSd9Iik7CisgICAgaWYgKCQjZmFpbGVkID4gLTEpIHsKKwlwcmludCBGIGpvaW4oIlxuIiwgZ2V0X3NvdXJjZXMoQGZhaWxlZCkpIC4gIlxuIjsKKyAgICB9CisgICAgY2xvc2UoRik7Cit9CisKK2V4aXQoJHJlc3VsdHMtPmFsbF9wYXNzZWQoKSA/IDAgOiAxKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJbmZyYXN0cnVjdHVyZQorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGRlY2lkZXMgaG93IHdlIHNob3VsZCBleGVjdXRlIGEgdGVzdAorIworc3ViIGRlY2lkZV9leGVjIHsKKyAgICBteSAoICRoYXJuZXNzLCAkdGVzdGZpbGUgKSA9IEBfOworCisgICAgIyAxKSBQYXJzZSB0aGUgJHRlc3RmaWxlIGFyZ3VtZW50LgorICAgIG15ICgkZGlybmFtZSwgJGdyb3VwbmFtZSwgJGJhc2VuYW1lLCAkYXBwX2V4dGVuc2lvbiwgJGZpbGVfZXh0ZW5zaW9uKSA9IAorICAgICAgKCR0ZXN0ZmlsZSA9fiAvKFteXC9dKylcLyhbXlwvXSspXC8oW15cL10rKV8oW15cL19dKylcLiooW15cL1wuXSopJC8pOworICAgICRhcHBfZXh0ZW5zaW9uID1+IHMvJG9wdHN7J2V4ZWV4dCd9XCQvLzsKKworICAgICMgMikgd2UgaGF2ZSBhIFJVTl9UWVBFIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CisgICAgaWYgKGV4aXN0cygkc3VwcG9ydHsncnVuJ317JGFwcF9leHRlbnNpb259eyRncm91cG5hbWV9KSkgeworCXJldHVybiBbJHN1cHBvcnR7J3J1bid9eyRhcHBfZXh0ZW5zaW9ufXskZ3JvdXBuYW1lfSwgJHRlc3RmaWxlXTsKKyAgICB9CisKKyAgICAjIDMpIHJldHVybiBhIGdlbmVyaWMgcnVuIHNjcmlwdAorICAgIGlmIChleGlzdHMoJHN1cHBvcnR7J3J1bid9eyRhcHBfZXh0ZW5zaW9ufXsnZ2VuZXJpYyd9KSkgeworCXJldHVybiBbJHN1cHBvcnR7J3J1bid9eyRhcHBfZXh0ZW5zaW9ufXsnZ2VuZXJpYyd9LCAkdGVzdGZpbGVdOworICAgIH0KKworICAgICMgNCkgZ2l2ZSB1cCBhbmQgbGV0IHRoZSB0ZXN0IGhhcm5lc3MgZGVjaWRlIGl0c2VsZgorICAgIHJldHVybiB1bmRlZjsKK30KKworc3ViIGdhdGhlcl90ZXN0cyB7CisgICAgbXkgKCAkZ3JvdXBzLCAkcmVnZXhwICkgPSBAXzsKKyAgICBteSBAZ3JvdXBzOworCisgICAgIyBmaWd1cmUgb3V0IHRoZSBsaXN0IG9mIGdyb3VwcyB3ZSBuZWVkIHRvIHNlYXJjaCB0aHJvdWdoCisgICAgaWYgKCRncm91cHMgZXEgJ2FsbCcpIHsKKwkjIGZpbmQgZXZlcnkgZ3JvdXAgd2UgY2FuCisJIyB3ZSBleGNsdWRlOgorCSMgIC0gdGhpbmdzIG5vdCBhIGRpcmVjdG9yeQorCSMgIC0gYW55dGhpbmcgd2l0aCAidGVtcGxhdGUiIGluIHRoZSBuYW1lCisJQGdyb3VwcyA9CisJICBncmVwIHsgIS8odGVtcGxhdGV8c3VwcG9ydCkvICYmCisJCSAgIC1kICRfICYmIHMvJG9wdHN7J3NyY2Rpcid9XC90ZXN0aW5nXC8kb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9Li8vIH0gZ2xvYigiJG9wdHN7J3NyY2Rpcid9L3Rlc3RpbmcvJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfS8qIik7CisgICAgfSBlbHNlIHsKKwkjIHRoZXkgc3BlY2lmaWVkIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QKKwlAZ3JvdXBzID0gc3BsaXQoLyxccyovLCAkZ3JvdXBzKTsKKyAgICB9CisgICAgREVCVUcoIkNoZWNraW5nIGdyb3VwczogIiwgam9pbigiLCAiLCBAZ3JvdXBzKSwgIlxuIik7CisKKyAgICBteSBAdGVzdHM7CisgICAgZm9yZWFjaCBteSAkZ3JvdXAgKEBncm91cHMpIHsKKwlteSBAZmlsZXM7CisKKwlERUJVRygiY2hlY2tpbmcgZ3JvdXAgJGdyb3VwXG4iKTsKKworCWlmICghIC1kICIkb3B0c3snc3JjZGlyJ30vdGVzdGluZy8kb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9LyRncm91cCIpIHsKKwkgICAgRVJST1IoImdyb3VwICckZ3JvdXAnIGlzIG5vdCBhIGRpcmVjdG9yeSB1bmRlciAnJG9wdHN7J3NyY2Rpcid9L3Rlc3RpbmcvJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfSc7IGlnbm9yaW5nXG4iKTsKKwkgICAgbmV4dDsKKwl9CisKKwkjIHB1c2ggb24gYWxsIGZpbGVzIHRoYXQgc3RhcnQgd2l0aCBUW05VTV0qCisJcHVzaF9vcl9za2lwKFxAdGVzdHMsICRyZWdleHAsIGdsb2IoIiRvcHRzeydzcmNkaXInfS90ZXN0aW5nLyRvcHRzeydtYXN0ZXItZGlyZWN0b3J5J30vJGdyb3VwL1RbMC05XSoiKSk7CisgICAgfQorCisgICAgcmV0dXJuIEB0ZXN0czsKK30KKworc3ViIHB1c2hfb3Jfc2tpcCB7CisgICAgbXkgKCRhcnJheSwgJHJlZ2V4cCwgQGZpbGVzKSA9IEBfOworICAgIGZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgeworCW5leHQgaWYgKCRmaWxlID1+IC8uKGJha3xvbGR8b3JpZ3xyZWopJC8pOworCW5leHQgaWYgKCRmaWxlID1+IC9+JC8pOworCW5leHQgaWYgKGRlZmluZWQoJHJlZ2V4cCkgJiYgJGZpbGUgIX4gLyRyZWdleHAvaSk7CisJREVCVUcoIiAgQWRkaW5nIGZpbGUgJGZpbGVcbiIpOworCXB1c2ggQCRhcnJheSwgYnVpbGRfdGVzdCgkZmlsZSk7CisgICAgfQorfQorCisjIHJlbmFtZSBhbGwgdGhlIHRlc3RzIHRvIHJlbW92ZSB0aGUgdG9wIHN1YmRpciB0byBoZWxwIHJlYWRhYmlsaXR5CitzdWIgcmVuYW1lX3Rlc3RzIHsKKyAgICBteSAoQHRlc3RzKSA9IEBfOworICAgIG15IEBuZXd0ZXN0czsKKworICAgICMgeWVzLCBJIGNvdWxkIGhhdmUgdXNlZCBtYXAuICBCdXQgSSBkaWRuJ3QuCisgICAgZm9yZWFjaCBteSAkZmlsZSAoQHRlc3RzKSB7CisJbXkgJHRpdGxlID0gIiRmaWxlIjsKKwlteSAkZm91bmRoZWFkZXIgPSAwOworCSR0aXRsZSA9ICRzb3VyY2VzeyRmaWxlfSBpZiAoZXhpc3RzKCRzb3VyY2VzeyRmaWxlfSkpOworCQorCW9wZW4oU1JDLCAkdGl0bGUpOworCXdoaWxlICg8U1JDPikgeworCSAgICBpZiAoLyhIRUFERVJ8VElUTEUpXHMrWyciXSooLiopLykgeworCQkkdGl0bGUgPSAkMjsKKwkJJHRpdGxlID1+IHMvXHMqXCpcLy4qLy87CisJCSR0aXRsZSA9fiBzL1snIl0kLy87CisJCSRmb3VuZGhlYWRlciA9IDE7CisJCWxhc3Q7CisJICAgIH0KKwl9CisJY2xvc2UoU1JDKTsKKworCWlmICghICRmb3VuZGhlYWRlcikgeworCSAgICAkdGl0bGUgPX4gcy9eJG9wdHN7J3NyY2Rpcid9XC90ZXN0aW5nXC8vLzsKKwkgICAgJHRpdGxlID1+IHMvJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfS4vLzsKKwl9CisJJHNvdXJjZXN7JHRpdGxlfSA9ICRzb3VyY2VzeyRmaWxlfSB8fCAkZmlsZTsKKwlwdXNoIEBuZXd0ZXN0cywgWyRmaWxlLCAkdGl0bGVdOworICAgIH0KKyAgICByZXR1cm4gQG5ld3Rlc3RzOworfQorCisjIGNhbGxlZCB0byBwb3NzaWJseSBtYW5pcHVsYXRlIHRoZSBsaXN0IG9mIHRlc3RzIHRvIHJ1biBieSBidWlsZGluZyBzb21lCitzdWIgYnVpbGRfdGVzdHMgeworICAgIG15IChAdGVzdHMpID0gQF87CisgICAgbXkgQG5ld3Rlc3RzOworCisgICAgZm9yZWFjaCBteSAkdGVzdCAoQHRlc3RzKSB7CisJbXkgJHRpdGxlOworCQorCW15ICRidWlsdCA9IGJ1aWxkX3Rlc3QoJHRlc3QpOworCWlmIChyZWYoJGJ1aWx0KSBlcSAnQVJSQVknKSB7CisJICAgIHB1c2ggQG5ld3Rlc3RzLCBAJGJ1aWx0OworCX0gZWxzaWYgKCRidWlsdCBuZSAiIikgeworCSAgICBwdXNoIEBuZXd0ZXN0cywgJGJ1aWx0OworCX0KKyAgICB9CisgICAgcmV0dXJuIEBuZXd0ZXN0czsKK30KKworIworIyBGaW5kcyBzY3JpcHRzIHRoYXQgYXJlIHVzZWQgdG8gYnVpbGQgYW5kIHJ1biBhY3R1YWwgY29tbWFuZHMKKyMKK3N1YiBmaW5kX2J1aWxkZXJzIHsKKyAgICAkc3VwcG9ydHsnYnVpbGQnfSA9IHt9OworICAgIGZpbmRfc2NyaXB0cygnYnVpbGQnLCAkc3VwcG9ydHsnYnVpbGQnfSk7Cit9CisKK3N1YiBmaW5kX3J1bm5lcnMgeworICAgICRzdXBwb3J0eydydW4nfSA9IHt9OworICAgIGZpbmRfc2NyaXB0cygncnVuJywgJHN1cHBvcnR7J3J1bid9KTsKK30KKworc3ViIGZpbmRfc3VwcG9ydCB7CisgICAgZmluZF9idWlsZGVycygpOworICAgIGZpbmRfcnVubmVycygpOworfQorCitzdWIgZmluZF9zY3JpcHRzIHsKKyAgICBteSAoJGJ1aWxkbmFtZSwgJGhhc2hyZWYpID0gQF87CisgICAgbXkgJGNvdW50OworICAgIERFQlVHKCJsb29raW5nIGZvciAkYnVpbGRuYW1lIHNjcmlwdHNcbiIpOworICAgIGZvcmVhY2ggbXkgJGJ1aWxkZXIgKGdsb2IoIiRvcHRzeydzcmNkaXInfS90ZXN0aW5nLyRvcHRzeydtYXN0ZXItZGlyZWN0b3J5J30vKi8qXyR7YnVpbGRuYW1lfSIpKSB7CisJbmV4dCBpZiAoJGJ1aWxkZXIgPX4gL34kLyk7CisJbmV4dCBpZiAoJGJ1aWxkZXIgPX4gLy4oYmFrfG9yaWd8cmVqfG9sZCkkLyk7CisKKwlteSAoJGdyb3VwLCAkdHlwZSkgPSAoJGJ1aWxkZXIgPX4gLyhbXlwvXSspXC8oW15cL10qKV8ke2J1aWxkbmFtZX0vKTsKKwkjIHNhdmUgdGhpcyBhcyBhIGNlcnRhaW4gZ3JvdXAgYnVpbGRlcgorCSRoYXNocmVmLT57JHR5cGV9eyRncm91cH0gPSAkYnVpbGRlcjsKKworCSMgc2F2ZSB0aGlzIGFzIGEgZ2VuZXJpYyBidWlsZGVyIGlmIHRoZXJlIGlzbid0IGEgYmV0dGVyCisJIyBnZW5lcmljIG9uZSwgc3VjaCBhcyBvbmUgdGhhdCBleGlzdHMgaW4gdGhlIHN1cHBvcnQKKwkjIGRpcmVjdG9yeS4KKwlpZiAoIWV4aXN0cygkaGFzaHJlZi0+eyR0eXBlfXsnZ2VuZXJpYyd9KSB8fCAkZ3JvdXAgZXEgJ3N1cHBvcnQnKSB7CisJICAgICRoYXNocmVmLT57JHR5cGV9eydnZW5lcmljJ30gPSAkYnVpbGRlcjsKKwl9CisJJGNvdW50Kys7CisgICAgfQorICAgIERFQlVHKCIgIGZvdW5kICRjb3VudFxuIik7Cit9CisKKyMgY2FsbGVkIHRvIGJ1aWxkIGEgdGVzdCBmcm9tIGEgcmVnaXN0ZXJkIGJ1aWxkZXIKK3N1YiBidWlsZF90ZXN0IHsKKyAgICBteSAoJHRlc3RmaWxlKSA9IEBfOworCisgICAgbXkgKCRkaXJuYW1lLCAkZ3JvdXBuYW1lLCAkYmFzZW5hbWUsICRhcHBfZXh0ZW5zaW9uLCAkZmlsZV9leHRlbnNpb24pID0gCisgICAgICAoJHRlc3RmaWxlID1+IC8oW15cL10rKVwvKFteXC9dKylcLyhbXlwvXSspXyhbXlwvX10rKVwuKFteXC9cLl0rKSQvKTsKKworICAgICMgaXMgdGhpcyBldmVuIGEgYnVpbGRhYmxlIHR5cGUgcmVjaXBlPworICAgIGlmICghJGRpcm5hbWUgfHwgISRiYXNlbmFtZSB8fCAhJGFwcF9leHRlbnNpb24gfHwgISRmaWxlX2V4dGVuc2lvbikgeworCXJldHVybiAkdGVzdGZpbGU7CisgICAgfQorCisgICAgREVCVUcoImZvdW5kOiAkdGVzdGZpbGUgPT4gJGRpcm5hbWUsICRiYXNlbmFtZSwgJGFwcF9leHRlbnNpb24sICRmaWxlX2V4dGVuc2lvblxuIik7CisKKyAgICAjIGNob2ljZXM6CisgICAgIyAxKSB3ZSBoYXZlIGEgcmVnaXN0ZXJlZCBzdWJyb3V0aW5lIHRvIGJ1aWxkIGFuIGV4dGVuc2lvbiBmcm9tCisgICAgIyBYWFgKKworICAgICMgMikgd2UgaGF2ZSBhIEJVSUxEX1RZUEUgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgICBpZiAoZXhpc3RzKCRzdXBwb3J0eydidWlsZCd9eyRhcHBfZXh0ZW5zaW9ufXskZGlybmFtZX0pKSB7CisJcmV0dXJuCisJICBjYWxsX2J1aWxkX3NjcmlwdCgkc3VwcG9ydHsnYnVpbGQnfXskYXBwX2V4dGVuc2lvbn17JGRpcm5hbWV9LCAkdGVzdGZpbGUpOworICAgIH0KKworICAgICMgMykgcmV0dXJuIGEgZ2VuZXJpYyBidWlsZCBzY3JpcHQKKyAgICBpZiAoZXhpc3RzKCRzdXBwb3J0eydidWlsZCd9eyRhcHBfZXh0ZW5zaW9ufXsnZ2VuZXJpYyd9KSkgeworCXJldHVybgorCSAgY2FsbF9idWlsZF9zY3JpcHQoJHN1cHBvcnR7J2J1aWxkJ317JGFwcF9leHRlbnNpb259eydnZW5lcmljJ30sICR0ZXN0ZmlsZSk7CisgICAgfQorCisgICAgIyA0KSB3ZSBhc3N1bWUgaXQncyBmaW5lIGFzIGlzCisgICAgcmV0dXJuICR0ZXN0ZmlsZTsKK30KKworc3ViIGNhbGxfYnVpbGRfc2NyaXB0IHsKKyAgICBteSAoJHNjcmlwdG5hbWUsICRmaWxlbmFtZSkgPSBAXzsKKworICAgIG15ICRtYXliZW5ld2ZpbGUgPSAkZmlsZW5hbWU7CisgICAgJG1heWJlbmV3ZmlsZSA9fiBzLy5bXlwuXSskLyRvcHRzeydleGVleHQnfS87CisgICAgJG1heWJlbmV3ZmlsZSA9fiBzL1QoW15cL10rKSQvQiQxLzsgICMgY2hhbmdlIHByZWZpeCB0byBCIGZvciAnQnVpbHQnCisgICAgJG1heWJlbmV3ZmlsZSA9fiBzL14kb3B0c3snc3JjZGlyJ31cLy8vOworCisgICAgbXkgJG5ld3BhdGggPSAkbWF5YmVuZXdmaWxlOworICAgICRuZXdwYXRoID1+IHMvXC9bXlwvXSokLy87CisKKyAgICBpZiAoISAtZCAkbmV3cGF0aCkgeworCURFQlVHKCJtYWtpbmcgZGlyZWN0b3J5ICRuZXdwYXRoXG4iKTsKKwlzeXN0ZW0oIiRvcHRzeydzcmNkaXInfS9ta2luc3RhbGxkaXJzICRuZXdwYXRoIik7CisgICAgfQorCisgICAgbXkgJGxhc3RsaW5lOworICAgIERFQlVHKCJCVUlMRElORzogJHNjcmlwdG5hbWUgJGZpbGVuYW1lICRtYXliZW5ld2ZpbGVcbiIpOworICAgIG9wZW4oQiwiJHNjcmlwdG5hbWUgJGZpbGVuYW1lICRtYXliZW5ld2ZpbGV8Iik7CisgICAgd2hpbGUgKDxCPikgeworCSRsYXN0bGluZSA9ICRfOworICAgIH0KKyAgICBjaG9tcCgkbGFzdGxpbmUpOworCisgICAgREVCVUcoIiAgcmVzdWx0OiAkbGFzdGxpbmVcbiIpOworICAgIHJldHVybiB1bmRlZiBpZiAoJGxhc3RsaW5lIGVxICdmYWlsJyk7CisgICAgcmV0dXJuIHVuZGVmIGlmICgkbGFzdGxpbmUgZXEgJ3NraXAnKTsKKyAgICByZXR1cm4gJGZpbGVuYW1lIGlmICgkbGFzdGxpbmUgZXEgJycpOworICAgICRzb3VyY2VzeyRsYXN0bGluZX0gPSAkZmlsZW5hbWU7ICAgICAgICAjIHJlbWVtYmVyIHdoZXJlIHdlIGNhbWUgZnJvbQorICAgIHJldHVybiAkbGFzdGxpbmU7Cit9CisKK3N1YiBnZXRfc291cmNlcyB7CisgICAgbXkgKEBuYW1lcykgPSBAXzsKKyAgICBtYXAgeyBpZiAoZXhpc3RzKCRzb3VyY2VzeyRffSkpIHsgJF8gPSAkc291cmNlc3skX30gfSB9IEBuYW1lczsKKyAgICByZXR1cm4gQG5hbWVzOworfQorCitzdWIgcnVuX29sZGVyX3BlcmxfdGVzdHMgeworICAgICMKKyAgICAjIE9sZGVyIHZlcnNpb25zIG9mIHBlcmwgdXNlZCBhIGRpZmZlcmVudCB0ZXN0IHN1aXRlIGNhbGxlZCBUZXN0OjpIYXJuZXNzCisgICAgIyBJdCBpcyBtdWNoIG1vcmUgbGltaXRlZCB0aGFuIFRBUDo6SGFybmVzczsKKyAgICAjCisgICAgIyBIZXJlIHdlIG1hc3NhZ2Ugb3VyIG9sZGVyIHRlc3RzIGludG8gc29tZXRoaW5nIHRoYXQgd2lsbCB3b3JrIHVuZGVyCisgICAgIyBUZXN0OjpIYXJuZXNzIHRvby4KKyAgICAjCisgICAgbXkgQHRlc3RzID0gQF87CisKKyAgICAjIGNyZWF0ZSB0aGUgdGVtcG9yYXJ5IGZpbGVzCisgICAgbXkgQHRlbXBmaWxlczsKKyAgICBpZiAoISAtZCAiJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfSIpIHsKKwlta2RpcigiJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfSIsIDA3NzcpOworICAgIH0KKyAgICBpZiAoISAtZCAiJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfS90ZW1wdGVzdHMiKSB7CisJbWtkaXIoIiRvcHRzeydtYXN0ZXItZGlyZWN0b3J5J30vdGVtcHRlc3RzIiwgMDc3Nyk7CisgICAgfQorICAgIGZvcmVhY2ggbXkgJHRlc3QgKEB0ZXN0cykgeworCW15ICR0ZW1wZmlsZSA9ICIkdGVzdC0+WzBdLnQiOworCSR0ZW1wZmlsZSA9fiBzI14kb3B0c3snc3JjZGlyJ30jJG9wdHN7J2J1aWxkZGlyJ30jOworCSR0ZW1wZmlsZSA9fiBzIyRvcHRzeydtYXN0ZXItZGlyZWN0b3J5J30vZGVmYXVsdC8jJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfS90ZW1wdGVzdHMvIzsKKwlvcGVuKFQsICI+JHRlbXBmaWxlIikgfHwgZGllKCIkdGVtcGZpbGU6ICQhIik7CisJcHJpbnQgVCAiIyBmdW5jdGlvbmFsbHkgcGVybFxuXG5zeXN0ZW0oXCIkb3B0c3snc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuICR0ZXN0LT5bMF1cIik7XG4iOworCWNsb3NlKFQpOworCWNobW9kKDA3NTUsICR0ZW1wZmlsZSk7CisJcHVzaCBAdGVtcGZpbGVzLCAkdGVtcGZpbGU7CisgICAgfQorCisgICAgJHJlc3VsdHMgPSBydW50ZXN0cyhAdGVtcGZpbGVzKTsKKworICAgIHVubGluayhAdGVtcGZpbGVzKSB8fCBkaWUoIiRAICQhIik7CisgICAgZXhpdDsKK30KKworIyB1c2FnZSBvdXRwdXQKK3N1YiB1c2FnZSB7CisgICAgcHJpbnQgIiQwIFtPUFRJT05TXVxuIjsKKworICAgIHByaW50ICJcbk9QVElPTlM6XG4iOworICAgIHByaW50ICIgIC12XHRcdFx0UnVucyBpbiB2ZXJib3NlIG1vZGU7IGR1bXBpbmcgYWxsIHRlc3Qgb3V0cHV0XG4iOworICAgIHByaW50ICIgICAgLS12ZXJib3NlXG4iOworICAgIHByaW50ICIgIC1xXHRcdFx0UnVucyBpbiBxdWlldGVyIG1vZGU7IGR1bXBzIGxlc3MgdGVzdCBvdXRwdXRcbiI7CisgICAgcHJpbnQgIiAgICAtLXF1aWV0XG4iOworICAgIHByaW50ICIgIC1nIEdST1VQXHRcdFJ1bnMgdGhlIGdyb3VwIG9mIHNwZWNpZmllZCB0ZXN0cyAoZGVmYXVsdCA9ICdkZWZhdWx0JylcbiI7CisgICAgcHJpbnQgIiAgICAtLWdyb3VwIEdST1VQXG4iOworICAgIHByaW50ICJcdFx0XHQodXNlICdhbGwnIHRvIHJ1biBhbGwgdGVzdHMpXG4iOworICAgIHByaW50ICIgIC1yIFJFR0VYUFx0XHRPbmx5IHJ1biB0ZXN0IGZpbGVzIG1hdGNoaW5nIHRoaXMgcmVnZXhwXG4iOworICAgIHByaW50ICIgIC1mXHRcdFx0UnVuIG9ubHkgdGhlIGZhaWxlZCB0ZXN0cyBmcm9tIHRoZSBsYXN0IHJ1blxuIjsKKyAgICBwcmludCAiICAtRlx0XHRcdERvbid0IGNyZWF0ZSB0aGUgZmFpbGVkX3Rlc3RzIGZpbGVcbiI7CisgICAgcHJpbnQgIiAgLS1mYWlsZWQtZmlsZSBGSUxFXHRUaGUgbG9jYXRpb24gb2YgdGhlIGZhaWxlZCBzdGF0ZSBmaWxlXG4iOworICAgIHByaW50ICIgIC1EIFBBVEhcdFx0U291cmNlIGRpcmVjdG9yeVxuIjsKKyAgICBwcmludCAiICAgIC0tc3JjZGlyIFBBVEhcbiI7CisgICAgcHJpbnQgIiAgICAoY3VycmVudGx5ICckb3B0c3snc3JjZGlyJ30nKVxuIjsKKyAgICBwcmludCAiICAtZCBQQVRIXHRcdEJ1aWxkIGRpcmVjdG9yeSB0byBiZSB0ZXN0ZWRcbiI7CisgICAgcHJpbnQgIiAgICAtLWJ1aWxkZGlyIFBBVEhcbiI7CisgICAgcHJpbnQgIiAgICAoY3VycmVudGx5ICckb3B0c3snYnVpbGRkaXInfScpXG4iOworICAgIHByaW50ICIgIC0tbWFzdGVyLWRpcmVjdG9yeSBESVJOQU1FXG4iOworICAgIHByaW50ICIgICAgKGRlZmF1bHQgPSAnZnVsbHRlc3RzJylcbiI7CisgICAgcHJpbnQgIiAgLWhcdFx0XHRUaGlzIGhlbHAgb3V0cHV0XG4iOworICAgIHByaW50ICIgICAgLS1oZWxwXG4iOworICAgIHByaW50ICIgIC0tZGVidWdcdFx0RGVidWdnaW5nIG91dHB1dFxuXG4iOworICAgIGV4aXQ7Cit9CisKK3N1YiBERUJVRyB7CisgICAgcmV0dXJuIGlmICghJG9wdHN7J2RlYnVnJ30pOworICAgIHByaW50IEBfOworfQorCitzdWIgRVJST1IgeworICAgIHByaW50IFNUREVSUiAiRXJyb3I6IiwgQF87Cit9CisKK3N1YiBESUUgeworICAgIEVSUk9SKEBfKTsKKyAgICBleGl0IDE7Cit9CisKKz1wb2QKKworPWhlYWQxIE5BTUUKKworcnVuZnVsbHRlc3RzIC0gdGhlIE5ldC1TTk1QIHRlc3Qgc3VpdGUgY29vcmRpbmF0b3IKKworPWhlYWQxIFNZTk9QU0lTCisKK3J1bmZ1bGx0ZXN0cyBbT1BUSU9OU10KKworIyAuL1JVTkZVTExURVNUUworCisjIC4vUlVORlVMTFRFU1RTIC1nIGFsbAorCis9aGVhZDEgREVTQ1JJUFRJT04KKworQjxSVU5GVUxMVEVTVFM+IGlzIGEgVEFQIChzZWUgYmVsb3cpIG91dHB1dCBhZ2dyZWdhdG9yIGFuZCB0ZXN0IHN1aXRlCittYW5hZ2VtZW50IHByb2dyYW0uICBJdCBydW5zIGdyb3VwcyBvZiB0ZXN0cyB0aGF0IGl0IGNhbiBmaW5kIGluIHRoZQorSTxmdWxsdGVzdHM+IHN1Yi1kaXJlY3RvcnkuICBJdCBkZWZhdWx0cyB0byBydW5uaW5nIGEgYmFzaWMgc2V0IG9mCitoaWdoLWxldmVsIE5ldC1TTk1QIHRlc3RzIGZvdW5kIGluIHRoZSBmdWxsdGVzdHMvZGVmYXVsdCBkaXJlY3RvcnkuCitUbyBydW4gYSBkaWZmZXJlbnQgc2V0IG9mIHRlc3RzIHNlZSB0aGUgLWcgZmxhZy4KKworSXQgaXMgYWJsZSB0byBrZWVwIHN0YXRlIGFuZCByZW1lbWJlciB3aGljaCB0ZXN0cyBmYWlsZWQgc28gdGhhdAorZHVyaW5nIGRldmVsb3BtZW50IHlvdSBjYW4gc2ltcGx5IHJlLXJ1biBvbmx5IHRoZSAibGFzdCBmYWlsZWQgdGVzdHMiCit1c2luZyB0aGUgLWYgc3dpdGNoLgorCis9aGVhZDIgUGVybCBSZXF1aXJlbWVudHMKKworSWRlYWxseSBpdCBzaG91bGQgYmUgcnVuIHVuZGVyIGEgZmFpcmx5IG1vZGVybiB2ZXJzaW9uIG9mIHBlcmwgKGVnLAorNS4xMCkgYnV0IG1pbm1pYWwgc3VwcG9ydCBpcyBwcm92aWRlZCBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgcGVybCBhcword2VsbC4KKworSWYgbm8gcGVybCBpcyBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSwgdGhlcmUgaXMgYWxzbyBhIGZhbGwtYmFjaworIlJVTlRFU1RTIiBzdWl0ZSB3aGljaCBtZXJlbHkgZXhlY3V0ZXMgdGhlIGRlZmF1bHQgc2NyaXB0cyBmb3IgdGVzdGluZworY29tcGxpYW5jZSBvZiB0aGUgaGlnaC1sZXZlbCBhcHBsaWNhdGlvbnMuCisKKz1oZWFkMiBJbXBvcnRhbnQgTm90ZXMgQWJvdXQgV3JpdGluZyBOZXcgVGVzdHMKKworV2hlbiBkZXNpZ25pbmcgbmV3IHRlc3RzIGl0IGlzIHN0cm9uZ2x5IGVuY291cmFnZWQgdGhhdCBzb21lCitjb252ZW50aW9ucyBhcmUgZm9sbG93ZWQ6CisKKyAgLSBEZXNpZ24gdGhlIHRlc3QgZmlsZXMgc28gdGhleSBjYW4gYmUgYnVpbGQvcnVuIHdpdGhvdXQgdGhlbQorICAgIG5lZWRpbmcgdG8gYmUgYnVpbGQvcnVuIHdpdGhpbiBhIHRlc3RpbmcgaGFybmVzcyBsaWtlIHRoaXMgb25lCisgICAgKEI8UlVORlVMTFRFU1RTPikuICBJRSwgeW91IHNob3VsZCBiZSBhYmxlIHRvIHJ1biB0aGVtIGRpcmVjdGx5IGJ5CisgICAgaGFuZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZW0gdG8gYmUgaW52b2tlZAorICAgIHdpdGhpbiB0aGlzIG9yIGFueSBvdGhlciB0ZXN0aW5nIGhhcm5lc3MuCisgIC0gTmFtZSB0aGVtIGJlZ2lubmluZyB3aXRoIFROTk4gd2hlcmUgTk5OIGlzIGEgMyBkaWdpdCBudW1iZXIKKworVGhlIHJhdGlvbmFsIGJlaGluZCB0aGVzZSBydWxlcyBmb2xsb3dzIGluIHRoZSBzZWN0aW9ucyBiZWxvdworCis9aGVhZDEgT1BUSU9OUworCis9b3ZlcgorCis9aXRlbSAtZyBHUk9VUAorCis9aXRlbSAtLWdyb3VwIEdST1VQCisKK0J5IGRlZmF1bHQgdGhlICJkZWZhdWx0IiBncm91cCBvZiB0ZXN0cyBpcyBydW4uICBXaGljaCBpcyByZWFsbHkganVzdAorZXZlcnl0aGluZyB0aGF0IEI8UlVORlVMTFRFU1RTPiBjYW4gZmluZCBmcm9tIHRoZSBJPGZ1bGx0ZXN0cy9kZWZhdWx0Pgorc3ViLWRpcmVjdG9yeS4gIFRoZSAtZyBzd2l0Y2ggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvdGhlcgorc3ViLWRpcmVjdG9yaWVzIG9mIHRlc3RzIHRvIHJ1bi4gIFRoZSBhcmd1bWVudCBpcyBhIGNvbW1hLXNlcGFyYXRlZAorbGlzdCBvZiBzdWJkaXJlY3RvcmllcyB0byB1c2UuCisKK1RoZSBzcGVjaWFsIGtleXdvcmQgSTxhbGw+IGNhbiBiZSB1c2VkIHRvIHJ1biBldmVyeSB0ZXN0IGluIGV2ZXJ5CitzdWJkaXJlY3Rvcnkgb2YgdGhlIEk8ZnVsbHRlc3RzPiBkaXJlY3RvcnkuCisKKz1pdGVtIC1yIFJFR0VYUAorCitPbmx5IHJ1biB0ZXN0IGZpbGVzIHRoYXQgbWF0Y2ggdGhlIEk8UkVHRVhQPiByZWd1bGFyIGV4cHJlc3Npb24uCisKK1RvIHJ1biBvbmx5IHRlc3RzIG9mIGEgY2VydGFpbiBmaWxlIG5hbWUgeW91IG1pZ2h0IGNvbWJpbmUgdGhpcyB3aXRoCisnLWcgYWxsJy4gIEUuRy4sIC1nIGFsbCAtciBzbm1wdjMgd2lsbCBydW4gYWxsIHNubXB2MyAobmFtZWQpIHRlc3RzCit0aGF0IEI8UlVORlVMTFRFU1RTPiBjYW4gZmluZC4KKworPWl0ZW0gLWYKKworT25seSBydW4gdGhlIHRlc3RzIHRoYXQgZmFpbGVkIGZyb20gdGhlIGxhc3QgcnVuLgorCis9aXRlbSAtLWZhaWxlZC1maWxlIEZJTEUKKworV2hlcmUgdG8gc3RvcmUgdGhlIHN0YXRlIG9mIHdoaWNoIHRlc3RzIGhhdmUgZmFpbGVkLgorCis9aXRlbSAtRgorCitEb24ndCBzYXZlIHN0YXRlIHRvIHRoZSBmYWlsZWQtZmlsZS4KKworPWl0ZW0gLUQgUEFUSAorCis9aXRlbSAtLXNyY2RpciBQQVRICisKK0lmIFJVTkZVTExURVNUUyBpcyBiZWluZyBleGVjdXRlZCBmcm9tIGEgYnVpbGQgZGlyZWN0b3J5IG90aGVyIHRoYW4KK3doZXJlIHRoZSBzb3VyY2UgZmlsZXMgYXJlIGxvY2F0ZWQsIHRoaXMgZmxhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5Cit3aGVyZSB0aGUgTmV0LVNOTVAgcm9vdCBzb3VyY2UgZGlyZWN0b3J5IGlzIGZvdW5kLgorCis9aXRlbSAtZCBQQVRICisKKz1pdGVtIC0tYnVpbGRkaXIgUEFUSAorCitTcGVjaWZpZXMgdGhlIHJvb3Qgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworPWl0ZW0gLS1tYXN0ZXItZGlyZWN0b3J5IERJUk5BTUUKKworU3BlY2lmaWVzIGFuIGFsdGVybmF0ZSBtYXN0ZXIgZGlyZWN0b3J5LiAgVGhlIGRlZmF1bHQgaXMgImZ1bGx0ZXN0cyIKKworPWl0ZW0gLXYKKworPWl0ZW0gLS12ZXJib3NlCisKK1R1cm5zIG9uIHZlcmJvc2Ugb3V0cHV0IG1vZGUuCisKKz1pdGVtIC1xCisKKz1pdGVtIC0tcXVpZXQKKworVHVybnMgb24gcXVpZXQgb3V0cHV0IG1vZGUuCisKKz1pdGVtIC0tZGVidWcKKworVHVybnMgb24gZGVidWdnaW5nIG91dHB1dCAod2hpY2ggcHJpbWFyaWx5IHNob3dzIGhvdyBCPFJVTkZVTExURVNUUz4KK2lzIGNvbGxlY3RpbmcgdGVzdHMgdG8gcnVuLCBldGMpLgorCis9aXRlbSAtaAorCis9aXRlbSAtLWhlbHAKKworQ29tbWFuZCBsaW5lIHVzYWdlIGhlbHAgb3V0cHV0LgorCis9YmFjaworCis9aGVhZDEgVEVTVCBBUkNISVRFQ1RVUkUKKworPWhlYWQyIFRBUCBvdXRwdXQKKworVEFQIHN0YW5kcyBmb3IgIlRlc3QgQW55dGhpbmcgUHJvdG9jb2wiLiAgVEFQIHdhcyBvcmlnaW5hbGx5CitwZXJsLXNwZWNpZmljIGJ1dCBoYXMgYmVlbiB0dXJuaW5nIG91dCB0byBiZSBhIGdlbmVyaWMgcHJvdG9jb2wgZm9yCit0ZXN0aW5nIGp1c3QgYWJvdXQgYW55dGhpbmcuICBJdCdzIGhlYXZpbHkgZG9jdW1lbnRlZCBhdDoKKworICBodHRwOi8vdGVzdGFueXRoaW5nLm9yZy93aWtpL2luZGV4LnBocC9NYWluX1BhZ2UKKworV2UncmUgdXNpbmcgVEFQIGJlY2F1c2UgaXQncyBoaWdobHkgZmxleGlibGUgYW5kIHNlcGFyYXRlcyB0aGUKK2ludmlkdWFsIHRlc3RzIGZyb20gdGhlICJjb2xsZWN0IGFuZCByZXBvcnQiIGFzcGVjdC4gIFJVTkZVTExURVNUUyBpcworc2ltcGx5IGEgcGVybC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBmb3IgY29sbGVjdGluZyBhbmQgc3VtbWFyaXppbmcgdGhlCit0ZXN0IHJlc3VsdHMuICBPdGhlciBjb2xsZWN0aW9uIGFnZW50cyBjb3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhpcworb25lLCBhbmQgYW55IHNvcnQgb2YgdGVzdCBvciBsYW5ndWFnZSBjb3VsZCBiZSB1c2VkIGZvciB0aGUgaW5kaXZpZHVhbAordGVzdHMgYXMgd2VsbCAoaW4gZmFjdCB0aGUgZGVmYXVsdCBzdWl0ZSBoYXMgc29tZSB0aGF0IGFyZSBTSC1iYXNlZCwKK0MtYmFzZWQsIC4uLikuCisKK0l0IG1heSBiZSB0aGF0IGV2ZW50dWFsbHkgdGhlIFRBUCBwcm90b2NvbCBhY3R1YWxseSBtYWtlcyBpdCBpbnRvIHRoZQorSUVURiAoaHR0cDovL3Rlc3Rhbnl0aGluZy5vcmcvd2lraS9pbmRleC5waHAvVEFQX2F0X0lFVEY6X0RyYWZ0X1N0YW5kYXJkKS4KKworVGhlIHN5bnRheCBvZiBUQVAgaXMgdmVyeSBzaW1wbGUuICBTZWUgdGhlIGFib3ZlIHdlYiBwYWdlIGZvciBhCitjb21wbGV0ZSBkZXNjcmlwdGlvbiwgYnV0IHRoaXMgd2lsbCBwcm92aWRlIHlvdSBhIG1pbmltYWwgImdldHRpbmcKK3N0YXJ0ZWQiIGV4YW1wbGUgYW5kIHNob3dzIHRoZSBvdXRwdXQgb2YgNSBzdWItdGVzdHMgcnVuIGZyb20gYSBzaW5nbGUKK3Rlc3QgYXBwbGljYXRpb24uCisKKyAgMS4uNQorICBvayAxIC0gWWF5CisgIG9rIDIgLSBTZWNvbmQgcGFydCBzdWNjZWVkZWQKKyAgbm90IG9rIDMgLSBPaCBuby4uLiAgQSBwcm9ibGVtIG9jY3VycmVkLgorICBub3Qgb2sgNCAtIFRoZSBjb21wdXRlciB0aG91Z2h0IDIrMiB3YXMgNQorICBvayA1IC0gQWxsIGlzIHdlbGwgdGhhdCBlbmRzIHdlbGwKKworVGhhdCdzIGl0LiAgT3V0cHV0IGZyb20gYSB0ZXN0IHRvb2wgbGlrZSB0aGF0IGlzIGF1dG8tc3VtbWFyaXplZCBieQordGhpcyBhcHBsaWNhdGlvbiBpbiBzdWNjZXNzL2ZhaWwgcmVwb3J0cy4KKworPWhlYWQyIFRlc3RpbmcgUGhhc2VzCisKK1RoZSB0ZXN0aW5nIHByb2Nlc3MgZ29lcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcGhhc2VzOgorCisgLSBUZXN0IGFuZCBJbmZyYXN0cnVjdHVyZSBDb2xsZWN0aW9uCisgLSBUZXN0IEV4ZWN1dGlvbgorICAgLSBCdWlsZCBpZiBuZWVkZWQKKyAgIC0gUnVuCisKKz1oZWFkMiBUZXN0IENvbGxlY3Rpb24KKworQjxSVU5GVUxMVEVTVFM+IHdpbGwgc2VhcmNoIGFsbCB0aGUgcmVxdWVzdGVkIGdyb3VwcyBmb3IgZmlsZXMgdGhhdAorYmVnaW4gd2l0aCB0aGUgbGV0dGVyICdUJy4gIFRoZXkgYXJlIGV4ZWN1dGVkIGluIGFscGhhYmV0aWNhbCBvcmRlcgord2l0aGluIHRoZWlyIGdyb3VwLiAgQ29udmVudGlvbiBpcyB0byBudW1iZXIgdGVzdCBmaWxlcyB3aXRoIGEgdGhyZWUKK2RpZ2l0ICh6ZXJvLXBhZGRlZCkgbnVtYmVyIGFmdGVyIHRoZSAnVCcgbGV0dGVyIHRvIGVuc3VyZSBvcmRlcmluZyBpcworYXMgZXhwZWN0ZWQuCisKK0ZpbGVzIHRvIGJlIGNvbGxlY3RlZCBieSBCPFJVTkZVTExURVNUUz4gYXJlIG1hZGUgdXAgb2YgYSBudW1iZXIgb2YKK2NvbXBvbmVudHMgdG8gc3VwcG9ydCBhIGZsZXhpYmxlIGJ1aWxkIGFuZCBleGVjdXRpb24gc3lzdGVtIChkaXNjdXNzZWQKK2luIGRldGFpbCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zKS4gIFRoZXkgYXJlIHN0cnVjdHVyZWQgYXMgZm9sbG93czoKKworICBUPE5OTj48TkFNRT5fPFRZUEU+LjxTVUZGSVg+CisKK1doZXJlOgorCisgIE5OTjogICAgICBJcyB0aGUgMyBkaWdpdCBudW1iZXIgbWVudGlvbmVkIGFib3ZlLgorICBOQU1FOiAgICAgVGhlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0IGRlc2NyaWJpbmcgd2hhdCBpdCdzIGFib3V0CisgIFRZUEU6ICAgICBUaGUgaW50ZXJuYWwgInR5cGUiIG9mIHRoZSB0ZXN0LCB3aGljaCBpcyB1c2VkIGxhdGVyIGluIGJ1aWxkaW5nCisgICAgICAgICAgICBhbmQgZXhlY3V0aW9uIChzZWUgYmVsb3cpLgorICAuU1VGRklYOiAgQW4gb3B0aW9uYWwgZmlsZS10eXBlIHN1ZmZpeAorCitFeGFtcGxlczoKKworICBmdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X3NpbXBsZQorICBmdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYworCitBbnkgb3RoZXIgZmlsZXMgYXJlIGlnbm9yZWQgaW4gdGVybXMgb2YgdGVzdHMgYW5kIG1heSBiZSBzdXBwbGltZW50YWwKK3RvIHRoZSBhYm92ZSBidWlsZCBzeXN0ZW1zLiAgKFN1cHBvcnRpbmcgZmlsZXMsIGJ5IGNvbnZlbnRpb24sIGJlZ2luCit3aXRoIGEgY2FwaXRhbCAnUycpLgorCis9aGVhZDMgRnVsbCBUaXRsZQorCitXaXRoaW4gdGhlIGZpbGUgdGhlcmUgbWF5IGJlIGEgbGluZSBjb250YWluaW5nICJIRUFERVIgLi4uIiB0aGF0IHdpbGwKK2JlIGV4YW1pbmVkIGZvciBhIGJldHRlciB0aXRsZSBvZiB0aGUgdGVzdC4gIEFueXRoaW5nIGJlZm9yZSAiSEVBREVSIgord2lsbCBiZSBpZ25vcmVkLCBhbmQgdGhlIHNwZWNpYWwgIiovIiB3aWxsIGJlIHJlcGxhY2VkIGFzIHdlbGwuICBGb3IKK2V4YW1wbGUsIHRoZXNlIGFyZSB2YWxpZCBoZWFkZXIgc291cmNlIGxpbmVzOgorCisgICMgSEVBREVSIEEgY29vbCB0ZXN0CisgIC8qIEhFQURFUiBBIGNvb2wgdGVzdCBmcm9tIG15IEMtYmFzZWQgc291cmNlIGZpbGUgKi8KKworPWhlYWQyIEluZnJhc3RydWN0dXJlIENvbGxlY3Rpb24KKworSW4gYWRkaXRpb24gdG8gdGVzdCBmaWxlcywgSTxpbmZyYXN0cnVjdHVyZT4gZmlsZXMgYXJlIHNlYXJjaGVkIGZvcgorYW5kIHJlbWVtYmVyZWQgZm9yIGxhdGVyIHVzZSAoYWdhaW4sIHNlZSBiZWxvdykuICBUaGVzZSBmaWxlcyB3aWxsIGJlCitvZiB0aGUgZm9ybToKKworICA8VFlQRT5fPFVTRUFHRT4KKworV2hlcmU6CisKKyAgVFlQRTogICAgICBUaGUgdHlwZSBuYW1lIG1hdGNoaW5nIHRoZSBmaWxlIHRvIHN1cHBvcnQuCisKKyAgVVNBR0U6ICAgICBIb3cgdGhpcyBmaWxlIHNob3VsZCBiZSB1c2VkLiAgQ3VycmVudGx5IHNob3VsZCBiZSBlaXRoZXIKKyAgICAgICAgICAgIEk8YnVpbGQ+IG9yIEk8cnVuPiBhcyBkZXNjcmliZWQgYmVsb3cuCisKK0V4YW1wbGUgZmlsZXMKKworICBmdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkCisgIGZ1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4KKworSW5mcmFzdHJ1Y3R1cmUgZmlsZXMgbWF5IGV4aXN0IGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5IG9mIHdoZXJlIHRoZXkncmUKK2V4cGVjdGVkIHRvIGJlIHJ1biAoaWUsIHBhcmFsbGVsIHRvIHRoZSB0ZXN0IGZpbGVzKSBvciB0aGV5IG1heSBleGlzdAoraW4gdGhlIHNwZWNpYWwgInN1cHBvcnQiIGRpcmVjdG9yeSBpZiB0aGV5J3JlIGV4cGVjdGVkIHRvIGJlCitnZW5lcmljYWxseSB1c2VkIGFjcm9zcyBtdWx0aWxwZSB0ZXN0IGdyb3VwIHR5cGVzLgorCis9aGVhZDIgVGVzdCBFeGVjdXRpb24KKworVGVzdHMgYXJlIHJ1biBpbiB0d28gcGhhc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgcHNldWRvLWFsZ29yaXRobToKKworICArIGZvciBlYWNoIHRlc3QgZmlsZQorICAgICsgaWYgYW4gYXBwcm9wcmlhdGUgVFlQRV9idWlsZCBmaWxlIGV4aXN0cyBmb3IgYSB0ZXN0IHsKKyAgICAgICsgcnVuICJUWVBFX2J1aWxkIFRFU1RGSUxFIgorICAgICAgKyByZWNvcmQgdGhlIGxhc3QgbGluZSBhcyB0aGUgbmV3IFRFU1RGSUxFIHRvIHJ1bgorICAgIH0KKworICAgICsgaWYgYW4gYXBwb3JwcmlhdGUgVFlQRV9ydW4gZmlsZSBleGlzdHMgZm9yIGEgdGVzdCB7CisgICAgICArIHJ1biAiVFlQRV9ydW4gVEVTVEZJTEUiCisgICAgICArIGNvbGxlY3QgaXQncyBvdXRwdXQgYXMgdGhlIFRBUCBvdXRwdXQKKyAgICB9IGVsc2UgeworICAgICAgKyBydW4gIlRFU1RGSUxFIgorICAgICAgKyBjb2xsZWN0IGl0J3Mgb3V0cHV0IGFzIHRoZSBUQVAgb3V0cHV0CisgICAgfQorCitGb3IgZXhhbXBsZSwgaWYgdGhlIGZvbGxvd2luZyBmaWxlcyBleGlzdGVkOgorCisgIGZ1bGx0ZXN0cy9leGFtcGxyZXMvVDAwMXRlc3RpbmdfZXhhbXAKKyAgZnVsbHRlc3RzL2V4YW1wbHJlcy9leGFtcF9idWlsZAorICBmdWxsdGVzdHMvZXhhbXBscmVzL2V4YW1wX3J1bgorCitUaGVuIHRoZSBmb2xsb3dpbmcgd291bGQgYmUgdGhlIHJvdWdoIGV4ZWN1dGlvbjoKKworICBuZXdmaWxlID0gYGZ1bGx0ZXN0cy9leGFtcGxyZXMvZXhhbXBfYnVpbGQgXAorICAgICAgICAgICAgIGZ1bGx0ZXN0cy9leGFtcGxyZXMvVDAwMXRlc3RpbmdfZXhhbXAgfCB0YWlsIC0xYAorICBmdWxsdGVzdHMvZXhhbXBscmVzL2V4YW1wX3J1biAkbmV3ZmlsZQorCis9aGVhZDEgVEVTVCBUWVBFUworCitOZXQtU05NUCB0ZXN0aW5nIGNvbWVzIHdpdGggYSBudW1iZXIgb2YgdGVzdCBzdWl0ZSAiYnVpbGRlcnMiIGFuZAorInJ1bm5lcnMiIHRoYXQgYXJlIHVzZWZ1bCBmb3IgZGV2ZWxvcGluZyBuZXcgdGVzdHMuICBUaGVzZSBhcmUKK2RvY3VtZW50ZWQgaGVyZToKKworPW92ZXIKKworPWl0ZW0gc2ltcGxlCisKK0k8c2ltcGxlPiB0ZXN0IGZpbGVzIGFyZSBzaW1wbGUgc2gtc2hlbGwtc2NyaXB0IGZpbGVzIHVzZWQgdG8gdGVzdAoraGlnaC1sZXZlbCBmdW5jdGlvbmFsaXR5IG9mIE5ldC1TTk1QIHRvb2xzLiAgVGhleSdyZSBlYXN5IHRvIHdyaXRlIGFuZAorc2hvdWxkIGdlbmVyYWxseSBjb250YWluIHRoZSBmb2xsb3dpbmcgc29ydCBvZiBzdHJ1Y3R1cmU6CisKKyAgLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisgIEhFQURFUiBteSBuYW1lCisgIFNUQVJUQUdFTlQKKyAgQ0FQVFVSRSAic25tcGdldC4uLiIKKyAgQ0hFQ0sgImZvciB0aGlzIHN0cmluZyIKKyAgU1RPUEFHRU5UCisgIEZJTklTSEVECisKK0V4YW1wbGUgZmlsZTogZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9zaW1wbGUKKworPWl0ZW0gY2FwcAorCitJPGNhcHA+IGZpbGVzIGFyZSBmdW5kYW1lbnRhbGx5IGZ1bGwgQy1zb3VyY2UtY29kZSBhcHBsaWNhdGlvbnMgdGhhdAorYXJlIGJ1aWx0IGFuZCBsaW5rZWQgYWdhaW5zdCB0aGUgbGlibmV0c25tcCBsaWJyYXJ5LiAgVGh1cywgYSBmaWxlCituYW1lZCBJPFQwMDFteXRlc3RfY2FwcC5jPiBpcyBjb21waWxlZCB1c2luZyB0aGUgc2FtZSBjb21waWxlciB1c2VkIHRvCitjb21waWxlIE5ldC1TTk1QIGFuZCBsaW5rZWQgYWdhaW5zdCB0aGUgcmVxdWlyZWQgbGlicmFyaWVzIGZvciBhIGJhc2ljCitOZXQtU05NUCBhcHBsaWNhdGlvbi4gIEl0IHNob3VsZCwgb2YgY291cnNlLCBwcm9kdWNlIFRBUCBvdXRwdXQgYWZ0ZXIKK2l0J3MgY29tcGlsZWQgYW5kIHJ1bi4KKworRXhhbXBsZSBmaWxlOiBmdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jCisKKz1pdGVtIGNsaWIKKworSTxjbGliPiBmaWxlcyBhcmUgc2ltcGxlIEMtc291cmNlLWNvZGUgZmlsZXMgdGhhdCBhcmUgd3JhcHBlZCBpbnRvIGEKK21haW4oKSBhcHBsaWNhdGlvbiB3aXRoIGFwcHJvcHJpYXRlICNpbmNsdWRlIGZpbGVzLCBldGMuICBJPGNsaWI+CitmaWxlcyBhcmUgZGVzaWduZWQgcHJpbWFybHkgdG8gd3JpdGUgcXVpY2sgdW5pdC10ZXN0cyBmb3IgdGhlIE5ldC1TTk1QCitjb3JlIGxpYnJhcnkuCisKK0V4YW1wbGUgZmlsZTogZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmMKKworPWl0ZW0gV3JpdGUgeW91ciBvd24hCisKK1RoaXMgdGVzdCBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gYmUgZmxleGlibGUgYW5kIGV4cGFuZGFibGUgaWYgdGhlCitiYXNpYyBhcmNoaXRlY3R1cmUgaXMgZm9sbG93ZWQuICBUaGUgZ29hbCBpcyB0byBtYWtlIGl0IGVhc3kgdG8gY3JlYXRlCit2ZXJ5IHNpbXBsZSB0ZXN0IHN1aXRlcyBvciBjb21wbGV4IHVuaXQtdGVzdHMgb3IgYW55dGhpbmcgaW4gYmV0d2Vlbi4KKworPWJhY2sKKworPWhlYWQxIERFQlVHR0lORyBCUk9LRU4gVEVTVFMKKworSWYgdGhlIGluZGl2aWR1YWwgdGVzdHMgYXJlIGRlc2lnbmVkIHdlbGwsIHlvdSBzaG91bGQgYmUgYWJsZSB0bworcmUtcnVuIGluZGl2aWR1YWwgdGVzdHMgb3V0c2lkZSBvZiB0aGUgQjxSVU5GVUxMVEVTVFM+IGFnZ3JlZ2F0aW9uCitlbnZpcm9ubWVudCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgX2J1aWxkIGFuZCBfcnVuIHNjcmlwdHMgYXMgbmVlZGVkLgorVGVzdCB3cml0ZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIG91dHB1dCBjb21tZW50cyBpbiB0aGVpciBUQVAgb3V0cHV0IHRvCitoZWxwIHVzZXJzIGRlYnVnIHRoZSByZXN1bHRzLgorCis9aGVhZDEgQXV0aG9yCisKK09yaWdpbmFsIGFyY2hpdGVjdHVyZTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKz1jdXQKKwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9SVU5URVNUUyBiL3Rlc3RpbmcvUlVOVEVTVFMKaW5kZXggZjZkYzZhNi4uNDkzMzMwNyAxMDA3NTUKLS0tIGEvdGVzdGluZy9SVU5URVNUUworKysgYi90ZXN0aW5nL1JVTlRFU1RTCkBAIC0xLDM5OSArMSw0OSBAQAogIyEvYmluL3NoCi0jCi0jIFJVTlRFU1RTIFstaF0uLi4KLSMKLSMgUkVUVVJOUzoJTnVtYmVyIG9mIGZhaWxlZCB0ZXN0cy4KLSMKLSMgQ0FMTFM6IGV2YWxfb25lcHJvZ3JhbS5zaCBbLWhdWy1sa10gPHByb2dyYW0+Ci0jCi0jCiAKLSMKLSMgU3VnZ2VzdGVkIGltcHJvdmVtZW50KHMpOgotIwlSdW4gYSBnaXZlbiB0ZXN0IGFnYWluc3QgYSBydW5uaW5nIGFnZW50LgotIwotIyBWYXJpYWJsZXM6ICAoKiA9IGV4cG9ydGVkKQotIyAgKlNOTVBfQkFTRURJUjogIAkgIHRoZSBzb3VyY2UgYmFzZSBkaXJlY3RvcnkgZm9yIHRlc3RzCi0jICAqU05NUF9VUERJUjogIAkgIGRpcmVjdG9yeSBhYm92ZSB3aGVyZSB0aGUgdGVzdCBiaW5hcmllcyBsaXZlICgtRCBvcHRpb24pCi0jICAqU05NUF9QQVRICSMjIHllcywgUEFUSCBpcyBhbHJlYWR5IHNldHVwCi0jICAqU05NUF9WRVJCT1NFCSMjIDA9c2lsZW50LCAxPXdhcm5pbmdzLCAyPW1vcmUKK3NyY2Rpcj1gZGlybmFtZSAkMGAKK3NyY2Rpcj1gY2QgJHNyY2RpcjsgcHdkYAorc3JjZGlyPWBkaXJuYW1lICRzcmNkaXJgCiAKLSMgVXNhZ2UgbWVzcy4gIChObywgaXQgd29ya3MuKQotIwotCi11c2FnZSgpIHsgCi0gICAgY2F0IDw8IEJMSUsKLQotVXNhZ2U6IGBiYXNlbmFtZSAkMGAgWy1hXSBbLVMgU0xFRVBUSU1FXSBbLWhdIFstaV0gWy12XSBbLVZdIFstc10gWy1YTV0KLSAgICAgICBbLVQgVEVTVE5VTVNdIFstRCBiaW5kaXJdIFstUyBzZWNvbmRzXSBbLVAgPHVkcHx0Y3B8dWRwNnx0Y3A2fHVuaXg+XQotCi0gIC1hICAgICAgICBydW4gYWxsIHRlc3RzLgotICAtVCBOVU1TICAgcnVuIHBhcnRpY3VsYXIgdGVzdHMgKGNvbW1hbmQgc2VwYXJhdGVkIGxpc3Qgb2YgbnVtYmVycykKLSAgLWkgICAgICAgIHJ1biBpbnRlcmFjdGl2ZWx5Ci0gIC12ICAgICAgICBiZSB2ZXJib3NlCi0gIC1WICAgICAgICBiZSB2ZXJ5IHZlcmJvc2UKLSAgLVMgVElNRSAgIFRJTUUgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIHRpbWVvdXQgd2hlbiB3YWl0aW5nIGZvciBhCi0gICAgICAgICAgICByZXNwb25zZSBmcm9tIHRoZSBhZ2VudC4KLSAgLUEgRkxBR1MgIEV4dHJhIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGFnZW50LgotICAtdCBGTEFHUyAgRXh0cmEgZmxhZ3MgdG8gcGFzcyB0byB0aGUgdHJhcGQuCi0gIC1zICAgICAgICBEb24ndCBlcmFzZSB0aGUgcnVudGltZSBkYXRhIGRpcmVjdG9yeSBmb3Igc3VjY2Vzc2Z1bCB0ZXN0cwotICAtWE0gICAgICAgRG9uJ3Qgc2V0IE1JQkRJUlMgZW52aXJvbm1lbnQgdW5sZXNzIGFic29sdXRlbHkgbmVjZXNzYXJ5Ci0gIC14ICAgICAgICBUdXJuIG9uIFNIIG91dHB1dCBkZWJ1Z2dpbmcgZm9yIHRlc3RzLgotICAtUCBUUkFOUyAgU3BlY2lmeSBvbiB3aGljaCB0cmFuc3BvcnQgZG9tYWluIHRvIHJ1biB0aGUgdGVzdHMuRGVmYXVsdCBpcyB1ZHAuCi0gIC1wIHByZWZpeCBTcGVjaWZ5IHRlc3QgY2FzZSBwcmVmaXguIE9wdGlvbnMgYXJlIFtUfFZdLiBEZWZhdWx0IGlzIFQKLQotQkxJSwotICAgIGV4aXQgMAotfQotCi10cmFwICJleGl0IDE7IiAxIDIgMyA5IDEzIDE1Ci0KLVNOTVBfQkFTRURJUj1gZGlybmFtZSAkMGAKLVNOTVBfUFJFRkVSX05FQVJfTUlCUz0xCSMjIHByZWZlciBNSUIgZmlsZXMgZm91bmQgaW4gc291cmNlIGhpZXJhcmNoeQotZXhwb3J0IFNOTVBfUFJFRkVSX05FQVJfTUlCUwotU05NUF9URVNUX1BSRUZJWD0ke1NOTVBfVEVTVF9QUkVGSVg6PVR9Ci1leHBvcnQgU05NUF9URVNUX1BSRUZJWAotCi0jIyMgQ2hlY2sgZm9yIHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdC4KLSMjaWYgWyAhIC1zICIke1NOTVBfQkFTRURJUn0vVEVTVENPTkYuc2giICBdIDsgdGhlbiAKLSMjICBlY2hvICJObyBURVNUQ09ORi5zaCBpbiBcIiRTTk1QX0JBU0VESVJcIiA7IGV4aXRpbmciCi0jIyAgZXhpdCAwCi0jI2ZpCi0KLU9SSUdESVI9YHB3ZGAJCSMjIHRoaXMgc2NyaXB0IG1heSBiZSBpbnZva2VkIHdpdGggcmVsYXRpdmUgcGF0aAotU05NUF9VUERJUj0uLgkJIyMgYnVpbGRpbmcgZnJvbSB0aGUgc291cmNlIHRyZWUKLWludGVyYWN0aXZlPW5vCi1TTk1QX1ZFUkJPU0U9JHtTTk1QX1ZFUkJPU0U6PTB9Ci1TTk1QX1NMRUVQPSR7U05NUF9TTEVFUDo9MX0gCSMjIGRlZmF1bHQgc2Vjb25kcyB0byBzbGVlcAotU0hfREVCVUc9MAotVVNFX1RFU1RfTlVNUz0wCi0KLXdoaWxlIFsgLW4gIiQxIiBdOyBkbwotICAgIGNhc2UgIiQxIiBpbgotCS1oKQotCSAgICB1c2FnZQotCSAgICBleGl0Ci0JICAgIDs7Ci0KLQktaSkKLQkgICAgaW50ZXJhY3RpdmU9InllcyIKLQkgICAgOzsKLQktdikKLQkgICAgU05NUF9WRVJCT1NFPTEKLQkgICAgOzsKLQktVikKLQkgICAgU05NUF9WRVJCT1NFPTIKLQkgICAgOzsKLQktcykKLQkgICAgU05NUF9TQVZFX1RNUERJUj0ieWVzIgotCSAgICBleHBvcnQgU05NUF9TQVZFX1RNUERJUgotCSAgICA7OwotCS1EKQotCSAgICBzaGlmdAotCSAgICBTTk1QX1VQRElSPSIkMSIKLQkgICAgOzsKLQktcCkKLQkgICAgc2hpZnQKLQkgICAgU05NUF9URVNUX1BSRUZJWD0iJDEiCi0JICAgIDs7Ci0JLVApCi0JCXNoaWZ0Ci0JCVNOTVBfVFJBTlNQT1JUX1NQRUM9IiQxIgotCQlleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQwotCQlpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KLQkJCVNOTVBfU05NUERfUE9SVD0iL3Zhci90bXAvdW5peHNubXBkIgotCQkJU05NUF9TTk1QVFJBUERfUE9SVD0iL3Zhci90bXAvdW5peHNubXB0cmFwZCIKLQkJCVNOTVBfVEVTVF9ERVNUPSIiCi0JCQlleHBvcnQgU05NUF9TTk1QRF9QT1JUCi0JCQlleHBvcnQgU05NUF9TTk1QVFJBUERfUE9SVAotCQkJZXhwb3J0IFNOTVBfVEVTVF9ERVNUCi0JCWZpCi0JCTs7Ci0JLVQpCi0JICAgIHNoaWZ0Ci0JICAgIHRlc3RfbnVtcz1gZWNobyAkMSB8IHNlZCAncy8sLyAvZydgCi0JICAgIDs7Ci0JLWEpCi0JICAgIHRlc3RfbnVtcz0iYWxsIgotCSAgICA7OwotCi0JLUEpCi0JICAgIHNoaWZ0Ci0JICAgIEFHRU5UX0ZMQUdTPSIkMSIKLQkgICAgZXhwb3J0IEFHRU5UX0ZMQUdTCi0JICAgIDs7Ci0JLVMpCi0JICAgIHNoaWZ0Ci0JICAgIFNOTVBfU0xFRVA9IiQxIgotCSAgICA7OwotCS10KQotCSAgICBzaGlmdAotCSAgICBUUkFQRF9GTEFHUz0iJDEiCi0JICAgIGV4cG9ydCBUUkFQRF9GTEFHUwotCSAgICA7OwotCi0JLXgpCi0JICAgIFNIX0RFQlVHPTEKLQkgICAgOzsKLQotCS1YTSkKLQkgICAgU05NUF9QUkVGRVJfTkVBUl9NSUJTPTAKLQkgICAgOzsKLQotCS1uKQotCSAgICBVU0VfVEVTVF9OVU1TPTEKLQkgICAgOzsKLSAgICBlc2FjCi0KLSAgICBzaGlmdAotZG9uZQotCi1leHBvcnQgU05NUF9TTEVFUAorIyBzZXQgdXAgTUlCRElSUyB0byByZWZlciB0byB0aGUgc3JjIGRpcmVjdG9yeQoraWYgWyAieCRNSUJESVJTIiA9ICJ4IiBdOyB0aGVuCisgICAgTUlCRElSUz0ke3NyY2Rpcn0vbWlicworICAgIGV4cG9ydCBNSUJESVJTCitmaQogCiAjIE1ha2Ugc3VyZSBNaW5HVyAvIE1TWVMgdXNlcnMgaGF2ZSB0aGUgcHNraWxsLmV4ZSBwcm9ncmFtIHRvIHN0b3AgdGhlIGFnZW50IGFuZAogIyBzbm1wdHJhcGQKLWlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgLWEgInhgd2hpY2ggcHNraWxsLmV4ZSAyPi9kZXYvbnVsbGAiID0gIngiIF07IHRoZW4KLSAgICBlY2hvICJDb3VsZCBub3QgZmluZCBwc2tpbGwuZXhlLiBBYm9ydGluZyB0ZXN0cy4iCi0gICAgZWNobyAicHNraWxsLmV4ZSBjYW4gYmUgaW5zdGFsbGVkIGFzIGZvbGxvd3M6IgotICAgIGVjaG8gIi0gRG93bmxvYWQgcHNraWxsLmV4ZSBmcm9tIGh0dHA6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tdXMvc3lzaW50ZXJuYWxzL2RlZmF1bHQuYXNweC4iCi0gICAgZWNobyAiLSBDb3B5IHBza2lsbC5leGUgdG8gQzpcXE1pbkdXXFxtc3lzXFwxLjBcXGJpbi4iCi0gICAgZXhpdCAxCi1maSAKLQotIyBGaW5kIGV4ZWN1dGFibGVzIGluIHNvdXJjZSBmaXJzdCwgdGhlbiBidWlsZCwgdGhlbiBleGlzdGluZyBQQVRILgotIyMgQWRkIHRvIFBBVEggaWYgYSBiaW5hcnkgaXMgZm91bmQuCi0KLWNkICRTTk1QX1VQRElSCi1TTk1QX1VQRElSPWBwd2RgCi1iZj1zbm1wZ2V0Ci1pZiBbIC14ICIkYmYiIF0gOyB0aGVuCi0gICBQQVRIPSRTTk1QX1VQRElSOiRQQVRICi1lbHNlCi0gIGZvciBkZCBpbiBhcHBzIGJpbiA7IGRvCi0gICBiZj0kZGQvc25tcGdldAotICAgaWYgWyAteCAiJGJmIiBdIDsgdGhlbgotICAgICAgUEFUSD0kU05NUF9VUERJUi8kZGQ6JFBBVEgKLSAgICAgIGJyZWFrCi0gICBmaQotICBkb25lCitpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKyAgICBmb3IgZSBpbiBwc2tpbGwuZXhlIHBzbGlzdC5leGU7IGRvCisJaWYgWyAieGB0eXBlICRlIDI+L2Rldi9udWxsYCIgPSAieCIgXTsgdGhlbgorCSAgICBlY2hvICJDb3VsZCBub3QgZmluZCAkZS4gQWJvcnRpbmcgdGVzdHMuIgorCSAgICBlY2hvICIkZSBjYW4gYmUgaW5zdGFsbGVkIGFzIGZvbGxvd3M6IgorCSAgICBlY2hvICItIERvd25sb2FkIFBTVG9vbHMuemlwIGZyb20gaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9zeXNpbnRlcm5hbHMvZGVmYXVsdC4iCisJICAgIGVjaG8gIi0gQ29weSAkZSB0byBDOlxcTWluR1dcXG1zeXNcXDEuMFxcYmluLiIKKwkgICAgZXhpdCAxCisJZmkKKyAgICBkb25lCiBmaQotZm9yIGRkIGluIGFnZW50IGJpbiBzYmluIDsgZG8KLSAgIGJmPSRkZC9zbm1wZAotICAgaWYgWyAteCAiJGJmIiBdIDsgdGhlbgotICAgICAgUEFUSD0kU05NUF9VUERJUi8kZGQ6JFBBVEgKLSAgICAgIGJyZWFrCi0gICBmaQotZG9uZQotCi1iZj1pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi1pZiBbICEgLXMgIiRiZiIgXSA7IHRoZW4KLSAgIGVjaG8gIk5vIFwiJGJmXCIgaW4gJFNOTVBfVVBESVIgLiBTb21lIHRlc3RzIHdpbGwgYmUgc2tpcHBlZCIKLWZpCi11bnNldCBiZgotCi0jIFJ1biBmcm9tIHRoZSB0ZXN0IHNjcmlwdHMgZGlyZWN0b3J5LgotY2QgJE9SSUdESVIgOyBjZCAke1NOTVBfQkFTRURJUn0KLVNOTVBfQkFTRURJUj1gcHdkYAotCi0jIFNldHVwIGZvciB0aGUgbmV4dCB0ZXN0IHJ1bi4KLXJtIC1mIGNvcmUgdGVzdHMvY29yZQotCi1QQVRIPSR7U05NUF9CQVNFRElSfTokUEFUSAotU05NUF9QQVRIPXllcwotCi1leHBvcnQgUEFUSAotZXhwb3J0IFNOTVBfQkFTRURJUgotZXhwb3J0IFNOTVBfUEFUSAotZXhwb3J0IFNOTVBfVVBESVIKLWV4cG9ydCBTTk1QX1ZFUkJPU0UKLQotV0hJQ0g9d2hpY2gKLSRXSElDSCAkMCA+IC9kZXYvbnVsbCAyPiYxCi1pZiBbICQ/IC1uZSAwIF0gOyB0aGVuCi0gICAgV0hJQ0g9dHlwZQotZmkKLQotZm9yIG5lZWRlZCBpbiBzbm1wZCBzbm1wZ2V0IHNubXBnZXRuZXh0OyBkbwotICAgICRXSElDSCAkbmVlZGVkID4gL2Rldi9udWxsIDI+JjEKLSAgICBpZiBbICQ/IC1uZSAwICBdIDsgdGhlbiAKLSAgICAgICAgZWNobyAiTm8gJG5lZWRlZCBmb3VuZC4gRXhpdGluZyIKLSAgICAgICAgZXhpdCAxCi0gICAgZmkKLWRvbmUKLQotIwotIyBEaXN0aW5ndWlzaGVkIGV4cGVjdGF0aW9ucy4KLSMKLWlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCi0gICAgZWNobyAke1NOTVBfVVBESVJ9L3Rlc3RpbmcKLSAgICBlY2hvIHBhdGggaXMgJFBBVEgKLSAgICBlY2hvIHRvcCBvZiBidWlsZCBpcyAkU05NUF9VUERJUgotICAgIGVjaG8gc291cmNlIHRlc3RpbmcgaXMgJFNOTVBfQkFTRURJUgotICAgICRXSElDSCBzbm1wdXNtCi1maQotCi0jCi0jIFNvdXJjZSB0aGUgdGVzdGluZyBjb25maWd1cmF0aW9uIGZpbGUKLSMKLQotLiBURVNUQ09ORi5zaAotCi0jIEhhY2s6IHRoZSBhYm92ZSBjcmVhdGVkIGEgZGlyZWN0b3J5LCBub3cgd2UgaGF2ZSB0byBudWtlIGl0IGFuZAotIyBmb3JnZXQgYWJvdXQgaXQuLi4gIEFsbCBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSB0ZXN0IHdyaXRlci4KLXJtIC1mUiAkU05NUF9UTVBESVIKLXVuc2V0IFNOTVBfVE1QRElSCi1leHBvcnQgU05NUF9UTVBESVIKLQotaWYgWyAieCRTTk1QX1BSRUZFUl9ORUFSX01JQlMiID0gIngwIiBdOyB0aGVuCi0gICAgIyB0cnkgdGhlIGNvbXBpbGVkIE1JQkRJUlMgZGlyZWN0b3J5IGZpcnN0LgotICAgICMgaWYgTUlCIGZpbGVzIGFyZSBub3QgZm91bmQsIGZhbGxiYWNrIHRvIHRoZSBzb3VyY2UgYmFzZQotCi0gICAgc25tcHRyYW5zbGF0ZSAtT24gLUlSIHN5c0Rlc2NyID4gL2Rldi9udWxsIDI+JjEKLSAgICBpZiBbICQ/IC1uZSAwIF0gOyB0aGVuCi0gICAgICAgIGlmIFsgIngkTUlCRElSUyIgPSAieCIgXTsgdGhlbgotICAgIAlNSUJESVJTPSR7U05NUF9CQVNFRElSfS8uLi9taWJzCi0gICAgCWV4cG9ydCBNSUJESVJTCi0gICAgICAgIGZpCi0gICAgZmkKLSAgICBzbm1wdHJhbnNsYXRlIC1PbiAtSVIgc3lzRGVzY3IgPiAvZGV2L251bGwgMj4mMQotICAgIGlmIFsgJD8gLW5lIDAgXSA7IHRoZW4KLSAgICAgICAgZWNobyAiQ291bGQgbm90IHJlc29sdmUgc3lzRGVzY3IgaW4gJE1JQkRJUlMuIEV4aXRpbmciCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi1maSAjIyBTTk1QX1BSRUZFUl9ORUFSX01JQlMKLQotIwotIyBTd2l0Y2ggdG8gdGhlIHRlc3RpbmcgZGlyZWN0b3J5LCBmb3IgZWFzZSBvZiB0aGUgY2xpZW50IHRlc3QgcGFja2FnZXMuCi0jCi1jZCAuL3Rlc3RzCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBHbG9iYWxzLgotIwotUFJPR1JBTT0KLUFSR1VNRU5UUz0iJCoiCi0KLVRNUEZJTEU9JFNOTVBfVE1QRElSL2V2YWxfc3VpdGUuc2gkJAotCi10ZXN0bmFtZT0KIAogc3VjY2Vzc19jb3VudD0wCiBmYWlsZWRfY291bnQ9MAotCi1pZiBbICJ4JGRvX3Rlc3RzIiA9ICJ4IiBdOyB0aGVuCi0gICAgIwotICAgICMgTGlzdCB0aGUgdGVzdHMgaW4gcXVlc3Rpb24KLSAgICAjCi0gICAgbnVtPTAKLSAgICBmb3IgdGVzdGZpbGUgaW4gJFNOTVBfVEVTVF9QUkVGSVgqOyBkbwotCWNhc2UgJHRlc3RmaWxlIGluCi0JICAgICMgU2tpcCBiYWNrdXAgZmlsZXMsIGFuZCB0aGUgbGlrZS4KLQkgICAgKn4pICAgICA7OwotCSAgICAqLmJhaykgIDs7Ci0JICAgICoub3JpZykgOzsKLQkgICAgKi5yZWopICA7OwotCi0JICAgICMgRG8gdGhlIHJlc3QKLQkgICAgKikKLQkJbnVtPWBleHByICRudW0gKyAxYAotCQlpZiBbICJ4JGludGVyYWN0aXZlIiAhPSAieHllcyIgLWEgIngkdGVzdF9udW1zIiA9ICJ4IiBdOyB0aGVuCi0JCSAgICBldmFsX29uZXNjcmlwdC5zaCAkdGVzdGZpbGUgJG51bSAieWVzIgotCQlmaQotCQlhbGxfdGVzdHM9IiRhbGxfdGVzdHMgJG51bSIKLQkJYWxsX2ZpbGVzPSIkYWxsX2ZpbGVzICR0ZXN0ZmlsZSIKLQkJOzsKLQllc2FjCi0gICAgZG9uZQotCi0gICAgIwotICAgICMgVE9ETzogYWxsb3cgdXNlciB0byBpbnRlcmFjdGl2ZWx5IHBpY2sgdGhlIGxpc3Qgb2YgdGVzdHMgdG8gcnVuLgotICAgICMKLQotICAgIGlmIFsgIngkaW50ZXJhY3RpdmUiICE9ICJ4eWVzIiBdOyB0aGVuCi0JaWYgWyAieCR0ZXN0X251bXMiID0gIngiIF07IHRoZW4KLQkgICAgRUNITyAiRW50ZXIgdGVzdCBudW1iZXJzIFthbGxdOiAiCi0JICAgIHJlYWQgaW5wCi0JZWxzZQotCSAgICBpZiBbICJ4JHRlc3RfbnVtcyIgPSAieGFsbCIgXTsgdGhlbgotCQlpbnA9IiIKLQkgICAgZWxzZQotCQlpbnA9IiR0ZXN0X251bXMiCi0JICAgIGZpCi0JZmkKLQlpZiBbICJ4JGlucCIgPSAieCIgXTsgdGhlbgotCSAgICBkb190ZXN0cz0iJGFsbF9maWxlcyIKLQllbHNlCi0JICAgIGE9MQotCSAgICBzZXQgJGFsbF9maWxlcwotCSAgICB3aGlsZSBbICRhIC1sZSAkbnVtIF07IGRvCi0JCWlmIGVjaG8gIiAkaW5wICIgfCBncmVwICIgJGEgIiA+IC9kZXYvbnVsbDsgdGhlbgotCQkgICAgZG9fdGVzdHM9IiRkb190ZXN0cyAkMSIKLQkJICAgIGlmIFsgIngkdGVzdF9udW1zIiA9ICJ4IiBdIDsgdGhlbgotCQkJdGVzdF9udW1zPSRhCi0JCSAgICBmaQotCQlmaQotCQlzaGlmdAotCQlhPWBleHByICRhICsgMWAKLQkgICAgZG9uZQotCWZpCi0gICAgZmkKLQotICAgICNlY2hvIFN0YXJ0aW5nOiBSdW5uaW5nIHRlc3RzICRkb190ZXN0cwotZmkKLQotIwotIyBSdW4gdGhlIHRlc3RzCi0jCi1pZiBbICJ4JHRlc3RfbnVtcyIgPSAieGFsbCIgLW8gIngkdGVzdF9udW1zIiA9ICJ4IiBdIDsgdGhlbgotICAgIG51bT0xCi1lbHNlCi0gICAgbnVtPSIkdGVzdF9udW1zIgotZmkKLWNudHI9MAotZm9yIHRlc3RmaWxlIGluICRkb190ZXN0czsgZG8KLSAgICBkb3RoaXNvbmU9InllcyIKLSAgICBpZiBbICRVU0VfVEVTVF9OVU1TID0gMSBdIDsgdGhlbgotCW51bT1gZWNobyAkdGVzdGZpbGUgfCBzZWQgLWUgJ3MvXlQvLztzL1thLXpBLVpdLiovLzsnYAorcm0gLWYgZmFpbGVkX3Rlc3RzCitmb3IgaSBpbiAiJHtzcmNkaXJ9Ii90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QqJDEqOyBkbworICAgIGVjaG8gIlJVTk5JTkcgJGkiCisgICAgJHtzcmNkaXJ9L3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1biAkaQorICAgIGlmIFsgJD8gPSAwIF07IHRoZW4KKyAgICAgICAgc3VjY2Vzc19jb3VudD1gZXhwciAkc3VjY2Vzc19jb3VudCArIDFgCiAgICAgZWxzZQotICAgICAgICBpZF94PTAKLSAgICAgICAgZm9yIGl0ZXN0IGluICRpbnA7IGRvCi0gICAgICAgICAgICBpZiBbICIkY250ciIgPSAiJGlkX3giIF0gOyB0aGVuCi0gICAgICAgICAgICAgICAgbnVtPSIkaXRlc3QiCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgaWRfeD1gZXhwciAkaWRfeCArIDFgCi0gICAgICAgIGRvbmUKKyAgICAgICAgZmFpbGVkX2NvdW50PWBleHByICRmYWlsZWRfY291bnQgKyAxYAorICAgICAgICBlY2hvICIkaSIgPj4gZmFpbGVkX3Rlc3RzCiAgICAgZmkKLSAgICBpZiBbICJ4JGludGVyYWN0aXZlIiA9ICJ4eWVzIiBdOyB0aGVuCi0KLSAgICAgICAgaWYgWyAkU0hfREVCVUcgPSAxIF0gOyB0aGVuCi0JICAgIHNoIC14ICIke1NOTVBfQkFTRURJUn0vZXZhbF9vbmVzY3JpcHQuc2giICR0ZXN0ZmlsZSAkbnVtICJ5ZXMiCi0JZWxzZQotCSAgICBldmFsX29uZXNjcmlwdC5zaCAkdGVzdGZpbGUgJG51bSAieWVzIgotCWZpCi0KLQlFQ0hPICIgIFJ1biB0ZXN0ICMkbnVtICh5L24pIFt5XT8gIgotCXJlYWQgaW5wMgotCWlmIFsgIngkaW5wMiIgPSAieG4iIF07IHRoZW4KLQkgICAgZG90aGlzb25lPW5vCi0JZmkKLSAgICBmaQotICAKLSAgICBpZiBbICJ4JGRvdGhpc29uZSIgPSAieHllcyIgXTsgdGhlbgotICAgICAgICBpZiBbICRTSF9ERUJVRyA9IDEgXSA7IHRoZW4KLQkgICAgc2ggLXggIiR7U05NUF9CQVNFRElSfS9ldmFsX29uZXNjcmlwdC5zaCIgJHRlc3RmaWxlICRudW0gIm5vIgotCWVsc2UKLQkgICAgZXZhbF9vbmVzY3JpcHQuc2ggJHRlc3RmaWxlICRudW0gIm5vIgotCWZpCi0JaWYgWyAkPyA9IDAgXTsgdGhlbgotCSAgICBzdWNjZXNzX2NvdW50PWBleHByICRzdWNjZXNzX2NvdW50ICsgMWAKLQllbHNlCi0JICAgIGZhaWxlZF9jb3VudD1gZXhwciAkZmFpbGVkX2NvdW50ICsgMWAKLQlmaQotICAgIGZpCi0gICAgbnVtPWBleHByICRudW0gKyAxYAotICAgIGNudHI9YGV4cHIgJGNudHIgKyAxYAogZG9uZQogCitpZiBbIC1mIGZhaWxlZF90ZXN0cyBdOyB0aGVuCisgICAgZWNobworICAgIGVjaG8gRmFpbGVkIHRlc3RzOgorICAgIGNhdCBmYWlsZWRfdGVzdHMKK2ZpCitlY2hvCiBlY2hvIFN1bW1hcnk6ICRzdWNjZXNzX2NvdW50IC8gYGV4cHIgJGZhaWxlZF9jb3VudCArICRzdWNjZXNzX2NvdW50YCBzdWNjZWVkZWQuCiAKIGV4aXQgJGZhaWxlZF9jb3VudApkaWZmIC0tZ2l0IGEvdGVzdGluZy9ULmMgYi90ZXN0aW5nL1QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE0ODNhMS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL1QuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKgotICogVC5jCi0gKgotICogRXhwZWN0ZWQgU1VDQ0VTU2VzIGZvciBhbGwgdGVzdHM6ICAgIEZJWCBbKyBGSVggLi4uXQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMaXN0IG51bWJlciBvZiBsaW5lcyBjb250YWluaW5nIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgIlNVQ0NFU1MiIHRoYXQgYXJlIGV4cGVjdGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHByaW50ZWQgdG8gc3Rkb3V0LikKLSAqCi0gKiBSZXR1cm5zOgotICogICAgICBOdW1iZXIgb2YgRkFJTFVSRXMuCi0gKgotICogRklYICBTaG9ydCB0ZXN0IGRlc2NyaXB0aW9uL3RhYmxlIG9mIGNvbnRlbnRzLiAgICAgICBTVUNDRVNTZXM6IEZJWAotICovCi0KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0KLS8qCi0gKiAjaW5jbHVkZSAuLi4gCi0gKi8KLQotZXh0ZXJuIGNoYXIgICAgKm9wdGFyZzsKLWV4dGVybiBpbnQgICAgICBvcHRpbmQsIG9wdG9wdCwgb3B0ZXJyOwotCi0KLQotLyoKLSAqIEdsb2JhbHMsICZjLi4uCi0gKi8KLWNoYXIgICAgICAgICAgICpsb2NhbF9wcm9nbmFtZTsKLQotI2RlZmluZSBVU0FHRQkiVXNhZ2U6ICVzIFstaF1bLWFTXSIKLSNkZWZpbmUgT1BUSU9OTElTVAkiYWhTIgotCi1pbnQgICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDAsIGRvc29tZXRoaW5nID0gMDsKLQotI2RlZmluZQlBTExPUFRJT05TCShkb2FsbHRlc3RzICsgZG9zb21ldGhpbmcpCi0KLQotCi0jZGVmaW5lIExPQ0FMX01BWEJVRgkoMTAyNCAqIDgpCi0jZGVmaW5lIE5MCQkiXG4iCi0KLSNkZWZpbmUgT1VUUFVUKG8pCWZwcmludGYoc3Rkb3V0LCAiXG5cbiVzXG5cbiIsIG8pOwotCi0jZGVmaW5lIFNVQ0NFU1MocykJCQkJCVwKLXsJCQkJCQkJXAotCWlmICghZmFpbGNvdW50KQkJCQkJXAotCQlmcHJpbnRmKHN0ZG91dCwgIlxuU1VDQ0VTUzogJXNcbiIsIHMpOwlcCi19Ci0KLSNkZWZpbmUgRkFJTEVEKGUsIGYpCQkJCQlcCi17CQkJCQkJCVwKLQlpZiAoZSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5GQUlMRUQ6ICVzXG4iLCBmKTsJXAotCQlmYWlsY291bnQgKz0gMTsJCQkJXAotCX0JCQkJCQlcCi19Ci0KLQotCi0KLQotLyoKLSAqIFByb3RvdHlwZXMuCi0gKi8KLXZvaWQgICAgICAgICAgICB1c2FnZShGSUxFICogb2ZwKTsKLQotaW50ICAgICAgICAgICAgIHRlc3RfZG9zb21ldGhpbmcodm9pZCk7Ci0KLQotCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgIGNoOwotCi0gICAgbG9jYWxfcHJvZ25hbWUgPSBhcmd2WzBdOwotCi0gICAgRU0oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qICovCi0KLSAgICAvKgotICAgICAqIFBhcnNlLgotICAgICAqLwotICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgT1BUSU9OTElTVCkpICE9IEVPRikgewotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnUyc6Ci0gICAgICAgICAgICBkb3NvbWV0aGluZyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICBydmFsID0gMDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgICAgICBleGl0KHJ2YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICBhcmd2ICs9IDE7Ci0gICAgICAgIGlmIChvcHRhcmcpIHsKLSAgICAgICAgICAgIGFyZ2MgLT0gMTsKLSAgICAgICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgICAgIG9wdGFyZyA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgb3B0aW5kID0gMTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgZ2V0b3B0ICovCi0KLSAgICBpZiAoKGFyZ2MgPiAxKSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotCi0gICAgfSBlbHNlIGlmIChBTExPUFRJT05TICE9IDEpIHsKLSAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgZXhpdCgxMDAwKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogVGVzdCBzdHVmZi4KLSAgICAgKi8KLSAgICBpZiAoZG9zb21ldGhpbmcgfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9kb3NvbWV0aGluZygpOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBDbGVhbnVwLgotICAgICAqLwotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG1haW4oKSAqLwotCi0KLQotCi0KLXZvaWQKLXVzYWdlKEZJTEUgKiBvZnApCi17Ci0gICAgZnByaW50ZihvZnAsCi0gICAgICAgICAgICBVU0FHRQotICAgICAgICAgICAgIiIgTkwKLSAgICAgICAgICAgICIJLWEJCUFsbCB0ZXN0cy4iIE5MCi0gICAgICAgICAgICAiCS1TCQlUZXN0IHNvbWV0aGluZy4iIE5MCi0gICAgICAgICAgICAiCS1oCQlIZWxwLiIgTkwgIiIgTkwsIGxvY2FsX3Byb2duYW1lKTsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNhZ2UoKSAqLwotCi0KLQotCi0jaWZkZWYgRVhBTVBMRQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWEFNUExFICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kb3NvbWV0aGluZwotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICoKLSAqIFRlc3QgdGVtcGxhdGUuCi0gKi8KLWludAotdGVzdF9kb3NvbWV0aGluZyh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotCi0gICAgRU0wKDEsICJVTklNUExFTUVOVEVEIik7ICAgIC8qIEVNKDEpOyAvKiAqLwotCi0gIHRlc3RfZG9zb21ldGhpbmdfcXVpdDoKLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rvc29tZXRoaW5nKCkgKi8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvVDIuc2ggYi90ZXN0aW5nL1QyLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGE1MWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvVDIuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgVC5zaAotIwotIyBGSVggIFNob3J0IGRlc2NyaXB0aW9uLgotIwotCi0uIGV2YWxfdG9vbHMuc2gKLQotSEVBREVSIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgeW91ciB0ZXN0Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBUZXN0LgotIwotCi0jIFN0YXJ0IHRoZSBhZ2VudCBpZiBuZWVkZWQgKG1ha2Ugc3VyZSBpdCBzdG9wIGl0IGJlbG93KQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICI8ZXhlY3V0YWJsZV93aXRoX2FyZ3VtZW50czpfc3RvcmVzX3N0ZG91dC9zdGRlcnJfZm9yX3VzZV9sYXRlcj4iCi0KLUNIRUNLRVhBQ1QgIjxzdHJpbmdfdG9fbG9va19mb3JfYW5fZXhhY3RfbWF0Y2hfb2ZfaW5fdGhlX0NBUFRVUkVkX2ZpbGVfb3V0cHV0PiIKLVsgJD8gLWVxIDEgXQotRkFJTEVEICQ/ICI8ZGlhZ25vc3RpY19sYWJlbD4iCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBDbGVhbnVwLCBleGl0LgotIwotCi0jIFN0b3AgdGhlIGFnZW50IGlmIG5lY2Vzc2FyeQotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL1RFU1RDT05GLnNoIGIvdGVzdGluZy9URVNUQ09ORi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU4ZWZmZC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL1RFU1RDT05GLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLSMhIC9iaW4vc2ggLWYKLQotIwotIyBWYXJpYWJsZXM6ICAoKiA9IGV4cG9ydGVkKQotIyAgKlNOTVBfVE1QRElSOiAgCSAgcGxhY2UgdG8gcHV0IGZpbGVzIHVzZWQgaW4gdGVzdGluZy4KLSMgICBTTk1QX1RFU1RESVI6IAkgIHdoZXJlIHRoZSB0ZXN0IHNjcmlwdHMgYXJlIGtlcHQuCi0jICAqU05NUF9QRVJTSVNURU5UX0ZJTEU6IHdoZXJlIHRvIHN0b3JlIHRoZSBhZ2VudCdzIHBlcnNpc3RlbnQgaW5mb3JtYXRpb24KLSMgICAgICAgICAgICAgICAgICAgICAgICAgKFhYWDogdGhpcyBzaG91bGQgYmUgc3BlY2lmaWMgdG8ganVzdCB0aGUgYWdlbnQpCi0KLSMKLSMgT25seSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmUgZXZhbCdlZCBvbmNlCi0jCi1pZiBbICJ4JFRFU1RDT05GX1NIX0VWQUxFRCIgIT0gInh5ZXMiIF07IHRoZW4KLSAgICBURVNUQ09ORl9TSF9FVkFMRUQ9eWVzCi0KLSMKLSMgc2V0IGNwdSBhbmQgbWVtb3J5IGxpbWl0cyB0byBwcmV2ZW50IG1ham9yIGRhbWFnZQotIwotIyBkZWZhdWx0czogMWggQ1BVLCA1MDBNQiBWTUVNCi0jCi1bICJ4JFNOTVBfTElNSVRfVk1FTSIgPSAieCIgXSAmJiBTTk1QX0xJTUlUX1ZNRU09NTEyMDAwCi1bICJ4JFNOTVBfTElNSVRfQ1BVIiA9ICJ4IiBdICYmIFNOTVBfTElNSVRfQ1BVPTM2MDAKLSMgdWxpbWl0IHdpbGwgZmFpbCBpZiBleGlzdGluZyBsaW1pdCBpcyBsb3dlciAtLSBpZ25vcmUgYmVjYXVzZSBpdCdzIG9rCi11bGltaXQgLVMgLXQgJFNOTVBfTElNSVRfQ1BVIDI+L2Rldi9udWxsCi0jIG5vdCBhbGwgc2gtYWxpa2VzIHN1cHBvcnQgInVsaW1pdCAtdiIgLS0gcGxheSBzYWZlCi1bICJ4JEJBU0hfVkVSU0lPTiIgIT0gIngiIF0gJiYgdWxpbWl0IC1TIC12ICRTTk1QX0xJTUlUX1ZNRU0gMj4vZGV2L251bGwKLQotIwotIyBTZXQgdXAgYW4gTkwgc3VwcHJlc3NpbmcgZWNobyBjb21tYW5kCi0jCi1jYXNlICJgZWNobyAneFxjJ2AiIGluCi0gICd4XGMnKQotICAgIEVDSE8oKSB7IGVjaG8gLW4gJCo7IH0KLSAgICA7OwotICB4KQotICAgIEVDSE8oKSB7IGVjaG8gJCpcXGM7IH0KLSAgICA7OwotICAqKQotICAgIGVjaG8gIkkgZG9uJ3QgdW5kZXJzdGFuZCB5b3VyIGVjaG8gY29tbWFuZCAuLi4iCi0gICAgZXhpdCAxCi0gICAgOzsKLWVzYWMKLSMKLSMgaG93IHZlcmJvc2Ugc2hvdWxkIHdlIGJlICgwIG9yIDEpCi0jCi1pZiBbICJ4JFNOTVBfVkVSQk9TRSIgPSAieCIgXTsgdGhlbgotICAgIFNOTVBfVkVSQk9TRT0wCi0gICAgZXhwb3J0IFNOTVBfVkVSQk9TRQotZmkKLQotaWYgWyAieCRNSUJESVJTIiA9ICJ4IiBdOyB0aGVuCi0gIGlmIFsgIngkU05NUF9QUkVGRVJfTkVBUl9NSUJTIiA9ICJ4MSIgXTsgdGhlbgotICAgIE1JQkRJUlM9JHtTTk1QX0JBU0VESVJ9Ly4uL21pYnMKLSAgICBleHBvcnQgTUlCRElSUwotICBmaQotZmkKLQotIyBTZXQgdXAgdGhlIHBhdGggdG8gdGhlIHByb2dyYW1zIHdlIHdhbnQgdG8gdXNlLgotaWYgWyAieCRTTk1QX1BBVEgiID0gIngiIF07IHRoZW4KLSAgICBQQVRIPS4uL2FnZW50Oi4uL2FwcHM6Li4vLi4vYWdlbnQ6Li4vLi4vYXBwczokUEFUSAotICAgIGV4cG9ydCBQQVRICi0gICAgU05NUF9QQVRIPXllcwotICAgIGV4cG9ydCBTTk1QX1BBVEgKLWZpCi0gICAgCi0KLSMgU2V0IHVwIHRlbXBvcmFyeSBkaXJlY3RvcnkKLWlmIFsgIngkU05NUF9UTVBESVIiID0gIngiIC1hICJ4JFNOTVBfSEVBREVST05MWSIgIT0gInh5ZXMiIF07IHRoZW4KLSAgICBpZiBbICJ4JHRlc3RudW0iID0gIngiIF0gOyB0aGVuCi0gICAgICAgIHRlc3RudW09MQotICAgIGZpCi0gICAgU05NUF9UTVBESVI9Ii90bXAvc25tcC10ZXN0LSR0ZXN0bnVtLSQkIgotICAgIGV4cG9ydCBTTk1QX1RNUERJUgotICAgIGlmIFsgLWQgJFNOTVBfVE1QRElSIF07IHRoZW4KLQllY2hvICIkMDogRVJST1I6ICRTTk1QX1RNUERJUiBhbHJlYWR5IGV4aXN0ZWQuIgotCWV4aXQgMTsKLSAgICBmaQotICAgIFNOTVBfVE1QX1BFUlNJU1RFTlRESVI9JFNOTVBfVE1QRElSL3BlcnNpc3QKLSAgICBleHBvcnQgU05NUF9UTVBfUEVSU0lTVEVOVERJUgotICAgIG1rZGlyICRTTk1QX1RNUERJUgotICAgIG1rZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCi0gICAgY2htb2QgMDcwMCAkU05NUF9UTVBESVIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKLWZpCi0KLWlmIFsgIngkU05NUF9TQVZFX1RNUERJUiIgPSAieCIgXTsgdGhlbgotICAgIFNOTVBfU0FWRV9UTVBESVI9Im5vIgotICAgIGV4cG9ydCBTTk1QX1NBVkVfVE1QRElSCi1maQotCi1TTk1QX0lHTk9SRV9XSU5ET1dTX1JFR0lTVFJZPSJ0cnVlIgotZXhwb3J0IFNOTVBfSUdOT1JFX1dJTkRPV1NfUkVHSVNUUlkKLVNOTVBfRU5WX1NFUEFSQVRPUj0iYCRTTk1QX1VQRElSL25ldC1zbm1wLWNvbmZpZyAtLWVudi1zZXBhcmF0b3JgIgotU05NUF9QRVJMUFJPRz0iYCRTTk1QX1VQRElSL25ldC1zbm1wLWNvbmZpZyAtLXBlcmxwcm9nYCIKLVNOTVBfVEVTVERJUj0iJFNOTVBfQkFTRURJUi90ZXN0cyIKLVNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wZC5jb25mIgotU05NUFRSQVBEX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvc25tcHRyYXBkLmNvbmYiCi1BR0VOVFhfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9hZ2VudHguY29uZiIKLVNOTVBfU05NUFRSQVBEX0xPR19GSUxFPSIkU05NUF9UTVBESVIvc25tcHRyYXBkLmxvZyIKLVNOTVBfU05NUFRSQVBEX1BJRF9GSUxFPSIkU05NUF9UTVBESVIvc25tcHRyYXBkLnBpZCIKLVNOTVBfU05NUERfUElEX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wZC5waWQiCi1TTk1QX1NOTVBEX0xPR19GSUxFPSIkU05NUF9UTVBESVIvc25tcGQubG9nIgotU05NUF9BR0VOVFhfUElEX0ZJTEU9IiRTTk1QX1RNUERJUi9hZ2VudHgucGlkIgotU05NUF9BR0VOVFhfTE9HX0ZJTEU9IiRTTk1QX1RNUERJUi9hZ2VudHgubG9nIgotU05NUENPTkZQQVRIPSIke1NOTVBfVE1QRElSfSR7U05NUF9FTlZfU0VQQVJBVE9SfSR7U05NUF9UTVBfUEVSU0lTVEVOVERJUn0iCi1leHBvcnQgU05NUENPTkZQQVRICi1TTk1QX1BFUlNJU1RFTlRfRElSPSRTTk1QX1RNUF9QRVJTSVNURU5URElSCi1leHBvcnQgU05NUF9QRVJTSVNURU5UX0RJUgotI1NOTVBfUEVSU0lTVEVOVF9GSUxFPSIkU05NUF9UTVBfUEVSU0lTVEVOVERJUi9wZXJzaXN0ZW50LXN0b3JlLmNvbmYiCi0jZXhwb3J0IFNOTVBfUEVSU0lTVEVOVF9GSUxFCi0KLSMjIFNldHVwIGRlZmF1bHQgZmxhZ3MgYW5kIHBvcnRzIGlmZiBub3QgZG9uZQotaWYgWyAieCRTTk1QX0ZMQUdTIiA9ICJ4IiBdOyB0aGVuCi0gICAgU05NUF9GTEFHUz0iLWQiCi1maQotaWYgdGVzdCAteCAvYmluL25ldHN0YXQgOyB0aGVuCi0gICAgTkVUU1RBVD0vYmluL25ldHN0YXQKLWVsaWYgdGVzdCAteCAvdXNyL2Jpbi9uZXRzdGF0IDsgdGhlbgotICAgIE5FVFNUQVQ9L3Vzci9iaW4vbmV0c3RhdAotZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9uZXRzdGF0IDsgdGhlbgotICAgICMgZS5nLiBUcnU2NCBVbml4Ci0gICAgTkVUU1RBVD0vdXNyL3NiaW4vbmV0c3RhdAotZWxpZiB0ZXN0IC14IC91c3IvZXRjL25ldHN0YXQgOyB0aGVuCi0gICAgIyBlLmcuIElSSVgKLSAgICBORVRTVEFUPS91c3IvZXRjL25ldHN0YXQKLWVsaWYgdGVzdCAteCAvY3lnZHJpdmUvYy93aW5kb3dzL3N5c3RlbTMyL25ldHN0YXQgOyB0aGVuCi0gICAgIyBDeWd3aW4KLSAgICBORVRTVEFUPS9jeWdkcml2ZS9jL3dpbmRvd3Mvc3lzdGVtMzIvbmV0c3RhdAotZWxpZiB0ZXN0IC14IC9jL1dpbmRvd3MvU3lzdGVtMzIvbmV0c3RhdCA7IHRoZW4KLSAgICAjIE1pbkdXICsgTVNZUwotICAgIE5FVFNUQVQ9L2MvV2luZG93cy9TeXN0ZW0zMi9uZXRzdGF0Ci1lbHNlCi0gICAgTkVUU1RBVD0iIgotZmkKLQotUFJPQkVfRk9SX1BPUlQoKSB7Ci0gICAgQkFTRV9QT1JUPSQxCi0gICAgTUFYX1JFVFJJRVM9MTAKLSAgICBpZiB0ZXN0IC14ICIkTkVUU1RBVCIgOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgLXogIiRSQU5ET00iOyB0aGVuCi0gICAgICAgICAgICBSQU5ET009MgotICAgICAgICBmaQotICAgICAgICB3aGlsZSA6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICBCQVNFX1BPUlQ9YGV4cHIgJEJBU0VfUE9SVCArIFwoICRSQU5ET00gJSAxMDAgXClgCi0gICAgICAgICAgICBJTl9VU0U9YCRORVRTVEFUIC1hIC1uIDI+L2Rldi9udWxsIHwgZ3JlcCAiW1wuOl0kQkFTRV9QT1JUICJgCi0gICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICIkQkFTRV9QT1JUIgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgTUFYX1JFVFJJRVM9YGV4cHIgJE1BWF9SRVRSSUVTIC0gMWAKLSAgICAgICAgICAgIGlmIFsgJE1BWF9SRVRSSUVTIC1lcSAwIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICJFUlJPUjogQ291bGQgbm90IGZpbmQgYXZhaWxhYmxlIHBvcnQuIiA+JjIKLSAgICAgICAgICAgICAgICBlY2hvICJOT1BPUlQiCi0gICAgICAgICAgICAgICAgZXhpdCAyNTUKLSAgICAgICAgICAgIGZpCi0gICAgICAgIGRvbmUKLSAgICBmaQotfQotCi1pZiBbICJ4JFNOTVBfU05NUERfUE9SVCIgPSAieCIgXTsgdGhlbgotICAgIFNOTVBfU05NUERfUE9SVD1gUFJPQkVfRk9SX1BPUlQgODc2NWAKLWZpCi1pZiBbICJ4JFNOTVBfU05NUFRSQVBEX1BPUlQiID0gIngiIF07IHRoZW4KLSAgICBTTk1QX1NOTVBUUkFQRF9QT1JUPWBQUk9CRV9GT1JfUE9SVCA1Njc4YAotZmkKLWlmIFsgIngkU05NUF9BR0VOVFhfUE9SVCIgPSAieCIgXTsgdGhlbgotICAgIFNOTVBfQUdFTlRYX1BPUlQ9YFBST0JFX0ZPUl9QT1JUIDc2NzZgCi1maQotaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4IiBdO3RoZW4KLQlTTk1QX1RSQU5TUE9SVF9TUEVDPSJ1ZHAiCi1maQotaWYgWyAieCRTTk1QX1RFU1RfREVTVCIgPSAieCIgLWEgJFNOTVBfVFJBTlNQT1JUX1NQRUMgIT0gInVuaXgiIF07dGhlbgotCVNOTVBfVEVTVF9ERVNUPSJsb2NhbGhvc3Q6IgotZmkKLWV4cG9ydCBTTk1QX0ZMQUdTIFNOTVBfU05NUERfUE9SVCBTTk1QX1NOTVBUUkFQRF9QT1JUCi0KLSMgTWFrZSBzdXJlIHRoZSBhZ2VudCBkb2Vzbid0IHBhcnNlIGFueSBjb25maWcgZmlsZSBidXQgd2hhdCB3ZSBnaXZlIGl0LiAgCi0jIHRoaXMgaXMgbWFpbmx5IHRvIHByb3RlY3QgYWdhaW5zdCBhIGJyb2tlbiBhZ2VudCB0aGF0IGRvZXNuJ3QKLSMgcHJvcGVybHkgaGFuZGxlIGNvbWJpbmF0aW9ucyBvZiAtYyBhbmQgLUMuICAoc2luY2UgSSd2ZSBicm9rZSBpdCBiZWZvcmUpLgotI1NOTVBDT05GUEFUSD0iJFNOTVBfVE1QRElSL2RvZXMtbm90LWV4aXN0IgotI2V4cG9ydCBTTk1QQ09ORlBBVEgKLQotZmkgIyBPbmx5IGFsbG93IG91cnNlbHZlcyB0byBiZSBldmFsJ2VkIG9uY2UKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZGF0YS5rZXljaGFuZ2UtbWQ1IGIvdGVzdGluZy9kYXRhLmtleWNoYW5nZS1tZDUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMjRjNGEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9kYXRhLmtleWNoYW5nZS1tZDUKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0weDUyNmY1ZWVkOWZjY2UyNmY4OTY0YzI5MzA3ODdkODJiCSMgb2xkIGt1bAotMHg4NzAyMWQ3YmQ5ZDEwMWJhMDVlYTZlM2JmOWQ5YmQ0YQkjIG5ldyBrdWwKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwNTYxNTE0MTY3NmNjOTE5NjE3NGU3NDJhMzI1NTEJCQkJCQkJIyBrZXljaGFuZ2Ugc3RyaW5nIC0tIGF1dGgvcHJpdmFjeQotCi0KLQkJIwkJIwkJIwkJIwotCi0jCi0jIEZvbGxvd2luZyBkYXRhIGV4ZXJwdGVkIGZyb206Ci0jCi0jCU1lc3NhZ2UtSWQ6IDwxOTk4MDkyODIwMDMuUUFBMjc0OTRAcmVsYXkuaHEudGlzLmNvbT4KLSMJRGF0ZTogTW9uLCAyOCBTZXAgOTggMjE6NTc6NDggRFNUCi0jCUZyb206ICJCZXJ0IFdpam5lbiIgPFdJSk5FTkB2bmV0LmlibS5jb20+Ci0jCVRvOiBzbm1wdjNAdGlzLmNvbQotIwlTdWJqZWN0OiBzdWdnZXN0ZWQgbmV3IGFwcGVuZGl4IHNlY3Rpb24gQS41IGZvciBSRkMyMjc0Ci0jCi1tYXBsZXN5cnVwCQkJCSMgb2xkIHBhc3NwaHJhc2UKLTB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCQkjIGVuZ2luZUlECi0KLW5ld3N5cnVwCQkJCSMgbmV3IHBhc3NwaHJhc2UKLTAxYWRkMjczMTA3YzRlNTk2YjRiMDBmODJiMWQ0MmE3CSMgbmV3IEt1Ci04NzAyMWQ3YmQ5ZDEwMWJhMDVlYTZlM2JmOWQ5YmQ0YQkjIG5ldyBrdWwKLQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAJIyByYW5kb20gZGVsdGEKLQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODA1NjE1MTQxNjc2Y2M5MTk2MTc0ZTc0MmEzMjU1MQkJCQkJCQkjIGtleWNoYW5nZSBzdHJpbmcgLS0gYXV0aC9wcml2YWN5CmRpZmYgLS1naXQgYS90ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEgYi90ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOTc3NDkuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotMHg2Njk1ZmViYzkyODhlMzYyODIyMzVmYzcxNTFmMTI4NDk3YjM4ZjNmCSMgb2xkIGt1bCAtLSBmb3IgYXV0aAotMHg3OGUyZGNjZTc5ZDU5NDAzYjU4YzFiYmFhNWJmZjQ2MzkxZjFjZDI1CSMgbmV3IGt1bCAtLSBmb3IgYXV0aAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDljMTAxN2Y0ZmQ0ODNkMmRlOGQ1ZmFkYmY4NDM5MmNiMDY0NTcwNTEJCQkJCQkjIGtleWNoYW5nZSBzdHJpbmcgLS0gYXV0aAotCi0KLQkJIwkJIwkJIwkJIwotCi0jCi0jIEZvbGxvd2luZyBkYXRhIGV4ZXJwdGVkIGZyb206Ci0jCi0jICAgICAgIE1lc3NhZ2UtSWQ6IDwxOTk4MDkyODIwMDMuUUFBMjc0OTRAcmVsYXkuaHEudGlzLmNvbT4KLSMgICAgICAgRGF0ZTogTW9uLCAyOCBTZXAgOTggMjE6NTc6NDggRFNUCi0jICAgICAgIEZyb206ICJCZXJ0IFdpam5lbiIgPFdJSk5FTkB2bmV0LmlibS5jb20+Ci0jICAgICAgIFRvOiBzbm1wdjNAdGlzLmNvbQotIyAgICAgICBTdWJqZWN0OiBzdWdnZXN0ZWQgbmV3IGFwcGVuZGl4IHNlY3Rpb24gQS41IGZvciBSRkMyMjc0Ci0jCi1tYXBsZXN5cnVwCQkJCQkjIG9sZCBwYXNzcGhyYXNlCi0weDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgkJCSMgZW5naW5lSUQKLQotbmV3c3lydXAJCQkJCSMgbmV3IHBhc3NwaHJhc2UKLTNhNTFhNmQ3MzZhYTM0N2I4M2RjNGE4N2UzZTU1ZWU0ZDY5OGFjNzEJIyBuZXcgS3UgLS0gYXV0aAotNzhlMmRjY2U3OWQ1OTQwM2I1OGMxYmJhYTViZmY0NjM5MWYxY2QyNQkjIG5ldyBrdWwgLS0gYXV0aAotCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCSMgcmFuZG9tIGRlbHRhCi0KLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5YzEwMTdmNGZkNDgzZDJkZThkNWZhZGJmODQzOTJjYjA2NDU3MDUxCQkJCQkJIyBrZXljaGFuZ2Ugc3RyaW5nIC0tIGF1dGgKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMS1kZXMgYi90ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEtZGVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzcxOWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMS1kZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0weDY2OTVmZWJjOTI4OGUzNjI4MjIzNWZjNzE1MWYxMjg0CQkjIG9sZCBrdWwgLS0gcHJpdmFjeQotMHg3OGUyZGNjZTc5ZDU5NDAzYjU4YzFiYmFhNWJmZjQ2MwkJIyBuZXcga3VsIC0tIHByaXZhY3kKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN2VmOGQ4YTRjOWNkYjI2YjQ3NTkxY2Q4NTJmZjg4YjUJCQkJCQkJCSMga2V5Y2hhbmdlIHN0cmluZyAtLSBwcml2YWN5Ci0KLQotCQkjCQkjCQkjCQkjCi0KLSMKLSMgRm9sbG93aW5nIGRhdGEgZXhlcnB0ZWQgZnJvbToKLSMKLSMgICAgICAgTWVzc2FnZS1JZDogPDE5OTgwOTI4MjAwMy5RQUEyNzQ5NEByZWxheS5ocS50aXMuY29tPgotIyAgICAgICBEYXRlOiBNb24sIDI4IFNlcCA5OCAyMTo1Nzo0OCBEU1QKLSMgICAgICAgRnJvbTogIkJlcnQgV2lqbmVuIiA8V0lKTkVOQHZuZXQuaWJtLmNvbT4KLSMgICAgICAgVG86IHNubXB2M0B0aXMuY29tCi0jICAgICAgIFN1YmplY3Q6IHN1Z2dlc3RlZCBuZXcgYXBwZW5kaXggc2VjdGlvbiBBLjUgZm9yIFJGQzIyNzQKLSMKLW1hcGxlc3lydXAJCQkJCSMgb2xkIHBhc3NwaHJhc2UKLTB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCQkJIyBlbmdpbmVJRAotCi1uZXdzeXJ1cAkJCQkJIyBuZXcgcGFzc3BocmFzZQotM2E1MWE2ZDczNmFhMzQ3YjgzZGM0YTg3ZTNlNTVlZTRkNjk4YWM3MQkjIG5ldyBLdSAtLSBwcml2YWN5Ci03OGUyZGNjZTc5ZDU5NDAzYjU4YzFiYmFhNWJmZjQ2MwkJIyBuZXcga3VsIC0tIHByaXZhY3kKLQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAJCSMgcmFuZG9tIGRlbHRhCi0KLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN2VmOGQ4YTRjOWNkYjI2YjQ3NTkxY2Q4NTJmZjg4YjUJCQkJCQkJCSMga2V5Y2hhbmdlIHN0cmluZyAtLSBwcml2YWN5CmRpZmYgLS1naXQgYS90ZXN0aW5nL2RhdGEua3VsLW1kNSBiL3Rlc3RpbmcvZGF0YS5rdWwtbWQ1CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGUxZTI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvZGF0YS5rdWwtbWQ1CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1tYXBsZXN5cnVwCQkJCSMgcGFzc3BocmFzZQotOWZhZjMyODM4ODRlOTI4MzRlYmM5ODQ3ZDhlZGQ5NjMJIyBLdQotMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIJCSMgZW5naW5lSUQKLTUyNmY1ZWVkOWZjY2UyNmY4OTY0YzI5MzA3ODdkODJiCSMga3VsCi0KLSMKLSMgVGFrZW4gZnJvbSA8ZHJhZnQtaWV0Zi1zbm1wdjMtdXNtLXYyLTAxLnR4dD4sIFNlY3Rpb24gQS4zLgotIwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9kYXRhLmt1bC1zaGExIGIvdGVzdGluZy9kYXRhLmt1bC1zaGExCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODI3YWJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvZGF0YS5rdWwtc2hhMQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbWFwbGVzeXJ1cAkJCQkJIyBwYXNzcGhyYXNlCi05ZmI1Y2MwMzgxNDk3YjM3OTM1Mjg5MzlmZjc4OGQ1ZDc5MTQ1MjExCSMgS3UKLTB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCQkJIyBlbmdpbmVJRAotNjY5NWZlYmM5Mjg4ZTM2MjgyMjM1ZmM3MTUxZjEyODQ5N2IzOGYzZgkjIGt1bAotCi0jCi0jIFRha2VuIGZyb20gPGRyYWZ0LWlldGYtc25tcHYzLXVzbS12Mi0wMS50eHQ+LCBTZWN0aW9uIEEuMy4KLSMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZXRpbWV0ZXN0LmMgYi90ZXN0aW5nL2V0aW1ldGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTdkM2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvZXRpbWV0ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjMgKzAsMCBAQAotLyoKLSAqIGV0aW1ldGVzdC5jCi0gKgotICogRXhwZWN0ZWQgU1VDQ0VTU2VzIGZvciBhbGwgdGVzdHM6ICAgIDMKLSAqCi0gKiBSZXR1cm5zOgotICogICAgICBOdW1iZXIgb2YgRkFJTFVSRXMuCi0gKgotICogVGVzdCBvZiBoYXNoX2VuZ2luZUlEKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6ICAwCi0gKiBUZXN0IG9mIExDRCBFbmdpbmUgSUQgYW5kIFRpbWUgTGlzdC4gICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogIDMKLSAqCi0gKiBGSVggIERldmlzZSBhIHRlc3QgZm9yIHtzZXQsZ2V0fV9lbmdpbmV0aW1lKC4uLiwgRkFMU0UpLgotICovCi0KLXN0YXRpYyBjaGFyICAgICpyY3NpZCA9ICIkSWQkIjsgICAgLyogKi8KLQotCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJhc24xLmgiCi0jaW5jbHVkZSAic25tcF9hcGkuaCIKLSNpbmNsdWRlICJ0b29scy5oIgotI2luY2x1ZGUgImxjZF90aW1lLmgiCi0jaW5jbHVkZSAic25tcF9kZWJ1Zy5oIgotI2luY2x1ZGUgImNhbGxiYWNrLmgiCi0KLXN0YXRpYyB1X2ludCAgICBkdW1teV9ldGltZSwgZHVtbXlfZWJvb3Q7ICAgICAgIC8qIEZvciBJU0VOR0lORUtOT1dOKCkuICovCi0KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1leHRlcm4gY2hhciAgICAqb3B0YXJnOwotZXh0ZXJuIGludCAgICAgIG9wdGluZCwgb3B0b3B0LCBvcHRlcnI7Ci0KLQotCi0vKgotICogR2xvYmFscywgJmMuLi4KLSAqLwotY2hhciAgICAgICAgICAgKmxvY2FsX3Byb2duYW1lOwotCi0jZGVmaW5lIFVTQUdFCSJVc2FnZTogJXMgWy1oXVstcyA8c2Vjb25kcz5dWy1hZUhdIgotI2RlZmluZSBPUFRJT05MSVNUCSJhZWhIczoiCi0KLWludCAgICAgICAgICAgICBkb2FsbHRlc3RzID0gMCwgZG9oYXNoaW5kZXggPSAwLCBkb2V0aW1ldGVzdCA9IDA7Ci0KLSNkZWZpbmUJQUxMT1BUSU9OUwkoZG9hbGx0ZXN0cyArIGRvaGFzaGluZGV4ICsgZG9ldGltZXRlc3QpCi0KLQotCi0jZGVmaW5lIExPQ0FMX01BWEJVRgkoMTAyNCAqIDgpCi0jZGVmaW5lIE5MCQkiXG4iCi0KLSNkZWZpbmUgT1VUUFVUKG8pCWZwcmludGYoc3Rkb3V0LCAiXG5cbiVzXG5cbiIsIG8pOwotCi0jZGVmaW5lIFNVQ0NFU1MocykJCQkJCVwKLXsJCQkJCQkJXAotCWlmICghZmFpbGNvdW50KQkJCQkJXAotCQlmcHJpbnRmKHN0ZG91dCwgIlxuU1VDQ0VTUzogJXNcbiIsIHMpOwlcCi19Ci0KLSNkZWZpbmUgRkFJTEVEKGUsIGYpCQkJCQlcCi17CQkJCQkJCVwKLQlpZiAoZSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5GQUlMRUQ6ICVzXG4iLCBmKTsJXAotCQlmYWlsY291bnQgKz0gMTsJCQkJXAotCX0JCQkJCQlcCi19Ci0KLQotCi0vKgotICogR2xvYmFsIHZhcmlhYmxlcy4KLSAqLwotaW50ICAgICAgICAgICAgIHNsZWVwdGltZSA9IDc7Ci0KLSNkZWZpbmUgQkxBVCAiYWxrO2RqZjthbiByaXU7YWxpY2VubXJ1bDthaWtuZ2xrc2FqaGUxIGFkY2ZhbGNlbnJjbzIiCi0KLQotCi0KLS8qCi0gKiBQcm90b3R5cGVzLgotICovCi12b2lkICAgICAgICAgICAgdXNhZ2UoRklMRSAqIG9mcCk7Ci0KLWludCAgICAgICAgICAgICB0ZXN0X2V0aW1lKHZvaWQpOwotaW50ICAgICAgICAgICAgIHRlc3RfaGFzaGluZGV4KHZvaWQpOwotCi0KLQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotICAgIGNoYXIgICAgICAgICAgICBjaDsKLQotICAgIGxvY2FsX3Byb2duYW1lID0gYXJndlswXTsKLQotICAgIC8qCi0gICAgICogUGFyc2UuCi0gICAgICovCi0gICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRJT05MSVNUKSkgIT0gRU9GKSB7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBkb2FsbHRlc3RzID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdlJzoKLSAgICAgICAgICAgIGRvZXRpbWV0ZXN0ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdIJzoKLSAgICAgICAgICAgIGRvaGFzaGluZGV4ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIHNsZWVwdGltZSA9IGF0b2kob3B0YXJnKTsKLSAgICAgICAgICAgIGlmIChzbGVlcHRpbWUgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2Uoc3RkZXJyKTsKLSAgICAgICAgICAgICAgICBleGl0KDEwMDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICBydmFsID0gMDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgICAgICBleGl0KHJ2YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICBhcmd2ICs9IDE7Ci0gICAgICAgIGlmIChvcHRhcmcpIHsKLSAgICAgICAgICAgIGFyZ2MgLT0gMTsKLSAgICAgICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgICAgIG9wdGFyZyA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgb3B0aW5kID0gMTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgZ2V0b3B0ICovCi0KLSAgICBpZiAoKGFyZ2MgPiAxKSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotCi0gICAgfSBlbHNlIGlmIChBTExPUFRJT05TICE9IDEpIHsKLSAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgZXhpdCgxMDAwKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogVGVzdCBzdHVmZi4KLSAgICAgKi8KLSAgICBydmFsID0gc2NfaW5pdCgpOwotICAgIEZBSUxFRChydmFsLCAic2NfaW5pdCgpIik7Ci0KLQotICAgIGlmIChkb2hhc2hpbmRleCB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2hhc2hpbmRleCgpOwotICAgIH0KLSAgICBpZiAoZG9ldGltZXRlc3QgfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9ldGltZSgpOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBDbGVhbnVwLgotICAgICAqLwotICAgIHJ2YWwgPSBzY19zaHV0ZG93bihTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU0hVVERPV04sCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgIEZBSUxFRChydmFsLCAic2Nfc2h1dGRvd24oKSIpOwotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFpbigpICovCi0KLQotCi0KLQotdm9pZAotdXNhZ2UoRklMRSAqIG9mcCkKLXsKLSAgICBmcHJpbnRmKG9mcCwKLSAgICAgICAgICAgIFVTQUdFCi0gICAgICAgICAgICAiIiBOTAotICAgICAgICAgICAgIiAgICAtYQkJCUFsbCB0ZXN0cy4iIE5MCi0gICAgICAgICAgICAiICAgIC1lCQkJRXhlcmNpc2UgdGhlIGxpc3Qgb2YgZW5naW5ldGltZXMuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLWgJCQlIZWxwLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC1ICQkJVGVzdCBoYXNoX2VuZ2luZUlEKCkuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLXMgPHNlY29uZHM+CVNlY29uZHMgdG8gcGF1c2UuICAoRGVmYXVsdDogMC4pIgotICAgICAgICAgICAgTkwgTkwsIGxvY2FsX3Byb2duYW1lKTsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNhZ2UoKSAqLwotCi0KLQotCi0jaWZkZWYgRVhBTVBMRQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZG9zb21ldGhpbmcKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqCi0gKiBUZXN0IHRlbXBsYXRlLgotICovCi1pbnQKLXRlc3RfZG9zb21ldGhpbmcodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLQotICB0ZXN0X2Rvc29tZXRoaW5nX3F1aXQ6Ci0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb3NvbWV0aGluZygpICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQU1QTEUgKi8KLQotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9oYXNoaW5kZXgKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqCi0gKiBUZXN0IGhhc2hfZW5naW5lSUQoKS4KLSAqLwotaW50Ci10ZXN0X2hhc2hpbmRleCh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBydmFsID0gU05NUEVSUl9TVUNDRVNTLCAgKi8KLSAgICAgICAgICAgICAgICAgICAgZmFpbGNvdW50ID0gMDsKLSAgICBjaGFyICAgICAgICAgICAqczsKLQotICAgIE9VVFBVVCgiVmlzdWFsIHNwb3QgY2hlY2sgb2YgaGFzaCBpbmRleCBvdXRwdXRzLiAgIgotICAgICAgICAgICAiKFN1Y2Nlc3Mgb3IgZmFpbHVyZSBub3Qgbm90ZWQuKSIpOwotCi0gICAgcyA9ICJBIjsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIiVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKHMpKSk7Ci0KLSAgICBzID0gIkJCIjsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIiVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKHMpKSk7Ci0KLSAgICBzID0gIkNDQyI7Ci0gICAgZnByaW50ZihzdGRvdXQsICIlcyA9ICVkXG4iLCBzLCBoYXNoX2VuZ2luZUlEKHMsIHN0cmxlbihzKSkpOwotCi0gICAgcyA9ICJEREREIjsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIiVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKHMpKSk7Ci0KLSAgICBzID0gIkVFRUVFIjsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIiVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKHMpKSk7Ci0KLSAgICBzID0gQkxBVDsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIiVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKHMpKSk7Ci0KLQotICAgIE9VVFBVVCgiVmlzdWFsIHNwb3QgY2hlY2sgLS0gRE9ORS4iKTsKLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfaGFzaGluZGV4KCkgKi8KLQotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9ldGltZQotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICogVGVzdCBvZiBMQ0QgRW5naW5lIElEIGFuZCBUaW1lIExpc3QuCQotICovCi1pbnQKLXRlc3RfZXRpbWUodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLSAgICB1X2ludCAgICAgICAgICAgZXRpbWUsIGVib290OwotCi0gICAgLyoKLSAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0gICAgICovCi0gICAgT1VUUFVUKCJRdWVyeSBvZiBlbXB0eSBsaXN0LCB0d28gc2V0IGFjdGlvbnMuIik7Ci0KLQotICAgIHJ2YWwgPSBJU0VOR0lORUtOT1dOKCJBIiwgMSk7Ci0gICAgaWYgKHJ2YWwgPT0gVFJVRSkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJRdWVyeSBvZiBlbXB0eSBsaXN0IHJldHVybmVkIFRSVUUuIikKLSAgICB9Ci0KLQotICAgIHJ2YWwgPSBzZXRfZW5naW5ldGltZSgiQkIiLCAyLCAyLCAyMCwgVFJVRSk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzZXRfZW5naW5ldGltZSgpIik7Ci0KLQotICAgIHJ2YWwgPSBzZXRfZW5naW5ldGltZSgiQ0NDIiwgMywgMzEsIDkwMTI3LCBUUlVFKTsKLSAgICBGQUlMRUQocnZhbCwgInNldF9lbmdpbmV0aW1lKCkiKTsKLQotCi0gICAgU1VDQ0VTUygiQ2hlY2sgb2YgZW1wdHkgbGlzdCwgYW5kIHR3byBhZGRpdGlvbnMuIik7Ci0KLQotCi0gICAgLyoKLSAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0gICAgICovCi0gICAgT1VUUFVUKCJBZGQgZW50cmllcyB1c2luZyBtYWNyb3MsIHRlc3QgZm9yIGV4aXN0ZW5jZSB3aXRoIG1hY3Jvcy4iKTsKLQotCi0gICAgcnZhbCA9IEVOU1VSRV9FTkdJTkVfUkVDT1JEKCJEREREIiwgNCk7Ci0gICAgRkFJTEVEKHJ2YWwsICJFTlNVUkVfRU5HSU5FX1JFQ09SRCgpIik7Ci0KLQotICAgIHJ2YWwgPSBNQUtFTkVXX0VOR0lORV9SRUNPUkQoIkVFRUVFIiwgNSk7Ci0gICAgaWYgKHJ2YWwgPT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgIEZBSUxFRChydmFsLAotICAgICAgICAgICAgICAgIk1BS0VORVdfRU5HSU5FX1JFQ09SRCByZXR1cm5lZCBzdWNjZXNzIGZvciAiCi0gICAgICAgICAgICAgICAibWlzc2luZyByZWNvcmQuIik7Ci0gICAgfQotCi0KLSAgICBydmFsID0gTUFLRU5FV19FTkdJTkVfUkVDT1JEKCJCQiIsIDIpOwotICAgIEZBSUxFRChydmFsLCAiTUFLRU5FV19FTkdJTkVfUkVDT1JEKCkuIik7Ci0KLQotICAgIFNVQ0NFU1MKLSAgICAgICAgKCJBZGRlZCBlbnRyaWVzIHdpdGggbWFjcm9zLCB0ZXN0ZWQgZm9yIGV4aXN0ZW5jZSB3aXRoIG1hY3Jvcy4iKTsKLQotCi0KLSAgICAvKgotICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSAgICAgKi8KLSAgICBPVVRQVVQoIkR1bXAgdGhlIGxpc3QgYW5kIHRoZW4gc2xlZXAuIik7Ci0KLSNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKLSAgICBkdW1wX2V0aW1lbGlzdCgpOwotI2VuZGlmCi0KLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuU2xlZXBpbmcgZm9yICVkIHNlY29uZCVzLi4uICIsCi0gICAgICAgICAgICBzbGVlcHRpbWUsIChzbGVlcHRpbWUgPT0gMSkgPyAiIiA6ICJzIik7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0KLSAgICBzbGVlcChzbGVlcHRpbWUpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKLQotCi0KLSAgICAvKgotICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSAgICAgKi8KLSAgICBPVVRQVVQKLSAgICAgICAgKCJSZXRyaWV2ZSBkYXRhIGZyb20gcmVhbC9zdHViYmVkIHJlY29yZHMsIHVwZGF0ZSByZWFsL3N0dWJiZWQuIik7Ci0KLQotCi0gICAgcnZhbCA9IGdldF9lbmdpbmV0aW1lKCJCQiIsIDIsICZlYm9vdCwgJmV0aW1lLCBUUlVFKTsKLSAgICBGQUlMRUQocnZhbCwgImdldF9lbmdpbmV0aW1lKCkuIik7Ci0KLSAgICBmcHJpbnRmKHN0ZG91dCwgIkJCID0gPCVkLCVkPlxuIiwgZWJvb3QsIGV0aW1lKTsKLSAgICBpZiAoKGV0aW1lIDwgMjApIHx8IChlYm9vdCA8IDIpKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICJnZXRfZW5naW5ldGltZSgpIHJldHVybmVkIGJhZCB2YWx1ZXMuICAoMSkiKTsKLSAgICB9Ci0KLSAgICBydmFsID0gZ2V0X2VuZ2luZXRpbWUoIkREREQiLCA0LCAmZWJvb3QsICZldGltZSwgRkFMU0UpOwotICAgIEZBSUxFRChydmFsLCAiZ2V0X2VuZ2luZXRpbWUoKS4iKTsKLQotICAgIGZwcmludGYoc3Rkb3V0LCAiRERERCA9IDwlZCwlZD5cbiIsIGVib290LCBldGltZSk7Ci0gICAgaWYgKChldGltZSA8IHNsZWVwdGltZSkgfHwgKGVib290ICE9IDApKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICJnZXRfZW5naW5ldGltZSgpIHJldHVybmVkIGJhZCB2YWx1ZXMuICAoMikiKTsKLSAgICB9Ci0KLQotICAgIHJ2YWwgPSBzZXRfZW5naW5ldGltZSgiQ0NDIiwgMywgMjM0LCAxMDAwMCwgVFJVRSk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzZXRfZW5naW5ldGltZSgpLiIpOwotCi0KLSAgICBydmFsID0gc2V0X2VuZ2luZXRpbWUoIkVFRUVFIiwgNSwgOTg3NiwgNTU1NTUsIFRSVUUpOwotICAgIEZBSUxFRChydmFsLCAic2V0X2VuZ2luZXRpbWUoKS4iKTsKLQotCi0gICAgU1VDQ0VTUygiUmV0cmlldmFsIGFuZCB1cGRhdGVzLiIpOwotCi0KLQotICAgIC8qCi0gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotICAgICAqLwotICAgIE9VVFBVVCgiU2xlZXAgYWdhaW4sIHRoZW4gZHVtcCB0aGUgbGlzdCBvbmUgbGFzdCB0aW1lLiIpOwotCi0gICAgZnByaW50ZihzdGRvdXQsICJTbGVlcGluZyBmb3IgJWQgc2Vjb25kJXMuLi4gIiwKLSAgICAgICAgICAgIHNsZWVwdGltZSwgKHNsZWVwdGltZSA9PSAxKSA/ICIiIDogInMiKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLQotICAgIHNsZWVwKHNsZWVwdGltZSk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbiIpOwotCi0jaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCi0gICAgZHVtcF9ldGltZWxpc3QoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9ldGltZSgpICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL2V2YWxfb25lcHJvZ3JhbS5zaCBiL3Rlc3RpbmcvZXZhbF9vbmVwcm9ncmFtLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0NWVkZmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvZXZhbF9vbmVwcm9ncmFtLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBldmFsX29uZXByb2dyYW0uc2ggWy1oXVstbGtdIDxwcm9ncmFtPiBbPHByb2dyYW1fYXJncz5dCi0jCi0jIENBTExFRCBCWTogZXZhbF9zdWl0ZS5zaAotIwotIwotIyBSdW5zIDxwcm9ncmFtPiBhbmQgcmVwb3J0cyBob3cgbWFueSBpbnN0YW5jZXMgb2YgdGhlIHN0cmluZ3MgU1VDQ0VTUwotIyBvciBGQUlMRUQgb2NjdXIuCi0jCi0jCi0jIEZJWAlPdXRwdXQgZnJvbSAkUFJPR1JBTSBvbiBzdGRlcnIgaXMgc2VwYXJhdGVkIG91dCBhbmQgY29tZXMgZmlyc3QuCi0jCi0jCi1VU0FHRV9MT05HPScKLSMKLSMgLWgJSGVscC4KLSMgLWsJU2F2ZSB0aGUgcHJvZ3JhbSBvdXRwdXQgaW4gIl9fPHByb2dyYW1fYXJncz5fXzxwaWQ+byIuCi0jIC1sCUxvbmcgZm9ybS4gIChTaG9ydCBmb3JtIGJ5IGRlZmF1bHQuKQotIwotIyA8cHJvZ3JhbT4gaXMgdGhlIGV4ZWN1dGFibGUgdG8gcnVuIGFuZCBjb2xsZWN0IHRoZSBvdXRwdXQgb2YuCi0nCi0KLVVTQUdFPSJVc2FnZTogYGJhc2VuYW1lICQwYCBbLWhdWy1sa10gPHByb2dyYW0+IgotCi0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgR2xvYmFscy4KLSMKLUFXS0ZJTEU9Il9gYmFzZW5hbWUgJDBgJCQuYXdrIgotU0NSSVBURklMRT0KLQotZG9sb25nZm9ybT0wCi1kb2tlZXBvdXRwdXQ9Ci0KLVRPVEFMRkFJTEVEPTAKLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBQYXJzZSAmIHNldHVwLgotIwotd2hpbGUgWyAtbiAiJDEiIF07IGRvCi0JY2FzZSAiJDEiIGluCi0JLWspCWRva2VlcG91dHB1dD10cnVlCi0JCTs7Ci0JLWwpCWRvbG9uZ2Zvcm09MQotCQk7OwotCS1oKQllY2hvICRVU0FHRQotCQljYXQgPDxCTElLIHwgc2VkICdzL14jLy8nIHwgc2VkICcxZCcgICAgMT4mMgotJFVTQUdFX0xPTkcKLUJMSUsKLQkJZXhpdCAwCi0JCTs7Ci0JKikJUFJPR1JBTT0iJCoiCi0JCXNoaWZ0IGBleHByICQjIC0gMWAKLQkJOzsKLQllc2FjCi0KLQlzaGlmdAotZG9uZQotCi1bIC16ICIkUFJPR1JBTSIgXSAmJiBlY2hvICRVU0FHRSAmJiBleGl0IDEKLQotCi1TQ1JJUFRGSUxFPSJfX2BlY2hvIFxgYmFzZW5hbWUgJFBST0dSQU1cYCB8IHNlZCAncy8gL18vZydgX18kJG8iCi0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgQ3JlYXRlIGF3ayBzY3JpcHQuCi0jCi0KLWNhdCA8PEdST05LID4kQVdLRklMRQotCi1CRUdJTiB7Ci0JcGFzcyA9IDAKLQlwYXNzbGlzdFswXSA9ICIiCi0KLQlmYWlsID0gMAotCWZhaWxsaXN0WzBdID0gIiIKLQotCWxvbmdmb3JtID0gJGRvbG9uZ2Zvcm0gKyAwCi19Ci0KLS9TVUNDRVNTLwl7Ci0JcGFzc2xpc3RbcGFzc10gPSBcJDAKLQlwYXNzICs9IDEKLX0KLQotL0ZBSUxFRC8JewotCWZhaWxsaXN0W2ZhaWxdID0gXCQwCi0JZmFpbCArPSAxCi19Ci0KLUVORCB7Ci0JcHJpbnRmICIkUFJPR1JBTSBTVUNDRVNTOiAlZFxuIiwgcGFzcwotCXByaW50ZiAiJFBST0dSQU0gRkFJTEVEOiAlZFxuIiwgZmFpbAotCi0JaWYgKGxvbmdmb3JtKSB7Ci0JCXByaW50ZiAiXG4iCi0JCWZvciAoaT0wOyBpPHBhc3M7IGkrKykKLQkJCXByaW50IHBhc3NsaXN0W2ldCi0KLQkJZm9yIChpPTA7IGk8ZmFpbDsgaSsrKQotCQkJcHJpbnQgZmFpbGxpc3RbaV0KLQl9Ci0KLQlleGl0IGZhaWwKLX0KLUdST05LCi0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBHZXQgYW5kIHByaW50IHJlc3VsdHMuCi0jCi0KLXsgJFBST0dSQU0gJCogMj4mMSA7IH0gPiRTQ1JJUFRGSUxFCi0KLWF3ayAtZiAkQVdLRklMRSAkU0NSSVBURklMRQotVE9UQUxGQUlMRUQ9JD8KLQotcm0gLWYgJEFXS0ZJTEUKLVsgLXogIiRkb2tlZXBvdXRwdXQiIF0gJiYgcm0gLWYgJFNDUklQVEZJTEUKLQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIEV4aXQsIGNsZWFudXAuCi0jCi1leGl0ICRUT1RBTEZBSUxFRAotCi0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZXZhbF9vbmVzY3JpcHQuc2ggYi90ZXN0aW5nL2V2YWxfb25lc2NyaXB0LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmMjQ3NmQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvZXZhbF9vbmVzY3JpcHQuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgZXZhbF9vbmVzY3JpcHQuc2ggU0NSSVBUICBbVEVTVE5VTUJFUiBbSEVBREVST05MWV0gXQotIwotIyBFdmFsdWF0ZXMgb25lIHRlc3QgcHJvZ3JhbSwgYW5kIGhlbHBzIGl0IG91dCBieSBkb2luZyBhIGJpdCBvZiBzZXR1cAotIyBmb3IgaXQuICBJdCBkb2VzIHRoaXMgYnkgc291cmNpbmcgc29tZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBpdAotIyBmaXJzdCwgYW5kIGlmIGl0IGV4aXRlZCB3aXRob3V0IGNhbGxpbmcgRklOSVNIRUQsIGNhbGwgaXQuCi0jCi0jIE5vdCBpbnRlbmRlZCB0byBiZSBhIHRvb2wgZm9yIHRoZSBjb21tb24gdXNlciEgIENhbGxlZCBieSBSVU5URVNUUwotIyBkaXJlY3RseSBpbnN0ZWFkLgotIwotCi10ZXN0bnVtPTEKLWlmIFsgIngkMiIgIT0gIngiIF07IHRoZW4KLQl0ZXN0bnVtPSQyCi1maQotZXhwb3J0IHRlc3RudW0KLQotdW5zZXQgU05NUF9IRUFERVJPTkxZCi1pZiBbICJ4JDMiID0gInh5ZXMiIF07IHRoZW4KLSAgICBTTk1QX0hFQURFUk9OTFk9eWVzCi1maQotZXhwb3J0IFNOTVBfSEVBREVST05MWQotCi0uIFRFU1RDT05GLnNoCi0KLS4gZXZhbF90b29scy5zaAotCi1FQ0hPICIkdGVzdG51bTogICIKLQotLiAuLyQxCi0KLSMgV2Ugc2hvdWxkbid0IGdldCBoZXJlLi4uCi0jIElmIHdlIGRvLCBpdCBtZWFucyB0aGV5IGRpZG4ndCBleGl0IHByb3Blcmx5LgotIyBTbyB3ZSB3aWxsLgotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZXZhbF9zdWl0ZS5zaCBiL3Rlc3RpbmcvZXZhbF9zdWl0ZS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMWMxYTBmMi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL2V2YWxfc3VpdGUuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIGV2YWxfc3VpdGUuc2ggWy1oXVs8YXJnc19wYXNzZWRfdG9fZ2V0cmVzdWx0cz5dCi0jCi0jIENBTExTOiBldmFsX29uZXByb2dyYW0uc2ggWy1oXVstbGtdIDxwcm9ncmFtPgotIwotIyBSRVRVUk5TOglOdW1iZXIgb2YgZmFpbGVkIHRlc3RzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGF0IGZhaWx1cmUgb2NjdXJlZAotIwkJb3IgaG93IG1hbnkgZmFpbHVyZXMgdGhlcmUgd2VyZSBpbiBhIGdpdmVuIHRlc3QuCi0jCi0jCi0KLQotCQkJCQkJCQlVU0FHRV9MT05HPScKLSMKLSMgSE9XIFRPIEVOVEVSIEEgTkVXIFRFU1QKLSMKLSMgVG8gYWRkIGEgdGVzdCB0byB0aGUgdGVzdGxpc3QsIGFkZCBhIGxpbmUgdG8gdGhlIFRFU1RMSVNURklMRSAoZXZhbF90ZXN0bGlzdCkKLSMgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0jCi0jCTwjX29mX2V4cGVjdGVkX3N1Y2Nlc3Nlcz4gWyNdPHByb2dyYW0+IDxhcmdzPgotIwotIyBBbnkgd2hpdGUgc3BhY2UgbWF5IGJlIHVzZWQgYXMgc2VwYXJhdG9yLiAgSWYgPHByb2dyYW0+IGlzIGltbWVkaWF0ZWx5Ci0jIHByZWNlZWRlZCBieSBhIHBvdW5kIHNpZ24gKCMpIHRoYXQgdGVzdCB3aWxsIGJlIHNraXBwZWQuICAoTm8gd2hpdGUgc3BhY2UKLSMgYWxsb3dlZCBhZnRlciB0aGUgcG91bmQuICBFZywgIiM8cHJvZ3JhbT4iLikKLSMKLSMKLSMgSE9XIFRFU1RTIEFSRSBSVU4gQU5EIEVWQUxVQVRFRAotIwotIyBUaGUgaGFybmVzcyBmb3IgaW5kaXZpZHVhbCB0ZXN0cyBpcyB0aGUgc2NyaXB0ICJldmFsX29uZXByb2dyYW0uc2giLgotIyBJdCBleHBlY3RzIHRoYXQgdGhlIHRlc3QgcHJpbnQgRkFJTEVEIHdoZW4gc29tZXRoaW5nIGZhaWxzLCBhbmQgU1VDQ0VTUwotIyB3aGVuIHNvbWV0aGluZyBzdWNjZWVkcy4gIElmIGEgdGVzdCBleGVjdXRlcyBwcm9wZXJseSB0aGVyZSBzaG91bGQgYmUKLSMgc29tZSBTVUNDRVNTIHN0cmluZ3MgYW5kIE5PIEZBSUxFRCBzdHJpbmdzLiAgSWYgdGhlIHJlYXNvbiBmb3IgdGhlCi0jIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgdGVzdCBzaG91bGQgYmUgcHJpbnRlZCBvbiB0aGUgU0FNRSBsaW5lIGFzIHRoZQotIyBTVUNDRVNTL0ZBSUxFRCBzdHJpbmcgdG8gYWxsb3cgdGhlIGRpYW5vc3RpYyB0byBiZSBlYXNpbGx5IGdyZXBwZWQgZnJvbQotIyB0aGUgaXRzIG91dHB1dC4KLSMKLSMgVGhlIGxvbmcgZm9ybSBvZiB0aGUgb3V0cHV0ICgtbCBmbGFnKSB3aWxsIGNhcHR1cmUgdGhhdCBvdXRwdXQgd2hpY2ggbWF5Ci0jIGhlbHAgdG8gZGlhZ25vc2lzIHRoZSBwcm9ibGVtLiAgRm9yIG1vcmUgaW5mb3JtYXRpb246Ci0jCi0jCSUgZXZhbF9vbmVwcm9ncmFtLnNoIC1oCi0jCi0jIAotIyBNSVNTSU5HIFRFU1RTIEFSRSBOT1RFRAotIwotIyBJZiBhbiBleGVjdXRhYmxlIGlzIGZvdW5kIE1JU1NJTkcsIGEgbm90ZSBpcyBwcmludGVkIHRvIHRoYXQgZWZmZWN0Ci0jIGFuZCBURVNURkFJTFVSRSBpcyBpbmNyZW1lbnRlZCBieSAxLgotIwotJwotCi0jCi0jIFN1Z2dlc3RlZCBpbXByb3ZlbWVudChzKToKLSMJSGF2ZSB0d28gKG9yIG1vcmU/KSBhcmJpdHJhcnkgc2NyaXB0KHMpIHRoYXQgbWF5IGJlIGFzc29jaWF0ZWQKLSMJd2l0aCBhIGdpdmVuIHRlc3QuICBPbmUgY291bGQgcHJlcGFyZSB0aGUgZW52aXJvbm1lbnQsIHRoZSBvdGhlcgotIwljb3VsZCBjbGVhbiB1cCB0aGUgZW52aXJvbm1lbnQgYWZ0ZXIgcnVubmluZyB0aGUgdGVzdC4gIFRoaXMgY291bGQKLSMJaGVscCB3aGVuIHRlc3RpbmcgbGFyZ2Ugc3Vic3lzdGVtcyB0aGF0IG1pZ2h0IHJlcXVpcmUgbGVnaXRpbWF0ZWx5Ci0jCWJ1aWxkaW5nIG9yIGNoYW5naW5nIHRoaW5ncyBzdWNoIHRoYXQgdGhlIHRlc3RhYmxlIGl0ZW0gbWF5IGJlIAotIwlhY2Nlc3NlZCBpbiB0aGUgZmlyc3QgcGxhY2UgKGVnKS4gLi4uCi0jCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIFVzYWdlIG1lc3MuICAoTm8sIGl0IHdvcmtzLikKLSMKLVVTQUdFPSJVc2FnZTogYGJhc2VuYW1lICQwYCBbLWhdWzxhcmdzX2Zvcl9nZXRyZXN1bHRzPl0iCi0KLXVzYWdlKCkgeyBlY2hvOyBlY2hvICRVU0FHRTsgY2F0IDw8QkxJSyB8IHNlZCAncy9eIy8vJyB8IHNlZCAnMWQnIHwgJFBBR0VSCi0kVVNBR0VfTE9ORwotQkxJSwotZXhpdCAwCi19Ci0KLVsgIngkMSIgPSAieC1oIiBdICYmIHVzYWdlCi0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgR2xvYmFscy4KLSMKLVBST0dSQU09Ci1BUkdVTUVOVFM9IiQqIgotCi11bWFzayAwMDc3ICMganVzdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlCi1TTk1QX1RNUERJUj0vdG1wL25ldC1zbm1wZC1ldmFsLWRpci4kJAotcm0gLXJmICRTTk1QX1RNUERJUgotbWtkaXIgJFNOTVBfVE1QRElSIHx8IGV4aXQgLTEKLWNobW9kIDA3MDAgJFNOTVBfVE1QRElSCi1UTVBGSUxFPSRTTk1QX1RNUERJUi9ldmFsX3N1aXRlLnNoJCQKLQotVEVTVExJU1RGSUxFPWV2YWxfdGVzdGxpc3QKLQotRVhQRUNURURTVUNDRVNTRVM9Ci1URVNURkFJTFVSRT0wCi0KLXRlc3RuYW1lPQotCi1zdWNjZXNzX2NvdW50PQotZmFpbGVkX2NvdW50PQotCi0jCi0jIFRFU1RMSVNURklMRSBmb3JtYXQ6Ci0jICAJPGV4cGVjdGVkX3N1Y2Nlc3Nlcz4JPHByb2dyYW0+IDxhcmcocyk+IC4uLgotIyAgCTxleHBlY3RlZF9zdWNjZXNzZXM+CTxwcm9ncmFtPiA8YXJnKHMpPiAuLi4KLSMJLi4uCi0jCi1URVNUTElTVD0iYGNhdCAkVEVTVExJU1RGSUxFIHwgc2VkICdzLyQvICAgPT09LydgIgotCi0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBSdW4gYWxsIHRlc3RzIGluIHRoZSB0ZXN0bGlzdC4gIEZvciBlYWNoIHRlc3QgZG8gdGhlIGZvbGxvd2luZzoKLSMKLSMJMSkgTm90ZSB3aGV0aGVyIHRoZSB0ZXN0IGlzIFNLSVBQRUQgb3IgTUlTU0lORy4KLSMKLSMJMikgUnVuIHRoZSB0ZXN0OyBjb2xsZWN0IHRoZSBudW1iZXIgb2YgRkFJTEVEIHN0cmluZ3MgZnJvbSB0aGUKLSMJCXJldHVybiB2YWx1ZSBvZiBldmFsX29uZXByb2dyYW0uc2guCi0jCi0jCTMpIENvdW50IHRoZSBudW1iZXIgb2YgU1VDQ0VTU2VzIGZyb20gdGhlIHRlc3Qgb3V0cHV0LgotIwotIwk0KSBQcmludCB0aGUgcmVzdWx0cy4gIElmIHRoZXJlIHdlcmUgbm8gRkFJTEVEIHN0cmluZ3MgKmFuZCogdGhlCi0jCQludW1iZXIgb2YgU1VDQ0VTUyBzdHJpbmdzIGlzIHdoYXQgd2UgZXhwZWN0LCBzaW1wbHkKLSMJCW5vdGUgdGhhdCB0aGUgdGVzdCBwYXNzZWQuICBPdGhlcndpc2UsIGNhdCB0aGUgb3V0cHV0Ci0jCQlnZW5lcmF0ZWQgYnkgZXZhbF9vbmVwcm9ncmFtLnNoIGFuZCAocG9zc2libHkpCi0jCQlwcmludCBvdGhlciBkZXRhaWxzLgotIwotc2V0IHggJFRFU1RMSVNUCi1zaGlmdAotCi13aGlsZSBbIC1uICIkMSIgXSA7IGRvCi0JIwotCSMgUGFyc2UgYWd1bWVudCBzdHJlYW0uLi4KLQkjCi0JRVhQRUNURURTVUNDRVNTRVM9JDEKLQlzaGlmdAotCi0JUFJPR1JBTT0KLQl3aGlsZSBbICIkMSIgIT0gIj09PSIgXSA7IGRvIHsgUFJPR1JBTT0iJFBST0dSQU0gJDEiIDsgc2hpZnQgOyB9IGRvbmUKLQlzaGlmdAotCi0JdGVzdG5hbWU9ImBlY2hvICRQUk9HUkFNIHwgZ3JlcCAnXiMnIHwgc2VkICdzL14jLy8nYCIKLQotCWVjaG8gJys9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LW8tPT09KycKLQllY2hvCi0KLQotCi0JIwotCSMgRGVjaWRlIHdoZXRoZXIgdG8gc2tpcCB0aGUgdGVzdCwgaWYgaXQncyBtaXNpbmcsIGVsc2UgcnVuIGl0LgotCSMKLQlbIC1uICIkdGVzdG5hbWUiIF0gJiYgewkJCQkJIyBTa2lwIHRoZSB0ZXN0PwotCQllY2hvICJTS0lQUElORyB0ZXN0IGZvciBcIiR0ZXN0bmFtZVwiLiIKLQkJZWNobwotCQljb250aW51ZQotCX0KLQlbICEgLWUgImBlY2hvICRQUk9HUkFNIHwgYXdrICd7IHByaW50ICQxIH0nYCIgXSAmJiB7CSMgTWlzc2luZyB0ZXN0PwotCQlURVNURkFJTFVSRT1gZXhwciAkVEVTVEZBSUxVUkUgKyAxYAotCi0JCWVjaG8gIk1JU1NJTkcgdGVzdCBmb3IgXCIkUFJPR1JBTVwiLiIKLQkJZWNobwotCQljb250aW51ZQotCX0KLQotCWVjaG8gIlRFU1RJTkcgXCIkUFJPR1JBTVwiLi4uIgkJCQkjIEFubm91bmNlIHRlc3QhCi0KLQotCi0JIwotCSMgUnVuIHRoZSB0ZXN0IGFuZCBjb2xsZWN0IHRoZSBmYWlsZWRfY291bnQgYW5kIHN1Y2Nlc3NfY291bnQuCi0JIwotCWV2YWxfb25lcHJvZ3JhbS5zaCAkQVJHVU1FTlRTICRQUk9HUkFNID4kVE1QRklMRQotCWZhaWxlZF9jb3VudD0kPwotCi0Jc3VjY2Vzc19jb3VudD1gYXdrICckKE5GLTEpID09ICJTVUNDRVNTOiIgeyBwcmludCAkTkY7IGV4aXQgfScgJFRNUEZJTEVgCi0JWyAteiAiJHN1Y2Nlc3NfY291bnQiIF0gJiYgc3VjY2Vzc19jb3VudD0wCi0KLQotCQotCSMKLQkjIE91dHB1dCBiZXN0LWVmZm9ydCByZXN1bHRzIG9mIHRoZSB0ZXN0ICAtT1ItICBhIGZ1bGx5IHN1Y2Nlc3NmdWwgcnVuLgotCSMKLQlbICIkZmFpbGVkX2NvdW50IiAtZXEgMCAtYSBcCi0JCQkiJHN1Y2Nlc3NfY291bnQiIC1lcSAiJEVYUEVDVEVEU1VDQ0VTU0VTIiBdICYmCi0JewotCQllY2hvCi0JCWVjaG8gJFBST0dSQU0gUEFTU0VECQkjIFN1Y2Nlc3NmdWwsIGZ1bGx5LCBjb21wbGV0ZWQKLQkJZWNobwotCQkKLQkJdHJ1ZQotCX0gfHwgewotCQlURVNURkFJTFVSRT1gZXhwciAkVEVTVEZBSUxVUkUgKyAxYAotCi0JCWVjaG8KLQkJY2F0ICRUTVBGSUxFCi0JCWVjaG8KLQotCQlbICIkc3VjY2Vzc19jb3VudCIgLW5lICRFWFBFQ1RFRFNVQ0NFU1NFUyBdICYmIHsKLQkJCWVjaG8gIkdvdCAkc3VjY2Vzc19jb3VudCBTVUNDRVNTZXMiXAotCQkJCQkJIm91dCBvZiAkRVhQRUNURURTVUNDRVNTRVMuIgotCQkJZWNobwotCQl9Ci0JCXRydWUKLQl9ICAjIGVuZCAtLSBldmFsdWF0aW9uIG9mIGFuZCBvdXRwdXQgYmFzZWQgdXBvbiB0ZXN0IHN1Y2Nlc3MuCi1kb25lICAjIGVuZHdoaWxlCi0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBDbGVhbnVwLCBleGl0LgotIwotcm0gLWYgJFRNUEZJTEUKLXJtIC1yZiAkU05NUF9UTVBESVIKLQotZXhpdCAkVEVTVEZBSUxVUkUKLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZXZhbF90ZXN0bGlzdCBiL3Rlc3RpbmcvZXZhbF90ZXN0bGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYwZjFmNS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL2V2YWxfdGVzdGxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTcJa3Rlc3QgLWEKLTEzCXN0ZXN0IC1hCQkKLTMJI3Rlc3Rfa2V5Y2hhbmdlLnNoCi0yCXRlc3Rfa3VsLnNoCi0zCWV0ZXN0IC1hCmRpZmYgLS1naXQgYS90ZXN0aW5nL2V2YWxfdG9vbHMuc2ggYi90ZXN0aW5nL2V2YWxfdG9vbHMuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZDNhZDEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9ldmFsX3Rvb2xzLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLSMKLSMgZXZhbF90b29scy5zaAotIwotIyBPdXRwdXQgZnVuY3Rpb25zIGZvciBzY3JpcHQgdGVzdHMuICBTb3VyY2UgdGhpcyBmcm9tIG90aGVyIHRlc3Qgc2NyaXB0cwotIyB0byBlc3RhYmxpc2ggYSBzdGFuZGFyZGl6ZWQgcmVwZXJ0b3J5IG9mIHRlc3QgZnVuY3Rpb25zLgotIwotIwotIyBFeGNlcHQgd2hlcmUgbm90ZWQsIGFsbCBmdW5jdGlvbnMgcmV0dXJuOgotIwkwCU9uIHN1Y2Nlc3MsCShCb3VybmUgU2hlbGwncyBgYHRydWUnJykKLSMJbm9uLTAJT3RoZXJ3aXNlLgotIwotIyBJbnB1dCBhcmd1bWVudHMgdG8gZWFjaCBmdW5jdGlvbiBhcmUgZG9jdW1lbnRlZCB3aXRoIGVhY2ggZnVuY3Rpb24uCi0jCi0jCi0jIFhYWCAgU3VnZ2VzdGlvbnM6Ci0jCURFQlVHIE9OfE9GRgotIwlkdW1wIENBUFRVUkUgb3V0cHV0IHRvIHN0ZG91dCBhcyB3ZWxsIGFzIHRvIGp1bmtvdXRwdXRmaWxlLgotIwotCi0jCi0jIE9ubHkgYWxsb3cgb3Vyc2VsdmVzIHRvIGJlIGV2YWwnZWQgb25jZQotIwotaWYgWyAieCRFVkFMX1RPT0xTX1NIX0VWQUxFRCIgIT0gInh5ZXMiIF07IHRoZW4KLSAgICBFVkFMX1RPT0xTX1NIX0VWQUxFRD15ZXMKLSAgICAuIFRFU1RDT05GLnNoCi0KLSMKLSMgVmFyaWFibGVzIHVzZWQgaW4gZ2xvYmFsIGVudmlyb25tZW50IG9mIGNhbGxpbmcgc2NyaXB0LgotIwotZmFpbGNvdW50PTAKLWp1bmtvdXRwdXRmaWxlPSIkU05NUF9UTVBESVIvb3V0cHV0LWBiYXNlbmFtZSAkMGAkJCIKLXNlcGVyYXRvcj0iLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSIKLWlmIFsgLXogIiRPS19UT19TQVZFX1JFU1VMVCIgXSA7IHRoZW4KLU9LX1RPX1NBVkVfUkVTVUxUPTEKLWV4cG9ydCBPS19UT19TQVZFX1JFU1VMVAotZmkKLQotCi0jCi0jIEhFQURFUjogcmV0dXJucyBhIHNpbmdsZSBsaW5lIHdoZW4gU05NUF9IRUFERVJPTkxZIG1vZGUgYW5kIGV4aXRzLgotIwotSEVBREVSKCkgewotICAgIGlmIFsgIngkU05NUF9IRUFERVJPTkxZIiAhPSAieCIgXTsgdGhlbgotICAgICAgICBlY2hvIHRlc3QgJCoKLQlleGl0IDA7Ci0gICAgZWxzZQotCUVDSE8gInRlc3RpbmcgJCouLi4gICIKLQloZWFkZXJTdHI9InRlc3RpbmcgJCoiCi0gICAgZmkKLX0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIwotT1VUUFVUKCkgewkjIDxhbnlfYXJndW1lbnRzPgotCWNhdCA8PEdST05LCi0KLQotJCoKLQotCi1HUk9OSwotfQotCi1DQU5fVVNMRUVQKCkgewotICAgaWYgWyAiJFNOTVBfQ0FOX1VTTEVFUCIgPSAwIC1vICIkU05NUF9DQU5fVVNMRUVQIiA9IDAgXSA7IHRoZW4KLSAgICAgcmV0dXJuICRTTk1QX0NBTl9VU0xFRVAKLSAgIGZpCi0gICBzbGVlcCAuMSA+IC9kZXYvbnVsbCAyPiYxCi0gICBpZiBbICQ/ID0gMCBdIDsgdGhlbgotICAgICBTTk1QX0NBTl9VU0xFRVA9MQotICAgZWxzZQotICAgICBTTk1QX0NBTl9VU0xFRVA9MAotICAgZmkKLSAgIGV4cG9ydCBTTk1QX0NBTl9VU0xFRVAKLX0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIwotU1VDQ0VTUygpIHsJIyA8YW55X2FyZ3VtZW50cz4KLQlbICIkZmFpbGNvdW50IiAtbmUgMCBdICYmIHJldHVybgotCWNhdCA8PEdST0lOSwotCi1TVUNDRVNTOiAkKgotCi1HUk9JTksKLX0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1GQUlMRUQoKSB7CSMgPHJldHVybl92YWx1ZT4sIDxhbnlfYXJndW1lbnRzPgotCVsgIiQxIiAtZXEgMCBdICYmIHJldHVybgotCXNoaWZ0Ci0KLQlmYWlsY291bnQ9YGV4cHIgJGZhaWxjb3VudCArIDFgCi0JY2F0IDw8R1JPTklLCi0KLUZBSUxFRDogJCoKLQotR1JPTklLCi19Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1TS0lQKCkgewotCVJFTU9WRVRFU1REQVRBCi0JZWNobyAiU0tJUFBFRCIKLQlleGl0IDAKLX0KLQotSVNERUZJTkVEKCkgewotCWdyZXAgIl4jZGVmaW5lICQxICIgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmggPi9kZXYvbnVsbAotfQotCi1TS0lQSUZOT1QoKSB7Ci0JaWYgSVNERUZJTkVEICIkMSI7IHRoZW4KLQkgICAgOgotCWVsc2UKLQkgICAgU0tJUAotCWZpCi19Ci0KLVNLSVBJRigpIHsKLQlpZiBJU0RFRklORUQgIiQxIjsgdGhlbgotCSAgICBTS0lQCi0JZmkKLX0KLQkKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMKLVZFUklGWSgpIHsJIyA8cGF0aF90b19maWxlKHMpPgotCW1pc3NpbmdmaWxlcz0iIgotCi0JZm9yIGYgaW4gJCo7IGRvCi0JCVsgLWYgIiRmIiBdICYmIGNvbnRpbnVlCi0JCWVjaG8gIkZBSUxFRDogQ2Fubm90IGZpbmQgZmlsZSBcIiRmXCIuIgotCQltaXNzaW5nZmlsZXM9dHJ1ZQotCWRvbmUKLQotCVsgIiRtaXNzaW5nZmlsZXMiID0gdHJ1ZSBdICYmIGV4aXQgMTAwMAotfQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1TVEFSVFRFU1QoKSB7CQotCVsgISAtZiAiJGp1bmtvdXRwdXRmaWxlIiBdICYmIHsKLQkJdG91Y2ggJGp1bmtvdXRwdXRmaWxlCi0JCXJldHVybgotCX0KLQllY2hvICJGQUlMRUQ6IE91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzOiBcIiRqdW5rb3V0cHV0ZmlsZVwiLiIKLQlleGl0IDEwMDAKLX0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIwotU1RPUFRFU1QoKSB7Ci0Jcm0gLWYgIiRqdW5rb3V0cHV0ZmlsZSIKLX0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIwotUkVNT1ZFVEVTVERBVEEoKSB7Ci0jCUVDSE8gInJlbW92aW5nICRTTk1QX1RNUERJUiAgIgotCXJtIC1yZiAkU05NUF9UTVBESVIKLX0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIyBDYXB0dXJlcyBvdXRwdXQgZnJvbSBjb21tYW5kLCBhbmQgcmV0dXJucyB0aGUgY29tbWFuZCdzIGV4aXQgY29kZS4KLUNBUFRVUkUoKSB7CSMgPGNvbW1hbmRfd2l0aF9hcmd1bWVudHNfdG9fZXhlY3V0ZT4KLSAgICBlY2hvICQqID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCi0KLQlpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXTsgdGhlbgotCQljYXQgPDxLTk9SRwotCi1FWEVDVVRJTkc6ICQqCi0KLUtOT1JHCi0KLQlmaQotCSggJCogMj4mMSApID4gJGp1bmtvdXRwdXRmaWxlIDI+JjEKLQlSQz0kPwotCi0JaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAxIF07IHRoZW4KLQkJZWNobyAiQ29tbWFuZCBPdXRwdXQ6ICIKLQkJZWNobyAiTUlCRElSICRNSUJESVJTICRNSUJTIgotCQllY2hvICIkc2VwZXJhdG9yIgotCQljYXQgJGp1bmtvdXRwdXRmaWxlIHwgc2VkICdzL14vICAvJwotCQllY2hvICIkc2VwZXJhdG9yIgotCWZpCi0JcmV0dXJuICRSQwotfQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIyBEZWxheSB0byBsZXQgcHJvY2Vzc2VzIHNldHRsZQotREVMQVkoKSB7Ci0gICAgaWYgWyAiJFNOTVBfU0xFRVAiICE9ICIwIiBdIDsgdGhlbgotCXNsZWVwICRTTk1QX1NMRUVQCi0gICAgZmkKLX0KLQotU0FWRV9SRVNVTFRTKCkgewotICAgcmVhbF9yZXR1cm5fdmFsdWU9JHJldHVybl92YWx1ZQotfQotCi0jCi0jIENoZWNrcyB0aGUgb3V0cHV0IHJlc3VsdCBhZ2FpbnN0IHdoYXQgd2UgZXhwZWN0LgotIyAgIFNldHMgcmV0dXJuX3ZhbHVlIHRvIDAgb3IgMS4KLSMKLUVYUEVDVFJFU1VMVCgpIHsKLSAgaWYgWyAkT0tfVE9fU0FWRV9SRVNVTFQgLW5lIDAgXSA7IHRoZW4KLSAgICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9ICIkMSIgXTsgdGhlbgotCXJldHVybl92YWx1ZT0wCi0gICAgZWxzZQotCXJldHVybl92YWx1ZT0xCi0gICAgZmkKLSAgZmkKLX0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMgUmV0dXJuczogQ291bnQgb2YgbWF0Y2hlZCBsaW5lcy4KLSMKLUNIRUNLKCkgewkjIDxwYXR0ZXJuX3RvX21hdGNoPgotICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCi0JZWNobyAtbiAiY2hlY2tpbmcgb3V0cHV0IGZvciBcIiQqXCIuLi4iCi0gICAgZmkKLQotICAgIHJ2YWw9YGdyZXAgLWMgIiQqIiAiJGp1bmtvdXRwdXRmaWxlIiAyPi9kZXYvbnVsbGAKLQotICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCi0JZWNobyAiJHJ2YWwgbWF0Y2hlcyBmb3VuZCIKLSAgICBmaQotCi0gICAgc25tcF9sYXN0X3Rlc3RfcmVzdWx0PSRydmFsCi0gICAgRVhQRUNUUkVTVUxUIDEgICMgZGVmYXVsdAotICAgIHJldHVybiAkcnZhbAotfQotCi1DSEVDS0ZJTEUoKSB7Ci0gICAgZmlsZT0kMQotICAgIGlmIFsgIngkZmlsZSIgPSAieCIgXSA7IHRoZW4KLSAgICAgICAgZmlsZT0kanVua291dHB1dGZpbGUKLSAgICBmaQotICAgIHNoaWZ0Ci0gICAgbXlvbGRqdW5rb3V0cHV0ZmlsZT0iJGp1bmtvdXRwdXRmaWxlIgotICAgIGp1bmtvdXRwdXRmaWxlPSIkZmlsZSIKLSAgICBDSEVDSyAkKgotICAgIGp1bmtvdXRwdXRmaWxlPSIkbXlvbGRqdW5rb3V0cHV0ZmlsZSIKLX0KLQotQ0hFQ0tUUkFQRCgpIHsKLSAgICBDSEVDS0ZJTEUgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFICRACi19Ci0KLUNIRUNLVFJBUERPUkRJRSgpIHsKLSAgICBDSEVDS09SRElFICRAICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRQotfQotCi1DSEVDS0FHRU5UKCkgewotICAgIENIRUNLRklMRSAkU05NUF9TTk1QRF9MT0dfRklMRSAkQAotfQotCi1XQUlURk9SQUdFTlQoKSB7Ci0gICAgV0FJVEZPUiAiJEAiICRTTk1QX1NOTVBEX0xPR19GSUxFCi19Ci0KLVdBSVRGT1JUUkFQRCgpIHsKLSAgICBXQUlURk9SICIkQCIgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFCi19Ci0KLVdBSVRGT1IoKSB7Ci0gICMjIHNhdmUgdGhlIHByZXZpb3VzIHNhdmUgc3RhdGUgYW5kIHRlc3QgcmVzdWx0Ci0gICAgc2F2ZV9zdGF0ZT0kT0tfVE9fU0FWRV9SRVNVTFQKLSAgICBzYXZlX3Rlc3Q9JHNubXBfbGFzdF90ZXN0X3Jlc3VsdAotICAgIE9LX1RPX1NBVkVfUkVTVUxUPTAKLQotICAgIHNsZWVwdGltZT0kU05NUF9TTEVFUAotICAgIG9sZHNsZWVwdGltZT0kU05NUF9TTEVFUAotICAgIGlmIFsgIiQxIiAhPSAiIiBdIDsgdGhlbgotCUNBTl9VU0xFRVAKLQlpZiBbICRTTk1QX0NBTl9VU0xFRVAgPSAxIF0gOyB0aGVuCi0JICBzbGVlcHRpbWU9YGV4cHIgJFNOTVBfU0xFRVAgJyonIDUwYAotICAgICAgICAgIFNOTVBfU0xFRVA9LjEKLQllbHNlIAotCSAgc2xlZXB0aW1lPWBleHByICRTTk1QX1NMRUVQICcqJyA1YAotCSAgU05NUF9TTEVFUD0xCi0JZmkKLSAgICAgICAgd2hpbGUgWyAkc2xlZXB0aW1lIC1ndCAwIF0gOyBkbwotCSAgaWYgWyAiJDIiID0gIiIgXSA7IHRoZW4KLSAgICAgICAgICAgIENIRUNLICIkQCIKLSAgICAgICAgICBlbHNlCi0JICAgIENIRUNLRklMRSAiJDIiICIkMSIKLQkgIGZpCi0gICAgICAgICAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gIiIgXSA7IHRoZW4KLSAgICAgICAgICAgICAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLWd0IDAgXSA7IHRoZW4KLQkgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZmkKLQkgIGZpCi0gICAgICAgICAgREVMQVkKLSAgICAgICAgICBzbGVlcHRpbWU9YGV4cHIgJHNsZWVwdGltZSAtIDFgCi0gICAgICAgIGRvbmUKLSAgICAgICAgU05NUF9TTEVFUD0kb2xkc2xlZXB0aW1lCi0gICAgZWxzZQotICAgICAgICBpZiBbICRTTk1QX1NMRUVQIC1uZSAwIF0gOyB0aGVuCi0JICAgIHNsZWVwICRTTk1QX1NMRUVQCi0gICAgICAgIGZpCi0gICAgZmkKLQotICAjIyByZXN0b3JlIHRoZSBwcmV2aW91cyBzYXZlIHN0YXRlIGFuZCB0ZXN0IHJlc3VsdAotICAgIE9LX1RPX1NBVkVfUkVTVUxUPSRzYXZlX3N0YXRlCi0gICAgc25tcF9sYXN0X3Rlc3RfcmVzdWx0PSRzYXZlX3Rlc3QKLX0gICAgCi0KLSMgV0FJVEZPUk9SRElFICJncmVwIHN0cmluZyIgWyJmaWxlIl0KLVdBSVRGT1JPUkRJRSgpIHsKLSAgICBXQUlURk9SICIkMSIgIiQyIgotICAgIGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICAgICAgRklOSVNIRUQKLSAgICBmaQotICAgIEVDSE8gIi4iCi19Ci0KLSMgQ0hFQ0tPUkRJRSAiZ3JlcCBzdHJpbmciIFsiZmlsZSJdIC4uIEZBSUwgaWYgImdyZXAgc3RyaW5nIiBpcyAqbm90KiBmb3VuZAotQ0hFQ0tPUkRJRSgpIHsKLSAgICBDSEVDS0ZJTEUgIiQyIiAiJDEiCi0gICAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAwIF0gOyB0aGVuCi0gICAgICAgIEZJTklTSEVECi0gICAgZmkKLSAgICBFQ0hPICIuIgotfQotCi0jIENIRUNLQU5ERElFICJncmVwIHN0cmluZyIgWyJmaWxlIl0gLi4gRkFJTCBpZiAiZ3JlcCBzdHJpbmciICppcyogZm91bmQKLUNIRUNLQU5ERElFKCkgewotICAgIENIRUNLRklMRSAiJDIiICIkMSIKLSAgICBFWFBFQ1RSRVNVTFQgMCAjIG1ha2Ugc3VyZSByZXR1cm5fdmFsdWUgZ2V0cyBzZXQgY29ycmVjdGx5Ci0gICAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgICAgICBGSU5JU0hFRAotICAgIGZpCi0gICAgRUNITyAiLiIKLX0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMgUmV0dXJuczogQ291bnQgb2YgbWF0Y2hlZCBsaW5lcy4KLSMKLUNIRUNLRVhBQ1QoKSB7CSMgPHBhdHRlcm5fdG9fbWF0Y2hfZXhhY3RseT4KLQlydmFsPWBlZ3JlcCAtYyAiXiQqXCR8XiQqW15hLXpBLVowLTlfXXxbXmEtekEtWjAtOV9dJCpcJHxbXmEtekEtWjAtOV9dJCpbXmEtekEtWjAtOV9dIiAiJGp1bmtvdXRwdXRmaWxlIiAyPi9kZXYvbnVsbGAKLQlzbm1wX2xhc3RfdGVzdF9yZXN1bHQ9JHJ2YWwKLQlFWFBFQ1RSRVNVTFQgMSAgIyBkZWZhdWx0Ci0JcmV0dXJuICRydmFsCi19Ci0KLUNPTkZJR0FHRU5UKCkgewotICAgIGlmIFsgIngkU05NUF9DT05GSUdfRklMRSIgPSAieCIgXTsgdGhlbgotCWVjaG8gIiQwOiBmYWlsZWQgYmVjYXVzZSB2YXI6IFNOTVBfQ09ORklHX0ZJTEUgd2Fzbid0IHNldCIKLQlleGl0IDE7Ci0gICAgZmkKLSAgICBlY2hvICQqID4+ICRTTk1QX0NPTkZJR19GSUxFCi19Ci0KLUNPTkZJR1RSQVBEKCkgewotICAgIGlmIFsgIngkU05NUFRSQVBEX0NPTkZJR19GSUxFIiA9ICJ4IiBdOyB0aGVuCi0JZWNobyAiJDA6IGZhaWxlZCBiZWNhdXNlIHZhcjogU05NUFRSQVBEX0NPTkZJR19GSUxFIHdhc24ndCBzZXQiCi0JZXhpdCAxOwotICAgIGZpCi0gICAgZWNobyAkKiA+PiAkU05NUFRSQVBEX0NPTkZJR19GSUxFCi19Ci0KLSMKLSMgY29tbW9uIHRvIFNUQVJUQUdFTlQgYW5kIFNUQVJUVFJBUEQKLSMgbG9nIGNvbW1hbmQgdG8gImludm9rZWQiIGZpbGUKLSMgZGVsYXkgYWZ0ZXIgY29tbWFuZCB0byBhbGxvdyBmb3Igc2V0dGxlCi0jCi1TVEFSVFBST0coKSB7Ci0gICAgaWYgWyAieCREWU5BTUlDX0FOQUxZWkVSIiAhPSAieCIgXTsgdGhlbgotICAgICAgICBDT01NQU5EPSIkRFlOQU1JQ19BTkFMWVpFUiAkQ09NTUFORCIKLSAgICBmaQotICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMSBdOyB0aGVuCi0JZWNobyAiJENGR19GSUxFIGNvbnRhaW5zOiAiCi0JaWYgWyAtZiAkQ0ZHX0ZJTEUgXTsgdGhlbgotCSAgICBjYXQgJENGR19GSUxFCi0JZWxzZQotCSAgICBlY2hvICJbbm8gY29uZmlnIGZpbGVdIgotCWZpCi0gICAgZmkKLSAgICBpZiB0ZXN0IC1mICRDRkdfRklMRTsgdGhlbgotCUNPTU1BTkQ9IiRDT01NQU5EIC1DIC1jICRDRkdfRklMRSIKLSAgICBmaQotICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCi0JZWNobyAicnVubmluZzogJENPTU1BTkQiCi0gICAgZmkKLSAgICBpZiBbICJ4JFBPUlRfU1BFQyIgIT0gIngiIF07IHRoZW4KLSAgICAgICAgQ09NTUFORD0iJENPTU1BTkQgJFBPUlRfU1BFQyIKLSAgICBmaQotICAgIGVjaG8gJENPTU1BTkQgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKLSAgICBpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KLSAgICAgICMjICRDT01NQU5EID4gJExPR19GSUxFLnN0ZG91dCAyPiYxICYKLSAgICAgIENPTU1BTkQ9ImNtZC5leGUgLy9jIHN0YXJ0IC8vbWluICRDT01NQU5EIgotICAgICAgc3RhcnQgJENPTU1BTkQgPiAkTE9HX0ZJTEUuc3Rkb3V0IDI+JjEKLSAgICBlbHNlCi0gICAgICAkQ09NTUFORCA+ICRMT0dfRklMRS5zdGRvdXQgMj4mMQotICAgIGZpCi19Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi1TVEFSVEFHRU5UKCkgewotICAgIFNOTVBEU1RBUlRFRD0xCi0gICAgQ09NTUFORD0ic25tcGQgJFNOTVBfRkxBR1MgLXIgLVUgLXAgJFNOTVBfU05NUERfUElEX0ZJTEUgLUxmICRTTk1QX1NOTVBEX0xPR19GSUxFICRBR0VOVF9GTEFHUyIKLSAgICBDRkdfRklMRT0kU05NUF9DT05GSUdfRklMRQotICAgIExPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFCi0gICAgUE9SVF9TUEVDPSIkU05NUF9TTk1QRF9QT1JUIgotICAgIGlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgIT0gIngiIF07IHRoZW4KLSAgICAgICAgUE9SVF9TUEVDPSIke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtQT1JUX1NQRUN9IgotICAgIGZpCi0gICAgU1RBUlRQUk9HCi0gICAgV0FJVEZPUkFHRU5UICJORVQtU05NUCB2ZXJzaW9uIgotfQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotU1RBUlRUUkFQRCgpIHsKLSAgICBUUkFQRFNUQVJURUQ9MQotICAgIENPTU1BTkQ9InNubXB0cmFwZCAtZCAtcCAkU05NUF9TTk1QVFJBUERfUElEX0ZJTEUgLUxmICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRSAkVFJBUERfRkxBR1MiCi0gICAgQ0ZHX0ZJTEU9JFNOTVBUUkFQRF9DT05GSUdfRklMRQotICAgIExPR19GSUxFPSRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRQotICAgIFBPUlRfU1BFQz0iJFNOTVBfU05NUFRSQVBEX1BPUlQiCi0gICAgaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiAhPSAieCIgXTsgdGhlbgotICAgICAgICBQT1JUX1NQRUM9IiR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1BPUlRfU1BFQ30iCi0gICAgZmkKLSAgICBTVEFSVFBST0cKLSAgICBXQUlURk9SVFJBUEQgIk5FVC1TTk1QIHZlcnNpb24iCi19Ci0KLSMjIHNlbmRpbmcgU0lHSFVQIGZvciByZWNvbmZpZ3VyYXRpb24KLSMKLUhVUFBST0coKSB7Ci0gICAgaWYgWyAtZiAkMSBdOyB0aGVuCi0gICAgICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgotICAgICAgICAgIENPTU1BTkQ9J2VjaG8gIlNraXBwaW5nIFNJR0hVUCAobm90IHBvc3NpYmxlIHdpdGggTWluR1cpIicKLSAgICAgICAgZWxzZQotICAgICAgICAgIENPTU1BTkQ9ImtpbGwgLUhVUCBgY2F0ICQxYCIKLSAgICAgICAgZmkKLQllY2hvICRDT01NQU5EID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCi0JJENPTU1BTkQgPiAvZGV2L251bGwgMj4mMQotICAgIGZpCi19Ci0KLUhVUEFHRU5UKCkgewotICAgIEhVUFBST0cgJFNOTVBfU05NUERfUElEX0ZJTEUKLSAgICBpZiBbICJ4JE9TVFlQRSIgIT0gInhtc3lzIiBdOyB0aGVuCi0gICAgICAgIFdBSVRGT1JBR0VOVCAicmVzdGFydGVkIgotICAgIGZpCi19Ci0KLUhVUFRSQVBEKCkgewotICAgIEhVUFBST0cgJFNOTVBfU05NUFRSQVBEX1BJRF9GSUxFCi0gICAgaWYgWyAieCRPU1RZUEUiICE9ICJ4bXN5cyIgXTsgdGhlbgotICAgICAgICBXQUlURk9SVFJBUEQgInJlc3RhcnRlZCIKLSAgICBmaQotfQotCi0KLSMjIHVzZWQgYnkgU1RPUEFHRU5UIGFuZCBTVE9QVFJBUEQKLSMgZGVsYXkgYmVmb3JlIGtpbGwgdG8gYWxsb3cgcHJldmlvdXMgYWN0aW9uIHRvIGZpbmlzaAotIyAgICB0aGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBpbnRlcmFjdGlvbiBiZXR3ZWVuCi0jICAgIG1hc3RlciBhZ2VudCBhbmQgc3ViIGFnZW50LgotU1RPUFBST0coKSB7Ci0gICAgaWYgWyAtZiAkMSBdOyB0aGVuCi0gICAgICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgotICAgICAgICAgIENPTU1BTkQ9InBza2lsbC5leGUgYGNhdCAkMWAiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBDT01NQU5EPSJraWxsIC1URVJNIGBjYXQgJDFgIgotICAgICAgICBmaQotCWVjaG8gJENPTU1BTkQgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKLQkkQ09NTUFORCA+IC9kZXYvbnVsbCAyPiYxCi0gICAgZmkKLX0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMKLVNUT1BBR0VOVCgpIHsKLSAgICBTQVZFX1JFU1VMVFMKLSAgICBTVE9QUFJPRyAkU05NUF9TTk1QRF9QSURfRklMRQotICAgIGlmIFsgIngkT1NUWVBFIiAhPSAieG1zeXMiIF07IHRoZW4KLSAgICAgICAgV0FJVEZPUkFHRU5UICJzaHV0dGluZyBkb3duIgotICAgIGZpCi0gICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAxIF07IHRoZW4KLQllY2hvICJBZ2VudCBPdXRwdXQ6IgotCWVjaG8gIiRzZXBlcmF0b3IgW3N0ZG91dF0iCi0JY2F0ICRTTk1QX1NOTVBEX0xPR19GSUxFLnN0ZG91dAotCWVjaG8gIiRzZXBlcmF0b3IgW2xvZ2ZpbGVdIgotCWNhdCAkU05NUF9TTk1QRF9MT0dfRklMRQotCWVjaG8gIiRzZXBlcmF0b3IiCi0gICAgZmkKLX0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMKLVNUT1BUUkFQRCgpIHsKLSAgICBTQVZFX1JFU1VMVFMKLSAgICBTVE9QUFJPRyAkU05NUF9TTk1QVFJBUERfUElEX0ZJTEUKLSAgICBpZiBbICJ4JE9TVFlQRSIgIT0gInhtc3lzIiBdOyB0aGVuCi0gICAgICAgIFdBSVRGT1JUUkFQRCAiU3RvcHBlZCIKLSAgICBmaQotICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMSBdOyB0aGVuCi0JZWNobyAic25tcHRyYXBkIE91dHB1dDoiCi0JZWNobyAiJHNlcGVyYXRvciBbc3Rkb3V0XSIKLQljYXQgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFLnN0ZG91dAotCWVjaG8gIiRzZXBlcmF0b3IgW2xvZ2ZpbGVdIgotCWNhdCAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUKLQllY2hvICIkc2VwZXJhdG9yIgotICAgIGZpCi19Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1GSU5JU0hFRCgpIHsKLQotICAgICMjIG5vIG1vcmUgY2hhbmdlcyB0byB0ZXN0IHJlc3VsdC4KLSAgICBPS19UT19TQVZFX1JFU1VMVD0wCi0KLSAgICBpZiBbICIkU05NUERTVEFSVEVEIiA9ICIxIiBdIDsgdGhlbgotICAgICAgU1RPUEFHRU5UCi0gICAgZmkKLSAgICBpZiBbICIkVFJBUERTVEFSVEVEIiA9ICIxIiBdIDsgdGhlbgotICAgICAgU1RPUFRSQVBECi0gICAgZmkKLSAgICBmb3IgcGZpbGUgaW4gJFNOTVBfVE1QRElSLypwaWQqIDsgZG8KLSAgICAgICAgaWYgWyAieCRwZmlsZSIgPSAieCRTTk1QX1RNUERJUi8qcGlkKiIgXTsgdGhlbgotICAgICAgICAgICAgRUNITyAiKG5vIHBpZCBmaWxlKHMpIGZvdW5kKSAiCi0gICAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgICBpZiBbICEgLWYgJHBmaWxlIF07IHRoZW4KLSAgICAgICAgICAgIEVDSE8gIignJHBmaWxlJyBkaXNhcHBlYXJlZCkgIgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZmkKLQlwaWQ9YGNhdCAkcGZpbGVgCi0JcHMgLWUgMj4vZGV2L251bGwgfCBlZ3JlcCAiXlsJIF0qJHBpZFsJIF0rIiA+IC9kZXYvbnVsbCAyPiYxCi0JaWYgWyAkPyA9IDAgXSA7IHRoZW4KLQkgICAgU05NUF9TQVZFX1RNUERJUj15ZXMKLSAgICAgICAgICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgotICAgICAgICAgICAgICBDT01NQU5EPSJwc2tpbGwuZXhlICRwaWQiCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIENPTU1BTkQ9ImtpbGwgLTkgJHBpZCIKLSAgICAgICAgICAgIGZpCi0JICAgIGVjaG8gJENPTU1BTkQgIigkcGZpbGUpIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAotCSAgICAkQ09NTUFORCA+IC9kZXYvbnVsbCAyPiYxCi0JICAgIHJldHVybl92YWx1ZT0xCi0JZmkKLSAgICBkb25lCi0gICAgaWYgWyAieCRyZWFsX3JldHVybl92YWx1ZSIgIT0gIngwIiBdOyB0aGVuCi0JaWYgWyAtcyBjb3JlIF0gOyB0aGVuCi0JICAgICMgWFggaG9wZSB0aGF0IG9ubHkgb25lIHByb2cgY29yZXMgIQotCSAgICBjcCBjb3JlICRTTk1QX1RNUERJUi9jb3JlLiQkCi0JICAgIHJtIC1mIGNvcmUKLQlmaQotCWVjaG8gIkZBSUwiCi0JZWNobyAiJGhlYWRlclN0ci4uLkZBSUwiID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCi0JZXhpdCAkcmVhbF9yZXR1cm5fdmFsdWUKLSAgICBmaQotCi0gICAgZWNobyAib2siCi0gICAgZWNobyAiJGhlYWRlclN0ci4uLm9rIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAotCi0gICAgaWYgWyAieCRTTk1QX1NBVkVfVE1QRElSIiAhPSAieHllcyIgXTsgdGhlbgotCVJFTU9WRVRFU1REQVRBCi0gICAgZmkKLSAgICBleGl0ICRyZWFsX3JldHVybl92YWx1ZQotfQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIwotVkVSQk9TRV9PVVQoKSB7Ci0gICAgaWYgWyAkU05NUF9WRVJCT1NFID4gJDEgXTsgdGhlbgotCXNoaWZ0Ci0JZWNobyAiJCoiCi0gICAgZmkKLX0KLQotZmkgIyBPbmx5IGFsbG93IG91cnNlbHZlcyB0byBiZSBldmFsJ2VkIG9uY2UKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvU3YxY29uZmlnIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjFjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RpbmcvdGVzdHMvU3YxY29uZmlnCnJlbmFtZSB0byB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2MWNvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdjJjY29uZmlnIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjJjY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0aW5nL3Rlc3RzL1N2MmNjb25maWcKcmVuYW1lIHRvIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YyY2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjNjb25maWcgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWRmNWI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjNjb25maWcKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisKK1NLSVBJRk5PVCBORVRTTk1QX1NFQ01PRF9VU00KKworWyAieCRTTk1QX1NNVVhfU09DS0VUIiA9ICJ4IiBdICYmIFNOTVBfU01VWF9TT0NLRVQ9MS4wLjAuMAorCitDT05GSUdBR0VOVCBbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgorQ09ORklHQUdFTlQgc211eHNvY2tldCAkU05NUF9TTVVYX1NPQ0tFVAorCisjIFhYWDogYXV0by1zd2l0Y2ggdG8gYSBzdXBwb3J0ZWQgcHJvdG9jb2wgaW5zdGVhZC4KK2lmIHRlc3QgIngkREVGQVVUSFRZUEUiID0gIngiOyB0aGVuCisgICAgaWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KKwlERUZBVVRIVFlQRT0iU0hBIgorICAgIGVsc2UKKwkgICAgREVGQVVUSFRZUEU9Ik1ENSIKKyAgICBmaQorZmkKKworaWYgdGVzdCAieCRERUZQUklWVFlQRSIgPSAieCI7IHRoZW4KKyAgIyBYWFg6IEhBVkVfQUVTIGRlcGVuZHMgb24gY3BwIGxvZ2ljLCBzbyB3ZSBuZWVkIHRvIHRlc3QgZm9yIGxvd2VyLWxldmVsIHN0dWZmCisgIGlmIGdyZXAgJ14jZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCisgICAgaWYgZ3JlcCAnXiNkZWZpbmUgSEFWRV9PUEVOU1NMX0FFU19IIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgorICAgICAgaWYgZ3JlcCAnXiNkZWZpbmUgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgIERFRlBSSVZUWVBFPSJBRVMiCisgICAgICBlbHNlCisgICAgICAgIERFRlBSSVZUWVBFPSJERVMiCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIERFRlBSSVZUWVBFPSJERVMiCisgICAgZmkKKyAgZWxzZQorICAgIERFRlBSSVZUWVBFPSIiCisgIGZpCitmaQorCitDT05GSUdBR0VOVCBjcmVhdGVVc2VyIGluaXRpYWwgJERFRkFVVEhUWVBFIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggJERFRlBSSVZUWVBFCitDT05GSUdBR0VOVCBjcmVhdGVVc2VyIHRlbXBsYXRlICRERUZBVVRIVFlQRSB0ZW1wbGF0ZV90ZXN0X3Bhc3NfYXV0aCAkREVGUFJJVlRZUEUKK0NPTkZJR0FHRU5UIHJ3dXNlciBpbml0aWFsIG5vYXV0aAorQ09ORklHQUdFTlQgcnd1c2VyIG5ld3Rlc3R1c2VyCisKK05PQVVUSFRFU1RBUkdTPSItbCBuYW5wIC11IGluaXRpYWwgLXYgMyIKK0FVVEhURVNUQVJHUz0iLWwgYW5wIC11IGluaXRpYWwgLXYgMyAtYSAkREVGQVVUSFRZUEUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCIKK1BSSVZURVNUQVJHUz0iLWwgYXAgLXUgaW5pdGlhbCAtdiAzIC1hICRERUZBVVRIVFlQRSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC14ICRERUZQUklWVFlQRSAtWCBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIgorCitBVVRITk9QQVNTVEVTVEFSR1M9Ii1sIGFucCAtdSBpbml0aWFsIC12IDMgLWEgJERFRkFVVEhUWVBFIgorUFJJVk5PUEFTU1RFU1RBUkdTPSItbCBhcCAtdSBpbml0aWFsIC12IDMgLWEgJERFRkFVVEhUWVBFIC14ICRERUZQUklWVFlQRSIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYWdlbnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2FnZW50CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2FnZW50CnJlbmFtZSB0byB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2FnZW50CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2Jhc2UgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2Jhc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlMWViMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZQpAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisjCisjIFNOTVB2MyBiYXNlIGNvbmZpZworIworIyBJbnB1dCtPdXRwdXQgdmFyaWFibGVzOgorIyAgIERFRlNFQ1VSSVRZTEVWRUwgICAgICAgICBub0F1dGhOb1ByaXZ8YXV0aE5vUHJpdnxhdXRoUHJpdgorIyAgIERFRkFVVEhUWVBFICAgICAgICAgICAgICBNRDV8U0hBCisjICAgREVGUFJJVlRZUEUgICAgICAgICAgICAgIERFU3xBRVMKKyMgICBURVNUTk9BVVRIVVNFUiAgICAgICAgICAgPG15dXNlcj4KKyMgICBURVNUKEFVVEh8UFJJVilVU0VSWzJdICAgPG15dXNlcj4KKyMgICBURVNUKEFVVEh8UFJJVilQQVNTWzJdICAgPG15cGFzcz4KKyMKKyMgSW5wdXQgdmFyaWFibGVzOgorIyAgIENSRUFURVVTRVJFTkdJTkVJRCAgICAgICA8ZW5naW5laWQ+CisjCisjIE91dHB1dCB2YXJpYWJsZXM6CisjICAgQ1JFQVRFQVVUSFVTRVJbMl0KKyMgICBDUkVBVEVQUklWVVNFUlsyXQorIyAgIENSRUFURU5PQVVUSFVTRVIKKyMgICBURVNUTk9BVVRIQVJHUworIyAgIFRFU1RBVVRIQVJHU1tOT1BBU1NdWzJdCisjICAgVEVTVFBSSVZBUkdTW05PUEFTU11bMl0KKyMKKworU0tJUElGTk9UIE5FVFNOTVBfU0VDTU9EX1VTTQorCisjIyBEZWZhdWx0cworWyAieCRERUZTRUNVUklUWUxFVkVMIiA9ICJ4IiBdICYmIERFRlNFQ1VSSVRZTEVWRUw9YXV0aFByaXYKKworIyMgYXV0by1wcm9iZSBiZXN0IGF1dGggdHlwZQoraWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgTUFYQVVUSFRZUEU9U0hBCitlbGlmIGdyZXAgJ14jZGVmaW5lIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTyAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgTUFYQVVUSFRZUEU9U0hBCitlbHNlCisgICMgTUQ1IGlzIGFsd2F5cyBhdmFpbGFibGUgaW50ZXJuYWxseQorICBNQVhBVVRIVFlQRT1NRDUKK2ZpCisKKyMjIGF1dG8tcHJvYmUgYmVzdCBwcml2IHR5cGUKKyMgWFhYOiBIQVZFX0FFUyBkZXBlbmRzIG9uIGNwcCBsb2dpYywgc28gd2UgbmVlZCB0byB0ZXN0IGZvciBsb3dlci1sZXZlbCBzdHVmZgoraWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbDsgdGhlbgorICBpZiBncmVwICdeI2RlZmluZSBIQVZFX09QRU5TU0xfQUVTX0ggMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgJiYgXAorICAgZ3JlcCAnXiNkZWZpbmUgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCisgICAgTUFYUFJJVlRZUEU9QUVTCisgIGVsc2UKKyAgICBNQVhQUklWVFlQRT1ERVMKKyAgZmkKK2VsaWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsOyB0aGVuCisgICAgTUFYUFJJVlRZUEU9QUVTCitlbHNlCisgICAgTUFYUFJJVlRZUEU9IiIKK2ZpCisKK0NSRUFURVVTRVJDTUQ9ImNyZWF0ZVVzZXIiCitbICJ4JENSRUFURVVTRVJFTkdJTkVJRCIgIT0gIngiIF0gJiYgQ1JFQVRFVVNFUkNNRD0iJENSRUFURVVTRVJDTUQgLWUgJENSRUFURVVTRVJFTkdJTkVJRCIKKworIyMgYXV0aCBzZXR1cAoraWYgWyAieCRERUZTRUNVUklUWUxFVkVMIiA9ICJ4YXV0aFByaXYiIC1vICJ4JERFRlNFQ1VSSVRZTEVWRUwiID0gInhhdXRoTm9Qcml2IiBdOyB0aGVuCisgIFsgIngkTUFYQVVUSFRZUEUiID0gIngiIF0gJiYgU0tJUCBNQVhBVVRIVFlQRSBub3Qgc2V0CisgIFsgIngkREVGQVVUSFRZUEUiID0gInhTSEEiIC1hICJ4JE1BWEFVVEhUWVBFIiAhPSAieFNIQSIgXSAmJiBTS0lQIENhbm5vdCBkbyBTSEEKKyAgWyAieCRERUZBVVRIVFlQRSIgPSAieCIgXSAmJiBERUZBVVRIVFlQRT0kTUFYQVVUSFRZUEUKKyAgIyB1c2VyL3Bhc3Mgc2V0dXAgKFhYWDogcmFuZG9taXplKQorICBbICJ4JFRFU1RBVVRIVVNFUiIgPSAieCIgXSAmJiBURVNUQVVUSFVTRVI9aW5pdGlhbF9hdXRoCisgIFsgIngkVEVTVEFVVEhVU0VSMiIgPSAieCIgXSAmJiBURVNUQVVUSFVTRVIyPXRlbXBsYXRlX2F1dGgKKyAgWyAieCRURVNUQVVUSFBBU1MiID0gIngiIF0gJiYgVEVTVEFVVEhQQVNTPWluaXRpYWxfdGVzdF9wYXNzX2F1dGgKKyAgWyAieCRURVNUQVVUSFBBU1MyIiA9ICJ4IiBdICYmIFRFU1RBVVRIUEFTUzI9dGVtcGxhdGVfdGVzdF9wYXNzX2F1dGgKKyAgQ1JFQVRFQVVUSFVTRVI9IiRDUkVBVEVVU0VSQ01EICRURVNUQVVUSFVTRVIgJERFRkFVVEhUWVBFICRURVNUQVVUSFBBU1MiCisgIENSRUFURUFVVEhVU0VSMj0iJENSRUFURVVTRVJDTUQgJFRFU1RBVVRIVVNFUjIgJERFRkFVVEhUWVBFICRURVNUQVVUSFBBU1MyIgorICAjIGNvbW1hbmQgYXJncworICBURVNUQVVUSEFSR1NOT1BBU1M9Ii12IDMgLWwgYW5wIC11ICRURVNUQVVUSFVTRVIgLWEgJERFRkFVVEhUWVBFIgorICBURVNUQVVUSEFSR1NOT1BBU1MyPSItdiAzIC1sIGFucCAtdSAkVEVTVEFVVEhVU0VSMiAtYSAkREVGQVVUSFRZUEUiCisgIFRFU1RBVVRIQVJHUz0iJFRFU1RBVVRIQVJHU05PUEFTUyAtQSAkVEVTVEFVVEhQQVNTIgorICBURVNUQVVUSEFSR1MyPSIkVEVTVEFVVEhBUkdTTk9QQVNTMiAtQSAkVEVTVEFVVEhQQVNTMiIKK2ZpCisKKyMjIHByaXYgc2V0dXAKK2lmIFsgIngkREVGU0VDVVJJVFlMRVZFTCIgPSAieGF1dGhQcml2IiBdOyB0aGVuCisgIFsgIngkTUFYUFJJVlRZUEUiID0gIngiIF0gJiYgU0tJUCBNQVhQUklWVFlQRSBub3Qgc2V0CisgIFsgIngkREVGUFJJVlRZUEUiID0gInhBRVMiIC1hICJ4JE1BWFBSSVZUWVBFIiAhPSAieEFFUyIgXSAmJiBTS0lQIENhbm5vdCBkbyBBRVMKKyAgWyAieCRERUZQUklWVFlQRSIgPSAieCIgXSAmJiBERUZQUklWVFlQRT0kTUFYUFJJVlRZUEUKKyAgIyB1c2VyL3Bhc3Mgc2V0dXAgKFhYWDogcmFuZG9taXplKQorICBbICJ4JFRFU1RQUklWVVNFUiIgPSAieCIgXSAmJiBURVNUUFJJVlVTRVI9aW5pdGlhbF9wcml2CisgIFsgIngkVEVTVFBSSVZVU0VSMiIgPSAieCIgXSAmJiBURVNUUFJJVlVTRVIyPXRlbXBsYXRlX3ByaXYKKyAgWyAieCRURVNUUFJJVlBBU1MiID0gIngiIF0gJiYgVEVTVFBSSVZQQVNTPWluaXRpYWxfdGVzdF9wYXNzX3ByaXYKKyAgWyAieCRURVNUUFJJVlBBU1MyIiA9ICJ4IiBdICYmIFRFU1RQUklWUEFTUzI9dGVtcGxhdGVfdGVzdF9wYXNzX3ByaXYKKyAgQ1JFQVRFUFJJVlVTRVI9IiRDUkVBVEVVU0VSQ01EICRURVNUUFJJVlVTRVIgJERFRkFVVEhUWVBFICRURVNUQVVUSFBBU1MgJERFRlBSSVZUWVBFICRURVNUUFJJVlBBU1MiCisgIENSRUFURVBSSVZVU0VSMj0iJENSRUFURVVTRVJDTUQgJFRFU1RQUklWVVNFUjIgJERFRkFVVEhUWVBFICRURVNUQVVUSFBBU1MyICRERUZQUklWVFlQRSAkVEVTVFBSSVZQQVNTMiIKKyAgIyBjb21tYW5kIGFyZ3MKKyAgVEVTVFBSSVZBUkdTTk9QQVNTPSItdiAzIC1sIGFwIC11ICRURVNUUFJJVlVTRVIgLWEgJERFRkFVVEhUWVBFIC14ICRERUZQUklWVFlQRSIKKyAgVEVTVFBSSVZBUkdTTk9QQVNTMj0iLXYgMyAtbCBhcCAtdSAkVEVTVFBSSVZVU0VSMiAtYSAkREVGQVVUSFRZUEUgLXggJERFRlBSSVZUWVBFIgorICBURVNUUFJJVkFSR1M9IiRURVNUUFJJVkFSR1NOT1BBU1MgLUEgJFRFU1RBVVRIUEFTUyAtWCAkVEVTVFBSSVZQQVNTIgorICBURVNUUFJJVkFSR1MyPSIkVEVTVFBSSVZBUkdTTk9QQVNTMiAtQSAkVEVTVEFVVEhQQVNTMiAtWCAkVEVTVFBSSVZQQVNTMiIKK2ZpCisKKyMjIG5vYXV0aCBzZXR1cAorWyAieCRURVNUTk9BVVRIVVNFUiIgPSAieCIgXSAmJiBURVNUTk9BVVRIVVNFUj1pbml0aWFsCitURVNUTk9BVVRIQVJHUz0iLXYgMyAtbCBuYW5wIC11ICRURVNUTk9BVVRIVVNFUiIKK0NSRUFURU5PQVVUSFVTRVI9IiRDUkVBVEVVU0VSQ01EICRURVNUTk9BVVRIVVNFUiIKKwpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWd0cmFwZCBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlndHJhcGQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlndHJhcGQKcmVuYW1lIHRvIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlndHJhcGQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdmFjbWNvbmZpZyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdmFjbWNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM1ZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN2YWNtY29uZmlnCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisjIGdlbmVyaWNhbGx5IHNldCB1cCB0aGUgdXNlciAiaW5pdGlhbDEiIGFuZCAiaW5pdGlhbDIiICBmb3Igc25tcCB2MworIyBhY2Nlc3MgdG8gdGhlIGFnZW50LgorCisjIENvbmZpZ3VyYXRpb246CisjaW5pdGlhbDEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBkZW55IG90aGVycworI2luaXRpYWwyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xIAorCisjIFhYWDogZG8gYXV0b3NlbGVjdGlvbiBvZiBzdXBwb3J0ZWQgYWxnb3JpdGhtcworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9NRDUKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfREVTCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKK0NPTkZJR0FHRU5UIFtzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCisKK0NPTkZJR0FHRU5UIGNyZWF0ZVVzZXIgaW5pdGlhbDEgTUQ1IGluaXRpYWxfdGVzdF9wYXNzX2F1dGggREVTCitDT05GSUdBR0VOVCBjcmVhdGVVc2VyIGluaXRpYWwyIE1ENSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIERFUworCisKK0NPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwMSAgdXNtICAgICBpbml0aWFsMQorQ09ORklHQUdFTlQgZ3JvdXAgICB0ZXN0Y29tbXVuaXR5Z3JvdXAyICB1c20gICAgIGluaXRpYWwyCisKK0NPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMSAgICAgaW5jbHVkZWQgLjEuMy42LjEuMi4xLjEuMSAKK0NPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMiAgICAgaW5jbHVkZWQgLjEKK0NPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMiAgICAgZXhjbHVkZWQgLjEuMy42LjEuMi4xLjEuMSAKK0NPTkZJR0FHRU5UICdhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cDEgICIiIGFueSBhdXRoIGV4YWN0IHN5c3RlbTEgbm9uZSBub25lJworQ09ORklHQUdFTlQgJ2FjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwMiAgIiIgYW55IGF1dGggZXhhY3Qgc3lzdGVtMiBub25lIG5vbmUnCisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3ZhY21jb25maWcgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YWNtY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZDg2MmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YWNtY29uZmlnCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCisjIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKKyMgZ2VuZXJpY2FsbHkgc2V0IHVwIHRoZSBjb21tdW5pdHkgInRlc3Rjb21tdW5pdHkxIGFuZCB0ZXN0Y29tbXVuaXR5MiIgZm9yIHZhcmlvdXMgc25tcAorIyB2ZXJzaW9uIGFjY2VzcyB0byB0aGUgYWdlbnQuCisKK2lmIFsgIngkc25tcF92ZXJzaW9uIiA9ICJ4IiBdOyB0aGVuCisgIHNubXBfdmVyc2lvbj0iYW55IgorZmkKKworQ09ORklHQUdFTlQgW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKKworQ09ORklHQUdFTlQgcm9jb21tdW5pdHkgdGVzdHJvY29tbXVuaXR5IDEyNy4wLjAuMSAuMS4zLjYuMS4yLjEuMS41LjAKK0NPTkZJR0FHRU5UIHJ3Y29tbXVuaXR5IHRlc3Ryd2NvbW11bml0eSAxMjcuMC4wLjEgLjEuMy42LjEuMi4xLjEuNS4wCisKK0NPTkZJR0FHRU5UIGNvbTJzZWMgdGVzdGNvbW11bml0eXNlYzEgIGRlZmF1bHQgdGVzdGNvbW11bml0eTEKK0NPTkZJR0FHRU5UIGNvbTJzZWMgdGVzdGNvbW11bml0eXNlYzIgIGRlZmF1bHQgdGVzdGNvbW11bml0eTIKKworaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVkcDYiIC1vICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidGNwNiIgXTt0aGVuIAorQ09ORklHQUdFTlQgcm9jb21tdW5pdHk2IHRlc3Ryb2NvbW11bml0eSA6OjEgLjEuMy42LjEuMi4xLjEuNS4wCitDT05GSUdBR0VOVCByd2NvbW11bml0eTYgdGVzdHJ3Y29tbXVuaXR5IDo6MSAuMS4zLjYuMS4yLjEuMS41LjAKK0NPTkZJR0FHRU5UIGNvbTJzZWM2IHRlc3Rjb21tdW5pdHlzZWMxICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkxCitDT05GSUdBR0VOVCBjb20yc2VjNiB0ZXN0Y29tbXVuaXR5c2VjMiAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5MgorZmkKKworaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVuaXgiIF07dGhlbiAKK0NPTkZJR0FHRU5UIGNvbTJzZWN1bml4IHRlc3Rjb21tdW5pdHlzZWMxICB0ZXN0Y29tbXVuaXR5MQorQ09ORklHQUdFTlQgY29tMnNlY3VuaXggdGVzdGNvbW11bml0eXNlYzIgIHRlc3Rjb21tdW5pdHkyCitmaQorCitDT05GSUdBR0VOVCBncm91cCAgIHRlc3Rjb21tdW5pdHlncm91cDEgICRzbm1wX3ZlcnNpb24gICAgIHRlc3Rjb21tdW5pdHlzZWMxCitDT05GSUdBR0VOVCBncm91cCAgIHRlc3Rjb21tdW5pdHlncm91cDIgICRzbm1wX3ZlcnNpb24gICAgIHRlc3Rjb21tdW5pdHlzZWMyCisKK0NPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMSAgICAgaW5jbHVkZWQgLjEuMy42LjEuMi4xLjEuMSAKK0NPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMiAgICAgaW5jbHVkZWQgLjEKK0NPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMiAgICAgZXhjbHVkZWQgLjEuMy42LjEuMi4xLjEuMSAKK0NPTkZJR0FHRU5UICdhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cDEgICIiIGFueSBub2F1dGggZXhhY3Qgc3lzdGVtMSBub25lIG5vbmUnCitDT05GSUdBR0VOVCAnYWNjZXNzICB0ZXN0Y29tbXVuaXR5Z3JvdXAyICAiIiBhbnkgbm9hdXRoIGV4YWN0IHN5c3RlbTIgbm9uZSBub25lJworCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YW55Y29uZmlnIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFueWNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2I1M2RjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFueWNvbmZpZwpAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKworIyBnZW5lcmljYWxseSBzZXQgdXAgdGhlIGNvbW11bml0eSAidGVzdGNvbW11bml0eSIgZm9yIHZhcmlvdXMgc25tcAorIyB2ZXJzaW9uIGFjY2VzcyB0byB0aGUgYWdlbnQuCisKK2lmIFsgIngkc25tcF92ZXJzaW9uIiA9ICJ4IiBdOyB0aGVuCisgIHNubXBfdmVyc2lvbj0iYW55IgorZmkKK2lmIFsgIngkc25tcF93cml0ZV9hY2Nlc3MiID0gIngiIF07IHRoZW4KKyAgc25tcF93cml0ZV9hY2Nlc3M9Im5vbmUiCitmaQorCitbICJ4JFNOTVBfU01VWF9TT0NLRVQiID0gIngiIF0gJiYgU05NUF9TTVVYX1NPQ0tFVD0xLjAuMC4wCisKK0NPTkZJR0FHRU5UIFtzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCitDT05GSUdBR0VOVCBzbXV4c29ja2V0ICRTTk1QX1NNVVhfU09DS0VUCisKK0NPTkZJR0FHRU5UIGNvbTJzZWMgdGVzdGNvbW11bml0eXNlYyAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5CitpZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidWRwNiIgLW8gIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ0Y3A2IiBdO3RoZW4gCisJQ09ORklHQUdFTlQgY29tMnNlYzYgdGVzdGNvbW11bml0eXNlYyAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5CitmaQorCitpZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidW5peCIgXTt0aGVuIAorCUNPTkZJR0FHRU5UIGNvbTJzZWN1bml4IHRlc3Rjb21tdW5pdHlzZWMgIHRlc3Rjb21tdW5pdHkKK2ZpCisKK0NPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwICAkc25tcF92ZXJzaW9uICAgICB0ZXN0Y29tbXVuaXR5c2VjCitDT05GSUdBR0VOVCB2aWV3ICAgIGFsbCAgICAgaW5jbHVkZWQgLjEgODAKK0NPTkZJR0FHRU5UICJhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cCAgJycgYW55IG5vYXV0aCBleGFjdCBhbGwgJHNubXBfd3JpdGVfYWNjZXNzIG5vbmUiCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMDBjb25maWd1cmUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDBjb25maWd1cmVfc2ltcGxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0aW5nL3Rlc3RzL1QwMDBjb25maWd1cmUKcmVuYW1lIHRvIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMGNvbmZpZ3VyZV9zaW1wbGUKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDM4NDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfc2ltcGxlCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MSBzdXBwb3J0CisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQorLiAuL1N2MWNvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworQ0FQVFVSRSAic25tcGdldG5leHQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMSIKKworQ0hFQ0tPUkRJRSAiRXJyb3IgaW4gcGFja2V0IgorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyBub3RhdmFsaWRjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0tPUkRJRSAiVGltZW91dCIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkOWJhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZQpAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjJjIHNldCBvZiBzeXN0ZW0uc3lzQ29udGFjdC4wCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKK1NLSVBJRiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Citzbm1wX3dyaXRlX2FjY2Vzcz0nYWxsJworLiAuL1N2MmNjb25maWcKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzoiCisKK0NBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAgcyBmb29iYXJ0ZXN0aW5nYmF6IgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiIKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworQ0hFQ0sgIlNUUklORzogZm9vYmFydGVzdGluZ2JheiIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZGZmZDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X3NpbXBsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjJjIGdldCBvZiBzeXN0ZW0uc3lzVXBUaW1lLjAKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKKy4gLi9TdjJjY29uZmlnCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNXNubXB2MmNnZXRuZXh0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzZlYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfc2ltcGxlCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MmMgZ2V0bmV4dCBvZiBzeXN0ZW0uc3lzVXBUaW1lCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5CisuIC4vU3YyY2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXRuZXh0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMyIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzhlYzNiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9zaW1wbGUKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYyYyBidWxrZ2V0IG9mIHN5c3RlbSBjb21wb25lbnRzCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYyIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKKy4gLi9TdjJjY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGJ1bGtnZXQgJFNOTVBfRkxBR1MgLXYyYyAtT24gLUNuMSAtQ3IyIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40IC4xLjMuNi4xLjIuMS4xIgorCitTVE9QQUdFTlQKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4yLjAgPSBPSUQ6IgorCitDSEVDS0NPVU5UIDAgIi4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0tDT1VOVCAwICIuMS4zLjYuMS4yLjEuMS41LjAiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkMGU5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKworIworIyB0ZXN0IHNubXB2MmMgZ2V0IHN1cHBvcnQgYnkgcmVhZGluZyBhIHZhcmlhYmxlCisjCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgZm9yIGZhaWx1cmUgb2YgU05NUHYyYyBnZXQgd2l0aCB3cm9uZyBjb21tdW5pdHkKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9WQUNNX0NPTkZfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5CisuIC4vU3YyY2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIG5vdGF2YWxpZGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICJUaW1lb3V0IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4MTJjMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSwzMCBAQAorIyEvYmluL3NoCisKKyMKKyMgdGVzdCBzbm1wdjJjIGdldCBzdXBwb3J0IGJ5IHJlYWRpbmcgYSB2YXJpYWJsZQorIworCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIGZvciBmYWlsdXJlIG9mIFNOTVB2MmMgZ2V0IGFnYWluc3QgU05NUHYxIGFnZW50CisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQorLiAuL1N2MWNvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIG5vdGF2YWxpZGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICJUaW1lb3V0IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliOGI2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgZm9yIGZhaWx1cmUgb2YgU05NUHYxIGdldCBhZ2FpbnN0IFNOTVB2MmMgYWdlbnQKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5CisuIC4vU3YyY2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIG5vdGF2YWxpZGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIlRpbWVvdXQiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTBiYjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX3NpbXBsZQpAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjJjIGdldCBvZiBzeXN0ZW0uc3lzVXBUaW1lLjEKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKKy4gLi9TdjJjY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMSIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjEgPSBObyBTdWNoIEluc3RhbmNlIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiNTllNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9zaW1wbGUKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYzIGdldCB1c2luZyBub0F1dGhOb1ByaXYgb2YgLjEuMy42LjEuMi4xLjEuMy4wCisKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBjb25maWd1cmUgdGhlIGFnZW50IHRvIGFjY2VwdCB1c2VyIGluaXRpYWwgd2l0aCBub0F1dGhOb1ByaXYKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkTk9BVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTRjODJkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfc2ltcGxlCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBnZXRuZXh0IHVzaW5nIGluaXRpYWwgb2YgLjEuMy42LjEuMi4xLjEuMworCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgY29uZmlndXJlIHRoZSBhZ2VudCB0byBhY2NlcHQgdXNlciBpbml0aWFsIHdpdGggbm9BdXRoTm9Qcml2CisuIC4vU3YzY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldG5leHQgLU9uICRTTk1QX0ZMQUdTICROT0FVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZWRkY2NmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfc2ltcGxlCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBidWxrZ2V0IG9mIHN5c3RlbQorCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbjogCisuIC4vU3YzY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGJ1bGtnZXQgJFNOTVBfRkxBR1MgLU9uIC1DbjEgLUNyMiAkTk9BVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40IC4xLjMuNi4xLjIuMS4xIgorCitTVE9QQUdFTlQKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4yLjAgPSBPSUQ6IgorCitDSEVDS0NPVU5UIDAgIi4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0tDT1VOVCAwICIuMS4zLjYuMS4yLjEuMS41LjAiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWQ0MjkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X3NpbXBsZQpAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIE1ENS9ub1ByaXYgb2YgLjEuMy42LjEuMi4xLjEuMy4wCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfTUQ1CisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorREVGQVVUSFRZUEU9Ik1ENSIKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODViMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX3NpbXBsZQpAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIE1ENS9BRVMgb2YgLjEuMy42LjEuMi4xLjEuMy4wCisKK1NLSVBJRk5PVCBORVRTTk1QX0NBTl9ET19DUllQVE8KK1NLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgorU0tJUElGTk9UIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX01ENQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKK0RFRkFVVEhUWVBFPU1ENQorREVGUFJJVlRZUEU9QUVTCisuIC4vU3YzY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJFBSSVZURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDAwNDc4YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19zaW1wbGUKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYzIGdldCB1c2luZyBNRDUvREVTIG9mIC4xLjMuNi4xLjIuMS4xLjMuMAorCitTS0lQSUZOT1QgTkVUU05NUF9DQU5fRE9fQ1JZUFRPCitTS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfTUQ1CisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorREVGQVVUSFRZUEU9TUQ1CitERUZQUklWVFlQRT1ERVMKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkUFJJVlRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgwYjdmNGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX3NpbXBsZQpAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIFNIQS9ub1ByaXYgb2YgLjEuMy42LjEuMi4xLjEuMy4wCisKK1NLSVBJRk5PVCBORVRTTk1QX0NBTl9ET19DUllQVE8KKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgdGVtcGxhdGVTSEEgdXNlcgorREVGQVVUSFRZUEU9IlNIQSIKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMDFhNGVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX3NpbXBsZQpAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIFNIQS9ERVMgb2YgLjEuMy42LjEuMi4xLjEuMy4wCisKK1NLSVBJRk5PVCBORVRTTk1QX0NBTl9ET19DUllQVE8KK1NLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9ERVMKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgdGVtcGxhdGVTSEEgdXNlcgorREVGQVVUSFRZUEU9IlNIQSIKK0RFRlBSSVZUWVBFPSJERVMiCisuIC4vU3YzY29uZmlnCisKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLUktd2luRXh0RExMIgorU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkUFJJVlRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjFjZGFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX3NpbXBsZQpAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIFNIQS9BRVMgb2YgLjEuMy42LjEuMi4xLjEuMy4wCisKK1NLSVBJRk5PVCBORVRTTk1QX0NBTl9ET19DUllQVE8KK1NLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgorU0tJUElGTk9UIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIHRlbXBsYXRlU0hBIHVzZXIKK0RFRlBSSVZUWVBFPSJBRVMiCitERUZBVVRIVFlQRT0iU0hBIgorLiAuL1N2M2NvbmZpZworCitBR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC1JLXdpbkV4dERMTCIKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJFBSSVZURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI3c25tcHYzRGVmYXVsdHNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI3c25tcHYzRGVmYXVsdHNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYmY1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjdzbm1wdjNEZWZhdWx0c19zaW1wbGUKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYzIGdldCB1c2luZyBkZWZhdWx0IGNvbmZpZyBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKKworU0tJUElGTk9UIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTworU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCitTS0lQSUZOT1QgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgdGVtcGxhdGVTSEEgdXNlcgorREVGUFJJVlRZUEU9IkFFUyIKK0RFRkFVVEhUWVBFPSJTSEEiCisuIC4vU3YzY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ09ORklHQVBQIGRlZlZlcnNpb24gMworQ09ORklHQVBQIGRlZlByaXZUeXBlIEFFUworQ09ORklHQVBQIGRlZkF1dGhUeXBlIFNIQQorQ09ORklHQVBQIGRlZkNvbnRleHQgXCJcIgorQ09ORklHQVBQIGRlZkF1dGhQYXNzUGhyYXNlIGluaXRpYWxfdGVzdF9wYXNzX2F1dGgKK0NPTkZJR0FQUCBkZWZQcml2UGFzc1BocmFzZSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoCitDT05GSUdBUFAgZGVmU2VjdXJpdHlMZXZlbCBhdXRoUHJpdgorQ09ORklHQVBQIGRlZlNlY3VyaXR5TmFtZSBpbml0aWFsCisKKyMgbWFrZSBzdXJlIHRoYXQgdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24gdG9rZW5zIHByb3Blcmx5IHNldCB0aGluZ3MgdXAgc28gdGhhdAorIyBubyBmbGFncyBhcmUgbmVlZGVkCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZGE4YTEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgZm9yIGZhaWx1cmUgb2YgU05NUHYzIGdldCB1c2luZyB1bmtub3duIHVzZXIuCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLWwgbmFucCAtdSB1bmtub3dudXNlciAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICJVbmtub3duIHVzZXIgbmFtZSIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZWFhZTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgYWdlbnQgVVNNIHVzZXIgbWFuYWdlbWVudCB3aXRoIHNubXB1c20KKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorU0tJUElGTk9UIFVTSU5HX1NOTVBWM19VU01VU0VSX01PRFVMRQorU0tJUElGTk9UIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTworU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFNOTVB2MyBVU00gYWdlbnQgY29uZmlndXJhdGlvbgorREVGU0VDVVJJVFlMRVZFTD1hdXRoUHJpdgorLiAuL1N2M3VzbWNvbmZpZ2FnZW50CisKKyMgdGVzdCB1c2VyCitORVdVU0VSPW5ld3Rlc3R1c2VyCitORVdBVVRIUEFTUz1uZXdhdXRocGFzcworTkVXUFJJVlBBU1M9bmV3cHJpdnBhc3MKK05FV0FVVEhQUklWUEFTUz1uZXdhdXRocHJpdnBhc3MKKworIyBjb25maWd1cmUgYWdlbnQKK0NPTkZJR0FHRU5UIHJ3dXNlciAkTkVXVVNFUgorCisjIFN0YXJ0IHRoZSBhZ2VudAorU1RBUlRBR0VOVAorCisjIyB1c21Vc2VyVGFibGUgbWFuYWdlbWVudAorCisjIyAxKSBjcmVhdGUsIGNsb25lLCB0ZXN0LCBkZWxldGUKKworIyBjcmVhdGUgbmV3ICh2YW5pbGxhKSB1c2VyCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjcmVhdGUgJE5FV1VTRVIiCitDSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIgorCisjIGNsb25lCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjbG9uZUZyb20gJE5FV1VTRVIgJFRFU1RQUklWVVNFUiIKK0NIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNsb25lZCIKKworIyB0ZXN0IChhdXRoUHJpdikKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRURVNUQVVUSFBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRURVNUUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisjIGRlbGV0ZSAKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGRlbGV0ZSAkTkVXVVNFUiIKK0NIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQiCisKKyMjIDIpIGNyZWF0ZSB3LyBjbG9uZSwgcGFzc3dkIChhdXRoKSwgcGFzc3dkIChwcml2KSwgdGVzdCAoYXV0aFByaXYrYXV0aE5vUHJpdikKKworIyBjcmVhdGUrY2xvbmUgdGVtcGxhdGUgdXNlcgorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgY3JlYXRlICRORVdVU0VSICRURVNUUFJJVlVTRVIyIgorQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgY3JlYXRlZCIKKworIyBjaGFuZ2UgYXV0aCBwYXNzcGhyYXNlIG9mIG5ldyB1c2VyCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgLUNhICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRURVNUQVVUSFBBU1MyICRORVdBVVRIUEFTUyAkTkVXVVNFUiIKK0NIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCisKKyMgY2hhbmdlIHByaXYgcGFzc3BocmFzZSBvZiBuZXcgdXNlcgorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTIC1DeCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkVEVTVFBSSVZQQVNTMiAkTkVXUFJJVlBBU1MgJE5FV1VTRVIiCitDSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgorCisjIHRlc3QgKGF1dGhOb1ByaXYpCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFucCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworIyB0ZXN0IChhdXRoUHJpdikKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV1BSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworIyMgMykgcGFzc3dkIChwcml2KSwgcGFzc3dkIChhdXRoK3ByaXYpLCB0ZXN0CisKKyMgY2hhbmdlIHByaXYgcGFzc3BocmFzZSAodG8gYXV0aCBwYXNzcGhyYXNlKSBieSB0aGUgdXNlciBoaW1zZWxmCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV1BSSVZQQVNTIC1DeCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkTkVXUFJJVlBBU1MgJE5FV0FVVEhQQVNTIgorQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKKworIyBjaGFuZ2UgYm90aCBwYXNzcGhyYXNlcyBhdCBvbmNlCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV0FVVEhQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRORVdBVVRIUEFTUyAkTkVXQVVUSFBSSVZQQVNTIgorQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKKworIyB0ZXN0IChhdXRoUHJpdikKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUFJJVlBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdBVVRIUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisjIyA1KSBwZXJzaXN0ZW5jeSBJOiByZWNvbmZpZ3VyZSAoU0lHSFVQKSwgcmUtdGVzdAorCitpZiBJU0RFRklORUQgSEFWRV9TSUdIVVA7IHRoZW4KKworSFVQQUdFTlQKK0RFTEFZCisKKyMgdGVzdCAoYXV0aFByaXYpCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBSSVZQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXQVVUSFBSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworIyMgNSkgcGVyc2lzdGVuY3kgSUk6IHN0b3AsIHN0YXJ0LCByZS10ZXN0CisKK1NUT1BBR0VOVAorREVMQVkKKyMgbWFrZSBzdXJlIGl0IHBpY2tzIHVwIHBlcnNpc3RlbnQgY29uZmlnIGFuZCB1c2VzIGEgbmV3IGxvZ2ZpbGUKK1NOTVBDT05GUEFUSD0iJHtTTk1QX1RNUERJUn0ke1NOTVBfRU5WX1NFUEFSQVRPUn0ke1NOTVBfVE1QX1BFUlNJU1RFTlRESVJ9IgorZXhwb3J0IFNOTVBDT05GUEFUSAorU05NUF9DT05GSUdfRklMRT0iZG9lcy1ub3QtZXhpc3QiCitTTk1QX1NOTVBEX0xPR19GSUxFPSR7U05NUF9UTVBESVJ9L3NubXBkMi5sb2cKK1NUQVJUQUdFTlQKKworIyB0ZXN0IChhdXRoUHJpdikKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUFJJVlBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdBVVRIUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitmaQorCisjIyBzdG9wIGFnZW50IGFuZCBmaW5pc2gKK1NUT1BBR0VOVAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3YWFiNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfc2ltcGxlCkBAIC0wLDAgKzEsMTI2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgc25tcHRyYXBkIFVTTSB1c2VyIG1hbmFnZW1lbnQgd2l0aCBzbm1wdXNtCisKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19TTk1QVjNfVVNNVVNFUl9NT0RVTEUKK1NLSVBJRiAgICBORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWAorU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGICAgIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorU0tJUElGTk9UIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTworU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIGNvbmZpZ3VyZSBBZ2VudFggc29ja2V0CitpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdOyB0aGVuCisgIEFHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCisgIFRSQVBEX0ZMQUdTPSIkVFJBUERfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCitlbHNlCisgIEFHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKKyAgVFJBUERfRkxBR1M9IiRUUkFQRF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgorZmkKKworIyBzdGFuZGFyZCBTTk1QdjMgVVNNIGFnZW50IGNvbmZpZ3VyYXRpb24KK0RFRlNFQ1VSSVRZTEVWRUw9YXV0aFByaXYKKy4gLi9TdjN1c21jb25maWdhZ2VudAorCisjIHNhdmUgYWdlbnQgYWNjZXNzCitBR0VOVF9URVNUQVVUSEFSR1M9JFRFU1RBVVRIQVJHUworQUdFTlRfVEVTVFBSSVZBUkdTPSRURVNUUFJJVkFSR1MKKworIyBjb25maWd1cmUgYWdlbnQgYXMgQWdlbnRYIG1hc3RlcgorQ09ORklHQUdFTlQgbWFzdGVyIGFnZW50eAorCisjIFN0YXJ0IHRoZSBtYXN0ZXIgYWdlbnQKK1NUQVJUQUdFTlQKKworIyBzdGFuZGFyZCBTTk1QdjMgVVNNIHNubXB0cmFwZCBjb25maWd1cmF0aW9uCisuIC4vU3YzdXNtY29uZmlndHJhcGQKKworIyBjb25maWd1cmUgc25tcHRyYXBkCitORVdBVVRIS0VZPTB4NzQ1OGVhZDdhMGI1YTc1M2UyMWJmY2I4N2Y2Yzk4MDNlYmVmNjhjZgorTkVXUFJJVktFWT0weDk4ZTI2OTZkMWNmMzRkOTA0ZGZjYWU3NmJmMDFjNDczCitORVdVU0VSPW5ld3Rlc3R1c2VyCitORVdBVVRIUEFTUz1uZXdhdXRocGFzcworTkVXUFJJVlBBU1M9bmV3cHJpdnBhc3MKK05FV1VTRVIyPW5ld3Rlc3R1c2VyX3ZhbmlsbGEKK0NPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkTkVXVVNFUiBhdXRoCisKKyMgc3RhcnQgc25tcHRyYXBkCitTVEFSVFRSQVBECisKKyMgZGVsYXkgdG8gbGV0IGl0IGNvbm5lY3QgYW5kIHJlZ2lzdGVyIGFsbCBNSUJzCitERUxBWQorCisjIyB2ZXJpZnkgc25tcHRyYXBkIHVzbVVzZXJUYWJsZSBtYW5hZ2VtZW50CisKK1NOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTPSItbiBzbm1wdHJhcGQgLUNFICRUUkFQRF9FTkdJTkVJRCIKKworIyMgMSkgY3JlYXRlLCBjbG9uZSwgcGFzc3dkIGF1dGgsIHBhc3N3ZCBwcml2LCB0ZXN0CisKKyMgY3JlYXRlIHZhbmlsbGEgdXNlcgorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVEFVVEhBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNyZWF0ZSAkTkVXVVNFUjIiCitDSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIgorCisjIGNsb25lIHRlbXBsYXRlIHVzZXIKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RBVVRIQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjcmVhdGUgJE5FV1VTRVIgJFRFU1RQUklWVVNFUiIKK0NIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQiCisKKyMgY2hhbmdlIGF1dGggcGFzc3BocmFzZSBvZiBuZXcgdXNlcgorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVEFVVEhBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAtQ2EgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJFRFU1RBVVRIUEFTUyAkTkVXQVVUSFBBU1MgJE5FV1VTRVIiCitDSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgorCisjIGNoYW5nZSBwcml2IHBhc3NwaHJhc2Ugb2YgbmV3IHVzZXIKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RQUklWQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgLUN4ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRURVNUUFJJVlBBU1MgJE5FV1BSSVZQQVNTICRORVdVU0VSIgorQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKKworIyB0ZXN0IChhbnApCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhbnAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIHJlY2VpdmVkX2luZm9ybV9hbnAiCitERUxBWQorQ0hFQ0tUUkFQRE9SRElFICJyZWNlaXZlZF9pbmZvcm1fYW5wIgorCisjIHRlc3QgKGFwKQorQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV1BSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FwIgorREVMQVkKK0NIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FwIgorCisjIyAyKSBjaGFuZ2UgbG9jYWxpemVkIGF1dGgga2V5LCB0ZXN0LCBjaGFuZ2UgbG9jYWxpemVkIHByaXYga2V5LCB0ZXN0CisKKyMgY2hhbmdlIGxvY2FsaXplZCBhdXRoIGtleQorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVEFVVEhBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAtQ2EgLUNrICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRORVdBVVRIUEFTUyAkTkVXQVVUSEtFWSAkTkVXVVNFUiIKK0NIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCisKKyMgdGVzdCAoYW5wKQorQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYW5wIC1hICRERUZBVVRIVFlQRSAtM2sgJE5FV0FVVEhLRVkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyByZWNlaXZlZF9pbmZvcm1fYW5wMiIKK0RFTEFZCitDSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hbnAyIgorCisjIGNoYW5nZSBsb2NhbGl6ZWQgcHJpdiBrZXkKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RQUklWQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgLUN4IC1DayAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkTkVXUFJJVlBBU1MgJE5FV1BSSVZLRVkgJE5FV1VTRVIiCitDSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgorCisjIHRlc3QgKGFwKQorQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC0zayAkTkVXQVVUSEtFWSAteCAkREVGUFJJVlRZUEUgLTNLICRORVdQUklWS0VZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FwMiIKK0RFTEFZCitDSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hcDIiCisKKyMjIDMpIHBlcnNpc3RlbmN5IEk6IHJlY29uZmlndXJlIChTSUdIVVApLCByZS10ZXN0CisKKyMgcmVjb25maWd1cmUgc25tcHRyYXBkCitIVVBUUkFQRAorCisjIHRlc3QgKGFwKQorQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC0zayAkTkVXQVVUSEtFWSAteCAkREVGUFJJVlRZUEUgLTNLICRORVdQUklWS0VZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FwMyIKK0RFTEFZCitDSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hcDMiCisKKyMjIHN0b3AgZGFlbW9ucyBhbmQgZmluaXNoCitTVE9QVFJBUEQKK1NUT1BBR0VOVAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Y2I1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fc2ltcGxlCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworU0tJUElGTk9UIE5FVFNOTVBfU0VDTU9EX1VTTQorCitERUZTRUNVUklUWUxFVkVMPW5vQXV0aE5vUHJpdgorCitIRUFERVIgIlNOTVB2MyBpbmZvcm1zIChub0F1dGhOb1ByaXYpIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzIgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworQ09ORklHVFJBUEQgY3JlYXRlVXNlciB0ZXN0dXNlcgorQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nIHRlc3R1c2VyICRERUZTRUNVUklUWUxFVkVMCitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgdGVzdHVzZXIgLWwgbmFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIHJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgInJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxODU3NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfc2ltcGxlCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworU0tJUElGTk9UIE5FVFNOTVBfU0VDTU9EX1VTTQorCitERUZTRUNVUklUWUxFVkVMPWF1dGhOb1ByaXYKKworSEVBREVSICJTTk1QdjMgaW5mb3JtcyAoYXV0aE5vUHJpdikgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMiCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisuIC4vU3YzdXNtY29uZmlndHJhcGQKK0NPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkVEVTVEFVVEhVU0VSICRERUZTRUNVUklUWUxFVkVMCitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kICRURVNUQVVUSEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyByZWNlaXZlZF9pbmZvcm1fJERFRlNFQ1VSSVRZTEVWRUwiCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEICJyZWNlaXZlZF9pbmZvcm1fJERFRlNFQ1VSSVRZTEVWRUwiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZjQ3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X3NpbXBsZQpAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0RFRlNFQ1VSSVRZTEVWRUw9YXV0aFByaXYKKworSEVBREVSICJTTk1QdjMgaW5mb3JtcyAoYXV0aFByaXYpIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzIgorCitTS0lQSUZOT1QgTkVUU05NUF9DQU5fRE9fQ1JZUFRPCitTS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKKworIworIyBCZWdpbiB0ZXN0CisjCisKKy4gLi9TdjN1c21jb25maWd0cmFwZAorQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUUFJJVlVTRVIgJERFRlNFQ1VSSVRZTEVWRUwKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIHJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgInJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3YTRhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyB0cmFwcyByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scworCisjU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKK1NLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworQ1JFQVRFVVNFUkVOR0lORUlEPTB4ODAwMDFmODg4MDJiM2QwZTA2YmJkZjQzMjEKKy4gLi9TdjN1c21jb25maWd0cmFwZAorQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUTk9BVVRIVVNFUiBub0F1dGhOb1ByaXYKK0NPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkVEVTVEFVVEhVU0VSIGF1dGhOb1ByaXYKK0NPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkVEVTVFBSSVZVU0VSIGF1dGhQcml2CitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworQ0FQVFVSRSAic25tcHRyYXAgLWQgLWUgJENSRUFURVVTRVJFTkdJTkVJRCAkVEVTVE5PQVVUSEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyByZWNlaXZlZF90cmFwX25hbnAiCitERUxBWQorQ0FQVFVSRSAic25tcHRyYXAgLWQgLWUgJENSRUFURVVTRVJFTkdJTkVJRCAkVEVTVEFVVEhBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgcmVjZWl2ZWRfdHJhcF9hbnAiCitERUxBWQorQ0FQVFVSRSAic25tcHRyYXAgLWQgLWUgJENSRUFURVVTRVJFTkdJTkVJRCAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgcmVjZWl2ZWRfdHJhcF9hcCIKK0RFTEFZCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEICJyZWNlaXZlZF90cmFwX25hbnAiCitDSEVDS1RSQVBEICJyZWNlaXZlZF90cmFwX2FucCIKK0NIRUNLVFJBUEQgInJlY2VpdmVkX3RyYXBfYXAiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxYmU2YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX3NpbXBsZQpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjJjIHRyYXBzIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX01JQklJX1ZBQ01fQ09ORl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKK0NPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHRlc3Rjb21tdW5pdHkKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworVFJBUERfRkxBR1M9IiRUUkFQRF9GTEFHUyAtT24iCisKK1NUQVJUVFJBUEQKKworQ0FQVFVSRSAic25tcHRyYXAgLWQgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIGJsYWgiCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEICIuMS4zLjYuMS42LjMuMS4xLjQuMS4wID0gT0lEOiAuMS4zLjYuMS42LjMuMS4xLjUuMSIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwOGRmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fc2ltcGxlCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MmMgaW5mb3JtcyByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scworCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9WQUNNX0NPTkZfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyB0ZXN0Y29tbXVuaXR5CitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyBibGFoIgorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRCAiUmVjZWl2ZWQiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiMjE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZQpAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBzbm1wdjEgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQgQVBJCisKK1NLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQorU0tJUElGTk9UIEhBVkVfU0lHSFVQCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKKy4gLi9TdjNjb25maWcKK0NPTkZJR0FHRU5UIHRyYXBzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYworCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitBR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC1EZXhhbXBsZSxoZWFkZXJfZ2VuZXJpYyxhZGRfdHJhcCIKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS4yMDIxLjI1NC43LjAgaSAxIgorCitTVE9QQUdFTlQKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgIkVudGVycHJpc2UgU3BlY2lmaWMgVHJhcCAoOTkpIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViNjkwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9zaW1wbGUKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgc25tcHYyYyB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCBBUEkKKworU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKKy4gLi9TdjNjb25maWcKK0NPTkZJR0FHRU5UIHRyYXAyc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKK0NPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYworQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAorCitTVEFSVFRSQVBECisKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCitTVEFSVEFHRU5UCisKKyNERUxBWQorQ0FQVFVSRSAic25tcHNldCAtT24gLXQgMyAtciAwICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuMjAyMS4yNTQuOC4wIGkgMSIKKworU1RPUEFHRU5UCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NWFnZW50djFtaW50cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTFjMGUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIHNubXB2MSB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCB3aXRob3V0IG5vdGlmaWNhdGlvbiBtaWIgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorLiAuL1N2M2NvbmZpZworQ09ORklHQUdFTlQgdHJhcHNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCisjIGluaXRpYWxpemUgb25seSB0aGUgZXhhbXBsZSBtaWIsIGFuZCBub3QgdGhlIG5vdGlmaWNhdGlvbiBtaWIgc3R1ZmYKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLURleGFtcGxlLGhlYWRlcl9nZW5lcmljLGFkZF90cmFwLG1pYl9pbml0LGNhbGxiYWNrIC1JIGV4YW1wbGUsdXNtVXNlcix1c21Db25mLHZhY21fdmFycyIKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS4yMDIxLjI1NC43LjAgaSAxIgorCitTVE9QQUdFTlQKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgIkVudGVycHJpc2UgU3BlY2lmaWMgVHJhcCAoOTkpIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjN2EyMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9zaW1wbGUKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgc25tcHYyYyB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCB3aXRob3V0IG5vdGlmaWNhdGlvbiBtaWIgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorLiAuL1N2M2NvbmZpZworQ09ORklHQUdFTlQgdHJhcDJzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYworQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworIyBpbml0aWFsaXplIG9ubHkgdGhlIGV4YW1wbGUgbWliLCBhbmQgbm90IHRoZSBub3RpZmljYXRpb24gbWliIHN0dWZmCitBR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC1EZXhhbXBsZSxoZWFkZXJfZ2VuZXJpYyxhZGRfdHJhcCxtaWJfaW5pdCxjYWxsYmFjayAtSSBleGFtcGxlLHVzbVVzZXIsdXNtQ29uZix2YWNtX3ZhcnMiCitTVEFSVEFHRU5UCisKKyNERUxBWQorQ0FQVFVSRSAic25tcHNldCAtT24gLXQgMyAtciAwICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuMjAyMS4yNTQuOC4wIGkgMSIKKworU1RPUEFHRU5UCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQzOTg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworU0tJUElGTk9UIE5FVFNOTVBfU0VDTU9EX1VTTQorCitIRUFERVIgc25tcHRyYXBkIGRpc2NhcmRzIG9mIHVuYXV0aG9yaXplZCBub3RpZmljYXRpb24gdHlwZXMgCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitDT05GSUdUUkFQRCBjcmVhdGVVc2VyIHRlc3R1c2VyCitDT05GSUdUUkFQRCBhdXRodXNlciBsb2cgdGVzdHVzZXIgbm9BdXRoTm9Qcml2IC4xLjMuNi4xLjYuMy4xLjEuNS4yCitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgdGVzdHVzZXIgLWwgbmFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBibGFoIgorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRENPVU5UIDAgImNvbGRTdGFydCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhlZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworU0tJUElGTk9UIE5FVFNOTVBfU0VDTU9EX1VTTQorCitIRUFERVIgc25tcHRyYXBkIGRpc2NhcmRzIG9mIGluY29ycmVjdCB2aWV3IHR5cGVzIAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworQ09ORklHVFJBUEQgY3JlYXRlVXNlciB0ZXN0dXNlcgorQ09ORklHVFJBUEQgYXV0aHVzZXIgZXhlY3V0ZSB0ZXN0dXNlciBub0F1dGhOb1ByaXYKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSB0ZXN0dXNlciAtbCBuYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGJsYWgiCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEQ09VTlQgMCAiY29sZFN0YXJ0IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTJmYzEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9zaW1wbGUKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKK0hFQURFUiBzbm1wdHJhcGQgYXV0aG9yaXphdGlvbiBmYWlsdXJlIG9mIG5vbiBhdXRob3JpemVkIHVzZXJzCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitDT05GSUdUUkFQRCBjcmVhdGVVc2VyIHRlc3R1c2VyCitDT05GSUdUUkFQRCBhdXRodXNlciBsb2cgdGVzdHVzZXIgbm9BdXRoTm9Qcml2CitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgbm90dGVzdHVzZXIgLWwgbmFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBibGFoIgorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRENPVU5UIDAgImNvbGRTdGFydCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2MzYzOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorLiAuL1N2MWNvbmZpZworIyBhZGQgaW4gYSB2MSB0cmFwIHNpbmsKK0NPTkZJR0FHRU5UIHRyYXBzaW5rICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIHB1YmxpYworQ09ORklHQUdFTlQgYXV0aHRyYXBlbmFibGUgMQorQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworU1RBUlRBR0VOVAorCisjIGdpdmUgdGhlIGFnZW50IG1vcmUgdGltZSB0byBzdGFydCB1cC4gIFdlIG9ubHkgd2FudCB0byBmaXJlIG9uZQorIyByZXF1ZXN0IChyZXRyaWVzID0gMCkgdG8gbWFrZSBzdXJlIG9ubHkgb25lIHRyYXAgaXMgc2VudC4KKyNERUxBWQorQ0FQVFVSRSAic25tcGdldCAtT24gLXIgMCAtdCA1ICRTTk1QX0ZMQUdTIC12IDEgLWMgd3Jvbmdjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRCAiQXV0aGVudGljYXRpb24gRmFpbHVyZSBUcmFwIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNkNWI5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUKQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL3NoCisKKyMgVGVzdGluZyB0aGlzIHNjcmlwdCBpcyBwb3NzaWJsZSBieSBydW5uaW5nIGUuZy4gdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKyMgc3JjZGlyPS96L3NvZnR3YXJlL25ldC1zbm1wL3RydW5rIGJ1aWxkZGlyPS96L3NvZnR3YXJlL25ldC1zbm1wL3RydW5rLW1pbmd3CisjIGNkICRidWlsZGRpci90ZXN0aW5nCisjIFRSQVBEX0ZMQUdTPSItRHNubXB0cmFwZCAtRHJ1bjpzaGVsbCIgJHNyY2Rpci90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4gJHNyY2Rpci90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlCisKKyMgImlubGluZSIgdHJhcCBoYW5kbGVyCitpZiBbICJ4JDEiID0gInh0cmFwaGFuZGxlIiBdOyB0aGVuCisgIGNhdCAtID4+IiQyIgorICBleGl0IDAKK2ZpCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitUUkFQSEFORExFX0xPR0ZJTEU9JHtTTk1QX1RNUERJUn0vdHJhcGhhbmRsZS5sb2cKKworSEVBREVSIHNubXB0cmFwZCB0cmFwaGFuZGxlOiBsYXVuY2hpbmcgZXh0ZXJuYWwgc2hlbGwgc2NyaXB0CisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRQorU0tJUElGTk9UIEhBVkVfU0lHSFVQCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitzbm1wX3ZlcnNpb249djJjCitURVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKKworIyBNYWtlIHRoZSBwYXRocyBvZiBhcmd1bWVudHMgJDAgYW5kICQxIGFic29sdXRlLgorTkVUU05NUERJUj0iYHB3ZGAiCitORVRTTk1QRElSPSJgZGlybmFtZSAke05FVFNOTVBESVJ9YCIKK05FVFNOTVBESVI9ImBkaXJuYW1lICR7TkVUU05NUERJUn1gIgorTkVUU05NUERJUj0iYGRpcm5hbWUgJHtORVRTTk1QRElSfWAiCitpZiBbICJgZWNobyAkMXxjdXQgLWMxYCIgPSAiLyIgXTsgdGhlbgorICB0cmFwaGFuZGxlX2FyZz0iJDEiCitlbHNlCisgIHRyYXBoYW5kbGVfYXJnPSIke05FVFNOTVBESVJ9LyQxIgorZmkKKworQ09ORklHVFJBUEQgW3NubXBdIHBlcnNpc3RlbnREaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKK0NPTkZJR1RSQVBEIFtzbm1wXSB0ZW1wRmlsZVBhdHRlcm4gL3RtcC9zbm1wZC10bXAtWFhYWFhYCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGV4ZWN1dGUgJFRFU1RDT01NVU5JVFkKK0NPTkZJR1RSQVBEIGRvTm90TG9nVHJhcHMgdHJ1ZQoraWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCisgICAgQ09ORklHVFJBUEQgdHJhcGhhbmRsZSBkZWZhdWx0ICRNU1lTX1NIIC1jICInIiAkdHJhcGhhbmRsZV9hcmcgdHJhcGhhbmRsZSAkVFJBUEhBTkRMRV9MT0dGSUxFICInIgorZWxzZQorICAgIENPTkZJR1RSQVBEIHRyYXBoYW5kbGUgZGVmYXVsdCAkdHJhcGhhbmRsZV9hcmcgdHJhcGhhbmRsZSAkVFJBUEhBTkRMRV9MT0dGSUxFCitmaQorQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAorCitTVEFSVFRSQVBECisKKyMjIDEpIHRlc3Qgbm90aWZpY2F0aW9uIGhhbmRsZXIKKworQ0FQVFVSRSAic25tcHRyYXAgLWQgLUNpIC10ICRTTk1QX1NMRUVQIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgaGFuZGxlZF9pbmZvcm1fJHNubXBfdmVyc2lvbiIKK0RFTEFZCitDSEVDS09SRElFICJoYW5kbGVkX2luZm9ybV8kc25tcF92ZXJzaW9uIiAkVFJBUEhBTkRMRV9MT0dGSUxFIAorCisjIyAyKSBwZXJzaXN0ZW5jeTogcmVjb25maWd1cmUgKFNJR0hVUCksIHJlLXRlc3QKKworSFVQVFJBUEQKK0NBUFRVUkUgInNubXB0cmFwIC1kIC1DaSAtdCAkU05NUF9TTEVFUCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIGhhbmRsZWRfaW5mb3JtMl8kc25tcF92ZXJzaW9uIgorREVMQVkKK0NIRUNLT1JESUUgImhhbmRsZWRfaW5mb3JtMl8kc25tcF92ZXJzaW9uIiAkVFJBUEhBTkRMRV9MT0dGSUxFCisKKyMjIHN0b3AKK1NUT1BUUkFQRAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzBkZWNmNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgJ3NubXB0cmFwZCBlbWJlZGRlZCBwZXJsIHN1cHBvcnQgKE5ldFNOTVA6OlRyYXBSZWNlaXZlciknCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIE5FVFNOTVBfRU1CRURERURfUEVSTAorU0tJUElGTk9UIEhBVkVfU0lHSFVQCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitzbm1wX3ZlcnNpb249djJjCitURVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKK1RFU1RPSUQ9LjEuMy42LjEuNi4zLjEuMS41LjEKK1RFU1RPSUQyPS4xLjMuNi4xLjYuMy4xLjEuNS4yCitWQVJPSUQ9LjEuMy42LjEuMi4xLjEuNC4wCitFTUJQRVJMX0xPR0ZJTEU9JHtTTk1QX1RNUERJUn0vZW1icGVybC5sb2cKKworIyBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gZnVsZmlsbCBhbGwgbGlicmFyeSBkZXBlbmRlbmNpZXMKK19sZF9saWJfcGF0aD0iJHtTTk1QX1VQRElSfS9zbm1wbGliLy5saWJzOiR7U05NUF9VUERJUn0vYWdlbnQvLmxpYnM6JHtTTk1QX1VQRElSfS9hZ2VudC9oZWxwZXJzLy5saWJzIgoraWYgWyB4JE9TVFlQRSA9IHhjeWd3aW4gXTsgdGhlbgorICBQQVRIPSIke19sZF9saWJfcGF0aH06JFBBVEgiCitmaQorCitlY2hvICJ1c2UgYmxpYiBxdygke1NOTVBfVVBESVJ9L3BlcmwpOyIgPiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmxfdHJhcGQucGwKK2VjaG8gInVzZSBOZXRTTk1QOjpUcmFwUmVjZWl2ZXI7IiA+PiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmxfdHJhcGQucGwKKworQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBleGVjdXRlICRURVNUQ09NTVVOSVRZCitDT05GSUdUUkFQRCBwZXJsSW5pdEZpbGUgJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsX3RyYXBkLnBsCitDT05GSUdUUkFQRCAncGVybCBzdWIgbXlfcmVjZWl2ZXIgeyBvcGVuIExPRywiPj4nJEVNQlBFUkxfTE9HRklMRSciOyBwcmludCBMT0cgImhhbmRsZWRfYnlfZW1icGVybFxcbiI7IGNsb3NlIExPRyB9OycKK0NPTkZJR1RSQVBEICdwZXJsIHN1YiBteV9yZWNlaXZlcjIgeyBvcGVuIExPRywiPj4nJEVNQlBFUkxfTE9HRklMRSciOyBwcmludCBMT0cgImhhbmRsZWRfYWdhaW5fYnlfZW1icGVybFxcbiI7IGNsb3NlIExPRyB9OycKK0NPTkZJR1RSQVBEICdwZXJsIE5ldFNOTVA6OlRyYXBSZWNlaXZlcjo6cmVnaXN0ZXIoIickVEVTVE9JRCciLCBcJm15X3JlY2VpdmVyKSB8fCB3YXJuICJyZWdpc3Rlcl9wZXJsX2hhbmRsZXJfZmFpbGVkIjsnCitDT05GSUdUUkFQRCAncGVybCBOZXRTTk1QOjpUcmFwUmVjZWl2ZXI6OnJlZ2lzdGVyKCInJFRFU1RPSUQyJyIsIFwmbXlfcmVjZWl2ZXIyKSB8fCB3YXJuICJyZWdpc3Rlcl9zZWNvbmRfcGVybF9oYW5kbGVyX2ZhaWxlZCI7JworQ09ORklHVFJBUEQgJ3BlcmwgcHJpbnQgU1RERVJSICJyZWdpc3RlcmVkX3BlcmxfaGFuZGxlcl9va1xcbiI7JworQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAorCitTVEFSVFRSQVBECisKKyMjIDEpIHRyaWdnZXIgZW1iZWRkZWQgcGVybCBub3RpZmljYXRpb24gaGFuZGxlcgorCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAkVEVTVE9JRCAkVkFST0lEIHMgaGFuZGxlZF90cmFwXyRzbm1wX3ZlcnNpb24iCisKKyMjIDIpIHBlcnNpc3RlbmN5OiByZWNvbmZpZ3VyZSAoU0lHSFVQKSwgcmUtdHJpZ2dlcgorCitIVVBUUkFQRAorQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgJFRFU1RPSUQyICRWQVJPSUQgcyBoYW5kbGVkX3RyYXAyXyRzbm1wX3ZlcnNpb24iCisKKyMjIHN0b3AKK1NUT1BUUkFQRAorCisKK0NIRUNLT1JESUUgImhhbmRsZWRfYnlfZW1icGVybCIgICAgICAgJEVNQlBFUkxfTE9HRklMRQorQ0hFQ0tPUkRJRSAiaGFuZGxlZF9hZ2Fpbl9ieV9lbWJwZXJsIiAkRU1CUEVSTF9MT0dGSUxFCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjBhM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZQpAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAnc25tcGQgZW1iZWRkZWQgcGVybCBzdXBwb3J0ICh1c2luZyBOZXRTTk1QOjphZ2VudCknCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIE5FVFNOTVBfRU1CRURERURfUEVSTAorU0tJUElGTk9UIEhBVkVfU0lHSFVQCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitzbm1wX3ZlcnNpb249djJjCitURVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKKy4gLi9TdjJjY29uZmlnCisKK1RFU1RPSUQ9LjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5LjEuMAorVEVTVE9JRDI9LjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5LjIuMAorRU1CUEVSTF9BR0VOVD0ke1NOTVBfVE1QRElSfS9oZWxsby5wbAorY2F0ID4kRU1CUEVSTF9BR0VOVCA8PEVORAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIyBtaW5pbWFsIGVtYmVkZGVkIHBlcmwgYWdlbnQKKworbXkgXCRyZWdhdCA9ICcuMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTknOyAjIG5ldFNubXBQbGF5UGVuCitteSBcJG15b2lkID0gXCRyZWdhdCAuICIuMS4wIjsgIyB0aGUgImhlbGxvIHdvcmxkIiBPSUQKK215IFwkbXlvaWQyID0gXCRyZWdhdCAuICIuMi4wIjsgIyB0aGUgImhlbGxvIGFnYWluIHdvcmxkIiBPSUQKKwordXNlIE5ldFNOTVA6Ok9JRCBxdyg6YWxsKTsKK3VzZSBOZXRTTk1QOjphZ2VudCBxdyg6YWxsKTsKK3VzZSBOZXRTTk1QOjpBU04gcXcoOmFsbCk7Cit1c2UgU05NUDsKKworbXkgXCRyZWdvaWQgPSBuZXcgTmV0U05NUDo6T0lEKFwkcmVnYXQpOworXCRhZ2VudC0+cmVnaXN0ZXIoImhlbGxvIiwgXCRyZWdvaWQsIFwmbXlfc25tcF9oYW5kbGVyKTsKKworc3ViIG15X3NubXBfaGFuZGxlciB7CisgIG15IChcJGhhbmRsZXIsIFwkcmVnaXN0cmF0aW9uX2luZm8sIFwkcmVxdWVzdF9pbmZvLCBcJHJlcXVlc3RzKSA9IEBfOworICBmb3IobXkgXCRyZXF1ZXN0ID0gXCRyZXF1ZXN0czsgXCRyZXF1ZXN0OyBcJHJlcXVlc3QgPSBcJHJlcXVlc3QtPm5leHQoKSkgeworICAgIGlmIChcJHJlcXVlc3RfaW5mby0+Z2V0TW9kZSgpID09IE1PREVfR0VUKSB7CisgICAgICBpZiAoXCRyZXF1ZXN0LT5nZXRPSUQoKSA9PSBuZXcgTmV0U05NUDo6T0lEKFwkbXlvaWQpKSB7CisgICAgICAgIFwkcmVxdWVzdC0+c2V0VmFsdWUoQVNOX09DVEVUX1NUUiwgImhlbGxvIHdvcmxkIik7CisgICAgICAgIGxhc3Q7CisgICAgICB9IGVsc2lmIChcJHJlcXVlc3QtPmdldE9JRCgpID09IG5ldyBOZXRTTk1QOjpPSUQoXCRteW9pZDIpKSB7CisgICAgICAgIFwkcmVxdWVzdC0+c2V0VmFsdWUoQVNOX09DVEVUX1NUUiwgImhlbGxvIGFnYWluIHdvcmxkIik7CisgICAgICAgIGxhc3Q7CisgICAgICB9CisgICAgfQorICB9Cit9CitFTkQKKworZWNobyAidXNlIGJsaWIgcXcoJHtTTk1QX1VQRElSfS9wZXJsKTsiID4gJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsLnBsCitlY2hvICd1c2UgTmV0U05NUDo6YWdlbnQ7JyA+PiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmwucGwKK2VjaG8gJyRhZ2VudCA9IG5ldyBOZXRTTk1QOjphZ2VudCgnIidkb250X2luaXRfYWdlbnQnID0+IDEsICdkb250X2luaXRfbGliJyA9PiAxKTsiID4+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybC5wbAorCitDT05GSUdBR0VOVCBwZXJsSW5pdEZpbGUgJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsLnBsCitDT05GSUdBR0VOVCAicGVybCBkbyAnJEVNQlBFUkxfQUdFTlQnOyIKK0NPTkZJR0FHRU5UICdwZXJsIHByaW50IFNUREVSUiAicmVnaXN0ZXJlZF9wZXJsX2FnZW50X29rIjsnCisKK1NUQVJUQUdFTlQKKworIyMgMSkgU05NUCBHRVQgYWdhaW5zdCBlbWJlZGRlZCBwZXJsIG1pYiBtb2R1bGUKK0NBUFRVUkUgInNubXBnZXQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkVEVTVE9JRCIKK0NIRUNLICJoZWxsbyB3b3JsZCIKKworIyMgMikgcGVyc2lzdGVuY3k6IHJlY29uZmlndXJlIChIVVApLCByZS10ZXN0CitIVVBBR0VOVAorQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEMiIKK0NIRUNLICJoZWxsbyBhZ2FpbiB3b3JsZCIKKworIyMgc3RvcAorU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlYTgyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NoX3NpbXBsZQpAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKworIyBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvYnVncy8yNTc1LworCitwd2QKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAiZXh0ZW5kaW5nIGFnZW50IGZ1bmN0aW9uYWxpdHkgd2l0aCBleHRlbmQgYW5kIGFuIGV4dGVybmFsIHNoZWxsIHNjcmlwdCIKKworWyAieCRPU1RZUEUiID0geG1zeXMgLWEgIngkTVNZU19TSCIgPSB4IF0gJiYgU0tJUCAiXCRNU1lTX1NIIGhhcyBub3QgYmVlbiBzZXQiCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19BR0VOVF9FWFRFTkRfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCisKKyMgbWFrZSBzdXJlIHNubXBnZXQgY2FuIGJlIGV4ZWN1dGVkCitTTk1QR0VUPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcGdldCIKK1sgLXggIiRTTk1QR0VUIiBdIHx8IFNLSVAgc25tcGdldCBub3QgY29tcGlsZWQKK1NOTVBTRVQ9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcHNldCIKK1sgLXggIiRTTk1QU0VUIiBdIHx8IFNLSVAgc25tcHNldCBub3QgY29tcGlsZWQKKworc25tcF93cml0ZV9hY2Nlc3M9J2FsbCcKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorLiAuL1N2MmNjb25maWcKKworIworIyBCZWdpbiB0ZXN0CisjCisKK29pZD0uMS4zLjYuMS40LjEuODA3Mi4xLjMuMgoraW5kZXg9JyJ0d29fbnVtYmVycyInCitlY2hvX3R3b19udW1iZXJzPSRTTk1QX1RNUERJUi9lY2hvX3R3b19udW1iZXJzCitudW1iZXIxPTExMQorbnVtYmVyMj0yMjIKK3JtIC1mICRlY2hvX3R3b19udW1iZXJzCitjYXQgPDxFT0YgPiRlY2hvX3R3b19udW1iZXJzCisjISQoaWYgWyAieCRNU1lTX1NIIiAhPSB4IF07IHRoZW4gZWNobyAiJE1TWVNfU0giOyBlbHNlIGVjaG8gL2Jpbi9zaDsgZmkpCitlY2hvICRudW1iZXIxCitlY2hvICRudW1iZXIyCitFT0YKK2NobW9kIGEreCAkZWNob190d29fbnVtYmVycworQ09ORklHQUdFTlQgZXh0ZW5kICRpbmRleCAkZWNob190d29fbnVtYmVycworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgIiRTTk1QU0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgdmVyc2lvblVwZGF0ZUNvbmZpZy4wIGkgMSIKK0NIRUNLT1JESUUgInZlcnNpb25VcGRhdGVDb25maWcuMCA9IElOVEVHRVI6IDEiCisKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJHtvaWR9LjMuMS4xLiRpbmRleCIKK0NIRUNLT1JESUUgIlNUUklORzogJHtudW1iZXIxfSIKKworQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAke29pZH0uMy4xLjIuJGluZGV4IgorQ0hFQ0tPUkRJRSAiU1RSSU5HOiAke251bWJlcjF9IgorCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICR7b2lkfS40LjEuMi4kaW5kZXguMSIKK0NIRUNLT1JESUUgIlNUUklORzogJHtudW1iZXIxfSIKKworQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAke29pZH0uMy4xLjMuJGluZGV4IgorQ0hFQ0tPUkRJRSAiSU5URUdFUjogMiIKKworQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAke29pZH0uMy4xLjQuJGluZGV4IgorQ0hFQ0tPUkRJRSAiSU5URUdFUjogMCIKKworU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MTkyNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgImV4dGVuZGluZyBhZ2VudCBmdW5jdGlvbmFsaXR5IHdpdGggZXh0ZW5kIgorCitbICJ4JE9TVFlQRSIgPSB4bXN5cyAtYSAieCRNU1lTX1NIIiA9IHggXSAmJiBTS0lQICJcJE1TWVNfU0ggaGFzIG5vdCBiZWVuIHNldCIKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX0FHRU5UX0VYVEVORF9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUKKworIyBtYWtlIHN1cmUgc25tcGdldCBjYW4gYmUgZXhlY3V0ZWQKK1NOTVBHRVQ9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wZ2V0IgorWyAteCAiJFNOTVBHRVQiIF0gfHwgU0tJUCBzbm1wZ2V0IG5vdCBjb21waWxlZAorCitzbm1wX3ZlcnNpb249djJjCitURVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKKy4gLi9TdjJjY29uZmlnCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitpbmRleD0nImhlbGxvIicKK2lmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgorICAgIENPTkZJR0FHRU5UIGV4dGVuZCBoZWxsbyAkTVNZU19TSCAtYyAiJyIgZWNobyBoZWxsb193b3JsZCAiJyIKK2Vsc2UKKyAgICBDT05GSUdBR0VOVCBleHRlbmQgaGVsbG8gL3Vzci9iaW4vZW52IGVjaG8gaGVsbG9fd29ybGQKK2ZpCisKK1NUQVJUQUdFTlQKKworIyBORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZE91dHB1dDFMaW5lLiJoZWxsbyIgPSBTVFJJTkc6ICJoZWxsb193b3JsZCIKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuMy4xLjEuJGluZGV4IgorQ0hFQ0tPUkRJRSAiU1RSSU5HOiBoZWxsb193b3JsZCIKKworI05FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kT3V0cHV0RnVsbC4iaGVsbG8iID0gU1RSSU5HOiAiaGVsbG9fd29ybGQiCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjMuMS4yLiRpbmRleCIKK0NIRUNLT1JESUUgIlNUUklORzogaGVsbG9fd29ybGQiCisKKyNORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZE91dExpbmUuImhlbGxvIi4xID0gU1RSSU5HOiAiaGVsbG9fd29ybGQiCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjQuMS4yLiRpbmRleC4xIgorQ0hFQ0tPUkRJRSAiU1RSSU5HOiBoZWxsb193b3JsZCIKKworI05FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kT3V0TnVtTGluZXMuImhlbGxvIiA9IElOVEVHRVI6IDEKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuMy4xLjMuJGluZGV4IgorQ0hFQ0tPUkRJRSAiSU5URUdFUjogMSIKKworI05FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kUmVzdWx0LiJoZWxsbyIgPSBJTlRFR0VSOiAwCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjMuMS40LiRpbmRleCIKK0NIRUNLT1JESUUgIklOVEVHRVI6IDAiCisKK1NUT1BBR0VOVAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NnBhc3Nfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY2cGFzc19zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlZTE2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NnBhc3Nfc2ltcGxlCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSICJleHRlbmRpbmcgYWdlbnQgZnVuY3Rpb25hbGl0eSB3aXRoIHBhc3MiCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BBU1NfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCisKKyMgRG9uJ3QgcnVuIHRoaXMgdGVzdCBvbiBNaW5HVyAtIGxvY2FsL3Bhc3N0ZXN0IGlzIGEgc2hlbGwgc2NyaXB0IGFuZAorIyBoZW5jZSBwYXNzaW5nIGl0IHRvIHRoZSBNU1ZDUlQgcG9wZW4oKSBkb2Vzbid0IHdvcmsuCitbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF0gJiYgU0tJUCAiTWluR1ciCisKKyMgbWFrZSBzdXJlIHNubXBnZXQgYW5kIHNubXB3YWxrIGNhbiBiZSBleGVjdXRlZAorU05NUEdFVD0iJHtidWlsZGRpcn0vYXBwcy9zbm1wZ2V0IgorWyAteCAiJFNOTVBHRVQiIF0gfHwgU0tJUCBzbm1wZ2V0IG5vdCBjb21waWxlZAorU05NUFdBTEs9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcHdhbGsiCitbIC14ICIkU05NUFdBTEsiIF0gfHwgU0tJUCBzbm1wd2FsayBub3QgY29tcGlsZWQKKworc25tcF92ZXJzaW9uPXYyYworVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5CisuIC4vU3YyY2NvbmZpZworCisjCisjIEJlZ2luIHRlc3QKKyMKK29pZD0uMS4zLjYuMS40LjEuODA3Mi4yLjI1NSAgIyBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NFeGFtcGxlcworQ09ORklHQUdFTlQgcGFzcyAkb2lkICR7c3JjZGlyfS9sb2NhbC9wYXNzdGVzdAorCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUR1Y2Qtc25tcC9wYXNzIgorU1RBUlRBR0VOVAorCisjQ09NTUVOVCBDaGVjayBhIGZ1bGwgd2FsayBvZiB0aGUgc2FtcGxlIGRhdGEKK0NBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRvaWQiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NTdHJpbmcuMCA9IFNUUklORzogTGlmZSwgdGhlIFVuaXZlcnNlLCBhbmQgRXZlcnl0aGluZyIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0ludGVnZXIuMSA9IElOVEVHRVI6IDQyIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzT0lELjEgPSBPSUQ6IE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc09JRFZhbHVlIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzVGltZVRpY2tzLjAgPSBUaW1ldGlja3M6ICgzNjMxMzYyMDApIDQyIGRheXMsIDA6NDI6NDIuMDAgIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSXBBZGRyZXNzLjAgPSBJcEFkZHJlc3M6IDEyNy4wLjAuMSIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCA9IENvdW50ZXIzMjogNDIiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NHYXVnZS4wID0gR2F1Z2UzMjogNDIiCisKKyNDT01NRU5UIEEgY291cGxlIG9mIHNwb3QgY2hlY2tzIG9mIEdFVCByZXF1ZXN0cy4KK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSW50ZWdlci4xIgorQ0hFQ0tPUkRJRSAiSU5URUdFUjogNDIiCisKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wIgorQ0hFQ0tPUkRJRSAiQ291bnRlcjMyOiA0MiIKKworU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY3cGFzc3BlcnNpc3Rfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY3cGFzc3BlcnNpc3Rfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjEzMzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjdwYXNzcGVyc2lzdF9zaW1wbGUKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgImV4dGVuZGluZyBhZ2VudCBmdW5jdGlvbmFsaXR5IHdpdGggcGFzc19wZXJzaXN0IgorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QQVNTX1BFUlNJU1RfTU9EVUxFCisKKyMgRG9uJ3QgcnVuIHRoaXMgdGVzdCBvbiBNaW5HVyAtIGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3QgaXMgYSBzaGVsbCBzY3JpcHQgYW5kCisjIGhlbmNlIHBhc3NpbmcgaXQgdG8gdGhlIE1TVkNSVCBwb3BlbigpIGRvZXNuJ3Qgd29yay4KK1sgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXSAmJiBTS0lQICJNaW5HVyIKKworWyAteCAvdXNyL2Jpbi9wZXJsIF0gfHwgU0tJUCAiL3Vzci9iaW4vcGVybCBub3QgZm91bmQiCisKKyMgbWFrZSBzdXJlIHNubXBnZXQgYW5kIHNubXB3YWxrIGNhbiBiZSBleGVjdXRlZAorU05NUEdFVD0iJHtidWlsZGRpcn0vYXBwcy9zbm1wZ2V0IgorWyAteCAiJFNOTVBHRVQiIF0gfHwgU0tJUCBzbm1wZ2V0IG5vdCBjb21waWxlZAorU05NUFdBTEs9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcHdhbGsiCitbIC14ICIkU05NUFdBTEsiIF0gfHwgU0tJUCBzbm1wd2FsayBub3QgY29tcGlsZWQKKworc25tcF92ZXJzaW9uPXYyYworVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5CisuIC4vU3YyY2NvbmZpZworCisjCisjIEJlZ2luIHRlc3QKKyMKK29pZD0uMS4zLjYuMS40LjEuODA3Mi4yLjI1NSAgIyBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NFeGFtcGxlcworQ09ORklHQUdFTlQgcGFzc19wZXJzaXN0ICRvaWQgJHtzcmNkaXJ9L2xvY2FsL3Bhc3NfcGVyc2lzdHRlc3QKKworT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1EdWNkLXNubXAvcGFzc19wZXJzaXN0IgorUEFTU19QRVJTSVNUX1BJREZJTEU9IiRTTk1QX1RNUERJUi9wYXNzX3BlcnNpc3QucGlkLiQkIgorZXhwb3J0IFBBU1NfUEVSU0lTVF9QSURGSUxFCitTVEFSVEFHRU5UCisKKyNDT01NRU5UIENoZWNrIGEgZnVsbCB3YWxrIG9mIHRoZSBzYW1wbGUgZGF0YQorQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJG9pZCIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc1N0cmluZy4wID0gU1RSSU5HOiBMaWZlLCB0aGUgVW5pdmVyc2UsIGFuZCBFdmVyeXRoaW5nIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSW50ZWdlci4xID0gSU5URUdFUjogNDIiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NPSUQuMSA9IE9JRDogTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzT0lEVmFsdWUiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NUaW1lVGlja3MuMCA9IFRpbWV0aWNrczogKDM2MzEzNjIwMCkgNDIgZGF5cywgMDo0Mjo0Mi4wMCAiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJcEFkZHJlc3MuMCA9IElwQWRkcmVzczogMTI3LjAuMC4xIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wID0gQ291bnRlcjMyOiAxIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzR2F1Z2UuMCA9IEdhdWdlMzI6IDQyIgorCisjQ09NTUVOVCBBIGNvdXBsZSBvZiBzcG90IGNoZWNrcyBvZiBHRVQgcmVxdWVzdHMuCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0ludGVnZXIuMSIKK0NIRUNLT1JESUUgIklOVEVHRVI6IDQyIgorCisjQ09NTUVOVCBuZXRTbm1wUGFzc0NvdW50ZXIgc2hvdWxkIGluY3JlbWVudCwgc2luY2UgdGhpcyBpcyBwYXNzX3BlcnNpc3QKK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wIgorQ0hFQ0tPUkRJRSAiQ291bnRlcjMyOiAyIgorCisjQ09NTUVOVCBub3cga2lsbCB0aGUgcGFzc19wZXJzaXN0IHNjcmlwdCwgYW5kIGNoZWNrIHRoYXQgaXQgcmVjb3ZlcnMuCitTVE9QUFJPRyAkUEFTU19QRVJTSVNUX1BJREZJTEUKKyNDT01NRU5UIG5ldFNubXBQYXNzQ291bnRlciBzaG91bGQgaGF2ZSByZXZlcnRlZCB0byAxLCBhcyB0aGlzIGlzIGEgbmV3IGluc3RhbmNlLgorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAiCitDSEVDS09SRElFICJDb3VudGVyMzI6IDEiCisKK1NUT1BBR0VOVAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2OGV4ZWNmaXhfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY4ZXhlY2ZpeF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4MTgzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2OGV4ZWNmaXhfc2ltcGxlCkBAIC0wLDAgKzEsNzIgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSICJleGVjZml4IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIgorCitTS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfRVhURU5TSUJMRV9NT0RVTEUKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKK1NLSVBJRiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworCisjIG1ha2Ugc3VyZSBzbm1wc2V0IGFuZCBzbm1wd2FsayBjYW4gYmUgZXhlY3V0ZWQKK1NOTVBTRVQ9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcHNldCIKK1sgLXggIiRTTk1QU0VUIiBdIHx8IFNLSVAgc25tcHNldCBub3QgY29tcGlsZWQKK1NOTVBXQUxLPSIke2J1aWxkZGlyfS9hcHBzL3NubXB3YWxrIgorWyAteCAiJFNOTVBXQUxLIiBdIHx8IFNLSVAgc25tcHdhbGsgbm90IGNvbXBpbGVkCisKK3NubXBfdmVyc2lvbj12MmMKK3NubXBfd3JpdGVfYWNjZXNzPSdhbGwnCitURVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKKy4gLi9TdjJjY29uZmlnCisKKyMKKyMgQmVnaW4gdGVzdAorIworaWYgWyAieCRPU1RZUEUiID0geG1zeXMgXTsgdGhlbgorICAgIGNtZDE9InRydWUiCisgICAgY21kMj0iZmFsc2UiCisgICAgZWNobz0iZWNobyIKK2Vsc2UKKyAgICBjbWQxPSIkKHdoaWNoIHRydWUpIgorICAgIGNtZDI9IiQod2hpY2ggZmFsc2UpIgorICAgIGVjaG89IiQod2hpY2ggZWNobykiCitmaQorQ09ORklHQUdFTlQgZXhlYyAgICB0cnVlLWNvbW1hbmQgICAgJGNtZDEKK0NPTkZJR0FHRU5UIGV4ZWNmaXggdHJ1ZS1jb21tYW5kICAgICRjbWQxCitDT05GSUdBR0VOVCBleGVjICAgIGZhbHNlLWNvbW1hbmQgICAkY21kMgorQ09ORklHQUdFTlQgZXhlY2ZpeCBmYWxzZS1jb21tYW5kICAgJGNtZDIKK0NPTkZJR0FHRU5UIGV4ZWMgICAgZWNoby0lcy1jb21tYW5kICR7ZWNob30gJXMKK0NPTkZJR0FHRU5UIGV4ZWNmaXggZWNoby0lcy1jb21tYW5kICR7ZWNob30gZml4LSVzCisKK1NUQVJUQUdFTlQKKworIyBDaGVjayBhIGZ1bGwgd2FsayBvZiBVQ0QtU05NUC1NSUI6OmV4dFRhYmxlCitDQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OmV4dEVudHJ5IgorQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0TmFtZXMuMSA9IFNUUklORzogdHJ1ZS1jb21tYW5kJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQuMSA9IFNUUklORzogJyIkY21kMSIKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dFJlc3VsdC4xID0gSU5URUdFUjogMCQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRPdXRwdXQuMSA9IFNUUklORzogJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4xID0gSU5URUdFUjogbm9FcnJvcigwKSQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXhDbWQuMSA9IFNUUklORzogJyIkY21kMSIKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE5hbWVzLjIgPSBTVFJJTkc6IGZhbHNlLWNvbW1hbmQkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0Q29tbWFuZC4yID0gU1RSSU5HOiAnIiRjbWQyIickJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0UmVzdWx0LjIgPSBJTlRFR0VSOiAxJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE91dHB1dC4yID0gU1RSSU5HOiAkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjIgPSBJTlRFR0VSOiBub0Vycm9yKDApJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeENtZC4yID0gU1RSSU5HOiAnIiRjbWQyIickJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0TmFtZXMuMyA9IFNUUklORzogZWNoby0lcy1jb21tYW5kJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQuMyA9IFNUUklORzogJyIke2VjaG99IicgJXMkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0UmVzdWx0LjMgPSBJTlRFR0VSOiAwJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE91dHB1dC4zID0gU1RSSU5HOiAlcyQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMyA9IElOVEVHRVI6IG5vRXJyb3IoMCkkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4Q21kLjMgPSBTVFJJTkc6ICciJHtlY2hvfSInIGZpeC0lcyQnCisKK0NBUFRVUkUgIiRTTk1QU0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZIC1yMCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjMgaSAxIgorQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjMgPSBJTlRFR0VSOiBydW5GaXgoMSknCisKK0NBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6ZXh0RW50cnkiCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXhDbWQuMyA9IFNUUklORzogJyIke2VjaG99IicgZml4LSVzJworCitTVE9QQUdFTlQKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzZmY2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX3NpbXBsZQpAQCAtMCwwICsxLDE1OSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgY29tMnNlYyBkaXJlY3RpdmUKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1VEUF9ET01BSU4KK1NLSVBJRiBORVRTTk1QX05PX0RFQlVHR0lORworCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyA0MDFhIFRlc3QgbWlzc2luZyBDT05URVhUCitDT05GSUdBR0VOVCAnY29tMnNlYyAtQ24nCisjIDQwMWIgVGVzdCBlbXB0eSBDT05URVhUCitDT05GSUdBR0VOVCAnY29tMnNlYyAtQ24gIiInCisjIDQwMWMgVGVzdCBvdmVybG9uZyBDT05URVhUICgzNCBjaGFycykKK0NPTkZJR0FHRU5UICdjb20yc2VjIC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworCisjIDQwMmEgVGVzdCBtaXNzaW5nIHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjJworIyA0MDJiIFRlc3QgZW1wdHkgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgIiInCisjIDQwMmMgVGVzdCBvdmVybG9uZyBzZWNOYW1lICgzNCBjaGFycykKK0NPTkZJR0FHRU5UICdjb20yc2VjIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisjIDQwMmQgVGVzdCB2YWxpZCBjb250ZXh0IGFuZCBtaXNzaW5nIHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjIC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMnCisjIDQwMmUgVGVzdCB2YWxpZCBjb250ZXh0IGFuZCBlbXB0eSBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYyAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzICIiJworCisjIDQwM2EgVGVzdCBtaXNzaW5nIG5ldHdvcmsgYWRkcmVzcworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwM2EnCisjIDQwM2IgVGVzdCBlbXB0eSBuZXR3b3JrIGFkZHJlc3MKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDNiICIiJworIyA0MDNjIFRlc3QgZm9yYmlkZGVuIHZhbHVlIChub3cgd2h5IGl0IGlzIGZvcmJpZGRlbi4uLikKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDNjIE5FVFdPUksnCisKKyMgNDA0YSBUZXN0IG1pc3NpbmcgY29tbXVuaXR5CitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA0YSBkZWZhdWx0JworIyA0MDRiIFRlc3QgZW1wdHkgY29tbXVuaXR5CitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA0YiBkZWZhdWx0ICIiJworIyA0MDRjIFRlc3QgZm9yYmlkZGVuIHZhbHVlIChub3cgd2h5IGl0IGlzIGZvcmJpZGRlbi4uLikKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDRjIGRlZmF1bHQgQ09NTVVOSVRZJworIyA0MDRkIFRlc3Qgb3ZlcmxvbmcgY29tbXVuaXR5ICgyNTUgY2hhcnMpCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA0ZCBkZWZhdWx0IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NScKKyMgNDA0ZSBUZXN0IHZhbGlkIGNvbW11bml0eQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNGUgZGVmYXVsdCAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKworIyA0MDVhIFRlc3QgJ2RlZmF1bHQnIGNvbmZpZ3VyYXRpb24KK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVhIGRlZmF1bHQgYzQwNWEnCisjIDQwNWIgVGVzdCBpcCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24KK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDViIDEwLjAuMC4wIGM0MDViJworIyA0MDVjIFRlc3QgdmFsaWQgbnVtZXJpYyBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1YyAxMC4wLjAuMC84IGM0MDVjJworIyA0MDVkIFRlc3QgaW52YWxpZCBudW1lcmljIG1hc2sgKHRvbyBiaWcpCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1ZCAxMC4wLjAuMC8zMyBjNDA1ZCcKKyMgNDA1ZSBUZXN0IGludmFsaWQgbnVtZXJpYyBtYXNrIChuZWdhdGl2ZSkKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVlIDEwLjAuMC4wLy0xIGM0MDVlJworIyA0MDVmIFRlc3QgdmFsaWQgaXAgYWRkcmVzcyBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1ZiAxMC4wLjAuMC8yNTUuMC4wLjAgYzQwNWYnCisjIDQwNWcgVGVzdCBpbnZhbGlkIGlwIGFkZHJlc3MgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWcgMTAuMC4wLjAvNTEyLjAuMC4wIGM0MDVnJworIyA0MDVoIFRlc3QgaW52YWxpZCBpcCBhZGRyZXNzIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVoIDEwLjAuMC4wL2hoIGM0MDVoJworIyA0MDVpIFRlc3QgYWRkcmVzcyB3aXRoIDEgYml0cyBub3QgY292ZXJlZCBieSB0aGUgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWkgMTAuMC4wLjAvMy4xOTIuMC4wIGM0MDVpJworIyA0MDVqIFRlc3QgdGhhdCAwLjAuMC4wIHdvcmtzIChhbGlhcyBmb3IgZGVmYXVsdCkKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVqIDAuMC4wLjAgYzQwNWonCisjIDQwNWsgVGVzdCB0aGF0IDAuMC4wLjAvMCB3b3JrcyAoYWxpYXMgZm9yIGRlZmF1bHQpCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1ayAwLjAuMC4wLzAgYzQwNWsnCisjIDQwNWwgVGVzdCB0aGF0IDAuMC4wLjAvMC4wLjAuMCB3b3JrcyAoYWxpYXMgZm9yIGRlZmF1bHQpCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1bCAwLjAuMC4wLzAuMC4wLjAgYzQwNWwnCisKKyMgNDA2YSBUZXN0IG1heGltYWxseSBsb25nIGFkZHJlc3MvbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNmEgMjU1LjI1NS4yNTUuMjU1LzI1NS4yNTUuMjU1LjI1NSBjNDA2YScKKworIyA0MDdhIFRlc3Qgbm9uIGV4aXN0YW50IGhvc3QgbmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwN2Egbm8uc3VjaC5hZGRyZXNzLiBjNDA3YScKKyMgNDA3YiBUZXN0IG1heGltYWxseSBsb25nIGhvc3QgbmFtZS9tYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA3YiBhMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMuYTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzLmEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMy5hMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxLi8yNTUuMjU1LjI1NS4yNTUgYzQwN2InCisKKyMgNDA4IExvb2t1cCB0ZXN0cywgcmVxdWlyZSBuZXR3b3JrIGFjY2VzcworIyA0MDhhIFRlc3QgbG9va3VwIHJldHVybmluZyBhIHNpbmdsZSBob3N0CitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA4YSB3d3cuaWV0Zi5vcmcgYzQwOGEnCisjIDQwOGEgVGVzdCBsb29rdXAgcmV0dXJuaW5nIG11bHRpcGxlIGhvc3RzCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA4YiB3d3cuZ29vZ2xlLmNvbSBjNDA4YicKKworIyBEZWZhdWx0IGFnZW50IHNldHVwCitDT05GSUdBR0VOVCAiW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIiCisjIER1bW15IGNvbmZpZyB0byBwcmV2ZW50IHRoZSBiYXNpY19zZXR1cCB3YXJuaW5nCitDT05GSUdBR0VOVCAncm9jb21tdW5pdHkgcHVibGljIDEyNy4wLjAuMC84JworCitBR0VOVF9GTEFHUz0nLURuZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eSxuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHksbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5JworCitTVEFSVEFHRU5UCisKK1NBVkVDSEVDS0FHRU5UKCkgeworICAgIENIRUNLQUdFTlQgIiRAIgorICAgIGlmIFsgIngkcmV0dXJuX3ZhbHVlIiAhPSAieDAiIF0gOyB0aGVuCisgICAgICAgIEZJTklTSEVECisgICAgZmkKK30KKworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTogRXJyb3I6IG1pc3NpbmcgQ09OVEVYVF9OQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI6IEVycm9yOiBtaXNzaW5nIE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMzogRXJyb3I6IGNvbnRleHQgbmFtZSB0b28gbG9uZycKK0NIRUNLQUdFTlRDT1VOVCBhdGxlYXN0b25lICdsaW5lIDQ6IEVycm9yOiBCbGFuayBsaW5lIGZvbGxvd2luZyBjb20yc2VjIHRva2VuLicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDU6IEVycm9yOiBlbXB0eSBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDY6IEVycm9yOiBzZWN1cml0eSBuYW1lIHRvbyBsb25nJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNzogRXJyb3I6IG1pc3NpbmcgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA4OiBFcnJvcjogZW1wdHkgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA5OiBFcnJvcjogbWlzc2luZyBTT1VSQ0UgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTA6IEVycm9yOiBlbXB0eSBTT1VSQ0UgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTE6IEVycm9yOiBleGFtcGxlIGNvbmZpZyBORVRXT1JLIG5vdCBwcm9wZXJseSBjb25maWd1cmVkJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTI6IEVycm9yOiBtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMzogRXJyb3I6IGVtcHR5IENPTU1VTklUWSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxNDogRXJyb3I6IGV4YW1wbGUgY29uZmlnIENPTU1VTklUWSBub3QgcHJvcGVybHkgY29uZmlndXJlZCcKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE1OiBFcnJvcjogY29tbXVuaXR5IG5hbWUgdG9vIGxvbmcnCitTQVZFQ0hFQ0tBR0VOVCAnPCIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCIsIDAuMC4wLjAvMC4wLjAuMD4gPT4gInQ0MDRlIicKK1NBVkVDSEVDS0FHRU5UICc8ImM0MDVhIiwgMC4wLjAuMC8wLjAuMC4wPiA9PiAidDQwNWEiJworU0FWRUNIRUNLQUdFTlQgJzwiYzQwNWIiLCAxMC4wLjAuMC8yNTUuMjU1LjI1NS4yNTU+ID0+ICJ0NDA1YiInCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNDA1YyIsIDEwLjAuMC4wLzI1NS4wLjAuMD4gPT4gInQ0MDVjIicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDIwOiBFcnJvcjogYmFkIG1hc2sgbGVuZ3RoJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjE6IEVycm9yOiBiYWQgbWFzayBsZW5ndGgnCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNDA1ZiIsIDEwLjAuMC4wLzI1NS4wLjAuMD4gPT4gInQ0MDVmIicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDIzOiBFcnJvcjogYmFkIG1hc2snCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyNDogRXJyb3I6IGJhZCBtYXNrJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjU6IEVycm9yOiBzb3VyY2UvbWFzayBtaXNtYXRjaCcKK1NBVkVDSEVDS0FHRU5UICc8ImM0MDVqIiwgMC4wLjAuMC8yNTUuMjU1LjI1NS4yNTU+ID0+ICJ0NDA1aiInCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNDA1ayIsIDAuMC4wLjAvMC4wLjAuMD4gPT4gInQ0MDVrIicKK1NBVkVDSEVDS0FHRU5UICc8ImM0MDVsIiwgMC4wLjAuMC8wLjAuMC4wPiA9PiAidDQwNWwiJworU0FWRUNIRUNLQUdFTlQgJzwiYzQwNmEiLCAyNTUuMjU1LjI1NS4yNTUvMjU1LjI1NS4yNTUuMjU1PiA9PiAidDQwNmEiJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMzA6IEVycm9yOicgIyBtc2cgZnJvbSBoX3N0cmVycm9yIHNvIGl0IHZhcmllcworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMzE6IEVycm9yOicgIyBtc2cgZnJvbSBoX3N0cmVycm9yIHNvIGl0IHZhcmllcworCitDSEVDS0FHRU5UICc8ImM0MDhhIicKK2lmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1lcSAwIF0gOyB0aGVuCisgIENIRUNLQUdFTlQgJ2xpbmUgMzI6IEVycm9yOicKKyAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLW5lIDEgXSA7IHRoZW4KKyAgICByZXR1cm5fdmFsdWU9MQorICAgIEZJTklTSEVECisgIGZpCitlbGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1uZSAxIF0gOyB0aGVuCisgIHJldHVybl92YWx1ZT0xCisgIEZJTklTSEVECitmaQorCitDSEVDS0FHRU5UICc8ImM0MDhiIicKK2lmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1lcSAwIF0gOyB0aGVuCisgIENIRUNLQUdFTlQgJ2xpbmUgMzM6IEVycm9yOicKKyAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLW5lIDEgXSA7IHRoZW4KKyAgICByZXR1cm5fdmFsdWU9MQorICBmaQorZWxpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtbmUgMSBdIDsgdGhlbgorICByZXR1cm5fdmFsdWU9MQorZmkKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzkwYWQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlCkBAIC0wLDAgKzEsMTU1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBjb20yc2VjNiBkaXJlY3RpdmUKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCitTS0lQSUYgTkVUU05NUF9OT19ERUJVR0dJTkcKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgNjAxYSBUZXN0IG1pc3NpbmcgQ09OVEVYVAorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IC1DbicKKyMgNjAxYiBUZXN0IGVtcHR5IENPTlRFWFQKK0NPTkZJR0FHRU5UICdjb20yc2VjNiAtQ24gIiInCisjIDYwMWMgVGVzdCBvdmVybG9uZyBDT05URVhUICgzNCBjaGFycykKK0NPTkZJR0FHRU5UICdjb20yc2VjNiAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKworIyA2MDJhIFRlc3QgbWlzc2luZyBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYzYnCisjIDYwMmIgVGVzdCBlbXB0eSBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYzYgIiInCisjIDYwMmMgVGVzdCBvdmVybG9uZyBzZWNOYW1lICgzNCBjaGFycykKK0NPTkZJR0FHRU5UICdjb20yc2VjNiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworIyA2MDJkIFRlc3QgdmFsaWQgY29udGV4dCBhbmQgbWlzc2luZyBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYzYgLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMycKKyMgNjAyZSBUZXN0IHZhbGlkIGNvbnRleHQgYW5kIGVtcHR5IHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjNiAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzICIiJworCisjIDYwM2EgVGVzdCBtaXNzaW5nIG5ldHdvcmsgYWRkcmVzcworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDNhJworIyA2MDNiIFRlc3QgZW1wdHkgbmV0d29yayBhZGRyZXNzCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwM2IgIiInCisjIDYwM2MgVGVzdCBmb3JiaWRkZW4gdmFsdWUKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjAzYyBORVRXT1JLJworCisjIDYwNGEgVGVzdCBtaXNzaW5nIENPTU1VTklUWQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDRhIGRlZmF1bHQnCisjIDYwNGIgJ0Vycm9yOiBlbXB0eSBDT01NVU5JVFkgcGFyYW1ldGVyJworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDRiIGRlZmF1bHQgIiInCisjIDYwNGMgVGVzdCBvdmVybG9uZyBDT01NVU5JVFkKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA0YyBkZWZhdWx0IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NScKKyMgNjA0ZCBUZXN0IGJhcmVseSB2YWxpZCBjb21tdW5pdHkKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA0ZCBkZWZhdWx0IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworIyA2MDRlIFRlc3QgZm9yYmlkZGVuIHZhbHVlCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNGUgZGVmYXVsdCBDT01NVU5JVFknCisKKyMgNjA1YSBUZXN0ICdkZWZhdWx0JyBjb25maWd1cmF0aW9uCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWEgZGVmYXVsdCBjNjA1YScKKyMgNjA1YiBUZXN0IGlwIGFkZHJlc3MgY29uZmlndXJhdGlvbgorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDViIGFhMDA6OiBjNjA1YicKKyMgNjA1YyBUZXN0IHZhbGlkIG51bWVyaWMgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDVjIGFhMDA6Oi84IGM2MDVjJworIyA2MDVkIFRlc3QgaW52YWxpZCBudW1lcmljIG1hc2sgKHRvbyBiaWcpCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWQgYWEwMDo6LzEyOSBjNjA1ZCcKKyMgNjA1ZSBUZXN0IGludmFsaWQgbnVtZXJpYyBtYXNrIChuZWdhdGl2ZSkKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1ZSBhYTAwOjovLTEgYzYwNWUnCisjIDYwNWYgVGVzdCB2YWxpZCBpcCBhZGRyZXNzIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1ZiBhYTAwOjovZmYwMDo6IGM2MDVmJworIyA2MDVnIFRlc3QgaW52YWxpZCBpcCBhZGRyZXNzIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1ZyBhYTAwOjovZmZmZmY6OiBjNjA1ZycKKyMgNjA1aCBUZXN0IGludmFsaWQgaXAgYWRkcmVzcyBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWggYWEwMDo6L2dnMDA6OiBjNjA1aCcKKyMgNjA1aSBUZXN0IGFkZHJlc3Mgd2l0aCAxIGJpdHMgbm90IGNvdmVyZWQgYnkgdGhlIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1aSBhYTAwOjovMGZmMDo6IGM2MDVpJworCisjIDYwNmEgVGVzdCBtYXhpbWFsbHkgbG9uZyBhZGRyZXNzL21hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA2YSBmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYvZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIGM2MDZhJworCisjIDYwN2EgVGVzdCBub24gZXhpc3RhbnQgaG9zdCBuYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwN2Egbm8uc3VjaC5hZGRyZXNzLiBjNjA3YScKKyMgNjA3YiBUZXN0IG1heGltYWxseSBsb25nIGhvc3QgbmFtZS9tYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwN2IgYTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzLmEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMy5hMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMuYTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMS4vZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIGM2MDdiJworCisjIDYwOCBMb29rdXAgdGVzdHMsIHJlcXVpcmUgbmV0d29yayBhY2Nlc3MKKyMgNjA4YSBUZXN0IGxvb2t1cCByZXR1cm5pbmcgYSBzaW5nbGUgaG9zdAorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDhhIG9uZWFhYWEubmV0LXNubXAub3JnIGM2MDhhJworIyA2MDhiIFRlc3QgbG9va3VwIHJldHVybmluZyBtdWx0aXBsZSBob3N0cworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDhiIHR3b2FhYWEubmV0LXNubXAub3JnIGM2MDhiJworCisjIERlZmF1bHQgYWdlbnQgc2V0dXAKK0NPTkZJR0FHRU5UICJbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUiIKKyMgRHVtbXkgY29uZmlnIHRvIHByZXZlbnQgdGhlIGJhc2ljX3NldHVwIHdhcm5pbmcKK0NPTkZJR0FHRU5UICdyb2NvbW11bml0eSBwdWJsaWMgMTI3LjAuMC4wLzgnCisKK0FHRU5UX0ZMQUdTPSctRG5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5LG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSxuZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHknCisKK1NUQVJUQUdFTlQKKworU0FWRUNIRUNLQUdFTlQoKSB7CisgICAgQ0hFQ0tBR0VOVCAiJEAiCisgICAgaWYgWyAieCRyZXR1cm5fdmFsdWUiICE9ICJ4MCIgXSA7IHRoZW4KKyAgICAgICAgRklOSVNIRUQKKyAgICBmaQorfQorCisjIDYwMQorU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTogRXJyb3I6IG1pc3NpbmcgQ09OVEVYVF9OQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI6IEVycm9yOiBtaXNzaW5nIE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMzogRXJyb3I6IGNvbnRleHQgbmFtZSB0b28gbG9uZycKKyMgNjAyCitDSEVDS0FHRU5UQ09VTlQgYXRsZWFzdG9uZSAnbGluZSA0OiBFcnJvcjogQmxhbmsgbGluZSBmb2xsb3dpbmcgY29tMnNlYzYgdG9rZW4uJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNTogRXJyb3I6IGVtcHR5IE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNjogRXJyb3I6IHNlY3VyaXR5IG5hbWUgdG9vIGxvbmcnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA3OiBFcnJvcjogbWlzc2luZyBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDg6IEVycm9yOiBlbXB0eSBOQU1FIHBhcmFtZXRlcicKKyMgNjAzCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA5OiBFcnJvcjogbWlzc2luZyBTT1VSQ0UgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTA6IEVycm9yOiBlbXB0eSBTT1VSQ0UgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTE6IEVycm9yOiBleGFtcGxlIGNvbmZpZyBORVRXT1JLIG5vdCBwcm9wZXJseSBjb25maWd1cmVkJworIyA2MDQKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEyOiBFcnJvcjogbWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTM6IEVycm9yOiBlbXB0eSBDT01NVU5JVFkgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTQ6IEVycm9yOiBjb21tdW5pdHkgbmFtZSB0b28gbG9uZycKK1NBVkVDSEVDS0FHRU5UICc8IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0IiwgOjovOjo+ID0+ICJ0NjA0ZCInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxNjogRXJyb3I6IGV4YW1wbGUgY29uZmlnIENPTU1VTklUWSBub3QgcHJvcGVybHkgY29uZmlndXJlZCcKKyMgNjA1CitTQVZFQ0hFQ0tBR0VOVCAnPCJjNjA1YSIsIDo6Lzo6PiA9PiAidDYwNWEiJworU0FWRUNIRUNLQUdFTlQgJzwiYzYwNWIiLCBhYTAwOjovZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmPiA9PiAidDYwNWIiJworU0FWRUNIRUNLQUdFTlQgJzwiYzYwNWMiLCBhYTAwOjovZmYwMDo6PiA9PiAidDYwNWMiJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjA6IEVycm9yOiBiYWQgbWFzayBsZW5ndGgnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyMTogRXJyb3I6IGJhZCBtYXNrIGxlbmd0aCcKK1NBVkVDSEVDS0FHRU5UICc8ImM2MDVmIiwgYWEwMDo6L2ZmMDA6Oj4gPT4gInQ2MDVmIicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDIzOiBFcnJvcjogYmFkIG1hc2snCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyNDogRXJyb3I6IGJhZCBtYXNrJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjU6IEVycm9yOiBzb3VyY2UvbWFzayBtaXNtYXRjaCcKKyMgNjA2CitTQVZFQ0hFQ0tBR0VOVCAnPCJjNjA2YSIsIGZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZi9mZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY+ID0+ICJ0NjA2YSInCisjIDYwNworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjc6IEVycm9yOicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI4OiBFcnJvcjonCisKKyMgNjA4CitDSEVDS0FHRU5UICc8ImM2MDhhIicKK2lmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1lcSAwIF0gOyB0aGVuCisgIENIRUNLQUdFTlQgJ2xpbmUgMjk6IEVycm9yOicKKyAgZXJybnVtPWBleHByICRlcnJudW0gLSAxYAorICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtbmUgMSBdIDsgdGhlbgorICAgIEZJTklTSEVECisgIGZpCitlbGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1uZSAxIF0gOyB0aGVuCisgIEZJTklTSEVECitmaQorCitDSEVDS0FHRU5UQ09VTlQgYXRsZWFzdG9uZSAnPCJjNjA4YiInCitpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtZXEgMCBdIDsgdGhlbgorICBDSEVDS0FHRU5UICdsaW5lIDMwOiBFcnJvcjonCisgIGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1lcSAxIF0gOyB0aGVuCisgICAgZXJybnVtPWBleHByICRlcnJudW0gLSAxYAorICBmaQorZmkKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjM4MGYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfc2ltcGxlCkBAIC0wLDAgKzEsMTExIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBjb20yc2VjdW5peCBkaXJlY3RpdmUKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCitTS0lQSUYgTkVUU05NUF9OT19ERUJVR0dJTkcKK1NLSVBJRk5PVCBTSVpFT0ZfU09DS0FERFJfVU5fU1VOX1BBVEgKKworIworIyBQcmVwYXJlIHRlc3QKKyMKK2lmIFsgYHVuYW1lIC1zYCA9IFN1bk9TIF0KK3RoZW4gQVdLPW5hd2sKK2Vsc2UgQVdLPWF3aworZmkKKworc3VuX3BhdGhfc2l6ZWQ9YCRBV0sgJy9eI2RlZmluZSBTSVpFT0ZfU09DS0FERFJfVU5fU1VOX1BBVEgvIHsgcmVzID0gImEiOyBmb3IobiA9IDI7IG4gPCAkMzsgKytuKSB7IHJlcyA9IHJlcyBzdWJzdHIoIjEyMzQ1Njc4OTAiLCBuICUgMTAgKyAxLCAxKTsgfSBwcmludCByZXM7IH0nICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmhgCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHUwMWEgVGVzdCBtaXNzaW5nIENPTlRFWFQKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCAtQ24nCisjIHUwMWEgVGVzdCBlbXB0eSBDT05URVhUCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggLUNuICIiJworIyB1MDFjIFRlc3Qgb3ZlcmxvbmcgQ09OVEVYVCAoMzQgY2hhcnMpCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisKKyMgdTAyYSBUZXN0IG1pc3Npbmcgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4JworIyB1MDJiIFRlc3QgZW1wdHkgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4ICIiJworIyB1MDJjIFRlc3Qgb3Zlcmxvbmcgc2VjTmFtZSAoMzQgY2hhcnMpCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKyMgdTAyZCBUZXN0IHZhbGlkIGNvbnRleHQgYW5kIG1pc3Npbmcgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMnCisjIHUwMmUgVGVzdCB2YWxpZCBjb250ZXh0IGFuZCBlbXB0eSBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMyAiIicKKworIyB1MDNhIFRlc3QgbWlzc2luZyBzb2NrcGF0aAorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDNhJworIyB1MDNiIFRlc3QgZW1wdHkgc29ja3BhdGgKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTAzYiAiIicKKyMgdTAzYyBUZXN0IG92ZXJsb25nIHNvY2twYXRoIChzaXplb2Yoc29ja2FkZHJfdW4uc3VuX3BhdGgpIGNoYXJzKQorQ09ORklHQUdFTlQgImNvbTJzZWN1bml4IHR1MDNjICR7c3VuX3BhdGhfc2l6ZWR9eCIKKyMgdTAzZCBUZXN0IHZhbGlkIHNvY2twYXRoIChzaXplb2Yoc29ja2FkZHJfdW4uc3VuX3BhdGgpIC0gMSBjaGFycykKK0NPTkZJR0FHRU5UICJjb20yc2VjdW5peCB0dTAzZCAke3N1bl9wYXRoX3NpemVkfSIKKworIyB1MDRhIFRlc3QgbWlzc2luZyBjb21tdW5pdHkKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTA0YSBkZWZhdWx0JworIyB1MDRiIFRlc3QgZW1wdHkgY29tbXVuaXR5CitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwNGIgZGVmYXVsdCAiIicKKyMgdTA0YyBUZXN0IGZvcmJpZGRlbiB2YWx1ZSAobm93IHdoeSBpdCBpcyBmb3JiaWRkZW4uLi4pCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwNGMgZGVmYXVsdCBDT01NVU5JVFknCisjIHUwNGQgVGVzdCBvdmVybG9uZyBjb21tdW5pdHkgKDI1NSBjaGFycykKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTA0ZCBkZWZhdWx0IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NScKKyMgdTA0ZSBUZXN0IHZhbGlkIGNvbW11bml0eQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDRlIGRlZmF1bHQgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisKKyMgdTA1YSBUZXN0ICdkZWZhdWx0JyBjb25maWd1cmF0aW9uCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwNWEgZGVmYXVsdCBjdTA1YScKKworIyB1MDdhIFRlc3Qgbm9uIGV4aXN0YW50IHNvY2twYXRoCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwN2EgL2Rldi9udWxsL25vL3N1Y2ggY3UwN2EnCisKKyMgRGVmYXVsdCBhZ2VudCBzZXR1cAorQ09ORklHQUdFTlQgIltzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSIgorIyBEdW1teSBjb25maWcgdG8gcHJldmVudCB0aGUgYmFzaWNfc2V0dXAgd2FybmluZworQ09ORklHQUdFTlQgJ3JvY29tbXVuaXR5IHB1YmxpYyAxMjcuMC4wLjAvOCcKKworQUdFTlRfRkxBR1M9Jy1EbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHksbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5LG5ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eScKKworU1RBUlRBR0VOVAorCitTQVZFQ0hFQ0tBR0VOVCgpIHsKKyAgICBDSEVDS0FHRU5UICIkQCIKKyAgICBpZiBbICJ4JHJldHVybl92YWx1ZSIgIT0gIngwIiBdIDsgdGhlbgorICAgICAgICBGSU5JU0hFRAorICAgIGZpCit9CisKKyMgdTAxCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxOiBFcnJvcjogbWlzc2luZyBDT05URVhUX05BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjogRXJyb3I6IG1pc3NpbmcgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAzOiBFcnJvcjogY29udGV4dCBuYW1lIHRvbyBsb25nJworIyB1MDIKK0NIRUNLQUdFTlRDT1VOVCBhdGxlYXN0b25lICdsaW5lIDQ6IEVycm9yOiBCbGFuayBsaW5lIGZvbGxvd2luZyBjb20yc2VjdW5peCB0b2tlbi4nCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA1OiBFcnJvcjogZW1wdHkgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA2OiBFcnJvcjogc2VjdXJpdHkgbmFtZSB0b28gbG9uZycKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDc6IEVycm9yOiBtaXNzaW5nIE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgODogRXJyb3I6IGVtcHR5IE5BTUUgcGFyYW1ldGVyJworIyB1MDMKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDk6IEVycm9yOiBtaXNzaW5nIFNPQ0tQQVRIIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEwOiBFcnJvcjogZW1wdHkgU09DS1BBVEggcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTE6IEVycm9yOiBzb2NrcGF0aCB0b28gbG9uZycKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEyOiBFcnJvcjogbWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyJworIyB1MDQKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEzOiBFcnJvcjogbWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTQ6IEVycm9yOiBlbXB0eSBDT01NVU5JVFkgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTU6IEVycm9yOiBleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxNjogRXJyb3I6IGNvbW11bml0eSBuYW1lIHRvbyBsb25nJworU0FWRUNIRUNLQUdFTlQgJzwiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQiLCAiIj4gPT4gInR1MDRlIicKKyMgdTA1CitTQVZFQ0hFQ0tBR0VOVCAnPCJjdTA1YSIsICIiPiA9PiAidHUwNWEiJworIyB1MDcKK1NBVkVDSEVDS0FHRU5UICc8ImN1MDdhIiwgIi9kZXYvbnVsbC9uby9zdWNoIj4gPT4gInR1MDdhIicKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNDk0OWUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIHRoYXQgdGhlIGFnZW50IHJlc3BvbmRzIHByb3Blcmx5IHRvIGEga2lsbCAtSFVQCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisKK1NLSVBJRk5PVCBIQVZFX1NJR0hVUAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5CisuIC4vU3YxY29uZmlnCisKK1NUQVJUQUdFTlQKKworIyBhZGQgYSBhZ2VudCBjb25maWd1cmF0aW9uIGxpbmUgdGhhdCB3b3VsZG4ndCBoYXZlIGJlZW4gdGhlcmUgd2hlbgorIyB0aGUgc3RhcnRlZCB1cC4KK0NPTkZJR0FHRU5UIHN5c2xvY2F0aW9uIG5vdC1hbnl3aGVyZS1pbi1wYXJ0aWN1bGFyCisKKyMga2lsbCAtSFVQIHRoZSBhZ2VudCB0byBnZXQgaXQgdG8gcmUtcmVhZCB0aGUgLmNvbmYgZmlsZS4KK0RFTEFZCitraWxsIC1IVVAgYGNhdCAkU05NUF9TTk1QRF9QSURfRklMRWAgPiAvZGV2L251bGwgMj4mMQorREVMQVkKKworIyBBbmQgc2VlIGlmIGl0IGhhcyB0aGUgbmV3IHZhbHVlLgorQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNi4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIm5vdC1hbnl3aGVyZS1pbi1wYXJ0aWN1bGFyIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5MWQzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgQWdlbnRYIEdFVCBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKKy4gLi9TdjNjb25maWcKKworIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCitpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKK2Vsc2UKK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgorZmkKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYix3aW5FeHRETEwiCitTVEFSVEFHRU5UCisKKyMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCIKKworaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisgICMgdGVzdCB0aGUgYWdlbnR4IHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KKworICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKKyAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgorICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKKyAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1YIC1JIHN5c3RlbV9taWIiCisgIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9ib2d1cy5jb25mIgorICBTVEFSVEFHRU5UCisKKyAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgc2V0dGluZyB0aGUgc3lzdGVtIG1pYgorICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCAzICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKKyAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKKyAgIyBzdG9wIHRoZSBzdWJhZ2VudAorICBTVE9QQUdFTlQKKworICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCitmaQorCisjIHN0b3AgdGhlIG1hc3RlciBhZ2VudAorU1RPUEFHRU5UCisKKyMgYWxsIGRvbmUgKHdoZXcpCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5MzliZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgQWdlbnRYIFNFVCBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGICAgIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKKy4gLi9TdjNjb25maWcKKworIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCitpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKK2Vsc2UKK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgorZmkKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYix3aW5FeHRETEwgLURBZ2VudFgiCitTVEFSVEFHRU5UCisKKyMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKK0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IE5vIFN1Y2ggT2JqZWN0IgorCitpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKyAgIyB0ZXN0IHRoZSBBZ2VudFggc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgorCisgIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQorICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgorICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLVggLUkgc3lzdGVtX21pYiIKKyAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2JvZ3VzLmNvbmYiCisgIGVjaG8gInBzeXNjb250YWN0IHRlc3Rjb250YWN0IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBTVEFSVEFHRU5UCisKKyAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKyAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCisgIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IFwiKnRlc3Rjb250YWN0IgorCisgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorCisgICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgc2V0dGluZyB0aGUgc3lzdGVtIG1pYgorICAgIENBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCBzIG5ld3Rlc3Rjb250YWN0IgorCisgICAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogXCIqbmV3dGVzdGNvbnRhY3QiCisKKyAgICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKworCSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisJQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCQorCUNIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IFwiKm5ld3Rlc3Rjb250YWN0IgorICAgIGZpCisgIGZpCisKKyAgIyBzdG9wIHRoZSBzdWJhZ2VudAorICBTVE9QQUdFTlQKKworICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCitmaQorCisjIHN0b3AgdGhlIG1hc3RlciBhZ2VudAorU1RPUEFHRU5UCisKKyMgYWxsIGRvbmUgKHdoZXcpCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjEwYjQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgQWdlbnRYIGlsbGVnYWwgU0VUIGhhbmRsaW5nIHN1cHBvcnQKKworU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCitTS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgICAgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworCisjIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KK2lmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgorZWxzZQorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCitmaQorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliLHdpbkV4dERMTCAtREFnZW50WCIKK1NUQVJUQUdFTlQKKworIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgorQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gTm8gU3VjaCBPYmplY3QiCisKK2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorICAjIHRlc3QgdGhlIEFnZW50WCBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCisKKyAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCisgIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQorICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCisgIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtWCAtSSBzeXN0ZW1fbWliIgorICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYm9ndXMuY29uZiIKKyAgU1RBUlRBR0VOVAorCisgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisgIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworICAjIHdlIGRvbid0IGtub3cgdGhlIHJlYWwgdmFsdWUsIHVuZm9ydHVuYXRlbHksIHNvIHdlIHRlc3QgZm9yIHdoYXQKKyAgIyB3ZSBzaG91bGQgKm5vdCogZ2V0IGJhY2suCisgIENIRUNLQ09VTlQgMCAiLjEuMy42LjEuMi4xLjEuNC4wID0gTm8gU3VjaCBPYmplY3QiCisKKyAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAwOyB0aGVuCisKKyAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyBzZXR0aW5nIHRoZSBzeXN0ZW0gbWliCisgICAgQ0FQVFVSRSAic25tcHNldCAtT24gLUlyICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCBpIDQiCisKKyAgICBDSEVDSyAid3JvbmdUeXBlIgorCisgIGZpCisKKyAgIyBzdG9wIHRoZSBzdWJhZ2VudAorICBTVE9QQUdFTlQKKworICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCitmaQorCisjIHN0b3AgdGhlIG1hc3RlciBhZ2VudAorU1RPUEFHRU5UCisKKyMgYWxsIGRvbmUgKHdoZXcpCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE1ZTJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUKQEAgLTAsMCArMSw3OSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgQWdlbnRYIHRyYXAgc2VuZGluZyBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQorU0tJUElGTk9UIE5FVFNOTVBfU0VDTU9EX1VTTQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFydCB0aGUgdHJhcCBkZW1vbgorQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCitTVEFSVFRSQVBECisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisjIGNvbmZpZ3VyZSB0aGUgdHJhcCByZWNlaXZlci4KK0NPTkZJR0FHRU5UIHRyYXBzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYworCisjIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgZXhhbXBsZSBtaWIuCitpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKK2Vsc2UKK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgorZmkKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtZXhhbXBsZSIKK1NUQVJUQUdFTlQKKworIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXhhbXBsZSBtaWIKK0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS4yMDIxLjI1NC4xLjAiCisKK0NIRUNLICJObyBTdWNoIE9iamVjdCIKKworaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisgICMgdGVzdCB0aGUgQWdlbnRYIHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KKworICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKKyAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgorICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKKyAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1YIC1JIGV4YW1wbGUgLURhZGQiCisgIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9ib2d1cy5jb25mIgorCisgIFNUQVJUQUdFTlQKKworICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgZXhhbXBsZSBtaWIKKyAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjIwMjEuMjU0LjEuMCIKKworICBDSEVDSyAibGlmZSB0aGUgdW5pdmVyc2UgYW5kIGV2ZXJ5dGhpbmciCisKKyAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisKKyAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzZW5kcyBhIHRyYXAgZnJvbSB0aGUgZXhtYXBsZSBtaWIKKyAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAtciAwIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS4yMDIxLjI1NC44LjAgaSAxIgorICAgIERFTEFZCisgICAgQ0hFQ0tUUkFQRCAibGlmZSB0aGUgdW5pdmVyc2UgYW5kIGV2ZXJ5dGhpbmciCisKKyAgZmkKKworICAjIHN0b3AgdGhlIHN1YmFnZW50CisgIFNUT1BBR0VOVAorCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRworICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKK2ZpCisKKyMgc3RvcCB0aGUgbWFzdGVyIGFnZW50CitTVE9QQUdFTlQKKworIyBzdG9wIHRoZSB0cmFwIGRlbW9uCitTVE9QVFJBUEQKKworIyBhbGwgZG9uZSAod2hldykKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDc1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZQpAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBBZ2VudFggdHJhcCBzZW5kaW5nIHN1cHBvcnQgdXNpbmcgYWdlbnR4dHJhcAorCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKK1NLSVBJRk5PVCBORVRTTk1QX1NFQ01PRF9VU00KKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhcnQgdGhlIHRyYXAgZGVtb24KK0NPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYworU1RBUlRUUkFQRAorCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworIyBjb25maWd1cmUgdGhlIHRyYXAgcmVjZWl2ZXIuCitDT05GSUdBR0VOVCB0cmFwMnNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCisKKyMgU3RhcnQgdGhlIGFnZW50CitpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KK0FHRU5UWF9TRVJWRVI9Ii14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgorZWxzZQorQUdFTlRYX1NFUlZFUj0iLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKK2ZpCitBR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTICRBR0VOVFhfU0VSVkVSIgorU1RBUlRBR0VOVAorCitDQVBUVVJFICJhZ2VudHh0cmFwICRBR0VOVFhfU0VSVkVSIDAuMCAwLjAgcyBtb3N0bHlfaGFybWxlc3MiCisKKyMgc3RvcCB0aGUgbWFzdGVyIGFnZW50CitTVE9QQUdFTlQKKworIyBzdG9wIHRoZSB0cmFwIGRlbW9uCitTVE9QVFJBUEQKKworIyBDaGVjayB0aGF0IHRoZSB0cmFwIHdhcyByZWNlaXZlZAorQ0hFQ0tUUkFQRCAiPSBTVFJJTkc6IFwiKm1vc3RseV9oYXJtbGVzc1wiKiIKKworIyBhbGwgZG9uZSAod2hldykKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkZjY0NzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZQpAQCAtMCwwICsxLDExNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgJ0FnZW50WCBzdWJhZ2VudCBpbiBQZXJsICh1c2luZyBOZXRTTk1QOjphZ2VudCknCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQorU0tJUElGTk9UIEhBVkVfU0lHSFVQCisjIG1ha2Ugc3VyZSB0aGUgdG9vbGtpdCBoYXMgYmVlbiBjb25maWd1cmVkIC0td2l0aC1wZXJsLW1vZHVsZXMKK1sgLWQgJHtTTk1QX1VQRElSfS9wZXJsL2JsaWIvYXJjaC9hdXRvL05ldFNOTVAvYWdlbnQgXSB8fCBTS0lQIE5vdCAtLXdpdGgtcGVybC1tb2R1bGVzCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitzbm1wX3ZlcnNpb249djJjCitURVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKKy4gLi9TdjJjY29uZmlnCisKK1RFU1RPSUQ9LjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5LjEuMAorVEVTVE9JRDI9LjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5LjIuMAorQUdFTlRYX1NPQ0tFVD0ke1NOTVBfVE1QRElSfS9hZ2VudHhfc29ja2V0CitQRVJMX1NVQkFHRU5UPSR7U05NUF9UTVBESVJ9L2hlbGxvLnBsCitQRVJMX1NVQkFHRU5UX0NPTkY9JHtTTk1QX1RNUERJUn0vaGVsbG8uY29uZgorCitjYXQgPiRQRVJMX1NVQkFHRU5UIDw8RU5ECisjISR7U05NUF9QRVJMUFJPR30KKyMgbWluaW1hbCBBZ2VudFggc3ViYWdlbnQgaW4gUGVybAorCit1c2UgYmxpYiBxdygke1NOTVBfVVBESVJ9L3BlcmwpOwordXNlIE5ldFNOTVA6Ok9JRCBxdyg6YWxsKTsKK3VzZSBOZXRTTk1QOjphZ2VudCBxdyg6YWxsKTsKK3VzZSBOZXRTTk1QOjpBU04gcXcoOmFsbCk7Cit1c2UgTmV0U05NUDo6YWdlbnQ6OmRlZmF1bHRfc3RvcmU7Cit1c2UgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZSBxdyg6YWxsKTsKK3VzZSBTTk1QOworCisjIyBkb3VibGUtZm9yayBkYWVtb24KK215IFwkcGlkOwordW5sZXNzIChcJHBpZCA9IGZvcmspIHsKKyAgdW5sZXNzIChmb3JrKSB7CisgICAgIyMgc3RhcnQgbWFpbiBjb2RlCisgICAgbXkgXCRyZWdhdCA9ICcuMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTknOyAjIG5ldFNubXBQbGF5UGVuCisgICAgbXkgXCRteW9pZCA9IFwkcmVnYXQgLiAiLjEuMCI7ICMgdGhlICJoZWxsbyB3b3JsZCIgT0lECisgICAgbXkgXCRteW9pZDIgPSBcJHJlZ2F0IC4gIi4yLjAiOyAjIHRoZSAiaGVsbG8gYWdhaW4gd29ybGQiIE9JRAorCisgICAgbXkgXCRwaWRmaWxlID0gc2hpZnQ7ICMgdGFrZSBQSUQgZmlsZSBhcyBmaXJzdCBhcmd1bWVudCAKKyAgICBvcGVuKFBJREZJTEUsICI+XCRwaWRmaWxlIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIFwkcGlkZmlsZSI7CisgICAgcHJpbnQgUElERklMRSBcJFwkOworICAgIGNsb3NlKFBJREZJTEUpOworCitzdWIgbXlfc25tcF9oYW5kbGVyIHsKKyAgbXkgKFwkaGFuZGxlciwgXCRyZWdpc3RyYXRpb25faW5mbywgXCRyZXF1ZXN0X2luZm8sIFwkcmVxdWVzdHMpID0gQF87CisgIGZvcihteSBcJHJlcXVlc3QgPSBcJHJlcXVlc3RzOyBcJHJlcXVlc3Q7IFwkcmVxdWVzdCA9IFwkcmVxdWVzdC0+bmV4dCgpKSB7CisgICAgaWYgKFwkcmVxdWVzdF9pbmZvLT5nZXRNb2RlKCkgPT0gTU9ERV9HRVQpIHsKKyAgICAgIGlmIChcJHJlcXVlc3QtPmdldE9JRCgpID09IG5ldyBOZXRTTk1QOjpPSUQoXCRteW9pZCkpIHsKKyAgICAgICAgXCRyZXF1ZXN0LT5zZXRWYWx1ZShBU05fT0NURVRfU1RSLCAiaGVsbG8gd29ybGQiKTsKKyAgICAgICAgbGFzdDsKKyAgICAgIH0gZWxzaWYgKFwkcmVxdWVzdC0+Z2V0T0lEKCkgPT0gbmV3IE5ldFNOTVA6Ok9JRChcJG15b2lkMikpIHsKKyAgICAgICAgXCRyZXF1ZXN0LT5zZXRWYWx1ZShBU05fT0NURVRfU1RSLCAiaGVsbG8gYWdhaW4gd29ybGQiKTsKKyAgICAgICAgbGFzdDsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KK3N1YiBzaHV0X2l0X2Rvd24geyBcJHJ1bm5pbmcgPSAwOyB9CisKKyAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX05PX1JPT1RfQUNDRVNTLCAxKTsKKyAgICBteSBcJGFnZW50ID0gbmV3IE5ldFNOTVA6OmFnZW50KCdOYW1lJyA9PiAnaGVsbG8nLCAnQWdlbnRYJyA9PiAxKTsKKyAgICBteSBcJHJlZ29pZCA9IG5ldyBOZXRTTk1QOjpPSUQoXCRyZWdhdCk7CisgICAgXCRhZ2VudC0+cmVnaXN0ZXIoImhlbGxvIiwgXCRyZWdvaWQsIFwmbXlfc25tcF9oYW5kbGVyKTsKKworICAgIFwkU0lHeydJTlQnfSA9IFwmc2h1dF9pdF9kb3duOworICAgIFwkU0lHeydRVUlUJ30gPSBcJnNodXRfaXRfZG93bjsKKyAgICBcJHJ1bm5pbmcgPSAxOworICAgIHdoaWxlKFwkcnVubmluZykgeworICAgICAgXCRhZ2VudC0+YWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoMSk7CisgICAgfQorICAgIFwkYWdlbnQtPnNodXRkb3duKCk7CisgICAgIyMgZW5kIG1haW4gY29kZQorICAgIGV4aXQgMDsKKyAgfQorICBleGl0IDA7Cit9Cit3YWl0cGlkKFwkcGlkLCAwKTsKK0VORAorCitlY2hvICJhZ2VudHhzb2NrZXQgJEFHRU5UWF9TT0NLRVQiID4gJFBFUkxfU1VCQUdFTlRfQ09ORgorCitDT05GSUdBR0VOVCBtYXN0ZXIgYWdlbnR4CitDT05GSUdBR0VOVCBhZ2VudHhzb2NrZXQgJEFHRU5UWF9TT0NLRVQKKworU1RBUlRBR0VOVAorCisjIHN0YXJ0IHBlcmwgc3ViYWdlbnQKKy91c3IvYmluL2VudiBTTk1QQ09ORlBBVEg9IiR7U05NUF9UTVBESVJ9JHtTTk1QX0VOVl9TRVBBUkFUT1J9JHtTTk1QX1RNUF9QRVJTSVNURU5URElSfSIgJFNOTVBfUEVSTFBST0cgJFBFUkxfU1VCQUdFTlQgJFNOTVBfQUdFTlRYX1BJRF9GSUxFID4kU05NUF9BR0VOVFhfTE9HX0ZJTEUgMj4mMQorREVMQVkKKworIyMgMSkgU05NUCBHRVQgYWdhaW5zdCBtaWIgb2JqZWN0IGltcGxlbWVudGVkIGJ5IHRoZSBwZXJsIHN1YmFnZW50CitDQVBUVVJFICJzbm1wZ2V0IC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJFRFU1RPSUQiCitDSEVDSyAiaGVsbG8gd29ybGQiCisKKyMjIDIpIHBlcnNpc3RlbmN5OiByZWNvbmZpZ3VyZSBtYXN0ZXIgYWdlbnQgKEhVUCksIHJlLXRlc3QKK0hVUEFHRU5UCitDQVBUVVJFICJzbm1wZ2V0IC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJFRFU1RPSUQyIgorQ0hFQ0sgImhlbGxvIGFnYWluIHdvcmxkIgorCisjIyBzdG9wCitTVE9QQUdFTlQKK1NUT1BQUk9HICRTTk1QX0FHRU5UWF9QSURfRklMRQorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZTk0NzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgUHJveHkgR0VUIHN1cHBvcnQKKworU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BST1hZX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKKworIyBYWFg6IHVjZC1zbm1wL3Byb3h5IGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBUQ1AgLS0gcmVtb3ZlIHRoaXMgb25jZSBpdCBkb2VzCitbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3AiIC1vICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3A2IiBdICYmIFNLSVAgVGVzdCBkb2VzIG5vdCBzdXBwb3J0IFRDUAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKKy4gLi9TdjNjb25maWcKKyMgY29uZmlnIHRoZSBwcm94eQorQ09ORklHQUdFTlQgcHJveHkgLXQgMiAtciAxIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IC4xLjMuNi4xLjIuMS4xCisKKyMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliLHdpbkV4dERMTCAtRHByb3h5IgorU1RBUlRBR0VOVAorCisjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCisjQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCisjQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IgorCisjaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisgICMgdGVzdCB0aGUgcHJveHkgc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgorCisgIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQorICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgorICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvcHJveHkuY29uZiIKKyAgZWNobyAicndjb21tdW5pdHkgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVkcDYiIC1vICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidGNwNiIgXTt0aGVuCisgICAgZWNobyAicndjb21tdW5pdHk2IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIGZpCisgIEFHRU5UX0ZMQUdTPSRPUklHX0FHRU5UX0ZMQUdTCisgIE9SSUdfU05NUF9TTk1QRF9QT1JUPSRTTk1QX1NOTVBEX1BPUlQKKyAgU05NUF9TTk1QRF9QT1JUPSIke1NOTVBfQUdFTlRYX1BPUlR9IgorICBTVEFSVEFHRU5UCisgIFNOTVBfU05NUERfUE9SVD0kT1JJR19TTk1QX1NOTVBEX1BPUlQKKworICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKKyAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKKyAgIyBzdG9wIHRoZSBzdWJhZ2VudAorICBTVE9QQUdFTlQKKworICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCisjZmkKKworIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKK1NUT1BBR0VOVAorCisjIGFsbCBkb25lICh3aGV3KQorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE5NjQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFByb3h5IFNFVCBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QUk9YWV9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgICAgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisKKyMgWFhYOiB1Y2Qtc25tcC9wcm94eSBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgVENQIC0tIHJlbW92ZSB0aGlzIG9uY2UgaXQgZG9lcworWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwIiAtbyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwNiIgXSAmJiBTS0lQIFRlc3QgZG9lcyBub3Qgc3VwcG9ydCBUQ1AKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisjIGNvbmZpZyB0aGUgcHJveHkKK0NPTkZJR0FHRU5UIHByb3h5IC10IDIgLXIgMSAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSAuMS4zLjYuMS4yLjEuMQorCisjIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYix3aW5FeHRETEwgLURwcm94eSIKK1NUQVJUQUdFTlQKKworIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgorI0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworI0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCIKKworI2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorICAjIHRlc3QgdGhlIHByb3h5IHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KKworICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKKyAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgorICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKKyAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3Byb3h5LmNvbmYiCisgIGVjaG8gInJ3Y29tbXVuaXR5IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIGlmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1ZHA2IiAtbyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInRjcDYiIF07dGhlbgorICAgIGVjaG8gInJ3Y29tbXVuaXR5NiB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBmaQorICBlY2hvICJwc3lzY29udGFjdCB0ZXN0Y29udGFjdCIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1EbWliX2luaXQiCisgIE9SSUdfU05NUF9TTk1QRF9QT1JUPSRTTk1QX1NOTVBEX1BPUlQKKyAgU05NUF9TTk1QRF9QT1JUPSIke1NOTVBfQUdFTlRYX1BPUlR9IgorICBTVEFSVEFHRU5UCisgIFNOTVBfU05NUERfUE9SVD0kT1JJR19TTk1QX1NOTVBEX1BPUlQKKworICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisKKyAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogXCIqdGVzdGNvbnRhY3QiCisKKyAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisKKyAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorICAgIENBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCBzIHRlc3RuZXdjb250YWN0IgorCisgICAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogXCIqdGVzdG5ld2NvbnRhY3QiCisKKyAgICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKworCSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisJQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCQorCUNIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IFwiKnRlc3RuZXdjb250YWN0IgorICAgIGZpCisgIGZpCisKKyAgIyBzdG9wIHRoZSBzdWJhZ2VudAorICBTVE9QQUdFTlQKKworICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCisjZmkKKworIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKK1NUT1BBR0VOVAorCisjIGFsbCBkb25lICh3aGV3KQorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMjc4NzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFByb3h5IGlsbGVnYWwgU0VUIGhhbmRsaW5nIHN1cHBvcnQKKworU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BST1hZX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCitTS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKK1NLSVBJRiAgICBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKworIyBYWFg6IHVjZC1zbm1wL3Byb3h5IGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBUQ1AgLS0gcmVtb3ZlIHRoaXMgb25jZSBpdCBkb2VzCitbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3AiIF0gJiYgU0tJUCBUZXN0IGRvZXMgbm90IHN1cHBvcnQgVENQCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworIyBjb25maWcgdGhlIHByb3h5CitDT05GSUdBR0VOVCBwcm94eSAtdCAyIC1yIDEgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0gLjEuMy42LjEuMi4xLjEKKworIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIsd2luRXh0RExMIC1EcHJveHkiCitTVEFSVEFHRU5UCisKKyMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKKyNDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKKyNDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QiCisKKyNpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKyAgIyB0ZXN0IHRoZSBwcm94eSBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCisKKyAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCisgIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQorICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCisgIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9wcm94eS5jb25mIgorICBlY2hvICJyd2NvbW11bml0eSB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBpZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidWRwNiIgLW8gIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ0Y3A2IiBdO3RoZW4KKyAgICBlY2hvICJyd2NvbW11bml0eTYgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgZmkKKyMgIGVjaG8gInN5c2NvbnRhY3QgdGVzdGNvbnRhY3QiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtRG1pYl9pbml0IgorICBPUklHX1NOTVBfU05NUERfUE9SVD0kU05NUF9TTk1QRF9QT1JUCisgIFNOTVBfU05NUERfUE9SVD0iJHtTTk1QX0FHRU5UWF9QT1JUfSIKKyAgU1RBUlRBR0VOVAorICBTTk1QX1NOTVBEX1BPUlQ9JE9SSUdfU05NUF9TTk1QRF9QT1JUCisKKyAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKyAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCisgIAorICAjIHdlIGRvbid0IGtub3cgdGhlIHJlYWwgdmFsdWUsIHVuZm9ydHVuYXRlbHksIHNvIHdlIHRlc3QgZm9yIHdoYXQKKyAgIyB3ZSBzaG91bGQgKm5vdCogZ2V0IGJhY2suCisgIENIRUNLQ09VTlQgMCAiLjEuMy42LjEuMi4xLjEuNC4wID0gTm8gU3VjaCBPYmplY3QiCisKKyAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAwOyB0aGVuCisKKyAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorICAgIENBUFRVUkUgInNubXBzZXQgLU9uIC1JciAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAgaSA0MiIKKworICAgICMgNS4wLnggc25tcHNldCBzaG93cyBlcnJvciBvbiBzaW5nbGUgbGluZQorICAgICNDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gV3JvbmcgVHlwZSIKKyAgICAjIDUuMS54IHNubXBzZXQgc2hvd3MgZXJyb3Igb24gbXVsdGlwbGUgbGluZXMKKyAgICBDSEVDSyAiUmVhc29uOiB3cm9uZ1R5cGUiCisgICAgQ0hFQ0sgIkZhaWxlZCBvYmplY3Q6IC4xLjMuNi4xLjIuMS4xLjQuMCIKKworICBmaQorCisgICMgc3RvcCB0aGUgc3ViYWdlbnQKKyAgU1RPUEFHRU5UCisKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRworI2ZpCisKKyMgc3RvcCB0aGUgbWFzdGVyIGFnZW50CitTVE9QQUdFTlQKKworIyBhbGwgZG9uZSAod2hldykKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNjIzZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZQpAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjEgdmFjbSBhY2NlcHRhbmNlIHN1cHBvcnQKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCisjIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKKyMgdGVzdGNvbW11bml0eTIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEKKyMgVGhpcyBjYXNlIHRlc3QgZm9yIHN1Y2Nlc3NmdWwgYWNjZXNzCitzbm1wX3ZlcnNpb249djEKKy4gLi9TdmFjbWNvbmZpZworCitBR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC1JLXdpbkV4dERMTCIKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIgCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6ICIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3MjM3MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X3NpbXBsZQpAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjIgdmFjbSBhY2NlcHRhbmNlIHN1cHBvcnQKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKKyMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAorIyB0ZXN0Y29tbXVuaXR5MiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMQorIyBUaGlzIGNhc2UgdGVzdCBmb3Igc3VjY2Vzc2Z1bCBhY2Nlc3MKKworc25tcF92ZXJzaW9uPXYyYworLiAuL1N2YWNtY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiIAorCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBTVFJJTkc6IgorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczogIgorCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDRkMGRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9zaW1wbGUKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYzIHZhY20gYWNjZXB0YW5jZSBzdXBwb3J0CisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIENvbmZpZ3VyYXRpb246CisjaW5pdGlhbDEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBkZW55IG90aGVycworI2luaXRpYWwyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xIAorI1RoaXMgY2FzZSB0ZXN0IGZvciBzdWNjZXNzZnVsIGFjY2VzcworCitzbm1wX3ZlcnNpb249djMKKy4gLi9TdjN2YWNtY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYzIC1hIE1ENSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC11IGluaXRpYWwxIC1sIGFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIgCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12MyAtYSBNRDUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAtdSBpbml0aWFsMiAtbCBhbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiIAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiAiCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2Y5NGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYxIHZhY20gZGVuaWFsIHN1cHBvcnQKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKKyMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAorIyB0ZXN0Y29tbXVuaXR5MiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMQorIyBUaGlzIGNhc2UgdGVzdCBmb3IgZGVuaWVkIGFjY2VzcworCitzbm1wX3ZlcnNpb249djEKKy4gLi9TdmFjbWNvbmZpZworCitTVEFSVEFHRU5UCisKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0tPUkRJRSAiUmVhc29uOiAobm9TdWNoTmFtZSkgVGhlcmUgaXMgbm8gc3VjaCB2YXJpYWJsZSBuYW1lIGluIHRoaXMgTUlCLiIKKworCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIgorCitDSEVDS09SRElFICJSZWFzb246IChub1N1Y2hOYW1lKSBUaGVyZSBpcyBubyBzdWNoIHZhcmlhYmxlIG5hbWUgaW4gdGhpcyBNSUIuIgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzYyYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfc2ltcGxlCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MiB2YWNtIGRlbmlhbCBzdXBwb3J0CisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorU0tJUElGTk9UIFVTSU5HX01JQklJX1ZBQ01fQ09ORl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgorIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCisjIHRlc3Rjb21tdW5pdHkyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xCisjIFRoaXMgY2FzZSB0ZXN0IGZvciBkZW5pZWQgYWNjZXNzCisKK3NubXBfdmVyc2lvbj12MmMKKy4gLi9TdmFjbWNvbmZpZworCitTVEFSVEFHRU5UCisKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCBhdmFpbGFibGUgb24gdGhpcyBhZ2VudCBhdCB0aGlzIE9JRCIKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBObyBTdWNoIE9iamVjdCBhdmFpbGFibGUgb24gdGhpcyBhZ2VudCBhdCB0aGlzIE9JRCIKKworQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS41LjAgcyBkdW1teSIKK0NIRUNLT1JESUUgIlJlYXNvbjogbm9BY2Nlc3MiCisKK0NBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNS4wIHMgZHVtbXkiCitDSEVDS09SRElFICJSZWFzb246IG5vQWNjZXNzIgorCitDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0cndjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS41LjAgcyBkdW1teSIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjUuMCA9IFNUUklORzogXCIqZHVtbXkiCisKK0NBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Ryb2NvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjUuMCBzIGR1bW15IgorQ0hFQ0tPUkRJRSAiUmVhc29uOiBub0FjY2VzcyIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjMDAwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgdmFjbSBkZW5pYWwgc3VwcG9ydAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBDb25maWd1cmF0aW9uOgorI2luaXRpYWwxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgZGVueSBvdGhlcnMKKyNpbml0aWFsMiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMSAKKyNUaGlzIGNhc2UgdGVzdCBmb3IgZGVuaWVkIGFjY2VzcworCitzbm1wX3ZlcnNpb249djMKKy4gLi9TdjN2YWNtY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYzIC1hIE1ENSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC11IGluaXRpYWwxIC1sIGFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIgCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IGF2YWlsYWJsZSBvbiB0aGlzIGFnZW50IGF0IHRoaXMgT0lEIgorCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12MyAtYSBNRDUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAtdSBpbml0aWFsMiAtbCBhbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiIAorCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBObyBTdWNoIE9iamVjdCBhdmFpbGFibGUgb24gdGhpcyBhZ2VudCBhdCB0aGlzIE9JRCIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzZWU2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X3NpbXBsZQpAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAxc3QgQ1BVIG9uIFNvbGFyaXMgdXNpbmcgSE9TVC1SRVNPVVJDRVMKKworaWYgdGVzdCAieGB1bmFtZSAtc2AiICE9ICJ4U3VuT1MiIDsgdGhlbgorICAgIFNLSVAgIm5vdCBydW5uaW5nIHNvbGFyaXMiCitmaQorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorU0tJUElGTk9UIFVTSU5HX0hPU1RfSFJfREVWSUNFX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5CisuIC4vU3YxY29uZmlnCisKK1NUQVJUQUdFTlQKKworIyBhc2sgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlyc3QgQ1BVIGluIHRoZSBzeXN0ZW0KKworQ0FQVFVSRSAic25tcGdldG5leHQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4yNS4zLjIuMS4zLjc2NyIKKworQ0hFQ0tPUkRJRSAnID0gU1RSSU5HOiAiKkNQVSAnCisKK1NUT1BBR0VOVAorICAKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2ExMTdmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX3NpbXBsZQpAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBpbml0aWFsIGxvYWQgZGV2aWNlIG9uIFNvbGFyaXMgdXNpbmcgSE9TVC1SRVNPVVJDRVMKKworaWYgdGVzdCBgdW5hbWUgLXNgICE9ICJTdW5PUyIgOyB0aGVuCisgICAgIyBhIGJvZ3VzIHNraXAgZm9yICFzdW5zCisgICAgU0tJUCAgIm5vdCBydW5uaW5nIHNvbGFyaXMiCitmaQorCitTS0lQSUZOT1QgVVNJTkdfSE9TVF9IUl9TWVNURU1fTU9EVUxFCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5CisuIC4vU3YxY29uZmlnCisKK1NUQVJUQUdFTlQKKworIyBhc2sgZm9yIHRoZSBpbmRleCBvZiB0aGUgaW5pdGlhbCBkZXZpY2UgKGhyU3lzdGVtSW5pdGlhbExvYWREZXZpY2UuMCkKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4yNS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLT1JESUUgIl4uMS4zLjYuMS4yLjEuMjUuMS4zLjAgPSBJTlRFR0VSOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2MmIzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfc2ltcGxlCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIHVwdGltZSB1c2luZyBIT1NULVJFU09VUkNFUworCitTS0lQSUZOT1QgVVNJTkdfSE9TVF9IUl9TWVNURU1fTU9EVUxFCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKKy4gLi9TdjFjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMjUuMS4xLjAiCisKK1NUT1BBR0VOVAorICAgIAorQ0hFQ0tPUkRJRSAiXi4xLjMuNi4xLjIuMS4yNS4xLjEuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTVkZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfc2ltcGxlCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIHN3YXAgb24gU29sYXJpcyB1c2luZyBIT1NULVJFU09VUkNFUworCitpZiB0ZXN0IGB1bmFtZSAtc2AgIT0gIlN1bk9TIiA7IHRoZW4KKyAgICBTS0lQICJub3QgcnVubmluZyBzb2xhcmlzIgorZmkKKworSVNERUZJTkVEIFVTSU5HX0hPU1RfSFJfU1RPUkFHRV9NT0RVTEUgfHwgSVNERUZJTkVEIFVTSU5HX0hPU1RfSFJIX1NUT1JBR0VfTU9EVUxFIHx8IFNLSVAgIk5vdCB1c2luZyBoclN0b3JhZ2UiCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKKy4gLi9TdjFjb25maWcKKworU1RBUlRBR0VOVAorCisjIGFzayBmb3IgaHJTdG9yYWdlU2l6ZS4xMCB3aGljaCByZXBvcnRzIG92ZXJhbGwgc3dhcCBzaXplCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMjUuMi4zLjEuNS4xMCIKKworU1RPUEFHRU5UCisKK0NIRUNLT1JESUUgIl4uMS4zLjYuMS4yLjEuMjUuMi4zLjEuNS4xMCA9IElOVEVHRVI6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTU0ZGlzbWFucGluZ21pYl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTRkaXNtYW5waW5nbWliX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNmZmUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTU0ZGlzbWFucGluZ21pYl9zaW1wbGUKQEAgLTAsMCArMSwxMTYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERJU01BTiBQSU5HIE1JQgorCitbICIkVUlEIiA9IDAgXSB8fCBTS0lQICJOb3QgcGVybWl0dGVkIHRvIGNyZWF0ZSByYXcgc29ja2V0cyIKK1NLSVBJRk5PVCBVU0lOR19ESVNNQU5fUElOR19NSUJfTU9EVUxFCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorCisjIFNOTVB2Mi1UQworYWN0aXZlPTEKK2NyZWF0ZUFuZFdhaXQ9NQorZGVzdHJveT02CisjIERJU01BTi1QSU5HLU1JQgorRElTTUFOX1BJTkdfTUlCPS4xLjMuNi4xLjIuMS44MC4xCitwaW5nQ3RsRW50cnk9JHtESVNNQU5fUElOR19NSUJ9LjIuMQorcGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlPSR7cGluZ0N0bEVudHJ5fS4zCitwaW5nQ3RsVGFyZ2V0QWRkcmVzVHlwZUlwdjQ9MQorcGluZ0N0bFRhcmdldEFkZHJlc3M9JHtwaW5nQ3RsRW50cnl9LjQKK3BpbmdDdGxQcm9iZUNvdW50PSR7cGluZ0N0bEVudHJ5fS43CitwaW5nQ3RsQWRtaW5TdGF0dXM9JHtwaW5nQ3RsRW50cnl9LjgKK3BpbmdDdGxBZG1pblN0YXR1c0VuYWJsZWQ9MQorcGluZ0N0bEZyZXF1ZW5jeT0ke3BpbmdDdGxFbnRyeX0uMTAKK3BpbmdDdGxEZXNjcj0ke3BpbmdDdGxFbnRyeX0uMTcKK3BpbmdDdGxSb3dTdGF0dXM9JHtwaW5nQ3RsRW50cnl9LjIzCitwaW5nUmVzdWx0c0VudHJ5PSR7RElTTUFOX1BJTkdfTUlCfS4zLjEKK3BpbmdSZXN1bHRzUHJvYmVSZXNwb25zZXM9JHtwaW5nUmVzdWx0c0VudHJ5fS43CitwaW5nUmVzdWx0c1NlbnRQcm9iZXM9JHtwaW5nUmVzdWx0c0VudHJ5fS44CisjIFRlc3QgY29uZmlndXJhdGlvbgorVEFSR0VUX0FERFJFU1M9MTI3LjAuMC4xCitJRFhQRlg9OC43OC4xMDEuMTE2LjQ1LjgzLjc4Ljc3LjgwLjYuODQuNDkuNTMuNTIgIyAiTmV0LVNOTVAiLiJUMTU0IgorSURYUz0iJHtJRFhQRlh9Ljk1LjQ5ICR7SURYUEZYfS45NS41MCAke0lEWFBGWH0uOTUuNTEiCitQUk9CRV9DT1VOVD01CisKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorc25tcF93cml0ZV9hY2Nlc3M9J2FsbCcKKy4gLi9TdjFjb25maWcKKworU1RBUlRBR0VOVAorCitmb3IgSURYIGluICRJRFhTOyBkbworCitDQVBUVVJFICJzbm1wc2V0IC1PbmUgJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdjEgICAgICAgICAgXAorICAgICAgICAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAgIFwKKyAgICAgICAgICRwaW5nQ3RsUm93U3RhdHVzLiRJRFggaSAkZGVzdHJveSIKKworQ0hFQ0sgIl4kcGluZ0N0bFJvd1N0YXR1cy4kSURYID0gSU5URUdFUjogJGRlc3Ryb3kiCisKK0NBUFRVUkUgInNubXBzZXQgLU9uZSAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12MSAgICAgICAgICBcCisgICAgICAgICAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICAgXAorICAgICAgICAgJHBpbmdDdGxSb3dTdGF0dXMuJElEWCBpICRjcmVhdGVBbmRXYWl0IgorCitDSEVDSyAiXiRwaW5nQ3RsUm93U3RhdHVzLiRJRFggPSBJTlRFR0VSOiAkY3JlYXRlQW5kV2FpdCIKKworQ0FQVFVSRSAic25tcHNldCAtT25lICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYxICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgICAgICAgICAgIFwKKyAgICAgICAgICRwaW5nQ3RsVGFyZ2V0QWRkcmVzc1R5cGUuJElEWCBpICRwaW5nQ3RsVGFyZ2V0QWRkcmVzVHlwZUlwdjQgIFwKKyAgICAgICAgICRwaW5nQ3RsVGFyZ2V0QWRkcmVzcy4kSURYIHMgJFRBUkdFVF9BRERSRVNTICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRwaW5nQ3RsRnJlcXVlbmN5LiRJRFggdSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRwaW5nQ3RsRGVzY3IuJElEWCBzIFNjcmlwdEdlbmVyYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRwaW5nQ3RsUHJvYmVDb3VudC4kSURYIHUgJHtQUk9CRV9DT1VOVH0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRwaW5nQ3RsQWRtaW5TdGF0dXMuJElEWCBpICRwaW5nQ3RsQWRtaW5TdGF0dXNFbmFibGVkIgorCitDSEVDSyAiXiRwaW5nQ3RsQWRtaW5TdGF0dXMuJElEWCA9IElOVEVHRVI6ICRwaW5nQ3RsQWRtaW5TdGF0dXNFbmFibGVkIgorCitDQVBUVVJFICJzbm1wc2V0IC1PbmUgJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdjEgICAgICAgICAgXAorICAgICAgICAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAgIFwKKyAgICAgICAgICRwaW5nQ3RsUm93U3RhdHVzLiRJRFggaSAkYWN0aXZlIgorCitDSEVDSyAiXiRwaW5nQ3RsUm93U3RhdHVzLiRJRFggPSBJTlRFR0VSOiAkYWN0aXZlIgorCitkb25lCisKK3NsZWVwICR7UFJPQkVfQ09VTlR9CitzbGVlcCAyCisKK2ZvciBJRFggaW4gJElEWFM7IGRvCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYxICAgICAgICAgICBcCisgICAgICAgICAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICAgXAorICAgICAgICAgJHBpbmdSZXN1bHRzU2VudFByb2Jlcy4kSURYIgorCitDSEVDSyAiXiRwaW5nUmVzdWx0c1NlbnRQcm9iZXMuJElEWCA9IEdhdWdlMzI6ICR7UFJPQkVfQ09VTlR9IgorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12MSAgICAgICAgICAgXAorICAgICAgICAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAgIFwKKyAgICAgICAgICRwaW5nUmVzdWx0c1Byb2JlUmVzcG9uc2VzLiRJRFgiCisKK0NIRUNLICJeJHBpbmdSZXN1bHRzUHJvYmVSZXNwb25zZXMuJElEWCA9IEdhdWdlMzI6ICR7UFJPQkVfQ09VTlR9IgorCitkb25lCisKKyMgRGVsZXRlIGZpcnN0IHJvdyBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyByb3dzIGluIHRoZSB0YWJsZS4KKworZm9yIElEWCBpbiAkSURYUzsgZG8KKworQ0FQVFVSRSAic25tcHNldCAtT25lICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYxICAgICAgICAgIFwKKyAgICAgICAgICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgICBcCisgICAgICAgICAkcGluZ0N0bFJvd1N0YXR1cy4kSURYIGkgJGRlc3Ryb3kiCisKK0NIRUNLICJeJHBpbmdDdGxSb3dTdGF0dXMuJElEWCA9IElOVEVHRVI6ICRkZXN0cm95IgorCiticmVhaworCitkb25lCisKK1NUT1BBR0VOVAorCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwYmJiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X3NpbXBsZQpAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKKyMgc25tcG5ldHN0YXQgdGVzdCBvbmx5IHdvcmtzIHdpdGggVURQIG9yIFRDUAoraWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4IiAtbyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dWRwIiBdOyB0aGVuCisgIHByb3RvPXVkcAorICBIRUFERVIgImlmIHNubXBuZXRzdGF0IGZpbmRzIHRoZSBydW5uaW5nIGFnZW50IGluIHVkcFRhYmxlIgorICBTS0lQSUZOT1QgVVNJTkdfTUlCSUlfVURQVEFCTEVfTU9EVUxFCitlbGlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcCIgXTsgdGhlbgorICBwcm90bz10Y3AKKyAgSEVBREVSICJpZiBzbm1wbmV0c3RhdCBmaW5kcyB0aGUgcnVubmluZyBhZ2VudCBpbiB0Y3BUYWJsZSIKKyAgU0tJUElGTk9UIFVTSU5HX01JQklJX1RDUFRBQkxFX01PRFVMRQorZWxzZQorICBIRUFERVIgImlmIHNubXBuZXRzdGF0IGZpbmRzIHRoZSBydW5uaW5nIGFnZW50IGluIHVkcFRhYmxlL3RjcFRhYmxlIgorICBTS0lQIE5vdCB1c2luZyBUQ1Agb3IgVURQIHRyYW5zcG9ydAorZmkKKworIyBvbiBzb21lIHN5c3RlbXMgdGhlIGFnZW50IG5lZWRzIHRvIGJlIHJ1biBhcyByb290IHRvIGFjY2VzcyB1ZHBUYWJsZS90Y3BUYWJsZQorIyAtIGVsc2UgZm9yY2Ugc2tpcAorY2FzZSAieGB1bmFtZSAtc2AiIGluCisgIHhBSVgpICAgICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVAgTm90IHJ1bm5pbmcgYXMgcm9vdDs7CisgIHhIUC1VWCkgICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVAgTm90IHJ1bm5pbmcgYXMgcm9vdDs7CisgIHhJUklYKikgICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVAgTm90IHJ1bm5pbmcgYXMgcm9vdDs7CisgIHhOZXRCU0QpICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVAgTm90IHJ1bm5pbmcgYXMgcm9vdDs7CisgIHhPcGVuQlNEKSBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVAgTm90IHJ1bm5pbmcgYXMgcm9vdDs7CisgIHhPU0YxKSAgICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVAgTm90IHJ1bm5pbmcgYXMgcm9vdDs7Citlc2FjCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworCisjIG1ha2Ugc3VyZSBzbm1wbmV0c3RhdCBjYW4gYmUgZXhlY3V0ZWQKK1NOTVBORVRTVEFUPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQiCitbIC14ICIkU05NUE5FVFNUQVQiIF0gfHwgU0tJUCBzbm1wbmV0c3RhdCBub3QgY29tcGlsZWQKKworc25tcF92ZXJzaW9uPXYyYworLiAuL1N2MmNjb25maWcKKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAiJFNOTVBORVRTVEFUIC1DbiAtQ3AgJHByb3RvIC0kc25tcF92ZXJzaW9uIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKK0NIRUNLRVhBQ1QgIjEyNy4wLjAuMS4kU05NUF9TTk1QRF9QT1JUIgorIyBtdWx0aXBsZSBvY2N1cnJlbmNlcyAoZXNwZWNpYWxseSBpbiB0Y3BUYWJsZSkgYXJlIGZpbmUKK2lmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KKyAgICByZXR1cm5fdmFsdWU9MAorZWxzZQorICAgIHJldHVybl92YWx1ZT0xCitmaQorCitTVE9QQUdFTlQKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjFzbm1wVGFyZ2V0QWRkcl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjFzbm1wVGFyZ2V0QWRkcl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlMDk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MXNubXBUYXJnZXRBZGRyX3NpbXBsZQpAQCAtMCwwICsxLDE0MiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgc25tcFRhcmdldEFkZHJUYWJsZQorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19UQVJHRVRfU05NUFRBUkdFVEFERFJFTlRSWV9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCisjIENoZWNrIHRoYXQgdGhlIHRhYmxlIHN0YXJ0cyBvdXQgZW1wdHkKK0NBUFRVUkUgInNubXBnZXRuZXh0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMSIKKworQ0hFQ0tBTkRESUUgIl4uMS4zLjYuMS42LjMuMTIuMS4yLjEiCisKKyMgQ3JlYXRlIGFuIGVudHJ5IHdpdGggaW5kZXggJycgKGVtcHR5KQorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOSBpIDUiCisKK0NIRUNLT1JESUUgIm5vQ3JlYXRpb24iCisKKyMgQ3JlYXRlIGFuIGVudHJ5IHdpdGggaW5kZXggJzAxMjM0NTY3ODlBMTIzNDU2Nzg5QjEyMzQ1Njc4OUMxMjMnIChvdmVybG9uZykKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuMzAuMzEuMzIuMzMuMzQuMzUuMzYuMzcuMzguMzkuNjUuMzEuMzIuMzMuMzQuMzUuMzYuMzcuMzguMzkuNjYuMzEuMzIuMzMuMzQuMzUuMzYuMzcuMzguMzkuNjcuMzEuMzIuMzMgaSA1IgorCitDSEVDS09SRElFICJub0NyZWF0aW9uIgorCisjIENyZWF0ZSBhbiBlbnRyeSB3aXRoIGluZGV4ICdCXDBBJworQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42Ni4wLjY1IGkgNSIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjYuMC42NSA9IElOVEVHRVI6IDUiCisKKyMgQ2hlY2sgdGhhdCB0aGUgdGFibGUgY29udGFpbnMgdGhlICdCXDBBJyBlbnRyeSBhbmQgbm8gb3RoZXIKK0NBUFRVUkUgInNubXB3YWxrIC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS45IgorCitDSEVDSyAiXi4xLjMuNi4xLjYuMy4xMi4xLjIuMS45IgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjYuMC42NSA9IgorCisjIERlbGV0ZSBhbiBlbnRyeSB3aXRoIGluZGV4ICdCXDBBJworQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42Ni4wLjY1IGkgNiIKKworIyBDcmVhdGUgYW4gZW50cnkgd2l0aCBpbmRleCAnQScKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjUgaSA1IgorCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42NSA9IElOVEVHRVI6IDUiCisKKyMgQ2hlY2sgdGhhdCB0aGUgdGFibGUgY29udGFpbnMgb25lIGFuZCBvbmx5IG9uZSBlbnRyeQorQ0FQVFVSRSAic25tcHdhbGsgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkiCisKK0NIRUNLICJeLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkiCisKKyMgQ2hlY2sgdGhhdCB0aGUgZW50cnkgaXMgdGhlIGV4cGVjdGVkIG9uZQorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjUgPSBJTlRFR0VSOiAzIgorCisjIENoZWNrIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBzZXQgYXMgZXhwZWN0ZWQKK0NBUFRVUkUgInNubXBnZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjIuNjUgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjMuNjUgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjQuNjUgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjUuNjUgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjcuNjUgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjguNjUgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjUiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS4yLjY1ID0gTm8gU3VjaCBJbnN0YW5jZSIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS4zLjY1ID0gTm8gU3VjaCBJbnN0YW5jZSIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS40LjY1ID0gSU5URUdFUjogMTUwMCIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS41LjY1ID0gSU5URUdFUjogMyIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1ID0gU1RSSU5HOiAiCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNy42NSA9IE5vIFN1Y2ggSW5zdGFuY2UiCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuOC42NSA9IElOVEVHRVI6IDMiCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuOS42NSA9IElOVEVHRVI6IDMiCisKKyMgVHJ5IHRvIHNldCB0aW1lb3V0IDwgMAorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lIC1JciAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjQuNjUgaSAtMSIKKworQ0hFQ0tPUkRJRSAid3JvbmdWYWx1ZSIKKworIyBUcnkgdG8gc2V0IHRpbWVvdXQgdG8gMjE0NzQ4MzY0NworQ0FQVFVSRSAic25tcHNldCAtT24gLU9lIC1JciAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjQuNjUgaSAyMTQ3NDgzNjQ3IgorCitDSEVDS09SRElFICJeLjEuMy42LjEuNi4zLjEyLjEuMi4xLjQuNjUgPSBJTlRFR0VSOiAyMTQ3NDgzNjQ3IgorCisjIEZldGNoIGFuZCB2ZXJpZnkgdGhhdCB0aGUgdGltZW91dCBzdGlsbCBpcyAyMTQ3NDgzNjQ3CitDQVBUVVJFICJzbm1wZ2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS40LjY1IgorCitDSEVDS09SRElFICJeLjEuMy42LjEuNi4zLjEyLjEuMi4xLjQuNjUgPSBJTlRFR0VSOiAyMTQ3NDgzNjQ3IgorCisjIFRyeSB0byBzZXQgcmV0cnkgY291bnQgPCAwCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgLUlyICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNS42NSBpIC0xIgorCitDSEVDS09SRElFICJ3cm9uZ1ZhbHVlIgorCisjIFRyeSB0byBzZXQgcmV0cnkgY291bnQgPiAyNTUKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAtSXIgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS41LjY1IGkgMjU2IgorCitDSEVDS09SRElFICJ3cm9uZ1ZhbHVlIgorCisjIFRyeSB0byBzZXQgdGFnbGlzdCB0byBhIHNpbmdsZSB2YWx1ZQorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSBzIGFsZmEiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1ID0gU1RSSU5HOiBhbGZhIgorCisjIEZldGNoIGFuZCB2ZXJpZnkgdGhhdCB0aGUgdGFnbGlzdCBoYXZlIGtlcHQgaXQncyB2YWx1ZQorQ0FQVFVSRSAic25tcGdldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgPSBTVFJJTkc6IGFsZmEiCisKKyMgVHJ5IHRvIHNldCB0YWdsaXN0IHRvIG11bHRpcGxlIHZhbHVlcworQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSB4IDYxNmM2NjYxMjA2MjY1NzQ2MSIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgPSBTVFJJTkc6IGFsZmEgYmV0YSIKKworIyBGZXRjaCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHRhZ2xpc3QgaGF2ZSBrZXB0IGl0J3MgdmFsdWVzCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IgorCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSA9IFNUUklORzogYWxmYSBiZXRhIgorCisjIFRyeSB0byBzZXQgdGFnbGlzdCB0byBhIHZhbHVlIHdpdGggYW4gZW1iZWRkZWQgbnVsIGNoYXJhY3RlcgorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSB4IDYxNmMwMDY2NjEiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1ID0gU1RSSU5HOiBhbC5mYSIKKworIyBUcnkgdG8gc2V0IHRhZ2xpc3QgdG8gYSB2YWx1ZSB3aXRoIGEgbGVhZGluZyBzcGFjZQorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSB4IDIwNjE2YzY2NjEiCisKK0NIRUNLT1JESUUgIndyb25nVmFsdWUiCisKKyMgVHJ5IHRvIHNldCB0YWdsaXN0IHRvIGEgdmFsdWUgd2l0aCBhIHRyYWlsaW5nIHNwYWNlCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IHggNjE2YzY2NjEyMCIKKworQ0hFQ0tPUkRJRSAid3JvbmdWYWx1ZSIKKworIyBUcnkgdG8gc2V0IHRhZ2xpc3QgdG8gbXVsdGlwbGUgdmFsdWVzIHNlcGFyYXRlZCBieSBtb3JlIHRoYW4gb24gd2hpdGVzcGFjZQorIyBjaGFyYWN0ZXIKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgeCA2MTZjNjY2MTIwMjA2MjY1NzQ2MSIKKworQ0hFQ0tPUkRJRSAid3JvbmdWYWx1ZSIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1ZjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZQpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAiZnVsbCBzbm1wd2FsayAoU05NUHYyYykgYWdhaW5zdCBhZ2VudCAobWF5IHRha2UgdGltZSkiCisKK2lmIHRlc3QgYHVuYW1lIC1zYCA9ICJIUC1VWCIgOyB0aGVuCisgICAgaWYgdGVzdCBgaWQgLXVgICE9ICIwIiA7IHRoZW4KKyAgICAgICAgIyBUaGUgYWdlbnQgbmVlZHMgdG8gYmUgcnVuIGFzIHJvb3QgLSBlbHNlIGZvcmNlIHNraXAKKyAgICAgICAgU0tJUCBBZ2VudCBtdXN0IGJlIHJ1biBhdCByb290IG9uIEhQLVVYCisgICAgZmkKK2ZpCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworCisjIG1ha2Ugc3VyZSBzbm1wd2FsayBjYW4gYmUgZXhlY3V0ZWQKK1NOTVBXQUxLPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcHdhbGsiCitbIC14ICIkU05NUFdBTEsiIF0gfHwgU0tJUCBzbm1wd2FsayBub3QgY29tcGlsZWQKKworc25tcF92ZXJzaW9uPXYyYworLiAuL1N2MmNjb25maWcKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgaGlnaGVyIHRpbWVvdXQvcmV0cnkgdmFsdWVzIGZvciBzYWZldHkKK1RJTUVPVVQ9MTAKK1JFVFJZPTUKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgdGVzdGNvbW11bml0eSAtdCAkVElNRU9VVCAtciAkUkVUUlkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMSIKK0lTREVGSU5FRCBVU0lOR19XSU5FWFRETExfTU9EVUxFIHx8IElTREVGSU5FRCBVU0lOR19FVEhFUkxJS0VfTUlCX0RPVDNTVEFUU1RBQkxFX01PRFVMRSB8fCBDSEVDS0FORERJRSAiPSBXcm9uZyBUeXBlIChzaG91bGQgYmUgIgorQ0hFQ0tPUkRJRSAiTm8gbW9yZSB2YXJpYWJsZXMgbGVmdCBpbiB0aGlzIE1JQiBWaWV3IgorCitTVE9QQUdFTlQKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL05ldFNOTVBUZXN0VHJhbnNwb3J0LnBtIGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9OZXRTTk1QVGVzdFRyYW5zcG9ydC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJjZmVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9OZXRTTk1QVGVzdFRyYW5zcG9ydC5wbQpAQCAtMCwwICsxLDU0IEBACitCRUdJTiB7CisgICAgaWYgKGV4aXN0cygkRU5WeydzcmNkaXInfSkpIHsKKwlwdXNoIEBJTkMsICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0IjsKKyAgICB9IGVsc2lmICgtZCAiZnVsbHRlc3RzL3N1cHBvcnQiKSB7CisJcHVzaCBASU5DLCAiZnVsbHRlc3RzL3N1cHBvcnQiOworICAgIH0gZWxzaWYgKC1kICIuLi9zdXBwb3J0IikgeworCXB1c2ggQElOQywgIi4uL3N1cHBvcnQiOworICAgIH0KK30KKworcGFja2FnZSBOZXRTTk1QVGVzdFRyYW5zcG9ydDsKKwordXNlIE5ldFNOTVBUZXN0OwordXNlIFRlc3Q7Cit1c2UgU05NUDsKKworb3VyIEBJU0EgPSBxdyhOZXRTTk1QVGVzdCk7CisKK3N1YiBydW5fdGVzdHMgeworICAgIG15ICgkc2VsZikgPSBAXzsKKworICAgIHBsYW4odGVzdHMgPT4gMik7CisKKyAgICAjIHNldCBpdCB1cCB3aXRoIGEgc25tcHYzIFVTTSB1c2VyCisgICAgJHNlbGYtPmNvbmZpZ19hZ2VudCgiY3JlYXRldXNlciB0ZXN0dXNlciBNRDUgbm90YXJlYWxscGFzc3dvcmQiKTsKKyAgICAkc2VsZi0+Y29uZmlnX2FnZW50KCJyd3VzZXIgdGVzdHVzZXIiKTsKKyAgICAkc2VsZi0+Y29uZmlnX2FnZW50KCJzeXNjb250YWN0IGl0d29ya2VkIik7CisKKyAgICAkc2VsZi0+RElFKCJmYWlsZWQgdG8gc3RhcnQgdGhlIGFnZW50IikgaWYgKCEkc2VsZi0+c3RhcnRfYWdlbnQoKSk7CisKKyAgICAjIG5vdyBjcmVhdGUgYSBzZXNzaW9uIHRvIHRlc3QgdGhpbmdzIHdpdGgKKyAgICBteSAkc2Vzc2lvbiA9IG5ldyBTTk1QOjpTZXNzaW9uKERlc3RIb3N0ID0+ICRzZWxmLT57J2FnZW50YWRkcmVzcyd9LAorCQkJCSAgICBWZXJzaW9uID0+ICczJywKKwkJCQkgICAgU2VjTmFtZSA9PiAndGVzdHVzZXInLAorCQkJCSAgICBTZWNMZXZlbCA9PiAnYXV0aE5vUHJpdicsCisJCQkJICAgIEF1dGhQcm90byA9PiAnTUQ1JywKKwkJCQkgICAgQXV0aFBhc3MgPT4gJ25vdGFyZWFsbHBhc3N3b3JkJyk7CisKKyAgICBvayhyZWYoJHNlc3Npb24pLCAnU05NUDo6U2Vzc2lvbicsICJjcmVhdGVkIGEgc2Vzc2lvbiIpOworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgR0VUIHRlc3QKKyAgICBpZiAocmVmKCRzZXNzaW9uKSBlcSAnU05NUDo6U2Vzc2lvbicpIHsKKwkkdmFsdWUgPSAkc2Vzc2lvbi0+Z2V0KCdzeXNDb250YWN0LjAnKTsKKwlvaygkdmFsdWUsICdpdHdvcmtlZCcpOworICAgIH0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIGNsZWFudXAKKyAgICAkc2VsZi0+c3RvcF9hZ2VudCgpOworfQorCisKKzE7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QwMDFiYXNpYy50IGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMDAxYmFzaWMudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FmMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMDAxYmFzaWMudApAQCAtMCwwICsxLDkzIEBACisjIS91c3IvYmluL3BlcmwKKworIyBIRUFERVIgQmFzaWMgcGVybCBmdW5jdGlvbmFsaXR5IHRvIGEgVURQIGFnZW50CisKK0JFR0lOIHsKKyAgICBpZiAoZXhpc3RzKCRFTlZ7J3NyY2Rpcid9KSkgeworCXB1c2ggQElOQywgIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQiOworICAgIH0gZWxzaWYgKC1kICJmdWxsdGVzdHMvc3VwcG9ydCIpIHsKKwlwdXNoIEBJTkMsICJmdWxsdGVzdHMvc3VwcG9ydCI7CisgICAgfSBlbHNpZiAoLWQgIi4uL3N1cHBvcnQiKSB7CisJcHVzaCBASU5DLCAiLi4vc3VwcG9ydCI7CisgICAgfQorfQorCit1c2UgTmV0U05NUFRlc3Q7Cit1c2UgVGVzdDsKK3VzZSBTTk1QOworCitteSAkdmFsdWU7CisKK3BsYW4odGVzdHMgPT4gMTApOworCitvaygxLDEsInN0YXJ0ZWQgdXAiKTsKKworIyB1c2UgYSBiYXNpYyBVRFAgcG9ydAorbXkgJGRlc3RpbmF0aW9uID0gInVkcDpsb2NhbGhvc3Q6OTg5NyI7CisKK215ICR0ZXN0ID0gbmV3IE5ldFNOTVBUZXN0KGFnZW50YWRkcmVzcyA9PiAkZGVzdGluYXRpb24pOworCisjIHNldCBpdCB1cCB3aXRoIGEgc25tcHYzIFVTTSB1c2VyCiskdGVzdC0+Y29uZmlnX2FnZW50KCJjcmVhdGV1c2VyIHRlc3R1c2VyIE1ENSBub3RhcmVhbGxwYXNzd29yZCIpOworJHRlc3QtPmNvbmZpZ19hZ2VudCgicnd1c2VyIHRlc3R1c2VyIik7CiskdGVzdC0+Y29uZmlnX2FnZW50KCJzeXNjb250YWN0IGl0d29ya2VkIik7CisKKyR0ZXN0LT5ESUUoImZhaWxlZCB0byBzdGFydCB0aGUgYWdlbnQiKSBpZiAoISR0ZXN0LT5zdGFydF9hZ2VudCgpKTsKKworIyBub3cgY3JlYXRlIGEgc2Vzc2lvbiB0byB0ZXN0IHRoaW5ncyB3aXRoCitteSAkc2Vzc2lvbiA9IG5ldyBTTk1QOjpTZXNzaW9uKERlc3RIb3N0ID0+ICRkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiAnMycsCisJCQkJU2VjTmFtZSA9PiAndGVzdHVzZXInLAorCQkJCVNlY0xldmVsID0+ICdhdXRoTm9Qcml2JywKKwkJCQlBdXRoUHJvdG8gPT4gJ01ENScsCisJCQkJQXV0aFBhc3MgPT4gJ25vdGFyZWFsbHBhc3N3b3JkJyk7CisKK29rKHJlZigkc2Vzc2lvbiksICdTTk1QOjpTZXNzaW9uJywgImNyZWF0ZWQgYSBzZXNzaW9uIik7CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHRVQgdGVzdAorJHZhbHVlID0gJHNlc3Npb24tPmdldCgnc3lzQ29udGFjdC4wJyk7CisKK29rKCR2YWx1ZSwgJ2l0d29ya2VkJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR0VUTkVYVCB0ZXN0CiskdmFsdWUgPSAkc2Vzc2lvbi0+Z2V0bmV4dCgnc3lzQ29udGFjdCcpOworCitvaygkdmFsdWUsICdpdHdvcmtlZCcpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFVCB0ZXN0CiskdmFsdWUgPSAkc2Vzc2lvbi0+Z2V0KCdzeXNMb2NhdGlvbi4wJyk7CisKK29rKCR2YWx1ZSBuZSAneWVwJywgMSwgJ0Vuc3VyaW5nIHRoZSBzeXNMb2NhdGlvbiBzZXR0aW5nIGlzIG5vdCAieWVwIicpOworCitteSAkdmFyYmluZCA9IG5ldyBTTk1QOjpWYXJiaW5kKFsnc3lzTG9jYXRpb24nLCAnMCcsICd5ZXAnLCAnT0NURVRTVFInXSk7CisKKworJHZhbHVlID0gJHNlc3Npb24tPnNldCgkdmFyYmluZCk7CisKK29rKCgkdmFsdWUgPT0gMCksIDEsICdyZXR1cm4gdmFsdWUgZnJvbSBzZXQgd2FzIGEgc3VjY2VzcycpOworCitteSAkdmFsdWUgPSAkc2Vzc2lvbi0+Z2V0KCdzeXNMb2NhdGlvbi4wJyk7CisKK29rKCR2YWx1ZSwgJ3llcCcpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdFVEJVTEsgdGVzdAorJHZhcmJpbmQgPSBuZXcgU05NUDo6VmFyYmluZChbJ3N5c0NvbnRhY3QnXSk7CitteSBAdmFsdWVzID0gJHNlc3Npb24tPmdldGJ1bGsoMCwgMywgJHZhcmJpbmQpOworCitvaygkI3ZhbHVlcyA9PSAyKTsKK29rKCR2YWx1ZXNbMF0gZXEgJ2l0d29ya2VkJyk7CitvaygkdmFsdWVzWzJdIGVxICd5ZXAnKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBnZXR0YWJsZSgpIHRlc3QKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgY2xlYW51cAorJHRlc3QtPnN0b3BfYWdlbnQoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50IGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwMTVkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50CkBAIC0wLDAgKzEsMTggQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEhFQURFUiBQZXJsIFVEUCBJUHY0IFRlc3QKKworQkVHSU4geworICAgIGlmIChleGlzdHMoJEVOVnsnc3JjZGlyJ30pKSB7CisJcHVzaCBASU5DLCAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgImZ1bGx0ZXN0cy9wZXJsIikgeworCXB1c2ggQElOQywgImZ1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiLi4vcGVybCIpIHsKKwlwdXNoIEBJTkMsICIuLi9wZXJsIjsKKyAgICB9Cit9Cit1c2UgTmV0U05NUFRlc3RUcmFuc3BvcnQ7CisKK215ICR0ZXN0ID0gbmV3IE5ldFNOTVBUZXN0VHJhbnNwb3J0KGFnZW50YWRkcmVzcyA9PiAidWRwOmxvY2FsaG9zdDo5ODc1Iik7CiskdGVzdC0+cmVxdWlyZV9mZWF0dXJlKCJORVRTTk1QX1RSQU5TUE9SVF9VRFBfRE9NQUlOIik7CiskdGVzdC0+cnVuX3Rlc3RzKCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTA3YWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudApAQCAtMCwwICsxLDE4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBIRUFERVIgUGVybCBUQ1AgSVB2NCBUZXN0CisKK0JFR0lOIHsKKyAgICBpZiAoZXhpc3RzKCRFTlZ7J3NyY2Rpcid9KSkgeworCXB1c2ggQElOQywgIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICJmdWxsdGVzdHMvcGVybCIpIHsKKwlwdXNoIEBJTkMsICJmdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgIi4uL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiLi4vcGVybCI7CisgICAgfQorfQordXNlIE5ldFNOTVBUZXN0VHJhbnNwb3J0OworCitteSAkdGVzdCA9IG5ldyBOZXRTTk1QVGVzdFRyYW5zcG9ydChhZ2VudGFkZHJlc3MgPT4gInRjcDpsb2NhbGhvc3Q6OTg3NSIpOworJHRlc3QtPnJlcXVpcmVfZmVhdHVyZSgiTkVUU05NUF9UUkFOU1BPUlRfVENQX0RPTUFJTiIpOworJHRlc3QtPnJ1bl90ZXN0cygpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAzdWRwNi50IGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAzdWRwNi50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlY2IzMzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDN1ZHA2LnQKQEAgLTAsMCArMSwxOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgSEVBREVSIFBlcmwgVURQIElQdjYgVGVzdAorCitCRUdJTiB7CisgICAgaWYgKGV4aXN0cygkRU5WeydzcmNkaXInfSkpIHsKKwlwdXNoIEBJTkMsICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiZnVsbHRlc3RzL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICIuLi9wZXJsIikgeworCXB1c2ggQElOQywgIi4uL3BlcmwiOworICAgIH0KK30KK3VzZSBOZXRTTk1QVGVzdFRyYW5zcG9ydDsKKworbXkgJHRlc3QgPSBuZXcgTmV0U05NUFRlc3RUcmFuc3BvcnQoYWdlbnRhZGRyZXNzID0+ICJ1ZHA2Ols6OjFdOjk4NzUiKTsKKyR0ZXN0LT5yZXF1aXJlX2ZlYXR1cmUoIk5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOIik7CiskdGVzdC0+cnVuX3Rlc3RzKCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDR0Y3A2LnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDR0Y3A2LnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyMjJkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNHRjcDYudApAQCAtMCwwICsxLDE4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBIRUFERVIgUGVybCBUQ1AgSVB2NiBUZXN0CisKK0JFR0lOIHsKKyAgICBpZiAoZXhpc3RzKCRFTlZ7J3NyY2Rpcid9KSkgeworCXB1c2ggQElOQywgIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICJmdWxsdGVzdHMvcGVybCIpIHsKKwlwdXNoIEBJTkMsICJmdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgIi4uL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiLi4vcGVybCI7CisgICAgfQorfQordXNlIE5ldFNOTVBUZXN0VHJhbnNwb3J0OworCitteSAkdGVzdCA9IG5ldyBOZXRTTk1QVGVzdFRyYW5zcG9ydChhZ2VudGFkZHJlc3MgPT4gInRjcDY6Wzo6MV06OTg3NSIpOworJHRlc3QtPnJlcXVpcmVfZmVhdHVyZSgiTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4iKTsKKyR0ZXN0LT5ydW5fdGVzdHMoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNXVuaXgudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNXVuaXgudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzAxNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA1dW5peC50CkBAIC0wLDAgKzEsMTkgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEhFQURFUiBQZXJsIFVuaXggRG9tYWluIFNvY2tldCBUZXN0CisKK0JFR0lOIHsKKyAgICBpZiAoZXhpc3RzKCRFTlZ7J3NyY2Rpcid9KSkgeworCXB1c2ggQElOQywgIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICJmdWxsdGVzdHMvcGVybCIpIHsKKwlwdXNoIEBJTkMsICJmdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgIi4uL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiLi4vcGVybCI7CisgICAgfQorfQordXNlIE5ldFNOTVBUZXN0VHJhbnNwb3J0OworCitteSAkdGVzdCA9IG5ldyBOZXRTTk1QVGVzdFRyYW5zcG9ydChhZ2VudGFkZHJlc3MgPT4gImJvZ3VzIik7CiskdGVzdC0+cmVxdWlyZV9mZWF0dXJlKCJORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTiIpOworJHRlc3QtPnsnYWdlbnRhZGRyZXNzJ30gPSAidW5peDoiIC4gJHRlc3QtPnsnZGlyJ30gLiAiL3VuaXh0ZXN0c29ja2V0IjsKKyR0ZXN0LT5ydW5fdGVzdHMoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3JlYWQtb25seS9UMDE0MXNubXB2MmNzZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3JlYWQtb25seS9UMDE0MXNubXB2MmNzZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA1ZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvcmVhZC1vbmx5L1QwMTQxc25tcHYyY3NldGZhaWxfc2ltcGxlCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MmMgc2V0IGZhaWx1cmUgdG8gc3lzdGVtLnN5c0NvbnRhY3QuMAorCitTS0lQSUZOT1QgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQorc25tcF93cml0ZV9hY2Nlc3M9J2FsbCcKKyhjZCAuLi9kZWZhdWx0IDsgLiAuL1N2MmNjb25maWcpCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IgorCitDQVBUVVJFICJzbm1wc2V0IC1yIDAgLXQgMSAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCBzIGZvb2JhcnRlc3RpbmdiYXoiCisKK0NIRUNLICJUaW1lb3V0OiBObyBSZXNwb25zZSIKKworU1RPUEFHRU5UCisKK0NIRUNLQUdFTlQgJ0JhZCBQRFUgdHlwZSByZWNlaXZlZCcKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTc5NGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jCkBAIC0wLDAgKzEsNDU5IEBACisvKgorICogc2NhcGl0ZXN0LmMKKyAqCisgKiBIRUFERVIgVGVzdGluZyBTQ0FQSSBBUEkKKyAqCisgKiBFeHBlY3RlZCBTVUNDRVNTZXM6ICAyICsgMTAgKyAxIGZvciBhbGwgdGVzdHMuCisgKgorICogUmV0dXJuczoKKyAqICAgICAgTnVtYmVyIG9mIEZBSUxVUkVzLgorICoKKyAqCisgKiBBU1NVTUVTICBObyBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmV0dXJuIG5vbi16ZXJvIHN1Y2Nlc3MgY29kZXMuCisgKgorICogWFhYICBTcGxpdCBpbnRvIGluZGl2aWR1YWwgbW9kdWxlcz8KKyAqIFhYWCAgRXJyb3IvZnJpbmdlIGNvbmRpdGlvbnMgc2hvdWxkIGJlIHRlc3RlZC4KKyAqCisgKgorICogVGVzdCBvZiBzY19yYW5kb20uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogMi4KKyAqICAgICAgUkVRVUlSRVMgYSBodW1hbiB0byBzcG90IGNoZWNrIGZvciBvYnZpb3VzIG5vbi1yYW5kb21uZXNzLi4uCisgKgorICogVGVzdCBvZiBzY19nZW5lcmF0ZV9rZXllZF9oYXNoIGFuZCBzY19jaGVja19rZXllZF9oYXNoLiAgICAgIFNVQ0NFU1NlczogMTAuCisgKgorICogVGVzdCBvZiBzY19lbmNyeXB0IGFuZCBzY19kZWNyeXB0LiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogMS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NjYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2V4dGVybiBjaGFyICAgICpvcHRhcmc7CitleHRlcm4gaW50ICAgICAgb3B0aW5kLCBvcHRvcHQsIG9wdGVycjsKKworI2RlZmluZSBERUJVRyAgICAgICAgICAgICAgICAgICAvKiAqLworCisKKworLyoKKyAqIEdsb2JhbHMsICZjLi4uCisgKi8KK2NoYXIgICAgICAgICAgICpsb2NhbF9wcm9nbmFtZTsKK2ludCAgICAgICAgICAgICB0ZXN0Y291bnQ9MDsKK2ludCAgICAgICAgICAgICBmYWlsY291bnQ9MDsKKworI2RlZmluZSBVU0FHRQkiVXNhZ2U6ICVzIFstaF1bLWFjSHJdIgorI2RlZmluZSBPUFRJT05MSVNUCSJhY2hIciIKKworaW50ICAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAwLCBkb2NyeXB0ID0gMCwgZG9rZXllZGhhc2ggPSAwLCBkb3JhbmRvbSA9IDA7CisKKyNkZWZpbmUJQUxMT1BUSU9OUwkoZG9hbGx0ZXN0cyArIGRvY3J5cHQgKyBkb2tleWVkaGFzaCArIGRvcmFuZG9tKQorCisKKworI2RlZmluZSBMT0NBTF9NQVhCVUYJKDEwMjQgKiA4KQorI2RlZmluZSBOTAkJIlxuIgorCisjZGVmaW5lIE9VVFBVVChvKQlwcmludGYoIiMgJXNcbiIsIG8pOworCisjZGVmaW5lIFNVQ0NFU1MocykJCQkJCVwKK3sJCQkJCQkJXAorICAgIHByaW50ZigiIyBEb25lIHdpdGggJXNcbiIsIHMpOwkJCVwKK30KKworI2RlZmluZSBGQUlMRUQoZSwgZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChlICE9IFNOTVBFUlJfU1VDQ0VTUykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHByaW50Zigibm90IG9rOiAlZCAtICVzXG4iLCArK3Rlc3Rjb3VudCwgZik7ICAgICAgICAgICAgXAorCQlmYWlsY291bnQgKz0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHByaW50Zigib2s6ICVkIC0gJXNcbiIsICsrdGVzdGNvdW50LCBmKTsgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZmbHVzaChzdGRvdXQpOyBcCit9CisKKyNkZWZpbmUgQklHU1RSSU5HCQkJCQkJCVwKKyAgICAoY29uc3QgdV9jaGFyICopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgQSBwb3J0IG1heSBiZSBhIHBsZWFzYW50IHJldHJlYXQgZm9yIGFueSBtaW5kIGdyb3duIHdlYXJ5IG9mIglcCisgICAgInRoZSBzdHJ1Z2dsZSBmb3IgZXhpc3RlbmNlLiAgVGhlIHZhc3QgZXhwYW5zZSBvZiBza3ksIHRoZSIJCVwKKyAgICAibW9iaWxlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY2xvdWRzLCB0aGUgY2hhbWVsZW9uIGNvbG9yYXRpb24iCVwKKyAgICAib2YgdGhlIHNlYSwgdGhlIGJlYWNvbnMgZmxhc2hpbmcgb24gdGhlIHNob3JlLCB0b2dldGhlciBtYWtlIglcCisgICAgImEgcHJpc20gd2hpY2ggaXMgbWFydmVsbG91c2x5IGNhbGN1bGF0ZWQgdG8gZW50ZXJ0YWluIGJ1dCBub3QiCVwKKyAgICAiZmF0aWd1ZSB0aGUgZXllLiAgVGhlIGxvZnR5IHNoaXBzIHdpdGggdGhlaXIgY29tcGxleCB3ZWJzIG9mIglcCisgICAgInJpZ2dpbmcsIHN3YXllZCB0byBhbmQgZnJvIGJ5IHRoZSBzd2VsbCBpbiBoYXJtb25pb3VzIGRhbmNlLCIJXAorICAgICJhbGwgaGVscCB0byBtYWludGFpbiBhIHRhc3RlIGZvciByaHl0aG0gYW5kIGJlYXV0eSBpbiB0aGUiCQlcCisgICAgIm1pbmQuICBBbmQgYWJvdmUgYWxsIHRoZXJlIGlzIGEgbXlzdGVyaW91cywgYXJpc3Ryb2NyYXRpYyBraW5kIglcCisgICAgIm9mIHBsZWFzdXJlIHRvIGJlIGhhZCwgZm9yIHRob3NlIHdobyBoYXZlIGxvc3QgYWxsIGN1cmlvc2l0eSIJXAorICAgICJvciBhbWJpdGlvbiwgYXMgdGhleSBzdHJlY2ggb24gdGhlIGJlbHZlZGVyZSBvciBsZWFuIG92ZXIgdGhlIglcCisgICAgIm1vbGUgdG8gd2F0Y2ggdGhlIGFycml2YWxzIGFuZCBkZXBhcnR1cmVzIG9mIG90aGVyIG1lbiwgdGhvc2UiCVwKKyAgICAid2hvIHN0aWxsIGhhdmUgc3VmZmljaWVudCBzdHJlbmd0aCBvZiBwdXJwb3NlIGluIHRoZW0sIHRoZSIJXAorICAgICJ1cmdlIHRvIHRyYXZlbCBvciBlbnJpY2ggdGhlbXNlbHZlcy4iCQkJCVwKKyAgICAiCS0tIEJhdWRlbGFpcmUiCQkJCQkJCVwKKyAgICAiCSAgIEZyb20gX1RoZV9Qb2Vtc19pbl9Qcm9zZV8sIFwiVGhlIFBvcnRcIiAoWExJKS4iCisKKyNkZWZpbmUgQklHU0VDUkVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGNvbnN0IHVfY2hhciAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJTaGhoaC4uLiBEb24ndCB0ZWxsICphbnlvbmUqIGFib3V0IHRoaXMuICBOb3QgYSBzb3VsLiIKKyNkZWZpbmUgQktXRFNFQ1JFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGNvbnN0IHVfY2hhciAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIubHVvcyBhIHRvTiAgLnNpaHQgdHVvYmEgKmVub3luYSogbGxldCB0J25vRCAuLi5oaGhoUyIKKworI2RlZmluZSBNTENPVU5UX01BWAk2ICAgICAgIC8qIE1BQyBMZW5ndGggQ291bnQgTWF4aW11bS4gKi8KKworCisKKy8qCisgKiBQcm90b3R5cGVzLgorICovCit2b2lkICAgICAgICAgICAgdXNhZ2Uodm9pZCk7CisKK2ludCAgICAgICAgICAgICB0ZXN0X2RvY3J5cHQodm9pZCk7CitpbnQgICAgICAgICAgICAgdGVzdF9kb2tleWVkaGFzaCh2b2lkKTsKK2ludCAgICAgICAgICAgICB0ZXN0X2RvcmFuZG9tKHZvaWQpOworCisKKworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOworICAgIGNoYXIgICAgICAgICAgICBjaDsKKworICAgIGxvY2FsX3Byb2duYW1lID0gYXJndlswXTsKKworICAgIC8qCisgICAgICogUGFyc2UuCisgICAgICovCisgICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRJT05MSVNUKSkgIT0gRU9GKSB7CisgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICBkb2FsbHRlc3RzID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIGRvY3J5cHQgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0gnOgorICAgICAgICAgICAgZG9rZXllZGhhc2ggPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgZG9yYW5kb20gPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgcnZhbCA9IDA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgZXhpdChydmFsKTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ2MgLT0gMTsKKyAgICAgICAgYXJndiArPSAxOworICAgICAgICBvcHRpbmQgPSAxOworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSBnZXRvcHQgKi8KKworICAgIGlmICgoYXJnYyA+IDEpKSB7CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIGV4aXQoMTAwMCk7CisKKyAgICB9IGVsc2UgaWYgKEFMTE9QVElPTlMgIT0gMSkgeworICAgICAgICBkb2FsbHRlc3RzID0gMTsKKyAgICB9CisKKworICAgIC8qCisgICAgICogVGVzdCBzdHVmZi4KKyAgICAgKi8KKyAgICBydmFsID0gc2NfaW5pdCgpOworICAgIEZBSUxFRChydmFsLCAic2NfaW5pdCgpIHJldHVybiBjb2RlIik7CisKKworICAgIGlmIChkb2NyeXB0IHx8IGRvYWxsdGVzdHMpIHsKKyAgICAgICAgdGVzdF9kb2NyeXB0KCk7CisgICAgfQorICAgIGlmIChkb2tleWVkaGFzaCB8fCBkb2FsbHRlc3RzKSB7CisgICAgICAgIHRlc3RfZG9rZXllZGhhc2goKTsKKyAgICB9CisgICAgaWYgKGRvcmFuZG9tIHx8IGRvYWxsdGVzdHMpIHsKKyAgICAgICAgdGVzdF9kb3JhbmRvbSgpOworICAgIH0KKworICAgIHByaW50ZigiMS4uJWRcbiIsIHRlc3Rjb3VudCk7CisgICAgcmV0dXJuIDA7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBtYWluKCkgKi8KKworCisKKworCit2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHByaW50ZiggVVNBR0UKKyAgICAgICAgICAgICIiIE5MCisgICAgICAgICAgICAiCS1hCQlBbGwgdGVzdHMuIiBOTAorICAgICAgICAgICAgIgktYwkJVGVzdCBvZiBzY19lbmNyeXB0KCkvc2NfZGVjcnlwdCgpLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiCS1oCQlIZWxwLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiCS1IICAgICAgICAgICAgICBUZXN0IHNjX3tnZW5lcmF0ZSxjaGVja31fa2V5ZWRfaGFzaCgpLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiCS1yICAgICAgICAgICAgICBUZXN0IHNjX3JhbmRvbSgpLiIKKyAgICAgICAgICAgIE5MICIiIE5MLCBsb2NhbF9wcm9nbmFtZSk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHVzYWdlKCkgKi8KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfZG9yYW5kb20KKyAqCisgKiBPbmUgbGFyZ2UgcmVxdWVzdCwgb25lIHNldCBvZiBzaG9ydCByZXF1ZXN0cy4KKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICoKKyAqIFhYWAlwcm9iYWJseSBzaG91bGQgc3BsaXQgdXAgaW50byBpbmRpdmlkdWFsIG9wdGlvbnMuCisgKi8KK2ludAordGVzdF9kb3JhbmRvbSh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAorICAgICAgICBvcmlncmVxdWVzdCA9ICgxMDI0ICogMiksCisgICAgICAgIG9yaWdyZXF1ZXN0X3Nob3J0ID0gMTksIHNob3J0Y291bnQgPSA3LCBpOworICAgIHNpemVfdCAgICAgICAgICBuYnl0ZXMgPSBvcmlncmVxdWVzdDsKKyAgICB1X2NoYXIgICAgICAgICAgYnVmW0xPQ0FMX01BWEJVRl07CisKKyAgICBPVVRQVVQoIlJhbmRvbSB0ZXN0IC0tIGxhcmdlIHJlcXVlc3Q6Iik7CisKKyAgICBydmFsID0gc2NfcmFuZG9tKGJ1ZiwgJm5ieXRlcyk7CisgICAgRkFJTEVEKHJ2YWwsICJzY19yYW5kb20oKSByZXR1cm4gY29kZSIpOworCisgICAgaWYgKG5ieXRlcyAhPSBvcmlncmVxdWVzdCkgeworICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAic2NfcmFuZG9tKCkgcmV0dXJuZWQgZGlmZmVyZW50IHRoYW4gcmVxdWVzdGVkLiIpOworICAgIH0KKworICAgIGR1bXBfY2h1bmsoInNjYXBpdGVzdCIsIE5VTEwsIGJ1ZiwgbmJ5dGVzKTsKKworICAgIFNVQ0NFU1MoIlJhbmRvbSB0ZXN0IC0tIGxhcmdlIHJlcXVlc3QuIik7CisKKworICAgIE9VVFBVVCgiUmFuZG9tIHRlc3QgLS0gc2hvcnQgcmVxdWVzdHM6Iik7CisgICAgb3JpZ3JlcXVlc3Rfc2hvcnQgPSAxNjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaG9ydGNvdW50OyBpKyspIHsKKyAgICAgICAgbmJ5dGVzID0gb3JpZ3JlcXVlc3Rfc2hvcnQ7CisgICAgICAgIHJ2YWwgPSBzY19yYW5kb20oYnVmLCAmbmJ5dGVzKTsKKyAgICAgICAgRkFJTEVEKHJ2YWwsICJzY19yYW5kb20oKSByZXR1cm4gY29kZSIpOworCisgICAgICAgIGlmIChuYnl0ZXMgIT0gb3JpZ3JlcXVlc3Rfc2hvcnQpIHsKKyAgICAgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAic2NfcmFuZG9tKCkgcmV0dXJuZWQgZGlmZmVyZW50ICIgInRoYW4gcmVxdWVzdGVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgZHVtcF9jaHVuaygic2NhcGl0ZXN0IiwgTlVMTCwgYnVmLCBuYnl0ZXMpOworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmRmb3IgKi8KKworICAgIFNVQ0NFU1MoIlJhbmRvbSB0ZXN0IC0tIHNob3J0IHJlcXVlc3RzLiIpOworCisKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2RvcmFuZG9tKCkgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2Rva2V5ZWRoYXNoCisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqCisgKgorICogVGVzdCBrZXllZCBoYXNoZXMgd2l0aCBhIHZhcmlldHkgb2YgTUFDIGxlbmd0aCByZXF1ZXN0cy4KKyAqCisgKgorICogTk9URSBCb3RoIHRlc3RzIGludGVudGlvbmFsbHkgdXNlIHRoZSBzYW1lIHNlY3JldAorICoKKyAqIEZJWAlHZXQgaW5wdXQgb3Igb3V0cHV0IGZyb20gc29tZSBvdGhlciBwYWNrYWdlIHdoaWNoIGhhc2hlcy4uLgorICogWFhYCUNvdWxkIGN1dCB0aGlzIGluIGhhbGYgd2l0aCBhIGxpdHRsZSBpbmRpcmVjdGlvbi4uLgorICovCitpbnQKK3Rlc3RfZG9rZXllZGhhc2godm9pZCkKK3sKKyAgICBpbnQgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgICAgYmlnc3RyaW5nX2xlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKSBCSUdTVFJJTkcpLAorICAgICAgICBzZWNyZXRfbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopIEJJR1NFQ1JFVCksCisgICAgICAgIHByb3Blcmxlbmd0aCwKKyAgICAgICAgbWxjb3VudCA9IDA7ICAgICAgICAvKiBNQUMgTGVuZ3RoIGNvdW50LiAgICovCisgICAgc2l6ZV90ICAgICAgICAgIGhibGVuOyAgICAgIC8qIEhhc2ggQnVmZmVyIGxlbmd0aC4gKi8KKworICAgIHVfaW50ICAgICAgICAgICBoYXNoYnVmX2xlbltNTENPVU5UX01BWF0gPSB7CisgICAgICAgIExPQ0FMX01BWEJVRiwKKyAgICAgICAgVVNNX01ENV9BTkRfU0hBX0FVVEhfTEVOLAorICAgICAgICBVU01fTUQ1X0FORF9TSEFfQVVUSF9MRU4sCisgICAgICAgIFVTTV9NRDVfQU5EX1NIQV9BVVRIX0xFTiwKKyAgICAgICAgNywKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgdV9jaGFyICAgICAgICAgIGhhc2hidWZbTE9DQUxfTUFYQlVGXTsKKyAgICBjaGFyICAgICAgICAgICAqczsKKworICB0ZXN0X2Rva2V5ZWRoYXNoX2FnYWluOgorCisgICAgT1VUUFVUKCJTdGFydGluZyBLZXllZCBoYXNoIHRlc3QgdXNpbmcgTUQ1IC0tIik7CisKKyAgICBtZW1zZXQoaGFzaGJ1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKKyAgICBoYmxlbiA9IGhhc2hidWZfbGVuW21sY291bnRdOworICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KTsKKworICAgIHJ2YWwgPQorICAgICAgICBzY19nZW5lcmF0ZV9rZXllZF9oYXNoKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCBCSUdTRUNSRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2xlbiwgQklHU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZ3N0cmluZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGJ1ZiwgJmhibGVuKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2dlbmVyYXRlX2tleWVkX2hhc2goKSByZXR1cm4gY29kZSIpOworCisgICAgaWYgKGhhc2hidWZfbGVuW21sY291bnRdID4gcHJvcGVybGVuZ3RoKSB7CisgICAgICAgIGlmIChoYmxlbiAhPSBwcm9wZXJsZW5ndGgpIHsKKyAgICAgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIldyb25nIE1ENSBoYXNoIGxlbmd0aCByZXR1cm5lZC4gICgxKSIpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKGhibGVuICE9IGhhc2hidWZfbGVuW21sY291bnRdKSB7CisgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIldyb25nIE1ENSBoYXNoIGxlbmd0aCByZXR1cm5lZC4gICgyKSIpOworICAgIH0KKworICAgIHJ2YWwgPQorICAgICAgICBzY19jaGVja19rZXllZF9oYXNoKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCBCSUdTRUNSRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2xlbiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLCBoYXNoYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhibGVuKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2NoZWNrX2tleWVkX2hhc2goKSByZXR1cm4gY29kZSIpOworCisgICAgYmluYXJ5X3RvX2hleChoYXNoYnVmLCBoYmxlbiwgJnMpOworICAgIHByaW50ZigiIyBoYXNoIGJ1ZmZlciAobGVuPSUiIE5FVFNOTVBfUFJJeiAidSwgcmVxdWVzdD0lZCk6ICAgJXNcbiIsCisgICAgICAgICAgICBoYmxlbiwgaGFzaGJ1Zl9sZW5bbWxjb3VudF0sIHMpOworICAgIFNOTVBfRlJFRShzKTsKKworCisKKyAgICBPVVRQVVQoIlN0YXJ0aW5nIEtleWVkIGhhc2ggdGVzdCB1c2luZyBTSEExIC0tIik7CisKKyAgICBtZW1zZXQoaGFzaGJ1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKKyAgICBoYmxlbiA9IGhhc2hidWZfbGVuW21sY291bnRdOworICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSk7CisKKyAgICBydmFsID0KKyAgICAgICAgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sIEJJR1NFQ1JFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfbGVuLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGJ1ZiwgJmhibGVuKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2dlbmVyYXRlX2tleWVkX2hhc2goKSByZXR1cm4gY29kZSIpOworCisgICAgaWYgKGhhc2hidWZfbGVuW21sY291bnRdID4gcHJvcGVybGVuZ3RoKSB7CisgICAgICAgIGlmIChoYmxlbiAhPSBwcm9wZXJsZW5ndGgpIHsKKyAgICAgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAiV3JvbmcgU0hBMSBoYXNoIGxlbmd0aCByZXR1cm5lZC4gICgxKSIpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKGhibGVuICE9IGhhc2hidWZfbGVuW21sY291bnRdKSB7CisgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIldyb25nIFNIQTEgaGFzaCBsZW5ndGggcmV0dXJuZWQuICAoMikiKTsKKyAgICB9CisKKyAgICBydmFsID0KKyAgICAgICAgc2NfY2hlY2tfa2V5ZWRfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sIEJJR1NFQ1JFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfbGVuLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sIGhhc2hidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGJsZW4pOworICAgIEZBSUxFRChydmFsLCAic2NfY2hlY2tfa2V5ZWRfaGFzaCgpIHJldHVybiBjb2RlIik7CisKKyAgICBiaW5hcnlfdG9faGV4KGhhc2hidWYsIGhibGVuLCAmcyk7CisgICAgcHJpbnRmKCIjIGhhc2ggYnVmZmVyIChsZW49JSIgTkVUU05NUF9QUkl6ICJ1LCByZXF1ZXN0PSVkKTogICAlc1xuIiwKKyAgICAgICAgICAgIGhibGVuLCBoYXNoYnVmX2xlblttbGNvdW50XSwgcyk7CisgICAgU05NUF9GUkVFKHMpOworCisgICAgU1VDQ0VTUygiS2V5ZWQgaGFzaCB0ZXN0IHVzaW5nIFNIQTEuIik7CisKKyAgICAvKgorICAgICAqIFJ1biB0aGUgYmFzaWMgaGFzaCB0ZXN0cyBidXQgdmFyeSB0aGUgc2l6ZSBNQUMgcmVxdWVzdHMuCisgICAgICovCisgICAgaWYgKGhhc2hidWZfbGVuWysrbWxjb3VudF0gIT0gMCkgeworICAgICAgICBnb3RvIHRlc3RfZG9rZXllZGhhc2hfYWdhaW47CisgICAgfQorCisKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rva2V5ZWRoYXNoKCkgKi8KKworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9kb2NyeXB0CisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqLworaW50Cit0ZXN0X2RvY3J5cHQodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgICAgYmlnc3RyaW5nX2xlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKSBCSUdTVFJJTkcpLAorICAgICAgICBzZWNyZXRfbGVuID0gQllURVNJWkUoU05NUF9UUkFOU19QUklWTEVOXzFERVMpLAorICAgICAgICBpdl9sZW4gPSBCWVRFU0laRShTTk1QX1RSQU5TX1BSSVZMRU5fMURFU19JVik7CisKKyAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiA9IExPQ0FMX01BWEJVRjsKKyAgICBzaXplX3QgICAgICAgICAgY3J5cHRidWZfbGVuID0gTE9DQUxfTUFYQlVGOworCisgICAgdV9jaGFyICAgICAgICAgICAgYnVmW0xPQ0FMX01BWEJVRl0sCisgICAgICAgIGNyeXB0YnVmW0xPQ0FMX01BWEJVRl0sIHNlY3JldFtMT0NBTF9NQVhCVUZdLCBpdltMT0NBTF9NQVhCVUZdOworCisgICAgT1VUUFVUKCJTdGFydGluZyBUZXN0IDFERVMtQ0JDIC0tIik7CisKKworICAgIG1lbXNldChidWYsIDAsIExPQ0FMX01BWEJVRik7CisKKyAgICBtZW1jcHkoc2VjcmV0LCBCSUdTRUNSRVQsIHNlY3JldF9sZW4pOworICAgIG1lbWNweShpdiwgQktXRFNFQ1JFVCwgaXZfbGVuKTsKKworICAgIHJ2YWwgPSBzY19lbmNyeXB0KHVzbURFU1ByaXZQcm90b2NvbCwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgIHNlY3JldCwgc2VjcmV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwgY3J5cHRidWYsICZjcnlwdGJ1Zl9sZW4pOworICAgIEZBSUxFRChydmFsLCAic2NfZW5jcnlwdCgpIHJldHVybiBjb2RlLiIpOworCisgICAgcnZhbCA9IHNjX2RlY3J5cHQodXNtREVTUHJpdlByb3RvY29sLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0LCBzZWNyZXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW4sIGNyeXB0YnVmLCBjcnlwdGJ1Zl9sZW4sIGJ1ZiwgJmJ1Zl9sZW4pOworICAgIEZBSUxFRChydmFsLCAic2NfZGVjcnlwdCgpIHJldHVybiBjb2RlLiIpOworCisgICAgLyogaWdub3JlIHRoZSBwYWQgKi8KKyAgICBidWZfbGVuIC09IGJ1ZltidWZfbGVuLTFdOworCisgICAgRkFJTEVEKChidWZfbGVuICE9IGJpZ3N0cmluZ19sZW4pLCAiRGVjcnlwdGVkIGJ1ZmZlciBpcyB0aGUgcmlnaHQgbGVuZ3RoLiIpOworICAgIHByaW50ZigiIyBvcmlnaW5hbCBsZW5ndGg6ICVkXG4iLCBiaWdzdHJpbmdfbGVuKTsKKyAgICBwcmludGYoIiMgb3V0cHV0ICAgbGVuZ3RoOiAlIiBORVRTTk1QX1BSSXogInVcbiIsIGJ1Zl9sZW4pOworCisgICAgRkFJTEVEKChtZW1jbXAoYnVmLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4pICE9IDApLAorICAgICAgICAgICAiRGVjcnlwdGVkIGJ1ZmZlciBpcyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgcGxhaW50ZXh0LiIpOworICAgIHJldHVybiBmYWlsY291bnQ7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2RvY3J5cHQoKSAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jIGIvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjViNDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qIEhFQURFUiB0ZXN0aW5nIFNDQVBJIGhhc2hpbmcgZnVuY3Rpb25zICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3ZvaWQgcHJpbnRfaGFzaChjb25zdCBjaGFyICpsYWJlbCwgdV9jaGFyICpNQUMsIHNpemVfdCBNQUNfTEVOKTsKKworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgICAgdV9jaGFyIGJ1ZltdID0gIndlcyBoYXJkYWtlciI7CisgICAgdV9jaGFyIE1BQ1syMF07CisgICAgc2l6ZV90IE1BQ19MRU4gPSAyMDsKKyAgICB1X2NoYXIgc2hhMWtleVsyMF0gPSAiNTU1NTU1NTU1NTU1NTU1NTU1NTUiOworICAgIHVfY2hhciBtZDVrZXlbMTZdID0gIjU1NTU1NTU1NTU1NTU1NTUiOworCisgICAgdV9jaGFyIHNoYTFwcm9wZXJbMjBdID0geyAweDRhLCAweDU1LCAweDJmLCAweDY1LCAweDc5LCAweDNhLCAweDQ5LCAweDM1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNywgMHg5MSwgMHg1MSwgMHgxZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTAsIDB4OGMsIDB4N2EsIDB4NDUsIDB4NTAsIDB4MzQsIDB4ZDQsIDB4MjN9OworICAgIHVfY2hhciBtZDVwcm9wZXJbMTZdID0geyAweGU1LCAweDkyLCAweGZhLCAweDRiLCAweDA2LCAweGU2LCAweDI3LCAweGQ3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGM4LCAweDE4LCAweGZhLCAweDdhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGQwLCAweDgyLCAweGViLCAweDY2fTsKKyAgICBpbnQgcmVzdWx0OworICAgIAorICAgIHByaW50ZigiMS4uMlxuIik7CisKKyAgICBtZW1zZXQoTUFDLCAwLCBNQUNfTEVOKTsKKyAgICBzY19oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLCBPSURfTEVOR1RIKHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSwKKyAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwKKyAgICAgICAgICAgIE1BQywgJk1BQ19MRU4pOworCisgICAgcHJpbnRfaGFzaCgic2hhMSBoYXNoIiwgTUFDLCBNQUNfTEVOKTsKKworICAgIG1lbXNldChNQUMsIDAsIE1BQ19MRU4pOworICAgIHNjX2hhc2godXNtSE1BQ01ENUF1dGhQcm90b2NvbCwgT0lEX0xFTkdUSCh1c21ITUFDTUQ1QXV0aFByb3RvY29sKSwKKyAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwKKyAgICAgICAgICAgIE1BQywgJk1BQ19MRU4pOworCisgICAgcHJpbnRfaGFzaCgibWQ1IGhhc2giLCBNQUMsIE1BQ19MRU4pOworCisgICAgTUFDX0xFTiA9IDIwOworICAgIHNjX2dlbmVyYXRlX2tleWVkX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYTFrZXksIHNpemVvZihzaGExa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BQywgJk1BQ19MRU4pOworCisgICAgcHJpbnRfaGFzaCgic2hhMSBrZXllZCIsIE1BQywgTUFDX0xFTik7CisKKyAgICByZXN1bHQgPQorICAgICAgICBzY19jaGVja19rZXllZF9oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYTFrZXksIHNpemVvZihzaGExa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhMXByb3BlciwgMTIpOworICAgIGlmICgwID09IHJlc3VsdCkgeworICAgICAgICBwcmludGYoIm9rOiAxIC0gc2hhMSBrZXllZCBjb21wYXJlIHdhcyBlcXVhbFxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJub3Qgb2s6IDEgLSBzaGExIGtleWVkIGNvbXBhcmUgd2FzIG5vdCBlcXVhbFxuIik7CisgICAgfQorICAgIAorCisgICAgTUFDX0xFTiA9IDE2OworICAgIHNjX2dlbmVyYXRlX2tleWVkX2hhc2godXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodXNtSE1BQ01ENUF1dGhQcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDVrZXksIHNpemVvZihtZDVrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFDLCAmTUFDX0xFTik7CisKKyAgICBwcmludF9oYXNoKCJtZDUga2V5ZWQiLCBNQUMsIE1BQ19MRU4pOworCisKKyAgICBNQUNfTEVOID0gMTY7CisgICAgcmVzdWx0ID0KKyAgICAgICAgc2NfY2hlY2tfa2V5ZWRfaGFzaCh1c21ITUFDTUQ1QXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodXNtSE1BQ01ENUF1dGhQcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1a2V5LCBzaXplb2YobWQ1a2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1cHJvcGVyLCAxMik7CisKKyAgICBpZiAoMCA9PSByZXN1bHQpIHsKKyAgICAgICAgcHJpbnRmKCJvazogMiAtIG1kNSBrZXllZCBjb21wYXJlIHdhcyBlcXVhbFxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJub3Qgb2s6IDIgLSBtZDUga2V5ZWQgY29tcGFyZSB3YXMgbm90IGVxdWFsXG4iKTsKKyAgICB9CisKKyAgICBNQUNfTEVOID0gMjA7CisgICAgbWVtc2V0KE1BQywgMCwgTUFDX0xFTik7CisgICAgZ2VuZXJhdGVfS3UodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCksCisgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKS0xLAorICAgICAgICAgICAgICAgIE1BQywgJk1BQ19MRU4pOworICAgIHByaW50X2hhc2goInNoYTEgS3UiLCBNQUMsIE1BQ19MRU4pOworCisgICAgTUFDX0xFTiA9IDE2OworICAgIG1lbXNldChNQUMsIDAsIE1BQ19MRU4pOworICAgIGdlbmVyYXRlX0t1KHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh1c21ITUFDTUQ1QXV0aFByb3RvY29sKSwKKyAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLTEsCisgICAgICAgICAgICAgICAgTUFDLCAmTUFDX0xFTik7CisgICAgcHJpbnRfaGFzaCgibWQ1IEt1IiwgTUFDLCBNQUNfTEVOKTsKKworICAgIC8qIFhYWDogdG9kbzogY29tcGFyZSByZXN1bHRzIGFuZCBlbnN1cmUgdGhleSdyZSBhbHdheXMgdGhlIHNhbWUKKyAgICAgICB2YWx1ZXM7IHRoZSBhbGdvcml0aG1zIGFyZW4ndCB0aW1lLWRlcGVuZGVudC4gKi8KKyAgICByZXR1cm4gKDApOworfQorCit2b2lkCitwcmludF9oYXNoKGNvbnN0IGNoYXIgKmxhYmVsLCB1X2NoYXIgKk1BQywgc2l6ZV90IE1BQ19MRU4pIHsKKyAgICBpbnQgaTsKKyAgICBwcmludGYoIiMgJS0xMHMgJSIgTkVUU05NUF9QUkl6ICJ1OlxuIiwgbGFiZWwsIE1BQ19MRU4pOworICAgIGZvcihpPTA7IGkgPCBNQUNfTEVOOyBpKyspIHsKKyAgICAgICAgcHJpbnRmKCIjICUwMnggIiwgTUFDW2ldKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworfSAgICAKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OGY2NjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jCkBAIC0wLDAgKzEsNjM2IEBACisvKgorICoga2V5bWFuYWdldGVzdC5jCisgKgorICogSEVBREVSIFRlc3Rpbmcga2V5IG1hbmFnZW1lbnQgQVBJIGZ1bmN0aW9uYWxpdHkKKyAqCisgKiBFeHBlY3RlZCBTVUNDRVNTZXM6ICAyICsgMiArIDMgZm9yIGFsbCB0ZXN0cy4KKyAqCisgKiBSZXR1cm5zOgorICogICAgICBOdW1iZXIgb2YgRkFJTFVSRXMuCisgKiAKKyAqCisgKiBGSVggIE9yIGhvdyBhYm91dCBwYXNzaW5nIGEgdXNtVXNlciBuYW1lIGFuZCBsb29raW5nIHVwIHRoZSBlbnRyeSBhcworICogICAgICBhIG1lYW5zIG9mIGdldHRpbmcga2V5IG1hdGVyaWFsPyAgVGhpcyBtZWFucyB0aGUgdXNlckxpc3QgaXMKKyAqICAgICAgYXZhaWxhYmxlIGZyb20gYW4gYXBwbGljYXRpb24uLi4KKyAqCisgKiBBU1NVTUVTICBObyBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmV0dXJuIG5vbi16ZXJvIHN1Y2Nlc3MgY29kZXMuCisgKgorICogVGVzdCBvZiBnZW5lcmF0ZV9LdSgpLiAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAyCisgKiBUZXN0IG9mIGdlbmVyYXRlX2t1bCgpLiAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6IDIKKyAqIFRlc3Qgb2Yge2VuY29kZSxkZWNvZGV9X2tleWNoYW5nZSgpLiAgICAgICAgIFNVQ0NFU1NlczogMworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2V4dGVybiBjaGFyICAgICpvcHRhcmc7CitleHRlcm4gaW50ICAgICAgb3B0aW5kLCBvcHRvcHQsIG9wdGVycjsKKworaW50IHRlc3Rjb3VudCA9IDA7CisKKy8qCisgKiBHbG9iYWxzLCAmYy4uLgorICovCitjaGFyICAgICAgICAgICAqbG9jYWxfcHJvZ25hbWU7CisKKyNkZWZpbmUgVVNBR0UJIlVzYWdlOiAlcyBbLWhdWy1ha2x1XVstRSA8ZW5naW5lSUQ+XVstTiA8bmV3a2V5Pl1bLU8gPG9sZGtleT5dWy1QIDxwYXNzcGhyYXNlPl0iCisjZGVmaW5lIE9QVElPTkxJU1QJImFxRTpoa2xOOk86UDp1IgorCitpbnQgICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDAsIGRvZ2VuS3UgPSAwLCBkb2dlbmt1bCA9IDAsIGRva2V5Y2hhbmdlID0gMDsKKworI2RlZmluZQlBTExPUFRJT05TCShkb2FsbHRlc3RzICsgZG9nZW5LdSArIGRvZ2Vua3VsICsgZG9rZXljaGFuZ2UpCisKKworI2RlZmluZSBMT0NBTF9NQVhCVUYJKDEwMjQgKiA4KQorI2RlZmluZSBOTAkJIlxuIgorCisjZGVmaW5lIE9VVFBVVEFMV0FZUyhvKQlmcHJpbnRmKHN0ZG91dCwgIiMgJXNcbiIsIG8pOworI2RlZmluZSBPVVRQVVQobykJaWYgKCFiZXF1aWV0KSB7IE9VVFBVVEFMV0FZUyhvKTsgfQorCisjZGVmaW5lIFNVQ0NFU1MocykJCQkJCVwKK3sJCQkJCQkJXAorICAgIGZwcmludGYoc3Rkb3V0LCAiIyBEb25lIHdpdGggJXNcbiIsIHMpOyAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRkFJTEVEKGUsIGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGUpICE9IFNOTVBFUlJfU1VDQ0VTUykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIm5vdCBvazogJWQgLSAlc1xuIiwgKyt0ZXN0Y291bnQsIGYpOwlcCisJCWZhaWxjb3VudCArPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJvazogJWQgLSAlc1xuIiwgKyt0ZXN0Y291bnQsIGYpOwlcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmZsdXNoKHN0ZG91dCk7IFwKK30KKworI2RlZmluZSBERVRBSUxJTlQocywgaSkgXAorICAgIGZwcmludGYoc3Rkb3V0LCAiIyAlczogJWRcbiIsIHMsIGkpOworCisvKgorICogVGVzdCBzcGVjaWZpYyBnbG9iYWxzLgorICovCisjZGVmaW5lCUVOR0lORUlEX0RFRkFVTFQJIjEuMi4zLjR3aWxkIgorI2RlZmluZSBQQVNTUEhSQVNFX0RFRkFVTFQJIkNsYXkncyBDb25jbHVzaW9uOiBDcmVhdGl2aXR5IGlzIGdyZWF0LCAiIFwKKwkJCQkJImJ1dCBwbGFnaWFyaXNtIGlzIGZhc3Rlci4iCisjZGVmaW5lIE9MREtFWV9ERUZBVUxUCQkiVGhpcyBpcyBhIHZlcnkgb2xkIGtleS4iCisjZGVmaW5lIE5FV0tFWV9ERUZBVUxUCQkiVGhpcyBrZXksIG9uIHRoZSBvdGhlciBoYW5kLCBpcyB2ZXJ5IG5ldy4iCisKK3VfY2hhciAgICAgICAgICplbmdpbmVJRCA9IE5VTEw7CitjaGFyICAgICAgICAgICAqcGFzc3BocmFzZSA9IE5VTEw7Citjb25zdCB1X2NoYXIgICAqb2xka2V5ID0gTlVMTDsKK2NvbnN0IHVfY2hhciAgICpuZXdrZXkgPSBOVUxMOworaW50ICAgICAgICAgICAgIGJlcXVpZXQgPSAwOworCisKKy8qCisgKiBQcm90b3R5cGVzLgorICovCit2b2lkICAgICAgICAgICAgdXNhZ2UoRklMRSAqIG9mcCk7CisKK2ludCAgICAgICAgICAgICB0ZXN0X2dlbmt1bCh2b2lkKTsKK2ludCAgICAgICAgICAgICB0ZXN0X2dlbkt1KHZvaWQpOworaW50ICAgICAgICAgICAgIHRlc3Rfa2V5Y2hhbmdlKHZvaWQpOworCisKKworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOworICAgIGNoYXIgICAgICAgICAgICBjaDsKKworICAgIGxvY2FsX3Byb2duYW1lID0gYXJndlswXTsKKyAgICBvcHRhcmcgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBQYXJzZS4KKyAgICAgKi8KKyAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIE9QVElPTkxJU1QpKSAhPSBFT0YpIHsKKyAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0UnOgorICAgICAgICAgICAgZW5naW5lSUQgPSAodV9jaGFyICopIG9wdGFyZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdrJzoKKyAgICAgICAgICAgIGRva2V5Y2hhbmdlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgIGRvZ2Vua3VsID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdOJzoKKyAgICAgICAgICAgIG5ld2tleSA9ICh1X2NoYXIgKikgb3B0YXJnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ08nOgorICAgICAgICAgICAgb2xka2V5ID0gKHVfY2hhciAqKSBvcHRhcmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnUCc6CisgICAgICAgICAgICBwYXNzcGhyYXNlID0gb3B0YXJnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgZG9nZW5LdSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICBiZXF1aWV0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJ2YWwgPSAwOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKKyAgICAgICAgICAgIGV4aXQocnZhbCk7CisgICAgICAgIH0KKworICAgICAgICBhcmdjIC09IDE7CisgICAgICAgIGFyZ3YgKz0gMTsKKyAgICAgICAgaWYgKG9wdGFyZykgeworICAgICAgICAgICAgYXJnYyAtPSAxOworICAgICAgICAgICAgYXJndiArPSAxOworICAgICAgICB9CisKKyAgICAgICAgb3B0aW5kID0gMTsKKyAgICAgICAgb3B0YXJnID0gTlVMTDsKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgZ2V0b3B0ICovCisKKyAgICBpZiAoKGFyZ2MgPiAxKSkgeworICAgICAgICB1c2FnZShzdGRvdXQpOworICAgICAgICBleGl0KDEwMDApOworCisgICAgfSBlbHNlIGlmIChBTExPUFRJT05TICE9IDEpIHsKKyAgICAgICAgZG9hbGx0ZXN0cyA9IDE7CisgICAgfQorCisKKyAgICAvKgorICAgICAqIFRlc3Qgc3R1ZmYuCisgICAgICovCisgICAgcnZhbCA9IHNjX2luaXQoKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2luaXQoKS4iKTsKKworICAgIGlmIChkb2dlbkt1IHx8IGRvYWxsdGVzdHMpIHsKKyAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZ2VuS3UoKTsKKyAgICB9CisgICAgaWYgKGRvZ2Vua3VsIHx8IGRvYWxsdGVzdHMpIHsKKyAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZ2Vua3VsKCk7CisgICAgfQorICAgIGlmIChkb2tleWNoYW5nZSB8fCBkb2FsbHRlc3RzKSB7CisgICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2tleWNoYW5nZSgpOworICAgIH0KKworICAgIGZwcmludGYoc3Rkb3V0LCAiMS4uJWRcbiIsIHRlc3Rjb3VudCk7CisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFpbigpICovCisKKworCisKKwordm9pZAordXNhZ2UoRklMRSAqIG9mcCkKK3sKKyAgICBmcHJpbnRmKG9mcCwKKyAgICAgICAgICAgIFVTQUdFCisgICAgICAgICAgICAiIiBOTAorICAgICAgICAgICAgIiAgICAtYQkJCUFsbCB0ZXN0cy4iIE5MCisgICAgICAgICAgICAiICAgIC1FIFsweF08ZW5naW5lSUQ+CXNubXBFbmdpbmVJRCBzdHJpbmcuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLWsJCQlUZXN0IHtlbmNvZGUsZGVjb2RlfV9rZXljaGFuZ2UoKS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtbAkJCWdlbmVyYXRlX2t1bCgpLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1oCQkJSGVscC4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtTiBbMHhdPG5ld2tleT4JTmV3IGtleSAoZm9yIHRlc3RpbmcgS2V5Q2hhbmdlIFRDKS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtTyBbMHhdPG9sZGtleT4JT2xkIGtleSAoZm9yIHRlc3RpbmcgS2V5Q2hhbmdlIFRDKS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtUCA8cGFzc3BocmFzZT4JU291cmNlIHN0cmluZyBmb3IgdXNtVXNlciBtYXN0ZXIga2V5LiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC11CQkJZ2VuZXJhdGVfS3UoKS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtcQkJCWJlIHF1aWV0LiIKKyAgICAgICAgICAgIE5MICIiIE5MLCBsb2NhbF9wcm9nbmFtZSk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHVzYWdlKCkgKi8KKworCisKKworI2lmZGVmIEVYQU1QTEUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2Rvc29tZXRoaW5nCisgKgorICogVGVzdCB0ZW1wbGF0ZS4KKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICovCitpbnQKK3Rlc3RfZG9zb21ldGhpbmcodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKKworICAgIEVNMCgxLCAiVU5JTVBMRU1FTlRFRCIpOyAgICAvKiBFTSgxKTsgKi8KKworICB0ZXN0X2Rvc29tZXRoaW5nX3F1aXQ6CisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb3NvbWV0aGluZygpICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQU1QTEUgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2dlbkt1CisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqCisgKgorICogVGVzdCBnZW5lcmF0aW9uIG9mIHVzbVVzZXIgbWFzdGVyIGtleSBmcm9tIGEgcGFzc3BocmFzZS4KKyAqCisgKiBBU1NVTUVTICBQYXNzcGhyYXNlIGlzIG1hZGUgb2YgcHJpbnRhYmxlIGNoYXJhY3RlcnMhCisgKi8KK2ludAordGVzdF9nZW5LdSh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAorICAgICAgICBmYWlsY291bnQgPSAwLAorICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSk7CisgICAgc2l6ZV90ICAgICAgICAgIGt1bGVuOworICAgIGNvbnN0IGNoYXIgICAgICpoYXNobmFtZSA9ICJ1c21ITUFDTUQ1QXV0aFByb3RvY29sLiI7CisgICAgY2hhciAgICAgICAgICAgKnM7CisgICAgdV9jaGFyICAgICAgICAgIEt1W0xPQ0FMX01BWEJVRl07CisgICAgb2lkICAgICAgICAgICAgKmhhc2h0eXBlID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbDsKKworICAgIE9VVFBVVCgiVGVzdCBvZiBnZW5lcmF0ZV9LdSAtLSIpOworCisgICAgLyoKKyAgICAgKiBTZXQgcGFzc3BocmFzZS4KKyAgICAgKi8KKyAgICBpZiAoIXBhc3NwaHJhc2UpIHsKKyAgICAgICAgcGFzc3BocmFzZSA9IHN0cmR1cChQQVNTUEhSQVNFX0RFRkFVTFQpOworICAgIH0KKyAgICBpZiAoIWJlcXVpZXQpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiUGFzc3BocmFzZSVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAoc3RyY21wKHBhc3NwaHJhc2UsIFBBU1NQSFJBU0VfREVGQVVMVCkgPT0gMCkgPyAiIChkZWZhdWx0KSIgOiAiIiwKKyAgICAgICAgICAgICAgICBwYXNzcGhyYXNlKTsKKworCisgIHRlc3RfZ2VuS3VfYWdhaW46CisgICAgbWVtc2V0KEt1LCAwLCBMT0NBTF9NQVhCVUYpOworICAgIGt1bGVuID0gTE9DQUxfTUFYQlVGOworCisgICAgcnZhbCA9IGdlbmVyYXRlX0t1KGhhc2h0eXBlLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIgKikgcGFzc3BocmFzZSwgc3RybGVuKHBhc3NwaHJhc2UpLAorICAgICAgICAgICAgICAgICAgICAgICBLdSwgJmt1bGVuKTsKKyAgICBGQUlMRUQocnZhbCwgImdlbmVyYXRlX0t1KCkuIik7CisKKyAgICBGQUlMRUQoKGt1bGVuICE9IHByb3Blcmxlbmd0aCksCisgICAgICAgICAgICJLdSBsZW5ndGggaXMgdGhlIHJpZ2h0IGxlbmd0aCBmb3IgdGhpcyBoYXNodHlwZS4iKTsKKworICAgIGJpbmFyeV90b19oZXgoS3UsIGt1bGVuLCAmcyk7CisgICAgaWYgKCFiZXF1aWV0KQorICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiMgS3UgKGxlbj0lIiBORVRTTk1QX1BSSXogInUpOiAgJXNcbiIsIGt1bGVuLCBzKTsKKyAgICBmcmVlX3plcm8ocywga3VsZW4pOworCisgICAgT1VUUFVUKGhhc2huYW1lKTsKKworICAgIGlmIChoYXNodHlwZSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSB7CisgICAgICAgIGhhc2h0eXBlID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7CisgICAgICAgIGhhc2huYW1lID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sLiI7CisgICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSk7CisgICAgICAgIGdvdG8gdGVzdF9nZW5LdV9hZ2FpbjsKKyAgICB9CisKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2dlbkt1KCkgKi8KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfZ2Vua3VsCisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqCisgKgorICogVGVzdCBvZiBnZW5lcmF0ZV9rdWwoKS4KKyAqCisgKiBBIHBhc3NwaHJhc2UgYW5kIGVuZ2luZUlEIGFyZSBoYXNoZWQgaW50byBhIG1hc3RlciBrZXkgS3UgdXNpbmcKKyAqIGJvdGgga25vd24gaGFzaCB0cmFuc2Zvcm1zLiAgTG9jYWxpemVkIGtleXMsIGFsc28gdXNpbmcgYm90aCBoYXNoCisgKiB0cmFuc2Zvcm1zLCBhcmUgZ2VuZXJhdGVkIGZyb20gZWFjaCBvZiB0aGVzZSBtYXN0ZXIga2V5cy4KKyAqCisgKiBBU1NVTUUgIGdlbmVyYXRlX0t1IGlzIGFscmVhZHkgdGVzdGVkLgorICogQVNTVU1FICBlbmdpbmVJRCBpcyBpbml0aWFsbHkgYSBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nLgorICovCitpbnQKK3Rlc3RfZ2Vua3VsKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICAgIGZhaWxjb3VudCA9IDAsCisgICAgICAgIHByb3Blcmxlbmd0aCwgZW5naW5lSURfbGVuLCBpc2RlZmF1bHQgPSBGQUxTRTsKKworICAgIHNpemVfdCAgICAgICAgICBrdWxlbiwga3VsX2xlbjsKKyAgICBjaGFyICAgICAgICAgICAqcyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqdGVzdG5hbWUgPSAiVXNpbmcgSE1BQ01ENSB0byBjcmVhdGUgbWFzdGVyIGtleS4iOworICAgIGNvbnN0IGNoYXIgKmhhc2huYW1lX0t1ID0gInVzbUhNQUNNRDVBdXRoUHJvdG9jb2wiOworCisgICAgdV9jaGFyICAgICAgICAgIEt1W0xPQ0FMX01BWEJVRl0sIGt1bFtMT0NBTF9NQVhCVUZdOworCisgICAgb2lkICAgICAgICAgICAgKmhhc2h0eXBlX0t1ID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCwgKmhhc2h0eXBlX2t1bDsKKworICAgIE9VVFBVVCgiVGVzdCBvZiBnZW5lcmF0ZV9rdWwgLS0iKTsKKworICAgIC8qCisgICAgICogU2V0IHBhc3NwaHJhc2UgYW5kIGVuZ2luZUlELgorICAgICAqCisgICAgICogSWYgZW5naW5lSUQgYmVnaW5zIHdpdGggMHgsIGFzc3VtZSBpdCBpcyB3cml0dGVuIGluIChwcmludGFibGUpCisgICAgICogaGV4IGFuZCBjb252ZXJ0IGl0IHRvIGJpbmFyeSBkYXRhLgorICAgICAqLworICAgIGlmICghcGFzc3BocmFzZSkgeworICAgICAgICBwYXNzcGhyYXNlID0gc3RyZHVwKFBBU1NQSFJBU0VfREVGQVVMVCk7CisgICAgfQorICAgIGlmICghYmVxdWlldCkKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIjIFBhc3NwaHJhc2UlczogJXNcbiIsCisgICAgICAgICAgICAgICAgKHN0cmNtcChwYXNzcGhyYXNlLCBQQVNTUEhSQVNFX0RFRkFVTFQpID09IDApID8gIiAoZGVmYXVsdCkiIDogIiIsCisgICAgICAgICAgICAgICAgcGFzc3BocmFzZSk7CisKKyAgICBpZiAoIWVuZ2luZUlEKSB7CisgICAgICAgIGVuZ2luZUlEID0gKHVfY2hhciAqKSBzdHJkdXAoRU5HSU5FSURfREVGQVVMVCk7CisgICAgICAgIGlzZGVmYXVsdCA9IFRSVUU7CisgICAgfQorCisgICAgZW5naW5lSURfbGVuID0gc3RybGVuKChjaGFyICopIGVuZ2luZUlEKTsKKworICAgIGlmICh0b2xvd2VyKCooZW5naW5lSUQgKyAxKSkgPT0gJ3gnKSB7CisgICAgICAgIGVuZ2luZUlEX2xlbiA9CisgICAgICAgICAgICBoZXhfdG9fYmluYXJ5MihlbmdpbmVJRCArIDIsIGVuZ2luZUlEX2xlbiAtIDIsICZzKTsKKyAgICAgICAgRkFJTEVEKChlbmdpbmVJRF9sZW4gPCAwKSwKKyAgICAgICAgICAgICAgICJDb3VsZCBub3QgcmVzb2x2ZSBoZXggZW5naW5lSUQuIik7CisgICAgICAgIGVuZ2luZUlEID0gKHVfY2hhciAqKSBzOworICAgICAgICBiaW5hcnlfdG9faGV4KGVuZ2luZUlELCBlbmdpbmVJRF9sZW4sICZzKTsKKyAgICB9CisKKyAgICBpZiAoIWJlcXVpZXQpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiIyBlbmdpbmVJRCVzIChsZW49JWQpOiAgJXNcbiIsCisgICAgICAgICAgICAgICAgKGlzZGVmYXVsdCkgPyAiIChkZWZhdWx0KSIgOiAiIiwKKyAgICAgICAgICAgICAgICBlbmdpbmVJRF9sZW4sICgocyAhPSAwKSA/ICgodV9jaGFyICopIHMpIDogZW5naW5lSUQpKTsKKyAgICBTTk1QX0ZSRUUocyk7CisKKworCisgICAgLyoKKyAgICAgKiBDcmVhdGUgYSBtYXN0ZXIga2V5IHVzaW5nIGJvdGggaGFzaCB0cmFuc2Zvcm1zOyBjcmVhdGUgbG9jYWxpemVkCisgICAgICoga2V5cyB1c2luZyBib3RoIGhhc2ggdHJhbnNmb3JtcyBmcm9tIGVhY2ggbWFzdGVyIGtleS4KKyAgICAgKi8KKyAgdGVzdF9nZW5rdWxfYWdhaW5fbWFzdGVyOgorICAgIG1lbXNldChLdSwgMCwgTE9DQUxfTUFYQlVGKTsKKyAgICBrdWxlbiA9IExPQ0FMX01BWEJVRjsKKyAgICBoYXNodHlwZV9rdWwgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sOworICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KTsKKworCisgICAgcnZhbCA9IGdlbmVyYXRlX0t1KGhhc2h0eXBlX0t1LCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgcGFzc3BocmFzZSwgc3RybGVuKHBhc3NwaHJhc2UpLCBLdSwgJmt1bGVuKTsKKyAgICBGQUlMRUQocnZhbCwgImdlbmVyYXRlX0t1KCkuIik7CisKKyAgICBiaW5hcnlfdG9faGV4KEt1LCBrdWxlbiwgJnMpOworICAgIGlmICghYmVxdWlldCkKKyAgICAgICAgZnByaW50ZihzdGRvdXQsCisgICAgICAgICAgICAgICAgIiMgTWFzdGVyIEt1IHVzaW5nIFwiJXNcIjogXHQlc1xuIiwgaGFzaG5hbWVfS3UsIHMpOworICAgIGZyZWVfemVybyhzLCBrdWxlbik7CisKKworICB0ZXN0X2dlbmt1bF9hZ2Fpbl9sb2NhbDoKKyAgICBtZW1zZXQoa3VsLCAwLCBMT0NBTF9NQVhCVUYpOworICAgIGt1bF9sZW4gPSBMT0NBTF9NQVhCVUY7CisKKyAgICBydmFsID0gZ2VuZXJhdGVfa3VsKGhhc2h0eXBlX2t1bCwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lSUQsIGVuZ2luZUlEX2xlbiwgS3UsIGt1bGVuLCBrdWwsICZrdWxfbGVuKTsKKworICAgIGlmICgoaGFzaHR5cGVfS3UgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkKKyAgICAgICAgJiYgKGhhc2h0eXBlX2t1bCA9PSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbCkpIHsKKyAgICAgICAgRkFJTEVEKChydmFsID09IFNOTVBFUlJfU1VDQ0VTUyksCisgICAgICAgICAgICAgICAiZ2VuZXJhdGVfa3VsIFNIT1VMRCBmYWlsIHdoZW4gS3UgbGVuZ3RoIGlzICIKKyAgICAgICAgICAgICAgICJsZXNzIHRoYW4gaGFzaCB0cmFuc2Zvcm0gbGVuZ3RoLiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZBSUxFRChydmFsLCAiZ2VuZXJhdGVfa3VsKCkuIik7CisKKyAgICAgICAgRkFJTEVEKGt1bF9sZW4gIT0gcHJvcGVybGVuZ3RoLAorICAgICAgICAgICAgICAgImNoZWNraW5nIGlmIGt1bCBsZW5ndGggaXMgcmlnaHQgZm9yIHRoZSBnaXZlbiBoYXNodHlwZS4iKTsKKworICAgICAgICBiaW5hcnlfdG9faGV4KGt1bCwga3VsX2xlbiwgJnMpOworICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiMga3VsICglcykgKGxlbj0lIiBORVRTTk1QX1BSSXogInUpOiAgJXNcbiIsCisgICAgICAgICAgICAgICAgKChoYXNodHlwZV9LdSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSA/ICJNRDUiIDogIlNIQSIpLAorICAgICAgICAgICAgICAgIGt1bF9sZW4sIHMpOworICAgICAgICBmcmVlX3plcm8ocywga3VsX2xlbik7CisgICAgfQorCisKKyAgICAvKgorICAgICAqIENyZWF0ZSBsb2NhbGl6ZWQga2V5IHVzaW5nIHRoZSBvdGhlciBoYXNoIHRyYW5zZm9ybSwgYnV0IGZyb20KKyAgICAgKiAqIHRoZSBzYW1lIG1hc3RlciBrZXkuCisgICAgICovCisgICAgaWYgKGhhc2h0eXBlX2t1bCA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSB7CisgICAgICAgIGhhc2h0eXBlX2t1bCA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOworICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpOworICAgICAgICBnb3RvIHRlc3RfZ2Vua3VsX2FnYWluX2xvY2FsOworICAgIH0KKworICAgIFNVQ0NFU1ModGVzdG5hbWUpOworCisKKyAgICAvKgorICAgICAqIFJlLWNyZWF0ZSB0aGUgbWFzdGVyIGtleSB1c2luZyB0aGUgb3RoZXIgaGFzaCB0cmFuc2Zvcm0uCisgICAgICovCisgICAgaWYgKGhhc2h0eXBlX0t1ID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIHsKKyAgICAgICAgaGFzaHR5cGVfS3UgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKKyAgICAgICAgaGFzaG5hbWVfS3UgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wiOworICAgICAgICB0ZXN0bmFtZSA9ICJVc2luZyBITUFDU0hBMSB0byBjcmVhdGUgbWFzdGVyIGtleS4iOworICAgICAgICBnb3RvIHRlc3RfZ2Vua3VsX2FnYWluX21hc3RlcjsKKyAgICB9CisKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2dlbmt1bCgpICovCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2tleWNoYW5nZQorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKgorICoKKyAqIFRlc3Qgb2YgS2V5Q2hhbmdlIFRDIGltcGxlbWVudGF0aW9uLgorICoKKyAqIEFTU1VNRSBuZXdrZXkgYW5kIG9sZGtleSBiZWdpbiBhcyBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5ncy4KKyAqLworaW50Cit0ZXN0X2tleWNoYW5nZSh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAorICAgICAgICBmYWlsY291bnQgPSAwLAorICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSksCisgICAgICAgIG9sZGtleV9sZW4sCisgICAgICAgIG5ld2tleV9sZW4sCisgICAgICAgIGlzZGVmYXVsdF9uZXcgPSBGQUxTRSwgaXNkZWZhdWx0X29sZCA9IEZBTFNFOworICAgIHNpemVfdCAgICAgICAgICBrZXljaGFuZ2VfbGVuLCB0ZW1wX2xlbjsKKworICAgIGNvbnN0IGNoYXIgICAgICpoYXNobmFtZSA9ICJ1c21ITUFDTUQ1QXV0aFByb3RvY29sLiI7CisgICAgY2hhciAgICAgICAgICAgKnM7CisKKyAgICB1X2NoYXIgICAgICAgICAgb2xka2V5X2J1ZltMT0NBTF9NQVhCVUZdLAorICAgICAgICBuZXdrZXlfYnVmW0xPQ0FMX01BWEJVRl0sCisgICAgICAgIHRlbXBfYnVmW0xPQ0FMX01BWEJVRl0sIGtleWNoYW5nZV9idWZbTE9DQUxfTUFYQlVGXTsKKworICAgIG9pZCAgICAgICAgICAgICpoYXNodHlwZSA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2w7CisKKyAgICBPVVRQVVQoIlRlc3Qgb2YgS2V5Q2hhbmdlIFRDIC0tIik7CisKKworICAgIC8qCisgICAgICogU2V0IG5ld2tleSBhbmQgb2xka2V5LgorICAgICAqLworICAgIGlmICghbmV3a2V5KSB7ICAgICAgICAgICAgICAvKiBuZXdrZXkgKi8KKyAgICAgICAgbmV3a2V5ID0gKGNvbnN0IHVfY2hhciAqKSBORVdLRVlfREVGQVVMVDsKKyAgICAgICAgaXNkZWZhdWx0X25ldyA9IFRSVUU7CisgICAgfQorICAgIG5ld2tleV9sZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgbmV3a2V5KTsKKworICAgIGlmICh0b2xvd2VyKCoobmV3a2V5ICsgMSkpID09ICd4JykgeworICAgICAgICBuZXdrZXlfbGVuID0gaGV4X3RvX2JpbmFyeTIoKGNvbnN0IHVfY2hhciAqKSBuZXdrZXkgKyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3a2V5X2xlbiAtIDIsICZzKTsKKyAgICAgICAgRkFJTEVEKG5ld2tleV9sZW4gPCAwLAorICAgICAgICAgICAgICAgIkNvdWxkIG5vdCByZXNvbHZlIGhleCBuZXdrZXkuIik7CisgICAgICAgIG5ld2tleSA9IChjb25zdCB1X2NoYXIgKikgczsKKyAgICAgICAgYmluYXJ5X3RvX2hleCgoY29uc3QgdV9jaGFyICopIG5ld2tleSwgbmV3a2V5X2xlbiwgJnMpOworICAgIH0KKworICAgIGlmICghb2xka2V5KSB7ICAgICAgICAgICAgICAvKiBvbGRrZXkgKi8KKyAgICAgICAgb2xka2V5ID0gKGNvbnN0IHVfY2hhciAqKSBPTERLRVlfREVGQVVMVDsKKyAgICAgICAgaXNkZWZhdWx0X29sZCA9IFRSVUU7CisgICAgfQorICAgIG9sZGtleV9sZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgb2xka2V5KTsKKworICAgIGlmICh0b2xvd2VyKCoob2xka2V5ICsgMSkpID09ICd4JykgeworICAgICAgICBvbGRrZXlfbGVuID0gaGV4X3RvX2JpbmFyeTIoKGNvbnN0IHVfY2hhciAqKSBvbGRrZXkgKyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xka2V5X2xlbiAtIDIsICZzKTsKKyAgICAgICAgRkFJTEVEKG9sZGtleV9sZW4gPCAwLAorICAgICAgICAgICAgICAgIkNvdWxkIG5vdCByZXNvbHZlIGhleCBvbGRrZXkuIik7CisgICAgICAgIG9sZGtleSA9IChjb25zdCB1X2NoYXIgKikgczsKKyAgICAgICAgYmluYXJ5X3RvX2hleChvbGRrZXksIG9sZGtleV9sZW4sICZzKTsKKyAgICB9CisKKworCisgIHRlc3Rfa2V5Y2hhbmdlX2FnYWluOgorICAgIG1lbXNldChvbGRrZXlfYnVmLCAwLCBMT0NBTF9NQVhCVUYpOworICAgIG1lbXNldChuZXdrZXlfYnVmLCAwLCBMT0NBTF9NQVhCVUYpOworICAgIG1lbXNldChrZXljaGFuZ2VfYnVmLCAwLCBMT0NBTF9NQVhCVUYpOworICAgIG1lbXNldCh0ZW1wX2J1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKKworICAgIG1lbWNweShvbGRrZXlfYnVmLCBvbGRrZXksIFNOTVBfTUlOKG9sZGtleV9sZW4sIHByb3Blcmxlbmd0aCkpOworICAgIG1lbWNweShuZXdrZXlfYnVmLCBuZXdrZXksIFNOTVBfTUlOKG5ld2tleV9sZW4sIHByb3Blcmxlbmd0aCkpOworICAgIGtleWNoYW5nZV9sZW4gPSBMT0NBTF9NQVhCVUY7CisKKworICAgIGJpbmFyeV90b19oZXgob2xka2V5X2J1ZiwgcHJvcGVybGVuZ3RoLCAmcyk7CisgICAgZnByaW50ZihzdGRvdXQsICIjIG9sZGtleSVzIChsZW49JWQpOiAgJXNcbiIsCisgICAgICAgICAgICAoaXNkZWZhdWx0X29sZCkgPyAiIChkZWZhdWx0KSIgOiAiIiwgcHJvcGVybGVuZ3RoLCBzKTsKKyAgICBTTk1QX0ZSRUUocyk7CisKKyAgICBiaW5hcnlfdG9faGV4KG5ld2tleV9idWYsIHByb3Blcmxlbmd0aCwgJnMpOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyBuZXdrZXklcyAobGVuPSVkKTogICVzXG4iLAorICAgICAgICAgICAgKGlzZGVmYXVsdF9uZXcpID8gIiAoZGVmYXVsdCkiIDogIiIsIHByb3Blcmxlbmd0aCwgcyk7CisgICAgU05NUF9GUkVFKHMpOworCisKKyAgICBydmFsID0gZW5jb2RlX2tleWNoYW5nZShoYXNodHlwZSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGtleV9idWYsIHByb3Blcmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdrZXlfYnVmLCBwcm9wZXJsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Y2hhbmdlX2J1ZiwgJmtleWNoYW5nZV9sZW4pOworICAgIEZBSUxFRChydmFsLCAiZW5jb2RlX2tleWNoYW5nZSgpLiIpOworCisgICAgRkFJTEVEKGtleWNoYW5nZV9sZW4gIT0gKHByb3Blcmxlbmd0aCAqIDIpLAorICAgICAgICAgICAiS2V5Q2hhbmdlIHN0cmluZyAoZW5jb2RlZCkgaXMgbm90IHByb3BlciBsZW5ndGggIgorICAgICAgICAgICAiZm9yIHRoaXMgaGFzaCB0cmFuc2Zvcm0uIik7CisKKyAgICBiaW5hcnlfdG9faGV4KGtleWNoYW5nZV9idWYsIGtleWNoYW5nZV9sZW4sICZzKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgKCVzKSBLZXlDaGFuZ2Ugc3RyaW5nOiAgJXNcbiIsCisgICAgICAgICAgICAoKGhhc2h0eXBlID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpID8gIk1ENSIgOiAiU0hBIiksIHMpOworICAgIFNOTVBfRlJFRShzKTsKKworICAgIHRlbXBfbGVuID0gcHJvcGVybGVuZ3RoOworICAgIHJ2YWwgPSBkZWNvZGVfa2V5Y2hhbmdlKGhhc2h0eXBlLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xka2V5X2J1ZiwgcHJvcGVybGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWNoYW5nZV9idWYsIHByb3Blcmxlbmd0aCAqIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9idWYsICZ0ZW1wX2xlbik7CisgICAgRkFJTEVEKHJ2YWwsICJkZWNvZGVfa2V5Y2hhbmdlKCkuIik7CisKKyAgICBGQUlMRUQodGVtcF9sZW4gIT0gcHJvcGVybGVuZ3RoLAorICAgICAgICAgICAiZGVjb2RlZCBuZXdrZXkgaXMgbm90IHByb3BlciBsZW5ndGggZm9yICIKKyAgICAgICAgICAgInRoaXMgaGFzaCB0cmFuc2Zvcm0uIik7CisKKyAgICBiaW5hcnlfdG9faGV4KHRlbXBfYnVmLCB0ZW1wX2xlbiwgJnMpOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyBkZWNvZGVkIG5ld2tleTogICVzXG4iLCBzKTsKKyAgICBTTk1QX0ZSRUUocyk7CisKKworICAgIEZBSUxFRChtZW1jbXAobmV3a2V5X2J1ZiwgdGVtcF9idWYsIHRlbXBfbGVuKSwKKyAgICAgICAgICAgIm5ld2tleSBkaWQgbm90IGRlY29kZSBwcm9wZXJseS4iKTsKKworCisgICAgU1VDQ0VTUyhoYXNobmFtZSk7CisKKworICAgIC8qCisgICAgICogTXVsdGlwbGV4IGRpZmZlcmVudCB0ZXN0IGNvbWJpbmF0aW9ucy4KKyAgICAgKgorICAgICAqIEZpcnN0IGNsYXVzZSBpcyBmb3IgVGVzdCAjMiwgc2Vjb25kIGNsYXVzZSBpcyBmb3IgKGxhc3QpIFRlc3QgIzMuCisgICAgICovCisgICAgaWYgKGhhc2h0eXBlID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIHsKKyAgICAgICAgaGFzaHR5cGUgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKKyAgICAgICAgaGFzaG5hbWUgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wgKHcvREVTIGxlbmd0aCBrdWwncykuIjsKKyAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19QUklWTEVOXzFERVMpCisgICAgICAgICAgICArIEJZVEVTSVpFKFNOTVBfVFJBTlNfUFJJVkxFTl8xREVTX0lWKTsKKyAgICAgICAgZ290byB0ZXN0X2tleWNoYW5nZV9hZ2FpbjsKKworICAgIH0gZWxzZSBpZiAocHJvcGVybGVuZ3RoIDwgQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKSkgeworICAgICAgICBoYXNodHlwZSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOworICAgICAgICBoYXNobmFtZSA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbC4iOworICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpOworICAgICAgICBnb3RvIHRlc3Rfa2V5Y2hhbmdlX2FnYWluOworICAgIH0KKworICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3Rfa2V5Y2hhbmdlKCkgKi8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk1MWFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jCkBAIC0wLDAgKzEsNDIwIEBACisvKgorICogZXRpbWV0ZXN0LmMKKyAqCisgKiBIRUFERVIgVGVzdGluZyBlbmdpbmVJRCBoYXNoaW5nIGFuZCB0aW1pbmcKKyAqCisgKiBFeHBlY3RlZCBTVUNDRVNTZXMgZm9yIGFsbCB0ZXN0czogICAgMworICoKKyAqIFJldHVybnM6CisgKiAgICAgIE51bWJlciBvZiBGQUlMVVJFcy4KKyAqCisgKiBUZXN0IG9mIGhhc2hfZW5naW5lSUQoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogIDAKKyAqIFRlc3Qgb2YgTENEIEVuZ2luZSBJRCBhbmQgVGltZSBMaXN0LiAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAgMworICoKKyAqIEZJWCAgRGV2aXNlIGEgdGVzdCBmb3Ige3NldCxnZXR9X2VuZ2luZXRpbWUoLi4uLCBGQUxTRSkuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NjYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmg+CisKK3N0YXRpYyB1X2ludCAgICBkdW1teV9ldGltZSwgZHVtbXlfZWJvb3Q7ICAgICAgIC8qIEZvciBJU0VOR0lORUtOT1dOKCkuICovCisKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitleHRlcm4gY2hhciAgICAqb3B0YXJnOworZXh0ZXJuIGludCAgICAgIG9wdGluZCwgb3B0b3B0LCBvcHRlcnI7CisKK2ludCAgICAgICAgICAgICB0ZXN0Y291bnQ9MDsKKworLyoKKyAqIEdsb2JhbHMsICZjLi4uCisgKi8KK2NoYXIgICAgICAgICAgICpsb2NhbF9wcm9nbmFtZTsKKworI2RlZmluZSBVU0FHRQkiVXNhZ2U6ICVzIFstaF1bLXMgPHNlY29uZHM+XVstYWVIXSIKKyNkZWZpbmUgT1BUSU9OTElTVAkiYWVoSHM6IgorCitpbnQgICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDAsIGRvaGFzaGluZGV4ID0gMCwgZG9ldGltZXRlc3QgPSAwOworCisjZGVmaW5lCUFMTE9QVElPTlMJKGRvYWxsdGVzdHMgKyBkb2hhc2hpbmRleCArIGRvZXRpbWV0ZXN0KQorCisKKworI2RlZmluZSBMT0NBTF9NQVhCVUYJKDEwMjQgKiA4KQorI2RlZmluZSBOTAkJIlxuIgorCisjZGVmaW5lIE9VVFBVVChvKQlmcHJpbnRmKHN0ZG91dCwgIiMgJXNcbiIsIG8pOworCisjZGVmaW5lIFNVQ0NFU1MocykJCQkJCVwKK3sJCQkJCQkJXAorICAgIGZwcmludGYoc3Rkb3V0LCAiIyBEb25lIHdpdGggJXNcbiIsIHMpOyAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRkFJTEVEKGUsIGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoZSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIm5vdCBvazogJWQgLSAlc1xuIiwgKyt0ZXN0Y291bnQsIGYpOwlcCisJCWZhaWxjb3VudCArPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJvazogJWQgLSAlc1xuIiwgKyt0ZXN0Y291bnQsIGYpOwlcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmZsdXNoKHN0ZG91dCk7IFwKK30KKworI2RlZmluZSBERVRBSUxJTlQocywgaSkgXAorICAgIGZwcmludGYoc3Rkb3V0LCAiIyAlczogJWRcbiIsIHMsIGkpOworCisvKgorICogR2xvYmFsIHZhcmlhYmxlcy4KKyAqLworaW50ICAgICAgICAgICAgIHNsZWVwdGltZSA9IDI7CisKKyNkZWZpbmUgQkxBVCAiYWxrO2RqZjthbiByaXU7YWxpY2VubXJ1bDthaWtuZ2xrc2FqaGUxIGFkY2ZhbGNlbnJjbzIiCisKKworCisKKy8qCisgKiBQcm90b3R5cGVzLgorICovCit2b2lkICAgICAgICAgICAgdXNhZ2UoRklMRSAqIG9mcCk7CisKK2ludCAgICAgICAgICAgICB0ZXN0X2V0aW1lKHZvaWQpOworaW50ICAgICAgICAgICAgIHRlc3RfaGFzaGluZGV4KHZvaWQpOworCisKKworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOworICAgIGNoYXIgICAgICAgICAgICBjaDsKKworICAgIGxvY2FsX3Byb2duYW1lID0gYXJndlswXTsKKworICAgIC8qCisgICAgICogUGFyc2UuCisgICAgICovCisgICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRJT05MSVNUKSkgIT0gRU9GKSB7CisgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICBkb2FsbHRlc3RzID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdlJzoKKyAgICAgICAgICAgIGRvZXRpbWV0ZXN0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdIJzoKKyAgICAgICAgICAgIGRvaGFzaGluZGV4ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgIHNsZWVwdGltZSA9IGF0b2kob3B0YXJnKTsKKyAgICAgICAgICAgIGlmIChzbGVlcHRpbWUgPCAwKSB7CisgICAgICAgICAgICAgICAgdXNhZ2Uoc3RkZXJyKTsKKyAgICAgICAgICAgICAgICBleGl0KDEwMDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICBydmFsID0gMDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHVzYWdlKHN0ZG91dCk7CisgICAgICAgICAgICBleGl0KHJ2YWwpOworICAgICAgICB9CisKKyAgICAgICAgYXJnYyAtPSAxOworICAgICAgICBhcmd2ICs9IDE7CisgICAgICAgIGlmIChvcHRhcmcpIHsKKyAgICAgICAgICAgIGFyZ2MgLT0gMTsKKyAgICAgICAgICAgIGFyZ3YgKz0gMTsKKyAgICAgICAgICAgIG9wdGFyZyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgb3B0aW5kID0gMTsKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgZ2V0b3B0ICovCisKKyAgICBpZiAoKGFyZ2MgPiAxKSkgeworICAgICAgICB1c2FnZShzdGRvdXQpOworICAgICAgICBleGl0KDEwMDApOworCisgICAgfSBlbHNlIGlmIChBTExPUFRJT05TICE9IDEpIHsKKyAgICAgICAgZG9hbGx0ZXN0cyA9IDE7CisgICAgfQorCisgICAgaW5pdF9zbm1wKCJ0ZXN0aW5nIik7CisKKyAgICAvKgorICAgICAqIHRlc3Qgc3R1ZmYuCisgICAgICovCisgICAgcnZhbCA9IHNjX2luaXQoKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2luaXQoKSIpOworCisKKyAgICBpZiAoZG9oYXNoaW5kZXggfHwgZG9hbGx0ZXN0cykgeworICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9oYXNoaW5kZXgoKTsKKyAgICB9CisgICAgaWYgKGRvZXRpbWV0ZXN0IHx8IGRvYWxsdGVzdHMpIHsKKyAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZXRpbWUoKTsKKyAgICB9CisKKworICAgIGZwcmludGYoc3Rkb3V0LCAiMS4uJWRcbiIsIHRlc3Rjb3VudCk7CisgICAgcmV0dXJuIDA7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBtYWluKCkgKi8KKworCisKKworCit2b2lkCit1c2FnZShGSUxFICogb2ZwKQoreworICAgIGZwcmludGYob2ZwLAorICAgICAgICAgICAgVVNBR0UKKyAgICAgICAgICAgICIiIE5MCisgICAgICAgICAgICAiICAgIC1hCQkJQWxsIHRlc3RzLiIgTkwKKyAgICAgICAgICAgICIgICAgLWUJCQlFeGVyY2lzZSB0aGUgbGlzdCBvZiBlbmdpbmV0aW1lcy4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtaAkJCUhlbHAuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLUgJCQlUZXN0IGhhc2hfZW5naW5lSUQoKS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtcyA8c2Vjb25kcz4JU2Vjb25kcyB0byBwYXVzZS4gIChEZWZhdWx0OiAwLikiCisgICAgICAgICAgICBOTCBOTCwgbG9jYWxfcHJvZ25hbWUpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c2FnZSgpICovCisKKworCisKKyNpZmRlZiBFWEFNUExFCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9kb3NvbWV0aGluZworICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKgorICoKKyAqIFRlc3QgdGVtcGxhdGUuCisgKi8KK2ludAordGVzdF9kb3NvbWV0aGluZyh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOworCisgIHRlc3RfZG9zb21ldGhpbmdfcXVpdDoKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rvc29tZXRoaW5nKCkgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhBTVBMRSAqLworCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2hhc2hpbmRleAorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKgorICoKKyAqIFRlc3QgaGFzaF9lbmdpbmVJRCgpLgorICovCitpbnQKK3Rlc3RfaGFzaGluZGV4KHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsICAqLworICAgICAgICAgICAgICAgICAgICBmYWlsY291bnQgPSAwOworICAgIGNvbnN0IHVfY2hhciAgICAgKnM7CisKKyAgICBPVVRQVVQoIlZpc3VhbCBzcG90IGNoZWNrIG9mIGhhc2ggaW5kZXggb3V0cHV0cy4gICIKKyAgICAgICAgICAgIihTdWNjZXNzIG9yIGZhaWx1cmUgbm90IG5vdGVkLikiKTsKKworICAgIHMgPSAoY29uc3QgdV9jaGFyICopICIgQSI7CisgICAgZnByaW50ZihzdGRvdXQsICIjICVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKChjb25zdCBjaGFyICopIHMpKSk7CisKKyAgICBzID0gKGNvbnN0IHVfY2hhciAqKSAiIEJCIjsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4oKGNvbnN0IGNoYXIgKikgcykpKTsKKworICAgIHMgPSAoY29uc3QgdV9jaGFyICopICIgQ0NDIjsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4oKGNvbnN0IGNoYXIgKikgcykpKTsKKworICAgIHMgPSAoY29uc3QgdV9jaGFyICopICIgRERERCI7CisgICAgZnByaW50ZihzdGRvdXQsICIjICVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKChjb25zdCBjaGFyICopIHMpKSk7CisKKyAgICBzID0gKGNvbnN0IHVfY2hhciAqKSAiIEVFRUVFIjsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4oKGNvbnN0IGNoYXIgKikgcykpKTsKKworICAgIHMgPSAoY29uc3QgdV9jaGFyICopIEJMQVQ7CisgICAgZnByaW50ZihzdGRvdXQsICIjICVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKChjb25zdCBjaGFyICopIHMpKSk7CisKKworICAgIE9VVFBVVCgiVmlzdWFsIHNwb3QgY2hlY2sgLS0gRE9ORS4iKTsKKworICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfaGFzaGluZGV4KCkgKi8KKworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9ldGltZQorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKgorICogVGVzdCBvZiBMQ0QgRW5naW5lIElEIGFuZCBUaW1lIExpc3QuCQorICovCitpbnQKK3Rlc3RfZXRpbWUodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKKyAgICB1X2ludCAgICAgICAgICAgZXRpbWUsIGVib290OworCisgICAgLyoKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisgICAgICovCisgICAgT1VUUFVUKCJRdWVyeSBvZiBlbXB0eSBsaXN0LCB0d28gc2V0IGFjdGlvbnMuIik7CisKKworICAgIHJ2YWwgPSBJU0VOR0lORUtOT1dOKChjb25zdCB1X2NoYXIgKikgIkEiLCAxKTsKKyAgICBpZiAocnZhbCA9PSBUUlVFKSB7CisgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIlF1ZXJ5IG9mIGVtcHR5IGxpc3QgcmV0dXJuZWQgVFJVRS4iKQorICAgIH0KKworCisgICAgcnZhbCA9IHNldF9lbmdpbmV0aW1lKChjb25zdCB1X2NoYXIgKikgIkJCIiwgMiwgMiwgMjAsIFRSVUUpOworICAgIEZBSUxFRChydmFsLCAic2V0X2VuZ2luZXRpbWUoKSIpOworCisKKyAgICBydmFsID0gc2V0X2VuZ2luZXRpbWUoKGNvbnN0IHVfY2hhciAqKSAiQ0NDIiwgMywgMzEsIDkwMTI3LCBUUlVFKTsKKyAgICBGQUlMRUQocnZhbCwgInNldF9lbmdpbmV0aW1lKCkiKTsKKworCisgICAgU1VDQ0VTUygiQ2hlY2sgb2YgZW1wdHkgbGlzdCwgYW5kIHR3byBhZGRpdGlvbnMuIik7CisKKworCisgICAgLyoKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisgICAgICovCisgICAgT1VUUFVUKCJBZGQgZW50cmllcyB1c2luZyBtYWNyb3MsIHRlc3QgZm9yIGV4aXN0ZW5jZSB3aXRoIG1hY3Jvcy4iKTsKKworCisgICAgcnZhbCA9IEVOU1VSRV9FTkdJTkVfUkVDT1JEKChjb25zdCB1X2NoYXIgKikgIkREREQiLCA0KTsKKyAgICBGQUlMRUQocnZhbCwgIkVOU1VSRV9FTkdJTkVfUkVDT1JEKCkiKTsKKworCisgICAgcnZhbCA9IE1BS0VORVdfRU5HSU5FX1JFQ09SRCgoY29uc3QgdV9jaGFyICopICJFRUVFRSIsIDUpOworICAgIGlmIChydmFsID09IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICBGQUlMRUQocnZhbCwKKyAgICAgICAgICAgICAgICJNQUtFTkVXX0VOR0lORV9SRUNPUkQgcmV0dXJuZWQgc3VjY2VzcyBmb3IgIgorICAgICAgICAgICAgICAgIm1pc3NpbmcgcmVjb3JkLiIpOworICAgIH0KKworCisgICAgcnZhbCA9IE1BS0VORVdfRU5HSU5FX1JFQ09SRCgoY29uc3QgdV9jaGFyICopICJCQiIsIDIpOworICAgIEZBSUxFRChydmFsLCAiTUFLRU5FV19FTkdJTkVfUkVDT1JEKCkuIik7CisKKworICAgIFNVQ0NFU1MKKyAgICAgICAgKCJBZGRlZCBlbnRyaWVzIHdpdGggbWFjcm9zLCB0ZXN0ZWQgZm9yIGV4aXN0ZW5jZSB3aXRoIG1hY3Jvcy4iKTsKKworCisKKyAgICAvKgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyAgICAgKi8KKyAgICBPVVRQVVQoIkR1bXAgdGhlIGxpc3QgYW5kIHRoZW4gc2xlZXAuIik7CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKKyAgICBkdW1wX2V0aW1lbGlzdCgpOworI2VuZGlmCisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgU2xlZXBpbmcgZm9yICVkIHNlY29uZCVzLi4uICIsCisgICAgICAgICAgICBzbGVlcHRpbWUsIChzbGVlcHRpbWUgPT0gMSkgPyAiIiA6ICJzIik7CisKKyAgICBzbGVlcChzbGVlcHRpbWUpOworCisKKyAgICAvKgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyAgICAgKi8KKyAgICBPVVRQVVQKKyAgICAgICAgKCJSZXRyaWV2ZSBkYXRhIGZyb20gcmVhbC9zdHViYmVkIHJlY29yZHMsIHVwZGF0ZSByZWFsL3N0dWJiZWQuIik7CisKKworCisgICAgcnZhbCA9IGdldF9lbmdpbmV0aW1lKChjb25zdCB1X2NoYXIgKikgIkJCIiwgMiwgJmVib290LCAmZXRpbWUsIFRSVUUpOworICAgIEZBSUxFRChydmFsLCAiZ2V0X2VuZ2luZXRpbWUoKS4iKTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAiIyBCQiA9IDwlZCwlZD5cbiIsIGVib290LCBldGltZSk7CisgICAgaWYgKChldGltZSA8IDIwKSB8fCAoZWJvb3QgPCAyKSkgeworICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAiZ2V0X2VuZ2luZXRpbWUoKSByZXR1cm5lZCBiYWQgdmFsdWVzLiAgKDEpIik7CisgICAgfQorCisgICAgcnZhbCA9IGdldF9lbmdpbmV0aW1lKChjb25zdCB1X2NoYXIgKikgIkREREQiLCA0LCAmZWJvb3QsICZldGltZSwgRkFMU0UpOworICAgIEZBSUxFRChydmFsLCAiZ2V0X2VuZ2luZXRpbWUoKS4iKTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAiIyBEREREID0gPCVkLCVkPlxuIiwgZWJvb3QsIGV0aW1lKTsKKyAgICBpZiAoKGV0aW1lIDwgc2xlZXB0aW1lKSB8fCAoZWJvb3QgIT0gMCkpIHsKKyAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAorICAgICAgICAgICAgICAgImdldF9lbmdpbmV0aW1lKCkgcmV0dXJuZWQgYmFkIHZhbHVlcy4gICgyKSIpOworICAgIH0KKworCisgICAgcnZhbCA9IHNldF9lbmdpbmV0aW1lKChjb25zdCB1X2NoYXIgKikgIkNDQyIsIDMsIDIzNCwgMTAwMDAsIFRSVUUpOworICAgIEZBSUxFRChydmFsLCAic2V0X2VuZ2luZXRpbWUoKS4iKTsKKworCisgICAgcnZhbCA9IHNldF9lbmdpbmV0aW1lKChjb25zdCB1X2NoYXIgKikgIkVFRUVFIiwgNSwgOTg3NiwgNTU1NTUsIFRSVUUpOworICAgIEZBSUxFRChydmFsLCAic2V0X2VuZ2luZXRpbWUoKS4iKTsKKworCisgICAgU1VDQ0VTUygiUmV0cmlldmFsIGFuZCB1cGRhdGVzLiIpOworCisKKworICAgIC8qCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorICAgICAqLworICAgIE9VVFBVVCgiU2xlZXAgYWdhaW4sIHRoZW4gZHVtcCB0aGUgbGlzdCBvbmUgbGFzdCB0aW1lLiIpOworCisgICAgZnByaW50ZihzdGRvdXQsICIjIFNsZWVwaW5nIGZvciAlZCBzZWNvbmQlcy4uLlxuIiwKKyAgICAgICAgICAgIHNsZWVwdGltZSwgKHNsZWVwdGltZSA9PSAxKSA/ICIiIDogInMiKTsKKworICAgIHNsZWVwKHNsZWVwdGltZSk7CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKKyAgICBkdW1wX2V0aW1lbGlzdCgpOworI2VuZGlmCisKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2V0aW1lKCkgKi8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG0gYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YWMwNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtCkBAIC0wLDAgKzEsMTcyIEBACitwYWNrYWdlIE5ldFNOTVBUZXN0OworCit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZmlsZSB0ZW1wZGlyKTsKK3VzZSBJTzo6RmlsZTsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2Ugc3RyaWN0OworCitzdWIgbmV3IHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIG15ICgkY2xhc3MpID0gcmVmKCR0eXBlKSB8fCAkdHlwZTsKKyAgICBteSAkc2VsZiA9IHt9OworICAgICUkc2VsZiA9IEBfOworICAgIGJsZXNzKCRzZWxmLCAkY2xhc3MpOworICAgICRzZWxmLT5pbml0KCk7CisgICAgcmV0dXJuICRzZWxmOworfQorCitzdWIgaW5pdCB7CisgICAgbXkgKCRzZWxmKSA9IEBfOworICAgICRzZWxmLT57J2Rpcid9ID0gdGVtcGRpcigpOworICAgIHByaW50ICIjIHVzaW5nIHRlbXBkaXIgJHNlbGYtPntkaXJ9XG4iOworCisgICAgZm9yZWFjaCBteSAkc3VmZml4IChxdyhjb25mIHBpZCBsb2cgb3V0KSkgeworCSRzZWxmLT57InNubXBkLiRzdWZmaXgifSB8fD0gJHNlbGYtPnsnZGlyJ30gLiAiL3NubXBkLiRzdWZmaXgiOworICAgIH0KKyAgICAkc2VsZi0+eydzbm1wLmNvbmYnfSB8fD0gJHNlbGYtPnsnZGlyJ30gLiAiL3NubXAuY29uZiI7CisKKyAgICAkc2VsZi0+eydjb25mZGlyJ30gfHw9ICRzZWxmLT57J2Rpcid9OworICAgICRzZWxmLT57J3BlcnNpc3RlbnRkaXInfSB8fD0gJHNlbGYtPnsnZGlyJ30gLiAiL3BlcnNpc3RlbnQiOworfQorCitzdWIgY29uZmlnX2ZpbGUgeworICAgIG15ICgkc2VsZiwgJGZpbGUsICRzdHJpbmcpID0gQF87CisgICAgbXkgJGZoID0gbmV3IElPOjpGaWxlICgiPj4gJGZpbGUiKTsKKyAgICAkZmgtPnByaW50KCRzdHJpbmcpOworICAgIGlmICgkc3RyaW5nICF+IC9cbiQvKSB7CisJJGZoLT5wcmludCgiXG4iKTsKKyAgICB9CisgICAgJGZoLT5jbG9zZSgpOworfQorCitzdWIgY29uZmlnX2FnZW50IHsKKyAgICBteSAoJHNlbGYsICRzdHJpbmcpID0gQF87CisgICAgJHNlbGYtPmNvbmZpZ19maWxlKCRzZWxmLT57J3NubXBkLmNvbmYnfSwgJHN0cmluZyk7Cit9CisKK3N1YiBjb25maWdfYXBwIHsKKyAgICBteSAoJHNlbGYsICRzdHJpbmcpID0gQF87CisgICAgJHNlbGYtPmNvbmZpZ19maWxlKCRzZWxmLT57J3NubXAuY29uZid9LCAkc3RyaW5nKTsKK30KKworc3ViIHJlcXVpcmVfZmVhdHVyZSB7CisgICAgbXkgKCRzZWxmLCAkZmVhdHVyZSkgPSBAXzsKKyAgICBteSAkc3JjZGlyID0gJEVOVnsnc3JjZGlyJ30gfHwgIi4uIjsKKyAgICBteSAkZmggPSBuZXcgSU86OkZpbGUoIiRzcmNkaXIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIpOworICAgIHdoaWxlICg8JGZoPikgeworCWlmICgvI2RlZmluZSAkZmVhdHVyZSAxLykgeworCSAgICAkZmgtPmNsb3NlKCk7CisJICAgIHJldHVybiAxOworCX0KKyAgICB9CisgICAgcHJpbnQgIjEuLjAgIyBTS0lQIG1pc3NpbmcgJGZlYXR1cmVcbiI7CisgICAgZXhpdDsKK30KKworc3ViIHN0YXJ0X2FnZW50IHsKKyAgICBteSAoJHNlbGYsICRmbGFncykgPSBAXzsKKworICAgICRmbGFncyB8fD0gJHNlbGYtPnsnc25tcGRmbGFncyd9OworCisgICAgJEVOVnsnU05NUENPTkZQQVRIJ30gPSAkc2VsZi0+eydjb25mZGlyJ307CisgICAgJEVOVnsnU05NUF9QRVJTSVNURU5UX0RJUid9ID0gJHNlbGYtPnsncGVyaXN0ZW50ZGlyJ307CisKKyAgICBteSAkY21kID0gInNubXBkICRmbGFncyAtciAtVSAtcCAkc2VsZi0+eydzbm1wZC5waWQnfSAtTGYgJHNlbGYtPnsnc25tcGQubG9nJ30gJHNlbGYtPnsnYWdlbnRhZGRyZXNzJ30gPiAkc2VsZi0+eydzbm1wZC5vdXQnfSAyPiYxIjsKKyAgICBTeXN0ZW0oIiRjbWQgJiIpOworCisgICAgc2xlZXAoMSk7CisKKyAgICByZXR1cm4gJHNlbGYtPndhaXRfZm9yKCRzZWxmLT57J3NubXBkLmxvZyd9LCAiTkVULVNOTVAgdmVyc2lvbiIpOworfQorCitzdWIgc3RvcF9hZ2VudCB7CisgICAgbXkgKCRzZWxmKSA9IEBfOworICAgIG15ICRwaWRmaWxlID0gbmV3IElPOjpGaWxlICIkc2VsZi0+eydzbm1wZC5waWQnfSI7CisgICAgbXkgJHBpZCA9IDwkcGlkZmlsZT47CisgICAga2lsbCgiVEVSTSIsICRwaWQpOworICAgICRzZWxmLT53YWl0X2Zvcigkc2VsZi0+eydzbm1wZC5sb2cnfSwgJ3NodXR0aW5nIGRvd24nKTsKK30KKworIyByZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlCitzdWIgd2FpdF9mb3IgeworICAgIG15ICgkc2VsZiwgJGZpbGVuYW1lLCAkcmVnZXhwLCAkbWF4dGltZSkgPSBAXzsKKyAgICBteSAkZmggPSBuZXcgSU86OkZpbGUgIiRmaWxlbmFtZSI7CisgICAgcmV0dXJuIDAgaWYgKCEkZmgpOworCisgICAgJG1heHRpbWUgPSAxMCBpZiAoIWRlZmluZWQoJG1heHRpbWUpKTsKKworICAgIG15ICR0aW1lY291bnQgPSAwOworICAgICMgcHJpbnQgIiMgcmVhZGluZyBmcm9tOiAkZmlsZW5hbWVcbiI7CisgICAgd2hpbGUgKDEpIHsKKwlteSAkbGluZSA9IDwkZmg+OworCSMgcHJpbnQgIiMgbGluZTogJGxpbmVcbiI7CisJaWYgKCRsaW5lIGVxICIiKSB7CisJICAgIGlmICgkdGltZWNvdW50ID09ICRtYXh0aW1lKSB7CisJCXJldHVybiAwOworCSAgICB9CisJICAgIHNsZWVwKDEpOworCSAgICBwcmludCAiIyBzbGVlcGluZyAuLi5cbiI7CisJICAgICRmaC0+Y2xlYXJlcnIoKTsKKwkgICAgJHRpbWVjb3VudCsrOworCX0gZWxzZSB7CisJICAgIGNob21wKCRsaW5lKTsKKwkgICAgaWYgKCRsaW5lID1+IC8kcmVnZXhwLykgeworCQlyZXR1cm4gMTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBEZWJ1ZyB7CisgICAgcHJpbnQgICIjICIgLiBqb2luKCIgIixAXyk7Cit9CisKK3N1YiBTeXN0ZW0geworICAgIG15ICgkY21kKSA9IEBfOworICAgIERlYnVnKCJydW5uaW5nOiAiLCAkY21kLCAiXG4iKTsKKyAgICBzeXN0ZW0oJGNtZCk7Cit9CisKK3N1YiBESUUgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgJHNlbGYtPnN0b3BfYWdlbnQoKTsKKyAgICBkaWUgQF87Cit9CisKKzE7CisKKz1wb2QKKworPWhlYWQxIE5BTUUKKworTmV0U05NUFRlc3QgLSBzaW1wbGUgdGVzdGluZyBtb2R1bGUgZm9yIHRlc3RpbmcgcGVybCB0ZXN0cworCis9aGVhZDEgVVNBR0UKKwordXNlIE5ldFNOTVBUZXN0OwordXNlIFRlc3Q7Cit1c2UgU05NUDsKKworbXkgJGRlc3RpbmF0aW9uID0gInVkcDpsb2NhbGhvc3Q6OTg3NiI7CisKK215ICR0ZXN0ID0gbmV3IE5ldFNOTVBUZXN0KGFnZW50YWRkcmVzcyA9PiAkZGVzdGluYXRpb24pOworCiskdGVzdC0+cmVxdWlyZV9mZWF0dXJlKCJTT01FX0lGREVGX0ZST01fTkVUX1NOTVBfQ09ORklHX0giKTsKKworJHRlc3QtPmNvbmZpZ19hZ2VudCgicm9jb21tdW5pdHkgcHVibGljIik7CiskdGVzdC0+Y29uZmlnX2FnZW50KCJzeXNjb250YWN0IHRlc3R2YWx1ZSIpOworJHRlc3QtPkRJRSgiZmFpbGVkIHRvIHN0YXJ0IHRoZSBhZ2VudCIpIGlmICghJHRlc3QtPnN0YXJ0X2FnZW50KCkpOworCitteSAkc2Vzc2lvbiA9IG5ldyBTTk1QOjpTZXNzaW9uKERlc3RIb3N0ID0+ICRkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9PiAnMmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tdW5pdHkgPT4gJ3B1YmxpYycpOworCitteSAkdmFsdWUgPSAkc2Vzc2lvbi0+Z2V0KCdzeXNDb250YWN0LjAnKTsKK3BsYW4odGVzdHMgPT4gMSk7CitvaygkdmFsdWUsICd0ZXN0dmFsdWUnKTsKKworJHRlc3QtPnN0b3BfYWdlbnQoKTsKKworPWN1dAorCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhZ2VudGxpYl9idWlsZCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FnZW50bGliX2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1YTM1YWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhZ2VudGxpYl9idWlsZApAQCAtMCwwICsxLDQ2IEBACisjIS9iaW4vc2gKKworIyBidWlsZCB0aGUgQyB0ZXN0IGZpbGUgLi4uCisKK3JtIC1mICIkMi5jIgorY2F0ID4+IiQyLmMiIDw8RU9GCisvKiBuZXQtc25tcCBzdGFuZGFyZCBoZWFkZXJzICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKiB0ZXN0aW5nIHNwZWNpZmljIGhlYWRlciAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdGVzdGluZy5oPgorCisvKiBzdGFuZGFyZCBoZWFkZXJzICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworCitFT0YKK2VjaG8gPj4iJDIuYyIgIiNsaW5lIDEgXCIkMVwiIgorY2F0ID4+IiQyLmMiICIkMSIKK2NhdCA+PiIkMi5jIiA8PEVPRgorCisgICBpZiAoX19kaWRfcGxhbiA9PSAwKSB7CisgICAgICAgUExBTihfX3Rlc3RfY291bnRlcik7CisgICB9CisKKyAgIHJldHVybigwKTsKK30KKworRU9GCisKKyMgLi4uIGFuZCBjb21waWxlIGl0LgorJHtidWlsZGRpcn0vbGlidG9vbCAtLW1vZGU9bGluayBgJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIC0tYnVpbGQtY29tbWFuZGAgLUkkYnVpbGRkaXIvaW5jbHVkZSAtSSRzcmNkaXIvaW5jbHVkZSAtbyAkMiAkMi5jICR7YnVpbGRkaXJ9L3NubXBsaWIvbGlibmV0c25tcC5sYSAke2J1aWxkZGlyfS9hZ2VudC9saWJuZXRzbm1wYWdlbnQubGEgYCR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyAtLWV4dGVybmFsLWxpYnNgCitlY2hvICQyCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhZ2VudGxpYl9ydW4gYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhZ2VudGxpYl9ydW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODRmNTRlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FnZW50bGliX3J1bgpAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorJHtEWU5BTUlDX0FOQUxZWkVSfSAke2J1aWxkZGlyfS9saWJ0b29sIC0tbW9kZT1leGVjdXRlICIkMSIgMj4mMSBcCit8IFwKK2lmIFsgIngkU05NUF9TQVZFX1RNUERJUiIgPSAieHllcyIgXTsgdGhlbgorICB0ZWUgIi90bXAvc25tcC11bml0LXRlc3QtYGJhc2VuYW1lICQxYCIKK2Vsc2UKKyAgY2F0CitmaQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjMDM4YzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworJHtidWlsZGRpcn0vbGlidG9vbCAtLW1vZGU9bGluayBgJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIC0tYnVpbGQtY29tbWFuZGAgLUkkYnVpbGRkaXIvaW5jbHVkZSAtSSRzcmNkaXIvaW5jbHVkZSAtbyAkMiAkMSAke2J1aWxkZGlyfS9zbm1wbGliL2xpYm5ldHNubXAubGEgYCR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyAtLWV4dGVybmFsLWxpYnNgCitlY2hvICQyCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfcnVuIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX3J1bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NGY1NGUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX3J1bgpAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorJHtEWU5BTUlDX0FOQUxZWkVSfSAke2J1aWxkZGlyfS9saWJ0b29sIC0tbW9kZT1leGVjdXRlICIkMSIgMj4mMSBcCit8IFwKK2lmIFsgIngkU05NUF9TQVZFX1RNUERJUiIgPSAieHllcyIgXTsgdGhlbgorICB0ZWUgIi90bXAvc25tcC11bml0LXRlc3QtYGJhc2VuYW1lICQxYCIKK2Vsc2UKKyAgY2F0CitmaQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5NGJlYmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQKQEAgLTAsMCArMSw3NCBAQAorIyEvYmluL3NoCisKKyMgYnVpbGQgdGhlIEMgdGVzdCBmaWxlIC4uLgorCitzY3JpcHRuYW1lPSIkMCIKK2lmIFsgIiR7c2NyaXB0bmFtZSMvfSIgPSAiJHtzY3JpcHRuYW1lfSIgXTsgdGhlbgorICAgIHNjcmlwdG5hbWU9IiR7UFdEfS8ke3NjcmlwdG5hbWV9IgorZmkKK3NjcmlwdGRpcj0iJChkaXJuYW1lICR7c2NyaXB0bmFtZX0pIgorc3JjZGlyPSIkKGRpcm5hbWUgJChkaXJuYW1lICQoZGlybmFtZSAkc2NyaXB0ZGlyKSkpIgorCitybSAtZiAiJDIuYyIKK2NhdCA+PiIkMi5jIiA8PEVPRgorLyogbmV0LXNubXAgc3RhbmRhcmQgaGVhZGVycyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaD4KKworLyogdGVzdGluZyBzcGVjaWZpYyBoZWFkZXIgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rlc3RpbmcuaD4KKworLyogc3RhbmRhcmQgaGVhZGVycyAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX0xJTUlUU19ICisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSVA2X0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwNi5oPgorI2VuZGlmCisjaWZuZGVmIEhBVkVfSU5FVF9QVE9OCisjaW5jbHVkZSAic25tcGxpYi9pbmV0X3B0b24uaCIKKyNlbmRpZgorI2lmbmRlZiBIQVZFX0lORVRfTlRPUAorI2luY2x1ZGUgInNubXBsaWIvaW5ldF9udG9wLmgiCisjZW5kaWYKKworI2RlZmluZSBBQlNfU1JDRElSICIke3NyY2Rpcn0iCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisKK0VPRgorZWNobyA+PiIkMi5jIiAiI2xpbmUgMSBcIiQxXCIiCitjYXQgPj4iJDIuYyIgIiQxIgorY2F0ID4+IiQyLmMiIDw8RU9GCisKKyAgIGlmIChfX2RpZF9wbGFuID09IDApIHsKKyAgICAgICBQTEFOKF9fdGVzdF9jb3VudGVyKTsKKyAgIH0KKworICAgcmV0dXJuKDApOworfQorCitFT0YKKworIyAuLi4gYW5kIGNvbXBpbGUgaXQuCiske2J1aWxkZGlyfS9saWJ0b29sIC0tbW9kZT1saW5rIGAke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWcgLS1idWlsZC1jb21tYW5kYCAtSSRidWlsZGRpci9pbmNsdWRlIC1JJHNyY2RpciAtSSRzcmNkaXIvaW5jbHVkZSAtbyAkMiAkMi5jICR7YnVpbGRkaXJ9L3NubXBsaWIvbGlibmV0c25tcC5sYSBgJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIC0tZXh0ZXJuYWwtbGlic2AKK2VjaG8gJDIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9ydW4gYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfcnVuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0ZjU0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfcnVuCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCiske0RZTkFNSUNfQU5BTFlaRVJ9ICR7YnVpbGRkaXJ9L2xpYnRvb2wgLS1tb2RlPWV4ZWN1dGUgIiQxIiAyPiYxIFwKK3wgXAoraWYgWyAieCRTTk1QX1NBVkVfVE1QRElSIiA9ICJ4eWVzIiBdOyB0aGVuCisgIHRlZSAiL3RtcC9zbm1wLXVuaXQtdGVzdC1gYmFzZW5hbWUgJDFgIgorZWxzZQorICBjYXQKK2ZpCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMGE4YWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaApAQCAtMCwwICsxLDI2NCBAQAorIyEgL2Jpbi9zaCAtZgorCisjCisjIFZhcmlhYmxlczogICgqID0gZXhwb3J0ZWQpCisjICAqU05NUF9UTVBESVI6ICAJICBwbGFjZSB0byBwdXQgZmlsZXMgdXNlZCBpbiB0ZXN0aW5nLgorIyAgIFNOTVBfVEVTVERJUjogCSAgd2hlcmUgdGhlIHRlc3Qgc2NyaXB0cyBhcmUga2VwdC4KKyMgICpTTk1QX1BFUlNJU1RFTlRfRklMRTogd2hlcmUgdG8gc3RvcmUgdGhlIGFnZW50J3MgcGVyc2lzdGVudCBpbmZvcm1hdGlvbgorIyAgICAgICAgICAgICAgICAgICAgICAgICAoWFhYOiB0aGlzIHNob3VsZCBiZSBzcGVjaWZpYyB0byBqdXN0IHRoZSBhZ2VudCkKKworIyBNaW5HVy9NU1lTIG9ubHk6IHRyYW5zbGF0ZSBhbiBNU1lTIHBhdGggYmFjayBpbnRvIGEgRE9TIHBhdGggc3VjaCB0aGF0IHNubXBkCisjIGFuZCB0aGUgTmV0LVNOTVAgYXBwbGljYXRpb25zIGNhbiB1bmRlcnN0YW5kIGl0LiBPbmUgb2YgdGhlIGZlYXR1cmVzIG9mIE1TWVMKKyMgaXMgdGhhdCBpZiBhIFBPU0lYLXN0eWxlIHBhdGggaXMgcGFzc2VkIGFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50IHRvIGFuCisjIGV4ZWN1dGFibGUgdGhhdCBNU1lTIHRyYW5zbGF0ZXMgdGhhdCBwYXRoIHRvIGEgRE9TLXN0eWxlIHBhdGggYmVmb3JlCisjIHN0YXJ0aW5nIHRoZSBleGVjdXRhYmxlLiBUaGlzIGlzIGEga2V5IGZlYXR1cmUgb2YgTVNZUyB0aGF0IG1ha2VzIGl0CisjIHBvc3NpYmxlIHRvIHJ1biBzaGVsbCBzY3JpcHRzIHVubW9kaWZpZWQgYW5kIGF0IHRoZSBzYW1lIHRpbWUgdG8gdXNlCisjIGV4ZWN1dGFibGVzIHRoYXQgYWNjZXB0IERPUy1zdHlsZSBwYXRocy4gVGhlcmUgaXMgbm8gc3VwcG9ydCBob3dldmVyIGZvcgorIyBhdXRvbWF0aWNhbCB0cmFuc2xhdGlvbiBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBjb250YWluIHBhdGhzLiBIZW5jZQorIyB0aGlzIGZ1bmN0aW9uIHRoYXQgdHJhbnNsYXRlcyBwYXRocyBleHBsaWNpdGx5LgordHJhbnNsYXRlX3BhdGgoKSB7CisgIGlmIFsgIiRPU1RZUEUiID0gbXN5cyBdOyB0aGVuCisgICAgbG9jYWwgdD1gc2V0IFwKKyAgICAgICAgICAgICB8IHNlZCAtbiAtZSAicy9eJDE9J1woLipcKSckLyR7U05NUF9FTlZfU0VQQVJBVE9SfVwxL3AiIFwKKyAgICAgICAgICAgICAgICAgICAgICAtZSAicy9eJDE9XCguKlwpJC8ke1NOTVBfRU5WX1NFUEFSQVRPUn1cMS9wIiBcCisgICAgICAgICAgICAgfCBzZWQgLWUgInN8JHtTTk1QX0VOVl9TRVBBUkFUT1J9L2MvfCR7U05NUF9FTlZfU0VQQVJBVE9SfWM6L3xnIiBcCisgICAgICAgICAgICAgICAgICAgLWUgInN8JHtTTk1QX0VOVl9TRVBBUkFUT1J9L3RtcC98JHtTTk1QX0VOVl9TRVBBUkFUT1J9Yzovd2luZG93cy90ZW1wL3xnIiBcCisgICAgICAgICAgICAgfCBzZWQgLWUgInMvXiR7U05NUF9FTlZfU0VQQVJBVE9SfS8vIiBcCisgICAgICAgICAgICBgCisgICAgZXZhbCAiJDE9JyR0JyIKKyAgZmkKK30KKworIworIyBPbmx5IGFsbG93IG91cnNlbHZlcyB0byBiZSBldmFsJ2VkIG9uY2UKKyMKK2lmIFsgIngkVEVTVENPTkZfU0hfRVZBTEVEIiAhPSAieHllcyIgXTsgdGhlbgorICAgIFRFU1RDT05GX1NIX0VWQUxFRD15ZXMKKworIworIyBzZXQgY3B1IGFuZCBtZW1vcnkgbGltaXRzIHRvIHByZXZlbnQgbWFqb3IgZGFtYWdlCisjCisjIGRlZmF1bHRzOiAxaCBDUFUsIDUwME1CIFZNRU0KKyMKK1sgIngkU05NUF9MSU1JVF9WTUVNIiA9ICJ4IiBdICYmIFNOTVBfTElNSVRfVk1FTT01MTIwMDAKK1sgIngkU05NUF9MSU1JVF9DUFUiID0gIngiIF0gJiYgU05NUF9MSU1JVF9DUFU9MzYwMAorIyB1bGltaXQgd2lsbCBmYWlsIGlmIGV4aXN0aW5nIGxpbWl0IGlzIGxvd2VyIC0tIGlnbm9yZSBiZWNhdXNlIGl0J3Mgb2sKK3VsaW1pdCAtUyAtdCAkU05NUF9MSU1JVF9DUFUgMj4vZGV2L251bGwKKyMgbm90IGFsbCBzaC1hbGlrZXMgc3VwcG9ydCAidWxpbWl0IC12IiAtLSBwbGF5IHNhZmUKK1sgIngkQkFTSF9WRVJTSU9OIiAhPSAieCIgXSAmJiB1bGltaXQgLVMgLXYgJFNOTVBfTElNSVRfVk1FTSAyPi9kZXYvbnVsbAorCisjCisjIFNldCB1cCBhbiBOTCBzdXBwcmVzc2luZyBlY2hvIGNvbW1hbmQKKyMKK2Nhc2UgImBlY2hvICd4XGMnYCIgaW4KKyAgJ3hcYycpCisgICAgRUNITygpIHsgZWNobyAtbiAkKjsgfQorICAgIDs7CisgIHgpCisgICAgRUNITygpIHsgZWNobyAkKlxcYzsgfQorICAgIDs7CisgICopCisgICAgZWNobyAiSSBkb24ndCB1bmRlcnN0YW5kIHlvdXIgZWNobyBjb21tYW5kIC4uLiIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworIworIyBob3cgdmVyYm9zZSBzaG91bGQgd2UgYmUgKDAgb3IgMSkKKyMKK2lmIFsgIngkU05NUF9WRVJCT1NFIiA9ICJ4IiBdOyB0aGVuCisgICAgU05NUF9WRVJCT1NFPTAKKyAgICBleHBvcnQgU05NUF9WRVJCT1NFCitmaQorCitTTk1QX0VOVl9TRVBBUkFUT1I9ImAke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWcgLS1lbnYtc2VwYXJhdG9yYCIKKworaWYgWyAieCRNSUJESVJTIiA9ICJ4IiBdOyB0aGVuCisgIGlmIFsgIngkU05NUF9QUkVGRVJfTkVBUl9NSUJTIiA9ICJ4MSIgXTsgdGhlbgorICAgIE1JQkRJUlM9JHtzcmNkaXJ9L21pYnMKKyAgICBleHBvcnQgTUlCRElSUworICBmaQorZmkKKworIyBTZXQgdXAgdGhlIHBhdGggdG8gdGhlIHByb2dyYW1zIHdlIHdhbnQgdG8gdXNlLgoraWYgWyAieCRTTk1QX1BBVEgiID0gIngiIF07IHRoZW4KKyAgICBQQVRIPSR7YnVpbGRkaXJ9L2FnZW50OiR7YnVpbGRkaXJ9L2FwcHM6JFBBVEgKKyAgICBleHBvcnQgUEFUSAorICAgIFNOTVBfUEFUSD15ZXMKKyAgICBleHBvcnQgU05NUF9QQVRICitmaQorCisjIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBmdWxmaWxsIGFsbCBsaWJyYXJ5IGRlcGVuZGVuY2llcworX2xkX2xpYl9wYXRoPSIke1NOTVBfVVBESVJ9L3NubXBsaWIvLmxpYnM6JHtTTk1QX1VQRElSfS9hZ2VudC8ubGliczoke1NOTVBfVVBESVJ9L2FnZW50L2hlbHBlcnMvLmxpYnMiCitjYXNlIGB1bmFtZWAgaW4KKyAgQ1lHV0lOKikKKyAgICBQQVRIPSIke19sZF9saWJfcGF0aH06JFBBVEgiCisgICAgZXhwb3J0IFBBVEgKKyAgICA7OworICBEYXJ3aW4qKQorICAgIGlmIFsgIngkRFlMRF9MSUJSQVJZX1BBVEgiICE9ICJ4IiBdOyB0aGVuCisgICAgICBEWUxEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7RFlMRF9MSUJSQVJZX1BBVEh9IgorICAgIGVsc2UKKyAgICAgIERZTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH0iCisgICAgZmkKKyAgICBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEgKKyAgICA7OworICBIUC1VWCopCisgICAgaWYgWyAieCRTSExJQl9QQVRIIiAhPSAieCIgXTsgdGhlbgorICAgICAgU0hMSUJfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7U0hMSUJfUEFUSH0iCisgICAgZWxzZQorICAgICAgU0hMSUJfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgorICAgIGZpCisgICAgZXhwb3J0IFNITElCX1BBVEgKKyAgICA7OworICAqKQorICAgIGlmIFsgIngkTERfTElCUkFSWV9QQVRIIiAhPSAieCIgXTsgdGhlbgorICAgICAgTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH06JHtMRF9MSUJSQVJZX1BBVEh9IgorICAgIGVsc2UKKyAgICAgIExEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgorICAgIGZpCisgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgIDs7Citlc2FjCisKKyMgU2V0IHVwIHRlbXBvcmFyeSBkaXJlY3RvcnkKK2lmIFsgIngkU05NUF9IRUFERVJPTkxZIiAhPSAieHllcyIgXTsgdGhlbgorICBpZiBbICJ4JFNOTVBfVE1QRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgaWYgWyAieCR0ZXN0bnVtIiA9ICJ4IiBdIDsgdGhlbgorICAgICAgICB0ZXN0bnVtPTAKKyAgICBmaQorICAgIFNOTVBfVE1QRElSPSIvdG1wL3NubXAtdGVzdC0kdGVzdG51bS0kJCIKKyAgICB0cmFuc2xhdGVfcGF0aCBTTk1QX1RNUERJUgorICAgIGV4cG9ydCBTTk1QX1RNUERJUgorICAgIGlmIFsgLWQgJFNOTVBfVE1QRElSIF07IHRoZW4KKwllY2hvICIkMDogRVJST1I6ICRTTk1QX1RNUERJUiBhbHJlYWR5IGV4aXN0ZWQuIgorCWV4aXQgMTsKKyAgICBmaQorICBmaQorICBpZiBbICEgLWQgJFNOTVBfVE1QRElSIF07IHRoZW4KKyAgICBta2RpciAtcCAkU05NUF9UTVBESVIKKyAgICBjaG1vZCAwNzAwICRTTk1QX1RNUERJUgorICBmaQorICBpZiBbICJ4JFNOTVBfVE1QX1BFUlNJU1RFTlRESVIiID0gIngiIF07IHRoZW4KKyAgICBTTk1QX1RNUF9QRVJTSVNURU5URElSPSRTTk1QX1RNUERJUi9wZXJzaXN0CisgICAgZXhwb3J0IFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKKyAgZmkKKyAgaWYgWyAhIC1kICRTTk1QX1RNUF9QRVJTSVNURU5URElSIF07IHRoZW4KKyAgICBta2RpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgorICAgIGNobW9kIDA3MDAgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKKyAgZmkKK2ZpCisKK2lmIFsgIngkU05NUF9TQVZFX1RNUERJUiIgPSAieCIgXTsgdGhlbgorICAgIFNOTVBfU0FWRV9UTVBESVI9Im5vIgorICAgIGV4cG9ydCBTTk1QX1NBVkVfVE1QRElSCitmaQorCitTTk1QX0lHTk9SRV9XSU5ET1dTX1JFR0lTVFJZPSJ0cnVlIgorZXhwb3J0IFNOTVBfSUdOT1JFX1dJTkRPV1NfUkVHSVNUUlkKK1NOTVBfUEVSTFBST0c9ImAke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWcgLS1wZXJscHJvZ2AiCitTTk1QX1RFU1RESVI9IiRTTk1QX0JBU0VESVIvdGVzdHMiCitTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvc25tcGQuY29uZiIKK1NOTVBUUkFQRF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3NubXB0cmFwZC5jb25mIgorU05NUEFQUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3NubXAuY29uZiIKK0FHRU5UWF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2FnZW50eC5jb25mIgorU05NUF9TTk1QVFJBUERfTE9HX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wdHJhcGQubG9nIgorU05NUF9TTk1QVFJBUERfUElEX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wdHJhcGQucGlkIgorU05NUF9TTk1QRF9QSURfRklMRT0iJFNOTVBfVE1QRElSL3NubXBkLnBpZCIKK1NOTVBfU05NUERfTE9HX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wZC5sb2ciCitTTk1QX0FHRU5UWF9QSURfRklMRT0iJFNOTVBfVE1QRElSL2FnZW50eC5waWQiCitTTk1QX0FHRU5UWF9MT0dfRklMRT0iJFNOTVBfVE1QRElSL2FnZW50eC5sb2ciCitTTk1QQ09ORlBBVEg9IiR7U05NUF9UTVBESVJ9JHtTTk1QX0VOVl9TRVBBUkFUT1J9JHtTTk1QX1RNUF9QRVJTSVNURU5URElSfSIKK3RyYW5zbGF0ZV9wYXRoIFNOTVBDT05GUEFUSAorZXhwb3J0IFNOTVBDT05GUEFUSAorU05NUF9QRVJTSVNURU5UX0RJUj0kU05NUF9UTVBfUEVSU0lTVEVOVERJUgordHJhbnNsYXRlX3BhdGggU05NUF9QRVJTSVNURU5UX0RJUgorZXhwb3J0IFNOTVBfUEVSU0lTVEVOVF9ESVIKKyNTTk1QX1BFUlNJU1RFTlRfRklMRT0iJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIvcGVyc2lzdGVudC1zdG9yZS5jb25mIgorI2V4cG9ydCBTTk1QX1BFUlNJU1RFTlRfRklMRQorCisjIyBTZXR1cCBkZWZhdWx0IGZsYWdzIGFuZCBwb3J0cyBpZmYgbm90IGRvbmUKK2lmIFsgIngkU05NUF9GTEFHUyIgPSAieCIgXTsgdGhlbgorICAgIFNOTVBfRkxBR1M9Ii1kIgorZmkKK2lmIHRlc3QgLXggL2Jpbi9uZXRzdGF0IDsgdGhlbgorICAgIE5FVFNUQVQ9L2Jpbi9uZXRzdGF0CitlbGlmIHRlc3QgLXggL3Vzci9iaW4vbmV0c3RhdCA7IHRoZW4KKyAgICBORVRTVEFUPS91c3IvYmluL25ldHN0YXQKK2VsaWYgdGVzdCAteCAvdXNyL3NiaW4vbmV0c3RhdCA7IHRoZW4KKyAgICAjIGUuZy4gVHJ1NjQgVW5peAorICAgIE5FVFNUQVQ9L3Vzci9zYmluL25ldHN0YXQKK2VsaWYgdGVzdCAteCAvdXNyL2V0Yy9uZXRzdGF0IDsgdGhlbgorICAgICMgZS5nLiBJUklYCisgICAgTkVUU1RBVD0vdXNyL2V0Yy9uZXRzdGF0CitlbGlmIHRlc3QgLXggL2N5Z2RyaXZlL2Mvd2luZG93cy9zeXN0ZW0zMi9uZXRzdGF0IDsgdGhlbgorICAgICMgQ3lnd2luCisgICAgTkVUU1RBVD0vY3lnZHJpdmUvYy93aW5kb3dzL3N5c3RlbTMyL25ldHN0YXQKK2VsaWYgdGVzdCAteCAvYy9XaW5kb3dzL1N5c3RlbTMyL25ldHN0YXQgOyB0aGVuCisgICAgIyBNaW5HVyArIE1TWVMKKyAgICBORVRTVEFUPS9jL1dpbmRvd3MvU3lzdGVtMzIvbmV0c3RhdAorZWxzZQorICAgIE5FVFNUQVQ9IiIKK2ZpCisKK2lmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgorICAgICMgT2J0YWluIHRoZSBNU1lTIGluc3RhbGxhdGlvbiBwYXRoIGZyb20gdGhlICFDOiBlbnZpcm9ubWVudCB2YXJpYWJsZSwKKyAgICAjIHJlbW92ZSBzdXJyb3VuZGluZyBzaW5nbGUgcXVvdGVzIGFuZCBjb252ZXJ0IGJhY2tzbGFzaGVzIGludG8gZm9yd2FyZAorICAgICMgc2xhc2hlcy4KKyAgICBNU1lTX1BBVEg9IiQoc2V0IFwKKyAgICAgICAgICAgICAgICAgfCBzZWQgLW4gJ3N8XlwhQzo9JyInIidcKC4qXCknIiciJyR8XDF8cCcgfCBzZWQgJ3N8XFx8L3xnJykiCisgICAgTVNZU19TSD0iJE1TWVNfUEFUSC9zaC5leGUiCitmaQorCitQUk9CRV9GT1JfUE9SVCgpIHsKKyAgICBCQVNFX1BPUlQ9JDEKKyAgICBNQVhfUkVUUklFUz0xMAorICAgIGlmIHRlc3QgLXggIiRORVRTVEFUIiA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJFJBTkRPTSI7IHRoZW4KKyAgICAgICAgICAgIFJBTkRPTT0yCisgICAgICAgIGZpCisgICAgICAgIHdoaWxlIDoKKyAgICAgICAgZG8KKyAgICAgICAgICAgIEJBU0VfUE9SVD1gZXhwciAkQkFTRV9QT1JUICsgXCggJFJBTkRPTSAlIDEwMCBcKWAKKyAgICAgICAgICAgIElOX1VTRT1gJE5FVFNUQVQgLWEgLW4gMj4vZGV2L251bGwgfCBncmVwICJbXC46XSRCQVNFX1BPUlQgImAKKyAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIiRCQVNFX1BPUlQiCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBNQVhfUkVUUklFUz1gZXhwciAkTUFYX1JFVFJJRVMgLSAxYAorICAgICAgICAgICAgaWYgWyAkTUFYX1JFVFJJRVMgLWVxIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCBhdmFpbGFibGUgcG9ydC4iID4mMgorICAgICAgICAgICAgICAgIGVjaG8gIk5PUE9SVCIKKyAgICAgICAgICAgICAgICBleGl0IDI1NQorICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGVsc2UKKwllY2hvICJFUlJPUjogQ2Fubm90IHByb2JlIGZvciBwb3J0IC0gbmV0c3RhdCBub3QgZm91bmQuIiA+JjIKKwllY2hvICJOT1BPUlQiCisJZXhpdCAyNTUKKyAgICBmaQorfQorCitpZiBbICJ4JFNOTVBfU05NUERfUE9SVCIgPSAieCIgXTsgdGhlbgorICAgIFNOTVBfU05NUERfUE9SVD1gUFJPQkVfRk9SX1BPUlQgODc2NWAKK2ZpCitpZiBbICJ4JFNOTVBfU05NUFRSQVBEX1BPUlQiID0gIngiIF07IHRoZW4KKyAgICBTTk1QX1NOTVBUUkFQRF9QT1JUPWBQUk9CRV9GT1JfUE9SVCA1Njc4YAorZmkKK2lmIFsgIngkU05NUF9BR0VOVFhfUE9SVCIgPSAieCIgXTsgdGhlbgorICAgIFNOTVBfQUdFTlRYX1BPUlQ9YFBST0JFX0ZPUl9QT1JUIDc2NzZgCitmaQoraWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4IiBdO3RoZW4KKwlTTk1QX1RSQU5TUE9SVF9TUEVDPSJ1ZHAiCitmaQoraWYgWyAieCRTTk1QX1RFU1RfREVTVCIgPSAieCIgLWEgJFNOTVBfVFJBTlNQT1JUX1NQRUMgIT0gInVuaXgiIF07dGhlbgorCVNOTVBfVEVTVF9ERVNUPSIxMjcuMC4wLjE6IgorZmkKK2V4cG9ydCBTTk1QX0ZMQUdTIFNOTVBfU05NUERfUE9SVCBTTk1QX1NOTVBUUkFQRF9QT1JUCisKKyMgTWFrZSBzdXJlIHRoZSBhZ2VudCBkb2Vzbid0IHBhcnNlIGFueSBjb25maWcgZmlsZSBidXQgd2hhdCB3ZSBnaXZlIGl0LiAgCisjIHRoaXMgaXMgbWFpbmx5IHRvIHByb3RlY3QgYWdhaW5zdCBhIGJyb2tlbiBhZ2VudCB0aGF0IGRvZXNuJ3QKKyMgcHJvcGVybHkgaGFuZGxlIGNvbWJpbmF0aW9ucyBvZiAtYyBhbmQgLUMuICAoc2luY2UgSSd2ZSBicm9rZSBpdCBiZWZvcmUpLgorI1NOTVBDT05GUEFUSD0iJFNOTVBfVE1QRElSL2RvZXMtbm90LWV4aXN0IgorI2V4cG9ydCBTTk1QQ09ORlBBVEgKKworZmkgIyBPbmx5IGFsbG93IG91cnNlbHZlcyB0byBiZSBldmFsJ2VkIG9uY2UKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2ggYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOGVkYzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCkBAIC0wLDAgKzEsNzA4IEBACisjCisjIGV2YWxfdG9vbHMuc2gKKyMKKyMgT3V0cHV0IGZ1bmN0aW9ucyBmb3Igc2NyaXB0IHRlc3RzLiAgU291cmNlIHRoaXMgZnJvbSBvdGhlciB0ZXN0IHNjcmlwdHMKKyMgdG8gZXN0YWJsaXNoIGEgc3RhbmRhcmRpemVkIHJlcGVydG9yeSBvZiB0ZXN0IGZ1bmN0aW9ucy4KKyMKKyMKKyMgRXhjZXB0IHdoZXJlIG5vdGVkLCBhbGwgZnVuY3Rpb25zIHJldHVybjoKKyMJMAlPbiBzdWNjZXNzLAkoQm91cm5lIFNoZWxsJ3MgYGB0cnVlJycpCisjCW5vbi0wCU90aGVyd2lzZS4KKyMKKyMgSW5wdXQgYXJndW1lbnRzIHRvIGVhY2ggZnVuY3Rpb24gYXJlIGRvY3VtZW50ZWQgd2l0aCBlYWNoIGZ1bmN0aW9uLgorIworIworIyBYWFggIFN1Z2dlc3Rpb25zOgorIwlERUJVRyBPTnxPRkYKKyMJZHVtcCBDQVBUVVJFIG91dHB1dCB0byBzdGRvdXQgYXMgd2VsbCBhcyB0byBqdW5rb3V0cHV0ZmlsZS4KKyMKKworIworIyBPbmx5IGFsbG93IG91cnNlbHZlcyB0byBiZSBldmFsJ2VkIG9uY2UKKyMKK2lmIFsgIngkRVZBTF9UT09MU19TSF9FVkFMRUQiICE9ICJ4eWVzIiBdOyB0aGVuCisgICAgRVZBTF9UT09MU19TSF9FVkFMRUQ9eWVzCisKKyMKKyMgVmFyaWFibGVzIHVzZWQgaW4gZ2xvYmFsIGVudmlyb25tZW50IG9mIGNhbGxpbmcgc2NyaXB0LgorIworZmFpbGNvdW50PTAKK3Rlc3RudW09MAorZXJybnVtPTAKK2p1bmtvdXRwdXRmaWxlYmFzZT0iJFNOTVBfVE1QRElSL291dHB1dC1gYmFzZW5hbWUgJDBgJCQiCitqdW5rb3V0cHV0ZmlsZT0kanVua291dHB1dGZpbGViYXNlCitvdXRwdXRjb3VudD0wCitzZXBhcmF0b3I9Ii09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0iCitpZiBbIC16ICIkT0tfVE9fU0FWRV9SRVNVTFQiIF0gOyB0aGVuCitPS19UT19TQVZFX1JFU1VMVD0xCitleHBvcnQgT0tfVE9fU0FWRV9SRVNVTFQKK2ZpCisKK2lmIFsgYHVuYW1lIC1zYCA9IFN1bk9TIF0KK3RoZW4gUEFUSD0vdXNyL3hwZzQvYmluOiRQQVRICitmaQorCisjCisjIEhFQURFUjogcmV0dXJucyBhIHNpbmdsZSBsaW5lIHdoZW4gU05NUF9IRUFERVJPTkxZIG1vZGUgYW5kIGV4aXRzLgorIworSEVBREVSKCkgeworICAgIGlmIFsgIngkU05NUF9IRUFERVJPTkxZIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBlY2hvIHRlc3QgJCoKKwlleGl0IDA7CisgICAgZWxzZQorCXsgZWNobyAiIyB0ZXN0aW5nICQqIjsgZWNobyAiIjsgfSA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorICAgIGZpCit9CisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK09VVFBVVCgpIHsJIyA8YW55X2FyZ3VtZW50cz4KKwljYXQgPDxHUk9OSworCisKKyQqCisKKworR1JPTksKK30KKworQ0FOX1VTTEVFUCgpIHsKKyAgIGlmIFsgIiRTTk1QX0NBTl9VU0xFRVAiID0gMCAtbyAiJFNOTVBfQ0FOX1VTTEVFUCIgPSAxIF0gOyB0aGVuCisgICAgIHJldHVybiAwCisgICBmaQorICAgc2xlZXAgLjEgPiAvZGV2L251bGwgMj4mMQorICAgaWYgWyAkPyA9IDAgXSA7IHRoZW4KKyAgICAgU05NUF9DQU5fVVNMRUVQPTEKKyAgIGVsc2UKKyAgICAgU05NUF9DQU5fVVNMRUVQPTAKKyAgIGZpCisgICBleHBvcnQgU05NUF9DQU5fVVNMRUVQCit9CisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1NVQ0NFU1MoKSB7CSMgPGFueV9hcmd1bWVudHM+CisJWyAiJGZhaWxjb3VudCIgLW5lIDAgXSAmJiByZXR1cm4KKwljYXQgPDxHUk9JTksKKworU1VDQ0VTUzogJCoKKworR1JPSU5LCit9CisKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworRkFJTEVEKCkgewkjIDxyZXR1cm5fdmFsdWU+LCA8YW55X2FyZ3VtZW50cz4KKwlbICIkMSIgLWVxIDAgXSAmJiByZXR1cm4KKwlzaGlmdAorCisJZmFpbGNvdW50PWBleHByICRmYWlsY291bnQgKyAxYAorCWNhdCA8PEdST05JSworCitGQUlMRUQ6ICQqCisKK0dST05JSworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworU0tJUCgpIHsKKwlSRU1PVkVURVNUREFUQQorCWVjaG8gIjEuLjAgIyBTS0lQICQqIgorCWV4aXQgMAorfQorCitJU0RFRklORUQoKSB7CisJZ3JlcCAiXiNkZWZpbmUgJDEgIiAke2J1aWxkZGlyfS9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICR7YnVpbGRkaXJ9L2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCAke2J1aWxkZGlyfS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbAorfQorCitTS0lQSUZOT1QoKSB7CisJSVNERUZJTkVEICIkMSIgfHwgU0tJUCAiJDEgaXMgbm90IGRlZmluZWQiCit9CisKK1NLSVBJRigpIHsKKwlJU0RFRklORUQgIiQxIiAmJiBTS0lQICIkMSBpcyBkZWZpbmVkIgorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworVkVSSUZZKCkgewkjIDxwYXRoX3RvX2ZpbGUocyk+CisJbWlzc2luZ2ZpbGVzPSIiCisKKwlmb3IgZiBpbiAkKjsgZG8KKwkJWyAtZiAiJGYiIF0gJiYgY29udGludWUKKwkJZWNobyAiRkFJTEVEOiBDYW5ub3QgZmluZCBmaWxlIFwiJGZcIi4iCisJCW1pc3NpbmdmaWxlcz10cnVlCisJZG9uZQorCisJWyAiJG1pc3NpbmdmaWxlcyIgPSB0cnVlIF0gJiYgZXhpdCAxMDAwCit9CisKK05FV09VVFBVVEZJTEUoKSB7CisgICAgICAgIG91dHB1dGNvdW50PWBleHByICRvdXRwdXRjb3VudCArIDFgCisgICAgICAgIGp1bmtvdXRwdXRmaWxlPSIke2p1bmtvdXRwdXRmaWxlYmFzZX0tJG91dHB1dGNvdW50IgorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworU1RBUlRURVNUKCkgeworICAgICAgICBORVdPVVRQVVRGSUxFCisJWyAhIC1mICIkanVua291dHB1dGZpbGUiIF0gJiYgeworCQl0b3VjaCAkanVua291dHB1dGZpbGUKKwkJcmV0dXJuCisJfQorCWVjaG8gIkZBSUxFRDogT3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHM6IFwiJGp1bmtvdXRwdXRmaWxlXCIuIgorCWV4aXQgMTAwMAorfQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitTVE9QVEVTVCgpIHsKKwlybSAtZiAiJGp1bmtvdXRwdXRmaWxlIgorfQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitSRU1PVkVURVNUREFUQSgpIHsKKyMJRUNITyAicmVtb3ZpbmcgJFNOTVBfVE1QRElSICAiCisJcm0gLXJmICRTTk1QX1RNUERJUgorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworT1VUUFVURU5WVkFSUygpIHsKKyAgICBlY2hvICJTTk1QQ09ORlBBVEg9JFNOTVBDT05GUEFUSCIgPj4gJDEKKyAgICBlY2hvICJTTk1QX1BFUlNJU1RFTlRfRElSPSRTTk1QX1BFUlNJU1RFTlRfRElSIiA+PiAkMQorICAgIGVjaG8gIk1JQkRJUlM9JE1JQkRJUlMiID4+ICQxCisgICAgZWNobyAiUEFUSD0kUEFUSCIgPj4gJDEKKyAgICBlY2hvICJleHBvcnQgU05NUENPTkZQQVRIIiA+PiAkMQorICAgIGVjaG8gImV4cG9ydCBTTk1QX1BFUlNJU1RFTlRfRElSIiA+PiAkMQorICAgIGVjaG8gImV4cG9ydCBNSUJESVJTIiA+PiAkMQorICAgIGVjaG8gImV4cG9ydCBQQVRIIiA+PiAkMQorfQorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMgQ2FwdHVyZXMgb3V0cHV0IGZyb20gY29tbWFuZCwgYW5kIHJldHVybnMgdGhlIGNvbW1hbmQncyBleGl0IGNvZGUuCitsb2dnZWR2YXJzPTAKK0NBUFRVUkUoKSB7CSMgPGNvbW1hbmRfd2l0aF9hcmd1bWVudHNfdG9fZXhlY3V0ZT4KKyAgICBORVdPVVRQVVRGSUxFCisKKyAgICAjIHRyYWNrIGludm9rZWQgY29tbWFuZCBwZXIgdGVzdCB3aGVuIHZlcmJvc2UKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXTsgdGhlbgorICAgICAgICBPVVRQVVRFTlZWQVJTICRqdW5rb3V0cHV0ZmlsZS5pbnZva2VkCisgICAgICAgIGVjaG8gJCogPj4gJGp1bmtvdXRwdXRmaWxlLmludm9rZWQKKyAgICBmaQorCisgICAgaWYgWyAkbG9nZ2VkdmFycyA9IDAgXTsgdGhlbgorICAgICAgICBPVVRQVVRFTlZWQVJTICRTTk1QX1RNUERJUi9pbnZva2VkCisgICAgICAgIGxvZ2dlZHZhcnM9MQorICAgIGZpCisgICAgZWNobyAkKiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorCisJaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KKwkJY2F0IDw8S05PUkcKKworRVhFQ1VUSU5HOiAkKgorCitLTk9SRworCisJZmkKKwllY2hvICJSVU5OSU5HOiAkKiIgPiAkanVua291dHB1dGZpbGUKKwkoICQqIDI+JjEgKSA+PiAkanVua291dHB1dGZpbGUgMj4mMQorCVJDPSQ/CisKKwlpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDEgXTsgdGhlbgorCQllY2hvICJDb21tYW5kIE91dHB1dDogIgorCQllY2hvICJNSUJESVIgJE1JQkRJUlMgJE1JQlMiCisJCWVjaG8gIiRzZXBhcmF0b3IiCisJCWNhdCAkanVua291dHB1dGZpbGUgfCBzZWQgJ3MvXi8gIC8nCisJCWVjaG8gIiRzZXBhcmF0b3IiCisJZmkKKwlyZXR1cm4gJFJDCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjIERlbGF5IHRvIGxldCBwcm9jZXNzZXMgc2V0dGxlCitERUxBWSgpIHsKKyAgICBpZiBbICIkU05NUF9TTEVFUCIgIT0gIjAiIF0gOyB0aGVuCisJc2xlZXAgJFNOTVBfU0xFRVAKKyAgICBmaQorfQorCitTQVZFX1JFU1VMVFMoKSB7CisgICByZWFsX3JldHVybl92YWx1ZT0kcmV0dXJuX3ZhbHVlCit9CisKKyMKKyMgQ2hlY2tzIHRoZSBvdXRwdXQgcmVzdWx0IGFnYWluc3Qgd2hhdCB3ZSBleHBlY3QuCisjICAgU2V0cyByZXR1cm5fdmFsdWUgdG8gMCBvciAxLgorIworRVhQRUNUUkVTVUxUKCkgeworICBpZiBbICRPS19UT19TQVZFX1JFU1VMVCAtbmUgMCBdIDsgdGhlbgorICAgIGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gIiQxIiBdOyB0aGVuCisJcmV0dXJuX3ZhbHVlPTAKKyAgICBlbHNlCisJcmV0dXJuX3ZhbHVlPTEKKyAgICBmaQorICBmaQorfQorCitDSEVDS0NPVU5UKCkgeworICAgQ0hFQ0tGSUxFQ09VTlQgIiRqdW5rb3V0cHV0ZmlsZSIgJEAKK30KKworQ0hFQ0tWQUxVRUlTKCkgeworICAgIHZhbHVlMT0kMQorICAgIHZhbHVlMj0kMgorICAgIGlmIFsgIngkdmFsdWUxIiA9ICJ4JHZhbHVlMiIgXTsgdGhlbgorICAgICAgR09PRCAiJDMiCisgICAgZWxzZQorICAgICAgQkFEICIkMyIKKyAgICBmaQorfQorCitDSEVDS1ZBTFVFSVNOVCgpIHsKKyAgICB2YWx1ZTE9JDEKKyAgICB2YWx1ZTI9JDIKKyAgICBpZiBbICJ4JHZhbHVlMSIgPSAieCR2YWx1ZTIiIF07IHRoZW4KKyAgICAgIEJBRCAiJDMiCisgICAgZWxzZQorICAgICAgR09PRCAiJDMiCisgICAgZmkKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMgUmV0dXJuczogQ291bnQgb2YgbWF0Y2hlZCBsaW5lcy4KKyMKK0NIRUNLRklMRUNPVU5UKCkgewkjIDxwYXR0ZXJuX3RvX21hdGNoPgorICAgIGNoa2ZpbGU9JDEKKyAgICBja2Zjb3VudD0kMgorICAgIHNoaWZ0CisgICAgc2hpZnQKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXTsgdGhlbgorCWVjaG8gLW4gImNoZWNraW5nICRjaGtmaWxlIGZvciAkY2tmY291bnQgXCIkKlwiLi4uIgorICAgIGZpCisKKyAgICBpZiBbIC1mICRjaGtmaWxlIF07IHRoZW4KKwlydmFsPWBncmVwIC1jICIkKiIgIiRjaGtmaWxlIiAyPi9kZXYvbnVsbGAKKyAgICBlbHNlCisgICAgICAgIENPTU1FTlQgIk5vdGU6IGZpbGUgJGNoa2ZpbGUgZG9lcyBub3QgZXhpc3QgYW5kIHdlIHdlcmUgYXNrZWQgdG8gY2hlY2sgaXQiCisJcnZhbD0wCisgICAgZmkKKworICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCisJZWNobyAiJHJ2YWwgbWF0Y2hlcyBmb3VuZCIKKyAgICBmaQorCisgICAgc25tcF9sYXN0X3Rlc3RfcmVzdWx0PSRydmFsCisgICAgRVhQRUNUUkVTVUxUICRja2Zjb3VudCAgIyBkZWZhdWx0CisgICAgaWYgWyAiJGNrZmNvdW50IiAhPSAibm9lcnJvciIgXTsgdGhlbgorICAgICAgaWYgWyAiJGNrZmNvdW50IiA9ICJhdGxlYXN0b25lIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRydmFsIiAtbmUgIjAiIF07IHRoZW4KKyAgICAgICAgICAgIEdPT0QgImZvdW5kICRja2Zjb3VudCBjb3BpZXMgb2YgJyQqJyBpbiBvdXRwdXQgKCRjaGtmaWxlKTsgbmVlZGVkIG9uZSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQkFEICJmb3VuZCAkcnZhbCBjb3BpZXMgb2YgJyQqJyBpbiBvdXRwdXQgKCRjaGtmaWxlKTsgZXhwZWN0ZWQgMSIKKyAgICAgICAgICAgIENPTU1FTlQgIk91dHB1dGZpbGU6ICRjaGtmaWxlIgorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBpZiBbICIkcnZhbCIgPSAiJGNrZmNvdW50IiBdOyB0aGVuCisgICAgICAgICAgIEdPT0QgImZvdW5kICRja2Zjb3VudCBjb3BpZXMgb2YgJyQqJyBpbiBvdXRwdXQgKCRjaGtmaWxlKSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICBCQUQgImZvdW5kICRydmFsIGNvcGllcyBvZiAnJConIGluIG91dHB1dCAoJGNoa2ZpbGUpOyBleHBlY3RlZCAkY2tmY291bnQiCisgICAgICAgICAgIENPTU1FTlQgIk91dHB1dGZpbGU6ICRjaGtmaWxlIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIHJldHVybiAkcnZhbAorfQorCitDSEVDSygpIHsKKyAgICBDSEVDS0NPVU5UIDEgJEAKK30KKworQ0hFQ0tGSUxFKCkgeworICAgIGZpbGU9JDEKKyAgICBzaGlmdAorICAgIENIRUNLRklMRUNPVU5UICRmaWxlIDEgJEAKK30KKworQ0hFQ0tUUkFQRCgpIHsKKyAgICBDSEVDS0ZJTEUgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFICRACit9CisKK0NIRUNLVFJBUERDT1VOVCgpIHsKKyAgICBjb3VudD0kMQorICAgIHNoaWZ0CisgICAgQ0hFQ0tGSUxFQ09VTlQgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFICRjb3VudCAkQAorfQorCitDSEVDS1RSQVBET1JESUUoKSB7CisgICAgQ0hFQ0tPUkRJRSAkQCAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUKK30KKworQ0hFQ0tBR0VOVCgpIHsKKyAgICBDSEVDS0ZJTEUgJFNOTVBfU05NUERfTE9HX0ZJTEUgJEAKK30KKworQ0hFQ0tBR0VOVENPVU5UKCkgeworICAgIGNvdW50PSQxCisgICAgc2hpZnQKKyAgICBDSEVDS0ZJTEVDT1VOVCAkU05NUF9TTk1QRF9MT0dfRklMRSAkY291bnQgJEAKK30KKworIyBSZXR1cm4gMCAodHJ1ZSkgaWYgYSBwcm9jZXNzIHdpdGggcGlkICQxIGV4aXN0cyBhbmQgMSAoZmFsc2UpIGlmIG5vIHByb2Nlc3MKKyMgd2l0aCBwaWQgJDEgZXhpc3RzLgorSVNSVU5OSU5HKCkgeworICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgorCXBzbGlzdC5leGUgIiQxIiAyPiYxIHwgd2hpbGUgcmVhZCBuYW1lIHBzcGlkIHJlc3Q7IGRvCisJICAgIGlmIFsgIiQxIiA9ICIkcHNwaWQiIF07IHRoZW4KKwkJcmV0dXJuIDAKKwkgICAgZmkKKwlkb25lCisJcmV0dXJuIDEKKyAgICBlbHNlCisgICAgICAgIGtpbGwgLTAgIiQxIiAyPi9kZXYvbnVsbAorICAgIGZpCit9CisKKyMgRWNobyBhIGNvbW1hbmQgdGhhdCBhc2tzIHRoZSBwcm9jZXNzIHdpdGggcGlkICQxIHRvIHN0b3AuCitFQ0hPU0VORFNJR1RFUk0oKSB7CisgICAgaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCisgICAgICAgIGVjaG8gcHNraWxsLmV4ZSAkMQorICAgIGVsc2UKKyAgICAgICAgZWNobyBraWxsIC1URVJNICQxCisgICAgZmkKK30KKworIyBFY2hvIGEgY29tbWFuZCB0aGF0IHN0b3BzIHRoZSBwcm9jZXNzIHdpdGggcGlkICQxIGZvcmNpYmx5LgorRUNIT1NFTkRTSUdLSUxMKCkgeworICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgorICAgICAgICBlY2hvIHBza2lsbC5leGUgJDEKKyAgICBlbHNlCisgICAgICAgIGVjaG8ga2lsbCAtS0lMTCAkMQorICAgIGZpCit9CisKKyMgV2FpdCB1bnRpbCB0aGUgc2hlbGwgc3RhdGVtZW50ICIkQCIgZXZhbHVhdGVzIHRvIGZhbHNlLgorV0FJVEZPUk5PVENPTkQoKSB7CisgICAgQ0FOX1VTTEVFUAorICAgIGlmIFsgJFNOTVBfQ0FOX1VTTEVFUCA9IDEgXSA7IHRoZW4KKyAgICAgICAgc2xlZXB0aW1lPWBleHByICRTTk1QX1NMRUVQICcqJyA1MGAKKyAgICBlbHNlIAorICAgICAgICBzbGVlcHRpbWU9YGV4cHIgJFNOTVBfU0xFRVAgJyonIDVgCisgICAgZmkKKyAgICB3aGlsZSBbICRzbGVlcHRpbWUgLWd0IDAgXSAmJiBldmFsICIkQCI7IGRvCisgICAgICAgIGlmIFsgJFNOTVBfQ0FOX1VTTEVFUCA9IDEgXTsgdGhlbgorICAgICAgICAgICAgc2xlZXAgLjEKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICBmaQorICAgICAgICBzbGVlcHRpbWU9YGV4cHIgJHNsZWVwdGltZSAtIDFgCisgICAgZG9uZQorfQorCisjIFdhaXQgdW50aWwgdGhlIHNoZWxsIHN0YXRlbWVudCAiJEAiIGV2YWx1YXRlcyB0byB0cnVlLgorV0FJVEZPUkNPTkQoKSB7CisgICAgV0FJVEZPUk5PVENPTkQgaWYgIiRAOyIgdGhlbiBmYWxzZSAiOyIgZWxzZSB0cnVlICI7IiBmaQorfQorCitXQUlURk9SQUdFTlQoKSB7CisgICAgV0FJVEZPUiAiJEAiICRTTk1QX1NOTVBEX0xPR19GSUxFCisgICAgaWYgWyAkU05NUF9DQU5fVVNMRUVQID0gMSBdOyB0aGVuCisgICAgICAgIHNsZWVwIC4xCisgICAgZWxzZQorICAgICAgICBzbGVlcCAxCisgICAgZmkKK30KKworV0FJVEZPUlRSQVBEKCkgeworICAgIFdBSVRGT1IgIiRAIiAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUKKyAgICBpZiBbICRTTk1QX0NBTl9VU0xFRVAgPSAxIF07IHRoZW4KKyAgICAgICAgc2xlZXAgLjEKKyAgICBlbHNlCisgICAgICAgIHNsZWVwIDEKKyAgICBmaQorfQorCisjIFdhaXQgdW50aWwgcGF0dGVybiAiJDEiIGFwcGVhcnMgaW4gZmlsZSAiJDIiLgorV0FJVEZPUigpIHsKKyAgICBXQUlURk9SQ09ORCBncmVwICIkMSIgIiQyIiAiPi9kZXYvbnVsbCIgIjI+JjEiCit9CisKK0dPT0QoKSB7CisgICAgdGVzdG51bT1gZXhwciAkdGVzdG51bSArIDFgCisgICAgZWNobyAib2sgJHRlc3RudW0gLSAkMSIKKyAgICBlY2hvICIjIG9rICR0ZXN0bnVtIC0gJDEiID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCit9CisKK0JBRCgpIHsKKyAgICB0ZXN0bnVtPWBleHByICR0ZXN0bnVtICsgMWAKKyAgICBlcnJudW09YGV4cHIgJGVycm51bSArIDFgCisgICAgZWNobyAibm90IG9rICR0ZXN0bnVtIC0gJDEiCisgICAgZWNobyAiIyBub3Qgb2sgJHRlc3RudW0gLSAkMSIgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKK30KKworQ09NTUVOVCgpIHsKKyAgICBlY2hvICIjICRAIgorICAgIGVjaG8gIiMgJEAiID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCit9CisKKyMgQ0hFQ0tPUkRJRSAiZ3JlcCBzdHJpbmciIFsiZmlsZSJdIC4uIEZBSUwgaWYgImdyZXAgc3RyaW5nIiBpcyAqbm90KiBmb3VuZAorQ0hFQ0tPUkRJRSgpIHsKKyAgICBpZiBbICJ4JDIiID0gIngiIF07IHRoZW4KKyAgICAgIENIRUNLRklMRSAiJGp1bmtvdXRwdXRmaWxlIiAiJDEiCisgICAgZWxzZQorICAgICAgQ0hFQ0tGSUxFQ09VTlQgIiQyIiAxICIkMSIKKyAgICBmaQorfQorCisjIENIRUNLQU5ERElFICJncmVwIHN0cmluZyIgWyJmaWxlIl0gLi4gRkFJTCBpZiAiZ3JlcCBzdHJpbmciICppcyogZm91bmQKK0NIRUNLQU5ERElFKCkgeworICAgIGlmIFsgIngkMiIgPSAieCIgXTsgdGhlbgorICAgICAgQ0hFQ0tGSUxFQ09VTlQgIiRqdW5rb3V0cHV0ZmlsZSIgMCAiJDEiCisgICAgZWxzZQorICAgICAgQ0hFQ0tGSUxFQ09VTlQgIiQyIiAwICIkMSIKKyAgICBmaQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIyBSZXR1cm5zOiBDb3VudCBvZiBtYXRjaGVkIGxpbmVzLgorIworQ0hFQ0tFWEFDVCgpIHsJIyA8cGF0dGVybl90b19tYXRjaF9leGFjdGx5PgorCXJ2YWw9YGVncmVwIC1jICJeJCpcJHxeJCpbXmEtekEtWjAtOV9dfFteYS16QS1aMC05X10kKlwkfFteYS16QS1aMC05X10kKlteYS16QS1aMC05X10iICIkanVua291dHB1dGZpbGUiIDI+L2Rldi9udWxsYAorCXNubXBfbGFzdF90ZXN0X3Jlc3VsdD0kcnZhbAorCUVYUEVDVFJFU1VMVCAxICAjIGRlZmF1bHQKKwlyZXR1cm4gJHJ2YWwKK30KKworQ09ORklHQUdFTlQoKSB7CisgICAgaWYgWyAieCRTTk1QX0NPTkZJR19GSUxFIiA9ICJ4IiBdOyB0aGVuCisJZWNobyAiJDA6IGZhaWxlZCBiZWNhdXNlIHZhcjogU05NUF9DT05GSUdfRklMRSB3YXNuJ3Qgc2V0IgorCWV4aXQgMTsKKyAgICBmaQorICAgIGVjaG8gJCogPj4gJFNOTVBfQ09ORklHX0ZJTEUKK30KKworQ09ORklHVFJBUEQoKSB7CisgICAgaWYgWyAieCRTTk1QVFJBUERfQ09ORklHX0ZJTEUiID0gIngiIF07IHRoZW4KKwllY2hvICIkMDogZmFpbGVkIGJlY2F1c2UgdmFyOiBTTk1QVFJBUERfQ09ORklHX0ZJTEUgd2Fzbid0IHNldCIKKwlleGl0IDE7CisgICAgZmkKKyAgICBlY2hvICQqID4+ICRTTk1QVFJBUERfQ09ORklHX0ZJTEUKK30KKworQ09ORklHQVBQKCkgeworICAgIGlmIFsgIngkU05NUEFQUF9DT05GSUdfRklMRSIgPSAieCIgXTsgdGhlbgorCWVjaG8gIiQwOiBmYWlsZWQgYmVjYXVzZSB2YXI6IFNOTVBBUFBfQ09ORklHX0ZJTEUgd2Fzbid0IHNldCIKKwlleGl0IDE7CisgICAgZmkKKyAgICBlY2hvICQqID4+ICRTTk1QQVBQX0NPTkZJR19GSUxFCit9CisKKyMKKyMgY29tbW9uIHRvIFNUQVJUQUdFTlQgYW5kIFNUQVJUVFJBUEQKKyMgbG9nIGNvbW1hbmQgdG8gImludm9rZWQiIGZpbGUKKyMKK1NUQVJUUFJPRygpIHsKKyAgICBpZiBbICJ4JERZTkFNSUNfQU5BTFlaRVIiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIENPTU1BTkQ9IiREWU5BTUlDX0FOQUxZWkVSICRDT01NQU5EIgorICAgIGZpCisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAxIF07IHRoZW4KKwllY2hvICIkQ0ZHX0ZJTEUgY29udGFpbnM6ICIKKwlpZiBbIC1mICRDRkdfRklMRSBdOyB0aGVuCisJICAgIGNhdCAkQ0ZHX0ZJTEUKKwllbHNlCisJICAgIGVjaG8gIltubyBjb25maWcgZmlsZV0iCisJZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgJENGR19GSUxFOyB0aGVuCisJQ09NTUFORD0iJENPTU1BTkQgLUMgLWMgJENGR19GSUxFIgorICAgIGZpCisgICAgaWYgWyAieCRQT1JUX1NQRUMiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIENPTU1BTkQ9IiRDT01NQU5EICRQT1JUX1NQRUMiCisgICAgZmkKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXTsgdGhlbgorCWVjaG8gInJ1bm5pbmc6ICRDT01NQU5EIgorICAgIGZpCisgICAgZWNobyAkQ09NTUFORCA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCisgICAgICAgIE9VVFBVVEVOVlZBUlMgJExPR19GSUxFLmNvbW1hbmQKKyAgICAgICAgZWNobyAkQ09NTUFORCA+PiAkTE9HX0ZJTEUuY29tbWFuZAorICAgIGZpCisgICAgaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCisgICAgICAkQ09NTUFORCA+ICRMT0dfRklMRS5zdGRvdXQgMj4mMSAmCisgICAgICAjIyBDT01NQU5EPSJjbWQuZXhlIC8vYyBzdGFydCAvL21pbiAkQ09NTUFORCIKKyAgICAgICMjIHN0YXJ0ICRDT01NQU5EID4gJExPR19GSUxFLnN0ZG91dCAyPiYxCisgICAgZWxzZQorICAgICAgJENPTU1BTkQgPiAkTE9HX0ZJTEUuc3Rkb3V0IDI+JjEKKyAgICBmaQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorU1RBUlRBR0VOVCgpIHsKKyAgICBTTk1QRFNUQVJURUQ9MQorICAgIENPTU1BTkQ9InNubXBkICRTTk1QX0ZMQUdTIC1yIC1VIC1wICRTTk1QX1NOTVBEX1BJRF9GSUxFIC1MZiAkU05NUF9TTk1QRF9MT0dfRklMRSAkQUdFTlRfRkxBR1MiCisgICAgQ0ZHX0ZJTEU9JFNOTVBfQ09ORklHX0ZJTEUKKyAgICBMT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRQorICAgIFBPUlRfU1BFQz0iJFNOTVBfU05NUERfUE9SVCIKKyAgICBpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIFBPUlRfU1BFQz0iJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7UE9SVF9TUEVDfSIKKyAgICBmaQorICAgIFNUQVJUUFJPRworICAgIFdBSVRGT1JDT05EIHRlc3QgLWYgJFNOTVBfU05NUERfUElEX0ZJTEUKKyAgICBXQUlURk9SQUdFTlQgIk5FVC1TTk1QLnZlcnNpb24iCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCitTVEFSVFRSQVBEKCkgeworICAgIFRSQVBEU1RBUlRFRD0xCisgICAgQ09NTUFORD0ic25tcHRyYXBkIC1kIC1wICRTTk1QX1NOTVBUUkFQRF9QSURfRklMRSAtTGYgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFICRUUkFQRF9GTEFHUyIKKyAgICBDRkdfRklMRT0kU05NUFRSQVBEX0NPTkZJR19GSUxFCisgICAgTE9HX0ZJTEU9JFNOTVBfU05NUFRSQVBEX0xPR19GSUxFCisgICAgUE9SVF9TUEVDPSIkU05NUF9TTk1QVFJBUERfUE9SVCIKKyAgICBpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIFBPUlRfU1BFQz0iJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7UE9SVF9TUEVDfSIKKyAgICBmaQorICAgIFNUQVJUUFJPRworICAgIFdBSVRGT1JDT05EIHRlc3QgLWYgJFNOTVBfU05NUFRSQVBEX1BJRF9GSUxFCisgICAgV0FJVEZPUlRSQVBEICJORVQtU05NUC52ZXJzaW9uIgorfQorCisjIyBzZW5kaW5nIFNJR0hVUCBmb3IgcmVjb25maWd1cmF0aW9uCisjCitIVVBQUk9HKCkgeworICAgIGlmIFsgLWYgJDEgXTsgdGhlbgorICAgICAgICBpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKyAgICAgICAgICBDT01NQU5EPSdlY2hvICJTa2lwcGluZyBTSUdIVVAgKG5vdCBwb3NzaWJsZSB3aXRoIE1pbkdXKSInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBDT01NQU5EPSJraWxsIC1IVVAgYGNhdCAkMWAiCisgICAgICAgIGZpCisJZWNobyAkQ09NTUFORCA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorCVZFUkJPU0VfT1VUIDAgJENPTU1BTkQKKwkkQ09NTUFORCA+IC9kZXYvbnVsbCAyPiYxCisgICAgZmkKK30KKworSFVQQUdFTlQoKSB7CisgICAgSFVQUFJPRyAkU05NUF9TTk1QRF9QSURfRklMRQorICAgIGlmIFsgIngkT1NUWVBFIiAhPSAieG1zeXMiIF07IHRoZW4KKyAgICAgICAgV0FJVEZPUkFHRU5UICJyZXN0YXJ0ZWQiCisgICAgZmkKK30KKworSFVQVFJBUEQoKSB7CisgICAgSFVQUFJPRyAkU05NUF9TTk1QVFJBUERfUElEX0ZJTEUKKyAgICBpZiBbICJ4JE9TVFlQRSIgIT0gInhtc3lzIiBdOyB0aGVuCisgICAgICAgIFdBSVRGT1JUUkFQRCAicmVzdGFydGVkIgorICAgIGZpCit9CisKKworIyMgdXNlZCBieSBTVE9QQUdFTlQgYW5kIFNUT1BUUkFQRAorIyBkZWxheSBiZWZvcmUga2lsbCB0byBhbGxvdyBwcmV2aW91cyBhY3Rpb24gdG8gZmluaXNoCisjICAgIHRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGludGVyYWN0aW9uIGJldHdlZW4KKyMgICAgbWFzdGVyIGFnZW50IGFuZCBzdWIgYWdlbnQuCitTVE9QUFJPRygpIHsKKyAgICBwaWQ9ImBjYXQgJDEgMj4vZGV2L251bGxgIgorICAgIGlmIFsgIngkcGlkIiAhPSAieCIgXTsgdGhlbgorCUNPTU1BTkQ9ImBFQ0hPU0VORFNJR1RFUk0gJHBpZGAiCisJZWNobyAiJENPTU1BTkQgKCQxKSIgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKKwlWRVJCT1NFX09VVCAwICIkQ09NTUFORCAoJDEpIgorICAgICAgICAkQ09NTUFORCA+L2Rldi9udWxsIDI+JjEKKyAgICAgICAgV0FJVEZPUk5PVENPTkQgIklTUlVOTklORyAkcGlkIgorICAgIGZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitTVE9QQUdFTlQoKSB7CisgICAgU0FWRV9SRVNVTFRTCisgICAgU1RPUFBST0cgJFNOTVBfU05NUERfUElEX0ZJTEUKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDEgXTsgdGhlbgorCWVjaG8gIkFnZW50IE91dHB1dDoiCisJZWNobyAiJHNlcGFyYXRvciBbc3Rkb3V0XSIKKwljYXQgJFNOTVBfU05NUERfTE9HX0ZJTEUuc3Rkb3V0CisJZWNobyAiJHNlcGFyYXRvciBbbG9nZmlsZV0iCisJY2F0ICRTTk1QX1NOTVBEX0xPR19GSUxFCisJZWNobyAiJHNlcGFyYXRvciIKKyAgICBmaQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworU1RPUFRSQVBEKCkgeworICAgIFNBVkVfUkVTVUxUUworICAgIFNUT1BQUk9HICRTTk1QX1NOTVBUUkFQRF9QSURfRklMRQorICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMSBdOyB0aGVuCisJZWNobyAic25tcHRyYXBkIE91dHB1dDoiCisJZWNobyAiJHNlcGFyYXRvciBbc3Rkb3V0XSIKKwljYXQgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFLnN0ZG91dAorCWVjaG8gIiRzZXBhcmF0b3IgW2xvZ2ZpbGVdIgorCWNhdCAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUKKwllY2hvICIkc2VwYXJhdG9yIgorICAgIGZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitGSU5JU0hFRCgpIHsKKworICAgICMjIG5vIG1vcmUgY2hhbmdlcyB0byB0ZXN0IHJlc3VsdC4KKyAgICBPS19UT19TQVZFX1JFU1VMVD0wCisKKyAgICBwaWRzPSJgY2F0ICRTTk1QX1RNUERJUi8qcGlkKiAyPi9kZXYvbnVsbGAiCisgICAgaWYgWyAiJFNOTVBEU1RBUlRFRCIgPSAiMSIgXSA7IHRoZW4KKyAgICAgIFNUT1BBR0VOVAorICAgIGZpCisgICAgaWYgWyAiJFRSQVBEU1RBUlRFRCIgPSAiMSIgXSA7IHRoZW4KKyAgICAgIFNUT1BUUkFQRAorICAgIGZpCisgICAgZm9yIHBpZCBpbiAkcGlkczsgZG8KKyAgICAgICAgaWYgSVNSVU5OSU5HICRwaWQ7IHRoZW4KKwkgICAgU05NUF9TQVZFX1RNUERJUj15ZXMKKwkgICAgQ09NTUFORD0iYEVDSE9TRU5EU0lHS0lMTCAkcGlkYCIKKwkgICAgZWNobyAiJENPTU1BTkQgKCRwZmlsZSkiID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCisJICAgIFZFUkJPU0VfT1VUIDAgIiRDT01NQU5EICgkcGZpbGUpIgorCSAgICAkQ09NTUFORCA+IC9kZXYvbnVsbCAyPiYxCisJICAgIHJldHVybl92YWx1ZT0xCisJZmkKKyAgICBkb25lCisKKyAgICAjIHJlcG9ydCB0aGUgbnVtYmVyIG9mIHRlc3RzIGRvbmUKKyAgICBHT09EICJnb3QgdG8gRklOSVNIRUQiCisgICAgZWNobyAiMS4uJHRlc3RudW0iCisKKyAgICBpZiBbICJ4JGVycm51bSIgIT0gIngwIiBdOyB0aGVuCisJaWYgWyAtcyBjb3JlIF0gOyB0aGVuCisJICAgICMgWFggaG9wZSB0aGF0IG9ubHkgb25lIHByb2cgY29yZXMgIQorCSAgICBjcCBjb3JlICRTTk1QX1RNUERJUi9jb3JlLiQkCisJICAgIHJtIC1mIGNvcmUKKwlmaQorCWVjaG8gIiRoZWFkZXJTdHIuLi5GQUlMIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorCWV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICIkaGVhZGVyU3RyLi4ub2siID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCisKKyAgICBpZiBbICJ4JFNOTVBfU0FWRV9UTVBESVIiICE9ICJ4eWVzIiBdOyB0aGVuCisJUkVNT1ZFVEVTVERBVEEKKyAgICBmaQorICAgIGV4aXQgMAorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworVkVSQk9TRV9PVVQoKSB7CisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAkMSBdOyB0aGVuCisJc2hpZnQKKwllY2hvICIkKiIKKyAgICBmaQorfQorCitmaSAjIE9ubHkgYWxsb3cgb3Vyc2VsdmVzIHRvIGJlIGV2YWwnZWQgb25jZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5NzgwMDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4KQEAgLTAsMCArMSwxMTkgQEAKKyMhL2Jpbi9zaAorCitpZiBbICQjID0gMCBdOyB0aGVuCisgICAgZWNobyAiVXNhZ2U6ICQwIDx0ZXN0c2NyaXB0PiBbPGFyZ3M+XSIKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgIngkYnVpbGRkaXIiID0gIngiIF07IHRoZW4KKyAgICBjZCAuLgorICAgIGJ1aWxkZGlyPWBwd2RgCisgICAgaWYgY2QgdGVzdGluZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIDoKKyAgICBlbHNlCisgICAgICAgZWNobyAiRXJyb3I6ICQwIG11c3QgYmUgc3RhcnRlZCBmcm9tIGluc2lkZSB0aGUgdGVzdGluZyBkaXJlY3RvcnkgaW4gdGhlIHNvdXJjZSB0cmVlLiIKKyAgICAgICBlY2hvICJUaGUgYnVpbGRkaXIgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHNldCB0byBwb2ludCB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LiIKKyAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKworaWYgWyAieCRzcmNkaXIiID0gIngiIF07IHRoZW4KKyAgICBzcmNkaXI9YGRpcm5hbWUgJDBgCisgICAgc3JjZGlyPWBjZCAkc3JjZGlyOyBjZCAuLi8uLjsgcHdkYAorICAgIHNyY2Rpcj1gZGlybmFtZSAkc3JjZGlyYAorICAgIGNkICRzcmNkaXIKKyAgICBpZiBjZCB0ZXN0aW5nIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgOgorICAgIGVsc2UKKyAgICAgICBlY2hvICJFcnJvcjogJDAgbXVzdCBiZSBzdGFydGVkIGZyb20gaW5zaWRlIHRoZSB0ZXN0aW5nIGRpcmVjdG9yeSBpbiB0aGUgc291cmNlIHRyZWUuIgorICAgICAgIGVjaG8gIlRoZSBidWlsZGRpciBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIHBvaW50IHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuIgorICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCit0ZXN0c2NyaXB0PSQxCitpZiBbIGBlY2hvICR0ZXN0c2NyaXB0IHwgY3V0IC1jIDEtMWAgIT0gJy8nIF07IHRoZW4KKyAgICB0ZXN0c2NyaXB0PSJgcHdkYC8kMSIKK2ZpCisKK1NOTVBfQkFTRURJUj1gZGlybmFtZSAkMGAKKworIyMgcHJlZmVyIE1JQiBmaWxlcyBmb3VuZCBpbiBzb3VyY2UgaGllcmFyY2h5CitTTk1QX1BSRUZFUl9ORUFSX01JQlM9MQorCitleHBvcnQgU05NUF9QUkVGRVJfTkVBUl9NSUJTCitTTk1QX1RFU1RfUFJFRklYPSR7U05NUF9URVNUX1BSRUZJWDo9VH0KK2V4cG9ydCBTTk1QX1RFU1RfUFJFRklYCisKK1NOTVBfT1JJR0RJUj1gcHdkYAkgICAgICAgICMjIHRoaXMgc2NyaXB0IG1heSBiZSBpbnZva2VkIHdpdGggcmVsYXRpdmUgcGF0aAorZXhwb3J0IFNOTVBfT1JJR0RJUgorCitTTk1QX1VQRElSPSR7YnVpbGRkaXJ9ICAgICAgICAgICMjIGJ1aWxkIGRpcmVjdG9yeQoraWYgWyAieCREWU5BTUlDX0FOQUxZWkVSIiA9ICJ4IiBdOyB0aGVuCisgICAgU05NUF9TTEVFUF9ERUZBVUxUPTEKK2Vsc2UKKyAgICBTTk1QX1NMRUVQX0RFRkFVTFQ9MTAKK2ZpCitTTk1QX1NMRUVQPSR7U05NUF9TTEVFUDo9JFNOTVBfU0xFRVBfREVGQVVMVH0gCSMjIGRlZmF1bHQgc2Vjb25kcyB0byBzbGVlcAorZXhwb3J0IFNOTVBfU0xFRVAKKworIyBGaW5kIGV4ZWN1dGFibGVzIGluIHNvdXJjZSBmaXJzdCwgdGhlbiBidWlsZCwgdGhlbiBleGlzdGluZyBQQVRILgorIyMgQWRkIHRvIFBBVEggaWYgYSBiaW5hcnkgaXMgZm91bmQuCisKK2NkICRTTk1QX1VQRElSCitTTk1QX1VQRElSPWBwd2RgCitiZj1zbm1wZ2V0CitpZiBbIC14ICIkYmYiIF0gOyB0aGVuCisgICBQQVRIPSRTTk1QX1VQRElSOiRQQVRICitlbHNlCisgIGZvciBkZCBpbiBhcHBzIGJpbiA7IGRvCisgICBiZj0kZGQvc25tcGdldAorICAgaWYgWyAteCAiJGJmIiBdIDsgdGhlbgorICAgICAgUEFUSD0kU05NUF9VUERJUi8kZGQ6JFBBVEgKKyAgICAgIGJyZWFrCisgICBmaQorICBkb25lCitmaQorZm9yIGRkIGluIGFnZW50IGJpbiBzYmluIDsgZG8KKyAgIGJmPSRkZC9zbm1wZAorICAgaWYgWyAteCAiJGJmIiBdIDsgdGhlbgorICAgICAgUEFUSD0kU05NUF9VUERJUi8kZGQ6JFBBVEgKKyAgICAgIGJyZWFrCisgICBmaQorZG9uZQorCitiZj1pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCitpZiBbICEgLXMgIiRiZiIgXSA7IHRoZW4KKyAgIGVjaG8gIk5vIFwiJGJmXCIgaW4gJFNOTVBfVVBESVIgLiBTb21lIHRlc3RzIHdpbGwgYmUgc2tpcHBlZCIKK2ZpCit1bnNldCBiZgorCisjIFJ1biBmcm9tIHRoZSB0ZXN0IHNjcmlwdHMgZGlyZWN0b3J5LgorY2QgJFNOTVBfT1JJR0RJUiA7IGNkICR7U05NUF9CQVNFRElSfQorU05NUF9CQVNFRElSPWBwd2RgCitleHBvcnQgU05NUF9CQVNFRElSCisKK1BBVEg9JHtTTk1QX0JBU0VESVJ9OiRQQVRICitleHBvcnQgUEFUSAorU05NUF9QQVRIPXllcworZXhwb3J0IFNOTVBfUEFUSAorCitleHBvcnQgU05NUF9VUERJUgorCisjCisjIFNvdXJjZSB0aGUgdGVzdGluZyBjb25maWd1cmF0aW9uIGZpbGUKKyMKKwordGVzdG51bT0iYGJhc2VuYW1lICR0ZXN0c2NyaXB0YCIKKworLiBzaW1wbGVfVEVTVENPTkYuc2gKKworLiBzaW1wbGVfZXZhbF90b29scy5zaAorCitjZCBgZGlybmFtZSAkdGVzdHNjcmlwdGAKK1BBVEg9YHB3ZGA6JFBBVEgKK2V4cG9ydCBQQVRICisKKy4gYGJhc2VuYW1lICR0ZXN0c2NyaXB0YAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYTdjMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwKQEAgLTAsMCArMSw1NCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK0JFR0lOIHsKKyAgICBpZiAoZXhpc3RzKCRFTlZ7J3NyY2Rpcid9KSkgeworCXB1c2ggQElOQywgIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQiOworICAgIH0gZWxzaWYgKC1kICJmdWxsdGVzdHMvc3VwcG9ydCIpIHsKKwlwdXNoIEBJTkMsICJmdWxsdGVzdHMvc3VwcG9ydCI7CisgICAgfSBlbHNpZiAoLWQgIi4uL3N1cHBvcnQiKSB7CisJcHVzaCBASU5DLCAiLi4vc3VwcG9ydCI7CisgICAgfQorfQordXNlIE5ldFNOTVBUZXN0OwordXNlIFRlc3Q7Cit1c2UgU05NUDsKKworbXkgJHRlc3QgPSBuZXcgTmV0U05NUFRlc3QoYWdlbnRhZGRyZXNzID0+ICRhZ2VudGFkZHJlc3MpOworCiskdGVzdC0+cmVxdWlyZV9mZWF0dXJlKCRmZWF0dXJlKTsKKworbXkgJG5ldHNubXBjZXJ0ID0gIiRFTlZ7J3NyY2Rpcid9L2xvY2FsL25ldC1zbm1wLWNlcnQgLUkgLUMgJHRlc3QtPnsnZGlyJ30iOworCitzeXN0ZW0oIiRuZXRzbm1wY2VydCBnZW5jZXJ0IC1JIC10IHNubXBkID4gL2Rldi9udWxsIDI+JjEiKTsKK3N5c3RlbSgiJG5ldHNubXBjZXJ0IGdlbmNlcnQgLUkgLXQgc25tcGFwcCAtLWNuIHNubXBhcHAgPiAvZGV2L251bGwgMj4mMSIpOworc3lzdGVtKCIkbmV0c25tcGNlcnQgZ2VuY2VydCAtSSAtdCBwZXJsIC0tY24gcGVybCA+IC9kZXYvbnVsbCAyPiYxIik7CisKK215ICRmcCA9IGAkbmV0c25tcGNlcnQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBwZXJsYDsKK2Nob21wKCRmcCk7CitwcmludCAiIyB1c2luZyBsb2NhbCBmcDogJGZwXG4iOworCitwbGFuKHRlc3RzID0+IDIpOworJHRlc3QtPmNvbmZpZ19hZ2VudCgic3lzY29udGFjdCBpdHdvcmtlZCIpOworJHRlc3QtPmNvbmZpZ19hZ2VudCgicnd1c2VyIC1zIHRzbSBwZXJsIik7CiskdGVzdC0+Y29uZmlnX2FnZW50KCJjZXJ0U2VjTmFtZSAxMDAgc25tcGFwcCAtLWNuIik7CiskdGVzdC0+Y29uZmlnX2FnZW50KCJjZXJ0U2VjTmFtZSAxMDEgJGZwIC0tY24iKTsKKworJHRlc3QtPkRJRSgiZmFpbGVkIHRvIHN0YXJ0IHRoZSBhZ2VudCIpIGlmICghJHRlc3QtPnN0YXJ0X2FnZW50KCIgLUR0bHMsc3NsLHRzbSxjZXJ0Om1hcCIpKTsKKworIyBub3cgY3JlYXRlIGEgc2Vzc2lvbiB0byB0ZXN0IHRoaW5ncyB3aXRoCitteSAkc2Vzc2lvbiA9IG5ldyBTTk1QOjpTZXNzaW9uKERlc3RIb3N0ID0+ICR0ZXN0LT57J2FnZW50YWRkcmVzcyd9LAorCQkJCVRoZWlySWRlbnRpdHkgPT4gJ3NubXBkJywKKwkJCSAgICAgICAgT3VySWRlbnRpdHkgPT4gJ3BlcmwnKTsKKworb2socmVmKCRzZXNzaW9uKSwgJ1NOTVA6OlNlc3Npb24nLCAiY3JlYXRlZCBhIHNlc3Npb24iKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHRVQgdGVzdAoraWYgKHJlZigkc2Vzc2lvbikgZXEgJ1NOTVA6OlNlc3Npb24nKSB7CisgICAgbXkgJHZhbHVlID0gJHNlc3Npb24tPmdldCgnc3lzQ29udGFjdC4wJyk7CisgICAgb2soJHZhbHVlLCAnaXR3b3JrZWQnKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBjbGVhbnVwCiskdGVzdC0+c3RvcF9hZ2VudCgpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDaXBoZXJUZXN0cyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ2lwaGVyVGVzdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhZjBiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ2lwaGVyVGVzdHMKQEAgLTAsMCArMSw2MiBAQAorLiBTVGxzVmFycworCisjIGNyZWF0ZSBhIENBCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBRlA9YCROU0NFUlQgc2hvd2NhcyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2EtbmV0LXNubXAub3JnICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQUZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYS1uZXQtc25tcC5vcmcgY2VydGlmaWNhdGUiCisKKyMgY3JlYXRlIGEgc2VydmVyIGNlcnRpZmljYXRlIHVzaW5nIHRoZSBDQSBjZXJ0aWZpY2F0ZQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAkY2hlY2tuYW1ldHlwZSAke2NoZWNrbmFtZXByZWZpeH1mb29iYXIgJE5TQ0VSVEFSR1MKK1NOTVBERlA9YCROU0NFUlQgc2hvd2NlcnQgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBkICROU0NFUlRBUkdTYAorCitDT05GSUdBR0VOVCAnW3NubXBdJyBzZXJ2ZXJDZXJ0ICRTTk1QREZQCisKKyMgY3JlYXRlIGEgdXNlciBjZXJ0aWZpY2F0ZQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKK0NPTkZJR0FHRU5UICBjZXJ0U2VjTmFtZSAxMCAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CisKK0NPTkZJR0FQUCAgIGNsaWVudENlcnQgIAkgICRURVNUVVNFUkZQCitDT05GSUdBUFAgICBzZXJ2ZXJDZXJ0ICAJICAkU05NUERGUAorCitDT05GSUdBUFAgICB0cnVzdENlcnQgJENBRlAKKworIyBzcGVjaWZ5IGFuIGV4YWN0IGxpc3Qgb2YgY2lwaGVycyB0byBhY2NlcHQKK0NPTkZJR0FHRU5UICdbc25tcF0nIHRsc0FsZ29yaXRobXMgREhFLVJTQS1BRVMyNTYtU0hBOkFFUzI1Ni1TSEE6REVTLUNCQzMtU0hBCisKK0ZMQUdTPSItT24gJFNOTVBfRkxBR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKKworIyBzdGFydCB1cCB0aGUgYWdlbnQKK1NUQVJUQUdFTlQKKworIyBlbnN1cmUgd2UgY2FuIGFjY2VzcyBpdCB2aWEgc3RhbmRhcmQgYWxnb3JpdGhtcyBvbiB0aGUgY2xpZW50IHNpZGUKK0RPU0VUVEVTVCBkZWZhdWx0QWxncyAiJEZMQUdTIgorCisjIGxpbWl0IHRoZSBjbGllbnQgdG8gdGhlIHNhbWUgc2V0CitDT05GSUdBUFAgdGxzQWxnb3JpdGhtcyBESEUtUlNBLUFFUzI1Ni1TSEE6QUVTMjU2LVNIQTpERVMtQ0JDMy1TSEEKKworIyBhbmQgdGVzdAorRE9TRVRURVNUIHNwZWNpZmljQWxncyAiJEZMQUdTIgorCisjIGRyb3Agb25lIGNpcGhlcgorQ09ORklHQVBQIHRsc0FsZ29yaXRobXMgREhFLVJTQS1BRVMyNTYtU0hBOkFFUzI1Ni1TSEEKKworIyBhbmQgdGVzdAorRE9TRVRURVNUIG9ubHlBZXMyNTZTaGEgIiRGTEFHUyIKKworIyBhbmQgZmluYWxseSBlbnN1cmUgd2UgY2FuIGdldCBiYWNrIHRvIHdvcmtpbmcgYWdhaW4KK0NPTkZJR0FQUCB0bHNBbGdvcml0aG1zIERIRS1SU0EtQUVTMjU2LVNIQTpBRVMyNTYtU0hBCitET1NFVFRFU1Qgd29ya3NBZ2FpbiAiJEZMQUdTIgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRE9ORQorCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDcmwgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTY3NDAzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDcmwKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisKKy4gU1Rsc1ZhcnMKKworIyB0aGlzIGZpbGUgY29udGFpbnMgdGVzdHMgY29tbW9uIHRvIGJvdGggdGxzIGFuZCBkdGxzIHVzYWdlcworCitUTFNESVI9JFNOTVBfVE1QRElSL3RscworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDcmVhdGUgdGhlIGNlcnRpZmljYXRlcworCisjIGNyZWF0ZSB0aGUgY2EKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKKworIyBzbm1wZAorSE9TVE5BTUU9YGhvc3RuYW1lYAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtdCBzbm1wZCAtLWNuICRIT1NUTkFNRSAkTlNDRVJUQVJHUworU0VSVkVSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wZCAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFNFUlZFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBzbm1wZCBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCisjIHVzZXIyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC10IHNubXBhcHAyIC0tY24gJ3Rlc3R1c2VyMicgICROU0NFUlRBUkdTCitURVNUVVNFUjJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUjJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIyIGNlcnRpZmljYXRlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbmZpZ3VyZSB0aGUgLmNvbmYgZmlsZXMKKworQ09ORklHQVBQIHNlcnZlckNlcnQgJFNFUlZFUkZQCisKKyMgY29tbW9uIG5hbWUgbWFwcGluZ3MKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDkgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMCAgJFRFU1RVU0VSMkZQICAgICAtLWNuCitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIyIGF1dGhwcml2CisKK0NSTEZJTEU9JFNOTVBfVE1QRElSL2NybGZpbGUucGVtCisKKyMgY29uZmlndXJlIHRoZSBDUkwgbG9jYXRpb25zCitDT05GSUdBR0VOVCAnW3NubXBdJyB4NTA5Y3JsZmlsZSAkQ1JMRklMRQorQ09ORklHQVBQICAgJ1tzbm1wXScgeDUwOWNybGZpbGUgJENSTEZJTEUKKworQ1JMQ0FDTUQ9ImVudiBESVI9JFRMU0RJUiBDTj1jYS1uZXQtc25wLm9yZyBvcGVuc3NsIGNhIgorQ1JMQVJHUz0iLWNvbmZpZyAkVExTRElSLy5vcGVuc3NsLmNvbmYgLWtleWZpbGUgJFRMU0RJUi9wcml2YXRlL2NhLW5ldC1zbm1wLm9yZy5rZXkgLWNlcnQgJFRMU0RJUi9jYS1jZXJ0cy9jYS1uZXQtc25tcC5vcmcuY3J0IgorCisjIGdlbmVyYXRlIHRoZSBpbml0aWFsIENSTAordG91Y2ggJFRMU0RJUi8uaW5kZXgKK2VjaG8gIjAxIiA+ICRUTFNESVIvLmNybG51bWJlcgorQ0FQVFVSRSAiJENSTENBQ01EIC1nZW5jcmwgJENSTEFSR1MgLW91dCAkQ1JMRklMRSIKKworIworIyBwdXQgdGhlIHNlY29uZCBjbGllbnQgaW50byB0aGUgQ1JMIGFuZCBpdCBzaG91bGRuJ3Qgd29yaworIworQ0FQVFVSRSAiJENSTENBQ01EIC1yZXZva2UgJFRMU0RJUi9jZXJ0cy9zbm1wYXBwMi5jcnQgJENSTEFSR1MgLW91dCAkQ1JMRklMRSIKK0NBUFRVUkUgIiRDUkxDQUNNRCAtZ2VuY3JsICRDUkxBUkdTIC1vdXQgJENSTEZJTEUiCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSdW4gdGhlIGFjdHVhbCBsaXN0IG9mIHRlc3RzCisjCisKKyMgc3RhcnQgdGhlIGFnZW50IHVwCitGTEFHUz0iLUR0bHMgLU9uICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCitBR0VOVF9GTEFHUz0iLUR0bHMiCitTVEFSVEFHRU5UCisKKyMgdXNpbmcgdXNlciAxIC0gYSBjb21tb24gbmFtZSBtYXBwZWQgY2VydGlmaWNhdGUKKyMgKHVzaW5nIHRoZSBkZWZhdWx0ICJzbm1wYXBwIiBjZXJ0aWZpY2F0ZSBiZWNhdXNlIHdlIGRvbid0IHNwZWNpZnkgYW5vdGhlcikKK0NBUFRVUkUgInNubXBnZXQgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0sgICAgICAgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKKyMgdXNpbmcgdXNlciAyIHNob3VsZCBub3cgZmFpbAorQ0FQVFVSRSAic25tcGdldCAtVCBvdXJfaWRlbnRpdHk9c25tcGFwcDIgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0tDT1VOVCAgMCAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKK0NIRUNLQUdFTlQgICJjZXJ0aWZpY2F0ZSByZXZva2VkIgorCisjCisjIG5vdyBwdXQgdGhlIHNlcnZlcidzIGNlcnQgaW50byB0aGUgY2xpZW50IGNybCBmaWxlCisjCitDQVBUVVJFICIkQ1JMQ0FDTUQgLXJldm9rZSAkVExTRElSL2NlcnRzL3NubXBkLmNydCAkQ1JMQVJHUyIKK0NBUFRVUkUgIiRDUkxDQUNNRCAtZ2VuY3JsICRDUkxBUkdTIC1vdXQgJENSTEZJTEUiCisKKyMgdXNlciAxIHNob3VsZCBub3cgZmFpbCBvbiB0aGUgY2xpZW50IHNpZGUKK0NBUFRVUkUgInNubXBnZXQgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0sgICAgICAgImNlcnRpZmljYXRlIHJldm9rZWQiCisKKyMgY2xlYW51cAorU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0FnZW50VHJhcCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQWdlbnRUcmFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGMzNDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0FnZW50VHJhcApAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vc2gKKworLiBTVGxzVmFycworCitTS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ0VSVElGSUNBVEUgU0VUVVAKKyMKKworIyBwcm9kdWNlIHRoZSBjZXJ0aWZpY2F0ZXMgdG8gdXNlCisKKyMgc25tcHRyYXBkCitIT1NUTkFNRT1gaG9zdG5hbWVgCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wdHJhcGQgICAtLWNuICRIT1NUTkFNRSAkTlNDRVJUQVJHUworVFJBUERGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXB0cmFwZCAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRSQVBERlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHNubXB0cmFwZCBjZXJ0aWZpY2F0ZSIKKworIyBzbm1wZAorSE9TVE5BTUU9YGhvc3RuYW1lYAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGQgICAtLWNuICRIT1NUTkFNRSAkTlNDRVJUQVJHUworU0VSVkVSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wZCAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFNFUlZFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBzbm1wZCBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29uZmlndXJhdGlvbgorCisjIHNubXBkCitDT05GSUdBR0VOVCB0cmFwc2VzcyAtQ2kgLVQgb3VyX2lkZW50aXR5PSRURVNUVVNFUkZQIC1UIHRoZWlyX2lkZW50aXR5PSRUUkFQREZQICAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfQorQ09ORklHQUdFTlQgJ1tzbm1wXScgc2VydmVyQ2VydCAkU0VSVkVSRlAKK0NPTkZJR0FHRU5UIAkgICAgIGNlcnRTZWNOYW1lICAgICAgOSAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UICAgICAgICAgIHJ3dXNlciAgICAgICAgICAgLXMgdHNtIHRlc3R1c2VyCisKKyMgc25tcHRyYXBkCitDT05GSUdUUkFQRCAnW3NubXBdJyBzZXJ2ZXJDZXJ0ICRUUkFQREZQCitDT05GSUdUUkFQRCAJICAgICBjZXJ0U2VjTmFtZSAgICAgIDkgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdUUkFQRCAJICAgICBhdXRodXNlciAgICAgICAgIGxvZyAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKK0NPTkZJR1RSQVBEICAgICAgICAgIGFnZW50eHNvY2tldCAgICAgL2Rldi9udWxsCisKKyMgZ2VuZXJhbAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU1RBUlRUUkFQRAorCisjIGluaXRpYWxpemUgb25seSB0aGUgZXhhbXBsZSBtaWIsIGFuZCBub3QgdGhlIG5vdGlmaWNhdGlvbiBtaWIgc3R1ZmYKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLURleGFtcGxlLGhlYWRlcl9nZW5lcmljIgorU1RBUlRBR0VOVAorCisjREVMQVkKK0NBUFRVUkUgInNubXBzZXQgLVQgdGhlaXJfaWRlbnRpdHk9c25tcGQgLVQgb3VyX2lkZW50aXR5PXNubXBhcHAgLU9uIC10IDMgLXIgMCAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS4yMDIxLjI1NC44LjAgaSAxIgorCitTVE9QQUdFTlQKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNDTlNlc3Npb24gYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0NOU2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWE2MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNDTlNlc3Npb24KQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworY2hlY2tuYW1ldHlwZT0iLS1zYW4iCitjaGVja25hbWVwcmVmaXg9IkROUzoiCisKKy4gU1Rsc1NlcnZlclNlc3Npb24KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzTmFtZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzTmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDg0ZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNOYW1lCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2NoZWNrbmFtZXR5cGU9Ii0tY24iCitjaGVja25hbWVwcmVmaXg9IiIKKworLiBTVGxzU2VydmVyCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhbiBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGEwYjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhbgpAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjaGVja25hbWV0eXBlPSItLXNhbiIKK2NoZWNrbmFtZXByZWZpeD0iRE5TOiIKKworLiBTVGxzU2VydmVyCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhblNlc3Npb24gYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhblNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhNjFiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuU2Vzc2lvbgpAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjaGVja25hbWV0eXBlPSItLXNhbiIKK2NoZWNrbmFtZXByZWZpeD0iRE5TOiIKKworLiBTVGxzU2VydmVyU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXIgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgwMDJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXIKQEAgLTAsMCArMSw3NyBAQAorIyEvYmluL3NoCisKKy4gU1Rsc1ZhcnMKKworIyBjcmVhdGUgYSBDQQorCitDQVBUVVJFICROU0NFUlQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQUZQPWAkTlNDRVJUIHNob3djYXMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhLW5ldC1zbm1wLm9yZyAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2EtbmV0LXNubXAub3JnIGNlcnRpZmljYXRlIgorCisjIGNyZWF0ZSBhIHNlcnZlciBjZXJ0aWZpY2F0ZSB1c2luZyB0aGUgQ0EgY2VydGlmaWNhdGUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBkIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgJGNoZWNrbmFtZXR5cGUgJHtjaGVja25hbWVwcmVmaXh9YS5iLmV4YW1wbGUuY29tICROU0NFUlRBUkdTCitTTk1QREZQPWAkTlNDRVJUIHNob3djZXJ0IC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wZCAkTlNDRVJUQVJHU2AKKworQ09ORklHQUdFTlQgJ1tzbm1wXScgc2VydmVyQ2VydCAkU05NUERGUAorCisjIGNyZWF0ZSBhIHVzZXIgY2VydGlmaWNhdGUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCitDT05GSUdBR0VOVCAgY2VydFNlY05hbWUgMTAgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorCitDT05GSUdBUFAgICBjbGllbnRDZXJ0ICAJICAkVEVTVFVTRVJGUAorCisjIHN0YXJ0IHRoZSBhZ2VudCB1cAorRkxBR1M9Ii1PbiAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgorCisjIHN0YXJ0IHVwIHRoZSBhZ2VudAorU1RBUlRBR0VOVAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBvc2l0aXZlIHRlc3RzCisjICAgIChzaG91bGQgd29yaykKKworIyBlbnN1cmUgd2UgY2FuIGFjY2VzcyBpdCB2aWEgYSBkaXJlY3QgRlAgY2hlY2sKK0RPU0VUVEVTVCBmaW5nZXJwcmludElkZW50aXR5ICItVCB0aGVpcl9pZGVudGl0eT0kU05NUERGUCAkRkxBR1MiCisKKyMgZW5zdXJlIHdlIGNhbiBhY2Nlc3MgaXQgdmlhIGEgZmlsZSBiYXNlZCBpZGVudGl0eSBjaGVjaworRE9TRVRURVNUIGZpbGVuYW1lSWRlbnRpdHkgIi1UIHRoZWlyX2lkZW50aXR5PXNubXBkICRGTEFHUyIKKworIyBlbnN1cmUgd2UgY2FuIGFjY2VzcyBpdCB2aWEgdHJ1c3RpbmcgdGhlaXIgQ0EgY2VydGlmaWNhdGUgYW5kIGEKKyMgbWF0Y2hpbmcgY29tbW9uYW1lIAorRE9TRVRURVNUIGhvc3RuYW1lSWRlbnRpdHkgIi1UIHRydXN0X2NlcnQ9JENBRlAgLVQgdGhlaXJfaG9zdG5hbWU9YS5iLmV4YW1wbGUuY29tICRGTEFHUyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOZWdhdGl2ZSB0ZXN0cworIyAgICAoc2hvdWxkIGZhaWwpCisKKyMgaWYgd2UgZG9uJ3QgbG9hZCB0aGUgQ0EgY2VydGlmaWNhdGUgd2Ugc2hvdWxkbid0IGNvbm5lY3QKK0RPRkFJTFNFVFRFU1Qgbm9UcnVzdENBQ2VydCAgIi1UIHRoZWlyX2hvc3RuYW1lPWEuYi5leGFtcGxlLmNvbSAkRkxBR1MiCisKKyMgaWYgd2Ugc3BlY2lmeSBhIGRpZmZlcmVudCBob3N0bmFtZSB3ZSBzaG91bGQgZmFpbCBob3N0bmFtZSB0ZXN0CisjICgibG9jYWxob3MiIHdpdGhvdXQgdGhlICJ0IiBpcyBpbnRlbnRpb25hbCBoZXJlKQorRE9GQUlMU0VUVEVTVCBpbmNvcnJlY3ROYW1lQS5CLkV4YW1wbGUuQ28gICItVCB0aGVpcl9ob3N0bmFtZT1hLmIuZXhhbXBsZS5jbyAkRkxBR1MiCitET0ZBSUxTRVRURVNUIGluY29ycmVjdE5hbWVBLkIuRXhhbXBsZS5Db210ICAiLVQgdGhlaXJfaG9zdG5hbWU9YS5iLmV4YW1wbGUuY29tdCAkRkxBR1MiCisKKyMgaWYgd2Ugc3BlY2lmeSB0aGUgQ0EgY2VydCdzIGJ1dCBkb24ndCBzcGVjaWZ5IHRoZSBob3N0bmFtZSwgaXQKKyMgc2hvdWxkIGZhaWwgKHRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlIGlmIHdlIHB1bGwgdGhlIGhvc3RuYW1lCisjIGZyb20gdGhlIHRyYW5zcG9ydCBzcGVjaWZpZXIpCitET0ZBSUxTRVRURVNUIGNlcnRXaXRob3V0SG9zdCAgIi1UIHRydXN0X2NlcnQ9JENBRlAgJEZMQUdTIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdpbGRjYXJkIHRlc3RzCisjCitET1NFVFRFU1Qgd2lsZGNhcmRNYXRjaCAiLVQgdHJ1c3RfY2VydD0kQ0FGUCAtVCB0aGVpcl9ob3N0bmFtZT0qLmIuZXhhbXBsZS5jb20gJEZMQUdTIgorCitET0ZBSUxTRVRURVNUIG5vRG91YmxlV2lsZGNhcmQgIi1UIHRydXN0X2NlcnQ9JENBRlAgLVQgdGhlaXJfaG9zdG5hbWU9Ki5leGFtcGxlLmNvbSAkRkxBR1MiCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBET05FCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXJTZXNzaW9uIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXJTZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZjY4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlclNlc3Npb24KQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisKKy4gU1Rsc1ZhcnMKKworIyB0aGlzIGlzIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UgImxvY2FsaG9zdDoiLCBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZSA6CitPVVJIT1NUPWBlY2hvICRTTk1QX1RFU1RfREVTVCB8IHNlZCAncy86LiovLydgCisKKyMgY3JlYXRlIGEgQ0EKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FGUD1gJE5TQ0VSVCBzaG93Y2FzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYS1uZXQtc25tcC5vcmcgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhLW5ldC1zbm1wLm9yZyBjZXJ0aWZpY2F0ZSIKKworIyBjcmVhdGUgYSBzZXJ2ZXIgY2VydGlmaWNhdGUgdXNpbmcgdGhlIENBIGNlcnRpZmljYXRlCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wZCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnICRjaGVja25hbWV0eXBlICR7Y2hlY2tuYW1lcHJlZml4fSRPVVJIT1NUICROU0NFUlRBUkdTCitTTk1QREZQPWAkTlNDRVJUIHNob3djZXJ0IC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wZCAkTlNDRVJUQVJHU2AKKworQ09ORklHQUdFTlQgJ1tzbm1wXScgc2VydmVyQ2VydCAkU05NUERGUAorCisjIGNyZWF0ZSBhIHVzZXIgY2VydGlmaWNhdGUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCitDT05GSUdBR0VOVCAgY2VydFNlY05hbWUgMTAgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorCitDT05GSUdBUFAgICBjbGllbnRDZXJ0ICAJICAkVEVTVFVTRVJGUAorCisjIHN0YXJ0IHRoZSBhZ2VudCB1cAorRkxBR1M9Ii1PbiAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgorCisjIHN0YXJ0IHVwIHRoZSBhZ2VudAorU1RBUlRBR0VOVAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBvc2l0aXZlIHRlc3RzCisjICAgIChzaG91bGQgd29yaykKKworIyBlbnN1cmUgd2UgY2FuIGFjY2VzcyBpdCB2aWEgYSBkaXJlY3QgRlAgY2hlY2sKK0RPU0VUVEVTVCBmaW5nZXJwcmludElkZW50aXR5ICItVCB0aGVpcl9pZGVudGl0eT0kU05NUERGUCAkRkxBR1MiCisKKyMgZGlyZWN0bHkgc3BlY2lmeSB0aGUgaG9zdCBuYW1lCitET1NFVFRFU1QgaG9zdG5hbWVJZGVudGl0eSAiLVQgdHJ1c3RfY2VydD0kQ0FGUCAtVCB0aGVpcl9ob3N0bmFtZT0kT1VSSE9TVCAkRkxBR1MiCisKKyMgVGhpcyBzaG91bGQgYWxzbyB3b3JrIGJlY2F1c2Ugd2U6CisjIC0gdHJ1c3QgdGhlIENBIGNlcnQKKyMgLSB1c2UgYSBzZXNzaW9uIGRlc3RuYW1lIHRoYXQgbWF0Y2hlcyB0aGUgY2VydGlmaWNhdGUKK0RPU0VUVEVTVCBzZXNzaW9ubmFtZUlkZW50aXR5ICItVCB0cnVzdF9jZXJ0PSRDQUZQICRGTEFHUyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBET05FCisKKyNzbGVlcCA1MDAKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNUcmFwZFVzZXIgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1RyYXBkVXNlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTRjNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNUcmFwZFVzZXIKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisKKy4gU1Rsc1ZhcnMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ0VSVElGSUNBVEUgU0VUVVAKKyMKKworIyBwcm9kdWNlIHRoZSBjZXJ0aWZpY2F0ZXMgdG8gdXNlCisKKyMgc25tcHRyYXBkCitIT1NUTkFNRT1gaG9zdG5hbWVgCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wdHJhcGRkICAgLS1jbiAkSE9TVE5BTUUgJE5TQ0VSVEFSR1MKK1NFUlZFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcHRyYXBkZCAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFNFUlZFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBzbm1wdHJhcGRkIGNlcnRpZmljYXRlIgorCisjIHVzZXIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCisjIENBIGNlcnRpZmljYXRlCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBRlA9YCROU0NFUlQgc2hvd2NhcyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2EtbmV0LXNubXAub3JnICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQUZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYS1uZXQtc25tcC5vcmcgY2VydGlmaWNhdGUiCisKKyMgdXNlciA5OiBDQSBzaWduZWQgdXNlciBjZXJ0CitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBjYXVzZXIgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtLXNhbiBlbWFpbDp1c2VyOUB0ZXN0Lm5ldC1zbm1wLm9yZyAtLWVtYWlsIHVzZXI5QHRlc3QubmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYXVzZXIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYXVzZXIgY2VydGlmaWNhdGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFHRU5UIENPTkZJR1VSQVRJT04KKyMKKworQ09ORklHVFJBUEQgJ1tzbm1wXScgZGVidWdUb2tlbnMgdHNtCisjICx0bHMsc3NsLGNlcnQsdHNtCitDT05GSUdUUkFQRCAnW3NubXBdJyBkb0RlYnVnZ2luZyAxCitDT05GSUdUUkFQRCAnW3NubXBdJyBzZXJ2ZXJDZXJ0ICRTRVJWRVJGUAorCitDT05GSUdUUkFQRCAnW3NubXBdJyB0cnVzdENlcnQgJENBRlAKKworIyBjb21tb24gbmFtZSBtYXBwaW5ncworQ09ORklHVFJBUEQgY2VydFNlY05hbWUgOSAgJFRFU1RVU0VSRlAgICAgIC0tY24KKworQ09ORklHVFJBUEQgY2VydFNlY05hbWUgMTAwICRDQUZQICAgICAgICAtLXJmYzgyMgorCitDT05GSUdBUFAgICBzZXJ2ZXJDZXJ0ICAJICAkU0VSVkVSRlAKK0NPTkZJR0FQUCAgIGRlZlNlY3VyaXR5TW9kZWwgICAgICB0c20KKworQ09ORklHVFJBUEQgIGF1dGh1c2VyIGxvZyAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKKworIyB0aGlzIGZpbGUgY29udGFpbnMgdGVzdHMgY29tbW9uIHRvIGJvdGggdGxzIGFuZCBkdGxzIHVzYWdlcworCisjIHN0YXJ0IHRoZSBhZ2VudCB1cAorRkxBR1M9Ii1EdGxzIC1PbiAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCIKKworU1RBUlRUUkFQRAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBPU1QtVFJBUEQtU1RBUlRVUCBDZXJ0aWZpY2F0ZXMKKyMgdXNlcgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcHRyYXAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXB0cmFwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBQ1RVQUwgVEVTVFMKKyMKKyMgUnVuIHRoZSBhY3R1YWwgbGlzdCBvZiB0ZXN0cworIworCisjIHVzaW5nIHVzZXIgMSAtIGEgY29tbW9uIG5hbWUgbWFwcGVkIGNlcnRpZmljYXRlCisjICh1c2luZyB0aGUgZGVmYXVsdCAic25tcGFwcCIgY2VydGlmaWNhdGUgYmVjYXVzZSB3ZSBkb24ndCBzcGVjaWZ5IGFub3RoZXIpCitET1RSQVBURVNUIHVzZXIxVHJhcFRlc3QgIiRGTEFHUyIKKworIyBmYWlsaW5nIHVzaW5nIHRoZSBDQSBzaWduZWQgY2VydCB3aXRob3V0CitET0ZBSUxUUkFQVEVTVCB1c2VyMlVua25vd25Vc2VyICItVCBvdXJfaWRlbnRpdHk9c25tcHRyYXAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgMSAtIHNlbmRpbmcgYW4gSU5GT1JNCisjICh1c2luZyB0aGUgZGVmYXVsdCAic25tcGFwcCIgY2VydGlmaWNhdGUgYmVjYXVzZSB3ZSBkb24ndCBzcGVjaWZ5IGFub3RoZXIpCitET1RSQVBURVNUIHVzZXIxSW5mb3JtVGVzdCAiLUNpICRGTEFHUyIKKworU1RPUFRSQVBECisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2IwM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VycwpAQCAtMCwwICsxLDI2MiBAQAorIyEvYmluL3NoCisKKy4gU1Rsc1ZhcnMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ0VSVElGSUNBVEUgU0VUVVAKKyMKKworIyBwcm9kdWNlIHRoZSBjZXJ0aWZpY2F0ZXMgdG8gdXNlCisKKyMgc25tcGQKK0hPU1ROQU1FPWBob3N0bmFtZWAKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBkICAgLS1jbiAkSE9TVE5BTUUgJE5TQ0VSVEFSR1MKK1NFUlZFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGQgICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRTRVJWRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igc25tcGQgY2VydGlmaWNhdGUiCisKKyMgdXNlcgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKKyMgdXNlciAxLjUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBhcHAyIC0tY24gJ3Rlc3R1c2VyMicgICROU0NFUlRBUkdTCitURVNUVVNFUjJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUjJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKKyMgdXNlciAyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBvdGhlcnVzZXIgLS1jbiAnb3RoZXJ1c2VyJyAgJE5TQ0VSVEFSR1MKK09USEVSVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgb3RoZXJ1c2VyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRPVEhFUlVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igb3RoZXJ1c2VyIGNlcnRpZmljYXRlIgorCisjIHVzZXIgMworQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgaW52YWxpZHVzZXIgLS1jbiAnaW52YWxpZHVzZXInICAkTlNDRVJUQVJHUworSU5WQUxJRFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGludmFsaWR1c2VyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRJTlZBTElEVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBvdGhlcnVzZXIgY2VydGlmaWNhdGUiCisKKyMgdXNlciA0CitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCB1bm1hcHBlZCAtLWNuICd1bm1hcHBlZCcgICROU0NFUlRBUkdTCitVTk1BUFBFREZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgdW5tYXBwZWQgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFVOTUFQUEVERlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHVubWFwcGVkIGNlcnRpZmljYXRlIgorCisjIHVzZXIgNQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgbWFwcGVkdXNlciAtLWNuICdtYXBwZWR1c2VyJyAgJE5TQ0VSVEFSR1MKK01BUFBFRFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIG1hcHBlZHVzZXIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJE1BUFBFRFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgbWFwcGVkdXNlciBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDY6IFNBTiBlbWFpbAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgZW1haWwgLS1zYW4gZW1haWw6Zm9vYmFydXNlckBleGFtcGxlLmNvbSAgJE5TQ0VSVEFSR1MKK0VNQUlMVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgZW1haWwgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJEVNQUlMVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBlbWFpbCBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDc6IFNBTiBkbnMKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGRucyAtLXNhbiBETlM6Zm9vYmFyLmV4YW1wbGUuY29tICAkTlNDRVJUQVJHUworRE5TVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgZG5zICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRETlNVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGRucyBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDg6IFNBTiBJUHY0CitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBpcGFkZHIgLS1zYW4gSVA6MTI3LjAuMC4xICAkTlNDRVJUQVJHUworSVBVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBpcGFkZHIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJElQVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBpcGFkZHIgY2VydGlmaWNhdGUiCisKKyMgdXNlciA4LjE6ICBhZmlsZQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgYWZpbGUgLS1jbiBhZmlsZXVzZXIgJE5TQ0VSVEFSR1MKK0FGSUxFVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgYWZpbGUgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJEFGSUxFVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBhZmlsZSBjZXJ0aWZpY2F0ZSIKKworCisjIENBIGNlcnRpZmljYXRlCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBRlA9YCROU0NFUlQgc2hvd2NhcyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2EtbmV0LXNubXAub3JnICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQUZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYS1uZXQtc25tcC5vcmcgY2VydGlmaWNhdGUiCisKKyMgdXNlciA5OiBDQSBzaWduZWQgdXNlciBjZXJ0CitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBjYXVzZXIgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtLXNhbiBlbWFpbDp1c2VyOUB0ZXN0Lm5ldC1zbm1wLm9yZyAtLWVtYWlsIHVzZXI5QHRlc3QubmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYXVzZXIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYXVzZXIgY2VydGlmaWNhdGUiCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGNhZGlyZWN0OWIgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtLXNhbiBlbWFpbDp1c2VyOWJAdGVzdC5uZXQtc25tcC5vcmcgLS1lbWFpbCB1c2VyOWJAdGVzdC5uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQURJUkVDVEZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2FkaXJlY3Q5YiAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FESVJFQ1RGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2FkaXJlY3QgY2VydGlmaWNhdGUiCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jYSAtLWNuIGNhMi1uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQTJGUD1gJE5TQ0VSVCBzaG93Y2FzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYTItbmV0LXNubXAub3JnICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQTJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2EyLW5ldC1zbm1wLm9yZyBjZXJ0aWZpY2F0ZSIKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgY2FkaXJlY3Q5YyAtLXdpdGgtY2EgY2EyLW5ldC1zbm1wLm9yZyAtLXNhbiBlbWFpbDp1c2VyOWNAdGVzdC5uZXQtc25tcC5vcmcgLS1lbWFpbCB1c2VyOWNAdGVzdC5uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQURJUkVDVDlDRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYWRpcmVjdDljICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQURJUkVDVDlDRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhZGlyZWN0OWMgY2VydGlmaWNhdGUiCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGNhZGlyZWN0OWQgLS13aXRoLWNhIGNhMi1uZXQtc25tcC5vcmcgLS1zYW4gZW1haWw6dXNlcjlkQHRlc3QubmV0LXNubXAub3JnIC0tZW1haWwgdXNlcjlkQHRlc3QubmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FESVJFQ1Q5REZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2FkaXJlY3Q5ZCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FESVJFQ1Q5REZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYWRpcmVjdDlkIGNlcnRpZmljYXRlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBR0VOVCBDT05GSUdVUkFUSU9OCisjCisKK0NPTkZJR0FHRU5UICdbc25tcF0nIGRlYnVnVG9rZW5zIHRzbQorIyAsdGxzLHNzbCxjZXJ0LHRzbQorQ09ORklHQUdFTlQgJ1tzbm1wXScgZG9EZWJ1Z2dpbmcgMQorQ09ORklHQUdFTlQgJ1tzbm1wXScgbG9nVGltZXN0YW1wIDEKK0NPTkZJR0FHRU5UICdbc25tcF0nIHNlcnZlckNlcnQgJFNFUlZFUkZQCisKK0NPTkZJR0FHRU5UICdbc25tcF0nIHRydXN0Q2VydCAkQ0FGUAorQ09ORklHQUdFTlQgJ1tzbm1wXScgdHJ1c3RDZXJ0ICRDQURJUkVDVDlDRlAKKworIyBjb21tb24gbmFtZSBtYXBwaW5ncworQ09ORklHQUdFTlQgY2VydFNlY05hbWUgOSAgJFRFU1RVU0VSRlAgICAgIC0tY24KK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEwICRURVNUVVNFUjJGUCAgICAtLWNuCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMSAkT1RIRVJVU0VSRlAgICAgLS1jbgorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTIgJElOVkFMSURVU0VSRlAgIC0tY24KKworQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMjAgJE1BUFBFRFVTRVJGUCAtLXNuIGFmdGVybWFwcGluZworQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMjEgJEVNQUlMVVNFUkZQICAtLXJmYzgyMgorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMjIgJEROU1VTRVJGUCAgICAtLWRucworQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMjMgJElQVVNFUkZQICAgICAtLWlwCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAyNCBhZmlsZSAgICAgICAgIC0tY24KKworQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTAwICRDQUZQICAgICAgICAtLXJmYzgyMgorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTAxICRDQURJUkVDVEZQICAtLXNuIGNhdXNlcmRpcmVjdG1hcAorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTAyICRDQURJUkVDVDlDRlAgIC0tc24gY2F1c2VyZGlyZWN0OWNtYXAKKyMgaW50ZW50aW9uYWxseSBub3QgbWFwcGVkOgorI0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEwMDEgJENBRElSRUNUOURGUCAgLS1zbiBjYXVzZXJkaXJlY3Q5ZG1hcAorCisjICoqKiBJTlRFTlRJT05BTExZIE5PVCBNQVBQSU5HIEFUIEFMTDogKioqCisjIENPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEwMDAgJFVOTUFQUEVERlAgLi4uLgorCitDT05GSUdBUFAgICBzZXJ2ZXJDZXJ0ICAJICAkU0VSVkVSRlAKK0NPTkZJR0FQUCAgIGRlZlNlY3VyaXR5TW9kZWwgICAgICB0c20KK0NPTkZJR0FQUCAgIGxvZ1RpbWVzdGFtcCAgICAgICAgICAxCisKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlcjIgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIG90aGVydXNlciBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gYWZ0ZXJtYXBwaW5nIGF1dGhwcml2CisKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIGZvb2JhcnVzZXJAZXhhbXBsZS5jb20gYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIGZvb2Jhci5leGFtcGxlLmNvbSBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gMTI3LjAuMC4xIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB1c2VyOEB0ZXN0Lm5ldC1zbm1wLm9yZyBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdXNlcjlAdGVzdC5uZXQtc25tcC5vcmcgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHVzZXIxMEB0ZXN0Lm5ldC1zbm1wLm9yZyBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gYWZpbGV1c2VyIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSBjYXVzZXJkaXJlY3RtYXAgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIGNhdXNlcmRpcmVjdDljbWFwIGF1dGhwcml2CisKKworIyB0aGlzIGZpbGUgY29udGFpbnMgdGVzdHMgY29tbW9uIHRvIGJvdGggdGxzIGFuZCBkdGxzIHVzYWdlcworCisjIHN0YXJ0IHRoZSBhZ2VudCB1cAorRkxBR1M9Ii1EdGxzIC12MyAtT24gJFNOTVBfRkxBR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKKworU1RBUlRBR0VOVAorCisjIHNob3VsZG4ndCBoYXZlIGNvbmZpZyBlcnJvcnMKK0NIRUNLQUdFTlRDT1VOVCAwICI6IEVycm9yOiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFWFRFTkRFRCBDRVJUSUZJQ0FURSBTRVRVUAorIworIyBQZXJmb3JtIG1vcmUgc3RlcHMgb2YgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBvY2N1ciAqYWZ0ZXIqIHRoZQorIyBhZ2VudCBoYXMgc3RhcnRlZCBpbiBvcmRlciB0byBwcmV2ZW50IGl0IGZyb20gaGF2aW5nIHNlZW4gdGhlc2UKKyMgZmlsZXMgYWhlYWQgb2YgdGltZS4KKworIyB0aGlzIHVzZXIncyBmaW5nZXJwcmludCBzaG91bGQgbm90IGJlIHJlY29nbml6ZWQgCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCB1bmtub3dudXNlciAtLXNhbiBlbWFpbDp1bmtub3dudXNlckBleGFtcGxlLmNvbSAgJE5TQ0VSVEFSR1MKK1VOS05PV05VU0VSPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgdW5rbm93bnVzZXIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFVOTUFQUEVERlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHVua25vd251c2VyIGNlcnRpZmljYXRlIgorCisjIHRoaXMgdXNlcidzIGZpbmdlcnByaW50IHNob3VsZCBub3QgYmUgZGlyZWN0bHkgcmVjb2duaXplZCwgYnV0IGl0J3MKKyMgQ0Egc2hvdWxkLgorCisjIHVzZXIgMTA6IENBIHNpZ25lZCBjZXJ0CitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtRCAtdCB1bmtub3duY2F1c2VyIC0tY24gdW5rbm93bmNhdXNlckBuZXQtc25tcC5vcmcgLS1lbWFpbCB1bmtub3duY2F1c2VyQG5ldC1zbm1wLm9yZyAgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtLXNhbiBlbWFpbDp1c2VyMTBAdGVzdC5uZXQtc25tcC5vcmcgJE5TQ0VSVEFSR1MKK1VOS05PV05DQVVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHVua25vd25jYXVzZXIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFVOS05PV05DQVVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdW5rbm93bmNhdXNlciBjZXJ0aWZpY2F0ZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBQ1RVQUwgVEVTVFMKKyMKKyMgUnVuIHRoZSBhY3R1YWwgbGlzdCBvZiB0ZXN0cworIworCisjIHVzaW5nIHVzZXIgMSAtIGEgY29tbW9uIG5hbWUgbWFwcGVkIGNlcnRpZmljYXRlCisjICh1c2luZyB0aGUgZGVmYXVsdCAic25tcGFwcCIgY2VydGlmaWNhdGUgYmVjYXVzZSB3ZSBkb24ndCBzcGVjaWZ5IGFub3RoZXIpCitET1NFVFRFU1QgdXNlcjFTbm1wQXBwICIkRkxBR1MiCisKKyMgbm93IHJlcnVuIHRoZSB0ZXN0IGFmdGVyIHNwZWNpZnlpbmcgb3VyIGRlZmF1bHQgdXNpbmcgdGhlIChzYW1lKSBmaW5nZXJwcmludAorQ09ORklHQVBQICAgY2xpZW50Q2VydCAgCSAgJFRFU1RVU0VSMkZQCitET1NFVFRFU1QgdXNlcjFDbGllbnRQdWIgIiRGTEFHUyIKKworIyB1c2luZyB1c2VyIDIgLSBhIGNvbW1vbiBuYW1lIG1hcHBlZCBjZXJ0aWZpY2F0ZSB3aXRoIGEgZGlyZWN0IC1UIEZQIHJlcXVlc3QKK0RPU0VUVEVTVCB1c2VyMkRhc2hURlBGbGFnICItVCBvdXJfaWRlbnRpdHk9JE9USEVSVVNFUkZQICRGTEFHUyIKKworQ0hFQ0tBR0VOVENPVU5UIDQgICJvdGhlcnVzZXIiCisKKyMgdXNpbmcgdXNlciAyLCBzcGVjaWZ5aW5nIHRoZSBmaWxlIG5hbWUgaW5zdGVhZCBvZiB0aGUgZmluZ2VycHJpbnQKK0RPU0VUVEVTVCB1c2VyMkRhc2hURmlsZUZsYWcgIi1UIG91cl9pZGVudGl0eT1vdGhlcnVzZXIgJEZMQUdTIgorCitDSEVDS0FHRU5UQ09VTlQgOCAgIm90aGVydXNlciIKKworIyB1c2luZyB1c2VyIDMgLSBhbiBpbnZhbGlkIGNlcnRpZmljYXRlIChtYXBwZWQgYnV0IG5vdCBhdXRob3JpemVkKQorRE9GQUlMU0VUVEVTVCAiaW52YWxpZFVuYXV0aG9yaXplZENlcnQiICItVCBvdXJfaWRlbnRpdHk9JElOVkFMSURVU0VSRlAgJEZMQUdTIgorCitDSEVDSyAiYXV0aG9yaXphdGlvbkVycm9yIgorCisjIHVzaW5nIHVzZXIgNCAtIGFuIHVubWFwcGVkIGNlcnRpZmljYXRlCitET0ZBSUxTRVRURVNUICJ1bm1hcHBlZENlcnRpZmljYXRlIiAiLVQgb3VyX2lkZW50aXR5PSRVTk1BUFBFREZQICRGTEFHUyIKKworQ0hFQ0sgImZhaWxlZCByZmM1MzQzIgorCisjIENoZWNrICp0aGVpciogY2VydGlmaWNhdGUgd2l0aCBhIGRpZmZlcmVudCBvbmUgdGhhbiBleHBlY3RlZDsgc2hvdWxkIGZhaWwKK0RPRkFJTFNFVFRFU1QgImluY29yZWN0U2VydmVyQ2VydGlmaWNhdGUiICItciAwIC1UIG91cl9pZGVudGl0eT0kT1RIRVJVU0VSRlAgLVQgdGhlaXJfaWRlbnRpdHk9JE9USEVSVVNFUkZQICRGTEFHUyIKKworQ0hFQ0sgImZhaWxlZCB0byB2ZXJpZnkgc3NsIGNlcnRpZmljYXRlIgorCisjIHVzaW5nIHVzZXIgNSAtIGEgY29tcGxldGVseSByZW1hcHBlZCBjZXJ0aWZpY2F0ZSAoZGlyZWN0IHNwZWNpZmllZCBzZWNuYW1lKQorRE9TRVRURVNUIHVzZXI1UmVtYXBwZWRTZWNuYW1lICItVCBvdXJfaWRlbnRpdHk9JE1BUFBFRFVTRVJGUCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciA2IC0gYSBzdWJqZWN0QWx0TmFtZT1lbWFpbCBjZXJ0aWZpY2F0ZSBtYXBwaW5nCitET1NFVFRFU1QgdXNlcjZTQU5FbWFpbCAiLVQgb3VyX2lkZW50aXR5PSRFTUFJTFVTRVJGUCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciA3IC0gYSBzdWJqZWN0QWx0TmFtZT1kbnMgY2VydGlmaWNhdGUgbWFwcGluZworRE9TRVRURVNUIHVzZXI3U0FORE5TICItVCBvdXJfaWRlbnRpdHk9JEROU1VTRVJGUCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciA4IC0gYSBzdWJqZWN0QWx0TmFtZT1pcHY0IGNlcnRpZmljYXRlIG1hcHBpbmcKK0RPU0VUVEVTVCB1c2VyOFNBTklQICItVCBvdXJfaWRlbnRpdHk9JElQVVNFUkZQICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDggLSB0ZXN0IHRoYXQgY2VydG1hcHBpbmcgd29ya3MgZnJvbSBhIGxvY2FsIGZpbGVuYW1lCitET1NFVFRFU1QgYWZpbGV1c2VyICItVCBvdXJfaWRlbnRpdHk9YWZpbGUgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgOSAtIGEgQ0Egc2lnbmVkIGNlcnRpZmljYXRlCitET1NFVFRFU1QgdXNlcjlDQVNpZ25lZENlcnQgIi1UIG91cl9pZGVudGl0eT0kQ0FVU0VSRlAgLVQgdHJ1c3RfY2VydD0kQ0FGUCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciA5YiAtIGEgQ0Egc2lnbmVkIGNlcnRpZmljYXRlIHdpdGggYSB1c2VyLWJhc2VkIGZwIG1hcHBpbmcKK0RPU0VUVEVTVCB1c2VyOWJDQVNpZ25lZERpcmVjdE1hcCAiLVQgb3VyX2lkZW50aXR5PSRDQURJUkVDVEZQICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDljIC0gYSBDQTIgc2lnbmVkIGNlcnRpZmljYXRlIHdpdGggYSB1c2VyLWJhc2VkIGZwIG1hcHBpbmcKK0RPU0VUVEVTVCB1c2VyOWNDQVNpZ25lZERpcmVjdE1hcCAiLVQgb3VyX2lkZW50aXR5PSRDQURJUkVDVDlDRlAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgOWQgLSBhIENBMiBzaWduZWQgY2VydGlmaWNhdGUgbm8gdXNlci1iYXNlZCBmcCBtYXBwaW5nCitET0ZBSUxTRVRURVNUIHVzZXI5ZENBU2lnbmVkRGlyZWN0TWFwICItVCBvdXJfaWRlbnRpdHk9JENBRElSRUNUOURGUCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciB1bmtub3duIC0gdGhlIHNlcnZlciB3aWxsIG5vdCBoYXZlIHNlZW4gdGhpcyBmaW5nZXJwcmludCBhdCBhbGwKK0NBUFRVUkUgInNubXBnZXQgLVQgb3VyX2lkZW50aXR5PSRVTktOT1dOVVNFUiAtVCB0cnVzdF9jZXJ0PSRDQUZQICRGTEFHUyAuMS4zLjYuMS4yLjEuMS42LjAiCisKKyMgZGlmZmVyZW50IHR5cGVzIG9mIGZhaWx1cmUgbWVzc2FhZ2VzIGZvciB0bHMvZHRscy4uLgoraWYgWyAkU05NUF9UUkFOU1BPUlRfU1BFQyA9IGR0bHN1ZHAgXTsgdGhlbgorICAgIENIRUNLICAgICAgICAgICAgICAiZmFpbGVkIHJmYzUzNDMgY29udGV4dEVuZ2luZUlEIHByb2JpbmciCisgICAgQ0hFQ0tBR0VOVENPVU5UICAxICJUTFMgRXJyb3I6IG5vIGNlcnRpZmljYXRlIHJldHVybmVkIgorZWxzZQorICAgIENIRUNLICAgICAgICAgICAgICAiZmFpbGVkIHRvIHNzbF9jb25uZWN0IgorICAgIENIRUNLQUdFTlRDT1VOVCAgMSAiRmFpbGVkIFNTTF9hY2NlcHQiCitmaQorCisjIHVzaW5nIHRoZSB1c2VyIHdpdGhvdXQgYSBrbm93biBmaW5nZXJwcmludCBidXQgd2l0aCBhIGtub3duIENBCitET1NFVFRFU1QgdXNlck5ld0Zyb21DQSAiIC1UIHRydXN0X2NlcnQ9JENBRlAgLVQgb3VyX2lkZW50aXR5PSRVTktOT1dOQ0FVU0VSRlAgJEZMQUdTIgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVmFycyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmE4NGY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNWYXJzCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUFRSQVBEX1BPUlQKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCitleHBvcnQgTkVUX1NOTVBfQ1JUX0NGR1RPT0w9IiR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyIKK05TQ0VSVD0icGVybCAkU05NUF9CQVNFRElSLy4uLy4uLy4uL2xvY2FsL25ldC1zbm1wLWNlcnQgLUkiCitOU0NFUlRBUkdTPSItQyAkU05NUF9UTVBESVIiCisKK0RPU0VUVEVTVCgpIHsKKyAgdmFsdWU9JDEKKyAgYXJncz0kMgorCisgICMgU05NUHYyLU1JQjo6c3lzTG9jYXRpb24uMAorICBDQVBUVVJFICJzbm1wc2V0ICRhcmdzIC4xLjMuNi4xLjIuMS4xLjYuMCBzICckdmFsdWUnIgorCisgIENBUFRVUkUgInNubXBnZXQgJGFyZ3MgLjEuMy42LjEuMi4xLjEuNi4wIgorCisgIENIRUNLICJTVFJJTkc6ICckdmFsdWUnIgorfQorCisKK0RPRkFJTFNFVFRFU1QoKSB7CisgIHZhbHVlPSQxCisgIGFyZ3M9JDIKKworICAjIFNOTVB2Mi1NSUI6OnN5c0xvY2F0aW9uLjAKKyAgQ0FQVFVSRSAic25tcHNldCAkYXJncyAuMS4zLjYuMS4yLjEuMS42LjAgcyAnJHZhbHVlJyIKKworICBDQVBUVVJFICJzbm1wZ2V0ICRhcmdzIC4xLjMuNi4xLjIuMS4xLjYuMCIKKworICBDSEVDS0NPVU5UIDAgIiR2YWx1ZSIKK30KKworRE9UUkFQVEVTVCgpIHsKKyAgdmFsdWU9JDEKKyAgYXJncz0kMgorCisgICMgSUYtTUlCOjpsaW5rVXAKKyAgQ0FQVFVSRSAic25tcHRyYXAgJGFyZ3MgMCAuMS4zLjYuMS42LjMuMS4xLjUuNCBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgJHZhbHVlIgorCisgIENIRUNLVFJBUEQgIlNUUklORzogJHZhbHVlIgorfQorCitET0ZBSUxUUkFQVEVTVCgpIHsKKyAgdmFsdWU9JDEKKyAgYXJncz0kMgorCisgICMgSUYtTUlCOjpsaW5rVXAKKyAgQ0FQVFVSRSAic25tcHRyYXAgJGFyZ3MgMCAuMS4zLjYuMS42LjMuMS4xLjUuNCBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgJHZhbHVlIgorCisgIENIRUNLVFJBUERDT1VOVCAwICIkdmFsdWUiCit9CisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4IGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwZjhkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4CkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCisuIFNUbHNWYXJzCisKKyMgdGhpcyBmaWxlIGNvbnRhaW5zIHRlc3RzIGNvbW1vbiB0byBib3RoIHRscyBhbmQgZHRscyB1c2FnZXMKKworZXhwb3J0IE5FVF9TTk1QX0NSVF9DRkdUT09MPSIke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWciCitOU0NFUlQ9InBlcmwgJFNOTVBfQkFTRURJUi8uLi8uLi8uLi9sb2NhbC9uZXQtc25tcC1jZXJ0IgorTlNDRVJUQVJHUz0iLUkgLUMgJFNOTVBfVE1QRElSIgorCitUTFNESVI9JFNOTVBfVE1QRElSL3RscworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDcmVhdGUgdGhlIGNlcnRpZmljYXRlcworCisjIGNyZWF0ZSB0aGUgY2EKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKKworIyBzbm1wZAorSE9TVE5BTUU9YGhvc3RuYW1lYAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtdCBzbm1wZCAtLWNuICRIT1NUTkFNRSAkTlNDRVJUQVJHUworU0VSVkVSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wZCAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFNFUlZFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBzbm1wZCBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCisjIHVzZXIyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnIC10IHNubXBhcHAyIC0tY24gJ3Rlc3R1c2VyMicgICROU0NFUlRBUkdTCitURVNUVVNFUjJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUjJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIyIGNlcnRpZmljYXRlIgorCitDT05GSUdBUFAgc2VydmVyQ2VydCAkU0VSVkVSRlAKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDkgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMCAgJFRFU1RVU0VSMkZQICAgICAtLWNuCitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gJFRTTV9QUkVGSVg6dGVzdHVzZXIyIGF1dGhwcml2CitDT05GSUdBR0VOVCByb2NvbW11bml0eSBwdWJsaWMKKworIworIyBTdGFydCB0aGUgYWdlbnQKKyMKK0FHRU5UX0ZMQUdTPSItRHRzbSB1ZHA6OTk5OSIKK0ZMQUdTPSItT24gJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjE5MC4xLjIuMS4wIgorQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xOTAuMS4yLjEuMCA9IElOVEVHRVI6IGZhbHNlIgorCisjIHVzaW5nIHVzZXIgMSAtIGEgY29tbW9uIG5hbWUgbWFwcGVkIGNlcnRpZmljYXRlCisjICh1c2luZyB0aGUgZGVmYXVsdCAic25tcGFwcCIgY2VydGlmaWNhdGUgYmVjYXVzZSB3ZSBkb24ndCBzcGVjaWZ5IGFub3RoZXIpCitDQVBUVVJFICJzbm1wZ2V0IC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLICAgICAgICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisjIHVzaW5nIHVzZXIgMiBzaG91bGQgbm93IGZhaWwgYmVjYXVzZSBubyBwcmVmaXggaXMgYXBwbGllZAorQ0FQVFVSRSAic25tcGdldCAtVCBvdXJfaWRlbnRpdHk9c25tcGFwcDIgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworQ0hFQ0tDT1VOVCAwICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorQ0hFQ0sgImF1dGhvcml6YXRpb25FcnJvciIKKworIyBzZXQgdGhlIFRTTSBwcmVmaXggc2NhbGFyIHRvIDEgdG8gdHVybiBvbiBwcmVmaXhpbmcKK0NBUFRVUkUgInNubXBzZXQgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xOTAuMS4yLjEuMCBpIDEiCisKKworIyB1c2luZyB1c2VyIDIgc2hvdWxkIG5vdyB3b3JrIGFuZCB0aGUgcHJlZml4IHNob3VsZCBoYXZlIGJlZW4gYWRkZWQKKyMgdG8gdGhlIHNlY3VyaXR5TmFtZSwgc28gdGhlIGFnZW50IG5vdyBhY2NlcHRzIGl0CitDQVBUVVJFICJzbm1wZ2V0IC1UIG91cl9pZGVudGl0eT1zbm1wYXBwMiAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjE5MC4xLjIuMS4wIgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjE5MC4xLjIuMS4wID0gSU5URUdFUjogdHJ1ZSIKKworIyB1c2luZyB1c2VyIDEgc2hvdWxkIG5vdyBmYWlsIGJlY2F1c2UgdGhlIHByZWZpeCBoYXMgYWRkZWQgdG8gdGhlCisjIHNlY3VyaXR5TmFtZSwgc28gdGhlIGFnZW50IG5vdyBhY2NlcHRzIGl0CitDQVBUVVJFICJzbm1wZ2V0IC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLQ09VTlQgMCAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKK0NIRUNLICJhdXRob3JpemF0aW9uRXJyb3IiCisKK0NBUFRVUkUgInNubXBnZXQgLXYgMSAtYyBwdWJsaWMgMTI3LjAuMC4xOjk5OTkgLjEuMy42LjEuMi4xLjE5MC4xLjIuMS4wIgorCisjIGNsZWFudXAKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFEdGxzVXNlcl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMUR0bHNVc2VyX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMGNhZWRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFEdGxzVXNlcl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgdXNlciBjZXJ0aWZpY2F0ZSB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorCisuIC4vU1Rsc1VzZXJzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMlRsc1VzZXJfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJUbHNVc2VyX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2ZlMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJUbHNVc2VyX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIHVzZXIgY2VydGlmaWNhdGUgdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCisKKy4gLi9TVGxzVXNlcnMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExRHRsc1NlcnZlcl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMUR0bHNTZXJ2ZXJfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDI0OTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMUR0bHNTZXJ2ZXJfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIHNlcnZlciBjZXJ0aWZpY2F0ZSB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCisKKy4gLi9TVGxzTmFtZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJUbHNTZXJ2ZXJfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJUbHNTZXJ2ZXJfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZWZhOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMlRsc1NlcnZlcl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBzZXJ2ZXIgY2VydGlmaWNhdGUgdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCisKKy4gLi9TVGxzTmFtZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNEdGxzU2FuX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzRHRsc1Nhbl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkYjNjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzRHRsc1Nhbl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgc2VydmVyIFNBTiB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCisKKy4gLi9TVGxzU2FuCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNFRsc1Nhbl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNFRsc1Nhbl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1ZThiYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0VGxzU2FuX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIHNlcnZlciBTQU4gdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCisKKy4gLi9TVGxzU2FuCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNUR0bHNTYW5TZXNzaW9uX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE1RHRsc1NhblNlc3Npb25fc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDVmY2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNUR0bHNTYW5TZXNzaW9uX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCBzZXJ2ZXIgU0FOIHRlc3RzIHVzaW5nIHNlc3Npb24gZGVzdGhvc3QKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKKworLiAuL1NUbHNTYW5TZXNzaW9uCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNlRsc1NhblNlc3Npb25fc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTZUbHNTYW5TZXNzaW9uX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTFmY2YzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTZUbHNTYW5TZXNzaW9uX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIHNlcnZlciBTQU4gdGVzdHMgdXNpbmcgc2Vzc2lvbiBkZXN0aG9zdAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKKworLiAuL1NUbHNTYW5TZXNzaW9uCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN0R0bHNDTlNlc3Npb25fc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdEdGxzQ05TZXNzaW9uX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmVlYTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdEdGxzQ05TZXNzaW9uX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCBzZXJ2ZXIgY29tbW9uTmFtZSB0ZXN0cyB1c2luZyBzZXNzaW9uIGRlc3Rob3N0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCisKKy4gLi9TVGxzQ05TZXNzaW9uCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExOFRsc0NOU2Vzc2lvbl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExOFRsc0NOU2Vzc2lvbl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1YWI0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE4VGxzQ05TZXNzaW9uX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIHNlcnZlciBjb21tb25OYW1lIHRlc3RzIHVzaW5nIHNlc3Npb24gZGVzdGhvc3QKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCisKKy4gLi9TVGxzQ05TZXNzaW9uCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMUR0bHNUcmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxRHRsc1RyYXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2M3YmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMUR0bHNUcmFwX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCB0cmFwIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCisKKy4gLi9TVGxzVHJhcGRVc2VyCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMlRsc1RyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJUbHNUcmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFlZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJUbHNUcmFwX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIHRyYXAgdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCisKKy4gLi9TVGxzVHJhcGRVc2VyCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMUR0bHNBZ2VudFRyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFEdGxzQWdlbnRUcmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDZmYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFEdGxzQWdlbnRUcmFwX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCBhZ2VudCB0cmFwIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCisKKy4gLi9TVGxzQWdlbnRUcmFwCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMlRsc0FnZW50VHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMlRsc0FnZW50VHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0NDAxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMyVGxzQWdlbnRUcmFwX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIGFnZW50IHRyYXAgdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCisKKy4gLi9TVGxzQWdlbnRUcmFwCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MUR0bHNDcmxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFEdGxzQ3JsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmE4ZTRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFEdGxzQ3JsX3NpbXBsZQpAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCBDUkwgSGFuZGxpbmcKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworLiAuL1NDcmwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQyVGxzQ3JsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQyVGxzQ3JsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzIzYzEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJUbHNDcmxfc2ltcGxlCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1AgQ1JMIEhhbmRsaW5nCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCisuIC4vU0NybApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFEdGxzQ2lwaGVyc19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MUR0bHNDaXBoZXJzX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2JiZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFEdGxzQ2lwaGVyc19zaW1wbGUKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgQ2lwaGVyIFNlbGVjdGlvbgorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCisuIFNDaXBoZXJUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJUbHNDaXBoZXJzX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUyVGxzQ2lwaGVyc19zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyOGRjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUyVGxzQ2lwaGVyc19zaW1wbGUKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBDaXBoZXIgU2VsZWN0aW9uCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCisuIFNDaXBoZXJUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDBUbHNJcHY2X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwVGxzSXB2Nl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzN2Y0YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwVGxzSXB2Nl9zaW1wbGUKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBvdmVyIElQVjYKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNJUFY2X0RPTUFJTgorCisjIGVuc3VyZSB3ZSBoYXZlIGEgbG9jYWxob3N0NiBlbnRyeQorCisjIFhYWDogdGhpcyBzdGVtcyBmcm9tIGJyb2tlbiBpc3N1ZXMgaW4gb3BlbnNzbCB0aGF0IHJlZnVzZSBbOjoxXToKKyMgc3R5bGUgYWNjZXB0IHN0cmluZ3MgKGl0IHdvcmtzIGZvciBjbGllbnQgY29ubmVjdGlvbnMpLgorZ3JlcCBsb2NhbGhvc3Q2IC9ldGMvaG9zdHMgPiAvZGV2L251bGwgMj4mMQoraWYgWyAkPyA9IDEgXSA7IHRoZW4KKyAgICBTS0lQIFRoaXMgdGVzdCByZXF1aXJlcyBhIGxvY2FsaG9zdDYgZW50cnkgaW4gL2V0Yy9ob3N0cworZmkKKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCitTTk1QX1RFU1RfREVTVD0nbG9jYWxob3N0NjonCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKKy4gLi4vdHJhbnNwb3J0cy9TdGxzdGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwVGxzUGVybC50IGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDBUbHNQZXJsLnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4ZWRiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwVGxzUGVybC50CkBAIC0wLDAgKzEsOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgSEVBREVSIFBlcmwgVExTL1RDUCBUZXN0CisKKyRhZ2VudGFkZHJlc3MgPSAidGxzdGNwOmxvY2FsaG9zdDo5ODc1IjsKKyRmZWF0dXJlID0gIk5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4iOworCitkbyAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsIjsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxRHRsc1BlcmwudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxRHRsc1BlcmwudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDk4MGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFEdGxzUGVybC50CkBAIC0wLDAgKzEsOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgSEVBREVSIFBlcmwgRFRMUy9VRFAgVGVzdAorCiskYWdlbnRhZGRyZXNzID0gImR0bHN1ZHA6bG9jYWxob3N0Ojk4NzUiOworJGZlYXR1cmUgPSAiTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTiI7CisKK2RvICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwiOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFEdGxzVHNtUHJlZml4X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxRHRsc1RzbVByZWZpeF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4NWFkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxRHRsc1RzbVByZWZpeF9zaW1wbGUKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVFNNIHByZWZpeGluZyBzdXBwb3J0IGZvciBEVExTL1VEUAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorVFNNX1BSRUZJWD1kdGxzCisKKy4gLi9TVHNtUHJlZml4CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMlRsc1RzbVByZWZpeF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMlRsc1RzbVByZWZpeF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2MmVlZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAyVGxzVHNtUHJlZml4X3NpbXBsZQpAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUU00gcHJlZml4aW5nIHN1cHBvcnQgZm9yIFRMUy9UQ1AKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCitUU01fUFJFRklYPXRscworCisuIC4vU1RzbVByZWZpeApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWIyYjgyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHMKQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoCisKKyMgdGhpcyBmaWxlIGNvbnRhaW5zIHRlc3RzIGNvbW1vbiB0byBib3RoIHRscyBhbmQgZHRscyB1c2FnZXMKKworZXhwb3J0IE5FVF9TTk1QX0NSVF9DRkdUT09MPSIke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWciCitOU0NFUlQ9InBlcmwgJFNOTVBfQkFTRURJUi8uLi8uLi8uLi9sb2NhbC9uZXQtc25tcC1jZXJ0IC1JIgorTlNDRVJUQVJHUz0iLUMgJFNOTVBfVE1QRElSIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDcmVhdGUgdGhlIGNlcnRpZmljYXRlcworCisjIHNubXBkCitIT1NUTkFNRT1gaG9zdG5hbWVgCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wZCAgIC0tY24gJEhPU1ROQU1FICROU0NFUlRBUkdTCitTRVJWRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBkICAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkU0VSVkVSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHNubXBkIGNlcnRpZmljYXRlIgorCisjIHVzZXIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbmZpZ3VyZSB0aGUgLmNvbmYgZmlsZXMKKworQ09ORklHQVBQIHNlcnZlckNlcnQgJFNFUlZFUkZQCisKKyMgY29tbW9uIG5hbWUgbWFwcGluZ3MKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDkgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1biB0aGUgYWN0dWFsIGxpc3Qgb2YgdGVzdHMKKyMKKworIyBzdGFydCB0aGUgYWdlbnQgdXAKK0ZMQUdTPSItT24gJFNOTVBfRkxBR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKKworU1RBUlRBR0VOVAorCisjIHVzaW5nIHVzZXIgMSAtIGEgY29tbW9uIG5hbWUgbWFwcGVkIGNlcnRpZmljYXRlCisjICh1c2luZyB0aGUgZGVmYXVsdCAic25tcGFwcCIgY2VydGlmaWNhdGUgYmVjYXVzZSB3ZSBkb24ndCBzcGVjaWZ5IGFub3RoZXIpCitDQVBUVVJFICJzbm1wZ2V0ICRGTEFHUyAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLICAgICAgICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RyYW5zcG9ydCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RyYW5zcG9ydApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMzNmZjU3NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RyYW5zcG9ydApAQCAtMCwwICsxLDE4IEBACitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCisjIGNvbmZpZ3VyZSB0aGUgYWdlbnQgdG8gYWNjZXB0IHVzZXIgaW5pdGlhbCB3aXRoIG5vQXV0aE5vUHJpdgorLiAuLi9kZWZhdWx0L1N2M2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICROT0FVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhNjdmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVURQIFRyYW5zcG9ydAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz11ZHAKKworLiAuL1N0cmFuc3BvcnQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzZhOGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRDUCBUcmFuc3BvcnQKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGNwCisKKy4gLi9TdHJhbnNwb3J0CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2MDdjNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X3NpbXBsZQpAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBVRFA2IFRyYW5zcG9ydAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dWRwNgorU05NUF9URVNUX0RFU1Q9Ils6OjFdOiIKKworLiAuL1N0cmFuc3BvcnQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWViMzUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfc2ltcGxlCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRDUDYgVHJhbnNwb3J0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10Y3A2CitTTk1QX1RFU1RfREVTVD0iWzo6MV06IgorCisuIC4vU3RyYW5zcG9ydApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTNiYTFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9zaW1wbGUKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVW5peCBUcmFuc3BvcnQKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXVuaXgKK1NOTVBfVEVTVF9ERVNUPSR7U05NUF9UTVBESVJ9L3Rlc3R1bml4c29ja2V0CisKKy4gLi9TdHJhbnNwb3J0CisKKyMgY2xlYW51cAorcm0gLWYgJFNOTVBfVEVTVF9ERVNUCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTkzNzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZQpAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCBUcmFuc3BvcnQKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworLiAuL1N0bHN0ZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3MmEyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGUKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBUcmFuc3BvcnQKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCisuIC4vU3Rsc3Rlc3RzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0ODMxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX3NpbXBsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBBTElBUyBUcmFuc3BvcnQKKworU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIGNvbmZpZ3VyZSB0aGUgYWdlbnQgdG8gYWNjZXB0IHVzZXIgaW5pdGlhbCB3aXRoIG5vQXV0aE5vUHJpdgorLiAuLi9kZWZhdWx0L1N2M2NvbmZpZworCitDT05GSUdBUFAgYWxpYXMgYWxpYXN0ZXN0IHVkcDpsb2NhbGhvc3Q6JFNOTVBfU05NUERfUE9SVAorQ09ORklHQUdFTlQgJ1tzbm1wXScgYWxpYXMgYWxpYXN0ZXN0IHVkcDpsb2NhbGhvc3Q6JFNOTVBfU05NUERfUE9SVAorCitTTk1QX1RSQU5TUE9SVF9TUEVDPWFsaWFzCitTTk1QX1RFU1RfREVTVD0iYWxpYXN0ZXN0IgorU05NUF9TTk1QRF9QT1JUPSIiCisKKy4gLi9TdHJhbnNwb3J0CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LmNlcnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LmNlcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0OWIyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QuY2VydApAQCAtMCwwICsxLDIzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUQyakNDQXNLZ0F3SUJBZ0lKQUlTRVFSZ1pKWEg0TUEwR0NTcUdTSWIzRFFFQkJRVUFNRkV4Q3pBSkJnTlYKK0JBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURU9NQXdHQTFVRUJ4TUZSR0YyYVhNeEVUQVBCZ05WQkFvVENFNWwKK2RDMVRUazFRTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd0hoY05NRGt3TnpBNU1qTXpOak13V2hjTk1Ea3cKK09EQTRNak16TmpNd1dqQlJNUXN3Q1FZRFZRUUdFd0pWVXpFTE1Ba0dBMVVFQ0JNQ1EwRXhEakFNQmdOVkJBY1QKK0JVUmhkbWx6TVJFd0R3WURWUVFLRXdoT1pYUXRVMDVOVURFU01CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1JSUIKK0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE0eWpjUTduamN3bnk2TnNGZ001V3dFY1YKK0d0VmUraDJrNDFKVTlsSjlJMUVnN2tSc1NmSjd6OWpYNUpYcEhYVVhxNTRNdC9zTE9EZWhleUU4ejVad2pwbGMKK01HeExpUGRSUnAvM0JtbGgzcXJQTFJMUjE3QisxTWtjSXo5VUJVdXQyUHVzeEVlQ2VBL2c4UlZFd0s4b1BnZXIKKzRJK0thWG9uWFdtaG04NUVFSGxXbVpIVERURGE2TVhVUk5zK0VxY1FyV1JnSHlmOGJRaHdwU2pCem1iVXRWcTUKK2lwVk5XbXF4UGxTVGtqNUNxa3JiTmRrcE9JQnZaNlRoRmZpMnJ3UERPK1l6cnVjRmNNK0JmS1JDREJjQzRUc04KKzJ6MFMxSXNlSkdUTk8xaWlkTXJqQ1Z6b0liTUIrR291WGpMSlhBdUxJRjBYM2RQK3lPWnplU3Q1SjJ2Q2dRSUQKK0FRQUJvNEcwTUlHeE1CMEdBMVVkRGdRV0JCUitaZHVOQUd2YkF0am84KzdEUFVPSTVDcFFSakNCZ1FZRFZSMGoKK0JIb3dlSUFVZm1YYmpRQnIyd0xZNlBQdXd6MURpT1FxVUVhaFZhUlRNRkV4Q3pBSkJnTlZCQVlUQWxWVE1Rc3cKK0NRWURWUVFJRXdKRFFURU9NQXdHQTFVRUJ4TUZSR0YyYVhNeEVUQVBCZ05WQkFvVENFNWxkQzFUVGsxUU1SSXcKK0VBWURWUVFERXdsc2IyTmhiR2h2YzNTQ0NRQ0VoRUVZR1NWeCtEQU1CZ05WSFJNRUJUQURBUUgvTUEwR0NTcUcKK1NJYjNEUUVCQlFVQUE0SUJBUUNhMis1dHorZm1ndzloOEFGOWwrKzhNMUxuenFybXN2eTQ1cGh4eDVmL3JaZTgKK0Jyc3BNbHJUNmJLY005Q1RxZXpqa0RaT3JHRXVZdmNiTWVhMm50bFhHMENJTXhoV3BnY3p3eFppekdZSU42ZjEKK0NLNXNpUGxPektPYnBrQXdValdiTG03TjJCSkdLcDNGTXExMUp0MzF0VXdKVEJjNXZpWXpXQkNRVjRDeFZvTDUKK01xTWZWeUtqT0swZXFnTXZ0clJnWjZ0LzA5OE9pRTRVU2hlVysrK2IwenpvOFVtL1lJQTlKUW1DYlo0Ymg2amQKKy9BZ1poS1JSNWJYaU9HbUNMVndlRFY0TVRpMTJZMjg1R0JieWxiZER1ajhZVjdtdTdOek9uNWtKNnhJMDBWdWMKK2JHV3RkY3BFR2tXN1puNFlDdXhzenBxdE0zakxHWkhDVXFDdUtTZVAKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QucHJpdiBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QucHJpdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJhOGViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5wcml2CkBAIC0wLDAgKzEsMjcgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUVwUUlCQUFLQ0FRRUE0eWpjUTduamN3bnk2TnNGZ001V3dFY1ZHdFZlK2gyazQxSlU5bEo5STFFZzdrUnMKK1NmSjd6OWpYNUpYcEhYVVhxNTRNdC9zTE9EZWhleUU4ejVad2pwbGNNR3hMaVBkUlJwLzNCbWxoM3FyUExSTFIKKzE3QisxTWtjSXo5VUJVdXQyUHVzeEVlQ2VBL2c4UlZFd0s4b1BnZXI0SStLYVhvblhXbWhtODVFRUhsV21aSFQKK0RURGE2TVhVUk5zK0VxY1FyV1JnSHlmOGJRaHdwU2pCem1iVXRWcTVpcFZOV21xeFBsU1RrajVDcWtyYk5ka3AKK09JQnZaNlRoRmZpMnJ3UERPK1l6cnVjRmNNK0JmS1JDREJjQzRUc04yejBTMUlzZUpHVE5PMWlpZE1yakNWem8KK0liTUIrR291WGpMSlhBdUxJRjBYM2RQK3lPWnplU3Q1SjJ2Q2dRSURBUUFCQW9JQkFESDRuaVBqODY0dDVScm0KK2U1cHZTZFE0anVMOVIweDhVdmFTK1EvSzY2NW1QWGxNNGdtT1owQTg4cGxkaFErdTM0c29WS0h3ZnZKYUFwTUUKK3A4eit5am9FY0t4U1ZuZUYrSUl4MUhTN29BVU16RkNkRUQ2RG5CTVJQcmhlU1F4MUxvUktNU0pvbk1IdXRFdzAKK29wQkV0L1NWV1hFb0FvbmJqbWRWUW5EMCtqSXBKUkhZdlBqOFRXR3R2N1ZsN25IVlRRQlVZeStqZDFDQlE0akEKK2VtSEs1SUd4Kyt5dHJmTlhBMXVEYTM4dDhjU0hnMktwcjh2aHdrelpXVnhza1M0NndTUC9zUEJxSy93ZytGeGQKKzhXb3ZhR1hwaXlMYjJLajE1ckhCcWQ1d0ZlS0hHSkkvUS9YNHFWdnhMaktHZUZKMUdETnZ2ZzhtZXZSWjlSZWkKK3lJQnU4b1VDZ1lFQTg5NVd4ZWFDMFM4ZEtaVkFSN2VYTGF1SFVRL2xBSWpxbDhPdGRzSEJmcFRSTFd2czlJcFEKKzh5MG40c2djQi80aWFCVlZwOFc0MTR6anV0Q3hYSnJxNVpIS09pNXpWcXBQc2Fta0tRWW5HS2ZiVTJxMFdwdEQKK1QxejJwTFNrMUwvTUhqaGJ1d1piZTBIeGY3dlBnMTBsb3VrRmxVR2tFYWphSEtPbmh5MS9CdGNDZ1lFQTduVzcKKzRWbVZjRE04eVlibE5OUVB2MlRIb293WkpsU1Q5djcrUTlwam9ZTVl2cnVRV0tjWnlJakZTdDloZXRyZkJ0eE8KKytReFVxdmZCOGQvUlN6Zzd3RjdBbVdIYTNFZmdUN2gzWDhnbGg3aXNiOVlJUm42cUJ0eHlzV1RYUnFOR00rV2YKK2h4eWxGUVhlekpQWjBoU2JkWFpUaGh3dnZ6RDQxWmJqcTNYSnptY0NnWUVBb0E0TU80VG4xTzBzSWErZ2FiRjQKK0duUmFzbnhSRzRIQkhteENQQkE4czV4dWtYWWxKZlpsM01TRlNoVjJPRlMyTmtQU1hQT3JObVYwelpiTTRXK1gKK3ZhWnE2TGExNG1xVE5aS1dlSXBlUEpObW9xQUUwUGJZUFkxUkg1YWtIREhwZ09nU1pIUnV0RDM2aDVBM1NRdG8KK2VUeWcrbTREaGNlaHAyeE50cTNJa2k4Q2dZRUEzdlBQVFZ4di8yNjRpQWdLNThEYVZHM0t4ZXpOV3V3N1IvV1UKK0VDYnhma0pQY1kxMjRaeWkyNzhkRCtzWmZqK0R4U3RZM3p3ck1ZcmlsOTVYRmtnbWZhOVp6azhTeldDYWxvNzMKK2RlTnhTNXRjQmxpTWRqVFpqZjZ4Y2JEQ0lyWm4zZi8wanVRMmFSaUsvcVhDUTh5bXFVV1B4RlU0UXo5cmVIQlMKK3Y2NHFtRU1DZ1lFQXN1bXEralVvYTNxWW5hNDV2eUJNUWY2TkpMV0NGWVhsb0F0S1ZURUNDYjg4VDZNVnlyT0UKK2N5ajBZYmVrK2llek44dGJKSHFpU1dWdG5SQTlranJDMEFyd09LRGlwTkZSa0ZvZ3BVUmFqemIvTG5VUWRXK1AKK3JPdE51TGFObkxWbzJraUs0UU5iZCszQkpRQ0RQQmNaUXE2ZEdjY3Z5TlhZVnRmRXhZNFdJMmM9CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIuY2VydCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLmNlcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1NmIzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLmNlcnQKQEAgLTAsMCArMSwyMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlENHpDQ0FzdWdBd0lCQWdJSkFJcEJRSHpxK25oYk1BMEdDU3FHU0liM0RRRUJCUVVBTUZReEN6QUpCZ05WCitCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVPTUF3R0ExVUVCeE1GUkdGMmFYTXhFVEFQQmdOVkJBb1RDRTVsCitkQzFUVGsxUU1SVXdFd1lEVlFRREV3eGtkR3h6ZEdWemRIVnpaWEl3SGhjTk1Ea3dOekE1TWpNME1EQTJXaGNOCitNRGt3T0RBNE1qTTBNREEyV2pCVU1Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DUTBFeERqQU1CZ05WCitCQWNUQlVSaGRtbHpNUkV3RHdZRFZRUUtFd2hPWlhRdFUwNU5VREVWTUJNR0ExVUVBeE1NWkhSc2MzUmxjM1IxCitjMlZ5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEwcnc5QmNWWWJ6SjhjamM0CitNMEZYN2g0eXdUNTN4dENXeXBRWExnd054N0dkdVpVMURUemhWcmN5V3BlVDhhdyt6dFc5d21INE5FZU9SU1RLCit2R1pKSlBlM3FKaUZpUEtOU0oxN1F6S1NWRzBRU3RKTVBVRlNDcTduTllJelozYmxsaU1IU0RKZWYzcTZieCtsCis0TlVhRFgwM1VzYWNna2U4Q0NabEE1MUJSZitPT3RxV05Xb0o0UVh1Y3VKL3JFUnFnWVJSMWY3UG9qczM1WkFFCis3YzcxL1dWY3p0bDY4dExINnlWWmhwVkRRS2QrRWUvTXBpcjVqMlg3Rm9ScDNkVW41QVRqcEJ3NldFVHc5dGJVCitnamJjc3JHNHdFNmN6SzBZU1R4TlRHSnpDOXJ2RXEzUyt2YmpQekxCVnhyQVd4WGQ3dEFNa1VTVVdWSmpDTU12CitlN2hvT1FJREFRQUJvNEczTUlHME1CMEdBMVVkRGdRV0JCVEZXVk1rN2ZzR0NVMkdzS1k5bmswYkMyUE4rakNCCitoQVlEVlIwakJIMHdlNEFVeFZsVEpPMzdCZ2xOaHJDbVBaNU5Hd3RqemZxaFdLUldNRlF4Q3pBSkJnTlZCQVlUCitBbFZUTVFzd0NRWURWUVFJRXdKRFFURU9NQXdHQTFVRUJ4TUZSR0YyYVhNeEVUQVBCZ05WQkFvVENFNWxkQzFUCitUazFRTVJVd0V3WURWUVFERXd4a2RHeHpkR1Z6ZEhWelpYS0NDUUNLUVVCODZ2cDRXekFNQmdOVkhSTUVCVEFECitBUUgvTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFDV3hLRkVvaEErVmwrZ2o0eDBuZzVGVU11SHRUYnRMYlNHCisxK3I2Uzk0THZNQmVkbG9ZVDdtUElQZ2NWYk1UNWZxQWVRcGZWSWFDMGk1UGtpVUk5SDJNWHRPMkFkQmE1Sng1CitxMThPZFVqL0xqR0EzQjdqb3NxNUhuSVQvME9UaFlrQWVLTElWRExIeGlxT1lybUZ3cVpPc0s1QloxUk0vNllsCisrL1VadXd1anVIdG53UlczVldza1ZWRlRGNE5HS1o1ZjdsQStOU1lxYkhuLzdPQnFxZ1MyR3huU3pjQ0Q5Qk9xCis5ek5NWm9pVzNqVytFb0lMNjJwUnRFK1MvaUwxQlJCY3Q0eHdOUC9SUXlONGlhRFZnMFNDMTBZU1NYazQrb2YrCitlMmdDTGdDeHMwVnlCekc4ZklvWDhSaXE3Y1Y5OUcxMTlNMUtUNDVqWGNvczFoTzJnWXVCCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5wcml2IGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIucHJpdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjUwN2UzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIucHJpdgpAQCAtMCwwICsxLDI3IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlFcEFJQkFBS0NBUUVBMHJ3OUJjVllieko4Y2pjNE0wRlg3aDR5d1Q1M3h0Q1d5cFFYTGd3Tng3R2R1WlUxCitEVHpoVnJjeVdwZVQ4YXcrenRXOXdtSDRORWVPUlNUS3ZHWkpKUGUzcUppRmlQS05TSjE3UXpLU1ZHMFFTdEpNCitQVUZTQ3E3bk5ZSXpaM2JsbGlNSFNESmVmM3E2YngrbDROVWFEWDAzVXNhY2drZThDQ1psQTUxQlJmK09PdHFXCitOV29KNFFYdWN1Si9yRVJxZ1lSUjFmN1BvanMzNVpBRTdjNzEvV1ZjenRsNjh0TEg2eVZaaHBWRFFLZCtFZS9NCitwaXI1ajJYN0ZvUnAzZFVuNUFUanBCdzZXRVR3OXRiVWdqYmNzckc0d0U2Y3pLMFlTVHhOVEdKekM5cnZFcTNTCisrdmJqUHpMQlZ4ckFXeFhkN3RBTWtVU1VXVkpqQ01NdmU3aG9PUUlEQVFBQkFvSUJBRGNYYU9pU1QrMDZDSmlmCitZUHpkVDB4NzdvN2djdFd5QUVuVGJ6L2xmTkRBMlZnRDdzdVlKOXpRcGNSVExpVVcvNUI1QmxQRDR1eGY3SXljCis4cmRRRWowczJZR2s1ZndJVlBFdjRtS04zUDFmU2N3VnNFS3ZTZkJyQ3h6TS9mMUZjdjNPQ0lCU1Vxd0cvS2hDCitZTTRuUjlsUTY5Nmk5NVdEaFYrb0VlNWc5UWlFTGRBRERsYzFidituYjl0VkJ6VVRtSFFncEdqd3lhSk1JeklWCitxa2ZwQzRSVjhPanQ1RUxiNlhqSlJGeGc5UWkrNGt3Nm1MYkJjL2lueXN2VlFCbXNXTExsQ0twYkh0MDJZZlVCCithdFZPRHpUUjVhVWJjUUtuTm5IbW9qVTA1aXJiQ2VVWHBoZ1FLVjlpdXpzaVdNVjRlZEo2dFc4QjEwQnVTbEg1CitiMEdOdXdFQ2dZRUEvZndLbVEwamdyTGpSYzE2Y0UyR1dNWlJtcUJ1ZlR0R1N3OXRkb2htVU1JUHFOdDQrL1hRCitnS1Ywc2ZGWmdzTExVRzUweHFSUjZtbWt6UzdUVndsNHVScWNyRjdEUktLQWt5RkpQM1FrTFNRbSs0RVpGeE92CitkcEhWTFZwTzFRSis3MVlFNHpLT2RJZldSYW9oNVpsRXBHdzN1emYrVTBvTlRENzlYNWZPQTZFQ2dZRUExR2hXCitpU0ViVSsyWVBueTRxZVhkZjhoY1NuOStVcjZjQnp4TGhZTVVITkk5eXN5QVFuMy8vTUxvUkNvbm9raVVFV0c1CitCTE8yelNtTnF2SFdLUkJ6YUdyNlpqby90R1RXZ09XbnBMUU1xK1hZbUR4V3hER0NUTEgyZWRxQytWSUlxQm5CCitRbUxZQnZkZTlFbjFVSS9jM0NzcGIxOE5oOTJJK1ZHWk5QelBIWmtDZ1lBUFU4MkQ3UUlPbWlNVERGSnVRbzl2CisvZy9ncC92aS9OZkNJZDAyUVFjRHFxSnRTMGxpMHpQUS82c3FMZWw3OWF0MVlDVVY4OGFwd2RSYk9ZOHhlblhaCituZHlFbm5ka1JmWkNhc2pUMW50MGFmRWNUbThvTUZ6dlo5K1lqQkdqMHpHNzJkSVRyL0plMysrelpwQURIaHZCCitYSEtFanQxL1EwSElMeWoxUXVFQTRRS0JnUUNVYmZrU3lKelZNSEkwTUduRzZBZTU5T1J4ZHRocXNDSk9lQmI2CitUSmZ3Y0FhWVFnSGE5VHUrZ09GWVNQRDdXYWFHNHZnc3pmMFBMMXQ5T3BRQ2pDbHByV0Fmc2RLMGw4YkJ1anBGCitRVUNkbXZlWm9vaXJmMEZqb1BUeFAvNUloY2ZnMkdhUm9vcjlpejNDampBc1JPdjh1dml3aUFibmk2cmROdVZOCisvdUFvK1FLQmdRQ2ZRZjFSQmovaU1tT1pkaTRTaWZCT0Rtc2VKRVllQU1sZkVRQkhQRm1UaE5MaWZseitWTjE3Cit1cUhTNUlnaFBLMHNYYjdwT1FtQzJoQ3hUMnNXeWJKeCtxS3NvT1lITFF5ckc1a2c3Q2dWamx0bTZIend5aXp0CitLdXc2VDRjVWoxcVJRRzhhQVRMK3NHdVQ2OUZIVFNFM3ZhNXRsZjlvWUdzTTZySW9BNDNnM3c9PQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDRmN2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qIEhFQURFUiBUZXN0aW5nIHRoZSBkZWZhdWx0X3N0b3JlIEFQSSAqLworaW50IGksIGo7CitjaGFyIGJ1ZlsxMDI0XTsKKworLyogZmlyc3Qgd2UgbG9hZCBldmVyeXRoaW5nIHVwICovCisKK2ZvcihpID0gMDsgaSA8IE5FVFNOTVBfRFNfTUFYX0lEUzsgaSsrKSB7CisgICAgLyogYm9vbGVhbnMgKi8KKyAgICBmb3IoaiA9IDA7IGogPCBORVRTTk1QX0RTX01BWF9TVUJJRFM7IGorKykgeworICAgICAgICBPS0YoU05NUEVSUl9TVUNDRVNTID09IG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oaSwgaiwgKGkqaiklMiksCisgICAgICAgICAgICAoImRlZmF1bHQgc3RvcmUgYm9vbGVhbjogc2V0dGluZyAlZC8lZCByZXR1cm5lZCBmYWlsdXJlIiwgaSwgaikpOworICAgICAgICBPS0YoU05NUEVSUl9TVUNDRVNTID09IG5ldHNubXBfZHNfc2V0X2ludChpLCBqLCBpKmopLAorICAgICAgICAgICAgKCJkZWZhdWx0IHN0b3JlIGludDogc2V0dGluZyAlZC8lZCByZXR1cm5lZCBmYWlsdXJlIiwgaSwgaikpOworICAgICAgICBzcHJpbnRmKGJ1ZiwiJWQvJWQiLCBpLCBqKTsKKyAgICAgICAgT0tGKFNOTVBFUlJfU1VDQ0VTUyA9PSBuZXRzbm1wX2RzX3NldF9zdHJpbmcoaSwgaiwgYnVmKSwKKyAgICAgICAgICAgICgiZGVmYXVsdCBzdG9yZSBzdHJpbmc6IHNldHRpbmcgJWQvJWQgcmV0dXJuZWQgZmFpbHVyZSIsIGksIGopKTsKKyAgICB9Cit9CisgICAgCisvKiB0aGVuIHdlIGNoZWNrIGFsbCB0aGUgdmFsdWVzICovCisKK2ZvcihpID0gMDsgaSA8IE5FVFNOTVBfRFNfTUFYX0lEUzsgaSsrKSB7CisgICAgLyogYm9vbGVhbnMgKi8KKyAgICBmb3IoaiA9IDA7IGogPCBORVRTTk1QX0RTX01BWF9TVUJJRFM7IGorKykgeworICAgICAgICBPS0YobmV0c25tcF9kc19nZXRfYm9vbGVhbihpLCBqKSA9PSAoaSpqKSUyLAorICAgICAgICAgICAgKCJkZWZhdWx0IHN0b3JlIGJvb2xlYW4gJWQvJWQgd2FzIHRoZSBleHBlY3RlZCB2YWx1ZSIsIGksIGopKTsKKyAgICAgICAgT0tGKG5ldHNubXBfZHNfZ2V0X2ludChpLCBqKSA9PSAoaSpqKSwKKyAgICAgICAgICAgICgiZGVmYXVsdCBzdG9yZSBpbnQgJWQvJWQgd2FzIHRoZSBleHBlY3RlZCB2YWx1ZSIsIGksIGopKTsKKyAgICAgICAgc3ByaW50ZihidWYsIiVkLyVkIiwgaSwgaik7CisgICAgICAgIE9LRihzdHJjbXAobmV0c25tcF9kc19nZXRfc3RyaW5nKGksIGopLCBidWYpID09IDAsCisgICAgICAgICAgICAoImRlZmF1bHQgc3RvcmUgc3RyaW5nICVkLyVkIHdhcyB0aGUgZXhwZWN0ZWQgdmFsdWUiLCBpLCBqKSk7CisgICAgfQorfQorCituZXRzbm1wX2RzX3NodXRkb3duKCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjJlOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYwpAQCAtMCwwICsxLDM1IEBACisvKiBIRUFERVIgVGVzdGluZyB0aGUgY29udGFpbmVyIEFQSSAqLworCituZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOwordm9pZCAqcDsKKworaW5pdF9zbm1wKCJjb250YWluZXItdGVzdCIpOworY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZmlmbyIpOworY29udGFpbmVyLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKSBzdHJjbXA7CisKK0NPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCAiZm9vIik7CitDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgImJhciIpOworQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsICJiYXoiKTsKKworT0soQ09OVEFJTkVSX0ZJTkQoY29udGFpbmVyLCAiYmFyIikgIT0gTlVMTCwKKyAgICJzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSBzdG9yZWQgJ2Jhcicgc3RyaW5nIik7CisKK09LKENPTlRBSU5FUl9GSU5EKGNvbnRhaW5lciwgImZvb2JhciIpID09IE5VTEwsCisgICAic2hvdWxkbid0IGJlIGFibGUgdG8gZmluZCB0aGUgKG5vdCkgc3RvcmVkICdmb29iYXInIHN0cmluZyIpOworCitPSyhDT05UQUlORVJfU0laRShjb250YWluZXIpID09IDMsCisgICAiY29udGFpbmVyIGhhcyB0aGUgcHJvcGVyIHNpemUgZm9yIHRoZSBlbGVtZW50cyB3ZSd2ZSBhZGRlZCIpOworCitDT05UQUlORVJfUkVNT1ZFKGNvbnRhaW5lciwgImJhciIpOworCitPSyhDT05UQUlORVJfRklORChjb250YWluZXIsICJiYXIiKSA9PSBOVUxMLAorICAgInNob3VsZCBubyBsb25nZXIgYmUgYWJsZSB0byBmaW5kIHRoZSAocmVvdmVkKSAnYmFyJyBzdHJpbmciKTsKKworT0soQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSA9PSAyLAorICAgImNvbnRhaW5lciBoYXMgdGhlIHByb3BlciBzaXplIGZvciB0aGUgZWxlbWVudHMgYWZ0ZXIgYSByZW1vdmFsIik7CisKK3doaWxlICgocCA9IENPTlRBSU5FUl9GSVJTVChjb250YWluZXIpKSkKKyAgQ09OVEFJTkVSX1JFTU9WRShjb250YWluZXIsIHApOworQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKKworc25tcF9zaHV0ZG93bigiY29udGFpbmVyLXRlc3QiKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwM2NvcHlfbndvcmRfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAzY29weV9ud29yZF9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2N2VkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwM2NvcHlfbndvcmRfY2xpYi5jCkBAIC0wLDAgKzEsMTQyIEBACisvKiBIRUFERVIgVGVzdGluZyBjb3B5X253b3JkICovCisKKyNkZWZpbmUgQVNTRVJUMShjb25kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICsrX190ZXN0X2NvdW50ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGNvbmQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIm9rICVkXG4iLCBfX3Rlc3RfY291bnRlcik7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50Zigibm90IG9rICVkIC0gJWQ6ICVzIGZhaWxlZFxuIiwgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgX190ZXN0X2NvdW50ZXIsIF9fTElORV9fLCAjY29uZCk7ICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlQyKGNvbmQsIG9uX2Vycm9yKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKytfX3Rlc3RfY291bnRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoY29uZCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50Zigib2sgJWRcbiIsIF9fdGVzdF9jb3VudGVyKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcHJpbnRmKCJub3Qgb2sgJWQgLSAlZDogJXMgZmFpbGVkLCAiLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBfX3Rlc3RfY291bnRlciwgX19MSU5FX18sICNjb25kKTsgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYgb25fZXJyb3IgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworeworICAvKiBBIHF1b3RlZCBzdHJpbmcgKi8KKyAgY2hhciBpbnB1dFtdID0gIlwiVGhlIHJlZCByb3NlXCIiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpXSA9ICIiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiVGhlIHJlZCByb3NlIikgPT0gMCwKKyAgICAgICAgICAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQxKHJ1biA9PSBOVUxMKTsKK30KKworeworICAvKiBFc2NhcGVkIHF1b3RlcyAqLworICBjaGFyIGlucHV0W10gPSAiXFxcIlRoZSByZWQgcm9zZVxcXCIiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpXSA9ICIiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiXCJUaGUiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQyKHJ1biA9PSBpbnB1dCArIDYsCisgICAgICAgICAgKCJydW4gPSBpbnB1dCArICUiIE5FVFNOTVBfUFJJeiAiZFxuIiwgcnVuIC0gaW5wdXQpKTsKKyAgcnVuID0gY29weV9ud29yZChydW4sIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJyZWQiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQyKHJ1biA9PSBpbnB1dCArIDEwLAorICAgICAgICAgICgicnVuID0gaW5wdXQgKyAlIiBORVRTTk1QX1BSSXogImRcbiIsIHJ1biAtIGlucHV0KSk7CisgIHJ1biA9IGNvcHlfbndvcmQocnVuLCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAicm9zZVwiIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMShydW4gPT0gTlVMTCk7Cit9CisKK3sKKyAgLyogVW50ZXJtaW5hdGVkICItcXVvdGUgKi8KKyAgY2hhciBpbnB1dFtdID0gIlwiVGhlIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSAiIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIlRoZSIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDEocnVuID09IE5VTEwpOworfQorCit7CisgIC8qIFVudGVybWluYXRlZCAnLXF1b3RlICovCisgIGNoYXIgaW5wdXRbXSA9ICJcJ1RoZSI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCldID0gIiI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJUaGUiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQxKHJ1biA9PSBOVUxMKTsKK30KKworeworICAvKiBFeHRyYWN0IGZyb20gTlVMTCAqLworICBjaGFyIG91dHB1dFsxMF0gPSAiIjsKKyAgY2hhciogcnVuID0gTlVMTDsKKyAgcnVuID0gY29weV9ud29yZChydW4sIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQxKHJ1biA9PSBOVUxMKTsKK30KKworeworICAvKiBFeHRyYWN0IHRvIE5VTEwgKi8KKyAgY2hhciBpbnB1dFtdID0gIlRoZSByZWQgcm9zZSI7CisgIGNoYXIqIG91dHB1dCA9IE5VTEw7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQxKHJ1biA9PSBOVUxMKTsKK30KKworeworICAvKiBMb25nIHRva2VuICovCisgIGNoYXIgaW5wdXRbXSA9ICJcIlZlcnkgbG9uZyB0b2tlbiB0aGF0IG92ZXJmbG93cyB0aGUgYnVmZmVyXCIgZm9vIjsKKyAgY2hhciBvdXRwdXRbMTBdID0gIiI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJWZXJ5IGxvbmciKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQyKHJ1biA9PSBpbnB1dCArIDQ0LAorICAgICAgICAgICgicnVuID0gaW5wdXQgKyAlIiBORVRTTk1QX1BSSXogImRcbiIsIHJ1biAtIGlucHV0KSk7Cit9CisKK3sKKyAgLyogUXVvdGVkIGVuZCBvZiBzdHJpbmcgLyBlbWJlZGRlZCBcMCAqLworICBjaGFyIGlucHV0W10gPSAiVGhlXFxcMHJlZCByb3NlIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSAiIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIlRoZVxcIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMShydW4gPT0gTlVMTCk7Cit9CisKK3sKKyAgLyogRW1wdHkgc3RyaW5nICovCisgIGNoYXIgaW5wdXRbXSA9ICIiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpICsgMV0gPSAiWCI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICIiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQyKHJ1biA9PSBOVUxMLCAoInJ1biA9ID4lczxcbiIsIHJ1bikpOworfQorCit7CisgIC8qIFdoaXRlc3BhY2Ugc3RyaW5nICovCisgIGNoYXIgaW5wdXRbXSA9ICIgICAgXHQgICAiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpXSA9ICJYIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIiIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDIocnVuID09IE5VTEwsICgicnVuID0gPiVzPFxuIiwgcnVuKSk7Cit9CisKK3sKKyAgLyogUXVvdGUsIG5vIHdoaXRlc3BhY2UgYWZ0ZXIgKi8KKyAgY2hhciBpbnB1dFtdID0gIlwiVGhlXCJyZWQgcm9zZSI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCldID0gIiI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJUaGUiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQyKHJ1biA9PSBpbnB1dCArIDUsCisgICAgICAgICAgKCJydW4gPSBpbnB1dCArICUiIE5FVFNOTVBfUFJJeiAiZFxuIiwgcnVuIC0gaW5wdXQpKTsKK30KKworeworICAvKiBRdW90ZSwgbm8gd2hpdGVzcGFjZSBiZWZvcmUgKi8KKyAgY2hhciBpbnB1dFtdID0gIlRoZVwicmVkXCIgcm9zZSI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCldID0gIiI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJUaGVcInJlZFwiIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMihydW4gPT0gaW5wdXQgKyA5LAorICAgICAgICAgICgicnVuID0gaW5wdXQgKyAlIiBORVRTTk1QX1BSSXogImRcbiIsIHJ1biAtIGlucHV0KSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjhiMTliCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYwpAQCAtMCwwICsxLDEwNSBAQAorLyogSEVBREVSIFRlc3Rpbmcgc25tcF9lbnVtICovCisKKyNkZWZpbmUgQ09ORklHX1RZUEUgInNubXAtZW51bS11bml0LXRlc3QiCisjZGVmaW5lIFNUUklORzEgImxpZmUsIGFuZCBldmVyeXRoaW5nIgorI2RlZmluZSBTVFJJTkcyICJyZXN0YXVyYW50IGF0IHRoZSBlbmQgb2YgdGhlIHVuaXZlcnNlIgorI2RlZmluZSBTVFJJTkczICJsYWJlbDMiCisjZGVmaW5lIExPTkdfU1RSSU5HICJhLXN0cmluZy1vZi0yNTUtY2hhcmFjdGVycy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisKKyNkZWZpbmUgU1RPUkVfQU5EX0NPTVBBUkUobWFqLCBtaW4sIHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRklMRSAqZnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IHJlYWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY2hhciAqcCwgY29udGVudHNbNDA5Nl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2Vfc3RvcmVfbGlzdChtYWosIG1pbiwgQ09ORklHX1RZUEUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZnAgPSBmb3Blbih0bXBfcGVyc2lzdF9maWxlLCAiciIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGZwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJlYWQgPSBmcmVhZChjb250ZW50cywgMSwgc2l6ZW9mKGNvbnRlbnRzKSAtIDEsIGZwKTsgICAgICAgIFwKKyAgICAgICAgICAgIGZjbG9zZShmcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY29udGVudHNbcmVhZCA+IDAgPyByZWFkIDogMF0gPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yIChwID0gY29udGVudHM7ICpwOyArK3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAqcCA9ICd8JzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT0tGKHN0cmNtcChjb250ZW50cywgKHMpKSA9PSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICgic3RvcmVkIGxpc3QgJXMgPD4gJXMiLCAocyksIGNvbnRlbnRzKSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVtb3ZlKHRtcF9wZXJzaXN0X2ZpbGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKK2NoYXIgdG1wX3BlcnNpc3RfZmlsZVsyNTZdOworY2hhciAqc2VfZmluZF9yZXN1bHQ7CisKK3NwcmludGYodG1wX3BlcnNpc3RfZmlsZSwgIi90bXAvc25tcC1lbnVtLXVuaXQtdGVzdC0lZCIsIGdldHBpZCgpKTsKK25ldHNubXBfc2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRklMRSIsIHRtcF9wZXJzaXN0X2ZpbGUsIDEpOworCitpbml0X3NubXBfZW51bSgic25tcCIpOworCitTVE9SRV9BTkRfQ09NUEFSRSgxLCAxLCAiZW51bSAxOjF8Iik7CisKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cCgiaGkiKSwgMSk7CisKK1NUT1JFX0FORF9DT01QQVJFKDEsIDEsICJlbnVtIDE6MSAxOmhpfCIpOworCitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoInRoZXJlIiksIDIpOworCitTVE9SRV9BTkRfQ09NUEFSRSgxLCAxLCAiZW51bSAxOjEgMTpoaSAyOnRoZXJlfCIpOworCitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoTE9OR19TVFJJTkcpLCAzKTsKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cChMT05HX1NUUklORyksIDQpOworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKExPTkdfU1RSSU5HKSwgNSk7CitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoTE9OR19TVFJJTkcpLCA2KTsKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cChMT05HX1NUUklORyksIDcpOworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKExPTkdfU1RSSU5HKSwgOCk7CitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoTE9OR19TVFJJTkcpLCA5KTsKKworU1RPUkVfQU5EX0NPTVBBUkUoMSwgMSwgImVudW0gMToxIDE6aGkgMjp0aGVyZSAzOiIgTE9OR19TVFJJTkcgIiA0OiIgTE9OR19TVFJJTkcKKyAgICAgICAgICAgICAgICAgIiA1OiIgTE9OR19TVFJJTkcgIiA2OiIgTE9OR19TVFJJTkcgIiA3OiIgTE9OR19TVFJJTkcKKyAgICAgICAgICAgICAgICAgIiA4OiIgTE9OR19TVFJJTkcgIiA5OiIgTE9OR19TVFJJTkcgInwiKTsKKworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKExPTkdfU1RSSU5HKSwgMTApOworCitTVE9SRV9BTkRfQ09NUEFSRSgxLCAxLCAiZW51bSAxOjEgMTpoaSAyOnRoZXJlIDM6IiBMT05HX1NUUklORyAiIDQ6IiBMT05HX1NUUklORworICAgICAgICAgICAgICAgICAiIDU6IiBMT05HX1NUUklORyAiIDY6IiBMT05HX1NUUklORyAiIDc6IiBMT05HX1NUUklORworICAgICAgICAgICAgICAgICAiIDg6IiBMT05HX1NUUklORyAiIDk6IiBMT05HX1NUUklORyAifCIKKyAgICAgICAgICAgICAgICAgImVudW0gMToxIDEwOiIgTE9OR19TVFJJTkcgInwiKTsKKworT0soc2VfZmluZF92YWx1ZSgxLCAxLCAiaGkiKSA9PSAxLAorICAgImxvb2t1cCBieSBudW1iZXIgIzEgc2hvdWxkIGJlIHRoZSBwcm9wZXIgc3RyaW5nIik7CitPSyhzdHJjbXAoc2VfZmluZF9sYWJlbCgxLCAxLCAyKSwgInRoZXJlIikgPT0gMCwKKyAgICJsb29rdXAgYnkgc3RyaW5nICMxIHNob3VsZCBiZSB0aGUgcHJvcGVyIG51bWJlciIpOworCisKK3NlX2FkZF9wYWlyX3RvX3NsaXN0KCJ0ZXN0aW5nIiwgc3RyZHVwKFNUUklORzEpLCA0Mik7CitzZV9hZGRfcGFpcl90b19zbGlzdCgidGVzdGluZyIsIHN0cmR1cChTVFJJTkcyKSwgMik7CitzZV9hZGRfcGFpcl90b19zbGlzdCgidGVzdGluZyIsIHN0cmR1cChTVFJJTkczKSwgMik7CisgICAgCitPSyhzZV9maW5kX3ZhbHVlX2luX3NsaXN0KCJ0ZXN0aW5nIiwgU1RSSU5HMSkgPT0gNDIsCisgICAibG9va3VwIGJ5IG51bWJlciBzaG91bGQgYmUgdGhlIHByb3BlciBzdHJpbmciKTsKK09LKHN0cmNtcChzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJ0ZXN0aW5nIiwgMiksIFNUUklORzIpID09IDAsCisgICAibG9va3VwIGJ5IHN0cmluZyBzaG91bGQgYmUgdGhlIHByb3BlciBudW1iZXIiKTsKKworc2VfY2xlYXJfc2xpc3QoInRlc3RpbmciKTsKKworCitzZV9yZWFkX2NvbmYoImVudW0iLAorICAgICAgICAgICAgIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgIjI6MyAxOmFwcGxlIDI6cGVhciAzOmtpd2lmcnVpdCIpKTsKK09LKHNlX2ZpbmRfbGlzdCgyLCAzKSwgImxpc3QgKDIsIDMpIHNob3VsZCBiZSBwcmVzZW50Iik7CitpZiAoc2VfZmluZF9saXN0KDIsIDMpKSB7CisgIE9LKHNlX2ZpbmRfdmFsdWUoMiwgMywgImtpd2lmcnVpdCIpID09IDMsCisgICAgICJsb29rdXAgYnkgc3RyaW5nIHNob3VsZCByZXR1cm4gdGhlIHByb3BlciB2YWx1ZSIpOworICBzZV9maW5kX3Jlc3VsdCA9IHNlX2ZpbmRfbGFiZWwoMiwgMywgMik7CisgIE9LKHNlX2ZpbmRfcmVzdWx0ICYmIHN0cmNtcChzZV9maW5kX3Jlc3VsdCwgInBlYXIiKSA9PSAwLAorICAgICAibG9va3VwIGJ5IGxhYmVsIHNob3VsZCByZXR1cm4gdGhlIHByb3BlciBzdHJpbmciKTsKK30KKworc2VfcmVhZF9jb25mKCJlbnVtIiwKKyAgICAgICAgICAgICBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosICJmcnVpdCAxOmFwcGxlIDI6cGVhciAzOmtpd2lmcnVpdCIpKTsKK09LKHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoImZydWl0IiwgImtpd2lmcnVpdCIpID09IDMsCisgICAibG9va3VwIGJ5IHN0cmluZyBzaG91bGQgcmV0dXJuIHRoZSBwcm9wZXIgdmFsdWUiKTsKK3NlX2ZpbmRfcmVzdWx0ID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiZnJ1aXQiLCAyKTsKK09LKHNlX2ZpbmRfcmVzdWx0ICYmIHN0cmNtcChzZV9maW5kX3Jlc3VsdCwgInBlYXIiKSA9PSAwLAorICAgImxvb2t1cCBieSB2YWx1ZSBzaG91bGQgcmV0dXJuIHRoZSBwcm9wZXIgc3RyaW5nIik7CisKK2NsZWFyX3NubXBfZW51bSgpOwordW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDV0YWJsZV9kYXRhc2V0X2NhZ2VudGxpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA1dGFibGVfZGF0YXNldF9jYWdlbnRsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU2NDFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA1dGFibGVfZGF0YXNldF9jYWdlbnRsaWIuYwpAQCAtMCwwICsxLDYyIEBACisvKiBIRUFERVIgVGVzdGluZyB0YWJsZV9kYXRhc2V0ICovCisKKy8qCisgKiBOb3RlOiB0aGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgdW5pdCB0ZXN0IGlzIHRvIHZlcmlmeSB3aGV0aGVyIGFsbCBtZW1vcnkKKyAqIHRoYXQgaXMgYWxsb2NhdGVkIGZvciBzdG9yaW5nIGEgdGFibGUgZGF0YXNldCBpcyBmcmVlZCBwcm9wZXJseS4gRmVlbCBmcmVlCisgKiB0byBleHRlbmQgdGhpcyB1bml0IHRlc3Qgc3VjaCB0aGF0IGl0IHRlc3RzIG1vcmUgb2YgdGhlIHRhYmxlIGRhdGFzZXQgY29kZS4KKyAqLworCitlbnVtIHsgQ09MMyA9IDIsIENPTDQgPSAzLCBDT0w1ID0gNCwgfTsKKworc3RhdGljIGNvbnN0IG9pZCBPaWRbXSA9IHsgMSwgMywgNiwgMSwgMywgMjc3IH07CituZXRzbm1wX3RhYmxlX2RhdGFfc2V0KiB0ZHM7CituZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKiB0aDsKK25ldHNubXBfdGFibGVfcm93KiByb3c7CitpbnQzMl90IGl2YWw7CitpbnQzMl90IGksIGo7CisKK1NPQ0tfU1RBUlRVUDsKKworaW5pdF9hZ2VudCgic25tcGQiKTsKK2luaXRfc25tcCgic25tcGQiKTsKKwordGRzID0gbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YV9zZXQoInRhYmxlX2RhdGFzZXQgdW5pdC10ZXN0Iik7CitPSyh0ZHMsICJ0YWJsZSBkYXRhIHNldCBjcmVhdGlvbiIpOworCituZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX2luZGV4KHRkcywgQVNOX0lOVEVHRVIpOworbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9pbmRleCh0ZHMsIEFTTl9JTlRFR0VSKTsKK25ldHNubXBfdGFibGVfc2V0X2FkZF9kZWZhdWx0X3Jvdyh0ZHMsIENPTDMsIEFTTl9JTlRFR0VSLCAgIEZBTFNFLCBOVUxMLCAwKTsKK25ldHNubXBfdGFibGVfc2V0X2FkZF9kZWZhdWx0X3Jvdyh0ZHMsIENPTDQsIEFTTl9DT1VOVEVSLCAgIEZBTFNFLCBOVUxMLCAwKTsKK25ldHNubXBfdGFibGVfc2V0X2FkZF9kZWZhdWx0X3Jvdyh0ZHMsIENPTDUsIEFTTl9PQ1RFVF9TVFIsIEZBTFNFLCBOVUxMLCAwKTsKKwordGggPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigidW5pdC10ZXN0IGhhbmRsZXIiLCBOVUxMLCBPaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoT2lkKSwgSEFORExFUl9DQU5fUldSSVRFKTsKK09LKHRoLCAidGFibGUgaGFuZGxlciByZWdpc3RyYXRpb24iKTsKKworT0sobmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhX3NldCh0aCwgdGRzLCBOVUxMKSA9PSBTTk1QRVJSX1NVQ0NFU1MsCisgICAidGFibGUgZGF0YSBzZXQgcmVnaXN0cmF0aW9uIik7CisKK2ZvciAoaSA9IDE7IGkgPD0gMjsgaSsrKSB7CisgICAgZm9yIChqID0gMTsgaiA8PSAyOyBqKyspIHsKKyAgICAgICAgcm93ID0gbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YV9yb3coKTsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yb3dfYWRkX2luZGV4KHJvdywgQVNOX0lOVEVHRVIsICZpLCBzaXplb2YoaSkpOworICAgICAgICBuZXRzbm1wX3RhYmxlX3Jvd19hZGRfaW5kZXgocm93LCBBU05fSU5URUdFUiwgJmosIHNpemVvZihqKSk7CisgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfcm93KHRkcywgcm93KTsKKworICAgICAgICBpdmFsID0gMTAgKiBpICsgajsKKyAgICAgICAgT0sobmV0c25tcF9zZXRfcm93X2NvbHVtbihyb3csIENPTDMsIEFTTl9JTlRFR0VSLCAmaXZhbCwgc2l6ZW9mKGl2YWwpKQorICAgICAgICAgICA9PSBTTk1QRVJSX1NVQ0NFU1MsICJzZXQgSU5URUdFUiBjb2x1bW4iKTsKKyAgICAgICAgT0sobmV0c25tcF9zZXRfcm93X2NvbHVtbihyb3csIENPTDUsIEFTTl9PQ1RFVF9TVFIsICJ0ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoInRlc3QiKSAtIDEpCisgICAgICAgICAgID09IFNOTVBFUlJfU1VDQ0VTUywgInNldCBPQ1RFVF9TVFIgY29sdW1uIik7CisgICAgfQorfQorCituZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCh0ZHMpOworCitzbm1wX3NodXRkb3duKCJzbm1wZCIpOworc2h1dGRvd25fYWdlbnQoKTsKKworU09DS19DTEVBTlVQOworCitPSyhUUlVFLCAiZG9uZSIpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2FnZW50bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3YWU2OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2FnZW50bGliLmMKQEAgLTAsMCArMSw0NiBAQAorLyogSEVBREVSIFRlc3RpbmcgU05NUCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiAqLworCitzdGF0aWMgb2lkIE9pZFtdID0geyAxLCAzLCA2LCAxLCAzLCAzMjcgfTsgLyogZXhwZXJpbWVudGFsLjMyNyAqLworbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqaGFuZGxlciwgKmhhbmRsZXIyOworbmV0c25tcF9taWJfaGFuZGxlciAqZGg7CituZXRzbm1wX2NhY2hlICpuYywgKm5jMjsKKworaW5pdF9zbm1wKCJzbm1wIik7CisKK2hhbmRsZXIgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiZXhwZXJpbWVudGFsLjMyNyIsIE5VTEwsCisJT2lkLCBPSURfTEVOR1RIKE9pZCksIEhBTkRMRVJfQ0FOX1JXUklURSk7CitPSyhoYW5kbGVyICE9IE5VTEwsICJIYW5kbGVyIGNyZWF0aW9uLiIpOworCituYyA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKDEwLCBOVUxMLCBOVUxMLCBPaWQsIE9JRF9MRU5HVEgoT2lkKSk7CitPSyhuYywgIm5ldHNubXBfY2FjaGUgYWxsb2NhdGlvbiIpOworT0soc25tcF9vaWRfY29tcGFyZShuYy0+cm9vdG9pZCwgbmMtPnJvb3RvaWRfbGVuLCBPaWQsIE9JRF9MRU5HVEgoT2lkKSkgPT0gMCwKKyAgICJIYW5kbGVyIHByaXZhdGUgT0lELiIpOworCitoYW5kbGVyLT5oYW5kbGVyLT5teXZvaWQgPSBuYzsKK25ldHNubXBfY2FjaGVfaGFuZGxlcl9vd25zX2NhY2hlKGhhbmRsZXItPmhhbmRsZXIpOworCituYzIgPSBoYW5kbGVyLT5oYW5kbGVyLT5teXZvaWQ7CitPSyhuYzIsICJIYW5kbGVyIHByaXZhdGUgZGF0YSIpOworT0soc25tcF9vaWRfY29tcGFyZShuYzItPnJvb3RvaWQsIG5jMi0+cm9vdG9pZF9sZW4sIE9pZCwgT0lEX0xFTkdUSChPaWQpKSA9PSAwLAorICAgIkhhbmRsZXIgcHJpdmF0ZSBPSUQuIik7CisKK09LKG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UoaGFuZGxlcikgPT0gTUlCX1JFR0lTVEVSRURfT0ssCisgICAiTUlCIHJlZ2lzdHJhdGlvbi4iKTsKKworaGFuZGxlcjIgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiZXhwZXJpbWVudGFsLjMyNyIsIE5VTEwsCisgICAgICAgIE9pZCwgT0lEX0xFTkdUSChPaWQpLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworT0soaGFuZGxlcjIgIT0gTlVMTCwgIlNlY29uZCByZWdpc3RyYXRpb24iKTsKKworT0sobmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShoYW5kbGVyMikgPT0gTUlCX0RVUExJQ0FURV9SRUdJU1RSQVRJT04sCisgICAiRHVwbGljYXRlIE1JQiByZWdpc3RyYXRpb24uIik7CisKK2RoID0gbmV0c25tcF9oYW5kbGVyX2R1cChoYW5kbGVyLT5oYW5kbGVyKTsKK09LKGRoLCAiSGFuZGxlciBkdXBsaWNhdGlvbi4iKTsKKworT0sobmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoaGFuZGxlcikgPT0gU05NUEVSUl9TVUNDRVNTLAorICAgIkhhbmRsZXIgdW5yZWdpc3RyYXRpb24uIik7CisKK25ldHNubXBfaGFuZGxlcl9mcmVlKGRoKTsKK09LKFRSVUUsICJGcmVlaW5nIGR1cGxpY2F0ZSBoYW5kbGVyIik7CisKK3NubXBfc2h1dGRvd24oInNubXAiKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwN2luZXRfcHRvbl9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDdpbmV0X3B0b25fY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjAwZmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDdpbmV0X3B0b25fY2xpYi5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qIEhFQURFUiBUZXN0aW5nIGluZXRfcHRvbigpIGFuZCBpbmV0X250b3AoKSAqLworCitpbnQgaTsKK2NoYXIgc3RyWzEyOF07CitzdHJ1Y3QgaW5fYWRkciBpbl9hZGRyOworc3RydWN0IGluNl9hZGRyIGluNl9hZGRyOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgY29uc3QgY2hhciogczsgdW5zaWduZWQgY2hhciBiWzRdOyB9IGluX3Rlc3RkYXRhW10gPSB7CisgICAgeyAiMC4wLjAuMCIsICAgICAgICAgeyAgIDAsICAgMCwgICAwLCAgIDAgfSB9LAorICAgIHsgIjEuMi4zLjQiLCAgICAgICAgIHsgICAxLCAgIDIsICAgMywgICA0IH0gfSwKKyAgICB7ICIyNTUuMjU1LjI1NS4yNTUiLCB7IDI1NSwgMjU1LCAyNTUsIDI1NSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgY29uc3QgY2hhciogczsgdW5zaWduZWQgY2hhciBiWzE2XTsgfSBpbjZfdGVzdGRhdGFbXSA9IHsKKyAgICB7ICI6OiIsICAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sIH0sCisgICAgeyAiOjoxIiwgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSB9LCB9LAorICAgIHsgIjE6OiIsICB7IDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgfSwKKyAgICB7ICIxOjoxIiwgeyAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIH0sIH0sCit9OworCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGluX3Rlc3RkYXRhKS9zaXplb2YoaW5fdGVzdGRhdGFbMF0pOyArK2kpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBiID0gaW5fdGVzdGRhdGFbaV0uYjsKKworICAgIE9LRihpbmV0X3B0b24oQUZfSU5FVCwgaW5fdGVzdGRhdGFbaV0ucywgJmluX2FkZHIpID09IDEsCisJKCJJUHY0IGluZXRfcHRvbiglcykiLCBpbl90ZXN0ZGF0YVtpXS5zKSk7CisgICAgT0sobnRvaGwoaW5fYWRkci5zX2FkZHIpCisgICAgICAgPT0gKChiWzBdIDw8IDI0KSB8IChiWzFdIDw8IDE2KSB8IChiWzJdIDw8IDgpIHwgYlszXSksCisgICAgICAgImluZXRfcHRvbigpIHZhbHVlIik7CisgICAgT0soaW5ldF9udG9wKEFGX0lORVQsICZpbl9hZGRyLCBzdHIsIHNpemVvZihzdHIpKSA9PSBzdHIsCisgICAgICAgIklQdjQgaW5ldF9udG9wKCkiKTsKKyAgICBPS0Yoc3RyY21wKGluX3Rlc3RkYXRhW2ldLnMsIHN0cikgPT0gMCwKKwkoIiVzID0/PSAlcyIsIGluX3Rlc3RkYXRhW2ldLnMsIHN0cikpOworfQorCisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW42X3Rlc3RkYXRhKS9zaXplb2YoaW42X3Rlc3RkYXRhWzBdKTsgKytpKSB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgYiA9IGluNl90ZXN0ZGF0YVtpXS5iOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IHIgPSAodm9pZCAqKSZpbjZfYWRkcjsKKyAgICBpbnQgcmVzdWx0LCBqOworCisgICAgcmVzdWx0ID0gaW5ldF9wdG9uKEFGX0lORVQ2LCBpbjZfdGVzdGRhdGFbaV0ucywgJmluNl9hZGRyKTsKKyAgICBPS0YocmVzdWx0ID09IDEsCisJKCJJUHY2IGluZXRfcHRvbiglcykgLT4gJWQ7ICIKKwkgIiAlMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeCIKKwkgIjolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeCIsCisJIGluNl90ZXN0ZGF0YVtpXS5zLCByZXN1bHQsCisJIHJbMF0sIHJbMV0sIHJbIDJdLCByWyAzXSwgclsgNF0sIHJbIDVdLCByWyA2XSwgclsgN10sCisJIHJbOF0sIHJbOV0sIHJbMTBdLCByWzExXSwgclsxMl0sIHJbMTNdLCByWzE0XSwgclsxNV0KKwkgKSk7CisgICAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opCisJcHJpbnRmKCIlMDJ4ICIsIGJbal0pOworICAgIHByaW50ZigiXG4iKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikKKwlPS0YocltqXSA9PSBiW2pdLAorCSAgICAoIklQdjYgaW5ldF9wdG9uKCkgdmFsdWUgKCUjMDJ4ID0/PSAlIzAyeCkiLCByW2pdLCBiW2pdKSk7CisgICAgT0soaW5ldF9udG9wKEFGX0lORVQ2LCAmaW42X2FkZHIsIHN0ciwgc2l6ZW9mKHN0cikpID09IHN0ciwKKyAgICAgICAiSVB2NiBpbmV0X250b3AoKSIpOworICAgIE9LRihzdHJjbXAoaW42X3Rlc3RkYXRhW2ldLnMsIHN0cikgPT0gMCwKKwkoIiVzID0/PSAlcyIsIGluNl90ZXN0ZGF0YVtpXS5zLCBzdHIpKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOGFzbjFfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA4YXNuMV9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0NzE0YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOGFzbjFfY2xpYi5jCkBAIC0wLDAgKzEsMzMwIEBACisvKiBIRUFERVIgVGVzdGluZyBBU04uMSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgKi8KKworaW50IGk7CisKKyNpZiAwCitzbm1wX3NldF9kb19kZWJ1Z2dpbmcoVFJVRSk7CitkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoImR1bXB2X3JlY3YsZHVtcHZfc2VuZCxhc24iKTsKKyNlbmRpZgorCit7CisgICAgY29uc3QgbG9uZyBpbnR2YWxbXSA9IHsKKyAgICAgICAgLTB4ODAwMDAwMDBMLAorICAgICAgICAtMHg3ZmZmZmZmZkwsCisgICAgICAgIC0weGZmZmZMLAorICAgICAgICAtMywKKyAgICAgICAgLTEsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDMsCisgICAgICAgIDB4ZmZmZiwKKyAgICAgICAgMHg3ZmZmZmZmZiwKKyAgICB9OworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisJdV9jaGFyIGVuY29kZWRbMjU2XTsKKwlzaXplX3QgZW5jb2RlZF9sZW5ndGg7CisJdV9jaGFyICpidWlsZF9yZXN1bHQ7CisJc2l6ZV90IGRlY29kZWRfbGVuZ3RoOworCXVfY2hhciBkZWNvZGVkX3R5cGU7CisJbG9uZyBkZWNvZGVkX3ZhbHVlID0gMDsKKwl1X2NoYXIgKnBhcnNlX3Jlc3VsdDsKKyAgICAgICAgdV9jaGFyICpyYnVpbGRfcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHJidWlsZF9sZW4gPSAwOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKworCWVuY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpOworCWJ1aWxkX3Jlc3VsdCA9IGFzbl9idWlsZF9pbnQoZW5jb2RlZCwgJmVuY29kZWRfbGVuZ3RoLCBBU05fSU5URUdFUiwKKwkJCQkgICAgICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKTsKKwlPS0YoYnVpbGRfcmVzdWx0ICsgZW5jb2RlZF9sZW5ndGggPT0gZW5jb2RlZCArIHNpemVvZihlbmNvZGVkKSwKKwkgICAgKCJhc25fYnVpbGRfaW50KCVsZCkiLCBpbnR2YWxbaV0pKTsKKwlkZWNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoOworCXBhcnNlX3Jlc3VsdCA9IGFzbl9wYXJzZV9pbnQoZW5jb2RlZCwgJmRlY29kZWRfbGVuZ3RoLCAmZGVjb2RlZF90eXBlLAorCQkJCSAgICAgJmRlY29kZWRfdmFsdWUsIHNpemVvZihkZWNvZGVkX3ZhbHVlKSk7CisJT0tGKHBhcnNlX3Jlc3VsdCA9PSBidWlsZF9yZXN1bHQgJiYgZGVjb2RlZF90eXBlID09IEFTTl9JTlRFR0VSCisJICAgICYmIGRlY29kZWRfdmFsdWUgPT0gaW50dmFsW2ldLAorCSAgICAoImFzbl9wYXJzZV9pbnQoYXNuX2J1aWxkX2ludCglbGQpKSAlczsgZGVjb2RlZCB0eXBlICVkIDw+ICVkOyIKKwkgICAgICIgZGVjb2RlZCB2YWx1ZSAlbGQiLAorCSAgICAgaW50dmFsW2ldLCBwYXJzZV9yZXN1bHQgPT0gYnVpbGRfcmVzdWx0ID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIiwKKwkgICAgIGRlY29kZWRfdHlwZSwgQVNOX0lOVEVHRVIsIGRlY29kZWRfdmFsdWUpKTsKKworICAgICAgICBPS0YoYXNuX3JlYWxsb2NfcmJ1aWxkX2ludCgmcmJ1aWxkX3Jlc3VsdCwgJnJidWlsZF9sZW4sICZvZmZzZXQsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSksCisgICAgICAgICAgICAoImFzbl9yZWFsbG9jX3JidWlsZF9pbnQoJWxkKSIsIGludHZhbFtpXSkpOworICAgICAgICBPS0Yoc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGggPT0gb2Zmc2V0ICYmCisgICAgICAgICAgICBtZW1jbXAoZW5jb2RlZCwgcmJ1aWxkX3Jlc3VsdCArIHJidWlsZF9sZW4gLSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSA9PSAwLAorICAgICAgICAgICAgKCJhc25fYnVpbGRfaW50KCVsZCkgIT0gYXNuX3JlYWxsb2NfcmJ1aWxkX2ludCglbGQpIiwKKyAgICAgICAgICAgICBpbnR2YWxbaV0sIGludHZhbFtpXSkpOworICAgICAgICBmcmVlIChyYnVpbGRfcmVzdWx0KTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGludHZhbFtdID0geworCTAsIDEsIDMsIDB4ZmZmZiwgMHg3ZmZmZmZmZiwgMHg4MDAwMDAwMFUsIDB4ZmZmZmZmZmZVCisgICAgfTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworCXVfY2hhciBlbmNvZGVkWzI1Nl07CisJc2l6ZV90IGVuY29kZWRfbGVuZ3RoOworCXVfY2hhciAqYnVpbGRfcmVzdWx0OworCXNpemVfdCBkZWNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgZGVjb2RlZF90eXBlOworCXVuc2lnbmVkIGxvbmcgZGVjb2RlZF92YWx1ZSA9IDA7CisJdV9jaGFyICpwYXJzZV9yZXN1bHQ7CisgICAgICAgIHVfY2hhciAqcmJ1aWxkX3Jlc3VsdCA9IE5VTEw7CisgICAgICAgIHNpemVfdCByYnVpbGRfbGVuID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisKKwllbmNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKTsKKwlidWlsZF9yZXN1bHQgPSBhc25fYnVpbGRfdW5zaWduZWRfaW50KGVuY29kZWQsICZlbmNvZGVkX2xlbmd0aCwKKwkJCQkJICAgICAgQVNOX1VJTlRFR0VSLAorCQkJCQkgICAgICAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSk7CisJT0tGKGJ1aWxkX3Jlc3VsdCArIGVuY29kZWRfbGVuZ3RoID09IGVuY29kZWQgKyBzaXplb2YoZW5jb2RlZCksCisJICAgICgiYXNuX2J1aWxkX3Vuc2lnbmVkX2ludCglbHUpIiwgaW50dmFsW2ldKSk7CisJZGVjb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aDsKKwlwYXJzZV9yZXN1bHQgPSBhc25fcGFyc2VfdW5zaWduZWRfaW50KGVuY29kZWQsICZkZWNvZGVkX2xlbmd0aCwKKwkJCQkJICAgICAgJmRlY29kZWRfdHlwZSwgJmRlY29kZWRfdmFsdWUsCisJCQkJCSAgICAgIHNpemVvZihkZWNvZGVkX3ZhbHVlKSk7CisJT0tGKHBhcnNlX3Jlc3VsdCAmJiBkZWNvZGVkX3R5cGUgPT0gQVNOX1VJTlRFR0VSCisJICAgICYmIGRlY29kZWRfdmFsdWUgPT0gaW50dmFsW2ldLAorCSAgICAoImFzbl9wYXJzZV91bnNpZ25lZF9pbnQoYXNuX2J1aWxkX3Vuc2lnbmVkX2ludCglbHUpKSAlczsiCisJICAgICAiIGRlY29kZWQgdHlwZSAlZCA8PiAlZDsgZGVjb2RlZCB2YWx1ZSAlbHUiLAorCSAgICAgaW50dmFsW2ldLCBwYXJzZV9yZXN1bHQgPT0gYnVpbGRfcmVzdWx0ID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIiwKKwkgICAgIGRlY29kZWRfdHlwZSwgQVNOX1VJTlRFR0VSLCBkZWNvZGVkX3ZhbHVlKSk7CisKKyAgICAgICAgT0tGKGFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQoJnJidWlsZF9yZXN1bHQsICZyYnVpbGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2Zmc2V0LCAxLCBBU05fVUlOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKSwKKyAgICAgICAgICAgICgiYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludCglbHVkKSIsIGludHZhbFtpXSkpOworICAgICAgICBPS0Yoc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGggPT0gb2Zmc2V0ICYmCisgICAgICAgICAgICBtZW1jbXAoZW5jb2RlZCwgcmJ1aWxkX3Jlc3VsdCArIHJidWlsZF9sZW4gLSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSA9PSAwLAorICAgICAgICAgICAgKCJhc25fYnVpbGRfdW5zaWduZWRfaW50KCVsZCkgIT0gIgorICAgICAgICAgICAgICJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50KCVsZCkiLAorICAgICAgICAgICAgIGludHZhbFtpXSwgaW50dmFsW2ldKSk7CisgICAgICAgIGZyZWUgKHJidWlsZF9yZXN1bHQpOworICAgIH0KK30KKworI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUworCisjZGVmaW5lIFRPSU5UNjQoYykgKChsb25nIGxvbmcpKGxvbmcpKGMpLmhpZ2ggPDwgMzIgfCAoYykubG93KQorCit7CisgICAgY29uc3Qgc3RydWN0IGNvdW50ZXI2NCBpbnR2YWxbXSA9IHsKKwl7IDB4ODAwMDAwMDBVLCAgICAgICAgICAwVSB9LAorCXsgMHg4MDAwMDAwMFUsIDB4ZmZmZmZmZmZVIH0sCisJeyAweGZmZmZmZmZmVSwgICAgICAgICAgIDAgfSwKKwl7IDB4ZmZmZmZmZmZVLCAweGZmZmYwMDAwVSB9LAorCXsgMHhmZmZmZmZmZlUsIDB4ZmZmZmZmZmNVIH0sCisJeyAweGZmZmZmZmZmVSwgMHhmZmZmZmZmZlUgfSwKKwl7ICAgICAgICAgICAwLCAgICAgICAgICAgMCB9LAorCXsgICAgICAgICAgIDAsICAgICAgICAgICAxIH0sCisJeyAgICAgICAgICAgMCwgICAgICAgICAgIDMgfSwKKwl7ICAgICAgICAgICAwLCAgICAgIDB4ZmZmZiB9LAorCXsgICAgICAgICAgIDAsICAweDdmZmZmZmZmIH0sCisJeyAgICAgICAgICAgMSwgICAgICAgICAgIDAgfSwKKwl7ICAgICAgICAgICAxLCAgMHhmZmZmZmZmZiB9LAorCXsgIDB4N2ZmZmZmZmYsICAgICAgICAgICAwIH0sCisJeyAgMHg3ZmZmZmZmZiwgIDB4ZGVhZGJlZWYgfSwKKwl7ICAweDdmZmZmZmZmLCAgMHhmZmZmZmZmZiB9LAorICAgIH07CisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKwl1X2NoYXIgZW5jb2RlZFsyNTZdOworCXNpemVfdCBlbmNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgKmJ1aWxkX3Jlc3VsdDsKKwlzaXplX3QgZGVjb2RlZF9sZW5ndGg7CisJdV9jaGFyIGRlY29kZWRfdHlwZTsKKwlzdHJ1Y3QgY291bnRlcjY0IGRlY29kZWRfdmFsdWUgPSB7IDAgfTsKKwl1X2NoYXIgKnBhcnNlX3Jlc3VsdDsKKyAgICAgICAgdV9jaGFyICpyYnVpbGRfcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHJidWlsZF9sZW4gPSAwOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKworCWVuY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpOworCWJ1aWxkX3Jlc3VsdCA9IGFzbl9idWlsZF9zaWduZWRfaW50NjQoZW5jb2RlZCwgJmVuY29kZWRfbGVuZ3RoLAorCQkJCQkgICAgICBBU05fT1BBUVVFX0k2NCwKKwkJCQkJICAgICAgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpOworCU9LRihidWlsZF9yZXN1bHQgKyBlbmNvZGVkX2xlbmd0aCA9PSBlbmNvZGVkICsgc2l6ZW9mKGVuY29kZWQpLAorCSAgICAoImFzbl9idWlsZF9zaWduZWRfaW50NjQoJWxsZCkiLCBUT0lOVDY0KGludHZhbFtpXSkpKTsKKwlkZWNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoOworCXBhcnNlX3Jlc3VsdCA9IGFzbl9wYXJzZV9zaWduZWRfaW50NjQoZW5jb2RlZCwgJmRlY29kZWRfbGVuZ3RoLAorCQkJCQkgICAgICAmZGVjb2RlZF90eXBlLCAmZGVjb2RlZF92YWx1ZSwKKwkJCQkJICAgICAgc2l6ZW9mKGRlY29kZWRfdmFsdWUpKTsKKwlPS0YocGFyc2VfcmVzdWx0ID09IGJ1aWxkX3Jlc3VsdCAmJiBkZWNvZGVkX3R5cGUgPT0gQVNOX09QQVFVRV9JNjQKKwkgICAgJiYgbWVtY21wKCZkZWNvZGVkX3ZhbHVlLCAmaW50dmFsW2ldLCBzaXplb2YoZGVjb2RlZF92YWx1ZSkpID09IDAsCisJICAgICgiYXNuX3BhcnNlX3NpZ25lZF9pbnQ2NChhc25fYnVpbGRfc2lnbmVkX2ludDY0KCVsbGQpKSAlczsiCisJICAgICAiIGRlY29kZWQgdHlwZSAlZCA8PiAlZDsgZGVjb2RlZCB2YWx1ZSAlbGxkIiwKKwkgICAgIFRPSU5UNjQoaW50dmFsW2ldKSwKKwkgICAgIHBhcnNlX3Jlc3VsdCA9PSBidWlsZF9yZXN1bHQgPyAic3VjY2VlZGVkIiA6ICJmYWlsZWQiLAorCSAgICAgZGVjb2RlZF90eXBlLCBBU05fT1BBUVVFX0k2NCwgVE9JTlQ2NChkZWNvZGVkX3ZhbHVlKSkpOworCisgICAgICAgIE9LRihhc25fcmVhbGxvY19yYnVpbGRfc2lnbmVkX2ludDY0KCZyYnVpbGRfcmVzdWx0LCAmcmJ1aWxkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldCwgMSwgQVNOX09QQVFVRV9JNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKSwKKyAgICAgICAgICAgICgiYXNuX3JlYWxsb2NfcmJ1aWxkX3NpZ25lZF9pbnQ2NCglbGxkKSIsIFRPSU5UNjQoaW50dmFsW2ldKSkpOworICAgICAgICBPS0Yoc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGggPT0gb2Zmc2V0ICYmCisgICAgICAgICAgICBtZW1jbXAoZW5jb2RlZCwgcmJ1aWxkX3Jlc3VsdCArIHJidWlsZF9sZW4gLSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSA9PSAwLAorICAgICAgICAgICAgKCJhc25fYnVpbGRfc2lnbmVkX2ludDY0KCVsbGQpICE9ICIKKyAgICAgICAgICAgICAiYXNuX3JlYWxsb2NfcmJ1aWxkX3NpZ25lZF9pbnQ2NCglbGxkKSIsCisgICAgICAgICAgICAgVE9JTlQ2NChpbnR2YWxbaV0pLCBUT0lOVDY0KGludHZhbFtpXSkpKTsKKyAgICAgICAgZnJlZSAocmJ1aWxkX3Jlc3VsdCk7CisgICAgfQorfQorCisjZW5kaWYKKworI2RlZmluZSBUT1VJTlQ2NChjKSAoKHVuc2lnbmVkIGxvbmcgbG9uZykoYykuaGlnaCA8PCAzMiB8IChjKS5sb3cpCisKK3sKKyAgICBjb25zdCBzdHJ1Y3QgY291bnRlcjY0IGludHZhbFtdID0geworCXsgICAgICAgICAgMCwgICAgICAgICAgMCB9LAorCXsgICAgICAgICAgMCwgICAgICAgICAgMSB9LAorCXsgICAgICAgICAgMCwgICAgICAgICAgMyB9LAorCXsgICAgICAgICAgMCwgICAgIDB4ZmZmZiB9LAorCXsgICAgICAgICAgMCwgMHg3ZmZmZmZmZiB9LAorCXsgICAgICAgICAgMCwgMHg4MDAwMDAwMCB9LAorCXsgICAgICAgICAgMCwgMHhmZmZmZmZmZiB9LAorCXsgICAgICAgICAgMSwgICAgICAgICAgMCB9LAorCXsgICAgICAgICAgMSwgMHhmZmZmZmZmZiB9LAorCXsgMHg3ZmZmZmZmZiwgICAgICAgICAgMCB9LAorCXsgMHg3ZmZmZmZmZiwgMHhkZWFkYmVlZiB9LAorCXsgMHg3ZmZmZmZmZiwgMHhmZmZmZmZmZiB9LAorCXsgMHhmZmZmZmZmZiwgICAgICAgICAgMCB9LAorCXsgMHhmZmZmZmZmZiwgMHhkZWFkYmVlZiB9LAorCXsgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiB9LAorICAgIH07CisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKwl1X2NoYXIgZW5jb2RlZFsyNTZdOworCXNpemVfdCBlbmNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgKmJ1aWxkX3Jlc3VsdDsKKwlzaXplX3QgZGVjb2RlZF9sZW5ndGg7CisJdV9jaGFyIGRlY29kZWRfdHlwZTsKKwlzdHJ1Y3QgY291bnRlcjY0IGRlY29kZWRfdmFsdWUgPSB7IDAgfTsKKwl1X2NoYXIgKnBhcnNlX3Jlc3VsdDsKKyAgICAgICAgdV9jaGFyICpyYnVpbGRfcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHJidWlsZF9sZW4gPSAwOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKworCWVuY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpOworCWJ1aWxkX3Jlc3VsdCA9IGFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NChlbmNvZGVkLCAmZW5jb2RlZF9sZW5ndGgsCisJCQkJCQlBU05fQ09VTlRFUjY0LAorCQkJCQkJJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpOworCU9LRihidWlsZF9yZXN1bHQgKyBlbmNvZGVkX2xlbmd0aCA9PSBlbmNvZGVkICsgc2l6ZW9mKGVuY29kZWQpLAorCSAgICAoImFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1KSIsIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKwlkZWNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoOworCXBhcnNlX3Jlc3VsdCA9IGFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NChlbmNvZGVkLCAmZGVjb2RlZF9sZW5ndGgsCisJCQkJCQkmZGVjb2RlZF90eXBlLCAmZGVjb2RlZF92YWx1ZSwKKwkJCQkJCXNpemVvZihkZWNvZGVkX3ZhbHVlKSk7CisJT0tGKHBhcnNlX3Jlc3VsdCAmJiBkZWNvZGVkX3R5cGUgPT0gQVNOX0NPVU5URVI2NAorCSAgICAmJiBtZW1jbXAoJmRlY29kZWRfdmFsdWUsICZpbnR2YWxbaV0sIHNpemVvZihkZWNvZGVkX3ZhbHVlKSkgPT0gMCwKKwkgICAgKCJhc25fcGFyc2VfdW5zaWduZWRfaW50NjQoYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHUpKSAlczsiCisJICAgICAiIGRlY29kZWQgdHlwZSAlZCA8PiAlZDsgZGVjb2RlZCB2YWx1ZSAlbGx1IiwKKwkgICAgIFRPVUlOVDY0KGludHZhbFtpXSksCisJICAgICBwYXJzZV9yZXN1bHQgPT0gYnVpbGRfcmVzdWx0ID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIiwKKwkgICAgIGRlY29kZWRfdHlwZSwgQVNOX0NPVU5URVI2NCwgVE9VSU5UNjQoZGVjb2RlZF92YWx1ZSkpKTsKKworICAgICAgICBPS0YoYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCZyYnVpbGRfcmVzdWx0LCAmcmJ1aWxkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2Zmc2V0LCAxLCBBU05fQ09VTlRFUjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKSwKKyAgICAgICAgICAgICgiYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHVkKSIsIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKyAgICAgICAgT0tGKHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoID09IG9mZnNldCAmJgorICAgICAgICAgICAgbWVtY21wKGVuY29kZWQsIHJidWlsZF9yZXN1bHQgKyByYnVpbGRfbGVuIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIG9mZnNldCkgPT0gMCwKKyAgICAgICAgICAgICgiYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbGQpICE9ICIKKyAgICAgICAgICAgICAiYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbGQpIiwKKyAgICAgICAgICAgICBUT1VJTlQ2NChpbnR2YWxbaV0pLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisgICAgICAgIGZyZWUgKHJidWlsZF9yZXN1bHQpOworICAgIH0KKworI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKwl1X2NoYXIgZW5jb2RlZFsyNTZdOworCXNpemVfdCBlbmNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgKmJ1aWxkX3Jlc3VsdDsKKwlzaXplX3QgZGVjb2RlZF9sZW5ndGg7CisJdV9jaGFyIGRlY29kZWRfdHlwZTsKKwlzdHJ1Y3QgY291bnRlcjY0IGRlY29kZWRfdmFsdWUgPSB7IDAgfTsKKwl1X2NoYXIgKnBhcnNlX3Jlc3VsdDsKKyAgICAgICAgdV9jaGFyICpyYnVpbGRfcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHJidWlsZF9sZW4gPSAwOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKworCWVuY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpOworCWJ1aWxkX3Jlc3VsdCA9IGFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NChlbmNvZGVkLCAmZW5jb2RlZF9sZW5ndGgsCisJCQkJCQlBU05fT1BBUVVFX0NPVU5URVI2NCwKKwkJCQkJCSZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKTsKKwlPS0YoYnVpbGRfcmVzdWx0ICsgZW5jb2RlZF9sZW5ndGggPT0gZW5jb2RlZCArIHNpemVvZihlbmNvZGVkKSwKKwkgICAgKCJhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdSkiLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisJZGVjb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aDsKKwlwYXJzZV9yZXN1bHQgPSBhc25fcGFyc2VfdW5zaWduZWRfaW50NjQoZW5jb2RlZCwgJmRlY29kZWRfbGVuZ3RoLAorCQkJCQkJJmRlY29kZWRfdHlwZSwgJmRlY29kZWRfdmFsdWUsCisJCQkJCQlzaXplb2YoZGVjb2RlZF92YWx1ZSkpOworCU9LRihwYXJzZV9yZXN1bHQgJiYgZGVjb2RlZF90eXBlID09IEFTTl9PUEFRVUVfQ09VTlRFUjY0CisJICAgICYmIG1lbWNtcCgmZGVjb2RlZF92YWx1ZSwgJmludHZhbFtpXSwgc2l6ZW9mKGRlY29kZWRfdmFsdWUpKSA9PSAwLAorCSAgICAoImFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NChhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdSkpICVzOyIKKwkgICAgICIgZGVjb2RlZCB0eXBlICVkIDw+ICVkOyBkZWNvZGVkIHZhbHVlICVsbHUiLAorCSAgICAgVE9VSU5UNjQoaW50dmFsW2ldKSwKKwkgICAgIHBhcnNlX3Jlc3VsdCA9PSBidWlsZF9yZXN1bHQgPyAic3VjY2VlZGVkIiA6ICJmYWlsZWQiLAorCSAgICAgZGVjb2RlZF90eXBlLCBBU05fT1BBUVVFX0NPVU5URVI2NCwgVE9VSU5UNjQoZGVjb2RlZF92YWx1ZSkpKTsKKworICAgICAgICBPS0YoYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCZyYnVpbGRfcmVzdWx0LCAmcmJ1aWxkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2Zmc2V0LCAxLCBBU05fT1BBUVVFX0NPVU5URVI2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSksCisgICAgICAgICAgICAoImFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1ZCkiLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisgICAgICAgIE9LRihzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aCA9PSBvZmZzZXQgJiYKKyAgICAgICAgICAgIG1lbWNtcChlbmNvZGVkLCByYnVpbGRfcmVzdWx0ICsgcmJ1aWxkX2xlbiAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBvZmZzZXQpID09IDAsCisgICAgICAgICAgICAoImFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGxkKSAhPSAiCisgICAgICAgICAgICAgImFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCglbGxkKSIsCisgICAgICAgICAgICAgVE9VSU5UNjQoaW50dmFsW2ldKSwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworICAgICAgICBmcmVlIChyYnVpbGRfcmVzdWx0KTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworCXVfY2hhciBlbmNvZGVkWzI1Nl07CisJc2l6ZV90IGVuY29kZWRfbGVuZ3RoOworCXVfY2hhciAqYnVpbGRfcmVzdWx0OworCXNpemVfdCBkZWNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgZGVjb2RlZF90eXBlOworCXN0cnVjdCBjb3VudGVyNjQgZGVjb2RlZF92YWx1ZSA9IHsgMCB9OworCXVfY2hhciAqcGFyc2VfcmVzdWx0OworICAgICAgICB1X2NoYXIgKnJidWlsZF9yZXN1bHQgPSBOVUxMOworICAgICAgICBzaXplX3QgcmJ1aWxkX2xlbiA9IDA7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworCisJZW5jb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCk7CisJYnVpbGRfcmVzdWx0ID0gYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KGVuY29kZWQsICZlbmNvZGVkX2xlbmd0aCwKKwkJCQkJCUFTTl9PUEFRVUVfVTY0LAorCQkJCQkJJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpOworCU9LRihidWlsZF9yZXN1bHQgKyBlbmNvZGVkX2xlbmd0aCA9PSBlbmNvZGVkICsgc2l6ZW9mKGVuY29kZWQpLAorCSAgICAoImFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1KSIsIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKwlkZWNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoOworCXBhcnNlX3Jlc3VsdCA9IGFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NChlbmNvZGVkLCAmZGVjb2RlZF9sZW5ndGgsCisJCQkJCQkmZGVjb2RlZF90eXBlLCAmZGVjb2RlZF92YWx1ZSwKKwkJCQkJCXNpemVvZihkZWNvZGVkX3ZhbHVlKSk7CisJT0tGKHBhcnNlX3Jlc3VsdCAmJiBkZWNvZGVkX3R5cGUgPT0gQVNOX09QQVFVRV9VNjQKKwkgICAgJiYgbWVtY21wKCZkZWNvZGVkX3ZhbHVlLCAmaW50dmFsW2ldLCBzaXplb2YoZGVjb2RlZF92YWx1ZSkpID09IDAsCisJICAgICgiYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KGFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1KSkgJXM7IgorCSAgICAgIiBkZWNvZGVkIHR5cGUgJWQgPD4gJWQ7IGRlY29kZWQgdmFsdWUgJWxsdSIsCisJICAgICBUT1VJTlQ2NChpbnR2YWxbaV0pLAorCSAgICAgcGFyc2VfcmVzdWx0ID09IGJ1aWxkX3Jlc3VsdCA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIsCisJICAgICBkZWNvZGVkX3R5cGUsIEFTTl9PUEFRVUVfVTY0LCBUT1VJTlQ2NChkZWNvZGVkX3ZhbHVlKSkpOworCisgICAgICAgIE9LRihhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJnJidWlsZF9yZXN1bHQsICZyYnVpbGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXQsIDEsIEFTTl9PUEFRVUVfVTY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKSwKKyAgICAgICAgICAgICgiYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHVkKSIsIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKyAgICAgICAgT0tGKHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoID09IG9mZnNldCAmJgorICAgICAgICAgICAgbWVtY21wKGVuY29kZWQsIHJidWlsZF9yZXN1bHQgKyByYnVpbGRfbGVuIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIG9mZnNldCkgPT0gMCwKKyAgICAgICAgICAgICgiYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbGQpICE9ICIKKyAgICAgICAgICAgICAiYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbGQpIiwKKyAgICAgICAgICAgICBUT1VJTlQ2NChpbnR2YWxbaV0pLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisgICAgICAgIGZyZWUgKHJidWlsZF9yZXN1bHQpOworICAgIH0KKworI2VuZGlmCit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDlsYXJnZV9mZF9zZXRfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA5bGFyZ2VfZmRfc2V0X2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWU0ZDQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA5bGFyZ2VfZmRfc2V0X2NsaWIuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBIRUFERVIgVGVzdGluZyBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqLworCituZXRzbm1wX2xhcmdlX2ZkX3NldCBmZHM7CituZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZmZHMsIDIwMDApOworT0tGKGZkcy5sZnNfc2V0c2l6ZSA9PSAyMDAwLCAoImluaXRpYWxpemF0aW9uIikpOworT0tGKG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgmZmRzLCAyMDAwKSA9PSAxLCAoInJlc2l6aW5nIHRvIDIwMDAiKSk7CitORVRTTk1QX0xBUkdFX0ZEX1pFUk8oJmZkcyk7CisKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZmRzLmxmc19zZXRzaXplOyArK2kpIHsKKyAgICAgICAgT0tGKCFORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIG5vdCBzZXQiLCBpKSk7CisJTkVUU05NUF9MQVJHRV9GRF9TRVQoaSwgJmZkcyk7CisJT0tGKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgc2V0IiwgaSkpOworCU5FVFNOTVBfTEFSR0VfRkRfQ0xSKGksICZmZHMpOworCU9LRighTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBub3Qgc2V0IiwgaSkpOworICAgIH0KK30KKworT0tGKG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgmZmRzLCAzMDAwKSA9PSAxLCAoInJlc2l6aW5nIHRvIDMwMDAiKSk7CisKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZmRzLmxmc19zZXRzaXplOyArK2kpIHsKKyAgICAgICAgT0tGKCFORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIG5vdCBzZXQiLCBpKSk7CisJTkVUU05NUF9MQVJHRV9GRF9TRVQoaSwgJmZkcyk7CisJT0tGKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgc2V0IiwgaSkpOworCU5FVFNOTVBfTEFSR0VfRkRfQ0xSKGksICZmZHMpOworCU9LRighTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBub3Qgc2V0IiwgaSkpOworICAgIH0KK30KKworT0tGKG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgmZmRzLCAxMDAwKSA9PSAxLCAoInJlc2l6aW5nIHRvIDEwMDAiKSk7CisKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZmRzLmxmc19zZXRzaXplOyArK2kpIHsKKyAgICAgICAgT0tGKCFORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIG5vdCBzZXQiLCBpKSk7CisJTkVUU05NUF9MQVJHRV9GRF9TRVQoaSwgJmZkcyk7CisJT0tGKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgc2V0IiwgaSkpOworCU5FVFNOTVBfTEFSR0VfRkRfQ0xSKGksICZmZHMpOworCU9LRighTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBub3Qgc2V0IiwgaSkpOworICAgIH0KK30KKworbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmZmRzKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2Vjc19jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3NfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMWFlZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3NfY2xpYi5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qIEhFQURFUiBUZXN0aW5nIHRoZSBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MgQVBJICovCitpbnQgc2VjczsKKworI2RlZmluZSBURVNUSVQoeCx5KSBcCisgICAgT0tGKHkgPT0gKHNlY3MgPSBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoeCkpLCBcCisgICAgICAgICgibmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzIG9mICVzIHJldHVybmVkICVkLCBub3QgNSIsIHgsIHNlY3MpKQorCitURVNUSVQoIjUiLCA1KTsKK1RFU1RJVCgiNSIsIDUpOworCitURVNUSVQoIjVzIiwgNSk7CitURVNUSVQoIjVTIiwgNSk7CisKK1RFU1RJVCgiNW0iLCA1ICogNjApOworVEVTVElUKCI1TSIsIDUgKiA2MCk7CisKK1RFU1RJVCgiNWgiLCA1ICogNjAgKiA2MCk7CitURVNUSVQoIjVIIiwgNSAqIDYwICogNjApOworCitURVNUSVQoIjVkIiwgNSAqIDYwICogNjAgKiAyNCk7CitURVNUSVQoIjVEIiwgNSAqIDYwICogNjAgKiAyNCk7CisKK1RFU1RJVCgiNXciLCA1ICogNjAgKiA2MCAqIDI0ICogNyk7CitURVNUSVQoIjVXIiwgNSAqIDYwICogNjAgKiAyNCAqIDcpOworCisvKiBub3cgd2l0aCBsb25nZXIgdGltZXMgKi8KK1RFU1RJVCgiMTIzNCIsIDEyMzQpOworVEVTVElUKCIxMjM0IiwgMTIzNCk7CisKK1RFU1RJVCgiMTIzNHMiLCAxMjM0KTsKK1RFU1RJVCgiMTIzNFMiLCAxMjM0KTsKKworVEVTVElUKCIxMjM0bSIsIDEyMzQgKiA2MCk7CitURVNUSVQoIjEyMzRNIiwgMTIzNCAqIDYwKTsKKworVEVTVElUKCIxMjM0aCIsIDEyMzQgKiA2MCAqIDYwKTsKK1RFU1RJVCgiMTIzNEgiLCAxMjM0ICogNjAgKiA2MCk7CisKK1RFU1RJVCgiMTIzNGQiLCAxMjM0ICogNjAgKiA2MCAqIDI0KTsKK1RFU1RJVCgiMTIzNEQiLCAxMjM0ICogNjAgKiA2MCAqIDI0KTsKKworVEVTVElUKCIxMjM0dyIsIDEyMzQgKiA2MCAqIDYwICogMjQgKiA3KTsKK1RFU1RJVCgiMTIzNFciLCAxMjM0ICogNjAgKiA2MCAqIDI0ICogNyk7CisKKwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDExc25tcF9vbGRfYXBpX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMXNubXBfb2xkX2FwaV9yZWdpc3RyYXRpb25fY2FnZW50bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxZDQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMXNubXBfb2xkX2FwaV9yZWdpc3RyYXRpb25fY2FnZW50bGliLmMKQEAgLTAsMCArMSw0NiBAQAorLyogSEVBREVSIFRlc3RpbmcgU05NUCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiB2aWEgdGhlIG9sZCBBUEkgKi8KKworc3RhdGljIG9pZCBPaWRbXSA9IHsgMSwgMywgNiwgMSwgMywgMzI3IH07IC8qIGV4cGVyaW1lbnRhbC4zMjcgKi8KK3N0cnVjdCB2YXJpYWJsZSB2YXJfYXJyYXlbXSA9IHsKKyAgICB7IDAsIDAvKnR5cGUqLywgMC8qYWNsKi8sIE5VTEwvKmZpbmRWYXIqLywgNywgeyAxLCAzLCA2LCAxLCAzLCAzMjcsIDEgfSB9LAorICAgIHsgMCwgMC8qdHlwZSovLCAwLyphY2wqLywgTlVMTC8qZmluZFZhciovLCA3LCB7IDEsIDMsIDYsIDEsIDMsIDMyNywgMiB9IH0sCisgICAgeyAwLCAwLyp0eXBlKi8sIDAvKmFjbCovLCBOVUxMLypmaW5kVmFyKi8sIDcsIHsgMSwgMywgNiwgMSwgMywgMzI3LCAzIH0gfSwKK307CituZXRzbm1wX3Nlc3Npb24gKnNlc3M7CitpbnQgcmVzOworCitpbml0X3NubXAoInNubXAiKTsKKworc2VzcyA9IGNhbGxvYygxLCBzaXplb2YoKnNlc3MpKTsKK3NubXBfc2Vzc19pbml0KHNlc3MpOworCityZXMgPSAKK25ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgiZXhwLjMyNy5hIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2YXJfYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZhcl9hcnJheVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZhcl9hcnJheSkvc2l6ZW9mKHZhcl9hcnJheVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgT2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihPaWQpL3NpemVvZihPaWRbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIDIsIC8qIHByaW9yaXR5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogcmFuZ2Vfc3ViaWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiByYW5nZV91Ym91bmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb250ZXh0IiwgNS8qdGltZW91dCovLCAwLypmbGFncyAtIGlnbm9yZWQqLyk7CitPSyhyZXMgPT0gU05NUEVSUl9TVUNDRVNTLCAiSGFuZGxlciByZWdpc3RyYXRpb24gKDEpLiIpOworCisvKiBWZXJpZnkgdGhhdCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIGRvZXMgbm90IGNhdXNlIGFueSBoYXZvYy4gKi8KK3JlcyA9IAorbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCJleHAuMzI3LmIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZhcl9hcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodmFyX2FycmF5WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodmFyX2FycmF5KS9zaXplb2YodmFyX2FycmF5WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBPaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE9pZCkvc2l6ZW9mKE9pZFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgMiwgLyogcHJpb3JpdHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiByYW5nZV9zdWJpZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIHJhbmdlX3Vib3VuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRleHQiLCA1Lyp0aW1lb3V0Ki8sIDAvKmZsYWdzIC0gaWdub3JlZCovKTsKK09LKHJlcyA9PSBTTk1QRVJSX1NVQ0NFU1MsICJIYW5kbGVyIHJlZ2lzdHJhdGlvbiAoMikuIik7CisKK3NubXBfc2h1dGRvd24oInNubXAiKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMmJpbmFyeV9hcnJheV9vaWRfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEyYmluYXJ5X2FycmF5X29pZF9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlYjUwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMmJpbmFyeV9hcnJheV9vaWRfY2xpYi5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qIEhFQURFUiBUZXN0aW5nIGJpbmFyeSBPSUQgYXJyYXkgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgdGVzdF9uYW1lW10gPSAiYmluYXJ5LWFycmF5LW9mLU9JRHMtdGVzdCI7CitvaWQgbzEgPSAxOworb2lkIG8yID0gMjsKK29pZCBvMyA9IDY7CitvaWQgbzQgPSA4Oworb2lkIG81ID0gOTsKK29pZCBveCA9IDc7CitvaWQgb3kgPSAxMDsKK25ldHNubXBfaW5kZXggaTEsIGkyLCBpMywgaTQsIGk1LCBpeCwgaXksICppcDsKK2NvbnN0IG5ldHNubXBfaW5kZXggKmNvbnN0IGlfbGFzdCA9ICZpNTsKK25ldHNubXBfaW5kZXggKmFbXSA9IHsgJml4LCAmaXkgfTsKK25ldHNubXBfaW5kZXggKmJbXSA9IHsgJmk0LCAmaTIsICZpMywgJmkxLCAmaTUgfTsKK25ldHNubXBfY29udGFpbmVyICpjOworaW50IGk7CisKK2luaXRfc25tcCh0ZXN0X25hbWUpOworCitjID0gbmV0c25tcF9jb250YWluZXJfZ2V0X2JpbmFyeV9hcnJheSgpOworYy0+Y29tcGFyZSA9IG5ldHNubXBfY29tcGFyZV9uZXRzbm1wX2luZGV4OworICAgIAoraTEub2lkcyA9ICZvMTsKK2kyLm9pZHMgPSAmbzI7CitpMy5vaWRzID0gJm8zOworaTQub2lkcyA9ICZvNDsKK2k1Lm9pZHMgPSAmbzU7CitpeC5vaWRzID0gJm94OworaXkub2lkcyA9ICZveTsKK2kxLmxlbiA9IGkyLmxlbiA9IGkzLmxlbiA9IGk0LmxlbiA9IGk1LmxlbiA9IGl4LmxlbiA9IGl5LmxlbiA9IDE7CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoYikvc2l6ZW9mKGJbMF0pOyArK2kpCisgICAgQ09OVEFJTkVSX0lOU0VSVChjLCBiW2ldKTsKKworZm9yIChpcCA9IENPTlRBSU5FUl9GSVJTVChjKTsgaXA7IGlwID0gQ09OVEFJTkVSX05FWFQoYywgaXApKSB7CisgICAgZm9yIChpID0gc2l6ZW9mKGIpL3NpemVvZihiWzBdKSAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICBpZiAoYy0+Y29tcGFyZShpcCwgYltpXSkgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIE9LRihpID49IDAsICgiT0lEIGJbJWRdID0gJSIgTkVUU05NUF9QUklvICJkIHByZXNlbnQiLCBpLCBiW2ldLT5vaWRzWzBdKSk7Cit9CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoYikvc2l6ZW9mKGJbMF0pOyArK2kpIHsKKyAgICBpcCA9IENPTlRBSU5FUl9GSU5EKGMsIGJbaV0pOworICAgIE9LRihpcCwgKCJWYWx1ZSBiWyVkXSA9ICUiIE5FVFNOTVBfUFJJbyAiZCBwcmVzZW50IiwgaSwgYltpXS0+b2lkc1swXSkpOworICAgIGlwID0gQ09OVEFJTkVSX05FWFQoYywgYltpXSk7CisgICAgaWYgKGMtPmNvbXBhcmUoYltpXSwgaV9sYXN0KSA8IDApCisgICAgICAgIE9LRihpcCAmJiBjLT5jb21wYXJlKGJbaV0sIGlwKSA8IDAsCisgICAgICAgICAgICAoIlN1Y2Nlc3NvciBvZiBiWyVkXSA9ICUiIE5FVFNOTVBfUFJJbyAiZCBpcyAlIiBORVRTTk1QX1BSSW8gImQiLAorICAgICAgICAgICAgIGksIGJbaV0tPm9pZHNbMF0sIGlwLT5vaWRzWzBdKSk7CisgICAgZWxzZQorICAgICAgICBPS0YoIWlwLCAoIk5vIHN1Y2Nlc3NvciBmb3VuZCBmb3IgYlslZF0gPSAlIiBORVRTTk1QX1BSSW8gImQiLCBpLAorICAgICAgICAgICAgICAgICAgYltpXS0+b2lkc1swXSkpOworfQorCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGEpL3NpemVvZihhWzBdKTsgKytpKSB7CisgICAgaXAgPSBDT05UQUlORVJfRklORChjLCBhW2ldKTsKKyAgICBPS0YoIWlwLCAoImFbJWRdID0gJSIgTkVUU05NUF9QUklvICJkIGFic2VudCIsIGksIGFbaV0tPm9pZHNbMF0pKTsKKyAgICBpcCA9IENPTlRBSU5FUl9ORVhUKGMsIGFbaV0pOworICAgIGlmIChjLT5jb21wYXJlKGFbaV0sIGlfbGFzdCkgPCAwKQorICAgICAgICBPS0YoaXAgJiYgYy0+Y29tcGFyZShpcCwgYVtpXSkgPiAwLAorICAgICAgICAgICAgKCJTdWNjZXNzb3Igb2YgYVslZF0gPSAlIiBORVRTTk1QX1BSSW8gImQgaXMgJSIgTkVUU05NUF9QUklvICJkIiwKKyAgICAgICAgICAgICBpLCBhW2ldLT5vaWRzWzBdLCBpcC0+b2lkc1swXSkpOworICAgIGVsc2UKKyAgICAgICAgT0tGKCFpcCwgKCJObyBzdWNjZXNzb3IgZm91bmQgZm9yIGFbJWRdID0gJSIgTkVUU05NUF9QUklvICJkIiwgaSwKKyAgICAgICAgICAgICAgICAgIGFbaV0tPm9pZHNbMF0pKTsKK30KKword2hpbGUgKChpcCA9IENPTlRBSU5FUl9GSVJTVChjKSkpCisgIENPTlRBSU5FUl9SRU1PVkUoYywgaXApOworQ09OVEFJTkVSX0ZSRUUoYyk7CisKK3NubXBfc2h1dGRvd24odGVzdF9uYW1lKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxM2JpbmFyeV9hcnJheV9zdHJpbmdfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEzYmluYXJ5X2FycmF5X3N0cmluZ19jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0MzYxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxM2JpbmFyeV9hcnJheV9zdHJpbmdfY2xpYi5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qIEhFQURFUiBUZXN0aW5nIGJpbmFyeSBzdHJpbmcgYXJyYXkgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgdGVzdF9uYW1lW10gPSAiYmluYXJ5LWFycmF5LW9mLXN0cmluZ3MtdGVzdCI7Citjb25zdCBjaGFyIG8xW10gPSAiemVicmEiOworY29uc3QgY2hhciBvMltdID0gImItdHdvIjsKK2NvbnN0IGNoYXIgbzNbXSA9ICJiIjsKK2NvbnN0IGNoYXIgbzRbXSA9ICJjZWRhciI7Citjb25zdCBjaGFyIG81W10gPSAiYWxwaGEiOworY29uc3QgY2hhciBveFtdID0gImRldiI7Citjb25zdCBjaGFyIG95W10gPSAiYWEiOworY29uc3QgY2hhciogY29uc3Qgb19sYXN0ID0gbzE7Citjb25zdCBjaGFyICppcDsKK2NvbnN0IGNoYXIgKmNvbnN0IGFbXSA9IHsgb3gsIG95IH07Citjb25zdCBjaGFyICpjb25zdCBiW10gPSB7IG80LCBvMiwgbzMsIG8xLCBvNSB9OworbmV0c25tcF9jb250YWluZXIgKmM7CitpbnQgaTsKKworaW5pdF9zbm1wKHRlc3RfbmFtZSk7CisKK2MgPSBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfYmluYXJ5X2FycmF5KCk7CitjLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKXN0cmNtcDsKKyAgICAKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoYikvc2l6ZW9mKGJbMF0pOyArK2kpCisgICAgQ09OVEFJTkVSX0lOU0VSVChjLCBiW2ldKTsKKworZm9yIChpcCA9IENPTlRBSU5FUl9GSVJTVChjKTsgaXA7IGlwID0gQ09OVEFJTkVSX05FWFQoYywgaXApKSB7CisgICAgZm9yIChpID0gc2l6ZW9mKGIpL3NpemVvZihiWzBdKSAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICBpZiAoYy0+Y29tcGFyZShpcCwgYltpXSkgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIE9LRihpID49IDAsICgic3RyaW5nIGJbJWRdID0gXCIlc1wiIHByZXNlbnQiLCBpLCBiW2ldKSk7Cit9CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoYikvc2l6ZW9mKGJbMF0pOyArK2kpIHsKKyAgICBpcCA9IENPTlRBSU5FUl9GSU5EKGMsIGJbaV0pOworICAgIE9LRihpcCwgKCJiWyVkXSA9IFwiJXNcIiBwcmVzZW50IiwgaSwgYltpXSkpOworICAgIGlwID0gQ09OVEFJTkVSX05FWFQoYywgYltpXSk7CisgICAgaWYgKGMtPmNvbXBhcmUoYltpXSwgb19sYXN0KSA8IDApCisgICAgICAgIE9LRihpcCAmJiBjLT5jb21wYXJlKGJbaV0sIGlwKSA8IDAsCisgICAgICAgICAgICAoIlN1Y2Nlc3NvciBvZiBiWyVkXSA9IFwiJXNcIiBpcyBcIiVzXCIiLCBpLCBiW2ldLCBpcCkpOworICAgIGVsc2UKKyAgICAgICAgT0tGKCFpcCwgKCJObyBzdWNjZXNzb3IgZm91bmQgZm9yIGJbJWRdID0gXCIlc1wiIiwgaSwgYltpXSkpOworfQorCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGEpL3NpemVvZihhWzBdKTsgKytpKSB7CisgICAgaXAgPSBDT05UQUlORVJfRklORChjLCBhW2ldKTsKKyAgICBPS0YoIWlwLCAoImFbJWRdID0gXCIlc1wiIGFic2VudCIsIGksIGFbaV0pKTsKKyAgICBpcCA9IENPTlRBSU5FUl9ORVhUKGMsIGFbaV0pOworICAgIGlmIChjLT5jb21wYXJlKGFbaV0sIG9fbGFzdCkgPCAwKQorICAgICAgICBPS0YoaXAgJiYgYy0+Y29tcGFyZShpcCwgYVtpXSkgPiAwLAorICAgICAgICAgICAgKCJTdWNjZXNzb3Igb2YgYVslZF0gPSBcIiVzXCIgaXMgXCIlc1wiIiwgaSwgYVtpXSwgaXApKTsKKyAgICBlbHNlCisgICAgICAgIE9LRighaXAsICgiTm8gc3VjY2Vzc29yIGZvdW5kIGZvciBhWyVkXSA9IFwiJXNcIiIsIGksIGFbaV0pKTsKK30KKword2hpbGUgKChpcCA9IENPTlRBSU5FUl9GSVJTVChjKSkpCisgIENPTlRBSU5FUl9SRU1PVkUoYywgaXApOworQ09OVEFJTkVSX0ZSRUUoYyk7CisKK3NubXBfc2h1dGRvd24odGVzdF9uYW1lKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNGdldGhvc3RieWFkZHJfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE0Z2V0aG9zdGJ5YWRkcl9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhNTc4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNGdldGhvc3RieWFkZHJfY2xpYi5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBIRUFERVIgVGVzdGluZyBuZXRzbm1wX2dldGhvc3RieWFkZHIoKSAKKyAqLworCitTT0NLX1NUQVJUVVA7CisKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmFuX3Rlc3QgPSAwOworI2lmZGVmIEhBVkVfR0VUSE9TVEJZQUREUgorICAgIHN0cnVjdCBob3N0ZW50ICpoLCAqaDIgPSBOVUxMOworICAgIHN0cnVjdCBpbl9hZGRyICB2NGxvb3A7CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbl9hZGRyOworICAgIGludCAgICAgICAgICAgICBzOworCisgICAgdjRsb29wLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisgICAgbWVtc2V0KCZzaW5fYWRkciwgMCwgc2l6ZW9mKHNpbl9hZGRyKSk7CisgICAgc2luX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgc2luX2FkZHIuc2luX2FkZHIgPSB2NGxvb3A7CisgICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZiAocyA+PSAwKSB7CisgICAgICAgIGlmIChiaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNpbl9hZGRyLCBzaXplb2Yoc2luX2FkZHIpKSA+PSAwKSB7CisgICAgICAgICAgICBoID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKCZ2NGxvb3AsIHNpemVvZih2NGxvb3ApLCBBRl9JTkVUKTsKKyAgICAgICAgICAgIGlmIChoKQorICAgICAgICAgICAgICAgIGgyID0gZ2V0aG9zdGJ5bmFtZShoLT5oX25hbWUpOworICAgICAgICAgICAgT0tGKGggJiYgKHN0cmNtcChoLT5oX25hbWUsICJsb2NhbGhvc3QiKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGgyICYmIG1lbWNtcChoMi0+aF9hZGRyLCAmdjRsb29wLnNfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2NGxvb3Auc19hZGRyKSkgPT0gMCkpLAorICAgICAgICAgICAgICAgICgiMTI3LjAuMC4xIGxvb2t1cCAoJXMgLT4gJXMpIiwgaCA/IGgtPmhfbmFtZSA6ICIoZmFpbGVkKSIsCisgICAgICAgICAgICAgICAgIGgyID8gaW5ldF9udG9hKCooc3RydWN0IGluX2FkZHIgKikgaDItPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoX2FkZHIpIDogIihmYWlsZWQpIikpOworICAgICAgICAgICAgcmFuX3Rlc3QgPSAxOworICAgICAgICB9CisgICAgICAgIGNsb3NlKHMpOworICAgIH0KKyNlbmRpZgorICAgIGlmICghcmFuX3Rlc3QpCisgICAgICAgIE9LRigxLCAoIlNraXBwZWQgSVB2NCB0ZXN0IikpOworfQorCit7CisgICAgc3RydWN0IGhvc3RlbnQgKmg7CisjaWZkZWYgY3lnd2luCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbjZfYWRkciB2Nmxvb3AgPSB7IHsgSU42QUREUl9MT09QQkFDS19JTklUIH0gfTsKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbjZfYWRkciB2Nmxvb3AgPSBJTjZBRERSX0xPT1BCQUNLX0lOSVQ7CisjZW5kaWYKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjZfYWRkcjsKKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphZGRyID0gTlVMTCwgKmFwOworICAgIGNoYXIgICAgICAgICAgICBidWZbNjRdOworICAgIGludCAgICAgICAgICAgICBzLCByZXMsIHJhbl90ZXN0ID0gMDsKKworICAgIG1lbXNldCgmc2luNl9hZGRyLCAwLCBzaXplb2Yoc2luNl9hZGRyKSk7CisgICAgc2luNl9hZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgc2luNl9hZGRyLnNpbjZfYWRkciA9IHY2bG9vcDsKKyAgICBzID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZiAocyA+PSAwKSB7CisgICAgICAgIGlmIChiaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNpbjZfYWRkciwgc2l6ZW9mKHNpbjZfYWRkcikpID49CisgICAgICAgICAgICAwKSB7CisgICAgICAgICAgICBzdHJjcHkoYnVmLCAiKGZhaWxlZCkiKTsKKyAgICAgICAgICAgIGggPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoJnY2bG9vcCwgc2l6ZW9mKHY2bG9vcCksIEFGX0lORVQ2KTsKKyAgICAgICAgICAgIGlmIChoKSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgICAgICAgICAgICAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgICAgICAgICAgcmVzID0gZ2V0YWRkcmluZm8oaC0+aF9uYW1lLCBOVUxMLCAmaGludHMsICZhZGRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhcCA9IGFkZHI7IGFwOyBhcCA9IGFwLT5haV9uZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUNikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChhcC0+YWlfZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFwLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaV9hZGRyKS0+c2luNl9hZGRyLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIWFwKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgIm5vIEFGX0lORVQ2IGFkZHJlc3MgZm91bmQiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlYWRkcmluZm8oYWRkcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImdldGFkZHJpbmZvKCkgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgT0tGKGggJiYgKHN0cmNtcChoLT5oX25hbWUsICJsb2NhbGhvc3QiKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgKHJlcyA9PSAwICYmIG1lbWNtcChhZGRyLT5haV9hZGRyLCAmc2luNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNpbjZfYWRkcikpID09IDApKSwKKyAgICAgICAgICAgICAgICAoIjo6MSBsb29rdXAgKCVzIC0+ICVzKSIsIGggPyBoLT5oX25hbWUgOiAiKGZhaWxlZCkiLAorICAgICAgICAgICAgICAgICBidWYpKTsKKyAgICAgICAgICAgIHJhbl90ZXN0ID0gMTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZShzKTsKKyAgICB9CisgICAgaWYgKCFyYW5fdGVzdCkKKyAgICAgICAgT0tGKDEsICgiU2tpcHBlZCBJUHY2IHRlc3QiKSk7Cit9CisKK1NPQ0tfQ0xFQU5VUDsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNWludDY0X2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNWludDY0X2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjVmNGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE1aW50NjRfY2xpYi5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIEhFQURFUiBUZXN0aW5nIDY0LWJpdCBpbnRlZ2VyIG9wZXJhdGlvbnMgKFU2NCkuICovCisKK2ludCBpLCBqOworY2hhciBidWZbMjJdOworc3RhdGljIGNvbnN0IGludDY0X3QgaW50dmFsW10gPSB7CisgICAgMCwKKyAgICAtMSwKKyAgICAxLAorICAgIDM3LAorICAgIDB4N2ZmZmZmZmZVTCwKKyAgICAweDgwMDAwMDAwVUwsCisgICAgMHg5OTk5OTk5OVVMLAorICAgIDB4N2ZmZmZmZmZmZmZmZmZmZlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwMDBVTEwsCit9OworCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworICAgIFU2NCBhLCBiOworICAgIGEubG93ID0gKHVpbnQzMl90KWludHZhbFtpXTsKKyAgICBhLmhpZ2ggPSAodWludDMyX3QpKGludHZhbFtpXSA+PiAzMik7CisgICAgcHJpbnRJNjQoYnVmLCAmYSk7CisgICAgcmVhZDY0KCZiLCBidWYpOworICAgIE9LRihtZW1jbXAoJmEsICZiLCBzaXplb2YoYSkpID09IDAsCisgICAgICAgICgiWyVkXTogJSIgUFJJZDY0ICIgPD4gJXMgPD4gJSIgUFJJZDY0LCBpLCBpbnR2YWxbaV0sIGJ1ZiwKKyAgICAgICAgICgodWludDY0X3QpYi5oaWdoKSA8PCAzMiB8IGIubG93KSk7Cit9CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisgICAgZm9yIChqID0gaTsgaiA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2opIHsKKyAgICAgICAgVTY0IGEsIGI7CisgICAgICAgIHVpbnQ2NF90IGQ7CisgICAgICAgIGEubG93ID0gKHVpbnQzMl90KWludHZhbFtpXTsKKyAgICAgICAgYS5oaWdoID0gKHVpbnQzMl90KShpbnR2YWxbaV0gPj4gMzIpOworICAgICAgICBiLmxvdyA9ICh1aW50MzJfdClpbnR2YWxbal07CisgICAgICAgIGIuaGlnaCA9ICh1aW50MzJfdCkoaW50dmFsW2pdID4+IDMyKTsKKyAgICAgICAgdTY0SW5jcigmYSwgJmIpOworICAgICAgICBkID0gKHVpbnQ2NF90KWEuaGlnaCA8PCAzMiB8IGEubG93OworICAgICAgICBPS0YoaW50dmFsW2ldICsgaW50dmFsW2pdID09IGQsCisgICAgICAgICAgICAoIiUiIFBSSWQ2NCAiICsgJSIgUFJJZDY0ICIgPSAlIiBQUklkNjQgIiA8PiAlIiBQUklkNjQsIGludHZhbFtpXSwKKyAgICAgICAgICAgICBpbnR2YWxbal0sIGludHZhbFtpXSArIGludHZhbFtqXSwgZCkpOworICAgIH0KK30KKyAgICAgICAgCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworICAgIGZvciAoaiA9IGk7IGogPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytqKSB7CisgICAgICAgIFU2NCBhLCBiLCBjOworICAgICAgICB1aW50NjRfdCBkOworICAgICAgICBhLmxvdyA9ICh1aW50MzJfdClpbnR2YWxbaV07CisgICAgICAgIGEuaGlnaCA9ICh1aW50MzJfdCkoaW50dmFsW2ldID4+IDMyKTsKKyAgICAgICAgYi5sb3cgPSAodWludDMyX3QpaW50dmFsW2pdOworICAgICAgICBiLmhpZ2ggPSAodWludDMyX3QpKGludHZhbFtqXSA+PiAzMik7CisgICAgICAgIHU2NFN1YnRyYWN0KCZhLCAmYiwgJmMpOworICAgICAgICBkID0gKHVpbnQ2NF90KWMuaGlnaCA8PCAzMiB8IGMubG93OworICAgICAgICBPS0YoaW50dmFsW2ldIC0gaW50dmFsW2pdID09IGQsCisgICAgICAgICAgICAoIiUiIFBSSWQ2NCAiIC0gJSIgUFJJZDY0ICIgPSAlIiBQUklkNjQgIiA8PiAlIiBQUklkNjQsIGludHZhbFtpXSwKKyAgICAgICAgICAgICBpbnR2YWxbal0sIGludHZhbFtpXSAtIGludHZhbFtqXSwgZCkpOworICAgIH0KK30KKyAgICAgICAgCit7CisgICAgVTY0IG9sZF92YWwsIG5ld192YWw7CisgICAgb2xkX3ZhbC5sb3cgPSA3OworICAgIG9sZF92YWwuaGlnaCA9IDA7CisgICAgbmV3X3ZhbCA9IG9sZF92YWw7CisgICAgT0sobmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAoJm9sZF92YWwsICZuZXdfdmFsLCAwKSA9PSAwLCAiY3dyYXAxIik7CisgICAgbmV3X3ZhbC5sb3cgPSA4OworICAgIE9LKG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKCZvbGRfdmFsLCAmbmV3X3ZhbCwgMCkgPT0gMCwgImN3cmFwMiIpOworICAgIG5ld192YWwubG93ID0gNjsKKyAgICBPSyhuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcCgmb2xkX3ZhbCwgJm5ld192YWwsIDApID09IDMyLCAiY3dyYXAzIik7CisgICAgT0sobmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAoJm9sZF92YWwsICZuZXdfdmFsLCAxKSA9PSAzMgorICAgICAgICYmIG5ld192YWwubG93ID09IDYgJiYgbmV3X3ZhbC5oaWdoID09IDEsICJjd3JhcDQiKTsKKyAgICBvbGRfdmFsLmxvdyA9IDc7CisgICAgb2xkX3ZhbC5oaWdoID0gMHhmZmZmZmZmZlU7CisgICAgbmV3X3ZhbC5sb3cgPSA3OworICAgIG5ld192YWwuaGlnaCA9IG9sZF92YWwuaGlnaDsKKyAgICBPSyhuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcCgmb2xkX3ZhbCwgJm5ld192YWwsIDApID09IDAsICJjd3JhcDUiKTsKKyAgICBuZXdfdmFsLmxvdyA9IDg7CisgICAgT0sobmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAoJm9sZF92YWwsICZuZXdfdmFsLCAwKSA9PSAwLCAiY3dyYXA2Iik7CisgICAgbmV3X3ZhbC5sb3cgPSA2OworICAgIG5ld192YWwuaGlnaCA9IDA7CisgICAgT0sobmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAoJm9sZF92YWwsICZuZXdfdmFsLCAwKSA9PSA2NCwgImN3cmFwNyIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE2cmVhZF9jb25maWdfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE2cmVhZF9jb25maWdfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Y2VlZDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTZyZWFkX2NvbmZpZ19jbGliLmMKQEAgLTAsMCArMSw4MiBAQAorLyogSEVBREVSIFRlc3RpbmcgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoKS4gKi8KKworc3RydWN0IHJlYWRfY29uZmlnX3Rlc3RjYXNlIHsKKyAgICAvKgorICAgICAqIGlucHV0cyAKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICAgICAqKCpwZikgKGNvbnN0IGNoYXIgKiByZWFkZnJvbSwgdV9jaGFyICoqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbik7CisgICAgY29uc3QgY2hhciAgICAgKnJlYWRmcm9tOworICAgIHNpemVfdCAgICAgICAgICBvYnVmX2xlbjsKKworICAgIC8qCisgICAgICogZXhwZWN0ZWQgb3V0cHV0cyAKKyAgICAgKi8KKyAgICBzaXplX3QgICAgICAgICAgZXhwZWN0ZWRfb2Zmc2V0OworICAgIGNvbnN0IHVfY2hhciAgICpleHBlY3RlZF9vdXRwdXQ7CisgICAgc2l6ZV90ICAgICAgICAgIGV4cGVjdGVkX2xlbjsKK307CisKK3N0YXRpYyBjb25zdCB1X2NoYXIgb2J1ZjFbXSA9IHsgMSwgMCwgMiB9Oworc3RhdGljIGNvbnN0IHVfY2hhciBvYnVmMltdID0geyAnYScsICdiJywgJ2MnLCAwIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVhZF9jb25maWdfdGVzdGNhc2UgdGVzdF9pbnB1dFtdID0geworICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiIiwgICAgICAgICAgIDEsIC0xLCBOVUxMLCAgMCB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiMHgwIiwgICAgICAgIDEsIC0xLCBOVUxMLCAgMSB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiMHgwIDAiLCAgICAgIDEsIC0xLCBOVUxMLCAgMSB9LAorCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIweDAxMDAwMiIsICAgMSwgLTEsIE5VTEwsICAwIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIweDAxMDAwMiIsICAgMiwgLTEsIE5VTEwsICAwIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIweDAxMDAwMiIsICAgMywgLTEsIG9idWYxLCAwIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIweDAxMDAwMiIsICAgNCwgLTEsIG9idWYxLCAzIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIweDAxMDAwMiAwIiwgNCwgIDksIG9idWYxLCAzIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICIweDAxMDAwMiIsICAgMCwgLTEsIG9idWYxLCAzIH0sCisKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgImFiYyIsICAgICAgICAxLCAtMSwgTlVMTCwgIDAgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgImFiYyB6IiwgICAgICAxLCAgNCwgTlVMTCwgIDAgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgImFiYyIsICAgICAgICAyLCAtMSwgTlVMTCwgIDEgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgImFiYyIsICAgICAgICAzLCAtMSwgb2J1ZjIsIDIgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgImFiYyIsICAgICAgICA0LCAtMSwgb2J1ZjIsIDMgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgImFiYyB6IiwgICAgICA0LCAgNCwgb2J1ZjIsIDMgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgImFiYyIsICAgICAgICAwLCAtMSwgb2J1ZjIsIDMgfSwKK307CisKK3Vuc2lnbmVkIGludCBpLCBqLCBvazsKKworZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0X2lucHV0KSAvIHNpemVvZih0ZXN0X2lucHV0WzBdKTsgaSsrKSB7CisgICAgY29uc3Qgc3RydWN0IHJlYWRfY29uZmlnX3Rlc3RjYXNlICpjb25zdCBwID0gJnRlc3RfaW5wdXRbaV07CisgICAgc2l6ZV90ICAgICAgICAgIGxlbiA9IHAtPm9idWZfbGVuOworICAgIHVfY2hhciAgICAgICAgICpzdHIgPSBsZW4gPiAwID8gbWFsbG9jKGxlbikgOiBOVUxMOworICAgIGNvbnN0IGNoYXIgICAgICpyZXN1bHQ7CisgICAgc2l6ZV90ICAgICAgICAgIG9mZnNldDsKKworICAgIGZmbHVzaChzdGRvdXQpOworICAgIHJlc3VsdCA9IChwLT5wZikgKHAtPnJlYWRmcm9tLCAmc3RyLCAmbGVuKTsKKyAgICBvZmZzZXQgPSByZXN1bHQgPyByZXN1bHQgLSBwLT5yZWFkZnJvbSA6IC0xOworICAgIE9LRihvZmZzZXQgPT0gcC0+ZXhwZWN0ZWRfb2Zmc2V0LAorICAgICAgICAoInRlc3QgJWQ6IGV4cGVjdGVkIG9mZnNldCAlIiBORVRTTk1QX1BSSXogImQsIGdvdCBvZmZzZXQgJSIKKyAgICAgICAgIE5FVFNOTVBfUFJJeiAiZCIsIGksIHAtPmV4cGVjdGVkX29mZnNldCwgb2Zmc2V0KSk7CisgICAgaWYgKG9mZnNldCA9PSBwLT5leHBlY3RlZF9vZmZzZXQpIHsKKyAgICAgICAgT0tGKGxlbiA9PSBwLT5leHBlY3RlZF9sZW4sCisgICAgICAgICAgICAoInRlc3QgJWQ6IGV4cGVjdGVkIGxlbmd0aCAlIiBORVRTTk1QX1BSSXogImQsIGdvdCBsZW5ndGggJSIKKyAgICAgICAgICAgICBORVRTTk1QX1BSSXogImQiLCBpLCBwLT5leHBlY3RlZF9sZW4sIGxlbikpOworICAgICAgICBpZiAobGVuID09IHAtPmV4cGVjdGVkX2xlbikgeworICAgICAgICAgICAgb2sgPSBsZW4gPCAwIHx8ICFwLT5leHBlY3RlZF9vdXRwdXQKKyAgICAgICAgICAgICAgICB8fCBtZW1jbXAoc3RyLCBwLT5leHBlY3RlZF9vdXRwdXQsIGxlbikgPT0gMAorICAgICAgICAgICAgICAgIHx8IHAtPmV4cGVjdGVkX291dHB1dFtsZW5dICE9IDA7CisgICAgICAgICAgICBPS0Yob2ssICgidGVzdCAlZDogb3V0cHV0IGJ1ZmZlciBtaXNtYXRjaCIsIGkpKTsKKyAgICAgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkV4cGVjdGVkOiAiKTsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcC0+ZXhwZWN0ZWRfbGVuOyArK2opCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTAyeCAiLCBwLT5leHBlY3RlZF9vdXRwdXRbal0pOworICAgICAgICAgICAgICAgIHByaW50ZigiXG5BY3R1YWw6ICAgIik7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgKytqKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiUwMnggIiwgc3RyW2pdKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RyKQorICAgICAgICBmcmVlKHN0cik7Cit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTdzdHJ0b3VsbF9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTdzdHJ0b3VsbF9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiOWNhZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxN3N0cnRvdWxsX2NsaWIuYwpAQCAtMCwwICsxLDk0IEBACisvKiBIRUFERVIgVGVzdGluZyBzdHJ0b3VsbCgpLiAqLworCisjaWZkZWYgSEFWRV9TVFJUT1VMTAorCitPSygxLCAiU2tpcHBpbmcgc3RydG91bGwoKSB0ZXN0IGJlY2F1c2UgdXNpbmcgc3RydG91bGwoKSBmcm9tIEMgbGlicmFyeS5cbiIpOzsKKworI2Vsc2UKKworLyoKKyAqIFVJTlQ2NF9DOiBDOTkgbWFjcm8gZm9yIHRoZSBzdWZmaXggZm9yIHVpbnQ2NF90IGNvbnN0YW50cy4gCisgKi8KKyNpZm5kZWYgVUlOVDY0X0MKKyNpZmRlZiBfTVNDX1ZFUgorI2RlZmluZSBVSU5UNjRfQyhjKSBjIyN1aTY0CisjZWxzZQorI2RlZmluZSBVSU5UNjRfQyhjKSBjIyNVTEwKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBBY2NvcmRpbmcgdG8gdGhlIEM5OSBzdGFuZGFyZCwgdGhlIGNvbnN0YW50IFVMTE9OR19NQVggbXVzdCBiZSBkZWZpbmVkIGluCisgKiA8bGltaXRzLmg+LiBEZWZpbmUgaXQgaGVyZSBmb3IgcHJlLUM5OSBjb21waWxlcnMuCisgKi8KKyNpZm5kZWYgVUxMT05HX01BWAorI2RlZmluZSBVTExPTkdfTUFYIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZikKKyNlbmRpZgorCisjaWZuZGVmIFBSSXU2NAorI2lmZGVmIF9NU0NfVkVSCisjZGVmaW5lIFBSSXU2NCAiSTY0dSIKKyNlbHNlCisjZGVmaW5lIFBSSXU2NCAibGx1IgorI2VuZGlmCisjZW5kaWYKKworc3RydWN0IHN0cnRvdWxsX3Rlc3RjYXNlIHsKKyAgICAvKgorICAgICAqIGlucHV0cyAKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICAgICAqbnB0cjsKKyAgICBpbnQgICAgICAgICAgICAgYmFzZTsKKyAgICAvKgorICAgICAqIGV4cGVjdGVkIG91dHB1dHMgCisgICAgICovCisgICAgaW50ICAgICAgICAgICAgIGV4cGVjdGVkX2Vycm5vOworICAgIGludCAgICAgICAgICAgICBleHBlY3RlZF9lbmQ7CisgICAgdWludDY0X3QgICAgICAgIGV4cGVjdGVkX3Jlc3VsdDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RydG91bGxfdGVzdGNhc2UgdGVzdF9pbnB1dFtdID0geworICAgIHsiMHgwIiwgMCwgMCwgMywgMH0sCisgICAgeyIxIiwgMCwgMCwgMSwgMX0sCisgICAgeyIweDEiLCAwLCAwLCAzLCAxfSwKKyAgICB7IiAgLTA2NjYiLCAwLCAwLCA3LCAtMDY2Nn0sCisgICAgeyIgIC0weDY2NiIsIDAsIDAsIDgsIC0weDY2Nn0sCisgICAgeyIxODQ0Njc0NDA3MzcwOTU1MTYxNCIsIDAsIDAsIDIwLCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmUpfSwKKyAgICB7IjB4ZmZmZmZmZmZmZmZmZmZmZSIsIDAsIDAsIDE4LCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmUpfSwKKyAgICB7IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IiwgMCwgMCwgMjAsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZil9LAorICAgIHsiMHhmZmZmZmZmZmZmZmZmZmZmIiwgMCwgMCwgMTgsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZil9LAorICAgIHsiMTg0NDY3NDQwNzM3MDk1NTE2MTYiLCAwLCBFUkFOR0UsIDIwLCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpfSwKKyAgICB7IjB4MTAwMDAwMDAwMDAwMDAwMDAiLCAwLCBFUkFOR0UsIDE5LCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpfSwKKyAgICB7ImZmIiwgMTYsIDAsIDIsIDI1NX0sCisgICAgeyIweGZmIiwgMTYsIDAsIDQsIDI1NX0sCisgICAgeyIgIiwgMCwgMCwgMCwgMH0sCisgICAgeyIweCIsIDAsIDAsIDEsIDB9LAorICAgIHsiMHgiLCA4LCAwLCAxLCAwfSwKKyAgICB7IjB4IiwgMTYsIDAsIDEsIDB9LAorICAgIHsienl5eSIsIDAsIDAsIDAsIDB9LAorICAgIHsiMHhmZmZmZmZmZmZmZmZmZmZmZiIsIDAsIEVSQU5HRSwgMTksIFVMTE9OR19NQVh9LAorICAgIHsiMHhmZmZmZmZmZmZmZmZmZmZmZnoiLCAwLCBFUkFOR0UsIDE5LCBVTExPTkdfTUFYfQorfTsKKwordW5zaWduZWQgaW50ICAgIGk7CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdF9pbnB1dCkgLyBzaXplb2YodGVzdF9pbnB1dFswXSk7IGkrKykgeworICAgIGNvbnN0IHN0cnVjdCBzdHJ0b3VsbF90ZXN0Y2FzZSAqY29uc3QgcCA9ICZ0ZXN0X2lucHV0W2ldOworICAgIGNoYXIgICAgICAgICAgICplbmRwdHI7CisgICAgdWludDY0X3QgICAgICAgIHJlc3VsdDsKKworICAgIGVycm5vID0gMDsKKyAgICByZXN1bHQgPSBzdHJ0b3VsbChwLT5ucHRyLCAmZW5kcHRyLCBwLT5iYXNlKTsKKyAgICBPS0YoZXJybm8gPT0gcC0+ZXhwZWN0ZWRfZXJybm8sCisgICAgICAgICgidGVzdCAlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgZXJybm8gJWQsIGdvdCBlcnJubyAlZCIsCisgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9lcnJubywgZXJybm8pKTsKKyAgICBPS0YocmVzdWx0ID09IHAtPmV4cGVjdGVkX3Jlc3VsdCwKKyAgICAgICAgKCJ0ZXN0ICVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCByZXN1bHQgJSIgUFJJdTY0CisgICAgICAgICAiLCBnb3QgcmVzdWx0ICUiIFBSSXU2NCwKKyAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX3Jlc3VsdCwgcmVzdWx0KSk7CisgICAgT0tGKGVuZHB0ciAtIHAtPm5wdHIgPT0gcC0+ZXhwZWN0ZWRfZW5kLAorICAgICAgICAoInRlc3QgJWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIGVuZCAlZCwgZ290IGVuZCAlZCIsCisgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9lbmQsIChpbnQpIChlbmRwdHIgLSBwLT5ucHRyKSkpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxOHJlYWRfY29uZmlnX2NhcHAuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxOHJlYWRfY29uZmlnX2NhcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmE5MmM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE4cmVhZF9jb25maWdfY2FwcC5jCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogZXRpbWV0ZXN0LmMKKyAqCisgKiBIRUFERVIgVGVzdGluZyByZWFkX2NvbmZpZy5jIHNodXRkb3duIGNhbGxiYWNrCisgKgorICogRXhwZWN0ZWQgU1VDQ0VTU2VzIGZvciBhbGwgdGVzdHM6ICAgIDgKKyAqCisgKiBUZXN0IG9mIHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgICAgICAgICAgICAgICAgICAgIAlTVUNDRVNTZXM6ICA0CisgKiBUZXN0IG9mIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycwkgICAgICAgICAgICAgIAlTVUNDRVNTZXM6ICA0CisgKgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90ZXN0aW5nLmg+CisKKy8qICN1bmRlZiBURVNUX0lOVEVSTkFMX0FQSSAqLworI2RlZmluZSBURVNUX0lOVEVSTkFMX0FQSSAxCisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzLgorICovCitpbnQgY2FsbGJhY2tfY2FsbGVkID0gMDsKKworc3RhdGljIHZvaWQgdGVzdF9jYWxsYmFjayh2b2lkKTsKK3N0YXRpYyB2b2lkIHRlc3RfY2FsbGJhY2sodm9pZCkgeworCSsrY2FsbGJhY2tfY2FsbGVkOworfTsKKworc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKTsKK3N0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikgeworCS8qIGRvIG5vdGhpbmcgKi8KK307CisKKy8qIGVhY2ggdGVzdCByZXR1cm5zIDAgb24gc3VjY2VzcywgYW5kID4wIG9uIGZhaWx1cmUgKi8KK2ludCB0ZXN0MSh2b2lkKTsKK2ludCB0ZXN0Mih2b2lkKTsKK2ludCB0ZXN0Myh2b2lkKTsKKworaW50ICgqdGVzdHNbXSkodm9pZCkgPSB7IHRlc3QxLCB0ZXN0MiwgdGVzdDMgfTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgaSxyZXQ9MDsKKyAgICBmb3IoaT0wO2k8c2l6ZW9mKHRlc3RzKS9zaXplb2YoKnRlc3RzKTsrK2kpCisJICAgIHJldCs9dGVzdHNbaV0oKTsKKyAgICBpZiAoX19kaWRfcGxhbiA9PSAwKSB7CisgICAgICAgUExBTihfX3Rlc3RfY291bnRlcik7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2ludCB0ZXN0MSgpIHsKKyAgICBpbnQgc3VtID0gMDsKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyBzbm1wZF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIHRlc3RzXG4iKTsKKyAgICBpbml0X3NubXAoInRlc3RpbmciKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0wLCAoIkNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgYmVmb3JlIHJlZ2lzdGVyaW5nIGl0IC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoInRlc3RpbmciLCBwYXJzZV9jb25maWcsIHRlc3RfY2FsbGJhY2ssICJtb2R1bGUtbmFtZSBtb2R1bGUtcGF0aCIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTAsICgiQ2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBhZnRlciByZWdpc3RlcmluZyBpdCAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoInRlc3RpbmciKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0xLCAoIkNhbGxiYWNrIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UgYW5kIG9ubHkgb25jZSBhZnRlciB1bnJlZ2lzdGVyaW5nIGhhbmRsZXIgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIHNubXBfc2h1dGRvd24oInRlc3RpbmciKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0wLCAoIkNhbGxiYWNrIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UgYW5kIG9ubHkgb25jZSBhZnRlciBzaHV0ZG93biAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIHJldHVybiAoc3VtPT0xKT8wOjE7Cit9CisKK2ludCB0ZXN0Mih2b2lkKSB7CisgICAgaW50IHN1bSA9IDA7CisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzIHRlc3RzXG4iKTsKKyAgICBpbml0X3NubXAoInRlc3RpbmciKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0wLCAoIkNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgYmVmb3JlIHJlZ2lzdGVyaW5nIGl0IC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoInRlc3RpbmciLCBwYXJzZV9jb25maWcsIHRlc3RfY2FsbGJhY2ssICJtb2R1bGUtbmFtZSBtb2R1bGUtcGF0aCIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTAsICgiQ2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBhZnRlciByZWdpc3RlcmluZyBpdCAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgc25tcF9zaHV0ZG93bigidGVzdGluZyIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTEsICgiQ2FsbGJhY2sgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZSBhbmQgb25seSBvbmNlIGR1cmluZyBzaHV0ZG93biAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIHJldHVybiAoc3VtPT0xKT8wOjE7Cit9CisKK2ludCB0ZXN0Myh2b2lkKSB7CisjaWZkZWYgVEVTVF9JTlRFUk5BTF9BUEkKKyAgICBpbnQgc3VtID0gMDsKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMgaW50ZXJuYWwgYXBpIHRlc3RzXG4iKTsKKyAgICBpbml0X3NubXAoInRlc3RpbmciKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0wLCAoIkNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgYmVmb3JlIHJlZ2lzdGVyaW5nIGl0IC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoInRlc3RpbmciLCBwYXJzZV9jb25maWcsIHRlc3RfY2FsbGJhY2ssICJtb2R1bGUtbmFtZSBtb2R1bGUtcGF0aCIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTAsICgiQ2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBhZnRlciByZWdpc3RlcmluZyBpdCAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKCk7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MSwgKCJDYWxsYmFjayBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIGFuZCBvbmx5IG9uY2UgYWZ0ZXIgdW5yZWdpc3RlcmluZyBoYW5kbGVyIC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICBzbm1wX3NodXRkb3duKCJ0ZXN0aW5nIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MCwgKCJDYWxsYmFjayBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQgZHVyaW5nIHNodXRkb3duIGFmdGVyIHVucmVnaXN0ZXJpbmcgaGFuZGxlciAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIHJldHVybiAoc3VtPT0xKT8wOjE7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTlfc25tcF9zZXJ2aWNlX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxOV9zbm1wX3NlcnZpY2VfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZWM4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTlfc25tcF9zZXJ2aWNlX2NsaWIuYwpAQCAtMCwwICsxLDI1MyBAQAorLyogSEVBREVSIFRlc3RpbmcgZG9tYWluIGFuZCB0YXJnZXQgcmVnaXN0cmF0aW9ucyBmcm9tIHNubXBfc2VydmljZS4gKi8KKworLyogU2V0dXAgY29uZmlndXJhdGlvbiByZWFkaW5nICovCituZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUsICJ0ZXN0cHJvZyIpOworCituZXRzbm1wX3JlZ2lzdGVyX3NlcnZpY2VfaGFuZGxlcnMoKTsKKworbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0hBVkVfUkVBRF9DT05GSUcsIDEpOworCisvKiBDbGVhciBhbGwgZGVmYXVsdCB2YWx1ZXMgKi8KK25ldHNubXBfY2xlYXJfZGVmYXVsdF9kb21haW4oKTsKK25ldHNubXBfY2xlYXJfZGVmYXVsdF90YXJnZXQoKTsKKworLyogVGVzdCBkb21haW4gbG9va3VwICovCisKK09LKG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF9kb21haW4oImEiLCAiIikgPT0gMCwKKyAgICJyZWdpc3RlciBhbiBlbXB0eSB0b2tlbiBpbiBkb21haW4gJ2EnIik7CisKK09LKG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF9kb21haW4oImIiLCAiYWxmYSIpID09IDAsCisgICAgInJlZ2lzdGVyIGEgc2luZ2xlIHRva2VuIGluIGRvbWFpbiAnYiciKTsKKworT0sobmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X2RvbWFpbigiYyIsICJhbGZhIGJldGEiKSA9PSAwLAorICAgInJlZ2lzdGVyIHR3byB0b2tlbnMgaW4gZG9tYWluICdjJyIpOworCisjZGVmaW5lIE9LX1NUUkNNUChuYW1lLCB2YWx1ZSwgZXhwZWN0ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIE9LRih2YWx1ZSAhPSBOVUxMICYmIHN0cmNtcChleHBlY3RlZCwgdmFsdWUpID09IDAsICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoIkxvb2t1cCBvZiAnIiAjbmFtZSAiJyBleHBlY3RlZCAnIiBleHBlY3RlZCAiJywgZ290ICVzJXMlcyIsICAgICBcCisgICAgICAgdmFsdWUgPyAiJyIgOiAiIiwgdmFsdWUgPyB2YWx1ZSA6ICJOVUxMIiwgdmFsdWUgPyAiJyIgOiAiIikpCisKKyNkZWZpbmUgT0tfU1RSX0lTX05VTEwobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgT0tGKHZhbHVlID09IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICgiTG9va3VwIG9mICciICNuYW1lICInIGV4cGVjdGVkIE5VTEwsIGdvdCAlcyVzJXMiLCAgICAgICAgICAgICAgIFwKKyAgICAgICB2YWx1ZSA/ICInIiA6ICIiLCB2YWx1ZSA/IHZhbHVlIDogIk5VTEwiLCB2YWx1ZSA/ICInIiA6ICIiKSkKKworI2RlZmluZSBPS19JU19OVUxMKG5hbWUsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBPS0YodmFsdWUgPT0gTlVMTCwgKCJMb29rdXAgb2YgJyIgI25hbWUgIicgZXhwZWN0ZWQgTlVMTCwgZ290ICVwIiwgdmFsdWUpKQorCisjZGVmaW5lIE9LX0lTX05PVF9OVUxMKG5hbWUsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIE9LRih2YWx1ZSAhPSBOVUxMLCAoIkxvb2t1cCBvZiAnIiAjbmFtZSAiJyBleHBlY3RlZCBub24tTlVMTCwgZ290ICVwIiwgdmFsdWUpKQorCit7CisgIGNvbnN0IGNoYXIgKnQ7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJhIik7CisgIE9LX1NUUkNNUChhLCB0LCAiIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJiIik7CisgIE9LX1NUUkNNUChiLCB0LCAiYWxmYSIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiYyIpOworICBPS19TVFJDTVAoYywgdCwgImFsZmEiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImQiKTsKKyAgT0tfU1RSX0lTX05VTEwoZCwgdCk7Cit9CisKK3sKKyAgY29uc3QgY2hhciAqY29uc3QgKnQ7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucygiYSIpOworICBPS19JU19OT1RfTlVMTChhLCB0KTsKKyAgT0tfU1RSQ01QKGFbMF0sIHRbMF0sICIiKTsKKyAgT0tfU1RSX0lTX05VTEwoYVsxXSwgdFsxXSk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucygiYiIpOworICBPS19JU19OT1RfTlVMTChiLCB0KTsKKyAgT0tfU1RSQ01QKGJbMF0sIHRbMF0sICJhbGZhIik7CisgIE9LX1NUUl9JU19OVUxMKGJbMV0sIHRbMV0pOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoImMiKTsKKyAgT0tfSVNfTk9UX05VTEwoYywgdCk7CisgIE9LX1NUUkNNUChjWzBdLCB0WzBdLCAiYWxmYSIpOworICBPS19TVFJDTVAoY1sxXSwgdFsxXSwgImJldGEiKTsKKyAgT0tfU1RSX0lTX05VTEwoY1syXSwgdFsyXSk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucygiZCIpOworICBPS19JU19OVUxMKGQsIHQpOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmRG9tYWluPWIgZ2FtbWEiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgInJlZ2lzdGVyIHVzZXIgZG9tYWluIGZvciAnYiciKTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZkRvbWFpbj1jIGdhbW1hIGRlbHRhIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJyZWdpc3RlciB1c2VyIGRvbWFpbnMgZm9yICdjJyIpOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmRG9tYWluPWIyIGdhbW1hIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJyZWdpc3RlciB1c2VyIGRvbWFpbiBmb3IgJ2IyJyIpOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmRG9tYWluPWMyIGdhbW1hIGRlbHRhIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJyZWdpc3RlciB1c2VyIGRvbWFpbnMgZm9yICdjMiciKTsKK30KKworeworICBjb25zdCBjaGFyICp0OworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiYiIpOworICBPS19TVFJDTVAoYiwgdCwgImdhbW1hIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJiMiIpOworICBPS19TVFJDTVAoYjIsIHQsICJnYW1tYSIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiYyIpOworICBPS19TVFJDTVAoYywgdCwgImdhbW1hIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJjMiIpOworICBPS19TVFJDTVAoYzIsIHQsICJnYW1tYSIpOworfQorCit7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICp0OworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoImIiKTsKKyAgT0tfSVNfTk9UX05VTEwoYiwgdCk7CisgIE9LX1NUUkNNUChiWzBdLCB0WzBdLCAiZ2FtbWEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYlsxXSwgdFsxXSk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucygiYjIiKTsKKyAgT0tfSVNfTk9UX05VTEwoYjIsIHQpOworICBPS19TVFJDTVAoYjJbMF0sIHRbMF0sICJnYW1tYSIpOworICBPS19TVFJfSVNfTlVMTChiMlsxXSwgdFsxXSk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWlucygiYyIpOworICBPS19JU19OT1RfTlVMTChjLCB0KTsKKyAgT0tfU1RSQ01QKGNbMF0sIHRbMF0sICJnYW1tYSIpOworICBPS19TVFJDTVAoY1sxXSwgdFsxXSwgImRlbHRhIik7CisgIE9LX1NUUl9JU19OVUxMKGNbMl0sIHRbMl0pOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoImMyIik7CisgIE9LX0lTX05PVF9OVUxMKGMyLCB0KTsKKyAgT0tfU1RSQ01QKGMyWzBdLCB0WzBdLCAiZ2FtbWEiKTsKKyAgT0tfU1RSQ01QKGMyWzFdLCB0WzFdLCAiZGVsdGEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYzJbMl0sIHRbMl0pOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmRG9tYWluPSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAiRW1wdHkgY29uZmlnIGxpbmUiKTsKK30KKworeworICBjb25zdCBjaGFyKiB0OworICBjaGFyIGNmZ1tdID0gImRlZkRvbWFpbj1lIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJJbmNvbXBsZXRlIGNvbmZpZyBsaW5lIik7CisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiZSIpOworICBPS19TVFJfSVNfTlVMTChlLCB0KTsKK30KKworLyogVGVzdCB0YXJnZXQgbG9va3VwICovCisKK09LKG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoImIiLCAiYWxmYSIsICJhbGZhLWRvbWFpbjpiIikgPT0gMCwKKyAgICJyZWdpc3RlciBhICdhbGZhOmFsZmEtZG9tYWluOmInIGZvciBhcHBsaWNhdGlvbiAnYiciKTsKKworT0sobmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgiYiIsICJiZXRhIiwgImJldGEtZG9tYWluOmIiKSA9PSAwLAorICAgInJlZ2lzdGVyIGEgJ2JldGE6YmV0YS1kb21haW46YicgZm9yIGFwcGxpY2F0aW9uICdiJyIpOworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJjIiwgImFsZmEiLCAiYWxmYS1kb21haW46YyIpID09IDAsCisgICAicmVnaXN0ZXIgYSAnYWxmYTphbGZhLWRvbWFpbjpjJyBmb3IgYXBwbGljYXRpb24gJ2MnIik7CisKK3sKKyAgY29uc3QgY2hhciAqdDsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImIiLCAiYWxmYSIpOworICBPS19TVFJDTVAoYjphbGZhLCB0LCAiYWxmYS1kb21haW46YiIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYiIsICJiZXRhIik7CisgIE9LX1NUUkNNUChiOmJldGEsIHQsICJiZXRhLWRvbWFpbjpiIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJjIiwgImFsZmEiKTsKKyAgT0tfU1RSQ01QKGM6YWxmYSwgdCwgImFsZmEtZG9tYWluOmMiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImEiLCAiYWxmYSIpOworICBPS19TVFJfSVNfTlVMTChhOmFsZmEsIHQpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYiIsICJnYW1tYSIpOworICBPS19TVFJfSVNfTlVMTChiOmdhbW1hLCB0KTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImMiLCAiYmV0YSIpOworICBPS19TVFJfSVNfTlVMTChjOmJldGEsIHQpOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmVGFyZ2V0PWIgYWxmYSB1c2VyLWFsZmE6YiI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLAorICAgICAicmVnaXN0ZXIgdXNlciB0YXJnZXQgJ2FsZmE6dXNlci1hbGZhOmInIGZvciBhcHBsaWNhdGlvbiAnYiciKTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZlRhcmdldD1iIGdhbW1hIHVzZXItZ2FtbWE6YiI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLAorICAgICAicmVnaXN0ZXIgdXNlciB0YXJnZXQgJ2dhbW1hOnVzZXItZ2FtbWE6YicgZm9yIGFwcGxpY2F0aW9uICdiJyIpOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmVGFyZ2V0PWMgYWxmYSB1c2VyLWFsZmE6YyI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLAorICAgICAicmVnaXN0ZXIgdXNlciB0YXJnZXQgJ2FsZmE6dXNlci1hbGZhOmMnIGZvciBhcHBsaWNhdGlvbiAnYyciKTsKK30KKworCit7CisgIGNvbnN0IGNoYXIgKnQ7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImFsZmEiKTsKKyAgT0tfU1RSQ01QKGI6YWxmYSwgdCwgInVzZXItYWxmYTpiIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImJldGEiKTsKKyAgT0tfU1RSQ01QKGI6YmV0YSwgdCwgImJldGEtZG9tYWluOmIiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImMiLCAiYWxmYSIpOworICBPS19TVFJDTVAoYzphbGZhLCB0LCAidXNlci1hbGZhOmMiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImEiLCAiYWxmYSIpOworICBPS19TVFJfSVNfTlVMTChhOmFsZmEsIHQpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYiIsICJnYW1tYSIpOworICBPS19TVFJDTVAoYjpnYW1tYSwgdCwgInVzZXItZ2FtbWE6YiIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYiIsICJkZWx0YSIpOworICBPS19TVFJfSVNfTlVMTChiOmRlbHRhLCB0KTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImMiLCAiYmV0YSIpOworICBPS19TVFJfSVNfTlVMTChjOmJldGEsIHQpOworfQorCit7CisgIGNoYXIgY2ZnW10gPSAiZGVmVGFyZ2V0PSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAiRW1wdHkgY29uZmlnIGxpbmUiKTsKK30KKworeworICBjb25zdCBjaGFyKiB0OworICBjaGFyIGNmZ1tdID0gImRlZlRhcmdldD1lMSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAiSW5jb21wbGV0ZSBjb25maWcgbGluZSAjMSIpOworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImUxIiwgIiIpOworICBPS19TVFJfSVNfTlVMTChlMTosIHQpOworfQorCit7CisgIGNvbnN0IGNoYXIqIHQ7CisgIGNoYXIgY2ZnW10gPSAiZGVmVGFyZ2V0PWUyIG9tZWdhIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJJbmNvbXBsZXRlIGNvbmZpZyBsaW5lICMyIik7CisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiZTIiLCAib21lZ2EiKTsKKyAgT0tfU1RSX0lTX05VTEwoZTI6b21lZ2EsIHQpOworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIwbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZV9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2ZmM4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZV9jbGliLmMKQEAgLTAsMCArMSw4MiBAQAorLyogSEVBREVSIFRlc3RpbmcgbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlKCkgKi8KKworc3RhdGljIGNvbnN0IG9pZCBvYmppZDFbXSA9IHsKKyAgICAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSwgMSwgMSwgNCwgMTI3LCAwLCAwLCAwLCA4Cit9Oworc3RhdGljIGNvbnN0IG9pZCBvYmppZDJbXSA9IHsKKyAgICAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSwgMSwgMiwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMSwgMTI4Cit9Oworc3RhdGljIGNvbnN0IG9pZCBvYmppZDNbXSA9IHsKKyAgICAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSwgMSwgMSwgNCwgMjU1LCAyNTUsIDI1NSwgMjU1LCA4Cit9Oworc3RhdGljIGNvbnN0IG9pZCBvYmppZDRbXSA9IHsKKyAgICAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSwgMSwgMiwgMTYsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAxMjgKK307CitzdGF0aWMgY29uc3Qgb2lkIG9iamlkNVtdID0geworICAgIDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1LCAxLCAxLCA0LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDgKK307CitzdGF0aWMgY29uc3Qgb2lkIG9iamlkNltdID0geworICAgIDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1LCAxLCAyLCAxNiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LAorICAgIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDEyOAorfTsKK3N0YXRpYyBjb25zdCBvaWQgb2JqaWQ3W10gPSB7CisgICAgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzIsIDEsIDUsIDEsIDEsIDQsIC0xLCAtMSwgLTEsIC0xLCA4Cit9Oworc3RhdGljIGNvbnN0IG9pZCBvYmppZDhbXSA9IHsKKyAgICAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSwgMSwgMiwgMTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEyOAorCit9Oworc3RydWN0IG9iamlkX2RhdGEgeyBvaWQgY29uc3QgKm9pZDsgaW50IGxlbjsgY29uc3QgY2hhciAqc3RyOyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmppZF9kYXRhIG9iamlkX2FycmF5W10gPSB7CisgICAgeyBvYmppZDEsIHNpemVvZihvYmppZDEpIC8gc2l6ZW9mKG9iamlkMVswXSksCisgICAgICAiSVAtTUlCOjppcEFkZHJlc3NQcmVmaXhPcmlnaW4uMS5pcHY0LlwiMTI3LjAuMC4wXCIuOCIgfSwKKyAgICB7IG9iamlkMiwgc2l6ZW9mKG9iamlkMikgLyBzaXplb2Yob2JqaWQyWzBdKSwKKyAgICAgICJJUC1NSUI6OmlwQWRkcmVzc1ByZWZpeE9yaWdpbi4xLmlwdjYuIgorICAgICAgIlwiMDA6MDA6MDA6MDA6MDA6MDA6MDA6MDA6MDA6MDA6MDA6MDA6MDA6MDA6MDA6MDFcIi4xMjgiIH0sCisgICAgeyBvYmppZDMsIHNpemVvZihvYmppZDMpIC8gc2l6ZW9mKG9iamlkM1swXSksCisgICAgICAiSVAtTUlCOjppcEFkZHJlc3NQcmVmaXhPcmlnaW4uMS5pcHY0LlwiMjU1LjI1NS4yNTUuMjU1XCIuOCIgfSwKKyAgICB7IG9iamlkNCwgc2l6ZW9mKG9iamlkNCkgLyBzaXplb2Yob2JqaWQ0WzBdKSwKKyAgICAgICJJUC1NSUI6OmlwQWRkcmVzc1ByZWZpeE9yaWdpbi4xLmlwdjYuIgorICAgICAgIlwiZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmZcIi4xMjgiIH0sCisgICAgeyBvYmppZDUsIHNpemVvZihvYmppZDUpIC8gc2l6ZW9mKG9iamlkNVswXSksCisgICAgICAiSVAtTUlCOjppcEFkZHJlc3NQcmVmaXhPcmlnaW4uMS5pcHY0LlwiLi4uLlwiLjgiIH0sCisgICAgeyBvYmppZDYsIHNpemVvZihvYmppZDYpIC8gc2l6ZW9mKG9iamlkNlswXSksCisgICAgICAiSVAtTUlCOjppcEFkZHJlc3NQcmVmaXhPcmlnaW4uMS5pcHY2LlwiLi4uLi4uLi4uLi4uLi4uLlwiLjEyOCIgfSwKKyAgICB7IG9iamlkNywgc2l6ZW9mKG9iamlkNykgLyBzaXplb2Yob2JqaWQ3WzBdKSwKKyAgICAgICJJUC1NSUI6OmlwQWRkcmVzc1ByZWZpeE9yaWdpbi4xLmlwdjQuXCIuLi4uXCIuOCIgfSwKKyAgICB7IG9iamlkOCwgc2l6ZW9mKG9iamlkOCkgLyBzaXplb2Yob2JqaWQ4WzBdKSwKKyAgICAgICJJUC1NSUI6OmlwQWRkcmVzc1ByZWZpeE9yaWdpbi4xLmlwdjYuXCIuLi4uLi4uLi4uLi4uLi4uXCIuMTI4IiB9LAorfTsKK3N0cnVjdCB0cmVlICp0cmVlOworY2hhciAqYnVmOworc2l6ZV90IGJ1Zl9sZW4sIG91dF9sZW47CitpbnQgYnVmX292ZXJmbG93LCBpOworY2hhciBtaWJkaXJbUEFUSF9NQVhdOworCitzbnByaW50ZihtaWJkaXIsIHNpemVvZihtaWJkaXIpLCAiJXMvJXMiLCBBQlNfU1JDRElSLCAibWlicyIpOworbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfTUlCRElSUywgbWliZGlyKTsKKworaW5pdF9zbm1wKCJUMDIwIik7CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2Yob2JqaWRfYXJyYXkpIC8gc2l6ZW9mKG9iamlkX2FycmF5WzBdKTsgaSsrKSB7CisgICAgYnVmID0gTlVMTDsKKyAgICBidWZfbGVuID0gb3V0X2xlbiA9IGJ1Zl9vdmVyZmxvdyA9IDA7CisgICAgdHJlZSA9IG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZSgodV9jaGFyICoqKSAmYnVmLCAmYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRfbGVuLCAxLyphbGxvd19yZWFsbG9jKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmX292ZXJmbG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqaWRfYXJyYXlbaV0ub2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqaWRfYXJyYXlbaV0ubGVuKTsKKyAgICBPSyghIW9iamlkX2FycmF5W2ldLnN0ciA9PSAhIXRyZWUsCisgICAgICAgIm5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZSgpIHJldHVybiB2YWx1ZSIpOworICAgIGlmIChvYmppZF9hcnJheVtpXS5zdHIgJiYgdHJlZSkgeworICAgICAgICBPS0Yoc3RyY21wKG9iamlkX2FycmF5W2ldLnN0ciwgYnVmKSA9PSAwLAorICAgICAgICAgICAgKCJNaXNtYXRjaDogZXhwZWN0ZWQgJXMgYnV0IGdvdCAlcyIsIG9iamlkX2FycmF5W2ldLnN0ciwKKyAgICAgICAgICAgICBidWYgPyAoY29uc3QgY2hhciAqKWJ1ZiA6ICIoTlVMTCkiKSk7CisgICAgfQorICAgIGZyZWUoYnVmKTsKK30KKworc25tcF9zaHV0ZG93bigiVDAyMCIpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIxYmluYXJ5X2FycmF5X29pZF9kdXBsaWNhdGVzX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMWJpbmFyeV9hcnJheV9vaWRfZHVwbGljYXRlc19jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyNzMyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMWJpbmFyeV9hcnJheV9vaWRfZHVwbGljYXRlc19jbGliLmMKQEAgLTAsMCArMSw3MiBAQAorLyogSEVBREVSIFRlc3RpbmcgZHVwbGljYXRlIGhhbmRsaW5nIGluIGJpbmFyeSBPSUQgYXJyYXkgKi8KKworLyogTXVjaCBjb3BpZWQgZnJvbSBUMDEyICovCitzdGF0aWMgY29uc3QgY2hhciB0ZXN0X25hbWVbXSA9ICJiaW5hcnktYXJyYXktb2YtT0lEcy1kdXBsaWNhdGUtdGVzdCI7CitvaWQgbzEgPSAxOworb2lkIG8yID0gMjsKK29pZCBvMyA9IDY7CitvaWQgbzQgPSA4Oworb2lkIG81ID0gOTsKK29pZCBveCA9IDc7CitvaWQgb3kgPSAxMDsKK25ldHNubXBfaW5kZXggaTEsIGkyLCBpMywgaTQsIGk1LCBpeCwgaXksICppcDsKK25ldHNubXBfaW5kZXggKmJbXSA9IHsgJmk0LCAmaTIsICZpMywgJmkxLCAmaTUgfTsKK25ldHNubXBfY29udGFpbmVyICpjOworaW50IGk7CisKK2luaXRfc25tcCh0ZXN0X25hbWUpOworCitjID0gbmV0c25tcF9jb250YWluZXJfZ2V0X2JpbmFyeV9hcnJheSgpOworYy0+Y29tcGFyZSA9IG5ldHNubXBfY29tcGFyZV9uZXRzbm1wX2luZGV4OworbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQoYywgMSwKKwkJCQkgQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTKTsKKworaTEub2lkcyA9ICZvMTsKK2kyLm9pZHMgPSAmbzI7CitpMy5vaWRzID0gJm8zOworaTQub2lkcyA9ICZvNDsKK2k1Lm9pZHMgPSAmbzU7CitpeC5vaWRzID0gJm94OworaXkub2lkcyA9ICZveTsKK2kxLmxlbiA9IGkyLmxlbiA9IGkzLmxlbiA9IGk0LmxlbiA9IGk1LmxlbiA9IGl4LmxlbiA9IGl5LmxlbiA9IDE7CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YoYikvc2l6ZW9mKGJbMF0pOyArK2kpCisgICAgQ09OVEFJTkVSX0lOU0VSVChjLCBiW2ldKTsKKworI2RlZmluZSBNQVhfUk9VTkRTIDYKKy8qIEluc2VydCBzb21lIGR1cGxpY2F0ZXMgb2YgaTQ7IGFsc28gaW5zZXJ0IGEgZHVwbGljYXRlIG9mCisgKiBpMSB0byBtb3ZlIHRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkgYXJvdW5kLiAqLworZm9yIChpID0gMDsgaSA8IE1BWF9ST1VORFM7ICsraSkgeworICAgIHN3aXRjaCAoaSkgeworCWNhc2UgMDoKKwkgICAgLyogRmlyc3Qgcm91bmQ6IG5vIGluc2VydCAqLworCSAgICBicmVhazsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDU6CisJICAgIC8qIEluc2VydCBhbm90aGVyIGR1cGxpY2F0ZSBvZiBvdXIgdGFyZ2V0IG9iamVjdCAqLworCSAgICBDT05UQUlORVJfSU5TRVJUKGMsICZpNCk7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgLyogSW5zZXJ0IGEgZHVsaWNhdGUgb2YgYW4gZWFybGllciBPSUQsIHNvIHRoYXQgaXQKKwkgICAgICogY2hhbmdlcyB0aGUgYmluYXJ5IHNlYXJjaCBiZWhhdmlvciAqLworCSAgICBDT05UQUlORVJfSU5TRVJUKGMsICZpMSk7CisJICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBQcmltYXJ5IHJlcXVpcmVtZW50OiBnZXRuZXh0IHJldHVybnMgdGhlIG5leHQgdmFsdWUhICovCisgICAgaXAgPSBDT05UQUlORVJfRklORChjLCAmaTQpOworICAgIE9LRihpcCwgKCJGSU5EIHJldHVybmVkIGEgdmFsdWUiKSk7CisgICAgT0tGKGMtPmNvbXBhcmUoJmk0LCBpcCkgPT0gMCwKKyAgICAgICAgKCJGSU5EIHJldHVybmVkIG9pZCAlIiBORVRTTk1QX1BSSW8gImQiLCBpcC0+b2lkc1swXSkpOworICAgIGlwID0gQ09OVEFJTkVSX05FWFQoYywgJmk0KTsKKyAgICBPS0YoaXAsICgiTkVYVCByZXR1cm5lZCBhIHZhbHVlIikpOworICAgIE9LRihjLT5jb21wYXJlKCZpNSwgaXApID09IDAsCisgICAgICAgICgiTkVYVCByZXR1cm5lZCBpbmRleCA1ID0gJSIgTkVUU05NUF9QUklvICJkIiwgaTUub2lkc1swXSkpOworfQorCit3aGlsZSAoKGlwID0gQ09OVEFJTkVSX0ZJUlNUKGMpKSkKKyAgQ09OVEFJTkVSX1JFTU9WRShjLCBpcCk7CitDT05UQUlORVJfRlJFRShjKTsKKworc25tcF9zaHV0ZG93bih0ZXN0X25hbWUpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDIxbmV0c25tcF9zcHJpbnRfcmVhbGxvY19ub190eXBlX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMW5ldHNubXBfc3ByaW50X3JlYWxsb2Nfbm9fdHlwZV9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3OTNkNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMW5ldHNubXBfc3ByaW50X3JlYWxsb2Nfbm9fdHlwZV9jbGliLmMKQEAgLTAsMCArMSw1MSBAQAorLyogSEVBREVSIFRlc3Qgc3ByaW50X3JlYWxsb2NfdmFyaWFibGUgd2l0aCAtT1EgKi8KKworLyoKKyAqIENoZWNrIHRoYXQgc3ByaW50X3JlYWxsb2NfdmFyaWFibGUgZG9lcyBub3QgY3Jhc2ggd2hlbiBpdCBwcmludHMKKyAqIGEgdmFyaWFibGUgd2l0aCBOVUxMIHR5cGUsIHdoaWxlIE1JRyBzYXlzIGl0J3MgZGlmZmVyZW50IHR5cGUgKElOVEVHRVIsIC4uLikuCisgKiBXZSB3aWxsIHVzZSBNSUIgZGVmaW5pdGlvbiBvZiBubG1Mb2dWYXJpYWJsZVRhYmxlLCB3aGljaCBoYXMgYSBjb2x1bW4KKyAqIGZvciBtb3N0IG9mIHRoZSBNSUIgdHlwZXMuCisgKi8KK3N0YXRpYyBvaWQgb2JqaWRbXSA9IHsKKyAgICAgICAgMSwgMywgNiwgMSwgMiwgMSwgOTIsIDEsIDMsIDIsIDEsIDQKK307CisKK3VfY2hhciAqYnVmOworc2l6ZV90IGJ1Zl9sZW4sIG91dF9sZW47CitpbnQgYnVmX292ZXJmbG93LCBpOworY2hhciBtaWJkaXJbUEFUSF9NQVhdOworaW50IHJldDsKKworc25wcmludGYobWliZGlyLCBzaXplb2YobWliZGlyKSwgIiVzLyVzIiwgQUJTX1NSQ0RJUiwgIm1pYnMiKTsKK25ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX01JQkRJUlMsIG1pYmRpcik7CituZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfUVVJQ0tFX1BSSU5ULCBUUlVFKTsKKworaW5pdF9zbm1wKCJUMDIxIik7CisKK25ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJpYWJsZTsKK3ZhcmlhYmxlLm5leHRfdmFyaWFibGUgPSBOVUxMOwordmFyaWFibGUubmFtZSA9IG9iamlkOwordmFyaWFibGUubmFtZV9sZW5ndGggPSBzaXplb2Yob2JqaWQpIC8gc2l6ZW9mKG9iamlkWzBdKTsKK3ZhcmlhYmxlLnR5cGUgPSBBU05fTlVMTDsKK3ZhcmlhYmxlLnZhbC5pbnRlZ2VyID0gTlVMTDsKK3ZhcmlhYmxlLnZhbF9sZW4gPSAwOworCisKK2J1ZiA9IE5VTEw7CitidWZfbGVuID0gb3V0X2xlbiA9IGJ1Zl9vdmVyZmxvdyA9IDA7CisKKy8qIFRyeSB0byBmb3JtYXQgdmFyaWFibGUgd2l0aCBubG1Mb2dWYXJpYWJsZUVudHJ5LjQgLSBubG1Mb2dWYXJpYWJsZUVudHJ5LjExCisgKiBPSURzIGFuZCB3aXRoIE5VTEwgdHlwZS4KKyAqLworZm9yIChpPTQ7IGk8PTExOyBpKyspIHsKKyAgICBidWYgPSBOVUxMOworICAgIGJ1Zl9sZW4gPSBvdXRfbGVuID0gYnVmX292ZXJmbG93ID0gMDsKKyAgICBvYmppZFsxMV0gPSBpOworICAgIHJldCA9IHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlKCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwgMSwgb2JqaWQsCisgICAgICAgICAgICBzaXplb2Yob2JqaWQpIC8gc2l6ZW9mKG9iamlkWzBdKSwgJnZhcmlhYmxlKTsKKyAgICBPS0YocmV0ID09IDEsICgic3ByaW50X3JlYWxsb2NfdmFyaWFibGUgZm9yICVkIHJldHVybmVkICVkOiAlcywgZXhwZWN0ZWQgMSIsCisgICAgICAgICAgICBpLCByZXQsIGJ1ZikpOworICAgIGZyZWUoYnVmKTsKK30KKworc25tcF9zaHV0ZG93bigiVDAyMSIpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAxcGR1X3R5cGVfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAxcGR1X3R5cGVfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWFhNjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDFwZHVfdHlwZV9jbGliLmMKQEAgLTAsMCArMSwxMyBAQAorLyogSEVBREVSIFBEVSB0eXBlIGRlc2NyaXB0aW9ucyAqLworY29uc3QgY2hhciAqcGR1X2Rlc2NyaXB0aW9uOworcGR1X2Rlc2NyaXB0aW9uID0gc25tcF9wZHVfdHlwZShTTk1QX01TR19HRVQpOworT0tGKChzdHJjbXAocGR1X2Rlc2NyaXB0aW9uLCAiR0VUIikgPT0gMCksCisgICAgKCJTTk1QIEdFVCBQRFUgdHlwZSBkaWQgbm90IHJldHVybiB0aGUgZXhwZWN0ZWQgaWRlbnRpZmllciAoR0VUKTogJXMiLAorICAgICBwZHVfZGVzY3JpcHRpb24pKTsKKworI2lmZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorcGR1X2Rlc2NyaXB0aW9uID0gc25tcF9wZHVfdHlwZSgxNjMpOworT0tGKChzdHJjbXAocGR1X2Rlc2NyaXB0aW9uLCAiPzB4QTM/IikgPT0gMCksCisgICAgKCJTTk1QIFNFVCBQRFUgdHlwZSBkaWQgbm90IHJldHVybiB0aGUgZXhwZWN0ZWQgdW5rbm93biBpZGVudGlmaWVyICg/MHhBMz8pOiAlcyIsCisgICAgIHBkdV9kZXNjcmlwdGlvbikpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZiYTY5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmMKQEAgLTAsMCArMSw2NyBAQAorLyogSEVBREVSIFBEVSBidWlsZGluZyAqLworCitTT0NLX1NUQVJUVVA7CisKK25ldHNubXBfcGR1ICpwZHU7Cit1X2NoYXIgKnBhY2tldDsKK3NpemVfdCBwYWNrZXRfbGVuLCBvZmZzZXQgPSAwOworbmV0c25tcF9zZXNzaW9uIHNlc3Npb24sICpzczsKK2ludCByYzsKKworLyogcHJvdG90eXBlIGNvcGllZCBmcm9tIHNubXBfYXBpLmMgKi8KK2ludCAgICAgICAgICAgICBzbm1wX2J1aWxkKHVfY2hhciAqKiBwa3QsIHNpemVfdCAqIHBrdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvZmZzZXQsIG5ldHNubXBfc2Vzc2lvbiAqIHBzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUpOworCitpbml0X3NubXAoInRlc3RpbmciKTsKK3NubXBfc2Vzc19pbml0KCZzZXNzaW9uKTsKK3Nlc3Npb24udmVyc2lvbiA9IFNOTVBfVkVSU0lPTl8yYzsKK3Nlc3Npb24ucGVlcm5hbWUgPSBzdHJkdXAoInVkcDoxMjcuMC4wLjEiKTsgLyogd2Ugd29uJ3QgYWN0dWFsbHkgY29ubmVjdCAqLworc2Vzc2lvbi5jb21tdW5pdHkgPSAodV9jaGFyICopIHN0cmR1cCgiYm9ndXMiKTsKK3Nlc3Npb24uY29tbXVuaXR5X2xlbiA9IHN0cmxlbigoY2hhciAqKSBzZXNzaW9uLmNvbW11bml0eSk7CitzcyA9IHNubXBfb3Blbigmc2Vzc2lvbik7CisKK09LRigoc3MgIT0gTlVMTCksICgiQ3JlYXRpbmcgYSBzZXNzaW9uIGZhaWxlZCIpKTsKK2lmIChzcyA9PSBOVUxMKQorICAgIHNubXBfcGVycm9yKCJhY2siKTsKKworcGFja2V0X2xlbiA9IDQwOTY7CitwYWNrZXQgPSBtYWxsb2MocGFja2V0X2xlbik7CisKK3BkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19HRVQpOworcGR1LT52ZXJzaW9uID0gc2Vzc2lvbi52ZXJzaW9uOworCitPS0YoKHBkdSAhPSBOVUxMKSwgKCJDcmVhdGluZyBhIEdFVCBQRFUgZmFpbGVkIikpOworCityYyA9IHNubXBfYnVpbGQoJnBhY2tldCwgJnBhY2tldF9sZW4sICZvZmZzZXQsIHNzLCBwZHUpOworCisjaWZuZGVmIE5FVFNOTVBfTk9USUZZX09OTFkKK09LRigocmMgPT0gU05NUEVSUl9TVUNDRVNTKSwKKyAgICAoIkJ1aWxkaW5nIGEgR0VUIFBEVS9wYWNrZXQgc2hvdWxkIGhhdmUgd29ya2VkOiAlZCIsIHJjKSk7CisjZWxzZSAvKiBORVRTTk1QX05PVElGWV9PTkxZICovCitPS0YoKHJjICE9IFNOTVBFUlJfU1VDQ0VTUyksCisgICAgKCJCdWlsZGluZyBhIEdFVCBQRFUvcGFja2V0IHNob3VsZCBoYXZlIGZhaWxlZDogJWQiLCByYykpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9USUZZX09OTFkgKi8KKworb2Zmc2V0ID0gMDsKK3BkdS0+Y29tbWFuZCA9IDE2MzsgLyogYSBTRVQgbWVzc2FnZSAqLworcmMgPSBzbm1wX2J1aWxkKCZwYWNrZXQsICZwYWNrZXRfbGVuLCAmb2Zmc2V0LCBzcywgcGR1KTsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK09LRigocmMgPT0gU05NUEVSUl9TVUNDRVNTKSwKKyAgICAoIkJ1aWxkaW5nIGEgU0VUIFBEVS9wYWNrZXQgc2hvdWxkIGhhdmUgc3VjY2VlZGVkOiAlZCIsIHJjKSk7CisjZWxzZSAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KK09LRigocmMgIT0gU05NUEVSUl9TVUNDRVNTKSwKKyAgICAoIkJ1aWxkaW5nIGEgU0VUIFBEVS9wYWNrZXQgc2hvdWxkIGhhdmUgZmFpbGVkOiAlZCIsIHJjKSk7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKworCitvZmZzZXQgPSAwOworcGR1LT5jb21tYW5kID0gU05NUF9NU0dfSU5GT1JNOworcmMgPSBzbm1wX2J1aWxkKCZwYWNrZXQsICZwYWNrZXRfbGVuLCAmb2Zmc2V0LCBzcywgcGR1KTsKKworT0tGKChyYyA9PSBTTk1QRVJSX1NVQ0NFU1MpLAorICAgICgiQnVpbGRpbmcgYW4gSU5GT1JNIFBEVS9wYWNrZXQgc2hvdWxkIGhhdmUgc3VjY2VlZDogJWQiLCByYykpOworCitTT0NLX0NMRUFOVVA7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDNwZHVfcGFyc2VfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAzcGR1X3BhcnNlX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDU4ODJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAzcGR1X3BhcnNlX2NsaWIuYwpAQCAtMCwwICsxLDIyIEBACisvKiBIRUFERVIgUGFyc2luZyBvZiBQRFVzICovCituZXRzbm1wX3BkdSBwZHU7CitpbnQgcmM7Cit1X2NoYXIgZGF0YVtdID0geyAKKyAgICAweEEyLCAweDFELCAweDAyLCAweDA0LCAweDRFLCAweDM5LAorICAgIDB4QjIsIDB4OEUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDAsCisgICAgMHgzMCwgMHgwRiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOCwgMHgyQiwgMHgwNiwKKyAgICAweDAxLCAweDAyLCAweDAxLCAweDAxLCAweDA0LCAweDAwLCAweDA0LCAweDAxLAorICAgIDB4NjYKK307CitzaXplX3QgZGF0YV9sZW5ndGg9c2l6ZW9mKGRhdGEpOworCityYyA9IHNubXBfcGR1X3BhcnNlKCZwZHUsIGRhdGEsICZkYXRhX2xlbmd0aCk7CisKK09LRigocmMgPT0gMCksICgiUGFyc2luZyBvZiBhIGdlbmVyaWMgUERVIGZhaWxlZCIpKTsKKworI2lmZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorZGF0YVswXSA9IDB4QTM7IC8qIGNoYW5nZXMgaXQgdG8gYSBTRVQgcGR1ICovCityYyA9IHNubXBfcGR1X3BhcnNlKCZwZHUsIGRhdGEsICZkYXRhX2xlbmd0aCk7CisKK09LRigocmMgIT0gMCksICgiUGFyc2luZyBvZiBhIGdlbmVyaWMgU0VUIFBEVSBzdWNjZWVkZWQiKSk7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL2tleW1hbmFnZXRlc3QuYyBiL3Rlc3Rpbmcva2V5bWFuYWdldGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWExYWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3Rpbmcva2V5bWFuYWdldGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjUxICswLDAgQEAKLS8qCi0gKiBrZXltYW5hZ2V0ZXN0LmMKLSAqCi0gKiBFeHBlY3RlZCBTVUNDRVNTZXM6ICAyICsgMiArIDMgZm9yIGFsbCB0ZXN0cy4KLSAqCi0gKiBSZXR1cm5zOgotICogICAgICBOdW1iZXIgb2YgRkFJTFVSRXMuCi0gKiAKLSAqCi0gKiBGSVggIE9yIGhvdyBhYm91dCBwYXNzaW5nIGEgdXNtVXNlciBuYW1lIGFuZCBsb29raW5nIHVwIHRoZSBlbnRyeSBhcwotICogICAgICBhIG1lYW5zIG9mIGdldHRpbmcga2V5IG1hdGVyaWFsPyAgVGhpcyBtZWFucyB0aGUgdXNlckxpc3QgaXMKLSAqICAgICAgYXZhaWxhYmxlIGZyb20gYW4gYXBwbGljYXRpb24uLi4KLSAqCi0gKiBBU1NVTUVTICBObyBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmV0dXJuIG5vbi16ZXJvIHN1Y2Nlc3MgY29kZXMuCi0gKgotICogVGVzdCBvZiBnZW5lcmF0ZV9LdSgpLiAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAyCi0gKiBUZXN0IG9mIGdlbmVyYXRlX2t1bCgpLiAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6IDIKLSAqIFRlc3Qgb2Yge2VuY29kZSxkZWNvZGV9X2tleWNoYW5nZSgpLiAgICAgICAgIFNVQ0NFU1NlczogMwotICovCi0KLXN0YXRpYyBjaGFyICAgICpyY3NpZCA9ICIkSWQkIjsgICAgICAgIC8qICovCi0KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImFzbjEuaCIKLSNpbmNsdWRlICJzbm1wX2FwaS5oIgotI2luY2x1ZGUgImtleXRvb2xzLmgiCi0jaW5jbHVkZSAidG9vbHMuaCIKLSNpbmNsdWRlICJzY2FwaS5oIgotI2luY2x1ZGUgInRyYW5zZm9ybV9vaWRzLmgiCi0jaW5jbHVkZSAiY2FsbGJhY2suaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1leHRlcm4gY2hhciAgICAqb3B0YXJnOwotZXh0ZXJuIGludCAgICAgIG9wdGluZCwgb3B0b3B0LCBvcHRlcnI7Ci0KLQotCi0vKgotICogR2xvYmFscywgJmMuLi4KLSAqLwotY2hhciAgICAgICAgICAgKmxvY2FsX3Byb2duYW1lOwotCi0jZGVmaW5lIFVTQUdFCSJVc2FnZTogJXMgWy1oXVstYWtsdV1bLUUgPGVuZ2luZUlEPl1bLU4gPG5ld2tleT5dWy1PIDxvbGRrZXk+XVstUCA8cGFzc3BocmFzZT5dIgotI2RlZmluZSBPUFRJT05MSVNUCSJhcUU6aGtsTjpPOlA6dSIKLQotaW50ICAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAwLCBkb2dlbkt1ID0gMCwgZG9nZW5rdWwgPSAwLCBkb2tleWNoYW5nZSA9IDA7Ci0KLSNkZWZpbmUJQUxMT1BUSU9OUwkoZG9hbGx0ZXN0cyArIGRvZ2VuS3UgKyBkb2dlbmt1bCArIGRva2V5Y2hhbmdlKQotCi0KLSNkZWZpbmUgTE9DQUxfTUFYQlVGCSgxMDI0ICogOCkKLSNkZWZpbmUgTkwJCSJcbiIKLQotI2RlZmluZSBPVVRQVVRBTFdBWVMobykJZnByaW50ZihzdGRvdXQsICJcblxuJXNcblxuIiwgbyk7Ci0jZGVmaW5lIE9VVFBVVChvKQlpZiAoIWJlcXVpZXQpIHsgT1VUUFVUQUxXQVlTKG8pOyB9Ci0KLSNkZWZpbmUgU1VDQ0VTUyhzKQkJCQkJXAotewkJCQkJCQlcCi0JaWYgKCFmYWlsY291bnQgJiYgIWJlcXVpZXQpCQkJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5TVUNDRVNTOiAlc1xuIiwgcyk7CVwKLX0KLQotI2RlZmluZSBGQUlMRUQoZSwgZikJCQkJCVwKLXsJCQkJCQkJXAotCWlmIChlICE9IFNOTVBFUlJfU1VDQ0VTUyAmJiAhYmVxdWlldCkgewkJCVwKLQkJZnByaW50ZihzdGRvdXQsICJcbkZBSUxFRDogJXNcbiIsIGYpOwlcCi0JCWZhaWxjb3VudCArPSAxOwkJCQlcCi0JfQkJCQkJCVwKLX0KLQotCi0KLS8qCi0gKiBUZXN0IHNwZWNpZmljIGdsb2JhbHMuCi0gKi8KLSNkZWZpbmUJRU5HSU5FSURfREVGQVVMVAkiMS4yLjMuNHdpbGQiCi0jZGVmaW5lIFBBU1NQSFJBU0VfREVGQVVMVAkiQ2xheSdzIENvbmNsdXNpb246IENyZWF0aXZpdHkgaXMgZ3JlYXQsICIgXAotCQkJCQkiYnV0IHBsYWdpYXJpc20gaXMgZmFzdGVyLiIKLSNkZWZpbmUgT0xES0VZX0RFRkFVTFQJCSJUaGlzIGlzIGEgdmVyeSBvbGQga2V5LiIKLSNkZWZpbmUgTkVXS0VZX0RFRkFVTFQJCSJUaGlzIGtleSwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHZlcnkgbmV3LiIKLQotY2hhciAgICAgICAgICAgKmVuZ2luZUlEID0gTlVMTDsKLWNoYXIgICAgICAgICAgICpwYXNzcGhyYXNlID0gTlVMTDsKLWNoYXIgICAgICAgICAgICpvbGRrZXkgPSBOVUxMOwotY2hhciAgICAgICAgICAgKm5ld2tleSA9IE5VTEw7Ci1pbnQgICAgICAgICAgICAgYmVxdWlldCA9IDA7Ci0KLQotLyoKLSAqIFByb3RvdHlwZXMuCi0gKi8KLXZvaWQgICAgICAgICAgICB1c2FnZShGSUxFICogb2ZwKTsKLQotaW50ICAgICAgICAgICAgIHRlc3RfZ2Vua3VsKHZvaWQpOwotaW50ICAgICAgICAgICAgIHRlc3RfZ2VuS3Uodm9pZCk7Ci1pbnQgICAgICAgICAgICAgdGVzdF9rZXljaGFuZ2Uodm9pZCk7Ci0KLQotCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgIGNoOwotCi0gICAgbG9jYWxfcHJvZ25hbWUgPSBhcmd2WzBdOwotICAgIG9wdGFyZyA9IE5VTEw7Ci0KLSAgICAvKgotICAgICAqIFBhcnNlLgotICAgICAqLwotICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgT1BUSU9OTElTVCkpICE9IEVPRikgewotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnRSc6Ci0gICAgICAgICAgICBlbmdpbmVJRCA9IG9wdGFyZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdrJzoKLSAgICAgICAgICAgIGRva2V5Y2hhbmdlID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdsJzoKLSAgICAgICAgICAgIGRvZ2Vua3VsID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdOJzoKLSAgICAgICAgICAgIG5ld2tleSA9IG9wdGFyZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdPJzoKLSAgICAgICAgICAgIG9sZGtleSA9IG9wdGFyZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdQJzoKLSAgICAgICAgICAgIHBhc3NwaHJhc2UgPSBvcHRhcmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBkb2dlbkt1ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdxJzoKLSAgICAgICAgICAgIGJlcXVpZXQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2gnOgotICAgICAgICAgICAgcnZhbCA9IDA7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICAgICAgZXhpdChydmFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFyZ2MgLT0gMTsKLSAgICAgICAgYXJndiArPSAxOwotICAgICAgICBpZiAob3B0YXJnKSB7Ci0gICAgICAgICAgICBhcmdjIC09IDE7Ci0gICAgICAgICAgICBhcmd2ICs9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBvcHRpbmQgPSAxOwotICAgICAgICBvcHRhcmcgPSBOVUxMOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSBnZXRvcHQgKi8KLQotICAgIGlmICgoYXJnYyA+IDEpKSB7Ci0gICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMTAwMCk7Ci0KLSAgICB9IGVsc2UgaWYgKEFMTE9QVElPTlMgIT0gMSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBUZXN0IHN0dWZmLgotICAgICAqLwotICAgIHJ2YWwgPSBzY19pbml0KCk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19pbml0KCkuIik7Ci0KLSAgICBpZiAoZG9nZW5LdSB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2dlbkt1KCk7Ci0gICAgfQotICAgIGlmIChkb2dlbmt1bCB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2dlbmt1bCgpOwotICAgIH0KLSAgICBpZiAoZG9rZXljaGFuZ2UgfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9rZXljaGFuZ2UoKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogQ2xlYW51cC4KLSAgICAgKi8KLSAgICBydmFsID0gc2Nfc2h1dGRvd24oU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NIVVRET1dOLAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX3NodXRkb3duKCkuIik7Ci0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBtYWluKCkgKi8KLQotCi0KLQotCi12b2lkCi11c2FnZShGSUxFICogb2ZwKQotewotICAgIGZwcmludGYob2ZwLAotICAgICAgICAgICAgVVNBR0UKLSAgICAgICAgICAgICIiIE5MCi0gICAgICAgICAgICAiICAgIC1hCQkJQWxsIHRlc3RzLiIgTkwKLSAgICAgICAgICAgICIgICAgLUUgWzB4XTxlbmdpbmVJRD4Jc25tcEVuZ2luZUlEIHN0cmluZy4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtawkJCVRlc3Qge2VuY29kZSxkZWNvZGV9X2tleWNoYW5nZSgpLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC1sCQkJZ2VuZXJhdGVfa3VsKCkuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLWgJCQlIZWxwLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC1OIFsweF08bmV3a2V5PglOZXcga2V5IChmb3IgdGVzdGluZyBLZXlDaGFuZ2UgVEMpLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC1PIFsweF08b2xka2V5PglPbGQga2V5IChmb3IgdGVzdGluZyBLZXlDaGFuZ2UgVEMpLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC1QIDxwYXNzcGhyYXNlPglTb3VyY2Ugc3RyaW5nIGZvciB1c21Vc2VyIG1hc3RlciBrZXkuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLXUJCQlnZW5lcmF0ZV9LdSgpLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC1xCQkJYmUgcXVpZXQuIgotICAgICAgICAgICAgTkwgIiIgTkwsIGxvY2FsX3Byb2duYW1lKTsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNhZ2UoKSAqLwotCi0KLQotCi0jaWZkZWYgRVhBTVBMRQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZG9zb21ldGhpbmcKLSAqCi0gKiBUZXN0IHRlbXBsYXRlLgotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKi8KLWludAotdGVzdF9kb3NvbWV0aGluZyh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotCi0gICAgRU0wKDEsICJVTklNUExFTUVOVEVEIik7ICAgIC8qIEVNKDEpOyAvKiAqLwotCi0gIHRlc3RfZG9zb21ldGhpbmdfcXVpdDoKLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rvc29tZXRoaW5nKCkgKi8KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhBTVBMRSAqLwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZ2VuS3UKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqCi0gKiBUZXN0IGdlbmVyYXRpb24gb2YgdXNtVXNlciBtYXN0ZXIga2V5IGZyb20gYSBwYXNzcGhyYXNlLgotICoKLSAqIEFTU1VNRVMgIFBhc3NwaHJhc2UgaXMgbWFkZSBvZiBwcmludGFibGUgY2hhcmFjdGVycyEKLSAqLwotaW50Ci10ZXN0X2dlbkt1KHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCi0gICAgICAgIGZhaWxjb3VudCA9IDAsCi0gICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KSwga3VsZW47Ci0gICAgY2hhciAgICAgICAgICAgKmhhc2huYW1lID0gInVzbUhNQUNNRDVBdXRoUHJvdG9jb2wuIiwgKnM7Ci0gICAgdV9jaGFyICAgICAgICAgIEt1W0xPQ0FMX01BWEJVRl07Ci0gICAgb2lkICAgICAgICAgICAgKmhhc2h0eXBlID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbDsKLQotICAgIE9VVFBVVCgiVGVzdCBvZiBnZW5lcmF0ZV9LdSAtLSIpOwotCi0gICAgLyoKLSAgICAgKiBTZXQgcGFzc3BocmFzZS4KLSAgICAgKi8KLSAgICBpZiAoIXBhc3NwaHJhc2UpIHsKLSAgICAgICAgcGFzc3BocmFzZSA9IFBBU1NQSFJBU0VfREVGQVVMVDsKLSAgICB9Ci0gICAgaWYgKCFiZXF1aWV0KQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlBhc3NwaHJhc2Ulczpcblx0JXNcblxuIiwKLSAgICAgICAgICAgICAgICAocGFzc3BocmFzZSA9PSBQQVNTUEhSQVNFX0RFRkFVTFQpID8gIiAoZGVmYXVsdCkiIDogIiIsCi0gICAgICAgICAgICAgICAgcGFzc3BocmFzZSk7Ci0KLQotICB0ZXN0X2dlbkt1X2FnYWluOgotICAgIG1lbXNldChLdSwgMCwgTE9DQUxfTUFYQlVGKTsKLSAgICBrdWxlbiA9IExPQ0FMX01BWEJVRjsKLQotICAgIHJ2YWwgPSBnZW5lcmF0ZV9LdShoYXNodHlwZSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAotICAgICAgICAgICAgICAgICAgICAgICBwYXNzcGhyYXNlLCBzdHJsZW4ocGFzc3BocmFzZSksIEt1LCAma3VsZW4pOwotICAgIEZBSUxFRChydmFsLCAiZ2VuZXJhdGVfS3UoKS4iKTsKLQotICAgIGlmIChrdWxlbiAhPSBwcm9wZXJsZW5ndGgpIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAiS3UgbGVuZ3RoIGlzIHdyb25nIGZvciB0aGlzIGhhc2h0eXBlLiIpOwotICAgIH0KLQotICAgIGJpbmFyeV90b19oZXgoS3UsIGt1bGVuLCAmcyk7Ci0gICAgaWYgKCFiZXF1aWV0KQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIkt1IChsZW49JWQpOiAgJXNcbiIsIGt1bGVuLCBzKTsKLSAgICBmcmVlX3plcm8ocywga3VsZW4pOwotCi0gICAgU1VDQ0VTUyhoYXNobmFtZSk7Ci0gICAgaWYgKCFiZXF1aWV0KQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7Ci0KLSAgICBpZiAoaGFzaHR5cGUgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgewotICAgICAgICBoYXNodHlwZSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOwotICAgICAgICBoYXNobmFtZSA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbC4iOwotICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpOwotICAgICAgICBnb3RvIHRlc3RfZ2VuS3VfYWdhaW47Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9nZW5LdSgpICovCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2dlbmt1bAotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICoKLSAqIFRlc3Qgb2YgZ2VuZXJhdGVfa3VsKCkuCi0gKgotICogQSBwYXNzcGhyYXNlIGFuZCBlbmdpbmVJRCBhcmUgaGFzaGVkIGludG8gYSBtYXN0ZXIga2V5IEt1IHVzaW5nCi0gKiBib3RoIGtub3duIGhhc2ggdHJhbnNmb3Jtcy4gIExvY2FsaXplZCBrZXlzLCBhbHNvIHVzaW5nIGJvdGggaGFzaAotICogdHJhbnNmb3JtcywgYXJlIGdlbmVyYXRlZCBmcm9tIGVhY2ggb2YgdGhlc2UgbWFzdGVyIGtleXMuCi0gKgotICogQVNTVU1FICBnZW5lcmF0ZV9LdSBpcyBhbHJlYWR5IHRlc3RlZC4KLSAqIEFTU1VNRSAgZW5naW5lSUQgaXMgaW5pdGlhbGx5IGEgTlVMTCB0ZXJtaW5hdGVkIHN0cmluZy4KLSAqLwotaW50Ci10ZXN0X2dlbmt1bCh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAotICAgICAgICBmYWlsY291bnQgPSAwLAotICAgICAgICBwcm9wZXJsZW5ndGgsIGt1bGVuLCBrdWxfbGVuLCBlbmdpbmVJRF9sZW4sIGlzZGVmYXVsdCA9IEZBTFNFOwotCi0gICAgY2hhciAgICAgICAgICAgKnMgPSBOVUxMLAotICAgICAgICAqdGVzdG5hbWUgPSAiVXNpbmcgSE1BQ01ENSB0byBjcmVhdGUgbWFzdGVyIGtleS4iLAotICAgICAgICAqaGFzaG5hbWVfS3UgPSAidXNtSE1BQ01ENUF1dGhQcm90b2NvbCIsICpoYXNobmFtZV9rdWw7Ci0KLSAgICB1X2NoYXIgICAgICAgICAgS3VbTE9DQUxfTUFYQlVGXSwga3VsW0xPQ0FMX01BWEJVRl07Ci0KLSAgICBvaWQgICAgICAgICAgICAqaGFzaHR5cGVfS3UgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sLCAqaGFzaHR5cGVfa3VsOwotCi0gICAgT1VUUFVUKCJUZXN0IG9mIGdlbmVyYXRlX2t1bCAtLSIpOwotCi0KLSAgICAvKgotICAgICAqIFNldCBwYXNzcGhyYXNlIGFuZCBlbmdpbmVJRC4KLSAgICAgKgotICAgICAqIElmIGVuZ2luZUlEIGJlZ2lucyB3aXRoIDB4LCBhc3N1bWUgaXQgaXMgd3JpdHRlbiBpbiAocHJpbnRhYmxlKQotICAgICAqIGhleCBhbmQgY29udmVydCBpdCB0byBiaW5hcnkgZGF0YS4KLSAgICAgKi8KLSAgICBpZiAoIXBhc3NwaHJhc2UpIHsKLSAgICAgICAgcGFzc3BocmFzZSA9IFBBU1NQSFJBU0VfREVGQVVMVDsKLSAgICB9Ci0gICAgaWYgKCFiZXF1aWV0KQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlBhc3NwaHJhc2Ulczpcblx0JXNcblxuIiwKLSAgICAgICAgICAgICAgICAocGFzc3BocmFzZSA9PSBQQVNTUEhSQVNFX0RFRkFVTFQpID8gIiAoZGVmYXVsdCkiIDogIiIsCi0gICAgICAgICAgICAgICAgcGFzc3BocmFzZSk7Ci0KLSAgICBpZiAoIWVuZ2luZUlEKSB7Ci0gICAgICAgIGVuZ2luZUlEID0gRU5HSU5FSURfREVGQVVMVDsKLSAgICAgICAgaXNkZWZhdWx0ID0gVFJVRTsKLSAgICB9Ci0KLSAgICBlbmdpbmVJRF9sZW4gPSBzdHJsZW4oZW5naW5lSUQpOwotCi0gICAgaWYgKHRvbG93ZXIoKihlbmdpbmVJRCArIDEpKSA9PSAneCcpIHsKLSAgICAgICAgZW5naW5lSURfbGVuID0gaGV4X3RvX2JpbmFyeTIoZW5naW5lSUQgKyAyLCBlbmdpbmVJRF9sZW4gLSAyLCAmcyk7Ci0gICAgICAgIGlmIChlbmdpbmVJRF9sZW4gPCAwKSB7Ci0gICAgICAgICAgICBGQUlMRUQoKHJ2YWwgPSBTTk1QRVJSX0dFTkVSUiksCi0gICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCByZXNvbHZlIGhleCBlbmdpbmVJRC4iKTsKLSAgICAgICAgfQotICAgICAgICBlbmdpbmVJRCA9IHM7Ci0gICAgICAgIGJpbmFyeV90b19oZXgoZW5naW5lSUQsIGVuZ2luZUlEX2xlbiwgJnMpOwotICAgIH0KLQotICAgIGlmICghYmVxdWlldCkKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJlbmdpbmVJRCVzIChsZW49JWQpOiAgJXNcblxuIiwKLSAgICAgICAgICAgICAgICAoaXNkZWZhdWx0KSA/ICIgKGRlZmF1bHQpIiA6ICIiLAotICAgICAgICAgICAgICAgIGVuZ2luZUlEX2xlbiwgKHMpID8gcyA6IGVuZ2luZUlEKTsKLSAgICBpZiAocykgewotICAgICAgICBTTk1QX0ZSRUUocyk7Ci0gICAgfQotCi0KLQotICAgIC8qCi0gICAgICogQ3JlYXRlIGEgbWFzdGVyIGtleSB1c2luZyBib3RoIGhhc2ggdHJhbnNmb3JtczsgY3JlYXRlIGxvY2FsaXplZAotICAgICAqIGtleXMgdXNpbmcgYm90aCBoYXNoIHRyYW5zZm9ybXMgZnJvbSBlYWNoIG1hc3RlciBrZXkuCi0gICAgICovCi0gIHRlc3RfZ2Vua3VsX2FnYWluX21hc3RlcjoKLSAgICBtZW1zZXQoS3UsIDAsIExPQ0FMX01BWEJVRik7Ci0gICAga3VsZW4gPSBMT0NBTF9NQVhCVUY7Ci0gICAgaGFzaG5hbWVfa3VsID0gInVzbUhNQUNNRDVBdXRoUHJvdG9jb2wiOwotICAgIGhhc2h0eXBlX2t1bCA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2w7Ci0gICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpOwotCi0KLSAgICBydmFsID0gZ2VuZXJhdGVfS3UoaGFzaHR5cGVfS3UsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKLSAgICAgICAgICAgICAgICAgICAgICAgcGFzc3BocmFzZSwgc3RybGVuKHBhc3NwaHJhc2UpLCBLdSwgJmt1bGVuKTsKLSAgICBGQUlMRUQocnZhbCwgImdlbmVyYXRlX0t1KCkuIik7Ci0KLSAgICBiaW5hcnlfdG9faGV4KEt1LCBrdWxlbiwgJnMpOwotICAgIGlmICghYmVxdWlldCkKLSAgICAgICAgZnByaW50ZihzdGRvdXQsCi0gICAgICAgICAgICAgICAgIlxuXG5NYXN0ZXIgS3UgdXNpbmcgXCIlc1wiOlxuXHQlc1xuXG4iLCBoYXNobmFtZV9LdSwgcyk7Ci0gICAgZnJlZV96ZXJvKHMsIGt1bGVuKTsKLQotCi0gIHRlc3RfZ2Vua3VsX2FnYWluX2xvY2FsOgotICAgIG1lbXNldChrdWwsIDAsIExPQ0FMX01BWEJVRik7Ci0gICAga3VsX2xlbiA9IExPQ0FMX01BWEJVRjsKLQotICAgIHJ2YWwgPSBnZW5lcmF0ZV9rdWwoaGFzaHR5cGVfa3VsLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVJRCwgZW5naW5lSURfbGVuLCBLdSwga3VsZW4sIGt1bCwgJmt1bF9sZW4pOwotCi0gICAgaWYgKChoYXNodHlwZV9LdSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKQotICAgICAgICAmJiAoaGFzaHR5cGVfa3VsID09IHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSkgewotICAgICAgICBpZiAocnZhbCA9PSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVfa3VsIFNIT1VMRCBmYWlsIHdoZW4gS3UgbGVuZ3RoIGlzICIKLSAgICAgICAgICAgICAgICAgICAibGVzcyB0aGFuIGhhc2ggdHJhbnNmb3JtIGxlbmd0aC4iKTsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgRkFJTEVEKHJ2YWwsICJnZW5lcmF0ZV9rdWwoKS4iKTsKLQotICAgICAgICBpZiAoa3VsX2xlbiAhPSBwcm9wZXJsZW5ndGgpIHsKLSAgICAgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICAgICAia3VsIGxlbmd0aCBpcyB3cm9uZyBmb3IgdGhlIGdpdmVuIGhhc2h0eXBlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmluYXJ5X3RvX2hleChrdWwsIGt1bF9sZW4sICZzKTsKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJrdWwgKCVzKSAobGVuPSVkKTogICVzXG4iLAotICAgICAgICAgICAgICAgICgoaGFzaHR5cGVfS3UgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgPyAiTUQ1IiA6ICJTSEEiKSwKLSAgICAgICAgICAgICAgICBrdWxfbGVuLCBzKTsKLSAgICAgICAgZnJlZV96ZXJvKHMsIGt1bF9sZW4pOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgbG9jYWxpemVkIGtleSB1c2luZyB0aGUgb3RoZXIgaGFzaCB0cmFuc2Zvcm0sIGJ1dCBmcm9tCi0gICAgICogKiB0aGUgc2FtZSBtYXN0ZXIga2V5LgotICAgICAqLwotICAgIGlmIChoYXNodHlwZV9rdWwgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgewotICAgICAgICBoYXNodHlwZV9rdWwgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKLSAgICAgICAgaGFzaG5hbWVfa3VsID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sIjsKLSAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKTsKLSAgICAgICAgZ290byB0ZXN0X2dlbmt1bF9hZ2Fpbl9sb2NhbDsKLSAgICB9Ci0KLSAgICBTVUNDRVNTKHRlc3RuYW1lKTsKLQotCi0gICAgLyoKLSAgICAgKiBSZS1jcmVhdGUgdGhlIG1hc3RlciBrZXkgdXNpbmcgdGhlIG90aGVyIGhhc2ggdHJhbnNmb3JtLgotICAgICAqLwotICAgIGlmIChoYXNodHlwZV9LdSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSB7Ci0gICAgICAgIGhhc2h0eXBlX0t1ID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7Ci0gICAgICAgIGhhc2huYW1lX0t1ID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sIjsKLSAgICAgICAgdGVzdG5hbWUgPSAiVXNpbmcgSE1BQ1NIQTEgdG8gY3JlYXRlIG1hc3RlciBrZXkuIjsKLSAgICAgICAgZ290byB0ZXN0X2dlbmt1bF9hZ2Fpbl9tYXN0ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9nZW5rdWwoKSAqLwotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9rZXljaGFuZ2UKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqCi0gKiBUZXN0IG9mIEtleUNoYW5nZSBUQyBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBBU1NVTUUgbmV3a2V5IGFuZCBvbGRrZXkgYmVnaW4gYXMgTlVMTCB0ZXJtaW5hdGVkIHN0cmluZ3MuCi0gKi8KLWludAotdGVzdF9rZXljaGFuZ2Uodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKLSAgICAgICAgZmFpbGNvdW50ID0gMCwKLSAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpLAotICAgICAgICBvbGRrZXlfbGVuLAotICAgICAgICBuZXdrZXlfbGVuLAotICAgICAgICBrZXljaGFuZ2VfbGVuLAotICAgICAgICB0ZW1wX2xlbiwgaXNkZWZhdWx0X25ldyA9IEZBTFNFLCBpc2RlZmF1bHRfb2xkID0gRkFMU0U7Ci0KLSAgICBjaGFyICAgICAgICAgICAqaGFzaG5hbWUgPSAidXNtSE1BQ01ENUF1dGhQcm90b2NvbC4iLCAqczsKLQotICAgIHVfY2hhciAgICAgICAgICBvbGRrZXlfYnVmW0xPQ0FMX01BWEJVRl0sCi0gICAgICAgIG5ld2tleV9idWZbTE9DQUxfTUFYQlVGXSwKLSAgICAgICAgdGVtcF9idWZbTE9DQUxfTUFYQlVGXSwga2V5Y2hhbmdlX2J1ZltMT0NBTF9NQVhCVUZdOwotCi0gICAgb2lkICAgICAgICAgICAgKmhhc2h0eXBlID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbDsKLQotICAgIE9VVFBVVCgiVGVzdCBvZiBLZXlDaGFuZ2UgVEMgLS0iKTsKLQotCi0gICAgLyoKLSAgICAgKiBTZXQgbmV3a2V5IGFuZCBvbGRrZXkuCi0gICAgICovCi0gICAgaWYgKCFuZXdrZXkpIHsgICAgICAgICAgICAgIC8qIG5ld2tleSAqLwotICAgICAgICBuZXdrZXkgPSBORVdLRVlfREVGQVVMVDsKLSAgICAgICAgaXNkZWZhdWx0X25ldyA9IFRSVUU7Ci0gICAgfQotICAgIG5ld2tleV9sZW4gPSBzdHJsZW4obmV3a2V5KTsKLQotICAgIGlmICh0b2xvd2VyKCoobmV3a2V5ICsgMSkpID09ICd4JykgewotICAgICAgICBuZXdrZXlfbGVuID0gaGV4X3RvX2JpbmFyeTIobmV3a2V5ICsgMiwgbmV3a2V5X2xlbiAtIDIsICZzKTsKLSAgICAgICAgaWYgKG5ld2tleV9sZW4gPCAwKSB7Ci0gICAgICAgICAgICBGQUlMRUQoKHJ2YWwgPSBTTk1QRVJSX0dFTkVSUiksCi0gICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCByZXNvbHZlIGhleCBuZXdrZXkuIik7Ci0gICAgICAgIH0KLSAgICAgICAgbmV3a2V5ID0gczsKLSAgICAgICAgYmluYXJ5X3RvX2hleChuZXdrZXksIG5ld2tleV9sZW4sICZzKTsKLSAgICB9Ci0KLSAgICBpZiAoIW9sZGtleSkgeyAgICAgICAgICAgICAgLyogb2xka2V5ICovCi0gICAgICAgIG9sZGtleSA9IE9MREtFWV9ERUZBVUxUOwotICAgICAgICBpc2RlZmF1bHRfb2xkID0gVFJVRTsKLSAgICB9Ci0gICAgb2xka2V5X2xlbiA9IHN0cmxlbihvbGRrZXkpOwotCi0gICAgaWYgKHRvbG93ZXIoKihvbGRrZXkgKyAxKSkgPT0gJ3gnKSB7Ci0gICAgICAgIG9sZGtleV9sZW4gPSBoZXhfdG9fYmluYXJ5MihvbGRrZXkgKyAyLCBvbGRrZXlfbGVuIC0gMiwgJnMpOwotICAgICAgICBpZiAob2xka2V5X2xlbiA8IDApIHsKLSAgICAgICAgICAgIEZBSUxFRCgocnZhbCA9IFNOTVBFUlJfR0VORVJSKSwKLSAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlc29sdmUgaGV4IG9sZGtleS4iKTsKLSAgICAgICAgfQotICAgICAgICBvbGRrZXkgPSBzOwotICAgICAgICBiaW5hcnlfdG9faGV4KG9sZGtleSwgb2xka2V5X2xlbiwgJnMpOwotICAgIH0KLQotCi0KLSAgdGVzdF9rZXljaGFuZ2VfYWdhaW46Ci0gICAgbWVtc2V0KG9sZGtleV9idWYsIDAsIExPQ0FMX01BWEJVRik7Ci0gICAgbWVtc2V0KG5ld2tleV9idWYsIDAsIExPQ0FMX01BWEJVRik7Ci0gICAgbWVtc2V0KGtleWNoYW5nZV9idWYsIDAsIExPQ0FMX01BWEJVRik7Ci0gICAgbWVtc2V0KHRlbXBfYnVmLCAwLCBMT0NBTF9NQVhCVUYpOwotCi0gICAgbWVtY3B5KG9sZGtleV9idWYsIG9sZGtleSwgU05NUF9NSU4ob2xka2V5X2xlbiwgcHJvcGVybGVuZ3RoKSk7Ci0gICAgbWVtY3B5KG5ld2tleV9idWYsIG5ld2tleSwgU05NUF9NSU4obmV3a2V5X2xlbiwgcHJvcGVybGVuZ3RoKSk7Ci0gICAga2V5Y2hhbmdlX2xlbiA9IExPQ0FMX01BWEJVRjsKLQotCi0gICAgYmluYXJ5X3RvX2hleChvbGRrZXlfYnVmLCBwcm9wZXJsZW5ndGgsICZzKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxub2xka2V5JXMgKGxlbj0lZCk6ICAlc1xuIiwKLSAgICAgICAgICAgIChpc2RlZmF1bHRfb2xkKSA/ICIgKGRlZmF1bHQpIiA6ICIiLCBwcm9wZXJsZW5ndGgsIHMpOwotICAgIFNOTVBfRlJFRShzKTsKLQotICAgIGJpbmFyeV90b19oZXgobmV3a2V5X2J1ZiwgcHJvcGVybGVuZ3RoLCAmcyk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJuZXdrZXklcyAobGVuPSVkKTogICVzXG5cbiIsCi0gICAgICAgICAgICAoaXNkZWZhdWx0X25ldykgPyAiIChkZWZhdWx0KSIgOiAiIiwgcHJvcGVybGVuZ3RoLCBzKTsKLSAgICBTTk1QX0ZSRUUocyk7Ci0KLQotICAgIHJ2YWwgPSBlbmNvZGVfa2V5Y2hhbmdlKGhhc2h0eXBlLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xka2V5X2J1ZiwgcHJvcGVybGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2tleV9idWYsIHByb3Blcmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXljaGFuZ2VfYnVmLCAma2V5Y2hhbmdlX2xlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJlbmNvZGVfa2V5Y2hhbmdlKCkuIik7Ci0KLSAgICBpZiAoa2V5Y2hhbmdlX2xlbiAhPSAocHJvcGVybGVuZ3RoICogMikpIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgIktleUNoYW5nZSBzdHJpbmcgKGVuY29kZWQpIGlzIG5vdCBwcm9wZXIgbGVuZ3RoICIKLSAgICAgICAgICAgICAgICJmb3IgdGhpcyBoYXNoIHRyYW5zZm9ybS4iKTsKLSAgICB9Ci0KLSAgICBiaW5hcnlfdG9faGV4KGtleWNoYW5nZV9idWYsIGtleWNoYW5nZV9sZW4sICZzKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIiglcykgS2V5Q2hhbmdlIHN0cmluZzogICVzXG5cbiIsCi0gICAgICAgICAgICAoKGhhc2h0eXBlID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpID8gIk1ENSIgOiAiU0hBIiksIHMpOwotICAgIFNOTVBfRlJFRShzKTsKLQotICAgIHRlbXBfbGVuID0gcHJvcGVybGVuZ3RoOwotICAgIHJ2YWwgPSBkZWNvZGVfa2V5Y2hhbmdlKGhhc2h0eXBlLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xka2V5X2J1ZiwgcHJvcGVybGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWNoYW5nZV9idWYsIHByb3Blcmxlbmd0aCAqIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9idWYsICZ0ZW1wX2xlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJkZWNvZGVfa2V5Y2hhbmdlKCkuIik7Ci0KLSAgICBpZiAodGVtcF9sZW4gIT0gcHJvcGVybGVuZ3RoKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICJkZWNvZGVkIG5ld2tleSBpcyBub3QgcHJvcGVyIGxlbmd0aCBmb3IgIgotICAgICAgICAgICAgICAgInRoaXMgaGFzaCB0cmFuc2Zvcm0uIik7Ci0gICAgfQotCi0gICAgYmluYXJ5X3RvX2hleCh0ZW1wX2J1ZiwgdGVtcF9sZW4sICZzKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgImRlY29kZWQgbmV3a2V5OiAgJXNcblxuIiwgcyk7Ci0gICAgU05NUF9GUkVFKHMpOwotCi0KLSAgICBpZiAobWVtY21wKG5ld2tleV9idWYsIHRlbXBfYnVmLCB0ZW1wX2xlbikpIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLCAibmV3a2V5IGRpZCBub3QgZGVjb2RlIHByb3Blcmx5LiIpOwotICAgIH0KLQotCi0gICAgU1VDQ0VTUyhoYXNobmFtZSk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbiIpOwotCi0KLSAgICAvKgotICAgICAqIE11bHRpcGxleCBkaWZmZXJlbnQgdGVzdCBjb21iaW5hdGlvbnMuCi0gICAgICoKLSAgICAgKiBGaXJzdCBjbGF1c2UgaXMgZm9yIFRlc3QgIzIsIHNlY29uZCBjbGF1c2UgaXMgZm9yIChsYXN0KSBUZXN0ICMzLgotICAgICAqLwotICAgIGlmIChoYXNodHlwZSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSB7Ci0gICAgICAgIGhhc2h0eXBlID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7Ci0gICAgICAgIGhhc2huYW1lID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sICh3L0RFUyBsZW5ndGgga3VsJ3MpLiI7Ci0gICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfUFJJVkxFTl8xREVTKQotICAgICAgICAgICAgKyBCWVRFU0laRShTTk1QX1RSQU5TX1BSSVZMRU5fMURFU19JVik7Ci0gICAgICAgIGdvdG8gdGVzdF9rZXljaGFuZ2VfYWdhaW47Ci0KLSAgICB9IGVsc2UgaWYgKHByb3Blcmxlbmd0aCA8IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSkpIHsKLSAgICAgICAgaGFzaHR5cGUgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKLSAgICAgICAgaGFzaG5hbWUgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wuIjsKLSAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKTsKLSAgICAgICAgZ290byB0ZXN0X2tleWNoYW5nZV9hZ2FpbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2tleWNoYW5nZSgpICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL21pc2N0ZXN0LmMgYi90ZXN0aW5nL21pc2N0ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZjA0NjUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9taXNjdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBtaXNjdGVzdC5jCi0gKgotICogRXhwZWN0ZWQgU1VDQ0VTU2VzIGZvciBhbGwgdGVzdHM6ICAgIDAKLSAqCi0gKiBSZXR1cm5zOgotICogICAgICBOdW1iZXIgb2YgRkFJTFVSRXMuCi0gKgotICogVGVzdCBvZiBkdW1wX3NubXBFbmdpbmVJRCgpLiAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAgMAotICovCi0KLXN0YXRpYyBjaGFyICAgICpyY3NpZCA9ICIkSWQkIjsgICAgIC8qICovCi0KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImFzbjEuaCIKLSNpbmNsdWRlICJzbm1wX2FwaS5oIgotI2luY2x1ZGUgInRvb2xzLmgiCi0jaW5jbHVkZSAidHJhbnNmb3JtX29pZHMuaCIKLSNpbmNsdWRlICJjYWxsYmFjay5oIgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLWV4dGVybiBjaGFyICAgICpvcHRhcmc7Ci1leHRlcm4gaW50ICAgICAgb3B0aW5kLCBvcHRvcHQsIG9wdGVycjsKLQotCi0KLS8qCi0gKiBHbG9iYWxzLCAmYy4uLgotICovCi1jaGFyICAgICAgICAgICAqbG9jYWxfcHJvZ25hbWU7Ci0KLSNkZWZpbmUgVVNBR0UJIlVzYWdlOiAlcyBbLWhdWy0xYV0iCi0jZGVmaW5lIE9QVElPTkxJU1QJIjFhaCIKLQotaW50ICAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAwLCBkb2R1bXBzZWlkID0gMDsKLQotI2RlZmluZQlBTExPUFRJT05TCShkb2FsbHRlc3RzICsgZG9kdW1wc2VpZCkKLQotCi0KLSNkZWZpbmUgTE9DQUxfTUFYQlVGCSgxMDI0ICogOCkKLSNkZWZpbmUgTkwJCSJcbiIKLQotI2RlZmluZSBPVVRQVVQobykJZnByaW50ZihzdGRvdXQsICJcblxuJXNcblxuIiwgbyk7Ci0KLSNkZWZpbmUgU1VDQ0VTUyhzKQkJCQkJXAotewkJCQkJCQlcCi0JaWYgKCFmYWlsY291bnQpCQkJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5TVUNDRVNTOiAlc1xuIiwgcyk7CVwKLX0KLQotI2RlZmluZSBGQUlMRUQoZSwgZikJCQkJCVwKLXsJCQkJCQkJXAotCWlmIChlICE9IFNOTVBFUlJfU1VDQ0VTUykgewkJCVwKLQkJZnByaW50ZihzdGRvdXQsICJcbkZBSUxFRDogJXNcbiIsIGYpOwlcCi0JCWZhaWxjb3VudCArPSAxOwkJCQlcCi0JfQkJCQkJCVwKLX0KLQotCi0KLQotI2RlZmluZSBJREJMQVRfNAkiMDAwMTAyMDMiCi0KLSNkZWZpbmUgSURWSU9MQVRFMQkiODAwMDAwMDMwMGRlZWRjYWZlIgotCi0jZGVmaW5lIElESVB2NAkJIjgwMDAwMDAzMDEwYTA5MDgwNyIKLSNkZWZpbmUgSURJUHY2CQkiODAwMDAwMDMwMjEwMGYwZTBkMGMwYjBhMDkwODA3MDYwNTA0MDMwMjAxIgotI2RlZmluZSBJRE1BQwkJIjgwMDAwMDAzMDNmZmVlZGRjY2JiYWEiCi0KLSNkZWZpbmUgSURURVhUCQkiODAwMDAwMDMwNCIKLSNkZWZpbmUgUFJJTlRBQkxFCSJMZXQgdGhpcyBiZSBwcmludGFibGUuIgotCi0jZGVmaW5lIElET0NURVRTXzcJIjgwMDAwMDAzMDUwMDAxMDIwMzA0MDUwNjA3IgotCi0jZGVmaW5lIElETE9DQUxfMTEJIjgwMDAwMDAzMDYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIiCi0KLSNkZWZpbmUgSURJUHY0X0VYVFJBMwkiODAwMDAwMDMwMTBhMDkwODA3MDEwMjAzIgotCi0jZGVmaW5lIElEX05VTVNUUklOR1MJCTEwCi0KLQotCi0KLS8qCi0gKiBQcm90b3R5cGVzLgotICovCi12b2lkICAgICAgICAgICAgdXNhZ2UoRklMRSAqIG9mcCk7Ci0KLWludCAgICAgICAgICAgICB0ZXN0X2R1bXBzZWlkKHZvaWQpOwotCi0KLQotCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgIGNoOwotCi0gICAgbG9jYWxfcHJvZ25hbWUgPSBhcmd2WzBdOwotCi0gICAgLyoKLSAgICAgKiBQYXJzZS4KLSAgICAgKi8KLSAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIE9QVElPTkxJU1QpKSAhPSBFT0YpIHsKLSAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICBjYXNlICcxJzoKLSAgICAgICAgICAgIGRvZHVtcHNlaWQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICBydmFsID0gMDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgICAgICBleGl0KHJ2YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICBhcmd2ICs9IDE7Ci0gICAgICAgIGlmIChvcHRhcmcpIHsKLSAgICAgICAgICAgIGFyZ2MgLT0gMTsKLSAgICAgICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgICAgIG9wdGFyZyA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgb3B0aW5kID0gMTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgZ2V0b3B0ICovCi0KLSAgICBpZiAoKGFyZ2MgPiAxKSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotCi0gICAgfSBlbHNlIGlmIChBTExPUFRJT05TICE9IDEpIHsKLSAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgZXhpdCgxMDAwKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogVGVzdCBzdHVmZi4KLSAgICAgKi8KLSAgICBpZiAoZG9kdW1wc2VpZCB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2R1bXBzZWlkKCk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIENsZWFudXAuCi0gICAgICovCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFpbigpICovCi0KLQotCi0KLQotdm9pZAotdXNhZ2UoRklMRSAqIG9mcCkKLXsKLSAgICBmcHJpbnRmKG9mcCwKLSAgICAgICAgICAgIFVTQUdFCi0gICAgICAgICAgICAiIiBOTAotICAgICAgICAgICAgIgktMQkJVGVzdCBkdW1wX3NubXBFbmdpbmVJRCgpLiIgTkwKLSAgICAgICAgICAgICIJLWEJCUFsbCB0ZXN0cy4iIE5MCi0gICAgICAgICAgICAiCS1oCQlIZWxwLiIgTkwgIiIgTkwsIGxvY2FsX3Byb2duYW1lKTsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNhZ2UoKSAqLwotCi0KLQotCi0jaWZkZWYgRVhBTVBMRQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZG9zb21ldGhpbmcKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqCi0gKiBUZXN0IHRlbXBsYXRlLgotICovCi1pbnQKLXRlc3RfZG9zb21ldGhpbmcodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLQotICAgIEVNMCgxLCAiVU5JTVBMRU1FTlRFRCIpOyAgICAvKiBFTSgxKTsgLyogKi8KLQotICB0ZXN0X2Rvc29tZXRoaW5nX3F1aXQ6Ci0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb3NvbWV0aGluZygpICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQU1QTEUgKi8KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZHVtcHNlaWQKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqIFRlc3QgZHVtcF9zbm1wRW5naW5lSUQoKS4KLSAqLwotaW50Ci10ZXN0X2R1bXBzZWlkKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsICovCi0gICAgICAgICAgICAgICAgICAgIGZhaWxjb3VudCA9IDAsIHRsZW4sIGNvdW50ID0gMDsKLQotICAgIGNoYXIgICAgICAgICAgICBidWZbU05NUF9NQVhCVUZdLAotICAgICAgICAqcywgKnQsICpyaXMsICpyYXdpZF9zZXRbSURfTlVNU1RSSU5HUyArIDFdID0gewotICAgICAgICBJREJMQVRfNCwKLSAgICAgICAgSURWSU9MQVRFMSwKLSAgICAgICAgSURJUHY0LAotICAgICAgICBJRElQdjYsCi0gICAgICAgIElETUFDLAotICAgICAgICBJRFRFWFQsCi0gICAgICAgIElET0NURVRTXzcsCi0gICAgICAgIElETE9DQUxfMTEsCi0gICAgICAgIElESVB2NF9FWFRSQTMsCi0gICAgICAgIE5VTEwKLSAgICB9OwotCi0gICAgT1VUUFVUKCJUZXN0IG9mIGR1bXBfc25tcEVuZ2luZUlELiAgIgotICAgICAgICAgICAiKERvZXMgbm90IHJlcG9ydCBmYWlsdXJlIG9yIHN1Y2Nlc3MuKSIpOwotCi0KLSAgICB3aGlsZSAoKHJpcyA9IHJhd2lkX3NldFtjb3VudCsrXSkpIHsKLSAgICAgICAgdGxlbiA9IGhleF90b19iaW5hcnkyKHJpcywgc3RybGVuKHJpcyksICZ0KTsKLQotICAgICAgICBpZiAocmlzID09IElEVEVYVCkgewotICAgICAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgU05NUF9NQVhCVUYpOwotICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgdCwgdGxlbik7Ci0gICAgICAgICAgICB0bGVuICs9IHNwcmludGYoYnVmICsgdGxlbiwgIiVzIiwgUFJJTlRBQkxFKTsKLQotICAgICAgICAgICAgU05NUF9GUkVFKHQpOwotICAgICAgICAgICAgdCA9IGJ1ZjsKLSAgICAgICAgfQotI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQotICAgICAgICBzID0gZHVtcF9zbm1wRW5naW5lSUQodCwgJnRsZW4pOwotICAgICAgICBwcmludGYoIiVzICAgIChsZW49JWQpXG4iLCBzLCB0bGVuKTsKLSNlbmRpZgotCi0gICAgICAgIFNOTVBfRlJFRShzKTsKLSAgICAgICAgaWYgKHQgIT0gYnVmKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUodCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZHVtcHNlaWQoKSAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9zY2FwaXRlc3QuYyBiL3Rlc3Rpbmcvc2NhcGl0ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZTkwOTguLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9zY2FwaXRlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4OSArMCwwIEBACi0vKgotICogc2NhcGl0ZXN0LmMKLSAqCi0gKiBFeHBlY3RlZCBTVUNDRVNTZXM6ICAyICsgMTAgKyAxIGZvciBhbGwgdGVzdHMuCi0gKgotICogUmV0dXJuczoKLSAqICAgICAgTnVtYmVyIG9mIEZBSUxVUkVzLgotICoKLSAqCi0gKiBBU1NVTUVTICBObyBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmV0dXJuIG5vbi16ZXJvIHN1Y2Nlc3MgY29kZXMuCi0gKgotICogWFhYICBTcGxpdCBpbnRvIGluZGl2aWR1YWwgbW9kdWxlcz8KLSAqIFhYWCAgRXJyb3IvZnJpbmdlIGNvbmRpdGlvbnMgc2hvdWxkIGJlIHRlc3RlZC4KLSAqCi0gKgotICogVGVzdCBvZiBzY19yYW5kb20uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogMi4KLSAqICAgICAgUkVRVUlSRVMgYSBodW1hbiB0byBzcG90IGNoZWNrIGZvciBvYnZpb3VzIG5vbi1yYW5kb21uZXNzLi4uCi0gKgotICogVGVzdCBvZiBzY19nZW5lcmF0ZV9rZXllZF9oYXNoIGFuZCBzY19jaGVja19rZXllZF9oYXNoLiAgICAgIFNVQ0NFU1NlczogMTAuCi0gKgotICogVGVzdCBvZiBzY19lbmNyeXB0IGFuZCBzY19kZWNyeXB0LiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogMS4KLSAqLwotCi1zdGF0aWMgY2hhciAgICAqcmNzaWQgPSAiJElkJCI7ICAgIC8qICovCi0KLQotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZmRlZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiYXNuMS5oIgotI2luY2x1ZGUgInNubXBfYXBpLmgiCi0jaW5jbHVkZSAia2V5dG9vbHMuaCIKLSNpbmNsdWRlICJ0b29scy5oIgotI2luY2x1ZGUgInNjYXBpLmgiCi0jaW5jbHVkZSAidHJhbnNmb3JtX29pZHMuaCIKLSNpbmNsdWRlICJjYWxsYmFjay5oIgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLWV4dGVybiBjaGFyICAgICpvcHRhcmc7Ci1leHRlcm4gaW50ICAgICAgb3B0aW5kLCBvcHRvcHQsIG9wdGVycjsKLQotI2RlZmluZSBERUJVRyAgICAgICAgICAgICAgICAgICAvKiAqLwotCi0KLQotLyoKLSAqIEdsb2JhbHMsICZjLi4uCi0gKi8KLWNoYXIgICAgICAgICAgICpsb2NhbF9wcm9nbmFtZTsKLQotI2RlZmluZSBVU0FHRQkiVXNhZ2U6ICVzIFstaF1bLWFjSHJdIgotI2RlZmluZSBPUFRJT05MSVNUCSJhY2hIciIKLQotaW50ICAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAwLCBkb2NyeXB0ID0gMCwgZG9rZXllZGhhc2ggPSAwLCBkb3JhbmRvbSA9IDA7Ci0KLSNkZWZpbmUJQUxMT1BUSU9OUwkoZG9hbGx0ZXN0cyArIGRvY3J5cHQgKyBkb2tleWVkaGFzaCArIGRvcmFuZG9tKQotCi0KLQotI2RlZmluZSBMT0NBTF9NQVhCVUYJKDEwMjQgKiA4KQotI2RlZmluZSBOTAkJIlxuIgotCi0jZGVmaW5lIE9VVFBVVChvKQlmcHJpbnRmKHN0ZG91dCwgIlxuXG4lc1xuXG4iLCBvKTsKLQotI2RlZmluZSBTVUNDRVNTKHMpCQkJCQlcCi17CQkJCQkJCVwKLQlpZiAoIWZhaWxjb3VudCkJCQkJCVwKLQkJZnByaW50ZihzdGRvdXQsICJcblNVQ0NFU1M6ICVzXG4iLCBzKTsJXAotfQotCi0jZGVmaW5lIEZBSUxFRChlLCBmKQkJCQkJXAotewkJCQkJCQlcCi0JaWYgKGUgIT0gU05NUEVSUl9TVUNDRVNTKSB7CQkJXAotCQlmcHJpbnRmKHN0ZG91dCwgIlxuRkFJTEVEOiAlc1xuIiwgZik7CVwKLQkJZmFpbGNvdW50ICs9IDE7CQkJCVwKLQl9CQkJCQkJXAotfQotCi0KLSNkZWZpbmUgQklHU1RSSU5HCQkJCQkJCVwKLSAgICAiICAgQSBwb3J0IG1heSBiZSBhIHBsZWFzYW50IHJldHJlYXQgZm9yIGFueSBtaW5kIGdyb3duIHdlYXJ5IG9mIglcCi0gICAgInRoZSBzdHJ1Z2dsZSBmb3IgZXhpc3RlbmNlLiAgVGhlIHZhc3QgZXhwYW5zZSBvZiBza3ksIHRoZSIJCVwKLSAgICAibW9iaWxlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY2xvdWRzLCB0aGUgY2hhbWVsZW9uIGNvbG9yYXRpb24iCVwKLSAgICAib2YgdGhlIHNlYSwgdGhlIGJlYWNvbnMgZmxhc2hpbmcgb24gdGhlIHNob3JlLCB0b2dldGhlciBtYWtlIglcCi0gICAgImEgcHJpc20gd2hpY2ggaXMgbWFydmVsbG91c2x5IGNhbGN1bGF0ZWQgdG8gZW50ZXJ0YWluIGJ1dCBub3QiCVwKLSAgICAiZmF0aWd1ZSB0aGUgZXllLiAgVGhlIGxvZnR5IHNoaXBzIHdpdGggdGhlaXIgY29tcGxleCB3ZWJzIG9mIglcCi0gICAgInJpZ2dpbmcsIHN3YXllZCB0byBhbmQgZnJvIGJ5IHRoZSBzd2VsbCBpbiBoYXJtb25pb3VzIGRhbmNlLCIJXAotICAgICJhbGwgaGVscCB0byBtYWludGFpbiBhIHRhc3RlIGZvciByaHl0aG0gYW5kIGJlYXV0eSBpbiB0aGUiCQlcCi0gICAgIm1pbmQuICBBbmQgYWJvdmUgYWxsIHRoZXJlIGlzIGEgbXlzdGVyaW91cywgYXJpc3Ryb2NyYXRpYyBraW5kIglcCi0gICAgIm9mIHBsZWFzdXJlIHRvIGJlIGhhZCwgZm9yIHRob3NlIHdobyBoYXZlIGxvc3QgYWxsIGN1cmlvc2l0eSIJXAotICAgICJvciBhbWJpdGlvbiwgYXMgdGhleSBzdHJlY2ggb24gdGhlIGJlbHZlZGVyZSBvciBsZWFuIG92ZXIgdGhlIglcCi0gICAgIm1vbGUgdG8gd2F0Y2ggdGhlIGFycml2YWxzIGFuZCBkZXBhcnR1cmVzIG9mIG90aGVyIG1lbiwgdGhvc2UiCVwKLSAgICAid2hvIHN0aWxsIGhhdmUgc3VmZmljaWVudCBzdHJlbmd0aCBvZiBwdXJwb3NlIGluIHRoZW0sIHRoZSIJXAotICAgICJ1cmdlIHRvIHRyYXZlbCBvciBlbnJpY2ggdGhlbXNlbHZlcy4iCQkJCVwKLSAgICAiCS0tIEJhdWRlbGFpcmUiCQkJCQkJCVwKLSAgICAiCSAgIEZyb20gX1RoZV9Qb2Vtc19pbl9Qcm9zZV8sIFwiVGhlIFBvcnRcIiAoWExJKS4iCi0KLSNkZWZpbmUgQklHU0VDUkVUCSJTaGhoaC4uLiBEb24ndCB0ZWxsICphbnlvbmUqIGFib3V0IHRoaXMuICBOb3QgYSBzb3VsLiIKLSNkZWZpbmUgQktXRFNFQ1JFVAkiLmx1b3MgYSB0b04gIC5zaWh0IHR1b2JhICplbm95bmEqIGxsZXQgdCdub0QgLi4uaGhoaFMiCi0KLSNkZWZpbmUgTUxDT1VOVF9NQVgJNiAgICAgICAvKiBNQUMgTGVuZ3RoIENvdW50IE1heGltdW0uICovCi0KLQotCi0vKgotICogUHJvdG90eXBlcy4KLSAqLwotdm9pZCAgICAgICAgICAgIHVzYWdlKEZJTEUgKiBvZnApOwotCi1pbnQgICAgICAgICAgICAgdGVzdF9kb2NyeXB0KHZvaWQpOwotaW50ICAgICAgICAgICAgIHRlc3RfZG9rZXllZGhhc2godm9pZCk7Ci1pbnQgICAgICAgICAgICAgdGVzdF9kb3JhbmRvbSh2b2lkKTsKLQotCi0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLSAgICBjaGFyICAgICAgICAgICAgY2g7Ci0KLSAgICBsb2NhbF9wcm9nbmFtZSA9IGFyZ3ZbMF07Ci0KLSAgICAvKgotICAgICAqIFBhcnNlLgotICAgICAqLwotICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgT1BUSU9OTElTVCkpICE9IEVPRikgewotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICBkb2NyeXB0ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdIJzoKLSAgICAgICAgICAgIGRva2V5ZWRoYXNoID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgIGRvcmFuZG9tID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIHJ2YWwgPSAwOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgICAgIGV4aXQocnZhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmdjIC09IDE7Ci0gICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgb3B0aW5kID0gMTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgZ2V0b3B0ICovCi0KLSAgICBpZiAoKGFyZ2MgPiAxKSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotCi0gICAgfSBlbHNlIGlmIChBTExPUFRJT05TICE9IDEpIHsKLSAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgZXhpdCgxMDAwKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogVGVzdCBzdHVmZi4KLSAgICAgKi8KLSAgICBydmFsID0gc2NfaW5pdCgpOwotICAgIEZBSUxFRChydmFsLCAic2NfaW5pdCgpLiIpOwotCi0KLSAgICBpZiAoZG9jcnlwdCB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2RvY3J5cHQoKTsKLSAgICB9Ci0gICAgaWYgKGRva2V5ZWRoYXNoIHx8IGRvYWxsdGVzdHMpIHsKLSAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZG9rZXllZGhhc2goKTsKLSAgICB9Ci0gICAgaWYgKGRvcmFuZG9tIHx8IGRvYWxsdGVzdHMpIHsKLSAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfZG9yYW5kb20oKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogQ2xlYW51cC4KLSAgICAgKi8KLSAgICBydmFsID0gc2Nfc2h1dGRvd24oU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NIVVRET1dOLAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX3NodXRkb3duKCkuIik7Ci0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBtYWluKCkgKi8KLQotCi0KLQotCi12b2lkCi11c2FnZShGSUxFICogb2ZwKQotewotICAgIGZwcmludGYob2ZwLAotICAgICAgICAgICAgVVNBR0UKLSAgICAgICAgICAgICIiIE5MCi0gICAgICAgICAgICAiCS1hCQlBbGwgdGVzdHMuIiBOTAotICAgICAgICAgICAgIgktYwkJVGVzdCBvZiBzY19lbmNyeXB0KCkvc2NfZGVjcnlwdCgpLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiCS1oCQlIZWxwLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiCS1IICAgICAgICAgICAgICBUZXN0IHNjX3tnZW5lcmF0ZSxjaGVja31fa2V5ZWRfaGFzaCgpLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiCS1yICAgICAgICAgICAgICBUZXN0IHNjX3JhbmRvbSgpLiIKLSAgICAgICAgICAgIE5MICIiIE5MLCBsb2NhbF9wcm9nbmFtZSk7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHVzYWdlKCkgKi8KLQotCi0KLQotI2lmZGVmIEVYQU1QTEUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2Rvc29tZXRoaW5nCi0gKgotICogVGVzdCB0ZW1wbGF0ZS4KLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICovCi1pbnQKLXRlc3RfZG9zb21ldGhpbmcodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLQotICAgIEVNMCgxLCAiVU5JTVBMRU1FTlRFRCIpOyAgICAvKiBFTSgxKTsgLyogKi8KLQotICB0ZXN0X2Rvc29tZXRoaW5nX3F1aXQ6Ci0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb3NvbWV0aGluZygpICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQU1QTEUgKi8KLQotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kb3JhbmRvbQotICoKLSAqIE9uZSBsYXJnZSByZXF1ZXN0LCBvbmUgc2V0IG9mIHNob3J0IHJlcXVlc3RzLgotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICogWFhYCXByb2JhYmx5IHNob3VsZCBzcGxpdCB1cCBpbnRvIGluZGl2aWR1YWwgb3B0aW9ucy4KLSAqLwotaW50Ci10ZXN0X2RvcmFuZG9tKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCi0gICAgICAgIGZhaWxjb3VudCA9IDAsCi0gICAgICAgIG9yaWdyZXF1ZXN0ID0gKDEwMjQgKiAyKSwKLSAgICAgICAgb3JpZ3JlcXVlc3Rfc2hvcnQgPSAxOSwgbmJ5dGVzID0gb3JpZ3JlcXVlc3QsIHNob3J0Y291bnQgPSA3LCBpOwotICAgIGNoYXIgICAgICAgICAgICBidWZbTE9DQUxfTUFYQlVGXTsKLQotICAgIE9VVFBVVCgiUmFuZG9tIHRlc3QgLS0gbGFyZ2UgcmVxdWVzdDoiKTsKLQotICAgIHJ2YWwgPSBzY19yYW5kb20oYnVmLCAmbmJ5dGVzKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX3JhbmRvbSgpLiIpOwotCi0gICAgaWYgKG5ieXRlcyAhPSBvcmlncmVxdWVzdCkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCi0gICAgICAgICAgICAgICAic2NfcmFuZG9tKCkgcmV0dXJuZWQgZGlmZmVyZW50IHRoYW4gcmVxdWVzdGVkLiIpOwotICAgIH0KLQotICAgIGR1bXBfY2h1bmsoInNjYXBpdGVzdCIsIE5VTEwsIGJ1ZiwgbmJ5dGVzKTsKLQotICAgIFNVQ0NFU1MoIlJhbmRvbSB0ZXN0IC0tIGxhcmdlIHJlcXVlc3QuIik7Ci0KLQotICAgIE9VVFBVVCgiUmFuZG9tIHRlc3QgLS0gc2hvcnQgcmVxdWVzdHM6Iik7Ci0gICAgb3JpZ3JlcXVlc3Rfc2hvcnQgPSAxNjsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBzaG9ydGNvdW50OyBpKyspIHsKLSAgICAgICAgbmJ5dGVzID0gb3JpZ3JlcXVlc3Rfc2hvcnQ7Ci0gICAgICAgIHJ2YWwgPSBzY19yYW5kb20oYnVmLCAmbmJ5dGVzKTsKLSAgICAgICAgRkFJTEVEKHJ2YWwsICJzY19yYW5kb20oKS4iKTsKLQotICAgICAgICBpZiAobmJ5dGVzICE9IG9yaWdyZXF1ZXN0X3Nob3J0KSB7Ci0gICAgICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCi0gICAgICAgICAgICAgICAgICAgInNjX3JhbmRvbSgpIHJldHVybmVkIGRpZmZlcmVudCAiICJ0aGFuIHJlcXVlc3RlZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGR1bXBfY2h1bmsoInNjYXBpdGVzdCIsIE5VTEwsIGJ1ZiwgbmJ5dGVzKTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kZm9yICovCi0KLSAgICBTVUNDRVNTKCJSYW5kb20gdGVzdCAtLSBzaG9ydCByZXF1ZXN0cy4iKTsKLQotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb3JhbmRvbSgpICovCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kb2tleWVkaGFzaAotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICoKLSAqIFRlc3Qga2V5ZWQgaGFzaGVzIHdpdGggYSB2YXJpZXR5IG9mIE1BQyBsZW5ndGggcmVxdWVzdHMuCi0gKgotICoKLSAqIE5PVEUgQm90aCB0ZXN0cyBpbnRlbnRpb25hbGx5IHVzZSB0aGUgc2FtZSBzZWNyZXQKLSAqCi0gKiBGSVgJR2V0IGlucHV0IG9yIG91dHB1dCBmcm9tIHNvbWUgb3RoZXIgcGFja2FnZSB3aGljaCBoYXNoZXMuLi4KLSAqIFhYWAlDb3VsZCBjdXQgdGhpcyBpbiBoYWxmIHdpdGggYSBsaXR0bGUgaW5kaXJlY3Rpb24uLi4KLSAqLwotaW50Ci10ZXN0X2Rva2V5ZWRoYXNoKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDAsIGJpZ3N0cmluZ19sZW4gPSBzdHJsZW4oQklHU1RSSU5HKSwgc2VjcmV0X2xlbiA9IHN0cmxlbihCSUdTRUNSRVQpLCBwcm9wZXJsZW5ndGgsIG1sY291bnQgPSAwLCAgICAgICAgLyogTUFDIExlbmd0aCBjb3VudC4gICAqLwotICAgICAgICAgICAgICAgICAgICBoYmxlbjsgICAgICAvKiBIYXNoIEJ1ZmZlciBsZW5ndGguICovCi0KLSAgICB1X2ludCAgICAgICAgICAgaGFzaGJ1Zl9sZW5bTUxDT1VOVF9NQVhdID0gewotICAgICAgICBMT0NBTF9NQVhCVUYsCi0gICAgICAgIEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSksCi0gICAgICAgIEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KSwKLSAgICAgICAgQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUM5NiksCi0gICAgICAgIDcsCi0gICAgICAgIDAsCi0gICAgfTsKLQotICAgIHVfY2hhciAgICAgICAgICBoYXNoYnVmW0xPQ0FMX01BWEJVRl07Ci0gICAgY2hhciAgICAgICAgICAgKnM7Ci0KLSAgdGVzdF9kb2tleWVkaGFzaF9hZ2FpbjoKLQotICAgIE9VVFBVVCgiS2V5ZWQgaGFzaCB0ZXN0IHVzaW5nIE1ENSAtLSIpOwotCi0gICAgbWVtc2V0KGhhc2hidWYsIDAsIExPQ0FMX01BWEJVRik7Ci0gICAgaGJsZW4gPSBoYXNoYnVmX2xlblttbGNvdW50XTsKLSAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSk7Ci0KLSAgICBydmFsID0KLSAgICAgICAgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCh1c21ITUFDTUQ1QXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgQklHU0VDUkVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldF9sZW4sIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoYnVmLCAmaGJsZW4pOwotICAgIEZBSUxFRChydmFsLCAic2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCgpLiIpOwotCi0gICAgaWYgKGhhc2hidWZfbGVuW21sY291bnRdID4gcHJvcGVybGVuZ3RoKSB7Ci0gICAgICAgIGlmIChoYmxlbiAhPSBwcm9wZXJsZW5ndGgpIHsKLSAgICAgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIldyb25nIE1ENSBoYXNoIGxlbmd0aCByZXR1cm5lZC4gICgxKSIpOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgaWYgKGhibGVuICE9IGhhc2hidWZfbGVuW21sY291bnRdKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIldyb25nIE1ENSBoYXNoIGxlbmd0aCByZXR1cm5lZC4gICgyKSIpOwotICAgIH0KLQotICAgIHJ2YWwgPQotICAgICAgICBzY19jaGVja19rZXllZF9oYXNoKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCBCSUdTRUNSRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2xlbiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLCBoYXNoYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhibGVuKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX2NoZWNrX2tleWVkX2hhc2goKS4iKTsKLQotICAgIGJpbmFyeV90b19oZXgoaGFzaGJ1ZiwgaGJsZW4sICZzKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgImhhc2ggYnVmZmVyIChsZW49JWQsIHJlcXVlc3Q9JWQpOiAgICVzXG4iLAotICAgICAgICAgICAgaGJsZW4sIGhhc2hidWZfbGVuW21sY291bnRdLCBzKTsKLSAgICBTTk1QX0ZSRUUocyk7Ci0KLSAgICBTVUNDRVNTKCJLZXllZCBoYXNoIHRlc3QgdXNpbmcgTUQ1LiIpOwotCi0KLQotICAgIE9VVFBVVCgiS2V5ZWQgaGFzaCB0ZXN0IHVzaW5nIFNIQTEgLS0iKTsKLQotICAgIG1lbXNldChoYXNoYnVmLCAwLCBMT0NBTF9NQVhCVUYpOwotICAgIGhibGVuID0gaGFzaGJ1Zl9sZW5bbWxjb3VudF07Ci0gICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKTsKLQotICAgIHJ2YWwgPQotICAgICAgICBzY19nZW5lcmF0ZV9rZXllZF9oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgQklHU0VDUkVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldF9sZW4sIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoYnVmLCAmaGJsZW4pOwotICAgIEZBSUxFRChydmFsLCAic2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCgpLiIpOwotCi0gICAgaWYgKGhhc2hidWZfbGVuW21sY291bnRdID4gcHJvcGVybGVuZ3RoKSB7Ci0gICAgICAgIGlmIChoYmxlbiAhPSBwcm9wZXJsZW5ndGgpIHsKLSAgICAgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICAgICAiV3JvbmcgU0hBMSBoYXNoIGxlbmd0aCByZXR1cm5lZC4gICgxKSIpOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgaWYgKGhibGVuICE9IGhhc2hidWZfbGVuW21sY291bnRdKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIldyb25nIFNIQTEgaGFzaCBsZW5ndGggcmV0dXJuZWQuICAoMikiKTsKLSAgICB9Ci0KLSAgICBydmFsID0KLSAgICAgICAgc2NfY2hlY2tfa2V5ZWRfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sIEJJR1NFQ1JFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfbGVuLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sIGhhc2hidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGJsZW4pOwotICAgIEZBSUxFRChydmFsLCAic2NfY2hlY2tfa2V5ZWRfaGFzaCgpLiIpOwotCi0gICAgYmluYXJ5X3RvX2hleChoYXNoYnVmLCBoYmxlbiwgJnMpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiaGFzaCBidWZmZXIgKGxlbj0lZCwgcmVxdWVzdD0lZCk6ICAgJXNcbiIsCi0gICAgICAgICAgICBoYmxlbiwgaGFzaGJ1Zl9sZW5bbWxjb3VudF0sIHMpOwotICAgIFNOTVBfRlJFRShzKTsKLQotICAgIFNVQ0NFU1MoIktleWVkIGhhc2ggdGVzdCB1c2luZyBTSEExLiIpOwotCi0KLQotICAgIC8qCi0gICAgICogUnVuIHRoZSBiYXNpYyBoYXNoIHRlc3RzIGJ1dCB2YXJ5IHRoZSBzaXplIE1BQyByZXF1ZXN0cy4KLSAgICAgKi8KLSAgICBpZiAoaGFzaGJ1Zl9sZW5bKyttbGNvdW50XSAhPSAwKSB7Ci0gICAgICAgIGdvdG8gdGVzdF9kb2tleWVkaGFzaF9hZ2FpbjsKLSAgICB9Ci0KLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9rZXllZGhhc2goKSAqLwotCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2RvY3J5cHQKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICovCi1pbnQKLXRlc3RfZG9jcnlwdCh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAotICAgICAgICBmYWlsY291bnQgPSAwLAotICAgICAgICBiaWdzdHJpbmdfbGVuID0gc3RybGVuKEJJR1NUUklORyksCi0gICAgICAgIHNlY3JldF9sZW4gPSBCWVRFU0laRShTTk1QX1RSQU5TX1BSSVZMRU5fMURFUyksCi0gICAgICAgIGl2X2xlbiA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfUFJJVkxFTl8xREVTX0lWKTsKLQotICAgIHVfaW50ICAgICAgICAgICBidWZfbGVuID0gTE9DQUxfTUFYQlVGLCBjcnlwdGJ1Zl9sZW4gPSBMT0NBTF9NQVhCVUY7Ci0KLSAgICBjaGFyICAgICAgICAgICAgYnVmW0xPQ0FMX01BWEJVRl0sCi0gICAgICAgIGNyeXB0YnVmW0xPQ0FMX01BWEJVRl0sIHNlY3JldFtMT0NBTF9NQVhCVUZdLCBpdltMT0NBTF9NQVhCVUZdOwotCi0gICAgT1VUUFVUKCJUZXN0IDFERVMtQ0JDIC0tIik7Ci0KLQotICAgIG1lbXNldChidWYsIDAsIExPQ0FMX01BWEJVRik7Ci0KLSAgICBtZW1jcHkoc2VjcmV0LCBCSUdTRUNSRVQsIHNlY3JldF9sZW4pOwotICAgIG1lbWNweShpdiwgQktXRFNFQ1JFVCwgaXZfbGVuKTsKLQotCi0gICAgcnZhbCA9IHNjX2VuY3J5cHQodXNtREVTUHJpdlByb3RvY29sLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCi0gICAgICAgICAgICAgICAgICAgICAgc2VjcmV0LCBzZWNyZXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLCBjcnlwdGJ1ZiwgJmNyeXB0YnVmX2xlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19lbmNyeXB0KCkuIik7Ci0KLSAgICBydmFsID0gc2NfZGVjcnlwdCh1c21ERVNQcml2UHJvdG9jb2wsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKLSAgICAgICAgICAgICAgICAgICAgICBzZWNyZXQsIHNlY3JldF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X2xlbiwgY3J5cHRidWYsIGNyeXB0YnVmX2xlbiwgYnVmLCAmYnVmX2xlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19kZWNyeXB0KCkuIik7Ci0KLSAgICBpZiAoYnVmX2xlbiAhPSBiaWdzdHJpbmdfbGVuKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIkRlY3J5cHRlZCBidWZmZXIgaXMgdGhlIHdyb25nIGxlbmd0aC4iKTsKLSAgICB9Ci0gICAgaWYgKG1lbWNtcChidWYsIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbikpIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgIkRlY3J5cHRlZCBidWZmZXIgaXMgbm90IGVxdWFsIHRvIG9yaWdpbmFsIHBsYWludGV4dC4iKTsKLSAgICB9Ci0KLQotICAgIFNVQ0NFU1MoIlRlc3QgMURFUy1DQkMgLS0iKTsKLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9jcnlwdCgpICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3Rfa2V5Y2hhbmdlLnNoIGIvdGVzdGluZy90ZXN0X2tleWNoYW5nZS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTI1OWZlNS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3Rfa2V5Y2hhbmdlLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIHRlc3Rfa2V5Y2hhbmdlLnNoCi0jCi0jIE51bWJlciBvZiBTVUNDRVNTZXM6ICAzCi0jCi0jCi0jIFJ1biB0ZXN0IG9mIEtleUNoYW5nZSBUQyBhZ2FpbnN0IGRhdGEgZ2l2ZW4gYnkgQmVydCBXaWpuZW4gaW4gZW1haWwuCi0jCi0jIE5PVEUJVGhlIHNubXBfZGVidWcgZmxhZyBiaXQgREVCVUdfUkFORE9NWkVST1MgaW4gZmlsZSBzbm1wbGliL2RlYnVnLmgKLSMJTVVTVCBiZSBzZXQgYmVmb3JlIGNvbXBpbGluZyBhbmQgbGlua2luZyBsaWJzbm1wLmEgdG8gdGVzdGluZy9rdGVzdAotIwlmb3IgdGhpcyB0byBzdWNjZWVkLgotIwotCi0KLS4gZXZhbF90b29scy5zaAotCi1WRVJJRlkga3Rlc3QKLQotU1RBUlRURVNUCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIERlY2xhcmF0aW9ucy4KLSMKLURBVEFGSUxFX1BSRUZJWD1kYXRhLmtleWNoYW5nZS0KLURBVEFGSUxFX1NVRkZJWEVTPSJtZDUgc2hhMSBzaGExLWRlcyIKLQotb2xka3VsPQotbmV3a3VsPQota2V5Y2hhbmdlc3RyaW5nPQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIFRlc3QuCi0jCi1mb3IgZGZzIGluICREQVRBRklMRV9TVUZGSVhFUzsgZG8KLQlPVVRQVVQgIj09IFRlc3Qgb2YgS2V5Q2hhbmdlIFRDIGNvcnJlY3RuZXNzIGZvciBcIiRkZnNcIi4iCi0KLQlzZXQgeCBgYXdrICd7IHByaW50ICQxIH0nICR7REFUQUZJTEVfUFJFRklYfSRkZnNgCi0Jc2hpZnQKLQotCVsgJCMgLWx0IDMgXSAmJiBGQUlMRUQgMSBcCi0JICAgICJXcm9uZyBudW1iZXIgb2YgbGluZXMgKCQjKSBpbiBkYXRhZmlsZSBcIiREQVRBRklMRV9QUkVGSVh9JGRmc1wiLiIKLQotCW9sZGtleT0kMQotCW5ld2tleT0kMgotCWtleWNoYW5nZXN0cmluZz0kMwotCi0JQ0FQVFVSRSAia3Rlc3QgLWsgLU8gJG9sZGtleSAtTiAkbmV3a2V5IgotCUZBSUxFRCAkPyAia3Rlc3QiCi0KLQlDSEVDS0VYQUNUICRrZXljaGFuZ2VzdHJpbmcKLQlbICQ/IC1lcSAxIF0KLQlGQUlMRUQgJD8gIlByb3BlciBLZXlDaGFuZ2Ugc3RyaW5nIHdhcyBub3QgZ2VuZXJhdGVkLiIKLQotCi0JU1VDQ0VTUyAiS2V5Q2hhbmdlIFRDIGNvcnJlY3RuZXNzIHRlc3QgZm9yIFwiJGRmc1wiLiIKLWRvbmUKLQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIENsZWFudXAsIGV4aXQuCi0jCi1TVE9QVEVTVAotCi1leGl0ICRmYWlsY291bnQKLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0X2t1bC5zaCBiL3Rlc3RpbmcvdGVzdF9rdWwuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDcwYjdiNzYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0X2t1bC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyB0ZXN0X2t1bC5zaAotIwotIyBOdW1iZXIgb2YgU1VDQ0VTU2VzOgkyCi0jCi0jIFJ1biBrZXkgbG9jYWxpemF0aW9uIHRlc3RzIGFuZCBjb21wYXJlIHdpdGggZGF0YSBnaXZlbiBpbiB0aGUgVVNNCi0jIGRvY3VtZW50YXRpb24uCi0jCi0jIEZJWAlDSEVDS0VYQUNUKCkgd2lsbCBwcm9kdWNlIDIgbGluZXMgd2hlbiBTQ0FQSSBpcyBidWlsdCB3aXRoCi0jCVNOTVBfVEVTVElOR19DT0RFLCBidXQgb25seSAxIGxpbmUgd2l0aG91dCB0aGUgI2RlZmluZS4gIFRoZSBzY3JpcHQKLSMJYXNzdW1lcyBTTk1QX1RFU1RJTkdfQ09ERSBpcyBkZWZpbmVkLgotIwotIwotCi0KLS4gZXZhbF90b29scy5zaAotCi1WRVJJRlkga3Rlc3QKLQotU1RBUlRURVNUCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIERlY2xhcmF0aW9ucy4KLSMKLURBVEFGSUxFX1BSRUZJWD1kYXRhLmt1bC0KLURBVEFGSUxFX1NVRkZJWEVTPSJtZDUgc2hhMSIKLQotUD0KLUt1PQotZW5naW5lSUQ9Ci1rdWw9Ci0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgVGVzdC4KLSMKLWZvciBkZnMgaW4gJERBVEFGSUxFX1NVRkZJWEVTOyBkbwotCU9VVFBVVCAiPT0gVGVzdCBvZiBrZXkgbG9jYWxpemF0aW9uIGNvcnJlY3RuZXNzIHdpdGggdHJhbnNmb3JtIFwiJGRmc1wiLiIKLQotCXNldCB4IGBhd2sgJ3sgcHJpbnQgJDEgfScgJHtEQVRBRklMRV9QUkVGSVh9JGRmc2AKLQlzaGlmdAotCi0JWyAkIyAtbHQgNCBdICYmIEZBSUxFRCAxIFwKLQkgICAgIldyb25nIG51bWJlciBvZiBsaW5lcyAoJCMpIGluIGRhdGFmaWxlIFwiJERBVEFGSUxFX1BSRUZJWH0kZGZzXCIuIgotCi0JUD0kMQotCUt1PSQyCi0JZW5naW5lSUQ9JDMKLQlrdWw9JDQKLQotCUNBUFRVUkUgImt0ZXN0IC1sIC1QICRQIC1FICRlbmdpbmVJRCAiCi0JRkFJTEVEICQ/ICJrdGVzdCIKLQotCUNIRUNLRVhBQ1QgJEt1Ci0JWyAkPyAtZXEgMiBdCi0JRkFJTEVEICQ/ICJNYXN0ZXIga2V5IHdhcyBub3QgZ2VuZXJhdGVkLiIKLQotCUNIRUNLRVhBQ1QgJGt1bAotCVsgJD8gLWVxIDIgXQotCUZBSUxFRCAkPyAiTG9jYWxpemVkIGtleSB3YXMgbm90IGdlbmVyYXRlZC4iCi0KLQotCVNVQ0NFU1MgIktleSBsb2NhbGl6YXRpb24gY29ycmVjdG5lc3MgdGVzdCB3aXRoIHRyYW5zZm9ybSBcIiRkZnNcIi4iCi1kb25lCi0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBDbGVhbnVwLCBleGl0LgotIwotU1RPUFRFU1QKLQotZXhpdCAkZmFpbGNvdW50Ci0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvU3YzY29uZmlnIGIvdGVzdGluZy90ZXN0cy9TdjNjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYTdmYjIuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9TdjNjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIS9iaW4vc2gKLQotWyAieCRTTk1QX1NNVVhfU09DS0VUIiA9ICJ4IiBdICYmIFNOTVBfU01VWF9TT0NLRVQ9MS4wLjAuMAotCi1DT05GSUdBR0VOVCBbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgotQ09ORklHQUdFTlQgc211eHNvY2tldCAkU05NUF9TTVVYX1NPQ0tFVAotCi0jIFhYWDogYXV0by1zd2l0Y2ggdG8gYSBzdXBwb3J0ZWQgcHJvdG9jb2wgaW5zdGVhZC4KLWlmIHRlc3QgIngkREVGQVVUSFRZUEUiID0gIngiOyB0aGVuCi0gICAgaWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KLQlERUZBVVRIVFlQRT0iU0hBIgotICAgIGVsc2UKLQkgICAgREVGQVVUSFRZUEU9Ik1ENSIKLSAgICBmaQotZmkKLQotaWYgdGVzdCAieCRERUZQUklWVFlQRSIgPSAieCI7IHRoZW4KLSAgIyBYWFg6IEhBVkVfQUVTIGRlcGVuZHMgb24gY3BwIGxvZ2ljLCBzbyB3ZSBuZWVkIHRvIHRlc3QgZm9yIGxvd2VyLWxldmVsIHN0dWZmCi0gIGlmIGdyZXAgJ14jZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCi0gICAgaWYgZ3JlcCAnXiNkZWZpbmUgSEFWRV9PUEVOU1NMX0FFU19IIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgotICAgICAgaWYgZ3JlcCAnXiNkZWZpbmUgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCi0gICAgICAgIERFRlBSSVZUWVBFPSJBRVMiCi0gICAgICBlbHNlCi0gICAgICAgIERFRlBSSVZUWVBFPSJERVMiCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIERFRlBSSVZUWVBFPSJERVMiCi0gICAgZmkKLSAgZWxzZQotICAgIERFRlBSSVZUWVBFPSIiCi0gIGZpCi1maQotCi1DT05GSUdBR0VOVCBjcmVhdGVVc2VyIGluaXRpYWwgJERFRkFVVEhUWVBFIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggJERFRlBSSVZUWVBFCi1DT05GSUdBR0VOVCBjcmVhdGVVc2VyIHRlbXBsYXRlICRERUZBVVRIVFlQRSB0ZW1wbGF0ZV90ZXN0X3Bhc3NfYXV0aCAkREVGUFJJVlRZUEUKLUNPTkZJR0FHRU5UIHJ3dXNlciBpbml0aWFsIG5vYXV0aAotQ09ORklHQUdFTlQgcnd1c2VyIG5ld3Rlc3R1c2VyCi0KLU5PQVVUSFRFU1RBUkdTPSItbCBuYW5wIC11IGluaXRpYWwgLXYgMyIKLUFVVEhURVNUQVJHUz0iLWwgYW5wIC11IGluaXRpYWwgLXYgMyAtYSAkREVGQVVUSFRZUEUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCIKLVBSSVZURVNUQVJHUz0iLWwgYXAgLXUgaW5pdGlhbCAtdiAzIC1hICRERUZBVVRIVFlQRSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC14ICRERUZQUklWVFlQRSAtWCBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIgotCi1BVVRITk9QQVNTVEVTVEFSR1M9Ii1sIGFucCAtdSBpbml0aWFsIC12IDMgLWEgJERFRkFVVEhUWVBFIgotUFJJVk5PUEFTU1RFU1RBUkdTPSItbCBhcCAtdSBpbml0aWFsIC12IDMgLWEgJERFRkFVVEhUWVBFIC14ICRERUZQUklWVFlQRSIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYmFzZSBiL3Rlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYmFzZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0MTg5NC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2Jhc2UKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgU05NUHYzIGJhc2UgY29uZmlnCi0jCi0jIElucHV0K091dHB1dCB2YXJpYWJsZXM6Ci0jICAgREVGU0VDVVJJVFlMRVZFTCAgICAgICAgIG5vQXV0aE5vUHJpdnxhdXRoTm9Qcml2fGF1dGhQcml2Ci0jICAgREVGQVVUSFRZUEUgICAgICAgICAgICAgIE1ENXxTSEEKLSMgICBERUZQUklWVFlQRSAgICAgICAgICAgICAgREVTfEFFUwotIyAgIFRFU1ROT0FVVEhVU0VSICAgICAgICAgICA8bXl1c2VyPgotIyAgIFRFU1QoQVVUSHxQUklWKVVTRVJbMl0gICA8bXl1c2VyPgotIyAgIFRFU1QoQVVUSHxQUklWKVBBU1NbMl0gICA8bXlwYXNzPgotIwotIyBJbnB1dCB2YXJpYWJsZXM6Ci0jICAgQ1JFQVRFVVNFUkVOR0lORUlEICAgICAgIDxlbmdpbmVpZD4KLSMKLSMgT3V0cHV0IHZhcmlhYmxlczoKLSMgICBDUkVBVEVBVVRIVVNFUlsyXQotIyAgIENSRUFURVBSSVZVU0VSWzJdCi0jICAgQ1JFQVRFTk9BVVRIVVNFUgotIyAgIFRFU1ROT0FVVEhBUkdTCi0jICAgVEVTVEFVVEhBUkdTW05PUEFTU11bMl0KLSMgICBURVNUUFJJVkFSR1NbTk9QQVNTXVsyXQotIwotCi0jIyBEZWZhdWx0cwotWyAieCRERUZTRUNVUklUWUxFVkVMIiA9ICJ4IiBdICYmIERFRlNFQ1VSSVRZTEVWRUw9YXV0aFByaXYKLQotIyMgYXV0by1wcm9iZSBiZXN0IGF1dGggdHlwZQotaWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KLSAgTUFYQVVUSFRZUEU9U0hBCi1lbHNlCi0gICMgTUQ1IGlzIGFsd2F5cyBhdmFpbGFibGUgaW50ZXJuYWxseQotICBNQVhBVVRIVFlQRT1NRDUKLWZpCi0KLSMjIGF1dG8tcHJvYmUgYmVzdCBwcml2IHR5cGUKLSMgWFhYOiBIQVZFX0FFUyBkZXBlbmRzIG9uIGNwcCBsb2dpYywgc28gd2UgbmVlZCB0byB0ZXN0IGZvciBsb3dlci1sZXZlbCBzdHVmZgotaWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbDsgdGhlbgotICBpZiBncmVwICdeI2RlZmluZSBIQVZFX09QRU5TU0xfQUVTX0ggMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgJiYgXAotICAgZ3JlcCAnXiNkZWZpbmUgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCi0gICAgTUFYUFJJVlRZUEU9QUVTCi0gIGVsc2UKLSAgICBNQVhQUklWVFlQRT1ERVMKLSAgZmkKLWVsc2UKLSAgICBNQVhQUklWVFlQRT0iIgotZmkKLQotQ1JFQVRFVVNFUkNNRD0iY3JlYXRlVXNlciIKLVsgIngkQ1JFQVRFVVNFUkVOR0lORUlEIiAhPSAieCIgXSAmJiBDUkVBVEVVU0VSQ01EPSIkQ1JFQVRFVVNFUkNNRCAtZSAkQ1JFQVRFVVNFUkVOR0lORUlEIgotCi0jIyBhdXRoIHNldHVwCi1pZiBbICJ4JERFRlNFQ1VSSVRZTEVWRUwiID0gInhhdXRoUHJpdiIgLW8gIngkREVGU0VDVVJJVFlMRVZFTCIgPSAieGF1dGhOb1ByaXYiIF07IHRoZW4KLSAgWyAieCRNQVhBVVRIVFlQRSIgPSAieCIgXSAmJiBTS0lQCi0gIFsgIngkREVGQVVUSFRZUEUiID0gInhTSEEiIC1hICJ4JE1BWEFVVEhUWVBFIiAhPSAieFNIQSIgXSAmJiBTS0lQCi0gIFsgIngkREVGQVVUSFRZUEUiID0gIngiIF0gJiYgREVGQVVUSFRZUEU9JE1BWEFVVEhUWVBFCi0gICMgdXNlci9wYXNzIHNldHVwIChYWFg6IHJhbmRvbWl6ZSkKLSAgWyAieCRURVNUQVVUSFVTRVIiID0gIngiIF0gJiYgVEVTVEFVVEhVU0VSPWluaXRpYWxfYXV0aAotICBbICJ4JFRFU1RBVVRIVVNFUjIiID0gIngiIF0gJiYgVEVTVEFVVEhVU0VSMj10ZW1wbGF0ZV9hdXRoCi0gIFsgIngkVEVTVEFVVEhQQVNTIiA9ICJ4IiBdICYmIFRFU1RBVVRIUEFTUz1pbml0aWFsX3Rlc3RfcGFzc19hdXRoCi0gIFsgIngkVEVTVEFVVEhQQVNTMiIgPSAieCIgXSAmJiBURVNUQVVUSFBBU1MyPXRlbXBsYXRlX3Rlc3RfcGFzc19hdXRoCi0gIENSRUFURUFVVEhVU0VSPSIkQ1JFQVRFVVNFUkNNRCAkVEVTVEFVVEhVU0VSICRERUZBVVRIVFlQRSAkVEVTVEFVVEhQQVNTIgotICBDUkVBVEVBVVRIVVNFUjI9IiRDUkVBVEVVU0VSQ01EICRURVNUQVVUSFVTRVIyICRERUZBVVRIVFlQRSAkVEVTVEFVVEhQQVNTMiIKLSAgIyBjb21tYW5kIGFyZ3MKLSAgVEVTVEFVVEhBUkdTTk9QQVNTPSItdiAzIC1sIGFucCAtdSAkVEVTVEFVVEhVU0VSIC1hICRERUZBVVRIVFlQRSIKLSAgVEVTVEFVVEhBUkdTTk9QQVNTMj0iLXYgMyAtbCBhbnAgLXUgJFRFU1RBVVRIVVNFUjIgLWEgJERFRkFVVEhUWVBFIgotICBURVNUQVVUSEFSR1M9IiRURVNUQVVUSEFSR1NOT1BBU1MgLUEgJFRFU1RBVVRIUEFTUyIKLSAgVEVTVEFVVEhBUkdTMj0iJFRFU1RBVVRIQVJHU05PUEFTUzIgLUEgJFRFU1RBVVRIUEFTUzIiCi1maQotCi0jIyBwcml2IHNldHVwCi1pZiBbICJ4JERFRlNFQ1VSSVRZTEVWRUwiID0gInhhdXRoUHJpdiIgXTsgdGhlbgotICBbICJ4JE1BWFBSSVZUWVBFIiA9ICJ4IiBdICYmIFNLSVAKLSAgWyAieCRERUZQUklWVFlQRSIgPSAieEFFUyIgLWEgIngkTUFYUFJJVlRZUEUiICE9ICJ4QUVTIiBdICYmIFNLSVAKLSAgWyAieCRERUZQUklWVFlQRSIgPSAieCIgXSAmJiBERUZQUklWVFlQRT0kTUFYUFJJVlRZUEUKLSAgIyB1c2VyL3Bhc3Mgc2V0dXAgKFhYWDogcmFuZG9taXplKQotICBbICJ4JFRFU1RQUklWVVNFUiIgPSAieCIgXSAmJiBURVNUUFJJVlVTRVI9aW5pdGlhbF9wcml2Ci0gIFsgIngkVEVTVFBSSVZVU0VSMiIgPSAieCIgXSAmJiBURVNUUFJJVlVTRVIyPXRlbXBsYXRlX3ByaXYKLSAgWyAieCRURVNUUFJJVlBBU1MiID0gIngiIF0gJiYgVEVTVFBSSVZQQVNTPWluaXRpYWxfdGVzdF9wYXNzX3ByaXYKLSAgWyAieCRURVNUUFJJVlBBU1MyIiA9ICJ4IiBdICYmIFRFU1RQUklWUEFTUzI9dGVtcGxhdGVfdGVzdF9wYXNzX3ByaXYKLSAgQ1JFQVRFUFJJVlVTRVI9IiRDUkVBVEVVU0VSQ01EICRURVNUUFJJVlVTRVIgJERFRkFVVEhUWVBFICRURVNUQVVUSFBBU1MgJERFRlBSSVZUWVBFICRURVNUUFJJVlBBU1MiCi0gIENSRUFURVBSSVZVU0VSMj0iJENSRUFURVVTRVJDTUQgJFRFU1RQUklWVVNFUjIgJERFRkFVVEhUWVBFICRURVNUQVVUSFBBU1MyICRERUZQUklWVFlQRSAkVEVTVFBSSVZQQVNTMiIKLSAgIyBjb21tYW5kIGFyZ3MKLSAgVEVTVFBSSVZBUkdTTk9QQVNTPSItdiAzIC1sIGFwIC11ICRURVNUUFJJVlVTRVIgLWEgJERFRkFVVEhUWVBFIC14ICRERUZQUklWVFlQRSIKLSAgVEVTVFBSSVZBUkdTTk9QQVNTMj0iLXYgMyAtbCBhcCAtdSAkVEVTVFBSSVZVU0VSMiAtYSAkREVGQVVUSFRZUEUgLXggJERFRlBSSVZUWVBFIgotICBURVNUUFJJVkFSR1M9IiRURVNUUFJJVkFSR1NOT1BBU1MgLUEgJFRFU1RBVVRIUEFTUyAtWCAkVEVTVFBSSVZQQVNTIgotICBURVNUUFJJVkFSR1MyPSIkVEVTVFBSSVZBUkdTTk9QQVNTMiAtQSAkVEVTVEFVVEhQQVNTMiAtWCAkVEVTVFBSSVZQQVNTMiIKLWZpCi0KLSMjIG5vYXV0aCBzZXR1cAotWyAieCRURVNUTk9BVVRIVVNFUiIgPSAieCIgXSAmJiBURVNUTk9BVVRIVVNFUj1pbml0aWFsCi1URVNUTk9BVVRIQVJHUz0iLXYgMyAtbCBuYW5wIC11ICRURVNUTk9BVVRIVVNFUiIKLUNSRUFURU5PQVVUSFVTRVI9IiRDUkVBVEVVU0VSQ01EICRURVNUTk9BVVRIVVNFUiIKLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdjN2YWNtY29uZmlnIGIvdGVzdGluZy90ZXN0cy9TdjN2YWNtY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDdiZjk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvU3YzdmFjbWNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jIGdlbmVyaWNhbGx5IHNldCB1cCB0aGUgdXNlciAiaW5pdGlhbDEiIGFuZCAiaW5pdGlhbDIiICBmb3Igc25tcCB2MwotIyBhY2Nlc3MgdG8gdGhlIGFnZW50LgotCi0jIENvbmZpZ3VyYXRpb246Ci0jaW5pdGlhbDEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBkZW55IG90aGVycwotI2luaXRpYWwyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xIAotCi0jIFhYWDogZG8gYXV0b3NlbGVjdGlvbiBvZiBzdXBwb3J0ZWQgYWxnb3JpdGhtcwotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9NRDUKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfREVTCi0KLUNPTkZJR0FHRU5UIFtzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCi0KLUNPTkZJR0FHRU5UIGNyZWF0ZVVzZXIgaW5pdGlhbDEgTUQ1IGluaXRpYWxfdGVzdF9wYXNzX2F1dGggREVTCi1DT05GSUdBR0VOVCBjcmVhdGVVc2VyIGluaXRpYWwyIE1ENSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIERFUwotCi0KLUNPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwMSAgdXNtICAgICBpbml0aWFsMQotQ09ORklHQUdFTlQgZ3JvdXAgICB0ZXN0Y29tbXVuaXR5Z3JvdXAyICB1c20gICAgIGluaXRpYWwyCi0KLUNPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMSAgICAgaW5jbHVkZWQgLjEuMy42LjEuMi4xLjEuMSAKLUNPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMiAgICAgaW5jbHVkZWQgLjEKLUNPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMiAgICAgZXhjbHVkZWQgLjEuMy42LjEuMi4xLjEuMSAKLUNPTkZJR0FHRU5UICdhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cDEgICIiIGFueSBhdXRoIGV4YWN0IHN5c3RlbTEgbm9uZSBub25lJwotQ09ORklHQUdFTlQgJ2FjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwMiAgIiIgYW55IGF1dGggZXhhY3Qgc3lzdGVtMiBub25lIG5vbmUnCi0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvU3ZhY21jb25maWcgYi90ZXN0aW5nL3Rlc3RzL1N2YWNtY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGNjMzViLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvU3ZhY21jb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgotIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCi0jIGdlbmVyaWNhbGx5IHNldCB1cCB0aGUgY29tbXVuaXR5ICJ0ZXN0Y29tbXVuaXR5MSBhbmQgdGVzdGNvbW11bml0eTIiIGZvciB2YXJpb3VzIHNubXAKLSMgdmVyc2lvbiBhY2Nlc3MgdG8gdGhlIGFnZW50LgotCi1pZiBbICJ4JHNubXBfdmVyc2lvbiIgPSAieCIgXTsgdGhlbgotICBzbm1wX3ZlcnNpb249ImFueSIKLWZpCi0KLUNPTkZJR0FHRU5UIFtzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCi0KLUNPTkZJR0FHRU5UIHJvY29tbXVuaXR5IHRlc3Ryb2NvbW11bml0eSAxMjcuMC4wLjEgLjEuMy42LjEuMi4xLjEuNS4wCi1DT05GSUdBR0VOVCByd2NvbW11bml0eSB0ZXN0cndjb21tdW5pdHkgMTI3LjAuMC4xIC4xLjMuNi4xLjIuMS4xLjUuMAotCi1DT05GSUdBR0VOVCBjb20yc2VjIHRlc3Rjb21tdW5pdHlzZWMxICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkxCi1DT05GSUdBR0VOVCBjb20yc2VjIHRlc3Rjb21tdW5pdHlzZWMyICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkyCi0KLWlmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1ZHA2IiAtbyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInRjcDYiIF07dGhlbiAKLUNPTkZJR0FHRU5UIGNvbTJzZWM2IHRlc3Rjb21tdW5pdHlzZWMxICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkxCi1DT05GSUdBR0VOVCBjb20yc2VjNiB0ZXN0Y29tbXVuaXR5c2VjMiAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5MgotZmkKLQotaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVuaXgiIF07dGhlbiAKLUNPTkZJR0FHRU5UIGNvbTJzZWN1bml4IHRlc3Rjb21tdW5pdHlzZWMxICB0ZXN0Y29tbXVuaXR5MQotQ09ORklHQUdFTlQgY29tMnNlY3VuaXggdGVzdGNvbW11bml0eXNlYzIgIHRlc3Rjb21tdW5pdHkyCi1maQotCi1DT05GSUdBR0VOVCBncm91cCAgIHRlc3Rjb21tdW5pdHlncm91cDEgICRzbm1wX3ZlcnNpb24gICAgIHRlc3Rjb21tdW5pdHlzZWMxCi1DT05GSUdBR0VOVCBncm91cCAgIHRlc3Rjb21tdW5pdHlncm91cDIgICRzbm1wX3ZlcnNpb24gICAgIHRlc3Rjb21tdW5pdHlzZWMyCi0KLUNPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMSAgICAgaW5jbHVkZWQgLjEuMy42LjEuMi4xLjEuMSAKLUNPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMiAgICAgaW5jbHVkZWQgLjEKLUNPTkZJR0FHRU5UIHZpZXcgICAgc3lzdGVtMiAgICAgZXhjbHVkZWQgLjEuMy42LjEuMi4xLjEuMSAKLUNPTkZJR0FHRU5UICdhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cDEgICIiIGFueSBub2F1dGggZXhhY3Qgc3lzdGVtMSBub25lIG5vbmUnCi1DT05GSUdBR0VOVCAnYWNjZXNzICB0ZXN0Y29tbXVuaXR5Z3JvdXAyICAiIiBhbnkgbm9hdXRoIGV4YWN0IHN5c3RlbTIgbm9uZSBub25lJwotCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1N2YW55Y29uZmlnIGIvdGVzdGluZy90ZXN0cy9TdmFueWNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0ZDNiNS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1N2YW55Y29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyEvYmluL3NoCi0KLSMgZ2VuZXJpY2FsbHkgc2V0IHVwIHRoZSBjb21tdW5pdHkgInRlc3Rjb21tdW5pdHkiIGZvciB2YXJpb3VzIHNubXAKLSMgdmVyc2lvbiBhY2Nlc3MgdG8gdGhlIGFnZW50LgotCi1pZiBbICJ4JHNubXBfdmVyc2lvbiIgPSAieCIgXTsgdGhlbgotICBzbm1wX3ZlcnNpb249ImFueSIKLWZpCi0KLVsgIngkU05NUF9TTVVYX1NPQ0tFVCIgPSAieCIgXSAmJiBTTk1QX1NNVVhfU09DS0VUPTEuMC4wLjAKLQotQ09ORklHQUdFTlQgW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKLUNPTkZJR0FHRU5UIHNtdXhzb2NrZXQgJFNOTVBfU01VWF9TT0NLRVQKLQotQ09ORklHQUdFTlQgY29tMnNlYyB0ZXN0Y29tbXVuaXR5c2VjICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkKLWlmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1ZHA2IiAtbyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInRjcDYiIF07dGhlbiAKLQlDT05GSUdBR0VOVCBjb20yc2VjNiB0ZXN0Y29tbXVuaXR5c2VjICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkKLWZpCi0KLWlmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1bml4IiBdO3RoZW4gCi0JQ09ORklHQUdFTlQgY29tMnNlY3VuaXggdGVzdGNvbW11bml0eXNlYyAgdGVzdGNvbW11bml0eQotZmkKLQotQ09ORklHQUdFTlQgZ3JvdXAgICB0ZXN0Y29tbXVuaXR5Z3JvdXAgICRzbm1wX3ZlcnNpb24gICAgIHRlc3Rjb21tdW5pdHlzZWMKLUNPTkZJR0FHRU5UIHZpZXcgICAgYWxsICAgICBpbmNsdWRlZCAuMSA4MAotQ09ORklHQUdFTlQgJ2FjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwICAiIiBhbnkgbm9hdXRoIGV4YWN0IGFsbCBub25lIG5vbmUnCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQgYi90ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyY2IwNjAuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYxIHN1cHBvcnQKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YxY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1DQVBUVVJFICJzbm1wZ2V0bmV4dCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMyIKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4xIgotCi1DSEVDS09SRElFICJFcnJvciBpbiBwYWNrZXQiCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIG5vdGF2YWxpZGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1DSEVDS09SRElFICJUaW1lb3V0IgotCi1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQgYi90ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzFmOTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjJjIGdldCBvZiBzeXN0ZW0uc3lzVXBUaW1lLjAKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjJjY29uZmlnCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0IGIvdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjM2ZkZjYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjJjIGdldG5leHQgb2Ygc3lzdGVtLnN5c1VwVGltZQotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MmNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0bmV4dCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldCBiL3Rlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWMyYzQyNy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjJjIGJ1bGtnZXQgb2Ygc3lzdGVtIGNvbXBvbmVudHMKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjIgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MmNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wYnVsa2dldCAkU05NUF9GTEFHUyAtdjJjIC1PbiAtQ24xIC1DcjIgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQgLjEuMy42LjEuMi4xLjEiCi0KLVNUT1BBR0VOVAotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjIuMCA9IE9JRDoiCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAiCi1pZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgcmV0dXJuX3ZhbHVlPTEKLSAgICBGSU5JU0hFRAotZmkKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjUuMCIKLUVYUEVDVFJFU1VMVCAwCi1pZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgcmV0dXJuX3ZhbHVlPTEKLSAgICBGSU5JU0hFRAotZmkKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYzI0MTIuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIS9iaW4vc2gKLQotIwotIyB0ZXN0IHNubXB2MmMgZ2V0IHN1cHBvcnQgYnkgcmVhZGluZyBhIHZhcmlhYmxlCi0jCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgZm9yIGZhaWx1cmUgb2YgU05NUHYyYyBnZXQgd2l0aCB3cm9uZyBjb21tdW5pdHkKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgbm90YXZhbGlkY29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIlRpbWVvdXQiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOTc5NDIuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyEvYmluL3NoCi0KLSMKLSMgdGVzdCBzbm1wdjJjIGdldCBzdXBwb3J0IGJ5IHJlYWRpbmcgYSB2YXJpYWJsZQotIwotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIGZvciBmYWlsdXJlIG9mIFNOTVB2MmMgZ2V0IGFnYWluc3QgU05NUHYxIGFnZW50Ci0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIG5vdGF2YWxpZGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICJUaW1lb3V0IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzZjZDRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIGZvciBmYWlsdXJlIG9mIFNOTVB2MSBnZXQgYWdhaW5zdCBTTk1QdjJjIGFnZW50Ci0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MmNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyBub3RhdmFsaWRjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICJUaW1lb3V0IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaCBiL3Rlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWFiOWEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MmMgZ2V0IG9mIHN5c3RlbS5zeXNVcFRpbWUuMQotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MmNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4xIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMSA9IE5vIFN1Y2ggSW5zdGFuY2UiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjBzbm1wdjNnZXQgYi90ZXN0aW5nL3Rlc3RzL1QwMjBzbm1wdjNnZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YzZjZTMuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDIwc25tcHYzZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGdldCB1c2luZyBub0F1dGhOb1ByaXYgb2YgLjEuMy42LjEuMi4xLjEuMy4wCi0KLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBjb25maWd1cmUgdGhlIGFnZW50IHRvIGFjY2VwdCB1c2VyIGluaXRpYWwgd2l0aCBub0F1dGhOb1ByaXYKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkTk9BVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQgYi90ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyYjlmNjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgZ2V0bmV4dCB1c2luZyBpbml0aWFsIG9mIC4xLjMuNi4xLjIuMS4xLjMuMAotCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgY29uZmlndXJlIHRoZSBhZ2VudCB0byBhY2NlcHQgdXNlciBpbml0aWFsIHdpdGggbm9BdXRoTm9Qcml2Ci0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldG5leHQgLU9uICRTTk1QX0ZMQUdTICROT0FVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c3RlbS5zeXNVcFRpbWUiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyMjBzbm1wdjNidWxrZ2V0IGIvdGVzdGluZy90ZXN0cy9UMDIyMHNubXB2M2J1bGtnZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDhhOGVjYjcuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDIyMHNubXB2M2J1bGtnZXQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgYnVsa2dldCBvZiBzeXN0ZW0KLQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb246IAotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBidWxrZ2V0ICRTTk1QX0ZMQUdTIC1PbiAtQ24xIC1DcjIgJE5PQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNCAuMS4zLjYuMS4yLjEuMSIKLQotU1RPUEFHRU5UCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzoiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBTVFJJTkc6IgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMi4wID0gT0lEOiIKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCIKLWlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICByZXR1cm5fdmFsdWU9MQotICAgIEZJTklTSEVECi1maQotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuNS4wIgotRVhQRUNUUkVTVUxUIDAKLWlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICByZXR1cm5fdmFsdWU9MQotICAgIEZJTklTSEVECi1maQotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDIyc25tcHYzZ2V0TUQ1IGIvdGVzdGluZy90ZXN0cy9UMDIyc25tcHYzZ2V0TUQ1CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZTc5NjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyMnNubXB2M2dldE1ENQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgTUQ1L25vUHJpdiBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9NRDUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi1ERUZBVVRIVFlQRT0iTUQ1IgotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENUFFUyBiL3Rlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENUFFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczYzk4MC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVBRVMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIE1ENS9BRVMgb2YgLjEuMy42LjEuMi4xLjEuMy4wCi0KLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi1TS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLVNLSVBJRk5PVCBIQVZFX0FFU19DRkIxMjhfRU5DUllQVAotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9NRDUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi1ERUZBVVRIVFlQRT1NRDUKLURFRlBSSVZUWVBFPUFFUwotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRQUklWVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENURFUyBiL3Rlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENURFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDY4OWRlYS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVERVMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIE1ENS9ERVMgb2YgLjEuMy42LjEuMi4xLjEuMy4wCi0KLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi1TS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfTUQ1Ci0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotREVGQVVUSFRZUEU9TUQ1Ci1ERUZQUklWVFlQRT1ERVMKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkUFJJVlRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjRzbm1wdjNnZXRTSEExIGIvdGVzdGluZy90ZXN0cy9UMDI0c25tcHYzZ2V0U0hBMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWMxNDc0ZC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjRzbm1wdjNnZXRTSEExCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGdldCB1c2luZyBTSEEvbm9Qcml2IG9mIC4xLjMuNi4xLjIuMS4xLjMuMAotCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciB0ZW1wbGF0ZVNIQSB1c2VyCi1ERUZBVVRIVFlQRT0iU0hBIgotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyNXNubXB2M2dldFNIQURFUyBiL3Rlc3RpbmcvdGVzdHMvVDAyNXNubXB2M2dldFNIQURFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTRmYmFjYS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjVzbm1wdjNnZXRTSEFERVMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIFNIQS9ERVMgb2YgLjEuMy42LjEuMi4xLjEuMy4wCi0KLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi1TS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfREVTCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIHRlbXBsYXRlU0hBIHVzZXIKLURFRkFVVEhUWVBFPSJTSEEiCi1ERUZQUklWVFlQRT0iREVTIgotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRQUklWVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyNnNubXB2M2dldFNIQUFFUyBiL3Rlc3RpbmcvdGVzdHMvVDAyNnNubXB2M2dldFNIQUFFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY2NTEzYS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjZzbm1wdjNnZXRTSEFBRVMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIFNIQS9BRVMgb2YgLjEuMy42LjEuMi4xLjEuMy4wCi0KLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi1TS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLVNLSVBJRk5PVCBIQVZFX0FFU19DRkIxMjhfRU5DUllQVAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciB0ZW1wbGF0ZVNIQSB1c2VyCi1ERUZQUklWVFlQRT0iQUVTIgotREVGQVVUSFRZUEU9IlNIQSIKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkUFJJVlRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjhzbm1wdjNnZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMDI4c25tcHYzZ2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTkwOTVlMS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjhzbm1wdjNnZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgZm9yIGZhaWx1cmUgb2YgU05NUHYzIGdldCB1c2luZyB1bmtub3duIHVzZXIuCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLWwgbmFucCAtdSB1bmtub3dudXNlciAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICJVbmtub3duIHVzZXIgbmFtZSIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiBiL3Rlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFjYjQ0My4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGFnZW50IFVTTSB1c2VyIG1hbmFnZW1lbnQgd2l0aCBzbm1wdXNtCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLVNLSVBJRk5PVCBVU0lOR19TTk1QVjNfVVNNVVNFUl9NT0RVTEUKLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi1TS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgU05NUHYzIFVTTSBhZ2VudCBjb25maWd1cmF0aW9uCi1ERUZTRUNVUklUWUxFVkVMPWF1dGhQcml2Ci0uIC4vU3YzdXNtY29uZmlnYWdlbnQKLQotIyB0ZXN0IHVzZXIKLU5FV1VTRVI9bmV3dGVzdHVzZXIKLU5FV0FVVEhQQVNTPW5ld2F1dGhwYXNzCi1ORVdQUklWUEFTUz1uZXdwcml2cGFzcwotTkVXQVVUSFBSSVZQQVNTPW5ld2F1dGhwcml2cGFzcwotCi0jIGNvbmZpZ3VyZSBhZ2VudAotQ09ORklHQUdFTlQgcnd1c2VyICRORVdVU0VSCi0KLSMgU3RhcnQgdGhlIGFnZW50Ci1TVEFSVEFHRU5UCi0KLSMjIHVzbVVzZXJUYWJsZSBtYW5hZ2VtZW50Ci0KLSMjIDEpIGNyZWF0ZSwgY2xvbmUsIHRlc3QsIGRlbGV0ZQotCi0jIGNyZWF0ZSBuZXcgKHZhbmlsbGEpIHVzZXIKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNyZWF0ZSAkTkVXVVNFUiIKLUNIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQiCi0KLSMgY2xvbmUKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNsb25lRnJvbSAkTkVXVVNFUiAkVEVTVFBSSVZVU0VSIgotQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgY2xvbmVkIgotCi0jIHRlc3QgKGF1dGhQcml2KQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJFRFU1RBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJFRFU1RQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLSMgZGVsZXRlIAotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgZGVsZXRlICRORVdVU0VSIgotQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgZGVsZXRlZCIKLQotIyMgMikgY3JlYXRlIHcvIGNsb25lLCBwYXNzd2QgKGF1dGgpLCBwYXNzd2QgKHByaXYpLCB0ZXN0IChhdXRoUHJpdithdXRoTm9Qcml2KQotCi0jIGNyZWF0ZStjbG9uZSB0ZW1wbGF0ZSB1c2VyCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjcmVhdGUgJE5FV1VTRVIgJFRFU1RQUklWVVNFUjIiCi1DSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIgotCi0jIGNoYW5nZSBhdXRoIHBhc3NwaHJhc2Ugb2YgbmV3IHVzZXIKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAtQ2EgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJFRFU1RBVVRIUEFTUzIgJE5FV0FVVEhQQVNTICRORVdVU0VSIgotQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKLQotIyBjaGFuZ2UgcHJpdiBwYXNzcGhyYXNlIG9mIG5ldyB1c2VyCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgLUN4ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRURVNUUFJJVlBBU1MyICRORVdQUklWUEFTUyAkTkVXVVNFUiIKLUNIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCi0KLSMgdGVzdCAoYXV0aE5vUHJpdikKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYW5wIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi0jIHRlc3QgKGF1dGhQcml2KQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi0jIyAzKSBwYXNzd2QgKHByaXYpLCBwYXNzd2QgKGF1dGgrcHJpdiksIHRlc3QKLQotIyBjaGFuZ2UgcHJpdiBwYXNzcGhyYXNlICh0byBhdXRoIHBhc3NwaHJhc2UpIGJ5IHRoZSB1c2VyIGhpbXNlbGYKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXUFJJVlBBU1MgLUN4ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRORVdQUklWUEFTUyAkTkVXQVVUSFBBU1MiCi1DSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgotCi0jIGNoYW5nZSBib3RoIHBhc3NwaHJhc2VzIGF0IG9uY2UKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXQVVUSFBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJE5FV0FVVEhQQVNTICRORVdBVVRIUFJJVlBBU1MiCi1DSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgotCi0jIHRlc3QgKGF1dGhQcml2KQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQUklWUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV0FVVEhQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLSMjIDUpIHBlcnNpc3RlbmN5IEk6IHJlY29uZmlndXJlIChTSUdIVVApLCByZS10ZXN0Ci0KLWlmIElTREVGSU5FRCBIQVZFX1NJR0hVUDsgdGhlbgotCi1IVVBBR0VOVAotREVMQVkKLQotIyB0ZXN0IChhdXRoUHJpdikKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUFJJVlBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdBVVRIUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi0jIyA1KSBwZXJzaXN0ZW5jeSBJSTogc3RvcCwgc3RhcnQsIHJlLXRlc3QKLQotU1RPUEFHRU5UCi1ERUxBWQotIyBtYWtlIHN1cmUgaXQgcGlja3MgdXAgcGVyc2lzdGVudCBjb25maWcgYW5kIHVzZXMgYSBuZXcgbG9nZmlsZQotU05NUENPTkZQQVRIPSIke1NOTVBfVE1QRElSfSR7U05NUF9FTlZfU0VQQVJBVE9SfSR7U05NUF9UTVBfUEVSU0lTVEVOVERJUn0iCi1leHBvcnQgU05NUENPTkZQQVRICi1TTk1QX0NPTkZJR19GSUxFPSJkb2VzLW5vdC1leGlzdCIKLVNOTVBfU05NUERfTE9HX0ZJTEU9JHtTTk1QX1RNUERJUn0vc25tcGQyLmxvZwotU1RBUlRBR0VOVAotCi0jIHRlc3QgKGF1dGhQcml2KQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQUklWUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV0FVVEhQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLWZpCi0KLSMjIHN0b3AgYWdlbnQgYW5kIGZpbmlzaAotU1RPUEFHRU5UCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdCBiL3Rlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMjZkYjkuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgc25tcHRyYXBkIFVTTSB1c2VyIG1hbmFnZW1lbnQgd2l0aCBzbm1wdXNtCi0KLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19TTk1QVjNfVVNNVVNFUl9NT0RVTEUKLVNLSVBJRiAgICBORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWAotU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLVNLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBjb25maWd1cmUgQWdlbnRYIHNvY2tldAotaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTsgdGhlbgotICBBR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgotICBUUkFQRF9GTEFHUz0iJFRSQVBEX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgotZWxzZQotICBBR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCi0gIFRSQVBEX0ZMQUdTPSIkVFJBUERfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKLWZpCi0KLSMgc3RhbmRhcmQgU05NUHYzIFVTTSBhZ2VudCBjb25maWd1cmF0aW9uCi1ERUZTRUNVUklUWUxFVkVMPWF1dGhQcml2Ci0uIC4vU3YzdXNtY29uZmlnYWdlbnQKLQotIyBzYXZlIGFnZW50IGFjY2VzcwotQUdFTlRfVEVTVEFVVEhBUkdTPSRURVNUQVVUSEFSR1MKLUFHRU5UX1RFU1RQUklWQVJHUz0kVEVTVFBSSVZBUkdTCi0KLSMgY29uZmlndXJlIGFnZW50IGFzIEFnZW50WCBtYXN0ZXIKLUNPTkZJR0FHRU5UIG1hc3RlciBhZ2VudHgKLQotIyBTdGFydCB0aGUgbWFzdGVyIGFnZW50Ci1TVEFSVEFHRU5UCi0KLSMgc3RhbmRhcmQgU05NUHYzIFVTTSBzbm1wdHJhcGQgY29uZmlndXJhdGlvbgotLiAuL1N2M3VzbWNvbmZpZ3RyYXBkCi0KLSMgY29uZmlndXJlIHNubXB0cmFwZAotTkVXQVVUSEtFWT0weDc0NThlYWQ3YTBiNWE3NTNlMjFiZmNiODdmNmM5ODAzZWJlZjY4Y2YKLU5FV1BSSVZLRVk9MHg5OGUyNjk2ZDFjZjM0ZDkwNGRmY2FlNzZiZjAxYzQ3MwotTkVXVVNFUj1uZXd0ZXN0dXNlcgotTkVXQVVUSFBBU1M9bmV3YXV0aHBhc3MKLU5FV1BSSVZQQVNTPW5ld3ByaXZwYXNzCi1ORVdVU0VSMj1uZXd0ZXN0dXNlcl92YW5pbGxhCi1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgJE5FV1VTRVIgYXV0aAotCi0jIHN0YXJ0IHNubXB0cmFwZAotU1RBUlRUUkFQRAotCi0jIGRlbGF5IHRvIGxldCBpdCBjb25uZWN0IGFuZCByZWdpc3RlciBhbGwgTUlCcwotREVMQVkKLQotIyMgdmVyaWZ5IHNubXB0cmFwZCB1c21Vc2VyVGFibGUgbWFuYWdlbWVudAotCi1TTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUz0iLW4gc25tcHRyYXBkIC1DRSAkVFJBUERfRU5HSU5FSUQiCi0KLSMjIDEpIGNyZWF0ZSwgY2xvbmUsIHBhc3N3ZCBhdXRoLCBwYXNzd2QgcHJpdiwgdGVzdAotCi0jIGNyZWF0ZSB2YW5pbGxhIHVzZXIKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RBVVRIQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjcmVhdGUgJE5FV1VTRVIyIgotQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgY3JlYXRlZCIKLQotIyBjbG9uZSB0ZW1wbGF0ZSB1c2VyCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUQVVUSEFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgY3JlYXRlICRORVdVU0VSICRURVNUUFJJVlVTRVIiCi1DSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIgotCi0jIGNoYW5nZSBhdXRoIHBhc3NwaHJhc2Ugb2YgbmV3IHVzZXIKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RBVVRIQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgLUNhICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRURVNUQVVUSFBBU1MgJE5FV0FVVEhQQVNTICRORVdVU0VSIgotQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKLQotIyBjaGFuZ2UgcHJpdiBwYXNzcGhyYXNlIG9mIG5ldyB1c2VyCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUUFJJVkFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTIC1DeCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkVEVTVFBSSVZQQVNTICRORVdQUklWUEFTUyAkTkVXVVNFUiIKLUNIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCi0KLSMgdGVzdCAoYW5wKQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYW5wIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FucCIKLURFTEFZCi1DSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hbnAiCi0KLSMgdGVzdCAoYXApCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FwIgotREVMQVkKLUNIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FwIgotCi0jIyAyKSBjaGFuZ2UgbG9jYWxpemVkIGF1dGgga2V5LCB0ZXN0LCBjaGFuZ2UgbG9jYWxpemVkIHByaXYga2V5LCB0ZXN0Ci0KLSMgY2hhbmdlIGxvY2FsaXplZCBhdXRoIGtleQotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVEFVVEhBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAtQ2EgLUNrICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRORVdBVVRIUEFTUyAkTkVXQVVUSEtFWSAkTkVXVVNFUiIKLUNIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCi0KLSMgdGVzdCAoYW5wKQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYW5wIC1hICRERUZBVVRIVFlQRSAtM2sgJE5FV0FVVEhLRVkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FucDIiCi1ERUxBWQotQ0hFQ0tUUkFQRE9SRElFICJyZWNlaXZlZF9pbmZvcm1fYW5wMiIKLQotIyBjaGFuZ2UgbG9jYWxpemVkIHByaXYga2V5Ci1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUUFJJVkFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTIC1DeCAtQ2sgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJE5FV1BSSVZQQVNTICRORVdQUklWS0VZICRORVdVU0VSIgotQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKLQotIyB0ZXN0IChhcCkKLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtM2sgJE5FV0FVVEhLRVkgLXggJERFRlBSSVZUWVBFIC0zSyAkTkVXUFJJVktFWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF9pbmZvcm1fYXAyIgotREVMQVkKLUNIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FwMiIKLQotIyMgMykgcGVyc2lzdGVuY3kgSTogcmVjb25maWd1cmUgKFNJR0hVUCksIHJlLXRlc3QKLQotIyByZWNvbmZpZ3VyZSBzbm1wdHJhcGQKLUhVUFRSQVBECi0KLSMgdGVzdCAoYXApCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLTNrICRORVdBVVRIS0VZIC14ICRERUZQUklWVFlQRSAtM0sgJE5FV1BSSVZLRVkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FwMyIKLURFTEFZCi1DSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hcDMiCi0KLSMjIHN0b3AgZGFlbW9ucyBhbmQgZmluaXNoCi1TVE9QVFJBUEQKLVNUT1BBR0VOVAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybSBiL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc2MmQxMy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm0KKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLURFRlNFQ1VSSVRZTEVWRUw9bm9BdXRoTm9Qcml2Ci0KLUhFQURFUiAiU05NUHYzIGluZm9ybXMgKCRERUZTRUNVUklUWUxFVkVMKSByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scyIKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLUNPTkZJR1RSQVBEIGNyZWF0ZVVzZXIgdGVzdHVzZXIKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyB0ZXN0dXNlciAkREVGU0VDVVJJVFlMRVZFTAotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11IHRlc3R1c2VyIC1sIG5hbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtYXV0aCBiL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybWF1dGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNjdmZjUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtYXV0aAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotREVGU0VDVVJJVFlMRVZFTD1hdXRoTm9Qcml2Ci0KLUhFQURFUiAiU05NUHYzIGluZm9ybXMgKCRERUZTRUNVUklUWUxFVkVMKSByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scyIKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLS4gLi9TdjN1c21jb25maWd0cmFwZAotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUQVVUSFVTRVIgJERFRlNFQ1VSSVRZTEVWRUwKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgJFRFU1RBVVRIQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF9pbmZvcm1fJERFRlNFQ1VSSVRZTEVWRUwiCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJyZWNlaXZlZF9pbmZvcm1fJERFRlNFQ1VSSVRZTEVWRUwiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1wcml2IGIvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtcHJpdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JiZjJmMy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1wcml2CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1ERUZTRUNVUklUWUxFVkVMPWF1dGhQcml2Ci0KLUhFQURFUiAiU05NUHYzIGluZm9ybXMgKCRERUZTRUNVUklUWUxFVkVMKSByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scyIKLQotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLVNLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotLiAuL1N2M3VzbWNvbmZpZ3RyYXBkCi1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgJFRFU1RQUklWVVNFUiAkREVGU0VDVVJJVFlMRVZFTAotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgInJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1MHNubXB2M3RyYXAgYi90ZXN0aW5nL3Rlc3RzL1QwNTBzbm1wdjN0cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTlkMTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1MHNubXB2M3RyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgdHJhcHMgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMKLQotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLVNLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotQ1JFQVRFVVNFUkVOR0lORUlEPTB4ODAwMDFmODg4MDJiM2QwZTA2YmJkZjQzMjEKLS4gLi9TdjN1c21jb25maWd0cmFwZAotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUTk9BVVRIVVNFUiBub0F1dGhOb1ByaXYKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkVEVTVEFVVEhVU0VSIGF1dGhOb1ByaXYKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkVEVTVFBSSVZVU0VSIGF1dGhQcml2Ci1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLWQgLWUgJENSRUFURVVTRVJFTkdJTkVJRCAkVEVTVE5PQVVUSEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfdHJhcF9uYW5wIgotREVMQVkKLUNBUFRVUkUgInNubXB0cmFwIC1kIC1lICRDUkVBVEVVU0VSRU5HSU5FSUQgJFRFU1RBVVRIQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF90cmFwX2FucCIKLURFTEFZCi1DQVBUVVJFICJzbm1wdHJhcCAtZCAtZSAkQ1JFQVRFVVNFUkVOR0lORUlEICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfdHJhcF9hcCIKLURFTEFZCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJyZWNlaXZlZF90cmFwX25hbnAiCi1DSEVDS1RSQVBEICJyZWNlaXZlZF90cmFwX2FucCIKLUNIRUNLVFJBUEQgInJlY2VpdmVkX3RyYXBfYXAiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcCBiL3Rlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzRhMzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYyYyB0cmFwcyByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scwotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHRlc3Rjb21tdW5pdHkKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtZCAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGJsYWgiCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJjb2xkU3RhcnQiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtIGIvdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ2NGRkMi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYyYyBpbmZvcm1zIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgdGVzdGNvbW11bml0eQotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGJsYWgiCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJSZWNlaXZlZCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwIGIvdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMjVjNTIuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBzbm1wdjEgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQgQVBJCi0KLVNLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YzY29uZmlnCi1DT05GSUdBR0VOVCB0cmFwc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKLQotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAtRGV4YW1wbGUsaGVhZGVyX2dlbmVyaWMsYWRkX3RyYXAiCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OnVjZGF2aXMuMjU0LjcuMCBpIDEiCi0KLVNUT1BBR0VOVAotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAiRW50ZXJwcmlzZSBTcGVjaWZpYyBUcmFwICg5OSkiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAgYi90ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhODVkYzkuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgc25tcHYyYyB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCBBUEkKLQotU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKLS4gLi9TdjNjb25maWcKLUNPTkZJR0FHRU5UIHRyYXAyc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYwotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUFHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCi1TVEFSVEFHRU5UCi0KLSNERUxBWQotQ0FQVFVSRSAic25tcHNldCAtT24gLXQgMyAtciAwICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OnVjZGF2aXMuMjU0LjguMCBpIDEiCi0KLVNUT1BBR0VOVAotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAibGlmZSB0aGUgdW5pdmVyc2UgYW5kIGV2ZXJ5dGhpbmciCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCBiL3Rlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTYzNmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgc25tcHYxIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkIHdpdGhvdXQgbm90aWZpY2F0aW9uIG1pYiBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Ci0uIC4vU3YzY29uZmlnCi1DT05GSUdBR0VOVCB0cmFwc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYwotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLSMgaW5pdGlhbGl6ZSBvbmx5IHRoZSBleGFtcGxlIG1pYiwgYW5kIG5vdCB0aGUgbm90aWZpY2F0aW9uIG1pYiBzdHVmZgotQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAtRGV4YW1wbGUsaGVhZGVyX2dlbmVyaWMsYWRkX3RyYXAsbWliX2luaXQsY2FsbGJhY2sgLUkgZXhhbXBsZSx1c21Vc2VyLHVzbUNvbmYsdmFjbV92YXJzIgotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjp1Y2RhdmlzLjI1NC43LjAgaSAxIgotCi1TVE9QQUdFTlQKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgIkVudGVycHJpc2UgU3BlY2lmaWMgVHJhcCAoOTkpIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwIGIvdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzMyMTNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHNubXB2MmMgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQgd2l0aG91dCBub3RpZmljYXRpb24gbWliIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKLS4gLi9TdjNjb25maWcKLUNPTkZJR0FHRU5UIHRyYXAyc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYwotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLSMgaW5pdGlhbGl6ZSBvbmx5IHRoZSBleGFtcGxlIG1pYiwgYW5kIG5vdCB0aGUgbm90aWZpY2F0aW9uIG1pYiBzdHVmZgotQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAtRGV4YW1wbGUsaGVhZGVyX2dlbmVyaWMsYWRkX3RyYXAsbWliX2luaXQsY2FsbGJhY2sgLUkgZXhhbXBsZSx1c21Vc2VyLHVzbUNvbmYsdmFjbV92YXJzIgotU1RBUlRBR0VOVAotCi0jREVMQVkKLUNBUFRVUkUgInNubXBzZXQgLU9uIC10IDMgLXIgMCAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjp1Y2RhdmlzLjI1NC44LjAgaSAxIgotCi1TVE9QQUdFTlQKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdCBiL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNjlmYWYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHNubXB0cmFwZCBhdXRob3JpemF0aW9uIGZhaWx1cmUgb2Ygbm9uIGF1dGhvcml6ZWQgdXNlcnMKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLUNPTkZJR1RSQVBEIGNyZWF0ZVVzZXIgdGVzdHVzZXIKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyB0ZXN0dXNlciBub0F1dGhOb1ByaXYKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSBub3R0ZXN0dXNlciAtbCBuYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGJsYWgiCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJjb2xkU3RhcnQiCi1FWFBFQ1RSRVNVTFQgMAotaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgIHJldHVybl92YWx1ZT0xCi0gICAgRklOSVNIRUQKLWZpCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MiBiL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWEwMmNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QyCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgc25tcHRyYXBkIGRpc2NhcmRzIG9mIHVuYXV0aG9yaXplZCBub3RpZmljYXRpb24gdHlwZXMgCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1DT05GSUdUUkFQRCBjcmVhdGVVc2VyIHRlc3R1c2VyCi1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgdGVzdHVzZXIgbm9BdXRoTm9Qcml2IC4xLjMuNi4xLjYuMy4xLjEuNS4yCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgdGVzdHVzZXIgLWwgbmFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBibGFoIgotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAiY29sZFN0YXJ0IgotRVhQRUNUUkVTVUxUIDAKLWlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICByZXR1cm5fdmFsdWU9MQotICAgIEZJTklTSEVECi1maQotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDMgYi90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjYjVjYi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHNubXB0cmFwZCBkaXNjYXJkcyBvZiBpbmNvcnJlY3QgdmlldyB0eXBlcyAKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLUNPTkZJR1RSQVBEIGNyZWF0ZVVzZXIgdGVzdHVzZXIKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGV4ZWN1dGUgdGVzdHVzZXIgbm9BdXRoTm9Qcml2Ci1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgdGVzdHVzZXIgLWwgbmFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBibGFoIgotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAiY29sZFN0YXJ0IgotRVhQRUNUUkVTVUxUIDAKLWlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICByZXR1cm5fdmFsdWU9MQotICAgIEZJTklTSEVECi1maQotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDU4YWdlbnRhdXRodHJhcCBiL3Rlc3RpbmcvdGVzdHMvVDA1OGFnZW50YXV0aHRyYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZTNhN2IuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDU4YWdlbnRhdXRodHJhcAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQotLiAuL1N2MWNvbmZpZwotIyBhZGQgaW4gYSB2MSB0cmFwIHNpbmsKLUNPTkZJR0FHRU5UIHRyYXBzaW5rICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIHB1YmxpYwotQ09ORklHQUdFTlQgYXV0aHRyYXBlbmFibGUgMQotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotU1RBUlRBR0VOVAotCi0jIGdpdmUgdGhlIGFnZW50IG1vcmUgdGltZSB0byBzdGFydCB1cC4gIFdlIG9ubHkgd2FudCB0byBmaXJlIG9uZQotIyByZXF1ZXN0IChyZXRyaWVzID0gMCkgdG8gbWFrZSBzdXJlIG9ubHkgb25lIHRyYXAgaXMgc2VudC4KLSNERUxBWQotQ0FQVFVSRSAic25tcGdldCAtT24gLXIgMCAtdCA1ICRTTk1QX0ZMQUdTIC12IDEgLWMgd3Jvbmdjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAiQXV0aGVudGljYXRpb24gRmFpbHVyZSBUcmFwIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlIGIvdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzNjU3NDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotVFJBUEhBTkRMRV9MT0dGSUxFPSR7U05NUF9UTVBESVJ9L3RyYXBoYW5kbGUubG9nCi0KLSMgImlubGluZSIgdHJhcCBoYW5kbGVyCi1pZiBbICJ4JDIiID0gInh0cmFwaGFuZGxlIiBdOyB0aGVuCi0gIGNhdCAtID4+JFRSQVBIQU5ETEVfTE9HRklMRQotICBleGl0IDAKLWZpCi0KLUhFQURFUiBzbm1wdHJhcGQgdHJhcGhhbmRsZTogbGF1bmNoaW5nIGV4dGVybmFsIHNoZWxsIHNjcmlwdAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLXNubXBfdmVyc2lvbj12MmMKLVRFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQotCi1DT05GSUdUUkFQRCBbc25tcF0gcGVyc2lzdGVudERpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgotQ09ORklHVFJBUEQgW3NubXBdIHRlbXBGaWxlUGF0dGVybiAvdG1wL3NubXBkLXRtcC1YWFhYWFgKLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgZXhlY3V0ZSAkVEVTVENPTU1VTklUWQotQ09ORklHVFJBUEQgZG9Ob3RMb2dUcmFwcyB0cnVlCi1DT05GSUdUUkFQRCB0cmFwaGFuZGxlIGRlZmF1bHQgJDAgJDEgdHJhcGhhbmRsZQotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLSMjIDEpIHRlc3Qgbm90aWZpY2F0aW9uIGhhbmRsZXIKLQotQ0FQVFVSRSAic25tcHRyYXAgLWQgLUNpIC10ICRTTk1QX1NMRUVQIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGhhbmRsZWRfaW5mb3JtXyRzbm1wX3ZlcnNpb24iCi1ERUxBWQotQ0hFQ0tPUkRJRSAiaGFuZGxlZF9pbmZvcm1fJHNubXBfdmVyc2lvbiIgJFRSQVBIQU5ETEVfTE9HRklMRSAKLQotIyMgMikgcGVyc2lzdGVuY3k6IHJlY29uZmlndXJlIChTSUdIVVApLCByZS10ZXN0Ci0KLUhVUFRSQVBECi1DQVBUVVJFICJzbm1wdHJhcCAtZCAtQ2kgLXQgJFNOTVBfU0xFRVAgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgaGFuZGxlZF9pbmZvcm0yXyRzbm1wX3ZlcnNpb24iCi1ERUxBWQotQ0hFQ0tPUkRJRSAiaGFuZGxlZF9pbmZvcm0yXyRzbm1wX3ZlcnNpb24iICRUUkFQSEFORExFX0xPR0ZJTEUKLQotIyMgc3RvcAotU1RPUFRSQVBECi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNjB0cmFwZHBlcmwgYi90ZXN0aW5nL3Rlc3RzL1QwNjB0cmFwZHBlcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDYzYTZmNGMuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDYwdHJhcGRwZXJsCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgJ3NubXB0cmFwZCBlbWJlZGRlZCBwZXJsIHN1cHBvcnQgKE5ldFNOTVA6OlRyYXBSZWNlaXZlciknCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIE5FVFNOTVBfRU1CRURERURfUEVSTAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotc25tcF92ZXJzaW9uPXYyYwotVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5Ci1URVNUT0lEPS4xLjMuNi4xLjYuMy4xLjEuNS4xCi1URVNUT0lEMj0uMS4zLjYuMS42LjMuMS4xLjUuMgotRU1CUEVSTF9MT0dGSUxFPSR7U05NUF9UTVBESVJ9L2VtYnBlcmwubG9nCi0KLWVjaG8gInVzZSBibGliIHF3KCR7U05NUF9VUERJUn0vcGVybCk7IiA+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybF90cmFwZC5wbAotZWNobyAidXNlIE5ldFNOTVA6OlRyYXBSZWNlaXZlcjsiID4+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybF90cmFwZC5wbAotCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGV4ZWN1dGUgJFRFU1RDT01NVU5JVFkKLUNPTkZJR1RSQVBEIHBlcmxJbml0RmlsZSAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmxfdHJhcGQucGwKLUNPTkZJR1RSQVBEICdwZXJsIHN1YiBteV9yZWNlaXZlciB7IG9wZW4gTE9HLCI+PickRU1CUEVSTF9MT0dGSUxFJyI7IHByaW50IExPRyAiaGFuZGxlZF9ieV9lbWJwZXJsIjsgY2xvc2UgTE9HIH07JwotQ09ORklHVFJBUEQgJ3Blcmwgc3ViIG15X3JlY2VpdmVyMiB7IG9wZW4gTE9HLCI+PickRU1CUEVSTF9MT0dGSUxFJyI7IHByaW50IExPRyAiaGFuZGxlZF9hZ2Fpbl9ieV9lbWJwZXJsIjsgY2xvc2UgTE9HIH07JwotQ09ORklHVFJBUEQgJ3BlcmwgTmV0U05NUDo6VHJhcFJlY2VpdmVyOjpyZWdpc3RlcigiJyRURVNUT0lEJyIsIFwmbXlfcmVjZWl2ZXIpIHx8IHdhcm4gInJlZ2lzdGVyX3BlcmxfaGFuZGxlcl9mYWlsZWQiOycKLUNPTkZJR1RSQVBEICdwZXJsIE5ldFNOTVA6OlRyYXBSZWNlaXZlcjo6cmVnaXN0ZXIoIickVEVTVE9JRDInIiwgXCZteV9yZWNlaXZlcjIpIHx8IHdhcm4gInJlZ2lzdGVyX3NlY29uZF9wZXJsX2hhbmRsZXJfZmFpbGVkIjsnCi1DT05GSUdUUkFQRCAncGVybCBwcmludCBTVERFUlIgInJlZ2lzdGVyZWRfcGVybF9oYW5kbGVyX29rIjsnCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotIyMgMSkgdHJpZ2dlciBlbWJlZGRlZCBwZXJsIG5vdGlmaWNhdGlvbiBoYW5kbGVyCi0KLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwICRURVNUT0lEIHN5c3RlbS5zeXNDb250YWN0LjAgcyBoYW5kbGVkX3RyYXBfJHNubXBfdmVyc2lvbiIKLQotIyMgMikgcGVyc2lzdGVuY3k6IHJlY29uZmlndXJlIChTSUdIVVApLCByZS10cmlnZ2VyCi0KLUhVUFRSQVBECi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAkVEVTVE9JRDIgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGhhbmRsZWRfdHJhcDJfJHNubXBfdmVyc2lvbiIKLQotIyMgc3RvcAotU1RPUFRSQVBECi0KLQotQ0hFQ0tPUkRJRSAiaGFuZGxlZF9ieV9lbWJwZXJsIiAgICAgICAkRU1CUEVSTF9MT0dGSUxFCi1DSEVDS09SRElFICJoYW5kbGVkX2FnYWluX2J5X2VtYnBlcmwiICRFTUJQRVJMX0xPR0ZJTEUKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA2MWFnZW50cGVybCBiL3Rlc3RpbmcvdGVzdHMvVDA2MWFnZW50cGVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMjdlNWIzMS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNjFhZ2VudHBlcmwKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiAnc25tcGQgZW1iZWRkZWQgcGVybCBzdXBwb3J0ICh1c2luZyBOZXRTTk1QOjphZ2VudCknCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIE5FVFNOTVBfRU1CRURERURfUEVSTAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotc25tcF92ZXJzaW9uPXYyYwotVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi1URVNUT0lEPS4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OS4xLjAKLVRFU1RPSUQyPS4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OS4yLjAKLUVNQlBFUkxfQUdFTlQ9JHtTTk1QX1RNUERJUn0vaGVsbG8ucGwKLWNhdCA+JEVNQlBFUkxfQUdFTlQgPDxFTkQKLSMhL3Vzci9iaW4vZW52IHBlcmwKLSMgbWluaW1hbCBlbWJlZGRlZCBwZXJsIGFnZW50Ci0KLW15IFwkcmVnYXQgPSAnLjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5JzsgIyBuZXRTbm1wUGxheVBlbgotbXkgXCRteW9pZCA9IFwkcmVnYXQgLiAiLjEuMCI7ICMgdGhlICJoZWxsbyB3b3JsZCIgT0lECi1teSBcJG15b2lkMiA9IFwkcmVnYXQgLiAiLjIuMCI7ICMgdGhlICJoZWxsbyBhZ2FpbiB3b3JsZCIgT0lECi0KLXVzZSBOZXRTTk1QOjpPSUQgcXcoOmFsbCk7Ci11c2UgTmV0U05NUDo6YWdlbnQgcXcoOmFsbCk7Ci11c2UgTmV0U05NUDo6QVNOIHF3KDphbGwpOwotdXNlIFNOTVA7Ci0KLW15IFwkcmVnb2lkID0gbmV3IE5ldFNOTVA6Ok9JRChcJHJlZ2F0KTsKLVwkYWdlbnQtPnJlZ2lzdGVyKCJoZWxsbyIsIFwkcmVnb2lkLCBcJm15X3NubXBfaGFuZGxlcik7Ci0KLXN1YiBteV9zbm1wX2hhbmRsZXIgewotICBteSAoXCRoYW5kbGVyLCBcJHJlZ2lzdHJhdGlvbl9pbmZvLCBcJHJlcXVlc3RfaW5mbywgXCRyZXF1ZXN0cykgPSBAXzsKLSAgZm9yKG15IFwkcmVxdWVzdCA9IFwkcmVxdWVzdHM7IFwkcmVxdWVzdDsgXCRyZXF1ZXN0ID0gXCRyZXF1ZXN0LT5uZXh0KCkpIHsKLSAgICBpZiAoXCRyZXF1ZXN0X2luZm8tPmdldE1vZGUoKSA9PSBNT0RFX0dFVCkgewotICAgICAgaWYgKFwkcmVxdWVzdC0+Z2V0T0lEKCkgPT0gbmV3IE5ldFNOTVA6Ok9JRChcJG15b2lkKSkgewotICAgICAgICBcJHJlcXVlc3QtPnNldFZhbHVlKEFTTl9PQ1RFVF9TVFIsICJoZWxsbyB3b3JsZCIpOwotICAgICAgICBsYXN0OwotICAgICAgfSBlbHNpZiAoXCRyZXF1ZXN0LT5nZXRPSUQoKSA9PSBuZXcgTmV0U05NUDo6T0lEKFwkbXlvaWQyKSkgewotICAgICAgICBcJHJlcXVlc3QtPnNldFZhbHVlKEFTTl9PQ1RFVF9TVFIsICJoZWxsbyBhZ2FpbiB3b3JsZCIpOwotICAgICAgICBsYXN0OwotICAgICAgfQotICAgIH0KLSAgfQotfQotRU5ECi0KLWVjaG8gInVzZSBibGliIHF3KCR7U05NUF9VUERJUn0vcGVybCk7IiA+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybC5wbAotZWNobyAndXNlIE5ldFNOTVA6OmFnZW50OycgPj4gJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsLnBsCi1lY2hvICckYWdlbnQgPSBuZXcgTmV0U05NUDo6YWdlbnQoJyInZG9udF9pbml0X2FnZW50JyA9PiAxLCAnZG9udF9pbml0X2xpYicgPT4gMSk7IiA+PiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmwucGwKLQotQ09ORklHQUdFTlQgcGVybEluaXRGaWxlICR7U05NUF9UTVBESVJ9L3NubXBfcGVybC5wbAotQ09ORklHQUdFTlQgInBlcmwgZG8gJyRFTUJQRVJMX0FHRU5UJzsiCi1DT05GSUdBR0VOVCAncGVybCBwcmludCBTVERFUlIgInJlZ2lzdGVyZWRfcGVybF9hZ2VudF9vayI7JwotCi0jIG1ha2Ugc3VyZSB0aGF0IE5ldFNOTVA6OmFnZW50J3MgYWdlbnQuc28gY2FuIGxvYWQgKHVuaW5zdGFsbGVkKSBsaWJuZXRzbm1wKi5zbwotX2xkX2xpYl9wYXRoPSIke1NOTVBfVVBESVJ9L3NubXBsaWIvLmxpYnM6JHtTTk1QX1VQRElSfS9hZ2VudC8ubGliczoke1NOTVBfVVBESVJ9L2FnZW50L2hlbHBlcnMvLmxpYnMiCi1pZiBbICJ4JExEX0xJQlJBUllfUEFUSCIgIT0gIngiIF07IHRoZW4KLSAgTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH06JHtMRF9MSUJSQVJZX1BBVEh9IgotZWxzZQotICBMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKLWZpIAotaWYgWyAieCREWUxEX0xJQlJBUllfUEFUSCIgIT0gIngiIF07IHRoZW4KLSAgRFlMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke0RZTERfTElCUkFSWV9QQVRIfSIKLWVsc2UKLSAgRFlMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKLWZpIAotaWYgWyAieCRTSExJQl9QQVRIIiAhPSAieCIgXTsgdGhlbgotICBTSExJQl9QQVRIPSIke19sZF9saWJfcGF0aH06JHtTSExJQl9QQVRIfSIKLWVsc2UKLSAgU0hMSUJfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgotZmkgCi1leHBvcnQgTERfTElCUkFSWV9QQVRIIERZTERfTElCUkFSWV9QQVRIIFNITElCX1BBVEgKLQotU1RBUlRBR0VOVAotCi0jIyAxKSBTTk1QIEdFVCBhZ2FpbnN0IGVtYmVkZGVkIHBlcmwgbWliIG1vZHVsZQotQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEIgotQ0hFQ0sgImhlbGxvIHdvcmxkIgotCi0jIyAyKSBwZXJzaXN0ZW5jeTogcmVjb25maWd1cmUgKEhVUCksIHJlLXRlc3QKLUhVUEFHRU5UCi1DQVBUVVJFICJzbm1wZ2V0IC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJFRFU1RPSUQyIgotQ0hFQ0sgImhlbGxvIGFnYWluIHdvcmxkIgotCi0jIyBzdG9wCi1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA2NWFnZW50ZXh0ZW5kIGIvdGVzdGluZy90ZXN0cy9UMDY1YWdlbnRleHRlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2Y1OGYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDY1YWdlbnRleHRlbmQKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiAiZXh0ZW5kaW5nIGFnZW50IGZ1bmN0aW9uYWxpdHkgd2l0aCBleHRlbmQiCi0KLVsgIngkT1NUWVBFIiA9IHhtc3lzIC1hICJ4JE1TWVNfU0giID0geCBdICYmIFNLSVAgIlwkTVNZU19TSCBoYXMgbm90IGJlZW4gc2V0IgotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRfRVhURU5EX01PRFVMRQotCi0jIG1ha2Ugc3VyZSBzbm1wZ2V0IGNhbiBiZSBleGVjdXRlZAotU05NUEdFVD0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXBnZXQiCi1bIC14ICIkU05NUEdFVCIgXSB8fCBTS0lQCi0KLXNubXBfdmVyc2lvbj12MmMKLVRFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQotLiAuL1N2MmNjb25maWcKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLUNPTkZJR0FHRU5UIGV4dGVuZCBoZWxsbyAvdXNyL2Jpbi9lbnYgZWNobyBoZWxsb193b3JsZAotCi1TVEFSVEFHRU5UCi0KLSMgTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRPdXRwdXQxTGluZS4iaGVsbG8iID0gU1RSSU5HOiAiaGVsbG9fd29ybGQiCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIDEuMy42LjEuNC4xLjgwNzIuMS4zLjIuMy4xLjEuXCJoZWxsb1wiIgotQ0hFQ0tPUkRJRSAiaGVsbG9fd29ybGQiCi0KLSNORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZE91dHB1dEZ1bGwuImhlbGxvIiA9IFNUUklORzogImhlbGxvX3dvcmxkIgotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi4zLjEuMi5cImhlbGxvXCIiCi1DSEVDS09SRElFICJoZWxsb193b3JsZCIKLQotI05FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kT3V0TGluZS4iaGVsbG8iLjEgPSBTVFJJTkc6ICJoZWxsb193b3JsZCIKLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuNC4xLjIuXCJoZWxsb1wiLjEiCi1DSEVDS09SRElFICJoZWxsb193b3JsZCIKLQotI05FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kT3V0TnVtTGluZXMuImhlbGxvIiA9IElOVEVHRVI6IDEKLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuMy4xLjMuXCJoZWxsb1wiIgotQ0hFQ0tPUkRJRSAiSU5URUdFUjogMSIKLQotI05FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kUmVzdWx0LiJoZWxsbyIgPSBJTlRFR0VSOiAwCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjMuMS40LlwiaGVsbG9cIiIKLUNIRUNLT1JESUUgIklOVEVHRVI6IDAiCi0KLVNUT1BBR0VOVAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA2NnBhc3Nfc2ltcGxlIGIvdGVzdGluZy90ZXN0cy9UMDY2cGFzc19zaW1wbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYjE0YzAuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDY2cGFzc19zaW1wbGUKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiAiZXh0ZW5kaW5nIGFnZW50IGZ1bmN0aW9uYWxpdHkgd2l0aCBwYXNzIgotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QQVNTX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRQotCi0jIERvbid0IHJ1biB0aGlzIHRlc3Qgb24gTWluR1cgLSBsb2NhbC9wYXNzdGVzdCBpcyBhIHNoZWxsIHNjcmlwdCBhbmQKLSMgaGVuY2UgcGFzc2luZyBpdCB0byB0aGUgTVNWQ1JUIHBvcGVuKCkgZG9lc24ndCB3b3JrLgotWyAieCRPU1RZUEUiID0gInhtc3lzIiBdICYmIFNLSVAgIk1pbkdXIgotCi0jIG1ha2Ugc3VyZSBzbm1wZ2V0IGFuZCBzbm1wd2FsayBjYW4gYmUgZXhlY3V0ZWQKLVNOTVBHRVQ9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wZ2V0IgotWyAteCAiJFNOTVBHRVQiIF0gfHwgU0tJUAotU05NUFdBTEs9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wd2FsayIKLVsgLXggIiRTTk1QV0FMSyIgXSB8fCBTS0lQCi0KLXNubXBfdmVyc2lvbj12MmMKLVRFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQotLiAuL1N2MmNjb25maWcKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi1vaWQ9LjEuMy42LjEuNC4xLjgwNzIuMi4yNTUgICMgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzRXhhbXBsZXMKLUNPTkZJR0FHRU5UIHBhc3MgJG9pZCAke1NOTVBfQkFTRURJUn0vLi4vbG9jYWwvcGFzc3Rlc3QKLQotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1EdWNkLXNubXAvcGFzcyIKLVNUQVJUQUdFTlQKLQotI0NPTU1FTlQgQ2hlY2sgYSBmdWxsIHdhbGsgb2YgdGhlIHNhbXBsZSBkYXRhCi1DQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkb2lkIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzU3RyaW5nLjAgPSBTVFJJTkc6IExpZmUsIHRoZSBVbml2ZXJzZSwgYW5kIEV2ZXJ5dGhpbmciCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJbnRlZ2VyLjEgPSBJTlRFR0VSOiA0MiIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc09JRC4xID0gT0lEOiBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NPSURWYWx1ZSIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc1RpbWVUaWNrcy4wID0gVGltZXRpY2tzOiAoMzYzMTM2MjAwKSA0MiBkYXlzLCAwOjQyOjQyLjAwICIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0lwQWRkcmVzcy4wID0gSXBBZGRyZXNzOiAxMjcuMC4wLjEiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAgPSBDb3VudGVyMzI6IDQyIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzR2F1Z2UuMCA9IEdhdWdlMzI6IDQyIgotCi0jQ09NTUVOVCBBIGNvdXBsZSBvZiBzcG90IGNoZWNrcyBvZiBHRVQgcmVxdWVzdHMuCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0ludGVnZXIuMSIKLUNIRUNLT1JESUUgIklOVEVHRVI6IDQyIgotCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCIKLUNIRUNLT1JESUUgIkNvdW50ZXIzMjogNDIiCi0KLVNUT1BBR0VOVAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZSBiL3Rlc3RpbmcvdGVzdHMvVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M2NmExZC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNjdwYXNzcGVyc2lzdF9zaW1wbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiAiZXh0ZW5kaW5nIGFnZW50IGZ1bmN0aW9uYWxpdHkgd2l0aCBwYXNzX3BlcnNpc3QiCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BBU1NfUEVSU0lTVF9NT0RVTEUKLVsgLXggL3Vzci9iaW4vcGVybCBdIHx8IFNLSVAgL3Vzci9iaW4vcGVybAotCi0jIERvbid0IHJ1biB0aGlzIHRlc3Qgb24gTWluR1cgLSBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0IGlzIGEgc2hlbGwgc2NyaXB0IGFuZAotIyBoZW5jZSBwYXNzaW5nIGl0IHRvIHRoZSBNU1ZDUlQgcG9wZW4oKSBkb2Vzbid0IHdvcmsuCi1bICJ4JE9TVFlQRSIgPSAieG1zeXMiIF0gJiYgU0tJUCAiTWluR1ciCi0KLSMgbWFrZSBzdXJlIHNubXBnZXQgYW5kIHNubXB3YWxrIGNhbiBiZSBleGVjdXRlZAotU05NUEdFVD0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXBnZXQiCi1bIC14ICIkU05NUEdFVCIgXSB8fCBTS0lQCi1TTk1QV0FMSz0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXB3YWxrIgotWyAteCAiJFNOTVBXQUxLIiBdIHx8IFNLSVAKLQotc25tcF92ZXJzaW9uPXYyYwotVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLW9pZD0uMS4zLjYuMS40LjEuODA3Mi4yLjI1NSAgIyBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NFeGFtcGxlcwotQ09ORklHQUdFTlQgcGFzc19wZXJzaXN0ICRvaWQgJHtTTk1QX0JBU0VESVJ9Ly4uL2xvY2FsL3Bhc3NfcGVyc2lzdHRlc3QKLQotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1EdWNkLXNubXAvcGFzc19wZXJzaXN0IgotUEFTU19QRVJTSVNUX1BJREZJTEU9IiRTTk1QX1RNUERJUi9wYXNzX3BlcnNpc3QucGlkLiQkIgotZXhwb3J0IFBBU1NfUEVSU0lTVF9QSURGSUxFCi1TVEFSVEFHRU5UCi0KLSNDT01NRU5UIENoZWNrIGEgZnVsbCB3YWxrIG9mIHRoZSBzYW1wbGUgZGF0YQotQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJG9pZCIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc1N0cmluZy4wID0gU1RSSU5HOiBMaWZlLCB0aGUgVW5pdmVyc2UsIGFuZCBFdmVyeXRoaW5nIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSW50ZWdlci4xID0gSU5URUdFUjogNDIiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NPSUQuMSA9IE9JRDogTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzT0lEVmFsdWUiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NUaW1lVGlja3MuMCA9IFRpbWV0aWNrczogKDM2MzEzNjIwMCkgNDIgZGF5cywgMDo0Mjo0Mi4wMCAiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJcEFkZHJlc3MuMCA9IElwQWRkcmVzczogMTI3LjAuMC4xIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wID0gQ291bnRlcjMyOiAxIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzR2F1Z2UuMCA9IEdhdWdlMzI6IDQyIgotCi0jQ09NTUVOVCBBIGNvdXBsZSBvZiBzcG90IGNoZWNrcyBvZiBHRVQgcmVxdWVzdHMuCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0ludGVnZXIuMSIKLUNIRUNLT1JESUUgIklOVEVHRVI6IDQyIgotCi0jQ09NTUVOVCBuZXRTbm1wUGFzc0NvdW50ZXIgc2hvdWxkIGluY3JlbWVudCwgc2luY2UgdGhpcyBpcyBwYXNzX3BlcnNpc3QKLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wIgotQ0hFQ0tPUkRJRSAiQ291bnRlcjMyOiAyIgotCi0jQ09NTUVOVCBub3cga2lsbCB0aGUgcGFzc19wZXJzaXN0IHNjcmlwdCwgYW5kIGNoZWNrIHRoYXQgaXQgcmVjb3ZlcnMuCi1TVE9QUFJPRyAkUEFTU19QRVJTSVNUX1BJREZJTEUKLSNDT01NRU5UIG5ldFNubXBQYXNzQ291bnRlciBzaG91bGQgaGF2ZSByZXZlcnRlZCB0byAxLCBhcyB0aGlzIGlzIGEgbmV3IGluc3RhbmNlLgotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAiCi1DSEVDS09SRElFICJDb3VudGVyMzI6IDEiCi0KLVNUT1BBR0VOVAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA2OGV4ZWNmaXggYi90ZXN0aW5nL3Rlc3RzL1QwNjhleGVjZml4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDkyMDZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA2OGV4ZWNmaXgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0jIS9iaW4vc2gKLQotSEVBREVSICJleGVjZml4IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIgotCi1TS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfRVhURU5TSUJMRV9NT0RVTEUKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLVNLSVBJRiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotCi0jIG1ha2Ugc3VyZSBzbm1wc2V0IGFuZCBzbm1wd2FsayBjYW4gYmUgZXhlY3V0ZWQKLVNOTVBTRVQ9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcHNldCIKLVsgLXggIiRTTk1QU0VUIiBdIHx8IFNLSVAgc25tcHNldCBub3QgY29tcGlsZWQKLVNOTVBXQUxLPSIke2J1aWxkZGlyfS9hcHBzL3NubXB3YWxrIgotWyAteCAiJFNOTVBXQUxLIiBdIHx8IFNLSVAgc25tcHdhbGsgbm90IGNvbXBpbGVkCi0KLXNubXBfdmVyc2lvbj12MmMKLXNubXBfd3JpdGVfYWNjZXNzPSdhbGwnCi1URVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotaWYgWyAieCRPU1RZUEUiID0geG1zeXMgXTsgdGhlbgotICAgIGNtZDE9InRydWUiCi0gICAgY21kMj0iZmFsc2UiCi0gICAgZWNobz0iZWNobyIKLWVsc2UKLSAgICBjbWQxPSIkKHdoaWNoIHRydWUpIgotICAgIGNtZDI9IiQod2hpY2ggZmFsc2UpIgotICAgIGVjaG89IiQod2hpY2ggZWNobykiCi1maQotQ09ORklHQUdFTlQgZXhlYyAgICB0cnVlLWNvbW1hbmQgICAgJGNtZDEKLUNPTkZJR0FHRU5UIGV4ZWNmaXggdHJ1ZS1jb21tYW5kICAgICRjbWQxCi1DT05GSUdBR0VOVCBleGVjICAgIGZhbHNlLWNvbW1hbmQgICAkY21kMgotQ09ORklHQUdFTlQgZXhlY2ZpeCBmYWxzZS1jb21tYW5kICAgJGNtZDIKLUNPTkZJR0FHRU5UIGV4ZWMgICAgZWNoby0lcy1jb21tYW5kICR7ZWNob30gJXMKLUNPTkZJR0FHRU5UIGV4ZWNmaXggZWNoby0lcy1jb21tYW5kICR7ZWNob30gZml4LSVzCi0KLVNUQVJUQUdFTlQKLQotIyBDaGVjayBhIGZ1bGwgd2FsayBvZiBVQ0QtU05NUC1NSUI6OmV4dFRhYmxlCi1DQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OmV4dEVudHJ5IgotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0TmFtZXMuMSA9IFNUUklORzogdHJ1ZS1jb21tYW5kJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQuMSA9IFNUUklORzogJyIkY21kMSIKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dFJlc3VsdC4xID0gSU5URUdFUjogMCQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRPdXRwdXQuMSA9IFNUUklORzogJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4xID0gSU5URUdFUjogbm9FcnJvcigwKSQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXhDbWQuMSA9IFNUUklORzogJyIkY21kMSIKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE5hbWVzLjIgPSBTVFJJTkc6IGZhbHNlLWNvbW1hbmQkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0Q29tbWFuZC4yID0gU1RSSU5HOiAnIiRjbWQyIickJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0UmVzdWx0LjIgPSBJTlRFR0VSOiAxJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE91dHB1dC4yID0gU1RSSU5HOiAkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjIgPSBJTlRFR0VSOiBub0Vycm9yKDApJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeENtZC4yID0gU1RSSU5HOiAnIiRjbWQyIickJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0TmFtZXMuMyA9IFNUUklORzogZWNoby0lcy1jb21tYW5kJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQuMyA9IFNUUklORzogJyIke2VjaG99IicgJXMkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0UmVzdWx0LjMgPSBJTlRFR0VSOiAwJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE91dHB1dC4zID0gU1RSSU5HOiAlcyQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMyA9IElOVEVHRVI6IG5vRXJyb3IoMCkkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4Q21kLjMgPSBTVFJJTkc6ICciJHtlY2hvfSInIGZpeC0lcyQnCi0KLUNBUFRVUkUgIiRTTk1QU0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZIC1yMCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjMgaSAxIgotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjMgPSBJTlRFR0VSOiBydW5GaXgoMSknCi0KLUNBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6ZXh0RW50cnkiCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXhDbWQuMyA9IFNUUklORzogJyIke2VjaG99IicgZml4LSVzJwotCi1TVE9QQUdFTlQKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cCBiL3Rlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1MDVlZmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgdGhhdCB0aGUgYWdlbnQgcmVzcG9uZHMgcHJvcGVybHkgdG8gYSBraWxsIC1IVVAKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLQotU0tJUElGTk9UIEhBVkVfU0lHTkFMCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjFjb25maWcKLQotU1RBUlRBR0VOVAotCi0jIGFkZCBhIGFnZW50IGNvbmZpZ3VyYXRpb24gbGluZSB0aGF0IHdvdWxkbid0IGhhdmUgYmVlbiB0aGVyZSB3aGVuCi0jIHRoZSBzdGFydGVkIHVwLgotQ09ORklHQUdFTlQgc3lzbG9jYXRpb24gbm90LWFueXdoZXJlLWluLXBhcnRpY3VsYXIKLQotIyBraWxsIC1IVVAgdGhlIGFnZW50IHRvIGdldCBpdCB0byByZS1yZWFkIHRoZSAuY29uZiBmaWxlLgotREVMQVkKLWtpbGwgLUhVUCBgY2F0ICRTTk1QX1NOTVBEX1BJRF9GSUxFYCA+IC9kZXYvbnVsbCAyPiYxCi1ERUxBWQotCi0jIEFuZCBzZWUgaWYgaXQgaGFzIHRoZSBuZXcgdmFsdWUuCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXN0ZW0uc3lzTG9jYXRpb24uMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICJub3QtYW55d2hlcmUtaW4tcGFydGljdWxhciIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDExMGFnZW50eGdldCBiL3Rlc3RpbmcvdGVzdHMvVDExMGFnZW50eGdldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ5MjgwZi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMTBhZ2VudHhnZXQKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBBZ2VudFggR0VUIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotLiAuL1N2M2NvbmZpZwotCi0jIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KLWlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgotZWxzZQotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCi1maQotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliIgotU1RBUlRBR0VOVAotCi0jIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QiCi0KLWlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotICAjIHRlc3QgdGhlIGFnZW50eCBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCi0gIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCi0gIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtWCAtSSBzeXN0ZW1fbWliIgotICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYm9ndXMuY29uZiIKLSAgU1RBUlRBR0VOVAotCi0gICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHNldHRpbmcgdGhlIHN5c3RlbSBtaWIKLSAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgMyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi0gIENIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi0gICMgc3RvcCB0aGUgc3ViYWdlbnQKLSAgU1RPUEFHRU5UCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRwotZmkKLQotIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKLVNUT1BBR0VOVAotCi0jIGFsbCBkb25lICh3aGV3KQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDExMWFnZW50eHNldCBiL3Rlc3RpbmcvdGVzdHMvVDExMWFnZW50eHNldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjYmI1MC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMTFhZ2VudHhzZXQKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBBZ2VudFggU0VUIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi1TS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotLiAuL1N2M2NvbmZpZwotCi0jIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KLWlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgotZWxzZQotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCi1maQotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliIC1EQWdlbnRYIgotU1RBUlRBR0VOVAotCi0jIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBObyBTdWNoIE9iamVjdCIKLQotaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0gICMgdGVzdCB0aGUgQWdlbnRYIHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKLSAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKLSAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1YIC1JIHN5c3RlbV9taWIiCi0gIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9ib2d1cy5jb25mIgotICBlY2hvICJwc3lzY29udGFjdCB0ZXN0Y29udGFjdCIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKLSAgU1RBUlRBR0VOVAotCi0gICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0gIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCIKLQotICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiB0ZXN0Y29udGFjdCIKLQotICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLQotICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHNldHRpbmcgdGhlIHN5c3RlbSBtaWIKLSAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAgcyBuZXd0ZXN0Y29udGFjdCIKLQotICAgIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IG5ld3Rlc3Rjb250YWN0IgotCi0gICAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0KLQkjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotCUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCIKLQkKLQlDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBuZXd0ZXN0Y29udGFjdCIKLSAgICBmaQotICBmaQotCi0gICMgc3RvcCB0aGUgc3ViYWdlbnQKLSAgU1RPUEFHRU5UCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRwotZmkKLQotIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKLVNUT1BBR0VOVAotCi0jIGFsbCBkb25lICh3aGV3KQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDExMmFnZW50eHNldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QxMTJhZ2VudHhzZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGNlNzI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDExMmFnZW50eHNldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBBZ2VudFggaWxsZWdhbCBTRVQgaGFuZGxpbmcgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLVNLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi0uIC4vU3YzY29uZmlnCi0KLSMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgotaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCi1lbHNlCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKLWZpCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIgLURBZ2VudFgiCi1TVEFSVEFHRU5UCi0KLSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKLUNBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c3RlbS5zeXNDb250YWN0LjAiCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBObyBTdWNoIE9iamVjdCIKLQotaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0gICMgdGVzdCB0aGUgQWdlbnRYIHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKLSAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKLSAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1YIC1JIHN5c3RlbV9taWIiCi0gIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9ib2d1cy5jb25mIgotICBTVEFSVEFHRU5UCi0KLSAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLSAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIgotCi0gICMgd2UgZG9uJ3Qga25vdyB0aGUgcmVhbCB2YWx1ZSwgdW5mb3J0dW5hdGVseSwgc28gd2UgdGVzdCBmb3Igd2hhdAotICAjIHdlIHNob3VsZCAqbm90KiBnZXQgYmFjay4KLSAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IE5vIFN1Y2ggT2JqZWN0IgotCi0gIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMDsgdGhlbgotCi0gICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgc2V0dGluZyB0aGUgc3lzdGVtIG1pYgotICAgIENBUFRVUkUgInNubXBzZXQgLU9uIC1JciAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAgaSA0IgotCi0gICAgQ0hFQ0sgIndyb25nVHlwZSIKLQotICBmaQotCi0gICMgc3RvcCB0aGUgc3ViYWdlbnQKLSAgU1RPUEFHRU5UCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRwotZmkKLQotIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKLVNUT1BBR0VOVAotCi0jIGFsbCBkb25lICh3aGV3KQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAgYi90ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWMzZWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBBZ2VudFggdHJhcCBzZW5kaW5nIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YXJ0IHRoZSB0cmFwIGRlbW9uCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKLVNUQVJUVFJBUEQKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLS4gLi9TdjNjb25maWcKLSMgY29uZmlndXJlIHRoZSB0cmFwIHJlY2VpdmVyLgotQ09ORklHQUdFTlQgdHJhcHNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCi0KLSMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBleGFtcGxlIG1pYi4KLWlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgotZWxzZQotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCi1maQotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1leGFtcGxlIgotU1RBUlRBR0VOVAotCi0jIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBleGFtcGxlIG1pYgotQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjp1Y2RhdmlzLjI1NC4xLjAiCi0KLUNIRUNLICJObyBTdWNoIE9iamVjdCIKLQotaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0gICMgdGVzdCB0aGUgQWdlbnRYIHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKLSAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKLSAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1YIC1JIGV4YW1wbGUgLURhZGQiCi0gIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9ib2d1cy5jb25mIgotCi0gIFNUQVJUQUdFTlQKLQotICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgZXhhbXBsZSBtaWIKLSAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjp1Y2RhdmlzLjI1NC4xLjAiCi0KLSAgQ0hFQ0sgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgotCi0gIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotCi0gICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc2VuZHMgYSB0cmFwIGZyb20gdGhlIGV4bWFwbGUgbWliCi0gICAgQ0FQVFVSRSAic25tcHNldCAtT24gLXIgMCAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OnVjZGF2aXMuMjU0LjguMCBpIDEiCi0gICAgREVMQVkKLSAgICBDSEVDS1RSQVBEICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKLQotICBmaQotCi0gICMgc3RvcCB0aGUgc3ViYWdlbnQKLSAgU1RPUEFHRU5UCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRwotZmkKLQotIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKLVNUT1BBR0VOVAotCi0jIHN0b3AgdGhlIHRyYXAgZGVtb24KLVNUT1BUUkFQRAotCi0jIGFsbCBkb25lICh3aGV3KQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmwgYi90ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZGEyNGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgJ0FnZW50WCBzdWJhZ2VudCBpbiBQZXJsICh1c2luZyBOZXRTTk1QOjphZ2VudCknCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotIyBtYWtlIHN1cmUgdGhlIHRvb2xraXQgaGFzIGJlZW4gY29uZmlndXJlZCAtLXdpdGgtcGVybC1tb2R1bGVzCi1bIC1kICR7U05NUF9VUERJUn0vcGVybC9ibGliL2FyY2gvYXV0by9OZXRTTk1QL2FnZW50IF0gfHwgU0tJUAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotc25tcF92ZXJzaW9uPXYyYwotVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi1URVNUT0lEPS4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OS4xLjAKLVRFU1RPSUQyPS4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OS4yLjAKLUFHRU5UWF9TT0NLRVQ9JHtTTk1QX1RNUERJUn0vYWdlbnR4X3NvY2tldAotUEVSTF9TVUJBR0VOVD0ke1NOTVBfVE1QRElSfS9oZWxsby5wbAotUEVSTF9TVUJBR0VOVF9DT05GPSR7U05NUF9UTVBESVJ9L2hlbGxvLmNvbmYKLQotY2F0ID4kUEVSTF9TVUJBR0VOVCA8PEVORAotIyEke1NOTVBfUEVSTFBST0d9Ci0jIG1pbmltYWwgQWdlbnRYIHN1YmFnZW50IGluIFBlcmwKLQotdXNlIGJsaWIgcXcoJHtTTk1QX1VQRElSfS9wZXJsKTsKLXVzZSBOZXRTTk1QOjpPSUQgcXcoOmFsbCk7Ci11c2UgTmV0U05NUDo6YWdlbnQgcXcoOmFsbCk7Ci11c2UgTmV0U05NUDo6QVNOIHF3KDphbGwpOwotdXNlIE5ldFNOTVA6OmFnZW50OjpkZWZhdWx0X3N0b3JlOwotdXNlIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmUgcXcoOmFsbCk7Ci11c2UgU05NUDsKLQotIyMgZG91YmxlLWZvcmsgZGFlbW9uCi1teSBcJHBpZDsKLXVubGVzcyAoXCRwaWQgPSBmb3JrKSB7Ci0gIHVubGVzcyAoZm9yaykgewotICAgICMjIHN0YXJ0IG1haW4gY29kZQotICAgIG15IFwkcmVnYXQgPSAnLjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5JzsgIyBuZXRTbm1wUGxheVBlbgotICAgIG15IFwkbXlvaWQgPSBcJHJlZ2F0IC4gIi4xLjAiOyAjIHRoZSAiaGVsbG8gd29ybGQiIE9JRAotICAgIG15IFwkbXlvaWQyID0gXCRyZWdhdCAuICIuMi4wIjsgIyB0aGUgImhlbGxvIGFnYWluIHdvcmxkIiBPSUQKLQotICAgIG15IFwkcGlkZmlsZSA9IHNoaWZ0OyAjIHRha2UgUElEIGZpbGUgYXMgZmlyc3QgYXJndW1lbnQgCi0gICAgb3BlbihQSURGSUxFLCAiPlwkcGlkZmlsZSIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBcJHBpZGZpbGUiOwotICAgIHByaW50IFBJREZJTEUgXCRcJDsKLSAgICBjbG9zZShQSURGSUxFKTsKLQotc3ViIG15X3NubXBfaGFuZGxlciB7Ci0gIG15IChcJGhhbmRsZXIsIFwkcmVnaXN0cmF0aW9uX2luZm8sIFwkcmVxdWVzdF9pbmZvLCBcJHJlcXVlc3RzKSA9IEBfOwotICBmb3IobXkgXCRyZXF1ZXN0ID0gXCRyZXF1ZXN0czsgXCRyZXF1ZXN0OyBcJHJlcXVlc3QgPSBcJHJlcXVlc3QtPm5leHQoKSkgewotICAgIGlmIChcJHJlcXVlc3RfaW5mby0+Z2V0TW9kZSgpID09IE1PREVfR0VUKSB7Ci0gICAgICBpZiAoXCRyZXF1ZXN0LT5nZXRPSUQoKSA9PSBuZXcgTmV0U05NUDo6T0lEKFwkbXlvaWQpKSB7Ci0gICAgICAgIFwkcmVxdWVzdC0+c2V0VmFsdWUoQVNOX09DVEVUX1NUUiwgImhlbGxvIHdvcmxkIik7Ci0gICAgICAgIGxhc3Q7Ci0gICAgICB9IGVsc2lmIChcJHJlcXVlc3QtPmdldE9JRCgpID09IG5ldyBOZXRTTk1QOjpPSUQoXCRteW9pZDIpKSB7Ci0gICAgICAgIFwkcmVxdWVzdC0+c2V0VmFsdWUoQVNOX09DVEVUX1NUUiwgImhlbGxvIGFnYWluIHdvcmxkIik7Ci0gICAgICAgIGxhc3Q7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci1zdWIgc2h1dF9pdF9kb3duIHsgXCRydW5uaW5nID0gMDsgfQotCi0gICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9OT19ST09UX0FDQ0VTUywgMSk7Ci0gICAgbXkgXCRhZ2VudCA9IG5ldyBOZXRTTk1QOjphZ2VudCgnTmFtZScgPT4gJ2hlbGxvJywgJ0FnZW50WCcgPT4gMSk7Ci0gICAgbXkgXCRyZWdvaWQgPSBuZXcgTmV0U05NUDo6T0lEKFwkcmVnYXQpOwotICAgIFwkYWdlbnQtPnJlZ2lzdGVyKCJoZWxsbyIsIFwkcmVnb2lkLCBcJm15X3NubXBfaGFuZGxlcik7Ci0KLSAgICBcJFNJR3snSU5UJ30gPSBcJnNodXRfaXRfZG93bjsKLSAgICBcJFNJR3snUVVJVCd9ID0gXCZzaHV0X2l0X2Rvd247Ci0gICAgXCRydW5uaW5nID0gMTsKLSAgICB3aGlsZShcJHJ1bm5pbmcpIHsKLSAgICAgIFwkYWdlbnQtPmFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKDEpOwotICAgIH0KLSAgICBcJGFnZW50LT5zaHV0ZG93bigpOwotICAgICMjIGVuZCBtYWluIGNvZGUKLSAgICBleGl0IDA7Ci0gIH0KLSAgZXhpdCAwOwotfQotd2FpdHBpZChcJHBpZCwgMCk7Ci1FTkQKLQotZWNobyAiYWdlbnR4c29ja2V0ICRBR0VOVFhfU09DS0VUIiA+ICRQRVJMX1NVQkFHRU5UX0NPTkYKLQotQ09ORklHQUdFTlQgbWFzdGVyIGFnZW50eAotQ09ORklHQUdFTlQgYWdlbnR4c29ja2V0ICRBR0VOVFhfU09DS0VUCi0KLVNUQVJUQUdFTlQKLQotIyBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gZnVsZmlsbCBhbGwgbGlicmFyeSBkZXBlbmRlbmNpZXMKLV9sZF9saWJfcGF0aD0iJHtTTk1QX1VQRElSfS9zbm1wbGliLy5saWJzOiR7U05NUF9VUERJUn0vYWdlbnQvLmxpYnM6JHtTTk1QX1VQRElSfS9hZ2VudC9oZWxwZXJzLy5saWJzIgotaWYgWyAieCRMRF9MSUJSQVJZX1BBVEgiICE9ICJ4IiBdOyB0aGVuCi0gIExEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7TERfTElCUkFSWV9QQVRIfSIKLWVsc2UKLSAgTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH0iCi1maQotaWYgWyAieCREWUxEX0xJQlJBUllfUEFUSCIgIT0gIngiIF07IHRoZW4KLSAgRFlMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke0RZTERfTElCUkFSWV9QQVRIfSIKLWVsc2UKLSAgRFlMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKLWZpCi1pZiBbICJ4JFNITElCX1BBVEgiICE9ICJ4IiBdOyB0aGVuCi0gIFNITElCX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke1NITElCX1BBVEh9IgotZWxzZQotICBTSExJQl9QQVRIPSIke19sZF9saWJfcGF0aH0iCi1maQotZXhwb3J0IExEX0xJQlJBUllfUEFUSCBEWUxEX0xJQlJBUllfUEFUSCBTSExJQl9QQVRICi0KLSMgc3RhcnQgcGVybCBzdWJhZ2VudAotL3Vzci9iaW4vZW52IFNOTVBDT05GUEFUSD0iJHtTTk1QX1RNUERJUn0ke1NOTVBfRU5WX1NFUEFSQVRPUn0ke1NOTVBfVE1QX1BFUlNJU1RFTlRESVJ9IiAkU05NUF9QRVJMUFJPRyAkUEVSTF9TVUJBR0VOVCAkU05NUF9BR0VOVFhfUElEX0ZJTEUgPiRTTk1QX0FHRU5UWF9MT0dfRklMRSAyPiYxCi1ERUxBWQotCi0jIyAxKSBTTk1QIEdFVCBhZ2FpbnN0IG1pYiBvYmplY3QgaW1wbGVtZW50ZWQgYnkgdGhlIHBlcmwgc3ViYWdlbnQKLUNBUFRVUkUgInNubXBnZXQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkVEVTVE9JRCIKLUNIRUNLICJoZWxsbyB3b3JsZCIKLQotIyMgMikgcGVyc2lzdGVuY3k6IHJlY29uZmlndXJlIG1hc3RlciBhZ2VudCAoSFVQKSwgcmUtdGVzdAotSFVQQUdFTlQKLUNBUFRVUkUgInNubXBnZXQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkVEVTVE9JRDIiCi1DSEVDSyAiaGVsbG8gYWdhaW4gd29ybGQiCi0KLSMjIHN0b3AKLVNUT1BBR0VOVAotU1RPUFBST0cgJFNOTVBfQUdFTlRYX1BJRF9GSUxFCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCBiL3Rlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTAxNzdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0CisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgUHJveHkgR0VUIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BST1hZX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLQotIyBYWFg6IHVjZC1zbm1wL3Byb3h5IGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBUQ1AgLS0gcmVtb3ZlIHRoaXMgb25jZSBpdCBkb2VzCi1bICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3AiIF0gJiYgU0tJUAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLS4gLi9TdjNjb25maWcKLSMgY29uZmlnIHRoZSBwcm94eQotQ09ORklHQUdFTlQgcHJveHkgLXQgMiAtciAxIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IHN5c3RlbQotCi0jIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYiAtRHByb3h5IgotU1RBUlRBR0VOVAotCi0jIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCi0jQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi0jQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IgotCi0jaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0gICMgdGVzdCB0aGUgcHJveHkgc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgotCi0gIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQotICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgotICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvcHJveHkuY29uZiIKLSAgZWNobyAicndjb21tdW5pdHkgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKLSAgQUdFTlRfRkxBR1M9JE9SSUdfQUdFTlRfRkxBR1MKLSAgT1JJR19TTk1QX1NOTVBEX1BPUlQ9JFNOTVBfU05NUERfUE9SVAotICBTTk1QX1NOTVBEX1BPUlQ9IiR7U05NUF9BR0VOVFhfUE9SVH0iCi0gIFNUQVJUQUdFTlQKLSAgU05NUF9TTk1QRF9QT1JUPSRPUklHX1NOTVBfU05NUERfUE9SVAotCi0gICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0gIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotICAjIHN0b3AgdGhlIHN1YmFnZW50Ci0gIFNUT1BBR0VOVAotCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRwotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKLSNmaQotCi0jIHN0b3AgdGhlIG1hc3RlciBhZ2VudAotU1RPUEFHRU5UCi0KLSMgYWxsIGRvbmUgKHdoZXcpCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQgYi90ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMxYzdhNi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFByb3h5IFNFVCBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QUk9YWV9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi0KLSMgWFhYOiB1Y2Qtc25tcC9wcm94eSBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgVENQIC0tIHJlbW92ZSB0aGlzIG9uY2UgaXQgZG9lcwotWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwIiBdICYmIFNLSVAKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi0uIC4vU3YzY29uZmlnCi0jIGNvbmZpZyB0aGUgcHJveHkKLUNPTkZJR0FHRU5UIHByb3h5IC10IDIgLXIgMSAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSBzeXN0ZW0KLQotIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIgLURwcm94eSIKLVNUQVJUQUdFTlQKLQotIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgotI0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotI0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCIKLQotI2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotICAjIHRlc3QgdGhlIHByb3h5IHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKLSAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKLSAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3Byb3h5LmNvbmYiCi0gIGVjaG8gInJ3Y29tbXVuaXR5IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCi0gIGVjaG8gInBzeXNjb250YWN0IHRlc3Rjb250YWN0IiA+PiAkU05NUF9DT05GSUdfRklMRQotICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLURtaWJfaW5pdCIKLSAgT1JJR19TTk1QX1NOTVBEX1BPUlQ9JFNOTVBfU05NUERfUE9SVAotICBTTk1QX1NOTVBEX1BPUlQ9IiR7U05NUF9BR0VOVFhfUE9SVH0iCi0gIFNUQVJUQUdFTlQKLSAgU05NUF9TTk1QRF9QT1JUPSRPUklHX1NOTVBfU05NUERfUE9SVAotCi0gICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0gIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCIKLQotICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiB0ZXN0Y29udGFjdCIKLQotICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLQotICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0gICAgQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIHMgbmV3dGVzdGNvbnRhY3QiCi0KLSAgICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBuZXd0ZXN0Y29udGFjdCIKLQotICAgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotCi0JIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLQlDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAiCi0JCi0JQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogbmV3dGVzdGNvbnRhY3QiCi0gICAgZmkKLSAgZmkKLQotICAjIHN0b3AgdGhlIHN1YmFnZW50Ci0gIFNUT1BBR0VOVAotCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRwotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKLSNmaQotCi0jIHN0b3AgdGhlIG1hc3RlciBhZ2VudAotU1RPUEFHRU5UCi0KLSMgYWxsIGRvbmUgKHdoZXcpCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWNmOWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFByb3h5IGlsbGVnYWwgU0VUIGhhbmRsaW5nIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX1BST1hZX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi1TS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLQotIyBYWFg6IHVjZC1zbm1wL3Byb3h5IGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBUQ1AgLS0gcmVtb3ZlIHRoaXMgb25jZSBpdCBkb2VzCi1bICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3AiIF0gJiYgU0tJUAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLS4gLi9TdjNjb25maWcKLSMgY29uZmlnIHRoZSBwcm94eQotQ09ORklHQUdFTlQgcHJveHkgLXQgMiAtciAxIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IHN5c3RlbQotCi0jIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYiAtRHByb3h5IgotU1RBUlRBR0VOVAotCi0jIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCi0jQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi0jQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IgotCi0jaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0gICMgdGVzdCB0aGUgcHJveHkgc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgotCi0gIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQotICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgotICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvcHJveHkuY29uZiIKLSAgZWNobyAicndjb21tdW5pdHkgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKLSMgIGVjaG8gInN5c2NvbnRhY3QgdGVzdGNvbnRhY3QiID4+ICRTTk1QX0NPTkZJR19GSUxFCi0gIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtRG1pYl9pbml0IgotICBPUklHX1NOTVBfU05NUERfUE9SVD0kU05NUF9TTk1QRF9QT1JUCi0gIFNOTVBfU05NUERfUE9SVD0iJHtTTk1QX0FHRU5UWF9QT1JUfSIKLSAgU1RBUlRBR0VOVAotICBTTk1QX1NOTVBEX1BPUlQ9JE9SSUdfU05NUF9TTk1QRF9QT1JUCi0KLSAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLSAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIgotCi0gIAotICAjIHdlIGRvbid0IGtub3cgdGhlIHJlYWwgdmFsdWUsIHVuZm9ydHVuYXRlbHksIHNvIHdlIHRlc3QgZm9yIHdoYXQKLSAgIyB3ZSBzaG91bGQgKm5vdCogZ2V0IGJhY2suCi0gIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBObyBTdWNoIE9iamVjdCIKLQotICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDA7IHRoZW4KLQotICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0gICAgQ0FQVFVSRSAic25tcHNldCAtT24gLUlyICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCBpIDQyIgotCi0gICAgIyA1LjAueCBzbm1wc2V0IHNob3dzIGVycm9yIG9uIHNpbmdsZSBsaW5lCi0gICAgI0NIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBXcm9uZyBUeXBlIgotICAgICMgNS4xLnggc25tcHNldCBzaG93cyBlcnJvciBvbiBtdWx0aXBsZSBsaW5lcwotICAgIENIRUNLICJSZWFzb246IHdyb25nVHlwZSIKLSAgICBDSEVDSyAiRmFpbGVkIG9iamVjdDogLjEuMy42LjEuMi4xLjEuNC4wIgotCi0gIGZpCi0KLSAgIyBzdG9wIHRoZSBzdWJhZ2VudAotICBTVE9QQUdFTlQKLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCi0jZmkKLQotIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKLVNUT1BBR0VOVAotCi0jIGFsbCBkb25lICh3aGV3KQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDEzMHNubXB2MXZhY21nZXQgYi90ZXN0aW5nL3Rlc3RzL1QxMzBzbm1wdjF2YWNtZ2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWJkYzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDEzMHNubXB2MXZhY21nZXQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjEgdmFjbSBhY2NlcHRhbmNlIHN1cHBvcnQKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCi0jIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKLSMgdGVzdGNvbW11bml0eTIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEKLSMgVGhpcyBjYXNlIHRlc3QgZm9yIHN1Y2Nlc3NmdWwgYWNjZXNzCi1zbm1wX3ZlcnNpb249djEKLS4gLi9TdmFjbWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiIAotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBTVFJJTkc6IgotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiAiCi0KLVNUT1BBR0VOVAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTMxc25tcHYyY3ZhY21nZXQgYi90ZXN0aW5nL3Rlc3RzL1QxMzFzbm1wdjJjdmFjbWdldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ0ODFmMi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMzFzbm1wdjJjdmFjbWdldAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MiB2YWNtIGFjY2VwdGFuY2Ugc3VwcG9ydAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgotIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCi0jIHRlc3Rjb21tdW5pdHkyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xCi0jIFRoaXMgY2FzZSB0ZXN0IGZvciBzdWNjZXNzZnVsIGFjY2VzcwotCi1zbm1wX3ZlcnNpb249djJjCi0uIC4vU3ZhY21jb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIgCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiAiCi0KLQotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMzJzbm1wdjN2YWNtZ2V0IGIvdGVzdGluZy90ZXN0cy9UMTMyc25tcHYzdmFjbWdldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlOTM2NC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMzJzbm1wdjN2YWNtZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIHZhY20gYWNjZXB0YW5jZSBzdXBwb3J0Ci0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIENvbmZpZ3VyYXRpb246Ci0jaW5pdGlhbDEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBkZW55IG90aGVycwotI2luaXRpYWwyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xIAotI1RoaXMgY2FzZSB0ZXN0IGZvciBzdWNjZXNzZnVsIGFjY2VzcwotCi1zbm1wX3ZlcnNpb249djMKLS4gLi9TdjN2YWNtY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYzIC1hIE1ENSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC11IGluaXRpYWwxIC1sIGFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIgCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12MyAtYSBNRDUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAtdSBpbml0aWFsMiAtbCBhbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiIAotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiAiCi0KLVNUT1BBR0VOVAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTQwc25tcHYxdmFjbWdldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxMDAwOC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MSB2YWNtIGRlbmlhbCBzdXBwb3J0Ci0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCi0jIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKLSMgdGVzdGNvbW11bml0eTIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEKLSMgVGhpcyBjYXNlIHRlc3QgZm9yIGRlbmllZCBhY2Nlc3MKLQotc25tcF92ZXJzaW9uPXYxCi0uIC4vU3ZhY21jb25maWcKLQotU1RBUlRBR0VOVAotCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLUNIRUNLT1JESUUgIlJlYXNvbjogKG5vU3VjaE5hbWUpIFRoZXJlIGlzIG5vIHN1Y2ggdmFyaWFibGUgbmFtZSBpbiB0aGlzIE1JQi4iCi0KLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIKLQotQ0hFQ0tPUkRJRSAiUmVhc29uOiAobm9TdWNoTmFtZSkgVGhlcmUgaXMgbm8gc3VjaCB2YXJpYWJsZSBuYW1lIGluIHRoaXMgTUlCLiIKLQotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZWQzMzcuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYyIHZhY20gZGVuaWFsIHN1cHBvcnQKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKLSMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAotIyB0ZXN0Y29tbXVuaXR5MiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMQotIyBUaGlzIGNhc2UgdGVzdCBmb3IgZGVuaWVkIGFjY2VzcwotCi1zbm1wX3ZlcnNpb249djJjCi0uIC4vU3ZhY21jb25maWcKLQotU1RBUlRBR0VOVAotCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QgYXZhaWxhYmxlIG9uIHRoaXMgYWdlbnQgYXQgdGhpcyBPSUQiCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gTm8gU3VjaCBPYmplY3QgYXZhaWxhYmxlIG9uIHRoaXMgYWdlbnQgYXQgdGhpcyBPSUQiCi0KLUNBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNS4wIHMgZHVtbXkiCi1DSEVDS09SRElFICJSZWFzb246IG5vQWNjZXNzIgotCi1DQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjUuMCBzIGR1bW15IgotQ0hFQ0tPUkRJRSAiUmVhc29uOiBub0FjY2VzcyIKLQotQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdHJ3Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNS4wIHMgZHVtbXkiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS41LjAgPSBTVFJJTkc6IGR1bW15IgotCi1DQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0cm9jb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS41LjAgcyBkdW1teSIKLUNIRUNLT1JESUUgIlJlYXNvbjogbm9BY2Nlc3MiCi0KLVNUT1BBR0VOVAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTQyc25tcHYzdmFjbWdldGZhaWwgYi90ZXN0aW5nL3Rlc3RzL1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY3ZWI5Yy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyB2YWNtIGRlbmlhbCBzdXBwb3J0Ci0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIENvbmZpZ3VyYXRpb246Ci0jaW5pdGlhbDEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBkZW55IG90aGVycwotI2luaXRpYWwyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xIAotI1RoaXMgY2FzZSB0ZXN0IGZvciBkZW5pZWQgYWNjZXNzCi0KLXNubXBfdmVyc2lvbj12MwotLiAuL1N2M3ZhY21jb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdjMgLWEgTUQ1IC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXUgaW5pdGlhbDEgLWwgYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIiAKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QgYXZhaWxhYmxlIG9uIHRoaXMgYWdlbnQgYXQgdGhpcyBPSUQiCi0KLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYzIC1hIE1ENSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC11IGluaXRpYWwyIC1sIGFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIgCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IE5vIFN1Y2ggT2JqZWN0IGF2YWlsYWJsZSBvbiB0aGlzIGFnZW50IGF0IHRoaXMgT0lEIgotCi1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDE1MHNvbGFyaXNob3N0Y3B1IGIvdGVzdGluZy90ZXN0cy9UMTUwc29sYXJpc2hvc3RjcHUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyOGU5MzkuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTUwc29sYXJpc2hvc3RjcHUKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiAxc3QgQ1BVIG9uIFNvbGFyaXMgdXNpbmcgSE9TVC1SRVNPVVJDRVMKLQotaWYgdGVzdCAieGB1bmFtZSAtc2AiICE9ICJ4U3VuT1MiIDsgdGhlbgotICAgIFNLSVAKLWZpCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi1TS0lQSUZOT1QgVVNJTkdfSE9TVF9IUl9ERVZJQ0VfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKLS4gLi9TdjFjb25maWcKLQotU1RBUlRBR0VOVAotCi0jIGFzayBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmaXJzdCBDUFUgaW4gdGhlIHN5c3RlbQotCi1DQVBUVVJFICJzbm1wZ2V0bmV4dCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjI1LjMuMi4xLjMuNzY3IgotCi1DSEVDS09SRElFICIgPSBTVFJJTkc6IENQVSAiCi0KLVNUT1BBR0VOVAotICAKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxNTFzb2xhcmlzaG9zdGRpc2sgYi90ZXN0aW5nL3Rlc3RzL1QxNTFzb2xhcmlzaG9zdGRpc2sKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ODExZjUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTUxc29sYXJpc2hvc3RkaXNrCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgaW5pdGlhbCBsb2FkIGRldmljZSBvbiBTb2xhcmlzIHVzaW5nIEhPU1QtUkVTT1VSQ0VTCi0KLWlmIHRlc3QgYHVuYW1lIC1zYCAhPSAiU3VuT1MiIDsgdGhlbgotICAgICMgYSBib2d1cyBza2lwIGZvciAhc3VucwotICAgIFNLSVBJRk5PVCBYWFhZWVlaWloKLWZpCi0KLVNLSVBJRk5PVCBVU0lOR19IT1NUX0hSX1NZU1RFTV9NT0RVTEUKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKLS4gLi9TdjFjb25maWcKLQotU1RBUlRBR0VOVAotCi0jIGFzayBmb3IgdGhlIGluZGV4IG9mIHRoZSBpbml0aWFsIGRldmljZSAoaHJTeXN0ZW1Jbml0aWFsTG9hZERldmljZS4wKQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjI1LjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0tPUkRJRSAiXi4xLjMuNi4xLjIuMS4yNS4xLjMuMCA9IElOVEVHRVI6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTUyaG9zdHVwdGltZSBiL3Rlc3RpbmcvdGVzdHMvVDE1Mmhvc3R1cHRpbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlOTBkM2YuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTUyaG9zdHVwdGltZQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHVwdGltZSB1c2luZyBIT1NULVJFU09VUkNFUwotCi1TS0lQSUZOT1QgVVNJTkdfSE9TVF9IUl9TWVNURU1fTU9EVUxFCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKLS4gLi9TdjFjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMjUuMS4xLjAiCi0KLVNUT1BBR0VOVAotICAgIAotQ0hFQ0tPUkRJRSAiXi4xLjMuNi4xLjIuMS4yNS4xLjEuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECi0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDE1M3NvbGFyaXNzd2FwIGIvdGVzdGluZy90ZXN0cy9UMTUzc29sYXJpc3N3YXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZTJlM2MuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTUzc29sYXJpc3N3YXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBzd2FwIG9uIFNvbGFyaXMgdXNpbmcgSE9TVC1SRVNPVVJDRVMKLQotaWYgdGVzdCBgdW5hbWUgLXNgICE9ICJTdW5PUyIgOyB0aGVuCi0gICAgIyBhIGJvZ3VzIHNraXAgZm9yICFzdW5zCi0gICAgU0tJUElGTk9UIFhYWFlZWVpaWgotZmkKLQotU0tJUElGTk9UIFVTSU5HX0hPU1RfSFJfU1RPUkFHRV9NT0RVTEUKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQotLiAuL1N2MWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLSMgYXNrIGZvciBoclN0b3JhZ2VTaXplLjEwIHdoaWNoIHJlcG9ydHMgb3ZlcmFsbCBzd2FwIHNpemUKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4yNS4yLjMuMS41LjEwIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0tPUkRJRSAiXi4xLjMuNi4xLjIuMS4yNS4yLjMuMS41LjEwID0gSU5URUdFUjoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdCBiL3Rlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWRlNTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0CisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi0jIHNubXBuZXRzdGF0IHRlc3Qgb25seSB3b3JrcyB3aXRoIFVEUCBvciBUQ1AKLWlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieCIgLW8gIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVkcCIgXTsgdGhlbgotICBwcm90bz11ZHAKLSAgU0tJUElGTk9UIFVTSU5HX01JQklJX1VEUFRBQkxFX01PRFVMRQotZWxpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3AiIF07IHRoZW4KLSAgcHJvdG89dGNwCi0gIFNLSVBJRk5PVCBVU0lOR19NSUJJSV9UQ1BUQUJMRV9NT0RVTEUKLWVsc2UKLSAgSEVBREVSICJpZiBzbm1wbmV0c3RhdCBmaW5kcyB0aGUgcnVubmluZyBhZ2VudCBpbiB1ZHBUYWJsZS90Y3BUYWJsZSIKLSAgU0tJUAotZmkKLQotSEVBREVSICJpZiBzbm1wbmV0c3RhdCBmaW5kcyB0aGUgcnVubmluZyBhZ2VudCBpbiAke3Byb3RvfVRhYmxlIgotCi0jIG9uIHNvbWUgc3lzdGVtcyB0aGUgYWdlbnQgbmVlZHMgdG8gYmUgcnVuIGFzIHJvb3QgdG8gYWNjZXNzIHVkcFRhYmxlL3RjcFRhYmxlCi0jIC0gZWxzZSBmb3JjZSBza2lwCi1jYXNlICJ4YHVuYW1lIC1zYCIgaW4KLSAgeEFJWCkgICAgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUDs7Ci0gIHhIUC1VWCkgICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVA7OwotICB4SVJJWCopICAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQOzsKLSAgeE5ldEJTRCkgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUDs7Ci0gIHhPcGVuQlNEKSBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVA7OwotICB4T1NGMSkgICAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQOzsKLWVzYWMKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0KLSMgbWFrZSBzdXJlIHNubXBuZXRzdGF0IGNhbiBiZSBleGVjdXRlZAotU05NUE5FVFNUQVQ9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdCIKLVsgLXggIiRTTk1QTkVUU1RBVCIgXSB8fCBTS0lQCi0KLXNubXBfdmVyc2lvbj12MmMKLS4gLi9TdjJjY29uZmlnCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgIiRTTk1QTkVUU1RBVCAtQ24gLUNwICRwcm90byAtJHNubXBfdmVyc2lvbiAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCi1DSEVDS0VYQUNUICIxMjcuMC4wLjEuJFNOTVBfU05NUERfUE9SVCIKLSMgbXVsdGlwbGUgb2NjdXJyZW5jZXMgKGVzcGVjaWFsbHkgaW4gdGNwVGFibGUpIGFyZSBmaW5lCi1pZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgcmV0dXJuX3ZhbHVlPTAKLWVsc2UKLSAgICByZXR1cm5fdmFsdWU9MQotZmkKLQotU1RPUEFHRU5UCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGwgYi90ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM4ODIzNS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSICJmdWxsIHNubXB3YWxrIChTTk1QdjJjKSBhZ2FpbnN0IGFnZW50IChtYXkgdGFrZSB0aW1lKSIKLQotaWYgdGVzdCBgdW5hbWUgLXNgID0gIkhQLVVYIiA7IHRoZW4KLSAgICBpZiB0ZXN0IGBpZCAtdWAgIT0gIjAiIDsgdGhlbgotICAgICAgICAjIFRoZSBhZ2VudCBuZWVkcyB0byBiZSBydW4gYXMgcm9vdCAtIGVsc2UgZm9yY2Ugc2tpcAotICAgICAgICBTS0lQCi0gICAgZmkKLWZpCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotCi0jIG1ha2Ugc3VyZSBzbm1wd2FsayBjYW4gYmUgZXhlY3V0ZWQKLVNOTVBXQUxLPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcHdhbGsiCi1bIC14ICIkU05NUFdBTEsiIF0gfHwgU0tJUAotCi1zbm1wX3ZlcnNpb249djJjCi0uIC4vU3YyY2NvbmZpZwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBoaWdoZXIgdGltZW91dC9yZXRyeSB2YWx1ZXMgZm9yIHNhZmV0eQotVElNRU9VVD0xMAotUkVUUlk9NQotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyB0ZXN0Y29tbXVuaXR5IC10ICRUSU1FT1VUIC1yICRSRVRSWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xIgotaWYgSVNERUZJTkVEIFVTSU5HX1dJTkVYVERMTF9NT0RVTEU7IHRoZW4KLSAgOgotZWxzZQotICBDSEVDS0FORERJRSAiPSBXcm9uZyBUeXBlIChzaG91bGQgYmUgIgotZmkKLUNIRUNLT1JESUUgIk5vIG1vcmUgdmFyaWFibGVzIGxlZnQgaW4gdGhpcyBNSUIgVmlldyIKLQotU1RPUEFHRU5UCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvd2luMzIvQ29uZmlndXJlIGIvd2luMzIvQ29uZmlndXJlCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOThmYTNmZC4uYTM2ZGIwYgotLS0gYS93aW4zMi9Db25maWd1cmUKKysrIGIvd2luMzIvQ29uZmlndXJlCkBAIC03LDYgKzcsNyBAQAogdXNlIEdldG9wdDo6TG9uZzsKIHVzZSBzdHJpY3Q7CiAKK215ICR2ZXJzaW9uID0gInVua25vd24iOwogbXkgJGNvbmZpZzsKIG15ICRzZGsgPSAwOwogbXkgJGxpbmt0eXBlOwpAQCAtODUsNDUgKzg2LDczIEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCi0jIENyZWF0ZSBtYWluIE1ha2VmaWxlCisjIERldGVybWluZSB2ZXJzaW9uIGZyb20gdW5peCBjb25maWd1cmUgc2NyaXB0CiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitteSAkdW5peF9jb25maWd1cmVfaW4gPSAiLi4vY29uZmlndXJlIjsKKworb3BlbiAoVU5JWF9DT05GSUdVUkVfSU4sICI8JHVuaXhfY29uZmlndXJlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICR1bml4X2NvbmZpZ3VyZV9pblxuIjsKKword2hpbGUgKDxVTklYX0NPTkZJR1VSRV9JTj4pCiB7Ci0gIG15ICRtYWtlZmlsZV9vdXQgPSAiTWFrZWZpbGUiOwotICBteSAkbWFrZWZpbGVfaW4gID0gIk1ha2VmaWxlLmluIjsKLQotICBvcGVuIChNQUtFX09VVCwgIj4kbWFrZWZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9vdXRcbiI7Ci0gIG9wZW4gKE1BS0VfSU4sICI8JG1ha2VmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9pblxuIjsKLQotICBwcmludCAiY3JlYXRpbmcgJG1ha2VmaWxlX291dFxuIjsKLQotICB3aGlsZSAoPE1BS0VfSU4+KQotICB7Ci0gICAgY2hvbXA7Ci0gICAgaWYgKCRzZGsgPT0gMSkgewotICAgICAgcy9eU0RLPS9TREs9dHJ1ZS87Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcy9eU0RLPS9TREs9ZmFsc2UvOwotICAgIH0KLQotICAgIHMvXkxJTktUWVBFPS9MSU5LVFlQRT0kbGlua3R5cGUvOwotICAgIHMvXkNGRz0vQ0ZHPSRjb25maWcvOwotICAgIHMvXlBSRUZJWD0vUFJFRklYPSRwcmVmaXgvOwotICAgIHMvXlBSRUZJWF9ET1M9L1BSRUZJWF9ET1M9JHByZWZpeGRvcy87Ci0gICAgcy9eU1NMPS4qL1NTTD0kb3BlbnNzbC87Ci0KLSAgICBwcmludCBNQUtFX09VVCAkXyAuICJcbiI7CisgIGNob21wOworICAvUEFDS0FHRV9WRVJTSU9OPScoLiopJy87CisgIGlmICgkMSBuZSAiIikgeworICAgICR2ZXJzaW9uID0gJDE7CisgICAgbGFzdDsKICAgfQogfQogCisjIEFyZ3VtZW50czoKKyMgJDE6IE5hbWUgb2Ygb3V0cHV0IGZpbGUKKyMgJDI6IE5hbWUgb2YgaW5wdXQgZmlsZQorIyAkMzogUmVmZXJlbmNlIHRvIGEgaGFzaCB3aXRoIHN1YnN0aXR1dGlvbnMuIEEgc3Vic3RpdHV0aW9uIGlzIGFuIGFycmF5IHdpdGgKKyMgICAgIHR3byBlbGVtZW50cyB3aGVyZSBlbGVtZW50IFswXSBpcyB0aGUgcGF0dGVybiB0byBzZWFyY2ggZm9yIGFuZCBlbGVtZW50CisjICAgICBbMV0gdGhlIHJlcGxhY2VtZW50IHRleHQuCitzdWIgc3Vic3RpdHV0ZQoreworICBteSAkb3V0ICA9IHNoaWZ0OworICBteSAkaW4gICA9IHNoaWZ0OworICBteSAkc3VicyA9IHNoaWZ0OworCisgIG9wZW4gKE9VVCwgIj4kb3V0IikgfHwgZGllICJDYW4ndCBvcGVuICRvdXRcbiI7CisgIG9wZW4gKElOLCAgIjwkaW4iKSAgfHwgZGllICJDYW4ndCBvcGVuICRpblxuIjsKKworICBwcmludCAiY3JlYXRpbmcgJG91dFxuIjsKKworICB3aGlsZSAoPElOPikgeworICAgIGNob21wOworICAgIGZvcmVhY2ggbXkgJGUgKGtleXMgJSRzdWJzKSB7CisgICAgICAgIG15ICRwID0gJCRzdWJzeyRlfVswXTsKKyAgICAgICAgbXkgJHEgPSAkJHN1YnN7JGV9WzFdOworICAgICAgICBzLyRwLyRxLzsKKyAgICB9CisgICAgcHJpbnQgT1VUICRfIC4gIlxuIjsKKyAgfQorCisgIGNsb3NlIElOOworICBjbG9zZSBPVVQ7Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCi0jIENyZWF0ZSBNYWtlZmlsZXMgZm9yIGFwcGxpY2F0aW9ucyBmcm9tCi0jIE1ha2VmaWxlLWFwcHMuaW4KLSMgKGV4Y2VwdCBmb3Igc25tcG5ldHN0YXQpCisjIFBlcmZvcm0gc3Vic3RpdHV0aW9ucwogIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICVzdWJzID0gKAorICAgICJjZmciID0+IFsgIl5DRkc9IiwgICAgICAgICJDRkc9JGNvbmZpZyIgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICJpbnQiID0+IFsgIl5JTlRESVI9IiwgICAgICJJTlRESVI9LlxcJGNvbmZpZyIgICAgICAgICAgICAgICAgICBdLAorICAgICJsbmsiID0+IFsgIl5MSU5LVFlQRT0iLCAgICJMSU5LVFlQRT0kbGlua3R5cGUiICAgICAgICAgICAgICAgICBdLAorICAgICJvdXQiID0+IFsgIl5PVVRESVI9IiwgICAgICJPVVRESVI9LlxcJGNvbmZpZyIgICAgICAgICAgICAgICAgICBdLAorICAgICJwZngiID0+IFsgIl5QUkVGSVg9IiwgICAgICJQUkVGSVg9JHByZWZpeCIgICAgICAgICAgICAgICAgICAgICBdLAorICAgICJkb3MiID0+IFsgIl5QUkVGSVhfRE9TPSIsICJQUkVGSVhfRE9TPSRwcmVmaXhkb3MiICAgICAgICAgICAgICBdLAorICAgICJzZGsiID0+IFsgIl5TREs9IiwgICAgICAgICRzZGsgPT0gMSA/ICJTREs9dHJ1ZSIgOiAiU0RLPWZhbHNlIiBdLAorICAgICk7CisKK3N1YnN0aXR1dGUoIk1ha2VmaWxlIiwgIk1ha2VmaWxlLmluIiwgXCVzdWJzKTsKK3N1YnN0aXR1dGUoImxvY2FsL01ha2VmaWxlIiwgImxvY2FsL01ha2VmaWxlLmluIiwgXCVzdWJzKTsKKwogbXkgQHByb2dyYW1zID0gcXcKIC9lbmNvZGVfa2V5Y2hhbmdlCiBzbm1wYnVsa2dldApAQCAtMTQ0LDI3MCArMTczLDUxIEBACiAvOwogCiBmb3JlYWNoIG15ICRwcm9nTmFtZSAoQHByb2dyYW1zKSB7Ci0KLSAgbXkgJG1ha2VmaWxlX291dCA9ICIkcHJvZ05hbWVcXE1ha2VmaWxlIjsKLSAgbXkgJG1ha2VmaWxlX2luID0gIk1ha2VmaWxlLWFwcHMuaW4iOwotCi0gIG15ICRvdXRkaXIgPSAkY29uZmlnOwotICBteSAkaW50ZGlyID0gJGNvbmZpZzsKLQotICBvcGVuIChNQUtFX09VVCwgIj4kbWFrZWZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9vdXRcbiI7Ci0gIG9wZW4gKE1BS0VfSU4sICI8JG1ha2VmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9pblxuIjsKLQotICBwcmludCAiY3JlYXRpbmcgJG1ha2VmaWxlX291dFxuIjsKLQotICB3aGlsZSAoPE1BS0VfSU4+KQotICB7Ci0gICAgY2hvbXA7Ci0KLSAgICBzL15MSU5LVFlQRT0vTElOS1RZUEU9JGxpbmt0eXBlLzsKLSAgICBzL15QUk9HTkFNRT0vUFJPR05BTUU9JHByb2dOYW1lLzsKLSAgICBzL15DRkc9L0NGRz0kY29uZmlnLzsKLSAgICBzL15PVVRESVI9L09VVERJUj0uXFwkb3V0ZGlyLzsKLSAgICBzL15JTlRESVI9L0lOVERJUj0uXFwkaW50ZGlyLzsKLSAgICBzL15TU0w9LiovU1NMPSRvcGVuc3NsLzsKLQotICAgIHByaW50IE1BS0VfT1VUICRfIC4gIlxuIjsKLSAgfQorICAgICRzdWJzeyJwcmcifSA9IFsgIl5QUk9HTkFNRT0iLCAiUFJPR05BTUU9JHByb2dOYW1lIiBdOworICAgIHN1YnN0aXR1dGUoIiRwcm9nTmFtZS9NYWtlZmlsZSIsICJNYWtlZmlsZS1hcHBzLmluIiwgXCVzdWJzKTsKIH0KIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgQ3JlYXRlIE1ha2VmaWxlcyBmb3Igc25tcG5ldHN0YXQgZnJvbQotIyBzbm1wbmV0c3RhdFxNYWtlZmlsZS5pbgotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLW15IEBwcm9ncmFtcyA9IHF3Ci0vc25tcG5ldHN0YXQKLS87Ci0KLWZvcmVhY2ggbXkgJHByb2dOYW1lIChAcHJvZ3JhbXMpIHsKLQotICBteSAkbWFrZWZpbGVfb3V0ID0gIiRwcm9nTmFtZVxcTWFrZWZpbGUiOwotICBteSAkbWFrZWZpbGVfaW4gPSAiJHByb2dOYW1lXFxNYWtlZmlsZS5pbiI7Ci0KLSAgbXkgJG91dGRpciA9ICRjb25maWc7Ci0gIG15ICRpbnRkaXIgPSAkY29uZmlnOwotCi0gIG9wZW4gKE1BS0VfT1VULCAiPiRtYWtlZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX291dFxuIjsKLSAgb3BlbiAoTUFLRV9JTiwgIjwkbWFrZWZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX2luXG4iOwotCi0gIHByaW50ICJjcmVhdGluZyAkbWFrZWZpbGVfb3V0XG4iOwotCi0gIHdoaWxlICg8TUFLRV9JTj4pCi0gIHsKLSAgICBjaG9tcDsKLQotICAgIHMvXkxJTktUWVBFPS9MSU5LVFlQRT0kbGlua3R5cGUvOwotICAgIHMvXlBST0dOQU1FPS9QUk9HTkFNRT0kcHJvZ05hbWUvOwotICAgIHMvXkNGRz0vQ0ZHPSRjb25maWcvOwotICAgIHMvXk9VVERJUj0vT1VURElSPS5cXCRvdXRkaXIvOwotICAgIHMvXklOVERJUj0vSU5URElSPS5cXCRpbnRkaXIvOwotICAgIHMvXlNTTD0uKi9TU0w9JG9wZW5zc2wvOwotCi0gICAgcHJpbnQgTUFLRV9PVVQgJF8gLiAiXG4iOwotICB9Citmb3JlYWNoIG15ICRwcm9nTmFtZSAoImxpYmFnZW50IiwgImxpYm5ldHNubXB0cmFwZCIsICJsb2NhbCIsCisgICAgICAgICAgICAgICAgICAgICAgIm5ldHNubXBtaWJzIiwgInNubXBkIiwgInNubXB0cmFwZCIsICJzbm1wbmV0c3RhdCIsCisgICAgICAgICAgICAgICAgICAgICAgJGxpbmt0eXBlIGVxICJkeW5hbWljIiA/ICJsaWJzbm1wX2RsbCIgOiAibGlic25tcCIpIHsKKyAgICAkc3Vic3sicHJnIn0gPSBbICJeUFJPR05BTUU9IiwgIlBST0dOQU1FPSRwcm9nTmFtZSIgXTsKKyAgICBzdWJzdGl0dXRlKCIkcHJvZ05hbWUvTWFrZWZpbGUiLCAiJHByb2dOYW1lL01ha2VmaWxlLmluIiwgXCVzdWJzKTsKIH0KIAorbXkgJXN1YnMgPSAoCisgICAgImVudiIgPT4gWyAiXEBFTlZfU0VQQVJBVE9SXEAiLCAiOyIgXQorKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgQ3JlYXRlIE1ha2VmaWxlcyBmb3IgbGlicmFyaWVzCi0jIGZyb20gbmFtZVxNYWtlZmlsZS5pbgotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLW15IEBwcm9ncmFtcyA9IHF3Ci0vbGliYWdlbnQKLWxpYmhlbHBlcnMKLWxpYm5ldHNubXB0cmFwZAotLzsKK3N1YnN0aXR1dGUoIi4uL2xvY2FsL3NubXBjb25mIiwgIi4uL2xvY2FsL3NubXBjb25mLmluIiwgXCVzdWJzKTsKIAotaWYgKCRzZGsgPT0gMSkgewotICBwdXNoIChAcHJvZ3JhbXMsICJuZXRzbm1wbWlic3NkayIpOworCitteSAlc3VicyA9ICgKKyAgICAidmVyIiA9PiBbICJeI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04uKiIsCisgICAgICAgICAgICAgICAiI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gXCIkdmVyc2lvblwiIiBdCisgICAgKTsKK2lmICgkcHJlZml4IG5lICIiKSB7CisgICAgJHN1YnN7InBmeCJ9ID0gWyAiXiNkZWZpbmUgSU5TVEFMTF9CQVNFLioiLCAiI2RlZmluZSBJTlNUQUxMX0JBU0UgXCIkcHJlZml4XCIiIF07CiB9Ci1lbHNlIHsKLSAgcHVzaCAoQHByb2dyYW1zLCAibmV0c25tcG1pYnMiKTsKLX0KLQogaWYgKCRsaW5rdHlwZSBlcSAiZHluYW1pYyIpIHsKLSAgcHVzaCAoQHByb2dyYW1zLCAibGlic25tcF9kbGwiKTsKKyAgICAkc3Vic3siZGxsIn0gPSBbICJeLiojdW5kZWYgTkVUU05NUF9VU0VfRExMLioiLCAiI2RlZmluZSBORVRTTk1QX1VTRV9ETEwgMSIgXTsKIH0KLWVsc2UgewotICBwdXNoIChAcHJvZ3JhbXMsICJsaWJzbm1wIik7Ci19Ci0KLWZvcmVhY2ggbXkgJHByb2dOYW1lIChAcHJvZ3JhbXMpIHsKLQotICBteSAkbWFrZWZpbGVfb3V0ID0gIiRwcm9nTmFtZVxcTWFrZWZpbGUiOwotICBteSAkbWFrZWZpbGVfaW4gPSAiJHByb2dOYW1lXFxNYWtlZmlsZS5pbiI7Ci0KLSAgbXkgJG91dGRpciA9ICRjb25maWc7Ci0gIG15ICRpbnRkaXIgPSAkY29uZmlnOwotCi0gIG9wZW4gKE1BS0VfT1VULCAiPiRtYWtlZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX291dFxuIjsKLSAgb3BlbiAoTUFLRV9JTiwgIjwkbWFrZWZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX2luXG4iOwotCi0gIHByaW50ICJjcmVhdGluZyAkbWFrZWZpbGVfb3V0XG4iOwotCi0gIHdoaWxlICg8TUFLRV9JTj4pCi0gIHsKLSAgICBjaG9tcDsKLQotICAgIHMvXlBST0dOQU1FPS9QUk9HTkFNRT0kcHJvZ05hbWUvOwotICAgIHMvXkNGRz0vQ0ZHPSRjb25maWcvOwotICAgIHMvXk9VVERJUj0vT1VURElSPS5cXCRvdXRkaXIvOwotICAgIHMvXklOVERJUj0vSU5URElSPS5cXCRpbnRkaXIvOwotICAgIHMvXlNTTD0uKi9TU0w9JG9wZW5zc2wvOwotICAgIGlmICgkYl93aW5leHRkbGwgPT0gMSkgewotICAgICAgcy8jKC4qPylccysjIHVuY29tbWVudCBmb3Igd2luRXh0RExMLiovJDEvOwotICAgICAgcy9eTElCMzJfRkxBR1M9KC4qKS9MSUIzMl9GTEFHUz1NZ210QVBJLmxpYiBzbm1wYXBpLmxpYiAkMS87Ci0gICAgfQotICAgIHByaW50IE1BS0VfT1VUICRfIC4gIlxuIjsKLSAgfQotfQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBDcmVhdGUgTWFrZWZpbGVzIGZvciBkYWVtb25zCi0jIGZyb20gbmFtZVxNYWtlZmlsZS5pbgotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLW15IEBwcm9ncmFtcyA9IHF3Ci0vc25tcHRyYXBkCi0vOwotCiBpZiAoJHNkayA9PSAxKSB7Ci0gIHB1c2ggKEBwcm9ncmFtcywgInNubXBkc2RrIik7CisgICAgJHN1YnN7InNkayJ9ID0gWyAiXi4qI3VuZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLLioiLCAiI2RlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyAxIiBdOwogfQotZWxzZSB7Ci0gIHB1c2ggKEBwcm9ncmFtcywgInNubXBkIik7CitpZiAoJG9wZW5zc2wgPT0gMSkgeworICAgICRzdWJzeyJzc2wifSA9IFsgIl4uKiN1bmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMLioiLCAiI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEiIF07Cit9IGVsc2UgeworICAgICRzdWJzeyJzc2wifSA9IFsgIl4uKiN1bmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUuKiIsICIjZGVmaW5lIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSAxIiBdOworfQoraWYgKCRiX2lwdjYgPT0gMSkgeworICAgICRzdWJzeyJpcHY2In0gPSBbICJeLiojdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNi4qIiwgIiNkZWZpbmUgTkVUU05NUF9FTkFCTEVfSVBWNiAxIiBdOworfQoraWYgKCRiX3dpbmV4dGRsbCA9PSAxKSB7CisgICAgJHN1YnN7IndpbmV4dGRsbCJ9ID0gWyAiXi4qI3VuZGVmIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUuKiIsICIjZGVmaW5lIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUgMSIgXTsKIH0KIAotZm9yZWFjaCBteSAkcHJvZ05hbWUgKEBwcm9ncmFtcykgewotCi0gIG15ICRtYWtlZmlsZV9vdXQgPSAiJHByb2dOYW1lXFxNYWtlZmlsZSI7Ci0gIG15ICRtYWtlZmlsZV9pbiA9ICIkcHJvZ05hbWVcXE1ha2VmaWxlLmluIjsKLQotICBteSAkb3V0ZGlyID0gJGNvbmZpZzsKLSAgbXkgJGludGRpciA9ICRjb25maWc7Ci0KLSAgb3BlbiAoTUFLRV9PVVQsICI+JG1ha2VmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfb3V0XG4iOwotICBvcGVuIChNQUtFX0lOLCAiPCRtYWtlZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfaW5cbiI7Ci0KLSAgcHJpbnQgImNyZWF0aW5nICRtYWtlZmlsZV9vdXRcbiI7Ci0KLSAgd2hpbGUgKDxNQUtFX0lOPikKLSAgewotICAgIGNob21wOwotCi0gICAgcy9eTElOS1RZUEU9L0xJTktUWVBFPSRsaW5rdHlwZS87Ci0gICAgcy9eUFJPR05BTUU9L1BST0dOQU1FPSRwcm9nTmFtZS87Ci0gICAgcy9eQ0ZHPS9DRkc9JGNvbmZpZy87Ci0gICAgcy9eT1VURElSPS9PVVRESVI9LlxcJG91dGRpci87Ci0gICAgcy9eSU5URElSPS9JTlRESVI9LlxcJGludGRpci87Ci0gICAgcy9eU1NMPS4qL1NTTD0kb3BlbnNzbC87Ci0KLSAgICBwcmludCBNQUtFX09VVCAkXyAuICJcbiI7Ci0gIH0KLX0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgQ3JlYXRlIE1ha2VmaWxlIGZvciBQZXJsIHNjcmlwdHMgaW4gbG9jYWwKLSMgZnJvbSBsb2NhbFxNYWtlZmlsZS5pbgotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotbXkgJG1ha2VmaWxlX291dCA9ICJsb2NhbFxcTWFrZWZpbGUiOwotbXkgJG1ha2VmaWxlX2luID0gImxvY2FsXFxNYWtlZmlsZS5pbiI7Ci0KLW15ICRvdXRkaXIgPSAkY29uZmlnOwotCi1vcGVuIChNQUtFX09VVCwgIj4kbWFrZWZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9vdXRcbiI7Ci1vcGVuIChNQUtFX0lOLCAiPCRtYWtlZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfaW5cbiI7Ci0KLXByaW50ICJjcmVhdGluZyAkbWFrZWZpbGVfb3V0XG4iOwotCi13aGlsZSAoPE1BS0VfSU4+KQotewotICBjaG9tcDsKLQotICBzL15PVVRESVI9L09VVERJUj0uXFwkb3V0ZGlyLzsKLSAgcy9eUFJFRklYPS9QUkVGSVg9JHByZWZpeC87Ci0gIHMvXlBSRUZJWF9ET1M9L1BSRUZJWF9ET1M9JHByZWZpeGRvcy87Ci0KLSAgcHJpbnQgTUFLRV9PVVQgJF8gLiAiXG4iOwotfQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIENyZWF0ZSBuZXQtc25tcC1jb25maWcuaAotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXsKLSAgbXkgJGZpbGVfb3V0ID0gIm5ldC1zbm1wXFxuZXQtc25tcC1jb25maWcuaCI7Ci0gIG15ICRmaWxlX2luID0gIm5ldC1zbm1wXFxuZXQtc25tcC1jb25maWcuaC5pbiI7Ci0KLSAgb3BlbiAoRklMRV9PVVQsICI+JGZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRmaWxlX291dFxuIjsKLSAgb3BlbiAoRklMRV9JTiwgIjwkZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkZmlsZV9pblxuIjsKLQotICBwcmludCAiY3JlYXRpbmcgJGZpbGVfb3V0XG4iOwotCi0gIHdoaWxlICg8RklMRV9JTj4pCi0gIHsKLSAgICBjaG9tcDsKLQotICAgIGlmICgkcHJlZml4IG5lICIiKSB7Ci0gICAgICBzL14jZGVmaW5lIElOU1RBTExfQkFTRS4qLyNkZWZpbmUgSU5TVEFMTF9CQVNFIFwiJHByZWZpeFwiLzsKLSAgICB9Ci0gICAgaWYgKCRsaW5rdHlwZSBlcSAiZHluYW1pYyIpIHsKLSAgICAgIHMvXi4qI3VuZGVmIE5FVFNOTVBfVVNFX0RMTC4qLyNkZWZpbmUgTkVUU05NUF9VU0VfRExMIDEvOwotICAgIH0KLSAgICBpZiAoJHNkayA9PSAxKSB7Ci0gICAgICBzL14uKiN1bmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESy4qLyNkZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgMS87Ci0gICAgfQotICAgIGlmICgkb3BlbnNzbCA9PSAxKSB7Ci0gICAgICBzL14uKiN1bmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMLiovI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEvOwotICAgIH0KLSAgICBpZiAoJGJfaXB2NiA9PSAxKSB7Ci0gICAgICBzL14uKiN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2LiovI2RlZmluZSBORVRTTk1QX0VOQUJMRV9JUFY2IDEvOwotICAgIH0KLSAgICBpZiAoJGJfd2luZXh0ZGxsID09IDEpIHsKLSAgICAgIHMvXi4qI3VuZGVmIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUuKi8jZGVmaW5lIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUgMS87Ci0gICAgfQotCi0gICAgcHJpbnQgRklMRV9PVVQgJF8gLiAiXG4iOwotICB9Ci19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIENyZWF0ZSBsaWJzbm1wLmRlZiBmaWxlIGZvciBsaWJzbm1wX2RsbAotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWlmICgkbGlua3R5cGUgZXEgImR5bmFtaWMiKQotewotICBteSAkZmlsZV9vdXQgPSAibGlic25tcF9kbGxcXGxpYnNubXAuZGVmIjsKLSAgbXkgJGZpbGVfaW4gPSAibGlic25tcF9kbGxcXGxpYnNubXAuZGVmLmluIjsKLQotICBvcGVuIChGSUxFX09VVCwgIj4kZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJGZpbGVfb3V0XG4iOwotICBvcGVuIChGSUxFX0lOLCAiPCRmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRmaWxlX2luXG4iOwotCi0gIHByaW50ICJjcmVhdGluZyAkZmlsZV9vdXRcbiI7Ci0KLSAgd2hpbGUgKDxGSUxFX0lOPikKLSAgewotICAgIGNob21wOwotCi0gICAgaWYgKCRiX2lwdjYgPT0gIjEiKSB7Ci0gICAgICBzL147aXB2Ni8vaTsKLSAgICB9Ci0KLSAgICBwcmludCBGSUxFX09VVCAkXyAuICJcbiI7Ci0gIH0KLX0KLQorc3Vic3RpdHV0ZSgibmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiLCAibmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4iLAorICAgICAgICAgICBcJXN1YnMpOwogCiBwcmludCBxcS8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDE2LDYgKzIyNiwxMSBAQAogCiAvOwogCitpZiAoJHZlcnNpb24gZXEgInVua25vd24iKSB7CisgICR2ZXJzaW9uID0gInVua25vd24gLSBDb3VsZCBub3QgZGV0ZXJtaW5lIHZlcnNpb24gZnJvbSAuLi9jb25maWd1cmUhIjsKK30KKworcHJpbnQgIiAgVmVyc2lvbjogICAgICAgICAgICAgICAgICAgICR2ZXJzaW9uXG4iOwogcHJpbnQgIiAgQ29uZmlnIHR5cGU6ICAgICAgICAgICAgICAgICRjb25maWdcbiI7CiBwcmludCAiICBTREs6ICAgICAgICAgICAgICAgICAgICAgICAgIiAuICgkc2RrID09IDEgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CiBwcmludCAiICBMaW5rIHR5cGU6ICAgICAgICAgICAgICAgICAgJGxpbmt0eXBlXG4iOwpkaWZmIC0tZ2l0IGEvd2luMzIvTWFrZWZpbGUtYXBwcy5pbiBiL3dpbjMyL01ha2VmaWxlLWFwcHMuaW4KaW5kZXggYjVmZWQ2MS4uYmNmYjI2ZSAxMDA2NDQKLS0tIGEvd2luMzIvTWFrZWZpbGUtYXBwcy5pbgorKysgYi93aW4zMi9NYWtlZmlsZS1hcHBzLmluCkBAIC0zLDcgKzMsNiBAQAogT1VURElSPQogSU5URElSPQogTElOS1RZUEU9Ci1TU0w9CiAKICMgU2V0IHRvIDEgdG8gYWxsb3cgdGhlIGJ1aWxkaW5nIHVzaW5nIHRoZSBETEwgdmVyc2lvbiBvZiBTTk1QTElCLgogQUxMT1dfRExMPTEKQEAgLTI0LDYgKzIzLDcgQEAKIAktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKIAktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIKIAogIi4uXGJpblwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCkBAIC0zMiw3ICszMiw3IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAKICFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgogQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKQEAgLTc0LDcgKzc0LDcgQEAKIEJTQzMyX1NCUlM9IFwKIAogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiIAorTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL291dDoiLi5cYmluXCQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSIgCiBMSU5LMzJfT0JKUz0gXAogCSIkKElOVERJUilcJChQUk9HTkFNRSkub2JqIgogCkBAIC04Myw2ICs4Myw4IEBACiAgICAgJChMSU5LMzIpIEA8PAogICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKIDw8CisgaWYgZXhpc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiBcCisJICAgIG10LmV4ZSAtbWFuaWZlc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6Ii4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIjsxCiAhRUxTRQkjIExpbmt0eXBlIGNoZWNrCiAJLUBlY2hvIC4KIAktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKQEAgLTEwMyw2ICsxMDUsNyBAQAogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wZGIiCiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKIAktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIKIAogIi4uXGJpblwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCkBAIC0xMTEsNyArMTE0LDcgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiIkKElOVERJUilcXCIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiIkKElOVERJUilcXCIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIAogIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCiBDUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgpAQCAtMTU5LDcgKzE2Miw3IEBACiA8PAogCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciIAorTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9vdXQ6Ii4uXGJpblwkKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciIAogTElOSzMyX09CSlM9IFwKIAkiJChJTlRESVIpXCQoUFJPR05BTUUpLm9iaiIKIApAQCAtMTY4LDYgKzE3MSw4IEBACiAgICAgJChMSU5LMzIpIEA8PAogICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKIDw8CisgaWYgZXhpc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiBcCisJICAgIG10LmV4ZSAtbWFuaWZlc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6Ii4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIjsxCiAhRUxTRQkjIExpbmt0eXBlIGNoZWNrCiAJLUBlY2hvIC4KIAktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKZGlmZiAtLWdpdCBhL3dpbjMyL01ha2VmaWxlLmluIGIvd2luMzIvTWFrZWZpbGUuaW4KaW5kZXggYjkwODU4Mi4uYmJhNTQ2NCAxMDA2NDQKLS0tIGEvd2luMzIvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvTWFrZWZpbGUuaW4KQEAgLTEwLDE3ICsxMCwxMCBAQAogCiBjbGVhbiA6IGFwcHNfY2xlYW4gbGlic19jbGVhbiBzbm1wdHJhcGRfY2xlYW4gc25tcGRfY2xlYW4gbG9jYWxfY2xlYW4KIAotIUlGICIkKFNESykiID09ICJ0cnVlIgotc25tcGQgOiBzbm1wZHNka18KLXNubXBkX2NsZWFuIDogc25tcGRzZGtfY2xlYW5fCi1uZXRzbm1wbWlicyA6IG5ldHNubXBtaWJzc2RrXwotbmV0c25tcG1pYnNfY2xlYW4gOiBuZXRzbm1wbWlic3Nka19jbGVhbl8KLSFFTFNFCiBzbm1wZCA6IHNubXBkXwogc25tcGRfY2xlYW4gOiBzbm1wZF9jbGVhbl8KIG5ldHNubXBtaWJzIDogbmV0c25tcG1pYnNfCQogbmV0c25tcG1pYnNfY2xlYW4gOiBuZXRzbm1wbWlic19jbGVhbl8KLSFFTkRJRgogCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAic3RhdGljIgogbGlic25tcCA6IGxpYnNubXBfCkBAIC0zMCw4ICsyMyw4IEBACiBsaWJzbm1wX2NsZWFuIDogbGlic25tcF9kbGxfY2xlYW5fCiAhRU5ESUYKIAotbGlicyA6IGxpYmFnZW50IGxpYmhlbHBlcnMgbGlic25tcCBsaWJuZXRzbm1wdHJhcGQgbmV0c25tcG1pYnMgCi1saWJzX2NsZWFuIDogbGliYWdlbnRfY2xlYW4gbGliaGVscGVyc19jbGVhbiBsaWJzbm1wX2NsZWFuIGxpYm5ldHNubXB0cmFwZF9jbGVhbiBuZXRzbm1wbWlic19jbGVhbgorbGlicyA6IGxpYmFnZW50IGxpYnNubXAgbGlibmV0c25tcHRyYXBkIG5ldHNubXBtaWJzIAorbGlic19jbGVhbiA6IGxpYmFnZW50X2NsZWFuIGxpYnNubXBfY2xlYW4gbGlibmV0c25tcHRyYXBkX2NsZWFuIG5ldHNubXBtaWJzX2NsZWFuCiAKIGFwcHMgOiBzbm1wZGYgc25tcHNldCBzbm1wdXNtIHNubXB0ZXN0IHNubXB0cmFwIHNubXB2YWNtIHNubXB3YWxrIHNubXBkZWx0YSBzbm1wdGFibGUgc25tcHN0YXR1cyBzbm1wYnVsa2dldCBzbm1wZ2V0IHNubXBnZXRuZXh0IHNubXBidWxrd2FsayBzbm1wdHJhbnNsYXRlIGVuY29kZV9rZXljaGFuZ2Ugc25tcG5ldHN0YXQKIApAQCAtMTEzLDExICsxMDYsNiBAQAogCSQoTk1BS0UpIGFsbAogCWNkIC4uCiAKLWxpYmhlbHBlcnMgOjoKLQljZCBsaWJoZWxwZXJzCi0JJChOTUFLRSkgYWxsCi0JY2QgLi4KLQogbGlic25tcF8gOjoKIAljZCBsaWJzbm1wCiAJJChOTUFLRSkgYWxsCkBAIC0xMzgsMTEgKzEyNiw2IEBACiAJJChOTUFLRSkgYWxsCiAJY2QgLi4KIAotbmV0c25tcG1pYnNzZGtfIDo6Ci0JY2QgbmV0c25tcG1pYnNzZGsKLQkkKE5NQUtFKSBhbGwKLQljZCAuLgotCiBzbm1wZGYgOjoKIAljZCBzbm1wZGYKIAkkKE5NQUtFKSBhbGwKQEAgLTIzOCwxMSArMjIxLDYgQEAKIAkkKE5NQUtFKSBhbGwKIAljZCAuLgogCi1zbm1wZHNka18gOjoKLQljZCBzbm1wZHNkawotCSQoTk1BS0UpIGFsbAotCWNkIC4uCi0KIHNubXBjb25mIDo6CiAJY2QgbG9jYWwKIAkkKE5NQUtFKSBzbm1wY29uZgpAQCAtMjY3LDExICsyNDUsNiBAQAogCSQoTk1BS0UpIGNsZWFuCiAJY2QgLi4KIAotbGliaGVscGVyc19jbGVhbiA6OgotCWNkIGxpYmhlbHBlcnMKLQkkKE5NQUtFKSBjbGVhbgotCWNkIC4uCi0KIGxpYnNubXBfY2xlYW5fIDo6CiAJY2QgbGlic25tcAogCSQoTk1BS0UpIGNsZWFuCkBAIC0yOTIsMTEgKzI2NSw2IEBACiAJJChOTUFLRSkgY2xlYW4KIAljZCAuLgogCi1uZXRzbm1wbWlic3Nka19jbGVhbl8gOjoKLQljZCBuZXRzbm1wbWlic3NkawotCSQoTk1BS0UpIGNsZWFuCi0JY2QgLi4KLQogc25tcGRmX2NsZWFuIDo6CiAJY2Qgc25tcGRmCiAJJChOTUFLRSkgY2xlYW4KQEAgLTM5MiwxMSArMzYwLDYgQEAKIAkkKE5NQUtFKSBjbGVhbgogCWNkIC4uCiAKLXNubXBkc2RrX2NsZWFuXyA6OgotCWNkIHNubXBkc2RrCi0JJChOTUFLRSkgY2xlYW4KLQljZCAuLgotCiBzbm1wY29uZl9jbGVhbiA6OgogCWNkIGxvY2FsCiAJJChOTUFLRSkgc25tcGNvbmZfY2xlYW4KQEAgLTQyMSwxMSArMzg0LDkgQEAKICAgICAgICAgQC1lY2hvICJhbGwgICAgICAgICAgICAgbGlicyBhcHBzIHNubXB0cmFwZCBzbm1wZCAgICAgICAgICAgICAgICAgICAgICIKICAgICAgICAgQC1lY2hvICJjbGVhbiAgICAgICAgICAgbGlic19jbGVhbiBhcHBzX2NsZWFuIHNubXB0cmFwZF9jbGVhbiAgICAgICAgICIKICAgICAgICAgQC1lY2hvICIgICAgICAgICAgICAgICAgc25tcGRfY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICAgQC1lY2hvICJsaWJzICAgICAgICAgICAgbGliYWdlbnQgbGliaGVscGVycyBsaWJzbm1wIGxpYm5ldHNubXB0cmFwZCAgICIKLSAgICAgICAgQC1lY2hvICIgICAgICAgICAgICAgICAgbmV0c25tcG1pYnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICAgQC1lY2hvICJsaWJzX2NsZWFuICAgICAgbGliYWdlbnRfY2xlYW4gbGliaGVscGVyc19jbGVhbiAgICAgICAgICAgICAgICIKLSAgICAgICAgQC1lY2hvICIgICAgICAgICAgICAgICAgbGlibmV0c25tcHRyYXBkX2NsZWFuIGxpYnNubXBfY2xlYW4gICAgICAgICAgICIKLSAgICAgICAgQC1lY2hvICIgICAgICAgICAgICAgICAgbmV0c25tcG1pYnNfY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgQC1lY2hvICJsaWJzICAgICAgICAgICAgbGliYWdlbnQgbGlic25tcCBsaWJuZXRzbm1wdHJhcGQgbmV0c25tcG1pYnMgICIKKyAgICAgICAgQC1lY2hvICJsaWJzX2NsZWFuICAgICAgbGliYWdlbnRfY2xlYW4gbGlibmV0c25tcHRyYXBkX2NsZWFuICAgICAgICAgICIKKyAgICAgICAgQC1lY2hvICIgICAgICAgICAgICAgICAgbGlic25tcF9jbGVhbiBuZXRzbm1wbWlic19jbGVhbiAgICAgICAgICAgICAgICIKICAgICAgICAgQC1lY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKICAgICAgICAgQC1lY2hvICJhcHBzICAgICAgICAgICAgZW5jb2RlX2tleWNoYW5nZSBzbm1wYnVsa2dldCBzbm1wYnVsa3dhbGsgICAgICIKICAgICAgICAgQC1lY2hvICIgICAgICAgICAgICAgICAgc25tcGRlbHRhIHNubXBkZiBzbm1wZ2V0IHNubXBnZXRuZXh0ICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3dpbjMyL2J1aWxkLnBsIGIvd2luMzIvYnVpbGQucGwKaW5kZXggYTdmOTMzOC4uNDAwN2ZhZSAxMDA2NDQKLS0tIGEvd2luMzIvYnVpbGQucGwKKysrIGIvd2luMzIvYnVpbGQucGwKQEAgLTUsMzIgKzUsNDkgQEAKICMgTWFyY2ggMTJ0aCwgMjAwNAogIwogdXNlIHN0cmljdDsKLW15ICRvcGVuc3NsID0gImRpc2FibGVkIjsKLW15ICRiX2lwdjYgPSAiZGlzYWJsZWQiOwotbXkgJGJfd2luZXh0ZGxsID0gImRpc2FibGVkIjsKLW15ICRzZGsgPSAiZGlzYWJsZWQiOwordXNlIHdhcm5pbmdzOwordXNlIENvbmZpZzsKK3VzZSBDd2QgJ2Fic19wYXRoJzsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBjb25zdGFudCBmYWxzZSA9PiAwOwordXNlIGNvbnN0YW50IHRydWUgPT4gMTsKK215ICR0YXJnZXRfYXJjaCA9ICRFTlZ7VEFSR0VUX0NQVX0gPyAkRU5We1RBUkdFVF9DUFV9IDogJEVOVntQbGF0Zm9ybX0gPworICAgICAgICAgICAgICAgICAgJEVOVntQbGF0Zm9ybX0gOiAieDg2IjsKK2lmICgkdGFyZ2V0X2FyY2ggbmUgIng4NiIgJiYgJHRhcmdldF9hcmNoIG5lICJ4NjQiKSB7CisgICAgcHJpbnQgIkVycm9yOiB1bnN1cHBvcnRlZCB0YXJnZXQgYXJjaGl0ZWN0dXJlICR0YXJnZXRfYXJjaFxuIjsKKyAgICBkaWU7Cit9CitteSBAcGVybF9hcmNoID0gc3BsaXQoLy0vLCAkQ29uZmlne2FyY2huYW1lfSk7CitpZiAoJHBlcmxfYXJjaFsxXSBuZSAkdGFyZ2V0X2FyY2gpIHsKKyAgICBwcmludCAicGVybF9hcmNoID0gJHBlcmxfYXJjaFsxXSBkb2VzIG5vdCBtYXRjaCB0YXJnZXRfYXJjaCA9ICR0YXJnZXRfYXJjaFxuIjsKKyAgICBkaWU7Cit9CitteSAkb3BlbnNzbCA9IGZhbHNlOworbXkgJGRlZmF1bHRfb3BlbnNzbGRpciA9ICR0YXJnZXRfYXJjaCBlcSAieDY0IiA/CisgICAgIkM6XFxPcGVuU1NMLVdpbjY0IiA6ICJDOlxcT3BlblNTTC1XaW4zMiI7CitteSAkZGVmYXVsdF9vcGVuc3NsaW5jZGlyID0gJGRlZmF1bHRfb3BlbnNzbGRpciAuICJcXGluY2x1ZGUiOworbXkgJG9wZW5zc2xpbmNkaXIgPSAkZGVmYXVsdF9vcGVuc3NsaW5jZGlyOworbXkgJGRlZmF1bHRfb3BlbnNzbGxpYmRpciA9ICRkZWZhdWx0X29wZW5zc2xkaXIgLiAiXFxsaWJcXFZDIjsKK215ICRvcGVuc3NsbGliZGlyID0gJGRlZmF1bHRfb3BlbnNzbGxpYmRpcjsKK215ICRiX2lwdjYgPSBmYWxzZTsKK215ICRiX3dpbmV4dGRsbCA9IGZhbHNlOworbXkgJHNkayA9IGZhbHNlOwogbXkgJGRlZmF1bHRfaW5zdGFsbF9iYXNlID0gImM6L3VzciI7CiBteSAkaW5zdGFsbF9iYXNlID0gJGRlZmF1bHRfaW5zdGFsbF9iYXNlOwotbXkgJGluc3RhbGwgPSAiZW5hYmxlZCI7Ci1teSAkaW5zdGFsbF9kZXZlbCA9ICJkaXNhYmxlZCI7Ci1teSAkcGVybCA9ICJkaXNhYmxlZCI7Ci1teSAkcGVybF9pbnN0YWxsID0gImRpc2FibGVkIjsKLW15ICRsb2dnaW5nID0gImVuYWJsZWQiOwotbXkgJGRlYnVnID0gImRpc2FibGVkIjsKK215ICRpbnN0YWxsID0gdHJ1ZTsKK215ICRpbnN0YWxsX2RldmVsID0gZmFsc2U7CitteSAkcGVybCA9IGZhbHNlOworbXkgJHBlcmxfaW5zdGFsbCA9IGZhbHNlOworbXkgJGxvZ2dpbmcgPSB0cnVlOworbXkgJGRlYnVnID0gZmFsc2U7CiBteSAkY29uZmlnT3B0cyA9ICIiOwotbXkgJGxpbmt0eXBlID0gInN0YXRpYyI7CitteSAkbGlua19keW5hbWljID0gZmFsc2U7CiBteSAkb3B0aW9uOwogCi0jIFByZXBlbmQgd2luMzJcIGlmIHJ1bm5pbmcgZnJvbSBtYWluIGRpcmVjdG9yeQotbXkgJGN1cnJlbnRfcHdkID0gYCVDT01TUEVDJSAvYyBjZGA7Ci1jaG9tcCAkY3VycmVudF9wd2Q7Ci1pZiAoISAoJGN1cnJlbnRfcHdkID1+IC9cXHdpbjMyJC8pKSB7Ci0gIGNoZGlyICgid2luMzIiKTsKLSAgJGN1cnJlbnRfcHdkID0gYCVDT01TUEVDJSAvYyBjZGA7Ci0gIGNob21wICRjdXJyZW50X3B3ZDsKLX0KKyMgUGF0aCBvZiB0aGlzIHNjcmlwdCAoc291cmNlIHRyZWUgcGF0aCArICJ3aW4zMiIpLgorbXkgJGN1cnJlbnRfcHdkID0gZGlybmFtZShhYnNfcGF0aCgkMCkpOwogCi1pZiAoIC1kICRFTlZ7TVNWQ0Rpcn0gfHwgLWQgJEVOVntWQ0lOU1RBTExESVJ9KSB7CitpZiAoIC1kICRFTlZ7TVNWQ0Rpcn0gfHwgLWQgJEVOVntWQ0lOU1RBTExESVJ9IHx8IGRlZmluZWQoJEVOVntUQVJHRVRfQ1BVfSkgKSB7CiB9CiBlbHNlIHsKICAgcHJpbnQgIlxuUGxlYXNlIHJ1biBWQ1ZBUlMzMi5CQVQgZmlyc3QgdG8gc2V0IHVwIHRoZSBWaXN1YWwgU3R1ZGlvIGJ1aWxkXG4iIC4KQEAgLTQyLDEzMiArNTksODkgQEAKIHdoaWxlICgxKSB7CiAgIHByaW50ICJcblxuTmV0LVNOTVAgYnVpbGQgYW5kIGluc3RhbGwgb3B0aW9uc1xuIjsKICAgcHJpbnQgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIjsKLSAgcHJpbnQgIjEuICBPcGVuU1NMIHN1cHBvcnQ6ICAgICAgICAgICAgICAgICIgLiAkb3BlbnNzbC4gIlxuIjsKLSAgcHJpbnQgIjIuICBQbGF0Zm9ybSBTREsgc3VwcG9ydDogICAgICAgICAgICIgLiAkc2RrIC4gIlxuIjsKKyAgcHJpbnQgIjEuICBPcGVuU1NMIHN1cHBvcnQ6ICAgICAgICAgICAgICAgICIgLiAoJG9wZW5zc2wgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKS4gIlxuIjsKKyAgcHJpbnQgIjIuICBPcGVuU1NMIGluY2x1ZGUgZGlyZWN0b3J5OiAgICAgICIgLiAkb3BlbnNzbGluY2Rpci4gIlxuIjsKKyAgcHJpbnQgIjMuICBPcGVuU1NMIGxpYnJhcnkgZGlyZWN0b3I6ICAgICAgICIgLiAkb3BlbnNzbGxpYmRpci4gIlxuIjsKKyAgcHJpbnQgIjQuICBQbGF0Zm9ybSBTREsgc3VwcG9ydDogICAgICAgICAgICIgLiAoJHNkayA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKICAgcHJpbnQgIlxuIjsKLSAgcHJpbnQgIjMuICBJbnN0YWxsIHBhdGg6ICAgICAgICAgICAgICAgICAgICIgLiAkaW5zdGFsbF9iYXNlIC4gIlxuIjsKLSAgcHJpbnQgIjQuICBJbnN0YWxsIGFmdGVyIGJ1aWxkOiAgICAgICAgICAgICIgLiAkaW5zdGFsbCAuICJcbiI7CisgIHByaW50ICI1LiAgSW5zdGFsbCBwYXRoOiAgICAgICAgICAgICAgICAgICAiIC4gJGluc3RhbGxfYmFzZSAuICJcbiI7CisgIHByaW50ICI2LiAgSW5zdGFsbCBhZnRlciBidWlsZDogICAgICAgICAgICAiIC4gKCRpbnN0YWxsID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOwogICBwcmludCAiXG4iOwotICBwcmludCAiNS4gIFBlcmwgbW9kdWxlczogICAgICAgICAgICAgICAgICAgIiAuICRwZXJsIC4gIlxuIjsKLSAgcHJpbnQgIjYuICBJbnN0YWxsIHBlcmwgbW9kdWxlczogICAgICAgICAgICIgLiAkcGVybF9pbnN0YWxsIC4gIlxuIjsKKyAgcHJpbnQgIjcuICBQZXJsIG1vZHVsZXM6ICAgICAgICAgICAgICAgICAgICIgLiAoJHBlcmwgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CisgIHByaW50ICI4LiAgSW5zdGFsbCBwZXJsIG1vZHVsZXM6ICAgICAgICAgICAiIC4gKCRwZXJsX2luc3RhbGwgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CiAgIHByaW50ICJcbiI7Ci0gIHByaW50ICI3LiAgUXVpZXQgYnVpbGQgKGxvZ2dlZCk6ICAgICAgICAgICAiIC4gJGxvZ2dpbmcgLiAiXG4iOwotICBwcmludCAiOC4gIERlYnVnIG1vZGU6ICAgICAgICAgICAgICAgICAgICAgIiAuICRkZWJ1ZyAuICJcbiI7CisgIHByaW50ICI5LiAgUXVpZXQgYnVpbGQgKGxvZ2dlZCk6ICAgICAgICAgICAiIC4gKCRsb2dnaW5nID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOworICBwcmludCAiMTAuIERlYnVnIG1vZGU6ICAgICAgICAgICAgICAgICAgICAgIiAuICgkZGVidWcgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CiAgIHByaW50ICJcbiI7Ci0gIHByaW50ICI5LiAgSVB2NiB0cmFuc3BvcnRzIChyZXF1aXJlcyBTREspOiAiIC4gJGJfaXB2NiAuICJcbiI7Ci0gIHByaW50ICIxMC4gd2luRXh0RExMIGFnZW50IChyZXF1aXJlcyBTREspOiAiIC4gJGJfd2luZXh0ZGxsIC4gIlxuIjsKKyAgcHJpbnQgIjExLiBJUHY2IHRyYW5zcG9ydHMgKHJlcXVpcmVzIFNESyk6ICIgLiAoJGJfaXB2NiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKKyAgcHJpbnQgIjEyLiB3aW5FeHRETEwgYWdlbnQgKHJlcXVpcmVzIFNESyk6ICIgLiAoJGJfd2luZXh0ZGxsID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOwogICBwcmludCAiXG4iOwotICBwcmludCAiMTEuIExpbmsgdHlwZTogICAgICAgICAgICAgICAgICAgICAgIiAuICRsaW5rdHlwZSAuICJcbiI7CisgIHByaW50ICIxMy4gTGluayB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAiIC4gKCRsaW5rX2R5bmFtaWMgPyAiZHluYW1pYyIgOiAic3RhdGljIikgLiAiXG4iOwogICBwcmludCAiXG4iOwotICBwcmludCAiMTIuIEluc3RhbGwgZGV2ZWxvcG1lbnQgZmlsZXMgICAgICAgIiAuICRpbnN0YWxsX2RldmVsIC4gIlxuIjsKKyAgcHJpbnQgIjE0LiBJbnN0YWxsIGRldmVsb3BtZW50IGZpbGVzICAgICAgICIgLiAoJGluc3RhbGxfZGV2ZWwgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CiAgIHByaW50ICJcbkYuICBGaW5pc2hlZCAtIHN0YXJ0IGJ1aWxkXG4iOwogICBwcmludCAiUS4gIFF1aXQgLSBhYm9ydCBidWlsZFxuXG4iOwogICBwcmludCAiU2VsZWN0IG9wdGlvbiB0byBzZXQgLyB0b2dnbGU6ICI7CiAKICAgY2hvbXAgKCRvcHRpb24gPSA8Pik7CiAgIGlmICgkb3B0aW9uIGVxICIxIikgewotICAgIGlmICgkb3BlbnNzbCBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRvcGVuc3NsID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkb3BlbnNzbCA9ICJlbmFibGVkIjsKLSAgICB9CisgICAgJG9wZW5zc2wgPSAhJG9wZW5zc2w7CiAgIH0KICAgZWxzaWYgKCRvcHRpb24gZXEgIjIiKSB7Ci0gICAgaWYgKCRzZGsgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkc2RrID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkc2RrID0gImVuYWJsZWQiOwotICAgIH0KLSAgfQotICBlbHNpZiAoJG9wdGlvbiBlcSAiOSIpIHsKLSAgICBpZiAoJGJfaXB2NiBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRiX2lwdjYgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRiX2lwdjYgPSAiZW5hYmxlZCI7Ci0gICAgICBpZiAoJHNkayA9ICJkaXNhYmxlZCIpIHsKLSAgICAgICAgcHJpbnQgIlxuXG4qIFNESyByZXF1aXJlZCBmb3IgSVB2NiBhbmQgaGFzIGJlZW4gYXV0b21hdGljYWxseSBlbmFibGVkIjsKLSAgICAgICAgJHNkayA9ICJlbmFibGVkIjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgZWxzaWYgKCRvcHRpb24gZXEgIjEwIikgewotICAgIGlmICgkYl93aW5leHRkbGwgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkYl93aW5leHRkbGwgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRiX3dpbmV4dGRsbCA9ICJlbmFibGVkIjsKLSAgICAgIGlmICgkc2RrID0gImRpc2FibGVkIikgewotICAgICAgICBwcmludCAiXG5cbiogU0RLIHJlcXVpcmVkIGZvciBJUHY2IGFuZCBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGVuYWJsZWQiOwotICAgICAgICAkc2RrID0gImVuYWJsZWQiOwotICAgICAgfQotICAgIH0KKyAgICBwcmludCAiUGxlYXNlIGVudGVyIHRoZSBPcGVuU1NMIGluY2x1ZGUgZGlyZWN0b3J5IFskb3BlbnNzbGluY2Rpcl06ICI7CisgICAgY2hvbXAgKCRvcGVuc3NsaW5jZGlyID0gPD4pOworICAgICRvcGVuc3NsaW5jZGlyID1+IHMvXFwvXC8vZzsKKyAgICAkb3BlbnNzbGluY2RpciA9ICRkZWZhdWx0X29wZW5zc2xpbmNkaXIgaWYgKCRvcGVuc3NsaW5jZGlyIGVxICIiKTsKICAgfQogICBlbHNpZiAoJG9wdGlvbiBlcSAiMyIpIHsKLSAgICBwcmludCAiUGxlYXNlIGVudGVyIHRoZSBuZXcgaW5zdGFsbCBwYXRoIFskZGVmYXVsdF9pbnN0YWxsX2Jhc2VdOiAiOwotICAgIGNob21wICgkaW5zdGFsbF9iYXNlID0gPD4pOwotICAgIGlmICgkaW5zdGFsbF9iYXNlIGVxICIiKSB7Ci0gICAgICAkaW5zdGFsbF9iYXNlID0gJGRlZmF1bHRfaW5zdGFsbF9iYXNlOwotICAgIH0KLSAgICAkaW5zdGFsbF9iYXNlID1+IHMvXFwvXC8vZzsKKyAgICBwcmludCAiUGxlYXNlIGVudGVyIHRoZSBPcGVuU1NMIGxpYnJhcnkgZGlyZWN0b3J5IFskb3BlbnNzbGxpYmRpcl06ICI7CisgICAgY2hvbXAgKCRvcGVuc3NsbGliZGlyID0gPD4pOworICAgICRvcGVuc3NsbGliZGlyID1+IHMvXFwvXC8vZzsKKyAgICAkb3BlbnNzbGxpYmRpciA9ICRkZWZhdWx0X29wZW5zc2xsaWJkaXIgaWYgKCRvcGVuc3NsbGliZGlyIGVxICIiKTsKICAgfQogICBlbHNpZiAoJG9wdGlvbiBlcSAiNCIpIHsKLSAgICBpZiAoJGluc3RhbGwgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkaW5zdGFsbCA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJGluc3RhbGwgPSAiZW5hYmxlZCI7CisgICAgJHNkayA9ICEkc2RrOworICB9CisgIGVsc2lmICgkb3B0aW9uIGVxICIxMSIpIHsKKyAgICAkYl9pcHY2ID0gISRiX2lwdjY7CisgICAgaWYgKCRiX2lwdjYgJiYgISRzZGspIHsKKyAgICAgIHByaW50ICJcblxuKiBTREsgcmVxdWlyZWQgZm9yIElQdjYgYW5kIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCI7CisgICAgICAkc2RrID0gdHJ1ZTsKICAgICB9CiAgIH0KICAgZWxzaWYgKCRvcHRpb24gZXEgIjEyIikgewotICAgIGlmICgkaW5zdGFsbF9kZXZlbCBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRpbnN0YWxsX2RldmVsID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkaW5zdGFsbF9kZXZlbCA9ICJlbmFibGVkIjsKKyAgICAkYl93aW5leHRkbGwgPSAhJGJfd2luZXh0ZGxsOworICAgIGlmICgkYl93aW5leHRkbGwgJiYgISRzZGspIHsKKyAgICAgIHByaW50ICJcblxuKiBTREsgcmVxdWlyZWQgZm9yIElQdjYgYW5kIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCI7CisgICAgICAkc2RrID0gdHJ1ZTsKICAgICB9CiAgIH0KICAgZWxzaWYgKCRvcHRpb24gZXEgIjUiKSB7Ci0gICAgaWYgKCRwZXJsIGVxICJlbmFibGVkIikgewotICAgICAgJHBlcmwgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRwZXJsID0gImVuYWJsZWQiOwotICAgIH0KKyAgICBwcmludCAiUGxlYXNlIGVudGVyIHRoZSBuZXcgaW5zdGFsbCBwYXRoIFskZGVmYXVsdF9pbnN0YWxsX2Jhc2VdOiAiOworICAgIGNob21wICgkaW5zdGFsbF9iYXNlID0gPD4pOworICAgICRpbnN0YWxsX2Jhc2UgPX4gcy9cXC9cLy9nOworICAgICRpbnN0YWxsX2Jhc2UgPSAkZGVmYXVsdF9pbnN0YWxsX2Jhc2UgaWYgKCRpbnN0YWxsX2Jhc2UgZXEgIiIpOwogICB9CiAgIGVsc2lmICgkb3B0aW9uIGVxICI2IikgewotICAgIGlmICgkcGVybF9pbnN0YWxsIGVxICJlbmFibGVkIikgewotICAgICAgJHBlcmxfaW5zdGFsbCA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJHBlcmxfaW5zdGFsbCA9ICJlbmFibGVkIjsKLSAgICB9CisgICAgJGluc3RhbGwgPSAhJGluc3RhbGw7CisgIH0KKyAgZWxzaWYgKCRvcHRpb24gZXEgIjE0IikgeworICAgICRpbnN0YWxsX2RldmVsID0gISRpbnN0YWxsX2RldmVsOwogICB9CiAgIGVsc2lmICgkb3B0aW9uIGVxICI3IikgewotICAgIGlmICgkbG9nZ2luZyBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRsb2dnaW5nID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkbG9nZ2luZyA9ICJlbmFibGVkIjsKLSAgICB9CisgICAgJHBlcmwgPSAhJHBlcmw7CiAgIH0KICAgZWxzaWYgKCRvcHRpb24gZXEgIjgiKSB7Ci0gICAgaWYgKCRkZWJ1ZyBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRkZWJ1ZyA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJGRlYnVnID0gImVuYWJsZWQiOwotICAgIH0KKyAgICAkcGVybF9pbnN0YWxsID0gISRwZXJsX2luc3RhbGw7CiAgIH0KLSAgZWxzaWYgKCRvcHRpb24gZXEgIjExIikgewotICAgIGlmICgkbGlua3R5cGUgZXEgInN0YXRpYyIpIHsKLSAgICAgICRsaW5rdHlwZSA9ICJkeW5hbWljIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkbGlua3R5cGUgPSAic3RhdGljIjsKLSAgICB9CisgIGVsc2lmICgkb3B0aW9uIGVxICI5IikgeworICAgICRsb2dnaW5nID0gISRsb2dnaW5nOworICB9CisgIGVsc2lmICgkb3B0aW9uIGVxICIxMCIpIHsKKyAgICAkZGVidWcgPSAhJGRlYnVnOworICB9CisgIGVsc2lmICgkb3B0aW9uIGVxICIxMyIpIHsKKyAgICAkbGlua19keW5hbWljID0gISRsaW5rX2R5bmFtaWM7CiAgIH0KICAgZWxzaWYgKGxjKCRvcHRpb24pIGVxICJmIikgewogICAgIGxhc3Q7CkBAIC0xNzcsMTUgKzE1MSwxNiBAQAogICB9CiB9CiAKLSRjb25maWdPcHRzIC49ICRvcGVuc3NsIGVxICJlbmFibGVkIiA/ICItLXdpdGgtc3NsIiA6ICIiOworbXkgJGxpbmt0eXBlID0gJGxpbmtfZHluYW1pYyA/ICJkeW5hbWljIiA6ICJzdGF0aWMiOworJGNvbmZpZ09wdHMgLj0gJG9wZW5zc2wgPyAiLS13aXRoLXNzbCIgOiAiIjsKICRjb25maWdPcHRzIC49ICIgIjsKLSRjb25maWdPcHRzIC49ICRzZGsgZXEgImVuYWJsZWQiID8gIi0td2l0aC1zZGsiIDogIiI7CiskY29uZmlnT3B0cyAuPSAkc2RrID8gIi0td2l0aC1zZGsiIDogIiI7CiAkY29uZmlnT3B0cyAuPSAiICI7Ci0kY29uZmlnT3B0cyAuPSAkYl9pcHY2IGVxICJlbmFibGVkIiA/ICItLXdpdGgtaXB2NiIgOiAiIjsKKyRjb25maWdPcHRzIC49ICRiX2lwdjYgPyAiLS13aXRoLWlwdjYiIDogIiI7CiAkY29uZmlnT3B0cyAuPSAiICI7Ci0kY29uZmlnT3B0cyAuPSAkYl93aW5leHRkbGwgZXEgImVuYWJsZWQiID8gIi0td2l0aC13aW5leHRkbGwiIDogIiI7CiskY29uZmlnT3B0cyAuPSAkYl93aW5leHRkbGwgPyAiLS13aXRoLXdpbmV4dGRsbCIgOiAiIjsKICRjb25maWdPcHRzIC49ICIgIjsKLSRjb25maWdPcHRzIC49ICRkZWJ1ZyBlcSAiZW5hYmxlZCIgPyAiLS1jb25maWc9ZGVidWciIDogIi0tY29uZmlnPXJlbGVhc2UiOworJGNvbmZpZ09wdHMgLj0gJGRlYnVnID8gIi0tY29uZmlnPWRlYnVnIiA6ICItLWNvbmZpZz1yZWxlYXNlIjsKIAogIyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAKQEAgLTE5MywxNDMgKzE2OCw5NCBAQAogJEVOVntOT19FWFRFUk5BTF9ERVBTfT0iMSI7CiAKICMgU2V0IFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgc28gUGVybCBtYWtlIHRlc3RzIGNhbiBsb2NhdGUgdGhlIERMTAotJEVOVntQQVRIfSA9ICIkY3VycmVudF9wd2RcXGJpblxcIiAuICgkZGVidWcgZXEgImVuYWJsZWQiID8gImRlYnVnIiA6ICJyZWxlYXNlIiApIC4gIjskRU5We1BBVEh9IjsKKyRFTlZ7UEFUSH0gPSAiJGN1cnJlbnRfcHdkXFxiaW5cXCIgLiAoJGRlYnVnID8gImRlYnVnIiA6ICJyZWxlYXNlIiApIC4gIjskRU5We1BBVEh9IjsKKworJEVOVntJTkNMVURFfSAuPSAiOyRvcGVuc3NsaW5jZGlyIjsKKyRFTlZ7TElCfSAgICAgLj0gIjskb3BlbnNzbGxpYmRpciI7CiAKICMgU2V0IE1JQkRJUlMgZW52aXJvbm1lbnQgdmFyaWFibGUgc28gUGVybCBtYWtlIHRlc3RzIGNhbiBsb2NhdGUgdGhlIG1pYnMKLW15ICR0ZW1wX21pYmRpciA9ICIkY3VycmVudF9wd2QvLi4vbWlicyI7Ci0kdGVtcF9taWJkaXIgPX4gcy9cXC9cLy9nOwotJEVOVntNSUJESVJTfT0kdGVtcF9taWJkaXI7CiskRU5We01JQkRJUlN9ID0gZGlybmFtZSgkY3VycmVudF9wd2QpIC4gIi9taWJzIjsKIAogIyBTZXQgU05NUENPTkZQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIFBlcmwgY29uZi50IHRlc3QgY2FuIGxvY2F0ZQogIyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KICMgU2VlIHRoZSBub3RlIGFib3V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgV2luMzIgc2VjdGlvbiBvZgogIyBwZXJsL1NOTVAvUkVBRE1FIGZvciBkZXRhaWxzIG9uIHdoeSB0aGlzIGlzIG5lZWRlZC4KLSRFTlZ7U05NUENPTkZQQVRIfT0idCI7JEVOVntTTk1QQ09ORlBBVEh9OworJEVOVntTTk1QQ09ORlBBVEh9PSJ0IjsKIAogcHJpbnQgIlxuQnVpbGRpbmcuLi5cbiI7CiAKLWlmICgkbG9nZ2luZyBlcSAiZW5hYmxlZCIpIHsKLSAgcHJpbnQgIlxuQ3JlYXRpbmcgKi5vdXQgbG9nIGZpbGVzLlxuXG4iOworcHJpbnQgIlxuQ3JlYXRpbmcgKi5vdXQgbG9nIGZpbGVzLlxuXG4iOworCitwcmludCAiRGVsZXRpbmcgb2xkIGxvZyBmaWxlcy4uLlxuIjsKK3N5c3RlbSgiZGVsICoub3V0IiAuICgkbG9nZ2luZyA/ICIgPiBOVUw6IDI+JjEiIDogIiIpKTsKKworIyBEZWxldGUgbmV0LXNubXAtY29uZmlnLmggZnJvbSBtYWluIGluY2x1ZGUgZm9sZGVyIGp1c3QgaW4gY2FzZSBpdCB3YXMgY3JlYXRlZCBieSBhIEN5Z3dpbiBvciBNaW5HVyBidWlsZAordW5saW5rICIuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIjsKK3VubGluayAiLi4vc25tcGxpYi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmgiOworCitwcmludCAiUnVubmluZyBDb25maWd1cmUuLi5cbiI7CitzeXN0ZW0oInBlcmwgQ29uZmlndXJlICRjb25maWdPcHRzIC0tbGlua3R5cGU9JGxpbmt0eXBlIC0tcHJlZml4PVwiJGluc3RhbGxfYmFzZVwiIiAuICgkbG9nZ2luZyA/ICIgPiBjb25maWd1cmUub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBjb25maWd1cmUub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKKworcHJpbnQgIkNsZWFuaW5nLi4uXG4iOworc3lzdGVtKCJubWFrZSAvbm9sb2dvIGNsZWFuIiAuICgkbG9nZ2luZyA/ICIgPiBjbGVhbi5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIGNsZWFuLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CisKK3ByaW50ICJCdWlsZGluZyBtYWluIHBhY2thZ2UuLi5cbiI7CitzeXN0ZW0oIm5tYWtlIC9ub2xvZ28iIC4gKCRsb2dnaW5nID8gIiA+IG1ha2Uub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBtYWtlLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CisKK2lmICgkcGVybCkgeworICBpZiAoISRsaW5rX2R5bmFtaWMpIHsKKyAgICBwcmludCAiUnVubmluZyBDb25maWd1cmUgZm9yIERMTC4uLlxuIjsKKyAgICBzeXN0ZW0oInBlcmwgQ29uZmlndXJlICRjb25maWdPcHRzIC0tbGlua3R5cGU9ZHluYW1pYyAtLXByZWZpeD1cIiRpbnN0YWxsX2Jhc2VcIiIgLiAoJGxvZ2dpbmcgPyAiID4gcGVybGNvbmZpZ3VyZS5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIHBlcmxjb25maWd1cmUub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKKworICAgIHByaW50ICJDbGVhbmluZyBsaWJyYXJpZXMuLi5cbiI7CisgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGxpYnNfY2xlYW4iIC4gKCRsb2dnaW5nID8gIiA+PiBjbGVhbi5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIGNsZWFuLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CisKKyAgICBwcmludCAiQnVpbGRpbmcgRExMIGxpYnJhcmllcy4uLlxuIjsKKyAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gbGlicyIgLiAoJGxvZ2dpbmcgPyAiID4gZGxsLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgZGxsLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CisgIH0KKworICBwcmludCAiQ2xlYW5pbmcgUGVybC4uLi5cbiI7CisgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX2NsZWFuIiAuICgkbG9nZ2luZyA/ICIgPj4gY2xlYW4ub3V0IDI+JjEiIDogIiIpKTsgIyBJZiBhbHJlYWR5IGNsZWFuZWQsIE1ha2VmaWxlIGlzIGdvbmUgc28gZG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzIQorCisgIHByaW50ICJCdWlsZGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7CisgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsIiAuICgkbG9nZ2luZyA/ICIgPiBwZXJsbWFrZS5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIHBlcmxtYWtlLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CisKKyAgcHJpbnQgIlRlc3RpbmcgUGVybCBtb2R1bGVzLi4uXG4iOworICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF90ZXN0IiAuICgkbG9nZ2luZyA/ICIgPiBwZXJsdGVzdC5vdXQgMj4mMSIgOiAiIikpOyAjIERvbid0IGRpZSBpZiBhbGwgdGhlIHRlc3RzIGRvbid0IHBhc3MuLgorCisgIGlmICgkcGVybF9pbnN0YWxsKSB7CisgICAgcHJpbnQgIkluc3RhbGxpbmcgUGVybCBtb2R1bGVzLi4uXG4iOworICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX2luc3RhbGwiIC4gKCRsb2dnaW5nID8gIiA+IHBlcmxpbnN0YWxsLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgcGVybGluc3RhbGwub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKKyAgfQorCisgIHByaW50ICJcblNlZSBwZXJsdGVzdC5vdXQgZm9yIFBlcmwgdGVzdCByZXN1bHRzXG4iOwogfQogCi1pZiAoJGxvZ2dpbmcgZXEgImVuYWJsZWQiKSB7Ci0gIHByaW50ICJEZWxldGluZyBvbGQgbG9nIGZpbGVzLi4uXG4iOwotICBzeXN0ZW0oImRlbCAqLm91dCA+IE5VTDogMj4mMSIpOwotCi0gICMgRGVsZXRlIG5ldC1zbm1wLWNvbmZpZy5oIGZyb20gbWFpbiBpbmNsdWRlIGZvbGRlciBqdXN0IGluIGNhc2UgaXQgd2FzIGNyZWF0ZWQgYnkgYSBDeWd3aW4gb3IgTWluR1cgYnVpbGQKLSAgc3lzdGVtKCJkZWwgLi5cXGluY2x1ZGVcXG5ldC1zbm1wXFxuZXQtc25tcC1jb25maWcuaCA+IE5VTDogMj4mMSIpOwotCi0gIHByaW50ICJSdW5uaW5nIENvbmZpZ3VyZS4uLlxuIjsKLSAgc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAkY29uZmlnT3B0cyAtLWxpbmt0eXBlPSRsaW5rdHlwZSAtLXByZWZpeD1cIiRpbnN0YWxsX2Jhc2VcIiA+IGNvbmZpZ3VyZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGNvbmZpZ3VyZS5vdXQpIjsKLQotICBwcmludCAiQ2xlYW5pbmcuLi5cbiI7Ci0gIHN5c3RlbSgibm1ha2UgL25vbG9nbyBjbGVhbiA+IGNsZWFuLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgY2xlYW4ub3V0KSI7Ci0KLSAgcHJpbnQgIkJ1aWxkaW5nIG1haW4gcGFja2FnZS4uLlxuIjsKLSAgc3lzdGVtKCJubWFrZSAvbm9sb2dvID4gbWFrZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIG1ha2Uub3V0KSI7Ci0KLSAgaWYgKCRwZXJsIGVxICJlbmFibGVkIikgewotICAgIGlmICgkbGlua3R5cGUgZXEgInN0YXRpYyIpIHsKLSAgICAgIHByaW50ICJSdW5uaW5nIENvbmZpZ3VyZSBmb3IgRExMLi4uXG4iOwotICAgICAgc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAkY29uZmlnT3B0cyAtLWxpbmt0eXBlPWR5bmFtaWMgLS1wcmVmaXg9XCIkaW5zdGFsbF9iYXNlXCIgPiBwZXJsY29uZmlndXJlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgcGVybGNvbmZpZ3VyZS5vdXQpIjsKLQotICAgICAgcHJpbnQgIkNsZWFuaW5nIGxpYnJhcmllcy4uLlxuIjsKLSAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBsaWJzX2NsZWFuID4+IGNsZWFuLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgY2xlYW4ub3V0KSI7Ci0KLSAgICAgIHByaW50ICJCdWlsZGluZyBETEwgbGlicmFyaWVzLi4uXG4iOwotICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGxpYnMgPiBkbGwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBkbGwub3V0KSI7Ci0gICAgfQotCi0gICAgcHJpbnQgIkNsZWFuaW5nIFBlcmwuLi4uXG4iOwotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX2NsZWFuID4+IGNsZWFuLm91dCAyPiYxIik7ICMgSWYgYWxyZWFkeSBjbGVhbmVkLCBNYWtlZmlsZSBpcyBnb25lIHNvIGRvbid0IHdvcnJ5IGFib3V0IGVycm9ycyEKLQotICAgIHByaW50ICJCdWlsZGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7Ci0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmwgPiBwZXJsbWFrZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIHBlcmxtYWtlLm91dCkiOwotCi0gICAgcHJpbnQgIlRlc3RpbmcgUGVybCBtb2R1bGVzLi4uXG4iOwotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX3Rlc3QgPiBwZXJsdGVzdC5vdXQgMj4mMSIpOyAjIERvbid0IGRpZSBpZiBhbGwgdGhlIHRlc3RzIGRvbid0IHBhc3MuLgotCi0gICAgaWYgKCRwZXJsX2luc3RhbGwgZXEgImVuYWJsZWQiKSB7Ci0gICAgICBwcmludCAiSW5zdGFsbGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7Ci0gICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF9pbnN0YWxsID4gcGVybGluc3RhbGwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsaW5zdGFsbC5vdXQpIjsKLSAgICB9Ci0KLSAgICBwcmludCAiXG5TZWUgcGVybHRlc3Qub3V0IGZvciBQZXJsIHRlc3QgcmVzdWx0c1xuIjsKLSAgfQotCi0gIHByaW50ICJcbiI7Ci0gIGlmICgkaW5zdGFsbCBlcSAiZW5hYmxlZCIpIHsKLSAgICBwcmludCAiSW5zdGFsbGluZyBtYWluIHBhY2thZ2UuLi5cbiI7Ci0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGluc3RhbGwgPiBpbnN0YWxsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgaW5zdGFsbC5vdXQpIjsKLSAgfQotICBlbHNlIHsKLSAgICBwcmludCAiVHlwZSBubWFrZSBpbnN0YWxsIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgdG8gJGluc3RhbGxfYmFzZVxuIjsKLSAgfQotCi0gIGlmICgkaW5zdGFsbF9kZXZlbCBlcSAiZW5hYmxlZCIpIHsKLSAgICBwcmludCAiSW5zdGFsbGluZyBkZXZlbG9wbWVudCBmaWxlcy4uLlxuIjsKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gaW5zdGFsbF9kZXZlbCA+IGluc3RhbGxfZGV2ZWwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBpbnN0YWxsX2RldmVsLm91dCkiOwotICB9Ci0gIGVsc2UgewotICAgIHByaW50ICJUeXBlIG5tYWtlIGluc3RhbGxfZGV2ZWwgdG8gaW5zdGFsbCB0aGUgZGV2ZWxvcG1lbnQgZmlsZXMgdG8gJGluc3RhbGxfYmFzZVxuIjsKLSAgfQotCi0gIGlmICgkcGVybF9pbnN0YWxsIGVxICJkaXNhYmxlZCIgJiYgJHBlcmwgZXEgImVuYWJsZWQiKSB7Ci0gICAgcHJpbnQgIlR5cGUgbm1ha2UgcGVybF9pbnN0YWxsIHRvIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlc1xuIjsKLSAgfQorcHJpbnQgIlxuIjsKK2lmICgkaW5zdGFsbCkgeworICBwcmludCAiSW5zdGFsbGluZyBtYWluIHBhY2thZ2UuLi5cbiI7CisgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBpbnN0YWxsIiAuICgkbG9nZ2luZyA/ICIgPiBpbnN0YWxsLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgaW5zdGFsbC5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOwogfQogZWxzZSB7Ci0gIHN5c3RlbSgiZGVsICoub3V0Iik7CisgIHByaW50ICJUeXBlIG5tYWtlIGluc3RhbGwgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSB0byAkaW5zdGFsbF9iYXNlXG4iOworfQogCi0gICMgRGVsZXRlIG5ldC1zbm1wLWNvbmZpZy5oIGZyb20gbWFpbiBpbmNsdWRlIGZvbGRlciBqdXN0IGluIGNhc2UgaXQgd2FzIGNyZWF0ZWQgYnkgYSBDeWd3aW4gb3IgTWluR1cgYnVpbGQKLSAgc3lzdGVtKCJkZWwgLi5cXGluY2x1ZGVcXG5ldC1zbm1wXFxuZXQtc25tcC1jb25maWcuaCA+IE5VTDogMj4mMSIpOworaWYgKCRpbnN0YWxsX2RldmVsKSB7CisgIHByaW50ICJJbnN0YWxsaW5nIGRldmVsb3BtZW50IGZpbGVzLi4uXG4iOworICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gaW5zdGFsbF9kZXZlbCA+IGluc3RhbGxfZGV2ZWwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBpbnN0YWxsX2RldmVsLm91dCkiOworfQorZWxzZSB7CisgIHByaW50ICJUeXBlIG5tYWtlIGluc3RhbGxfZGV2ZWwgdG8gaW5zdGFsbCB0aGUgZGV2ZWxvcG1lbnQgZmlsZXMgdG8gJGluc3RhbGxfYmFzZVxuIjsKK30KIAotICBzeXN0ZW0oInBlcmwgQ29uZmlndXJlICRjb25maWdPcHRzIC0tbGlua3R5cGU9JGxpbmt0eXBlIC0tcHJlZml4PVwiJGluc3RhbGxfYmFzZVwiIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLSAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGNsZWFuIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLSAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLQotICBpZiAoJHBlcmwgZXEgImVuYWJsZWQiKSB7Ci0gICAgaWYgKCRsaW5rdHlwZSBlcSAic3RhdGljIikgewotICAgICAgc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAkY29uZmlnT3B0cyAtLWxpbmt0eXBlPWR5bmFtaWMgLS1wcmVmaXg9XCIkaW5zdGFsbF9iYXNlXCIiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGxpYnNfY2xlYW4iKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGxpYnMiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotICAgIH0KLQotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX2NsZWFuIik7ICMgSWYgYWxyZWFkeSBjbGVhbmVkLCBNYWtlZmlsZSBpcyBnb25lIHNvIGRvbid0IHdvcnJ5IGFib3V0IGVycm9ycyEKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybCIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0KLSAgICBteSAkcGF0aF9vbGQgPSAkRU5We1BBVEh9OwotICAgICRFTlZ7UEFUSH0gPSAiJGN1cnJlbnRfcHdkXFxiaW5cXCIgLiAoJGRlYnVnIGVxICJlbmFibGVkIiA/ICJkZWJ1ZyIgOiAicmVsZWFzZSIgKSAuICI7JEVOVntQQVRIfSI7Ci0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfdGVzdCIpOyAjIERvbid0IGRpZSBpZiBhbGwgdGhlIHRlc3RzIGRvbid0IHBhc3MuLgotICAgICRFTlZ7UEFUSH0gPSAkcGF0aF9vbGQ7Ci0KLSAgICBpZiAoJHBlcmxfaW5zdGFsbCBlcSAiZW5hYmxlZCIpIHsKLSAgICAgIHByaW50ICJJbnN0YWxsaW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKLSAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX2luc3RhbGwiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotICAgIH0KLSAgfQotCi0gIHByaW50ICJcbiI7Ci0gIGlmICgkaW5zdGFsbCBlcSAiZW5hYmxlZCIpIHsKLSAgICBwcmludCAiSW5zdGFsbGluZyBtYWluIHBhY2thZ2UuLi5cbiI7Ci0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGluc3RhbGwiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotICB9Ci0gIGVsc2UgewotICAgIHByaW50ICJUeXBlIG5tYWtlIGluc3RhbGwgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSB0byAkaW5zdGFsbF9iYXNlXG4iOwotICB9Ci0KLSAgaWYgKCRpbnN0YWxsX2RldmVsIGVxICJlbmFibGVkIikgewotICAgIHByaW50ICJJbnN0YWxsaW5nIGRldmVsb3BtZW50IGZpbGVzLi4uXG4iOwotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBpbnN0YWxsX2RldmVsID4gaW5zdGFsbF9kZXZlbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGluc3RhbGxfZGV2ZWwub3V0KSI7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgcHJpbnQgIlR5cGUgbm1ha2UgaW5zdGFsbF9kZXZlbCB0byBpbnN0YWxsIHRoZSBkZXZlbG9wbWVudCBmaWxlcyB0byAkaW5zdGFsbF9iYXNlXG4iOwotICB9Ci0KLSAgaWYgKCRwZXJsX2luc3RhbGwgZXEgImRpc2FibGVkIiAmJiAkcGVybCBlcSAiZW5hYmxlZCIpIHsKLSAgICBwcmludCAiVHlwZSBubWFrZSBwZXJsX2luc3RhbGwgdG8gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzXG4iOwotICB9CitpZiAoJHBlcmwgJiYgISRwZXJsX2luc3RhbGwpIHsKKyAgcHJpbnQgIlR5cGUgbm1ha2UgcGVybF9pbnN0YWxsIHRvIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlc1xuIjsKIH0KIAogcHJpbnQgIlxuRG9uZSFcbiI7CiAKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBwZXJsCisjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIGluZGVudC10YWJzLW1vZGU6IG5pbAorIyBFbmQ6CmRpZmYgLS1naXQgYS93aW4zMi9jb25maWcuaCBiL3dpbjMyL2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDFjYjlhLi4wMDAwMDAwCi0tLSBhL3dpbjMyL2NvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vKgotICogRXZlcnlvbmUgc2hvdWxkIGJlIGluY2x1ZGluZyB0aGUgbmV3IHN0eWxlIGNvbmZpZyBoZWFkZXIuCi0gKiBGb3Igbm93LCB3ZSdsbCBkbyBpdCBmb3IgdGhlbSBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkuCi0gKi8KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KZGlmZiAtLWdpdCBhL3dpbjMyL2NvbmZpZy5oLmJvcmxhbmQgYi93aW4zMi9jb25maWcuaC5ib3JsYW5kCmluZGV4IDNhZWY2YmIuLjQ3ZTFiMDcgMTAwNjQ0Ci0tLSBhL3dpbjMyL2NvbmZpZy5oLmJvcmxhbmQKKysrIGIvd2luMzIvY29uZmlnLmguYm9ybGFuZApAQCAtMTY0LDkgKzE2NCw2IEBACiAvKiBJZiB5b3UgZG9uJ3QgaGF2ZSByb290IGFjY2VzcyBkb24ndCBleGl0IHVwb24ga21lbSBlcnJvcnMgKi8KICN1bmRlZiBORVRTTk1QX05PX1JPT1RfQUNDRVNTCiAKLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYmNvcHkgZnVuY3Rpb24uICAqLwotI3VuZGVmIEhBVkVfQkNPUFkKLQogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lIGZ1bmN0aW9uLiAgKi8KICNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKIApAQCAtMTg1LDIxICsxODIsMTIgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdnNucHJpbnRmIGZ1bmN0aW9uLiAgKi8KICNkZWZpbmUgSEFWRV9WU05QUklOVEYgMQogCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGluZGV4IGZ1bmN0aW9uLiAgKi8KLSN1bmRlZiBIQVZFX0lOREVYCi0KIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUga3ZtX29wZW5maWxlcyBmdW5jdGlvbi4gICovCiAjdW5kZWYgSEFWRV9LVk1fT1BFTkZJTEVTCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbHJhbmQ0OCBmdW5jdGlvbi4gICovCiAjdW5kZWYgSEFWRV9MUkFORDQ4CiAKLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbWVtY3B5IGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUgSEFWRV9NRU1DUFkgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIG1lbW1vdmUgZnVuY3Rpb24uICAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUgMQotCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJhbmQgZnVuY3Rpb24uICAqLwogI2RlZmluZSBIQVZFX1JBTkQgMQogCkBAIC0yMzksOSArMjI3LDYgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RhdHZmcyBmdW5jdGlvbi4gICovCiAjdW5kZWYgSEFWRV9TVEFUVkZTCiAKLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2hyIGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUgSEFWRV9TVFJDSFIgMQotCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmNhc2VjbXAgZnVuY3Rpb24gKi8KICNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKIApAQCAtNDkxLDkgKzQ3Niw2IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGtzdGF0IGxpYnJhcnkgKC1sa3N0YXQpLiAgKi8KICN1bmRlZiBIQVZFX0xJQktTVEFUCiAKLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUga3ZtIGxpYnJhcnkgKC1sa3ZtKS4gICovCi0jdW5kZWYgSEFWRV9MSUJLVk0KLQogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtIGxpYnJhcnkgKC1sbSkuICAqLwogI3VuZGVmIEhBVkVfTElCTQogCkBAIC01NDMsOSArNTI1LDYgQEAKIC8qIHR5cGUgY2hlY2sgZm9yIGluX2FkZHJfdCAqLwogI2RlZmluZSBpbl9hZGRyX3QgdV9sb25nCiAKLS8qIGRlZmluZSBpZiB5b3VyIGNvbXBpbGVyIChwcm9jZXNzb3IpIGRlZmluZXMgX19GVU5DVElPTl9fIGZvciB5b3UgKi8KLSN1bmRlZiBIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVECi0KIC8qIG1pYiBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIGV4dGVuc2libGUgdHJlZS4gIFRoaXMgaGFzIGJlZW4KICBhc3NpZ25lZCB0byBVQ0RhdmlzIGJ5IHRoZSBpYW5hIGdyb3VwLiAgT3B0aW9uYWxseSwgcG9pbnQgdGhpcyB0byB0aGUKICBsb2NhdGlvbiBpbiB0aGUgdHJlZSB5b3VyIGNvbXBhbnkvb3JnYW5pemF0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZC4gKi8KQEAgLTczMiw0MyArNzExLDYgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3IgZnVuY3Rpb24uICAqLwogI2RlZmluZSBIQVZFX1NUUkVSUk9SIDEKIAotI2lmbmRlZiBIQVZFX1NUUkNIUgotI2lmZGVmIEhBVkVfSU5ERVgKLSMgZGVmaW5lIHN0cmNociBpbmRleAotIyBkZWZpbmUgc3RycmNociByaW5kZXgKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9JTkRFWAotI2lmZGVmIEhBVkVfU1RSQ0hSCi0jIGRlZmluZSBpbmRleCBzdHJjaHIKLSMgZGVmaW5lIHJpbmRleCBzdHJyY2hyCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNQ1BZCi0jaWZkZWYgSEFWRV9CQ09QWQotIyBkZWZpbmUgbWVtY3B5KGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtbW92ZShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbWNtcCBiY21wCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNTU9WRQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBtZW1tb3ZlIG1lbWNweQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0JDT1BZCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIGJjb3B5KHMsIGQsIG4pIG1lbWNweSAoKGQpLCAocyksIChuKSkKLSMgZGVmaW5lIGJ6ZXJvKHAsbikgbWVtc2V0KChwKSwoMCksKG4pKQotIyBkZWZpbmUgYmNtcCBtZW1jbXAKLSNlbmRpZgotI2VuZGlmCi0KLQogLyogZGVmaW5lIHJhbmRvbSBmdW5jdGlvbnMgKi8KIAogI2lmbmRlZiBIQVZFX1JBTkRPTQpkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0IGIvd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0CmluZGV4IDBiZDBlZTUuLjE5MjVmYjcgMTAwNjQ0Ci0tLSBhL3dpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dAorKysgYi93aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQKQEAgLTEsNTIwICsxLDM1OSBAQAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIFJFQURNRS5idWlsZC53aW4zMgotKgotKiBBdXRob3JzOiBBbGV4IEJ1cmdlciA8YWxleF9iQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLSogICAgICAgICAgCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotSW50cm9kdWN0aW9uCi09PT09PT09PT09PT0KLQotVGhpcyBSRUFETUUgb3V0bGluZXMgdGhlIHN0ZXBzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIGJpbmFyeSByZWxlYXNlIGZvcgotV2luZG93cyB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBhbmQgdGhlIE51bGxTb2Z0IGluc3RhbGxlci4KLQotVGhlcmUgYXJlIGZvdXIgc2VjdGlvbnM6Ci0KLSAgQ29tcGlsaW5nIGJpbmFyaWVzCi0KLSAgQ29tcGlsaW5nIEhUTUxIZWxwIGZpbGUKLQotICBDb21iaW5pbmcgdGhlIGJpbmFyaWVzIGFuZCBIVE1MSGVscCBmaWxlcwotCi0gIEJ1bGRpbmcgYSBOdWxsU29mdCBpbnN0YWxsZXIgcGFja2FnZQotCi0gIEJ1bGRpbmcgYW4gT3BlblNTTCB2ZXJzaW9uCi0KLQotQ29tcGlsaW5nIGJpbmFyaWVzCi09PT09PT09PT09PT09PT09PT0KLQotUmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0KLQotIC1XaW5kb3dzIE5ULzIwMDAvWFAKLSAtTVNWQysrIDYuMCBTUDUKLSAtQWN0aXZlUGVybCA1LjguMiBidWlsZCA4MDgKLSAtZ251X3JlZ2V4LmV4ZSAoMC4xMikgLSBodHRwOi8vcGVvcGxlLmRlbHBoaWZvcnVtcy5jb20vZ2pjL2dudV9yZWdleC5odG1sCi0gLVBsYXRmb3JtIFNESwotIC1NU1lTIC8gTWluR1cgLW9yLSB0YXIuZXhlIGFuZCBnemlwLmV4ZQotIC13aW4zMi9kaXN0IGZvbGRlciBmcm9tIE1BSU4gaW4gQ1ZTCi0KLQotQnVpbGRpbmcgdGhlIG1haW4gYmluYXJpZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vdGU6ICBBbGwgc2hlbGwgc3RlcHMgYXJlIHVzaW5nIHRoZSBXaW5kb3cgQ01EIHByb21wdCB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4KLQotUGFydCAxCi0tLS0tLS0KLQotMS4gIEV4dHJhY3Qgc291cmNlLiAgVGhlIGxvY2F0aW9uIHdpbGwgYmUgcmVmZXJlbmNlcyBhcyAoc291cmNlIGRpcikKLQotMi4gIERlbGV0ZSBjOlx1c3IgaWYgaXQgZXhpc3RzIGFuZCByZW5hbWUgTmV0LVNOTVAuZGxsIGluIHlvdXIgJXdpbmRpciUgaWYgeW91IAotICAgIGhhdmUgaXQgYWxyZWFkeSAodG8gZW5zdXJlIFBlcmwgdGVzdHMgYXJlIHVzaW5nIHRoZSBjb21waWxlZCBETEwpCi0KLTMuICBBcHBseSBhbnkgcmVxdWlyZWQgcGF0Y2hlcwotCi00LiAgUmVtb3ZlIHRoZSBleGFtcGxlIE1JQiBmaWxlczogIAotCi0gICAgRWRpdCB3aW4zMlxuZXQtc25tcFxhZ2VudFxtaWJfbW9kdWxlX2NvbmZpZy5oIGFuZCBjaGFuZ2UgdGhlIGZvbGxvd2luZyBsaW5lczoKLQotICAgICAgI2RlZmluZSBVU0lOR19FWEFNUExFU19VQ0RERU1PUFVCTElDX01PRFVMRSAxCi0gICAgICAjZGVmaW5lIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFIDEKLQotICAgIHRvOgotCi0gICAgICAjdW5kZWYgVVNJTkdfRVhBTVBMRVNfVUNEREVNT1BVQkxJQ19NT0RVTEUKLSAgICAgICN1bmRlZiBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQotCi01LiAgY2QgKHNvdXJjZSBkaXIpXHdpbjMyCi0KLTYuICBSdW4gYnVpbGQuYmF0Ci0KLTcuICBTZXQgdG8gdGhlIGZvbGxvd2luZzoKLQotICAgIE5ldC1TTk1QIGJ1aWxkIGFuZCBpbnN0YWxsIG9wdGlvbnMKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgCi0gICAgMS4gT3BlblNTTCBzdXBwb3J0OiAgICAgIAkJZGlzYWJsZWQKLSAgICAyLiBQbGF0Zm9ybSBTREsgc3VwcG9ydDogCQllbmFibGVkICAgICAgICAgKioqCi0gICAgCi0gICAgMy4gSW5zdGFsbCBwYXRoOiAgICAgICAgIAkJYzovdXNyCi0gICAgNC4gSW5zdGFsbCBhZnRlciBidWlsZDogIAkJZW5hYmxlZAotICAgIAotICAgIDUuIFBlcmwgbW9kdWxlczogICAgICAgICAJCWVuYWJsZWQgICAgICAgICAqKioKLSAgICA2LiBJbnN0YWxsIHBlcmwgbW9kdWxlczogCQlkaXNhYmxlZAotICAgIAotICAgIDcuIFF1aWV0IGJ1aWxkIChsb2dnZWQpOiAJCWVuYWJsZWQKLSAgICA4LiBEZWJ1ZyBtb2RlOiAgICAgICAgICAgCQlkaXNhYmxlZAotICAgIDkuIElQdjYgdHJhbnNwb3J0czogICAgICAJCWRpc2FibGVkCi0KLSAgICAxMC4gTGluayB0eXBlOiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMKLQotICAgIDExLiBJbnN0YWxsIGRldmVsb3BtZW50IGZpbGVzICAgCWVuYWJsZWQgICAgICAgICAqKioKLSAgICAKLSAgICBGLiAgRmluaXNoZWQgLSBzdGFydCBidWlsZAotICAgIFEuICBRdWl0IC0gYWJvcnQgYnVpbGQKLSAgICAKLSAgICBTZWxlY3Qgb3B0aW9uIHRvIHNldCAvIHRvZ2dsZToKLQotOC4gIEYgdG8gc3RhcnQgdGhlIGJ1aWxkIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgYnVpbHQgb2sKLQotOS4gIERlbGV0ZSBhbnkgZ2VuZXJhdGVkIGNvbmZpZyBmaWxlcyBmcm9tIGM6XHVzclxzbm1wXHBlcnNpc3QKLQotUGFydCAyIC0gQ29tcGlsaW5nIHdpbkV4dERMTAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0xMC4gTW9kaWZ5IGZpbGVzIGFzIGV4cGxhaW5lZCBpbiBSRUFETUUud2luMzIgc2VjdGlvbiAnUnVubmluZyBOZXQtU05NUCBhcwotICAgIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlJyAtICdDb21waWxpbmcgTmV0LVNOTVAgd2l0aCAKLSAgICB0aGUgd2luRXh0RExMIGV4dGVuc2lvbiAoTVNWQyknLgotCi0xMS4gIFNldCB0byB0aGUgZm9sbG93aW5nOgotCi0gICAgTmV0LVNOTVAgYnVpbGQgYW5kIGluc3RhbGwgb3B0aW9ucwotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAKLSAgICAxLiBPcGVuU1NMIHN1cHBvcnQ6ICAgICAgCQlkaXNhYmxlZAotICAgIDIuIFBsYXRmb3JtIFNESyBzdXBwb3J0OiAJCWVuYWJsZWQgICAgICAgICAqKioKLSAgICAKLSAgICAzLiBJbnN0YWxsIHBhdGg6ICAgICAgICAgCQljOi91c3IKLSAgICA0LiBJbnN0YWxsIGFmdGVyIGJ1aWxkOiAgCQlkaXNhYmxlZCAgICAgICAgKioqCi0gICAgCi0gICAgNS4gUGVybCBtb2R1bGVzOiAgICAgICAgIAkJZGlzYWJsZWQKLSAgICA2LiBJbnN0YWxsIHBlcmwgbW9kdWxlczogCQlkaXNhYmxlZAotICAgIAotICAgIDcuIFF1aWV0IGJ1aWxkIChsb2dnZWQpOiAJCWVuYWJsZWQKLSAgICA4LiBEZWJ1ZyBtb2RlOiAgICAgICAgICAgCQlkaXNhYmxlZAotICAgIDkuIElQdjYgdHJhbnNwb3J0czogICAgICAJCWRpc2FibGVkCi0KLSAgICAxMC4gTGluayB0eXBlOiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMKLQotICAgIDExLiBJbnN0YWxsIGRldmVsb3BtZW50IGZpbGVzICAgCWRpc2FibGVkCi0gICAgCi0gICAgRi4gIEZpbmlzaGVkIC0gc3RhcnQgYnVpbGQKLSAgICBRLiAgUXVpdCAtIGFib3J0IGJ1aWxkCi0gICAgCi0gICAgU2VsZWN0IG9wdGlvbiB0byBzZXQgLyB0b2dnbGU6Ci0KLTEyLiBGIHRvIHN0YXJ0IHRoZSBidWlsZCBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIGJ1aWx0IG9rCi0KLTEzLiBDb3B5IHRoZSBuZXcgYmluYXJ5OgotCi0gICAgY29weSBiaW5ccmVsZWFzZVxzbm1wZC5leGUgYzpcdXNyXGJpblxzbm1wZC13aW5FeHRETEwuZXhlCi0KLTE0LiBUZXN0IGVhY2ggYmluYXJ5IGJ5IHJ1bm5pbmcgZWFjaCBvbmUgd2l0aCAtRHdpbkV4dERMTC4gIE1ha2Ugc3VyZSBvbmx5IHRoZQotICAgIHdpbkV4dERMTCB2ZXJzaW9uIGhhcyBkZWJ1ZyBvdXRwdXQuCi0KLQotUGFydCAzIC0gQ3JlYXRpbmcgdGhlIFBlcmwgcGFja2FnZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0xLiAgY2QgKHNvdXJjZSBkaXIpCi0gICAgY2QgcGVybAotCi0yLiAgbm1ha2UgcHBkCi0KLTMuICBPcGVuIGFuIE1TWVMgc2hlbGwgKHVubGVzcyB5b3UgaGF2ZSB0YXIuZXhlIGFuZCBnemlwLmV4ZSkKLQotNC4gIGNkIChzb3VyY2UgZGlyKQotICAgIGNkIHBlcmwKLQotNS4gIHRhciBjdmYgTmV0U05NUC50YXIgYmxpYjsgZ3ppcCAtLWJlc3QgTmV0U05NUC50YXIKLQotNi4gIE9wZW4gYSBXaW5kb3dzIGNvbW1hbmQgcHJvbXB0IChDTUQpIGFuZCBjZCAoc291cmNlIGRpcilccGVybAotCi03LiAgcmVuIEJ1bmRsZS1OZXRTTk1QLnBwZCBOZXRTTk1QLnBwZAotCi04LiAgTW9kaWZ5IE5ldFNOTVAucHBkIHRvIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nLiAgQ2hhbmdlIHRoZSAKLSAgICBWRVJTSU9OPSJ4LHgseCx4IiBsaW5lIHRvIHRoZSBjb3JyZWN0IHZhbHVlcy4gIERvIE5PVCBjaGFuZ2UgCi0gICAgKiBsaW5lcyBpbiB0aGUgb3JpZ2luYWwgZmlsZS4KLQotPFNPRlRQS0cgTkFNRT0iTmV0U05NUCIgVkVSU0lPTj0iNSwyLDAsMCI+Ci0gICAgPFRJVExFPk5ldC1TTk1QPC9USVRMRT4KLSAgICA8QUJTVFJBQ1Q+T2JqZWN0IE9yaWVudGVkIEludGVyZmFjZSB0byBOZXQtU05NUDwvQUJTVFJBQ1Q+Ci0gICAgPEFVVEhPUj48L0FVVEhPUj4KLSAgICA8SU1QTEVNRU5UQVRJT04+Ci0qICAgICAgICA8T1MgTkFNRT0iTVNXaW4zMiIgLz4KLSogICAgICAgIDxBUkNISVRFQ1RVUkUgTkFNRT0iTVNXaW4zMi14ODYtbXVsdGktdGhyZWFkLTUuOCIgLz4KLSAgICAgICAgPENPREVCQVNFIEhSRUY9Ing4Ni9OZXRTTk1QLnRhci5neiIgLz4KLSAgICA8L0lNUExFTUVOVEFUSU9OPgotPC9TT0ZUUEtHPgotCi05LiAgQ3JlYXRlIGJhc2UgZGlyZWN0b3JpZXM6Ci0KLSAgICBtZCAiYzpcdXNyXGRvY3MiCi0gICAgbWQgImM6XHVzclxwZXJsIgotICAgIG1kICJjOlx1c3JccGVybFx4ODYiCi0gICAgbWQgImM6XHVzclx0ZW1wIgotCi0xMC4gQ29weSBmaWxlczoKLQotICAgIGNkIChzb3VyY2UgZGlyKQotICAgIGNvcHkgQ09QWUlORyAiYzpcdXNyXGRvY3MiCi0gICAgY29weSB3aW4zMlxkaXN0XFJFQURNRS50eHQgImM6XHVzciIKLSAgICBjb3B5IHdpbjMyXGRpc3Rcc2NyaXB0c1xuZXQtc25tcC1wZXJsLXRlc3QucGwgImM6XHVzclxiaW4iCi0KLSAgICBjb3B5IHBlcmxcTmV0U05NUC5wcGQgImM6XHVzclxQZXJsIgotICAgIGNvcHkgcGVybFxOZXRTTk1QLnRhci5neiAiYzpcdXNyXFBlcmxceDg2IgotCi0xMS4gVXBkYXRlIHRoZSBCVUlMRCBJTkZPUk1BVElPTiBzZWN0aW9uIG9mIGM6XHVzclxSRUFETUUudHh0Ci0KLQotQ29tcGlsaW5nIEhUTUxIZWxwIGZpbGUKLT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoaXMgc2VjdGlvbiBvdXRsaW5lcyB0aGUgc3RlcHMgcmVxdWlyZWQgdG8gYnVpbGQgYSBXaW5kb3dzIEhUTUwgSGVscCBmaWxlCi1iYXNlZCBvbiB0aGUgTmV0LVNOTVAgbWFuIHBhZ2VzLCBSRUFETUUgZmlsZXMsIFBlcmxkb2MgZG9jdW1lbnRhdGlvbiBldGMuCi0KLVJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tCi0KLSAtTGludXggKG9yIHNpbWlsYXIpIHdpdGg6Ci0gICAtbWFuIChtYW4gcGFnZSB2aWV3ZXIpCi0gICAtdGlkeSAoSFRNTCB0aWR5IC0gaHR0cDovL3RpZHkuc291cmNlZm9yZ2UubmV0KQotICAgLVBlcmwKLSAgIC1wZXJsZG9jCi0gICAtbWFuMmh0bWwzLjAuMS50YXIuZ3ogKGh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmVob29kL21hbjJodG1sMy4wLjEvKQotICAgIE5vdGU6ICBNb3N0IExpbnV4IGRpc3RyaWJ1dGlvbnMgY29tZSB3aXRoIG1hbjJodG1sIGFzIHBhcnQgb2YgdGhlIG1hbiBycG0KLSAgICAgICAgICAgcGFja2FnZSB3aGljaCBpcyBub3QgdGhlIHNhbWUgYXMgbWFuMmh0bWwgZnJvbSBtYW4yaHRtbDMuMC4xLnRhci5nei4KLSAgICAgICAgICAgQWxsIHRoYXQgaXMgbmVlZGVkIGZyb20gbWFuMmh0bWwzLjAuMS50YXIuZ3ogaXMgdGhlIG1hbjJodG1sIHNjcmlwdC4gIAotICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gZG8gYSBjb21wbGV0ZSBpbnN0YWxsIChtYWtlL21ha2UgaW5zdGFsbCkgYnV0IHlvdQotICAgICAgICAgICBkbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc2NyaXB0IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGJ5IHNldHRpbmcgdGhlCi0gICAgICAgICAgIG1hbiBjb21tYW5kIGxpbmUgc3dpdGNoZXMgZXRjIGZvciB0aGUgT1MgZnJvbSBpbnNpZGUgb2YgdGhlIHNjcmlwdC4KLQotIC1XaW5kb3dzIHdpdGg6Ci0gICAtSFRNTCBIZWxwIFdvcmtzaG9wIChTZWFyY2ggbXNkbi5taWNyb3NvZnQuY29tIGZvciAnaHRtbCBoZWxwIHdvcmtzaG9wIGRvd25sb2FkJykKLQotCi1Db252ZXJ0IGRvY3VtZW50cyB0byBodG1sCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vdGU6ICBUaGUgZm9sbG93aW5nIHN0ZXBzIGFyZSBjb21wbGV0ZWQgdXNpbmcgTGludXguCi0KLU5vdGU6ICBBIHRlbXBvcmFyeSBsb2NhdGlvbiBvZiAvdG1wL25ldC1zbm1wIGlzIHVzZWQuCi0KLTEuICBFeHRyYWN0IE5ldC1TTk1QIHNvdXJjZSBhbmQgY2QgKHNvdXJjZSBkaXIpCi0KLTIuICBjZCAoc291cmNlIGRpcikKLQotMy4gIGNwIHBlcmwvU05NUC9SRUFETUUgUkVBRE1FLnBlcmwKLQotNC4gIFJlbW92ZSBvbGRlciBjb3BpZXMgb2YgY29udmVydGVkIGZpbGVzOgotCi0gICAgcm0gLVIgLWYgL3RtcC9uZXQtc25tcAotCi01LiAgQnVpbGQgTmV0LVNOTVAgbWFuIHBhZ2VzOiAKLQotICAgIC4vY29uZmlndXJlIC0tcHJlZml4PWM6L3VzcjsgbWFrZSBzZWRzY3JpcHQ7IGNkIG1hbjttYWtlOyBjZCAuLgotCi02LiAgSW5zdGFsbCBvbmx5IHRoZSBtYW4gZmlsZXMgdG8gL3RlbXAvbmV0LXNubXA6Ci0KLSAgICBjZCBtYW47IG1ha2UgaW5zdGFsbCBwcmVmaXg9L3RtcC9uZXQtc25tcDsgY2QgLi4KLQotNy4gIEdvIHRvIHRoZSBzY3JpcHRzIGZvbGRlciBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgc2NyaXB0cyBhcmUgZXhlY3V0YWJsZToKLQotICAgIGNkIChzb3VyY2UgZGlyKQotICAgIGNkIHdpbjMyL2Rpc3Qvc2NyaXB0czsgY2htb2QgK3ggKgotCi04LiAgRWRpdCB0aGVzZSBmaWxlcyBhbmQgbWFrZSBzdXJlIHRoZSBwYXRocyBhcmUgY29ycmVjdCBpbiB0aGUgT1BUSU9OUyAKLSAgICBzZWN0aW9uLiAgQWxzbyBlbnN1cmUgdGhlIGxpc3Qgb2YgUkVBRE1FIGZpbGVzIGFuZCBQZXJsIG1vZHVsZXMgCi0gICAgYXJlIGNvcnJlY3QgaW4gcmVhZG1lMmh0bWwgYW5kIHBvZGRpcjJodG1sLgotCi0gICAgbWFuZGlyMmh0bWwKLSAgICByZWFkbWUyaHRtbAotICAgIHBvZGRpcjJodG1sCi0KLSAgICBOb3RlOiAgbWFuZGlyMmh0bWwgd2lsbCBwcm9jZXNzIEFMTCBtYW4gcGFnZXMgaW4gYzpcdGVtcFxuZXQtc25tcCB3aGlsZQotICAgICAgICAgICByZWFkbWUyaHRtbCBhbmQgcG9kZGlyMmh0bWwgd2lsbCBvbmx5IHByb2Nlc3MgZmlsZXMgbGlzdGVkIGluIHRoZQotICAgICAgICAgICBzY3JpcHQuICBJZiBuZXcgbWFuIHBhZ2VzIGFyZSBhZGRlZCBvciByZW1vdmVkLCB0aGUgVGFibGUgb2YgCi0gICAgICAgICAgIENvbnRlbnRzICh0b2MuaGhjKSBhbmQgcHJvamVjdCBmaWxlIChOZXQtU05NUC5oaHApIG5lZWQgdG8gYmUgCi0gICAgICAgICAgIHVwZGF0ZWQgYnkgaGFuZC4KLQotOS4gIFJ1biBlYWNoIHNjcmlwdCB0byBnZW5lcmF0ZSB0aGUgLmh0bWwgZmlsZXM6Ci0KLSAgICAuL21hbmRpcjJodG1sOyAuL3JlYWRtZTJodG1sOyAuL3BvZGRpcjJodG1sCi0KLSAgICBOb3RlOiAgVGhlcmUgd2lsbCBiZSBtYW55IHdhcm5pbmdzIGZyb20gdGlkeSB3aGljaCBjYW4gYmUgaWdub3JlZC4KLQotMTAuIFZlcmlmeSBlYWNoIGNvbnZlcnRlZCBmaWxlIHRvIGVuc3VyZSBhbGwgdGhlIGxpbmtzIGFyZSBjb3JyZWN0LiAgVGhlIGZpbGVzCi0gICAgYXJlIGxvY2F0ZWQgaW4gL3RtcC9uZXQtc25tcC9odG1sIGJ5IGRlZmF1bHQuICBJbiBzb21lIGluc3RhbmNlcywgVVJMcyBtYXkgYmUgCi0gICAgc3BsaXQgYWNyb3NzIHR3byBsaW5lcyBzdWNoIGFzIHRoZSBWYXJpYWJsZXMgbGluayBhdCB0aGUgYm90dG9tIG9mIAotICAgIC90bXAvbmV0LXNubXAvaHRtbC9tYW44LXNubXB0cmFwZC44Lmh0bWwuCi0KLTExLiBJZiBuZXcgbWFuIHBhZ2VzIGFyZSBhZGRlZCBvciByZW1vdmVkLCB0aGUgVGFibGUgb2YgQ29udGVudHMgKE5ldC1TTk1QLmhoYykgYW5kCi0gICAgcHJvamVjdCBmaWxlIChOZXQtU05NUC5oaHApIG5lZWQgdG8gYmUgdXBkYXRlZCBieSBoYW5kLgotCi0xMi4gQ29udmVydCBFWEFNUExFLmNvbmYud2luMzIgdG8gaHRtbDoKLQotICAgIC4vdHh0Mmh0bWwgLi4vLi4vRVhBTVBMRS5jb25mLndpbjMyIHwgdGlkeSA+IC90bXAvbmV0LXNubXAvaHRtbC9FWEFNUExFLmNvbmYud2luMzIuaHRtbAotICAgIAotCi1CdWlsZCBOZXQtU05NUC5jaG0KLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ob3RlOiAgVGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgY29tcGxldGVkIHVzaW5nIFdpbmRvd3MuCi0KLU5vdGU6ICBBIHRlbXBvcmFyeSBsb2NhdGlvbiBvZiBjOlx0ZW1wXG5ldC1zbm1wIGlzIHVzZWQuCi0KLTEuICBUcmFuc2ZlciAvdG1wL25ldC1zbm1wL2h0bWwgZnJvbSBMaW51eCB0byBjOlx0ZW1wXG5ldC1zbm1wXGh0bWwKLQotMi4gIEdyYWIgdGhlIEZBUSBmcm9tIHRoZSB3ZWIgc2l0ZSwgc3RyaXAgb3V0IHRoZSBpbmNsdWRlcyBhbmQgc2F2ZSBhcwotICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxGQVEuaHRtbCBhbmQgcnVuOgotCi0gICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcRkFRLmh0bWwKLQotMy4gIEdyYWIgdGhlIERldmxvcGVyIEZBUSBmcm9tIHRoZSB3ZWIgc2l0ZSwgc3RyaXAgb3V0IHRoZSBpbmNsdWRlcyBhbmQgc2F2ZSBhcwotICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxEZXZlbG9wZXJfRkFRLmh0bWwgYW5kIHJ1bjoKLQotICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXERldmVsb3Blcl9GQVEuaHRtbAotCi00LiAgQ29weSB0aGUgZm9sbG93aW5nIGZpbGVzIHRvIGM6XHRlbXBcbmV0LXNubXBcaHRtbDoKLQotICAgIGNkIChzb3VyY2UgZGlyKQotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcQ29uZmlndXJhdGlvbl9PdmVydmlldy5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxIZWxwX0NhdmVhdHMuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcSW50cm9kdWN0aW9uLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXE5ldC1TTk1QLmhoYyIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcTmV0LVNOTVAuaGhwIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxuZXQtc25tcC00LjItODAwLmpwZyIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcc25tcC5jb25mLndpbjMyLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXHNubXBkLmNvbmYud2luMzIuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcc25tcHRyYXBkLmNvbmYud2luMzIuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotCi01LiAgTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtYXkgYmUgYXZhaWxhYmxlIGluIHRoZSBuZXcgcmVsZWFzZSBvZgotICAgIE5ldC1TTk1QLCBzbyB0aGUgKi5jb25mLndpbjMyLmh0bWwgZmlsZXMgc2hvdWxkIGJlIHVwZGF0ZWQuCi0KLSAgICBDcmVhdGUgYSB0ZXh0IGZpbGUgd2l0aCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Igc25tcGQgYW5kIAotICAgIHNubXB0cmFwZCB1c2luZzoKLQotICAgIGNkIHdpbjMyXGJpblxyZWxlYXNlIChmb2xkZXIgb2YgKldpbmRvd3MqIGNvbXBpbGVkIE5ldC1TTk1QKQotICAgIHNubXB0cmFwZCAtSCAyPiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcHRyYXBkLm9wdGlvbnMKLSAgICBzbm1wZCAtSCAyPiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcGQub3B0aW9ucwotCi0gICAgVXBkYXRlIHRoZXNlIGZpbGVzIHVzaW5nIGFuIEhUTUwgZWRpdG9yIChNb3ppbGxhIGV0Yyk6Ci0KLSAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcC5jb25mLndpbjMyLmh0bWwKLSAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcGQuY29uZi53aW4zMi5odG1sCi0gICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXB0cmFwZC5jb25mLndpbjMyLmh0bWwKLSAKLSAgICBPbmx5IGFkZCB0aGUgcmVsZXZlbnQgc2VjdGlvbiB0byBlYWNoIGZpbGUgZnJvbSB0aGUgLm9wdGlvbnMgZmlsZXMKLSAgICBjcmVhdGVkIGFib3ZlLCBlbnN1cmUgdGhlIGZvbnQgaXMgc2V0IHRvIGZpeGVkIHdpZHRoLgotCi0gICAgVGlkeSBlYWNoIGZpbGUgdXNpbmcgdGlkeSB1bmRlciBXaW5kb3dzIChvciB0cmFuc2ZlciB0byBMaW51eCBhbmQgdGlkeQotICAgIHVzaW5nIExpbnV4KToKLQotICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXB0cmFwZC5jb25mLndpbjMyLmh0bWwKLSAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wZC5jb25mLndpbjMyLmh0bWwKLSAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wLmNvbmYud2luMzIuaHRtbAotCi02LiAgRWRpdCBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcTmV0LVNOTVAuaGhwIGFuZCB1cGRhdGUgdGhlIHZlcnNpb24gZm9yIHRoZSAKLSAgICAnVGl0bGUnIHZhcmlhYmxlLgotCi03LiAgUnVuIEhUTUwgV29ya3Nob3AKLQotOC4gIE9wZW4gYzpcdGVtcFxuZXQtc25tcFxodG1sXE5ldC1TTk1QLmhocAotCi05LiAgQ2xpY2sgRmlsZSAtIENvbXBpbGUKLQotMTAuIFNlbGVjdCAnQzpcdGVtcFxuZXQtc25tcFxodG1sXE5ldC1TTk1QLmhocCcgYXMgdGhlIGZpbGVuYW1lCi0KLTExLiBDbGljayBDb21waWxlCi0KLTEyLiBZb3Ugc2hvdWxkIG5vdyBoYXZlIGEgYzpcdGVtcFxuZXQtc25tcFxodG1sXE5ldC1TTk1QLmNobSBmaWxlLgotCi0xMy4gTGF1bmNoIHRoZSBmaWxlIGFuZCBlbnN1cmUgZXZlcnkgY29udGVudCBpdGVtIGRpc3BsYXlzIHRoZSBjb3JyZWN0IHBhZ2UuCi0KLQotQ29tYmluaW5nIHRoZSBiaW5hcmllcyBhbmQgSFRNTEhlbHAgZmlsZXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLTEuICBDb3B5IHRoZSBIVE1MIEhlbHAgZmlsZSB0byBjOlx1c3JcZG9jczoKLQotICAgIGNvcHkgYzpcdGVtcFxOZXQtU05NUFxodG1sXE5ldC1TTk1QLmNobSBjOlx1c3JcZG9jc1wKLQotCi1CdWxkaW5nIGEgTnVsbFNvZnQgaW5zdGFsbGVyIHBhY2thZ2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1SZXF1aXJlbWVudHMKLS0tLS0tLS0tLS0tLQotCi0gLVdpbmRvd3MKLSAtTnVsbHNvZnQgU2NyaXB0YWJsZSBJbnN0YWxsIFN5c3RlbSAyLjAgLSBodHRwOi8vbnNpcy5zb3VyY2Vmb3JnZS5uZXQvaG9tZS8KLQotMS4gIENvbXBsZXRlIHRoZSB0aHJlZSBzZWN0aW9ucyBhYm92ZTogICdDb21waWxpbmcgYmluYXJpZXMnLCAnQ29tcGlsaW5nIAotICAgIEhUTUxIZWxwIGZpbGUnIGFuZCAnQ29tYmluaW5nIHRoZSBiaW5hcmllcyBhbmQgSFRNTEhlbHAgZmlsZXMnLiAgTmV0LVNOTVAKLSAgICBzaG91bGQgYmUgbG9jYXRlZCBpbiBjOlx1c3IuCi0KLTIuICBDb3B5IHRoZSBmb2xsb3dpbmcgZmlsZXMgdG8gYzpcdXNyOgotCi0gICAgY2QgKHNvdXJjZSBkaXIpCi0gICAgY29weSB3aW4zMlxkaXN0XGluc3RhbGxlclxTZXRFblZhci5uc2kgYzpcdXNyXAotICAgIGNvcHkgd2luMzJcZGlzdFxpbnN0YWxsZXJcbmV0LXNubXAubnNpIGM6XHVzclwKLSAgICBjb3B5IHdpbjMyXGRpc3RcaW5zdGFsbGVyXEFkZDJQYXRoLm5zaSBjOlx1c3JcCi0gICAgY29weSB3aW4zMlxkaXN0XGluc3RhbGxlclxuZXQtc25tcC1oZWFkZXIxLmJtcCBjOlx1c3JcCi0KLTMuICBDcmVhdGUgdGhlIGZvbGxvd2luZyBlbXB0eSBmaWxlczoKLQotICAgIGVjaG8gLiA+IGM6XHVzclxyZWdpc3RlcmFnZW50LmJhdAotICAgIGVjaG8gLiA+IGM6XHVzclx1bnJlZ2lzdGVyYWdlbnQuYmF0Ci0gICAgZWNobyAuID4gYzpcdXNyXHJlZ2lzdGVydHJhcGQuYmF0Ci0gICAgZWNobyAuID4gYzpcdXNyXHVucmVnaXN0ZXJ0cmFwZC5iYXQKLSAgICBlY2hvIC4gPiBjOlx1c3JcZXRjXHNubXBcc25tcC5jb25mCi0KLTQuICBFZGl0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIGM6XHVzclxuZXQtc25tcC5uc2k6Ci0KLSAgICBQUk9EVUNUX01BSl9WRVJTSU9OCi0gICAgUFJPRFVDVF9NSU5fVkVSU0lPTgotICAgIFBST0RVQ1RfUkVWSVNJT04KLSAgICBQUk9EVUNUX0VYRV9WRVJTSU9OCi0KLSAgICBGb3IgZXhhbXBsZSwgZm9yIDUuMS4yOgotCi0gICAgUFJPRFVDVF9NQUpfVkVSU0lPTiAiNSIKLSAgICBQUk9EVUNUX01JTl9WRVJTSU9OICIxIgotICAgIFBST0RVQ1RfUkVWSVNJT04gIjIiCi0gICAgUFJPRFVDVF9FWEVfVkVSU0lPTiAiMSIKLQotICAgIFRoZSBnZW5lcmF0ZWQgZmlsZW5hbWUgd291bGQgYmU6IG5ldC1zbm1wLTUuMS4yLTEud2luMzIuZXhlCi0KLSAgICBQUk9EVUNUX0VYRV9WRVJTSU9OIGlzIHVzdWFsbHkgMSB1bmxlc3MgdGhlIGJpbmFyeSBwYWNrYWdlIGlzIHJlLXJlbGVhc2VkCi0gICAgZHVlIHRvIHBhY2thZ2luZyBpc3N1ZXMuICBGb3IgcHJlIHJlbGVhc2VzLCBpbmNsdWRlIHRoZSBwcmUtcmVsZWFzZSB2ZXJzaW9uIAotICAgIGluIFBST0RVQ1RfUkVWSVNJT04uICAgRm9yIGV4YW1wbGUsIGZvciA1LjEuMiBwcmUyIHVzZToKLQotICAgIFBST0RVQ1RfTUFKX1ZFUlNJT04gIjUiCi0gICAgUFJPRFVDVF9NSU5fVkVSU0lPTiAiMSIKLSAgICBQUk9EVUNUX1JFVklTSU9OICIyLnByZTIiCi0gICAgUFJPRFVDVF9FWEVfVkVSU0lPTiAiMSIKLQotICAgIFRoaXMgd2lsbCBlbnN1cmUgdGhlIHZlcnNpb24gbnVtYmVyIGlzIHZpc2libGUgZHVyaW5nIGluc3RhbGxhdGlvbi4KLQotICAgIFRoZSBnZW5lcmF0ZWQgZmlsZW5hbWUgd291bGQgYmU6IG5ldC1zbm1wLTUuMS4yLnByZTItMS53aW4zMi5leGUKLQotNS4gIExhdW5jaCB0aGUgJ051bGxzb2Z0IEluc3RhbGwgU3lzdGVtIChOU0lTIDIuMCknCi0KLTYuICBTZWxlY3QgJ01ha2VOU0lTVyAoY29tcGlsZXIgaW50ZXJmYWNlKScKLQotNy4gIENsaWNrIEZpbGUgLSBMb2FkIFNjcmlwdAotCi04LiAgU2VsZWN0IGM6XHVzclxuZXQtc25tcC5uc2kKLQotOS4gIFlvdSBzaG91bGQgbm93IGhhdmUgYSBjOlx1c3JcTmV0LVNOTVAteC54LngteC5leGUgYmluYXJ5IGluc3RhbGxlciAKLSAgICBwYWNrYWdlCi0KLTEwLiBUZXN0IHRoZSBwYWNrYWdlCi0KLTExLiBDb21wYXJlIHRoZSBkaXJlY3RvcnkgY29udGVudHMgb2YgdGhlIGNvbXBpbGVkIGZvbGRlciB3aXRoIHRoZSBpbnN0YWxsZWQKLSAgICBmb2xkZXIgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtaXNzaW5nIE1JQiBmaWxlcyBldGMuICBNb2RpZnkgbmV0LXNubXAubnNpCi0gICAgYW5kIHJlYnVpbGQgaWYgcmVxdWlyZWQuCi0KLTEyLiBDcmVhdGUgYSAuemlwIGZpbGUgb2YgYzpcdXNyIGZvciBhcmNoaXZlIHB1cnBvc2VzLgotCi0KLUJ1bGRpbmcgYW4gT3BlblNTTCB2ZXJzaW9uCi09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1SZXF1aXJlbWVudHMKLS0tLS0tLS0tLS0tLQotCi0gLU9wZW5TU0wgYmluYXJ5IGZyb20gaHR0cDovL3d3dy5zbHByb3dlYi5jb20vcHJvZHVjdHMvV2luMzJPcGVuU1NMLmh0bWwKLQotMS4gIEluc3RhbGwgdGhlIE9wZW5TU0wgYmluYXJ5LCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXMgZXhwbGFpbmVkIGluIAotICAgICdVc2luZyBhIHByZS1jb21waWxlZCB2ZXJzaW9uJyBvZiB0aGUgJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmcgd2l0aCAKLSAgICBPcGVuU1NMJyBzZWN0aW9uIG9mIFJFQURNRS53aW4zMi4KLQotMi4gIE1vdmUgYzpcdXNyIGM6XHVzci50ZW1wCi0KLTMuICBSZS1idWlsZCB0aGUgYmluYXJ5IGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlIHNlY3Rpb24gJ0J1aWxkaW5nIHRoZSAKLSAgICBtYWluIGJpbmFyaWVzJyBleGNlcHQgZW5hYmxlIE9wZW5TU0wuICBCZSBzdXJlIHRvIHVuZG8gdGhlIHdpbkV4dERMTCAKLSAgICBjaGFuZ2VzIGJlZm9yZSBzdGFydGluZyBieSBjb3B5aW5nIGEgZnJlc2ggbmV0LXNubXAtY29uZmlnLmguaW4gYW5kIAotICAgIG5ldHNubXBtaWJzc2RrLmRzcC4KLQotNC4gIENvcHkgY29udGVudHMgb2YgYzpcdXNyIHRvIGM6XHVzci50ZW1wCi0KLTUuICBEZWxldGUgYzpcdXNyCi0KLTYuICBNb3ZlIGM6XHVzci50ZW1wIGM6XHVzcgotCi03LiAgVXBkYXRlIHRoZSBCVUlMRCBJTkZPUk1BVElPTiBzZWN0aW9uIG9mIGM6XHVzclxSRUFETUUudHh0IHRvIGluY2x1ZGUgdGhlIFNTTCAKLSAgICBpbmZvIGFuZCB0aGUgZmlsZW5hbWUuCi0KLTguICBVcGRhdGUgdGhlIHZlcnNpb24gc3RhbXAgaW4gYzpcdXNyXG5ldC1zbm1wLm5zaSB0byBpbmNsdWRlIC1zc2wuICBFeGFtcGxlOgotCi0gICAgRm9yIGV4YW1wbGUsIGZvciA1LjMuMDoKLQotICAgIFBST0RVQ1RfTUFKX1ZFUlNJT04gIjUiCi0gICAgUFJPRFVDVF9NSU5fVkVSU0lPTiAiMyIKLSAgICBQUk9EVUNUX1JFVklTSU9OICIwLXNzbCIKLSAgICBQUk9EVUNUX0VYRV9WRVJTSU9OICIxIgotCi0gICAgVGhlIGdlbmVyYXRlZCBmaWxlbmFtZSB3b3VsZCBiZTogbmV0LXNubXAtNS4zLjAtc3NsLTEud2luMzIuZXhlCi0KLTkuICBJbiBjOlx1c3JcbmV0LXNubXAubnNpLCBjaGFuZ2U6Ci0KLSAgICAhZGVmaW5lIE9QRU5TU0xfUkVRVUlSRUQgIjAiCi0KLSAgICB0bwotCi0gICAgIWRlZmluZSBPUEVOU1NMX1JFUVVJUkVEICIxIgotCi0xMC4gTGF1bmNoIHRoZSAnTnVsbHNvZnQgSW5zdGFsbCBTeXN0ZW0gKE5TSVMgMi4wKScKLQotMTEuIFNlbGVjdCAnTWFrZU5TSVNXIChjb21waWxlciBpbnRlcmZhY2UpJwotCi0xMi4gQ2xpY2sgRmlsZSAtIExvYWQgU2NyaXB0Ci0KLTEzLiBTZWxlY3QgYzpcdXNyXG5ldC1zbm1wLm5zaQotCi0xNC4gWW91IHNob3VsZCBub3cgaGF2ZSBhIGM6XHVzclxOZXQtU05NUC14LngueC14LmV4ZSBiaW5hcnkgaW5zdGFsbGVyIAotICAgIHBhY2thZ2UKLQotMTUuIFRlc3QgdGhlIHBhY2thZ2UKLQotMTYuIENvbXBhcmUgdGhlIGRpcmVjdG9yeSBjb250ZW50cyBvZiB0aGUgY29tcGlsZWQgZm9sZGVyIHdpdGggdGhlIGluc3RhbGxlZAotICAgIGZvbGRlciB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1pc3NpbmcgTUlCIGZpbGVzIGV0Yy4gIE1vZGlmeSBuZXQtc25tcC5uc2kKLSAgICBhbmQgcmVidWlsZCBpZiByZXF1aXJlZC4KLQotMTcuIENyZWF0ZSBhIC56aXAgZmlsZSBvZiBjOlx1c3IgZm9yIGFyY2hpdmUgcHVycG9zZXMuCi0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqIFJFQURNRS5idWlsZC53aW4zMg0KKyoNCisqIEF1dGhvcjogQWxleCBCdXJnZXIgPGFsZXhfYkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+DQorKiAgICAgICAgICANCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorSW50cm9kdWN0aW9uDQorPT09PT09PT09PT09DQorDQorVGhpcyBSRUFETUUgb3V0bGluZXMgdGhlIHN0ZXBzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIGJpbmFyeSByZWxlYXNlIGZvcg0KK1dpbmRvd3MgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gYW5kIHRoZSBOdWxsU29mdCBpbnN0YWxsZXIuDQorDQorVGhlcmUgYXJlIGZvdXIgc2VjdGlvbnM6DQorDQorICBDb21waWxpbmcgYmluYXJpZXMNCisNCisgIENvbXBpbGluZyBIVE1MSGVscCBmaWxlDQorDQorICBDb21iaW5pbmcgdGhlIGJpbmFyaWVzIGFuZCBIVE1MSGVscCBmaWxlcw0KKw0KKyAgQnVsZGluZyBhIE51bGxTb2Z0IGluc3RhbGxlciBwYWNrYWdlDQorDQorDQorQ29tcGlsaW5nIGJpbmFyaWVzDQorPT09PT09PT09PT09PT09PT09DQorDQorUmVxdWlyZW1lbnRzDQorLS0tLS0tLS0tLS0tDQorDQorMzItYml0IGJpbmFyeToNCisNCisgLVdpbmRvd3MgWFAgMzItYml0IFNQMiBvciBoaWdoZXINCisgLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMDggU1AxIHdpdGggUGxhdGZvcm0gU0RLIGFuZCBsYXRlc3QgdXBkYXRlcyBmcm9tIE1pY3Jvc29mdA0KKyAgaW5jbHVkaW5nIHVwZGF0ZXMgdG8gdGhlIHJlZGlzdHJpYnV0YWJsZSBjb21wb25lbnRzDQorIC1BY3RpdmVQZXJsIDUuMTANCisgLU1TWVMgLyBNaW5HVyAtb3ItIHRhci5leGUgYW5kIGd6aXAuZXhlDQorIC13aW4zMi9kaXN0IGZvbGRlciBmcm9tIE1BSU4gaW4gQ1ZTDQorIC1PcGVuU1NMIGJpbmFyeSBhbmQgbGlicmFyeSBmaWxlcyBmcm9tIGh0dHA6Ly93d3cuc2xwcm93ZWIuY29tL3Byb2R1Y3RzL1dpbjMyT3BlblNTTC5odG1sDQorDQorNjQtYml0IGJpbmFyeToNCisNCisgLVdpbmRvd3MgNyA2NC1iaXQNCisgLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMDggU1AxIHdpdGggUGxhdGZvcm0gU0RLIGFuZCBsYXRlc3QgdXBkYXRlcyBmcm9tIE1pY3Jvc29mdA0KKyAgaW5jbHVkaW5nIHVwZGF0ZXMgdG8gdGhlIHJlZGlzdHJpYnV0YWJsZSBjb21wb25lbnRzLiAgQWxzbyBuZWVkIGFyZSB0aGUgNjQtYml0IGNvbXBpbGVyIG9wdGlvbnMuDQorIC1BY3RpdmVQZXJsIDUuMTAgKDY0LWJpdCkNCisgLU1TWVMgLyBNaW5HVyAtb3ItIHRhci5leGUgYW5kIGd6aXAuZXhlDQorIC13aW4zMi9kaXN0IGZvbGRlciBmcm9tIE1BSU4gaW4gQ1ZTDQorIC1PcGVuU1NMIDY0LWJpdCBiaW5hcnkgYW5kIGxpYnJhcnkgZmlsZXMgZnJvbSBodHRwOi8vd3d3LnNscHJvd2ViLmNvbS9wcm9kdWN0cy9XaW4zMk9wZW5TU0wuaHRtbA0KKw0KKw0KK0J1aWxkaW5nIHRoZSBtYWluIGJpbmFyaWVzDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitOb3RlOiAgQWxsIHNoZWxsIHN0ZXBzIGFyZSB1c2luZyB0aGUgV2luZG93IENNRCBwcm9tcHQgdW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuDQorDQorUGFydCAxDQorLS0tLS0tDQorDQorMS4gIEluc3RhbGwgcHJlLXJlcXVpc2l0ZXM6DQorDQorICAgIE1TVkMgMjAwODoNCisgICAgICBJbmNsdWRlIHRoZSBQbGF0Zm9ybSBTREsgYW5kIGZvciA2NC1iaXQsIG1ha2Ugc3VyZSB0aGUgNjQtYml0IGNvbXBpbGVyIGlzIGluc3RhbGxlZA0KKyAgICAgIChub3QgaW5jbHVkZWQgYnkgZGVmYXVsdCkuDQorDQorICAgICAgTGF0ZXN0IHVwZGF0ZXMgZnJvbSBNaWNyb3NvZnQgdG8gZW5zdXJlIHRoZSByZWRpc3RyaWJ1dGFibGUgRExMcyBoYXZlIHRoZSBsYXRlc3QNCisgICAgICBzZWN1cml0eSBmaXhlcy4NCisNCisgICAgQWN0aXZlUGVybDoNCisgICAgICBGb3IgNjQtYml0LCBtYWtlIHN1cmUgeW91IGluc3RhbGwgdGhlIDY0LWJpdCB2ZXJzaW9uIG90aGVyd2lzZSBjb21waWxpbmcgd2lsbCBmYWlsLg0KKw0KKyAgICBNU1lTIC8gTWluR1c6DQorICAgICAgTmVlZGVkIGZvciB0YXIgY29tbWFuZCBpbiBidWlsZC1iaW5hcnkuYmF0L3BsLiAgDQorDQorICAgIE9wZW5TU0w6DQorICAgICAgSW5zdGFsbCB0aGUgT3BlblNTTCBiaW5hcnksIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcyBleHBsYWluZWQgaW4gDQorICAgICAgJ1VzaW5nIGEgcHJlLWNvbXBpbGVkIHZlcnNpb24nIG9mIHRoZSAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyB3aXRoIA0KKyAgICAgIE9wZW5TU0wnIHNlY3Rpb24gb2YgUkVBRE1FLndpbjMyLiAgRm9yIDY0LWJpdCwgbWFrZSBzdXJlIHlvdSBpbnN0YWxsIHRoZSA2NC1iaXQgDQorICAgICAgdmVyc2lvbiBvdGhlcndpc2UgY29tcGlsaW5nIHdpbGwgZmFpbC4NCisNCisyLiAgRXh0cmFjdCBzb3VyY2UuICBUaGUgbG9jYXRpb24gd2lsbCBiZSByZWZlcmVuY2VkIGFzIChzb3VyY2UgZGlyKQ0KKw0KKzMuICBEZWxldGUgYzpcdXNyIGlmIGl0IGV4aXN0cy4NCisNCis0LiAgQXBwbHkgYW55IHJlcXVpcmVkIHBhdGNoZXMNCisNCis1LiAgY2QgKHNvdXJjZSBkaXIpXHdpbjMyXGRpc3QNCisNCis2LiAgUnVuIGJ1aWxkLWJpbmFyeS5iYXQuICANCisNCisgICAgSWYgYzpcdXNyIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIHN0b3Agd2l0aCBhbiBlcnJvci4NCisNCisgICAgSWYgJXdpbmRpciVcc3lzdGVtMzJcbmV0c25tcC5kbGwgZXhpc3RzLCBpdCB3aWxsIGFzayBpZiBpdCBjYW4gYmUgZGVsZXRlZC4gIEFuc3dlciB5ZXMuDQorDQorNy4gIEF0IGEgaGlnaCBsZXZlbCwgdGhlIGZvbGxvd2luZyB3aWxsIGJlIGNvbXBsZXRlZDoNCisNCisgICAgYSkgIEdldCBwYWNrYWdlIHZlcnNpb24gZnJvbSBVbml4IGNvbmZpZ3VyZSBzY3JpcHQgZm9yIHVzZSBpbiB0aGUgUGVybCBtb2R1bGUgYW5kIE5TSVMNCisgICAgICAgIGluc3RhbGxlciBwYWNrYWdlLg0KKyAgICBiKSAgQnVpbGQgdGhlIGFwcGxpY2F0aW9ucyBhbmQgUGVybCBtb2R1bGVzIHdpdGggT3BlblNTTCBlbmFibGVkIGFuZCB3aW5FeHRETEwgZGlzYWJsZWQNCisgICAgYykgIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbnMgYW5kIFBlcmwgbW9kdWxlcyB3aXRoIE9wZW5TU0wgZW5hYmxlZCBhbmQgd2luRXh0RExMIGVuYWJsZWQNCisgICAgZCkgIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbnMgYW5kIFBlcmwgbW9kdWxlcyB3aXRoIE9wZW5TU0wgZGlzYWJsZWQgYW5kIHdpbkV4dERMTCBkaXNhYmxlZA0KKyAgICBlKSAgQnVpbGQgdGhlIGFwcGxpY2F0aW9ucyBhbmQgUGVybCBtb2R1bGVzIHdpdGggT3BlblNTTCBkaXNhYmxlZCBhbmQgd2luRXh0RExMIGVuYWJsZWQNCisgICAgZikgIENvcHkgZGlzdHJpYnV0aW9uIGZpbGVzIChyZWFkbWUsIGJhdGNoIGZpbGVzIGV0YykNCisgICAgZykgIENvcHkgTlNJUyBpbnN0YWxsZXIgc2NyaXB0IGFuZCB1cGRhdGUgdGhlIHZlcnNpb24gc3RhbXANCisNCis4LiAgQ29weSB0aGUgZm9sbG93aW5nIHRvIGM6XHVzclxiaW46DQorDQorICAgIDY0LWJpdDoNCisNCisgICAgQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA5LjBcVkNccmVkaXN0XGFtZDY0XE1pY3Jvc29mdC5WQzkwLkNSVFwqLioNCisNCisgICAgMzItYml0Og0KKw0KKyAgICBDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDkuMFxWQ1xyZWRpc3RceDg2XE1pY3Jvc29mdC5WQzkwLkNSVFwqLiogICANCisNCisgICAgTm90ZTogIENvcHkgdGhlIGZpbGVzIGRpcmVjdGx5IHRvIHRoZSBmb2xkZXIuICBJZiB5b3UgY29weSB0aGUgZm9sZGVyLCB0aGUgYmluYXJpZXMgd29uJ3QNCisgICAgICAgICAgIHJ1biBvbiBXaW5kb3dzIDIwMDAuDQorDQorOS4gIFZlcmlmeSB0aGF0IHRoZSBiaW5hcmllcyBjcmVhdGVkIGFyZSBsaW5rZWQgdG8gdGhlIGNvcnJlY3QgTVNWQyAyMDA4IHJlZGlzdHJpYnV0aW9uIHRoYXQgd2FzDQorICAgIGNvcGllZCBpbiB0aGUgcHJldmlvdXMgc3RlcC4NCisNCisgICAgUmlnaHQtY2xpY2sgbXN2Y3I5MC5kbGwsIHByb3BlcnRpZXMsIERldGFpbHMuICBDaGVjayB0aGUgcHJvZHVjdCB2ZXJzaW9uLiAgDQorICAgIEV4YW1wbGU6IDkuMDAuMzA3MjkuNDE0OA0KKw0KKyAgICBjZCBcdXNyXGJpbg0KKyAgICBtdC5leGUgLWlucHV0cmVzb3VyY2U6c25tcGdldC5leGU7IzEgLW91dDpleHRyYWN0ZWQubWFuaWZlc3QNCisgICAgdHlwZSBleHRyYWN0ZWQubWFuaWZlc3QNCisgICAgDQorICAgIEV4YW1wbGU6DQorDQorICAgIDxhc3NlbWJseUlkZW50aXR5IHR5cGU9IndpbjMyIiBuYW1lPSJNaWNyb3NvZnQuVkM5MC5DUlQiIHZlcnNpb249IjkuMC4zMDcyOS4xIg0KKyAgIA0KKzEwLiBVcGRhdGUgdGhlIEJVSUxEIElORk9STUFUSU9OIHNlY3Rpb24gb2YgYzpcdXNyXFJFQURNRS50eHQNCisNCisNCitDb21waWxpbmcgSFRNTEhlbHAgZmlsZQ0KKz09PT09PT09PT09PT09PT09PT09PT09DQorDQorVGhpcyBzZWN0aW9uIG91dGxpbmVzIHRoZSBzdGVwcyByZXF1aXJlZCB0byBidWlsZCBhIFdpbmRvd3MgSFRNTCBIZWxwIGZpbGUNCitiYXNlZCBvbiB0aGUgTmV0LVNOTVAgbWFuIHBhZ2VzLCBSRUFETUUgZmlsZXMsIFBlcmxkb2MgZG9jdW1lbnRhdGlvbiBldGMuDQorDQorUmVxdWlyZW1lbnRzDQorLS0tLS0tLS0tLS0tDQorDQorIC1MaW51eCAob3Igc2ltaWxhcikgd2l0aDoNCisgICAtbWFuIChtYW4gcGFnZSB2aWV3ZXIpDQorICAgLXRpZHkgKEhUTUwgdGlkeSAtIGh0dHA6Ly90aWR5LnNvdXJjZWZvcmdlLm5ldCkNCisgICAtUGVybA0KKyAgIC1wZXJsZG9jDQorICAgLW1hbjJodG1sMy4wLjEudGFyLmd6IChodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35laG9vZC9tYW4yaHRtbDMuMC4xLykNCisgICAgTm90ZTogIE1vc3QgTGludXggZGlzdHJpYnV0aW9ucyBjb21lIHdpdGggbWFuMmh0bWwgYXMgcGFydCBvZiB0aGUgbWFuIHJwbQ0KKyAgICAgICAgICAgcGFja2FnZSB3aGljaCBpcyBub3QgdGhlIHNhbWUgYXMgbWFuMmh0bWwgZnJvbSBtYW4yaHRtbDMuMC4xLnRhci5nei4NCisgICAgICAgICAgIEFsbCB0aGF0IGlzIG5lZWRlZCBmcm9tIG1hbjJodG1sMy4wLjEudGFyLmd6IGlzIHRoZSBtYW4yaHRtbCBzY3JpcHQuICANCisgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBkbyBhIGNvbXBsZXRlIGluc3RhbGwgKG1ha2UvbWFrZSBpbnN0YWxsKSBidXQgeW91DQorICAgICAgICAgICBkbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc2NyaXB0IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGJ5IHNldHRpbmcgdGhlDQorICAgICAgICAgICBtYW4gY29tbWFuZCBsaW5lIHN3aXRjaGVzIGV0YyBmb3IgdGhlIE9TIGZyb20gaW5zaWRlIG9mIHRoZSBzY3JpcHQuDQorDQorIC1XaW5kb3dzIHdpdGg6DQorICAgLUhUTUwgSGVscCBXb3Jrc2hvcCAoU2VhcmNoIG1zZG4ubWljcm9zb2Z0LmNvbSBmb3IgJ2h0bWwgaGVscCB3b3Jrc2hvcCBkb3dubG9hZCcpDQorDQorDQorQ29udmVydCBkb2N1bWVudHMgdG8gaHRtbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitOb3RlOiAgVGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgY29tcGxldGVkIHVzaW5nIExpbnV4Lg0KKw0KK05vdGU6ICBBIHRlbXBvcmFyeSBsb2NhdGlvbiBvZiAvdG1wL25ldC1zbm1wIGlzIHVzZWQuDQorDQorMS4gIEV4dHJhY3QgTmV0LVNOTVAgc291cmNlIGFuZCBjZCAoc291cmNlIGRpcikNCisNCisyLiAgY2QgKHNvdXJjZSBkaXIpDQorDQorMy4gIGNwIHBlcmwvU05NUC9SRUFETUUgUkVBRE1FLnBlcmwNCisNCis0LiAgUmVtb3ZlIG9sZGVyIGNvcGllcyBvZiBjb252ZXJ0ZWQgZmlsZXM6DQorDQorICAgIHJtIC1SIC1mIC90bXAvbmV0LXNubXANCisNCis1LiAgQnVpbGQgTmV0LVNOTVAgbWFuIHBhZ2VzOiANCisNCisgICAgLi9jb25maWd1cmUgLS1wcmVmaXg9YzovdXNyOyBtYWtlIHNlZHNjcmlwdDsgY2QgbWFuO21ha2U7IGNkIC4uDQorDQorNi4gIEluc3RhbGwgb25seSB0aGUgbWFuIGZpbGVzIHRvIC90ZW1wL25ldC1zbm1wOg0KKw0KKyAgICBjZCBtYW47IG1ha2UgaW5zdGFsbCBwcmVmaXg9L3RtcC9uZXQtc25tcDsgY2QgLi4NCisNCis3LiAgR28gdG8gdGhlIHNjcmlwdHMgZm9sZGVyIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBzY3JpcHRzIGFyZSBleGVjdXRhYmxlOg0KKw0KKyAgICBjZCAoc291cmNlIGRpcikNCisgICAgY2Qgd2luMzIvZGlzdC9zY3JpcHRzOyBjaG1vZCAreCAqDQorDQorOC4gIEVkaXQgdGhlc2UgZmlsZXMgYW5kIG1ha2Ugc3VyZSB0aGUgcGF0aHMgYXJlIGNvcnJlY3QgaW4gdGhlIE9QVElPTlMgDQorICAgIHNlY3Rpb24uICBBbHNvIGVuc3VyZSB0aGUgbGlzdCBvZiBSRUFETUUgZmlsZXMgYW5kIFBlcmwgbW9kdWxlcyANCisgICAgYXJlIGNvcnJlY3QgaW4gcmVhZG1lMmh0bWwgYW5kIHBvZGRpcjJodG1sLg0KKw0KKyAgICBtYW5kaXIyaHRtbA0KKyAgICByZWFkbWUyaHRtbA0KKyAgICBwb2RkaXIyaHRtbA0KKw0KKyAgICBOb3RlOiAgbWFuZGlyMmh0bWwgd2lsbCBwcm9jZXNzIEFMTCBtYW4gcGFnZXMgaW4gYzpcdGVtcFxuZXQtc25tcCB3aGlsZQ0KKyAgICAgICAgICAgcmVhZG1lMmh0bWwgYW5kIHBvZGRpcjJodG1sIHdpbGwgb25seSBwcm9jZXNzIGZpbGVzIGxpc3RlZCBpbiB0aGUNCisgICAgICAgICAgIHNjcmlwdC4gIElmIG5ldyBtYW4gcGFnZXMgYXJlIGFkZGVkIG9yIHJlbW92ZWQsIHRoZSBUYWJsZSBvZiANCisgICAgICAgICAgIENvbnRlbnRzICh0b2MuaGhjKSBhbmQgcHJvamVjdCBmaWxlIChOZXQtU05NUC5oaHApIG5lZWQgdG8gYmUgDQorICAgICAgICAgICB1cGRhdGVkIGJ5IGhhbmQuDQorDQorOS4gIFJ1biBlYWNoIHNjcmlwdCB0byBnZW5lcmF0ZSB0aGUgLmh0bWwgZmlsZXM6DQorDQorICAgIC4vbWFuZGlyMmh0bWw7IC4vcmVhZG1lMmh0bWw7IC4vcG9kZGlyMmh0bWwNCisNCisgICAgTm90ZTogIFRoZXJlIHdpbGwgYmUgbWFueSB3YXJuaW5ncyBmcm9tIHRpZHkgd2hpY2ggY2FuIGJlIGlnbm9yZWQuDQorDQorMTAuIFZlcmlmeSBlYWNoIGNvbnZlcnRlZCBmaWxlIHRvIGVuc3VyZSBhbGwgdGhlIGxpbmtzIGFyZSBjb3JyZWN0LiAgVGhlIGZpbGVzDQorICAgIGFyZSBsb2NhdGVkIGluIC90bXAvbmV0LXNubXAvaHRtbCBieSBkZWZhdWx0LiAgSW4gc29tZSBpbnN0YW5jZXMsIFVSTHMgbWF5IGJlIA0KKyAgICBzcGxpdCBhY3Jvc3MgdHdvIGxpbmVzIHN1Y2ggYXMgdGhlIFZhcmlhYmxlcyBsaW5rIGF0IHRoZSBib3R0b20gb2YgDQorICAgIC90bXAvbmV0LXNubXAvaHRtbC9tYW44LXNubXB0cmFwZC44Lmh0bWwuDQorDQorMTEuIElmIG5ldyBtYW4gcGFnZXMgYXJlIGFkZGVkIG9yIHJlbW92ZWQsIHRoZSBUYWJsZSBvZiBDb250ZW50cyAoTmV0LVNOTVAuaGhjKSBhbmQNCisgICAgcHJvamVjdCBmaWxlIChOZXQtU05NUC5oaHApIG5lZWQgdG8gYmUgdXBkYXRlZCBieSBoYW5kLg0KKw0KKzEyLiBDb252ZXJ0IEVYQU1QTEUuY29uZi53aW4zMiB0byBodG1sOg0KKw0KKyAgICAuL3R4dDJodG1sIC4uLy4uL0VYQU1QTEUuY29uZi53aW4zMiB8IHRpZHkgPiAvdG1wL25ldC1zbm1wL2h0bWwvRVhBTVBMRS5jb25mLndpbjMyLmh0bWwNCisgICAgDQorDQorQnVpbGQgTmV0LVNOTVAuY2htDQorLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorTm90ZTogIFRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGNvbXBsZXRlZCB1c2luZyBXaW5kb3dzLg0KKw0KK05vdGU6ICBBIHRlbXBvcmFyeSBsb2NhdGlvbiBvZiBjOlx0ZW1wXG5ldC1zbm1wIGlzIHVzZWQuDQorDQorMS4gIFRyYW5zZmVyIC90bXAvbmV0LXNubXAvaHRtbCBmcm9tIExpbnV4IHRvIGM6XHRlbXBcbmV0LXNubXBcaHRtbA0KKw0KKzIuICBHcmFiIHRoZSBGQVEgZnJvbSB0aGUgd2ViIHNpdGUsIHN0cmlwIG91dCB0aGUgaW5jbHVkZXMgYW5kIHNhdmUgYXMNCisgICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXEZBUS5odG1sIGFuZCBydW46DQorDQorICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXEZBUS5odG1sDQorDQorMy4gIEdyYWIgdGhlIERldmxvcGVyIEZBUSBmcm9tIHRoZSB3ZWIgc2l0ZSwgc3RyaXAgb3V0IHRoZSBpbmNsdWRlcyBhbmQgc2F2ZSBhcw0KKyAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcRGV2ZWxvcGVyX0ZBUS5odG1sIGFuZCBydW46DQorDQorICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXERldmVsb3Blcl9GQVEuaHRtbA0KKw0KKzQuICBDb3B5IHRoZSBmb2xsb3dpbmcgZmlsZXMgdG8gYzpcdGVtcFxuZXQtc25tcFxodG1sOg0KKw0KKyAgICBjZCAoc291cmNlIGRpcikNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxDb25maWd1cmF0aW9uX092ZXJ2aWV3Lmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxIZWxwX0NhdmVhdHMuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXEludHJvZHVjdGlvbi5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcTmV0LVNOTVAuaGhjIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcTmV0LVNOTVAuaGhwIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcbmV0LXNubXAtNC4yLTgwMC5qcGciIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxzbm1wLmNvbmYud2luMzIuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXHNubXBkLmNvbmYud2luMzIuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXHNubXB0cmFwZC5jb25mLndpbjMyLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisNCis1LiAgTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtYXkgYmUgYXZhaWxhYmxlIGluIHRoZSBuZXcgcmVsZWFzZSBvZg0KKyAgICBOZXQtU05NUCwgc28gdGhlICouY29uZi53aW4zMi5odG1sIGZpbGVzIHNob3VsZCBiZSB1cGRhdGVkLg0KKw0KKyAgICBDcmVhdGUgYSB0ZXh0IGZpbGUgd2l0aCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Igc25tcGQgYW5kIA0KKyAgICBzbm1wdHJhcGQgdXNpbmc6DQorDQorICAgIGNkIHdpbjMyXGJpblxyZWxlYXNlIChmb2xkZXIgb2YgKldpbmRvd3MqIGNvbXBpbGVkIE5ldC1TTk1QKQ0KKyAgICBzbm1wdHJhcGQgLUggMj4gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXB0cmFwZC5vcHRpb25zDQorICAgIHNubXBkIC1IIDI+IGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wZC5vcHRpb25zDQorDQorICAgIFVwZGF0ZSB0aGVzZSBmaWxlcyB1c2luZyBhbiBIVE1MIGVkaXRvciAoTnZ1IGV0Yyk6DQorDQorICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wLmNvbmYud2luMzIuaHRtbA0KKyAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcGQuY29uZi53aW4zMi5odG1sDQorICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wdHJhcGQuY29uZi53aW4zMi5odG1sDQorIA0KKyAgICBPbmx5IGFkZCB0aGUgcmVsZXZlbnQgc2VjdGlvbiB0byBlYWNoIGZpbGUgZnJvbSB0aGUgLm9wdGlvbnMgZmlsZXMNCisgICAgY3JlYXRlZCBhYm92ZSwgZW5zdXJlIHRoZSBmb250IGlzIHNldCB0byBmaXhlZCB3aWR0aC4NCisNCisgICAgVGlkeSBlYWNoIGZpbGUgdXNpbmcgdGlkeSB1bmRlciBXaW5kb3dzIChvciB0cmFuc2ZlciB0byBMaW51eCBhbmQgdGlkeQ0KKyAgICB1c2luZyBMaW51eCk6DQorDQorICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXB0cmFwZC5jb25mLndpbjMyLmh0bWwNCisgICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcGQuY29uZi53aW4zMi5odG1sDQorICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXAuY29uZi53aW4zMi5odG1sDQorDQorNi4gIEVkaXQgYzpcdGVtcFxuZXQtc25tcFxodG1sXE5ldC1TTk1QLmhocCBhbmQgdXBkYXRlIHRoZSB2ZXJzaW9uIGZvciB0aGUgDQorICAgICdUaXRsZScgdmFyaWFibGUuDQorDQorNy4gIFJ1biBIVE1MIFdvcmtzaG9wDQorDQorOC4gIE9wZW4gYzpcdGVtcFxuZXQtc25tcFxodG1sXE5ldC1TTk1QLmhocA0KKw0KKzkuICBDbGljayBGaWxlIC0gQ29tcGlsZQ0KKw0KKzEwLiBTZWxlY3QgJ0M6XHRlbXBcbmV0LXNubXBcaHRtbFxOZXQtU05NUC5oaHAnIGFzIHRoZSBmaWxlbmFtZQ0KKw0KKzExLiBDbGljayBDb21waWxlDQorDQorMTIuIFlvdSBzaG91bGQgbm93IGhhdmUgYSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcTmV0LVNOTVAuY2htIGZpbGUuDQorDQorMTMuIExhdW5jaCB0aGUgZmlsZSBhbmQgZW5zdXJlIGV2ZXJ5IGNvbnRlbnQgaXRlbSBkaXNwbGF5cyB0aGUgY29ycmVjdCBwYWdlLg0KKw0KKw0KK0NvbWJpbmluZyB0aGUgYmluYXJpZXMgYW5kIEhUTUxIZWxwIGZpbGVzDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCisxLiAgQ29weSB0aGUgSFRNTCBIZWxwIGZpbGUgdG8gYzpcdXNyXGRvY3M6DQorDQorICAgIGNvcHkgYzpcdGVtcFxOZXQtU05NUFxodG1sXE5ldC1TTk1QLmNobSBjOlx1c3JcZG9jc1wNCisNCisNCitCdWxkaW5nIGEgTnVsbFNvZnQgaW5zdGFsbGVyIHBhY2thZ2UNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCitSZXF1aXJlbWVudHMNCistLS0tLS0tLS0tLS0NCisNCisgLVdpbmRvd3MNCisgLU51bGxzb2Z0IFNjcmlwdGFibGUgSW5zdGFsbCBTeXN0ZW0gMi4wIC0gaHR0cDovL25zaXMuc291cmNlZm9yZ2UubmV0L2hvbWUvDQorDQorMS4gIENvbXBsZXRlIHRoZSBzZWN0aW9ucyBhYm92ZS4NCisNCisyLiAgTGF1bmNoIHRoZSAnTnVsbHNvZnQgSW5zdGFsbCBTeXN0ZW0gKE5TSVMgMi4wKScNCisNCiszLiAgU2VsZWN0ICdNYWtlTlNJU1cgKGNvbXBpbGVyIGludGVyZmFjZSknDQorDQorNC4gIENsaWNrIEZpbGUgLSBMb2FkIFNjcmlwdA0KKw0KKzUuICBTZWxlY3QgYzpcdXNyXG5ldC1zbm1wLm5zaQ0KKw0KKzYuICBZb3Ugc2hvdWxkIG5vdyBoYXZlIGEgYzpcdXNyXE5ldC1TTk1QLXgueC54LXguZXhlIGJpbmFyeSBpbnN0YWxsZXIgDQorICAgIHBhY2thZ2UNCisNCis3LiAgVGVzdCB0aGUgcGFja2FnZToNCisNCisgICAgUGVyZm9ybSB0aGUgYmFzaWMgdGVzdHMgYmVsb3cgb24gdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6DQorDQorICAgICAgMzItYml0IHBhY2thZ2U6DQorICAgICAgICBXaW5kb3dzIDIwMDANCisgICAgICAgIFdpbmRvd3MgWFAgMzItYml0DQorICAgICAgNjQtYml0IHBhY2thZ2U6DQorICAgICAgICBXaW5kb3dzIDcgNjQtYml0DQorDQorICAgIFRlc3RzOg0KKw0KKyAgICBhKSBJbnN0YWxsYXRpb24gd2l0aCBXaW5FeHRETEwgYW5kIFNTTA0KKyAgICBiKSBDb25maWd1cmUgc25tcGQgdG8gYWxsb3cgYSBxdWVyeQ0KKyAgICBjKSBJbnN0YWxsIHNubXBkIGFuZCBzbm1wdHJhcGQgc2VydmljZXMNCisgICAgZCkgU3RvcCB0aGUgTWljcm9zb2Z0IFNOTVAgc2VydmljZSBhbmQgc3RhcnQgYm90aCBOZXQtU05NUCBzZXJ2aWNlcw0KKyAgICBlKSBzbm1wd2FsayAtdiAxIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzdGVtDQorICAgIGYpIEluc3RhbGwgUGVybCBtb2R1bGVzDQorICAgIGcpIExhdW5jaCBuZXQtc25tcC1wZXJsLXRlc3QucGwNCisNCis4LiAgQ29tcGFyZSB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzIG9mIHRoZSBjb21waWxlZCBmb2xkZXIgd2l0aCB0aGUgaW5zdGFsbGVkDQorICAgIGZvbGRlciB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1pc3NpbmcgTUlCIGZpbGVzIGV0Yy4gIElmIHRoZXJlIGFyZSBtaXNzaW5nDQorICAgIGZpbGVzLCBtb2RpZnkgbmV0LXNubXAubnNpIGFuZCByZWJ1aWxkIGlmIHJlcXVpcmVkIGFuZCB1cGRhdGUgbmV0LXNubXAubnNpDQorICAgIGV0YyBpbiBTVk4uDQorDQorOS4gIENyZWF0ZSBhIC56aXAgZmlsZSBvZiBjOlx1c3IgZm9yIGFyY2hpdmUgcHVycG9zZXMuDQorDQpkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9SRUFETUUudHh0IGIvd2luMzIvZGlzdC9SRUFETUUudHh0CmluZGV4IDlkYTQ4ZWMuLjMwN2M4NjAgMTAwNjQ0Ci0tLSBhL3dpbjMyL2Rpc3QvUkVBRE1FLnR4dAorKysgYi93aW4zMi9kaXN0L1JFQURNRS50eHQKQEAgLTEsMTg0ICsxLDE4OCBAQAotICAgICAgIFJFQURNRSBmaWxlIGZvciB3aW4zMiBiaW5hcnkgcmVsZWFzZSBvZiBOZXQtU05NUAotCi1ESVNDTEFJTUVSCi0KLSAgVGhlIEF1dGhvcnMgYXNzdW1lIG5vIHJlc3BvbnNpYmlsaXR5IGZvciBkYW1hZ2Ugb3IgbG9zcyBvZiBzeXN0ZW0KLSAgcGVyZm9ybWFuY2UgYXMgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVzdWx0IG9mIHRoZSB1c2Ugb2YgdGhpcwotICBzb2Z0d2FyZS4gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IKLSAgaW1wbGllZCB3YXJyYW50eS4KLQotCi1UQUJMRSBPRiBDT05URU5UUwotCi0gIERpc2NsYWltZXIKLSAgVGFibGUgT2YgQ29udGVudHMKLSAgSW50cm9kdWN0aW9uCi0qIEluc3RhbGxhdGlvbgotKiBDby1leGlzdGVuY2Ugd2l0aCBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlcwotICBJbnN0YWxsYXRpb24gLSBQZXJsIG1vZHVsZQotKiBDb25maWd1cmF0aW9uCi0gIEJ1aWxkIEluZm9ybWF0aW9uCi0KLSAgKiA9IFJlcXVpcmVkIFJlYWRpbmcuCi0KLQotSU5UUk9EVUNUSU9OCi0KLSAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGEgY29tcGlsZWQgYmluYXJ5IHJlbGVhc2Ugb2YgTmV0LVNOTVAgZm9yIFdpbmRvd3MgTlQvMjAwMC9YUC4KLSAgVGhlIGJpbmFyaWVzIHJ1biB1bm1vZGlmaWVkIG9uIFdpbmRvd3MgOTguICBUaGUgInNubXBkIiBhbmQgInNubXB0cmFwZCIgcHJvZ3JhbSBjYW4gCi0gIG5vdCBydW4gYXMgc2VydmljZXMgb24gV2luZG93cyA5OCwgYXMgV2luZG93cyA5OCBkb2VzIG5vdCBwcm92aWRlIGEgU2VydmljZSBDb250cm9sIAotICBNYW5hZ2VyIChTQ00pLgotCi0gIERvY3VtZW50YXRpb24gZm9yIHVzaW5nIHRoZSBhcHBsaWNhdGlvbnMgaXMgYXZhaWxhYmxlIGluIHRoZSBXaW5kb3dzIGhlbHAgZmlsZQotICAoTmV0LVNOTVAuY2htKSBsb2NhdGVkIGluIHRoZSBkb2NzIGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFsbGVkIHBhY2thZ2UuICBIZWxwIGlzIGFsc28KLSAgYXZhaWxhYmxlIGZyb20gdGhlIHdlYiBzaXRlIGF0IGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2RvY3MvLgotCi0KLUlOU1RBTExBVElPTgotCi0gIFRoZSBOZXQtU05NUCBXaW5kb3dzIGluc3RhbGxlciBwYWNrYWdlIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6Ci0KLSAgLSBJbnN0YWxscyB0aGUgTmV0LVNOTVAgYmluYXJpZXMsIE1JQiBmaWxlcyBhbmQgQWN0aXZlU3RhdGUgNS44LnggUGVybCBQUE0gCi0gICAgcGFja2FnZSBpbnRvIHRoZSBpbnN0YWxsYXRpb24gZm9sZGVyIChkZWZhdWx0cyB0byBjOlx1c3IpLiAKLSAgLSBBZGRzIChpbnN0YWxsIGZvbGRlcilcYmluIHRvIHRoZSBzeXN0ZW0gUEFUSC4gCi0gIC0gQWRkcyB0aGUgZm9sbG93aW5nIHJlZ2lzdHJ5IGtleXM6Ci0gICAgLSBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcTmV0LVNOTVBcU05NUENPTkZQQVRIPShpbnN0YWxsIGZvbGRlcikvZXRjL3NubXA7Ci0gICAgICAoaW5zdGFsbCBmb2xkZXIpL3NubXAvcGVyc2lzdAotICAgIC0gSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXE5ldC1TTk1QXFNOTVBTSEFSRVBBVEg9KGluc3RhbGwgZm9sZGVyKS9zaGFyZS9zbm1wCi0gIC0gQ3JlYXRlcyBhbiBzbm1wLmNvbmYgZmlsZSBpbiBTTk1QQ09ORlBBVEggd2hpY2ggZGVmaW5lczogCi0gICAgLSBtaWJkaXJzIChpbnN0YWxsIGZvbGRlcikvc2hhcmUvc25tcC9taWJzIAotICAgIC0gcGVyc2lzdGVudERpciAoaW5zdGFsbCBmb2xkZXIpL3NubXAvcGVyc2lzdCAKLSAgICAtIHRlbXBGaWxlUGF0dGVybiAoaW5zdGFsbCBmb2xkZXIpL3RlbXAvc25tcGRYWFhYWFggCi0KLSAgQWZ0ZXIgaW5zdGFsbGluZyB1c2luZyB0aGUgc2V0dXAgd2l6YXJkLCBwZXJmb3JtIGEgcXVpY2sgdGVzdCB0byB2ZXJpZnkgdGhhdCAKLSAgTmV0LVNOTVAgd2FzIGluc3RhbGxlZCBjb3JyZWN0bHkuICBSdW4gdGhlIGZvbGxvd2luZyBmcm9tIGEgY29tbWFuZCBwcm9tcHQ6Ci0KLSAgICBzbm1wdHJhbnNsYXRlIC1JUiAtVGQgSUYtTUlCOjpsaW5rRG93bgotCi0gIFRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBnZW5lcmF0ZToKLQotICAgIElGLU1JQjo6bGlua0Rvd24KLSAgICBsaW5rRG93biBOT1RJRklDQVRJT04tVFlQRQotICAgICAgLS0gRlJPTSAgICAgICBJRi1NSUIKLSAgICAgIE9CSkVDVFMgICAgICAgeyBpZkluZGV4LCBpZkFkbWluU3RhdHVzLCBpZk9wZXJTdGF0dXMgfQotICAgICAgREVTQ1JJUFRJT04gICAiQSBsaW5rRG93biB0cmFwIHNpZ25pZmllcyB0aGF0IHRoZSBTTk1QIGVudGl0eSwgYWN0aW5nIGluCi0gICAgICAgICAgICAgICAgYW4gYWdlbnQgcm9sZSwgaGFzIGRldGVjdGVkIHRoYXQgdGhlIGlmT3BlclN0YXR1cyBvYmplY3QgZm9yCi0gICAgICAgICAgICAgICAgb25lIG9mIGl0cyBjb21tdW5pY2F0aW9uIGxpbmtzIGlzIGFib3V0IHRvIGVudGVyIHRoZSBkb3duCi0gICAgICAgICAgICAgICAgc3RhdGUgZnJvbSBzb21lIG90aGVyIHN0YXRlIChidXQgbm90IGZyb20gdGhlIG5vdFByZXNlbnQKLSAgICAgICAgICAgICAgICBzdGF0ZSkuICBUaGlzIG90aGVyIHN0YXRlIGlzIGluZGljYXRlZCBieSB0aGUgaW5jbHVkZWQgdmFsdWUKLSAgICAgICAgICAgICAgICBvZiBpZk9wZXJTdGF0dXMuIgotICAgIDo6PSB7IGlzbygxKSBvcmcoMykgZG9kKDYpIGludGVybmV0KDEpIHNubXBWMig2KSBzbm1wTW9kdWxlcygzKSBzbm1wTUlCKDEpIAotICAgICAgICAgIHNubXBNSUJPYmplY3RzKDEpIHNubXBUcmFwcyg1KSAzIH0KLQotICBJZiBzbm1wdHJhbnNsYXRlIGNhbiBub3QgYmUgZm91bmQsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIE5ldC1TTk1QIGJpbiBmb2xkZXIgaXMgaW4gCi0gIHlvdXIgc3lzdGVtIHBhdGguCi0KLSAgSWYgeW91IGdldCBNb2R1bGUgbm90IGZvdW5kIGVycm9ycyBzdWNoIGFzICdJUC1NSUI6IE1vZHVsZSBub3QgZm91bmQnLCB0aGUgYXBwbGljYXRpb24KLSAgd2FzIG5vdCBhYmxlIHRvIGxvY2F0ZSB0aGUgbWlicyBmb2xkZXIuICBWZXJpZnkgdGhhdCBTTk1QQ09ORlBBVEggaXMgc2V0IHRvIHRoZSBsb2NhdGlvbgotICBvZiB0aGUgY29uZmlndXJhdGlvbiBmb2xkZXIgYW5kIHRoZSBwZXJzaXN0ZW50IHN0b3JhZ2UgZm9sZGVyIAotICAoYzovdXNyL2V0Yy9zbm1wO2M6L3Vzci9zbm1wL3BlcnNpc3QgZm9yIGV4YW1wbGUpLiAgQWxzbyB2ZXJpZnkgdGhhdCB0aGVyZSBpcyBhbiAKLSAgc25tcC5jb25mIGZpbGUgdGhhdCBjb250YWlucyBjb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgbWliZGlycywgcGVyc2lzdGVudERpciBhbmQgCi0gIHRlbXBGaWxlUGF0dGVybi4gIEZvciBleGFtcGxlOgotCi0gICAgbWliZGlycyBjOi91c3Ivc2hhcmUvc25tcC9taWJzCi0gICAgcGVyc2lzdGVudERpciBjOi91c3Ivc25tcC9wZXJzaXN0Ci0gICAgdGVtcEZpbGVQYXR0ZXJuIEM6L3Vzci90ZW1wL3NubXBkWFhYWFhYCi0KLSAgRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhlIHJlZ2lzdHJ5IHRvIGNvbmZpZ3VyZQotICBOZXQtU05NUCwgc2VlICdPdmVydmlldycgZG9jdW1lbnQgaW4gdGhlIENvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgTmV0LVNOTVAgaGVscCBmaWxlLgotCi0gIEZvciBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIHNubXBkLmV4ZSBhbmQgc25tcHRyYXBkLmV4ZSBhcyBhIFdpbmRvd3Mgc2VydmljZSwgc2VlIAotICAnSG93IHRvIFJlZ2lzdGVyIHRoZSBOZXQtU05NUCBBZ2VudCBhbmQgVHJhcCBEYWVtb24gYXMgV2luZG93cyBzZXJ2aWNlcycgaW4gUkVBRE1FLndpbjMyLgotCi0KLUNPLUVYSVNURU5DRSBXSVRIIE1JQ1JPU09GVCBTTk1QIFNFUlZJQ0VTCi0KLVBsZWFzZSBzZWUgdGhlIHNlY3Rpb24gJ0NvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzJyBpbiBSRUFETUUud2luMzIKLQotCi1JTlNUQUxMQVRJT04gLSBQRVJMIE1PRFVMRQotCi0gIEluY2x1ZGVkIGluIHRoZSAoaW5zdGFsbCBmb2xkZXIpXFBlcmwgZm9sZGVyIGlzIGFuIEFjdGl2ZVN0YXRlIFBlcmwgCi0gIDUuOC54LiBQUE0gcGFja2FnZS4gIE5vdGU6ICBJbiBwcmV2aW91cyB2ZXJzaW9uIG9mIE5ldC1TTk1QLCB0aGUgUFBNCi0gIHBhY2thZ2Ugd2FzIGNhbGxlZCBOZXQtU05NUC5wcGQuICBUaGUgcGFja2FnZSBoYXMgYmVlbiByZW5hbWVkIHRvCi0gIE5ldFNOTVAucHBkIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggdGhlIE5ldDo6U05NUCBwYWNrYWdlIGF2YWlsYWJsZQotICBmcm9tIEFjdGl2ZVN0YXRlLgotCi0gIFRoZSBQZXJsIG1vZHVsZXMgcmVxdWlyZSB0aGUgV2luMzIgUkVHRVggKFJlZ3VsYXIgRXhwcmVzc2lvbikgcGFja2FnZSB3aGljaCAKLSAgaXMgYXZhaWxhYmxlIGZyb206Ci0KLSAgICBodHRwOi8vcGVvcGxlLmRlbHBoaWZvcnVtcy5jb20vZ2pjL2dudV9yZWdleC5odG1sCi0KLSAgRG93bmxvYWQgZ251X3JlZ2V4LmV4ZSwgY29weSBpdCB0byBhIHRlbXBvcmFyeSBmaWxlIGFuZCBleGVjdXRlIGl0IHRvIAotICBleHRyYWN0IHRoZSBmaWxlcy4KLQotICBDb3B5IHRoZSBleHRyYWN0ZWQgZ251X3JlZ2V4LmRsbCB0byB5b3VyICV3aW5kaXIlXHN5c3RlbTMyIGZvbGRlci4KLQotICBSZW1vdmUgYW55IGV4aXN0aW5nIE5ldC1TTk1QIFBlcmwgbW9kdWxlczoKLQotICAgIHBwbSByZW1vdmUgTmV0U05NUAotCi0gIEluc3RhbGwgdGhlIFBlcmwgbW9kdWxlczoKLQotICAgIGNkIChpbnN0YWxsIGZvbGRlcilcUGVybAotICAgIHBwbSBpbnN0YWxsIE5ldFNOTVAucHBkCi0KLSAgUGVyZm9ybSBhIGJhc2ljIHRlc3QgdXNpbmc6Ci0KLSAgICBuZXQtc25tcC1wZXJsLXRlc3QucGwKLQotCi1DT05GSUdVUkFUSU9OCi0KLSAgQWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgJVNOTVBDT05GUEFUSCUgZm9sZGVyLgotCi0gIE5vdGU6IEFsbCBwYXRocyBpbiBjb25maWd1cmF0aW9uIGZpbGVzIHNob3VsZCB1c2UgZm9yd2FyZCBzbGFzaGVzIChVbml4IHN0eWxlKSwgCi0gIE5PVCBiYWNrIHNsYXNoZXMuICBFeGFtcGxlOiBjOi91c3IKLQotICBJbmNsdWRlZCBpcyBhIFBlcmwgc2NyaXB0IGNhbGxlZCBzbm1wY29uZiB3aGljaCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgCi0gIGNvbmZpZ3VyYXRpb24gZmlsZXMuICAKLQotICBEb2N1bWVudGF0aW9uIGZvciB1c2luZyB0aGUgc25tcGNvbmYgaXMgYXZhaWxhYmxlIGluIHRoZSBXaW5kb3dzIGhlbHAgZmlsZQotICAoTmV0LVNOTVAuY2htKSBsb2NhdGVkIGluIHRoZSBkb2NzIGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFsbGVkIHBhY2thZ2UuICBIZWxwIGlzIGFsc28KLSAgYXZhaWxhYmxlIGZyb20gdGhlIHdlYiBzaXRlIGF0IGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2RvY3MvLgotCi0gIFRvIHJ1biBzbm1wY29uZiwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lOgotCi0gICAgIHNubXBjb25mIC1pCi0KLQotQlVJTEQgSU5GT1JNQVRJT04KLQotICBOYW1lOgkJCW5ldC1zbm1wLXgueC54LTEud2luMzIuZXhlCi0gIFVSTDoJCQlodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZwotICBCdWlsZCBkYXRlOgkJCi0gIEJ1aWx0IGJ5OgkJCi0gIEluc3RhbGxlciBQYWNrYWdlIGJ5OiAKLSAgCi0gIE9TOgkJCVdpbmRvd3MgMjAwMCBTUDQKLSAgQ29tcGlsZXI6CQlNU1ZDKysgNi4wIFNQNQotICBQbGF0Zm9ybSBTREs6CQlGZWJydWFyeSAyMDAzCi0gIFBlcmw6CQkJQWN0aXZlUGVybCA1LjguMiBidWlsZCA4MDgKLSAgUkVHRVg6CQlnbnVfcmVnZXguZXhlICgwLjEyKSAtIGh0dHA6Ly9wZW9wbGUuZGVscGhpZm9ydW1zLmNvbS9namMvZ251X3JlZ2V4Lmh0bWwKLQotICBTb3VyY2U6IAkJbmV0LXNubXAteC54LngudGFyLmd6Ci0gIERlc3RpbmF0aW9uOiAgCWM6XHVzcgotICBQcm9qZWN0OgkJd2luMzJzZGsuZHN3IC8gbGliZGxsLmRzdwotICBMaWJyYXJ5OgkJbmV0c25tcCBmb3IgYXBwbGljYXRpb25zLCBuZXRzbm1wLmRsbCBmb3IgUGVybCBtb2R1bGVzCi0gIE9wZW5TU0w6CQluL2EKLQotCi0gIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBkZWZhdWx0IHBhdGhzIGFyZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbnM6Ci0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBuZXQtc25tcC1jb25maWcuaCBkZWZpbmUgICB8IHZhbHVlICAgICAgICAgICAgICAgICAgICB8IG9wdGlvbmFsIGVudmlyb25tZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdmFyaWFibGUKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBERUZBVUxUX01JQkRJUlMgICAgICAgICAgICB8IGM6L3Vzci9zaGFyZS9zbm1wL21pYnMgICB8IE1JQkRJUlMKLSAgU05NUERMTU9EUEFUSCAgICAgICAgICAgICAgfCBjOi91c3IvbGliL2RsbW9kICAgICAgICAgfCBTTk1QRExNT0RQQVRICi0gIFNOTVBMSUJQQVRIICAgICAgICAgICAgICAgIHwgYzovdXNyL2xpYiAgICAgICAgICAgICAgIHwgU05NUExJQlBBVEgKLSAgU05NUFNIQVJFUEFUSCAgICAgICAgICAgICAgfCBjOi91c3Ivc2hhcmUvc25tcCAgICAgICAgfCBTTk1QU0hBUkVQQVRICi0gIFNOTVBDT05GUEFUSCAgICAgICAgICAgICAgIHwgYzovdXNyL2V0Yy9zbm1wICAgICAgICAgIHwgU05NUENPTkZQQVRICi0gIFBFUlNJU1RFTlRfRElSRUNUT1JZICAgICAgIHwgYzovdXNyL3NubXAvcGVyc2lzdCAgICAgIHwgU05NUF9QRVJTSVNURU5UX0RJUgotICBORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOICB8IGM6L3Vzci90ZW1wL3NubXBkWFhYWFhYICB8IAotCisgICAgICAgUkVBRE1FIGZpbGUgZm9yIHdpbjMyIGJpbmFyeSByZWxlYXNlIG9mIE5ldC1TTk1QDQorDQorRElTQ0xBSU1FUg0KKw0KKyAgVGhlIEF1dGhvcnMgYXNzdW1lIG5vIHJlc3BvbnNpYmlsaXR5IGZvciBkYW1hZ2Ugb3IgbG9zcyBvZiBzeXN0ZW0NCisgIHBlcmZvcm1hbmNlIGFzIGEgZGlyZWN0IG9yIGluZGlyZWN0IHJlc3VsdCBvZiB0aGUgdXNlIG9mIHRoaXMNCisgIHNvZnR3YXJlLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvcg0KKyAgaW1wbGllZCB3YXJyYW50eS4NCisNCisNCitUQUJMRSBPRiBDT05URU5UUw0KKw0KKyAgRGlzY2xhaW1lcg0KKyAgVGFibGUgT2YgQ29udGVudHMNCisgIEludHJvZHVjdGlvbg0KKyogSW5zdGFsbGF0aW9uDQorKiBDby1leGlzdGVuY2Ugd2l0aCBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlcw0KKyAgSW5zdGFsbGF0aW9uIC0gUGVybCBtb2R1bGUNCisqIENvbmZpZ3VyYXRpb24NCisgIEJ1aWxkIEluZm9ybWF0aW9uDQorDQorICAqID0gUmVxdWlyZWQgUmVhZGluZy4NCisNCisNCitJTlRST0RVQ1RJT04NCisNCisgIFRoaXMgcGFja2FnZSBjb250YWlucyBhIGNvbXBpbGVkIGJpbmFyeSByZWxlYXNlIG9mIE5ldC1TTk1QIGZvciBXaW5kb3dzIE5ULzIwMDAvWFAuDQorICBUaGUgYmluYXJpZXMgcnVuIHVubW9kaWZpZWQgb24gV2luZG93cyA5OC4gIFRoZSAic25tcGQiIGFuZCAic25tcHRyYXBkIiBwcm9ncmFtIGNhbiANCisgIG5vdCBydW4gYXMgc2VydmljZXMgb24gV2luZG93cyA5OCwgYXMgV2luZG93cyA5OCBkb2VzIG5vdCBwcm92aWRlIGEgU2VydmljZSBDb250cm9sIA0KKyAgTWFuYWdlciAoU0NNKS4NCisNCisgIERvY3VtZW50YXRpb24gZm9yIHVzaW5nIHRoZSBhcHBsaWNhdGlvbnMgaXMgYXZhaWxhYmxlIGluIHRoZSBXaW5kb3dzIGhlbHAgZmlsZQ0KKyAgKE5ldC1TTk1QLmNobSkgbG9jYXRlZCBpbiB0aGUgZG9jcyBkaXJlY3Rvcnkgb2YgdGhlIGluc3RhbGxlZCBwYWNrYWdlLiAgSGVscCBpcyBhbHNvDQorICBhdmFpbGFibGUgZnJvbSB0aGUgd2ViIHNpdGUgYXQgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvZG9jcy8uDQorDQorDQorSU5TVEFMTEFUSU9ODQorDQorICBUaGUgTmV0LVNOTVAgV2luZG93cyBpbnN0YWxsZXIgcGFja2FnZSBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHRhc2tzOg0KKw0KKyAgLSBJbnN0YWxscyB0aGUgTmV0LVNOTVAgYmluYXJpZXMsIE1JQiBmaWxlcyBhbmQgQWN0aXZlU3RhdGUgNS44LnggUGVybCBQUE0gDQorICAgIHBhY2thZ2UgaW50byB0aGUgaW5zdGFsbGF0aW9uIGZvbGRlciAoZGVmYXVsdHMgdG8gYzpcdXNyKS4gDQorICAtIEFkZHMgKGluc3RhbGwgZm9sZGVyKVxiaW4gdG8gdGhlIHN5c3RlbSBQQVRILiANCisgIC0gQWRkcyB0aGUgZm9sbG93aW5nIHJlZ2lzdHJ5IGtleXM6DQorICAgIC0gSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXE5ldC1TTk1QXFNOTVBDT05GUEFUSD0oaW5zdGFsbCBmb2xkZXIpL2V0Yy9zbm1wOw0KKyAgICAgIChpbnN0YWxsIGZvbGRlcikvc25tcC9wZXJzaXN0DQorICAgIC0gSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXE5ldC1TTk1QXFNOTVBTSEFSRVBBVEg9KGluc3RhbGwgZm9sZGVyKS9zaGFyZS9zbm1wDQorICAtIENyZWF0ZXMgYW4gc25tcC5jb25mIGZpbGUgaW4gU05NUENPTkZQQVRIIHdoaWNoIGRlZmluZXM6IA0KKyAgICAtIG1pYmRpcnMgKGluc3RhbGwgZm9sZGVyKS9zaGFyZS9zbm1wL21pYnMgDQorICAgIC0gcGVyc2lzdGVudERpciAoaW5zdGFsbCBmb2xkZXIpL3NubXAvcGVyc2lzdCANCisgICAgLSB0ZW1wRmlsZVBhdHRlcm4gKGluc3RhbGwgZm9sZGVyKS90ZW1wL3NubXBkWFhYWFhYIA0KKw0KKyAgQWZ0ZXIgaW5zdGFsbGluZyB1c2luZyB0aGUgc2V0dXAgd2l6YXJkLCBwZXJmb3JtIGEgcXVpY2sgdGVzdCB0byB2ZXJpZnkgdGhhdCANCisgIE5ldC1TTk1QIHdhcyBpbnN0YWxsZWQgY29ycmVjdGx5LiAgUnVuIHRoZSBmb2xsb3dpbmcgZnJvbSBhIGNvbW1hbmQgcHJvbXB0Og0KKw0KKyAgICBzbm1wdHJhbnNsYXRlIC1JUiAtVGQgSUYtTUlCOjpsaW5rRG93bg0KKw0KKyAgVGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGdlbmVyYXRlOg0KKw0KKyAgICBJRi1NSUI6OmxpbmtEb3duDQorICAgIGxpbmtEb3duIE5PVElGSUNBVElPTi1UWVBFDQorICAgICAgLS0gRlJPTSAgICAgICBJRi1NSUINCisgICAgICBPQkpFQ1RTICAgICAgIHsgaWZJbmRleCwgaWZBZG1pblN0YXR1cywgaWZPcGVyU3RhdHVzIH0NCisgICAgICBERVNDUklQVElPTiAgICJBIGxpbmtEb3duIHRyYXAgc2lnbmlmaWVzIHRoYXQgdGhlIFNOTVAgZW50aXR5LCBhY3RpbmcgaW4NCisgICAgICAgICAgICAgICAgYW4gYWdlbnQgcm9sZSwgaGFzIGRldGVjdGVkIHRoYXQgdGhlIGlmT3BlclN0YXR1cyBvYmplY3QgZm9yDQorICAgICAgICAgICAgICAgIG9uZSBvZiBpdHMgY29tbXVuaWNhdGlvbiBsaW5rcyBpcyBhYm91dCB0byBlbnRlciB0aGUgZG93bg0KKyAgICAgICAgICAgICAgICBzdGF0ZSBmcm9tIHNvbWUgb3RoZXIgc3RhdGUgKGJ1dCBub3QgZnJvbSB0aGUgbm90UHJlc2VudA0KKyAgICAgICAgICAgICAgICBzdGF0ZSkuICBUaGlzIG90aGVyIHN0YXRlIGlzIGluZGljYXRlZCBieSB0aGUgaW5jbHVkZWQgdmFsdWUNCisgICAgICAgICAgICAgICAgb2YgaWZPcGVyU3RhdHVzLiINCisgICAgOjo9IHsgaXNvKDEpIG9yZygzKSBkb2QoNikgaW50ZXJuZXQoMSkgc25tcFYyKDYpIHNubXBNb2R1bGVzKDMpIHNubXBNSUIoMSkgDQorICAgICAgICAgIHNubXBNSUJPYmplY3RzKDEpIHNubXBUcmFwcyg1KSAzIH0NCisNCisgIElmIHNubXB0cmFuc2xhdGUgY2FuIG5vdCBiZSBmb3VuZCwgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgTmV0LVNOTVAgYmluIGZvbGRlciBpcyBpbiANCisgIHlvdXIgc3lzdGVtIHBhdGguDQorDQorICBJZiB5b3UgZ2V0IE1vZHVsZSBub3QgZm91bmQgZXJyb3JzIHN1Y2ggYXMgJ0lQLU1JQjogTW9kdWxlIG5vdCBmb3VuZCcsIHRoZSBhcHBsaWNhdGlvbg0KKyAgd2FzIG5vdCBhYmxlIHRvIGxvY2F0ZSB0aGUgbWlicyBmb2xkZXIuICBWZXJpZnkgdGhhdCBTTk1QQ09ORlBBVEggaXMgc2V0IHRvIHRoZSBsb2NhdGlvbg0KKyAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9sZGVyIGFuZCB0aGUgcGVyc2lzdGVudCBzdG9yYWdlIGZvbGRlciANCisgIChjOi91c3IvZXRjL3NubXA7YzovdXNyL3NubXAvcGVyc2lzdCBmb3IgZXhhbXBsZSkuICBBbHNvIHZlcmlmeSB0aGF0IHRoZXJlIGlzIGFuIA0KKyAgc25tcC5jb25mIGZpbGUgdGhhdCBjb250YWlucyBjb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgbWliZGlycywgcGVyc2lzdGVudERpciBhbmQgDQorICB0ZW1wRmlsZVBhdHRlcm4uICBGb3IgZXhhbXBsZToNCisNCisgICAgbWliZGlycyBjOi91c3Ivc2hhcmUvc25tcC9taWJzDQorICAgIHBlcnNpc3RlbnREaXIgYzovdXNyL3NubXAvcGVyc2lzdA0KKyAgICB0ZW1wRmlsZVBhdHRlcm4gQzovdXNyL3RlbXAvc25tcGRYWFhYWFgNCisNCisgIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHRoZSByZWdpc3RyeSB0byBjb25maWd1cmUNCisgIE5ldC1TTk1QLCBzZWUgJ092ZXJ2aWV3JyBkb2N1bWVudCBpbiB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBOZXQtU05NUCBoZWxwIGZpbGUuDQorDQorICBGb3IgaW5mb3JtYXRpb24gb24gcnVubmluZyBzbm1wZC5leGUgYW5kIHNubXB0cmFwZC5leGUgYXMgYSBXaW5kb3dzIHNlcnZpY2UsIHNlZSANCisgICdIb3cgdG8gUmVnaXN0ZXIgdGhlIE5ldC1TTk1QIEFnZW50IGFuZCBUcmFwIERhZW1vbiBhcyBXaW5kb3dzIHNlcnZpY2VzJyBpbiBSRUFETUUud2luMzINCisgIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgTmV0LVNOTVAgSGVscCBmaWxlIGluIHRoZSBTdGFydCBtZW51Lg0KKw0KKw0KK0NPLUVYSVNURU5DRSBXSVRIIE1JQ1JPU09GVCBTTk1QIFNFUlZJQ0VTDQorDQorUGxlYXNlIHNlZSB0aGUgc2VjdGlvbiAnQ28tZXhpc3RlbmNlIHdpdGggTWljcm9zb2Z0IFNOTVAgc2VydmljZXMnIGluIFJFQURNRS53aW4zMiB3aGljaCANCitjYW4gYmUgZm91bmQgaW4gdGhlIE5ldC1TTk1QIEhlbHAgZmlsZSBpbiB0aGUgU3RhcnQgbWVudS4NCisNCisNCitJTlNUQUxMQVRJT04gLSBQRVJMIE1PRFVMRQ0KKw0KKyAgSW5jbHVkZWQgaW4gdGhlIChpbnN0YWxsIGZvbGRlcilcUGVybCBmb2xkZXIgaXMgYW4gQWN0aXZlU3RhdGUgUGVybCANCisgIDUuOC54LiBQUE0gcGFja2FnZS4gIE5vdGU6ICBJbiBwcmV2aW91cyB2ZXJzaW9uIG9mIE5ldC1TTk1QLCB0aGUgUFBNDQorICBwYWNrYWdlIHdhcyBjYWxsZWQgTmV0LVNOTVAucHBkLiAgVGhlIHBhY2thZ2UgaGFzIGJlZW4gcmVuYW1lZCB0bw0KKyAgTmV0U05NUC5wcGQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCB0aGUgTmV0OjpTTk1QIHBhY2thZ2UgYXZhaWxhYmxlDQorICBmcm9tIEFjdGl2ZVN0YXRlLg0KKw0KKyAgVGhlIFBlcmwgbW9kdWxlcyByZXF1aXJlIHRoZSBXaW4zMiBSRUdFWCAoUmVndWxhciBFeHByZXNzaW9uKSBwYWNrYWdlIHdoaWNoIA0KKyAgaXMgYXZhaWxhYmxlIGZyb206DQorDQorICAgIGh0dHA6Ly9wZW9wbGUuZGVscGhpZm9ydW1zLmNvbS9namMvZ251X3JlZ2V4Lmh0bWwNCisNCisgIERvd25sb2FkIGdudV9yZWdleC5leGUsIGNvcHkgaXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgZXhlY3V0ZSBpdCB0byANCisgIGV4dHJhY3QgdGhlIGZpbGVzLg0KKw0KKyAgQ29weSB0aGUgZXh0cmFjdGVkIGdudV9yZWdleC5kbGwgdG8geW91ciAld2luZGlyJVxzeXN0ZW0zMiBmb2xkZXIuDQorDQorICBSZW1vdmUgYW55IGV4aXN0aW5nIE5ldC1TTk1QIFBlcmwgbW9kdWxlczoNCisNCisgICAgcHBtIHJlbW92ZSBOZXRTTk1QDQorDQorICBJbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXM6DQorDQorICAgIGNkIChpbnN0YWxsIGZvbGRlcilcUGVybA0KKyAgICBwcG0gaW5zdGFsbCBOZXRTTk1QLnBwZA0KKw0KKyAgUGVyZm9ybSBhIGJhc2ljIHRlc3QgdXNpbmc6DQorDQorICAgIG5ldC1zbm1wLXBlcmwtdGVzdC5wbA0KKw0KKw0KK0NPTkZJR1VSQVRJT04NCisNCisgIEFsbCBjb25maWd1cmF0aW9uIGZpbGVzIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlICVTTk1QQ09ORlBBVEglIGZvbGRlci4NCisNCisgIE5vdGU6IEFsbCBwYXRocyBpbiBjb25maWd1cmF0aW9uIGZpbGVzIHNob3VsZCB1c2UgZm9yd2FyZCBzbGFzaGVzIChVbml4IHN0eWxlKSwgDQorICBOT1QgYmFjayBzbGFzaGVzLiAgRXhhbXBsZTogYzovdXNyDQorDQorICBJbmNsdWRlZCBpcyBhIFBlcmwgc2NyaXB0IGNhbGxlZCBzbm1wY29uZiB3aGljaCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgDQorICBjb25maWd1cmF0aW9uIGZpbGVzLiAgDQorDQorICBEb2N1bWVudGF0aW9uIGZvciB1c2luZyB0aGUgc25tcGNvbmYgaXMgYXZhaWxhYmxlIGluIHRoZSBXaW5kb3dzIGhlbHAgZmlsZQ0KKyAgKE5ldC1TTk1QLmNobSkgbG9jYXRlZCBpbiB0aGUgZG9jcyBkaXJlY3Rvcnkgb2YgdGhlIGluc3RhbGxlZCBwYWNrYWdlLiAgSGVscCBpcyBhbHNvDQorICBhdmFpbGFibGUgZnJvbSB0aGUgd2ViIHNpdGUgYXQgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvZG9jcy8uDQorDQorICBUbyBydW4gc25tcGNvbmYsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZToNCisNCisgICAgIHNubXBjb25mIC1pDQorDQorDQorQlVJTEQgSU5GT1JNQVRJT04NCisNCisgIE5hbWU6CQkJbmV0LXNubXAteC54LngtMS53aW4zMi5leGUNCisgIFVSTDoJCQlodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZw0KKyAgQnVpbGQgZGF0ZToJCQ0KKyAgQnVpbHQgYnk6CQkNCisgIEluc3RhbGxlciBQYWNrYWdlIGJ5OiANCisgIE5TSVMgQ29tcGlsZXI6CVZlcnNpb24gMi4zDQorICANCisgIE9TOgkJCVdpbmRvd3MgMjAwMCBTUDQNCisgIENvbXBpbGVyOgkJTVNWQysrIDYuMCBTUDUNCisgIFBsYXRmb3JtIFNESzoJCUZlYnJ1YXJ5IDIwMDMNCisgIFBlcmw6CQkJQWN0aXZlUGVybCA1LjguMiBidWlsZCA4MDgNCisgIFJFR0VYOgkJZ251X3JlZ2V4LmV4ZSAoMC4xMikgLSBodHRwOi8vcGVvcGxlLmRlbHBoaWZvcnVtcy5jb20vZ2pjL2dudV9yZWdleC5odG1sDQorDQorICBTb3VyY2U6IAkJbmV0LXNubXAteC54LngudGFyLmd6DQorICBQYXRjaGVzCQkNCisgIERlc3RpbmF0aW9uOiAgCWM6XHVzcg0KKyAgUHJvamVjdDoJCXdpbjMyc2RrLmRzdyAvIGxpYmRsbC5kc3cNCisgIExpYnJhcnk6CQluZXRzbm1wIGZvciBhcHBsaWNhdGlvbnMsIG5ldHNubXAuZGxsIGZvciBQZXJsIG1vZHVsZXMNCisgIE9wZW5TU0w6CQluL2ENCisNCisNCisgIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBkZWZhdWx0IHBhdGhzIGFyZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbnM6DQorDQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICBuZXQtc25tcC1jb25maWcuaCBkZWZpbmUgICB8IHZhbHVlICAgICAgICAgICAgICAgICAgICB8IG9wdGlvbmFsIGVudmlyb25tZW50DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHZhcmlhYmxlDQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICBERUZBVUxUX01JQkRJUlMgICAgICAgICAgICB8IGM6L3Vzci9zaGFyZS9zbm1wL21pYnMgICB8IE1JQkRJUlMNCisgIFNOTVBETE1PRFBBVEggICAgICAgICAgICAgIHwgYzovdXNyL2xpYi9kbG1vZCAgICAgICAgIHwgU05NUERMTU9EUEFUSA0KKyAgU05NUExJQlBBVEggICAgICAgICAgICAgICAgfCBjOi91c3IvbGliICAgICAgICAgICAgICAgfCBTTk1QTElCUEFUSA0KKyAgU05NUFNIQVJFUEFUSCAgICAgICAgICAgICAgfCBjOi91c3Ivc2hhcmUvc25tcCAgICAgICAgfCBTTk1QU0hBUkVQQVRIDQorICBTTk1QQ09ORlBBVEggICAgICAgICAgICAgICB8IGM6L3Vzci9ldGMvc25tcCAgICAgICAgICB8IFNOTVBDT05GUEFUSA0KKyAgUEVSU0lTVEVOVF9ESVJFQ1RPUlkgICAgICAgfCBjOi91c3Ivc25tcC9wZXJzaXN0ICAgICAgfCBTTk1QX1BFUlNJU1RFTlRfRElSDQorICBORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOICB8IGM6L3Vzci90ZW1wL3NubXBkWFhYWFhYICB8IA0KKw0KZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LmJhdCBiL3dpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MGUxNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvZGlzdC9idWlsZC1iaW5hcnkuYmF0CkBAIC0wLDAgKzEsMyBAQAorQGVjaG8gb2ZmCisKK3BlcmwgJX5kcDBcYnVpbGQtYmluYXJ5LnBsCmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbCBiL3dpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwNjRjYzgKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbApAQCAtMCwwICsxLDUzOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjIAorIyBCdWlsZCBzY3JpcHQgZm9yIE5ldC1TTk1QIGFuZCBNU1ZDCisjIFdyaXR0ZW4gYnkgQWxleCBCdXJnZXIgLSBhbGV4X2JAdXNlcnMuc291cmNlZm9yZ2UubmV0CisjIE1heSAxMHRoLCAyMDA5CisjCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OkNvcHk7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBDd2QgJ2Fic19wYXRoJzsKKworcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKworbXkgJHRhcl9jb21tYW5kOworbXkgJGd6aXBfY29tbWFuZDsKK2ZvciBteSAkbXN5c2JpbmRpciAoKCJDOlxcbXN5c1xcMS4wXFxiaW4iLCAiQzpcXG1pbmd3XFxtc3lzXFwxLjBcXGJpbiIpKSB7CisgICAgJHRhcl9jb21tYW5kID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkbXN5c2JpbmRpciwgInRhci5leGUiKTsKKyAgICAkZ3ppcF9jb21tYW5kID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkbXN5c2JpbmRpciwgImd6aXAuZXhlIik7CisgICAgbGFzdCBpZiAoLWYgJHRhcl9jb21tYW5kKTsKK30KKworaWYgKCEgKC1mICR0YXJfY29tbWFuZCkpIHsKKyAgZGllICgiQ291bGQgbm90IGZpbmQgdGFyIGNvbW1hbmQiKTsKK30KK2Vsc2UgeworICBwcmludCAidGFyIGNvbW1hbmQ6ICAkdGFyX2NvbW1hbmRcbiI7Cit9CitpZiAoISAoLWYgJGd6aXBfY29tbWFuZCkpIHsKKyAgZGllICgiQ291bGQgbm90IGZpbmQgZ3ppcCBjb21tYW5kIik7Cit9CitlbHNlIHsKKyAgcHJpbnQgImd6aXAgY29tbWFuZDogJGd6aXBfY29tbWFuZFxuIjsKK30KKworbXkgJG1ha2Vuc2lzOworZm9yIG15ICRuc2lzZGlyICgoIkM6XFxQcm9ncmFtIEZpbGVzXFxOU0lTIiwgIkM6XFxQcm9ncmFtIEZpbGVzICh4ODYpXFxOU0lTIikpIHsKKyAgICAkbWFrZW5zaXMgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRuc2lzZGlyLCAibWFrZW5zaXMuZXhlIik7CisgICAgbGFzdCBpZiAoLWYgJG1ha2Vuc2lzKTsKK30KK2RpZSgibWFrZW5zaXMuZXhlIG5vdCBmb3VuZCIpIGlmICghKC1mICRtYWtlbnNpcykpOworCitteSAkdGFyZ2V0X2FyY2ggPSAkRU5We1RBUkdFVF9DUFV9ID8gJEVOVntUQVJHRVRfQ1BVfSA6ICRFTlZ7UGxhdGZvcm19ID8KKyAgICAgICAgICAgICAgICAgICRFTlZ7UGxhdGZvcm19IDogIng4NiI7CitteSAkb3BlbnNzbGRpciA9ICR0YXJnZXRfYXJjaCBlcSAieDY0IiA/ICJDOlxcT3BlblNTTC1XaW42NCIgOgorICAgICAgICAgICAgICAgICAiQzpcXE9wZW5TU0wtV2luMzIiOworbXkgJG9wZW5zc2xpbmNkaXIgPSAkb3BlbnNzbGRpciAuICJcXGluY2x1ZGUiOworbXkgJG9wZW5zc2xsaWJkaXIgPSAkb3BlbnNzbGRpciAuICJcXGxpYlxcVkMiOworCitteSAkdmVyc2lvbiA9ICJ1bmtub3duIjsKK215ICR2ZXJzaW9uX2Zvcl9wZXJsID0gInVua25vd24iOworbXkgJHZlcnNpb25fbWFqOworbXkgJHZlcnNpb25fbWluOworbXkgJHZlcnNpb25fcmV2OworbXkgJGluc3RhbGxlcl9leGVfdmVyc2lvbiA9IDE7CitteSAkb3BlbnNzbCA9ICJkaXNhYmxlZCI7CitteSAkYl9pcHY2ID0gImRpc2FibGVkIjsKK215ICRiX3dpbmV4dGRsbCA9ICJkaXNhYmxlZCI7CitteSAkc2RrID0gImRpc2FibGVkIjsKK215ICRkZWZhdWx0X2luc3RhbGxfYmFzZSA9ICJjOi91c3IiOworbXkgJGluc3RhbGxfYmFzZSA9ICRkZWZhdWx0X2luc3RhbGxfYmFzZTsKK215ICRpbnN0YWxsID0gImVuYWJsZWQiOworbXkgJGluc3RhbGxfZGV2ZWwgPSAiZGlzYWJsZWQiOworbXkgJHBlcmwgPSAiZGlzYWJsZWQiOworbXkgJHBlcmxfaW5zdGFsbCA9ICJkaXNhYmxlZCI7CitteSAkbG9nZ2luZyA9ICJlbmFibGVkIjsKK215ICRkZWJ1ZyA9ICJkaXNhYmxlZCI7CitteSAkY29uZmlnT3B0cyA9ICIiOworbXkgJGNUbXAgPSAiIjsKK215ICRsaW5rdHlwZSA9ICJzdGF0aWMiOworbXkgJG9wdGlvbjsKKworbXkgJHNjcmlwdGRpciA9IGRpcm5hbWUoYWJzX3BhdGgoJDApKTsKK215ICR3aW4zMl9kaXIgPSBkaXJuYW1lKCRzY3JpcHRkaXIpOworbXkgJHRvcF9kaXIgPSBkaXJuYW1lKCR3aW4zMl9kaXIpOworbXkgJHBlcmxfZGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCR0b3BfZGlyLCAicGVybCIpOworCitwcmludCAiXG50b3BfZGlyOiAgICAgICR0b3BfZGlyXG4iOworcHJpbnQgIndpbjMyX2RpcjogICAgJHdpbjMyX2RpclxuIjsKK3ByaW50ICJwZXJsX2RpcjogICAgICRwZXJsX2RpclxuIjsKK3ByaW50ICJpbnN0YWxsIGJhc2U6ICRpbnN0YWxsX2Jhc2VcblxuIjsKKworY2hkaXIgJHdpbjMyX2RpcjsKKworaWYgKCAtZCAiZGlzdCIgKSB7IH0KK2Vsc2UgeworICBwcmludCAiXG5QbGVhc2UgY29weSB0aGUgd2luMzIvZGlzdCBmb2xkZXIgZnJvbSB0cnVuayB0byAkd2luMzJfZGlyL1xuXG4iOworICBleGl0OworfQorCitpZiAoISgtZCAkRU5We01TVkNEaXJ9KSAmJiAhKC1kICRFTlZ7VkNJTlNUQUxMRElSfSkgJiYgIWRlZmluZWQoJEVOVntUQVJHRVRfQ1BVfSkpIHsKKyAgcHJpbnQgIlxuUGxlYXNlIHJ1biBWQ1ZBUlMzMi5CQVQgZmlyc3QgdG8gc2V0IHVwIHRoZSBWaXN1YWwgU3R1ZGlvIGJ1aWxkXG4iIC4KKyAgICAgICAgImVudmlyb25tZW50LlxuXG4iOworICBleGl0OworfQorCitpZiAoIC1kICRpbnN0YWxsX2Jhc2UpIHsKKyAgcHJpbnQgIlxuUGxlYXNlIGRlbGV0ZSBvciByZW5hbWUgdGhlICRpbnN0YWxsX2Jhc2UgZm9sZGVyLlxuXG4iOworICBleGl0OworfQorCitteSAkc3lzdGVtX25ldHNubXBkbGwgPSAiJEVOVntXSU5ESVJ9XFxzeXN0ZW0zMlxcbmV0c25tcC5kbGwiOworaWYgKCAtZiAkc3lzdGVtX25ldHNubXBkbGwpIHsKKyAgcHJpbnQgIlxuJHN5c3RlbV9uZXRzbm1wZGxsIHNob3VsZCBiZSByZW5hbWVkIG9yIGRlbGV0ZWQuXG5cbiI7CisgIAorICBwcmludCAiV291bGQgeW91IGxpa2UgbWUgdG8gZGVsZXRlIGl0PyAoeS9uPykiOworICAkfCA9IDE7CisgIG15ICR0ZW1wID0gPFNURElOPjsKKyAgY2hvbXAgJHRlbXA7CisgIGlmIChsYygkdGVtcCkgZXEgInkiIHx8IGxjKCR0ZW1wKSBlcSAieWVzIikgeworICAgIHVubGluayAkc3lzdGVtX25ldHNubXBkbGwgfHwgZGllICJDb3VsZCBub3QgZGVsZXRlIGZpbGUgJHN5c3RlbV9uZXRzbm1wZGxsXG4iOworICB9CisgIGVsc2UgeworICAgIGV4aXQ7CisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgRGV0ZXJtaW5lIHZlcnNpb24gZnJvbSB1bml4IGNvbmZpZ3VyZSBzY3JpcHQKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK215ICR1bml4X2NvbmZpZ3VyZV9pbiA9ICIuLi9jb25maWd1cmUiOworCitvcGVuIChVTklYX0NPTkZJR1VSRV9JTiwgIjwkdW5peF9jb25maWd1cmVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJHVuaXhfY29uZmlndXJlX2luXG4iOworCit3aGlsZSAoPFVOSVhfQ09ORklHVVJFX0lOPikKK3sKKyAgY2hvbXA7CisgIC9QQUNLQUdFX1ZFUlNJT049JyguKiknLzsKKyAgaWYgKCQxIG5lICIiKSB7CisgICAgJHZlcnNpb24gPSAkMTsKKyAgICBsYXN0OworICB9Cit9CitjbG9zZSBVTklYX0NPTkZJR1VSRV9JTjsKKworIyBEZXRlcm1pbmUgdmVyc2lvbiBmb3IgUGVybCAoNCBjaGFyYWN0ZXJzIHdpdGggY29tbWFzKQorJHZlcnNpb25fZm9yX3BlcmwgPSAkdmVyc2lvbjsKK215ICRkb3RDb3VudCA9ICgkdmVyc2lvbiA9fiB0ci8uLy8pOword2hpbGUgKCRkb3RDb3VudCA8IDMpIHsKKyAgJHZlcnNpb25fZm9yX3BlcmwgLj0gIi4wIjsKKyAgJGRvdENvdW50Kys7Cit9CiskdmVyc2lvbl9mb3JfcGVybCA9fiBzL1wuLywvZzsKKworIyBEZXRlcm1pbmUgdmVyc2lvbiBmb3IgTlNJUyBpbnN0YWxsZXIKK215IEB2ZXJzaW9uX2FycmF5ID0gc3BsaXQoL1wuLywgJHZlcnNpb24pOworJHZlcnNpb24gPX4gLy4qP1wuLio/XC4oLiopLzsKKyR2ZXJzaW9uX3JldiA9ICQxIHx8IDA7CiskdmVyc2lvbl9tYWogPSAkdmVyc2lvbl9hcnJheVswXSB8fCAwOworJHZlcnNpb25fbWluID0gJHZlcnNpb25fYXJyYXlbMV0gfHwgMDsKKworcHJpbnQgIk5ldC1TTk1QIHZlcnNpb246ICAgICAgJHZlcnNpb25cbiI7CitwcmludCAiTmV0LVNOTVAgUGVybCB2ZXJzaW9uOiAkdmVyc2lvbl9mb3JfcGVybFxuIjsKK3ByaW50ICJOZXQtU05NUCB2ZXJzaW9uIE1BSjogICR2ZXJzaW9uX21halxuIjsKK3ByaW50ICJOZXQtU05NUCB2ZXJzaW9uIE1JTjE6ICR2ZXJzaW9uX21pblxuIjsKK3ByaW50ICJOZXQtU05NUCB2ZXJzaW9uIE1JTjI6ICR2ZXJzaW9uX3JldlxuXG4iOworCisjZ290byBza2lwMTsKKyNleGl0OworCisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBDb21tb24gYnVpbGQgb3B0aW9uczoKKyRiX2lwdjYgPSAiZW5hYmxlZCI7Ciskc2RrID0gImVuYWJsZWQiOworJGRlZmF1bHRfaW5zdGFsbF9iYXNlID0gImM6L3VzciI7CiskaW5zdGFsbF9iYXNlID0gJGRlZmF1bHRfaW5zdGFsbF9iYXNlOworJHBlcmxfaW5zdGFsbCA9ICJkaXNhYmxlZCI7CiskZGVidWcgPSAiZGlzYWJsZWQiOworJGNvbmZpZ09wdHMgPSAiIjsKKyRjVG1wID0gIiI7CiskbGlua3R5cGUgPSAiZHluYW1pYyI7CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgQnVpbGQgYmluYXJ5OgorIyB3aW5FeHRETEwgPSBkaXNhYmxlZAorIyBTU0wgPSBlbmFibGVkCiskb3BlbnNzbCA9ICJlbmFibGVkIjsKKyRiX3dpbmV4dGRsbCA9ICJkaXNhYmxlZCI7CiskcGVybCA9ICJlbmFibGVkIjsKKyRpbnN0YWxsID0gImVuYWJsZWQiOworJGluc3RhbGxfZGV2ZWwgPSAiZW5hYmxlZCI7CisKK2NoZGlyICR3aW4zMl9kaXI7CismYnVpbGQoKTsKKyZjcmVhdGVfcGVybF9wYWNrYWdlKCk7CisKK3ByaW50ICJcbkNsZWFuaW5nIHVwICRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L1xuIjsKK3VubGluayAoIiRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L3NubXBkLmNvbmYiKTsKK3VubGluayAoIiRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L3NubXB0cmFwZC5jb25mIik7CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgQnVpbGQgYmluYXJ5OgorIyB3aW5FeHRETEwgPSBlbmFibGVkCisjIFNTTCA9IGVuYWJsZWQKKyRvcGVuc3NsID0gImVuYWJsZWQiOworJGJfd2luZXh0ZGxsID0gImVuYWJsZWQiOworJHBlcmwgPSAiZGlzYWJsZWQiOworJGluc3RhbGwgPSAiZGlzYWJsZWQiOworJGluc3RhbGxfZGV2ZWwgPSAiZGlzYWJsZWQiOworCitjaGRpciAkd2luMzJfZGlyOworJmJ1aWxkKCk7CisKK3ByaW50ICJcbkNvcHlpbmcgc25tcGQuZXhlIHRvIHNubXBkLXdpbkV4dERMTC5leGVcbiI7Citjb3B5KCJiaW4vcmVsZWFzZS9zbm1wZC5leGUiLCIkaW5zdGFsbF9iYXNlL2Jpbi9zbm1wZC13aW5FeHRETEwuZXhlIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgc25tcGQuZXhlIHRvIHNubXBkLXdpbkV4dERMTC5leGU6ICQ/Iik7CisKK3ByaW50ICJcbkNsZWFuaW5nIHVwICRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L1xuIjsKK3VubGluayAoIiRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L3NubXBkLmNvbmYiKTsKK3VubGluayAoIiRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L3NubXB0cmFwZC5jb25mIik7CisKKworcHJpbnQgIlJlbmFtaW5nICRpbnN0YWxsX2Jhc2UvYmluIHRvICRpbnN0YWxsX2Jhc2UvYmluLnNzbFxuIjsKK3JlbmFtZSAoIiRpbnN0YWxsX2Jhc2UvYmluIiwiJGluc3RhbGxfYmFzZS9iaW4uc3NsIikgfHwgZGllICgiQ291bGQgbm90IHJlbmFtZSBmb2xkZXI6ICQ/Iik7CitwcmludCAiUmVuYW1pbmcgJGluc3RhbGxfYmFzZS9saWIgdG8gJGluc3RhbGxfYmFzZS9saWIuc3NsXG4iOworcmVuYW1lICgiJGluc3RhbGxfYmFzZS9saWIiLCIkaW5zdGFsbF9iYXNlL2xpYi5zc2wiKSB8fCBkaWUgKCJDb3VsZCBub3QgcmVuYW1lIGZvbGRlcjogJD8iKTsKK3ByaW50ICJSZW5hbWluZyAkaW5zdGFsbF9iYXNlL3BlcmwgdG8gJGluc3RhbGxfYmFzZS9wZXJsLnNzbFxuIjsKK3JlbmFtZSAoIiRpbnN0YWxsX2Jhc2UvcGVybCIsIiRpbnN0YWxsX2Jhc2UvcGVybC5zc2wiKSB8fCBkaWUgKCJDb3VsZCBub3QgcmVuYW1lIGZvbGRlcjogJD8iKTsKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgQnVpbGQgYmluYXJ5OgorIyB3aW5FeHRETEwgPSBkaXNhYmxlZAorIyBTU0wgPSBkaXNhYmxlZAorJG9wZW5zc2wgPSAiZGlzYWJsZWQiOworJGJfd2luZXh0ZGxsID0gImRpc2FibGVkIjsKKyRwZXJsID0gImVuYWJsZWQiOworJGluc3RhbGwgPSAiZW5hYmxlZCI7CiskaW5zdGFsbF9kZXZlbCA9ICJlbmFibGVkIjsKKworY2hkaXIgJHdpbjMyX2RpcjsKKyZidWlsZCgpOworJmNyZWF0ZV9wZXJsX3BhY2thZ2UoKTsKKworcHJpbnQgIlxuQ2xlYW5pbmcgdXAgJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3QvXG4iOwordW5saW5rICgiJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3Qvc25tcGQuY29uZiIpOwordW5saW5rICgiJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3Qvc25tcHRyYXBkLmNvbmYiKTsKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBCdWlsZCBiaW5hcnk6CisjIHdpbkV4dERMTCA9IGVuYWJsZWQKKyMgU1NMID0gZGlzYWJsZWQKKyRvcGVuc3NsID0gImRpc2FibGVkIjsKKyRiX3dpbmV4dGRsbCA9ICJlbmFibGVkIjsKKyRwZXJsID0gImRpc2FibGVkIjsKKyRpbnN0YWxsID0gImRpc2FibGVkIjsKKyRpbnN0YWxsX2RldmVsID0gImRpc2FibGVkIjsKKworY2hkaXIgJHdpbjMyX2RpcjsKKyZidWlsZCgpOworCitwcmludCAiXG5Db3B5aW5nIHNubXBkLmV4ZSB0byBzbm1wZC13aW5FeHRETEwuZXhlXG4iOworY29weSgiYmluL3JlbGVhc2Uvc25tcGQuZXhlIiwiJGluc3RhbGxfYmFzZS9iaW4vc25tcGQtd2luRXh0RExMLmV4ZSIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IHNubXBkLmV4ZSB0byBzbm1wZC13aW5FeHRETEwuZXhlOiAkPyIpOworCitwcmludCAiXG5DbGVhbmluZyB1cCAkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9cbiI7Cit1bmxpbmsgKCIkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9zbm1wZC5jb25mIik7Cit1bmxpbmsgKCIkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9zbm1wdHJhcGQuY29uZiIpOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3ByaW50ICJcblxuQ29weWluZyBkaXN0IGZpbGVzOlxuIjsKK3ByaW50ICI9PT09PT09PT09PT09PT09PT09XG5cbiI7CisKK21rZGlyICgiJGluc3RhbGxfYmFzZS9kb2NzIik7Citta2RpciAoIiRpbnN0YWxsX2Jhc2UvdGVtcCIpOworCismY2hlY2tfZGlyX2V4aXN0cygiJGluc3RhbGxfYmFzZS9kb2NzIik7CismY2hlY2tfZGlyX2V4aXN0cygiJGluc3RhbGxfYmFzZS90ZW1wIik7CisKK2NoZGlyICR0b3BfZGlyOworY29weSgiQ09QWUlORyIsIiRpbnN0YWxsX2Jhc2UvZG9jcy8iKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworY29weSgnd2luMzJcZGlzdFxSRUFETUUudHh0JywiJGluc3RhbGxfYmFzZS8iKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworY29weSgnd2luMzJcZGlzdFxzY3JpcHRzXG5ldC1zbm1wLXBlcmwtdGVzdC5wbCcsIiRpbnN0YWxsX2Jhc2UvYmluLyIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7CisKKworc2tpcDE6CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworcHJpbnQgIlxuXG5Db3B5aW5nIE5TSVMgaW5zdGFsbGVyIGZpbGVzOlxuIjsKK3ByaW50ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iOworCitjaGRpciAkdG9wX2RpcjsKK2NvcHkoJ3dpbjMyXGRpc3RcaW5zdGFsbGVyXFNldEVuVmFyLm5zaScsIiRpbnN0YWxsX2Jhc2UvIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKK2NvcHkoJ3dpbjMyXGRpc3RcaW5zdGFsbGVyXG5ldC1zbm1wLm5zaScsIiRpbnN0YWxsX2Jhc2UvbmV0LXNubXAubnNpIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKK2NvcHkoJ3dpbjMyXGRpc3RcaW5zdGFsbGVyXEFkZDJQYXRoLm5zaScsIiRpbnN0YWxsX2Jhc2UvIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKK2NvcHkoJ3dpbjMyXGRpc3RcaW5zdGFsbGVyXG5ldC1zbm1wLWhlYWRlcjEuYm1wJywiJGluc3RhbGxfYmFzZS8iKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworCitvcGVuIChURU1QLCAiPiRpbnN0YWxsX2Jhc2UvcmVnaXN0ZXJhZ2VudC5iYXQiKSB8fCBkaWUgKCJDb3VsZCBub3QgY3JlYXRlIGZpbGU6ICQ/Iik7CitjbG9zZSBURU1QOworb3BlbiAoVEVNUCwgIj4kaW5zdGFsbF9iYXNlL3VucmVnaXN0ZXJhZ2VudC5iYXQiKSB8fCBkaWUgKCJDb3VsZCBub3QgY3JlYXRlIGZpbGU6ICQ/Iik7CitjbG9zZSBURU1QOworb3BlbiAoVEVNUCwgIj4kaW5zdGFsbF9iYXNlL3JlZ2lzdGVydHJhcGQuYmF0IikgfHwgZGllICgiQ291bGQgbm90IGNyZWF0ZSBmaWxlOiAkPyIpOworY2xvc2UgVEVNUDsKK29wZW4gKFRFTVAsICI+JGluc3RhbGxfYmFzZS91bnJlZ2lzdGVydHJhcGQuYmF0IikgfHwgZGllICgiQ291bGQgbm90IGNyZWF0ZSBmaWxlOiAkPyIpOworY2xvc2UgVEVNUDsKK29wZW4gKFRFTVAsICI+JGluc3RhbGxfYmFzZS9ldGMvc25tcC9zbm1wLmNvbmYiKSB8fCBkaWUgKCJDb3VsZCBub3QgY3JlYXRlIGZpbGU6ICQ/Iik7CitjbG9zZSBURU1QOworCitwcmludCAiXG5cbkNvcHlpbmcgZG9jdW1lbnRhdGlvbjpcbiI7CitwcmludCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIjsKKworIyBUbyBkbzogcmVwbGFjZSB0aGUgdHdvIGxpbmVzIGJlbG93IHdpdGggY29tbWFuZHMgdGhhdCBidWlsZCB0aGUgLmNobSBmaWxlLgorb3BlbiBvdXQsICI+JGluc3RhbGxfYmFzZS9kb2NzL25ldC1zbm1wLmNobSI7CitjbG9zZSBvdXQ7CisKK3ByaW50ICJcblxuQnVpbGRpbmcgaW5zdGFsbGVyOlxuIjsKK3ByaW50ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iOworCitteSAkc3VmZml4ID0gJEVOVntMSUJ9ID1+IC9cXHg2NHxcXGFtZDY0LyA/ICJ4NjQiIDogIng4NiI7CitpZiAoc3lzdGVtKCJcIiRtYWtlbnNpc1wiIC9EUFJPRFVDVF9NQUpfVkVSU0lPTj1cIiR2ZXJzaW9uX21halwiIC9EUFJPRFVDVF9NSU5fVkVSU0lPTj1cIiR2ZXJzaW9uX21pblwiIC9EUFJPRFVDVF9SRVZJU0lPTj1cIiR2ZXJzaW9uX3JldlwiIC9EUFJPRFVDVF9FWEVfVkVSU0lPTj1cIiRpbnN0YWxsZXJfZXhlX3ZlcnNpb25cIiAvRElOU1RBTExFUl9QTEFURk9STT1cIiRzdWZmaXhcIiBcIiRpbnN0YWxsX2Jhc2UvbmV0LXNubXAubnNpXCIiKSAhPSAwKSB7CisgICAgZGllKCJCdWlsZGluZyBpbnN0YWxsZXIgZmFpbGVkIik7Cit9CisKK3ByaW50ICJcbj09PT09PT1cbiI7CitwcmludCAiRG9uZSEhIVxuIjsKK3ByaW50ICI9PT09PT09XG5cbiI7CisKK2V4aXQ7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N1YiBidWlsZCB7CisgIHByaW50ICJcblxuQnVpbGRpbmcgd2l0aCBvcHRpb25zOlxuIjsKKyAgcHJpbnQgIj09PT09PT09PT09PT09PT09PT09PT1cblxuIjsKKyAgcHJpbnQgIjEuICBPcGVuU1NMIHN1cHBvcnQ6ICAgICAgICAgICAgICAgICIgLiAkb3BlbnNzbC4gIlxuIjsKKyAgcHJpbnQgIjIuICBQbGF0Zm9ybSBTREsgc3VwcG9ydDogICAgICAgICAgICIgLiAkc2RrIC4gIlxuIjsKKyAgcHJpbnQgIlxuIjsKKyAgcHJpbnQgIjMuICBJbnN0YWxsIHBhdGg6ICAgICAgICAgICAgICAgICAgICIgLiAkaW5zdGFsbF9iYXNlIC4gIlxuIjsKKyAgcHJpbnQgIjQuICBJbnN0YWxsIGFmdGVyIGJ1aWxkOiAgICAgICAgICAgICIgLiAkaW5zdGFsbCAuICJcbiI7CisgIHByaW50ICJcbiI7CisgIHByaW50ICI1LiAgUGVybCBtb2R1bGVzOiAgICAgICAgICAgICAgICAgICAiIC4gJHBlcmwgLiAiXG4iOworICBwcmludCAiNi4gIEluc3RhbGwgcGVybCBtb2R1bGVzOiAgICAgICAgICAgIiAuICRwZXJsX2luc3RhbGwgLiAiXG4iOworICBwcmludCAiXG4iOworICBwcmludCAiNy4gIFF1aWV0IGJ1aWxkIChsb2dnZWQpOiAgICAgICAgICAgIiAuICRsb2dnaW5nIC4gIlxuIjsKKyAgcHJpbnQgIjguICBEZWJ1ZyBtb2RlOiAgICAgICAgICAgICAgICAgICAgICIgLiAkZGVidWcgLiAiXG4iOworICBwcmludCAiXG4iOworICBwcmludCAiOS4gIElQdjYgdHJhbnNwb3J0cyAocmVxdWlyZXMgU0RLKTogIiAuICRiX2lwdjYgLiAiXG4iOworICBwcmludCAiMTAuIHdpbkV4dERMTCBhZ2VudCAocmVxdWlyZXMgU0RLKTogIiAuICRiX3dpbmV4dGRsbCAuICJcbiI7CisgIHByaW50ICJcbiI7CisgIHByaW50ICIxMS4gTGluayB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAiIC4gJGxpbmt0eXBlIC4gIlxuIjsKKyAgcHJpbnQgIlxuIjsKKyAgcHJpbnQgIjEyLiBJbnN0YWxsIGRldmVsb3BtZW50IGZpbGVzICAgICAgICIgLiAkaW5zdGFsbF9kZXZlbCAuICJcbiI7CisKKyAgJGNUbXAgPSAoJG9wZW5zc2wgZXEgImVuYWJsZWQiID8gIi0td2l0aC1zc2wiIDogIiIgKTsKKyAgJGNvbmZpZ09wdHMgPSAiJGNUbXAiOworICAkY1RtcCA9ICgkc2RrIGVxICJlbmFibGVkIiA/ICItLXdpdGgtc2RrIiA6ICIiICk7CisgICRjb25maWdPcHRzID0gIiRjb25maWdPcHRzICRjVG1wIjsKKyAgJGNUbXAgPSAoJGJfaXB2NiBlcSAiZW5hYmxlZCIgPyAiLS13aXRoLWlwdjYiIDogIiIgKTsKKyAgJGNvbmZpZ09wdHMgPSAiJGNvbmZpZ09wdHMgJGNUbXAiOworICAkY1RtcCA9ICgkYl93aW5leHRkbGwgZXEgImVuYWJsZWQiID8gIi0td2l0aC13aW5leHRkbGwiIDogIiIgKTsKKyAgJGNvbmZpZ09wdHMgPSAiJGNvbmZpZ09wdHMgJGNUbXAiOworICAkY1RtcCA9ICgkZGVidWcgZXEgImVuYWJsZWQiID8gIi0tY29uZmlnPWRlYnVnIiA6ICItLWNvbmZpZz1yZWxlYXNlIiApOworICAkY29uZmlnT3B0cyA9ICIkY29uZmlnT3B0cyAkY1RtcCI7CisgIAorICAjIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgCisgICMgU2V0IHRvIG5vdCBzZWFyY2ggZm9yIG5vbi1leGlzdGVudCAiLmRlcCIgZmlsZXMKKyAgJEVOVntOT19FWFRFUk5BTF9ERVBTfT0iMSI7CisKKyAgJEVOVntJTkNMVURFfSAuPSAiOyRvcGVuc3NsaW5jZGlyIjsKKyAgJEVOVntMSUJ9ICAgICAuPSAiOyRvcGVuc3NsbGliZGlyIjsKKworICAjIFNldCBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIFBlcmwgbWFrZSB0ZXN0cyBjYW4gbG9jYXRlIHRoZSBETEwKKyAgJEVOVntQQVRIfSA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdG9wX2RpciwgImJpbiIsICRkZWJ1ZyBlcSAiZW5hYmxlZCIgPyAiZGVidWciIDogInJlbGVhc2UiKSAuICI7JEVOVntQQVRIfSI7CisgIAorICAjIFNldCBNSUJESVJTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIFBlcmwgbWFrZSB0ZXN0cyBjYW4gbG9jYXRlIHRoZSBtaWJzCisgIG15ICR0ZW1wX21pYmRpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdG9wX2RpciwgIm1pYnMiKTsKKyAgJHRlbXBfbWliZGlyID1+IHMvXFwvXC8vZzsKKyAgJEVOVntNSUJESVJTfT0kdGVtcF9taWJkaXI7CisgIAorICAjIFNldCBTTk1QQ09ORlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgc28gUGVybCBjb25mLnQgdGVzdCBjYW4gbG9jYXRlCisgICMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICMgU2VlIHRoZSBub3RlIGFib3V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgV2luMzIgc2VjdGlvbiBvZiAKKyAgIyBwZXJsL1NOTVAvUkVBRE1FIGZvciBkZXRhaWxzIG9uIHdoeSB0aGlzIGlzIG5lZWRlZC4gCisgICRFTlZ7U05NUENPTkZQQVRIfT0idCI7JEVOVntTTk1QQ09ORlBBVEh9OworICAKKyAgcHJpbnQgIlxuQnVpbGRpbmcuLi5cbiI7CisgIAorICBwcmludCAiXG5DcmVhdGluZyAqLm91dCBsb2cgZmlsZXMuXG5cbiI7CisKKyAgI3ByaW50ICJEZWxldGluZyBvbGQgbG9nIGZpbGVzLi4uXG4iOworICAjc3lzdGVtKCJkZWwgKi5vdXQgPiBOVUw6IDI+JjEiKTsKKworICAjIERlbGV0ZSBuZXQtc25tcC1jb25maWcuaCBmcm9tIG1haW4gaW5jbHVkZSBmb2xkZXIganVzdCBpbiBjYXNlIGl0IHdhcyBjcmVhdGVkIGJ5IGEgQ3lnd2luIG9yIE1pbkdXIGJ1aWxkCisgIHN5c3RlbSgiZGVsIC4uXFxpbmNsdWRlXFxuZXQtc25tcFxcbmV0LXNubXAtY29uZmlnLmggPiBOVUw6IDI+JjEiKTsKKyAgCisgIHByaW50ICJSdW5uaW5nIENvbmZpZ3VyZS4uLlxuIjsKKyAgc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAkY29uZmlnT3B0cyAtLWxpbmt0eXBlPSRsaW5rdHlwZSAtLXByZWZpeD1cIiRpbnN0YWxsX2Jhc2VcIiA+IGNvbmZpZ3VyZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGNvbmZpZ3VyZS5vdXQpIjsKKworICBwcmludCAiQ2xlYW5pbmcuLi5cbiI7CisgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBjbGVhbiA+IGNsZWFuLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgY2xlYW4ub3V0KSI7CisKKyAgcHJpbnQgIkJ1aWxkaW5nIG1haW4gcGFja2FnZS4uLlxuIjsKKyAgc3lzdGVtKCJubWFrZSAvbm9sb2dvID4gbWFrZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIG1ha2Uub3V0KSI7CisKKyAgaWYgKCRwZXJsIGVxICJlbmFibGVkIikgeworICAgIGlmICgkbGlua3R5cGUgZXEgInN0YXRpYyIpIHsKKyAgICAgIHByaW50ICJSdW5uaW5nIENvbmZpZ3VyZSBmb3IgRExMLi4uXG4iOworICAgICAgc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAkY29uZmlnT3B0cyAtLWxpbmt0eXBlPWR5bmFtaWMgLS1wcmVmaXg9XCIkaW5zdGFsbF9iYXNlXCIgPiBwZXJsY29uZmlndXJlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgcGVybGNvbmZpZ3VyZS5vdXQpIjsKKyAgICAgIAorICAgICAgcHJpbnQgIkNsZWFuaW5nIGxpYnJhcmllcy4uLlxuIjsKKyAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBsaWJzX2NsZWFuID4+IGNsZWFuLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgY2xlYW4ub3V0KSI7CisgICAgICAKKyAgICAgIHByaW50ICJCdWlsZGluZyBETEwgbGlicmFyaWVzLi4uXG4iOworICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGxpYnMgPiBkbGwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBkbGwub3V0KSI7CisgICAgfQorCisgICAgcHJpbnQgIkNsZWFuaW5nIFBlcmwuLi4uXG4iOworICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX2NsZWFuID4+IGNsZWFuLm91dCAyPiYxIik7ICMgSWYgYWxyZWFkeSBjbGVhbmVkLCBNYWtlZmlsZSBpcyBnb25lIHNvIGRvbid0IHdvcnJ5IGFib3V0IGVycm9ycyEKKworICAgIHByaW50ICJCdWlsZGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7CisgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmwgPiBwZXJsbWFrZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIHBlcmxtYWtlLm91dCkiOworCisjICAgIHByaW50ICJUZXN0aW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKKyMgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfdGVzdCA+IHBlcmx0ZXN0Lm91dCAyPiYxIik7ICMgRG9uJ3QgZGllIGlmIGFsbCB0aGUgdGVzdHMgZG9uJ3QgcGFzcy4uCisgICAgCisgICAgaWYgKCRwZXJsX2luc3RhbGwgZXEgImVuYWJsZWQiKSB7CisgICAgICBwcmludCAiSW5zdGFsbGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7CisgICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF9pbnN0YWxsID4gcGVybGluc3RhbGwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsaW5zdGFsbC5vdXQpIjsKKyAgICB9CisgICAgICAKKyAgICBwcmludCAiXG5TZWUgcGVybHRlc3Qub3V0IGZvciBQZXJsIHRlc3QgcmVzdWx0c1xuIjsKKyAgfQorCisgIHByaW50ICJcbiI7CisgIGlmICgkaW5zdGFsbCBlcSAiZW5hYmxlZCIpIHsKKyAgICBwcmludCAiSW5zdGFsbGluZyBtYWluIHBhY2thZ2UuLi5cbiI7CisgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGluc3RhbGwgPiBpbnN0YWxsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgaW5zdGFsbC5vdXQpIjsKKyAgfQorICBlbHNlIHsKKyAgICBwcmludCAiVHlwZSBubWFrZSBpbnN0YWxsIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgdG8gJGluc3RhbGxfYmFzZVxuIjsKKyAgfQorCisgIGlmICgkaW5zdGFsbF9kZXZlbCBlcSAiZW5hYmxlZCIpIHsKKyAgICBwcmludCAiSW5zdGFsbGluZyBkZXZlbG9wbWVudCBmaWxlcy4uLlxuIjsKKyAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gaW5zdGFsbF9kZXZlbCA+IGluc3RhbGxfZGV2ZWwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBpbnN0YWxsX2RldmVsLm91dCkiOworICB9CisgIGVsc2UgeworICAgIHByaW50ICJUeXBlIG5tYWtlIGluc3RhbGxfZGV2ZWwgdG8gaW5zdGFsbCB0aGUgZGV2ZWxvcG1lbnQgZmlsZXMgdG8gJGluc3RhbGxfYmFzZVxuIjsKKyAgfQorICAKKyAgaWYgKCRwZXJsX2luc3RhbGwgZXEgImRpc2FibGVkIiAmJiAkcGVybCBlcSAiZW5hYmxlZCIpIHsKKyAgICBwcmludCAiVHlwZSBubWFrZSBwZXJsX2luc3RhbGwgdG8gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzXG4iOworICB9CisKKyAgcHJpbnQgIlxuRG9uZSFcbiI7ICAKK30gIyBzdWIgYnVpbGQKKworCisKKworc3ViIGNyZWF0ZV9wZXJsX3BhY2thZ2UgeworCisgIHByaW50ICJcblxuQ3JlYXRpbmcgUGVybCBwYWNrYWdlOlxuIjsKKyAgcHJpbnQgIj09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iOworICAKKyAgY2hkaXIgJHBlcmxfZGlyIHx8IGRpZSAoIkNvdWxkIG5vdCBlbnRlciBQZXJsIGRpcmVjdG9yeTogJHBlcmxfZGlyIik7CisgIAorICBzeXN0ZW0oIm5tYWtlIHBwZCA+IHBlcmxwYWNrYWdlLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgcGVybHBhY2thZ2Uub3V0KSI7CisgICNyZW5hbWUoIkJ1bmRsZS1OZXRTTk1QLnBwZCIsIk5ldFNOTVAucHBkIikgfHwgZGllICJDb3VsZCBub3QgcmVuYW1lIEJ1bmRsZS1OZXRTTk1QLnBwZCB0byBOZXRTTk1QLnBwZCI7CisgIAorICB7CisgICAgbXkgJGZpbGVfb3V0ID0gIk5ldFNOTVAucHBkIjsKKyAgICBteSAkZmlsZV9pbiA9ICJCdW5kbGUtTmV0U05NUC5wcGQiOworICAKKyAgICBvcGVuIChGSUxFX09VVCwgIj4kZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJGZpbGVfb3V0XG4iOworICAgIG9wZW4gKEZJTEVfSU4sICI8JGZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJGZpbGVfaW5cbiI7CisgICAgCisgICAgcHJpbnQgImNyZWF0aW5nICRmaWxlX291dFxuIjsKKyAgCisgICAgd2hpbGUgKDxGSUxFX0lOPikKKyAgICB7CisgICAgICBjaG9tcDsKKyAgICAgIHMvXjxTT0ZUUEtHIE5BTUUuKi88U09GVFBLRyBOQU1FPSJOZXRTTk1QIiBWRVJTSU9OPSIkdmVyc2lvbl9mb3JfcGVybCI+LzsKKyAgICAgIHMvLio/PFRJVExFPi4qLyAgICA8VElUTEU+TmV0LVNOTVA8XC9USVRMRT4vOworICAgICAgcy8uKj88QUJTVFJBQ1Q+LiovICAgIDxBQlNUUkFDVD5PYmplY3QgT3JpZW50ZWQgSW50ZXJmYWNlIHRvIE5ldC1TTk1QPFwvQUJTVFJBQ1Q+LzsKKyAgICAgIHMvLio/PENPREVCQVNFLiovICAgICAgICA8Q09ERUJBU0UgSFJFRj0ieDg2XC9OZXRTTk1QLnRhci5neiIgXC8+LzsKKyAgCisgICAgICBwcmludCBGSUxFX09VVCAkXyAuICJcbiI7CisgICAgfQorICAgIGNsb3NlIEZJTEVfSU47CisgICAgY2xvc2UgRklMRV9PVVQ7CisgIH0KKyAgCisgIHByaW50ICJDb21wcmVzc2luZyBQZXJsIG1vZHVsZXNcbiI7CisgIHVubGluayAiTmV0U05NUC50YXIiOworICB1bmxpbmsgIk5ldFNOTVAudGFyLmd6IjsKKyAgdW5saW5rICJwZXJsLXRhci5vdXQiOworICB1bmxpbmsgInBlcmwtZ3ppcC5vdXQiOworICBwcmludCAiICBDcmVhdGluZyBQZXJsIHRhciBmaWxlXG4iOworICBpZiAoc3lzdGVtKCJcIiR0YXJfY29tbWFuZFwiIGN2ZiBOZXRTTk1QLnRhciBibGliID4gcGVybC10YXIub3V0IDI+JjEiKSkgeyBkaWUgKCJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiAgU2VlIHBlcmwtdGFyLm91dCIpOyB9CisgIHByaW50ICIgIENvbXByZXNzaW5nIFBlcmwgdGFyIGZpbGVcbiI7CisgIGlmIChzeXN0ZW0oIlwiJGd6aXBfY29tbWFuZFwiIC0tYmVzdCBOZXRTTk1QLnRhciA+IHBlcmwtZ3ppcC5vdXQgMj4mMSIpKSB7IGRpZSAoIkNvdWxkIG5vdCBjb21wcmVzcyB0YXIgZmlsZSB3aXRoIGd6aXAuIFNlZSBwZXJsLWd6aXAub3V0Iik7IH0KKyAgIAorICAjIFJlbW92ZSBjaGRpci4uCisgIGNoZGlyICRwZXJsX2RpciB8fCBkaWUgKCJDb3VsZCBub3QgZW50ZXIgUGVybCBkaXJlY3Rvcnk6ICRwZXJsX2RpciIpOworICBta2RpciAoIiRpbnN0YWxsX2Jhc2UvcGVybCIpOworICBta2RpciAoIiRpbnN0YWxsX2Jhc2UvcGVybC94ODYiKTsKKyAgJmNoZWNrX2Rpcl9leGlzdHMoIiRpbnN0YWxsX2Jhc2UvcGVybCIpOworICAmY2hlY2tfZGlyX2V4aXN0cygiJGluc3RhbGxfYmFzZS9wZXJsL3g4NiIpOworICBjb3B5KCJOZXRTTk1QLnBwZCIsIiRpbnN0YWxsX2Jhc2UvcGVybC8iKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworICBjb3B5KCJOZXRTTk1QLnRhci5neiIsIiRpbnN0YWxsX2Jhc2UvcGVybC94ODYvIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKK30gICMgc3ViIGNyZWF0ZV9wZXJsX3BhY2thZ2UKKworc3ViIGNoZWNrX2Rpcl9leGlzdHMgeworICBteSAkZGlyID0gc2hpZnQ7CisgIGlmICghIC1kICRkaXIpIHsKKyAgICBkaWUgIkRpcmVjdG9yeSAkZGlyIGlzIG1pc3NpbmdcbiI7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9odG1saGVscC9EZXZlbG9wZXJfRkFRLmh0bWwgYi93aW4zMi9kaXN0L2h0bWxoZWxwL0RldmVsb3Blcl9GQVEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODBhY2JjCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvZGlzdC9odG1saGVscC9EZXZlbG9wZXJfRkFRLmh0bWwKQEAgLTAsMCArMSw3ODYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+cnN0b3J5J3MgTkVULVNOTVAgRGV2ZWxvcGVycyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyBQYWdlPC90aXRsZT4KKyAgPC9oZWFkPgorCisgIDxib2R5IGJnY29sb3I9IiNmZmZmZmYiIGJhY2tncm91bmQ9InVjZC1zbm1wLWJnMy5naWYiPgorICAgIDxkaXYgYWxpZ249Y2VudGVyPgorICAgIDxoMT5yc3RvcnkncyBORVQtU05NUCBEZXZlbG9wZXJzIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIFBhZ2U8L2gxPgorICAgIDwvZGl2PgorPGhyPgorICAgIDxkaXYgYWxpZ249Y2VudGVyPgorICAgIDxmb250IHNpemU9LTE+CisgICAgICA8YSBocmVmPSJGQVEuaHRtbCI+W09mZmljaWFsIEZBUV08L2E+IHwgCisJPGEgaHJlZj0iI3Rva2VucyI+W0RlYnVnIHRva2Vuc108L2E+IHwgCisJPGEgaHJlZj0iI2FnZW50eCI+W0FnZW50WF08L2E+IHwgCisJPGEgaHJlZj0iI2luc3RhbGwiPltJbnN0YWxsXTwvYT4gfCAKKwk8YSBocmVmPSIjZGlzYWJsZSI+W0Rpc2FibGVdPC9hPiB8IAorCTxhIGhyZWY9IiNlcnJvcnMiPltFcnJvcnNdPC9hPiB8IAorCTxhIGhyZWY9IiNiaXRzIj5bQml0c108L2E+IHwgCisJPGEgaHJlZj0iI2VtYmVkZGVkIj5bZW1iZWRkZWQgcGVybF08L2E+IHwgCisJPGEgaHJlZj0iI3NtdXgiPltTTVVYXTwvYT4gfCAKKwk8YSBocmVmPSIjZW50aWQiPltFbnRlcnByaXNlIE9JRF08L2E+IHwgCisJPGEgaHJlZj0iI2F1dG9kZXBzIj5bQXV0b21hdGljIGRlcGVuZGVuY2llc108L2E+IHwgCisJPGEgaHJlZj0iI2Nyb3NzIj5bQ3Jvc3MgY29tcGlsaW5nXTwvYT4gfCAKKwk8YSBocmVmPSIjc3RhdGljIj5bU3RhdGljIGxpbmtpbmddPC9hPiB8IAorCTxhIGhyZWY9IiNyZWFkZmRzIj5bcmVhZGZkc108L2E+IHwgCisJPGEgaHJlZj0iI3NoYXJpbmciPltTaGFyaW5nIGRhdGFdPC9hPiB8IAorCTxhIGhyZWY9Im1hbjEtbWliMmMuMS5odG1sIj5bbWliMmMuYXJyYXktdXNlci5jb25mXTwvYT4gfCAKKwk8YSBocmVmPSIjc3RlcHMiPltCYWJ5IFN0ZXBzIGZsb3ddPC9hPiB8IAorICAgICAgPC9mb250PgorICAgIDwvZGl2PgorPGhyPgorVGhpcyBpcyBqdXN0IGEgcXVpY2sgcGFnZSB0byBhbnN3ZXIgc29tZSBjb21tb24gcXVlc3Rpb25zIHRoYXQgYXJlbid0IGNvdmVyZWQKK2luIHRoZSA8YSBocmVmPSIvRkFRLmh0bWwiPm9mZmljaWFsIEZBUTwvYT4uCisKKzxhIG5hbWU9ImFnZW50eCI+PC9hPiA8aDI+QWdlbnRYPC9oMj4KKzxwcmU+IFRvIGhhdmUgdGhlIHN1Yi1hZ2VudCBjb21tdW5pY2F0ZSBvbiBhIGRpZmZlcmVudCBzb2NrZXQsIG9yIHdpdGgKK2RpZmZlcmVudCBwZXJtaXNzaW9ucywgYWRkIHRoZXNlIGxpbmUgdG8geW91ciBzbm1wZC5jb25mCisKKwkjIHNvY2tldCBwYXRoCisJYWdlbnR4c29ja2V0IC90bXAvYWdlbnR4CisKKwkjIHBlcm1zIHNvY2tldCBkaXJlY3RvcnkgdXNlcmlkIGdyb3VwaWQKKwlhZ2VudHhwZXJtcyA3NzcgNzc3IHJzdG9yeSByc3RvcnkKKworCithbmQgYWRkIHRoaXMgbGluZSB0byB5b3VyIHN1YmFnZW50OgorCisJbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLRVQsICIvdG1wL2FnZW50eCIpOworCisqYmVmb3JlKiB5b3UgY2FsbCBpbml0X2FnZW50KCkuCisKKyA8L3ByZT4KKworPGEgbmFtZT0iaW5zdGFsbCI+PC9hPjxoMj5pbnN0YWxsPC9oMj4KKzxwcmU+IElOU1RBTExfUFJFRklYIGdvZXMgYmVmb3JlIGV2ZXJ5dGhpbmcuLiBzbywgd2l0aCB0aGUgZGVmYXVsdHMsIGp1c3QKK3NldHRpbmcgSU5TVEFMTF9QUkVGSVg9L3RtcCB3b3VsZCByZXN1bHQgaW4gL3RtcC91c3IvbG9jYWwuLiAKK3NvIElOU1RBTExfUFJFRklYPS90bXAgcHJlZml4PS91c3IgZXhlY19wcmVmaXg9L3VzciB3b3VsZCBnbyBpbnRvIC90bXAvdXNyCisgPC9wcmU+CisKKzxhIG5hbWU9ImRpc2FibGUiPjwvYT48aDI+ZGlzYWJsZTwvaDI+Cis8cHJlPiBJZiB5b3UgYXJlIHVzaW5nIG5ldC1zbm1wIFZlcnNpb24gPj0gNS4xLCB0aGVuIHRoZSBmb2xsb3dpbmcgY29uZmlndXJlCitvcHRpb25zIG1heSBiZSB1c2VmdWwgdG8geW91OgorCisgIC0tZGlzYWJsZS1hZ2VudCAgICAgICAgICAgICAgICAgRG8gbm90IGJ1aWxkIHRoZSBhZ2VudCAoc25tcGQpLgorICAtLWRpc2FibGUtYXBwbGljYXRpb25zICAgICAgICAgIERvIG5vdCBidWlsZCB0aGUgYXBwcyAoc25tcGdldCwgLi4uKS4KKyAgLS1kaXNhYmxlLW1hbnVhbHMgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgbWFudWFscy4KKyAgLS1kaXNhYmxlLXNjcmlwdHMgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgc2NyaXB0cyAobWliMmMsIC4uLikuCisgIC0tZGlzYWJsZS1taWJzICAgICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIG1pYiBmaWxlcy4KKyAgLS1kaXNhYmxlLW1pYi1sb2FkaW5nICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IHBhcnNlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZXMgdGhlIG1pYiBmaWxlcy4KKyA8L3ByZT4KKworPGEgbmFtZT0iZXJyb3JzIj48L2E+PGgyPmVycm9yczwvaDI+Cis8cHJlPiBmcm9tIFJGQyAzNDE2OgorCisgICAgICAgICAgICAgICAgICAgbm9FcnJvcigwKSwKKyAgICAgICAgICAgICAgICAgICB0b29CaWcoMSksCisgICAgICAgICAgICAgICAgICAgbm9TdWNoTmFtZSgyKSwgICAgICAtLSBmb3IgcHJveHkgY29tcGF0aWJpbGl0eQorICAgICAgICAgICAgICAgICAgIGJhZFZhbHVlKDMpLCAgICAgICAgLS0gZm9yIHByb3h5IGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgICAgICAgICByZWFkT25seSg0KSwgICAgICAgIC0tIGZvciBwcm94eSBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICAgICAgICAgZ2VuRXJyKDUpLAorICAgICAgICAgICAgICAgICAgIG5vQWNjZXNzKDYpLAorICAgICAgICAgICAgICAgICAgIHdyb25nVHlwZSg3KSwKKyAgICAgICAgICAgICAgICAgICB3cm9uZ0xlbmd0aCg4KSwKKyAgICAgICAgICAgICAgICAgICB3cm9uZ0VuY29kaW5nKDkpLAorICAgICAgICAgICAgICAgICAgIHdyb25nVmFsdWUoMTApLAorICAgICAgICAgICAgICAgICAgIG5vQ3JlYXRpb24oMTEpLAorICAgICAgICAgICAgICAgICAgIGluY29uc2lzdGVudFZhbHVlKDEyKSwKKyAgICAgICAgICAgICAgICAgICByZXNvdXJjZVVuYXZhaWxhYmxlKDEzKSwKKyAgICAgICAgICAgICAgICAgICBjb21taXRGYWlsZWQoMTQpLAorICAgICAgICAgICAgICAgICAgIHVuZG9GYWlsZWQoMTUpLAorICAgICAgICAgICAgICAgICAgIGF1dGhvcml6YXRpb25FcnJvcigxNiksCisgICAgICAgICAgICAgICAgICAgbm90V3JpdGFibGUoMTcpLAorICAgICAgICAgICAgICAgICAgIGluY29uc2lzdGVudE5hbWUoMTgpCisgPC9wcmU+CisKKzxhIG5hbWU9ImJpdHMiPjwvYT48aDI+Yml0czwvaDI+Cis8cHJlPiBTTk1QdjEgdXNlIEJJVCBTVFJJTkdzIChSRkMgMTIxMiwgNS4xLjEpOgorCisgICAgICAgICAgKDMpICBBbiBvYmplY3Qgd2l0aCBCSVQgU1RSSU5HIHN5bnRheCBjb250YWluaW5nIG5vIG1vcmUgdGhhbgorICAgICAgICAgICAgICAgMzIgYml0cyBiZWNvbWVzIGFuIElOVEVHRVIgZGVmaW5lZCBhcyBhIHN1bTsgb3RoZXJ3aXNlIGlmCisgICAgICAgICAgICAgICBtb3JlIHRoYW4gMzIgYml0cyBhcmUgcHJlc2VudCwgdGhlIG9iamVjdCBiZWNvbWVzIGFuCisgICAgICAgICAgICAgICBPQ1RFVCBTVFJJTkcsIHdpdGggdGhlIGJpdHMgbnVtYmVyZWQgZnJvbSBsZWZ0LXRvLXJpZ2h0LAorICAgICAgICAgICAgICAgaW4gd2hpY2ggdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGxhc3Qgb2N0ZXQgbWF5CisgICAgICAgICAgICAgICBiZSAicmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UiLgorCitTTk1QdjIgYW5kIGJleW9uZCB1c2VzIEJJVFMgKFJGQyAzNDE3LCA4LjEpOgorCisgICAoMykgICBXaGVuIGVuY29kaW5nIGFuIG9iamVjdCB3aG9zZSBzeW50YXggaXMgZGVzY3JpYmVkIHVzaW5nIHRoZQorICAgICAgICAgQklUUyBjb25zdHJ1Y3QsIHRoZSB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIE9DVEVUIFNUUklORywgaW4KKyAgICAgICAgIHdoaWNoIGFsbCB0aGUgbmFtZWQgYml0cyBpbiAodGhlIGRlZmluaXRpb24gb2YpIHRoZSBiaXRzdHJpbmcsCisgICAgICAgICBjb21tZW5jaW5nIHdpdGggdGhlIGZpcnN0IGJpdCBhbmQgcHJvY2VlZGluZyB0byB0aGUgbGFzdCBiaXQsCisgICAgICAgICBhcmUgcGxhY2VkIGluIGJpdHMgOCAoaGlnaCBvcmRlciBiaXQpIHRvIDEgKGxvdyBvcmRlciBiaXQpIG9mCisgICAgICAgICB0aGUgZmlyc3Qgb2N0ZXQsIGZvbGxvd2VkIGJ5IGJpdHMgOCB0byAxIG9mIGVhY2ggc3Vic2VxdWVudAorICAgICAgICAgb2N0ZXQgaW4gdHVybiwgZm9sbG93ZWQgYnkgYXMgbWFueSBiaXRzIGFzIGFyZSBuZWVkZWQgb2YgdGhlCisgICAgICAgICBmaW5hbCBzdWJzZXF1ZW50IG9jdGV0LCBjb21tZW5jaW5nIHdpdGggYml0IDguICBSZW1haW5pbmcgYml0cywKKyAgICAgICAgIGlmIGFueSwgb2YgdGhlIGZpbmFsIG9jdGV0IGFyZSBzZXQgdG8gemVybyBvbiBnZW5lcmF0aW9uIGFuZAorICAgICAgICAgaWdub3JlZCBvbiByZWNlaXB0LgorIDwvcHJlPgorCis8YSBuYW1lPSJlbWJlZGRlZCI+PC9hPiA8aDI+ZW1iZWRkZWQgcGVybDwvaDI+Cis8cHJlPiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHNubXBkLmNvbmY6CisgCisgICBwZXJsIGRvICIvcGF0aC90by9wZXJsX21vZHVsZS5wbCIKKworCitUbyB0ZXN0OgorCisxKSBUcnkgc3RhcmluZyB1cCBzbm1wZCwgbGlrZSBzbzogJ3NubXBkIC1EcGVybCcuIENoZWNrIHlvdXIgbG9nIGZpbGVzIGZvcjoKKworICBwZXJsOiBpbml0aWFsaXppbmcgcGVybCAoL3RtcC9zbm1wX3BlcmwucGwpCisgIHN0YXJ0aW5nIHBlcmxfbW9kdWxlLnBsCisgIHBlcmxfbW9kdWxlLnBsIGxvYWRlZCBvaworICByZWdpc3RlcmluZyBhdCBuZXRTbm1wLjk5OQorCitJZiB5b3UgZ2V0OgorCisgIHBlcmw6IGluaXRpYWxpemluZyBwZXJsICgvdXNyL2xvY2FsL3NoYXJlL3NubXAvc25tcF9wZXJsLnBsKQorICBDYW4ndCBvcGVuIHBlcmwgc2NyaXB0ICIvdXNyL2xvY2FsL3NoYXJlL3NubXAvc25tcF9wZXJsLnBsIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICBlbWJlZGRlZCBwZXJsIHN1cHBvcnQgZmFpbGVkIHRvIGluaXRhbGl6ZQorCitUaGVuIHlvdSBuZWVkIHRvIGxvY2F0ZSBzbm1wX3BlcmwucGwsIGFuZCBwdXQgaXQgaW4gdGhlIGNvcnJlY3QgcGF0aCwgT1IgcHV0Cit0aGUgcGF0aCBpbiB5b3VyIHNubXBkLmNvbmY6CisKKwlwZXJsSW5pdEZpbGUgL3RtcC9zbm1wX3BlcmwucGwKKworCisyKSBPbmNlIGl0J3MgbG9hZGVkIG9rLCB0cnkgYSB3YWxrOgorCisJc25tcHdhbGsgLXYyYyAtYyBwdWJsaWMgbG9jYWxob3N0IG5ldFNubXAuOTk5CisKK1lvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlIHRoaXMgaW4geW91ciBsb2dzOgorCisgcmVmczogTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfbWliX2hhbmRsZXIsIE5ldFNOTVA6OmFnZW50OjpyZWdpbmZvLCBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8sIE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX3JlcXVlc3RfaW5mb1B0cgorcHJvY2Vzc2luZyBhIHJlcXVlc3Qgb2YgdHlwZSAxNjEKKyAgIHByb2Nlc3NpbmcgcmVxdWVzdCBvZiBuc1RyYW5zYWN0aW9uRW50cnkuMworICAgIC4xLjMuNi4xLjQuMS44MDcyLjk5OS4xLjIuMSAtPiBoZWxsbyB3b3JsZAorICAgZmluaXNoZWQgcHJvY2Vzc2luZworCiszKSBJZiBub3QsIG1heWJlIGNoZWNrIC9wYXRoL3RvL3BlcmxfbW9kdWxlLnBsIGFuZCBtYWtlIHN1cmUgaXQgaXMgZXhlY3V0YWJsZS4KKworSG9wZSB0aGF0IGhlbHBzLgorCisgPC9wcmU+CisKKzxhIG5hbWU9InNtdXgiPjwvYT4gPGgyPlNNVVg8L2gyPgorPHByZT4gVG8gdHVybiBvZmYgU01VWCB3aGVuIHlvdSBkb24ndCBoYXZlIHRoZSBvcHRpb25zIG9mIHJlY29tcGlsaW5nIGZyb20gc291cmNlCit0byBkaXNhYmxlIFNNVVggc3VwcG9ydCwgeW91IGhhdmUgdG8gZ2l2ZSBpdCBhbiBpbnZhbGlkIElQIGFkZHJlc3MgdG8gYmluZAordG8uIFRoaXMgbWF5IGJlIE9TIHNwZWNpZmljLiBPbiBMaW51eCwgaWYgSSBwdXQgdGhpcyBpbiBteSBzbm1wZC5jb25mOgorCisJc211eHNvY2tldCAxLjAuMC4wCisKK0kgZ2V0IGFuIGVycm9yIGF0IHN0YXJ0dXAsIGFuZCBsc29mIG9yIG5ldHN0YXQgc2hvdyB0aGF0IHNubXBkIGlzIG5vIGxvbmdlcgorbGlzdGVudGluZyBvbiBwb3J0IDE5OS4gSWYgeW91IGdldCBhbmQgZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgc211eHNvY2tldAordG9rZW4gbm90IGJlaW5nIHJlY29uZ25pemVkLCB0aGVuIHlvdSdyZSBvdXQgb2YgbHVjay4gWW91J2xsIGhhdmUgdG8gcmVjb21waWxlCitmcm9tIHNvdXJjZSAob3IganVzdCB1c2UgbG9jYWwgZmlyZXdhbGwgcnVsZXMgdG8gYmxvY2sgY29ubmVjdGlvbnMgdG8gcG9ydAorMTk5KS4KKyA8L3ByZT4KKworPGEgbmFtZT0iZW50aWQiPjwvYT4gPGgyPkVudGVycHJpc2UgT0lEPC9oMj4KKzxwcmU+IEZyb206IERhdmUgU2hpZWxkLCBST2JlcnQgU3RvcnkKKworUmVjZW50IFZlcnNpb25zICg1LngpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSB3YW50IHRvICpqdXN0KiBjaGFuZ2UgdGhlIHN5c09iamVjdElEIG51bWJlcmluZywKKyhhbmQgbGVhdmUgdGhlIG5vdGlmaWNhdGlvbnMgdXNpbmcgdGhlIE5ldC1TTk1QIGVudGVycHJpc2UgT0lEKQordGhlbiB1c2UgIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZAorT3IgeW91IGNvdWxkIGp1c3QgdXNlIHRoZSBzbm1wZC5jb25mIGRpcmVjdGl2ZSAnc3lzb2JqZWN0aWQnCit0byBzZXQgdGhpcyBhdCBydW4gdGltZS4KKworCitJZiB5b3Ugd2FudCB0byAqanVzdCogY2hhbmdlIGVudGVycHJpc2Utc3BlY2lmaWMgbm90aWZpY2F0aW9uIE9JRAorKGFuZCBsZWF2ZSB0aGUgc3lzT2JqZWN0SUQgdXNpbmcgdGhlIE5ldC1TTk1QIHZhbHVlcykKK3RoZW4gdXNlICAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkCisKKworSWYgeW91IHdhbnQgdG8gY2hhbmdlICpib3RoKiBvZiB0aGVzZSwKK3RoZW4gdXNlIC0td2l0aC1lbnRlcnByaXNlLW9pZAorCitPbGRlciBWZXJzaW9ucyAoNC4yLngpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiBvbGRlciB2ZXJzaW9uLCB5b3UgaGF2ZSB0byBtYW51YWxsIHVwZGF0ZSB0aGUgdmVyc2lvbl9pZCBpbgorYWdlbnQvYWdlbnRfdHJhcC5jOjgwCisKKyAgIG9pZCB2ZXJzaW9uX2lkW10gICAgPSB7IEVYVEVOU0lCTEVNSUIsIEFHRU5USUQsIE9TVFlQRSB9OworCisgPC9wcmU+CisKKzxhIG5hbWU9ImF1dG9kZXBzIj48L2E+IDxoMj5BdXRvbWF0aWMgZGVwZW5kZW5jaWVzPC9oMj4KKzxwcmU+IEZvciBhdXRvLWRlcGVuZGVuY2llcywgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciBNYWtlZmlsZToKKworIworIyBCdWlsZCBydWxlcworIworJS5kIDogJS5jCisJQGVjaG8gIkdlbmVyYXRpbmcgbWFrZWZpbGUgJEAgLi4uIgorCUBzZXQgLWU7ICQoQ0MpIC1NICQoQ09QVFMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkPCBcCisJfCBzZWQgJ3MvXCgkKlwpXC5vWyA6XSovXDEubyAkQCA6IC9nJyA+ICRAOyBcCisJWyAtcyAkQCBdIHx8ICQoUk0pICQoUk1GTEFHUykgJEAKKworaW5jbHVkZSAkKFNPVVJDRVM6LmM9LmQpCisKKyA8L3ByZT4KKworPGEgbmFtZT0iY3Jvc3MiPjwvYT4gPGgyPkNyb3NzIGNvbXBpbGluZzwvaDI+Cis8cHJlPiBGcm9tIHRoZSBuZXQtc25tcCBJTlNUQUxMIGZpbGU6CisKKyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKworU3BlY2lmeWluZyB0aGUgU3lzdGVtIFR5cGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIFRoZXJlIG1heSBiZSBzb21lIGZlYXR1cmVzIGBjb25maWd1cmUnIGNhbiBub3QgZmlndXJlIG91dAorYXV0b21hdGljYWxseSwgYnV0IG5lZWRzIHRvIGRldGVybWluZSBieSB0aGUgdHlwZSBvZiBob3N0IHRoZSBwYWNrYWdlCit3aWxsIHJ1biBvbi4gIFVzdWFsbHkgYGNvbmZpZ3VyZScgY2FuIGZpZ3VyZSB0aGF0IG91dCwgYnV0IGlmIGl0IHByaW50cworYSBtZXNzYWdlIHNheWluZyBpdCBjYW4gbm90IGd1ZXNzIHRoZSBob3N0IHR5cGUsIGdpdmUgaXQgdGhlCitgLS1ob3N0PVRZUEUnIG9wdGlvbi4gIFRZUEUgY2FuIGVpdGhlciBiZSBhIHNob3J0IG5hbWUgZm9yIHRoZSBzeXN0ZW0KK3R5cGUsIHN1Y2ggYXMgYHN1bjQnLCBvciBhIGNhbm9uaWNhbCBuYW1lIHdpdGggdGhyZWUgZmllbGRzOgorICAgICBDUFUtQ09NUEFOWS1TWVNURU0KKworU2VlIHRoZSBmaWxlIGBjb25maWcuc3ViJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBlYWNoIGZpZWxkLiAgSWYKK2Bjb25maWcuc3ViJyBpc24ndCBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UsIHRoZW4gdGhpcyBwYWNrYWdlIGRvZXNuJ3QKK25lZWQgdG8ga25vdyB0aGUgaG9zdCB0eXBlLgorCisgICBJZiB5b3UgYXJlIGJ1aWxkaW5nIGNvbXBpbGVyIHRvb2xzIGZvciBjcm9zcy1jb21waWxpbmcsIHlvdSBjYW4gYWxzbwordXNlIHRoZSBgLS10YXJnZXQ9VFlQRScgb3B0aW9uIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBzeXN0ZW0gdGhleSB3aWxsCitwcm9kdWNlIGNvZGUgZm9yIGFuZCB0aGUgYC0tYnVpbGQ9VFlQRScgb3B0aW9uIHRvIHNlbGVjdCB0aGUgdHlwZSBvZgorc3lzdGVtIG9uIHdoaWNoIHlvdSBhcmUgY29tcGlsaW5nIHRoZSBwYWNrYWdlLgorCisgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisKK1RoZSBtb3N0IGltcG9ydGFudCBjb25maWd1cmUgb3B0aW9ucyBhcmU6CisKKwktLXdpdGgtY2M9W2Nyb3NzLWNvbXBpbGVyXQorCS0td2l0aC1sZD1bY3Jvc3MtbGlua2VyXQorCS0tdGFyZ2V0PVt0YXJnZXQtZW52aXJvbm1lbnRdCisJLS13aXRoLWVuZGlhbm5lc3M9W2JpZ3xsaXR0bGVdCisKK090aGVyIHBvdGVudGlhbGx5IHVzZWZ1bCBvcHRpb25zOgorCisJLS13aXRoLWNmbGFncz0iLi4uIgorCS0td2l0aC1sZGxhZ3M9Ii4uLiIKKwktLXdpdGgtYXI9L3BhdGgvYXIKKworCS0tZW5hYmxlLW1pbmktYWdlbnQKKwktLWVuYWJsZS1zaGFyZWQ9Im5vIgorCS0td2l0aG91dC1waWMKKworVHdvIHNpbXBsZSBleGFtcGxlcyBvZiBjcm9zcy1jb21waWxpbmc6CisKKy4vY29uZmlndXJlIC0tdGFyZ2V0PXBwYy1saW51eCAtLXdpdGgtY2M9cHBjXzQwNS1nY2MgLS13aXRoLWVuZGlhbm5lc3M9YmlnCisKKy4vY29uZmlndXJlIC0tdGFyZ2V0PXBvd2VycGMtc25tYy1saW51eC1nbnUgLS1idWlsZD1pMzg2LXJlZGhhdC1saW51eCBcCisgICAgICAgIC0td2l0aC1lbmRpYW5uZXNzPWJpZworCitBIG1vcmUgY29tcGxleCBleGFtcGxlIGludm9sdmVzIHNldHRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBhbGwKK3RoZSBmbGFncyBmb3IgdGhlIHRvb2xzIG5lZWRlZCBmb3IgdGhlIGNyb3NzIGNvbXBpbGU6CisKKyAgIGV4cG9ydCBUT09MUEFUSD0vb3B0L2hhcmRoYXQvZGV2a2l0L3BwYy80MDUKKyAgIGV4cG9ydCBQQVRIPSRUT09MUEFUSC9iaW46JFBBVEgKKyAgIGV4cG9ydCBDRkxBR1M9JyAtZyAtZlBJQyAtbXNvZnQtZmxvYXQgLURfU09GVF9GTE9BVCAtRGxpbnV4IC1tY3B1PTQwMycKKyAgIGV4cG9ydCBDUFBGTEFHUz0nLUkkVE9PTFBBVEgvaW5jbHVkZSAtSSRUT09MUEFUSC90YXJnZXQvdXNyL2luY2x1ZGUnCisgICBleHBvcnQgQVNGTEFHUz0nLWcgLWdzdGFicycKKyAgIGV4cG9ydCBMREZMQUdTPSctV2wsLXNvbmFtZSwtQmR5bmFtaWMgLWxjJyAKKyAgIGV4cG9ydCBMSUI9J2FyIHJjdScgCisKKyAgIC4vY29uZmlndXJlIC0tYnVpbGQ9aTY4Ni1wYy1saW51eC1nbnUgIC0taG9zdD1wb3dlcnBjIFwKKyAgICAgICAgICAgLS10YXJnZXQ9cG93ZXJwYy1oYXJkaGF0LWxpbnV4LWdudSAtLXdpdGgtZW5kaWFubmVzcz1iaWcKKworCisKKyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKworVGhlIG1pYmdyb3VwIHNlY3Rpb24gaXMgdGhlIG1vc3QgT1Mgc3BlY2lmaWMgcGFydCBvZiB0aGUgYWdlbnQuIEl0J3MgbGlrZWx5Cit0aGF0IHlvdSB3aWxsIGhhdmUgdG8gcmVtb3ZlIHNvbWUgb2YgdGhlbS4gWW91IGp1c3QgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoCitvbmVzIHRvIHJlbW92ZS4gCisKK0ZvciBleGFtcGxlLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jIGlzIGEgY29tbW9uIG1vZHVsZSB0aGF0IGRvZXNuJ3QKK3dvcmsgb24gbmV3IHBsYXRmb3Jtcy4gU28gaWYgaXQgaXNuJ3Qgd29ya2luZywgb21pdCBpdCBkdXJpbmcgY29uZmlndXJlLCBsaWtlCitzbzoKKworCS4vY29uZmlndXJlIC0td2l0aC1vdXQtbWliLW1vZHVsZXM9bWliSUkvdGNwVGFibGUKKworCitBbHRlcm5hdGl2ZWx5LCB5b3UgY291bGQgd29yayB0aGUgb3RoZXIgd2F5LiBTdGFydCB3aXRoIGEgbWluaW1hbAorY29uZmlndXJhdGlvbjoKKworCS4vY29uZmlndXJlIC0tZW5hYmxlLW1pbmktYWdlbnQKKworYW5kIHRoZW4gc3RhcnQgYWRkaW5nIE1JQiBtb2R1bGVzIG9uZS1ieS1vbmU6CisKKwkuL2NvbmZpZ3VyZSAtLWVuYWJsZS1taW5pLWFnZW50CisgICAgICAgICAgICAgICAgICAgIC0td2l0aC1taWItbW9kdWxlcz1taWJJSS9zeXN0ZW1fbWliLG1pYklJL3N5c09SVGFibGUKKworCisgPC9wcmU+CisKKzxhIG5hbWU9InN0YXRpYyI+PC9hPiA8aDI+U3RhdGljIGxpbmtpbmc8L2gyPgorPHByZT4gbVhhdXJlbGl1OiBJIHdhbnQgdG8gY29tcGlsZSB0aGUgNS4xIHNubXB0cmFwZCBiaW5hcnkgd2l0aCBzdGF0aWNhbGx5IGxpbmtlZCBsaWJyYXJpZXMuLiBDYW4gYW55b25lIGhlbHAgbWUgd2l0aCB0aGlzPyBJcyBpdCBqdXN0IGEgc2ltcGxlIGNvbmZpZ3VyZSBzd2l0Y2gKK3JzdG9yeTogbVhhdXJlbGl1OiB5b3Ugd2FudCBzdGF0aWMgc25tcCBsaWJyYXJpZXMsIG9yIHRvdGFsbHkgc3RhdGljIChzeXN0ZW0gbGlicmFyaWVzIHRvbyk/CittWGF1cmVsaXU6IHRvdGFsbHkgc3RhdGljLi4gZXZlcnl0aGluZyBpbiBvbmUgZXhlY3V0YWJsZQorbVhhdXJlbGl1OiBhY3R1YWxseSwgaG93IGRvIGkgZG8gYm90aCB3YXlzPworcnN0b3J5OiBmb3Igc25tcCBsaWJzLCB0cnkgJ2NvbmZpZ3VyZSAtLWVuYWJsZS1zaGFyZWQ9bm8nLi4gdGhhdCB3b24ndCBidWlsZCB0aGUgc2hhcmVkIGxpYnJhcmllcworcnN0b3J5OiAodGhvdWdoIGlmIHlvdSBoYXZlIHByZXZpb3VzIHZlcnNpb25zIG9mIG5ldC1zbm1wIGxpYnJhcmllcyBpbnN0YWxsZWQsIHRoZSBsaW5rZXIgbWlnaHQgcGljayB0aG9zZSB1cCBhbmQgdHJ5IGFuZCB1c2UgdGhlbSkKK3JzdG9yeTogZm9yIHRvdGFsbHkgc3RhdGljLCB5b3UnbGwgaGF2ZSB0byB0d2VhayB0aGUgTWFrZWZpbGUKK3JzdG9yeTogYWRkIC1Cc3RhdGljIHRvIExERkxBR1MKKworW25vdGU6IGFjdHVhbGx5LCBmb3IgdG90YWxseSBzdGF0aWMsICdjb25maWd1cmUgLS13aXRoLWxkZmxhZ3M9LUJzdGF0aWMnXQorIDwvcHJlPgorCis8YSBuYW1lPSJyZWFkZmRzIj48L2E+IDxoMj5yZWFkZmRzPC9oMj4KKzxwcmU+ID4gY2FuIHlvdSBwbGVhc2UgdGVsbCBtZSB0aGUgbWVhbmluZyBvZiB0aGUgdGhpcmQgYXJndW1lbnQuIG9idmlvdXNseSB0aGUgCis+IGZpcnN0IHBhcmFtZXRlciB0byByZWdpc3Rlcl9yZWFkZmQgaXMgYSBmaWxlIGRlc2NyaXB0b3IgYW5kIHNlY29uZCBpcyB0aGUgCis+IGNhbGxiYWNrIGZ1bmN0aW9uLgorCitDb3JyZWN0LgorVGhlIHRoaXJkIHBhcmFtZXRlciBpcyBhcmJpdHJhcnkgZGF0YSB0aGF0IHlvdSBjYW4gc3BlY2lmeSB3aGVuIHlvdQorcmVnaXN0ZXIgdGhlIGZpbGUgZGVzY3JpcHRvciwgYW5kIHdpbGwgdGhlbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCitmdW5jdGlvbiB3aGVuIGl0J3MgaW52b2tlZC4KKworCitTbyBpZiB5b3Ugd2VyZSBsaXN0ZW5pbmcgb24gdHdvIHNlcGFyYXRlIHNvY2tldHMsIGZvciB2ZXJ5IHNpbWlsYXIKK3R5cGVzIG9mIGRhdGEsIHRoZW4geW91IGNvdWxkIHVzZSB0aGUgc2FtZSBjYWxsYmFjayBmb3IgYm90aCBhbmQKK3VzZSB0aGlzIHRoaXJkIHBhcmFtZXRlciB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW06CisKKworCWZkMSA9IG9wZW4oICIvcHJvYy90d2VlZGxlZHVtIiApOworCWZkMiA9IG9wZW4oICIvcHJvYy90d2VlZGxlZGVlIiApOworCisJcmVnaXN0ZXJfcmVhZGZkKCBmZDEsIHdob19icm9rZV90aGVfcmF0dGxlKCksICJ0d2VlZGxlZGVlIiApOworCXJlZ2lzdGVyX3JlYWRmZCggZmQyLCB3aG9fYnJva2VfdGhlX3JhdHRsZSgpLCAidHdlZWRsZWR1bSIgKTsKKworCit2b2lkCit3aG9fYnJva2VfdGhlX3JhdHRsZSggaW50IGZkLCB2b2lkICpkYXRhICkKK3sKKyAgICBjaGFyICpoZV9kaWQgPSAoY2hhciAqKWRhdGE7CisKKyAgICBwcmludGYoIiVzIGJyb2tlIHRoZSByYXR0bGUhXG4iLCBoZV9kaWQgKTsKK30KKworIDwvcHJlPgorCis8YSBuYW1lPSJzaGFyaW5nIj48L2E+IDxoMj5zaGFyaW5nIGRhdGE8L2gyPgorPHByZT4gSWYgdHdvIG1vZHVsZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIHNhbWUgYWdlbnQvc3ViYWdlbnQsIHRoZW4ganVzdCB1c2UgYQorbm9ybWFsIEMgZ2xvYmFsIHZhci4gTm8gbmVlZCB0byBpbnZvbHZlIG5ldC1zbm1wIGluIHRoZSBwcm9jZXNzLgorCitpZiB0aGV5IGFyZSBkaWZmZXJlbnQgc3ViLWFnZW50cywgeW91IGFyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRyYWRpdGlvbiBJUEMKK21lY2hhbmlzbXMuIHRoZXJlIGlzIG5vIG5ldC1zbm1wIGFwaSBmb3Igc2hhcmluZyBkYXRhIGJldHdlZW4gc3ViYWdlbnRzLgorCitUaGF0IHNhaWQsICpJRiogeW91IG9ubHkgbmVlZCB0aGUgZGF0YSBkdXJpbmcgcHJvY2Vzc2luZyBvZiBHRVQgcmVxdWVzdHMsIG9yCit3aGVuIHlvdSBhcmVuJ3QgcHJvY2Vzc2luZyBhIHJlcXVlc3QgYXQgYWxsLCB5b3Ugc2VuZCBhIHNubXAgcmVxdWVzdCB0byB0aGUKK21hc3Rlciwgd2hpY2ggd2lsbCBxdWVyeSB0aGUgb3RoZXIgc3ViYWdlbnQuIElmIHlvdSBhcmUgcHJvY2Vzc2luZyBhIEdFVAorcmVxdWVzdCBhbmQgYXJlIGNvbXBpbGVkIGludG8gdGhlIG1hc3RlciwgeW91IHdpbGwgaGF2ZSB0byBkZWxlZ2F0ZSB0aGUKK2N1cnJlbnQgcmVxdWVzdCkuCisKK0l0J3MgYSBsaXR0bGUgaW5lZmZpY2llbnQsIGNvbXBhcmVkIHRvIGRpcmVjdCBjb21tdW5pY2F0aW9uIHcvdGhlIG90aGVyCitzdWJhZ2VudCBhbmQgaXQgKndpbGwgbm90KiB3b3JrIGR1cmluZyBzZXQgcHJvY2Vzc2luZy4KKyA8L3ByZT4KKworPGEgbmFtZT0idG9rZW5zIj48L2E+IDxoMj5EZWJ1ZyBUb2tlbnM8L2gyPgorPHByZT4gU29tZSBvZiB0aGUgbW9yZSBjb21tb24gb25lcyBhcmU6CisKKyAgIEFnZW50OiBhZ2VudCwgYWdlbnR4LCBkbG1vZCwgaGFuZGxlciwgaGVscGVyLCBzbm1wZCwgdHJhcCwgdGFibGUKKyAgIE1JQnM6IGluaXRfbWliLCBtaWJfaW5pdCwgcGFyc2UtZmlsZSwgcGFyc2UtbWlicworICAgQXBwczogcmVhZF9jb25maWcKKworQWRkIHRoZW0gdG8geW91ciBzbm1wLmNvbmYgbGlrZSBzbzoKKworICAgIyBvcHRpb25hbGx5IHR1cm4gb24gdGltZSBzdGFtcHMKKyAgIGxvZ1RpbWVzdGFtcCB0cnVlCisgICBkb0RlYnVnZ2luZyAxCisgICBkZWJ1Z1Rva2VucyBhZ2VudHgvY29uZmlnCisKK0lmIHlvdSBwdXQgdGhlbSBpbiBhIGRpZmZlcmVudCBjb25mIGZpbGUsIGxpa2Ugc25tcGQuY29uZiBvciBteWFwcC5jb25mLAorcHJlZml4IGVhY2ggd2l0aCAnW3NubXBdJywgbGlrZSBzbzoKKworICAgW3NubXBdIGRvRGVidWdnaW5nIDEKKworCitUaGlzIGxpc3Qgd2FzIGdlbmVyYXRlZCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgbWFpbiBDVlMgYnJhbmNoOgorCitmaW5kIC4gLW5hbWUgXCIqLmNcIiAtcHJpbnQgfCB4YXJncyBncmVwIERFQlVHTVNHVCB8IGdyZXAgXCIgfCBjdXQgLWYgMiAtZFwiIHwgc29ydCAtdQorCithZGQKK2FnZW50X2hhbmRsZXIKK2FnZW50X3JlZ2lzdHJ5CithZ2VudF9zZXQKK2FnZW50eAorYWdlbnR4X2J1aWxkCithZ2VudHhfYnVpbGRfdmFyYmluZAorYWdlbnR4L2NvbmZpZworYWdlbnR4L2NvbmZpZy9yZXRyaWVzCithZ2VudHgvY29uZmlnL3RpbWVvdXQKK2FnZW50eC9tYXN0ZXIKK2FnZW50eC9zdWJhZ2VudAorYWdlbnR4L3N1YmdhZW50Cithc25fcmVhbGxvYworYXV0b19ubGlzdAorYnVpbGRfb2lkX25vYWxsb2MKK2J1aWxkX29pZF9zZWdtZW50CitjYWxsYmFjaworY2FsbGJhY2tfY2xlYXIKK2NoZWNrX2dldG5leHRfcmVzdWx0cworY2xlYXJfbnNhcF9saXN0Citjb21wYXJlOmluZGV4Citjb21wYXJleAorY29udGFpbmVyCitjb250YWluZXJfaXRlcmF0b3IKK2NvbnRhaW5lcl9pdGVyYXRvcjpyZXN1bHRzCitjb250YWluZXI6bnVsbDoKK2NvbnRhaW5lcjpudWxsOmZpbmQKK2NvbnRhaW5lcjpudWxsOmZpbmRfbmV4dAorY29udGFpbmVyOm51bGw6Zm9yX2VhY2gKK2NvbnRhaW5lcjpudWxsOmZyZWUKK2NvbnRhaW5lcjpudWxsOmdldF9udWxsCitjb250YWluZXI6bnVsbDpnZXRfbnVsbF9mYWN0b3J5Citjb250YWluZXI6bnVsbDpnZXRfbnVsbF9ub2FsbG9jCitjb250YWluZXI6bnVsbDppbnNlcnQKK2NvbnRhaW5lcjpudWxsOnJlbW92ZQorY29udGFpbmVyOm51bGw6c2l6ZQorY29udGFpbmVyX3JlZ2lzdHJ5CitkYWVtb25pemUKK2RlaW5pdF91c21fcG9zdF9jb25maWcKK2RlbGF5ZWRfaW5zdGFuY2UKK2RsbW9kCitkdW1wX2V0aW1lbGlzdAorZW5jb2RlX2tleWNoYW5nZQorZXhhbXBsZQorZXhhbXBsZV9kYXRhX3NldAorZXhhbXBsZV9ub3RpZmljYXRpb24KK2V4YW1wbGVfc2NhbGFyX2ludAorZml4dXBfbWliX2RpcmVjdG9yeQorZ2VuZXJhdGVfS3UKK2dlbmVyYXRlX2t1bAorZ2V0X21pYl9kaXJlY3RvcnkKK2hhbmRsZXI6Y2FsbGluZworaGFuZGxlcjppbmplY3QKK2hhbmRsZXI6OnJlZ2lzdGVyCitoYW5kbGVyX3JlZ2lzdHJ5CitoYW5kbGVyOnJldHVybmVkCitoZWFkZXJfY29tcGxleAoraGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEKK2hlYWRlcl9jb21wbGV4X2R1bXAKK2hlYWRlcl9jb21wbGV4X2V4dHJhY3RfZW50cnkKK2hlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZAoraGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfdmFyb2lkCitoZWFkZXJfY29tcGxleF9wYXJzZV9vaWQKK2hlYWRlcl9jb21wbGV4X3Rlc3QKK2hlbHBlcjpiYWJ5X3N0ZXBzCitoZWxwZXI6Y2FjaGVfaGFuZGxlcgoraGVscGVyOmRlYnVnCitoZWxwZXI6aW5zdGFuY2UKK2hlbHBlcjptZmQKK2hlbHBlcjpudWxsCitoZWxwZXI6cmVhZF9vbmx5CitoZWxwZXI6cm93X21lcmdlCitoZWxwZXI6c2NhbGFyCitoZWxwZXI6c2NhbGFyX2dyb3VwCitoZWxwZXI6c2VyaWFsaXplCitoZWxwZXI6c3Rhc2hfY2FjaGUKK2hlbHBlcjp0YWJsZQoraGVscGVyOndhdGNoZXIKK2hlbHBlcjp3YXRjaGVyOnNwaW5sb2NrCitoZWxwZXI6d2F0Y2hlcjp0aW1lc3RhbXAKK2hvc3QvaHJfZGV2aWNlCitob3N0L2hyX2Rpc2sKK2hvc3QvaHJfZmlsZXN5cworaG9zdC9ocl9pbnN0Citob3N0L2hyX25ldHdvcmsKK2hvc3QvaHJfcGFydGl0aW9uCitob3N0L2hyX3ByaW50Citob3N0L2hyX3Byb2MKK2hvc3QvaHJfc3RvcmFnZQoraG9zdC9ocl9zd2luc3QKK2hvc3QvaHJfc3dydW4KK2hvc3QvaHJfc3dydW46OkdldE5leHRIUl9TV1J1bgoraG9zdC9ocl9zeXN0ZW0KK2hyX3Byb2MKK2luaXRpYWxpemVfdGFibGVfaXBDaWRyUm91dGVUYWJsZQoraW5pdGlhbGl6ZV90YWJsZV9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlCitpbml0aWFsaXplX3RhYmxlX210ZUV2ZW50VGFibGUKK2luaXRpYWxpemVfdGFibGVfbmV0U25tcEhvc3RzVGFibGUKK2luaXRpYWxpemVfdGFibGVfbmxtTG9nVGFibGUKK2luaXRpYWxpemVfdGFibGVfbmxtTG9nVmFyaWFibGVUYWJsZQoraW5pdGlhbGl6ZV90YWJsZV9uc01vZHVsZVRhYmxlCitpbml0aWFsaXplX3RhYmxlX25zVHJhbnNhY3Rpb25UYWJsZQoraW5pdF9taWIKK2luaXRfdXNtCitpbmplY3RIYW5kbGVyCitrZXJuZWxfc3Vub3M1Citrc20KK2xjZF9nZXRfZW5naW5ldGltZQorbGNkX2dldF9lbmdpbmV0aW1lX2V4CitsY2Rfc2V0X2VuZ2luZXRpbWUKK2xvZ19ub3RpZmljYXRpb24KK21kNQorbWZkCittaWJJSS9hdAorbWliSUkvaWNtcAorbWliSUkvaW50ZXJmYWNlcworbWliSUkvaXAKK21pYklJL2lwdjYKK21pYklJL210YV9zZW5kbWFpbC5jOm10YV9zZW5kbWFpbF9wYXJzZV9jb25maWcKK21pYklJL210YV9zZW5kbWFpbC5jOm9wZW5fc2VuZG1haWxzdAorbWliSUkvbXRhX3NlbmRtYWlsLmM6cmVhZF9zZW5kbWFpbGNmCittaWJJSS9zbm1wX21pYgorbWliSUkvc3lzT1JUYWJsZQorbWliSUkvdGNwU2NhbGFyCittaWJJSS90Y3BUYWJsZQorbWliSUkvdWRwU2NhbGFyCittaWJJSS91ZHBUYWJsZQorbWliSUkvdmFjbV92YXJzCittaWJJSS92YXJfcm91dGUKK21pYl9pbml0CittdGVfZGlzY28KK210ZUV2ZW50VGFibGU6c2VuZF9ldmVudHMKK210ZU9iamVjdHNUYWJsZQorbXRlVHJpZ2dlckJvb2xlYW5UYWJsZQorbXRlVHJpZ2dlckRlbHRhVGFibGUKK210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZQorbXRlVHJpZ2dlcnRhYmxlCittdGVUcmlnZ2VyVGFibGUKK210ZVRyaWdnZXJUZXN0CittdGVUcmlnZ2VyVGVzdDpzZW5kX210ZV90cmFwCittdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUKK25ldHNubXBfYWFsNXB2YworbmV0c25tcF9hZ2VudF9jaGVja19wYWNrZXQKK25ldHNubXBfZGVyZWdpc3Rlcl9hZ2VudF9uc2FwCituZXRzbm1wX2RzX2hhbmRsZV9jb25maWcKK25ldHNubXBfZHNfc2V0X2Jvb2xlYW4KK25ldHNubXBfZHNfc2V0X2ludAorbmV0c25tcF9kc19zZXRfc3RyaW5nCituZXRzbm1wX2RzX3NldF92b2lkCituZXRzbm1wX2RzX3RvZ2dsZV9ib29sZWFuCituZXRzbm1wX2luc3RhbmNlX2NvdW50ZXIzMl9oYW5kbGVyCituZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyCituZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlcgorbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyCituZXRzbm1wX2lweAorbmV0c25tcF9yZWdpc3Rlcl9hZ2VudF9uc2FwCituZXRzbm1wX3JlZ2lzdGVyX21pYl90YWJsZV9yb3cKK25ldHNubXBfc29ja2FkZHJfaW4KK25ldHNubXBfc29ja2FkZHJfaW42CituZXRzbm1wX3NvY2thZGRyX2lweAorbmV0c25tcF90YWJsZV9kYXRhX3NldAorbmV0c25tcF90Y3AKK25ldHNubXBfdGNwNgorbmV0c25tcF91ZHAKK25ldHNubXBfdWRwNgorbmV0c25tcF91ZHA2X2dldFNlY05hbWUKK25ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eQorbmV0c25tcF91ZHBfZ2V0U2VjTmFtZQorbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHkKK25ldHNubXBfdW5peAorbmV0c25tcF91bml4X2dldFNlY05hbWUKK25ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eQorbmV0c25tcF91bml4X3RyYW5zcG9ydAorbmV0c3RhdDppZgorbm90aWZpY2F0aW9uX2xvZworbnNDYWNoZVNjYWxhcnMKK25zRGVidWdTY2FsYXJzCitvYmplY3RfbW9uaXRvcgorb2xkX2FwaQorb3V0cHV0CitvdmVycmlkZQorcGFyc2UtZmlsZQorcGFyc2UtbWlicworcGFyc2Vfb2lkCitwYXJzZV9vaWRfaW5kZXhlcworcGVybAorcHJvYworcHJveHkKK3Byb3h5X2FyZ3MKK3Byb3h5X2NvbmZpZworcHJveHlfaW5pdAorcmVhZF9jb25maWcKK3JlYWRfY29uZmlnX2NvcHlfd29yZAorcmVhZF9jb25maWdfZmlsZXMKK3JlYWRfY29uZmlnOmZvcndhcmQKK3JlYWRfY29uZmlnOmluaXRtaWIKK3JlYWRfY29uZmlnX3JlYWRfZGF0YQorcmVhZF9jb25maWdfcmVhZF9tZW1vcnkKK3JlYWRfY29uZmlnX3JlYWRfb2JqaWQKK3JlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nCityZWFkX2NvbmZpZ19zdG9yZV9kYXRhX3ByZWZpeAorcmVhZF9jb25maWc6dHJhcGhhbmRsZQorcmVnaXN0ZXJfZXhjZXB0ZmQKK3JlZ2lzdGVyX2luZGV4CityZWdpc3Rlcl9taWIKK3JlZ2lzdGVyX3JlYWRmZAorcmVnaXN0ZXJfc2lnbmFsCityZWdpc3Rlcl93cml0ZWZkCityZXBvcnQKK3Jlc3VsdHMKK3NjYWxhcl9pbnQKK3NjYXBpCitzY29wZWRQRFVfcGFyc2UKK3NlbmRfbm90aWZpY2F0aW9ucworc2Vzc19hc3luY19zZW5kCitfc2Vzc19vcGVuCitzZXNzX3Byb2Nlc3NfcGFja2V0CitzZXNzX3JlYWQKK3Nlc3NfcmVzZW5kCitzZXNzX3NlbGVjdAorc2V0dGluZyBhdXRoIHR5cGU6IFwKK3NpZ25hbAorc211eAorc211eF9jb25mCitzbXV4X2luaXQKK3NtdXgvc25tcF9iZ3AKK3NtdXgvc25tcF9vc3BmCitzbXV4L3NubXBfcmlwMgorc25tcF9hZ2VudAorc25tcF9hbGFybQorc25tcF9hcGkKK3NubXBfYnVpbGQKK3NubXBfY2xlYW5fcGVyc2lzdGVudAorc25tcF9jb25maWcKK3NubXBkCitzbm1wZC9tYWluCitzbm1wZF9wb3J0cworc25tcGRfcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyCitzbm1wZC9zZWxlY3QKK3NubXBFbmdpbmUKK3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUKK3NubXBOb3RpZnlGaWx0ZXJUYWJsZQorc25tcE5vdGlmeVRhYmxlCitzbm1wX3BhcnNlCitzbm1wX3BhcnNlX2FyZ3MKK3NubXBfcGFyc2Vfb2lkCitzbm1wX3BkdV9yZWFsbG9jX3JidWlsZAorc25tcF9zYXZlX3BlcnNpc3RlbnQKK3NubXBfc2VuZAorc25tcF9zZXNzX2FkZAorc25tcF9zZXNzX2Nsb3NlCitzbm1wX3Nlc3Nfb3Blbgorc25tcFNldFNlcmlhbE5vCitzbm1wX3N0b3JlCitzbm1wVGFyZ2V0QWRkckVudHJ5Citzbm1wVGFyZ2V0UGFyYW1zRW50cnkKK3NubXB0cmFwZAorc25tcHYzCitzbm1wdjNfcGFyc2UKK3NwcmludF9ieV90eXBlCitzdGFzaF9jYWNoZQorc3VidHJlZQordGFibGVfYXJyYXkKK3RhYmxlX2FycmF5OmdldAordGFibGVfYXJyYXk6Z3JvdXAKK3RhYmxlX2RhdGFfYWRkX2RhdGEKK3RhYmxlX2l0ZXJhdG9yCit0YWJsZV9zZXRfYWRkX3JvdwordGFrZV9zbmFwc2hvdAordGFyZ2V0X2NvdW50ZXJzCit0YXJnZXRfc2Vzc2lvbnMKK3Rkb21haW4KK3Rlc3RoYW5kbGVyCit0ZXN0aGFuZGxlcl90YWJsZQordHJhbnNwb3J0X2NhbGxiYWNrCit0cmFwCit0cmFwc2VzcwordHVubmVsCit1Y2REZW1vUHVibGljCit1Y2Qtc25tcC9kaXNrCit1Y2Qtc25tcC9kaXNrOgordWNkLXNubXAvbWVtb3J5Cit1Y2Qtc25tcC9wYXNzCit1Y2Qtc25tcC9wYXNzX3BlcnNpc3QKK3VjZC1zbm1wL3Byb2MKK3VjZC1zbm1wL3ZlcnNpb25pbmZvCit1Y2Qtc25tcC92bXN0YXRfYWl4NC5jOnVwZGF0ZV9zdGF0cwordWNkLXNubXAvdm1zdGF0X2R5bml4LmM6dXBkYXRlX3N0YXRzCit1Y2Qtc25tcC92bXN0YXRfaHB1eC5jOnVwZGF0ZV9zdGF0cwordWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmM6dXBkYXRlX3N0YXRzCit1bmxpbmtfdHJlZQordW5sb2FkLW1pYgordW5yZWdpc3Rlcl9leGNlcHRmZAordW5yZWdpc3Rlcl9yZWFkZmQKK3VucmVnaXN0ZXJfc2lnbmFsCit1bnJlZ2lzdGVyX3dyaXRlZmQKK3VzbQordXNtVXNlcgordXRpbF9mdW5jcwordmFjbTpjaGVja1N1YnRyZWUKK3ZhY206Z2V0VmlldwordmVyc2lvbmluZm8KK3Ztc3RhdAoreXl5aW5qZWN0SGFuZGxlcgorIDwvcHJlPgorCis8YSBuYW1lPSJzdGVwcyI+PC9hPiA8aDI+QmFieSBTdGVwcyBGbG93PC9oMj4KKzxwcmU+ICAgICAvKioKKyAgICAgKiBCYWJ5IFN0ZXBzIEZsb3cgZGlhZ3JhbSAocmV2IDIwMDMuMDkuMjkuMTMzMCkKKyAgICAgKgorICAgICAqIExlZ2VuZDogKHRlc3QpIFtvcHRpb25hbF0gJmx0O3JlcXVpcmVkPgorICAgICAqCisgICAgICogT0xEICAgICAgICAgICAgICBORVcKKyAgICAgKiA9PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgKiArKysgICAgICAgICAgIFtwcmVfcmVxdWVzdF0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgKHJvdyBleGlzdHM/KSBOIC0+KHJvd19jcmVhdGlvbikgTiA+LS0+KworICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgWSAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8Jmx0Oy0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgIFx8LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcfC8KKyAgICAgKiBSRVNFUlZFMSAgJmx0O29iamVjdF9zeW50YXhfY2hlY2tzPiAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCisgICAgICogICAgICAgICAgICAgICAgICAoZXJyPykgIFkgPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4rCisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgXHwvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx8LworICAgICAqICsrKyAgICAgICAgICAocm93IGV4aXN0ZWQ/KSBOIC0tLT5bcm93X2NyZWF0aW9uXSAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8Jmx0Oy0tLS0tLS0tLS0tLS0tTiAoZXJyPykgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgWSAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgIFtyb3dfY3JlYXRpb25fY2xlYW51cF0tLS0+KworICAgICAqICAgICAgICAgICAgICAgICAgIFx8LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqIFJFU0VSVkVSMiAgICAgW3VuZG9fc2V0dXBdICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgKGVycj8pICBZIC0tLT4tLS0tLS0tLT4tLS0tLS0tLS0+KyAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcfC8KKyAgICAgKiBBQ1RJT04gICAgICAgICZsdDtzZXRfdmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgIChlcnI/KSAgWSA+LS0tLS0tLS0tKyAgICAgICAgICAgXHwvIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgIHwKKyAgICAgKiArKysgICAgICAgIFtjb25zaXN0ZW5jeV9jaGVja3NdICAgICAgfCAgICAgICAgICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBcfC8gICAgICAgICAgIHwgIHwKKyAgICAgKiBVTkRPICAgICAgICAgICAgIChlcnI/KSAgWSA+LS0tLS0tLVt1bmRvXS0tLS0tLS0tPisgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgKiAgICAgICAgICAgIFtyZXZlcnNpYmxlX2NvbW1pdF0gICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgKiArKysgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXHwvCisgICAgICogICAgICAgICAgICAgICAgICAoZXJyPykgIFkgPi0tW3JldmVyc2VfY29tbWl0XSAgICB8ICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICB8CisgICAgICogQ09NTUlUICAgICAgICAmbHQ7ZmluYWxfY29tbWl0PiAgICAgIHwgICAgICAgICAgICAgICB8ICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICB8CisgICAgICogICAgICAgICAgICAgICAgICAoZXJyPykgIFkgPi0tW2xvZyBtc2ddICAgICAgICAgICB8ICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgXHwvICAgICAgICAgICAgIFx8LyB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgJmx0Oy0tLS0tLS0tLS0tJmx0OystLS0mbHQ7LS0tLS0tLS0tLS0rICB8CisgICAgICogICAgICAgICAgICAgICAgICAgXHwvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogRlJFRSAgICAgICAgICBbdW5kb19jbGVhbnVwXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx8LworICAgICAqICAgICAgICAgICAgICAgICAgICB8Jmx0Oy0tLS0tLS0tLS0tLS0tJmx0Oy0tLS0tLS0tLS0tLS0tLS0tKworICAgICAqICAgICAgICAgICAgICAgICAgIFx8LworICAgICAqICAgICAgICAgICAgICAgW3Bvc3RfcmVxdWVzdF0KKyAgICAgKi8KKyA8L3ByZT4KKworPGhyPgorPHRhYmxlIHdpZHRoPSIxMDAlIj4KKzx0cj48dGQgYWxpZ249bGVmdD4KKzxicj5QYWdlCis8IS0tIENyZWF0ZWQ6IFRodSBKdWwgMjQgMTA6MDg6MjYgTUVUIERTVCAxOTk3IC0tPgorPCEtLSBoaG10cyBzdGFydCAtLT4KK0xhc3QgbW9kaWZpZWQ6IFdlZCBNYXIgMTIgMTM6NDk6MzIgUFNUIDIwMDMKKzwhLS0gaGhtdHMgZW5kIC0tPgorPC90ZD48dGQgYWxpZ249cmlnaHQ+Cis8YnI+UG93ZXJlZCBieToKKzxBIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQiPgorICAgICAgPElNRyBzcmM9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvc2Zsb2dvLnBocD9ncm91cF9pZD0xMjY5NCZhbXA7dHlwZT0xIiB3aWR0aD0iODgiIGhlaWdodD0iMzEiIGJvcmRlcj0iMCIgYWx0PSJTb3VyY2VGb3JnZSBMb2dvIj48L0E+CisKKzwvdGQ+PC90cj48L3RhYmxlPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L2h0bWxoZWxwL0ZBUS5odG1sIGIvd2luMzIvZGlzdC9odG1saGVscC9GQVEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjM1YWNlCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvZGlzdC9odG1saGVscC9GQVEuaHRtbApAQCAtMCwwICsxLDMzNzUgQEAKKzxib2R5IGJnY29sb3I9IiNmZmZmZmYiIGJhY2tncm91bmQ9InVjZC1zbm1wLWJnMy5naWYiPgorPHRpdGxlPk5FVC1TTk1QIEZBUTwvdGl0bGU+Cis8ZGl2IGFsaWduPWNlbnRlcj4KKzxoMT5GcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyAoRkFRKSBmb3IgdGhlIE5ldC1TTk1QIHBhY2thZ2U8L2gxPgorRkFRIE1haW50YWluZXI6IERhdmUgU2hpZWxkPGJyPgorRW1haWw6IDxhIGhyZWY9Im1haWx0bzpuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0Ij5uZXQtc25tcC1jb2RlcnNAbGlzdC5zb3VyY2Vmb3JnZS5uZXQ8L2E+PGJyPgorPC9kaXY+Cis8aHI+Cis8aDI+VGFibGUgb2YgQ29udGVudHM8L2gyPgorPC91bD48bGk+PGI+R0VORVJBTDwvYj48dWw+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2lzX2l0XyI+V2hhdCBpcyBpdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGVyZV9jYW5fSV9nZXRfaXRfIj5XaGVyZSBjYW4gSSBnZXQgaXQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9kb2N1bWVudGF0aW9uX2lzX2F2YWlsYWJsZV8iPldoYXQgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGU/PC9hPgorPGxpPiA8YSBocmVmPSIjQXJlX3RoZXJlX2JpbmFyaWVzX2F2YWlsYWJsZV8iPkFyZSB0aGVyZSBiaW5hcmllcyBhdmFpbGFibGU/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fVUNEX1NOTVBfYW5kX05ldF9TTk1QXyI+V2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gVUNELVNOTVAgYW5kIE5ldC1TTk1QPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfb3BlcmF0aW5nX3N5c3RlbXNfZG9lc19pdF9ydW5fb25fIj5XaGF0IG9wZXJhdGluZyBzeXN0ZW1zIGRvZXMgaXQgcnVuIG9uPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfaGFwcGVuc19pZl9taW5lX2lzbl90X2xpc3RlZF8iPldoYXQgaGFwcGVucyBpZiBtaW5lIGlzbid0IGxpc3RlZD88L2E+Cis8bGk+IDxhIGhyZWY9IiNEb2VzX2l0X3J1bl9vbl9XaW5kb3dzXyI+RG9lcyBpdCBydW4gb24gV2luZG93cz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9maW5kX291dF9hYm91dF9uZXdfcmVsZWFzZXNfIj5Ib3cgZG8gSSBmaW5kIG91dCBhYm91dCBuZXcgcmVsZWFzZXM/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX2ZpbmRfb3V0X3doYXRfb3RoZXJfcGVvcGxlX2FyZV9kb2luZ18iPkhvdyBjYW4gSSBmaW5kIG91dCB3aGF0IG90aGVyIHBlb3BsZSBhcmUgZG9pbmc/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfc3VibWl0X2FfcGF0Y2hfb3JfYnVnX3JlcG9ydF8iPkhvdyBkbyBJIHN1Ym1pdCBhIHBhdGNoIG9yIGJ1ZyByZXBvcnQ/PC9hPgorPGxpPiA8YSBocmVmPSIjQ2FuX0lfcmV1c2VfdGhlX2NvZGVfaW5fbXlfY29tbWVyY2lhbF9hcHBsaWNhdGlvbl8iPkNhbiBJIHJldXNlIHRoZSBjb2RlIGluIG15IGNvbW1lcmNpYWwgYXBwbGljYXRpb24/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fU05NUHZfX19TTk1Qdl9fYW5kX1NOTVB2X18iPldoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNOTVB2MSwgU05NUHYyIGFuZCBTTk1QdjM/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9hcmVfYWxsX3RoZXNlX2RpZmZlcmVudF9TTk1Qdl9fc19hbnl3YXlfIj5XaGF0IGFyZSBhbGwgdGhlc2UgZGlmZmVyZW50IFNOTVB2MidzIGFueXdheT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGljaF92ZXJzaW9uc19vZl9TTk1QX2FyZV9zdXBwb3J0ZWRfaW5fdGhpc19wYWNrYWdlXyI+V2hpY2ggdmVyc2lvbnMgb2YgU05NUCBhcmUgc3VwcG9ydGVkIGluIHRoaXMgcGFja2FnZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNDYW5fSV91c2VfU05NUHZfX3JlcXVlc3RzX3dpdGhfYW5fU05NUHZfX01JQl9fb3JfdmljZV92ZXJzYV9fIj5DYW4gSSB1c2UgU05NUHYxIHJlcXVlc3RzIHdpdGggYW4gU05NUHYyIE1JQiAob3IgdmljZSB2ZXJzYSk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hlcmVfY2FuX0lfZmluZF9tb3JlX2luZm9ybWF0aW9uX2Fib3V0X25ldHdvcmtfbWFuYWdlbWVudF8iPldoZXJlIGNhbiBJIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBuZXR3b3JrIG1hbmFnZW1lbnQ/PC9hPgorPGxpPiA8YSBocmVmPSIjSXNfdWNkX3NubXBfdGhyZWFkX3NhZmVfIj5JcyB1Y2Qtc25tcCB0aHJlYWQgc2FmZT88L2E+Cis8L3VsPjxsaT48Yj5BUFBMSUNBVElPTlM8L2I+PHVsPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfYWRkX2FfTUlCXyI+SG93IGRvIEkgYWRkIGEgTUlCPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2FkZF9hX01JQl90b190aGVfdG9vbHNfIj5Ib3cgZG8gSSBhZGQgYSBNSUIgdG8gdGhlIHRvb2xzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9jYW5fdF9JX3NlZV9hbnl0aGluZ19mcm9tX3RoZV9hZ2VudF8iPldoeSBjYW4ndCBJIHNlZSBhbnl0aGluZyBmcm9tIHRoZSBhZ2VudD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfY2FuX3RfSV9zZWVfdmFsdWVzX2luX3RoZV9fSU5TRVJUX0VOVEVSUFJJU0VfSEVSRV9fdHJlZV8iPldoeSBjYW4ndCBJIHNlZSB2YWx1ZXMgaW4gdGhlIDxJTlNFUlQgRU5URVJQUklTRSBIRVJFPiB0cmVlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1JlcXVlc3RzX2Fsd2F5c19zZWVtX3RvX3RpbWVvdXRfX2FuZF9kb25fdF9naXZlX21lX2FueXRoaW5nX2JhY2tfX19XaHlfIj5SZXF1ZXN0cyBhbHdheXMgc2VlbSB0byB0aW1lb3V0LCBhbmQgZG9uJ3QgZ2l2ZSBtZSBhbnl0aGluZyBiYWNrLiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfY2FuX3NlZV90aGVfc3lzdGVtX2dyb3VwX19idXRfbm90aGluZ19lbHNlX19fV2h5XyI+SSBjYW4gc2VlIHRoZSBzeXN0ZW0gZ3JvdXAsIGJ1dCBub3RoaW5nIGVsc2UuICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX2FnZW50X3dvcmtlZF9mb3JfYV93aGlsZV9fdGhlbl9zdG9wcGVkX3Jlc3BvbmRpbmdfX19XaHlfIj5UaGUgYWdlbnQgd29ya2VkIGZvciBhIHdoaWxlLCB0aGVuIHN0b3BwZWQgcmVzcG9uZGluZy4gIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNSZXF1ZXN0aW5nX2FuX29iamVjdF9mYWlsc193aXRoX19Vbmtub3duX09iamVjdF9JZGVudGlmaWVyX19fV2h5XyI+UmVxdWVzdGluZyBhbiBvYmplY3QgZmFpbHMgd2l0aCAiVW5rbm93biBPYmplY3QgSWRlbnRpZmllciIgIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfZG9fSV9nZXRfX25vU3VjaE5hbWVfX3doZW5fYXNraW5nX2Zvcl9fc3lzVXBUaW1lX19fb3Jfc2ltaWxhcl9fIj5XaHkgZG8gSSBnZXQgIm5vU3VjaE5hbWUiIHdoZW4gYXNraW5nIGZvciAic3lzVXBUaW1lIiAob3Igc2ltaWxhcik/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2RvX0lfc29tZXRpbWVzX2dldF9fRW5kX29mX01JQl9fd2hlbl93YWxraW5nX2FfdHJlZV9fYW5kX3NvbWV0aW1lc19ub3RfIj5XaHkgZG8gSSBzb21ldGltZXMgZ2V0ICJFbmQgb2YgTUlCIiB3aGVuIHdhbGtpbmcgYSB0cmVlLCBhbmQgc29tZXRpbWVzIG5vdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX2Nhbm5vdF9zZXRfYW55X3ZhcmlhYmxlc19pbl90aGVfTUlCXyI+SSBjYW5ub3Qgc2V0IGFueSB2YXJpYWJsZXMgaW4gdGhlIE1JQi48L2E+Cis8bGk+IDxhIGhyZWY9IiNWYXJpYWJsZXNfc2VlbV90b19kaXNhcHBlYXJfd2hlbl9JX3RyeV90b19zZXRfdGhlbV9fX1doeV8iPlZhcmlhYmxlcyBzZWVtIHRvIGRpc2FwcGVhciB3aGVuIEkgdHJ5IHRvIHNldCB0aGVtLiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfc3RpbGxfY2FuX3RfY2hhbmdlX3N5c0xvY2F0aW9uX190aG91Z2hfdGhlX2FjY2Vzc19zZXR0aW5nc19hbGxvdyI+SSBzdGlsbCBjYW4ndCBjaGFuZ2Ugc3lzTG9jYXRpb24sIHRob3VnaCB0aGUgYWNjZXNzIHNldHRpbmdzIGFsbG93PC9hPgorPGEgaHJlZj0iI0lfc3RpbGxfY2FuX3RfY2hhbmdlX3N5c0xvY2F0aW9uX190aG91Z2hfdGhlX2FjY2Vzc19zZXR0aW5nc19hbGxvdyI+ICAgICAgIGl0LiAgV2h5IG5vdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX2dldF9hbl9lcnJvcl93aGVuX3RyeWluZ190b19zZXRfYV9uZWdhdGl2ZV92YWx1ZV9fX3doeV8iPkkgZ2V0IGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHNldCBhIG5lZ2F0aXZlIHZhbHVlIC0gd2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfZ2V0X2FuX2Vycm9yX3doZW5fdHJ5aW5nX3RvX2dldF9hX3N0cmluZ19pbmRleGVkX3RhYmxlX3ZhbHVlX19fd2h5XyI+SSBnZXQgYW4gZXJyb3Igd2hlbiB0cnlpbmcgdG8gZ2V0IGEgc3RyaW5nLWluZGV4ZWQgdGFibGUgdmFsdWUgLSB3aHk/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfc2VuZF90cmFwc19hbmRfbm90aWZpY2F0aW9uc18iPkhvdyBkbyBJIHNlbmQgdHJhcHMgYW5kIG5vdGlmaWNhdGlvbnM/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfaGFuZGxlX3RyYXBzX2FuZF9ub3RpZmljYXRpb25zXyI+SG93IGRvIEkgaGFuZGxlIHRyYXBzIGFuZCBub3RpZmljYXRpb25zPzwvYT4KKzxsaT4gPGEgaHJlZj0iI015X3RyYXBoYW5kbGVyX3NjcmlwdF9kb2Vzbl90X3dvcmtfd2hlbl9ydW5fbGlrZV90aGlzX19fd2h5X25vdF8iPk15IHRyYXBoYW5kbGVyIHNjcmlwdCBkb2Vzbid0IHdvcmsgd2hlbiBydW4gbGlrZSB0aGlzIC0gd2h5IG5vdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfdWNkU2h1dGRvd25fdHJhcF9PSURfcmVjZWl2ZWRfYnlfbXlfbWFuYWdlcl9pc193cm9uZ19fV2h5XyI+VGhlIHVjZFNodXRkb3duIHRyYXAgT0lEIHJlY2VpdmVkIGJ5IG15IG1hbmFnZXIgaXMgd3JvbmcuIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfZG9lc19zbm1wdHJhcGRfY29tcGxhaW5fYWJvdXRfQWdlbnRYXyI+V2h5IGRvZXMgc25tcHRyYXBkIGNvbXBsYWluIGFib3V0IEFnZW50WD88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV91c2VfU05NUHZfXyI+SG93IGRvIEkgdXNlIFNOTVB2Mz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfYmlnX2Nhbl9hbl9TTk1QX3JlcXVlc3RfX29yX3JlcGx5X19iZV8iPkhvdyBiaWcgY2FuIGFuIFNOTVAgcmVxdWVzdCAob3IgcmVwbHkpIGJlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9tb25pdG9yX215X3N5c3RlbXNfX2Rpc2tfX21lbW9yeV9fZXRjX18iPkhvdyBjYW4gSSBtb25pdG9yIG15IHN5c3RlbXMgKGRpc2ssIG1lbW9yeSwgZXRjKT88L2E+Cis8bGk+IDxhIGhyZWY9IiNBcHBsaWNhdGlvbnNfY29tcGxhaW5fYWJvdXRfZW50cmllc19pbl95b3VyX2V4YW1wbGVfX3NubXBfY29uZl9fZmlsZV9fX1doeV8iPkFwcGxpY2F0aW9ucyBjb21wbGFpbiBhYm91dCBlbnRyaWVzIGluIHlvdXIgZXhhbXBsZSAnc25tcC5jb25mJyBmaWxlLiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI09LX193aGF0X3Nob3VsZF9JX3B1dF9pbl9zbm1wX2NvbmZfIj5PSywgd2hhdCBzaG91bGQgSSBwdXQgaW4gc25tcC5jb25mPzwvYT4KKzwvdWw+PGxpPjxiPlBFUkw8L2I+PHVsPgorPGxpPiA8YSBocmVmPSIjV2hlcmVfY2FuX0lfZ2V0X3RoZV9wZXJsX1NOTVBfcGFja2FnZV8iPldoZXJlIGNhbiBJIGdldCB0aGUgcGVybCBTTk1QIHBhY2thZ2U/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfaW5zdGFsbF90aGVfUGVybF9TTk1QX21vZHVsZXNfIj5Ib3cgZG8gSSBpbnN0YWxsIHRoZSBQZXJsIFNOTVAgbW9kdWxlcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNCdXRfY29tcGlsaW5nX3RoaXNfZmFpbHNfX1doeV8iPkJ1dCBjb21waWxpbmcgdGhpcyBmYWlscyEgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0NvbXBpbGluZ190aGVfcGVybF9tb2R1bGVfd29ya3NfT0tfX2J1dF9fbWFrZV90ZXN0X19mYWlsc19fV2h5XyI+Q29tcGlsaW5nIHRoZSBwZXJsIG1vZHVsZSB3b3JrcyBPSywgYnV0ICdtYWtlIHRlc3QnIGZhaWxzLiBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX3BlcmxfX21ha2VfdGVzdF9fZmFpbHNfb25fdGhlX09JRF90ZXN0c19fSXNfaXRfc2FmZV90b19jb250aW51ZV8iPlRoZSBwZXJsICdtYWtlIHRlc3QnIGZhaWxzIG9uIHRoZSBPSUQgdGVzdHMuIElzIGl0IHNhZmUgdG8gY29udGludWU/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9tX3RyeWluZ190b191c2VfbWliX2NfX29yX3RrbWliX19hbmRfaXRfY2FuX3RfbG9jYXRlX1NOTVBfcG1fIj5JJ20gdHJ5aW5nIHRvIHVzZSBtaWIyYyAob3IgdGttaWIpIGFuZCBpdCBjYW4ndCBsb2NhdGUgU05NUC5wbT88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX21fdHJ5aW5nX3RvX3VzZV9taWJfY19fb3JfdGttaWJfX2FuZF9pdF9jYW5fdF9sb2FkX1NOTVBfc29fIj5JJ20gdHJ5aW5nIHRvIHVzZSBtaWIyYyAob3IgdGttaWIpIGFuZCBpdCBjYW4ndCBsb2FkIFNOTVAuc28/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9tX3RyeWluZ190b191c2VfdGttaWJfYW5kX2l0X2Nhbl90X2xvY2F0ZV9Ua19wbV8iPkknbSB0cnlpbmcgdG8gdXNlIHRrbWliIGFuZCBpdCBjYW4ndCBsb2NhdGUgVGsucG0/PC9hPgorPGxpPiA8YSBocmVmPSIjSV92ZV9nb3RfYV9wcm9ibGVtX3dpdGhfdGhlX05ldF9TTk1QX21vZHVsZV9fX0Nhbl95b3VfaGVscF8iPkkndmUgZ290IGEgcHJvYmxlbSB3aXRoIHRoZSBOZXQtU05NUCBtb2R1bGUuICBDYW4geW91IGhlbHA/PC9hPgorPC91bD48bGk+PGI+TUlCUzwvYj48dWw+Cis8bGk+IDxhIGhyZWY9IiNXaGVyZV9jYW5fSV9maW5kX2FfTUlCX2NvbXBpbGVyXyI+V2hlcmUgY2FuIEkgZmluZCBhIE1JQiBjb21waWxlcj88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX2Nhbl90X2xvYWRfYW55X29mX3RoZV9taWJfZmlsZXNfX2FuZF90aGV5X3NlZW1fdG9fYmVfbWlzc2luZyI+SSBjYW4ndCBsb2FkIGFueSBvZiB0aGUgbWliIGZpbGVzLCBhbmQgdGhleSBzZWVtIHRvIGJlIG1pc3Npbmc8L2E+Cis8YSBocmVmPSIjSV9jYW5fdF9sb2FkX2FueV9vZl90aGVfbWliX2ZpbGVzX19hbmRfdGhleV9zZWVtX3RvX2JlX21pc3NpbmciPiAgICAgICB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgdGhlIGZpbGVuYW1lLiAgV2hhdCdzIGhhcHBlbmluZz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfYXJlbl90X215X21pYl9maWxlc19iZWluZ19yZWFkX2luXyI+V2h5IGFyZW4ndCBteSBtaWIgZmlsZXMgYmVpbmcgcmVhZCBpbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX21fZ2V0dGluZ19hbnN3ZXJzX19idXRfdGhleV9yZV9hbGxfbnVtYmVyc19fV2h5XyI+SSdtIGdldHRpbmcgYW5zd2VycywgYnV0IHRoZXkncmUgYWxsIG51bWJlcnMuIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2RvZXNfX0Nhbm5vdF9maW5kX21vZHVsZV9fWFhYX01JQl9fX21lYW5fIj5XaGF0IGRvZXMgIkNhbm5vdCBmaW5kIG1vZHVsZSAoWFhYLU1JQikiIG1lYW4/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9hYm91dF9fdW5saW5rZWRfT0lEX18iPldoYXQgYWJvdXQgInVubGlua2VkIE9JRCI/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX3BhcnNlcl9kb2Vzbl90X2hhbmRsZV9jb21tZW50c19wcm9wZXJseV9fV2h5X25vdF8iPlRoZSBwYXJzZXIgZG9lc24ndCBoYW5kbGUgY29tbWVudHMgcHJvcGVybHkuIFdoeSBub3Q/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfcmVwbGFjZV9NSUJfdmFsdWVzX3dpdGhfbmV3X29uZXNfIj5Ib3cgZG8gSSByZXBsYWNlIE1JQiB2YWx1ZXMgd2l0aCBuZXcgb25lcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfZ2V0X21vcmVfaW5mb3JtYXRpb25fYWJvdXRfdGhlc2VfTUlCX2ZpbGVfcHJvYmxlbXNfIj5Ib3cgY2FuIEkgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgTUlCIGZpbGUgcHJvYmxlbXM/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9zX3RoaXNfYWJvdXRfX3Rvb19tYW55X2ltcG9ydGVkX3N5bWJvbHNfXyI+V2hhdCdzIHRoaXMgYWJvdXQgInRvbyBtYW55IGltcG9ydGVkIHN5bWJvbHMiPzwvYT4KKzwvdWw+PGxpPjxiPkFHRU5UPC9iPjx1bD4KKzxsaT4gPGEgaHJlZj0iI1doYXRfTUlCc19hcmVfc3VwcG9ydGVkXyI+V2hhdCBNSUJzIGFyZSBzdXBwb3J0ZWQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9wcm90b2NvbHNfYXJlX3N1cHBvcnRlZF8iPldoYXQgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfY29uZmlndXJlX3RoZV9hZ2VudF8iPkhvdyBkbyBJIGNvbmZpZ3VyZSB0aGUgYWdlbnQ/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfYWRkX2FfTUlCX3RvX3RoZV9hZ2VudF8iPkhvdyBkbyBJIGFkZCBhIE1JQiB0byB0aGUgYWdlbnQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fX2V4ZWNfX19fc2hfX2FuZF9fcGFzc19fIj5XaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnZXhlYycsICdzaCcgYW5kICdwYXNzJz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9BZ2VudFhfX1NNVVhfYW5kX3Byb3hpZWRfU05NUF8iPldoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEFnZW50WCwgU01VWCBhbmQgcHJveGllZCBTTk1QPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfYWJvdXRfX2RsbW9kX19fX3doYXRfc190aGF0X2Fib3V0XyI+V2hhdCBhYm91dCAnZGxtb2QnIC0gd2hhdCdzIHRoYXQgYWJvdXQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hpY2hfc2hvdWxkX0lfdXNlXyI+V2hpY2ggc2hvdWxkIEkgdXNlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0Nhbl9JX3VzZV9BZ2VudFhfd2hlbl9ydW5uaW5nX3VuZGVyX1dpbmRvd3NfIj5DYW4gSSB1c2UgQWdlbnRYIHdoZW4gcnVubmluZyB1bmRlciBXaW5kb3dzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9ydW5fQWdlbnRYX3dpdGhfYV9kaWZmZXJlbnRfc29ja2V0X2FkZHJlc3NfIj5Ib3cgY2FuIEkgcnVuIEFnZW50WCB3aXRoIGEgZGlmZmVyZW50IHNvY2tldCBhZGRyZXNzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9jb21iaW5lX3R3b19jb3BpZXNfb2ZfdGhlX19taWJfX190cmVlX2Zyb21fc2VwYXJhdGVfc3ViYWdlbnRzXyI+SG93IGNhbiBJIGNvbWJpbmUgdHdvIGNvcGllcyBvZiB0aGUgJ21pYjInIHRyZWUgZnJvbSBzZXBhcmF0ZSBzdWJhZ2VudHM/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF90cmFwc19hcmVfc2VudF9ieV90aGVfYWdlbnRfIj5XaGF0IHRyYXBzIGFyZSBzZW50IGJ5IHRoZSBhZ2VudD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGVyZV9hcmVfdGhlc2VfdHJhcHNfc2VudF90b18iPldoZXJlIGFyZSB0aGVzZSB0cmFwcyBzZW50IHRvPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9zZW5kX2FfcGFydGljdWxhcl90cmFwX3RvX3NlbGVjdGVkX2Rlc3RpbmF0aW9uc18iPkhvdyBjYW4gSSBzZW5kIGEgcGFydGljdWxhciB0cmFwIHRvIHNlbGVjdGVkIGRlc3RpbmF0aW9ucz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfZG9lc19jYWxsaW5nX19zZW5kX3ZfdHJhcF9fZ2VuZXJhdGVfYW5fU05NUHZfX3RyYXBfX29yX3ZpY2VfdmVyc2FfXyI+V2h5IGRvZXMgY2FsbGluZyAnc2VuZF92MnRyYXAnIGdlbmVyYXRlIGFuIFNOTVB2MSB0cmFwIChvciB2aWNlIHZlcnNhKT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGVuX0lfcnVuX3RoZV9hZ2VudF9pdF9ydW5zX2FuZF90aGVuX3F1aXRzX3dpdGhvdXRfc3RheWluZ19hcm91bmRfX1doeV8iPldoZW4gSSBydW4gdGhlIGFnZW50IGl0IHJ1bnMgYW5kIHRoZW4gcXVpdHMgd2l0aG91dCBzdGF5aW5nIGFyb3VuZC4gV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0FmdGVyX2Ffd2hpbGVfdGhlX2FnZW50X3N0b3BzX3Jlc3BvbmRpbmdfX2FuZF9zdGFydHNfZWF0aW5nX0NQVV90aW1lX19fV2h5XyI+QWZ0ZXIgYSB3aGlsZSB0aGUgYWdlbnQgc3RvcHMgcmVzcG9uZGluZywgYW5kIHN0YXJ0cyBlYXRpbmcgQ1BVIHRpbWUuICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX3N0b3Bfb3RoZXJfcGVvcGxlX2dldHRpbmdfYXRfbXlfYWdlbnRfIj5Ib3cgY2FuIEkgc3RvcCBvdGhlciBwZW9wbGUgZ2V0dGluZyBhdCBteSBhZ2VudD88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfbGlzdGVuX29uX2p1c3Rfb25lX3BhcnRpY3VsYXJfaW50ZXJmYWNlXyI+SG93IGNhbiBJIGxpc3RlbiBvbiBqdXN0IG9uZSBwYXJ0aWN1bGFyIGludGVyZmFjZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9jb25maWd1cmVfYWNjZXNzX2NvbnRyb2xfIj5Ib3cgZG8gSSBjb25maWd1cmUgYWNjZXNzIGNvbnRyb2w/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9kb25fdF91bmRlcnN0YW5kX3RoZV9uZXdfYWNjZXNzX2NvbnRyb2xfc3R1ZmZfX193aGF0X2RvZXNfaXRfbWVhbl8iPkkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgbmV3IGFjY2VzcyBjb250cm9sIHN0dWZmIC0gd2hhdCBkb2VzIGl0IG1lYW4/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfY29uZmlndXJlX1NOTVB2X191c2Vyc18iPkhvdyBkbyBJIGNvbmZpZ3VyZSBTTk1QdjMgdXNlcnM/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX19jcmVhdGVVc2VyX19saW5lX2Rpc2FwcGVhcnNfd2hlbl9JX3N0YXJ0X3RoZV9hZ2VudF9fX1doeV8iPlRoZSAnY3JlYXRlVXNlcicgbGluZSBkaXNhcHBlYXJzIHdoZW4gSSBzdGFydCB0aGUgYWdlbnQuICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fX3Zhcl91Y2Rfc25tcF9hbmRfX3Vzcl9sb2NhbF9zaGFyZV9zbm1wXyI+V2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gL3Zhci91Y2Qtc25tcCBhbmQgL3Vzci9sb2NhbC9zaGFyZS9zbm1wPzwvYT4KKzxsaT4gPGEgaHJlZj0iI015X25ld19hZ2VudF9pc19pZ25vcmluZ190aGVfb2xkX3NubXBkX2NvbmZfZmlsZV9fV2h5XyI+TXkgbmV3IGFnZW50IGlzIGlnbm9yaW5nIHRoZSBvbGQgc25tcGQuY29uZiBmaWxlLiBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2FtX0lfZ2V0dGluZ19fQ29ubmVjdGlvbl9yZWZ1c2VkX18iPldoeSBhbSBJIGdldHRpbmcgIkNvbm5lY3Rpb24gcmVmdXNlZCI/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9tX2dldHRpbmdfZXJyb3JzX2Fib3V0X19iYWRfc2VjdXJpdHlfbW9kZWxfX19fd2h5XyI+SSdtIGdldHRpbmcgZXJyb3JzIGFib3V0ICJiYWQgc2VjdXJpdHkgbW9kZWwiIC0gd2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfbV9nZXR0aW5nX2Vycm9yc19hYm91dF9fYmFkX3ByZWZpeF9tYXRjaF9wYXJhbWV0ZXJfX19fd2h5XyI+SSdtIGdldHRpbmcgZXJyb3JzIGFib3V0ICJiYWQgcHJlZml4IG1hdGNoIHBhcmFtZXRlciIgLSB3aHk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2Nhbl90X0lfc2VlX3ZhbHVlc19pbl90aGVfVUNEYXZpc19fZXh0ZW5zaWJsZV9fb3JfX2Rpc2tfX3RyZWVzXyI+V2h5IGNhbid0IEkgc2VlIHZhbHVlcyBpbiB0aGUgVUNEYXZpcyAnZXh0ZW5zaWJsZScgb3IgJ2Rpc2snIHRyZWVzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9jYW5fdF9JX3NlZV92YWx1ZXNfaW5fdGhlX1VDRGF2aXNfX21lbW9yeV9fb3JfX3Ztc3RhdF9fdHJlZV8iPldoeSBjYW4ndCBJIHNlZSB2YWx1ZXMgaW4gdGhlIFVDRGF2aXMgJ21lbW9yeScgb3IgJ3Ztc3RhdCcgdHJlZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2RvX3RoZV9DUFVfc3RhdGlzdGljc19tZWFuX19faXNfdGhpc190aGVfbG9hZF9hdmVyYWdlXyI+V2hhdCBkbyB0aGUgQ1BVIHN0YXRpc3RpY3MgbWVhbiAtIGlzIHRoaXMgdGhlIGxvYWQgYXZlcmFnZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9nZXRfcGVyY2VudGFnZV9DUFVfdXRpbGl6YXRpb25fdXNpbmdfc3NDcHVSYXdJZGxlXyI+SG93IGRvIEkgZ2V0IHBlcmNlbnRhZ2UgQ1BVIHV0aWxpemF0aW9uIHVzaW5nIHNzQ3B1UmF3SWRsZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2Fib3V0X211bHRpX3Byb2Nlc3Nvcl9zeXN0ZW1zXyI+V2hhdCBhYm91dCBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfc3BlZWRfdHlwZV9vZl9teV9uZXR3b3JrX2ludGVyZmFjZXNfaXNfd3JvbmdfX19ob3dfY2FuX0lfZml4X2l0XyI+VGhlIHNwZWVkL3R5cGUgb2YgbXkgbmV0d29yayBpbnRlcmZhY2VzIGlzIHdyb25nIC0gaG93IGNhbiBJIGZpeCBpdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfaW50ZXJmYWNlX3N0YXRpc3RpY3NfZm9yX215X3N1YmludGVyZmFjZXNfYXJlX2FsbF96ZXJvX19fd2h5XyI+VGhlIGludGVyZmFjZSBzdGF0aXN0aWNzIGZvciBteSBzdWJpbnRlcmZhY2VzIGFyZSBhbGwgemVybyAtIHdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2RvZXNfX2tscmVhZF9fX2JhZF9hZGRyZXNzX19tZWFuXyI+V2hhdCBkb2VzICJrbHJlYWQ6ICBiYWQgYWRkcmVzcyIgbWVhbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2RvZXNfX25saXN0X2Vycl9fX3dvbWJhdF9ub3RfZm91bmRfX19vcl9zaW1pbGFyX19tZWFuXyI+V2hhdCBkb2VzICJubGlzdCBlcnI6ICB3b21iYXQgbm90IGZvdW5kIiAob3Igc2ltaWxhcikgbWVhbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfYWJvdXRfX0Nhbl90X29wZW5fX2Rldl9rbWVtX18iPkhvdyBhYm91dCAiQ2FuJ3Qgb3BlbiAvZGV2L2ttZW0iPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV9hZ2VudF9pc19jb21wbGFpbmluZ19hYm91dF9fc25tcGRfY29uZl9fX19XaGVyZV9pc190aGlzXyI+VGhlIGFnZW50IGlzIGNvbXBsYWluaW5nIGFib3V0ICdzbm1wZC5jb25mJy4gIFdoZXJlIGlzIHRoaXM/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX3N5c3RlbV91cHRpbWVfX3N5c1VwVGltZV9fcmV0dXJuZWRfaXNfd3JvbmdfIj5UaGUgc3lzdGVtIHVwdGltZSAoc3lzVXBUaW1lKSByZXR1cm5lZCBpcyB3cm9uZyE8L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfcmVkdWNlX3RoZV9tZW1vcnlfZm9vdHByaW50XyI+SG93IGNhbiBJIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludD88L2E+Cis8L3VsPjxsaT48Yj5DT01QSUxJTkc8L2I+PHVsPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfY29tcGlsZV93aXRoX19jY19faW5zdGVhZF9vZl9fZ2NjX18iPkhvdyBkbyBJIGNvbXBpbGUgd2l0aCAnY2MnIGluc3RlYWQgb2YgJ2djYyc/PC9hPgorPGxpPiA8YSBocmVmPSIjQnV0X2djY19kb2Vzbl90X2NvbXBpbGVfaXRfc3VjY2Vzc2Z1bGx5X29uX215X25ld19Tb2xhcmlzX3N5c3RlbV9fV2h5X25vdF8iPkJ1dCBnY2MgZG9lc24ndCBjb21waWxlIGl0IHN1Y2Nlc3NmdWxseSBvbiBteSBuZXcgU29sYXJpcyBzeXN0ZW0uIFdoeSBub3Q/PC9hPgorPGxpPiA8YSBocmVmPSIjT25fUmVkSGF0X19fX19vcl91cF9JX2dldF9fX3Vzcl9iaW5fbGRfX2Nhbm5vdF9maW5kX19sZWxmX19fV2h5XyI+T24gUmVkSGF0IDguMCBvciB1cCBJIGdldCAiL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sZWxmIi4gV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfbV9nZXR0aW5nX2FuX2Vycm9yX19hdXRvaGVhZGVyX19ub3RfZm91bmRfX19fd2hhdF9zX3dyb25nXyI+SSdtIGdldHRpbmcgYW4gZXJyb3IgImF1dG9oZWFkZXI6IG5vdCBmb3VuZCIgLSB3aGF0J3Mgd3Jvbmc/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9hYm91dF9hX2ZhaWxlZF9kZXBlbmRlbmN5X29uX19saWJjcnlwdG9fX19fV2hlcmVfY2FuX0lfZ2V0X3RoYXRfIj5XaGF0IGFib3V0IGEgZmFpbGVkIGRlcGVuZGVuY3kgb24gJ2xpYmNyeXB0byc/ICBXaGVyZSBjYW4gSSBnZXQgdGhhdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfaXNfdGhlX3Byb2plY3Rfd29ya3NwYWNlX2VtcHR5X3VuZGVyX1Zpc3VhbF9DX19fIj5XaHkgaXMgdGhlIHByb2plY3Qgd29ya3NwYWNlIGVtcHR5IHVuZGVyIFZpc3VhbCBDKys/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2RvZXNfX21ha2VfdGVzdF9fc2tpcF9maXZlX3Rlc3RzXyI+V2h5IGRvZXMgJ21ha2UgdGVzdCcgc2tpcCBmaXZlIHRlc3RzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9kb2VzX19tYWtlX3Rlc3RfX2NvbXBsYWluX2Fib3V0X2FfcGlkX2ZpbGVfIj5XaHkgZG9lcyAnbWFrZSB0ZXN0JyBjb21wbGFpbiBhYm91dCBhIHBpZCBmaWxlPzwvYT4KKzwvdWw+PGxpPjxiPkNPRElORzwvYj48dWw+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV93cml0ZV9DX2NvZGVfdG9faW50ZWdyYXRlX3dpdGhfdGhlX2FnZW50XyI+SG93IGRvIEkgd3JpdGUgQyBjb2RlIHRvIGludGVncmF0ZSB3aXRoIHRoZSBhZ2VudD88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9lc190aGVfYWdlbnRfZmV0Y2hfdGhlX3ZhbHVlX29mX2FfdmFyaWFibGVfZnJvbV90aGVfc3lzdGVtXyI+SG93IGRvZXMgdGhlIGFnZW50IGZldGNoIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGZyb20gdGhlIHN5c3RlbT88L2E+Cis8bGk+IDxhIGhyZWY9IiNNaWJfY19jb21wbGFpbnNfYWJvdXRfYV9taXNzaW5nX19taWJfcmVmZXJlbmNlX19fX3doYXRfZG9lc190aGlzX21lYW5fIj5NaWIyYyBjb21wbGFpbnMgYWJvdXQgYSBtaXNzaW5nICJtaWIgcmVmZXJlbmNlIiAtIHdoYXQgZG9lcyB0aGlzIG1lYW4/PC9hPgorPGxpPiA8YSBocmVmPSIjTWliX2NfY29tcGxhaW5zX2Fib3V0X25vdF9oYXZpbmdfYV9fdmFsaWRfT0lEX19fX3doYXRfZG9lc190aGlzX21lYW5fIj5NaWIyYyBjb21wbGFpbnMgYWJvdXQgbm90IGhhdmluZyBhICJ2YWxpZCBPSUQiIC0gd2hhdCBkb2VzIHRoaXMgbWVhbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfZG9lc25fdF9NaWJfY19saWtlX3RoZV9NSUJfZmlsZV9JX21fZ2l2aW5nX2l0XyI+V2h5IGRvZXNuJ3QgTWliMmMgbGlrZSB0aGUgTUlCIGZpbGUgSSdtIGdpdmluZyBpdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNNaWJfY19pZ25vcmVzX215X01JQl9hbmRfZ2VuZXJhdGVzX2FfcGFpcl9vZl9fbWliX19fX2NvZGVfZmlsZXNfX19XaHlfIj5NaWIyYyBpZ25vcmVzIG15IE1JQiBhbmQgZ2VuZXJhdGVzIGEgcGFpciBvZiAnbWliLTInIGNvZGUgZmlsZXMuICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjTWliX2NfY29tcGxhaW5zX2Fib3V0X19jb25maWd1cmF0aW9uX2ZpbGVzX19fV2hhdF9zX3RoaXNfZm9yXyI+TWliMmMgY29tcGxhaW5zIGFib3V0ICJjb25maWd1cmF0aW9uIGZpbGVzIi4gV2hhdCdzIHRoaXMgZm9yPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doaWNoX21pYl9jX2NvbmZpZ3VyYXRpb25fZmlsZV9zaG91bGRfSV91c2VfIj5XaGljaCBtaWIyYyBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIEkgdXNlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9oYXZlX01pYl9jX2dlbmVyYXRlX2NvZGVfZm9yX2JvdGhfc2NhbGFyc19hbmRfdGFibGVzXyI+SG93IGNhbiBJIGhhdmUgTWliMmMgZ2VuZXJhdGUgY29kZSBmb3IgYm90aCBzY2FsYXJzIGFuZCB0YWJsZXM/PC9hPgorPGxpPiA8YSBocmVmPSIjQXJlX3RoZXJlX2FueV9leGFtcGxlc19fb3JfZG9jdW1lbnRhdGlvbl8iPkFyZSB0aGVyZSBhbnkgZXhhbXBsZXMsIG9yIGRvY3VtZW50YXRpb24/PC9hPgorPGxpPiA8YSBocmVmPSIjSV92ZV9jcmVhdGVkX2FfbmV3X21vZHVsZV93aXRoX19taWJfY19fYnV0X2l0X2RvZXNuX3Rfd29ya19fX1doeV9ub3RfIj5JJ3ZlIGNyZWF0ZWQgYSBuZXcgbW9kdWxlIHdpdGggJ21pYjJjJyBidXQgaXQgZG9lc24ndCB3b3JrLiAgV2h5IG5vdD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGVyZV9zaG91bGRfSV9wdXRfdGhlX2ZpbGVzX3Byb2R1Y2VkX2J5X19taWJfY19fIj5XaGVyZSBzaG91bGQgSSBwdXQgdGhlIGZpbGVzIHByb2R1Y2VkIGJ5ICdtaWIyYyc/PC9hPgorPGxpPiA8YSBocmVmPSIjTWliX2Nfb25seV9oYW5kbGVzX2Ffc2luZ2xlX3RhYmxlX2luX215X01JQl9fSG93X2Nhbl9JX2ZpeF90aGlzXyI+TWliMmMgb25seSBoYW5kbGVzIGEgc2luZ2xlIHRhYmxlIGluIG15IE1JQi4gSG93IGNhbiBJIGZpeCB0aGlzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9zdXBwb3J0X2FfbGFyZ2VfdGFibGVfX3dpdGhfbW9yZV90aGFuX19fX19jb2x1bW5fb2JqZWN0c18iPkhvdyBjYW4gSSBzdXBwb3J0IGEgbGFyZ2UgdGFibGUsIHdpdGggbW9yZSB0aGFuIDI1NiBjb2x1bW4gb2JqZWN0cz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfZ2V0X3RoZV9hZ2VudF90b19nZW5lcmF0ZV9hX3RyYXBfX29yX2luZm9ybV9fIj5Ib3cgY2FuIEkgZ2V0IHRoZSBhZ2VudCB0byBnZW5lcmF0ZSBhIHRyYXAgKG9yIGluZm9ybSk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9pZl9JX21fdXNpbmdfYW5fQWdlbnRYX3N1Yl9hZ2VudF9pbnN0ZWFkXyI+V2hhdCBpZiBJJ20gdXNpbmcgYW4gQWdlbnRYIHN1Yi1hZ2VudCBpbnN0ZWFkPzwvYT4KKzwvdWw+PGxpPjxiPk1JU0M8L2I+PHVsPgorPGxpPiA8YSBocmVmPSIjV2h5X2FyZV9wYWNrZXRzX3JlcXVlc3RpbmdfdGhlX3NhbWVfaW5mb3JtYXRpb25fbGFyZ2VyX3dpdGhfVUNfRGF2aXNfU05NUF8iPldoeSBhcmUgcGFja2V0cyByZXF1ZXN0aW5nIHRoZSBzYW1lIGluZm9ybWF0aW9uIGxhcmdlciB3aXRoIFVDLURhdmlzIFNOTVA/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9BU05fX19wYXJzZXJfaXNfdXNlZF8iPldoYXQgQVNOLjEgcGFyc2VyIGlzIHVzZWQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9pc190aGVfT2ZmaWNpYWxfU2xvZ2FuX29mX3RoZV9uZXRfc25tcF9jb2RlcnNfbGlzdF8iPldoYXQgaXMgdGhlIE9mZmljaWFsIFNsb2dhbiBvZiB0aGUgbmV0LXNubXAtY29kZXJzIGxpc3Q/PC9hPgorPC91bD48aHI+PHByZT4KKworPGEgbmFtZT0iR0VORVJBTCI+CitHRU5FUkFMCis9PT09PT09CisKKzxhIG5hbWU9IldoYXRfaXNfaXRfIj4KK1doYXQgaXMgaXQ/CistLS0tLS0tLS0tCisKKyAgLSBWYXJpb3VzIHRvb2xzIHJlbGF0aW5nIHRvIHRoZSBTaW1wbGUgTmV0d29yayBNYW5hZ2VtZW50IFByb3RvY29sCisgICAgaW5jbHVkaW5nOgorCisJKiBBbiBleHRlbnNpYmxlIGFnZW50CisJKiBBbiBTTk1QIGxpYnJhcnkKKwkqIHRvb2xzIHRvIHJlcXVlc3Qgb3Igc2V0IGluZm9ybWF0aW9uIGZyb20gU05NUCBhZ2VudHMKKwkqIHRvb2xzIHRvIGdlbmVyYXRlIGFuZCBoYW5kbGUgU05NUCB0cmFwcworCSogYSB2ZXJzaW9uIG9mIHRoZSB1bml4ICduZXRzdGF0JyBjb21tYW5kIHVzaW5nIFNOTVAKKwkqIGEgZ3JhcGhpY2FsIFBlcmwvVGsvU05NUCBiYXNlZCBtaWIgYnJvd3NlcgorCisgICAgVGhpcyBwYWNrYWdlIGlzIG9yaWdpbmFsbHkgYmFzZWQgb24gdGhlIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgICAgU05NUCBpbXBsZW1lbnRhdGlvbiAodmVyc2lvbiAyLjEuMi4xKSwgYnV0IGhhcyBkZXZlbG9wZWQgc2lnbmlmaWNhbnRseQorICAgIHNpbmNlIHRoZW4uCisKKworCis8YSBuYW1lPSJXaGVyZV9jYW5fSV9nZXRfaXRfIj4KK1doZXJlIGNhbiBJIGdldCBpdD8KKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgIERvd25sb2FkOgorICAgIC0gaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvZG93bmxvYWQvCisgICAgLSBmdHA6Ly9mdHAubmV0LXNubXAub3JnL3B1Yi9zb3VyY2Vmb3JnZS9uZXQtc25tcC8KKyAgTUQ1IFN1bXM6CisgICAgLSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9tZDUvCisgIFdlYiBwYWdlOgorICAgIC0gaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvCisgIFNvdXJjZWZvcmdlIFByb2plY3QgcGFnZToKKyAgICAtIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3Byb2plY3QvCisgIE1pcnJvcnMgKG5vdGUgdGhhdCBzb3VyY2Vmb3JnZSBkb3dubG9hZCBzZXJ2ZXJzIGFyZSBtaXJyb3JlZCB0aGVtc2VsdmVzKToKKyAgICAtIFVTOiAgICAgICAgICBmdHA6Ly9mdHAuZnJlZXNubXAuY29tL21pcnJvcnMvbmV0LXNubXAvCisgICAgLSBCdWxnYXJpYTogICAgaHR0cDovL3J0Zm0udW5pLXN2aXNodG92LmJnL25ldC1zbm1wLyAgICAoYXBwZWFycyB0byBiZSBvdXQgb2YgZGF0ZSkKKyAgICAtIEphcGFuOiAgICAgICBmdHA6Ly9mdHAuYXlhbXVyYS5vcmcvcHViL25ldC1zbm1wLyAgICAgIChtYXkgb25seSB3b3JrIGluc2lkZSBKYXBhbikKKyAgICAtIEdlcm1hbnk6ICAgICBmdHA6Ly9mdHAubXBnLmdvZS5uaS5zY2h1bGUuZGUvcHViL2ludGVybmV0L25ldC1zbm1wLyAgKHVua25vd24gaG9zdCkKKyAgICAtIEdyZWVjZTogICAgICBmdHA6Ly9mdHAubnR1YS5nci9wdWIvbmV0L3NubXAvbmV0LXNubXAvCisKKyAgVGhlIG9sZCB1Y2Qtc25tcC51Y2RhdmlzLmVkdSB3ZWIgc2l0ZSBhbmQgZnRwIHNlcnZlciBpcyBub3cKKyAgb2ZmbGluZSBhbmQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBhbnkgbG9uZ2VyLgorCisKKworPGEgbmFtZT0iV2hhdF9kb2N1bWVudGF0aW9uX2lzX2F2YWlsYWJsZV8iPgorV2hhdCBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgRkFRICghKQorCVJFQURNRSBhbmQgaW5kaXZpZHVhbCBSRUFETUVzIGZvciB2YXJpb3VzIHBsYXRmb3JtcworCVJFQURNRS50aHJlYWQgKGRpc2N1c3NlcyB0aHJlYWRpbmcgaXNzdWVzKQorCUlOU1RBTEwKKwlQT1JUSU5HCisJRVhBTVBMRS5jb25mCisJbWFuIHBhZ2VzIGZvciB0aGUgaW5kaXZpZHVhbCB0b29scywgZmlsZXMgYW5kIHRoZSBBUEkKKwlBIGd1aWRlIGZvciBleHRlbmRpbmcgdGhlIGFnZW50CisJVHV0b3JpYWxzIGZvciBib3RoIHVjZC1zbm1wIHY0IGFuZCBuZXQtc25tcCB2NQorICAgICAgICAgICBhdCAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwvCisgICAgICAgICAgIGFuZCBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01LyByZXNwZWN0aXZlbHkKKworICAgICAgTW9zdCBvZiB0aGlzIGRvY3VtZW50YXRpb24gKHBsdXMgYXJjaGl2ZXMgb2YgdGhlIG1haWxpbmcgbGlzdHMpCisJIGlzIGFsc28gYXZhaWxhYmxlIG9uIG91ciB3ZWIgcGFnZToKKworICAgICAgICAJaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvCisKKworCis8YSBuYW1lPSJBcmVfdGhlcmVfYmluYXJpZXNfYXZhaWxhYmxlXyI+CitBcmUgdGhlcmUgYmluYXJpZXMgYXZhaWxhYmxlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC0gVGhlcmUgYXJlIGJpbmFyaWVzIGZvciBzb21lIHN5c3RlbXMgYXZhaWxhYmxlIGluIHRoZSBiaW5hcmllcworICAgIGRpcmVjdG9yeSBvbiB0aGUgZnRwIHNpdGUuCisKKworCis8YSBuYW1lPSJXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9VQ0RfU05NUF9hbmRfTmV0X1NOTVBfIj4KK1doYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFVDRC1TTk1QIGFuZCBOZXQtU05NUD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIE5vdCBhIGdyZWF0IGRlYWwsIHJlYWxseS4KKyAgQWx0aG91Z2ggdGhlIHByb2plY3Qgb3JpZ2luYWxseSBzdGFydGVkIGF0IFVDIERhdmlzIChoZW5jZSB0aGUgbmFtZSksCisgIGFuZCBpdCBoYXMgYWx3YXlzIGJlZW4gYmFzZWQgdGhlcmUsIG1vc3Qgb2YgdGhlIGNvbnRyaWJ1dG9ycyBoYXZlIGhhZAorICBsaXR0bGUgb3Igbm8gY29ubmVjdGlvbiB3aXRoIHRoaXMgaW5zdGl0dXRpb24uCisKKyAgICBUaGUgbW92ZSB0byBTb3VyY2VGb3JnZSB3YXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIG1vcmUgZmxleGlibGUKKyAgZW52aXJvbm1lbnQgZm9yIHRoZSBwcm9qZWN0LCBhbmQgdG8gZGlzdHJpYnV0ZSB0aGUgYWRtaW5pc3RyYXRpdmUKKyAgd29ya2xvYWQgbW9yZSBldmVubHkuICBUaGUgY2hhbmdlIG9mIG5hbWUgc2ltcGx5IHJlZmxlY3RzIHRoaXMgbW92ZSwKKyAgd2hpY2ggd2FzIHRoZSBsYXN0IHJlbWFpbmluZyBsaW5rIHdpdGggVUMgRGF2aXMuCisKKyAgICBUaGUgNC4yLnggbGluZSBpcyB0aGUgbGFzdCByZWxlYXNlIGxpbmUgdGhhdCB1c2VzIHRoZSB1Y2Qtc25tcCBuYW1lLAorICBhbmQgYWxsIHJlbGVhc2VzIHVuZGVyIHRoaXMgYmFubmVyIHdpbGwgYmUgYnVnLWZpeGVzIG9ubHkuICBSZWxlYXNlCisgIDUuMCBpcyB0aGUgZmlyc3QgdmVyc2lvbiB1c2luZyB0aGUgbmV0LXNubXAgbmFtZSwgYW5kIGFsbCBuZXcgZmVhdHVyZXMKKyAgYW5kIHNpZ25pZmljYW50IGRldmVsb3BtZW50IHdpbGwgYmUgcmVsZWFzZWQgdW5kZXIgdGhpcyBuYW1lLgorICAgIChUaG91Z2ggdGhlIGRpdmlkaW5nIGxpbmUgYmV0d2VlbiBhIGJ1Zy1maXggYW5kIGEgbmV3IGZlYXR1cmUgaXMKKyAgc29tZXRoaW5nIG9mIGEgdmFndWUgb25lLCBzbyBzb21lIGNoYW5nZXMgaW4gdGhlIDQuMi54IGxpbmUgbWF5IGJlCisgIHJlbGF0aXZlbHkgbm9uLXRyaXZpYWwhKQorIAorICAgIFN0YXJ0aW5nIHdpdGggdGhlIDUuMCByZWxlYXNlLCB3ZSBhcmUgYWxzbyB0cnlpbmcgdG8gcmV2aWV3IGFuZAorICByZXdvcmsgdGhlIHVuZGVybHlpbmcgY29kZSBiYXNlIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5IGFuZAorICBtYWludGFpbmFiaWxpdHkgb2YgdGhlIHBhY2thZ2UuICBUaGUgNS4wIGNoYW5nZXMgaGF2ZSBtb3N0bHkKKyAgY29uY2VudHJhdGVkIG9uIHRoZSBhZ2VudCBhcmNoaXRlY3R1cmUsIHRob3VnaCB0aGVyZSBoYXZlIGJlZW4gc29tZQorICBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFzIHdlbGwuICBGdXR1cmUgcmVsZWFzZXMgbWF5CisgIGluY2x1ZGUgZnVydGhlciByZXN0cnVjdHVyaW5nIG9mIHRoZSBsaWJyYXJ5LgorICAgIFRoaXMgcHJvY2VzcyB3aWxsIHByb2JhYmx5IHJlc3VsdCBpbiBzb21lIGNoYW5nZXMgdG8gdGhlIEFQSSwKKyAgdGhvdWdoIHdlIHdpbGwgYXR0ZW1wdCB0byByZXRhaW4gc29tZSBmb3JtIG9mIGJhY2t3YXJkcworICBjb21wYXRpYmlsaXR5IGFzIGZhciBhcyBwb3NzaWJsZSwgYW5kIGNsZWFybHkgbWFyayBhbnl0aGluZyB0aGF0IGhhcworICBjaGFuZ2VkLiAgVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlIHdpdGggdGhlIDUuMCByZWxlYXNlIGlzIGEKKyAgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgaGVhZGVyIGZpbGUgb3JnYW5pc2F0aW9uIC0gbm90IGxlYXN0IGEgY2hhbmdlCisgIGZyb20gJmx0O3VjZC1zbm1wL3h4eC5oJmd0OyB0byAmbHQ7bmV0LXNubXAveXl5LmgmZ3Q7LgorCisKKworPGEgbmFtZT0iV2hhdF9vcGVyYXRpbmdfc3lzdGVtc19kb2VzX2l0X3J1bl9vbl8iPgorV2hhdCBvcGVyYXRpbmcgc3lzdGVtcyBkb2VzIGl0IHJ1biBvbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBCb3RoIHRoZSBhcHBsaWNhdGlvbnMgYW5kIHRoZSBhZ2VudCBoYXZlIGJlZW4gcmVwb3J0ZWQgYXMgcnVubmluZworICAoYXQgbGVhc3QgaW4gcGFydCkgb24gdGhlIGZvbGxvd2luZyBvcGVyYXRpbmcgc3lzdGVtczoKKworCSogSFAtVVggKDEwLjIwIHRvIDkuMDEgYW5kIDExLjAgLS0gc2VlIFJFQURNRS5ocHV4MTEpCisJKiBVbHRyaXggKDQuNSB0byA0LjIpCisJKiBTb2xhcmlzIFNQQVJDL1VMVFJBICgyLjggdG8gMi4zKSwgSW50ZWwgKDIuOSkgYW5kIFN1bk9TICg0LjEuNCB0byA0LjEuMikKKwkqIE9TRiAoNC4wLCAzLjIpCisJKiBOZXRCU0QgKDEuNWFscGhhIHRvIDEuMCkKKwkqIEZyZWVCU0QgKDQuMSB0byAyLjIpCisJKiBCU0RpICg0LjAuMSB0byAyLjEpCisJKiBMaW51eCAoa2VybmVscyAyLjQgdG8gMS4zKQorCSogQUlYICg0LjEuNSwgMy4yLjUpCisJKiBPcGVuQlNEICgyLjgsIDIuNikKKwkqIElyaXggKDYuNSB0byA1LjEpCisJKiBPUyBYICgxMC4xLjEgYW5kIDEwLjEuMikKKwkqIER5bml4L1BUWCA0LjQKKwkqIFFOWCA2LjIuMUEKKworICBXZSBoYXZlIGFsc28gYmVlbiBpbmZvcm1lZCBhYm91dCBhIHBvcnQgdG8gdGhlIFN0cmF0dXMgVk9TLgorICBTZWUgaHR0cDovL2Z0cC5zdHJhdHVzLmNvbS92b3MvbmV0d29yay9uZXR3b3JrLmh0bWwgZm9yIGRldGFpbHMuCisKKyAgU2VlIHRoZSBuZXh0IHF1ZXN0aW9uIGJ1dCBvbmUgZm9yIHRoZSBzdGF0dXMgb2YgV2luZG93cyBzdXBwb3J0LgorCisgIENlcnRhaW4gc3lzdGVtcyAoZS5nLiBIUC1VWCAxMSwgSXJpeD8pIGZhaWwgdG8gY29tcGlsZSBwYXJ0aWN1bGFyCisgIHBvcnRpb25zIG9mIHRoZSBhZ2VudC4gIFRoZXNlIGNhbiB1c3VhbGx5IGJlIHBlcnN1YWRlZCB0byBjb21waWxlCisgIChhdCB0aGUgbG9zcyBvZiBzb21lIGZ1bmN0aW9uYWxpdHkpIGJ5IG9taXR0aW5nIHRoZSBtb2R1bGVzIGFmZmVjdGVkLgorICBTZWUgdGhlIG5leHQgcXVlc3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworICBBbHNvIG5vdGUgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gaW4gdGhpcworICBsaXN0IGRvZXMgbm90IGltcGx5IGEgcGVyZmVjdCBvciBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaXMKKyAgc2ltcGx5IHdoYXQgdmFyaW91cyBwZW9wbGUgaGF2ZSByZXBvcnRlZCBhcyBzZWVtaW5nIHRvIHdvcmsuIChPciBtb3JlCisgIGZyZXF1ZW50bHksIHRoZSBjb25maWd1cmF0aW9ucyBwZW9wbGUgaGF2ZSByZXBvcnRlZCBwcm9ibGVtcyB3aXRoCisgIHRoYXQgd2UgdGhpbmsgd2UndmUgZml4ZWQhKQorCisKKworPGEgbmFtZT0iV2hhdF9oYXBwZW5zX2lmX21pbmVfaXNuX3RfbGlzdGVkXyI+CitXaGF0IGhhcHBlbnMgaWYgbWluZSBpc24ndCBsaXN0ZWQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEl0J3MgcHJvYmFibHkgd29ydGggdHJ5aW5nIHRvIGNvbXBpbGUgaXQgYW55d2F5LiAgSWYgeW91ciBzeXN0ZW0KKyAgaXMgcmVhc29uYWJseSBzaW1pbGFyIHRvIGFub3RoZXIgc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24sIGl0IG1heQorICB3ZWxsIGNvbXBpbGUgd2l0aCBsaXR0bGUgb3Igbm8gZGlmZmljdWx0eS4gIFRoZSBtb3N0IGxpa2VseSBzb3VyY2UKKyAgb2YgcHJvYmxlbXMgd2lsbCBiZSBNSUIgbW9kdWxlcyB3aXRoaW4gdGhlIGFnZW50LCBhcyB0aGlzIHRlbmRzIHRvCisgIGJlIHdoZXJlIHRoZSBtb3N0IHN5c3RlbS1zcGVjaWZpYyBjb2RlIGlzIGZvdW5kLgorCisgICAgSWYgb25seSBhIGZldyBtb2R1bGVzIGZhaWwgdG8gY29tcGlsZSwgdHJ5IHJlbW92aW5nIHRoZW0gZnJvbQorICB0aGUgYWdlbnQgYnkgcnVubmluZyAiY29uZmlndXJlIC0td2l0aC1vdXQtbWliLW1vZHVsZT14eHgseXl5IiwKKyAgYW5kIHJlLWNvbXBpbGluZy4gIElmIGEgbGFyZ2UgbnVtYmVyIG9mIG1vZHVsZXMgZmFpbCwgdGhlbiBpdAorICBtaWdodCBiZSBlYXNpZXIgdG8gc3RhcnQgZnJvbSBhIHJlbGF0aXZlbHkgYmFyZSBzeXN0ZW0sIHVzaW5nCisgICJjb25maWd1cmUgLS1lbmFibGUtbWluaS1hZ2VudCAtLXdpdGgtZGVmYXVsdHMiLiAgVGhlbiBpZiB0aGlzCisgIG1pbmltYWwgYWdlbnQgY29tcGlsZXMgYW5kIHJ1bnMgc3VjY2Vzc2Z1bGx5LCB0cnkgYWRkaW5nIHRoZQorICBtaXNzaW5nIG1pYmdyb3VwcyB1c2luZyB0aGUgY29uZmlndXJlIG9wdGlvbiAnLS13aXRoLW1pYi1tb2R1bGUnLgorICAKKyAgICBJZiBjb25maWd1cmUgZmFpbHMgd2l0aCAiaW52YWxpZCBjb25maWd1cmF0aW9uIiBtZXNzYWdlcywgb3IKKyAgeW91IGdldCBjb21wbGV0ZWx5IHN0dWNrLCBjb250YWN0IHRoZSBjb2RlcnMgbGlzdCBmb3IgYWR2aWNlLgorICBTaW1pbGFybHksIGlmIHlvdSBtYW5hZ2UgdG8gZ2V0IHRoaXMgd29ya2luZyBvbiBhIG5ldyBzeXN0ZW0sCisgIHBsZWFzZSBsZXQgdXMga25vdyBib3RoIGRldGFpbHMgb2YgdGhlIGhhcmR3YXJlIHlvdSdyZSB1c2luZywKKyAgYW5kIHdoYXQgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0geW91J3ZlIHRyaWVkIGl0IG9uLgorICBUaGUgZW50cnkgJ2hvc3QnIGluIHRoZSBmaWxlICdjb25maWcuc3RhdHVzJyB3aWxsIHNob3cgdGhpcworICBpbmZvcm1hdGlvbi4gIE9oLCBhbmQgY29uZ3JhdHVsYXRpb25zIQorCisKKworPGEgbmFtZT0iRG9lc19pdF9ydW5fb25fV2luZG93c18iPgorRG9lcyBpdCBydW4gb24gV2luZG93cz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBzdWl0ZSBzaG91bGQgY29tcGlsZSBhbmQgcnVuIG9uIFdpbjMyIHBsYXRmb3JtcywgaW5jbHVkaW5nCisgIHRoZSBsaWJyYXJ5LCBjb21tYW5kLWxpbmUgdG9vbHMgYW5kIHRoZSBiYXNpYyBhZ2VudCBmcmFtZXdvcmsuCisgIE5vdGUgdGhhdCB0aGUgYWdlbnQgbm93IGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZSBNSUItSUkgbW9kdWxlLAorICBidXQgdGhpcyByZXF1aXJlcyBNaWNyb3NvZnQncyBDb3JlIFBsYXRmb3JtIFNESy4gIEluc3RydWN0aW9ucworICBmb3IgaG93IHRvIGluc3RhbGwgdGhpcyBhcmUgZ2l2ZW4gaW4gUkVBRE1FLndpbjMyLgorCisgICAgU29tZSBvdGhlciBNSUIgbW9kdWxlcywgaW5jbHVkaW5nIHRoZSBVQ0QgcGFzcy10aHJvdWdoIGV4dGVuc2lvbnMsCisgIGRvIG5vdCBjdXJyZW50bHkgd29yayB1bmRlciBXaW5kb3dzLiAgVm9sdW50ZWVycyB0byBhc3Npc3QgaW4KKyAgdGhlc2UgbWlzc2luZyBtb2R1bGVzIGFyZSBsaWtlbHkgdG8gd2VsY29tZWQgd2l0aCBvcGVuIGFybXMgOi0pCisKKyAgICBGdXJ0aGVyIGRldGFpbHMgb2YgV2luZG93cyBzdXBwb3J0IChjdXJyZW50bHkgVmlzdWFsIEMrKyBhbmQKKyAgQ3lnbnVzIGN5Z3dpbjMyKSBpcyBhdmFpbGFibGUgaW4gdGhlIGZpbGUgUkVBRE1FLndpbjMyCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9maW5kX291dF9hYm91dF9uZXdfcmVsZWFzZXNfIj4KK0hvdyBkbyBJIGZpbmQgb3V0IGFib3V0IG5ldyByZWxlYXNlcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXJlIGlzIGEgbWFpbGluZyBsaXN0IGZvciB0aGVzZSBhbm5vdW5jZW1lbnRzCisKKyAgCW5ldC1zbm1wLWFubm91bmNlQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCisgIFRvIGJlIGFkZGVkIHRvIChvciByZW1vdmVkIGZyb20pIHRoaXMgbGlzdCwgdmlzaXQKKyAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvbGlzdHMvbmV0LXNubXAtYW5ub3VuY2UvLiAgT3IgeW91IGNhbiBzZW5kIGEKKyAgbWVzc2FnZSB0byB0aGUgYWRkcmVzcworICAnbmV0LXNubXAtYW5ub3VuY2UtcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQnIHdpdGggYSBzdWJqZWN0CisgIGxpbmUgb2YgJ3N1YnNjcmliZScgKG9yICd1bnN1YnNjcmliZScgYXMgYXBwcm9wcmlhdGUpLgorCisgIE1ham9yIGNvZGUgcmV2aXNpb25zIG1heSBiZSBhbm5vdW5jZWQgbW9yZSB3aWRlbHkgKGUuZy4gb24gdGhlCisgIFNOTVAgbWFpbGluZyBsaXN0cywgb3IgY29tcC5wcm90b2NvbHMuc25tcCkgYnV0IHRoaXMgbGlzdCBpcyB0aGUgbW9zdAorICByZWxpYWJsZSB3YXkgdG8ga2VlcCBpbiB0b3VjaCB3aXRoIHRoZSBzdGF0dXMgb2YgdGhpcyBwYWNrYWdlLgorCisgIFBhdGNoZXMgdG8gZml4IGtub3duIHByb2JsZW1zIGFyZSBhbHNvIG1hZGUgYXZhaWxhYmxlIHZpYSB0aGUgd2ViIHNpdGU6CisKKyAgICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvcGF0Y2hlcy8KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9maW5kX291dF93aGF0X290aGVyX3Blb3BsZV9hcmVfZG9pbmdfIj4KK0hvdyBjYW4gSSBmaW5kIG91dCB3aGF0IG90aGVyIHBlb3BsZSBhcmUgZG9pbmc/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGlzY3Vzc2lvbiBsaXN0CisKKyAgCW5ldC1zbm1wLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCisgIFRvIGJlIGFkZGVkIHRvIChvciByZW1vdmVkIGZyb20pIHRoaXMgbGlzdCwgdmlzaXQKKyAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvbGlzdHMvbmV0LXNubXAtdXNlcnMuICBPciB5b3UgY2FuIHNlbmQgYQorICBtZXNzYWdlIHRvIHRoZSBhZGRyZXNzICduZXQtc25tcC11c2Vycy1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldCcKKyAgd2l0aCBhIHN1YmplY3QgbGluZSBvZiAnc3Vic2NyaWJlJyAob3IgJ3Vuc3Vic2NyaWJlJyBhcyBhcHByb3ByaWF0ZSkuCisKKyAgVG8gZmluZCBvdXQgd2hhdCB0aGUgZGV2ZWxvcGVycyBhcmUgZG9pbmcsIGFuZCB0byBoZWxwIHRoZW0gb3V0LCBwbGVhc2UKKyAgcmVhZCB0aGUgUE9SVElORyBmaWxlIGVuY2xvc2VkIHdpdGggdGhlIHBhY2thZ2UuCisKKyAgVGhlcmUgaXMgYWxzbyBhbiBuZXQtc25tcCBJUkMgY2hhbm5lbCBzZXQgdXAgb24gdGhlIGZyZWVub2RlLm5ldCBJUkMKKyAgY2hhdCBzZXJ2ZXJzICh5b3UgY2FuIHVzZSBpcmMuZnJlZW5vZGUubmV0IHRvIGNvbm5lY3QgYW5kL29yIHNlZQorICBodHRwOi8vd3d3LmZyZWVub2RlLm5ldC8gZm9yIGdldHRpbmcgc3RhcnRlZCB3aXRoIGlyYykuICBNdWx0aXBsZQorICBjb3JlIGRldmVsb3BlcnMgaGFuZyBvdXQgdGhlcmUgb24gYSByZWd1bGFyIGJhc2lzLgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfc3VibWl0X2FfcGF0Y2hfb3JfYnVnX3JlcG9ydF8iPgorSG93IGRvIEkgc3VibWl0IGEgcGF0Y2ggb3IgYnVnIHJlcG9ydD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBBbGwgYnVnIHJlcG9ydHMgc2hvdWxkIGJlIHN1Ym1pdHRlZCB0byB0aGUgYnVnIGRhdGFiYXNlIHRocm91Z2ggdGhlCisgIGludGVyZmFjZSBmb3VuZCBhdCBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9idWdzLy4gIEJlCisgIHN1cmUgdG8gaW5jbHVkZSB0aGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSB0aGF0IHlvdSd2ZSBiZWVuIHdvcmtpbmcKKyAgd2l0aCwgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCAndW5hbWUgLWEnLCB0aGUgcHJlY2lzZSBjb21tYW5kIHRoYXQKKyAgdHJpZ2dlcnMgdGhlIHByb2JsZW0gYW5kIGEgY29weSBvZiB0aGUgb3V0cHV0IGl0IHByb2R1Y2VzLgorCisgICAgQWxsIHBhdGNoZXMgc2hvdWxkIGJlIHN1Ym1pdHRlZCB0byB0aGUgcGF0Y2ggbWFuYWdlciBhdAorICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9wYXRjaGVzLy4gIElmIHBvc3NpYmxlLCBzdWJtaXQgYQorICBidWcgcmVwb3J0IGRlc2NyaWJpbmcgdGhlIHBhdGNoIGFzIHdlbGwgKHJlZmVyZW5jaW5nIGl0IGJ5IGl0cyBwYXRjaAorICBudW1iZXIpIHNpbmNlIHRoZSBwYXRjaCBtYW5hZ2VyIGRvZXNuJ3QgY29udGFpbiBhIGRlY2VudCBkZXNjcmlwdGlvbgorICBmaWVsZC4KKworICAgIFF1ZXN0aW9ucyBhYm91dCB1c2luZyB0aGUgcGFja2FnZSBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgdGhlCisgIG5ldC1zbm1wLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCBtYWlsaW5nIGxpc3QuICBOb3RlIHRoYXQgdGhpcworICBtYWlsaW5nIGxpc3QgaXMgcmVsYXRpdmVseSBidXN5LCBhbmQgdGhlIHBlb3BsZSBhbnN3ZXJpbmcgdGhlc2UKKyAgcXVlc3Rpb25zIGFyZSBkb2luZyBzbyBvdXQgb2YgdGhlIGdvb2RuZXNzIG9mIHRoZWlyIGhlYXJ0cywgYW5kIGluCisgIGFkZGl0aW9uIHRvIHRoZWlyIG1haW4gZW1wbG95bWVudC4gIFBsZWFzZSBub3RlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgLSB1c2UgcGxhaW4gdGV4dCBtYWlsLCByYXRoZXIgdGhhbiBIVE1MCisgICAgIC0gZG9uJ3QgcmVzZW5kIHF1ZXN0aW9ucyBtb3JlIHRoYW4gb25jZQorICAgICAgICAgIChldmVuIGlmIG5vLW9uZSBhbnN3ZXJlZCBpbW1lZGlhdGVseSkKKyAgICAgLSBpbmNsdWRlIGZ1bGwgZGV0YWlscyBvZiBleGFjdCBjb21tYW5kcyBhbmQgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgICAoIkkndmUgdHJpZWQgZXZlcnl0aGluZywgYW5kIGl0IGRvZXNuJ3Qgd29yayIgaXNuJ3QgbXVjaCB1c2UhKQorICAgICAtIGRvICpOT1QqIHNlbmQgbWVzc2FnZXMgdG8gLXVzZXJzIGFuZCAtY29kZXJzIG1haWxpbmcgbGlzdHMKKyAgICAgICAgICAobW9zdCBkZXZlbG9wZXJzIHJlYWQgYm90aCBhbnl3YXkpCisgICAgIC0gZG9uJ3QgbWFpbCB0aGUgZGV2ZWxvcGVycyBwcml2YXRlbHkgLSBrZWVwIGV2ZXJ5dGhpbmcgb24gdGhlIGxpc3QKKworICBSZW1lbWJlciB0aGF0IHRoaXMgaXMgYmFzaWNhbGx5IGFuIHVuc3VwcG9ydGVkIHBhY2thZ2UuICBGdW5kYW1lbnRhbGx5CisgIGl0J3MgT3BlbiBTb3VyY2UsIHNvIHlvdSBoYXZlIHRoZSBzb3VyY2UgY29kZS4gIElmIHlvdSBuZWVkIHNvbWV0aGluZworICBmaXhpbmcgYmFkbHkgZW5vdWdoLCBpdCdzIHVwIHRvIHlvdSB0byBkbyB0aGUgd29yay4KKworICAgIFdlIGNhbid0IHByb21pc2UgdG8gYmUgYWJsZSB0byBzb2x2ZSBhbGwgcHJvYmxlbXMsIGJ1dCB3ZSdsbAorICBjZXJ0YWlubHkgdHJ5IGFuZCBoZWxwLiAgQnV0IHJlbWVtYmVyIHRoYXQgdGhpcyBpcyBiYXNpY2FsbHkgYW4KKyAgdW5zdXBwb3J0ZWQgcGFja2FnZS4gIEl0J3MgT3BlbiBTb3VyY2UsIHNvIGlmIHlvdSBuZWVkIHNvbWV0aGluZworICBmaXhpbmcgYmFkbHkgZW5vdWdoLCAgZnVuZGFtZW50YWxseSBpdCdzIHVwIHRvIHlvdSB0byBkbyB0aGUgd29yay4KKworPGEgbmFtZT0iQ2FuX0lfcmV1c2VfdGhlX2NvZGVfaW5fbXlfY29tbWVyY2lhbF9hcHBsaWNhdGlvbl8iPgorQ2FuIEkgcmV1c2UgdGhlIGNvZGUgaW4gbXkgY29tbWVyY2lhbCBhcHBsaWNhdGlvbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRldGFpbHMgb2YgdGhlIENPUFlSSUdIVHMgb24gdGhlIHBhY2thZ2UgY2FuIGJlIGZvdW5kIGluIHRoZQorQ09QWUlORyBmaWxlLiAgWW91IHNob3VsZCBoYXZlIHlvdXIgbGF3eWVyIHJlYWQgdGhpcyBmaWxlIGlmIHlvdSB3aXNoCit0byB1c2UgdGhlIGNvZGUgaW4geW91ciBjb21tZXJjaWFsIGFwcGxpY2F0aW9uLiAgV2Ugd2lsbCBub3Qgc3VtbWFyaXplCitoZXJlIHdoYXQgaXMgaW4gdGhlIGZpbGUsIGFzIHdlJ3JlIG5vdCBsYXd5ZXJzIGFuZCBhcmUgdW5xdWFsaWZpZWQgdG8KK2RvIHNvLgorCisKKzxhIG5hbWU9IldoYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX1NOTVB2X19fU05NUHZfX2FuZF9TTk1Qdl9fIj4KK1doYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNOTVB2MSwgU05NUHYyIGFuZCBTTk1QdjM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8YSBuYW1lPSJXaGF0X2FyZV9hbGxfdGhlc2VfZGlmZmVyZW50X1NOTVB2X19zX2FueXdheV8iPgorV2hhdCBhcmUgYWxsIHRoZXNlIGRpZmZlcmVudCBTTk1QdjIncyBhbnl3YXk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgQSBmdWxsIGRlc2NyaXB0aW9uIGlzIHByb2JhYmx5IGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBGQVEuCisgIFZlcnkgYnJpZWZseSwgdGhlIG9yaWdpbmFsIHByb3RvY29sIGFuZCBmcmFtZXdvcmsgd2FzIGRlc2NyaWJlZAorICBpbiBSRkNzIDExNTUtMTE1NywgYW5kIGlzIG5vdyBrbm93biBhcyBTTk1QdjEuCisKKyAgICBQcmFjdGljYWwgZXhwZXJpZW5jZSBzaG93ZWQgdXAgdmFyaW91cyBwcm9ibGVtcyBhbmQKKyAgZGVmaWNpZW5jaWVzIHdpdGggdGhpcywgYW5kIGEgcmV2aXNlZCBmcmFtZXdvcmsgd2FzIGRldmVsb3BlZCB0bworICB0cnkgYW5kIGFkZHJlc3MgdGhlc2UuICBUaGlzIHdhcyBkZXNjcmliZWQgaW4gUkZDcyAxNDQxLTE0NTIsIGFuZAorICBrbm93biBhcyAiU05NUHYyIGNsYXNzaWMiLgorICBUaGUgY2hhbmdlcyBwcm9wb3NlZCBpbmNsdWRlOgorCisJKiBuZXcgd2F5cyBvZiBkZWZpbmluZyBpbmZvcm1hdGlvbiAoTUlCIHN0cnVjdHVyZSkKKwkJKFNNSSwgVGV4dHVhbCBjb252ZW50aW9ucywgY29uZm9ybWFuY2Ugc3RhdGVtZW50cykKKwkqIG5ldyBwcm90b2NvbCBwYWNrZXQgdHlwZXMgYW5kIHRyYW5zcG9ydCBtYXBwaW5ncworCSogbmV3IG1lY2hhbmlzbXMgZm9yIGFkbWluaXN0cmF0aW9uIGFuZCBzZWN1cml0eQorCSogbWVjaGFuaXNtcyBmb3IgcmVtb3RlIGNvbmZpZ3VyYXRpb24KKworICBVbmZvcnR1bmF0ZWx5LCB3aGlsZSBtYW55IG9mIHRoZXNlIHdlcmUgZ2VuZXJhbGx5IGFjY2VwdGVkLCB0aGVyZQorICB3YXMgc29tZSBkaXNhZ3JlZW1lbnQgaW4gdGhlc2UgbGFzdCB0d28gYXJlYXMsIHNlY3VyaXR5L2FkbWluCisgIGFuZCByZW1vdGUgY29uZmlndXJhdGlvbi4gIFRoaXMgcmVzdWx0ZWQgaW4gYSBudW1iZXIgb2YgdmFyaWFudHMgYW5kCisgIGFsdGVybmF0aXZlIHByb3Bvc2FsczoKKworCVNOTVB2MmMJCUNvbnRhaW5zIHRoZSBuZXcgcHJvdG9jb2wgYW5kIE1JQiBzdHJ1Y3R1cmUgZWxlbWVudHMsCisJCQl1c2luZyB0aGUgZXhpc3RpbmcgU05NUHYxIGFkbWluaXN0cmF0aW9uIHN0cnVjdHVyZS4KKwkJCVRoaXMgaXMgdGhlIGRlLWZhY3RvIFNOTVB2MiBzdGFuZGFyZCAoZGVzY3JpYmVkIGluCisJCQlSRkNzIDE5MDEtMTkwOCksIHN1cGVyc2VkaW5nIFNOTVB2MiBjbGFzc2ljLCBhbmQgaXMKKwkJCWtub3duIGFzICJDb21tdW5pdHktYmFzZWQgU05NUHYyIiBvciBzaW1wbHkgIlNOTVB2MiIuCisKKworCVNOTVB2MiB1c2VjCX0gQWx0ZXJuYXRpdmUgcHJvcG9zYWxzIHRvIGFkZHJlc3MgdGhlCisJU05NUHYyKgkJfSBsaW1pdGF0aW9ucyBvZiBTTk1QdjEgYWRtaW5pc3RyYXRpb24KKwkJCX0gVGhlc2UgYXJlIGJvdGggc3VwZXItc2V0cyBvZiBTTk1QdjJjCisKKwkJCQorCVNOTVAtTkcJCUFuIGF0dGVtcHQgdG8gcmVhY2ggYWdyZWVtZW50IGJldHdlZW4KKwkJCXRoZSBwcm9wb25lbnRzIG9mIHVzZWMgYW5kIHYyc3Rhci4KKworICBUaGUgZm9ybWFsIHN1Y2Nlc3NvciB0byB0aGUgU05NUC1ORyB3b3JrIGhhcyBiZWVuIHRlcm1lZCBTTk1QdjMuCisgIFRoaXMgaGFzIG5vdyBiZWVuIGVmZmVjdGl2ZWx5IGZpbmFsaXNlZCwgYW5kIGlzIGRlc2NyaWJlZCBpbiBSRkNzCisgIDI1NzEtMjU3NS4gIFRoaXMgaXMgY3VycmVudGx5IGEgUHJvcG9zZWQgU3RhbmRhcmQsIGJ1dCBpcyBsaWtlbHkKKyAgdG8gcHJvZ3Jlc3MgdG8gZnVsbCBTdGFuZGFyZCBpbiB0aGUgcmVsYXRpdmVseSBuZWFyIGZ1dHVyZS4KKworCisKKzxhIG5hbWU9IldoaWNoX3ZlcnNpb25zX29mX1NOTVBfYXJlX3N1cHBvcnRlZF9pbl90aGlzX3BhY2thZ2VfIj4KK1doaWNoIHZlcnNpb25zIG9mIFNOTVAgYXJlIHN1cHBvcnRlZCBpbiB0aGlzIHBhY2thZ2U/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBwYWNrYWdlIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgb3JpZ2luYWwgU05NUHYxLCBDb21tdW5pdHktYmFzZWQKKyAgU05NUHYyIChpLmUuIFJGQ3MgMTkwMS0xOTA4KSwgYW5kIFNOTVB2MyAoaS5lLiBSRkNzIDI1NzEtMjU3NSkuCisgICAgVGhlIGFnZW50IHdpbGwgcmVzcG9uZCB0byByZXF1ZXN0cyB1c2luZyBhbnkgb2YgdGhlc2UgcHJvdG9jb2xzLAorICBhbmQgYWxsIHRoZSB0b29scyB0YWtlIGEgY29tbWFuZC1saW5lIG9wdGlvbiB0byBkZXRlcm1pbmUgd2hpY2gKKyAgdmVyc2lvbiB0byB1c2UuCisKKyAgU3VwcG9ydCBmb3IgU05NUHYyIGNsYXNzaWMgKGEuay5hLiAiU05NUHYyIGhpc3RvcmljIiAtIFJGQ3MgMTQ0MS0xNDUyKQorICB3YXMgZHJvcHBlZCB3aXRoIHRoZSA0LjAgcmVsZWFzZSBvZiB0aGUgVUNELXNubXAgcGFja2FnZS4KKworCisKKzxhIG5hbWU9IkNhbl9JX3VzZV9TTk1Qdl9fcmVxdWVzdHNfd2l0aF9hbl9TTk1Qdl9fTUlCX19vcl92aWNlX3ZlcnNhX18iPgorQ2FuIEkgdXNlIFNOTVB2MSByZXF1ZXN0cyB3aXRoIGFuIFNOTVB2MiBNSUIgKG9yIHZpY2UgdmVyc2EpPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBZZXMuCisKKyAgICBUaGUgdmVyc2lvbiBvZiB0aGUgc3ludGF4IHVzZWQgdG8gZGVmaW5lIGEgTUlCIGZpbGUKKyAgaXMgYmV0dGVyIHJlZmVycmVkIHRvIGFzIFNNSXYxIG9yIFNNSXYyLCBhbmQgaXMgcHVyZWx5CisgIGNvbmNlcm5lZCB3aXRoIGRlZmluaW5nIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlCisgIHZhcmlvdXMgbWFuYWdlbWVudCBvYmplY3RzLiAgVGhpcyBpcyAoYWxtb3N0KSBjb21wbGV0ZWx5CisgIHVucmVsYXRlZCB0byB0aGUgdmVyc2lvbnMgb2YgdGhlIHByb3RvY29sIG9wZXJhdGlvbnMuCisgIFNvIGl0IGlzIHF1aXRlIHJlYXNvbmFibGUgdG8gdXNlIFNOTVB2MSByZXF1ZXN0cyBvbgorICBvYmplY3RzIGRlZmluZWQgdXNpbmcgU01JdjIsIG9yIFNOTVB2MiAob3IgU05NUHYzKQorICByZXF1ZXN0cyBvbiBvYmplY3RzIGRlZmluZWQgdXNpbmcgU01JdjEuCisKKyAgICBUaGUgb25lIGV4Y2VwdGlvbiBpcyBvYmplY3RzIG9mIHN5bnRheCBDb3VudGVyNjQsCisgIHdoaWNoIGFyZSBvbmx5IGFjY2Vzc2libGUgdXNpbmcgU05NUHYyIG9yIGhpZ2hlci4KKyAgU05NUHYxIHJlcXVlc3RzIHdpbGwgZWl0aGVyIHRyZWF0IHN1Y2ggb2JqZWN0cyBhcyBhbgorICBlcnJvciwgb3Igc2tpcCBvdmVyIHRoZW0gY29tcGxldGVseS4KKworICAKKworPGEgbmFtZT0iV2hlcmVfY2FuX0lfZmluZF9tb3JlX2luZm9ybWF0aW9uX2Fib3V0X25ldHdvcmtfbWFuYWdlbWVudF8iPgorV2hlcmUgY2FuIEkgZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG5ldHdvcmsgbWFuYWdlbWVudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc2l0ZXMgd2l0aCBuZXR3b3JrIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gb24KKyAgdGhlIFdvcmxkIFdpZGUgV2ViLiBUaHJlZSBvZiB0aGUgbW9zdCB1c2VmdWwgYXJlCisKKyAgICAgIGh0dHA6Ly93d3cuc25tcHdlYi5vcmcvCisgICAgICBodHRwOi8vd3d3LnNubXBsaW5rLm9yZy8KKyAgICAgIGh0dHA6Ly93d3cubWliZGVwb3QuY29tLworCisgIFRoZXJlIGFyZSB0d28gVXNlbmV0IG5ld3Nncm91cHMgd2hpY2ggYXJlIHJlbGV2YW50LgorCSdjb21wLmRjb20ubmV0LW1hbmFnZW1lbnQnCisJCXdoaWNoIGRpc2N1c3NlcyBnZW5lcmFsIGlzc3VlcyByZWxhdGluZyB0byBuZXR3b3JrIG1hbmFnZW1lbnQKKwknY29tcC5wcm90b2NvbHMuc25tcCcKKwkJd2hpY2ggaXMgc3BlY2lmaWNhbGx5IGNvbmNlcm5lZCB3aXRoIHVzZSBvZiBTTk1QIGluIHBhcnRpY3VsYXIKKworICAodGhvdWdoIHRoZXJlIGlzIGEgbGFyZ2Ugb3ZlcmxhcCBiZXR3ZWVuIHRoZXNlIHR3byBncm91cHMpLgorICBUaGUgU05NUCBncm91cCBhbHNvIGhhcyBhbiBGQVEgKHNwbGl0IGludG8gdHdvIHBhcnRzKSB3aGljaCBkaXNjdXNzZXMgbW9yZQorICBnZW5lcmFsIGlzc3VlcyByZWxhdGVkIHRvIFNOTVAsIGluY2x1ZGluZyBib29rcywgc29mdHdhcmUsIG90aGVyIHNpdGVzLAorICBob3cgdG8gZ2V0IGFuIGVudGVycHJpc2UgbnVtYmVyLCBldGMsIGV0Yy4KKyAgVGhpcyBpcyBhdmFpbGFibGUgZnJvbQorCisgICAgICBmdHA6Ly9ydGZtLm1pdC5lZHUvcHViL3VzZW5ldC9jb21wLnByb3RvY29scy5zbm1wLworCisgIG9yIHZpYSBhbnkgb2YgdGhlIFdlYiBzaXRlcyBhYm92ZS4KKworCisKKzxhIG5hbWU9IklzX3VjZF9zbm1wX3RocmVhZF9zYWZlXyI+CitJcyB1Y2Qtc25tcCB0aHJlYWQgc2FmZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgU3RyaWN0bHkgc3BlYWtpbmcsIG5vLiAgSG93ZXZlciwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSB0aGUKKyAgbGlicmFyeSBpbiBhIHRocmVhZC1zYWZlIG1hbm5lci4gIFRoaXMgaXMgY292ZXJlZCBpbiBkZXRhaWwgaW4gdGhlIGZpbGUKKyAgUkVBRE1FLnRocmVhZCAoc2hpcHBlZCB3aXRoIHRoZSBzdGFuZGFyZCBkaXN0cmlidXRpb24pLCBidXQgY2FuIGJlCisgIHN1bW1hcmlzZWQgYXMgZm9sbG93czoKKworICAgIC0JQ2FsbCAnc25tcF9zZXNzX2luaXQoKScgcHJpb3IgdG8gYWN0aXZhdGluZyBhbnkgdGhyZWFkcy4KKwlUaGlzIHJlYWRzIGluIGFuZCBwYXJzZXMgTUlCIGluZm9ybWF0aW9uICh3aGljaCBpc24ndCB0aHJlYWQtc2FmZSkKKwlhcyB3ZWxsIGFzIHByZXBhcmluZyBhIHNlc3Npb24gc3RydWN0dXJlIGZvciBzdWJzZXF1ZW50IHVzZS4KKworICAgIC0JT3BlbiBhbiBTTk1QIHNlc3Npb24gdXNpbmcgJ3NubXBfc2Vzc19vcGVuKCknIHdoaWNoIHJldHVybnMgYW4KKwlvcGFxdWUgc2Vzc2lvbiBoYW5kbGUsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGluZGVwZW5kZW50IG9mIGFueQorCW90aGVyIHNlc3Npb25zIChyZWdhcmRsZXNzIG9mIHRocmVhZCkuCisKKyAgICAtCVJlc291cmNlIGxvY2tpbmcgaXMgbm90IGhhbmRsZWQgd2l0aGluIHRoZSBsaWJyYXJ5LCBhbmQgaXMgdGhlCisJcmVzcG9uc2liaWxpdHkgb2YgdGhlIG1haW4gYXBwbGljYXRpb24uCisKKyAgVGhlIGFwcGxpY2F0aW9ucyBhbmQgdGhlIGFnZW50IGhhdmUgbm90IGJlZW4gZGVzaWduZWQgZm9yIHRocmVhZGVkIHVzZS4KKworCisKKzxhIG5hbWU9IkFQUExJQ0FUSU9OUyI+CitBUFBMSUNBVElPTlMKKz09PT09PT09PT09PQorCis8YSBuYW1lPSJIb3dfZG9fSV9hZGRfYV9NSUJfIj4KK0hvdyBkbyBJIGFkZCBhIE1JQj8KKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgaXMgYWN0dWFsbHkgdHdvIHNlcGFyYXRlIHF1ZXN0aW9ucywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91CisgIGFyZSByZWZlcnJpbmcgdG8gdGhlIHRvb2xzLCBvciB0aGUgYWdlbnQgKG9yIGJvdGgpLgorICAgIFNlZSB0aGUgbmV4dCBxdWVzdGlvbiBvciB0aGUgbmV4dCBzZWN0aW9uIHJlc3BlY3RpdmVseS4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2FkZF9hX01JQl90b190aGVfdG9vbHNfIj4KK0hvdyBkbyBJIGFkZCBhIE1JQiB0byB0aGUgdG9vbHM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRmlyc3RseSwKKworCWNwIE1ZLU1JQi50eHQgL3Vzci9sb2NhbC9zaGFyZS9zbm1wL21pYnMKKworICAgICAgICAgIG9yCisKKyAgICAgICAgbWtkaXIgJEhPTUUvLnNubXAKKyAgICAgICAgbWtkaXIgJEhPTUUvLnNubXAvbWlicworCWNwIE1ZLU1JQi50eHQgJEhPTUUvLnNubXAvbWlicworCisgIEFuZCB0aGVuLAorCisJZXhwb3J0IE1JQlM9K01ZLU1JQgorCisgICAgICAgICAgb3IgYWx0ZXJuYXRpdmVseToKKworICAgICAgICBlY2hvICJtaWJzICtNWS1NSUIiICZndDsmZ3Q7ICRIT01FLy5zbm1wL3NubXAuY29uZgorCisgIE5vdGUgdGhhdCB5b3UgbmVlZCAqYm90aCogc3RlcHMuCisgIFRoZSBmaXJzdCBjb21tYW5kIGNvcGllcyB0aGUgZmlsZSBkZWZpbmluZyB0aGUgbmV3IE1JQiB0byBhCisgIGV4cGVjdGVkIGxvY2F0aW9uIGZvciBNSUIgZmlsZXMuICBUaGlzIGRlZmF1bHRzIHRvCisgIC91c3IvbG9jYWwvc2hhcmUvc25tcC9taWJzIChvciBQUkVGSVgvc2hhcmUvc25tcC9taWJzIGlmIHRoZSB0aGUKKyAgc3VpdGUgd2FzIGluc3RhbGxlZCBpbnRvIGEgZGlmZmVyZW50IGJhc2UgbG9jYXRpb24pLiAgU29tZQorICByZWFkeS1wYWNrYWdlZCBkaXN0cmlidXRpb25zIChzdWNoIGFzIExpbnV4IFJQTSBwYWNrYWdlcykgbWF5IGxvb2sKKyAgZm9yIE1JQiBmaWxlcyBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiwgc3VjaCBhcyAvZXRjL3NubXAvbWlicyAtIHB1dAorICB0aGUgbmV3IGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkgaW5zdGVhZC4gIFRoaXMgbWFrZXMgaXQgYXZhaWxhYmxlIGZvcgorICBldmVyeW9uZSBvbiB0aGUgc3lzdGVtLgorICBUaGUgdG9vbHMgd2lsbCBhbHNvIGxvb2sgZm9yIG1pYnMgaW4geW91ciBwZXJzb25hbCAkSE9NRS8uc25tcC9taWJzCisgIGRpcmVjdG9yeSwgYnV0IHRoaXMgd2lsbCBvbmx5IHdvcmsgZm9yIHlvdS4KKworICBUaGUgc2Vjb25kIGNvbW1hbmQgdGVsbHMgdGhlIHRvb2xzIHRvIGxvYWQgaW4gdGhpcyBuZXcgTUlCIGZpbGUgYXMgd2VsbAorICBhcyB0aGUgZGVmYXVsdCBzZXQuICAgTm90ZSB0aGF0IHRoZSB0b29scyBkbyAqbm90KiBsb2FkIGV2ZXJ5IE1JQiBmb3VuZAorICBpbiB0aGUgZGlyZWN0b3J5IC0gdGhpcyBpcyB0byBhdm9pZCBzbG93aW5nIHRoZW0gZG93biBleGNlc3NpdmVseSB3aGVuCisgIHRoZXJlIGlzIGEgbGFyZ2UgY29sbGVjdGlvbiBvZiBNSUIgZmlsZXMuICBJZiB5b3UgZG8gd2FudCB0aGUgdG9vbHMgdG8KKyAgbG9hZCBhbGwgdGhlIE1JQiBmaWxlcywgc2V0IHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIE1JQlMgdG8gdGhlIHNwZWNpYWwKKyAgdmFsdWUgIkFMTCIuCisKKyAgICAgTm90ZSB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyB0aGUgbmFtZSBvZiB0aGUgTUlCIG1vZHVsZSwKKyAgKm5vdCogdGhlIG5hbWUgb2YgdGhlIE1JQiBmaWxlLiAgIFRoZXNlIGFyZSB0eXBpY2FsbHkgdGhlIHNhbWUgKGFwYXJ0CisgIGZyb20gdGhlIC50eHQgc3VmZml4KSwgYnV0IGlmIGluIGRvdWJ0LCBjaGVjayB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCisgIFRoZSB2YWx1ZSB0byB1c2UgaXMgdGhlIHRva2VuIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgd29yZCBERUZJTklUSU9OUworICBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUuICBPZiBjb3Vyc2UsIGlmIHlvdSBsb2FkICdBTEwnIG1pYnMsIHRoZW4gdGhpcworICBkaXN0aW5jdGlvbiBpcyBpcnJlbGV2YW50LgorCisgICAgTW9zdCBvZiB0aGUgdG9vbHMgKGFwYXJ0IGZyb20gJ3NubXB0YWJsZScpIHdpbGwgd29yayBxdWl0ZSBoYXBwaWx5CisgIHdpdGhvdXQgYW55IE1JQiBmaWxlcyBhdCBhbGwsIGFzIGxvbmcgYXMgeW91IGFyZSBwcmVwYXJlZCB0byB3b3JrIHdpdGgKKyAgbnVtZXJpYyBPSURzIHRocm91Z2hvdXQuICBUaGUgTUlCIGZpbGVzIGFyZSBvbmx5IHVzZWQgZm9yIHRyYW5zbGF0aW5nCisgIGJldHdlZW4gbnVtZXJpYyBhbmQgdGV4dHVhbCBmb3JtcyBmb3IgcXVlcmllcyBhbmQgcmVzcG9uc2VzLgorICAgIFRoZSBzYW1lIGhvbGRzIHRydWUgZm9yIHRoZSBhZ2VudCAtIHNlZSB0aGUgQUdFTlQgc2VjdGlvbiBmb3IgZGV0YWlscy4KKworCisKKzxhIG5hbWU9IldoeV9jYW5fdF9JX3NlZV9hbnl0aGluZ19mcm9tX3RoZV9hZ2VudF8iPgorV2h5IGNhbid0IEkgc2VlIGFueXRoaW5nIGZyb20gdGhlIGFnZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIHR3byBtYWluIGdlbmVyYWwgY2F1c2VzIG9mIHByb2JsZW1zIHJldHJpZXZpbmcgaW5mb3JtYXRpb24KKyAgZnJvbSB0aGUgYWdlbnQuICAgRmlyc3RseSwgdGhlIHZhcmlhYmxlIChvciB2YXJpYWJsZXMpIHNwZWNpZmllZCBtYXkKKyAgbm90IGJlIHJlY29nbmlzZWQgYnkgdGhlIHRvb2xzIGFzIHZhbGlkIG5hbWVzLiAgSW4gdGhpcyBjYXNlLCB0aGUKKyAgdG9vbHMgd2lsbCB0eXBpY2FsbHkgcmVqZWN0IHRoZSByZXF1ZXN0IHdpdGhvdXQgZXZlciBjb250YWN0aW5nIHRoZQorICByZW1vdGUgYWdlbnQuCisKKyAgICBBbHRlcm5hdGl2ZWx5LCB0aGUgdG9vbCBtYXkgYmUgaGFwcHkgd2l0aCB0aGUgcmVxdWVzdCwgYnV0IHRoZSBhZ2VudAorICBkb2VzIG5vdCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUocykuICBJdCBtYXkgcmV0dXJuIGFuIGV4cGxpY2l0CisgIGVycm9yIG1lc3NhZ2UgaW5zdGVhZCwgb3IgdGhlIHJlcXVlc3QgbWF5IHRpbWUgb3V0IHdpdGhvdXQgYW55IHJlc3BvbnNlCisgIGJlaW5nIHNlbnQgYmFjayBhdCBhbGwuICBUaGUgbmV4dCBmZXcgZW50cmllcyBsb29rIGF0IHRoZXNlIGluIG1vcmUgZGV0YWlsLgorCisKKworPGEgbmFtZT0iV2h5X2Nhbl90X0lfc2VlX3ZhbHVlc19pbl90aGVfX0lOU0VSVF9FTlRFUlBSSVNFX0hFUkVfX3RyZWVfIj4KK1doeSBjYW4ndCBJIHNlZSB2YWx1ZXMgaW4gdGhlICZsdDtJTlNFUlQgRU5URVJQUklTRSBIRVJFJmd0OyB0cmVlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBIYXZpbmcgc2FpZCB0aGF0IHRoZXJlIGFyZSB0d28gbWFpbiByZWFzb25zIGZvciBub3QgZ2V0dGluZyBhIHJlc3BvbnNlLAorICB0aGUgbW9zdCBsaWtlbHkgY2F1c2Ugb2YgdGhpcyBwcm9ibGVtIGlzIGFjdHVhbGx5IHNvbWV0aGluZyBlbHNlIGFnYWluLgorCisgIFRoZSAnc25tcHdhbGsnIGNvbW1hbmQgdGFrZXMgYSBwb2ludCBpbiB0aGUgb3ZlcmFsbCBNSUIgdHJlZSwgYW5kIHRyaWVzCisgIHRvIGRpc3BsYXkgYWxsIHRoZSB2YWx1ZXMgdGhhdCBsaWUgd2l0aGluIHRoaXMgc3VidHJlZS4gIEhvd2V2ZXIsIGl0CisgIGFjdHVhbGx5IGRvZXMgdGhpcyBieSBpc3N1aW5nIGEgc2VyaWVzIG9mICJnZXRuZXh0IiByZXF1ZXN0cywgdW50aWwKKyAgdGhlIHZhcmlhYmxlIHJldHVybmVkIGxpZXMgb3V0c2lkZSB0aGUgc3VidHJlZSBvZiBpbnRlcmVzdC4gIElmIHRoZQorICB2ZXJ5IGZpcnN0IHJlcXVlc3QgcmV0dXJucyBzdWNoIGFuIHVuZGVzaXJlZCB2YWx1ZSwgdGhlbiB0aGUgY29tbWFuZAorICB3aWxsIHRlcm1pbmF0ZSwgd2l0aG91dCBoYXZpbmcgZGlzcGxheWVkIGFueXRoaW5nIGF0IGFsbC4KKworICAgIElmIGFuIGV4cGljaXQgc3RhcnRpbmcgcG9pbnQgaXMgZ2l2ZW4gdG8gJ3NubXB3YWxrJywgdGhlbiBpdCBpcyByZWFzb25hYmx5CisgIGNsZWFyIHdoYXQgaXMgaGFwcGVuaW5nLCBhbmQgdGhhdCB0aGVyZSBpcyBzaW1wbHkgbm90aGluZyBpbiB0aGUgc3VidHJlZQorICBzcGVjaWZpZWQuICBIb3dldmVyLCBpZiAnc25tcHdhbGsnIGlzIGNhbGxlZCB3aXRob3V0IGdpdmluZyBhbiBleHBsaWNpdAorICBzdGFydGluZyBwb2ludCwgdGhlbiBpdCB3aWxsIGRpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHRoZSAnbWliLTInIHN1YnRyZWUuCisgIEl0IHdpbGwgbm90IGF0dGVtcHQgdG8gdHJhdmVyc2UgYW55ICdwcml2YXRlLmVudGVycHJpc2UnIHN1YnRyZWUsIHN1Y2ggYXMKKyAgdGhlIFVDRC1zcGVjaWZpYyBvYmplY3RzIChpbmNsdWRpbmcgYW55IGxvY2FsIGV4dGVuc2lvbnMpLgorCisgICAgVG8gd2FsayB0aGUgd2hvbGUgdHJlZSwgc3BlY2lmeSBhIHN0YXJ0aW5nIHBvaW50IG9mICcuaXNvJworICBUbyB3YWxrIGEgc3BlY2lmaWMgZW50ZXJwcmlzZSBzdWJ0cmVlLCBzcGVjaWZ5IHRoZSByb290IG9mIHRoaXMgYXMKKyAgdGhlIHN0YXJ0aW5nIHBvaW50IC0gZS5nOgorCisJc25tcHdhbGsgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3QgdWNkYXZpcworIAorICBPciwgb2YgY291cnNlLCB5b3UgY2FuIHdhbGsgYSBzZWxlY3RlZCBwb3J0aW9uIG9mIGFuIGVudGVycHJpc2Ugc3VidHJlZQorICBieSBzcGVjaWZ5aW5nIHRoZSBhcHByb3ByaWF0ZSBzdGFydGluZyBwb2ludCAtIGUuZzoKKworCXNubXB3YWxrIC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHVjZGF2aXMudmVyc2lvbgorICAKKyAgSWYgeW91IHN0aWxsIGNhbid0IHNlZSBhbnkgaW5mb3JtYXRpb24sIGtlZXAgcmVhZGluZy4gIFRoZSBuZXh0IGZldworICBxdWVzdGlvbnMgd2lsbCBwcm9iYWJseSBoZWxwIHlvdS4KKworCisKKzxhIG5hbWU9IlJlcXVlc3RzX2Fsd2F5c19zZWVtX3RvX3RpbWVvdXRfX2FuZF9kb25fdF9naXZlX21lX2FueXRoaW5nX2JhY2tfX19XaHlfIj4KK1JlcXVlc3RzIGFsd2F5cyBzZWVtIHRvIHRpbWVvdXQsIGFuZCBkb24ndCBnaXZlIG1lIGFueXRoaW5nIGJhY2suICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBvc3NpYmxlIGNhdXNlcyBvZiB0aGlzLgorCisgIFRoZSBtb3N0IGxpa2VseSBhcmUgdGhlIGFnZW50IGFjY2VzcyBjb250cm9sIHNldHRpbmdzICh3aG8gaXMgYWxsb3dlZAorICBhY2Nlc3MgYnkgdGhlIGFnZW50IGl0c2VsZiksIG9yIGZpcmV3YWxsL3BhY2tldCBmaWx0ZXJpbmcgc2V0dGluZ3MKKyAgKHdobyBpcyBhbGxvd2VkIGFjY2VzcyBieSB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtKS4KKworICBBIGZ1bGxlciBsaXN0IG9mIHBvc3NpYmxlIGNhdXNlcyAod2l0aCBpbmRpY2F0aW9ucyBvZiBob3cgdG8gY2hlY2sKKyAgZm9yIGVhY2gpIGlzIGFzIGZvbGxvd3M6CisgIAorCS0gaXMgdGhlIG1hY2hpbmUgeW91IGFyZSBxdWVyeWluZyB1cCBhbmQgcnVubmluZz8KKwkJKERvZXMgaXQgcmVzcG9uZCB0byAncGluZycgb3Igc2ltaWxhciByZXF1ZXN0cz8pCisJLSBpcyB0aGVyZSBhbiBTTk1QIGFnZW50IHJ1bm5pbmcgb24gaXQ/CisJCShSdW4gJ3BzIC1lZiB8IGdyZXAgc25tcCcgb3IgJ25ldHN0YXQgLWFuIHwgZ3JlcCAxNjEnKQorCS0gYXJlIHRoZSByZXF1ZXN0cyBhcnJpdmluZywgb3IgYmVpbmcgYmxvY2tlZCAoZS5nLiBieSBhIGZpcmV3YWxsKT8KKwkJKFJlc3RhcnQgdGhlIGFnZW50IHVzaW5nICdzbm1wZCAtZiAtTCAtZCcKKwkJIGFuZCBzZWUgaWYgaXQgc2hvd3MgdGhlIGluY29taW5nIHBhY2tldCBkdW1wcykKKwktIGlzIHRoZSBhZ2VudCBzaW1wbHkgdGFraW5nIGEgbG9uZyB0aW1lIHRvIHJlc3BvbmQ/CisJCShUaGUgJ3NubXBkIC1mIC1MIC1kJyBjb21tYW5kIHNob3VsZCBzaG93IGEgc2VyaWVzIG9mCisgCQkgaW5jb21pbmcgUERVcywgZm9sbG93ZWQgZXZlbnR1YWxseSBieSB0aGUgb3V0Z29pbmcgUERVcy4KKwkJIFRyeSB0aGUgcmVxdWVzdCBhZ2FpbiB3aXRoIGEgbG9uZyB0aW1lb3V0IHZhbHVlLAorCQkgZS5nLiAnc25tcGNtZCAtdCAxMjAgLi4uLicpCisJLSBkb2VzIHRoZSBhZ2VudCdzIGNvbnRyb2wgc2V0dGluZ3MgYWxsb3cgdGhpcyByZXF1ZXN0PworCQkoVGhlICdzbm1wZCAtZiAtTCAtZCcgY29tbWFuZCB3aWxsIHNob3cgYSBzZXJpZXMgb2YKKyAJCSBpbmNvbWluZyBQRFVzIHdpdGggKm5vKiBjb3JyZXNwb25kaW5nIG91dGdvaW5nIFBEVXMpCisKKyAgTm90ZSB0aGF0IGlmIHRoZSBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBhbGxvdyBhY2Nlc3MgZm9yIGEKKyAgcGFydGljdWxhciBjb21tdW5pdHksIHRoZW4gdGhlIFNOTVAgc3BlY2lmaWNhdGlvbiBkZWNsYXJlcyB0aGF0IG5vCisgIGVycm9yIHJlc3BvbnNlIHNob3VsZCBiZSBzZW50IGF0IGFsbC4gIFRoZSBOZXQtU05NUCB0b29scyB3aWxsIHJldHJ5CisgIHRoZSByZXF1ZXN0IGEgbnVtYmVyIG9mIHRpbWVzLCBiZWZvcmUgcmVwb3J0aW5nIGEgdGltZW91dCBlcnJvci4KKworICAgIElmIHRoZSBhZ2VudCBpcyBjb25maWd1cmVkIHRvIGFsbG93IHBhcnRpYWwgYWNjZXNzIGZvciBhIGdpdmVuCisgIGNvbW11bml0eSwgdGhlbiByZXF1ZXN0cyB0aGF0IGZhbGwgb3V0c2lkZSB0aGlzIGF1dGhvcmlzZWQgYWNjZXNzCisgICp3aWxsKiByZXN1bHQgaW4gYW4gZXJyb3IgcmVzcG9uc2UuCisgICAgKFNOTVAgYWdlbnRzIGNhbiBiZSB2ZXJ5IGZ1c3N5IG92ZXIgd2hvIHRoZXkgdGFsayB0byEpCisKKyAgICBTZWUgdGhlIGVudHJpZXMgb24gYWNjZXNzIGNvbnRyb2wgaW4gdGhlIEFHRU5UIHNlY3Rpb24gZm9yIGhvdyB0bworICBjb25maWd1cmUgdGhlIE5ldC1TTk1QIGFnZW50IHRvIGFsbG93IHN1aXRhYmxlIGFjY2Vzcy4gIEZvciBvdGhlcgorICB2ZW5kb3JzJyBhZ2VudHMsIHlvdSB3aWxsIG5lZWQgdG8gY29uc3VsdCB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4KKworCisKKzxhIG5hbWU9IklfY2FuX3NlZV90aGVfc3lzdGVtX2dyb3VwX19idXRfbm90aGluZ19lbHNlX19fV2h5XyI+CitJIGNhbiBzZWUgdGhlIHN5c3RlbSBncm91cCwgYnV0IG5vdGhpbmcgZWxzZS4gIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBpcyBwcm9iYWJseSB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgcXVlc3Rpb24gLSBhIHByb2JsZW0gd2l0aAorICB0aGUgYWNjZXNzIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFnZW50LiAgTWFueSBwcmUtY29uZmlndXJlZCBzeXN0ZW1zCisgIChzdWNoIGFzIG1vc3QgTGludXggZGlzdHJpYnV0aW9ucykgd2lsbCBvbmx5IGFsbG93IGFjY2VzcyB0byB0aGUgc3lzdGVtCisgIGdyb3VwIGJ5IGRlZmF1bHQsIGFuZCBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgdG8gZW5hYmxlIG1vcmUgZ2VuZXJhbCBhY2Nlc3MuCisKKyAgICBUaGUgZWFzaWVzdCB3YXkgdG8gdGVzdCB0aGlzIGlzIHRvIHRyeSBhIEdFVE5FWFQgcmVxdWVzdCwgdGhhdCBvdWdodAorICB0byByZXR1cm4gdGhlIGVudHJ5IG9mIGludGVyZXN0LgorICBlLmcuCisJc25tcGdldG5leHQgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3QgdWNkYXZpcy52ZXJzaW9uLnZlcnNpb25UYWcKKyAgaW5zdGVhZCBvZgorCXNubXBnZXQgICAgIC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHVjZGF2aXMudmVyc2lvbi52ZXJzaW9uVGFnLjAKKworICBJZiB0aGUgYWdlbnQgcmVzcG9uZHMgd2l0aCAiZW5kIG9mIE1JQiIgb3IgYSBkaWZmZXJlbnQgb2JqZWN0LCB0aGVuCisgIGVpdGhlciB0aGUgYWdlbnQgZG9lc24ndCBpbXBsZW1lbnQgdGhhdCBwYXJ0aWN1bGFyIG9iamVjdCBhdCBhbGwsIG9yCisgIHRoZSBhY2Nlc3MgY29udHJvbCB3b24ndCBhbGxvdyB5b3UgYWNjZXNzIHRvIGl0LgorCisgIFNlZSB0aGUgZW50cmllcyBvbiBhY2Nlc3MgY29udHJvbCBpbiB0aGUgQUdFTlQgc2VjdGlvbiBmb3IgaG93IHRvCisgIGNvbmZpZ3VyZSB0aGUgTmV0LVNOTVAgYWdlbnQsIG9yIGNvbnN1bHQgdGhlIGFnZW50J3Mgb3duIGRvY3VtZW50YXRpb24uCisKKworCis8YSBuYW1lPSJUaGVfYWdlbnRfd29ya2VkX2Zvcl9hX3doaWxlX190aGVuX3N0b3BwZWRfcmVzcG9uZGluZ19fX1doeV8iPgorVGhlIGFnZW50IHdvcmtlZCBmb3IgYSB3aGlsZSwgdGhlbiBzdG9wcGVkIHJlc3BvbmRpbmcuICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEFzc3VtaW5nIHRoYXQgdGhlIGFnZW50IGhhc24ndCBjcmFzaGVkIGNvbXBsZXRlbHksIHRoZSBtb3N0IGxpa2VseQorICBleHBsYW5hdGlvbiBpcyB0aGF0IGl0J3Mgc2ltcGx5IG92ZXJsb2FkZWQsIGFuZCBpcyB0YWtpbmcgbG9uZ2VyIHRvCisgIHJlc3BvbmQgdGhhbiB0aGUgcXVlcnlpbmcgdG9vbCBpcyB3YWl0aW5nLiAgU2luY2UgdGhlIGFnZW50IGhhbmRsZXMKKyAgZWFjaCByZXF1ZXN0IGluIHR1cm4sIHdpdGhvdXQgcmVnYXJkIHRvIGVhcmxpZXIgYWN0aXZpdHksIGFuZCBtb3N0CisgIHRvb2xzIHdpbGwgcmV0cnkgYSByZXF1ZXN0IHdoZW4gaXQgdGltZXMgb3V0LCB0aGUgbGlzdCBvZiBvdXRzdGFuZGluZworICByZXF1ZXN0cyBjYW4gZ3JvdyBsb25nZXIgYW5kIGxvbmdlci4KKworICAgIFRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgdGhlIGNhdXNlIG9yIG5vdCwgdHJ5IGxlYXZpbmcgdGhlCisgIGFnZW50IHVuZGlzdHVyYmVkIGZvciBhIHdoaWxlLCBhbmQgdGhlbiBwcm9iZSBpdCB1c2luZyBhIGxvbmdlcgorICB0aW1lb3V0IChlLmcuICctdCAxMjAnKS4gIFRoaXMgc2hvdWxkIGdpdmUgdGhlIGFnZW50IHRpbWUgdG8gaGFuZGxlCisgIGVhY2ggcmVxdWVzdCBmaXJzdCB0aW1lIHJvdW5kLCBhbmQgYXZvaWRzIG92ZXJsb2FkaW5nIGl0IHdpdGgKKyAgZHVwbGljYXRlIHJlcXVlc3RzLgorCisgIFRoaXMgaXMgbm90IGEgZnVsbCBzb2x1dGlvbiwgb2YgY291cnNlLCBidXQgYXQgbGVhc3QgaXQgc2hvdWxkCisgIGFsbG93IHlvdSB0byBpc29sYXRlIHRoZSBvZmZlbmRpbmcgcG9ydGlvbiBvZiB0aGUgdHJlZS4gVGhlCisgIGRldmVsb3BlcnMgbWF5IHRoZW4gYmUgYWJsZSB0byBvZmZlciBhIG1vcmUgbG9uZy10ZXJtIHNvbHV0aW9uLgorCisKKworPGEgbmFtZT0iUmVxdWVzdGluZ19hbl9vYmplY3RfZmFpbHNfd2l0aF9fVW5rbm93bl9PYmplY3RfSWRlbnRpZmllcl9fX1doeV8iPgorUmVxdWVzdGluZyBhbiBvYmplY3QgZmFpbHMgd2l0aCAiVW5rbm93biBPYmplY3QgSWRlbnRpZmllciIgIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBJZiBhIGdlbmVyYWwgc25tcHdhbGsgc2hvd3MgdGhlIGVudHJ5LCBidXQgYXNraW5nIGZvciBpdCBtb3JlCisgIHNwZWNpZmljYWxseSBnaXZlcyBhICJzdWItaWRlbnRpZmllciBub3QgZm91bmQ6IiBvciAiVW5rbm93biBPYmplY3QKKyAgSWRlbnRpZmllciIgZXJyb3IsIHRoZW4gdGhhdCdzIGEgcHJvYmxlbSB3aXRoIHRoZSB0b29sLCByYXRoZXIgdGhhbgorICB0aGUgYWdlbnQuCisKKyAgICBGaXJzdGx5LCBtYWtlIHN1cmUgdGhhdCB5b3UncmUgYXNraW5nIGZvciB0aGUgb2JqZWN0IGJ5IHRoZSByaWdodCBuYW1lLgorICBPYmplY3QgZGVzY3JpcHRvcnMgYXJlIGNhc2Utc2Vuc2l0aXZlLCBzbyBhc2tpbmcgZm9yICdzeXN1cHRpbWUnIHdpbGwKKyAgbm90IGJlIHJlY29nbmlzZWQsIGJ1dCAnc3lzVXBUaW1lJyB3aWxsLgorCisgICAgU2Vjb25kbHksIHRoZSBvYmplY3QgbWF5IGJlIGRlZmluZWQgaW4gYSBNSUIgdGhhdCBoYXNuJ3QgYmVlbiBsb2FkZWQuCisgIFRyeSBsb2FkaW5nIGluIGFsbCB0aGUgTUlCIGZpbGVzOgorCisJc25tcGdldCAtbSBBTEwgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzVXBUaW1lLjAKKworICAodGhvdWdoIGlmIHNubXB3YWxrIHRyYW5zbGF0ZXMgaXQgT0ssIHRoYXQncyBsZXNzIGxpa2VseSB0byBiZSB0aGUgY2F1c2UpLgorCisgICAgVGhpcmRseSwgZWFybGllciB2ZXJzaW9ucyBvZiB0aGUgVUNEIHNvZnR3YXJlIGV4cGVjdGVkICJmdWxsIiBwYXRocworICBmb3Igb2JqZWN0IG5hbWVzLCBlaXRoZXIgYmFzZWQgYXQgdGhlIHJvb3Qgb2YgdGhlIHdob2xlIE1JQiB0cmVlCisgICgiLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIuc3lzdGVtLnN5c1VwVGltZSIpIG9yIHRoZSAnbWliLTInCisgIHN1YnRyZWUgKCJzeXN0ZW0uc3lzVXBUaW1lIikuICBUcnk6CisgIAorCXNubXBnZXQgLXYxIC1jIHB1YmxpYyBteWhvc3Qgc3lzdGVtLnN5c1VwVGltZS4wCisKKyAgVGhlc2UgZWFybGllciB2ZXJzaW9ucyBvZiB0aGUgdG9vbHMgbWF5IHRha2UgYSBjb21tYW5kLWxpbmUgb3B0aW9uICctUicKKyAgb3IgJy1JUicgKGRlcGVuZGluZyBvbiB2aW50YWdlKSB0byBpbnZva2UgdGhpcyAicmFuZG9tLWFjY2VzcyIgbW9kZS4KKyAgTm90ZSB0aGF0IHNubXB0cmFuc2xhdGUgc3RpbGwgcmVxdWlyZXMgInJhbmRvbS1hY2Nlc3MiIHRvIGJlIHNwZWNpZmllZAorICBleHBsaWNpdGx5IC0gYWxsIG90aGVyIGNvbW1hbmQgdG9vbHMgbm93IHVzZSB0aGlzIG1vZGUgYnkgZGVmYXVsdHMuCisKKyAgQWxsIHZlcnNpb25zIG9mIHRoZSBVQ0QgYW5kIE5ldC1TTk1QIHRvb2xzIGFjY2VwdCB0aGUgc3ludGF4CisKKwlzbm1wZ2V0IC12MSAtYyBwdWJsaWMgbXlob3N0IFJGQzEyMTMtTUlCOnN5c1VwVGltZS4wCisKKyAgdG8gZGVub3RlIGEgcGFydGljdWxhciBvYmplY3QgaW4gYSBzcGVjaWZpYyBNSUIgbW9kdWxlLiAgTm90ZSB0aGF0IHRoaXMKKyAgdXNlcyB0aGUgbmFtZSBvZiB0aGUgKm1vZHVsZSosIG5vdCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4gIFNlZSB0aGUgc2Vjb25kCisgIHF1ZXN0aW9uIGluIHRoaXMgc2VjdGlvbiBmb3IgdGhlIGRpc3RpbmN0aW9uLgorCisKKworPGEgbmFtZT0iV2h5X2RvX0lfZ2V0X19ub1N1Y2hOYW1lX193aGVuX2Fza2luZ19mb3JfX3N5c1VwVGltZV9fX29yX3NpbWlsYXJfXyI+CitXaHkgZG8gSSBnZXQgIm5vU3VjaE5hbWUiIHdoZW4gYXNraW5nIGZvciAic3lzVXBUaW1lIiAob3Igc2ltaWxhcik/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcG9zc2libGUgY2F1c2VzIG9mIHRoaXMgKHNjYXR0ZXJlZCB0aHJvdWdob3V0CisgIHRoaXMgRkFRLCBzbyBrZWVwIHJlYWRpbmchKS4gICBCdXQgb25lIG9mIHRoZSBtb3N0IGxpa2VseSBzbmFyZXMgZm9yCisgIHRoZSB1bndhcnkgaXMgZm9yZ2V0dGluZyB0aGUgaW5zdGFuY2Ugc3ViaWRlbnRpZmllciBmb3IgJ25vbi10YWJsZScKKyAgb2JqZWN0cy4gIElmIHlvdSB3YWxrIHRoZSAnc3lzdGVtJyB0cmVlLCB5b3UnbGwgbm90aWNlIHRoYXQgYWxsIHRoZQorICByZXN1bHRzIChhcGFydCBmcm9tIHRoZSBzeXNPUlRhYmxlKSwgaGF2ZSBhICcuMCcgYXQgdGhlIGVuZCBvZiB0aGUgT0lELgorICBUaGlzIGlzIHRoZSAiaW5zdGFuY2Ugc3ViLWlkZW50aWZpZXIiIC0gd2hpY2ggKm11c3QqIGJlIGluY2x1ZGVkIGZvcgorICBhIEdFVCByZXF1ZXN0LgorICAgICBDb21wYXJlIHRoZSBmb2xsb3dpbmc6CisKKwkkIHNubXBnZXQgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzVXBUaW1lCisJRXJyb3IgaW4gcGFja2V0CisJUmVhc29uOiAobm9TdWNoTmFtZSkgVGhlcmUgaXMgbm8gc3VjaCB2YXJpYWJsZSBuYW1lIGluIHRoaXMgTUlCLgorCVRoaXMgbmFtZSBkb2Vzbid0IGV4aXN0OiBzeXN0ZW0uc3lzVXBUaW1lCisJJCBzbm1wZ2V0IC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c1VwVGltZS4wCisJc3lzdGVtLnN5c1VwVGltZS4wID0gVGltZXRpY2tzOiAoNjkxODkyNzEpIDggZGF5cywgMDoxMTozMi43MQorCisgIFRoaXMgaXMgYSBsaXR0bGUgbGVzcyBvYnNjdXJlIHdoZW4gdXNpbmcgU05NUHYyYyBvciB2MyByZXF1ZXN0czoKKworCSQgc25tcGdldCAtdiAyYyAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c1VwVGltZQorCXN5c3RlbS5zeXNVcFRpbWUgPSBObyBTdWNoIEluc3RhbmNlIGN1cnJlbnRseSBleGlzdHMKKworCisKKzxhIG5hbWU9IldoeV9kb19JX3NvbWV0aW1lc19nZXRfX0VuZF9vZl9NSUJfX3doZW5fd2Fsa2luZ19hX3RyZWVfX2FuZF9zb21ldGltZXNfbm90XyI+CitXaHkgZG8gSSBzb21ldGltZXMgZ2V0ICJFbmQgb2YgTUlCIiB3aGVuIHdhbGtpbmcgYSB0cmVlLCBhbmQgc29tZXRpbWVzIG5vdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBkZXBlbmRzIG9uIHdoaWNoIE1JQiBtb2R1bGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGFnZW50IHlvdSBhcmUKKyAgcXVlcnlpbmcgYW5kIHdoYXQgeW91J3JlIGFza2luZyBmb3IuCisKKyAgUmVjYWxsIHRoYXQgYSB0cmVlIGlzIHdhbGtlZCBieSByZXBlYXRlZGx5IGFza2luZyBmb3IgInRoZSBuZXh0IGVudHJ5IiB1bnRpbAorICBhbGwgdGhlIHZhbHVlcyB1bmRlciB0aGF0IHRyZWUgaGF2ZSBiZWVuIHJldHJpZXZlZC4gIEhvd2V2ZXIsIHRoZSBhZ2VudCBoYXMKKyAgbm8gaWRlYSB0aGF0IHRoaXMgaXMgd2hhdCdzIGhhcHBlbmluZyAtIGFsbCBpdCBzZWVzIGlzIGEgcmVxdWVzdCBmb3IgInRoZQorICBuZXh0IGVudHJ5IGFmdGVyIFgiLgorCisgIElmIHRoZSBvYmplY3QgWCBoYXBwZW5zIHRvIGJlIHRoZSBsYXN0IGVudHJ5IGluIGEgc3ViLXRyZWUsIHRoZSBhZ2VudCB3aWxsCisgIHByb3ZpZGUgdGhlIG5leHQgb2JqZWN0IHN1cHBvcnRlZCAoYXMgcmVxdWVzdGVkKSBldmVuIHRob3VnaCB0aGlzIHdpbGwgYmUKKyAgaW4gYSBkaWZmZXJlbnQgc3VidHJlZS4gIEl0J3MgdXAgdG8gdGhlIHF1ZXJ5aW5nIHRvb2wgdG8gcmVjb2duaXNlIHRoYXQKKyAgdGhpcyBsYXN0IHJlc3VsdCBsaWVzIG91dHNpZGUgdGhlIGFyZWEgb2YgaW50ZXJlc3QsIGFuZCBzaW1wbHkgZGlzY2FyZCBpdC4KKworICBJZiB0aGUgb2JqZWN0IFggaGFwcGVucyB0byBiZSB0aGUgbGFzdCBlbnRyeSBzdXBwb3J0ZWQgYnkgdGhlIGFnZW50LCBpdAorICBkb2Vzbid0IGhhdmUgYW5vdGhlciBvYmplY3QgdG8gcHJvdmlkZSwgc28gcmV0dXJucyBhbiAiZW5kIG9mIE1JQiIKKyAgaW5kaWNhdGlvbi4gIFRoZSBOZXQtU05NUCB0b29scyByZXBvcnQgdGhpcyB3aXRoIHRoZSBtZXNzYWdlIGFib3ZlLgorCisgIEJ1dCBpbiBlaXRoZXIgY2FzZSwgdGhlIGFjdHVhbCBpbmZvcm1hdGlvbiBwcm92aWRlZCB3aWxsIGJlIHRoZSBzYW1lLgorCisKKworPGEgbmFtZT0iSV9jYW5ub3Rfc2V0X2FueV92YXJpYWJsZXNfaW5fdGhlX01JQl8iPgorSSBjYW5ub3Qgc2V0IGFueSB2YXJpYWJsZXMgaW4gdGhlIE1JQi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgcmVhc29ucyBmb3IgdGhpczoKKworICBUaGUgbWFqb3JpdHkgb2YgTUlCIG9iamVjdHMgYXJlIGRlZmluZWQgYXMgInJlYWQtb25seSIgYW5kIGluaGVyZW50bHkKKyAgY2Fubm90IGJlIGNoYW5nZWQgdmlhIFNFVCByZXF1ZXN0cy4KKworICBPZiB0aG9zZSB0aGF0IGNhbiBpbiBwcmluY2lwbGUgYmUgY2hhbmdlZCwgbm90IGFsbCBoYXZlIGJlZW4gaW1wbGVtZW50ZWQKKyAgYXMgc3VjaCBpbiB0aGlzIGFnZW50LgorCisgIEV2ZW4gaWYgU0VUIHN1cHBvcnQgaGFzIGJlZW4gaW1wbGVtZW50ZWQsIHRoZSBhZ2VudCBtYXkgbm90IGJlIGNvbmZpZ3VyZWQKKyAgdG8gYWxsb3cgd3JpdGUgYWNjZXNzIHRvIHRoaXMgb2JqZWN0LgorCisgIFRoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBzaGlwcGVkIHdpdGggdGhlIGJhc2ljIGRpc3RyaWJ1dGlvbiBvbmx5CisgIGFsbG93cyB3cml0ZSBhY2Nlc3MgZm9yIHRoZSBsb2NhbCBob3N0IGl0c2VsZiAoYW5kIGEgc3VpdGFibGUgY29tbXVuaXR5CisgIG5hbWUgbXVzdCBiZSBjb25maWd1cmVkIGZpcnN0KS4KKyAgICBSZWFkeS1pbnN0YWxsZWQgZGlzdHJpYnV0aW9ucyAoc3VjaCBhcyB0aG9zZSBzaGlwcGVkIHdpdGggTGludXgpIHRlbmQKKyAgdG8gYmUgY29uZmlndXJlZCB3aXRoIHJlYWQtb25seSBhY2Nlc3MgdG8gcGFydCBvZiB0aGUgbWliIHRyZWUgKHR5cGljYWxseQorICBqdXN0IHRoZSBzeXN0ZW0gZ3JvdXApIGFuZCBubyB3cml0ZSBhY2Nlc3MgYXQgYWxsLgorCisgIFRvIGNoYW5nZSB0aGlzLCB5b3Ugd2lsbCBuZWVkIHRvIHNldCB1cCB0aGUgYWdlbnQncyBhY2Nlc3MgY29udHJvbAorICBjb25maWd1cmF0aW9uLiAgU2VlIHRoZSBBR0VOVCBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBOb3RlIHRoYXQgbmVpdGhlciB0aGUgY29tbXVuaXR5IHN0cmluZyAicHVibGljIiBub3IgInByaXZhdGUiIGNhbiBiZQorICB1c2VkIHRvIHNldCB2YXJpYWJsZXMgaW4gYSB0eXBpY2FsIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKworCisKKzxhIG5hbWU9IlZhcmlhYmxlc19zZWVtX3RvX2Rpc2FwcGVhcl93aGVuX0lfdHJ5X3RvX3NldF90aGVtX19fV2h5XyI+CitWYXJpYWJsZXMgc2VlbSB0byBkaXNhcHBlYXIgd2hlbiBJIHRyeSB0byBzZXQgdGhlbS4gIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBpcyBhY3R1YWxseSB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgcXVlc3Rpb24gLSBpdCBqdXN0IGlzbid0CisgIHBhcnRpY3VsYXJseSBvYnZpb3VzLCBwYXJ0aWN1bGFybHkgd2hlbiB1c2luZyBTTk1QdjEuICBBIHR5cGljYWwKKyAgZXhhbXBsZSBvZiB0aGlzIGVmZmVjdCB3b3VsZCBiZQorCisJJCBzbm1wZ2V0IC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c3RlbS5zeXNMb2NhdGlvbi4wCisJc3lzdGVtLnN5c0xvY2F0aW9uLjAgPSBzb21ld2hlcmUgbmVhcmJ5CisKKwkkIHNubXBzZXQgLXYxIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzdGVtLnN5c0xvY2F0aW9uLjAgcyAicmlnaHQgaGVyZSIKKwlFcnJvciBpbiBwYWNrZXQuCisJUmVhc29uOiAobm9TdWNoTmFtZSkgVGhlcmUgaXMgbm8gc3VjaCB2YXJpYWJsZSBuYW1lIGluIHRoaXMgTUlCLgorCVRoaXMgbmFtZSBkb2Vzbid0IGV4aXN0OiBzeXN0ZW0uc3lzTG9jYXRpb24uMAorCisgIFRyeWluZyB0aGUgc2FtZSByZXF1ZXN0IHVzaW5nIFNOTVB2MiBvciBhYm92ZSBpcyBzb21ld2hhdCBtb3JlIGluZm9ybWF0aXZlOgorCisJJCBzbm1wc2V0IC12IDJjIC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzdGVtLnN5c0xvY2F0aW9uLjAgcyAicmlnaHQgaGVyZSIKKyAgICAgICAgRXJyb3IgaW4gcGFja2V0LgorICAgICAgICBSZWFzb246IG5vdFdyaXRhYmxlCisKKyAgVGhlIFNOTVB2MSBlcnJvciAnbm9TdWNoTmFtZScgYWN0dWFsbHkgbWVhbnM6CisKKwkiWW91IGNhbid0IGRvIHRoYXQgdG8gdGhpcyB2YXJpYWJsZSIKKworICBUaGlzIG1pZ2h0IGJlIGJlY2F1c2UgdGhlIHZhcmlhYmxlIGRvZXNuJ3QgZXhpc3QsIGl0IGRvZXMgZXhpc3QgYnV0CisgIHlvdSBkb24ndCBoYXZlIGFjY2VzcyB0byBpdCAoYnV0IHNvbWVvbmUgZWxzZSBtYXkgZG8pLCBvciBpdCBleGlzdHMKKyAgYnV0IHlvdSBjYW4ndCBwZXJmb3JtIHRoYXQgcGFydGljdWxhciBvcGVyYXRpb24gKGkuZS4gY2hhbmdpbmcgaXQpLgorICAgIFNpbWlsYXJseSwgdGhlIFNOTVB2MiBlcnJvciAnbm90V3JpdGFibGUnIG1lYW5zICJub3Qgd3JpdGFibGUgaW4KKyAgdGhpcyBwYXJ0aWN1bGFyIGNhc2UiIHJhdGhlciB0aGFuICJub3Qgd3JpdGFibGUgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMiLgorCisgIElmIHlvdSBhcmUgc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgd3JpdGFibGUgKGFuZCBoYXMgYmVlbiBpbXBsZW1lbnRlZAorICBhcyBzdWNoKSwgdGhlbiB5b3UgcHJvYmFibHkgbmVlZCB0byBsb29rIGF0IHRoZSBhZ2VudCBhY2Nlc3MgY29udHJvbC4KKyAgU2VlIHRoZSBBR0VOVCBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKworCitJIHN0aWxsIGNhbid0IGNoYW5nZSBzeXNMb2NhdGlvbiwgdGhvdWdoIHRoZSBhY2Nlc3Mgc2V0dGluZ3MgYWxsb3cgaXQuICBXaHkgbm90PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgT25lIG90aGVyIHBvc3NpYmlsaXR5IGZvciB0aGUgJ3N5c0xvY2F0aW9uJyBhbmQgJ3N5c0NvbnRhY3QnIG9iamVjdHMsCisgIGlzIHRoYXQgeW91J3ZlIGdvdCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHRoZSAnc25tcGQuY29uZicgZmlsZSB3aGljaAorICBhbHJlYWR5IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgdGhlcmUuCisKKyAgICBFYXJsaWVyIHZlcnNpb25zIG9mIHRoZSBhZ2VudCB3b3VsZCBhbGxvdyB5b3UgdG8gd3JpdGUgdG8gdGhlc2Ugb2JqZWN0cywKKyAgYnV0IHRoZSBuZXcgdmFsdWUgd291bGQgYmUgZm9yZ290dGVuIHRoZSBuZXh0IHRpbWUgdGhlIGFnZW50IHdhcyByZS1zdGFydGVkLgorICBNb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgYWdlbnQgcmVqZWN0IHN1Y2ggd3JpdGUgcmVxdWVzdHMgaWYgdGhlcmUncyBhCisgIHZhbHVlIHNldCB2aWEgdGhlIGNvbmZpZyBmaWxlLiAgIElmIHRoZXJlIGlzbid0IHN1Y2ggYSBjb25maWcgc2V0dGluZywgdGhlbgorICB0aGUgd3JpdGUgcmVxdWVzdCB3aWxsIHN1Y2NlZWQgKGFzc3VtaW5nIHRoZSBhY2Nlc3Mgc2V0dGluZ3MgYWxsb3cgaXQpLCBhbmQKKyAgdGhlIG5ldyB2YWx1ZSB3aWxsIGJlIHJldGFpbmVkIHRoZSBuZXh0IHRpbWUgdGhlIGFnZW50IHJlc3RhcnRzLgorCisKKworPGEgbmFtZT0iSV9nZXRfYW5fZXJyb3Jfd2hlbl90cnlpbmdfdG9fc2V0X2FfbmVnYXRpdmVfdmFsdWVfX193aHlfIj4KK0kgZ2V0IGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHNldCBhIG5lZ2F0aXZlIHZhbHVlIC0gd2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgYSBkaWZmZXJlbnQgcHJvYmxlbS4gIFdoYXQncyBoYXBwZW5pbmcgaGVyZSBpcyB0aGF0IHRoZQorICByb3V0aW5lIHRoYXQgcGFyc2VzIHRoZSBhcmd1bWVudHMgdG8gdGhlICdzbm1wc2V0JyBjb21tYW5kIGlzIHNlZWluZworICB0aGUgJy0nIG9mIHRoZSBuZXcgdmFsdWUsIGFuZCB0cmVhdGluZyBpdCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb24uCisgIFRoaXMgbm9ybWFsbHkgZ2VuZXJhdGVzIGFuIGVycm9yIChzaW5jZSBkaWdpdHMgcHJvYmFibHkgYXJlbid0IHZhbGlkCisgIGNvbW1hbmQgbGluZSBvcHRpb24pLgorCisgICAgVGhlIGVhc2llc3Qgd2F5IHRvIHNvbHZlIHRoaXMgaXMgaW5jbHVkZSB0aGUgImVuZC1vZi1vcHRpb24iCisgIGluZGljYXRvciAnLS0nIGluIHRoZSBjb21tYW5kIGxpbmUsIHNvbWV3aGVyZSBiZWZvcmUgdGhlIG5ldyB2YWx1ZQorICAoYnV0IGFmdGVyIGFsbCBvZiB0aGUgb3B0aW9ucywgb2J2aW91c2x5KS4gIEZvciBleGFtcGxlOgorCisJc25tcHNldCAtdiAyYyAtYyBwdWJsaWMgbG9jYWxob3N0IC0tIHZlcnNpb25SZXN0YXJ0QWdlbnQuMCBpIC0xCisKKyAgKFRoaXMgd2lsbCBhbHNvIGZhaWwsIHNpbmNlIC0xIGlzbid0IGFuIGFjY2VwdGFibGUgdmFsdWUgZm9yIHRoaXMKKyAgb2JqZWN0LCBidXQgaXQgd2lsbCBiZSByZWplY3RlZCBieSB0aGUgYWdlbnQsIHJhdGhlciB0aGFuIGNvbmZ1c2luZworICB0aGUgc25tcHNldCBjb21tYW5kISkKKworCisKKzxhIG5hbWU9IklfZ2V0X2FuX2Vycm9yX3doZW5fdHJ5aW5nX3RvX2dldF9hX3N0cmluZ19pbmRleGVkX3RhYmxlX3ZhbHVlX19fd2h5XyI+CitJIGdldCBhbiBlcnJvciB3aGVuIHRyeWluZyB0byBnZXQgYSBzdHJpbmctaW5kZXhlZCB0YWJsZSB2YWx1ZSAtIHdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byB0aGUgc2hlbGwgc3dhbGxvd2luZyB0aGUgcXVvdGVzLCBiZWZvcmUKKyAgdGhleSBldmVyIGdldCB0byB0aGUgU05NUCBjb21tYW5kJ3MgT0lEIHBhcnNlci4gIFRyeSBlc2NhcGluZyB0aGVtOgorCisJc25tcGdldCAuLi4uLiAgIHZhY21TZWN1cml0eU1vZGVsLjAuXCJ3ZXNcIgorICBvcglzbm1wZ2V0IC4uLi4uICAndmFjbVNlY3VyaXR5TW9kZWwuMC4id2VzIicKKworCisgIAorPGEgbmFtZT0iSG93X2RvX0lfc2VuZF90cmFwc19hbmRfbm90aWZpY2F0aW9uc18iPgorSG93IGRvIEkgc2VuZCB0cmFwcyBhbmQgbm90aWZpY2F0aW9ucz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVHJhcHMgYW5kIG5vdGlmaWNhdGlvbnMgY2FuIGJlIHNlbnQgdXNpbmcgdGhlIGNvbW1hbmQgJ3NubXB0cmFwJy4KKyAgVGhlIGZvbGxvd2luZyBleGFtcGxlcyBnZW5lcmF0ZSB0aGUgZ2VuZXJpYyB0cmFwICdjb2xkU3RhcnQnIGFuZCBhCisgIChkdW1teSkgZW50ZXJwcmlzZSBzcGVjaWZpYyB0cmFwICc5OScgcmVzcGVjdGl2ZWx5OgorCisJc25tcHRyYXAgLXYgMSAtYyBwdWJsaWMgbG9jYWxob3N0ICIiICIiIDAgMCAgIiIKKwlzbm1wdHJhcCAtdiAxIC1jIHB1YmxpYyBsb2NhbGhvc3QgIiIgIiIgNiA5OSAiIgorICAKKyAgVGhlIGVtcHR5IHBhcmFtZXRlcnMgIiIgd2lsbCB1c2Ugc3VpdGFibGUgZGVmYXVsdHMgZm9yIHRoZSByZWxldmFudCAKKyAgdmFsdWVzIChlbnRlcnByaXNlIE9JRCwgYWRkcmVzcyBvZiBzZW5kZXIgYW5kIGN1cnJlbnQgc3lzdXB0aW1lKS4KKworICAgIEFuIFNOTVB2MiBvciBTTk1QdjMgbm90aWZpY2F0aW9uIChlaXRoZXIgdHJhcCBvciBpbmZvcm0pIHRha2VzCisgIHRoZSBPSUQgb2YgdGhlIHRyYXAgdG8gc2VuZDoKKworCXNubXB0cmFwIC12IDJjIC1jIHB1YmxpYyBsb2NhbGhvc3QgIiIgVUNELVNOTVAtTUlCOjp1Y2RTdGFydAorCXNubXB0cmFwIC12IDJjIC1jIHB1YmxpYyBsb2NhbGhvc3QgIiIgLjEuMy42LjEuNC4xLjIwMjEuMjUxLjEKKworICAoVGhlc2UgdHdvIGFyZSBlcXVpdmFsZW50IHdheXMgb2Ygc3BlY2lmeWluZyB0aGUgc2FtZSB0cmFwKS4KKworICBBbnkgb2YgdGhlc2UgY29tbWFuZHMgY2FuIGJlIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHZhcmJpbmRzLAorICB1c2luZyB0aGUgc2FtZSAoT0lEL3R5cGUvdmFsdWUpIHN5bnRheCBhcyBmb3IgJ3NubXBzZXQnOgorCisJc25tcHRyYXAgLXYgMmMgLWMgcHVibGljIGxvY2FsaG9zdCAiIiB1Y2RTdGFydCBzeXNDb250YWN0LjAgcyAiRGF2ZSIKKworICBHZW5lcmF0aW5nIHRyYXBzIGZyb20gd2l0aGluIHRoZSBhZ2VudCBpcyBjb3ZlcmVkIGluIHRoZSBBR0VOVCBhbmQKKyAgQ09ESU5HIHNlY3Rpb25zLgorCisgIFlvdSBzaG91bGQgYWxzbyByZWFkIHRoZSBzbm1wdHJhcCB0dXRvcmlhbCBhdAorCWh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvY29tbWFuZHMvc25tcHRyYXAuaHRtbAorICB3aGljaCB3aWxsIGhlbHAgeW91IHVuZGVyc3RhbmQgZXZlcnl0aGluZyB5b3UgbmVlZCB0byBrbm93IGFib3V0IHRyYXBzLgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfaGFuZGxlX3RyYXBzX2FuZF9ub3RpZmljYXRpb25zXyI+CitIb3cgZG8gSSBoYW5kbGUgdHJhcHMgYW5kIG5vdGlmaWNhdGlvbnM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEhhbmRsaW5nIHJlY2VpdmVkIHRyYXBzIGlzIGRvbmUgdXNpbmcgdGhlIHRvb2wgJ3NubXB0cmFwZCcuCisgIFRoaXMgY2FuIGxvZyB0aGVzZSB0cmFwcyB2aWEgdGhlIHN5c2xvZyBtZWNoYW5pc206CisKKwlzbm1wdHJhcGQgLXMgLWw3CShsb2cgdG8gJ0xPQ0FMNycpCisKKyAgcHJpbnRlZCB0byBzdGFuZGFyZCBvdXRwdXQKKworCXNubXB0cmFwZCAtZiAtUAorCisgIG9yIHBhc3MgdGhlbSB0byBhbiBleHRlcm5hbCBjb21tYW5kLiAgVGhpcyBsYXN0IGFwcHJvYWNoIHVzZXMKKyAgYSAndHJhcGhhbmRsZScgZGlyZWN0aXZlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgJ3NubXB0cmFwZC5jb25mJy4KKyAgQSB0eXBpY2FsIGZpbGUgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZToKKworCXRyYXBoYW5kbGUgLjEuMy42LjEuNi4zLjEuNS4xICAgICAgIHBhZ2VfbWUgdXAKKwl0cmFwaGFuZGxlIC4xLjMuNi4xLjQuMS4yMDIxLjI1MS4xICBwYWdlX21lIHVwCisJdHJhcGhhbmRsZSAuMS4zLjYuMS40LjEuMjAyMS4yNTEuMiAgcGFnZV9tZSBkb3duCisJdHJhcGhhbmRsZSBkZWZhdWx0ICAgICAgICAgICAgICAgICAgbG9nX2l0CisKKyAgd2hlcmUgJ3BhZ2VfbWUnIGFuZCAnbG9nX2l0JyBhcmUgdGhlIGNvbW1hbmQgdG8gYmUgcnVuLiAgKFlvdSBwcm9iYWJseQorICBuZWVkIHRvIHNwZWNpZnkgZnVsbCBwYXRobmFtZXMsIHRvIGVuc3VyZSB0aGF0IHRoZSBjb21tYW5kcyB3aWxsIGJlCisgIGZvdW5kLiAgVGhleSdyZSBqdXN0IHNob3J0IGhlcmUgZm9yIHJlYWRhYmlsaXR5KS4KKworICBOb3RlIHRoYXQgdGhlIGZpcnN0IGVudHJ5IHVzZXMgdGhlIE9JRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBTTk1QdjEKKyAgJ2NvbGRTdGFydCcgdHJhcC4gIFNlZSB0aGUgY28tZXhpc3RlbmNlIFJGQyAoUkZDIDI1NzYpIGZvciBkZXRhaWxzCisgIG9mIG1hcHBpbmcgU05NUHYxIHRyYXBzIHRvIFNOTVB2MiBPSURzLgorCisgIFRoZXJlJ3MgYSB0dXRvcmlhbCB3aXRoIG1vcmUgZGV0YWlscyBvbiB0aGUgd2ViIHNpdGUgYXQKKwlodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L2NvbW1hbmRzL3NubXB0cmFwLmh0bWwKKyAgCisKKworPGEgbmFtZT0iTXlfdHJhcGhhbmRsZXJfc2NyaXB0X2RvZXNuX3Rfd29ya193aGVuX3J1bl9saWtlX3RoaXNfX193aHlfbm90XyI+CitNeSB0cmFwaGFuZGxlciBzY3JpcHQgZG9lc24ndCB3b3JrIHdoZW4gcnVuIGxpa2UgdGhpcyAtIHdoeSBub3Q/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIElmIGEgdHJhcGhhbmRsZXIgc2NyaXB0IHdvcmtzIGZpbmUgd2hlbiBydW4gbWFudWFsbHkgZnJvbSB0aGUKKyAgY29tbWFuZCBsaW5lLCBidXQgZ2VuZXJhdGVzIGFuIGVycm9yIHdoZW4gdHJpZ2dlcmVkIGJ5IGFuIGluY29taW5nCisgIG5vdGlmaWNhdGlvbiwgdGhlbiB0aGlzIGlzIHByb2JhYmx5IGRvd24gdG8gb25lIG9mIHR3byBsaWtlbHkgY2F1c2VzLgorCisgICAgRmlyc3RseSwgdGhlIGludGVyYWN0aXZlIHNoZWxsIGVudmlyb25tZW50IG1heSBub3QgYmUgcHJlY2lzZWx5CisgIHRoZSBzYW1lIGFzIHRoYXQgZm9yIHByb2dyYW1zIGV4ZWN1dGVkIGJ5IHRoZSBzbm1wdHJhcGQgZGFlbW9uLgorICBJbiBwYXJ0aWN1bGFyLCBpdCdzIHF1aXRlIHBvc3NpYmxlIHRoYXQgdGhlIFBBVEggZW52aXJvbm1lbnRhbAorICB2YXJpYWJsZSBtYXkgbm90IGluY2x1ZGUgYWxsIHRoZSBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIHRoYXQgYXJlCisgIGNvbW1vbmx5IHNldCB1cCBmb3IgYSBwZXJzb25hbCBsb2dpbiBjb25maWd1cmF0aW9uLiAgVG8gYXZvaWQgdGhpcworICBwcm9ibGVtIChwYXJ0aWN1bGFybHkgZm9yIHRyYXBoYW5kbGVyIHNoZWxsIHNjcmlwdHMpLCBpdCdzIHdvcnRoCisgIGdpdmluZyB0aGUgZnVsbCBwYXRoIHRvIGFsbCBwcm9ncmFtcyB1c2VkIHdpdGhpbiB0aGUgc2NyaXB0LgorCisgICAgU2Vjb25kbHksIHRoZSBzbm1wdHJhcGQgZGFlbW9uIG1heSBub3QgYWx3YXlzIHJlY29nbmlzZSB0aGUKKyAgYXBwcm9wcmlhdGUgaW50ZXJwcmV0ZXIgdG8gdXNlIGZvciBhIHBhcnRpY3VsYXIgdHJhcCBoYW5kbGVyLgorICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVuIHlvdSBjYW4gc3BlY2lmeSB0aGlzIGludGVycHJldGVyCisgIGV4cGxpY2l0bHkgYXMgcGFydCBvZiB0aGUgdHJhcCBoYW5kbGUgZGlyZWN0aXZlOgorCisJdHJhcGhhbmRsZSBkZWZhdWx0IC91c3IvYmluL3BlcmwgL3Vzci9sb2NhbC9iaW4vbG9nX2l0CisKKyAgTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwgaXQncyBhbG1vc3QgY2VydGFpbiB0aGF0IHlvdSdsbCBhbHNvCisgIG5lZWQgdG8gZ2l2ZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0cmFwaGFuZGxlIHNjcmlwdCAoYXMgc2hvd24pCisKKworCis8YSBuYW1lPSJUaGVfdWNkU2h1dGRvd25fdHJhcF9PSURfcmVjZWl2ZWRfYnlfbXlfbWFuYWdlcl9pc193cm9uZ19fV2h5XyI+CitUaGUgdWNkU2h1dGRvd24gdHJhcCBPSUQgcmVjZWl2ZWQgYnkgbXkgbWFuYWdlciBpcyB3cm9uZy4gV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyBkdWUgdG8gdGhlIHdheSB0aGF0IHRyYXBzIGFyZSBjb252ZXJ0ZWQgYmV0d2VlbgorICBTTk1QdjEgYW5kIFNOTVB2MiBmb3JtYXRzLiAgVGhlIGFsZ29yaXRobSB1c2VkIGZvciBjb252ZXJ0aW5nCisgIGZyb20gYW4gU05NUHYxIGVudGVycHJpc2Utc3BlY2lmaWMgdHJhcCBudW1iZXIsIHRvIGFuIFNOTVB2MgorICB0cmFwIE9JRCByZXN1bHRzIGluIGEgcGVudWx0aW1hdGUgJzAnIHN1YmlkZW50aWZpZXIsIGJlZm9yZQorICB0aGUgdHJhcCBudW1iZXIgaXRzZWxmLiAgVGhlIGRlZmluaXRpb24gb2YgdGhlIHRyYXAgb2JqZWN0cworICBpbiB0aGUgVUNELVNOTVAtTUlCIGZpbGUgZG9lcyBub3QgaW5jbHVkZSB0aGlzIHN1YmlkZW50aWZpZXIuCisKKyAgICBJbiBkdWUgY291cnNlLCB0aGUgaW50ZW50aW9uIGlzIHRvIGRlZmluZSBhIG5ldyBzZXQgb2YgTUlCCisgIG9iamVjdHMsIHVuZGVyIHRoZSAnbmV0LXNubXAnIGVudGVycHJpc2UgdHJlZS4gIFRoaXMgd2lsbAorICBpbmNsdWRlIG5ldyB0cmFwIE9JRHMsIHdoaWNoIHdpbGwgYmUgZGVzaWduZWQgc3VjaCB0aGF0CisgIHRoaXMgcHJvYmxlbSBkb2VzIG5vdCBhcmlzZSBpbiB0aGUgZnV0dXJlLgorCisKKworPGEgbmFtZT0iV2h5X2RvZXNfc25tcHRyYXBkX2NvbXBsYWluX2Fib3V0X0FnZW50WF8iPgorV2h5IGRvZXMgc25tcHRyYXBkIGNvbXBsYWluIGFib3V0IEFnZW50WD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFN0YXJ0aW5nIGZyb20gdGhlIHY1IHJlbGVhc2UsIHRoZSB0cmFwIGhhbmRsaW5nIGRhZW1vbiBoYXMKKyAgaW1wbGVtZW50ZWQgdGhlIG5vdGlmaWNhdGlvbiBsb2dnaW5nIGFzcGVjdHMgb2YgdGhlIE5PVElGSUNBVElPTi1NSUIKKyAgKFJGQyAzMDE0KS4gIFRoaXMgaXMgaGFuZGxlZCBieSB0aGUgdHJhcCBoYW5kbGVyIGRhZW1vbiByZWdpc3RlcmluZworICBhcyBhbiBBZ2VudFggc3ViYWdlbnQsIHRvIHN1cHBseSB0aGlzIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLgorCisgICAgSWYgdGhlcmUgaXMgbm8gQWdlbnRYIG1hc3RlciBhZ2VudCBhdmFpbGFibGUsIHRoaXMgcmVnaXN0cmF0aW9uCisgIGZhaWxzLCBnZW5lcmF0aW5nIHRoZSB3YXJuaW5nIGFib3V0ICJmYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgYWdlbnR4CisgIG1hc3RlciIuICBUaGlzIHdhcm5pbmcgb25seSBhcHBlYXJzIGJldHdlZW4gdmVyc2lvbiA1LjAgYW5kIDUuMC40CisgIChpbiA1LjAuNCBhbmQgYWZ0ZXIgdGhlIHdhcm5pbmcgd2FzIHNpbGVuY2VkKS4gIFRoaXMgZmFpbHVyZSBkb2VzCisgIG5vdCBhZmZlY3QgdGhlIG1haW4gb3BlcmF0aW9uIG9mIHRoZSB0cmFwIGhhbmRsZXIuICBJdCBzaW1wbHkgbWVhbnMKKyAgdGhhdCB0aGUgbnNtTG9nIGluZm9ybWF0aW9uIHdvbid0IGJlIGF2YWlsYWJsZSBmb3IgcXVlcnkgdmlhIFNOTVAuCisKKyAgICBCYXNpY2FsbHksIHRoaXMgaXMgYSB3YXJuaW5nIHRoYXQgY2FuIHNhZmVseSBiZSBpZ25vcmVkLgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfdXNlX1NOTVB2X18iPgorSG93IGRvIEkgdXNlIFNOTVB2Mz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBzaW1wbGVzdCBmb3JtIG9mIFNOTVB2MyByZXF1ZXN0ICh1bmF1dGhlbnRpY2F0ZWQsIHVuZW5jcnlwdGVkKQorICB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZToKKworCXNubXBnZXQgLXYgMyAtbCBub0F1dGhOb1ByaXYgbG9jYWxob3N0IHN5c1VwVGltZS4wCisKKyAgICBBbiBhdXRoZW50aWNhdGVkIHJlcXVlc3Qgd291bGQgc3BlY2lmeSBhIHVzZXJuYW1lIGFuZCBwYXNzIHBocmFzZToKKworCXNubXBnZXQgLXYgMyAtbCBhdXRoTm9Qcml2IC11IGRhdmUgLUEgIk9wZW4gdGhlIERvb3IiCisJCQkJbG9jYWxob3N0IHN5c1VwVGltZS4wCisKKyAgICBBIGZ1bGx5IHNlY3VyZSByZXF1ZXN0IHdvdWxkIGFsc28gc3BlY2lmeSB0aGUgcHJpdmFjeSBwYXNzIHBocmFzZToKKworCXNubXBnZXQgLXYgMyAtbCBhdXRoUHJpdiAtdSBkYXZlIC1BICJPcGVuIHRoZSBEb29yIgorCQkJLVggIkJldCB5b3UgY2FuJ3Qgc2VlIG1lIiAgbG9jYWxob3N0IHN5c1VwVGltZS4wCisKKyAgSW4gcHJhY3Rpc2UsIG1vc3Qgb2YgdGhlc2Ugd291bGQgcHJvYmFibHkgYmUgc2V0IHZpYSBjb25maWd1cmF0aW9uCisgIGRpcmVjdGl2ZXMgaW4gYSBwZXJzb25hbCAkSE9NRS8uc25tcC9zbm1wLmNvbmYgZmlsZSAobm90ZSwgKm5vdCogdGhlCisgIGFnZW50J3Mgc25tcGQuY29uZiBmaWxlKS4gIFRoZSBlcXVpdmFsZW50IHNldHRpbmdzIGZvciB0aGUgdGhpcmQKKyAgZXhhbXBsZSB3b3VsZCBiZToKKworCWRlZlNlY3VyaXR5TmFtZQkJZGF2ZQorCWRlZlNlY3VyaXR5TGV2ZWwJYXV0aFByaXYKKwlkZWZBdXRoUGFzc3BocmFzZQkiT3BlbiB0aGUgRG9vciIKKwlkZWZQcml2UGFzc3BocmFzZQkiQmV0IHlvdSBjYW4ndCBzZWUgbWUiCisKKyAgSWYgdGhlIEF1dGhQYXNzcGhyYXNlIGFuZCB0aGUgUHJpdlBhc3NwaHJhc2UgYXJlIHRoZSBzYW1lLCB0aGVuIHlvdQorICBjYW4gdXNlIHRoZSBzZXR0aW5nCisJCWRlZlBhc3NwaHJhc2UJIk9wZW4gdGhlIERvb3IgYW5kIHNlZSBtZSIKKwkJCQkJCQlpbnN0ZWFkCisKKyAgRm9yIGhvdyB0byBjb25maWd1cmUgdGhlIGFnZW50IHRvIHJlc3BvbmQgdG8gU05NUHYzIHJlcXVlc3RzLCBzZWUKKyAgdGhlIEFHRU5UIHNlY3Rpb24uCisgCisKKworPGEgbmFtZT0iSG93X2JpZ19jYW5fYW5fU05NUF9yZXF1ZXN0X19vcl9yZXBseV9fYmVfIj4KK0hvdyBiaWcgY2FuIGFuIFNOTVAgcmVxdWVzdCAob3IgcmVwbHkpIGJlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBwcm90b2NvbCBkZWZpbml0aW9uIHNwZWNpZmllcyBhICJtaW5pbXVtIG1heGltdW0iIHBhY2tldCBzaXplCisgICg0ODQgYnl0ZXMgZm9yIFVEUCksIHdoaWNoIGFsbCBzeXN0ZW1zIG11c3Qgc3VwcG9ydCwgYnV0IGRvZXMgbm90CisgIGF0dGVtcHQgdG8gZGVmaW5lIGFuIHVwcGVyIGJvdW5kIGZvciB0aGlzIG1heGltdW0gc2l6ZS4gIFRoaXMgaXMgbGVmdAorICB0byBlYWNoIGluZGl2aWR1YWwgaW1wbGVtZW50YXRpb24uCisKKyAgICBUaGUgVUNEIHNvZnR3YXJlIHVzZXMgYSBmaXhlZCBzaXplIGJ1ZmZlciBvZiAxNDcyIGJ5dGVzIHRvIGhvbGQgdGhlCisgIGVuY29kZWQgcGFja2V0LCBzbyBhbGwgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBtdXN0IGZpdCB3aXRoaW4gdGhpcy4KKyAgVW5mb3J0dW5hdGVseSwgaXQncyBub3QgcG9zc2libGUgdG8gcHJlZGljdCBob3cgbWFueSB2YXJiaW5kcyB0aGlzCisgIGNvcnJlc3BvbmRzIHRvLCBzaW5jZSBpdCBkZXBlbmRzIG9uIHRoZSB0eXBlIGFuZCBhY3R1YWwgdmFsdWVzIGJlaW5nCisgIHNlbnQsIGFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgT0lEcy4KKworICAgIEFzIGEgcnVsZSBvZiB0aHVtYiwgc2VuZGluZyA0MDAgaW50ZWdlci12YWx1ZWQgdmFyYmluZHMgc2VlbXMgdG8KKyAgd29yayBPSywgd2hpbGUgMzAwIHN0cmluZy12YWx1ZWQgdmFyYmluZHMgdHJpZ2dlcnMgYW4gb3ZlcnJ1bi4KKworICAgIFRoZSBOZXQtU05NUCByZWxlYXNlcyBoYW5kbGUgcGFja2V0IGJ1ZmZlcnMgcmF0aGVyIGRpZmZlcmVudGx5LAorICBhbmQgYXJlIG5vdCBzdWJqZWN0IHRvIHRoZSBzYW1lIGZpeGVkIHJlc3RyaWN0aW9ucy4KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9tb25pdG9yX215X3N5c3RlbXNfX2Rpc2tfX21lbW9yeV9fZXRjX18iPgorSG93IGNhbiBJIG1vbml0b3IgbXkgc3lzdGVtcyAoZGlzaywgbWVtb3J5LCBldGMpPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBJbiBnZW5lcmFsLCB0aGUgTmV0LVNOTVAgc3VpdGUgY29uc2lzdHMgb2YgcmVsYXRpdmVseSBsb3ctbGV2ZWwKKyAgdG9vbHMsIGFuZCB0aGVyZSBpcyBub3RoaW5nIGluY2x1ZGVkIHRoYXQgaXMgZGVzaWduZWQgZm9yIGhpZ2gtbGV2ZWwsCisgIGxvbmctdGVybSBtb25pdG9yaW5nIG9mIHRyZW5kcyBpbiBuZXR3b3JrIHRyYWZmaWMsIGRpc2sgb3IgbWVtb3J5CisgIHVzYWdlLCBldGMuCisKKyAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcGFja2FnZXMgYXZhaWxhYmxlIHRoYXQgYXJlIGRlc2lnbmVkIGZvciB0aGlzCisgIHB1cnBvc2UuICBUd28gb2YgdGhlIG1vc3Qgd2lkZWx5IHVzZWQgYXJlIE1SVEcgKGh0dHA6Ly93d3cubXJ0Zy5vcmcvKQorICBhbmQgQ3JpY2tldCAoaHR0cDovL2NyaWNrZXQuc291cmNlZm9yZ2UubmV0LykuICBUaGVyZSBhcmUgZGV0YWlscyBvZgorICBob3cgdG8gc2V0IHVwIENyaWNrZXQgdG8gbW9uaXRvciBzb21lIG9mIHRoZSBVQ0QgZXh0ZW5zaW9ucyBhdAorICBodHRwOi8vd3d3LmFmbi5vcmcvfmphbS9zb2Z0d2FyZS9jcmlja2V0LworCisgICAgIFdlIGhhdmUgYWxzbyBzZXQgdXAgYSBwYWdlIHRoYXQgZGVzY3JpYmVzIGluIGRldGFpbCBob3cgTVJURworICBjYW4gYmUgc2V0IHVwIHRvIG1vbml0b3IgZGlzaywgbWVtb3J5IGFuZCBjcHUgYWN0aXZpdHkgYXQKKyAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS9tcnRnL2luZGV4Lmh0bWwKKworICAgIFRoZXJlIGlzIGFsc28gYSB3ZWItYmFzZWQgbmV0d29yayBjb25maWd1cmF0aW9uIHN5c3RlbSAiTmV0LVBvbGljeSIsCisgIGJhc2VkIHVwb24gU05NUC4gIFRoaXMgaXMgbm90IHN0cmljdGx5IGNvbm5lY3RlZCB0byB0aGUgTmV0LVNOTVAgcHJvamVjdCwKKyAgYnV0IGEgbnVtYmVyIG9mIHRoZSBjb3JlIGRldmVsb3BlcnMgYXJlIGFsc28gaW52b2x2ZWQgd2l0aCB0aGF0IHN5c3RlbS4KKyAgU2VlIGh0dHA6Ly9uZXQtcG9saWN5LnNvdXJjZWZvcmdlLm5ldCBmb3IgbW9yZSBkZXRhaWxzLgorCisKKworPGEgbmFtZT0iQXBwbGljYXRpb25zX2NvbXBsYWluX2Fib3V0X2VudHJpZXNfaW5feW91cl9leGFtcGxlX19zbm1wX2NvbmZfX2ZpbGVfX19XaHlfIj4KK0FwcGxpY2F0aW9ucyBjb21wbGFpbiBhYm91dCBlbnRyaWVzIGluIHlvdXIgZXhhbXBsZSAnc25tcC5jb25mJyBmaWxlLiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSAnRVhBTVBMRS5jb25mJyBpcyBkZXNpZ25lZCBhcyBhIGNvbmZpZworICBmb3IgdGhlIGFnZW50LCBhbmQgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyAnc25tcGQuY29uZicgKG5vdGUgdGhlICdkJykuCisgIFRoZSBmaWxlICdzbm1wLmNvbmYnIGlzIGludGVuZGVkIGZvciBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywKKyAgYXBwbGljYWJsZSB0byBhbGwgYXBwbGljYXRpb25zICh2aWEgdGhlIFNOTVAgbGlicmFyeSkuCisgICAgUmVuYW1lIChvciBtZXJnZSkgdGhlICdzbm1wLmNvbmYnIGZpbGUgdG8gJ3NubXBkLmNvbmYnLCBhbmQgdGhpcyBzaG91bGQKKyAgZml4IHRoZSBwcm9ibGVtLgorICAgIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBleGFtcGxlIHNubXAuY29uZiBzaGlwcGVkIHdpdGggdGhlIHN0YW5kYXJkCisgIGRpc3RyaWJ1dGlvbi4KKworCisKKzxhIG5hbWU9Ik9LX193aGF0X3Nob3VsZF9JX3B1dF9pbl9zbm1wX2NvbmZfIj4KK09LLCB3aGF0IHNob3VsZCBJIHB1dCBpbiBzbm1wLmNvbmY/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIHVzZWQgdG8gc2V0IGNvbW1vbiBjb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgbW9zdCBvZiB0aGUKKyAgYXBwbGljYXRpb25zLCB0byBhdm9pZCBoYXZpbmcgdG8gc3BlY2lmeSB0aGVtIGV2ZXJ5IHRpbWUuICBFeGFtcGxlcworICBpbmNsdWRlIHRoZSBTTk1QdjMgc2V0dGluZ3MgbWVudGlvbmVkIGFib3ZlLCBkZWZhdWx0cyBmb3Igd2hpY2ggTUlCcworICB0byBsb2FkIGFuZCB3aGVyZSBmcm9tLCBhbmQgdGhlIGRlZmF1bHQgU05NUCB2ZXJzaW9uLCBwb3J0IGFuZAorICAoaWYgYXBwcm9wcmlhdGUpIHRoZSBjb21tdW5pdHkgc3RyaW5nIHRvIHVzZS4KKworICAgIFNvbWUgb2YgdGhlc2UgKHN1Y2ggYXMgdGhlIE1JQiBmaWxlIGxvY2F0aW9uKSwgbWlnaHQgYmVsb25nIGluIGEKKyAgc2hhcmVkIHNubXAuY29uZiBmaWxlICh0eXBpY2FsbHkgL3Vzci9sb2NhbC9zaGFyZS9zbm1wL3NubXAuY29uZiBvcgorICAvZXRjL3NubXAvc25tcC5jb25mKSB0byBhcHBseSB0byBhbGwgdXNlcnMgb2YgdGhlIHN5c3RlbS4gIE90aGVycworICAocGFydGljdWxhcmx5IHRoZSBTTk1QdjMgc2VjdXJpdHkgc2V0dGluZ3MpLCBhcmUgbW9yZSBsaWtlbHkgdG8gcmVmZXIKKyAgdG8gYSBwYXJ0aWN1bGFyIHVzZXIsIGFuZCBzaG91bGQgZ28gaW4gYSBwZXJzb25hbCBzbm1wLmNvbmYgZmlsZQorICAodHlwaWNhbGx5ICRIT01FLy5zbm1wL3NubXAuY29uZikuCisKKyAgICBOb3RlIHRoYXQgdGhlIE5ldC1TTk1QIHBhY2thZ2UgZG9lcyBub3QgY29tZSB3aXRoIGFuIGV4YW1wbGUgc25tcC5jb25mCisgIGZpbGUuICBTZWUgJ3NubXBnZXQgLUgnIGFuZC9vciB0aGUgc25tcC5jb25mKDUpIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSAic25tcGNvbmYiIGNvbW1hbmQgdG8gaGVscCB5b3UgZ2VuZXJhdGUgeW91cgorICBzbm1wLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlIChqdXN0IHJ1biBpdCBhbmQgYW5zd2VyIGl0cyBxdWVzdGlvbnMpLgorCisKKworPGEgbmFtZT0iUEVSTCI+CitQRVJMCis9PT09CisKKzxhIG5hbWU9IldoZXJlX2Nhbl9JX2dldF90aGVfcGVybF9TTk1QX3BhY2thZ2VfIj4KK1doZXJlIGNhbiBJIGdldCB0aGUgcGVybCBTTk1QIHBhY2thZ2U/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgSm9lIE1hcnpvdCdzIGV4Y2VsbGVudCBwZXJsIFNOTVAgbW9kdWxlLCB3aGljaCByZXF1aXJlcyB0aGUgdWNkLXNubXAKKyAgbGlicmFyeSwgaXMgbm93IGluY2x1ZGVkIGluIHRoZSB1Y2Qtc25tcCBzb3VyY2UgcmVsZWFzZS4gIEl0J3MKKyAgbG9jYXRlZCBpbiB0aGUgcGVybC9TTk1QIHN1YmRpcmVjdG9yeSBvZiB0aGUgdWNkLXNubXAgc291cmNlIHRyZWUuCisKKyAgSXQgY2FuIGFsc28gYmUgZm91bmQgYXQgYW55IENvbXByZWhlbnNpdmUgUGVybCBBcmNoaXZlIE5ldHdvcmsKKyAgKENQQU4pIHNpdGUgbWlycm9yIGluIG1vZHVsZXMvYnktbW9kdWxlL1NOTVAuICBUbyBmaW5kIHRoZSBDUEFOIHNpdGUKKyAgbmVhcmVzdCB5b3UsIHBsZWFzZSBzZWUgaHR0cDovL3d3dy5jcGFuLm9yZy9TSVRFUy5odG1sLgorCisgIFdpdGggdGhlIHY1IHJlbGVhc2Ugb2YgdGhlIE5ldC1TTk1QIHN1aXRlLCB0aGlzIGlzIG5vdyBhY2NvbXBhbmllZCBieQorICBhIG51bWJlciBvZiBwZXJsIG1vZHVsZXMgZ3JvdXBlZCB0b2dldGhlciB1bmRlciB0aGUgTmV0U05NUCBuYW1lc3BhY2UuCisKKyAgQ29uc3VsdCB0aGUgUkVBRE1FIGZpbGUgaW4gdGhlIFNOTVAgcGVybCBtb2R1bGUgZGlzdHJpYnV0aW9uIHRvIGZpbmQgCisgIG91dCB3aGF0IHZlcnNpb24gb2YgdGhlIHVjZC1zbm1wIGxpYnJhcnkgaXQgbmVlZHMgdG8gYmUgbGlua2VkIGFnYWluc3QuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9pbnN0YWxsX3RoZV9QZXJsX1NOTVBfbW9kdWxlc18iPgorSG93IGRvIEkgaW5zdGFsbCB0aGUgUGVybCBTTk1QIG1vZHVsZXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEFzc3VtaW5nIHlvdSBoYXZlIGEgcmVhc29uYWJseSBuZXcgKGFuZCBwcm9wZXJseSBjb25maWd1cmVkKSBwZXJsIHN5c3RlbSwKKyAgdGhpcyBzaG91bGQgYmUgc2ltcGx5OgorCisgICAgICAgIGNkIHBlcmwJCShmb3IgNS4wLngpCisgIG9yICAgIGNkIHBlcmwvU05NUAkoZm9yIDQuMi54KQorCXBlcmwgTWFrZWZpbGUuUEwKKwkgICAgKHByZXNzIFJFVFVSTiB3aGVuIHByb21wdGVkIGZvciBob3N0IGFuZCBjb21tdW5pdHkpCisJbWFrZQorCW1ha2UgdGVzdAorCW1ha2UgaW5zdGFsbCAgKHByb2JhYmx5IGFzIHJvb3QpCisKKyAgTm90ZSB0aGF0IHdpdGggdGhlIDUuMCByZWxlYXNlIGxpbmUsIHRoZXJlIGFyZSBhZGRpdGlvbmFsIFNOTVAtcmVsYXRlZAorICBwZXJsIG1vZHVsZXMgdGhhdCBzaG91bGQgcHJvYmFibHkgYmUgaW5zdGFsbGVkIGFzIHdlbGwuICBUaGVzZSBjYW4gYWxzbworICBiZSBmb3VuZCB1bmRlciB0aGUgJ3BlcmwnIHN1YmRpcmVjdG9yeS4gIEF0IHRoZSB2ZXJ5IGxlYXN0LCBpbnN0YWxsIHRoZQorICAnZGVmYXVsdF9zdG9yZScgbW9kdWxlLgorICAgIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSB3aXRoIHRoZSA0LjIueCByZWxlYXNlcy4KKworCisKKzxhIG5hbWU9IkJ1dF9jb21waWxpbmdfdGhpc19mYWlsc19fV2h5XyI+CitCdXQgY29tcGlsaW5nIHRoaXMgZmFpbHMhIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIHBlcmwgbW9kdWxlIHRlbmRzIHRvIGRlbHZlIHF1aXRlIGRlZXBseSBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgdGhlCisgIG1haW4gTmV0LVNOTVAgbGlicmFyeSwgYW5kIHNvIGlzIHF1aXRlIHNlbnNpdGl2ZSB0byBjaGFuZ2VzIHdpdGhpbiB0aGUKKyAgbGlicmFyeS4gIEl0J3MgaW1wb3J0YW50IHRvIHVzZSB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUsIHRoYXQKKyAgY29ycmVzcG9uZHMgdG8gdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgeW91IGhhdmUgaW5zdGFsbGVkLiAgSWYgeW91J3JlCisgIHdvcmtpbmcgd2l0aCB0aGUgbWFpbiBOZXQtU05NUCBkaXN0cmlidXRpb24sIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9uIG9mCisgIHRoZSBwZXJsIG1vZHVsZSBpcyBzaGlwcGVkIGFzIHBhcnQgb2YgdGhpcywgYnV0IHlvdSAqbXVzdCogaGF2ZQorICBydW4gIm1ha2UgaW5zdGFsbCIgb24gdGhlIG1haW4gTmV0LVNOTVAgZGlzdHJpYnV0aW9uICpmaXJzdCouCisKKyAgSWYgeW91J3JlIHdvcmtpbmcgd2l0aCBhIHJlYWR5LWluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBtYWtlCisgIHN1cmUgeW91IG9idGFpbiBhIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgcGVybCBtb2R1bGUuCisKKyAgICBOb3RlIHRoYXQgdGhlIHBlcmwgbW9kdWxlcyB3aWxsIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBjb21waWxlcgorICAoYW5kIGNvbXBpbGVyIHNldHRpbmdzKSB1c2VkIGZvciBjb21waWxpbmcgdGhlIG9yaWdpbmFsIHBlcmwgYmluYXJ5LAorICAqbm90KiB0aG9zZSB1c2VkIGZvciBjb21waWxpbmcgdGhlIE5ldC1TTk1QIChvciBVQ0QpIGxpYnJhcnkuCisgIElmIHRoZXNlIGFyZSBkaWZmZXJlbnQgKGUuZy4gJ2djYycgdXNlZCBmb3Igb25lIGFuZCAnY2MnIGZvciB0aGUgb3RoZXIpCisgIHRoZW4gdGhpcyBtYXkgd2VsbCBjYXVzZSBwcm9ibGVtcy4gIEl0J3MgbXVjaCBzYWZlciB0byB1c2UgYSBjb25zaXN0ZW50CisgIGVudmlyb25tZW50IGZvciBib3RoLiAgVGhpcyBpc3N1ZSBpcyBkaXNjdXNzZWQgaW4gZ3JlYXRlciBkZXRhaWwgaW4KKyAgdGhlIFJFQURNRS5zb2xhcmlzIGZpbGUuCisKKyAgICBBbHNvIG5vdGUgdGhhdCB0aGUgdjUgTmV0LVNOTVAgc3VpdGUgKm11c3QqIGJlIGNvbmZpZ3VyZWQgdG8gcHJvdmlkZQorICBzaGFyZWQgbGlicmFyaWVzIGluIG9yZGVyIGZvciB0aGUgcGVybCBtb2R1bGVzIHRvIHdvcmsgY29ycmVjdGx5LiAgVGhpcworICBpcyBub3QgbmVjZXNzYXJ5IHdpdGggdGhlIHY0IFVDRC1TTk1QIGxpYnJhcmllcy4KKworCisKKzxhIG5hbWU9IkNvbXBpbGluZ190aGVfcGVybF9tb2R1bGVfd29ya3NfT0tfX2J1dF9fbWFrZV90ZXN0X19mYWlsc19fV2h5XyI+CitDb21waWxpbmcgdGhlIHBlcmwgbW9kdWxlIHdvcmtzIE9LLCBidXQgJ21ha2UgdGVzdCcgZmFpbHMuIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhhdCdzIGRpZmZpY3VsdCB0byBhbnN3ZXIgaW4gZ2VuZXJhbC4KKyAgU29tZSBvZiB0aGUgcGVybCB0ZXN0cyBhcmUgcmF0aGVyIHBpY2t5LCBzbyB0aGlzIG1heSBzaW1wbHkgYmUKKyAgc29tZSBtaW5vciBpbmNvbnNpc3RlbmN5IGJldHdlZW4geW91ciBwcmVjaXNlIHNldHVwLCBhbmQgdGhlCisgIGV4cGVjdGF0aW9ucyBvZiB0aGUgdGVzdCBlbnZpcm9ubWVudC4KKworICAgIENoZWNrIHRoYXQgeW91IGFyZSB3b3JraW5nIHdpdGggdGhlIHBlcmwgZGlzdHJpYnV0aW9uIHRoYXQgbWF0Y2hlcworICB0aGUgU05NUCBsaWJyYXJpZXMgKHVzZSB0aGUgJ3BlcmwvU05NUCcgaW4gcHJlZmVyZW5jZSB0byBDUEFOKSwgYW5kCisgIHRoYXQgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBtYWluIGxpYnJhcmllcyBzdWNjZXNzZnVsbHkgKHVuaW5zdGFsbAorICBhbnkgb2xkIHZlcnNpb25zIGlmIHlvdSdyZSBoYXZpbmcgdHJvdWJsZSkuCisKKyAgICBJZiBhbGwgdGhpcyBsb29rcyBPSywgYW5kIGlmIG1vc3Qgb2YgdGhlIHRlc3RzIHBhc3MsIHRoZW4gaXQncworICBwcm9iYWJseSBzYWZlIHRvIHJ1biAnbWFrZSBpbnN0YWxsJyBhbnl3YXkuICAgUHJvYmFibHkuCisKKworCis8YSBuYW1lPSJUaGVfcGVybF9fbWFrZV90ZXN0X19mYWlsc19vbl90aGVfT0lEX3Rlc3RzX19Jc19pdF9zYWZlX3RvX2NvbnRpbnVlXyI+CitUaGUgcGVybCAnbWFrZSB0ZXN0JyBmYWlscyBvbiB0aGUgT0lEIHRlc3RzLiBJcyBpdCBzYWZlIHRvIGNvbnRpbnVlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIE5vLiAgQWxtb3N0IGNlcnRhaW5seSBub3QuICBJZiB0aGUgInBlcmwvT0lEIiB0ZXN0cyBmYWlsIHRoZSBmaXJzdAorICBmb3VyIHRlc3RzLCBhbmQgdGhlbiBjcmFzaGVzIG91dCBjb21wbGFpbmluZyBhYm91dCBhICJuZXRzbm1wX29pZFB0ciIsCisgIHRoZW4gdGhpcyBpcyBhIHNpZ24gb2YgYSBtb3JlIGZ1bmRhbWVudGFsIHByb2JsZW0uCisKKyAgVGhlIDQuMi54IGxpbmUgcGVybCBzdXBwb3J0IHdhcyBhIHNpbmdsZSBtb2R1bGUsIHNvIHdhcyBpbmRlcGVuZGVudAorICBvZiB0aGUgd2F5IHRoYXQgdGhlIEMgbGlicmFyeSB3YXMgY29uZmlndXJlZC4gIEluIGNvbnRyYXN0IHRvIHRoaXMsIAorICB0aGUgNS4wLnggcGVybCBzdXBwb3J0IGNvbnNpc3Qgb2YgYSBudW1iZXIgb2YgaW50ZXItY29vcGVyYXRpbmcgbW9kdWxlcywKKyAgd2hpY2ggcmVseSBvbiBzaGFyaW5nIGEgY29uc2lzdGVudCBDIGxpYnJhcnkgZW52aXJvbm1lbnQuICBJbiBwcmFjdGlzZSwKKyAgdGhpcyBtZWFucyB0aGF0IHRoZSBwZXJsIG1vZHVsZXMgKk1VU1QqIGJlIGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkIHVzaW5nCisgIGEgc2hhcmVkIHZlcnNpb24gb2YgdGhlIEMgbGlicmFyeS4gICBVbmZvcnR1bmF0ZWx5LCB0aGUgZGVmYXVsdCBmb3IKKyAgbW9zdCBlYXJseSB2ZXJzaW9ucyBvZiB0aGUgTmV0LVNOTVAgc3VpdGUgd2FzIHRvIGNvbXBpbGUgdXNpbmcgc3RhdGljCisgIGxpYnJhcmllcyB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkIHRvIHVzZSBzaGFyZWQgbGlicmFyaWVzLiAgVGhlCisgIGRlZmF1bHQgc2hvdWxkIGJlIHRvIHVzZSBzaGFyZWQgbGlicmFyaWVzIGZyb20gNS4wLjcgb253YXJkcy4KKworICBUaGUgZXJyb3IgIm9pZDEgaXMgbm90IG9mIHR5cGUgbmV0c25tcF9vaWRQdHIiIGlzIGEgZmFpcmx5IHN1cmUgaW5kaWNhdGlvbgorICB0aGF0IHRoZSBDIGxpYnJhcnkgd2FzIGNvbXBpbGVkIHN0YXRpY2FsbHkuICAgWW91J2xsIG5lZWQgdG8gcmUtY29uZmlndXJlCisgIHRoZSBtYWluIE5ldC1TTk1QIHBhY2thZ2UgdXNpbmcgdGhlICItLWVuYWJsZS1zaGFyZWQiIGNvbmZpZ3VyZSBmbGFnLgorICBUaGVuIHJlLWluc3RhbGwgdGhlIEMgbGlicmFyeSBiZWZvcmUgcmUtY29uZmlndXJpbmcgYW5kIHJlLWNvbXBpbGluZworICB0aGUgcGVybCBtb2R1bGUgc3VwcG9ydC4KKworICBOb3RlIHRoYXQgdGhpcyBwcm9ibGVtIGRvZXMgbm90IGFyaXNlIHdoZW4gdXNpbmcgdGhlIDQuMi54IHZlcnNpb24KKyAgb2YgcGVybCBzdXBwb3J0LgorCisKKworPGEgbmFtZT0iSV9tX3RyeWluZ190b191c2VfbWliX2NfX29yX3RrbWliX19hbmRfaXRfY2FuX3RfbG9jYXRlX1NOTVBfcG1fIj4KK0knbSB0cnlpbmcgdG8gdXNlIG1pYjJjIChvciB0a21pYikgYW5kIGl0IGNhbid0IGxvY2F0ZSBTTk1QLnBtPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhhdCdzIHByb2JhYmx5IGJlY2F1c2UgdGhlIFNOTVAgcGVybCBtb2R1bGUgaGFzbid0IGJlZW4gaW5zdGFsbGVkLgorICBJdCdzIG5vdCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBwZXJsIGRpc3RyaWJ1dGlvbiwgbm9yIGlzIGl0IGluc3RhbGxlZAorICBieSBkZWZhdWx0IGluIFJlZEhhdCBMaW51eCAoZm9yIGV4YW1wbGUpLgorICAgIFlvdSdsbCBuZWVkIHRvIGluc3RhbGwgaXQuICBTZWUgdGhlIHByZXZpb3VzIHR3byBxdWVzdGlvbnMuCisKKworCis8YSBuYW1lPSJJX21fdHJ5aW5nX3RvX3VzZV9taWJfY19fb3JfdGttaWJfX2FuZF9pdF9jYW5fdF9sb2FkX1NOTVBfc29fIj4KK0knbSB0cnlpbmcgdG8gdXNlIG1pYjJjIChvciB0a21pYikgYW5kIGl0IGNhbid0IGxvYWQgU05NUC5zbz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyBwcm9iYWJseSB0aGUgc2FtZSBwcm9ibGVtLiAgRWl0aGVyIHRoZSBTTk1QIG1vZHVsZQorICBoYXNuJ3QgYmVlbiBpbnN0YWxsZWQsIG9yIGl0J3MgdGhlIHdyb25nIHZlcnNpb24uICBTZWUgdGhlCisgIHByZXZpb3VzIHR3byBxdWVzdGlvbnMuCisKKworCis8YSBuYW1lPSJJX21fdHJ5aW5nX3RvX3VzZV90a21pYl9hbmRfaXRfY2FuX3RfbG9jYXRlX1RrX3BtXyI+CitJJ20gdHJ5aW5nIHRvIHVzZSB0a21pYiBhbmQgaXQgY2FuJ3QgbG9jYXRlIFRrLnBtPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRrLnBtIGlzIGFub3RoZXIgUGVybCBwYWNrYWdlIHRoYXQgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGJlZm9yZSB0a21pYgorICB3aWxsIHJ1bi4gIEl0J3MgYWxzbyBhdmFpbGFibGUgb24gUGVybCBDUEFOLiAgV2Ugc3VnZ2VzdCB1c2luZyB2ZXJzaW9uCisgICJUazgwMC4wMTEiIG9yIGxhdGVyLiAgSXQgY2FuIGJlIGluc3RhbGxlZCBieSBpc3N1aW5nIHRoZSBjb21tYW5kOgorCisJCXBlcmwgLU1DUEFOIC1lIHNoZWxsIDsgImluc3RhbGwgVGsiCisKKworCis8YSBuYW1lPSJJX3ZlX2dvdF9hX3Byb2JsZW1fd2l0aF90aGVfTmV0X1NOTVBfbW9kdWxlX19fQ2FuX3lvdV9oZWxwXyI+CitJJ3ZlIGdvdCBhIHByb2JsZW0gd2l0aCB0aGUgTmV0LVNOTVAgbW9kdWxlLiAgQ2FuIHlvdSBoZWxwPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFNvcnJ5LCBkZXNwaXRlIHRoZSBzaW1pbGFyLXNvdW5kaW5nIG5hbWUsIHRoZSBOZXQtU05NUCAob3IgTmV0OjpTTk1QKQorICBtb2R1bGUgaXMgbm90aGluZyB0byBkbyB3aXRoIHRoaXMgcGFja2FnZSwgb3IgdGhlIE5ldFNOTVAgbW9kdWxlcy4KKyAgTmV0OjpTTk1QIGlzIGEgInB1cmUtcGVybCIgaW1wbGVtZW50YXRpb24gb2YgU05NUCBzdXBwb3J0LCBkZXZlbG9wZWQKKyAgYnkgRGF2aWQgVG93bi4gIFRoZSBkZXZlbG9wZXJzIG9mIHRoZSAoQy1iYXNlZCkgTmV0LVNOTVAgc3VpdGUgZG8KKyAgbm90IGhhdmUgYW55IHNpZ25pZmljYW50IGV4cGVyaWVuY2UgaW4gdXNpbmcgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwKKyAgYW5kIHlvdSdsbCBwcm9iYWJseSBiZSBiZXR0ZXIgb2ZmIGFza2luZyBmb3IgaGVscCB2aWEgQ1BBTiBvciBzb21lCisgIG90aGVyIHBlcmwtcmVsYXRlZCBmb3J1bS4KKworCisKKzxhIG5hbWU9Ik1JQlMiPgorTUlCUworPT09PQorCis8YSBuYW1lPSJXaGVyZV9jYW5fSV9maW5kX2FfTUlCX2NvbXBpbGVyXyI+CitXaGVyZSBjYW4gSSBmaW5kIGEgTUlCIGNvbXBpbGVyPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoYXQgZGVwZW5kcyB3aGF0IHlvdSBtZWFuIGJ5IGEgIk1JQiBjb21waWxlciIuICBUaGVyZSBhcmUgYXQgbGVhc3QgdHdvCisgIHR5cGVzIG9mIHRvb2wgdGhhdCBhcmUgY29tbW9ubHkgcmVmZXJyZWQgdG8gYnkgdGhpcyBuYW1lLgorCisgIFRoZSBmaXJzdCBpcyBhIHRvb2wgdG8gY2hlY2sgTUlCIGZpbGVzIGZvciB2YWxpZGl0eS4gIFRoaXMgZnVuY3Rpb25hbGl0eQorICBpcyBtb3N0bHkgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIE1JQiBwYXJzZXIgKHBhcnQgb2YgdGhlIE5ldC1TTk1QIGxpYnJhcnkpCisgIGFuZCBoZW5jZSBpbmNsdWRlZCBpbiBhbGwgdGhlIGFwcGxpY2F0aW9ucy4gIFRoZSB0b29sICdzbm1wdHJhbnNsYXRlJyBpcworICBwcm9iYWJseSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmb3IgdGhpcyBwdXJwb3NlLgorICAgIE5vdGUgdGhhdCB0aGUgcGFyc2VyIGlzIGZhaXJseSBmb3JnaXZpbmcgKHNlZSAnV2hhdCBBU04uMSBwYXJzZXIgaXMgdXNlZCcKKyAgYmVsb3cpLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgcmVnYXJkZWQgYXMgYSBzdGFtcCBvZiBhcHByb3ZhbC4KKworICAgIFRoZSBzZWNvbmQgdHlwZSBvZiB0b29sIGlzIG9uZSB0byB0dXJuIGEgTUlCIHNwZWNpZmljYXRpb24gaW50byBDIGNvZGUsCisgIHNwZWNpZmljYWxseSBvbmUgZGVzaWduZWQgdG8gYWlkIGFnZW50IGltcGxlbWVudGF0aW9uLiAgVGhlIGNvbW1hbmQgJ21pYjJjJworICBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSB0b29sIGZvciB0aGUgTmV0LVNOTVAgYWdlbnQuICAKKyAgU2VlIHRoZSBDT0RJTkcgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKKzxhIG5hbWU9IklfY2FuX3RfbG9hZF9hbnlfb2ZfdGhlX21pYl9maWxlc19fYW5kX3RoZXlfc2VlbV90b19iZV9taXNzaW5nIj4KK0kgY2FuJ3QgbG9hZCBhbnkgb2YgdGhlIG1pYiBmaWxlcywgYW5kIHRoZXkgc2VlbSB0byBiZSBtaXNzaW5nCit0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgdGhlIGZpbGVuYW1lLiAgV2hhdCdzIGhhcHBlbmluZz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBpcyBhIHByb2JsZW0gZXhwZXJpZW5jZWQgd2l0aCBTdW4gc3lzdGVtcyB3aGVuIHRoZSB0b29scyBoYXZlCisgIGJlZW4gY29tcGlsZWQgd2l0aCBhIG1peHR1cmUgb2YgQlNEIGFuZCBTb2xhcmlzIGVudmlyb25tZW50cy4KKyAgWW91J2xsIG5lZWQgdG8gcmUtY29uZmlndXJlIGFuZCBjb21waWxlIHRoZSB0b29scywgbWFraW5nIHN1cmUgdGhhdAorICAnL3Vzci91Y2InIGlzIG5vdCBpbiB5b3VyIFBBVEggKG9yIGF0IGxlYXN0IGNvbWVzIGF0IHRoZSBlbmQpLgorCisKKworPGEgbmFtZT0iV2h5X2FyZW5fdF9teV9taWJfZmlsZXNfYmVpbmdfcmVhZF9pbl8iPgorV2h5IGFyZW4ndCBteSBtaWIgZmlsZXMgYmVpbmcgcmVhZCBpbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBOZXQtU05NUCBsaWJyYXJ5IG9ubHkgbG9hZHMgYSBzdWJzZXQgb2YgTUlCIGZpbGVzIGJ5IGRlZmF1bHQuCisgIFRoaXMgbGlzdCBpcyBzZXQgYXQgd2hlbiB0aGUgc3VpdGUgaXMgZmlyc3QgY29uZmlndXJlZCBhbmQgY29tcGlsZWQsCisgIGFuZCBiYXNpY2FsbHkgY29ycmVzcG9uZHMgdG8gdGhlIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IHRoZSBhZ2VudCBzdXBwb3J0cy4KKyAgKFRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbiwgYnV0IGlzIGEgcmVhc29uYWJsZSBmaXJzdCBhcHByb3hpbWF0aW9uKS4KKworICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSB1c2luZyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiAnLW0nLCB0aGUKKyAgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSAnTUlCUycgb3IgdGhlIHNubXAuY29uZiBkaXJlY3RpdmUgJ21pYnMnLgorICBFYWNoIG9mIHRoZXNlIHRha2UgYSAoY29sb24tc2VwYXJhdGVkKSBsaXN0IG9mIE1JQiBtb2R1bGUgbmFtZXMKKyAgdG8gbG9hZC4gICBTdGFydGluZyB0aGUgbGlzdCB3aXRoIGEgJysnIGNoYXJhY3RlciB3aWxsIGFkZCB0aGVtIHRvCisgIHRoZSBkZWZhdWx0IGxpc3QgLSBvdGhlcndpc2UgaXQgcmVwbGFjZXMgdGhlIGRlZmF1bHRzLgorCisgICAgVXNpbmcgdGhlIHNwZWNpYWwgdmFsdWUgJ0FMTCcgd2lsbCBsb2FkIGFsbCB0aGUgTUlCIGZpbGVzIHRoYXQKKyAgdGhlIGxpYnJhcnkgY2FuIGZpbmQuCisKKworICAgIEFsdGVybmF0aXZlbHksIHRoZSB0b29scyBtYXkgYmUgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2UuCisgIFRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgbWliIGZpbGVzIGlzIC91c3IvbG9jYWwvc2hhcmUvc25tcC9taWJzLgorICBBZ2FpbiwgdGhpcyBpcyBzZXQgd2hlbiB0aGUgc3VpdGUgaXMgZmlyc3QgY29uZmlndXJlZCBhbmQgY29tcGlsZWQuCisgIFRoaXMgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUgJ01JQkRJUlMnCisgIG9yIHRoZSBzbm1wLmNvbmYgZGlyZWN0aXZlICdtaWJkaXJzJy4KKworICAgIE5vdGUgdGhhdCB0aGlzIG1heSB2ZXJ5IHdlbGwgYWZmZWN0IHlvdSBpZiB5b3UndmUgaW5zdGFsbGVkIGEKKyAgbmV3IHZlcnNpb24gb2YgdGhlIHN1aXRlIG1hbnVhbGx5LCByZXBsYWNpbmcgb25lIHByb3ZpZGVkIGJ5IHRoZQorICBzdXBwbGllciAod2hpY2ggdHlwaWNhbGx5IHdvdWxkIHVzZSBhIG1vcmUgJ2NlbnRyYWwnIGxvY2F0aW9uKS4KKworCisgICAgRmluYWxseSwgYXJlIHlvdSBzdXJlIHRoYXQgeW91J3ZlIGluc3RhbGxlZCB0aGUgTUlCIGZpbGVzPworICBJZiB5b3UndmUgY29tcGlsZWQgdGhlIHN1aXRlIGZyb20gc2NyYXRjaCwgeW91IG5lZWQgdG8gcnVuCisgICJtYWtlIGluc3RhbGwiIGF0IGxlYXN0IG9uY2UsIGJlZm9yZSB0aGUgdG9vbHMgd2lsbCBiZSBhYmxlIHRvCisgIGZpbmQgdGhlIE1JQiBmaWxlcy4gIFRoaXMgaXMgdW5saWtlbHkgdG8gYmUgYSBwcm9ibGVtIGlmIHlvdSd2ZQorICBiZWVuIHdvcmtpbmcgd2l0aCB0aGUgdG9vbHMgZm9yIGEgd2hpbGUsIGJ1dCBjYW4gYml0ZSB0aG9zZSBjb21pbmcKKyAgZnJlc2ggdG8gdGhlIFNOTVAgd29ybGQuCisKKworCis8YSBuYW1lPSJJX21fZ2V0dGluZ19hbnN3ZXJzX19idXRfdGhleV9yZV9hbGxfbnVtYmVyc19fV2h5XyI+CitJJ20gZ2V0dGluZyBhbnN3ZXJzLCBidXQgdGhleSdyZSBhbGwgbnVtYmVycy4gV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgaXMgYWN0dWFsbHkgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHF1ZXN0aW9uLiAgQmVjYXVzZSB0aGUgdG9vbHMKKyAgZG9uJ3QgcmVhZCBpbiBldmVyeSBNSUIgbW9kdWxlIHRoZXkgY2FuIGZpbmQsIGl0IGlzIHF1aXRlIHBvc3NpYmxlCisgIGZvciByZXN1bHRzIGZyb20gYW4gYWdlbnQgdG8gcmVmZXIgdG8gbW9kdWxlcyB0aGF0IGhhdmUgbm90IGJlZW4gbG9hZGVkCisgIChwYXJ0aWN1bGFybHkgd2l0aCBHRVRORVhUIHJlcXVlc3RzLCBvciB3aGVuIHdhbGtpbmcgYSB0cmVlKS4KKyAgICAgVGhlIHRvb2xzIHdpbGwgcmVwb3J0IHRoZSBhbnN3ZXIgcXVpdGUgY29ycmVjdGx5LCBidXQgd29uJ3QgdHJhbnNsYXRlCisgIGlkZW50aWZpZXJzIGFuZCBlbnVtZXJhdGlvbnMgaW50byByZWFkYWJsZSBzdHJpbmdzLiAgVG8gZml4IHRoaXMsIHVzZQorICB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgTUlCUyBvciBNSUJGSUxFUyAob3IgdGhlICctbScgYW5kICctTScgZmxhZ3MpCisgIHRvIHJlYWQgaW4gdGhlIHJlbGV2YW50IG1vZHVsZSBmaWxlcy4KKworCisKKzxhIG5hbWU9IldoYXRfZG9lc19fQ2Fubm90X2ZpbmRfbW9kdWxlX19YWFhfTUlCX19fbWVhbl8iPgorV2hhdCBkb2VzICJDYW5ub3QgZmluZCBtb2R1bGUgKFhYWC1NSUIpIiBtZWFuPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIHF1ZXN0aW9ucy4gICBJbiB0aGlzIGNhc2UsIGl0J3MKKyAgc3RhdGluZyB0aGF0IGl0IGNhbid0IGZpbmQgdGhlIHNwZWNpZmllZCBtb2R1bGUgLSBlaXRoZXIgYmVjYXVzZQorICBpdCdzIG5vdCBpbnN0YWxsZWQgcHJvcGVybHksIG9yIHRoZSBuYW1lIHVzZWQgaXMgc3VidGx5IHdyb25nLgorCisgICAgSWYgaXQncyBqdXN0IG9uZSBvciB0d28gbW9kdWxlcyB0aGF0IGFyZSBub3QgYmVpbmcgZm91bmQsIGNoZWNrCisgIHRoYXQgdGhlIGZpbGVzIGFyZSBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24sIGFyZSByZWFkYWJsZSwgYW5kIHRoZQorICBuYW1lIGJlaW5nIHVzZWQgaXMgY29ycmVjdC4gIE5vdGUgdGhhdCB0aGUgbmFtZSByZXBvcnRlZCBpcyB0aGUKKyAgbmFtZSBvZiB0aGUgTUlCIG1vZHVsZSwgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZQorICBuYW1lIG9mIHRoZSBmaWxlLiBTZWUgdGhlIHF1ZXN0aW9uICdIb3cgZG8gSSBhZGQgYSBNSUIgdG8gdGhlIHRvb2xzPycKKyAgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzLgorCisgICAgSWYgdGhlIHRvb2wgaXMgZ2VuZXJhdGluZyBhIHdob2xlIHNsZXcgb2YgZXJyb3JzLCB0aGVuIGl0J3MKKyAgbGlrZWx5IHRoYXQgZWl0aGVyIHRoZSBNSUIgZmlsZXMgaGF2ZW4ndCBiZWVuIGluc3RhbGxlZCBhdCBhbGwsCisgIG9yIHRoZSBsaWJyYXJ5IGlzIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlLiAgIFNlZSB0aGUgcHJldmlvdXMKKyAgdHdvIHF1ZXN0aW9ucy4KKworCisKKzxhIG5hbWU9IldoYXRfYWJvdXRfX3VubGlua2VkX09JRF9fIj4KK1doYXQgYWJvdXQgInVubGlua2VkIE9JRCI/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIGxpYnJhcnkgaGFzIGJlZW4gYWJsZSB0byBmaW5kIHRoZSBNSUIgbW9kdWxlLAorICBhbmQgcGFyc2UgdGhlIGluZGl2aWR1YWwgb2JqZWN0cyBkZWZpbmVkIGluIGl0LCBidXQgaXMgaGF2aW5nIHByb2JsZW1zCisgIGxpbmtpbmcgdGhlbSB0b2dldGhlciBpbnRvIGEgY29uc2lzdGVudCB0cmVlLiAgSW4gcGFydGljdWxhciwgaXQKKyAgY2FuJ3QgZmluZCBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZSB3aXRoaW4gdGhlIGJyYWNlcworICAoaS5lLiB0aGUgJ3h4eCcgaW4gJ3t4eHggOTl9JykuCisKKyAgICBUaGlzIGlzIHByb2JhYmx5IGR1ZSBlaXRoZXIgdG8gYSB0eXBvIGluIHRoaXMgbmFtZSAocmVtZW1iZXIgdGhhdAorICBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUsIHNvIGEgcmVmZXJlbmNlIHRvICd4eHgnIHdpbGwgKm5vdCogbWF0Y2gKKyAgYSBkZWZpbml0aW9uIG9mICdYeHgnKSwgb3IgZWxzZSB0aGUgbmFtZSBpcyBkZWZpbmVkIGluIGFub3RoZXIgTUlCCisgIGZpbGUsIGFuZCB0aGlzIGRlcGVuZGVuY3kgaXMgbWlzc2luZyBmcm9tIHRoZSBJTVBPUlQgY2xhdXNlIG9mIHRoaXMKKyAgTUlCIGZpbGUuCisKKworCis8YSBuYW1lPSJUaGVfcGFyc2VyX2RvZXNuX3RfaGFuZGxlX2NvbW1lbnRzX3Byb3Blcmx5X19XaHlfbm90XyI+CitUaGUgcGFyc2VyIGRvZXNuJ3QgaGFuZGxlIGNvbW1lbnRzIHByb3Blcmx5LiBXaHkgbm90PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyB0aGF0IHRoZSBsaW5lIGluIHF1ZXN0aW9uIGNvbnRhaW5zIHR3bworICAob3IgbW9yZSkgc2VxdWVuY2VzIG9mIHBhaXJzIG9mIGRhc2hlcy4gIFRoaXMgaXMgb2Z0ZW4gdXNlZCB0byB0cnkKKyAgYW5kICJjb21tZW50IG91dCIgYW4gdW53YW50ZWQgbGluZSB0aGF0IGFscmVhZHkgY29udGFpbnMgYSBjb21tZW50OgorCisJLS0gICBicm9rZW4gOjo9IHsgbXlNSUIgMSB9ICAgLS0gVGhpcyBpc24ndCB3b3JraW5nIHlldAorCisgIFRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCBhIGNvbW1lbnQgY29udGludWVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisgIFVuZm9ydHVuYXRlbHksIHRoaXMgYXNzdW1wdGlvbiBpcyBub3QgY29ycmVjdC4KKyAgICBBIGNvbW1lbnQgd2lsbCBjb250aW51ZSBlaXRoZXIgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSwgb3IgdGhlIG5leHQKKyAgb2NjdXJhbmNlIG9mIGEgcGFpciBvZiBkYXNoZXMuICBUaHVzIGluIHRoaXMgY2FzZSwgdGhlIGRlZmluaXRpb24gb2YKKyAgImJyb2tlbiIgaXMgY29tbWVudGVkIG91dCAoYXMgaW50ZW5kZWQpIGJ1dCB0aGUgZm9sbG93aW5nIHRleHQgaXMKKyAgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBNSUIsIGFuZCB3aWxsIGdlbmVyYXRlIGFuIGVycm9yLgorCisgICAgQSBzaW1pbGFyIGVmZmVjdCBjYW4gYmUgb2J0YWluZWQgd2hlbiBhIGxpbmUgb2YgZGFzaGVzIGhhcyBiZWVuIHVzZWQKKyAgdG8gdHJ5IGFuZCBtYXJrIHNlcGFyYXRlIHBhcnRzIG9mIGEgTUlCIGZpbGUuCisKKyAgICBNb3N0IG9mIHRoZSBhcHBsaWNhdGlvbnMgaGF2ZSBhIGNvbW1hbmQtbGluZSBvcHRpb24gKC1QYykgd2hpY2ggd2lsbAorICB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYnkgdHJlYXRpbmcgdGhlIHdob2xlIGxpbmUgYXMgYSBjb21tZW50LiAgQnV0CisgIHRoaXMgaXMgbm90IHN0cmljdGx5IGxlZ2FsLCBhbmQgdGhlIG9mZmVuZGluZyBNSUIgZmlsZSBzaG91bGQgcmVhbGx5IGJlCisgIGNvcnJlY3RlZC4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX3JlcGxhY2VfTUlCX3ZhbHVlc193aXRoX25ld19vbmVzXyI+CitIb3cgZG8gSSByZXBsYWNlIE1JQiB2YWx1ZXMgd2l0aCBuZXcgb25lcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIE5ldC1TTk1QIHBhcnNlciBnZW5lcmFsbHkgdGFrZXMgdGhlIGZpcnN0IGRlZmluaXRpb24gaXQgc2VlcyBmb3IgZWFjaAorICBvYmplY3QgaW4gdGhlIE1JQiBoaWVyYXJjaHkuICAgRXZlbiBpZiB5b3Ugc3BlY2lmeSB5b3VyIGZpbGUgdG8gYmUgcmVhZAorICBmaXJzdCwgaWYgdGhlIElNUE9SVFMgY2xhdXNlcyByZWZlcmVuY2UgYSBNSUIgd2l0aCBjb21wZXRpbmcgb2JqZWN0cywKKyAgdGhvc2Ugb2JqZWN0cyB3aWxsIGJlIHBhcnNlZCBmaXJzdC4KKworICBXaGVuIHNwZWNpZnlpbmcgdGhlIFJlcGxhY2UgTUlCIGNvbW1hbmQtbGluZSBvcHRpb24gKC1QUiksIHRoZSBwYXJzZXIKKyAgd2lsbCB1c2UgZGVmaW5pdGlvbnMgc291cmNlZCBmcm9tIHRoZSBtb3N0IHJlY2VudCBNSUIgZmlsZS4KKyAgVGhlIHBhcnNlciB3aWxsIHJlcGxhY2UgTUlCIG9iamVjdHMgd2hlbiB0aGUgc3ViLWlkZW50aWZpZXIgYW5kIG5hbWUgbWF0Y2guCisKKyAgQ2F1dGlvbjogVXNpbmcgUmVwbGFjZSBNSUIsIHRoZXJlIGlzIE5PIGd1YXJhbnRlZSB0aGF0IHRoZSByZXN1bHRpbmcKKyAgTUlCIHRyZWUgd2lsbCBiZSBjb3JyZWN0LiAgT3RoZXIgTUlCIG9iamVjdHMgbWF0Y2hpbmcgdGhlIG5hbWUgYnV0CisgIG5vdCB0aGUgc3ViLWlkZW50aWZpZXIgd2lsbCBwZXJzaXN0LiAgU3ViLWhpZXJhcmNoaWVzIG1heSBiZSByZXBhcmVudGVkLgorICBJbiBwYXJ0aWN1bGFyLCByYW5kb20gYWNjZXNzIHNlYXJjaGluZyBbc2VlIG1hbiAxIHNubXBjbWRdCisgIG1heSBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0LgorICBUaGUgUmVwbGFjZSBNSUIgb3B0aW9uIGlzIGV4cGVyaW1lbnRhbCwgYnV5ZXIgYmV3YXJlLCBjYXJwZSBkaWVtLCBldGMuCisKKyAgSGVyZSBhcmUgYSBmZXcgY29uc2lkZXJhdGlvbnMgdG8gaGVscCB5b3Ugb2J0YWluIGdvb2QgcmVzdWx0cy4KKyAgVGhlc2UgaG9sZCB0cnVlIGV2ZW4gaWYgeW91IG5ldmVyIHVzZSB0aGUgUmVwbGFjZSBNSUIgZmVhdHVyZS4KKyAgWW91ciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQgYXJlIHdlbGNvbWVkLgorCisgICAgMS4gVGhlIHBhcnNlciBzZWFyY2hlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yaWVzIGFuZCBhdHRlbXB0CisgICAgICAgdG8gcGFyc2UgZXZlcnkgZmlsZSB3aG9zZSBwYXRoIGRvZXMgbm90IGJlZ2luIHdpdGggIi4iIChwZXJpb2QpLgorICAgICAgIFJlbW92ZSAob3IgcmVuYW1lKSBvbGRlciBNSUIgZmlsZXMgZnJvbSB0aGVzZSBkaXJlY3Rvcmllcy4KKyAgICAgICBSZW5hbWUgIlJFQURNRSIgdG8gIi5SRUFETUUiICwgZXRjLgorCisgICAgMi4gSGludDogdGhlIHBhcnNlcidzIG1vZHVsZSBsaXN0IGlzIGluIExJRk8gb3JkZXIuIFlvdSBtYXkgc2VlIGJldHRlcgorICAgICAgIHJlc3VsdHMgaWYgdGhlIGRpcmVjdG9yeSB3aXRoIHRoZSBtb3N0IGNvcnJlY3QgTUlCIGZpbGVzIGlzCisgICAgICAgc3BlY2lmaWVkIGxhc3QgaW4gdGhlIE1JQkRJUlMgZW52aXJvbm1lbnQuCisKKyAgICAzLiBDb25zdHJhaW4gdGhlIHBhcnNlciB0byBub3QgcmVhZCBpbiBkZWZhdWx0IE1JQiBmaWxlcyBieSBzZXR0aW5nCisgICAgICAgdGhlIE1JQlMgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSB0byB0aGUgYXBwcm9wcmlhdGUgc2VwYXJhdG9yIGNoYXJhY3RlcgorICAgICAgIChzZW1pLWNvbG9uIG9uIHdpbjMyLCBjb2xvbiBldmVyeXdoZXJlIGVsc2UpLgorICAgICAgIFNldHRpbmcgdGhpcyB0byAiIiBtYXkgYWxzbyBoYXZlIHRoZSBzYW1lIGVmZmVjdC4KKworICAgIDQuIFRoZSBNSUJGSUxFUyBlbnZpcm9ubWVudCBjYW4gc3BlY2lmeSB0aGUgcGF0aCBvZiB0aGUgbmV3IE1JQiBmaWxlLgorCisgIFdpdGhpbiBhIHByb2dyYW0sIHRoZSBjYWxsOgorCSAvKiAgNC4yLnggICovCisJIGRzX3NldF9ib29sZWFuKERTX0xJQlJBUllfSUQsIERTX0xJQl9NSUJfUkVQTEFDRSwgMSB8IDApOworCisgIG9yLCBpZiB1c2luZyB0aGUgNS4wLnggc2VyaWVzIGNvZGU6CisJLyogIDUuMC54ICAqLworCW5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorCQkJICAgICAgIE5FVFNOTVBfRFNfTElCX01JQl9SRVBMQUNFLCAxIHwgMCk7CisKKyAgd2lsbCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgUmVwbGFjZSBNSUIgZmVhdHVyZSByZXNwZWN0aXZlbHkuCisgIElmIHlvdSdyZSBoYXZpbmcgcHJvYmxlbXMgbG9hZGluZyBhIHBhcnRpY3VsYXIgTUlCIGZpbGUsIHRoaXMKKyAgY2FsbCBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgYmVmb3JlIHVzaW5nIHJlYWRfbWliKCkgdG8KKyAgbG9hZCB0aGUgcmVxdWlyZWQgZmlsZSwgYW5kIHRoZW4gcmUtZW5hYmxpbmcgdGhlIFJlcGxhY2UgTUlCIGZlYXR1cmUuCisgIChvciB2aWNlIHZlcnNhLCBhcyBhcHByb3ByaWF0ZSkuCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfZ2V0X21vcmVfaW5mb3JtYXRpb25fYWJvdXRfdGhlc2VfTUlCX2ZpbGVfcHJvYmxlbXNfIj4KK0hvdyBjYW4gSSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBNSUIgZmlsZSBwcm9ibGVtcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBjb21tYW5kICdzbm1wdHJhbnNsYXRlJyBpcyB1c2VkIHRvIHRyYW5zbGF0ZSBiZXR3ZWVuIG51bWVyaWMKKyAgYW5kIHN5bWJvbGljIGZvcm1zIG9mIE9JRHMuICBJdCB1c2VzIHRoZSBzYW1lIHJvdXRpbmVzIGFzIHRoZQorICAnYWN0aXZlJyBjb21tYW5kcywgYnV0IGRvZXMgbm90IHJlbHkgb24gY29tbXVuaWNhdGluZyBzdWNjZXNzZnVsbHkKKyAgd2l0aCBhIG5ldHdvcmsgbWFuYWdlbWVudCBhZ2VudC4gIEFzIHN1Y2gsIGl0IGlzIGEgdXNlZnVsIHRvb2wKKyAgZm9yIGlkZW50aWZ5aW5nIHByb2JsZW1zIHdpdGggcmVhZGluZyBpbiBNSUIgZmlsZXMuCisKKyAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgbWF5IGJlIHVzZWZ1bCBpbgorICBpZGVudGlmeWluZyBwcm9ibGVtczoKKwktUHcgIHdhcm5zIGFib3V0IGNvbmZsaWN0aW5nIHN5bWJvbHMKKwktUFcgIHByaW50cyBtb3JlIHZlcmJvc2Ugd2FybmluZ3MgYWJvdXQgb3RoZXIgcHJvYmxlbXMgYXMgd2VsbAorCQkoaW4gYm90aCBjYXNlcywgaWdub3JlIHRoZSAneG1hbGxvYycgcmVwb3J0cykKKwktVCAgIHByb3ZpZGVzIHN1Yi1vcHRpb25zIGZvciB2YXJpb3VzIHZpZXdzIG9mIHRoZXNlIGVudHJpZXMKKworICBUaGVyZSBhcmUgb3RoZXIgJy1QJyBvcHRpb25zIHRvIGNvbnRyb2wgdmFyaW91cyBhc3BlY3RzIG9mIE1JQiBwYXJzaW5nLgorICBTZWUgdGhlICdzbm1wdHJhbnNsYXRlKDEpJyBhbmQgJ3NubXBjbWQoMSknIG1hbiBwYWdlcyBmb3IgbW9yZSBkZXRhaWxzLAorICBvciB0aGUgdHV0b3JpYWwgYXQKKwlodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L2NvbW1hbmRzL3NubXB0cmFuc2xhdGUuaHRtbAorCisKKworPGEgbmFtZT0iV2hhdF9zX3RoaXNfYWJvdXRfX3Rvb19tYW55X2ltcG9ydGVkX3N5bWJvbHNfXyI+CitXaGF0J3MgdGhpcyBhYm91dCAidG9vIG1hbnkgaW1wb3J0ZWQgc3ltYm9scyI/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBBbnkgTUlCIGZpbGUgc3RhcnRzIHdpdGggYW4gKG9wdGlvbmFsKSBsaXN0IG9mIGlkZW50aWZpZXJzIHRoYXQKKyAgaXQgImltcG9ydHMiIGZyb20gb3RoZXIgZmlsZXMuICBUaGUgcGFyc2VyIGltcGxlbWVudHMgdGhpcyB1c2luZworICBhIGZpeGVkIHNpemUgYnVmZmVyIHRvIGhvbGQgdGhlIGltcG9ydCBpbmZvcm1hdGlvbi4KKyAgICBUaGVyZSBhcmUgdHdvIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggdGhpcyBjYW4gcmVzdWx0IGluIHRoZQorICBlcnJvciBtZXNzYWdlIHNob3duIGFib3ZlLgorCisgICAgRmlyc3RseSwgaWYgdGhlIE1JQiBmaWxlIHJlZmVycyB0byBhbiB1bnVzdWFsbHkgbGFyZ2UgbnVtYmVyCisgIG9mIGV4dGVybmFsIGlkZW50aWZpZXJzLiAgSGFuZGxpbmcgdGhpcyBjYXNlIHJlcXVpcmVzIGEgKHRyaXZpYWwpCisgIHBhdGNoIHRvIHRoZSBwYXJzaW5nIGNvZGUuICBDb250YWN0IHRoZSBjb2RlcnMgbGlzdCBmb3IgYWR2aWNlLgorICAgICAoVGhpcyBpcyBleHRyZW1lbHkgcmFyZSAtIHRoZSBvbmx5IGV4YW1wbGUgdGhhdAorICAgICAgd2UndmUgY29tZSBhY3Jvc3MgaXMgdGhlIENhYmxldHJvbiBUcmFwIE1JQikuCisKKyAgICBNdWNoIG1vcmUgY29tbW9uIGlzIGEgc3ludGF4IGVycm9yIGluIHRoZSBJTVBPUlRTIGNsYXVzZSBvZiB0aGUKKyAgTUlCIGZpbGUgaW4gcXVlc3Rpb24uICBJbiBwYXJ0aWN1bGFyLCBjaGVjayB0aGF0IHRoaXMgZW5kcyBpbiBhCisgIHNlbWljb2xvbiwgYmVmb3JlIGdvaW5nIG9uIHRvIHRoZSBtYWluIGRlZmluaXRpb24gc2VjdGlvbi4KKyAgCisKKworPGEgbmFtZT0iQUdFTlQiPgorQUdFTlQKKz09PT09CisKKzxhIG5hbWU9IldoYXRfTUlCc19hcmVfc3VwcG9ydGVkXyI+CitXaGF0IE1JQnMgYXJlIHN1cHBvcnRlZD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGZvbGxvd2luZyBNSUJzIGFyZSBzdXBwb3J0ZWQgKGF0IGxlYXN0IGluIHBhcnQgYW5kIG9uIHNvbWUgc3lzdGVtcyk6CisKKwktIE1JQi0yICBHZW5lcmFsIG5ldHdvcmsgc3RhdGlzdGljcyAoUkZDIDEyMTMpCisJLSBVQ0QgYWdlbnQgZXh0ZW5zaW9ucworCQkocHJvY2Vzc2VzLCBkaXNrcywgbWVtb3J5LCBsb2FkIGF2ZXJhZ2UsCisJCSBzaGVsbCBjb21tYW5kcywgZXJyb3IgaGFuZGxpbmcpCisJLSBIb3N0IFJlc291cmNlcyAoUkZDIDE1MTQgYW5kIDI3OTApCisJLSBTTk1QdjMgTUlCUyAoUkZDcyAyNTcxLTYpCisKKyAgVGhlIFNOTVB2MiBQYXJ0eSBhbmQgTWFuYWdlci10by1NYW5hZ2VyIE1JQnMgKFJGQ3MgMTQ0NyAmIDE0NTEpIGhhdmUgYmVlbgorICB3aXRoZHJhd24uCisKKworCis8YSBuYW1lPSJXaGF0X3Byb3RvY29sc19hcmVfc3VwcG9ydGVkXyI+CitXaGF0IHByb3RvY29scyBhcmUgc3VwcG9ydGVkPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBhZ2VudCBzdXBwb3J0cyBhbGwgdGhyZWUgY3VycmVudCB2ZXJzaW9ucyBvZiBTTk1QICh2MSwgdjJjIGFuZCB2MyksCisgIG92ZXIgYm90aCBVRFAgYW5kIFRDUCB0cmFuc3BvcnRzLCBhcyB3ZWxsIGFzIGEgU01VWCAoUkZDIDEyMjcpIG1hc3RlcgorICBhZ2VudCwgQWdlbnRYIChSRkMgMjI1NyApIGluIGJvdGggbWFzdGVyIGFuZCBzdWJhZ2VudCByb2xlcywgYW5kIFNOTVAKKyAgcHJveHlpbmcuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9jb25maWd1cmVfdGhlX2FnZW50XyI+CitIb3cgZG8gSSBjb25maWd1cmUgdGhlIGFnZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoYXQgZGVwZW5kcyBvbiB3aGF0IHlvdSB3YW50IGl0IHRvIGRvLiAgU2VlIHRoZSBzbm1wZC5jb25mKDUpIG1hbnVhbAorICBwYWdlIGZvciB0aGUgcG9zc2liaWxpdGllcy4KKworICBZb3UgY2FuIGFsc28gcnVuIHRoZSAic25tcGNvbmYiIHBlcmwgc2NyaXB0IHRvIGhlbHAgeW91IGNyZWF0ZSB0aGlzCisgIGZpbGUuICBTdGFydCBvZmYgd2l0aCAnc25tcGNvbmYgLWcgYmFzaWNfc2V0dXAnIHRvIGdldCB5b3UgZ29pbmcuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9hZGRfYV9NSUJfdG9fdGhlX2FnZW50XyI+CitIb3cgZG8gSSBhZGQgYSBNSUIgdG8gdGhlIGFnZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSG93IGRvIEkgYWRkIGZ1bmN0aW9uYWxpdHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFdoaWxlIHNpbXBseSBhZGRpbmcgYSBmaWxlIHRvIHRoZSBNSUIgZGlyZWN0b3J5IChhbmQgcG9zc2libHkgdHdlYWtpbmcKKyAgdGhlIGxpc3Qgb2YgTUlCcyB0byBsb2FkKSBpcyBzdWZmaWNpZW50IGZvciB0aGUgdG9vbHMsIHVuZm9ydHVuYXRlbHkKKyAgZXh0ZW5kaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBhZ2VudCB0byBpbmNsdWRlIHRoaXMgaXMgbm90IHNvIHNpbXBsZS4KKyAgSW4gZmFjdCwgdGhlIGFnZW50IG1ha2VzIGxpdHRsZSBvciBubyB1c2Ugb2YgdGhlc2UgZmlsZXMsIGFuZCB3aWxsIHdvcmsKKyAgcXVpdGUgaGFwcGlseSB3aXRob3V0IHRoZW0uICBBbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeW50YXggYW5kCisgIHNjb3BlIG9mIHRoZSB2YXJpYWJsZXMgc3VwcG9ydGVkIGlzIGhhcmR3aXJlZCBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbgorICBvZiB0aGUgYWdlbnQuCisKKyAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGFsdGVybmF0aXZlIHdheXMgdG8gYWRkIGZ1bmN0aW9uYWxpdHkgZm9yIGEgbmV3CisgIE1JQiB0byB0aGUgYWdlbnQuCisKKyAgRmlyc3RseSwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgYWdlbnQgZGlzdHJpYnV0aW9uIGFscmVhZHkgaW5jbHVkZXMKKyAgdGhlIGRlc2lyZWQgZnVuY3Rpb25hbGl0eSwgYnV0IHRoaXMgaGFzIHNpbXBseSBub3QgYmVlbiBjb25maWd1cmVkIGluCisgIHRvIHRoZSBydW5uaW5nIHZlcnNpb24uICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIGNvbmZpZ3VyZSBvcHRpb24KKwkJLS13aXRoLW1pYi1tb2R1bGVzPSJsaXN0IgorICAod2hlcmUgImxpc3QiIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlcyB0byBpbmNsdWRlKSB0aGVuCisgIHJlY29tcGlsaW5nIHRoZSBhZ2VudC4KKyAgTm90ZSB0aGF0IHNvbWUgZnVuY3Rpb25hbGl0eSBjb25jZXJuZWQgd2l0aCBtb25pdG9yaW5nIGFuZCBtYW5hZ2luZworICB1bml4IGhvc3RzIGlzIGluY2x1ZGVkIGluIHRoZSBVQ0QgZXh0ZW5zaW9uIG1vZHVsZXMsIHdoaWNoIGFyZSBsb2NhdGVkCisgIHdpdGhpbiB0aGUgJ3ByaXZhdGUnIGJyYW5jaCBvZiB0aGUgTUlCIHRyZWUuICBUaGlzIGlzIGNvdmVyZWQgaW4gYSBsYXRlcgorICBxdWVzdGlvbiBpbiB0aGlzIEZBUS4KKworICBTZWNvbmRseSwgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBhZ2VudCB0byBydW4gY29tbWFuZHMgb3Igc2hlbGwgc2NyaXB0cworICBpbiByZXNwb25zZSB0byBxdWVyaWVzLiAgVGhlc2UgY2FuIG9idGFpbiBhbmQgcmVwb3J0IHRoZSBuZWNlc3NhcnkKKyAgaW5mb3JtYXRpb24sIG9yIHBlcmZvcm0gYWN0aW9ucyBhcyByZXF1aXJlZC4KKyAgRGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzIGFyZSBwcm92aWRlZCBpbiB0aGUgc25tcGQoOCkgYW5kCisgIHNubXBkLmNvbmYoNSkgbWFudWFsIHBhZ2VzLCBhbmQgdGhlIEVYQU1QTEUuY29uZiBmaWxlLgorICBUaGlzIGlzIGtub3duIGFzICJwYXNzLXRocm91Z2giIHN1cHBvcnQuCisKKyAgVGhpcmRseSwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIGxpbmsgYW5vdGhlciBhZ2VudCAod2hpY2ggYWxyZWFkeQorICBzdXBwb3J0cyB0aGUgZGVzaXJlZCBNSUIpLCBhcyBhICJzdWJhZ2VudCIgb2YgdGhlIE5ldC1TTk1QIG1hc3RlcgorICAob3IgdmljZSB2ZXJzYSkuICBUaGUgcG9zc2liaWxpdGllcyBoZXJlIGFyZSBTTVVYLCBBZ2VudFggb3IgcHJveGllZAorICBTTk1QIChzZWUgdGhlIG5leHQgcXVlc3Rpb24gYnV0IG9uZSkuCisKKyAgRmluYWxseSwgdGhlIGFnZW50IGl0c2VsZiBjYW4gYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIE1JQgorICBncm91cHMsIGJ5IHdyaXRpbmcgdGhlIG5lY2Vzc2FyeSBDIGNvZGUsIGFuZCBpbmNsdWRpbmcgdGhpcyB3aXRoaW4KKyAgdGhlIG1haW4gYWdlbnQgLSBlaXRoZXIgc3RhdGljYWxseSBjb21waWxlZCBpbiwgb3IgZHluYW1pY2FsbHkgbG9hZGVkLgorICBUaGlzIGlzIGNvdmVyZWQgZnVydGhlciBpbiB0aGUgbmV4dCBzZWN0aW9uLgorCisgICAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHZpc2libGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdwYXNzLXRocm91Z2gnCisgIE1JQiBzdXBwb3J0LCBzdWJhZ2VudHMsIGFuZCBtb2R1bGVzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgbWFpbiBhZ2VudAorICBpdHNlbGYuIFRvb2xzIHF1ZXJ5aW5nIHRoZSBhZ2VudCB3aWxsIHNlZSBhIHNpbmdsZSBNSUIgc3RydWN0dXJlLgorIAorCisKKzxhIG5hbWU9IldoYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX19leGVjX19fX3NoX19hbmRfX3Bhc3NfXyI+CitXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnZXhlYycsICdzaCcgYW5kICdwYXNzJz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAnZXhlYycgd2lsbCBmb3JrIG9mZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgYW5kIHJldHVybiB0aGUgZXhpdCBzdGF0dXMKKyAgYW5kL29yIHRoZSBvdXRwdXQuICBBcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgY29tbWFuZC4KKworICAgICdzaCcgaXMgc2ltaWxhciwgYnV0IGludm9rZXMgYSBzaGVsbCB0byBydW4gdGhlIGNvbW1hbmQgbGluZSBnaXZlbi4KKyAgVGhpcyBtZWFucyB0aGF0IHF1b3RlZCBhcmd1bWVudHMgd2lsbCBiZSByZWNvZ25pc2VkIGFzIHN1Y2gsIGFuZCBhbHNvCisgIGFsbG93cyByZWRpcmVjdGlvbiwgYW5kIG90aGVyIHNpbWlsYXIgc2hlbGwgaW50ZXJwcmV0YXRpb24uCisKKyAgTmVpdGhlciBvZiB0aGVzZSBtZWNoYW5pc21zIHJlcXVpcmUgdGhlIGNvbW1hbmQgdG8gaGF2ZSBhbnkga25vd2xlZGdlCisgIG9mIHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBpbiB0aGlzIG1hbm5lci4gIE5vdGUgdGhhdCByZXR1cm4KKyAgdmFsdWVzIGFyZSBjYWNoZWQgd2l0aGluIHRoZSBhZ2VudCBmb3IgMzAgc2Vjb25kcywgcmF0aGVyIHRoYW4gaW52b2tpbmcKKyAgdGhlIGNvbW1hbmQgZm9yIGV2ZXJ5IHJlcXVlc3QuCisKKworICAgICdwYXNzJyBpcyBhIG1vcmUgZ2VuZXJhbCBtZWNoYW5pc20gZm9yIGV4dGVuZGluZyB0aGUgYWdlbnQsIGFuZCB0aGUKKyAgY29tbWFuZCBnaXZlbiB3aWxsIGJlIGludm9rZWQgZm9yIGFueSByZXF1ZXN0IHdpdGhpbiB0aGUgc3BlY2lmaWMgTUlCCisgIHN1YnRyZWUuICBEZXRhaWxzIG9mIHByZWNpc2VseSBob3cgdGhpcyBjb21tYW5kIHdpbGwgYmUgY2FsbGVkIGluCisgIHZhcmlvdXMgY2lyY3Vtc3RhbmNlcyBpcyBnaXZlbiBpbiB0aGUgJ3NubXBkLmNvbmYoNSknIG1hbiBwYWdlLgorCisgICAgJ3Bhc3MtcGVyc2lzdCcgaXMgc2ltaWxhciwgYnV0IHRoZSBjb21tYW5kIHdpbGwgY29udGludWUgcnVubmluZworICBldmVuIG9uY2UgdGhlIGluaXRpYWwgcmVxdWVzdCBoYXMgYmVlbiBhbnN3ZXJlZC4KKworICBTZWUgJ3NubXBkLmNvbmYoNSknIGZvciBtb3JlIGRldGFpbHMuCisKKyAgCisKKzxhIG5hbWU9IldoYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX0FnZW50WF9fU01VWF9hbmRfcHJveGllZF9TTk1QXyI+CitXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBBZ2VudFgsIFNNVVggYW5kIHByb3hpZWQgU05NUD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBBbGwgdGhyZWUgYXJlIHByb3RvY29scyB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgdHdvIG9yIG1vcmUgYWdlbnRzCisgIGFwcGVhciBhcyBvbmUgdG8gdGhlIHF1ZXJ5aW5nIGFwcGxpY2F0aW9uLiAgSW4gZWFjaCBjYXNlLCBvbmUgYWdlbnQKKyAgdGFrZXMgdGhlIHJvbGUgb2YgIm1hc3RlciIsIGFuZCBkZWxlZ2F0ZXMgcmVxdWVzdHMgdG8gb25lIG9mIHRoZSBvdGhlcnMKKyAgYXMgYW5kIHdoZXJlIHRoaXMgaXMgYXBwcm9wcmlhdGUuICBUaGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtIG1haW5seQorICByZWxhdGUgdG8gaG93IGRhdGEgaXMgcmVwcmVzZW50ZWQsIGFuZCB0aGUgbWVjaGFuaXNtcyBmb3IgY29tbXVuaWNhdGlvbgorICBiZXR3ZWVuIG1hc3RlciBhbmQgc3ViYWdlbnRzLgorCisgICAgU01VWCBhbmQgcHJveHkgU05NUCBib3RoIGVzc2VudGlhbGx5IHVzZSB0aGUgc3RhbmRhcmQgU05NUCBwYWNrZXQgZm9ybWF0LgorICBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgYSBwcm94eSBTTk1QIHN1YmFnZW50IG5lZWQgbm90IGJlIGF3YXJlIHRoYXQKKyAgaXQgaXMgYWN0aW5nIGluIHN1Y2ggYSByb2xlLiAgSXQgdHlwaWNhbGx5IGxpc3RlbnMgb24gYSBub24tc3RhbmRhcmQgcG9ydCwKKyAgYW5kIHNpbXBseSByZWNlaXZlcyByZXF1ZXN0cyBhcyB1c3VhbCwgZm9yd2FyZGVkIGZyb20gdGhlIG1hc3RlciBhZ2VudC4gCisgIFRoZSBtYWluIGlzc3VlIHRvIGJlIGF3YXJlIG9mIGlzIHRoYXQgc3VjaCByZXF1ZXN0cyB3aWxsIHVzdWFsbHkgYXBwZWFyCisgIHRvIGNvbWUgZnJvbSB0aGUgbG9jYWwgaG9zdCwgYW5kIHRoaXMgbWF5IGFmZmVjdCBob3cgdGhlIGFjY2VzcyBjb250cm9sCisgIG1lY2hhbmlzbXMgbmVlZCB0byBiZSBzZXQgdXAuCisKKyAgICBTTVVYIHVzZXMgYSBzaW1pbGFyIHBhY2tldCBmb3JtYXQsIGJ1dCB0aGUgc3ViYWdlbnQgInJlZ2lzdGVycyIgd2l0aAorICB0aGUgbWFzdGVyIGFnZW50LCBwcm92aWRpbmcgYSBzdWl0YWJsZSBwYXNzd29yZC4gIFRoZSBOZXQtU05NUCAoYW5kIFVDRCkKKyAgYWdlbnQgaW5jbHVkZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGFjdGluZyBhcyBhIFNNVVggbWFzdGVyIGFnZW50LCBidXQgdGhlCisgIHN1aXRlIGRvZXMgbm90IGluY2x1ZGUgYSBzdWJhZ2VudCBBUEkuICAgTm90ZSB0aGF0IHRoZSBTTVVYIHByb3RvY29sIGhhcworICBlc3NlbnRpYWxseSBiZWVuIHN1cGVyY2VkZWQgYnkgQWdlbnRYLCBidXQgaXMgc3RpbGwgcHJvdmlkZWQgaW4gb3JkZXIgdG8KKyAgc3VwcG9ydCBleGlzdGluZyBTTVVYIHN1YmFnZW50cy4KKyAgICBTZWUgdGhlIGZpbGUgJ2FnZW50L21pYmdyb3VwL1JFQURNRS5zbXV4JyBmb3IgZGV0YWlscy4KKworICAgIEFnZW50WCB1c2VzIGEgbW9yZSBjb21wYWN0IChhbmQgc2ltcGxlcikgcGFja2V0IGZvcm1hdCwgd2l0aCBhIHJpY2hlcgorICByYW5nZSBvZiBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcywgYW5kIHByb3ZpZGVzIGEgbW9yZSBmbGV4aWJsZSBhbmQgcmVsaWFibGUKKyAgZXh0ZW5zaW9uIG1lY2hhbmlzbS4gIFRoZSBOZXQtU05NUCBhZ2VudCBjYW4gYmUgdXNlZCBpbiBib3RoIG1hc3RlciBhbmQKKyAgc3ViYWdlbnQgcm9sZXMsIGFuZCB0aGUgYWdlbnQgbGlicmFyeSBjYW4gYWxzbyBiZSB1c2VkIHRvIGVtYmVkIGFuIEFnZW50WAorICBzdWJhZ2VudCB3aXRoaW4gYW5vdGhlciBhcHBsaWNhdGlvbi4KKyAgICBTZWUgdGhlIGZpbGUgJ1JFQURNRS5hZ2VudHgnIGZvciBkZXRhaWxzLgorCisgIE5vdGUgdGhhdCBzdXBwb3J0IGZvciBTTVVYIGlzIG5vdCBjb25maWd1cmVkIGluIGJ5IGRlZmF1bHQuICBZb3Ugd2lsbAorICBuZWVkIHRvIHJ1biBjb25maWd1cmUgd2l0aCB0aGUgb3B0aW9uCisKKwkJLS13aXRoLW1pYi1tb2R1bGVzPXNtdXgKKworICBTdGFydGluZyBmcm9tIHJlbGVhc2UgNC4yLjEsIEFnZW50WCBzdXBwb3J0IGlzIG5vdyBpbmNsdWRlZCBieSBkZWZhdWx0LAorICBidXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBhY3RpdmF0ZWQgaW4gdGhlIG1hc3RlciBhZ2VudC4gIERvIHRoaXMgYnkKKyAgYWRkaW5nIHRoZSBsaW5lCisKKwkJbWFzdGVyIGFnZW50eAorCisgIHRvIHRoZSBzbm1wZC5jb25mIGZpbGUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBhZ2VudC4gIE5vdGUgdGhhdCB0aGVyZSBhcmUKKyAgYSBudW1iZXIgb2Yga25vd24gcHJvYmxlbXMgd2l0aCB0aGUgQWdlbnRYIHN1cHBvcnQgaW4gdGhlIDQueCBsaW5lLCBhbmQKKyAgdGhpcyBzaG91bGQgbm90IGJlIHVzZWQgb24gcHJvZHVjdGlvbiBzeXN0ZW1zLiAgVGhlIDUuMCBBZ2VudFggc3VwcG9ydAorICBoYXMgYmVlbiBzaWduaWZpY2FudGx5IGltcHJvdmVkLCBhbmQgcHJvZHVjdGlvbiB1c2UgaXMgbGVzcyBmb29saGFyZHkuCisgICAgU2VlIFJFQURNRS5hZ2VudHggZm9yIGRldGFpbHMuCisKKworCis8YSBuYW1lPSJXaGF0X2Fib3V0X19kbG1vZF9fX193aGF0X3NfdGhhdF9hYm91dF8iPgorV2hhdCBhYm91dCAnZGxtb2QnIC0gd2hhdCdzIHRoYXQgYWJvdXQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIER5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzIGFyZSBhIG1lYW5zIG9mIGluY2x1ZGluZyBhIE1JQiBpbXBsZW1lbnRhdGlvbgorICBtb2R1bGUgd2l0aGluIHRoZSBtYWluIFNOTVAgYWdlbnQgKG9yIGFuIEFnZW50WCBzdWJhZ2VudCkgd2l0aG91dCBuZWVkaW5nCisgIHRvIHJlLWNvbXBpbGUgYW5kIHJlLWxpbmsgdGhlIGFnZW50IGJpbmFyeS4gIEluc3RlYWQsIGRldGFpbHMgb2YgdGhlCisgIG1vZHVsZShzKSB0byBsb2FkIGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIHRoZSBhZ2VudAorICBsb2NhdGVzIHRoZSBmaWxlcyBsaXN0ZWQsIGFuZCBtZXJnZXMgdGhlbSBpbiBhdCBydW4gdGltZS4KKworICBTZWUgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0L2RsbW9kLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKKzxhIG5hbWU9IldoaWNoX3Nob3VsZF9JX3VzZV8iPgorV2hpY2ggc2hvdWxkIEkgdXNlPworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhhdCdzIGEgZGlmZmljdWx0IHF1ZXN0aW9uLgorCisgIENvbXBhcmluZyB0aGUgdGhyZWUgcHJvdG9jb2xzLCBTTk1QIHdhcyBub3Qgb3JpZ2luYWxseSBkZXNpZ25lZAorICBhcyBhbiBpbnRlcm5hbCBzdWJhZ2VudC1jb21tdW5pY2F0aW9uIHByb3RvY29sLCBhbmQgdGhlcmUgYXJlCisgIGNlcnRhaW4gYXJjaGl0ZWN0dXJhbCBsaW1pdGF0aW9ucyB0byBTTVVYLCB3aGljaCB3ZXJlIGFkZHJlc3NlZAorICBhcyBwYXJ0IG9mIHRoZSBkZXNpZ24gb2YgQWdlbnRYLiAgVGhlc2UgaW5jbHVkZSBzdWNoIGFzcGVjdHMgYXMKKyAgcmVsaWFibGUgaGFuZGxpbmcgb2YgU0VUIHJlcXVlc3RzIChwYXJ0aWN1bGFybHkgaW4gdGhlIGZhY2Ugb2YKKyAgZmFpbHVyZXMpLCBhIGNvbW1vbiB2YWx1ZSBmb3Igc3lzVXBUaW1lLCBhbmQgYSBtZWNoYW5pc20gZm9yCisgIHNoYXJpbmcgdGFibGVzIGFjcm9zcyBtdWx0aXBsZSBzdWJhZ2VudHMuCisgICAgU28gZnJvbSBhIHB1cmVseSBmdW5jdGlvbmFsIHBvaW50IG9mIHZpZXcsIEFnZW50WCBpcyB0aGUgbW9zdAorICBhcHByb3ByaWF0ZSBjaG9pY2UgZm9yIHN1YmFnZW50IGNvbW11bmljYXRpb24uCisKKyAgSW4gdGVybXMgb2YgaW1wbGVtZW50YXRpb24sIFNNVVggaXMgdGhlIG1vc3QgbWF0dXJlIG9mIHRoZSB0aHJlZSwKKyAgYnV0IGlzIG5vIGxvbmdlciBiZWluZyBhY3RpdmVseSBtYWludGFpbmVkLiAgVGhlIG9yaWdpbmFsIGF1dGhvcgorICBoYXMgbW92ZWQgb24sIGFuZCB0aGUgY3VycmVudCBkZXZlbG9wZXJzIGRvbid0IHVzZSB0aGlzIGZhY2lsaXR5LgorICBJdCBhbHNvIG9ubHkgaW5jbHVkZXMgbWFzdGVyIGFnZW50IHN1cHBvcnQgLSB0aGUgcGFja2FnZSBkb2VzIG5vdAorICBwcm92aWRlIGEgU01VWCBzdWItYWdlbnQgQVBJLgorICAgIFRoZSBBZ2VudFggc3VwcG9ydCBpbiB0aGUgNC54IGxpbmUgaGFzIGEgbnVtYmVyIG9mIGtub3duIHByb2JsZW1zLAorICBhbmQgaXMgbm90IHN1aXRhYmxlIGZvciB1c2UgaW4gZnJvbnQtbGluZSBzaXR1YXRpb25zICh0aG91Z2ggaXQncworICBwcm9iYWJseSBzdWZmaWNpZW50bHkgc3RhYmxlIGFuZCBmdW5jdGlvbmFsIGZvciBzaW1wbGUgZGF5LXRvLWRheQorICB1c2UpLiAgVGhlIDUuMCBhZ2VudCBoYXMgc2VlbiBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBkZXZlbG9wbWVudCwKKyAgYW5kIGlzIGEgbXVjaCBtb3JlIHJlbGlhYmxlIGJlYXN0LgorICAgIEJlYXIgaW4gbWluZCB0aGF0IHRoZSBBZ2VudFggYW5kIHByb3h5IFNOTVAgaW1wbGVtZW50YXRpb25zIGFyZQorICByZWxhdGl2ZWx5IG5ldyBjb2RlLCBzbyBoYXZlIG5vdCByZWNlaXZlZCB0aGUgc2FtZSBsZXZlbCBvZiBhY3RpdmUKKyAgc2VydmljZSB0aGF0IHRoZSBjb3JlIGFnZW50IGhhcy4gIEJ1dCB3aXRoIHRoYXQgY2F2ZWF0LCBlaXRoZXIgb2YKKyAgdGhlc2Ugb3B0aW9ucyBzaG91bGQgYmUgc3VpdGFibGUgZm9yIG1vc3QgdXNlLgorCisgICAgVGhpcyBkZWNpc2lvbiB3aWxsIHByb2JhYmx5IGJlIGRpY3RhdGVkIGJ5IGV4dGVybmFsIGNvbnNpZGVyYXRpb25zCisgIChpLmUuIHRoZSBvdGhlciBhZ2VudHMgeW91IG5lZWQgdG8gY29tYmluZSB3aXRoKS4gIElkZWFsbHksIHlvdQorICBzaG91bGQgYmUgbG9va2luZyB0b3dhcmRzIEFnZW50WCwgYnV0IHRoaXMgaXMgbm90IGFsd2F5cyBwb3NzaWJsZS4KKworICBEeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyBzZXJ2ZSBhIHNvbWV3aGF0IGRpZmZlcmVudCBwdXJwb3NlLAorICBhbmQgYXJlIHB1cmVseSBjb25jZXJuZWQgd2l0aCBob3cgdGhlIGluZGl2aWR1YWwgTUlCIGltcGxlbWVudGF0aW9uCisgIG1vZHVsZXMgYXJlIGxvY2F0ZWQuICBUaGVzZSBjYW4gYmUgY29tYmluZWQgd2l0aCBlaXRoZXIgYSAicHVyZSBTTk1QIgorICBtb2RlbCwgYW4gQWdlbnRYIHN1YmFnZW50IG9yIGEgcHJveGllZCBTTk1QIGFnZW50LiAgVGhleSB3aWxsIGludm9sdmUKKyAgYSBzbGlnaHRseSBncmVhdGVyIGxvYWQgb24gYWdlbnQgc3RhcnQtdXAgKHBsdXMgYW4gZXh0cmEgbGV2ZWwgb2YKKyAgY29tcGxleGl0eSBpZiB0aGluZ3MgZ28gd3JvbmcpIC0gYmFsYW5jZWQgYWdhaW5zdCB0aGUgYWJpbGl0eSB0bworICBhdm9pZCByZS1jb21waWxpbmcgYW5kIHJlLWxpbmtpbmcgYSB3b3JraW5nIGJpbmFyeS4KKworICAgIE5vdGUgdGhhdCBhcyBmYXIgYXMgaW5kaXZpZHVhbCBNSUIgbW9kdWxlcyBhcmUgY29uY2VybmVkLCB0aGUKKyAgcHJvdG9jb2wgdXNlZCB0byB0cmFuc3BvcnQgdGhlIHJlcXVlc3QgaXMgbW9yZSBvciBsZXNzIGlycmVsZXZhbnQuCisgIFRoZSBzYW1lIGluZm9ybWF0aW9uIGlzIGJlaW5nIHJlcXVlc3RlZCAob3Igc2V0KSBlYWNoIHRpbWUsIHNvCisgIGEgTUlCIG1vZHVsZSBvdWdodCB0byBiZSBwcm90b2NvbC1pbmRlcGVuZGVudC4gIFRoaXMgd2FzIG9uZSBvZgorICB0aGUgZGVzaWduIGFpbXMgb2YgdGhlIEFnZW50WCBzdXBwb3J0LCBhbmQgdGhlIGV4YWN0IHNhbWUgbW9kdWxlCisgIGNvZGUgY2FuIGJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgYSBwdXJlLVNOTVAgbWFzdGVyIGFnZW50LCBvciBhbgorICBBZ2VudFggc3ViYWdlbnQsIGVpdGhlciBjb21waWxlZCBpbiBvciBkeW5hbWljYWxseSBsb2FkZWQgd2l0aCBubworICBtb2RpZmljYXRpb25zIG5lZWRlZCB0byB0aGUgTUlCIG1vZHVsZSBjb2RlIGl0c2VsZi4KKworCisKKzxhIG5hbWU9IkNhbl9JX3VzZV9BZ2VudFhfd2hlbl9ydW5uaW5nX3VuZGVyX1dpbmRvd3NfIj4KK0NhbiBJIHVzZSBBZ2VudFggd2hlbiBydW5uaW5nIHVuZGVyIFdpbmRvd3M/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgWWVzLCBidXQgdGhlcmUgYXJlIGEgY291cGxlIG9mIHRoaW5ncyB0byBiZSBhd2FyZSBvZi4KKworICBGaXJzdGx5LCBieSBkZWZhdWx0IHRoZSBBZ2VudFggbWFzdGVyIGxpc3RlbnMgb24gdGhlIFVuaXggZG9tYWluCisgIHNvY2tldCAnL3Zhci9hZ2VudHgvbWFzdGVyJywgd2hpY2ggZG9lc24ndCB3b3JrIHVuZGVyIFdpbmRvd3MuCisgIFlvdSdsbCBuZWVkIHRvIHRlbGwgaXQgdG8gbGlzdGVuIG9uIGEgVENQIHBvcnQsIGVpdGhlciBieSB1c2luZworICB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiAiLXggbG9jYWxob3N0OjcwNSIsICBvciBieSBhZGRpbmcgdGhlCisgIGRpcmVjdGl2ZSAiYWdlbnR4QWRkcmVzcyBsb2NhbGhvc3Q6NzA1IiB0byB0aGUgc25tcGQuY29uZiBmaWxlLgorCisgIFNlY29uZGx5LCBiZSBhd2FyZSB0aGF0IHRoZSBzZWN1cml0eSBvZiBBZ2VudFggY29ubmVjdGl2aXR5IGlzIG5vdAorICBwYXJ0aWN1bGFybHkgc3Ryb25nLiAgVGhlIGV4YW1wbGVzIGdpdmVuIGhlcmUgd291bGQgYWxsb3cgYW55IHByb2Nlc3MKKyAgcnVubmluZyBvbiB0aGUgbG9jYWwgbWFjaGluZSB0byByZWdpc3RlciBhcyBhbiBBZ2VudFggc3ViYWdlbnQuICBUaGUKKyAgbW9yZSBvYnZpb3VzIHNldHRpbmdzICIteCA3MDUiIG9yICJhZ2VudHhBZGRyZXNzIDcwNSIgd291bGQgYWxsb3cKKyAgYSBzeXN0ZW0gKmFueXdoZXJlKiBvbiB0aGUgbmV0d29yayAob3IgZXZlbiBmcm9tIHJlbW90ZSBuZXR3b3JrcykgdG8KKyAgcmVnaXN0ZXIgYXMgYW4gQWdlbnRYIHN1YmFnZW50LiAgVGhpcyBjb3VsZCBwb3RlbnRpYWxseSBiZSB1c2VkIHRvCisgIGhpamFjayB0aGUgYWdlbnQsIG9yIHByb3ZpZGUgZmFsc2UgaW5mb3JtYXRpb24uCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfcnVuX0FnZW50WF93aXRoX2FfZGlmZmVyZW50X3NvY2tldF9hZGRyZXNzXyI+CitIb3cgY2FuIEkgcnVuIEFnZW50WCB3aXRoIGEgZGlmZmVyZW50IHNvY2tldCBhZGRyZXNzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0d28gc2lkZXMgdG8gYW4gQWdlbnRYIGNvbm5lY3Rpb24sIGFuZCB0aGV5IG5lZWQgdG8KKyAgYWdyZWUgYWJvdXQgd2hpY2ggc29ja2V0IGFkZHJlc3MgdG8gdXNlLiAgU28gaWYgeW91IHdhbnQgdG8gdXNlCisgIGEgZGlmZmVyZW50IHNvY2tldCwgeW91IG5lZWQgdG8gY29uZmlndXJlIGJvdGggc2lkZXMgYWNjb3JkaW5nbHkuCisKKyAgRm9yIHRoZSBOZXQtU05NUCBtYXN0ZXIgYWdlbnQsIHRoaXMgaXMgZG9uZSB1c2luZyB0aGUgY29tbWFuZC1saW5lCisgIG9wdGlvbiAnLXgnLiAgVGhlIGNvbW1hbmQKKwkJInNubXBkIC14IGxvY2FsaG9zdDo3MDUgLi4uLiIKKyAgd291bGQgc3RhcnQgdGhlIGFnZW50IGxpc3RlbmluZyBvbiB0aGUgVENQIHBvcnQgNzA1IGZvciBjb25uZWN0aW9ucworICBmcm9tIHRoZSBsb2NhbCBzeXN0ZW0uCisKKyAgVGhlIG1haW4gTmV0LVNOTVAgYWdlbnQgY2FuIGFsc28gYmUgcnVuIGluIGEgInN1YmFnZW50IiBtb2RlLCBhbmQKKyAgdGhpcyB1c2VzIHRoZSBzYW1lIGNvbW1hbmQtbGluZSBvcHRpb24gdG8gc3BlY2lmeSBhIGRpZmZlcmVudAorICBBZ2VudFggc29ja2V0LiAgU28KKwkJInNubXBkIC1YIC14IGxvY2FsaG9zdDo3MDUgLi4uLiIKKyAgd291bGQgc3RhcnQgaXQgYXMgYSBzdWJhZ2VudCwgYW5kIGNvbm5lY3QgdG8gdGhlIG1hc3RlciBhZ2VudAorICBsaXN0ZW5pbmcgb24gVENQIHBvcnQgNzA1IG9uIHRoZSBzYW1lIHN5c3RlbS4KKworICBBIHN1YmFnZW50IHJ1bm5pbmcgZW1iZWRkZWQgd2l0aGluIHNvbWUgb3RoZXIgYXBwbGljYXRpb24gd2lsbAorICB0eXBpY2FsbHkgbm90IHVuZGVyc3RhbmQgdGhlIHNhbWUgY29tbWFuZC1saW5lIG9wdGlvbnMuICBUaGlzCisgIHdpbGwgbmVlZCB0byBzZXQgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBwcm9ncmFtbWF0aWNhbGx5LgorICBGb3IgZXhhbXBsZSwgdGhlIGV4YW1wbGUgc3ViYWdlbnQgZHJpdmluZyBjb2RlIGZyb20gdGhlIE5ldC1TTk1QCisgICJzdWJhZ2VudCBwcm9ncmFtIiB0dXRvcmlhbCAob24gdGhlIHByb2plY3Qgd2ViIHBhZ2VzKSBjb3VsZAorICBiZSBtYWRlIHRvIGNvbm5lY3QgdG8gdGhlIHNhbWUgVENQIHBvcnQgYnkgYWRkaW5nIHRoZSBsaW5lCisgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tFVCwgImxvY2FsaG9zdDo3MDUiKTsKKyAgYmVmb3JlIHRoZSAnaW5pdF9hZ2VudCcgY2FsbC4KKworICBIb3dldmVyLCBzZWUgdGhlIG1lbnRpb24gb2YgQWdlbnRYIHNlY3VyaXR5IChvciB0aGUgbGFjayBvZiBpdCEpCisgIGluIHRoZSBwcmV2aW91cyBlbnRyeS4KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9jb21iaW5lX3R3b19jb3BpZXNfb2ZfdGhlX19taWJfX190cmVlX2Zyb21fc2VwYXJhdGVfc3ViYWdlbnRzXyI+CitIb3cgY2FuIEkgY29tYmluZSB0d28gY29waWVzIG9mIHRoZSAnbWliMicgdHJlZSBmcm9tIHNlcGFyYXRlIHN1YmFnZW50cz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgV2l0aCB0aGUgNC54IGxpbmUgYWdlbnQsIHlvdSBjYW4ndC4gIFNvcnJ5IGFib3V0IHRoYXQuCisKKyAgV2l0aCB0aGUgNS4wIGFnZW50LCB0aGlzIGlzIHBvc3NpYmxlIGJ5IHVzaW5nIHRoZSBTTk1QdjMgY29udGV4dCBzdHJpbmcKKyAgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBwYXJhbGxlbCBNSUIgdHJlZXMuICBUaGlzIGNhbiBiZSBzZXQgdXAgZm9yIGFuCisgIGluZGl2aWR1YWwgTUlCIGltcGxlbWVudGF0aW9uIG1vZHVsZSB3aGVuIGl0IHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUKKyAgbWFpbiBhZ2VudCBmcmFtZXdvcmsgKGVpdGhlciBkaXJlY3RseSwgb3IgdmlhIEFnZW50WCkuICBJdCBjYW4gYWxzbworICBiZSBzZXQgdXAgZm9yIGEgcHJveGllZCBzdWJhZ2VudCBhcyBwYXJ0IG9mIHRoZSBwcm94eSBjb25maWd1cmF0aW9uCisgIGVudHJ5IChzZWUgJ3NubXBkLmNvbmYoNSknKS4KKyAgICBUaGlzIGZhY2lsaXR5IGlzIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBTTk1QdjEgb3IgU05NUHYyYworICByZXF1ZXN0cyAoYWx0aG91Z2ggaXQgb3VnaHQgdG8gYmUgcG9zc2libGUgdG8gdXNlIHRoZSBjb21tdW5pdHkKKyAgc3RyaW5nIGluIGEgc2ltaWxhciB3YXkpLgorCisgICAgQW5vdGhlciB3YXkgdG8gaGFuZGxlIHRoaXMgd291bGQgYmUgdG8gdHdlYWsgb25lIG9mIHRoZSBzdWJhZ2VudHMgdG8KKyAgdXNlIGEgZGlmZmVyZW50IHNldCBvZiAobm9uLXN0YW5kYXJkKSBPSUQgYXNzaWdubWVudHMgLSBwZXJoYXBzIGJ5CisgIHJlbG9jYXRpbmcgdGhlIHdob2xlIG9mIHRoZSBzdWJ0cmVlIHRvIGFub3RoZXIgKHByaXZhdGUpIE9JRC4gIFRoaXMKKyAgaXMgbm90IGlkZWFsLCBidXQgc2hvdWxkIHdvcmsgd2l0aCBhbGwgY29uZmlndXJhdGlvbnMuCisKKworCis8YSBuYW1lPSJXaGF0X3RyYXBzX2FyZV9zZW50X2J5X3RoZV9hZ2VudF8iPgorV2hhdCB0cmFwcyBhcmUgc2VudCBieSB0aGUgYWdlbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBhZ2VudCBzZW5kcyBhICdjb2xkU3RhcnQoMCknIHRyYXAgd2hlbiBpdCBmaXJzdCBzdGFydHMgdXAsIGFuZCBhbgorICBlbnRlcnByaXNlLXNwZWNpZmljIHRyYXAgJ25zTm90aWZ5U2h1dGRvd24nIChvciAndWNkU2h1dGRvd24nKSB3aGVuIGl0CisgIHN0b3BzLiAgSXQgY2FuIGFsc28gYmUgY29uZmlndXJlZCB0byBzZW5kIGFuICdhdXRoZW50aWNhdGlvbkZhaWx1cmUoNCknCisgIHRyYXAgd2hlbiBpdCByZWNlaXZlcyBhbiBTTk1QdjEgcmVxdWVzdCB1c2luZyBhbiB1bmtub3duIGNvbW11bml0eSBuYW1lLgorICBUaGUgTmV0LVNOTVAgYWdlbnQgZ2VuZXJhdGVzIGFuIGVudGVycHJpc2Utc3BlY2lmaWMgdHJhcCAnbnNOb3RpZnlSZXN0YXJ0JworICAocmF0aGVyIHRoYW4gdGhlIHN0YW5kYXJkICdjb2xkU3RhcnQoMCknIG9yICd3YXJtU3RhcnQoMSknIHRyYXBzKSBvbgorICByZWNlaXZpbmcgYSBIVVAgc2lnbmFsIC0gdHlwaWNhbGx5IGFmdGVyIGJlaW5nIHJlLWNvbmZpZ3VyZWQuCisKKyAgICBUaGUgYWdlbnQgZG9lcyBub3Qgc2VuZCAnbGlua1VwJyBvciAnbGlua0Rvd24nIHRyYXBzIGJ5IGRlZmF1bHQuICBUaGUKKyAgTmV0LVNOTVAgYWdlbnQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZG8gdGhpcyB1c2luZyB0aGUgJ21vbml0b3InIGNvbmZpZworICBkaXJlY3RpdmUuICBTZWUgdGhlICdzbm1wZC5jb25mKDUpJyBtYW4gcGFnZSAodW5kZXIgRElTTUFOLUVWRU5ULU1JQikKKyAgZm9yIGRldGFpbHMgKGluY2x1ZGluZyB0aGUgbmVlZCBmb3IgYW4gJ2FnZW50U2VjTmFtZScgc2V0dGluZykuCisKKyAgICBTaW1pbGFybHksIGl0IGRvZXMgbm90IGdlbmVyYXRlIHRyYXBzIGJ5IGRlZmF1bHQgd2hlbiBvbmUgb2YgdGhlCisgIG1vbml0b3JlZCBjaGFyYWN0ZXJpc3RpY3MgKGRpc2sgdXNhZ2UsIHJ1bm5pbmcgcHJvY2Vzc2VzLCBldGMpIGVudGVycyBvcgorICBsZWF2ZXMgYW4gZXJyb3Igc3RhdGUuICBUaGlzIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSAnZGVmYXVsdE1vbml0b3JzJworICBjb25maWcgZGlyZWN0aXZlIChhbHNvIGRvY3VtZW50ZWQgdW5kZXIgRElTTUFOLUVWRU5ULU1JQikuICBOb3RlIHRoYXQKKyAgdGhlc2UgZmFjaWxpdGllcyBhcmUgb25seSBhdmFpbGFibGUgd2l0aCB0aGUgdjUgTmV0LVNOTVAgYWdlbnQsIGFuZCBhcmUKKyAgbm90IHN1cHBvcnRlZCBieSB0aGUgdjQgVUNEIGFnZW50LgorCisKKworPGEgbmFtZT0iV2hlcmVfYXJlX3RoZXNlX3RyYXBzX3NlbnRfdG9fIj4KK1doZXJlIGFyZSB0aGVzZSB0cmFwcyBzZW50IHRvPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFdpdGggYWxsIHRoZXNlIGFsZXJ0cywgdGhlIGFnZW50IGFsc28gbmVlZHMgdG8gYmUgY29uZmlndXJlZCB3aXRoCisgIChvbmUgb3IgbW9yZSkgZGVzdGluYXRpb25zIHRvIHNlbmQgdGhlbSB0bywgc3BlY2lmeWluZyB0aGUgdHlwZSBvZgorICBub3RpZmljYXRpb24gKHYxIG9yIHYyIHRyYXAsIG9yIHYyIGluZm9ybSkgYW5kIHRoZSBjb21tdW5pdHkgbmFtZSB0bworICB1c2UuICBUaGlzIHVzZXMgdGhlIHNubXBkLmNvbmYgZGlyZWN0aXZlcyAndHJhcHNpbmsnLCAndHJhcDJzaW5rJyBhbmQKKyAgJ2luZm9ybXNpbmsnIGZvciB0aGUgZGVzdGluYXRpb24gdHlwZSwgYW5kICd0cmFwY29tbXVuaXR5JyBmb3IgdGhlCisgIGNvbW11bml0eSBuYW1lLiAgU05NUHYzIGRlc3RpbmF0aW9ucyBjYW4gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgZGlyZWN0aXZlCisgICd0cmFwc2VzcycuICAgU2VlIHRoZSAnc25tcGQuY29uZig1KScgbWFuIHBhZ2UgZm9yIGRldGFpbHMuCisKKyAgICBOb3RlIHRoYXQgdGhlc2UgZGlyZWN0aXZlcyBjb250cm9sIHRoZSB0eXBlIG9mIG5vdGlmaWNhdGlvbiB0aGF0IGlzCisgIGdlbmVyYXRlZC4gIFRoaXMgaXMgY29tcGxldGVseSBzZXBhcmF0ZSBmcm9tIHRoZSBzdHlsZSBvZiBBUEkgdXNlZCB0bworICByZXF1ZXN0IHRoYXQgdGhlIG5vdGlmaWNhdGlvbiBzaG91bGQgYmUgc2VudC4gIElmIGEgbW9kdWxlIGludm9rZXMgdGhlCisgIHYxLXN0eWxlIEFQSSAnc2VuZF9lYXN5X3RyYXAnLCB0aGlzIHdpbGwgc3RpbGwgc2VuZCBTTk1QdjIgbm90aWZpY2F0aW9ucworICB0byBkZXN0aW5hdGlvbnMgY29uZmlndXJlZCB1c2luZyAndHJhcDJzaW5rJyBvciAnaW5mb3Jtc2luaycgKGFuZCB2aWNlCisgIHZlcnNhKS4KKworICAgIEEgY29uZmlndXJhdGlvbiBibG9jayBzdWNoIGFzCisKKyAgICAgICAgdHJhcHNpbmsgICBsb2NhbGhvc3QKKyAgICAgICAgdHJhcDJzaW5rICBsb2NhbGhvc3QKKyAgICAgICAgaW5mb3Jtc2luayBsb2NhbGhvc3QKKworICB3aWxsIHJlc3VsdCBpbiAqdGhyZWUqIG5vdGlmaWNhdGlvbnMgYmVpbmcgc2VudCBmb3IgZWFjaCBjYWxsIHRvCisgICdzZW5kX2Vhc3lfdHJhcCcgKG9yICdzZW5kX3YydHJhcCcpLiAgU2VlICdzbm1wX3RyYXBfYXBpKDMpJyBmb3IgZGV0YWlscy4KKworICAgIE5vdGUgdGhhdCBhbGwgbm90aWZpY2F0aW9ucyB3aWxsIGJlIHNlbnQgdG8gYWxsIGRlc3RpbmF0aW9ucy4gIFRoZQorICBhZ2VudCBkb2VzIG5vdCAoY3VycmVudGx5KSBzdXBwb3J0IG5vdGlmaWNhdGlvbiBmaWx0ZXJpbmcuCisgCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX3NlbmRfYV9wYXJ0aWN1bGFyX3RyYXBfdG9fc2VsZWN0ZWRfZGVzdGluYXRpb25zXyI+CitIb3cgY2FuIEkgc2VuZCBhIHBhcnRpY3VsYXIgdHJhcCB0byBzZWxlY3RlZCBkZXN0aW5hdGlvbnM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBXaXRoIHRoZSB2NCBVQ0QgYWdlbnQsIHRoaXMgaXNuJ3QgcG9zc2libGUgKG9yIGF0IGxlYXN0IG5vdAorICBlYXNpbHkpLiAgV2hlbiB5b3UgcmVxdWVzdCB0aGUgYWdlbnQgdG8gZ2VuZXJhdGUgYSB0cmFwICh1c2luZworICBlaXRoZXIgJ3NlbmRfdjJ0cmFwJyBvciAnc2VuZF9lYXN5X3RyYXAnKSwgdGhpcyB3aWxsIGJlIHNlbnQKKyAgdG8gKmFsbCogdGhlIGtub3duIGRlc3RpbmF0aW9ucy4KKworICAgIFRoZSB2NSBOZXQtU05NUCBhZ2VudCBpbnRyb2R1Y2VkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIHRoZQorICBzbm1wTm90aWZ5RmlsdGVyVGFibGUgd2hpY2ggaXMgZGVzaWduZWQgdG8gYWxsb3cgdGhpcyBzb3J0IG9mCisgIHNlbGVjdGl2ZSB0cmFwIGRpcmVjdGlvbiwgdGhvdWdoIHRoaXMgaXMgbm90IGN1cnJlbnRseSBhY3RpdmUuCisgIChUaGUgdGFibGVzIGFyZSBwcmVzZW50LCBidXQgdGhlIGluZm9ybWF0aW9uIGlzIG5vdCBjb25zdWx0ZWQpCisgIERvY3VtZW50YXRpb24gb24gaG93IHRvIHVzZSB0aGlzIGZhY2lsaXR5IHdpbGwgYXBwZWFyIG9uY2UgdGhlCisgIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBwcm9wZXJseS4KKworCisKKzxhIG5hbWU9IldoeV9kb2VzX2NhbGxpbmdfX3NlbmRfdl90cmFwX19nZW5lcmF0ZV9hbl9TTk1Qdl9fdHJhcF9fb3JfdmljZV92ZXJzYV9fIj4KK1doeSBkb2VzIGNhbGxpbmcgJ3NlbmRfdjJ0cmFwJyBnZW5lcmF0ZSBhbiBTTk1QdjEgdHJhcCAob3IgdmljZSB2ZXJzYSk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgdHdvIHZlcnNpb25zIG9mIHRoZSB0cmFwIEFQSSBjYWxscyBhcmUgY29uY2VybmVkIHdpdGggaG93CisgIHRoZSB0cmFwIGlzIHJlcHJlc2VudGVkIHdoZW4gaXQgaXMgcGFzc2VkICppbiogdG8gdGhlIEFQSSwgbm90CisgIHRoZSB2ZXJzaW9uIG9mIHRoZSB0cmFwIFBEVSB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgZ2VuZXJhdGVkIGJ5CisgIHRoZSBhZ2VudC4gIFRoYXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29uZmlndXJhdGlvbiB0b2tlbiB1c2VkCisgIHRvIHNldCB1cCB0aGUgdHJhcCBkZXN0aW5hdGlvbi4KKworICAgIFJlbWVtYmVyIHRoYXQgaW4gZ2VuZXJhbCwgYWxsIHRyYXBzIGFyZSBzZW50IHRvIGFsbCBkZXN0aW5hdGlvbnMuCisgIFRoaXMgbWVhbnMgdGhhdCBhIHRyYXAgc3BlY2lmaWVkIHVzaW5nIHRoZSBTTk1QdjEgdHJhcCBzeW50YXgKKyAgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHRoZSBTTk1QdjIgZm9ybWF0IGJlZm9yZSBpdCBjYW4gYmUgc2VudAorICB0byBhbiBTTk1QdjIgKG9yIFNOTVB2MykgZGVzdGluYXRpb24uICBTaW1pbGFybHksIGEgdHJhcCBzcGVjaWZpZWQKKyAgdXNpbmcgdGhlIFNOTVB2MiBzeW50YXggbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHRoZSBTTk1QdjEgZm9ybWF0CisgIGJlZm9yZSBpdCBjYW4gYmUgc2VudCB0byBhbiBTTk1QdjEgc2luay4KKworICAgIEVzc2VudGlhbGx5LCB0aGUgQVBJIGNhbGwgdG8gdXNlIGRlcGVuZHMgb24gd2hhdCB5b3UgYXNraW5nIGZvciwKKyAgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHdoYXQgdGhlIHJlY2lwaWVudHMgd2lsbCBhY3R1YWxseSBnZXQhCisgIFNlZSAnc25tcF90cmFwX2FwaSgzKScgZm9yIGEgZnVsbGVyIGV4cGxhbmF0aW9uLgorCisKKworPGEgbmFtZT0iV2hlbl9JX3J1bl90aGVfYWdlbnRfaXRfcnVuc19hbmRfdGhlbl9xdWl0c193aXRob3V0X3N0YXlpbmdfYXJvdW5kX19XaHlfIj4KK1doZW4gSSBydW4gdGhlIGFnZW50IGl0IHJ1bnMgYW5kIHRoZW4gcXVpdHMgd2l0aG91dCBzdGF5aW5nIGFyb3VuZC4gV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBGaXJzdGx5LCBhcmUgeW91IGNlcnRhaW4gdGhhdCB0aGlzIGlzIHdoYXQgaXMgaGFwcGVuaW5nPworCisgIFRoZSBub3JtYWwgb3BlcmF0aW9uIG9mIHRoZSBhZ2VudCBpcyB0byAnZm9yaycgaXRzZWxmIGludG8gdGhlCisgIGJhY2tncm91bmQsIGRldGFjaGluZyBpdHNlbGYgc28gdGhhdCBpdCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcgZXZlbgorICB3aGVuIHlvdSBsb2cgb3V0LCBhbmQgZnJlZWluZyB0aGUgY29tbWFuZCBsaW5lIGZvciBzdWJzZXF1ZW50IHVzZS4KKyAgVGhpcyBsb29rcyBhdCBmaXJzdCBzaWdodCBhcyBpZiB0aGUgYWdlbnQgaGFzIGRpZWQsIGJ1dCB1c2luZyAncHMnCisgIHRvIHNob3cgYWxsIHByb2Nlc3NlcyBzaG91bGQgcmV2ZWFsIHRoYXQgdGhlIGFnZW50IGlzIHN0aWxsIHJ1bm5pbmcuCisKKyAgVG8gcHJldmVudCB0aGlzIGJlaGF2aW91ciAoc3VjaCBhcyB3aGVuIGF0dGVtcHRpbmcgdG8gZGVidWcgdGhlCisgIGFnZW50KSwgeW91IGNhbiBzdGFydCBpdCB3aXRoIHRoZSAnLWYnIGZsYWcuICBUaGlzIHN1cHByZXNzZXMgdGhlCisgIGZvcmssIGFuZCB0aGUgYWdlbnQgd2lsbCBydW4gYXMgYSAnbm9ybWFsJyBjb21tYW5kLiAgSXQncyBhbHNvIG9mdGVuCisgIHVzZWZ1bCB0byB1c2UgdGhlICctTCcgKG9yICctTGUnKSBmbGFnLCB0byBsb2cgbWVzc2FnZXMgdG8gc3Rkb3V0LgorCisgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiAncHMnIHNob3dzIHRoYXQgdGhlIGFnZW50IGlzIG5vdCBydW5uaW5nLCB0aGVuCisgIHRoaXMgaXMgYW4gZXJyb3IsIGFuZCBwcm9iYWJseSBzaG93IHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4KKyAgc3RhcnRpbmcgdGhlIGFnZW50IHVwLiAgQ2hlY2sgdGhlIGFnZW50IGxvZyBmaWxlIGZvciBhbnkgZXJyb3IgbWVzc2FnZXMsCisgIG9yIHJ1biBpdCB3aXRoICctZiAtTCcgYW5kIHNlZSB3aGF0IGl0IHJlcG9ydHMuCisKKyAgT25lIGtub3duIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgJ3VjZC1zbm1wJyBSUE0gZGlzdHJpYnV0ZWQgYnkgUmVkSGF0LgorICBUaGlzIGFnZW50IGNyYXNoZXMgaWYgdGhlcmUgaXMgYSAnZGlzaycgY29uZmlndXJhdGlvbiBlbnRyeSBpbiB0aGUKKyAgc25tcGQuY29uZiBmaWxlLiAgSXQgaXMgbm90IGN1cnJlbnRseSBrbm93biB3aGF0IGNhdXNlcyB0aGlzLCBhcyB0aGlzCisgIHNldHRpbmcgd29ya3MgY29ycmVjdGx5IGlmIHRoZSBhZ2VudCBpcyBjb21waWxlZCBmcm9tIHNvdXJjZS4KKworCisKKzxhIG5hbWU9IkFmdGVyX2Ffd2hpbGVfdGhlX2FnZW50X3N0b3BzX3Jlc3BvbmRpbmdfX2FuZF9zdGFydHNfZWF0aW5nX0NQVV90aW1lX19fV2h5XyI+CitBZnRlciBhIHdoaWxlIHRoZSBhZ2VudCBzdG9wcyByZXNwb25kaW5nLCBhbmQgc3RhcnRzIGVhdGluZyBDUFUgdGltZS4gIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBpcyBtb3N0IGNvbW1vbmx5IHNlZW4gd2hlbiBwZXJmb3JtaW5nIGFuICJzbm1wd2FsayIgb24gYW4gYWdlbnQKKyAgdGhhdCdzIGVpdGhlciB1c2luZyBhIGRlZmF1bHQgInZlbmRvciBwcm92aWRlZCIgY29uZmlndXJhdGlvbgorICAodHlwaWNhbGx5IGFjY2VzcyB0byB0aGUgJ3N5c3RlbScgZ3JvdXAgb25seSksIG9yIHdoaWNoIGlzIHRyeWluZworICB0byByZXN0cmljdCBhY2Nlc3MgZm9yIGluZGl2aWR1YWwgdXNlcnMgb3IgY29tbXVuaXRpZXMgdG8gYSBzdWJzZXQKKyAgb2YgdGhlIHdob2xlIE9JRCB0cmVlLgorCisgIFRoZSBhZ2VudCBpbXBsZW1lbnRhdGlvbiBvZiAiR2V0TmV4dCIgcHJvY2Vzc2luZyBpcyByZWxhdGl2ZWx5CisgIGluZWZmaWNpZW50IHdoZW4gZGVhbGluZyB3aXRoIGluYWNjZXNzaWJsZSBvYmplY3RzLCBhbmQgaXQgaXMgcXVpdGUKKyAgZWFzeSBmb3IgdGhlIGNsaWVudHMgdG8gdGltZS1vdXQgYW5kIHJldHJ5IGEgcmVxdWVzdCwgd2hpbGUgdGhlIGFnZW50CisgIGlzIHN0aWxsIHRyeWluZyB0byBwcm9jZXNzIHRoZSBvcmlnaW5hbC4gIElmIHRoaXMgaGFwcGVucyBjb250aW51YWxseQorICAoYXMgaXMgdHlwaWNhbGx5IHRoZSBjYXNlIHdpdGggYW4gc25tcHdhbGspLCB0aGUgYWdlbnQgY2FuIGdldCBzd2FtcGVkCisgIGJ5IHRoaXMgYmFja2xvZy4KKworICBUaGUgNS4wLnggbGluZSBoYXMgbm93IGFkZHJlc3NlZCB0aGlzLCBzdGFydGluZyB3aXRoIHRoZSA1LjAuNyByZWxlYXNlLgorICBUaGUgNC4yLnggbGluZSBzdGlsbCBzdWZmZXJzIGZyb20gdGhpcyBwcm9ibGVtLCBhbmQgaXQgaXMgdW5saWtlbHkgdGhhdAorICB0aGlzIHdpbGwgYmUgZml4ZWQuICAoVGhlIDUuMC43IGFwcHJvYWNoIHJlbGllcyBvbiBzb21lIG9mIHRoZSBuZXcKKyAgZmVhdHVyZXMgaW4gdGhlIDUuMC54IGxpbmUsIGFuZCBpdCBoYXMgbm90IHByb3ZlZCBwb3NzaWJsZSB0byBhcHBseQorICB0aGlzIHRvIHRoZSA0LjIueCBjb2RlIGJhc2UpLgorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX3N0b3Bfb3RoZXJfcGVvcGxlX2dldHRpbmdfYXRfbXlfYWdlbnRfIj4KK0hvdyBjYW4gSSBzdG9wIG90aGVyIHBlb3BsZSBnZXR0aW5nIGF0IG15IGFnZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBGaXJzdGx5LCBhcmUgeW91IGNvbmNlcm5lZCB3aXRoIHJlYWQgYWNjZXNzIG9yIHdyaXRlIGFjY2Vzcz8KKworICBBcyBmYXIgYXMgY2hhbmdpbmcgdGhpbmdzIG9uIHRoZSBhZ2VudCBpcyBjb25jZXJuZWQsIHRoZXJlIGlzIHJlbGF0aXZlbHkKKyAgbGl0dGxlIHRoYXQgY2FuIGFjdHVhbGx5IGJlIGFsdGVyZWQgKHNlZSB0aGUgYW5zd2VyIHRvICIgSSBjYW5ub3Qgc2V0CisgIGFueSB2YXJpYWJsZXMgaW4gdGhlIE1JQiIgYWJvdmUpLgorCisgICAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXhhbXBsZSBjb25maWcgZmlsZSwgdGhpcyBpcyBzZXQgdXAgdG8gYWxsb3cKKyAgcmVhZCBhY2Nlc3MgZnJvbSB5b3VyIGxvY2FsIG5ldHdvcmssIGFuZCB3cml0ZSBhY2Nlc3Mgb25seSBmcm9tIHRoZQorICBzeXN0ZW0gaXRzZWxmIChhY2Nlc3NlZCBhcyAnbG9jYWxob3N0JyksIGJvdGggdXNpbmcgdGhlIGNvbW11bml0eSBuYW1lCisgIHNwZWNpZmllZC4gIFlvdSB3aWxsIG5lZWQgdG8gc2V0IGFwcHJvcHJpYXRlIHZhbHVlcyBmb3IgYm90aCBORVRXT1JLCisgIGFuZCBDT01NVU5JVFkgaW4gdGhpcyBmaWxlIGJlZm9yZSB1c2luZyBpdC4KKyAgICBUaGlzIG1lY2hhbmlzbSBjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbnRyb2wgYWNjZXNzIG11Y2ggbW9yZSBwcmVjaXNlbHkuCisgIChzZWUgdGhlIG5leHQgcXVlc3Rpb25zIGZvciBkZXRhaWxzKQorCisgIE90aGVyIG9wdGlvbnMgaW5jbHVkZToKKwktIEJsb2NraW5nIGFjY2VzcyB0byBwb3J0IDE2MSBmcm9tIG91dHNpZGUgeW91ciBvcmdhbmlzYXRpb24KKwkJKHVzaW5nIGZpbHRlcnMgb24gbmV0d29yayByb3V0ZXJzKQorCS0gQ29uZmlndXJpbmcgVENQIHdyYXBwZXIgc3VwcG9ydCAoIi0td2l0aC1saWJ3cmFwIikKKwkJVGhpcyB1c2VzIHRoZSBUQ1AgJ2xpYndyYXAnIGxpYnJhcnkgKGF2YWlsYWJsZSBzZXBhcmF0ZWx5KQorCQl0byBhbGxvdy9kZW55IGFjY2VzcyB2aWEgL2V0Yy9ob3N0cy57YWxsb3csZGVueX0KKworICBGb3Igc3RyaWN0IHNlY3VyaXR5IHlvdSBzaG91bGQgdXNlIG9ubHkgU05NUHYzLCB3aGljaCBpcyB0aGUgc2VjdXJlCisgIGZvcm0gb2YgdGhlIHByb3RvY29sLgorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX2xpc3Rlbl9vbl9qdXN0X29uZV9wYXJ0aWN1bGFyX2ludGVyZmFjZV8iPgorSG93IGNhbiBJIGxpc3RlbiBvbiBqdXN0IG9uZSBwYXJ0aWN1bGFyIGludGVyZmFjZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE5vcm1hbGx5LCB0aGUgYWdlbnQgd2lsbCBiaW5kIHRvIHRoZSBzcGVjaWZpZWQgcG9ydCBvbiBhbGwgaW50ZXJmYWNlcworICBvbiB0aGUgc3lzdGVtLCBhbmQgYWNjZXB0IHJlcXVlc3QgcmVjZWl2ZWQgZnJvbSBhbnkgb2YgdGhlbS4gIFdpdGgKKyAgdmVyc2lvbiA0LjIsIHRoZSAnLXAnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBsaXN0ZW4gb24gaW5kaXZpZHVhbAorICBpbnRlcmZhY2VzLiAgRm9yIGV4YW1wbGUsCisJCisJCQlzbm1wZCAtcCAxNjFAMTI3LjAuMC4xCisKKyAgd2lsbCBsaXN0ZW4gKG9uIHRoZSBzdGFuZGFyZCBwb3J0KSBvbiB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIG9ubHksIGFuZAorCisJCQlzbm1wZCAtcCA2MTYxQDEwLjAuMC4xCisKKyAgd2lsbCBsaXN0ZW4gb24gcG9ydCA2MTYxLCBvbiB0aGUgKGludGVybmFsIG5ldHdvcmspIGludGVyZmFjZSB3aXRoIGFkZHJlc3MKKyAgMTAuMC4wLjEuICAgSWYgeW91IHdhbnQgdG8gbGlzdGVuIG9uIG11bHRpcGxlIGludGVyZmFjZXMgKGJ1dCBub3QgYWxsKSwKKyAgdGhlbiBzaW1wbHkgcmVwZWF0IHRoaXMgb3B0aW9uIGZvciBlYWNoIG9uZToKKworCQlzbm1wZCAtcCAxNjFAMTI3LjAuMC4xIC1wIDYxNjFAMTAuMC4wLjEKKworICBUaGUgdjUgTmV0LVNOTVAgYWdlbnQgaGFzIGEgc2ltaWxhciBmYWNpbGl0eSwgYnV0IGRvZXMgbm90IHVzZSB0aGUgJy1wJworICBjb21tYW5kIGxpbmUgb3B0aW9uIGZsYWcuICBJbnN0ZWFkLCB0aGUgcG9ydHMgYW5kL29yIGludGVyZmFjZXMgdG8gbGlzdGVuCisgIG9uIGFyZSBzaW1wbHkgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGZvbGxvd2luZyBhbnkgb3RoZXIgb3B0aW9ucy4gIEFsc28sCisgIHRoZSBzeW50YXggb2YgcG9ydCBhbmQgaW50ZXJmYWNlIGlzIHNsaWdodGx5IGRpZmZlcmVudCAoaW50ZXJmYWNlOnBvcnQpLgorICAgIFNvIHRoZSB0aHJlZSBleGFtcGxlcyBhYm92ZSB3b3VsZCBiZQorCisJCQlzbm1wZCAxMjcuMC4wLjE6MTYxCisJCQlzbm1wZCAxMjcuMC4wLjE6NjE2MQorCQkJc25tcGQgMTI3LjAuMC4xOjE2MSAxMjcuMC4wLjE6NjE2MQorCisgIFRoZSBBZ2VudFggcG9ydCBvcHRpb24gKCcteCcpIHdvcmtzIGluIG11Y2ggdGhlIHNhbWUgd2F5LCB1c2luZyB0aGUKKyAgImhvc3Q6cG9ydCIgc3ludGF4IChpbiBib3RoIDQuMiBhbmQgNS4wIGxpbmVzIC0gYW5kIHllcywgdGhpcyAqaXMqIGFuCisgIGluY29uc2lzdGVuY3kgaW4gNC4yISkKKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2NvbmZpZ3VyZV9hY2Nlc3NfY29udHJvbF8iPgorSG93IGRvIEkgY29uZmlndXJlIGFjY2VzcyBjb250cm9sPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgc2ltcGxlc3Qgd2F5IGlzIHRvIHVzZSB0aGUgY29uZmlndXJlIGRpcmVjdGl2ZXM6CisKKwkJcm9jb21tdW5pdHkgcHVibGljCShmb3IgU05NUHYxLzJjKQorCQlyd2NvbW11bml0eSBwcml2YXRlCisgIG9yCisJCXJvdXNlciB1c2VyMQkJKGZvciBTTk1QdjMpCisJCXJ3dXNlciB1c2VyMgorCisgIFRoZXNlIHNwZWNpZnkgdGhlIGNvbW11bml0eSBuYW1lcyBvciBzZWN1cml0eSBuYW1lcyB0byBhY2NlcHQgZm9yCisgIHJlYWQtb25seSBhbmQgcmVhZC13cml0ZSBhY2Nlc3MgdG8gdGhlIHdob2xlIG9mIHRoZSBzdXBwb3J0ZWQgTUlCIHRyZWUuCisgIChPYnZpb3VzbHkgeW91IHNob3VsZCBjaGFuZ2UgdGhlc2UgbmFtZXMgdG8gbWF0Y2ggeW91ciByZXF1aXJlbWVudHMgLQorICB3aGljaCBpcyBhIHBhcnRpY3VsYXJseSBnb29kIGlkZWEgaW4gdGhlIGNhc2Ugb2YgJ3J3Y29tbXVuaXR5JyEpCisKKyAgTm90ZSB0aGF0IGl0IGlzICpub3QqIG5lY2Vzc2FyeSAoYW5kIG5vdCBhZHZpc2libGUpIHRvIHNwZWNpZnkgdGhlCisgIHNhbWUgY29tbXVuaXR5IG5hbWUgZm9yIGJvdGggcm9jb21tdW5pdHkgYW5kIHJ3Y29tbXVuaXR5IGRpcmVjdGl2ZXMuCisgIFRoZSByd2NvbW11bml0eSBzZXR0aW5nIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgcm9jb21tdW5pdHkgYWNjZXNzLAorICBhbmQgaGF2aW5nIGJvdGggbGluZXMgKHdpdGggdGhlIHNhbWUgY29tbXVuaXR5IG5hbWUpIG1heSByZXN1bHQgaW4KKyAgYXBwYXJlbnRseSBpbmNvbnNpc3RlbnQgYmVoYXZpb3VyLiAgT25seSB1c2UgYm90aCBzZXR0aW5ncyB3aGVuCisgIHNwZWNpZnlpbmcgKmRpZmZlcmVudCogY29tbXVuaXR5IG5hbWVzLgorICAgIFRoZSBzYW1lIGhvbGRzIHRydWUgZm9yIHJvdXNlciBhbmQgcnd1c2VyLgorCisgIEFsbCBmb3VyIG9mIHRoZXNlIHNldHRpbmdzIGNhbiBjYW4gYWxzbyBiZSByZXN0cmljdGVkIHRvIHBhcnRpY3VsYXIKKyAgc3VidHJlZXMsIGFuZC9vciByZXF1ZXN0IHNvdXJjZXMuICBTZWUgJ3NubXBkLmNvbmYoNSknIGZvciBkZXRhaWxzLgorCisgIFRoZXNlIGRpcmVjdGl2ZXMgYXJlIGVmZmVjdGl2ZWx5IHdyYXBwZXJzIHJvdW5kIHRoZSBjb3JlIGFjY2VzcyBjb250cm9sCisgIG1lY2hhbmlzbSwgd2hpY2ggdXNlcyB0aGUgZm91ciBkaXJlY3RpdmVzICdjb20yc2VjJywgJ2dyb3VwJywgJ3ZpZXcnCisgIGFuZCAnYWNjZXNzJyB0byBwcm92aWRlIGEgbW9yZSBlZmZpY2llbnQgYW5kIGZsZXhpYmxlIGNvbnRyb2wKKyAgb3ZlciB3aG8gY2FuIGFjY2VzcyB3aGljaCBwb3J0aW9ucyBvZiB0aGUgdHJlZS4KKworICAgIFNlZSB0aGUgbmV4dCBxdWVzdGlvbiBmb3IgdGhlIGdvcnkgZGV0YWlscywgYW5kIHRoZSBlbnRyeSBhZnRlcgorICB0aGF0IGZvciBzZXR0aW5nIHVwIFNOTVB2MyB1c2Vycy4KKworCisKKzxhIG5hbWU9IklfZG9uX3RfdW5kZXJzdGFuZF90aGVfbmV3X2FjY2Vzc19jb250cm9sX3N0dWZmX19fd2hhdF9kb2VzX2l0X21lYW5fIj4KK0kgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgbmV3IGFjY2VzcyBjb250cm9sIHN0dWZmIC0gd2hhdCBkb2VzIGl0IG1lYW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGlkZWEgYmVoaW5kIHRoZSBuZXcgYWNjZXNzIGNvbnRyb2wgbW9kZWwgaXMgdG8gZ2l2ZSBhIG1vcmUgZmxleGlibGUKKyAgd2F5IG9mIHNwZWNpZnlpbmcgd2hvIGNhbiBzZWUgYW5kIGRvIHdoYXQgd2l0aGluIHRoZSBNSUIgdHJlZS4KKyAgSXQncyBtb3JlIGNvbXBsaWNhdGVkIHRvIHVuZGVyc3RhbmQgdGhhbiB0aGUgc2ltcGxlIGV4YW1wbGUgYWJvdmUsIGJ1dAorICB0aGF0J3MgYmVjYXVzZSBpdCBjYW4gZG8gYSB3aG9sZSBsb3QgbW9yZS4KKworICAgIFRoZXJlIGFyZSBmb3VyIGNvbmZpZ3VyYXRpb24ga2V5d29yZHMgaW4gdGhlIG5ldyBzY2hlbWU6CisJJ2NvbTJzZWMnLCAnZ3JvdXAnLCAndmlldycsIGFuZCAnYWNjZXNzJworCisgIFdlJ2xsIGNvbnNpZGVyIHRoZXNlIG9uZSBhdCBhIHRpbWUsIHN0YXJ0aW5nIHdpdGggJ2FjY2VzcycuCisgIChCZWNhdXNlIEkgZmVlbCBsaWtlIHN0YXJ0aW5nIHdpdGggdGhlIGxhc3Qgb25lLCB0aGF0J3Mgd2h5IC0gT0s/KQorCisKKyAgVGhlICJhY2Nlc3MiIGtleXdvcmQgaGFzIHRoZSBqb2Igb2Ygc3BlY2lmeWluZyB3aG8gaGFzIGFjY2VzcyB0bworICB3aGljaCBiaXRzIG9mIHRoZSBNSUIgdHJlZS4gIFRoaXMgaGFzIGVpZ2h0IHBhcmFtZXRlcnMsIHNvIGNhbiBsb29rCisgIHJhdGhlciBvZmZwdXR0aW5nLiBNb3N0IG9mIHRoZXNlIGNhbiBiZSBzYWZlbHkgbGVmdCB3aXRoIGRlZmF1bHQgdmFsdWVzCisgIGluIG1vc3QgY2FzZXMgKHNvIGRvbid0IHlvdSB3b3JyeSB5b3VyIHByZXR0eSBsaXR0bGUgaGVhZCBhYm91dCB0aGVtKS4KKyAgVGhlIHN5bnRheCBpcworCisJYWNjZXNzIHtncm91cH0gIiIgYW55IG5vYXV0aCBleGFjdCB7cmVhZC10cmVlfSB7d3JpdGUtdHJlZX0ge25vdGlmeS10cmVlfQorCisgIHdoZXJlIHRoZSBlbnRyaWVzIGluIGJyYWNlcyBuZWVkIHRvIGJlIGRlZmluZWQgZWxzZXdoZXJlIChJJ20gY29taW5nCisgIHRvIHRoYXQgLSBiZSBwYXRpZW50ISksIGFuZCB0aGUgcmVzdCBjYW4gYmUgbGVmdCBhcyBzaG93biBoZXJlLgorCisJWyBJZiB5b3UgcmVhbGx5IHdhbnQgdG8ga25vdywgdGhlICdzZWMubW9kZWwnIGZpZWxkIGNhbiAKKwkgIGJlIHVzZWQgdG8gaGF2ZSBhbiBhY2Nlc3MgbGluZSB0aGF0J3Mgb25seSByZWxldmFudCB0bworCSAgcGFydGljdWxhciB2ZXJzaW9ucyBvZiBTTk1QIChzdWNoIHYxIG9yIHYyYykgcmF0aGVyIHRoYW4KKwkgICJhbnkiIHZlcnNpb24sIGFuZCB0aGUgJ3NlYy5sZXZlbCcgZmllbGQgdG8gZW5zdXJlIHRoYXQKKwkgIHRoZSByZXF1ZXN0IG11c3QgYmUgYXV0aGVudGljYXRlZCBvciBlbmNyeXB0ZWQuCisJICAgIFRoZSBjb250ZXh0IGFuZCBwcmVmaXggZmllbGRzIGNhbiBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoCisJICBiZXR3ZWVuIHBhcmFsbGVsIHZlcnNpb25zIG9mIHRoZSBzYW1lIG92ZXJhbGwgT0lEIHRyZWUKKwldCisKKworICBUaGUgInZpZXciIGtleXdvcmQgaXMgdXNlZCB0byBkZWZpbmUgcGFydGljdWxhciBiaXRzIG9mIHRoZSBNSUIgdHJlZSwKKyAgZm9yIHVzZSBpbiB0aGUgbGFzdCB0aHJlZSBmaWVsZCBvZiB0aGUgYWNjZXNzIGVudHJ5LgorICBUaGlzIGhhcyB0aGUgc3ludGF4CisKKwl2aWV3ICB7bmFtZX0gIGluY2x1ZGVkL2V4Y2x1ZGVkICB7c3VidHJlZX0gICB7bWFza30KKworICB3aGVyZSB7bmFtZX0gaXMgdGhlIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBmb3IgdGhpcyB2aWV3IChpLmUuIHdoYXQgc2hvdWxkCisgIGFwcGVhciBpbiB0aGUgYWNjZXNzIGVudHJ5KSwgYW5kIHtzdWJ0cmVlfSBpcyB0aGUgcG9ydGlvbiBvZiB0aGUgTUlCIHRyZWUKKyAgdGhhdCB0aGlzIG5hbWUgcmVmZXJzIHRvIChpbiBlaXRoZXIgbnVtZXJpYyBvciBuYW1lZCBmb3JtKS4KKyAgICBOb3RlIHRoYXQgdGhlIG5hbWUgb2YgdGhlIHZpZXcgZG9lcyBub3QgaGF2ZSB0byBoYXZlIGFueXRoaW5nIHRvIGRvCisgIHdpdGggdGhlIE1JQiBzdWItaWRlbnRpZmllciBuYW1lcyAtIGl0J3MgcHVyZWx5IGFuIGlkZW50aWZ5aW5nIHRhZyBmb3IKKyAgdXNlIHdpdGhpbiB0aGUgY29uZmlnIGZpbGUgKHRob3VnaCBjaG9vc2luZyBhIG1lYW5pbmdmdWwgbmFtZSBpcywgYXMKKyAgYWx3YXlzLCBhIHZlcnkgZ29vZCBpZGVhKS4KKyAgCisgICAgVGhlIHttYXNrfSBmaWVsZCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHdoaWNoIGVsZW1lbnRzIG9mIHRoZSBPSUQgc3VidHJlZQorICBzaG91bGQgYmUgcmVnYXJkZWQgYXMgcmVsZXZhbnQgd2hlbiBkZXRlcm1pbmluZyB3aGljaCB2aWV3IGFuIE9JRCBpcyBpbi4KKyAgTm9ybWFsbHksIHRoZSB3aG9sZSBvZiB0aGUgT0lEIHNob3VsZCBiZSBpbmNsdWRlZCwgYW5kIGluIHRoaXMgY2FzZSB0aGUKKyAgbWFzayBmaWVsZCBjYW4gYmUgb21pdHRlZC4gIFNlZSBzbm1wZC5jb25mIGZvciBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGlzCisgIG1pZ2h0IGJlIHVzZWQuCisgIFRoZSB0aGlyZCBmaWVsZCBjYW4gYmUgdXNlZCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgcGFydGljdWxhciBwb3J0aW9ucworICBvZiB0aGUgTUlCIGZyb20gdGhlIHZpZXcsIGFuZCBkaWZmZXJlbnQgbGluZXMgY2FuIHVzZSB0aGUgc2FtZSB2aWV3IG5hbWUKKyAgdG8gYnVpbGQgdXAgYSBtb3JlIGNvbXBsaWNhdGVkIHZpZXcsIGlmIHRoYXQncyB3aGF0J3MgbmVlZGVkLgorCisgICAgVGhlIHRocmVlIHZpZXcgZmllbGRzIGluIHRoZSBhY2Nlc3MgbGluZSBhcmUgdXNlZCB0byBjb250cm9sIHdoaWNoCisgIHBvcnRpb25zIG9mIHRoZSBNSUIgdHJlZSBhIHBhcnRpY3VsYXIge2dyb3VwfSBjYW4gc2VlIChHRVQgZXQgYWwpLAorICBhbHRlciAoU0VUKSwgb3IgcmVxdWVzdCBOT1RJRllzIG9uLgorCisKKworICAgIFRoYXQncyBkZWFsdCB3aXRoIHRoZSAid2hhdCIgLSBub3cgZm9yIHRoZSAid2hvIi4KKyAgVGhpcyBpcyB0aGUgcm9sZSBvZiB0aGUgImdyb3VwIiBhbmQgImNvbTJzZWMiIGVudHJpZXMuCisKKyAgVGhlICJncm91cCIga2V5d29yZCBnaXZlcyBnZW5lcmFsIGNvbnRyb2wsIGJ5IG1hcHBpbmcgYmV0d2VlbiBhICJzZWN1cml0eQorICBuYW1lIiAoZm9yIGEgcGFydGljdWxhciBwcm90b2NvbCB2ZXJzaW9uKSwgYW5kIHRoZSBpbnRlcm5hbCBuYW1lIHVzZWQgaW4gdGhlCisgIGFjY2VzcyBsaW5lLiAgTm90ZSB0aGF0IHRoZSB0b2tlbiAiYW55IiBpcyBubyBsb25nZXIgYWNjZXB0YWJsZSBmb3IgdGhlCisgIHNlY3VyaXR5IG1vZGVsIC0gdGhlIG9yaWdpbmFsIHN1cHBvcnQgZm9yIHRoaXMgd2FzIGR1ZSBkdWUgdG8gYSBtaXNyZWFkaW5nCisgIG9mIHRoZSBSRkMuICBZb3Ugc2hvdWxkIHJlcGxhY2UgYW55IHN1Y2ggbGluZSB3aXRoIHNlcGFyYXRlIHZlcnNpb25zIGZvcgorICBlYWNoIG9mIHRoZSBkZXNpcmVkIHNlY3VyaXR5IG1vZGVscyAoJ3YxJywgJ3YyYycgJiAndXNtJykuCisKKyAgICBGb3IgU05NUHYxIGFuZCBTTk1QdjJjLCB0aGUgZ3JvdXAgbGluZSBpcyBqdXN0IGFuIGludGVybWVkaWF0ZSBzdGVwCisgIGJldHdlZW4gdGhlICJhY2Nlc3MiIGxpbmUgYW5kIHRoZSAiY29tMnNlYyIgbGluZSwgd2hpY2ggaXMgdGhlIGxhc3QgYml0CisgIG9mIHRoZSBqaWdzYXcuICBUaGUgImNvbTJzZWMiIGVudHJ5IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGEgInNlY3VyaXR5IG5hbWUiCisgIGZyb20gdGhlIHRyYWRpdGlvbmFsIGNvbW11bml0eSBzdHJpbmcsIHRha2luZyBpbnRvIGFjY291bnQgd2hlcmUgdGhlIHJlcXVlc3QKKyAgaGFzIGNvbWUgZnJvbS4gIFRodXMgdGhlIHNhbWUgY29tbXVuaXR5IHN0cmluZyBjYW4gZ2l2ZSBhY2Nlc3MgdG8gIGRpZmZlcmVudAorICBwb3J0aW9ucyBvZiB0aGUgdHJlZSwgZGVwZW5kaW5nIG9uIHdoZXJlIHRoZSByZXF1ZXN0IGlzIHNlbnQgZnJvbS4KKworICAgICBGb3IgZXhhbXBsZSwgaW4gYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoZSBleGFtcGxlIGNvbmZpZyBmaWxlLCB0aGVyZQorICB3ZXJlIHR3byBjb20yc2VjIGxpbmVzIHdpdGggdGhlIGNvbW11bml0eSBzdHJpbmcgInB1YmxpYyIgLSBvbmUgd2FzIHZhbGlkCisgIGZyb20gYW55d2hlcmUgKHdpdGggdGhlIHNlY3VyaXR5IG5hbWUgInB1YmxpYyIpIGFuZCBvbmUgd2FzIG9ubHkgdmFsaWQKKyAgZnJvbSB0aGUgbG9jYWwgbmV0d29yayAodXNpbmcgdGhlIHNlY3VyaXR5IG5hbWUgIm15bmV0IikuCisgICAgIFRoZSBncm91cCBsaW5lcyBjb252ZXJ0ZWQgdGhlc2Ugc2VjdXJpdHkgbmFtZXMgaW50byB0aGUgZ3JvdXBzICJwdWJsaWMiCisgIGFuZCAibXlncm91cCIgcmVzcGVjdGl2ZWx5LCBhbmQgdGhlIGFjY2VzcyBsaW5lcyBnYXZlIHRoZXNlIHR3byBncm91cHMKKyAgdGhlIGFiaWxpdHkgdG8gR0VUIHZhbHVlcyBpbiB0aGUgJ3N5c3RlbScgc3ViLXRyZWUgKGZyb20gYW55d2hlcmUpIG9yCisgIHRoZSAnbWliLTInIHN1Yi10cmVlIChmcm9tIHRoZSBsb2NhbCBuZXR3b3JrKS4gIE5laXRoZXIgb2YgdGhlc2UgY291bGQKKyAgU0VUIGFueSB2YWx1ZXMgdGhvdWdoLCAoc2luY2UgdGhlIHdyaXRlLXRyZWUgd2FzICJub25lIiBpbiBib3RoIGNhc2VzKS4KKyAgICBTb21lb25lIG9uIHRoZSBsb2NhbCBtYWNoaW5lLCB1c2luZyB0aGUgY29tbXVuaXR5IHN0cmluZyAicHJpdmF0ZSIsCisgIGhhZCB0aGUgc2VjdXJpdHkgbmFtZSAibG9jYWwiIGFuZCB0aGUgZ3JvdXAgbmFtZSAibG9jYWwiLCBhbmQgaGVuY2UgaGFkCisgIGZ1bGwgYWNjZXNzIChib3RoIEdFVCBhbmQgU0VULCBhcyB3ZWxsIGFzIE5PVElGWSkgdG8gdGhlIHdob2xlIG9mIHRoZQorICBNSUIgdHJlZSAob3IgYXQgbGVhc3QgZXZlcnl0aGluZyB1bmRlciAuMSwgd2hpY2ggY292ZXJzIG1vc3QgdGhpbmdzISkKKworICAgICBOb3RlIHRoYXQgdGhlIHRocmVlIG9jY3VycmVuY2VzIG9mICJwdWJsaWMiLCBhcyBjb21tdW5pdHkgc3RyaW5nLAorICBzZWN1cml0eSBuYW1lIGFuZCBncm91cCBuYW1lLCB3ZXJlIHRocmVlIHRvdGFsbHkgc2VwYXJhdGUgdGhpbmdzLgorICBZb3UgY2FuJ3QgdXNlIGEgY29tbXVuaXR5IHN0cmluZyBpbiBhIHNlY3VyaXR5IG5hbWUgZmllbGQsIG9yIGVpdGhlcgorICBvZiB0aGVzZSBhcyBhIGdyb3VwIG5hbWUgKG9yIHZpY2UgdmVyc2EpLCB1bmxlc3MgeW91IHNldCB1cCBzdWl0YWJsZQorICBlbnRyaWVzIHRvIG1hcCBvbmUgbmFtZSBvbnRvIHRoZSBvdGhlci4KKworICAgIFdpdGggU05NUHYzLCB0aGUgc2VjdXJpdHkgbmFtZSBpcyBwYXJ0IG9mIHRoZSBiYXNpYyBwcm90b2NvbCwgYW5kIGNhbgorICBiZSB1c2VkIGRpcmVjdGx5IGluIGEgZ3JvdXAgZGVmaW5pdGlvbi4KKworICBBbmQgaGVyZSBjb25jbHVkZXMgb3VyIHRvdXIgb2YgdGhlIHZpZXctYmFzZWQgYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtLgorICBQaGV3IQorCisKKworPGEgbmFtZT0iSG93X2RvX0lfY29uZmlndXJlX1NOTVB2X191c2Vyc18iPgorSG93IGRvIEkgY29uZmlndXJlIFNOTVB2MyB1c2Vycz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIENyZWF0ZSBhIGZpbGUgL3Zhci91Y2Qtc25tcC9zbm1wZC5jb25mIGZpbGUsIGNvbnRhaW5pbmcgdGhlIGxpbmUKKworCWNyZWF0ZVVzZXIge215VXNlcn0gTUQ1IHtteVBhc3N3b3JkfSBERVMKKworICAod2hlcmUge215VXNlcn0gYW5kIHtteVBhc3N3b3JkfSBhcmUgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcywgX3dpdGhvdXRfCisgIHRoZSBicmFjZXMhKS4gIFRoZW4gc3RhcnQgKG9yIHJlLXN0YXJ0KSB0aGUgc25tcGQgYWdlbnQuCisgIFRoaXMgd2lsbCBjcmVhdGUgdGhlIG5ldyB1c2VyLiAgU2VlIHRoZSBhY2Nlc3MgY29udHJvbCBlbnRyaWVzIGFib3ZlCisgIGZvciBob3cgdG8gdXNlIHRoaXMsIGFuZCB0aGUgZmlsZSAnUkVBRE1FLnNubXB2MycgZm9yIG1vcmUgZGV0YWlscy4KKworCisKKzxhIG5hbWU9IlRoZV9fY3JlYXRlVXNlcl9fbGluZV9kaXNhcHBlYXJzX3doZW5fSV9zdGFydF90aGVfYWdlbnRfX19XaHlfIj4KK1RoZSAnY3JlYXRlVXNlcicgbGluZSBkaXNhcHBlYXJzIHdoZW4gSSBzdGFydCB0aGUgYWdlbnQuICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGF0J3MgZGVsaWJlcmF0ZS4gICBUaGUgYWdlbnQgcmVtb3ZlcyB0aGUgKGh1bWFuLXJlYWRhYmxlKSAnY3JlYXRlVXNlcicKKyAgZGlyZWN0aXZlLCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBhbiBlcXVpdmFsZW50ICd1c21Vc2VyJy4gIFRoaXMKKyAgY29udGFpbnMgdGhlIHNhbWUgaW5mb3JtYXRpb24sIGJ1dCBpbiBhIGZvcm0gdGhhdCdzIG9ubHkgbWVhbmluZ2Z1bAorICBpbnRlcm5hbGx5LiAgVGhpcyBtZWFucyB0aGF0IHRoZSBwYXNzd29yZCBpcyBub3QgbG9uZ2VyIHN0b3JlZCBpbgorICBhIGh1bWFuLXJlYWRhYmxlIGZvcm0uICBBZGRpdGlvbmFsbHksIHRoZSBwYXNzd29yZCBoYXMgYmVlbiBjb252ZXJ0ZWQKKyAgdG8gYSBrZXkgdGhhdCBjYW4gb25seSBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgbG9jYWwgbWFjaGluZS4gIElmIHNvbWVvbmUKKyAgc3RvbGUgdGhlIG5ldyB1c21Vc2VyIGxpbmUgb24gdGhpcyBtYWNoaW5lLCB0aGV5IGNvdWxkIG5vdCB1c2UgdGhhdAorICBpbmZvcm1hdGlvbiB0byBhY2Nlc3MgYW55IG9mIHlvdXIgb3RoZXIgYWdlbnRzLgorCisKKworPGEgbmFtZT0iV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fX3Zhcl91Y2Rfc25tcF9hbmRfX3Vzcl9sb2NhbF9zaGFyZV9zbm1wXyI+CitXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAvdmFyL3VjZC1zbm1wIGFuZCAvdXNyL2xvY2FsL3NoYXJlL3NubXA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vc3QgInN0YXRpYyIgYWdlbnQgY29uZmlndXJhdGlvbiBzaG91bGQgZ28gaW4gdGhlIHRyYWRpdGlvbmFsIGxvY2F0aW9uCisgICh0eXBpY2FsbHkgL3Vzci9sb2NhbC9zaGFyZS9zbm1wL3NubXBkLmNvbmYgb3IgL2V0Yy9zbm1wKS4gICBUaGUKKyAgL3Zhci91Y2Qtc25tcCAob3IgL3Zhci9uZXQtc25tcCkgbG9jYXRpb24gaXMgdXNlZCBmb3IgaW5mb3JtYXRpb24gc2V0IGR1cmluZworICB0aGUgcnVubmluZyBvZiB0aGUgYWdlbnQsIHdoaWNoIG5lZWRzIHRvIGJlIHBlcnNpc3RlbnQgYmV0d2VlbiBvbmUgcnVuIG9mCisgIHRoZSBhZ2VudCBhbmQgdGhlIG5leHQuCisKKyAgICBQdXR0aW5nIHRoZSAnY3JlYXRlVXNlcicgbGluZSBpbiB0aGlzIHBlcnNpc3RlbnQgZmlsZSBpcyBhbiBleGNlcHRpb24sCisgIGZvciBzZWN1cml0eSByZWFzb25zIChzZWUgYWJvdmUpLiAgSW4gZ2VuZXJhbCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gcHV0CisgIGFueXRoaW5nIGVsc2UgaGVyZS4KKworCisKKzxhIG5hbWU9Ik15X25ld19hZ2VudF9pc19pZ25vcmluZ190aGVfb2xkX3NubXBkX2NvbmZfZmlsZV9fV2h5XyI+CitNeSBuZXcgYWdlbnQgaXMgaWdub3JpbmcgdGhlIG9sZCBzbm1wZC5jb25mIGZpbGUuIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgbW9zdCBsaWtlbHkgZXhwbGFuYXRpb24gaXMgdGhhdCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGFnZW50IGlzCisgIGxvb2tpbmcgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24gdGhhbiB0aGUgcHJldmlvdXMgb25lLiAgVGhpcyBpcyBjb21tb25seQorICBleHBlcmllbmNlZCB3aGVuIHJlcGxhY2luZyBhIHJlYWR5LWluc3RhbGxlZCB2ZXJzaW9uIChlLmcuIGZyb20gYSB2ZW5kb3IKKyAgZGlzdHJpYnV0aW9uKSwgd2l0aCB0aGUgY3VycmVudCByZWxlYXNlIGluc3RhbGxlZCBmcm9tIHRoZSBzb3VyY2UuCisKKyAgICBUaGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhpcyBmaWxlIHdpdGggdGhlIGJhc2ljIGRpc3RyaWJ1dGlvbiBpcworICAvdXNyL2xvY2FsL3NoYXJlL3NubXAvc25tcGQuY29uZiAob3IgUFJFRklYL3NoYXJlL3NubXAvc25tcGQuY29uZikuCisgIFJlYWR5LWluc3RhbGxlZCB2ZXJzaW9ucyBvZnRlbiBsb29rIGZvciB0aGUgZmlsZSBhcyAvZXRjL3NubXBkLmNvbmYsCisgIG9yIC9ldGMvc25tcC9zbm1wZC5jb25mLiAgVHJ5IG1vdmluZyB0aGUgb2xkIGNvbmZpZyBmaWxlIHRvIHRoZSBuZXcKKyAgbG9jYXRpb24sIGFuZCByZXN0YXJ0IHRoZSBhZ2VudC4KKworICAgIFdpdGggcmVsZWFzZSA1LjAsIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIGNoYW5nZWQgZnJvbSAidWNkLXNubXAiCisgIHRvICJuZXQtc25tcCIsIGFuZCB0aGlzIGNoYW5nZSB3YXMgcmVmbGVjdGVkIGluIHRoZSBuYW1lIG9mIHRoZSBwZXJzaXN0ZW50CisgIC92YXIgZGlyZWN0b3J5LiAgU28gYSB2NSBOZXQtU05NUCBhZ2VudCB3aWxsIG5vdCBsb29rIGluCisgIC92YXIvdWNkLXNubXAvc25tcGQuY29uZiBmb3Igc2V0dGluZ3MgZnJvbSBhIHY0IFVDRCBhZ2VudC4KKworCisKKzxhIG5hbWU9IldoeV9hbV9JX2dldHRpbmdfX0Nvbm5lY3Rpb25fcmVmdXNlZF9fIj4KK1doeSBhbSBJIGdldHRpbmcgIkNvbm5lY3Rpb24gcmVmdXNlZCI/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIGFjdHVhbGx5IG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtCisgICh0aG91Z2ggdGhhdCdzIGFuIHVuZGVyc3RhbmRhYmxlIG1pc3Rha2UpLiAgVGhpcyBpcyB0aGUgcmVzdWx0IG9mCisgIHRoZSBUQ1Agd3JhcHBlciBtZWNoYW5pc20gdXNpbmcgdGhlIGZpbGVzICdob3N0cy5hbGxvdycgYW5kICdob3N0cy5kZW55JworICB0byBjb250cm9sIGFjY2VzcyB0byB0aGUgc2VydmljZS4gIFNvbWUgZGlzdHJpYnV0aW9ucyBtYXkgY29tZSB3aXRoCisgIHRoaXMgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IC0gb3RoZXJ3aXNlIHlvdSBuZWVkIHRvIHNlbGVjdCBpdCBleHBsaWNpdGx5CisgIGJ5IGNvbmZpZ3VyaW5nIHVzaW5nICctLXdpdGgtbGlid3JhcCcuCisKKyAgICBUaGUgc2ltcGxlc3Qgd2F5IHRvIGF2b2lkIHRoaXMgcHJvYmxlbSBpcyB0byBhZGQgdGhlIGxpbmUKKworCQlzbm1wZDogQUxMCisKKyAgaW4gdGhlIGZpbGUgL2V0Yy9ob3N0cy5hbGxvdyAob3Igd2hlcmV2ZXIgdGhpcyBmaWxlIGlzIG9uIHlvdXIgc3lzdGVtKS4KKyAgVGhvdWdoIGJlIGF3YXJlIHRoYXQgZG9pbmcgdGhpcyByZW1vdmVzIG9uZSBsZXZlbCBvZiBwcm90ZWN0aW9uIGFuZCBhbGxvd3MKKyAgYW55b25lIHRvIHRyeSBhbmQgcXVlcnkgeW91ciBhZ2VudCAodGhvdWdoIHRoZSBhZ2VudCdzIG93biBhY2Nlc3MgY29udHJvbAorICBtZWNoYW5pc21zIGNhbiBzdGlsbCBiZSB1c2VkIHRvIHJlc3RyaWN0IHdoYXQgLSBpZiBhbnl0aGluZyAtIHRoZXkgY2FuIHNlZSkuCisKKyAgTm90ZSB0aGF0IHBlcnNvbmFsIGZpcmV3YWxscyAoc3VjaCBhcyBMaW51eCcgaXBjaGFpbnMgb3IgaXB0YWJsZXMgbWVjaGFuaXNtKQorICBtYXkgaGF2ZSBhIHNpbWlsYXIgZWZmZWN0ICh0aG91Z2ggdHlwaWNhbGx5IHRoaXMgd29uJ3QgYmUgbG9nZ2VkKS4KKyAgU2VlIHRoZSBlYXJsaWVyIGVudHJ5CisgICAgUmVxdWVzdHMgYWx3YXlzIHNlZW0gdG8gdGltZW91dCwgYW5kIGRvbid0IGdpdmUgbWUgYW55dGhpbmcgYmFjay4gIFdoeT8KKworCisgCis8YSBuYW1lPSJJX21fZ2V0dGluZ19lcnJvcnNfYWJvdXRfX2JhZF9zZWN1cml0eV9tb2RlbF9fX193aHlfIj4KK0knbSBnZXR0aW5nIGVycm9ycyBhYm91dCAiYmFkIHNlY3VyaXR5IG1vZGVsIiAtIHdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBVbnRpbCByZWxlYXNlIDQuMiwgdGhlIGFjY2VzcyBjb250cm9sIGhhbmRsaW5nIGFjY2VwdGVkIHRoZSB0b2tlbiAiYW55IiAKKyAgdG8gY292ZXIgYWxsIG9mIHRoZSByZWNvZ25pc2VkIHNlY3VyaXR5IG1vZGVscy4gIFRoaXMgaXMgZXhwbGljaXRseQorICBmb3JiaWRkZW4gaW4gdGhlIHJlbGV2YW50IFJGQywgc28gc3VwcG9ydCBmb3IgdGhpcyBpcyBiZWluZyB3aXRoZHJhd24uCisgICAgQXMgYW4gaW50ZXJpbSBtZWFzdXJlLCBpdCBpcyBjdXJyZW50bHkgYWNjZXB0ZWQgKHdpdGggdGhlIHdhcm5pbmcgeW91CisgIHNlZSksIGJ1dCB0aGlzIHdpbGwgbm90IGJlIHRoZSBjYXNlIGluIGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgYWdlbnQuCisgCisgICAgWW91IHNob3VsZCByZXBsYWNlIHRoZSB0b2tlbiAnYW55JyB3aXRoICd2MScsICd2MmMnIG9yICd1c20nIGFzCisgIGFwcHJvcHJpYXRlLiAgSWYgeW91IHdhbnQgdG8gc3VwcG9ydCBhbGwgdGhyZWUgb2YgdGhlc2Ugc2VjdXJpdHkgbW9kZWxzLAorICB5b3UnbGwgbmVlZCB0byB1c2UgdGhyZWUgZGlzdGluY3QgZ3JvdXAgbGluZXMsIG9uZSBmb3IgZWFjaC4gU2VlIHRoZQorICBleGFtcGxlIHNubXBkLmNvbmYgZmlsZSBmb3IgZGV0YWlscy4KKworICAKKworPGEgbmFtZT0iSV9tX2dldHRpbmdfZXJyb3JzX2Fib3V0X19iYWRfcHJlZml4X21hdGNoX3BhcmFtZXRlcl9fX193aHlfIj4KK0knbSBnZXR0aW5nIGVycm9ycyBhYm91dCAiYmFkIHByZWZpeCBtYXRjaCBwYXJhbWV0ZXIiIC0gd2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBxdWVzdGlvbi4gIFdpdGggNC4yLCB0aGUgc3ludGF4IG9mIHRoZQorICAnYWNjZXNzJyBjb25maWd1cmUgbGluZSBoYXMgY2hhbmdlZCwgYW5kIGEgdmFsdWUgb2YgJzAnIGlzIG5vIGxvbmdlcgorICBhY2NlcHRhYmxlIGZvciB0aGUgc2l4dGggZmllbGQuICBTaW1wbHkgcmVwbGFjZSB0aGlzIHdpdGggdGhlIHdvcmQgJ2V4YWN0Jy4KKworCisgIAorPGEgbmFtZT0iV2h5X2Nhbl90X0lfc2VlX3ZhbHVlc19pbl90aGVfVUNEYXZpc19fZXh0ZW5zaWJsZV9fb3JfX2Rpc2tfX3RyZWVzXyI+CitXaHkgY2FuJ3QgSSBzZWUgdmFsdWVzIGluIHRoZSBVQ0RhdmlzICdleHRlbnNpYmxlJyBvciAnZGlzaycgdHJlZXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBCb3RoIHRoZXNlIHRyZWVzIGFyZSBkZXNpZ25lZCB0byByZXBvcnQgdGhpbmdzIHlvdSBhc2sgaXQgdG8gcmVwb3J0CisgIG9uLiAgSWYgeW91IGRvbid0IGRlY2xhcmUgYW55dGhpbmcgaW4gdGhlIHNubXBkLmNvbmYgZmlsZSBmb3IgaXQgdG8KKyAgbW9uaXRvciwgaXQgd2lsbCBub3QgcmVwb3J0IGFueXRoaW5nLiAgU2VlIHRoZSBzbm1wZC5jb25mIG1hbnVhbCBwYWdlCisgIGFuZCB0aGUgRVhBTVBMRS5jb25mIGZpbGUgZm9yIGRldGFpbHMgb24gY29uZmlndXJpbmcgdGhlIGFnZW50LgorCisgIE9wdGlvbmFsbHksIHJ1biBzbm1wY29uZiAtZyBtb25pdG9yaW5nIHRvIGhlbHAgeW91IHNldCB1cCB0aGlzCisgIHNlY3Rpb24gb2YgdGhlIHNubXBkLmNvbmYgZmlsZS4KKworCisKK1doeSBjYW4ndCBJIHNlZSB2YWx1ZXMgaW4gdGhlIFVDRGF2aXMgJ21lbW9yeScgb3IgJ3Ztc3RhdCcgdHJlZXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlc2UgbWliIG1vZHVsZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQKKyAgd2lsbCBub3QgYmUgaW5jbHVkZWQgb24gYW55IG90aGVyIHN5c3RlbS4gIEN1cnJlbnRseSwgdGhleSBhcmUgb25seQorICBzdXBwb3J0ZWQgb24gTGludXgsIEhQLVVYIChtZW1vcnkgb25seSksIFNvbGFyaXMsIEJTRGkgKHZtc3RhdCBvbgorICBCU0RpNCBvbmx5KSwgRHluaXgsIEZyZWVCU0QsIE5ldEJTRCBhbmQgT3BlbkJTRC4KKyAgICBJZiB5b3Ugd2FudCB0byBoZWxwIHBvcnQgaXQgdG8gb3RoZXIgc3lzdGVtcywgbGV0IHVzIGtub3cuCisKKyAgTm90ZSB0aGF0IHRoZXNlIHN1YnRyZWVzIG9ubHkgcmVwb3J0IHRoZSBjdXJyZW50IHVzYWdlIHdoZW4KKyAgZXhwbGljaXRseSBxdWVyaWVkLiAgVGhleSBkbyAqbm90KiBnZW5lcmF0ZSB0cmFwcyB3aGVuIHRoZQorICB1c2FnZSBzdHJheXMgb3V0c2lkZSB0aGUgY29uZmlndXJlZCBib3VuZHMuCisgIFNlZSB0aGUgZWFybGllciBGQVEgZW50cnkKKyAgICBXaGF0IHRyYXBzIGFyZSBzZW50IGJ5IHRoZSBhZ2VudD8KKworCisKKzxhIG5hbWU9IldoYXRfZG9fdGhlX0NQVV9zdGF0aXN0aWNzX21lYW5fX19pc190aGlzX3RoZV9sb2FkX2F2ZXJhZ2VfIj4KK1doYXQgZG8gdGhlIENQVSBzdGF0aXN0aWNzIG1lYW4gLSBpcyB0aGlzIHRoZSBsb2FkIGF2ZXJhZ2U/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgTm8uICBVbmZvcnR1bmF0ZWx5LCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBvZiB0aGUgdmFyaW91cyBDUFUgc3RhdGlzdGljcworICB3YXMgYSBsaXR0bGUgdmFndWUuICBJdCByZWZlcnJlZCB0byBhICJwZXJjZW50YWdlIiwgd2l0aG91dCBzcGVjaWZ5aW5nCisgIHdoYXQgcGVyaW9kIHRoaXMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgb3Zlci4gIEl0IHdhcyB0aGVyZWZvcmUKKyAgaW1wbGVtZW50ZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCisKKyAgICBSZWNlbnQgcmVsZWFzZXMgaW5jbHVkZXMgInJhdyBjb3VudGVycyIsIHdoaWNoIGNhbiBiZSB1c2VkIHRvCisgIGNhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSB1c2FnZSBvdmVyIGFueSBkZXNpcmVkIHBlcmlvZC4gIFRoaXMgaXMKKyAgdGhlICJyaWdodCIgd2F5IHRvIGhhbmRsZSB0aGluZ3MgaW4gdGhlIFNOTVAgbW9kZWwuICBUaGUgb3JpZ2luYWwKKyAgZmxhd2VkIHBlcmNlbnRhZ2Ugb2JqZWN0cyBzaG91bGQgbm90IGJlIHVzZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQKKyAgaW4gYSBmdXR1cmUgcmVsZWFzZSBvZiB0aGUgYWdlbnQuCisKKyAgICBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgVW5peCBsb2FkIGF2ZXJhZ2UsIHdoaWNoIGlzCisgIGF2YWlsYWJsZSB2aWEgdGhlIGxvYWRUYWJsZSwgYW5kIGlzIHN1cHBvcnRlZCBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2dldF9wZXJjZW50YWdlX0NQVV91dGlsaXphdGlvbl91c2luZ19zc0NwdVJhd0lkbGVfIj4KK0hvdyBkbyBJIGdldCBwZXJjZW50YWdlIENQVSB1dGlsaXphdGlvbiB1c2luZyBzc0NwdVJhd0lkbGU/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgb25lIG9mIHRoZSAicmF3IGNvdW50ZXJzIiBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIGVudHJ5LgorICBZb3UgbmVlZCB0byB0YWtlIHR3byByZWFkaW5ncyBvZiB0aGlzIG9iamVjdCBhbmQgbG9vayBhdCB0aGUKKyAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0uICBUaGF0IGRpZmZlcmVuY2UgZGl2aWRlZCBieSB0aGUgdG90YWwKKyAgbnVtYmVyIG9mICd0aWNrcycgYmV0d2VlbiB0aGUgdHdvIHJlYWRpbmdzICh3aGVyZSBvbmUgdGljayBpcworICBwcm9iYWJseSAwLjAxIHNlY29uZHMpIHdpbGwgZ2l2ZSB5b3UgdGhlIHBlcmNlbnRhZ2UgdXRpbGl6YXRpb24KKyAgb3ZlciB0aGF0IHBlcmlvZC4KKworCisKKzxhIG5hbWU9IldoYXRfYWJvdXRfbXVsdGlfcHJvY2Vzc29yX3N5c3RlbXNfIj4KK1doYXQgYWJvdXQgbXVsdGktcHJvY2Vzc29yIHN5c3RlbXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBTb3JyeSAtIHRoZSBDUFUgc3RhdGlzdGljcyAoYm90aCBvcmlnaW5hbCBwZXJjZW50YWdlcywgYW5kIHRoZQorICBuZXdlciByYXcgc3RhdGlzdGljcykgYm90aCByZWZlciB0byB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuICBUaGVyZQorICBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGFjY2VzcyBpbmRpdmlkdWFsIHN0YXRpc3RpY3MgZm9yIGEgcGFydGljdWxhcgorICBwcm9jZXNzb3IgKGV4Y2VwdCBvbiBTb2xhcmlzIHN5c3RlbXMgLSBzZWUgYmVsb3cpLgorCisgICAgTm90ZSB0aGF0IGFsdGhvdWdoIHRoZSBIb3N0IFJlc291cmNlcyB0YWJsZSBpbmNsdWRlcyBhIGhyUHJvY2Vzc29yVGFibGUsCisgIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHN1ZmZlcnMgZnJvbSB0d28gbWFqb3IgZmxhd3MuICBGaXJzdGx5LCBpdAorICBkb2Vzbid0IGN1cnJlbnRseSByZWNvZ25pc2UgdGhlIHByZXNlbmNlIG9mIG11bHRpcGxlIHByb2Nlc3NvcnMsIGFuZAorICBzaW1wbHkgYXNzdW1lcyB0aGF0IGFsbCBzeXN0ZW1zIGhhdmUgcHJlY2lzZWx5IG9uZSBDUFUuICBTZWNvbmRseSwgaXQKKyAgZG9lc24ndCBjYWxjdWxhdGUgdGhlIGhyUHJvY2Vzc29yTG9hZCB2YWx1ZSBjb3JyZWN0bHksIGFuZCBlaXRoZXIgcmV0dXJucworICBhIGR1bW15IHZhbHVlIChiYXNlZCBvbiB0aGUgbG9hZCBhdmVyYWdlKSBvciBub3RoaW5nIGF0IGFsbC4KKworICAgIEFzIG9mIG5ldC1zbm1wIHZlcnNpb24gNS4xLCB0aGUgU29sYXJpcyBvcGVyYXRpbmcgc3lzdGVtIGRlbGl2ZXJzIHNvbWUKKyAgaW5mb3JtYXRpb24gYWJvdXQgbXVsdGlwbGUgQ1BVJ3Mgc3VjaCBhcyBzcGVlZCBhbmQgdHlwZS4KKworICAgIE90aGVyIHRoYW4gdGhhdCwgdG8gbW9uaXRvciBhIG11bHRpLXByb2Nlc3NvciBzeXN0ZW0sIHlvdSdyZSBjdXJyZW50bHkKKyAgb3V0IG9mIGx1Y2suICBXZSBob3BlIHRvIGFkZHJlc3MgdGhpcyBpbiBhIGZ1dHVyZSByZWxlYXNlIG9mIHRoZSBhZ2VudC4KKyAgQnV0IHlvdSd2ZSBnb3QgdGhlIHNvdXJjZSwgc28geW91IGNhbiBhbHdheXMgaGF2ZSBhIGdvIHlvdXJzZWxmIDotKQorCisKKworPGEgbmFtZT0iVGhlX3NwZWVkX3R5cGVfb2ZfbXlfbmV0d29ya19pbnRlcmZhY2VzX2lzX3dyb25nX19faG93X2Nhbl9JX2ZpeF9pdF8iPgorVGhlIHNwZWVkL3R5cGUgb2YgbXkgbmV0d29yayBpbnRlcmZhY2VzIGlzIHdyb25nIC0gaG93IGNhbiBJIGZpeCBpdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBkZXRlcm1pbmluZworICB0aGUgc3BlZWQgYW5kIHR5cGUgb2YgbmV0d29yayBpbnRlcmZhY2VzLCBidXQgbWFueSBkbyBub3QuICBJbiB0aGlzCisgIGNhc2UsIHRoZSBhZ2VudCBhdHRlbXB0cyB0byBndWVzcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSB2YWx1ZXMsIGJhc2VkCisgIG9uIHRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UuCisgICAgVmVyc2lvbiA0LjIgYWxsb3dzIHlvdSB0byBvdmVycmlkZSB0aGVzZSBndWVzc2VkIHZhbHVlcywgdXNpbmcgdGhlCisgIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlICdpbnRlcmZhY2UnLCBzcGVjaWZ5aW5nIHRoZSBuYW1lLCB0eXBlIGFuZAorICBzcGVlZCBvZiBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvcgorICBmYXN0LWV0aGVybmV0LCBvciBkaWFsLXVwIGludGVyZmFjZXMsIHdoZXJlIHRoZSBzcGVlZCBjYW5ub3QgYmUKKyAgZ3Vlc3NlZCBmcm9tIHRoZSBuYW1lLgorICAgIFNlZSB0aGUgc25tcGQuY29uZig1KSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KKyAgCisKKworPGEgbmFtZT0iVGhlX2ludGVyZmFjZV9zdGF0aXN0aWNzX2Zvcl9teV9zdWJpbnRlcmZhY2VzX2FyZV9hbGxfemVyb19fX3doeV8iPgorVGhlIGludGVyZmFjZSBzdGF0aXN0aWNzIGZvciBteSBzdWJpbnRlcmZhY2VzIGFyZSBhbGwgemVybyAtIHdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFVuZm9ydHVuYXRlbHksIG1vc3Qga2VybmVscyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUgbG9naWNhbAorICBpbnRlcmZhY2VzIG9uIGEgc2luZ2xlIHBoeXNpY2FsIGludGVyZmFjZSwgZG9uJ3Qga2VlcCBzZXBhcmF0ZQorICBzdGF0aXN0aWNzIGZvciBlYWNoIG9mIHRoZXNlLiAgVGhleSBzaW1wbHkgcmVwb3J0IHRoZSBvdmVyYWxsCisgIHN0YXRpc3RpY3MgZm9yIHRoZSBwaHlzaWNhbCBpbnRlcmZhY2UgaXRzZWxmLgorICAgIFRoZXJlJ3Mgbm8gZWFzeSB3YXkgYXJvdW5kIHRoaXMgcHJvYmxlbSAtIHRoZSBhZ2VudCBjYW4gb25seQorICByZXBvcnQgc3VjaCB2YWx1ZXMgYXMgaXQgY2FuIGZpbmQgb3V0LiAgSWYgdGhlIGtlcm5lbCBkb2Vzbid0CisgIGtlZXAgdHJhY2sgb2YgdGhlc2UgZmlndXJlcywgdGhlIGFnZW50IGNhbid0IHJlcG9ydCB0aGVtLgorICAgIFNvcnJ5IQorCisKKzxhIG5hbWU9IldoYXRfZG9lc19fa2xyZWFkX19fYmFkX2FkZHJlc3NfX21lYW5fIj4KK1doYXQgZG9lcyAia2xyZWFkOiAgYmFkIGFkZHJlc3MiIG1lYW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBtZWFucyB0aGF0IHRoZSBhZ2VudCB3YXMgdW5hYmxlIHRvIGV4dHJhY3Qgc29tZSBvZiB0aGUKKyAgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGtlcm5lbCBzdHJ1Y3R1cmVzLiAgVGhpcyBpcworICBwb3NzaWJseSBkdWUgdG86CisJLSBlaXRoZXIgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2UgZm9yIGtlcm5lbCBpbmZvcm1hdGlvbgorCQkoY2hlY2sgdGhlIHZhbHVlIG9mIEtFUk5FTF9MT0MpCisJLSBhbiBlcnJvciBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgcGFydCBvZiB0aGUgTUlCIHRyZWUKKwkJZm9yIHRoYXQgYXJjaGl0ZWN0dXJlLiAgVHJ5IGFuZCBpZGVudGlmeSB3aGljaAorCQlPSUQgaXMgZ2VuZXJhdGluZyB0aGUgZXJyb3IsIGFuZCBjb250YWN0IHRoZQorCQlsaXN0ICduZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0JworCQlSZW1lbWJlciB0byB0ZWxsIHVzIHdoYXQgYXJjaGl0ZWN0dXJlIHlvdSBoYXZlIQorCisKKworPGEgbmFtZT0iV2hhdF9kb2VzX19ubGlzdF9lcnJfX193b21iYXRfbm90X2ZvdW5kX19fb3Jfc2ltaWxhcl9fbWVhbl8iPgorV2hhdCBkb2VzICJubGlzdCBlcnI6ICB3b21iYXQgbm90IGZvdW5kIiAob3Igc2ltaWxhcikgbWVhbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIG1lYW5zIHRoYXQgdGhlIGFnZW50IHdhc24ndCBhYmxlIHRvIGxvY2F0ZSBvbmUgb2YgdGhlCisgIGtlcm5lbCBzdHJ1Y3R1cmVzIGl0IHdhcyBsb29raW5nIGZvci4gIFRoaXMgbWF5IG9yIG1heSBub3QKKyAgYmUgaW1wb3J0YW50IC0gc29tZSBzeXN0ZW1zIHByb3ZpZGUgYWx0ZXJuYXRpdmUgbWVjaGFuaXNtcworICBmb3Igb2J0YWluaW5nIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gLSBTb2xhcmlzLCBmb3IgZXhhbXBsZSwKKyAgY2FuIHByb2R1Y2UgYSB3aG9sZSBzbGV3IG9mIHN1Y2ggbWVzc2FnZXMsIGJ1dCBzdGlsbCBwcm92aWRlCisgIHRoZSBjb3JyZWN0IGluZm9ybWF0aW9uLgorICAgIFRoaXMgZXJyb3Igb25seSBvY2N1cnMgaWYgeW91IGhhdmUgdXNlZCB0aGUgZmxhZworICAnLS1lbmFibGUtZGVidWdnaW5nJyBhcyBwYXJ0IG9mIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24uCisgIFJlY29uZmlndXJlIHRoZSBhZ2VudCB3aXRoICctLWRpc2FibGUtZGVidWdnaW5nJyBhbmQgdGhlc2UKKyAgbWVzc2FnZXMgd2lsbCBkaXNhcHBlYXIuICAoSXQgd29uJ3QgZml4IHRoZSB1bmRlcmx5aW5nIHByb2JsZW0sCisgIGJ1dCBhdCBsZWFzdCB5b3Ugd29uJ3QgYmUgbmFnZ2VkIGFib3V0IGl0KS4KKworCisKKzxhIG5hbWU9Ikhvd19hYm91dF9fQ2FuX3Rfb3Blbl9fZGV2X2ttZW1fXyI+CitIb3cgYWJvdXQgIkNhbid0IG9wZW4gL2Rldi9rbWVtIj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBkZXZpY2UgaXMgbm9ybWFsbHkgcmVzdHJpY3RlZCB0byBqdXN0IGJlaW5nIGFjY2Vzc2libGUgYnkgcm9vdAorICAob3IgcG9zc2libHkgYnkgYSBzcGVjaWFsIGdyb3VwIHN1Y2ggYXMgJ2ttZW0nIG9yICdzeXMnKS4gIFRoZSBhZ2VudAorICBtdXN0IGJlIGFibGUgdG8gcmVhZCB0aGlzIGRldmljZSB0byBvYnRhaW4gdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbgorICBhYm91dCB0aGUgcnVubmluZyBzeXN0ZW0uCisgICAgQ2hlY2sgdGhhdCB0aGUgYWdlbnQgd2FzIHN0YXJ0ZWQgYnkgcm9vdCwgYW5kIGlzIHJ1bm5pbmcgd2l0aCBVSUQgMAorICAob3Igc3VpdGFibGUgR0lEIGlmIGFwcHJvcHJpYXRlKS4gIFRoZSBhZ2VudCB3aWxsIG5vcm1hbGx5IGNvbnRpbnVlCisgIHRvIHJ1biB3aXRob3V0IHRoaXMgbGV2ZWwgb2YgYWNjZXNzIHBlcm1pc3Npb24sIGJ1dCB3b24ndCBiZSBhYmxlIHRvCisgIHJlcG9ydCB2YWx1ZXMgZm9yIG1hbnkgb2YgdGhlIHZhcmlhYmxlcyAocGFydGljdWxhcmx5IHRob3NlIHJlbGF0aW5nCisgIHRvIG5ldHdvcmsgc3RhdGlzdGljcykuCisKKyAKKworPGEgbmFtZT0iVGhlX2FnZW50X2lzX2NvbXBsYWluaW5nX2Fib3V0X19zbm1wZF9jb25mX19fX1doZXJlX2lzX3RoaXNfIj4KK1RoZSBhZ2VudCBpcyBjb21wbGFpbmluZyBhYm91dCAnc25tcGQuY29uZicuICBXaGVyZSBpcyB0aGlzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBJdCBkb2Vzbid0IGV4aXN0IGluIHRoZSBkaXN0cmlidXRpb24gYXMgc2hpcHBlZC4gIFlvdSBuZWVkIHRvCisgIGNyZWF0ZSBpdCB0byByZWZsZWN0IHlvdXIgbG9jYWwgcmVxdWlyZW1lbnQuCisgICAgVG8gZ2V0IHN0YXJ0ZWQsIHlvdSBjYW4gZWl0aGVyIGp1c3QgY3JlYXRlIHRoaXMgYXMgYW4gZW1wdHkgZmlsZSwKKyAgb3IgcnVuIHNubXBjb25mIHRvIGhlbHAgeW91IGNyZWF0ZSBvbmUuCisgICAgU2VlIHRoZSBzbm1wZC5jb25mKDUpIG1hbnVhbCBwYWdlIGZvciBmdXJ0aGVyIGRldGFpbHMuCisKKworCis8YSBuYW1lPSJUaGVfc3lzdGVtX3VwdGltZV9fc3lzVXBUaW1lX19yZXR1cm5lZF9pc193cm9uZ18iPgorVGhlIHN5c3RlbSB1cHRpbWUgKHN5c1VwVGltZSkgcmV0dXJuZWQgaXMgd3JvbmchCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIE9oIG5vIGl0J3Mgbm90LgorICBUaGUgZGVmaW5lZCBtZWFuaW5nIG9mICdzeXNVcFRpbWUnIGlzCisJInRoZSB0aW1lIC4uLiBzaW5jZSB0aGUgKm5ldHdvcmsgbWFuYWdlbWVudCoKKwkgcG9ydGlvbiBvZiB0aGUgc3lzdGVtIHdhcyByZS1pbml0aWFsaXplZC4iCisKKyAgSW4gb3RoZXIgd29yZHMsIHdoZW4gdGhlIHNubXAgYWdlbnQgd2FzIHN0YXJ0ZWQsIG5vdCB3aGVuIHRoZQorICBzeXN0ZW0gaXRzZWxmIGxhc3QgYm9vdGVkLiAgVGhpcyBsYXR0ZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlCisgIGluIHRoZSBIb3N0IFJlc291cmNlcyBNSUIgYXMgImhvc3QuaHJTeXN0ZW0uaHJTeXN0ZW1VcFRpbWUiCisgIE5vdGUgdGhhdCBldmVuIGlmIHRoZSBmdWxsIEhvc3QgUmVzb3VyY2VzIGlzIG5vdCBzdXBwb3J0ZWQgb24KKyAgeW91ciBzeXN0ZW0sIGl0J3Mgd29ydGggY29uZmlndXJpbmcgaW4gdGhlIHN5c3RlbSBwb3J0aW9uIHVzaW5nCisKKwkJJy0td2l0aC1taWItbW9kdWxlcz1ob3N0L2hyX3N5c3RlbScKKworICBhbmQgcmVjb21waWxpbmcuICBUaGlzIHBhcnRpY3VsYXIgZ3JvdXAgaXMgcmVhc29uYWJseSBsaWtlbHkgdG8KKyAgd29yaywgZXZlbiBpZiBzb21lIG9mIHRoZSBvdGhlciBtb3JlIHN5c3RlbS1zcGVjaWZpYyBncm91cHMgZG9uJ3QuCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfcmVkdWNlX3RoZV9tZW1vcnlfZm9vdHByaW50XyI+CitIb3cgY2FuIEkgcmVkdWNlIHRoZSBtZW1vcnkgZm9vdHByaW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBJbiBvcmRlciB0byByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQgKGZvciBpbnN0YW5jZSwgdG8KKyAgZW1iZWQgdGhlIHNubXBkIGludG8gYSBkZXZpY2UpLCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyZSBvcHRpb25zCisgIGNvdWxkIGJlIHVzZWQuCisKKyAgJy0tZGlzYWJsZS1kZWJ1Z2dpbmcnCisgICAgIFRoaXMgdHVybnMgb2ZmIGFsbCBjb21waWxhdGlvbiBvZiBkZWJ1Z2dpbmcgaW5mby4KKworICAnLS1lbmFibGUtbWluaS1hZ2VudCcgJy0td2l0aC1vdXQtbWliLW1vZHVsZXM9ZXhhbXBsZXMvdWNkRGVtb1B1YmxpYycKKyAgICAgVGhpcyBjcmVhdGVzIGFuIGFnZW50IHRoZSBtaW5pbXVtIGFtb3VudCBvZiBNSUIgbW9kdWxlcworICAgICBjb21waWxlZCBpbi4KKyAgICAgTk9URTogSWYgeW91IG5lZWQgbW9yZSBNSUIgbW9kdWxlcyBhZGQgdGhlbiB3aXRoIHRoZSBvcHRpb24KKyAgICAgJy0td2l0aC1taWItbW9kdWxlcz0uLi4nIHlvdSBhZGQgb2YgY291cnNlIGV4dHJhIG1lbW9yeSBmb290cHJpbnQuCisKKyAgJy0td2l0aC10cmFuc3BvcnRzPVVEUCcKKyAgICAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSB0cmFuc3BvcnRzIGRvbWFpbiB5b3UgbmVlZC4KKyAgICAgRm9yIGEgc2ltcGxlIGFnZW50IFVEUCBzaG91bGQgYmUgc3VmZmljaWVudC4KKworICAgJy0td2l0aG91dC1rbWVtLXVzYWdlJworICAgICBUaGlzIGNhbiBiZSB1c2VkIGluIG9yZGVyIG5vdCB0byBpbmNsdWRlIHRoZSBjb2RlIHRoYXQKKyAgICAgb3BlcmF0ZXMgb24gdGhlIC9kZXYva21lbS4gVGhpcyBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2hlbgorICAgICB5b3UgZG8gd2FudCBhIE1JQiBtb2R1bGUgY29tcGlsZWQgaW4gdGhhdCBkZXBlbmRzIG9uIGl0LgorCisgICAnLS13aXRoLW1pYmRpcnM9JyBhbmQgJy0td2l0aC1taWJzPScKKyAgICAgVGhlc2Ugb3B0aW9ucyBzcGVjaWZ5IG5vdCBsb2FkaW5nIHRoZSBNSUIgbW9kdWxlcyBmb3IgdGhlCisgICAgIGFnZW50LiBJdCByZWR1Y2VzIHRoZSBtZW1vcnkgZm9vdHByaW50IG9ubHkgZHVyaW5nCisgICAgIHJ1bnRpbWUuCisKKyAgT24gdG9wIG9mIHRoaXMgb25lIGNvdWxkIGV2ZW4gYXR0ZW1wdCB0byBleGNsdWRlIHRoZSBjb21wbGV0ZQorICBNSUIgbG9hZGluZyBmdW5jdGlvbmFsaXR5LCBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vCisgIGNvbmZpZ3VyZSBvcHRpb24gZm9yIHRoaXMuCisKKyAgT25jZSB0aGUgYWdlbnQgKHNubXBkKSBoYXMgYmVlbiBsaW5rZWQsIHlvdSBtaWdodCBhbHNvIHRyeSBydW5uaW5nCisgICdzdHJpcCBzbm1wZCcgdG8gcmVtb3ZlIHVuLW5lY2Vzc2FyeSBkZWJ1Zy9zeW1ib2wgaW5mb3JtYXRpb24uCisKKworCis8YSBuYW1lPSJDT01QSUxJTkciPgorQ09NUElMSU5HCis9PT09PT09PT0KKworPGEgbmFtZT0iSG93X2RvX0lfY29tcGlsZV93aXRoX19jY19faW5zdGVhZF9vZl9fZ2NjX18iPgorSG93IGRvIEkgY29tcGlsZSB3aXRoICdjYycgaW5zdGVhZCBvZiAnZ2NjJz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBSdW4gY29uZmlndXJlIHdpdGggLS13aXRoLWNjPWNjCisKKyAgTm90ZSB0aGF0IGlmIHlvdSd2ZSBhbHJlYWR5IHJ1biBjb25maWd1cmUgb25jZSwgaXQgd2lsbCBwcm9iYWJseSBoYXZlCisgIGRldGVjdGVkIHRoZSBwcmVzZW5jZSBvZiAnZ2NjJywgY2FjaGVkIHRoaXMgaW5mb3JtYXRpb24sIGFuZCBtYXkgc3RpbGwKKyAgdHJ5IHRvIHVzZSB0aGlzIGFueXdheS4gICBJbiB3aGljaCBjYXNlLCBzaW1wbHkgcmVtb3ZlIHRoZSAnY29uZmlnLmNhY2hlJworICBmaWxlIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZS4KKyAKKworCis8YSBuYW1lPSJCdXRfZ2NjX2RvZXNuX3RfY29tcGlsZV9pdF9zdWNjZXNzZnVsbHlfb25fbXlfbmV3X1NvbGFyaXNfc3lzdGVtX19XaHlfbm90XyI+CitCdXQgZ2NjIGRvZXNuJ3QgY29tcGlsZSBpdCBzdWNjZXNzZnVsbHkgb24gbXkgbmV3IFNvbGFyaXMgc3lzdGVtLiBXaHkgbm90PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFdoZW5ldmVyIHlvdSB1cGdyYWRlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHVuZGVyIFNvbGFyaXMsIHlvdSBuZWVkIHRvCisgIHJlaW5zdGFsbCBnY2MsIGFuZCBydW4gdGhlICdmaXhpbmNsdWRlcycgc2NyaXB0LiAgKFRoaXMgaXMgcHJvYmFibHkKKyAgYSBzZW5zaWJsZSBzdGVwIHRvIHRha2Ugd2hlbiB5b3UgdXBncmFkZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSkuCisgICAgVW5kZXIgU29sYXJpcyAyLjYsIHRoZXJlIGlzIGFsc28gYSBidWcgaW4gdGhlIGdjYyAnZml4aW5jLnN2NCcgc2NyaXB0LgorICBUaGlzIG5lZWRzIGFuIGFkZGl0aW9uYWwgbGluZSBhcyBmb2xsb3dzOgorCisqKiogZml4aW5jLnN2cjQuY2xuICAgICBUaHUgSnVuIDE1IDIyOjAzOjI5IDE5OTUKKy0tLSBmaXhpbmMuc3ZyNCBUdWUgTm92IDI1IDA5OjQ3OjU3IDE5OTcKKyoqKioqKioqKioqKioqKgorKioqIDE5MSwxOTEgKioqKgorLS0tIDE5MSwxOTIgLS0tLQorICAgICAgICAgIHMvX19TVERDX18gLSAwID09IDAvIWRlZmluZWQgKF9fU1RSSUNUX0FOU0lfXykvZworKyAgICAgICAgIHMvX19TVERDX18gLSAwID09IDEvZGVmaW5lZCAoX19TVFJJQ1RfQU5TSV9fKS9nCisKKyAgTk9URTogVGhpcyBhcHBlYXJzIHRvIGhhdmUgYmVlbiByZXNvbHZlZC4KKworCisKK09uIFJlZEhhdCA4LjAgb3IgdXAgSSBnZXQgIi91c3IvYmluL2xkOiBjYW5ub3QgZmluZCAtbGVsZiI/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgUmVkSGF0IDguMCBhbmQgdXAgZG9lc24ndCBjb21lIHdpdGggbGliZWxmIGluc3RhbGxlZCAocHJvcGVybHkpIGJ5CisgIGRlZmF1bHQuICBJbiBvcmRlciB0byBidWlsZCBOZXQtU05NUCB5b3UnbGwgbmVlZCB0aGUgZWxmdXRpbHMtZGV2ZWwKKyAgcnBtIGluc3RhbGxlZCwgd2hpY2ggeW91IGN1cnJlbnRseSBkb24ndCBoYXZlLgorCisgIEFsdGVybmF0aXZlbHksIHRoaXMgY291bGQgcXVpY2tseSBmaXggdGhlIHByb2JsZW0gd2l0aG91dCByZXF1aXJpbmcKKyAgdGhlIC1kZXZlbCBycG0gaW5zdGFsbGVkIChhcyB0aGlzIGlzIG9uZSBvZiB0aGUgdGhpbmdzIHRoZSAtZGV2ZWwgcnBtCisgIGRvZXMgd2hlbiB5b3UgaW5zdGFsbCBpdCk6CisKKyAgICBjZCAvdXNyL2xpYiA7IGxuIC1zIGxpYmVsZi5zby4xIGxpYmVsZi5zbworCisgIE5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSBhZmZlY3QgeW91IGlmIHlvdSBhcmUgdHJ5aW5nIHRvIGNvbXBpbGUgaW4KKyAgdGhlIGhvc3QgcmVzb3VyY2VzIG1pYiBzdXBwb3J0LCBhcyBpdCdsbCB0cnkgdG8gdXNlIHRoZSBycG0gbGlicmFyaWVzCisgIHdoaWNoIHdpbGwgaW4gdHVybiByZXF1aXJlIHRoYXQgbGliZWxmLmEgb3IgbGliZWxmLnNvIGJlIHByZXNlbnQuCisKKworCis8YSBuYW1lPSJJX21fZ2V0dGluZ19hbl9lcnJvcl9fYXV0b2hlYWRlcl9fbm90X2ZvdW5kX19fX3doYXRfc193cm9uZ18iPgorSSdtIGdldHRpbmcgYW4gZXJyb3IgImF1dG9oZWFkZXI6IG5vdCBmb3VuZCIgLSB3aGF0J3Mgd3Jvbmc/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyB1c3VhbGx5IGFwcGVhcnMgd2hlbiBjb21waWxpbmcgdGhlIGN1cnJlbnQgZGV2ZWxvcG1lbnQgc291cmNlCisgIHZlcnNpb24sIG9idGFpbmVkIHZpYSBDVlMuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGltZXN0YW1wcyBvbiBzb21lIG9mCisgIHRoZSBjb25maWd1cmUgZmlsZXMgYXJlIHN1Y2ggdGhhdCBtYWtlIGFzc3VtZXMgKG1pc3Rha2VubHkpIHRoYXQgdGhlCisgIGNvbmZpZ3VyZSBzY3JpcHQgbmVlZHMgdG8gYmUgcmUtZ2VuZXJhdGVkLgorICAgIEEgc2ltaWxhciBwcm9ibGVtIG1heSBhcmlzZSByZWxhdGluZyB0byAnYXV0b2NvbmYnLgorCisgICAgSW4gYm90aCBjYXNlcywgdGhpcyBjYW4gYmUgY29ycmVjdGVkIGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQKKyAgIm1ha2UgLWsgdG91Y2hpdCIgYmVmb3JlIGF0dGVtcHRpbmcgdG8gbWFrZSB0aGUgbWFpbiBwYWNrYWdlLgorCisKKworPGEgbmFtZT0iV2hhdF9hYm91dF9hX2ZhaWxlZF9kZXBlbmRlbmN5X29uX19saWJjcnlwdG9fX19fV2hlcmVfY2FuX0lfZ2V0X3RoYXRfIj4KK1doYXQgYWJvdXQgYSBmYWlsZWQgZGVwZW5kZW5jeSBvbiAnbGliY3J5cHRvJz8gIFdoZXJlIGNhbiBJIGdldCB0aGF0PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgdHlwaWNhbGx5IGVuY291bnRlcmVkIHdoZW4gaW5zdGFsbGluZyBhIExpbnV4IFJQTSBvZgorICB0aGUgdWNkLXNubXAgcGFja2FnZS4gIFRoaXMgbGlicmFyeSBpcyBwYXJ0IG9mIHRoZSAnb3BlbnNzbCcKKyAgc3VpdGUsIHNvIHNpbXBseSBpbnN0YWxsIHRoYXQgUlBNIGZpcnN0LCBvciBkb3dubG9hZCB0aGUgc291cmNlCisgIGZyb20gZnRwOi8vZnRwLm9wZW5zc2wub3JnIGFuZCBjb21waWxlIGFuZCBpbnN0YWxsIHRoYXQuCisKKyAgICBXaGVuIGNvbXBpbGluZyB7VUNELE5ldH0tU05NUCBmcm9tIHNvdXJjZSwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKyAgc2hvdWxkIGRldGVjdCB0aGF0IHRoaXMgbGlicmFyeSBpcyBub3QgcHJlc2VudCwgYW5kIHVzZSBhbHRlcm5hdGl2ZQorICBhcnJhbmdlbWVudHMgZm9yIE1ENS1iYXNlZCBhdXRoZW50aWNhdGlvbi4KKworICAgIElmIGVuY3J5cHRpb24gKG9yIFNIQTEtYmFzZWQgYXV0aGVudGljYXRpb24pIGlzIHJlcXVpcmVkLCB0aGVuCisgIHRoaXMgdHlwaWNhbGx5IHJlcXVpcmVzIGNvbXBpbGluZyBmcm9tIHNvdXJjZS4gIFVuZGVyIExpbnV4LCBib3RoCisgIHRoZSAnb3BlbnNzbCcgYW5kICdvcGVuc3NsLWRldmVsJyBSUE1zIHNob3VsZCBiZSBpbnN0YWxsZWQsIGFuZCB0aGUKKyAgJ2NvbmZpZy5jYWNoZScgZmlsZSByZW1vdmVkIGJlZm9yZSBydW5uaW5nICJjb25maWd1cmUgLS13aXRoLW9wZW5zc2wiCisgIGFuZCByZS1jb21waWxpbmcuCisKKworCis8YSBuYW1lPSJXaHlfaXNfdGhlX3Byb2plY3Rfd29ya3NwYWNlX2VtcHR5X3VuZGVyX1Zpc3VhbF9DX19fIj4KK1doeSBpcyB0aGUgcHJvamVjdCB3b3Jrc3BhY2UgZW1wdHkgdW5kZXIgVmlzdWFsIEMrKz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gdGhlIGRpZmZlcmVudCB3YXlzIHRoYXQgVW5peCBhbmQgV2luZG93cworICBoYW5kbGUgdGV4dCBmaWxlIGxpbmUgdGVybWluYXRpb24uICBPbGRlciB2ZXJzaW9ucyBvZiBXaW5aaXAgZG9uJ3QKKyAgaGFuZGxlIHRoaXMgcHJvcGVybHksIGFuZCBWaXN1YWwgQysrIGdldHMgY29uZnVzZWQgKHBvb3IgZGVhciEpLgorICBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgV2luWmlwIGlzIHJlcG9ydGVkIHRvIHVucGFjayB0aGlzIGNvcnJlY3RseS4KKworCisKKzxhIG5hbWU9IldoeV9kb2VzX19tYWtlX3Rlc3RfX3NraXBfZml2ZV90ZXN0c18iPgorV2h5IGRvZXMgJ21ha2UgdGVzdCcgc2tpcCBmaXZlIHRlc3RzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFlvdSBtZWFuIFQwNTNhZ2VudHYxdHJhcCwgVDA1NGFnZW50djJjdHJhcCwgVDA1NWFnZW50djFtaW50cmFwLAorICBUMDU2YWdlbnR2MmNtaW50cmFwIGFuZCBUMTEzYWdlbnR4dHJhcD8KKworICAgIFRoZXNlIHRlc3RzIHJlbHkgdXBvbiBmdW5jdGlvbmFsaXR5IGluIHRoZSBORVQtU05NUC1FWEFNUExFUy1NSUIKKyAgd2hpY2ggaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBkZWZhdWx0IGFnZW50IGNvbmZpZ3VyYXRpb24uICBUbworICBpbmNsdWRlIHRoZXNlIHRlc3RzLCBpbnZva2UgdGhlIGBjb25maWd1cmVgIHNjcmlwdCB0byBpbmNsdWRlCisgICAgICAnLS13aXRoLW1pYi1tb2R1bGVzPSJleGFtcGxlcy9leGFtcGxlIi4KKworCisKKzxhIG5hbWU9IldoeV9kb2VzX19tYWtlX3Rlc3RfX2NvbXBsYWluX2Fib3V0X2FfcGlkX2ZpbGVfIj4KK1doeSBkb2VzICdtYWtlIHRlc3QnIGNvbXBsYWluIGFib3V0IGEgcGlkIGZpbGU/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVHlwaWNhbGx5IGl0IHNheXMgc29tZXRoaW5nIGxpa2U6CisKKyAgICBjYXQ6ICBjYW5ub3Qgb3BlbiAvdG1wL3NubXAtdGVzdC0xLTg2OTQvKnBpZCoKKworICAgIEl0J3MgdHJ5aW5nIHRvIHRlbGwgeW91IHRoZSBwb3J0IGlzIGJsb2NrZWQgLSB0eXBpY2FsbHkgYmVjYXVzZQorICBhbm90aGVyIGNvcHkgb2YgdGhlIGFnZW50IGlzIHN0aWxsIHJ1bm5pbmcsIGxlZnQgb3ZlciBmcm9tIGZyb20gYQorICBwcmV2aW91cyB0ZXN0aW5nIHJ1bi4KKworICBJZiB5b3UgdHlwZSAncHMgLWVmJyB5b3Ugc2hvdWxkIG5vdGljZSBhbiBvcnBoYW5lZCBwcm9jZXNzIGxpa2U6CisKKyAgc25tcGQgLWQgLXIgLVUgLVAgL3RtcC9zbm1wLXRlc3QtNS0yNzI5NS9zbm1wZC5waWQuLi4KKworICBLaWxsIHRoaXMgcHJvY2Vzcy4KKworICBUaGlzIGNvdWxkIGJlIGhhcHBlbmluZyBmb3Igc2V2ZXJhbCByZWFzb25zIGluY2x1ZGluZzoKKworICAgIDEuICBZb3UgYXJlIHRyeWluZyB0byBkbyBjb25jdXJyZW50IHJ1bnMgb2YgJ21ha2UgdGVzdCcuCisKKyAgICAyLiAgT24gYSBzbG93IG1hY2hpbmUsIHRoZSBhZ2VudCBtaWdodCBiZSB0YWtpbmcgdG9vIGxvbmcgdG8KKyAgICAgIHN0YXJ0IHVwLiBUcnkgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBTTk1QX1NMRUVQCisgICAgICBpbiB0ZXN0aW5nL1JVTlRFU1RTIGZyb20gMSB0byBzb21ldGhpbmcgaGlnaGVyIC0gc2F5IDMgb3IgNS4KKworCisKKzxhIG5hbWU9IkNPRElORyI+CitDT0RJTkcKKz09PT09PQorCis8YSBuYW1lPSJIb3dfZG9fSV93cml0ZV9DX2NvZGVfdG9faW50ZWdyYXRlX3dpdGhfdGhlX2FnZW50XyI+CitIb3cgZG8gSSB3cml0ZSBDIGNvZGUgdG8gaW50ZWdyYXRlIHdpdGggdGhlIGFnZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEF0IHRoZSBtb21lbnQsIHRoZXJlIGFyZSB0aHJlZSBtZXRob2RzIGZvciBpbnRlZ3JhdGluZyBleHRlcm5hbCBDIGNvZGUKKyAgd2l0aGluIHRoZSBhZ2VudC4KKworICAgIFRoZSBjb2RlIGNhbiBiZSBpbmNsdWRlZCB3aXRoaW4gdGhlIGFnZW50IGl0c2VsZiwgc3RhdGljYWxseSBjb25maWd1cmVkCisgIGFuZCBsaW5rZWQgaW4gd2hlbiB0aGUgYWdlbnQgaXMgY29tcGlsZWQuICBBbHRlcm5hdGl2ZWx5LCB3aXRoIHRoZSA0LjIKKyAgcmVsZWFzZSBvZiB0aGUgYWdlbnQsIGl0J3MgcG9zc2libGUgdG8gZHluYW1pY2FsbHkgbG9hZCBNSUIgbW9kdWxlcyBvbmNlCisgIHRoZSBhZ2VudCBpcyBydW5uaW5nLiAgRmluYWxseSwgdGhlIGFnZW50IGNhbiBiZSBjb25maWd1cmVkIHRvIHBhc3MgY2VydGFpbgorICBwb3J0aW9ucyBvZiB0aGUgTUlCIHRyZWUgb2ZmIHRvIG9uZSBvciBtb3JlIHN1YmFnZW50cy4gIFNlZSB0aGUgZWFybGllcgorICBxdWVzdGlvbiBvbiBBZ2VudFgsIFNNVVggYW5kIHByb3hpZWQgU05NUCBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgQWxsIHRocmVlIG1lY2hhbmlzbXMgdXNlIHRoZSBzYW1lIG1vZHVsZSBBUEkuICBUaGlzIGlzIGRlc2NyaWJlZCAoaW4KKyAgZXhjcnVjaWF0aW5nIGRldGFpbCkgaW4gdGhlIGZpbGUgQUdFTlQudHh0LCBzaGlwcGVkIHdpdGggdGhlIHN0YW5kYXJkCisgIGRpc3RyaWJ1dGlvbi4gIFRoZXJlIGlzIGFsc28gYW4gSFRNTCB2ZXJzaW9uIGFjY2Vzc2libGUgdmlhIHRoZSBwcm9qZWN0CisgIHdlYiBwYWdlLiAgVGhpcyB0YXNrIGNhbiBiZSBhaWRlZCB1c2luZyB0aGUgdG9vbCAnbWliMmMnIHdoaWNoIGdlbmVyYXRlcworICBtb3N0IG9mIHRoZSBuZWNlc3Nhcnkgc2tlbGV0b24gY29kZSBmcm9tIHRoZSBkZXNjcmlwdGlvbiBpbiB0aGUgTUlCIGZpbGUuCisKKyAgICBOb3RlIHRoYXQgdGhlIFVDRCBzdWl0ZSBkb2VzIG5vdCBpbmNsdWRlIHN1cHBvcnQgZm9yIFNNVVggc3ViYWdlbnRzLgorCisKKworPGEgbmFtZT0iSG93X2RvZXNfdGhlX2FnZW50X2ZldGNoX3RoZV92YWx1ZV9vZl9hX3ZhcmlhYmxlX2Zyb21fdGhlX3N5c3RlbV8iPgorSG93IGRvZXMgdGhlIGFnZW50IGZldGNoIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGZyb20gdGhlIHN5c3RlbT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBpcyBleHRyYWN0ZWQgZnJvbSBrZXJuZWwgbWVtb3J5IC0gdXN1YWxseQorICBieSBzZWVraW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbiBhbmQgcmVhZGluZyB0aGUgc3RydWN0dXJlcworICBkaXJlY3RseS4KKyAgICBTb21lIHN5c3RlbXMgcHJvdmlkZSBjbGVhbmVyIGludGVyZmFjZXMgdG8gc3VjaCBrZXJuZWwgaW5mb3JtYXRpb24KKyAgKGl0IHdvdWxkIGJlIGhhcmQgdG8gdGhpbmsgb2YgYSBsZXNzIGNsZWFuIGludGVyZmFjZSEpLCB2aWEgaW9jdGwoKQorICBjYWxscyBvciBzaW1pbGFyIHN5c3RlbSByb3V0aW5lcyBhbmQgdGhlc2UgbWVjaGFuaXNtcyBhcmUgdXN1YWxseSB1c2VkCisgIGluIHByZWZlcmVuY2UuCisKKworCis8YSBuYW1lPSJNaWJfY19jb21wbGFpbnNfYWJvdXRfYV9taXNzaW5nX19taWJfcmVmZXJlbmNlX19fX3doYXRfZG9lc190aGlzX21lYW5fIj4KK01pYjJjIGNvbXBsYWlucyBhYm91dCBhIG1pc3NpbmcgIm1pYiByZWZlcmVuY2UiIC0gd2hhdCBkb2VzIHRoaXMgbWVhbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBiYXNpY2FsbHkgbWVhbnMgdGhhdCBpdCBoYXNuJ3QgbG9hZGVkIHRoZSBNSUIgZmlsZSBjb250YWluaW5nCisgIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBNSUIgc3VidHJlZSB5b3UncmUgdHJ5aW5nIHRvIGltcGxlbWVudC4gIFRoaXMKKyAgbWlnaHQgYmUgYmVjYXVzZSBpdCBoYXNuJ3QgYmVlbiBpbnN0YWxsZWQsIHRoZSBuYW1lIGlzIHdyb25nLCBvcgorICAobW9zdCBsaWtlbHkpLCBiZWNhdXNlIGl0IGlzbid0IGluIHRoZSBkZWZhdWx0IGxpc3QuICBTZWUgdGhlIE1JQlMKKyAgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCisKKworPGEgbmFtZT0iTWliX2NfY29tcGxhaW5zX2Fib3V0X25vdF9oYXZpbmdfYV9fdmFsaWRfT0lEX19fX3doYXRfZG9lc190aGlzX21lYW5fIj4KK01pYjJjIGNvbXBsYWlucyBhYm91dCBub3QgaGF2aW5nIGEgInZhbGlkIE9JRCIgLSB3aGF0IGRvZXMgdGhpcyBtZWFuPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGdhdmUgaXQgdGhlIG5hbWUgb2YgYSBNSUIgZmlsZSAob3IKKyAgbW9kdWxlKSwgcmF0aGVyIHRoYW4gdGhlIG5hbWUgb2YgYW4gb2JqZWN0IGRlZmluZWQgaW4gdGhhdCBmaWxlLgorICBNaWIyYyBleHBlY3RzIHRoZSBuYW1lIG9mIGEgJ3Jvb3QnIG9iamVjdCwgYW5kIHdpbGwgZ2VuZXJhdGUgYQorICB0ZW1wbGF0ZSBmb3IgdGhlIHN1Yi10cmVlIHN0YXJ0aW5nIGZyb20gdGhlcmUuCisKKyAgICBJZiB5b3UndmUgZ290IGEgZmlsZSAnTVktTUlCLnR4dCcsIGRlZmluaW5nIHRoZSBNSUIgbW9kdWxlCisgICdNWS1NSUInIHdoaWNoIGNvbnRhaW5zIGEgc3VidHJlZSBiYXNlZCBvbiB0aGUgb2JqZWN0ICdteU1pYicsCisgIHRoZW4geW91IHNob3VsZCBpbnZva2UgbWliMmMgYXMKKyAgICAgICAgICAgICJtaWIyYyAuLi4uIG15TWliIgorICByYXRoZXIgdGhhbgorICAgICAgICAgICAgIm1pYjJjIC4uLi4gTVktTUlCLnR4dCIKKyAgb3IgICAgICAgICJtaWIyYyAuLi4uIE1ZLU1JQiIKKworICAgIE5vdGUgdGhhdCB5b3UnbGwgcHJvYmFibHkgYWxzbyBoYXZlIHRvIGFkZCB5b3VyIE1JQiB0byB0aGUgbGlzdCBvZgorICBNSUJzIHRoYXQgYXJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LCBpbiBvcmRlciBmb3IgbWliMmMgdG8gcmVjb2duaXNlCisgIHRoZSBuYW1lIG9mIHRoaXMgb2JqZWN0LiAgU28gdGhlIGNvbW1hbmQgd291bGQgdHlwaWNhbGx5IGJlCisgICAgICAgICAgICAiTUlCUz0rTVktTUlCIG1pYjJjIC4uLi4gbXlNaWIiCisgIG9yICAgICAgICAiTUlCUz1BTEwgICAgIG1pYjJjIC4uLi4gbXlNaWIiCisKKworCis8YSBuYW1lPSJXaHlfZG9lc25fdF9NaWJfY19saWtlX3RoZV9NSUJfZmlsZV9JX21fZ2l2aW5nX2l0XyI+CitXaHkgZG9lc24ndCBNaWIyYyBsaWtlIHRoZSBNSUIgZmlsZSBJJ20gZ2l2aW5nIGl0PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyB0aGUgc2FtZSBwcm9ibGVtIGFzIGFib3ZlLiAgTWliMmMgdGFrZXMgdGhlIG5hbWUgb2YgYSBNSUIKKyAgb2JqZWN0LCBub3QgdGhlIG5hbWUgb2YgYSBmaWxlIChvciBhIE1JQiBtb2R1bGUpLiAgVHJ5IHVzaW5nIHRoZQorICBuYW1lIG9mIHRoZSBNT0RVTEUtSURFTlRJVFkgZGVmaW5pdGlvbi4KKworCisKKzxhIG5hbWU9Ik1pYl9jX2lnbm9yZXNfbXlfTUlCX2FuZF9nZW5lcmF0ZXNfYV9wYWlyX29mX19taWJfX19fY29kZV9maWxlc19fX1doeV8iPgorTWliMmMgaWdub3JlcyBteSBNSUIgYW5kIGdlbmVyYXRlcyBhIHBhaXIgb2YgJ21pYi0yJyBjb2RlIGZpbGVzLiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIHRoZSBzYW1lIHByb2JsZW0gYXMgYWJvdmUgLSAgZ2l2aW5nIG1pYjJjIHRoZSBuYW1lIG9mCisgIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIE1JQiwgcmF0aGVyIHRoYW4gYW4gb2JqZWN0IHdpdGhpbiBpdC4KKyAgRWFybGllciB2ZXJzaW9ucyBvZiBtaWIyYyBkaWRuJ3QgZGV0ZWN0IHRoaXMgc2l0dWF0aW9uLCBhbmQKKyAgcmF0aGVyIHRoYW4gcmVwb3J0IGFuIGVycm9yLCBpdCBtZXJyaWx5IGNvbnN0cnVjdGVkIGEgdGVtcGxhdGUKKyAgZm9yIGEgZGVmYXVsdCBzdGFydGluZyBwb2ludCBvZiB0aGUgbWliLTIgbm9kZS4KKworICBNb3JlIHJlY2VudCB2ZXJzaW9ucyBpc3N1ZSB0aGUgZXJyb3IgbWVudGlvbmVkIGFib3ZlLCBpbnN0ZWFkLgorCisKKworPGEgbmFtZT0iTWliX2NfY29tcGxhaW5zX2Fib3V0X19jb25maWd1cmF0aW9uX2ZpbGVzX19fV2hhdF9zX3RoaXNfZm9yXyI+CitNaWIyYyBjb21wbGFpbnMgYWJvdXQgImNvbmZpZ3VyYXRpb24gZmlsZXMiLiBXaGF0J3MgdGhpcyBmb3I/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFlvdSd2ZSBwcm9iYWJseSB1cGdyYWRlZCB0byB0aGUgdjUgbmV0LXNubXAgcmVsZWFzZSAoZnJvbSB0aGUKKyAgdjQgdWNkLXNubXAgcmVsZWFzZSkuICBUaGlzIGludHJvZHVjZWQgYSBuZXcgYXBwcm9hY2ggdG8gYWdlbnQKKyAgbW9kdWxlIGRldmVsb3BtZW50LCBpbmNsdWRpbmcgYSBudW1iZXIgb2YgZGlmZmVyZW50ICJoZWxwZXJzIi4KKyAgVGhlIG1pYjJjIHRvb2wgY29tZXMgd2l0aCBjb25maWd1cmF0aW9ucyB0byBnZW5lcmF0ZSBjb2RlIGZvcgorICBtYW55IG9mIHRoZXNlLCBidXQgeW91J2xsIG5lZWQgdG8gc2VsZWN0IHdoaWNoIGlzIG1vc3QgY29udmVuaWVudAorICBmb3IgeW91ciBwYXJ0aWN1bGFyIGNhc2UuCisKKworCis8YSBuYW1lPSJXaGljaF9taWJfY19jb25maWd1cmF0aW9uX2ZpbGVfc2hvdWxkX0lfdXNlXyI+CitXaGljaCBtaWIyYyBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIEkgdXNlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgSWYgdGhlIE1JQiBjb250YWlucyBzY2FsYXIgb2JqZWN0cywgdGhlbiB1c2UgdGhlIGNvbmZpZyBmaWxlCisgICdtaWIyYy5zY2FsYXIuY29uZicuICAgVGhpcyB3aWxsIGdlbmVyYXRlIHRlbXBsYXRlIGhhbmRsZXJzIGZvcgorICB0aGVzZSBzY2FsYXIgb2JqZWN0cyAoaWdub3JpbmcgaW50ZXJuYWwgc3RydWN0dXJhbCBkZWZpbml0aW9ucywKKyAgdGFibGUgb2JqZWN0cyBhbmQgbm90aWZpY2F0aW9ucykuCisKKyAgICBJZiB0aGUgTUlCIGNvbnRhaW5zIHRhYmxlcywgdGhlbiB0aGVyZSBhcmUgbnVtYmVyIG9mIHBvc3NpYmxlCisgIGNob2ljZXMuICBUaGVyZSBhcmUgYXQgbGVhc3QgZm91ciBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgd2lsbAorICBnZW5lcmF0ZSB0ZW1wbGF0ZSBoYW5kbGVycyBmb3IgdGFibGUgb2JqZWN0cyAoaWdub3JpbmcgaW50ZXJuYWwKKyAgaW50ZXJuYWwgc3RydWN0dXJhbCBkZWZpbml0aW9ucywgc2NhbGFyIG9iamVjdHMgYW5kIG5vdGlmaWNhdGlvbnMpLgorICBXaGljaCB0byB1c2UgZGVwZW5kcyBvbiB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSB0YWJsZSBiZWluZworICBtb2RlbGxlZCAoaW4gcGFydGljdWxhciB3aGVyZSB0aGUgZGF0YSBpcyBoZWxkKSwgYW5kIHByZWZlcmVuY2VzCisgIGFzIHRvIHRoZSBzdHlsZSBvZiBjb2RlIHN0cnVjdHVyZS4KKworICAgIFRoZSBjb25maWcgZmlsZSAnbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZicgYXNzdW1lcyB0aGF0IHRoZQorICBkYXRhIGlzIGhlbGQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGFnZW50LCBhbmQgZ2VuZXJhdGVzIGEgc2luZ2xlCisgIGhhbmRsZXIgcm91dGluZSBmb3IgZWFjaCB0YWJsZS4gIE1vc3Qgb2YgdGhlIHByb2Nlc3NpbmcgaXMgaGFuZGxlZAorICBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgYWdlbnQsIHNvIHRoaXMgaGFuZGxlciByb3V0aW5lIGlzIHJlYWxseQorICBvbmx5IG5lZWRlZCBpZiBwYXJ0aWN1bGFyIGNvbHVtbiBvYmplY3RzIHJlcXVpcmUgc3BlY2lhbCBwcm9jZXNzaW5nLgorICAKKyAgICBUaGUgY29uZmlnIGZpbGUgJ21pYjJjLml0ZXJhdGUuY29uZicgaXMgYWltZWQgYXQgdGFibGVzIHdoaWNoCisgIG1vZGVsIGRhdGEgaGVsZCBleHRlcm5hbCB0byB0aGUgYWdlbnQgKG5vdCBuZWNlc3NhcmlseSBvcmRlcmVkCisgIGFjY29yZGluZyB0byB0aGUgTUlCIGluZGV4aW5nIHJlcXVpcmVtZW50cykuICBJdCBnZW5lcmF0ZXMgYSBwYWlyCisgIG9mICJpdGVyYXRpb24iIHJvdXRpbmVzLCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdGVwIHRocm91Z2ggdGhlCisgIHRhYmxlLCB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHJvdyBmb3IgYW55IGdpdmVuIHJlcXVlc3QuCisgIFRoaXMgcm93IGlzIHRoZW4gcGFzc2VkIHRvIHRoZSAoc2luZ2xlKSB0YWJsZSBoYW5kbGVyIHJvdXRpbmUsCisgIHdoaWNoIGhhbmRsZXMgdGhlIHJlc3Qgb2YgdGhlIHByb2Nlc3NpbmcgZm9yIGFsbCBvZiB0aGUgY29sdW1uCisgIG9iamVjdHMgKGZvciBib3RoIEdFVCBhbmQgU0VUIHJlcXVlc3RzKS4KKworICAgIFRoZXJlIGlzIGFsc28gYSBzaW1pbGFyICdtaWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mJyB3aGljaAorICBidWlsZHMgb24gdGhpcywgYnV0IGdlbmVyYXRlcyBhIHNlcmllcyBvZiBpbmRpdmlkdWFsIHJvdXRpbmVzCisgIGZvciBoYW5kbGluZyBHRVQgb3IgU0VUIHJlcXVlc3RzIGZvciBlYWNoIGNvbHVtbiBvYmplY3QuCisKKyAgICBUaGUgY29uZmlnIGZpbGUgJ21pYjJjLmFycmF5LXVzZXIuY29uZicgaXMgYWdhaW4gcHJpbWFyaWx5CisgIGFpbWVkIGF0IGRhdGEgaGVsZCB3aXRoaW4gdGhlIGFnZW50IChhbHRob3VnaCBpdCBjYW4gYWxzbyBiZSB1c2VkCisgIHdpdGggZXh0ZXJuYWwgZGF0YSkuICBJbiBjb250cmFzdCB0byB0aGUgc2luZ2xlIGhhbmRsZXIgcm91dGluZSBvZgorICB0aGUgZmlyc3QgdHdvIGFwcHJvYWNoZXMsIHRoaXMgZ2VuZXJhdGVzIGEgc2VyaWVzIG9mIHNlcGFyYXRlCisgIHRlbXBsYXRlIHJvdXRpbmVzIHRvIGhhbmRsZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiBwcm9jZXNzaW5nIHRoZQorICByZXF1ZXN0LiAgQXMgd2l0aCB0aGUgJ21pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYnIGFwcHJvYWNoLCBtdWNoCisgIG9mIHRoZSBwcm9jZXNzaW5nIGlzIGhhbmRsZWQgaW50ZXJuYWxseS4gIE1hbnkgb2YgdGhlIGdlbmVyYXRlZAorICByb3V0aW5lcyBjYW4gYmUgZGVsZXRlZCBpZiB0aGUgcmVsZXZhbnQgb2JqZWN0cyBuZWVkIG5vIHNwZWNpYWwKKyAgcHJvY2Vzc2luZy4KKyAKKyAgICBUaGUgbW9zdCByZWNlbnQgJ21mZCcgKG9yICdNSUJzIEZvciBEdW1taWVzJykgY29uZmlndXJhdGlvbiB0YWtlcworICB0aGlzIGlkZWEgb2Ygc21hbGwgKG9mdGVuIG9wdGlvbmFsKSAnc3R1Yicgcm91dGluZXMgZXZlbiBmdXJ0aGVyLgorICBUaGlzIGdlbmVyYXRlcyBhIGNvbGxlY3Rpb24gb2Ygc2VwYXJhdGUgKmZpbGVzKiwgZWFjaCBvZiB3aGljaAorICBpbXBsZW1lbnRzIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIHRhYmxlIHByb2Nlc3NpbmcuICBUaGUgaWRlYQorICBoZXJlIGlzIHRvIGhhdmUgbG90cyBvZiAiYmFieSBzdGVwcyIsIHJhdGhlciB0aGFuIGhhdmUgYWxsIHRoZQorICBwcm9jZXNzaW5nIGRlYWx0IHdpdGggaW4gb25lIHBsYWNlLgorCisgICAgVGhlcmUgYXJlIGFsc28gc29tZSBvdGhlciAnbWliMmMnIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGZvciBtb3JlCisgIHNwZWNpYWxpc2VkIHJlcXVpcmVtZW50cyAoZS5nLiBnZW5lcmF0aW5nIG5vdGlmaWNhdGlvbnMsICJ3YXRjaGVkIgorICBzY2FsYXIgb2JqZWN0cywgb3IgY29kZSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdjQgVUNEIGFnZW50CisgIEFQSSksIGJ1dCB0aGVzZSBhcmUgdGhlIG1haW4gY2hvaWNlcyBmb3IgbW9zdCByZXF1aXJlbWVudHMuCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfaGF2ZV9NaWJfY19nZW5lcmF0ZV9jb2RlX2Zvcl9ib3RoX3NjYWxhcnNfYW5kX3RhYmxlc18iPgorSG93IGNhbiBJIGhhdmUgTWliMmMgZ2VuZXJhdGUgY29kZSBmb3IgYm90aCBzY2FsYXJzIGFuZCB0YWJsZXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIHY1IE5ldC1TTk1QIG1pYjJjIHRvb2wgdXNlcyBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvCisgIGdlbmVyYXRlIGNvZGUgZm9yIHNjYWxhciBvYmplY3RzLCBhbmQgZm9yIHRhYmxlcy4gIFRoaXMgbWVhbnMgdGhhdAorICBpdCdzIG5vdCBwb3NzaWJsZSB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgc2luZ2xlIGNvZGUgZmlsZQorICB0aGF0IHN1cHBvcnRzIGJvdGggc2NhbGFycyBhbmQgdGFibGVzLgorCisgICAgSW5zdGVhZCwgaXQncyBuZWNlc3NhcnkgdG8gZ2VuZXJhdGUgdGhlIHR3byBjb2RlIGZpbGVzIHNlcGFyYXRlbHksCisgIGFuZCB0aGVuIGNvbWJpbmUgdGhlIHR3byBmaWxlcyBtYW51YWxseS4gIFRoZSBoYW5kbGVyIHJvdXRpbmVzIGZyb20KKyAgb25lIGZpbGUgY2FuIHNpbXBseSBiZSBpbmNsdWRlZCBpbiB0aGUgb3RoZXIgd2l0aCBubyBjaGFuZ2VzIG5lZWRlZC4KKyAgVGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0cmF0aW9uIG9mIHRoZXNlIGhhbmRsZXJzIGNhbiB0aGVuIGJlIGNvcGllZAorICBmcm9tIHRoZSBmaXJzdCBpbml0aWFsaXNhdGlvbiByb3V0aW5lIGludG8gdGhlIHNlY29uZC4KKworCisKKzxhIG5hbWU9IkFyZV90aGVyZV9hbnlfZXhhbXBsZXNfX29yX2RvY3VtZW50YXRpb25fIj4KK0FyZSB0aGVyZSBhbnkgZXhhbXBsZXMsIG9yIGRvY3VtZW50YXRpb24/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb3N0IG9mIHRoZSBNSUIgbW9kdWxlcyBzaGlwcGVkIHdpdGggdGhlIE5ldC1TTk1QIGFnZW50IHN0aWxsCisgIHVzZSB0aGUgdjQgInRyYWRpdGlvbmFsIiBNSUIgbW9kdWxlIEFQSSwgYnV0IGEgZmV3IHVzZSBvbmUgb2YgdGhlCisgIG5ld2VyIHY1IGhlbHBlci1iYXNlZCBoYW5kbGVycy4KKworICAgIFRoZSBkYXRhc2V0IGhhbmRsZXIgaXMgdXNlZCBpbiB0aGUgdHdvIERJU01BTi1FVkVOVC1NSUIgbW9kdWxlcworICAoZGlzbWFuL210ZUV2ZW50VGFibGUgYW5kIGRpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlKSwgYXMKKyAgd2VsbCBhcyB0aGUgJ3NubXB0cmFwZCcgaW1wbGVtZW50YXRpb24gb2YgbG9nZ2luZyBpbmNvbWluZyB0cmFwcworICAoYXBwcy9ub3RpZmljYXRpb25fbG9nKQorCisgICAgVGhlIGJhc2ljIGl0ZXJhdG9yIGhhbmRsZXIgaXMgdXNlZCBpbiBhIG51bWJlciBvZiBtb2R1bGVzLCBzdWNoCisgIGFzIHRoZSBsYXRlc3QgVENQIGFuZCBVRFAgdGFibGUgaW1wbGVtZW50YXRpb25zIChtaWJJSS90Y3BUYWJsZSAmCisgIG1pYklJL3VkcFRhYmxlKSwgVkFDTSBjb250ZXh0IGhhbmRsaW5nIChtaWJJSS92YWNtX2NvbnRleHQpIGFuZAorICB2YXJpb3VzIHRhYmxlcyByZWxhdGluZyB0byBhZ2VudCBpbnRlcm5hbHMgKGFnZW50LyopLiAgVGhlc2Ugc2hvdworICBhIG51bWJlciBvZiBkaWZmZXJlbnQgYXBwcm9hY2hlcyB0byB1c2luZyB0aGUgaXRlcmF0b3IgaGVscGVyLCBzbworICBpdCdzIHdvcnRoIGNvbXBhcmluZyB0aGVtLgorCisgICAgVGhlIHR3byBleGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZSogbW9kdWxlcyBwcm92aWRlIGEgY29udHJhc3QKKyAgYmV0d2VlbiB0aGUgaXRlcmF0b3IgYW5kIGl0ZXJhdG9yX2FjY2VzcyBoZWxwZXJzLgorCisgICAgVGhlIE5ldC1TTk1QIGFnZW50IGRvZXMgbm90IGN1cnJlbnRseSBpbmNsdWRlIGFueSBNSUIgbW9kdWxlcworICB1c2luZyB0aGUgYXJyYXktdXNlciBjb250YWluZXItYmFzZWQgaGVscGVyLiAgVGhlIGJlc3QgZXhhbXBsZXMKKyAgb2YgdGhpcyBhcmUgdG8gYmUgZm91bmQgaW4gdGhlIG5ldC1wb2xpY3kgcHJvamVjdC4KKyAgU2VlIGh0dHA6Ly9uZXQtcG9saWN5LnNvdXJjZWZvcmdlLm5ldC8KKworCisKKzxhIG5hbWU9IklfdmVfY3JlYXRlZF9hX25ld19tb2R1bGVfd2l0aF9fbWliX2NfX2J1dF9pdF9kb2Vzbl90X3dvcmtfX19XaHlfbm90XyI+CitJJ3ZlIGNyZWF0ZWQgYSBuZXcgbW9kdWxlIHdpdGggJ21pYjJjJyBidXQgaXQgZG9lc24ndCB3b3JrLiAgV2h5IG5vdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBSZW1lbWJlciB0aGF0ICdtaWIyYycgZ2VuZXJhdGVzIGEgdGVtcGxhdGUgZm9yIHRoZSBNSUIgaW1wbGVtZW50YXRpb24uCisgIEl0IGRvZXNuJ3QgZmlsbCBpbiBhbGwgdGhlIGRldGFpbHMgZm9yIHlvdS4gIEluIHBhcnRpY3VsYXIsIGl0IGNhbm5vdAorICBrbm93IGhvdyB0byBvYnRhaW4gdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBhbnN3ZXIgcGFydGljdWxhciBxdWVyaWVzLgorICBUaGF0J3MgdGhlIGpvYiBvZiB0aGUgTUlCIG1vZHVsZSBwcm9ncmFtbWVyICh5b3UhKSAtICBTZWUgdGhlIHByZXZpb3VzCisgIHF1ZXN0aW9uIGZvciBob3cgdG8gcHJvY2VlZC4KKworICAgIEVzc2VudGlhbGx5IG1pYjJjIGhhbmRsZXMgdGhlIHN5bnRheCBvZiB0aGUgTUlCIGltcGxlbWVudGF0aW9uLAorICBsZWF2aW5nIHlvdSB0byBjb25jZW50cmF0ZSBvbiB0aGUgc2VtYW50aWNzLgorCisKKworPGEgbmFtZT0iV2hlcmVfc2hvdWxkX0lfcHV0X3RoZV9maWxlc19wcm9kdWNlZF9ieV9fbWliX2NfXyI+CitXaGVyZSBzaG91bGQgSSBwdXQgdGhlIGZpbGVzIHByb2R1Y2VkIGJ5ICdtaWIyYyc/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBJZiB5b3UncmUgdXNpbmcgdGhlIG1haW4gc291cmNlIHRyZWUgdG8gY29tcGlsZSB5b3VyIG5ldyBtb2R1bGUsIHRoZW4KKyAgcHV0IHRoZXNlIHR3byBmaWxlcyAobXltaWIuW2NoXSkgaW4gdGhlIGRpcmVjdG9yeSAnYWdlbnQvbWliZ3JvdXAnLgorICBZb3Ugc2hvdWxkIHRoZW4gcmUtcnVuIGNvbmZpZ3VyZSB0byBhZGQgaW4geW91ciBuZXcgbW9kdWxlCisgICgiY29uZmlndXJlIC0td2l0aC1taWItbW9kdWxlcz1teW1pYiIpIGFuZCByZWNvbXBpbGUuCisKKyAgICBJZiB5b3UndmUgZ290IGEgbnVtYmVyIG9mIG5ldyBtb2R1bGVzIHRvIGFkZCwgaXQgbWlnaHQgYmUKKyAgc2Vuc2libGUgdG8gcHV0IHRoZW0gYWxsIGludG8gYSBzaW5nbGUgc3ViZGlyZWN0b3J5IG9mICdtaWJncm91cCcuCisgIFRoZW4gY3JlYXRlIGEgaGVhZGVyIGZpbGUsIGxpc3RpbmcgdGhlIGluZGl2aWR1YWwgY29tcG9uZW50cy4KKyAgVGhpcyBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOgorCisJCWNvbmZpZ19yZXF1aXJlKG15bWliL215T2JqZWN0cykKKwkJY29uZmlnX3JlcXVpcmUobXltaWIvbXlUYWJsZSkKKwkJY29uZmlnX3JlcXVpcmUobXltaWIvbXlPdGhlclRhYmxlKQorCisgIElmIHRoaXMgd2FzIHNhdmVkIGFzIHRoZSBmaWxlICdteW1pYi5oJywgdGhlbiB0aGUgc2FtZSBjb25maWd1cmUKKyAgbGluZSBnaXZlbiBhYm92ZSwgd291bGQgcHVsbCBpbiBhbGwgdGhyZWUgbW9kdWxlcy4gIFNlZSB0aGUKKyAgY3VycmVudCBjb250ZW50cyBvZiAnYWdlbnQvbWliZ3JvdXAnIGZvciBleGFtcGxlcyBvZiB0aGlzLgorCisKKworPGEgbmFtZT0iTWliX2Nfb25seV9oYW5kbGVzX2Ffc2luZ2xlX3RhYmxlX2luX215X01JQl9fSG93X2Nhbl9JX2ZpeF90aGlzXyI+CitNaWIyYyBvbmx5IGhhbmRsZXMgYSBzaW5nbGUgdGFibGUgaW4gbXkgTUlCLiBIb3cgY2FuIEkgZml4IHRoaXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgd2FzIGEgYnVnIGluIHRoZSBtaWIyYyBzY3JpcHQsIHdoaWNoIHdhcyBjb3JyZWN0ZWQgd2l0aAorICB0aGUgNC4yIHJlbGVhc2UuICBFYXJsaWVyIHZlcnNpb25zIGNhbiBiZSBmaXhlZCBieSBhcHBseWluZyB0aGUKKyAgZm9sbG93aW5nIHBhdGNoOgorCisJJCBkaWZmIC11IG1pYjJjLmNsbiBtaWIyYworCS0tLSBtaWIyYy5jbG4gICBXZWQgTm92IDI5IDE1OjEyOjQ3IDIwMDAKKwkrKysgbWliMmMgICAgICAgV2VkIE5vdiAyOSAxNToxMzoxOCAyMDAwCisJQEAgLTEzMiw2ICsxMzIsNiBAQAorCSAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgZm9yZWFjaCAkdnRhYmxlIChAdGFibGVfbGlzdCkgeworCSAgICAgZm9yZWFjaCAkcHRhYmxlIChAcHJvY2Vzc3RhYmxlKSB7CisJLSAgICAgICAkdmFyaWFibGVzeyRwdGFibGV9eydwcm9jZXNzZWQnfSA9IAorCSsgICAgICAgJHZhcmlhYmxlc3skcHRhYmxlfXsncHJvY2Vzc2VkJ30gLj0gCisJICAgICAgICAgICAgKGV2YWwgIlwiJHZhcmlhYmxlc3skcHRhYmxlfXsnY29kZSd9XCIiKSAuICJcblxuIjsKKwkgICAgIH0KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9zdXBwb3J0X2FfbGFyZ2VfdGFibGVfX3dpdGhfbW9yZV90aGFuX19fX19jb2x1bW5fb2JqZWN0c18iPgorSG93IGNhbiBJIHN1cHBvcnQgYSBsYXJnZSB0YWJsZSwgd2l0aCBtb3JlIHRoYW4gMjU2IGNvbHVtbiBvYmplY3RzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIGEgcHJvYmxlbSAoYXQgbGVhc3QgYXBwYXJlbnRseSkgd2l0aCB0aGUgdjQgVUNEIG1vZHVsZQorICBBUEksIHdoaWNoIHVzZXMgYSAibWFnaWMgbnVtYmVyIiB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB2YXJpb3VzCisgIGNvbHVtbiBvYmplY3RzIGltcGxlbWVudGVkIGJ5IGEgY29tbW9uIHZhcmlhYmxlIGhhbmRsaW5nIHJvdXRpbmUuCisgIFNpbmNlIHRoaXMgZmllbGQgaXMgZGVmaW5lZCBhcyBhbiB1bnNpZ25lZCBjaGFyYWN0ZXIsIGl0IGNhbiBvbmx5CisgIHRha2UgdmFsdWVzIDAtMjU1LiAgIFNvIGl0IHdvdWxkIGFwcGVhciB0aGF0IHRoZSBhZ2VudCBjYW5ub3QKKyAgc3VwcG9ydCB0YWJsZXMgKG9yIHNjYWxhciBncm91cHMpIHdpdGggbW9yZSB0aGFuIDI1NiBvYmplY3RzLAorICBzaW5jZSB0aGlzIHdvdWxkIHN0YXJ0IHRvIGR1cGxpY2F0ZSB0aGVzZSBtYWdpYyBudW1iZXJzLgorCisgICAgSG93ZXZlciwgdGhlIGFnZW50IGRvZXNuJ3QgYWN0dWFsbHkgY2FyZSB3aGljaCByb3V0aW5lIGltcGxlbWVudHMKKyAgYSBnaXZlbiBvYmplY3QsIGFuZCBtYWdpYyBudW1iZXJzIG9ubHkgbmVlZCB0byBiZSB1bmlxdWUgd2l0aGluIGEKKyAgc2luZ2xlIHZhcmlhYmxlIGhhbmRsaW5nIHJvdXRpbmUuICBTbyBpdCBpcyBhY3R1YWxseSBwZXJmZWN0bHkKKyAgcG9zc2libGUgdG8gaW1wbGVtZW50IGEgbGFyZ2VyIHRhYmxlIGJ5IHNwbGl0dGluZyBpdCBiZXR3ZWVuIHR3bworICAob3IgbW9yZSkgdmFyaWFibGUgaGFuZGxpbmcgcm91dGluZXMuICBUaGVzZSBjYW4gdGhlbiByZS11c2UgdGhlCisgIG1hZ2ljIG51bWJlcnMgcXVpdGUgc2FmZWx5OgorCisgICAgc3RydWN0IHZhcmlhYmxlMSBbXSA9IHsKKyAgICAgICB7TUFHSUMxLCAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsIHZhcl9teWZpcnN0LCAgMSwgeyAgMX19LAorICAgICAgIHtNQUdJQzIsICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwgdmFyX215Zmlyc3QsICAxLCB7ICAyfX0sCisgICAgCQk6CisgICAgICAge01BR0lDMjU1LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLCB2YXJfbXlmaXJzdCwgIDEsIHsyNTV9fSwKKyAgICAgICB7TUFHSUMxLCAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsIHZhcl9teXNlY29uZCwgMSwgezI1Nn19LAorICAgICAgIHtNQUdJQzIsICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwgdmFyX215c2Vjb25kLCAxLCB7MjU3fX0sCisgICAgCQk6CisgICAgICAge01BR0lDMjU1LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLCB2YXJfbXlzZWNvbmQsIDEsIHs1MTB9fQorICAgIH07CisKKyAgQWxsIHRoYXQgbWF0dGVycyBpcyB0aGF0IGEgZ2l2ZW4gbWFnaWMgbnVtYmVyIGlzbid0IHJlLXVzZWQgd2l0aGluCisgIHRoZSBzYW1lIHZhcmlhYmxlIGhhbmRsaW5nIHJvdXRpbmUuICBUaGUgdjUgdGFibGUgaGFuZGxlcnMgdHlwaWNhbGx5CisgIHVzZSBhbiBpbnRlZ2VyIHZhcmlhYmxlIGZvciBob2xkaW5nIGNvbHVtbiBpbmZvcm1hdGlvbiwgc28gYXJlbid0CisgIHN1YmplY3QgdG8gdGhlIHNhbWUgbGltaXRhdGlvbnMuCisKKyAgICBUaG91Z2ggSSdkIGhhdmUgdG8gcXVlc3Rpb24gd2hldGhlciBoYXZpbmcgc3VjaCBhIHdpZGUgdGFibGUgaXMKKyAgbmVjZXNzYXJpbHkgYSBwYXJ0aWN1bGFybHkgZ29vZCBkZXNpZ24gc3RyYXRlZ3khCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfZ2V0X3RoZV9hZ2VudF90b19nZW5lcmF0ZV9hX3RyYXBfX29yX2luZm9ybV9fIj4KK0hvdyBjYW4gSSBnZXQgdGhlIGFnZW50IHRvIGdlbmVyYXRlIGEgdHJhcCAob3IgaW5mb3JtKT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgR2VuZXJhdGluZyBhIHRyYXAgaXMgcmVhc29uYWJseSBzaW1wbGUgLSBqdXN0IGNhbGwgb25lIG9mIHRoZQorICB0cmFwIEFQSSByb3V0aW5lcyAnc2VuZF9lYXN5X3RyYXAoKScgb3IgJ3NlbmRfdjJ0cmFwJyB3aXRoIHRoZQorICByZWxldmFudCBpbmZvcm1hdGlvbiAoZ2VuZXJpYyBhbmQgc3BlY2lmaWMgdHJhcCB2YWx1ZXMsIG9yIGEKKyAgdmFyYmluZCBsaXN0IHJlc3BlY3RpdmVseSkuICBTZWUgdGhlICdzbm1wX3RyYXBfYXBpKDMpJyBtYW4gcGFnZQorICBmb3IgZGV0YWlscy4KKworICAgIFRoZSAnbWliMmMubm90aWZ5LmNvbmYnIGNvbmZpZ3VyYXRpb24gZmlsZSBjYW4gYmUgdXNlZCB0bworICBjb25zdHJ1Y3QgYSBzdWl0YWJsZSB0ZW1wbGF0ZSByb3V0aW5lIGZvciBnZW5lcmF0aW5nIGEgdHJhcCwKKyAgaW5jbHVkaW5nIGJ1aWxkaW5nIHRoZSB2YXJpYWJsZSBsaXN0IGZyb20gdGhlIE1JQiB0cmFwCisgIGRlZmluaXRpb24uICBUaGVzZSB2YXJpYWJsZXMgY2FuIHRoZW4gYmUgZ2l2ZW4gc3VpdGFibGUgdmFsdWVzLAorICBiZWZvcmUgaW52b2tpbmcgdGhlICdzZW5kX3YydHJhcCcgY2FsbCB0byBhY3R1YWxseSBzZW5kIHRoZSB0cmFwLgorCisgICAgTm90ZSB0aGF0IHRoZXNlIEFQSXMgYXJlIG9ubHkgYXZhaWxhYmxlIHdpdGhpbiB0aGUgYWdlbnQgKG9yCisgIHN1YmFnZW50cyksIGFuZCBhcmUgbm90IGF2YWlsYWJsZSB0byBzdGFuZC1hbG9uZSBhcHBsaWNhdGlvbnMuCisgIFRoZSBjb2RlIGZvciAnc25tcHRyYXAnIHNob3dzIGFuIGFwcHJvYWNoIHRvIHVzZSBpbiBzdWNoIGEgY2FzZS4KKworICAgIERldGVybWluaW5nIF93aGVuXyB0byBnZW5lcmF0ZSB0aGUgdHJhcCAoZWl0aGVyIGRpcmVjdGx5IG9yCisgIHZpYSB0aGUgbWliMmMtZ2VuZXJhdGVkIHJvdXRpbmUpIGlzIG9mdGVuIGhhcmRlci4gIElmIHRoZSB0cmFwCisgIGlzIGdlbmVyYXRlZCBpbiByZXNwb25zZSB0byBzb21lIGFjdGlvbiB3aXRoaW4gdGhlIGFnZW50LCAoZS5nLgorICBhcyB0aGUgcmVzdWx0IG9mIGEgU0VUKSwgdGhlbiB0aGlzIGlzbid0IHRvbyBtdWNoIG9mIGEgcHJvYmxlbS4KKworICAgIEJ1dCBpZiB0aGUgdHJhcCBpcyBpbnRlbmRlZCB0byByZXBvcnQgb24gYSBjaGFuZ2Ugb2Ygc3RhdHVzCisgIChlLmcuIGEgbmV0d29yayBpbnRlcmZhY2UgZ29pbmcgdXAgb3IgZG93biwgb3IgYSBkaXNrIGZpbGxpbmcgdXApLAorICB0aGVuIGFjdHVhbGx5IGRldGVjdGluZyB0aGlzIGlzIG5vbi10cml2aWFsLiAgIEl0J3MgbmVjZXNzYXJ5IHRvCisgIHBvbGwgdGhlIHZhbHVlKHMpIG9uIGEgcmVndWxhciBiYXNpcywgc2F2ZSB0aGUgcmVzdWx0cyBhbmQgY29tcGFyZQorICB0aGVtIHdpdGggdGhlIG5ldyB2YWx1ZXMgdGhlIG5leHQgdGltZSByb3VuZC4KKworICAgIFdpdGggdGhlIHY0IFVDRCBhZ2VudCwgdGhpcyB3b3VsZCBoYXZlIHRvIGJlIGRvbmUgbWFudWFsbHksCisgIHVzaW5nIHRoZSByb3V0aW5lcyBkb2N1bWVudGVkIGluICdzbm1wX2FsYXJtKDMpJy4gIFRoZSB2NSBOZXQtU05NUAorICBhZ2VudCBoYXMgaW1wbGVtZW50ZWQgdGhlIERpc3RyaWJ1dGVkIE1hbmFnZW1lbnQgRXZlbnQgTUlCLCB3aGljaAorICBwcm92aWRlcyB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gYSBmbGV4aWJsZSwgc3RhbmRhcmRpc2VkIG1hbm5lci4KKyAgU2VlIHRoZSAnc25tcGQuY29uZig1KScgbWFuIHBhZ2UgKHVuZGVyIERJU01BTi1FVkVOVC1NSUIpIGZvcgorICBkZXRhaWxzIChpbmNsdWRpbmcgdGhlIG5lZWQgZm9yIGFuICdhZ2VudFNlY05hbWUnIHNldHRpbmcpLgorICAKKworCis8YSBuYW1lPSJXaGF0X2lmX0lfbV91c2luZ19hbl9BZ2VudFhfc3ViX2FnZW50X2luc3RlYWRfIj4KK1doYXQgaWYgSSdtIHVzaW5nIGFuIEFnZW50WCBzdWItYWdlbnQgaW5zdGVhZD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhhdCBkb2Vzbid0IG1hdHRlciAtIHRoZSByb3V0aW5lcyBkZXNjcmliZWQgaW4gJ3NubXBfdHJhcF9hcGkoMyknCisgIGNhbiBzdGlsbCBiZSB1c2VkLCBhbmQgdGhlIHN1YmFnZW50IHdpbGwgZG8gdGhlIFJpZ2h0IFRoaW5nLgorICAKKyAgT25lIG9mIHRoZSBvcmlnaW5hbCBkZXNpZ24gYWltcyBvZiB0aGUgQWdlbnRYIHN1cHBvcnQgd2FzIHRoYXQgdGhpcworICBzaG91bGQgYmUgdHJhbnNwYXJlbnQgdG8gYSBNSUIgbW9kdWxlIGltcGxlbWVudGVyLiAgVGhlIGFnZW50LW1vZHVsZQorICBpbnRlcmZhY2Ugc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHRoZSBwcm90b2NvbCB1c2VkIHRvIHJlY2VpdmUgdGhlCisgIG9yaWdpbmFsIHJlcXVlc3QuICBTbyB0aGUgZXhhY3Qgc2FtZSBNSUIgbW9kdWxlIGNvZGUgY291bGQgYmUgdXNlZAorICB3aXRoaW4gYSB0cmFkaXRpb25hbCBTTk1QLW9ubHkgYWdlbnQsIG9yIGFuIEFnZW50WCBzdWJhZ2VudCwgd2l0aCBubworICBjaGFuZ2VzIG5lZWRlZC4KKyAgICBJbiBmYWN0LCB0aGUgbWFpbiBhZ2VudCBzdXBwbGllZCBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlIGNhbiBpbmRlZWQKKyAgYmUgcnVuIGFzIGFuIFNOTVAgYWdlbnQgb3IgYW4gQWdlbnRYIHN1YmFnZW50LCBzaW1wbHkgYmFzZWQgb24gY29tbWFuZAorICBsaW5lIGZsYWdzIChvciBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucykuCisKKworCis8YSBuYW1lPSJNSVNDIj4KK01JU0MKKz09PT09PQorCis8YSBuYW1lPSJXaHlfYXJlX3BhY2tldHNfcmVxdWVzdGluZ190aGVfc2FtZV9pbmZvcm1hdGlvbl9sYXJnZXJfd2l0aF9VQ19EYXZpc19TTk1QXyI+CitXaHkgYXJlIHBhY2tldHMgcmVxdWVzdGluZyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBsYXJnZXIgd2l0aCBVQy1EYXZpcyBTTk1QPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHdpdGggdmVyc2lvbiA0LjIgb3IgbGF0ZXIsIGJ1dCBmb3Igb2xkZXIKKyAgdmVyc2lvbiB0aGUgZm9sbG93aW5nIHN0aWxsIGFwcGxpZXM6CisKKyAgICBTb21lIHVzZXJzIG5vdGUgdGhhdCBVQ0QtU05NUCBhcHBsaWNhdGlvbnMgYWx3YXlzIGdlbmVyYXRlIGxhcmdlciBQRFVzCisgIHRoYW4gb3RoZXIgU05NUCBwYWNrYWdlcywgZXZlbiBpZiB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGlzIHRoZSBzYW1lLgorICBGdXJ0aGVyLCB0aGVyZSBhcmUgc29tZSBhZ2VudHMgdGhhdCByZWZ1c2UgUERVcyBmcm9tIFVDRC1TTk1QIGFwcGxpY2F0aW9ucworICBidXQgYWNjZXB0IFBEVXMgZnJvbSBvdGhlciBhcHBsaWNhdGlvbnMuCisKKyAgVUNELVNOTVAgaXMgYmFzZWQgb24gdGhlIENNVSBjb2RlIGZyb20gYSBsb25nIHRpbWUgYWdvIHdoaWNoIGVuY29kZWQgdGhpbmdzCisgIHVzaW5nIHRoZSBsb25nIGZvcm0gb2YgbGVuZ3RoIGVuY29kaW5nLiAgU29tZSBhZ2VudHMgdXNlIHRoZSBzaG9ydCBmb3JtCisgIG9mIGxlbmd0aCBlbmNvZGluZyBvbmx5LCBhbmQgZG8gbm90IHVuZGVyc3RhbmQgdGhlIGxvbmcgZm9ybS4KKworICAgIFRoaXMgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0gd2l0aCBVQ0QgdjQuMiBvciBoaWdoZXIsIG9yIHRoZSBOZXQtU05NUAorICByZWxlYXNlcy4KKworCisKKzxhIG5hbWU9IldoYXRfQVNOX19fcGFyc2VyX2lzX3VzZWRfIj4KK1doYXQgQVNOLjEgcGFyc2VyIGlzIHVzZWQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIHBhcnNlciB1c2VkIGJ5IGJvdGggdGhlIGFnZW50IGFuZCBjbGllbnQgcHJvZ3JhbXMgaXMgY29kZWQgYnkgaGFuZC4KKyAgVGhpcyBwYXJzZXIgaGFzIHJlY2VudGx5IGJlZW4gcmUtdmFtcGVkIHRvIGFsbG93IGNvbnRyb2wgb2Ygd2hpY2ggb2YgCisgIHRoZSBhdmFpbGFibGUgTUlCcyBzaG91bGQgYmUgaW5jbHVkZWQsIGFuZCB0byBoYW5kbGUgZHVwbGljYXRlIG9iamVjdAorICBzdWJpZGVudGlmaWVycy4KKyAgICBUaGUgc291cmNlIGNvZGUgY2FuIGJlIGZvdW5kIGluIHRoZSBzbm1wbGliIGRpcmVjdG9yeSAoaW4gJ3BhcnNlLmMnKSwKKyAgYW5kIHRoZSBwYXJzZXIgaXMgdXN1YWxseSBidW5kbGVkIGludG8gdGhlIGxpYnJhcnkgJ2xpYnNubXAuYScKKworICAgIE5vdGUgdGhhdCB0aGUgcGFyc2VyIGF0dGVtcHRzIHRvIGJlIGZhaXJseSBmb3JnaXZpbmcgb2Ygc29tZSBjb21tb24KKyAgZXJyb3JzIGFuZCBpbmNvbXBhdGliaWxpdGllcyBpbiBNSUIgZmlsZXMuICBUaGUgTmV0LVNOTVAgdG9vbHMgYWNjZXB0aW5nCisgIGEgTUlCIGZpbGUgd2l0aG91dCBjb21wbGFpbnQgZG9lcyAqbm90KiBpbXBseSB0aGF0IHRoZSBNSUIgaXMgc3RyaWN0bHkKKyAgY29ycmVjdC4KKyAgICBDZXJ0YWluIE1JQnMgbWF5IG5lZWQgc29tZSBhbWVuZG1lbnRzIHRvIGFsbG93IHRoZW0gdG8gYmUgcmVhZAorICBjb3JyZWN0bHkgYnkgdGhlIHBhcnNlci4gIENvbnRhY3QgdGhlIGNvZGVycycgbGlzdCBmb3IgYWR2aWNlLgorCisKKworPGEgbmFtZT0iV2hhdF9pc190aGVfT2ZmaWNpYWxfU2xvZ2FuX29mX3RoZV9uZXRfc25tcF9jb2RlcnNfbGlzdF8iPgorV2hhdCBpcyB0aGUgT2ZmaWNpYWwgU2xvZ2FuIG9mIHRoZSBuZXQtc25tcC1jb2RlcnMgbGlzdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAiVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbm9uLW9idmlvdXMgYW5kIG1heSBuZWVkIHRvIGJlIGltcHJvdmVkLiIKKwkod2l0aCB0aGFua3MgdG8gUm9oaXQgRHViZSkKKworICBBbmQgYW4gYWx0ZXJuYXRlLCBhZGRlZCAyNi1BcHItMjAwMDoKKyAgCisgICJJbiB0aGVvcnksIGl0IHNob3VsZG4ndCBiZSB0aGF0IGhhcmQsIGJ1dCBpdCBqdXN0IG5lZWRzIHRvIGJlIGRvbmUuIgorCisKKworPC9wcmU+PGhyPgorTGFzdCBtb2RpZmllZDogU2F0IE1hciAyMCAyMTo1MzozOSAyMDA0CmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L2luc3RhbGxlci9BZGQyUGF0aC5uc2kgYi93aW4zMi9kaXN0L2luc3RhbGxlci9BZGQyUGF0aC5uc2kKaW5kZXggM2Y4ZDY0MC4uMTA0ZGMxNiAxMDA2NDQKLS0tIGEvd2luMzIvZGlzdC9pbnN0YWxsZXIvQWRkMlBhdGgubnNpCisrKyBiL3dpbjMyL2Rpc3QvaW5zdGFsbGVyL0FkZDJQYXRoLm5zaQpAQCAtMTEsMTEgKzExLDMyIEBACiAgIFB1c2ggJDEKICAgUHVzaCAkMgogICBQdXNoICQzCisgIFB1c2ggJDQKKyAgUHVzaCAkNQogCiAgICMgZG9uJ3QgYWRkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QKICAgSWZGaWxlRXhpc3RzICQwICIiIEFkZFRvUGF0aF9kb25lCi0KKyAgCiAgIFJlYWRFbnZTdHIgJDEgUEFUSAorICAKKyAgIyBJZiBsZW5ndGggb2YgUEFUSCByZXR1cm5lZCBpcyAwLCB3ZSBjb3VsZG4ndCByZWFkIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAodW5saWtlbHkpIG9yCisgICMgaXQncyBlbXB0eSBiZWNhdXNlIGl0J3MgPiAxMDI0IGNoYXJhY3RlcnMgbG9uZy4gIE5TSVMgb25seSBzdXBwb3J0cyB2YXJpYWJsZXMgdXAgdG8gMTAyNCAKKyAgIyBjaGFyYWN0ZXJzIHVubGVzcyB3ZSdyZSB1c2luZyB0aGUgODE5MiBsZW5ndGggdmVyc2lvbiwgd2hpY2ggd2UgYXJlIG5vdC4gIAorICAjIE5vdGU6ICBPbiBYUCAoYXQgbGVhc3QpLCB0aGUgc3RyaW5nIHJlYWQgdXNpbmcgUmVhZEVudlN0ciBpcyBzaG9ydGVyIHRoYW4gd2Ugd291bGQgZXhwZWN0LgorICAjIER1cmluZyB0ZXN0aW5nLCB3aGVuIHRoZSBQQVRIIHdhcyAxMDIwIGNoYXJhY3RlcnMgbG9uZywgU3RyTGVuIG9mIHRoZSBwYXRoIHJldHVybmVkIDk4NC4KKyAgIyBXaGVuIG1hbmlwdWxhdGluZyB0aGUgcGF0aCBvbiBYUCwgdXNlIHRoZSByZWdpc3RyeSBpbnN0ZWFkLgorICBTdHJMZW4gJDQgIiQxIgorICAjIE1lc3NhZ2VCb3ggTUJfSUNPTklORk9STUFUSU9OfE1CX09LICJQQVRIIGxlbmd0aDogJDQuLi4iCisgIEludENtcCAkNCAwIFBhdGhfVG9vX1Nob3J0MQorICBHb3RvIEFkZFRvUGF0aF9Db250MQorICAKKyAgUGF0aF9Ub29fU2hvcnQxOgorICAjIFBBVEggaXMgZW1wdHkuICBEaXNwbGF5IHdhcm5pbmcuCisgIE1lc3NhZ2VCb3ggTUJfSUNPTklORk9STUFUSU9OfE1CX09LICJZb3VyIFBBVEggdmFyaWFibGUgY291bGQgbm90IGJlIHJlYWQsIHByb2JhYmx5IGJlY2F1c2UgaXQgaXMgbG9uZ2VyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIChpbnN0YWxsZXIgbGltaXRhdGlvbikuICBQbGVhc2UgYWRkIHRoZSBmb2xkZXIgJDAgdG8geW91ciBQQVRIIHVzaW5nIHRoZSBTeXN0ZW0gQ29udHJvbCBQYW5lbC4iCisgIGdvdG8gQWRkVG9QYXRoX2RvbmUKKworICBBZGRUb1BhdGhfQ29udDE6CisgIAogICBQdXNoICIkMTsiCiAgIFB1c2ggIiQwOyIKICAgQ2FsbCBTdHJTdHIKQEAgLTU2LDE3ICs3Nyw0MSBAQAogICBBZGRUb1BhdGhfTlQ6CiAgICAgO1JlYWRSZWdTdHIgJDEgSEtDVSAiRW52aXJvbm1lbnQiICJQQVRIIgogICAgIFJlYWRSZWdTdHIgJDEgSEtMTSAnU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcU2Vzc2lvbiBNYW5hZ2VyXEVudmlyb25tZW50JyAiUEFUSCIKKwogICAgIFN0ckNweSAkMiAkMSAxIC0xICMgY29weSBsYXN0IGNoYXIKICAgICBTdHJDbXAgJDIgIjsiIDAgKzIgIyBpZiBsYXN0IGNoYXIgPT0gOwogICAgICAgU3RyQ3B5ICQxICQxIC0xICMgcmVtb3ZlIGxhc3QgY2hhcgotICAgIFN0ckNtcCAkMSAiIiBBZGRUb1BhdGhfTlRkb0l0Ci0gICAgICBTdHJDcHkgJDAgIiQxOyQwIgotICAgIEFkZFRvUGF0aF9OVGRvSXQ6Ci0gICAgICA7V3JpdGVSZWdFeHBhbmRTdHIgSEtDVSAiRW52aXJvbm1lbnQiICJQQVRIIiAkMAotICAgICAgV3JpdGVSZWdFeHBhbmRTdHIgSEtMTSAnU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcU2Vzc2lvbiBNYW5hZ2VyXEVudmlyb25tZW50JyAiUEFUSCIgJDAKLSAgICAgIFNlbmRNZXNzYWdlICR7SFdORF9CUk9BRENBU1R9ICR7V01fV0lOSU5JQ0hBTkdFfSAwICJTVFI6RW52aXJvbm1lbnQiIC9USU1FT1VUPTUwMDAKKworICAgICMgTWFrZSBzdXJlIG9sZCBQQVRIIGlzIG5vdCBlbXB0eS4uCisgICAgU3RyTGVuICQ0ICIkMSIKKyAgICAjTWVzc2FnZUJveCBNQl9JQ09OSU5GT1JNQVRJT058TUJfT0sgIlJlZyBQQVRIIGxlbmd0aDogJDQuLi4iCisgICAgSW50Q21wICQ0IDAgUGF0aF9Ub29fU2hvcnQyCisgICAgR290byBBZGRUb1BhdGhfQ29udDIKKyAgICBQYXRoX1Rvb19TaG9ydDI6CisgICAgIyBQQVRIIGlzIGVtcHR5LiAgRGlzcGxheSB3YXJuaW5nLgorICAgIE1lc3NhZ2VCb3ggTUJfSUNPTklORk9STUFUSU9OfE1CX09LICJZb3VyIFBBVEggdmFyaWFibGUgY291bGQgbm90IGJlIHJlYWQsIHByb2JhYmx5IGJlY2F1c2UgaXQgaXMgbG9uZ2VyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIChpbnN0YWxsZXIgbGltaXRhdGlvbikuICBQbGVhc2UgYWRkIHRoZSBmb2xkZXIgJDAgdG8geW91ciBQQVRIIHVzaW5nIHRoZSBTeXN0ZW0gQ29udHJvbCBQYW5lbC4iCisgICAgZ290byBBZGRUb1BhdGhfZG9uZQorICAgIEFkZFRvUGF0aF9Db250MjoKKworICAgICMgTWFrZSBzdXJlIG5ldyBQQVRIIHdvbid0IGJlIHRvbyBsb25nLgorICAgIFN0ckxlbiAkNSAiJDAiCisgICAgSW50T3AgJDQgJDQgKyAkNQorICAgIEludENtcCAkNCAxMDIyICIiICIiIFBhdGhfVG9vX0xvbmczCisgICAgR290byBBZGRUb1BhdGhfQ29udDMKKyAgICBQYXRoX1Rvb19Mb25nMzoKKyAgICBNZXNzYWdlQm94IE1CX0lDT05JTkZPUk1BVElPTnxNQl9PSyAiWW91ciBuZXcgUEFUSCB2YXJpYWJsZSBjb3VsZCBub3QgYmUgc2V0IGFzIGl0IHdvdWxkIGJlIGdyZWF0ZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgKGluc3RhbGxlciBsaW1pdGF0aW9uKS4gIFBsZWFzZSBhZGQgdGhlIGZvbGRlciAkMCB0byB5b3VyIFBBVEggdXNpbmcgdGhlIFN5c3RlbSBDb250cm9sIFBhbmVsLiIKKyAgICBnb3RvIEFkZFRvUGF0aF9kb25lCisgICAgQWRkVG9QYXRoX0NvbnQzOgorCisgICAgU3RyQ3B5ICQwICIkMTskMCIKKworICAgIDtXcml0ZVJlZ0V4cGFuZFN0ciBIS0NVICJFbnZpcm9ubWVudCIgIlBBVEgiICQwCisgICAgV3JpdGVSZWdFeHBhbmRTdHIgSEtMTSAnU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcU2Vzc2lvbiBNYW5hZ2VyXEVudmlyb25tZW50JyAiUEFUSCIgJDAKKyAgICBTZW5kTWVzc2FnZSAke0hXTkRfQlJPQURDQVNUfSAke1dNX1dJTklOSUNIQU5HRX0gMCAiU1RSOkVudmlyb25tZW50IiAvVElNRU9VVD01MDAwCiAKICAgQWRkVG9QYXRoX2RvbmU6CisgICAgUG9wICQ1CisgICAgUG9wICQ0CiAgICAgUG9wICQzCiAgICAgUG9wICQyCiAgICAgUG9wICQxCmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2kgYi93aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2kKaW5kZXggOTVkN2I1NS4uMjQwM2Q3NyAxMDA2NDQKLS0tIGEvd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpCisrKyBiL3dpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaQpAQCAtMSwxMyArMSwxNiBAQAogOyBTY3JpcHQgZ2VuZXJhdGVkIGJ5IHRoZSBITSBOSVMgRWRpdCBTY3JpcHQgV2l6YXJkLgorU2V0Q29tcHJlc3NvciAvU09MSUQgbHptYQogCishaW5jbHVkZSB4NjQubnNoCiAhaW5jbHVkZSAiU2VjdGlvbnMubnNoIgorIWluY2x1ZGUgRmlsZUZ1bmMubnNoCishaW5zZXJ0bWFjcm8gR2V0UGFyYW1ldGVycworIWluc2VydG1hY3JvIEdldE9wdGlvbnMKK3ZhciBjbWRMaW5lUGFyYW1ldGVycwogCiA7IEhNIE5JUyBFZGl0IFdpemFyZCBoZWxwZXIgZGVmaW5lcwogIWRlZmluZSBQUk9EVUNUX05BTUUgIk5ldC1TTk1QIgotIWRlZmluZSBQUk9EVUNUX01BSl9WRVJTSU9OICI1IgotIWRlZmluZSBQUk9EVUNUX01JTl9WRVJTSU9OICI0IgotIWRlZmluZSBQUk9EVUNUX1JFVklTSU9OICIwLnByZTQiCi0hZGVmaW5lIFBST0RVQ1RfRVhFX1ZFUlNJT04gIjEiCishZGVmaW5lIFBST0RVQ1RfRVhFX1NVRkZJWCAiLiR7SU5TVEFMTEVSX1BMQVRGT1JNfS5leGUiCiAhZGVmaW5lIFBST0RVQ1RfV0VCX1NJVEUgImh0dHA6Ly93d3cubmV0LXNubXAub3JnIgogIWRlZmluZSBQUk9EVUNUX0RJUl9SRUdLRVkgIlNvZnR3YXJlXE5ldC1TTk1QIgogIWRlZmluZSBQUk9EVUNUX1VOSU5TVF9LRVkgIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwke1BST0RVQ1RfTkFNRX0iCkBAIC0zOCw3ICs0MSw3IEBACiAhaW5zZXJ0bWFjcm8gTVVJX1BBR0VfTElDRU5TRSAiZG9jc1xDT1BZSU5HIgogCiA7IE1ha2Ugc3VyZSBTU0wgaXMgaW5zdGFsbGVkLgotUGFnZSBjdXN0b20gSXNTU0xJbnN0YWxsZWQgIiIgIjogY3VzdG9tIHBhZ2UiCis7IFBhZ2UgY3VzdG9tIElzU1NMSW5zdGFsbGVkICIiICI6IGN1c3RvbSBwYWdlIgogCiA7IENvbXBvbmVudHMgcGFnZQogIWluc2VydG1hY3JvIE1VSV9QQUdFX0NPTVBPTkVOVFMKQEAgLTY5LDExICs3MiwxMSBAQAogOyBNVUkgZW5kIC0tLS0tLQogCiBOYW1lICIke1BST0RVQ1RfTkFNRX0gJHtQUk9EVUNUX01BSl9WRVJTSU9OfS4ke1BST0RVQ1RfTUlOX1ZFUlNJT059LiR7UFJPRFVDVF9SRVZJU0lPTn0iCi1PdXRGaWxlICIuLlxcbmV0LXNubXAtJHtQUk9EVUNUX01BSl9WRVJTSU9OfS5cCitPdXRGaWxlICJuZXQtc25tcC0ke1BST0RVQ1RfTUFKX1ZFUlNJT059LlwKICAgICAgICAgICAgICAgICAgICR7UFJPRFVDVF9NSU5fVkVSU0lPTn0uXAogICAgICAgICAgICAgICAgICAgJHtQUk9EVUNUX1JFVklTSU9OfVwKICAgICAgICAgICAgICAgICAgIC0ke1BST0RVQ1RfRVhFX1ZFUlNJT059XAotICAgICAgICAgICAgICAgICAgLndpbjMyLmV4ZSIKKyAgICAgICAgICAgICAgICAgICR7UFJPRFVDVF9FWEVfU1VGRklYfSIKIEluc3RhbGxEaXIgIkM6XHVzciIKIEluc3RhbGxEaXJSZWdLZXkgSEtMTSAiJHtQUk9EVUNUX0RJUl9SRUdLRVl9IiAiSW5zdGFsbERpciIKIFNob3dJbnN0RGV0YWlscyBzaG93CkBAIC04MSwxMyArODQsMjAgQEAKIAogOyBWYXJpYWJsZXMgZm9yIHdyaXRpbmcgY29uZmlnIGZpbGVzCiBWYXIgY29uZl9maWxlCisKIFZhciB3aW5FeHRETEwKK1ZhciBvcGVuU1NMCiAKIFNlY3Rpb24gIkJhc2UgQ29tcG9uZW50cyIgU0VDMDEKKyAgU2VjdGlvbkluIFJPCisgIFN0ckNtcCAkb3BlblNTTCAiZmFsc2UiIFNFQzAxX25vT3BlblNTTCBTRUMwMV9PcGVuU1NMCisgIAorICBTRUMwMV9ub09wZW5TU0w6CiAgIFNldE91dFBhdGggIiRJTlNURElSIgogICBTZXRPdmVyd3JpdGUgaWZuZXdlcgogICBGaWxlICJSRUFETUUudHh0IgogICBTZXRPdXRQYXRoICIkSU5TVERJUlxiaW4iCisKICAgRmlsZSAiYmluXG5ldHNubXAuZGxsIgogICBGaWxlICJiaW5cZW5jb2RlX2tleWNoYW5nZS5leGUiCiAgIEZpbGUgImJpblxzbm1wdmFjbS5leGUiCkBAIC0xMDYsNiArMTE2LDM1IEBACiAgIEZpbGUgImJpblxzbm1wYnVsa3dhbGsuZXhlIgogICBGaWxlICJiaW5cc25tcGJ1bGtnZXQuZXhlIgogICBGaWxlICJiaW5cc25tcHdhbGsuZXhlIgorICBnb3RvIFNFQzAxX2NvbnRpbnVlCisKKyAgU0VDMDFfT3BlblNTTDoKKyAgU2V0T3V0UGF0aCAiJElOU1RESVIiCisgIFNldE92ZXJ3cml0ZSBpZm5ld2VyCisgIEZpbGUgIlJFQURNRS50eHQiCisgIFNldE91dFBhdGggIiRJTlNURElSXGJpbiIKKworICBGaWxlICJiaW4uc3NsXG5ldHNubXAuZGxsIgorICBGaWxlICJiaW4uc3NsXGVuY29kZV9rZXljaGFuZ2UuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXB2YWNtLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wdXNtLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wdHJhcC5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHRyYW5zbGF0ZS5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHRlc3QuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXB0YWJsZS5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHN0YXR1cy5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHNldC5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcG5ldHN0YXQuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBnZXRuZXh0LmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wZ2V0LmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wZGYuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBkZWx0YS5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcGJ1bGt3YWxrLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wYnVsa2dldC5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHdhbGsuZXhlIgorCisgIFNFQzAxX2NvbnRpbnVlOgorCiAgIEZpbGUgImJpblxtaWIyYyIKICAgRmlsZSAiYmluXG1pYjJjLmJhdCIKICAgQ2FsbCBDcmVhdGVNaWIyY0JhdApAQCAtMTUxLDE4ICsxOTAsOTQgQEAKIFNlY3Rpb25Hcm91cCAvZSAiTmV0LVNOTVAgQWdlbnQgU2VydmljZSIKICAgU2VjdGlvbiAiU3RhbmRhcmQgYWdlbnQiIFNFQzAyCiAgICAgU3RyQ3B5ICR3aW5FeHRETEwgIjAiCi0gICAgQ2FsbCBJbnN0YWxsQWdlbnQKKyAgICBTZXRPdXRQYXRoICIkSU5TVERJUlxiaW4iCisKKyAgICA7IERlbGV0ZSBhZ2VudCBvdGhlcndpc2UgcmUtaW5zdGFsbGluZyBhIGRpZmZlcmVudCBhZ2VudCBtYXkgbm90IHdvcmsgYmVjYXVzZSBvZiBkYXRlIHN0YW1wcworICAgIERlbGV0ZSAiJElOU1RESVJcYmluXHNubXBkLmV4ZSIgIAorCisgICAgU3RyQ21wICRvcGVuU1NMICJmYWxzZSIgU0VDMDJfbm9PcGVuU1NMIFNFQzAyX09wZW5TU0wKKyAgICBTRUMwMl9ub09wZW5TU0w6CisgICAgICBGaWxlICJiaW5cc25tcGQuZXhlIgorCisgICAgU0VDMDJfT3BlblNTTDoKKyAgICAgIEZpbGUgImJpbi5zc2xcc25tcGQuZXhlIgorCisgICAgU2V0T3V0UGF0aCAiJElOU1RESVJcc2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXBkLWRhdGEiCisgICAgRmlsZSAic2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXBkLWRhdGFcKi4qIgorICAKKyAgICA7IElmIHdlIGFyZSBvbiBhbiBOVCBzeXN0ZW0gdGhlbiBpbnN0YWxsIHRoZSBzZXJ2aWNlIGJhdGNoIGZpbGVzLgorICAgIENhbGwgSXNOVAorICAgIFBvcCAkMQorICAgIFN0ckNtcCAkMSAwIFNFQzAyX05vU2VydmljZQorICAKKyAgICBTZXRPdXRQYXRoICIkSU5TVERJUlwiCisgICAgRmlsZSAicmVnaXN0ZXJhZ2VudC5iYXQiCisgICAgRmlsZSAidW5yZWdpc3RlcmFnZW50LmJhdCIKKyAgICBDYWxsIENyZWF0ZUFnZW50QmF0cworCisJQ2xlYXJFcnJvcnMKKwlTdHJDbXAgJElDT05TX0dST1VQICIiIFNFQzAyX05vU2VydmljZQorICAgIENyZWF0ZURpcmVjdG9yeSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2UiCisgICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIiAiJElOU1RESVJccmVnaXN0ZXJhZ2VudC5iYXQiCisgICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFVucmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiICIkSU5TVERJUlx1bnJlZ2lzdGVyYWdlbnQuYmF0IgorICAgIAorICAgIFNFQzAyX05vU2VydmljZToKKwkKICAgU2VjdGlvbkVuZAogCi0gIFNlY3Rpb24gL28gIldpdGggV2luZG93cyBFeHRlbnNpb24gRExMIHN1cHBvcnQiIFNFQzAzCi0gICAgU3RyQ3B5ICR3aW5FeHRETEwgIjEiCi0gICAgQ2FsbCBJbnN0YWxsQWdlbnQKKyAgU2VjdGlvbiAiV2l0aCBXaW5kb3dzIEV4dGVuc2lvbiBETEwgc3VwcG9ydCIgU0VDMDMJCisJU3RyQ3B5ICR3aW5FeHRETEwgIjEiCisJU2V0T3V0UGF0aCAiJElOU1RESVJcYmluIgorCisgICAgOyBEZWxldGUgYWdlbnQgb3RoZXJ3aXNlIHJlLWluc3RhbGxpbmcgYSBkaWZmZXJlbnQgYWdlbnQgbWF5IG5vdCB3b3JrIGJlY2F1c2Ugb2YgZGF0ZSBzdGFtcHMKKyAgICBEZWxldGUgIiRJTlNURElSXGJpblxzbm1wZC5leGUiICAKKworICAgIFN0ckNtcCAkb3BlblNTTCAiZmFsc2UiIFNFQzAzX25vT3BlblNTTCBTRUMwM19PcGVuU1NMCisgICAgU0VDMDNfbm9PcGVuU1NMOgorICAgICAgRmlsZSAvb25hbWU9c25tcGQuZXhlICJiaW5cc25tcGQtd2luRXh0RExMLmV4ZSIKKworICAgIFNFQzAzX09wZW5TU0w6CisgICAgICBGaWxlIC9vbmFtZT1zbm1wZC5leGUgImJpbi5zc2xcc25tcGQtd2luRXh0RExMLmV4ZSIKKworICAgIFNldE91dFBhdGggIiRJTlNURElSXHNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wZC1kYXRhIgorICAgIEZpbGUgInNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wZC1kYXRhXCouKiIKKyAgCisgICAgOyBJZiB3ZSBhcmUgb24gYW4gTlQgc3lzdGVtIHRoZW4gaW5zdGFsbCB0aGUgc2VydmljZSBiYXRjaCBmaWxlcy4KKyAgICBDYWxsIElzTlQKKyAgICBQb3AgJDEKKyAgICBTdHJDbXAgJDEgMCBTRUMwM19Ob1NlcnZpY2UKKyAgCisgICAgU2V0T3V0UGF0aCAiJElOU1RESVJcIgorICAgIEZpbGUgInJlZ2lzdGVyYWdlbnQuYmF0IgorICAgIEZpbGUgInVucmVnaXN0ZXJhZ2VudC5iYXQiCisgICAgQ2FsbCBDcmVhdGVBZ2VudEJhdHMKKworCUNsZWFyRXJyb3JzCisJU3RyQ21wICRJQ09OU19HUk9VUCAiIiBTRUMwM19Ob1NlcnZpY2UKKyAgICBDcmVhdGVEaXJlY3RvcnkgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlIgorICAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxSZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIgIiRJTlNURElSXHJlZ2lzdGVyYWdlbnQuYmF0IgorICAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxVbnJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIiAiJElOU1RESVJcdW5yZWdpc3RlcmFnZW50LmJhdCIKKyAgICAKKyAgICBTRUMwM19Ob1NlcnZpY2U6CiAgIFNlY3Rpb25FbmQKKyAgCis7ICBTZWN0aW9uICJIaWRkZW4iIFNFQ0FnZW50SGlkZGVuCisgIDtTZWN0aW9uRW5kCiBTZWN0aW9uR3JvdXBFbmQKIAogU2VjdGlvbiAiTmV0LVNOTVAgVHJhcCBTZXJ2aWNlIiBTRUMwNAogICBTZXRPdXRQYXRoICIkSU5TVERJUlxiaW4iCisKKyAgU3RyQ21wICRvcGVuU1NMICJmYWxzZSIgU0VDMDRfbm9PcGVuU1NMIFNFQzA0X09wZW5TU0wKKworICBTRUMwNF9ub09wZW5TU0w6CiAgIEZpbGUgImJpblxzbm1wdHJhcGQuZXhlIgorICBnb3RvIFNFQzA0X2NvbnRpbnVlCisKKyAgU0VDMDRfT3BlblNTTDoKKyAgRmlsZSAiYmluLnNzbFxzbm1wdHJhcGQuZXhlIgorCisgIFNFQzA0X2NvbnRpbnVlOgogICBTZXRPdXRQYXRoICIkSU5TVERJUlxzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcHRyYXBkLWRhdGEiCiAgIEZpbGUgInNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wdHJhcGQtZGF0YVwqLioiCiAgIDtTZXRPdXRQYXRoICIkSU5TVERJUlxldGNcc25tcCIKQEAgLTE3OCw2ICsyOTMsOCBAQAogICBGaWxlICJ1bnJlZ2lzdGVydHJhcGQuYmF0IgogICBDYWxsIENyZWF0ZVRyYXBkQmF0cwogICAKKyAgQ2xlYXJFcnJvcnMKKyAgU3RyQ21wICRJQ09OU19HUk9VUCAiIiBOb1RyYXBTZXJ2aWNlCiAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxSZWdpc3RlciBUcmFwIFNlcnZpY2UubG5rIiAiJElOU1RESVJccmVnaXN0ZXJ0cmFwZC5iYXQiCiAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxVbnJlZ2lzdGVyIFRyYXAgU2VydmljZS5sbmsiICIkSU5TVERJUlx1bnJlZ2lzdGVydHJhcGQuYmF0IgogICAKQEAgLTE4Niw3ICszMDMsMTggQEAKIAogU2VjdGlvbiAiUGVybCBTTk1QIE1vZHVsZXMiIFNFQzA1CiAgIFNldE91dFBhdGggIiRJTlNURElSXHBlcmxceDg2IgorCisgIFN0ckNtcCAkb3BlblNTTCAiZmFsc2UiIFNFQzA1X25vT3BlblNTTCBTRUMwNV9PcGVuU1NMCisKKyAgU0VDMDVfbm9PcGVuU1NMOgogICBGaWxlICJwZXJsXHg4NlxOZXRTTk1QLnRhci5neiIKKyAgZ290byBTRUMwNV9jb250aW51ZQorCisgIFNFQzA1X09wZW5TU0w6CisgIEZpbGUgInBlcmwuc3NsXHg4NlxOZXRTTk1QLnRhci5neiIKKworICBTRUMwNV9jb250aW51ZToKKwogICBTZXRPdXRQYXRoICIkSU5TVERJUlxwZXJsIgogICBGaWxlICJwZXJsXE5ldFNOTVAucHBkIgogICBTZXRPdXRQYXRoICIkSU5TVERJUlxiaW4iCkBAIC0yMjQsMTEgKzM1MiwxOCBAQAogICBGaWxlICJsaWJcKi4qIgogU2VjdGlvbkVuZAogCitTZWN0aW9uICJFbmNyeXB0aW9uIHN1cHBvcnQgKE9wZW5TU0wpIiBTRUMwNworU2VjdGlvbkVuZAorCiBTZWN0aW9uIC1BZGRpdGlvbmFsSWNvbnMKKyAgQ2xlYXJFcnJvcnMKKyAgU3RyQ21wICRJQ09OU19HUk9VUCAiIiBub0FkZGl0aW9uYWxJdGVtcwogICBDcmVhdGVEaXJlY3RvcnkgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUCIKICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxVbmluc3RhbGwubG5rIiAiJElOU1RESVJcdW5pbnN0LmV4ZSIKICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxOZXQtU05NUCBIZWxwLmxuayIgIiRJTlNURElSXGRvY3NcTmV0LVNOTVAuY2htIgogICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFJFQURNRS5sbmsiICIkSU5TVERJUlxSRUFETUUudHh0IgorICAKKyAgbm9BZGRpdGlvbmFsSXRlbXM6CiBTZWN0aW9uRW5kCiAKIFNlY3Rpb24gLVBvc3QKQEAgLTI2Miw2ICszOTcsOCBAQAogICAhaW5zZXJ0bWFjcm8gTVVJX0RFU0NSSVBUSU9OX1RFWFQgJHtTRUMwNn0gXAogICAgICAgICAgICAgICAgIlRoZSBEZXZlbG9wbWVudCBmaWxlcyBwcm92aWRlIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyB1c2VkIGZvciBkZXZlbG9waW5nIFwKICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgTmV0LVNOTVAgbGlicmFyeS4iCisgICFpbnNlcnRtYWNybyBNVUlfREVTQ1JJUFRJT05fVEVYVCAke1NFQzA3fSBcCisgICAgICAgICAgICAgICAiRW5jcnlwdGlvbiBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciBTTk1QdjMgU0hBIGF1dGhlbnRpY2F0aW9uIGFuZCBERVMgLyBBRVMgcHJpdmFjeS4gIEEgV2luZG93cyBwYWNrYWdlIGlzIGF2YWlsYWJsZSBmcm9tIHd3dy5zbHByb3dlYi5jb20uIgogIWluc2VydG1hY3JvIE1VSV9GVU5DVElPTl9ERVNDUklQVElPTl9FTkQKIAogRnVuY3Rpb24gQ3JlYXRlU25tcENvbmYKQEAgLTUyNSwzMCArNjYyLDI1NiBAQAogRnVuY3Rpb25FbmQKIAogRnVuY3Rpb24gdW4ub25Jbml0CisgIFNldFJlZ1ZpZXcgNjQJCTsgUHJldmVudCB0aGUgaW5zdGFsbGVyIGZyb20gdXNpbmcgdGhlIFdvdzY0MzJOb2RlIEhLTE0gc3Via2V5IG9uIDY0LWJpdCBzeXN0ZW1zCiAgIE1lc3NhZ2VCb3ggTUJfSUNPTlFVRVNUSU9OfE1CX1lFU05PfE1CX0RFRkJVVFRPTjIgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSAkKF5OYW1lKSBhbmQgYWxsIG9mIGl0cyBjb21wb25lbnRzPyIgSURZRVMgKzIKICAgQWJvcnQKIEZ1bmN0aW9uRW5kCiAKIEZ1bmN0aW9uIC5vbkluaXQKLQotU3RyQ3B5ICQzICR7U0VDMDJ9Ci0KK1NldFJlZ1ZpZXcgNjQJCTsgUHJldmVudCB0aGUgaW5zdGFsbGVyIGZyb20gdXNpbmcgdGhlIFdvdzY0MzJOb2RlIEhLTE0gc3Via2V5IG9uIDY0LWJpdCBzeXN0ZW1zCiBQdXNoICQwCitQdXNoICRSMAorUHVzaCAkUjEKKworOyBDaGVjayBmb3IgLz8gY29tbWFuZCBsaW5lIHVzYWdlIG9wdGlvbgorJHtHZXRQYXJhbWV0ZXJzfSAkUjEKK1N0ckNweSAkY21kTGluZVBhcmFtZXRlcnMgJFIxCitDbGVhckVycm9ycworJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgJy8/JyAkUjAKK0lmRXJyb3JzICszIDAKK01lc3NhZ2VCb3ggTUJfT0sgIk9wdGlvbnM6JFxuICBcU3RhcnRNZW51PXtHcm91cE5hbWV9JFxuICBcQWdlbnQ9c3RhbmRhcmR8ZXh0RExMfG5vbmUgICAoZGVmYXVsdCBzdGFuZGFyZCkkXG4gIFxub1RyYXBkJFx0KGRlZmF1bHQgXFRyYXBkKSRcbiAgXG5vUGVybCRcdCRcdChkZWZhdWx0IFxQZXJsKSRcbiAgXERldiRcdCRcdChkZWZhdWx0IFxub0RldikkXG4gIFxPcGVuU1NMJFx0KGRlZmF1bHQgXG5vT3BlblNTTCkiCitBYm9ydAorCis7IE1ha2Ugc3VyZSB3ZSdyZSBydW5uaW5nIFdpbmRvd3MgMjAwMCAoNS4wKSBvciBoaWdoZXIKK0NsZWFyRXJyb3JzCitSZWFkUmVnU3RyICRSMCBIS0xNIFwKKyAgIlNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzIE5UXEN1cnJlbnRWZXJzaW9uIiBDdXJyZW50VmVyc2lvbgorSWZFcnJvcnMgd2luZG93c1ZlcnNpb25FcnJvcgorCitJbnRDbXAgJFIwICc1LjAnIHdpbmRvd3NWZXJzaW9uT0sgd2luZG93c1ZlcnNpb25FcnJvciB3aW5kb3dzVmVyc2lvbk9LCit3aW5kb3dzVmVyc2lvbkVycm9yOgorTWVzc2FnZUJveCBNQl9JQ09OSU5GT1JNQVRJT058TUJfT0sgIlRoaXMgdmVyc2lvbiBvZiAkKF5OYW1lKSByZXF1aXJlcyBXaW5kb3dzIDIwMDAgb3IgaGlnaGVyLiAgRm9yIFdpbmRvd3MgTlQgYW5kIGxvd2VyLCBwbGVhc2UgdXNlIE5ldC1TTk1QIDUuNC4iCitRdWl0CisKK3dpbmRvd3NWZXJzaW9uT0s6Cis7TWVzc2FnZUJveCBNQl9JQ09OSU5GT1JNQVRJT058TUJfT0sgIldpbmRvd3MgdmVyc2lvbiBvazogJFIwIgorCis7IE1ha2Ugc3VyZSB3ZSdyZSBydW5uaW5nIHRoZSByaWdodCBwbGF0Zm9ybQorO0lOU1RBTExFUl9QTEFURk9STQorJHtJZn0gJHtJTlNUQUxMRVJfUExBVEZPUk19ID09ICJ4NjQiCisgIDtNZXNzYWdlQm94IE1CX09LICI2NC1iaXQgYmluYXJ5IgorICAke0lmTm90fSAke1J1bm5pbmdYNjR9CisgICAgO01lc3NhZ2VCb3ggTUJfT0sgIjMyLWJpdCBPUyIKKwlNZXNzYWdlQm94IE1CX09LICJUaGlzIE5ldC1TTk1QIHBhY2thZ2UgcmVxdWlyZXMgNjQtYml0IFdpbmRvd3MgKHg2NCkuICBQbGVhc2UgZG93bmxvYWQgdGhlIHg4NiBpbnN0YWxsZXIgcGFja2FnZS4iCisJUXVpdAorICAke0Vsc2V9CisgICAgO01lc3NhZ2VCb3ggTUJfT0sgIjY0LWJpdCBPUyIKKyAgJHtFbmRJZn0KKyR7RWxzZX0KKyAgO01lc3NhZ2VCb3ggTUJfT0sgIng4NiAoMzItYml0KSBiaW5hcnkiCisgICR7SWZ9ICR7UnVubmluZ1g2NH0KKyAgICA7TWVzc2FnZUJveCBNQl9PSyAiNjQtYml0IE9TIgorCU1lc3NhZ2VCb3ggTUJfT0sgIllvdSBhcmUgaW5zdGFsbGluZyBhIDMyLWJpdCBwYWNrYWdlIG9uIGEgNjQtYml0IG9wZXJhdGluZyBzeXN0ZW0uICBBbGwgYXBwbGljYXRpb25zIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3IgdGhlICdOZXQtU05NUCBBZ2VudCBTZXJ2aWNlIHdpdGggV2luZG93cyBFeHRlbnNpb24gRExMIHN1cHBvcnQnLiAgUGxlYXNlIGRvd25sb2FkIHRoZSB4NjQgaW5zdGFsbGVyIHBhY2thZ2UuIgorICAke0VuZElmfQkKKyR7RW5kSWZ9CiAKIDsgRGlzYWJsZSBEZXZlbG9wbWVudCBmaWxlcyBzZWN0aW9uIGJ5IGRlZmF1bHQKIFNlY3Rpb25HZXRGbGFncyAke1NFQzA2fSAkMAogSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQogU2VjdGlvblNldEZsYWdzICR7U0VDMDZ9ICQwCiAKKzsgRGlzYWJsZSBPcGVuU1NMIHNlY3Rpb24gYnkgZGVmYXVsdAorU2VjdGlvbkdldEZsYWdzICR7U0VDMDd9ICQwCitJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CitTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwN30gJDAKK1N0ckNweSAkb3BlblNTTCAiZmFsc2UiCisKKzsgRGlzYWJsZSBBZ2VudCB3aXRoIHdpbkV4dERMTCBzdXBwb3J0IC0gdXNlciBjYW4gc2VsZWN0IGVpdGhlciBidXQgbm90IGJvdGguCitTdHJDcHkgJFI4ICR7U0VDMDJ9CitTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwMn0gJDAKK0ludE9wICQwICQwIHwgJHtTRl9TRUxFQ1RFRH0KK1NlY3Rpb25TZXRGbGFncyAke1NFQzAyfSAkMAorU2VjdGlvbkdldEZsYWdzICR7U0VDMDN9ICQwCitJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CitTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwM30gJDAKKworOyBTdG9yZSBjdXJyZW50IHN0YXR1cyBvZiBTRUMwNyAoU1NMKS4gIFVzZWQgZm9yIGNoZWNraW5nIGlmIE9wZW5TU0wgaXMgaW5zdGFsbGVkLgorU2VjdGlvbkdldEZsYWdzICR7U0VDMDd9ICRSOQorCis7IHByb2Nlc3Mgb3RoZXIgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKK0NhbGwgcGFyc2VQYXJhbWV0ZXJzCisKK1BvcCAkUjAKIFBvcCAkMAogRnVuY3Rpb25FbmQKIAorRnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJzCisgIFB1c2ggJFIwCisgIFB1c2ggJDAKKworICA7IC9TdGFydE1lbnU9CisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvU3RhcnRNZW51PSIgICRSMAorICBJZkVycm9ycyArMiAwCisgIFN0ckNweSAkSUNPTlNfR1JPVVAgJFIwCisKKyAgOyAve25vLH1UcmFwZCAgCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvVHJhcGQiICAkUjAKKyAgSWZFcnJvcnMgKzQgMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwNH0gJDAKKyAgSW50T3AgJDAgJDAgfCAke1NGX1NFTEVDVEVEfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwNH0gJDAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9ub1RyYXBkIiAgJFIwCisgIElmRXJyb3JzICs0IDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDR9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDR9ICQwCisKKyAgOyAve25vLH1QZXJsICAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9QZXJsIiAgJFIwCisgIElmRXJyb3JzICs0IDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDV9ICQwCisgIEludE9wICQwICQwIHwgJHtTRl9TRUxFQ1RFRH0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDV9ICQwCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvbm9QZXJsIiAgJFIwCisgIElmRXJyb3JzICs0IDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDV9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDV9ICQwCisKKyAgOyAve25vLH1EZXYgIAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL0RldiIgICRSMAorICBJZkVycm9ycyArNCAwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA2fSAkMAorICBJbnRPcCAkMCAkMCB8ICR7U0ZfU0VMRUNURUR9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzA2fSAkMAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL25vRGV2IiAgJFIwCisgIElmRXJyb3JzICs0IDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDZ9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDZ9ICQwCisKKyAgOyAve25vLH1PcGVuU1NMICAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9PcGVuU1NMIiAgJFIwCisgIElmRXJyb3JzICs0IDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDd9ICQwCisgIEludE9wICQwICQwIHwgJHtTRl9TRUxFQ1RFRH0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDd9ICQwCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvbm9PcGVuU1NMIiAgJFIwCisgIElmRXJyb3JzICs0IDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDd9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDd9ICQwCisKKyAgOyAvQWdlbnQ9ICAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9BZ2VudD0iICAkUjAKKyAgSWZFcnJvcnMgZW5kT2ZBZ2VudCAwCisgIDsgL0FnZW50PW5vbmUKKyAgQ2xlYXJFcnJvcnMKKyAgU3RyQ21wICRSMCAibm9uZSIgMCBzdGFuZGFyZEFnZW50CisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAyfSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAyfSAkMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgR290byBlbmRPZkFnZW50CisgIAorICBzdGFuZGFyZEFnZW50OgorICA7IC9BZ2VudD1zdGFuZGFyZAorICBDbGVhckVycm9ycworICBTdHJDbXAgJFIwICJzdGFuZGFyZCIgMCB3aW5FeHRETExBZ2VudAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAgSW50T3AgJDAgJDAgfCAke1NGX1NFTEVDVEVEfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDN9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDN9ICQwCisgIEdvdG8gZW5kT2ZBZ2VudAorICAKKyAgd2luRXh0RExMQWdlbnQ6CisgIDsgL0FnZW50PWV4dERMTAorICBDbGVhckVycm9ycworICBTdHJDbXAgJFIwICJleHRETEwiIDAgZW5kT2ZBZ2VudAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDN9ICQwCisgIEludE9wICQwICQwIHwgJHtTRl9TRUxFQ1RFRH0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDN9ICQwCisgIGVuZE9mQWdlbnQ6CisgIAorICBQb3AgJFIwICAKK0Z1bmN0aW9uRW5kCisKIEZ1bmN0aW9uIC5vblNlbENoYW5nZQogCi0gICFpbnNlcnRtYWNybyBTdGFydFJhZGlvQnV0dG9ucyAkMwotICAgICFpbnNlcnRtYWNybyBSYWRpb0J1dHRvbiAke1NFQzAyfQotICAgICFpbnNlcnRtYWNybyBSYWRpb0J1dHRvbiAke1NFQzAzfQotICAhaW5zZXJ0bWFjcm8gRW5kUmFkaW9CdXR0b25zCis7ICAhaW5zZXJ0bWFjcm8gU3RhcnRSYWRpb0J1dHRvbnMgJDIKKyAgICA7IWluc2VydG1hY3JvIFJhZGlvQnV0dG9uICR7U0VDMDJ9CisgICAgOyFpbnNlcnRtYWNybyBSYWRpb0J1dHRvbiAke1NFQzAzfQorICA7IWluc2VydG1hY3JvIEVuZFJhZGlvQnV0dG9ucworCisgICMgQ3JlYXRlIGEgYmFja3VwIGNvcHkgb2YgJDAKKyAgUHVzaCAkMAorCisgIDsgQWdlbnQgLSBPbmx5IGFsbG93IHVzZXIgdG8gc2VsZWN0IHN0YW5kYXJkIG9yIHdpbkV4dERMTCBhZ2VudAorICBTdHJDbXAgJFI4ICR7U0VDMDJ9IG9uU2VsQ2hhbmdlX2NoZWNrX1NFQzMKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDJ9ICQwCisgIEludE9wICQwICQwICYgJHtTRl9TRUxFQ1RFRH0KKyAgSW50Q21wICQwICR7U0ZfU0VMRUNURUR9IDAgb25TZWxDaGFuZ2VfYWdlbnRfZG9uZSBvblNlbENoYW5nZV9hZ2VudF9kb25lCisgIFN0ckNweSAkUjggJHtTRUMwMn0KKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDN9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDN9ICQwCisgIEdvdG8gb25TZWxDaGFuZ2VfYWdlbnRfZG9uZQorIAorICBvblNlbENoYW5nZV9jaGVja19TRUMzOgorICAgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAzfSAkMAorICAgIEludE9wICQwICQwICYgJHtTRl9TRUxFQ1RFRH0KKyAgICBJbnRDbXAgJDAgJHtTRl9TRUxFQ1RFRH0gMCBvblNlbENoYW5nZV9hZ2VudF9kb25lIG9uU2VsQ2hhbmdlX2FnZW50X2RvbmUKKyAgICBTdHJDcHkgJFI4ICR7U0VDMDN9CisgICAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDJ9ICQwCisgICAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICAgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAyfSAkMAorIAorICBvblNlbENoYW5nZV9hZ2VudF9kb25lOgorCisgIDsgSWYgdGhlIHVzZXIgaXMgaW5zdGFsbGluZyBhIDMyLWJpdCBiaW5hcnkgb24gYSA2NC1iaXQgT1MsIGRpc2FibGUgd2luRXh0RExMIGFnZW50LgorICAke0lmfSAke1J1bm5pbmdYNjR9CisgICAgJHtJZk5vdH0gJHtJTlNUQUxMRVJfUExBVEZPUk19ID09ICJ4NjQiCisJICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgICAgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgICAgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAzfSAkMAorICAgICR7RW5kSWZ9CisgICR7RW5kSWZ9CisgICAgCisgIDsgSWYgdXNlciBzZWxlY3RlZCBFbmNyeXB0aW9uIHN1cHBvcnQsIG1ha2Ugc3VyZSBPcGVuU1NMIGlzIGluc3RhbGxlZC4KKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDd9ICQwCisgIEludE9wICQwICQwICYgJHtTRl9TRUxFQ1RFRH0KKyAgSW50Q21wICQwICR7U0ZfU0VMRUNURUR9IGVuYWJsZVNTTG9uU2VsQ2hhbmdlIGRpc2FibGVTU0xvblNlbENoYW5nZQorICBlbmFibGVTU0xvblNlbENoYW5nZToKKyAgICBTdHJDcHkgJG9wZW5TU0wgInRydWUiCisgICAgSW50Q21wICRSOSAkMCBTU0xhbHJlYWR5RW5hYmxlZCBTU0xqdXN0RW5hYmxlZAorICAgIFNTTGp1c3RFbmFibGVkOgorICAgICAgQ2FsbCBJc1NTTEluc3RhbGxlZAorICAgICAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDd9ICRSOQorICAgIFNTTGFscmVhZHlFbmFibGVkOgorICAgICAgZ290byBjb250aW51ZVNTTG9uU2VsQ2hhbmdlCisgIGRpc2FibGVTU0xvblNlbENoYW5nZToKKyAgICBTdHJDcHkgJG9wZW5TU0wgImZhbHNlIgorCVNlY3Rpb25HZXRGbGFncyAke1NFQzA3fSAkUjkKKyAgY29udGludWVTU0xvblNlbENoYW5nZToKKyAgCisgIFBvcCAkMAogCiBGdW5jdGlvbkVuZAogCkBAIC01NzksNiArOTQyLDkgQEAKICAgRGVsZXRlICIkSU5TVERJUlxkb2NzXENPUFlJTkciCiAgIERlbGV0ZSAiJElOU1RESVJcZG9jc1xOZXQtU05NUC5jaG0iCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXG5ldC1zbm1wLXBlcmwtdGVzdC5wbCIKKyAgOyBpZGVhbGx5IHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIHRoaXMgZmlsZSBoYXMgY2hhbmdlZAorICBEZWxldGUgIiRJTlNURElSXGV0Y1xzbm1wXHNubXAuY29uZiIKKwogICBEZWxldGUgIiRJTlNURElSXGJpblxzbm1wdHJhcGQuZXhlIgogICBEZWxldGUgIiRJTlNURElSXGJpblxzbm1wZC5leGUiCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXHNubXB3YWxrLmV4ZSIKQEAgLTYwMCw2ICs5NjYsNyBAQAogICBEZWxldGUgIiRJTlNURElSXGJpblxzbm1wdmFjbS5leGUiCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXGVuY29kZV9rZXljaGFuZ2UuZXhlIgogICBEZWxldGUgIiRJTlNURElSXGJpblxuZXRzbm1wLmRsbCIKKwogICBEZWxldGUgIiRJTlNURElSXGJpblxtaWIyYyIKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cbWliMmMuYmF0IgogICBEZWxldGUgIiRJTlNURElSXGJpblxzbm1wY29uZiIKQEAgLTYyNiw2ICs5OTMsNyBAQAogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wdHJhcGQtZGF0YVxsb2dnaW5nIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wdHJhcGQtZGF0YVxydW50aW1lIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xBR0VOVFgtTUlCLnR4dCIKKyAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcQlJJREdFLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXERJU01BTi1FVkVOVC1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xESVNNQU4tTlNMT09LVVAtTUlCLnR4dCIKQEAgLTY2MCw2ICsxMDI4LDcgQEAKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcTkVULVNOTVAtTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcTkVULVNOTVAtTU9OSVRPUi1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xORVQtU05NUC1QQVNTLU1JQi50eHQiCisgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXE5FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xORVQtU05NUC1TWVNURU0tTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcTkVULVNOTVAtVEMudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xORVQtU05NUC1WQUNNLU1JQi50eHQiCkBAIC02NzcsNiArMTA0Niw4IEBACiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFNOTVAtTk9USUZJQ0FUSU9OLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFNOTVAtUFJPWFktTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcU05NUC1UQVJHRVQtTUlCLnR4dCIKKyAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcU05NUC1UTFMtVE0tTUlCLnR4dCIKKyAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcU05NUC1UU00tTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcU05NUC1VU0VSLUJBU0VELVNNLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFNOTVAtVVNNLUFFUy1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xTTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQiCkBAIC02OTgsOCArMTA2OSw4IEBACiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFVDRC1TTk1QLU1JQi1PTEQudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xVRFAtTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcLmluZGV4IgorICBEZWxldGUgIiRJTlNURElSXHNubXBccGVyc2lzdFxtaWJfaW5kZXhlc1wwIgogCi0gIFNldE91dFBhdGggIiRJTlNURElSXHNoYXJlXHNubXAiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5hcnJheS11c2VyLmNvbmYiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5jaGVja192YWx1ZXMuY29uZiIKQEAgLTcxOSwxMSArMTA5MCwxMSBAQAogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMubm90aWZ5LmNvbmYiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5vbGQtYXBpLmNvbmYiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5wZXJsLmNvbmYiCisgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5yYXctdGFibGUuY29uZiIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLnJvdy5jb25mIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMuc2NhbGFyLmNvbmYiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy50YWJsZV9kYXRhLmNvbmYiCiAKLSAgU2V0T3V0UGF0aCAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxkZWZhdWx0LW1mZC10b3AubTJjIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxkZXRhaWxzLWVudW1zLm0yaSIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcZGV0YWlscy1ub2RlLm0yaSIKQEAgLTc2Niw3ICsxMTM3LDcgQEAKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYyIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcbWZkLWludGVyZmFjZS5tMmMiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXG1mZC1tYWtlZmlsZS5tMm0iCi0gIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXG1mZC1wZXJzaXN0ZW5jZS5tMm0iCisgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXG1mZC1wZXJzaXN0ZW5jZS5tMmkiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXG1mZC1yZWFkbWUubTJjIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxtZmQtdG9wLm0yYyIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcbm9kZS1nZXQubTJpIgpAQCAtNzkwLDcgKzExNjEsNiBAQAogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxzeW50YXgtUm93U3RhdHVzLXZhcmJpbmQtdmFsaWRhdGUubTJpIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxzeW50YXgtU3RvcmFnZVR5cGUtZGVwZW5kZW5jaWVzLm0yaSIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcc3ludGF4LVRlc3RBbmRJbmNyLWdldC5tMmkiCi0gIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXCIKIAogICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxOZXQtU05NUCBIZWxwLmxuayIKICAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcVW5pbnN0YWxsLmxuayIKQEAgLTgzMSw2ICsxMjAxLDcgQEAKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXHN5c3RlbVxmcmVlYnNkNi5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcc3lzdGVtXGZyZWVic2Q3LmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxzeXN0ZW1cZnJlZWJzZDguaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXHN5c3RlbVxrZnJlZWJzZC5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcc3lzdGVtXGRyYWdvbmZseS5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcc3lzdGVtXG1pbmd3MzIuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXHN5c3RlbVxzb2xhcmlzMi45LmgiCkBAIC05MTAsNiArMTI4MSw5IEBACiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBfbG9ja2luZy5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wdjMuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcb2lkX3N0YXNoLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBBbGlhc0RvbWFpbi5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wRFRMU1VEUERvbWFpbi5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wU1NIRG9tYWluLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBTVEREb21haW4uaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcFRDUERvbWFpbi5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wVURQRG9tYWluLmgiCkBAIC05MTgsMTAgKzEyOTIsMTUgQEAKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcF9lbnVtLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGNtdV9jb21wYXQuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGRpcl91dGlscy5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxmaWxlX3V0aWxzLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHRleHRfdXRpbHMuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcdHlwZXMuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcZmRfZXZlbnRfbWFuYWdlci5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxsYXJnZV9mZF9zZXQuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcF9vcGVuc3NsLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBfc2VydmljZS5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wdHNtLmgiCiAKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHN0YXNoX2NhY2hlLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFxpbnN0YW5jZS5oIgpAQCAtOTY0LDYgKzEzNDMsOCBAQAogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcc2VyaWFsaXplLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFxzdGFzaF90b19uZXh0LmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV90ZGF0YS5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcc3lzT1JUYWJsZS5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcYWdlbnRfc3lzT1JUYWJsZS5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcbWliX21vZHVsZV9jb25maWcuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGFnZW50X21vZHVsZV9jb25maWcuaCIKIApAQCAtOTc3LDcgKzEzNTgsMTEgQEAKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXGlwc3RhdHMuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXGlwYWRkcmVzcy5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3NcdGNwQ29ubi5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3NcZGVmYXVsdF9yb3V0ZS5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3NcaXBfc2NhbGFycy5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3Ncc2NvcGV6b25lLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1xzd2luc3QuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXHN3cnVuLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1x1ZHBfZW5kcG9pbnQuaCIKIAogICBEZWxldGUgIiRJTlNURElSXGxpYlxuZXRzbm1wYWdlbnQubGliIgpAQCAtOTg3LDggKzEzNzIsNiBAQAogICBEZWxldGUgIiRJTlNURElSXGxpYlxuZXRzbm1wbWlicy5saWIiCiAgIERlbGV0ZSAiJElOU1RESVJcbGliXG5ldHNubXAuZXhwIgogICAKLSAgUk1EaXIgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlIgotICBSTURpciAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQIgogICBSTURpciAiJElOU1RESVJccGVybFx4ODYiCiAgIFJNRGlyICIkSU5TVERJUlxwZXJsIgogICBSTURpciAiJElOU1RESVJcbGliIgpAQCAtMTAxMiw2ICsxMzk1LDcgQEAKICAgUk1EaXIgIiRJTlNURElSXHNoYXJlIgogCiAgIFJNRGlyICIkSU5TVERJUlx0ZW1wIgorICBSTURpciAiJElOU1RESVJcc25tcFxwZXJzaXN0XG1pYl9pbmRleGVzIgogICBSTURpciAiJElOU1RESVJcc25tcFxwZXJzaXN0IgogICBSTURpciAiJElOU1RESVJcc25tcCIKICAgUk1EaXIgIiRJTlNURElSXGV0Y1xzbm1wIgpAQCAtMTAyMSw2ICsxNDA1LDMxIEBACiAgIFJNRGlyICIkSU5TVERJUlxpbmNsdWRlIgogICBSTURpciAiJElOU1RESVJcbG9nIgogICBSTURpciAiJElOU1RESVIiCisgIAorICA7IFN0YXJ0IE1lbnUgZW50cmllcyBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBmb3IgdGhlIGN1cnJlbnQgdXNlciBvbmx5LAorICA7IG9yIGZvciBBbGwgVXNlcnMuICBTbyBsZXQncyBkZWxldGUgYm90aCBzZXRzLi4uLgorICBTZXRTaGVsbFZhckNvbnRleHQgY3VycmVudAorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxVbmluc3RhbGwubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxOZXQtU05NUCBIZWxwLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcUkVBRE1FLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxSZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxVbnJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFJlZ2lzdGVyIFRyYXAgU2VydmljZS5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcVW5yZWdpc3RlciBUcmFwIFNlcnZpY2UubG5rIgorICBSTURpciAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2UiCisgIFJNRGlyICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVAiCisKKyAgU2V0U2hlbGxWYXJDb250ZXh0IGFsbAorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxVbmluc3RhbGwubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxOZXQtU05NUCBIZWxwLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcUkVBRE1FLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxSZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxVbnJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFJlZ2lzdGVyIFRyYXAgU2VydmljZS5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcVW5yZWdpc3RlciBUcmFwIFNlcnZpY2UubG5rIgorICBSTURpciAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2UiCisgIFJNRGlyICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVAiCisgIAogICA7IERlbGV0ZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgIDtQdXNoICJTTk1QQ09ORlBBVEgiCiAgIDtDYWxsIHVuLkRlbGV0ZUVudlN0cgpAQCAtMTAzOCw1MSArMTQ0NywyNCBAQAogCiBGdW5jdGlvbiBJc1NTTEluc3RhbGxlZAogICBQdXNoICRSMAotICBTdHJDbXAgJHtPUEVOU1NMX1JFUVVJUkVEfSAiMCIgY29udGludWVJbnN0YWxsCi0gIFJlYWRFbnZTdHIgJFIwICJ3aW5kaXIiCi0gIElmRmlsZUV4aXN0cyAiJFIwXHN5c3RlbTMyXGxpYmVheTMyLmRsbCIgMCBub1NTTAotICAgIEdvdG8gY29udGludWVJbnN0YWxsCi0gIG5vU1NMOgotICAgIE1lc3NhZ2VCb3ggTUJfWUVTTk98TUJfSUNPTlFVRVNUSU9OICJPcGVuU1NMICgkUjBcc3lzdGVtMzJcbGliZWF5MzIuZGxsKSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgaW5zdGFsbGVkLiAgT3BlblNTTCBpcyByZXF1aXJlZCBmb3IgdGhpcyBpbnN0YWxsYXRpb24gb2YgTmV0LVNOTVAuICBQbGVhc2UgaW5zdGFsbCBPcGVuU1NMIGZyb20gaHR0cDovL3d3dy5zbHByb3dlYi5jb20vcHJvZHVjdHMvV2luMzJPcGVuU1NMLmh0bWwgYW5kIHRyeSBhZ2Fpbi4gIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlIGluc3RhbGxpbmcgYW55d2F5cz8iIElEWUVTIGNvbnRpbnVlSW5zdGFsbAorICBQdXNoICRSMQorCisgIEdldERMTFZlcnNpb24gbGliZWF5MzIuZGxsICRSMCAkUjEKKyAgSWZFcnJvcnMgbm9TU0wKKworICA7IENvbnRpbnVlIGluc3RhbGxpbmcgaWYgdGhlIERMTCB2ZXJzaW9uIGlzID49IDEuMC4wLjAKKyAgSW50Q21wVSA2NTUzNiAkUjAgY29udGludWVJbnN0YWxsIGNvbnRpbnVlSW5zdGFsbAorCisgIE1lc3NhZ2VCb3ggTUJfT0sgIlRoaXMgcGFja2FnZSBpcyBrbm93biBub3QgdG8gd29yayB3aXRoIE9wZW5TU0wgdmVyc2lvbnMgYmVmb3JlIDEuMC4wLiAgUGxlYXNlIGluc3RhbGwgdGhlIGxhdGVzdCBPcGVuU1NMIHZlcnNpb24gZnJvbSBodHRwOi8vd3d3LnNscHJvd2ViLmNvbS9wcm9kdWN0cy9XaW4zMk9wZW5TU0wuaHRtbCBhbmQgdHJ5IGFnYWluLiIKICAgUXVpdAorCisgIG5vU1NMOgorICAgIE1lc3NhZ2VCb3ggTUJfWUVTTk98TUJfSUNPTlFVRVNUSU9OICJPcGVuU1NMIGRvZXMgbm90IGFwcGVhciB0byBiZSBpbnN0YWxsZWQuICBPcGVuU1NMIGlzIHJlcXVpcmVkIGZvciB0aGlzIGluc3RhbGxhdGlvbiBvZiBOZXQtU05NUC4gIFBsZWFzZSBpbnN0YWxsIE9wZW5TU0wgZnJvbSBodHRwOi8vd3d3LnNscHJvd2ViLmNvbS9wcm9kdWN0cy9XaW4zMk9wZW5TU0wuaHRtbCBhbmQgdHJ5IGFnYWluLiAgV291bGQgeW91IGxpa2UgdG8gY29udGludWUgaW5zdGFsbGluZyBhbnl3YXlzPyIgSURZRVMgY29udGludWVJbnN0YWxsCisgIFF1aXQKKyAgCiAgIGNvbnRpbnVlSW5zdGFsbDoKKyAgUG9wICRSMQogICBQb3AgJFIwCiBGdW5jdGlvbkVuZAogCi1GdW5jdGlvbiBJbnN0YWxsQWdlbnQKLSAgU2V0T3V0UGF0aCAiJElOU1RESVJcYmluIgogCi0gIDsgRGVsZXRlIGFnZW50IG90aGVyd2lzZSByZS1pbnN0YWxsaW5nIGEgZGlmZmVyZW50IGFnZW50IG1heSBub3Qgd29yayBiZWNhdXNlIG9mIGRhdGUgc3RhbXBzCi0gIERlbGV0ZSAiJElOU1RESVJcYmluXHNubXBkLmV4ZSIgIAotCi0gIFN0ckNtcCAkd2luRXh0RExMICIxIiBzZWMwMl93aW5FeHRETEwgc2VjMDJfbm9ybWFsCi0KLSAgc2VjMDJfd2luRXh0RExMOgotICA7RmlsZSAiYmluXHNubXBkLXdpbkV4dERMTC5leGUiCi0gIEZpbGUgL29uYW1lPXNubXBkLmV4ZSAiYmluXHNubXBkLXdpbkV4dERMTC5leGUiCi0gIGdvdG8gc2VjMDJfY29udGludWUKLQotICBzZWMwMl9ub3JtYWw6Ci0gIEZpbGUgImJpblxzbm1wZC5leGUiCi0KLSAgc2VjMDJfY29udGludWU6Ci0KLSAgU2V0T3V0UGF0aCAiJElOU1RESVJcc2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXBkLWRhdGEiCi0gIEZpbGUgInNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wZC1kYXRhXCouKiIKLSAgCi0gIDsgSWYgd2UgYXJlIG9uIGFuIE5UIHN5c3RlbSB0aGVuIGluc3RhbGwgdGhlIHNlcnZpY2UgYmF0Y2ggZmlsZXMuCi0gIENhbGwgSXNOVAotICBQb3AgJDEKLSAgU3RyQ21wICQxIDAgTm9TZXJ2aWNlCi0gIAotICBTZXRPdXRQYXRoICIkSU5TVERJUlwiCi0gIEZpbGUgInJlZ2lzdGVyYWdlbnQuYmF0IgotICBGaWxlICJ1bnJlZ2lzdGVyYWdlbnQuYmF0IgotICBDYWxsIENyZWF0ZUFnZW50QmF0cwotCi0gIENyZWF0ZURpcmVjdG9yeSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2UiCi0gIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxSZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIgIiRJTlNURElSXHJlZ2lzdGVyYWdlbnQuYmF0IgotICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcVW5yZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIgIiRJTlNURElSXHVucmVnaXN0ZXJhZ2VudC5iYXQiCi0gIAotICBOb1NlcnZpY2U6Ci1GdW5jdGlvbkVuZApkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9zY3JpcHRzL21hbmRpcjJodG1sIGIvd2luMzIvZGlzdC9zY3JpcHRzL21hbmRpcjJodG1sCmluZGV4IDA4YTY2MzAuLjU0MzVkYWYgMTAwNjQ0Ci0tLSBhL3dpbjMyL2Rpc3Qvc2NyaXB0cy9tYW5kaXIyaHRtbAorKysgYi93aW4zMi9kaXN0L3NjcmlwdHMvbWFuZGlyMmh0bWwKQEAgLTM1LDcgKzM1LDcgQEAKIAogIyBMb2NhdGlvbiBvZiBtYW4gcGFnZXMgdG8gcGFyc2UKICMgQmVsb3cgdGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRoZSBmb2xkZXJzIG1hbjEgdG8gbWFuOS4KLSRtYW5fZGlyID0gIi90bXAvbmV0LXNubXAvbWFuLyI7CiskbWFuX2RpciA9ICIvdG1wL25ldC1zbm1wL3NoYXJlL21hbi8iOwogCiAjIE91dHB1dCBmb2xkZXIgdG8gY3JlYXRlIHRoZSBIVE1MIGZpbGVzCiAkbWFuX2Rpcl9odG1sID0gIi90bXAvbmV0LXNubXAvaHRtbC8iOwpkaWZmIC0tZ2l0IGEvd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcCBiL3dpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AKaW5kZXggNWUxOTM2Ni4uNWEyNTJmNSAxMDA2NDQKLS0tIGEvd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcAorKysgYi93aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2UvZW5jb2RlX2tleWNoYW5nZS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2UvZW5jb2RlX2tleWNoYW5nZS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZW5jb2RlX2tleWNoYW5nZSAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL2VuY29kZV9rZXljaGFuZ2UuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvZW5jb2RlX2tleWNoYW5nZS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4gYi93aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbgppbmRleCAwYjRkYmM0Li5hYmNkODJlIDEwMDY0NAotLS0gYS93aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbgpAQCAtOSwzMSArOSw2MiBAQAogTlVMTD1udWwKICFFTkRJRiAKIAorQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIKKworCitMSUIzMl9PQkpTPSBcCisJIiQoSU5URElSKVxhZ2VudF9oYW5kbGVyLm9iaiIgXAorCSIkKElOVERJUilcYWdlbnRfaW5kZXgub2JqIiBcCisJIiQoSU5URElSKVxhZ2VudF9yZWFkX2NvbmZpZy5vYmoiIFwKKwkiJChJTlRESVIpXGFnZW50X3JlZ2lzdHJ5Lm9iaiIgXAorCSIkKElOVERJUilcYWdlbnRfc3lzT1JUYWJsZS5vYmoiIFwKKwkiJChJTlRESVIpXGFnZW50X3RyYXAub2JqIiBcCisJIiQoSU5URElSKVxhbGxfaGVscGVycy5vYmoiIFwKKwkiJChJTlRESVIpXGJhYnlfc3RlcHMub2JqIiBcCisJIiQoSU5URElSKVxidWxrX3RvX25leHQub2JqIiBcCisJIiQoSU5URElSKVxjYWNoZV9oYW5kbGVyLm9iaiIgXAorCSIkKElOVERJUilcZGVidWdfaGFuZGxlci5vYmoiIFwKKwkiJChJTlRESVIpXGluc3RhbmNlLm9iaiIgXAorCSIkKElOVERJUilcbW9kZV9lbmRfY2FsbC5vYmoiIFwKKwkiJChJTlRESVIpXG11bHRpcGxleGVyLm9iaiIgXAorCSIkKElOVERJUilcbnVsbC5vYmoiIFwKKwkiJChJTlRESVIpXG9sZF9hcGkub2JqIiBcCisJIiQoSU5URElSKVxyZWFkX29ubHkub2JqIiBcCisJIiQoSU5URElSKVxyb3dfbWVyZ2Uub2JqIiBcCisJIiQoSU5URElSKVxzY2FsYXIub2JqIiBcCisJIiQoSU5URElSKVxzY2FsYXJfZ3JvdXAub2JqIiBcCisJIiQoSU5URElSKVxzZXJpYWxpemUub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2FnZW50Lm9iaiIgXAorCSIkKElOVERJUilcc25tcF9nZXRfc3RhdGlzdGljLm9iaiIgXAorCSIkKElOVERJUilcc25tcF92YXJzLm9iaiIgXAorCSIkKElOVERJUilcc3Rhc2hfY2FjaGUub2JqIiBcCisJIiQoSU5URElSKVxzdGFzaF90b19uZXh0Lm9iaiIgXAorCSIkKElOVERJUilcdGFibGUub2JqIiBcCisJIiQoSU5URElSKVx0YWJsZV9hcnJheS5vYmoiIFwKKwkiJChJTlRESVIpXHRhYmxlX2NvbnRhaW5lci5vYmoiIFwKKwkiJChJTlRESVIpXHRhYmxlX2RhdGEub2JqIiBcCisJIiQoSU5URElSKVx0YWJsZV9kYXRhc2V0Lm9iaiIgXAorCSIkKElOVERJUilcdGFibGVfaXRlcmF0b3Iub2JqIiBcCisJIiQoSU5URElSKVx0YWJsZV90ZGF0YS5vYmoiIFwKKwkiJChJTlRESVIpXHdhdGNoZXIub2JqIgorCitDTEVBTiA6CisJLUBmb3IgJWYgaW4gKCQoTElCMzJfT0JKUykpIGRvIGVyYXNlICUlZgorCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKKwktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiCisKKyIuLlxsaWJcJChPVVRESVIpIiA6CisgICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgorCisiJChJTlRESVIpIiA6CisgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKKworQ1BQPWNsLmV4ZQogIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X2hhbmRsZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF9pbmRleC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X3JlYWRfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfcmVnaXN0cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF90cmFwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hZ2VudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdmFycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXGxpYmFnZW50LnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishRUxTRQorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishRU5ESUYKIAogLmN7JChJTlRESVIpfS5vYmo6OgogICAgJChDUFApIEA8PApAQCAtNTAsMTIyICs4MSwxNiBAQAogICAgJChDUFBfUFJPSikgJDwgCiA8PAogCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKIAogUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXGxpYmFnZW50LmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KIExJQjMyPWxpbmsuZXhlIC1saWIKIExJQjMyX0ZMQUdTPS9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFnZW50X2hhbmRsZXIub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudF9pbmRleC5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50X3JlYWRfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcYWdlbnRfcmVnaXN0cnkub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudF90cmFwLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hZ2VudC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdmFycy5vYmoiCiAKICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKICAgICAkKExJQjMyKSBAPDwKICAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKIDw8CiAKLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X2hhbmRsZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF9pbmRleC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X3JlYWRfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfcmVnaXN0cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF90cmFwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hZ2VudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdmFycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXGxpYmFnZW50LnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXGxpYmFnZW50LmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJQjMyPWxpbmsuZXhlIC1saWIKLUxJQjMyX0ZMQUdTPS9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFnZW50X2hhbmRsZXIub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudF9pbmRleC5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50X3JlYWRfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcYWdlbnRfcmVnaXN0cnkub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudF90cmFwLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hZ2VudC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdmFycy5vYmoiCi0KLSIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKLSAgICAkKExJQjMyKSBAPDwKLSAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKLTw8Ci0KLSFFTkRJRiAKLQogCiAhSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgogIUlGIEVYSVNUUygibGliYWdlbnQuZGVwIikKQEAgLTE3Niw3ICsxMDEsNiBAQAogIUVORElGIAogCiAKLSFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSIgfHwgIiQoQ0ZHKSIgPT0gImRlYnVnIgogU09VUkNFPS4uXC4uXGFnZW50XGFnZW50X2hhbmRsZXIuYwogCiAiJChJTlRESVIpXGFnZW50X2hhbmRsZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtMjAwLDYgKzEyNCwxMCBAQAogIiQoSU5URElSKVxhZ2VudF9yZWdpc3RyeS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCitTT1VSQ0U9Li5cLi5cYWdlbnRcYWdlbnRfc3lzT1JUYWJsZS5jCisKKyIkKElOVERJUilcYWdlbnRfc3lzT1JUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiBTT1VSQ0U9Li5cLi5cYWdlbnRcYWdlbnRfdHJhcC5jCiAKQEAgLTIxOSw3ICsxNDcsMTU4IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGFsbF9oZWxwZXJzLmMKIAotIUVORElGIAorIiQoSU5URElSKVxhbGxfaGVscGVycy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGJhYnlfc3RlcHMuYworCisiJChJTlRESVIpXGJhYnlfc3RlcHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xidWxrX3RvX25leHQuYworCisiJChJTlRESVIpXGJ1bGtfdG9fbmV4dC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGNhY2hlX2hhbmRsZXIuYworCisiJChJTlRESVIpXGNhY2hlX2hhbmRsZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xkZWJ1Z19oYW5kbGVyLmMKKworIiQoSU5URElSKVxkZWJ1Z19oYW5kbGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcaW5zdGFuY2UuYworCisiJChJTlRESVIpXGluc3RhbmNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbW9kZV9lbmRfY2FsbC5jCisKKyIkKElOVERJUilcbW9kZV9lbmRfY2FsbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG11bHRpcGxleGVyLmMKKworIiQoSU5URElSKVxtdWx0aXBsZXhlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG51bGwuYworCisiJChJTlRESVIpXG51bGwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xvbGRfYXBpLmMKKworIiQoSU5URElSKVxvbGRfYXBpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNccmVhZF9vbmx5LmMKKworIiQoSU5URElSKVxyZWFkX29ubHkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xyb3dfbWVyZ2UuYworCisiJChJTlRESVIpXHJvd19tZXJnZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNjYWxhci5jCisKKyIkKElOVERJUilcc2NhbGFyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2NhbGFyX2dyb3VwLmMKKworIiQoSU5URElSKVxzY2FsYXJfZ3JvdXAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzZXJpYWxpemUuYworCisiJChJTlRESVIpXHNlcmlhbGl6ZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNubXBfZ2V0X3N0YXRpc3RpYy5jCisKKyIkKElOVERJUilcc25tcF9nZXRfc3RhdGlzdGljLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc3Rhc2hfY2FjaGUuYworCisiJChJTlRESVIpXHN0YXNoX2NhY2hlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc3Rhc2hfdG9fbmV4dC5jCisKKyIkKElOVERJUilcc3Rhc2hfdG9fbmV4dC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlLmMKKworIiQoSU5URElSKVx0YWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2FycmF5LmMKKworIiQoSU5URElSKVx0YWJsZV9hcnJheS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2NvbnRhaW5lci5jCisKKyIkKElOVERJUilcdGFibGVfY29udGFpbmVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfZGF0YS5jCisKKyIkKElOVERJUilcdGFibGVfZGF0YS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX3RkYXRhLmMKKworIiQoSU5URElSKVx0YWJsZV90ZGF0YS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2RhdGFzZXQuYworCisiJChJTlRESVIpXHRhYmxlX2RhdGFzZXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9pdGVyYXRvci5jCisKKyIkKElOVERJUilcdGFibGVfaXRlcmF0b3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x3YXRjaGVyLmMKKworIiQoSU5URElSKVx3YXRjaGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKZGlmZiAtLWdpdCBhL3dpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRlZiBiL3dpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg2YTUwZS4uMDAwMDAwMAotLS0gYS93aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi07ICAgICAgIEAoIylsaWJhZ2VudC5kZWYgICAgMS4wIDEwLzI2Lzk3IChnbWFyem90QGJheW5ldHdvcmtzLmNvbSkKLQotREVTQ1JJUFRJT04gICAgICdVQ0QgU05NUCBBZ2VudCBMaWJyYXJ5JwotO0NPREUgICAgICAgICAgICBTSEFSRUQgUkVBRCBFWEVDVVRFCi07REFUQSAgICAgICAgICAgIFNIQVJFRCBSRUFEIFdSSVRFCi1FWFBPUlRTCi0Jc2VuZF9lYXN5X3RyYXAKLQlpbml0X21hc3Rlcl9hZ2VudAotCWluaXRfbWliX21vZHVsZXMKLQlpbml0X2FnZW50Ci0JYXJndnJlc3RhcnRuYW1lCi0JYXJndnJlc3RhcnQKLQlhcmd2cmVzdGFydHAKLQl1cGRhdGVfY29uZmlnCi0JZHVtcF9pZHhfcmVnaXN0cnkKLQluZXRzbm1wX2NsZWFyX2hhbmRsZXJfbGlzdAotCmRpZmYgLS1naXQgYS93aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AgYi93aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AKaW5kZXggZjcwZDQ5NC4uNjM2NDJjMiAxMDA2NDQKLS0tIGEvd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwCisrKyBiL3dpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcApAQCAtMTAxLDE2ICsxMDEsMTI0IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYWdlbnRcYWdlbnRfc3lzT1JUYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFnZW50XGFnZW50X3RyYXAuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGFsbF9oZWxwZXJzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xiYWJ5X3N0ZXBzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xidWxrX3RvX25leHQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGNhY2hlX2hhbmRsZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGRlYnVnX2hhbmRsZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGluc3RhbmNlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xtb2RlX2VuZF9jYWxsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xtdWx0aXBsZXhlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbnVsbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcb2xkX2FwaS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNccmVhZF9vbmx5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xyb3dfbWVyZ2UuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNjYWxhci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2NhbGFyX2dyb3VwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzZXJpYWxpemUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhZ2VudFxzbm1wX2FnZW50LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cYWdlbnRcc25tcF92YXJzLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzbm1wX2dldF9zdGF0aXN0aWMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHN0YXNoX2NhY2hlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzdGFzaF90b19uZXh0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfYXJyYXkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2NvbnRhaW5lci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfZGF0YS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfZGF0YXNldC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfaXRlcmF0b3IuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX3RkYXRhLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x3YXRjaGVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KIA0KQEAgLTEzMywxNiArMjQxLDgwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcYWdlbnRfc3lzT1JUYWJsZS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxhZ2VudF90cmFwLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGFsbF9oZWxwZXJzLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGJ1bGtfdG9fbmV4dC5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxkZWJ1Z19oYW5kbGVyLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGluc3RhbmNlLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XG11bHRpcGxleGVyLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XG51bGwuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcb2xkX2FwaS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxyZWFkX29ubHkuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcc2VyaWFsaXplLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHNubXBfYWdlbnQuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcc25tcF92YXJzLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX2FycmF5LmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX2RhdGEuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfZGF0YXNldC5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV9pdGVyYXRvci5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV90ZGF0YS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEVuZCBUYXJnZXQNCiAjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvbGliaGVscGVycy9NYWtlZmlsZS5pbiBiL3dpbjMyL2xpYmhlbHBlcnMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2M2JjZDIuLjAwMDAwMDAKLS0tIGEvd2luMzIvbGliaGVscGVycy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi1QUk9HTkFNRT0KLUNGRz0KLU9VVERJUj0KLUlOVERJUj0KLQotIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCi1OVUxMPQotIUVMU0UgCi1OVUxMPW51bAotIUVORElGIAotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1waGVscGVycy5saWIiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhbGxfaGVscGVycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGJhYnlfc3RlcHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxidWxrX3RvX25leHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjYWNoZV9oYW5kbGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGVidWdfaGFuZGxlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluc3RhbmNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbW9kZV9lbmRfY2FsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG11bHRpcGxleGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnVsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG9sZF9hcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZWFkX29ubHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyb3dfbWVyZ2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzY2FsYXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzY2FsYXJfZ3JvdXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzZXJpYWxpemUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdGFzaF9jYWNoZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0YXNoX3RvX25leHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2FycmF5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfY29udGFpbmVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfZGF0YS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX3RkYXRhLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfZGF0YXNldC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2l0ZXJhdG9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdhdGNoZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1waGVscGVycy5saWIiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVxsaWJoZWxwZXJzLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXGxpYmhlbHBlcnMuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElCMzI9bGluay5leGUgLWxpYgotTElCMzJfRkxBR1M9L25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBoZWxwZXJzLmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhbGxfaGVscGVycy5vYmoiIFwKLQkiJChJTlRESVIpXGJhYnlfc3RlcHMub2JqIiBcCi0JIiQoSU5URElSKVxidWxrX3RvX25leHQub2JqIiBcCi0JIiQoSU5URElSKVxjYWNoZV9oYW5kbGVyLm9iaiIgXAotCSIkKElOVERJUilcZGVidWdfaGFuZGxlci5vYmoiIFwKLQkiJChJTlRESVIpXGluc3RhbmNlLm9iaiIgXAotCSIkKElOVERJUilcbW9kZV9lbmRfY2FsbC5vYmoiIFwKLQkiJChJTlRESVIpXG11bHRpcGxleGVyLm9iaiIgXAotCSIkKElOVERJUilcbnVsbC5vYmoiIFwKLQkiJChJTlRESVIpXG9sZF9hcGkub2JqIiBcCi0JIiQoSU5URElSKVxyZWFkX29ubHkub2JqIiBcCi0JIiQoSU5URElSKVxyb3dfbWVyZ2Uub2JqIiBcCi0JIiQoSU5URElSKVxzY2FsYXIub2JqIiBcCi0JIiQoSU5URElSKVxzY2FsYXJfZ3JvdXAub2JqIiBcCi0JIiQoSU5URElSKVxzZXJpYWxpemUub2JqIiBcCi0JIiQoSU5URElSKVxzdGFzaF9jYWNoZS5vYmoiIFwKLQkiJChJTlRESVIpXHN0YXNoX3RvX25leHQub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2FycmF5Lm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfY29udGFpbmVyLm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfZGF0YS5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX3RkYXRhLm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfZGF0YXNldC5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2l0ZXJhdG9yLm9iaiIgXAotCSIkKElOVERJUilcd2F0Y2hlci5vYmoiCi0KLSIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBoZWxwZXJzLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQotICAgICQoTElCMzIpIEA8PAotICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQotPDwKLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1waGVscGVycy5saWIiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhbGxfaGVscGVycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGJhYnlfc3RlcHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxidWxrX3RvX25leHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjYWNoZV9oYW5kbGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGVidWdfaGFuZGxlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluc3RhbmNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbW9kZV9lbmRfY2FsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG11bHRpcGxleGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnVsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG9sZF9hcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZWFkX29ubHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyb3dfbWVyZ2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzY2FsYXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzY2FsYXJfZ3JvdXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzZXJpYWxpemUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdGFzaF9jYWNoZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0YXNoX3RvX25leHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2FycmF5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfY29udGFpbmVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfZGF0YS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX3RkYXRhLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGVfZGF0YXNldC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2l0ZXJhdG9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3YXRjaGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGhlbHBlcnMubGliIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVxsaWJoZWxwZXJzLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXGxpYmhlbHBlcnMuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElCMzI9bGluay5leGUgLWxpYgotTElCMzJfRkxBR1M9L25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBoZWxwZXJzLmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhbGxfaGVscGVycy5vYmoiIFwKLQkiJChJTlRESVIpXGJhYnlfc3RlcHMub2JqIiBcCi0JIiQoSU5URElSKVxidWxrX3RvX25leHQub2JqIiBcCi0JIiQoSU5URElSKVxjYWNoZV9oYW5kbGVyLm9iaiIgXAotCSIkKElOVERJUilcZGVidWdfaGFuZGxlci5vYmoiIFwKLQkiJChJTlRESVIpXGluc3RhbmNlLm9iaiIgXAotCSIkKElOVERJUilcbW9kZV9lbmRfY2FsbC5vYmoiIFwKLQkiJChJTlRESVIpXG11bHRpcGxleGVyLm9iaiIgXAotCSIkKElOVERJUilcbnVsbC5vYmoiIFwKLQkiJChJTlRESVIpXG9sZF9hcGkub2JqIiBcCi0JIiQoSU5URElSKVxyZWFkX29ubHkub2JqIiBcCi0JIiQoSU5URElSKVxyb3dfbWVyZ2Uub2JqIiBcCi0JIiQoSU5URElSKVxzY2FsYXIub2JqIiBcCi0JIiQoSU5URElSKVxzY2FsYXJfZ3JvdXAub2JqIiBcCi0JIiQoSU5URElSKVxzZXJpYWxpemUub2JqIiBcCi0JIiQoSU5URElSKVxzdGFzaF9jYWNoZS5vYmoiIFwKLQkiJChJTlRESVIpXHN0YXNoX3RvX25leHQub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2FycmF5Lm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfY29udGFpbmVyLm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfZGF0YS5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX3RkYXRhLm9iaiIgXAotCSIkKElOVERJUilcdGFibGVfZGF0YXNldC5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2l0ZXJhdG9yLm9iaiIgXAotCSIkKElOVERJUilcd2F0Y2hlci5vYmoiCi0KLSIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBoZWxwZXJzLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQotICAgICQoTElCMzIpIEA8PAotICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQotPDwKLQotIUVORElGIAotCi0KLSFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCi0hSUYgRVhJU1RTKCJsaWJoZWxwZXJzLmRlcCIpCi0hSU5DTFVERSAibGliaGVscGVycy5kZXAiCi0hRUxTRSAKLSFNRVNTQUdFIFdhcm5pbmc6IGNhbm5vdCBmaW5kICJsaWJoZWxwZXJzLmRlcCIKLSFFTkRJRiAKLSFFTkRJRiAKLQotCi0hSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiIHx8ICIkKENGRykiID09ICJkZWJ1ZyIKLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGFsbF9oZWxwZXJzLmMKLQotIiQoSU5URElSKVxhbGxfaGVscGVycy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGJhYnlfc3RlcHMuYwotCi0iJChJTlRESVIpXGJhYnlfc3RlcHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xidWxrX3RvX25leHQuYwotCi0iJChJTlRESVIpXGJ1bGtfdG9fbmV4dC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGNhY2hlX2hhbmRsZXIuYwotCi0iJChJTlRESVIpXGNhY2hlX2hhbmRsZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xkZWJ1Z19oYW5kbGVyLmMKLQotIiQoSU5URElSKVxkZWJ1Z19oYW5kbGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcaW5zdGFuY2UuYwotCi0iJChJTlRESVIpXGluc3RhbmNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbW9kZV9lbmRfY2FsbC5jCi0KLSIkKElOVERJUilcbW9kZV9lbmRfY2FsbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG11bHRpcGxleGVyLmMKLQotIiQoSU5URElSKVxtdWx0aXBsZXhlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG51bGwuYwotCi0iJChJTlRESVIpXG51bGwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xvbGRfYXBpLmMKLQotIiQoSU5URElSKVxvbGRfYXBpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNccmVhZF9vbmx5LmMKLQotIiQoSU5URElSKVxyZWFkX29ubHkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xyb3dfbWVyZ2UuYwotCi0iJChJTlRESVIpXHJvd19tZXJnZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNjYWxhci5jCi0KLSIkKElOVERJUilcc2NhbGFyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2NhbGFyX2dyb3VwLmMKLQotIiQoSU5URElSKVxzY2FsYXJfZ3JvdXAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzZXJpYWxpemUuYwotCi0iJChJTlRESVIpXHNlcmlhbGl6ZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHN0YXNoX2NhY2hlLmMKLQotIiQoSU5URElSKVxzdGFzaF9jYWNoZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHN0YXNoX3RvX25leHQuYwotCi0iJChJTlRESVIpXHN0YXNoX3RvX25leHQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZS5jCi0KLSIkKElOVERJUilcdGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9hcnJheS5jCi0KLSIkKElOVERJUilcdGFibGVfYXJyYXkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9jb250YWluZXIuYwotCi0iJChJTlRESVIpXHRhYmxlX2NvbnRhaW5lci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2RhdGEuYwotCi0iJChJTlRESVIpXHRhYmxlX2RhdGEub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV90ZGF0YS5jCi0KLSIkKElOVERJUilcdGFibGVfdGRhdGEub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9kYXRhc2V0LmMKLQotIiQoSU5URElSKVx0YWJsZV9kYXRhc2V0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfaXRlcmF0b3IuYwotCi0iJChJTlRESVIpXHRhYmxlX2l0ZXJhdG9yLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcd2F0Y2hlci5jCi0KLSIkKElOVERJUilcd2F0Y2hlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLQotIUVORElGIAotCi0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AgYi93aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTBjNTZkLi4wMDAwMDAwCi0tLSBhL3dpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJsaWJoZWxwZXJzIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgMHgwMTA0DQotDQotQ0ZHPWxpYmhlbHBlcnMgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibGliaGVscGVycy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibGliaGVscGVycy5tYWsiIENGRz0ibGliaGVscGVycyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJsaWJoZWxwZXJzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIpDQotIU1FU1NBR0UgImxpYmhlbHBlcnMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gImxpYmhlbHBlcnMgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLi4vbGliL3JlbGVhc2UiDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5DQotIyBBREQgUlNDIC9sIDB4NDA5DQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi4vbGliL3JlbGVhc2UvbmV0c25tcGhlbHBlcnMubGliIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJsaWJoZWxwZXJzIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4uL2xpYi9kZWJ1ZyINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkNCi0jIEFERCBSU0MgL2wgMHg0MDkNCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLi9saWIvZGVidWcvbmV0c25tcGhlbHBlcnMubGliIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAibGliaGVscGVycyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJsaWJoZWxwZXJzIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYWxsX2hlbHBlcnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGJhYnlfc3RlcHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGJ1bGtfdG9fbmV4dC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcY2FjaGVfaGFuZGxlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcZGVidWdfaGFuZGxlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcaW5zdGFuY2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG1vZGVfZW5kX2NhbGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG11bHRpcGxleGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xudWxsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xvbGRfYXBpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xyZWFkX29ubHkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHJvd19tZXJnZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2NhbGFyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzY2FsYXJfZ3JvdXAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNlcmlhbGl6ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc3Rhc2hfY2FjaGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHN0YXNoX3RvX25leHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9hcnJheS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfY29udGFpbmVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9kYXRhLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV90ZGF0YS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfZGF0YXNldC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfaXRlcmF0b3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHdhdGNoZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxhbGxfaGVscGVycy5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxidWxrX3RvX25leHQuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcZGVidWdfaGFuZGxlci5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxpbnN0YW5jZS5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxtdWx0aXBsZXhlci5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxudWxsLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XG9sZF9hcGkuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRccmVhZF9vbmx5LmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHNlcmlhbGl6ZS5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZS5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV9hcnJheS5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV9kYXRhLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX3RkYXRhLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX2RhdGFzZXQuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfaXRlcmF0b3IuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiBiL3dpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbgppbmRleCBiNWM4YjI1Li4zODI0OTE5IDEwMDY0NAotLS0gYS93aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluCkBAIC0xOSw3ICsxOSw2IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXHNubXB0cmFwZF9oYW5kbGVycy5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHNubXB0cmFwZF9sb2cub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdHJhcGRfYXV0aC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKQEAgLTMyLDcgKzMxLDcgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVxsaWJuZXRzbm1wdHJhcGQucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIAogLmN7JChJTlRESVIpfS5vYmo6OgogICAgJChDUFApIEA8PApAQCAtNzYsNyArNzUsNiBAQAogCSIkKElOVERJUilcc25tcHRyYXBkX2hhbmRsZXJzLm9iaiIgXAogCSIkKElOVERJUilcc25tcHRyYXBkX2xvZy5vYmoiIFwKIAkiJChJTlRESVIpXHNubXB0cmFwZF9hdXRoLm9iaiIgXAotCSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIFwKIAkiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgogCiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wdHJhcGQubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCkBAIC05NCw3ICs5Miw2IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXHNubXB0cmFwZF9oYW5kbGVycy5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHNubXB0cmFwZF9sb2cub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdHJhcGRfYXV0aC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCiAJLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgpAQCAtMTA4LDcgKzEwNSw3IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVxsaWJuZXRzbm1wdHJhcGQucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogCiAuY3skKElOVERJUil9Lm9iajo6CiAgICAkKENQUCkgQDw8CkBAIC0xNTIsNyArMTQ5LDYgQEAKIAkiJChJTlRESVIpXHNubXB0cmFwZF9oYW5kbGVycy5vYmoiIFwKIAkiJChJTlRESVIpXHNubXB0cmFwZF9sb2cub2JqIiBcCiAJIiQoSU5URElSKVxzbm1wdHJhcGRfYXV0aC5vYmoiIFwKLQkiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiBcCiAJIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIKIAogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcHRyYXBkLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQpAQCAtMTk3LDExICsxOTMsNiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uLWxvZy1taWJcbm90aWZpY2F0aW9uX2xvZy5jCi0KLSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5zZXJ2aWNlLmMKIAogIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKZGlmZiAtLWdpdCBhL3dpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwIGIvd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AKaW5kZXggZDU0NzQzYi4uMDhiNDFmZiAxMDA2NDQKLS0tIGEvd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AKKysrIGIvd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC5kc3AKQEAgLTg5LDM3ICs4OSwzNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFwcHNcc25tcHRyYXBkX2F1dGguYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhcHBzXHNubXB0cmFwZF9oYW5kbGVycy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXGFwcHNcc25tcHRyYXBkX2xvZy5jDQogIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFwcHNcc25tcHRyYXBkX2F1dGguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQogDQogIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uLWxvZy1taWJcbm90aWZpY2F0aW9uX2xvZy5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5cYXBwc1xzbm1wdHJhcGRfYXV0aC5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5cYXBwc1xzbm1wdHJhcGRfaGFuZGxlcnMuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Ii4uXC4uXGFwcHNcc25tcHRyYXBkX2xvZy5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYXBwc1xzbm1wdHJhcGRfYXV0aC5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uLWxvZy1taWJcbm90aWZpY2F0aW9uX2xvZy5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEVuZCBUYXJnZXQNCiAjIEVuZCBQcm9qZWN0DQotDQpkaWZmIC0tZ2l0IGEvd2luMzIvbGlic2RsbC5kc3cgYi93aW4zMi9saWJzZGxsLmRzdwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU1Yzk5OS4uMDAwMDAwMAotLS0gYS93aW4zMi9saWJzZGxsLmRzdworKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLU1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYmFnZW50Ij0iLlxsaWJhZ2VudFxsaWJhZ2VudC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJoZWxwZXJzIj0iLlxsaWJoZWxwZXJzXGxpYmhlbHBlcnMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGlic25tcF9kbGwiPSIuXGxpYnNubXBfZGxsXGxpYnNubXBfZGxsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIm5ldHNubXBtaWJzIj0iLlxuZXRzbm1wbWlic1xuZXRzbm1wbWlicy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJuZXRzbm1wdHJhcGQiPSIuXGxpYm5ldHNubXB0cmFwZFxsaWJuZXRzbm1wdHJhcGQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1HbG9iYWw6DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTwzPg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCmRpZmYgLS1naXQgYS93aW4zMi9saWJzbm1wL01ha2VmaWxlLmluIGIvd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbgppbmRleCA5YjM2YmI4Li45OGQ4M2M4IDEwMDY0NAotLS0gYS93aW4zMi9saWJzbm1wL01ha2VmaWxlLmluCisrKyBiL3dpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4KQEAgLTIsNiArMiw3IEBACiBDRkc9CiBPVVRESVI9CiBJTlRESVI9CitTREs9CiAKICFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgogTlVMTD0KQEAgLTksMjUwICsxMCw5NCBAQAogTlVMTD1udWwKICFFTkRJRiAKIAorQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiCisKK0xJQjMyX09CSlM9IFwKKwkiJChJTlRESVIpXGFzbjEub2JqIiBcCisJIiQoSU5URElSKVxjYWxsYmFjay5vYmoiIFwKKwkiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIiBcCisJIiQoSU5URElSKVxjbG9zZWRpci5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIiBcCisJIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIiBcCisJIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIgXAorCSIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiIFwKKwkiJChJTlRESVIpXGdldG9wdC5vYmoiIFwKKwkiJChJTlRESVIpXGdldHRpbWVvZmRheS5vYmoiIFwKKwkiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiIFwKKwkiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiIFwKKwkiJChJTlRESVIpXGludDY0Lm9iaiIgXAorCSIkKElOVERJUilca2V5dG9vbHMub2JqIiBcCisJIiQoSU5URElSKVxsYXJnZV9mZF9zZXQub2JqIiBcCisJIiQoSU5URElSKVxsY2RfdGltZS5vYmoiIFwKKwkiJChJTlRESVIpXG1kNS5vYmoiIFwKKwkiJChJTlRESVIpXG1pYi5vYmoiIFwKKwkiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIiBcCisJIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIiBcCisJIiQoSU5URElSKVxvcGVuZGlyLm9iaiIgXAorCSIkKElOVERJUilccGFyc2Uub2JqIiBcCisJIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiIFwKKwkiJChJTlRESVIpXHJlYWRkaXIub2JqIiBcCisJIiQoSU5URElSKVxzY2FwaS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXAtdGMub2JqIiBcCisJIiQoSU5URElSKVxzbm1wLm9iaiIgXAorCSIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcElQdjRCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFNvY2tldEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVENQQmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVURQQmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVURQSVB2NEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9hcGkub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfZGVidWcub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIgXAorCSIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIgXAorCSIkKElOVERJUilcc25tcHVzbS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXB2My5vYmoiIFwKKwkiJChJTlRESVIpXHN0cmxjYXQub2JqIiBcCisJIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIgXAorCSIkKElOVERJUilcc3RydG9rX3Iub2JqIiBcCisJIiQoSU5URElSKVxzdHJ0b3VsbC5vYmoiIFwKKwkiJChJTlRESVIpXHN5c3RlbS5vYmoiIFwKKwkiJChJTlRESVIpXHRvb2xzLm9iaiIgXAorCSIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiIFwKKwkiJChJTlRESVIpXHZhY20ub2JqIiBcCisJIiQoSU5URElSKVx3aW5waXBlLm9iaiIKKyFJRiAiJChTREspIiA9PSAidHJ1ZSIKK0xJQjMyX09CSlM9JChMSUIzMl9PQkpTKVwKKwkiJChJTlRESVIpXHNubXBJUHY2QmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIgorIUVORElGCisKK0NMRUFOIDoKKwktQGZvciAlZiBpbiAkKExJQjMyX09CSlMpIGRvIGVyYXNlICUlZgorCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiCisKKyIuLlxsaWJcJChPVVRESVIpIiA6CisgICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgorCisiJChJTlRESVIpIiA6CisgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKKworQ1BQPWNsLmV4ZQogIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhc24xLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2FsbGJhY2sub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY211X2NvbXBhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZ2V0b3B0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW50NjQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0X250b3Aub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXl0b29scy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGxjZF90aW1lLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWQ1Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhcnNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccmVhZF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzY2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXAtdGMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hbGFybS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hdXRoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9jbGllbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9lbnVtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXB1c20ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdjMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RybGNweS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c3RlbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRvb2xzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RydG9rX3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5waXBlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcJChQUk9HTkFNRSkuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElCMzI9bGluay5leGUgLWxpYgotTElCMzJfRkxBR1M9L25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFzbjEub2JqIiBcCi0JIiQoSU5URElSKVxjYWxsYmFjay5vYmoiIFwKLQkiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIiBcCi0JIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiIFwKLQkiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiIFwKLQkiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIiBcCi0JIiQoSU5URElSKVxnZXRvcHQub2JqIiBcCi0JIiQoSU5URElSKVxpbnQ2NC5vYmoiIFwKLQkiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiIFwKLQkiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiIFwKLQkiJChJTlRESVIpXGtleXRvb2xzLm9iaiIgXAotCSIkKElOVERJUilcbGNkX3RpbWUub2JqIiBcCi0JIiQoSU5URElSKVxtZDUub2JqIiBcCi0JIiQoSU5URElSKVxtaWIub2JqIiBcCi0JIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIgXAotCSIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIgXAotCSIkKElOVERJUilccGFyc2Uub2JqIiBcCi0JIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXHNjYXBpLm9iaiIgXAotCSIkKElOVERJUilcc25tcC10Yy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXAub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hcGkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfZGVidWcub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgXAotCSIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcHVzbS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXB2My5vYmoiIFwKLQkiJChJTlRESVIpXHN0cmxjYXQub2JqIiBcCi0JIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIgXAotCSIkKElOVERJUilcc3lzdGVtLm9iaiIgXAotCSIkKElOVERJUilcdG9vbHMub2JqIiBcCi0JIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIFwKLQkiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtLm9iaiIgXAotCSIkKElOVERJUilcd2lucGlwZS5vYmoiIFwKLQkiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIgotCi0iLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQotICAgICQoTElCMzIpIEA8PAotICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQotPDwKLQorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKICFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhc24xLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2FsbGJhY2sub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY211X2NvbXBhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZ2V0b3B0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW50NjQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0X250b3Aub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXl0b29scy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGxjZF90aW1lLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWQ1Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhcnNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccmVhZF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzY2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXAtdGMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hbGFybS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hdXRoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9jbGllbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9lbnVtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXB1c20ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdjMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RybGNweS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c3RlbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRvb2xzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RydG9rX3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2lucGlwZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFFTkRJRgogCiAuY3skKElOVERJUil9Lm9iajo6CiAgICAkKENQUCkgQDw8CkBAIC0yNjksOTEgKzExNCwxNSBAQAogICAgJChDUFBfUFJPSikgJDwgCiA8PAogCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKIAogUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXCQoUFJPR05BTUUpLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KIExJQjMyPWxpbmsuZXhlIC1saWIKIExJQjMyX0ZMQUdTPS9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhc24xLm9iaiIgXAotCSIkKElOVERJUilcY2FsbGJhY2sub2JqIiBcCi0JIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIgXAotCSIkKElOVERJUilcY211X2NvbXBhdC5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIiBcCi0JIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIgXAotCSIkKElOVERJUilcZ2V0b3B0Lm9iaiIgXAotCSIkKElOVERJUilcaW50NjQub2JqIiBcCi0JIiQoSU5URElSKVxpbmV0X250b3Aub2JqIiBcCi0JIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIiBcCi0JIiQoSU5URElSKVxrZXl0b29scy5vYmoiIFwKLQkiJChJTlRESVIpXGxjZF90aW1lLm9iaiIgXAotCSIkKElOVERJUilcbWQ1Lm9iaiIgXAotCSIkKElOVERJUilcbWliLm9iaiIgXAotCSIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiIFwKLQkiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiIFwKLQkiJChJTlRESVIpXHBhcnNlLm9iaiIgXAotCSIkKElOVERJUilccmVhZF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxzY2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXAtdGMub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hbGFybS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYXBpLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hdXRoLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9jbGllbnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9lbnVtLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXB1c20ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wdjMub2JqIiBcCi0JIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIgXAotCSIkKElOVERJUilcc3RybGNweS5vYmoiIFwKLQkiJChJTlRESVIpXHN5c3RlbS5vYmoiIFwKLQkiJChJTlRESVIpXHRvb2xzLm9iaiIgXAotCSIkKElOVERJUilcc3RydG9rX3Iub2JqIiBcCi0JIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIgXAotCSIkKElOVERJUilcdmFjbS5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnBpcGUub2JqIiBcCi0JIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIKLQogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKICAgICAkKExJQjMyKSBAPDwKICAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKIDw8CiAKLSFFTkRJRiAKLQogCiAhSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgogIUlGIEVYSVNUUygiJChQUk9HTkFNRSkuZGVwIikKQEAgLTM2NCw3ICsxMzMsNiBAQAogIUVORElGIAogCiAKLSFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSIgfHwgIiQoQ0ZHKSIgPT0gImRlYnVnIgogU09VUkNFPS4uXC4uXHNubXBsaWJcYXNuMS5jCiAKICIkKElOVERJUilcYXNuMS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC0zODMsOSArMTUxLDkgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcY211X2NvbXBhdC5jCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxjbG9zZWRpci5jCiAKLSIkKElOVERJUilcY211X2NvbXBhdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisiJChJTlRESVIpXGNsb3NlZGlyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIApAQCAtNDMxLDE1ICsxOTksMjEgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcZmRfZXZlbnRfbWFuYWdlci5jCisKKyIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXGdldG9wdC5jCiAKICIkKElOVERJUilcZ2V0b3B0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcaW50NjQuYworU09VUkNFPS4uXC4uXHNubXBsaWJcZ2V0dGltZW9mZGF5LmMKIAotIiQoSU5URElSKVxpbnQ2NC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisiJChJTlRESVIpXGdldHRpbWVvZmRheS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKQEAgLTQ1NSwxMiArMjI5LDI0IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGludDY0LmMKKworIiQoSU5URElSKVxpbnQ2NC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXGtleXRvb2xzLmMKIAogIiQoSU5URElSKVxrZXl0b29scy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGxhcmdlX2ZkX3NldC5jCisKKyIkKElOVERJUilcbGFyZ2VfZmRfc2V0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcbGNkX3RpbWUuYwogCiAiJChJTlRESVIpXGxjZF90aW1lLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTQ5MSw2ICsyNzcsMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcb3BlbmRpci5jCisKKyIkKElOVERJUilcb3BlbmRpci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHBhcnNlLmMKIAogIiQoSU5URElSKVxwYXJzZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01MDMsNiArMjk1LDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHJlYWRkaXIuYworCisiJChJTlRESVIpXHJlYWRkaXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzY2FwaS5jCiAKICIkKElOVERJUilcc2NhcGkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTIxLDYgKzMxOSw3MiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBDYWxsYmFja0RvbWFpbi5jCisKKyIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wSVB2NEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBJUHY0QmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcElQdjZCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wSVB2NkJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBTb2NrZXRCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wU29ja2V0QmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBUQ1BCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQSVB2NkRvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVURQQmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUERvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUElQdjRCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVURQSVB2NEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBJUHY2RG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfYWxhcm0uYwogCiAiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTc1LDYgKzQzOSwxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3NlcnZpY2UuYworCisiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfdHJhbnNwb3J0LmMKIAogIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01ODcsNDIgKzQ1Nyw2IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfc2VydmljZS5jCi0KLSIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcENhbGxiYWNrRG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVENQRG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFRDUElQdjZEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFVEUERvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBVRFBJUHY2RG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXB1c20uYwogCiAiJChJTlRESVIpXHNubXB1c20ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNjQ3LDYgKzQ4MSwxOCBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b2tfci5jCisKKyIkKElOVERJUilcc3RydG9rX3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b3VsbC5jCisKKyIkKElOVERJUilcc3RydG91bGwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzeXN0ZW0uYwogCiAiJChJTlRESVIpXHN5c3RlbS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC02NTksMTIgKzUwNSw2IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRva19yLmMKLQotIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHVjZF9jb21wYXQuYwogCiAiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNjgzLDExICs1MjMsMyBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxmZF9ldmVudF9tYW5hZ2VyLmMKLQotIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCmRpZmYgLS1naXQgYS93aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwIGIvd2luMzIvbGlic25tcC9saWJzbm1wLmRzcAppbmRleCAxNmVlYTJkLi4yMzg2MzMxIDEwMDY0NAotLS0gYS93aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwCisrKyBiL3dpbjMyL2xpYnNubXAvbGlic25tcC5kc3AKQEAgLTk3LDcgKzk3LDcgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXGNtdV9jb21wYXQuYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXGNsb3NlZGlyLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0xMjksMTAgKzEyOSwxOCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcZmRfZXZlbnRfbWFuYWdlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcZ2V0b3B0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxnZXR0aW1lb2ZkYXkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXGluZXRfbnRvcC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTQ5LDYgKzE1NywxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcbGFyZ2VfZmRfc2V0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxsY2RfdGltZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTY5LDYgKzE4MSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcb3BlbmRpci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJccGFyc2UuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTE3Nyw2ICsxOTMsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHJlYWRkaXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNjYXBpLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yMjUsNiArMjQ1LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3NlcnZpY2UuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfdHJhbnNwb3J0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yMzMsMjcgKzI1Nyw1MSBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9zZXJ2aWNlLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBBbGlhc0RvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcENhbGxiYWNrRG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBDYWxsYmFja0RvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFRDUERvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wSVB2NEJhc2VEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBUQ1BJUHY2RG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBJUHY2QmFzZURvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFVEUERvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wU29ja2V0QmFzZURvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFVEUElQdjZEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUEJhc2VEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUERvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQSVB2NkRvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQQmFzZURvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBJUHY0QmFzZURvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQSVB2NkRvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMjczLDYgKzMyMSwxNCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG9rX3IuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRvdWxsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzeXN0ZW0uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTI4MSwxMCArMzM3LDYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRva19yLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx1Y2RfY29tcGF0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yOTUsMTAgKzM0Nyw2IEBACiANCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5waXBlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxmZF9ldmVudF9tYW5hZ2VyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KIA0KQEAgLTMxNywxMCArMzY1LDYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGNtdV9jb21wYXQuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxjb250YWluZXIuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0zMzMsNiArMzc3LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxmZF9ldmVudF9tYW5hZ2VyLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcZ2V0b3B0LmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMzQ1LDYgKzM5MywxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcbGFyZ2VfZmRfc2V0LmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcbGNkX3RpbWUuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC00MzcsNiArNDg5LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzdHJ0b2tfci5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHN5c3RlbS5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTQ0NSwxMCArNTAxLDYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHN0cnRva19yLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcdWNkX2NvbXBhdC5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluIGIvd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4KaW5kZXggYmVmNzBhZS4uMGFhZjQxYiAxMDA2NDQKLS0tIGEvd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4KQEAgLTIsNyArMiw3IEBACiBDRkc9CiBPVVRESVI9CiBJTlRESVI9Ci1TU0w9CitTREs9CiAKICFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgogTlVMTD0KQEAgLTEwLDcxICsxMCw4NCBAQAogTlVMTD1udWwKICFFTkRJRiAKIAotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQogQUxMIDogIi4uXGJpblwkKE9VVERJUilcbmV0c25tcC5kbGwiCiAKK0xJTkszMl9PQkpTPSBcCisJIiQoSU5URElSKVxhc24xLm9iaiIgXAorCSIkKElOVERJUilcY2FsbGJhY2sub2JqIiBcCisJIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIgXAorCSIkKElOVERJUilcY2xvc2VkaXIub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXIub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIgXAorCSIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIgXAorCSIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiIFwKKwkiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIiBcCisJIiQoSU5URElSKVxnZXRvcHQub2JqIiBcCisJIiQoSU5URElSKVxnZXR0aW1lb2ZkYXkub2JqIiBcCisJIiQoSU5URElSKVxpbmV0X250b3Aub2JqIiBcCisJIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIiBcCisJIiQoSU5URElSKVxpbnQ2NC5vYmoiIFwKKwkiJChJTlRESVIpXGtleXRvb2xzLm9iaiIgXAorCSIkKElOVERJUilcbGFyZ2VfZmRfc2V0Lm9iaiIgXAorCSIkKElOVERJUilcbGNkX3RpbWUub2JqIiBcCisJIiQoSU5URElSKVxtZDUub2JqIiBcCisJIiQoSU5URElSKVxtaWIub2JqIiBcCisJIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIgXAorCSIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIgXAorCSIkKElOVERJUilcb3BlbmRpci5vYmoiIFwKKwkiJChJTlRESVIpXHBhcnNlLm9iaiIgXAorCSIkKElOVERJUilccmVhZF9jb25maWcub2JqIiBcCisJIiQoSU5URElSKVxyZWFkZGlyLm9iaiIgXAorCSIkKElOVERJUilcc2NhcGkub2JqIiBcCisJIiQoSU5URElSKVxzbm1wLXRjLm9iaiIgXAorCSIkKElOVERJUilcc25tcC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBJUHY0QmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBTb2NrZXRCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFRDUEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFVEUEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFVEUElQdjRCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9hbGFybS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfYXBpLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9hdXRoLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9jbGllbnQub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9lbnVtLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXB1c20ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wdjMub2JqIiBcCisJIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIgXAorCSIkKElOVERJUilcc3RybGNweS5vYmoiIFwKKwkiJChJTlRESVIpXHN0cnRva19yLm9iaiIgXAorCSIkKElOVERJUilcc3RydG91bGwub2JqIiBcCisJIiQoSU5URElSKVxzeXN0ZW0ub2JqIiBcCisJIiQoSU5URElSKVx0b29scy5vYmoiIFwKKwkiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIiBcCisJIiQoSU5URElSKVx2YWNtLm9iaiIgXAorCSIkKElOVERJUilcd2lucGlwZS5vYmoiCishSUYgIiQoU0RLKSIgPT0gInRydWUiCitMSU5LMzJfT0JKUz0kKExJTkszMl9PQkpTKVwKKwkiJChJTlRESVIpXHNubXBJUHY2QmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIgorIUVORElGCiAKIENMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYXNuMS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNtdV9jb21wYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGdldG9wdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGludDY0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5ldF9udG9wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilca2V5dG9vbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxsY2RfdGltZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1kNS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXJzZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2NhcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wLXRjLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfZW51bS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdXNtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcHYzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RybGNhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cmxjcHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXN0ZW0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0b29scy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cnRva19yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY20ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2lucGlwZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCisJLUBmb3IgJWYgaW4gKCQoTElOSzMyX09CSlMpKSBkbyBlcmFzZSAlJWYKIAktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAuZXhwIgogCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiCiAJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVxuZXRzbm1wLmRsbCIKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXG5ldHNubXAuZGxsLm1hbmlmZXN0IgogCiAiLi5cbGliXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKQEAgLTg2LDcgKzk5LDExIEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0QgIk5FVFNOTVBfRExMIiAvRnAiJChJTlRESVIpXGxpYnNubXBfZGxsLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishSUYgICIkKENGRykiID09ICJyZWxlYXNlIgorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9EICJORVRTTk1QX0RMTCIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFFTFNFCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRCAiTkVUU05NUF9ETEwiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishRU5ESUYKIAogLmN7JChJTlRESVIpfS5vYmo6OgogICAgJChDUFApIEA8PApAQCAtMTAzLDI3MiArMTIwLDIzIEBACiAgICAkKENQUF9QUk9KKSAkPCAKIDw8CiAKLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCiBNVEw9bWlkbC5leGUKIE1UTF9QUk9KPS9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMiAKIFJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxsaWJzbm1wX2RsbC5ic2MiIAotQlNDMzJfU0JSUz0gXAotCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1hZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGxsIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9kZWY6Ii5cbGlic25tcC5kZWYiIC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5kbGwiIC9pbXBsaWI6Ii4uL2xpYi8kKE9VVERJUilcbmV0c25tcC5saWIiIAotTElOSzMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFzbjEub2JqIiBcCi0JIiQoSU5URElSKVxjYWxsYmFjay5vYmoiIFwKLQkiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIiBcCi0JIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiIFwKLQkiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiIFwKLQkiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIiBcCi0JIiQoSU5URElSKVxnZXRvcHQub2JqIiBcCi0JIiQoSU5URElSKVxpbnQ2NC5vYmoiIFwKLQkiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiIFwKLQkiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiIFwKLQkiJChJTlRESVIpXGtleXRvb2xzLm9iaiIgXAotCSIkKElOVERJUilcbGNkX3RpbWUub2JqIiBcCi0JIiQoSU5URElSKVxtZDUub2JqIiBcCi0JIiQoSU5URElSKVxtaWIub2JqIiBcCi0JIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIgXAotCSIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIgXAotCSIkKElOVERJUilccGFyc2Uub2JqIiBcCi0JIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXHNjYXBpLm9iaiIgXAotCSIkKElOVERJUilcc25tcC10Yy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXAub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hcGkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfZGVidWcub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgXAotCSIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcHVzbS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXB2My5vYmoiIFwKLQkiJChJTlRESVIpXHN0cmxjYXQub2JqIiBcCi0JIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIgXAotCSIkKElOVERJUilcc3lzdGVtLm9iaiIgXAotCSIkKElOVERJUilcdG9vbHMub2JqIiBcCi0JIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIFwKLQkiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtLm9iaiIgXAotCSIkKElOVERJUilcd2lucGlwZS5vYmoiIFwKLQkiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIgorIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKK0xJTkszMl9GTEFHUz1hZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGxsIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5wZGIiIC9kZWJ1ZyAvZGVmOiIuXGxpYnNubXAuZGVmIiAvb3V0OiIuLi9iaW4vJChPVVRESVIpL25ldHNubXAuZGxsIiAvaW1wbGliOiIuLi9saWIvJChPVVRESVIpL25ldHNubXAubGliIiAKKyFFTFNFCitMSU5LMzJfRkxBR1M9YWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RsbCAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLnBkYiIgL2RlYnVnIC9kZWY6Ii5cbGlic25tcC5kZWYiIC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5kbGwiIC9pbXBsaWI6Ii4uL2xpYi8kKE9VVERJUikvbmV0c25tcC5saWIiIAorIUVORElGCiAKICIuLlxiaW5cJChPVVRESVIpXG5ldHNubXAuZGxsIiA6ICIuLlxiaW5cJChPVVRESVIpIiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKICAgICAkKExJTkszMikgQDw8CiAgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQogPDwKLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi1BTEwgOiAiLi5cYmluXCQoT1VURElSKVxuZXRzbm1wLmRsbCIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFzbjEub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjYWxsYmFjay5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxnZXRvcHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbnQ2NC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtleXRvb2xzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbGNkX3RpbWUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtZDUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtaWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFyc2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNjYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcC10Yy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfZGVidWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcHVzbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXB2My5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cmxjYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzdGVtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdG9vbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5waXBlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAuZXhwIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5ldHNubXAucGRiIgotCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcbmV0c25tcC5kbGwiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iLi5cYmluXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0QgIk5FVFNOTVBfRExMIiAvRnAiJChJTlRESVIpXGxpYnNubXBfZGxsLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotTVRMPW1pZGwuZXhlCi1NVExfUFJPSj0vbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIgCi1SU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcbGlic25tcF9kbGwuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQorIGlmIGV4aXN0ICIuLi9iaW4vJChPVVRESVIpL25ldHNubXAuZGxsLm1hbmlmZXN0IiBcCisJICAgIG10LmV4ZSAtbWFuaWZlc3QgIi4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5kbGwubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLmRsbCI7MgogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9YWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RsbCAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKVxuZXRzbm1wLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL2RlZjoiLlxsaWJzbm1wLmRlZiIgL291dDoiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLmRsbCIgL2ltcGxpYjoiLi4vbGliLyQoT1VURElSKVxuZXRzbm1wLmxpYiIgCi1MSU5LMzJfT0JKUz0gXAotCSIkKElOVERJUilcYXNuMS5vYmoiIFwKLQkiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIgXAotCSIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiIFwKLQkiJChJTlRESVIpXGNtdV9jb21wYXQub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXIub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIgXAotCSIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIgXAotCSIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiIFwKLQkiJChJTlRESVIpXGdldG9wdC5vYmoiIFwKLQkiJChJTlRESVIpXGludDY0Lm9iaiIgXAotCSIkKElOVERJUilcaW5ldF9udG9wLm9iaiIgXAotCSIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIgXAotCSIkKElOVERJUilca2V5dG9vbHMub2JqIiBcCi0JIiQoSU5URElSKVxsY2RfdGltZS5vYmoiIFwKLQkiJChJTlRESVIpXG1kNS5vYmoiIFwKLQkiJChJTlRESVIpXG1pYi5vYmoiIFwKLQkiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIiBcCi0JIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIiBcCi0JIiQoSU5URElSKVxwYXJzZS5vYmoiIFwKLQkiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcc2NhcGkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wLXRjLm9iaiIgXAotCSIkKElOVERJUilcc25tcC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfZW51bS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIgXAotCSIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wdXNtLm9iaiIgXAotCSIkKElOVERJUilcc25tcHYzLm9iaiIgXAotCSIkKElOVERJUilcc3RybGNhdC5vYmoiIFwKLQkiJChJTlRESVIpXHN0cmxjcHkub2JqIiBcCi0JIiQoSU5URElSKVxzeXN0ZW0ub2JqIiBcCi0JIiQoSU5URElSKVx0b29scy5vYmoiIFwKLQkiJChJTlRESVIpXHN0cnRva19yLm9iaiIgXAotCSIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiIFwKLQkiJChJTlRESVIpXHZhY20ub2JqIiBcCi0JIiQoSU5URElSKVx3aW5waXBlLm9iaiIgXAotCSIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiCi0KLSIuLlxiaW5cJChPVVRESVIpXG5ldHNubXAuZGxsIiA6ICIuLlxiaW5cJChPVVRESVIpIiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKLSAgICAkKExJTkszMikgQDw8Ci0gICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQotPDwKLQotIUVORElGIAogCiAKICFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCkBAIC0zODAsNyArMTQ4LDYgQEAKICFFTkRJRiAKIAogCi0hSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiIHx8ICIkKENGRykiID09ICJkZWJ1ZyIKIFNPVVJDRT0uLlwuLlxzbm1wbGliXGFzbjEuYwogCiAiJChJTlRESVIpXGFzbjEub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtMzk5LDkgKzE2Niw5IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXGNtdV9jb21wYXQuYworU09VUkNFPS4uXC4uXHNubXBsaWJcY2xvc2VkaXIuYwogCi0iJChJTlRESVIpXGNtdV9jb21wYXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorIiQoSU5URElSKVxjbG9zZWRpci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKQEAgLTQ0NywxNSArMjE0LDIxIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGZkX2V2ZW50X21hbmFnZXIuYworCisiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxnZXRvcHQuYwogCiAiJChJTlRESVIpXGdldG9wdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXGludDY0LmMKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGdldHRpbWVvZmRheS5jCiAKLSIkKElOVERJUilcaW50NjQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorIiQoSU5URElSKVxnZXR0aW1lb2ZkYXkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCkBAIC00NzEsMTIgKzI0NCwyNCBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxpbnQ2NC5jCisKKyIkKElOVERJUilcaW50NjQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxrZXl0b29scy5jCiAKICIkKElOVERJUilca2V5dG9vbHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxsYXJnZV9mZF9zZXQuYworCisiJChJTlRESVIpXGxhcmdlX2ZkX3NldC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXGxjZF90aW1lLmMKIAogIiQoSU5URElSKVxsY2RfdGltZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01MDcsNiArMjkyLDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXG9wZW5kaXIuYworCisiJChJTlRESVIpXG9wZW5kaXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxwYXJzZS5jCiAKICIkKElOVERJUilccGFyc2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTE5LDYgKzMxMCwxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxyZWFkZGlyLmMKKworIiQoSU5URElSKVxyZWFkZGlyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcc2NhcGkuYwogCiAiJChJTlRESVIpXHNjYXBpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTUzNyw2ICszMzQsNzIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wQ2FsbGJhY2tEb21haW4uYworCisiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcElQdjRCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wSVB2NEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBJUHY2QmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcElQdjZCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wU29ja2V0QmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFNvY2tldEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVENQQmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUERvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUElQdjZEb21haW4uYworCisiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQQmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFVEUEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBEb21haW4uYworCisiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBJUHY0QmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFVEUElQdjRCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQSVB2NkRvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX2FsYXJtLmMKIAogIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTU5MSw2ICs0NTQsMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9zZXJ2aWNlLmMKKworIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3RyYW5zcG9ydC5jCiAKICIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNjAzLDQyICs0NzIsNiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3NlcnZpY2UuYwotCi0iJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBDYWxsYmFja0RvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFRDUERvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBUQ1BJUHY2RG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBVRFBEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVURQSVB2NkRvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wdXNtLmMKIAogIiQoSU5URElSKVxzbm1wdXNtLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTY2Myw2ICs0OTYsMTggQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG9rX3IuYworCisiJChJTlRESVIpXHN0cnRva19yLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG91bGwuYworCisiJChJTlRESVIpXHN0cnRvdWxsLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcc3lzdGVtLmMKIAogIiQoSU5URElSKVxzeXN0ZW0ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNjc1LDEyICs1MjAsNiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b2tfci5jCi0KLSIkKElOVERJUilcc3RydG9rX3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx1Y2RfY29tcGF0LmMKIAogIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTY5OCwxMiArNTM3LDQgQEAKICIkKElOVERJUilcd2lucGlwZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxmZF9ldmVudF9tYW5hZ2VyLmMKLQotIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCiAKZGlmZiAtLWdpdCBhL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmIGIvd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYKaW5kZXggNDY3MGZiNi4uNDVkZDM1NiAxMDA2NDQKLS0tIGEvd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYKKysrIGIvd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYKQEAgLTEsNDU5ICsxLDIgQEAKLTsgICAgICAgQCgjKXNubXAuZGVmICAgIDEuMCAxMC8yNi85NyAoZ21hcnpvdEBiYXluZXR3b3Jrcy5jb20pCi07ICAgICAgIFNpbmdsZSBzZXNzaW9uIEFQSSBtb2RzIGJ5IE0uIFNsaWZjYWssIEludGVybmV0IFNlY3VyaXR5IFN5c3RlbXMsIEluYy4KLQotREVTQ1JJUFRJT04gICAgICdVQ0QgU05NUCBMaWJyYXJ5JwotO0NPREUgICAgICAgICAgICBTSEFSRUQgUkVBRCBFWEVDVVRFCi07REFUQSAgICAgICAgICAgIFNIQVJFRCBSRUFEIFdSSVRFCi1FWFBPUlRTCi0JYXNuX3BhcnNlX2ludAotCWFzbl9idWlsZF9pbnQKLQlhc25fcGFyc2VfdW5zaWduZWRfaW50Ci0JYXNuX2J1aWxkX3Vuc2lnbmVkX2ludAotCWFzbl9wYXJzZV9zdHJpbmcKLQlhc25fYnVpbGRfc3RyaW5nCi0JYXNuX3BhcnNlX2hlYWRlcgotCWFzbl9idWlsZF9oZWFkZXIKLQlhc25fYnVpbGRfc2VxdWVuY2UKLQlhc25fcGFyc2VfbGVuZ3RoCi0JYXNuX2J1aWxkX2xlbmd0aAotCWFzbl9wYXJzZV9vYmppZAotCWFzbl9idWlsZF9vYmppZAotCWFzbl9wYXJzZV9udWxsCi0JYXNuX2J1aWxkX251bGwKLQlhc25fcGFyc2VfYml0c3RyaW5nCi0JYXNuX2J1aWxkX2JpdHN0cmluZwotCWFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NAotCWFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NAotCW1pYl90b19hc25fdHlwZQotCU1EYmVnaW4KLQlNRHVwZGF0ZQotCXByaW50X21pYgotCXByaW50X21pYl90cmVlCi0JcHJpbnRfYXNjaWlfZHVtcAotCXJlYWRfb2JqaWQKLQlnZXRfdHJlZV9oZWFkCi0JbmV0c25tcF9pbml0X21pYgotCWluaXRfbWliCi0JaW5pdF9taWJfaW50ZXJuYWxzCi0JcHJpbnRfdmFyaWFibGUKLQlwcmludF92YWx1ZQotCXByaW50STY0Ci0JcHJpbnRfb2JqaWQKLQlmcHJpbnRfb2JqaWQKLQlwcmludF9kZXNjcmlwdGlvbgotCWZwcmludF9kZXNjcmlwdGlvbgotCWdldF9tb2R1bGVfbm9kZQotCWdldF9ub2RlCi0Jc25tcF9wYXJzZV9vaWQKLQlmaW5kX25vZGUKLQlmaW5kX2Jlc3RfdHJlZV9ub2RlCi0JZ2V0X3dpbGRfbm9kZQotCWZpbmRfdHJlZV9ub2RlCi0JY2xlYXJfdHJlZV9mbGFncwotCWdldF90cmVlCi0JcmVhZF9tb2R1bGUKLQluZXRzbm1wX3JlYWRfbW9kdWxlCi0JcmVhZF9taWIKLQlyZWFkX2FsbF9taWJzCi0JYWRkX21pYmRpcgotCXNubXBfZ2V0X3Rva2VuCi0Jc25tcF9zZXRfbWliX3dhcm5pbmdzCi0Jc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMKLQlhZGRfbW9kdWxlX3JlcGxhY2VtZW50Ci0JcHJpbnRfc3VidHJlZQotCXByaW50X2FzY2lpX2R1bXBfdHJlZQotCXhkdW1wCi0Jc25tcF9wYXJzZV92YXJfb3AKLQlzbm1wX2J1aWxkX3Zhcl9vcAotCXByaW50VTY0Ci0JdTY0U3VidHJhY3QKLQl6ZXJvVTY0Ci0Jb3BlbmRpcgotCXJlYWRkaXIKLQljbG9zZWRpcgotCWdldHRpbWVvZmRheQotCW1rZGlyaGllcgotCXdpbnNvY2tfc3RhcnR1cAotCXdpbnNvY2tfY2xlYW51cAotCWdldF9teWFkZHIKLQlnZXRfdXB0aW1lCi0Jc25tcF9vcGVuCi0Jc25tcF9vcGVuX2V4Ci0Jc25tcF9jbG9zZQotCXNubXBfc2VuZAotCXNubXBfcmVhZAotCXNubXBfZnJlZV9wZHUKLQlzbm1wX2ZyZWVfdmFyCi0Jc25tcF9zZWxlY3RfaW5mbwotCXNubXBfdGltZW91dAotCXNubXBfc2V0X2RvX2RlYnVnZ2luZwotCXNubXBfZ2V0X2RvX2RlYnVnZ2luZwotCXNubXBfZ2V0X2RvX2xvZ2dpbmcKLQlzbm1wX2Rpc2FibGVfc3RkZXJybG9nCi0Jc25tcF9lbmFibGVfc3lzbG9nCi0Jc25tcF9lbmFibGVfc3RkZXJybG9nCi0Jc25tcF9lbmFibGVfZmlsZWxvZwotCXNubXBfbG9nCi0Jc25tcF9sb2dfcGVycm9yCi0Jc25tcF9wZXJyb3IKLQlzbm1wX3Nlc3NfcGVycm9yCi0Jc25tcF9hZGRfbnVsbF92YXIKLQlzbm1wX3BkdV9jcmVhdGUKLQlzbm1wX2ZpeF9wZHUKLQlzbm1wX2Nsb25lX3BkdQotCXNubXBfY2xvbmVfbWVtCi0Jc25tcF9zZXRfdmFyX3ZhbHVlCi0Jc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlCi0Jc25tcF9zZXRfdmFyX29iamlkCi0Jc25tcF9yZXBsYWNlX3Zhcl90eXBlcwotCXNubXBfYXBpX2VycnN0cmluZwotCXNubXBfZXJyc3RyaW5nCi0Jc25tcF9zZXRfZGV0YWlsCi0Jc25tcF9zeW5jaF9zZXR1cAotCXNubXBfc3luY2hfcmVzcG9uc2UKLQlzbm1wX2R1cGxpY2F0ZV9vYmppZAotCXNubXBfZ2V0X25leHRfc2Vzc2lkCi0Jc25tcF9nZXRfbmV4dF90cmFuc2lkCi0Jc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljCi0Jc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5Ci0Jc25tcF9nZXRfc3RhdGlzdGljCi0JaW5pdF9zbm1wCi0Jc25tcF9zaHV0ZG93bgotCXNubXBfYWRkX3ZhcgotCXJ1bl9hbGFybXMKLQlzbm1wX2Nsb25lX3ZhcgotCXByaW50X29pZF9yZXBvcnQKLQlwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9zdWZmaXgKLQlwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9zeW1ib2xpYwotCXByaW50X29pZF9yZXBvcnRfZW5hYmxlX29pZAotCXByaW50X29pZF9yZXBvcnRfZW5hYmxlX2xhYmVsZWRvaWQKLTsJYXNjaWlfdG9fYmluYXJ5Ci07CWhleF90b19iaW5hcnkKLQlnZXRfdGNfZGVzY3JpcHRvcgotCWdldF90Y19kZXNjcmlwdGlvbgotCXNldGVudgotCWZpbmRfbW9kdWxlCi0Jc25tcF9hc3luY19zZW5kCi0Jc25tcF9lcnJvcgotCXNubXBfc2Vzc19pbml0Ci0Jc25tcF9zZXNzX29wZW4KLQlzbm1wX3Nlc3Nfc2Vzc2lvbgotCXNubXBfc2Vzc19zZW5kCi0Jc25tcF9zZXNzX2FzeW5jX3NlbmQKLQlzbm1wX3Nlc3Nfc2VsZWN0X2luZm8KLQlzbm1wX3Nlc3NfcmVhZAotCXNubXBfc2Vzc190aW1lb3V0Ci0Jc25tcF9zZXNzX2Nsb3NlCi0Jc25tcF9zZXNzX2Vycm9yCi0Jc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlCi0Jc25tcF9taWJfdG9nZ2xlX29wdGlvbnMKLQlzbm1wX21pYl90b2dnbGVfb3B0aW9uc191c2FnZQotCXJlYWRfY29uZmlnX3JlYWRfZGF0YQotCXJlYWRfY29uZmlnX3N0b3JlX2RhdGEKLQlyZWFkX2NvbmZpZ19wcmludF91c2FnZQotCXJlYWRfY29uZmlnX3dpdGhfdHlwZQotCXJlYWRfY29uZmlnX3N0b3JlCi0JcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcKLQlyZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZwotCXJlYWRfY29uZmlnX3JlYWRfbWVtb3J5Ci0JcmVhZF9jb25maWdfcmVhZF9vYmppZAotCWZyZWVfY29uZmlnCi0Jc2tpcF93aGl0ZQotCXNraXBfbm90X3doaXRlCi0JcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyCi0JdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIKLQlyZWFkX2FwcF9jb25maWdfc3RvcmUKLQl1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyCi0Jc25tcF9zZXRfZG9fZGVidWdnaW5nCi0Jc25tcF9nZXRfZG9fZGVidWdnaW5nCi0JZGVidWdfaW5kZW50Ci0JZGVidWdfaW5kZW50X2FkZAotCWRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQKLQlkZWJ1Z21zZwotCWRlYnVnbXNnX2hleAotCWRlYnVnbXNnX2hleHRsaQotCWRlYnVnbXNndG9rZW4KLQlkZWJ1Z21zZ192YXIKLQlkZWJ1Z21zZ19vaWRyYW5nZQotCWRlYnVnX3JlZ2lzdGVyX3Rva2VucwotCWdlbmVyYXRlX0t1Ci0JdXB0aW1lX3N0cmluZwotCW5ldHNubXBfbWVtZHVwCi0JZHVtcF9jaHVuawotCWluaXRfY2FsbGJhY2tzCi0Jc25tcF9yZWdpc3Rlcl9jYWxsYmFjawotCXNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjawotCXNubXBfY2FsbF9jYWxsYmFja3MKLQlzbm1wX2NvdW50X2NhbGxiYWNrcwotCXNubXBfY2FsbGJhY2tfYXZhaWxhYmxlCi0Jc3RybmNhc2VjbXAKLQlzdHJjYXNlY21wCi0JaW5pdF9zbm1wX2FsYXJtCi0JbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIKLQluZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZwotCW5ldHNubXBfZHNfc2V0X2Jvb2xlYW4KLQluZXRzbm1wX2RzX2dldF9ib29sZWFuCi0JbmV0c25tcF9kc190b2dnbGVfYm9vbGVhbgotCW5ldHNubXBfZHNfc2V0X2ludAotCW5ldHNubXBfZHNfZ2V0X2ludAotCW5ldHNubXBfZHNfc2V0X3N0cmluZwotCW5ldHNubXBfZHNfZ2V0X3N0cmluZwotCXNubXBfcGR1X2FkZF92YXJpYWJsZQotCXNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUKLQllbmNvZGVfa2V5Y2hhbmdlCi0JZGVjb2RlX2tleWNoYW5nZQotCWdlbmVyYXRlX2t1bAotCXNjX2luaXQKLQlzZXR1cF9lbmdpbmVJRAotCWJpbmFyeV90b19oZXgKLQloZXhfdG9fYmluYXJ5MgotCXNubXBfcmVzX2luaXQKLQlzbm1wX3Jlc19sb2NrCi0Jc25tcF9yZXNfdW5sb2NrCi0Jc25tcF9yZXNfZGVzdHJveV9tdXRleAotCXNubXBfbWliX3RvZ2dsZV9vcHRpb25zCi0Jc25tcF9taWJfdG9nZ2xlX29wdGlvbnNfdXNhZ2UKLQlzbm1wX2luX3RvZ2dsZV9vcHRpb25zCi0Jc25tcF9pbl90b2dnbGVfb3B0aW9uc191c2FnZQotCXNubXBfb3V0X3RvZ2dsZV9vcHRpb25zCi0Jc25tcF9vdXRfdG9nZ2xlX29wdGlvbnNfdXNhZ2UKLQlzbm1wX29pZF9jb21wYXJlCi0Jc25tcF9vaWR0cmVlX2NvbXBhcmUKLQluZXRzbm1wX29pZF9lcXVhbHMKLQl1c21fZnJlZV91c2VyCi0JdXNtX2FkZF91c2VyCi0JdXNtX2NyZWF0ZV9pbml0aWFsX3VzZXIKLQl1c21fcGFyc2VfY3JlYXRlX3VzbVVzZXIKLQl1c21fc2F2ZV91c2VycwotCXVzbV9wYXJzZV9jb25maWdfdXNtVXNlcgotCXVzbV9nZXRfdXNlcgotCXVzbV9nZXRfdXNlckxpc3QKLQl1c21fY2xvbmVGcm9tX3VzZXIKLQl1c21fY3JlYXRlX3VzZXIKLQl1c21fcmVtb3ZlX3VzZXIKLQl1c21fc2V0X3VzZXJfcGFzc3dvcmQKLQlyZWFkX3ByZW1pYl9jb25maWdzCi0JaW5pdF9zbm1wdjMKLQlzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUKLQlzbm1wdjNfbG9jYWxfc25tcEVuZ2luZUJvb3RzCi0Jc25tcHYzX2dldF9lbmdpbmVJRAotCXNubXB2M19nZW5lcmF0ZV9lbmdpbmVJRAotCWdldF9kZWZhdWx0X2F1dGh0eXBlCi0JZ2V0X2RlZmF1bHRfcHJpdnR5cGUKLQlyZWdpc3Rlcl9jb25maWdfaGFuZGxlcgotCXJlYWRfY29uZmlncwotCWRlYnVnbXNnX29pZAotCWNvbmZpZ19wZXJyb3IKLQljb25maWdfcHdhcm4KLQljb3B5X3dvcmQKLQljb3B5X253b3JkCi0JY2FsY3VsYXRlX3RpbWVfZGlmZgotCXZhY21faXNfY29uZmlndXJlZAotCWdldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeQotCXZhY21fY3JlYXRlR3JvdXBFbnRyeQotCXZhY21fZGVzdHJveUdyb3VwRW50cnkKLQl2YWNtX2Rlc3Ryb3lBbGxHcm91cEVudHJpZXMKLQl2YWNtX2NyZWF0ZUFjY2Vzc0VudHJ5Ci0JdmFjbV9kZXN0cm95QWNjZXNzRW50cnkKLQl2YWNtX2Rlc3Ryb3lBbGxBY2Nlc3NFbnRyaWVzCi0JdmFjbV9jcmVhdGVWaWV3RW50cnkKLQl2YWNtX2Rlc3Ryb3lWaWV3RW50cnkKLQl2YWNtX2Rlc3Ryb3lBbGxWaWV3RW50cmllcwotCXZhY21fZ2V0Vmlld0VudHJ5Ci0JdmFjbV9nZXRHcm91cEVudHJ5Ci0JdmFjbV9nZXRBY2Nlc3NFbnRyeQotCXZhY21fcGFyc2VfY29uZmlnX2FjY2VzcwotCXZhY21fcGFyc2VfY29uZmlnX2dyb3VwCi0JdmFjbV9wYXJzZV9jb25maWdfdmlldwotCXZhY21fcGFyc2VfY29uZmlnX2F1dGhfYWNjZXNzCi0Jc3RvcmVfdmFjbQotCXZhY21fc2Nhbkdyb3VwSW5pdAotCXZhY21fc2Nhbkdyb3VwTmV4dAotCXZhY21fc2NhbkFjY2Vzc0luaXQKLQl2YWNtX3NjYW5BY2Nlc3NOZXh0Ci0JdmFjbV9zY2FuVmlld0luaXQKLQl2YWNtX3NjYW5WaWV3TmV4dAotCXZhY21fY2hlY2tTdWJ0cmVlCi0Jc25tcF9zeW5jaF9yZXNwb25zZV9jYgotCXNubXBfY2xvbmVfdmFyYmluZAotCXNubXBfZnJlZV92YXJiaW5kCi0Jc25tcF9nZXRfZHVtcF9wYWNrZXQKLQlzbm1wX2dldF9xdWlja19wcmludAotCXNubXBfZ2V0X3JhbmRvbV9hY2Nlc3MKLQlzbm1wX2dldF9zdWZmaXhfb25seQotCXNubXBfc2V0X2R1bXBfcGFja2V0Ci0Jc25tcF9zZXRfZnVsbF9vYmppZAotCXNubXBfc2V0X3F1aWNrX3ByaW50Ci0Jc25tcF9zZXRfcmFuZG9tX2FjY2VzcwotCXNubXBfc2V0X3N1ZmZpeF9vbmx5Ci0Jc25tcF9jbGVhbl9wZXJzaXN0ZW50Ci0Jc25tcF9zYXZlX3BlcnNpc3RlbnQKLQl1c21fc3RvcmVfdXNlcnMKLQlzbm1wX3N0b3JlCi0JYXRpbWVfZGlmZgotCXVhdGltZV9oZGlmZgotCWF0aW1lX25ld01hcmtlcgotCWF0aW1lX3NldE1hcmtlcgotCWF0aW1lX3JlYWR5Ci0Jc25tcF9zdHJjYXQKLQlmcHJpbnRfdmFyaWFibGUKLQlzcHJpbnRfcmVhbGxvY19vYmppZAotCXNwcmludF9yZWFsbG9jX2FzY2lpc3RyaW5nCi0Jc3ByaW50X3JlYWxsb2NfdmFyaWFibGUKLQlzcHJpbnRfcmVhbGxvY192YWx1ZQotCXNwcmludF9yZWFsbG9jX2J5X3R5cGUKLQlzbm1wX3JlYWxsb2MKLSAgICAgIG5ldHNubXBfY29uZmlnCi0gICAgICBuZXRzbm1wX2NvbmZpZ19yZW1lbWJlcgotICAgICAgc25tcF9oZXhfdG9fYmluYXJ5Ci0gICAgICBzbm1wdjNfb3B0aW9ucwotICAgICAgbmV0c25tcF9nZXRfdmVyc2lvbgotICAgICAgc25tcF9zZXNzX3RyYW5zcG9ydAotICAgICAgc25tcF9zZXNzX3BvaW50ZXIKLSAgICAgIHNubXBfZGVjaW1hbF90b19iaW5hcnkKLQlzbm1wX2FsYXJtX3JlZ2lzdGVyCi0Jc25tcF9hbGFybV91bnJlZ2lzdGVyCi0gICAgICBkYXRlX25fdGltZQotCXNubXBfZGlzYWJsZV9sb2cKLQlzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQKLQluZXRzbm1wX3Nlc3NfbG9nX2Vycm9yCi0Jc25tcF9hZGQKLQloYW5kbGVfbG9uZ19vcHQKLQluZXRzbm1wX3RyYW5zcG9ydF9mcmVlCi0JbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydAotCW5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfb2lkCi0JbmV0c25tcF90ZG9tYWluX3N1cHBvcnQKLQluZXRzbm1wVURQRG9tYWluCi0JbmV0c25tcF9zbm1wVENQRG9tYWluCi0JbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0Ci0JbmV0c25tcF9hZGRfbGlzdF9kYXRhCi0JbmV0c25tcF9nZXRfbGlzdF9kYXRhCi0JbmV0c25tcF9mcmVlX2xpc3RfZGF0YQotCW5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhCi0JbmV0c25tcF9vaWRfc3Rhc2hfYWRkX2RhdGEKLQluZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YQotCW5ldHNubXBfb2lkX2ZpbmRfcHJlZml4Ci0JbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0Ci0JbmV0c25tcF9jb250YWluZXJfbnVsbF9pbml0Ci0JbmV0c25tcF9jb250YWluZXJfc3NsbF9pbml0Ci0JbmV0c25tcF9zdHJkdXBfYW5kX251bGwKLQlidWlsZF9vaWQKLQlidWlsZF9vaWRfbm9hbGxvYwotCXBhcnNlX29uZV9vaWRfaW5kZXgKLQlwYXJzZV9vaWRfaW5kZXhlcwotCWNvdW50X3ZhcmJpbmRzCi0JY291bnRfdmFyYmluZHNfb2ZfdHlwZQotCXNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QKLQlzZV9maW5kX3ZhbHVlX2luX3NsaXN0Ci0Jc2VfYWRkX3BhaXJfdG9fc2xpc3QKLQlzbm1wX3BhcnNlX2FyZ3MKLQlzbm1wX3BhcnNlX2FyZ3NfZGVzY3JpcHRpb25zCi0Jc25tcF9wYXJzZV9hcmdzX3VzYWdlCi0JbmV0c25tcF9jYWxsYmFja19vcGVuCi0JbmV0c25tcF91ZHBfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3RlcgotCW5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5Ci0JbmV0c25tcF91ZHBfZ2V0U2VjTmFtZQotCWZpbmRfc2VjX21vZAotCXN0cmxjYXQKLQlzdHJsY3B5Ci0JZ2V0b3B0Ci0Jb3B0YXJnICAgICAgICAgICAgICAgICAgREFUQQotCW9wdGVyciAgICAgICAgICAgICAgICAgIERBVEEKLQlvcHRpbmQgICAgICAgICAgICAgICAgICBEQVRBCi0Jb3B0b3B0ICAgICAgICAgICAgICAgICAgREFUQQotCW9wdHJlc2V0ICAgICAgICAgICAgICAgIERBVEEKLQl1c21Ob0F1dGhQcm90b2NvbCAgICAgICBEQVRBCi0JdXNtSE1BQ01ENUF1dGhQcm90b2NvbCAgREFUQQotCXVzbUhNQUNTSEExQXV0aFByb3RvY29sIERBVEEKLQl1c21Ob1ByaXZQcm90b2NvbCAgICAgICBEQVRBCi0JdXNtREVTUHJpdlByb3RvY29sICAgICAgREFUQQotCXVzbUFFU1ByaXZQcm90b2NvbCAgICAgIERBVEEKLQlzbnByaW50X2JpdHN0cmluZwotCXNucHJpbnRfdmFsdWUKLQlzbnByaW50X29iamlkCi0Jc25wcmludF92YXJpYWJsZQotCXNubXBfc3luY2hfcmVzZXQKLQlzbm1wX2xvZ19vcHRpb25zCi0Jc25tcF9sb2dfc3lzbG9nbmFtZQotCW5ldHNubXBfY2xlYXJfY2FsbGJhY2tfbGlzdAotCW5ldHNubXBfY2xlYXJfdGRvbWFpbl9saXN0Ci0JY2xlYXJfc2VjX21vZAotCWNsZWFyX3NubXBfZW51bQotCWNsZWFyX2NhbGxiYWNrCi0JY2xlYXJfdXNlcl9saXN0Ci0JbmV0c25tcF9kc19nZXRfdm9pZAotCW5ldHNubXBfZHNfc2V0X3ZvaWQKLQluZXRzbm1wX2RzX3NodXRkb3duCi0JbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZAotCW5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZQotCW1vZHVsZV9uYW1lCi0JTWliICAgICAgICAgICAgICAgICAgICAgREFUQQotCXRyZWVfaGVhZCAgICAgICAgICAgICAgIERBVEEKLQlzbm1wX2Vycm5vICAgICAgICAgICAgICBEQVRBCi0JbmV0c25tcF9kYWVtb25pemUKLQlzbm1wX2xvZ19vcHRpb25zX3VzYWdlCi0JbmV0c25tcF9jb250YWluZXJfZnJlZV9saXN0Ci0JbmV0c25tcF9vaWRfc3Rhc2hfZ2V0bmV4dF9ub2RlCi0JbmV0c25tcF9vaWRfc3Rhc2hfZnJlZQotCW5ldHNubXBfZ2V0X2xpc3Rfbm9kZQotCW5ldHNubXBfcmVtb3ZlX2xpc3Rfbm9kZQotCW5ldHNubXBfcmVtb3ZlX2xvZ2hhbmRsZXIKLQluZXRzbm1wX3JlZ2lzdGVyX2xvZ2hhbmRsZXIKLQlnZXRfbG9naF9oZWFkCi0JZGJnX3Rva2VucwotCWRlYnVnX251bV90b2tlbnMKLQljcmVhdGVfd2lucGlwZV90cmFuc3BvcnQKLQlnZXRfdGVtcF9maWxlX3BhdHRlcm4KLQluZXRzbm1wX3N0cmR1cAotCW5ldHNubXBfY2FsbG9jCi0JbmV0c25tcF9tYWxsb2MKLQluZXRzbm1wX3JlYWxsb2MKLQluZXRzbm1wX2ZyZWUKLQluZXRzbm1wX3VkcDZfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3RlcgotCWluaXRfdXNtX2NvbmYKLQlzdHJ0b2tfcgotICAgICAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzCi0gICAgICAgIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleAotICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kCi0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZQotICAgICAgICBuZXRzbm1wX29pZF9jb21wYXJlX2xsCi0gICAgICAgIG5ldHNubXBfbmNvbXBhcmVfbmV0c25tcF9pbmRleAotICAgICAgICBuZXRzbm1wX2NvbXBhcmVfbmV0c25tcF9pbmRleAotICAgICAgICBmaW5kX3ZhcmJpbmRfaW5fbGlzdAotICAgICAgICBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50cwotICAgICAgICBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8KLSAgICAgICAgbmV0c25tcF9sb2dnaW5nX3Jlc3RhcnQKLSAgICAgICAgc2tpcF90b2tlbgotICAgICAgICBwYXJzZV9zZWNMZXZlbF9jb25mCi0gICAgICAgIG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbgotICAgICAgICBuZXRzbm1wX3F1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24KLSAgICAgICAgbmV0c25tcF9kc19wYXJzZV9ib29sZWFuCi0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQKLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X2RvbWFpbgotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NlcnZpY2VfaGFuZGxlcnMKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfb3Blbl9zZXJ2ZXIKLSAgICAgICAgbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsCi0gICAgICAgIHNubXBfYWRkX2Z1bGwKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQKLSAgICAgICAgc25tcF9vaWRzdWJ0cmVlX2NvbXBhcmUKLSAgICAgICAgc25tcF9kaXNhYmxlX3N5c2xvZwotICAgICAgICBzbm1wX3N0ZGVycmxvZ19zdGF0dXMKLSAgICAgICAgc2FfZmluZF9zcGVjaWZpYwotICAgICAgICBjaGVja19yb3dzdGF0dXNfdHJhbnNpdGlvbgotICAgICAgICBjaGVja19zdG9yYWdlX3RyYW5zaXRpb24KLSAgICAgICAgbmV0c25tcF92aWV3X2dldAotICAgICAgICBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c192YWx1ZQotICAgICAgICBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUKLSAgICAgICAgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZQotICAgICAgICByZWFkX2NvbmZpZ19zYXZlX29iamlkCi0gICAgICAgIHByaW50X29pZF9yZXBvcnRfZW5hYmxlX21pYmNoaWxkb2lkCi0gICAgICAgIG5ldHNubXBfcXVlcnlfd2FsawotICAgICAgICBuZXRzbm1wX3F1ZXJ5X2dldG5leHQKLSAgICAgICAgbmV0c25tcF9xdWVyeV9nZXQKLQluZXRzbm1wX21rdGVtcAotICAgICAgICBkZWJ1Z21zZ19zdWJvaWQKLTtJUHY2ICAgICAgICBuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkKLTtJUHY2ICAgICAgICBuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZQotO0lQdjYgICAgICAgIG5ldHNubXBfVENQSVB2NkRvbWFpbgotO0lQdjYgICAgICAgIG5ldHNubXBfVURQSVB2NkRvbWFpbgotCis7IFRoaXMgLmRlZiBmaWxlIGlzIG9ic29sZXRlLiBEbyBub3QgYWRkIGFueSBuYW1lcyBvZiBleHBvcnRlZCBmdW5jdGlvbnMgaGVyZQorOyBidXQgYWRkIE5FVFNOTVBfSU1QT1JUIHRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4gYi93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY3MGZiNi4uMDAwMDAwMAotLS0gYS93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi07ICAgICAgIEAoIylzbm1wLmRlZiAgICAxLjAgMTAvMjYvOTcgKGdtYXJ6b3RAYmF5bmV0d29ya3MuY29tKQotOyAgICAgICBTaW5nbGUgc2Vzc2lvbiBBUEkgbW9kcyBieSBNLiBTbGlmY2FrLCBJbnRlcm5ldCBTZWN1cml0eSBTeXN0ZW1zLCBJbmMuCi0KLURFU0NSSVBUSU9OICAgICAnVUNEIFNOTVAgTGlicmFyeScKLTtDT0RFICAgICAgICAgICAgU0hBUkVEIFJFQUQgRVhFQ1VURQotO0RBVEEgICAgICAgICAgICBTSEFSRUQgUkVBRCBXUklURQotRVhQT1JUUwotCWFzbl9wYXJzZV9pbnQKLQlhc25fYnVpbGRfaW50Ci0JYXNuX3BhcnNlX3Vuc2lnbmVkX2ludAotCWFzbl9idWlsZF91bnNpZ25lZF9pbnQKLQlhc25fcGFyc2Vfc3RyaW5nCi0JYXNuX2J1aWxkX3N0cmluZwotCWFzbl9wYXJzZV9oZWFkZXIKLQlhc25fYnVpbGRfaGVhZGVyCi0JYXNuX2J1aWxkX3NlcXVlbmNlCi0JYXNuX3BhcnNlX2xlbmd0aAotCWFzbl9idWlsZF9sZW5ndGgKLQlhc25fcGFyc2Vfb2JqaWQKLQlhc25fYnVpbGRfb2JqaWQKLQlhc25fcGFyc2VfbnVsbAotCWFzbl9idWlsZF9udWxsCi0JYXNuX3BhcnNlX2JpdHN0cmluZwotCWFzbl9idWlsZF9iaXRzdHJpbmcKLQlhc25fcGFyc2VfdW5zaWduZWRfaW50NjQKLQlhc25fYnVpbGRfdW5zaWduZWRfaW50NjQKLQltaWJfdG9fYXNuX3R5cGUKLQlNRGJlZ2luCi0JTUR1cGRhdGUKLQlwcmludF9taWIKLQlwcmludF9taWJfdHJlZQotCXByaW50X2FzY2lpX2R1bXAKLQlyZWFkX29iamlkCi0JZ2V0X3RyZWVfaGVhZAotCW5ldHNubXBfaW5pdF9taWIKLQlpbml0X21pYgotCWluaXRfbWliX2ludGVybmFscwotCXByaW50X3ZhcmlhYmxlCi0JcHJpbnRfdmFsdWUKLQlwcmludEk2NAotCXByaW50X29iamlkCi0JZnByaW50X29iamlkCi0JcHJpbnRfZGVzY3JpcHRpb24KLQlmcHJpbnRfZGVzY3JpcHRpb24KLQlnZXRfbW9kdWxlX25vZGUKLQlnZXRfbm9kZQotCXNubXBfcGFyc2Vfb2lkCi0JZmluZF9ub2RlCi0JZmluZF9iZXN0X3RyZWVfbm9kZQotCWdldF93aWxkX25vZGUKLQlmaW5kX3RyZWVfbm9kZQotCWNsZWFyX3RyZWVfZmxhZ3MKLQlnZXRfdHJlZQotCXJlYWRfbW9kdWxlCi0JbmV0c25tcF9yZWFkX21vZHVsZQotCXJlYWRfbWliCi0JcmVhZF9hbGxfbWlicwotCWFkZF9taWJkaXIKLQlzbm1wX2dldF90b2tlbgotCXNubXBfc2V0X21pYl93YXJuaW5ncwotCXNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zCi0JYWRkX21vZHVsZV9yZXBsYWNlbWVudAotCXByaW50X3N1YnRyZWUKLQlwcmludF9hc2NpaV9kdW1wX3RyZWUKLQl4ZHVtcAotCXNubXBfcGFyc2VfdmFyX29wCi0Jc25tcF9idWlsZF92YXJfb3AKLQlwcmludFU2NAotCXU2NFN1YnRyYWN0Ci0JemVyb1U2NAotCW9wZW5kaXIKLQlyZWFkZGlyCi0JY2xvc2VkaXIKLQlnZXR0aW1lb2ZkYXkKLQlta2RpcmhpZXIKLQl3aW5zb2NrX3N0YXJ0dXAKLQl3aW5zb2NrX2NsZWFudXAKLQlnZXRfbXlhZGRyCi0JZ2V0X3VwdGltZQotCXNubXBfb3BlbgotCXNubXBfb3Blbl9leAotCXNubXBfY2xvc2UKLQlzbm1wX3NlbmQKLQlzbm1wX3JlYWQKLQlzbm1wX2ZyZWVfcGR1Ci0Jc25tcF9mcmVlX3ZhcgotCXNubXBfc2VsZWN0X2luZm8KLQlzbm1wX3RpbWVvdXQKLQlzbm1wX3NldF9kb19kZWJ1Z2dpbmcKLQlzbm1wX2dldF9kb19kZWJ1Z2dpbmcKLQlzbm1wX2dldF9kb19sb2dnaW5nCi0Jc25tcF9kaXNhYmxlX3N0ZGVycmxvZwotCXNubXBfZW5hYmxlX3N5c2xvZwotCXNubXBfZW5hYmxlX3N0ZGVycmxvZwotCXNubXBfZW5hYmxlX2ZpbGVsb2cKLQlzbm1wX2xvZwotCXNubXBfbG9nX3BlcnJvcgotCXNubXBfcGVycm9yCi0Jc25tcF9zZXNzX3BlcnJvcgotCXNubXBfYWRkX251bGxfdmFyCi0Jc25tcF9wZHVfY3JlYXRlCi0Jc25tcF9maXhfcGR1Ci0Jc25tcF9jbG9uZV9wZHUKLQlzbm1wX2Nsb25lX21lbQotCXNubXBfc2V0X3Zhcl92YWx1ZQotCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZQotCXNubXBfc2V0X3Zhcl9vYmppZAotCXNubXBfcmVwbGFjZV92YXJfdHlwZXMKLQlzbm1wX2FwaV9lcnJzdHJpbmcKLQlzbm1wX2VycnN0cmluZwotCXNubXBfc2V0X2RldGFpbAotCXNubXBfc3luY2hfc2V0dXAKLQlzbm1wX3N5bmNoX3Jlc3BvbnNlCi0Jc25tcF9kdXBsaWNhdGVfb2JqaWQKLQlzbm1wX2dldF9uZXh0X3Nlc3NpZAotCXNubXBfZ2V0X25leHRfdHJhbnNpZAotCXNubXBfaW5jcmVtZW50X3N0YXRpc3RpYwotCXNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieQotCXNubXBfZ2V0X3N0YXRpc3RpYwotCWluaXRfc25tcAotCXNubXBfc2h1dGRvd24KLQlzbm1wX2FkZF92YXIKLQlydW5fYWxhcm1zCi0Jc25tcF9jbG9uZV92YXIKLQlwcmludF9vaWRfcmVwb3J0Ci0JcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfc3VmZml4Ci0JcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfc3ltYm9saWMKLQlwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9vaWQKLQlwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9sYWJlbGVkb2lkCi07CWFzY2lpX3RvX2JpbmFyeQotOwloZXhfdG9fYmluYXJ5Ci0JZ2V0X3RjX2Rlc2NyaXB0b3IKLQlnZXRfdGNfZGVzY3JpcHRpb24KLQlzZXRlbnYKLQlmaW5kX21vZHVsZQotCXNubXBfYXN5bmNfc2VuZAotCXNubXBfZXJyb3IKLQlzbm1wX3Nlc3NfaW5pdAotCXNubXBfc2Vzc19vcGVuCi0Jc25tcF9zZXNzX3Nlc3Npb24KLQlzbm1wX3Nlc3Nfc2VuZAotCXNubXBfc2Vzc19hc3luY19zZW5kCi0Jc25tcF9zZXNzX3NlbGVjdF9pbmZvCi0Jc25tcF9zZXNzX3JlYWQKLQlzbm1wX3Nlc3NfdGltZW91dAotCXNubXBfc2Vzc19jbG9zZQotCXNubXBfc2Vzc19lcnJvcgotCXNubXBfc2Vzc19zeW5jaF9yZXNwb25zZQotCXNubXBfbWliX3RvZ2dsZV9vcHRpb25zCi0Jc25tcF9taWJfdG9nZ2xlX29wdGlvbnNfdXNhZ2UKLQlyZWFkX2NvbmZpZ19yZWFkX2RhdGEKLQlyZWFkX2NvbmZpZ19zdG9yZV9kYXRhCi0JcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UKLQlyZWFkX2NvbmZpZ193aXRoX3R5cGUKLQlyZWFkX2NvbmZpZ19zdG9yZQotCXJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nCi0JcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcKLQlyZWFkX2NvbmZpZ19yZWFkX21lbW9yeQotCXJlYWRfY29uZmlnX3JlYWRfb2JqaWQKLQlmcmVlX2NvbmZpZwotCXNraXBfd2hpdGUKLQlza2lwX25vdF93aGl0ZQotCXJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcgotCXVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyCi0JcmVhZF9hcHBfY29uZmlnX3N0b3JlCi0JdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcgotCXNubXBfc2V0X2RvX2RlYnVnZ2luZwotCXNubXBfZ2V0X2RvX2RlYnVnZ2luZwotCWRlYnVnX2luZGVudAotCWRlYnVnX2luZGVudF9hZGQKLQlkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkCi0JZGVidWdtc2cKLQlkZWJ1Z21zZ19oZXgKLQlkZWJ1Z21zZ19oZXh0bGkKLQlkZWJ1Z21zZ3Rva2VuCi0JZGVidWdtc2dfdmFyCi0JZGVidWdtc2dfb2lkcmFuZ2UKLQlkZWJ1Z19yZWdpc3Rlcl90b2tlbnMKLQlnZW5lcmF0ZV9LdQotCXVwdGltZV9zdHJpbmcKLQluZXRzbm1wX21lbWR1cAotCWR1bXBfY2h1bmsKLQlpbml0X2NhbGxiYWNrcwotCXNubXBfcmVnaXN0ZXJfY2FsbGJhY2sKLQlzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2sKLQlzbm1wX2NhbGxfY2FsbGJhY2tzCi0Jc25tcF9jb3VudF9jYWxsYmFja3MKLQlzbm1wX2NhbGxiYWNrX2F2YWlsYWJsZQotCXN0cm5jYXNlY21wCi0Jc3RyY2FzZWNtcAotCWluaXRfc25tcF9hbGFybQotCW5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliCi0JbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcKLQluZXRzbm1wX2RzX3NldF9ib29sZWFuCi0JbmV0c25tcF9kc19nZXRfYm9vbGVhbgotCW5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4KLQluZXRzbm1wX2RzX3NldF9pbnQKLQluZXRzbm1wX2RzX2dldF9pbnQKLQluZXRzbm1wX2RzX3NldF9zdHJpbmcKLQluZXRzbm1wX2RzX2dldF9zdHJpbmcKLQlzbm1wX3BkdV9hZGRfdmFyaWFibGUKLQlzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlCi0JZW5jb2RlX2tleWNoYW5nZQotCWRlY29kZV9rZXljaGFuZ2UKLQlnZW5lcmF0ZV9rdWwKLQlzY19pbml0Ci0Jc2V0dXBfZW5naW5lSUQKLQliaW5hcnlfdG9faGV4Ci0JaGV4X3RvX2JpbmFyeTIKLQlzbm1wX3Jlc19pbml0Ci0Jc25tcF9yZXNfbG9jawotCXNubXBfcmVzX3VubG9jawotCXNubXBfcmVzX2Rlc3Ryb3lfbXV0ZXgKLQlzbm1wX21pYl90b2dnbGVfb3B0aW9ucwotCXNubXBfbWliX3RvZ2dsZV9vcHRpb25zX3VzYWdlCi0Jc25tcF9pbl90b2dnbGVfb3B0aW9ucwotCXNubXBfaW5fdG9nZ2xlX29wdGlvbnNfdXNhZ2UKLQlzbm1wX291dF90b2dnbGVfb3B0aW9ucwotCXNubXBfb3V0X3RvZ2dsZV9vcHRpb25zX3VzYWdlCi0Jc25tcF9vaWRfY29tcGFyZQotCXNubXBfb2lkdHJlZV9jb21wYXJlCi0JbmV0c25tcF9vaWRfZXF1YWxzCi0JdXNtX2ZyZWVfdXNlcgotCXVzbV9hZGRfdXNlcgotCXVzbV9jcmVhdGVfaW5pdGlhbF91c2VyCi0JdXNtX3BhcnNlX2NyZWF0ZV91c21Vc2VyCi0JdXNtX3NhdmVfdXNlcnMKLQl1c21fcGFyc2VfY29uZmlnX3VzbVVzZXIKLQl1c21fZ2V0X3VzZXIKLQl1c21fZ2V0X3VzZXJMaXN0Ci0JdXNtX2Nsb25lRnJvbV91c2VyCi0JdXNtX2NyZWF0ZV91c2VyCi0JdXNtX3JlbW92ZV91c2VyCi0JdXNtX3NldF91c2VyX3Bhc3N3b3JkCi0JcmVhZF9wcmVtaWJfY29uZmlncwotCWluaXRfc25tcHYzCi0Jc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lCi0Jc25tcHYzX2xvY2FsX3NubXBFbmdpbmVCb290cwotCXNubXB2M19nZXRfZW5naW5lSUQKLQlzbm1wdjNfZ2VuZXJhdGVfZW5naW5lSUQKLQlnZXRfZGVmYXVsdF9hdXRodHlwZQotCWdldF9kZWZhdWx0X3ByaXZ0eXBlCi0JcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIKLQlyZWFkX2NvbmZpZ3MKLQlkZWJ1Z21zZ19vaWQKLQljb25maWdfcGVycm9yCi0JY29uZmlnX3B3YXJuCi0JY29weV93b3JkCi0JY29weV9ud29yZAotCWNhbGN1bGF0ZV90aW1lX2RpZmYKLQl2YWNtX2lzX2NvbmZpZ3VyZWQKLQlnZXRfY29uZmlndXJhdGlvbl9kaXJlY3RvcnkKLQl2YWNtX2NyZWF0ZUdyb3VwRW50cnkKLQl2YWNtX2Rlc3Ryb3lHcm91cEVudHJ5Ci0JdmFjbV9kZXN0cm95QWxsR3JvdXBFbnRyaWVzCi0JdmFjbV9jcmVhdGVBY2Nlc3NFbnRyeQotCXZhY21fZGVzdHJveUFjY2Vzc0VudHJ5Ci0JdmFjbV9kZXN0cm95QWxsQWNjZXNzRW50cmllcwotCXZhY21fY3JlYXRlVmlld0VudHJ5Ci0JdmFjbV9kZXN0cm95Vmlld0VudHJ5Ci0JdmFjbV9kZXN0cm95QWxsVmlld0VudHJpZXMKLQl2YWNtX2dldFZpZXdFbnRyeQotCXZhY21fZ2V0R3JvdXBFbnRyeQotCXZhY21fZ2V0QWNjZXNzRW50cnkKLQl2YWNtX3BhcnNlX2NvbmZpZ19hY2Nlc3MKLQl2YWNtX3BhcnNlX2NvbmZpZ19ncm91cAotCXZhY21fcGFyc2VfY29uZmlnX3ZpZXcKLQl2YWNtX3BhcnNlX2NvbmZpZ19hdXRoX2FjY2VzcwotCXN0b3JlX3ZhY20KLQl2YWNtX3NjYW5Hcm91cEluaXQKLQl2YWNtX3NjYW5Hcm91cE5leHQKLQl2YWNtX3NjYW5BY2Nlc3NJbml0Ci0JdmFjbV9zY2FuQWNjZXNzTmV4dAotCXZhY21fc2NhblZpZXdJbml0Ci0JdmFjbV9zY2FuVmlld05leHQKLQl2YWNtX2NoZWNrU3VidHJlZQotCXNubXBfc3luY2hfcmVzcG9uc2VfY2IKLQlzbm1wX2Nsb25lX3ZhcmJpbmQKLQlzbm1wX2ZyZWVfdmFyYmluZAotCXNubXBfZ2V0X2R1bXBfcGFja2V0Ci0Jc25tcF9nZXRfcXVpY2tfcHJpbnQKLQlzbm1wX2dldF9yYW5kb21fYWNjZXNzCi0Jc25tcF9nZXRfc3VmZml4X29ubHkKLQlzbm1wX3NldF9kdW1wX3BhY2tldAotCXNubXBfc2V0X2Z1bGxfb2JqaWQKLQlzbm1wX3NldF9xdWlja19wcmludAotCXNubXBfc2V0X3JhbmRvbV9hY2Nlc3MKLQlzbm1wX3NldF9zdWZmaXhfb25seQotCXNubXBfY2xlYW5fcGVyc2lzdGVudAotCXNubXBfc2F2ZV9wZXJzaXN0ZW50Ci0JdXNtX3N0b3JlX3VzZXJzCi0Jc25tcF9zdG9yZQotCWF0aW1lX2RpZmYKLQl1YXRpbWVfaGRpZmYKLQlhdGltZV9uZXdNYXJrZXIKLQlhdGltZV9zZXRNYXJrZXIKLQlhdGltZV9yZWFkeQotCXNubXBfc3RyY2F0Ci0JZnByaW50X3ZhcmlhYmxlCi0Jc3ByaW50X3JlYWxsb2Nfb2JqaWQKLQlzcHJpbnRfcmVhbGxvY19hc2NpaXN0cmluZwotCXNwcmludF9yZWFsbG9jX3ZhcmlhYmxlCi0Jc3ByaW50X3JlYWxsb2NfdmFsdWUKLQlzcHJpbnRfcmVhbGxvY19ieV90eXBlCi0Jc25tcF9yZWFsbG9jCi0gICAgICBuZXRzbm1wX2NvbmZpZwotICAgICAgbmV0c25tcF9jb25maWdfcmVtZW1iZXIKLSAgICAgIHNubXBfaGV4X3RvX2JpbmFyeQotICAgICAgc25tcHYzX29wdGlvbnMKLSAgICAgIG5ldHNubXBfZ2V0X3ZlcnNpb24KLSAgICAgIHNubXBfc2Vzc190cmFuc3BvcnQKLSAgICAgIHNubXBfc2Vzc19wb2ludGVyCi0gICAgICBzbm1wX2RlY2ltYWxfdG9fYmluYXJ5Ci0Jc25tcF9hbGFybV9yZWdpc3RlcgotCXNubXBfYWxhcm1fdW5yZWdpc3RlcgotICAgICAgZGF0ZV9uX3RpbWUKLQlzbm1wX2Rpc2FibGVfbG9nCi0Jc25tcF9lbmFibGVfc3lzbG9nX2lkZW50Ci0JbmV0c25tcF9zZXNzX2xvZ19lcnJvcgotCXNubXBfYWRkCi0JaGFuZGxlX2xvbmdfb3B0Ci0JbmV0c25tcF90cmFuc3BvcnRfZnJlZQotCW5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnQKLQluZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X29pZAotCW5ldHNubXBfdGRvbWFpbl9zdXBwb3J0Ci0JbmV0c25tcFVEUERvbWFpbgotCW5ldHNubXBfc25tcFRDUERvbWFpbgotCW5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotCW5ldHNubXBfYWRkX2xpc3RfZGF0YQotCW5ldHNubXBfZ2V0X2xpc3RfZGF0YQotCW5ldHNubXBfZnJlZV9saXN0X2RhdGEKLQluZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YQotCW5ldHNubXBfb2lkX3N0YXNoX2FkZF9kYXRhCi0JbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGEKLQluZXRzbm1wX29pZF9maW5kX3ByZWZpeAotCW5ldHNubXBfY29udGFpbmVyX2luaXRfbGlzdAotCW5ldHNubXBfY29udGFpbmVyX251bGxfaW5pdAotCW5ldHNubXBfY29udGFpbmVyX3NzbGxfaW5pdAotCW5ldHNubXBfc3RyZHVwX2FuZF9udWxsCi0JYnVpbGRfb2lkCi0JYnVpbGRfb2lkX25vYWxsb2MKLQlwYXJzZV9vbmVfb2lkX2luZGV4Ci0JcGFyc2Vfb2lkX2luZGV4ZXMKLQljb3VudF92YXJiaW5kcwotCWNvdW50X3ZhcmJpbmRzX29mX3R5cGUKLQlzZV9maW5kX2xhYmVsX2luX3NsaXN0Ci0Jc2VfZmluZF92YWx1ZV9pbl9zbGlzdAotCXNlX2FkZF9wYWlyX3RvX3NsaXN0Ci0Jc25tcF9wYXJzZV9hcmdzCi0Jc25tcF9wYXJzZV9hcmdzX2Rlc2NyaXB0aW9ucwotCXNubXBfcGFyc2VfYXJnc191c2FnZQotCW5ldHNubXBfY2FsbGJhY2tfb3BlbgotCW5ldHNubXBfdWRwX2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIKLQluZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eQotCW5ldHNubXBfdWRwX2dldFNlY05hbWUKLQlmaW5kX3NlY19tb2QKLQlzdHJsY2F0Ci0Jc3RybGNweQotCWdldG9wdAotCW9wdGFyZyAgICAgICAgICAgICAgICAgIERBVEEKLQlvcHRlcnIgICAgICAgICAgICAgICAgICBEQVRBCi0Jb3B0aW5kICAgICAgICAgICAgICAgICAgREFUQQotCW9wdG9wdCAgICAgICAgICAgICAgICAgIERBVEEKLQlvcHRyZXNldCAgICAgICAgICAgICAgICBEQVRBCi0JdXNtTm9BdXRoUHJvdG9jb2wgICAgICAgREFUQQotCXVzbUhNQUNNRDVBdXRoUHJvdG9jb2wgIERBVEEKLQl1c21ITUFDU0hBMUF1dGhQcm90b2NvbCBEQVRBCi0JdXNtTm9Qcml2UHJvdG9jb2wgICAgICAgREFUQQotCXVzbURFU1ByaXZQcm90b2NvbCAgICAgIERBVEEKLQl1c21BRVNQcml2UHJvdG9jb2wgICAgICBEQVRBCi0Jc25wcmludF9iaXRzdHJpbmcKLQlzbnByaW50X3ZhbHVlCi0Jc25wcmludF9vYmppZAotCXNucHJpbnRfdmFyaWFibGUKLQlzbm1wX3N5bmNoX3Jlc2V0Ci0Jc25tcF9sb2dfb3B0aW9ucwotCXNubXBfbG9nX3N5c2xvZ25hbWUKLQluZXRzbm1wX2NsZWFyX2NhbGxiYWNrX2xpc3QKLQluZXRzbm1wX2NsZWFyX3Rkb21haW5fbGlzdAotCWNsZWFyX3NlY19tb2QKLQljbGVhcl9zbm1wX2VudW0KLQljbGVhcl9jYWxsYmFjawotCWNsZWFyX3VzZXJfbGlzdAotCW5ldHNubXBfZHNfZ2V0X3ZvaWQKLQluZXRzbm1wX2RzX3NldF92b2lkCi0JbmV0c25tcF9kc19zaHV0ZG93bgotCW5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWQKLQluZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWUKLQltb2R1bGVfbmFtZQotCU1pYiAgICAgICAgICAgICAgICAgICAgIERBVEEKLQl0cmVlX2hlYWQgICAgICAgICAgICAgICBEQVRBCi0Jc25tcF9lcnJubyAgICAgICAgICAgICAgREFUQQotCW5ldHNubXBfZGFlbW9uaXplCi0Jc25tcF9sb2dfb3B0aW9uc191c2FnZQotCW5ldHNubXBfY29udGFpbmVyX2ZyZWVfbGlzdAotCW5ldHNubXBfb2lkX3N0YXNoX2dldG5leHRfbm9kZQotCW5ldHNubXBfb2lkX3N0YXNoX2ZyZWUKLQluZXRzbm1wX2dldF9saXN0X25vZGUKLQluZXRzbm1wX3JlbW92ZV9saXN0X25vZGUKLQluZXRzbm1wX3JlbW92ZV9sb2doYW5kbGVyCi0JbmV0c25tcF9yZWdpc3Rlcl9sb2doYW5kbGVyCi0JZ2V0X2xvZ2hfaGVhZAotCWRiZ190b2tlbnMKLQlkZWJ1Z19udW1fdG9rZW5zCi0JY3JlYXRlX3dpbnBpcGVfdHJhbnNwb3J0Ci0JZ2V0X3RlbXBfZmlsZV9wYXR0ZXJuCi0JbmV0c25tcF9zdHJkdXAKLQluZXRzbm1wX2NhbGxvYwotCW5ldHNubXBfbWFsbG9jCi0JbmV0c25tcF9yZWFsbG9jCi0JbmV0c25tcF9mcmVlCi0JbmV0c25tcF91ZHA2X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIKLQlpbml0X3VzbV9jb25mCi0Jc3RydG9rX3IKLSAgICAgICAgc25tcF9yZXNldF92YXJfYnVmZmVycwotICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9hZGRfaW5kZXgKLSAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZAotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUKLSAgICAgICAgbmV0c25tcF9vaWRfY29tcGFyZV9sbAotICAgICAgICBuZXRzbm1wX25jb21wYXJlX25ldHNubXBfaW5kZXgKLSAgICAgICAgbmV0c25tcF9jb21wYXJlX25ldHNubXBfaW5kZXgKLSAgICAgICAgZmluZF92YXJiaW5kX2luX2xpc3QKLSAgICAgICAgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMKLSAgICAgICAgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvCi0gICAgICAgIG5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0Ci0gICAgICAgIHNraXBfdG9rZW4KLSAgICAgICAgcGFyc2Vfc2VjTGV2ZWxfY29uZgotICAgICAgICBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24KLSAgICAgICAgbmV0c25tcF9xdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uCi0gICAgICAgIG5ldHNubXBfZHNfcGFyc2VfYm9vbGVhbgotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0Ci0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF9kb21haW4KLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9zZXJ2aWNlX2hhbmRsZXJzCi0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X29wZW5fc2VydmVyCi0gICAgICAgIG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbAotICAgICAgICBzbm1wX2FkZF9mdWxsCi0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X29wZW5fY2xpZW50Ci0gICAgICAgIHNubXBfb2lkc3VidHJlZV9jb21wYXJlCi0gICAgICAgIHNubXBfZGlzYWJsZV9zeXNsb2cKLSAgICAgICAgc25tcF9zdGRlcnJsb2dfc3RhdHVzCi0gICAgICAgIHNhX2ZpbmRfc3BlY2lmaWMKLSAgICAgICAgY2hlY2tfcm93c3RhdHVzX3RyYW5zaXRpb24KLSAgICAgICAgY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uCi0gICAgICAgIG5ldHNubXBfdmlld19nZXQKLSAgICAgICAgbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfdmFsdWUKLSAgICAgICAgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplCi0gICAgICAgIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUKLSAgICAgICAgcmVhZF9jb25maWdfc2F2ZV9vYmppZAotICAgICAgICBwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9taWJjaGlsZG9pZAotICAgICAgICBuZXRzbm1wX3F1ZXJ5X3dhbGsKLSAgICAgICAgbmV0c25tcF9xdWVyeV9nZXRuZXh0Ci0gICAgICAgIG5ldHNubXBfcXVlcnlfZ2V0Ci0JbmV0c25tcF9ta3RlbXAKLSAgICAgICAgZGVidWdtc2dfc3Vib2lkCi07SVB2NiAgICAgICAgbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5Ci07SVB2NiAgICAgICAgbmV0c25tcF91ZHA2X2dldFNlY05hbWUKLTtJUHY2ICAgICAgICBuZXRzbm1wX1RDUElQdjZEb21haW4KLTtJUHY2ICAgICAgICBuZXRzbm1wX1VEUElQdjZEb21haW4KLQpkaWZmIC0tZ2l0IGEvd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwIGIvd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwCmluZGV4IGVjYjlkNWUuLjEyYzA0MTQgMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcAorKysgYi93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AKQEAgLTEwNCw3ICsxMDQsNyBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcY211X2NvbXBhdC5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcY2xvc2VkaXIuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTEzNiwxMCArMTM2LDE4IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxmZF9ldmVudF9tYW5hZ2VyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxnZXRvcHQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXGdldHRpbWVvZmRheS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcaW5ldF9udG9wLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xNTYsNiArMTY0LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxsYXJnZV9mZF9zZXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXGxjZF90aW1lLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xNzYsNiArMTg4LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxvcGVuZGlyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxwYXJzZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTg0LDYgKzIwMCwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJccmVhZGRpci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcc2NhcGkuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTIzMiw2ICsyNTIsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfc2VydmljZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF90cmFuc3BvcnQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTI0MCwyNyArMjY0LDUxIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3NlcnZpY2UuYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcEFsaWFzRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wQ2FsbGJhY2tEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcENhbGxiYWNrRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVENQRG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBJUHY0QmFzZURvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFRDUElQdjZEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcElQdjZCYXNlRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVURQRG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBTb2NrZXRCYXNlRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVURQSVB2NkRvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQQmFzZURvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BJUHY2RG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBCYXNlRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUElQdjRCYXNlRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBJUHY2RG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0yODAsNiArMzI4LDE0IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b2tfci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG91bGwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHN5c3RlbS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjg4LDEwICszNDQsNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG9rX3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHVjZF9jb21wYXQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTMwMiwxMCArMzU0LDYgQEAKIA0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnBpcGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXGZkX2V2ZW50X21hbmFnZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQogDQpAQCAtMzI0LDEwICszNzIsNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcY211X2NvbXBhdC5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGNvbnRhaW5lci5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTM0MCw2ICszODQsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGZkX2V2ZW50X21hbmFnZXIuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxnZXRvcHQuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0zNTIsNiArNDAwLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxsYXJnZV9mZF9zZXQuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxsY2RfdGltZS5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTQ0NCw2ICs0OTYsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHN0cnRva19yLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc3lzdGVtLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtNDUyLDEwICs1MDgsNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc3RydG9rX3IuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVx1Y2RfY29tcGF0LmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtNDYzLDUgKzUxNSw5IEBACiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVx2YWNtLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxsaWJzbm1wLmRlZg0KKyMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgVGFyZ2V0DQogIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYnVjZG1pYnMvbGlidWNkbWlicy5kZWYgYi93aW4zMi9saWJ1Y2RtaWJzL2xpYnVjZG1pYnMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjQ3M2Q5Li4wMDAwMDAwCi0tLSBhL3dpbjMyL2xpYnVjZG1pYnMvbGlidWNkbWlicy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi07ICAgICAgIEAoIylsaWJ1Y2RtaWJzLmRlZiAgICAxLjAgMTAvMjYvOTcgKGdtYXJ6b3RAYmF5bmV0d29ya3MuY29tKQotCi1ERVNDUklQVElPTiAgICAgJ1VDRCBTTk1QIE1JQlMgTGlicmFyeScKLTtDT0RFCi0gICAgICAgICAgICBTSEFSRUQgUkVBRCBFWEVDVVRFCi07REFUQSAgICAgICAgICAgIFNIQVJFRCBSRUFEIFdSSVRFCi1FWFBPUlRTCi0Jc2VuZF9lYXN5X3RyYXAKLQlpbml0X21hc3Rlcl9hZ2VudAotCWluaXRfbWliX21vZHVsZXMKLQlpbml0X2FnZW50Ci0JYXJndnJlc3RhcnRuYW1lCi0JYXJndnJlc3RhcnQKLQlhcmd2cmVzdGFydHAKLQl1cGRhdGVfY29uZmlnCi0JZ2V0X3RhcmdldF9zZXNzaW9ucwotCmRpZmYgLS1naXQgYS93aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmggYi93aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmgKaW5kZXggM2JmZGY2YS4uOWNiNzUwYyAxMDA2NDQKLS0tIGEvd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oCisrKyBiL3dpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgIm1pYmdyb3VwL1Jtb24uaCIKICNlbmRpZgogCi0jaWZkZWYgVVNJTkdfRElTTUFOX0VWRU5UX01JQl9NT0RVTEUKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQtbWliLmgiCisjaWZkZWYgVVNJTkdfRElTTUFOX0VWRU5UX01PRFVMRQorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC5oIgogI2VuZGlmCiAKICNpZmRlZiBVU0lOR19TTVVYX01PRFVMRQpAQCAtODgsOCArODgsOSBAQAogI2luY2x1ZGUgIm1pYmdyb3VwL3NubXB2My91c21TdGF0cy5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL3NubXB2My91c21Vc2VyLmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaCIKICNpbmNsdWRlICJtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL3RhcmdldC90YXJnZXQuaCIKQEAgLTk5LDYgKzEwMCw3IEBACiAjaW5jbHVkZSAibWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL2FnZW50L25zQ2FjaGUuaCIKICNpbmNsdWRlICJtaWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuaCIKKyNpbmNsdWRlICJtaWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmgiCiAKICNpZmRlZiBVU0lOR19IT1NUX01PRFVMRQpAQCAtMTI1LDE1ICsxMjcsMjMgQEAKICNpbmNsdWRlICJtaWJncm91cC9SbW9uL2V2ZW50LmgiCiAjZW5kaWYKIAotI2lmZGVmIFVTSU5HX0RJU01BTl9FVkVOVF9NSUJfTU9EVUxFCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCIKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCIKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuaCIKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oIgorI2lmZGVmIFVTSU5HX0RJU01BTl9FVkVOVF9NT0RVTEUKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVNjYWxhcnMuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgiCiAjZW5kaWYKIAogI2lmZGVmIFVTSU5HX1NNVVhfTU9EVUxFCmRpZmYgLS1naXQgYS93aW4zMi9taWJfbW9kdWxlX2luaXRzLmggYi93aW4zMi9taWJfbW9kdWxlX2luaXRzLmgKaW5kZXggZmQwYTdiMi4uZjc4ZDg5MyAxMDA2NDQKLS0tIGEvd2luMzIvbWliX21vZHVsZV9pbml0cy5oCisrKyBiL3dpbjMyL21pYl9tb2R1bGVfaW5pdHMuaApAQCAtMjksNiArMjksOSBAQAogI2lmbmRlZiBfTVNDX1ZFUgogICBpZiAoc2hvdWxkX2luaXQoImRpc2siKSkgaW5pdF9kaXNrKCk7CiAjZW5kaWYKKyNpZmRlZiBVU0lOR19VQ0RfU05NUF9ETE1PRF9NT0RVTEUKKyAgaWYgKHNob3VsZF9pbml0KCJkbG1vZCIpKSBpbml0X2RsbW9kKCk7CisjZW5kaWYKICAgaWYgKHNob3VsZF9pbml0KCJsb2FkYXZlIikpIGluaXRfbG9hZGF2ZSgpOwogICBpZiAoc2hvdWxkX2luaXQoImV4dGVuc2libGUiKSkgaW5pdF9leHRlbnNpYmxlKCk7CiAgIGlmIChzaG91bGRfaW5pdCgiZXh0ZW5kIikpIGluaXRfZXh0ZW5kKCk7CkBAIC03OCwxNyArODEsMjIgQEAKIAogICBpZiAoc2hvdWxkX2luaXQoIm92ZXJyaWRlIikpIGluaXRfb3ZlcnJpZGUoKTsKIAotI2lmZGVmIFVTSU5HX0RJU01BTl9FVkVOVF9NSUJfTU9EVUxFCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQ0FMTEJBQ0tfRE9NQUlOCisjaWZkZWYgVVNJTkdfRElTTUFOX0VWRU5UX01PRFVMRQorICBpZiAoc2hvdWxkX2luaXQoIm10ZVRyaWdnZXIiKSkgaW5pdF9tdGVUcmlnZ2VyKCk7CisgIGlmIChzaG91bGRfaW5pdCgibXRlVHJpZ2dlckNvbmYiKSkgaW5pdF9tdGVUcmlnZ2VyQ29uZigpOwogICBpZiAoc2hvdWxkX2luaXQoIm10ZVRyaWdnZXJUYWJsZSIpKSBpbml0X210ZVRyaWdnZXJUYWJsZSgpOwotI2VuZGlmCiAgIGlmIChzaG91bGRfaW5pdCgibXRlVHJpZ2dlckRlbHRhVGFibGUiKSkgaW5pdF9tdGVUcmlnZ2VyRGVsdGFUYWJsZSgpOwogICBpZiAoc2hvdWxkX2luaXQoIm10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSIpKSBpbml0X210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSgpOwogICBpZiAoc2hvdWxkX2luaXQoIm10ZVRyaWdnZXJCb29sZWFuVGFibGUiKSkgaW5pdF9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlKCk7CiAgIGlmIChzaG91bGRfaW5pdCgibXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIikpIGluaXRfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlKCk7CisgIGlmIChzaG91bGRfaW5pdCgibXRlT2JqZWN0cyIpKSBpbml0X210ZU9iamVjdHMoKTsKKyAgaWYgKHNob3VsZF9pbml0KCJtdGVPYmplY3RzQ29uZiIpKSBpbml0X210ZU9iamVjdHNDb25mKCk7CiAgIGlmIChzaG91bGRfaW5pdCgibXRlT2JqZWN0c1RhYmxlIikpIGluaXRfbXRlT2JqZWN0c1RhYmxlKCk7CisgIGlmIChzaG91bGRfaW5pdCgibXRlRXZlbnQiKSkgaW5pdF9tdGVFdmVudCgpOworICBpZiAoc2hvdWxkX2luaXQoIm10ZUV2ZW50Q29uZiIpKSBpbml0X210ZUV2ZW50Q29uZigpOwogICBpZiAoc2hvdWxkX2luaXQoIm10ZUV2ZW50VGFibGUiKSkgaW5pdF9tdGVFdmVudFRhYmxlKCk7CiAgIGlmIChzaG91bGRfaW5pdCgibXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSIpKSBpbml0X210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUoKTsKKyAgaWYgKHNob3VsZF9pbml0KCJtdGVFdmVudFNldFRhYmxlIikpIGluaXRfbXRlRXZlbnRTZXRUYWJsZSgpOwogI2VuZGlmCiAKICAgaWYgKHNob3VsZF9pbml0KCJ2YWNtX2NvbnRleHQiKSkgaW5pdF92YWNtX2NvbnRleHQoKTsKZGlmZiAtLWdpdCBhL3dpbjMyL21pYl9tb2R1bGVfc2h1dGRvd24uaCBiL3dpbjMyL21pYl9tb2R1bGVfc2h1dGRvd24uaAppbmRleCAwNDMyMjY1Li5jYWVkZjYwIDEwMDY0NAotLS0gYS93aW4zMi9taWJfbW9kdWxlX3NodXRkb3duLmgKKysrIGIvd2luMzIvbWliX21vZHVsZV9zaHV0ZG93bi5oCkBAIC0xLDYgKzEsMTUgQEAKIC8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovCiAgIGlmIChzaG91bGRfaW5pdCgicHJveHkiKSkgc2h1dGRvd25fcHJveHkoKTsKKyAgaWYgKHNob3VsZF9pbml0KCJzbm1wTm90aWZ5RmlsdGVyVGFibGUiKSkgc2h1dGRvd25fc25tcE5vdGlmeUZpbHRlclRhYmxlKCk7CiAgCiAjaWZkZWYgVVNJTkdfVUNEX1NOTVBfTU9EVUxFCiAgIGlmIChzaG91bGRfaW5pdCgicGFzc19wZXJzaXN0IikpIHNodXRkb3duX3Bhc3NfcGVyc2lzdCgpOwogI2VuZGlmCisKKyNpZmRlZiBVU0lOR19VQ0RfU05NUF9ETE1PRF9NT0RVTEUKKyAgaWYgKHNob3VsZF9pbml0KCJkbG1vZCIpKSBzaHV0ZG93bl9kbG1vZCgpOworI2VuZGlmCisKKyNpZmRlZiBVU0lOR19XSU5FWFRETExfTU9EVUxFCisgICBpZiAoc2hvdWxkX2luaXQoIndpbkV4dERMTCIpKSBzaHV0ZG93bl93aW5FeHRETEwoKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCBiL3dpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKaW5kZXggOTU2NjJhZC4uNDk3OGRjOCAxMDA2NDQKLS0tIGEvd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorKysgYi93aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNSwxMSArMTUsMTIgQEAKIC8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgbm90aWZpY2F0aW9uIG1vZHVsZSBmaWxlcy4gICovCiAjZGVmaW5lIFVTSU5HX05PVElGSUNBVElPTl9NT0RVTEUgMQogIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01PRFVMRSAxCisgCiAvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIG5vdGlmaWNhdGlvbi1sb2ctbWliIG1vZHVsZSBmaWxlcy4gKi8KICNpZmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESwogI2RlZmluZSBVU0lOR19OT1RJRklDQVRJT05fTE9HX01JQl9OT1RJRklDQVRJT05fTE9HX01PRFVMRSAxCi0jZWxzZQotLyogI3VuZGVmIFVTSU5HX05PVElGSUNBVElPTl9MT0dfTUlCX05PVElGSUNBVElPTl9MT0dfTU9EVUxFICovCiAjZW5kaWYKIAogLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSB0YXJnZXQgbW9kdWxlIGZpbGVzLiAgKi8KQEAgLTI0NSwzMyArMjQ2LDU3IEBACiAjZW5kaWYgLyogVVNJTkdfUk1PTl9NT0RVTEUgKi8KIAogCi0jaWZkZWYgVVNJTkdfRElTTUFOX0VWRU5UX01JQl9NT0RVTEUgCisjaWZkZWYgVVNJTkdfRElTTUFOX0VWRU5UX01PRFVMRSAKICAKLS8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL210ZVRyaWdnZXJUYWJsZSBtb2R1bGUgZmlsZXMuICAqLwotI2RlZmluZSBVU0lOR19ESVNNQU5fTVRFVFJJR0dFUlRBQkxFX01PRFVMRSAxCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVTY2FsYXJzIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVTQ0FMQVJTX01PRFVMRSAxCiAgCi0vKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZSBtb2R1bGUgZmlsZXMuICAqLwotI2RlZmluZSBVU0lOR19ESVNNQU5fTVRFVFJJR0dFUkRFTFRBVEFCTEVfTU9EVUxFIDEKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URVRSSUdHRVJfTU9EVUxFIDEKICAKLS8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSBtb2R1bGUgZmlsZXMuICAqLwotI2RlZmluZSBVU0lOR19ESVNNQU5fTVRFVFJJR0dFUkVYSVNURU5DRVRBQkxFX01PRFVMRSAxCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URVRSSUdHRVJUQUJMRV9NT0RVTEUgMQogIAotLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSBtb2R1bGUgZmlsZXMuICAqLwotI2RlZmluZSBVU0lOR19ESVNNQU5fTVRFVFJJR0dFUkJPT0xFQU5UQUJMRV9NT0RVTEUgMQorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URVRSSUdHRVJERUxUQVRBQkxFX01PRFVMRSAxCiAgCi0vKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KLSNkZWZpbmUgVVNJTkdfRElTTUFOX01URVRSSUdHRVJUSFJFU0hPTERUQUJMRV9NT0RVTEUgMQorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVUUklHR0VSRVhJU1RFTkNFVEFCTEVfTU9EVUxFIDEKICAKLS8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL210ZU9iamVjdHNUYWJsZSBtb2R1bGUgZmlsZXMuICAqLwotI2RlZmluZSBVU0lOR19ESVNNQU5fTVRFT0JKRUNUU1RBQkxFX01PRFVMRSAxCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVUUklHR0VSQk9PTEVBTlRBQkxFX01PRFVMRSAxCiAgCi0vKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9tdGVFdmVudFRhYmxlIG1vZHVsZSBmaWxlcy4gICovCi0jZGVmaW5lIFVTSU5HX0RJU01BTl9NVEVFVkVOVFRBQkxFX01PRFVMRSAxCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URVRSSUdHRVJUSFJFU0hPTERUQUJMRV9NT0RVTEUgMQogIAotLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSBtb2R1bGUgZmlsZXMuICAqLwotI2RlZmluZSBVU0lOR19ESVNNQU5fTVRFRVZFTlROT1RJRklDQVRJT05UQUJMRV9NT0RVTEUgMQorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URVRSSUdHRVJDT05GX01PRFVMRSAxCiAgCi0jZW5kaWYgLyogVVNJTkdfRElTTUFOX0VWRU5UX01JQl9NT0RVTEUgKi8KKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZUV2ZW50IG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVFVkVOVF9NT0RVTEUgMQorIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFRVZFTlRUQUJMRV9NT0RVTEUgMQorIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFRVZFTlRTRVRUQUJMRV9NT0RVTEUgMQorIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFRVZFTlROT1RJRklDQVRJT05UQUJMRV9NT0RVTEUgMQorIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVFVkVOVENPTkZfTU9EVUxFIDEKKyAKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZU9iamVjdHMgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URU9CSkVDVFNfTU9EVUxFIDEKKyAKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFT0JKRUNUU1RBQkxFX01PRFVMRSAxCisgCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZiBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFT0JKRUNUU0NPTkZfTU9EVUxFIDEKKyAKKyNlbmRpZiAvKiBVU0lOR19ESVNNQU5fRVZFTlRfTU9EVUxFICovCiAKICNpZmRlZiBVU0lOR19TTVVYX01PRFVMRQogIApkaWZmIC0tZ2l0IGEvd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggYi93aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAppbmRleCBhNjgyNmIzLi4xNjA4NTYzIDEwMDY0NAotLS0gYS93aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorKysgYi93aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaApAQCAtNSwzMSArNSw0NSBAQAogI2RlZmluZSBORVRfU05NUF9DT05GSUdfSAogCiAvKiBfTVNDX1ZFUiB2YWx1ZXMKLSAgIDE2MDAgPSAxMC4wICgyMDEwKQotICAgMTUwMCA9ICA5LjAgKDIwMDgpCi0gICAxNDAwID0gIDguMCAoMjAwNSkKLSAgIDEzMTAgPSAgNy4xICgyMDAzKQotICAgMTMwMCA9ICA3LjAgKDIwMDIpCi0gICAxMjAwID0gIDYuMAorICAgMTgwMCA9IE1TVkMrKyAxMi4wIChWaXN1YWwgU3R1ZGlvIDIwMTMpCisgICAxNzAwID0gTVNWQysrIDExLjAgKFZpc3VhbCBTdHVkaW8gMjAxMikKKyAgIDE2MDAgPSBNU1ZDKysgMTAuMCAoVmlzdWFsIFN0dWRpbyAyMDEwKQorICAgMTUwMCA9IE1TVkMrKyAgOS4wIChWaXN1YWwgU3R1ZGlvIDIwMDgpCisgICAxNDAwID0gTVNWQysrICA4LjAgKFZpc3VhbCBTdHVkaW8gMjAwNSkKKyAgIDEzMTAgPSBNU1ZDKysgIDcuMSAoVmlzdWFsIFN0dWRpbyAyMDAzKQorICAgMTMwMCA9IE1TVkMrKyAgNy4wIChWaXN1YWwgU3R1ZGlvIDIwMDIpCisgICAxMjAwID0gTVNWQysrICA2LjAKICovCiAKKyNpZmRlZiBfTVNDX1ZFUgorLyogRGlzYWJsZSB3YXJuaW5nIDQwMTg6IHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaC4gKi8KKyNwcmFnbWEgd2FybmluZyAoZGlzYWJsZTogNDAxOCkKKyNlbmRpZgorCisvKiBBdXRvbWF0aWNhbGx5IHNldCBieSBXaW5kb3dzIHBlcmwgQ29uZmlndXJlIHNjcmlwdC4KKyAqIFdoZW4gY29tcGlsaW5nIHdpdGggdGhlIE1TVkMgd29ya3NwYWNlLCB0aGlzIG11c3QgYmUgc2V0IG1hbnVhbGx5LgorICogU2VlIHRoZSBQQUNLQUdFX1ZFUlNJT04gdmFyaWFibGUgaW4gVW5peCAvY29uZmlndXJlIHNjcmlwdAorKi8KKyNpZm5kZWYgUEFDS0FHRV9WRVJTSU9OCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAidW5rbm93biIKKyNlbmRpZgorCiAvKiBEZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgaWYgeW91IGhhdmU6CiAgKiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBNU1ZDIDYuMCBhbmQgdGhlIFBsYXRmb3JtIFNESyAoUFNESykKICAqIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLk5ldCAyMDAyCiAgKiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby5OZXQgMjAwMwotICogQ3lnd2luCi0gKiBNaW5HVyAKICAqLwotLyogI3VuZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLICovCisjZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIDEKIAotLyogT25seSB1c2UgV2luZG93cyBBUEkgZnVuY3Rpb25zIGF2YWlsYWJsZSBvbiBXaW5kb3dzIDIwMDAgU1A0IG9yIGxhdGVyLgotICogV2UgbmVlZCBhdCBsZWFzdCBTUDEgZm9yIHNvbWUgSVB2NiBkZWZpbmVzIGluIHdzMmlwZGVmLmguCi0gKiBPbmx5IGRlZmluZSBfV0lOMzJfV0lOTlQgd2hlbiBub3QgYmVpbmcgY29tcGlsZWQgd2l0aCBNU1ZDIDYgd2l0aG91dCBQU0RLCi0gKiBiZWNhdXNlIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBNU1ZDIDYgaGVhZGVyIDx3aW5zb2NrLmg+IHRoYXQgY2F1c2VzCi0gKiBpbmNsdXNpb24gb2YgPHdpbnNvY2syLmg+LgorLyogRGVmaW5lIE5FVFNOTVBfRU5BQkxFX0lQVjYgdG8gZW5hYmxlIElQdjYuICBJUHY2IGlzIG9ubHkgYXZhaWxhYmxlIG9uCisgKiBXaW5kb3dzIFhQIGFuZCBoaWdoZXIuICAqLworLyogI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KKworLyogT25seSB1c2UgV2luZG93cyBBUEkgZnVuY3Rpb25zIGF2YWlsYWJsZSBvbiBXaW5kb3dzIDIwMDAgU1A0IG9yIGxhdGVyLiAgCisgKiBXZSBuZWVkIGF0IGxlYXN0IFNQMSBmb3Igc29tZSBJUHY2IGRlZmluZXMgaW4gd3MyaXBkZWYuaAogICovCiAjaWZuZGVmIF9XSU4zMl9XSU5OVAotI2RlZmluZSBfV0lOMzJfV0lOTlQgMHg1MDEgLypfV0lOMzJfV0lOTlRfV0lOMksqLworI2RlZmluZSBfV0lOMzJfV0lOTlQgMHg2MDAgLypfV0lOMzJfV0lOTlRfV0lONiovCiAjZWxzZQogI2lmIF9XSU4zMl9XSU5OVCA8IDB4NTAxCiAjZXJyb3IgX1dJTjMyX1dJTk5UIGlzIHRvbyBsb3cgLSBpdCBzaG91bGQgYmUgc2V0IHRvIGF0IGxlYXN0IDB4NTAxLgpAQCAtMjI3LDE5ICsyNDEsMTcgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNtL3BhZ2UuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9BU01fUEFHRV9IICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmNvcHknIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfQkNPUFkgKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjZ2V0bmV4dCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9DR0VUTkVYVCAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNydGRiZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9DUlREQkdfSCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZWN0Lmg+IGhlYWRlciBmaWxlLiAqLwotLyogI3VuZGVmIEhBVkVfRElSRUNUX0ggKi8KKyNkZWZpbmUgSEFWRV9ESVJFQ1RfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2hvd24nIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfQ0hPV04gKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLiAgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAgICovCiAvKiAjdW5kZWYgSEFWRV9ESVJFTlRfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwpAQCAtMzE0LDEyICszMjYsMTQgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWZfbmFtZWluZGV4JyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX0lGX05BTUVJTkRFWCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluZGV4JyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0lOREVYICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW5ldC9taWIyLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfSU5FVF9NSUIyX0ggKi8KIAorI2lmZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlwaGxwYXBpLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lQSExQQVBJX0gKKyNlbmRpZgorCiAvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50MzJfdCcuICovCiAjZGVmaW5lIEhBVkVfSU5UMzJfVCAxCiAKQEAgLTM2NSw5ICszNzksNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjcnlwdG8nIGxpYnJhcnkgKC1sY3J5cHRvKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQkNSWVBUTyAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsJyBsaWJyYXJ5ICgtbGRsKS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQkRMICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZWZlbmNlJyBsaWJyYXJ5ICgtbGVmZW5jZSkuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJFRkVOQ0UgKi8KIApAQCAtMzc3LDkgKzM4OCw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtzdGF0JyBsaWJyYXJ5ICgtbGtzdGF0KS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQktTVEFUICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtJyBsaWJyYXJ5ICgtbGt2bSkuICovCi0vKiAjdW5kZWYgSEFWRV9MSUJLVk0gKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtJyBsaWJyYXJ5ICgtbG0pLiAqLwogLyogI3VuZGVmIEhBVkVfTElCTSAqLwogCkBAIC00MDQsOSArNDEyLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2Vuc29ycycgbGlicmFyeSAoLWxzZW5zb3JzKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQlNFTlNPUlMgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB6JyBsaWJyYXJ5ICgtbHopLiAqLwotLyogI3VuZGVmIEhBVkVfTElCWiAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCiAKQEAgLTQxOSw5ICs0MjQsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2FsdGltZV9yJyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0xPQ0FMVElNRV9SICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbHJhbmQ0OCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9MUkFORDQ4ICovCiAKQEAgLTQzNywxMiArNDM5LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX01BTExPQ19IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1jcHknIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTUNQWSAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtbW92ZScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUVNTU9WRSAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKIApAQCAtNTEyLDYgKzUwOCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaXBfaWNtcC5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX05FVElORVRfSVBfSUNNUF9IICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pY21wNi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX05FVElORVRfSUNNUDZfSCAqLworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaXBfdmFyLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSCAqLwogCkBAIC02ODMsOSArNjgyLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RhdHZmcycgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9TVEFUVkZTICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkYXJnLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NUREFSR19IIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCiAjaWZkZWYgX19NSU5HVzMyX18KICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCkBAIC03MDAsOSArNjk2LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZXN0cicgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9TVFJDQVNFU1RSICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2hyJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TVFJDSFIgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmR1cCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU1RSRFVQIDEKIApAQCAtODQ2LDYgKzgzOSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfU1lTX1RJTUVfSCAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVElNRUJfSCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKIApAQCAtOTM5LDYgKzkzNSwxNSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1dJTlNPQ0tfSCAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV1MyVENQSVBfSCAxCisKKy8qIFNldCBpZiBJUF9QS1RJTkZPIGlzIHVzYWJsZSAqLworI2RlZmluZSBIQVZFX0lQX1BLVElORk8gMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHh0aS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1hUSV9IICovCiAKQEAgLTk0NiwxMyArOTUxLDE3IEBACiAvKiAjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQgKi8KIAogLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBQQUNLQUdFX05BTUUKICNkZWZpbmUgUEFDS0FHRV9OQU1FICJOZXQtU05NUCIKKyNlbmRpZgogCiAvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCiAvKiAjdW5kZWYgUEFDS0FHRV9TVFJJTkcgKi8KIAogLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBQQUNLQUdFX1RBUk5BTUUKICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJuZXQtc25tcCIKKyNlbmRpZgogCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwogLyogI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTiAqLwpAQCAtOTY2LDYgKzk3NSw5IEBACiAvKiBUaGUgc2l6ZSBvZiBhIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfTE9ORyA0CiAKKy8qIFRoZSBzaXplIG9mIGEgYGludG1heF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfSU5UTUFYX1QgOAorCiAvKiBUaGUgc2l6ZSBvZiBhIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICNkZWZpbmUgU0laRU9GX1NIT1JUIDIKIApAQCAtOTgxLDcgKzk5Myw3IEBACiAjZGVmaW5lIFNURENfSEVBREVSUyAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLwotI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorLyogI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlCiAgICBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCBhbmQgVkFYKS4gKi8KQEAgLTEwMzAsOTYgKzEwNDIsMTAyIEBACiAvKiAjdW5kZWYgUlRFTlRSWV80XzQgKi8KIAogLyogRG9lcyBzdHJ1Y3Qgc2lnYWN0aW9uIGhhdmUgYSBzYV9zaWdhY3Rpb24gZmllbGQ/ICovCi0vKiAjdW5kZWYgU1RSVUNUX1NJR0FDVElPTl9IQVNfU0FfU0lHQUNUSU9OICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTiAqLwogCiAvKiBEb2VzIHN0cnVjdCBzb2NrYWRkciBoYXZlIGEgc2FfbGVuIGZpZWxkPyAqLwotLyogI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfTEVOICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfTEVOICovCiAKIC8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9mYW1pbHkyIGZpZWxkPyAqLwotLyogI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyICovCiAKIC8qIERvZXMgc3RydWN0IGluNl9hZGRyIGhhdmUgYSBzNl91bi5zYTZfbGFkZCBmaWVsZD8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfSU42X0FERFJfSEFTX1M2X1VOX1NBNl9MQUREUiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lONl9BRERSX1M2X1VOX1NBNl9MQUREUiAqLworCisvKiBtc2doZHIubXNnX2NvbnRyb2wgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9NU0dIRFJfTVNHX0NPTlRST0wgKi8KKworLyogbXNnaGRyLm1zZ19mbGFncyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfRkxBR1MgKi8KIAogLyogcnRlbnRyeSBzdHJ1Y3R1cmUgdGVzdHMgKi8KIC8qICN1bmRlZiBSVEVOVFJZX1JUX05FWFQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VOSVQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVVNFICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1JFRkNOVCAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9IQVNIICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VOSVQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VTRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfUkVGQ05UICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9IQVNIICovCiAKIC8qIGlmbmV0IHN0cnVjdHVyZSB0ZXN0cyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFX0lGU19WQUxVRSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfU1BFRUQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1RZUEUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lNQ0FTVFMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lRRFJPUFMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfU0VDICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9OT1BST1RPICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PTUNBU1RTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9YTkFNRSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT0JZVEVTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JQllURVMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0FERFJMSVNUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURV9JRlNfVkFMVUUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9TUEVFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1RZUEUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JTUNBU1RTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSVFEUk9QUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfU0VDICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTk9QUk9UTyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09NQ0FTVFMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9YTkFNRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09CWVRFUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lCWVRFUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0FERFJMSVNUICovCiAKIC8qIHRjcHN0YXQudGNwc19yY3ZtZW1kcm9wICovCi0vKiAjdW5kZWYgU1RSVUNUX1RDUFNUQVRfSEFTX1RDUFNfUkNWTUVNRFJPUCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1RDUFNUQVRfVENQU19SQ1ZNRU1EUk9QICovCiAKIC8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0vKiAjdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRElTQ0FSRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19ESVNDQVJEICovCiAKIC8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0vKiAjdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVCAqLwogCiAvKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotLyogI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVEJDQVNUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVEJDQVNUICovCiAKIC8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0vKiAjdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRlVMTFNPQ0sgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRlVMTFNPQ0sgKi8KIAogLyogYXJwaGQuYXRfbmV4dCAqLwotLyogI3VuZGVmIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQgKi8KIAogLyogaWZhZGRyLmlmYV9uZXh0ICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGQUREUl9IQVNfSUZBX05FWFQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRkFERFJfSUZBX05FWFQgKi8KIAogLyogaWZuZXQuaWZfbXR1ICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9NVFUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9NVFUgKi8KIAogLyogc3dkZXZ0LnN3X25ibGtzZW5hYmxlZCAqLwotLyogI3VuZGVmIFNUUlVDVF9TV0RFVlRfSEFTX1NXX05CTEtTRU5BQkxFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NXREVWVF9TV19OQkxLU0VOQUJMRUQgKi8KIAogLyogbmxpc3Qubl92YWx1ZSAqLwotLyogI3VuZGVmIFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUgKi8KIAogLyogaXBzdGF0IHN0cnVjdHVyZSB0ZXN0cyAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URk9SV0FSRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URlJBRyAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19ERUxJVkVSRUQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR0RST1BQRUQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR1RJTUVPVVQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTE9DQUxPVVQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9QUk9UTyAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1JPVVRFICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09EUk9QUEVEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09GUkFHTUVOVFMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfUkVBU1NFTUJMRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGT1JXQVJEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URlJBRyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfREVMSVZFUkVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHRFJPUFBFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR1RJTUVPVVQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0xPQ0FMT1VUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1BST1RPICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1JPVVRFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRFJPUFBFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0ZSQUdNRU5UUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfUkVBU1NFTUJMRUQgKi8KIAogLyogdmZzc3RhdC5mX2Zyc2l6ZSAqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUgKi8KIAogLyogdmZzc3RhdC5mX2ZpbGVzICovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRklMRVMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRklMRVMgKi8KIAogLyogc3RhdGZzIGlub2RlIHN0cnVjdHVyZSB0ZXN0cyovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GSUxFUyAqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRkZSRUUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZBVkFJTCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZJTEVTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkZSRUUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GQVZBSUwgKi8KIAogLyogZGVzX2tzX3N0cnVjdC53ZWFrX2tleSAqLwotLyogI3VuZGVmIFNUUlVDVF9ERVNfS1NfU1RSVUNUX0hBU19XRUFLX0tFWSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0RFU19LU19TVFJVQ1RfV0VBS19LRVkgKi8KIAogLyogaWZuZXQgbmVlZHMgdG8gaGF2ZSBfS0VSTkVMIGRlZmluZWQgKi8KIC8qICN1bmRlZiBJRk5FVF9ORUVEU19LRVJORUwgKi8KQEAgLTExMzMsOSArMTE1MSw2IEBACiAvKiBkZWZpbmUgaWYgU0lPQ0dJRkFERFIgZXhpc3RzIGluIHN5cy9pb2N0bC5oICovCiAvKiAjdW5kZWYgU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSICovCiAKLS8qIGRlZmluZSBpZiB5b3VyIGNvbXBpbGVyIChwcm9jZXNzb3IpIGRlZmluZXMgX19GVU5DVElPTl9fIGZvciB5b3UgKi8KLS8qICN1bmRlZiBIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEICovCi0KIC8qIE1pYi0yIHRyZWUgSW5mbyAqLwogLyogVGhlc2UgYXJlIHRoZSBzeXN0ZW0gaW5mb3JtYXRpb24gdmFyaWFibGVzLiAqLwogCkBAIC0xMzQwLDQ0ICsxMzU1LDYgQEAKICNkZWZpbmUgSEFWRV9TU0laRV9UCiAjZW5kaWYKIAotI2lmbmRlZiBIQVZFX1NUUkNIUgotI2lmZGVmIEhBVkVfSU5ERVgKLSMgZGVmaW5lIHN0cmNocihhLGIpIGluZGV4KGEsYikKLSMgZGVmaW5lIHN0cnJjaHIoYSxiKSByaW5kZXgoYSxiKQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0lOREVYCi0jaWZkZWYgSEFWRV9TVFJDSFIKLSMgZGVmaW5lIGluZGV4KGEsYikgc3RyY2hyKGEsYikKLSMgZGVmaW5lIHJpbmRleChhLGIpIHN0cnJjaHIoYSxiKQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX01FTUNQWQotI2lmZGVmIEhBVkVfQkNPUFkKLSMgZGVmaW5lIG1lbWNweShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbW1vdmUoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1jbXAgYmNtcAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX01FTU1PVkUKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgbWVtbW92ZSBtZW1jcHkKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBub3R1c2VkIC8qIGRvbnQgc3RlcCBvbiBvdGhlciBkZWZucyBvZiBiY29weSxiemVybywgYW5kIGJjbXAgKi8KLSNpZm5kZWYgSEFWRV9CQ09QWQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBiY29weShzLCBkLCBuKSBtZW1jcHkgKChkKSwgKHMpLCAobikpCi0jIGRlZmluZSBiemVybyhwLG4pIG1lbXNldCgocCksKDApLChuKSkKLSMgZGVmaW5lIGJjbXAgbWVtY21wCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KIC8qIElmIHlvdSBoYXZlIG9wZW5zc2wgMC45Ljcgb3IgYWJvdmUsIHlvdSBsaWtlbHkgaGF2ZSBBRVMgc3VwcG9ydC4gKi8KIC8qICN1bmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMICovCiAKQEAgLTE0ODYsNiArMTQ2MywzMiBAQAogICAgIGF2YWlsYWJsZS4gICovCiAvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4gKi8KIAorLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNCQVNFX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBBbGlhcyB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFNTSCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBEVExTL1VEUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTL1RDUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHN0ZGluL291dCB0cmFuc3BvcnQgZG9tYWluIGlzIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NURF9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgSVB2NEJhc2UgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KKyNkZWZpbmUgTkVUU05NUF9UUkFOU1BPUlRfSVBWNEJBU0VfRE9NQUlOIDEKKwogLyogZGVmaW5lIHRoaXMgaWYgdGhlIFVTTSBzZWN1cml0eSBtb2R1bGUgaXMgYXZhaWxhYmxlICovCiAjZGVmaW5lIE5FVFNOTVBfU0VDTU9EX1VTTSAxCiAKQEAgLTE1MDMsMTQgKzE1MDYsMTYgQEAKIAogLyogTm90LXRvLWJlLWNvbXBpbGVkIG1hY3JvcyBmb3IgdXNlIGJ5IGNvbmZpZ3VyZSBvbmx5ICovCiAjZGVmaW5lIGNvbmZpZ19yZXF1aXJlKHgpCisjZGVmaW5lIGNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoeCkKICNkZWZpbmUgY29uZmlnX3dhcm5pbmcoeCkKKyNkZWZpbmUgY29uZmlnX2Vycm9yKHgpCiAjZGVmaW5lIGNvbmZpZ19leGNsdWRlKHgpCiAjZGVmaW5lIGNvbmZpZ19hcmNoX3JlcXVpcmUoeCx5KQogI2RlZmluZSBjb25maWdfcGFyc2VfZG90X2NvbmYodyx4LHkseikKICNkZWZpbmUgY29uZmlnX2FkZF9taWIoeCkKICNkZWZpbmUgY29uZmlnX2JlbG9uZ3NfaW4oeCkKIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChtaW5ndzMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCisjaWYgZGVmaW5lZCAoV0lOMzIpCiAjZGVmaW5lIEVOVl9TRVBBUkFUT1IgIjsiCiAjZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnOycKICNlbHNlCkBAIC0xNTc3LDIwICsxNTgyLDUzIEBACiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKICNlbmRpZgogI2lmbmRlZiBIQVZFX1NURElOVF9ICit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKK3R5cGVkZWYgY2hhciBpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgdWludDE2X3Q7Cit0eXBlZGVmIF9faW50MTYgaW50MTZfdDsKIHR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50MzJfdDsKLXR5cGVkZWYgbG9uZyBpbnQzMl90OwordHlwZWRlZiBfX2ludDMyIGludDMyX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CiB0eXBlZGVmIF9faW50NjQgaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50bWF4X3Q7Cit0eXBlZGVmIF9faW50NjQgaW50bWF4X3Q7CiAjZWxzZSAvKiBIQVZFX1NURElOVF9IICovCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjZW5kaWYgLyogSEFWRV9TVERJTlRfSCAqLwogCisKKy8qICh1KWludHB0cl90IHNob3VsZCBvbmx5IGJlIG5lZWRlZCBmb3IgTVNWQyA2IDMyLWJpdC4gKi8KKy8qIFNESyBoYXMgaXQgZm9yIDY0LWJpdCBhbmQgbmV3ZXIgTVNWQyBzaG91bGQgYWxzbyBoYXZlIGl0IGluIHN0ZGRlZi5oLiAqLworI2lmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAorI2lmZGVmIF9NX1g2NAordHlwZWRlZiBfX2ludDY0ICAgICAgICAgIGludHB0cl90OworI2Vsc2UKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBpbnRwdHJfdDsKKyNlbmRpZgorI2RlZmluZSBfSU5UUFRSX1RfREVGSU5FRAorI2VuZGlmCisKKyNpZm5kZWYgX1VJTlRQVFJfVF9ERUZJTkVECisjaWZkZWYgX01fWDY0Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludHB0cl90OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICB1aW50cHRyX3Q7CisjZW5kaWYKKyNkZWZpbmUgX1VJTlRQVFJfVF9ERUZJTkVECisjZW5kaWYKKwogI2lmbmRlZiBfX2NwbHVzcGx1cworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0ODA0KSAvLyAnLScgOiB1bnNhZmUgdXNlIG9mIHR5cGUgJ2Jvb2wnIGluIG9wZXJhdGlvbgorI2VuZGlmCiBlbnVtIHsKICAgICBuZXRzbm1wX2NvbXBpbGVfdGltZV91aW50cHRyX3Rfc2l6ZV9jaGVjawogICAgICAgICA9IHNpemVvZihzdHJ1Y3QgbmV0c25tcF9jb21waWxlX3RpbWVfdWludHB0cl90X3NpemVfY2hlY2tfcyB7IGludDotIShzaXplb2YodWludHB0cl90KSA9PSBzaXplb2Yodm9pZCopKTsgfSkKIH07CisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKICNlbmRpZgogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAgKi8KQEAgLTE2MTcsMTcgKzE2NTUsOSBAQAogLyogRGVmaW5lIE5FVFNOTVBfVVNFX0RMTCB3aGVuIGJ1aWxkaW5nIG9yIHVzaW5nIG5ldHNubXAuRExMICovCiAvKiAjdW5kZWYgTkVUU05NUF9VU0VfRExMICovCiAKLSNpZmRlZiBORVRTTk1QX1VTRV9ETEwKLSAgI2lmZGVmIE5FVFNOTVBfRExMCi0gICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAjZGVmaW5lIE5FVFNOTVBfSU1QT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotICAgICNlbmRpZgotICAjZWxzZQotICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAgI2RlZmluZSBORVRTTk1QX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSAgICAjZW5kaWYKLSAgI2VuZGlmICAgLyogTkVUU05NUF9ETEwgKi8KLSNlbmRpZiAgICAgLyogTkVUU05NUF9VU0VfRExMICovCisjaWYgZGVmaW5lZChORVRTTk1QX0RMTCkgJiYgIWRlZmluZWQoTkVUU05NUF9VU0VfRExMKQorI2Vycm9yIE5FVFNOTVBfVVNFX0RMTCBtdXN0IGJlIGRlZmluZWQgd2hlbiBidWlsZGluZyBsaWJzbm1wIGFzIGEgRExMLgorI2VuZGlmCiAKIC8qCiAgKiBETEwgZGVjb3JhdGlvbiwgaWYgdXNlZCBhdCBhbGwsIG11c3QgYmUgY29uc2lzdGVudC4KQEAgLTE2NDAsMjUgKzE2NzAsMjIgQEAKICAqICB0aGUgTkVUU05NUF9JTVBPUlQgZGVmaW5pdGlvbnMgaGFybWxlc3MuCiAgKi8KIAotCi0gICNpZmRlZiBORVRTTk1QX1VTRV9ETEwKLSAgICAjaWZuZGVmIE5FVFNOTVBfVE9PTFNfQwotCi0gIC8qIHdyYXAgYWxsb2MgZnVuY3Rpb25zIHRvIHVzZSBETEwncyBtZW1vcnkgaGVhcCAqLwotICAvKiBUaGlzIGlzIG5vdCBkb25lIGluIHRvb2xzLmMsIHdoZXJlIHRoZXNlIHdyYXBwZXJzIGFyZSBkZWZpbmVkICovCi0KLSAgICAgICNkZWZpbmUgc3RyZHVwICAgIG5ldHNubXBfc3RyZHVwCi0gICAgICAjZGVmaW5lIGNhbGxvYyAgICBuZXRzbm1wX2NhbGxvYwotICAgICAgI2RlZmluZSBtYWxsb2MgICAgbmV0c25tcF9tYWxsb2MKLSAgICAgICNkZWZpbmUgcmVhbGxvYyAgIG5ldHNubXBfcmVhbGxvYwotICAgICAgI2RlZmluZSBmcmVlICAgICAgbmV0c25tcF9mcmVlCisjaWZkZWYgTkVUU05NUF9VU0VfRExMCisgICNpZmRlZiBORVRTTk1QX0RMTAorICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgI2RlZmluZSBORVRTTk1QX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKICAgICAjZW5kaWYKLSAgI2VuZGlmCisgICNlbHNlCisgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAjZGVmaW5lIE5FVFNOTVBfSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICNlbmRpZgorICAjZW5kaWYgICAvKiBORVRTTk1QX0RMTCAqLworI2VuZGlmICAgICAvKiBORVRTTk1QX1VTRV9ETEwgKi8KIAogLyogTVNWQyBPcGVuU1NMIGxpbmtlciBzZXR0aW5ncy4gKi8KLSNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChtaW5ndzMyKQorI2lmIGRlZmluZWQoX01TQ19WRVIpCiAjICBpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpCi0jICAgIGlmZGVmIE5FVFNOTVBfVVNFX0RMTAorIyAgICBpZmRlZiBfRExMCiAjICAgICAgaWZkZWYgX0RFQlVHCiAjICAgICAgICBwcmFnbWEgY29tbWVudChsaWIsICJsaWJlYXkzMk1EZC5saWIiKQogIyAgICAgIGVsc2UKQEAgLTE2NzIsNiArMTY5OSw3IEBACiAjICAgICAgZW5kaWYKICMgICAgZW5kaWYKICMgICAgcHJhZ21hIGNvbW1lbnQobGliLCAiZ2RpMzIubGliIikKKyMgICAgcHJhZ21hIGNvbW1lbnQobGliLCAidXNlcjMyLmxpYiIpCiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTE2ODEsNyArMTcwOSw3IEBACiAjICBkZWZpbmUgTkVUU05NUF9JTVBPUlQgZXh0ZXJuCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9OTElTVCkgJiYgZGVmaW5lZChTVFJVQ1RfTkxJU1RfSEFTX05fVkFMVUUpICYmICFkZWZpbmVkKERPTlRfVVNFX05MSVNUKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCisjaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUpICYmICFkZWZpbmVkKERPTlRfVVNFX05MSVNUKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCiAjZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9OTElTVAogI2VuZGlmCiAKQEAgLTE2ODksNyArMTcxNyw2IEBACiAjZGVmaW5lIERNQUxMT0NfRlVOQ19DSEVDSwogI2VuZGlmCiAKLS8qICN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCiAvKiAjdW5kZWYgTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWCAqLwogCiAvKiBkZWZpbmUgaWYgYWdlbnR4IHRyYW5zcG9ydCBpcyB0byB1c2UgZG9tYWluIHNvY2tldHMgb25seSAqLwpAQCAtMTcxMCwxOSArMTczNywzNSBAQAogI3VuZGVmIEhBVkVfSU5FVF9OVE9QCiAjdW5kZWYgSEFWRV9JTkVUX1BUT04KIAotI2lmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKy8qIElQdjYgdHJhbnNwb3J0cyAqLworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKICAgI2RlZmluZSBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTiAxCiAgICNkZWZpbmUgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4gMQorICAjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKICNlbHNlCiAgICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgogICAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBBbHRob3VnaCBpZl9uYW1ldG9pbmRleCgpIGlzIGF2YWlsYWJsZSBvbiBXaW5kb3dzIFZpc3RhLCBXaW5kb3dzIFNlcnZlcgorICogMjAwOCBhbmQgbGF0ZXIgaW4gaXBobHBhcGkuZGxsLCBkbyBub3QgbGluayB3aXRoIGlmX25hbWV0b2luZGV4KCkgc3VjaAorICogdGhhdCB0aGUgTmV0LVNOTVAgZXhlY3V0YWJsZSBjYW4gYmUgc3RhcnRlZCBvbiBlYXJsaWVyIFdpbmRvd3MgdmVyc2lvbnMuCisgKi8KKyN1bmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCisKICNpZm5kZWYgTklfTUFYSE9TVAogI2RlZmluZSBOSV9NQVhIT1NUCTEwMjUKICNlbmRpZgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvdWxsJyBmdW5jdGlvbi4gKi8KKyNpZiBfTVNDX1ZFUiA+PSAxODAwCisjZGVmaW5lIEhBVkVfU1RSVE9VTEwgMQorI2Vsc2UKKy8qICN1bmRlZiBIQVZFX1NUUlRPVUxMICovCisjZW5kaWYKKwogLyoKICAqIE1vZHVsZSBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHN0YXJ0cyBoZXJlLgogICoKQEAgLTE3NjYsOSArMTgwOSwxOSBAQAogI2RlZmluZSBORVRTTk1QX1RJTUVPVVRfV0FJVEZPUlNJTkdMRU9CSkVDVCA1MDAwCiAKICNpZmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESwotI2RlZmluZSBTVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9IQVNfU1NfRkFNSUxZIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkgMQogI2VuZGlmCiAKKy8qIFNpemUgcHJlZml4IHRvIHVzZSB0byBwcmludGYgYSB1aW50MzJfdCAqLworI2RlZmluZSBORVRTTk1QX1BSSTMyICIiCisKKyNpZmRlZiBfTVNDX1ZFUgorI2lmZGVmIF9XSU42NAorI2RlZmluZSBORVRTTk1QX1BSSXogIkk2NCIKKyNlbHNlCisjZGVmaW5lIE5FVFNOTVBfUFJJeiAiIgorI2VuZGlmCisjZW5kaWYKIAogI2VuZGlmIC8qIE5FVF9TTk1QX0NPTkZJR19IICovCiAKZGlmZiAtLWdpdCBhL3dpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluIGIvd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4KaW5kZXggYTY4MjZiMy4uOTY5MzczMCAxMDA2NDQKLS0tIGEvd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4KKysrIGIvd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4KQEAgLTUsMzEgKzUsNDUgQEAKICNkZWZpbmUgTkVUX1NOTVBfQ09ORklHX0gKIAogLyogX01TQ19WRVIgdmFsdWVzCi0gICAxNjAwID0gMTAuMCAoMjAxMCkKLSAgIDE1MDAgPSAgOS4wICgyMDA4KQotICAgMTQwMCA9ICA4LjAgKDIwMDUpCi0gICAxMzEwID0gIDcuMSAoMjAwMykKLSAgIDEzMDAgPSAgNy4wICgyMDAyKQotICAgMTIwMCA9ICA2LjAKKyAgIDE4MDAgPSBNU1ZDKysgMTIuMCAoVmlzdWFsIFN0dWRpbyAyMDEzKQorICAgMTcwMCA9IE1TVkMrKyAxMS4wIChWaXN1YWwgU3R1ZGlvIDIwMTIpCisgICAxNjAwID0gTVNWQysrIDEwLjAgKFZpc3VhbCBTdHVkaW8gMjAxMCkKKyAgIDE1MDAgPSBNU1ZDKysgIDkuMCAoVmlzdWFsIFN0dWRpbyAyMDA4KQorICAgMTQwMCA9IE1TVkMrKyAgOC4wIChWaXN1YWwgU3R1ZGlvIDIwMDUpCisgICAxMzEwID0gTVNWQysrICA3LjEgKFZpc3VhbCBTdHVkaW8gMjAwMykKKyAgIDEzMDAgPSBNU1ZDKysgIDcuMCAoVmlzdWFsIFN0dWRpbyAyMDAyKQorICAgMTIwMCA9IE1TVkMrKyAgNi4wCiAqLwogCisjaWZkZWYgX01TQ19WRVIKKy8qIERpc2FibGUgd2FybmluZyA0MDE4OiBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2guICovCisjcHJhZ21hIHdhcm5pbmcgKGRpc2FibGU6IDQwMTgpCisjZW5kaWYKKworLyogQXV0b21hdGljYWxseSBzZXQgYnkgV2luZG93cyBwZXJsIENvbmZpZ3VyZSBzY3JpcHQuCisgKiBXaGVuIGNvbXBpbGluZyB3aXRoIHRoZSBNU1ZDIHdvcmtzcGFjZSwgdGhpcyBtdXN0IGJlIHNldCBtYW51YWxseS4KKyAqIFNlZSB0aGUgUEFDS0FHRV9WRVJTSU9OIHZhcmlhYmxlIGluIFVuaXggL2NvbmZpZ3VyZSBzY3JpcHQKKyovCisjaWZuZGVmIFBBQ0tBR0VfVkVSU0lPTgorI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gInVua25vd24iCisjZW5kaWYKKwogLyogRGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIGlmIHlvdSBoYXZlOgogICogTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gTVNWQyA2LjAgYW5kIHRoZSBQbGF0Zm9ybSBTREsgKFBTREspCiAgKiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby5OZXQgMjAwMgogICogTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uTmV0IDIwMDMKLSAqIEN5Z3dpbgotICogTWluR1cgCiAgKi8KIC8qICN1bmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyAqLwogCi0vKiBPbmx5IHVzZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIFdpbmRvd3MgMjAwMCBTUDQgb3IgbGF0ZXIuCi0gKiBXZSBuZWVkIGF0IGxlYXN0IFNQMSBmb3Igc29tZSBJUHY2IGRlZmluZXMgaW4gd3MyaXBkZWYuaC4KLSAqIE9ubHkgZGVmaW5lIF9XSU4zMl9XSU5OVCB3aGVuIG5vdCBiZWluZyBjb21waWxlZCB3aXRoIE1TVkMgNiB3aXRob3V0IFBTREsKLSAqIGJlY2F1c2UgdGhlcmUgaXMgYSBidWcgaW4gdGhlIE1TVkMgNiBoZWFkZXIgPHdpbnNvY2suaD4gdGhhdCBjYXVzZXMKLSAqIGluY2x1c2lvbiBvZiA8d2luc29jazIuaD4uCisvKiBEZWZpbmUgTkVUU05NUF9FTkFCTEVfSVBWNiB0byBlbmFibGUgSVB2Ni4gIElQdjYgaXMgb25seSBhdmFpbGFibGUgb24KKyAqIFdpbmRvd3MgWFAgYW5kIGhpZ2hlci4gICovCisvKiAjdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNiAqLworCisvKiBPbmx5IHVzZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIFdpbmRvd3MgMjAwMCBTUDQgb3IgbGF0ZXIuICAKKyAqIFdlIG5lZWQgYXQgbGVhc3QgU1AxIGZvciBzb21lIElQdjYgZGVmaW5lcyBpbiB3czJpcGRlZi5oCiAgKi8KICNpZm5kZWYgX1dJTjMyX1dJTk5UCi0jZGVmaW5lIF9XSU4zMl9XSU5OVCAweDUwMSAvKl9XSU4zMl9XSU5OVF9XSU4ySyovCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDYwMCAvKl9XSU4zMl9XSU5OVF9XSU42Ki8KICNlbHNlCiAjaWYgX1dJTjMyX1dJTk5UIDwgMHg1MDEKICNlcnJvciBfV0lOMzJfV0lOTlQgaXMgdG9vIGxvdyAtIGl0IHNob3VsZCBiZSBzZXQgdG8gYXQgbGVhc3QgMHg1MDEuCkBAIC0yMjcsMTkgKzI0MSwxNyBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc20vcGFnZS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX0FTTV9QQUdFX0ggKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiY29weScgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9CQ09QWSAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNnZXRuZXh0JyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX0NHRVRORVhUICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y3J0ZGJnLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0NSVERCR19IIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlY3QuaD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9ESVJFQ1RfSCAqLworI2RlZmluZSBIQVZFX0RJUkVDVF9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaG93bicgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9DSE9XTiAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuICAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLgorICAgKi8KIC8qICN1bmRlZiBIQVZFX0RJUkVOVF9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCkBAIC0zMTQsMTIgKzMyNiwxNCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9uYW1laW5kZXgnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfSUZfTkFNRUlOREVYICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5kZXgnIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfSU5ERVggKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbmV0L21pYjIuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9JTkVUX01JQjJfSCAqLwogCisjaWZkZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aXBobHBhcGkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSVBITFBBUElfSAorI2VuZGlmCisKIC8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQzMl90Jy4gKi8KICNkZWZpbmUgSEFWRV9JTlQzMl9UIDEKIApAQCAtMzY1LDkgKzM3OSw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNyeXB0bycgbGlicmFyeSAoLWxjcnlwdG8pLiAqLwogLyogI3VuZGVmIEhBVkVfTElCQ1JZUFRPICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGwnIGxpYnJhcnkgKC1sZGwpLiAqLwotLyogI3VuZGVmIEhBVkVfTElCREwgKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBlZmVuY2UnIGxpYnJhcnkgKC1sZWZlbmNlKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQkVGRU5DRSAqLwogCkBAIC0zNzcsOSArMzg4LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3N0YXQnIGxpYnJhcnkgKC1sa3N0YXQpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCS1NUQVQgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm0nIGxpYnJhcnkgKC1sa3ZtKS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQktWTSAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG0nIGxpYnJhcnkgKC1sbSkuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJNICovCiAKQEAgLTQwNCw5ICs0MTIsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW5zb3JzJyBsaWJyYXJ5ICgtbHNlbnNvcnMpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCU0VOU09SUyAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHonIGxpYnJhcnkgKC1seikuICovCi0vKiAjdW5kZWYgSEFWRV9MSUJaICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0xJTUlUU19IIDEKIApAQCAtNDE5LDkgKzQyNCw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9MT0NBTEVfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IgKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBscmFuZDQ4JyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX0xSQU5ENDggKi8KIApAQCAtNDM3LDEyICs0MzksNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTUFMTE9DX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbWNweScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUVNQ1BZIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1tb3ZlJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQogCkBAIC01MTIsNiArNTA4LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pcF9pY21wLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0ggKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2ljbXA2Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfTkVUSU5FVF9JQ01QNl9IICovCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pcF92YXIuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9IICovCiAKQEAgLTY4Myw5ICs2ODIsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdGF0dmZzJyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX1NUQVRWRlMgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRhcmcuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KICNpZmRlZiBfX01JTkdXMzJfXwogI2RlZmluZSBIQVZFX1NURElOVF9IIDEKQEAgLTcwMCw5ICs2OTYsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjYXNlc3RyJyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX1NUUkNBU0VTVFIgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjaHInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkNIUiAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TVFJEVVAgMQogCkBAIC04NDYsNiArODM5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9TWVNfVElNRV9IICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWViLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FQl9IIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQogCkBAIC05MzksNiArOTM1LDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2suaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfV0lOU09DS19IIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrMi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3czJ0Y3BpcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XUzJUQ1BJUF9IIDEKKworLyogU2V0IGlmIElQX1BLVElORk8gaXMgdXNhYmxlICovCisjZGVmaW5lIEhBVkVfSVBfUEtUSU5GTyAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8eHRpLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfWFRJX0ggKi8KIApAQCAtOTQ2LDEzICs5NTEsMTcgQEAKIC8qICN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVCAqLwogCiAvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFBBQ0tBR0VfTkFNRQogI2RlZmluZSBQQUNLQUdFX05BTUUgIk5ldC1TTk1QIgorI2VuZGlmCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KIC8qICN1bmRlZiBQQUNLQUdFX1NUUklORyAqLwogCiAvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFBBQ0tBR0VfVEFSTkFNRQogI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIm5ldC1zbm1wIgorI2VuZGlmCiAKIC8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCiAvKiAjdW5kZWYgUEFDS0FHRV9WRVJTSU9OICovCkBAIC05NjYsNiArOTc1LDkgQEAKIC8qIFRoZSBzaXplIG9mIGEgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjZGVmaW5lIFNJWkVPRl9MT05HIDQKIAorLyogVGhlIHNpemUgb2YgYSBgaW50bWF4X3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9JTlRNQVhfVCA4CisKIC8qIFRoZSBzaXplIG9mIGEgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgogCkBAIC05ODEsNyArOTkzLDcgQEAKICNkZWZpbmUgU1REQ19IRUFERVJTIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCisvKiAjdW5kZWYgVElNRV9XSVRIX1NZU19USU1FICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUKICAgIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsIGFuZCBWQVgpLiAqLwpAQCAtMTAzMCw5NiArMTA0MiwxMDIgQEAKIC8qICN1bmRlZiBSVEVOVFJZXzRfNCAqLwogCiAvKiBEb2VzIHN0cnVjdCBzaWdhY3Rpb24gaGF2ZSBhIHNhX3NpZ2FjdGlvbiBmaWVsZD8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfU0lHQUNUSU9OX0hBU19TQV9TSUdBQ1RJT04gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OICovCiAKIC8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9sZW4gZmllbGQ/ICovCi0vKiAjdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9MRU4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9MRU4gKi8KIAogLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHIgaGF2ZSBhIHNhX2ZhbWlseTIgZmllbGQ/ICovCi0vKiAjdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIgKi8KIAogLyogRG9lcyBzdHJ1Y3QgaW42X2FkZHIgaGF2ZSBhIHM2X3VuLnNhNl9sYWRkIGZpZWxkPyAqLwotLyogI3VuZGVmIFNUUlVDVF9JTjZfQUREUl9IQVNfUzZfVU5fU0E2X0xBRERSICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSU42X0FERFJfUzZfVU5fU0E2X0xBRERSICovCisKKy8qIG1zZ2hkci5tc2dfY29udHJvbCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfQ09OVFJPTCAqLworCisvKiBtc2doZHIubXNnX2ZsYWdzICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19GTEFHUyAqLwogCiAvKiBydGVudHJ5IHN0cnVjdHVyZSB0ZXN0cyAqLwogLyogI3VuZGVmIFJURU5UUllfUlRfTkVYVCAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVU5JVCAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VU0UgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfUkVGQ05UICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0hBU0ggKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVU5JVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVVNFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9SRUZDTlQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0hBU0ggKi8KIAogLyogaWZuZXQgc3RydWN0dXJlIHRlc3RzICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9TUEVFRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfVFlQRSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSU1DQVNUUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSVFEUk9QUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX05PUFJPVE8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09NQ0FTVFMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1hOQU1FICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PQllURVMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lCWVRFUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQUREUkxJU1QgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFX0lGU19WQUxVRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1NQRUVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfVFlQRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lNQ0FTVFMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JUURST1BTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9TRUMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9OT1BST1RPICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT01DQVNUUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1hOQU1FICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT0JZVEVTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSUJZVEVTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQUREUkxJU1QgKi8KIAogLyogdGNwc3RhdC50Y3BzX3Jjdm1lbWRyb3AgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVENQU1RBVF9IQVNfVENQU19SQ1ZNRU1EUk9QICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVENQU1RBVF9UQ1BTX1JDVk1FTURST1AgKi8KIAogLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19ESVNDQVJEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0RJU0NBUkQgKi8KIAogLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19OT1BPUlQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUICovCiAKIC8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0vKiAjdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUQkNBU1QgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUQkNBU1QgKi8KIAogLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19GVUxMU09DSyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19GVUxMU09DSyAqLwogCiAvKiBhcnBoZC5hdF9uZXh0ICovCi0vKiAjdW5kZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVCAqLwogCiAvKiBpZmFkZHIuaWZhX25leHQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZBRERSX0hBU19JRkFfTkVYVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGQUREUl9JRkFfTkVYVCAqLwogCiAvKiBpZm5ldC5pZl9tdHUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX01UVSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX01UVSAqLwogCiAvKiBzd2RldnQuc3dfbmJsa3NlbmFibGVkICovCi0vKiAjdW5kZWYgU1RSVUNUX1NXREVWVF9IQVNfU1dfTkJMS1NFTkFCTEVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1dERVZUX1NXX05CTEtTRU5BQkxFRCAqLwogCiAvKiBubGlzdC5uX3ZhbHVlICovCi0vKiAjdW5kZWYgU1RSVUNUX05MSVNUX0hBU19OX1ZBTFVFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfTkxJU1RfTl9WQUxVRSAqLwogCiAvKiBpcHN0YXQgc3RydWN0dXJlIHRlc3RzICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGT1JXQVJEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGUkFHICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0RFTElWRVJFRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHRFJPUFBFRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHVElNRU9VVCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19MT0NBTE9VVCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1BST1RPICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUk9VVEUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0RST1BQRUQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0ZSQUdNRU5UUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19SRUFTU0VNQkxFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZPUldBUkQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGUkFHICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19ERUxJVkVSRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdEUk9QUEVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHVElNRU9VVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTE9DQUxPVVQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUFJPVE8gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUk9VVEUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09EUk9QUEVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRlJBR01FTlRTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19SRUFTU0VNQkxFRCAqLwogCiAvKiB2ZnNzdGF0LmZfZnJzaXplICovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRSAqLwogCiAvKiB2ZnNzdGF0LmZfZmlsZXMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GSUxFUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GSUxFUyAqLwogCiAvKiBzdGF0ZnMgaW5vZGUgc3RydWN0dXJlIHRlc3RzKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZJTEVTICovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GRlJFRSAqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRkFWQUlMICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRklMRVMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GRlJFRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZBVkFJTCAqLwogCiAvKiBkZXNfa3Nfc3RydWN0LndlYWtfa2V5ICovCi0vKiAjdW5kZWYgU1RSVUNUX0RFU19LU19TVFJVQ1RfSEFTX1dFQUtfS0VZICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfREVTX0tTX1NUUlVDVF9XRUFLX0tFWSAqLwogCiAvKiBpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUwgZGVmaW5lZCAqLwogLyogI3VuZGVmIElGTkVUX05FRURTX0tFUk5FTCAqLwpAQCAtMTEzMyw5ICsxMTUxLDYgQEAKIC8qIGRlZmluZSBpZiBTSU9DR0lGQUREUiBleGlzdHMgaW4gc3lzL2lvY3RsLmggKi8KIC8qICN1bmRlZiBTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIgKi8KIAotLyogZGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgKHByb2Nlc3NvcikgZGVmaW5lcyBfX0ZVTkNUSU9OX18gZm9yIHlvdSAqLwotLyogI3VuZGVmIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQgKi8KLQogLyogTWliLTIgdHJlZSBJbmZvICovCiAvKiBUaGVzZSBhcmUgdGhlIHN5c3RlbSBpbmZvcm1hdGlvbiB2YXJpYWJsZXMuICovCiAKQEAgLTEzNDAsNDQgKzEzNTUsNiBAQAogI2RlZmluZSBIQVZFX1NTSVpFX1QKICNlbmRpZgogCi0jaWZuZGVmIEhBVkVfU1RSQ0hSCi0jaWZkZWYgSEFWRV9JTkRFWAotIyBkZWZpbmUgc3RyY2hyKGEsYikgaW5kZXgoYSxiKQotIyBkZWZpbmUgc3RycmNocihhLGIpIHJpbmRleChhLGIpCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfSU5ERVgKLSNpZmRlZiBIQVZFX1NUUkNIUgotIyBkZWZpbmUgaW5kZXgoYSxiKSBzdHJjaHIoYSxiKQotIyBkZWZpbmUgcmluZGV4KGEsYikgc3RycmNocihhLGIpCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNQ1BZCi0jaWZkZWYgSEFWRV9CQ09QWQotIyBkZWZpbmUgbWVtY3B5KGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtbW92ZShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbWNtcCBiY21wCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTUVNTU9WRQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBtZW1tb3ZlIG1lbWNweQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIG5vdHVzZWQgLyogZG9udCBzdGVwIG9uIG90aGVyIGRlZm5zIG9mIGJjb3B5LGJ6ZXJvLCBhbmQgYmNtcCAqLwotI2lmbmRlZiBIQVZFX0JDT1BZCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIGJjb3B5KHMsIGQsIG4pIG1lbWNweSAoKGQpLCAocyksIChuKSkKLSMgZGVmaW5lIGJ6ZXJvKHAsbikgbWVtc2V0KChwKSwoMCksKG4pKQotIyBkZWZpbmUgYmNtcCBtZW1jbXAKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQogLyogSWYgeW91IGhhdmUgb3BlbnNzbCAwLjkuNyBvciBhYm92ZSwgeW91IGxpa2VseSBoYXZlIEFFUyBzdXBwb3J0LiAqLwogLyogI3VuZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wgKi8KIApAQCAtMTQ4Niw2ICsxNDYzLDMyIEBACiAgICAgYXZhaWxhYmxlLiAgKi8KIC8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTiAqLwogCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBUTFMgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU0JBU0VfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIEFsaWFzIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9BTElBU19ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgU1NIIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIERUTFMvVURQIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBUTFMvVENQIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3Igc3RkaW4vb3V0IHRyYW5zcG9ydCBkb21haW4gaXMgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfU1REX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBJUHY0QmFzZSB0cmFuc3BvcnQgZG9tYWluIGlzIGF2YWlsYWJsZS4gICAqLworI2RlZmluZSBORVRTTk1QX1RSQU5TUE9SVF9JUFY0QkFTRV9ET01BSU4gMQorCiAvKiBkZWZpbmUgdGhpcyBpZiB0aGUgVVNNIHNlY3VyaXR5IG1vZHVsZSBpcyBhdmFpbGFibGUgKi8KICNkZWZpbmUgTkVUU05NUF9TRUNNT0RfVVNNIDEKIApAQCAtMTUwMywxNCArMTUwNiwxNiBAQAogCiAvKiBOb3QtdG8tYmUtY29tcGlsZWQgbWFjcm9zIGZvciB1c2UgYnkgY29uZmlndXJlIG9ubHkgKi8KICNkZWZpbmUgY29uZmlnX3JlcXVpcmUoeCkKKyNkZWZpbmUgY29uZmlnX3ZlcnNpb25fcmVxdWlyZSh4KQogI2RlZmluZSBjb25maWdfd2FybmluZyh4KQorI2RlZmluZSBjb25maWdfZXJyb3IoeCkKICNkZWZpbmUgY29uZmlnX2V4Y2x1ZGUoeCkKICNkZWZpbmUgY29uZmlnX2FyY2hfcmVxdWlyZSh4LHkpCiAjZGVmaW5lIGNvbmZpZ19wYXJzZV9kb3RfY29uZih3LHgseSx6KQogI2RlZmluZSBjb25maWdfYWRkX21pYih4KQogI2RlZmluZSBjb25maWdfYmVsb25nc19pbih4KQogCi0jaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKG1pbmd3MzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKKyNpZiBkZWZpbmVkIChXSU4zMikKICNkZWZpbmUgRU5WX1NFUEFSQVRPUiAiOyIKICNkZWZpbmUgRU5WX1NFUEFSQVRPUl9DSEFSICc7JwogI2Vsc2UKQEAgLTE1NzcsMjAgKzE1ODIsNTMgQEAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OwogI2VuZGlmCiAjaWZuZGVmIEhBVkVfU1RESU5UX0gKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwordHlwZWRlZiBjaGFyIGludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQxNiB1aW50MTZfdDsKK3R5cGVkZWYgX19pbnQxNiBpbnQxNl90OwogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIHVpbnQzMl90OwotdHlwZWRlZiBsb25nIGludDMyX3Q7Cit0eXBlZGVmIF9faW50MzIgaW50MzJfdDsKIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKIHR5cGVkZWYgX19pbnQ2NCBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIHVpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnRtYXhfdDsKK3R5cGVkZWYgX19pbnQ2NCBpbnRtYXhfdDsKICNlbHNlIC8qIEhBVkVfU1RESU5UX0ggKi8KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNlbmRpZiAvKiBIQVZFX1NURElOVF9IICovCiAKKworLyogKHUpaW50cHRyX3Qgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIGZvciBNU1ZDIDYgMzItYml0LiAqLworLyogU0RLIGhhcyBpdCBmb3IgNjQtYml0IGFuZCBuZXdlciBNU1ZDIHNob3VsZCBhbHNvIGhhdmUgaXQgaW4gc3RkZGVmLmguICovCisjaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjaWZkZWYgX01fWDY0Cit0eXBlZGVmIF9faW50NjQgICAgICAgICAgaW50cHRyX3Q7CisjZWxzZQordHlwZWRlZiBpbnQgICAgICAgICAgICAgIGludHB0cl90OworI2VuZGlmCisjZGVmaW5lIF9JTlRQVFJfVF9ERUZJTkVECisjZW5kaWYKKworI2lmbmRlZiBfVUlOVFBUUl9UX0RFRklORUQKKyNpZmRlZiBfTV9YNjQKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50cHRyX3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIHVpbnRwdHJfdDsKKyNlbmRpZgorI2RlZmluZSBfVUlOVFBUUl9UX0RFRklORUQKKyNlbmRpZgorCiAjaWZuZGVmIF9fY3BsdXNwbHVzCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ4MDQpIC8vICctJyA6IHVuc2FmZSB1c2Ugb2YgdHlwZSAnYm9vbCcgaW4gb3BlcmF0aW9uCisjZW5kaWYKIGVudW0gewogICAgIG5ldHNubXBfY29tcGlsZV90aW1lX3VpbnRwdHJfdF9zaXplX2NoZWNrCiAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCBuZXRzbm1wX2NvbXBpbGVfdGltZV91aW50cHRyX3Rfc2l6ZV9jaGVja19zIHsgaW50Oi0hKHNpemVvZih1aW50cHRyX3QpID09IHNpemVvZih2b2lkKikpOyB9KQogfTsKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgogI2VuZGlmCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgY2xvc2Vzb2NrZXQgZnVuY3Rpb24uICAqLwpAQCAtMTYxNywxNyArMTY1NSw5IEBACiAvKiBEZWZpbmUgTkVUU05NUF9VU0VfRExMIHdoZW4gYnVpbGRpbmcgb3IgdXNpbmcgbmV0c25tcC5ETEwgKi8KIC8qICN1bmRlZiBORVRTTk1QX1VTRV9ETEwgKi8KIAotI2lmZGVmIE5FVFNOTVBfVVNFX0RMTAotICAjaWZkZWYgTkVUU05NUF9ETEwKLSAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICNkZWZpbmUgTkVUU05NUF9JTVBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0gICAgI2VuZGlmCi0gICNlbHNlCi0gICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAjZGVmaW5lIE5FVFNOTVBfSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotICAgICNlbmRpZgotICAjZW5kaWYgICAvKiBORVRTTk1QX0RMTCAqLwotI2VuZGlmICAgICAvKiBORVRTTk1QX1VTRV9ETEwgKi8KKyNpZiBkZWZpbmVkKE5FVFNOTVBfRExMKSAmJiAhZGVmaW5lZChORVRTTk1QX1VTRV9ETEwpCisjZXJyb3IgTkVUU05NUF9VU0VfRExMIG11c3QgYmUgZGVmaW5lZCB3aGVuIGJ1aWxkaW5nIGxpYnNubXAgYXMgYSBETEwuCisjZW5kaWYKIAogLyoKICAqIERMTCBkZWNvcmF0aW9uLCBpZiB1c2VkIGF0IGFsbCwgbXVzdCBiZSBjb25zaXN0ZW50LgpAQCAtMTY0MCwyNSArMTY3MCwyMiBAQAogICogIHRoZSBORVRTTk1QX0lNUE9SVCBkZWZpbml0aW9ucyBoYXJtbGVzcy4KICAqLwogCi0KLSAgI2lmZGVmIE5FVFNOTVBfVVNFX0RMTAotICAgICNpZm5kZWYgTkVUU05NUF9UT09MU19DCi0KLSAgLyogd3JhcCBhbGxvYyBmdW5jdGlvbnMgdG8gdXNlIERMTCdzIG1lbW9yeSBoZWFwICovCi0gIC8qIFRoaXMgaXMgbm90IGRvbmUgaW4gdG9vbHMuYywgd2hlcmUgdGhlc2Ugd3JhcHBlcnMgYXJlIGRlZmluZWQgKi8KLQotICAgICAgI2RlZmluZSBzdHJkdXAgICAgbmV0c25tcF9zdHJkdXAKLSAgICAgICNkZWZpbmUgY2FsbG9jICAgIG5ldHNubXBfY2FsbG9jCi0gICAgICAjZGVmaW5lIG1hbGxvYyAgICBuZXRzbm1wX21hbGxvYwotICAgICAgI2RlZmluZSByZWFsbG9jICAgbmV0c25tcF9yZWFsbG9jCi0gICAgICAjZGVmaW5lIGZyZWUgICAgICBuZXRzbm1wX2ZyZWUKKyNpZmRlZiBORVRTTk1QX1VTRV9ETEwKKyAgI2lmZGVmIE5FVFNOTVBfRExMCisgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAjZGVmaW5lIE5FVFNOTVBfSU1QT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQogICAgICNlbmRpZgotICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICNkZWZpbmUgTkVUU05NUF9JTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisgICAgI2VuZGlmCisgICNlbmRpZiAgIC8qIE5FVFNOTVBfRExMICovCisjZW5kaWYgICAgIC8qIE5FVFNOTVBfVVNFX0RMTCAqLwogCiAvKiBNU1ZDIE9wZW5TU0wgbGlua2VyIHNldHRpbmdzLiAqLwotI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKG1pbmd3MzIpCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKICMgIGlmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkKLSMgICAgaWZkZWYgTkVUU05NUF9VU0VfRExMCisjICAgIGlmZGVmIF9ETEwKICMgICAgICBpZmRlZiBfREVCVUcKICMgICAgICAgIHByYWdtYSBjb21tZW50KGxpYiwgImxpYmVheTMyTURkLmxpYiIpCiAjICAgICAgZWxzZQpAQCAtMTY3Miw2ICsxNjk5LDcgQEAKICMgICAgICBlbmRpZgogIyAgICBlbmRpZgogIyAgICBwcmFnbWEgY29tbWVudChsaWIsICJnZGkzMi5saWIiKQorIyAgICBwcmFnbWEgY29tbWVudChsaWIsICJ1c2VyMzIubGliIikKICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtMTY4MSw3ICsxNzA5LDcgQEAKICMgIGRlZmluZSBORVRTTk1QX0lNUE9SVCBleHRlcm4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRSkgJiYgIWRlZmluZWQoRE9OVF9VU0VfTkxJU1QpICYmICFkZWZpbmVkKE5FVFNOTVBfTk9fS01FTV9VU0FHRSkKKyNpZiBkZWZpbmVkKEhBVkVfTkxJU1QpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfTkxJU1RfTl9WQUxVRSkgJiYgIWRlZmluZWQoRE9OVF9VU0VfTkxJU1QpICYmICFkZWZpbmVkKE5FVFNOTVBfTk9fS01FTV9VU0FHRSkKICNkZWZpbmUgTkVUU05NUF9DQU5fVVNFX05MSVNUCiAjZW5kaWYKIApAQCAtMTY4OSw3ICsxNzE3LDYgQEAKICNkZWZpbmUgRE1BTExPQ19GVU5DX0NIRUNLCiAjZW5kaWYKIAotLyogI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KIC8qICN1bmRlZiBORVRTTk1QX0VOQUJMRV9MT0NBTF9TTVVYICovCiAKIC8qIGRlZmluZSBpZiBhZ2VudHggdHJhbnNwb3J0IGlzIHRvIHVzZSBkb21haW4gc29ja2V0cyBvbmx5ICovCkBAIC0xNzEwLDE5ICsxNzM3LDM1IEBACiAjdW5kZWYgSEFWRV9JTkVUX05UT1AKICN1bmRlZiBIQVZFX0lORVRfUFRPTgogCi0jaWYgTkVUU05NUF9FTkFCTEVfSVBWNgorLyogSVB2NiB0cmFuc3BvcnRzICovCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgogICAjZGVmaW5lIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOIDEKICAgI2RlZmluZSBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTiAxCisgICNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMQogI2Vsc2UKICAgI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCiAgICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgogI2VuZGlmCiAjZW5kaWYKIAorLyoKKyAqIEFsdGhvdWdoIGlmX25hbWV0b2luZGV4KCkgaXMgYXZhaWxhYmxlIG9uIFdpbmRvd3MgVmlzdGEsIFdpbmRvd3MgU2VydmVyCisgKiAyMDA4IGFuZCBsYXRlciBpbiBpcGhscGFwaS5kbGwsIGRvIG5vdCBsaW5rIHdpdGggaWZfbmFtZXRvaW5kZXgoKSBzdWNoCisgKiB0aGF0IHRoZSBOZXQtU05NUCBleGVjdXRhYmxlIGNhbiBiZSBzdGFydGVkIG9uIGVhcmxpZXIgV2luZG93cyB2ZXJzaW9ucy4KKyAqLworI3VuZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVgKKwogI2lmbmRlZiBOSV9NQVhIT1NUCiAjZGVmaW5lIE5JX01BWEhPU1QJMTAyNQogI2VuZGlmCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bGwnIGZ1bmN0aW9uLiAqLworI2lmIF9NU0NfVkVSID49IDE4MDAKKyNkZWZpbmUgSEFWRV9TVFJUT1VMTAorI2Vsc2UKKy8qICN1bmRlZiBIQVZFX1NUUlRPVUxMICovCisjZW5kaWYKKwogLyoKICAqIE1vZHVsZSBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHN0YXJ0cyBoZXJlLgogICoKQEAgLTE3NjYsOSArMTgwOSwxOSBAQAogI2RlZmluZSBORVRTTk1QX1RJTUVPVVRfV0FJVEZPUlNJTkdMRU9CSkVDVCA1MDAwCiAKICNpZmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESwotI2RlZmluZSBTVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9IQVNfU1NfRkFNSUxZIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkgMQogI2VuZGlmCiAKKy8qIFNpemUgcHJlZml4IHRvIHVzZSB0byBwcmludGYgYSB1aW50MzJfdCAqLworI2RlZmluZSBORVRTTk1QX1BSSTMyICIiCisKKyNpZmRlZiBfTVNDX1ZFUgorI2lmZGVmIF9XSU42NAorI2RlZmluZSBORVRTTk1QX1BSSXogIkk2NCIKKyNlbHNlCisjZGVmaW5lIE5FVFNOTVBfUFJJeiAiIgorI2VuZGlmCisjZW5kaWYKIAogI2VuZGlmIC8qIE5FVF9TTk1QX0NPTkZJR19IICovCiAKZGlmZiAtLWdpdCBhL3dpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluIGIvd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4Kb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA0ZTI0ZDc1Li5iNmJhY2JjCi0tLSBhL3dpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluCisrKyBiL3dpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluCkBAIC0yLDYgKzIsNyBAQAogQ0ZHPQogT1VURElSPQogSU5URElSPQorU0RLPQogCiAhSUYgIiQoT1MpIiA9PSAiV2luZG93c19OVCIKIE5VTEw9CkBAIC05LDc1ICsxMCw4IEBACiBOVUxMPW51bAogIUVORElGIAogCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCiBBTEwgOiAiLi5cbGliXCQoT1VURElSKVwkKFBST0dOQU1FKS5saWIiCiAKLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudHhfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2xpZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXJyb3JtaWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleGFtcGxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXhlY3V0ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGlxdWVyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4dGVuc2libGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxmaWxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxsb2FkYXZlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWFzdGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWFzdGVyX2FkbWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWliX21vZHVsZXMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4dGVuZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zQ2FjaGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0RlYnVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNMb2dnaW5nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNNb2R1bGVUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhc3NfcGVyc2lzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb2Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm90b2NvbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb3h5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbXV4Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9taWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wRW5naW5lLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE1QRFN0YXRzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5VGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVGFyZ2V0QWRkckVudHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRhcmdldFBhcmFtc0VudHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3ViYWdlbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhcmdldC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhcmdldF9jb3VudGVycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21Db25mLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtU3RhdHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21Vc2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fY29uZi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fdmFycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2ZXJzaW9uaW5mby5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXCQoUFJPR05BTUUpLmxpYiIKLQogIi4uXGxpYlwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCiAKQEAgLTg1LDcgKzE5LDExIEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKKyFFTkRJRgogCiAuY3skKElOVERJUil9Lm9iajo6CiAgICAkKENQUCkgQDw8CkBAIC0xMTgsMzMgKzU2LDQwIEBACiA8PAogCiBSU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcJChQUk9HTkFNRSkuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQogTElCMzI9bGluay5leGUgLWxpYgogTElCMzJfRkxBR1M9L25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXCQoUFJPR05BTUUpLmxpYiIgCi1MSUIzMl9PQkpTPSBcCitMSUIzMl9PQkpTMT0gXAogCSIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIiBcCiAJIiQoSU5URElSKVxzbm1wX21pYi5vYmoiIFwKIAkiJChJTlRESVIpXHN5c09SVGFibGUub2JqIiBcCiAJIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIgXAorCSIkKElOVERJUilcdXBkYXRlcy5vYmoiIFwKIAkiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiIFwKIAkiJChJTlRESVIpXHZhY21fY29uZi5vYmoiIFwKIAkiJChJTlRESVIpXHZhY21fdmFycy5vYmoiIFwKKwkiJChJTlRESVIpXG10ZUV2ZW50Lm9iaiIgXAorCSIkKElOVERJUilcbXRlRXZlbnRDb25mLm9iaiIgXAogCSIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiIFwKKwkiJChJTlRESVIpXG10ZUV2ZW50U2V0VGFibGUub2JqIiBcCiAJIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIgXAorCSIkKElOVERJUilcbXRlT2JqZWN0cy5vYmoiIFwKKwkiJChJTlRESVIpXG10ZU9iamVjdHNDb25mLm9iaiIgXAogCSIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIgXAorCSIkKElOVERJUilcbXRlU2NhbGFycy5vYmoiIFwKIAkiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIiBcCisJIiQoSU5URElSKVxtdGVUcmlnZ2VyLm9iaiIgXAorCSIkKElOVERJUilcbXRlVHJpZ2dlckNvbmYub2JqIiBcCiAJIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiIFwKIAkiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiIFwKIAkiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiIFwKIAkiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiIFwKIAkiJChJTlRESVIpXGV4YW1wbGUub2JqIiBcCiAJIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIgXAorCSIkKElOVERJUilcZGxtb2Qub2JqIiBcCiAJIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiIFwKIAkiJChJTlRESVIpXGV4dGVuc2libGUub2JqIiBcCi0JIiQoSU5URElSKVxmaWxlLm9iaiIgXAorCSIkKElOVERJUilcZmlsZS5vYmoiCitMSUIzMl9PQkpTMj0gXAogCSIkKElOVERJUilcbG9hZGF2ZS5vYmoiIFwKIAkiJChJTlRESVIpXHBhc3Mub2JqIiBcCiAJIiQoSU5URElSKVxwYXNzX2NvbW1vbi5vYmoiIFwKQEAgLTE4MCwyMDEgKzEyNSw0NCBAQAogCSIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIgXAogCSIkKElOVERJUilcZXhlY3V0ZS5vYmoiIFwKIAkiJChJTlRESVIpXGlxdWVyeS5vYmoiIFwKKwkiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIgXAorCSIkKElOVERJUilcaGVhZGVyX2dlbmVyaWMub2JqIiBcCisJIiQoSU5URElSKVxoZWFkZXJfc2ltcGxlX3RhYmxlLm9iaiIgXAogCSIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIiBcCiAJIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiIFwKLQkiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIgXAogCSIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiIFwKKwkiJChJTlRESVIpXEV4aXQub2JqIiBcCisJIiQoSU5URElSKVxyZXN0YXJ0Lm9iaiIgXAogCSIkKElOVERJUilcc211eC5vYmoiCi0KLSIuLlxsaWJcJChPVVRESVIpXCQoUFJPR05BTUUpLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQotICAgICQoTElCMzIpIEA8PAotICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQotPDwKLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVwkKFBST0dOQU1FKS5saWIiCi0KKyFJRiAiJChTREspIiA9PSAidHJ1ZSIKK0xJQjMyX09CSlMzPSBcCisJIiQoSU5URElSKVxhdC5vYmoiIFwKKwkiJChJTlRESVIpXGljbXAub2JqIiBcCisJIiQoSU5URElSKVxpbnRlcmZhY2VzLm9iaiIgXAorCSIkKElOVERJUilcaXAub2JqIiBcCisJIiQoSU5URElSKVxpcEFkZHIub2JqIiBcCisJIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgXAorCSIkKElOVERJUilccm91dGVfd3JpdGUub2JqIiBcCisJIiQoSU5URElSKVx0Y3Aub2JqIiBcCisJIiQoSU5URElSKVx0Y3BUYWJsZS5vYmoiIFwKKwkiJChJTlRESVIpXHVkcC5vYmoiIFwKKwkiJChJTlRESVIpXHVkcFRhYmxlLm9iaiIgXAorCSIkKElOVERJUilcdmFyX3JvdXRlLm9iaiIgXAorCSIkKElOVERJUilcd2luRXh0RExMLm9iaiIKKyFFTkRJRgorTElCMzJfT0JKUz0kKExJQjMyX09CSlMxKSAkKExJQjMyX09CSlMyKSAkKExJQjMyX09CSlMzKQogCiBDTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50eF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjbGllbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4YW1wbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleGVjdXRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaXF1ZXJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGZpbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGxvYWRhdmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtYXN0ZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtYXN0ZXJfYWRtaW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXh0ZW5kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNDYWNoZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zRGVidWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0xvZ2dpbmcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc01vZHVsZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb3ZlcnJpZGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFzc19wZXJzaXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJvYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb3RvY29sLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJveHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNtdXgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX21pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBFbmdpbmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTVBEU3RhdHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUYXJnZXRBZGRyRW50cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVGFyZ2V0UGFyYW1zRW50cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdWJhZ2VudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c09SVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFyZ2V0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFyZ2V0X2NvdW50ZXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbUNvbmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21TdGF0cy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbVVzZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV9jb25mLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV92YXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2ZXJzaW9uaW5mby5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKKwktQGZvciAlZiBpbiAoJChMSUIzMl9PQkpTMSkpIGRvIGVyYXNlICUlZgorCS1AZm9yICVmIGluICgkKExJQjMyX09CSlMyKSkgZG8gZXJhc2UgJSVmCisJLUBmb3IgJWYgaW4gKCQoTElCMzJfT0JKUzMpKSBkbyBlcmFzZSAlJWYKIAktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXCQoUFJPR05BTUUpLmxpYiIKIAotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXCQoUFJPR05BTUUpLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJQjMyPWxpbmsuZXhlIC1saWIKLUxJQjMyX0ZMQUdTPS9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVwkKFBST0dOQU1FKS5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX21pYi5vYmoiIFwKLQkiJChJTlRESVIpXHN5c09SVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIgXAotCSIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIgXAotCSIkKElOVERJUilcdmFjbV9jb25mLm9iaiIgXAotCSIkKElOVERJUilcdmFjbV92YXJzLm9iaiIgXAotCSIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxleGFtcGxlLm9iaiIgXAotCSIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiIFwKLQkiJChJTlRESVIpXGVycm9ybWliLm9iaiIgXAotCSIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGZpbGUub2JqIiBcCi0JIiQoSU5URElSKVxsb2FkYXZlLm9iaiIgXAotCSIkKElOVERJUilccGFzcy5vYmoiIFwKLQkiJChJTlRESVIpXHBhc3NfcGVyc2lzdC5vYmoiIFwKLQkiJChJTlRESVIpXHByb2Mub2JqIiBcCi0JIiQoSU5URElSKVxwcm94eS5vYmoiIFwKLQkiJChJTlRESVIpXHZlcnNpb25pbmZvLm9iaiIgXAotCSIkKElOVERJUilcc25tcEVuZ2luZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBNUERTdGF0cy5vYmoiIFwKLQkiJChJTlRESVIpXHVzbUNvbmYub2JqIiBcCi0JIiQoSU5URElSKVx1c21TdGF0cy5vYmoiIFwKLQkiJChJTlRESVIpXHVzbVVzZXIub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUYXJnZXRBZGRyRW50cnkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVGFyZ2V0UGFyYW1zRW50cnkub2JqIiBcCi0JIiQoSU5URElSKVx0YXJnZXQub2JqIiBcCi0JIiQoSU5URElSKVx0YXJnZXRfY291bnRlcnMub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudHhfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcY2xpZW50Lm9iaiIgXAotCSIkKElOVERJUilcbWFzdGVyLm9iaiIgXAotCSIkKElOVERJUilcbWFzdGVyX2FkbWluLm9iaiIgXAotCSIkKElOVERJUilccHJvdG9jb2wub2JqIiBcCi0JIiQoSU5URElSKVxzdWJhZ2VudC5vYmoiIFwKLQkiJChJTlRESVIpXGV4dGVuZC5vYmoiIFwKLQkiJChJTlRESVIpXG5zQ2FjaGUub2JqIiBcCi0JIiQoSU5URElSKVxuc0RlYnVnLm9iaiIgXAotCSIkKElOVERJUilcbnNMb2dnaW5nLm9iaiIgXAotCSIkKElOVERJUilcbnNNb2R1bGVUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGV4ZWN1dGUub2JqIiBcCi0JIiQoSU5URElSKVxpcXVlcnkub2JqIiBcCi0JIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiIFwKLQkiJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIgXAotCSIkKElOVERJUilcb3ZlcnJpZGUub2JqIiBcCi0JIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIgXAotCSIkKElOVERJUilcc211eC5vYmoiCi0KICIuLlxsaWJcJChPVVRESVIpXCQoUFJPR05BTUUpLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQogICAgICQoTElCMzIpIEA8PAogICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQogPDwKIAotIUVORElGIAotCiAKICFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCiAhSUYgRVhJU1RTKCIkKFBST0dOQU1FKS5kZXAiKQpAQCAtNDEwLDYgKzE5OCwxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdXBkYXRlcy5jCisKKyIkKElOVERJUilcdXBkYXRlcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX2NvbnRleHQuYwogCiAiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC00MjgsNDkgKzIyMiw4MiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudC5jCisKKyIkKElOVERJUilcbXRlRXZlbnQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudENvbmYuYworCisiJChJTlRESVIpXG10ZUV2ZW50Q29uZi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYwogCiAiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudFNldFRhYmxlLmMKIAotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVFdmVudFRhYmxlLmMKKyIkKElOVERJUilcbXRlRXZlbnRTZXRUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50VGFibGUuYwogCiAiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVPYmplY3RzLmMKIAotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVPYmplY3RzVGFibGUuYworIiQoSU5URElSKVxtdGVPYmplY3RzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlT2JqZWN0c0NvbmYuYworCisiJChJTlRESVIpXG10ZU9iamVjdHNDb25mLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlT2JqZWN0c1RhYmxlLmMKIAogIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVTY2FsYXJzLmMKIAotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKKyIkKElOVERJUilcbXRlU2NhbGFycy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJCb29sZWFuVGFibGUuYwogCiAiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyLmMKIAotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCisiJChJTlRESVIpXG10ZVRyaWdnZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyQ29uZi5jCisKKyIkKElOVERJUilcbXRlVHJpZ2dlckNvbmYub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCiAKICIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCiAKICIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyVGFibGUuYworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyVGFibGUuYwogCiAiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKIAogIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKQEAgLTQ4OCw2ICszMTUsMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxkbG1vZC5jIgorCisiJChJTlRESVIpXGRsbW9kLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxlcnJvcm1pYi5jIgogCiAiJChJTlRESVIpXGVycm9ybWliLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTU4NCw2ICs0MTcsMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb24tbG9nLW1pYlxub3RpZmljYXRpb25fbG9nLmMiCisKKyIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5jCiAKICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTcxNSw2ICs1NTQsMjUgQEAKICIkKElOVERJUilcaXF1ZXJ5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xvdmVycmlkZS5jCisKKyIkKElOVERJUilcb3ZlcnJpZGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jc1xoZWFkZXJfZ2VuZXJpYy5jCisKKyIkKElOVERJUilcaGVhZGVyX2dlbmVyaWMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jc1xoZWFkZXJfc2ltcGxlX3RhYmxlLmMKKworIiQoSU5URElSKVxoZWFkZXJfc2ltcGxlX3RhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGhlYWRlcl9jb21wbGV4LmMKIAogIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC03MjcsMjYgKzU4NSw4OCBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXG92ZXJyaWRlLmMKLQotIiQoSU5URElSKVxvdmVycmlkZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzLmMKIAogIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3NcRXhpdC5jCisKKyIkKElOVERJUilcRXhpdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzXHJlc3RhcnQuYworCisiJChJTlRESVIpXHJlc3RhcnQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc211eFxzbXV4LmMKIAogIiQoSU5URElSKVxzbXV4Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHdpbkV4dERMTC5jCisiJChJTlRESVIpXHdpbkV4dERMTC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxhdC5jCisiJChJTlRESVIpXGF0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGljbXAuYworIiQoSU5URElSKVxpY21wLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGludGVyZmFjZXMuYworIiQoSU5URElSKVxpbnRlcmZhY2VzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGlwLmMKKyIkKElOVERJUilcaXAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaXBBZGRyLmMKKyIkKElOVERJUilcaXBBZGRyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHJvdXRlX3dyaXRlLmMKKyIkKElOVERJUilccm91dGVfd3JpdGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdGNwLmMKKyIkKElOVERJUilcdGNwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHRjcFRhYmxlLmMKKyIkKElOVERJUilcdGNwVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdWRwLmMKKyIkKElOVERJUilcdWRwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVkcFRhYmxlLmMKKyIkKElOVERJUilcdWRwVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFyX3JvdXRlLmMKKyIkKElOVERJUilcdmFyX3JvdXRlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKIAogIUVORElGIAotCi0KLQpkaWZmIC0tZ2l0IGEvd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwIGIvd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwCmluZGV4IDNhZDg3OWQuLmNkZTQ5NmMgMTAwNjQ0Ci0tLSBhL3dpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcAorKysgYi93aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AKQEAgLTg1LDYgKzg1LDMwIEBACiAjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGF0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaWNtcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGludGVyZmFjZXMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGlwQWRkci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHJvdXRlX3dyaXRlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc2V0U2VyaWFsTm8uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTEwMSw3ICsxMjUsMjMgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX2NvbnRleHQuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx0Y3AuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx0Y3BUYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVkcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVkcFRhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdXBkYXRlcy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMTA5LDQzICsxNDksODMgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX2NvbnRleHQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX3ZhcnMuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YXJfcm91dGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEJlZ2luIEdyb3VwICJkaXNtYW4iDQogDQogIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVFdmVudFRhYmxlLmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50Q29uZi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVPYmplY3RzVGFibGUuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50U2V0VGFibGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckRlbHRhVGFibGUuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnRUYWJsZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlT2JqZWN0cy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyVGFibGUuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlT2JqZWN0c0NvbmYuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZU9iamVjdHNUYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVTY2FsYXJzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJCb29sZWFuVGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyQ29uZi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlclRhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgQmVnaW4gR3JvdXAgImV4YW1wbGVzIg0KQEAgLTIzNywxOSArMzE3LDIzIEBACiAjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb24tbG9nLW1pYlxub3RpZmljYXRpb25fbG9nLmMiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvblxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGUuYw0KK1NPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGUuYyINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYw0KK1NPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYyINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMNCitTT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTM0MSw3ICs0MjUsNyBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xpcXVlcnkuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzXEV4aXQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTM0OSw2ICs0MzMsMTggQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzXGhlYWRlcl9nZW5lcmljLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jc1xoZWFkZXJfc2ltcGxlX3RhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXGlxdWVyeS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFnZW50XG1pYl9tb2R1bGVzLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0zNTcsMTIgKzQ1MywzMiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3NccmVzdGFydC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3MuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJ3aW5FeHRETEwiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx3aW5FeHRETEwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx3aW5FeHRETEwuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJzbXV4Ig0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc211eFxzbXV4LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQogIyBFbmQgVGFyZ2V0DQogIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL3dpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluIGIvd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDE5MDQuLjAwMDAwMDAKLS0tIGEvd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4ODUgKzAsMCBAQAotUFJPR05BTUU9Ci1DRkc9Ci1PVVRESVI9Ci1JTlRESVI9Ci0KLSFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgotTlVMTD0KLSFFTFNFIAotTlVMTD1udWwKLSFFTkRJRiAKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcG1pYnMubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnR4X2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2xpZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGxtb2Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4YW1wbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleGVjdXRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaXF1ZXJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGZpbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGljbXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbnRlcmZhY2VzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpcEFkZHIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxsb2FkYXZlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWFzdGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWFzdGVyX2FkbWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWliX21vZHVsZXMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4dGVuZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zQ2FjaGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0RlYnVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNMb2dnaW5nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNNb2R1bGVUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhc3NfcGVyc2lzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb2Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm90b2NvbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb3h5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccm91dGVfd3JpdGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNtdXgub2JqIgotIwktQGVyYXNlICIkKElOVERJUilcd2luRXh0RExMLm9iaiIJIyB1bmNvbW1lbnQgZm9yIHdpbkV4dERMTAotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX21pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBFbmdpbmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTVBEU3RhdHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5VGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVGFyZ2V0QWRkckVudHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRhcmdldFBhcmFtc0VudHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3ViYWdlbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhcmdldC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhcmdldF9jb3VudGVycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRjcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRjcFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVkcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVkcFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtQ29uZi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbVN0YXRzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtVXNlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YXJfcm91dGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmVyc2lvbmluZm8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wbWlicy5saWIiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9EICJIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyIgL0ZwIiQoSU5URElSKVxuZXRzbm1wbWlic3Nkay5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxuZXRzbm1wbWlic3Nkay5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSUIzMj1saW5rLmV4ZSAtbGliCi1MSUIzMl9GTEFHUz1pcGhscGFwaS5saWIgL25vbG9nbyAvb3V0OiIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBtaWJzLmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfbWliLm9iaiIgXAotCSIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHN5c3RlbV9taWIub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIiBcCi0JIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGV4YW1wbGUub2JqIiBcCi0JIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIgXAotCSIkKElOVERJUilcc25tcEVuZ2luZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBNUERTdGF0cy5vYmoiIFwKLQkiJChJTlRESVIpXHVzbUNvbmYub2JqIiBcCi0JIiQoSU5URElSKVx1c21TdGF0cy5vYmoiIFwKLQkiJChJTlRESVIpXHVzbVVzZXIub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2Uub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5VGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVGFyZ2V0QWRkckVudHJ5Lm9iaiIgXAotCSIkKElOVERJUilcc25tcFRhcmdldFBhcmFtc0VudHJ5Lm9iaiIgXAotCSIkKElOVERJUilcdGFyZ2V0Lm9iaiIgXAotCSIkKElOVERJUilcdGFyZ2V0X2NvdW50ZXJzLm9iaiIgXAotCSIkKElOVERJUilcYWdlbnR4X2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXGNsaWVudC5vYmoiIFwKLQkiJChJTlRESVIpXG1hc3Rlci5vYmoiIFwKLQkiJChJTlRESVIpXG1hc3Rlcl9hZG1pbi5vYmoiIFwKLQkiJChJTlRESVIpXHByb3RvY29sLm9iaiIgXAotCSIkKElOVERJUilcc3ViYWdlbnQub2JqIiBcCi0JIiQoSU5URElSKVxleHRlbmQub2JqIiBcCi0JIiQoSU5URElSKVxuc0NhY2hlLm9iaiIgXAotCSIkKElOVERJUilcbnNEZWJ1Zy5vYmoiIFwKLQkiJChJTlRESVIpXG5zTG9nZ2luZy5vYmoiIFwKLQkiJChJTlRESVIpXG5zTW9kdWxlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxleGVjdXRlLm9iaiIgXAotCSIkKElOVERJUilcaXF1ZXJ5Lm9iaiIgXAotCSIkKElOVERJUilcb3ZlcnJpZGUub2JqIiBcCi0JIiQoSU5URElSKVxhdC5vYmoiIFwKLQkiJChJTlRESVIpXGljbXAub2JqIiBcCi0JIiQoSU5URElSKVxpbnRlcmZhY2VzLm9iaiIgXAotCSIkKElOVERJUilcaXAub2JqIiBcCi0JIiQoSU5URElSKVxpcEFkZHIub2JqIiBcCi0JIiQoSU5URElSKVxyb3V0ZV93cml0ZS5vYmoiIFwKLQkiJChJTlRESVIpXHRjcC5vYmoiIFwKLQkiJChJTlRESVIpXHRjcFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcdWRwLm9iaiIgXAotCSIkKElOVERJUilcdWRwVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVx2YXJfcm91dGUub2JqIiBcCi0JIiQoSU5URElSKVxkbG1vZC5vYmoiIFwKLQkiJChJTlRESVIpXGVycm9ybWliLm9iaiIgXAotCSIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGZpbGUub2JqIiBcCi0JIiQoSU5URElSKVxsb2FkYXZlLm9iaiIgXAotCSIkKElOVERJUilccGFzcy5vYmoiIFwKLQkiJChJTlRESVIpXHBhc3NfcGVyc2lzdC5vYmoiIFwKLQkiJChJTlRESVIpXHByb2Mub2JqIiBcCi0JIiQoSU5URElSKVxwcm94eS5vYmoiIFwKLQkiJChJTlRESVIpXHZlcnNpb25pbmZvLm9iaiIgXAotCSIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIiBcCi0JIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiIFwKLQkiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIiBcCi0jCSIkKElOVERJUilcd2luRXh0RExMLm9iaiIgXAkjIHVuY29tbWVudCBmb3Igd2luRXh0RExMCi0JIiQoSU5URElSKVxzbXV4Lm9iaiIKLQotIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcG1pYnMubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCi0gICAgJChMSUIzMikgQDw8Ci0gICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCi08PAotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBtaWJzLmxpYiIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50eF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNsaWVudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRsbW9kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXJyb3JtaWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleGFtcGxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXhlY3V0ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGlxdWVyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4dGVuc2libGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxmaWxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpY21wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW50ZXJmYWNlcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGlwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaXBBZGRyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbG9hZGF2ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1hc3Rlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1hc3Rlcl9hZG1pbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleHRlbmQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0NhY2hlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNEZWJ1Zy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zTG9nZ2luZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zTW9kdWxlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvdmVycmlkZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXNzX3BlcnNpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm9jLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJvdG9jb2wub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm94eS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJvdXRlX3dyaXRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbXV4Lm9iaiIKLSMJLUBlcmFzZSAiJChJTlRESVIpXHdpbkV4dERMTC5vYmoiCSMgdW5jb21tZW50IGZvciB3aW5FeHRETEwKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9taWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wRW5naW5lLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE1QRFN0YXRzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRhcmdldEFkZHJFbnRyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUYXJnZXRQYXJhbXNFbnRyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN1YmFnZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c3RlbV9taWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YXJnZXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YXJnZXRfY291bnRlcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0Y3Aub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0Y3BUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1ZHAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1ZHBUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbUNvbmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21TdGF0cy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbVVzZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV9jb25mLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV92YXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFyX3JvdXRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2ZXJzaW9uaW5mby5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBtaWJzLmxpYiIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRCAiSEFWRV9XSU4zMl9QTEFURk9STV9TREsiIC9GcCIkKElOVERJUilcbmV0c25tcG1pYnNzZGsucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcbmV0c25tcG1pYnNzZGsuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElCMzI9bGluay5leGUgLWxpYgotTElCMzJfRkxBR1M9aXBobHBhcGkubGliIC9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wbWlicy5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX21pYi5vYmoiIFwKLQkiJChJTlRESVIpXHN5c09SVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIgXAotCSIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIgXAotCSIkKElOVERJUilcdmFjbV9jb25mLm9iaiIgXAotCSIkKElOVERJUilcdmFjbV92YXJzLm9iaiIgXAotCSIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxleGFtcGxlLm9iaiIgXAotCSIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBFbmdpbmUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTVBEU3RhdHMub2JqIiBcCi0JIiQoSU5URElSKVx1c21Db25mLm9iaiIgXAotCSIkKElOVERJUilcdXNtU3RhdHMub2JqIiBcCi0JIiQoSU5URElSKVx1c21Vc2VyLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRhcmdldEFkZHJFbnRyeS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUYXJnZXRQYXJhbXNFbnRyeS5vYmoiIFwKLQkiJChJTlRESVIpXHRhcmdldC5vYmoiIFwKLQkiJChJTlRESVIpXHRhcmdldF9jb3VudGVycy5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50eF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxjbGllbnQub2JqIiBcCi0JIiQoSU5URElSKVxtYXN0ZXIub2JqIiBcCi0JIiQoSU5URElSKVxtYXN0ZXJfYWRtaW4ub2JqIiBcCi0JIiQoSU5URElSKVxwcm90b2NvbC5vYmoiIFwKLQkiJChJTlRESVIpXHN1YmFnZW50Lm9iaiIgXAotCSIkKElOVERJUilcZXh0ZW5kLm9iaiIgXAotCSIkKElOVERJUilcbnNDYWNoZS5vYmoiIFwKLQkiJChJTlRESVIpXG5zRGVidWcub2JqIiBcCi0JIiQoSU5URElSKVxuc0xvZ2dpbmcub2JqIiBcCi0JIiQoSU5URElSKVxuc01vZHVsZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcZXhlY3V0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGlxdWVyeS5vYmoiIFwKLQkiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIgXAotCSIkKElOVERJUilcYXQub2JqIiBcCi0JIiQoSU5URElSKVxpY21wLm9iaiIgXAotCSIkKElOVERJUilcaW50ZXJmYWNlcy5vYmoiIFwKLQkiJChJTlRESVIpXGlwLm9iaiIgXAotCSIkKElOVERJUilcaXBBZGRyLm9iaiIgXAotCSIkKElOVERJUilccm91dGVfd3JpdGUub2JqIiBcCi0JIiQoSU5URElSKVx0Y3Aub2JqIiBcCi0JIiQoSU5URElSKVx0Y3BUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHVkcC5vYmoiIFwKLQkiJChJTlRESVIpXHVkcFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcdmFyX3JvdXRlLm9iaiIgXAotCSIkKElOVERJUilcZGxtb2Qub2JqIiBcCi0JIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiIFwKLQkiJChJTlRESVIpXGV4dGVuc2libGUub2JqIiBcCi0JIiQoSU5URElSKVxmaWxlLm9iaiIgXAotCSIkKElOVERJUilcbG9hZGF2ZS5vYmoiIFwKLQkiJChJTlRESVIpXHBhc3Mub2JqIiBcCi0JIiQoSU5URElSKVxwYXNzX3BlcnNpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxwcm9jLm9iaiIgXAotCSIkKElOVERJUilccHJveHkub2JqIiBcCi0JIiQoSU5URElSKVx2ZXJzaW9uaW5mby5vYmoiIFwKLQkiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIgXAotCSIkKElOVERJUilcbWliX21vZHVsZXMub2JqIiBcCi0JIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIgXAotCSIkKElOVERJUilcc211eC5vYmoiIFwKLSMJIiQoSU5URElSKVx3aW5FeHRETEwub2JqIiBcCSMgdW5jb21tZW50IGZvciB3aW5FeHRETEwKLQkiJChJTlRESVIpXHNtdXgub2JqIgotCi0iLi5cbGliXCQoT1VURElSKVxuZXRzbm1wbWlicy5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKLSAgICAkKExJQjMyKSBAPDwKLSAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKLTw8Ci0KLSFFTkRJRiAKLQotCi0hSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgotIUlGIEVYSVNUUygibmV0c25tcG1pYnNzZGsuZGVwIikKLSFJTkNMVURFICJuZXRzbm1wbWlic3Nkay5kZXAiCi0hRUxTRSAKLSFNRVNTQUdFIFdhcm5pbmc6IGNhbm5vdCBmaW5kICJuZXRzbm1wbWlic3Nkay5kZXAiCi0hRU5ESUYgCi0hRU5ESUYgCi0KLQotIUlGICIkKENGRykiID09ICJyZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGVidWciCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc2V0U2VyaWFsTm8uYwotCi0iJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHNubXBfbWliLmMKLQotIiQoSU5URElSKVxzbm1wX21pYi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzeXNPUlRhYmxlLmMKLQotIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHN5c3RlbV9taWIuYwotCi0iJChJTlRESVIpXHN5c3RlbV9taWIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV9jb250ZXh0LmMKLQotIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV9jb25mLmMKLQotIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV92YXJzLmMKLQotIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYwotCi0iJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZUV2ZW50VGFibGUuYwotCi0iJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZU9iamVjdHNUYWJsZS5jCi0KLSIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKLQotIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCi0KLSIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCi0KLSIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyVGFibGUuYwotCi0iJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKLQotIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZXhhbXBsZXNcZXhhbXBsZS5jCi0KLSIkKElOVERJUilcZXhhbXBsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxleGFtcGxlc1x1Y2REZW1vUHVibGljLmMKLQotIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1xzbm1wRW5naW5lLmMKLQotIiQoSU5URElSKVxzbm1wRW5naW5lLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1xzbm1wTVBEU3RhdHMuYwotCi0iJChJTlRESVIpXHNubXBNUERTdGF0cy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcdXNtQ29uZi5jCi0KLSIkKElOVERJUilcdXNtQ29uZi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcdXNtU3RhdHMuYwotCi0iJChJTlRESVIpXHVzbVN0YXRzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1x1c21Vc2VyLmMKLQotIiQoSU5URElSKVx1c21Vc2VyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvblxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMKLQotIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvbi1sb2ctbWliXG5vdGlmaWNhdGlvbl9sb2cuYwotCi0iJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGUuYwotCi0iJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCi0KLSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jCi0KLSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb25cc25tcE5vdGlmeVRhYmxlLmMKLQotIiQoSU5URElSKVxzbm1wTm90aWZ5VGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdGFyZ2V0XHNubXBUYXJnZXRBZGRyRW50cnkuYwotCi0iJChJTlRESVIpXHNubXBUYXJnZXRBZGRyRW50cnkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdGFyZ2V0XHNubXBUYXJnZXRQYXJhbXNFbnRyeS5jCi0KLSIkKElOVERJUilcc25tcFRhcmdldFBhcmFtc0VudHJ5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHRhcmdldFx0YXJnZXQuYwotCi0iJChJTlRESVIpXHRhcmdldC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx0YXJnZXRcdGFyZ2V0X2NvdW50ZXJzLmMKLQotIiQoSU5URElSKVx0YXJnZXRfY291bnRlcnMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XGFnZW50eF9jb25maWcuYwotCi0iJChJTlRESVIpXGFnZW50eF9jb25maWcub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XGNsaWVudC5jCi0KLSIkKElOVERJUilcY2xpZW50Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxtYXN0ZXIuYwotCi0iJChJTlRESVIpXG1hc3Rlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcbWFzdGVyX2FkbWluLmMKLQotIiQoSU5URElSKVxtYXN0ZXJfYWRtaW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XHByb3RvY29sLmMKLQotIiQoSU5URElSKVxwcm90b2NvbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcc3ViYWdlbnQuYwotCi0iJChJTlRESVIpXHN1YmFnZW50Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XGV4dGVuZC5jCi0KLSIkKElOVERJUilcZXh0ZW5kLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zQ2FjaGUuYwotCi0iJChJTlRESVIpXG5zQ2FjaGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNEZWJ1Zy5jCi0KLSIkKElOVERJUilcbnNEZWJ1Zy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc0xvZ2dpbmcuYwotCi0iJChJTlRESVIpXG5zTG9nZ2luZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc01vZHVsZVRhYmxlLmMKLQotIiQoSU5URElSKVxuc01vZHVsZVRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zVHJhbnNhY3Rpb25UYWJsZS5jCi0KLSIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xleGVjdXRlLmMKLQotIiQoSU5URElSKVxleGVjdXRlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xpcXVlcnkuYwotCi0iJChJTlRESVIpXGlxdWVyeS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcb3ZlcnJpZGUuYwotCi0iJChJTlRESVIpXG92ZXJyaWRlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGF0LmMKLQotIiQoSU5URElSKVxhdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpY21wLmMKLQotIiQoSU5URElSKVxpY21wLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGludGVyZmFjZXMuYwotCi0iJChJTlRESVIpXGludGVyZmFjZXMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaXAuYwotCi0iJChJTlRESVIpXGlwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGlwQWRkci5jCi0KLSIkKElOVERJUilcaXBBZGRyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHJvdXRlX3dyaXRlLmMKLQotIiQoSU5URElSKVxyb3V0ZV93cml0ZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx0Y3AuYwotCi0iJChJTlRESVIpXHRjcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx0Y3BUYWJsZS5jCi0KLSIkKElOVERJUilcdGNwVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdWRwLmMKLQotIiQoSU5URElSKVx1ZHAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdWRwVGFibGUuYwotCi0iJChJTlRESVIpXHVkcFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhcl9yb3V0ZS5jCi0KLSIkKElOVERJUilcdmFyX3JvdXRlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxkbG1vZC5jIgotCi0iJChJTlRESVIpXGRsbW9kLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxlcnJvcm1pYi5jIgotCi0iJChJTlRESVIpXGVycm9ybWliLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxleHRlbnNpYmxlLmMiCi0KLSIkKElOVERJUilcZXh0ZW5zaWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZmlsZS5jIgotCi0iJChJTlRESVIpXGZpbGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGxvYWRhdmUuYyIKLQotIiQoSU5URElSKVxsb2FkYXZlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxwYXNzLmMiCi0KLSIkKElOVERJUilccGFzcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBccGFzc19wZXJzaXN0LmMiCi0KLSIkKElOVERJUilccGFzc19wZXJzaXN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxwcm9jLmMiCi0KLSIkKElOVERJUilccHJvYy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBccHJveHkuYyIKLQotIiQoSU5URElSKVxwcm94eS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcdmVyc2lvbmluZm8uYyIKLQotIiQoSU5URElSKVx2ZXJzaW9uaW5mby5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxoZWFkZXJfY29tcGxleC5jCi0KLSIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliX21vZHVsZXMuYwotCi0iJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNtdXhcc211eC5jCi0KLSIkKElOVERJUilcc211eC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSNTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcd2luRXh0RExMLmMJCSMgdW5jb21tZW50IGZvciB3aW5FeHRETEwKLQotIyIkKElOVERJUilcd2luRXh0RExMLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIJIyB1bmNvbW1lbnQgZm9yIHdpbkV4dERMTAotIwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCQkJIyB1bmNvbW1lbnQgZm9yIHdpbkV4dERMTAotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzLmMKLQotIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCi0KZGlmZiAtLWdpdCBhL3dpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcCBiL3dpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFkNWNjYy4uMDAwMDAwMAotLS0gYS93aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MjAgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJuZXRzbm1wbWlic3NkayIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiIDB4MDEwNA0KLQ0KLUNGRz1uZXRzbm1wbWlic3NkayAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJuZXRzbm1wbWlic3Nkay5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibmV0c25tcG1pYnNzZGsubWFrIiBDRkc9Im5ldHNubXBtaWJzc2RrIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIm5ldHNubXBtaWJzc2RrIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIpDQotIU1FU1NBR0UgIm5ldHNubXBtaWJzc2RrIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJuZXRzbm1wbWlic3NkayAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuLi9saWIvcmVsZWFzZSINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRCAiSEFWRV9XSU4zMl9QTEFURk9STV9TREsiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOQ0KLSMgQUREIFJTQyAvbCAweDQwOQ0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiBpcGhscGFwaS5saWIgbWdtdGFwaS5saWIgc25tcGFwaS5saWIgL25vbG9nbyAvb3V0OiIuLi9saWIvcmVsZWFzZS9uZXRzbm1wbWlicy5saWIiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIm5ldHNubXBtaWJzc2RrIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4uL2xpYi9kZWJ1ZyINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRCAiSEFWRV9XSU4zMl9QTEFURk9STV9TREsiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOQ0KLSMgQUREIFJTQyAvbCAweDQwOQ0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiBpcGhscGFwaS5saWIgbWdtdGFwaS5saWIgc25tcGFwaS5saWIgL25vbG9nbyAvb3V0OiIuLi9saWIvZGVidWcvbmV0c25tcG1pYnMubGliIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAibmV0c25tcG1pYnNzZGsgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAibmV0c25tcG1pYnNzZGsgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIEdyb3VwICJtaWJJSSINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHNldFNlcmlhbE5vLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc25tcF9taWIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzeXNPUlRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc3lzdGVtX21pYi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fY29udGV4dC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fY29uZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fdmFycy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgImRpc21hbiINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZUV2ZW50VGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlT2JqZWN0c1RhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJCb29sZWFuVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckRlbHRhVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJleGFtcGxlcyINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGV4YW1wbGVzXGV4YW1wbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxleGFtcGxlc1x1Y2REZW1vUHVibGljLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAic25tcHYzIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHNubXBFbmdpbmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcc25tcE1QRFN0YXRzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHVzbUNvbmYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcdXNtU3RhdHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcdXNtVXNlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgIm5vdGlmaWNhdGlvbiINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvblxzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uLWxvZy1taWJcbm90aWZpY2F0aW9uX2xvZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb25cc25tcE5vdGlmeVRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAidGFyZ2V0Ig0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdGFyZ2V0XHNubXBUYXJnZXRBZGRyRW50cnkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx0YXJnZXRcc25tcFRhcmdldFBhcmFtc0VudHJ5LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdGFyZ2V0XHRhcmdldC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHRhcmdldFx0YXJnZXRfY291bnRlcnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJhZ2VudHgiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcYWdlbnR4X2NvbmZpZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxjbGllbnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcbWFzdGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XG1hc3Rlcl9hZG1pbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxwcm90b2NvbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxzdWJhZ2VudC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgImFnZW50Ig0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcZXh0ZW5kLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNDYWNoZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zRGVidWcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc0xvZ2dpbmcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc01vZHVsZVRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNUcmFuc2FjdGlvblRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAidXRpbGl0aWVzIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXGV4ZWN1dGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcaXF1ZXJ5LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXG92ZXJyaWRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAibWliSUlzZGsiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxhdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGljbXAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpbnRlcmZhY2VzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaXAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpcEFkZHIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxyb3V0ZV93cml0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHRjcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHRjcFRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdWRwLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdWRwVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YXJfcm91dGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJ1Y2Qtc25tcCINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxkbG1vZC5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZXJyb3JtaWIuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGV4dGVuc2libGUuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGZpbGUuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGxvYWRhdmUuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHBhc3MuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHBhc3NfcGVyc2lzdC5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBccHJvYy5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBccHJveHkuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHZlcnNpb25pbmZvLmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcaGVhZGVyX2NvbXBsZXguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJfbW9kdWxlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbXV4XHNtdXguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx3aW5FeHRETEwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcCBiL3dpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcAppbmRleCBmZTVlNWFlLi4zOTU5OWRiIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AKKysrIGIvd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGJ1bGtnZXQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBidWxrZ2V0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wYnVsa2dldCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBidWxrZ2V0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBidWxrZ2V0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcCBiL3dpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwCmluZGV4IGVhOGJiMGMuLjkxZTk0ZDMgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwCisrKyBiL3dpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGJ1bGt3YWxrLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wYnVsa3dhbGsuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBidWxrd2FsayAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBidWxrd2Fsay5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wYnVsa3dhbGsuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBkL01ha2VmaWxlLmluIGIvd2luMzIvc25tcGQvTWFrZWZpbGUuaW4KaW5kZXggNDFhYzU1ZS4uMWIxYjNhYyAxMDA2NDQKLS0tIGEvd2luMzIvc25tcGQvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvc25tcGQvTWFrZWZpbGUuaW4KQEAgLTIsNyArMiw3IEBACiBDRkc9CiBPVVRESVI9CiBJTlRESVI9Ci1TU0w9CitTREs9CiBMSU5LVFlQRT0KIAogIyBTZXQgdG8gMSB0byBhbGxvdyB0aGUgYnVpbGRpbmcgdXNpbmcgdGhlIERMTCB2ZXJzaW9uIG9mIFNOTVBMSUIuCkBAIC0xNCwyMSArMTQsOSBAQAogTlVMTD1udWwKICFFTkRJRiAKIAotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQogQUxMIDogIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIiAiJChJTlRESVIpIgogCiAKLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtlcm5lbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIgotCiAiLi5cYmluXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKIApAQCAtMzYsOTkgKzI0LDE0IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcc25tcGQucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCi1DUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgotIUVORElGCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQorIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIFJTQ19QUk9KPS9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9kICJOREVCVUciIAotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXHNubXBkLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOiIuLi9iaW4vJChPVVRESVIpL3NubXBkLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSIgCi1MSU5LMzJfT0JKUz0gXAotCSIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiIFwKLQkiJChJTlRESVIpXGtlcm5lbC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBkLm9iaiIgXAotCSIkKElOVERJUilcd2luc2VydmljZS5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIgotCi0iLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiIDogIi4uXGJpblwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElOSzMyX09CSlMpCi0hSUYgIiQoTElOS1RZUEUpIiA9PSAic3RhdGljIiB8fCAiJChBTExPV19ETEwpIiA9PSAiMSIKLSAgICAkKExJTkszMikgQDw8Ci0gICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQotPDwKLSFFTFNFCSMgTGlua3R5cGUgY2hlY2sKLQktQGVjaG8gLgotCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwotCS1AZWNobyAuCishRUxTRQorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GUiIkKElOVERJUilcXCIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK1JTQ19QUk9KPS9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9kICJfREVCVUciIAogIUVORElGCiAKLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotQUxMIDogIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIiAiJChJTlRESVIpXHNubXBkLmJzYyIgIiQoSU5URElSKSIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhdXRvX25saXN0LnNiciIKLQktQGVyYXNlICIkKElOVERJUilca2VybmVsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilca2VybmVsLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQuYnNjIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIKLQotIi4uXGJpblwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIiJChJTlRESVIpXFwiIC9GcCIkKElOVERJUilcc25tcGQucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQogIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCiBDUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgogIUVORElGCkBAIC0xNDgsMzggKzUxLDE0IEBACiAgICAkKENQUF9QUk9KKSAkPCAKIDw8CiAKLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCiBSU0M9cmMuZXhlCi1SU0NfUFJPSj0vbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvZCAiX0RFQlVHIiAKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxzbm1wZC5ic2MiIAotQlNDMzJfU0JSUz0gXAotCSIkKElOVERJUilcYXV0b19ubGlzdC5zYnIiIFwKLQkiJChJTlRESVIpXGtlcm5lbC5zYnIiIFwKLQkiJChJTlRESVIpXHNubXBkLnNiciIgXAotCSIkKElOVERJUilcd2luc2VydmljZS5zYnIiCi0KLSIkKElOVERJUilcc25tcGQuYnNjIiA6ICIuLlxiaW5cJChPVVRESVIpIiAkKEJTQzMyX1NCUlMpCi0gICAgJChCU0MzMikgQDw8Ci0gICQoQlNDMzJfRkxBR1MpICQoQlNDMzJfU0JSUykKLTw8Ci0KIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciIAorTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9vdXQ6Ii4uXGJpblwkKE9VVERJUikvc25tcGQuZXhlIiAvbGlicGF0aDoiLi4vbGliLyQoT1VURElSKSIKKyFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCitMSU5LMzJfRkxBR1M9JChMSU5LMzJfRkxBR1MpIC9kZWJ1ZyAvcGRiOiIuLi9iaW4vJChPVVRESVIpL3NubXBkLnBkYiIKKyFFTFNFCitMSU5LMzJfRkxBR1M9JChMSU5LMzJfRkxBR1MpIC9kZWJ1ZyAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5wZGIiIC9wZGJ0eXBlOnNlcHQKKyFFTkRJRgogTElOSzMyX09CSlM9IFwKIAkiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIiBcCiAJIiQoSU5URElSKVxrZXJuZWwub2JqIiBcCkBAIC0xODcsMjEgKzY2LDI0IEBACiAJIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgXAogCSIkKElOVERJUilcd2luc2VydmljZS5yZXMiCiAKK0NMRUFOIDoKKwktQGZvciAlZiBpbiAoJChMSU5LMzJfT0JKUykpIGRvIGVyYXNlICUlZgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IgogCiAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiIDogIi4uXGJpblwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElOSzMyX09CSlMpCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAic3RhdGljIiB8fCAiJChBTExPV19ETEwpIiA9PSAiMSIKICAgICAkKExJTkszMikgQDw8CiAgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQogPDwKKyBpZiBleGlzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIFwKKwkgICAgbXQuZXhlIC1tYW5pZmVzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiOzEKICFFTFNFCSMgTGlua3R5cGUgY2hlY2sKIAktQGVjaG8gLgogCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwogCS1AZWNobyAuCiAhRU5ESUYKIAotIUVORElGIAotCi0KICFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCiAhSUYgRVhJU1RTKCJzbm1wZC5kZXAiKQogIUlOQ0xVREUgInNubXBkLmRlcCIKQEAgLTIxMSw5NyArOTMsMzEgQEAKICFFTkRJRiAKIAogCi0hSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiIHx8ICIkKENGRykiID09ICJkZWJ1ZyIKIFNPVVJDRT0uLlwuLlxhZ2VudFxhdXRvX25saXN0LmMKIAotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCiAiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIJIiQoSU5URElSKVxhdXRvX25saXN0LnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCiBTT1VSQ0U9Li5cLi5cYWdlbnRca2VybmVsLmMKIAotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCiAiJChJTlRESVIpXGtlcm5lbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXGtlcm5lbC5vYmoiCSIkKElOVERJUilca2VybmVsLnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCiBTT1VSQ0U9Li5cLi5cYWdlbnRcc25tcGQuYwogCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KICIkKElOVERJUilcc25tcGQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVxzbm1wZC5vYmoiCSIkKElOVERJUilcc25tcGQuc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnNlcnZpY2UuYwogCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KICIkKElOVERJUilcd2luc2VydmljZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgkiJChJTlRESVIpXHdpbnNlcnZpY2Uuc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnNlcnZpY2UucmMKIAotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCiAiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoUlNDKSAvbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvaSAiLi5cLi5cc25tcGxpYiIgL2QgIk5ERUJVRyIgJChTT1VSQ0UpCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcd2luc2VydmljZS5yZXMiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChSU0MpIC9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9pICIuLlwuLlxzbm1wbGliIiAvZCAiX0RFQlVHIiAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KLQotIUVORElGIAotCisJJChSU0MpICQoUlNDX1BST0opIC9pICIuLlwuLlxzbm1wbGliIiAkKFNPVVJDRSkKZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBkL3NubXBkLmRzcCBiL3dpbjMyL3NubXBkL3NubXBkLmRzcAppbmRleCA0MjY5YWE0Li40NWUyY2FkIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wZC9zbm1wZC5kc3AKKysrIGIvd2luMzIvc25tcGQvc25tcGQuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBkLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcGQgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwIGIvd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AKaW5kZXggYjE3YjgyMi4uN2Y1YTVkMyAxMDA2NDQKLS0tIGEvd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AKKysrIGIvd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZGVsdGEuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBkZWx0YS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcGRlbHRhIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGRlbHRhLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBkZWx0YS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGRmL3NubXBkZi5kc3AgYi93aW4zMi9zbm1wZGYvc25tcGRmLmRzcAppbmRleCA4OGMzZjZkLi5lMmU0Yjk0IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wZGYvc25tcGRmLmRzcAorKysgYi93aW4zMi9zbm1wZGYvc25tcGRmLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBkZi5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGRmLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wZGYgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZGYuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGRmLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wZHNkay9NYWtlZmlsZS5pbiBiL3dpbjMyL3NubXBkc2RrL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjhkZTQzLi4wMDAwMDAwCi0tLSBhL3dpbjMyL3NubXBkc2RrL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLVBST0dOQU1FPQotQ0ZHPQotT1VURElSPQotSU5URElSPQotU1NMPQotTElOS1RZUEU9Ci0KLSMgU2V0IHRvIDEgdG8gYWxsb3cgdGhlIGJ1aWxkaW5nIHVzaW5nIHRoZSBETEwgdmVyc2lvbiBvZiBTTk1QTElCLgotQUxMT1dfRExMPTEKLQotIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCi1OVUxMPQotIUVMU0UgCi1OVUxMPW51bAotIUVORElGIAotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi1BTEwgOiAiLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiICIkKElOVERJUikiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilca2VybmVsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5wY2giCi0JLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiCi0KLSIuLlxiaW5cJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9EICJIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyIgL0ZwIiQoSU5URElSKVxzbm1wZC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0hSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKLUNQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCi0hRU5ESUYKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1SU0NfUFJPSj0vbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvZCAiTkRFQlVHIiAKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxzbm1wZC5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgaXBobHBhcGkubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpL3NubXBkLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIiAKLUxJTkszMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIgXAotCSIkKElOVERJUilca2VybmVsLm9iaiIgXAotCSIkKElOVERJUilcc25tcGQub2JqIiBcCi0JIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgXAotCSIkKElOVERJUilcd2luc2VydmljZS5yZXMiCi0KLSIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIgOiAiLi5cYmluXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKLSFJRiAiJChMSU5LVFlQRSkiID09ICJzdGF0aWMiIHx8ICIkKEFMTE9XX0RMTCkiID09ICIxIgotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotIUVMU0UJIyBMaW5rdHlwZSBjaGVjawotCS1AZWNobyAuCi0JLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCi0JLUBlY2hvIC4KLSFFTkRJRgotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLUFMTCA6ICIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIgIiQoSU5URElSKVxzbm1wZC5ic2MiICIkKElOVERJUikiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYXV0b19ubGlzdC5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtlcm5lbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtlcm5lbC5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQuc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLmJzYyIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5wY2giCi0JLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiCi0KLSIuLlxiaW5cJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0QgIkhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIiAvRlIiJChJTlRESVIpXFwiIC9GcCIkKElOVERJUilcc25tcGQucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCi1DUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgotIUVORElGCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotUlNDX1BST0o9L2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2QgIl9ERUJVRyIgCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcc25tcGQuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQkiJChJTlRESVIpXGF1dG9fbmxpc3Quc2JyIiBcCi0JIiQoSU5URElSKVxrZXJuZWwuc2JyIiBcCi0JIiQoSU5URElSKVxzbm1wZC5zYnIiIFwKLQkiJChJTlRESVIpXHdpbnNlcnZpY2Uuc2JyIgotCi0iJChJTlRESVIpXHNubXBkLmJzYyIgOiAiLi5cYmluXCQoT1VURElSKSIgJChCU0MzMl9TQlJTKQotICAgICQoQlNDMzIpIEA8PAotICAkKEJTQzMyX0ZMQUdTKSAkKEJTQzMyX1NCUlMpCi08PAotCi1MSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgaXBobHBhcGkubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpL3NubXBkLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluXCQoT1VURElSKS9zbm1wZC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyIgCi1MSU5LMzJfT0JKUz0gXAotCSIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiIFwKLQkiJChJTlRESVIpXGtlcm5lbC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBkLm9iaiIgXAotCSIkKElOVERJUilcd2luc2VydmljZS5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIgotCi0iLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiIDogIi4uXGJpblwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElOSzMyX09CSlMpCi0hSUYgIiQoTElOS1RZUEUpIiA9PSAic3RhdGljIiB8fCAiJChBTExPV19ETEwpIiA9PSAiMSIKLSAgICAkKExJTkszMikgQDw8Ci0gICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQotPDwKLSFFTFNFCSMgTGlua3R5cGUgY2hlY2sKLQktQGVjaG8gLgotCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwotCS1AZWNobyAuCi0hRU5ESUYKLQotIUVORElGIAotCi0KLSFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCi0hSUYgRVhJU1RTKCJzbm1wZC5kZXAiKQotIUlOQ0xVREUgInNubXBkLmRlcCIKLSFFTFNFIAotIU1FU1NBR0UgV2FybmluZzogY2Fubm90IGZpbmQgInNubXBkLmRlcCIKLSFFTkRJRiAKLSFFTkRJRiAKLQotCi0hSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiIHx8ICIkKENGRykiID09ICJkZWJ1ZyIKLVNPVVJDRT0uLlwuLlxhZ2VudFxhdXRvX25saXN0LmMKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCi0iJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIJIiQoSU5URElSKVxhdXRvX25saXN0LnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCi1TT1VSQ0U9Li5cLi5cYWdlbnRca2VybmVsLmMKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCi0iJChJTlRESVIpXGtlcm5lbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXGtlcm5lbC5vYmoiCSIkKElOVERJUilca2VybmVsLnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcc25tcGQuYwotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KLSIkKElOVERJUilcc25tcGQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVxzbm1wZC5vYmoiCSIkKElOVERJUilcc25tcGQuc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnNlcnZpY2UuYwotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KLSIkKElOVERJUilcd2luc2VydmljZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgkiJChJTlRESVIpXHdpbnNlcnZpY2Uuc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnNlcnZpY2UucmMKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCi0iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoUlNDKSAvbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvaSAiLi5cLi5cc25tcGxpYiIgL2QgIk5ERUJVRyIgJChTT1VSQ0UpCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcd2luc2VydmljZS5yZXMiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChSU0MpIC9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9pICIuLlwuLlxzbm1wbGliIiAvZCAiX0RFQlVHIiAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KLQotIUVORElGIAotCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wZHNkay9zbm1wZC5kc3AgYi93aW4zMi9zbm1wZHNkay9zbm1wZC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MmFkMjIuLjAwMDAwMDAKLS0tIGEvd2luMzIvc25tcGRzZGsvc25tcGQuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ic25tcGRzZGsiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KLQ0KLUNGRz1zbm1wZHNkayAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJzbm1wZC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic25tcGQubWFrIiBDRkc9InNubXBkc2RrIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInNubXBkc2RrIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAic25tcGRzZGsgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLUNQUD1jbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAic25tcGRzZGsgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9EICJIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGlwaGxwYXBpLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAic25tcGRzZGsgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRCAiSEFWRV9XSU4zMl9QTEFURk9STV9TREsiIC9GUiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgaXBobHBhcGkubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJzbm1wZHNkayAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJzbm1wZHNkayAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcYXV0b19ubGlzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGtlcm5lbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XHNubXBkLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5zZXJ2aWNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5zZXJ2aWNlLnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcCBiL3dpbjMyL3NubXBnZXQvc25tcGdldC5kc3AKaW5kZXggNjQ5ODBlZC4uMDYwMzIzMiAxMDA2NDQKLS0tIGEvd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcAorKysgYi93aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGdldC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGdldC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcGdldCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBnZXQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGdldC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwIGIvd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwCmluZGV4IDIzMzE5OWQuLmNiNjNjODQgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcAorKysgYi93aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZ2V0bmV4dC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGdldG5leHQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBnZXRuZXh0IC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGdldG5leHQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGdldG5leHQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluIGIvd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4KaW5kZXggYmE0ZDVlMi4uMDVhMDFlOCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4KQEAgLTIsNyArMiw2IEBACiBDRkc9CiBPVVRESVI9CiBJTlRESVI9Ci1TU0w9CiBMSU5LVFlQRT0KIAogIyBTZXQgdG8gMSB0byBhbGxvdyB0aGUgYnVpbGRpbmcgdXNpbmcgdGhlIERMTCB2ZXJzaW9uIG9mIFNOTVBMSUIuCkBAIC0yMywxMyArMjIsMTYgQEAKIAktQGVyYXNlICIkKElOVERJUilcaWYub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0Lm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcaW5ldDYub2JqIgorCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0eC5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXG1haW4ub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxyb3V0ZS5vYmoiCisJLUBlcmFzZSAiJChJTlRESVIpXHJvdXRleC5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXGZmcy5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgogCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zdHViLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgogCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IgogCiAiLi5cYmluXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKQEAgLTM4LDcgKzQwLDcgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIAogIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCiBDUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgpAQCAtODAsMTMgKzgyLDE1IEBACiBCU0MzMl9TQlJTPSBcCiAKIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIiAKK0xJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiIAogTElOSzMyX09CSlM9IFwKIAkiJChJTlRESVIpXGlmLm9iaiIgXAogCSIkKElOVERJUilcaW5ldC5vYmoiIFwKIAkiJChJTlRESVIpXGluZXQ2Lm9iaiIgXAorCSIkKElOVERJUilcaW5ldHgub2JqIiBcCiAJIiQoSU5URElSKVxtYWluLm9iaiIgXAogCSIkKElOVERJUilccm91dGUub2JqIiBcCisJIiQoSU5URElSKVxyb3V0ZXgub2JqIiBcCiAJIiQoSU5URElSKVxmZnMub2JqIiBcCiAJIiQoSU5URElSKVx3aW5zdHViLm9iaiIKIApAQCAtOTUsNiArOTksOCBAQAogICAgICQoTElOSzMyKSBAPDwKICAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCiA8PAorIGlmIGV4aXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgXAorCSAgICBtdC5leGUgLW1hbmlmZXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSI7MQogIUVMU0UJIyBMaW5rdHlwZSBjaGVjawogCS1AZWNobyAuCiAJLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCkBAIC0xMTMsMTAgKzExOSwxNCBAQAogCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0LnNiciIKIAktQGVyYXNlICIkKElOVERJUilcaW5ldDYub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0Ni5zYnIiCisJLUBlcmFzZSAiJChJTlRESVIpXGluZXR4Lm9iaiIKKwktQGVyYXNlICIkKElOVERJUilcaW5ldHguc2JyIgogCS1AZXJhc2UgIiQoSU5URElSKVxtYWluLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcbWFpbi5zYnIiCiAJLUBlcmFzZSAiJChJTlRESVIpXHJvdXRlLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilccm91dGUuc2JyIgorCS1AZXJhc2UgIiQoSU5URElSKVxyb3V0ZXgub2JqIgorCS1AZXJhc2UgIiQoSU5URElSKVxyb3V0ZXguc2JyIgogCS1AZXJhc2UgIiQoSU5URElSKVxmZnMub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxmZnMuc2JyIgogCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKQEAgLTEyNyw2ICsxMzcsNyBAQAogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5ic2MiCiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBkYiIKIAktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIKIAogIi4uXGJpblwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCkBAIC0xMzUsNyArMTQ2LDcgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiIkKElOVERJUilcXCIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZSIiQoSU5URElSKVxcIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKIENQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCkBAIC0xNzgsOCArMTg5LDEwIEBACiAJIiQoSU5URElSKVxpZi5zYnIiIFwKIAkiJChJTlRESVIpXGluZXQuc2JyIiBcCiAJIiQoSU5URElSKVxpbmV0Ni5zYnIiIFwKKwkiJChJTlRESVIpXGluZXR4LnNiciIgXAogCSIkKElOVERJUilcbWFpbi5zYnIiIFwKIAkiJChJTlRESVIpXHJvdXRlLnNiciIgXAorCSIkKElOVERJUilccm91dGV4LnNiciIgXAogCSIkKElOVERJUilcZmZzLnNiciIgXAogCSIkKElOVERJUilcd2luc3R1Yi5zYnIiCiAKQEAgLTE4OSwxMyArMjAyLDE1IEBACiA8PAogCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciIAorTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9vdXQ6Ii4uXGJpblwkKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciIAogTElOSzMyX09CSlM9IFwKIAkiJChJTlRESVIpXGlmLm9iaiIgXAogCSIkKElOVERJUilcaW5ldC5vYmoiIFwKIAkiJChJTlRESVIpXGluZXQ2Lm9iaiIgXAorCSIkKElOVERJUilcaW5ldHgub2JqIiBcCiAJIiQoSU5URElSKVxtYWluLm9iaiIgXAogCSIkKElOVERJUilccm91dGUub2JqIiBcCisJIiQoSU5URElSKVxyb3V0ZXgub2JqIiBcCiAJIiQoSU5URElSKVxmZnMub2JqIiBcCiAJIiQoSU5URElSKVx3aW5zdHViLm9iaiIKIApAQCAtMjA0LDYgKzIxOSw4IEBACiAgICAgJChMSU5LMzIpIEA8PAogICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKIDw8CisgaWYgZXhpc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiBcCisJICAgIG10LmV4ZSAtbWFuaWZlc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6Ii4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIjsxCiAhRUxTRQkjIExpbmt0eXBlIGNoZWNrCiAJLUBlY2hvIC4KIAktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKQEAgLTI3Nyw2ICsyOTQsMTEgQEAKIAogIUVORElGIAogCitTT1VSQ0U9Li5cLi5cYXBwc1wkKFBST0dOQU1FKVxpbmV0eC5jCisKKyIkKElOVERJUilcaW5ldHgub2JqIgkiJChJTlRESVIpXGluZXR4LnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKIFNPVVJDRT0uLlwuLlxhcHBzXCQoUFJPR05BTUUpXG1haW4uYwogCiAhSUYgICIkKENGRykiID09ICJyZWxlYXNlIgpAQCAtMzEzLDYgKzMzNSwxMSBAQAogCiAhRU5ESUYgCiAKK1NPVVJDRT0uLlwuLlxhcHBzXCQoUFJPR05BTUUpXHJvdXRleC5jCisKKyIkKElOVERJUilccm91dGV4Lm9iaiIJIiQoSU5URElSKVxyb3V0ZXguc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKwogU09VUkNFPS4uXC4uXGFwcHNcJChQUk9HTkFNRSlcZmZzLmMKIAogIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcCBiL3dpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDI1ZWMwMzEuLjJlZGE1NzUKLS0tIGEvd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwCisrKyBiL3dpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBuZXRzdGF0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wbmV0c3RhdC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcG5ldHN0YXQgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wbmV0c3RhdC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wbmV0c3RhdC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpAQCAtODQsNiArODQsMTAgQEAKICMgTmFtZSAic25tcG5ldHN0YXQgLSBXaW4zMiBEZWJ1ZyINCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFwcHNcc25tcG5ldHN0YXRcZmZzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wbmV0c3RhdFxpZi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtOTYsNiArMTAwLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wbmV0c3RhdFxpbmV0eC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFwcHNcc25tcG5ldHN0YXRcbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTA0LDcgKzExMiw3IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYXBwc1xzbm1wbmV0c3RhdFxmZnMuYw0KK1NPVVJDRT0uLlwuLlxhcHBzXHNubXBuZXRzdGF0XHJvdXRleC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcCBiL3dpbjMyL3NubXBzZXQvc25tcHNldC5kc3AKaW5kZXggZmRlY2EzMC4uYWQwZjUwOSAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcAorKysgYi93aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHNldC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHNldC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHNldCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBzZXQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHNldC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHNtX2luaXQuaCBiL3dpbjMyL3NubXBzbV9pbml0LmgKaW5kZXggODAxNWZmNi4uYzhhNDEwYiAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHNtX2luaXQuaAorKysgYi93aW4zMi9zbm1wc21faW5pdC5oCkBAIC0xLDIgKzEgQEAKLS8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovCiBpbml0X3VzbSgpOwpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHNtX3NodXRkb3duLmggYi93aW4zMi9zbm1wc21fc2h1dGRvd24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTBjNTUxCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvc25tcHNtX3NodXRkb3duLmgKQEAgLTAsMCArMSBAQAorc2h1dGRvd25fdXNtKCk7CmRpZmYgLS1naXQgYS93aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwIGIvd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcAppbmRleCAxYjY4MzczLi5lNmE0MTAwIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwCisrKyBiL3dpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wc3RhdHVzLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wc3RhdHVzLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wc3RhdHVzIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHN0YXR1cy5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wc3RhdHVzLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcCBiL3dpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwCmluZGV4IDc1Zjk2NGYuLjFkZmMxMzggMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwCisrKyBiL3dpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRhYmxlLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdGFibGUuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXB0YWJsZSAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0YWJsZS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdGFibGUuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcCBiL3dpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcAppbmRleCBkZmIwY2YxLi44OWMwOGU5IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AKKysrIGIvd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRlc3QuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0ZXN0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wdGVzdCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0ZXN0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0ZXN0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwIGIvd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcAppbmRleCBhM2ViZGU1Li5jM2VjYTAyIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwCisrKyBiL3dpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdHJhbnNsYXRlLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdHJhbnNsYXRlLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wdHJhbnNsYXRlIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRyYW5zbGF0ZS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdHJhbnNsYXRlLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AgYi93aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AKaW5kZXggOGQyN2VlMS4uYzM0ZmZkOCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwCisrKyBiL3dpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0cmFwLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdHJhcC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHRyYXAgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdHJhcC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdHJhcC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluIGIvd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluCmluZGV4IGViNzJmYTcuLjJmYTVjY2IgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW4KQEAgLTIsNyArMiw2IEBACiBDRkc9CiBPVVRESVI9CiBJTlRESVI9Ci1TU0w9CiBMSU5LVFlQRT0KIAogIyBTZXQgdG8gMSB0byBhbGxvdyB0aGUgYnVpbGRpbmcgdXNpbmcgdGhlIERMTCB2ZXJzaW9uIG9mIFNOTVBMSUIuCkBAIC0yNiw2ICsyNSw3IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCiAJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiCiAKICIuLlxiaW5cJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgpAQCAtMzQsNyArMzQsNyBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIAogIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCiBDUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgpAQCAtNzcsNyArNzcsNyBAQAogQlNDMzJfU0JSUz0gXAogCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgbmV0c25tcHRyYXBkLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSIgCitMSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcHRyYXBkLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9vdXQ6Ii4uXGJpblwkKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiIAogTElOSzMyX09CSlM9IFwKIAkiJChJTlRESVIpXCQoUFJPR05BTUUpLm9iaiIgXAogCSIkKElOVERJUilcd2luc2VydmljZS5vYmoiIFwKQEAgLTg4LDYgKzg4LDggQEAKICAgICAkKExJTkszMikgQDw8CiAgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQogPDwKKyBpZiBleGlzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIFwKKwkgICAgbXQuZXhlIC1tYW5pZmVzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiOzEKICFFTFNFCSMgTGlua3R5cGUgY2hlY2sKIAktQGVjaG8gLgogCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwpAQCAtMTExLDYgKzExMyw3IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLmJzYyIKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGRiIgogCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IgogCiAiLi5cYmluXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKQEAgLTExOSw3ICsxMjIsNyBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIiJChJTlRESVIpXFwiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZSIiQoSU5URElSKVxcIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKIENQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCkBAIC0xNjksNyArMTcyLDcgQEAKIDw8CiAKIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBuZXRzbm1wdHJhcGQubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyIgCitMSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcHRyYXBkLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvb3V0OiIuLlxiaW5cJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIiAKIExJTkszMl9PQkpTPSBcCiAJIiQoSU5URElSKVwkKFBST0dOQU1FKS5vYmoiIFwKIAkiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiBcCkBAIC0xODAsNiArMTgzLDggQEAKICAgICAkKExJTkszMikgQDw8CiAgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQogPDwKKyBpZiBleGlzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIFwKKwkgICAgbXQuZXhlIC1tYW5pZmVzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiOzEKICFFTFNFCSMgTGlua3R5cGUgY2hlY2sKIAktQGVjaG8gLgogCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwpAQCAtMTk4LDI1ICsyMDMsNiBAQAogIUVORElGIAogCiAKLSFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSIgfHwgIiQoQ0ZHKSIgPT0gImRlYnVnIgotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvbi1sb2ctbWliXG5vdGlmaWNhdGlvbl9sb2cuYwotCi0hSUYgICIkKENGRykiID09ICJyZWxlYXNlIgotCi0KLSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIgkiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cuc2JyIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRU5ESUYgCi0KIFNPVVJDRT0uLlwuLlxhcHBzXCQoUFJPR05BTUUpLmMKIAogIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKQEAgLTMwNiw3ICsyOTIsMyBAQAogCiAKICFFTkRJRiAKLQotCi0hRU5ESUYgCi0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwIGIvd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AKaW5kZXggZGU0NDczNy4uOWY0OTM4OSAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AKKysrIGIvd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgbmV0c25tcHRyYXBkLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdHJhcGQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0cmFwZC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHRyYXBkIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBuZXRzbm1wdHJhcGQubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRyYXBkLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0cmFwZC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpAQCAtODgsNiArODgsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhcHBzXHNubXB0cmFwZF9oYW5kbGVycy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcd2luc2VydmljZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcCBiL3dpbjMyL3NubXB1c20vc25tcHVzbS5kc3AKaW5kZXggZGI0M2YyZS4uYTFjMDEyNCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcAorKysgYi93aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHVzbS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHVzbS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHVzbSAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB1c20uZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHVzbS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmggYi93aW4zMi9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzYzY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oPgpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwIGIvd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwCmluZGV4IDA4NTY4MzIuLjJmZDUzZmQgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcAorKysgYi93aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdmFjbS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHZhY20uZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXB2YWNtIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHZhY20uZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHZhY20uZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcCBiL3dpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcAppbmRleCA1ZDgxOTU3Li42NzU5OGYxIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AKKysrIGIvd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHdhbGsuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB3YWxrLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wd2FsayAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB3YWxrLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB3YWxrLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmggYi93aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmMTQwOQotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaApAQCAtMCwwICsxLDE2IEBACisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQX0RPTUFJTgorbmV0c25tcF91ZHBfYmFzZV9jdG9yKCk7CituZXRzbm1wX3VkcF9jdG9yKCk7CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BfRE9NQUlOCituZXRzbm1wX3RjcF9jdG9yKCk7CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9BTElBU19ET01BSU4KK25ldHNubXBfYWxpYXNfY3RvcigpOworI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KK25ldHNubXBfdWRwaXB2Nl9jdG9yKCk7CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgorbmV0c25tcF90Y3BpcHY2X2N0b3IoKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvd2luMzIvd2luMzIuZHN3IGIvd2luMzIvd2luMzIuZHN3CmluZGV4IDQ3NjNjMzcuLjVhZDFhYjAgMTAwNjQ0Ci0tLSBhL3dpbjMyL3dpbjMyLmRzdworKysgYi93aW4zMi93aW4zMi5kc3cKQEAgLTExLDMwICsxMSw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGliaGVscGVycyI9Ii5cbGliaGVscGVyc1xsaWJoZWxwZXJzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYnNubXAiPSIuXGxpYnNubXBcbGlic25tcC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC00Nyw2ICsyNiwyMSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJsaWJzbm1wIj0iLlxsaWJzbm1wXGxpYnNubXAuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC01OSw2ICs1Myw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtNzEsOSArNjgsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC04Niw5ICs4Myw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTEwMSw5ICs5OCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTExNiwxOCArMTEzLDE1IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJhZ2VudA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYmhlbHBlcnMNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBuZXRzbm1wbWlicw0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJhZ2VudA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBuZXRzbm1wbWlicw0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTE0MCw5ICsxMzQsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0xNTUsOSArMTQ5LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMTcwLDkgKzE2NCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTE4NSw5ICsxNzksOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0yMDAsOSArMTk0LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMjE1LDkgKzIwOSw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTIzMCw5ICsyMjQsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0yNDUsOSArMjM5LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMjYwLDkgKzI1NCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTI3NSw5ICsyNjksOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0yOTAsOSArMjg0LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMzA1LDIxICsyOTksMTggQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYmFnZW50DQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGliaGVscGVycw0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIG5ldHNubXBtaWJzDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlibmV0c25tcHRyYXBkDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYmFnZW50DQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlibmV0c25tcHRyYXBkDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIG5ldHNubXBtaWJzDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMzMyLDkgKzMyMyw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTM0Nyw5ICszMzgsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0zNjIsOSArMzUzLDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkaWZmIC0tZ2l0IGEvd2luMzIvd2luMzJkbGwuZHN3IGIvd2luMzIvd2luMzJkbGwuZHN3Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjMjRmNWEKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi93aW4zMmRsbC5kc3cKQEAgLTAsMCArMSwzNzQgQEAKK01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImVuY29kZV9rZXljaGFuZ2UiPSIuXGVuY29kZV9rZXljaGFuZ2VcZW5jb2RlX2tleWNoYW5nZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYmFnZW50Ij0iLlxsaWJhZ2VudFxsaWJhZ2VudC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYm5ldHNubXB0cmFwZCI9Ii5cbGlibmV0c25tcHRyYXBkXGxpYm5ldHNubXB0cmFwZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYnNubXBfZGxsIj0iLlxsaWJzbm1wX2RsbFxsaWJzbm1wX2RsbC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJuZXRzbm1wbWlicyI9Ii5cbmV0c25tcG1pYnNcbmV0c25tcG1pYnMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wYnVsa2dldCI9Ii5cc25tcGJ1bGtnZXRcc25tcGJ1bGtnZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wYnVsa3dhbGsiPSIuXHNubXBidWxrd2Fsa1xzbm1wYnVsa3dhbGsuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wZCI9Ii5cc25tcGRcc25tcGQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJhZ2VudA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIG5ldHNubXBtaWJzDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcGRlbHRhIj0iLlxzbm1wZGVsdGFcc25tcGRlbHRhLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcGRmIj0iLlxzbm1wZGZcc25tcGRmLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcGdldCI9Ii5cc25tcGdldFxzbm1wZ2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcGdldG5leHQiPSIuXHNubXBnZXRuZXh0XHNubXBnZXRuZXh0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcG5ldHN0YXQiPSIuXHNubXBuZXRzdGF0XHNubXBuZXRzdGF0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHNldCI9Ii5cc25tcHNldFxzbm1wc2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHN0YXR1cyI9Ii5cc25tcHN0YXR1c1xzbm1wc3RhdHVzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHRhYmxlIj0iLlxzbm1wdGFibGVcc25tcHRhYmxlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHRlc3QiPSIuXHNubXB0ZXN0XHNubXB0ZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHRyYW5zbGF0ZSI9Ii5cc25tcHRyYW5zbGF0ZVxzbm1wdHJhbnNsYXRlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHRyYXAiPSIuXHNubXB0cmFwXHNubXB0cmFwLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcHRyYXBkIj0iLlxzbm1wdHJhcGRcc25tcHRyYXBkLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGliYWdlbnQNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJuZXRzbm1wdHJhcGQNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBuZXRzbm1wbWlicw0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXB1c20iPSIuXHNubXB1c21cc25tcHVzbS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXB2YWNtIj0iLlxzbm1wdmFjbVxzbm1wdmFjbS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXB3YWxrIj0iLlxzbm1wd2Fsa1xzbm1wd2Fsay5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorR2xvYmFsOg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08Mz4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQpkaWZmIC0tZ2l0IGEvd2luMzIvd2luMzJzZGsuZHN3IGIvd2luMzIvd2luMzJzZGsuZHN3CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2M2Y2JhLi4wMDAwMDAwCi0tLSBhL3dpbjMyL3dpbjMyc2RrLmRzdworKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi1NaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJhZ2VudCI9Ii5cbGliYWdlbnRcbGliYWdlbnQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGliaGVscGVycyI9Ii5cbGliaGVscGVyc1xsaWJoZWxwZXJzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYnNubXAiPSIuXGxpYnNubXBcbGlic25tcC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJuZXRzbm1wbWlic3NkayI9Ii5cbmV0c25tcG1pYnNzZGtcbmV0c25tcG1pYnNzZGsuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGlibmV0c25tcHRyYXBkIj0iLlxsaWJuZXRzbm1wdHJhcGRcbGlibmV0c25tcHRyYXBkLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImVuY29kZV9rZXljaGFuZ2UiPSIuXGVuY29kZV9rZXljaGFuZ2VcZW5jb2RlX2tleWNoYW5nZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcGJ1bGtnZXQiPSIuXHNubXBidWxrZ2V0XHNubXBidWxrZ2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wYnVsa3dhbGsiPSIuXHNubXBidWxrd2Fsa1xzbm1wYnVsa3dhbGsuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBkc2RrIj0iLlxzbm1wZHNka1xzbm1wZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYmFnZW50DQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGliaGVscGVycw0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIG5ldHNubXBtaWJzc2RrDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wZGVsdGEiPSIuXHNubXBkZWx0YVxzbm1wZGVsdGEuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBkZiI9Ii5cc25tcGRmXHNubXBkZi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcGdldCI9Ii5cc25tcGdldFxzbm1wZ2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wZ2V0bmV4dCI9Ii5cc25tcGdldG5leHRcc25tcGdldG5leHQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBuZXRzdGF0Ij0iLlxzbm1wbmV0c3RhdFxzbm1wbmV0c3RhdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHNldCI9Ii5cc25tcHNldFxzbm1wc2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wc3RhdHVzIj0iLlxzbm1wc3RhdHVzXHNubXBzdGF0dXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXB0YWJsZSI9Ii5cc25tcHRhYmxlXHNubXB0YWJsZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHRlc3QiPSIuXHNubXB0ZXN0XHNubXB0ZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wdHJhbnNsYXRlIj0iLlxzbm1wdHJhbnNsYXRlXHNubXB0cmFuc2xhdGUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXB0cmFwIj0iLlxzbm1wdHJhcFxzbm1wdHJhcC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHRyYXBkIj0iLlxzbm1wdHJhcGRcc25tcHRyYXBkLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGliYWdlbnQNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJoZWxwZXJzDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbmV0c25tcG1pYnNzZGsNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJuZXRzbm1wdHJhcGQNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXB1c20iPSIuXHNubXB1c21cc25tcHVzbS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHZhY20iPSIuXHNubXB2YWNtXHNubXB2YWNtLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wd2FsayI9Ii5cc25tcHdhbGtcc25tcHdhbGsuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotR2xvYmFsOg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08Mz4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQo=